From 476c3d7b077bd69bb0ca1fdf1f276da75d62d069 Mon Sep 17 00:00:00 2001 From: Sandro La Bruzzo Date: Tue, 2 Oct 2018 10:37:54 +0200 Subject: [PATCH 001/449] added d-net pace core module and ignored target folder --- dnet-pace-core/pom.xml | 70 ++++ .../AbstractClusteringFunction.java | 44 +++ .../eu/dnetlib/pace/clustering/Acronyms.java | 47 +++ .../BlacklistAwareClusteringCombiner.java | 59 ++++ .../dnetlib/pace/clustering/Clustering.java | 5 + .../pace/clustering/ClusteringCombiner.java | 29 ++ .../pace/clustering/ClusteringFunction.java | 15 + .../dnetlib/pace/clustering/FieldFilter.java | 48 +++ .../pace/clustering/ImmutableFieldValue.java | 24 ++ .../pace/clustering/LowercaseClustering.java | 34 ++ .../dnetlib/pace/clustering/NGramUtils.java | 20 ++ .../dnetlib/pace/clustering/NgramPairs.java | 33 ++ .../eu/dnetlib/pace/clustering/Ngrams.java | 43 +++ .../pace/clustering/PersonClustering.java | 69 ++++ .../dnetlib/pace/clustering/PersonHash.java | 30 ++ .../clustering/RandomClusteringFunction.java | 18 + .../pace/clustering/SortedNgramPairs.java | 28 ++ .../clustering/SpaceTrimmingFieldValue.java | 27 ++ .../dnetlib/pace/clustering/SuffixPrefix.java | 38 ++ .../pace/clustering/UrlClustering.java | 46 +++ .../pace/common/AbstractPaceFunctions.java | 167 +++++++++ .../pace/condition/AbstractCondition.java | 52 +++ .../pace/condition/AlwaysTrueCondition.java | 25 ++ .../dnetlib/pace/condition/ConditionAlgo.java | 27 ++ .../dnetlib/pace/condition/DoiExactMatch.java | 27 ++ .../eu/dnetlib/pace/condition/ExactMatch.java | 43 +++ .../pace/condition/ExactMatchIgnoreCase.java | 34 ++ .../pace/condition/MustBeDifferent.java | 56 +++ .../eu/dnetlib/pace/condition/PidMatch.java | 52 +++ .../eu/dnetlib/pace/condition/SizeMatch.java | 56 +++ .../pace/condition/TitleVersionMatch.java | 35 ++ .../eu/dnetlib/pace/condition/YearMatch.java | 59 ++++ .../java/eu/dnetlib/pace/config/Algo.java | 46 +++ .../java/eu/dnetlib/pace/config/Cond.java | 28 ++ .../java/eu/dnetlib/pace/config/Config.java | 59 ++++ .../eu/dnetlib/pace/config/DedupConfig.java | 131 +++++++ .../eu/dnetlib/pace/config/PaceConfig.java | 104 ++++++ .../java/eu/dnetlib/pace/config/Type.java | 5 + .../java/eu/dnetlib/pace/config/WfConfig.java | 254 ++++++++++++++ .../pace/distance/AbstractDistance.java | 15 + .../distance/ConfigurableDistanceAlgo.java | 26 ++ .../eu/dnetlib/pace/distance/Distance.java | 9 + .../dnetlib/pace/distance/DistanceAlgo.java | 15 + .../dnetlib/pace/distance/DistanceScorer.java | 101 ++++++ .../pace/distance/PaceDocumentDistance.java | 12 + .../distance/SecondStringDistanceAlgo.java | 100 ++++++ .../pace/distance/algo/AlwaysMatch.java | 31 ++ .../pace/distance/algo/ExactMatch.java | 31 ++ .../pace/distance/algo/JaroWinkler.java | 35 ++ .../pace/distance/algo/JaroWinklerTitle.java | 36 ++ .../pace/distance/algo/Level2JaroWinkler.java | 26 ++ .../distance/algo/Level2JaroWinklerTitle.java | 41 +++ .../pace/distance/algo/Level2Levenstein.java | 26 ++ .../pace/distance/algo/Levenstein.java | 26 ++ .../pace/distance/algo/LevensteinDate.java | 25 ++ .../pace/distance/algo/LevensteinTitle.java | 45 +++ .../pace/distance/algo/MustBeDifferent.java | 31 ++ .../pace/distance/algo/NullDistanceAlgo.java | 22 ++ .../pace/distance/algo/SortedJaroWinkler.java | 52 +++ .../algo/SortedLevel2JaroWinkler.java | 52 +++ .../algo/SortedSecondStringDistanceAlgo.java | 43 +++ .../distance/algo/SubStringLevenstein.java | 90 +++++ .../pace/distance/algo/UrlMatcher.java | 48 +++ .../pace/distance/algo/YearLevenstein.java | 37 ++ .../pace/distance/eval/ConditionEval.java | 57 +++ .../pace/distance/eval/ConditionEvalMap.java | 38 ++ .../pace/distance/eval/DistanceEval.java | 57 +++ .../pace/distance/eval/DistanceEvalMap.java | 32 ++ .../pace/distance/eval/ScoreResult.java | 55 +++ .../eu/dnetlib/pace/model/AbstractField.java | 74 ++++ .../eu/dnetlib/pace/model/ClusteringDef.java | 77 +++++ .../java/eu/dnetlib/pace/model/CondDef.java | 61 ++++ .../java/eu/dnetlib/pace/model/Document.java | 39 +++ .../java/eu/dnetlib/pace/model/Field.java | 54 +++ .../java/eu/dnetlib/pace/model/FieldDef.java | 163 +++++++++ .../java/eu/dnetlib/pace/model/FieldList.java | 17 + .../eu/dnetlib/pace/model/FieldListImpl.java | 327 ++++++++++++++++++ .../eu/dnetlib/pace/model/FieldValue.java | 23 ++ .../eu/dnetlib/pace/model/FieldValueImpl.java | 126 +++++++ .../eu/dnetlib/pace/model/MapDocument.java | 146 ++++++++ .../pace/model/MapDocumentComparator.java | 50 +++ .../pace/model/MapDocumentSerializer.java | 101 ++++++ .../java/eu/dnetlib/pace/model/Person.java | 155 +++++++++ .../pace/model/PersonComparatorUtils.java | 118 +++++++ .../eu/dnetlib/pace/model/adaptor/Pid.java | 57 +++ .../pace/model/adaptor/PidOafSerialiser.java | 50 +++ .../java/eu/dnetlib/pace/model/gt/Author.java | 129 +++++++ .../eu/dnetlib/pace/model/gt/AuthorSet.java | 37 ++ .../eu/dnetlib/pace/model/gt/Authors.java | 54 +++ .../eu/dnetlib/pace/model/gt/CoAuthor.java | 50 +++ .../eu/dnetlib/pace/model/gt/CoAuthorSet.java | 36 ++ .../pace/model/gt/CoAuthorSetLite.java | 40 +++ .../eu/dnetlib/pace/model/gt/CoAuthors.java | 78 +++++ .../eu/dnetlib/pace/model/gt/GTAuthor.java | 197 +++++++++++ .../pace/model/gt/GTAuthorOafSerialiser.java | 104 ++++++ .../java/eu/dnetlib/pace/model/gt/Group.java | 44 +++ .../dnetlib/pace/model/gt/InvertedAuthor.java | 41 +++ .../java/eu/dnetlib/pace/model/gt/Match.java | 31 ++ .../java/eu/dnetlib/pace/model/gt/Result.java | 72 ++++ .../dnetlib/pace/model/gt/ScoredResult.java | 26 ++ .../eu/dnetlib/pace/model/gt/Subjects.java | 10 + .../eu/dnetlib/pace/model/gt/SubjectsMap.java | 35 ++ .../java/eu/dnetlib/pace/util/Capitalise.java | 15 + .../dnetlib/pace/util/DotAbbreviations.java | 10 + .../eu/dnetlib/pace/config/dedupConfig.st | 23 ++ .../eu/dnetlib/pace/config/name_particles.txt | 7 + .../dnetlib/pace/config/ngram_blacklist.txt | 0 .../eu/dnetlib/pace/config/stopwords_en.txt | 139 ++++++++ .../dnetlib/pace/config/title_blacklist.txt | 14 + .../eu/dnetlib/pace/AbstractPaceTest.java | 32 ++ .../clustering/ClusteringFunctionTest.java | 108 ++++++ .../eu/dnetlib/pace/config/ConfigTest.java | 24 ++ .../pace/distance/DistanceAlgoTest.java | 38 ++ .../PersonComparatorUtilsNGramsTest.java | 126 +++++++ .../PersonComparatorUtilsSimilarityTest.java | 89 +++++ .../eu/dnetlib/pace/model/PersonTest.java | 111 ++++++ .../eu/dnetlib/pace/clustering/gt.author.json | 1 + .../dnetlib/pace/config/result.pace.conf.json | 53 +++ .../dnetlib/pace/config/title_blacklist.txt | 15 + 119 files changed, 6628 insertions(+) create mode 100644 dnet-pace-core/pom.xml create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/AbstractClusteringFunction.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/Acronyms.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/BlacklistAwareClusteringCombiner.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/Clustering.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringCombiner.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringFunction.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/FieldFilter.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ImmutableFieldValue.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/LowercaseClustering.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/NGramUtils.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/NgramPairs.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/Ngrams.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonClustering.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonHash.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/RandomClusteringFunction.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SortedNgramPairs.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SpaceTrimmingFieldValue.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SuffixPrefix.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/UrlClustering.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/AbstractCondition.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/AlwaysTrueCondition.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ConditionAlgo.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/DoiExactMatch.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ExactMatch.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ExactMatchIgnoreCase.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/MustBeDifferent.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/PidMatch.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/SizeMatch.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/TitleVersionMatch.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/YearMatch.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Algo.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Cond.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Config.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Type.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/config/WfConfig.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/AbstractDistance.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/ConfigurableDistanceAlgo.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/Distance.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceAlgo.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceScorer.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/PaceDocumentDistance.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/SecondStringDistanceAlgo.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/AlwaysMatch.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/ExactMatch.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinkler.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerTitle.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Level2JaroWinkler.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Level2JaroWinklerTitle.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Level2Levenstein.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Levenstein.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinDate.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinTitle.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/MustBeDifferent.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/NullDistanceAlgo.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedJaroWinkler.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedLevel2JaroWinkler.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedSecondStringDistanceAlgo.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SubStringLevenstein.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/UrlMatcher.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/YearLevenstein.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/ConditionEval.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/ConditionEvalMap.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/DistanceEval.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/DistanceEvalMap.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/ScoreResult.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/AbstractField.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/CondDef.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/Document.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/Field.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldList.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldListImpl.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldValue.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldValueImpl.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/MapDocument.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/MapDocumentComparator.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/MapDocumentSerializer.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/Person.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/PersonComparatorUtils.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/adaptor/Pid.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/adaptor/PidOafSerialiser.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/Author.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/AuthorSet.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/Authors.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/CoAuthor.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/CoAuthorSet.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/CoAuthorSetLite.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/CoAuthors.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/GTAuthor.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/GTAuthorOafSerialiser.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/Group.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/InvertedAuthor.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/Match.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/Result.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/ScoredResult.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/Subjects.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/SubjectsMap.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/util/Capitalise.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/util/DotAbbreviations.java create mode 100644 dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/dedupConfig.st create mode 100644 dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/name_particles.txt create mode 100644 dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/ngram_blacklist.txt create mode 100644 dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_en.txt create mode 100644 dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/title_blacklist.txt create mode 100644 dnet-pace-core/src/test/java/eu/dnetlib/pace/AbstractPaceTest.java create mode 100644 dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java create mode 100644 dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java create mode 100644 dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java create mode 100644 dnet-pace-core/src/test/java/eu/dnetlib/pace/model/PersonComparatorUtilsNGramsTest.java create mode 100644 dnet-pace-core/src/test/java/eu/dnetlib/pace/model/PersonComparatorUtilsSimilarityTest.java create mode 100644 dnet-pace-core/src/test/java/eu/dnetlib/pace/model/PersonTest.java create mode 100644 dnet-pace-core/src/test/resources/eu/dnetlib/pace/clustering/gt.author.json create mode 100644 dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/result.pace.conf.json create mode 100644 dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/title_blacklist.txt diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml new file mode 100644 index 000000000..8e0e0f741 --- /dev/null +++ b/dnet-pace-core/pom.xml @@ -0,0 +1,70 @@ + + + + eu.dnetlib + dnet45-parent + 1.0.0 + + + 4.0.0 + eu.dnetlib + dnet-pace-core + jar + 2.6.8-SNAPSHOT + + scm:svn:https://svn.driver.research-infrastructures.eu/driver/dnet45/modules/dnet-pace-core/trunk + + + + edu.cmu + secondstring + 1.0.0 + + + com.google.guava + guava + ${google.guava.version} + + + com.google.code.gson + gson + ${google.gson.version} + + + commons-lang + commons-lang + ${commons.lang.version} + + + commons-io + commons-io + ${commons.io.version} + + + commons-collections + commons-collections + ${commons.collections.version} + + + com.googlecode.protobuf-java-format + protobuf-java-format + 1.2 + + + org.antlr + stringtemplate + 3.2 + + + commons-logging + commons-logging + ${commons.logging.version} + + + junit + junit + ${junit.version} + test + + + diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/AbstractClusteringFunction.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/AbstractClusteringFunction.java new file mode 100644 index 000000000..6f29f22ce --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/AbstractClusteringFunction.java @@ -0,0 +1,44 @@ +package eu.dnetlib.pace.clustering; + +import java.util.*; +import java.util.function.Function; +import java.util.function.Predicate; +import java.util.stream.Collectors; + +import com.google.common.collect.Sets; + +import eu.dnetlib.pace.common.AbstractPaceFunctions; +import eu.dnetlib.pace.model.Field; +import org.apache.commons.lang.StringUtils; + +public abstract class AbstractClusteringFunction extends AbstractPaceFunctions implements ClusteringFunction { + + protected Map params; + + public AbstractClusteringFunction(final Map params) { + this.params = params; + } + + protected abstract Collection doApply(String s); + + @Override + public Collection apply(List fields) { + return fields.stream().filter(f -> !f.isEmpty()) + .map(Field::stringValue) + .map(this::normalize) + .map(s -> filterStopWords(s, stopwords)) + .map(this::doApply) + .map(c -> filterBlacklisted(c, ngramBlacklist)) + .flatMap(c -> c.stream()) + .filter(StringUtils::isNotBlank) + .collect(Collectors.toCollection(HashSet::new)); + } + + public Map getParams() { + return params; + } + + protected Integer param(String name) { + return params.get(name); + } +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/Acronyms.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/Acronyms.java new file mode 100644 index 000000000..1897e6a87 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/Acronyms.java @@ -0,0 +1,47 @@ +package eu.dnetlib.pace.clustering; + +import java.util.Collection; +import java.util.Map; +import java.util.Set; +import java.util.StringTokenizer; + +import com.google.common.collect.Sets; + +public class Acronyms extends AbstractClusteringFunction { + + public Acronyms(Map params) { + super(params); + } + + @Override + protected Collection doApply(String s) { + return extractAcronyms(s, param("max"), param("minLen"), param("maxLen")); + } + + private Set extractAcronyms(final String s, int maxAcronyms, int minLen, int maxLen) { + + final Set acronyms = Sets.newLinkedHashSet(); + + for (int i = 0; i < maxAcronyms; i++) { + + final StringTokenizer st = new StringTokenizer(s); + final StringBuilder sb = new StringBuilder(); + + while (st.hasMoreTokens()) { + final String token = st.nextToken(); + if (sb.length() > maxLen) { + break; + } + if (token.length() > 1 && i < token.length()) { + sb.append(token.charAt(i)); + } + } + String acronym = sb.toString(); + if (acronym.length() > minLen) { + acronyms.add(acronym); + } + } + return acronyms; + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/BlacklistAwareClusteringCombiner.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/BlacklistAwareClusteringCombiner.java new file mode 100644 index 000000000..b007853a9 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/BlacklistAwareClusteringCombiner.java @@ -0,0 +1,59 @@ +package eu.dnetlib.pace.clustering; + +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; + +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; + +import eu.dnetlib.pace.config.Config; +import eu.dnetlib.pace.model.Document; +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.FieldListImpl; +import eu.dnetlib.pace.model.MapDocument; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +public class BlacklistAwareClusteringCombiner extends ClusteringCombiner { + + private static final Log log = LogFactory.getLog(BlacklistAwareClusteringCombiner.class); + + public static Collection filterAndCombine(final MapDocument a, final Config conf, final Map> blacklists) { + + final Document filtered = new BlacklistAwareClusteringCombiner().filter(a, blacklists); + return combine(filtered, conf); + } + + private MapDocument filter(final MapDocument a, final Map> blacklists) { + final Map filtered = Maps.newHashMap(a.getFieldMap()); + if (blacklists != null) { + for (final Entry e : filtered.entrySet()) { + + final FieldListImpl fl = new FieldListImpl(); + fl.addAll(Lists.newArrayList(Iterables.filter(e.getValue(), new FieldFilter(e.getKey(), blacklists)))); + filtered.put(e.getKey(), fl); + } + } + return new MapDocument(a.getIdentifier(), filtered); + } + + /** + * Tries to match the fields in the regex blacklist. + * + * @param fieldName + * @param value + * @return true if the field matches, false otherwise + */ + protected boolean regexMatches(final String fieldName, final String value, final Map> blacklists) { + if (blacklists.containsKey(fieldName)) { + for (final String regex : blacklists.get(fieldName)) { + if (value.matches(regex)) return true; + } + } + return false; + } +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/Clustering.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/Clustering.java new file mode 100644 index 000000000..72575409f --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/Clustering.java @@ -0,0 +1,5 @@ +package eu.dnetlib.pace.clustering; + +public enum Clustering { + acronyms, ngrams, ngrampairs, sortedngrampairs, suffixprefix, spacetrimmingfieldvalue, immutablefieldvalue, personhash, personclustering, lowercase, urlclustering +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringCombiner.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringCombiner.java new file mode 100644 index 000000000..d6887050a --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringCombiner.java @@ -0,0 +1,29 @@ +package eu.dnetlib.pace.clustering; + +import java.util.Collection; +import java.util.List; + +import com.google.common.collect.Sets; + +import eu.dnetlib.pace.config.Config; +import eu.dnetlib.pace.model.ClusteringDef; +import eu.dnetlib.pace.model.Document; +import eu.dnetlib.pace.model.Field; + +public class ClusteringCombiner { + + public static Collection combine(final Document a, final Config conf) { + return new ClusteringCombiner().doCombine(a, conf.clusterings()); + } + + private Collection doCombine(final Document a, final List defs) { + final Collection res = Sets.newLinkedHashSet(); + for (final ClusteringDef cd : defs) { + for (final String fieldName : cd.getFields()) { + final Field values = a.values(fieldName); + res.addAll(cd.getClusteringFunction().apply((List) values)); + } + } + return res; + } +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringFunction.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringFunction.java new file mode 100644 index 000000000..4fe1b596e --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringFunction.java @@ -0,0 +1,15 @@ +package eu.dnetlib.pace.clustering; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +import eu.dnetlib.pace.model.Field; + +public interface ClusteringFunction { + + public Collection apply(List fields); + + public Map getParams(); + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/FieldFilter.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/FieldFilter.java new file mode 100644 index 000000000..7ede4c239 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/FieldFilter.java @@ -0,0 +1,48 @@ +package eu.dnetlib.pace.clustering; + +import java.util.List; +import java.util.Map; + +import com.google.common.base.Predicate; + +import eu.dnetlib.pace.model.Field; +import org.apache.commons.lang.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +public class FieldFilter implements Predicate { + + private static final Log log = LogFactory.getLog(FieldFilter.class); + + private Map> blacklists; + + private String filedName; + + public FieldFilter(final String fieldName, final Map> blacklists) { + this.filedName = fieldName; + this.blacklists = blacklists; + } + + @Override + public boolean apply(final Field f) { + return !regexMatches(filedName, f.stringValue(), blacklists); + } + + /** + * Tries to match the fields in the regex blacklist. + * + * @param fieldName + * @param value + * @return true if the field matches, false otherwise + */ + protected boolean regexMatches(final String fieldName, final String value, final Map> blacklists) { + if (blacklists.containsKey(fieldName)) { + final Iterable regexes = blacklists.get(fieldName); + for (final String regex : regexes) { + if (StringUtils.isBlank(regex)) return false; + if (value.matches(regex)) return true; + } + } + return false; + } +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ImmutableFieldValue.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ImmutableFieldValue.java new file mode 100644 index 000000000..988476ddd --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ImmutableFieldValue.java @@ -0,0 +1,24 @@ +package eu.dnetlib.pace.clustering; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +import com.google.common.collect.Lists; + +public class ImmutableFieldValue extends AbstractClusteringFunction { + + public ImmutableFieldValue(final Map params) { + super(params); + } + + @Override + protected Collection doApply(final String s) { + final List res = Lists.newArrayList(); + + res.add(s); + + return res; + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/LowercaseClustering.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/LowercaseClustering.java new file mode 100644 index 000000000..6d00992bd --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/LowercaseClustering.java @@ -0,0 +1,34 @@ +package eu.dnetlib.pace.clustering; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; +import eu.dnetlib.pace.model.Field; +import org.apache.commons.lang.StringUtils; + +public class LowercaseClustering extends AbstractClusteringFunction { + + public LowercaseClustering(final Map params) { + super(params); + } + + @Override + public Collection apply(List fields) { + Collection c = Sets.newLinkedHashSet(); + for(Field f : fields) { + c.addAll(doApply(f.stringValue())); + } + return c; + } + + @Override + protected Collection doApply(final String s) { + if(StringUtils.isBlank(s)) { + return Lists.newArrayList(); + } + return Lists.newArrayList(s.toLowerCase().trim()); + } +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/NGramUtils.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/NGramUtils.java new file mode 100644 index 000000000..aeb790f76 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/NGramUtils.java @@ -0,0 +1,20 @@ +package eu.dnetlib.pace.clustering; + +import java.util.Set; + +import org.apache.commons.lang.StringUtils; + +import eu.dnetlib.pace.common.AbstractPaceFunctions; + +public class NGramUtils extends AbstractPaceFunctions { + + private static final int SIZE = 100; + + private static Set stopwords = AbstractPaceFunctions.loadFromClasspath("/eu/dnetlib/pace/config/stopwords_en.txt"); + + public static String cleanupForOrdering(String s) { + NGramUtils utils = new NGramUtils(); + return (utils.filterStopWords(utils.normalize(s), stopwords) + StringUtils.repeat(" ", SIZE)).substring(0, SIZE).replaceAll(" ", ""); + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/NgramPairs.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/NgramPairs.java new file mode 100644 index 000000000..3cffa4d54 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/NgramPairs.java @@ -0,0 +1,33 @@ +package eu.dnetlib.pace.clustering; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +import com.google.common.collect.Lists; + +public class NgramPairs extends Ngrams { + + public NgramPairs(Map params) { + super(params); + } + + @Override + protected Collection doApply(String s) { + return ngramPairs(Lists.newArrayList(getNgrams(s, param("ngramLen"), param("max") * 2, 1, 2)), param("max")); + } + + protected Collection ngramPairs(final List ngrams, int maxNgrams) { + Collection res = Lists.newArrayList(); + int j = 0; + for (int i = 0; i < ngrams.size() && res.size() < maxNgrams; i++) { + if (++j >= ngrams.size()) { + break; + } + res.add(ngrams.get(i) + ngrams.get(j)); + //System.out.println("-- " + concatNgrams); + } + return res; + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/Ngrams.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/Ngrams.java new file mode 100644 index 000000000..aaba9afbf --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/Ngrams.java @@ -0,0 +1,43 @@ +package eu.dnetlib.pace.clustering; + +import java.util.Collection; +import java.util.LinkedHashSet; +import java.util.Map; +import java.util.StringTokenizer; + +public class Ngrams extends AbstractClusteringFunction { + + public Ngrams(Map params) { + super(params); + } + + @Override + protected Collection doApply(String s) { + return getNgrams(s, param("ngramLen"), param("max"), param("maxPerToken"), param("minNgramLen")); + } + + protected Collection getNgrams(String s, int ngramLen, int max, int maxPerToken, int minNgramLen) { + + final Collection ngrams = new LinkedHashSet(); + final StringTokenizer st = new StringTokenizer(s); + + while (st.hasMoreTokens()) { + final String token = st.nextToken(); + if (!token.isEmpty()) { + + for (int i = 0; i < maxPerToken && ngramLen + i <= token.length(); i++) { + String ngram = (token + " ").substring(i, ngramLen + i).trim(); + if (ngrams.size() >= max) { + return ngrams; + } + if (ngram.length() >= minNgramLen) { + ngrams.add(ngram); + } + } + } + } + //System.out.println(ngrams + " n: " + ngrams.size()); + return ngrams; + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonClustering.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonClustering.java new file mode 100644 index 000000000..d71707721 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonClustering.java @@ -0,0 +1,69 @@ +package eu.dnetlib.pace.clustering; + +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import eu.dnetlib.pace.model.FieldList; +import eu.dnetlib.pace.model.FieldValue; +import org.apache.commons.lang.StringUtils; + +import com.google.common.base.Splitter; +import com.google.common.collect.Iterables; +import com.google.common.collect.Sets; + +import eu.dnetlib.pace.common.AbstractPaceFunctions; +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.gt.Author; +import eu.dnetlib.pace.model.gt.GTAuthor; + +public class PersonClustering extends AbstractPaceFunctions implements ClusteringFunction { + + private Map params; + + private static final int MAX_TOKENS = 5; + + public PersonClustering(final Map params) { + this.params = params; + } + + @Override + public Collection apply(final List fields) { + final Set hashes = Sets.newHashSet(); + + for (final Field f : fields) { + + final GTAuthor gta = GTAuthor.fromOafJson(f.stringValue()); + + final Author a = gta.getAuthor(); + if (a.isWellFormed()) { + hashes.add(firstLC(a.getFirstname()) + a.getSecondnames().toLowerCase()); + } else { + for (final String token1 : tokens(a.getFullname())) { + for (final String token2 : tokens(a.getFullname())) { + if (!token1.equals(token2)) { + hashes.add(firstLC(token1) + token2); + } + } + } + } + } + + return hashes; + } + + private String firstLC(final String s) { + return StringUtils.substring(s, 0, 1).toLowerCase(); + } + + private Iterable tokens(final String s) { + return Iterables.limit(Splitter.on(" ").omitEmptyStrings().trimResults().split(s), MAX_TOKENS); + } + + @Override + public Map getParams() { + return params; + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonHash.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonHash.java new file mode 100644 index 000000000..42d9d5bab --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonHash.java @@ -0,0 +1,30 @@ +package eu.dnetlib.pace.clustering; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +import com.google.common.collect.Lists; + +import eu.dnetlib.pace.model.Person; + +public class PersonHash extends AbstractClusteringFunction { + + private boolean DEFAULT_AGGRESSIVE = false; + + public PersonHash(final Map params) { + super(params); + } + + @Override + protected Collection doApply(final String s) { + final List res = Lists.newArrayList(); + + final boolean aggressive = (Boolean) (getParams().containsKey("aggressive") ? getParams().get("aggressive") : DEFAULT_AGGRESSIVE); + + res.add(new Person(s, aggressive).hash()); + + return res; + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/RandomClusteringFunction.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/RandomClusteringFunction.java new file mode 100644 index 000000000..f012aacab --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/RandomClusteringFunction.java @@ -0,0 +1,18 @@ +package eu.dnetlib.pace.clustering; + +import java.util.Collection; +import java.util.Map; + +public class RandomClusteringFunction extends AbstractClusteringFunction { + + public RandomClusteringFunction(Map params) { + super(params); + } + + @Override + protected Collection doApply(String s) { + // TODO Auto-generated method stub + return null; + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SortedNgramPairs.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SortedNgramPairs.java new file mode 100644 index 000000000..56e660438 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SortedNgramPairs.java @@ -0,0 +1,28 @@ +package eu.dnetlib.pace.clustering; + +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +import com.google.common.base.Joiner; +import com.google.common.base.Splitter; +import com.google.common.collect.Lists; + +public class SortedNgramPairs extends NgramPairs { + + public SortedNgramPairs(Map params) { + super(params); + } + + @Override + protected Collection doApply(String s) { + + final List tokens = Lists.newArrayList(Splitter.on(" ").omitEmptyStrings().trimResults().split(s)); + + Collections.sort(tokens); + + return ngramPairs(Lists.newArrayList(getNgrams(Joiner.on(" ").join(tokens), param("ngramLen"), param("max") * 2, 1, 2)), param("max")); + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SpaceTrimmingFieldValue.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SpaceTrimmingFieldValue.java new file mode 100644 index 000000000..19a51d4ca --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SpaceTrimmingFieldValue.java @@ -0,0 +1,27 @@ +package eu.dnetlib.pace.clustering; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +import org.apache.commons.lang.RandomStringUtils; +import org.apache.commons.lang.StringUtils; + +import com.google.common.collect.Lists; + +public class SpaceTrimmingFieldValue extends AbstractClusteringFunction { + + public SpaceTrimmingFieldValue(final Map params) { + super(params); + } + + @Override + protected Collection doApply(final String s) { + final List res = Lists.newArrayList(); + + res.add(StringUtils.isBlank(s) ? RandomStringUtils.random(getParams().get("randomLength")) : s.toLowerCase().replaceAll("\\s+", "")); + + return res; + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SuffixPrefix.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SuffixPrefix.java new file mode 100644 index 000000000..3ed336af4 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SuffixPrefix.java @@ -0,0 +1,38 @@ +package eu.dnetlib.pace.clustering; + +import java.util.Collection; +import java.util.Map; +import java.util.Set; + +import com.google.common.collect.Sets; + +public class SuffixPrefix extends AbstractClusteringFunction { + + public SuffixPrefix(Map params) { + super(params); + } + + @Override + protected Collection doApply(String s) { + return suffixPrefix(s, param("len"), param("max")); + } + + private Collection suffixPrefix(String s, int len, int max) { + final Set bigrams = Sets.newLinkedHashSet(); + int i = 0; + while (++i < s.length() && bigrams.size() < max) { + int j = s.indexOf(" ", i); + + int offset = j + len + 1 < s.length() ? j + len + 1 : s.length(); + + if (j - len > 0) { + String bigram = s.substring(j - len, offset).replaceAll(" ", "").trim(); + if (bigram.length() >= 4) { + bigrams.add(bigram); + } + } + } + return bigrams; + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/UrlClustering.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/UrlClustering.java new file mode 100644 index 000000000..196281444 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/UrlClustering.java @@ -0,0 +1,46 @@ +package eu.dnetlib.pace.clustering; + +import eu.dnetlib.pace.common.AbstractPaceFunctions; +import eu.dnetlib.pace.model.Field; + +import java.net.MalformedURLException; +import java.net.URL; +import java.util.Collection; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +public class UrlClustering extends AbstractPaceFunctions implements ClusteringFunction { + + protected Map params; + + public UrlClustering(final Map params) { + this.params = params; + } + + @Override + public Collection apply(List fields) { + return fields.stream() + .filter(f -> !f.isEmpty()) + .map(Field::stringValue) + .map(this::asUrl) + .map(URL::getHost) + .collect(Collectors.toCollection(HashSet::new)); + } + + @Override + public Map getParams() { + return null; + } + + private URL asUrl(final String value) { + try { + return new URL(value); + } catch (MalformedURLException e) { + // should not happen as checked by pace typing + throw new IllegalStateException("invalid URL: " + value); + } + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java new file mode 100644 index 000000000..9174bed19 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java @@ -0,0 +1,167 @@ +package eu.dnetlib.pace.common; + +import java.text.Normalizer; +import java.util.Collection; +import java.util.List; +import java.util.Set; +import java.util.StringTokenizer; + +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang.StringUtils; + +import com.google.common.base.Joiner; +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; + +import eu.dnetlib.pace.clustering.NGramUtils; +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.FieldList; +import eu.dnetlib.pace.model.FieldListImpl; + +/** + * Set of common functions + * + * @author claudio + * + */ +public abstract class AbstractPaceFunctions { + + protected static Set stopwords = loadFromClasspath("/eu/dnetlib/pace/config/stopwords_en.txt"); + + protected static Set ngramBlacklist = loadFromClasspath("/eu/dnetlib/pace/config/ngram_blacklist.txt"); + + private static final String alpha = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 "; + private static final String aliases_from = "⁰¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ⁿ₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎"; + private static final String aliases_to = "0123456789+-=()n0123456789+-=()"; + + protected final static FieldList EMPTY_FIELD = new FieldListImpl(); + + protected String concat(final List l) { + return Joiner.on(" ").skipNulls().join(l); + } + + protected String cleanup(final String s) { + final String s1 = nfd(s); + final String s2 = fixAliases(s1); + final String s3 = s2.replaceAll("–", " "); + final String s4 = s3.replaceAll("&", " "); + final String s5 = s4.replaceAll(""", " "); + final String s6 = s5.replaceAll("−", " "); + final String s7 = s6.replaceAll("([0-9]+)", " $1 "); + final String s8 = s7.replaceAll("[^\\p{ASCII}]|\\p{Punct}", " "); + final String s9 = s8.replaceAll("\\n", " "); + final String s10 = s9.replaceAll("(?m)\\s+", " "); + final String s11 = s10.trim(); + return s11; + } + + protected String finalCleanup(final String s) { + return s.toLowerCase(); + } + + protected boolean checkNumbers(final String a, final String b) { + final String numbersA = getNumbers(a); + final String numbersB = getNumbers(b); + final String romansA = getRomans(a); + final String romansB = getRomans(b); + return !numbersA.equals(numbersB) || !romansA.equals(romansB); + } + + protected String getRomans(final String s) { + final StringBuilder sb = new StringBuilder(); + for (final String t : s.split(" ")) { + sb.append(isRoman(t) ? t : ""); + } + return sb.toString(); + } + + protected boolean isRoman(final String s) { + return s.replaceAll("^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$", "qwertyuiop").equals("qwertyuiop"); + } + + protected String getNumbers(final String s) { + return s.replaceAll("\\D", ""); + } + + protected String fixAliases(final String s) { + final StringBuilder sb = new StringBuilder(); + for (final char ch : Lists.charactersOf(s)) { + final int i = StringUtils.indexOf(aliases_from, ch); + sb.append(i >= 0 ? aliases_to.charAt(i) : ch); + } + return sb.toString(); + } + + protected String removeSymbols(final String s) { + final StringBuilder sb = new StringBuilder(); + + for (final char ch : Lists.charactersOf(s)) { + sb.append(StringUtils.contains(alpha, ch) ? ch : " "); + } + return sb.toString().replaceAll("\\s+", " "); + } + + protected String getFirstValue(final Field values) { + return (values != null) && !Iterables.isEmpty(values) ? Iterables.getFirst(values, EMPTY_FIELD).stringValue() : ""; + } + + protected boolean notNull(final String s) { + return s != null; + } + + // /////////////////////// + + protected String normalize(final String s) { + return nfd(s).toLowerCase() + // do not compact the regexes in a single expression, would cause StackOverflowError in case of large input strings + .replaceAll("(\\W)+", " ") + .replaceAll("(\\p{InCombiningDiacriticalMarks})+", " ") + .replaceAll("(\\p{Punct})+", " ") + .replaceAll("(\\d)+", " ") + .replaceAll("(\\n)+", " ") + .trim(); + } + + private String nfd(final String s) { + return Normalizer.normalize(s, Normalizer.Form.NFD); + } + + protected String filterStopWords(final String s, final Set stopwords) { + final StringTokenizer st = new StringTokenizer(s); + final StringBuilder sb = new StringBuilder(); + while (st.hasMoreTokens()) { + final String token = st.nextToken(); + if (!stopwords.contains(token)) { + sb.append(token); + sb.append(" "); + } + } + return sb.toString().trim(); + } + + protected Collection filterBlacklisted(final Collection set, final Set ngramBlacklist) { + final Set newset = Sets.newLinkedHashSet(); + for (final String s : set) { + if (!ngramBlacklist.contains(s)) { + newset.add(s); + } + } + return newset; + } + + // //////////////////// + + public static Set loadFromClasspath(final String classpath) { + final Set h = Sets.newHashSet(); + try { + for (final String s : IOUtils.readLines(NGramUtils.class.getResourceAsStream(classpath))) { + h.add(s); + } + } catch (final Throwable e) { + return Sets.newHashSet(); + } + return h; + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/AbstractCondition.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/AbstractCondition.java new file mode 100644 index 000000000..bbfac97b9 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/AbstractCondition.java @@ -0,0 +1,52 @@ +package eu.dnetlib.pace.condition; + +import java.util.List; +import eu.dnetlib.pace.common.AbstractPaceFunctions; +import eu.dnetlib.pace.config.Cond; +import eu.dnetlib.pace.distance.eval.ConditionEval; +import eu.dnetlib.pace.distance.eval.ConditionEvalMap; +import eu.dnetlib.pace.model.Document; +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.FieldDef; + +/** + * Abstract conditions needs a list of field names. + * + * @author claudio + * + */ +public abstract class AbstractCondition extends AbstractPaceFunctions implements ConditionAlgo { + + protected Cond cond; + + protected List fields; + + public AbstractCondition(final Cond cond, final List fields) { + this.cond = cond; + this.fields = fields; + } + + protected abstract ConditionEval verify(FieldDef fd, Field a, Field b); + + @Override + public ConditionEvalMap verify(final Document a, final Document b) { + final ConditionEvalMap res = new ConditionEvalMap(); + for (final FieldDef fd : getFields()) { + + final Field va = a.values(fd.getName()); + final Field vb = b.values(fd.getName()); + + if ((va.isEmpty() || vb.isEmpty()) && fd.isIgnoreMissing()) { + res.put(fd.getName(), new ConditionEval(cond, va, vb, 0)); + } else { + res.put(fd.getName(), verify(fd, va, vb)); + } + } + return res; + } + + public List getFields() { + return fields; + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/AlwaysTrueCondition.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/AlwaysTrueCondition.java new file mode 100644 index 000000000..f9ff2b60b --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/AlwaysTrueCondition.java @@ -0,0 +1,25 @@ +package eu.dnetlib.pace.condition; + +import java.util.List; +import eu.dnetlib.pace.config.Cond; +import eu.dnetlib.pace.distance.eval.ConditionEval; +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.FieldDef; + +/** + * Default always true condition + * + * @author claudio + */ +public class AlwaysTrueCondition extends AbstractCondition { + + public AlwaysTrueCondition(final Cond cond, final List fields) { + super(cond, fields); + } + + @Override + protected ConditionEval verify(final FieldDef fd, final Field a, final Field b) { + return new ConditionEval(cond, a, b, 1); + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ConditionAlgo.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ConditionAlgo.java new file mode 100644 index 000000000..ceb7c73cc --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ConditionAlgo.java @@ -0,0 +1,27 @@ +package eu.dnetlib.pace.condition; + +import java.util.Map; + +import eu.dnetlib.pace.distance.eval.ConditionEvalMap; +import eu.dnetlib.pace.model.Document; + +/** + * Allows to express general conditions to be satisfied or not between two Documents. + * + * @author claudio + */ +public interface ConditionAlgo { + + /** + * Verify a condition. + * + * @param a + * the Document a + * @param b + * the Document b + * @return 0 when condition cannot be verified (ignoremissing = true). Positive int when the condition is verified. Negative int when + * the condition is not verified. + */ + public abstract ConditionEvalMap verify(Document a, Document b); + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/DoiExactMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/DoiExactMatch.java new file mode 100644 index 000000000..25b1a01cd --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/DoiExactMatch.java @@ -0,0 +1,27 @@ +package eu.dnetlib.pace.condition; + +import java.util.List; + +import eu.dnetlib.pace.config.Cond; +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.FieldDef; + +/** + * The Class ExactMatch. + * + * @author claudio + */ +public class DoiExactMatch extends ExactMatchIgnoreCase { + + public final String PREFIX = "(http:\\/\\/dx\\.doi\\.org\\/)|(doi:)"; + + public DoiExactMatch(final Cond cond, final List fields) { + super(cond, fields); + } + + @Override + protected String getValue(final Field f) { + return super.getValue(f).replaceAll(PREFIX, ""); + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ExactMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ExactMatch.java new file mode 100644 index 000000000..4f0f37188 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ExactMatch.java @@ -0,0 +1,43 @@ +package eu.dnetlib.pace.condition; + +import java.util.List; + +import eu.dnetlib.pace.config.Cond; +import eu.dnetlib.pace.distance.eval.ConditionEval; +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.FieldDef; +import org.apache.commons.lang.StringUtils; + +/** + * The Class ExactMatch. + * + * @author claudio + */ +public class ExactMatch extends AbstractCondition { + + public ExactMatch(final Cond cond, final List fields) { + super(cond, fields); + } + + @Override + protected ConditionEval verify(final FieldDef fd, final Field a, final Field b) { + + final String fa = getValue(a); + final String fb = getValue(b); + + int res; + + if (StringUtils.isBlank(fa) && StringUtils.isBlank(fb)) { + res = 0; + } else { + res = fa.equals(fb) ? 1 : -1; + } + + return new ConditionEval(cond, a, b, res); + } + + protected String getValue(final Field f) { + return getFirstValue(f); + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ExactMatchIgnoreCase.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ExactMatchIgnoreCase.java new file mode 100644 index 000000000..8baad5b24 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ExactMatchIgnoreCase.java @@ -0,0 +1,34 @@ +package eu.dnetlib.pace.condition; + +import java.util.List; + +import eu.dnetlib.pace.config.Cond; +import eu.dnetlib.pace.distance.eval.ConditionEval; +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.FieldDef; + +/** + * The Class ExactMatch. + * + * @author claudio + */ +public class ExactMatchIgnoreCase extends AbstractCondition { + + public ExactMatchIgnoreCase(final Cond cond, final List fields) { + super(cond, fields); + } + + @Override + protected ConditionEval verify(final FieldDef fd, final Field a, final Field b) { + + final String fa = getValue(a); + final String fb = getValue(b); + + return new ConditionEval(cond, a, b, fa.equalsIgnoreCase(fb) ? 1 : -1); + } + + protected String getValue(final Field f) { + return getFirstValue(f); + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/MustBeDifferent.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/MustBeDifferent.java new file mode 100644 index 000000000..bc99a4cc5 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/MustBeDifferent.java @@ -0,0 +1,56 @@ +package eu.dnetlib.pace.condition; + +import java.util.List; + +import com.google.common.collect.Iterables; +import eu.dnetlib.pace.config.Cond; +import eu.dnetlib.pace.distance.eval.ConditionEval; +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.FieldDef; + +/** + * Returns true if the field values are different. + * + * @author claudio + */ +public class MustBeDifferent extends AbstractCondition { + + /** + * Instantiates a new size match. + * + * @param fields the fields + */ + public MustBeDifferent(final Cond cond, final List fields) { + super(cond, fields); + } + + /* + * (non-Javadoc) + * + * @see eu.dnetlib.pace.condition.AbstractCondition#verify(eu.dnetlib.pace.model.FieldDef, java.util.List, java.util.List) + */ + @Override + protected ConditionEval verify(final FieldDef fd, final Field a, final Field b) { + + final String fa = getValue(a); + final String fb = getValue(b); + + return new ConditionEval(cond, a, b, fa.equals(fb) ? -1 : 1); + + } + + protected String getValue(final Field f) { + return getFirstValue(f); + } + + /** + * Checks if is empty. + * + * @param a the a + * @return true, if is empty + */ + protected boolean isEmpty(final Iterable a) { + return (a == null) || Iterables.isEmpty(a); + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/PidMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/PidMatch.java new file mode 100644 index 000000000..4f9e0423d --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/PidMatch.java @@ -0,0 +1,52 @@ +package eu.dnetlib.pace.condition; + +import java.util.List; + +import eu.dnetlib.pace.config.Cond; +import eu.dnetlib.pace.distance.eval.ConditionEval; +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.FieldDef; +import eu.dnetlib.pace.model.FieldList; +import eu.dnetlib.pace.model.adaptor.Pid; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * The Class PidMatch. + * + * @author claudio + */ +public class PidMatch extends AbstractCondition { + + private static final Log log = LogFactory.getLog(PidMatch.class); + + public PidMatch(final Cond cond, final List fields) { + super(cond, fields); + } + + @Override + protected ConditionEval verify(final FieldDef fd, final Field a, final Field b) { + + final List sa = ((FieldList) a).stringList(); + final List sb = ((FieldList) b).stringList(); + + final List pal = Pid.fromOafJson(sa); + final List pbl = Pid.fromOafJson(sb); + + int result = 0; + for(Pid pa : pal) { + final String ta = pa.getType(); + + for(Pid pb : pbl) { + final String tb = pb.getType(); + + if (tb.equalsIgnoreCase(ta)) { + result += pa.getValue().equalsIgnoreCase(pb.getValue()) ? 1 : -1; + } + } + } + + return new ConditionEval(cond, a, b, result); + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/SizeMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/SizeMatch.java new file mode 100644 index 000000000..ae6e94037 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/SizeMatch.java @@ -0,0 +1,56 @@ +package eu.dnetlib.pace.condition; + +import java.util.List; + +import com.google.common.collect.Iterables; + +import eu.dnetlib.pace.config.Cond; +import eu.dnetlib.pace.distance.eval.ConditionEval; +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.FieldDef; + +/** + * Returns true if the number of values in the fields is the same. + * + * @author claudio + */ +public class SizeMatch extends AbstractCondition { + + /** + * Instantiates a new size match. + * + * @param fields + * the fields + */ + public SizeMatch(final Cond cond, final List fields) { + super(cond, fields); + } + + /* + * (non-Javadoc) + * + * @see eu.dnetlib.pace.condition.AbstractCondition#verify(eu.dnetlib.pace.model.FieldDef, java.util.List, java.util.List) + */ + @Override + protected ConditionEval verify(final FieldDef fd, final Field a, final Field b) { + + // if (a.isEmpty() & b.isEmpty()) return 1; + // + // if (a.isEmpty()) return -1; + // if (b.isEmpty()) return -1; + + return new ConditionEval(cond, a, b, Iterables.size(a) == Iterables.size(b) ? 1 : -1); + } + + /** + * Checks if is empty. + * + * @param a + * the a + * @return true, if is empty + */ + protected boolean isEmpty(final Iterable a) { + return (a == null) || Iterables.isEmpty(a); + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/TitleVersionMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/TitleVersionMatch.java new file mode 100644 index 000000000..41a617aa5 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/TitleVersionMatch.java @@ -0,0 +1,35 @@ +package eu.dnetlib.pace.condition; + +import java.util.List; + +import eu.dnetlib.pace.config.Cond; +import eu.dnetlib.pace.distance.eval.ConditionEval; +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.FieldDef; + +/** + * Returns true if the titles in the given documents contains the same numbers, false otherwise. + * + * @author claudio + * + */ +public class TitleVersionMatch extends AbstractCondition { + + public TitleVersionMatch(final Cond cond, final List fields) { + super(cond, fields); + } + + @Override + protected ConditionEval verify(final FieldDef fd, final Field a, final Field b) { + final String valueA = getFirstValue(a); + final String valueB = getFirstValue(b); + + return new ConditionEval(cond, a, b, notNull(valueA) && notNull(valueB) && !checkNumbers(valueA, valueB) ? 1 : -1); + } + + @Override + public String toString() { + return getClass().getSimpleName() + ":" + super.toString(); + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/YearMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/YearMatch.java new file mode 100644 index 000000000..89718426c --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/YearMatch.java @@ -0,0 +1,59 @@ +package eu.dnetlib.pace.condition; + +import java.util.List; + +import eu.dnetlib.pace.config.Cond; +import eu.dnetlib.pace.distance.eval.ConditionEval; +import org.apache.commons.lang.StringUtils; + +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.FieldDef; + +/** + * Returns true if the year of the date field in the given documents are the same, false when any of the two is invalid or it's missing. + * + * @author claudio + */ +public class YearMatch extends AbstractCondition { + + private int limit = 4; + + public YearMatch(final Cond cond, final List fields) { + super(cond, fields); + } + + // @Override + // public boolean verify(final Document a, final Document b) { + // boolean res = true; + // for (FieldDef fd : getFields()) { + // + // } + // + // return res; + // } + + @Override + protected ConditionEval verify(final FieldDef fd, final Field a, final Field b) { + final String valueA = getNumbers(getFirstValue(a)); + final String valueB = getNumbers(getFirstValue(b)); + + final boolean lengthMatch = checkLength(valueA) && checkLength(valueB); + final boolean onemissing = valueA.isEmpty() || valueB.isEmpty(); + + return new ConditionEval(cond, a, b, lengthMatch && valueA.equals(valueB) || onemissing ? 1 : -1); + } + + protected boolean checkLength(final String s) { + return s.length() == limit; + } + + protected String getFirstValue(final Field value) { + return (value != null) && !value.isEmpty() ? StringUtils.left(value.stringValue(), limit) : ""; + } + + @Override + public String toString() { + return getClass().getSimpleName() + ":" + super.toString(); + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Algo.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Algo.java new file mode 100644 index 000000000..cb2e434b6 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Algo.java @@ -0,0 +1,46 @@ +package eu.dnetlib.pace.config; + +/** + * Enumerates the distance Algos. + */ +public enum Algo { + + /** The Jaro winkler. */ + JaroWinkler, + /** The Jaro winkler title. */ + JaroWinklerTitle, + /** The Levenstein. */ + Levenstein, + /** The Levenstein distance for title matching */ + LevensteinTitle, + /** The Level2 jaro winkler. */ + Level2JaroWinkler, + /** The Level2 jaro winkler for title matching */ + Level2JaroWinklerTitle, + /** The Level2 levenstein. */ + Level2Levenstein, + /** The Sub string levenstein. */ + SubStringLevenstein, + /** The Year levenstein. */ + YearLevenstein, + /** The Sorted jaro winkler. */ + SortedJaroWinkler, + /** The Sorted level2 jaro winkler. */ + SortedLevel2JaroWinkler, + /** Compares two urls */ + urlMatcher, + /** Exact match algo. */ + ExactMatch, + /** + * Returns 0 for equal strings, 1 for different strings. + */ + MustBeDifferent, + /** Always return 1.0 as distance. */ + AlwaysMatch, + /** Person distance */ + PersonCoAuthorSurnamesDistance, + PersonCoAnchorsDistance, + PersonDistance, + /** The Null. */ + Null +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Cond.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Cond.java new file mode 100644 index 000000000..b287fdd76 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Cond.java @@ -0,0 +1,28 @@ +package eu.dnetlib.pace.config; + +/** + * The Enum Cond. + */ +public enum Cond { + + /** The year match. */ + yearMatch, + /** The title version match. */ + titleVersionMatch, + /** The size match. */ + sizeMatch, + /** + * Returns true if the field values are different + */ + mustBeDifferent, + /** The Exact match. */ + exactMatch, + /** + * The Exact match ignore case. + */ + exactMatchIgnoreCase, + /** The Exact match specialized to recognize DOI values. */ + doiExactMatch, + /** The Exact match that checks if pid type and value are the same */ + pidMatch +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Config.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Config.java new file mode 100644 index 000000000..7498c23cf --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Config.java @@ -0,0 +1,59 @@ +package eu.dnetlib.pace.config; + +import java.util.List; +import java.util.Map; + +import eu.dnetlib.pace.condition.ConditionAlgo; +import eu.dnetlib.pace.model.ClusteringDef; +import eu.dnetlib.pace.model.FieldDef; + +/** + * Interface for PACE configuration bean. + * + * @author claudio + */ +public interface Config { + + /** + * Field configuration definitions. + * + * @return the list of definitions + */ + public List model(); + + /** + * Field configuration definitions. + * + * @return the list of definitions + */ + public Map modelMap(); + + /** + * Strict Pre-Condition definitions. + * + * @return the list of conditions + */ + public List strictConditions(); + + /** + * Pre-Condition definitions. + * + * @return the list of conditions + */ + public List conditions(); + + /** + * Clusterings. + * + * @return the list + */ + public List clusterings(); + + /** + * Blacklists. + * + * @return the map + */ + public Map> blacklists(); + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java new file mode 100644 index 000000000..5116f3684 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java @@ -0,0 +1,131 @@ +package eu.dnetlib.pace.config; + +import java.io.IOException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import org.antlr.stringtemplate.StringTemplate; +import org.apache.commons.io.IOUtils; + +import com.google.common.collect.Maps; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; + +import eu.dnetlib.pace.condition.ConditionAlgo; +import eu.dnetlib.pace.model.ClusteringDef; +import eu.dnetlib.pace.model.FieldDef; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +public class DedupConfig implements Config { + + private static final Log log = LogFactory.getLog(DedupConfig.class); + + private static String CONFIG_TEMPLATE = "dedupConfig.st"; + + private PaceConfig pace; + + private WfConfig wf; + + private static Map defaults = Maps.newHashMap(); + + static { + defaults.put("threshold", "0"); + defaults.put("run", "001"); + defaults.put("entityType", "result"); + defaults.put("orderField", "title"); + defaults.put("queueMaxSize", "2000"); + defaults.put("groupMaxSize", "10"); + defaults.put("slidingWindowSize", "200"); + defaults.put("rootBuilder", "result"); + defaults.put("includeChildren", "true"); + } + + public DedupConfig() {} + + public static DedupConfig load(final String json) { + + final DedupConfig config = new Gson().fromJson(json, DedupConfig.class); + + config.getPace().initModel(); + + return config; + } + + public static DedupConfig loadDefault() throws IOException { + return loadDefault(new HashMap()); + } + + public static DedupConfig loadDefault(final Map params) throws IOException { + + final StringTemplate template = new StringTemplate(new DedupConfig().readFromClasspath(CONFIG_TEMPLATE)); + + for (final Entry e : defaults.entrySet()) { + template.setAttribute(e.getKey(), e.getValue()); + } + for (final Entry e : params.entrySet()) { + template.setAttribute(e.getKey(), e.getValue()); + } + + final String json = template.toString(); + return load(json); + } + + private String readFromClasspath(final String resource) throws IOException { + return IOUtils.toString(getClass().getResource(resource)); + } + + public PaceConfig getPace() { + return pace; + } + + public void setPace(final PaceConfig pace) { + this.pace = pace; + } + + public WfConfig getWf() { + return wf; + } + + public void setWf(final WfConfig wf) { + this.wf = wf; + } + + @Override + public String toString() { + return new GsonBuilder().setPrettyPrinting().create().toJson(this); + } + + @Override + public List model() { + return getPace().getModel(); + } + + @Override + public Map modelMap() { + return getPace().getModelMap(); + } + + @Override + public List strictConditions() { + return getPace().getStrictConditionAlgos(); + } + + @Override + public List conditions() { + return getPace().getConditionAlgos(); + } + + @Override + public List clusterings() { + return getPace().getClustering(); + } + + @Override + public Map> blacklists() { + return getPace().getBlacklists(); + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java new file mode 100644 index 000000000..ffc67e775 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java @@ -0,0 +1,104 @@ +package eu.dnetlib.pace.config; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import eu.dnetlib.pace.condition.ConditionAlgo; +import eu.dnetlib.pace.model.ClusteringDef; +import eu.dnetlib.pace.model.CondDef; +import eu.dnetlib.pace.model.FieldDef; +import org.apache.commons.collections.CollectionUtils; + +public class PaceConfig { + + private List model; + private List strictConditions; + private List conditions; + private List clustering; + private Map> blacklists; + + private Map modelMap; + + public PaceConfig() {} + + public void initModel() { + modelMap = Maps.newHashMap(); + for(FieldDef fd : getModel()) { + modelMap.put(fd.getName(), fd); + } + } + + public List getModel() { + return model; + } + + public void setModel(final List model) { + this.model = model; + } + + public List getStrictConditions() { + return strictConditions; + } + + public void setStrictConditions(final List strictConditions) { + this.strictConditions = strictConditions; + } + + public List getConditions() { + return conditions; + } + + public List getConditionAlgos() { + return asConditionAlgos(getConditions()); + } + + public List getStrictConditionAlgos() { + return asConditionAlgos(getStrictConditions()); + } + + public void setConditions(final List conditions) { + this.conditions = conditions; + } + + public List getClustering() { + return clustering; + } + + public void setClustering(final List clustering) { + this.clustering = clustering; + } + + public Map> getBlacklists() { + return blacklists; + } + + public void setBlacklists(final Map> blacklists) { + this.blacklists = blacklists; + } + + public Map getModelMap() { + return modelMap; + } + + public void setModelMap(final Map modelMap) { + this.modelMap = modelMap; + } + + // helper + + private List asConditionAlgos(final List defs) { + final List algos = Lists.newArrayList(); + if (CollectionUtils.isEmpty(defs)) return algos; + for (final CondDef cd : defs) { + final List fields = getModel().stream() + .filter(fd -> cd.getFields().contains(fd.getName())) + .collect(Collectors.toList()); + algos.add(cd.getConditionAlgo(fields)); + } + return algos; + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Type.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Type.java new file mode 100644 index 000000000..0f1f696ab --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Type.java @@ -0,0 +1,5 @@ +package eu.dnetlib.pace.config; + +public enum Type { + String, Int, List, JSON, URL +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/WfConfig.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/WfConfig.java new file mode 100644 index 000000000..9e836ebe2 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/WfConfig.java @@ -0,0 +1,254 @@ +package eu.dnetlib.pace.config; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; +import com.google.gson.GsonBuilder; +import org.apache.commons.lang.StringUtils; + +public class WfConfig { + + /** + * Entity type. + */ + private String entityType = ""; + + /** + * Sub-Entity type refers to one of fields declared in the model. See eu.dnetlib.pace.config.PaceConfig.modelMap + */ + private String subEntityType = ""; + + /** + * Sub-Entity value declares a value for subTypes to be considered. + */ + private String subEntityValue = ""; + + /** + * Field name used to sort the values in the reducer phase. + */ + private String orderField = ""; + + /** + * Column Families involved in the relations redirection. + */ + private List rootBuilder = Lists.newArrayList(); + + /** + * Set of datasource namespace prefixes that won't be deduplicated. + */ + private Set skipList = Sets.newHashSet(); + + /** + * Subprefix used to build the root id, allows multiple dedup runs. + */ + private String dedupRun = ""; + + /** + * Similarity threshold. + */ + private double threshold = 0; + + /** The queue max size. */ + private int queueMaxSize = 2000; + + /** The group max size. */ + private int groupMaxSize; + + /** The sliding window size. */ + private int slidingWindowSize; + + /** The configuration id. */ + private String configurationId; + + /** The include children. */ + private boolean includeChildren; + + /** Default maximum number of allowed children. */ + private final static int MAX_CHILDREN = 10; + + /** Maximum number of allowed children. */ + private int maxChildren = MAX_CHILDREN; + + public WfConfig() {} + + /** + * Instantiates a new dedup config. + * + * @param entityType + * the entity type + * @param orderField + * the order field + * @param rootBuilder + * the root builder families + * @param dedupRun + * the dedup run + * @param threshold + * the threshold + * @param skipList + * the skip list + * @param queueMaxSize + * the queue max size + * @param groupMaxSize + * the group max size + * @param slidingWindowSize + * the sliding window size + * @param includeChildren + * allows the children to be included in the representative records or not. + */ + public WfConfig(final String entityType, final String orderField, final List rootBuilder, final String dedupRun, + final double threshold, + final Set skipList, final int queueMaxSize, final int groupMaxSize, final int slidingWindowSize, final boolean includeChildren) { + super(); + this.entityType = entityType; + this.orderField = orderField; + this.rootBuilder = rootBuilder; + this.dedupRun = cleanupStringNumber(dedupRun); + this.threshold = threshold; + this.skipList = skipList; + this.queueMaxSize = queueMaxSize; + this.groupMaxSize = groupMaxSize; + this.slidingWindowSize = slidingWindowSize; + this.includeChildren = includeChildren; + } + + /** + * Cleanup string number. + * + * @param s + * the s + * @return the string + */ + private String cleanupStringNumber(final String s) { + return s.contains("'") ? s.replaceAll("'", "") : s; + } + + public boolean hasSubType() { + return StringUtils.isNotBlank(getSubEntityType()) && StringUtils.isNotBlank(getSubEntityValue()); + } + + public String getEntityType() { + return entityType; + } + + public void setEntityType(final String entityType) { + this.entityType = entityType; + } + + public String getSubEntityType() { + return subEntityType; + } + + public void setSubEntityType(final String subEntityType) { + this.subEntityType = subEntityType; + } + + public String getSubEntityValue() { + return subEntityValue; + } + + public void setSubEntityValue(final String subEntityValue) { + this.subEntityValue = subEntityValue; + } + + public String getOrderField() { + return orderField; + } + + public void setOrderField(final String orderField) { + this.orderField = orderField; + } + + public List getRootBuilder() { + return rootBuilder; + } + + public void setRootBuilder(final List rootBuilder) { + this.rootBuilder = rootBuilder; + } + + public Set getSkipList() { + return skipList != null ? skipList : new HashSet(); + } + + public void setSkipList(final Set skipList) { + this.skipList = skipList; + } + + public String getDedupRun() { + return dedupRun; + } + + public void setDedupRun(final String dedupRun) { + this.dedupRun = dedupRun; + } + + public double getThreshold() { + return threshold; + } + + public void setThreshold(final double threshold) { + this.threshold = threshold; + } + + public int getQueueMaxSize() { + return queueMaxSize; + } + + public void setQueueMaxSize(final int queueMaxSize) { + this.queueMaxSize = queueMaxSize; + } + + public int getGroupMaxSize() { + return groupMaxSize; + } + + public void setGroupMaxSize(final int groupMaxSize) { + this.groupMaxSize = groupMaxSize; + } + + public int getSlidingWindowSize() { + return slidingWindowSize; + } + + public void setSlidingWindowSize(final int slidingWindowSize) { + this.slidingWindowSize = slidingWindowSize; + } + + public String getConfigurationId() { + return configurationId; + } + + public void setConfigurationId(final String configurationId) { + this.configurationId = configurationId; + } + + public boolean isIncludeChildren() { + return includeChildren; + } + + public void setIncludeChildren(final boolean includeChildren) { + this.includeChildren = includeChildren; + } + + public int getMaxChildren() { + return maxChildren; + } + + public void setMaxChildren(final int maxChildren) { + this.maxChildren = maxChildren; + } + + /* + * (non-Javadoc) + * + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + return new GsonBuilder().setPrettyPrinting().create().toJson(this); + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/AbstractDistance.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/AbstractDistance.java new file mode 100644 index 000000000..f9d189ff6 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/AbstractDistance.java @@ -0,0 +1,15 @@ +package eu.dnetlib.pace.distance; + +import eu.dnetlib.pace.config.Config; +import eu.dnetlib.pace.distance.eval.ScoreResult; +import eu.dnetlib.pace.model.Document; + +public abstract class AbstractDistance implements Distance { + + protected abstract Document toDocument(A a); + + @Override + public ScoreResult between(final A a, final A b, final Config config) { + return new DistanceScorer(config).distance(toDocument(a), toDocument(b)); + } +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/ConfigurableDistanceAlgo.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/ConfigurableDistanceAlgo.java new file mode 100644 index 000000000..b354f0654 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/ConfigurableDistanceAlgo.java @@ -0,0 +1,26 @@ +package eu.dnetlib.pace.distance; + +import java.util.Map; + +import eu.dnetlib.pace.common.AbstractPaceFunctions; + +public abstract class ConfigurableDistanceAlgo extends AbstractPaceFunctions { + + private Map params; + + private double weigth; + + public ConfigurableDistanceAlgo(final Map params, final double weight) { + this.params = params; + this.weigth = weight; + } + + public Map getParams() { + return params; + } + + public double getWeigth() { + return weigth; + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/Distance.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/Distance.java new file mode 100644 index 000000000..93a6e757a --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/Distance.java @@ -0,0 +1,9 @@ +package eu.dnetlib.pace.distance; + +import eu.dnetlib.pace.config.Config; +import eu.dnetlib.pace.distance.eval.ScoreResult; + +public interface Distance { + + public ScoreResult between(A a, A b, Config config); +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceAlgo.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceAlgo.java new file mode 100644 index 000000000..e9d009548 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceAlgo.java @@ -0,0 +1,15 @@ +package eu.dnetlib.pace.distance; + +import eu.dnetlib.pace.model.Field; + +/** + * Each field is configured with a distance algo which knows how to compute the distance (0-1) between the fields of two + * objects. + */ +public interface DistanceAlgo { + + public abstract double distance(Field a, Field b); + + public double getWeight(); + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceScorer.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceScorer.java new file mode 100644 index 000000000..0cbb6f4f6 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceScorer.java @@ -0,0 +1,101 @@ +package eu.dnetlib.pace.distance; + +import java.util.Collection; +import java.util.List; + +import eu.dnetlib.pace.condition.ConditionAlgo; +import eu.dnetlib.pace.config.Config; +import eu.dnetlib.pace.distance.eval.ConditionEvalMap; +import eu.dnetlib.pace.distance.eval.DistanceEval; +import eu.dnetlib.pace.distance.eval.DistanceEvalMap; +import eu.dnetlib.pace.distance.eval.ScoreResult; +import eu.dnetlib.pace.model.Document; +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.FieldDef; + +/** + * The distance between two documents is given by the weighted mean of the field distances + */ +public class DistanceScorer { + + private Config config; + + public DistanceScorer(final Config config) { + this.config = config; + } + + public ScoreResult distance(final Document a, final Document b) { + final ScoreResult sr = new ScoreResult(); + + sr.setStrictConditions(verify(a, b, config.strictConditions())); + sr.setConditions(verify(a, b, config.conditions())); + + final DistanceEvalMap dMap = new DistanceEvalMap(sumWeights(config.model())); + + for (final FieldDef fd : config.model()) { + + dMap.updateDistance(fieldDistance(a, b, fd)); + } + sr.setDistances(dMap); + return sr; + } + + private ConditionEvalMap verify(final Document a, final Document b, final List conditions) { + final ConditionEvalMap res = new ConditionEvalMap(); + + for (final ConditionAlgo cd : conditions) { + final ConditionEvalMap map = cd.verify(a, b); + res.mergeFrom(map); + + // commented out shortcuts + /* + if (map.anyNegative()) { + return res; + } + */ + + //if (strict && (res < 0)) return -1; + //cond += verify; + } + return res; + } + + private DistanceEval fieldDistance(final Document a, final Document b, final FieldDef fd) { + + final double w = fd.getWeight(); + final Field va = getValue(a, fd); + final Field vb = getValue(b, fd); + + final DistanceEval de = new DistanceEval(fd, va, vb); + if ((w == 0)) return de; // optimization for 0 weight + else { + if (va.isEmpty() || vb.isEmpty()) { + if (fd.isIgnoreMissing()) { + de.setDistance(-1); + } else { + de.setDistance(w); + } + } else { + if (va.getType().equals(vb.getType())) { + de.setDistance(w * fd.getDistanceAlgo().distance(va, vb)); + } else { + throw new IllegalArgumentException(String.format("Types are differents type: %s:%s - %s:%s", va, va.getType(), vb, vb.getType())); + } + } + return de; + } + } + + private Field getValue(final Document d, final FieldDef fd) { + return d.values(fd.getName()); + } + + private double sumWeights(final Collection fields) { + double sum = 0.0; + for (final FieldDef fd : fields) { + sum += fd.getWeight(); + } + return sum; + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/PaceDocumentDistance.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/PaceDocumentDistance.java new file mode 100644 index 000000000..7651479ee --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/PaceDocumentDistance.java @@ -0,0 +1,12 @@ +package eu.dnetlib.pace.distance; + +import eu.dnetlib.pace.model.Document; + +public class PaceDocumentDistance extends AbstractDistance { + + @Override + protected Document toDocument(Document a) { + return a; + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/SecondStringDistanceAlgo.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/SecondStringDistanceAlgo.java new file mode 100644 index 000000000..83296048d --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/SecondStringDistanceAlgo.java @@ -0,0 +1,100 @@ +package eu.dnetlib.pace.distance; + +import java.util.List; + +import com.wcohen.ss.AbstractStringDistance; + +import eu.dnetlib.pace.common.AbstractPaceFunctions; +import eu.dnetlib.pace.config.Type; +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.FieldList; + +/** + * For the rest of the fields delegate the distance measure to the second string library. + */ +public abstract class SecondStringDistanceAlgo extends AbstractPaceFunctions implements DistanceAlgo { + + // val aliases = Map(('₁' to '₉') zip ('1' to '9'): _*) ++ Map(('⁴' to '⁹') zip ('4' to '9'): _*) ++ Map('¹' -> '1', '²' -> + // '2', * '³' + // -> '3') + + /** The ssalgo. */ + protected AbstractStringDistance ssalgo; + + /** The weight. */ + protected double weight = 0.0; + + /** + * Instantiates a new second string distance algo. + * + * @param weight + * the weight + * @param ssalgo + * the ssalgo + */ + protected SecondStringDistanceAlgo(final double weight, final AbstractStringDistance ssalgo) { + this.ssalgo = ssalgo; + this.weight = weight; + } + + /** + * Normalize. + * + * @param d + * the d + * @return the double + */ + protected abstract double normalize(double d); + + /** + * Distance. + * + * @param a + * the a + * @param b + * the b + * @return the double + */ + public double distance(final String a, final String b) { + double score = ssalgo.score(a, b); + return normalize(score); + } + + /** + * Distance. + * + * @param a + * the a + * @param b + * the b + * @return the double + */ + protected double distance(final List a, final List b) { + return distance(concat(a), concat(b)); + } + + /* + * (non-Javadoc) + * + * @see eu.dnetlib.pace.distance.DistanceAlgo#distance(eu.dnetlib.pace.model.Field, eu.dnetlib.pace.model.Field) + */ + @Override + public double distance(final Field a, final Field b) { + if (a.getType().equals(Type.String) && b.getType().equals(Type.String)) return distance(a.stringValue(), b.stringValue()); + if (a.getType().equals(Type.List) && b.getType().equals(Type.List)) return distance(toList(a), toList(b)); + + throw new IllegalArgumentException("invalid types\n- A: " + a.toString() + "\n- B: " + b.toString()); + } + + /** + * To list. + * + * @param list + * the list + * @return the list + */ + protected List toList(final Field list) { + return ((FieldList) list).stringList(); + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/AlwaysMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/AlwaysMatch.java new file mode 100644 index 000000000..904498202 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/AlwaysMatch.java @@ -0,0 +1,31 @@ +package eu.dnetlib.pace.distance.algo; + +import com.wcohen.ss.AbstractStringDistance; +import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; + +public class AlwaysMatch extends SecondStringDistanceAlgo { + + public AlwaysMatch(final double weight) { + super(weight, new com.wcohen.ss.JaroWinkler()); + } + + protected AlwaysMatch(final double weight, final AbstractStringDistance ssalgo) { + super(weight, ssalgo); + } + + @Override + public double distance(final String a, final String b) { + return 1.0; + } + + @Override + public double getWeight() { + return super.weight; + } + + @Override + protected double normalize(final double d) { + return d; + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/ExactMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/ExactMatch.java new file mode 100644 index 000000000..ef95c024a --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/ExactMatch.java @@ -0,0 +1,31 @@ +package eu.dnetlib.pace.distance.algo; + +import com.wcohen.ss.AbstractStringDistance; +import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; + +public class ExactMatch extends SecondStringDistanceAlgo { + + public ExactMatch(final double weight) { + super(weight, new com.wcohen.ss.JaroWinkler()); + } + + protected ExactMatch(final double weight, final AbstractStringDistance ssalgo) { + super(weight, ssalgo); + } + + @Override + public double distance(final String a, final String b) { + return a.equals(b) ? 1.0 : 0; + } + + @Override + public double getWeight() { + return super.weight; + } + + @Override + protected double normalize(final double d) { + return d; + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinkler.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinkler.java new file mode 100644 index 000000000..87f6c4e6a --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinkler.java @@ -0,0 +1,35 @@ +package eu.dnetlib.pace.distance.algo; + +import com.wcohen.ss.AbstractStringDistance; +import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; + +//case class JaroWinkler(w: Double) extends SecondStringDistanceAlgo(w, new com.wcohen.ss.JaroWinkler()) +public class JaroWinkler extends SecondStringDistanceAlgo { + + public JaroWinkler(double weight) { + super(weight, new com.wcohen.ss.JaroWinkler()); + } + + protected JaroWinkler(double weight, AbstractStringDistance ssalgo) { + super(weight, ssalgo); + } + + @Override + public double distance(String a, String b) { + String ca = cleanup(a); + String cb = cleanup(b); + + return normalize(ssalgo.score(ca, cb)); + } + + @Override + public double getWeight() { + return super.weight; + } + + @Override + protected double normalize(double d) { + return d; + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerTitle.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerTitle.java new file mode 100644 index 000000000..1419a072b --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerTitle.java @@ -0,0 +1,36 @@ +package eu.dnetlib.pace.distance.algo; + +import com.wcohen.ss.AbstractStringDistance; +import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; + +//case class JaroWinkler(w: Double) extends SecondStringDistanceAlgo(w, new com.wcohen.ss.JaroWinkler()) +public class JaroWinklerTitle extends SecondStringDistanceAlgo { + + public JaroWinklerTitle(double weight) { + super(weight, new com.wcohen.ss.JaroWinkler()); + } + + protected JaroWinklerTitle(double weight, AbstractStringDistance ssalgo) { + super(weight, ssalgo); + } + + @Override + public double distance(String a, String b) { + String ca = cleanup(a); + String cb = cleanup(b); + + boolean check = checkNumbers(ca, cb); + return check ? 0.5 : normalize(ssalgo.score(ca, cb)); + } + + @Override + public double getWeight() { + return super.weight; + } + + @Override + protected double normalize(double d) { + return d; + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Level2JaroWinkler.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Level2JaroWinkler.java new file mode 100644 index 000000000..3ad1cfaaf --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Level2JaroWinkler.java @@ -0,0 +1,26 @@ +package eu.dnetlib.pace.distance.algo; + +import com.wcohen.ss.AbstractStringDistance; +import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; + +public class Level2JaroWinkler extends SecondStringDistanceAlgo { + + public Level2JaroWinkler(double w) { + super(w, new com.wcohen.ss.Level2JaroWinkler()); + } + + protected Level2JaroWinkler(double w, AbstractStringDistance ssalgo) { + super(w, ssalgo); + } + + @Override + public double getWeight() { + return super.weight; + } + + @Override + protected double normalize(double d) { + return d; + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Level2JaroWinklerTitle.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Level2JaroWinklerTitle.java new file mode 100644 index 000000000..a1c347256 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Level2JaroWinklerTitle.java @@ -0,0 +1,41 @@ +package eu.dnetlib.pace.distance.algo; + +import com.wcohen.ss.AbstractStringDistance; +import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; + +public class Level2JaroWinklerTitle extends SecondStringDistanceAlgo { + + public Level2JaroWinklerTitle(final double w) { + super(w, new com.wcohen.ss.Level2JaroWinkler()); + } + + protected Level2JaroWinklerTitle(final double w, final AbstractStringDistance ssalgo) { + super(w, ssalgo); + } + + @Override + public double distance(final String a, final String b) { + final String ca = cleanup(a); + final String cb = cleanup(b); + + final boolean check = checkNumbers(ca, cb); + + if (check) return 0.5; + + final String cca = finalCleanup(ca); + final String ccb = finalCleanup(cb); + + return ssalgo.score(cca, ccb); + } + + @Override + public double getWeight() { + return super.weight; + } + + @Override + protected double normalize(final double d) { + return d; + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Level2Levenstein.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Level2Levenstein.java new file mode 100644 index 000000000..7a2b0295f --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Level2Levenstein.java @@ -0,0 +1,26 @@ +package eu.dnetlib.pace.distance.algo; + +import com.wcohen.ss.AbstractStringDistance; +import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; + +public class Level2Levenstein extends SecondStringDistanceAlgo { + + public Level2Levenstein(double w) { + super(w, new com.wcohen.ss.Level2Levenstein()); + } + + protected Level2Levenstein(double w, AbstractStringDistance ssalgo) { + super(w, ssalgo); + } + + @Override + public double getWeight() { + return super.weight; + } + + @Override + protected double normalize(double d) { + return 1 / Math.pow(Math.abs(d) + 1, 0.1); + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Levenstein.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Levenstein.java new file mode 100644 index 000000000..9dfce83e5 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Levenstein.java @@ -0,0 +1,26 @@ +package eu.dnetlib.pace.distance.algo; + +import com.wcohen.ss.AbstractStringDistance; +import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; + +public class Levenstein extends SecondStringDistanceAlgo { + + public Levenstein(double w) { + super(w, new com.wcohen.ss.Levenstein()); + } + + protected Levenstein(double w, AbstractStringDistance ssalgo) { + super(w, ssalgo); + } + + @Override + public double getWeight() { + return super.weight; + } + + @Override + protected double normalize(double d) { + return 1 / Math.pow(Math.abs(d) + 1, 0.1); + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinDate.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinDate.java new file mode 100644 index 000000000..545295567 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinDate.java @@ -0,0 +1,25 @@ +package eu.dnetlib.pace.distance.algo; + + +public class LevensteinDate extends Levenstein { + + + public LevensteinDate(double w) { + super(w); + } + + + @Override + public double distance(String a, String b) { + + return 1.0; + } + + + + @Override + public double getWeight() { + return super.weight; + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinTitle.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinTitle.java new file mode 100644 index 000000000..281de31c3 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinTitle.java @@ -0,0 +1,45 @@ +package eu.dnetlib.pace.distance.algo; + +import com.wcohen.ss.AbstractStringDistance; +import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; + +public class LevensteinTitle extends SecondStringDistanceAlgo { + + public LevensteinTitle(final double w) { + super(w, new com.wcohen.ss.Levenstein()); + } + + protected LevensteinTitle(final double w, final AbstractStringDistance ssalgo) { + super(w, ssalgo); + } + + @Override + public double distance(final String a, final String b) { + final String ca = cleanup(a); + final String cb = cleanup(b); + + final boolean check = checkNumbers(ca, cb); + + if (check) return 0.5; + + final String cca = finalCleanup(ca); + final String ccb = finalCleanup(cb); + + return normalize(ssalgo.score(cca, ccb), cca.length(), ccb.length()); + } + + private double normalize(final double score, final int la, final int lb) { + return 1 - (Math.abs(score) / Math.max(la, lb)); + } + + @Override + public double getWeight() { + return super.weight; + } + + @Override + protected double normalize(final double d) { + return 1 / Math.pow(Math.abs(d) + 1, 0.1); + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/MustBeDifferent.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/MustBeDifferent.java new file mode 100644 index 000000000..1177ed528 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/MustBeDifferent.java @@ -0,0 +1,31 @@ +package eu.dnetlib.pace.distance.algo; + +import com.wcohen.ss.AbstractStringDistance; +import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; + +public class MustBeDifferent extends SecondStringDistanceAlgo { + + public MustBeDifferent(final double weight) { + super(weight, new com.wcohen.ss.JaroWinkler()); + } + + protected MustBeDifferent(final double weight, final AbstractStringDistance ssalgo) { + super(weight, ssalgo); + } + + @Override + public double distance(final String a, final String b) { + return !a.equals(b) ? 1.0 : 0; + } + + @Override + public double getWeight() { + return super.weight; + } + + @Override + protected double normalize(final double d) { + return d; + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/NullDistanceAlgo.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/NullDistanceAlgo.java new file mode 100644 index 000000000..8070a0010 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/NullDistanceAlgo.java @@ -0,0 +1,22 @@ +package eu.dnetlib.pace.distance.algo; + +import eu.dnetlib.pace.distance.DistanceAlgo; +import eu.dnetlib.pace.model.Field; + +/** + * Not all fields of a document need to partecipate in the distance measure. We model those fields as having a + * NullDistanceAlgo. + */ +public class NullDistanceAlgo implements DistanceAlgo { + + @Override + public double distance(Field a, Field b) { + return 0.0; + } + + @Override + public double getWeight() { + return 0.0; + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedJaroWinkler.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedJaroWinkler.java new file mode 100644 index 000000000..d83420750 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedJaroWinkler.java @@ -0,0 +1,52 @@ +package eu.dnetlib.pace.distance.algo; + +import com.wcohen.ss.AbstractStringDistance; + +/** + * The Class SortedJaroWinkler. + */ +public class SortedJaroWinkler extends SortedSecondStringDistanceAlgo { + + /** + * Instantiates a new sorted jaro winkler. + * + * @param weight + * the weight + */ + public SortedJaroWinkler(final double weight) { + super(weight, new com.wcohen.ss.JaroWinkler()); + } + + /** + * Instantiates a new sorted jaro winkler. + * + * @param weight + * the weight + * @param ssalgo + * the ssalgo + */ + protected SortedJaroWinkler(final double weight, final AbstractStringDistance ssalgo) { + super(weight, ssalgo); + } + + /* + * (non-Javadoc) + * + * @see eu.dnetlib.pace.distance.DistanceAlgo#getWeight() + */ + @Override + public double getWeight() { + return super.weight; + } + + /* + * (non-Javadoc) + * + * @see eu.dnetlib.pace.distance.SecondStringDistanceAlgo#normalize(double) + */ + @Override + protected double normalize(final double d) { + return d; + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedLevel2JaroWinkler.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedLevel2JaroWinkler.java new file mode 100644 index 000000000..43ac190e3 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedLevel2JaroWinkler.java @@ -0,0 +1,52 @@ +package eu.dnetlib.pace.distance.algo; + +import com.wcohen.ss.AbstractStringDistance; + +/** + * The Class SortedJaroWinkler. + */ +public class SortedLevel2JaroWinkler extends SortedSecondStringDistanceAlgo { + + /** + * Instantiates a new sorted jaro winkler. + * + * @param weight + * the weight + */ + public SortedLevel2JaroWinkler(final double weight) { + super(weight, new com.wcohen.ss.Level2JaroWinkler()); + } + + /** + * Instantiates a new sorted jaro winkler. + * + * @param weight + * the weight + * @param ssalgo + * the ssalgo + */ + protected SortedLevel2JaroWinkler(final double weight, final AbstractStringDistance ssalgo) { + super(weight, ssalgo); + } + + /* + * (non-Javadoc) + * + * @see eu.dnetlib.pace.distance.DistanceAlgo#getWeight() + */ + @Override + public double getWeight() { + return super.weight; + } + + /* + * (non-Javadoc) + * + * @see eu.dnetlib.pace.distance.SecondStringDistanceAlgo#normalize(double) + */ + @Override + protected double normalize(final double d) { + return d; + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedSecondStringDistanceAlgo.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedSecondStringDistanceAlgo.java new file mode 100644 index 000000000..d47fbbacd --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedSecondStringDistanceAlgo.java @@ -0,0 +1,43 @@ +package eu.dnetlib.pace.distance.algo; + +import java.util.Collections; +import java.util.List; + +import com.google.common.collect.Lists; +import com.wcohen.ss.AbstractStringDistance; + +import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.FieldList; + +/** + * For the rest of the fields delegate the distance measure to the second string library. + */ +public abstract class SortedSecondStringDistanceAlgo extends SecondStringDistanceAlgo { + + /** + * Instantiates a new sorted second string distance algo. + * + * @param weight + * the weight + * @param ssalgo + * the ssalgo + */ + protected SortedSecondStringDistanceAlgo(final double weight, final AbstractStringDistance ssalgo) { + super(weight, ssalgo); + } + + /* + * (non-Javadoc) + * + * @see eu.dnetlib.pace.distance.SecondStringDistanceAlgo#toList(eu.dnetlib.pace.model.Field) + */ + @Override + protected List toList(final Field list) { + FieldList fl = (FieldList) list; + List values = Lists.newArrayList(fl.stringList()); + Collections.sort(values); + return values; + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SubStringLevenstein.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SubStringLevenstein.java new file mode 100644 index 000000000..1fa358b0f --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SubStringLevenstein.java @@ -0,0 +1,90 @@ +package eu.dnetlib.pace.distance.algo; + +import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; +import org.apache.commons.lang.StringUtils; + +import com.wcohen.ss.AbstractStringDistance; + +import eu.dnetlib.pace.config.Type; +import eu.dnetlib.pace.model.Field; + +/** + * The Class SubStringLevenstein. + */ +public class SubStringLevenstein extends SecondStringDistanceAlgo { + + /** The limit. */ + protected int limit; + + /** + * Instantiates a new sub string levenstein. + * + * @param w + * the w + */ + public SubStringLevenstein(final double w) { + super(w, new com.wcohen.ss.Levenstein()); + } + + /** + * Instantiates a new sub string levenstein. + * + * @param w + * the w + * @param limit + * the limit + */ + public SubStringLevenstein(final double w, final int limit) { + super(w, new com.wcohen.ss.Levenstein()); + this.limit = limit; + } + + /** + * Instantiates a new sub string levenstein. + * + * @param w + * the w + * @param limit + * the limit + * @param ssalgo + * the ssalgo + */ + protected SubStringLevenstein(final double w, final int limit, final AbstractStringDistance ssalgo) { + super(w, ssalgo); + this.limit = limit; + } + + /* + * (non-Javadoc) + * + * @see eu.dnetlib.pace.distance.SecondStringDistanceAlgo#distance(eu.dnetlib.pace.model.Field, eu.dnetlib.pace.model.Field) + */ + @Override + public double distance(final Field a, final Field b) { + if (a.getType().equals(Type.String) && b.getType().equals(Type.String)) + return distance(StringUtils.left(a.stringValue(), limit), StringUtils.left(b.stringValue(), limit)); + + throw new IllegalArgumentException("invalid types\n- A: " + a.toString() + "\n- B: " + b.toString()); + } + + /* + * (non-Javadoc) + * + * @see eu.dnetlib.pace.distance.DistanceAlgo#getWeight() + */ + @Override + public double getWeight() { + return super.weight; + } + + /* + * (non-Javadoc) + * + * @see eu.dnetlib.pace.distance.SecondStringDistanceAlgo#normalize(double) + */ + @Override + protected double normalize(final double d) { + return 1 / Math.pow(Math.abs(d) + 1, 0.1); + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/UrlMatcher.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/UrlMatcher.java new file mode 100644 index 000000000..46a438ebe --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/UrlMatcher.java @@ -0,0 +1,48 @@ +package eu.dnetlib.pace.distance.algo; + +import eu.dnetlib.pace.model.Field; +import org.apache.commons.lang.StringUtils; + +import java.net.MalformedURLException; +import java.net.URL; +import java.util.Map; + +public class UrlMatcher extends Levenstein { + + private Map params; + + public UrlMatcher(double weight, Map params) { + super(weight); + this.params = params; + } + + @Override + public double distance(Field a, Field b) { + + final URL urlA = asUrl(getFirstValue(a)); + final URL urlB = asUrl(getFirstValue(b)); + + if (!urlA.getHost().equalsIgnoreCase(urlB.getHost())) { + return 0.0; + } + + Double hostW = params.get("host").doubleValue(); + Double pathW = params.get("path").doubleValue(); + + if (StringUtils.isBlank(urlA.getPath()) || StringUtils.isBlank(urlB.getPath())) { + return hostW * 0.5; + } + + return hostW + pathW * super.distance(urlA.getPath(), urlB.getPath()); + } + + private URL asUrl(final String value) { + try { + return new URL(value); + } catch (MalformedURLException e) { + // should not happen as checked by pace typing + throw new IllegalStateException("invalid URL: " + value); + } + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/YearLevenstein.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/YearLevenstein.java new file mode 100644 index 000000000..4e9796c2d --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/YearLevenstein.java @@ -0,0 +1,37 @@ +package eu.dnetlib.pace.distance.algo; + + +public class YearLevenstein extends SubStringLevenstein { + + public YearLevenstein(double w) { + super(w); + } + + public YearLevenstein(double w, int limit) { + super(w, limit); + } + + @Override + public double distance(String a, String b) { + boolean check = checkLength(a) && checkLength(b); + if (check) { + if (a.equals(b)) { + return 1.0; + } else { + return 0.5; + } + } else { + return 1.0; + } + } + + protected boolean checkLength(String s) { + return getNumbers(s).length() == limit; + } + + @Override + public double getWeight() { + return super.weight; + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/ConditionEval.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/ConditionEval.java new file mode 100644 index 000000000..49e526f42 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/ConditionEval.java @@ -0,0 +1,57 @@ +package eu.dnetlib.pace.distance.eval; + +import eu.dnetlib.pace.config.Cond; +import eu.dnetlib.pace.model.Field; + +/** + * Created by claudio on 09/03/16. + */ +public class ConditionEval { + + private Cond cond; + + private Field a; + + private Field b; + + private int result; + + public ConditionEval(final Cond cond, final Field a, final Field b, final int result) { + this.cond = cond; + this.a = a; + this.b = b; + this.result = result; + } + + public Field getA() { + return a; + } + + public void setA(final Field a) { + this.a = a; + } + + public Field getB() { + return b; + } + + public void setB(final Field b) { + this.b = b; + } + + public int getResult() { + return result; + } + + public void setResult(final int result) { + this.result = result; + } + + public Cond getCond() { + return cond; + } + + public void setCond(final Cond cond) { + this.cond = cond; + } +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/ConditionEvalMap.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/ConditionEvalMap.java new file mode 100644 index 000000000..a851596b3 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/ConditionEvalMap.java @@ -0,0 +1,38 @@ +package eu.dnetlib.pace.distance.eval; + +import java.util.HashMap; + +import com.google.common.base.Predicate; +import com.google.common.collect.Iterables; + +/** + * Created by claudio on 09/03/16. + */ +public class ConditionEvalMap extends HashMap { + + + public ConditionEvalMap mergeFrom(ConditionEvalMap map) { + putAll(map); + return this; + } + + public boolean anyNegative() { + return values().stream() + .allMatch(ec -> ec.getResult() < 0); + } + + public boolean isZero() { + return result() == 0; + } + + public int result() { + int res = 0; + for(ConditionEval ec : values()) { + final int verify = ec.getResult(); + if (verify < 0) return -1; + res += verify; + } + return res; + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/DistanceEval.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/DistanceEval.java new file mode 100644 index 000000000..a943d4cea --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/DistanceEval.java @@ -0,0 +1,57 @@ +package eu.dnetlib.pace.distance.eval; + +import eu.dnetlib.pace.config.Algo; +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.FieldDef; + +/** + * Created by claudio on 09/03/16. + */ +public class DistanceEval { + + private FieldDef fieldDef; + + private Field a; + + private Field b; + + private double distance = 0.0; + + public DistanceEval(final FieldDef fieldDef, final Field a, final Field b) { + this.fieldDef = fieldDef; + this.a = a; + this.b = b; + } + + public Field getA() { + return a; + } + + public void setA(final Field a) { + this.a = a; + } + + public Field getB() { + return b; + } + + public void setB(final Field b) { + this.b = b; + } + + public FieldDef getFieldDef() { + return fieldDef; + } + + public void setFieldDef(final FieldDef fieldDef) { + this.fieldDef = fieldDef; + } + + public double getDistance() { + return distance; + } + + public void setDistance(final double distance) { + this.distance = distance; + } +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/DistanceEvalMap.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/DistanceEvalMap.java new file mode 100644 index 000000000..764e60354 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/DistanceEvalMap.java @@ -0,0 +1,32 @@ +package eu.dnetlib.pace.distance.eval; + +import java.util.HashMap; + +/** + * Created by claudio on 10/03/16. + */ +public class DistanceEvalMap extends HashMap { + + private double sumWeights; + + private double sumDistances = 0.0; + + public DistanceEvalMap(final double sumWeights) { + this.sumWeights = sumWeights; + } + + public void updateDistance(final DistanceEval d) { + + put(d.getFieldDef().getName(), d); + if (d.getDistance() >= 0) { + sumDistances += d.getDistance(); + } else { + sumWeights -= d.getFieldDef().getWeight(); + } + } + + public double distance() { + return sumWeights == 0 ? 0 : sumDistances / sumWeights; + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/ScoreResult.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/ScoreResult.java new file mode 100644 index 000000000..a61cf6e15 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/ScoreResult.java @@ -0,0 +1,55 @@ +package eu.dnetlib.pace.distance.eval; + +import com.google.gson.GsonBuilder; + +/** + * Created by claudio on 09/03/16. + */ +public class ScoreResult { + + private ConditionEvalMap strictConditions; + + private ConditionEvalMap conditions; + + private DistanceEvalMap distances; + + public double getScore() { + + if (getStrictConditions().result() > 0) return 1.0; + // if (getStrictConditions().result() < 0) return 0.0; + if (getConditions().result() < 0) return 0.0; + + return getDistances().distance(); + } + + + public ConditionEvalMap getStrictConditions() { + return strictConditions; + } + + public void setStrictConditions(final ConditionEvalMap strictConditions) { + this.strictConditions = strictConditions; + } + + public ConditionEvalMap getConditions() { + return conditions; + } + + public void setConditions(final ConditionEvalMap conditions) { + this.conditions = conditions; + } + + public DistanceEvalMap getDistances() { + return distances; + } + + public void setDistances(final DistanceEvalMap distances) { + this.distances = distances; + } + + @Override + public String toString() { + final GsonBuilder b = new GsonBuilder(); + return b.setPrettyPrinting().create().toJson(this); + } +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/AbstractField.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/AbstractField.java new file mode 100644 index 000000000..b418b75bb --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/AbstractField.java @@ -0,0 +1,74 @@ +package eu.dnetlib.pace.model; + +import eu.dnetlib.pace.config.Type; + +/** + * The Class AbstractField. + */ +public abstract class AbstractField implements Field { + + /** The type. */ + protected Type type = Type.String; + + /** The name. */ + protected String name; + + /** + * Instantiates a new abstract field. + */ + protected AbstractField() {} + + /** + * Instantiates a new abstract field. + * + * @param type + * the type + * @param name + * the name + */ + protected AbstractField(final Type type, final String name) { + this.type = type; + this.name = name; + } + + /* + * (non-Javadoc) + * + * @see eu.dnetlib.pace.model.Field#getName() + */ + @Override + public String getName() { + return name; + } + + /* + * (non-Javadoc) + * + * @see eu.dnetlib.pace.model.Field#getType() + */ + @Override + public Type getType() { + return type; + } + + /* + * (non-Javadoc) + * + * @see eu.dnetlib.pace.model.Field#setName(java.lang.String) + */ + @Override + public void setName(final String name) { + this.name = name; + } + + /* + * (non-Javadoc) + * + * @see eu.dnetlib.pace.model.Field#setType(eu.dnetlib.pace.config.Type) + */ + @Override + public void setType(final Type type) { + this.type = type; + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java new file mode 100644 index 000000000..5909788b7 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java @@ -0,0 +1,77 @@ +package eu.dnetlib.pace.model; + +import java.util.List; +import java.util.Map; + +import com.google.gson.Gson; +import eu.dnetlib.pace.clustering.*; + +public class ClusteringDef { + + private Clustering name; + + private List fields; + + private Map params; + + public ClusteringDef() {} + + public Clustering getName() { + return name; + } + + public void setName(final Clustering name) { + this.name = name; + } + + public ClusteringFunction getClusteringFunction() { + switch (getName()) { + case acronyms: + return new Acronyms(getParams()); + case ngrams: + return new Ngrams(getParams()); + case ngrampairs: + return new NgramPairs(getParams()); + case sortedngrampairs: + return new SortedNgramPairs(getParams()); + case suffixprefix: + return new SuffixPrefix(getParams()); + case spacetrimmingfieldvalue: + return new SpaceTrimmingFieldValue(getParams()); + case immutablefieldvalue: + return new ImmutableFieldValue(getParams()); + case personhash: + return new PersonHash(getParams()); + case personclustering: + return new PersonClustering(getParams()); + case lowercase: + return new LowercaseClustering(getParams()); + case urlclustering: + return new UrlClustering(getParams()); + default: + return new RandomClusteringFunction(getParams()); + } + } + + public List getFields() { + return fields; + } + + public void setFields(final List fields) { + this.fields = fields; + } + + public Map getParams() { + return params; + } + + public void setParams(final Map params) { + this.params = params; + } + + @Override + public String toString() { + return new Gson().toJson(this); + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/CondDef.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/CondDef.java new file mode 100644 index 000000000..33f30faff --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/CondDef.java @@ -0,0 +1,61 @@ +package eu.dnetlib.pace.model; + +import java.util.List; + +import com.google.gson.Gson; +import eu.dnetlib.pace.condition.*; +import eu.dnetlib.pace.config.Cond; + +public class CondDef { + + private Cond name; + + private List fields; + + public CondDef() {} + + public ConditionAlgo getConditionAlgo(final List fields) { + switch (getName()) { + case yearMatch: + return new YearMatch(getName(), fields); + case titleVersionMatch: + return new TitleVersionMatch(getName(), fields); + case sizeMatch: + return new SizeMatch(getName(), fields); + case exactMatch: + return new ExactMatch(getName(), fields); + case mustBeDifferent: + return new MustBeDifferent(getName(), fields); + case exactMatchIgnoreCase: + return new ExactMatchIgnoreCase(getName(), fields); + case doiExactMatch: + return new DoiExactMatch(getName(), fields); + case pidMatch: + return new PidMatch(getName(), fields); + default: + return new AlwaysTrueCondition(getName(), fields); + } + } + + public Cond getName() { + return name; + } + + public void setName(final Cond name) { + this.name = name; + } + + public List getFields() { + return fields; + } + + public void setFields(final List fields) { + this.fields = fields; + } + + @Override + public String toString() { + return new Gson().toJson(this); + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/Document.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/Document.java new file mode 100644 index 000000000..fcacadd6f --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/Document.java @@ -0,0 +1,39 @@ +package eu.dnetlib.pace.model; + +import java.util.Set; + +/** + * The Interface Document. Models the common operations available on a Pace Document. + */ +public interface Document { + + /** + * Gets the identifier. + * + * @return the identifier + */ + String getIdentifier(); + + /** + * Fields. + * + * @return the iterable + */ + Iterable fields(); + + /** + * Values. + * + * @param name + * the name + * @return the field list + */ + Field values(String name); + + /** + * Field names. + * + * @return the sets the + */ + Set fieldNames(); +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/Field.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/Field.java new file mode 100644 index 000000000..9c97ce38d --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/Field.java @@ -0,0 +1,54 @@ +package eu.dnetlib.pace.model; + +import eu.dnetlib.pace.config.Type; + +/** + * The Interface Field. + */ +public interface Field extends Iterable { + + /** + * Gets the name. + * + * @return the name + */ + public String getName(); + + /** + * Sets the name. + * + * @param name + * the new name + */ + public void setName(String name); + + /** + * Gets the type. + * + * @return the type + */ + public Type getType(); + + /** + * Sets the type. + * + * @param type + * the new type + */ + public void setType(Type type); + + /** + * Checks if is empty. + * + * @return true, if is empty + */ + public boolean isEmpty(); + + /** + * String value. + * + * @return the string + */ + public String stringValue(); + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java new file mode 100644 index 000000000..776c20306 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java @@ -0,0 +1,163 @@ +package eu.dnetlib.pace.model; + +import java.util.List; +import java.util.Map; + +import com.google.common.base.Splitter; +import com.google.common.collect.Lists; +import com.google.gson.Gson; +import eu.dnetlib.pace.config.Algo; +import eu.dnetlib.pace.config.Type; +import eu.dnetlib.pace.distance.*; +import eu.dnetlib.pace.distance.algo.*; + +/** + * The schema is composed by field definitions (FieldDef). Each field has a type, a name, and an associated distance algorithm. + */ +public class FieldDef { + + public final static String PATH_SEPARATOR = "/"; + + private Algo algo; + + private String name; + + private String path; + + private boolean ignoreMissing; + + private Type type; + + private boolean overrideMatch; + + private double weight; + + private int limit = -1; + + private Map params; + + public FieldDef() {} + + // def apply(s: String): Field[A] + public Field apply(final Type type, final String s) { + switch (type) { + case Int: + return new FieldValueImpl(type, name, Integer.parseInt(s)); + case String: + return new FieldValueImpl(type, name, s); + case List: + return new FieldListImpl(name, type); + default: + throw new IllegalArgumentException("Casting not implemented for type " + type); + } + } + + public String getName() { + return name; + } + + public String getPath() { + return path; + } + + public List getPathList() { + return Lists.newArrayList(Splitter.on(PATH_SEPARATOR).split(getPath())); + } + + public DistanceAlgo getDistanceAlgo() { + switch (getAlgo()) { + case JaroWinkler: + return new JaroWinkler(getWeight()); + case JaroWinklerTitle: + return new JaroWinklerTitle(getWeight()); + case Level2JaroWinkler: + return new Level2JaroWinkler(getWeight()); + case Level2JaroWinklerTitle: + return new Level2JaroWinklerTitle(getWeight()); + case Level2Levenstein: + return new Level2Levenstein(getWeight()); + case Levenstein: + return new Levenstein(getWeight()); + case LevensteinTitle: + return new LevensteinTitle(getWeight()); + case SubStringLevenstein: + return new SubStringLevenstein(getWeight(), getLimit()); + case YearLevenstein: + return new YearLevenstein(getWeight(), getLimit()); + case SortedJaroWinkler: + return new SortedJaroWinkler(getWeight()); + case SortedLevel2JaroWinkler: + return new SortedLevel2JaroWinkler(getWeight()); + case urlMatcher: + return new UrlMatcher(getWeight(), getParams()); + case ExactMatch: + return new ExactMatch(getWeight()); + case MustBeDifferent: + return new MustBeDifferent(getWeight()); + case AlwaysMatch: + return new AlwaysMatch(getWeight()); + case Null: + return new NullDistanceAlgo(); + default: + return new NullDistanceAlgo(); + } + } + + public boolean isIgnoreMissing() { + return ignoreMissing; + } + + public Type getType() { + return type; + } + + public void setType(final Type type) { + this.type = type; + } + + public boolean isOverrideMatch() { + return overrideMatch; + } + + public void setOverrideMatch(final boolean overrideMatch) { + this.overrideMatch = overrideMatch; + } + + @Override + public String toString() { + return new Gson().toJson(this); + } + + public double getWeight() { + return weight; + } + + public void setWeight(final double weight) { + this.weight = weight; + } + + public Algo getAlgo() { + return algo; + } + + public void setAlgo(final Algo algo) { + this.algo = algo; + } + + public int getLimit() { + return limit; + } + + public void setLimit(final int limit) { + this.limit = limit; + } + + public Map getParams() { + return params; + } + + public void setParams(final Map params) { + this.params = params; + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldList.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldList.java new file mode 100644 index 000000000..3b771fa67 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldList.java @@ -0,0 +1,17 @@ +package eu.dnetlib.pace.model; + +import java.util.List; + +/** + * The Interface FieldList. + */ +public interface FieldList extends List, Field { + + /** + * String list. + * + * @return the list + */ + public List stringList(); + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldListImpl.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldListImpl.java new file mode 100644 index 000000000..17d0cae06 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldListImpl.java @@ -0,0 +1,327 @@ +package eu.dnetlib.pace.model; + +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.ListIterator; + +import com.google.common.base.Function; +import com.google.common.base.Joiner; +import com.google.common.base.Predicate; +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonObject; +import eu.dnetlib.pace.config.Type; + +/** + * The Class FieldListImpl. + */ +public class FieldListImpl extends AbstractField implements FieldList { + + /** The fields. */ + private List fields; + + /** + * Instantiates a new field list impl. + */ + public FieldListImpl() { + fields = Lists.newArrayList(); + } + + /** + * Instantiates a new field list impl. + * + * @param name + * the name + */ + public FieldListImpl(final String name, final Type type) { + super(type, name); + fields = Lists.newArrayList(); + } + + /* + * (non-Javadoc) + * + * @see java.util.List#add(java.lang.Object) + */ + @Override + public boolean add(final Field f) { + return fields.add(f); + } + + /* + * (non-Javadoc) + * + * @see java.util.List#add(int, java.lang.Object) + */ + @Override + public void add(final int i, final Field f) { + fields.add(i, f); + } + + /* + * (non-Javadoc) + * + * @see java.util.List#addAll(java.util.Collection) + */ + @Override + public boolean addAll(final Collection f) { + return fields.addAll(f); + } + + /* + * (non-Javadoc) + * + * @see java.util.List#addAll(int, java.util.Collection) + */ + @Override + public boolean addAll(final int i, final Collection f) { + return fields.addAll(i, f); + } + + /* + * (non-Javadoc) + * + * @see java.util.List#clear() + */ + @Override + public void clear() { + fields.clear(); + } + + /* + * (non-Javadoc) + * + * @see java.util.List#contains(java.lang.Object) + */ + @Override + public boolean contains(final Object o) { + return fields.contains(o); + } + + /* + * (non-Javadoc) + * + * @see java.util.List#containsAll(java.util.Collection) + */ + @Override + public boolean containsAll(final Collection f) { + return fields.containsAll(f); + } + + /* + * (non-Javadoc) + * + * @see java.util.List#get(int) + */ + @Override + public Field get(final int i) { + return fields.get(i); + } + + /* + * (non-Javadoc) + * + * @see java.util.List#indexOf(java.lang.Object) + */ + @Override + public int indexOf(final Object o) { + return fields.indexOf(o); + } + + /* + * (non-Javadoc) + * + * @see eu.dnetlib.pace.model.Field#isEmpty() + */ + @Override + public boolean isEmpty() { + return Iterables.all(fields, new Predicate() { + + @Override + public boolean apply(final Field f) { + return f.isEmpty(); + } + }); + } + + /* + * (non-Javadoc) + * + * @see java.lang.Iterable#iterator() + */ + @Override + public Iterator iterator() { + return fields.iterator(); + } + + /* + * (non-Javadoc) + * + * @see java.util.List#lastIndexOf(java.lang.Object) + */ + @Override + public int lastIndexOf(final Object o) { + return fields.lastIndexOf(o); + } + + /* + * (non-Javadoc) + * + * @see java.util.List#listIterator() + */ + @Override + public ListIterator listIterator() { + return fields.listIterator(); + } + + /* + * (non-Javadoc) + * + * @see java.util.List#listIterator(int) + */ + @Override + public ListIterator listIterator(final int i) { + return fields.listIterator(i); + } + + /* + * (non-Javadoc) + * + * @see java.util.List#remove(java.lang.Object) + */ + @Override + public boolean remove(final Object o) { + return fields.remove(o); + } + + /* + * (non-Javadoc) + * + * @see java.util.List#remove(int) + */ + @Override + public Field remove(final int i) { + return fields.remove(i); + } + + /* + * (non-Javadoc) + * + * @see java.util.List#removeAll(java.util.Collection) + */ + @Override + public boolean removeAll(final Collection f) { + return fields.removeAll(f); + } + + /* + * (non-Javadoc) + * + * @see java.util.List#retainAll(java.util.Collection) + */ + @Override + public boolean retainAll(final Collection f) { + return fields.retainAll(f); + } + + /* + * (non-Javadoc) + * + * @see java.util.List#set(int, java.lang.Object) + */ + @Override + public Field set(final int i, final Field f) { + return fields.set(i, f); + } + + /* + * (non-Javadoc) + * + * @see java.util.List#size() + */ + @Override + public int size() { + return fields.size(); + } + + /* + * (non-Javadoc) + * + * @see java.util.List#subList(int, int) + */ + @Override + public List subList(final int from, final int to) { + return fields.subList(from, to); + } + + /* + * (non-Javadoc) + * + * @see java.util.List#toArray() + */ + @Override + public Object[] toArray() { + return fields.toArray(); + } + + /* + * (non-Javadoc) + * + * @see java.util.List#toArray(java.lang.Object[]) + */ + @Override + public T[] toArray(final T[] t) { + return fields.toArray(t); + } + + /* + * (non-Javadoc) + * + * @see eu.dnetlib.pace.model.Field#stringValue() + */ + @Override + public String stringValue() { + switch (getType()) { + + case List: + case Int: + case String: + return Joiner.on(" ").join(stringList()); + case JSON: + final String json = new Gson().toJson(stringList()); + return json; + default: + throw new IllegalArgumentException("Unknown type: " + getType().toString()); + } + } + + /* + * (non-Javadoc) + * + * @see eu.dnetlib.pace.model.FieldList#stringList() + */ + @Override + public List stringList() { + return Lists.newArrayList(Iterables.transform(fields, getValuesTransformer())); + } + + private Function getValuesTransformer() { + return new Function() { + + @Override + public String apply(final Field f) { + return f.stringValue(); + } + }; + } + + @Override + public String toString() { + return stringList().toString(); + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldValue.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldValue.java new file mode 100644 index 000000000..861332729 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldValue.java @@ -0,0 +1,23 @@ +package eu.dnetlib.pace.model; + +/** + * The Interface FieldValue. + */ +public interface FieldValue extends Field { + + /** + * Gets the value. + * + * @return the value + */ + public Object getValue(); + + /** + * Sets the value. + * + * @param value + * the new value + */ + public void setValue(final Object value); + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldValueImpl.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldValueImpl.java new file mode 100644 index 000000000..ea31ec36e --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldValueImpl.java @@ -0,0 +1,126 @@ +package eu.dnetlib.pace.model; + +import java.net.MalformedURLException; +import java.net.URL; +import java.util.Iterator; +import java.util.List; + +import eu.dnetlib.pace.config.Type; +import org.apache.commons.collections.iterators.SingletonIterator; +import org.apache.commons.lang.StringUtils; + +/** + * The Class FieldValueImpl. + */ +public class FieldValueImpl extends AbstractField implements FieldValue { + + /** The value. */ + private Object value = null; + + /** + * Instantiates a new field value impl. + */ + public FieldValueImpl() {} + + /** + * Instantiates a new field value impl. + * + * @param type + * the type + * @param name + * the name + * @param value + * the value + */ + public FieldValueImpl(final Type type, final String name, final Object value) { + super(type, name); + this.value = value; + } + + /* + * (non-Javadoc) + * + * @see eu.dnetlib.pace.model.Field#isEmpty() + */ + @Override + public boolean isEmpty() { + if (value == null) return false; + + switch (type) { + case String: + case JSON: + return value.toString().isEmpty(); + case List: + List list = (List) value; + return list.isEmpty() || ((FieldValueImpl) list.get(0)).isEmpty(); + case URL: + String str = value.toString(); + return StringUtils.isBlank(str) || !isValidURL(str); + default: + return true; + } + } + + private boolean isValidURL(final String s) { + try { + new URL(s); + return true; + } catch (MalformedURLException e) { + return false; + } + } + + /* + * (non-Javadoc) + * + * @see eu.dnetlib.pace.model.FieldValue#getValue() + */ + @Override + public Object getValue() { + return value; + } + + /* + * (non-Javadoc) + * + * @see eu.dnetlib.pace.model.FieldValue#setValue(java.lang.Object) + */ + @Override + public void setValue(final Object value) { + this.value = value; + } + + /* + * (non-Javadoc) + * + * @see eu.dnetlib.pace.model.Field#stringValue() + */ + @Override + // @SuppressWarnings("unchecked") + public String stringValue() { + return String.valueOf(getValue()); + // switch (getType()) { + // + // case Int: + // return String.valueOf(getValue()); + // case List: + // return Joiner.on(" ").join((List) getValue()); + // case String: + // return (String) getValue(); + // default: + // throw new IllegalArgumentException("Unknown type: " + getType().toString()); + // } + } + + /* + * (non-Javadoc) + * + * @see java.lang.Iterable#iterator() + */ + @Override + @SuppressWarnings("unchecked") + public Iterator iterator() { + return new SingletonIterator(this); + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/MapDocument.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/MapDocument.java new file mode 100644 index 000000000..74935de56 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/MapDocument.java @@ -0,0 +1,146 @@ +package eu.dnetlib.pace.model; + +import java.util.Map; +import java.util.Set; + +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; + +/** + * The Class MapDocument. + */ +public class MapDocument implements Document { + + /** The identifier. */ + private String identifier; + + /** The field map. */ + private Map fieldMap; + + /** + * Instantiates a new map document. + */ + public MapDocument() { + identifier = null; + fieldMap = Maps.newHashMap(); + } + + /** + * Instantiates a new map document. + * + * @param identifier + * the identifier + * @param fieldMap + * the field map + */ + public MapDocument(final String identifier, final Map fieldMap) { + this.setIdentifier(identifier); + this.fieldMap = fieldMap; + } + + /** + * Instantiates a new map document. + * + * @param identifier + * the identifier + * @param data + * the data + */ + public MapDocument(final String identifier, final byte[] data) { + final MapDocument doc = MapDocumentSerializer.decode(data); + + this.fieldMap = doc.fieldMap; + this.identifier = doc.identifier; + } + + /* + * (non-Javadoc) + * + * @see eu.dnetlib.pace.model.document.Document#fields() + */ + @Override + public Iterable fields() { + return Lists.newArrayList(Iterables.concat(fieldMap.values())); + } + + /* + * (non-Javadoc) + * + * @see eu.dnetlib.pace.model.document.Document#values(java.lang.String) + */ + @Override + public Field values(final String name) { + return fieldMap.get(name); + } + + /* + * (non-Javadoc) + * + * @see eu.dnetlib.pace.model.document.Document#fieldNames() + */ + @Override + public Set fieldNames() { + return fieldMap.keySet(); + } + + /* + * (non-Javadoc) + * + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + return MapDocumentSerializer.toString(this); + // return String.format("Document(%s)", fieldMap.toString()); + } + + /** + * To byte array. + * + * @return the byte[] + */ + public byte[] toByteArray() { + return MapDocumentSerializer.toByteArray(this); + } + + /* + * (non-Javadoc) + * + * @see eu.dnetlib.pace.model.document.Document#getIdentifier() + */ + @Override + public String getIdentifier() { + return identifier; + } + + /** + * Sets the identifier. + * + * @param identifier + * the new identifier + */ + public void setIdentifier(final String identifier) { + this.identifier = identifier; + } + + /** + * Gets the field map. + * + * @return the field map + */ + public Map getFieldMap() { + return fieldMap; + } + + /** + * Sets the field map. + * + * @param fieldMap + * the field map + */ + public void setFieldMap(final Map fieldMap) { + this.fieldMap = fieldMap; + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/MapDocumentComparator.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/MapDocumentComparator.java new file mode 100644 index 000000000..7217b2b59 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/MapDocumentComparator.java @@ -0,0 +1,50 @@ +package eu.dnetlib.pace.model; + +import java.util.Comparator; + +import com.google.common.collect.Iterables; + +import eu.dnetlib.pace.clustering.NGramUtils; + +/** + * The Class MapDocumentComparator. + */ +public class MapDocumentComparator implements Comparator { + + /** The comparator field. */ + private String comparatorField; + + private final FieldList emptyField = new FieldListImpl(); + + /** + * Instantiates a new map document comparator. + * + * @param comparatorField + * the comparator field + */ + public MapDocumentComparator(final String comparatorField) { + this.comparatorField = comparatorField; + } + + /* + * (non-Javadoc) + * + * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) + */ + @Override + public int compare(final Document d1, final Document d2) { + + if (d1.values(comparatorField).isEmpty() || d2.values(comparatorField).isEmpty()) return 0; + + final String o1 = Iterables.getFirst(d1.values(comparatorField), emptyField).stringValue(); + final String o2 = Iterables.getFirst(d2.values(comparatorField), emptyField).stringValue(); + + if ((o1 == null) || (o2 == null)) return 0; + + final String to1 = NGramUtils.cleanupForOrdering(o1); + final String to2 = NGramUtils.cleanupForOrdering(o2); + + return to1.compareTo(to2); + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/MapDocumentSerializer.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/MapDocumentSerializer.java new file mode 100644 index 000000000..e5b3522df --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/MapDocumentSerializer.java @@ -0,0 +1,101 @@ +package eu.dnetlib.pace.model; + +import java.lang.reflect.Type; + +import com.google.gson.GsonBuilder; +import com.google.gson.InstanceCreator; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; + +/** + * The Class MapDocumentSerializer. + */ +public class MapDocumentSerializer implements InstanceCreator { + + @Override + public MapDocument createInstance(final Type type) { + return new MapDocument(); + } + + /** + * Decode. + * + * @param s + * the String + * @return the map document + */ + public static MapDocument decode(final String s) { + final GsonBuilder gson = new GsonBuilder(); + + gson.registerTypeAdapter(Field.class, new JsonDeserializer() { + + @Override + public Field deserialize(final JsonElement json, final Type typeOfT, final JsonDeserializationContext context) throws JsonParseException { + final FieldListImpl fl = new FieldListImpl(); + if (json.isJsonObject()) { + + fl.add(handleJsonObject(json.getAsJsonObject())); + + } else if (json.isJsonArray()) { + + for (final JsonElement e : json.getAsJsonArray()) { + if (e.isJsonObject()) { + fl.add(handleJsonObject(e.getAsJsonObject())); + } + } + } + return fl; + } + + private Field handleJsonObject(final JsonObject o) { + final FieldListImpl fl = new FieldListImpl(); + final String name = o.get("name").getAsString(); + final String type = o.get("type").getAsString(); + final String value = o.get("value").getAsString(); + fl.add(new FieldValueImpl(eu.dnetlib.pace.config.Type.valueOf(type), name, value)); + return fl; + } + }); + + return gson.create().fromJson(s, MapDocument.class); + } + + /** + * Decode. + * + * @param bytes + * the bytes + * @return the map document + */ + public static MapDocument decode(final byte[] bytes) { + return decode(new String(bytes)); + } + + /** + * To string. + * + * @param doc + * the doc + * @return the string + */ + public static String toString(final MapDocument doc) { + final GsonBuilder b = new GsonBuilder(); + return b.setPrettyPrinting().create().toJson(doc); + + } + + /** + * To byte array. + * + * @param doc + * the doc + * @return the byte[] + */ + public static byte[] toByteArray(final MapDocument doc) { + return toString(doc).getBytes(); + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/Person.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/Person.java new file mode 100644 index 000000000..ec3340672 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/Person.java @@ -0,0 +1,155 @@ +package eu.dnetlib.pace.model; + +import java.nio.charset.Charset; +import java.text.Normalizer; +import java.util.List; +import java.util.Set; + +import com.google.common.base.Joiner; +import com.google.common.base.Splitter; +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; +import com.google.common.hash.Hashing; + +import eu.dnetlib.pace.common.AbstractPaceFunctions; +import eu.dnetlib.pace.util.Capitalise; +import eu.dnetlib.pace.util.DotAbbreviations; + +public class Person { + + private static final String UTF8 = "UTF-8"; + private List name = Lists.newArrayList(); + private List surname = Lists.newArrayList(); + private List fullname = Lists.newArrayList(); + private final String original; + + private static Set particles = null; + + public Person(String s, final boolean aggressive) { + original = s; + s = Normalizer.normalize(s, Normalizer.Form.NFD); + s = s.replaceAll("\\(.+\\)", ""); + s = s.replaceAll("\\[.+\\]", ""); + s = s.replaceAll("\\{.+\\}", ""); + s = s.replaceAll("\\s+-\\s+", "-"); + s = s.replaceAll("[\\p{Punct}&&[^,-]]", " "); + s = s.replaceAll("\\d", " "); + s = s.replaceAll("\\n", " "); + s = s.replaceAll("\\.", " "); + s = s.replaceAll("\\s+", " "); + + if (aggressive) { + s = s.replaceAll("[\\p{InCombiningDiacriticalMarks}&&[^,-]]", ""); + // s = s.replaceAll("[\\W&&[^,-]]", ""); + } + + if (s.contains(",")) { + final String[] arr = s.split(","); + if (arr.length == 1) { + fullname = splitTerms(arr[0]); + } else if (arr.length > 1) { + surname = splitTerms(arr[0]); + name = splitTerms(arr[1]); + fullname.addAll(surname); + fullname.addAll(name); + } + } else { + fullname = splitTerms(s); + + int lastInitialPosition = fullname.size(); + boolean hasSurnameInUpperCase = false; + + for (int i = 0; i < fullname.size(); i++) { + final String term = fullname.get(i); + if (term.length() == 1) { + lastInitialPosition = i; + } else if (term.equals(term.toUpperCase())) { + hasSurnameInUpperCase = true; + } + } + + if (lastInitialPosition < (fullname.size() - 1)) { // Case: Michele G. Artini + name = fullname.subList(0, lastInitialPosition + 1); + surname = fullname.subList(lastInitialPosition + 1, fullname.size()); + } else if (hasSurnameInUpperCase) { // Case: Michele ARTINI + for (final String term : fullname) { + if ((term.length() > 1) && term.equals(term.toUpperCase())) { + surname.add(term); + } else { + name.add(term); + } + } + } + } + } + + private List splitTerms(final String s) { + if (particles == null) { + particles = AbstractPaceFunctions.loadFromClasspath("/eu/dnetlib/pace/config/name_particles.txt"); + } + + final List list = Lists.newArrayList(); + for (final String part : Splitter.on(" ").omitEmptyStrings().split(s)) { + if (!particles.contains(part.toLowerCase())) { + list.add(part); + } + } + return list; + } + + public List getName() { + return name; + } + + public String getNameString() { + return Joiner.on(" ").join(getName()); + } + + public List getSurname() { + return surname; + } + + public List getFullname() { + return fullname; + } + + public String getOriginal() { + return original; + } + + public String hash() { + return Hashing.murmur3_128().hashString(getNormalisedFullname(), Charset.forName(UTF8)).toString(); + } + + public String getNormalisedFirstName() { + return Joiner.on(" ").join(getCapitalFirstnames()); + } + + public String getNormalisedSurname() { + return Joiner.on(" ").join(getCapitalSurname()); + } + + public String getSurnameString() { + return Joiner.on(" ").join(getSurname()); + } + + public String getNormalisedFullname() { + return isAccurate() ? getNormalisedSurname() + ", " + getNormalisedFirstName() : Joiner.on(" ").join(fullname); + } + + public List getCapitalFirstnames() { + return Lists.newArrayList(Iterables.transform(getNameWithAbbreviations(), new Capitalise())); + } + + public List getCapitalSurname() { + return Lists.newArrayList(Iterables.transform(surname, new Capitalise())); + } + + public List getNameWithAbbreviations() { + return Lists.newArrayList(Iterables.transform(name, new DotAbbreviations())); + } + + public boolean isAccurate() { + return ((name != null) && (surname != null) && !name.isEmpty() && !surname.isEmpty()); + } +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/PersonComparatorUtils.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/PersonComparatorUtils.java new file mode 100644 index 000000000..a900a6082 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/PersonComparatorUtils.java @@ -0,0 +1,118 @@ +package eu.dnetlib.pace.model; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Set; + +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; + +public class PersonComparatorUtils { + + private static final int MAX_FULLNAME_LENGTH = 50; + + public static Set getNgramsForPerson(String fullname) { + + Set set = Sets.newHashSet(); + + if (fullname.length() > MAX_FULLNAME_LENGTH) { + return set; + } + + Person p = new Person(fullname, true); + + if (p.isAccurate()) { + for (String name : p.getName()) { + for (String surname : p.getSurname()) { + set.add((name.charAt(0) + "_" + surname).toLowerCase()); + } + } + } else { + List list = p.getFullname(); + for (int i = 0; i < list.size(); i++) { + if (list.get(i).length() > 1) { + for (int j = 0; j < list.size(); j++) { + if (i != j) { + set.add((list.get(j).charAt(0) + "_" + list.get(i)).toLowerCase()); + } + } + } + } + } + + return set; + } + + public static boolean areSimilar(String s1, String s2) { + Person p1 = new Person(s1, true); + Person p2 = new Person(s2, true); + + if (p1.isAccurate() && p2.isAccurate()) { + return verifyNames(p1.getName(), p2.getName()) && verifySurnames(p1.getSurname(), p2.getSurname()); + } else { + return verifyFullnames(p1.getFullname(), p2.getFullname()); + } + } + + private static boolean verifyNames(List list1, List list2) { + return verifySimilarity(extractExtendedNames(list1), extractExtendedNames(list2)) + && verifySimilarity(extractInitials(list1), extractInitials(list2)); + } + + private static boolean verifySurnames(List list1, List list2) { + if (list1.size() != list2.size()) { + return false; + } + for (int i = 0; i < list1.size(); i++) { + if (!list1.get(i).equalsIgnoreCase(list2.get(i))) { + return false; + } + } + return true; + } + + private static boolean verifyFullnames(List list1, List list2) { + Collections.sort(list1); + Collections.sort(list2); + return verifySimilarity(extractExtendedNames(list1), extractExtendedNames(list2)) + && verifySimilarity(extractInitials(list1), extractInitials(list2)); + } + + private static List extractExtendedNames(List list) { + ArrayList res = Lists.newArrayList(); + for (String s : list) { + if (s.length() > 1) { + res.add(s.toLowerCase()); + } + } + return res; + } + + private static List extractInitials(List list) { + ArrayList res = Lists.newArrayList(); + for (String s : list) { + res.add(s.substring(0, 1).toLowerCase()); + } + return res; + } + + private static boolean verifySimilarity(List list1, List list2) { + if (list1.size() > list2.size()) { + return verifySimilarity(list2, list1); + } + + // NB: List2 is greater than list1 (or equal) + int pos = -1; + for (String s : list1) { + int curr = list2.indexOf(s); + if (curr > pos) { + list2.set(curr, "*"); // I invalidate the found element, example: "amm - amm" + pos = curr; + } else { + return false; + } + } + return true; + } +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/adaptor/Pid.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/adaptor/Pid.java new file mode 100644 index 000000000..3dd70f7a3 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/adaptor/Pid.java @@ -0,0 +1,57 @@ +package eu.dnetlib.pace.model.adaptor; + +import java.util.List; + +import com.google.common.base.Function; +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; +import com.google.common.reflect.TypeToken; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * Created by claudio on 01/03/16. + */ +public class Pid { + + private static final Log log = LogFactory.getLog(Pid.class); + + private String value; + + private String type; + + public static List fromOafJson(final List json) { + + log.debug(String.format("\nPid: %s", json)); + + final GsonBuilder gb = new GsonBuilder(); + gb.registerTypeAdapter(Pid.class, new PidOafSerialiser()); + final Gson gson = gb.create(); + + return Lists.newArrayList(Iterables.transform(json, new Function() { + @Override + public Pid apply(final String s) { + return gson.fromJson(s, Pid.class); + } + })); + } + + public String getType() { + return type; + } + + public void setType(final String type) { + this.type = type; + } + + public String getValue() { + return value; + } + + public void setValue(final String value) { + this.value = value; + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/adaptor/PidOafSerialiser.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/adaptor/PidOafSerialiser.java new file mode 100644 index 000000000..8acaee673 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/adaptor/PidOafSerialiser.java @@ -0,0 +1,50 @@ +package eu.dnetlib.pace.model.adaptor; + +import java.lang.reflect.Type; +import java.util.List; + +import com.google.common.collect.Lists; +import com.google.gson.*; +import eu.dnetlib.pace.model.gt.GTAuthor; + +/** + * Created by claudio on 01/03/16. + */ +public class PidOafSerialiser implements JsonDeserializer { + + private static final String VALUE = "value"; + + private static final String QUALIFIER = "qualifier"; + private static final String CLASSID = "classid"; + + @Override + public Pid deserialize(final JsonElement json, final Type typeOfT, final JsonDeserializationContext context) throws JsonParseException { + + final Pid pid = new Pid(); + + pid.setType(getType(json)); + pid.setValue(getValue(json)); + + return pid; + } + + private String getValue(final JsonElement json) { + final JsonObject obj =json.getAsJsonObject(); + return obj.get(VALUE).getAsString(); + + } + + private String getType(final JsonElement json) { + + final JsonObject obj =json.getAsJsonObject(); + + if (!obj.has(QUALIFIER)) + throw new IllegalArgumentException("pid does not contain any type: " + json.toString()); + + final JsonObject qualifier = obj.getAsJsonObject(QUALIFIER); + + final JsonElement classid = qualifier.get(CLASSID); + + return classid.getAsString(); + } +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/Author.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/Author.java new file mode 100644 index 000000000..17bd49d84 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/Author.java @@ -0,0 +1,129 @@ +package eu.dnetlib.pace.model.gt; + +import java.util.List; +import java.util.Set; + +import org.apache.commons.lang.StringUtils; + +import com.google.common.collect.ComparisonChain; +import com.google.common.collect.Lists; +import com.google.common.collect.Ordering; +import com.google.common.collect.Sets; +import com.google.gson.Gson; + +public class Author implements Comparable { + + private String id; + private String fullname; + private String firstname; + private String secondnames; + + private List matches = Lists.newArrayList(); + private Set coauthors = Sets.newHashSet(); + private SubjectsMap subjectsMap = new SubjectsMap(); + + public Author() { + super(); + } + + public Author(final Author a) { + this.id = a.getId(); + this.fullname = a.getFullname(); + this.firstname = a.getFirstname(); + this.secondnames = a.getSecondnames(); + + this.matches = a.getMatches(); + this.coauthors = a.getCoauthors(); + this.subjectsMap = a.getSubjectsMap(); + } + + public boolean hasMatches() { + return (getMatches() != null) && !getMatches().isEmpty(); + } + + public boolean hasCoauthors() { + return (getCoauthors() != null) && !getCoauthors().isEmpty(); + } + + public boolean isWellFormed() { + return StringUtils.isNotBlank(getSecondnames()) && StringUtils.isNotBlank(getFirstname()); + } + + public String getId() { + return id; + } + + public void setId(final String id) { + this.id = id; + } + + public String getFullname() { + return fullname; + } + + public void setFullname(final String fullname) { + this.fullname = fullname; + } + + public String getFirstname() { + return firstname; + } + + public void setFirstname(final String firstname) { + this.firstname = firstname; + } + + public String getSecondnames() { + return secondnames; + } + + public void setSecondnames(final String secondnames) { + this.secondnames = secondnames; + } + + public List getMatches() { + return matches; + } + + public void setMatches(final List matches) { + this.matches = matches; + } + + public Set getCoauthors() { + return coauthors; + } + + public void setCoauthors(final Set coauthors) { + this.coauthors = coauthors; + } + + @Override + public String toString() { + return new Gson().toJson(this); + } + + @Override + public int hashCode() { + return getId().hashCode(); + } + + @Override + public int compareTo(final Author o) { + return ComparisonChain.start() + .compare(this.getId(), o.getId(), Ordering.natural().nullsLast()) + .result(); + } + + @Override + public boolean equals(final Object o) { + return (o instanceof Author) && getId().equals(((Author) o).getId()); + } + + public SubjectsMap getSubjectsMap() { + return subjectsMap; + } + + public void setSubjectsMap(final SubjectsMap subjectsMap) { + this.subjectsMap = subjectsMap; + } +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/AuthorSet.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/AuthorSet.java new file mode 100644 index 000000000..c3f2576be --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/AuthorSet.java @@ -0,0 +1,37 @@ +package eu.dnetlib.pace.model.gt; + +import com.google.gson.Gson; + +public class AuthorSet { + + private String id; + private Authors authors; + + public AuthorSet(final String id, final Authors authors) { + super(); + this.id = id; + this.authors = authors; + } + + public String getId() { + return id; + } + + public void setId(final String id) { + this.id = id; + } + + public Authors getAuthors() { + return authors; + } + + public void setAuthors(final Authors authors) { + this.authors = authors; + } + + @Override + public String toString() { + return new Gson().toJson(this); + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/Authors.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/Authors.java new file mode 100644 index 000000000..e74c43816 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/Authors.java @@ -0,0 +1,54 @@ +package eu.dnetlib.pace.model.gt; + +import java.util.Collection; +import java.util.HashSet; + +import com.google.common.collect.ComparisonChain; +import com.google.common.collect.Ordering; +import com.google.common.collect.Sets; +import com.google.gson.Gson; + +public class Authors extends HashSet implements Comparable { + + private static final long serialVersionUID = -6878376220805286142L; + + public Authors() { + super(); + } + + public Authors(final Collection authors) { + super(authors); + } + + public Authors(final Author author) { + super(Sets.newHashSet(author)); + } + + @Override + public int compareTo(final Authors a) { + return ComparisonChain.start() + .compare(this.size(), a.size(), Ordering.natural().nullsLast()) + .result(); + } + + @Override + public String toString() { + return new Gson().toJson(this); + } + + @Override + public boolean equals(final Object o) { + final boolean res = o instanceof Authors; + return res && (Sets.intersection(this, (Authors) o).size() == this.size()); + } + + @Override + public int hashCode() { + int res = 0; + for (final Author a : this) { + res += a.hashCode(); + } + return res; + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/CoAuthor.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/CoAuthor.java new file mode 100644 index 000000000..d4ce32de5 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/CoAuthor.java @@ -0,0 +1,50 @@ +package eu.dnetlib.pace.model.gt; + +import com.google.gson.Gson; +import org.apache.commons.lang.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +public class CoAuthor extends Author { + + private static final Log log = LogFactory.getLog(CoAuthor.class); + private String anchorId = null; + + public CoAuthor() { + super(); + } + + public CoAuthor(final Author author) { + super(author); + } + + public boolean hasAnchorId() { + return StringUtils.isNotBlank(getAnchorId()); + } + + public String getAnchorId() { + return anchorId; + } + + public void setAnchorId(final String anchorId) { + this.anchorId = anchorId; + } + + @Override + public String toString() { + return new Gson().toJson(this); + } + + @Override + public int hashCode() { + return getId() != null ? getId().hashCode() : getFullname().hashCode(); + } + + @Override + public boolean equals(final Object o) { + return (o instanceof CoAuthor) && StringUtils.isNotBlank(getId()) ? + getId().equals(((CoAuthor) o).getId()) : + getFullname().equals(((CoAuthor) o).getFullname()); + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/CoAuthorSet.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/CoAuthorSet.java new file mode 100644 index 000000000..90898f624 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/CoAuthorSet.java @@ -0,0 +1,36 @@ +package eu.dnetlib.pace.model.gt; + +import com.google.gson.Gson; + +public class CoAuthorSet { + + private Author author; + private Authors coAuthors; + + public CoAuthorSet(final Author author, final Authors coAuthors) { + super(); + this.author = author; + this.coAuthors = coAuthors; + } + + public Author getAuthor() { + return author; + } + + public void setAuthor(final Author author) { + this.author = author; + } + + public Authors getCoAuthors() { + return coAuthors; + } + + public void setCoAuthors(final Authors coAuthors) { + this.coAuthors = coAuthors; + } + + @Override + public String toString() { + return new Gson().toJson(this); + } +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/CoAuthorSetLite.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/CoAuthorSetLite.java new file mode 100644 index 000000000..a48e2d8a4 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/CoAuthorSetLite.java @@ -0,0 +1,40 @@ +package eu.dnetlib.pace.model.gt; + +import java.util.Set; + +import com.google.gson.Gson; + +public class CoAuthorSetLite { + + private String id; + + private Set coAuthors; + + public CoAuthorSetLite(final String id, final Set coAuthors) { + super(); + this.id = id; + this.coAuthors = coAuthors; + } + + public Set getCoAuthors() { + return coAuthors; + } + + public void setCoAuthors(final Set coAuthors) { + this.coAuthors = coAuthors; + } + + public String getId() { + return id; + } + + public void setId(final String id) { + this.id = id; + } + + @Override + public String toString() { + return new Gson().toJson(this); + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/CoAuthors.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/CoAuthors.java new file mode 100644 index 000000000..8e7eca269 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/CoAuthors.java @@ -0,0 +1,78 @@ +package eu.dnetlib.pace.model.gt; + +import java.util.Collection; +import java.util.HashSet; + +import com.google.common.base.Function; +import com.google.common.collect.ComparisonChain; +import com.google.common.collect.Ordering; +import com.google.common.collect.Sets; +import com.google.gson.Gson; + +public class CoAuthors extends HashSet implements Comparable { + + private static final long serialVersionUID = 2525591524516562892L; + + private Function hashFunction; + + private static Function defaultHashFunction = new Function() { + + @Override + public Integer apply(final CoAuthors input) { + int res = 0; + for (final CoAuthor a : input) { + res += a.hashCode(); + } + return res; + + } + }; + + public CoAuthors() { + super(); + } + + public CoAuthors(final Collection coauthors) { + super(coauthors); + } + + public CoAuthors(final CoAuthor coauthor) { + super(Sets.newHashSet(coauthor)); + } + + public Function getHashFunction() { + return hashFunction; + } + + public void setHashFunction(final Function hashFunction) { + this.hashFunction = hashFunction; + } + + @Override + public int compareTo(final CoAuthors a) { + return ComparisonChain.start() + .compare(this.size(), a.size(), Ordering.natural().nullsLast()) + .result(); + } + + @Override + public String toString() { + return new Gson().toJson(this); + } + + @Override + public boolean equals(final Object o) { + final boolean res = o instanceof CoAuthors; + return res && (Sets.intersection(this, (CoAuthors) o).size() == this.size()); + } + + public String hashCodeString() { + return String.valueOf(hashCode()); + } + + @Override + public int hashCode() { + return (getHashFunction() != null) ? getHashFunction().apply(this) : defaultHashFunction.apply(this); + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/GTAuthor.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/GTAuthor.java new file mode 100644 index 000000000..e91edccc1 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/GTAuthor.java @@ -0,0 +1,197 @@ +package eu.dnetlib.pace.model.gt; + +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import java.util.Map; + +import com.google.common.base.Function; +import com.google.common.collect.ComparisonChain; +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Ordering; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import eu.dnetlib.pace.model.adaptor.PidOafSerialiser; + +public class GTAuthor implements Comparable { + + private String id; + private Author author; + private Authors merged; + private CoAuthors coAuthors; + private boolean anchor; + + public GTAuthor() {} + + public GTAuthor(final String id, final Authors merged, final CoAuthors coAuthors, final boolean anchor) { + super(); + + if ((merged == null) || merged.isEmpty()) + throw new IllegalArgumentException("empty merged author set, id: " + id); + + this.author = pickAuthor(merged); + this.id = id; + this.merged = merged; + this.coAuthors = coAuthors; + this.anchor = anchor; + } + + class AuthorFrequency extends Author { + + private Integer frequency = new Integer(1); + + public AuthorFrequency(final Author a) { + super(a); + } + + public void increment() { + setFrequency(getFrequency() + 1); + } + + public Integer getFrequency() { + return frequency; + } + + public void setFrequency(final Integer frequency) { + this.frequency = frequency; + } + } + + private Author pickAuthor(final Authors merged) { + final List freq = getFrequencies(merged); + Collections.sort(freq, Collections.reverseOrder(new Comparator() { + + @Override + public int compare(final AuthorFrequency o1, final AuthorFrequency o2) { + return ComparisonChain.start().compare(o1.getFullname().length(), o2.getFullname().length()).compare(o1.getFrequency(), o2.getFrequency()) + .result(); + } + })); + + return Iterables.getFirst(freq, null); + } + + private List getFrequencies(final Authors merged) { + final Map countMap = Maps.newHashMap(); + for (final Author a : merged) { + final Integer count = countMap.get(a.getFullname()); + if (count == null) { + countMap.put(a.getFullname(), new Integer(1)); + } else { + countMap.put(a.getFullname(), count + 1); + } + } + + return Lists.newArrayList(Iterables.transform(merged, new Function() { + + @Override + public AuthorFrequency apply(final Author a) { + final AuthorFrequency af = new AuthorFrequency(a); + final Integer freq = countMap.get(af.getFullname()); + af.setFrequency(freq); + return af; + } + })); + } + + public String getId() { + return id; + } + + public void setId(final String id) { + this.id = id; + } + + public Author getAuthor() { + return author; + } + + public void setAuthor(final Author author) { + this.author = author; + } + + public boolean hasMerged() { + return (getMerged() != null) && !getMerged().isEmpty(); + } + + public Authors getMerged() { + return merged; + } + + public void setMerged(final Authors merged) { + this.merged = merged; + } + + public boolean hasCoAuthors() { + return (getCoAuthors() != null) && !getCoAuthors().isEmpty(); + } + + public CoAuthors getCoAuthors() { + return coAuthors; + } + + public void setCoAuthors(final CoAuthors coAuthors) { + this.coAuthors = coAuthors; + } + + public boolean isAnchor() { + return anchor; + } + + public void setAnchor(final boolean anchor) { + this.anchor = anchor; + } + + public static GTAuthor fromJson(final String json) { + final Gson gson = new Gson(); + return gson.fromJson(json, GTAuthor.class); + } + + public static List fromOafJson(final List json) { + + final GsonBuilder gb = new GsonBuilder(); + gb.registerTypeAdapter(GTAuthor.class, new GTAuthorOafSerialiser()); + final Gson gson = gb.create(); + + return Lists.newArrayList(Iterables.transform(json, new Function() { + @Override + public GTAuthor apply(final String s) { + return gson.fromJson(s, GTAuthor.class); + } + })); + } + + public static GTAuthor fromOafJson(final String json) { + + final GsonBuilder gb = new GsonBuilder(); + gb.registerTypeAdapter(GTAuthor.class, new GTAuthorOafSerialiser()); + final Gson gson = gb.create(); + + return gson.fromJson(json, GTAuthor.class); + } + + @Override + public String toString() { + return new Gson().toJson(this); + } + + @Override + public int hashCode() { + return getId().hashCode(); + } + + @Override + public int compareTo(final GTAuthor o) { + return ComparisonChain.start() + .compare(this.getId(), o.getId(), Ordering.natural().nullsLast()) + .result(); + } + + @Override + public boolean equals(final Object o) { + return (o instanceof GTAuthor) && getId().equals(((GTAuthor) o).getId()); + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/GTAuthorOafSerialiser.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/GTAuthorOafSerialiser.java new file mode 100644 index 000000000..cb541b953 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/GTAuthorOafSerialiser.java @@ -0,0 +1,104 @@ +package eu.dnetlib.pace.model.gt; + +import java.lang.reflect.Type; + +import com.google.common.base.Function; +import com.google.common.base.Joiner; +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; + +public class GTAuthorOafSerialiser implements JsonDeserializer { + + private static final String VALUE = "value"; + private static final String SECONDNAMES = "secondnames"; + private static final String FIRSTNAME = "firstname"; + private static final String FULLNAME = "fullname"; + private static final String ID = "id"; + private static final String MERGEDPERSON = "mergedperson"; + private static final String METADATA = "metadata"; + private static final String ANCHOR_ID = "anchorId"; + private static final String COAUTHOR = "coauthor"; + + @Override + public GTAuthor deserialize(final JsonElement json, final Type typeOfT, final JsonDeserializationContext context) throws JsonParseException { + final GTAuthor gta = new GTAuthor(); + + gta.setAuthor(getAuthor(json)); + gta.setMerged(getMerged(json)); + + gta.setCoAuthors(getCoAuthors(json)); + + return gta; + } + + private CoAuthors getCoAuthors(final JsonElement json) { + final JsonObject obj = json.getAsJsonObject(); + if (!obj.has(COAUTHOR)) return null; + return new CoAuthors(Lists.newArrayList(Iterables.transform(obj.get(COAUTHOR).getAsJsonArray(), + new Function() { + + @Override + public CoAuthor apply(final JsonElement in) { + final CoAuthor a = new CoAuthor(getAuthor(in)); + final JsonObject jsonObject = in.getAsJsonObject(); + if (jsonObject.has(ANCHOR_ID)) { + a.setAnchorId(jsonObject.get(ANCHOR_ID).getAsString()); + } + return a; + } + }))); + } + + private Author getAuthor(final JsonElement json) { + + final Author a = new Author(); + a.setCoauthors(null); + a.setMatches(null); + + final JsonObject jso = json.getAsJsonObject(); + + a.setId(jso.has(ID) ? jso.get(ID).getAsString() : null); + + final JsonObject jsonObject = json.getAsJsonObject(); + if (jsonObject.has(METADATA)) { + final JsonObject m = jsonObject.get(METADATA).getAsJsonObject(); + a.setFullname(getValue(m, FULLNAME)); + a.setFirstname(getValue(m, FIRSTNAME)); + a.setSecondnames(getValues(m, SECONDNAMES)); + } + return a; + } + + private Authors getMerged(final JsonElement json) { + final JsonObject obj = json.getAsJsonObject(); + if (!obj.has(MERGEDPERSON)) return null; + return new Authors(Lists.newArrayList(Iterables.transform(obj.get(MERGEDPERSON).getAsJsonArray(), + new Function() { + + @Override + public Author apply(final JsonElement in) { + return getAuthor(in); + } + }))); + } + + private String getValues(final JsonObject m, final String fieldName) { + return m.has(fieldName) ? Joiner.on(" ").join(Iterables.transform(m.get(fieldName).getAsJsonArray(), new Function() { + + @Override + public String apply(final JsonElement in) { + return in.getAsJsonObject().get(VALUE).getAsString(); + } + })) : null; + } + + private String getValue(final JsonObject m, final String fieldName) { + return m.has(fieldName) ? m.get(fieldName).getAsJsonObject().get(VALUE).getAsString() : null; + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/Group.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/Group.java new file mode 100644 index 000000000..86d93deb9 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/Group.java @@ -0,0 +1,44 @@ +package eu.dnetlib.pace.model.gt; + +import java.util.List; + +import com.google.gson.Gson; + +public class Group { + + private String id; + private int size; + private List results; + + public Group() {} + + public String getId() { + return id; + } + + public void setId(final String id) { + this.id = id; + } + + public int getSize() { + return size; + } + + public void setSize(final int size) { + this.size = size; + } + + public List getResults() { + return results; + } + + public void setResults(final List results) { + this.results = results; + } + + @Override + public String toString() { + return new Gson().toJson(this); + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/InvertedAuthor.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/InvertedAuthor.java new file mode 100644 index 000000000..b9fa7f966 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/InvertedAuthor.java @@ -0,0 +1,41 @@ +package eu.dnetlib.pace.model.gt; + +import java.util.Collection; + +import com.google.gson.Gson; + +public class InvertedAuthor { + + private Author author; + private Collection ids; + + public InvertedAuthor() {} + + public InvertedAuthor(final Author author, final Collection ids) { + super(); + this.author = author; + this.ids = ids; + } + + public Author getAuthor() { + return author; + } + + public void setAuthor(final Author author) { + this.author = author; + } + + public Collection getIds() { + return ids; + } + + public void setIds(final Collection ids) { + this.ids = ids; + } + + @Override + public String toString() { + return new Gson().toJson(this); + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/Match.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/Match.java new file mode 100644 index 000000000..e919069c7 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/Match.java @@ -0,0 +1,31 @@ +package eu.dnetlib.pace.model.gt; + +public class Match extends Author { + + private double score; + + public Match() { + super(); + } + + public static Match from(final Author a) { + final Match m = new Match(); + if (a.isWellFormed()) { + m.setFirstname(a.getFirstname()); + m.setSecondnames(a.getSecondnames()); + } + m.setFullname(a.getFullname()); + m.setId(a.getId()); + + return m; + } + + public double getScore() { + return score; + } + + public void setScore(final double score) { + this.score = score; + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/Result.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/Result.java new file mode 100644 index 000000000..d35c3bb2c --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/Result.java @@ -0,0 +1,72 @@ +package eu.dnetlib.pace.model.gt; + +import java.util.List; + +import com.google.common.collect.ComparisonChain; +import com.google.common.collect.Ordering; +import com.google.gson.Gson; + +public class Result implements Comparable { + + private String id; + private String originalId; + private String title; + private List authors; + + private double meanDistance; + + public Result() {} + + public String getId() { + return id; + } + + public void setId(final String id) { + this.id = id; + } + + public String getOriginalId() { + return originalId; + } + + public void setOriginalId(final String originalId) { + this.originalId = originalId; + } + + public String getTitle() { + return title; + } + + public void setTitle(final String title) { + this.title = title; + } + + public List getAuthors() { + return authors; + } + + public void setAuthors(final List authors) { + this.authors = authors; + } + + @Override + public String toString() { + return new Gson().toJson(this); + } + + @Override + public int compareTo(final Result o) { + return ComparisonChain.start() + .compare(this.getAuthors().size(), o.getAuthors().size(), Ordering.natural().nullsLast()) + .result(); + } + + public double getMeanDistance() { + return meanDistance; + } + + public void setMeanDistance(final double meanDistance) { + this.meanDistance = meanDistance; + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/ScoredResult.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/ScoredResult.java new file mode 100644 index 000000000..5d4526c4b --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/ScoredResult.java @@ -0,0 +1,26 @@ +package eu.dnetlib.pace.model.gt; + +import com.google.gson.Gson; + +public class ScoredResult extends Result { + + private double meanDistance; + + public ScoredResult() { + super(); + } + + public double getMeanDistance() { + return meanDistance; + } + + public void setMeanDistance(final double meanDistance) { + this.meanDistance = meanDistance; + } + + @Override + public String toString() { + return new Gson().toJson(this); + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/Subjects.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/Subjects.java new file mode 100644 index 000000000..fc2221aef --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/Subjects.java @@ -0,0 +1,10 @@ +package eu.dnetlib.pace.model.gt; + +import java.util.HashMap; + +/** + * Created by claudio on 07/03/16. + */ +public class Subjects extends HashMap { + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/SubjectsMap.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/SubjectsMap.java new file mode 100644 index 000000000..04ba4c6c1 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/SubjectsMap.java @@ -0,0 +1,35 @@ +package eu.dnetlib.pace.model.gt; + +import java.util.HashMap; +import java.util.Map.Entry; + +/** + * Created by claudio on 07/03/16. + */ +public class SubjectsMap extends HashMap { + + public SubjectsMap mergeFrom(SubjectsMap sm) { + + for(Entry e : sm.entrySet()) { + if (!this.containsKey(e.getKey())) { + Subjects sub = new Subjects(); + + sub.putAll(e.getValue()); + + this.put(e.getKey(), sub); + } else { + for (Entry es : e.getValue().entrySet()) { + final Subjects subjects = this.get(e.getKey()); + if (subjects.containsKey(es.getKey())) { + subjects.put(es.getKey(), es.getValue() + subjects.get(es.getKey())); + } else { + subjects.put(es.getKey(), new Integer(1)); + } + } + } + } + + return this; + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/Capitalise.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/Capitalise.java new file mode 100644 index 000000000..2d2510112 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/Capitalise.java @@ -0,0 +1,15 @@ +package eu.dnetlib.pace.util; + +import org.apache.commons.lang.WordUtils; + +import com.google.common.base.Function; + +public class Capitalise implements Function { + + private final char[] DELIM = { ' ', '-' }; + + @Override + public String apply(final String s) { + return WordUtils.capitalize(s.toLowerCase(), DELIM); + } +}; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/DotAbbreviations.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/DotAbbreviations.java new file mode 100644 index 000000000..fdbd6e99d --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/DotAbbreviations.java @@ -0,0 +1,10 @@ +package eu.dnetlib.pace.util; + +import com.google.common.base.Function; + +public class DotAbbreviations implements Function { + @Override + public String apply(String s) { + return s.length() == 1 ? s + "." : s; + } +}; \ No newline at end of file diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/dedupConfig.st b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/dedupConfig.st new file mode 100644 index 000000000..fdf569377 --- /dev/null +++ b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/dedupConfig.st @@ -0,0 +1,23 @@ +{ + "wf" : { + "configurationId" : "$configurationId$", + "threshold" : "$threshold$", + "run" : "$run$", + "entityType" : "$entityType$", + "orderField" : "$orderField$", + "queueMaxSize" : "$queueMaxSize$", + "groupMaxSize" : "$groupMaxSize$", + "slidingWindowSize" : "$slidingWindowSize$", + "rootBuilder" : [ $rootBuilder:{"$it$"};separator=", "$ ], + "includeChildren" : "$includeChildren$" + }, + "pace" : { + "clustering" : [ + ], + "conditions" : [ + ], + "model" : [ + ], + "blacklists" : { } + } +} \ No newline at end of file diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/name_particles.txt b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/name_particles.txt new file mode 100644 index 000000000..dae37c9dc --- /dev/null +++ b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/name_particles.txt @@ -0,0 +1,7 @@ +van +der +de +dell +sig +mr +mrs diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/ngram_blacklist.txt b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/ngram_blacklist.txt new file mode 100644 index 000000000..e69de29bb diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_en.txt b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_en.txt new file mode 100644 index 000000000..9a76d823c --- /dev/null +++ b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_en.txt @@ -0,0 +1,139 @@ +a +about +above +after +again +against +all +an +and +any +are +aren +as +at +be +because +been +before +being +below +between +both +but +by +can +cannot +could +couldn +did +didn +do +does +doesn +doing +don +down +during +each +few +for +from +further +had +hadn +has +hasn +have +havent +having +he +hed +her +here +hers +herself +him +himself +his +how +if +in +into +is +isn +it +its +itself +let +more +most +mustn +myself +no +nor +not +of +off +on +once +only +other +ought +our +ours +ourselves +out +over +own +s +same +shan +she +should +shouldn +so +some +such +than +that +the +their +theirs +them +themselves +then +there +these +they +this +those +through +to +too +under +until +up +very +was +wasn +we +were +weren +what +when +where +which +while +who +whom +why +with +won +would +wouldn +you +your +yours +yourself +yourselves \ No newline at end of file diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/title_blacklist.txt b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/title_blacklist.txt new file mode 100644 index 000000000..374bec1f9 --- /dev/null +++ b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/title_blacklist.txt @@ -0,0 +1,14 @@ +^(Corpus Oral Dialectal \(COD\)\.).*$ +^(Kiri Karl Morgensternile).*$ +^(\[Eksliibris Aleksandr).*\]$ +^(Kiri A\. de Vignolles).*$ +^(2 kirja Karl Morgensternile).*$ +^(Pirita kloostri idaosa arheoloogilised).*$ +^(Kiri tundmatule).*$ +^(Kiri Jenaer Allgemeine Literaturzeitung toimetusele).*$ +^(Eksliibris Nikolai Birukovile).*$ +^(Eksliibris Nikolai Issakovile).*$ +^(\[Eksliibris Aleksandr).*$ +^(WHP Cruise Summary Information of section).*$ +^(Measurement of the top quark\-pair production cross section with ATLAS in pp collisions at).*$ +^(Measurement of the spin\-dependent structure function).* \ No newline at end of file diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/AbstractPaceTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/AbstractPaceTest.java new file mode 100644 index 000000000..9d3919194 --- /dev/null +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/AbstractPaceTest.java @@ -0,0 +1,32 @@ +package eu.dnetlib.pace; + +import java.io.IOException; +import java.io.StringWriter; + +import org.apache.commons.io.IOUtils; + +import eu.dnetlib.pace.config.Type; +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.FieldValueImpl; + +public abstract class AbstractPaceTest { + + protected String readFromClasspath(final String filename) { + final StringWriter sw = new StringWriter(); + try { + IOUtils.copy(getClass().getResourceAsStream(filename), sw); + return sw.toString(); + } catch (final IOException e) { + throw new RuntimeException("cannot load resource from classpath: " + filename); + } + } + + protected Field title(final String s) { + return new FieldValueImpl(Type.String, "title", s); + } + + protected Field person(final String s) { + return new FieldValueImpl(Type.JSON, "person", s); + } + +} diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java new file mode 100644 index 000000000..c8bbda17c --- /dev/null +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java @@ -0,0 +1,108 @@ +package eu.dnetlib.pace.clustering; + +import java.util.Map; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import eu.dnetlib.pace.AbstractPaceTest; +import org.junit.Before; +import org.junit.Test; + +public class ClusteringFunctionTest extends AbstractPaceTest { + + private Map params; + + @Before + public void setUp() throws Exception { + params = Maps.newHashMap(); + } + + @Test + public void testNgram() { + params.put("ngramLen", 3); + params.put("max", 8); + params.put("maxPerToken", 2); + params.put("minNgramLen", 1); + + final ClusteringFunction ngram = new Ngrams(params); + + final String s = "Search for the Standard Model Higgs Boson"; + System.out.println(s); + System.out.println(ngram.apply(Lists.newArrayList(title(s)))); + } + + @Test + public void testNgramPairs() { + params.put("ngramLen", 3); + params.put("max", 3); + + final ClusteringFunction np = new NgramPairs(params); + + final String s = "Search for the Standard Model Higgs Boson"; + System.out.println(s); + System.out.println(np.apply(Lists.newArrayList(title(s)))); + } + + @Test + public void testSortedNgramPairs() { + params.put("ngramLen", 3); + params.put("max", 1); + + final ClusteringFunction np = new SortedNgramPairs(params); + + final String s1 = "University of Pisa"; + System.out.println(s1); + System.out.println(np.apply(Lists.newArrayList(title(s1)))); + + final String s2 = "Pisa University"; + System.out.println(s2); + System.out.println(np.apply(Lists.newArrayList(title(s2)))); + } + + @Test + public void testAcronym() { + params.put("max", 4); + params.put("minLen", 1); + params.put("maxLen", 3); + + final ClusteringFunction acro = new Acronyms(params); + + final String s = "Search for the Standard Model Higgs Boson"; + System.out.println(s); + System.out.println(acro.apply(Lists.newArrayList(title(s)))); + } + + @Test + public void testSuffixPrefix() { + params.put("len", 3); + params.put("max", 4); + + final ClusteringFunction sp = new SuffixPrefix(params); + + final String s = "Search for the Standard Model Higgs Boson"; + System.out.println(s); + System.out.println(sp.apply(Lists.newArrayList(title(s)))); + } + + @Test + public void testFieldValue() { + + params.put("randomLength", 5); + + final ClusteringFunction sp = new SpaceTrimmingFieldValue(params); + + final String s = "Search for the Standard Model Higgs Boson"; + System.out.println(s); + System.out.println(sp.apply(Lists.newArrayList(title(s)))); + } + + @Test + public void testPersonClustering2() { + final ClusteringFunction cf = new PersonClustering(params); + + final String s = readFromClasspath("gt.author.json"); + System.out.println(s); + System.out.println(cf.apply(Lists.newArrayList(person(s)))); + } + +} diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java new file mode 100644 index 000000000..26ff387c8 --- /dev/null +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java @@ -0,0 +1,24 @@ +package eu.dnetlib.pace.config; + +import java.io.IOException; + +import eu.dnetlib.pace.AbstractPaceTest; +import eu.dnetlib.pace.model.MapDocument; +import eu.dnetlib.pace.model.MapDocumentSerializer; +import org.apache.commons.io.IOUtils; +import org.junit.Test; + +import static org.junit.Assert.assertNotNull; + +public class ConfigTest extends AbstractPaceTest { + + @Test + public void test() throws IOException { + final DedupConfig cfg = DedupConfig.load(readFromClasspath("result.pace.conf.json")); + + assertNotNull(cfg); + + System.out.println(cfg.toString()); + } + +} diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java new file mode 100644 index 000000000..f28251c57 --- /dev/null +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java @@ -0,0 +1,38 @@ +package eu.dnetlib.pace.distance; + +import org.junit.Before; +import org.junit.Test; + +import eu.dnetlib.pace.common.AbstractPaceFunctions; + +public class DistanceAlgoTest extends AbstractPaceFunctions { + + private final static String TEST_STRING = "Toshiba NB550D: è un netbook su piattaforma AMD Fusion⁽¹²⁾."; + + @Before + public void setup() { + System.out.println("****************************************************************"); + System.out.println("Test String : " + TEST_STRING); + } + + @Test + public void testGetNumbers() { + System.out.println("Numbers : " + getNumbers(TEST_STRING)); + } + + @Test + public void testRemoveSymbols() { + System.out.println("Without symbols: " + removeSymbols(TEST_STRING)); + } + + @Test + public void testFixAliases() { + System.out.println("Fixed aliases : " + fixAliases(TEST_STRING)); + } + + @Test + public void testCleanup() { + System.out.println("cleaned up : " + cleanup(TEST_STRING)); + } + +} diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/model/PersonComparatorUtilsNGramsTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/model/PersonComparatorUtilsNGramsTest.java new file mode 100644 index 000000000..b78866c6c --- /dev/null +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/model/PersonComparatorUtilsNGramsTest.java @@ -0,0 +1,126 @@ +package eu.dnetlib.pace.model; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import java.util.Set; + +import org.junit.Test; + +public class PersonComparatorUtilsNGramsTest { + + @Test + public void testNormaizePerson_1() { + verifyGetNgramsForPerson("Artini Michele", 2, "a_michele", "m_artini"); + } + + @Test + public void testNormaizePerson_2() { + verifyGetNgramsForPerson("Michele Artini", 2, "a_michele", "m_artini"); + } + + @Test + public void testNormaizePerson_3() { + verifyGetNgramsForPerson("Michele ARTINI", 1, "m_artini"); + } + + @Test + public void testNormaizePerson_4() { + verifyGetNgramsForPerson("ARTINI Michele", 1, "m_artini"); + } + + @Test + public void testNormaizePerson_5() { + verifyGetNgramsForPerson("Michele G. Artini", 2, "m_artini", "g_artini"); + } + + @Test + public void testNormaizePerson_6() { + verifyGetNgramsForPerson(" Artini, Michele ", 1, "m_artini"); + } + + @Test + public void testNormaizePerson_7() { + verifyGetNgramsForPerson("Artini, Michele (sig.)", 1, "m_artini"); + } + + @Test + public void testNormaizePerson_8() { + verifyGetNgramsForPerson("Artini Michele [sig.] ", 2, "a_michele", "m_artini"); + } + + @Test + public void testNormaizePerson_9() { + verifyGetNgramsForPerson("Artini, M", 1, "m_artini"); + } + + @Test + public void testNormaizePerson_10() { + verifyGetNgramsForPerson("Artini, M.", 1, "m_artini"); + } + + @Test + public void testNormaizePerson_11() { + verifyGetNgramsForPerson("Artini, M. (sig.)", 1, "m_artini"); + } + + @Test + public void testNormaizePerson_12() { + verifyGetNgramsForPerson("Artini, M[sig.] ", 1, "m_artini"); + } + + @Test + public void testNormaizePerson_13() { + verifyGetNgramsForPerson("Artini-SIG, Michele ", 1, "m_artini-sig"); + } + + @Test + public void testNormaizePerson_14() { + verifyGetNgramsForPerson("Artini - SIG, Michele ", 1, "m_artini-sig"); + } + + @Test + public void testNormaizePerson_15() { + verifyGetNgramsForPerson("Artini {sig.}, M", 1, "m_artini"); + } + + @Test + public void testNormaizePerson_16() { + verifyGetNgramsForPerson("Artini, M., sig.", 1, "m_artini"); + } + + @Test + public void testNormaizePerson_17() { + verifyGetNgramsForPerson("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA, BBBBBBBBBBBBBBBBBBBBBBBBBBBBB CCCCCCCCCCCCCCCCCCCC", 0); + } + + @Test + public void testNormaizePerson_18() { + verifyGetNgramsForPerson("Dell'amico, Andrea", 1, "a_amico"); + } + + @Test + public void testNormaizePerson_19() { + verifyGetNgramsForPerson("Smith, Paul van der", 1, "p_smith"); + } + + @Test + public void testNormaizePerson_20() { + verifyGetNgramsForPerson("AAAAAAA, BBBB, CCCC, DDDD, EEEE", 1, "b_aaaaaaa"); + } + + @Test + public void testNormaizePerson_21() { + verifyGetNgramsForPerson("Kompetenzzentrum Informelle Bildung (KIB),", 6); + } + + private void verifyGetNgramsForPerson(String name, int expectedSize, String... expectedTokens) { + Set list = PersonComparatorUtils.getNgramsForPerson(name); + System.out.println(list); + assertEquals(expectedSize, list.size()); + for (String s : expectedTokens) { + assertTrue(list.contains(s)); + } + } + +} diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/model/PersonComparatorUtilsSimilarityTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/model/PersonComparatorUtilsSimilarityTest.java new file mode 100644 index 000000000..20da8db87 --- /dev/null +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/model/PersonComparatorUtilsSimilarityTest.java @@ -0,0 +1,89 @@ +package eu.dnetlib.pace.model; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +public class PersonComparatorUtilsSimilarityTest { + + @Test + public void testSimilarity_0() { + assertTrue(PersonComparatorUtils.areSimilar("Artini Michele", "Michele Artini")); + } + + @Test + public void testSimilarity_1() { + assertTrue(PersonComparatorUtils.areSimilar("ARTINI Michele", "Artini, Michele")); + } + + @Test + public void testSimilarity_2() { + assertTrue(PersonComparatorUtils.areSimilar("Artini, M.", "Artini Michele")); + } + + @Test + public void testSimilarity_3() { + assertTrue(PersonComparatorUtils.areSimilar("Artini, M.G.", "Artini, Michele")); + } + + @Test + public void testSimilarity_4() { + assertTrue(PersonComparatorUtils.areSimilar("Artini, M.", "Artini, M.G.")); + } + + @Test + public void testSimilarity_5() { + assertTrue(PersonComparatorUtils.areSimilar("Artini, M. (sig.)", "Artini, Michele")); + } + + @Test + public void testSimilarity_6() { + assertFalse(PersonComparatorUtils.areSimilar("Artini, M.", "Artini, G.")); + } + + @Test + public void testSimilarity_7() { + assertFalse(PersonComparatorUtils.areSimilar("Artini, M.G.", "Artini, M.A.")); + } + + @Test + public void testSimilarity_8() { + assertFalse(PersonComparatorUtils.areSimilar("Artini, M.", "Artini, Giuseppe")); + } + + @Test + public void testSimilarity_9() { + assertFalse(PersonComparatorUtils.areSimilar("Manghi, Paolo", "Artini, Michele")); + } + + @Test + public void testSimilarity_10() { + assertTrue(PersonComparatorUtils.areSimilar("Artini, Michele", "Artini, Michele Giovanni")); + } + + @Test + public void testSimilarity_11() { + assertFalse(PersonComparatorUtils.areSimilar("Artini, M.A.G.", "Artini, M.B.G.")); + } + + @Test + public void testSimilarity_12() { + assertFalse(PersonComparatorUtils.areSimilar("Artini Manghi, M.", "Artini, Michele")); + } + + @Test + public void testSimilarity_13() { + assertTrue(PersonComparatorUtils.areSimilar("Artini Manghi, M.", "Artini Manghi Michele")); + } + + @Test + public void testSimilarity_14() { + assertFalse(PersonComparatorUtils.areSimilar("Artini, Michele", "Michele, Artini")); + } + + @Test + public void testSimilarity_15() { + assertTrue(PersonComparatorUtils.areSimilar("Artini, M.", "Michele ARTINI")); + } +} \ No newline at end of file diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/model/PersonTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/model/PersonTest.java new file mode 100644 index 000000000..a457fd8de --- /dev/null +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/model/PersonTest.java @@ -0,0 +1,111 @@ +package eu.dnetlib.pace.model; + +import static org.junit.Assert.assertEquals; + +import java.text.Normalizer; +import java.util.Queue; + +import org.junit.Test; + +import com.google.common.collect.Lists; + +public class PersonTest { + + @Test + public void test_1() { + check("Atzori, Claudio", "Atzori, Claudio"); + } + + @Test + public void test_2() { + check("Atzori, Claudio A.", "Atzori, Claudio A."); + } + + @Test + public void test_3() { + check("Claudio ATZORI", "Atzori, Claudio"); + } + + @Test + public void test_4() { + check("ATZORI, Claudio", "Atzori, Claudio"); + } + + @Test + public void test_5() { + check("Claudio Atzori", "Claudio Atzori"); + } + + @Test + public void test_6() { + check(" Manghi , Paolo", "Manghi, Paolo"); + } + + @Test + public void test_7() { + check("ATZORI, CLAUDIO", "Atzori, Claudio"); + } + + @Test + public void test_8() { + check("ATZORI, CLAUDIO A", "Atzori, Claudio A."); + } + + @Test + public void test_9() { + check("Bølviken, B.", "Bølviken, B."); + } + + @Test + public void test_10() { + check("Bñlviken, B.", "B" + Normalizer.normalize("ñ", Normalizer.Form.NFD) + "lviken, B."); + } + + @Test + public void test_11() { + check("aáeéiíoóöőuúüű AÁEÉIÍOÓÖŐUÚÜŰ ø", "Aaeeiioooouuuu, Aaeeiioooouuuu Ø.", true); + } + + @Test + public void test_12() { + check("aáeéiíoóöőuúüű AÁEÉIÍOÓÖŐUÚÜŰz ø", Normalizer.normalize("aáeéiíoóöőuúüű AÁEÉIÍOÓÖŐUÚÜŰz ø", Normalizer.Form.NFD), false); + } + + @Test + public void test_13() { + check("Tkačíková, Daniela", Normalizer.normalize("Tkačíková, Daniela", Normalizer.Form.NFD), false); + } + + @Test + public void test_hashes() { + checkHash(" Claudio ATZORI ", "ATZORI Claudio", "Atzori , Claudio", "ATZORI, Claudio"); + } + + private void checkHash(String... ss) { + Queue q = Lists.newLinkedList(Lists.newArrayList(ss)); + String h1 = new Person(q.remove(), false).hash(); + while (!q.isEmpty()) { + assertEquals(h1, new Person(q.remove(), false).hash()); + } + } + + private void check(String s, String expectedFullName) { + check(s, expectedFullName, false); + } + + private void check(String s, String expectedFullName, boolean aggressive) { + Person p = new Person(s, aggressive); + + System.out.println("original: " + p.getOriginal()); + System.out.println("accurate: " + p.isAccurate()); + System.out.println("normalised: '" + p.getNormalisedFullname() + "'"); + if (p.isAccurate()) { + System.out.println("name: " + p.getNormalisedFirstName()); + System.out.println("surname: " + p.getNormalisedSurname()); + } + System.out.println("hash: " + p.hash()); + System.out.println(""); + assertEquals(expectedFullName, p.getNormalisedFullname()); + } + +} diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/clustering/gt.author.json b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/clustering/gt.author.json new file mode 100644 index 000000000..d7fbf2166 --- /dev/null +++ b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/clustering/gt.author.json @@ -0,0 +1 @@ +{"metadata": {"firstname": {"value": "Margaret R."},"secondnames": [{"value": "Macdonald"}],"fullname": {"value": "Macdonald, Margaret R."}},"coauthor": [{"id": "30|od________88::1d22c2a22d7a1c7082006154ae6dd221","anchorId": "30|dedup_wf_001::7b1cfb3c4ec57d71cf331ba669a8e12c","metadata": {"firstname": {"value": "Maria Teresa"},"secondnames": [{"value": "Catanese"}],"fullname": {"value": "Catanese, Maria Teresa"}}},{"id": "30|od________88::2299c043fcaa751e266c82ec24b5a6cf","anchorId": "30|dedup_wf_001::ce73dc26c95e27d22f88e9ed9948b322","metadata": {"firstname": {"value": "Thomas S."},"secondnames": [{"value": "Oh"}],"fullname": {"value": "Oh, Thomas S."}}},{"id": "30|od_______908::52d670e6298c055c6c9c496aad4f2913","anchorId": "30|dedup_wf_001::8e1fafd9778a4cb5569830c299e5b52e","metadata": {"firstname": {"value": "Salman R."},"secondnames": [{"value": "Khetani"}],"fullname": {"value": "Khetani, Salman R."}}},{"id": "30|od________88::1458ae8d3663574e53dcd849ff8aa27d","anchorId": "30|dedup_wf_001::dd9f1dce92f402424de0d7d8afd7ca2d","metadata": {"firstname": {"value": "Sangeeta N."},"secondnames": [{"value": "Bhatia"}],"fullname": {"value": "Bhatia, Sangeeta N."}}},{"id": "30|od________88::837b992599e35b1a9baed833bf9a216e","anchorId": "30|dedup_wf_001::acb87ae171fd37f0ad65bcb728b11064","metadata": {"firstname": {"value": "Andrew J."},"secondnames": [{"value": "Syder"}],"fullname": {"value": "Syder, Andrew J."}}},{"id": "30|od_______908::2299c043fcaa751e266c82ec24b5a6cf","anchorId": "30|dedup_wf_001::ce73dc26c95e27d22f88e9ed9948b322","metadata": {"firstname": {"value": "Thomas S."},"secondnames": [{"value": "Oh"}],"fullname": {"value": "Oh, Thomas S."}}},{"id": "30|od_______908::97e1b5f96f76500dfd9e10ee0de5d380","anchorId": "30|dedup_wf_001::da35eb52feb1b1a789861976342b2570","metadata": {"firstname": {"value": "John W."},"secondnames": [{"value": "Schoggins"}],"fullname": {"value": "Schoggins, John W."}}},{"id": "30|od________88::97e1b5f96f76500dfd9e10ee0de5d380","anchorId": "30|dedup_wf_001::da35eb52feb1b1a789861976342b2570","metadata": {"firstname": {"value": "John W."},"secondnames": [{"value": "Schoggins"}],"fullname": {"value": "Schoggins, John W."}}},{"id": "30|od_______908::5bd4cd7e4065ffd73f39817e2a1bb1ae","anchorId": "30|dedup_wf_001::8ea4c1052c6a7aa1bb2b1097cb3893d2","metadata": {"firstname": {"value": "Lok Man J."},"secondnames": [{"value": "Law"}],"fullname": {"value": "Law, Lok Man J."}}},{"id": "30|od________88::845fd19e1e7201fcd1c492775f04a56b","anchorId": "30|dedup_wf_001::4e971919118e71ea2b2ac840ca319956","metadata": {"firstname": {"value": "Alexander"},"secondnames": [{"value": "Ploss"}],"fullname": {"value": "Ploss, Alexander"}}},{"id": "30|od_______908::7b6a37259ff32dba0e7ea884b8446228","anchorId": "30|dedup_wf_001::a600d9103b7947b1c52f823f8e4833cc","metadata": {"firstname": {"value": "Christopher T."},"secondnames": [{"value": "Jones"}],"fullname": {"value": "Jones, Christopher T."}}},{"id": "30|od________88::5bd4cd7e4065ffd73f39817e2a1bb1ae","anchorId": "30|dedup_wf_001::8ea4c1052c6a7aa1bb2b1097cb3893d2","metadata": {"firstname": {"value": "Lok Man J."},"secondnames": [{"value": "Law"}],"fullname": {"value": "Law, Lok Man J."}}},{"id": "30|od_______908::1d22c2a22d7a1c7082006154ae6dd221","anchorId": "30|dedup_wf_001::7b1cfb3c4ec57d71cf331ba669a8e12c","metadata": {"firstname": {"value": "Maria Teresa"},"secondnames": [{"value": "Catanese"}],"fullname": {"value": "Catanese, Maria Teresa"}}},{"id": "30|od________88::52d670e6298c055c6c9c496aad4f2913","anchorId": "30|dedup_wf_001::8e1fafd9778a4cb5569830c299e5b52e","metadata": {"firstname": {"value": "Salman R."},"secondnames": [{"value": "Khetani"}],"fullname": {"value": "Khetani, Salman R."}}},{"id": "30|od_______908::46acd9f206c2559f13b9119f8c5aef4c","anchorId": "30|dedup_wf_001::06a55cf2c97156d48ec49bcaf4bddcaf","metadata": {"firstname": {"value": "Stephen P."},"secondnames": [{"value": "Goff"}],"fullname": {"value": "Goff, Stephen P."}}},{"id": "30|od________88::7b6a37259ff32dba0e7ea884b8446228","anchorId": "30|dedup_wf_001::a600d9103b7947b1c52f823f8e4833cc","metadata": {"firstname": {"value": "Christopher T."},"secondnames": [{"value": "Jones"}],"fullname": {"value": "Jones, Christopher T."}}},{"id": "30|od_______908::1458ae8d3663574e53dcd849ff8aa27d","anchorId": "30|dedup_wf_001::dd9f1dce92f402424de0d7d8afd7ca2d","metadata": {"firstname": {"value": "Sangeeta N."},"secondnames": [{"value": "Bhatia"}],"fullname": {"value": "Bhatia, Sangeeta N."}}},{"id": "30|od_______908::845fd19e1e7201fcd1c492775f04a56b","anchorId": "30|dedup_wf_001::4e971919118e71ea2b2ac840ca319956","metadata": {"firstname": {"value": "Alexander"},"secondnames": [{"value": "Ploss"}],"fullname": {"value": "Ploss, Alexander"}}},{"id": "30|od_______908::837b992599e35b1a9baed833bf9a216e","anchorId": "30|dedup_wf_001::acb87ae171fd37f0ad65bcb728b11064","metadata": {"firstname": {"value": "Andrew J."},"secondnames": [{"value": "Syder"}],"fullname": {"value": "Syder, Andrew J."}}}],"mergedperson": [{"id": "30|od_______908::715fc4c41052a5b8ce881b23b826f648","metadata": {"firstname": {"value": "Margaret R."},"secondnames": [{"value": "Macdonald"}],"fullname": {"value": "Macdonald, Margaret R."}}},{"id": "30|od________88::715fc4c41052a5b8ce881b23b826f648","metadata": {"firstname": {"value": "Margaret R."},"secondnames": [{"value": "Macdonald"}],"fullname": {"value": "Macdonald, Margaret R."}}}],"anchor": true} \ No newline at end of file diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/result.pace.conf.json b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/result.pace.conf.json new file mode 100644 index 000000000..7d8fe244b --- /dev/null +++ b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/result.pace.conf.json @@ -0,0 +1,53 @@ +{ + "wf" : { + "threshold" : "0.99", + "run" : "001", + "entityType" : "result", + "orderField" : "title", + "queueMaxSize" : "2000", + "groupMaxSize" : "10", + "slidingWindowSize" : "200", + "rootBuilder" : [ "result" ], + "includeChildren" : "true" + }, + "pace" : { + "clustering" : [ + { "name" : "acronyms", "fields" : [ "title" ], "params" : { "max" : "1", "minLen" : "2", "maxLen" : "4"} }, + { "name" : "ngrampairs", "fields" : [ "title" ], "params" : { "max" : "1", "ngramLen" : "3"} }, + { "name" : "suffixprefix", "fields" : [ "title" ], "params" : { "max" : "1", "len" : "3" } } + ], + "strictConditions" : [ + { "name" : "exactMatch", "fields" : [ "pid" ] } + ], + "conditions" : [ + { "name" : "yearMatch", "fields" : [ "dateofacceptance" ] }, + { "name" : "titleVersionMatch", "fields" : [ "title" ] }, + { "name" : "sizeMatch", "fields" : [ "authors" ] } + ], + "model" : [ + { "name" : "pid", "algo" : "Null", "type" : "String", "weight" : "0.0", "ignoreMissing" : "true", "path" : "pid[qualifier#classid = {doi}]/value", "overrideMatch" : "true" }, + { "name" : "title", "algo" : "JaroWinkler", "type" : "String", "weight" : "1.0", "ignoreMissing" : "false", "path" : "result/metadata/title[qualifier#classid = {main title}]/value" }, + { "name" : "dateofacceptance", "algo" : "Null", "type" : "String", "weight" : "0.0", "ignoreMissing" : "true", "path" : "result/metadata/dateofacceptance/value" } , + { "name" : "authors", "algo" : "Null", "type" : "List", "weight" : "0.0", "ignoreMissing" : "true", "path" : "result/author/metadata/fullname/value" } + ], + "blacklists" : { + "title" : [ + "^(Corpus Oral Dialectal \\(COD\\)\\.).*$", + "^(Kiri Karl Morgensternile).*$", + "^(\\[Eksliibris Aleksandr).*\\]$", + "^(\\[Eksliibris Aleksandr).*$", + "^(Eksliibris Aleksandr).*$", + "^(Kiri A\\. de Vignolles).*$", + "^(2 kirja Karl Morgensternile).*$", + "^(Pirita kloostri idaosa arheoloogilised).*$", + "^(Kiri tundmatule).*$", + "^(Kiri Jenaer Allgemeine Literaturzeitung toimetusele).*$", + "^(Eksliibris Nikolai Birukovile).*$", + "^(Eksliibris Nikolai Issakovile).*$", + "^(WHP Cruise Summary Information of section).*$", + "^(Measurement of the top quark\\-pair production cross section with ATLAS in pp collisions at).*$", + "^(Measurement of the spin\\-dependent structure function).*" + ] } + } + +} diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/title_blacklist.txt b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/title_blacklist.txt new file mode 100644 index 000000000..f9774db08 --- /dev/null +++ b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/title_blacklist.txt @@ -0,0 +1,15 @@ +^(Corpus Oral Dialectal \(COD\)\.).*$ +^(Kiri Karl Morgensternile).*$ +^(\[Eksliibris Aleksandr).*\]$ +^(Kiri A\. de Vignolles).*$ +^(2 kirja Karl Morgensternile).*$ +^(Pirita kloostri idaosa arheoloogilised).*$ +^(Kiri tundmatule).*$ +^(Kiri Jenaer Allgemeine Literaturzeitung toimetusele).*$ +^(Eksliibris Nikolai Birukovile).*$ +^(Eksliibris Nikolai Issakovile).*$ +^(\[Eksliibris Aleksandr).*$ +^(WHP Cruise Summary Information of section).*$ +^(Measurement of the top quark\-pair production cross section with ATLAS in pp collisions at).*$ +^(Measurement of the spin\-dependent structure function).* +^(lorem ipsum).* \ No newline at end of file From d1c73bcf9049ee7b5b5234598665f0a5393ac1a0 Mon Sep 17 00:00:00 2001 From: Sandro La Bruzzo Date: Tue, 2 Oct 2018 17:07:17 +0200 Subject: [PATCH 002/449] Added First Implementation of Spark Test --- dnet-pace-core/pom.xml | 2 +- .../pace/clustering/BlacklistAwareClusteringCombiner.java | 7 +++++-- .../src/main/java/eu/dnetlib/pace/config/DedupConfig.java | 3 ++- .../src/main/java/eu/dnetlib/pace/model/Field.java | 4 +++- .../src/main/java/eu/dnetlib/pace/model/MapDocument.java | 3 ++- 5 files changed, 13 insertions(+), 6 deletions(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 8e0e0f741..cb31ed689 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -23,7 +23,7 @@ com.google.guava guava - ${google.guava.version} + 15.0 com.google.code.gson diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/BlacklistAwareClusteringCombiner.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/BlacklistAwareClusteringCombiner.java index b007853a9..4ecedc4c0 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/BlacklistAwareClusteringCombiner.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/BlacklistAwareClusteringCombiner.java @@ -22,9 +22,12 @@ public class BlacklistAwareClusteringCombiner extends ClusteringCombiner { private static final Log log = LogFactory.getLog(BlacklistAwareClusteringCombiner.class); - public static Collection filterAndCombine(final MapDocument a, final Config conf, final Map> blacklists) { - final Document filtered = new BlacklistAwareClusteringCombiner().filter(a, blacklists); + + + public static Collection filterAndCombine(final MapDocument a, final Config conf) { + + final Document filtered = new BlacklistAwareClusteringCombiner().filter(a, conf.blacklists()); return combine(filtered, conf); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java index 5116f3684..eb041844a 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java @@ -1,6 +1,7 @@ package eu.dnetlib.pace.config; import java.io.IOException; +import java.io.Serializable; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -19,7 +20,7 @@ import eu.dnetlib.pace.model.FieldDef; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -public class DedupConfig implements Config { +public class DedupConfig implements Config, Serializable { private static final Log log = LogFactory.getLog(DedupConfig.class); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/Field.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/Field.java index 9c97ce38d..4b7a73e31 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/Field.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/Field.java @@ -2,10 +2,12 @@ package eu.dnetlib.pace.model; import eu.dnetlib.pace.config.Type; +import java.io.Serializable; + /** * The Interface Field. */ -public interface Field extends Iterable { +public interface Field extends Iterable, Serializable { /** * Gets the name. diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/MapDocument.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/MapDocument.java index 74935de56..77b7c120e 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/MapDocument.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/MapDocument.java @@ -1,5 +1,6 @@ package eu.dnetlib.pace.model; +import java.io.Serializable; import java.util.Map; import java.util.Set; @@ -10,7 +11,7 @@ import com.google.common.collect.Maps; /** * The Class MapDocument. */ -public class MapDocument implements Document { +public class MapDocument implements Document, Serializable { /** The identifier. */ private String identifier; From 1bb5c26e6dca0f5eecd17b573904134bfb7c28e3 Mon Sep 17 00:00:00 2001 From: Sandro La Bruzzo Date: Thu, 11 Oct 2018 15:19:20 +0200 Subject: [PATCH 003/449] Added FSpark Implementation of dedup --- .../src/main/java/eu/dnetlib/pace/config/PaceConfig.java | 3 ++- .../src/main/java/eu/dnetlib/pace/config/WfConfig.java | 3 ++- .../src/main/java/eu/dnetlib/pace/model/ClusteringDef.java | 3 ++- .../src/main/java/eu/dnetlib/pace/model/CondDef.java | 3 ++- .../src/main/java/eu/dnetlib/pace/model/FieldDef.java | 3 ++- 5 files changed, 10 insertions(+), 5 deletions(-) diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java index ffc67e775..37fea00cd 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java @@ -1,5 +1,6 @@ package eu.dnetlib.pace.config; +import java.io.Serializable; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -12,7 +13,7 @@ import eu.dnetlib.pace.model.CondDef; import eu.dnetlib.pace.model.FieldDef; import org.apache.commons.collections.CollectionUtils; -public class PaceConfig { +public class PaceConfig implements Serializable { private List model; private List strictConditions; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/WfConfig.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/WfConfig.java index 9e836ebe2..bcf2d6539 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/WfConfig.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/WfConfig.java @@ -1,5 +1,6 @@ package eu.dnetlib.pace.config; +import java.io.Serializable; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -9,7 +10,7 @@ import com.google.common.collect.Sets; import com.google.gson.GsonBuilder; import org.apache.commons.lang.StringUtils; -public class WfConfig { +public class WfConfig implements Serializable { /** * Entity type. diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java index 5909788b7..db7092b0d 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java @@ -1,12 +1,13 @@ package eu.dnetlib.pace.model; +import java.io.Serializable; import java.util.List; import java.util.Map; import com.google.gson.Gson; import eu.dnetlib.pace.clustering.*; -public class ClusteringDef { +public class ClusteringDef implements Serializable { private Clustering name; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/CondDef.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/CondDef.java index 33f30faff..747f6c103 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/CondDef.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/CondDef.java @@ -1,12 +1,13 @@ package eu.dnetlib.pace.model; +import java.io.Serializable; import java.util.List; import com.google.gson.Gson; import eu.dnetlib.pace.condition.*; import eu.dnetlib.pace.config.Cond; -public class CondDef { +public class CondDef implements Serializable { private Cond name; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java index 776c20306..8507b0cd7 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java @@ -1,5 +1,6 @@ package eu.dnetlib.pace.model; +import java.io.Serializable; import java.util.List; import java.util.Map; @@ -14,7 +15,7 @@ import eu.dnetlib.pace.distance.algo.*; /** * The schema is composed by field definitions (FieldDef). Each field has a type, a name, and an associated distance algorithm. */ -public class FieldDef { +public class FieldDef implements Serializable { public final static String PATH_SEPARATOR = "/"; From 72ebf7c0f32af23bd22e33cc385c4d9cd587f775 Mon Sep 17 00:00:00 2001 From: Michele De Bonis Date: Thu, 18 Oct 2018 10:12:44 +0200 Subject: [PATCH 004/449] update of the spark test --- .../src/main/java/eu/dnetlib/pace/distance/eval/ScoreResult.java | 1 + 1 file changed, 1 insertion(+) diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/ScoreResult.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/ScoreResult.java index a61cf6e15..b5cdad730 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/ScoreResult.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/ScoreResult.java @@ -50,6 +50,7 @@ public class ScoreResult { @Override public String toString() { final GsonBuilder b = new GsonBuilder(); + b.serializeSpecialFloatingPointValues(); return b.setPrettyPrinting().create().toJson(this); } } From 1b46966383d619dd1672d723e81c708332d1c4a4 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Thu, 18 Oct 2018 11:56:26 +0200 Subject: [PATCH 005/449] updated maven project structure --- dnet-pace-core/pom.xml | 30 +-- .../eu/dnetlib/pace/util/BlockProcessor.java | 199 ++++++++++++++++++ .../java/eu/dnetlib/pace/util/Reporter.java | 11 + 3 files changed, 220 insertions(+), 20 deletions(-) create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/util/Reporter.java diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index cb31ed689..d35fd68f1 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -1,70 +1,60 @@ + + 4.0.0 + eu.dnetlib - dnet45-parent - 1.0.0 - + dnet-dedup + 3.0.0-SNAPSHOT + ../pom.xml - 4.0.0 - eu.dnetlib + dnet-pace-core - jar - 2.6.8-SNAPSHOT - - scm:svn:https://svn.driver.research-infrastructures.eu/driver/dnet45/modules/dnet-pace-core/trunk - + jar + edu.cmu secondstring - 1.0.0 com.google.guava guava - 15.0 com.google.code.gson gson - ${google.gson.version} commons-lang commons-lang - ${commons.lang.version} commons-io commons-io - ${commons.io.version} commons-collections commons-collections - ${commons.collections.version} com.googlecode.protobuf-java-format protobuf-java-format - 1.2 org.antlr stringtemplate - 3.2 commons-logging commons-logging - ${commons.logging.version} junit junit - ${junit.version} test + diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java new file mode 100644 index 000000000..a9979f5ed --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java @@ -0,0 +1,199 @@ +package eu.dnetlib.pace.util; + +import com.google.common.collect.Lists; +import eu.dnetlib.pace.clustering.NGramUtils; +import eu.dnetlib.pace.config.DedupConfig; +import eu.dnetlib.pace.config.WfConfig; +import eu.dnetlib.pace.distance.PaceDocumentDistance; +import eu.dnetlib.pace.distance.eval.ScoreResult; +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.MapDocument; +import eu.dnetlib.pace.model.MapDocumentComparator; +import org.apache.commons.lang.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.util.*; + +public class BlockProcessor { + + public static final List accumulators= new ArrayList<>(); + + private static final Log log = LogFactory.getLog(BlockProcessor.class); + + private DedupConfig dedupConf; + + + public static void constructAccumulator( final DedupConfig dedupConf) { + accumulators.add(String.format("%s::%s",dedupConf.getWf().getEntityType(), "records per hash key = 1")); + accumulators.add(String.format("%s::%s",dedupConf.getWf().getEntityType(), "missing " + dedupConf.getWf().getOrderField())); + accumulators.add(String.format("%s::%s",dedupConf.getWf().getEntityType(), String.format("Skipped records for count(%s) >= %s", dedupConf.getWf().getOrderField(), dedupConf.getWf().getGroupMaxSize()))); + accumulators.add(String.format("%s::%s",dedupConf.getWf().getEntityType(), "skip list")); + accumulators.add(String.format("%s::%s",dedupConf.getWf().getEntityType(), "dedupSimilarity (x2)")); + accumulators.add(String.format("%s::%s",dedupConf.getWf().getEntityType(), "d < " + dedupConf.getWf().getThreshold())); + } + + public BlockProcessor(DedupConfig dedupConf) { + this.dedupConf = dedupConf; + } + + public void process(final String key, final Iterable documents, final Reporter context) { + + final Queue q = prepare(documents); + + if (q.size() > 1) { + log.info("reducing key: '" + key + "' records: " + q.size()); + //process(q, context); + process(simplifyQueue(q, key, context), context); + } else { + context.incrementCounter(dedupConf.getWf().getEntityType(), "records per hash key = 1", 1); + } + } + + private Queue prepare(final Iterable documents) { + final Queue queue = new PriorityQueue<>(100, new MapDocumentComparator(dedupConf.getWf().getOrderField())); + + final Set seen = new HashSet(); + final int queueMaxSize = dedupConf.getWf().getQueueMaxSize(); + + documents.forEach(doc -> { + if (queue.size() <= queueMaxSize) { + final String id = doc.getIdentifier(); + + if (!seen.contains(id)) { + seen.add(id); + queue.add(doc); + } + } + }); + + return queue; + } + + private Queue simplifyQueue(final Queue queue, final String ngram, final Reporter context) { + final Queue q = new LinkedList<>(); + + String fieldRef = ""; + final List tempResults = Lists.newArrayList(); + + while (!queue.isEmpty()) { + final MapDocument result = queue.remove(); + + final String orderFieldName = dedupConf.getWf().getOrderField(); + final Field orderFieldValue = result.values(orderFieldName); + if (!orderFieldValue.isEmpty()) { + final String field = NGramUtils.cleanupForOrdering(orderFieldValue.stringValue()); + if (field.equals(fieldRef)) { + tempResults.add(result); + } else { + populateSimplifiedQueue(q, tempResults, context, fieldRef, ngram); + tempResults.clear(); + tempResults.add(result); + fieldRef = field; + } + } else { + context.incrementCounter(dedupConf.getWf().getEntityType(), "missing " + dedupConf.getWf().getOrderField(), 1); + } + } + populateSimplifiedQueue(q, tempResults, context, fieldRef, ngram); + + return q; + } + + private void populateSimplifiedQueue(final Queue q, + final List tempResults, + final Reporter context, + final String fieldRef, + final String ngram) { + WfConfig wf = dedupConf.getWf(); + if (tempResults.size() < wf.getGroupMaxSize()) { + q.addAll(tempResults); + } else { + context.incrementCounter(wf.getEntityType(), String.format("Skipped records for count(%s) >= %s", wf.getOrderField(), wf.getGroupMaxSize()), tempResults.size()); + log.info("Skipped field: " + fieldRef + " - size: " + tempResults.size() + " - ngram: " + ngram); + } + } + + private void process(final Queue queue, final Reporter context) { + + final PaceDocumentDistance algo = new PaceDocumentDistance(); + + while (!queue.isEmpty()) { + + final MapDocument pivot = queue.remove(); + final String idPivot = pivot.getIdentifier(); + + WfConfig wf = dedupConf.getWf(); + final Field fieldsPivot = pivot.values(wf.getOrderField()); + final String fieldPivot = (fieldsPivot == null) || fieldsPivot.isEmpty() ? null : fieldsPivot.stringValue(); + + if (fieldPivot != null) { + // System.out.println(idPivot + " --> " + fieldPivot); + + int i = 0; + for (final MapDocument curr : queue) { + final String idCurr = curr.getIdentifier(); + + if (mustSkip(idCurr)) { + + context.incrementCounter(wf.getEntityType(), "skip list", 1); + + break; + } + + if (i > wf.getSlidingWindowSize()) { + break; + } + + final Field fieldsCurr = curr.values(wf.getOrderField()); + final String fieldCurr = (fieldsCurr == null) || fieldsCurr.isEmpty() ? null : fieldsCurr.stringValue(); + + if (!idCurr.equals(idPivot) && (fieldCurr != null)) { + + final ScoreResult sr = similarity(algo, pivot, curr); + log.info(sr.toString()+"SCORE "+ sr.getScore()); + emitOutput(sr, idPivot, idCurr, context); + i++; + } + } + } + } + } + + private void emitOutput(final ScoreResult sr, final String idPivot, final String idCurr, final Reporter context) { + final double d = sr.getScore(); + + if (d >= dedupConf.getWf().getThreshold()) { + + writeSimilarity(context, idPivot, idCurr); + context.incrementCounter(dedupConf.getWf().getEntityType(), "dedupSimilarity (x2)", 1); + } else { + context.incrementCounter(dedupConf.getWf().getEntityType(), "d < " + dedupConf.getWf().getThreshold(), 1); + } + } + + private ScoreResult similarity(final PaceDocumentDistance algo, final MapDocument a, final MapDocument b) { + try { + return algo.between(a, b, dedupConf); + } catch(Throwable e) { + log.error(String.format("\nA: %s\n----------------------\nB: %s", a, b), e); + throw new IllegalArgumentException(e); + } + } + + private boolean mustSkip(final String idPivot) { + return dedupConf.getWf().getSkipList().contains(getNsPrefix(idPivot)); + } + + private String getNsPrefix(final String id) { + return StringUtils.substringBetween(id, "|", "::"); + } + + private void writeSimilarity(final Reporter context, final String from, final String to) { + final String type = dedupConf.getWf().getEntityType(); + + context.emit(type, from, to); + context.emit(type, to, from); + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/Reporter.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/Reporter.java new file mode 100644 index 000000000..10c886cb5 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/Reporter.java @@ -0,0 +1,11 @@ +package eu.dnetlib.pace.util; + + +import java.io.Serializable; + +public interface Reporter extends Serializable { + + void incrementCounter(String counterGroup, String counterName, long delta); + + void emit(String type, String from, String to); +} From 5aec80345ff7122276d64b3a63c5b5a1dff0365d Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Thu, 18 Oct 2018 11:58:36 +0200 Subject: [PATCH 006/449] [maven-release-plugin] prepare release dnet-dedup-3.0.0 --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index d35fd68f1..862a70316 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 3.0.0-SNAPSHOT + 3.0.0 ../pom.xml From 5a48937ae1bc6973a24ed1b1fad4641da5413655 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Thu, 18 Oct 2018 11:58:43 +0200 Subject: [PATCH 007/449] [maven-release-plugin] prepare for next development iteration --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 862a70316..fc4acf110 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 3.0.0 + 3.0.1-SNAPSHOT ../pom.xml From 4f291246070dcfd2a02800b9696c922a193b7bb9 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Thu, 18 Oct 2018 12:00:45 +0200 Subject: [PATCH 008/449] [maven-release-plugin] rollback the release of dnet-dedup-3.0.0 --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index fc4acf110..d35fd68f1 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 3.0.1-SNAPSHOT + 3.0.0-SNAPSHOT ../pom.xml From 82d5dce11407efce0656a18ca1eb57db4869b562 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Thu, 18 Oct 2018 12:12:45 +0200 Subject: [PATCH 009/449] [maven-release-plugin] prepare release dnet-dedup-3.0.0 --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index d35fd68f1..862a70316 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 3.0.0-SNAPSHOT + 3.0.0 ../pom.xml From ed14476b065213b9e1f75440839981787a33f11b Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Thu, 18 Oct 2018 12:13:03 +0200 Subject: [PATCH 010/449] [maven-release-plugin] rollback the release of dnet-dedup-3.0.0 --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 862a70316..d35fd68f1 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 3.0.0 + 3.0.0-SNAPSHOT ../pom.xml From 63815be2d6b196355816563f05e65a3bb4d36b35 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Thu, 18 Oct 2018 12:17:27 +0200 Subject: [PATCH 011/449] [maven-release-plugin] prepare release dnet-dedup-3.0.0 --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index d35fd68f1..862a70316 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 3.0.0-SNAPSHOT + 3.0.0 ../pom.xml From 3197f266919cfa650ecc5c51b670ae8a6d45aa25 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Thu, 18 Oct 2018 12:17:34 +0200 Subject: [PATCH 012/449] [maven-release-plugin] prepare for next development iteration --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 862a70316..fc4acf110 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 3.0.0 + 3.0.1-SNAPSHOT ../pom.xml From 4d379c2227d8a1646ac461fd14bbfa6094f3d7b4 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Sat, 20 Oct 2018 08:38:19 +0200 Subject: [PATCH 013/449] revised PidMatch implementation, cleanup --- .../eu/dnetlib/pace/condition/PidMatch.java | 25 ++++++++----- .../pace/distance/algo/LevensteinDate.java | 25 ------------- .../pace/distance/algo/YearLevenstein.java | 37 ------------------- .../java/eu/dnetlib/pace/model/FieldDef.java | 2 - 4 files changed, 15 insertions(+), 74 deletions(-) delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinDate.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/YearLevenstein.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/PidMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/PidMatch.java index 4f9e0423d..a20ab9528 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/PidMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/PidMatch.java @@ -1,7 +1,11 @@ package eu.dnetlib.pace.condition; +import java.util.HashSet; import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; +import com.google.common.collect.Sets; import eu.dnetlib.pace.config.Cond; import eu.dnetlib.pace.distance.eval.ConditionEval; import eu.dnetlib.pace.model.Field; @@ -33,20 +37,21 @@ public class PidMatch extends AbstractCondition { final List pal = Pid.fromOafJson(sa); final List pbl = Pid.fromOafJson(sb); - int result = 0; - for(Pid pa : pal) { - final String ta = pa.getType(); + final Set pidAset = toHashSet(pal); + final Set pidBset = toHashSet(pbl); - for(Pid pb : pbl) { - final String tb = pb.getType(); + int incommon = Sets.intersection(pidAset, pidBset).size(); + int simDiff = Sets.symmetricDifference(pidAset, pidBset).size(); - if (tb.equalsIgnoreCase(ta)) { - result += pa.getValue().equalsIgnoreCase(pb.getValue()) ? 1 : -1; - } - } - } + int result = incommon / (incommon + simDiff) > 0.5 ? 1 : -1; return new ConditionEval(cond, a, b, result); } + private Set toHashSet(List pbl) { + return pbl.stream() + .map(pid -> pid.getType() + pid.getValue()) + .collect(Collectors.toCollection(HashSet::new)); + } + } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinDate.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinDate.java deleted file mode 100644 index 545295567..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinDate.java +++ /dev/null @@ -1,25 +0,0 @@ -package eu.dnetlib.pace.distance.algo; - - -public class LevensteinDate extends Levenstein { - - - public LevensteinDate(double w) { - super(w); - } - - - @Override - public double distance(String a, String b) { - - return 1.0; - } - - - - @Override - public double getWeight() { - return super.weight; - } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/YearLevenstein.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/YearLevenstein.java deleted file mode 100644 index 4e9796c2d..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/YearLevenstein.java +++ /dev/null @@ -1,37 +0,0 @@ -package eu.dnetlib.pace.distance.algo; - - -public class YearLevenstein extends SubStringLevenstein { - - public YearLevenstein(double w) { - super(w); - } - - public YearLevenstein(double w, int limit) { - super(w, limit); - } - - @Override - public double distance(String a, String b) { - boolean check = checkLength(a) && checkLength(b); - if (check) { - if (a.equals(b)) { - return 1.0; - } else { - return 0.5; - } - } else { - return 1.0; - } - } - - protected boolean checkLength(String s) { - return getNumbers(s).length() == limit; - } - - @Override - public double getWeight() { - return super.weight; - } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java index 8507b0cd7..5445053bd 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java @@ -83,8 +83,6 @@ public class FieldDef implements Serializable { return new LevensteinTitle(getWeight()); case SubStringLevenstein: return new SubStringLevenstein(getWeight(), getLimit()); - case YearLevenstein: - return new YearLevenstein(getWeight(), getLimit()); case SortedJaroWinkler: return new SortedJaroWinkler(getWeight()); case SortedLevel2JaroWinkler: From 1cbbc3f15ae81a87396f2e6807eb0274c0c82cf0 Mon Sep 17 00:00:00 2001 From: Michele De Bonis Date: Wed, 24 Oct 2018 12:09:41 +0200 Subject: [PATCH 014/449] update in the discovery of clustering, conditions and distance functions (annotated with custom annotations) --- dnet-pace-core/pom.xml | 6 ++ .../AbstractClusteringFunction.java | 8 ++- .../eu/dnetlib/pace/clustering/Acronyms.java | 5 ++ .../BlacklistAwareClusteringCombiner.java | 3 - .../dnetlib/pace/clustering/Clustering.java | 5 -- .../pace/clustering/ClusteringClass.java | 13 ++++ .../pace/clustering/ClusteringFunction.java | 1 + .../pace/clustering/ClusteringResolver.java | 24 ++++++++ .../pace/clustering/ImmutableFieldValue.java | 5 ++ .../pace/clustering/LowercaseClustering.java | 5 ++ .../dnetlib/pace/clustering/NgramPairs.java | 5 ++ .../eu/dnetlib/pace/clustering/Ngrams.java | 7 ++- .../pace/clustering/PersonClustering.java | 6 ++ .../dnetlib/pace/clustering/PersonHash.java | 5 ++ .../clustering/RandomClusteringFunction.java | 4 ++ .../pace/clustering/SortedNgramPairs.java | 5 ++ .../clustering/SpaceTrimmingFieldValue.java | 5 ++ .../dnetlib/pace/clustering/SuffixPrefix.java | 5 ++ .../pace/clustering/UrlClustering.java | 9 +++ .../pace/condition/AbstractCondition.java | 15 ++++- .../pace/condition/AlwaysTrueCondition.java | 7 ++- .../dnetlib/pace/condition/ConditionAlgo.java | 7 ++- .../pace/condition/ConditionClass.java | 13 ++++ .../pace/condition/ConditionResolver.java | 22 +++++++ .../dnetlib/pace/condition/DoiExactMatch.java | 4 +- .../eu/dnetlib/pace/condition/ExactMatch.java | 8 ++- .../pace/condition/ExactMatchIgnoreCase.java | 4 +- .../pace/condition/MustBeDifferent.java | 4 +- .../eu/dnetlib/pace/condition/PidMatch.java | 4 +- .../eu/dnetlib/pace/condition/SizeMatch.java | 4 +- .../pace/condition/TitleVersionMatch.java | 4 +- .../eu/dnetlib/pace/condition/YearMatch.java | 7 ++- .../java/eu/dnetlib/pace/config/Algo.java | 46 -------------- .../java/eu/dnetlib/pace/config/Cond.java | 28 --------- .../dnetlib/pace/distance/DistanceAlgo.java | 6 ++ .../dnetlib/pace/distance/DistanceClass.java | 13 ++++ .../pace/distance/DistanceResolver.java | 24 ++++++++ .../dnetlib/pace/distance/DistanceScorer.java | 2 +- .../distance/SecondStringDistanceAlgo.java | 27 +++++++++ .../pace/distance/algo/AlwaysMatch.java | 12 ++++ .../pace/distance/algo/ExactMatch.java | 12 ++++ .../pace/distance/algo/JaroWinkler.java | 12 ++++ .../pace/distance/algo/JaroWinklerTitle.java | 12 ++++ .../pace/distance/algo/Level2JaroWinkler.java | 2 + .../distance/algo/Level2JaroWinklerTitle.java | 2 + .../pace/distance/algo/Level2Levenstein.java | 2 + .../pace/distance/algo/Levenstein.java | 6 ++ .../pace/distance/algo/LevensteinTitle.java | 6 ++ .../pace/distance/algo/MustBeDifferent.java | 2 + .../pace/distance/algo/NullDistanceAlgo.java | 16 +++++ .../pace/distance/algo/SortedJaroWinkler.java | 2 + .../algo/SortedLevel2JaroWinkler.java | 2 + .../distance/algo/SubStringLevenstein.java | 13 ++++ .../pace/distance/algo/UrlMatcher.java | 10 ++++ .../pace/distance/eval/ConditionEval.java | 9 ++- .../pace/distance/eval/DistanceEval.java | 1 - .../pace/distance/eval/ScoreResult.java | 14 +++-- .../eu/dnetlib/pace/model/ClusteringDef.java | 42 +++++-------- .../java/eu/dnetlib/pace/model/CondDef.java | 36 +++++------ .../java/eu/dnetlib/pace/model/FieldDef.java | 56 +++++++----------- .../eu/dnetlib/pace/util/BlockProcessor.java | 1 - .../main/resources/eu/dnetlib/pace/.DS_Store | Bin 0 -> 6148 bytes 62 files changed, 441 insertions(+), 204 deletions(-) delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/Clustering.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringClass.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringResolver.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ConditionClass.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ConditionResolver.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Algo.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Cond.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceClass.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceResolver.java create mode 100644 dnet-pace-core/src/main/resources/eu/dnetlib/pace/.DS_Store diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index fc4acf110..1a41a7416 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -55,6 +55,12 @@ junit test + + org.reflections + reflections + 0.9.10 + + diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/AbstractClusteringFunction.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/AbstractClusteringFunction.java index 6f29f22ce..2885994d9 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/AbstractClusteringFunction.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/AbstractClusteringFunction.java @@ -18,7 +18,13 @@ public abstract class AbstractClusteringFunction extends AbstractPaceFunctions i public AbstractClusteringFunction(final Map params) { this.params = params; } - + + public AbstractClusteringFunction(){} + + public void setParams(Map params){ + this.params = params; + } + protected abstract Collection doApply(String s); @Override diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/Acronyms.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/Acronyms.java index 1897e6a87..09d2ce0e6 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/Acronyms.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/Acronyms.java @@ -7,12 +7,17 @@ import java.util.StringTokenizer; import com.google.common.collect.Sets; +@ClusteringClass("acronyms") public class Acronyms extends AbstractClusteringFunction { public Acronyms(Map params) { super(params); } + public Acronyms(){ + super(); + } + @Override protected Collection doApply(String s) { return extractAcronyms(s, param("max"), param("minLen"), param("maxLen")); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/BlacklistAwareClusteringCombiner.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/BlacklistAwareClusteringCombiner.java index 4ecedc4c0..0167d2fd0 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/BlacklistAwareClusteringCombiner.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/BlacklistAwareClusteringCombiner.java @@ -22,9 +22,6 @@ public class BlacklistAwareClusteringCombiner extends ClusteringCombiner { private static final Log log = LogFactory.getLog(BlacklistAwareClusteringCombiner.class); - - - public static Collection filterAndCombine(final MapDocument a, final Config conf) { final Document filtered = new BlacklistAwareClusteringCombiner().filter(a, conf.blacklists()); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/Clustering.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/Clustering.java deleted file mode 100644 index 72575409f..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/Clustering.java +++ /dev/null @@ -1,5 +0,0 @@ -package eu.dnetlib.pace.clustering; - -public enum Clustering { - acronyms, ngrams, ngrampairs, sortedngrampairs, suffixprefix, spacetrimmingfieldvalue, immutablefieldvalue, personhash, personclustering, lowercase, urlclustering -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringClass.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringClass.java new file mode 100644 index 000000000..e67767171 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringClass.java @@ -0,0 +1,13 @@ +package eu.dnetlib.pace.clustering; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +public @interface ClusteringClass { + + public String value(); +} \ No newline at end of file diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringFunction.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringFunction.java index 4fe1b596e..040b92824 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringFunction.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringFunction.java @@ -12,4 +12,5 @@ public interface ClusteringFunction { public Map getParams(); + public void setParams(Map params); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringResolver.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringResolver.java new file mode 100644 index 000000000..06a364c22 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringResolver.java @@ -0,0 +1,24 @@ +package eu.dnetlib.pace.clustering; + +import java.io.Serializable; +import java.lang.reflect.InvocationTargetException; +import java.util.Map; +import java.util.stream.Collectors; + +import org.reflections.Reflections; + +public class ClusteringResolver implements Serializable { + private final Map> functionMap; + + public ClusteringResolver() { + + this.functionMap = new Reflections("eu.dnetlib").getTypesAnnotatedWith(ClusteringClass.class).stream() + .filter(ClusteringFunction.class::isAssignableFrom) + .collect(Collectors.toMap(cl -> cl.getAnnotation(ClusteringClass.class).value(), cl -> (Class)cl)); + } + + public ClusteringFunction resolve(String clusteringFunction) throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException { + + return functionMap.get(clusteringFunction).newInstance(); + } +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ImmutableFieldValue.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ImmutableFieldValue.java index 988476ddd..2d5b67ab5 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ImmutableFieldValue.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ImmutableFieldValue.java @@ -6,12 +6,17 @@ import java.util.Map; import com.google.common.collect.Lists; +@ClusteringClass("immutablefieldvalue") public class ImmutableFieldValue extends AbstractClusteringFunction { public ImmutableFieldValue(final Map params) { super(params); } + public ImmutableFieldValue() { + super(); + } + @Override protected Collection doApply(final String s) { final List res = Lists.newArrayList(); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/LowercaseClustering.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/LowercaseClustering.java index 6d00992bd..50d73cff9 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/LowercaseClustering.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/LowercaseClustering.java @@ -9,12 +9,17 @@ import com.google.common.collect.Sets; import eu.dnetlib.pace.model.Field; import org.apache.commons.lang.StringUtils; +@ClusteringClass("lowercase") public class LowercaseClustering extends AbstractClusteringFunction { public LowercaseClustering(final Map params) { super(params); } + public LowercaseClustering(){ + super(); + } + @Override public Collection apply(List fields) { Collection c = Sets.newLinkedHashSet(); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/NgramPairs.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/NgramPairs.java index 3cffa4d54..6c96ca214 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/NgramPairs.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/NgramPairs.java @@ -6,8 +6,13 @@ import java.util.Map; import com.google.common.collect.Lists; +@ClusteringClass("ngrampairs") public class NgramPairs extends Ngrams { + public NgramPairs() { + super(); + } + public NgramPairs(Map params) { super(params); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/Ngrams.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/Ngrams.java index aaba9afbf..49ce40495 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/Ngrams.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/Ngrams.java @@ -5,12 +5,17 @@ import java.util.LinkedHashSet; import java.util.Map; import java.util.StringTokenizer; +@ClusteringClass("ngrams") public class Ngrams extends AbstractClusteringFunction { public Ngrams(Map params) { super(params); } - + + public Ngrams() { + super(); + } + @Override protected Collection doApply(String s) { return getNgrams(s, param("ngramLen"), param("max"), param("maxPerToken"), param("minNgramLen")); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonClustering.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonClustering.java index d71707721..42300797e 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonClustering.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonClustering.java @@ -1,5 +1,6 @@ package eu.dnetlib.pace.clustering; +import java.io.Serializable; import java.util.Collection; import java.util.List; import java.util.Map; @@ -18,6 +19,7 @@ import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.model.gt.Author; import eu.dnetlib.pace.model.gt.GTAuthor; +@ClusteringClass("personclustering") public class PersonClustering extends AbstractPaceFunctions implements ClusteringFunction { private Map params; @@ -28,6 +30,10 @@ public class PersonClustering extends AbstractPaceFunctions implements Clusterin this.params = params; } + public void setParams(Map params){ + this.params = params; + } + @Override public Collection apply(final List fields) { final Set hashes = Sets.newHashSet(); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonHash.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonHash.java index 42d9d5bab..b0e57e905 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonHash.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonHash.java @@ -8,6 +8,7 @@ import com.google.common.collect.Lists; import eu.dnetlib.pace.model.Person; +@ClusteringClass("personhash") public class PersonHash extends AbstractClusteringFunction { private boolean DEFAULT_AGGRESSIVE = false; @@ -16,6 +17,10 @@ public class PersonHash extends AbstractClusteringFunction { super(params); } + public PersonHash(){ + super(); + } + @Override protected Collection doApply(final String s) { final List res = Lists.newArrayList(); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/RandomClusteringFunction.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/RandomClusteringFunction.java index f012aacab..893abe8e0 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/RandomClusteringFunction.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/RandomClusteringFunction.java @@ -9,6 +9,10 @@ public class RandomClusteringFunction extends AbstractClusteringFunction { super(params); } + public RandomClusteringFunction(){ + super(); + } + @Override protected Collection doApply(String s) { // TODO Auto-generated method stub diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SortedNgramPairs.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SortedNgramPairs.java index 56e660438..9ce12fc30 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SortedNgramPairs.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SortedNgramPairs.java @@ -9,12 +9,17 @@ import com.google.common.base.Joiner; import com.google.common.base.Splitter; import com.google.common.collect.Lists; +@ClusteringClass("sortedngrampairs") public class SortedNgramPairs extends NgramPairs { public SortedNgramPairs(Map params) { super(params); } + public SortedNgramPairs(){ + super(); + } + @Override protected Collection doApply(String s) { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SpaceTrimmingFieldValue.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SpaceTrimmingFieldValue.java index 19a51d4ca..8e1fdf3e7 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SpaceTrimmingFieldValue.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SpaceTrimmingFieldValue.java @@ -9,12 +9,17 @@ import org.apache.commons.lang.StringUtils; import com.google.common.collect.Lists; +@ClusteringClass("spacetrimmingfieldvalue") public class SpaceTrimmingFieldValue extends AbstractClusteringFunction { public SpaceTrimmingFieldValue(final Map params) { super(params); } + public SpaceTrimmingFieldValue(){ + super(); + } + @Override protected Collection doApply(final String s) { final List res = Lists.newArrayList(); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SuffixPrefix.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SuffixPrefix.java index 3ed336af4..25520d97c 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SuffixPrefix.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SuffixPrefix.java @@ -6,12 +6,17 @@ import java.util.Set; import com.google.common.collect.Sets; +@ClusteringClass("suffixprefix") public class SuffixPrefix extends AbstractClusteringFunction { public SuffixPrefix(Map params) { super(params); } + public SuffixPrefix(){ + super(); + } + @Override protected Collection doApply(String s) { return suffixPrefix(s, param("len"), param("max")); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/UrlClustering.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/UrlClustering.java index 196281444..4c0c33fd1 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/UrlClustering.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/UrlClustering.java @@ -11,6 +11,7 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; +@ClusteringClass("urlclustering") public class UrlClustering extends AbstractPaceFunctions implements ClusteringFunction { protected Map params; @@ -19,6 +20,14 @@ public class UrlClustering extends AbstractPaceFunctions implements ClusteringFu this.params = params; } + public UrlClustering() { + super(); + } + + public void setParams(Map params){ + this.params = params; + } + @Override public Collection apply(List fields) { return fields.stream() diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/AbstractCondition.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/AbstractCondition.java index bbfac97b9..adc68254e 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/AbstractCondition.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/AbstractCondition.java @@ -2,7 +2,6 @@ package eu.dnetlib.pace.condition; import java.util.List; import eu.dnetlib.pace.common.AbstractPaceFunctions; -import eu.dnetlib.pace.config.Cond; import eu.dnetlib.pace.distance.eval.ConditionEval; import eu.dnetlib.pace.distance.eval.ConditionEvalMap; import eu.dnetlib.pace.model.Document; @@ -17,15 +16,25 @@ import eu.dnetlib.pace.model.FieldDef; */ public abstract class AbstractCondition extends AbstractPaceFunctions implements ConditionAlgo { - protected Cond cond; + protected String cond; protected List fields; - public AbstractCondition(final Cond cond, final List fields) { + public AbstractCondition(final String cond, final List fields) { this.cond = cond; this.fields = fields; } + public AbstractCondition(){} + + public void setCond(String cond){ + this.cond = cond; + } + + public void setFields(List fields){ + this.fields = fields; + } + protected abstract ConditionEval verify(FieldDef fd, Field a, Field b); @Override diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/AlwaysTrueCondition.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/AlwaysTrueCondition.java index f9ff2b60b..a67567eeb 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/AlwaysTrueCondition.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/AlwaysTrueCondition.java @@ -1,7 +1,6 @@ package eu.dnetlib.pace.condition; import java.util.List; -import eu.dnetlib.pace.config.Cond; import eu.dnetlib.pace.distance.eval.ConditionEval; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.model.FieldDef; @@ -11,12 +10,16 @@ import eu.dnetlib.pace.model.FieldDef; * * @author claudio */ +@ConditionClass("alwaystruecondition") public class AlwaysTrueCondition extends AbstractCondition { - public AlwaysTrueCondition(final Cond cond, final List fields) { + public AlwaysTrueCondition(final String cond, final List fields) { super(cond, fields); } + public AlwaysTrueCondition(){ + super(); + } @Override protected ConditionEval verify(final FieldDef fd, final Field a, final Field b) { return new ConditionEval(cond, a, b, 1); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ConditionAlgo.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ConditionAlgo.java index ceb7c73cc..1293c7d95 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ConditionAlgo.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ConditionAlgo.java @@ -1,9 +1,9 @@ package eu.dnetlib.pace.condition; -import java.util.Map; - +import java.util.List; import eu.dnetlib.pace.distance.eval.ConditionEvalMap; import eu.dnetlib.pace.model.Document; +import eu.dnetlib.pace.model.FieldDef; /** * Allows to express general conditions to be satisfied or not between two Documents. @@ -24,4 +24,7 @@ public interface ConditionAlgo { */ public abstract ConditionEvalMap verify(Document a, Document b); + public void setFields(List fields); + public void setCond(String name); + } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ConditionClass.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ConditionClass.java new file mode 100644 index 000000000..155360c58 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ConditionClass.java @@ -0,0 +1,13 @@ +package eu.dnetlib.pace.condition; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +public @interface ConditionClass { + + public String value(); +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ConditionResolver.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ConditionResolver.java new file mode 100644 index 000000000..58a30ddda --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ConditionResolver.java @@ -0,0 +1,22 @@ +package eu.dnetlib.pace.condition; + +import java.io.Serializable; +import java.util.Map; +import java.util.stream.Collectors; + +import org.reflections.Reflections; + +public class ConditionResolver implements Serializable { + private final Map> functionMap; + + public ConditionResolver() { + + this.functionMap = new Reflections("eu.dnetlib").getTypesAnnotatedWith(ConditionClass.class).stream() + .filter(ConditionAlgo.class::isAssignableFrom) + .collect(Collectors.toMap(cl -> cl.getAnnotation(ConditionClass.class).value(), cl -> (Class)cl)); + } + + public ConditionAlgo resolve(String name) throws IllegalAccessException, InstantiationException { + return functionMap.get(name).newInstance(); + } +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/DoiExactMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/DoiExactMatch.java index 25b1a01cd..dfdc5cd23 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/DoiExactMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/DoiExactMatch.java @@ -2,7 +2,6 @@ package eu.dnetlib.pace.condition; import java.util.List; -import eu.dnetlib.pace.config.Cond; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.model.FieldDef; @@ -11,11 +10,12 @@ import eu.dnetlib.pace.model.FieldDef; * * @author claudio */ +@ConditionClass("doiExactMatch") public class DoiExactMatch extends ExactMatchIgnoreCase { public final String PREFIX = "(http:\\/\\/dx\\.doi\\.org\\/)|(doi:)"; - public DoiExactMatch(final Cond cond, final List fields) { + public DoiExactMatch(final String cond, final List fields) { super(cond, fields); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ExactMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ExactMatch.java index 4f0f37188..f4ba8de42 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ExactMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ExactMatch.java @@ -2,7 +2,6 @@ package eu.dnetlib.pace.condition; import java.util.List; -import eu.dnetlib.pace.config.Cond; import eu.dnetlib.pace.distance.eval.ConditionEval; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.model.FieldDef; @@ -13,12 +12,17 @@ import org.apache.commons.lang.StringUtils; * * @author claudio */ +@ConditionClass("exactMatch") public class ExactMatch extends AbstractCondition { - public ExactMatch(final Cond cond, final List fields) { + public ExactMatch(final String cond, final List fields) { super(cond, fields); } + public ExactMatch(){ + super(); + } + @Override protected ConditionEval verify(final FieldDef fd, final Field a, final Field b) { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ExactMatchIgnoreCase.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ExactMatchIgnoreCase.java index 8baad5b24..7741f3858 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ExactMatchIgnoreCase.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ExactMatchIgnoreCase.java @@ -2,7 +2,6 @@ package eu.dnetlib.pace.condition; import java.util.List; -import eu.dnetlib.pace.config.Cond; import eu.dnetlib.pace.distance.eval.ConditionEval; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.model.FieldDef; @@ -12,9 +11,10 @@ import eu.dnetlib.pace.model.FieldDef; * * @author claudio */ +@ConditionClass("exactMatchIgnoreCase") public class ExactMatchIgnoreCase extends AbstractCondition { - public ExactMatchIgnoreCase(final Cond cond, final List fields) { + public ExactMatchIgnoreCase(final String cond, final List fields) { super(cond, fields); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/MustBeDifferent.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/MustBeDifferent.java index bc99a4cc5..f2b3bdba4 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/MustBeDifferent.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/MustBeDifferent.java @@ -3,7 +3,6 @@ package eu.dnetlib.pace.condition; import java.util.List; import com.google.common.collect.Iterables; -import eu.dnetlib.pace.config.Cond; import eu.dnetlib.pace.distance.eval.ConditionEval; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.model.FieldDef; @@ -13,6 +12,7 @@ import eu.dnetlib.pace.model.FieldDef; * * @author claudio */ +@ConditionClass("mustBeDifferent") public class MustBeDifferent extends AbstractCondition { /** @@ -20,7 +20,7 @@ public class MustBeDifferent extends AbstractCondition { * * @param fields the fields */ - public MustBeDifferent(final Cond cond, final List fields) { + public MustBeDifferent(final String cond, final List fields) { super(cond, fields); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/PidMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/PidMatch.java index a20ab9528..53aa2deb9 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/PidMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/PidMatch.java @@ -6,7 +6,6 @@ import java.util.Set; import java.util.stream.Collectors; import com.google.common.collect.Sets; -import eu.dnetlib.pace.config.Cond; import eu.dnetlib.pace.distance.eval.ConditionEval; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.model.FieldDef; @@ -20,11 +19,12 @@ import org.apache.commons.logging.LogFactory; * * @author claudio */ +@ConditionClass("pidMatch") public class PidMatch extends AbstractCondition { private static final Log log = LogFactory.getLog(PidMatch.class); - public PidMatch(final Cond cond, final List fields) { + public PidMatch(final String cond, final List fields) { super(cond, fields); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/SizeMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/SizeMatch.java index ae6e94037..afd0a8eaa 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/SizeMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/SizeMatch.java @@ -4,7 +4,6 @@ import java.util.List; import com.google.common.collect.Iterables; -import eu.dnetlib.pace.config.Cond; import eu.dnetlib.pace.distance.eval.ConditionEval; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.model.FieldDef; @@ -14,6 +13,7 @@ import eu.dnetlib.pace.model.FieldDef; * * @author claudio */ +@ConditionClass("sizeMatch") public class SizeMatch extends AbstractCondition { /** @@ -22,7 +22,7 @@ public class SizeMatch extends AbstractCondition { * @param fields * the fields */ - public SizeMatch(final Cond cond, final List fields) { + public SizeMatch(final String cond, final List fields) { super(cond, fields); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/TitleVersionMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/TitleVersionMatch.java index 41a617aa5..4b94a0459 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/TitleVersionMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/TitleVersionMatch.java @@ -2,7 +2,6 @@ package eu.dnetlib.pace.condition; import java.util.List; -import eu.dnetlib.pace.config.Cond; import eu.dnetlib.pace.distance.eval.ConditionEval; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.model.FieldDef; @@ -13,9 +12,10 @@ import eu.dnetlib.pace.model.FieldDef; * @author claudio * */ +@ConditionClass("titleVersionMatch") public class TitleVersionMatch extends AbstractCondition { - public TitleVersionMatch(final Cond cond, final List fields) { + public TitleVersionMatch(final String cond, final List fields) { super(cond, fields); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/YearMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/YearMatch.java index 89718426c..54d0ba89f 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/YearMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/YearMatch.java @@ -1,8 +1,8 @@ package eu.dnetlib.pace.condition; +import java.time.Year; import java.util.List; -import eu.dnetlib.pace.config.Cond; import eu.dnetlib.pace.distance.eval.ConditionEval; import org.apache.commons.lang.StringUtils; @@ -14,14 +14,17 @@ import eu.dnetlib.pace.model.FieldDef; * * @author claudio */ +@ConditionClass("yearMatch") public class YearMatch extends AbstractCondition { private int limit = 4; - public YearMatch(final Cond cond, final List fields) { + public YearMatch(final String cond, final List fields) { super(cond, fields); } + public YearMatch(){} + // @Override // public boolean verify(final Document a, final Document b) { // boolean res = true; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Algo.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Algo.java deleted file mode 100644 index cb2e434b6..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Algo.java +++ /dev/null @@ -1,46 +0,0 @@ -package eu.dnetlib.pace.config; - -/** - * Enumerates the distance Algos. - */ -public enum Algo { - - /** The Jaro winkler. */ - JaroWinkler, - /** The Jaro winkler title. */ - JaroWinklerTitle, - /** The Levenstein. */ - Levenstein, - /** The Levenstein distance for title matching */ - LevensteinTitle, - /** The Level2 jaro winkler. */ - Level2JaroWinkler, - /** The Level2 jaro winkler for title matching */ - Level2JaroWinklerTitle, - /** The Level2 levenstein. */ - Level2Levenstein, - /** The Sub string levenstein. */ - SubStringLevenstein, - /** The Year levenstein. */ - YearLevenstein, - /** The Sorted jaro winkler. */ - SortedJaroWinkler, - /** The Sorted level2 jaro winkler. */ - SortedLevel2JaroWinkler, - /** Compares two urls */ - urlMatcher, - /** Exact match algo. */ - ExactMatch, - /** - * Returns 0 for equal strings, 1 for different strings. - */ - MustBeDifferent, - /** Always return 1.0 as distance. */ - AlwaysMatch, - /** Person distance */ - PersonCoAuthorSurnamesDistance, - PersonCoAnchorsDistance, - PersonDistance, - /** The Null. */ - Null -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Cond.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Cond.java deleted file mode 100644 index b287fdd76..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Cond.java +++ /dev/null @@ -1,28 +0,0 @@ -package eu.dnetlib.pace.config; - -/** - * The Enum Cond. - */ -public enum Cond { - - /** The year match. */ - yearMatch, - /** The title version match. */ - titleVersionMatch, - /** The size match. */ - sizeMatch, - /** - * Returns true if the field values are different - */ - mustBeDifferent, - /** The Exact match. */ - exactMatch, - /** - * The Exact match ignore case. - */ - exactMatchIgnoreCase, - /** The Exact match specialized to recognize DOI values. */ - doiExactMatch, - /** The Exact match that checks if pid type and value are the same */ - pidMatch -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceAlgo.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceAlgo.java index e9d009548..c2749c503 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceAlgo.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceAlgo.java @@ -2,6 +2,8 @@ package eu.dnetlib.pace.distance; import eu.dnetlib.pace.model.Field; +import java.util.Map; + /** * Each field is configured with a distance algo which knows how to compute the distance (0-1) between the fields of two * objects. @@ -11,5 +13,9 @@ public interface DistanceAlgo { public abstract double distance(Field a, Field b); public double getWeight(); + public Map getParams(); + + public void setWeight(double w); + public void setParams(Map params); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceClass.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceClass.java new file mode 100644 index 000000000..9479fdb04 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceClass.java @@ -0,0 +1,13 @@ +package eu.dnetlib.pace.distance; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +public @interface DistanceClass { + + public String value(); +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceResolver.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceResolver.java new file mode 100644 index 000000000..09377605e --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceResolver.java @@ -0,0 +1,24 @@ +package eu.dnetlib.pace.distance; + +import java.io.Serializable; +import java.lang.reflect.InvocationTargetException; +import java.util.Map; +import java.util.stream.Collectors; + +import org.reflections.Reflections; + +public class DistanceResolver implements Serializable { + private final Map> functionMap; + + public DistanceResolver() { + + this.functionMap = new Reflections("eu.dnetlib").getTypesAnnotatedWith(DistanceClass.class).stream() + .filter(DistanceAlgo.class::isAssignableFrom) + .collect(Collectors.toMap(cl -> cl.getAnnotation(DistanceClass.class).value(), cl -> (Class)cl)); + } + + public DistanceAlgo resolve(String algo) throws IllegalAccessException, InstantiationException { + + return functionMap.get(algo).newInstance(); + } +} \ No newline at end of file diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceScorer.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceScorer.java index 0cbb6f4f6..467a19c86 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceScorer.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceScorer.java @@ -25,7 +25,7 @@ public class DistanceScorer { } public ScoreResult distance(final Document a, final Document b) { - final ScoreResult sr = new ScoreResult(); + final ScoreResult sr = new ScoreResult(); //to keep track of the result of the comparison sr.setStrictConditions(verify(a, b, config.strictConditions())); sr.setConditions(verify(a, b, config.conditions())); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/SecondStringDistanceAlgo.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/SecondStringDistanceAlgo.java index 83296048d..785c00bc3 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/SecondStringDistanceAlgo.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/SecondStringDistanceAlgo.java @@ -1,6 +1,8 @@ package eu.dnetlib.pace.distance; +import java.io.Serializable; import java.util.List; +import java.util.Map; import com.wcohen.ss.AbstractStringDistance; @@ -24,6 +26,27 @@ public abstract class SecondStringDistanceAlgo extends AbstractPaceFunctions imp /** The weight. */ protected double weight = 0.0; + private Map params; + + protected SecondStringDistanceAlgo(){ + } + + protected SecondStringDistanceAlgo(Map params){ + this.params = params; + } + + public void setWeight(double w){ + this.weight = w; + } + + public Map getParams(){ + return this.params; + } + + public void setParams(Map params){ + this.params = params; + } + /** * Instantiates a new second string distance algo. * @@ -37,6 +60,10 @@ public abstract class SecondStringDistanceAlgo extends AbstractPaceFunctions imp this.weight = weight; } + protected SecondStringDistanceAlgo(final AbstractStringDistance ssalgo){ + this.ssalgo = ssalgo; + } + /** * Normalize. * diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/AlwaysMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/AlwaysMatch.java index 904498202..7039f05a6 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/AlwaysMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/AlwaysMatch.java @@ -1,10 +1,22 @@ package eu.dnetlib.pace.distance.algo; import com.wcohen.ss.AbstractStringDistance; +import eu.dnetlib.pace.distance.DistanceClass; import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; +import java.util.Map; + +@DistanceClass("AlwaysMatch") public class AlwaysMatch extends SecondStringDistanceAlgo { + public AlwaysMatch(){ + super(); + } + + public AlwaysMatch(final Map params){ + super(params); + } + public AlwaysMatch(final double weight) { super(weight, new com.wcohen.ss.JaroWinkler()); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/ExactMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/ExactMatch.java index ef95c024a..2e714c4af 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/ExactMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/ExactMatch.java @@ -1,10 +1,22 @@ package eu.dnetlib.pace.distance.algo; import com.wcohen.ss.AbstractStringDistance; +import eu.dnetlib.pace.distance.DistanceClass; import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; +import java.util.Map; + +@DistanceClass("ExactMatch") public class ExactMatch extends SecondStringDistanceAlgo { + public ExactMatch(){ + super(); + } + + public ExactMatch(Map params){ + super(params); + } + public ExactMatch(final double weight) { super(weight, new com.wcohen.ss.JaroWinkler()); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinkler.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinkler.java index 87f6c4e6a..ea1e0798e 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinkler.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinkler.java @@ -1,11 +1,23 @@ package eu.dnetlib.pace.distance.algo; import com.wcohen.ss.AbstractStringDistance; +import eu.dnetlib.pace.distance.DistanceClass; import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; +import java.util.Map; + //case class JaroWinkler(w: Double) extends SecondStringDistanceAlgo(w, new com.wcohen.ss.JaroWinkler()) +@DistanceClass("JaroWinkler") public class JaroWinkler extends SecondStringDistanceAlgo { + public JaroWinkler(){ + super(); + } + + public JaroWinkler(Map params){ + super(params); + } + public JaroWinkler(double weight) { super(weight, new com.wcohen.ss.JaroWinkler()); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerTitle.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerTitle.java index 1419a072b..b37c88d63 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerTitle.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerTitle.java @@ -1,11 +1,23 @@ package eu.dnetlib.pace.distance.algo; import com.wcohen.ss.AbstractStringDistance; +import eu.dnetlib.pace.distance.DistanceClass; import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; +import java.util.Map; + //case class JaroWinkler(w: Double) extends SecondStringDistanceAlgo(w, new com.wcohen.ss.JaroWinkler()) +@DistanceClass("JaroWinklerTitle") public class JaroWinklerTitle extends SecondStringDistanceAlgo { + public JaroWinklerTitle(){ + super(); + } + + public JaroWinklerTitle(Map params){ + super(params); + } + public JaroWinklerTitle(double weight) { super(weight, new com.wcohen.ss.JaroWinkler()); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Level2JaroWinkler.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Level2JaroWinkler.java index 3ad1cfaaf..a2afc3872 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Level2JaroWinkler.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Level2JaroWinkler.java @@ -1,8 +1,10 @@ package eu.dnetlib.pace.distance.algo; import com.wcohen.ss.AbstractStringDistance; +import eu.dnetlib.pace.distance.DistanceClass; import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; +@DistanceClass("Level2JaroWinkler") public class Level2JaroWinkler extends SecondStringDistanceAlgo { public Level2JaroWinkler(double w) { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Level2JaroWinklerTitle.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Level2JaroWinklerTitle.java index a1c347256..272e53035 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Level2JaroWinklerTitle.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Level2JaroWinklerTitle.java @@ -1,8 +1,10 @@ package eu.dnetlib.pace.distance.algo; import com.wcohen.ss.AbstractStringDistance; +import eu.dnetlib.pace.distance.DistanceClass; import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; +@DistanceClass("Level2JaroWinklerTitle") public class Level2JaroWinklerTitle extends SecondStringDistanceAlgo { public Level2JaroWinklerTitle(final double w) { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Level2Levenstein.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Level2Levenstein.java index 7a2b0295f..1e955bd4a 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Level2Levenstein.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Level2Levenstein.java @@ -1,8 +1,10 @@ package eu.dnetlib.pace.distance.algo; import com.wcohen.ss.AbstractStringDistance; +import eu.dnetlib.pace.distance.DistanceClass; import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; +@DistanceClass("Level2Levenstein") public class Level2Levenstein extends SecondStringDistanceAlgo { public Level2Levenstein(double w) { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Levenstein.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Levenstein.java index 9dfce83e5..2e014b67e 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Levenstein.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Levenstein.java @@ -1,10 +1,16 @@ package eu.dnetlib.pace.distance.algo; import com.wcohen.ss.AbstractStringDistance; +import eu.dnetlib.pace.distance.DistanceClass; import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; +@DistanceClass("Levenstein") public class Levenstein extends SecondStringDistanceAlgo { + public Levenstein(){ + super(new com.wcohen.ss.Levenstein()); + } + public Levenstein(double w) { super(w, new com.wcohen.ss.Levenstein()); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinTitle.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinTitle.java index 281de31c3..c66f972c3 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinTitle.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinTitle.java @@ -1,10 +1,16 @@ package eu.dnetlib.pace.distance.algo; import com.wcohen.ss.AbstractStringDistance; +import eu.dnetlib.pace.distance.DistanceClass; import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; +@DistanceClass("LevensteinTitle") public class LevensteinTitle extends SecondStringDistanceAlgo { + public LevensteinTitle(){ + super(new com.wcohen.ss.Levenstein()); + } + public LevensteinTitle(final double w) { super(w, new com.wcohen.ss.Levenstein()); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/MustBeDifferent.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/MustBeDifferent.java index 1177ed528..0acb82ca4 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/MustBeDifferent.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/MustBeDifferent.java @@ -1,8 +1,10 @@ package eu.dnetlib.pace.distance.algo; import com.wcohen.ss.AbstractStringDistance; +import eu.dnetlib.pace.distance.DistanceClass; import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; +@DistanceClass("MustBeDifferent") public class MustBeDifferent extends SecondStringDistanceAlgo { public MustBeDifferent(final double weight) { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/NullDistanceAlgo.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/NullDistanceAlgo.java index 8070a0010..ef798cbad 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/NullDistanceAlgo.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/NullDistanceAlgo.java @@ -1,12 +1,16 @@ package eu.dnetlib.pace.distance.algo; import eu.dnetlib.pace.distance.DistanceAlgo; +import eu.dnetlib.pace.distance.DistanceClass; import eu.dnetlib.pace.model.Field; +import java.util.Map; + /** * Not all fields of a document need to partecipate in the distance measure. We model those fields as having a * NullDistanceAlgo. */ +@DistanceClass("Null") public class NullDistanceAlgo implements DistanceAlgo { @Override @@ -19,4 +23,16 @@ public class NullDistanceAlgo implements DistanceAlgo { return 0.0; } + @Override + public void setWeight(double w){ + } + + @Override + public Map getParams() { + return null; + } + + @Override + public void setParams(Map params) { + } } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedJaroWinkler.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedJaroWinkler.java index d83420750..5f716001d 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedJaroWinkler.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedJaroWinkler.java @@ -1,10 +1,12 @@ package eu.dnetlib.pace.distance.algo; import com.wcohen.ss.AbstractStringDistance; +import eu.dnetlib.pace.distance.DistanceClass; /** * The Class SortedJaroWinkler. */ +@DistanceClass("SortedJaroWinkler") public class SortedJaroWinkler extends SortedSecondStringDistanceAlgo { /** diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedLevel2JaroWinkler.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedLevel2JaroWinkler.java index 43ac190e3..493bbef7c 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedLevel2JaroWinkler.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedLevel2JaroWinkler.java @@ -1,10 +1,12 @@ package eu.dnetlib.pace.distance.algo; import com.wcohen.ss.AbstractStringDistance; +import eu.dnetlib.pace.distance.DistanceClass; /** * The Class SortedJaroWinkler. */ +@DistanceClass("Sorted2JaroWinkler") public class SortedLevel2JaroWinkler extends SortedSecondStringDistanceAlgo { /** diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SubStringLevenstein.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SubStringLevenstein.java index 1fa358b0f..9fee7df5d 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SubStringLevenstein.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SubStringLevenstein.java @@ -1,5 +1,6 @@ package eu.dnetlib.pace.distance.algo; +import eu.dnetlib.pace.distance.DistanceClass; import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; import org.apache.commons.lang.StringUtils; @@ -8,14 +9,21 @@ import com.wcohen.ss.AbstractStringDistance; import eu.dnetlib.pace.config.Type; import eu.dnetlib.pace.model.Field; +import java.util.Map; + /** * The Class SubStringLevenstein. */ +@DistanceClass("SubStringLevenstein") public class SubStringLevenstein extends SecondStringDistanceAlgo { /** The limit. */ protected int limit; + public SubStringLevenstein() { + super(new com.wcohen.ss.Levenstein()); + } + /** * Instantiates a new sub string levenstein. * @@ -87,4 +95,9 @@ public class SubStringLevenstein extends SecondStringDistanceAlgo { return 1 / Math.pow(Math.abs(d) + 1, 0.1); } + public void setParams(Map params){ + this.limit = params.get("limit").intValue(); //necessary because this class needs also the limit + super.setParams(params); + } + } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/UrlMatcher.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/UrlMatcher.java index 46a438ebe..2aa7ca1ce 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/UrlMatcher.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/UrlMatcher.java @@ -1,5 +1,6 @@ package eu.dnetlib.pace.distance.algo; +import eu.dnetlib.pace.distance.DistanceClass; import eu.dnetlib.pace.model.Field; import org.apache.commons.lang.StringUtils; @@ -7,15 +8,24 @@ import java.net.MalformedURLException; import java.net.URL; import java.util.Map; +@DistanceClass("urlMatcher") public class UrlMatcher extends Levenstein { private Map params; + public UrlMatcher(){ + super(); + } + public UrlMatcher(double weight, Map params) { super(weight); this.params = params; } + public void setParams(Map params) { + this.params = params; + } + @Override public double distance(Field a, Field b) { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/ConditionEval.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/ConditionEval.java index 49e526f42..d3fcee59a 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/ConditionEval.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/ConditionEval.java @@ -1,6 +1,5 @@ package eu.dnetlib.pace.distance.eval; -import eu.dnetlib.pace.config.Cond; import eu.dnetlib.pace.model.Field; /** @@ -8,7 +7,7 @@ import eu.dnetlib.pace.model.Field; */ public class ConditionEval { - private Cond cond; + private String cond; private Field a; @@ -16,7 +15,7 @@ public class ConditionEval { private int result; - public ConditionEval(final Cond cond, final Field a, final Field b, final int result) { + public ConditionEval(final String cond, final Field a, final Field b, final int result) { this.cond = cond; this.a = a; this.b = b; @@ -47,11 +46,11 @@ public class ConditionEval { this.result = result; } - public Cond getCond() { + public String getCond() { return cond; } - public void setCond(final Cond cond) { + public void setCond(final String cond) { this.cond = cond; } } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/DistanceEval.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/DistanceEval.java index a943d4cea..ef3c4da22 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/DistanceEval.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/DistanceEval.java @@ -1,6 +1,5 @@ package eu.dnetlib.pace.distance.eval; -import eu.dnetlib.pace.config.Algo; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.model.FieldDef; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/ScoreResult.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/ScoreResult.java index b5cdad730..61d5c9327 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/ScoreResult.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/ScoreResult.java @@ -2,10 +2,12 @@ package eu.dnetlib.pace.distance.eval; import com.google.gson.GsonBuilder; +import java.io.Serializable; + /** * Created by claudio on 09/03/16. */ -public class ScoreResult { +public class ScoreResult implements Serializable { private ConditionEvalMap strictConditions; @@ -49,8 +51,12 @@ public class ScoreResult { @Override public String toString() { - final GsonBuilder b = new GsonBuilder(); - b.serializeSpecialFloatingPointValues(); - return b.setPrettyPrinting().create().toJson(this); + //TODO cannot print: why? +// final GsonBuilder b = new GsonBuilder() +// .serializeSpecialFloatingPointValues() +// .serializeNulls(); +// +// return b.setPrettyPrinting().create().toJson(this); + return "{}"; } } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java index db7092b0d..7e09d446e 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java @@ -1,6 +1,7 @@ package eu.dnetlib.pace.model; import java.io.Serializable; +import java.lang.reflect.InvocationTargetException; import java.util.List; import java.util.Map; @@ -9,49 +10,36 @@ import eu.dnetlib.pace.clustering.*; public class ClusteringDef implements Serializable { - private Clustering name; + private String name; private List fields; private Map params; + private ClusteringResolver clusteringResolver = new ClusteringResolver(); + public ClusteringDef() {} - public Clustering getName() { + public String getName() { return name; } - public void setName(final Clustering name) { + public void setName(final String name) { this.name = name; } public ClusteringFunction getClusteringFunction() { - switch (getName()) { - case acronyms: - return new Acronyms(getParams()); - case ngrams: - return new Ngrams(getParams()); - case ngrampairs: - return new NgramPairs(getParams()); - case sortedngrampairs: - return new SortedNgramPairs(getParams()); - case suffixprefix: - return new SuffixPrefix(getParams()); - case spacetrimmingfieldvalue: - return new SpaceTrimmingFieldValue(getParams()); - case immutablefieldvalue: - return new ImmutableFieldValue(getParams()); - case personhash: - return new PersonHash(getParams()); - case personclustering: - return new PersonClustering(getParams()); - case lowercase: - return new LowercaseClustering(getParams()); - case urlclustering: - return new UrlClustering(getParams()); - default: + + try { + ClusteringFunction clusteringFunction = clusteringResolver.resolve(getName()); + clusteringFunction.setParams(params); + return clusteringFunction; + + } catch (IllegalAccessException | InstantiationException | NoSuchMethodException | InvocationTargetException e) { + e.printStackTrace(); return new RandomClusteringFunction(getParams()); } + } public List getFields() { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/CondDef.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/CondDef.java index 747f6c103..14de69a37 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/CondDef.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/CondDef.java @@ -5,44 +5,36 @@ import java.util.List; import com.google.gson.Gson; import eu.dnetlib.pace.condition.*; -import eu.dnetlib.pace.config.Cond; public class CondDef implements Serializable { - private Cond name; + private String name; private List fields; + private ConditionResolver conditionResolver = new ConditionResolver(); + public CondDef() {} public ConditionAlgo getConditionAlgo(final List fields) { - switch (getName()) { - case yearMatch: - return new YearMatch(getName(), fields); - case titleVersionMatch: - return new TitleVersionMatch(getName(), fields); - case sizeMatch: - return new SizeMatch(getName(), fields); - case exactMatch: - return new ExactMatch(getName(), fields); - case mustBeDifferent: - return new MustBeDifferent(getName(), fields); - case exactMatchIgnoreCase: - return new ExactMatchIgnoreCase(getName(), fields); - case doiExactMatch: - return new DoiExactMatch(getName(), fields); - case pidMatch: - return new PidMatch(getName(), fields); - default: + + try { + ConditionAlgo conditionAlgo = conditionResolver.resolve(getName()); + conditionAlgo.setFields(fields); + conditionAlgo.setCond(getName()); + return conditionAlgo; + } catch (IllegalAccessException | InstantiationException e) { + e.printStackTrace(); return new AlwaysTrueCondition(getName(), fields); } + } - public Cond getName() { + public String getName() { return name; } - public void setName(final Cond name) { + public void setName(final String name) { this.name = name; } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java index 5445053bd..3f4619dcf 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java @@ -1,13 +1,13 @@ package eu.dnetlib.pace.model; import java.io.Serializable; +import java.util.HashMap; import java.util.List; import java.util.Map; import com.google.common.base.Splitter; import com.google.common.collect.Lists; import com.google.gson.Gson; -import eu.dnetlib.pace.config.Algo; import eu.dnetlib.pace.config.Type; import eu.dnetlib.pace.distance.*; import eu.dnetlib.pace.distance.algo.*; @@ -19,7 +19,7 @@ public class FieldDef implements Serializable { public final static String PATH_SEPARATOR = "/"; - private Algo algo; + private String algo; private String name; @@ -37,6 +37,8 @@ public class FieldDef implements Serializable { private Map params; + private DistanceResolver distanceResolver = new DistanceResolver(); + public FieldDef() {} // def apply(s: String): Field[A] @@ -66,40 +68,22 @@ public class FieldDef implements Serializable { } public DistanceAlgo getDistanceAlgo() { - switch (getAlgo()) { - case JaroWinkler: - return new JaroWinkler(getWeight()); - case JaroWinklerTitle: - return new JaroWinklerTitle(getWeight()); - case Level2JaroWinkler: - return new Level2JaroWinkler(getWeight()); - case Level2JaroWinklerTitle: - return new Level2JaroWinklerTitle(getWeight()); - case Level2Levenstein: - return new Level2Levenstein(getWeight()); - case Levenstein: - return new Levenstein(getWeight()); - case LevensteinTitle: - return new LevensteinTitle(getWeight()); - case SubStringLevenstein: - return new SubStringLevenstein(getWeight(), getLimit()); - case SortedJaroWinkler: - return new SortedJaroWinkler(getWeight()); - case SortedLevel2JaroWinkler: - return new SortedLevel2JaroWinkler(getWeight()); - case urlMatcher: - return new UrlMatcher(getWeight(), getParams()); - case ExactMatch: - return new ExactMatch(getWeight()); - case MustBeDifferent: - return new MustBeDifferent(getWeight()); - case AlwaysMatch: - return new AlwaysMatch(getWeight()); - case Null: - return new NullDistanceAlgo(); - default: + + try { + if (params == null) { + params = new HashMap<>(); + } + params.put("limit", getLimit()); + params.put("weight", getWeight()); + DistanceAlgo distanceAlgo = distanceResolver.resolve(getAlgo()); + distanceAlgo.setParams(params); + distanceAlgo.setWeight(getWeight()); + return distanceAlgo; + } catch (IllegalAccessException | InstantiationException e) { + e.printStackTrace(); return new NullDistanceAlgo(); } + } public boolean isIgnoreMissing() { @@ -135,11 +119,11 @@ public class FieldDef implements Serializable { this.weight = weight; } - public Algo getAlgo() { + public String getAlgo() { return algo; } - public void setAlgo(final Algo algo) { + public void setAlgo(final String algo) { this.algo = algo; } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java index a9979f5ed..3e6cd6ea5 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java @@ -23,7 +23,6 @@ public class BlockProcessor { private DedupConfig dedupConf; - public static void constructAccumulator( final DedupConfig dedupConf) { accumulators.add(String.format("%s::%s",dedupConf.getWf().getEntityType(), "records per hash key = 1")); accumulators.add(String.format("%s::%s",dedupConf.getWf().getEntityType(), "missing " + dedupConf.getWf().getOrderField())); diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/.DS_Store b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..12db7cf64da79dd932ccfccbbd901c4eda211125 GIT binary patch literal 6148 zcmeHKI|>3Z5S>vG!N$@uSMUZw^aNf&P!vH{5VYRPb9pr1d>UQtw2?P3dC6p6LSC`6 zBO*G#Y-b`95gEY^B@zm@)+3y3!9m+;d(#Yi0p zwti-h{ zq5pp-aYY5Fz+Wk#gT-nw$CI+Qb{=Q7w!qhL%elkNFn0c7o_bQ`6`Nzf VCbof2N8IT^{tTEdG%E0G1s?X~6^#G@ literal 0 HcmV?d00001 From 3cf3dc1934180d7f5bbc906a4055aded7d828c6e Mon Sep 17 00:00:00 2001 From: Michele De Bonis Date: Thu, 25 Oct 2018 15:15:40 +0200 Subject: [PATCH 015/449] modification in the initialization of clustering functions, distance algos and conditions. --- dnet-pace-core/pom.xml | 6 ++-- .../AbstractClusteringFunction.java | 6 ---- .../eu/dnetlib/pace/clustering/Acronyms.java | 4 --- .../pace/clustering/ClusteringFunction.java | 1 - .../pace/clustering/ClusteringResolver.java | 4 +-- .../pace/clustering/ImmutableFieldValue.java | 4 --- .../pace/clustering/LowercaseClustering.java | 4 --- .../dnetlib/pace/clustering/NgramPairs.java | 5 +-- .../eu/dnetlib/pace/clustering/Ngrams.java | 9 +---- .../pace/clustering/PersonClustering.java | 4 --- .../dnetlib/pace/clustering/PersonHash.java | 4 --- .../clustering/RandomClusteringFunction.java | 4 --- .../pace/clustering/SortedNgramPairs.java | 9 +---- .../clustering/SpaceTrimmingFieldValue.java | 4 --- .../dnetlib/pace/clustering/SuffixPrefix.java | 4 --- .../pace/clustering/UrlClustering.java | 8 ----- .../pace/condition/AbstractCondition.java | 10 ------ .../pace/condition/AlwaysTrueCondition.java | 3 -- .../dnetlib/pace/condition/ConditionAlgo.java | 3 -- .../pace/condition/ConditionResolver.java | 7 ++-- .../eu/dnetlib/pace/condition/ExactMatch.java | 4 --- .../eu/dnetlib/pace/condition/YearMatch.java | 2 -- .../dnetlib/pace/distance/DistanceAlgo.java | 4 --- .../pace/distance/DistanceResolver.java | 4 +-- .../distance/SecondStringDistanceAlgo.java | 19 ++-------- .../pace/distance/algo/AlwaysMatch.java | 6 +--- .../pace/distance/algo/ExactMatch.java | 6 +--- .../pace/distance/algo/JaroWinkler.java | 7 ++-- .../pace/distance/algo/JaroWinklerTitle.java | 6 +--- .../pace/distance/algo/Level2JaroWinkler.java | 6 ++++ .../distance/algo/Level2JaroWinklerTitle.java | 6 ++++ .../pace/distance/algo/Level2Levenstein.java | 6 ++++ .../pace/distance/algo/Levenstein.java | 6 ++-- .../pace/distance/algo/LevensteinTitle.java | 6 ++-- .../pace/distance/algo/MustBeDifferent.java | 6 ++++ .../pace/distance/algo/NullDistanceAlgo.java | 15 ++------ .../pace/distance/algo/SortedJaroWinkler.java | 6 ++++ .../algo/SortedLevel2JaroWinkler.java | 6 ++++ .../algo/SortedSecondStringDistanceAlgo.java | 5 +++ .../distance/algo/SubStringLevenstein.java | 14 +++----- .../pace/distance/algo/UrlMatcher.java | 5 +-- .../pace/distance/eval/ScoreResult.java | 14 ++++---- .../eu/dnetlib/pace/model/ClusteringDef.java | 6 +--- .../java/eu/dnetlib/pace/model/CondDef.java | 8 ++--- .../java/eu/dnetlib/pace/model/FieldDef.java | 10 +++--- .../clustering/ClusteringResolverTest.java | 30 ++++++++++++++++ .../pace/condition/ConditionResolverTest.java | 35 +++++++++++++++++++ 47 files changed, 164 insertions(+), 187 deletions(-) create mode 100644 dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringResolverTest.java create mode 100644 dnet-pace-core/src/test/java/eu/dnetlib/pace/condition/ConditionResolverTest.java diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 1a41a7416..51958c50c 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -58,9 +58,11 @@ org.reflections reflections - 0.9.10 - + + org.apache.spark + spark-core_2.11 + diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/AbstractClusteringFunction.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/AbstractClusteringFunction.java index 2885994d9..f9192ad51 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/AbstractClusteringFunction.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/AbstractClusteringFunction.java @@ -19,12 +19,6 @@ public abstract class AbstractClusteringFunction extends AbstractPaceFunctions i this.params = params; } - public AbstractClusteringFunction(){} - - public void setParams(Map params){ - this.params = params; - } - protected abstract Collection doApply(String s); @Override diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/Acronyms.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/Acronyms.java index 09d2ce0e6..ee5efc967 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/Acronyms.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/Acronyms.java @@ -14,10 +14,6 @@ public class Acronyms extends AbstractClusteringFunction { super(params); } - public Acronyms(){ - super(); - } - @Override protected Collection doApply(String s) { return extractAcronyms(s, param("max"), param("minLen"), param("maxLen")); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringFunction.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringFunction.java index 040b92824..4fe1b596e 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringFunction.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringFunction.java @@ -12,5 +12,4 @@ public interface ClusteringFunction { public Map getParams(); - public void setParams(Map params); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringResolver.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringResolver.java index 06a364c22..feec3e213 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringResolver.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringResolver.java @@ -17,8 +17,8 @@ public class ClusteringResolver implements Serializable { .collect(Collectors.toMap(cl -> cl.getAnnotation(ClusteringClass.class).value(), cl -> (Class)cl)); } - public ClusteringFunction resolve(String clusteringFunction) throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException { + public ClusteringFunction resolve(String clusteringFunction, Map params) throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException { - return functionMap.get(clusteringFunction).newInstance(); + return functionMap.get(clusteringFunction).getDeclaredConstructor(Map.class).newInstance(params); } } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ImmutableFieldValue.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ImmutableFieldValue.java index 2d5b67ab5..fab8e989d 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ImmutableFieldValue.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ImmutableFieldValue.java @@ -13,10 +13,6 @@ public class ImmutableFieldValue extends AbstractClusteringFunction { super(params); } - public ImmutableFieldValue() { - super(); - } - @Override protected Collection doApply(final String s) { final List res = Lists.newArrayList(); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/LowercaseClustering.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/LowercaseClustering.java index 50d73cff9..5ec8590aa 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/LowercaseClustering.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/LowercaseClustering.java @@ -16,10 +16,6 @@ public class LowercaseClustering extends AbstractClusteringFunction { super(params); } - public LowercaseClustering(){ - super(); - } - @Override public Collection apply(List fields) { Collection c = Sets.newLinkedHashSet(); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/NgramPairs.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/NgramPairs.java index 6c96ca214..06885be9f 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/NgramPairs.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/NgramPairs.java @@ -1,6 +1,7 @@ package eu.dnetlib.pace.clustering; import java.util.Collection; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -9,10 +10,6 @@ import com.google.common.collect.Lists; @ClusteringClass("ngrampairs") public class NgramPairs extends Ngrams { - public NgramPairs() { - super(); - } - public NgramPairs(Map params) { super(params); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/Ngrams.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/Ngrams.java index 49ce40495..8549468db 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/Ngrams.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/Ngrams.java @@ -1,9 +1,6 @@ package eu.dnetlib.pace.clustering; -import java.util.Collection; -import java.util.LinkedHashSet; -import java.util.Map; -import java.util.StringTokenizer; +import java.util.*; @ClusteringClass("ngrams") public class Ngrams extends AbstractClusteringFunction { @@ -12,10 +9,6 @@ public class Ngrams extends AbstractClusteringFunction { super(params); } - public Ngrams() { - super(); - } - @Override protected Collection doApply(String s) { return getNgrams(s, param("ngramLen"), param("max"), param("maxPerToken"), param("minNgramLen")); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonClustering.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonClustering.java index 42300797e..67b7dcd58 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonClustering.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonClustering.java @@ -30,10 +30,6 @@ public class PersonClustering extends AbstractPaceFunctions implements Clusterin this.params = params; } - public void setParams(Map params){ - this.params = params; - } - @Override public Collection apply(final List fields) { final Set hashes = Sets.newHashSet(); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonHash.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonHash.java index b0e57e905..fcb01b994 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonHash.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonHash.java @@ -17,10 +17,6 @@ public class PersonHash extends AbstractClusteringFunction { super(params); } - public PersonHash(){ - super(); - } - @Override protected Collection doApply(final String s) { final List res = Lists.newArrayList(); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/RandomClusteringFunction.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/RandomClusteringFunction.java index 893abe8e0..f012aacab 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/RandomClusteringFunction.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/RandomClusteringFunction.java @@ -9,10 +9,6 @@ public class RandomClusteringFunction extends AbstractClusteringFunction { super(params); } - public RandomClusteringFunction(){ - super(); - } - @Override protected Collection doApply(String s) { // TODO Auto-generated method stub diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SortedNgramPairs.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SortedNgramPairs.java index 9ce12fc30..2f475fe71 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SortedNgramPairs.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SortedNgramPairs.java @@ -1,9 +1,6 @@ package eu.dnetlib.pace.clustering; -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.Map; +import java.util.*; import com.google.common.base.Joiner; import com.google.common.base.Splitter; @@ -16,10 +13,6 @@ public class SortedNgramPairs extends NgramPairs { super(params); } - public SortedNgramPairs(){ - super(); - } - @Override protected Collection doApply(String s) { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SpaceTrimmingFieldValue.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SpaceTrimmingFieldValue.java index 8e1fdf3e7..22dc4906b 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SpaceTrimmingFieldValue.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SpaceTrimmingFieldValue.java @@ -16,10 +16,6 @@ public class SpaceTrimmingFieldValue extends AbstractClusteringFunction { super(params); } - public SpaceTrimmingFieldValue(){ - super(); - } - @Override protected Collection doApply(final String s) { final List res = Lists.newArrayList(); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SuffixPrefix.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SuffixPrefix.java index 25520d97c..3960331c9 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SuffixPrefix.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SuffixPrefix.java @@ -13,10 +13,6 @@ public class SuffixPrefix extends AbstractClusteringFunction { super(params); } - public SuffixPrefix(){ - super(); - } - @Override protected Collection doApply(String s) { return suffixPrefix(s, param("len"), param("max")); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/UrlClustering.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/UrlClustering.java index 4c0c33fd1..3c0261376 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/UrlClustering.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/UrlClustering.java @@ -20,14 +20,6 @@ public class UrlClustering extends AbstractPaceFunctions implements ClusteringFu this.params = params; } - public UrlClustering() { - super(); - } - - public void setParams(Map params){ - this.params = params; - } - @Override public Collection apply(List fields) { return fields.stream() diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/AbstractCondition.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/AbstractCondition.java index adc68254e..cf68e740f 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/AbstractCondition.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/AbstractCondition.java @@ -25,16 +25,6 @@ public abstract class AbstractCondition extends AbstractPaceFunctions implements this.fields = fields; } - public AbstractCondition(){} - - public void setCond(String cond){ - this.cond = cond; - } - - public void setFields(List fields){ - this.fields = fields; - } - protected abstract ConditionEval verify(FieldDef fd, Field a, Field b); @Override diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/AlwaysTrueCondition.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/AlwaysTrueCondition.java index a67567eeb..2274da5d5 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/AlwaysTrueCondition.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/AlwaysTrueCondition.java @@ -17,9 +17,6 @@ public class AlwaysTrueCondition extends AbstractCondition { super(cond, fields); } - public AlwaysTrueCondition(){ - super(); - } @Override protected ConditionEval verify(final FieldDef fd, final Field a, final Field b) { return new ConditionEval(cond, a, b, 1); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ConditionAlgo.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ConditionAlgo.java index 1293c7d95..787ad9af1 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ConditionAlgo.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ConditionAlgo.java @@ -24,7 +24,4 @@ public interface ConditionAlgo { */ public abstract ConditionEvalMap verify(Document a, Document b); - public void setFields(List fields); - public void setCond(String name); - } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ConditionResolver.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ConditionResolver.java index 58a30ddda..577bcdb6e 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ConditionResolver.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ConditionResolver.java @@ -1,9 +1,12 @@ package eu.dnetlib.pace.condition; import java.io.Serializable; +import java.lang.reflect.InvocationTargetException; +import java.util.List; import java.util.Map; import java.util.stream.Collectors; +import eu.dnetlib.pace.model.FieldDef; import org.reflections.Reflections; public class ConditionResolver implements Serializable { @@ -16,7 +19,7 @@ public class ConditionResolver implements Serializable { .collect(Collectors.toMap(cl -> cl.getAnnotation(ConditionClass.class).value(), cl -> (Class)cl)); } - public ConditionAlgo resolve(String name) throws IllegalAccessException, InstantiationException { - return functionMap.get(name).newInstance(); + public ConditionAlgo resolve(String name, List fields) throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException { + return functionMap.get(name).getDeclaredConstructor(String.class, List.class).newInstance(name, fields); } } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ExactMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ExactMatch.java index f4ba8de42..2776576c4 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ExactMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ExactMatch.java @@ -19,10 +19,6 @@ public class ExactMatch extends AbstractCondition { super(cond, fields); } - public ExactMatch(){ - super(); - } - @Override protected ConditionEval verify(final FieldDef fd, final Field a, final Field b) { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/YearMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/YearMatch.java index 54d0ba89f..71bb6cfd6 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/YearMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/YearMatch.java @@ -23,8 +23,6 @@ public class YearMatch extends AbstractCondition { super(cond, fields); } - public YearMatch(){} - // @Override // public boolean verify(final Document a, final Document b) { // boolean res = true; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceAlgo.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceAlgo.java index c2749c503..5e4f69f51 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceAlgo.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceAlgo.java @@ -13,9 +13,5 @@ public interface DistanceAlgo { public abstract double distance(Field a, Field b); public double getWeight(); - public Map getParams(); - - public void setWeight(double w); - public void setParams(Map params); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceResolver.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceResolver.java index 09377605e..d219ac440 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceResolver.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceResolver.java @@ -17,8 +17,8 @@ public class DistanceResolver implements Serializable { .collect(Collectors.toMap(cl -> cl.getAnnotation(DistanceClass.class).value(), cl -> (Class)cl)); } - public DistanceAlgo resolve(String algo) throws IllegalAccessException, InstantiationException { + public DistanceAlgo resolve(String algo, Map params) throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException { - return functionMap.get(algo).newInstance(); + return functionMap.get(algo).getDeclaredConstructor(Map.class).newInstance(params); } } \ No newline at end of file diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/SecondStringDistanceAlgo.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/SecondStringDistanceAlgo.java index 785c00bc3..9cc35298f 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/SecondStringDistanceAlgo.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/SecondStringDistanceAlgo.java @@ -28,23 +28,10 @@ public abstract class SecondStringDistanceAlgo extends AbstractPaceFunctions imp private Map params; - protected SecondStringDistanceAlgo(){ - } - - protected SecondStringDistanceAlgo(Map params){ - this.params = params; - } - - public void setWeight(double w){ - this.weight = w; - } - - public Map getParams(){ - return this.params; - } - - public void setParams(Map params){ + protected SecondStringDistanceAlgo(Map params, final AbstractStringDistance ssalgo){ this.params = params; + this.weight = params.get("weight").doubleValue(); + this.ssalgo = ssalgo; } /** diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/AlwaysMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/AlwaysMatch.java index 7039f05a6..503235c13 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/AlwaysMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/AlwaysMatch.java @@ -9,12 +9,8 @@ import java.util.Map; @DistanceClass("AlwaysMatch") public class AlwaysMatch extends SecondStringDistanceAlgo { - public AlwaysMatch(){ - super(); - } - public AlwaysMatch(final Map params){ - super(params); + super(params, new com.wcohen.ss.JaroWinkler()); } public AlwaysMatch(final double weight) { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/ExactMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/ExactMatch.java index 2e714c4af..44d881e55 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/ExactMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/ExactMatch.java @@ -9,12 +9,8 @@ import java.util.Map; @DistanceClass("ExactMatch") public class ExactMatch extends SecondStringDistanceAlgo { - public ExactMatch(){ - super(); - } - public ExactMatch(Map params){ - super(params); + super(params, new com.wcohen.ss.JaroWinkler()); } public ExactMatch(final double weight) { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinkler.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinkler.java index ea1e0798e..20c09121d 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinkler.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinkler.java @@ -4,18 +4,15 @@ import com.wcohen.ss.AbstractStringDistance; import eu.dnetlib.pace.distance.DistanceClass; import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; +import java.io.Serializable; import java.util.Map; //case class JaroWinkler(w: Double) extends SecondStringDistanceAlgo(w, new com.wcohen.ss.JaroWinkler()) @DistanceClass("JaroWinkler") public class JaroWinkler extends SecondStringDistanceAlgo { - public JaroWinkler(){ - super(); - } - public JaroWinkler(Map params){ - super(params); + super(params, new com.wcohen.ss.JaroWinkler()); } public JaroWinkler(double weight) { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerTitle.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerTitle.java index b37c88d63..ff4d6de1f 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerTitle.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerTitle.java @@ -10,12 +10,8 @@ import java.util.Map; @DistanceClass("JaroWinklerTitle") public class JaroWinklerTitle extends SecondStringDistanceAlgo { - public JaroWinklerTitle(){ - super(); - } - public JaroWinklerTitle(Map params){ - super(params); + super(params, new com.wcohen.ss.JaroWinkler()); } public JaroWinklerTitle(double weight) { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Level2JaroWinkler.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Level2JaroWinkler.java index a2afc3872..135fc5379 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Level2JaroWinkler.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Level2JaroWinkler.java @@ -4,9 +4,15 @@ import com.wcohen.ss.AbstractStringDistance; import eu.dnetlib.pace.distance.DistanceClass; import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; +import java.util.Map; + @DistanceClass("Level2JaroWinkler") public class Level2JaroWinkler extends SecondStringDistanceAlgo { + public Level2JaroWinkler(Map params){ + super(params, new com.wcohen.ss.Level2JaroWinkler()); + } + public Level2JaroWinkler(double w) { super(w, new com.wcohen.ss.Level2JaroWinkler()); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Level2JaroWinklerTitle.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Level2JaroWinklerTitle.java index 272e53035..2d05a0084 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Level2JaroWinklerTitle.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Level2JaroWinklerTitle.java @@ -4,9 +4,15 @@ import com.wcohen.ss.AbstractStringDistance; import eu.dnetlib.pace.distance.DistanceClass; import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; +import java.util.Map; + @DistanceClass("Level2JaroWinklerTitle") public class Level2JaroWinklerTitle extends SecondStringDistanceAlgo { + public Level2JaroWinklerTitle(Map params){ + super(params, new com.wcohen.ss.Level2JaroWinkler()); + } + public Level2JaroWinklerTitle(final double w) { super(w, new com.wcohen.ss.Level2JaroWinkler()); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Level2Levenstein.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Level2Levenstein.java index 1e955bd4a..767c5976b 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Level2Levenstein.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Level2Levenstein.java @@ -4,9 +4,15 @@ import com.wcohen.ss.AbstractStringDistance; import eu.dnetlib.pace.distance.DistanceClass; import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; +import java.util.Map; + @DistanceClass("Level2Levenstein") public class Level2Levenstein extends SecondStringDistanceAlgo { + public Level2Levenstein(Map params){ + super(params, new com.wcohen.ss.Level2Levenstein()); + } + public Level2Levenstein(double w) { super(w, new com.wcohen.ss.Level2Levenstein()); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Levenstein.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Levenstein.java index 2e014b67e..d9ba5f73e 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Levenstein.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Levenstein.java @@ -4,11 +4,13 @@ import com.wcohen.ss.AbstractStringDistance; import eu.dnetlib.pace.distance.DistanceClass; import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; +import java.util.Map; + @DistanceClass("Levenstein") public class Levenstein extends SecondStringDistanceAlgo { - public Levenstein(){ - super(new com.wcohen.ss.Levenstein()); + public Levenstein(Map params){ + super(params, new com.wcohen.ss.Levenstein()); } public Levenstein(double w) { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinTitle.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinTitle.java index c66f972c3..10de8597c 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinTitle.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinTitle.java @@ -4,11 +4,13 @@ import com.wcohen.ss.AbstractStringDistance; import eu.dnetlib.pace.distance.DistanceClass; import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; +import java.util.Map; + @DistanceClass("LevensteinTitle") public class LevensteinTitle extends SecondStringDistanceAlgo { - public LevensteinTitle(){ - super(new com.wcohen.ss.Levenstein()); + public LevensteinTitle(Map params){ + super(params, new com.wcohen.ss.Levenstein()); } public LevensteinTitle(final double w) { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/MustBeDifferent.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/MustBeDifferent.java index 0acb82ca4..e794f025f 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/MustBeDifferent.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/MustBeDifferent.java @@ -4,9 +4,15 @@ import com.wcohen.ss.AbstractStringDistance; import eu.dnetlib.pace.distance.DistanceClass; import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; +import java.util.Map; + @DistanceClass("MustBeDifferent") public class MustBeDifferent extends SecondStringDistanceAlgo { + public MustBeDifferent(Map params){ + super(params, new com.wcohen.ss.Levenstein()); + } + public MustBeDifferent(final double weight) { super(weight, new com.wcohen.ss.JaroWinkler()); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/NullDistanceAlgo.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/NullDistanceAlgo.java index ef798cbad..8afc45fd6 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/NullDistanceAlgo.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/NullDistanceAlgo.java @@ -13,6 +13,9 @@ import java.util.Map; @DistanceClass("Null") public class NullDistanceAlgo implements DistanceAlgo { + public NullDistanceAlgo(Map params){ + } + @Override public double distance(Field a, Field b) { return 0.0; @@ -23,16 +26,4 @@ public class NullDistanceAlgo implements DistanceAlgo { return 0.0; } - @Override - public void setWeight(double w){ - } - - @Override - public Map getParams() { - return null; - } - - @Override - public void setParams(Map params) { - } } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedJaroWinkler.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedJaroWinkler.java index 5f716001d..e3175a13e 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedJaroWinkler.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedJaroWinkler.java @@ -3,12 +3,18 @@ package eu.dnetlib.pace.distance.algo; import com.wcohen.ss.AbstractStringDistance; import eu.dnetlib.pace.distance.DistanceClass; +import java.util.Map; + /** * The Class SortedJaroWinkler. */ @DistanceClass("SortedJaroWinkler") public class SortedJaroWinkler extends SortedSecondStringDistanceAlgo { + public SortedJaroWinkler(Map params){ + super(params, new com.wcohen.ss.Levenstein()); + } + /** * Instantiates a new sorted jaro winkler. * diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedLevel2JaroWinkler.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedLevel2JaroWinkler.java index 493bbef7c..e53df09c8 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedLevel2JaroWinkler.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedLevel2JaroWinkler.java @@ -3,6 +3,8 @@ package eu.dnetlib.pace.distance.algo; import com.wcohen.ss.AbstractStringDistance; import eu.dnetlib.pace.distance.DistanceClass; +import java.util.Map; + /** * The Class SortedJaroWinkler. */ @@ -19,6 +21,10 @@ public class SortedLevel2JaroWinkler extends SortedSecondStringDistanceAlgo { super(weight, new com.wcohen.ss.Level2JaroWinkler()); } + public SortedLevel2JaroWinkler(final Map params){ + super(params, new com.wcohen.ss.Level2JaroWinkler()); + } + /** * Instantiates a new sorted jaro winkler. * diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedSecondStringDistanceAlgo.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedSecondStringDistanceAlgo.java index d47fbbacd..8a9c51402 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedSecondStringDistanceAlgo.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedSecondStringDistanceAlgo.java @@ -2,6 +2,7 @@ package eu.dnetlib.pace.distance.algo; import java.util.Collections; import java.util.List; +import java.util.Map; import com.google.common.collect.Lists; import com.wcohen.ss.AbstractStringDistance; @@ -27,6 +28,10 @@ public abstract class SortedSecondStringDistanceAlgo extends SecondStringDistanc super(weight, ssalgo); } + protected SortedSecondStringDistanceAlgo(final Map params, final AbstractStringDistance ssalgo){ + super(params.get("weight").doubleValue(), ssalgo); + } + /* * (non-Javadoc) * diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SubStringLevenstein.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SubStringLevenstein.java index 9fee7df5d..8f0c024c7 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SubStringLevenstein.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SubStringLevenstein.java @@ -20,10 +20,6 @@ public class SubStringLevenstein extends SecondStringDistanceAlgo { /** The limit. */ protected int limit; - public SubStringLevenstein() { - super(new com.wcohen.ss.Levenstein()); - } - /** * Instantiates a new sub string levenstein. * @@ -34,6 +30,11 @@ public class SubStringLevenstein extends SecondStringDistanceAlgo { super(w, new com.wcohen.ss.Levenstein()); } + public SubStringLevenstein(Map params){ + super(params, new com.wcohen.ss.Levenstein()); + this.limit = params.get("limit").intValue(); + } + /** * Instantiates a new sub string levenstein. * @@ -95,9 +96,4 @@ public class SubStringLevenstein extends SecondStringDistanceAlgo { return 1 / Math.pow(Math.abs(d) + 1, 0.1); } - public void setParams(Map params){ - this.limit = params.get("limit").intValue(); //necessary because this class needs also the limit - super.setParams(params); - } - } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/UrlMatcher.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/UrlMatcher.java index 2aa7ca1ce..eacfdc08f 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/UrlMatcher.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/UrlMatcher.java @@ -13,8 +13,9 @@ public class UrlMatcher extends Levenstein { private Map params; - public UrlMatcher(){ - super(); + public UrlMatcher(Map params){ + super(params); + this.params = params; } public UrlMatcher(double weight, Map params) { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/ScoreResult.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/ScoreResult.java index 61d5c9327..4e394b261 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/ScoreResult.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/ScoreResult.java @@ -1,7 +1,9 @@ package eu.dnetlib.pace.distance.eval; import com.google.gson.GsonBuilder; +import org.codehaus.jackson.map.ObjectMapper; +import java.io.IOException; import java.io.Serializable; /** @@ -51,12 +53,10 @@ public class ScoreResult implements Serializable { @Override public String toString() { - //TODO cannot print: why? -// final GsonBuilder b = new GsonBuilder() -// .serializeSpecialFloatingPointValues() -// .serializeNulls(); -// -// return b.setPrettyPrinting().create().toJson(this); - return "{}"; + try { + return new ObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(this); + } catch (IOException e) { + return e.getStackTrace().toString(); + } } } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java index 7e09d446e..7d6cdcba9 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java @@ -31,15 +31,11 @@ public class ClusteringDef implements Serializable { public ClusteringFunction getClusteringFunction() { try { - ClusteringFunction clusteringFunction = clusteringResolver.resolve(getName()); - clusteringFunction.setParams(params); - return clusteringFunction; - + return clusteringResolver.resolve(getName(), params); } catch (IllegalAccessException | InstantiationException | NoSuchMethodException | InvocationTargetException e) { e.printStackTrace(); return new RandomClusteringFunction(getParams()); } - } public List getFields() { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/CondDef.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/CondDef.java index 14de69a37..fda8653c9 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/CondDef.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/CondDef.java @@ -1,6 +1,7 @@ package eu.dnetlib.pace.model; import java.io.Serializable; +import java.lang.reflect.InvocationTargetException; import java.util.List; import com.google.gson.Gson; @@ -19,11 +20,8 @@ public class CondDef implements Serializable { public ConditionAlgo getConditionAlgo(final List fields) { try { - ConditionAlgo conditionAlgo = conditionResolver.resolve(getName()); - conditionAlgo.setFields(fields); - conditionAlgo.setCond(getName()); - return conditionAlgo; - } catch (IllegalAccessException | InstantiationException e) { + return conditionResolver.resolve(getName(), fields); + } catch (IllegalAccessException | InstantiationException | NoSuchMethodException | InvocationTargetException e) { e.printStackTrace(); return new AlwaysTrueCondition(getName(), fields); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java index 3f4619dcf..8b7250171 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java @@ -1,6 +1,7 @@ package eu.dnetlib.pace.model; import java.io.Serializable; +import java.lang.reflect.InvocationTargetException; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -75,13 +76,10 @@ public class FieldDef implements Serializable { } params.put("limit", getLimit()); params.put("weight", getWeight()); - DistanceAlgo distanceAlgo = distanceResolver.resolve(getAlgo()); - distanceAlgo.setParams(params); - distanceAlgo.setWeight(getWeight()); - return distanceAlgo; - } catch (IllegalAccessException | InstantiationException e) { + return distanceResolver.resolve(getAlgo(), params); + } catch (IllegalAccessException | InstantiationException | NoSuchMethodException | InvocationTargetException e) { e.printStackTrace(); - return new NullDistanceAlgo(); + return new NullDistanceAlgo(params); } } diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringResolverTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringResolverTest.java new file mode 100644 index 000000000..6d01176f9 --- /dev/null +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringResolverTest.java @@ -0,0 +1,30 @@ +package eu.dnetlib.pace.clustering; + +import org.junit.Before; +import org.junit.Test; + +import java.lang.reflect.InvocationTargetException; +import java.util.HashMap; +import java.util.Map; + +import static org.junit.Assert.assertEquals; + +public class ClusteringResolverTest { + + private ClusteringResolver clusteringResolver; + private Map params = new HashMap(); + + @Before + public void setUp(){ + clusteringResolver = new ClusteringResolver(); + } + + @Test + public void testResolve() throws InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException { + + ClusteringFunction ngrams = clusteringResolver.resolve("ngrams", params); + + assertEquals(ngrams.getClass(), Ngrams.class); + } + +} diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/condition/ConditionResolverTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/condition/ConditionResolverTest.java new file mode 100644 index 000000000..87d1c375b --- /dev/null +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/condition/ConditionResolverTest.java @@ -0,0 +1,35 @@ +package eu.dnetlib.pace.condition; + +import eu.dnetlib.pace.clustering.ClusteringFunction; +import eu.dnetlib.pace.clustering.ClusteringResolver; +import eu.dnetlib.pace.clustering.Ngrams; +import eu.dnetlib.pace.model.FieldDef; +import org.junit.Before; +import org.junit.Test; + +import java.lang.reflect.InvocationTargetException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static org.junit.Assert.assertEquals; + +public class ConditionResolverTest { + + private ConditionResolver conditionResolver; + private List fields; + private String name; + + @Before + public void setUp(){ + conditionResolver = new ConditionResolver(); + } + + @Test + public void testResolve() throws InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException { + + ConditionAlgo sizeMatch = conditionResolver.resolve("sizeMatch", fields); + + assertEquals(sizeMatch.getClass(), SizeMatch.class); + } +} From 8b4762bf548fd8bd280e96ba3f17c4eb8ab5bde3 Mon Sep 17 00:00:00 2001 From: Michele De Bonis Date: Fri, 26 Oct 2018 14:55:59 +0200 Subject: [PATCH 016/449] implementation of the toString methonds changed: from Gson to Jackson --- .../eu/dnetlib/pace/config/DedupConfig.java | 7 +- .../java/eu/dnetlib/pace/config/WfConfig.java | 8 ++- .../eu/dnetlib/pace/config/ConfigTest.java | 67 +++++++++++++++++-- 3 files changed, 76 insertions(+), 6 deletions(-) diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java index eb041844a..a0fcc2c6c 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java @@ -19,6 +19,7 @@ import eu.dnetlib.pace.model.ClusteringDef; import eu.dnetlib.pace.model.FieldDef; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.codehaus.jackson.map.ObjectMapper; public class DedupConfig implements Config, Serializable { @@ -96,7 +97,11 @@ public class DedupConfig implements Config, Serializable { @Override public String toString() { - return new GsonBuilder().setPrettyPrinting().create().toJson(this); + try { + return new ObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(this); + } catch (IOException e) { + return e.getStackTrace().toString(); + } } @Override diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/WfConfig.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/WfConfig.java index bcf2d6539..a2edef3f7 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/WfConfig.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/WfConfig.java @@ -1,5 +1,6 @@ package eu.dnetlib.pace.config; +import java.io.IOException; import java.io.Serializable; import java.util.HashSet; import java.util.List; @@ -9,6 +10,7 @@ import com.google.common.collect.Lists; import com.google.common.collect.Sets; import com.google.gson.GsonBuilder; import org.apache.commons.lang.StringUtils; +import org.codehaus.jackson.map.ObjectMapper; public class WfConfig implements Serializable { @@ -249,7 +251,11 @@ public class WfConfig implements Serializable { */ @Override public String toString() { - return new GsonBuilder().setPrettyPrinting().create().toJson(this); + try { + return new ObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(this); + } catch (IOException e) { + return e.getStackTrace().toString(); + } } } diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java index 26ff387c8..2b7a5baf3 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java @@ -8,17 +8,76 @@ import eu.dnetlib.pace.model.MapDocumentSerializer; import org.apache.commons.io.IOUtils; import org.junit.Test; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; public class ConfigTest extends AbstractPaceTest { @Test - public void test() throws IOException { - final DedupConfig cfg = DedupConfig.load(readFromClasspath("result.pace.conf.json")); + public void dedupConfigSerializationTest() throws IOException { + final DedupConfig cfgFromClasspath = DedupConfig.load(readFromClasspath("result.pace.conf.json")); - assertNotNull(cfg); + assertNotNull(cfgFromClasspath); + + String conf = "{ \n" + + "wf\" : { " + + " \"threshold\" : \"0.99\", " + + " \"run\" : \"001\", " + + " \"entityType\" : \"result\", " + + " \"orderField\" : \"title\", " + + " \"queueMaxSize\" : \"2000\"," + + " \"groupMaxSize\" : \"10\"," + + " \"slidingWindowSize\" : \"200\"," + + " \"rootBuilder\" : [ \"result\" ]," + + " \"includeChildren\" : \"true\" " + + " }," + + "\t\"pace\" : {\t\t\n" + + "\t\t\"clustering\" : [\n" + + "\t\t\t{ \"name\" : \"acronyms\", \"fields\" : [ \"title\" ], \"params\" : { \"max\" : \"1\", \"minLen\" : \"2\", \"maxLen\" : \"4\"} },\n" + + "\t\t\t{ \"name\" : \"ngrampairs\", \"fields\" : [ \"title\" ], \"params\" : { \"max\" : \"1\", \"ngramLen\" : \"3\"} },\n" + + "\t\t\t{ \"name\" : \"suffixprefix\", \"fields\" : [ \"title\" ], \"params\" : { \"max\" : \"1\", \"len\" : \"3\" } } \n" + + "\t\t],\t\t\n" + + "\t\t\"strictConditions\" : [\n" + + " \t\t\t{ \"name\" : \"exactMatch\", \"fields\" : [ \"pid\" ] }\n" + + " \t\t], \n" + + " \t\t\"conditions\" : [ \n" + + " \t\t\t{ \"name\" : \"yearMatch\", \"fields\" : [ \"dateofacceptance\" ] },\n" + + " \t\t\t{ \"name\" : \"titleVersionMatch\", \"fields\" : [ \"title\" ] },\n" + + " \t\t\t{ \"name\" : \"sizeMatch\", \"fields\" : [ \"authors\" ] } \n" + + " \t\t],\t\t\n" + + "\t\t\"model\" : [\n" + + "\t\t\t{ \"name\" : \"pid\", \"algo\" : \"Null\", \"type\" : \"String\", \"weight\" : \"0.0\", \"ignoreMissing\" : \"true\", \"path\" : \"pid[qualifier#classid = {doi}]/value\", \"overrideMatch\" : \"true\" }, \t\n" + + "\t\t\t{ \"name\" : \"title\", \"algo\" : \"JaroWinkler\", \"type\" : \"String\", \"weight\" : \"1.0\", \"ignoreMissing\" : \"false\", \"path\" : \"result/metadata/title[qualifier#classid = {main title}]/value\" },\n" + + "\t\t\t{ \"name\" : \"dateofacceptance\", \"algo\" : \"Null\", \"type\" : \"String\", \"weight\" : \"0.0\", \"ignoreMissing\" : \"true\", \"path\" : \"result/metadata/dateofacceptance/value\" } ,\n" + + "\t\t\t{ \"name\" : \"authors\", \"algo\" : \"Null\", \"type\" : \"List\", \"weight\" : \"0.0\", \"ignoreMissing\" : \"true\", \"path\" : \"result/author/metadata/fullname/value\" }\n" + + "\t\t],\n" + + "\t\t\"blacklists\" : {\n" + + "\t\t\t\"title\" : [\n" + + "\t\t\t\t\"^(Corpus Oral Dialectal \\\\(COD\\\\)\\\\.).*$\",\n" + + "\t\t\t\t\"^(Kiri Karl Morgensternile).*$\",\n" + + "\t\t\t\t\"^(\\\\[Eksliibris Aleksandr).*\\\\]$\",\n" + + "\t\t\t\t\"^(\\\\[Eksliibris Aleksandr).*$\",\n" + + "\t\t\t\t\"^(Eksliibris Aleksandr).*$\",\n" + + "\t\t\t\t\"^(Kiri A\\\\. de Vignolles).*$\",\n" + + "\t\t\t\t\"^(2 kirja Karl Morgensternile).*$\",\n" + + "\t\t\t\t\"^(Pirita kloostri idaosa arheoloogilised).*$\",\n" + + "\t\t\t\t\"^(Kiri tundmatule).*$\",\n" + + "\t\t\t\t\"^(Kiri Jenaer Allgemeine Literaturzeitung toimetusele).*$\",\n" + + "\t\t\t\t\"^(Eksliibris Nikolai Birukovile).*$\",\n" + + "\t\t\t\t\"^(Eksliibris Nikolai Issakovile).*$\",\n" + + "\t\t\t\t\"^(WHP Cruise Summary Information of section).*$\",\n" + + "\t\t\t\t\"^(Measurement of the top quark\\\\-pair production cross section with ATLAS in pp collisions at).*$\",\n" + + "\t\t\t\t\"^(Measurement of the spin\\\\-dependent structure function).*\"\n" + + "\t\t\t] } \t\t\n" + + "\t}\n" + + "\n" + + "}"; + + final DedupConfig cfgFromSerialization = DedupConfig.load(cfgFromClasspath.toString()); + String params = "\"params\":{\"limit\":-1,\"weight\":0.0}"; + //verify if the serialization produces the same result of the input json +// assertEquals(cfgFromSerialization.toString().replaceAll("[\n\t\r ]", "").replaceAll("\"params\":null", params), cfgFromClasspath.toString().replaceAll("[\n\t\r ]", "")); - System.out.println(cfg.toString()); } } From ea36007d1fd1eb95644ceae0b478106b75e0f0a0 Mon Sep 17 00:00:00 2001 From: Michele De Bonis Date: Mon, 29 Oct 2018 11:13:55 +0100 Subject: [PATCH 017/449] DedupConf parsed using Jackson library --- .../pace/clustering/ClusteringResolver.java | 24 ------- .../pace/condition/ConditionResolver.java | 25 -------- .../eu/dnetlib/pace/config/DedupConfig.java | 17 ++--- .../eu/dnetlib/pace/config/PaceConfig.java | 5 ++ .../pace/distance/DistanceResolver.java | 24 ------- .../eu/dnetlib/pace/model/ClusteringDef.java | 21 ++++--- .../java/eu/dnetlib/pace/model/CondDef.java | 24 +++---- .../java/eu/dnetlib/pace/model/FieldDef.java | 20 +++--- .../eu/dnetlib/pace/model/gt/GTAuthor.java | 1 - .../dnetlib/pace/model/gt/ScoredResult.java | 10 ++- .../eu/dnetlib/pace/util/PaceException.java | 9 +++ .../eu/dnetlib/pace/util/PaceResolver.java | 63 +++++++++++++++++++ .../clustering/ClusteringResolverTest.java | 30 --------- .../pace/condition/ConditionResolverTest.java | 35 ----------- .../eu/dnetlib/pace/config/ConfigTest.java | 10 ++- .../dnetlib/pace/config/result.pace.conf.json | 2 +- 16 files changed, 134 insertions(+), 186 deletions(-) delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringResolver.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ConditionResolver.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceResolver.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/util/PaceException.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/util/PaceResolver.java delete mode 100644 dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringResolverTest.java delete mode 100644 dnet-pace-core/src/test/java/eu/dnetlib/pace/condition/ConditionResolverTest.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringResolver.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringResolver.java deleted file mode 100644 index feec3e213..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringResolver.java +++ /dev/null @@ -1,24 +0,0 @@ -package eu.dnetlib.pace.clustering; - -import java.io.Serializable; -import java.lang.reflect.InvocationTargetException; -import java.util.Map; -import java.util.stream.Collectors; - -import org.reflections.Reflections; - -public class ClusteringResolver implements Serializable { - private final Map> functionMap; - - public ClusteringResolver() { - - this.functionMap = new Reflections("eu.dnetlib").getTypesAnnotatedWith(ClusteringClass.class).stream() - .filter(ClusteringFunction.class::isAssignableFrom) - .collect(Collectors.toMap(cl -> cl.getAnnotation(ClusteringClass.class).value(), cl -> (Class)cl)); - } - - public ClusteringFunction resolve(String clusteringFunction, Map params) throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException { - - return functionMap.get(clusteringFunction).getDeclaredConstructor(Map.class).newInstance(params); - } -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ConditionResolver.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ConditionResolver.java deleted file mode 100644 index 577bcdb6e..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ConditionResolver.java +++ /dev/null @@ -1,25 +0,0 @@ -package eu.dnetlib.pace.condition; - -import java.io.Serializable; -import java.lang.reflect.InvocationTargetException; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -import eu.dnetlib.pace.model.FieldDef; -import org.reflections.Reflections; - -public class ConditionResolver implements Serializable { - private final Map> functionMap; - - public ConditionResolver() { - - this.functionMap = new Reflections("eu.dnetlib").getTypesAnnotatedWith(ConditionClass.class).stream() - .filter(ConditionAlgo.class::isAssignableFrom) - .collect(Collectors.toMap(cl -> cl.getAnnotation(ConditionClass.class).value(), cl -> (Class)cl)); - } - - public ConditionAlgo resolve(String name, List fields) throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException { - return functionMap.get(name).getDeclaredConstructor(String.class, List.class).newInstance(name, fields); - } -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java index a0fcc2c6c..2f6b5e9e0 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java @@ -7,12 +7,11 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; +import eu.dnetlib.pace.util.PaceException; import org.antlr.stringtemplate.StringTemplate; import org.apache.commons.io.IOUtils; import com.google.common.collect.Maps; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; import eu.dnetlib.pace.condition.ConditionAlgo; import eu.dnetlib.pace.model.ClusteringDef; @@ -35,7 +34,7 @@ public class DedupConfig implements Config, Serializable { static { defaults.put("threshold", "0"); - defaults.put("run", "001"); + defaults.put("dedupRun", "001"); defaults.put("entityType", "result"); defaults.put("orderField", "title"); defaults.put("queueMaxSize", "2000"); @@ -49,11 +48,15 @@ public class DedupConfig implements Config, Serializable { public static DedupConfig load(final String json) { - final DedupConfig config = new Gson().fromJson(json, DedupConfig.class); + final DedupConfig config; + try { + config = new ObjectMapper().readValue(json, DedupConfig.class); + config.getPace().initModel(); + return config; + } catch (IOException e) { + throw new PaceException("Error in parsing configuration json", e); + } - config.getPace().initModel(); - - return config; } public static DedupConfig loadDefault() throws IOException { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java index 37fea00cd..c26ccaf72 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java @@ -11,6 +11,7 @@ import eu.dnetlib.pace.condition.ConditionAlgo; import eu.dnetlib.pace.model.ClusteringDef; import eu.dnetlib.pace.model.CondDef; import eu.dnetlib.pace.model.FieldDef; +import eu.dnetlib.pace.util.PaceResolver; import org.apache.commons.collections.CollectionUtils; public class PaceConfig implements Serializable { @@ -23,6 +24,8 @@ public class PaceConfig implements Serializable { private Map modelMap; + public static PaceResolver paceResolver; + public PaceConfig() {} public void initModel() { @@ -30,6 +33,8 @@ public class PaceConfig implements Serializable { for(FieldDef fd : getModel()) { modelMap.put(fd.getName(), fd); } + + paceResolver = new PaceResolver(); } public List getModel() { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceResolver.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceResolver.java deleted file mode 100644 index d219ac440..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceResolver.java +++ /dev/null @@ -1,24 +0,0 @@ -package eu.dnetlib.pace.distance; - -import java.io.Serializable; -import java.lang.reflect.InvocationTargetException; -import java.util.Map; -import java.util.stream.Collectors; - -import org.reflections.Reflections; - -public class DistanceResolver implements Serializable { - private final Map> functionMap; - - public DistanceResolver() { - - this.functionMap = new Reflections("eu.dnetlib").getTypesAnnotatedWith(DistanceClass.class).stream() - .filter(DistanceAlgo.class::isAssignableFrom) - .collect(Collectors.toMap(cl -> cl.getAnnotation(DistanceClass.class).value(), cl -> (Class)cl)); - } - - public DistanceAlgo resolve(String algo, Map params) throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException { - - return functionMap.get(algo).getDeclaredConstructor(Map.class).newInstance(params); - } -} \ No newline at end of file diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java index 7d6cdcba9..a5eb51aca 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java @@ -1,12 +1,14 @@ package eu.dnetlib.pace.model; +import java.io.IOException; import java.io.Serializable; -import java.lang.reflect.InvocationTargetException; import java.util.List; import java.util.Map; -import com.google.gson.Gson; import eu.dnetlib.pace.clustering.*; +import eu.dnetlib.pace.config.PaceConfig; +import eu.dnetlib.pace.util.PaceException; +import org.codehaus.jackson.map.ObjectMapper; public class ClusteringDef implements Serializable { @@ -16,8 +18,6 @@ public class ClusteringDef implements Serializable { private Map params; - private ClusteringResolver clusteringResolver = new ClusteringResolver(); - public ClusteringDef() {} public String getName() { @@ -29,12 +29,11 @@ public class ClusteringDef implements Serializable { } public ClusteringFunction getClusteringFunction() { - try { - return clusteringResolver.resolve(getName(), params); - } catch (IllegalAccessException | InstantiationException | NoSuchMethodException | InvocationTargetException e) { + return PaceConfig.paceResolver.getClusteringFunction(getName(), params); + } catch (PaceException e) { e.printStackTrace(); - return new RandomClusteringFunction(getParams()); + return null; } } @@ -56,7 +55,11 @@ public class ClusteringDef implements Serializable { @Override public String toString() { - return new Gson().toJson(this); + try { + return new ObjectMapper().writeValueAsString(this); + } catch (IOException e) { + return e.getStackTrace().toString(); + } } } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/CondDef.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/CondDef.java index fda8653c9..488ea6387 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/CondDef.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/CondDef.java @@ -1,11 +1,12 @@ package eu.dnetlib.pace.model; +import java.io.IOException; import java.io.Serializable; -import java.lang.reflect.InvocationTargetException; import java.util.List; -import com.google.gson.Gson; import eu.dnetlib.pace.condition.*; +import eu.dnetlib.pace.config.PaceConfig; +import org.codehaus.jackson.map.ObjectMapper; public class CondDef implements Serializable { @@ -13,19 +14,10 @@ public class CondDef implements Serializable { private List fields; - private ConditionResolver conditionResolver = new ConditionResolver(); - public CondDef() {} - public ConditionAlgo getConditionAlgo(final List fields) { - - try { - return conditionResolver.resolve(getName(), fields); - } catch (IllegalAccessException | InstantiationException | NoSuchMethodException | InvocationTargetException e) { - e.printStackTrace(); - return new AlwaysTrueCondition(getName(), fields); - } - + public ConditionAlgo getConditionAlgo(final List fields){ + return PaceConfig.paceResolver.getConditionAlgo(getName(), fields); } public String getName() { @@ -46,7 +38,11 @@ public class CondDef implements Serializable { @Override public String toString() { - return new Gson().toJson(this); + try { + return new ObjectMapper().writeValueAsString(this); + } catch (IOException e) { + return e.getStackTrace().toString(); + } } } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java index 8b7250171..825b913da 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java @@ -9,9 +9,11 @@ import java.util.Map; import com.google.common.base.Splitter; import com.google.common.collect.Lists; import com.google.gson.Gson; +import eu.dnetlib.pace.config.PaceConfig; import eu.dnetlib.pace.config.Type; import eu.dnetlib.pace.distance.*; import eu.dnetlib.pace.distance.algo.*; +import eu.dnetlib.pace.util.PaceException; /** * The schema is composed by field definitions (FieldDef). Each field has a type, a name, and an associated distance algorithm. @@ -38,8 +40,6 @@ public class FieldDef implements Serializable { private Map params; - private DistanceResolver distanceResolver = new DistanceResolver(); - public FieldDef() {} // def apply(s: String): Field[A] @@ -70,18 +70,12 @@ public class FieldDef implements Serializable { public DistanceAlgo getDistanceAlgo() { - try { - if (params == null) { - params = new HashMap<>(); - } - params.put("limit", getLimit()); - params.put("weight", getWeight()); - return distanceResolver.resolve(getAlgo(), params); - } catch (IllegalAccessException | InstantiationException | NoSuchMethodException | InvocationTargetException e) { - e.printStackTrace(); - return new NullDistanceAlgo(params); + if (params == null) { + params = new HashMap<>(); } - + params.put("limit", getLimit()); + params.put("weight", getWeight()); + return PaceConfig.paceResolver.getDistanceAlgo(getAlgo(), params); } public boolean isIgnoreMissing() { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/GTAuthor.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/GTAuthor.java index e91edccc1..c9d4797e3 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/GTAuthor.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/GTAuthor.java @@ -13,7 +13,6 @@ import com.google.common.collect.Maps; import com.google.common.collect.Ordering; import com.google.gson.Gson; import com.google.gson.GsonBuilder; -import eu.dnetlib.pace.model.adaptor.PidOafSerialiser; public class GTAuthor implements Comparable { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/ScoredResult.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/ScoredResult.java index 5d4526c4b..9caecee87 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/ScoredResult.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/ScoredResult.java @@ -1,6 +1,8 @@ package eu.dnetlib.pace.model.gt; -import com.google.gson.Gson; +import org.codehaus.jackson.map.ObjectMapper; + +import java.io.IOException; public class ScoredResult extends Result { @@ -20,7 +22,11 @@ public class ScoredResult extends Result { @Override public String toString() { - return new Gson().toJson(this); + try { + return new ObjectMapper().writeValueAsString(this); + } catch (IOException e) { + return e.getStackTrace().toString(); + } } } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/PaceException.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/PaceException.java new file mode 100644 index 000000000..34fd8ba20 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/PaceException.java @@ -0,0 +1,9 @@ +package eu.dnetlib.pace.util; + +public class PaceException extends RuntimeException { + + public PaceException(String s, Throwable e){ + super(s, e); + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/PaceResolver.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/PaceResolver.java new file mode 100644 index 000000000..d14e81b50 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/PaceResolver.java @@ -0,0 +1,63 @@ +package eu.dnetlib.pace.util; + +import eu.dnetlib.pace.clustering.ClusteringClass; +import eu.dnetlib.pace.clustering.ClusteringFunction; +import eu.dnetlib.pace.condition.ConditionAlgo; +import eu.dnetlib.pace.condition.ConditionClass; +import eu.dnetlib.pace.distance.DistanceAlgo; +import eu.dnetlib.pace.distance.DistanceClass; +import eu.dnetlib.pace.model.FieldDef; +import org.reflections.Reflections; + +import java.io.Serializable; +import java.lang.reflect.InvocationTargetException; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +public class PaceResolver implements Serializable { + + private final Map> clusteringFunctions; + private final Map> conditionAlgos; + private final Map> distanceAlgos; + + public PaceResolver() { + + this.clusteringFunctions = new Reflections("eu.dnetlib").getTypesAnnotatedWith(ClusteringClass.class).stream() + .filter(ClusteringFunction.class::isAssignableFrom) + .collect(Collectors.toMap(cl -> cl.getAnnotation(ClusteringClass.class).value(), cl -> (Class)cl)); + + this.conditionAlgos = new Reflections("eu.dnetlib").getTypesAnnotatedWith(ConditionClass.class).stream() + .filter(ConditionAlgo.class::isAssignableFrom) + .collect(Collectors.toMap(cl -> cl.getAnnotation(ConditionClass.class).value(), cl -> (Class)cl)); + + this.distanceAlgos = new Reflections("eu.dnetlib").getTypesAnnotatedWith(DistanceClass.class).stream() + .filter(DistanceAlgo.class::isAssignableFrom) + .collect(Collectors.toMap(cl -> cl.getAnnotation(DistanceClass.class).value(), cl -> (Class)cl)); + } + + public ClusteringFunction getClusteringFunction(String name, Map params) throws PaceException { + try { + return clusteringFunctions.get(name).getDeclaredConstructor(Map.class).newInstance(params); + } catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) { + throw new PaceException(name + "not found", e); + } + } + + public DistanceAlgo getDistanceAlgo(String name, Map params) throws PaceException { + try { + return distanceAlgos.get(name).getDeclaredConstructor(Map.class).newInstance(params); + } catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) { + throw new PaceException(name + "not found", e); + } + } + + public ConditionAlgo getConditionAlgo(String name, List fields) throws PaceException { + try { + return conditionAlgos.get(name).getDeclaredConstructor(String.class, List.class).newInstance(name, fields); + } catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) { + throw new PaceException(name + "not found", e); + } + } + +} diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringResolverTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringResolverTest.java deleted file mode 100644 index 6d01176f9..000000000 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringResolverTest.java +++ /dev/null @@ -1,30 +0,0 @@ -package eu.dnetlib.pace.clustering; - -import org.junit.Before; -import org.junit.Test; - -import java.lang.reflect.InvocationTargetException; -import java.util.HashMap; -import java.util.Map; - -import static org.junit.Assert.assertEquals; - -public class ClusteringResolverTest { - - private ClusteringResolver clusteringResolver; - private Map params = new HashMap(); - - @Before - public void setUp(){ - clusteringResolver = new ClusteringResolver(); - } - - @Test - public void testResolve() throws InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException { - - ClusteringFunction ngrams = clusteringResolver.resolve("ngrams", params); - - assertEquals(ngrams.getClass(), Ngrams.class); - } - -} diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/condition/ConditionResolverTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/condition/ConditionResolverTest.java deleted file mode 100644 index 87d1c375b..000000000 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/condition/ConditionResolverTest.java +++ /dev/null @@ -1,35 +0,0 @@ -package eu.dnetlib.pace.condition; - -import eu.dnetlib.pace.clustering.ClusteringFunction; -import eu.dnetlib.pace.clustering.ClusteringResolver; -import eu.dnetlib.pace.clustering.Ngrams; -import eu.dnetlib.pace.model.FieldDef; -import org.junit.Before; -import org.junit.Test; - -import java.lang.reflect.InvocationTargetException; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import static org.junit.Assert.assertEquals; - -public class ConditionResolverTest { - - private ConditionResolver conditionResolver; - private List fields; - private String name; - - @Before - public void setUp(){ - conditionResolver = new ConditionResolver(); - } - - @Test - public void testResolve() throws InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException { - - ConditionAlgo sizeMatch = conditionResolver.resolve("sizeMatch", fields); - - assertEquals(sizeMatch.getClass(), SizeMatch.class); - } -} diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java index 2b7a5baf3..cd2361bee 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java @@ -76,8 +76,16 @@ public class ConfigTest extends AbstractPaceTest { final DedupConfig cfgFromSerialization = DedupConfig.load(cfgFromClasspath.toString()); String params = "\"params\":{\"limit\":-1,\"weight\":0.0}"; //verify if the serialization produces the same result of the input json -// assertEquals(cfgFromSerialization.toString().replaceAll("[\n\t\r ]", "").replaceAll("\"params\":null", params), cfgFromClasspath.toString().replaceAll("[\n\t\r ]", "")); + assertEquals(cfgFromSerialization.toString().replaceAll("[\n\t\r ]", "").replaceAll("\"params\":null", params), cfgFromClasspath.toString().replaceAll("[\n\t\r ]", "")); } + @Test + public void dedupConfigTest() { + + DedupConfig load = DedupConfig.load(readFromClasspath("result.pace.conf.json")); + + System.out.println(load.toString()); + } + } diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/result.pace.conf.json b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/result.pace.conf.json index 7d8fe244b..786424a34 100644 --- a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/result.pace.conf.json +++ b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/result.pace.conf.json @@ -1,7 +1,7 @@ { "wf" : { "threshold" : "0.99", - "run" : "001", + "dedupRun" : "001", "entityType" : "result", "orderField" : "title", "queueMaxSize" : "2000", From dc41b7664351a8995b2d30d2792f1fa8c350b6c3 Mon Sep 17 00:00:00 2001 From: Michele De Bonis Date: Mon, 29 Oct 2018 16:16:11 +0100 Subject: [PATCH 018/449] serialization test added. useless getter methods ignored by json serialization --- .../src/main/java/eu/dnetlib/pace/.DS_Store | Bin 0 -> 6148 bytes .../pace/clustering/ClusteringCombiner.java | 2 +- .../eu/dnetlib/pace/config/PaceConfig.java | 5 +- .../dnetlib/pace/distance/DistanceScorer.java | 2 +- .../eu/dnetlib/pace/model/ClusteringDef.java | 2 +- .../java/eu/dnetlib/pace/model/CondDef.java | 2 +- .../java/eu/dnetlib/pace/model/FieldDef.java | 2 +- .../eu/dnetlib/pace/config/ConfigTest.java | 72 ++++-------------- 8 files changed, 22 insertions(+), 65 deletions(-) create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/.DS_Store diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/.DS_Store b/dnet-pace-core/src/main/java/eu/dnetlib/pace/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..e20f7b2a25b5b9a98d09de517d0e0e498fed3b86 GIT binary patch literal 6148 zcmeHK!A{#i5Zw)-wXsyWQV*@#!%7^uq>`hwp+_qPPL+xt&4b&LD0w<}$`CP{f)I%>#n{ zs54SC9z?EcWYMsH6lF4+i6zIs$pEh1BKyH4i&?_%uis5{l%@UB^R9Vqp}zR+xn(ao zw)4WV4}zW?24z?d`kk=oy6=KCPNJ~bP2;k+o#g9Ta-8H}i!WiB6nhxFEoBA)+76?g zG#Pf?SD$5GhH0J@s-CW~znkW<9CqX&kNYa#6j%0USoWZfwd_ZSicj0JyYAc3=zX*O z>0?7QTV8YA5Tn&quOU9P+T*cpS#MT0w!RI1{yI55`~Bzq;!-aJhc8yiOM?@*0^=Sd z$3c;2GXDb?He*d3Nq9) values)); + res.addAll(cd.clusteringFunction().apply((List) values)); } } return res; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java index c26ccaf72..4666db7ab 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java @@ -13,6 +13,7 @@ import eu.dnetlib.pace.model.CondDef; import eu.dnetlib.pace.model.FieldDef; import eu.dnetlib.pace.util.PaceResolver; import org.apache.commons.collections.CollectionUtils; +import org.codehaus.jackson.annotate.JsonIgnore; public class PaceConfig implements Serializable { @@ -57,10 +58,12 @@ public class PaceConfig implements Serializable { return conditions; } + @JsonIgnore public List getConditionAlgos() { return asConditionAlgos(getConditions()); } + @JsonIgnore public List getStrictConditionAlgos() { return asConditionAlgos(getStrictConditions()); } @@ -102,7 +105,7 @@ public class PaceConfig implements Serializable { final List fields = getModel().stream() .filter(fd -> cd.getFields().contains(fd.getName())) .collect(Collectors.toList()); - algos.add(cd.getConditionAlgo(fields)); + algos.add(cd.conditionAlgo(fields)); } return algos; } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceScorer.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceScorer.java index 467a19c86..115fd1a1e 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceScorer.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceScorer.java @@ -77,7 +77,7 @@ public class DistanceScorer { } } else { if (va.getType().equals(vb.getType())) { - de.setDistance(w * fd.getDistanceAlgo().distance(va, vb)); + de.setDistance(w * fd.distanceAlgo().distance(va, vb)); } else { throw new IllegalArgumentException(String.format("Types are differents type: %s:%s - %s:%s", va, va.getType(), vb, vb.getType())); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java index a5eb51aca..57239263a 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java @@ -28,7 +28,7 @@ public class ClusteringDef implements Serializable { this.name = name; } - public ClusteringFunction getClusteringFunction() { + public ClusteringFunction clusteringFunction() { try { return PaceConfig.paceResolver.getClusteringFunction(getName(), params); } catch (PaceException e) { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/CondDef.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/CondDef.java index 488ea6387..aefd44d95 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/CondDef.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/CondDef.java @@ -16,7 +16,7 @@ public class CondDef implements Serializable { public CondDef() {} - public ConditionAlgo getConditionAlgo(final List fields){ + public ConditionAlgo conditionAlgo(final List fields){ return PaceConfig.paceResolver.getConditionAlgo(getName(), fields); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java index 825b913da..b954df7d6 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java @@ -68,7 +68,7 @@ public class FieldDef implements Serializable { return Lists.newArrayList(Splitter.on(PATH_SEPARATOR).split(getPath())); } - public DistanceAlgo getDistanceAlgo() { + public DistanceAlgo distanceAlgo() { if (params == null) { params = new HashMap<>(); diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java index cd2361bee..5ae030674 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java @@ -14,69 +14,23 @@ import static org.junit.Assert.assertNotNull; public class ConfigTest extends AbstractPaceTest { @Test - public void dedupConfigSerializationTest() throws IOException { + public void dedupConfigSerializationTest() { final DedupConfig cfgFromClasspath = DedupConfig.load(readFromClasspath("result.pace.conf.json")); + final String conf = cfgFromClasspath.toString(); + +// System.out.println("*****SERIALIZED*****"); +// System.out.println(conf); +// System.out.println("*****FROM CLASSPATH*****"); +// System.out.println(readFromClasspath("result.pace.conf.json")); + + final DedupConfig cfgFromSerialization = DedupConfig.load(conf); + + assertEquals(cfgFromClasspath.toString(), cfgFromSerialization.toString()); + assertNotNull(cfgFromClasspath); + assertNotNull(cfgFromSerialization); - String conf = "{ \n" + - "wf\" : { " + - " \"threshold\" : \"0.99\", " + - " \"run\" : \"001\", " + - " \"entityType\" : \"result\", " + - " \"orderField\" : \"title\", " + - " \"queueMaxSize\" : \"2000\"," + - " \"groupMaxSize\" : \"10\"," + - " \"slidingWindowSize\" : \"200\"," + - " \"rootBuilder\" : [ \"result\" ]," + - " \"includeChildren\" : \"true\" " + - " }," + - "\t\"pace\" : {\t\t\n" + - "\t\t\"clustering\" : [\n" + - "\t\t\t{ \"name\" : \"acronyms\", \"fields\" : [ \"title\" ], \"params\" : { \"max\" : \"1\", \"minLen\" : \"2\", \"maxLen\" : \"4\"} },\n" + - "\t\t\t{ \"name\" : \"ngrampairs\", \"fields\" : [ \"title\" ], \"params\" : { \"max\" : \"1\", \"ngramLen\" : \"3\"} },\n" + - "\t\t\t{ \"name\" : \"suffixprefix\", \"fields\" : [ \"title\" ], \"params\" : { \"max\" : \"1\", \"len\" : \"3\" } } \n" + - "\t\t],\t\t\n" + - "\t\t\"strictConditions\" : [\n" + - " \t\t\t{ \"name\" : \"exactMatch\", \"fields\" : [ \"pid\" ] }\n" + - " \t\t], \n" + - " \t\t\"conditions\" : [ \n" + - " \t\t\t{ \"name\" : \"yearMatch\", \"fields\" : [ \"dateofacceptance\" ] },\n" + - " \t\t\t{ \"name\" : \"titleVersionMatch\", \"fields\" : [ \"title\" ] },\n" + - " \t\t\t{ \"name\" : \"sizeMatch\", \"fields\" : [ \"authors\" ] } \n" + - " \t\t],\t\t\n" + - "\t\t\"model\" : [\n" + - "\t\t\t{ \"name\" : \"pid\", \"algo\" : \"Null\", \"type\" : \"String\", \"weight\" : \"0.0\", \"ignoreMissing\" : \"true\", \"path\" : \"pid[qualifier#classid = {doi}]/value\", \"overrideMatch\" : \"true\" }, \t\n" + - "\t\t\t{ \"name\" : \"title\", \"algo\" : \"JaroWinkler\", \"type\" : \"String\", \"weight\" : \"1.0\", \"ignoreMissing\" : \"false\", \"path\" : \"result/metadata/title[qualifier#classid = {main title}]/value\" },\n" + - "\t\t\t{ \"name\" : \"dateofacceptance\", \"algo\" : \"Null\", \"type\" : \"String\", \"weight\" : \"0.0\", \"ignoreMissing\" : \"true\", \"path\" : \"result/metadata/dateofacceptance/value\" } ,\n" + - "\t\t\t{ \"name\" : \"authors\", \"algo\" : \"Null\", \"type\" : \"List\", \"weight\" : \"0.0\", \"ignoreMissing\" : \"true\", \"path\" : \"result/author/metadata/fullname/value\" }\n" + - "\t\t],\n" + - "\t\t\"blacklists\" : {\n" + - "\t\t\t\"title\" : [\n" + - "\t\t\t\t\"^(Corpus Oral Dialectal \\\\(COD\\\\)\\\\.).*$\",\n" + - "\t\t\t\t\"^(Kiri Karl Morgensternile).*$\",\n" + - "\t\t\t\t\"^(\\\\[Eksliibris Aleksandr).*\\\\]$\",\n" + - "\t\t\t\t\"^(\\\\[Eksliibris Aleksandr).*$\",\n" + - "\t\t\t\t\"^(Eksliibris Aleksandr).*$\",\n" + - "\t\t\t\t\"^(Kiri A\\\\. de Vignolles).*$\",\n" + - "\t\t\t\t\"^(2 kirja Karl Morgensternile).*$\",\n" + - "\t\t\t\t\"^(Pirita kloostri idaosa arheoloogilised).*$\",\n" + - "\t\t\t\t\"^(Kiri tundmatule).*$\",\n" + - "\t\t\t\t\"^(Kiri Jenaer Allgemeine Literaturzeitung toimetusele).*$\",\n" + - "\t\t\t\t\"^(Eksliibris Nikolai Birukovile).*$\",\n" + - "\t\t\t\t\"^(Eksliibris Nikolai Issakovile).*$\",\n" + - "\t\t\t\t\"^(WHP Cruise Summary Information of section).*$\",\n" + - "\t\t\t\t\"^(Measurement of the top quark\\\\-pair production cross section with ATLAS in pp collisions at).*$\",\n" + - "\t\t\t\t\"^(Measurement of the spin\\\\-dependent structure function).*\"\n" + - "\t\t\t] } \t\t\n" + - "\t}\n" + - "\n" + - "}"; - - final DedupConfig cfgFromSerialization = DedupConfig.load(cfgFromClasspath.toString()); - String params = "\"params\":{\"limit\":-1,\"weight\":0.0}"; - //verify if the serialization produces the same result of the input json - assertEquals(cfgFromSerialization.toString().replaceAll("[\n\t\r ]", "").replaceAll("\"params\":null", params), cfgFromClasspath.toString().replaceAll("[\n\t\r ]", "")); } From e296f7a81c6c1e61004cf9a820fad98abcea146d Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Wed, 31 Oct 2018 10:49:11 +0100 Subject: [PATCH 019/449] added DiffPatchMatch utility. Resumed commented tests! --- .../eu/dnetlib/pace/util/DiffPatchMatch.java | 2471 +++++++++++++++++ 1 file changed, 2471 insertions(+) create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/util/DiffPatchMatch.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/DiffPatchMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/DiffPatchMatch.java new file mode 100644 index 000000000..fbbc9d77b --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/DiffPatchMatch.java @@ -0,0 +1,2471 @@ +package eu.dnetlib.pace.util; + +/* + * Diff Match and Patch + * Copyright 2018 The diff-match-patch Authors. + * https://github.com/google/diff-match-patch + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.net.URLEncoder; +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/* + * Functions for diff, match and patch. + * Computes the difference between two texts to create a patch. + * Applies the patch onto another text, allowing for errors. + * + * @author fraser@google.com (Neil Fraser) + */ + +/** + * Class containing the diff, match and patch methods. + * Also contains the behaviour settings. + */ +public class DiffPatchMatch { + + // Defaults. + // Set these on your diff_match_patch instance to override the defaults. + + /** + * Number of seconds to map a diff before giving up (0 for infinity). + */ + public float Diff_Timeout = 1.0f; + /** + * Cost of an empty edit operation in terms of edit characters. + */ + public short Diff_EditCost = 4; + /** + * At what point is no match declared (0.0 = perfection, 1.0 = very loose). + */ + public float Match_Threshold = 0.5f; + /** + * How far to search for a match (0 = exact location, 1000+ = broad match). + * A match this many characters away from the expected location will add + * 1.0 to the score (0.0 is a perfect match). + */ + public int Match_Distance = 1000; + /** + * When deleting a large block of text (over ~64 characters), how close do + * the contents have to be to match the expected contents. (0.0 = perfection, + * 1.0 = very loose). Note that Match_Threshold controls how closely the + * end points of a delete need to match. + */ + public float Patch_DeleteThreshold = 0.5f; + /** + * Chunk size for context length. + */ + public short Patch_Margin = 4; + + /** + * The number of bits in an int. + */ + private short Match_MaxBits = 32; + + /** + * Internal class for returning results from diff_linesToChars(). + * Other less paranoid languages just use a three-element array. + */ + protected static class LinesToCharsResult { + protected String chars1; + protected String chars2; + protected List lineArray; + + protected LinesToCharsResult(String chars1, String chars2, + List lineArray) { + this.chars1 = chars1; + this.chars2 = chars2; + this.lineArray = lineArray; + } + } + + + // DIFF FUNCTIONS + + + /** + * The data structure representing a diff is a Linked list of Diff objects: + * {Diff(Operation.DELETE, "Hello"), Diff(Operation.INSERT, "Goodbye"), + * Diff(Operation.EQUAL, " world.")} + * which means: delete "Hello", add "Goodbye" and keep " world." + */ + public enum Operation { + DELETE, INSERT, EQUAL + } + + /** + * Find the differences between two texts. + * Run a faster, slightly less optimal diff. + * This method allows the 'checklines' of diff_main() to be optional. + * Most of the time checklines is wanted, so default to true. + * @param text1 Old string to be diffed. + * @param text2 New string to be diffed. + * @return Linked List of Diff objects. + */ + public LinkedList diff_main(String text1, String text2) { + return diff_main(text1, text2, true); + } + + /** + * Find the differences between two texts. + * @param text1 Old string to be diffed. + * @param text2 New string to be diffed. + * @param checklines Speedup flag. If false, then don't run a + * line-level diff first to identify the changed areas. + * If true, then run a faster slightly less optimal diff. + * @return Linked List of Diff objects. + */ + public LinkedList diff_main(String text1, String text2, + boolean checklines) { + // Set a deadline by which time the diff must be complete. + long deadline; + if (Diff_Timeout <= 0) { + deadline = Long.MAX_VALUE; + } else { + deadline = System.currentTimeMillis() + (long) (Diff_Timeout * 1000); + } + return diff_main(text1, text2, checklines, deadline); + } + + /** + * Find the differences between two texts. Simplifies the problem by + * stripping any common prefix or suffix off the texts before diffing. + * @param text1 Old string to be diffed. + * @param text2 New string to be diffed. + * @param checklines Speedup flag. If false, then don't run a + * line-level diff first to identify the changed areas. + * If true, then run a faster slightly less optimal diff. + * @param deadline Time when the diff should be complete by. Used + * internally for recursive calls. Users should set DiffTimeout instead. + * @return Linked List of Diff objects. + */ + private LinkedList diff_main(String text1, String text2, + boolean checklines, long deadline) { + // Check for null inputs. + if (text1 == null || text2 == null) { + throw new IllegalArgumentException("Null inputs. (diff_main)"); + } + + // Check for equality (speedup). + LinkedList diffs; + if (text1.equals(text2)) { + diffs = new LinkedList(); + if (text1.length() != 0) { + diffs.add(new Diff(Operation.EQUAL, text1)); + } + return diffs; + } + + // Trim off common prefix (speedup). + int commonlength = diff_commonPrefix(text1, text2); + String commonprefix = text1.substring(0, commonlength); + text1 = text1.substring(commonlength); + text2 = text2.substring(commonlength); + + // Trim off common suffix (speedup). + commonlength = diff_commonSuffix(text1, text2); + String commonsuffix = text1.substring(text1.length() - commonlength); + text1 = text1.substring(0, text1.length() - commonlength); + text2 = text2.substring(0, text2.length() - commonlength); + + // Compute the diff on the middle block. + diffs = diff_compute(text1, text2, checklines, deadline); + + // Restore the prefix and suffix. + if (commonprefix.length() != 0) { + diffs.addFirst(new Diff(Operation.EQUAL, commonprefix)); + } + if (commonsuffix.length() != 0) { + diffs.addLast(new Diff(Operation.EQUAL, commonsuffix)); + } + + diff_cleanupMerge(diffs); + return diffs; + } + + /** + * Find the differences between two texts. Assumes that the texts do not + * have any common prefix or suffix. + * @param text1 Old string to be diffed. + * @param text2 New string to be diffed. + * @param checklines Speedup flag. If false, then don't run a + * line-level diff first to identify the changed areas. + * If true, then run a faster slightly less optimal diff. + * @param deadline Time when the diff should be complete by. + * @return Linked List of Diff objects. + */ + private LinkedList diff_compute(String text1, String text2, + boolean checklines, long deadline) { + LinkedList diffs = new LinkedList(); + + if (text1.length() == 0) { + // Just add some text (speedup). + diffs.add(new Diff(Operation.INSERT, text2)); + return diffs; + } + + if (text2.length() == 0) { + // Just delete some text (speedup). + diffs.add(new Diff(Operation.DELETE, text1)); + return diffs; + } + + String longtext = text1.length() > text2.length() ? text1 : text2; + String shorttext = text1.length() > text2.length() ? text2 : text1; + int i = longtext.indexOf(shorttext); + if (i != -1) { + // Shorter text is inside the longer text (speedup). + Operation op = (text1.length() > text2.length()) ? + Operation.DELETE : Operation.INSERT; + diffs.add(new Diff(op, longtext.substring(0, i))); + diffs.add(new Diff(Operation.EQUAL, shorttext)); + diffs.add(new Diff(op, longtext.substring(i + shorttext.length()))); + return diffs; + } + + if (shorttext.length() == 1) { + // Single character string. + // After the previous speedup, the character can't be an equality. + diffs.add(new Diff(Operation.DELETE, text1)); + diffs.add(new Diff(Operation.INSERT, text2)); + return diffs; + } + + // Check to see if the problem can be split in two. + String[] hm = diff_halfMatch(text1, text2); + if (hm != null) { + // A half-match was found, sort out the return data. + String text1_a = hm[0]; + String text1_b = hm[1]; + String text2_a = hm[2]; + String text2_b = hm[3]; + String mid_common = hm[4]; + // Send both pairs off for separate processing. + LinkedList diffs_a = diff_main(text1_a, text2_a, + checklines, deadline); + LinkedList diffs_b = diff_main(text1_b, text2_b, + checklines, deadline); + // Merge the results. + diffs = diffs_a; + diffs.add(new Diff(Operation.EQUAL, mid_common)); + diffs.addAll(diffs_b); + return diffs; + } + + if (checklines && text1.length() > 100 && text2.length() > 100) { + return diff_lineMode(text1, text2, deadline); + } + + return diff_bisect(text1, text2, deadline); + } + + /** + * Do a quick line-level diff on both strings, then rediff the parts for + * greater accuracy. + * This speedup can produce non-minimal diffs. + * @param text1 Old string to be diffed. + * @param text2 New string to be diffed. + * @param deadline Time when the diff should be complete by. + * @return Linked List of Diff objects. + */ + private LinkedList diff_lineMode(String text1, String text2, + long deadline) { + // Scan the text on a line-by-line basis first. + LinesToCharsResult a = diff_linesToChars(text1, text2); + text1 = a.chars1; + text2 = a.chars2; + List linearray = a.lineArray; + + LinkedList diffs = diff_main(text1, text2, false, deadline); + + // Convert the diff back to original text. + diff_charsToLines(diffs, linearray); + // Eliminate freak matches (e.g. blank lines) + diff_cleanupSemantic(diffs); + + // Rediff any replacement blocks, this time character-by-character. + // Add a dummy entry at the end. + diffs.add(new Diff(Operation.EQUAL, "")); + int count_delete = 0; + int count_insert = 0; + String text_delete = ""; + String text_insert = ""; + ListIterator pointer = diffs.listIterator(); + Diff thisDiff = pointer.next(); + while (thisDiff != null) { + switch (thisDiff.operation) { + case INSERT: + count_insert++; + text_insert += thisDiff.text; + break; + case DELETE: + count_delete++; + text_delete += thisDiff.text; + break; + case EQUAL: + // Upon reaching an equality, check for prior redundancies. + if (count_delete >= 1 && count_insert >= 1) { + // Delete the offending records and add the merged ones. + pointer.previous(); + for (int j = 0; j < count_delete + count_insert; j++) { + pointer.previous(); + pointer.remove(); + } + for (Diff subDiff : diff_main(text_delete, text_insert, false, + deadline)) { + pointer.add(subDiff); + } + } + count_insert = 0; + count_delete = 0; + text_delete = ""; + text_insert = ""; + break; + } + thisDiff = pointer.hasNext() ? pointer.next() : null; + } + diffs.removeLast(); // Remove the dummy entry at the end. + + return diffs; + } + + /** + * Find the 'middle snake' of a diff, split the problem in two + * and return the recursively constructed diff. + * See Myers 1986 paper: An O(ND) Difference Algorithm and Its Variations. + * @param text1 Old string to be diffed. + * @param text2 New string to be diffed. + * @param deadline Time at which to bail if not yet complete. + * @return LinkedList of Diff objects. + */ + protected LinkedList diff_bisect(String text1, String text2, + long deadline) { + // Cache the text lengths to prevent multiple calls. + int text1_length = text1.length(); + int text2_length = text2.length(); + int max_d = (text1_length + text2_length + 1) / 2; + int v_offset = max_d; + int v_length = 2 * max_d; + int[] v1 = new int[v_length]; + int[] v2 = new int[v_length]; + for (int x = 0; x < v_length; x++) { + v1[x] = -1; + v2[x] = -1; + } + v1[v_offset + 1] = 0; + v2[v_offset + 1] = 0; + int delta = text1_length - text2_length; + // If the total number of characters is odd, then the front path will + // collide with the reverse path. + boolean front = (delta % 2 != 0); + // Offsets for start and end of k loop. + // Prevents mapping of space beyond the grid. + int k1start = 0; + int k1end = 0; + int k2start = 0; + int k2end = 0; + for (int d = 0; d < max_d; d++) { + // Bail out if deadline is reached. + if (System.currentTimeMillis() > deadline) { + break; + } + + // Walk the front path one step. + for (int k1 = -d + k1start; k1 <= d - k1end; k1 += 2) { + int k1_offset = v_offset + k1; + int x1; + if (k1 == -d || (k1 != d && v1[k1_offset - 1] < v1[k1_offset + 1])) { + x1 = v1[k1_offset + 1]; + } else { + x1 = v1[k1_offset - 1] + 1; + } + int y1 = x1 - k1; + while (x1 < text1_length && y1 < text2_length + && text1.charAt(x1) == text2.charAt(y1)) { + x1++; + y1++; + } + v1[k1_offset] = x1; + if (x1 > text1_length) { + // Ran off the right of the graph. + k1end += 2; + } else if (y1 > text2_length) { + // Ran off the bottom of the graph. + k1start += 2; + } else if (front) { + int k2_offset = v_offset + delta - k1; + if (k2_offset >= 0 && k2_offset < v_length && v2[k2_offset] != -1) { + // Mirror x2 onto top-left coordinate system. + int x2 = text1_length - v2[k2_offset]; + if (x1 >= x2) { + // Overlap detected. + return diff_bisectSplit(text1, text2, x1, y1, deadline); + } + } + } + } + + // Walk the reverse path one step. + for (int k2 = -d + k2start; k2 <= d - k2end; k2 += 2) { + int k2_offset = v_offset + k2; + int x2; + if (k2 == -d || (k2 != d && v2[k2_offset - 1] < v2[k2_offset + 1])) { + x2 = v2[k2_offset + 1]; + } else { + x2 = v2[k2_offset - 1] + 1; + } + int y2 = x2 - k2; + while (x2 < text1_length && y2 < text2_length + && text1.charAt(text1_length - x2 - 1) + == text2.charAt(text2_length - y2 - 1)) { + x2++; + y2++; + } + v2[k2_offset] = x2; + if (x2 > text1_length) { + // Ran off the left of the graph. + k2end += 2; + } else if (y2 > text2_length) { + // Ran off the top of the graph. + k2start += 2; + } else if (!front) { + int k1_offset = v_offset + delta - k2; + if (k1_offset >= 0 && k1_offset < v_length && v1[k1_offset] != -1) { + int x1 = v1[k1_offset]; + int y1 = v_offset + x1 - k1_offset; + // Mirror x2 onto top-left coordinate system. + x2 = text1_length - x2; + if (x1 >= x2) { + // Overlap detected. + return diff_bisectSplit(text1, text2, x1, y1, deadline); + } + } + } + } + } + // Diff took too long and hit the deadline or + // number of diffs equals number of characters, no commonality at all. + LinkedList diffs = new LinkedList(); + diffs.add(new Diff(Operation.DELETE, text1)); + diffs.add(new Diff(Operation.INSERT, text2)); + return diffs; + } + + /** + * Given the location of the 'middle snake', split the diff in two parts + * and recurse. + * @param text1 Old string to be diffed. + * @param text2 New string to be diffed. + * @param x Index of split point in text1. + * @param y Index of split point in text2. + * @param deadline Time at which to bail if not yet complete. + * @return LinkedList of Diff objects. + */ + private LinkedList diff_bisectSplit(String text1, String text2, + int x, int y, long deadline) { + String text1a = text1.substring(0, x); + String text2a = text2.substring(0, y); + String text1b = text1.substring(x); + String text2b = text2.substring(y); + + // Compute both diffs serially. + LinkedList diffs = diff_main(text1a, text2a, false, deadline); + LinkedList diffsb = diff_main(text1b, text2b, false, deadline); + + diffs.addAll(diffsb); + return diffs; + } + + /** + * Split two texts into a list of strings. Reduce the texts to a string of + * hashes where each Unicode character represents one line. + * @param text1 First string. + * @param text2 Second string. + * @return An object containing the encoded text1, the encoded text2 and + * the List of unique strings. The zeroth element of the List of + * unique strings is intentionally blank. + */ + protected LinesToCharsResult diff_linesToChars(String text1, String text2) { + List lineArray = new ArrayList(); + Map lineHash = new HashMap(); + // e.g. linearray[4] == "Hello\n" + // e.g. linehash.get("Hello\n") == 4 + + // "\x00" is a valid character, but various debuggers don't like it. + // So we'll insert a junk entry to avoid generating a null character. + lineArray.add(""); + + // Allocate 2/3rds of the space for text1, the rest for text2. + String chars1 = diff_linesToCharsMunge(text1, lineArray, lineHash, 40000); + String chars2 = diff_linesToCharsMunge(text2, lineArray, lineHash, 65535); + return new LinesToCharsResult(chars1, chars2, lineArray); + } + + /** + * Split a text into a list of strings. Reduce the texts to a string of + * hashes where each Unicode character represents one line. + * @param text String to encode. + * @param lineArray List of unique strings. + * @param lineHash Map of strings to indices. + * @param maxLines Maximum length of lineArray. + * @return Encoded string. + */ + private String diff_linesToCharsMunge(String text, List lineArray, + Map lineHash, int maxLines) { + int lineStart = 0; + int lineEnd = -1; + String line; + StringBuilder chars = new StringBuilder(); + // Walk the text, pulling out a substring for each line. + // text.split('\n') would would temporarily double our memory footprint. + // Modifying text would create many large strings to garbage collect. + while (lineEnd < text.length() - 1) { + lineEnd = text.indexOf('\n', lineStart); + if (lineEnd == -1) { + lineEnd = text.length() - 1; + } + line = text.substring(lineStart, lineEnd + 1); + + if (lineHash.containsKey(line)) { + chars.append(String.valueOf((char) (int) lineHash.get(line))); + } else { + if (lineArray.size() == maxLines) { + // Bail out at 65535 because + // String.valueOf((char) 65536).equals(String.valueOf(((char) 0))) + line = text.substring(lineStart); + lineEnd = text.length(); + } + lineArray.add(line); + lineHash.put(line, lineArray.size() - 1); + chars.append(String.valueOf((char) (lineArray.size() - 1))); + } + lineStart = lineEnd + 1; + } + return chars.toString(); + } + + /** + * Rehydrate the text in a diff from a string of line hashes to real lines of + * text. + * @param diffs List of Diff objects. + * @param lineArray List of unique strings. + */ + protected void diff_charsToLines(List diffs, + List lineArray) { + StringBuilder text; + for (Diff diff : diffs) { + text = new StringBuilder(); + for (int j = 0; j < diff.text.length(); j++) { + text.append(lineArray.get(diff.text.charAt(j))); + } + diff.text = text.toString(); + } + } + + /** + * Determine the common prefix of two strings + * @param text1 First string. + * @param text2 Second string. + * @return The number of characters common to the start of each string. + */ + public int diff_commonPrefix(String text1, String text2) { + // Performance analysis: https://neil.fraser.name/news/2007/10/09/ + int n = Math.min(text1.length(), text2.length()); + for (int i = 0; i < n; i++) { + if (text1.charAt(i) != text2.charAt(i)) { + return i; + } + } + return n; + } + + /** + * Determine the common suffix of two strings + * @param text1 First string. + * @param text2 Second string. + * @return The number of characters common to the end of each string. + */ + public int diff_commonSuffix(String text1, String text2) { + // Performance analysis: https://neil.fraser.name/news/2007/10/09/ + int text1_length = text1.length(); + int text2_length = text2.length(); + int n = Math.min(text1_length, text2_length); + for (int i = 1; i <= n; i++) { + if (text1.charAt(text1_length - i) != text2.charAt(text2_length - i)) { + return i - 1; + } + } + return n; + } + + /** + * Determine if the suffix of one string is the prefix of another. + * @param text1 First string. + * @param text2 Second string. + * @return The number of characters common to the end of the first + * string and the start of the second string. + */ + protected int diff_commonOverlap(String text1, String text2) { + // Cache the text lengths to prevent multiple calls. + int text1_length = text1.length(); + int text2_length = text2.length(); + // Eliminate the null case. + if (text1_length == 0 || text2_length == 0) { + return 0; + } + // Truncate the longer string. + if (text1_length > text2_length) { + text1 = text1.substring(text1_length - text2_length); + } else if (text1_length < text2_length) { + text2 = text2.substring(0, text1_length); + } + int text_length = Math.min(text1_length, text2_length); + // Quick check for the worst case. + if (text1.equals(text2)) { + return text_length; + } + + // Start by looking for a single character match + // and increase length until no match is found. + // Performance analysis: https://neil.fraser.name/news/2010/11/04/ + int best = 0; + int length = 1; + while (true) { + String pattern = text1.substring(text_length - length); + int found = text2.indexOf(pattern); + if (found == -1) { + return best; + } + length += found; + if (found == 0 || text1.substring(text_length - length).equals( + text2.substring(0, length))) { + best = length; + length++; + } + } + } + + /** + * Do the two texts share a substring which is at least half the length of + * the longer text? + * This speedup can produce non-minimal diffs. + * @param text1 First string. + * @param text2 Second string. + * @return Five element String array, containing the prefix of text1, the + * suffix of text1, the prefix of text2, the suffix of text2 and the + * common middle. Or null if there was no match. + */ + protected String[] diff_halfMatch(String text1, String text2) { + if (Diff_Timeout <= 0) { + // Don't risk returning a non-optimal diff if we have unlimited time. + return null; + } + String longtext = text1.length() > text2.length() ? text1 : text2; + String shorttext = text1.length() > text2.length() ? text2 : text1; + if (longtext.length() < 4 || shorttext.length() * 2 < longtext.length()) { + return null; // Pointless. + } + + // First check if the second quarter is the seed for a half-match. + String[] hm1 = diff_halfMatchI(longtext, shorttext, + (longtext.length() + 3) / 4); + // Check again based on the third quarter. + String[] hm2 = diff_halfMatchI(longtext, shorttext, + (longtext.length() + 1) / 2); + String[] hm; + if (hm1 == null && hm2 == null) { + return null; + } else if (hm2 == null) { + hm = hm1; + } else if (hm1 == null) { + hm = hm2; + } else { + // Both matched. Select the longest. + hm = hm1[4].length() > hm2[4].length() ? hm1 : hm2; + } + + // A half-match was found, sort out the return data. + if (text1.length() > text2.length()) { + return hm; + //return new String[]{hm[0], hm[1], hm[2], hm[3], hm[4]}; + } else { + return new String[]{hm[2], hm[3], hm[0], hm[1], hm[4]}; + } + } + + /** + * Does a substring of shorttext exist within longtext such that the + * substring is at least half the length of longtext? + * @param longtext Longer string. + * @param shorttext Shorter string. + * @param i Start index of quarter length substring within longtext. + * @return Five element String array, containing the prefix of longtext, the + * suffix of longtext, the prefix of shorttext, the suffix of shorttext + * and the common middle. Or null if there was no match. + */ + private String[] diff_halfMatchI(String longtext, String shorttext, int i) { + // Start with a 1/4 length substring at position i as a seed. + String seed = longtext.substring(i, i + longtext.length() / 4); + int j = -1; + String best_common = ""; + String best_longtext_a = "", best_longtext_b = ""; + String best_shorttext_a = "", best_shorttext_b = ""; + while ((j = shorttext.indexOf(seed, j + 1)) != -1) { + int prefixLength = diff_commonPrefix(longtext.substring(i), + shorttext.substring(j)); + int suffixLength = diff_commonSuffix(longtext.substring(0, i), + shorttext.substring(0, j)); + if (best_common.length() < suffixLength + prefixLength) { + best_common = shorttext.substring(j - suffixLength, j) + + shorttext.substring(j, j + prefixLength); + best_longtext_a = longtext.substring(0, i - suffixLength); + best_longtext_b = longtext.substring(i + prefixLength); + best_shorttext_a = shorttext.substring(0, j - suffixLength); + best_shorttext_b = shorttext.substring(j + prefixLength); + } + } + if (best_common.length() * 2 >= longtext.length()) { + return new String[]{best_longtext_a, best_longtext_b, + best_shorttext_a, best_shorttext_b, best_common}; + } else { + return null; + } + } + + /** + * Reduce the number of edits by eliminating semantically trivial equalities. + * @param diffs LinkedList of Diff objects. + */ + public void diff_cleanupSemantic(LinkedList diffs) { + if (diffs.isEmpty()) { + return; + } + boolean changes = false; + Deque equalities = new ArrayDeque(); // Double-ended queue of qualities. + String lastEquality = null; // Always equal to equalities.peek().text + ListIterator pointer = diffs.listIterator(); + // Number of characters that changed prior to the equality. + int length_insertions1 = 0; + int length_deletions1 = 0; + // Number of characters that changed after the equality. + int length_insertions2 = 0; + int length_deletions2 = 0; + Diff thisDiff = pointer.next(); + while (thisDiff != null) { + if (thisDiff.operation == Operation.EQUAL) { + // Equality found. + equalities.push(thisDiff); + length_insertions1 = length_insertions2; + length_deletions1 = length_deletions2; + length_insertions2 = 0; + length_deletions2 = 0; + lastEquality = thisDiff.text; + } else { + // An insertion or deletion. + if (thisDiff.operation == Operation.INSERT) { + length_insertions2 += thisDiff.text.length(); + } else { + length_deletions2 += thisDiff.text.length(); + } + // Eliminate an equality that is smaller or equal to the edits on both + // sides of it. + if (lastEquality != null && (lastEquality.length() + <= Math.max(length_insertions1, length_deletions1)) + && (lastEquality.length() + <= Math.max(length_insertions2, length_deletions2))) { + //System.out.println("Splitting: '" + lastEquality + "'"); + // Walk back to offending equality. + while (thisDiff != equalities.peek()) { + thisDiff = pointer.previous(); + } + pointer.next(); + + // Replace equality with a delete. + pointer.set(new Diff(Operation.DELETE, lastEquality)); + // Insert a corresponding an insert. + pointer.add(new Diff(Operation.INSERT, lastEquality)); + + equalities.pop(); // Throw away the equality we just deleted. + if (!equalities.isEmpty()) { + // Throw away the previous equality (it needs to be reevaluated). + equalities.pop(); + } + if (equalities.isEmpty()) { + // There are no previous equalities, walk back to the start. + while (pointer.hasPrevious()) { + pointer.previous(); + } + } else { + // There is a safe equality we can fall back to. + thisDiff = equalities.peek(); + while (thisDiff != pointer.previous()) { + // Intentionally empty loop. + } + } + + length_insertions1 = 0; // Reset the counters. + length_insertions2 = 0; + length_deletions1 = 0; + length_deletions2 = 0; + lastEquality = null; + changes = true; + } + } + thisDiff = pointer.hasNext() ? pointer.next() : null; + } + + // Normalize the diff. + if (changes) { + diff_cleanupMerge(diffs); + } + diff_cleanupSemanticLossless(diffs); + + // Find any overlaps between deletions and insertions. + // e.g: abcxxxxxxdef + // -> abcxxxdef + // e.g: xxxabcdefxxx + // -> defxxxabc + // Only extract an overlap if it is as big as the edit ahead or behind it. + pointer = diffs.listIterator(); + Diff prevDiff = null; + thisDiff = null; + if (pointer.hasNext()) { + prevDiff = pointer.next(); + if (pointer.hasNext()) { + thisDiff = pointer.next(); + } + } + while (thisDiff != null) { + if (prevDiff.operation == Operation.DELETE && + thisDiff.operation == Operation.INSERT) { + String deletion = prevDiff.text; + String insertion = thisDiff.text; + int overlap_length1 = this.diff_commonOverlap(deletion, insertion); + int overlap_length2 = this.diff_commonOverlap(insertion, deletion); + if (overlap_length1 >= overlap_length2) { + if (overlap_length1 >= deletion.length() / 2.0 || + overlap_length1 >= insertion.length() / 2.0) { + // Overlap found. Insert an equality and trim the surrounding edits. + pointer.previous(); + pointer.add(new Diff(Operation.EQUAL, + insertion.substring(0, overlap_length1))); + prevDiff.text = + deletion.substring(0, deletion.length() - overlap_length1); + thisDiff.text = insertion.substring(overlap_length1); + // pointer.add inserts the element before the cursor, so there is + // no need to step past the new element. + } + } else { + if (overlap_length2 >= deletion.length() / 2.0 || + overlap_length2 >= insertion.length() / 2.0) { + // Reverse overlap found. + // Insert an equality and swap and trim the surrounding edits. + pointer.previous(); + pointer.add(new Diff(Operation.EQUAL, + deletion.substring(0, overlap_length2))); + prevDiff.operation = Operation.INSERT; + prevDiff.text = + insertion.substring(0, insertion.length() - overlap_length2); + thisDiff.operation = Operation.DELETE; + thisDiff.text = deletion.substring(overlap_length2); + // pointer.add inserts the element before the cursor, so there is + // no need to step past the new element. + } + } + thisDiff = pointer.hasNext() ? pointer.next() : null; + } + prevDiff = thisDiff; + thisDiff = pointer.hasNext() ? pointer.next() : null; + } + } + + /** + * Look for single edits surrounded on both sides by equalities + * which can be shifted sideways to align the edit to a word boundary. + * e.g: The cat came. -> The cat came. + * @param diffs LinkedList of Diff objects. + */ + public void diff_cleanupSemanticLossless(LinkedList diffs) { + String equality1, edit, equality2; + String commonString; + int commonOffset; + int score, bestScore; + String bestEquality1, bestEdit, bestEquality2; + // Create a new iterator at the start. + ListIterator pointer = diffs.listIterator(); + Diff prevDiff = pointer.hasNext() ? pointer.next() : null; + Diff thisDiff = pointer.hasNext() ? pointer.next() : null; + Diff nextDiff = pointer.hasNext() ? pointer.next() : null; + // Intentionally ignore the first and last element (don't need checking). + while (nextDiff != null) { + if (prevDiff.operation == Operation.EQUAL && + nextDiff.operation == Operation.EQUAL) { + // This is a single edit surrounded by equalities. + equality1 = prevDiff.text; + edit = thisDiff.text; + equality2 = nextDiff.text; + + // First, shift the edit as far left as possible. + commonOffset = diff_commonSuffix(equality1, edit); + if (commonOffset != 0) { + commonString = edit.substring(edit.length() - commonOffset); + equality1 = equality1.substring(0, equality1.length() - commonOffset); + edit = commonString + edit.substring(0, edit.length() - commonOffset); + equality2 = commonString + equality2; + } + + // Second, step character by character right, looking for the best fit. + bestEquality1 = equality1; + bestEdit = edit; + bestEquality2 = equality2; + bestScore = diff_cleanupSemanticScore(equality1, edit) + + diff_cleanupSemanticScore(edit, equality2); + while (edit.length() != 0 && equality2.length() != 0 + && edit.charAt(0) == equality2.charAt(0)) { + equality1 += edit.charAt(0); + edit = edit.substring(1) + equality2.charAt(0); + equality2 = equality2.substring(1); + score = diff_cleanupSemanticScore(equality1, edit) + + diff_cleanupSemanticScore(edit, equality2); + // The >= encourages trailing rather than leading whitespace on edits. + if (score >= bestScore) { + bestScore = score; + bestEquality1 = equality1; + bestEdit = edit; + bestEquality2 = equality2; + } + } + + if (!prevDiff.text.equals(bestEquality1)) { + // We have an improvement, save it back to the diff. + if (bestEquality1.length() != 0) { + prevDiff.text = bestEquality1; + } else { + pointer.previous(); // Walk past nextDiff. + pointer.previous(); // Walk past thisDiff. + pointer.previous(); // Walk past prevDiff. + pointer.remove(); // Delete prevDiff. + pointer.next(); // Walk past thisDiff. + pointer.next(); // Walk past nextDiff. + } + thisDiff.text = bestEdit; + if (bestEquality2.length() != 0) { + nextDiff.text = bestEquality2; + } else { + pointer.remove(); // Delete nextDiff. + nextDiff = thisDiff; + thisDiff = prevDiff; + } + } + } + prevDiff = thisDiff; + thisDiff = nextDiff; + nextDiff = pointer.hasNext() ? pointer.next() : null; + } + } + + /** + * Given two strings, compute a score representing whether the internal + * boundary falls on logical boundaries. + * Scores range from 6 (best) to 0 (worst). + * @param one First string. + * @param two Second string. + * @return The score. + */ + private int diff_cleanupSemanticScore(String one, String two) { + if (one.length() == 0 || two.length() == 0) { + // Edges are the best. + return 6; + } + + // Each port of this function behaves slightly differently due to + // subtle differences in each language's definition of things like + // 'whitespace'. Since this function's purpose is largely cosmetic, + // the choice has been made to use each language's native features + // rather than force total conformity. + char char1 = one.charAt(one.length() - 1); + char char2 = two.charAt(0); + boolean nonAlphaNumeric1 = !Character.isLetterOrDigit(char1); + boolean nonAlphaNumeric2 = !Character.isLetterOrDigit(char2); + boolean whitespace1 = nonAlphaNumeric1 && Character.isWhitespace(char1); + boolean whitespace2 = nonAlphaNumeric2 && Character.isWhitespace(char2); + boolean lineBreak1 = whitespace1 + && Character.getType(char1) == Character.CONTROL; + boolean lineBreak2 = whitespace2 + && Character.getType(char2) == Character.CONTROL; + boolean blankLine1 = lineBreak1 && BLANKLINEEND.matcher(one).find(); + boolean blankLine2 = lineBreak2 && BLANKLINESTART.matcher(two).find(); + + if (blankLine1 || blankLine2) { + // Five points for blank lines. + return 5; + } else if (lineBreak1 || lineBreak2) { + // Four points for line breaks. + return 4; + } else if (nonAlphaNumeric1 && !whitespace1 && whitespace2) { + // Three points for end of sentences. + return 3; + } else if (whitespace1 || whitespace2) { + // Two points for whitespace. + return 2; + } else if (nonAlphaNumeric1 || nonAlphaNumeric2) { + // One point for non-alphanumeric. + return 1; + } + return 0; + } + + // Define some regex patterns for matching boundaries. + private Pattern BLANKLINEEND + = Pattern.compile("\\n\\r?\\n\\Z", Pattern.DOTALL); + private Pattern BLANKLINESTART + = Pattern.compile("\\A\\r?\\n\\r?\\n", Pattern.DOTALL); + + /** + * Reduce the number of edits by eliminating operationally trivial equalities. + * @param diffs LinkedList of Diff objects. + */ + public void diff_cleanupEfficiency(LinkedList diffs) { + if (diffs.isEmpty()) { + return; + } + boolean changes = false; + Deque equalities = new ArrayDeque(); // Double-ended queue of equalities. + String lastEquality = null; // Always equal to equalities.peek().text + ListIterator pointer = diffs.listIterator(); + // Is there an insertion operation before the last equality. + boolean pre_ins = false; + // Is there a deletion operation before the last equality. + boolean pre_del = false; + // Is there an insertion operation after the last equality. + boolean post_ins = false; + // Is there a deletion operation after the last equality. + boolean post_del = false; + Diff thisDiff = pointer.next(); + Diff safeDiff = thisDiff; // The last Diff that is known to be unsplittable. + while (thisDiff != null) { + if (thisDiff.operation == Operation.EQUAL) { + // Equality found. + if (thisDiff.text.length() < Diff_EditCost && (post_ins || post_del)) { + // Candidate found. + equalities.push(thisDiff); + pre_ins = post_ins; + pre_del = post_del; + lastEquality = thisDiff.text; + } else { + // Not a candidate, and can never become one. + equalities.clear(); + lastEquality = null; + safeDiff = thisDiff; + } + post_ins = post_del = false; + } else { + // An insertion or deletion. + if (thisDiff.operation == Operation.DELETE) { + post_del = true; + } else { + post_ins = true; + } + /* + * Five types to be split: + * ABXYCD + * AXCD + * ABXC + * AXCD + * ABXC + */ + if (lastEquality != null + && ((pre_ins && pre_del && post_ins && post_del) + || ((lastEquality.length() < Diff_EditCost / 2) + && ((pre_ins ? 1 : 0) + (pre_del ? 1 : 0) + + (post_ins ? 1 : 0) + (post_del ? 1 : 0)) == 3))) { + //System.out.println("Splitting: '" + lastEquality + "'"); + // Walk back to offending equality. + while (thisDiff != equalities.peek()) { + thisDiff = pointer.previous(); + } + pointer.next(); + + // Replace equality with a delete. + pointer.set(new Diff(Operation.DELETE, lastEquality)); + // Insert a corresponding an insert. + pointer.add(thisDiff = new Diff(Operation.INSERT, lastEquality)); + + equalities.pop(); // Throw away the equality we just deleted. + lastEquality = null; + if (pre_ins && pre_del) { + // No changes made which could affect previous entry, keep going. + post_ins = post_del = true; + equalities.clear(); + safeDiff = thisDiff; + } else { + if (!equalities.isEmpty()) { + // Throw away the previous equality (it needs to be reevaluated). + equalities.pop(); + } + if (equalities.isEmpty()) { + // There are no previous questionable equalities, + // walk back to the last known safe diff. + thisDiff = safeDiff; + } else { + // There is an equality we can fall back to. + thisDiff = equalities.peek(); + } + while (thisDiff != pointer.previous()) { + // Intentionally empty loop. + } + post_ins = post_del = false; + } + + changes = true; + } + } + thisDiff = pointer.hasNext() ? pointer.next() : null; + } + + if (changes) { + diff_cleanupMerge(diffs); + } + } + + /** + * Reorder and merge like edit sections. Merge equalities. + * Any edit section can move as long as it doesn't cross an equality. + * @param diffs LinkedList of Diff objects. + */ + public void diff_cleanupMerge(LinkedList diffs) { + diffs.add(new Diff(Operation.EQUAL, "")); // Add a dummy entry at the end. + ListIterator pointer = diffs.listIterator(); + int count_delete = 0; + int count_insert = 0; + String text_delete = ""; + String text_insert = ""; + Diff thisDiff = pointer.next(); + Diff prevEqual = null; + int commonlength; + while (thisDiff != null) { + switch (thisDiff.operation) { + case INSERT: + count_insert++; + text_insert += thisDiff.text; + prevEqual = null; + break; + case DELETE: + count_delete++; + text_delete += thisDiff.text; + prevEqual = null; + break; + case EQUAL: + if (count_delete + count_insert > 1) { + boolean both_types = count_delete != 0 && count_insert != 0; + // Delete the offending records. + pointer.previous(); // Reverse direction. + while (count_delete-- > 0) { + pointer.previous(); + pointer.remove(); + } + while (count_insert-- > 0) { + pointer.previous(); + pointer.remove(); + } + if (both_types) { + // Factor out any common prefixies. + commonlength = diff_commonPrefix(text_insert, text_delete); + if (commonlength != 0) { + if (pointer.hasPrevious()) { + thisDiff = pointer.previous(); + assert thisDiff.operation == Operation.EQUAL + : "Previous diff should have been an equality."; + thisDiff.text += text_insert.substring(0, commonlength); + pointer.next(); + } else { + pointer.add(new Diff(Operation.EQUAL, + text_insert.substring(0, commonlength))); + } + text_insert = text_insert.substring(commonlength); + text_delete = text_delete.substring(commonlength); + } + // Factor out any common suffixies. + commonlength = diff_commonSuffix(text_insert, text_delete); + if (commonlength != 0) { + thisDiff = pointer.next(); + thisDiff.text = text_insert.substring(text_insert.length() + - commonlength) + thisDiff.text; + text_insert = text_insert.substring(0, text_insert.length() + - commonlength); + text_delete = text_delete.substring(0, text_delete.length() + - commonlength); + pointer.previous(); + } + } + // Insert the merged records. + if (text_delete.length() != 0) { + pointer.add(new Diff(Operation.DELETE, text_delete)); + } + if (text_insert.length() != 0) { + pointer.add(new Diff(Operation.INSERT, text_insert)); + } + // Step forward to the equality. + thisDiff = pointer.hasNext() ? pointer.next() : null; + } else if (prevEqual != null) { + // Merge this equality with the previous one. + prevEqual.text += thisDiff.text; + pointer.remove(); + thisDiff = pointer.previous(); + pointer.next(); // Forward direction + } + count_insert = 0; + count_delete = 0; + text_delete = ""; + text_insert = ""; + prevEqual = thisDiff; + break; + } + thisDiff = pointer.hasNext() ? pointer.next() : null; + } + if (diffs.getLast().text.length() == 0) { + diffs.removeLast(); // Remove the dummy entry at the end. + } + + /* + * Second pass: look for single edits surrounded on both sides by equalities + * which can be shifted sideways to eliminate an equality. + * e.g: ABAC -> ABAC + */ + boolean changes = false; + // Create a new iterator at the start. + // (As opposed to walking the current one back.) + pointer = diffs.listIterator(); + Diff prevDiff = pointer.hasNext() ? pointer.next() : null; + thisDiff = pointer.hasNext() ? pointer.next() : null; + Diff nextDiff = pointer.hasNext() ? pointer.next() : null; + // Intentionally ignore the first and last element (don't need checking). + while (nextDiff != null) { + if (prevDiff.operation == Operation.EQUAL && + nextDiff.operation == Operation.EQUAL) { + // This is a single edit surrounded by equalities. + if (thisDiff.text.endsWith(prevDiff.text)) { + // Shift the edit over the previous equality. + thisDiff.text = prevDiff.text + + thisDiff.text.substring(0, thisDiff.text.length() + - prevDiff.text.length()); + nextDiff.text = prevDiff.text + nextDiff.text; + pointer.previous(); // Walk past nextDiff. + pointer.previous(); // Walk past thisDiff. + pointer.previous(); // Walk past prevDiff. + pointer.remove(); // Delete prevDiff. + pointer.next(); // Walk past thisDiff. + thisDiff = pointer.next(); // Walk past nextDiff. + nextDiff = pointer.hasNext() ? pointer.next() : null; + changes = true; + } else if (thisDiff.text.startsWith(nextDiff.text)) { + // Shift the edit over the next equality. + prevDiff.text += nextDiff.text; + thisDiff.text = thisDiff.text.substring(nextDiff.text.length()) + + nextDiff.text; + pointer.remove(); // Delete nextDiff. + nextDiff = pointer.hasNext() ? pointer.next() : null; + changes = true; + } + } + prevDiff = thisDiff; + thisDiff = nextDiff; + nextDiff = pointer.hasNext() ? pointer.next() : null; + } + // If shifts were made, the diff needs reordering and another shift sweep. + if (changes) { + diff_cleanupMerge(diffs); + } + } + + /** + * loc is a location in text1, compute and return the equivalent location in + * text2. + * e.g. "The cat" vs "The big cat", 1->1, 5->8 + * @param diffs List of Diff objects. + * @param loc Location within text1. + * @return Location within text2. + */ + public int diff_xIndex(List diffs, int loc) { + int chars1 = 0; + int chars2 = 0; + int last_chars1 = 0; + int last_chars2 = 0; + Diff lastDiff = null; + for (Diff aDiff : diffs) { + if (aDiff.operation != Operation.INSERT) { + // Equality or deletion. + chars1 += aDiff.text.length(); + } + if (aDiff.operation != Operation.DELETE) { + // Equality or insertion. + chars2 += aDiff.text.length(); + } + if (chars1 > loc) { + // Overshot the location. + lastDiff = aDiff; + break; + } + last_chars1 = chars1; + last_chars2 = chars2; + } + if (lastDiff != null && lastDiff.operation == Operation.DELETE) { + // The location was deleted. + return last_chars2; + } + // Add the remaining character length. + return last_chars2 + (loc - last_chars1); + } + + /** + * Convert a Diff list into a pretty HTML report. + * @param diffs List of Diff objects. + * @return HTML representation. + */ + public String diff_prettyHtml(List diffs) { + StringBuilder html = new StringBuilder(); + for (Diff aDiff : diffs) { + String text = aDiff.text.replace("&", "&").replace("<", "<") + .replace(">", ">").replace("\n", "¶
"); + switch (aDiff.operation) { + case INSERT: + html.append("").append(text) + .append(""); + break; + case DELETE: + html.append("").append(text) + .append(""); + break; + case EQUAL: + html.append("").append(text).append(""); + break; + } + } + return html.toString(); + } + + /** + * Compute and return the source text (all equalities and deletions). + * @param diffs List of Diff objects. + * @return Source text. + */ + public String diff_text1(List diffs) { + StringBuilder text = new StringBuilder(); + for (Diff aDiff : diffs) { + if (aDiff.operation != Operation.INSERT) { + text.append(aDiff.text); + } + } + return text.toString(); + } + + /** + * Compute and return the destination text (all equalities and insertions). + * @param diffs List of Diff objects. + * @return Destination text. + */ + public String diff_text2(List diffs) { + StringBuilder text = new StringBuilder(); + for (Diff aDiff : diffs) { + if (aDiff.operation != Operation.DELETE) { + text.append(aDiff.text); + } + } + return text.toString(); + } + + /** + * Compute the Levenshtein distance; the number of inserted, deleted or + * substituted characters. + * @param diffs List of Diff objects. + * @return Number of changes. + */ + public int diff_levenshtein(List diffs) { + int levenshtein = 0; + int insertions = 0; + int deletions = 0; + for (Diff aDiff : diffs) { + switch (aDiff.operation) { + case INSERT: + insertions += aDiff.text.length(); + break; + case DELETE: + deletions += aDiff.text.length(); + break; + case EQUAL: + // A deletion and an insertion is one substitution. + levenshtein += Math.max(insertions, deletions); + insertions = 0; + deletions = 0; + break; + } + } + levenshtein += Math.max(insertions, deletions); + return levenshtein; + } + + /** + * Crush the diff into an encoded string which describes the operations + * required to transform text1 into text2. + * E.g. =3\t-2\t+ing -> Keep 3 chars, delete 2 chars, insert 'ing'. + * Operations are tab-separated. Inserted text is escaped using %xx notation. + * @param diffs List of Diff objects. + * @return Delta text. + */ + public String diff_toDelta(List diffs) { + StringBuilder text = new StringBuilder(); + for (Diff aDiff : diffs) { + switch (aDiff.operation) { + case INSERT: + try { + text.append("+").append(URLEncoder.encode(aDiff.text, "UTF-8") + .replace('+', ' ')).append("\t"); + } catch (UnsupportedEncodingException e) { + // Not likely on modern system. + throw new Error("This system does not support UTF-8.", e); + } + break; + case DELETE: + text.append("-").append(aDiff.text.length()).append("\t"); + break; + case EQUAL: + text.append("=").append(aDiff.text.length()).append("\t"); + break; + } + } + String delta = text.toString(); + if (delta.length() != 0) { + // Strip off trailing tab character. + delta = delta.substring(0, delta.length() - 1); + delta = unescapeForEncodeUriCompatability(delta); + } + return delta; + } + + /** + * Given the original text1, and an encoded string which describes the + * operations required to transform text1 into text2, compute the full diff. + * @param text1 Source string for the diff. + * @param delta Delta text. + * @return Array of Diff objects or null if invalid. + * @throws IllegalArgumentException If invalid input. + */ + public LinkedList diff_fromDelta(String text1, String delta) + throws IllegalArgumentException { + LinkedList diffs = new LinkedList(); + int pointer = 0; // Cursor in text1 + String[] tokens = delta.split("\t"); + for (String token : tokens) { + if (token.length() == 0) { + // Blank tokens are ok (from a trailing \t). + continue; + } + // Each token begins with a one character parameter which specifies the + // operation of this token (delete, insert, equality). + String param = token.substring(1); + switch (token.charAt(0)) { + case '+': + // decode would change all "+" to " " + param = param.replace("+", "%2B"); + try { + param = URLDecoder.decode(param, "UTF-8"); + } catch (UnsupportedEncodingException e) { + // Not likely on modern system. + throw new Error("This system does not support UTF-8.", e); + } catch (IllegalArgumentException e) { + // Malformed URI sequence. + throw new IllegalArgumentException( + "Illegal escape in diff_fromDelta: " + param, e); + } + diffs.add(new Diff(Operation.INSERT, param)); + break; + case '-': + // Fall through. + case '=': + int n; + try { + n = Integer.parseInt(param); + } catch (NumberFormatException e) { + throw new IllegalArgumentException( + "Invalid number in diff_fromDelta: " + param, e); + } + if (n < 0) { + throw new IllegalArgumentException( + "Negative number in diff_fromDelta: " + param); + } + String text; + try { + text = text1.substring(pointer, pointer += n); + } catch (StringIndexOutOfBoundsException e) { + throw new IllegalArgumentException("Delta length (" + pointer + + ") larger than source text length (" + text1.length() + + ").", e); + } + if (token.charAt(0) == '=') { + diffs.add(new Diff(Operation.EQUAL, text)); + } else { + diffs.add(new Diff(Operation.DELETE, text)); + } + break; + default: + // Anything else is an error. + throw new IllegalArgumentException( + "Invalid diff operation in diff_fromDelta: " + token.charAt(0)); + } + } + if (pointer != text1.length()) { + throw new IllegalArgumentException("Delta length (" + pointer + + ") smaller than source text length (" + text1.length() + ")."); + } + return diffs; + } + + + // MATCH FUNCTIONS + + + /** + * Locate the best instance of 'pattern' in 'text' near 'loc'. + * Returns -1 if no match found. + * @param text The text to search. + * @param pattern The pattern to search for. + * @param loc The location to search around. + * @return Best match index or -1. + */ + public int match_main(String text, String pattern, int loc) { + // Check for null inputs. + if (text == null || pattern == null) { + throw new IllegalArgumentException("Null inputs. (match_main)"); + } + + loc = Math.max(0, Math.min(loc, text.length())); + if (text.equals(pattern)) { + // Shortcut (potentially not guaranteed by the algorithm) + return 0; + } else if (text.length() == 0) { + // Nothing to match. + return -1; + } else if (loc + pattern.length() <= text.length() + && text.substring(loc, loc + pattern.length()).equals(pattern)) { + // Perfect match at the perfect spot! (Includes case of null pattern) + return loc; + } else { + // Do a fuzzy compare. + return match_bitap(text, pattern, loc); + } + } + + /** + * Locate the best instance of 'pattern' in 'text' near 'loc' using the + * Bitap algorithm. Returns -1 if no match found. + * @param text The text to search. + * @param pattern The pattern to search for. + * @param loc The location to search around. + * @return Best match index or -1. + */ + protected int match_bitap(String text, String pattern, int loc) { + assert (Match_MaxBits == 0 || pattern.length() <= Match_MaxBits) + : "Pattern too long for this application."; + + // Initialise the alphabet. + Map s = match_alphabet(pattern); + + // Highest score beyond which we give up. + double score_threshold = Match_Threshold; + // Is there a nearby exact match? (speedup) + int best_loc = text.indexOf(pattern, loc); + if (best_loc != -1) { + score_threshold = Math.min(match_bitapScore(0, best_loc, loc, pattern), + score_threshold); + // What about in the other direction? (speedup) + best_loc = text.lastIndexOf(pattern, loc + pattern.length()); + if (best_loc != -1) { + score_threshold = Math.min(match_bitapScore(0, best_loc, loc, pattern), + score_threshold); + } + } + + // Initialise the bit arrays. + int matchmask = 1 << (pattern.length() - 1); + best_loc = -1; + + int bin_min, bin_mid; + int bin_max = pattern.length() + text.length(); + // Empty initialization added to appease Java compiler. + int[] last_rd = new int[0]; + for (int d = 0; d < pattern.length(); d++) { + // Scan for the best match; each iteration allows for one more error. + // Run a binary search to determine how far from 'loc' we can stray at + // this error level. + bin_min = 0; + bin_mid = bin_max; + while (bin_min < bin_mid) { + if (match_bitapScore(d, loc + bin_mid, loc, pattern) + <= score_threshold) { + bin_min = bin_mid; + } else { + bin_max = bin_mid; + } + bin_mid = (bin_max - bin_min) / 2 + bin_min; + } + // Use the result from this iteration as the maximum for the next. + bin_max = bin_mid; + int start = Math.max(1, loc - bin_mid + 1); + int finish = Math.min(loc + bin_mid, text.length()) + pattern.length(); + + int[] rd = new int[finish + 2]; + rd[finish + 1] = (1 << d) - 1; + for (int j = finish; j >= start; j--) { + int charMatch; + if (text.length() <= j - 1 || !s.containsKey(text.charAt(j - 1))) { + // Out of range. + charMatch = 0; + } else { + charMatch = s.get(text.charAt(j - 1)); + } + if (d == 0) { + // First pass: exact match. + rd[j] = ((rd[j + 1] << 1) | 1) & charMatch; + } else { + // Subsequent passes: fuzzy match. + rd[j] = (((rd[j + 1] << 1) | 1) & charMatch) + | (((last_rd[j + 1] | last_rd[j]) << 1) | 1) | last_rd[j + 1]; + } + if ((rd[j] & matchmask) != 0) { + double score = match_bitapScore(d, j - 1, loc, pattern); + // This match will almost certainly be better than any existing + // match. But check anyway. + if (score <= score_threshold) { + // Told you so. + score_threshold = score; + best_loc = j - 1; + if (best_loc > loc) { + // When passing loc, don't exceed our current distance from loc. + start = Math.max(1, 2 * loc - best_loc); + } else { + // Already passed loc, downhill from here on in. + break; + } + } + } + } + if (match_bitapScore(d + 1, loc, loc, pattern) > score_threshold) { + // No hope for a (better) match at greater error levels. + break; + } + last_rd = rd; + } + return best_loc; + } + + /** + * Compute and return the score for a match with e errors and x location. + * @param e Number of errors in match. + * @param x Location of match. + * @param loc Expected location of match. + * @param pattern Pattern being sought. + * @return Overall score for match (0.0 = good, 1.0 = bad). + */ + private double match_bitapScore(int e, int x, int loc, String pattern) { + float accuracy = (float) e / pattern.length(); + int proximity = Math.abs(loc - x); + if (Match_Distance == 0) { + // Dodge divide by zero error. + return proximity == 0 ? accuracy : 1.0; + } + return accuracy + (proximity / (float) Match_Distance); + } + + /** + * Initialise the alphabet for the Bitap algorithm. + * @param pattern The text to encode. + * @return Hash of character locations. + */ + protected Map match_alphabet(String pattern) { + Map s = new HashMap(); + char[] char_pattern = pattern.toCharArray(); + for (char c : char_pattern) { + s.put(c, 0); + } + int i = 0; + for (char c : char_pattern) { + s.put(c, s.get(c) | (1 << (pattern.length() - i - 1))); + i++; + } + return s; + } + + + // PATCH FUNCTIONS + + + /** + * Increase the context until it is unique, + * but don't let the pattern expand beyond Match_MaxBits. + * @param patch The patch to grow. + * @param text Source text. + */ + protected void patch_addContext(Patch patch, String text) { + if (text.length() == 0) { + return; + } + String pattern = text.substring(patch.start2, patch.start2 + patch.length1); + int padding = 0; + + // Look for the first and last matches of pattern in text. If two different + // matches are found, increase the pattern length. + while (text.indexOf(pattern) != text.lastIndexOf(pattern) + && pattern.length() < Match_MaxBits - Patch_Margin - Patch_Margin) { + padding += Patch_Margin; + pattern = text.substring(Math.max(0, patch.start2 - padding), + Math.min(text.length(), patch.start2 + patch.length1 + padding)); + } + // Add one chunk for good luck. + padding += Patch_Margin; + + // Add the prefix. + String prefix = text.substring(Math.max(0, patch.start2 - padding), + patch.start2); + if (prefix.length() != 0) { + patch.diffs.addFirst(new Diff(Operation.EQUAL, prefix)); + } + // Add the suffix. + String suffix = text.substring(patch.start2 + patch.length1, + Math.min(text.length(), patch.start2 + patch.length1 + padding)); + if (suffix.length() != 0) { + patch.diffs.addLast(new Diff(Operation.EQUAL, suffix)); + } + + // Roll back the start points. + patch.start1 -= prefix.length(); + patch.start2 -= prefix.length(); + // Extend the lengths. + patch.length1 += prefix.length() + suffix.length(); + patch.length2 += prefix.length() + suffix.length(); + } + + /** + * Compute a list of patches to turn text1 into text2. + * A set of diffs will be computed. + * @param text1 Old text. + * @param text2 New text. + * @return LinkedList of Patch objects. + */ + public LinkedList patch_make(String text1, String text2) { + if (text1 == null || text2 == null) { + throw new IllegalArgumentException("Null inputs. (patch_make)"); + } + // No diffs provided, compute our own. + LinkedList diffs = diff_main(text1, text2, true); + if (diffs.size() > 2) { + diff_cleanupSemantic(diffs); + diff_cleanupEfficiency(diffs); + } + return patch_make(text1, diffs); + } + + /** + * Compute a list of patches to turn text1 into text2. + * text1 will be derived from the provided diffs. + * @param diffs Array of Diff objects for text1 to text2. + * @return LinkedList of Patch objects. + */ + public LinkedList patch_make(LinkedList diffs) { + if (diffs == null) { + throw new IllegalArgumentException("Null inputs. (patch_make)"); + } + // No origin string provided, compute our own. + String text1 = diff_text1(diffs); + return patch_make(text1, diffs); + } + + /** + * Compute a list of patches to turn text1 into text2. + * text2 is ignored, diffs are the delta between text1 and text2. + * @param text1 Old text + * @param text2 Ignored. + * @param diffs Array of Diff objects for text1 to text2. + * @return LinkedList of Patch objects. + * @deprecated Prefer patch_make(String text1, LinkedList diffs). + */ + @Deprecated public LinkedList patch_make(String text1, String text2, + LinkedList diffs) { + return patch_make(text1, diffs); + } + + /** + * Compute a list of patches to turn text1 into text2. + * text2 is not provided, diffs are the delta between text1 and text2. + * @param text1 Old text. + * @param diffs Array of Diff objects for text1 to text2. + * @return LinkedList of Patch objects. + */ + public LinkedList patch_make(String text1, LinkedList diffs) { + if (text1 == null || diffs == null) { + throw new IllegalArgumentException("Null inputs. (patch_make)"); + } + + LinkedList patches = new LinkedList(); + if (diffs.isEmpty()) { + return patches; // Get rid of the null case. + } + Patch patch = new Patch(); + int char_count1 = 0; // Number of characters into the text1 string. + int char_count2 = 0; // Number of characters into the text2 string. + // Start with text1 (prepatch_text) and apply the diffs until we arrive at + // text2 (postpatch_text). We recreate the patches one by one to determine + // context info. + String prepatch_text = text1; + String postpatch_text = text1; + for (Diff aDiff : diffs) { + if (patch.diffs.isEmpty() && aDiff.operation != Operation.EQUAL) { + // A new patch starts here. + patch.start1 = char_count1; + patch.start2 = char_count2; + } + + switch (aDiff.operation) { + case INSERT: + patch.diffs.add(aDiff); + patch.length2 += aDiff.text.length(); + postpatch_text = postpatch_text.substring(0, char_count2) + + aDiff.text + postpatch_text.substring(char_count2); + break; + case DELETE: + patch.length1 += aDiff.text.length(); + patch.diffs.add(aDiff); + postpatch_text = postpatch_text.substring(0, char_count2) + + postpatch_text.substring(char_count2 + aDiff.text.length()); + break; + case EQUAL: + if (aDiff.text.length() <= 2 * Patch_Margin + && !patch.diffs.isEmpty() && aDiff != diffs.getLast()) { + // Small equality inside a patch. + patch.diffs.add(aDiff); + patch.length1 += aDiff.text.length(); + patch.length2 += aDiff.text.length(); + } + + if (aDiff.text.length() >= 2 * Patch_Margin && !patch.diffs.isEmpty()) { + // Time for a new patch. + if (!patch.diffs.isEmpty()) { + patch_addContext(patch, prepatch_text); + patches.add(patch); + patch = new Patch(); + // Unlike Unidiff, our patch lists have a rolling context. + // https://github.com/google/diff-match-patch/wiki/Unidiff + // Update prepatch text & pos to reflect the application of the + // just completed patch. + prepatch_text = postpatch_text; + char_count1 = char_count2; + } + } + break; + } + + // Update the current character count. + if (aDiff.operation != Operation.INSERT) { + char_count1 += aDiff.text.length(); + } + if (aDiff.operation != Operation.DELETE) { + char_count2 += aDiff.text.length(); + } + } + // Pick up the leftover patch if not empty. + if (!patch.diffs.isEmpty()) { + patch_addContext(patch, prepatch_text); + patches.add(patch); + } + + return patches; + } + + /** + * Given an array of patches, return another array that is identical. + * @param patches Array of Patch objects. + * @return Array of Patch objects. + */ + public LinkedList patch_deepCopy(LinkedList patches) { + LinkedList patchesCopy = new LinkedList(); + for (Patch aPatch : patches) { + Patch patchCopy = new Patch(); + for (Diff aDiff : aPatch.diffs) { + Diff diffCopy = new Diff(aDiff.operation, aDiff.text); + patchCopy.diffs.add(diffCopy); + } + patchCopy.start1 = aPatch.start1; + patchCopy.start2 = aPatch.start2; + patchCopy.length1 = aPatch.length1; + patchCopy.length2 = aPatch.length2; + patchesCopy.add(patchCopy); + } + return patchesCopy; + } + + /** + * Merge a set of patches onto the text. Return a patched text, as well + * as an array of true/false values indicating which patches were applied. + * @param patches Array of Patch objects + * @param text Old text. + * @return Two element Object array, containing the new text and an array of + * boolean values. + */ + public Object[] patch_apply(LinkedList patches, String text) { + if (patches.isEmpty()) { + return new Object[]{text, new boolean[0]}; + } + + // Deep copy the patches so that no changes are made to originals. + patches = patch_deepCopy(patches); + + String nullPadding = patch_addPadding(patches); + text = nullPadding + text + nullPadding; + patch_splitMax(patches); + + int x = 0; + // delta keeps track of the offset between the expected and actual location + // of the previous patch. If there are patches expected at positions 10 and + // 20, but the first patch was found at 12, delta is 2 and the second patch + // has an effective expected position of 22. + int delta = 0; + boolean[] results = new boolean[patches.size()]; + for (Patch aPatch : patches) { + int expected_loc = aPatch.start2 + delta; + String text1 = diff_text1(aPatch.diffs); + int start_loc; + int end_loc = -1; + if (text1.length() > this.Match_MaxBits) { + // patch_splitMax will only provide an oversized pattern in the case of + // a monster delete. + start_loc = match_main(text, + text1.substring(0, this.Match_MaxBits), expected_loc); + if (start_loc != -1) { + end_loc = match_main(text, + text1.substring(text1.length() - this.Match_MaxBits), + expected_loc + text1.length() - this.Match_MaxBits); + if (end_loc == -1 || start_loc >= end_loc) { + // Can't find valid trailing context. Drop this patch. + start_loc = -1; + } + } + } else { + start_loc = match_main(text, text1, expected_loc); + } + if (start_loc == -1) { + // No match found. :( + results[x] = false; + // Subtract the delta for this failed patch from subsequent patches. + delta -= aPatch.length2 - aPatch.length1; + } else { + // Found a match. :) + results[x] = true; + delta = start_loc - expected_loc; + String text2; + if (end_loc == -1) { + text2 = text.substring(start_loc, + Math.min(start_loc + text1.length(), text.length())); + } else { + text2 = text.substring(start_loc, + Math.min(end_loc + this.Match_MaxBits, text.length())); + } + if (text1.equals(text2)) { + // Perfect match, just shove the replacement text in. + text = text.substring(0, start_loc) + diff_text2(aPatch.diffs) + + text.substring(start_loc + text1.length()); + } else { + // Imperfect match. Run a diff to get a framework of equivalent + // indices. + LinkedList diffs = diff_main(text1, text2, false); + if (text1.length() > this.Match_MaxBits + && diff_levenshtein(diffs) / (float) text1.length() + > this.Patch_DeleteThreshold) { + // The end points match, but the content is unacceptably bad. + results[x] = false; + } else { + diff_cleanupSemanticLossless(diffs); + int index1 = 0; + for (Diff aDiff : aPatch.diffs) { + if (aDiff.operation != Operation.EQUAL) { + int index2 = diff_xIndex(diffs, index1); + if (aDiff.operation == Operation.INSERT) { + // Insertion + text = text.substring(0, start_loc + index2) + aDiff.text + + text.substring(start_loc + index2); + } else if (aDiff.operation == Operation.DELETE) { + // Deletion + text = text.substring(0, start_loc + index2) + + text.substring(start_loc + diff_xIndex(diffs, + index1 + aDiff.text.length())); + } + } + if (aDiff.operation != Operation.DELETE) { + index1 += aDiff.text.length(); + } + } + } + } + } + x++; + } + // Strip the padding off. + text = text.substring(nullPadding.length(), text.length() + - nullPadding.length()); + return new Object[]{text, results}; + } + + /** + * Add some padding on text start and end so that edges can match something. + * Intended to be called only from within patch_apply. + * @param patches Array of Patch objects. + * @return The padding string added to each side. + */ + public String patch_addPadding(LinkedList patches) { + short paddingLength = this.Patch_Margin; + String nullPadding = ""; + for (short x = 1; x <= paddingLength; x++) { + nullPadding += String.valueOf((char) x); + } + + // Bump all the patches forward. + for (Patch aPatch : patches) { + aPatch.start1 += paddingLength; + aPatch.start2 += paddingLength; + } + + // Add some padding on start of first diff. + Patch patch = patches.getFirst(); + LinkedList diffs = patch.diffs; + if (diffs.isEmpty() || diffs.getFirst().operation != Operation.EQUAL) { + // Add nullPadding equality. + diffs.addFirst(new Diff(Operation.EQUAL, nullPadding)); + patch.start1 -= paddingLength; // Should be 0. + patch.start2 -= paddingLength; // Should be 0. + patch.length1 += paddingLength; + patch.length2 += paddingLength; + } else if (paddingLength > diffs.getFirst().text.length()) { + // Grow first equality. + Diff firstDiff = diffs.getFirst(); + int extraLength = paddingLength - firstDiff.text.length(); + firstDiff.text = nullPadding.substring(firstDiff.text.length()) + + firstDiff.text; + patch.start1 -= extraLength; + patch.start2 -= extraLength; + patch.length1 += extraLength; + patch.length2 += extraLength; + } + + // Add some padding on end of last diff. + patch = patches.getLast(); + diffs = patch.diffs; + if (diffs.isEmpty() || diffs.getLast().operation != Operation.EQUAL) { + // Add nullPadding equality. + diffs.addLast(new Diff(Operation.EQUAL, nullPadding)); + patch.length1 += paddingLength; + patch.length2 += paddingLength; + } else if (paddingLength > diffs.getLast().text.length()) { + // Grow last equality. + Diff lastDiff = diffs.getLast(); + int extraLength = paddingLength - lastDiff.text.length(); + lastDiff.text += nullPadding.substring(0, extraLength); + patch.length1 += extraLength; + patch.length2 += extraLength; + } + + return nullPadding; + } + + /** + * Look through the patches and break up any which are longer than the + * maximum limit of the match algorithm. + * Intended to be called only from within patch_apply. + * @param patches LinkedList of Patch objects. + */ + public void patch_splitMax(LinkedList patches) { + short patch_size = Match_MaxBits; + String precontext, postcontext; + Patch patch; + int start1, start2; + boolean empty; + Operation diff_type; + String diff_text; + ListIterator pointer = patches.listIterator(); + Patch bigpatch = pointer.hasNext() ? pointer.next() : null; + while (bigpatch != null) { + if (bigpatch.length1 <= Match_MaxBits) { + bigpatch = pointer.hasNext() ? pointer.next() : null; + continue; + } + // Remove the big old patch. + pointer.remove(); + start1 = bigpatch.start1; + start2 = bigpatch.start2; + precontext = ""; + while (!bigpatch.diffs.isEmpty()) { + // Create one of several smaller patches. + patch = new Patch(); + empty = true; + patch.start1 = start1 - precontext.length(); + patch.start2 = start2 - precontext.length(); + if (precontext.length() != 0) { + patch.length1 = patch.length2 = precontext.length(); + patch.diffs.add(new Diff(Operation.EQUAL, precontext)); + } + while (!bigpatch.diffs.isEmpty() + && patch.length1 < patch_size - Patch_Margin) { + diff_type = bigpatch.diffs.getFirst().operation; + diff_text = bigpatch.diffs.getFirst().text; + if (diff_type == Operation.INSERT) { + // Insertions are harmless. + patch.length2 += diff_text.length(); + start2 += diff_text.length(); + patch.diffs.addLast(bigpatch.diffs.removeFirst()); + empty = false; + } else if (diff_type == Operation.DELETE && patch.diffs.size() == 1 + && patch.diffs.getFirst().operation == Operation.EQUAL + && diff_text.length() > 2 * patch_size) { + // This is a large deletion. Let it pass in one chunk. + patch.length1 += diff_text.length(); + start1 += diff_text.length(); + empty = false; + patch.diffs.add(new Diff(diff_type, diff_text)); + bigpatch.diffs.removeFirst(); + } else { + // Deletion or equality. Only take as much as we can stomach. + diff_text = diff_text.substring(0, Math.min(diff_text.length(), + patch_size - patch.length1 - Patch_Margin)); + patch.length1 += diff_text.length(); + start1 += diff_text.length(); + if (diff_type == Operation.EQUAL) { + patch.length2 += diff_text.length(); + start2 += diff_text.length(); + } else { + empty = false; + } + patch.diffs.add(new Diff(diff_type, diff_text)); + if (diff_text.equals(bigpatch.diffs.getFirst().text)) { + bigpatch.diffs.removeFirst(); + } else { + bigpatch.diffs.getFirst().text = bigpatch.diffs.getFirst().text + .substring(diff_text.length()); + } + } + } + // Compute the head context for the next patch. + precontext = diff_text2(patch.diffs); + precontext = precontext.substring(Math.max(0, precontext.length() + - Patch_Margin)); + // Append the end context for this patch. + if (diff_text1(bigpatch.diffs).length() > Patch_Margin) { + postcontext = diff_text1(bigpatch.diffs).substring(0, Patch_Margin); + } else { + postcontext = diff_text1(bigpatch.diffs); + } + if (postcontext.length() != 0) { + patch.length1 += postcontext.length(); + patch.length2 += postcontext.length(); + if (!patch.diffs.isEmpty() + && patch.diffs.getLast().operation == Operation.EQUAL) { + patch.diffs.getLast().text += postcontext; + } else { + patch.diffs.add(new Diff(Operation.EQUAL, postcontext)); + } + } + if (!empty) { + pointer.add(patch); + } + } + bigpatch = pointer.hasNext() ? pointer.next() : null; + } + } + + /** + * Take a list of patches and return a textual representation. + * @param patches List of Patch objects. + * @return Text representation of patches. + */ + public String patch_toText(List patches) { + StringBuilder text = new StringBuilder(); + for (Patch aPatch : patches) { + text.append(aPatch); + } + return text.toString(); + } + + /** + * Parse a textual representation of patches and return a List of Patch + * objects. + * @param textline Text representation of patches. + * @return List of Patch objects. + * @throws IllegalArgumentException If invalid input. + */ + public List patch_fromText(String textline) + throws IllegalArgumentException { + List patches = new LinkedList(); + if (textline.length() == 0) { + return patches; + } + List textList = Arrays.asList(textline.split("\n")); + LinkedList text = new LinkedList(textList); + Patch patch; + Pattern patchHeader + = Pattern.compile("^@@ -(\\d+),?(\\d*) \\+(\\d+),?(\\d*) @@$"); + Matcher m; + char sign; + String line; + while (!text.isEmpty()) { + m = patchHeader.matcher(text.getFirst()); + if (!m.matches()) { + throw new IllegalArgumentException( + "Invalid patch string: " + text.getFirst()); + } + patch = new Patch(); + patches.add(patch); + patch.start1 = Integer.parseInt(m.group(1)); + if (m.group(2).length() == 0) { + patch.start1--; + patch.length1 = 1; + } else if (m.group(2).equals("0")) { + patch.length1 = 0; + } else { + patch.start1--; + patch.length1 = Integer.parseInt(m.group(2)); + } + + patch.start2 = Integer.parseInt(m.group(3)); + if (m.group(4).length() == 0) { + patch.start2--; + patch.length2 = 1; + } else if (m.group(4).equals("0")) { + patch.length2 = 0; + } else { + patch.start2--; + patch.length2 = Integer.parseInt(m.group(4)); + } + text.removeFirst(); + + while (!text.isEmpty()) { + try { + sign = text.getFirst().charAt(0); + } catch (IndexOutOfBoundsException e) { + // Blank line? Whatever. + text.removeFirst(); + continue; + } + line = text.getFirst().substring(1); + line = line.replace("+", "%2B"); // decode would change all "+" to " " + try { + line = URLDecoder.decode(line, "UTF-8"); + } catch (UnsupportedEncodingException e) { + // Not likely on modern system. + throw new Error("This system does not support UTF-8.", e); + } catch (IllegalArgumentException e) { + // Malformed URI sequence. + throw new IllegalArgumentException( + "Illegal escape in patch_fromText: " + line, e); + } + if (sign == '-') { + // Deletion. + patch.diffs.add(new Diff(Operation.DELETE, line)); + } else if (sign == '+') { + // Insertion. + patch.diffs.add(new Diff(Operation.INSERT, line)); + } else if (sign == ' ') { + // Minor equality. + patch.diffs.add(new Diff(Operation.EQUAL, line)); + } else if (sign == '@') { + // Start of next patch. + break; + } else { + // WTF? + throw new IllegalArgumentException( + "Invalid patch mode '" + sign + "' in: " + line); + } + text.removeFirst(); + } + } + return patches; + } + + + /** + * Class representing one diff operation. + */ + public static class Diff { + /** + * One of: INSERT, DELETE or EQUAL. + */ + public Operation operation; + /** + * The text associated with this diff operation. + */ + public String text; + + /** + * Constructor. Initializes the diff with the provided values. + * @param operation One of INSERT, DELETE or EQUAL. + * @param text The text being applied. + */ + public Diff(Operation operation, String text) { + // Construct a diff with the specified operation and text. + this.operation = operation; + this.text = text; + } + + /** + * Display a human-readable version of this Diff. + * @return text version. + */ + public String toString() { + String prettyText = this.text.replace('\n', '\u00b6'); + return "Diff(" + this.operation + ",\"" + prettyText + "\")"; + } + + /** + * Create a numeric hash value for a Diff. + * This function is not used by DMP. + * @return Hash value. + */ + @Override + public int hashCode() { + final int prime = 31; + int result = (operation == null) ? 0 : operation.hashCode(); + result += prime * ((text == null) ? 0 : text.hashCode()); + return result; + } + + /** + * Is this Diff equivalent to another Diff? + * @param obj Another Diff to compare against. + * @return true or false. + */ + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + Diff other = (Diff) obj; + if (operation != other.operation) { + return false; + } + if (text == null) { + if (other.text != null) { + return false; + } + } else if (!text.equals(other.text)) { + return false; + } + return true; + } + } + + + /** + * Class representing one patch operation. + */ + public static class Patch { + public LinkedList diffs; + public int start1; + public int start2; + public int length1; + public int length2; + + /** + * Constructor. Initializes with an empty list of diffs. + */ + public Patch() { + this.diffs = new LinkedList(); + } + + /** + * Emulate GNU diff's format. + * Header: @@ -382,8 +481,9 @@ + * Indices are printed as 1-based, not 0-based. + * @return The GNU diff string. + */ + public String toString() { + String coords1, coords2; + if (this.length1 == 0) { + coords1 = this.start1 + ",0"; + } else if (this.length1 == 1) { + coords1 = Integer.toString(this.start1 + 1); + } else { + coords1 = (this.start1 + 1) + "," + this.length1; + } + if (this.length2 == 0) { + coords2 = this.start2 + ",0"; + } else if (this.length2 == 1) { + coords2 = Integer.toString(this.start2 + 1); + } else { + coords2 = (this.start2 + 1) + "," + this.length2; + } + StringBuilder text = new StringBuilder(); + text.append("@@ -").append(coords1).append(" +").append(coords2) + .append(" @@\n"); + // Escape the body of the patch with %xx notation. + for (Diff aDiff : this.diffs) { + switch (aDiff.operation) { + case INSERT: + text.append('+'); + break; + case DELETE: + text.append('-'); + break; + case EQUAL: + text.append(' '); + break; + } + try { + text.append(URLEncoder.encode(aDiff.text, "UTF-8").replace('+', ' ')) + .append("\n"); + } catch (UnsupportedEncodingException e) { + // Not likely on modern system. + throw new Error("This system does not support UTF-8.", e); + } + } + return unescapeForEncodeUriCompatability(text.toString()); + } + } + + /** + * Unescape selected chars for compatability with JavaScript's encodeURI. + * In speed critical applications this could be dropped since the + * receiving application will certainly decode these fine. + * Note that this function is case-sensitive. Thus "%3f" would not be + * unescaped. But this is ok because it is only called with the output of + * URLEncoder.encode which returns uppercase hex. + * + * Example: "%3F" -> "?", "%24" -> "$", etc. + * + * @param str The string to escape. + * @return The escaped string. + */ + private static String unescapeForEncodeUriCompatability(String str) { + return str.replace("%21", "!").replace("%7E", "~") + .replace("%27", "'").replace("%28", "(").replace("%29", ")") + .replace("%3B", ";").replace("%2F", "/").replace("%3F", "?") + .replace("%3A", ":").replace("%40", "@").replace("%26", "&") + .replace("%3D", "=").replace("%2B", "+").replace("%24", "$") + .replace("%2C", ",").replace("%23", "#"); + } +} From 748189af1051b2bdc3c8d1aed423165e3ff4673e Mon Sep 17 00:00:00 2001 From: Michele De Bonis Date: Mon, 5 Nov 2018 17:22:59 +0100 Subject: [PATCH 020/449] implementation of JaroWinklerNormalizedName, addition of various stopwords in different languages and configuration test --- .../pace/common/AbstractPaceFunctions.java | 79 +- .../algo/JaroWinklerNormalizedName.java | 77 ++ .../eu/dnetlib/pace/config/stopwords_de.txt | 621 +++++++++++++++ .../eu/dnetlib/pace/config/stopwords_es.txt | 732 ++++++++++++++++++ .../eu/dnetlib/pace/config/stopwords_fr.txt | 689 +++++++++++++++++ .../eu/dnetlib/pace/config/stopwords_it.txt | 660 ++++++++++++++++ .../eu/dnetlib/pace/config/stopwords_pt.txt | 560 ++++++++++++++ .../dnetlib/pace/config/translation_map.csv | 47 ++ .../eu/dnetlib/pace/AbstractPaceTest.java | 6 + .../clustering/ClusteringFunctionTest.java | 12 + .../pace/distance/DistanceAlgoTest.java | 17 + 11 files changed, 3493 insertions(+), 7 deletions(-) create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerNormalizedName.java create mode 100644 dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_de.txt create mode 100644 dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_es.txt create mode 100644 dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_fr.txt create mode 100644 dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_it.txt create mode 100644 dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_pt.txt create mode 100644 dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/translation_map.csv diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java index 9174bed19..9fa67d7c1 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java @@ -1,11 +1,13 @@ package eu.dnetlib.pace.common; import java.text.Normalizer; -import java.util.Collection; -import java.util.List; -import java.util.Set; -import java.util.StringTokenizer; +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import com.google.common.collect.Maps; +import eu.dnetlib.pace.distance.algo.JaroWinklerNormalizedName; +import org.apache.commons.collections.CollectionUtils; import org.apache.commons.io.IOUtils; import org.apache.commons.lang.StringUtils; @@ -18,6 +20,7 @@ import eu.dnetlib.pace.clustering.NGramUtils; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.model.FieldList; import eu.dnetlib.pace.model.FieldListImpl; +import org.apache.spark.util.CollectionsUtils; /** * Set of common functions @@ -32,8 +35,8 @@ public abstract class AbstractPaceFunctions { protected static Set ngramBlacklist = loadFromClasspath("/eu/dnetlib/pace/config/ngram_blacklist.txt"); private static final String alpha = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 "; - private static final String aliases_from = "⁰¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ⁿ₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎"; - private static final String aliases_to = "0123456789+-=()n0123456789+-=()"; + private static final String aliases_from = "⁰¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ⁿ₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎àáâäæãåāèéêëēėęîïíīįìôöòóœøōõûüùúūßśšłžźżçćčñń"; + private static final String aliases_to = "0123456789+-=()n0123456789+-=()aaaaaaaaeeeeeeeiiiiiioooooooouuuuussslzzzcccnn"; protected final static FieldList EMPTY_FIELD = new FieldListImpl(); @@ -84,7 +87,7 @@ public abstract class AbstractPaceFunctions { return s.replaceAll("\\D", ""); } - protected String fixAliases(final String s) { + protected static String fixAliases(final String s) { final StringBuilder sb = new StringBuilder(); for (final char ch : Lists.charactersOf(s)) { final int i = StringUtils.indexOf(aliases_from, ch); @@ -164,4 +167,66 @@ public abstract class AbstractPaceFunctions { return h; } + public static Map loadMapFromClasspath(final String classpath) { + final Map m = new HashMap<>(); + try { + for (final String s: IOUtils.readLines(JaroWinklerNormalizedName.class.getResourceAsStream(classpath))) { + //string is like this: code;word1;word2;word3 + String[] line = s.split(";"); + String value = line[0]; + for (String key: line){ + m.put(fixAliases(key),value); + } + } + } catch (final Throwable e){ + return new HashMap<>(); + } + return m; + } + + //translate the string: replace the keywords with the code + public String translate(String s1, Map translationMap){ + final StringTokenizer st = new StringTokenizer(s1); + final StringBuilder sb = new StringBuilder(); + while (st.hasMoreTokens()){ + final String token = st.nextToken(); + sb.append(" " + translationMap.getOrDefault(token,token) + " "); + } + return sb.toString(); + } + + public String removeCodes(String s) { + final String regex = " \\d+ "; + return s.replaceAll(regex, "").trim(); + } + + //check if 2 strings have same keywords + public boolean sameKeywords(String s1, String s2){ + //all keywords in common + //return getKeywords(s1).containsAll(getKeywords(s2)) && getKeywords(s2).containsAll(getKeywords(s1)); + + //at least 1 keyword in common + if (getKeywords(s1).isEmpty() || getKeywords(s2).isEmpty()) + return true; + else + return CollectionUtils.intersection(getKeywords(s1),getKeywords(s2)).size()>0; + } + + //get the list of keywords in a string + public List getKeywords(String s) { + + final String regex = " \\d+ "; + + Pattern p = Pattern.compile(regex, Pattern.MULTILINE); + Matcher m = p.matcher(s); + List codes = new ArrayList<>(); + while (m.find()) { + codes.add(Integer.parseInt(m.group(0).replace(" ", ""))); + for (int i = 1; i <= m.groupCount(); i++) { + codes.add(Integer.parseInt(m.group(0).replace(" ", ""))); + } + } + return codes; + } + } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerNormalizedName.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerNormalizedName.java new file mode 100644 index 000000000..ec312cc97 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerNormalizedName.java @@ -0,0 +1,77 @@ +package eu.dnetlib.pace.distance.algo; + +import com.wcohen.ss.AbstractStringDistance; +import eu.dnetlib.pace.common.AbstractPaceFunctions; +import eu.dnetlib.pace.distance.DistanceClass; +import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; + +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +@DistanceClass("JaroWinklerNormalizedName") +public class JaroWinklerNormalizedName extends SecondStringDistanceAlgo { + + private static Set stopwordsEn = AbstractPaceFunctions.loadFromClasspath("/eu/dnetlib/pace/config/stopwords_en.txt"); + private static Set stopwordsIt = AbstractPaceFunctions.loadFromClasspath("/eu/dnetlib/pace/config/stopwords_it.txt"); + private static Set stopwordsDe = AbstractPaceFunctions.loadFromClasspath("/eu/dnetlib/pace/config/stopwords_de.txt"); + private static Set stopwordsFr = AbstractPaceFunctions.loadFromClasspath("/eu/dnetlib/pace/config/stopwords_fr.txt"); + private static Set stopwordsPt = AbstractPaceFunctions.loadFromClasspath("/eu/dnetlib/pace/config/stopwords_pt.txt"); + private static Set stopwordsEs = AbstractPaceFunctions.loadFromClasspath("/eu/dnetlib/pace/config/stopwords_es.txt"); + + //key=word, value=global identifier => example: "università"->"university", used to substitute the word with the global identifier + private static Map translationMap = AbstractPaceFunctions.loadMapFromClasspath("/eu/dnetlib/pace/config/translation_map.csv"); + + public JaroWinklerNormalizedName(Map params){ + super(params, new com.wcohen.ss.JaroWinkler()); + } + + public JaroWinklerNormalizedName(double weight) { + super(weight, new com.wcohen.ss.JaroWinkler()); + } + + protected JaroWinklerNormalizedName(double weight, AbstractStringDistance ssalgo) { + super(weight, ssalgo); + } + + @Override + public double distance(String a, String b) { + String ca = cleanup(a); + String cb = cleanup(b); + + ca = removeStopwords(ca); + cb = removeStopwords(cb); + + //replace keywords with codes + ca = translate(ca, translationMap); + cb = translate(cb, translationMap); + + if (sameKeywords(ca,cb)) { + return normalize(ssalgo.score(removeCodes(ca), removeCodes(cb))); + } + return 0.0; + } + + @Override + public double getWeight() { + return super.weight; + } + + @Override + protected double normalize(double d) { + return d; + } + + public String removeStopwords(String s) { + String normString = normalize(s); + + normString = filterStopWords(normString, stopwordsIt); + normString = filterStopWords(normString, stopwordsEn); + normString = filterStopWords(normString, stopwordsDe); + normString = filterStopWords(normString, stopwordsFr); + normString = filterStopWords(normString, stopwordsPt); + normString = filterStopWords(normString, stopwordsEs); + + return normString; + } +} diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_de.txt b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_de.txt new file mode 100644 index 000000000..24666a649 --- /dev/null +++ b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_de.txt @@ -0,0 +1,621 @@ +a +ab +aber +ach +acht +achte +achten +achter +achtes +ag +alle +allein +allem +allen +aller +allerdings +alles +allgemeinen +als +also +am +an +ander +andere +anderem +anderen +anderer +anderes +anderm +andern +anderr +anders +au +auch +auf +aus +ausser +ausserdem +außer +außerdem +b +bald +bei +beide +beiden +beim +beispiel +bekannt +bereits +besonders +besser +besten +bin +bis +bisher +bist +c +d +d.h +da +dabei +dadurch +dafür +dagegen +daher +dahin +dahinter +damals +damit +danach +daneben +dank +dann +daran +darauf +daraus +darf +darfst +darin +darum +darunter +darüber +das +dasein +daselbst +dass +dasselbe +davon +davor +dazu +dazwischen +daß +dein +deine +deinem +deinen +deiner +deines +dem +dementsprechend +demgegenüber +demgemäss +demgemäß +demselben +demzufolge +den +denen +denn +denselben +der +deren +derer +derjenige +derjenigen +dermassen +dermaßen +derselbe +derselben +des +deshalb +desselben +dessen +deswegen +dich +die +diejenige +diejenigen +dies +diese +dieselbe +dieselben +diesem +diesen +dieser +dieses +dir +doch +dort +drei +drin +dritte +dritten +dritter +drittes +du +durch +durchaus +durfte +durften +dürfen +dürft +e +eben +ebenso +ehrlich +ei +ei, +eigen +eigene +eigenen +eigener +eigenes +ein +einander +eine +einem +einen +einer +eines +einig +einige +einigem +einigen +einiger +einiges +einmal +eins +elf +en +ende +endlich +entweder +er +ernst +erst +erste +ersten +erster +erstes +es +etwa +etwas +euch +euer +eure +eurem +euren +eurer +eures +f +folgende +früher +fünf +fünfte +fünften +fünfter +fünftes +für +g +gab +ganz +ganze +ganzen +ganzer +ganzes +gar +gedurft +gegen +gegenüber +gehabt +gehen +geht +gekannt +gekonnt +gemacht +gemocht +gemusst +genug +gerade +gern +gesagt +geschweige +gewesen +gewollt +geworden +gibt +ging +gleich +gott +gross +grosse +grossen +grosser +grosses +groß +große +großen +großer +großes +gut +gute +guter +gutes +h +hab +habe +haben +habt +hast +hat +hatte +hatten +hattest +hattet +heisst +her +heute +hier +hin +hinter +hoch +hätte +hätten +i +ich +ihm +ihn +ihnen +ihr +ihre +ihrem +ihren +ihrer +ihres +im +immer +in +indem +infolgedessen +ins +irgend +ist +j +ja +jahr +jahre +jahren +je +jede +jedem +jeden +jeder +jedermann +jedermanns +jedes +jedoch +jemand +jemandem +jemanden +jene +jenem +jenen +jener +jenes +jetzt +k +kam +kann +kannst +kaum +kein +keine +keinem +keinen +keiner +keines +kleine +kleinen +kleiner +kleines +kommen +kommt +konnte +konnten +kurz +können +könnt +könnte +l +lang +lange +leicht +leide +lieber +los +m +machen +macht +machte +mag +magst +mahn +mal +man +manche +manchem +manchen +mancher +manches +mann +mehr +mein +meine +meinem +meinen +meiner +meines +mensch +menschen +mich +mir +mit +mittel +mochte +mochten +morgen +muss +musst +musste +mussten +muß +mußt +möchte +mögen +möglich +mögt +müssen +müsst +müßt +n +na +nach +nachdem +nahm +natürlich +neben +nein +neue +neuen +neun +neunte +neunten +neunter +neuntes +nicht +nichts +nie +niemand +niemandem +niemanden +noch +nun +nur +o +ob +oben +oder +offen +oft +ohne +ordnung +p +q +r +recht +rechte +rechten +rechter +rechtes +richtig +rund +s +sa +sache +sagt +sagte +sah +satt +schlecht +schluss +schon +sechs +sechste +sechsten +sechster +sechstes +sehr +sei +seid +seien +sein +seine +seinem +seinen +seiner +seines +seit +seitdem +selbst +sich +sie +sieben +siebente +siebenten +siebenter +siebentes +sind +so +solang +solche +solchem +solchen +solcher +solches +soll +sollen +sollst +sollt +sollte +sollten +sondern +sonst +soweit +sowie +später +startseite +statt +steht +suche +t +tag +tage +tagen +tat +teil +tel +tritt +trotzdem +tun +u +uhr +um +und +und? +uns +unse +unsem +unsen +unser +unsere +unserer +unses +unter +v +vergangenen +viel +viele +vielem +vielen +vielleicht +vier +vierte +vierten +vierter +viertes +vom +von +vor +w +wahr? +wann +war +waren +warst +wart +warum +was +weg +wegen +weil +weit +weiter +weitere +weiteren +weiteres +welche +welchem +welchen +welcher +welches +wem +wen +wenig +wenige +weniger +weniges +wenigstens +wenn +wer +werde +werden +werdet +weshalb +wessen +wie +wieder +wieso +will +willst +wir +wird +wirklich +wirst +wissen +wo +woher +wohin +wohl +wollen +wollt +wollte +wollten +worden +wurde +wurden +während +währenddem +währenddessen +wäre +würde +würden +x +y +z +z.b +zehn +zehnte +zehnten +zehnter +zehntes +zeit +zu +zuerst +zugleich +zum +zunächst +zur +zurück +zusammen +zwanzig +zwar +zwei +zweite +zweiten +zweiter +zweites +zwischen +zwölf +über +überhaupt +übrigens \ No newline at end of file diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_es.txt b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_es.txt new file mode 100644 index 000000000..0cf607df2 --- /dev/null +++ b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_es.txt @@ -0,0 +1,732 @@ +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +_ +a +actualmente +acuerdo +adelante +ademas +además +adrede +afirmó +agregó +ahi +ahora +ahí +al +algo +alguna +algunas +alguno +algunos +algún +alli +allí +alrededor +ambos +ampleamos +antano +antaño +ante +anterior +antes +apenas +aproximadamente +aquel +aquella +aquellas +aquello +aquellos +aqui +aquél +aquélla +aquéllas +aquéllos +aquí +arriba +arribaabajo +aseguró +asi +así +atras +aun +aunque +ayer +añadió +aún +b +bajo +bastante +bien +breve +buen +buena +buenas +bueno +buenos +c +cada +casi +cerca +cierta +ciertas +cierto +ciertos +cinco +claro +comentó +como +con +conmigo +conocer +conseguimos +conseguir +considera +consideró +consigo +consigue +consiguen +consigues +contigo +contra +cosas +creo +cual +cuales +cualquier +cuando +cuanta +cuantas +cuanto +cuantos +cuatro +cuenta +cuál +cuáles +cuándo +cuánta +cuántas +cuánto +cuántos +cómo +d +da +dado +dan +dar +de +debajo +debe +deben +debido +decir +dejó +del +delante +demasiado +demás +dentro +deprisa +desde +despacio +despues +después +detras +detrás +dia +dias +dice +dicen +dicho +dieron +diferente +diferentes +dijeron +dijo +dio +donde +dos +durante +día +días +dónde +e +ejemplo +el +ella +ellas +ello +ellos +embargo +empleais +emplean +emplear +empleas +empleo +en +encima +encuentra +enfrente +enseguida +entonces +entre +era +erais +eramos +eran +eras +eres +es +esa +esas +ese +eso +esos +esta +estaba +estabais +estaban +estabas +estad +estada +estadas +estado +estados +estais +estamos +estan +estando +estar +estaremos +estará +estarán +estarás +estaré +estaréis +estaría +estaríais +estaríamos +estarían +estarías +estas +este +estemos +esto +estos +estoy +estuve +estuviera +estuvierais +estuvieran +estuvieras +estuvieron +estuviese +estuvieseis +estuviesen +estuvieses +estuvimos +estuviste +estuvisteis +estuviéramos +estuviésemos +estuvo +está +estábamos +estáis +están +estás +esté +estéis +estén +estés +ex +excepto +existe +existen +explicó +expresó +f +fin +final +fue +fuera +fuerais +fueran +fueras +fueron +fuese +fueseis +fuesen +fueses +fui +fuimos +fuiste +fuisteis +fuéramos +fuésemos +g +general +gran +grandes +gueno +h +ha +haber +habia +habida +habidas +habido +habidos +habiendo +habla +hablan +habremos +habrá +habrán +habrás +habré +habréis +habría +habríais +habríamos +habrían +habrías +habéis +había +habíais +habíamos +habían +habías +hace +haceis +hacemos +hacen +hacer +hacerlo +haces +hacia +haciendo +hago +han +has +hasta +hay +haya +hayamos +hayan +hayas +hayáis +he +hecho +hemos +hicieron +hizo +horas +hoy +hube +hubiera +hubierais +hubieran +hubieras +hubieron +hubiese +hubieseis +hubiesen +hubieses +hubimos +hubiste +hubisteis +hubiéramos +hubiésemos +hubo +i +igual +incluso +indicó +informo +informó +intenta +intentais +intentamos +intentan +intentar +intentas +intento +ir +j +junto +k +l +la +lado +largo +las +le +lejos +les +llegó +lleva +llevar +lo +los +luego +lugar +m +mal +manera +manifestó +mas +mayor +me +mediante +medio +mejor +mencionó +menos +menudo +mi +mia +mias +mientras +mio +mios +mis +misma +mismas +mismo +mismos +modo +momento +mucha +muchas +mucho +muchos +muy +más +mí +mía +mías +mío +míos +n +nada +nadie +ni +ninguna +ningunas +ninguno +ningunos +ningún +no +nos +nosotras +nosotros +nuestra +nuestras +nuestro +nuestros +nueva +nuevas +nuevo +nuevos +nunca +o +ocho +os +otra +otras +otro +otros +p +pais +para +parece +parte +partir +pasada +pasado +paìs +peor +pero +pesar +poca +pocas +poco +pocos +podeis +podemos +poder +podria +podriais +podriamos +podrian +podrias +podrá +podrán +podría +podrían +poner +por +por qué +porque +posible +primer +primera +primero +primeros +principalmente +pronto +propia +propias +propio +propios +proximo +próximo +próximos +pudo +pueda +puede +pueden +puedo +pues +q +qeu +que +quedó +queremos +quien +quienes +quiere +quiza +quizas +quizá +quizás +quién +quiénes +qué +r +raras +realizado +realizar +realizó +repente +respecto +s +sabe +sabeis +sabemos +saben +saber +sabes +sal +salvo +se +sea +seamos +sean +seas +segun +segunda +segundo +según +seis +ser +sera +seremos +será +serán +serás +seré +seréis +sería +seríais +seríamos +serían +serías +seáis +señaló +si +sido +siempre +siendo +siete +sigue +siguiente +sin +sino +sobre +sois +sola +solamente +solas +solo +solos +somos +son +soy +soyos +su +supuesto +sus +suya +suyas +suyo +suyos +sé +sí +sólo +t +tal +tambien +también +tampoco +tan +tanto +tarde +te +temprano +tendremos +tendrá +tendrán +tendrás +tendré +tendréis +tendría +tendríais +tendríamos +tendrían +tendrías +tened +teneis +tenemos +tener +tenga +tengamos +tengan +tengas +tengo +tengáis +tenida +tenidas +tenido +tenidos +teniendo +tenéis +tenía +teníais +teníamos +tenían +tenías +tercera +ti +tiempo +tiene +tienen +tienes +toda +todas +todavia +todavía +todo +todos +total +trabaja +trabajais +trabajamos +trabajan +trabajar +trabajas +trabajo +tras +trata +través +tres +tu +tus +tuve +tuviera +tuvierais +tuvieran +tuvieras +tuvieron +tuviese +tuvieseis +tuviesen +tuvieses +tuvimos +tuviste +tuvisteis +tuviéramos +tuviésemos +tuvo +tuya +tuyas +tuyo +tuyos +tú +u +ultimo +un +una +unas +uno +unos +usa +usais +usamos +usan +usar +usas +uso +usted +ustedes +v +va +vais +valor +vamos +van +varias +varios +vaya +veces +ver +verdad +verdadera +verdadero +vez +vosotras +vosotros +voy +vuestra +vuestras +vuestro +vuestros +w +x +y +ya +yo +z +él +éramos +ésa +ésas +ése +ésos +ésta +éstas +éste +éstos +última +últimas +último +últimos \ No newline at end of file diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_fr.txt b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_fr.txt new file mode 100644 index 000000000..0e2789f49 --- /dev/null +++ b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_fr.txt @@ -0,0 +1,689 @@ +a +abord +absolument +afin +ah +ai +aie +aient +aies +ailleurs +ainsi +ait +allaient +allo +allons +allô +alors +anterieur +anterieure +anterieures +apres +après +as +assez +attendu +au +aucun +aucune +aucuns +aujourd +aujourd'hui +aupres +auquel +aura +aurai +auraient +aurais +aurait +auras +aurez +auriez +aurions +aurons +auront +aussi +autre +autrefois +autrement +autres +autrui +aux +auxquelles +auxquels +avaient +avais +avait +avant +avec +avez +aviez +avions +avoir +avons +ayant +ayez +ayons +b +bah +bas +basee +bat +beau +beaucoup +bien +bigre +bon +boum +bravo +brrr +c +car +ce +ceci +cela +celle +celle-ci +celle-là +celles +celles-ci +celles-là +celui +celui-ci +celui-là +celà +cent +cependant +certain +certaine +certaines +certains +certes +ces +cet +cette +ceux +ceux-ci +ceux-là +chacun +chacune +chaque +cher +chers +chez +chiche +chut +chère +chères +ci +cinq +cinquantaine +cinquante +cinquantième +cinquième +clac +clic +combien +comme +comment +comparable +comparables +compris +concernant +contre +couic +crac +d +da +dans +de +debout +dedans +dehors +deja +delà +depuis +dernier +derniere +derriere +derrière +des +desormais +desquelles +desquels +dessous +dessus +deux +deuxième +deuxièmement +devant +devers +devra +devrait +different +differentes +differents +différent +différente +différentes +différents +dire +directe +directement +dit +dite +dits +divers +diverse +diverses +dix +dix-huit +dix-neuf +dix-sept +dixième +doit +doivent +donc +dont +dos +douze +douzième +dring +droite +du +duquel +durant +dès +début +désormais +e +effet +egale +egalement +egales +eh +elle +elle-même +elles +elles-mêmes +en +encore +enfin +entre +envers +environ +es +essai +est +et +etant +etc +etre +eu +eue +eues +euh +eurent +eus +eusse +eussent +eusses +eussiez +eussions +eut +eux +eux-mêmes +exactement +excepté +extenso +exterieur +eûmes +eût +eûtes +f +fais +faisaient +faisant +fait +faites +façon +feront +fi +flac +floc +fois +font +force +furent +fus +fusse +fussent +fusses +fussiez +fussions +fut +fûmes +fût +fûtes +g +gens +h +ha +haut +hein +hem +hep +hi +ho +holà +hop +hormis +hors +hou +houp +hue +hui +huit +huitième +hum +hurrah +hé +hélas +i +ici +il +ils +importe +j +je +jusqu +jusque +juste +k +l +la +laisser +laquelle +las +le +lequel +les +lesquelles +lesquels +leur +leurs +longtemps +lors +lorsque +lui +lui-meme +lui-même +là +lès +m +ma +maint +maintenant +mais +malgre +malgré +maximale +me +meme +memes +merci +mes +mien +mienne +miennes +miens +mille +mince +mine +minimale +moi +moi-meme +moi-même +moindres +moins +mon +mot +moyennant +multiple +multiples +même +mêmes +n +na +naturel +naturelle +naturelles +ne +neanmoins +necessaire +necessairement +neuf +neuvième +ni +nombreuses +nombreux +nommés +non +nos +notamment +notre +nous +nous-mêmes +nouveau +nouveaux +nul +néanmoins +nôtre +nôtres +o +oh +ohé +ollé +olé +on +ont +onze +onzième +ore +ou +ouf +ouias +oust +ouste +outre +ouvert +ouverte +ouverts +o| +où +p +paf +pan +par +parce +parfois +parle +parlent +parler +parmi +parole +parseme +partant +particulier +particulière +particulièrement +pas +passé +pendant +pense +permet +personne +personnes +peu +peut +peuvent +peux +pff +pfft +pfut +pif +pire +pièce +plein +plouf +plupart +plus +plusieurs +plutôt +possessif +possessifs +possible +possibles +pouah +pour +pourquoi +pourrais +pourrait +pouvait +prealable +precisement +premier +première +premièrement +pres +probable +probante +procedant +proche +près +psitt +pu +puis +puisque +pur +pure +q +qu +quand +quant +quant-à-soi +quanta +quarante +quatorze +quatre +quatre-vingt +quatrième +quatrièmement +que +quel +quelconque +quelle +quelles +quelqu'un +quelque +quelques +quels +qui +quiconque +quinze +quoi +quoique +r +rare +rarement +rares +relative +relativement +remarquable +rend +rendre +restant +reste +restent +restrictif +retour +revoici +revoilà +rien +s +sa +sacrebleu +sait +sans +sapristi +sauf +se +sein +seize +selon +semblable +semblaient +semble +semblent +sent +sept +septième +sera +serai +seraient +serais +serait +seras +serez +seriez +serions +serons +seront +ses +seul +seule +seulement +si +sien +sienne +siennes +siens +sinon +six +sixième +soi +soi-même +soient +sois +soit +soixante +sommes +son +sont +sous +souvent +soyez +soyons +specifique +specifiques +speculatif +stop +strictement +subtiles +suffisant +suffisante +suffit +suis +suit +suivant +suivante +suivantes +suivants +suivre +sujet +superpose +sur +surtout +t +ta +tac +tandis +tant +tardive +te +tel +telle +tellement +telles +tels +tenant +tend +tenir +tente +tes +tic +tien +tienne +tiennes +tiens +toc +toi +toi-même +ton +touchant +toujours +tous +tout +toute +toutefois +toutes +treize +trente +tres +trois +troisième +troisièmement +trop +très +tsoin +tsouin +tu +té +u +un +une +unes +uniformement +unique +uniques +uns +v +va +vais +valeur +vas +vers +via +vif +vifs +vingt +vivat +vive +vives +vlan +voici +voie +voient +voilà +vont +vos +votre +vous +vous-mêmes +vu +vé +vôtre +vôtres +w +x +y +z +zut +à +â +ça +ès +étaient +étais +était +étant +état +étiez +étions +été +étée +étées +étés +êtes +être +ô \ No newline at end of file diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_it.txt b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_it.txt new file mode 100644 index 000000000..2003b42d2 --- /dev/null +++ b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_it.txt @@ -0,0 +1,660 @@ +a +abbastanza +abbia +abbiamo +abbiano +abbiate +accidenti +ad +adesso +affinche +agl +agli +ahime +ahim㨠+ahimè +ai +al +alcuna +alcuni +alcuno +all +alla +alle +allo +allora +altre +altri +altrimenti +altro +altrove +altrui +anche +ancora +anni +anno +ansa +anticipo +assai +attesa +attraverso +avanti +avemmo +avendo +avente +aver +avere +averlo +avesse +avessero +avessi +avessimo +aveste +avesti +avete +aveva +avevamo +avevano +avevate +avevi +avevo +avrai +avranno +avrebbe +avrebbero +avrei +avremmo +avremo +avreste +avresti +avrete +avrà +avrò +avuta +avute +avuti +avuto +basta +ben +bene +benissimo +berlusconi +brava +bravo +buono +c +casa +caso +cento +certa +certe +certi +certo +che +chi +chicchessia +chiunque +ci +ciascuna +ciascuno +cima +cinque +cio +cioe +cio㨠+cioè +circa +citta +città +cittã +ciã² +ciò +co +codesta +codesti +codesto +cogli +coi +col +colei +coll +coloro +colui +come +cominci +comprare +comunque +con +concernente +conciliarsi +conclusione +consecutivi +consecutivo +consiglio +contro +cortesia +cos +cosa +cosi +cos㬠+così +cui +d +da +dagl +dagli +dai +dal +dall +dalla +dalle +dallo +dappertutto +davanti +degl +degli +dei +del +dell +della +delle +dello +dentro +detto +deve +devo +di +dice +dietro +dire +dirimpetto +diventa +diventare +diventato +dopo +doppio +dov +dove +dovra +dovrà +dovrã +dovunque +due +dunque +durante +e +ebbe +ebbero +ebbi +ecc +ecco +ed +effettivamente +egli +ella +entrambi +eppure +era +erano +eravamo +eravate +eri +ero +esempio +esse +essendo +esser +essere +essi +ex +fa +faccia +facciamo +facciano +facciate +faccio +facemmo +facendo +facesse +facessero +facessi +facessimo +faceste +facesti +faceva +facevamo +facevano +facevate +facevi +facevo +fai +fanno +farai +faranno +fare +farebbe +farebbero +farei +faremmo +faremo +fareste +faresti +farete +farà +farò +fatto +favore +fece +fecero +feci +fin +finalmente +finche +fine +fino +forse +forza +fosse +fossero +fossi +fossimo +foste +fosti +fra +frattempo +fu +fui +fummo +fuori +furono +futuro +generale +gente +gia +giacche +giorni +giorno +giu +già +giã +gli +gliela +gliele +glieli +glielo +gliene +governo +grande +grazie +gruppo +ha +haha +hai +hanno +ho +i +ie +ieri +il +improvviso +in +inc +indietro +infatti +inoltre +insieme +intanto +intorno +invece +io +l +la +lasciato +lato +lavoro +le +lei +li +lo +lontano +loro +lui +lungo +luogo +là +lã +ma +macche +magari +maggior +mai +male +malgrado +malissimo +mancanza +marche +me +medesimo +mediante +meglio +meno +mentre +mesi +mezzo +mi +mia +mie +miei +mila +miliardi +milioni +minimi +ministro +mio +modo +molta +molti +moltissimo +molto +momento +mondo +mosto +nazionale +ne +negl +negli +nei +nel +nell +nella +nelle +nello +nemmeno +neppure +nessun +nessuna +nessuno +niente +no +noi +nome +non +nondimeno +nonostante +nonsia +nostra +nostre +nostri +nostro +novanta +nove +nulla +nuovi +nuovo +o +od +oggi +ogni +ognuna +ognuno +oltre +oppure +ora +ore +osi +ossia +ottanta +otto +paese +parecchi +parecchie +parecchio +parte +partendo +peccato +peggio +per +perche +perch㨠+perchè +perché +percio +perciã² +perciò +perfino +pero +persino +persone +perã² +però +piedi +pieno +piglia +piu +piuttosto +piã¹ +più +po +pochissimo +poco +poi +poiche +possa +possedere +posteriore +posto +potrebbe +preferibilmente +presa +press +prima +primo +principalmente +probabilmente +promesso +proprio +puo +pure +purtroppo +puã² +può +qua +qualche +qualcosa +qualcuna +qualcuno +quale +quali +qualunque +quando +quanta +quante +quanti +quanto +quantunque +quarto +quasi +quattro +quel +quella +quelle +quelli +quello +quest +questa +queste +questi +questo +qui +quindi +quinto +realmente +recente +recentemente +registrazione +relativo +riecco +rispetto +salvo +sara +sarai +saranno +sarebbe +sarebbero +sarei +saremmo +saremo +sareste +saresti +sarete +sarà +sarã +sarò +scola +scopo +scorso +se +secondo +seguente +seguito +sei +sembra +sembrare +sembrato +sembrava +sembri +sempre +senza +sette +si +sia +siamo +siano +siate +siete +sig +solito +solo +soltanto +sono +sopra +soprattutto +sotto +spesso +srl +sta +stai +stando +stanno +starai +staranno +starebbe +starebbero +starei +staremmo +staremo +stareste +staresti +starete +starà +starò +stata +state +stati +stato +stava +stavamo +stavano +stavate +stavi +stavo +stemmo +stessa +stesse +stessero +stessi +stessimo +stesso +steste +stesti +stette +stettero +stetti +stia +stiamo +stiano +stiate +sto +su +sua +subito +successivamente +successivo +sue +sugl +sugli +sui +sul +sull +sulla +sulle +sullo +suo +suoi +tale +tali +talvolta +tanto +te +tempo +terzo +th +ti +titolo +torino +tra +tranne +tre +trenta +triplo +troppo +trovato +tu +tua +tue +tuo +tuoi +tutta +tuttavia +tutte +tutti +tutto +uguali +ulteriore +ultimo +un +una +uno +uomo +va +vai +vale +vari +varia +varie +vario +verso +vi +via +vicino +visto +vita +voi +volta +volte +vostra +vostre +vostri +vostro +㨠+è \ No newline at end of file diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_pt.txt b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_pt.txt new file mode 100644 index 000000000..53e429818 --- /dev/null +++ b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_pt.txt @@ -0,0 +1,560 @@ +a +acerca +adeus +agora +ainda +alem +algmas +algo +algumas +alguns +ali +além +ambas +ambos +ano +anos +antes +ao +aonde +aos +apenas +apoio +apontar +apos +após +aquela +aquelas +aquele +aqueles +aqui +aquilo +as +assim +através +atrás +até +aí +baixo +bastante +bem +boa +boas +bom +bons +breve +cada +caminho +catorze +cedo +cento +certamente +certeza +cima +cinco +coisa +com +como +comprido +conhecido +conselho +contra +contudo +corrente +cuja +cujas +cujo +cujos +custa +cá +da +daquela +daquelas +daquele +daqueles +dar +das +de +debaixo +dela +delas +dele +deles +demais +dentro +depois +desde +desligado +dessa +dessas +desse +desses +desta +destas +deste +destes +deve +devem +deverá +dez +dezanove +dezasseis +dezassete +dezoito +dia +diante +direita +dispoe +dispoem +diversa +diversas +diversos +diz +dizem +dizer +do +dois +dos +doze +duas +durante +dá +dão +dúvida +e +ela +elas +ele +eles +em +embora +enquanto +entao +entre +então +era +eram +essa +essas +esse +esses +esta +estado +estamos +estar +estará +estas +estava +estavam +este +esteja +estejam +estejamos +estes +esteve +estive +estivemos +estiver +estivera +estiveram +estiverem +estivermos +estivesse +estivessem +estiveste +estivestes +estivéramos +estivéssemos +estou +está +estás +estávamos +estão +eu +exemplo +falta +fará +favor +faz +fazeis +fazem +fazemos +fazer +fazes +fazia +faço +fez +fim +final +foi +fomos +for +fora +foram +forem +forma +formos +fosse +fossem +foste +fostes +fui +fôramos +fôssemos +geral +grande +grandes +grupo +ha +haja +hajam +hajamos +havemos +havia +hei +hoje +hora +horas +houve +houvemos +houver +houvera +houveram +houverei +houverem +houveremos +houveria +houveriam +houvermos +houverá +houverão +houveríamos +houvesse +houvessem +houvéramos +houvéssemos +há +hão +iniciar +inicio +ir +irá +isso +ista +iste +isto +já +lado +lhe +lhes +ligado +local +logo +longe +lugar +lá +maior +maioria +maiorias +mais +mal +mas +me +mediante +meio +menor +menos +meses +mesma +mesmas +mesmo +mesmos +meu +meus +mil +minha +minhas +momento +muito +muitos +máximo +mês +na +nada +nao +naquela +naquelas +naquele +naqueles +nas +nem +nenhuma +nessa +nessas +nesse +nesses +nesta +nestas +neste +nestes +no +noite +nome +nos +nossa +nossas +nosso +nossos +nova +novas +nove +novo +novos +num +numa +numas +nunca +nuns +não +nível +nós +número +o +obra +obrigada +obrigado +oitava +oitavo +oito +onde +ontem +onze +os +ou +outra +outras +outro +outros +para +parece +parte +partir +paucas +pegar +pela +pelas +pelo +pelos +perante +perto +pessoas +pode +podem +poder +poderá +podia +pois +ponto +pontos +por +porque +porquê +portanto +posição +possivelmente +posso +possível +pouca +pouco +poucos +povo +primeira +primeiras +primeiro +primeiros +promeiro +propios +proprio +própria +próprias +próprio +próprios +próxima +próximas +próximo +próximos +puderam +pôde +põe +põem +quais +qual +qualquer +quando +quanto +quarta +quarto +quatro +que +quem +quer +quereis +querem +queremas +queres +quero +questão +quieto +quinta +quinto +quinze +quáis +quê +relação +sabe +sabem +saber +se +segunda +segundo +sei +seis +seja +sejam +sejamos +sem +sempre +sendo +ser +serei +seremos +seria +seriam +será +serão +seríamos +sete +seu +seus +sexta +sexto +sim +sistema +sob +sobre +sois +somente +somos +sou +sua +suas +são +sétima +sétimo +só +tal +talvez +tambem +também +tanta +tantas +tanto +tarde +te +tem +temos +tempo +tendes +tenha +tenham +tenhamos +tenho +tens +tentar +tentaram +tente +tentei +ter +terceira +terceiro +terei +teremos +teria +teriam +terá +terão +teríamos +teu +teus +teve +tinha +tinham +tipo +tive +tivemos +tiver +tivera +tiveram +tiverem +tivermos +tivesse +tivessem +tiveste +tivestes +tivéramos +tivéssemos +toda +todas +todo +todos +trabalhar +trabalho +treze +três +tu +tua +tuas +tudo +tão +tém +têm +tínhamos +um +uma +umas +uns +usa +usar +vai +vais +valor +veja +vem +vens +ver +verdade +verdadeiro +vez +vezes +viagem +vindo +vinte +você +vocês +vos +vossa +vossas +vosso +vossos +vários +vão +vêm +vós +zero +à +às +área +é +éramos +és +último \ No newline at end of file diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/translation_map.csv b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/translation_map.csv new file mode 100644 index 000000000..201a31b90 --- /dev/null +++ b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/translation_map.csv @@ -0,0 +1,47 @@ +1;university;università;universitario;universitaria;université;universitaire;universitaires;universidad;universitade;Universität;Uniwersytet;университет;universiteit;πανεπιστήμιο +2;studies;studi;études;estudios;estudos;Studien;studia;исследования;studies;σπουδές +3;advanced;superiore;supérieur;supérieure;supérieurs;supérieures;avancado;avancados;fortgeschrittene;fortgeschritten;zaawansowany;передовой;gevorderd;gevorderde;προχωρημένος;προχωρημένη;προχωρημένο;προχωρημένες;προχωρημένα +4;institute;istituto;institut;instituto;instituto;Institut;instytut;институт;instituut;ινστιτούτο +5;hospital;ospedale;hôpital;hospital;hospital;Krankenhaus;szpital;больница;ziekenhuis;νοσοκομείο +6;research;ricerca;recherche;investigacion;pesquisa;Forschung;badania;исследования;onderzoek;έρευνα +7;college;collegio;université;colegio;faculdade;Hochschule;Szkoła Wyższa;Высшая школа;universiteit;κολλέγιο +8;foundation;fondazione;fondation;fundación;fundação;Stiftung;Fundacja;фонд;stichting;ίδρυμα +9;center;centro;centre;centro;centro;zentrum;centrum;центр;centrum;κέντρο +10;national;nazionale;national;nationale;nationaux;nationales;nacional;nacional;national;krajowy;национальный;nationaal;nationale;εθνικό +11;association;associazione;association;asociación;associação;Verein;verband;stowarzyszenie;ассоциация;associatie +12;society;societa;société;sociedad;sociedade;gesellschaft;społeczeństwo;общество;maatschappij;κοινωνία +13;international;internazionale;international;internacional;internacional;international;międzynarodowy;Международный;internationaal;internationale;διεθνής;διεθνή;διεθνές +14;community;comunita;communauté;comunidad;comunidade;Gemeinschaft;społeczność;сообщество;gemeenschap;κοινότητα +15;school;scuola;école;escuela;escola;schule;Szkoła;школа;school;σχολείο +16;education;educazione;éducation;educacion;Educação;Bildung;Edukacja;образование;opleiding;εκπαίδευση +17;academy;accademia;académie;academia;academia;Akademie;akademie;академия;academie;ακαδημία +18;public;pubblico;public;publique;publics;publiques;publico;publico;Öffentlichkeit;publiczny;публичный;publiek;publieke;δημόσιος;δημόσια;δημόσιο +19;museum;museo;musée;mueso;museu;museum;muzeum;музей;museum;μουσείο +20;group;gruppo;groupe;grupo;grupo;gruppe;grupa;группа;groep;ομάδα;όμιλος +21;department;dipartimento;département;departamento;departamento;abteilung;departament;отдел;afdeling;τμήμα +22;council;consiglio;conseil;Consejo;conselho;gesellschaft;rada;совет;raad;συμβούλιο +23;library;biblioteca;bibliothèque;biblioteca;biblioteca;Bibliothek;biblioteka;библиотека;bibliotheek;βιβλιοθήκη +24;ministry;ministero;ministère;ministerio;ministério;Ministerium;ministerstwo;министерство;ministerie;υπουργείο +25;services;servizi;services;servicios;Serviços;Dienstleistungen;usługi;услуги;diensten;υπηρεσίες +26;central;centrale;central;centrale;centrales;central;central;zentral;centralny;цетральный;centraal;κεντρικός;κεντρική;κεντρικό;κεντρικά +27;general;generale;général;générale;généraux;générales;general;geral;general;Allgemeines;general;общий;algemeen;algemene;γενικός;γενική;γενικό;γενικά +28;applied;applicati;appliqué;appliquée;appliqués;appliquées;aplicado;aplicada;angewendet;stosowany;прикладной;toegepast;toegepaste;εφαρμοσμένος;εφαρμοσμένη;εφαρμοσμένο;εφαρμοσμένα +29;european;europee;europea;européen;européenne;européens;européennes;europeo;europeu;europäisch;europejski;европейский;Europees;Europese;ευρωπαϊκός;ευρωπαϊκή;ευρωπαϊκό;ευρωπαϊκά +30;agency;agenzia;agence;agencia;agencia;agentur;agencja;агенция;agentschap;πρακτορείο +31;laboratory;laboratorio;laboratoire;laboratorio;laboratorio;labor;laboratorium;лаборатория;laboratorium;εργαστήριο +32;industry;industria;industrie;индустрия;industrie;βιομηχανία +33;industrial;industriale;industriel;industrielle;industriels;industrielles;индустриальный;industrieel;βιομηχανικός;βιομηχανική;βιομηχανικό;βιομηχανικά;βιομηχανικές +34;consortium;consorzio;consortium;консорциум;consortium;κοινοπραξία +35;organization;organizzazione;organisation;organización;organização;organizacja;организация;organisatie;οργανισμός +36;authority;autorità;autorité;авторитет;autoriteit +37;federation;federazione;fédération;федерация;federatie;ομοσπονδία +38;observatory;osservatorio;observatoire;обсерватория;observatorium;αστεροσκοπείο +39;bureau;ufficio;bureau;офис;bureau;γραφείο +40;company;impresa;compagnie;société;компания;bedrijf;εταιρία +41;polytechnic;politecnico;polytechnique;политехника;polytechnisch;πολυτεχνείο +42;coalition;coalizione;coalition;коалиция;coalitie;συνασπισμός +43;initiative;iniziativa;initiative;инициатива;initiatief;πρωτοβουλία +44;academic;accademico;académique;universitaire;акадеческий academisch;ακαδημαϊκός;ακαδημαϊκή;ακαδημαϊκό;ακαδημαϊκές;ακαδημαϊκοί +45;institution;istituzione;institution;институциональный;instelling;ινστιτούτο +46;division;divisione;division;отделение;divisie;τμήμα +47;committee;comitato;comité;комитет;commissie;επιτροπή \ No newline at end of file diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/AbstractPaceTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/AbstractPaceTest.java index 9d3919194..13288c9fa 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/AbstractPaceTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/AbstractPaceTest.java @@ -3,11 +3,13 @@ package eu.dnetlib.pace; import java.io.IOException; import java.io.StringWriter; +import com.sun.webkit.network.URLs; import org.apache.commons.io.IOUtils; import eu.dnetlib.pace.config.Type; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.model.FieldValueImpl; +import org.junit.Test; public abstract class AbstractPaceTest { @@ -29,4 +31,8 @@ public abstract class AbstractPaceTest { return new FieldValueImpl(Type.JSON, "person", s); } + protected Field url(final String s) { + return new FieldValueImpl(Type.URL, "url", s); + } + } diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java index c8bbda17c..71c23a811 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java @@ -5,6 +5,8 @@ import java.util.Map; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import eu.dnetlib.pace.AbstractPaceTest; +import eu.dnetlib.pace.common.AbstractPaceFunctions; +import eu.dnetlib.pace.model.Field; import org.junit.Before; import org.junit.Test; @@ -17,6 +19,16 @@ public class ClusteringFunctionTest extends AbstractPaceTest { params = Maps.newHashMap(); } + @Test + public void testUrlClustering() { + + final ClusteringFunction urlClustering = new UrlClustering(params); + + final String s = "http://www.test.it/path/to/resource"; + System.out.println(s); + System.out.println(urlClustering.apply(Lists.newArrayList(url(s)))); + } + @Test public void testNgram() { params.put("ngramLen", 3); diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java index f28251c57..a9068a893 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java @@ -1,18 +1,27 @@ package eu.dnetlib.pace.distance; +import eu.dnetlib.pace.distance.algo.JaroWinklerNormalizedName; +import org.apache.commons.lang.StringUtils; import org.junit.Before; import org.junit.Test; import eu.dnetlib.pace.common.AbstractPaceFunctions; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + public class DistanceAlgoTest extends AbstractPaceFunctions { private final static String TEST_STRING = "Toshiba NB550D: è un netbook su piattaforma AMD Fusion⁽¹²⁾."; + private Map params; @Before public void setup() { System.out.println("****************************************************************"); System.out.println("Test String : " + TEST_STRING); + params = new HashMap<>(); + params.put("weight", 1.0); } @Test @@ -35,4 +44,12 @@ public class DistanceAlgoTest extends AbstractPaceFunctions { System.out.println("cleaned up : " + cleanup(TEST_STRING)); } + @Test + public void testJaroWinklerNormalizedName() { + final JaroWinklerNormalizedName jaroWinklerNormalizedName = new JaroWinklerNormalizedName(params); + double result = jaroWinklerNormalizedName.distance("universita degli studi di genova", "universita di genova"); + + System.out.println(result); + } + } From 4c8485d0bb53433ec7371353f007934cfe059234 Mon Sep 17 00:00:00 2001 From: Michele De Bonis Date: Tue, 6 Nov 2018 09:48:22 +0100 Subject: [PATCH 021/449] deleted useless imports --- .../src/test/java/eu/dnetlib/pace/AbstractPaceTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/AbstractPaceTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/AbstractPaceTest.java index 13288c9fa..8a0c08d85 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/AbstractPaceTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/AbstractPaceTest.java @@ -3,7 +3,6 @@ package eu.dnetlib.pace; import java.io.IOException; import java.io.StringWriter; -import com.sun.webkit.network.URLs; import org.apache.commons.io.IOUtils; import eu.dnetlib.pace.config.Type; From b247a86e69b8214496347b4085736f0a7e7e378c Mon Sep 17 00:00:00 2001 From: Michele De Bonis Date: Tue, 6 Nov 2018 11:02:00 +0100 Subject: [PATCH 022/449] configuration files changed: dedupRun instead of run, assertion updated in tests --- .../eu/dnetlib/pace/distance/algo/SortedLevel2JaroWinkler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedLevel2JaroWinkler.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedLevel2JaroWinkler.java index e53df09c8..1a12e1688 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedLevel2JaroWinkler.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedLevel2JaroWinkler.java @@ -8,7 +8,7 @@ import java.util.Map; /** * The Class SortedJaroWinkler. */ -@DistanceClass("Sorted2JaroWinkler") +@DistanceClass("SortedLevel2JaroWinkler") public class SortedLevel2JaroWinkler extends SortedSecondStringDistanceAlgo { /** From e1c69ad24e0324f70f946e7e21a31a378508d166 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Mon, 12 Nov 2018 11:23:57 +0100 Subject: [PATCH 023/449] [maven-release-plugin] prepare release dnet-dedup-3.0.1 --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 51958c50c..b0ba26979 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 3.0.1-SNAPSHOT + 3.0.1 ../pom.xml From 46cee13596cd9987757a1ab7bc7c64a6e9798808 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Mon, 12 Nov 2018 11:24:06 +0100 Subject: [PATCH 024/449] [maven-release-plugin] prepare for next development iteration --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index b0ba26979..2d07fb290 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 3.0.1 + 3.0.2-SNAPSHOT ../pom.xml From 6d0904128886e56afe71ce0ea040dbdca9af8a8b Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Mon, 12 Nov 2018 11:28:28 +0100 Subject: [PATCH 025/449] [maven-release-plugin] rollback the release of dnet-dedup-3.0.1 --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 2d07fb290..51958c50c 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 3.0.2-SNAPSHOT + 3.0.1-SNAPSHOT ../pom.xml From f283d58a6edc9ab5b94b5963be898e0f95f99694 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Mon, 12 Nov 2018 11:38:52 +0100 Subject: [PATCH 026/449] [maven-release-plugin] prepare release dnet-dedup-3.0.1 --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 51958c50c..b0ba26979 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 3.0.1-SNAPSHOT + 3.0.1 ../pom.xml From 851ae5eec32064257adc428ba4fee5fd43816587 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Mon, 12 Nov 2018 11:39:07 +0100 Subject: [PATCH 027/449] [maven-release-plugin] rollback the release of dnet-dedup-3.0.1 --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index b0ba26979..51958c50c 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 3.0.1 + 3.0.1-SNAPSHOT ../pom.xml From 8cc2517f5da29e397119a9ab2922f0795a855c72 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Mon, 12 Nov 2018 11:40:34 +0100 Subject: [PATCH 028/449] [maven-release-plugin] prepare release dnet-dedup-3.0.1 --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 51958c50c..b0ba26979 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 3.0.1-SNAPSHOT + 3.0.1 ../pom.xml From 3dacba37ea5a50b11e1a0e6ad8f6b23d767ea519 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Mon, 12 Nov 2018 11:40:42 +0100 Subject: [PATCH 029/449] [maven-release-plugin] prepare for next development iteration --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index b0ba26979..2d07fb290 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 3.0.1 + 3.0.2-SNAPSHOT ../pom.xml From b7bc7f0401cc5b28ebf7f4ed702beb9432721580 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Mon, 12 Nov 2018 12:46:06 +0100 Subject: [PATCH 030/449] getting rid of spark libs from dnet-pace-core --- dnet-pace-core/pom.xml | 11 ++++++++-- .../pace/common/AbstractPaceFunctions.java | 22 ++++++++----------- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 2d07fb290..dfe97056b 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -59,10 +59,17 @@ org.reflections reflections + - org.apache.spark - spark-core_2.11 + com.fasterxml.jackson.core + jackson-databind + + org.codehaus.jackson + jackson-mapper-asl + + + diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java index 9fa67d7c1..d07b1974f 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java @@ -1,26 +1,22 @@ package eu.dnetlib.pace.common; -import java.text.Normalizer; -import java.util.*; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import com.google.common.collect.Maps; -import eu.dnetlib.pace.distance.algo.JaroWinklerNormalizedName; -import org.apache.commons.collections.CollectionUtils; -import org.apache.commons.io.IOUtils; -import org.apache.commons.lang.StringUtils; - import com.google.common.base.Joiner; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.google.common.collect.Sets; - import eu.dnetlib.pace.clustering.NGramUtils; +import eu.dnetlib.pace.distance.algo.JaroWinklerNormalizedName; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.model.FieldList; import eu.dnetlib.pace.model.FieldListImpl; -import org.apache.spark.util.CollectionsUtils; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang.StringUtils; + +import java.text.Normalizer; +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** * Set of common functions From e247218987646255dc1cc4311d8a55df8d9c8ab9 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Mon, 12 Nov 2018 12:46:42 +0100 Subject: [PATCH 031/449] [maven-release-plugin] prepare release dnet-dedup-3.0.2 --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index dfe97056b..066306d53 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 3.0.2-SNAPSHOT + 3.0.2 ../pom.xml From 2a509b18fa6b907b708ad0b3ed9adc81502256be Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Mon, 12 Nov 2018 12:46:50 +0100 Subject: [PATCH 032/449] [maven-release-plugin] prepare for next development iteration --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 066306d53..d0b4a150a 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 3.0.2 + 3.0.3-SNAPSHOT ../pom.xml From b5062f542927fcf3df25ff063d44eb07e913aca4 Mon Sep 17 00:00:00 2001 From: Michele De Bonis Date: Mon, 12 Nov 2018 14:11:15 +0100 Subject: [PATCH 033/449] configuration file updated, addition of condition on domain --- .../pace/common/AbstractPaceFunctions.java | 19 ++-- .../pace/condition/DomainExactMatch.java | 30 ++++++ .../dnetlib/pace/config/translation_map.csv | 94 +++++++++---------- 3 files changed, 88 insertions(+), 55 deletions(-) create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/DomainExactMatch.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java index 9fa67d7c1..dde321816 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java @@ -190,13 +190,14 @@ public abstract class AbstractPaceFunctions { final StringBuilder sb = new StringBuilder(); while (st.hasMoreTokens()){ final String token = st.nextToken(); - sb.append(" " + translationMap.getOrDefault(token,token) + " "); + sb.append(translationMap.getOrDefault(token,token) + " "); } - return sb.toString(); + return sb.toString().trim(); } + //TODO remove also codes of the cities public String removeCodes(String s) { - final String regex = " \\d+ "; + final String regex = "\\bkey::[0-9]*\\b"; return s.replaceAll(regex, "").trim(); } @@ -213,17 +214,19 @@ public abstract class AbstractPaceFunctions { } //get the list of keywords in a string - public List getKeywords(String s) { + public List getKeywords(String s) { - final String regex = " \\d+ "; +// final String regex = " \\d+ "; + + final String regex = "\\bkey::[0-9]*\\b"; Pattern p = Pattern.compile(regex, Pattern.MULTILINE); Matcher m = p.matcher(s); - List codes = new ArrayList<>(); + List codes = new ArrayList<>(); while (m.find()) { - codes.add(Integer.parseInt(m.group(0).replace(" ", ""))); + codes.add(m.group(0)); for (int i = 1; i <= m.groupCount(); i++) { - codes.add(Integer.parseInt(m.group(0).replace(" ", ""))); + codes.add(m.group(0)); } } return codes; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/DomainExactMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/DomainExactMatch.java new file mode 100644 index 000000000..e415f1565 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/DomainExactMatch.java @@ -0,0 +1,30 @@ +package eu.dnetlib.pace.condition; + +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.FieldDef; + +import java.net.MalformedURLException; +import java.net.URL; +import java.util.List; + +@ConditionClass("DomainExactMatch") +public class DomainExactMatch extends ExactMatchIgnoreCase { + + public DomainExactMatch(String cond, List fields) { + super(cond, fields); + } + + @Override + protected String getValue(final Field f) { + return asUrl(super.getValue(f)).getHost(); + } + + private URL asUrl(final String value) { + try { + return new URL(value); + } catch (MalformedURLException e) { + // should not happen as checked by pace typing + throw new IllegalStateException("invalid URL: " + value); + } + } +} diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/translation_map.csv b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/translation_map.csv index 201a31b90..cd1479688 100644 --- a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/translation_map.csv +++ b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/translation_map.csv @@ -1,47 +1,47 @@ -1;university;università;universitario;universitaria;université;universitaire;universitaires;universidad;universitade;Universität;Uniwersytet;университет;universiteit;πανεπιστήμιο -2;studies;studi;études;estudios;estudos;Studien;studia;исследования;studies;σπουδές -3;advanced;superiore;supérieur;supérieure;supérieurs;supérieures;avancado;avancados;fortgeschrittene;fortgeschritten;zaawansowany;передовой;gevorderd;gevorderde;προχωρημένος;προχωρημένη;προχωρημένο;προχωρημένες;προχωρημένα -4;institute;istituto;institut;instituto;instituto;Institut;instytut;институт;instituut;ινστιτούτο -5;hospital;ospedale;hôpital;hospital;hospital;Krankenhaus;szpital;больница;ziekenhuis;νοσοκομείο -6;research;ricerca;recherche;investigacion;pesquisa;Forschung;badania;исследования;onderzoek;έρευνα -7;college;collegio;université;colegio;faculdade;Hochschule;Szkoła Wyższa;Высшая школа;universiteit;κολλέγιο -8;foundation;fondazione;fondation;fundación;fundação;Stiftung;Fundacja;фонд;stichting;ίδρυμα -9;center;centro;centre;centro;centro;zentrum;centrum;центр;centrum;κέντρο -10;national;nazionale;national;nationale;nationaux;nationales;nacional;nacional;national;krajowy;национальный;nationaal;nationale;εθνικό -11;association;associazione;association;asociación;associação;Verein;verband;stowarzyszenie;ассоциация;associatie -12;society;societa;société;sociedad;sociedade;gesellschaft;społeczeństwo;общество;maatschappij;κοινωνία -13;international;internazionale;international;internacional;internacional;international;międzynarodowy;Международный;internationaal;internationale;διεθνής;διεθνή;διεθνές -14;community;comunita;communauté;comunidad;comunidade;Gemeinschaft;społeczność;сообщество;gemeenschap;κοινότητα -15;school;scuola;école;escuela;escola;schule;Szkoła;школа;school;σχολείο -16;education;educazione;éducation;educacion;Educação;Bildung;Edukacja;образование;opleiding;εκπαίδευση -17;academy;accademia;académie;academia;academia;Akademie;akademie;академия;academie;ακαδημία -18;public;pubblico;public;publique;publics;publiques;publico;publico;Öffentlichkeit;publiczny;публичный;publiek;publieke;δημόσιος;δημόσια;δημόσιο -19;museum;museo;musée;mueso;museu;museum;muzeum;музей;museum;μουσείο -20;group;gruppo;groupe;grupo;grupo;gruppe;grupa;группа;groep;ομάδα;όμιλος -21;department;dipartimento;département;departamento;departamento;abteilung;departament;отдел;afdeling;τμήμα -22;council;consiglio;conseil;Consejo;conselho;gesellschaft;rada;совет;raad;συμβούλιο -23;library;biblioteca;bibliothèque;biblioteca;biblioteca;Bibliothek;biblioteka;библиотека;bibliotheek;βιβλιοθήκη -24;ministry;ministero;ministère;ministerio;ministério;Ministerium;ministerstwo;министерство;ministerie;υπουργείο -25;services;servizi;services;servicios;Serviços;Dienstleistungen;usługi;услуги;diensten;υπηρεσίες -26;central;centrale;central;centrale;centrales;central;central;zentral;centralny;цетральный;centraal;κεντρικός;κεντρική;κεντρικό;κεντρικά -27;general;generale;général;générale;généraux;générales;general;geral;general;Allgemeines;general;общий;algemeen;algemene;γενικός;γενική;γενικό;γενικά -28;applied;applicati;appliqué;appliquée;appliqués;appliquées;aplicado;aplicada;angewendet;stosowany;прикладной;toegepast;toegepaste;εφαρμοσμένος;εφαρμοσμένη;εφαρμοσμένο;εφαρμοσμένα -29;european;europee;europea;européen;européenne;européens;européennes;europeo;europeu;europäisch;europejski;европейский;Europees;Europese;ευρωπαϊκός;ευρωπαϊκή;ευρωπαϊκό;ευρωπαϊκά -30;agency;agenzia;agence;agencia;agencia;agentur;agencja;агенция;agentschap;πρακτορείο -31;laboratory;laboratorio;laboratoire;laboratorio;laboratorio;labor;laboratorium;лаборатория;laboratorium;εργαστήριο -32;industry;industria;industrie;индустрия;industrie;βιομηχανία -33;industrial;industriale;industriel;industrielle;industriels;industrielles;индустриальный;industrieel;βιομηχανικός;βιομηχανική;βιομηχανικό;βιομηχανικά;βιομηχανικές -34;consortium;consorzio;consortium;консорциум;consortium;κοινοπραξία -35;organization;organizzazione;organisation;organización;organização;organizacja;организация;organisatie;οργανισμός -36;authority;autorità;autorité;авторитет;autoriteit -37;federation;federazione;fédération;федерация;federatie;ομοσπονδία -38;observatory;osservatorio;observatoire;обсерватория;observatorium;αστεροσκοπείο -39;bureau;ufficio;bureau;офис;bureau;γραφείο -40;company;impresa;compagnie;société;компания;bedrijf;εταιρία -41;polytechnic;politecnico;polytechnique;политехника;polytechnisch;πολυτεχνείο -42;coalition;coalizione;coalition;коалиция;coalitie;συνασπισμός -43;initiative;iniziativa;initiative;инициатива;initiatief;πρωτοβουλία -44;academic;accademico;académique;universitaire;акадеческий academisch;ακαδημαϊκός;ακαδημαϊκή;ακαδημαϊκό;ακαδημαϊκές;ακαδημαϊκοί -45;institution;istituzione;institution;институциональный;instelling;ινστιτούτο -46;division;divisione;division;отделение;divisie;τμήμα -47;committee;comitato;comité;комитет;commissie;επιτροπή \ No newline at end of file +key::1;university;università;universitario;universitaria;université;universitaire;universitaires;universidad;universitade;Universität;Uniwersytet;университет;universiteit;πανεπιστήμιο +key::2;studies;studi;études;estudios;estudos;Studien;studia;исследования;studies;σπουδές +key::3;advanced;superiore;supérieur;supérieure;supérieurs;supérieures;avancado;avancados;fortgeschrittene;fortgeschritten;zaawansowany;передовой;gevorderd;gevorderde;προχωρημένος;προχωρημένη;προχωρημένο;προχωρημένες;προχωρημένα +key::4;institute;istituto;institut;instituto;instituto;Institut;instytut;институт;instituut;ινστιτούτο +key::5;hospital;ospedale;hôpital;hospital;hospital;Krankenhaus;szpital;больница;ziekenhuis;νοσοκομείο +key::6;research;ricerca;recherche;investigacion;pesquisa;Forschung;badania;исследования;onderzoek;έρευνα +key::7;college;collegio;université;colegio;faculdade;Hochschule;Szkoła Wyższa;Высшая школа;universiteit;κολλέγιο +key::8;foundation;fondazione;fondation;fundación;fundação;Stiftung;Fundacja;фонд;stichting;ίδρυμα +key::9;center;centro;centre;centro;centro;zentrum;centrum;центр;centrum;κέντρο +key::10;national;nazionale;national;nationale;nationaux;nationales;nacional;nacional;national;krajowy;национальный;nationaal;nationale;εθνικό +key::11;association;associazione;association;asociación;associação;Verein;verband;stowarzyszenie;ассоциация;associatie +key::12;society;societa;société;sociedad;sociedade;gesellschaft;społeczeństwo;общество;maatschappij;κοινωνία +key::13;international;internazionale;international;internacional;internacional;international;międzynarodowy;Международный;internationaal;internationale;διεθνής;διεθνή;διεθνές +key::14;community;comunita;communauté;comunidad;comunidade;Gemeinschaft;społeczność;сообщество;gemeenschap;κοινότητα +key::15;school;scuola;école;escuela;escola;schule;Szkoła;школа;school;σχολείο +key::16;education;educazione;éducation;educacion;Educação;Bildung;Edukacja;образование;opleiding;εκπαίδευση +key::17;academy;accademia;académie;academia;academia;Akademie;akademie;академия;academie;ακαδημία +key::18;public;pubblico;public;publique;publics;publiques;publico;publico;Öffentlichkeit;publiczny;публичный;publiek;publieke;δημόσιος;δημόσια;δημόσιο +key::19;museum;museo;musée;mueso;museu;museum;muzeum;музей;museum;μουσείο +key::20;group;gruppo;groupe;grupo;grupo;gruppe;grupa;группа;groep;ομάδα;όμιλος +key::21;department;dipartimento;département;departamento;departamento;abteilung;departament;отдел;afdeling;τμήμα +key::22;council;consiglio;conseil;Consejo;conselho;gesellschaft;rada;совет;raad;συμβούλιο +key::23;library;biblioteca;bibliothèque;biblioteca;biblioteca;Bibliothek;biblioteka;библиотека;bibliotheek;βιβλιοθήκη +key::24;ministry;ministero;ministère;ministerio;ministério;Ministerium;ministerstwo;министерство;ministerie;υπουργείο +key::25;services;servizi;services;servicios;Serviços;Dienstleistungen;usługi;услуги;diensten;υπηρεσίες +key::26;central;centrale;central;centrale;centrales;central;central;zentral;centralny;цетральный;centraal;κεντρικός;κεντρική;κεντρικό;κεντρικά +key::27;general;generale;général;générale;généraux;générales;general;geral;general;Allgemeines;general;общий;algemeen;algemene;γενικός;γενική;γενικό;γενικά +key::28;applied;applicati;appliqué;appliquée;appliqués;appliquées;aplicado;aplicada;angewendet;stosowany;прикладной;toegepast;toegepaste;εφαρμοσμένος;εφαρμοσμένη;εφαρμοσμένο;εφαρμοσμένα +key::29;european;europee;europea;européen;européenne;européens;européennes;europeo;europeu;europäisch;europejski;европейский;Europees;Europese;ευρωπαϊκός;ευρωπαϊκή;ευρωπαϊκό;ευρωπαϊκά +key::30;agency;agenzia;agence;agencia;agencia;agentur;agencja;агенция;agentschap;πρακτορείο +key::31;laboratory;laboratorio;laboratoire;laboratorio;laboratorio;labor;laboratorium;лаборатория;laboratorium;εργαστήριο +key::32;industry;industria;industrie;индустрия;industrie;βιομηχανία +key::33;industrial;industriale;industriel;industrielle;industriels;industrielles;индустриальный;industrieel;βιομηχανικός;βιομηχανική;βιομηχανικό;βιομηχανικά;βιομηχανικές +key::34;consortium;consorzio;consortium;консорциум;consortium;κοινοπραξία +key::35;organization;organizzazione;organisation;organización;organização;organizacja;организация;organisatie;οργανισμός +key::36;authority;autorità;autorité;авторитет;autoriteit +key::37;federation;federazione;fédération;федерация;federatie;ομοσπονδία +key::38;observatory;osservatorio;observatoire;обсерватория;observatorium;αστεροσκοπείο +key::39;bureau;ufficio;bureau;офис;bureau;γραφείο +key::40;company;impresa;compagnie;société;компания;bedrijf;εταιρία +key::41;polytechnic;politecnico;polytechnique;политехника;polytechnisch;πολυτεχνείο +key::42;coalition;coalizione;coalition;коалиция;coalitie;συνασπισμός +key::43;initiative;iniziativa;initiative;инициатива;initiatief;πρωτοβουλία +key::44;academic;accademico;académique;universitaire;акадеческий academisch;ακαδημαϊκός;ακαδημαϊκή;ακαδημαϊκό;ακαδημαϊκές;ακαδημαϊκοί +key::45;institution;istituzione;institution;институциональный;instelling;ινστιτούτο +key::46;division;divisione;division;отделение;divisie;τμήμα +key::47;committee;comitato;comité;комитет;commissie;επιτροπή \ No newline at end of file From df4b871c8b95fea933a37ea5c45d8984f98d4fc6 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Mon, 12 Nov 2018 14:23:29 +0100 Subject: [PATCH 034/449] [maven-release-plugin] prepare release dnet-dedup-3.0.3 --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index d0b4a150a..6f42ad5f9 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 3.0.3-SNAPSHOT + 3.0.3 ../pom.xml From f7616c7a8a9ee8ce7dcd53f2ec1f5b23d608fefb Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Mon, 12 Nov 2018 14:23:36 +0100 Subject: [PATCH 035/449] [maven-release-plugin] prepare for next development iteration --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 6f42ad5f9..ec59151cc 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 3.0.3 + 3.0.4-SNAPSHOT ../pom.xml From 478ad72cb885b209c4435315e36b9e369fb2dd7e Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Mon, 12 Nov 2018 15:52:18 +0100 Subject: [PATCH 036/449] propagate exceptions in case of serialization errors, removed configuration pretty printing, removed unused class ScoredResult --- .../eu/dnetlib/pace/config/DedupConfig.java | 4 +-- .../java/eu/dnetlib/pace/config/WfConfig.java | 5 +-- .../pace/distance/eval/ScoreResult.java | 6 ++-- .../eu/dnetlib/pace/model/ClusteringDef.java | 2 +- .../java/eu/dnetlib/pace/model/CondDef.java | 3 +- .../java/eu/dnetlib/pace/model/FieldDef.java | 11 +++++++ .../dnetlib/pace/model/gt/ScoredResult.java | 32 ------------------ .../eu/dnetlib/pace/config/ConfigTest.java | 33 +++++++++---------- 8 files changed, 37 insertions(+), 59 deletions(-) delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/ScoredResult.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java index 2f6b5e9e0..9d281d71e 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java @@ -101,9 +101,9 @@ public class DedupConfig implements Config, Serializable { @Override public String toString() { try { - return new ObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(this); + return new ObjectMapper().writeValueAsString(this); } catch (IOException e) { - return e.getStackTrace().toString(); + throw new PaceException("unable to serialise configuration", e); } } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/WfConfig.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/WfConfig.java index a2edef3f7..ddcfaaece 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/WfConfig.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/WfConfig.java @@ -9,6 +9,7 @@ import java.util.Set; import com.google.common.collect.Lists; import com.google.common.collect.Sets; import com.google.gson.GsonBuilder; +import eu.dnetlib.pace.util.PaceException; import org.apache.commons.lang.StringUtils; import org.codehaus.jackson.map.ObjectMapper; @@ -252,9 +253,9 @@ public class WfConfig implements Serializable { @Override public String toString() { try { - return new ObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(this); + return new ObjectMapper().writeValueAsString(this); } catch (IOException e) { - return e.getStackTrace().toString(); + throw new PaceException("unable to serialise " + this.getClass().getName(), e); } } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/ScoreResult.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/ScoreResult.java index 4e394b261..62b7d85b4 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/ScoreResult.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/ScoreResult.java @@ -1,6 +1,6 @@ package eu.dnetlib.pace.distance.eval; -import com.google.gson.GsonBuilder; +import eu.dnetlib.pace.util.PaceException; import org.codehaus.jackson.map.ObjectMapper; import java.io.IOException; @@ -54,9 +54,9 @@ public class ScoreResult implements Serializable { @Override public String toString() { try { - return new ObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(this); + return new ObjectMapper().writeValueAsString(this); } catch (IOException e) { - return e.getStackTrace().toString(); + throw new PaceException("unable to serialise " + this.getClass().getName(), e); } } } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java index 57239263a..ece4de896 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java @@ -58,7 +58,7 @@ public class ClusteringDef implements Serializable { try { return new ObjectMapper().writeValueAsString(this); } catch (IOException e) { - return e.getStackTrace().toString(); + throw new PaceException("unable to serialise " + this.getClass().getName(), e); } } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/CondDef.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/CondDef.java index aefd44d95..ccbca5897 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/CondDef.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/CondDef.java @@ -6,6 +6,7 @@ import java.util.List; import eu.dnetlib.pace.condition.*; import eu.dnetlib.pace.config.PaceConfig; +import eu.dnetlib.pace.util.PaceException; import org.codehaus.jackson.map.ObjectMapper; public class CondDef implements Serializable { @@ -41,7 +42,7 @@ public class CondDef implements Serializable { try { return new ObjectMapper().writeValueAsString(this); } catch (IOException e) { - return e.getStackTrace().toString(); + throw new PaceException("unable to serialise " + this.getClass().getName(), e); } } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java index b954df7d6..bcc96c6c0 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java @@ -135,4 +135,15 @@ public class FieldDef implements Serializable { this.params = params; } + public void setName(String name) { + this.name = name; + } + + public void setPath(String path) { + this.path = path; + } + + public void setIgnoreMissing(boolean ignoreMissing) { + this.ignoreMissing = ignoreMissing; + } } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/ScoredResult.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/ScoredResult.java deleted file mode 100644 index 9caecee87..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/ScoredResult.java +++ /dev/null @@ -1,32 +0,0 @@ -package eu.dnetlib.pace.model.gt; - -import org.codehaus.jackson.map.ObjectMapper; - -import java.io.IOException; - -public class ScoredResult extends Result { - - private double meanDistance; - - public ScoredResult() { - super(); - } - - public double getMeanDistance() { - return meanDistance; - } - - public void setMeanDistance(final double meanDistance) { - this.meanDistance = meanDistance; - } - - @Override - public String toString() { - try { - return new ObjectMapper().writeValueAsString(this); - } catch (IOException e) { - return e.getStackTrace().toString(); - } - } - -} diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java index 5ae030674..8be6098f3 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java @@ -1,11 +1,6 @@ package eu.dnetlib.pace.config; -import java.io.IOException; - import eu.dnetlib.pace.AbstractPaceTest; -import eu.dnetlib.pace.model.MapDocument; -import eu.dnetlib.pace.model.MapDocumentSerializer; -import org.apache.commons.io.IOUtils; import org.junit.Test; import static org.junit.Assert.assertEquals; @@ -15,23 +10,25 @@ public class ConfigTest extends AbstractPaceTest { @Test public void dedupConfigSerializationTest() { - final DedupConfig cfgFromClasspath = DedupConfig.load(readFromClasspath("result.pace.conf.json")); + String fromClasspath = readFromClasspath("result.pace.conf.json"); + System.out.println("fromClasspath = " + fromClasspath); - final String conf = cfgFromClasspath.toString(); + final DedupConfig conf = DedupConfig.load(fromClasspath); -// System.out.println("*****SERIALIZED*****"); -// System.out.println(conf); -// System.out.println("*****FROM CLASSPATH*****"); -// System.out.println(readFromClasspath("result.pace.conf.json")); - - final DedupConfig cfgFromSerialization = DedupConfig.load(conf); - - assertEquals(cfgFromClasspath.toString(), cfgFromSerialization.toString()); - - assertNotNull(cfgFromClasspath); - assertNotNull(cfgFromSerialization); + assertNotNull(conf); + String parsed = conf.toString(); + + System.out.println("parsed = " + parsed); + + DedupConfig conf2 = DedupConfig.load(parsed); + + assertNotNull(conf2); + + System.out.println("conf2 = " + conf2); + + assertEquals(parsed, conf2.toString()); } @Test From 59bab8dba45a71c06edae95f61c7b2e02f97f279 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Tue, 13 Nov 2018 09:07:45 +0100 Subject: [PATCH 037/449] less verbose logging --- .../src/main/java/eu/dnetlib/pace/util/BlockProcessor.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java index 3e6cd6ea5..f5a41f5c5 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java @@ -41,7 +41,7 @@ public class BlockProcessor { final Queue q = prepare(documents); if (q.size() > 1) { - log.info("reducing key: '" + key + "' records: " + q.size()); + log.debug("reducing key: '" + key + "' records: " + q.size()); //process(q, context); process(simplifyQueue(q, key, context), context); } else { @@ -109,7 +109,7 @@ public class BlockProcessor { q.addAll(tempResults); } else { context.incrementCounter(wf.getEntityType(), String.format("Skipped records for count(%s) >= %s", wf.getOrderField(), wf.getGroupMaxSize()), tempResults.size()); - log.info("Skipped field: " + fieldRef + " - size: " + tempResults.size() + " - ngram: " + ngram); + log.debug("Skipped field: " + fieldRef + " - size: " + tempResults.size() + " - ngram: " + ngram); } } @@ -150,7 +150,7 @@ public class BlockProcessor { if (!idCurr.equals(idPivot) && (fieldCurr != null)) { final ScoreResult sr = similarity(algo, pivot, curr); - log.info(sr.toString()+"SCORE "+ sr.getScore()); + log.debug(sr.toString()+"SCORE "+ sr.getScore()); emitOutput(sr, idPivot, idCurr, context); i++; } From 399e4bc80f7c447b487432306351a90742a023fc Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Thu, 15 Nov 2018 16:52:56 +0100 Subject: [PATCH 038/449] default (empty) configuration should be aligned with the updated model --- .../eu/dnetlib/pace/config/DedupConfig.java | 2 + .../eu/dnetlib/pace/config/dedupConfig.st | 39 ++++++++++--------- 2 files changed, 23 insertions(+), 18 deletions(-) diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java index 9d281d71e..d7396406f 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java @@ -36,6 +36,8 @@ public class DedupConfig implements Config, Serializable { defaults.put("threshold", "0"); defaults.put("dedupRun", "001"); defaults.put("entityType", "result"); + defaults.put("subEntityType", "resulttype"); + defaults.put("subEntityValue", "publication"); defaults.put("orderField", "title"); defaults.put("queueMaxSize", "2000"); defaults.put("groupMaxSize", "10"); diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/dedupConfig.st b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/dedupConfig.st index fdf569377..5cda4d928 100644 --- a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/dedupConfig.st +++ b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/dedupConfig.st @@ -1,23 +1,26 @@ -{ - "wf" : { - "configurationId" : "$configurationId$", - "threshold" : "$threshold$", - "run" : "$run$", - "entityType" : "$entityType$", - "orderField" : "$orderField$", - "queueMaxSize" : "$queueMaxSize$", - "groupMaxSize" : "$groupMaxSize$", - "slidingWindowSize" : "$slidingWindowSize$", - "rootBuilder" : [ $rootBuilder:{"$it$"};separator=", "$ ], - "includeChildren" : "$includeChildren$" - }, - "pace" : { +{ + "wf" : { + "threshold" : "$threshold$", + "dedupRun" : "$run$", + "entityType" : "$entityType$", + "subEntityType" : "$subEntityType$", + "subEntityValue" : "$subEntityValue$", + "orderField" : "$orderField$", + "queueMaxSize" : "$queueMaxSize$", + "groupMaxSize" : "$groupMaxSize$", + "slidingWindowSize" : "$slidingWindowSize$", + "rootBuilder" : [ $rootBuilder:{"$it$"};separator=", "$ ], + "includeChildren" : "$includeChildren$" + }, + "pace" : { "clustering" : [ - ], - "conditions" : [ - ], + ], + "strictConditions" : [ + ], + "conditions" : [ + ], "model" : [ ], - "blacklists" : { } + "blacklists" : { } } } \ No newline at end of file From 35ab630493bff4f609a38bb67b01bd248fd46215 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Fri, 16 Nov 2018 09:17:53 +0100 Subject: [PATCH 039/449] [maven-release-plugin] prepare release dnet-dedup-3.0.4 --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index ec59151cc..9d9ef298a 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 3.0.4-SNAPSHOT + 3.0.4 ../pom.xml From 55a9b4f5014e465845d42c736f17ec5cd2e5a9a4 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Fri, 16 Nov 2018 09:18:00 +0100 Subject: [PATCH 040/449] [maven-release-plugin] prepare for next development iteration --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 9d9ef298a..1e3f34e5d 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 3.0.4 + 3.0.5-SNAPSHOT ../pom.xml From 3d4372ced96019b1c8a9b60cb7b31cb9753af12a Mon Sep 17 00:00:00 2001 From: Michele De Bonis Date: Fri, 16 Nov 2018 16:11:03 +0100 Subject: [PATCH 041/449] addition of cities check --- dnet-pace-core/pom.xml | 5 + .../pace/common/AbstractPaceFunctions.java | 48 +- .../algo/JaroWinklerNormalizedName.java | 19 +- .../eu/dnetlib/pace/util/BlockProcessor.java | 6 +- .../eu/dnetlib/pace/config/city_map.csv | 8598 +++++++++++++++++ .../pace/distance/DistanceAlgoTest.java | 17 +- 6 files changed, 8674 insertions(+), 19 deletions(-) create mode 100644 dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/city_map.csv diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index d0b4a150a..7a5666830 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -69,6 +69,11 @@ jackson-mapper-asl + + org.apache.commons + commons-math3 + + diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java index 3647b32eb..f987e1208 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java @@ -12,6 +12,7 @@ import eu.dnetlib.pace.model.FieldListImpl; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.io.IOUtils; import org.apache.commons.lang.StringUtils; +import org.apache.commons.math3.stat.descriptive.SummaryStatistics; import java.text.Normalizer; import java.util.*; @@ -171,7 +172,7 @@ public abstract class AbstractPaceFunctions { String[] line = s.split(";"); String value = line[0]; for (String key: line){ - m.put(fixAliases(key),value); + m.put(fixAliases(key).toLowerCase(),value); } } } catch (final Throwable e){ @@ -191,17 +192,21 @@ public abstract class AbstractPaceFunctions { return sb.toString().trim(); } - //TODO remove also codes of the cities + public String normalizeCities(String s1, Map cityMap){ + for (String city : cityMap.keySet()) + s1 = s1.replaceAll(" " + city + " ", " " + cityMap.get(city) + " "); + return s1; + } + public String removeCodes(String s) { - final String regex = "\\bkey::[0-9]*\\b"; - return s.replaceAll(regex, "").trim(); + final String regexKey = "\\bkey::[0-9]*\\b"; + final String regexCity = "\\bcity::[0-9]*\\b"; + return s.replaceAll(regexKey, "").replaceAll(regexCity, "").trim(); + } //check if 2 strings have same keywords public boolean sameKeywords(String s1, String s2){ - //all keywords in common - //return getKeywords(s1).containsAll(getKeywords(s2)) && getKeywords(s2).containsAll(getKeywords(s1)); - //at least 1 keyword in common if (getKeywords(s1).isEmpty() || getKeywords(s2).isEmpty()) return true; @@ -209,11 +214,36 @@ public abstract class AbstractPaceFunctions { return CollectionUtils.intersection(getKeywords(s1),getKeywords(s2)).size()>0; } + //returns true if at least 1 city is in common + //returns true if a name has no cities + public boolean sameCity(String s1, String s2){ + + if (getCities(s1).isEmpty() || getCities(s2).isEmpty()) + return true; + else + return CollectionUtils.intersection(getCities(s1), getCities(s2)).size()>0; + } + + //get the list of keywords in a string + public List getCities(String s) { + + final String regex = "\\bcity::[0-9]*\\b"; + + Pattern p = Pattern.compile(regex, Pattern.MULTILINE); + Matcher m = p.matcher(s); + List codes = new ArrayList<>(); + while (m.find()) { + codes.add(m.group(0)); + for (int i = 1; i <= m.groupCount(); i++) { + codes.add(m.group(0)); + } + } + return codes; + } + //get the list of keywords in a string public List getKeywords(String s) { -// final String regex = " \\d+ "; - final String regex = "\\bkey::[0-9]*\\b"; Pattern p = Pattern.compile(regex, Pattern.MULTILINE); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerNormalizedName.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerNormalizedName.java index ec312cc97..63bebad73 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerNormalizedName.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerNormalizedName.java @@ -5,7 +5,6 @@ import eu.dnetlib.pace.common.AbstractPaceFunctions; import eu.dnetlib.pace.distance.DistanceClass; import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; -import java.util.HashMap; import java.util.Map; import java.util.Set; @@ -22,6 +21,8 @@ public class JaroWinklerNormalizedName extends SecondStringDistanceAlgo { //key=word, value=global identifier => example: "università"->"university", used to substitute the word with the global identifier private static Map translationMap = AbstractPaceFunctions.loadMapFromClasspath("/eu/dnetlib/pace/config/translation_map.csv"); + private static Map cityMap = AbstractPaceFunctions.loadMapFromClasspath("/eu/dnetlib/pace/config/city_map.csv"); + public JaroWinklerNormalizedName(Map params){ super(params, new com.wcohen.ss.JaroWinkler()); } @@ -46,10 +47,22 @@ public class JaroWinklerNormalizedName extends SecondStringDistanceAlgo { ca = translate(ca, translationMap); cb = translate(cb, translationMap); - if (sameKeywords(ca,cb)) { - return normalize(ssalgo.score(removeCodes(ca), removeCodes(cb))); + String norm = normalizeCities(" " + ca + " ||| " + cb + " ", cityMap); + ca = norm.split("\\|\\|\\|")[0].trim(); + cb = norm.split("\\|\\|\\|")[1].trim(); + + if (sameCity(ca,cb)){ + if (sameKeywords(ca,cb)){ + ca = removeCodes(ca); + cb = removeCodes(cb); + if (ca.isEmpty() && cb.isEmpty()) + return 1.0; + else + return normalize(ssalgo.score(ca,cb)); + } } return 0.0; + } @Override diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java index 3e6cd6ea5..1c4078150 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java @@ -41,7 +41,7 @@ public class BlockProcessor { final Queue q = prepare(documents); if (q.size() > 1) { - log.info("reducing key: '" + key + "' records: " + q.size()); +// log.info("reducing key: '" + key + "' records: " + q.size()); //process(q, context); process(simplifyQueue(q, key, context), context); } else { @@ -109,7 +109,7 @@ public class BlockProcessor { q.addAll(tempResults); } else { context.incrementCounter(wf.getEntityType(), String.format("Skipped records for count(%s) >= %s", wf.getOrderField(), wf.getGroupMaxSize()), tempResults.size()); - log.info("Skipped field: " + fieldRef + " - size: " + tempResults.size() + " - ngram: " + ngram); +// log.info("Skipped field: " + fieldRef + " - size: " + tempResults.size() + " - ngram: " + ngram); } } @@ -150,7 +150,7 @@ public class BlockProcessor { if (!idCurr.equals(idPivot) && (fieldCurr != null)) { final ScoreResult sr = similarity(algo, pivot, curr); - log.info(sr.toString()+"SCORE "+ sr.getScore()); +// log.info(sr.toString()+"SCORE "+ sr.getScore()); emitOutput(sr, idPivot, idCurr, context); i++; } diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/city_map.csv b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/city_map.csv new file mode 100644 index 000000000..720b82302 --- /dev/null +++ b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/city_map.csv @@ -0,0 +1,8598 @@ +city::291074;Ras al-Khaimah;Julfa;Khaimah;RKT;Ra's al Khaymah;Ra's al-Chaima;Ras al Khaimah;Ras al-Khaimah;Ras el Khaimah;Ras el Khaïmah;Ras el-Kheima;Ras-ehl'-Khajma;Ra’s al Khaymah;Ra’s al-Chaima;ras alkhymt;Рас-эль-Хайма;رأس الخيمة; +city::292223;Dubai;DXB;Dabei;Dibai;Dibay;Doubayi;Dubae;Dubai;Dubai emiraat;Dubaija;Dubaj;Dubajo;Dubajus;Dubay;Dubayy;Dubaï;Dubái;Dúbæ;Ehmirat Dubaj;Fort Dabei;Ntoumpai;dby;dbyy;di bai;dobai;du bai;duba'i;dubai;dubay;dubi;dwbyy;tupai;Ντουμπάι;Дубаи;Дубай;Эмірат Дубай;Դուբայի Էմիրություն;דובאי;דוביי;دبئی;دبى;دبي;دبی;دوبەی;دۇبائى;दुबई;দুবাই;துபை;దుబాయ్;ದುಬೈ;ദുബായ്;ดูไบ;დუბაი;ドバイ;杜拜;迪拜;두바이; +city::292672;Sharjah;Al Sharjah;Ash 'Mariqah;Ash Shariqa;Ash Shariqah;Ash Shāriqa;Ash Shāriqah;Ash ’Mariqah;Ash-Shariqah emiraat;Ash-Shāriqah emiraat;Charjah;Ch·ardj·a;Gorad Shardzha;SHJ;Sardza;Sardzsa;Sarika;Sarja;Sarjo;Sarza;Schardscha;Shardza;Shardzha;Shardzha kuorat;Sharga;Sharijah;Shariqah;Sharja;Sharjah;Shārijah;Shāriqah;Shārja;Szardza;Szardża;Xarja;Xarjah;alsharqt;amart alsharqt;carja;charc ah;saraja;sarajaha;sarja;sharja;sharjh;sharuja;syaleuja;sʼrgh;xia er jia;Ŝarĵo;Şarika;Şarja;Šardža;Šardžá;Горад Шарджа;Шарджа;Шарджа куорат;Шарџа;Шарҗә;Շարժա;שארגה;إمارة الشارقة;الشارقة;شارجه;شارجہ;शारजा;शारजाह;ਸ਼ਾਰਜਾ;சார்ஜா;షార్జా;ಶಾರ್ಜ;ഷാർജ;ชาร์จาห์;შარჯა;シャールジャ;夏尔迦;샤르자; +city::292878;Al Fujayrah;Al Fujayrah;Al-Fudjayra;Al-Fujayrah' emiraat;FJR;Fudschaira;Fudzhejra;Fujaira;Fujairah;Fujajro;Fujayrah;Fuĵajro;alfjyrt;fjyrt;fu ji la;fujaira;Фуджейра;الفجيرة;فجيرة;フジャイラ;富吉拉; +city::292913;Al Ain;AAN;Ainas;Al Ain;Al Ajn;Al Ayn;Al `Ayn;Al Ɛayn;Al ‘Ayn;Al-Ain;Al-Ajn;Al-Ayin;Al-Ayn;Al-Aïn;Ehl'-Ajn;El Ain;El-Ajn;ai yin;al ain;al-ain;al-aini;alʿyn;ela ena;Ел Аин;Эль-Айн;Ալ-Ային;אל-עין;العين;العین;एल एन;அல் ஐன்;അൽ ഐൻ;ალ-აინი;アル・アイン;艾因;알아인; +city::292932;Ajman;Ajman;Al Ajman;QAJ;Ujman;ʿjman;عجمان; +city::292968;Abu Dhabi;A-pu-that-pi;AEbu Saby;AUH;Aboe Dhabi;Abou Dabi;Abu Dabi;Abu Dabis;Abu Daby;Abu Daibi;Abu Dhabi;Abu Dhabi emiraat;Abu Zabi;Abu Zaby;Abu Zabye;Abu Zabyo;Abu Ḍabi;Abu Ḑabi;Abu-Dabi;Abu-Dabi khot;Abu-Dabio;Abu-Dzabi;Abú Dabí;Abú Daibí;Abú Zabí;Abû Daby;Abū Dabī;Abū Z̧aby;Abū Z̧abye;Abū Z̧abyo;Abū Z̧abī;Ampou Ntampi;Ebu Dabi;Ebu Dhabi;Gorad Abu-Dabi;a bu zha bi;abu dhabi;abu-dabi;abudabi;abudhabi;abw zby;abwzby;aputapi;xa bud abi;Â-pu-tha̍t-pí;Äbu Saby;Əbu-Dabi;Άμπου Ντάμπι;Αμπου Νταμπι;Αμπού Ντάμπι;Абу Даби;Абу-Даби;Абу-Даби хот;Абу-Дабі;Горад Абу-Дабі;Әбу-Даби;Աբու Դաբի;אבו דאבי;أبوظبي;ئەبووزەبی;ابو ظبى;ابوظبی;ابوظہبی;अबु धाबी;अबू धाबी;আবুধাবি;ਅਬੂ ਧਾਬੀ;ଆବୁଧାବି;அபுதாபி;ಅಬು ಧಾಬಿ;അബുദാബി;අබුඩාබි;อาบูดาบี;ཨ་པོའུ་དྷ་པེ།;အဘူဒါဘီမြို့;აბუ-დაბი;አቡ ዳቢ;アブダビ;阿布扎比;아부다비; +city::1123004;Taloqan;Khanabad;TQN;Taikhan;Taleqan;Talikan;Talikhan;Taliqan;Talkan;Talokan;Taloqan;Talugan;Talukan;Talukanas;Taluqan;Tologan;Tâloqân;Tāleqān;Tāloqān;Tāluqān;Tālīqān;ta lu kan;talokam;talokuvan;taloqana;talqan;Таликан;Талукан;تالقان;तालोक़ान;तालोकां;தலோகுவான்;თალიკანი;塔卢坎; +city::1125444;Shibirghan;Markaz-e Wilayat-e Shibirghan;Markaz-e Wilāyat-e Shibirghan;Seberghan;Sebeṟghān;Shahr-e Sheberghan;Shahr-e Sheberghān;Shayurgan;Shebergan;Sheberghan;Sheberghān;Sheberkhan;Shefrogan;Shibarghan;Shibarghān;Shibergan;Shibirghan;Shibirghān;mrkz wlayt shbrghan;shbrghan;shbrghn;Шеберган;شبرغان;شبرغن;مرکز ولايت شبرغان; +city::1127110;Sar-e Pul;Sar-e Pol;Sar-e Pul;Sar-i-Pul;Sari-Pul';sr pl;Сари-Пуль;سر پل; +city::1130490;Pul-e Khumri;Pol-e Khomri;Pol-e Khomrī;Pul-e Khumri;Pul-e Khumrī;Pul-i-Khomri;Pul-i-Khumri;Pule Khumri;Pule Khumṟi;Puli-Khumri;pl khmry;Пули-Хумри;پل خمری; +city::1133453;Maymana;Daerah Maymana;MMZ;Maimana;Maimanah;Maimāna;Majmana;Maymana;Maymanah;Maïmana;Maīmanah;Meimana;Mejmene;Meymaneh;Meymene;Mimana;Quan Maymana;Quận Maymana;mai ma na;meyamana;mymnh;Меймене;ضلع میمنہ;ميمنه ولسوالۍ;میمنه;میمنہ;मेयमना;迈马纳; +city::1133616;Mazar-e Sharif;MZR;Masar-e Scharif;Mazar-e Sarif;Mazar-e Sharif;Mazar-e Šarif;Mazar-e-Sharif;Mazar-i Szarif;Mazar-i-Sharif;Mazare Srif;Mazari Sharif;Mazari-Sharif;Mazār-e Sharīf;Mazār-e Šarīf;Mazār-i-Sharīf;Mazāre S̄rīf;majaleu-isyalipeu;mazarisharifu;mzar shryf;Мазари-Шариф;مزار شريف;مزار شریف;マザーリシャリーフ;마자르이샤리프; +city::1135689;Kunduz;Kondoz;Konduz;Kondôz;Kondūz;Kundus;Kunduz;Kunduz khot;Kunduzas;Kundúz;Kundūz;Kundūzas;Qonduz;Qondūz;Qunduz;Qundūz;Qunḏūz;Shahr-e Qondoz;UND;kantacu;kndwz;kndz;kuduza;kun dou shi;kundo~uzu;kunduja;kundujeu;kundus;kunduza;qndwz;qndz;Кундуз;Кундуз хот;قندز;قندوز;كندز;کندوز;कुंदुज़;কুন্দুজ;ਕੁੰਦੂਜ਼;கண்டசு;കുന്ദൂസ്;ყუნდუზი;クンドゥーズ;昆都士;쿤두즈; +city::1136469;Khost;KHT;Khost;Khowst;Khōst;Matun;Matūn;khwst;mtwn;Хост;خوست;متون; +city::1136575;Khulm;Bazar-e Khulm;Bāzār-e Khulm;Kholm;Khulm;Tashkurgan;Tashkurghan;Tashqorghan;Tashqurghan;Tāshkurghān;Tāshqorghān;Tāshqurghān;bazar khlm;khlm;tashqrghan;Ташкурган;بازار خلم;تاشقرغان;خلم; +city::1137168;Khanabad;Khanabad;Khānābād;khan abad;Ханабад;خان آباد; +city::1138336;Kandahar;Candahar;Gorad Kandagar;KDH;Kandagar;Kandahar;Kandaharo;Kandahār;Kandehar;Kandhar;Qandahar;Qandahār;Qanḏahāṟ;kan da ha;kandaharu;kndhar;qndhar;qndhʼr;Горад Кандагар;Кандагар;קנדהאר;قندهار;كندهار;カンダハール;坎大哈; +city::1138958;Kabul;Cabool;Caboul;Cabul;Cabul - kabl;Cabul - کابل;Cabura;Cabúl;Caubul;Gorad Kabul;KBL;Kabil;Kaboel;Kabol;Kaboul;Kabul;Kabula;Kabulas;Kabuli;Kabulo;Kabura;Kabúl;Kabûl;Kampoul;Kobul;Kubha;Kábul;Kâbil;Kābol;ka bu er;kabl;kabul;kabula;kabuli;kaburu;kabwl;kapul;ke bu er;khabul;Καμπούλ;Горад Кабул;Кабул;Кобул;Քաբուլ;קאבול;كابل;كابۇل;کابل;کابول;काबुल;কাবুল;ਕਾਬੁਲ;କାବୁଲ;காபூல்;ಕಾಬುಲ್;കാബൂൾ;කාබුල්;คาบูล;ཁ་པལ།;ཁ་པུལ།;ქაბული;ካቡል;ទីក្រុងកាបូល;カブール;カーブル;喀布尔;喀布爾;카불; +city::1139715;Jalalabad;Djelalabad;Dschalalabad;Dzalalabad;Dzhelalabad;Dżalalabad;JAA;Jalakot;Jalal-Kut;Jalalabad;Jalalkoat;Jalalkot;Jalālkot;Jalālābād;Jelalabad;Tarun City;jalalabada;jlal abad;Джелалабад;جلال آباد;جلال‌آباد;জালালাবাদ; +city::1140026;Herat;Gerat;Gorad Gerat;HEA;Herat;Herāt;Hérat;Kherat;Shahr-e Herat;Shahr-e Herāt;he la te;herato;hrat;Герат;Горад Герат;Херат;هراة;هرات;ヘラート;赫拉特; +city::1141269;Ghazni;GZI;Gazni;Ghazni;Ghaznī;Shahr-e Ghazni;Shahr-e Ghaznī;gazni;gazuni;ghznt;ghzny;ghznyn;Газни;غزنة;غزنی;غزنین;ガズニー; +city::1141857;Gardez;GRG;Gardeyz;Gardez;Gardiz;Gardêz;Gardēz;Gardīz;Gaṟḏēz;grdyz;Гардез;گرديز; +city::1145352;Charikar;Caharikar;Carikar;Carikaras;Chaharikar;Chahārīkār;Chairkar;Charekar;Charikar;Chāirkār;Chārīkār;Czarikar;Cāṟikāṟ;Tscharikar;carikar;carikara;charikari;charykar;qia li ka er;Çarikar;Ĉarikar;Čahārikār;Čarikaras;Чарикар;چاريكار;چاریکار;चारीकार;চরিকর;சாரிகார்;ჩარიქარი;恰里卡尔; +city::1147242;Bamyan;BIN;Bamian;Bamiyan;Bamyan;Bāmyān;Bāmīān;Kala Sarkari;Qal`a Sarkarit;Qala Sarkari;Qala Sarkāri;Qal‘a Sarkārit;bamyan;باميان; +city::1147290;Balkh;Bactra;Bactresh;Bakhtar;Balch;Balchas;Balh;Balhika;Balho;Balj;Balkh;Balx;Balĥo;Bamik;Bazirabad;Belh;Belx;Bkahdi;Bākhtar;Daerah Balkh;Quan Balkh;Quận Balkh;Vazirabad;ba er he;balheu;barufu;blk;blkh;Μπαλχ;Балх;Вазирабад;Բալխ;בלך;بلخ;বাল্‌খ;ബൽഖ്;バルフ;巴尔赫;발흐; +city::1147540;Baghlan;Baghlan;Baghlan - bghlan;Baghlan - بغلان;Baghlan-e Jadid;Baghlin;Baghlān;Baghlān-e Jadīd;Baglan;Bagolaggo;Sana `Ati;Sana`ati;bghlan;bghlan jdyd;Şanā ‘Ati;Şanā‘atī;Баглан;بغلان;بغلان جديد;صناعتی; +city::1429434;Bazarak;Bazarak;Bāzārak;bazark;Базарак;بازارك;بازارک; +city::782756;Korce;Corce;Corcë;Coritsa;Coritza;Coriza;Corizza;Corriza;Ghiortsa Corcia;Goerice;Gorica;Goritsa;Görice;Korca;Korce;Korcha;Korche;Korcza;Korica;Korice;Koritsa;Koritza;Korrca;Korrce;Korrça;Korrçë;Korytsa;Korça;Korçë;Korča;Korčė;Körice;ke er cha;koleucheo;korucha;kwrchh;qwrzh;Κορυτσά;Горица;Корча;Կորչա;קורצה;کورچه;کورچہ;コルチャ;科尔察;코르처; +city::783263;Elbasan;Ehl'basan;Elbasan;Elbasani;Elbassan;Эльбасан; +city::3183719;Vlore;Au'lon;Au’lon;Avlon;Avlona;Avlonas;Avlonya;Vallona;Valona;Vl'ora;Vliore;Vliorė;Vljora;Vlona;Vlone;Vlonë;Vlora;Vlore;Vlorë;Vlyora;Vļora;Wlora;beulloleo;fa luo la;flwrh;vurora;wlo rex;wlwrh;Αυλώνας;Валона;Вльора;Влёра;Վլորա;ולורה;فلوره;ولوره;ولورہ;วโลเรอ;ヴロラ;发罗拉;블로러; +city::3183875;Tirana;Gorad Tyrana;TIA;Terana;Theranda;Tiorana;Tiorána;Tiran;Tiran khot;Tiran-a;Tirana;Tiranae;Tirane;Tirano;Tiranë;Tirāna;Tyranna;Tírana;Tîrana;Tėrana;de la na;tilana;tirana;tyrana;tyrnh;Τίρανα;Горад Тырана;Тиран хот;Тиранæ;Тирана;Тиране;Տիրանա;טיראנא;טירנה;تىرانا;تيرانا;تیرانا;तिराना;তিরানা;ਤਿਰਾਨਾ;ଟିରାନା;டிரானா;ടിറാന;ติรานา;ཐིས་རན།;ტირანა;ቲራና;ティラナ;地拉那;티라나; +city::3184081;Shkoder;Iskodra;Scutari;Shkoder;Shkodra;Shkodër;Skadar;Skodra;Szkodra;sqwdr;İşkodra;Škodra;Скадар;Шкодер;Шкодра;שקודר; +city::3185672;Fier;Fearica;Fier;Fieri;Fieris;Fijer;Fjer;Fjeri;a pha'ira;fei xia er;fieru;fyr;pieleu;Фиер;Фиери;Фієрі;Фјер;فیر;अ फाइर;フィエル;非夏爾;피에르; +city::3185728;Durres;Drac;Drach;Drač;Duraso;Durazo;Durazzo;Durazzu;Dures;Duresi;Duresis;Durrazo;Durres;Durresa;Durresi;Durrsi;Durrës;Durrësi;Durts;Durus;Durz;Durësi;Dyrrachio;Dyrrachium;Dyrrakhion;Dyrrhachium;Epidamnos;Gorad Durehs;dou la si;do~urasu;draj;dras;duleoseu;duresi;durres;dwrs;Δυρράχιο;Горад Дурэс;Драч;Дуррес;Дуръс;דורס;دراج;دراس;ดูร์เรส;დურესი;ドゥラス;都拉斯;두러스; +city::616052;Yerevan;Ayrivan;Djerevan;EVN;Eireavan;Eireaván;Ereban;Ereun;Erevan;Erevan osh;Erevana;Erevano;Erevanum;Erevàn;Ereván;Erevāna;Erewan;Erivan;Eriwan;Erywan;Erywań;Gierevan;Gorad Erehvan;Ierevan;Iereván;Iravan;Jerevan;Jerevanas;Jerevani;Jereván;Jerewan;Jerjewan;Revan;Yerevan;Yervandavan;Yerêvan;Yiriwan;Yèrèvan;Yérévan;ayrwan;ereban;erevani;iyerebhana;shhr ayrwan;ye li wen;yeleban;yeravana pranta;yere wan;yerevan;yerevana;yerevhana;yryfan;yrywan;Èrevan;Êrîvan;İrəvan;Γιερεβάν;Ερεβάν;Єреван;Јереван;Горад Ерэван;Ереван;Ереван ош;Երեվան;Երևան;יערעוואן;ירוואן;ایروان;شهر ایروان;يريفان;يېرېۋان;یریوان;یەریڤان;येरवान प्रान्त;येरेवान;येरेव्हान;ইয়েরেভান;யெரெவான்;เยเรวาน;ཡེ་རེ་ཝན།;ერევანი;ዬሬቫን;エレバン;葉里溫;예레반; +city::616530;Vanadzor;Böyük Qarakilsə;Gharak'ilisa;Gharak’ilisa;Gorad Vanadzor;Karakhs;Karakilis;Karaklis;Kirovakan;Kirowakan;Korovakan;Mets Karakilisa;Vanadzor;Vanadzoras;Vanajor;Wanadsor;Wanadzor;banajoleu;vanadzori;vu~anazoru;wa na zuo er;wanadzwr;Ванадзор;Горад Ванадзор;Кировакан;Վանաձոր;وانادزور;ვანაძორი;ヴァナゾル;瓦纳佐尔;바나조르; +city::616635;Gyumri;Alek'pol;Alek'sandrapol;Alek'sandrobol;Aleksandropol';Aleksandropol’;Alek’pol;Alek’sandrapol;Alek’sandrobol;Alexandropol';Alexandropol’;Ghiumri;Gimri;Giumri;Gjoemri;Gjumri;Gorad Gjumry;Guemrue;Gumri;Gumru;Gumry;Gyumri;Gümrü;Kumayri;Kumri;Kyumayri;Kyumri;Kümri;LWN;Leninakan;ghywmry;giumri;gyumeuli;gyumuri;gywmry;jiu mu li;Горад Гюмры;Гюмри;Гјумри;Ґюмрі;Գյումրի;غيومري;گیومری;გიუმრი;ギュムリ;久姆里;규므리; +city::2236568;Uige;Carmona;UGO;Uige;Uije;Uizhe;Uíge;Vila Marchel Carmona;Уиже; +city::2236967;Soio;SZA;Saint Antonio do Zaire;San Antonio;Santo Antoni;Santo Antonio do Zaire;Santo António do Zaire;Santo-Antonio;Santo-António;Sao Antonio;Sazaire;Soio;Soju;Soyo;São Antônio;Сойу; +city::2239076;N'dalatando;Dalatando;N'dalatando;NDF;Ndalatanda;N’dalatando;Salazar;Vila Salazar;Villa Salazar; +city::2239862;Malanje;MEG;Malandje;Malange;Malanje;Malanzhe;Маланже; +city::2240449;Luanda;Gorad Luanda;LAD;Loanda;Louanda;Louanta;Luand;Luanda;Luandae;Luando;Lwanda;Lúanda;Saint Paul de Loanda;Sao Paolo de Loanda;Sao Paulo da Assuncao de Luanda;Sao Paulo de Loanda;Sao Paulo de Luanda;St Paul de Loanda;São Paolo de Loanda;São Paulo da Assunção de Luanda;São Paulo de Loanda;São Paulo de Luanda;lu'anda;luanda;luo an da;luvanta;luxanda;luyanda;lwanda;ruanda;Λουάντα;Горад Луанда;Луандæ;Луанда;Լուանդա;לואנדה;לואנדע;لوآندا;لواندا;لونڈا;लुआंडा;लुआण्डा;লুয়ান্ডা;ਲੁਆਂਦਾ;லுவாண்டா;ลูอันดา;ལའུན་ཌ།;ლუანდა;ሏንዳ;ルアンダ;罗安达;루안다; +city::2243271;Cabinda;CAB;Cabinda;Kabinda;Кабинда; +city::3347019;Namibe;MSZ;Mocamedes;Mossamedes;Moçâmedes;Namibe;Namibė;na mi bei;namibe;namibeu;namybh angwla;Намибе;Намібе;نامیبه، آنگولا;نامیبے;ナミベ;納米貝;나미브; +city::3347762;Lubango;Lubangas;Lubango;SDD;Sa da Bandeira;Sá da Bandeira;lu ban ge;lubang-gu;lwbanghw;lwbngw angwla;rubango;Лубанго;لوبانغو;لوبنگو، آنگولا;ルバンゴ;盧班戈;루방구; +city::3347939;Lobito;LLT;Lobitas;Lobito;Lobitu;Lubitu;lbytw angwla;lobitu;luo bi tuo;robito;Лобито;Лобиту;Лобіту;لبیتو، آنگولا;ロビト;洛比托;로비투; +city::3348078;Cuito;Bie;Bihe;Bihé;Bié;Cuito;Kuito;SVP;Silva Porto;Vila Salva Porto;Куито; +city::3348313;Huambo;Huambas;Huambo;Huamdo;Khuambo;NOV;Nova Lisboa;Uambo;hu'ambo;hwambw angwla;uambu;uanbo;wambu;wan bo;Вилояти Ҳвамбо;Уамбо;Хуамбо;הואמבו;هوامبو، آنگولا;ہوامبو;ਹੁਆਂਬੋ;วัมบู;ウアンボ;万博;우암부; +city::3351663;Benguela;BUG;Bengela;Benguela;Benguella;Sao Felipe de Benguela;São Félipe de Benguela;ben ji la;Бенгела;本吉拉; +city::3427213;Zarate;General J.F. Uriburu;General Jose F. Uriburu;General José F. Uriburu;General Uriburu;Sarate;Saratė;Zarate;Zárate;sa la te;srath;zaraty bwyns ayrs;Зарате;زاراتي، بوينس آيرس;سراته;სარატე;萨拉特; +city::3427833;Tandil;TDL;Tandil;Tandil';Tandilis;tan di er;tandil;tandiru;tandyl;tndyl;Тандил;Тандиль;טנדיל;تانديل;تاندیل;ტანდილი;タンディル;坦迪爾;탄딜; +city::3429577;Resistencia;Ciudad de Resistencia;RES;Resistancia;Resistencia;Resistenseje;Resistensia;Resistensija;Resistensėjė;Resistentia;Resistência;lei xi si teng xi ya;lesiseutensia;re si s ten seiy;reshisutenshia;rsystnsyh;rysystyna;rysystynsya;rzystnsya;rzystnsya chakw;Ресистенсия;Ресистенсија;Ресістенсія;Ռեսիստենսիա;רסיסטנסיה;رزیستنسیا;رزیستنسیا، چاکو;ريسيستينسيا;ریسیستینا;เรซิสเตนเซีย;რესისტენსია;レシステンシア;雷西斯滕西亚;레시스텐시아; +city::3429594;Reconquista;RCQ;Reconquista;Rekonkista;Реконкиста; +city::3429652;Quilmes;Kil'mes;Kilmes;Kilmesas;Quilmes;ji er mei si;kilmeseu;kirumesu;kwylms;kylms;qylms;Килмес;Кильмес;Кільмес;Կիլմես;קילמס;كويلمس;کیلمس;კილმესი;キルメス;基尔梅斯;킬메스; +city::3429790;Puerto Eldorado;Eldorado;Puerto Eldorado; +city::3429886;Posadas;PSS;Posadas;Posadasa;Posadasas;bo sa da si;bwsadas mysywnys;pasadas mysywns;posadaseu;posadasu;pwsadas;Посадас;Պոսադաս;פוסאדאס;بوساداس، ميسيونيس;پاساداس، میسیونس;پوساداس;პოსადასი;ポサーダス;波萨达斯;포사다스; +city::3430340;Obera;Obera;Oberá;Yerbal Viejo;ao wei la;awbra;awbyra;Обера;אוברה;اوبرا;اوبيرا;奧韋拉; +city::3430443;Necochea;NEC;Necochea;Nekoceja;Nekočėja;nei ke qie a;nkwchya;nykwtshya;نيكوتشيا;نکوچئا;ნეკოჩეა;內科切阿; +city::3430545;Moron;6 de Septiembre;Moron;Morón;Seis de Septiembre;mo long;molon;moron;moroni;mwrwn;mwrwn bwyns ayrs;Морон;مورون;مورون، بوينس آيرس;მორონი;モロン;莫龙;모론; +city::3430708;Mercedes;Mercedes;Mercedo;Mersedes;Mersedesas;mei sai de si;mrsds bwynws ayrs;Мерседес;مرسدس، بوئنوس آیرس;مرسيدس، مقاطعة بوينس آيرس;梅塞德斯; +city::3430863;Mar del Plata;Gorad Mar-dehl'-Plata;MDQ;Mar Del Plat;Mar de Plata;Mar del Plata;Mar ntel Plata;Mar-del'-Plata;Mar-del'-Platae;Mar-del-Plata;Mar-del-plata;ma de pu la ta;maleudelpeullata;mar del pla ta;mar dl plata;mara dela plata;maryh dyl blata;Μαρ ντελ Πλάτα;Горад Мар-дэль-Плата;Мар дел Плата;Мар-дель-Платæ;Мар-дель-Плата;Մար-դել-Պլատա;מאר דל פלאטה;مار دل پلاتا;ماريه ديل بلاتا;মার ডেল প্লাটা;มาร์เดลปลาตา;მარ-დელ-პლატა;マル・デル・プラタ;马德普拉塔;마르델플라타; +city::3430988;Lujan;Lujan;Luján;Lukhan;Luxan;lu han;lukhani;lwkhan;Лухан;Լուխան;لوخان;لوخان، مقاطعة بوينس آيرس;ლუხანი;盧漢; +city::3432043;La Plata;Eva Peron;Eva Perón;Gorad La-Plata;LPG;La Plat;La Plata;La-Plata;La-Plata shaary;La-Platae;Laplata;Urbs Platensis;la plata;la pu la ta;lablata;lap lata;lapeullata;rapurata;Λα Πλάτα;Горад Ла-Плата;Ла Плата;Ла-Платæ;Ла-Плата;Ла-Плата шаары;לא פלאטא;לה פלאטה;لا پلاتا;لابلاتا;ला प्लाटा;ला प्लाता;লা প্লাতা;ลาปลาตา;ლა-პლატა;ラプラタ;拉普拉塔;라플라타; +city::3433658;Gualeguaychu;GHU;Gualeguaicu;Gualeguaiču;Gualeguajchu;Gualeguaychu;Gualeguaychú;gua lai gua yi qiu;gualeguaichu;gwalgwaychw;jywlyjyashw antry ryws;Гуалегуайчу;גואלגואיצו;جيوليجياشو، انتري ريوس;گوالگوایچو;გუალეგუაიჩუ;瓜萊瓜伊丘; +city::3433715;Goya;Goja;Gojja;Goya;OYA;Гойя; +city::3433899;Formosa;Ciudad de Formosa;FMA;Formosa;Formoza;farmwsa;forumosa;fu mo sa;fwrmwza;poleumosa;pormosa;pwrmwsh;Формоза;Формоса;Ֆորմոսա;פורמוסה;فارموسا;فورموزا;فورموسا، ارجنٹائن;ფორმოსა;フォルモーサ;福莫萨;포르모사; +city::3435217;Corrientes;CNQ;Ciudad de Corrientes;Corrientes;Gorad Karyentehs;Korientes;Korijentes;Korjentesas;Korrientes;Taragui;ke lian te si;kolienteseu;korientesu;koriyentesa;kwrynts;kwryynts;qwryynts;Горад Карыентэс;Кориентес;Коријентес;Корриентес;Коррієнтес;קוריינטס;كورينتس;کوریئنتس;کورینتس;कोरियेन्टेस;კორიენტესი;コリエンテス;科连特斯;코리엔테스; +city::3435261;Concordia;COC;Concordia;Konkordia;Konkordija;kang ke di ya;kongkoleudia;konkorudia;kwnkwrdya;kwnkwrdya antry ryws;qwnqwrdyh;Конкордия;Конкордија;Կոնկորդիա;קונקורדיה;كونكورديا، انتري ريوس;کونکوردیا;コンコルディア;康科迪亚;콩코르디아; +city::3435264;Concepcion del Uruguay;Concepcion del Uruguay;Concepción del Uruguay;Konseps'jon-del'-Urugvaj;Konseps'on-del'-Urugvaj;Konsepsion del Urugvajus;knspsywn dl awrwgway;kwnsbsywn dyl awrwghway;wu la gui he pan kang sai pu xi weng;Консепсьйон-дель-Уругвай;Консепсьон-дель-Уругвай;קונספסיון דל אורוגוואי;كونسبسيون ديل أوروغواي;کنسپسیون دل اوروگوای;კონსეპსიონ-დელ-ურუგვაი;乌拉圭河畔康塞普西翁; +city::3435810;Campana;Campana;Kampana;Кампана; +city::3435910;Buenos Aires;BUE;Baires;Bonaero;Bonaeropolis;Bonaëropolis;Bos Aires;Bouenos Aires;Bouonezar;Bouonézâr;Buehnos Ajres;Buehnos-Ajres;Buehnos-Ajres osh;Buenos Aires;Buenos Airės;Buenos Ajres;Buenos Ayres;Buenos-Aires;Buenos-Ajres;Buenos-Ayres;Buenos-Aýres;Buenosairesa;Buénos Ayrés;Bwenoze;Bwènozè;Búenos Aíres;Ciudad Autonoma de Buenos Aires;Ciudad Autónoma de Buenos Aires;Ciudad de La Santisima Trinidad y Puerto de Santa Maria del Buen Ayre;Ciudad de La Santísima Trinidad y Puerto de Santa María del Buen Ayre;Gorad Buehnas-Ajrehs;Lungsod ng Buenos Aires;Santa Maria del Buen Ayre;Santa María del Buen Ayre;bawnosxires;bu yi nuo si ai li si;bu'enosa a'iresa;buenos-airesi;buenosaires;buenoseuaileseu;buenosuairesu;buraenosa a'iresa;buyenosa a'iresa;bwyns ayrs;bwynws ayrs;bwynws ayrys;byu'enosa erisa;byunas airis;byunas ayels;bywns ayrs;puvenas airis;Μπουένος ΄Aιρες;Μπουένος Άιρες;Буенос Аирес;Буенос Айрес;Буенос Аірес;Буенос Ајрес;Буенос-Аирес;Буенос-Айрес;Буэнос Айрес;Буэнос-Айрес;Буэнос-Айрес ош;Горад Буэнас-Айрэс;Բուենոս Այրես;בואנוס איירס;בוענאס איירעס;بوئنوس آیرس;بوينس آيرس;بوينوس ايريس;بۆینس ئایرس;بیونس آئرس;बुएनोस आइरेस;ब्युएनॉस एरीस;বুয়েনোস আইরেস;বুৱেনোস আইরেস;புவெனஸ் ஐரிஸ்;ಬ್ಯೂನಸ್ ಐರಿಸ್;ബ്യൂണസ് അയേഴ്സ്;บัวโนสไอเรส;པུ་ཨེ་ནོ་སི་ཨས་རི་སི།;ဗျူနိုအေးရိစ်မြို့;ბუენოს-აირესი;ብዌኖስ አይሬስ;ブエノスアイレス;布宜諾斯艾利斯;布宜诺斯艾利斯;부에노스아이레스; +city::3436124;Barranqueras;Barranqueras;ba lan ke la si;barankywras;بارانكيوراس;巴蘭克拉斯; +city::3436199;Azul;Asulis;Azul;a su er;aswl;Азул;آسول;أزول، مقاطعة بوينس آيرس;阿蘇爾; +city::3832260;Yerba Buena;Yerba Buena; +city::3832694;Villa Maria;Vilja Marija;Villa Maria;Villa María;fyla marya;ma li ya zhen;vilia-maria;wyya marya;wyzh mryh;ויזה מריה;فيلا ماريا;وییا ماریا;ვილია-მარია;瑪麗亞鎮; +city::3832791;Villa Carlos Paz;Karlos-Paz;Vil'ja-Karlos-Pas;Vilja Karlos Pasas;Villa Carlos Paz;Vilya Karlos Pas;fyla karlws baz;ka luo si pa si zhen;wyya karlws pas;Вилья-Карлос-Пас;Карлос-Паз;Վիլյա Կառլոս Պաս;ויזה קרלוס פאס;فيلا كارلوس باز;وییا کارلوس پاس;ვილია-კარლოს-პასი;卡洛斯帕斯鎮; +city::3833062;Venado Tuerto;Neuken;Venado Touerto;Venado Tuertas;Venado Tuerto;bei na duo tu ai tuo;fynadw tywrtw;wanadw twrtw;Βενάδο Τουέρτο;Неукен;ונדו טוארטו;فينادو تيورتو;وانادو تورتو;ვენადო-ტუერტო;貝納多圖埃托; +city::3833367;Ushuaia;Gorad Ushuaja;Ousouaia;Owsuaya;USH;Ushuaia;Ushuaja;Ushuaïa;Usuaja;Usuaya;Usvaja;Uşuaya;Ušuaja;Ušvaja;awshwaya;awshwayya;awswaya;ushuaia;usuaia;usuviya;usuya'iya;wu si huai ya;xusaw ya;Ουσουάια;Горад Ушуая;Ушуая;Ушуаја;Ուշուայա;אושואיה;أوشوايا;اوسوایا;اوشوآئیا;উসুয়াইয়া;ಉಶುವಿಯಾ;อูซัวยา;უშუაია;ウシュアイア;乌斯怀亚;우수아이아; +city::3833883;Trelew;REL;Trelew;Trelju;te lei li wu;teulelle-u;torereu;trlyw;trylyw;טרלאו;ترلئو;تريليو;ტრელევი;トレレウ;特雷利烏;트렐레우; +city::3834601;Tartagal;TTG;Tartagal;Tartagalis;ta ta jia er;tartagal;tartghal;trtgl;Ταρταγάλ;Тартагал;טרטגל;تارتاگال;تارتغال;塔塔加爾; +city::3835793;Santo Tome;Santo Tome;Santo Tomé;Santo Tomė; +city::3835869;Santiago del Estero;Ciudad de Santiago del Estero;Gorad Santjaga-dehl'-Ehstehra;Provincia de Santiago del Estero;Província de Santiago del Estero;SDE;Sanctus Iacobus ad Uligines;Sant'jago-del'-Ehstero;Sant'jago-del'-Estero;Santiago del Estero;Santijago del Estero;Santjago del Esteras;Santjago del Estero;saintiyago dela estro;san teiy ko del xe s te ro;san tyagw dyl astyrw;santiagodel-eseutelo;santyaghw dyl astyrw;santyagw dl astrw;sheng de ya ge-de er ai si te luo;Горад Сантяга-дэль-Эстэра;Сантијаго дел Естеро;Сантьяго-дель-Естеро;Сантьяго-дель-Эстеро;Сантяго дел Естеро;Սանտիագո դել Էստերո;סנטיאגו דל אסטרו;سان تیاگو دیل استیرو;سانتياغو ديل استيرو;سانتیاگو دل استرو;सैन्टियागो डेल एस्त्रो;ซานเตียโกเดลเอสเตโร;სანტიაგო-დელ-ესტერო;サンティアゴ・デル・エステロ;圣地亚哥-德尔埃斯特罗;산티아고델에스테로; +city::3835994;Santa Rosa;Ciudad de Santa Rosa;RSA;Sancta Rosa;Santa Rosa;Santa Rosa de Toaj;Santa Rosa de Toay;Santa-Rosa;santa rwsa;santa rwsa la pampa;santa rwza;santa rwza la bamba;santalosa;santarosa;sheng luo sha;snth rwsh;Санта Роса;Санта Роса де Тоај;Санта-Роса;Սանտա Ռոսա;סנטה רוסה;سانتا روزا;سانتا روزا، لا بامبا;سانتا روسا;سانتا روسا، لا پامپا;სანტა-როსა;サンタローサ;聖羅莎;산타로사; +city::3836277;Santa Fe de la Vera Cruz;Ciudad de Santa Fe;SFN;Santa Fe;Santa Fė;Santa-Fe;Санта Фе;Санта-Фе; +city::3836564;San Salvador de Jujuy;Gorad San-Sal'vador-deh-Zhuzhuj;JUJ;Jujuy;Khukhuj;San Sal'vador de Khukhuj;San Sal'vador de Zhuzhuj;San Salvador de Chuchujus;San Salvador de Jujuy;San Salvador de Khukhuj;San Salvador de Xuxuy;San-Sal'vador-de-Zhuzhuj;Sanctus Salvator Soteriae;san salwadwr dh khwkhwyy;san salwadwr dl khwkhwyy;san slfadwr dy khwkhwy;san-salvador-de-khukhui;sansalbadoleudehuhu-i;sheng sa er wa duo-de hu hu yi;sn slbdwr dh hwhwy;Горад Сан-Сальвадор-дэ-Жужуй;Сан Салвадор де Хухуй;Сан Салвадор де Хухуј;Сан Сальвадор де Жужуй;Сан Сальвадор де Хухуй;Сан-Сальвадор-де-Жужуй;Хухуй;Սան Սալվադոր դե Խուխույ;סן סלבדור דה חוחוי;سان سالوادور دل خوخوئی;سان سالوادور ده خوخوئی;سان سلفادور دي خوخوي;سان سلوادور دی جوجوئے;სან-სალვადორ-დე-ხუხუი;サン・サルバドール・デ・フフイ;圣萨尔瓦多-德胡胡伊;산살바도르데후후이; +city::3836620;San Ramon de la Nueva Oran;ORA;Oran;Orán;San Ramon de la Nueva Oran;San Ramon de la Nueva Oranas;San Ramón de la Nueva Orán;San-Ramon-de-la-Nuehva-Oran;ao lan;san ramwn dh la nwywa awran;san-ramon-de-la-nueva-orani;sanlamondelanuebaolan;whran salta;Сан Рамон де ла Нуева Оран;Сан-Рамон-де-ла-Нуэва-Оран;Սան Ռամոն դե լա Նուևա Օրան;סן רמון דה לה נואבה אוראן;سان رامون ده لا نوئوا اوران;وهران، سالتا;სან-რამონ-დე-ლა-ნუევა-ორანი;奧蘭;산라몬데라누에바오란; +city::3836669;San Rafael;AFA;San Rafael;San Rafaelis;San-Rafaehl';San-Rafael';san rafayl;san rafayyl mndwza;san-rapaeli;sheng la fei er;Сан Рафаел;Сан-Рафаель;Сан-Рафаэль;סן רפאל;سان رافائل;سان رافائيل، مندوزا;სან-რაფაელი;聖拉斐爾; +city::3836772;San Pedro;San Pedro; +city::3836846;San Nicolas de los Arroyos;San Nicolas;San Nicolas de los Arroyos;San Nicolás;San Nicolás de los Arroyos;San Nikolas de los Arojos;San Nikolas de los Arojosas;san ni ko lasdelo sxar ro yos;san nykwlas dh lws arwys;san nykwlas dy lws arwyws;sheng ni gu la si;Сан Николас де лос Аройос;סן ניקולאס דה לוס ארוזוס;سان نيكولاس دي لوس آرويوس;سان نیکولاس ده لوس آرویس;ซานนีโกลาสเดโลสอาร์โรโยส;სან-ნიკოლას-დე-ლოს-აროიოსი;圣尼古拉斯; +city::3836873;San Miguel de Tucuman;Gorad San-Migel'-deh-Tukuman;San Migel De Tukuman;San Migel de Tukuman;San Miguel de Tucuman;San Miguel de Tucumán;San Minkel nte Toukouman;San-Migel'-de-Tukuman;Sanctus Michael Tucumanensis;TUC;Tucuman;Tucumán;Tukuman;Tukumanas;san mi kelde tu ku man;san myghyl dy twkwman;san mygwyyl dy twkwman;sanmigeldetukuman;santyagw dwtwkwman;sheng mi ge er-de tu ku man;Σαν Μιγκέλ ντε Τουκουμάν;Горад Сан-Мігель-дэ-Тукуман;Сан Мигел де Тукуман;Сан-Мигель-де-Тукуман;Сан-Мігель-де-Тукуман;Тукуман;Տուկուման;טוקומאן;سان ميغيل دي توكومان;سان میگوئیل دی توکومان;سانتیاگو دوتوکومان;ซานมีเกลเดตูกูมัน;სან-მიგელ-დე-ტუკუმანი;サン・ミゲル・デ・トゥクマン;圣米格尔-德图库曼;산미겔데투쿠만; +city::3836992;San Martin;General San Martin;General San Martín;San Martin;San Martín;san martyn;sheng ma ding;sn mrtyn;סן מרטין;سان مارتين;سان مارتین;聖馬丁; +city::3837056;San Luis;Ciudad de San Luis;LUQ;San Luis;San Luisas;San-Luis;Sanctus Ludovicus;san lwys;san lwyys;san-luisi;sanlu-iseu;sheng lu yi si;Сан Луис;Сан-Луис;Сан-Луїс;Սան Լուիս;סן לואיס;سان لوئیس;سان لوئیس، ارجنٹائن;سان لويس;სან-ლუისი;サン・ルイス;聖路易斯;산루이스; +city::3837213;San Juan;Ciudad de San Juan;Gorad San-Khuan;Lalawigan ng San Juan;San Chuanas;San Juan;San Juan de la Frontera;San Khuan;San Xuan;San-Khuan;Sanctus Ioannes a Cuio;UAQ;san jwan;san khwan alarjntyn;san khwan arzhantyn;san-khuani;sanfuan;sanhuan;sheng hu an;Горад Сан-Хуан;Сан Хуан;Сан-Хуан;Սան Խուան;סן חואן;سان جوآن;سان خوآن، آرژانتین;سان خوآن، ارجنٹائن;سان خوان، الأرجنتين;სან-ხუანი;サンフアン;圣胡安;산후안; +city::3837675;San Francisco;San Francisco;San Fransiskas;san fransyskw;san fransyskw qrtbt;sheng fu lang xi si ke;sn prnsysqw;סן פרנסיסקו;سان فرانسيسكو، قرطبة;سان فرانسیسکو;聖弗朗西斯科; +city::3837702;San Fernando del Valle de Catamarca;CTC;Catamarca;Katamarka;San Fernando del Vale de Katamarka;San Fernando del Valle de Catamarca;San Fernando del Valye de Katamarka;San-Fernando-del'-Vaje-de-Katamarka;San-Fernando-del'-Val'e-de-Katamarka;San-Fernando-del'-Valle-de-Katamarkae;ka ta ma ka;qtmrqh;san frnandw dyl faly dy katamarka;san frnandw dyl wyla dy katamarka;san frnandwdl wlh dkatamarka;san-pernando-del-valie-de-kʼatʼamarkʼa;sanpeleunandodelbayedekatamaleuka;Катамарка;Сан Фернандо дел Вале де Катамарка;Сан-Фернандо-дель-Вайє-де-Катамарка;Сан-Фернандо-дель-Валле-де-Катамаркæ;Сан-Фернандо-дель-Валье-де-Катамарка;Սան Ֆերնանդո դել Վալյե դե Կատամարկա;קטמרקה;سان فرناندو دل والے دے کاتامارکا;سان فرناندو ديل فالي دي كاتاماركا;سان فرناندو دیل ویلا دی کاتامارکا;سان فرناندودل وله دکاتامارکا;სან-ფერნანდო-დელ-ვალიე-დე-კატამარკა;サン・フェルナンド・デル・バジェ・デ・カタマルカ;卡塔马卡;산페르난도델바예데카타마르카; +city::3838233;Salta;Ciudad de Salta;Gorad Sal'ta;SLA;Sal'ta;Salta;Salta llaqta;Saltaurbo;sa er ta;salta;saruta;slth;Σάλτα;Горад Сальта;Салта;Сальта;Սալտա;סלטה;سالتا;साल्टा;სალტა;サルタ;萨尔塔;살타; +city::3838583;Rosario;ROS;Rasarya;Rosarijas;Rosario;Rosário;Rozariyo;Rozarîyo;Urbs Rosariensis;losalio;luo sa li ao;luo sha li ao;ro sa ri xo;rojhariyo;rosari'o;rosario;rwsaryw;rwsaryw santa fh;Ροσάριο;Расарыа;Росарио;Росаріо;Ռոսարիո;רוסאריו;روساريو;روساریو، سانتا فه;روساریو، سانتا فے;रोझारियो;রোসারিও;โรซารีโอ;როსარიო;ロサリオ;罗萨里奥;羅沙里奧;로사리오; +city::3838793;Rio Tercero;Rio Tercero;Río Tercero; +city::3838859;Rio Gallegos;Gallegos;Puerto Gallegos;Puerto Rio Gallegos;Puerto Río Gallegos;RGL;Rio Galegos;Rio Galjegosas;Rio Gallegos;Rio Galyegos;Rio-Gal'egos;Río Gallegos;li ao jia ye ge si;liogayegoseu;rio-galiegosi;ryw galygws;ryw galygws santa krwz;ryw ghalyghws santa krwz;ryw gzgws;rywgalgws;Рио Галегос;Рио-Гальегос;Ріо-Гальєгос;Ռիո Գալյեգոս;ריו גזגוס;ريو غاليغوس، سانتا كروز;ریو گالیگوس;ریو گالیگوس، سانتا کروز;ریوگالگوس;რიო-გალიეგოსი;リオ・ガジェゴス;里奥加耶戈斯;리오가예고스; +city::3838874;Rio Cuarto;Ciudad de Rio Cuarto;Ciudad de Río Cuarto;RCU;Rio Cuarto;Rio Kuartas;Rio Kuarto;Rio Kvarto;Rio-Kuarto;Rio-Kvarto;Río Cuarto;li ao kua er tuo;liokualeuto;ryw kwartw;ryw kwartw qrtbt;Рио Кварто;Рио Куарто;Рио-Куарто;Ріо-Кварто;Ռիո Կուարտո;ריו קוארטו;ريو كوارتو، قرطبة;ریو کوارتو;რიო-კუარტო;リオ・クアルト;里奥夸尔托;리오쿠아르토; +city::3839479;Rafaela;RAF;Rafaehla;Rafaela;la fei la;ra fa xela;rafayla;rafayyla;rapaela;Рафаэла;רפאלה;رافائلا;رافاييلا;ราฟาเอลา;რაფაელა;拉斐拉; +city::3839982;Punta Alta;Punta Alta;Punta-Al'ta;bwnta alta;peng ta a er ta;puntaalta;Пунта-Альта;بونتا ألتا;蓬塔阿尔塔;푼타알타; +city::3840092;Puerto Madryn;Madryn;Madrynhyd;Madrynhȳð;PMY;Porth Madryn;Pouerto Madrin;Puehrto-Madrin;Puerto Madrinas;Puerto Madryn;Pureto Madrin;bwyrtw madryn;ma de lin gang;pwrtw madryn;Πουέρτο Μάδριν;Пуэрто-Мадрин;Պուրետո Մադրին;פוארטו מדרין;بويرتو مادرين;پورتو مادرین;馬德林港; +city::3840300;Presidencia Roque Saenz Pena;PRQ;Presidencia Roque Saenz Pena;Presidencia Roque Sáenz Peña;Presidensija Roke Saens Penja;Presidente Roque Saenz Pena;Presidente Roque Sáenz Peña;Roque Saenz Pena;Roque Sáenz Peña;SZQ;brysdns rwky saynz bynya;luo ke sa en si pei ni ya zong tong cheng;rwkh saynz pnya;פרסידנסיה רוקה סאנס פניה;بريسدنس روكي ساينز بينيا;روکه سائنز پنیا;პრესიდენსია-როკე-საენს-პენია;羅克薩恩斯培尼亞總統城; +city::3841490;Pergamino;Pergamino;Пергамино; +city::3841956;Parana;Cittae de Parana;PRA;Parana;Paranà;Paraná;ba la na;barana antry ryws;palana;parana;prnh;Çittæ de Paraná;Παρανά;Парана;Պարանա;פרנה;بارانا، انتري ريوس;پارانا;پارانا، انترے ریوس;პარანა;パラナ;巴拉那;파라나; +city::3842670;Olavarria;OVR;Olavarija;Olavarria;Olavarrija;Olavarría;ao la wa li ya;awlafarya;awlawarya;olavaria;xo la bar ri xa;Олаварија;Олаваррия;أولافاريا;اولاواریا;โอลาบาร์รีอา;ოლავარია;奧拉瓦里亞; +city::3843123;Neuquen;Ciuda de Neuquen;Ciudad de Neuquen;Ciudad de Neuquén;Ciudá de Neuquén;Gorad Neuken;NQN;Nequen;Neuken;Neukenas;Neuquen;Neuquén;Vila de Neuquen;Vila de Neuquén;n'yukvina;ne-uken;nei wu ken;neuken;nywkn;nywkwyn;Горад Неўкен;Неукен;Նեուկեն;נאוקן;نئوکن;نيوكوين;نیوکوئن;نیوکوین;न्यूक्वीन;ნეუკენი;ネウケン;内乌肯;네우켄; +city::3844421;Mendoza;Capital megye;Ciuda de Mendoza;Ciudad de Mendoza;Ciudá de Mendoza;Gorad Mendosa;MDZ;Mendos;Mendosa;Mendosae;Mendoza;Mentosa;Vila de Mendoza;men do sa;men duo sa;mendosa;mendoza;mndwsh;mndwza;myndwza;Μεντόσα;Горад Мендоса;Мендоза;Мендосæ;Мендоса;Մենդոսա;מנדוסה;مندوزا;مندوسا، ارجنٹائن;میندوزا;मेन्दोज़ा;เมนโดซา;მენდოსა;メンドーサ;门多萨;멘도사; +city::3848950;La Rioja;A Rioxa;Ciudad de La Rioja;Gorad La-Ryjokha;IRJ;La Riocha;La Rioja;La Rioja llaqta;La Riokha;La Rioxa;La-Riokha;Larjoha;Rioja;Riokha;la li ao ha;la rywja;la rywkha;la rywkha arzhantyn;la-riokha;lalioha;lh rywhh;Горад Ла-Рыёха;Ла Риоха;Ла-Риоха;Ла-Ріоха;Риоха;Լա Ռիոխա;לה ריוחה;لا ريوخا;لا ریؤجا;لا ریوجا، ارجنٹین;لا ریوخا، آرژانتین;ლა-რიოხა;ラ・リオハ;拉里奧哈;라리오하; +city::3853354;Junin;Chuninas;JNI;Junin;Junín;hu ning;khunini;khwnyn;جونين، مقاطعة بوينس آيرس;خونین;ხუნინი;胡寧; +city::3854985;Gobernador Galvez;Galvez;Gobernador Galvez;Gobernador Gálvez;Villa Gobernador Galvez;Villa Gobernador Gálvez; +city::3855065;General Roca;Cheneral Roka;Ciudad de General Roca;Fuerte General Roca;GNR;General Roca;Kheneral';hnrl rwqh;jnral rwka ryw nyghrw;khnral rwka;luo ka jiang jun shi;Хенераль;חנרל רוקה;جنرال روكا، ريو نيغرو;خنرال روکا;ხენერალ-როკა;羅卡將軍市; +city::3855075;General Pico;Cheneral Pikas;GPO;General Pico;Pico;hnrl pyqw;jynral bykw;khnral pykw;pi ke jiang jun zhen;חנרל פיקו;جينرال بيكو;خنرال پیکو;皮科將軍鎮; +city::3860259;Cordoba;COR;Ciudad de Cordoba;Ciudad de Córdoba;Cordoba;Cordoba i Argentina;Cordova;Corduba;Còrdoba;Córdoba;Córdoba i Argentina;Córdova;Gorad Kordava;Kordoba;Kordobo;Kordov;Kordova;Kordova khot;Kordovae;Kuorduoba;Vila de Cordoba;Vila de Córdoba;kardwba;ke er duo wa;koleudoba;kordoba;korudoba;kwrdwba;kwrdwba arzhantyn;kxr do ba;qwrdwbh;Κόρδοβα;Горад Кордава;Кордоба;Кордовæ;Кордова;Кордова хот;Կորդովա;קארדאבע;קורדובה;قرطبہ، ارجنٹائن;كوردوبا;کاردوبا;کوردوبا، آرژانتین;कोर्दोबा;กอร์โดบา;კორდოვა;コルドバ;科尔多瓦;코르도바; +city::3860443;Comodoro Rivadavia;CRD;Comodoro;Comodoro Rivadavia;Komodoro Rivadavija;Komodoro-Rivadavija;Komorodo Rivadavia;komodololibadabia;kwmwdwrw ryfadafya;kwmwdwrw rywadawya;li wa da wei ya hai jun zhun jiang cheng;qwmwdwrw rybdbyh;Комодоро Ривадавия;Комодоро Ривадавија;Комодоро-Ривадавия;Комодоро-Рівадавія;Կոմորոդո Ռիվադավիա;קומודורו ריבדביה;كومودورو ريفادافيا;کومودورو ریواداویا;コモドーロ・リバダビア;里瓦达维亚海军准将城;코모도로리바다비아; +city::3861056;Cipolletti;CPZ;Chipolletti;Cipoletis;Cipoletti;Cipolleti;Cipolletti;kybwlyty;sypwyty;xi bo lie di;zypwlty;Čipoletis;Чиполлетти;Чіполлетті;Չիպոլետի;ציפולטי;سیپویتی;كيبوليتي;სიპოლიეტი;西波列蒂; +city::3861344;Chivilcoy;Chivilcoy;chywylkwy;qi wei er ke yi;tshyfylkwy;تشيفيلكوي;چیویلکوی;奇維爾科伊; +city::3861416;Chimbas;Chimbas; +city::3865086;Bahia Blanca;BHI;Bahia Blanca;Bahija Blanka;Bahía Blanca;Baija Blanka;Baija-Blanka;Baija-Blankae;Bajja-Blanka;bahya blanka;baiabeullangka;baiaburanka;bayya blanka;bu lan ka gang;Баия-Бланкæ;Баия-Бланка;Баија Бланка;Байя-Бланка;Баїя-Бланка;באיה בלנקה;باهيا بلانكا;باییا بلانکا;ბაია-ბლანკა;バイアブランカ;布兰卡港;바이아블랑카; +city::7116866;Villa Mercedes;VME;Vila Mersedes;Vilja Mersedesas;biyameleusedeseu;fyla mrsyds san lwys;mei sai de si zhen;vilia-mersedesi;wyya mrsds;wyzh mrsds;Виља Мерседес;ויזה מרסדס;فيلا مرسيدس، سان لويس;وییا مرسدس;ვილია-მერსედესი;ビジャ・メルセデス;梅塞德斯鎮;비야메르세데스; +city::7647007;San Carlos de Bariloche;BRC;Bariloce;Bariloche;Bariloĉe;San Carlos de Bariloche;San Karlos de Bariloce;San Karlos de Bariloche;San Karlos de Bariločė;San-Karlos-de-Bariloche;barylwchh;barylwtshy;bʼrylwzh;sankaleulloseudebalilloche;sheng ka luo si-de ba li luo qie;Сан Карлос де Барилоче;Сан-Карлос-де-Барилоче;Сан-Карлос-де-Барілоче;Սան Կառլոս դե Բարիլոչե;בארילוצה;باريلوتشي;باریلوچه;باریلۆچی;სან-კარლოს-დე-ბარილოჩე;サン・カルロス・デ・バリローチェ;圣卡洛斯-德巴里洛切;산카를로스데바릴로체; +city::2761369;Vienna;Bec;Bech;Becs;Beç;Beč;Bienne;Bécs;Dunaj;VIE;Vena;Viden;Viden';Vieden;Viedeň;Viena;Vienna;Vienne;Vieno;Viin;Vin;Vinarborg;Vindobona;Viyana;Vídeň;Vín;Vínarborg;Wenen;Wieden;Wiedeń;Wien;bienna;bin;fyyna;weiynna;Βιέννη;Беч;Вена;Виена;Відень;فيينا;เวียนนา;ቪየና;비엔나;빈; +city::2761524;Wels;Ovilava;Vel's;Wels;wls;Вельс;ולס; +city::2762372;Villach;Beljak;Filachas;Filakh;Fillach;Fillaha;Fillakh;Gorad Filakh;QVL;Santicum;Vilac;Villach;Villaco;fei la he;fil lakh;firahha;fylakh;pilakhi;pillaheu;pylʼk;wylakh;Φίλλαχ;Горад Філах;Филах;Филлах;Філлах;פילאך;فیلاخ;ویلاخ;ฟิลลาค;ფილახი;フィラッハ;菲拉赫;필라흐; +city::2766824;Salzburg;Estado de Salzburgo;Gorad Zal'cburg;Ijolati Zaltsburg;Lungsod ng Salzburg;SZG;Saizburg;Salcburg;Salcburk;Salisburgh;Salisburgium;Salisburgo;Salisburgu;Salisburgum;Saltsmpournk;Saltzburg;Salzborg;Salzbourg;Salzburg;Salzburgi liidumaa;Salzburgo;Salzbursko;Sałisburgo;Såizburg;Zal'cburg;Zalcburg;Zalcburga;Zalcburgas;Zaltsburq;chai er ci bei ge;jalcheubuleukeu;jaltsaburga;sa er ci bao;sa er si bao;salajaburga;saljhabarga;sals bur k;salzaborga;salzbrg;salzbwrgh;zaltsburgi;zaltsbwrg;zarutsuburuku;zlzbwrg;Σάλτσμπουργκ;Горад Зальцбург;Залцбург;Зальцбург;Иёлати Залтсбург;Салцбург;Զալցբուրգ;זאלצבורג;זלצבורג;زالتسبورگ;سالزبرگ;سالزبورغ;जाल्त्सबुर्ग;साल्ज़बोर्ग;সলজবুর্গ;સાલ્ઝબર્ગ;ಸಾಲ್ಜ್‌ಬರ್ಗ್‌;ซาลซ์บูร์ก;ზალცბურგი;ザルツブルク;柴尔兹孛格;萨尔斯堡;萨尔茨堡;薩爾斯堡;잘츠부르크; +city::2772400;Linz;Gorad Linc;LNZ;Lentia;Linc;Linca;Lincas;Linec;Lints;Linz;lin ci;lincheu;lins;lintsa;lintsi;lnz;lynts;lyntz;lynz;rintsu;Λιντς;Горад Лінц;Линц;Лінц;Լինց;לינץ;لنز;لينتز;لینتس;लिंत्स;ลินซ์;ლინცი;リンツ;林茨;린츠; +city::2774326;Klagenfurt am Woerthersee;Celovec;Clagenfurtum;KLU;Klagenfurt;Klagenfurte;Klāgenfurte;ke la gen fu;kuragenfuruto;qlgnpwrt;Клагенфурт;קלגנפורט;クラーゲンフルト;克拉根福; +city::2775220;Innsbruck;Gorad Insbruk;INN;Innsbruck;Innschbruck;Insbruc;Insbruk;Insbruka;Insbrukas;Insmprouk;Inzbruk;Pons Aeni;ansbrwk;anzbrk;aynsbrwk;insabruka;inseubeulukeu;insuburukku;xin s brukh;yin si bei lu ke;yin si bu lu ke;İnnsbruck;İnsbruk;Ίνσμπρουκ;Інсбрук;Горад Інсбрук;Инзбрук;Инсбрук;Ինսբրուք;אינסברוק;إنسبروك;انزبرک;اینسبروک;इन्सब्रुक;ইন্সব্রুক;อินส์บรุค;ინსბრუკი;インスブルック;因斯孛鲁克;因斯布鲁克;인스브루크; +city::2778067;Graz;GRZ;Gorad Grac;Grac;Graca;Gracas;Gradec;Graecia;Gratz;Graz;Grác;Gráz;Grāca;Nkrats;Qras;Styrsky Hradec;ge la ci;geulacheu;ghrats;grats;gratsa;gratsi;guratsu;kras;Štýrský Hradec;Γκρατς;Горад Грац;Грац;Գրաց;גראץ;غراتس;گراتس;ग्रात्स;กราซ;გრაცი;グラーツ;格拉茨;그라츠; +city::2062338;Rockingham;Rockingham;Rokingam;Rokingem;Рокингам;Рокінгем;راکنگھم، مغربی آسٹریلیا; +city::2063523;Perth;Gorad Pert;PER;Peairt;Pert;Perta;Pertas;Perth;Perth City;Perthia;Perto;Perþ;Pirth;Purt;Pērta;byrth;part;partha;pasu;peoseu;pert;pheirth;po si;prt;prt';prtھ asٹrylya;Περθ;Горад Перт;Перт;Пертһ;Пърт;Պերթ;פרת';بيرث;پرت;پرتھ، آسٹریلیا;पर्थ;பேர்த்;ಪರ್ತ್;പെർത്ത്;เพิร์ท;ပါ့သ်မြို့;პერთი;パース;珀斯;퍼스; +city::2067119;Mandurah;Mandujura;Mandura;Mandurah;Mandzhera;man du la;mandula;manduraha;mandwrah;manjura;mndwra;mondurahi;Манджера;Мандура;Мандъюра;ماندوراه;ماندورہ;مندورا;مندوراہ;مێندیۆرا;मंदूरह;მონდურაჰი;マンジュラ;曼杜拉;만두라; +city::2073124;Darwin;DRW;Daarwin;Darvin;Darvina;Darvinas;Darvino;Darwin;Dārvina;Gorad Darvin;Ntargouin;Palmerston;Port Darwin;da er wen;da er wen gang;dar win;dara'u'ina;daravina;darvina;darvini;darwyn;dau~in;dawin;drwwyn;tarvin;Ντάργουιν;Горад Дарвін;Дарвин;Дарвін;Դարվին;דארווין;דרווין;داروين;داروین;داروین، قوزئی توپراق‌لاری;ڈارون;डार्विन;ডারউইন;ਡਾਰਵਿਨ;டார்வின்;ഡാർവിൻ;ดาร์วิน;ဒါဝင်မြို့;დარვინი;ダーウィン;达尔文;达尔文港;다윈; +city::2075432;Bunbury;BUY;Banberi;Banberis;Bunbury;ban bo li;banbari;banbary;banberi;beonbeoli;bnbry;Банбери;בנברי;بانباري;بانبوری، ڕۆژاوای ئوسترالیا;بنبری;بنبری، مغربی آسٹریلیا;ბანბერი;バンバリー;班伯利;번버리; +city::2078025;Adelaide;ADL;Adelaida;Adelaidae;Adelaide;Adelaidis;Adelaidė;Adelajda;Adelajdo;Adelaïda;Adelaïde;Adelejd;Adelàida;Adélaïde;Edelaid;Gorad Adehlaida;Tarndanya;Tarndarnya;a de lai de;adelaida;aderedo;adilaid;adiled;adlayd;adylyd;aedeulleideu;atileyit;edile'ida;edileda;Αδελαΐδα;Аделаидæ;Аделаида;Аделаїда;Аделейд;Аделејд;Горад Адэлаіда;Ադելաիդա;אדלייד;آدلاید;أديليد;ئادېلايدې;ایڈیلیڈ;एडिलेड;ॲdaleda;ॲडलेड;એડિલેઇડ;அடிலெயிட்;అడిలైడ్;ಅಡಿಲೇಡ್;അഡിലെയ്‌ഡ്;แอดิเลด;အက်ဒလိတ်မြို့;ადელაიდა;アデレード;阿德来得;阿德莱德;애들레이드; +city::2146142;Townsville;TSV;Taunsvil;Taunsvil';Taunsvilis;Taunsvill;Townsville;ta'unsavhila;ta'unsavila;tang shi wei lu;tang si wei er;taunjeubil;taunzubiru;tawnsfyl;tawnzvyl;tawnzwyl;Таунсвил;Таунсвилл;Таунсвіль;טאונסוויל;تاونزویل;تاونزڤیل;تاونسفيل;ٹاؤنزویلی;ٹاؤنسول;टाउन्सविल;टाउन्सव्हिल;ტაუნზვილი;タウンズビル;汤斯维尔;湯士威路;타운즈빌; +city::2146268;Toowoomba;TWB;Toowoomba;Tuuomba;Tuvumba;teoumba;to~unba;tu wen ba;tuvumba;tuvumpa;twwmba;twwwmba;Тувумба;Тууомба;توومبا;تووومبا;ٹوومبا;ٹووومبا;तूवूम्बा;துவும்பா;ტუვუმბა;トゥーンバ;图文巴;터움바; +city::2147714;Sydney;Gorad Sidnej;SYD;Sanctus Dionysius;Sedniejos;Sek-na;Sidnef;Sidnei;Sidnej;Sidneja;Sidnejo;Sidnejus;Sidney;Sidneý;Sidni;Sidnéy;Sidnėjus;Sit-ni;Sit-nì;Syd;Sydneium;Sydney;Sydney City;Sék-nà̤;Sídney;Sîdney;Sėdniejos;citni;shidoni;sidani;sideuni;sidnei;sidni;sidniy;sydny;xi ni;xue li;Σίδνεϋ;Горад Сідней;Сиднеи;Сидней;Сиднеј;Сидни;Сідней;Сідні;Սիդնեյ;סידני;سيدنى;سيدني;سڈنی;سیدنی;ܣܝܕܢܝ;सिडनी;सिड्नी;सिद्नी;সিডনি;ਸਿਡਨੀ;સીડની;சிட்னி;సిడ్నీ;ಸಿಡ್ನಿ;സിഡ്നി;සිඩ්නි;ซิดนีย์;སིད་ནེ།;ဆစ်ဒနီမြို့;სიდნეი;ሲድኒ;ស៊ីដនីយ៏;シドニー;悉尼;雪梨;시드니; +city::2151437;Rockhampton;ROK;Rockhampton;Rokgempton;Rokkhempton;luo kan pu dun;rakhmptwn;rokahampatana;Рокгемптон;Рокхемптон;רוקהאמפטון;راکهمپتون;راکہیمپٹن;راکہیمپٹون;ڕاکھەمپتن;रोकहाम्पटन;როკჰემპტონი;洛坎普頓; +city::2155472;Newcastle;Avstralyn N'jukasl;Gorad N'jukasl;N'jukasl;NTL;Newcastle;Niukaslas;Njukasl;Njukasul;Novkastelo;n'yukesala;niu ka si er;niyukacil;nyukaeseul;nyukassuru;nyw kasl;nywkasl;nywkasl nyw sawt wlz;nywkasl yyny gwnyy wlz;Њукасл;Австралын Ньюкасл;Горад Ньюкасл;Ньюкасл;Нюкасъл;ניוקאסל;نيوكاسل;نیو کاسل;نیو کیسل، نیو ساؤتھ ویلز;نیوکاسل، نیو ساوت ولز;نیوکاسل، یئنی گونئی ولز;نیوکاسڵ;न्यूकॅसल;நியூகாசில்;ნიუკასლი;ニューカッスル;纽卡斯尔;뉴캐슬; +city::2158177;Melbourne;MEL;Mel'burn;Melbourne;Melbourne City;Melbournum;Melburn;Melburna;Melburnas;Melburno;Melvourni;mel beirn;melaborna;melbeoleun;melbeon;melporn;meruborun;mlbwrn;mo er ben;Μελβούρνη;Мелбурн;Мелбърн;Мельбурн;מלבורן;ملبورن;مېلبۇرن;मेलबोर्न;மெல்போர்ன்;เมลเบิร์น;མེར་བུན;メルボルン;墨尔本;멜버른;멜번; +city::2159045;Maitland;MTL;Maitland;Mehjtlend;Mejtland;Mejtlend;West Maitland;mei te lan;mytlnd yyny gwnyy wlz;Мейтленд;Мејтланд;Мэйтленд;میئٹلینڈ، نیو ساؤتھ ویلز;میتلند، یئنی گونئی ولز;میٹلینڈ;مێیتلەند، نیو ساوت وێلز;მეიტლენდი;梅特兰; +city::2159220;Mackay;MKY;Mackay;Makaj;Makej;Makkaj;maekai;mai kai;make;makkai;mkay;mkay kwyynzlnd;Макай;Макај;Макей;Маккай;מאקאי;مکائے، کوئنزلینڈ;مکای;مکای، کوئینزلند;میکے;مەکای، کوینزلەند;मके;მაკაი;マッカイ;麥凱;매카이; +city::2160517;Launceston;LST;Launceston;Launcestown;Lonseston;Patersonia;lancecutan;lang sai si dun;lansstwn tasmany;lawnsstwn;lonasesatana;lonseoseuteon;lwnstwn;ronsesuton;Лонсестон;לונסטון;لانسستون، تاسمانی;لانسسٹن، تسمانیا;لانسێستن، تاسمانیا;لاونسستون;لاونسسٹن;लॉनसेसटन;லான்செசுடன்;ლონსესტონი;ローンセストン;朗塞斯顿;론서스턴; +city::2163355;Hobart;Chompart;Gobart;Gorad Khobart;HBA;Hobart;Hobart Town;Hobarta;Hobartas;Hobarto;Hobat;Hobārta;Khobart;Khoubart;he ba te;hobarata;hobart;hobarta;hobateu;hobato;hopart;huo ba te;hwbart;Χόμπαρτ;Гобарт;Горад Хобарт;Хобарт;Хоубарт;הובארט;هوبارت;ہابرٹ;ہوبارٹ;होबार्ट;ਹੋਬਾਰਟ;ହୋବାର୍ଟ;ஹோபார்ட்;හෝබාර්ට්;โฮบาร์ต;ཧོ་སྦར་ཐེ།;ჰობარტი;ホバート;荷巴特;霍巴特;호바트; +city::2165087;Gold Coast;City of Gold Coast;Costa Dorada;Gold;Gold Coast;Gold Koust;OOL;gorudokosuto;huang jin hai an;Голд Коуст;ゴールドコースト;ゴールド・コースト;黃金海岸;黄金海岸; +city::2165798;Geelong;Dzhelong;Dzhilong;Dzilong;Dzilongas;Džilongas;GEX;Geelong;Zhelon;ghylwngh;gilonga;gylang;gylwng;jeollong;ji lang;jilongi;jirongu;jylang;jylanq;Џилонг;Джелонг;Джилонг;Желон;גילונג;جیلانق;جیلانگ;جیڵانگ;غيلونغ;گیلانگ;गीलोंग;गीलोङ्ग;ჯილონგი;ジーロング;吉朗;절롱; +city::2171507;Wollongong;City of Greater Wollongong;Gorad Vulangang;Uulongong;Vullongon;Vullongong;Vulongong;Vulongongas;WOL;Wollongong;ulleongong;urongon;vulamgamga;vulongongi;wlwnghwngh;wlwngwng;wo long gang;wo long gang shi;wwlwngwng;wwlwnqwnq;Вуллонгон;Вуллонгонг;Вулонгонг;Горад Вуланганг;Уулонгонг;וולונגונג;ولونغونغ;ولونگونگ;وولونقونق;وولونگونگ;وۆڵۆنگانگ;वूलाँगाँग;ვულონგონგი;ウロンゴン;卧龙岗;卧龙岗市;울런공; +city::2172517;Canberra;CBR;Camberra;Canberra;Canberrah;Gorad Kanbera;Kamberra;Kambra;Kampera;Kanapera;Kanbera;Kanbero;Kanberr;Kanberra;Kanberrae;Kanberre;Kanbérra;Kham-phi-la;Khâm-phì-là;Kānapera;kaenbeola;kainabara;kainberra;kan pei la;kanabera;kanbra;kanpara;kenabera;kyanabara;kyanabera;kyanbera;kynbra;kʼanbera;qnbrh;Καμπέρα;Горад Канбера;Канбера;Канберрæ;Канберра;Канберре;Канбєра;Կանբերրա;קאנבערא;קנברה;كانبرا;کانبرا;کانبێرا;کینبرا;कॅनबेरा;कैनबरा;कैन्बेर्रा;क्यानबरा;ক্যানবেরা;ਕੈਨਬਰਾ;କାନବେରା;கான்பரா;കാൻബറ;කැන්බරා;แคนเบอร์รา;ཁན་པེ་ར།;კანბერა;ካንበራ;キャンベラ;坎培拉;堪培拉;캔버라; +city::2172797;Cairns;CNS;Cairns;Kehrns;Kerns;Kernsa;Kernsas;Kērnsa;jian ci;kai en si;kairnsa;karnz;keanzu;keeonjeu;keeonseu;kernsa;knz;kyrnz;qyyrns;Кернс;Кэрнс;קיירנס;كيرنز;کارنز;کنز;کیرنز;کێنز;केर्न्स;कैर्न्स;ကိန်းမြို့;კერნსი;ケアンズ;凱恩斯;柬兹;케언스;케언즈; +city::2173323;Bundaberg;BDB;Bandaberg;Bandaberga;Bundaberg;Bundaburg;ban de bao;bandabarga;bandabergi;bwndabrg;bwndabyrj;Бандаберг;Бундаберг;Бъндабърг;باندابێرگ;بنڈابرگ;بوندابرگ;بوندابيرج;बण्डाबर्ग;ბანდაბერგი;班德堡; +city::2174003;Brisbane;BNE;Bresbens;Brisbane;Brisbane City;Brisbano;Brisbehn;Brisben;Brisbena;Brisbenas;Brisbin;Brismpein;Brizbejn;Brėsbens;Gorad Brysben;Pu-li-su-pan;Pu-lî-sṳ̂-pân;beulijeubeon;brisabena;brisben;brisbena;brizabana;brizbeni;brsbyn;brysban;bryzbn;bryzbyn;bryzbyyn;bu li si ban;bu li si ben;burisuben;pirispen;Μπρίσμπεϊν;Бризбейн;Бризбејн;Брисбен;Брисбэн;Горад Брысбен;בריזביין;בריזבן;برسبین;برىسبان;بريزبن;بریزبن;بریزبین;بریزبێن;ब्रिसबेन;ब्रिस्बेन;ব্রিসবেন;ਬ੍ਰਿਜ਼ਬਨ;பிரிஸ்பேன்;బ్రిస్బేన్;ಬ್ರಿಸ್ಬೇನ್‌;ബ്രിസ്ബെയ്ൻ;บริสเบน;ဘရစ်စဘိန်းမြို့;ბრიზბენი;ብርዝበን;ブリスベン;布里司班;布里斯本;布里斯班;브리즈번; +city::2176187;Bendigo;BXG;Bendigo;Bentinko;ban de ge;ben di ge;bendigo;bndygw;Μπέντιγκο;Бендиго;Бендіго;בנדיגו;بینڈگو;بینڈیگو;بێندیگۆ;बेन्डिगो;ბენდიგო;ベンディゴ;本迪戈;班地戈;벤디고; +city::2177091;Ballarat;Balarat;Balaratas;Ballaarat;Ballarat;ba la rui te;baelleolaes;balarat;balart;ballarata;bararatto;blrt;Μπαλαράτ;Баларат;Балларат;בלאראט;بالارات;بالاراٹ;بالارت;بلرت;بەلێرات;बल्लारत;ბალარატი;バララット;巴拉瑞特;밸러랫; +city::7281838;Logan City;Citta di Logan;Città di Logan;Logan;Logan City;logani;luo gen shi;lwghan syty;لوغان سيتي;لوگن سٹی;ლოგანი;洛根市; +city::7302628;Adelaide Hills;; +city::146970;Xankandi;Chankaendi;Chankändi;Hankendi;Khankendy;Stepanakert;Xankǝndi;Xankəndi;astpanakrt;stpnqrt;Степанакерт;סטפנקרט;استپاناکرت; +city::147288;Saatli;Saatli;Saatly;Saatlı;Saotly;Саатлы; +city::147429;Nakhchivan;NAJ;Nachitschewan;Nakhchivan;Nakhchyvan;Nakhicevan;Nakhichevan';Nakhichevan’;Nakhichivan;Nakhitchevan;Nakhitsjevan;Nakhjavan;Naxcivan;Naxçıvan;nkhchywan;Нахичевань;نخچیوان; +city::147622;Lankaran;LLK;Lankaran;Lencoran;Lenkoran;Lenkoran';Ljankjaran;Länkäran;Lǝnkǝran;Lənkəran;Ленкорань;Лянкяран; +city::148565;Sirvan;Ali Bairamly;Ali Bayramli;Ali-Bairamli;Ali-Bajramly;Ali-Bayramli;Ali-Bayramly;Aly-Bayramly;Arab Shakhverdi;Arab-Shakhberdy;Arab-Shakhverdy;Shirvan;Sirvan;Zubovka;Şirvan;Əli Bayramlı;Али-Байрамлы;Ширван; +city::584649;Yevlakh;Avlakh;Evlakh;Jewlach;YLV;Yevlakh;Yevlax;Евлах; +city::584923;Sumqayit;Sumgait;Sumgjajet;Sumqayit;Sumqayyt;Sumqayıt;Сумгаит;סומגאיט; +city::585103;Qaracuxur;Garachukhur;Imeni Kaganovicha;Kaganovich;Kaganovicha;Karachekhur;Karachukhur;Poselok Imeni Kaganovicha;Posëlok Imeni Kaganovicha;Qaracuxur;Qaraçuxur;Serebovski;Serebrovskiy;Гарачухур; +city::585170;Sheki;Nucha;Nukha;Nuxa;Saki;Shaki;Sheki;Shäki;Şǝki;Şəki;Шеки; +city::585514;Mingelchaur;Mengechaur;Min'nkatsebir;Mingacevir;Mingachevir;Mingaecevir;Mingechaur;Mingechaurges;Mingeczaur;Mingelchaur;Mingächevir;Mingäçevir;Mingǝçevir;Mingəçevir;ming gai qia wu er;Μινγκατσεβίρ;Мингечаур;明盖恰乌尔; +city::586523;Ganja;Elisavetpol;Elizavetpol';Elizavetpol’;Gaencae;Gaendz;Gaendzjae;Ganca;Gandja;Gandza;Gandzha;Gandzhe;Gandża;Gandža;Ganga;Ganja;Ganjak;Ganĝa;Ganҷa;Gence;Gendzakh;Gendze;Gendže;Gendžė;Gjandzha;Gjanzha;Gyandzha;Gäncä;Gändzjä;Gändž;Gǝncǝ;Gəncə;KVD;Kirovabad;Kirowabad;Nkantza;Yelizavetpol';Yelizavetpol’;ganja;gngh;gnjh;gyanja;jnja;knjh;zhan gu;Γκαντζά;Ганджа;Гандза;Ганџа;Ганҷа;Гянджа;Гянжа;Гәнжә;Елизаветполь;Գանձակ;גנגה;جنجا;كنجه;گانجا شہر;گنجه;گنجہ;განჯა;ギャンジャ;占贾;간자; +city::587084;Baku;BAK;Bacu;Bacú;Baki;Bako;Bakoe;Bakou;Baku;Bakue;Bakuo;Bakuu;Baky;Bakó;Bakú;Bakû;Bakü;Bakı;Baqu;Boku;Gorad Baku;Mpakou;ba ku;bakku;bako;baku;bakw;bakww;pakku;Μπακού;Баку;Бакы;Баҡы;Боку;Горад Баку;Բաքու;באקו;باكو;باکو;باکوو;बाकु;बाकू;বাকু;பாக்கு;ബക്കു;บากู;པཱ་ཁི།;ბაქო;ባኩ;バクー;巴库;바쿠; +city::824003;Bakixanov;Bakikhanov;Bakikhanova;Bakixanov;Bakıxanov;Бакиханова; +city::3186573;Zenica;Zenica;Zenicja;jenicha;se nit sa;ze ni cha;zenitsa;zenitsu~a;znyka;znytsa;znyzh;zynytsa;Зеница;Зениця;Զենիցա;זניצה;زنیتسا;زنیکا;زينيتسا;زینیتسا;เซนีตซา;ზენიცა;ゼニツァ;泽尼察;제니차; +city::3188582;Tuzla;Donja Tuzla;Gorad Tuzla;Soli;TZL;Tuzl;Tuzla;to~uzura;tu ci la;tujeulla;twzla;tzla;Горад Тузла;Тузла;تزلا;تزلہ;توزلا;ტუზლა;トゥズラ;图兹拉;투즐라; +city::3191281;Sarajevo;Bosna-Sarai;Gorad Saraeva;SJJ;Saarayego;Saireavo;Sairéavó;Saraevo;Saraevo osh;Saragebo;Saragiebo;Saragievo;Sarajeva;Sarajevas;Sarajevo;Sarajevs;Sarajevu;Sarajevó;Sarajewo;Sarajèvo;Saraxevo;Saraybosna;Sarayevo;Sarayevu;Seraium;Serayevo;Szarajevo;Szarajevó;Vrh Bosna;carayevo;sa la re wo;sai la ye fu;salayebo;saraevo;saraevu~o;sarajyww;sarayavea;sarayebho;sarayevho;sarayevo;sarayewo;sarayh ww;sarayww;sarayyfw;srayyfw;srayyww;sryybw;Σαράγεβο;Σαράγιεβο;Σαραγιεβο;Горад Сараева;Сараево;Сараево ош;Сараєво;Сарајево;Сараѥво;Սարաևո;סאראיעווא;סרייבו;ساراجیوو;ساراييفو;سارايېۋو;سارایه وو;سارایوو;سارایێڤۆ;سرائیوو;سراييفو;सारायेव्हो;সারায়েভো;ਸਾਰਾਯੇਵੋ;சாரயேவோ;സരയാവോ;ซาราเยโว;ས་ར་ཇི་བོ།;სარაევო;ሳራዬቮ;サラエヴォ;塞拉耶佛;薩拉熱窩;사라예보; +city::3194828;Mostar;Mandetrium;Mostar;Mostara;Mostaras;Mostari;OMO;mo si ta er;moseutaleu;mosutaru;mwstar;mwstr;Μόσταρ;Мостар;מוסטר;موستار;モスタル;莫斯塔爾;모스타르; +city::3204222;Bihac;Bichacas;Bichačas;Bihac;Bihacium;Bihacs;Bihaç;Bihać;Bihács;Bikhach;Bikhak;bi ha qi;bi hach;bihachi;byhach;byhʼz;bykhach;bykhatsh;Бихач;Бихаћ;Бихаќ;Біхач;ביחאץ;بيخاتش;بیخاچ;بیهاچ;بیہاج;บีฮาช;ビハチ;比哈奇;비하치; +city::3204541;Banja Luka;BNX;Bagnaluka;Bana Luka;Bania Louka;Bania Luka;Banialuca;Banja Luka;Banja Luka - Bana Luka;Banja Luka - Бања Лука;Banja-Luka;Banja-Lukae;Banjaluka;Banjaluko;Banya Luka;Baņa Luka;Gorad Banja-Luka;ba ni ya lu ka;ban ya luk a;banja luka;banja lwka;banya lwka;banyaluka;Μπάνια Λούκα;Баня Лука;Баня-Лукæ;Баня-Лука;Банꙗ Лоука;Бања Лука;Горад Баня-Лука;Բանյա Լուկա;באניה לוקה;بانجا لوکا;بانيا لوكا;بانیا لوکا;बंजा लुका;บันยาลูกา;ბანია-ლუკა;バニャ・ルカ;巴尼亚卢卡;바냐루카; +city::3374036;Bridgetown;BGI;Bridgetown;Bridzhtaun;Bridztaun;Bridztaunas;Bridžtaunas;The Bridge Town;beulijitaun;brydj tawn;bu li qi dun;burijjitaun;Бриджтаун;Бриџтаун;ברידג'טאון;بريدج تاون;ብርጅታውን;ブリッジタウン;布里奇敦;브리지타운; +city::1185092;Thakurgaon;TKR;Thakurgaom;Thakurgaon;Thakus Gaon;Thākurgaom;Thākurgaon; +city::1185098;Tungi;Tangi;Tongi;Tungi;tangi;টঙ্গী; +city::1185099;Sylhet;Jalalabad;Rajnagar;Rājnagar;Silet;Sileţ;Silhatas;Silhatta;Silkhet;Silot;Silôţ;Sreehatta;Srihotto;Srihôţţo;Sylhet;Szilhet;ZYL;cil'het;shiretto;silahata;sileta;silles;sylht;sylt;xi er he te shi;Силхет;Сілет;سلہٹ;سيلهت;سیلت;सिलहट;সিলেট;சில்ஹெட்;സിൽഹെറ്റ്;シレット;錫爾赫特市;실렛; +city::1185106;Jamalpur;Jamaipur;Jamalpur;Jamālpur;Singhjani;Singhjāni; +city::1185107;Shibganj;Shibgandzh;Shibganj;Sibganj;Шибгандж; +city::1185111;Satkhira;Satkhira;Shatkhira;Sātkhira; +city::1185115;Sirajganj;SAJ;Serajganj Municipality;Siradzhgandzh;Sirajganj;Siranganj;Sirājganj;sirajaganja;Сираджгандж;সিরাজগঞ্জ; +city::1185116;Netrakona;Netrakona;Satpai;Sātpāi; +city::1185117;Narsingdi;Narsingdi;Narsinghdi;Satirpara;Satirpāra; +city::1185120;Sandwip;Sandvip;Sandwip;Sandwīp;Сандвип; +city::1185121;Shahzadpur;Sahzadpur;Shahzadpur;Shāhzādpur; +city::1185127;Ramganj;Ramganj;Ratanpur;Rāmganj; +city::1185128;Rajshahi;RJH;Radzhshakhi;Rajshahi;Rampur Baolia;Rampur Bauleah;Rampur Boalia;Rājshāhi;rajasahi;Раджшахи;রাজশাহী; +city::1185138;Pirojpur;Perijpur;Perojpur Municipality;Pirojpur; +city::1185148;Patiya;Patia;Patiya; +city::1185155;Narayanganj;Narajanganj;Narayanganj;Nārāyanganj; +city::1185159;Nagarpur;Nagarpur;Nagurpoor;Nāgarpur; +city::1185162;Mymensingh;Majmensingkh;Mymensing;Mymensingh;Nasirabad;Nasirābād;mayamanasinha;Майменсингх;ময়মনসিংহ; +city::1185166;Maulavi Bazar;Maulavi Bazar;Maulavi Bāzār;Maulvi Bazar;Maulvi Bāzār;Moulvi Bazar;Moulvi Bazar Municipality;Moulvi Bāzār; +city::1185181;Lalmanirhat;Lalmanir Hat;Lalmanirat;Lalmanirhat;Lalmonirhat;Lālmanir Hāt; +city::1185183;Laksham;Laksam;Laksham;Lākshām; +city::1185186;Comilla;CLA;Comilla;Komila;Komilla;Komille;Kumilla;Kumillā;khu mi l la;komilla;kumilla;kumirra;kwmyla;Комилла;Комилле;کومیلا;कोमिल्ला;কুমিল্লা;คูมิลลา;クミッラ; +city::1185188;Rangpur;Kotwali;Kotwāli;Mosque Rangpur;RAU;Rangpur;Rangpur City;Rangpuras;Rongpur;lang bu er shi;langpuleu;rampura;ranpuru;Рангпур;رنگپور شہر;রংপুর;ランプル;朗布尔市;랑푸르; +city::1185191;Kushtia;Khustia;Kushtia; +city::1185206;Joypur Hat;Jaipur Hat;Jaipur Hāt;Jaypur Hat;Joypur Hat;Joypur Hāt; +city::1185207;Ishurdi;IRD;Ishurda;Ishurdi; +city::1185209;Habiganj;Habiganj;Habiganj Bazar;Habiganj Sadar;Hobiganj; +city::1185224;Feni;Feni;Feni Bangladesh;Fenny; +city::1185236;Raipur;Deyanatpur;Deyānatpur;Raipur;Rajpur;Raypur;Rāipur;Райпур; +city::1185241;Dhaka;DAC;Daaka;Daca;Dacca;Dacca - dhaka;Dacca - ঢাকা;Daka;Dakah;Dakk;Dakka;Dakkae;Dakke;Dako;Deka;Dgaka;Dhaka;Dháka;Dhâkâ;Dəkkə;Gorad Daka;Mujib City;Ntaka;Ntakka;da ka;daka;dakka;dhaka;dhakka;dka;takka;thaka;Ντάκα;Ντάκκα;Горад Дака;Даака;Дака;Даккæ;Дакка;Дакке;Дгака;Դաքքա;דאקא;דאקה;داكا;داکا;دكا;ڈھاکہ;ޑާކާ;ढाका;ঢাকা;ਢਾਕਾ;ઢાકા;ଢାକା;டாக்கா;ఢాకా;ಢಾಕಾ;ഢാക്ക;ඩකා;ธากา;དྷ་ཁ།;ဒါကာမြို့;დაკა;ዳካ;ダッカ;达卡;達卡;다카; +city::1185252;Khagrachhari;Changrachhari;Khabangpari;Khagrachari;Khagrachhari;Khagrāchari;Khagrāchhari;Kkhagrachari;Кхаграчари; +city::1185263;Bhairab Bazar;Bhairab Bazar;Bhairab Bāzār;Bhairab Town; +city::1185281;Bagerhat;Bagerhat;Bagerhat Town;Bagerkhat;Bagherhat;Bāgerhāt;Bāgherhāt;Багерхат; +city::1185293;Narail;Aladatpur;Alādātpur;Narail;Naral;Narāl; +city::1185920;Tungipara;Tongipara;Tungipara;Tungipāra; +city::1187530;Sonargaon;Sonargaon;Sonārgaon;Сонаргаон; +city::1188569;Sarishabari;Sarisabar;Sarisabari;Sarishabari;Sarishābāri;Sarsabari; +city::1191368;Palang;; +city::1192366;Par Naogaon;Par Naogaon;Pār Naogaon; +city::1196292;Lakshmipur;Lakshmipur;Lakshmipur Jela;Lakshmipur Zila;Lakshmīpur;laksmipura jela;লক্ষ্মীপুর জেলা; +city::1203344;Faridpur;; +city::1203891;Dinajpur;Dinajpur;Dinājpur; +city::1205733;Chittagong;CGP;Cattagram;Caṭṭagrām;Cetagons;Chitagong;Chittagong;Chittagong Ghat;Chottogram;Chôţţogram;Citagaon;Citagong;Citagonga;Citagongas;Citagongo;Cittaqonq;Cottogram;Csittagong;Islamabad;Tsitankon'nk;catagamva;cattagrama;chitagong;chittagon;chytagwng;cirragean;cit ta kxng;citagonga;cittagang;cittagonga;cittakon;ji da gang;ji da gang shi;shytaghwngh;shytajwnj;zytgwng;Çitagong;Çittaqonq;Ćottogram;Ĉitagongo;Čattagrám;Čitagonga;Čitagongas;Čitágáon;Čėtagons;Τσιταγκόνγκ;Читагонг;Читтагонг;Читтаґонґ;טשיטאגאנג;ציטגונג;شيتاجونج;شيتاغونغ;چٹاگانگ;چیتاگونگ;चटगाँव;चट्टग्राम;चिटागोंग;চট্টগ্রাম;ચિત્તાગોંગ;சிட்டகொங்;చిట్టగాంగ్;ಚಿತ್ತಗಾಂಗ್;ചിറ്റഗോങ്;จิตตะกอง;စစ်တကောင်းမြို့;ჩიტაგონგი;チッタゴン;吉大港;吉大港市;치타공; +city::1336133;Satkania;Satkania;Sātkania; +city::1336134;Cox's Bazar;CXB;Cox's Bazar;Cox’s Bāzār;Koks-Bazar;Кокс-Базар; +city::1336135;Khulna;Khulna;Khulnâ;Kkhelna;Kkhulna;Kulna;Kulno;khulana;khwlna;ku er na shi;kulna;kuruna;Кулна;Кхелна;Кхулна;خولنا;کھلنا;खुलना;খুলনা;குல்னா;クルナ;库尔纳市;쿨나; +city::1336136;Bhola;Bhola;Bhola District;Bkhola;Huyen Bhola;Huyện Bhola;bhola jela;bhola jila;bo la xian;Бхола;ضلع بھولا;ভোলা জিলা;ভোলা জেলা;波拉縣; +city::1336137;Barisal;BZL;Barisal;Barisal Sadar;Barisāl;Barīsal Sadar;barisala;Барисал;বরিশাল; +city::1336140;Jessore;JSR;Jessore; +city::1336143;Pabna;Pabna;Pabne;Pābna;Пабне; +city::1336144;Tangail;Tangail;Tāngāil; +city::1337233;Bogra;Bogora;Bogra;bagura;bogura;bwgra;Богра;بوگرا;বগুড়া;ボグラ; +city::1337240;Nawabganj;Nawabganj;Nawābganj; +city::1337245;Madaripur;; +city::1337248;Sherpur;Sherpur; +city::1337249;Kishorganj;Kisharganj;Kishoreganj;Kishoreganj Municipality;Kishorganj; +city::6545349;Saidpur;SPD;Syedpur;saiyadapura;সৈয়দপুর; +city::7483743;Puthia;Puthia;Putkhija;Путхия; +city::7483813;Natore;Nator;Natore;Nātor;Натор; +city::7701354;Azimpur;Azimpur Dhaka Bangladesh; +city::9827976;Paltan;Paltan Dhaka Bangladesh; +city::2784821;Verviers;Verv'e;Verve;Vervi;Vervia;Vervie;Verviers;Vervje;Vervjė;Vervî;beleubie;vervie;vu~eruvu~ie;wei er wei ye;wrwyh;Вервие;Вервье;Вервє;Вервје;ورویه;ვერვიე;ヴェルヴィエ;韦尔维耶;베르비에; +city::2785341;Tournai;Doornik;Doornyk;Tornai;Tournai;Tournay;Turnacum;Turne;Turnė;ZGQ;to~urune;tu er nai;tuleune;twrnay;twrnh;Τουρναί;Турне;טורנה;تورناي;تورنه;ตูร์แน;トゥルネー;图尔奈;투르네; +city::2786578;Sint-Niklaas;Saint-Nicolas;Sint-Niklaas;Sint-Niklas;Синт-Никлас; +city::2786824;Seraing;Seraing;Sere;Seren;Serenas;Serranius;Serè;se lan;selaeng;seran;sex ræng;srn;Серен;سرن;เซอแร็ง;セラン;瑟兰;세랭; +city::2787889;Roeselare;Roeselare;Roeselare vald;Roeselave;Roeseloare;Roulers;Rouselare;Ruselare;Ruselarė;lu se la lei;lusellale;ruserare;rwslarh;Руселаре;روسلاره;ルーセラーレ;鲁瑟拉勒;루셀라레; +city::2789786;Ostend;OST;Oostende;Oostenn;Ostend;Ostenda;Ostende;Ostendo;Ostendė;ao si teng de;astent;awstndh;oseutendeo;osutende;Οστένδη;Остенде;אוסטנדה;اوستنده;ஆஸ்டெண்ட்;オーステンデ;奥斯滕德;오스텐더; +city::2790471;Namur;Gorad Namjur;Name;Namen;Nameur;Namir;Namira;Namiuras;Namiūras;Namjur;Namouer;Namur;Namurcum;Namuro;Namyr;Namyur;Namīra;QNM;na mu er;namu r;namwileu;namwr;namyuru;nmwr blzhyk;Ναμύρ;Горад Намюр;Намир;Намюр;Նամյուր;נאמור;نامور;نمور، بلژیک;นามูร์;ናሙር;ナミュール;那慕爾;나뮈르; +city::2790595;Mouscron;MWW;Moeschroen;Moeschroên;Moeskroen;Moucron;Mouscron;Mukronas;Musera;Muskron;Muskrono;museukeulong;musukuron;mwzkrwn;Мускрон;موزکرون;ムスクロン;무스크롱; +city::2790869;Mons;Berge;Bergen;Bergn;Gorad Mons;Mon;Mons;Monsa;Monsas;Mont;Montes;mamsa;meng si;mngs;mongseu;monsu;mwn;mwns;Μονς;Горад Монс;Монс;Մոնս;מונס;مون;مونس;माँस;มงส์;モンス;蒙斯;몽스; +city::2791537;Mechelen;Gorad Mekhelen;Malinas;Malines;Mechele;Mechelen;Mechelenas;Mecheln;Mechlinia;Mehleno;Mekhelen;Meĥleno;ZGP;me khexlein;mehellen;meheren;mei he lun;mkln;mshlan;Горад Мехелен;Мехелен;מכלן;مشلان;เมเคอเลิน;メヘレン;梅赫伦;메헬렌; +city::2792413;Liege;Gorad L'ezh;L'ezh;LGG;Leck;Leodic;Leodicum;Leodium;Lidje;Liege;Liegi;Liego;Lieja;Liex;Liez;Liezh;Lieĝo;Lige;Lijezh;Liège;Lièja;Ljez;Ljeza;Ljezas;Ljež;Lježas;Ljēža;Luettich;Luik;Luttich;Lutych;Luuk;Léck;Lüttich;Lēodic;Suguru;Sùguru;lie ri;lieju;liezhi;lija;lyj;lyyj;lyyz;lyzh;rieju;Λιέγη;Горад Льеж;Лиеж;Лијеж;Льеж;Льєж;Լիեժ;לייז;ליעזש;لييج;لیج;لیژ;लीज;ลีแยฌ;လိဂျမြို့;ლიეჟი;リエージュ;列日;리에주; +city::2792482;Leuven;L'oven;Leouben;Leuve;Leuven;Ljoven;Loewen;Louvain;Lovaina;Lovan;Lovanio;Lovanium;Lovaň;Loveno;Luven;Löwen;ZGK;lu wen;revu~en;ruvu~en;Λέουβεν;Лувен;Льовен;Лёвен;ルーヴェン;レーヴェン;鲁汶; +city::2793508;La Louviere;El Lovire;La Louviere;La Louvière;La Luvjer;La Luvjeras;La-Luv'er;Louvierre;Luparia;Luvier;la lu wei ye er;la lwwyr;lalubieleu;Ла Лувјер;Ла-Лувьер;Лувиер;لا لوویر;ラ・ルヴィエール;拉卢维耶尔;라루비에르; +city::2794055;Kortrijk;Contrai;Cortoriacum;Cortrique;Courtrai;Gorad Kortrehjk;KJK;Kortrajk;Kortreika;Kortreikas;Kortrejk;Kortrejko;Kortrijk;Kortrik;Kortryk;ke te lai ke;khxrth rikh;koleuteuleikeu;kortrejk;korutoreiku;kwrtryk;qwrtryyq;Горад Кортрэйк;Кортрајк;Кортрейк;קורטרייק;کورتریک;คอร์ทไรค์;コルトレイク;科特赖克;코르트레이크; +city::2796491;Hasselt;Asselt;Gasselt;Gorad Khaselt;Haselt;Haseltas;Haselto;Hasselt;Khaselt;Khasselt;QHA;aslt;ha se er te;has sel th;haselteu;hasseruto;Άσσελτ;Гасселт;Горад Хаселт;Хаселт;Хасселт;Հասելտ;اسلت;ฮัสเซลท์;ハッセルト;哈瑟尔特;하셀트; +city::2797656;Gent;GNE;Gaent;Gand;Gandavum;Gandawa;Gande;Gant;Gante;Ganti;Gent;Gentas;Gente;Gento;Ghent;Gint;Gorad Gent;Gænt;gen te;genta;ghnt;gnt;henteu;hento;jenta;jnt;ken t;khenta;khnt;Γάνδη;Гент;Горад Гент;Գենտ;גנט;جنت;خنت;غنت;غینٹ;खेंट;गेंट;জেন্ট;เกนต์;ဂင့်မြို့;გენტი;ヘント;根特;헨트; +city::2797670;Genk;Genck;Genk;Генк; +city::2800481;Charleroi;Carleroe;Carleroé;Caroloregium;Charleroi;Gorad Sharlerua;Sarleroua;Sarlerua;Sarlrua;Sharleroa;Sharlerua;Sharlroa;Tchalerwe;Tchålerwè;char lex raw;charlyrwyy;sha lei luo wa;sharlerua;sharlrwa;sharlwrwa;sharururowa;syaleullua;Šarlerua;Šarlruā;Σαρλερουά;Горад Шарлеруа;Шарлероа;Шарлеруа;Шарлроа;Շառլեռուա;שרלרואה;شارلروآ;شارلوروا;چارلیروئی;ชาร์เลอรัว;შარლერუა;シャルルロワ;沙勒罗瓦;샤를루아; +city::2800866;Brussels;An Bhruiseil;An Bhruiséil;BRU;Breissel;Brisel;Brisele;Briuselis;Brjuksel;Brjusel';Brjussel';Brueksel;Bruessel;Bruesszel;Bruiseal;Bruksel;Bruksela;Brukseli;Brukselo;Brusehl';Brusel;Brusela;Bruselas;Bruseles;Bruselj;Bruselo;Brusel·les;Brussel;Brussele;Brussels;Brussel·les;Bruxel;Bruxelas;Bruxellae;Bruxelles;Brwsel;Bryssel;Bryusel;Bryxelles;Bréissel;Brüksel;Brüssel;Brüsszel;Citta di Bruxelles;Città di Bruxelles;City of Brussels;Kota Brusel;beulwisel;braselsa;brassels;briuseli;brwksl;brysl;bu lu sai er;buryusseru;Βρυξέλλες;Брисел;Брусэль;Брюксел;Брюсель;Брюссель;Բրյուսել;בריסל;بروكسل;بروکسل;بريۇسسېل;ܒܪܘܟܣܠ;ब्रसेल्स;บรัสเซลส์;ბრიუსელი;ブリュッセル;布魯塞爾;布鲁塞尔;브뤼셀; +city::2800931;Brugge;Brige;Briuge;Briugė;Briz;Brizh;Briž;Brjuge;Brjugge;Broegge;Brudje;Bruegge;Brugae;Bruges;Brugge;Bruggy;Brugia;Brugo;Bruhhe;Brujas;Bruxas;Bruza;Bruĝo;Brycg;Brygge;Bryugge;Bryz;Brögge;Brügge;Gorad Brugeh;beulwiheo;briuge;bruch;bruja;brwj;brwkhh;brwyz;brwz;bu lu he;bu lu ri li shi zhong xin;buruhhe;Μπρυζ;Бриж;Брюгге;Брюге;Горад Бругэ;Բրյուգգե;ברוז;بروج;بروخه;برویز;ब्रूज;บรูช;ბრიუგე;ブルッヘ;布吕赫;布鲁日历史中心;브뤼허; +city::2803138;Antwerpen;ANR;Amberes;Amberis;Amversa;Anberes;Antuairp;Antuerpen;Antuerpia;Antuérpia;Antverpen;Antverpenas;Antverpene;Antverpeno;Antverpens;Antverpia;Antverpy;Antwarp;Antwerp;Antwerpa;Antwerpe;Antwerpen;Antwerpia;Antwerpium;Antwerpn;Antwyrpijo;Antwérp;Anvers;Anversa;Anverse;Anvèrs;Anvérse;Gorad Antverpen;Kota Antwerpen;On-thit-vi-phu;amtavarpa;an te wei pu;anteubeleupen;antou~erupen;antowapu;antverp;antwrb;antwrp;antwyrb;Ôn-thi̍t-ví-phú;Αμβέρσα;Антверпен;Горад Антверпен;Անտվերպեն;אנטווערפן;אנטוורפן;آنتورپ;أنتويرب;انتورب;انتويرب;انٹیورپ;अँटवर्प;ஆண்ட்வெர்ப்;ആന്റ്‌വെർപ്;แอนต์เวิร์ป;အန့်တွပ်မြို့;ანტვერპენი;アントウェルペン;アントワープ;安特卫普;安特衞普;안트베르펜; +city::2803448;Aalst;Aalst;Alost; +city::2357043;Ouahigouya;OUG;Ouahigouya;Uahiguja;Uakhiguja;Vakhiguja;Waiguya;wa xi gu ya;wahiguya;waiguya;Вахигуя;Уахігуя;ואיגויה;واہیگؤیا;ワヒグヤ;瓦希古亞;와이구야; +city::2357048;Ouagadougou;Gorad Uagadugu;Huagadugu;OUA;Ouagadouga;Ouagadougou;Ouankantounkou;Ougadougou;Owagadugu;Uagadougou;Uagadugu;Uagaduguo;Uagadugú;Uaqaduqu;Vagadugu;Wagadugu;awagadwgw;uagadugu;vagadugu;vakatuku;wa jia du gu;wa ka du ku;wagado~ugu;wagadugu;wagadwgw;wagadwwgww;waghadwghw;Ουαγκαντουγκού;Ουαγκαντούγκου;Горад Уагадугу;Уагадугу;Ուագադուգու;ואגאדוגו;וואגאדוגו;آواگادوگو;اوآگادوگو;اوگاڈوگو;واغادوغو;واگادووگوو;واگادوگو;वागाडुगू;ਵਾਗਾਦੁਗੂ;வாகடூகு;วากาดูกู;ཨོ་འ་ག་དོའུ་གོའུ།;უაგადუგუ;ዋጋዱጉ;ワガドゥグー;瓦加杜古;와가두구; +city::2358946;Koudougou;Kondougou;Koudougou;Kudugu;Kuduguo;khu du ku;ku du gu;kudo~ugu;kudugu;kwdwgw;Кудугу;کؤدؤگؤ;کودوگو;คูดูกู;クドゥグ;库杜古;쿠두구; +city::2362344;Bobo-Dioulasso;BOY;Bobo Dioulasso;Bobo Diulasas;Bobo-Dioulasso;Bobo-Diulaco shaary;Bobo-Diulaso;Bobo-Diulasso;Bobodjulaso;bo bo di wu la suo;bobodiullaso;bwbw dywlasw;bwbw-dywlasw;bwbwdywlasw;Бобо-Диулаco шаары;Бобо-Диуласо;Бобо-Діуласо;بوبو دیولاسو;بوبو-دیؤلاسو;بوبوديولاسو;ボボ・ディウラッソ;博博迪乌拉索;보보디울라소; +city::2362909;Banfora;BNR;Banfora;Banforu;banfora;banfwra;bang fu la;bangpola;Банфора;Банфору;באנפורה;بانفورا;バンフォラ;邦福拉;방포라; +city::725578;Yambol;Iambol;JAM;Jambol;Jamboli;Yambol;Yampolis;Ямбол; +city::725712;Vratsa;Ivraca;Vraca;Vracae;Vrata;Vratca;Vratsa;Vrattsa;Vratza;Vrața;Wraca;Wraza;beulacha;fratsa;fu la cha;vratsa;vuratsu~a;wratsa;İvraca;Βράτσα;Врацæ;Враца;וראצה;فراتسا;وراتسا;ڤراتسا;ヴラツァ;弗拉察;브라차; +city::725905;Vidin;Vidin;Vidinas;Vidine;Vidinu;Vintin;Widin;Widyn;Widyń;bidin;fydn;vu~idin;wdyn;wei ding;wydyn;Βίντιν;Видин;Видинъ;וידין;فيدن;ودین;ویدین;ヴィディン;維丁;비딘; +city::725993;Veliko Turnovo;Tarnovo;Tarnowo;Ternovo;Tirnovo;Trnova;Trnovo;Turnovo;Tărnovo;Tărnowo;Tŭrnovo;Veliko T"rnovo;Veliko Tarnovo;Veliko Tărnovo;Weliko Tarnowo;Wielkie Tyrnowo;vu~eriko・tarunovu~o;Велико Търново;ヴェリコ・タルノヴォ; +city::726050;Varna;Barna;Gorad Varna;Odessos;Odessus;Stalin;VAR;Varna;Varna khot;Varnae;Várna;Warna;baleuna;farna;varna;vharna;vu~aruna;wa er na;war na;warna;wʼrnh;Βάρνα;Варнæ;Варна;Варна хот;Горад Варна;Վառնա;וארנה;فارنا;وارنا;व्हर्ना;วาร์นา;ვარნა;ヴァルナ;瓦爾納;바르나; +city::726418;Dobrich;Bazargic;Dobric;Dobrich;Dobrici;Dobricius;Dobricz;Dobritch;Dobritj;Dobrits;Dobritsch;Dobritsj;Dobritx;Dobritš;Dobriç;Dobriĉ;Dobrič;Dobričius;Dòbritx;Gorad Dobrych;Hadzi-Oghlu-Pazardzik;Hadži-Oghlu-Pazardžik;Khadzhioglu Bazardzhik;Khadzhioglu Pazardzhik;Ntomprits;Tolbuhin;Tolbukhin;dobeulichi;doburichi;duo bu li qi;dwbrch;dwbrych;dwbrytsh;dwbryz;Ντόμπριτς;Горад Добрыч;Добрич;Դոբրիչ;דובריץ;دوبريتش;دوبرچ;دوبریچ;ドブリチ;多布里奇;도브리치; +city::726848;Stara Zagora;Eski Zagra;Eski Zağra;Gorad Stara-Zagora;SZR;Stara Sagora;Stara Zagora;Stara-Zagora;Stara-Zagorae;Stará Zagora;astara zagwra;jiu zha ge la;seutalajagola;stara zaghwra;stara zagwra;Στάρα Ζαγόρα;Горад Стара-Загора;Стара Загора;Стара Ꙁагора;Стара-Загорæ;Стара-Загора;Ստարա Զագորա;סטארה זאגורה;استارا زاگورا;ستارا زاغورا;ستارا زاگورا;სტარა-ზაგორა;スタラ・ザゴラ;舊扎戈拉;스타라자고라; +city::727011;Sofia;Gorad Safija;SOF;Serdica;Sofi;Sofia;Sofiae;Sofie;Sofii;Sofij;Sofija;Sofija osh;Sofijo;Sofio;Sofiya;Sofiä;Sofiýa;Sofja;Sofya;Sofía;Soifia;Sophia;Sredets;Suofeje;Suofėjė;Szofia;Szófia;Sòfia;Sófia;Sófía;Sóifia;Ulpia Serdica;cohviya;saphiya;seaphiya;sofeiy;sofi'a;sofia;sophiya;sopia;suo fei ya;swfya;swfyh;swpyh;Σόφια;Горад Сафія;Софи;Софий;София;София ош;Софија;Софія;Софїꙗ;Սոֆիա;סאפיע;סופיה;سوفىيە;سۆفیا;صوفيا;صوفیه;صوفیہ;صوٙفیە;सोफिया;সফিয়া;ਸੋਫ਼ੀਆ;சோஃவியா;സോഫിയ;โซเฟีย;སོ་ཧྥི་ཡ།;სოფია;ሶፊያ;ソフィア;索菲亞;소피아;𐍃𐍉𐍆𐌹𐌰; +city::727079;Sliven;Gorad Sliven;Islimiye;Islimje;Sliven;Slivenas;Slivno;Sliwen;aslmyh;aslywn;seulliben;si li wen;sliveni;slybn;slyfn;slywyn;surivu~en;sylwyn;Σλίβεν;Горад Слівен;Сливен;Слівен;סליבן;اسلمیه;اسلیون;سليفن;سلیوین;سلیڤێن;سیلوین;სლივენი;スリヴェン;斯利文;슬리벤; +city::727233;Shumen;Choumen;Choumèn;Kolarovgrad;Schumen;Shoumen;Shumen;Shumla;Sjumen;Sumen;Sumla;Sumnu;shumen;Şumnu;Šumen;Šumla;Шумен; +city::727523;Ruse;ROU;Roese;Rouse;Rousse;Roussé;Roustchouk;Ruschuk;Ruschuq;Rusciuk;Rusclink;Ruscuk;Ruse;Rushchuk;Rushtuk;Russe;Rustschuk;Rusze;Rusçuk;Rusė;Ruzo;Ruščuk;Saray-Makhle;Sexantaprista;lu sai;luse;ru se;ruse;rwsh;rwsh blgharstan;Ρούσε;Роусє;Русе;Ռուսե;רוסה;روسه;روسه، بلغارستان;روسے، بلغاریہ;ڕوسێ;รูเซ;რუსე;ルセ;鲁塞;루세; +city::728193;Plovdiv;Eumolpias;Filiba;Filibe;Filipopol;Filipopul;Filippopol;Filippopol';Filippopoli;Flavia;Julia;PDV;Philippopel;Philippopoli;Philippopolis;Philippoupole;Pinople;Plodin;Ploudin;Plovdin;Plovdiv;Plovdiva;Plovdivas;Plowdiw;Plóvdiv;Poulpoudeva;Płowdiw;Sinople;Trimontium;Ulpia;Vinipoppolis;blwfdyf;peullobeudipeu;phlx fdif;plovhadivha;plwbdyb;plwwdyf;plwwdyw;pu luo fu di fu;purovudifu;Φιλιππούπολη;Пловдив;Фїлїппополь;Պլովդիվ;פלאוודיוו;פלובדיב;بلوفديف;پلوودیف;پلوودیو;प्लॉव्हडिव्ह;พลอฟดิฟ;პლოვდივი;プロヴディフ;普罗夫迪夫;플로브디프; +city::728203;Pleven;Gorad Pleven;Pleven;Plevenas;Plevna;Plevne;Plewen;Plyeven;blfn;peulleben;plbn;plwn;plywyn;pu lie wen;purevu~en;Πλέβεν;Горад Плевен;Плевен;Պլևեն;פלבן;بلفن;پلون;پلیوین;პლევენი;プレヴェン;普列文;플레벤; +city::728330;Pernik;Dimitrovo;Gorad Pernik;Pernik;Pernikas;brnyk;pei er ni ke;peleunikeu;per nik;peruniku;prnyk;prnyq;pyrnk;Πέρνικ;Горад Пернік;Перник;פרניק;برنيك;پرنیک;پیرنک;پێرنیک;เปร์นิก;ペルニク;佩尔尼克;페르니크; +city::728378;Pazardzhik;Pasardschik;Pasardshik;Pazarcik;Pazarcık;Pazardjik;Pazardsjik;Pazardzhik;Pazardzik;Pazardzikas;Pazardzjik;Pazardĵik;Pazardżik;Pazardžik;Pazardžikas;Pazartzik;Pàzardjik;Tatar Bazardzik;Tatar Bazardžik;Tatar Pazardjik;Tatar Pazardzhik;Tatar Pazardzik;Tatar Pazardžik;Tatar-Bazardzhik;bazarjyk;pa sar cik;pa zha er ji ke;pajaleujikeu;pazarjk;pazarjyk;pazarjyk blgharstan;pazarjyk bwlgarya;pazarujiku;Πάζαρτζικ;Пазарджик;Пазарџик;פאזארדזיק;بازارجيك;پازارجک;پازارجیک;پازارجیک، بلغارستان;پازارجیک، بولگاریا;ปาซาร์จีก;パザルジク;帕扎爾吉克;파자르지크; +city::729794;Kardzhali;Exrdzhali;Kardjali;Kardschali;Kardshali;Kardzali;Kardzhali;Kardzjali;Kardĵali;Kardžali;Kartzali;Kerdzalai;Kerdzhali;Kerdžalai;Kerjali;Kircaali;Kirdjalu;Kirdjalü;Kirdzali;Kirdzalu;Kirdzhali;Kirdžali;Kirdžalü;Kirjali;Krdjali;Krdzali;Krdžali;Kudjaly;Kurdzali;Kurdzhale;Kurdzhali;Kurdzhalii;Kyakyrdzhali;Kyrdzali;Kyrdzhali;Kyrdżali;Kărdjali;Kărdzhali;Kărdžali;Kırcaali;Kŭrdzhale;Kŭrdzhali;Kŭrdzhalii;Kŭrdžali;kardzhaly;karjly;ke er gu li;keoleujalli;kurujari;Κάρτζαλι;Кирджалі;Крџали;Кърджали;Кырджали;קרדזאלי;كارجلي;کاردژالی;კირჯალი;クルジャリ;克爾賈利;커르잘리; +city::730435;Haskovo;Chaskoi;Chaskovas;Chaskovo;Chaskowo;Chasköi;Gorad Khaskava;HKV;Haskioj;Haskiöj;Haskovo;Haskoy;Hasköy;Khaskovo;Khàskovo;ha si ke wo;haseukobo;haskwfw;hasukovu~o;khaskww;Ĥaskovo;Χάσκοβο;Горад Хаскава;Хасково;חאסקובו;خاسکوو;خاسکۆڤۆ;هاسكوفو;هاسکوفو;ہسکوا;ハスコヴォ;哈斯科沃;하스코보; +city::730496;Kazanlak;Kasanlak;Kasanlăk;Kazanl"k;Kazanlak;Kazanlako;Kazanlek;Kazanlik;Kazanlk;Kazanluk;Kazanlyk;Kazanlăk;Kazanlık;Kazanlŭk;Kazanłyk;qʼzʼnlq;Казанлък;Казанлык;קאזאנלק; +city::731549;Gabrovo;Gabrova;Gabrovas;Gabrovo;Gabrowo;Gorad Gabrava;Gàbrovo;Nkamprovo;gabeulobo;gabrww;gabrwww;gaburovu~o;gbrwbw;gbrwwa;ghabrwfw;jia bu luo wo;Γκάμπροβο;Габрово;Горад Габрава;Գաբրովո;גברובו;غابروفو;گابروو;گابرووو;گابرۆڤۆ;گبرووا;ガブロヴォ;加布羅沃;가브로보; +city::732770;Burgas;BOJ;Boergas;Bourgas;Bournkas;Burgas;Burgas khot;Burgasa;Burgasas;Burgaso;Burgasz;Burgaz;Burghaz;Burgàs;Burqas;Gorad Burgas;Mpournkas;brgas;bu er jia si;buleugaseu;burgasa;burgasi;burugasu;bwrgas;bwrghas;bwrgs;Μπουργκάς;Μπουργκας;Μπούργκας;Бургас;Бургас хот;Горад Бургас;Пѷргъ;Բուրգաս;בורגס;برگاس;بورغاس;بورگاس;बुर्गास;ბურგასი;ブルガス;布爾加斯;부르가스; +city::733191;Blagoevgrad;Blagoevgrad;Blagoewgrad;Blagojevgrad;Blagojevgradas;Blagojewgrad;Blagoëvgrad;Blagòevgrad;Blankoevnkrant;Blaqoyevqrad;Błagojewgrad;Djumaja;Dzhumaya;Dzuma;Dzumaja;Džuma;Džumaja;Gorad Blagoeugrad;Gorna Djoumaia;Gorna Djumaya;Gorna Dshumaja;Gorna Dzhumaja;Gorna Dzhumaya;Gorna Dzumaja;Gorna Džumaja;Yukari Cuma;Yukarı Cuma;beullago-ebeugeuladeu;blaghwyfghrad;blagoevgradi;blagwwgrad;blagwyywgrad;bu la ge ye fu ge lei;buragoevugurato;Μπλαγκόεβγκραντ;Благоевград;Благоєвград;Горад Благоеўград;Горна Джумая;Բլագոևգրադ;בלגואבגרד;بلاغويفغراد;بلاگوئیوگراد;بلاگووگراد;ბლაგოევგრადი;ブラゴエヴグラト;布拉戈耶夫格勒;블라고에브그라드; +city::733618;Asenovgrad;Asenovgrad;Assenovgrad;Assenovgrade;Assenowgrad;Stanimaka;Асеновград; +city::290247;Madinat Hamad;Hamad Town;Madinat Hamad;Madīnat Ḩamad;madinat hamad;مَدِينَة حَمَد; +city::290269;Dar Kulayb;Dar Chulaib;Dar Kulaib;Dar Kulayb;Dār Kulaib;Dār Kulayb;dar kulayb;دَار كُلَيْب; +city::290332;Al Muharraq;Al Muharrak;Al Muharraq;Al Muḩarraq;Al'-Mukharrak;Al-Muharrak;Al-Muharraq;Al-Muḥarrak;Moharek;Muharrak;Muharraq;Muharraq Town;Muhurraq;aalmuharaq;mhrq;Аль-Мухаррак;اَلْمُحَرَّق;محرق; +city::290340;Manama;Al Manama;Al Manamah;Al Manāma;Al Manāmah;Al-Manama;Al-Manamah;Al-Manāmah;Gorad Manama;Maenamae;Manaama;Manam;Manama;Manamae;Manamah;Manameh;Manamo;Manáma;Manāma;Menama;Mename;Mänamä;WGF;aalmanamat;almnamh;almnamt;mai na ma;mai na mai;manama;mnamh;mnamہ;Μανάμα;Горад Манама;Манамæ;Манама;Մանամա;מנאמה;المنامة;المنامه;اَلْمَنَامَة;منامه;منامہ;مەنامە;मनामा;মানামা;ਮਨਾਮਾ;ମାନାମା;மனாமா;മനാമ;มานามา;མ་ན་མ།;მანამა;ማናማ;マナーマ;麥納瑪;麦纳麦;마나마; +city::385038;Ar Rifa';Ar Rifa;Ar Rifa`;Ar Rifā‘;Riffa;اَلرِّفَاع; +city::425378;Bujumbura;BJM;Boujoumboura;Budzumbura;Bujumbura;Bujumburo;Bujumbúra;Buj·umbura;Buyumbura;Buzhumbura;Buzumbura;Buĵumburo;Bużumbura;Bužumbura;Bužumbūra;Bújúmbúra;Bûjûmbûra;Gorad Buzhumbura;Mpouzoumpoura;Usumbura;bajmbwra;bu cum bur a;bu qiong bu la;bu song bu la;bujubura;bujumabura;bujumbula;bujumbura;bujunbura;buzhumbura;bwgwmbwrh;bwjwmbra;bwjwmbwra;pucumpura;Μπουζουμπούρα;Бужумбура;Буџумбура;Буҷумбура;Горад Бужумбура;Բուժումբուրա;בוגומבורה;בוזשומבורע;باجمبورا;بوجومبرا;بوجومبورا;बुजुंबुरा;ਬੁਜੁੰਬੁਰਾ;ବୁଜୁମବୁରା;புசும்புரா;บูจุมบูรา;བུ་ཇུམ་བུ་ར།;ბუჟუმბურა;ቡጁምቡራ;ブジュンブラ;布松布拉;布琼布拉;부줌부라; +city::431748;Muyinga;Mujinga;Muyinga;Муйинга; +city::2391893;Save;SVF;Save;Savé; +city::2392087;Porto-Novo;Borto-Novo;Gorad Porta-Nova;Porto Neuvo;Porto Nobo;Porto Novas;Porto Novo;Porto-Novo;Portonovo;Portus Novus;Poto-Novo;Pòrto Neuvo;Pòto-Novo;Pôrto-Novo;bo duo nuo fu;bo tu nu bu;bwrtw nwfw;poleutonobo;porato-novo;porto-novho;porutonobo;pwrtw nwbw;pwrtw nwww;pxr to-no wo;xin gang;Πόρτο Νόβο;Πόρτο-Νόβο;Горад Порта-Нова;Порто Ново;Порто-Ново;Պորտո Նովո;פארטא-נאווא;פורטו נובו;بورتو نوفو;پورتو نووو;پورٹو نووو;پۆرتۆ نۆڤۆ;पोर्तो-नोव्हो;ਪੋਰਤੋ-ਨੋਵੋ;ปอร์โต-โนโว;པོར་ཊོ་-ནོ་བོ།;პორტო-ნოვო;ፖርቶ ኖቮ;ポルトノボ;新港;波圖奴埠;波多诺伏;포르토노보; +city::2392204;Parakou;PKO;Parakou;Paraku;pa la ku;palaku;paraku;parakw bnyn;Параку;פאראקו;پاراکو، بنین;パラクー;帕拉庫;파라쿠; +city::2392308;Ouidah;Fortaleza de Sao Joao Baptista de Ajuda;Fortaleza de São João Baptista de Ajudá;Ouidah;Sao Joao Baptista de Ajuda;São João Baptista de Ajudá;Vidy;Whydah;Wida;sheng yue han bao;Виды;圣约翰堡; +city::2392505;Nikki;Nikki;Никки; +city::2392601;Natitingou;NAE;Natitingou;Natitingu;Натитингу; +city::2392897;Lokossa;Locossa;Lokossa; +city::2393693;Kandi;KDC;Kandi;Kandis;kandi;kandy bynn;kang di;kndy bnyn;Канди;کاندی، بینن;کندی، بنین;カンディ;康迪;칸디; +city::2394560;Djougou;DJA;Djougou;Jugu; +city::2394819;Cotonou;Appi;COO;Catonou;Cotonou;Cotonu;Cotonú;Gorad Katanu;Kotonou;Kotonu;Kotonuo;Kutonu;Kútọnu;ji da nu;ke tuo nu;kotonu;kottonau;kwtwnw;qwtwnw;Κοτονού;Горад Катану;Котону;קוטונו;كوتونو;کوتونو;कोतोनू;ਕੋਤੋਨੂ;கொட்டொனௌ;კოტონუ;コトヌー;吉大奴;科托努;코토누; +city::2395049;Bohicon;Bohicon; +city::2395914;Abomey-Calavi;Abome Calavi;Abomej-Kalavi;Abomey-Calavi;Kalavi;Абомей-Калави; +city::2395915;Abomey;Abome;Abomei;Abomej;Abomey;Palacios Reais de Abomei;Palácios Reais de Abomei;Абомей; +city::1820906;Bandar Seri Begawan;BWN;Banda Seri;Bandar Seri Begauan;Bandar Seri Begavan;Bandar Seri Begavanas;Bandar Seri Begawan;Bandar Sery Begawan;Bandar-Seri-Begavan;Bandar-Seri-Begavano;Bandarseribegavana;Brunei;Brunei Town;Bruni;Gorad Bandar-Sery-Begavan;Mpantar Seri Mpenkaban;badara seri begavana;ban dar se ribe ka wan;bandaleuseulibeugawan;bandar seri bagevan;bandar-seri-begavani;bandara seri bega'oyana;bandara seri begavana;bandara sri bagavana;bandarusuribugawan;bndr sry bgawan;bndr sry bkawan;bndr sry bygwan;pantar ceri pekavan;si li ba jia wan;si li ba jia wan shi;sry bgawan;Μπαντάρ Σερί Μπεγκαβάν;Бандар Сери Бегаван;Бандар-Сери-Бегаван;Бандар-Сері-Бегаван;Горад Бандар-Серы-Бегаван;Բանդար Սերի Բեգավան;בנדר סרי בגוואן;باندار سەرى بەگاۋان;بندر سري بكاوان;بندر سری بگاوان;بندر سری بیگوان;بەندەر سێری بێگاوان;سری بگاوان;बंदर स्री बगवान;बन्दर सेरी बेगवान;बन्दर सेरी बेगावान;বন্দর সেরি বেগাওয়ান;ਬੰਦਰ ਸੇਰੀ ਬੇਗਵਾਨ;பண்டர் செரி பெகாவான்;ಬಂದರ್ ಸೆರಿ ಬಗೆವನ್;ബന്ദർ സെരി ബെഗവൻ;บันดาร์เสรีเบกาวัน;སི་རི་པེ་ཀ་མཚོ་ཁུགས་གྲོང་ཁྱེར།;ဘန်ဒါဆရီဘဂါဝမ်မြို့;ბანდარ-სერი-ბეგავანი;ባንዳር ሰሪ ቤጋዋን;バンダルスリブガワン;斯里巴加湾市;斯里巴加灣;斯里巴加灣市;반다르스리브가완; +city::3901178;Yacuiba;BYC;Jakuiba;Yacuiba;Yacuíba;Якуиба; +city::3902377;Trinidad;Ciudad Trinidad;Kimsantin llaqta;La Santisima Trinidad;TDD;Trinidad;Trinidadas;te li ni da;teulinidadeu;torinida;trynydd;Тринидад;Тринідад;טרינידד;ٹرینیڈاڈ، بولیویا;ტრინიდადი;トリニダ;特立尼达;트리니다드; +city::3903320;Tarija;Ciudad Tarija;TJA;Taricha;Tarija;Tarikha;Tarixa;ta li ha;taliha;tariha;tarykha;Тариха;Таріха;تاریخا;ტარიხა;タリハ;塔里哈;타리하; +city::3903987;Sucre;Chuqichaka;Chuquisaca;Ciudad Sucre;Gorad Sukreh;Ijoloti Sukre;SRE;Sik;Soukre;Sucre;Sucre toertenelmi ovarosa;Sucre történelmi óvárosa;Sukre;Sukri;Sukro;Sukrė;Súkre;su ke lei;su ker;sukare;sukeule;sukre;sukure;swkrh;swkry;swqrh;Σούκρε;Горад Сукрэ;Иёлоти Сукре;Сукре;Սուկրե;סוקרה;سوكري;سوکره;سکرے;سۇكرې;सुक्रे;ਸੂਕਰੇ;ซูเกร;སུ་ཁུ་རེ།;სუკრე;スクレ;苏克雷;蘇克雷;수크레; +city::3904906;Santa Cruz de la Sierra;Ciudad Santa Cruz;Ciudad de Santa Cruz de la Sierra;SRZ;Santa Cruz;Santa Cruz da Serra;Santa Cruz de la Sierra;Santa-Krus-de-la-Sierra;santakurusu;Санта-Крус-де-ла-Сиерра;سانتا کروز دلاسیه‌را;サンタクルス; +city::3906466;Riberalta;RIB;Riberal'ta;Riberalta;li wei la er ta;libelalta;riberaruta;Рибералта;Риберальта;რიბერალტა;リベラルタ;里韋拉爾塔;리베랄타; +city::3907584;Potosi;Ciudad Potosi;POI;Potosi;Potosí;Putusi;bo tuo xi;bwtwsy;po to si;potoshi;potosi;pwtwsy;Ποτοσί;Потоси;Потосі;Պոտոսի;פוטוסי;بوتوسي;پوتوسی;पोतोसी;โปโตซี;პოტოსი;ポトシ;波托西;포토시; +city::3909234;Oruro;Ciudad Oruro;Gruro;ORU;Oruras;Oruro;Uru Uru;Ururu;ao lu luo;awrwrw;awrwrw bwlywya;olulo;oruro;Оруро;Օրուրո;أورورو;اورورو، بولیویا;ორურო;オルロ;奥鲁罗;오루로; +city::3910027;Montero;Monteras;Montero;Vibora;Víbora;meng te luo;montelo;montero;Монтеро;მონტერო;モンテロ;蒙特羅;몬테로; +city::3911925;La Paz;A Paz;Chukiyawu;Chuqi Yapu;Chuqiyapu;Ciudad La Paz;Gorad La-Pas;LPB;La Pas;La Pasas;La Paz;La-Pas;La-Pas shaary;La-Pazo;Lapasa;Pax;Soukre/La Paz;la ba si;la paja;la pajha;la pas;la pasa;la paz;labaz;lapaja;lapas;lapaseu;lapaz;rapasu;Λα Πας;Σούκρε/Λα Παζ;Горад Ла-Пас;Ла Паз;Ла Пас;Ла-Пас;Ла-Пас шаары;Լա Պաս;לא פאז;לה פאס;لا پاز;لاباز;لاپاز;ला पाझ;ला पास;লা পাজ;ਲਾ ਪਾਸ;ଲାପାଜ;லா பாஸ்;ലാ പാസ്;ลาปาซ;ლა-პასი;ላፓዝ;ラパス;拉巴斯;라파스; +city::3919968;Cochabamba;CBB;Ciudad Cochabamba;Cochabamba;Kocabamb;Kocabamba;Kochabamba;Kočabamb;Kočabamba;Kuchawampa;Quchapampa;ke qia ban ba;ko cha bam ba;kochabamba;kochabanba;kwchabamba;kwtshabamba;qwzbmbh;Кочабамба;קוצבמבה;كوتشابامبا;کوچابامبا;โกชาบัมบา;ཀོ་ཅ་བང་ལྦ་;კოჩაბამბა;コチャバンバ;科恰班巴;코차밤바; +city::3384987;Vitoria de Santo Antao;Victoria;Vitoria;Vitorija-de-Santu-Antan;Vitória;Витория-де-Санту-Антан; +city::3385935;Tucurui;Alcobaca;Alcobaça;TUR; +city::3386361;Timon;Flores;Timon;Тимон; +city::3386496;Teresina;Gorad Tehrehzina;Poti;THE;Teresina;Terezina;Theresina;Therezina;Vila Nova do Poti;te lei xi na;te re si na;telejina;terejina;teresina;trzynh;tyrysyna;Горад Тэрэзіна;Терезина;Терезіна;תרזינה;تيريسينا;تیریسینا;টেরেসিনা;เตเรซีนา;ტერეზინა;テレジーナ;特雷西納;테레지나; +city::3387296;Sobral;Januaria de Acaracu;Januária de Acaracu;QBX;Sobral;Sobrat;Собрал; +city::3387786;Serra Talhada;Serra-Tal'jada;Vila Bela;Villa Bella;sai la ta li ya da;serara talahada;Серра-Тальяда;সেররা টালহাডা;塞拉塔利亚达; +city::3388368;Sao Luis;Maranhao;Maranhão;SLZ;San Luisas;San-Luis;Sao Louis;Sao Luis;Sao Luis do Maranhao;Sao Luiz;Sao Luiz de Maranhao;Sao Luiz do Maranhao;Saun Luis;Saun Luís;São Luis;São Luiz;São Luiz de Maranhão;São Luiz do Maranhão;São Luís;São Luís do Maranhão;cavo luyicu;sa'o lu'isa;san-luisi;sanglu-iseu;saw lwyys;saw lwyz;sayw lwyys maranhaw;sheng lu yi si;Σάο Λουίς;Сан-Луис;Сан-Луіс;Сан-Луїс;Сао Луис;סאו לואיס;ساؤ لوئیس;ساؤ لوئیس، مارانہاؤ;سائو لوئیس، مارانهاو;ساو لويز;साओ लुईस;সাও লুইস;சாவோ லூயிசு;სან-ლუისი;サン・ルイス;圣路易斯;상루이스; +city::3388376;Sao Lourenco da Mata;San-Lorensu-da-Mata;Sao Lourenco;Sao Lourenco da Matta;São Lourenço;São Lourenço da Matta;Сан-Лоренсу-да-Мата; +city::3389321;Santa Rita;; +city::3389353;Santarem;STM;Santarem;Santarem i Brasil;Santaren;Santarenas;Santarém;Santarém i Brasil;sang ta rey;santaleng;santaren;santary para;sheng ta lun;sntrm;Сантарем;Сантарен;סנטרם;سانتاری، پارا;ซังตาเรย์;サンタレン;聖塔倫;산타렝; +city::3389609;Santa Ines;Ines;Inês;Santa-Ines;Санта-Инес; +city::3389652;Santa Cruz do Capibaribe;Capibaribe;Santa Cruz;Santa-Krus-du-Kapibaribi;santa kruja do kapibaribe;sheng ke lu si-du ka pi ba li bi;Санта-Крус-ду-Капибариби;সান্টা ক্রুজ ডো কাপিবারিবে;圣克鲁斯-杜卡皮巴里比; +city::3390288;Rio Largo;; +city::3390760;Recife;Arrecife;Fernambucum;Gorad Rehsifi;Mauricea;Mauricéa;Pernambuco;REC;Recife;Resife;Resifi;Resifė;hesiphi;hesipi;lei xi fei;li si fei;re sifi;recihpi;reshife;resiphe;resipi;risifi;rsyph;rysyf;rysyfy;Ρεσίφε;Горад Рэсіфі;Ресифе;Ресифи;Ресіфі;Ռեսիֆի;רסיפה;ريسيفي;ریسیف;रिसीफ़ी;रेसिफे;রেসিফে;হেসিফি;ரெசிஃபி;เรซีฟี;რესიფი;レシフェ;李斯腓;累西腓;헤시피; +city::3391360;Santana;Porto;Porto de Santana;Pôrto;Pôrto de Santana;Santana;Сантана; +city::3392167;Picos;PCS;Picos;Pikus;pi ku si;pikosa;pikuseu;pikusu;Пикус;পিকোস;ピークス;皮库斯;피쿠스; +city::3392242;Petrolina;PNZ;Petrolina;bi de luo li na;petrolina;Петролина;পেট্রোলিনা;彼得羅利納; +city::3392734;Paulo Afonso;Barra;Brejo;PAV;Paulu-Afonsu;pa'ulo aphonso;Паулу-Афонсу;পাউলো আফোন্সো;პაულუ-ალფონსუ;保罗·阿方索城; +city::3392740;Paulista;Paulista;Паулиста; +city::3392887;Patos;Patus;pa tu si;patosa;Патус;Պատուս;পাটোস;帕图斯; +city::3392998;Parnamirim;Eduardo Gomes;Parnamirim;Parnamirin;parnamirima;Парнамирин;পার্নামিরিম; +city::3393001;Parnaiba;Feitoria;PHB;Parnahiba;Parnahyba;Parnaiba;Parnaimpa;Porto das Barcas;Pôrto das Barcas;Sao Joao da Parnahiba;São Joao da Parnahiba;ba na yi ba;parna'iba;Παρναΐμπα;Парнаиба;পার্নাইবা;巴纳伊巴; +city::3393008;Parintins;PIN;Parintins;Parintinsa;Паринтинса; +city::3393106;Paragominas;; +city::3393400;Pacatuba;; +city::3393536;Olinda;Olinda;ao lin da;olinda;ollinda;orinda;xo ling da;Олинда;Олінда;אולינדה;ওলিন্ডা;โอลิงดา;ოლინდა;オリンダ;奧林達;올린다; +city::3394023;Natal;NAT;Natal;Natalo;Натал;נאטאל; +city::3394682;Mossoro;MVF;Mocoro;Mosoro;Moçoró;mo suo luo;mosasoro;mosoro;Мосоро;মোসসোরো;モソロー;莫索罗; +city::3395395;Marechal Deodoro;Alagoas;Alagôas;Madalena; +city::3395473;Maracanau;; +city::3395503;Maraba;MAB;Maraba;Marabá;ma la ba;malaba;maraba;Мараба;مارابا;মারাবা;马拉巴;마라바; +city::3395981;Maceio;MCZ;Macayo;Maceio;Maceió;Masejas;Masejo;Maseyo;Maçayó;ma sai yue;ma se xo;masayw;mase'i'o;maseio;masyyw;msyyʼw;Масейо;Масејо;מסייאו;ماسئیو;ماسايو;মাসেইও;มาเซโอ;მასეიო;マセイオ;马塞约;마세이오; +city::3396016;Macapa;MCP;Macapa;Macapá;Makapa;ma ka pa;makaba;makapa;Макапа;מקאפה;ماكابا;ماکاپا;मकापा;মাকাপা;มากาปา;მაკაპა;マカパ;馬卡帕;마카파; +city::3397147;Juazeiro do Norte;JDO;Jaozeiro;Joazeiro;Juazeiro;Juazeiro do Norte;Zhuazeiro do Norte;Zhuazejru-du-Norti;Zuazeiro do Norte;bei ru a ze lu;juraajaye'iro do norte;Žuazeiro do Nortė;Жуазеиро до Норте;Жуазейру-ду-Норти;জুৱাজয়েইরো ডো নোর্টে;ჟუაზეირუ-დუ-ნორტი;北茹阿澤魯; +city::3397277;Joao Pessoa;Cidade Felipea;Cidade Felipéa;Fredericia;Frederícia;Gorad Zhuan-Pesoa;JPA;Joan-Pesoo;Joao Pessoa;João Pessoa;Parahiba;Parahyba;Paraiba;Paraíba;Zhoao Pesoa;Zhuan-Pesoa;Zhuan-Pessoa;Zoan Pesoa;Zoao Pesoa;co xea pes so xa;ho'ava peso'a;joanpesoa;joya'o pesasoya;juangpesoa;jwaw byswa;jwaw pyswa;ruo ang pei suo a;zhwaw pswa parayyba;zwʼʼw pswʼh;Ĵoan-Pesoo;Žoan Pesoa;Ζοάο Πεσόα;Горад Жуан-Песоа;Жоао Песоа;Жуан-Песоа;Жуан-Пессоа;ז'ואאו פזואה;זואאו פסואה;جوآو پیسوآ;جواو بيسوا;جواو پیسوا;ژواو پسوا، پارائیبا;होआव पेसोआ;জোয়াও পেসসোয়া;โจเอาเปสโซอา;ჟუან-პესოა;ジョアンペソア;若昂佩索阿;주앙페소아; +city::3397893;Itacoatiara;ITA;Itacoatiara;Serpa; +city::3397909;Itapipoca;Imperatriz;Itapipoka;Итапипока; +city::3397967;Itaituba;ITB;Itaituba; +city::3398115;Ipojuca;Ipozhuka;Pojuca;Ипожука; +city::3398269;Imperatriz;IMP;Imperatris;Imperatrisas;Imperatriz;Vila Nova de Imperatriz;imaperatrija;yin pei la te li si;Императриз;Императрис;ইমপেরাট্রিজ;იმპერატრისი;因佩拉特里斯; +city::3398331;Iguatu;QIG;Telha; +city::3398352;Igarassu;Igaracu;Igarasu;Igaraçu;Iguaracu;Iguarassu;Iguarassú;Iguaraçu;igarasasu;yi jia la su;Игарасу;ইগারাসসু;伊加拉苏; +city::3398450;Horizonte;; +city::3398691;Gravata;Gravata;Gravatá; +city::3399058;Garanhuns;Garan'juns;QGP;Гараньюнс; +city::3399415;Fortaleza;Ceara;Ceará;FOR;Fortalaetia;Fortaleza;Fortaleza Nova de Braganca;Fortaleza Nova de Bragança;Fortaleza de Nova Braganca;Fortaleza de Nova Bragança;Fortalezae;Fortalezo;Gorad Fartaleza;f xr tale sa;forutareza;fu ta lei sa;fwrtalyza;fwrtalza;phartalija;phortaleja;phortalejha;poleutalleja;pwrtlzh;Φορταλέζα;Горад Фарталеза;Форталезæ;Форталеза;פורטלזה;فورتالزا;فورتاليزا;फोर्तालेझा;ফর্তালিজা;ফোর্টালেজা;ฟอร์ตาเลซา;ფორტალეზა;フォルタレザ;福塔雷萨;福塔雷薩;포르탈레자; +city::3401545;Crato;Crato;Kratu;Vila Real do Crato;ke la tu;Крату;კრატუ;克拉图; +city::3401548;Crateus;Cratheus;Cratheús;Piranhas;Principe Imperial;Príncipe Imperial; +city::3402000;Codo;Codo;Codó;Urubu; +city::3402383;Caxias;Caxias das Aldeias Altas;Kashias;Kasias;Kasijasas;Kašijasas;ka xi ya si;Кашиас;Կաշիաս;კაშიასი;卡希亚斯; +city::3402429;Caucaia;Soure; +city::3402591;Castanhal;Kastan'jal;ka si ta ni ya er;kastanahala;Кастаньял;কাস্টানহাল;卡斯塔尼亞爾; +city::3402613;Cascavel;; +city::3402655;Caruaru;CAU;Caruaru;Karuaru;Каруару; +city::3402721;Carpina;Karpina;Карпина; +city::3403642;Campina Grande;CPV;Campina Grande;Kampina Grande;Kampina Grandi;Kampina Grandė;Kampina-Grande;Kampina-Grandi;Kampinagrando;da kan pi na;kamapina grande;kampinageulanji;kanpinagurande;Кампина Гранде;Кампина Гранди;Кампина-Гранде;Кампина-Гранди;কামপিনা গ্রান্ডে;カンピナグランデ;大坎皮納;캄피나그란지; +city::3404117;Caico;Kajko;ka'iko;kai ke;Кайко;কাইকো;凯科; +city::3404545;Cabo;; +city::3404558;Cabedelo;Cabedello;Cabedelos;Kabedelu;ka bei de lu;kabedelo;Кабеделу;Կաբեդելու;কাবেডেলো;卡贝德卢; +city::3405006;Braganca;; +city::3405738;Bezerros;Bezerrus;Безеррус; +city::3405870;Belem;BEL;Belem;Belem do Para;Belem do Pará;Belen;Belena;Belenas;Belém;Belém do Pará;Bethlehem;Para;Pará;Santa Maria de Belem do Grao Para;Santa Maria de Belém do Grão Pará;Vele;Velẽ;bei lun;belem;belema;beleng;beleni;belleng;beren;blm;bylym;Μπελέμ;Белем;Белен;בלם;بلم;بيليم;بیلیم;बेलेम;বেলেঁ;বেলেম;เบเลง;ბელენი;ベレン;贝伦;벨렝; +city::3405940;Bayeux;; +city::3406317;Barra do Corda;BDC; +city::3406545;Balsas;BSS;Bal'sas;Sant' Antonio de Balsas;Santo Antonio de Balsas;Бальсас; +city::3406910;Bacabal;Bacabal;Bakabal;Бакабал; +city::3407216;Arcoverde;Arkoverdi;Rio Branco;Арковерди; +city::3407327;Arapiraca;APQ; +city::3407357;Araguaina;AUX;Araguaina;Araguaína;Lontra;a la gua yi na;Арагуаина;阿拉瓜伊纳; +city::3407407;Aquiraz;; +city::3407669;Ananindeua;Ananindeua;a na ning de wa;ananinde-ua;ananinderaa;ananindeua;Ананиндеуа;Ананіндеуа;Անանինդեուա;אננינדאואה;انانین‌دوا، پارا;আনানিন্ডেৱা;アナニンデウア;阿納寧德瓦;아나닌데우아; +city::3407882;Altamira;ATM;Al'tamira;Altamira;Altamira vald;a er ta mi la;altamira;altmyra para;Алтамира;Альтамира;Ալտամիրա;التمیرا، پارا;আল্টামিরা;阿爾塔米拉; +city::3408404;Abreu e Lima;Abreu e Lima;Abreu-i-Lima;Maricota;a bu lei wu ai li ma;abre'u e lima;abrw a lyma prnambwka;Абреу-и-Лима;Абреу-і-Ліма;ابرو ا لیما، پرنامبوکا;আব্রেউ এ লিমা;阿布雷乌埃利马; +city::3408424;Abaetetuba;Abaete;Abaetetuba;Abaeté; +city::3444864;Votuporanga;VOT; +city::3444866;Votorantim;Voturantim; +city::3444876;Volta Redonda;Gorad Volta-Rehdonda;V Redonda;Volta Redonda;Volta-Redonda;bholata redonda;wo er ta lei dong da;Волта Редонда;Волта-Редонда;Горад Волта-Рэдонда;ভোলটা রেডোন্ডা;沃尔塔雷东达; +city::3444914;Vitoria da Conquista;Conquista;VDC;Vitoria da Conquista;Vitorija da Konkista;Vitorija-da-Konkista;Vitória da Conquista;bhitoriya da konaku'ista;wei duo li ya-da kong ji si ta;Витория-да-Конкиста;Виторија да Конкиста;ভিটোরিয়া ডা কোনকুইস্টা;ვიტორია-და-კონკისტა;ヴィトリア・ダ・コンキスタ;维多利亚-达孔基斯塔; +city::3444924;Vitoria;VIX;Victoria;Vitoria;Vitorija;Vitória;bitoria;wytwryh;Витория;ויטוריה;ビトリア; +city::3445014;Vinhedo;Rocinha; +city::3445026;Vila Velha;Vila Vela;Vila Velha;Vila Velja;Vila-Vel'ja;bhila bhelaha;billabellya;wei li ya zhen;wylh wlyh;Вила Веля;Вила Веља;Вила-Велья;וילה וליה;ভিলা ভেলহা;ヴィラ・ヴェーリャ;韦利亚镇;빌라벨랴; +city::3445133;Vicosa;Visoza;bisoja;vu~isoza;wei suo sa;Висоза;Вісоза;Վիսոզա;ヴィソーザ;維索薩;비소자; +city::3445153;Viana;Jabaete;Jabaeté;Viana;Vianna;Виана; +city::3445156;Viamao;Viaman;Viamao;Viamão;Vijamao;bhi'ama'o;wei ya mang;Виаман;Вијамао;ভিআমাও;维亚芒; +city::3445162;Vespasiano;; +city::3445446;Varzea Paulista;Secundino Veiga; +city::3445451;Varzea Grande;Varzea Grande;Várzea Grande; +city::3445487;Varginha;VAG;Varzhin'ja;bharginaha;wa er ren a;Варжинья;ভার্গিনহা;瓦尔任阿; +city::3445578;Valinhos;Valin'jus;Vallinhos;bhala'inahosa;wa li ni wu si;Валиньюс;Валіньюс;ভালইনহোস;瓦利尼乌斯; +city::3445596;Valenca;Marques de Valenca;Marquês de Valença;Valensa;ballensa;wa lun sa;Валенса;Վալենսա;瓦倫薩;발렌사; +city::3445597;Valenca;VAL;Valenca;Valença; +city::3445630;Vacaria;Ibia'e;Ibia'é;Vaccaria;Vakarija;Вакария; +city::3445679;Uruguaiana;URG;Uruguaiana;Uruguajana;Uruguayana;Urugvajana;uruguraa'iyana;wu lu gua ya na;Уругваяна;Уругуаяна;উরুগুৱাইয়ানা;乌鲁瓜亚纳; +city::3445764;Unai;Capim Branco;Unahy;Unaj;Унай; +city::3445782;Umuarama;UMU; +city::3445831;Uberlandia;UDI;Uberlandia;Uberlandija;Uberlândia;ubeleullanjia;uberlandiya;uberuranjia;wu bei lan di ya;xu ber lang deiy;Уберландия;Уберландија;উবের্লান্ডিয়া;อูเบร์ลังเดีย;ウベルランジア;烏貝蘭迪亞;우베를란지아; +city::3445839;Uberaba;UBA;Uberaba;uberaba;wu bei la ba;Убераба;উবেরাবা;烏貝拉巴; +city::3445847;Ubatuba;UBT;Ubatuba;ubatuba;wu ba tu ba;Убатуба;উবাটুবা;乌巴图巴; +city::3445859;Uba;Uba;uba;wu ba;Уба;উবা;乌巴; +city::3445942;Tupa;Tupa;Tupan;tu pang;tupaya;Тупа;Тупан;টুপয়া;图庞; +city::3445993;Tubarao;Tubaran;tu ba lang;tubara'o;Тубаран;টুবারাও;图巴朗; +city::3446038;Trindade;Trindadi;te lin da di;trindade;Триндади;Տրինդադի;ট্রিন্ডাডে;ტრინდადი;特林达迪; +city::3446065;Tres Rios;Entre-Rios;QIH;Tres-Rius;te lei si li ao si;tresa ri'osa;Трес-Риус;ট্রেস রিওস;特雷斯里奥斯; +city::3446098;Tres Lagoas;Lagoas;TJL;Tres Lagoas;Tres-Lagoas;Três Lagoas;tresa lagoyasa;trys laghwas;Трес-Лагоас;تريس لاغواس;ট্রেস লাগোয়াস; +city::3446138;Tres Coracoes;Tres Coracoes;Tres Korasojns;Tres-Korasojns;Três Corações;te lei si ke la song yi si;tresa korakoyesa;Трес Корасойнс;Трес-Корасойнс;טרס קוראסואס;ট্রেস কোরাকোয়েস;特雷斯科拉松伊斯; +city::3446370;Toledo;TOW;Toledo;Толедо; +city::3446445;Timoteo;Timofej;Timoteu;Timothea;di mo te wu;tima'ote'o;timoteo;Тимотеу;Тимофей;টিমওটেও;ティモテオ;蒂莫特乌; +city::3446606;Teresopolis;Terezopolis;Therezopolis;te lei suo bo li si;teresopolisa;Терезополис;টেরেসোপোলিস;特雷索波利斯; +city::3446621;Teofilo Otoni;TFL;Teofilo Otoni;Teofilu-Otoni;Teófilo Otoni;Teófilo Otôni;Theophilo Ottoni;te ao fei lu ao tuo ni;te xxfi lu xo to ni;te'ophilo otoni;tywfylw awtwny;Теофилу-Отони;تيوفيلو أوتوني;টেওফিলো ওটোনি;เตออฟีลูโอโตนี;特奥菲卢奥托尼; +city::3446652;Telemaco Borba;TEC;Telemachus Borba;Telemaco Borba;Telemako Borba;Telemaku-Borba;tayelemako borba;te lai ma ku bo er ba;Телемако Борба;Телемаку-Борба;টয়েলেমাকো বোর্বা;特莱马库博尔巴; +city::3446682;Taubate;Taubate;Taubatea;Taubatė;Tava yvate;Táva yvate;ta'ubate;tao ba te;taubate;tea ba te;Таубате;টাউবাটে;เตาบาเต;タウバテ;陶巴特; +city::3446692;Tatui;Tatuhy;Tatui;Tatuí;ta tu yi;tatu'i;Татуи;টাটুই;塔图伊; +city::3446753;Taquaritinga;Takuaritinga;ta kua li ting jia;takuraaritinga;takwarytyngha;Такуаритинга;تاكواريتينغا;টাকুৱারিটিঙ্গা;塔夸里廷加; +city::3447186;Taboao da Serra;Tabuao da Serra;Tabuão da Serra; +city::3447212;Suzano;Susano;Suzano;Suzanu;su zha nuo;sujano;suzano;Сузано;Сузану;সুজানো;スザノ;蘇扎諾; +city::3447259;Sumare;RWS;Reboucas;Rebouças;Sumare;Sumaré;su ma lei;sumare;Сумаре;সুমারে;蘇馬雷; +city::3447399;Sorocaba;SOD;Sorocaba;Sorokaba;solokaba;sorokaba;suo luo ka ba;Сорокаба;সোরোকাবা;ソロカーバ;索羅卡巴;소로카바; +city::3447624;Sete Lagoas;Sete Lagoas;Seti-Lagoas;sete lagoyasa;Сете Лагоас;Сети-Лагоас;সেটে লাগোয়াস; +city::3447651;Sertaozinho;; +city::3447779;Serra;Serra;Серра; +city::3447785;Seropedica;Seropedika;sai luo pei di ka;sera'opedika;Серопедика;সেরওপেডিকা;塞罗佩迪卡; +city::3447854;Senador Canedo;; +city::3447998;Sarandi;; +city::3448011;Saquarema;; +city::3448031;Sapucaia;Acapucai;Açapucaí;Guianuba;Güianuba;Sapucaia;Sapukaja;Сапукая; +city::3448063;Sapiranga;Sapyranga; +city::3448136;Sao Vicente;San Visente;San Visentė;San-Visenti;Sao Visente;Sao Visenti;sangbisenchi;sheng wei sen te shi;Сан-Висенти;Сан-Вісенті;Сао Висенте;Сао Висенти;סאו ויסנטה;聖維森特市;상비센치; +city::3448221;Sao Sebastiao do Paraiso;San-Sebast'jan-du-Paraiso;San-Sebast'jan-du-Paraizu;Sao Sebastiao Paraiso;Sao Sebastiao do Paraizo;São Sebastião Paraíso;São Sebastião do Paraizo;sa'o sebasatiya'o do para'iso;sheng sai ba si di ang-du pa la yi su;Сан-Себастьян-ду-Параизу;Сан-Себастьян-ду-Параисо;সাও সেবাসটিয়াও ডো পারাইসো;圣塞巴斯蒂昂-杜帕拉伊苏; +city::3448257;Sao Sebastiao;San-Sebast'jan;sa'o sebasatiya'o;sheng sai ba si di ang;Сан-Себастьян;সাও সেবাসটিয়াও;聖塞巴斯蒂昂; +city::3448300;Sao Roque;; +city::3448351;Sao Pedro da Aldeia;San-Pedru-da-Aldeja;Sao Pedro d'Aldeia;São Pedro d'Aldeia;sa'o pedro da alade'iya;sheng pei de luo-da a er de ya;Сан-Педру-да-Алдея;সাও পেড্রো ডা আলডেইয়া;圣佩德罗-达阿尔德亚; +city::3448439;Sao Paulo;SAO;Sampa;San Paolo;San Paul ed Brasil;San Paulas;San Paulo;San Paulu;San Paulu du Brasili;San Paulu dû Brasili;San Pauluw;San Pawlo;San Polo del Braxil;San Poulo;San Poło del Braxil;San Pàul ëd Brasil;San-Paulo;San-Paulu;San-Paŭlo;Sanpaulu;Sao Paolo;Sao Paulo;Sao Paulo capital;Saun Paulu;Sawo Palo;Sawo Pålo;São Paolo;São Paulo;São Paulo capital;Urbs Paulistana;cavo pavulo;sa'o pa'ulo;sa'o paulo;samu pa'ulu;sangpaollo;sangpaollu;sangpaullo;sangpaullu;sankt. paulos;sanpauro;savea pealea;savo palo;saw bawlw;saw palw;saw pwlw;saywpaywlw;sea pea lu;sheng bao luo;Σάο Πάολο;Сан Пауло;Сан Паулу;Сан-Паулу;Сан-Паўлу;Сао Паоло;Сао Пауло;Սան Պաուլու;סאו פאולא;סאו פאולו;ساؤ پالو;ساؤ پولو;سائوپائولو;ساو باولو;ܣܐܘ ܦܐܘܠܘ;ސައޮ ޕައުލޯ;साओ पाउलो;সাঁউ পাউলু;সাও পাউলো;சாவோ பாவுலோ;శఒ పౌలొ;ಸಾವೊ ಪಾಲೊ;സാവോ പോളോ;เซาเปาลู;ဆောပိုလိုမြို့;სან-პაულუ;ሳው ፓውሉ;サンパウロ;聖保羅;상파올로;상파올루;상파울로;상파울루; +city::3448519;Sao Mateus;SBJ;San-Mateus;Sao Mateus;Sao Matheus;São Mateus;São Matheus;Сан-Матеус; +city::3448622;Sao Leopoldo;San-Leopoldu;Sao Leopoldo;São Leopoldo;sa'o le'opolado;sangle-opoldu;sheng li ao bo er du;Сан-Леополду;Сао Леополдо;সাও লেওপোলডো;サン・レオポルド;圣利奥波尔杜;상레오폴두; +city::3448632;Sao Jose dos Pinhais;San-Zhoze-dus-Pin'jajs;Sao Jose dos Pinhaes;Sao Jose dos Pinhais;Sao Zhose dos Pinajs;São José dos Pinhaes;São José dos Pinhais;sa'o jose dosa pinaha'isa;saw khwzh dws pynhays;sheng ruo ze du si pi ni ai si;Сан-Жозе-дус-Пиньяйс;Сан-Жозе-дус-Піньяйс;Сао Жосе дос Пињајс;סאו זוזה דוס פיניאיס;ساو خوزه دوس پینهایس;সাও জোসে ডোস পিনহাইস;聖若澤杜斯皮尼艾斯; +city::3448636;Sao Jose dos Campos;SJC;SJCampos;SJK;San Zoze dos Kamposas;San Žozė dos Kamposas;San-Zhoze-dus-Kampus;Sao Jose dos Campos;Sao Zhose dos Kampos;Sao Zhoze dos Kampos;Sao jose dos Campos;São José dos Campos;São josé dos Campos;Vale Paraiba;Vale do Paraiba;Vale do Paraíba;sa'o jose dosa kamposa;sangjojeduseukampuseu;sayw khwzh dws kamps;sheng ruo ze duo si kan bo si;Сан-Жозе-дус-Кампус;Сао Жозе дос Кампос;Сао Жосе дос Кампос;سائو خوزه دوس کامپس;সাও জোসে ডোস কাম্পোস;サン・ジョゼ・ドス・カンポス;聖若澤多斯坎波斯;상조제두스캄푸스; +city::3448639;Sao Jose do Rio Preto;Rio Preto;SJP;San Zoze do Rio Pretas;San Žozė do Rio Pretas;San-Zhoze-du-Riu-Pretu;Sao Zhoze do Rio Preto;pu lei tu he pan sheng ruo ze;sa'o jose do ri'o preto;Сан-Жозе-ду-Риу-Прету;Сан-Жозе-ду-Ріу-Прету;Сао Жозе до Рио Прето;সাও জোসে ডো রিও প্রেটো;サン・ジョゼー・ド・リオ・プレト;普雷图河畔圣若泽; +city::3448742;Sao Jose;; +city::3448877;Sao Joao de Meriti;Gorad San-Zhuan-dy-Meryty;Meriti;Merity;San Zuan de Meritis;San Žuan de Meritis;San-Zhuan-di-Meriti;Sao Zhoao de Meriti;Sao Zhoao di Meriti;sa'o joya'o de meriti;sheng ruo ang di mei li di;Горад Сан-Жуан-ды-Мерыты;Сан-Жуан-ди-Мерити;Сао Жоао де Мерити;Сао Жоао ди Мерити;সাও জোয়াও ডে মেরিটি;聖若昂迪梅里蒂; +city::3448879;Sao Joao del Rei;JDR;San-Zhuan-del-Rej;Sao Joao del Rei;Sao Joao del-Rei;Sao Jose del Rey;São José del Rey;São João del Rei;São João del-Rei;sa'o joya'o dela re'i;sangjoangjiulei;sheng ruo ang-de lei;Сан-Жуан-дел-Рей;সাও জোয়াও ডেল রেই;サン・ジョアン・デル・レイ;圣若昂-德雷;상조앙지우레이; +city::3448902;Sao Joao da Boa Vista;; +city::3449099;Sao Gabriel;; +city::3449310;Sao Cristovao;San Kristovanas;San-Kristovan;Sao Christovao;São Christovão;sa'o karisatobhya'o;sangkeuliseutobang;sheng ke li si tuo wang;Сан-Кристован;সাও করিসটোভ্যাও;სან-კრისტოვანი;サン・クリストヴァン;聖克里斯托旺;상크리스토방; +city::3449319;Sao Carlos;QSC;San Karlosas;San-Karlos;San-Karlus;Sao Carlos;Sao Carlos do Pinhal;Sao Karlos;São Carlos;São Carlos do Pinhal;Urbs Carlopolitana;sa'o karlosa;sangkaleulluseu;saw karlws;sheng ka luo si;Сан-Карлос;Сан-Карлус;Сао Карлос;ساو كارلوس;ساو کارلوس;সাও কার্লোস;聖卡洛斯;상카를루스; +city::3449324;Sao Caetano do Sul;QCX;San-Kaehtano-du-Sul;Sao Caetano do Sul;São Caetano do Sul;Сан-Каэтано-ду-Сул; +city::3449340;Sao Borja;San-Borkha;Sao Borja;São Borja;Сан-Борха; +city::3449344;Sao Bernardo do Campo;QSB;SBC;SBCampo;San-Bernardo-du-Kampu;Sao Bernardo;Sao Bernardo do Campo;São Bernardo;São Bernardo do Campo;Сан-Бернардо-ду-Кампу; +city::3449350;Sao Bento do Sul;San-Bentu-du-Sul;Sao Bento;Sao Bento do Sul;Serra Alta;São Bento;São Bento do Sul;Сан-Бенту-ду-Сул; +city::3449433;Santos;Baixada Santista;Gorad Santus;SSZ;Santos;Santosas;Santus;Santus khot;Santusa;Urbs Sanctorum;sang tuo si;sang tus;santosa;santosu;santuseu;santws;santws saw pawlw;sntws;Σάντος;Горад Сантус;Сантос;Сантус;Сантус хот;סנטוס;سانتوس;سانتوس، ساؤ پاؤلو;সান্টোস;ซังตูส;サントス;桑托斯;산투스; +city::3449521;Santo Antonio de Jesus;; +city::3449696;Santo Angelo;GEL;Santo Angelo;Santo Ângelo;Santu-Andzhelo;Santu-Anzhelu;santo anagelo;sheng an re lu;Санту-Анджело;Санту-Анжелу;সান্টো আনগেলো;圣安热卢; +city::3449701;Santo Andre;Santo Andre;Santo André;Santu-Andre;Санту-Андре; +city::3449822;Santa Rosa;SRA; +city::3449936;Santana do Livramento;LVB;Livramento;Sant'Anna do Livramento;Santana do Livramento;Santana-du-Livramentu;santana do libhramenato;sheng an na-li fu la men tu;sntnh dw lybrmntw;Сантана-ду-Ливраменту;סנטנה דו ליברמנטו;সান্টানা ডো লিভ্রামেনটো;サンタナ・ド・リヴラメント;圣安娜-利弗拉门图; +city::3449948;Santana de Parnaiba;Parnahyba;Parnaiba;Parnaíba;Sant'Ana-de-Paranaiba;Sant'Ana-de-Paranaíba; +city::3450083;Santa Maria;RIA;Santa Maria da Boca do Monte;Santa Marija;Santa-Marija;san ta ma reiy;santa marya;santamalia;sheng ma li ya;snth mryh;Санта Марија;Санта-Мария;סנטה מריה;سانتا ماریا;ซานตามาเรีย;聖瑪麗亞;산타마리아; +city::3450144;Santa Luzia;Santa Lucia;Santa Luzija;Santa Lúcia;Santa-Lusija;Santa-Luzija;sheng lu xi ya;Санта Лузија;Санта-Лузия;Санта-Лусия;聖盧西亞; +city::3450269;Santa Cruz do Sul;CSU;Santa Cruz;Santa-Krus-du-Sul;nan sheng ke lu si;santa kruja do sula;Санта-Крус-ду-Сул;সান্টা ক্রুজ ডো সুল;南圣克鲁斯; +city::3450404;Santa Barbara d'Oeste;Barbara do Oeste;Bárbara do Oeste;Santa Barbara do Oeste;Santa Bárbara do Oeste;Sata Barbar dOeste;Sata Bárbar dOeste; +city::3450554;Salvador;Bahia;Baia;Baía;SSA;Sal'vador;Salvador;Salvador da Bahia;Salvador de Bahia;Salvador de Bahio;Salvador de Bahía;Salvadora;Salvadoras;Sao Salvador;Soteropolis;sa er wa duo;sal wad xr;salabhadora;salfadwr bahya;salvadori;salvhadora da ba'iya;salwadwr;sarubadoru;saruvu~adoru;saubadoleu;slbdwr;slwadwr;Σαλβαδόρ;Салвадор;Сальвадор;סלבדור;سالفادور، باهيا;سالوادور;سلوادور;साल्व्हादोर दा बाईया;সালভাদোর;ซัลวาดอร์;სალვადორი;サルバドール;サルヴァドール;萨尔瓦多;사우바도르; +city::3450594;Salto;Sal'to;Salto do Itu;Salto do Itú;Saltu;sa er tu;Салту;Сальто;萨尔图; +city::3450909;Rondonopolis;ROO;Rodonopolis;Rodonópolis;Rondonopolis;Rondonópolis; +city::3450964;Rolandia;Caviuna;Caviúna; +city::3451138;Rio Grande;RIG;Rio Grande;Rio Grande do Sul;Rio-Grande;San Pedro do Rio Grande;Sao Pedro do Rio Grande do Sul;São Pedro do Rio Grande do Sul;Рио-Гранде; +city::3451152;Rio do Sul;Itajahy do Sul;QRU;Rio Sul;Riu-du-Sul;nan he zhen;ri'o do sula;Риу-ду-Сул;রিও ডো সুল;南河镇; +city::3451190;Rio de Janeiro;Ciutat de Rio de Janeiro;Gorad Rya-deh-Zhanehjra;RIO;Rio;Rio De Janeiro;Rio d Janeiro;Rio de Janeiro;Rio de Janeiru;Rio de Janero;Rio de Janeyro;Rio de Janèro;Rio de Janêro;Rio de Zaneiras;Rio de Zaneiros;Rio de Zaneyro;Rio de Zhaneiro;Rio de Zhanejro;Rio de Žaneiras;Rio dé Janéyro;Rio dė Žaneiros;Rio nte Tzaneiro;Rio-de-Janejro;Rio-de-Janeyro;Rio-de-Zaneiro;Rio-de-Zanejro;Rio-de-Zaneyro;Rio-de-Zhanejro;Rio-de-janeiro;Rio-de-Ĵanejro;Rio-de-Žaneiro;Rio-de-Žaneýro;Riodezaneiro;Riodežaneiro;Riu de Janeiro;Riu de Janeiru;Riviethe de Janvyi;Riviéthe dé Janvyi;Río de Janeiro;Sao Sebastiao do Rio de Janeiro;São Sebastião do Rio de Janeiro;Urbs Fluminensis;iriyo ti ceniro;li yue re nei lu;liudejaneilu;rath ri xode ca ne ro;ri xode ca ne ro;ri'o di janero;ri'o di jeneri'o;ri'o di jeniro;rio-de-zhaneiro;riodejaneiro;rios. dis. djaneiros;riyea di janirea;riyo di janairo;riyo di janero;riyo di jeneriyo;riyo di jenero;riyo di jyaneriyo;ryw dh znyyrw;ryw dw zhanyrw;ryw dwzhanyrw;ryw dy janyrw;Ρίο ντε Τζανέιρο;Горад Рыа-дэ-Жанэйра;Рио де Жанеиро;Рио де Жанейро;Рио-де-Жанейро;Ріо де Жанейро;Ріо-де-Жанейро;Ռիո դե Ժանեյրո;ריא דע זשאנערא;ריו דה זניירו;ريو دى جانيرو;ريو دي جانيرو;ریو دو ژانیرو;ریو دوژانیرو;ریو دے جینیرو;ریو ڈی جینرو;ڕیۆ دێ ژانێرۆ;रियो डि जेनेरो;रियो दि जानेरो;रियो दि ज्यानेरियो;रियो दी जेनेरियो;রিও ডি জেনিরো;রিও দি জেনেরিও;ਰਿਓ ਡੀ ਜਨੇਰੋ;இரியோ டி செனீரோ;ರಿಯೋ ಡಿ ಜನೈರೊ;റിയോ ഡി ജനീറോ;รัฐรีโอเดจาเนโร;รีโอเดจาเนโร;རིའོ་ཌེ་ཇ་ནེའུ་རའོ།;ရီယို ဒီ ဂျီးနေးရိုးမြို့;რიო-დე-ჟანეირო;ሪዮ ዴ ጃኔይሮ;リオデジャネイロ;里約熱內盧;里约热内卢;리우데자네이루; +city::3451205;Rio das Ostras;; +city::3451234;Rio Claro;QIQ; +city::3451328;Ribeirao Preto;Entre Rios;RAO;Ribeiran Pretas;Ribeirao;Ribeirao Preto;Ribeirão;Ribeirão Preto;Ribejran-Pretu;Ribejrao Preto;hibeilangpeuletu;li bei lang pu lei tu;ribe'ira'o preto;Рибеирао Прето;Рибейран-Прету;Рибейрао Прето;Рібейран-Прету;রিবেইরাও প্রেটো;リベイラン・プレト;里貝朗普雷圖;히베이랑프레투; +city::3451329;Ribeirao Pires;; +city::3451353;Ribeirao das Neves;Neves;Nevez;Ribeirao das Neves;Ribeirão das Neves; +city::3451668;Resende;QRZ;REZ;Resende;Rezende;Rezendi;hejenji;lei sen di;rysndy;Резенди;Резенді;ریسندی;雷森迪;헤젠지; +city::3452073;Queimados;; +city::3452324;Presidente Prudente;PPB;Prezidente Prudente;Prezidente Prudentė;Prezidenti-Prudenti;per sideng chi pru deng chi;presidente prudente;pu lu deng te zong tong cheng;Президенте Пруденте;Президенти-Пруденти;Презіденті-Пруденті;প্রেসিডেন্টে প্রুডেন্টে;เปรซีเดงชีปรูเดงชี;普鲁登特总统城; +city::3452465;Praia Grande;Praja Grande;Praja-Grandi;Prajja-Grandi;da pu la ya;pra'iya grande;Прайя-Гранди;Прая-Гранди;Прая-Гранді;Праја Гранде;প্রাইয়া গ্রান্ডে;大普拉亚; +city::3452525;Pouso Alegre;PPY;Pozu-Alegri;Puzu Alegri;bo su a lai ge li;pa'uso alegre;po su xa lek ri;Позу-Алегри;Пузу Алегри;পাউসো আলেগ্রে;โปซูอาเลกรี;波苏阿莱格里; +city::3452640;Porto Seguro;BPS;Portu-Seguru;bwrtw syjwrw;parto seguro;sai gu lu gang;Порту-Сегуру;بورتو سيجورو;পর্টো সেগুরো;პორტუ-სეგურუ;ポルト・セグーロ;塞古鲁港; +city::3452925;Porto Alegre;Gorad Portu-Alegry;POA;Porto Alegre;Porto Alegri;Porto Alegrė;Porto Alenkre;Porto de Sao Francisco dos Casaes;Porto-Alegro;Portu-Alegre;Portu-Alegri;Portualegri;Portus Alacer;Puerto Alegre;Pôrto de São Francisco dos Casaes;a lei ge li gang;bwrtw alyghry;parto alegre;poleutuallegeuli;portu alegri;pwrtw algrh;Πόρτο Αλέγκρε;Горад Порту-Алегры;Порто Алегре;Порто Алегри;Порту-Алегре;Порту-Алегри;Порту-Алегрі;פורטו אלגרה;بورتو أليغري;پورتو الگره;پورتو الیگرے;पोर्तू अलेग्री;পর্টো আলেগ্রে;პორტუ-ალეგრი;ポルト・アレグレ;阿雷格里港;포르투알레그리; +city::3453150;Ponta Pora;PMG;Ponta Pora;Ponta Porã;Ponta-Poran;Punta Pora;Punta Porá;ponta pora;Понта-Поран;পোন্টা পোরা; +city::3453186;Ponta Grossa;PGZ;Ponta Grosa;Ponta Grossa;Ponta-Grosa;peng ta ge luo sa;pon ta krx s sa;ponta grosasa;pwnta grwsa;Понта Гроса;Понта-Гроса;پونتا گروسا;পোন্টা গ্রোসসা;โปนตากรอสซา;蓬塔格羅薩; +city::3453303;Pocos de Caldas;POO;Poco Caldas;Pocos de Caldas;Posus-di-Kaldas;Poço Caldas;Poços de Caldas;bo su si-di ka er da si;pokosa de kaladasa;Посус-ди-Калдас;পোকোস ডে কালডাস;波苏斯-迪卡尔达斯; +city::3453406;Poa;; +city::3453420;Planaltina;Alta Mir;Altamira;Planaltina; +city::3453546;Pirapora;PIV;Pirapora;pi la bo la;pirapora;Пирапора;পিরাপোরা;皮拉波拉; +city::3453639;Pirassununga;Pirassinunga;Pirassununga;Pirasununga;QPS;pi la su nong jia;pirasasununga;Пирасунунга;পিরাসসুনুঙ্গা;皮拉苏农加; +city::3453643;Piracicaba;Piracicaba;Pirasikaba;Pirasykava;QHB;pi la xi ka ba;pirasikaba;Пирасикаба;Пірасікаба;পিরাসিকাবা;皮拉西卡巴; +city::3453837;Pindamonhangaba;Pindamon'jangaba;Pindamonhangaba;pindamonahanagaba;ping da mo ni yang jia ba;Пиндамоньянгаба;পিন্ডামোনহানগাবা;平达莫尼扬加巴; +city::3454031;Petropolis;Petropolis;Petròpolis;Petrópolis;bi de luo bo li si;peteulopolliseu;petoroporisu;petropolisa;ptrwpwlys;Петрополис;Петрополіс;פטרופוליס;পেট্রোপোলিস;ペトロポリス;彼得罗波利斯;페트로폴리스; +city::3454061;Peruibe;Peruhybe;Peruibi;caraguava;pei lu yi bi;peru'ibe;Перуиби;পেরুইবে;佩鲁伊比; +city::3454235;Penapolis;Penapolis;Pennapolis;Пенаполис; +city::3454244;Pelotas;PET;Pelotas;Pelotasas;Sao Francisco de Paula;São Francisco de Paula;pei luo ta si;pellotaseu;pelotasa;Пелотас;পেলোটাস;佩洛塔斯;펠로타스; +city::3454690;Paulinia;Paulinia;Paulinija;Pauliniya;Paulinjo;Urbs Paulinia;bao li ni ya;bbawlysta;pa'ula'iniya;paurinia;paywlynya;Паулиния;Паулінія;פאוליניה;بباوليستا;پائولینیا;পাউলইনিয়া;パウリニア;保利尼亚; +city::3454763;Patrocinio;Patrosiniu;pa te luo xi ni wu;patroka'ini'o;Патросиниу;পাট্রোকইনিও;帕特罗西尼乌; +city::3454783;Patos de Minas;POJ;Patos;Patos de Minas;Patus-di-Minas;pa tu si di mi na si;patosa de minasa;Патус-ди-Минас;পাটোস ডে মিনাস;帕图斯迪米纳斯; +city::3454818;Pato Branco;PTO;Pato Branco;Patu-Branku;pa tu bu lan ku;pato branko;Пату-Бранку;পাটো ব্রাঙ্কো;帕图布兰库; +city::3454847;Passos;PSW;Passos;Pasus;pa su si;pasasosa;Пассос;Пасус;পাসসোস;帕苏斯; +city::3454857;Passo Fundo;PFB;Passo Fundo;Pasu-Fundu;pa su feng du;pas su fun du;pasaso phunado;Пасу-Фунду;পাসসো ফুনডো;ปาสซูฟูนดู;帕苏丰杜; +city::3455051;Paranavai;Fazenda Ivai;Fazenda Ivaí;PVI;Paranvai;Paranvaí; +city::3455070;Paranagua;PNG;Paranagua;Paranaguá;Paranankoua;ba la na gua;paranagu'a;paranagua;Παραναγκουά;Паранагуа;পারানাগুআ;パラナグア;巴拉那瓜; +city::3455161;Para de Minas;Para;Para-di-Minas;Pará;pa la di mi na si;para de minasa;Пара-ди-Минас;পারা ডে মিনাস;パラ・デ・ミナス;帕拉迪米纳斯; +city::3455168;Paracatu;Parakatu;pa la ka tu;parakatu;Паракату;পারাকাটু;帕拉卡图; +city::3455478;Palhoca;Pal'osa;pa e sa;palahoka;Пальоса;পালহোকা;帕略萨; +city::3455671;Ouro Preto;Oro Pretas;Oro Preto;Oru-Pretu;Ouro Preto;auro preto;olupeuletu;ou lu pu lei tu;xo ru per tu;Оро Прето;Ору-Прету;אורו פרטו;ঔরো প্রেটো;โอรูเปรตู;ორუ-პრეტუ;オウロ・プレット;欧鲁普雷图;오루프레투; +city::3455729;Ourinhos;OUS;Orin'jus;Ourinhos;Urbs Parvauratana;aurinahosa;ou li ni ao si;Ориньюс;ঔরিনহোস;欧里尼奥斯; +city::3455775;Osasco;Osasku;QOC;Осаску; +city::3456068;Novo Hamburgo;Novo Amburgo;Novo Hamburg;Novo Hamburgo;Novu-Amburgu;Potiguara;QHV;nobho hamaburgo;nobuambuleugu;nowu xam bur ku;xin han bao;Ново Амбурго;Нову-Амбургу;নোভো হামবুর্গো;โนวูอัมบูร์กู;ノヴォ・アンブルゴ;新漢堡;노부암부르구; +city::3456102;Nova Vicosa;Maroba;Marobá;Vicosa;Viçosa; +city::3456147;Nova Lima;Nova Lima;Nova-Lima;Нова-Лима; +city::3456160;Nova Iguacu;Nova Iguacu;Nova Iguassu;Nova Iguassú;Nova Iguasu;Nova Iguaçu;Nova Iguaçú;Nova-Iguasu;nobaiguasu;nobha iguraaku;nova-iguasu;novha igvasu;xin yi gua su;Нова Игуасу;Нова-Ігуасу;Нова-Игуасу;नोव्हा इग्वासु;নোভা ইগুৱাকু;ნოვა-იგუასუ;ノヴァ・イグアス;新伊瓜蘇;노바이구아수; +city::3456166;Nova Friburgo;Nova Friburgo;Nova-Friburgu;Nueva Friburgo;QGJ;nobha phriburgo;xin fu li bao;Нова Фрибурго;Нова-Фрибургу;নোভা ফ্রিবুর্গো;新弗里堡; +city::3456223;Nossa Senhora do Socorro;Contiguiba;Cotinguiba;Cotingüiba;Soccorro;Socorro; +city::3456283;Niteroi;Nictheroi;Nictheroy;Niteroi;Niteroj;Niterói;Vila Real da Praia Grande;Villa Real da Praia Grande;niteroi;Нитерой;ニテロイ; +city::3456290;Nilopolis;Nilopolis;ni luo bo li si;nilopolisa;Нилополис;নিলোপোলিস;尼洛波利斯; +city::3456500;Muriae;Muriae;Muriaeh;Muriahe;Muriahé;Muriaé;Murihe;Murriae;mu li ya ai;muriyaye;Муриаэ;মুরিয়ায়ে;มูเรียแอ;穆里亚埃; +city::3456814;Montes Claros;MOC;Montes Klaros;Montis Klaros;Montis-Klarus;meng di si ke la lu si;monatesa kalarosa;Монтес Кларос;Монтис Кларос;Монтис-Кларус;মোনটেস কলারোস;蒙蒂斯克拉鲁斯; +city::3456826;Montenegro;Chernogorija;Montenegru;Sao Joao do Monte Negro;São João do Monte Negro;meng te nei ge lu;Монтенегру;Черногория;蒙特内格鲁; +city::3456998;Mogi Mirim;Mogi-Mirim;Mogy-Mirim;Moji-Mirim;Mozhi-Mirin;mo ji mi lin;moji-mirima;Можи-Мирин;মোজি-মিরিম;莫吉米林; +city::3457000;Mogi Guacu;Mogi-Guacu;Mogi-Guaçu;Mogy Guassu;Mogy Guassú;Moji-Guacu;Moji-Guaçu;Mozhi-Guasu;mo ji gua su;mogi guraaku;Можи-Гуасу;মোগি গুৱাকু;莫吉瓜苏; +city::3457001;Mogi das Cruzes;Mogy das Cruzes;Moji das Cruzes; +city::3457025;Mococa;QOA; +city::3457381;Maua;Maua;mao a;maraa;Мауа;মাৱা;毛阿; +city::3457509;Matao;Mattao;Mattão; +city::3457671;Maringa;MGF;Maringa;Maringá;ma lin jia;maling-ga;marinaga;maringa;Маринга;মারিনগা;マリンガ;馬林加;마링가; +city::3457692;Marilia;MII;Maril'ja;Marilia;Marilija;Marília;ma li li ya;mariliya;Марилия;Марилија;Марилья;মারিলিয়া;馬里利亞; +city::3457708;Marica;; +city::3457952;Manhuacu;Man'juasu;Manhuassu;Manhuassú;ma niu a su;manahoyaku;Маньюасу;মানহোয়াকু;马纽阿苏; +city::3458131;Mairipora;Mairipora;Mairiporã;Majriporan;QMC;Майрипоран; +city::3458266;Macae;MEA;Macae;Macahe;Macahé;Macaé;Makae;Makaeh;ma ka ai;makaye;Макае;Макаэ;মাকায়ে;马卡埃; +city::3458329;Luziania;Luzilandia;Luzilândia;Santa-Luzia; +city::3458425;Lorena;Lorena;lorena;luo lei na;Лорена;লোরেনা;洛雷纳; +city::3458449;Londrina;LDB;Londrina;londeulina;londrina;long de li na;lwndryna;rondorina;Лондрина;لوندرينا;لوندرینا;লোন্ড্রিনা;ロンドリーナ;隆德里納;론드리나; +city::3458494;Lins;Albuquerque Lins;LIP;Lins;lin si;lingseu;linsa;rinsu;Линс;লিন্স;リンス;林斯;링스; +city::3458498;Linhares;Lin'jaris;linaharesa;Линьярис;লিনহারেস; +city::3458575;Limeira;Limeira;Limejra;QGB;li mei la;li mey ra;limaye'ira;Лимеира;Лимейра;লিময়েইরা;ลีเมย์รา;利梅拉; +city::3458645;Lencois Paulista;Lencoes;Lencois;Lençoes;Lençóis;Ubirama; +city::3458662;Leme;Lem;Leme;Lemi;lai mi;leme;Лем;Леми;লেমে;莱米; +city::3458696;Lavras;Lavras;la fu la si;labhrasa;lfras;Лаврас;لفراس;লাভ্রাস;拉夫拉斯; +city::3458930;Lages;LAJ;Lages;Lajes;Lazesas;Lazhis;Laĵes;Lažesas;la re si;lagesa;Лажис;লাগেস;拉热斯; +city::3459035;Lajeado;Costao;Costão;Lageado;Lazheadu;la re a du;laje'ado;Лажеаду;লাজেআডো;拉热阿杜; +city::3459462;Jundiai;Jundiahy;Jundiai;Jundiaí;Jurundiay;QDV;Zhundiai;Zhundijai;Zundiajus;jundiya'i;jwndyay;rong di ya yi;Žundiajus;Жундиаи;Жундијаи;Жундіаї;جوندياي;জুন্ডিয়াই;容迪亞伊; +city::3459505;Juiz de Fora;JDF;Juiz de Fora;Zhuis-di-Fora;Zhuiz de Fora;Zhuiz di Fora;Zhuiz-di-Fora;Zuis de Fora;chwis di f xra;ju'ija de phora;ju-iseujipola;ru yi si di fu la;Žuis de Fora;Жуиз де Фора;Жуиз ди Фора;Жуис-ди-Фора;Жуїз-ді-Фора;জুইজ ডে ফোরা;ชวีซ์ดีฟอรา;ジュイス・デ・フォーラ;茹伊斯迪福拉;주이스지포라; +city::3459712;Joinville;JOI;Joinville;Zhoinvile;Zhoinvili;Zhojnvili;Zoinvilis;jo'inabhilale;join'vu~ire;joinbilli;ruo yin wei lai;zwynwwyly;Žoinvilis;Жоинвиле;Жоинвили;Жойнвили;זוינווילי;জোইনভিললে;ジョインヴィレ;若茵维莱;조인빌리; +city::3459796;Joao Monlevade;Joao;João;Monlevade;Zhuan-Monlevadi;joya'o monala'ibhade;ruo ang meng lai wa di;Жуан-Монлевади;জোয়াও মোনলইভাডে;若昂蒙莱瓦迪; +city::3459943;Jequie;Jequie;Jequié;Jiquie;Jiquié;Jiquy;Zhekie;jekie;jeku'iye;re ji ye;Жекие;জেকুইয়ে;ჟეკიე;ジェキエー;热基耶; +city::3460005;Jau;Jahu;Jahú;Jau;Jaú;Zhau;ja'u;ya wu;Жау;জাউ;雅乌; +city::3460064;Jatai;JTI;Jatahy;Jatai; +city::3460102;Jaragua do Sul;Jaragua;Jaragua do Sul;Jaraguá;Jaraguá do Sul;Zharagua-du-Sul;jaragu'a do sula;nan ya la gua;Жарагуа-ду-Сул;জারাগুআ ডো সুল;南雅拉瓜; +city::3460132;Japeri;; +city::3460170;Jandira;; +city::3460174;Janauba;; +city::3460370;Jacarei;Jacarehy;Jacarei;Jacareí;Zhakarei;jakare'i;ya ka lei yi;Жакареи;জাকারেই;雅卡雷伊; +city::3460441;Jaboticabal;Jaboticabal;Zhabotikabal;jabotikabala;ya bo di ka ba er;Жаботикабал;জাবোটিকাবাল;雅博蒂卡巴尔; +city::3460522;Itumbiara;ITR;Itumbiara;Paranaiba;Paranaíba;Santa Rita;Santa Rita do Paranahyba;Santa Rita do Paranaib;Santa Rita do Paranaiba;Santa Rita do Paranaiha;Santa Rita do Paranaíba;itsunbiara;itumabiraara;yi tong bi ya la;Итумбиара;ইটুমবিৱারা;イツンビアラ;伊通比亚拉; +city::3460523;Ituiutaba;Itijutaba;Ituiutaba;Ituyutaba;itu'i'utaba;yi tu you ta ba;Итиютаба;ইটুইউটাবা;伊图尤塔巴; +city::3460535;Itu;Itu;QTU;Ytu;Ytua;ito~u;itu;yi tu;Іту;Иту;ইটু;イトゥー;伊图;이투; +city::3460584;Itauna;Itauna;ita'una;yi ta wu na;Итауна;Իտաունա;ইটাউনা;伊塔乌纳; +city::3460598;Itatiba;; +city::3460644;Itaquaquecetuba;Itaquaquicetuba; +city::3460699;Itapira;Itapira;itapira;yi ta pi la;Итапира;ইটাপিরা;伊塔皮拉; +city::3460718;Itapevi;Itapevy; +city::3460723;Itapeva;Faxina; +city::3460728;Itapetininga;Itapetinga;Itapetininga;ZTP;itapetininga;yi ta pei di ning jia;Ітапетінінга;Итапетининга;ইটাপেটিনিঙ্গা;イタペティニンガ;伊塔佩蒂宁加; +city::3460730;Itapetinga;Itatinga;QIT; +city::3460733;Itaperuna;ITP;Itaperuna;itaperuna;xi tapi ru na;yi ta pei lu na;Итаперуна;ইটাপেরুনা;อีตาปิรูนา;伊塔佩鲁纳; +city::3460748;Itapecerica da Serra;Itapecerica;Itapeserika-da-Serra;Итапесерика-да-Серра; +city::3460791;Itanhaem;Itan'jaehn;Itanhaen;Nossa Senhora da Conceicao de Itanhaem;Nossa Senhora da Conceição de Itanhaém;itanahayema;yi ta ni ya en;Итаньяэн;ইটানহায়েম;伊塔尼亚恩; +city::3460834;Itajuba;Itazhuba;itajuba;yi ta ru ba;Ітажуба;Итажуба;ইটাজুবা;伊塔茹巴; +city::3460845;Itajai;Itajahi;Itajahy;Itajai;Itajaí;Itazhai;itaja'i;yi da gu yi;Итажаи;ইটাজাই;伊達賈伊; +city::3460899;Itaguai;Itaguai;Itaquahy;itaguraa'i;yi ta gua yi;Итагуаи;ইটাগুৱাই;伊塔瓜伊; +city::3460949;Itabuna;ITN;Itabuna;itabuna;yi ta bu na;Итабуна;ইটাবুনা;იტაბუნა;イタブーナ;伊塔布纳; +city::3460950;Itaborai;Itaborahy;Itaborai;itabora'i;yi ta bo la yi;Итабораи;ইটাবোরাই;伊塔博拉伊; +city::3460960;Itabira;Itabira;Itabira de Mato Dentro;Itabira de Matto Dentro;Presidente Vargas;itabira;yi ta bi la;Итабира;ইটাবিরা;伊塔比拉; +city::3460974;Itabaiana;; +city::3461013;Irece;IRE; +city::3461144;Ipatinga;IPN;Ipatinga;ipachinga;ipatinga;yi pa ting jia;Ипатинга;ইপাটিঙ্গা;イパチンガ;伊帕廷加; +city::3461311;Indaiatuba;Indaiatuba;Indajatuba;inda'iyatuba;yin da ya tu ba;Индаятуба;ইন্ডাইয়াটুবা;因达亚图巴; +city::3461408;Ilheus;IOS;Il'eus;Ileus;Ilheos;Ilheus;Ilhéos;Ilhéus;Iljeusas;Sao Jorge dos Ilheos;São Jorgé dos Ilhéos;ilahe'usa;ileusi;iryeusu;yi lie wu si;Ильеус;Иљеус;ইলহেউস;ილეუსი;イリェウス;伊列乌斯; +city::3461444;Ijui;IJU;Ijuhy;Izhui;iju'i;yi ru yi;Ижуи;ইজুই;伊茹伊; +city::3461519;Icara;Aliatar;Isara;Исара; +city::3461563;Ibirite;Ibirite;Ибирите; +city::3461655;Hortolandia;Hortolandia;Hortolândia;Ortolandija;ao tuo lan di ya;hortolandiya;Ортоландия;হোর্টোলান্ডিয়া;奥托兰迪亚; +city::3461724;Gurupi;GRP;Gurupi;Гурупи; +city::3461786;Guarulhos;GRU;Guarulhos;QCV; +city::3461789;Guaruja;Guaruzha;Guyrajara;Guyrajára;Gvaruzha;gua lu ya;guaruja;guraaruja;Гваружа;Гуаружа;গুৱারুজা;グアルジャ;瓜魯雅; +city::3461859;Guaratingueta;Guaratingeta;guraaratinguyeta;Гуаратингета;Гуаратінгета;গুৱারাটিঙ্গুয়েটা; +city::3461879;Guarapuava;GPB;Guarapuava;gua la pu a wa;guraarapuraabha;Гуарапуава;গুৱারাপুৱাভা;瓜拉普阿瓦; +city::3461888;Guarapari;GUZ;Guarapari;Гуарапари;גוארפארי; +city::3461973;Guanambi;GNM;Guanambi;Guanamby;gua nan bi;guanambi;guraanamabi;Гуанамби;গুৱানামবি;გუანამბი;瓜南比; +city::3462089;Gravatai;Gravatahy;Gravatai;Gravataí;Karavatay;ge la wa ta yi;grabhata'i;Граватаи;গ্রাভাটাই;格拉瓦塔伊; +city::3462315;Governador Valadares;Figueira;GVR;Gov. Valadares;Governador Valadares;Governador Valadaresas;Governador Valadaris;Governador-Valadares;Governador-Valadaris;Valadares;gobeleunadoleuballadaleseu;gobhernador bhaladaresa;ko wer na dor wa la da ris;wa la da li si zhou zhang shi;Говернадор Валадарес;Говернадор Валадарис;Говернадор-Валадарес;Говернадор-Валадарис;Գովերնադոր Վալադարիս;গোভের্নাডোর্ ভালাডারেস;โกเวร์นาโดร์วาลาดาริส;ゴベルナドール・バラダレス;瓦拉達里斯州長市;고베르나도르발라다레스; +city::3462377;Goiania;Ciutat de Goiania;Ciutat de Goiânia;GYN;Goiana;Goiania;Goianá;Goiânia;Gojani;Gojanija;Goyania;Goyaniya;ge ya ni ya;ghwyanya;go'iyaniya;goiania;gwyyanya;ko ya neiy;Гояни;Гояния;Гоянія;Гојанија;גואיאניה;غويانيا;گوئیانیا;গোইয়ানিয়া;โกยาเนีย;გოიანია;ゴイアニア;戈亚尼亚;고이아니아; +city::3462964;Franco da Rocha;Francisco da Rocha; +city::3462980;Francisco Morato;; +city::3462996;Francisco Beltrao;Beltran-Francisko;FBE;Francisco Beltrao;Francisco Beltrão;Fransisku-Beltran;bei er de lang;phransisako belatra'o;Белтран-Франциско;Франсиску-Белтран;ফ্রান্সিসকো বেলট্রাও;贝尔德朗; +city::3463011;Franca;FRC;Franca;Franka;Franko;franka;fu lang ka;furanka;phranka;Франка;Франко;فرانكا;ফ্রাঙ্কা;フランカ;弗朗卡; +city::3463030;Foz do Iguacu;Fos do Iguasu;Fos-du-Iguasu;Foz de Iguassu;Foz de Iguazu;Foz do Iguacu;Foz do Iguassu;Foz do Iguassú;Foz do Iguasu;Foz do Iguaçu;IGU;Iguassu;Iguassú;fwz dw ayghwasw;fwz dw lwachw;phoja do iguraaku;poseudu-iguasu;yi gua su;Фоз до Игуасу;Фос до Игуасу;Фос-ду-Іґуасу;Фос-ду-Игуасу;פאס דו איגוואסו;פוז דו איגואסו;فوز دو إيغواسو;فوز دو لوآچو;ফোজ ডো ইগুৱাকু;フォス・ド・イグアス;伊瓜苏;포스두이구아수; +city::3463140;Formosa;Formosa;fu mo sa;poleumoja;福莫薩;포르모자; +city::3463174;Formiga;Formiga;fu mi jia;phormiga;Формига;ফোর্মিগা;福米加; +city::3463237;Florianopolis;Destero;Desterro;FLN;Florianopolis;Florianópolis;Florijanopolis;Floripa;Florjanopolisa;Nossa Senhora do Desterro;Nossa Senhora do Destêrro;flwryanwbwlys;flwryanwplys;flwryanwpwls;fol reiyn x polis;fpolis;fu luo li ya nuo bo li si;furorianoporisu;peullolianopolliseu;phloriyanopolisa;Флорианополис;Флоријанополис;Флоріанополіс;פלוריאנופוליס;فلوريانوبوليس;فلوریانوپلیس;فلوریانوپولس;ফ্লোরিয়ানোপোলিস;โฟลเรียนอโปลิส;ფლორიანოპოლისი;フロリアノーポリス;弗洛里亚诺波利斯;플로리아노폴리스; +city::3463422;Ferraz de Vasconcelos;; +city::3463432;Fernandopolis;; +city::3463478;Feira de Santana;FEC;Feira;Feira De Saint Anna;Feira de Sant'Anna;Feira de Santana;Fejra di Santana;Fejra-de-Santana;Fejra-di-Santana;fei la di sheng an na;peilajisantana;phe'ira de santana;Феира де Сантана;Фейра ди Сантана;Фейра-де-Сантана;Фейра-ди-Сантана;ফেইরা ডে সান্টানা;ფეირა-დი-სანტანა;フェイラ・デ・サンタナ;費拉迪聖安娜;페이라지산타나; +city::3463605;Farroupilha;; +city::3463690;Eunapolis;; +city::3463859;Esteio;; +city::3463900;Estancia;; +city::3464008;Esmeraldas;Ehsmeral'das;Santa Quiteria;Эсмеральдас; +city::3464073;Erechim;Boa Vista do Erechim;Bôa Vista do Erechim;ERM;Ehreshin;Erechim;Erequim;Erexim;Jose Bonifacio;José Bonifacio;Paiol Grande;ai lei xin;ereca'ima;Эрешин;এরেচইম;埃雷欣; +city::3464304;Embu Guacu;Imbu-Guacu;Imbu-Guaçu; +city::3464305;Embu;Ehmba;Embu Arte;Embu das Artes;Imbu;M'Boy;Эмба; +city::3464374;Duque de Caxias;Caxias;Duke de Kashijas;Duke de Kasijasas;Duke de Kašijasas;Duki di Kashias;Duki di Kasias;Duki-di-Kashias;QDQ;duki ci ka cheiy s;dukijikasiaseu;dukuye de kaksa'iyasa;dwky dy kashys ryw dw zhanyrw;dwq dy kaksyas;ka xi ya si gong jue cheng;Дуке де Кашијас;Дуки ди Кашиас;Дуки-ди-Кашиас;Դուկի դի Կաշիաս;دوق دي كاكسياس;دوکی دی کاشیس، ریو دو ژانیرو;ডুকুয়ে ডে কাক্সইয়াস;ดูกีจีกาเชียส;დუკი-დი-კაშიასი;ドゥケ・デ・カシアス;卡希亞斯公爵城;두키지카시아스; +city::3464460;Dourados;DOU;Doradus;Dourados;do'uradosa;duo la du si;dwradws;Дорадус;دورادوس;ডোউরাডোস;多拉杜斯; +city::3464688;Divinopolis;DIQ;Divinopolis;Divinópolis;di wei nuo bo li si;dibhinopolisa;Дивинополис;ডিভিনোপোলিস;迪维诺波利斯; +city::3464739;Diadema;Diadema;QDW;Диадема; +city::3464891;Curvelo;Curvello;Kurvelu;ku er wei lu;kurbhelo;Курвелу;কুর্ভেলো;库尔韦卢; +city::3464975;Curitiba;CWB;Corityba;Curitiba;Curityba;Curytiba;Gorad Kurytyba;Kouritiba;Kouritimpa;Kuritib;Kuritiba;Kuritibae;Kuritibo;Kuritiwa;Kuritiyba;Kuriytyva;Kuriytýva;Kuriṭiba;Kuryciba;Kurytyba;Kùrìtíbà;gu li ti ba;ku li qi ba;ku ri ti ba;kulichiba;kurichiba;kuritcibas;kuritiba;kuritipe;kwrytyba;qwrytybh;Κουριτίμπα;Горад Курытыба;Коуритиба;Куритибæ;Куритиба;Курыціба;Կուրիտիբա;קוריטיבא;קוריטיבה;كوريتيبا;کوریتیبا;ܩܘܪܝܛܝܒܐ;कुरितिबा;কুরিটিবা;কুরিতিবা;ਕੁਰੀਤੀਬਾ;குரிடிபே;కురితీబా;ಕುರಿಟಿಬ;กูรีตีบา;კურიტიბა;ኩሪቺባ;ᎫᎵᏘᎦ;クリチバ;古里提巴;庫里奇巴;쿠리치바;𐌺𐌿𐍂𐌹𐍄𐌹𐌱𐌰; +city::3465038;Cuiaba;CGB;Cuiaba;Cuiabá;Cuyaba;Cuyabá;Kouiampa;Kujaba;Kuyaba;Vila Real do Senhor Bom Jesus de Cuiaba;Vila Real do Senhor Bom Jesus de Cuiabá;ku ya ba;ku-iaba;kuiaba;kuyaba;kwyaba;kwyyaba;Κουιαμπά;Куяба;Кујаба;קויאבה;كويابا;کوئیابا;کویابا;कुयाबा;কুয়াবা;กุยาบา;კუიაბა;クイアバ;库亚巴;쿠이아바; +city::3465059;Cubatao;; +city::3465090;Cruzeiro;Kruzejru;ke lu sai luo;Крузейру;克鲁赛罗; +city::3465108;Cruz Alta;CZB;Cruz Alta;Krus-Alta;shang ke lu si;Крус-Алта;上克鲁斯; +city::3465196;Criciuma;CCM;Creciuna;Creciúna;Cresciuma;Cresciúma;Criciuma;Criciúma;Krisiuma;karisi'uma;ke li xi wu ma;Крисиума;করিসিউমা;克里西烏馬; +city::3465284;Cotia;Cutia; +city::3465342;Corumba;CMG;Corumba;Corumbá;Korumba;kolumba;korumaba;korunba;kwrwmba;Корумба;كورومبا;কোরুমবা;コルンバ;코룸바; +city::3465476;Coronel Fabriciano;Koronel-Fabrisianu;Koronelfabrisjanu;fa bu li xi ya nuo shang xiao cheng;koronela phabrisiyano;Коронел-Фабрисиану;Коронел-Фабрісіану;কোরোনেল ফাব্রিসিয়ানো;コロネル・ファブリシアーノ;法布里西亚诺上校城; +city::3465624;Contagem;Kontazhen;kong ta ren;kontagema;kontajen;kontajeng;Контажен;কোন্টাগেম;コンタジェン;孔塔任;콘타젱; +city::3465644;Conselheiro Lafaiete;Conselheiro Lafaiete;Conselheiro Lafayete;Konsel'ejru-Lafaeti;Konseljeiro Lafajete;Konseljeiro Lafajetė;Lafaiete;QDF;konselahe'iro lapha'iyete;la fa ye di gu wen cheng;Консельейру-Лафаети;কোন্সেলহেইরো লাফাইয়েটে;拉法耶蒂顾问城; +city::3465721;Concordia;CCI;Konkordija;Конкордия; +city::3465927;Colombo;Kolombo;Kolombu;ge lun bu;kollombu;kolomabo;koronbo;Коломбо;Коломбу;কোলোমবো;コロンボ;哥伦布;콜롬부; +city::3465944;Colatina;Colatina;Collatina;Kolatina;QCH;kolatina;qwltynh;Колатина;קולטינה;কোলাটিনা; +city::3466174;Cianorte;Sianorte;Сианорте; +city::3466296;Chapeco;Chapeco;Chapecó;Shapeko;XAP;Xapeco;Xapecó;capeko;sha pei ke;Шапеко;চাপেকো;沙佩科; +city::3466537;Caxias do Sul;CXJ;Caxias;Caxias do Sul;Caxius do Sul;Kashias do Sul;Kashias-du-Sul;Kashijas do Sul;Kasijas do Sulas;Kašijas do Sulas;kaksa'iyasa do sula;kasiaseudusul;nan ka xi ya si;Кашиас до Сул;Кашиас-ду-Сул;Кашијас до Сул;কাক্সইয়াস ডো সুল;カシアス・ド・スル;南卡希亞斯;카시아스두술; +city::3466692;Catanduva;Catanduva;Katanduva;katanadubha;Катандува;কাটানডুভা; +city::3466696;Catalao;; +city::3466698;Cataguases;Cataguases;Cataguazes;Kataguazis;QCG;ka ta gua xi si;ka tak wa sis;kataguraasesa;Катагуазис;কাটাগুৱাসেস;กาตากวาซิส;卡塔瓜西斯; +city::3466779;Cascavel;CAC;Cascavel;Kaskavel;Kaskavelas;Krotalias;Naer-ourouler;Serpentes tintinnabulati;Tłʼiish áníní;Ular derik;bang-ulbaem;ka si ka wei er;kasakabhela;mar zngy;ngu hang krading;Κροταλίας;Каскавел;עכסנים;الأفعى ذات الجرس;مار زنگی;কাসকাভেল;র‌্যাটল সাপ;റാറ്റിൽസ്നേക്;งูหางกระดิ่ง;卡斯卡韋爾;방울뱀; +city::3466978;Carazinho;Carasinho;Karazin'ju;QRE;Каразинью; +city::3466988;Caratinga;Karatinga;QTL;ka la ting jia;ka ra ti ngka;karatinga;Каратинга;কারাটিঙ্গা;การาตีงกา;卡拉廷加; +city::3466998;Carapicuiba;; +city::3467081;Caraguatatuba;Caragua;Karaguatatuba;QCQ;Карагуататуба; +city::3467467;Canoas;Canoas;Kanoas;Kanoasas;ka nuo a si;kanoasu;kanoyasa;Каноас;কানোয়াস;カノアス;卡諾阿斯; +city::3467684;Campos do Jordao;Kampus-du-Zhordau;kamposa do jorda'o;kan pu si-du ruo er dang;Кампус-ду-Жордау;কাম্পোস ডো জোর্ডাও;カンポス・ド・ジョルドン;坎普斯-杜若尔当; +city::3467693;Campos dos Goytacazes;CAW;Campos dos Goitacazes;Campos dos Goytacazes;Kampos;Kampus-dus-Gojtakazis;Sao Salvador dos Campos;São Salvador dos Campos;kamposa dosa goyatakajasa;kan pu si ge yi ta ka ji si;Кампос;Кампус-дус-Гойтаказис;Кампус-дус-Гойтаказіс;কাম্পোস ডোস গোয়টাকাজাস;坎普斯戈伊塔卡濟斯; +city::3467717;Campo Mourao;CBW;Mourao;Mourão; +city::3467736;Campo Largo;Kampu-Largu;kampo largo;kan pu la gu;Кампу-Ларгу;কাম্পো লার্গো;坎普拉古; +city::3467747;Campo Grande;CGR;Campo Grande;Campus Magnus;Gorad Kampu-Grandy;Kampo Grande;Kampo Grandi;Kampo Grandė;Kampu-Grande;Kampu-Grandi;Kampu-Grandy;ge lan de ying;kambw ghrandy;kampo grande;kampugeulanji;kampwgrandh;kang pu krang ci;kympw grandے;kʼampʼu-grandi;qmpw grʼndh;Горад Кампу-Гранды;Кампо Гранде;Кампо Гранди;Кампу-Гранде;Кампу-Гранди;Кампу-Гранды;Кампу-Гранді;קמפו גראנדה;كامبو غراندي;کامپوگرانده;کیمپو گراندے;কাম্পো গ্রান্ডে;กังปูกรังจี;კამპუ-გრანდი;カンポ・グランデ;格蘭德營;캄푸그란지; +city::3467865;Campinas;CPQ;Campinas;Campinas e Regiao;Campinas e Região;Conceicao de Campinas;Conceição de Campinas;Gorad Kampinas;Kampinas;Kampinasas;Regiao de Campinas;Região de Campinas;kamapinasa;kambynas;kampinaseu;kan pi na si;kanpinasu;kmpynas;Горад Кампінас;Кампинас;Кампінас;קמפינאס;كامبيناس;کمپیناس;কামপিনাস;კამპინასი;カンピーナス;坎皮纳斯;캄피나스; +city::3467978;Cambe;Nova Dantzig; +city::3468014;Camaqua;Sao Joao de Camaquam;São João de Camaquam; +city::3468031;Camacari;Camacari;Camacary;Camassari;Camassary;Camaçari;Kamasari;QCC;ka ma sa li;kamakari;kamasari;Камасари;কামাকারি;კამასარი;カマサリ;卡馬薩里; +city::3468100;Caldas Novas;CLV;Kaldas-Novas;Koldas Novas;ka er da si nuo wa si;kaladasa nobhasa;Калдас-Новас;Կոլդաս Նովաս;কালডাস নোভাস;კალდას-ნოვასი;卡尔达斯诺瓦斯; +city::3468158;Cajamar;Agua Fria;Água Fria; +city::3468215;Caieiras;; +city::3468376;Cachoeiro de Itapemirim;CDI;Cacheiro;Cachoeiro de Itapemirim;Cachoeiro do Itapemirim;Kashuehjru-di-Itapemirin;Kasoeiro de Itapemirinas;Kašoeiro de Itapemirinas;QXD;aytabymyrym dy katshwyrw;kakahoye'iro de itapemirima;qswʼyyrw dh ʼytpmyryn;Кашуэйру-ди-Итапемирин;קשואיירו דה איטפמירין;ايتابيميريم دي كاتشويرو;কাকহোয়েইরো ডে ইটাপেমিরিম;カショエイロ・ジ・イタペミリン; +city::3468403;Cachoeirinha;Cachoeirinha; +city::3468436;Cachoeira do Sul;Cachoeira;Kashuehjra-du-Sul;Кашуэйра-ду-Сул; +city::3468562;Cacapava;; +city::3468570;Cacador;CFC;Cacador;Caçador;Kasador;Rio Cacador;Rio Caçador;ka sa duo er;kakador;Касадор;কাকাডোর্;卡萨多尔; +city::3468615;Cabo Frio;CFB;Cabo Frio;Cabo Frío;Caput Frigidum;Kabu-Friu;QCK;ka bo fu li ao;kabo phri'o;Кабу-Фриу;কাবো ফ্রিও;卡波弗里奧; +city::3468879;Brusque;Bruski;brusakuye;bu lu si ke;Бруски;ব্রুসকুয়ে;布吕斯克; +city::3469058;Brasilia;BSB;Bahsihleihya;Brasilia;Brasiliopolis;Brasilía;Brasília;Braxilia;Braxiłia;Braxìlia;Brazileje;Brazilia;Braziliavaros;Brazilija;Brazilija shaary;Brazilja;Braziljo;Brazilėjė;Brazília;Brazíliaváros;Breselya;Bràsílíà;Gorad Brazilija;Mprazilia;ba xi li ya;beulajillia;bra si leiy;brajhiliya;brasili'a;brasiliya;brasylya;brazili'a;brazilia;brazylya;bresiliya;brzylyh;burajiria;byrazylya;piraciliya;Μπραζίλια;Бразилиа;Бразилия;Бразилия шаары;Бразилија;Бразиліа;Горад Бразілія;Ҳавзаи федералии Бразилиа;Բրազիլիա;בראזיליא;ברזיליה;بئرازیلیا;برازيليا;برازیلیا;برازیلیہ;براسیلیا;بەڕازیلیا;ބްރަސީލިއާ;ब्रसिलिया;ब्राझिलिया;ब्रासीलिया;ব্রাসিলিয়া;ਬ੍ਰਾਜ਼ੀਲੀਆ;ବ୍ରାସିଲିଆ;பிரசிலியா;ಬ್ರೆಸಿಲಿಯಾ;ബ്രസീലിയ;บราซีเลีย;པུ་རུ་ཟི་ལི་ཡ།;ဘရာစေးလေးယားမြို့;ბრაზილია;ብራዚሊያ;ブラジリア;巴西利亚;巴西利亞;브라질리아; +city::3469092;Braganca Paulista;BJP;Baraganca;Baragança;Braganca;Bragansa-Paulista;Bragança;bra kang sa pea li s ta;braga'anaka pa'ulista;bu la gan sa-bao li si ta;Браганса-Паулиста;ব্রাগআনকা পাউলিস্টা;บรากังซาเปาลิสตา;布拉干薩-保利斯塔; +city::3469136;Botucatu;Botucatu;Botukatu;QCJ;bo tu ka tu;botukatu;Ботукату;বোটুকাটু;博图卡图; +city::3469968;Blumenau;BNU;Blumenau;balumena'u;beullumenau;blwmynaw;bu lu mei nao;burumenau;Блуменау;بلوميناو;বলুমেনাউ;ブルメナウ;布盧梅瑙;블루메나우; +city::3469989;Birigui;Biriguei;Birigui;Biriguy;Birigüi;QCF;bi li ji;birigu'i;Биригуи;বিরিগুই;比里吉; +city::3470003;Biguacu;Biguassu;Biguassú; +city::3470044;Betim;Betim;Betin;QBK;bechin;bei ting;betima;Бетим;Бетин;বেটিম;ベチン;貝廷; +city::3470073;Bento Goncalves;BGV;Bento Goncalves;Bento Gonçalves; +city::3470127;Belo Horizonte;B.H.;BH;BHZ;Bel-Horizonto;Bello Horizonte;Belo Horizonte;Belo Horizontė;Belo Hte;Belo Khorizonte;Belo Orizonte;Belo Orizonti;Belu Orizonti;Belu-Orizonti;Bhte;Cidade de Minas;Gorad Belu-Aryzonty;Urbs Pulchri Horizontis;bailo orizonti;bei luo ao li cang te;belluolijonchi;belo horijhonte;belo horijonte;belo xo ri sxn chi;beroorizonchi;beroorizonte;blw hwryzwnth;bylw hwryzwnty;pelo aricanc;Μπέλο Οριζόντε;Бело Оризонте;Бело Оризонти;Бело Хоризонте;Белу-Оризонти;Белу-Оризонті;Горад Белу-Арызонты;בלו הוריזונטה;بلو هوریزونته;بيلو هوريزونتي;بیلو ہوریزونتے;बेलो होरिझोन्ते;বেলো হোরিজোন্টে;ਬੈਲੋ ਓਰੀਜ਼ੋਂਤੀ;பெலோ அரிசாஞ்ச்;เบโลโอรีซอนชี;ბელუ-ორიზონტი;ベロオリゾンチ;ベロオリゾンテ;貝洛奥里藏特;贝洛奥里藏特;벨루오리존치; +city::3470142;Belford Roxo;Belford Rosho;Belford Roxo;Belford-Roshu;bei er fu luo shu;belaphorda rokso;Белфорд Рошо;Белфорд-Рошу;বেলফোর্ড রোক্সো;ベルフォード・ロッショ;貝爾福羅舒; +city::3470264;Bebedouro;QAU; +city::3470279;Bauru;Bauru;JTC;Yvauru;ba wu lu;ba'uru;bauru;Бауру;באורו;বাউরু;バウル;巴烏魯; +city::3470324;Batatais;Batataes;Batatajs;Бататайс; +city::3470353;Barueri;Baruehri;Barueri;Tambore;Tamboré;ba lu ai li;barueri;baruyeri;Баруери;Баруері;Баруэри;বারুয়েরি;バルエリ;巴魯埃里; +city::3470451;Barretos;BAT;Baretosas;Barretos;Barretus;ba lei tu si;barretosa;barrytws;Барретус;بارريتوس;বার্রেটোস;巴雷图斯; +city::3470583;Barreiras;BRA;Barrejras;Баррейрас; +city::3470636;Barra Mansa;Bara Mansa;Barra Mansa;Barra-Mansa;QBN;ba la man sa shi;barra mansa;Барра-Манса;বার্রা মান্সা;巴拉曼萨市; +city::3470691;Barra do Pirai;Bara do Pirajus;Barra do Parai;Barra do Pirahy;Barra do Pirai;Barra do Piraí;Barra-du-Pirai;QBD;ba la du pi lai;barra do pira'i;Барра-ду-Пираи;বার্রা ডো পিরাই;巴拉杜皮莱; +city::3470709;Barra do Garcas;BPG;Barra do Garcas;Barra do Garças;Barra-du-Garsas;ba la-du jia sa si;Барра-ду-Гарсас;巴拉-杜加萨斯; +city::3470858;Barbacena;QAK; +city::3471196;Bage;BGX;Bag;Bage;Bagé;Baje;Bajé;Baze;Bazhe;Bažė;ba re;bage;Баг;Баже;বাগে;巴熱; +city::3471291;Avare;; +city::3471335;Atibaia;Atibaja;QTA;a di ba ya;achibaia shi;atiba'iya;Атибая;আটিবাইয়া;アチバイア市;阿蒂巴亚; +city::3471374;Assis;AIF;Assis;Assis Sao Paulo;Assis São Paulo;Assis SP;Assiz;Ассис; +city::3471393;Aruja;Aruja;Arujá;Uruja;Urujá;ZFU; +city::3471691;Araxa;Arasha;Araxa;Araxá;Ouro Minas Araxa;Ouro Minas Araxá;a la sha;raaraksa;Араша;ৱারাক্সা;阿拉沙; +city::3471697;Araucaria;Araucaria;Araucária;Araukarija;Араукария; +city::3471715;Araruama;Araruama;a la lu a ma;raararu'ama;Араруама;ৱারারুআমা;阿拉鲁阿马; +city::3471758;Araras;Araras;a la la si;raararasa;Арарас;ৱারারাস;阿拉拉斯; +city::3471766;Araraquara;AQA;Ararakuara;Ararakvara;Araraquara;a la la kua la;ararakuara;raararakuraara;Араракуара;ৱারারাকুৱারা;アララクアラ;阿拉拉夸拉; +city::3471798;Arapongas;APX;Araponga;Arapongas;a la peng jia si;raarapongasa;Арапонгас;ৱারাপোঙ্গাস;阿拉蓬加斯; +city::3471830;Araguari;Araguar;Araguari;Araguary;Aragvaris;a la gua li;raaraguraari;Арагуари;ৱারাগুৱারি;阿拉瓜里; +city::3471848;Aracruz;Arakrus;Sauacu;Sauaçu;a la ke lu si;raarakruja;Аракрус;Արակրուս;ৱারাক্রুজ;არაკრუსი;阿拉克魯斯; +city::3471859;Aracatuba;ARU;Aracatuba;Arasatuba;Araçatuba;a la sa tu ba;raarakatuba;Арасатуба;ৱারাকাটুবা;阿拉萨图巴; +city::3471872;Aracaju;AJU;Aracaju;Arakazhu;Arakazu;Arakažu;Gorad Arakazhu;a la ka ru;alakaju;arakaju;arakajw;xa ra ka cu;ʼrʼqzw;Аракажу;Горад Аракажу;אראקזו;اراکاجو;আরাকাজু;อารากาจู;არაკაჟუ;アラカジュ;阿拉卡茹;아라카주; +city::3471910;Apucarana;APU; +city::3472177;Angra dos Reis;Angra;Angra dos Reis;Angra-dus-Rejs;an ge la du si lei si;anagra dosa re'isa;Ангра-дус-Рейс;আনগ্রা ডোস রেইস;安格拉杜斯雷斯; +city::3472248;Andradina;; +city::3472287;Anapolis;APS;Anapolis;Anápolis;a na bo li si;anapolisa;anaporisu;Анаполис;আনাপোলিস;アナポリス;阿纳波利斯; +city::3472343;Americana;Amerikana;QWJ;Vila Americana;Villa Americana;amrykna sayw paywlw;ya mei li jia na;Американа;امریکنا، سائو پائولو;亚美利加纳; +city::3472518;Almirante Tamandare;Almiranti-Tamandare;Tamandare;Tamandaré;Timaneira;Timoneira;a er mi lan te ta man da lei;alamirante tamandare;almyranth tamandarh;Алмиранти-Тамандаре;آلمیرانته تامانداره;আলমিরান্টে টামান্ডারে;阿尔米兰特塔曼达雷; +city::3472603;Alfenas;Alfenas;QXW;a er fei na si;alaphenasa;Алфенас;আলফেনাস;阿尔费纳斯; +city::3472638;Alegrete;ALQ;Alegrete;Alegreti;alegrete;Алегрети;আলেগ্রেটে; +city::3472766;Alagoinhas;Alagoin'jas;Alagoinhas;Alagoinjasas;QGS;a la ge yi ni ya si;alago'inahasa;alagoniasi;Алагоиньяс;আলাগোইনহাস;ალაგონიასი;阿拉戈伊尼亚斯; +city::3473964;Guaiba;Guaiba;Guaíba; +city::3474574;Palmas;PMW;Palmas;plms;Палмас;פלמס; +city::3662574;Rio Branco;Penapolis;Penápolis;RBR;Rio Bran'ko;Rio Branco;Rio Brankas;Rio Branko;Riu Branco;Riu-Branku;Riubranku;Río Branco;hiubeulangku;li yue bu lan ke;ri xu brang ku;ri'o branko;rioburanko;riyo branko;ryw brankw;ryw brnqw;Ρίο Μπράνκο;Рио Бранко;Риу-Бранку;Ріу-Бранку;ריו ברנקו;ريو برانكو;ریو برانکو;रियो ब्रांको;রিও ব্রাঙ্কো;รีอูบรังกู;რიუ-ბრანკუ;リオブランコ;里約布蘭科;히우브랑쿠; +city::3662762;Porto Velho;PVH;Porto Vel'o;Porto Velho;Porto Veljas;Porto Velo;Portu-Vel'ju;Portu-Velju;Pôrto Velho;Velho;bwrtw falyw;parto bhelaho;poleutubellyu;por tu wel yu;pwrtw wlyw;wei liu gang;Порто Вельо;Порто Вељо;Порту-Велью;Порту-Велю;פורטו ולאהו;פורטו וליו;بورتو فاليو;پورتو ویلہو;পর্টো ভেলহো;โปร์ตูเวลยู;პორტუ-ველიუ;ポルト・ヴェーリョ;韋柳港;포르투벨류; +city::3663517;Manaus;Barra do Rio Negro;MAO;Manaos;Manaus;Manos;Manáos;ma nao si;manausu;Манаус;Манаўс;מנאוס;マナウス;马瑙斯; +city::3663529;Manacapuru;Manakapuru;Манакапуру; +city::3664464;Cruzeiro do Sul;CZS;Jurua;Juruá;Kruzejro do Sul;Kruzejru-du-Sul;Kruzeyru du Sul;krwzyrw dw swl;nan ke lu sai luo;qrwzyyrw dw swl;Крузейро до Сул;Крузейру-ду-Сул;Կրուզեյրու դու Սուլ;קרוזיירו דו סול;کروزیرو دو سول;南克魯賽羅; +city::3664539;Coari;CIZ;Choary;Coari Amazonas;Coary;Koari;Quari;Quarí;Коари; +city::3664980;Boa Vista;BVB;Boa Vista;Boa Vista (Roraima);Boa Vista do Rio Branco;Boa Višta;Boa-Vista;Боа-Виста;בואה ויסטה; +city::3665199;Ariquemes;Arikemes;Arikemis;arikoyemesa;Арикемис;আরিকোয়েমেস; +city::3924679;Vilhena;BVH;Vilena;Vilhena;Вилена; +city::3925033;Ji Parana;JPR; +city::3925212;Cacoal;Cacoal;Cacual;Kakoal;OAL;Какоал; +city::6316406;Aparecida de Goiania;Aparesida de Gojanija;Aparesida di Gojanija;Aparesida-di-Gojanija;a pa lei xi da di ge ya ni ya;aparesida de go'iyaniya;Апаресида де Гојанија;Апаресида ди Гояния;Апаресида-ди-Гояния;আপারেসিডা ডে গোইয়ানিয়া;アパレシダ・デ・ゴイアニア;阿帕雷西達迪戈亞尼亞; +city::6317344;Jaboatao dos Guararapes;Zhaboatan-dus-Guararapis;Zhaboatao dos Guararapis;Zhaboatao dos Gvararapes;Zhabuatan-dus-Guararapis;jaboatangduseugualalapeseu;jaboraata'o dosa guraararapesa;re bo a tao;Жабоатан-дус-Гуарарапис;Жабоатао дос Гварарапес;Жабоатао дос Гуарарапис;Жабуатан-дус-Гуарарапіс;জাবোৱাটাও ডোস গুৱারারাপেস;ジャボアタン・ドス・グアララペス;熱博阿陶;자보아탕두스구아라라페스; +city::6317464;Lauro de Freitas;; +city::6317953;Pinhais;; +city::6318694;Simoes Filho;; +city::6318696;Sinop;OPS; +city::3571824;Nassau;City of Nassau;Gorad Nasau;NAS;Nasau;Nasauo;Nasaŭo;Naso;Nassaou;Nassau;Nassau City;Nassau pa Bahamas;Nassau på Bahamas;Nasáu;na sao;nasa'u;nasau;nasaw;nasayw;nasea;naso;nasso;neco;nsaw;Νασσάου;Горад Насау;Насау;Нассау;Նասաու;נסאו;ناسائو;ناساو;نساؤ;नासाउ;নাসাউ;ਨਸਾਊ;நேசோ;നാസോ;แนสซอ;ན་སའོ།;ნასაუ;ናሶ;ナッソー;拿騷;拿骚;나사우;나소; +city::1252416;Thimphu;Gorad Tkhimpkhu;Tempu;Thimbu;Thimfou;Thimpago;Thimphou;Thimphu;Thimpu;Timbu;Timbuo;Timfou;Timfu;Timfú;Timphu;Timpou (therine) Pounaka (cheimerine);Timpu;Timpû;Tkhimpkhu;Tėmpu;thim phu;thimphu;thimpu;thiphu;thymphw;timbu;timphu;timpu;ting bu;tinpu;tymfw;tymfww;tympw;Θίμφου;Τιμπού (θερινή) Πουνάκα (χειμερινή);Горад Тхімпху;Тимбу;Тхимпху;Тхімпху;Թհիմփհու;טהימפהו;تىمپۇ;تيمفو;تھمپو;تیمفو;تیمفوو;تیمپو;ٹھمپھو;थिंफू;थिम्पु;थिम्पू;थिम्फू;থিম্ফু;ਥਿੰਫੂ;ଥିମ୍ପୁ;திம்பு;థింపూ;ಥಿಂಪು;തിംഫു;තිම්පු;ทิมพู;ཐིམ་ཕུ།;ཐིམ་ཕུུུུ;თიმფუ;ጢምጱ;ティンプー;廷布;팀부; +city::933099;Selebi-Phikwe;PKW;Phikwe;Pikwe;Pikwe-Selibe;Selebi;Selebi Pikve;Selebi Pikvė;Selebi Pikwe;Selebi-Phikwe;Selebi-Pikwe;Selebi-Pkhikve;Selempi-Fikoue;Selibe;Selibe Phikwe;Selibe-Phikwe;Selibe-Pikwe Mine Lease Area;sai lai bi-pi kui;sellebipikwe;slyb fykwh bwtswana;Σελέμπι-Φίκουε;Селеби-Пхикве;Селебі-Пхікве;سلیب فیکوه، بوتسوانا;سیلیبی-فیکوے;セレビ・ピクウェ;塞莱比-皮奎;셀레비피퀘; +city::933305;Molepolole;Molepolole;Molepololė;mo lai bo luo lai;mollepollolle;moreporore;mwlpwlwlh;mwlpwlwlh bwtswana;Μολεπολόλε;Молепололе;מולפולולה;مولپولوله، بوتسوانا;モレポロレ;莫萊波洛萊;몰레폴롤레; +city::933773;Gaborone;GBE;Gaberones;Gaberones Village;Gaberono;Gaboron;Gaboronas;Gaborone;Gaboròn;Gaboróne;Gorad Gabaroneh;IGaborone;Nkamporone;Qaborone;gabolone;gaborone;gaboroni;gabwrwn;gbrwn;gebaroni;goborni;haborone;jabwrwn;jia bai long li;jia bo long li;ka bo rone;kaparoni;Γκαμπορόνε;Габороне;Горад Габаронэ;Գաբորոնե;גאבאראן;גאבורון;جابورون;گابورون;گابۆرۆن;گبرون;गॅबारोनी;गोबोर्नी;ਗਾਬੋਰੋਨੀ;காபரோனி;กาโบโรเน;ག་བོ་རོ་ནི།;გაბორონე;ጋበሮኔ;ጋቦሮን;ハボローネ;嘉柏隆里;嘉波隆里;가보로네; +city::933778;Francistown;FRW;Francistown;Fransistaoun;Fransistaun;Frensistaun;Frensistaunas;Gorad Fransistaun;fransystwwn bwtswana;fu lang xi si dui;furanshisutaun;peulaensiseutaun;Φράνσισταουν;Горад Франсістаўн;Франсистаун;פרנסיסטאון;فرانسس ٹاؤن;فرانسیستوون، بوتسوانا;แฟรนซิสทาวน์;フランシスタウン;弗朗西斯敦;프랜시스타운; +city::618800;Horad Zhodzina;Gorad Zhodzina;Gorod Zhodino;Horad Zhodzina;Schodsina;Zhodino;Zhodzina;Zodino;Zodzina;Żodino;Горад Жодзіна;Жодзiна;Жодзіна;Жодино; +city::618806;Zhlobin;Korpilovka;Zhlobin;Zlobin;Жлобин;Жлобін; +city::620127;Vitebsk;VTB;Vicebsk;Vicebsko;Vicebszk;Viciebsk;Vit'b'sku;Vitebs'k;Vitebscum;Vitebsk;Vitebska;Vitebskas;Vitepsk;Vitsebsk;Vitsemp'sk;Vitsiebsk;Vitsyebsk;Vítebsk;Vítsiebsk;Witebsk;Wizebsk;bichebseukeu;fytybsk;vu~itsu~epusuku;wei jie bu si ke;wi tebskh;wtybsk;wytbsq;Βιτσέμπσκ;Витебск;Витепск;Витьбьскъ;Вітебськ;Віцебск;Վիտեբսկ;וויטעבסק;ויטבסק;فيتيبسك;وتیبسک;วีเต็บสค์;ვიტებსკი;ヴィーツェプスク;维捷布斯克;비쳅스크; +city::621074;Svyetlahorsk;Shatilki;Shatsilki;Svetlagorsk;Svetlogorsk;Svyetlahorsk;Светлагорск;Светлогорск; +city::621741;Slutsk;Gorad Sluck;Sloetsk;Sloutsk;Sluc'k;Sluck;Slucka;Sluckas;Slutsk;Sluzk;Słuck;seullucheukeu;si lu ci ke;slutskh;slwzq;suutsuku;Горад Слуцк;Слуцк;Слуцьк;סלוצק;สลูตสค์;スウツク;斯盧茨克;슬루츠크; +city::621754;Slonim;Slanimas;Slonim;Slonima;Sloņima;Słonim;seullonim;si luo ni mu;slonimi;slwnym;suronimu;Слоним;Слонім;סלאנים;סלונים;სლონიმი;スロニム;斯洛尼姆;슬로님; +city::622428;Salihorsk;Chizhevichi;Saligorsk;Salihorsk;Salihorska;Salihorskas;Salyhorsk;Saļihorska;Soligors'k;Soligorsk;Szalihorszk;salliholeuseukeu;salyhwrsk;suo li ge er si ke;Салигорск;Салігорск;Солигорск;Солігорськ;سالیهورسک;索利戈尔斯克;살리호르스크; +city::622794;Rechytsa;Rechica;Rechitsa;Rechysta;Rechytsa;Rehchyca;Ryechitsa;Речица;Рэчыца; +city::623317;Polatsk;Gorad Polack;Podolsk;Polack;Polatsk;Polazk;Poloc'k;Polock;Polocka;Polockas;Polot'sku;Polotia;Polotk;Polotsk;Polozk;Poloțk;Potolsk;Połack;Połock;Pòlatsk;Pólatsk;bo luo ci ke;pollacheukeu;poratsuku;Горад Полацк;Полацк;Полотьскъ;Полоцк;Полоцьк;Պոլոցկ;פולאצק;პოლოცკი;ポラツク;波洛茨克;폴라츠크; +city::623549;Pinsk;Pins'k;Pinscum;Pinsk;Pinska;Pinskas;Pinszk;Pińsk;ping si ke;pinseukeu;pinsuku;pynsq;Пинск;Пінск;Пінськ;פינסק;ピンスク;平斯克;핀스크; +city::624079;Orsha;Orsa;Orscha;Orsha;Orsza;Orŝa;Orša;Vorsja;ao er sha;boleusya;vu~orusha;Орша;ヴォルシャ;奥尔沙;보르샤; +city::624400;Novoye Medvezhino;Medvezhino;Novoye Medvezhino;Медвежино; +city::624784;Navapolatsk;Navapolack;Navapolackas;Navapolatsk;Navapołack;Navapólatsk;Nawapolazk;Novopoloc'k;Novopolock;Novopolocka;Novopolotsk;Nowopolock;Nowopołock;Polotskiy;nabapollacheukeu;nwfwbwlwtsk;xin bo luo ci ke;Наваполацк;Новополоцк;Новополоцьк;نوفوبولوتسك;新波洛茨克;나바폴라츠크; +city::625144;Minsk;Gorad Minsk;MSQ;Mins'k;Minsc;Minscum;Minsk;Minsk - Minsk;Minsk - Мінск;Minsk osh;Minska;Minskaj;Minskas;Minsko;Minszk;Mińsk;Myensk;Myenyesk;Mînsk;ming si ke;ming si ke shi;minseukeu;minsk;minsuku;mnsk;mynsk;mynsq;mynysky;Μινσκ;Горад Мінск;Минск;Минск ош;Минскай;Мінск;Мінськ;Мѣньскъ;Մինսկ;מינסק;منسک;مىنىسكى;مينسك;مینسک;मिन्‍स्‍क;மின்ஸ்க்;ಮಿನ್ಸ್ಕ್;മിൻസ്ക്;มินสก์;མིན་སིཀ།;მინსკი;ミンスク;明斯克;明斯克市;민스크; +city::625324;Mazyr;Masyr;Mazir;Mazira;Mazyr;Mozir;Mozyr;Mozyr';Mozyrius;Mozyrz;Mozyr’;majileu;mazu~iru;mo ji li;moziri;Мазыр;Мозир;Мозырь;מאזיר;მოზირი;マズィル;莫济里;마지르; +city::625625;Maladzyechna;Maladzechna;Maladzyechna;Molodechno;Molodeczno;Маладзечна;Молодечно; +city::625665;Mahilyow;MVQ;Magiljou;Maguilov;Mahileu;Mahiliou;Mahilioŭ;Mahiljou;Mahiljov;Mahiljow;Mahiljoŭ;Mahilou;Mahiloŭ;Mahilyow;Mahilëŭ;Mogil'ov;Mogilev;Mogileva;Mogilew;Mogiliavas;Mogiliovas;Mogiljov;Mogilov;Mogilëv;Mogiļeva;Moguilev;Mohylew;Магілёў;Могилев;Могильов;Могилёв;Могиљов; +city::626081;Lida;Lida;Lieda;Lyda;li da;lida;lyda;rida;Ļida;Лида;Ліда;לידא;ليدا;ლიდა;リダ;利达;리다; +city::627145;Kobryn;Gorad Kobryn;Kobrin;Kobrin';Kobrina;Kobriny;Kobryn;Kobrynas;Kobryń;Kóbriny;ke bu lin;koburu~in;qwbryn;Горад Кобрын;Кобрин;Кобринь;Кобрын;קאברין;קוברין;コブルィン;科布林; +city::627904;Hrodna;GNA;Gardinas;Gorad Grodna;Goradnia;Grodna;Grodno;Grodņa;Hrodna;furodona;ge luo de nuo;ghrwdnw;grwdna;heulodeuna;hwrdnh;krxd no;Горад Гродна;Гродна;Гродно;הורדנה;غرودنو;گرودنا;กรอดโน;フロドナ;格罗德诺;흐로드나; +city::627907;Gomel;GME;Gomel;Gomel';Gomela;Gomelis;Gomel’;Gomeļa;Gorad Gomel';Gómel;Homel;Homel';Homeľ;Homiel;Homyel;Homyel';Homyel’;Hòmiel;ge mei li;ghwmyl;gwml;homel;homeri;hwml;komel;kx mel;Γόμελ;Гомел;Гомель;Гомељ;Горад Гомель;הומל;غوميل;گومل;கோமெல்;กอเมล;ホメリ;戈梅利;호멜; +city::629634;Brest;BQT;Beras'ce;Berestja;Brehst;Bressicia;Brest;Brest Litovsk;Brest i Kviterussland;Brest-Litovsk;Brest-Litowsk;Bresta;Brestas;Bresto;Breszt;Brzesc;Brzesc nad Bugiem;Brzesc-Litewsk;Brzesc-Litewski;Brześć;Brześć nad Bugiem;Brześć-Litewsk;Brześć-Litewski;Brėst;Byeras'tsye;Byeras’tsye;be rst;beuleseuteu;bresta;brst;brst blarws;brysq;bu lie si te;buresuto;Берасьце;Берестя;Брест;Брэст;בריסק;ברסט;برست;برست، بلاروس;بریسٹ، بیلاروس;ब्रेस्त;เบรสต์;ბრესტი;ブレスト;布列斯特;브레스트; +city::630376;Horad Barysaw;Barysaw;Borisov;Borissow;Gorad Barysau;Gorod Borisov;Horad Barysaw;Горад Барысаў;Город Борисов; +city::630429;Baranovichi;Baranavichy;Baranavitsjy;Baranawitschy;Baranoviche;Baranovichi;Baranovichi - Baranavichy;Baranovichi - Баранавiчы;Baranoviciai;Baranovitchi;Baranovitsi;Baranovitši;Baranovičiai;Baranowicze;Баранавічы;Барановичи; +city::630468;Babruysk;Babroejsk;Babruisk;Babrujsk;Babruysk;Bobruisk;Bobruiskas;Bobrujsk;Bobruysk;bwbrwysq;Бабруйск;Бобруйск;בוברויסק; +city::3582677;Belize City;Altepetl Belice;BZE;Bandaraya Belize;Belice;Beliz;Beliz Siti;Belizas;Belize;Belize Ceety;Belize City;Belize-stad;Belizurbo;Cidade de Belize;Ciudad de Belice;Dinas Belize;Kota Belize;Poli tou Beliz;Syudad han Belize;Thanh pho Belize;Thành phố Belize;be lis si ti;belijha siti;beliza siti;bellijeusiti;berizushiti;blyz syty;bo li ci shi;Πόλη του Μπελίζ;Белиз;Белиз Сити;Белизе;Беліз;בליז סיטי;بلیز سیتی;بیلیز شہر;بېلىز شەھىرى;बेलीज़ सिटी;बेलीझ सिटी;เบลีซซิตี;ဘလိဇ်မြို့;ベリーズシティ;伯利兹市;벨리즈시티; +city::5881791;Abbotsford;Abbotsford;Abotsford;Abotsfordas;YXX;abottsufodo;abwtsfwrd;abwtsfwrd brytysh klmbya;aebeocheupeodeu;ya bo si fu;Абботсфорд;Аботсфорд;أبوتسفورد;ابوتسفورد، بریتیش کلمبیا;ایباٹسفورڈ;ایبٹس فورڈ، برٹش کولمبیا;アボッツフォード;亞博斯福;애버츠퍼드; +city::5882873;Ajax;Adzhaks;Ehjdzhaks;Ejdzaks;ajaks;ajaks antaryw;eijaegseu;eijakkusu;ya ji shi;Аджакс;Ејџакс;Эйджакс;أجاكس;اجاکس، انتاریو;エイジャックス;亞積士;에이잭스; +city::5885383;Anmore;; +city::5894171;Barrie;Bari;Baris;Barri;Barrie;Berri;YLK;ba li;baeli;bari;bary;bry antaryw;Бари;Барри;Беррі;باري;باری;باری، اونٹاریو;بری، انتاریو;バリー;巴里;배리; +city::5907364;Brampton;Brampton;Bramptonas;Bramptono;Bramptun;XPN;baraimpatana;beulaemteon;braimpatana;brambtwn;bramptan;bramtana;bremptana;brmptwn antaryw;bu lan pu dun;buranputon;piramptan;Брамптон;Брамптън;برامبتون;برامپٹن، انٹاریو;برمپتون، انتاریو;بریمپٹن;ब्राम्टन;ब्रैंपटन;ਬਰੈਂਪਟਨ;બ્રેમ્પ્ટન;பிராம்ப்டன்;బ్రాంప్టన్;ബ്രംപ്ടൺ;බ්‍රැම්ටන්;ブランプトン;布兰普顿;브램턴; +city::5907990;Brantford;Brantford;Brantfordas;XFV;beulaenteupeodeu;brantfwrd;brntfwrd antaryw;bu lan te fu de;burantofodo;Брантфорд;برانتفورد;برانٹفورڈ;برنتفورد، انتاریو;برینٹفورڈ;ブラントフォード;布兰特福德;브랜트퍼드; +city::5909629;Brossard;Brosar;bao le sha;brwsar;burosado;Бросар;بروسار;بروسارڈ;ブロサード;寶樂沙; +city::5911592;Burlington;Berlington;barinton;beollingteon;bo ling dun;brlngٹn awnٹaryw;brlyngtwn antaryw;byrlynjtwn;Берлингтон;Берлінгтон;برلنگٹن;برلنگٹن، اونٹاریو;برلینگتون، انتاریو;بيرلينجتون;バーリントン;伯灵顿;벌링턴; +city::5911606;Burnaby;Barnabis;Bernabi;Bernabija;Bjornabi;Burnabi;Burnaby;Bērnabija;banabi;banabi shi;ben na bi;beoneobi;brnaby;brnabے;brnyby;bwrnby;Бернаби;Бернабі;Бърнаби;Бёрнаби;Бөрнаби;برنابی;برنابے;برنیبی;بورنبي;バーナビー;バーナビー市;本拿比;本那比;버너비; +city::5913490;Calgary;Calgaria;Calgary;Gorad Kalgary;Kalgari;Kalgario;Kalgaris;Kalnkari;Kalqari;Kelgery;YYC;ka er jia li;ka jia li;kaelgeoli;kailagari;kalgari;kalghary;kalgry;kalkari;karugari;kelgari;klgry;kyalgari;kylgry;qlgry;Κάλγκαρι;Горад Калгары;Калгари;Калгарі;Կալգարի;קלגרי;كالغاري;کالگری;کلگری;کیلگری;कॅल्गारी;कैलगरी;ਕੈਲਗਰੀ;கால்கரி;కాల్గరీ;ಕ್ಯಾಲ್ಗರಿ;แคลกะรี;ကယ်လ်ဂရီမြို့;კალგარი;カルガリー;卡加利;卡尔加里;캘거리; +city::5913695;Cambridge;Kejmbridzh;Kembridz;Kembridzh;Kembrigo;Kembriĝo;jian qiao;kambrydj;keimbeuliji;kenburijji;kmbryj antaryw;kymbrj;Кеймбридж;Кембридж;Кембриџ;كامبريدج;کمبریج، انتاریو;کیمبرج;کیمبرج، انٹاریو;ケンブリッジ;剑桥;케임브리지; +city::5921356;Chilliwack;YCW; +city::5927689;Coquitlam;Coquitlam;kokittoramu;kokittoramu shi;kokuittoramu;コキットラム;コキットラム市;コクイットラム; +city::5935277;Dartmouth;dateumeoseu;ഡാർട്മൗത്;다트머스; +city::5937615;Delta;Del'ta;Delta;delta;deruta;dlth;dylta;san jiao zhou;Делта;Дельта;דלתה;ديلتا;デルタ;三角洲;델타; +city::5942845;Drummondville;Drammondvill;Drammonvil';Dramondvil;Drummondville;XDM;de la meng shi;doramonbiru;drwmwndwyl;drwmwnfyl;Драммонвіль;Драммондвилл;Драмондвил;دروموندویل;درومونفيل;ڈرمنڈولے;ڈرمونڈویل;ドラモンビル;德拉蒙市; +city::5946768;Edmonton;Edmonton;Edmontona;Edmontonas;Edmontono;Edmundopolis;Edmuntun;Ehdmonton;Entmonton;Gorad Ehdmantan;YEA;admwntwn;ai de meng dun;aidamatana;edamantana;edeumeonteon;edomonton;etmantan;xe dman tan;Édmonton;Έντμοντον;Горад Эдмантан;Едмонтон;Едмънтън;Эдмонтон;Էդմոնտոն;אדמונטון;إدمونتون;ادمونتون;ایڈمنٹن;एडमंटन;ਐਡਮੰਟਨ;எட்மன்டன்;เอดมันตัน;ཨེ་ཏི་མོན་ཐོན།;ედმონტონი;ᐊᒥᐢᑲᐧᒋᐊᐧᐢᑲᐦᐃᑲᐣ;エドモントン;埃德蒙顿;에드먼턴; +city::5950267;Etobicoke;Ehtobiko;Etobiko;etobiko;etopikok;itobiko;yi tao bi gu;Етобіко;Этобико;எடோபிகோக்;エトビコ;怡陶碧谷;이토비코; +city::5955895;Fort McMurray;Fort Makmari;Fort-MakMerrej;Fort-MakMerrey;YMM;fotomakumare;fwrt makmwray;mai ke mo li bao;poteumaegmeoli;Форт Макмари;Форт-МакМеррей;فورت ماكموراي;فورت مک‌موری;フォートマクマレー;麦克默里堡;포트맥머리; +city::5957776;Fredericton;Fredericopolis;Fredericton;Frederikton;Frederiktonas;Frederiktono;Frederiktun;Gorad Frehdehryktan;Phrentrikton;YFC;frdryktwn;frydryktwn;fu lei de li ke dun;furederikuton;hpireteriktan;peuledeoligteon;phredariktana;prdryqtwn;Φρέντρικτον;Горад Фрэдэрыктан;Фредериктон;Фредериктън;Фредеріктон;פרדריקטון;فردریکتون;فريدريكتون;فریڈرکٹن;فریڈریکٹن;फ्रेडरिक्टन;ஃபிரெடெரிக்டன்;ფრედერიკტონი;フレデリクトン;弗雷德里克頓;프레더릭턴; +city::5959974;Gatineau;Gatineau;Gatino;Sablono:TabelKapoLauCarta;gatino;gatynw;ghatynw;gytynw;jia di nuo;jia di nuo shi;kettinov;Ŝablono:TabelKapoLaŭĈarta;Гатино;Гатіно;غاتينو;گاتینو;گیتینؤ;گیٹینیو;கெட்டினோவ்;გატინო;ガティノー;加蒂諾;加蒂诺市;가티노; +city::5964215;Granby;Gorad Granbi;Granbi;Granby;ge lan bi;ghranby;granby kbk;grymby;Горад Гранбі;Гранби;Гранбі;غرانبي;گرانبی، کبک;گریمبی;格兰比; +city::5964700;Greater Sudbury;Bol'shoj Sadberi;Gran Sudbury;Grand Sudbury;Granda Sudbury;Greater Sudbury;Sadberi;Sadberis;Sudbury;Veliki Sadberi;YSB;catpari perumpakam;da sa de bo li;ghrytr swdbwry;gryytr sdbry;sadbry bzrg;sadobari;seodeubeli;Большой Садбери;Велики Садбери;Садбері;גרייטר סדברי;سادبری بزرگ;غريتر سودبوري;گریٹر سڈبری;சட்பறி பெரும்பாகம்;サドバリー;大薩德伯里;서드베리; +city::5967629;Guelph;Guehlf;Guelfas;Guelph;Gvelf;XIA;gerufu;ghwylf;gui hu;gwelpeu;gwlf;gwylf;gywlf;Гвелф;Гуэлф;غويلف;گولف;گویلف;گیولف;ゲルフ;貴湖;궬프; +city::5969782;Hamilton;Gamil'ton;Gamilton;Gorad Gamil'tan;Hamilton;Hamilton i Ontario;Hamiltona;Hamiltonas;Hamiltono;Khamilton;Khamiltun;amiltan;ha mi er dun;haemilteon;hamiruton;hamyltwn;hemiltana;hmyltwn;hmyltwn antaryw;Гамильтон;Гамільтон;Горад Гамільтан;Хамилтон;Хамилтън;Համիլտոն;המילטון;هاميلتون;همیلتون، انتاریو;ہاملٹن;ہیملٹن، انٹاریو;हॅमिल्टन;ஆமில்டன்;හැමිල්ටන්;ჰამილტონი;ハミルトン;哈密尔顿;해밀턴; +city::5989045;Kamloops;Kamloops;Kamlups;YKA;kaimalupasa;kamlwbs;kamlwps;kamurupusu;kan lu pu si;Камлупс;קאמלופס;كاملوبس;کاملوپس;ਕੈਮਲੂਪਸ;カムループス;坎卢普斯; +city::5990579;Kelowna;Kelouna;Kelowna;YLW;ji long na;kellona;kerouna;klwna;kylwna;kylwwna;qlwnh;Келоуна;קלונה;كيلونا;کلونا;کیلوونا;ケロウナ;基隆拿;켈로나; +city::5992500;Kingston;Cataraqui;Kingstan;Kingston;Kingstonas;Kingstun;YGK;jin si dun;jing shi dun;kingseuteon;kingusuton;kynghstwn;kyngstwn antaryw;Кингстон;Кингстън;Кінгстан;Кінгстон;كينغستون;کنگسٹن;کنگسٹن، اونٹاریو;کینگستون، انتاریو;キングストン;京士頓;金斯顿;킹스턴; +city::5992996;Kitchener;Gorad Kitchehner;Kiceneris;Kicenero;Kichener;Kitchener;Kiĉenero;Kičeneris;ji qin na;kchnr;khitche nex r;kichineo;kitchina;kychnr;kytshnr;qyznr;Горад Кітчэнер;Китченер;Киченер;Кіченер;קיצנר;كيتشنر;کچنر;کیچنر;คิตเชเนอร์;კიტჩენერი;キッチナー;基秦拿;키치너; +city::6049430;Langley;Distretu de Langley;Distrikto Langley;Distrito de Langley;Distritu de Langley;Langley British Columbia;Lengli;Township of Langley;lan li qu;lan li zhen;ranguri;Ленглі;لینگلی، برٹش کولمبیا;ラングリー;蘭里區;蘭里鎮; +city::6050610;Laval;Gorad Laval';Laval;Laval';Lavalis;Lavalo;la wa lei;lafal;lawal kbk;lawl;ravu~aru;Λαβάλ;Горад Лаваль;Лавал;Лаваль;לאוואל;لافال;لاوال، کبک;لاول;ラヴァル;拉瓦勒; +city::6053154;Lethbridge;Letbric;Letbridz;Letbridzas;Letbridzh;Letbridžas;Lethbridge;YQL;lai si bu li qi;leseubeuliji;ltbrydg;lythbrydj;resuburijji;Летбридж;Летбриџ;לתברידג;لث‌بریج;ليثبريدج;لیتھ برج;لیتھبریج;レスブリッジ;萊斯布里奇;레스브리지; +city::6058560;London;Landona;London;Londonas;Londono;YXU;leondeon;lndn;lndn antaryw;londoni;lun dui;lun dun;lwndwn;rondon;Лондон;לונדון;لندن;لندن، انتاریو;لندن، اونٹاریو;ლონდონი;ロンドン;伦敦;런던; +city::6059891;Longueuil;Gorad Langjoj;Long'oj;Longej;Longejlo;Longjoj;Longueuil;lang ji er;long-goei;lwnghwy;lwngwl;lwngwy;rongeru;Горад Лангёй;Лонгеј;Лонгьой;Лонгёй;لونغوي;لونگؤل;لونگوی;ロンゲール;朗基爾;롱괴이; +city::6065686;Maple Ridge;Mehpl-Ridzh;feng shu ling;mabl rydj;meipeulliji;meipururijji;Мэпл-Ридж;مابل ريدج;メイプルリッジ;楓樹嶺;메이플리지; +city::6066513;Markham;Markam;Markem;Markhamo;Markum;makamu;markam;markam antaryw;wan jin shi;Маркам;Маркем;Маркъм;ماركام;مارکام، انتاریو;مارکھم، انٹاریو;マーカム;萬錦市; +city::6071618;Medicine Hat;Medicine Hat;Medikan Hat;Medisin Hetas;Medisin Khat;Medisin-Get;Medisin-Khat;YXH;mdsyn hat;mdysyn ht;mei di xin ha te;Медисин Хат;Медисин-Гет;Медисин-Хат;مدسين هات;مدیسین هت;میڈیسن ہیٹ;梅迪辛哈特; +city::6074377;Milton;Gorad Miltan;Milton;mi er dun;miruton;myltwn;Горад Мілтан;Милтон;Мілтон;ميلتون;ミルトン;米尔顿; +city::6075357;Mississauga;Misisaga;Misisoga;Misisogo;Missisoga;Mississauga;Mississoga;mi xi sha jia;mishisaga;misisaga;misisogeo;mss saga;mssaga;mysysaga;mysysagha;mysyswgh;mysyswja;Мисисага;Мисисога;Миссиссога;Міссісога;מיסיסוגה;مسس ساگا;مسساگا;ميسيساغا;ميسيسوجا;میسیساگا;मिसिसागा;ਮਿਸੀਸਾਗਾ;මිසිසාගා;ミシサガ;密西沙加;미시소거; +city::6076211;Moncton;Mon'kton;Moncton;Monkton;Monktonas;Monktono;YQM;meng ke dun;meongkeuteon;monkuton;mwnktwn;mwnqtwn;mx ngk tan;Μόνκτον;Монктон;מונקטון;مانکٹن;مونكتون;مونکتون;مونکٹون;มองก์ตัน;モンクトン;蒙克顿;멍크턴; +city::6077243;Montreal;Lungsod ng Montreal;Lungsod ng Montréal;Monreal;Monreal';Monreala;Monrealis;Monreyal;Monreāla;Mons Regius;Mont-real;Montreal;Montreal - Montreal;Montreal - Montréal;Montreal City;Montreali;Montrealo;Montréal;YMQ;meng te li er;monreali;monteuliol;montorioru;mwntral;mwntryal;Μοντρεαλ;Μόντρεαλ;Монреал;Монреаль;Монтреал;מונטריאול;مونترآل;مونتریال;مونترېئال;მონრეალი;ᒧᕆᐊᓪ;モントリオール;蒙特利尔;몬트리올; +city::6085772;Nanaimo;Nanaimo;Nanajmo;YCD;na nai mo;nanaimo;nanaymw;nanaymw brytysh klmbya;nanyamw ay;nnayymw;Нанаймо;Нанајмо;نانائمو;نانایمو;نانایمو، بریتیش کلمبیا;نانيامو إي;ننائیمو;ナナイモ;纳奈莫;나나이모; +city::6087701;Newmarket;N'jumarket;Njumarket;niu ma ke te;nyumakes;nyumaketto;nywmarkt;nywmarkt antaryw;Њумаркет;Ньюмаркет;نيوماركت;نیومارکت، انتاریو;ニューマーケット;纽马克特;뉴마켓; +city::6087844;New Westminster;N'ju-Uehstminster;New Westminister;New Westminster;Nju Vestminster;YBD;nyuuesutominsuta;nyuweseuteuminseuteo;nyw wstmynstr;nyw wystmynystr;xin wei si min si te;xin xi min;Њу Вестминстер;Нью-Уэстминстер;ניו וסטמינסטר;نيو ويستمينيستر;نیو وسٹمنسٹر;نیو ویسٹ منسٹر;ニューウエストミンスター;新威斯敏斯特;新西敏;뉴웨스트민스터; +city::6087892;Niagara Falls;Najagara Fols;Niagara Falls;Niagara Folsas;Niagara-Folls;Niagara-Fols;XLV;naiagalapolseu;naiagaraforuzu;ni ya jia la pu bu cheng;nyagara falz antaryw;nyagra falz;nyajara fwlz;Најагара Фолс;Ниагара-Фолс;Ніагара-Фоллс;نياجارا فولز;نیاگارا فالز، انتاریو;نیاگرا فالز;نیاگرا فالز، انٹاریو;ナイアガラフォールズ;尼亚加拉瀑布城;나이아가라폴스; +city::6089125;Norfolk County;; +city::6089426;North Bay;Gorad Nort-Bej;Nort Bej;Nort-Bej;YYB;bei wan;nosubei;nwrth bay;nwrth by;Горад Норт-Бей;Норт Беј;Норт-Бей;نارتھ بے;نورث باي;نورث بی;ノースベイ;北灣; +city::6091104;North York;Nort-Jork;bei yue ke;nort york;nosuyoku;Норт-Йорк;நோர்த் யோர்க்;ノースヨーク;北約克; +city::6092122;Oakville;Okvil;Okvill;XOK;ao ke wei er;awkfyl;okeubil;okubiru;Оквил;Оквилл;Оквілл;أوكفيل;اوک‌ویل;オークビル;奥克维尔;오크빌; +city::6094578;Oshawa;Osava;Oshava;Ošava;QWA;YOO;ao sha hua;awshawa;oshava;oshawa;osyawa;Ошава;أوشاوا;اوشاوا;ოშავა;オシャワ;奧沙華;오샤와; +city::6094817;Ottawa;Gorad Atava;Otava;Otavo;Otawa;Ottaba;Ottahua;Ottava;Ottavae;Ottawa;YOW;atawa;atoya;attava;awtawa;otava;otawa;ottava;wo tai hua;xxttawa;ŸAA¬²±;Οττάβα;Οτταβα;Горад Атава;Отава;Оттавæ;Оттава;Օտտավա;אוטווה;אטאווא;أوتاوا;ئۆتاوا;اتاوا;اوتآوآ;اوٹاوا;اٹاوہ;ओटावा;অটোয়া;ਓਟਾਵਾ;ଓଟାୱା;ஒட்டாவா;ಆಟ್ಟಾವಾ;ഓട്ടവ;ออตตาวา;ཨོ་ཏ་ཝ།;အော့တဝမြို့;ოტავა;ኦታዋ;ᎠᏔᏩ;ᐊᑐᕚ/atavaa;オタワ;渥太華;오타와; +city::6101645;Peterborough;Peterborough;Piterboro;YPQ;bi de bao;bytyrbwrwgh;pitaboro;piteobeoleo;pytrbwrw antaryw;Питерборо;Пітерборо;بيتيربوروغ;پیتربورو، انتاریو;پیٹربرو، انٹاریو;پیٹربروہ;ピーターボロ;彼得堡;피터버러; +city::6104111;Pickering;Pikering;bykryngh;pi ke ling;pikaringu;pikeoling;pkrng;pykryng antaryw;Пикеринг;Пікерінг;بيكرينغ;پکرنگ;پیکرینگ، انتاریو;ピカリング;皮克靈;피커링; +city::6113365;Prince George;Prince George;Prins DZordz;Prins-Dzhordzh;YXS;bryns jwrj;peulinseujoji;phrins cxrc;prns jrj brytysh klmbya;pryns gwrg;qiao zhi wang zi cheng;Принс Џорџ;Принс-Джордж;Прінс-Джордж;פרינס גורג;برينس جورج;پرنس جارج، برٹش کولمبیا;پرنس جرج، بریتیش کلمبیا;พรินซ์จอร์จ;乔治王子城;프린스조지; +city::6118158;Red Deer;Red Deer;Red Dir;Red Dyras;Red-Dir;YQF;hong lu shi;rd dyr;reddodia;ryڈ ڈyyr albrٹa;Ред Дир;Ред-Дир;Ред-Дір;רד דיר;رد دير;رد دیر;ریڈ ڈئر;ریڈ ڈئیر، البرٹا;レッドディア;红鹿市; +city::6119109;Regina;Gorad Rehdzhajna;Redzaina;Redzajna;Redzhajna;Redzhajnae;Redžaina;Regina;Regina i Saskatchewan;Regino;Rejayna;Rengina;Reĝino;Ridzaina;Ridzhajna;Ridžaina;Régina;Urbs Reginae;YQR;li gu na;li jia na;lijaina;rejaina;rejina;rgyynh;rija'ina;rjayna;ryjayna;ryjyna saskchywan;Ρεγγίνα;Горад Рэджайна;Реджайнæ;Реджайна;Реџајна;Риджайна;Ռեջայնա;רגיינה;رجاینا;ريجاينا;ریجینا، ساسکچیوان;रेजिना;ਰਿਜਾਇਨਾ;ரெஜைனா;რეჯაინა;レジャイナ;里賈納;里贾纳;리자이나; +city::6119518;Repentigny;Repantin'i;Repantini;Repentigny;rpantyny kbk;rybntynyy;Репантиньи;Репантињи;ريبنتينيي;رپانتینی، کبک; +city::6122085;Richmond;Richmond;Richmund;Ricmondas;Ričmondas;lichimeondeu;lie zhi wen;ricamada;ritchimondo;rytshmwnd;Ричмонд;Ричмънд;Річмонд;ريتشموند;رچمنڈ، برٹش کولمبیا;رچمونڈ;ਰਿਚਮੰਡ;リッチモンド;列治文;리치먼드; +city::6122091;Richmond Hill;Richmond Khil;Richmond-Gill;Richmond-Khill;lichimeondeuhil;lie zhi wen shan;ritchimondohiru;rychmwnd hyl antaryw;rytshmwnd hyl;Ричмонд Хил;Ричмонд-Гілл;Ричмонд-Хилл;ريتشموند هيل;ریچموند هیل، انتاریو;リッチモンドヒル;列治文山;烈治文山;리치먼드힐; +city::6137270;Saguenay;Sagene;Sagenej;Sagenė;Sagne;Saguenay;YBG;sa ge nai;sageune;saghynyh;sagune;sagwnh kbk;Сагеней;Сагне;סאגנה;ساغينيه;ساگونه، کبک;سگینے، کیوبک;サグネ;薩格奈;사그네; +city::6138374;Saint-Hyacinthe;Gorad Sen-Iasent;Saint-Hyacinthe;Sankt-Giacint;Sent Ijasent;Sent-Iasent;XIM;san hyasnt kybk;sn-ayysnt kbk;Горад Сен-Іасент;Санкт-Гиацинт;Сент Ијасент;Сент-Іасент;Сент-Иасент;سان هياسنت، كيبك;سن-اییسنت، کبک; +city::6138495;Saint-Jean-sur-Richelieu;Saint-Jean-sur-Richelieu;Sen Zhan sir Rishele;Sen-Zhan-sjur-Rishel'e;Sen-Zhan-sjur-Rishel'jo;YJN;san jan swr ryshlyw;sn-zhan-swr-ryshwlyw;Сен Жан сир Ришеље;Сен-Жан-сюр-Ришелье;Сен-Жан-сюр-Рішельйо;سان جان سور ريشليو;سن-ژان-سور-ریشولیو;سینٹ-ژاں -سر-ریچلیو; +city::6138501;Saint-Jerome;Saint-Jerome;Saint-Jérôme;Sen Zherom;Sen-Zherom;san jyrwm;sn-zhrwm kbk;Сен Жером;Сен-Жером;سان جيروم;سن-ژروم، کبک; +city::6138517;Saint John;Gorad Sent-Dzhon;Saint John;Saint-Jean;Sejnt Dzhon;Sent DZon;Sent-Dzhon;Urbs Sancti Ioannis Canadensis;YSJ;seinteujon;senta jona;sentcxhn;sentojon;sheng yue han;snt gwn;snt jan;Горад Сент-Джон;Сейнт Джон;Сент Џон;Сент-Джон;סנט גון;سنت جان;سینٹ جان;سینٹ جان، نیو برنسوک;सेंट जॉन;เซนต์จอห์น;სენტ-ჯონი;セントジョン;セント・ジョン;圣约翰;세인트존; +city::6141190;Sarnia;Gorad Sarnija;Sarnia;Sarnija;YZR;carniya;sa ni ya shi;sania;sarnya;Горад Сарнія;Сарния;Сарнија;Сарнія;سارنيا;سارنیا;سارنیہ;சார்னியா;サーニア;薩尼亞市;사니아; +city::6141256;Saskatoon;Gorad Saskatun;Saskatoon;Saskatoun;Saskatun;Saskatuna;Saskatunas;Saskatuno;Saskatūna;Saskatūnas;YXE;caskatun;sa si ka tong;saeseukeotun;saskatuna;saskatwn;sasukato~un;ssqtwn;Σασκατούν;Горад Саскатун;Саскатун;Սասկատուն;ססקטון;ساسكاتون;ساسکاتون;ساسکاٹون;सास्काटून;சாஸ்கடூன்;სასკატუნი;サスカトゥーン;萨斯卡通;새스커툰; +city::6141439;Sault Ste. Marie;Sault Sainte Marie;Sault Ste. Marie;Sault-Sainte-Marie;Su Sent Mari;Su-Sent-Mari;YAM;su sent ma ri;su sheng ma li;suseinteumali;susentomari;sw saynt mary;Су Сент Мари;Су-Сент-Мари;Су-Сент-Марі;سالٹ سٹی ماری;سو ساينت ماري;سو سنت‌ماری;سو سینت ماری، انٹاریو;ซูเซนต์มารี;სუ-სენტ-მარი;スーセントマリー;蘇聖瑪麗;수세인트마리; +city::6146143;Sherbrooke;Gorad Shehrbruk;Serbrukas;Sherbrooke;Sherbruk;YSC;she bu lu;she bu lu ke;sheruburukku;shrbrwk;shyrbrwk;syeleubeulukeu;Šerbrukas;Горад Шэрбрук;Шербрук;شربروک;شيربروك;شیربروک;შერბრუკი;シェルブルック;舍布碌;舍布魯克;셰르브루크; +city::6146279;Sherwood Park;Shervud Park;Шервуд Парк; +city::6155033;St. Albert;Saint Albert;Saint-Albert;Sen Alberas;Sent Albert;sant albrt;seinteuaelbeoteu;sheng ai bo te;snt albrt;Сент Алберт;سانت ألبرت;سنت آلبرت;سینٹ البرٹ;سینٹ البرٹ، البرٹا;სენტ-ალბერტი;圣艾伯特;세인트앨버트; +city::6155721;St. Catharines;Gorad Sent-Kataryns;Saint Catharines;Sankta Katarino;Sent Katerinsas;Sent Ketrins;Sent-Katarins;Sent-Keterins;St. Catharines;YCM;sant kathrynz;seinteukaeseolinseu;sentokyasarinzu;sheng kai se lin si;snt katrynz antaryw;Горад Сент-Катарынс;Сент Кетринс;Сент-Катаринс;Сент-Кетерінс;Սենթ Քաթարինս;سانت كاثرينز;سنت کاترینز، انتاریو;سینٹ کیتھرائنز;เซนต์แคเทอรีนส์;სენტ-კატარინსი;セントキャサリンズ;圣凯瑟琳斯;세인트캐서린스; +city::6159905;Surrey;Sari;Suri;Surrej;sare;seoli;su li;swry;swry kwlwmbya albrytanyt;Сари;Суррей;Съри;סארי;سوري، كولومبيا البريطانية;سوری;サレー;素里;서리; +city::6163012;Terrebonne;Terbon;trbwn kbk;tyrbwn;Тербон;تربون، کبک;تيربون; +city::6166142;Thunder Bay;Tander Bej;Tander Bejus;Tander Bėjus;Tander-Bej;Thunder Bay;Tundurbej;YQT;sandabei;sang de bei;seondeobei;thandr bay;thandr by;Тандер Беј;Тандер-Бей;Тъндърбей;תאנדר ביי;تھنڈر بے;تھنڈربے، انٹاریو;ثاندر باي;ثاندر بی;തണ്ടർ ബേ;サンダーベイ;桑德贝;선더베이; +city::6167865;Toronto;Gorad Taronta;Torontas;Toronto;Torontu;Torontum;Torontó;YTO;duo lun duo;roranro;taronto;teareantea;tho rxn to;tolonto;toramto;toranto;toronto;twrntw;twrwntw;Τορόντο;Горад Таронта;Торонто;Տորոնտո;טאראנטא;טורונטו;تورنتو;تورونتو;ٹورانٹو;ٹورنٹو;टोरण्टो;टोरन्टो;टोराँटो;तोरन्तो;টরোন্টো;ਟੋਰਾਂਟੋ;ரொறன்ரோ;టొరంటో;ಟೊರಾಂಟೋ;ടോറോണ്ടോ;โทรอนโต;တိုရွန်တိုမြို့;ტორონტო;トロント;多伦多;多倫多;토론토; +city::6169141;Trois-Rivieres;Gorad Trua-Ryuer;Troa Rivier;Troa Rivjer;Trois-Rivieres;Trois-Rivières;Trua Rivjeras;Trua-Riv'er;Trua-River;Urbs Trifluvianensis;YRQ;san he shi;teulualibieleu;torowaribieru;torowarivu~ieru;trw-rywyayr;trwa ryfyyr;trwa rywyr;Горад Труа-Рыўер;Троа Ривиер;Троа Ривјер;Труа-Ривьер;Труа-Рівєр;ترو-ریویائر;تروا ريفيير;تروا ریویر;トロワリビエール;トロワリヴィエール;三河市;트루아리비에르; +city::6173331;Vancouver;Ban'kouber;Fankuver;Fankûver;Gorad Vankuver;Vancouver;Vancover;Vancuverium;Vancôver;Vanguve;Vangúve;Vankuver;Vankuvera;Vankuveris;Vankuvero;Vankuvur;Vankūvera;Venkuver;Venkûver;Wankuwer;Wankuwér;YVR;baenkubeo;bankuba;bankuba shi;bhyanakubhara;fankwfr;vainakuvara;vainkuvara;vankuvar;vhamkuvhara;wen ge hua;wnkwwr;wnkwwr brytysh klmbya;wnqwbr;wynkwwr;Βανκούβερ;Ванкувер;Ванкувър;Горад Ванкувер;Վանկուվեր;ונקובר;فانكوفر;ونکوور;ونکوور، بریتیش کلمبیا;وینکوور;वैंकूवर;व्हँकूव्हर;ভ্যানকুভার;ਵੈਨਕੂਵਰ;வான்கூவர்;แวนคูเวอร์;ཝན་ཁུ་ཝེར།;ဗန်ကူးဗားမြို့;ვანკუვერი;ቫንኩቨር;バンクーバー;バンクーバー市;溫哥華;밴쿠버; +city::6173577;Vaughan;Von;bon;fawjan;vu~on;wan;wang shi;Вон;فاوجان;وان;وان، انٹاریو;واگھن;ヴォーン;旺市;본; +city::6174041;Victoria;Victoria;Victòria;Viktori;Viktoria;Viktoria Vretanikis Kolomvias;Viktorija;Viktorio;Viktoriya;Wiktoriye;YYJ;bigtolia;bikutoria;fktwrya;vhiktoriya;vikatori'a;viktoriya;vu~ikutoria;wei duo li ya;wiktxreiy;wyktwrya brytysh klmbya;wyqtwryh;Βικτώρια Βρετανικής Κολομβίας;Виктори;Виктория;Викторија;Вікторія;Վիկտորիա;ויקטוריה;فكتوريا;وکٹوریا;وکٹوریا، برٹش کولمبیا;ویکتوریا، بریتیش کلمبیا;व्हिक्टोरिया;ਵਿਕਟੋਰੀਆ;விக்டோரியா;วิกตอเรีย;ვიქტორია;ビクトリア;ヴィクトリア;維多利亞;빅토리아; +city::6176823;Waterloo;Uoterlu;Vaterloo;Voterlu;hua tie lu;u~otaru;watrlw;watrlw antaryw;woteollu;Ватерлоо;Вотерлу;Уотерлу;واترلو;واترلو، انتاریو;واٹرلو، انٹاریو;ウォータールー;滑鐵盧;워털루; +city::6177869;Welland;Veland;Velland;u~erando;wei lan;wellaendeu;wlnd antaryw;wyland;Веланд;Велланд;ولند، انتاریو;ويلاند;ویلینڈ;ウェランド;威蘭;웰랜드; +city::6180961;White Rock;Vajt Rok;White Rock;bai shi;howaitorokku;hwaiteulog;wayt rak brytysh klmbya;wayt rwk;Вајт Рок;وائٹ راک;وائٹ راک، برٹش کولمبیا;وايت روك;وایت راک ، بریتیش کلمبیا;ホワイトロック;白石;화이트록; +city::6182962;Windsor;Uindzur;Uinsor;Vindzor;Vindzoras;Windsor;YQG;u'indasara;uindzori;uinza;u~inza;wen sha;winjeo;wndswr;wyndzwr;wynzr antaryw;Виндзор;Віндзор;Уиндзър;Уинсор;וינדזור;وندسور;ونڈسر، انٹاریو;ونڈسور;وینزر، انتاریو;উইন্ডসর;უინძორი;ウィンザー;ウインザー;温莎;윈저; +city::6183235;Winnipeg;Gorad Vinipeg;Gouinipenk;Uinipeg;Uinnipeg;Vinipeg;Vinipega;Vinipegas;Vinipego;Vinnipeg;Vinnipega;Vinnipeq;WPG;Winnipeg;Winnipeg City;Winnipég;YWG;u~inipegu;vinipaiga;vinipega;vinippek;wen ni bo;win ni phek;winipeg;wny pyg;wnypg;wynybygh;wynypg;Γουίνιπεγκ;Винипег;Виннипег;Вінніпег;Вінніпеґ;Горад Вініпег;Уинипег;Уиннипег;Վիննիպեգ;ויניפג;ونی پیگ;ونیپگ;وينيبيغ;وینیپگ;विनिपेग;ਵਿਨੀਪੈਗ;வினிப்பெக்;วินนิเพก;ဝင်နီပက်မြို့;უინიპეგი;ᐄᐧᓂᐯᐠ;ウィニペグ;温尼伯;위니펙; +city::6324729;Halifax;Galifaks;Halifax;YHZ;Галифакс; +city::6324733;St. John's;Agios Ioannis Neas Gis;Baile Naoimh Eoin;Baile Naoimh Eòin;Baile Sheain;Baile Sheáin;Gorad Sent-Dzhons;Saint John;Saint John's;Saint-Jean;Saint-Jean de Terre-Neuve;San Juan de Terranova;Sanctus Ioannes Terrae Novae;Sejnt Dzhons;Sent DZons;Sent Dzonsas;Sent Džonsas;Sent-Dzhons;St Johns;St. John's;St. John's pa Newfoundland;St. John's på Newfoundland;St. John’s;YYT;ceyint jans;sant jwnz;seinteujonseu;sentojonzu;sheng yue han si;snt g'wns;Άγιος Ιωάννης Νέας Γης;Горад Сент-Джонс;Сейнт Джонс;Сент Џонс;Сент-Джонс;סנט ג'ונס;سانت جونز;سینٹ جان;سینٹ جانز، نیوفنلینڈ اور لیبراڈار;செயின்ட் ஜான்ஸ்;სენტ-ჯონზი;セントジョンズ;聖約翰斯;세인트존스; +city::6325494;Quebec;Altepetl Quebec;Bandaraya Quebec;Cathair Quebec;Cathair Québec;Ciutat de Quebec;Gorad Kvebek;Jiji la Quebec;Kebec Vile;Kebek;Kebeko;Kebeku;Kempek;Kevek tava;Kota Quebec;Kuehbehk;Kvebek;Kvebeka;Kvebekas;Kwebek;Kwebek Shehiri;Kwébék;Kwébék Shehiri;Kébéc Vile;Kévek táva;Lungsod ng Quebec;Lungsod ng Québec;Quebec;Quebec Ceety;Quebec City;Quebec Hiria;Quebec llaqta;Quebec-chhi;Quebec-su;Quebecborg;Quebecceaster;Quebecstad;Quebecum urbs;Québec;Québec-chhī;Québec-sṳ;Québecborg;Siudad ti Quebec;Tchubec;Thanh pho Quebec;Thành phố Québec;Vila de Quebec;Vila de Quebèc;Ville de Quebec;Ville de Québec;YQB;kbk;kebaika sahira;kh wibek;kiyupek nakaram;kui bei ke shi;kvebeka siti;kwebeg;kyubeka nagara;mdynt kybk;qwwybq syty;Κεμπέκ;Горад Квебек;Квебек;Куэбэк;Քվեբեկ;קוויבק סיטי;مدينة كيبك;کبک;کیوبک شہر;क्यूबेक नगर;क्वेबेक सिटी;ਕੇਬੈਕ ਸ਼ਹਿਰ;கியூபெக் நகரம்;ควิเบก;კვებეკი;ケベック・シティー;魁北克市;퀘벡; +city::6325521;Levis;Levi;li wei;lwy kbk;lyfys;lyws;revu~i;Леви;Леві;لوی، کبک;ليفيس;لیوس;レヴィ;利维; +city::6354908;Sydney;Baile Shidni;Sidni;Sydney;YQY;shidoni;sydny. nwa askwshya;Сидни;سیدنی٬ نوا اسکوشیا;シドニー; +city::6948711;Scarborough;Skarboro;icukkarparo;seukabeoleo;shi jia bao;sukabaro;Скарборо;இசுக்கார்பரோ;スカーバロー;士嘉堡;스카버러; +city::7602078;Ladner;; +city::7870925;East York;Ist Jork;Istochni Jork;isutoyoku;Ист Јорк;Источни Јорк;イーストヨーク; +city::204405;Uvira;Uvinza;Uvira;Увира; +city::204953;Tshikapa;Chikapa;TSH;Tshikapa;qi ka pa;tshykaba;tsu~ikapa;Чикапа;تشيكابا;ツィカパ;奇卡帕; +city::207570;Mwene-Ditu;Mvene-Ditu;Mwene-Ditu;Мвене-Диту; +city::207596;Mweka;MEW;Mueka;Mveka;Mweka;Мвека; +city::209228;Mbuji-Mayi;Bakwanga;MJM;Mbuji-Mayi;Mbuy Mayi;Mbuzhi-Maji;Мбужи-Майи; +city::211647;Lodja;LJA;Lodja;Lodzh;Loja;Лодж; +city::211734;Lisala;LIQ;Lisala;Lisale;Lizala;Лисале; +city::212730;Kisangani;FKI;Kisan'nkani;Kisangani;Kisanganis;Kisangáni;Singitini;Stanleystad;Stanleyville;ji sang jia ni;kisang-gani;kisangani;Κισανγκάνι;Кисангани;Кісангані;Կիսանգանի;キサンガニ;基桑加尼;키상가니; +city::212902;Kindu;KND;Kindu;Kindu-Port-Empain;Port de Kindu;Port-Empain;jin du;kindo~u;kindu;kndw;Кинду;Кінду;کندو;キンドゥ;金杜;킨두; +city::213940;Kasongo;Kasongo;Kazongo;Tongoni;Tongoni Kapaya;Касонго; +city::214481;Kananga;KGA;Kananga;Kanange;Lulua;Luluabourg;Luluaburg;ka nan jia;kanang-ga;kananga;kanangha;Кананга;Կանանգա;كانانغا;カナンガ;卡南加;카낭가; +city::214614;Kamina;KMN;Kamina;Kaminy;Камины; +city::214974;Kalemie;Albertstad;Albertville;FMI;Kalemi;Kalemie;Kalemije;Kalemijė;ka lai mi;kallemi;karemi;Калеми;Калемие;Калеміє;カレミ;卡萊米;칼레미; +city::215527;Kabinda;KBN;Kabinda; +city::215771;Isiro;IRP;Isirio;Isiro;Paulis;Исиро; +city::215976;Ilebo;Franqui;Ilebo;PFR;Port-Francqui;Илебо; +city::216281;Goma;GOM;Goma;Ngoma;Nkoma;ge ma;ghwma;goma;gwma;Γκόμα;Гома;غوما;گوما;ゴマ;戈马;고마; +city::216404;Gbadolite;BDT;Bado;Badolite;Gbadolite;Гбадолите; +city::216449;Gandajika;GDJ;Gandajika; +city::217562;Butembo;Butembo;RUE;Бутембо; +city::217570;Buta;BZU;But;Buta;Бут; +city::217695;Bunia;BUX;Bunia;Bunija;Bunya;Búnya;bu ni ya;Буниа;Буния;Буніа;布尼亞; +city::217745;Bumba;BMB;Bumba;Бумба; +city::217831;Bukavu;BKY;Bukavu;Costermansstad;Costermansville;Букаву; +city::219057;Beni;BNC;Beni;Бени; +city::922704;Lubumbashi;E'ville;Elisabethville;Elizabethstad;Elizabethville;E’ville;FBM;Gorad Lubumbashy;Lubumbashi;Lubumbashi shaary;Lubumbasi;Lubumbasis;Lubumbaši;Lubumbašis;Lumumbashi;lu ben ba xi;lubumabasi;lubumbasi;lubumbasi si;lwbmbashy;lwbwmbashy;rubunbashi;Élisabethville;Горад Лубумбашы;Лубумбаши;Лубумбаши шаары;Лубумбаші;לובומבאשי;لوبمباشی;لوبومباشي;لوبومباشی;ਲੂਬੁਮਬਾਸ਼ੀ;ルブンバシ;盧本巴希;루붐바시;루붐바시 시; +city::922741;Likasi;Jadotstad;Jadotsville;Jadotville;Likasi;Likasis;li ka xi;likasi;rikashi;Ликаси;Лікасі;リカシ;利卡西;리카시; +city::922773;Kolwezi;KWZ;Kolvezi;Kolwezi;Колвези; +city::922806;Kipushi;Kipushi;Кипуши; +city::2312888;Mbanza-Ngungu;Mbanza-Ngungu;Thystad;Thysville;Мбанза-Нгунгу; +city::2312895;Mbandaka;Bandaka;Cocquilhatville;Coquilhalville;Coquilhatstad;Coquilhatville;MDK;Mbandaka;Mbándáká;Wangata;eumbandaka;mbandaka;mu ban da ka;mubandaka;Мбандака;مبانداکا;ムバンダカ;姆班达卡;음반다카; +city::2313002;Matadi;Gorad Matady;MAT;Matadi;Matadis;Matidi;Matádi;ma ta di;matadi;matady;Горад Матады;Матади;Матаді;מאטדי;ماتادی;マタディ;马塔迪;마타디; +city::2314302;Kinshasa;FIH;Gorad Kinshasa;Kincasa;Kinchasa;Kinchassa;Kinsas;Kinsasa;Kinsaso;Kinshasa;Kinshase;Kinsjasa;Kinszasa;Kinsásá;Kinxasa;Kinŝaso;Kinşasa;Kinšas;Kinšasa;Kînşasa;Leopoldstad;Leopoldville;Léopoldville;Quinxassa;jin sha sa;jin xia sha;kin cha sa;kinasasa;kinsaca;kinsasa;kinshasa;kinsyasa;knshasa;kynshasa;Κινσάσα;Горад Кіншаса;Киншаса;Киншасе;Кіншаса;Կինշասա;קינשאזע;קינשאסה;كينشاسا;کنشاسا;کنشاسہ;کینشاسا;किन्शासा;ਕਿਨਸ਼ਾਸਾ;கின்ஷாசா;കിൻഷസ;กินชาซา;ཀིན་ཤ་ས།;ကင်ရှာဆာမြို့;კინშასა;ኪንሻሳ;キンシャサ;金夏沙;金沙薩;킨샤사; +city::2314705;Kikwit;KKW;Kicwite;Kikvit;Kikvitas;Kikvite;Kikwit;Kitwit;ji kui te;kikuu~ito;kikwiteu;Киквит;Киквите;Кіквіт;キクウィト;基奎特;키퀴트; +city::2315728;Gemena;GMA;Gemena;Gemene;Гемене; +city::2317397;Bandundu;Bandundu;Bandundu Boelgesi;Bandundu Bölgesi;Bandundu Province;Bandundu tartomany;Bandundu tartomány;Banningville;FDU;Pravincyja Bandundu;Provincia di Bandundu;Provinco Bandundu;Provinsi Bandundu;ban dun du sheng;bandandw;bando~undo~u zhou;bandundu ju;bandundu pranta;Бандунду;Правінцыя Бандунду;באנדונדו;بانداندو;باندوندو صوبہ;बान्दुन्दु प्रान्त;バンドゥンドゥ州;班顿杜省;반둔두 주; +city::2593460;Masina;; +city::2384770;Mbaiki;Mbaiki;Mbaïki; +city::2386012;Kaga Bandoro;Crampel;Fort-Crampel;Kaga Bandoro;Kaga-Bandoro; +city::2388873;Bimbo;Bimbo;Bimo; +city::2389086;Berberati;BBT;Berberati;Berbérati;Берберати; +city::2389853;Bangui;BGF;Bangi;Bangis;Bangui;Mpan'nkoui;ban ji;bang-gi;bangi;bangwyy;Μπανγκουί;Банги;Бангі;בנגואי;بانگوئی;ባንጊ;バンギ;班基;방기; +city::2255414;Pointe-Noire;PNR;Pointe-Noire;Puehnt-Nuar;Puent Nuaras;puaengteunualeu;Пуэнт-Нуар;푸앵트누아르; +city::2258261;Dolisie;DIS;Dolisi;Dolisie;Dolisje;Dolizi;Dolosie;Loubomo;Lubomo;dolliji;dorishi;duo li xi;dwlysy;Долиси;Лубомо;دولیسی;ドリシー;多利西;돌리지; +city::2259383;Kayes;Jacob;Kai;Kajes;Kaye;Kayes;Kaï;Кайес; +city::2260535;Brazzaville;BZV;Braza;Brazavil;Brazavilis;Brazavilo;Brazzavil';Brazzaville;Maya-Maya;Mprazabil;N'Tamo;beulajabil;brazafyl;brazawyl;brzwwyl;bu la chai wei er;burazavu~iru;Μπραζαβίλ;Браззавиль;ברזוויל;برازافيل;برازاویل;ብራዛቪል;ブラザヴィル;布拉柴维尔;브라자빌; +city::2657896;Zurich;Cirihe;Cirikh;Ciurichas;Cjurikh;Cjurikh khot;Cuerih;Curych;Cürih;Cīrihe;Gorad Cjurykh;Lungsod ng Zuerich;Lungsod ng Zürich;Su-la-sie;Suerix;Syurix;Sürix;Sŭ-là̤-sié;Tsuerix;Tsurique;Tsürix;Turicum;Turitg;ZRH;Zeurich;Zirich;Zirik;Zuerich;Zuerigh;Zuerih;Zuric;Zurich;Zuricu;Zurigh;Zurigo;Zuriko;Zurique;Zurych;Zurìcu;Zyriche;Zyrihu;Zúric;Zúrich;Zürich;Zürigh;Zürih;churihhi;chwilihi;curikku;jhyurika;jurikha;su li shi;su rik;suricc;tsiurikhi;tsyryk;zi'urikha;zwrykh;zyryk;zyurikha;zywrch;zywrh;zywrkh;Ζυρίχη;Горад Цюрых;Цирих;Цюрих;Цюрих хот;Ցյուրիխ;ציריך;زوريخ;زوریخ;زيورخ;زیورخ;زیورچ;سيۇرىخ;څوریخ;ܙܝܘܪܚ;ܬܣܝܪܝܟ;ज़्यूरिख़;झ्युरिक;জুরিখ;ਜ਼ਿਊਰਿਖ;சூரிக்கு;സൂറിച്ച്;ซูริก;ဇူးရစ်ချ်မြို့;ციურიხი;ዙሪክ;チューリッヒ;苏黎世;蘇黎世;취리히; +city::2657970;Winterthur;Eulachstadt;Gorad Vintehrtur;Vintertour;Vintertur;Vintertura;Vinterturas;Vinterturi;Vinterturo;Vintertūra;Vintertūras;Vitudurum;Winterthour;Winterthur;ZLI;binteotueo;fyntrtwr;vu~intato~uru;wen te tu er;wntrtwr;Βίντερτουρ;Винтертур;Вінтертур;Горад Вінтэртур;فينترتور;ونترتور;ونٹرتھر;ვინტერთური;ヴィンタートゥール;温特图尔;빈터투어; +city::2658822;Sankt Gallen;Saint Gallen;Saint-Gall;San Gallo;San Gallu;San Galo;Sanctogallum;Sankt Gallen;Sankt-Gallen;Sankt-Galo;Son Gagl;St. Gallen;sant ghaln;Санкт-Галлен;سانت غالن; +city::2659811;Luzern;Canton Lucerne;Gorad Ljucehrn;Liucerna;Ljucern;Loukerne;Lucern;Lucerna;Lucerne;Lucerni;Lucerno;Luezerna;Luxerna;Luzern;Luzerna;Lüzerna;Medicago sativa;lu sai en;lucheleun;lutsarna;lutserni;lwsrn;lwzrn;rutsu~erun;Łuxerna;Λουκέρνη;Горад Люцэрн;Луцерн;Люцерн;לוצערן;לוצרן;لوسرن;लुत्सर्न;ལུ་ཛེར་ན།;ლუცერნი;ルツェルン;卢塞恩;루체른; +city::2659994;Lausanne;Lausana;Lausanne;Lausonium;Lauzano;Laŭzano;Losanna;Losena;Lozan;Lozana;Lozane;Lozanna;QLS;lo san;luo sang;rozan'nu;Λωζάνη;Лозана;Лозанна;לוזאן;โลซาน;ローザンヌ;洛桑; +city::2660646;Geneve;Cenevre;GVA;Genava;Genebe;Genebra;Geneue;Geneva;Geneve;Genevi;Genevo;Genevra;Genewa;Genf;Genève;Ginebra;Ginevra;Gorad Zhehneva;Jenewa;Jenwe;Xenebra;Zeneva;Zheneva;Znev;jeneba;jineva;jnyf;jnywa;junevu;ri nei wa;zheneva;znbh;Ĝenevo;Ženeva;Ženēva;Γενέβη;Γενευη;Γενεύη;Горад Жэнева;Женева;Ժնև;זנבה;جنيف;جنیوا;जिनेवा;ჟენევა;ジュネーヴ;日内瓦;제네바; +city::2661552;Bern;BRN;Bann;Beirn;Ben;Bern;Bern osh;Berna;Bernas;Berne;Berno;Bundesstadt;Bèn;Bèrna;Gorad Bern;atharvaveda;ban he na;barana;barna;beirn;beleun;berna;berni;berun;bo en;bo er ni;brn;byrn;pern;Βέρνη;Берн;Берн ош;Горад Берн;Բեռն;בערן;ברן;برن;بيرن;بێرن;بېرن;ܒܪܢ;अथर्ववेद;बर्न;বের্ন;ਬਰਨ;ବର୍ନ;பேர்ன்;ബേൺ;เบิร์น;པེར་ནེ།;ბერნი;ቤርን;ベルン;伯尔尼;伯恩;办合纳;베른; +city::2661604;Basel;Bala;Bale;Basel;Basilea;Basileia;Basilej;Basilia;Basilèa;Basle;Baxilea;Baxiłea;Bazel;Bazel';Bazel' khot;Bazele;Bazeli;Bazelis;Bazelo;Bazilej;Bazylea;Bázel;Bâla;Bâle;Bāsel;Bāzele;EAP;Gorad Bazel';Robur;Vasileia;ba sai er;ba seil;bai cai er;bajel;bajela;basala;bazeli;bazeru;bazl;bzl;pecel;Βασιλεία;Базел;Базель;Базель хот;Горад Базель;Բազել;באזעל;בזל;بازل;बासल;বাজেল;பேசெல்;บาเซิล;པ་སེལ།;ბაზელი;ባዝል;バーゼル;巴塞尔;巴塞爾;白才尔;바젤; +city::2279755;Yamoussoukro;ASK;Giamoussoukro;Gorad Jamusukra;Jamusukras;Jamusukro;Jamusukro khot;Yamosukro;Yamousoukro;Yamoussokro;Yamoussoukro;Yamoussoukrou;Yamussukro;Yamusukro;ya mu su ke lei;ya mu su ke luo;ya mussu kor;yamucukro;yamusasutro;yamusukaro;yamusukeulo;yamusukro;yamusukuro;yamwsswkrw;yamwswkrw;yamwwswwkrۆ;ywmwswkrw;Γιαμουσσούκρο;Јамусукро;Горад Ямусукра;Ямусукро;Ямусукро хот;Յամուսուկրո;יאמוסאקרא;יאמוסוקרו;ياموسوكرو;يامۇسسۇكرو;یاموسسوکرو;یاموسوکرو;یامووسووکرۆ;یوموسوکرو;यामूसूक्रो;ਯਾਮੂਸੂਕਰੋ;ୟାମୁସସୁତ୍ରୋ;யாமூசூக்ரோ;ยามุสซุโกร;ཡམ་སོ་ཁེ་རོ།;იამუსუკრო;ያሙሱክሮ;ヤムスクロ;亚穆苏克罗;雅穆蘇克雷;야무수크로; +city::2281606;Sinfra;Sinfra; +city::2282006;San-Pedro;SPY;San Pedras;San Pedro;San Pédro;San-Pedro;San-Pédro;san bydrw;san=pedoro;sangpedeulo;sheng pei de luo;Сан-Педро;سان بيدرو;サン=ペドロ;聖佩德羅;상페드로; +city::2282827;Oume;Oume;Oumé;Ume; +city::2284647;Man;MJC;Man; +city::2286304;Korhogo;HGO;Korhogas;Korhogo;Korogo;ke huo ge;kologo;korogo;Корого;コロゴ;科霍戈;코로고; +city::2287298;Katiola;KTC;Katiola;Lafouka; +city::2287790;Issia;Issia; +city::2288115;Grand-Bassam;Gran Basamas;Gran-Basam;Gran-Bassam;Grand Bassam;Grand-Bassam;da ba sa mu;gran-basami;grayanda-bas'sama;Гран-Басам;Гран-Бассам;גראן-בסאם;ग्रयाण्ड-बस्सम;გრან-ბასამი;グラン・バッサム;大巴薩姆; +city::2288829;Gagnoa;GGN;Gagnoa;Gan'oa;Ganjoa;Gragnoa;gagnoa;jia ni ao a;Ганьоа;გაგნოა;加尼奧阿; +city::2289049;Ferkessedougou;Ferkesedugu;Ferkessedougou;Ferkessédougou;Firkessedougou;Firkessedugu;Firkessédougou;Firkessédugu;Pofire;Serkessedougou;Феркеседугу; +city::2289887;Divo;Boudougou;DIV;Divas;Divo;di wo;Диво;迪沃; +city::2289983;Dimbokro;DIM;Dimbokro; +city::2290462;Danane;Danane;Danané;Fort Hittos;Данане; +city::2290486;Daloa;DJO;Daloa;da luo ya;dalloa;daroa;Далоа;דאלואה;ダロア;達洛亞;달로아; +city::2290582;Dabou;Dab;Dabou;Dabu;Даб; +city::2290956;Bouake;BYK;Bouake;Bouaké;Buake;Bvake;Bvakė;Bwake;baw ke;bu wa kai;buake;bwaky;Буаке;بواكي;บัวเก;ბუაკე;ブアケ;布瓦凯;부아케; +city::2290964;Bouafle;Bouafle;Bouaflé;Buafle; +city::2291136;Bondoukou;BDK;Bondoukau;Bondoukou;Bonduku;Boudoukou;Gontoukou;bang du ku;bwndwqw;Бондуку;בונדוקו;邦杜庫; +city::2291580;Bingerville;Bingerville; +city::2292852;Anyama;An'jame;Aniama;Anyama;Anyama Sossokoua;Аньяме; +city::2293268;Agboville;Agbovil';Agbovile;Agbovilis;Agboville;a bo wei er;agbawyl;agbwwyl;Агбовиле;Агбовиль;Агбовіль;اگباویل;اگبوویل;阿博維爾; +city::2293342;Adzope;Adzope;Adzopé;Адзопе; +city::2293521;Abobo;Abobo;Abobo-Gare; +city::2293538;Abidjan;ABJ;Abican;Abidjan;Abidzan;Abidzana;Abidzanas;Abidzans;Abidzhan;Abidzhan shaary;Abidżan;Abidžan;Abidžana;Abidžanas;Abidžans;Abigano;Abijan;Abiyan;Abiyán;Abizhan khot;Abiĝano;Ampitzan;Gorad Abidzhan;a bi rang;a bi ren;abdjan;abijan;abijana;abijang;abijani;abydjan;abyjan;xabi can;ʼbydgʼn;Αμπιτζάν;Абиджан;Абиджан шаары;Абижан хот;Абиџан;Абіджан;Горад Абіджан;Աբիջան;אבידגאן;אבידזשאן;آبدجان;آبیجان;أبيدجان;आबिजान;আবিজান;ਅਬੀਜਾਨ;അബിജാൻ;อาบีจาน;აბიჯანი;アビジャン;阿必仁;阿比让;아비장; +city::2293549;Abengourou;Abengourou;Abenguru;OGO;a ben gu lu;abang-gulu;abngwrw;Абенгуру;ابنگورو;阿本古鲁;아방구루; +city::2596934;Seguela;SEO;Segele;Seguela;Séguéla;Сегеле; +city::2598243;Soubre;Soubre;Soubré; +city::3868121;Vina del Mar;KNA;Vin'ja-del'-Mar;Vina del Mar;Vinea Maris;Vinja del Mar;Vinja del Maras;Vinja-del'-Mar;Vinya del Mar;Viña del Mar;bi ni ya de er ma;binyadelmaleu;fynya dyl mar;wynya dl mar;Винья-дель-Мар;Виня дел Мар;Виња дел Мар;Віня-дель-Мар;Վինյա դել Մար;ויניה דל מאר;فينيا ديل مار;وینیا دل مار;ビニャ・デル・マール;比尼亚德尔马;비냐델마르; +city::3868192;Villa Alemana;Vil'ja-Alemana;Vila Alemana;Villa Alemana;a lai ma na zhen;biyaallemana;wwylʼ ʼlʻmʼnʼ;wya almana;Вилья-Алемана;Виља Алемана;Вілья-Алемана;ווילא אלעמאנא;ویا آلمانا;ビジャ・アレマーナ;阿萊馬納鎮;비야알레마나; +city::3868626;Valparaiso;Balparaiso;Ciudad de Valparaiso;Ciudad de Valparaíso;Dakbayan sa Valparaiso;Dakbayan sa Valparaíso;Gorad Val'paraisa;VAP;Val'paraiso;Vallis Paradisi;Valparaesos;Valparais;Valparaisas;Valparaiso;Valparayso;Valparaíso;Valparaėsos;Waer pa lai suo;Wǎěr pà lái suǒ;bal pa ra xi so;balapara'iso;balpalaiso;balpara'i esa;balparaysw;balparejho;baruparaiso;bhalapara'iso;falbaraysw;valapara'iso;valaparaiso;valpara'iso;valparaijo;valparaysۆ;valpeyracov;wa er pa lai suo;walparayzw;walprayysw;walprayzw;Βαλπαραΐσο;Валпараисо;Вальпараисо;Вальпараїсо;Горад Вальпараіса;Վալպարաիսո;וואלפאראיסא;ולפראיסו;بآلپارایسو;فالبارايسو;والپارایزو;والپرائیسو;والپرایزو;ڤالپارایسۆ;ܒܐܠܦܐܪܐܝܣܘ;ވަލޕަރައިސޮ;बाल्परेझो;वालपाराईसो;वालपारैसो;ভালপারাইসো;ਬਾਲਪਰਾਈਸੋ;વાલ્પારાઇસો;ବଲ୍ପରଇ େସା;வல்பெய்ரசோவ்;వల్పరైజో;വൽപറാസിയോ;වල්පරයිසෝ;บัลปาราอีโซ;བལྤ་རཨིསོ;ဗလၲပရမိစော;ვალპარაისო;ቫልፓራይሶ;ᕙᓪᐸᕃᓱ;バルパライソ;瓦尔帕莱索;瓦爾帕萊索;발파라이소; +city::3868707;Valdivia;Ciudad de Valdivia;Ciudad de Valdivía;Gorad Val'dyvija;Val'divija;Valdeveje;Valdivia;Valdivija;Valdėvėjė;ZAL;bal di beiy;baldibia;baldybya;barudibia;valdivia;wa er di wei ya;waldywya;Βαλδίβια;Валдивия;Валдивија;Вальдивия;Вальдівія;Горад Вальдывія;ואלדיביה;וואלדיוויא;بالدیبیا;والدیویا;บัลดีเบีย;ვალდივია;バルディビア;瓦尔迪维亚;발디비아; +city::3870011;Temuco;Ciudad Temuco;Temouko;Temuco;Temukas;Temuko;Temuks;ZCO;te mu ke;temu ko;temuko;temyukea;tymwkw;Τεμούκο;Тeмуко;Темуко;Տեմուկո;טעמוקא;تیموکو;ടെമ്യൂകോ;เตมูโก;ტემუკო;テムコ;特木科;테무코; +city::3870282;Talcahuano;Gorad Tal'kauana;Tal'kauano;Talcahuano;Talkahuanas;Talkauano;Talkavano;Talkawanu;ta er ka wa nuo;tal kaxaw no;talkahwanw;talkauano;tarukawano;Горад Талькауана;Талкауано;Талькауано;טאלקאוואנא;تالكاهوانو;تالکاهوانو;ตัลกาอัวโน;タルカワノ;塔爾卡瓦諾;탈카우아노; +city::3870294;Talca;Gorad Tal'ka;TLX;Tal'ka;Talca;Talka;Talkao;ta er ka;talka;taruka;Τάλκα;Горад Талька;Талка;Талька;تالكا;تالکا;ტალკა;タルカ;塔爾卡;탈카; +city::3870306;Talagante;Talagante;ta la gan te;tallagante;Талаганте;塔拉甘特;탈라간테; +city::3871336;Santiago;Ciles Santjagas;CiudadSantiago;SCL;Sanctiacobi;Sant'jago;Santiago;Santiago de Chile;Santiago de Xile;Santiago del Cile;Santiago do Chile;Santiago du Chili;Santiago du Ch·ili;Santianko;Santjago;Santjago de Chile;Santjago de Chili;Stgo.;santiago;santixako;santyaghw;santyagw;santyyagw;sheng de ya ge;Čilės Santjagas;Σαντιάγκο;Σαντιάγο;Сантьяго;Сантяго де Чиле;Сантяго де Чили;סנטיאגו דה צ'ילה;سانتىياگو;سانتياغو;سانتیاگو;ซันติอาโก;სანტიაგო დე ჩილე;ሳንቲያጎ;サンティアゴ;圣地亚哥;산티아고; +city::3872255;San Felipe;San Felipe; +city::3872348;San Bernardo;San Bernardo;San-Bernardo;sheng bei er na duo;Сан-Бернардо;聖貝爾納多; +city::3872395;San Antonio;QTN;San Antonio;San-Antonio;sheng an dong ni ao;Сан Антонио;Сан-Антонио;聖安東尼奧; +city::3873775;Rancagua;QRC;Ran'kagoua;Rancagua;Rankagua;Rankagva;Rankawa;lan ka gua;langkagwa;rangka kwa;rankagua;rankagwa;Ρανκάγουα;Ранкагуа;ראנקאגווע;رانکاگوآ;รังกากวา;რანკაგუა;ランカグア;兰卡瓜;랑카과; +city::3874096;Quilpue;Kil'pueh;Quilpue;Quilpué;ji er pu ai;kirupue;Кильпуэ;キルプエ;基爾普埃; +city::3874119;Quillota;Kijota;Kil'ota;Kiljota;Kilota;Quillota;ji yue ta;ki yo ta;kiyota;Кийота;Кильота;Киљота;กีโยตา;基約塔;키요타; +city::3874787;Punta Arenas;Gorad Punta Arehnas;Magallanes;PUQ;Ponta Arenasos;Pounta Arenas;Promontorium Arenosum;Punta Arenas;Punta Arenasas;Punta-Arenas;Puntaarenasa;peng ta a lei na si;pun ta xa renas;puntaalenaseu;punta・arenasu;pwnta arnas;pwnta arynas;Πούντα Αρένας;Горад Пунта Арэнас;Пунта Аренас;Пунта-Аренас;פּונטא ארענאס;פונטה ארנס;پونتا آرناس;پونتا اریناس;ปุนตาอาเรนัส;პუნტა-არენასი;プンタ・アレーナス;蓬塔阿雷纳斯;푼타아레나스; +city::3874960;Puerto Montt;Ciudad de Puerto Montt;PMC;Port Montt;Portus Monttii;Pouerto Mont;Puehrto-Mont;Puerta Muonts;Puerto Mont;Puerto Montas;Puerto Montt;Puerto-Montt;Puertomonta;Puertu Montt;meng te gang;prtw mwnt;pueleutomonteu;puerutomonto;pytrw mwnt;Πουέρτο Μοντ;Пуерто Монт;Пуерто-Монтт;Пуэрто-Монт;פּארטא מאנט;פוארטו מונט;پرتو مونت;پیترو مونت;პუერტო-მონტი;プエルトモント;蒙特港;푸에르토몬트; +city::3875024;Puente Alto;Puehnte-Al'to;Puente Alto;shang pu en te;Пуенте Алто;Пуэнте-Альто;პუენტე-ალტო;上普恩特; +city::3876685;Penaflor;Pen'jaflor;Penaflor;Peñaflor;Пеньяфлор; +city::3877918;Ovalle;OVL;Oval'e;Ovalje;Ovaljė;Ovalle;ao wa lie;Овалье;奧瓦列; +city::3877949;Osorno;Osorno;ZOS;Осорно; +city::3880107;Melipilla;Melipil'ja;Melipila;Melipilla;Mellipilla;mei li pi ya;mellipiya;Мелипилья;Мелипиља;梅利皮亞;멜리피야; +city::3882428;Los Angeles;Angeles;Angelopolis;Ciudad de Los Anjeles;LSQ;Los Anceles;Los Angeles;Los Anjeles;Los Ángeles;Los-Andzheles;Los-Ankheles;lo sxang heles;loseuanghelleseu;luo sang he lai si;lws ankhls;Лос-Анджелес;Лос-Анхелес;לאס אנדזשעלעס;לוס אנחלס;لوس آنخلس;โลสอังเฮเลส;ロス・アンヘレス;洛桑赫萊斯;로스앙헬레스; +city::3882434;Los Andes;Andes;Ciudad Los Andes;LOB;Los-And;Los-Andes;luo si an di si;Лос-Анд;Лос-Андес;洛斯安第斯; +city::3883167;Linares;Linares;ZLR;li na lei si;linaleseu;Линарес;利納雷斯;리나레스; +city::3884373;La Serena;LSC;La Serena;La-Serena;Laserena;Serena;la sai lei na;la syryna;la syryna chly;la-serena;laselena;lasrna;lasyryna;lh srnh;Ла Серена;Ла-Серена;Серена;Լա Սերենա;לה סרנה;لا سيرينا;لا سیرینا، چلی;لاسرنا;لاسیرینا;ლა-სერენა;ラ・セレナ;拉塞雷纳;라세레나; +city::3887127;Iquique;IQQ;Ikike;Ikikė;Iquique;akwyykyw;ikike;yi ji ke;Ικίκε;Ікіке;Икике;Իկիկե;איקיקה;اکوئیکیو;იკიკე;イキケ;伊基克;이키케; +city::3892870;Curico;Curico;Curicó;Kuriko;ku li ke;ku ri ko;kuliko;kuriko;kwrykw;kwrykw shyly;Курико;Куріко;كوريكو;کوریکو، شیلی;กูรีโก;クリコ;庫里科;쿠리코; +city::3893532;Coronel;Coronel;Koronel;Koronel';ke luo nei er;koroneru;kwrwnl;Коронел;Коронель;קאראנעל;كورونل;コロネル;科羅內爾; +city::3893629;Coquimbo;COW;Ciudad de Coquimbo;Coquimbo;Kokimbas;Kokimbo;Kukimpu;Mkoa wa Coquimbo;ke jin bo;koki m bo;kokimbo;kokinbo;kwkwymbw;Кокимбо;Кокімбо;كوكويمبو;โกกิมโบ;コキンボ;科金博;코킴보; +city::3893656;Copiapo;CPO;Copiapo;Copiapó;Kop'japo;Kopiapo;Kopijapo;Kopjapo;Kuopejapa;Kuopėjapa;Qhupiyapu;ke pi ya bo;kopiapo;kwbyabw;kwpyapw;kwpyapw shyly;Κοπιαπό;Копиапо;Копијапо;Копьяпо;Копіапо;كوبيابو;کوپیاپو;کوپیاپو، شیلی;კოპიაპო;コピアポ;科皮亞波;코피아포; +city::3893894;Concepcion;CCP;Ciudad de Concepcion;Ciudad ti Concepcion;Concepcion;Concepcioun;Concepción;Conceptio;Gorad Kanseps'jon;Koncepciono;Koncepsion;Konsep'sion;Konsepcion;Konseps'jon;Konseps'on;Konsepshon;Konsepsion;Konsepsjon;Konsepsjona;Konsepsjonas;Konsepsjons;Konsepsjuons;Konsepsyon;Koνσεπσιόν;kancepciyan;kang sai pu xi weng;kansepsiyan;kansepsiyana;knspsywn shyly;konsebsion;konsepSION;konsepsi'ona;konsepushion;kwnsbsywn tshyly;kwnsypshywn;kwnthbthywn tshyly;kxn sep si xxn;qwnspsywn;Κονσεπσιόν;Горад Кансепсьён;Конceпсіон;Консeпcион;Консепçион;Консепсион;Консепсьйон;Консепсьон;Консепшон;Կոնսեպսիոն;קאנסעפסיאן;קונספסיון;كونثبثيون، تشيلي;كونسبسيون ، تشيلى;کنسپسیون، شیلی;کونسیپشیون;ܩܘܢܣܦܣܝܘܢ;कन्सेप्सियान;कान्सेप्सियान्;कॉन्सेप्सिओन;கன்செப்சியான்;กอนเซปซีออน;კონსეფსიონი;ኮንሴፕሲዮን;コンセプシオン;康塞普西翁;康賽普西翁;콘셉시온;𐌺𐍉𐌽𐌸𐌴𐍀𐌸𐌹𐍉𐌽; +city::3895088;Chillan;YAI; +city::3895138;Chiguayante;Chiguajante;Chiguayante;chiguayante;chigwayante;qi gua yang te;shyghwanty;shygwanty shyly;Чигуаянте;Чигуајанте;טשיגואיאנטע;شيغوانتي;شیگوانتی، شیلی;チグアヤンテ;奇瓜揚特;치과얀테; +city::3897347;Calama;CJC;Calama;Kalama;ka la ma;kala ma;kalama;kallama;karama;Калама;كالاما;کالاما;กาลามา;カラマ;卡拉馬;칼라마; +city::3897774;Buin;Buin;Буин; +city::3899361;Arica;ARI;Areka;Arica;Arika;Arėka;a li ka;a lie ka;alika;arika;aryka;erika;Αρίκα;Арика;Аріка;Արիկա;אריקא;אריקה;آریکا;أريكا;एरिका;ਆਰੀਕਾ;არიკა;アリカ;阿列卡;阿里卡;아리카; +city::3899539;Antofagasta;ANF;Antafagasta;Antofagast;Antofagasta;Antuofagasta;an tuo fa jia si ta;antaphagasta;antofagasuta;antopagaseuta;antophagasta;antwfagasta;antwfaghasta;antwfajasta;antwfakwsta;entofagasta;xan to faka s ta;Αντοφαγάστα;Антафагаста;Антофагаста;אנטאפאגאסטא;אנטופגסטה;آنتوفاگاستا;أنتوفاغاستا;انتوفاجاستا;انتوفاکوستا;انتوفاگاستا;ܐܢܛܘܦܐܓܐܣܛܐ;अंतोफागास्ता;एंटोफ़गास्टा;অন্তফাগস্টা;อันโตฟากัสตา;ཨན་ཏོ་ཕ་ག་སི་ཏ;ანტოფაგასტა;ኣንቶፋጋስታ;アントファガスタ;安托法加斯塔;안토파가스타; +city::7281017;La Pintana;La Pintana;La-Pintana;la ping ta na;lapintana;Ла Пинтана;Ла-Пинтана;لا پینٹانا;拉平塔納;라핀타나; +city::7281020;Lo Prado;Lo Prado;Lo-Prado;lopeulado;luo pu la duo;Ло Прадо;Ло-Прадо;洛普拉多;로프라도; +city::2220957;Yaounde;Giaounte;Gorad Jaundeh;Jande;Jaunde;Jaundeo;Jaundė;Jaúnde;Jánde;YAO;Yaounde;Yaoundé;Yaunde;Yaundé;Yawunde;iaunde;ya wen de;ya'unde;yaunde;yavunte;yawndy;yaxunde;yaywndh;ye wen de;Γιαουντέ;Јаунде;Горад Яўндэ;Яунде;Յաունդե;יאונדה;יאונדע;ياوندي;یاؤندے;یائونده;یائوندێ;یاونڈی;याउंदे;ਯਾਊਂਦੇ;யாவுண்டே;ยาอุนเด;ཡོན་དྷི།;იაუნდე;ያዉንዴ;ヤウンデ;耶溫得;雅温得;야운데; +city::2221030;Yagoua;GXX;Jagua;Jágua;Yagoua;Yagua; +city::2221053;Wum;Wum; +city::2221504;Tiko;TKC;Tiko; +city::2222230;Sangmelima;Sangmelima;Sangmelina;Sangmélima;Сангмелима; +city::2223734;Nkoteng;Nkoteng; +city::2223763;Nkongsamba;NKS;Nkongsamba;Nkongsomba;Нконгсамба; +city::2224827;Ngaoundere;NGE;Ngaoundere;Ngaoundéré;Ngaundere;Ngaunderė;en gang dai lei;eung-gaundele;nugaundere;Нгаундере;نگاؤندیرے;ヌガウンデレ;恩冈代雷;응가운데레; +city::2225991;Mora;Mora;More;Море; +city::2226275;Mokolo;Mokolo; +city::2227402;Meiganga;Meiganda;Meiganga;Mejgange;Meïganga;Мейганге; +city::2227613;Mbouda;Mbouda; +city::2228079;Mbalmayo;Mbal'majo;Mbalmajo;Mbalmayo;Мбальмайо; +city::2228373;Maroua;MVR;Maroua;Marua;Marva;ma lu a;malua;marua;marwa;Μαρουά;Маруа;مارؤا;マルア;马鲁阿;마루아; +city::2229152;Loum;Loum;Lum;Лум; +city::2229411;Limbe;Limbe;Limbé;Limbė;VCC;Victoria;limbe;lin bei;rinbe;Лимбе;リンベ;林贝;림베; +city::2229748;Kumbo;Kumbo; +city::2229752;Kumba;Kumba;Kumboj;Кумбой; +city::2229761;Kribi;KBI;Kribi;Криби; +city::2229798;Kousseri;Fort Fureau;Fort-Foureau;Kousseri;Kousséri;Kusseri; +city::2230876;Guider;Gider;Guidder;Guider; +city::2231320;Garoua;GOU;Garoua;Garua;Garva;galua;garua;garwa;gharwa;jia lu a;Гаруа;غاروا;گارؤا;ガルア;加鲁阿;가루아; +city::2231504;Foumbot;Foumbat;Foumbot; +city::2231506;Foumban;FOM;Foumbam;Foumban;Fumban;feng ban;Фумбан;豐班; +city::2232239;Edea;Edea;Edeja;Edéa;Edėja;Ehdea;adya;ai dai a;edea;Édéa;Едеа;Эдеа;إديا;エデア;埃代阿; +city::2232283;Ebolowa;EBW;Ebolova;Ebolowa;Ébolowa; +city::2232444;Dschang;Chang;DSC;Dchang;Djang;Dschang;Dzhang;Tchang;jiang zhen;Джанг;姜鎮; +city::2232593;Douala;DLA;Douala;Doula;Dual;Duala;Dualao;Dóúala;Gorad Duala;Ntouala;dau'ala;do~uara;du a la;du xa la;dualla;dwala;Ντουάλα;Горад Дуала;Дуала;דואלה;دوالا;दौआला;ਦੌਆਲਾ;ดูอาลา;ドゥアラ;杜阿拉;두알라; +city::2234359;Bertoua;BTA;Bertoua;Bertua;Bertva;Gamane;bei er tu a;beleutua;beruto~ua;bytwa;Μπερτουά;Бертуа;بیتؤا;ベルトゥア;贝尔图阿;베르투아; +city::2234865;Bangangte;Bangangte;Bangangté;Bangante;Banganté; +city::2234974;Bamenda;BPC;Bamenda;Bamendy;ba men da;bamenda;bamynda;Баменда;Баменды;بامیندا;バメンダ;巴门达;바멘다; +city::2235029;Bali;BLC;Bali;Бали; +city::2235189;Bafoussam;BFX;Bafousam;Bafoussam;Bafusam;Bafusama;Bafusamas;Bafussama;Befoussam;ba fu sa mu;bafusamu;bafwsam;bapusam;Μπαφουσάμ;Бафусам;Бафуссама;بافؤسام;バフーサム;巴富薩姆;바푸삼; +city::2235194;Bafia;Bafia;Bafia Ngitakuba;Bafiā Ngitakuba; +city::2235196;Bafang;Bafang; +city::1279715;Rikaze;Gigatze;Hsi-ko-tzu;Hsi-ko-tzü;Jih-k'a-tse;Jih-k'e-tze;Jih-k'o-tse;Jih-k’a-tse;Jih-k’e-tze;Jih-k’o-tse;RKZ;Rikaze;Samdruptse;Samzhubze;Samzhubze District;Samzhubzê;Samzhubzê District;Sh'i-ka-tse;Shigadze;Shigatse;Shigatsé;Shigatze;Sh’i-ka-tse;Siketze;Xigaze;Xigazê;Zhikatse;ri ka ze;samudo~uputsu~e qu;sang zhu zi qu;ssangjujjeu gu;Шигадзе;サムドゥプツェ区;日喀则;桑珠孜区;쌍주쯔 구; +city::1279945;Jiuquan;Chiu-ch'uan;Chiu-ch'uan-hsien;Chiu-ch'uan-shih;Chiu-choan-chhi;Chiu-ch’üan;Chiu-ch’üan-hsien;Chiu-ch’üan-shih;Chiú-choân-chhī;Ciu-ciong;Ciū-ciòng;Czjucjuan';Jiuquan;Jiuquan Shi;Kiuchoan;Kiuchuan;Kiuchuan-hsien;Kiuchüan;Kiuchüan-hsien;Su-chou;Suchow;Suchzhou;Suzhou;Tiou-cchuean;Tsin-tsuan-tsiun;Tuu Tuyen;Tửu Tuyền;Zhjuchuan';jiu quan;jiu quan shi;juchwian si;jywchwan;su zhou;Ťiou-čchüan;Жючуань;Сучжоу;Цзюцюань;جیوچوآن;جیوچوان;肃州;酒泉;酒泉市;주취안 시; +city::1280037;Shache;QSZ;Shache;So-ch'e;So-ch'e-chen;So-ch'e-hsien;So-ch'e-shih;So-ch’e;So-ch’e-chen;So-ch’e-hsien;So-ch’e-shih;Yangi-shahr;Yarkand;Yarkand New City;Yarkand Yangi-shahr;Yarkant;Yarkend;Yarkent;Yeken;Yəkən;Якән;يەكەن; +city::1280281;Qamdo;BPX;Ch'a-mu-to;Ch'ang-tu;Ch'ang-tu-hsien;Ch'ang-tu-tsung;Chamdo;Chamudo;Changdu;Chhamdo;Ch’a-mu-to;Ch’ang-tu;Ch’ang-tu-hsien;Ch’ang-tu-tsung;Qamdo;chang dou;昌都; +city::1280737;Lhasa;LXA;La-sa-shih;Lasa;Lasao;Lassa;Lhas;Lhasa;Lhasa Shi;Lhasa-chhi;Lhasa-chhī;Lhasa-su;Lhasa-sṳ;Lhassa;Lhasza;Lhásza;Lkhas;Lkhasa;Lkhasa shaary;Lkhasae;Lkhase;Lása;l'hasa;la sa;la sa shi;laca;lasa;lassa si;lhasa;lhsh;rasa;rasa shi;Λάσα;Ласа;Лхас;Лхасæ;Лхаса;Лхаса балһсн;Лхаса шаары;Лхасе;Һаса;להסה;لاسا;لاسا شەھىرى;لهاسا;لہاسا;ल्हासा;লাসা;ਲਾਸਾ;ଲାସା;லாசா;ลาซา;ལ་ས།;ལྷ་ས།;ლჰასა;ラサ;ラサ市;拉萨;拉萨市;拉薩;拉薩市;라사;라싸 시; +city::1280757;Laojunmiao;Lao-chun-miao;Lao-chün-miao;Laojunmiao;Laojunmiao Zhen;Yu-men-shih;Yu-men-yu-k'uang-ch'u;Yumen;Yü-men-shih;Yü-men-yu-k’uang-ch’ü;lao jun miao;lao jun miao zhen;yu men;玉门;老君庙;老君庙镇; +city::1280849;Kashgar;K'a-shih;K'o-shih;KHG;Kachgar;Kaixgar;Kaschgar;Kasgar;Kasgara;Kasgaras;Kash;Kashgar;Kashgar Kona Shahr;Kashgar Kone Shahr;Kashi;Kashi Shi;Kashkar;Kasjgar;Kaszgar;Kaxgar;Kaŝgar;Kaşgar;Kašgar;Kašgara;Kašgaras;Kona Shahr;K̩əxk̩ər;K’a-shih;K’o-shih;Qashqar;Qasqar;Qaşqar;Qeshqer;Shu-fu;Su-fu;ka shen;kasagara;kaseu si;kasgara;kashghr;kashqar;kashugaru;kashugaru shi;ke shen shi;Кашгар;Кашкар;Қәшқәр;Կաշգար;קאשגאר;قەشقەر;كاشغر;کاشغر;کاشقار;काश्गर;কাশগর;କାଶଗର;カシュガル;カシュガル市;喀什;喀什市;카스 시; +city::1280957;Jiayuguan;Ch'ia-hsu-kuan;Chia-yu-kuan;Chia-yü-kuan;Chiayukwan;Ch’ia-hsu-kuan;Czjajujguan';Ga-uk-guang;Gia Duc Quan;Gia Dục Quan;Gă-ṳ̆k-guăng;JGN;Jiayuguan;Jiayuguan Ceety;Jiayuguan City;Jiayuguan Lakanbalen;Ka-iok-koan-chhi;Ka-io̍k-koan-chhī;Kia-yu-kuan;Kiayukwan;Tia-jue-kuan;Tseyasyuyguan';Tseyasyuyguan’;Yumen;jawigwan si;jia yu guan shi;jyaywgwan;Ťia-jü-kuan;Цзяюйгуань;Ցզյայույգուան;جائیوگوان شہر;جیایوگوآن;嘉峪关市;嘉峪関市;嘉峪關市;자위관 시; +city::1281019;Hotan;Chotan;Ciudad de Jotan;Ciudad de Jotán;HTN;Hetian;Hetianshi Gujiang Bage Jiedao;Ho-t'ien;Ho-t'ien-chen;Ho-tien-hsien;Ho-t’ien;Ho-t’ien-chen;Hotan;Hotanas;Hoten;Hotən;Khotan;Xotan;Xoten;he tian;he tian shi;he tian shi gu jiang ba ge jie dao;heotyen si;hotan shi;khotana;khtn;Хотан;Хотән;ختن;خوتەن;خوتەن شەھىرى;ख़ोतान;ホータン市;和田;和田市;和田市古江巴格街道;허톈 시; +city::1281368;Deqen;Dechen;Deqing;de qing;Дечен;བདེ་ཆེན;德庆; +city::1529102;UEruemqi;Dikhua;OEremce;Ouroumtchi;Ouroumtsi;Ti-hua;Ti-hua-ch'eng;Ti-hua-ch’eng;Ti-hua-hsien;Ti-hua-shih;Tihwa;Tihwafu;Tikhua;Tikhva;UEruemchi-su;UEruemcsi;UEruemqi;UEruemqi-chhi;URC;Urumchi;Urumci;Urumcio;Urumcis;Urumczi;Urumptsi;Urumqi;Urumqi Shi;Urumtschi;Urumtsi;Urumutsi;Urumçi;Urumĉio;Urumči;Urumčis;Urunchi;Wu-lu-mu-ch'i;Wu-lu-mu-ch'i-shih;Wu-lu-mu-ch’i;Wu-lu-mu-ch’i-shih;Wulumuqi;Wurumch'ih;Wurumch’ih;arwmchy;awrwmchy;awrwmtshy;ulumuchi si;urumaci;urumaki;urumchi;urumucci;urumuchi;urumuchi shi;wu lu mu qi;wu lu mu qi shi;xu rum chi;Öremçe;Ürümchi;Ürümchi-sṳ;Ürümcsi;Ürümqi;Ürümqi Shi;Ürümqi-chhī;Ουρούμτσι;Урумчи;Урумчі;Урумћи;Үрімжі;Үрүмчи;Үрүмчү;Өрөмч хот;Ուրումչի;אורומצי;أورومتشي;ئۈرۈمچى;ئۈرۈمچى شەھىرى;ئۈرۈمچی;ارومچی;اورومچی;उरुमची;उरुम्छी;ਉਰੂਮਕੀ;உருமுச்சி;อุรุมชี;ཨུ་རུམ་ཆི་གྲོང་ཁྱེར།;ウルムチ;ウルムチ市;乌鲁木齐;乌鲁木齐市;烏魯木齊;烏魯木齊市;우루무치 시; +city::1529114;Turpan;Gorad Turfan;Lukchun;T'u-lu-fan;T'u-lu-fan-chen;T'u-lu-fan-hsien;T'urfang;TLQ;Tourfan;Tufan;Tulupan;Tulupan Xian;Turfan;Turfán;Turpan;T’u-lu-fan;T’u-lu-fan-chen;T’u-lu-fan-hsien;T’urfang;torufan shi;tu lu fan;tu lu fan shi;tu lu fan xian;tulupan si;Горад Турфан;Турпан;Турфан;تۇرپان;トルファン市;吐鲁番;吐鲁番县;吐鲁番市;투루판 시; +city::1529195;Shihezi;SHF;Shih-ho-tzu;Shih-yen-tzu;Shihezi;Shihezi Xiang;Shikhedze;Shikhedzy;Shikhehczy;Shixenze;Xihənzə;seuheojeu;shi he zi;shi he zi shi;shi he zi xiang;Шихэцзы;Шихәнзә;شىخەنزە;شىخەنزە شەھرى;شىخەنزە شەھىرى;石河子;石河子乡;石河子市;스허즈; +city::1529363;Kuqa;K'u-ch'e;K'u-ch'e-chen;K'u-ch'e-hsien;KCA;Kocha;Koutcha;Kucha;Kuchar;Kuche;Kuche Xian;Kuchel;Kuchi;Kuchu;Kuga;Kuqa;K’u-ch’e;K’u-ch’e-chen;K’u-ch’e-hsien;ku che;ku che xian;Куча;كۇچا;库车;库车县; +city::1529376;Korla;K'o-erh-lo;K'u-erh-le;K'u-erh-lo;K'u-erh-lo-chen;K'u-erh-lo-hsien;K'u-erh-lo-she-chih-chu;KRL;Khorol khot;Koria;Korla;Korla Shi;Kourla;Ku'erle;Ku'erle Shi;Kuerhlei;Kuerhli;Kuerle;Kuriya;Kurla;Kurlya;Ku’erle;Ku’erle Shi;K’o-erh-lo;K’u-erh-le;K’u-erh-lo;K’u-erh-lo-chen;K’u-erh-lo-hsien;K’u-erh-lo-she-chih-chü;Sayibage;korura;korura shi;ku er lei;ku er lei shi;kueolleo si;kwrla;sa yi ba ge;Корла;Корла балһсн;Хорол хот;كورلا;كورلا شەھىرى;کورلا;コルラ;コルラ市;库尔勒;库尔勒市;萨依巴格;쿠얼러 시; +city::1529484;Hami;Chamil;HMI;Ha-mi-ch'eng-chen;Ha-mi-chen;Ha-mi-ch’eng-chen;Ha-mi-hsien;Ha-mi-shih;Hami;Kamil;Kha-mi;Khami;Khamil;Komul;Koumoul;Kumul;K̩umul;Qomul;Qumul;ha mi de qu;ha mi shi;hami;kumuru shi;Хами;Қумул;قۇمۇل;قۇمۇل شەھىرى;クムル市;哈密地区;哈密市;하미; +city::1529569;Changji;Ch'ang-chi;Ch'ang-chi-chen;Ch'ang-chi-hsien;Chanczi;Changji;Changji Shi;Changki;Chanki;Chantszi;Ch’ang-chi;Ch’ang-chi-chen;Ch’ang-chi-hsien;Ning-pien-i;Sandzhi;Sanji;Yan'an Beilu;Yan’an Beilu;chang ji shi;sanjy;yan an bei lu;Санҗи;Чанцзи;سانجى;延安北路;昌吉市; +city::1529626;Baijiantan;Baijiantan;Baijiantan Zhen;Pai-chien-t'an;Pai-chien-t’an;bai jian tan;bai jian tan zhen;白碱滩;白碱滩镇; +city::1529641;Aral;A-la-erh;Ala'er;Ala'er Shi;Ala’er;Ala’er Shi;Aral;Aral'skoe;a la er;a la er shi;yaral;Арал;Аральское;ئارال;阿拉尔;阿拉尔市; +city::1529651;Altay;A-erh-t'ai;A-erh-t’ai;A-le-t'ai;A-le-t’ai;A-lo-t'ai;A-lo-t'ai-chen;A-lo-t'ai-hsien;A-lo-t’ai;A-lo-t’ai-chen;A-lo-t’ai-hsien;A-shan;AAT;Aletai;Aletai Zhen;Altai;Altai-Sharasume;Altaj;Altajskaja;Altay;Ch'eng-hua;Ch'eng-hua-hsien;Ch'eng-hua-ssu;Cheng-hua-sze;Chenghwa;Chenghwasze;Chenkhua;Ch’eng-hua;Ch’eng-hua-hsien;Ch’eng-hua-ssu;Shara-Sumu;Sharasume;T'u-lo-t'a;Tulta;T’u-lo-t’a;a lei tai;a lei tai shi;a lei tai zhen;aleotai;altay qalasy;yaltay;yaltay shەھyry;Ālètài;Алтай;Алтайская;ئالتاي;ئالتاي شەھىرى;التاي قالاسى;阿勒泰;阿勒泰市;阿勒泰镇;아러타이; +city::1529660;Aksu;A-k'o-su;A-k'o-su-chen;A-k'o-su-hsien;A-k'o-su-hsin-ch'eng;A-k’o-su;A-k’o-su-chen;A-k’o-su-hsien;A-k’o-su-hsin-ch’eng;AKU;Ak Su Yangi Shahr;Akesu;Akesu Shi;Akoso;Aksou;Aksu;Aksu New City;Ak̩su;Aqsu;Aqsu New City;Aqsu Yangi Shahr;Ciudad de Aksu;New Aksu;Yangi-shahr;a ke su;a ke su shi;akeossu si;aksw snkyang;aksw zynjyang;akusu;akusu shi;aqsw;Аксу;Ақсу;آکسو، سنکیانگ;أقسو;ئاقسۇ;ئاقسۇ شەھىرى;اکسو، زینجیانگ;アクス;アクス市;阿克苏;阿克苏市;아커쑤 시; +city::1783621;Zunyi;Chun-gi-chhi;Chun-gī-chhī;Cong-ngie;Cuenji;Cun-i;Czun'i;Cŏng-ngiê;Dzuni;Gunji;Tsun-i;Tsun-i-ch'eng;Tsun-i-ch’eng;Tsun-i-hsien;Tsun-i-shih;Tsunyi;Tsunyi-hsien;Tuan Nghia;Tuân Nghĩa;ZYI;Zunyi;jjun-i si;zun yi;zun yi shi;zwnyay;zwnyy;zwnyyy;Ĝunji;Цзуньи;Цуенји;زونئی;زونیئی;زونیای;遵义市;遵義;遵義市;쭌이 시; +city::1783633;Zoucheng;Chou-hsien;Czouchehn;Czouchen;Trau Thanh;Trâu Thành;Tsou;Tsou-hsien;Tsowhsien;Zoucheng;Zouxian;jjeoucheong si;zou cheng shi;Цзоучен;Цзоучэн;邹城市;鄒城市;쩌우청 시; +city::1783683;Yanjiang;Czyjan;Tszoyan;Tszöyan;Tzeyang;Tzeyang-hsien;Tzu-yang;Tzu-yang-hsien;Yanjiang;Ziyang;yan jiang;Цзыян;雁江; +city::1783745;Zigong;C-kung;Ceu-gong;Chu-kong-chhi;Chū-kòng-chhī;Cigung;Czygun;Cê̤ṳ-góng;Dzigongas;Dzugun;Tu Cong;Tzekung;Tzeliuching;Tzeliutsing;Tzu-kung;Tzu-kung-shih;Tzu-liu-ching;Tzuliutsing;Tự Cống;ZKL;Zigong;jjeugung si;zi gong;zi gong shi;zygang;zygwng;zyjwnj;Дзъгун;Цзыгун;Цигунг;زيجونج;زیگانگ;زیگونگ;自貢;自貢市;自贡;自贡市;쯔궁 시; +city::1783763;Zhuzhou;Chu Chau;Chu Châu;Chu-chiu-chhi;Chu-chiu-chhī;Chu-chou;Chu-chou-shih;Chu-chu-su;Chu-chû-sṳ;Chuchow;Chzhuchzhou;Cu-cou;Cyu Cou;DHU;Dzhudzhou;Dzudzou;Džudžou;Gugou;Jianning;Tu-ciu;Tṳ̆-ciŭ;Zhutsjou;Zhuzhou;Zhuzhou Shi;jujeou si;zhanzhw;zhu zhou;zhu zhou shi;zhwzhww;Çyu Cou;Ču-čou;Ĝuĝou;Џуџоу;Джуджоу;Чжучжоу;ژانژو;ژوژوو;ཞུས་ཀྲོའུ།;株洲;株洲市;주저우 시; +city::1783873;Zhumadian;Chu-ma-tien;Chu-ma-tien-chen;Chu-ma-tien-shih;Chzhumadjan';Hsin-chuang;Zhumadian;zhu ma dian shi;Чжумадянь;驻马店市; +city::1783920;Zhujiajiao;Ching-t'ing-chiang;Ching-t’ing-chiang;Chu-chia-chiao;Chu-chieh-ko;Chzhuczjaczjao;Zhujiajiao;Zhujiajiao Zhen;zhu jia jiao;zhu jia jiao zhen;Чжуцзяцзяо;朱家角;朱家角镇; +city::1783934;Shangqiu;Chu-chi;Chu-kia-tsi;Chu-sun-chi;Sang-cchiou;Shancju;Shang-ch'iu;Shang-ch'iu-shih;Shang-ch’iu;Shang-ch’iu-shih;Shangqiu;Siong-khiu-chhi;Siong-khiu-chhī;Siong-kiu;Siŏng-kiŭ;Sjangqiu;Thuong Khau;Thương Khâu;Zhuji;sangchu si;shang qiu;shang qiu shi;shangchyw;shanghkyw;Šang-čchiou;Шанцю;شانغكيو;شانگچیو;ሻንግጭዩ;商丘;商丘市;상추 시; +city::1783940;Zhuji;Chu-chi;Chu-chi-hsien;Chu-chi-hsien-ch'eng;Chu-chi-hsien-ch’eng;Chuki;Chukihsien;Zhuji;Zhuji Shi;zhu ji;zhu ji shi;诸暨;诸暨市; +city::1783988;Mizhou;Chu-ch'eng;Chu-ch’eng;Chu-hsien;Mizhou;mi zhou;密州; +city::1784055;Zhuanghe;Chuang-ho;Chuang-ho-chen;Chuang-ho-chieh;Chuang-ho-hsien;Chwangho;Zhuanghe; +city::1784130;Zhoukou;Chiu-khau-chhi;Chiu-kháu-chhī;Chou-chia-k'ou;Chou-chia-k’ou;Chou-k'ou;Chou-k'ou-chen;Chou-k’ou;Chou-k’ou-chen;Chow-kia-kow;Chu Khau;Chu Khẩu;Chzhouko;Chzhoukou;Ciu-kau;Ciŭ-kāu;Cou-kchou;Dzoukou;Juko shehiri;Shang-shui-hsien;Tsjoukou;Zhoukou;Zhoukouzhen;jeoukeou si;zhou kou;zhou kou shi;zhwkw;zhwwkww;Čou-kchou;Џоукоу;Чжоуко;Чжоукоу;زهوكو;ژووکوو;周口;周口市;저우커우 시; +city::1784178;Zhoucun;Chou-lin-chen;Chou-ts'un;Chou-ts'un-chen;Chou-ts’un;Chou-ts’un-chen;Chowtsun;Zhoucun; +city::1784185;Yuxi;Giok-khe-chhi;Gio̍k-khe-chhī;Hongta;Hongta Qu;Hsin-hsing;Jue-si;Jujsi;Jü-si;Ngoc Khe;Nguk-ka;Ngṳ̆k-kă̤;Ngọc Khê;Sinhing;Sinhingchow;Yu-ch'i;Yu-ch'i-hsien;Yu-hsi;Yuki;Yuki-hsien;Yuxi;Yü-ch’i;Yü-ch’i-hsien;Yü-hsi;Yüki;Yüki-hsien;Zhoucheng;hong ta;hong ta qu;wisi si;ygzy;yu si;yu xi;yu xi shi;Юйси;یگزی;ยู่ซี;玉渓市;玉溪;玉溪市;红塔;红塔区;위시 시; +city::1784253;Zhongxing;Chung-hsing;Chung-hsing-chen;Chunghing;Chunking;Siyang;Ssu-yang;Ssu-yang-hsien;Szeyang;Zhongxing; +city::1784310;Zhongshu;Chung-shu-chen;Chzhunshu;Kuang-hsi;Kwangsi-hsien;Kwangsichow;Lu-hsi;Lu-hsi-hsien;Lusi-hsien;Luxi;Zhongshu;zhong shu;Чжуншу;中枢; +city::1784553;Zhicheng;Ch'ang-hsing;Ch'ang-hsing-hsien;Ch'ang-hsing-hsien-ch'eng;Changhing;Changhing-hsien;Changxing Xian;Ch’ang-hsing;Ch’ang-hsing-hsien;Ch’ang-hsing-hsien-ch’eng;Zhicheng;Zhicheng Zhen;zhang xing xian;zhi cheng;zhi cheng zhen;长兴县;雉城;雉城镇; +city::1784554;Zhicheng;Chi-Kiang;Chih-ch'eng;Chih-chiang;Chih-chiang-chen;Chih-chiang-hsien;Chih-ch’eng;Chihkiang;Chihkianghsien;Zhicheng;Zhicheng Zhen;zhi cheng;zhi cheng zhen;枝城;枝城镇; +city::1784580;Zhenzhou;I-chang;I-cheng;I-cheng-hsien;I-tcheng;Icheng Ku;Yangtzehsien;Yicheng;Yizheng Shi;Zhenzhou;Zhenzhou Zhen;yi zheng shi;zhen zhou;zhen zhou zhen;仪征市;真州;真州镇; +city::1784642;Zhenjiang;Chen-chiang;Chen-chiang-ch'eng;Chen-chiang-ch’eng;Chen-chiang-hsien;Chen-chiang-shih;Chenkiang;Chinkiang;Chinkiang Fu;Chinking;Tan-t'a;Tan-t'u;Tan-t’a;Tan-t’u;Tantuhsien;ZUJ;Zhenjiang;Zhenjiang Shi;zhen jiang;zhen jiang shi;جېنجياڭ شەھىرى;鎮江;镇江;镇江市; +city::1784647;Zhaobaoshan;Chen-hai;Chen-hai-hsien;Chen-hai-hsien-ch'eng;Chen-hai-hsien-ch’eng;Chinhai;Zhaobaoshan;Zhaobaoshan Jiedao;Zhenhai;Zhenhai Qu;zhao bao shan;zhao bao shan jie dao;zhen hai;zhen hai qu;招宝山;招宝山街道;镇海;镇海区; +city::1784658;Zhengzhou;CGO;Cencou;Ceng-cou;Cengcou;Cheng;Cheng-chou;Cheng-chou-shih;Cheng-hsien;Chengchow;Chhiang-chu-su;Chhiáng-chû-sṳ;Chzhehnchzhou;Chzhenchzhou;Cjencjou;Csengcsou;Cwngcouh;Czengczou;Dang-ciu;Dzendzou;Dzengdzou;Dzhundzhou;Dâng-ciŭ;Džendžou;Džengdžou;Genggouo;Trinh Chau;Trịnh Châu;Tsentsoou;Tēⁿ-chiu-chhī;Zengzou;Zhengtsjou;Zhengzhou;Zhengzhou Shi;canaco;cancau;ceing cow;cencavu;jeongjeou si;jhengajho'u;tshnghtshw;zheng zhou;zheng zhou shi;zhngzhw;zhyngzhw;Çengçou;Çjençjou;Čeng-čou;Ĝengĝoŭo;Žengžou;Τσεντσόου;Џенгџоу;Джънджоу;Жөнжоу;Чженчжоу;Чжэнчжоу;Чжэнчжоў;تشنغتشو;جېڭجۇ شەھىرى;ژنگژو;ژینگژو;चंचौ;झेंगझोऊ;ਚੰਙਚੋ;செங்சவு;เจิ้งโจว;ကျင့်ကျိုးမြို့;郑州;郑州市;鄭州;鄭州市;정저우 시; +city::1784820;Xinghua;Hsin-hsing;Hsing-hua;Hsing-hua-ch'eng;Hsing-hua-ch’eng;Hsing-hua-hsien;Sinkhua;Xinghua;Xinxing;Zhaoyang;Синхуа; +city::1784841;Zhaotong;Cao-tchung;Chao-t'ung;Chao-t'ung-hsien;Chao-t’ung;Chao-t’ung-hsien;Chiau-thong-chhi;Chiau-thong-chhī;Chieu Thong;Chiêu Thông;Chzhaotun;Cieu-tung;Ciĕu-tŭng;En-an;En-an-hsien;ZAT;Zhaotong;cea thng;jaotung si;zhao tong;zhao tong shi;zhawtwng;Čao-tchung;Чжаотун;ژاوتونگ;เจาทง;昭通;昭通市;자오퉁 시; +city::1784853;Zhaoqing;Cao-cching;Chao-ch'ing;Chao-ch'ing-chen;Chao-chou;Chao-ch’ing;Chao-ch’ing-chen;Chao-king;Chzhaocin;Dieu-keng;Diêu-kéng;Dzaocing;Kao-yao;Kao-yao-hsien;Koyiu;Koyiu-hsien;Koynihsien;Sau-khin-su;Sau-khin-sṳ;Shiuhing;Shiuhingfu;Tiau-kheng-chhi;Tiāu-khèng-chhī;Trieu Khanh;Triệu Khánh;Zhaoqing;gʼwzyng;jaoching si;zhao qing;zhao qing shi;zhawchng;zhawchyng;zhawkyng;Čao-čching;Џаоћинг;Чжаоцин;גאוצינג;ژاؤچینگ;ژاوچنگ;ژاوکینگ;肇庆;肇庆市;肇慶;肇慶市;자오칭 시; +city::1784929;Zhaogezhuang;Chao-chia-chuang;Chao-ko-chuang;Chaokochwang;Zhaogezhuang;zhao ge zhuang;赵各庄; +city::1784953;Luofeng;Chao-yuan;Chao-yuan-hsien;Chao-yüan;Chao-yüan-hsien;Luofeng;Zhaocheng;Zhaoyuan;Zhaoyuan Shi;luo feng;zhao yuan shi;招远市;罗峰; +city::1784990;Zhanjiang;Chan-chiang;Chan-chiang-shih;Chankiang;Chzhan'czjan;Fort Bayard;Hsi-ying;Kwangchow;Kwangchowan;Kwangchowwan;Tram Giang;Trạm Giang;Tsamkong;ZHA;Zhanjiang;Zhanjiang Shi;zhan jiang;zhan jiang shi;Чжаньцзян;جاڭجياڭ شەھىرى;湛江;湛江市; +city::1785018;Zhangzhou;Cang-cou;Chang-chou;Chang-chou-shih;Changchow;Changchowfu;Chiang-chiu-chhi;Chiang-chiu-chhī;Chong-chu-su;Chuong Chau;Chzhanchzhou;Chông-chû-sṳ;Chương Châu;Ciong-ciu;Ciŏng-ciŭ;Dzangdzou;Dzhandzhou;Gangou;Jyangju shehiri;Lung-ch'i;Lung-ch'i-hsien-ch'eng;Lung-ch’i;Lung-ch’i-hsien-ch’eng;Lungki;Lunki;Zhangtsjou;Zhangzhou;jangjaw;jangjeou si;shou zhou shi;zhang zhou;zhang zhou shi;zhangzhw;Čang-čou;Ĝanĝou;Џангџоу;Джанджоу;Чжанчжоу;جانگجاو;ژانگژو;ショウ州市;漳州;漳州市;장저우 시; +city::1785036;Zhangye;Cang-jie;Chang-i;Chang-yeh;Chang-yeh-hsien;Chang-yeh-shih;Changyen;Chzhanue;Diong-ik;Diŏng-ĭk;Dzhanie;Ganzhou;Kan-chou;Kanchow;Tiuⁿ-e̍k-chhī;Truong Dich;Trương Dịch;Zhangye;Zhangye Shi;Zhanue;jang-ye si;zhang ye;zhang ye shi;Čang-jie;Джание;Жанъе;Чжанъе;Չժանիե;ژانگیے;ژانگیۓ;张掖;张掖市;張掖;張掖市;장예 시; +city::1785286;Zibo;C-po;Chang-chou-shih;Chang-tien;Chang-tien-shih;Chu-phok-chhi;Chu-phok-chhī;Cu-bauk;Czybo;Cṳ̆-báuk;Dzubo;Truy Bac;Truy Bác;Tzu-po;Zhangdian;Zibo;jjeubo si;shi bo shi;zaybw;zi bo;zi bo shi;zibo;zybw;Дзъбо;Цзыбо;زایبو;زىبو شەھىرى;زيبو;زیبو;ਜ਼ੀਬੋ;シ博市;淄博;淄博市;쯔보 시; +city::1785294;Anyang;AYN;Ahn Yang;An Duong;An Dương;An'jan;An'jang;An-jang;An-yang-hsien;Anjan;Anjang;Anjangas;Anyang;Chang-te;Changte-fu;Changteh;Changten;Dengtalu;Zhangde;an yang shi;an-yang si;anyangh;deng ta lu;Аньян;Аньянг;Анян;Анјанг;انيانغ;അൻയാങ്;安阳市;安陽市;灯塔路;안양 시; +city::1785453;Zaozhuang;Cao-cuang;Cao-čuang;Cho-chng-chhi;Chó-chng-chhī;Co-cong;Czaochzhuan;Cō̤-cŏng;I-hsien;Tao Trang;Tsao-chuang;Tsao-chuang-shih;Tsaochwang;Tssaochwang;Tảo Trang;Zaozhuang;jjaojwang si;zao zhuang;zao zhuang shi;zawzhwang;Цзаочжуан;زاوژوانگ;枣庄市;棗荘市;棗莊;짜오좡 시; +city::1785462;Zaoyang;Tsao-yang;Tsao-yang-hsien;Zaoyang; +city::1785545;Yuyao;Ju-kao;Jujao;YYP;Yuyao;yu yao;Юяо;余姚; +city::1785566;Yingchuan;Yingchuan;Yu;Yu-hsien;Yuchow;Yuxian;Yuzhou;Yü;Yü-hsien;ying chuan;颍川; +city::1785572;Yuxia;Yu-hsia;Yu-hsia-li;Yuxia;Yuxia Zhen;Yü-hsia;Yü-hsia-li;yu xia;yu xia zhen;余下;余下镇; +city::1785623;Kunshan;Con Son;Côn Sơn;K'un-shan-ch'eng;K'un-shan-hsien;KVN;Kan-shan;Kun'shan';Kunsanas;Kunshan;Kunshan Shi;Kunšanas;K’un-shan-ch’eng;K’un-shan-hsien;Yushan;Yushan Zhen;kun shan;kun shan shi;kunsan si;kwnshan;yu shan;yu shan zhen;Куншан;Куньшань;کونشان;崑山;崑山市;昆山;昆山市;玉山;玉山镇;쿤산 시; +city::1785655;Yunyang;Chiu-nan-chao;Jiunanzhao;Nan-chao;Nan-chao Old City;Nan-chao-chiu-chiu;Nan-chao-hsien;Nan-chao-ku-chih;Yunyang;yun yang;云阳; +city::1785698;Yunmeng Chengguanzhen;Yun-meng-hsien;Yunmeng;Yunmeng Chengguanzhen;Yün-meng-hsien;yun meng cheng guan zhen;云梦城关镇; +city::1785710;Jinghong;Ch'e-li;Ch'e-li-hsien;Chianghung;Ching-hung;Ching-te;Chiu-lung-chiang;Ch’e-li;Ch’e-li-hsien;JHG;Jinghong;Kenghung;Kianghung;Kinlungkiang;Kiulungkiang;Kiulunkiang;Kuilung-kiang;Pan-na-ching-hung;Pan-na-yun-ching-hung;Pan-na-yün-ching-hung;Yun-ching-hung;Yun-ching-hung-chen;Yunjinghong;Yün-ching-hung;Yün-ching-hung-chen;cheiyng rung;jing hong;jing hong shi;เชียงรุ้ง;景洪;景洪市; +city::1785716;Pizhou;P'ei-hsien;Peixian;Pizhou;P’ei-hsien;Yun-ho;Yun-ho-ch'e-chan;Yun-ho-chen;Yunhe;Yün-ho;Yün-ho-chen;Yün-ho-ch’e-chan; +city::1785725;Yunfu;Hun-phu-chhi;Hung-pu;Hùng-pù;Hûn-phû-chhī;Juen-fu;Jun'fu;Jün-fu;Tung-an;Van Phu;Vân Phù;Wanfow;Yun-ch'eng;Yun-ch'eng-chen;Yun-fou;Yun-fou-hsien;Yunfu;Yün-ch’eng;Yün-ch’eng-chen;Yün-fou;Yün-fou-hsien;winpu si;yanfw;ynfw;yun fu;yun fu shi;ywnfw;Юньфу;یانفو;ینفو;یونفو;云浮;云浮市;雲浮;雲浮市;윈푸 시; +city::1785738;Yuncheng;An-i-hsien;Anyi;Anyihsien;Juen-ccheng;Jun'chehn;Juncheng;Jün-čcheng;Ong-siang;Van Thanh;Vận Thành;YCU;Yun'chen;Yun-ch'eng-chen;Yuncheng;Yuncheng Shi;Yun’chen;Yün-ch’eng-chen;an yi;wincheong si;yangchng;yun cheng;yun cheng shi;ywnchyng;Ông-siàng;Ūn-siâⁿ-chhī;Јунченг;Юньчэн;یانگچنگ;یونچینگ;安邑;运城;运城市;運城;運城市;윈청 시; +city::1785777;Yulinshi;Du Lam;Du Lâm;Jiu-lim-chhi;Jiû-lîm-chhī;Jue-lin;Jujlin';Jü-lin;U-ling;UYN;Yu-lin-hsien;Yulin;Yulinfu;Yulinshi;Yü-lin-hsien;wilin si;yu lin;yu lin shi;ywln shangzy;Юйлинь;یولن، شانگزی;Ṳ̀-lìng;楡林;楡林市;榆林;榆林市;위린 시; +city::1785781;Yulin;Giok-lim-chhi;Gio̍k-lîm-chhī;Jue-lin;Jujlin';Jü-lin;Ngiuk-lim-su;Ngiu̍k-lìm-sṳ;Ngoc Lam;Nguk-ling;Ngṳ̆k-lìng;Ngọc Lâm;Watlam;Watlam-hsien;Yo-ling;Yoglinz;Yu-lin-chen;Yu-lin-hsien;Yulin;Yü-lin-chen;Yü-lin-hsien;wilin si;yu lin;yu lin shi;ywlayn;ywln;ywln gwangshy;Юйлинь;یولاین;یولن;یولن، گوانگشی;玉林;玉林市;위린 시; +city::1785805;Wulingyuan;Wulingyuan;Wulingyuan Qu;Yujiazui;wu ling yuan;wu ling yuan qu;武陵源;武陵源区; +city::1785964;Yudong;Baxian;Chi-chia-t'o;Chi-chia-t’o;Jujdun;Pa;Pa-hsien;Yu-tung-ch'i;Yu-tung-chen;Yu-tung-hsi;Yudong;Yudongxi;Yü-tung-chen;Yü-tung-ch’i;Yü-tung-hsi;Юйдун; +city::1785974;Yuci;Yu-tz'u;Yu-tz'u-hsien;Yu-tz'u-shih;Yuci;Yuci Qu;Yutzehsien;Yü-tz’u;Yü-tz’u-hsien;Yü-tz’u-shih;Yützehsien;yu ci;yu ci qu;榆次;榆次区; +city::1785980;Yucheng;Chiu-yu-t'ai;Chiu-yü-t’ai;Hitaihsien;Jujchehn;Yu-t'ai;Yu-t'ai-hsien;Yucheng;Yü-t’ai;Yü-t’ai-hsien;Юйчэн; +city::1786060;Yuanping;Yuanping;Yuanping Shi;yuan ping;yuan ping shi;原平;原平市; +city::1786067;Qianjiang;Ch'ien-chiang;Ch'ien-chiang-hsien;Chien-kou;Ch’ien-chiang;Ch’ien-chiang-hsien;JQJ;Juan'lin';Qianjiang;Qiánjiāng;Tsienkiang;Yuanlin;Yuanlin Jiedao;yuan lin;yuan lin jie dao;Юаньлинь;园林;园林街道; +city::1786112;Heyuan;Che-juean;Che-jüan;Ha Nguyen;Heyuan;Ho-goan-chhi;Ho-ngien-su;Ho-yuan;Ho-yuan-hsien;Ho-yüan;Ho-yüan-hsien;Hoyun;Hoyunhsien;Hoyün;Hà Nguyên;Hò-ngièn-sṳ;Hô-goân-chhī;Khehjuan';O-nguong;Yuancheng;he yuan;he yuan shi;heowian si;hywan;Ò̤-nguòng;Хэюань;هیوان;ہی یوآن;ہیئوان;河源;河源市;허위안 시; +city::1786357;Yongfeng;Shuangfeng;Yongfeng;Yung-feng;Yung-feng-chen;Yung-feng-shih;Yungfengsze;yong feng;永丰; +city::1786378;Yongchuan;Jungchunghsien;Yongchang;Yongchuan;Yung-ch'uan;Yung-ch'uan-hsien;Yung-ch’uan;Yung-ch’uan-hsien;Yungchwan;Yungchwan-hsien;yong chuan;永川; +city::1786455;Yishui;I-shui;I-shui-hsien;Yishui; +city::1786546;Zhongxiang;An-lu;Anlu;Anlufu;Chung-hsiang;Chung-hsiang-hsien;Chungsiang;Yingzhong;Zhongxiang; +city::1786587;Yingshang Chengguanzhen;Yin-shang;Ying-shang-hsien;Yingshang;Yingshang Chengguanzhen;ying shang cheng guan zhen;颖上城关镇; +city::1786640;Chengzhong;Chengzhong;Chengzhong Jiedao;Ying-ch'eng-hsien;Ying-ch’eng-hsien;Yingcheng;cheng zhong;cheng zhong jie dao;ying cheng;城中;城中街道;应城; +city::1786657;Yinchuan;Gin-chhoan-chhi;Gîn-chhoan-chhī;Ho-lan;INC;In'chuan';Inchuan;Incuanas;Inčuanas;Jin-cchuan;Jin-čchuan;Jinchuan;Ngan Xuyen;Ngung-chiong;Ngân Xuyên;Ngṳ̀ng-chiŏng;Ning-hsia;Ningsia;Ningsia-hsien;Ningsiafu;Thanh pho Ngan Xuyen;Thành phố Ngân Xuyên;Yin-ch'uan-shih;Yin-ch’uan-shih;Yinchuan;Yinchuan Shi;Yinzconh;inchwan si;mdynt ynshwan;yin chuan;yin chuan shi;ynchwan;yynchwan;Їньчуань;Јинчуан;Инчуан;Иньчуань;مدينة ينشوان;يىنچۈئەن شەھىرى;ینچوآن;ینچوان;یینچوان;യിഞ്ചുവാൻ;ཡིན་ཁྲོའོན་གྲོང་ཁྱེར།;銀川;銀川市;银川;银川市;인촨 시; +city::1786676;Yima;I-ma;Jimy;Yima;Йимы; +city::1786720;Yigou;I-kou;I-kou-chen;I-kou-i;Igoui;Yigou; +city::1786731;Qingzhou;Ch'ing-chou;Ch’ing-chou;Cinchzhou;I-tu;I-tu-hsien;Qingzhou;Tsingchow;Tsingchowfu;Yidu;Yitu;Цинчжоу; +city::1786746;Yichun;Gi-chhun-chhi;Gî-chhun-chhī;I-cchun;I-ch'un;I-ch'un-chen;I-ch'un-hsien;I-ch’un;I-ch’un-chen;I-ch’un-hsien;I-čchun;Ichun';Nghi Xuan;Nghi Xuân;Ngi-chung;Ngì-chŭng;Ni-chhun-su;Nî-chhûn-sṳ;YIC;Yichun;Yichun Shi;Yichun i Jiangxi;Yuan-chou;Yuanchow;Yuen-chow-fu;Yüan-chou;Yüanchow;ichun si;ychan;yi chun;yi chun shi;yyshwn jyangshy;Ичунь;یچان;ییشون، جیانگشی;宜春;宜春市;이춘 시; +city::1786759;Yicheng;Hsuan-ch'eng;Hsüan-ch’eng;I-ch'eng;I-ch'eng-hsien;I-ch’eng;I-ch’eng-hsien;Tzu-chung;Tzu-chung-hsien;Yicheng;Yicheng Jiedao;yan cheng;yan cheng jie dao;鄢城;鄢城街道; +city::1786760;Yicheng;I-ch'eng-chen;I-ch’eng-chen;I-hsing;I-hsing-ch'eng;I-hsing-ch’eng;I-hsing-hsien;Ihing;Yicheng;Yicheng Jiedao;Yixing;Yixing Shi;yi cheng;yi cheng jie dao;yi xing shi;宜兴市;宜城;宜城街道; +city::1786764;Yichang;Che-Keou-chan;Che-Kéou-chan;Gi-chhiong-chhi;Gî-chhiong-chhī;I-cchang;I-ch'ang-hsien;I-ch'ang-shih;I-chang;I-ch’ang-hsien;I-ch’ang-shih;I-čchang;Ican;Ichan;Ichang;Ičan;Jicang;Jichang;Jiĉang;Nghi Xuong;Nghi Xương;Ngi-chiong;Ngì-chiŏng;Tung-hu;YIH;Yichang;aychang;ichang si;ychng;yi chang;yi chang shi;Ічан;Јичанг;Ичан;ایچانگ;يىچاڭ شەھىرى;یچنگ;宜昌;宜昌市;이창 시; +city::1786770;Yibin;Gi-pin-chhi;Gî-pin-chhī;Hsu-chou;Hsü-chou;I-pin;I-pin-hsien;I-pin-shih;Ibin;Ibin';Jibin;Nghi Tan;Nghi Tân;Ngi-bing;Ngì-bĭng;Suchow;Suifu;Süchow;Xufu;Xuzhou Cheng;YBP;Yibin;Yibin Shi;ayblyn;ibin si;xu fu;xu zhou cheng;ybyn;yi bin;yi bin shi;Јибин;Ибин;Ибинь;ایبلین;یبین;叙州城;叙府;宜宾;宜宾市;宜賓;宜賓市;이빈 시; +city::1786855;Yatou;Jung-ch'eng;Jung-ch'eng-hsien;Jung-ch’eng;Jung-ch’eng-hsien;Rongcheng;Rongcheng Shi;Yai-t'ou;Yai-t'ou-chi;Yai-t’ou;Yai-t’ou-chi;Yatou;Yatou Jiedao;Zhunchehn;rong cheng;rong cheng shi;ya tou;ya tou jie dao;Жунчэн;崖头;崖头街道;荣成;荣成市; +city::1786867;Yashan;; +city::1787031;Yanzhou;Ch'ie-fou;Ch’ie-fou;Tzeyang;Tzu-yang;Tzu-yang-ch'eng;Tzu-yang-ch’eng;Tzu-yang-hsien;Yanzhou;Yen-chou;Yenchow;Yenchow-fu;Yenzhou; +city::1787093;Yantai;Cheefoo;Chefoo;Chifu;Ian-tai-chhi;Ian-tâi-chhī;Ieng-dai;Iĕng-dài;Jan'taj;Jantai;Jantaj;Jen-tchaj;YNT;Yantai;Yantái;Yen GJai;Yen-t'ai;Yen-t'ai-shih;Yen-t’ai;Yen-t’ai-shih;Yên Đài;yan tai;yan tai shi;yantay;yantayy;yentai si;yeondae;yeontae;Јантај;Янтай;Яньтай;يەنتەي شەھىرى;یانتائی;یانتای;烟台市;煙台市;煙臺;연대;연태;옌타이 시; +city::1787144;Yanliang;Yanliang;Yen-liang;Yen-liang-chen;yan liang;阎良; +city::1787227;Yangzhou;Chiang-tu;Chiang-tu-hsien;Duong Chau;Dương Châu;Han-chiang;Iong-chiu-chhi;Iong-ciu;Iòng-ciŭ;Iông-chiu-chhī;Janchzhou;Jancjou;Jandzhou;Jang-cou;Jang-čou;Jangdzou;Janĉĵou;Kiangtu;YTY;Yang-chou;Yang-chou-shih;Yang-chow-fu;Yangchow;Yangjo shehiri;Yangtsjou;Yangzhou;yang zhou;yang zhou shi;yanghtshw;yangjeou si;yangzhw;Јангџоу;Янджоу;Янчжоу;יאנגצו;يانغتشو;یانگژو;ཡྰང་ཀྲོའུ།;扬州市;揚州;揚州市;양저우 시; +city::1787323;Yangshuo;Jansho;Yang-shuo-chen;Yang-shuo-hsien;Yangso;Yangso-hsien;yang shuo;Яншо;阳朔; +city::1787331;Zhangjiagang;Sha-chou;Shazhou;Yang-she-chen;Yang-she-ying;Yangshe;Zhangjiagang Shi; +city::1787351;Yangquan;Duong Tuyen;Dương Tuyền;Iong-choan-chhi;Iong-ciong;Iòng-ciòng;Iông-choân-chhī;Jancjuan;Jancjuan';Jang-cchuean;Jang-čchüan;Jangcuen;Yang-ch'uan;Yang-ch'uan-chan;Yang-ch'uan-shih;Yang-ch’üan;Yang-ch’üan-chan;Yang-ch’üan-shih;Yangquan;Yangquan Shi;yang quan;yang quan shi;yangchwan;yangchwian si;yangkwan;Јангћуен;Янцюань;یانگچوان;یانگکوان;阳泉;阳泉市;陽泉;陽泉市;양취안 시; +city::1787437;Yangliuqing;Yang-liu-ch'ing;Yang-liu-ch'ing-chen;Yang-liu-ch’ing;Yang-liu-ch’ing-chen;Yangliuqing;yang liu qing;杨柳青; +city::1787601;Yanggu;Jang;Yang-ku;Yang-ku-hsien;Янг; +city::1787646;Yangcun;Wu-ch'ing;Wu-ch'ing-hsien;Wu-ch’ing;Wu-ch’ing-hsien;Wuqing;Yang-ts'un;Yang-ts’un;Yangcun; +city::1787746;Yancheng;Diem Thanh;Diêm Thành;Iâm-siâⁿ-chhī;Jan'chehn;Jancengo;Jancheng;Janĉengo;Jen-ccheng;Jen-čcheng;Jenchun;Sieng-siang;Sièng-siàng;YNZ;Yancheng;Yen-ch'eng;Yen-ch'eng-chen;Yen-ch'eng-hsien;Yen-ch’eng;Yen-ch’eng-chen;Yen-ch’eng-hsien;yan cheng;yan cheng shi;yanchng;yencheong si;ynchyng;Јанченг;Йенчън;Яньчэн;يەنچېن شەھىرى;یانچنگ;ینچینگ;塩城市;盐城;盐城市;鹽城;옌청 시; +city::1787824;Tongshan;Hsu-chou;Hsu-chou-shih;Hsü-chou;Hsü-chou-shih;Sjujchzhou;Suchow;Suchow-fu;Süchow-fu;T'ung-shan;Tongshan;T’ung-shan;Xuzhou;swijeou si;xu zhou;xu zhou shi;Сюйчжоу;شۈجو شەھىرى;徐州;徐州市;쉬저우 시; +city::1787837;Xucheng;Hsu-wen;Hsu-wen-hsien;Hsü-wen;Hsü-wen-hsien;Suwen;Suwenyun;Tsuimen;Xucheng;Xucheng Jiedao;Xucheng Zhen;Xuwen;xu cheng;xu cheng jie dao;xu cheng zhen;徐城;徐城街道;徐城镇; +city::1787858;Shangrao;Kuanghsin;Kwangsin;SQD;Sang-zao;Shang-jao;Shang-jao-hsien;Shang-jao-shih;Shangrao;Shangrao Shi;Shangzhao;Shanzhao;Siong-jiau-chhi;Siong-ngieu;Siông-ngièu;Siōng-jiâu-chhī;Sjangrao;Song-ngieu-su;Song-ngièu-sṳ;Thuong Nhieu;Thượng Nhiêu;Xuri;sanglao si;shang rao;shang rao shi;shangraw;Šang-žao;Шангжао;Шанжао;شانگراو;上饒;上饒市;上饶;上饶市;상라오 시; +city::1787901;Xunchang;Xunchang;xun chang;巡场; +city::1788046;Jiangguanchi;Hsu-ch'ang;Hsu-ch'ang-hsien;Hsu-ch'ang-shih;Hsu-chou;Hsuchow;Hsü-chou;Hsü-ch’ang;Hsü-ch’ang-hsien;Hsü-ch’ang-shih;Hsüchow;Jiangguanchi;Syuychan;Xuchang;jiang guan chi;将官池; +city::1788081;Xuanzhou;Hsuan-ch'eng;Hsuan-ch'eng-hsien;Hsüan-ch’eng;Hsüan-ch’eng-hsien;Ning-kuo;Ningkwo;Ningkwofu;Suancheng;Suancheng-hsien;Süancheng;Süancheng-hsien;Xuancheng;Xuanzhou; +city::1788206;Xixiang;Hsi-hsiang;Xixiang; +city::1788245;Xiuying;Hsiu-ying;Xiuying;xiu ying;秀英; +city::1788268;Xiulin;Shi-shau;Shih-shou;Shih-shou-hsien;Shih-show-hsien;Shishou;Shishow;Xiulin; +city::1788402;Xiongzhou;Namyung;Nan-hsiung;Nan-hsiung-hsien;Nanxiong;Nanyung-hsien;Xiongzhou;xiong zhou;雄州; +city::1788406;Guixi;Guixi;Guixi Shi;Kuei-ch'i;Kuei-ch'i-hsien;Kuei-ch'i-hsien-ch'eng;Kuei-ch’i;Kuei-ch’i-hsien;Kuei-ch’i-hsien-ch’eng;Kuei-hsi;Kweiki;Kweikihsien;Xiongshi;gui xi;gui xi shi;贵溪;贵溪市; +city::1788450;Xinzhou;Gorad Sin'dzhou;Han Chau;Hian-chiu-chhi;Hian-chiu-chhī;Hsin;Hsin-hsien;Hsin-hsien-ch'eng;Hsin-hsien-ch’eng;Hsin-ting;Hung-ciu;Hãn Châu;Hṳ̆ng-ciŭ;Sin'chzhou;Sin-cou;Sin-čou;Sinchow;Sinhsien;WUT;Xinfu Qu;Xinxian;Xinzhou;Xinzhou Shi;shnzhww;shynjw;sinjeou si;xin fu qu;xin zhou;xin zhou shi;Горад Сіньджоў;Синьчжоу;شنژوو;شینجو;忻州;忻州市;忻府区;신저우 시; +city::1788452;Xinzhou;Hsin-chou;Hsin-chou-chen;Sinchow;Xinzhou; +city::1788462;Xinzhi;Hsin-chih;Hsin-chih-ts'un;Hsin-chih-ts’un;Pei-ts'un;Pei-ts’un;Xinzhi; +city::1788508;Xinyu;Hsin-yu;Hsin-yu-chen;Hsin-yu-hsien;Hsin-yu-hsien-ch'eng;Hsin-yu-shih;Hsin-yü;Hsin-yü-chen;Hsin-yü-hsien;Hsin-yü-hsien-ch’eng;Hsin-yü-shih;Sin'juj;Sin-jue;Sin-jü;Sin-u-chhi;Sin-yi-su;Sin-û-chhī;Sing-u;Sinyu-hsien;Sinyü-hsien;Sîn-yì-sṳ;Sĭng-ṳ̀;Tan Du;Tân Dư;Xinyu;Xinyu Shi;shynyw;sin-wi si;xin yu;xin yu shi;Синьюй;شینیو;新余;新余市;新喻;신위 시; +city::1788522;Hancheng;Hancheng;Hsin-yeh;Hsin-yeh-hsien;Sin-ye-hsien;Sinyeh-hsien;Xinye;han cheng;汉城; +city::1788534;Xinyang;Czinan';Hsin-yang;Hsin-yang-hsien;Hsin-yang-shih;Sinyang;Sinyang-hsien;XYW;Xinyang;Цзинань; +city::1788572;Nangandao;Hsin-hsiang;Hsin-hsiang-hsien;Hsin-hsiang-shih;Hsinghsiang;Nangandao;Sin'sjan;Singsieng;Sinsiang-hsien;Xinxiang;nan gan dao;Синьсян;南干道; +city::1788618;Xintai;Hsin-t'ai;Hsin-t'ai-hsien;Hsin-t’ai;Hsin-t’ai-hsien;Hsing-t'ai;Hsing-t’ai;Sintai;Sintaihsien;Sintoihsien;Xintai; +city::1788638;Xinshi;Ching-shan;Ching-shan-hsien;Jingshan;Kingshan;Kingshanhsien;Xinshi;xin shi;新市; +city::1788694;Xinpu;Hsien-p'u;Hsien-p’u;Hsin-hai-lien;Hsin-hai-lien-shih;Hsin-p'u;Hsin-p'u-chen;Hsin-p’u;Hsin-p’u-chen;Lianyungang;Lien-yun-chiang;Lien-yun-chiang-shih;Lien-yun-kang;Lien-yün-chiang;Lien-yün-chiang-shih;Lien-yün-kang;Sinpuchen;Tsin-pu;Xinpu;lian yun gang;lian yun gang shi;lyen-wingang;xin pu;ليەنيۈنگاڭ شەھىرى;新浦;连云港;连云港市;連雲港;連雲港市;롄윈강; +city::1788816;Xinji;Hsin-chi;Hsin-chi-chen;Shu-lu-hsien;Shulu;Sin'tszi;Sin’tszi;Xinji; +city::1788852;Xining;Gorad Sinin;Hsi-ning;Hsi-ning-shih;Hszining;Sa-ning;Se-leng-chhi;Se-lêng-chhī;Shinin;Shining shehiri;Si-nen-su;Si-ning;Sihningz;Siniin;Sinin;Sining;Sining-hsien;Siningas;Siningfu;Sinino;Sî-nèn-sṳ;Să̤-nìng;Tay Ninh;Tây Ninh;XNN;Xining;Xining Shi;shynyng;shynyngh;sinin;sining si;sininga;sinini;synyng;xi ning;xi ning shi;Горад Сінін;Синиин;Синин;Сининг;Сінін;Шинин;שינינג;شينينغ;شینینگ;शिनिंग;ཟི་ལིང་།;სინინი;西宁;西宁市;西寧;西寧市;시닝 시; +city::1788869;Shangmei;Hsin-hua;Hsin-hua-hsien;Shangmei;Sinhwa;Sinhwa-hsien;Xinhua;shang mei;上梅; +city::1788927;Xingtai;Chin-t'ai;Chin-t’ai;Heng-tai-chhi;Hing-dai;Hinh GJai;Hsing-t'ai;Hsing-t'ai-hsien;Hsing-tai-shih;Hsing-t’ai;Hsing-t’ai-hsien;Hêng-tâi-chhī;Hìng-dài;Hình Đài;Setay;Shun'de;Shun-te;Shunteh;Shuntehfu;Shun’de;Sing-tchaj;Singtai;Singtaj;Sintaj;XNT;Xingtai;Yingtaihsien;kei tai shi;shngtayy;shyngtay;singtai si;xing tai;xing tai shi;Сингтај;Синтай;Сінтай;شنگتائی;شینگتای;ケイ台市;邢台;邢台市;싱타이 시; +city::1789065;Ankang;AKA;An-k'ang-hsien;An-k’ang-hsien;Ankan;Ankang;Hingan;Hinganfu;Hsing-an;Xing'an;Xing’an;an kang;an kang shi;Анкан;安康;安康市; +city::1789118;Xindian;Hsin-tien;Hsingtien;Sintien;Xindian; +city::1789137;Xindi;Honghu;Hsin-ti;Hsin-ti-chen;Hung-hu;Jingsee;Shin-ti;Sing Ti;Singti;Sinti;Xindi; +city::1789176;Feicheng;Fei-ch'eng-hsien;Fei-ch’eng-hsien;Feicheng;Feychen;Xincheng; +city::1789273;Sanshui;Hsi-man;Hsi-nan-chen;Hsin-nan;Sainam;Sainan;Sanshui;Xinan;san shui;三水; +city::1789289;Ximei;Ch'i-mei-chen;Ch'i-wei;Ch’i-mei-chen;Ch’i-wei;Naman;Nan'an;Nan-an-hsien;Nan’an;Ximei;Xizhai;xi mei;西美; +city::1789427;Wacheng;Hsi-hua;Hsi-hua-hsien;Sihwahsien;Sikhua;Wacheng;Xihua;wa cheng;娲城; +city::1789462;Xihe;Hsi-ho;Hsi-ho-chen;Sihochen;Xihe;Xihe Zhen;xi he;xi he zhen;淅河;淅河镇; +city::1789647;Xichang;Hsi-ch'ang;Hsi-ch'ang-hsien;Hsi-ch’ang;Hsi-ch’ang-hsien;Ning-yuan;Ning-yüan;Ningyuanfu;Sichan;Sichang;Sichanghsien;XIC;Xichang;sichang;xi chang;xi chang shi;Сичан;西昌;西昌市;ꀒꎂ;시창; +city::1789693;Xiazhuang;Hsia-chuang;Hsia-chuang-chen;Linshu;Xiazhuang; +city::1789703;Xiazhen;Hsia-chen;Weishan;Xiazhen;Xiazhencun; +city::1789799;Xiashi;Hai-ning-hsien;Haining;Hsia-shih;Hsia-shih-chen;Siashih;Xiashi;Xiashi Jiedao;xia shi;xia shi jie dao;硖石;硖石街道; +city::1789897;Zijinglu;Gongyi;Hsiao-i;Hsiao-i-chen;Kung-hsien;Xiaoyi;Zijinglu;zi jing lu;紫荆路; +city::1789945;Xiaoweizhai;; +city::1789998;Xiaoshan;Hsiao-chan;Hsiao-chi-shan;Hsiao-shan;Hsiao-shan-hsien;Hsiao-shan-hsien-ch'eng;Hsiao-shan-hsien-ch’eng;Siaoshan;Siaoshanhsien;Sjaoshan';Xiaoshan;Xiaoshan Xian;xiao shan;xiao shan xian;Сяошань;萧山;萧山县; +city::1790100;Xiaolingwei;Hsiao-ling-wei;Xiaolingwei;Xiaolingwei Jiedao;xiao ling wei;xiao ling wei jie dao;孝陵卫;孝陵卫街道; +city::1790254;Xiaogan;Hau-gang;Hau-kam-chhi;Hieu Cam;Hiếu Cảm;Hsiao-kan;Hsiao-kan-hsien;Hàu-kám-chhī;Háu-gāng;Siao-kan;Siaokan;Siaokanhsien;Sjaogan';XJW;Xiaogan;shyawgan;syaogan si;xiao gan;xiao gan shi;Сяогань;شياۋگەن شەھىرى;شیاوگان;孝感;孝感市;샤오간 시; +city::1790353;Xianyang;Ham Duong;Ham-iong-chhi;Hang-iong;Hsien-yang;Hsien-yang-hsien;Hsien-yang-shih;Hszienjang;Hàm Dương;Hàng-iòng;Hâm-iông-chhī;San'jan;Sianjangas;Sien-jang;Sienjan;Sienyanghsien;Sjan'jan;Sjanjang;Sjanjango;Syanyan;Xianyang;Xianyang Shi;seiy n hyang;shyanyang;syen-yang si;xian yang;xian yang shi;Ŝjanjango;Саньян;Сиенян;Сяньян;Сјанјанг;شیانیانگ;شیان‌یانگ;เสียนหยาง;咸阳;咸阳市;咸陽;咸陽市;셴양 시; +city::1790371;Xiantao;Hsien-t'ao-chen;Hsien-t’ao-chen;Mianyang;Mien-yang;Mien-yang Hsien;Sientaochen;XTQ;Xiantao;Xiantaozhen; +city::1790379;Xianshuigu;Hsien-shui-ku;Jinnan;Jinnan Qu;T'ien-ching;T'ien-ching-hsien;T’ien-ching;T’ien-ching-hsien;Xianshuigu;Xianshuigu Zhen;jin nan;jin nan qu;xian shui gu;xian shui gu zhen;咸水沽;咸水沽镇;津南;津南区; +city::1790392;Xiannu;Chiang-tu;Hsien-nu-chen;Hsien-nu-miao;Hsien-nu-miao-chen;Hsien-nü-chen;Hsien-nü-miao;Hsien-nü-miao-chen;Jiangdu Shi;Siennumiao;Siennümiao;Xiannu;Xiannumiao;Xiannü;Xiannümiao;jiang dou shi;xian nu;仙女;江都市; +city::1790396;Xianning;Hsien-ning;IUO;Sjan'nin;Xianning;Сяньнин; +city::1790413;Xianju;Hsien-chu;Hsien-chu-hsien;Hsien-chu-hsien-ch'eng;Hsien-chü;Hsien-chü-hsien;Hsien-chü-hsien-ch’eng;Sienku;Sienkuhsien;Sienkü;Xianju;xian ju;仙居; +city::1790437;Zhuhai;Chau Hai;Chu Hai;Chu Hải;Chu-hai;Chu-hai-chhi;Chu-hoi-su;Chu-hái-chhī;Chzhukhaj;Châu Hải;Chû-hói-sṳ;Cio-hai;Ciŏ-hāi;Cu-chaj;Dzhukhaj;Dzukhaj;Guhaj;Heung chau;Hsiang-chou;Hsiang-chou-chen;Hsiang-chou-fou;Huengchow;Juxey shehiri;Xiangzhou;ZUH;Zhuhai;juhai si;jwhay;zhu hai;zhu hai shi;zwhay;Ču-chaj;Ĝuhaj;Џухај;Джухай;Чжухай;جوهای;زوهاي;ژوہوئی;珠海;珠海市;주하이 시; +city::1790451;Wenxing;Hsiang-yin;Hsiang-yin-hsien;Siang-Yin;Siangyin;Siangyinhsien;Wenxing;Xiangyin;Xiangyin Xian;wen xing;xiang yin xian;文星;湘阴县; +city::1790471;Xiangxiang;Hsan-shan;Hsiang-hsiang;Hsiang-hsiang-hsien;Siangsiang;Siangsianghsien;Siong-hiong-su;Siong-hiông-sṳ;Tuong Huong;Tương Hương;Xiangxiang;syangsyang si;xiang xiang;xiang xiang shi;湘乡;湘乡市;湘郷市;샹샹 시; +city::1790492;Xiangtan;Hsiang-t'an-ch'eng;Hsiang-t'an-hsien;Hsiang-t'an-shih;Hsiang-tan;Hsiang-t’an-ch’eng;Hsiang-t’an-hsien;Hsiang-t’an-shih;Siang-tchan;Siangtan;Siangtanhsien;Siong-tang;Siong-tham-chhi;Siong-tham-su;Siong-thâm-chhī;Siong-thâm-sṳ;Siŏng-tàng;Sjangtan;Sjantan;Sjantan';Tuong GJam;Tương Đàm;Xiangtan;Xiangtan Shi;shyangtan;syangtan si;xiang tan;xiang tan shi;Сянтан;Сянтань;Сјангтан;شیانگتان;სიანტანი;湘潭;湘潭市;샹탄 시; +city::1790587;Xiangyang;Fancheng;Fancheng Zhen;Hsiang-fan;Hsiang-yang;Hsiang-yang-hsien;Siangfan;Siangyang;Siangyang-hsien;Sjanfan';XFN;Xiangfan;Xiangfan Shi;Xiangyang;Xiangyang Shi;Xiangyangfu;fan cheng;fan cheng zhen;xiang fan;xiang fan shi;xiang yang;xiang yang fu;xiang yang shi;Сянфань;شياڭفان شەھىرى;樊城;樊城镇;襄樊;襄樊市;襄阳;襄阳市;襄阳府; +city::1790601;Xiangcheng Chengguanzhen;Hsiang-ch'eng;Hsiang-ch'eng-hsien;Hsiang-ch’eng;Hsiang-ch’eng-hsien;Xiangcheng;Xiangcheng Chengguanzhen;xiang cheng;xiang cheng cheng guan zhen;襄城;襄城城关镇; +city::1790630;Xi'an;Ch'ang-an;Ch'ang-an-hsien;Ch’ang-an;Ch’ang-an-hsien;Hsi Gnan Fu;Hsi-an;Hsi-an-shih;Hsi-ching;Hsi-ching-shih;Hsingan;SIA;Si-Gan-Fu;Sian;Sian';Siana;Sianas;Sianfu;Siano;Siaņa;Siking;Singan;Tay An;Tây An;Xi'an;Xi'an - xi an;Xi'an - 西安;Xi'an Shi;Xian;Xi’an;Xi’an Shi;Xī'ān;si xan;sian si;xi an;xi an shi;Ŝiano;Сиань;شىئەن شەھىرى;ซีอาน;西安;西安市;시안 시; +city::1790645;Xiamen;A-muong;Amoy;E-mng-chhi;Ha Mon;Ha-mun-su;Ha-mùn-sṳ;Hiyamin;Hsia-men;Hsia-men-shih;Hsziamen;Hạ Môn;Shamen;Sia-men;Siamen;Siamenas;Sjamehn';Sjamen;Sjamen';Sjamun;Sjamyn';Ssu-ming;Ssu-ming-hsien;Szeming-hsien;XMN;Xiamen;Xiamen - sha men;Xiamen - 厦门;Xiamen Shi;seiy he min;sha men;sha men shi;shyamn;shyamyn;siamini;syameon si;Â-muòng;Ē-mn̂g-chhī;Σιαμέν;Сямень;Сямън;Сямынь;Сямэнь;Сјамен;שיאמן;شيامن;شيامېن شەھىرى;شیامن;شیامین;เซี่ยเหมิน;სიამინი;厦门;厦门市;廈門;廈門市;샤먼 시; +city::1790840;Wuzhou;Ng-chu-su;Ngo Chau;Ngo-chiu-chhi;Ngouzcouh;Ngu-ciu;Ngô Châu;Ngô͘-chiu-chhī;Ngù-ciŭ;Ts'ang-wu;Ts'ang-wu-hsien;Ts’ang-wu;Ts’ang-wu-hsien;Uchzhou;Vudzou;WUZ;Wu-chou;Wu-chou-shih;Wu-cou;Wu-čou;Wuchow;Wuzhou;ujeou si;wazhw;wu zhou;wu zhou shi;wwzhww;Ǹg-chû-sṳ;Вуџоу;Учжоу;واژو;ووژوؤ;ووژوو;梧州;梧州市;우저우 시; +city::1790885;Wuyang;Wu-yang-chi;Wuyang; +city::1790894;Wuxue;Guangji;Kuang-chi;Kuang-chi-hsien;Wu-hsueh;Wu-hsueh-chen;Wu-hsüeh;Wu-hsüeh-chen;Wuhiutsun;Wusueh;Wuxue;Wuxue Jiedao;wu xue;wu xue jie dao;武穴;武穴街道; +city::1790923;Wuxi;Bu-sek-chhi;Bû-sek-chhī;Gorad Usi;U-sek;Usi;Usis;Vo Tich;Vuhszi;Vusi;Vusio;Vuzsiz;Vuŝio;Vô Tích;WUX;Wu-hsi;Wu-hsi-hsien;Wu-hsi-shih;Wu-si;Wusih;Wusih-hsien;Wusihsien;Wuxi;Wuxi Shi;usi si;vukasi;wu xi;wu xi shi;wwshy;wwsy;xu si;Ù-sék;Вуси;Горад Усі;Уси;Усі;Үshi;Үши;וושי;ووشي;ووشی;ۋۇشى شەھىرى;ਵੁਕਸੀ;อู๋ซี;ཝུའུ་ཞི།;无锡;无锡市;無錫;無錫市;우시 시; +city::1791056;Dongyang;Dongyang;Dongyang Shi;Tung-yang;Tung-yang-hsien;Tung-yang-hsien-ch'eng;Tung-yang-hsien-ch’eng;Wuning;dong yang;dong yang shi;东阳;东阳市; +city::1791121;Changde;CGD;Cangde;Cchang-te;Ch'ang-te;Ch'ang-te-ch'eng;Ch'ang-te-hsien;Ch'ang-te-shih;Chandeh;Changde;Changde Shi;Changteh;Changteh-hsien;Ch’ang-te;Ch’ang-te-ch’eng;Ch’ang-te-hsien;Ch’ang-te-shih;Siong-daik;Siong-tek-chhi;Siòng-dáik;Siông-tek-chhī;Song-tet-su;Sòng-tet-sṳ;Thuong GJuc;Thường Đức;Wuling;chang de;chang de shi;changda;changdeo si;changdy;Čangdė;Čchang-te;Чангде;Чандэ;چانگدا;چانگدی;常徳;常徳市;常德;常德市;창더 시; +city::1791236;Wuhu;Bu-ho-chhi;Bû-hô͘-chhī;Ouhu;U-hu;Ukhu;Vu Ho;Vu Hồ;Vuhu;Vukhu;Vuĥu;WHU;Wu-chu;Wu-hu-hsien;Wu-hu-shih;Wuhu;Wuhu Shi;uhu si;waha;wu hu;wu hu shi;Ù-hù;Вуху;Уху;Վուհու;واها;ووہو;芜湖;芜湖市;蕪湖;蕪湖市;우후 시; +city::1791247;Wuhan;Bu-han-chhi;Bú-hàn-chhī;Gorad Ukhan';Gouchan;Owhan;U-hang;Uhan;Uhana;Uhanas;Uhaņa;Ukhan;Ukhan';Uxan;Vu Han;Vu-hon-su;Vuhan;Vuhani;Vuhano;Vujhan;Vukhan;Vú-hon-sṳ;Vũ Hán;WUH;Wu-chan;Wu-han-shih;Wuhan;Wuhan Shi;uhan si;ukhani;uuxan;vuhana;vukan;vukhana;wu han;wu han shi;wwhan;xu han;Ū-háng;Γουχάν;Вухан;Вухан балһсн;Горад Ухань;Ухан;Ухань;Үkhan';Үхань;Үһән;Ուհան;ווהאן;ووهان;ووھان;ووہان;ۋۇخەن شەھىرى;ܘܘܗܐܢ;वूहान;ਵੂਖ਼ਨ;வுகான்;വൂഹാൻ;อู่ฮั่น;ཝུའུ་ཧན་གྲོང་ཁྱེར།;ဝူဟန့်မြို့;უხანი;ዉሃን;武汉;武汉市;武漢;武漢市;우한 시;𐍅𐌿𐌷𐌰𐌽; +city::1791249;Wuhai;Hai-p'o-wan-shih;Hai-po-wan;Hai-p’o-wan-shih;Haibowan;O Hai;O-hai-chhi;O͘-hái-chhī;U-hai;Uhajus;Ukhaj;Vu-hoi-su;Vuhajo;Vû-hói-sṳ;WUA;Wu-chaj;Wu-hai-shih;Wuhai;hai bo wan;uhai si;wu hai;wu hai shi;wwhay;Ô Hải;Ŭ-hāi;Ухай;Үхай хот;ووهای;ووہائی;乌海;乌海市;海勃湾;烏海;烏海市;우하이 시; +city::1791325;Wuda;Bayinsai;Ud;Wu-ta;Wu-ta-shih;Wuda;Wuda Qu;ba yin sai;wu da;wu da qu;乌达;乌达区;巴音赛; +city::1791347;Wucheng;Wucheng;Wucheng Zhen;wu cheng;wu cheng zhen;五城;五城镇; +city::1791388;Wenzhou;On Chau;Un-chiu-chhi;Un-chiu-chhī;Ung-ciu;Uundzhou;Vehn'chzhou;Ven'chzhou;Vencsou;Vendzou;Vendžou;Vengou;Venĝou;Vun-chu-su;Vûn-chû-sṳ;WNZ;Wen-chou;Wen-chou-shih;Wen-cou;Wen-čou;Wenchow;Wenchow-fu;Wenju shehiri;Wentsjou;Wenzhou;Wenzhou Shi;Wénju shehiri;Yung-chia;Yung-chia-hsien;Yungkai;Yungkia;Yungkia-hsien;wen zhou;wen zhou shi;wntshw;wnzhw;wonjeou si;Ôn Châu;Ŭng-ciŭ;Веньчжоу;Венџоу;Вэньчжоу;Уънджоу;ونتشو;ونژو;温州;温州市;溫州市;원저우 시; +city::1791428;Wenshang;Wen-shang-hsien;Wenshang; +city::1791464;Wenling;T'ai-p'ing;Taipinghsien;T’ai-p’ing;Wen-ling-hsien;Wen-ling-hsien-ch'eng;Wen-ling-hsien-ch’eng;Wenlin;Wenling;wen ling;温岭; +city::1791536;Tianfu;Chiu-wen-teng;K'un-yu;K’un-yü;Tianfu;Tianfu Jiedao;Wen-teng;Wen-teng-ch'eng;Wen-teng-ch’eng;Wen-teng-hsien;Wencheng;Wendeng;Wendeng Shi;tian fu;tian fu jie dao;wen deng;wen deng shi;天福;天福街道;文登;文登市; +city::1791636;Weinan;Oi-nang;Ui-lam-chhi;Vehjnan';Veinan;Vejnan;Veynan;Vi Nam;Vị Nam;Wei-nan-hsien;Weinan;Weinan Shi;Wej-nan;waynan;wei nan;wei nan shi;weinan si;wyynan;Ôi-nàng;Ūi-lâm-chhī;Вејнан;Вэйнань;وئینان;واینان;渭南;渭南市;웨이난 시; +city::1791673;Weihai;Ui-hai;Ui-hai-chhi;Ui-hái-chhī;Uy Hai;Uy Hải;Vehjkhaj;Veihai;WEH;Wei-hai-shih;Wei-hai-wei;Wei-hai-wei-shih;Weihai;Weihai Shi;Wej-chaj;wei hai;wei hai shi;weihai si;wey hi;wyhay;Ŭi-hāi;Вэйхай;ویهای;وییہائی;ۋېيخەي شەھىرى;เวยไห่;威海;威海市;웨이하이 시; +city::1791681;Weifang;Duy Phuong;Duy Phường;I-hng-chhi;Vehjfan;Vejfang;WEF;Wei;Wei-fang-shih;Wei-hsien;Weifang;Wej-fang;i fang shi;wei fang;wei fang shi;weipang si;wyfang;Î-hng-chhī;Вејфанг;Вэйфан;ویفانگ;イ坊市;潍坊市;濰坊;웨이팡 시; +city::1791748;Wanxian;Wan;Wan-hsien;Wan-hsien-shih;Wanxian; +city::1791779;Wanning;Maning;Manning;Manyun;Van Leng;WXJ;Wan;Wan-ch'eng-chen;Wan-ch’eng-chen;Wan-hsien;Wan-ning-hsien;Wancheng;Wanning;Wanning Shi;wan cheng;wan ning;wan ning shi;wanning si;wannyng;واننینگ;万城;万宁市;万寧;万寧市;萬寧;완닝 시; +city::1792087;Yinzhu;Chiao-nan;Wang-ko-chuang;Wanggezhuang;Yinzhu;yin zhu;隐珠; +city::1792260;Wafangdian;Fu;Fu-hsien;Fuxian;Wa-fan-tien;Wa-fang-tien;Wa-fang-tien-chen;Wafangdian; +city::1792359;Huangshan;Chuang-san;Chuang-šan;Hoang Son;Hoàng Sơn;Huangshan;Huangshan City;Huangshan Shi;Khuanshan';N̂g-soaⁿ-chhī;T'un-ch'i;T'un-ch'i-chen;T'un-ch'i-shih;T'un-hsi;TXN;Tun'si;Tunki;Tunqi;Tunxi;Tunxi Qu;T’un-ch’i;T’un-ch’i-chen;T’un-ch’i-shih;T’un-hsi;Uong-sang;Uòng-săng;huang shan;huang shan shi;hwangsan si;hwangshan;tun xi;tun xi qu;Туньси;Хуаншань;هوانگشان;ہوآنگشان;ہوانگشان شہر;屯溪;屯溪区;黃山市;黄山;黄山市;황산 시; +city::1792516;Loushanguan;Loushanguan;Loushanguan Zhen;T'ung-tzu;T'ung-tzu-ch'eng;T'ung-tzu-hsien;Tongzi;Tongzi Xian;Tungtze;Tungtze-hsien;T’ung-tzu;T’ung-tzu-ch’eng;T’ung-tzu-hsien;lou shan guan;lou shan guan zhen;tong zi;tong zi xian;娄山关;娄山关镇;桐梓;桐梓县; +city::1792520;Tongzhou;T'ung;T'ung-chen;T'ung-chou;T'ung-chou-ch'u;T'ung-chou-shih;T'ung-hsien;T'ung-hsien-chen;Tingchow;Tongxian;Tongzhou;Tunchzhou;Tunsyan';Tunsyan’;T’ung;T’ung-chen;T’ung-chou;T’ung-chou-ch’ü;T’ung-chou-shih;T’ung-hsien;T’ung-hsien-chen;tong zhou;Тунчжоу;通州; +city::1792585;Fuding;Fu-ting;Fu-ting-hsien;Fuding;Tongshan;fu ding;福鼎; +city::1792592;Tongren;Kiangkowhsien;T'ung-jen;T'ung-jen-hsien;T'ung-yen;TEN;Tongren;Tongren Shi;T’ung-jen;T’ung-jen-hsien;T’ung-yen; +city::1792621;Wusong;T'ung-ling;T'ung-ling-hsien;Tongling;T’ung-ling;T’ung-ling-hsien;Wusong;Yuan-hsien-ch'eng;Yüan-hsien-ch’eng;tong ling;tong ling shi;wu song;五松;铜陵;铜陵市; +city::1792692;Tongchuan;San'tay;San-t'ai-hsien;San-t’ai-hsien;Santai;San’tay;T'ung-ch'uan;Tongchuan;Tunchuan;Tungchwan;Tungchwan-fu;T’ung-ch’uan;tong chuan;潼川; +city::1792892;Tianshui;THQ;Tianshui;Tiānshuǐ;tian shui;天水; +city::1792916;Tianpeng;P'eng;P'eng-hsien;Pengxian;Pensyan';Pensyan’;P’eng;P’eng-hsien;Tianpeng;tian peng;天彭; +city::1792947;Tianjin;T'ien-chin;T'ien-ching;T'ien-ching-shih;TSN;Tchien-tin;Tchien-ťin;Tehnd'iin;Thien Tan;Thien-tsin;Thiên Tân;Thiên-tsîn;Tiandzinas;Tianjin;Tianjin Shi;Tianjing;Tianjín;Tiantzin;Tiencin;Tiencsin;Tiendzin;Tientsin;Tiençin;Tjan'czin';Tjandzina;Tjangino;Tjanĝino;Tjaņdziņa;Tjencin;Tyantszin;T’ien-chin;T’ien-ching;T’ien-ching-shih;cheonjin;theiyn cin;ti'anjina;tian jin;tian jin shi;tiyanjin;tyanjina;tyanjn;tyanjyn;tyenjin si;tyyng'yn;Τιαντζίν;Тиендзин;Тэндьиин;Тяньцзинь;Тяньцзінь;Тјенцин;טיינג'ין;تيانجين;تيەنجىن شەھىرى;تیانجن;تیانجین;तिआंजिन;त्यांजिन;ਤਿਆਂਜਿਨ;தியான்ஜின்;ടിയാൻജിൻ;เทียนจิน;ཐན་ཅིན ་གྲོང་ཁྱེར།;ထျန်းကျင်းမြို့;ტიანძინი;天津;天津市;천진;톈진 시; +city::1793036;Chengtangcun;Chengtangcun;T'eng;T'eng-hsien;Tehnchzhou;Teng Xian;Tengzhou;Tengzhou Shi;T’eng;T’eng-hsien;cheng tang cun;teng xian;teng zhou;teng zhou shi;Тэнчжоу;滕县;滕州;滕州市;程堂村; +city::1793089;Taozhuang;T'ao-chuang;Taozhuang;T’ao-chuang; +city::1793230;Tantou;Tantou;Tantou Zhen;tan tou;tan tou zhen;潭头;潭头镇; +city::1793286;Tangzhai;Chu-tzu-chieh;Chü-tzu-chieh;Tang-chai;Tangzhai; +city::1793346;Tangshan;GJuong Son;T'ang-shan-chen;T'ang-shan-shih;TVS;Tangsanas;Tangsano;Tangshan;Tangŝano;Tangšanas;Tanshan;Tanshan';Tchang-san;Tchang-šan;Tongshan;T’ang-shan-chen;T’ang-shan-shih;tang shan;tang shan shi;tangasana;tangsan si;tangsana;tangshan;Đường Sơn;Таншан;Таншань;تانگشان;تاڭشەن شەھىرى;तांग्शान;ਤਾਂਗਸ਼ਾਨ;ടാങ്ഷാൻ;唐山;唐山市;탕산 시; +city::1793364;Tangping;Ho-t'ang;Ho-t’ang;T'ang-p'ing-hsu;Tangping;Tangping Zhen;T’ang-p’ing-hsü;tang ping;tang ping zhen;塘坪镇;塘平; +city::1793385;Tangjiazhuang;T'ang-chia-chuang;T'ang-chia-chuang-tzu;Tangjiazhuang;Tangkiachwang;T’ang-chia-chuang;T’ang-chia-chuang-tzu;tang jia zhuang;唐家庄; +city::1793419;Binhe;Binhe;Pi-yuan;Pi-yüan;T'ang-ho;T'ang-ho-hsien;Tanghe;T’ang-ho;T’ang-ho-hsien;bin he;滨河; +city::1793424;Tanggu;T'ang-ku;Taku;Tanggu;Tango;Tung-ku;T’ang-ku;tang gu;Танго;塘沽; +city::1793505;Taizhou;T'ai;T'ai-chou;T'ai-chou-shih;T'ai-hsien;T'ai-hsien-ch'eng;Tai-ciu;Taichow;Taitsjou;Taizhou;Taizhou Shi;Taizhou i Jiangsu;Tajchzhou;Tajdzhou;Tajdzou;Tajgou;Tajĝou;Tchaj-cou;Tchaj-čou;Teyju shehiri;Thai Chau;Thai-chiu-chhi;Thài-chiu-chhī;Thái Châu;Tái-ciŭ;T’ai;T’ai-chou;T’ai-chou-shih;T’ai-hsien;T’ai-hsien-ch’eng;YTY;tai zhou;tai zhou shi;taijeou si;tayyzhw jyangsw;tayzhw;Тайджоу;Тайчжоу;Тајџоу;تائیژو، جیانگسو;تایژو;泰州;泰州市;타이저우 시; +city::1793511;Taiyuan;Daiyienz;T'ai-yuan-shih;TYN;Tai-nguong;Taigiouan;Taijuan;Taijuana;Taijuaņa;Taiyuan;Taiyuan Shi;Taiyuan-fu;Taiyuenum;Taiyüan-fu;Tajjuan';Tajjuean;Tajjuen;Tajjüan;Tajuanas;Tajuano;Tayyuan;Tchaj-juean;Tchaj-jüan;Thai Nguyen;Thai-goan-chhi;Thài-goân-chhī;Thái Nguyên;Tái-nguòng;T’ai-yüan-shih;Yang-ch'u;Yang-ch’ü;Yangku;Yangkü;Yanka;ta'iyu'ana;tai yuan;tai yuan shi;taiwian si;tay ywan;tayy ywan;tayywan;thayyu'ana;thi hywn;Ταϊγιουάν;Таијуан;Тайюань;Тайюен;טאי-יואן;تائی یوآن;تائی‌یوان;تاي يوان;تاییوان;تەييۈەن شەھىرى;ताइयुआन;थाय्युआन;ਤਾਈਯੂਆਨ;ไท่หยวน;太原;太原市;타이위안 시; +city::1793533;Taixing;T'ai-hsing;T'ai-hsing-ch'eng;T'ai-hsing-chen;T'ai-hsing-hsien;Taihing;Taishing;Taixing;Taixing Shi;Taixing Zhen;T’ai-hsing;T’ai-hsing-chen;T’ai-hsing-ch’eng;T’ai-hsing-hsien;tai xing;tai xing shi;tai xing zhen;泰兴;泰兴市;泰兴镇; +city::1793700;Taishan;GJai Son;Hsin-ning;Sunning;Sunninghsien;Sünninghsien;Taicheng;Taicheng Jiedao;Taishan;Taishan Shi;Tajshan';Thoi-san-su;Thòi-sân-sṳ;Toishan;Toyshan;ZCA;tai cheng;tai cheng jie dao;tai shan;tai shan shi;taisan si;tayshan;tayyshan;Đài Sơn;Тайшань;טאישאן;تائشان;تائیشان;تايشان;تایشان;台城;台城街道;台山;台山市;타이산 시; +city::1793724;Tai'an;T'ai-an-hsien;T'ai-an-shih;Tai'an;Taianfu;Tai’an;Tajan';T’ai-an-hsien;T’ai-an-shih;Тайань; +city::1793743;Suzhou;Su-hsien;Suchow;Suchzhou;Suxian;Suzhou;su zhou shi;Сучжоу;شيۇجۇ شەھىرى;宿州市; +city::1793774;Suozhen;Huantai;So-chen;Suozhen;Suozhencun; +city::1793879;Suizhou;Suej-cou;Suej-čou;Suejdzou;Sui;Sui-chiu-chhi;Sui-ciu;Sui-hsien;Suichow;Suixian;Sujchzhou;Suî-chiu-chhī;Sùi-ciŭ;Tuy Chau;Tùy Châu;ssu-ijeou si;sui zhou;sui zhou shi;swyzhw;Суејџоу;Суйчжоу;سویژؤ;随州市;隨州;쑤이저우 시; +city::1793889;Suixi;Sui-ch'i;Sui-ch'i-k'ou;Sui-ch'i-shih;Sui-chi-chen;Sui-ch’i;Sui-ch’i-k’ou;Sui-ch’i-shih;Sui-hsi;Suixi;sui xi;濉溪; +city::1793899;Suicheng;Sui-ch'eng-chen;Sui-ch’eng-chen;Sui-ning-ch'eng;Sui-ning-ch’eng;Sui-ning-hsien;Suicheng;Suining; +city::1793900;Suining;Soi-ning;Suej-ning;Sui-leng-chhi;Sui-nen-su;Sui-ning-hsien;Suining;Sujnin;Suynin;Sôi-nìng;Súi-nèn-sṳ;Sūi-lêng-chhī;Toai Ninh;Toại Ninh;ssu-ining si;sui ning;sui ning shi;swynyng;Суйнин;سوئنینگ;سوینینگ;遂宁;遂宁市;遂寧;遂寧市;쑤이닝 시; +city::1794035;Songjiang;Songjiang;Songjiang Qu;Sunchiang;Sung-chiang;Sung-chiang-hsien;Sungkiang;Sungkiang-hsien;Sunkiang;Sunkiangfu;song jiang;song jiang qu;松江;松江区; +city::1794140;Sishui;Sishui;Ssu-shui;Ssu-shui-hsien;Szeshuihsien; +city::1794479;Laixi;Lai-hsi;Laixi;Laixi Shi;Shui-chi;Shui-kou-t'ou;Shui-kou-t’ou;Shuiji;Shuikowtow; +city::1794794;Shouguang;Chiu-shou-kuang;Shou-kuang;Shou-kuang-hsien;Shouguan;Shouguang;Showkwang;Шоугуан; +city::1794806;Shizuishan;Shih-tsui;Shih-tsui-shan;Shih-tsui-shan-shih;Shih-tsui-tzu;Shitszuyshan';Shitszuyshan’;Shizuishan; +city::1794825;Shizilu;Chu-nan;Chü-nan;Junan;Shih-tzu-lu;Shizilu; +city::1794903;Shiyan;Chap-ian-chhi;Cha̍p-ián-chhī;S-jen;Sek-ieng;Shih-yen;Shih-yen-chen;Shih-yen-shih;Shijan';Shijen;Shiyan;Shiyan Shi;Shujen;Sĕk-iēng;Thap Yen;Thập Yển;WDS;seuyen si;shi yan;shi yan shi;shyyan;Š-jen;Шиянь;Шијен;Шъйен;شییان;十堰;十堰市;스옌 시; +city::1794904;Shiyan;Shih-yen;Shijan;Shiyan;Шиян; +city::1794947;Shiwan;Shih-wan;Shiwan;Shiwan Jiedao;shi wan;shi wan jie dao;石湾;石湾街道; +city::1794971;Shitanjing;Shih-t'an-ching;Shih-t’an-ching;Shitanjing; +city::1795055;Shiqiao;P'an-yu-hsien;Panyu;P’an-yu-hsien;Shekkiu;Shih-ch'iao;Shih-ch'iao-chen;Shih-ch’iao;Shih-ch’iao-chen;Shikiu;Shiqiao;Shiqiao Jiedao;fan yu;shi qiao;shi qiao jie dao;市桥;市桥街道;番禺; +city::1795060;Shiqi;Chung-shan;Chung-shan-ku-chih;Heungschan;Heungshan;Hsiang-shan;Shekki;Shih-ch'i;Shih-ch'i-chen;Shih-ch’i;Shih-ch’i-chen;Shiqi;Shiqi Jiedao;Shiqizhen;Zhongshan;shi qi;shi qi jie dao;石岐;石岐街道; +city::1795166;Shima;Longhai;Lung-hai;Shih-ma;Shih-ma-chen;Shima;shi ma;Шима;石码; +city::1795184;Shilong;Shehlung;Sheklung;Shih-lung;Shilong;Shilong Zhen;shi long;shi long zhen;石龙;石龙镇; +city::1795196;Tongchuanshi;Deng-chiong;Dè̤ng-chiŏng;GJong Xuyen;Shih-li-p'u;Shih-li-p’u;Shilipu;T'ung-ch'uan;T'ung-ch'uan-shih;Tang-chhoan-chhi;Tchung-cchuan;Tchung-čchuan;Tongchuan;Tongchuanshi;Tunchuan';Tungchuan;Tâng-chhoan-chhī;T’ung-ch’uan;T’ung-ch’uan-shih;tong chuan;tong chuan shi;tungchwan si;twngchwan;Đồng Xuyên;Тунгчуан;Тунчуань;تونگچوان;銅川;銅川市;铜川市;퉁촨 시; +city::1795270;Shijiazhuang;Chen-t'ou;Chen-t’ou;Chentow;Chioh-ka-chng-chhi;Chio̍h-ka-chng-chhī;S'-tia-cuang;SJW;Shiczjachzhuan;Shih-chia-chuang;Shih-chia-chuang-shih;Shih-chuang-shih;Shih-men;Shih-men-shih;Shihjiazhuang;Shihkiachwan;Shihkiachwang;Shijiazhuang;Shijiazhuang Shi;Shitszyachzhuan;Shizhjazhuan;Shudzjadzhuan;Sicsiacsuang;Sidziadzuangas;Sidzjadzuana;Sigjaguango;Sioh-ga-cong;Sitziazouank;Siŏh-gă-cŏng;Swzgyahcuengh;Thach Gia Trang;Thạch Gia Trang;chux ceiy cwng;sa-cyacvanga;seujajwang si;sh-gyʼgwwʼng;shi jia zhuang;shi jia zhuang shi;shidziajuani;shyjyatshwangh;shyjyazhwang;sijiyajhu'anga;sizi'azu'anga;Ŝiĝjaĝŭango;Šidziadžuangas;Šidzjadžuana;Š’-ťia-čuang;Σιτζιαζουάγκ;Шижяжуан;Шицзячжуан;Шиђаџуанг;Шъдзяджуан;Շիցզյաչժուան;שה-גיאגוואנג;شىجياجۇاڭ شەھىرى;شيجياتشوانغ;شیجیاژوانگ;शिजियाझुआंग;ष-च्याच्वांग;ਸ਼ੀਜ਼ੀਆਜ਼ੂਆਂਗ;ฉือเจียจวง;შიძიაჯუანი;石家庄;石家庄市;石家荘;石家荘市;石家莊;石家莊市;스자좡 시; +city::1795565;Shenzhen;Bao'an;Chhum-chun-su;Chhṳ̂m-chun-sṳ;Gorad Shehn'chzhehn';Pao-an;Pao-an-hsien;SZX;Sen-cen;Sencsen;Sendzenas;Senjeno;Senzen;Sham Chun Hu;Shehn'chzhehn';Shen'chzhen';Shen-ch'uan;Shen-ch'uan-chen;Shen-ch'uan-hsu;Shen-ch'üan;Shen-ch'üan-chen;Shen-ch'üan-hsü;Shen-chen;Shen-chun;Shendzen;Shenzhen;Shiem Chun;Shumchun;Shumchün;Shundzhun;Tham Quyen;Thâm Quyến;Tschhimtschun;cenccen;sainazaina;sein cein;senacena;sencena;senjhena;seonjeon si;shen zhen;shen zhen shi;shensen shi;shynzhyn;shynzyn;simcheon;sng'n;Ŝenĵeno;Šen-čen;Šendženas;Šenžen;Горад Шэньчжэнь;Шеньчжень;Шенџен;Шънджън;Шэньчжэнь;שנג'ן;شن‌ژن;شينزين;شینژین;شېنجېن شەھىرى;शेन्झेन;षेंचेन;শেনচেন;ਸ਼ੈਨਜ਼ੈਨ;சென்ச்சென்;షెన్‌జెన్;เซินเจิ้น;深セン市;深圳;深圳市;선전 시;심천; +city::1795579;Yanta;Hsin;Hsin-hsien;Hsin-hsien-ch'eng;Hsin-hsien-ch’eng;Shen-hsien;Shenxian;Sinhsien;Yanta;yan ta;雁塔; +city::1795632;Shenjiamen;P'u-t'o;Putuo;P’u-t’o;San Ka Mun;Shen-chia-men;Shen-chia-men-chen;Shenjiamen;Shenjiamen Jiedao;Shenjiamenzhen;Shenkiamen;Sinkeamun;chen jia men;chen jia men jie dao;沈家门;沈家门街道; +city::1795816;Shashi;SHS;Sha-shih;Sha-shih-shih;Sha-sze;Shashi;Shasi;Shaze;Shazhe;Шаши; +city::1795842;Shaping;Gaohe;Hao-shan;Kao-hao;Kao-ho;Sha-p'ing;Sha-p'ing-chen;Sha-p'ing-hsu;Sha-p’ing;Sha-p’ing-chen;Sha-p’ing-hsü;Shaping;Shaping Jiedao;sha ping;sha ping jie dao;沙坪;沙坪街道; +city::1795855;Shaoxing;RNX;Sao-sing;Saosing;Shao-hsing;Shaohing;Shaohingfu;Shaosin;Shaosing;Shaoxing;Shawshin shehiri;Siau-heng-chhi;Sieu-hing;Siêu-hĭng;Siāu-heng-chhī;Sjaoxing;Thieu Hung;Thiệu Hưng;saosing si;shao xing;shao xing shi;shawksynj;shawshng;shawshyng;soheung;Ŝaosing;Šao-sing;Шаосин;Шаосинг;شاوشنگ;شاوشینگ;شاوكسينج;紹興;紹興市;绍兴;绍兴市;사오싱 시;소흥; +city::1795857;Shaowu;Shao-wu-hsien;Shaowu;shao wu;邵武; +city::1795874;Shaoguan;Ch'u-chiang;Ch'u-chiang-hsien;Chao-kuan;Ch’ü-chiang;Ch’ü-chiang-hsien;HSC;Kakong;Kiukianghsien;Kukiang;Kukong;Kukong-hsien;Kükiang;Kükong;Kükong-hsien;Sao-kuan;Saoguan;Seu-koan-su;Shao-chou;Shao-kuan;Shaoguan;Shaoguan';Shaokwan;Shiuchow;Shiukuan;Siau-koan-chhi;Sieu-guang;Siâu-koan-chhī;Sièu-guăng;Sèu-kôan-sṳ;Thieu Quan;Thiều Quan;saogwan si;shao guan;shao guan shi;shawgwan;Ŝaoguan;Šao-kuan;Шаогуан;Шаогуань;שאוגואן;شاؤگوآن;شاوگوان;韶关;韶关市;韶関市;韶關;韶關市;사오관 시; +city::1795919;Shancheng;Shan;Shan-hsien;Shancheng;Shanxian; +city::1795928;Shanwei;San Vi;San-mi-su;San-mî-sṳ;San-wej;Sang-muoi;Shan'vehj;Shanwei;Swabue;Sán Vĩ;Sáng-muōi;Sòaⁿ-bóe-chhī;san-wei si;shan wei;shan wei shi;shanwy;shanwyy;shanwyyy;Šan-wej;Шаньвэй;شانوئی;شانوی;شانویئی;汕尾;汕尾市;산웨이 시; +city::1795940;Shantou;SWA;San GJau;San-tchou;San-theu-su;Sang-tau;Santou;Santouo;Shan'tou;Shan-t'ou-shih;Shan-t’ou-shih;Shantou;Shantow;Sjantou;Swatow;Sán Đầu;Sáng-tàu;Sân-thèu-sṳ;Sòaⁿ-thâu-chhī;santeou si;saw thea;shan tou;shan tou shi;shantw;shantww;Ŝantoŭo;Šan-tchou;Šantou;Шантоу;Шаньтоу;שנטאו;شانتو;شانتوؤ;شەنتۇ شەھىرى;ซัวเถา;汕头;汕头市;汕頭;汕頭市;산터우 시; +city::1795941;Shanting;; +city::1796236;Shanghai;SHA;San'nkae;Sanchajus;Sangaj;Sangay;Sanghaj;Sanghay;Sanhaja;Sanhajo;Sanxay;Schanghai;Shang-hai;Shang-hai-shih;Shangai;Shangaj;Shanghai;Shanghai - shang hai;Shanghai - 上海;Shankhaj;Sjanghae;Sjanghai;Sjanghæ;Szanghaj;Thuong Hai;Thượng Hải;Xangai;cankay;sanghae;sanghai;seiynghi;shang hai;shang hai shi;shanghay;shanghhay;shanhai;zhong guo shang hai;Ŝanhajo;Şangay;Şanghay;Şanxay;Šanchajus;Šangaj;Šanghaj;Šanhaja;Σανγκάη;Шангај;Шанхай;שאנגחאי;شانغهاي;شانگهای;شاڭخەي;شاڭخەي شەھىرى;சாங்காய்;เซี่ยงไฮ้;შანჰაი;上海;上海市;中国上海;상하이;상해; +city::1796421;Shahecheng;Sha-ho;Sha-ho-ch'eng-kuan;Sha-ho-ch’eng-kuan;Sha-ho-hsien;Shahe;Shahecheng;Shahhsien;Shakhe; +city::1796556;Sanya;Gorad San'ja;SYX;Sam-a-chhi;Sam-a-chhī;Sama;Samah;San'ja;San-ah;San-ja;San-ya-chen;San-ya-chiang;San-ya-chiang-shih;Sang-a;Sanj;Sanya;Senya shehiri;Săng-ā;Tam A;Tam Á;Ya Xian;Ya-hsien;Yai-hsien;Yehsien;san ya;san ya shi;sanya;ssan-ya si;Горад Санья;Санья;سانيا;سانیا;ซานย่า;སན་ཡ་གྲོང་ཁྱེར།;三亚;三亚市;三亜市;三亞;싼야 시; +city::1796663;Sanming;SQJ;Sam-beng-chhi;Sam-bêng-chhī;Sam-min-su;San'min;San-ming;San-ming-hsien;San-ming-shih;San-yuan;San-yuan-hsien;San-yüan;San-yüan-hsien;Sang-ming;Sanming;Senming shehiri;Sâm-mìn-sṳ;Săng-mìng;Tam Minh;san ming;san ming shi;sanmng;sanmyng;ssanming si;Санминг;Саньмин;سانمنگ;سانمینگ;三明;三明市;싼밍 시; +city::1797038;Runing;Ju-nan;Ju-nan-hsien;Juning;Runan;Runing;ru ning;汝宁; +city::1797120;Fuqing;Fu-ch'ing;Fu-ch'ing-hsien;Fu-ch'ing-hsien-ch'eng;Fu-ch’ing;Fu-ch’ing-hsien;Fu-ch’ing-hsien-ch’eng;Fucin';Fuqing;Futsing;Putsinghsien;Rongcheng;Фуцинь; +city::1797121;Jieyang;Chieh-yang;Chieh-yang-hsien;Chieh-yung;Chien Yang;Czejan;Giek-iong;Giék-iòng;Jieyang;Kiat-iong-chhi;Kiat-iông-chhī;Kiehyang;Kityang;Kityang-hsien;Rongcheng;SWA;Tie-jang;Yet Duong;Yết Dương;jie yang;jie yang shi;jieyang si;jy yang;jyyyang;Ťie-jang;Цзеян;جی یانگ;جیئیانگ;جیه‌یانگ;掲陽市;揭阳;揭阳市;揭陽;지에양 시; +city::1797132;Rizhao;Donggang;Jichaohsien;Jih-chao;Jih-chao-hsien;Rijao;Rizhao;Rizhao Jiedao;dong gang;ri zhao;ri zhao jie dao;ri zhao shi;东港;日照;日照市;日照街道; +city::1797181;Renqiu;Jen-ch'iu;Jen-ch'iu-ch'eng-kuan;Jen-ch'iu-hsien;Jen-ch’iu;Jen-ch’iu-ch’eng-kuan;Jen-ch’iu-hsien;Jenkiu;Jenkiuhsien;Renqiu;Zhen'tsyu;Zhen’tsyu;ren qiu shi;任丘市; +city::1797264;Quzhou;Cchue-cou;Ch'u;Ch'u-chou;Ch'u-hsien;Ch'u-hsien-ch'eng;Chu-chow;Chuchowfu;Ch’ü;Ch’ü-chou;Ch’ü-hsien;Ch’ü-hsien-ch’eng;Cjujchzhou;Cu Chau;Cù Châu;Gu-ciu;Gṳ̀-ciŭ;JUZ;Ku-chiu-chhi;Kû-chiu-chhī;Quxian;Quzhou;chwijeou si;chywzhww;kw zhw;kwjaw;qu zhou;qu zhou shi;Čchü-čou;Цюйчжоу;كو زهو;چیوژوو;کوجاو;衢州;衢州市;취저우 시; +city::1797318;Qujing;Cchue-ting;Ch'u-ching;Ch'u-ching-hsien;Chiu-ch'u-ching;Chiu-ch’ü-ching;Ch’ü-ching;Ch’ü-ching-hsien;Cjujczin;Khiok-cheng-chhi;Khiok-chēng-chhī;Khuc Tinh;Khúc Tĩnh;Ku-tsing-fu;Kuoh-ceng;Kutsing;Kutsinghsien;Kuóh-cêng;Kü-tsing-fu;Kütsing;Nan-ning;Qujing;Qujing Hiria;chu cing;chwijing si;chwjng;qu jing;qu jing shi;Čchü-ťing;Цюйцзин;چوجنگ;ฉู่จิ้ง;曲靖;曲靖市;취징 시; +city::1797333;Qufu;Cchue-fu;Ch'u-fou;Ch'u-fou-hsien;Ch'u-fou-hsien-ch'eng;Ch'u-fu-hsien;Chu-fu;Chü-fu;Ch’u-fu-hsien;Ch’ü-fou;Ch’ü-fou-hsien;Ch’ü-fou-hsien-ch’eng;Cjujfu;Csuefu;Csüfu;Khuc Phu;Khúc Phụ;Kinfowhsien;Kufow;Küfow;Qufu;chwipu si;cufu;cuphu;qu fu shi;qwfw;tshywfw;tsiuipu;zwpw;Čchü-fu;Цюйфу;צופו;تشيوفو;قوفو;चूफ़ू;ചൂഫു;ციუიფუ;ጩፉ;曲阜市;취푸 시; +city::1797353;Quanzhou;Cchuean-cou;Ch'uan-chou;Ch'uan-chou-shih;Chhien-chu-su;Chhièn-chû-sṳ;Chin-chiang;Chin-chiang-hsien;Chinchew;Chinchu;Choan-chiu-chhi;Chuanchowfu;Chueenju shehiri;Chôan-chiu-chhī;Chüanchowfu;Chüenju shehiri;Ch’üan-chou;Ch’üan-chou-shih;Ciong-ciu;Ciuandzou;Ciòng-ciŭ;Cjuan'chzhou;JJN;Quantsjou;Quanzhou;Tsin-chiang;Tsingkianghsien;Tsinkiang;Tuyen Chau;Tuyền Châu;Zaitun;Zayton;che wiyn cow;chwanzhw;chwianjeou si;chwynzhw;kwanzhw;quan zhou;quan zhou shi;tshwantshw;Čchüan-čou;Čiuandžou;Цюаньчжоу;تشوانتشو;چوئنژو;چوانژو;کوانژو;เฉวียนโจว;泉州;泉州市;취안저우 시; +city::1797417;Wuxi;Ch'i-yang;Ch'i-yang-ch'eng;Ch'i-yang-hsien;Ch’i-yang;Ch’i-yang-ch’eng;Ch’i-yang-hsien;Kiyang;Kiyang-hsien;Qiyang;Wuxi;Wuxi Zhen;wu xi;wu xi zhen;浯溪;浯溪镇; +city::1797438;Zhuangyuan;Ch'i-hsia;Ch'i-hsia-hsien;Ch’i-hsia;Ch’i-hsia-hsien;Qixia;Qixia Shi;Tsisia;Zhuangyuan;qi xia shi;zhuang yuan;庄园;栖霞市; +city::1797535;Qiongshan;Ch'iung-chou;Ch'iung-shan;Ch'iung-shan-hsien;Ch’iung-chou;Ch’iung-shan;Ch’iung-shan-hsien;Hoihow;Kiung chow fu;Kiungchow;Kiungshan;Kiungshan-hsien;Qiongshan;Qiongzhou; +city::1797543;Qionghu;Qionghu;Yuan-chiang;Yuan-chiang-hsien;Yuanjiang Shi;Yuankiang;Yuankiang-hsien;Yuen Kong;Yüan-chiang;Yüan-chiang-hsien;Yüankiang;Yüankiang-hsien;qiong hu;yuan jiang shi;沅江市;琼湖; +city::1797551;Qinzhou;Cchin-cou;Ch'in;Ch'in-chou;Ch'in-chou-chen;Ch'in-chou-chuang-tsu-tzu-chih-hsien;Ch'in-hsien;Chinchow;Ch’in;Ch’in-chou;Ch’in-chou-chen;Ch’in-chou-chuang-tsu-tzu-chih-hsien;Ch’in-hsien;Cin'chzhou;Ginhcouh;Kham Chau;Khim-chiu-chhi;Khim-chiu-chhī;Khim-chu-su;Khâm Châu;Khîm-chû-sṳ;King-ciu;Kĭng-ciŭ;Qinzhou;Yamchow;Yamhsien;chinjeou si;chnzhww;kynzhw;qin zhou;qin zhou shi;Čchin-čou;Циньчжоу;چنژوؤ;چنژوو;کینژو;欽州;欽州市;钦州;钦州市;친저우 시; +city::1797575;Qinnan;Ch'in-nan;Ch'in-nan-ts'ang;Qinnancang; +city::1797595;Qinhuangdao;BPE;Cchin-chuang-tao;Ch'in-huang-tao;Ch'in-huang-tao-shih;Chin-hong-to-chhi;Ching Wang Tao;Chinwangtao;Chinxuangdaw shehiri;Chîn-hông-tó-chhī;Ch’in-huang-tao;Ch’in-huang-tao-shih;Cin'khuandao;Cing-huong-do;Cinhuangdao;Cinhuangdauo;Cinkhuandao;Cinkhuangdao;Cjinhuandao;Cjiņhuandao;Cìng-huòng-dō̤;Qinhuangdao;Qínhuángdǎo;SHP;Tan Hoang GJao;Tần Hoàng Đảo;chinhwangdao si;kynghwangdaw;qin huang dao;qin huang dao shi;tshnhwanghdaw;Ĉinhŭangdaŭo;Čchin-chuang-tao;Činhuangdao;Ћинхуангдао;Цинхуандао;Циньхуандао;Ціньхуандао;تشنهوانغداو;چینہوانگداو;کینگهوانگداو;秦皇岛;秦皇岛市;秦皇島;秦皇島市;친황다오 시; +city::1797658;Jinjiang;Ceng-gong;Ch'ing-yang;Ch'ing-yang-chen;Chin-chiang;Chin-kang-chhi;Chìn-kang-chhī;Ch’ing-yang;Ch’ing-yang-chen;Czin'czjan;Céng-gŏng;JJN;Jinjiang;Jinjiang Shi;Jìnjiāng;Qingyang;Qingyang Zhen;Tan Giang;Tsin-kong-su;Tsìn-kông-sṳ;Tấn Giang;jin jiang;jin jiang shi;jinjang si;jnjyang;jnjyang fwjyan;jynjyang;qing yang;qing yang zhen;Цзиньцзян;جنجیانگ;جنجیانگ، فوجیان;جینجیانگ;晉江;晋江;晋江市;青阳;青阳镇;진장 시; +city::1797793;Qingquan;Ch'i-shui;Ch'i-shui-hsien-ch'eng;Ch’i-shui;Ch’i-shui-hsien-ch’eng;Cincjuan';Hsi-shui;Hsi-shui-hsien;Kishui-hsien;Qingquan;Qingshui Zhen;Sishui;Xishui;Xishui Xian;qing quan;qing quan zhen;xi shui xian;Цинцюань;浠水县;清泉;清泉镇; +city::1797873;Huai'an;Ch'ing-chiang;Ch'ing-chiang-p'u;Ch'ing-chiang-shih;Ch’ing-chiang;Ch’ing-chiang-p’u;Ch’ing-chiang-shih;HIA;Huai'an;Huai-yin;Huai-yin-ch'eng;Huai-yin-ch’eng;Huai-yin-hsien;Huai-yin-shih;Huaiyin;Hwaiyin;Hwaiyin-hsien;Qingjiang;Tsingkiangpo;Tsinkiangpu; +city::1797929;Qingdao;Cching-tao;Ch'ing-tao;Ch'ing-tao-shih;Chheng-to-chhi;Chheng-tó-chhī;Chindao;Ching-do;Chĭng-dō̤;Ch’ing-tao;Ch’ing-tao-shih;Cindao;Cingdao;Cjindao;Csingtao;Qingdao;Qingdao Shi;Sindao;TAO;Thanh GJao;Thanh Đảo;Tsin'nktao;Tsingtao;Tsingtau;ching tea;chingdao si;chngڈaw;chyngdaw;chyng‌dayw;cingada'o;kigada'o;kuyintavo;qing dao;qing dao shi;tshynghdaw;zyngdʼw;Čching-tao;Čingdao;Τσινγκτάο;Ћингдао;Циндао;Ціндао;Чиндао;Чиңдау;Ցինդաո;צינגדאו;تشينغداو;چنگڈاؤ;چىڭداۋ شەھىرى;چینگداؤ;چینگ‌دائو;चिंगदाओ;ਕਿੰਗਦਾਓ;குயிங்தவோ;ชิงเต่า;ချင်းတောင်မြို့;青岛;青岛市;青島;青島市;칭다오 시; +city::1797945;Qingyuan;Cching-juean;Ch'ing-yuan;Ch'ing-yuan-hsien;Chheng-oan-chhi;Chheng-oán-chhī;Chhin-yen-su;Chhîn-yén-sṳ;Ching-uong;Chĭng-uōng;Ch’ing-yüan;Ch’ing-yüan-hsien;Cinujuan';Qingcheng;Qingyuan;Thanh Vien;Thanh Viễn;Tsingyuan;Tsingyun;Tsingyunhsien;Tsingyüan;Tsingyün;Tsingyünhsien;ching-wian si;chngywan;chyngywan;kyngwan;qing yuan;qing yuan shi;Čching-jüan;Цинъюань;چنگیوآن;چینگیوان;کینگوان;清远;清远市;清遠;清遠市;칭위안 시; +city::1798082;Hongqiao;Ch'i-tung;Ch’i-tung;Hongqiao;Hung-ch'iao;Hung-ch'iao-chen;Hung-ch'iao-shih;Hung-ch’iao;Hung-ch’iao-chen;Hung-ch’iao-shih;Hungkiao;Khuncjao;Qidong;hong qiao;Хунцяо;洪桥; +city::1798422;Puyang Chengguanzhen;K'ai-chou;Kaichow;K’ai-chou;P'u-yang-hsien;Puyan';Puyang;Puyang Chengguanzhen;Puyan’;P’u-yang-hsien;pu yang;pu yang cheng guan zhen;濮阳;濮阳城关镇; +city::1798425;Puyang;P'u-chiang;P'u-chiang-hsien-ch'eng;P'u-yang-chen;Pujiang;Pukiang;Pukianghsien;Puyang;Puyang Jiedao;P’u-chiang;P’u-chiang-hsien-ch’eng;P’u-yang-chen;pu yang;pu yang jie dao;浦阳;浦阳街道; +city::1798449;Putian;Buo-dieng;Buò-dièng;Hinghwa;Hinghwafu;Hsing-hua;P'u-t'ien;P'u-t'ien-hsien;P'u-t'ien-hsien-ch'eng;Pchu-tchien;Pho-chhan-chhi;Phu GJien;Phu-thien-su;Phô͘-chhân-chhī;Phù-thièn-sṳ;Phủ Điền;Putian;Putian Shi;Putjan';Putjen;Putyen shehiri;P’u-t’ien;P’u-t’ien-hsien;P’u-t’ien-hsien-ch’eng;ho tian;ho tian shi;pu tian;pu tian shi;putyen si;pwtyan;Путянь;Путјен;پوتیان;ホ田;ホ田市;莆田;莆田市;푸톈 시; +city::1798473;Puqi;P'u-ch'i;P'u-ch'i-hsien;Puchihhsien;Puqi;P’u-ch’i;P’u-ch’i-hsien; +city::1798480;Pumiao;P'u-ching;P'u-ching-chen;P'u-ching-hsu;P'u-maio;P'u-miao-chen;P'u-miao-hsu;Pu chi;Pumiao;Pumiao Zhen;P’u-ching;P’u-ching-chen;P’u-ching-hsü;P’u-maio;P’u-miao-chen;P’u-miao-hsü;Yongning;Yung-ning;Yung-ning-hsien;pu miao;pu miao zhen;蒲庙;蒲庙镇; +city::1798490;Pulandian;Adams;Hou-lung-fang;Hsin-chin;Huranten;P'u-lan-tien;P'u-lan-tien-chen;Po-lan-te;Pulandian;P’u-lan-tien;P’u-lan-tien-chen;Xinjin; +city::1798548;Poyang;Boyang;Jao-chou;Jaochow;P'o-yang-chen;P'o-yang-hsien;P'o-yang-hsien-ch'eng;Pojankhu;Poyang;Poyang Xian;Poyang Zhen;P’o-yang-chen;P’o-yang-hsien;P’o-yang-hsien-ch’eng;po yang;po yang xian;po yang zhen;Поянху;鄱阳;鄱阳县;鄱阳镇; +city::1798632;Pingyin;P'ing-yin-hsien;Pingyin;P’ing-yin-hsien; +city::1798634;Pingyi;P'ing-i;P'ing-i-chen;P'ing-i-chi;Pingyi;P’ing-i;P’ing-i-chen;P’ing-i-chi;Ta-p'ing-i;Ta-p’ing-i; +city::1798654;Pingxiang;Bing-hiong;Binh Huong;Bìng-hiŏng;Bình Hương;Dingsiang;P'ing-hsiang;P'ing-hsiang-chen;P'ing-hsiang-hsien;P'ing-hsiang-hsien-ch'eng;P'ing-hsiang-shih;PXG;Pching-siang;Pheng-hiong-chhi;Phin-hiong-su;Phêng-hiong-chhī;Phìn-hiông-sṳ;Pingsiang;Pingsiang-hsien;Pingsjang;Pingxiang;Pingxiang Shi;Pinsjan;P’ing-hsiang;P’ing-hsiang-chen;P’ing-hsiang-hsien;P’ing-hsiang-hsien-ch’eng;P’ing-hsiang-shih;ping xiang;ping xiang shi;pingsyang si;pngshyang;pyngshyang;Пингсјанг;Пинсян;پنگشیانگ;پینگشیانگ;萍乡;萍乡市;萍郷;萍郷市;萍鄉;핑샹 시; +city::1798713;Pingshan;Hui-tung;Huidong;Ping-shan-hsu;Ping-shan-hsü;Pingshan;ping shan;平山; +city::1798733;Pingnan;Pingnam;Pingnam-hsien;Pingnamyun;Pingnamyün;Pingnan;Pingnan Zhen;ping nan;ping nan zhen;平南;平南镇; +city::1798760;Pingliang;Bing-liong;Binh Luong;Bìng-liòng;Bình Lương;P'ing-liang-hsien;P'ing-liang-shih;Pching-liang;Peng-liang-chhi;Pilian;Pingliang;Pingliang Shi;Pinljan;Pinlyan;Pêng-liâng-chhī;P’ing-liang-hsien;P’ing-liang-shih;ping liang;ping liang shi;pinglyang si;pnglyang;Пинлян;Պիլիան;پنگلیانگ;平凉;平凉市;平涼;平涼市;핑량 시; +city::1798821;Pingdu;P'ing-tu;P'ing-tu-hsien;Pindu;Pingdu;P’ing-tu;P’ing-tu-hsien;Пинду; +city::1798827;Pingdingshan;Bing-ding-sang;Binh GJinh Son;Bìng-dīng-săng;Bình Đỉnh Sơn;Chu-ko-chen;Chu-ko-miao;P'ing-ting-shan;P'ing-ting-shan-shih;Pching-ting-san;Pching-ting-šan;Peng-teng-san-chhi;Pindinshan;Pindinshan';Pindinshan’;Pingdingsano;Pingdingshan;Pingdingsjan;Pingdingŝano;Pêng-téng-san-chhī;P’ing-ting-shan;P’ing-ting-shan-shih;Tekshi choqqiliq tagh shehiri;ping ding shan;ping ding shan shi;pingdingsan si;pyngdyngshan;Пингдингшан;Пиндиншан;Пиндиншань;پنگڈنگشان;پینگدینگشان;平頂山;平頂山市;平顶山;平顶山市;핑딩산 시; +city::1798946;Pengcheng;P'eng-ch'eng-chen;Penchenchzhen';Penchenchzhen’;Pengcheng;P’eng-ch’eng-chen; +city::1798998;Dadukou;Dadukou;Dadukou Jiedao;Dukou;Pan'chzhikhua;Panzhihua;Ta-tu-k'ou;Ta-tu-k’ou;Tu-k'ou;Tu-k'ou-shih;Tu-k’ou;Tu-k’ou-shih;da du kou;da du kou jie dao;Паньчжихуа;大渡口;大渡口街道; +city::1799348;Ningyang;Ning-yang-hsien;Ningyang;Ninyan; +city::1799352;Yutan;Ning-hsiang;Ning-hsiang-hsien;Ningsiang;Ningsiang-hsien;Ningxiang;Ningxiang Xian;Yutan;ning xiang xian;yu tan;宁乡县;玉潭; +city::1799383;Ninghai;Mou-p'ing;Mou-p'ing-hsien;Mou-p’ing;Mou-p’ing-hsien;Mowping;Muping;Ning-hai;Ninghai;Ninghai Jiedao;Ninghaichow;ning hai;ning hai jie dao;宁海;宁海街道; +city::1799384;Ninghai;Ning-hai-hsien;Ninghai;ning hai;宁海; +city::1799397;Ningbo;Chiang-pei-an;Gorad Ninbo;Leng-pho-chhi;Lêng-pho-chhī;NGB;Nen-po-su;Ninbo;Ning-hsien;Ning-po;Ning-po-shih;Ningbo;Ningbo Shi;Ningbó;Ningpo;Ninh Ba;Nèn-pô-sṳ;Nìng-pŏ̤;Yin-hsien;hning paw;nangbw;ning bo;ning bo shi;ningbo si;nngbw;nynghbw;Горад Нінбо;Нинбо;Нингбо;Нінбо;نانگبو;ننگبو;نىڭبو شەھىرى;نينغبو;หนิงปัว;宁波;宁波市;寧波;寧波市;닝보 시; +city::1799491;Neijiang;Lai-kang-chhi;Lāi-kang-chhī;Nehjczjan;Nei-chiang;Nei-chiang-hsien;Nei-chiang-shih;Neijiang;Neikiang;Neikianghsien;Nej-tiang;Nej-ťiang;Nejgjan;Nejĝjan;Noi Giang;Noi-geng;Nui-kong-su;Nui-kông-sṳ;Nô̤i-gĕ̤ng;Nội Giang;nayjyang;nei jiang;nei jiang shi;neijang si;Нејђанг;Нэйцзян;نائجیانگ;نایجیانگ;內江;内江;内江市;네이장 시; +city::1799552;Nanzhou;Nan;Nan Xian;Nan-hsien;Nanchowting;Nanxian;Nanzhou;nan xian;nan zhou;南县;南洲; +city::1799574;Nanzhang Chengguanzhen;Nan-chang;Nan-chang-hsien;Nanzhang;Nanzhang Chengguanzhen;nan zhang cheng guan zhen;南漳城关镇; +city::1799629;Nanyang;Lam-iong-chhi;Lâm-iông-chhī;NNY;Nam Duong;Nam Dương;Nan'jan;Nan-jang;Nan-yang-shih;Nang-iong;Nanjang;Nanyan;Nanyang;Nanyang i Henan;Nenyang shehiri;Nàng-iòng;nan yang;nan yang shi;nan-yang si;Наньян;Нанјанг;نانیانگ، ہینان;南阳市;南陽;南陽市;난양 시; +city::1799722;Nantong;Lam-thong-chhi;Lâm-thong-chhī;NTG;Nam Thong;Nam Thông;Nan'tun;Nan-t'ung;Nan-t'ung-hsien;Nan-t'ung-shih;Nan-tchung;Nan-t’ung;Nan-t’ung-hsien;Nan-t’ung-shih;Nang-tung;Nantong;Nantun;Nantung;Nentung shehiri;Nàng-tŭng;T'ung-chou;Tunchow;Tungchow;T’ung-chou;hna nthng;nan tong;nan tong shi;nantang;nantung si;nantwng;Нантун;Нантунг;Наньтун;نانتانگ;نانتونگ;หนานทง;南通;南通市;난퉁 시; +city::1799832;Pucheng;Fu-chang;Nanpu;Nanpu Zhen;P'u-ch'eng-hsien;Pucheng;Pucheng Xian;P’u-ch’eng-hsien;nan pu;nan pu zhen;pu cheng;pu cheng xian;南浦;南浦镇;浦城;蒲城县; +city::1799846;Nanping;Lam-peng-chhi;Lâm-pêng-chhī;Nam Binh;Nam Bình;Nam-phin-su;Nan'pin;Nan-p'ing-hsien;Nan-p'ing-hsien-ch'eng;Nan-p'ing-shih;Nan-pching;Nan-p’ing-hsien;Nan-p’ing-hsien-ch’eng;Nan-p’ing-shih;Nang-bing;Nanping;Nenping shehiri;Nàm-phìn-sṳ;Nàng-bìng;Yenping;Yenping-fu;nan ping;nan ping shi;nanping si;nanpng;nanpyng;Наньпин;نانپنگ;نانپینگ;南平;南平市;난핑 시; +city::1799869;Nanning;Lam-leng-chhi;Lâm-lêng-chhī;NNG;Nam Ninh;Nam-nen-su;Namzningz;Nan'nin;Nan-ning;Nan-ning-shih;Nang-ning;Nanin;Naning;Naningas;Naningo;Nannin;Nannina;Nanning;Nanning Shi;Naņnina;Nàm-nèn-sṳ;Nàng-nìng;Yung-ning;Yung-ning-hsien;hnan hning;nan ning;nan ning shi;nananinga;nanning si;nannyng;nanyng;nanyngh;Нанин;Нанинг;Наньнин;Наньнін;ناننینگ;نانينغ;نانینگ;نان‌نینگ;نەننىڭ شەھىرى;नाननींग;หนานหนิง;ནན་ཉིང་གྲོང་ཁྱེར།;南宁;南宁市;南寧;南寧市;난닝 시; +city::1799897;Nanma;I-yuan;I-yüan;Nanma;Nanma Zhen;Yiyuan;nan ma;nan ma zhen;南麻;南麻镇; +city::1799908;Nanlong;Nan-pu;Nan-pu-hsien;Nanbu;Nanlong;nan long;南隆; +city::1799962;Nanjing;Gorad Nankin;Lâm-kiaⁿ-chhī;NKG;Nam Kinh;Nam-kin-su;Namkin;Nan'czin;Nan'zhin;Nan-ching;Nan-ching-shih;Nanchino;Nanchinum;Nandzing;Nandzjina;Nandžing;Nang-ging;Nanjing;Nanjing Shi;Nankijn;Nankin;Nankinas;Nanking;Nankingo;Nankín;Nanquim;Nanquin;Nanquín;Nantsin'nk;Nanzging;Naņdzjina;Nàm-kîn-sṳ;Nàng-gĭng;hnan cing;namgyeong;nan jing;nan jing shi;nanajiga;nanajinga;nancin;nanjina;nanjing;nanjing si;nanjinga;nanjng;nanjyng;nanjyngh;nʼngyng;Ναντσίνγκ;Горад Нанкін;Нанкин;Нанкинг;Нанкін;Наньжин;Наньцзин;Нәнҗиң;Նանկին;נאנגינג;نانجنگ;نانجينغ;نانجینگ;نەنجىڭ شەھىرى;नांजिंग;नानजिंग;नान्जिङ;ਨਾਨਜਿੰਗ;நாஞ்சிங்;നാൻജിങ്;หนานจิง;နန်ကျင်းမြို့;ნანკინი;南京;南京市;난징;난징 시;남경; +city::1800065;Nangong;Nan'gun;Nan-kung;Nan-kung-ch'eng-kuan;Nan-kung-ch’eng-kuan;Nan-kung-hsien;Nangong;Nan’gun; +city::1800088;Nanfeng;Hoikin;Hoikin-hsien;K'ai-chien;K'ai-chien-hsien;K’ai-chien;K’ai-chien-hsien;Nan-feng-chen;Nanfeng;Nanfeng Zhen;nan feng;nan feng zhen;南丰;南丰镇; +city::1800101;Nandu;Nan-tu;Nan-tu-hsu;Nan-tu-hsü;Nandu; +city::1800107;Nanding;Nan-ting;Nanding; +city::1800146;Nanchong;Lam-chhiong-chhi;Lâm-chhiong-chhī;NAO;Nam Sung;Nan'chun;Nan-cchung;Nan-ch'ung;Nan-ch'ung-hsien;Nan-ch'ung-shih;Nan-ch’ung;Nan-ch’ung-hsien;Nan-ch’ung-shih;Nan-čchung;Nanchong;Nanchung;Nang-chung;Nan’chun;Nàng-chṳ̆ng;Shun'tsin;Shun-ch'ing;Shun-ch’ing;Shunking;Shun’tsin;nan chong;nan chong shi;nanchung si;nanchwng;Нанчунг;Наньчун;نانچونگ;南充;南充市;난충 시; +city::1800163;Nanchang;Gorad Nan'chan;KHN;Lam-chhiong-chhi;Lâm-chhiong-chhī;Nam Xuong;Nam Xương;Nam-chhong-su;Nan'chan;Nan-cchang;Nan-ch'ang-hsien;Nan-ch'ang-shih;Nan-ch’ang-hsien;Nan-ch’ang-shih;Nan-čchang;Nancana;Nancangas;Nancano;Nanchan;Nanchang;Nanchang-fu;Nancianga;Nancsang;Nang-chiong;Nanzcangh;Nanĉano;Nančangas;Naņčana;Nàm-chhông-sṳ;Nàng-chiŏng;nan chang;nan chang shi;nanacanga;nanacham;nanachanna;nanchang;nanchang si;nantshangh;nʼnzʼng;Горад Наньчан;Нанчан;Нанчанг;Наньчан;נאנצאנג;نانتشانغ;نانچانگ;نەنچاڭ شەھىرى;नानचांग;নানছাং;ਨਾਨਛਾਂਙ;နန်ချောင့်မြို့;南昌;南昌市;난창 시; +city::1800430;Miyang;Mi-lo;Mi-lo-hsien;Mi-lo-hsien-i-tsu-tzu-chih-ch'u;Mi-lo-hsien-i-tsu-tzu-chih-ch’ü;Mile;Mile Xian;Miyang;mi lei;mi lei xian;mi yang;弥勒;弥勒县;弥阳; +city::1800498;Mingshui;Chang-ch'iu;Chang-ch’iu;Ming-shui-chen;Mingshui;Zhangqiu; +city::1800519;Mingguang;Chia-shan;Chia-shan-hsien;Jiashan;Ming-kuang;Ming-kuang-chen;Mingguang;Mingkwang; +city::1800521;Minggang;Ming-chiang;Ming-kang;Minggang;Mingkiang;Mintszyan; +city::1800627;Mianyang;Bian-iong-chhi;Biân-iông-chhī;MIG;Mianyang;Mianyang Shi;Mien Duong;Mien-chou;Mien-jang;Mien-yang;Mien-yang-hsien;Mienchow;Mieng-iong;Mienjan;Mièng-iòng;Miên Dương;Mjan'jan;Mjenjang;Myan'yan;Myan’yan;mian yang;mian yang shi;myanyang;myen-yang si;Миенян;Мяньян;Мјенјанг;ميەنياڭ شەھىرى;میانیانگ;綿陽;綿陽市;绵阳;绵阳市;몐양 시; +city::1800657;Mentougou;Men-t'ou-kou;Men-t'ou-kou-ho-t'an;Men-t’ou-kou;Men-t’ou-kou-ho-t’an;Mentougou;men tou gou;门头沟; +city::1800675;Mengyin;Meng-yin-hsien;Mengyin; +city::1800764;Mengcheng Chengguanzhen;Meng-ch'eng-hsien;Meng-ch’eng-hsien;Mengcheng;Mengcheng Chengguanzhen;meng cheng cheng guan zhen;蒙城城关镇; +city::1800779;Meizhou;Chia-ying;Kaying;MXZ;Mai Chau;Mai Châu;Mehjchzhou;Mei;Mei-ch'eng-chen;Mei-ch’eng-chen;Mei-hsien;Meixian;Meizhou;Meizhou Shi;Mej-cou;Mej-čou;Moi-chiu-su;Mui-chiu-chhi;Mui-ciu;Mòi-chiu-sṳ;Mùi-ciŭ;Mûi-chiu-chhī;mawzhwa;mei zhou;mei zhou shi;meijeou si;myyyzhww;myyzhw;Мэйчжоу;مئیژو;ماوژوا;میئیژوؤ;梅州;梅州市;메이저우 시; +city::1800829;Wuchuan;Hai-lu;Mei-lu-shih;Mei-mao;Meilu;Muiluk;Wuchuan;wu chuan;吴川; +city::1801401;Majie;Ma-chieh;Majie;Majiezi;ma jie;马街; +city::1801455;Zhijiang;Chih-chiang;Chikiang;GJN;Ma-chia-tien;Majiadian;Zhijiang; +city::1801582;Macheng;HBM;Ma-ch'eng-hsien;Ma-ch’eng-hsien;Macheng;Máchéng;ma cheng;ma cheng shi;macheong si;麻城;麻城市;마청 시; +city::1801615;Maba;Ch'u-chiang;Ch’ü-chiang;Ma-pa;Ma-pa-hsu;Ma-pa-hsü;Maba;Qujiang;ma ba;马坝; +city::1801722;Lushun;Lu-shun-k'ou;Lu-shun-k'ou-ch'u;Lu-shun-shih;Lueshun;Lueshunkou;Lushun;Lusunkchou;Lušunkchou;Lü-shun-k’ou;Lü-shun-k’ou-ch’ü;Lü-shun-shih;Lüshun;Lüshunkou;Por Arthur;Port Arthur;Port-Artur;Redzyun;Riojun;Ryojun;Rëdzyun;lu shun;lu shun kou qu;lwisun;port-artur;Порт-Артур;פורט ארתור;旅順;旅顺口区;뤼순; +city::1801757;Luqiao;Lu-ch'iao;Lu-ch'iao-chen;Lu-ch’iao;Lu-ch’iao-chen;Luqiao;Luqiaozhen;lu qiao;路桥; +city::1801792;Luoyang;Gorad Lajan;Honan;Honanfu;LYA;Lac Duong;Lo-yand;Lo-yang;Lo-yang-hsien;Lo-yang-shih;Lojan;Lojan shaary;Lojang;Lok-iong;Lok-iong-chhi;Lo̍k-iông-chhī;Luo-jang;Luojan;Luojang;Luojangas;Luojango;Luoyang;Lŏk-iòng;Lŭojango;Lạc Dương;lk xei yng;loiani;lu'oyanga;luo yang;luo yang shi;lwoyang si;lwwyang;lwyangh;lwywyang;Горад Лаян;Лоян;Лоян шаары;Луоян;Луојанг;לוו-יאנג;لوئویانگ;لوویانگ;لويانغ;لوياڭ شەھىرى;लुओयांग;ลกเอี๋ยง;ལུའོ་དབྱང་།;ლოიანი;洛阳;洛阳市;洛陽;洛陽市;뤄양 시; +city::1801797;Luoyang;Lo-yang;Lojan;Luoyang;luo yang;Лоян;洛阳; +city::1801799;Luoyang;Boluo;Fu-ch'eng;Fu-ch'eng-chen;Fu-ch’eng;Fu-ch’eng-chen;Hsien-ch'eng-chen;Hsien-ch’eng-chen;Lojan;Luoyang;Luoyang Zhen;Po-ch'eng-chen;Po-ch’eng-chen;Po-lo;Po-lo-hsien;Poklo;Poklohsien;luo yang;Лоян;罗阳; +city::1801850;Luorong;Chiu-lo-jung;Lo-jung;Lo-jung-hsien;Lo-jung-hsien-ch'eng;Lo-jung-hsien-ch’eng;Loyung-hsien;Luorong; +city::1801934;Luohe;Lo-he;Lo-ho;Lo-ho-chai;Lo-ho-shih;Lokheh;Lui-ho-chhi;Luo-che;Luohe;Luokhe;Lúi-hô-chhī;T'a-ho;T'a-ho-chai;Tak-o;Thap Ha;Tháp Hà;Ták-ò̤;T’a-ho;T’a-ho-chai;luo he;luo he shi;lwhy;lwoheo si;raku he shi;Лохэ;Луохе;لوهی;ラク河市;漯河;漯河市;뤄허 시; +city::1801983;Luocheng;Lo-ch'eng-p'u;Lo-ch’eng-p’u;Luocheng;luo cheng;罗城; +city::1802068;Lucheng;Lu-chiang;Lu-chiang-hsien;Lucheng;Lujiang;Lujiang Xian;Lukiang;Lukiang-hsien;lu cheng;lu jiang xian;庐城;庐江县; +city::1802171;Kangding;Dardo;K'an-ting;K'ang-ting;K'ang-ting-hsien;KGT;Kandin;Kangding;Ta-chien-lu;Tarchendo;Tatsienlu;Tatsientu;Кандин;དར་མད།;དར་མདོ།; +city::1802177;Lubu;Lu-pu;Lubu;Lubu Zhen;lu bu;lu bu zhen;禄步;禄步镇; +city::1802204;Luancheng;Luan'chen;Luan-ch'eng-ch'eng-kuan;Luan-ch'eng-hsien;Luan-ch’eng-ch’eng-kuan;Luan-ch’eng-hsien;Luancheng;Luan’chen;Lwanchenghsien; +city::1802238;Loudi;Lau GJe;Leu-di;Lo-te-chhi;Lou-ti;Lou-ti-chen;Lou-ti-shih;Loudi;Lâu Để;Lèu-dī;Lô͘-té-chhī;lou di;lou di shi;lwady;lwdy;lwodi si;Лоуди;لؤدی;لوادی;娄底市;婁底;婁底市;뤄디 시; +city::1802476;Longquan;I-men;I-men-hsien;Longquan;Longquan Zhen;Luncjuan';Yimen;Yimen Xian;long quan;yi men;yi men xian;Лунцюань;易门;易门县;龙泉; +city::1802550;Longgang;Longgang;Longgang Jiedao;Longkou;Lung-k'ou;Lung-kou-shih;Lung-k’ou;Lungkow;long gang;long gang jie dao;龙港;龙港街道; +city::1802788;Licheng;Li-ch'eng-chen;Li-ch’eng-chen;Li-yang-ch'eng;Li-yang-ch’eng;Li-yang-hsien;Licheng;Licheng Zhen;Liyang;Liyang Shi;li cheng;li cheng zhen;li yang shi;凓城;凓城镇;溧阳市; +city::1802875;Guankou;Guankou;Liu-yang-hsien;Liujang;Liuyang;Liuyang Shi;guan kou;liu yang;liu yang shi;Лиуянг;关口;浏阳;浏阳市; +city::1802940;Puning;Liu-sha-chen;Liu-sha-hsu;Liu-sha-hsü;Liusha;OPQ;P'u-ning-hsien;Pho Ninh;Phổ Ninh;Puning;P’u-ning-hsien;pu ning;pu ning shi;puning si;pwnyng;پونینگ;普宁;普宁市;普寧;普寧市;푸닝 시; +city::1803245;Lishui;Ch'u-chou;Chuchow;Chuchowfu;Chuzhoufu;Ch’u-chou;La-cui;Le Thuy;Le-chui-chhi;Li-shui-hsien;Li-suej;Li-šuej;Lishui;Lishui Shi;Lishui Xian;Lishui i Zhejiang;Lishuj;Lisjui;Lâ̤-cūi;Lē-chúi-chhī;Lệ Thủy;chu zhou fu;li shui;li shui shi;li shui xian;lisu-i si;lyshay;lyshwy;lyshwyy;Лишуй;ليشوي;لیشای;لیشوئی;丽水;丽水县;丽水市;处州府;麗水;麗水市;리수이 시; +city::1803266;Lintong;Lin'tun;Lin-t'ung;Lin-t'ung-hsien;Lin-t’ung;Lin-t’ung-hsien;Lintong;Lin’tun;Lishan;lin tong;临潼; +city::1803318;Linyi;I-chou;Ichow;Ichowfu;LYI;Lam Nghi;Lan-shan;Lim-ki-chhi;Lin'i;Lin-i;Lin-i-hsien;Lin-i-shih;Ling-gi;Linji;Linyi;Liuyihsien;Lâm Nghi;Lìng-gì;Lîm-kî-chhī;Yichow;lin yi;lin yi shi;lin-i si;lnyy;lynyay;Линьи;Линји;لنیی;لینیای;临沂;临沂市;臨沂;臨沂市;린이 시; +city::1803331;Linxia Chengguanzhen;Ho-chou;Khechzhou;Lin'sja;Lin'sya;Lin-hsia;Lin-hsia-hsien;Lin-hsia-shih;Lin-hsin;Linsia;Linxia;Linxia Chengguanzhen;Linxia Shi;Lin’sya;lin xia cheng guan zhen;lin xia shi;Линься;临夏城关镇;临夏市; +city::1803334;Linxi;Lin-hsi;Lin-hsi-chuang;Linsi;Linxi;lin xi;林西; +city::1803352;Linshui;; +city::1803364;Linqu;Lin-ch'u;Lin-ch'u-hsien;Lin-ch’ü;Lin-ch’ü-hsien;Linqu; +city::1803365;Linqiong;Ch'iung-lai;Chiung-lai-hsien;Chiungchou;Ch’iung-lai;Kiungchow;Kiunglaihsien;Kung-lai;Linqiong;Qionglai;Tsyunlay;lin qiong;临邛; +city::1803367;Qingnian;Lin-ch'ing;Lin-ch'ing-hsien;Lin-ch'ing-shih;Lin-ch’ing;Lin-ch’ing-hsien;Lin-ch’ing-shih;Linqing;Lintsing;Lintsingchow;Qingnian;lin qing;qing nian;临青;青年; +city::1803374;Linping;Lin-p'ing-chen;Lin-p’ing-chen;Linping;Linpingzhen;Yu-hang Hsien;Yuhang;Yü-hang Hsien;lin ping;lin ping zhen;临平;临平镇; +city::1803422;Linhai;LHC;Lin-hai-hsien;Linhai;T'ai-chou;Taichow;Taichowfu;Taizhou;T’ai-chou;lin hai;临海; +city::1803551;Lingcheng;Beiliu;Lingcheng;Paklow;Paklow-hsien;Pei-liu;Pei-liu-hsien;Pie-liu; +city::1803560;Lincheng;Hsien-ch'eng-chen;Hsien-ch’eng-chen;Limkao-hsien;Limko;Limkohsien;Limkou;Limkow;Lin'chehn;Lin-kae;Lin-kao;Lin-kao-chen;Lin-kao-hsien;Lincheng;Lincheng Zhen;Lingao;Lingao Xian;Lunkao;lin cheng;lin cheng zhen;lin gao xian;Линьчэн;临城;临城镇;临高县; +city::1803567;Linfen;LFQ;Lam Phan;Lim-hun-chhi;Lin'fehn';Lin'fyn';Lin-fen;Lin-fen-hsien;Linfen;Linfen Shi;Ling-hung;Lâm Phần;Lìng-hŭng;Lîm-hun-chhī;Pingyang;Pingyangfu;Saratsi;Yaodu Qu;lin fen;lin fen shi;linpeon si;lynfn;lynfyn;ping yang;ping yang fu;yao dou qu;Линфен;Линьфынь;Линьфэнь;لینفن;لینفین;临汾;临汾市;尧都区;平阳;平阳府;臨汾;臨汾市;린펀 시; +city::1803616;Xishan;Li-ling-ch'eng;Li-ling-ch’eng;Li-ling-hsien;Lilin;Liling;Liling Shi;Xishan;li ling;li ling shi;xi shan;Лилин;西山;醴陵;醴陵市; +city::1803782;Lichuan;Li-ch'uan-hsien;Li-ch’uan-hsien;Lichuan;Lichuan';Lichwan-hsien;Личуань; +city::1803791;Licheng;Licheng;Licheng Jiedao;Tseng-ch'eng;Tseng-ch'eng-hsien;Tseng-ch’eng;Tseng-ch’eng-hsien;Tsengching;Tsengshing;Zengcheng;ceng cheng;li cheng;li cheng jie dao;曾城;荔城;荔城街道; +city::1803834;Liaocheng;Liao-ccheng;Liao-ch'eng-hsien;Liao-ch'eng-shih;Liao-ch’eng-hsien;Liao-ch’eng-shih;Liao-čcheng;Liaoceng;Liaocheng;Liaoĉeng;Lieu Thanh;Lieu-siang;Liâu-siâⁿ-chhī;Lièu-siàng;Liêu Thành;Ljaochehn;Ljaocheng;Tung-ch'ang;Tung-ch’ang;Tungchangfu;liao cheng;liao cheng shi;lyaocheong si;lyawchyng;Љаоченг;Ляочэн;لیاوچینگ;聊城;聊城市;랴오청 시; +city::1803841;Lianzhou;Lianxian;Lianzhou;Lianzhou Zhen;Lien;Lien-chou;Lien-chou-chen;Lien-chou-ko-tsu-tzu-chih-hsien;Lien-hsien;Lien-yang;Linchow;Linhsien;lian zhou;lian zhou zhen;连州;连州镇; +city::1803842;Lianzhou;Hepu;Ho-p'u;Ho-p'u-hsien;Ho-p’u;Ho-p’u-hsien;Hoppo;Hoppohsien;Lianzhou;Lianzhou Zhen;Lien-chou;Lien-chou-chen;Limchow;Limchowfu;Linchow;lian zhou;lian zhou zhen;廉州;廉州镇; +city::1803886;Lianran;Anning;Anning Shi;Anning-chow;Lianran;Lianran Zhen;an ning;an ning shi;lian ran;lian ran zhen;安宁;安宁市;连然;连然镇; +city::1803936;Wuwei;Liang-chou;Liang-chow;Liangzhou;Wu-wei-hsien;Wuwei;Wuwei Shi;wu wei;wu wei shi;武威;武威市; +city::1803948;Liangxiang;Liang-hsiang;Liang-hsiang-chen;Liang-hsiang-hsien;Liangsiang;Liangxiang;Liangxiangzhen;Lyansyan;liang xiang;良乡; +city::1804120;Lianjiang;Lei-pei;Liancheng;Lianjiang;Lien-chiang;Lien-chiang-hsien;Limkong;Limkong-hsien;Lunkong;Shih-ch'eng;Shih-ch’eng;lian jiang;廉江; +city::1804153;Leshan;Chia-ting;Kiating;Kiatingfu;Lac Son;Le-san;Le-šan;Lehshan';Leshan;Lo-shan;Lo-shan-hsien;Lok-san-chhi;Lok-sang;Lo̍k-san-chhī;Lŏk-săng;Lạc Sơn;le shan;le shan shi;leosan si;lyshan;Лэшань;لیشان;乐山;乐山市;楽山市;樂山;러산 시; +city::1804162;Lengshuitan;Leng-shui-t'an-shih;Leng-shui-t'ang;Leng-shui-t’an-shih;Leng-shui-t’ang;Lengshuitan;Lengshuitanqu;leng shui tan;冷水滩; +city::1804169;Lengshuijiang;Lanh Thuy Giang;Leng-chiang;Leng-chiang-shih;Leng-shui-chen;Leng-shui-chiang;Leng-shui-chiang-shih;Lengshuijiang;Lãnh Thủy Giang;leng shui jiang;leng shui jiang shi;leongsu-ijang si;冷水江;冷水江市;렁수이장 시; +city::1804208;Leiyang;Lei-yang-hsien;Leiyang;lei yang;耒阳; +city::1804252;Lecheng;Lechang;Lecheng;Lecheng Jiedao;Lo-ch'ang;Lo-ch'ang-hsien;Lo-ch’ang;Lo-ch’ang-hsien;Loh Ch'ang;Loh Ch’ang;Lohchong-hsien;Lokcheon;Lokchong;le cheng;le cheng jie dao;乐城;乐城街道; +city::1804386;Laohekou;Guanghua;Ho-k'ou-chen;Ho-k’ou-chen;Kuang-hua;LHK;Lao-ho-k'ou;Lao-ho-k’ou;Laohekou;Laohokow;Lǎohékǒu;lao he kou;老河口; +city::1804430;Lanzhou;Kao-lan-hsien;Kaolan;LHW;Lan Chau;Lan Châu;Lan'chzhou;Lan'chzhou shaary;Lan'zhou;Lan-chiu-chhi;Lan-chou;Lan-chou-shih;Lan-cou;Lan-čou;Lanchjou;Lanchow;Lanchowfu;Lancsou;Landzhou;Landzou;Landžou;Lang-ciu;Langouo;Lantsjou;Lantsoou;Lanzcouh;Lanzhou;Lanzhou Shi;Lanĝoŭo;Laņdžou;Làng-ciŭ;Lân-chiu-chhī;hlan cow;lan zhou;lan zhou shi;lanazu;lanjeou si;lanjhu;lantshw;lanzhw;Λαντσόου;Ланджоу;Ланьжоу;Ланьчжоу;Ланьчжоу шаары;Ланџоу;لانتشو;لانزہو;لانژو;لەنجۇ شەھىرى;लान्झू;ਲਾਨਜ਼ੂ;หลานโจว;ལན་ཀྲོའུ།;兰州;兰州市;蘭州;蘭州市;란저우 시; +city::1804442;Lanxi;Lan-ch'i;Lan-ch'i-hsien;Lan-ch'i-hsien-ch'eng;Lan-ch’i;Lan-ch’i-hsien;Lan-ch’i-hsien-ch’eng;Lan-hsi;Lanxi; +city::1804451;Lianyuan;Lan-t'ien;Lan-t'ien-chen;Lan-t'ien-shih;Lan-t’ien;Lan-t’ien-chen;Lan-t’ien-shih;Lantian;Lianyuan;Lien Nguyen;Lien-yuan;Lien-yüan;Liên Nguyên;lian yuan;lian yuan shi;lyen-wian si;涟源;涟源市;漣源市;롄위안 시; +city::1804540;Langfang;An-tz'u;An-tz’u;Anci;LFA;Lanfan;Lang-fang-chen;Langfang;lang fang shi;Ланфан;廊坊市; +city::1804578;Weichanglu;I;I-hsien;Lai-chou;Lai-chow-fu;Laichow;Laizhou;Laizhou Shi;Weichanglu;Weichanglu Jiedao;Ye Xian;Yeh;Yehsien;Yixian;lai zhou;lai zhou shi;wen chang lu;wen chang lu jie dao;ye xian;掖县;文昌路;文昌路街道;莱州;莱州市; +city::1804586;Laiyang;Lai-yang-hsien;Lai-yank;Laiyang; +city::1804591;Laiwu;Chiu-lai-wu;Lai Vu;Lai-bu-chhi;Lai-wu-hsien;Laiwu;Laj-wu;Laju;Lâi-bû-chhī;lai wu;lai wu shi;laiu si;layww;Лайу;لائوو;莱芜市;莱蕪市;萊蕪;라이우 시; +city::1804609;Laibin;Lai Tan;Lai Tân;Lai-bing;Lai-pin;Lai-pin-chen;Lai-pin-chhi;Lai-pin-hsien;Laibin;Laiping;Laj-pin;Lajbin';Leizbingz;Loi-pin-su;Lài-bĭng;Lâi-pin-chhī;Lòi-pîn-sṳ;lai bin;lai bin shi;laibin si;laybn;laybyn;layybn;Лайбинь;لائبن;لائیبن;لایبین;來賓;来宾市;来賓市;라이빈 시; +city::1804645;Kunyang;Kunyang;P'ing-yang-hsien;P'ing-yang-hsien-ch'eng;Pingyang;P’ing-yang-hsien;P’ing-yang-hsien-ch’eng; +city::1804651;Kunming;Con Minh;Côn Minh;Gvwnhmingz;K'un-ming-hsien;K'un-ming-shih;KMG;Kchun-ming;Khun-beng-chhi;Khun-bêng-chhī;Kong-ming;Kounmink;Kuenming;Kun'min;Kun'min shaary;Kun'min';Kunmin;Kunmina;Kunming;Kunming Shi;Kunmingas;Kunmingo;Kuņmina;Kŏng-mìng;Kүn'min;K’un-ming-hsien;K’un-ming-shih;Yun-nan;Yunnanfu;Yün-nan;Yünnanfu;kanamiga;khunh ming;kun ming;kun ming shi;kunaminga;kunming si;kunminga;kwnmng;kwnmyng;kwnmyngh;qwnmyng;Κουνμίγκ;Куенминг;Кунмин;Куньмин;Куньмин шаары;Куньминь;Куньмін;Күньмин;Կունմին;קונמינג;كونمينغ;كۈنمىڭ شەھىرى;کونمنگ;کونمینگ;کون‌مینگ;कुनमिंग;कुन्मिंग;ਕਨਮਿੰਗ;คุนหมิง;ကူမင်းမြို့;კუნმინი;昆明;昆明市;쿤밍 시; +city::1804850;Kaiyuan;A-mi;Ami-hsien;Amichow;K'ai-yuan-hsien;Kaiyuan;Kajjuan';K’ai-yüan-hsien;kai yuan;Кайюань;开远; +city::1804874;Kaihua;Kaihua;Kaihwa;Kaihwafu;Wen-shan-hsien;Wenshan;kai hua;开化; +city::1804879;Kaifeng;Gorad Kajfehn;K'ai-feng-hsien;K'ai-feng-shih;Kai Feng;Kai-feng Fu;Kai-fêng Fu;Kai-hung;Kaifeng;Kajfehn;Kajfen;Kajfeng;Kajfyn;Kayfin;Kchaj-feng;Keyfeng shehiri;Keyféng shehiri;Khai Phong;Khai-hong-chhi;Khai-hong-chhī;Kăi-hŭng;K’ai-feng-hsien;K’ai-feng-shih;kai feng;kai feng shi;kaipeong si;kayfng;kayfngh;kayfyng;khi feing;Горад Кайфэн;Кайфен;Кайфын;Кайфэн;Кајфенг;קאיפנג;كايفنغ;کائفینگ;کایفنگ;ไคเฟิง;კაიფინი;ካይፈንግ;开封;开封市;開封;開封市;카이펑 시; +city::1804892;Juye;Chin-yeh;Chu-yeh;Chu-yeh-hsien;Chü-yeh;Chü-yeh-hsien;Juye;Juye Zhen;Kuyehhsien;ju ye;ju ye zhen;巨野;巨野镇; +city::1804979;Juegang;Chueh-chiang;Chueh-chiang-chen;Chueh-kang;Chuehkiang;Chüeh-chiang;Chüeh-chiang-chen;Chüeh-kang;Chüehkiang;Ju-tung;Juegang;Juegang Zhen;Juegangzhen;Rudong Xian;jue gang;jue gang zhen;ru dong xian;如东县;掘港;掘港镇; +city::1805179;Jiujiang;Chiu-chiang;Chiu-chiang-hsien;Chiu-chiang-shih;Ciuciang;Cuu Giang;Czjuczjan;Cửu Giang;Dzjudzjan;JIU;Jiujiang;Kiukiang;Kiukiang-hsien;Te-hua;Tiou-tiang;jiu jiang;jiu jiang shi;jujang si;Ťiou-ťiang;Ђуђанг;Дзюдзян;Цзюцзян;ཅིའུ་ཅང་།;九江;九江市;주장 시; +city::1805267;Jishui;Chi-shui;Chi-shui-chi;Jishui; +city::1805270;Qianzhou;Ch'ien-ch'eng;Chi-shou;Chi-shou-hsien;Ch’ien-ch’eng;Jishou;Jishou Shi;Kishow;Qianzhou;So-li;gan zhou;ji shou;ji shou shi;乾州;吉首;吉首市; +city::1805298;Jinzhou;Chin;Chin-chou;Chin-chou-chen;Chin-chow;Chin-hsien;Czin'chzhou;Jinxian;Jinzhou;Kin;Kinchow;Kinhsien;Kinshu;Kinsyu;Tschintschou;Цзиньчжоу; +city::1805334;Jinxiangzhen;Chin-chen-wei;Chin-chen-wei-ch'eng;Chin-chen-wei-ch’eng;Chin-hsiang;Jinxiang;Jinxiangzhen;Kinchenwei;Kinsiang;jin xiang;金乡; +city::1805379;Jinshi;Chin-shih;Ching-shih;Ching-shih-chen;Ching-shih-shih;Jinshi;Jinshi Shi;Tsingshih;jin shi;jin shi shi;津市;津市市; +city::1805408;Jinsha;Chin-sha;Chin-sha-chen;Czin'sha;Jinsha;Jinsha Zhen;Kinsha;Nan-t'ung;Nan-t'ung-hsien;Nan-t’ung;Nan-t’ung-hsien;Nantong;Tongzhou;Tongzhou Shi;jin sha;jin sha zhen;tong zhou;tong zhou shi;Цзиньша;通州;通州市;金沙;金沙镇; +city::1805505;Jinjiang;Ch'eng-mai New City;Ch'eng-mai-hsien;Chengmai;Chengmai Xian;Chin-chiang;Chin-chiang-chen;Chin-chiang-shih;Ching-mae;Chinkiang;Ch’eng-mai New City;Ch’eng-mai-hsien;Fa Hi;Jinjiang;Kimkang;Teng-mai-hsien;Tsingmai;Tsingmai-hsien;cheng mai xian;jin jiang;澄迈县;金江; +city::1805515;Jinji;Chin-chi;Chin-chi-hsu;Chin-chi-hsü;Jinji; +city::1805518;Jining;Ca-ning;Che-leng-chhi;Chi-ning;Chi-ning-hsien;Chi-ning-shih;Chè-lêng-chhī;Csining;Czinin;Cá̤-nìng;Gjining;JNG;Jining;Te Ninh;Ti-ning;Tsi-ning-hsien;Tsining;Tế Ninh;gynyng;ji ning;ji ning shi;jining si;jnyng;jynyng;Ĝjining;Ťi-ning;Цзинин;גינינג;جنینگ;جینینگ;济宁市;済寧市;濟寧;지닝 시; +city::1805528;Jinhua;Chin-hua;Chin-hua-hsien;Chin-hua-hsien-ch'eng;Chin-hua-hsien-ch’eng;Chin-hua-shih;Czin'khua;Ging-hua;Gĭng-huà;Jinhua;Jinhua Shi;Kim Hoa;Kim-fa-su;Kim-hoa-chhi;Kim-hoâ-chhī;Kinhwa;Kinhwa-hsien;Kinhwafu;Kîm-fà-sṳ;Tin-chua;jin hua;jin hua shi;jin hua xian;jinhwa si;jynhwa;Ťin-chua;Цзиньхуа;جنہوا;جينهوا;جینهوا;金华;金华市;金華;金華市;金華縣;진화 시; +city::1805540;Jingzhou;Chiang-ling;Chiang-ling-hsien;Ching-chou;Chingchou-fu;Czinchzhou;Dzindzhou;Ging-ciu;Gĭng-ciŭ;Jiangling;Jingtsjou;Jingzhou;Keng-chiu-chhi;Keng-chiu-chhī;Kiangling;Kiangling-hsien;Kingchow;Kingchowfu;Kingling;Kinh Chau;Kinh Châu;SHS;Ting-cou;jing zhou;jing zhou shi;jingjeou si;jngzhww;jyangzhw;Ťing-čou;Дзинджоу;Цзинчжоу;جنگژوو;جیانگژو;荆州市;荊州;荊州市;징저우 시; +city::1805563;Tianchang;Ching-ching;Ching-hsing;Ching-hsing-hsien;Ching-nan;Chiu-ching-hsing;Jingnan;Jingxing;Jiujingxing;Tianchang;Tianchang Zhen;Tsingsinghsien; +city::1805611;Jingmen;Ching-men;Ching-men-hsien;Czinmehn';Ging-muong;Gĭng-muòng;Jingmen;Keng-bun-chhi;Keng-bûn-chhī;King monn;King mönn;King-men-chow;Kingmen;Kingmen-hsien;Kinh Mon;Kinh Môn;Ting-men;jing men;jing men shi;jingmeon si;jngmyn;Ťing-men;Цзинмэнь;جنگمین;جىڭمېن شەھىرى;荆门市;荊門;荊門市;징먼 시; +city::1805618;Jingling;Jingling;T'ien-men;T'ien-men-hsien;Tianmen;T’ien-men;T’ien-men-hsien; +city::1805680;Jingdezhen;Ching-te-chen;Ching-te-chen-shih;Czindehchzhehn';Fou-liang;Fou-liang-hsien;Fowliang;Fowliang-hsien;JDZ;Jingdezhen;Jingdezhen Shi;Kingtechen;Kingteh;Kingtehchen;Kingtehchin;jing de zhen;jing de zhen shi;Цзиндэчжэнь;景徳鎮;景德镇;景德镇市; +city::1805733;Jinchang;Baijiazui;Czin'chan;Ging-chiong;Gĭng-chiŏng;JIC;Jinchang;Jinchang Shi;Jinchuan;Jinchuanzhen;Kim Xuong;Kim Xương;Kim-chhiong-chhi;Kim-chhiong-chhī;Tin-cchang;jin chang;jin chang shi;jinchang si;jnchang;Ťin-čchang;Цзиньчан;Ցզինչան;جنچانگ;金昌;金昌市;진창 시; +city::1805741;Jincheng;Ceng-siang;Chin-ch'eng;Chin-ch'eng-hsien;Chin-ch’eng;Chin-ch’eng-hsien;Chìn-siâⁿ-chhī;Czin'chehn;Céng-siàng;Dzinchun;Jincheng;Jincheng Shi;Tan Thanh;Tse-chou;Tseh-chow-fu;Tsehchow;Tsincheng;Tsinchenghsien;Tấn Thành;jin cheng;jin cheng shi;jincheong si;jnchyng;jynchn;Ђинченг;Дзинчън;Цзиньчэн;جنچینگ;جینچن;晉城;晋城;晋城市;진청 시; +city::1805753;Jinan;Ca-nang;Che-lam-chhi;Chi-nam-su;Chi-nan;Chi-nan-shih;Chi-nàm-sṳ;Chè-lâm-chhī;Cijnanz;Cinanum;Csinan;Czinan';Cá̤-nàng;Dzinan;Dzinanas;Dzjinana;Dzjinaņa;Ginano;Gorad Czinan';Jinan;Jinan Shi;Li-ch'eng;Li-ch’eng;Szinan;TNA;Te Nam;Ti-nan;Tsi-nan-fu;Tsinah;Tsinan;Tzinan;Tế Nam;Zhinan';ci hnan;cinana;gynʼn;ji nan;ji nan shi;jinan si;jinana;jynan;Ĝinano;Ťi-nan;Τζινάν;Ђинан;Горад Цзінань;Дзинан;Жинань;Цзинань;Цзінань;Ցզինան;גינאן;جىنەن شەھىرى;جينان;جینان;जीनान;ਚੀਨਾਨ;จี่หนาน;ཅི་ནན།;ကျီနန်မြို့;济南;济南市;済南;済南市;濟南;濟南市;지난 시; +city::1805757;Jimo;Chi-mo;Chi-mo-hsien;Jimo;Tsimo;Tsimohsien;ji mo shi;即墨市; +city::1805798;Jijiang;Chiang-chin;Chiang-ching;Chiang-ching-ch'eng;Chiang-ching-ch’eng;Chiang-ching-hsien;Jiangjin Qu;Jijiang;Jijiang Jiedao;Kiangtsin;Kiangtsing-hsien;ji jiang;ji jiang jie dao;jiang jin qu;几江;几江街道;江津区; +city::1805833;Jiexiu;Chieh-hsien;Chieh-hsiu;Chieh-hsiu-hsien;Czesju;Gioi Huu;Giới Hưu;Jiexiu;Jiexiu Shi;Kiehsiu;Kiehsuihsien;jesyu si;jie xiu;jie xiu shi;jyyshyw;Цзесю;جیئشیو;介休;介休市;제슈 시; +city::1805844;Jieshou;Chieh-shou;Chieh-shou-chen;Chieh-shou-chi;Chieh-shou-shih;Chiehshow;Shou-t'ai;jie shou;jie shou shi;界首;界首市; +city::1805857;Jieshi;Chieh-shih;Chieh-shih-ch'eng;Chieh-shih-ch’eng;Jieshi;Jieshi Zhen;Kitchioh;jie shi;jie shi zhen;碣石;碣石镇; +city::1805884;Jiehu;Chieh-hu;Chieh-hu-chi;I-nan;Jiehu;Yinan; +city::1805935;Jiazi;Chia-tzu;Jiazi;Jiazi Zhen;Kapchi;Kapohi;jia zi;jia zi zhen;甲子;甲子镇; +city::1805953;Jiaxing;Chia-hsing;Chia-hsing-hsien;Chia-hsing-hsien-ch'eng;Chia-hsing-hsien-ch’eng;Chiahsing-Fu;Czjasin;Dziasingas;Dzjasin;Ga-hing;Gia Hung;Gia Hưng;Gă-hĭng;JXS;Jiaxing;Ka-heng-chhi;Ka-heng-chhī;Ka-shing-fu;Kashing;Kashing-hsien;Tia-sing;jasing si;jia xing;jia xing shi;jyashng;jyshang;Ťia-sing;Ђасинг;Дзясин;Цзясин;Цзясін;جياشىڭ شەھىرى;جیاشنگ;جیشانگ;嘉兴;嘉兴市;嘉興;嘉興市;자싱 시; +city::1805987;Jiaozuo;Chiao-tso;Chiao-tso-chen;Chiao-tso-kung-k'uang-ch'u;Chiao-tso-kung-k’uang-ch’ü;Chiao-tso-shih;Chiau-chok-chhi;Chiau-chok-chhī;Cieu-cauk;Ciĕu-cáuk;Czjaoczo;Gjaoguo;Jiaozuo;Tiao-cuo;Tieu Tac;Tiêu Tác;Tsiaotso;Tszyaotszochzhen;jaojjwo si;jiao zuo;jiao zuo shi;jyawzww;zhyawzw;Ĝjaoĝuo;Ťiao-cuo;Ђаоцуо;Цзяоцзо;جیاوزوو;ژیاوزو;焦作;焦作市;자오쭤 시; +city::1806096;Jiaozhou;Chiao;Chiao-hsien;Jiaocheng;Jiaoxian;Jiaozhou;Kiaochow;Kiaohsien; +city::1806097;Ningde;Jiaocheng;Ning-te;Ning-te-hsien;Ningde;Ningteh;Ningtehhsien;ning de;ning de shi;نىڭدې شەھىرى;宁德;宁德市; +city::1806167;Jian'ou;Chien-ning;Chien-ou;Chien-ou-hsien;Chien-ou-hsien-ch'eng;Chien-ou-hsien-ch’eng;Jian'ou;Jian'ou Shi;Jian’ou;Jian’ou Shi;Kienning;Kienningfu;Kienow;Kienowhsien;Zhicheng;jian ou;jian ou shi;zhi cheng;建瓯;建瓯市;芝城; +city::1806218;Jiangyan;Chiang-yen;Chiang-yen-chen;Jiangyan;Jiangyan Shi;Jiangyan Zhen;Kiangyen;T'ai-hsien;Taixian;T’ai-hsien;jiang yan;jiang yan shi;jiang yan zhen;姜堰;姜堰市;姜堰镇; +city::1806248;Jianguang;Feng-ch'eng-hsien;Feng-ch’eng-hsien;Fengcheng;Fengcheng Shi;Jianguang;feng cheng;feng cheng shi;丰城;丰城市; +city::1806299;Jiangmen;Chiang-men;Chiang-men-ch'eng;Chiang-men-ch’eng;Chiang-men-shih;Czjanmehn';Czjanmyn';Dziangmenas;Dzjanmun;Geng-muong;Giang Mon;Giang Môn;Gjanmen;Gĕ̤ng-muòng;Hsin-hui;Hsin-hui-hsien;Jiangmen;Kang-mng-chhi;Kang-mn̂g-chhī;Kong-mun-su;Kongmoon;Kongmoon City;Kongmun;Kông-mùn-sṳ;Pakhai;Sunwui;Tiang-men;Wom Moon;ZBD;jangmeon si;jiang men;jiang men shi;jyangmn;jyangmyn;zhyangmn;Ĝjanmen;Ťiang-men;Ђангмен;Дзянмън;Цзянмынь;Цзянмэнь;جیانگمن;جیانگمین;ژیانگمن;江門;江門市;江门;江门市;장먼 시; +city::1806327;Jiangkou;Chiang-k'ou;Chiang-k’ou;Jiangkou;Jiangkou Zhen;Kiang-k'ou;Kiang-k’ou;Kiangkow;jiang kou;jiang kou zhen;江口;江口镇; +city::1806408;Yangjiang;Chiang-ch'eng-chen;Chiang-ch’eng-chen;Duong Giang;Dương Giang;Iong-gong;Iong-kang-chhi;Iòng-gŏng;Iông-kang-chhī;Janczjan;Jang-tiang;Jang-ťiang;Jiangcheng;Liang-yang;Yang-chiang;Yang-chiang-hsien;Yangjiang;Yeungkong;Yeungkong-hsien;Yong-kong-su;Yòng-kông-sṳ;yang jiang;yang jiang shi;yang jyang;yangjang si;yangzhyang;yngjyang;Јангђанг;Янцзян;یانگ جیانگ;یانگژیانگ;ینگجیانگ;阳江;阳江市;陽江;陽江市;양장 시; +city::1806445;Ji'an;Chi-an;Chi-an-shih;Czian';JGS;Ji'an;Ji'an Shi;Ji’an;Ji’an Shi;Kian;Kian-hsien;Kianfu;Luling;ji an;ji an shi;Цзиань;吉安;吉安市; +city::1806466;Guangyuan;GYS;Guangjuen;Guangyuan;Guanujuan';Guong-nguong;Guōng-nguòng;Gǔangyúan;Jialing;Kong-goan-chhi;Kuan-yuan;Kuan-yüan;Kuang-juean;Kuang-jüan;Kuang-yuan;Kuang-yuan-hsien;Kuang-yüan;Kuang-yüan-hsien;Kwangyuan;Kwangyuanhsien;Kwangyüan;Kwangyüanhsien;Kóng-goân-chhī;Quang Nguyen;Quảng Nguyên;guang yuan;guang yuan shi;gwang-wian si;gwangywan;Гуангјуен;Гуанъюань;گوانگیوان;广元;广元市;広元市;廣元;광위안 시; +city::1806535;Huzhou;HZC;Hu-chou;Hu-chou-shih;Huchow;Huchowfu;Huhinghsien;Huzhou;Huzhou Shi;Wu-hsing;Wu-hsing-hsien;Wu-hsing-hsien-ch'eng;Wu-hsing-hsien-ch’eng;Wuhing;Wuxing;Wuxing Qu;hu zhou;hu zhou shi;wu xing;wu xing qu;吴兴;吴兴区;湖州;湖州市; +city::1806591;Hutang;Hutang;hu tang;湖塘; +city::1806651;Huoqiu Chengguanzhen;Ho-ch'iu;Ho-ch'iu-hsien;Ho-ch’iu;Ho-ch’iu-hsien;Huo-ch'iu;Huo-ch’iu;Huoqiu;Huoqiu Chengguanzhen;Hwokiu;Hwokiu-hsien;huo qiu cheng guan zhen;霍邱城关镇; +city::1806696;Humen;Fumunchai;Fumuntschai;Hu-men-chai;Hu-nien;Humen;Humen Zhen;Khumehn';hu men;hu men zhen;Хумэнь;虎门;虎门镇; +city::1806776;Huizhou;Chuej-cou;Chuej-čou;Fi-chu-su;Fi-chû-sṳ;HUZ;Hie-ciu;Hiê-ciŭ;Hue Chau;Hui-chiu-chhi;Hui-chou;Hui-chou-ch'eng;Hui-chou-chen;Hui-chou-ch’eng;Hui-chou-shih;Hui-yang;Hui-yang-hsien;Huichou-fu;Huitsjou;Huizhou;Huệ Châu;Hūi-chiu-chhī;Khojchzhou;Khuehjchzhou;Khuejdzou;Kuei-shan;Waichow;Waichowfu;Waiyeung;Weichow;Xuyjo shehiri;hu-ijeou si;hui zhou;hui zhou shi;hwyzhw;Хойчжоу;Хуејџоу;Хуэйчжоу;هویژو;ہوئیژوؤ;ہوئیژوو;恵州;恵州市;惠州;惠州市;후이저우 시; +city::1806840;Huilong;Ch'i-tung;Ch'i-tung-hsien;Chen-yang-shih;Ch’i-tung;Ch’i-tung-hsien;Huilong;Huilong Zhen;Kvidonga;Qidong;Qidong Shi;Wei-tung-chen;Weidong;hui long;hui long zhen;qi dong;qi dong shi;Квидонга;启动;启动市;汇龙;汇龙镇; +city::1806881;Huicheng;Hui-ch'eng-chen;Hui-ch’eng-chen;Hui-lai-hsien;Huicheng;Huilai;Hweilai;Hweilai-hsien;hui cheng;惠城; +city::1806882;Xinhui;Chiu-hsin-hui;District de Xinhui;Hsin-hui;Hsin-hui Old City;Hsin-hui-chiu-ch'eng;Hsin-hui-chiu-ch’eng;Hsin-hui-hsien;Hsin-hui-ku-chih;Hui-ch'eng-chen;Hui-ch’eng-chen;Huicheng;Sanwui;Sin-fi-khi;Sun-hui;Sun-wei;Sunweihsien;Sunwui;Sunwui Old City;Sîn-fi-khî;Tan Hoi;Tân Hội;Xinhui;Xinhui District;shynhwy;sinhu-i gu;xin hui;xin hui qu;شینهوی;新会;新会区;新會;新會區;신후이 구; +city::1806960;Huazhou;Fachow;Fahsien;Fu-ch'eng-chen;Fu-ch’eng-chen;Hau-hsien;Hua;Hua-chou;Hua-hsien;Huazhou; +city::1806988;Huayin;Hua-yin-hsien;Hua-yin-hsien-ch'eng;Hua-yin-hsien-ch’eng;Huayin;Hwayinhsien;Khuayanchuan; +city::1807112;Huangzhou;Huang-chou;Huang-chou-chen;Huang-chou-fu;Huang-kang;Huang-kang-hsien;Huang-kang-ku-chih;Huanggang;Huangzhou;Hwangchow;Hwangchow-fu;Hwangkang;Hwangkang-hsien;Khuanchzhou;Wongkong;Хуанчжоу; +city::1807143;Huangyan;HYN;Huang-yen;Huang-yen-hsien;Huang-yen-hsien-ch'eng;Huang-yen-hsien-ch’eng;Huangyan;Hwang-yen-hsien;Hwangyen;huang yan;黄岩; +city::1807234;Huangshi;Chuang-s;Chuang-š;HSD;Hoang Thach;Hoàng Thạch;Huan-shi;Huan-shih;Huang-shih;Huang-shih-shih;Huangshi;Huangshi Shi;Huangsi;Huangsji;Huangŝi;Huangši;Hwangshih;Khuangshi;Khuanshi;Khuanshu;Ng-chioh-chhi;N̂g-chio̍h-chhī;Shi hui yao;Shi-hu-yao;Shihhweiyao;Shihpao;Shikhoyya;Uong-sioh;Uòng-siŏh;huang shi;huang shi shi;hwangseu si;hwangshy;Хуангши;Хуанши;Хуаншъ;خۇئاڭشى شەھىرى;هوانگشی;ہوانگشی;黃石市;黄石;黄石市;황스 시; +city::1807301;Dasha;Dasha;Dasha Jiedao;Huangpu;Whampoa;da sha;da sha jie dao;Даша;大沙;大沙街道; +city::1807308;Huangpi;Huang-p'o;Huang-pei;Huang-pei-hsien;Huang-p’o;Huangpi;Huangpi Qu;Hwangpei;Hwangpei-hsien;huang bei;huang bei qu;黄陂;黄陂区; +city::1807339;Huangmei;Huang-mei-hsien;Huangmei;Hwangmei;Hwangmei-hsien;huang mei;黄梅; +city::1807508;Huanggang;Huang-kang;Huang-kang-ch'eng;Huang-kang-chen;Huang-kang-ch’eng;Huanggang;Huanggang Zhen;Jao-p'ing;Jao-p’ing;Khuangan;Ng kng;Raoping;Ung Kung;huang gang;Хуанган;黄冈; +city::1807544;Daxing;Dasin;Daxing;Huang-ts'un;Huang-ts'un-chen;Huang-ts’un;Huang-ts’un-chen;Huangcun;Ta-hsing;Ta-hsing-hsien;da xing;Дасин;大兴; +city::1807553;Dingcheng;Dingcheng;Huang-ch'uan-hsien;Huang-chou;Huang-ch’uan-hsien;Huangchuan;Hwangchwan;Hwangchwan-hsien;Hwangehwan;Kuang-chou;Kwangchow;ding cheng;定城; +city::1807645;Huaiyuan Chengguanzhen;Huai-yuan-hsien;Huai-yüan-hsien;Huaiyuan;Huaiyuan Chengguanzhen;Hwaiyuan;Hwaiyuanhsien;Hwaiyüan;huai yuan cheng guan zhen;怀远城关镇; +city::1807681;Huainan;; +city::1807687;Huaicheng;Huai-ch'eng-chen;Huai-chi;Huai-chi-hsien;Huai-ch’eng-chen;Huaicheng;Huaicheng Zhen;Huaiji;Waitsap;Waitsap-hsien;huai cheng;huai cheng zhen;怀城;怀城镇; +city::1807689;Huaihua;Chuaj-chua;HJJ;Hoai Hoa;Hoai-hoa-chhi;Hoài Hóa;Hoâi-hoà-chhī;Huai-hua;Huaihua;Huài-huá;Khuajkhua;Yu-shu-wan-chen;Yushuwan;Yü-shu-wan-chen;huai hua;huai hua shi;hwaihwa si;Хуайхуа;ہوایہوا;怀化市;懐化市;懷化;화이화 시; +city::1807695;Huaidian;Huai-tien;Huai-tien-chen;Huaidian;Khuaydyan;Shen-ch'iu;Shen-ch’iu;Shenqiu; +city::1807700;Huaibei;Chuaj-pej;Hoai Bac;Hoai-pak-chhi;Hoài Bắc;Hoâi-pak-chhī;Hsu-kou;Hsü-kou;Huai-baek;Huai-pei;Huai-pei-shih;Huaibei;Huaibejus;Huaibėjus;Huajbej;Huaybey;Huài-báe̤k;Khuajbehj;Khuajbej;Sui-hsi-shih;huai bei;huai bei shi;hwaibei si;hwayby;Хуайбей;Хуайбэй;Хуајбеј;Հուայբեյ;هوایبی;ہوآئیبئی;ہوائیبوئی;淮北;淮北市;화이베이 시; +city::1808106;Hongjiang;Ch'ien-yang;Ch’ien-yang;Hongjiang;Hung-chiang;Hung-chiang-chen;Hung-chiang-shih;Hungkiang;Khuntszyan; +city::1808198;Heze;Caozhou;Che-ce;Ha Trach;Ha-tek-chhi;He-tse;Heze;Ho-dek;Ho-tse;Ho-tse-shih;Hotseh;Hotseh-hsien;Hà Trạch;Hâ-te̍k-chhī;Hê-tse;Hò̤-dĕk;Khece;Khehczeh;Ko-tse;Ko-tse-hsien;Ts'ao-chou;Ts'aochow;Tsaochowfu;Ts’ao-chou;Ts’aochow;he ze;he ze shi;heojjeo si;hzh;ka ze shi;Хеце;Хэцзэ;هزه;ہازا;カ沢市;菏泽;菏泽市;菏澤;허쩌 시; +city::1808212;Hechuan;Hechuan;Heyang;Ho-ch'uan;Ho-ch'uan-hsien;Ho-ch'uan-shih;Ho-chou;Ho-ch’uan;Ho-ch’uan-hsien;Ho-ch’uan-shih;Hochow;Hochwan;Hochwan-hsien;he chuan;合川; +city::1808316;Yiyang;Heshan;I-yang;I-yang-ch'eng;I-yang-ch’eng;I-yang-hsien;I-yang-shih;I-yeng;Ijan;Yiyang;Yiyang-hsien;Иян; +city::1808336;Hepo;Chieh-hsi;Hepo;Ho-p'o;Ho-p'o-hsu;Ho-p’o;Ho-p’o-hsü;Jiexi;Khehpo;he po;Хэпо;河婆; +city::1808370;Hengyang;Cheng-jang;Fen-yong-su;Fên-yòng-sṳ;HNY;Hanh Duong;Henan;Henchow;Heng-chou;Heng-iong;Heng-iong-chhi;Heng-nan;Heng-nan-hsien;Heng-yang-ch'eng;Heng-yang-ch’eng;Heng-yang-shih;Hengchow;Hengchowfu;Hengjang;Hengjangas;Hengyang;Hengyang-hsien;Hành Dương;Hèng-iòng;Hêng-iông-chhī;Khehnujan;Khengjang;Khunjan;Xengyang shehiri;Xéngyang shehiri;heng yang;heng yang shi;heong-yang si;hngyang;Хенгјанг;Хънян;Хэнъян;Հենան;هنگیانگ;ہینگیانگ;衡阳市;衡陽;衡陽市;헝양 시; +city::1808392;Hengshui;Cheng-suej;Cheng-šuej;Hanh Thuy;Heng-chui-chhi;Heng-cui;Heng-shui-ch'eng-kuan;Heng-shui-ch’eng-kuan;Heng-shui-hsien;Hengshui;Hành Thủy;Hèng-cūi;Hêng-chúi-chhī;Khehnshuj;Khengshuej;Khenshuy;heng shui;heng shui shi;heongsu-i si;hngshwy;Хенгшуеј;Хэншуй;هنگشوی;ہینگشوئی;衡水;衡水市;헝수이 시; +city::1808722;Hefei;Che-fej;Chefei;HFE;Hak-bui;Hap-pui-chhi;Ha̍p-pûi-chhī;Hefei;Hefei Shi;Hefejo;Hefejus;Hefėjus;Heyfey;Ho-fei;Ho-fei-hsien;Ho-fei-shih;Hofej;Hop Phi;Hozfeiz;Hăk-bùi;Hợp Phì;Khefej;Khehfehj;Khufej;Lu-chou;Luchow;Luchowfu;Lunchow;haphai;he fei;he fei shi;hefe'i;heopei si;hexfey;hfyy;khfy;Χεφέι;Хефей;Хефеј;Хъфей;Хэфэй;Хөфэй;Հեյֆեյ;خفي;خېفېي شەھىر;هفئی;ہیفئی;ہیفیئی;हफै;हेफ़ेई;เหอเฝย์;合肥;合肥市;허페이 시; +city::1808744;Hede;Hede;Ho-te;Ho-te-chen;Ho-te-kung-ssu;Hsia-ssu-chiang;Khede;Sheyang;he de;she yang;Хеде;合德;射阳; +city::1808747;Hecun;Hecun;Ho-ts'un;Ho-ts'un-ch'ien;Ho-ts'un-chen;Ho-ts’un;Ho-ts’un-chen;Ho-ts’un-ch’ien; +city::1808770;Hebi;Che-pi;Hac Bich;Hao-pi;Hao-pi-chen;Hao-pi-chi;Hao-pi-shih;Hebi;Ho-pi;Ho-pi-shih;Hok-biah;Hok-piah-chhi;Hopitsi;Ho̍k-piah-chhī;Hŏk-biáh;Hạc Bích;Khebi;Khehbi;he bi;he bi shi;heobi si;Хеби;Хэби;ہئبی;鶴壁;鶴壁市;鹤壁市;허비 시; +city::1808857;Hanzhong;Chan-cung;Chan-čung;HZG;Han Trung;Han-chung;Han-chung-fu;Han-chung-shih;Han-tiong-chhi;Hang-dung;Hantai;Hantai Qu;Hanzhong;Hanzhong Shi;Hàn-tiong-chhī;Hán Trung;Háng-dṳ̆ng;Khan'chzhun;Khan’chzhun;Nan'chzhen;Nan-cheng;Nan-cheng-hsien;Nan’chzhen;han tai;han tai qu;han zhong;han zhong shi;hanjung si;Ханьчжун;ہانژونگ;汉中;汉中市;汉台;汉台区;漢中;漢中市;한중 시; +city::1808872;Chengyang;Chengyang;Chengyang Xiang;Fu'an;Fu'an Shi;Fu-an-hsien;Fuanja;Fu’an;Fu’an Shi;Hanyang;cheng yang;cheng yang xiang;fu an;fu an shi;Фуаня;城阳;城阳乡;福安;福安市; +city::1808879;Hanting;Han-t'ing-chen;Han-t’ing-chen;Hanting;Hanting Qu;Hantingchieh;Wei Xian;Wei-hsien;han ting;han ting qu;wei xian;寒亭;寒亭区;潍县; +city::1808926;Hangzhou;Chan'nktsoou;Chang-cou;Chang-čou;Gorad Khanchzhou;HGH;Hancheum;Hanchow-fu;Hanczou;Handzou;Handžou;Hang;Hang Chau;Hang-chiu-chhi;Hang-chou;Hang-chou-shih;Hang-hsien;Hangchow;Hangcsou;Hangdzou;Hangdžou;Hanggouo;Hangtsjou;Hangzcouh;Hangzhou;Hangzhou Shi;Hangĝoŭo;Hančžou;Hong-chu-su;Hong-ciu;Hàng Châu;Hâng-chiu-chhī;Hòng-chû-sṳ;Hòng-ciŭ;Khanchzhou;Khandzhou;Khangdzou;Khanzhou;Xanchjou;hang cow;hang zhou;hang zhou shi;hangacau;hangajho'u;hanghtshw;hangjeou;hangjeou si;hangju;hangzhw;hanjha;hannaco;hʼnggwʼw;kancu;Χανγκτσόου;Горад Ханчжоу;Хангџоу;Ханджоу;Ханжоу;Ханчжоу;האנגגואו;خاڭجۇ شەھىر;هانغتشو;هانگژو;ہانگژو;हांगचौ;हांगझोऊ;ਹਾਂਙਚੋ;காங்சூ;ഹാങ്ഝൗ;หางโจว;ཧང་ཀྲོའུ།;杭州;杭州市;항저우;항저우 시;항주; +city::1808931;Hangu;Han-ku;Han-ku-shih;Hangu;Khanga;Ханга; +city::1808963;Handan;Chan-tan;HDG;Ham GJan;Han-tan;Han-tan-chhi;Han-tan-hsien;Han-tan-shih;Handan;Handan Shi;Handanas;Handano;Hang-dang;Hàm Đan;Hàng-dăng;Hân-tan-chhī;Khan'dan';Khandan;han dan;han dan shi;handan;handan si;Хандан;Ханьдань;האנדאן;خەندەن شەھىرى;هاندان;ہاندان;邯郸市;邯鄲;邯鄲市;한단 시; +city::1808977;Hanchuan;Han-ch'uan-hsien;Han-ch’uan-hsien;Hanchuan;Hanchwan;Hanchwanhsien; +city::1808981;Hancheng;Han-ch'eng-hsien;Han-ch’eng-hsien;Hancheng;Khanchen; +city::1809003;Haizhou;Chiu-tung-hai;Hai-chou;Haichow;Haizhou;Tung-hai;Tung-hai-ch'eng;Tung-hai-ch’eng;Tung-hai-hsien;hai zhou;海州; +city::1809061;Jiaojiang;Hai-men-chen;Haimen;Jiaojiang; +city::1809062;Haimen;Hai-men-so;Haimen;Haimen Zhen;Haimun;Haimung;Hoimoon;hai men;hai men zhen;海门;海门镇; +city::1809077;Haikou;Haikou;Haikou Zhen;hai kou;hai kou zhen;海口;海口镇; +city::1809078;Haikou;Chaj-kchou;Gorad Khajkou;HAK;Ha k'uo-shih;Ha k’uo-shih;Hai Khau;Hai-k'ou-shih;Hai-k'ou-so-ch'eng;Hai-kau;Hai-khau-chhi;Hai-k’ou-shih;Hai-k’ou-so-ch’eng;Haijgouj;Haik-how;Haikou;Haikou Shi;Haikow;Hajkou;Hajkouo;Hajkoŭo;Heihow;Hoi Hao;Hoihau;Hoihow;Hái-kháu-chhī;Hāi-kāu;Hải Khẩu;Khajkou;Xeyko shehir;ha'iko'u;hai kou;hai kou shi;haikeou si;haykw;Горад Хайкоу;Хайкоу;Хајкоу;هايكو;هایکو;ہائکو;ہائیکؤ;हाइकोऊ;ཧའེ་ཁོའུ་གྲོང་ཁྱེར།;ဟိုင်းခိုမြို့;海口;海口市;하이커우 시; +city::1809263;Guozhen;Baoji;Chencang Qu;Gochzhen;Guo Zhen;Guo zhen;Guozhen;Guozhen zhen;Ko-chen;Kuo-chen;Pao-chi;Pao-chi-hsien;chen cang qu;guo zhen;guo zhen zhen;虢镇;虢镇镇;陈仓区; +city::1809412;Guli;Guli;Yongkang;Yung-k'ang;Yung-k'ang-hsien;Yung-k’ang;Yung-k’ang-hsien;Гули; +city::1809461;Guiyang;Goi-iong;Guejang;Guejjan;Guijangas;Guijango;Guiyang;Guiyang Shi;Gujjan;Guyan;Guyyan;Gveiyangz;Gói-iòng;Gŭijango;KWE;Kuei-chu;Kuei-yang;Kuei-yang-shih;Kuej-jang;Kui-iong-chhi;Kweichu;Kweiyang;Kweiyangfu;Kùi-iông-chhī;Queiyanga;Quy Duong;Quý Dương;ghwyyangh;gu'iyanga;gu-iyang si;gui yang;gui yang shi;gwyyang;kuy hyang;Гуейян;Гуејанг;Гуйян;Ґуйян;Գույան;غوييانغ;گوئیانگ;گۇيياڭ شەھىرى;गुइयांग;ਗੁਈਯਾਂਗ;กุ้ยหยาง;ကွေ့ယန်မြို့;貴陽;貴陽市;贵阳;贵阳市;구이양 시; +city::1809483;Guiren;Guiren;Kuei-jen;Kuei-jen-chi; +city::1809486;Guiping;Guiping;Guiping Zhen;Hsun-chou;Hsün-chou;Kuei-p'ing;Kuei-p'ing-hsien;Kuei-p’ing;Kuei-p’ing-hsien;Kweiping;Kweiping-hsien;Sun-chow-fu;Sunchow;Sunshow;Sün-chow-fu;Sünchow;gui ping;gui ping zhen;桂平;桂平镇; +city::1809498;Guilin;Garadskaja akruga Gujlin';Guejlin;Guilin;Guilin Shi;Gujlin;Gujlin';Gveilinz;KWL;Kuei-lin;Kuei-lin-shih;Kuej-lin;Kui-lim-su;Kui-lìm-sṳ;Kweilin;Kweilin-hsien;Lin-kuei;Lin-kuei-hsien;Lin-kwei;Ling-ch'uan;Ling-ch’uan;Que Lam;Quế Lâm;gu'ilina;gu-ilin si;gui lin;gui lin shi;kuy hlin;Гарадская акруга Гуйлінь;Гуейлин;Гуејлин;Гуйлинь;گۇيلىن شەھىرى;गुइलिन;กุ้ยหลิน;桂林;桂林市;구이린 시; +city::1809532;Guigang;Goi-geng;Guicheng;Guigang;Guixian;Gujgan;Gveigangj;Gói-gē̤ng;Kuei;Kuei-hsien;Kuej-kang;Kui-kang-chhi;Kui-kong-su;Kui-kóng-sṳ;Kweihsien;Kùi-káng-chhī;Quy Cang;Quý Cảng;gu-igang si;gui gang;gui gang shi;gwygang;gwyygang;Гуйган;گوئگانگ;گوئیگانگ;گویگانگ;貴港;貴港市;贵港市;구이강 시; +city::1809610;Gucheng Chengguanzhen;Gucheng;Gucheng Chengguanzhen;Ku-ch'eng;Ku-ch'eng-hsien;Ku-ch’eng;Ku-ch’eng-hsien;gu cheng cheng guan zhen;古城城关镇; +city::1809858;Guangzhou;CAN;Cantao;Canton;Cantão;Cantón;Fan-yu;Fan-yü;Guanchjou;Guanchzhou;Guanczou;Guand'ou;Guandzhou;Guandzou;Guandžou;Guangdzou;Guangdzov;Guangdžou;Guangdžov;Guangjow;Guangzhou;Guangzhou Shi;Guanzhou;Guančžou;Guaңҗu;Guong-ciu;Guōng-ciŭ;Gvangjcouh;Kanton;Kantono;Kng-chiu-chhi;Kong-chu-su;Kouan'nktsoou;Kouang-chou;Kuang-chou;Kuang-chou-shih;Kwang-chowfu;Kwangchow;Kwangtsjou;Kóng-chû-sṳ;Kńg-chiu-chhī;P'an-yu;Puyun;Puyün;P’an-yü;Quancheum;Quancjou;Quang Chau;Quançjou;Quảng Châu;Shengcheng;ghwanzw;gu'angazu;guang zhou;guang zhou shi;guanjou;gvangajho'u;gvanjea;gwangjeou;gwangjeou si;gwangzhw;gwʼnggwʼw;kantwn;kuvanco;kvangacau;kwang cow;shynyang;Κουανγκτσόου;Гуангџоу;Гуанджоу;Гуандьоу;Гуанжоу;Гуанчжоу;Гуанчжоў;Гуаңҗу;Кантон;Գուանչժոու;גואנגגואו;شینیانگ;غوانزو;کانتون;گوانگژو;گوانگ‌ژو;گۇاڭجۇ شەھىرى;क्वांगचौ;ग्वांगझोउ;ਗੁਆਂਗਜ਼ੂ;குவாங்சோ;ഗ്വാങ്ജോ;กว่างโจว;ກວ່າງໂຈວ;ཀོང་ཀྲོའུ་གྲོང་ཁྱེར།;ကွမ်ကျိုးမြို့;გუანჯოუ;广州;广州市;広州;広州市;廣州;廣州市;광저우;광저우 시; +city::1809879;Guangshui;Guangshui;Guangshui Jiedao;Kuang-shui;Kuang-shui-chen;Kuang-shui-shih;Kwangshia;Kwangshui;guang shui;guang shui jie dao;广水;广水街道; +city::1810240;Gejiu;Gejiu;Ko-chiu;Ko-chiu-hsien;Ko-chiu-shih;Kokiu;Kokiu-hsien;Kokiuchang;Ku-chiu;ge jiu shi;xi cheng;个旧市;锡城; +city::1810295;Gaozhou;Gaozhou;Kao-chou;Kaochow;Kochow;Kochowfu;Mao-ming;Mao-ming-hsien;Mowming;gao zhou;高州; +city::1810309;Gaoyou;Gaoyou;Gaoyou Shi;Gaoyou Zhen;Kao-yu;Kao-yu-ch'eng;Kao-yu-ch’eng;Kao-yu-hsien;Kaoyuchow;gao you;gao you shi;gao you zhen;高邮;高邮市;高邮镇; +city::1810437;Gaoping;Gaoping;Nan-ch'ung;Nan-ch’ung;Nanchong;gao ping;高坪; +city::1810458;Gaomi;Gaomi;Kao-mi;Kao-mi-hsien; +city::1810553;Gaogou;Gaogou;Gaogou Zhen;Kao-chia-kou;Kao-kou;Kao-kou-chen;gao gou;gao gou zhen;高沟;高沟镇; +city::1810821;Fuzhou;FOC;Focheum;Foochow;Foutsoou;Fouzhou;Fu-chou;Fu-chou-shih;Fu-cou;Fu-čou;Fuchau;Fucheu;Fuchzhou;Fucsou;Fudzhou;Fudzou;Fudžou;Fugouo;Fuk-chu-su;Fuk-chû-sṳ;Futsjou;Fuzcouh;Fuzhou;Fuĝoŭo;Hok-chiu-chhi;Hok-chiu-chhī;Hok-ciu;Hók-ciŭ;Lin-sen;Lin-sen-hsien;Min Hsien;Min-hou;Min-hou-hsien;Min-hou-hsien-ch'eng;Min-hou-hsien-ch’eng;Minhow;Minhow-hsien;Phuc Chau;Phúc Châu;fu zhou;fu zhou shi;fuco;fujho'u;fwjw;fwzhw;phucau;pujeou si;Φουτσόου;Фуджоу;Фучжоу;Фуџоу;فوجو;فوزهو;فوژو;فۇجو شەھىرى;फ़ूझोउ;फूचौ;ਫ਼ੂਚੋ;ဖူကျိုးမြို့;福州;福州市;푸저우 시; +city::1810845;Fuyang;FUG;Fou-yang;Fou-yang-hsien;Fowyang;Fowyang-hsien;Fu-jang;Fu-yang-shih;Fujan;Fuyan;Fuyang;Hu-iong-chhi;Hū-iông-chhī;Inchzhou;Paiu-iong;Phu Duong;Phụ Dương;Puyanghsien;Pâiu-iòng;Ying-chou;Yingchow;Yingchow-fu;fu yang;fu yang shi;fwyang;puyang si;Фуян;Ֆույան;فویانگ;阜阳市;阜陽;阜陽市;푸양 시; +city::1810846;Fuyang;Fu-yang-hsien;Fujan';Fuyang;Fuyang Shi;Puyang;fu yang;fu yang shi;Фуянь;富阳;富阳市; +city::1810920;Qingyang;Fu-shan-hsien;Fushan;Fushan Qu;Qingyang;Qingyang Jiedao;fu shan;fu shan qu;qing yang;qing yang jie dao;清洋;清洋街道;福山;福山区; +city::1810979;Fuling;Fou-chou;Fou-ling;Fou-ling-hsien;Fowchou;Fowchow;Fowling;Fowlinghsien;Fuchou;Fulin;Fuling;Pei-ling;fu ling;Фулин;涪陵; +city::1811103;Foshan;FUO;Fachan;Fatshan;Fo-san;Fo-shan-chen;Fo-shan-shih;Fo-šan;Fosan;Fosanas;Foshan;Foshan';Fosjan;Foŝan;Fošanas;Fu-shan-chen;Fut-san-su;Fu̍t-sân-sṳ;Huk-sang;Hut-san-chhi;Hu̍t-san-chhī;Hŭk-săng;Namhoi;Nan-hai;Nanhai-hsien;Nanhoi;Nom Hoy;Phat Son;Phật Sơn;fo shan shi;fu shan;fu shan shi;fwshan;pocan;posan si;Φοσάν;Фошан;Фошань;فوشان;فۇشەن شەھىر;பொசன்;仏山市;佛山;佛山市;포산 시; +city::1811114;Fenyi;Chieh-ch'iao;Chieh-ch'iao-chen;Chieh-ch’iao;Chieh-ch’iao-chen;Fen-i;Fen-i-chen;Fenyi;Fenyi Xian;Fenyi Zhen;I-chieh-ch'iao;I-chieh-ch’iao;fen yi;fen yi xian;fen yi zhen;分宜;分宜县;分宜镇; +city::1811200;Fengxian;Feng;Feng-hsien;Fengxian; +city::1811260;Fengrun;Chiu-feng-jun;Feng-jun;Feng-jun-ch'eng-kuan;Feng-jun-ch’eng-kuan;Feng-jun-hsien;Fengrun; +city::1811305;Fengkou;Fengkou;Fengkou Zhen;Fengkow;feng kou;feng kou zhen;峰口;峰口镇; +city::1811440;Feicheng;Chiu-fei-hsien;Fei;Fei-hsien;Fei-hsien-ch'eng;Fei-hsien-ch’eng;Feicheng;Feixian;Pi-hsien; +city::1811542;Fangshan;Chou-k'ou-tien-ch'u;Chou-k’ou-tien-ch’ü;Fang-shan-hsien;Fangshan;Ta-fang-shan;fang shan;房山; +city::1811619;Ezhou;Echeng;Echeng-hsien;Ezhou;O-ch'eng;O-ch'eng-hsien;O-ch’eng;O-ch’eng-hsien;Shou-ch'ang;Shou-ch’ang;Wuchanghsien; +city::1811720;Enshi;ENH;Ehn'shi;En-shih;En-shih-hsien;Enshi;Shih-nan;Shihnanfu;en shi;Ēnshī;Эньши;恩施; +city::1811729;Encheng;Ehn'pin;En-p'ing-chen;En-p'ing-hsien;En-p’ing-chen;En-p’ing-hsien;Encheng;Encheng Jiedao;Enping;Yan-ping-hsien;Yanping;Yin Ping;en cheng jie dao;en ping;si cheng;Эньпин;思城;恩城街道;恩平; +city::1811764;Duyun;Dujun;Duyun;Dūyún;OCD;Pingchowhsien;Tu-yun;Tu-yun-ch'eng;Tu-yun-hsien;Tu-yun-shih;Tu-yün;Tu-yün-ch’eng;Tu-yün-hsien;Tu-yün-shih;dou yun;Дуюн;都勻;都匀; +city::1811829;Duobao;Duobao;Duobao Zhen;Duobaowan;To-pao-wan;Topaowan;Topaowanchen;duo bao;duo bao zhen;多宝;多宝镇; +city::1811929;Ducheng;Dosing;Ducheng;Ducheng Zhen;Tu-ch'eng;Tu-ch'eng-hsu;Tu-ch’eng;Tu-ch’eng-hsü;Yunan;dou cheng;dou cheng zhen;都城;都城镇; +city::1812057;Xinyi;Dongzhen;Hsin-i;Tung-chen;Tung-chen-chen;Tung-chen-hsu;Tung-chen-hsü;Xinyi;xin yi;信宜; +city::1812101;Shengli;DOY;Dongying;Dun'in;Dungjing;Dunuin;GJong Dinh;Shengli;Shengli Jiedao;Tung-jing;Tung-ying;dong ying;dong ying shi;dung-ing si;sheng li;sheng li jie dao;Đông Dinh;Дунгјинг;Дунъин;Дуньин;东营市;東営市;東營;胜利;胜利街道;둥잉 시; +city::1812228;Dongtai;Dongtai;Dongtai Shi;Dongtai Zhen;Tung-t'ai;Tung-t'ai-chen;Tung-t'ai-hsien;Tung-t’ai;Tung-t’ai-chen;Tung-t’ai-hsien;dong tai;dong tai shi;dong tai zhen;东台;东台市;东台镇; +city::1812256;Dongsheng;DSN;Dongsheng;Dongsheng Qu;Dunshen;Tung-sheng;Tung-sheng-hsien;dong sheng;dong sheng qu;东胜;东胜区; +city::1812427;Dongkan;Binhai;Dongkan;Pin-hai;Tung-k'an;Tung-k'an-chen;Tung-k’an;Tung-k’an-chen; +city::1812521;Donghai;Donghai;Donghai Jiedao;Lu-feng-hsien;Lu-feng-hsien-ch'eng;Lu-feng-hsien-ch’eng;Lufeng;Lufung;Lukfung;dong hai;lu feng;东海;陆丰; +city::1812545;Dongguan;Deng-uang;Dongguan;Dongguan City;Dongwen shehiri;Dunguan;Dunguan';Dĕ̤ng-uāng;GJong Hoan;Ntonkouan;Tong-koan-chhi;Tong-kóan-chhī;Tung-kon-su;Tung-kuan;Tungkuan;Tungkun;Tûng-kón-sṳ;XHO;dong guan;dong guan shi;dong wan shi;donggu'ana;dung-gwan si;dwnghqwan;dwngwan;tonkuvan;Đông Hoản;Ντογκουάν;Донггуан;Дунгуан;Дунгуань;Дунґуань;דונגגוואן;دونغقوان;دونگوان;ڈwngwan;ڈونگ گوآن;ڈونگوان;डोंग्गूआन;டொங்குவான்;东莞;东莞市;東莞;東莞市;둥관 시; +city::1812597;Dongdu;Dongdu;Tung-tu; +city::1812621;Dongcun;Dongcun;Haiyang;Tung-ts'un;Tung-ts'un-chi;Tung-ts’un;Tung-ts’un-chi; +city::1812728;Dingzhou;Dingxian;Dingzhou;Dinsyan;T'ang-hsien;Ting;Ting-hsien;Ting-hsien-ch'eng-kuan;Ting-hsien-ch’eng-kuan;Tingchow;T’ang-hsien; +city::1812754;Dingtao;Dingtao;Ting-t'ao;Ting-t'ao-hsien;Ting-t’ao;Ting-t’ao-hsien;ding tao;定陶; +city::1812955;Dezhou;Daik-ciu;Dedzou;Degou;Dehchzhou;Detsjou;Dezhou;Deĝoŭ;Dáik-ciŭ;GJuc Chau;Te;Te-chou;Te-chou-shih;Te-cou;Te-hsien;Te-čou;Techow;Teh-hsien;Tehchow;Tehetsouen;Tek-chiu-chhi;Tek-chiu-chhī;de zhou;de zhou shi;deojeou si;dyzhww;dzhw;Đức Châu;Деџоу;Дэчжоу;دژو;دیژوو;徳州市;德州;德州市;더저우 시; +city::1812961;Deyang;DEY;Daik-iong;Dehjan;Deyan;Deyang;Dáik-iòng;GJuc Duong;Te-jang;Te-yang;Te-yang-hsien;Tehyang;Tehyang-hsien;Tek-iong-chhi;Tek-iông-chhī;de yang;de yang shi;deoyang si;dyyang;Đức Dương;Дэян;Դեյան;دییانگ;徳陽市;德阳市;德陽;더양 시; +city::1812981;Deqing;Deqing;Deqing Xian;Te-ch'ing;Te-ch'ing-hsien;Te-ch'ing-hsien-ch'eng;Te-ch’ing;Te-ch’ing-hsien;Te-ch’ing-hsien-ch’eng;Tehtsing;de qing;de qing xian;德清;德清县; +city::1812988;Dengzhou;Dengzhou;Dengzhou Jiedao;P'eng-lai-hsien;PNJ;Pehnlaj;Penglai;Penglai Shi;P’eng-lai-hsien;Teng-Chow-Fu;Teng-chou;Tengchow;Tengchowfu;deng zhou;deng zhou jie dao;peng lai;peng lai shi;Пэнлай;登州;登州街道;蓬莱;蓬莱市; +city::1812990;Huazhou;Dengxian;Dengzhou;Huazhou;Teng;Teng-hsien;hua zhou;花洲; +city::1813016;Songyang;Dengfeng;Songyang;Teng-feng;Teng-feng-hsien;song yang;嵩阳; +city::1813088;Dazhong;Dafeng;Dazhong;Dazhong Zhen;Dazhongji;Ta-chung-chen;Ta-chung-chi;Ta-feng;da zhong;da zhong zhen;大中;大中镇; +city::1813171;Zhangjiajie;Cang-tia-tie;Chong-ka-kie-su;Chzhanczjacze;Chông-kâ-kie-sṳ;DYG;Dayong;Diong-ga-gai;Diŏng-gă-gái;Ta-yung;Ta-yung-hsien;Tiuⁿ-ka-kè-chhī;Truong Gia Gioi;Trương Gia Giới;Yongding;Yongding Qu;Yung-ting;Yung-ting-chen;Zhangjiajie;Zhangjiajie Shi;jangjaje si;yong ding;yong ding qu;zanghjyajy;zhang jia jie;zhang jia jie shi;Čang-ťia-ťie;Чжанцзяцзе;זאנגגיאגיה;زانغجياجي;ژانگجیانیے;ကျန်းကျားကျဲသဘာဝဥယျာဉ်;张家界;张家界市;張家界;張家界市;永定;永定区;장자제 시; +city::1813206;Daye;Daye;Ta-ye-li;Ta-yeh;Ta-yeh-ch'eng;Ta-yeh-ch’eng;Ta-yeh-hsien; +city::1813253;Lijiang;Cidade Antiga de Lijiang;LJG;La-gong;Le Giang;Le-kang-chhi;Li-chiang;Li-tiang;Li-ťiang;Liczjan;Liczjan shaary;Lidziangas;Lijiang;Likiang-hsien;Liszyan;Lâ̤-gŏng;Lìjiāng;Lē-kang-chhī;Lệ Giang;Ta-yen-chen;li ceiyng;li jiang;li jiang shi;lidziani;lijang si;liji'anga;liji'anga yunnana;lyjyang;lyjyang shەھyry;lyjyanj;Лицзян;Лицзян шаары;Лиђанг;ליגיאנג;لىجياڭ شەھىرى;ليجيانج;لیجیانگ;लिजिआंग;लिजिआंग युन्नान;ลี่เจียง;ლიძიანი;丽江市;麗江;麗江市;리장 시; +city::1813325;Dazhou;DAX;Dachzhou;Dak-ciu;Dasyan';Dasyan’;Daxian;Dazhou;Dăk-ciŭ;GJat Chau;Sui-ting;Sui-ting-fu;Suting;Suydin;Ta;Ta-cou;Ta-hsien;Ta-čou;Tat-chiu-chhi;Ta̍t-chiu-chhī;That-chu-su;Tha̍t-chû-sṳ;da zhou;da zhou shi;dajeou si;dazhw;dazhww sychwan;Đạt Châu;Дачжоу;داژو;داژوو، سیچوان;达州;达州市;達州;達州市;다저우 시; +city::1813344;Dawukou;Dawukou;Shih-tsui-shan;Shizuishan;Ta-wei-k'ou;Ta-wei-k’ou;Ta-wu-k'ou;Ta-wu-k’ou; +city::1813451;Datong;Datong;Datun;Ta-t'ung;Ta-t’ung;Датун; +city::1813658;Fenghua;Chung-cheng;Daqiao;Daqiaozhen;Feng-hua-hsien;Fenghua;Fenghua Shi;Fenghwa;Fenghwahsien;Ta-ch'iao;Ta-ch’iao;feng hua;feng hua shi;奉化;奉化市; +city::1813775;Daokou;Daokou;Hua-hsien;Huaxian;Tao-k'ou;Tao-k'ou-chen;Tao-k’ou;Tao-k’ou-chen;Taokow;dao kou;道口; +city::1813812;Danshui;Dan'shuem;Danshui;Danshui Jiedao;Huiyang Qu;Huiyangshi;Tamshui;Tamshuihu;Tamshuihü;Tan-shui;Tanshuihu;dan shui;hui yang qu;Даньшуем;惠阳区;淡水; +city::1813828;Danjiangkou;Chun-hsien;Chün-hsien;Dan'czjankou;Danjiangkou;Junxian;Junxian Danjiang;Sha-t'o-ying;Sha-t’o-ying;Shatoin;Tan-chiang;Tan-chiang-k'ou;Tan-chiang-k’ou;Даньцзянкоу; +city::1813851;Gushu;Dangtu;Gushu;Tai Ping;Taiping;Taiping-fu;Tang-t'u;Tang-t'u-hsien;Tang-t’u;Tang-t’u-hsien;gu shu;姑熟; +city::1813892;Xincheng;Dancheng;Tan-ch'eng;Tan-ch'eng-chi;Tan-ch’eng;Tan-ch’eng-chi;Xincheng;xin cheng;新城; +city::1814082;Daliang;Daliang;Daliang Jiedao;Daljan;P'an-shun;P’an-shun;Schuntak;Shun-te;Shun-te-hsien;Shunde;Shuntak;Ta-liang;Ta-liang-chen;da liang;da liang jie dao;shun de qu;Далян;大良;大良街道;顺德区; +city::1814087;Dalian;DLC;Dairen;Dal'niy;Dalian;Dalian Shi;Daljan';Dalny;Dal’niy;Lu-ta;Lu-ta-shih;Luda;Lü-ta;Lü-ta-shih;Lüda;Ntalian;Ta-lien;Ta-lien-shih;da lian;da lian shi;daelyeon;dalyan;dalyen si;dʼlyyn;ta heliyn;Νταλιάν;Далянь;דאליין;داليان;دالیان;ต้าเหลียน;大连;大连市;大連;大連市;다롄 시;대련; +city::1814093;Dali;Chung-ho-chen;DLU;Dali;Ta-ho;Ta-li;Talifu;da li;da li shi;Дали;大理;大理市; +city::1814757;Chuzhou;Cchu-cou;Ch'u;Ch'u-ch'uan;Ch'u-hsien;Chuchow;Chuchzhou;Chudzhou;Chudzou;Chuju shehiri;Chutsjou;Chuxian;Chuzhou;Ch’u;Ch’u-ch’üan;Ch’u-hsien;Du-ciu;Dṳ̀-ciŭ;Tru Chau;Trừ Châu;Tu-chiu-chhi;Tû-chiu-chhī;chajwa;chu zhou;chu zhou shi;chujeou si;chwzhww;jo zhou shi;Čchu-čou;Чуджоу;Чучжоу;Чуџоу;Չուչժոու;چاجوا;چوژوؤ;چوژوو;ジョ州市;滁州;滁州市;추저우 시; +city::1814786;Yangchun;Ch'un-ch'eng-chen;Chuncheng;Ch’un-ch’eng-chen;Yang-ch'un-hsien;Yang-ch’un-hsien;Yangchun;Yeungchun;yang chun;阳春; +city::1814870;Yiwu;Choucheng;I-wu;I-wu-hsien;Iu;YIW;Yiwu;Yiwuhsien;yi wu;yi wu xian;Иу;义乌;義烏縣; +city::1814906;Chongqing;CKG;Cchung-cching;Ch'ung-ch'ing;Ch'ung-ch'ing-shih;Chongqing;Chongqing - zhong qing;Chongqing - 重庆;Chongqing Shi;Chuncin;Chungking;Ch’ung-ch’ing;Ch’ung-ch’ing-shih;Congcing;Congcingas;Congcingo;Csungking;Cuncjina;Pa;Pa-hsien;Trung Khanh;Trùng Khánh;Tshung-khin;Tshùng-khin;Tsjoengking;Yu-chou;Yuzhou;Yü-chou;caungakiga;ceancin;chng ching;chungching si;chwng kyng;chwngchng;congachinga;congkinga;conkin;tshwnghtshyngh;z'wngz'yng;zhong qing;zhong qing shi;Çongçing;Ĉongĉingo;Čchung-čching;Čongčingas;Čuncjina;Чунгкинг;Чунцин;Чунцін;צ'ונגצ'ינג;تشونغتشينغ;چونگ کینگ;چونگچنگ;چونگ‌کینگ;چۇڭچىڭ شەھىرى;चोंगछिंग;चोंग्किंग;ਚੌਂਗਕਿੰਗ;சோங்கிங்;ചോങ്ചിങ്;ฉงชิ่ง;ཁྲུང་ཆིན་གྲོང་ཁྱེར།;重庆;重庆市;重慶;重慶市;충칭 시; +city::1814919;Chonglong;Chonglong;Tzechow;Tzechung;Tzechung-hsien;Tzu-chou;Tzu-chung;Tzu-chung-hsien;Zizhong;zhong long;重龙; +city::1814934;Chizhou;Ch'ih-chou;Ch'ih-chou-chen;Chichau;Chih-chow-fu;Chihchow;Chizhou;Chizhou Shi;Ch’ih-chou;Ch’ih-chou-chen;Guichi;JUH;Kuei-ch'ih;Kuei-ch'ih-hsien;Kuei-ch’ih;Kuei-ch’ih-hsien;Kweichih;Kweichih-hsien;Kweighih;Tche Tcheou;chi zhou;chi zhou shi;池州;池州市; +city::1815059;Chenzhou;Ch'en;Ch'en-chou-shih;Ch'en-hsien;Chehn'chzhou;Chenchow;Chenzhou;Ch’en;Ch’en-chou-shih;Ch’en-hsien;LQP;chen zhou;Чэньчжоу;郴州; +city::1815184;Chengyang;Chengyang;Chu;Chu-hsien;Chuchow;Chü;Chü-hsien;Chüchow;Juxian; +city::1815251;Jiangyin;Chengjiang;Chengjiang Jiedao;Chiang-yin;Chiang-yin-ch'eng;Chiang-yin-ch’eng;Chiang-yin-hsien;Jiangyin;Jiangyin Shi;Kiang Ying;Kiangyin;cheng jiang;cheng jiang jie dao;jiang yin shi;江阴市;澄江;澄江街道; +city::1815286;Chengdu;CTU;Ccheng-tu;Cendu;Cengdu;Cengduo;Ch'eng-tu;Ch'eng-tu-hsien;Ch'eng-tu-shih;Chehndu;Chendu;Chengdu;Chengdu Shi;Chengdú;Chundu;Chөndү;Ch’eng-tu;Ch’eng-tu-hsien;Ch’eng-tu-shih;Csengtu;Cwngzduh;Hua-yang;Sang-tu-su;Seng-to-chhi;Sing-du;Sàng-tû-sṳ;Sêng-to͘-chhī;Sìng-dŭ;Thanh Do;Thành Đô;Tsen'nkntou;Txengdu;cengadu;centu;chantu;cheing tu;cheng dou;cheng dou shi;cheongdu si;chngdw;chyngdw;chېngdۇ shەھyr;tshnghdw;zngdw;Çengdu;Ĉengduo;Čcheng-tu;Čendu;Čengdu;Τσενγκντού;Ченгду;Ченду;Чънду;Чыңду;Чэнду;Чөндү;Չենդու;צנגדו;تشنغدو;چنگدو;چینگدو;چېڭدۇ شەھىر;चेंगदू;छंतू;ਚੇਂਗਦੂ;செங்டூ;เฉิงตู;ချင်းဒူမြို့;成都;成都市;청두 시; +city::1815302;Chenghua;Ch'eng-hai-hsien;Chengcheng;Chenghai;Chenghua;Ching hai;Ch’eng-hai-hsien;Tenghai;Tenghai-hsien;Tsai-ch'eng-chen;Tsai-ch’eng-chen;cheng hai;cheng hua;澄华;澄海; +city::1815395;Chaozhou;Caodzou;Caogou;Cchao-cou;Ch'ao-an-hsien;Ch'ao-chou;Ch'ao-chou-chen;Ch'ao-chou-shih;Chao'an;Chaochow;Chaochowfu;Chaochzhou;Chaodzou;Chaotsjou;Chaozhou;Chao’an;Chau chu fu;Chauchow;Chheu-chu-su;Chhèu-chû-sṳ;Ch’ao-an-hsien;Ch’ao-chou;Ch’ao-chou-chen;Ch’ao-chou-shih;Dieu-ciu;Dièu-ciŭ;SWA;Tio-chiu-chhi;Tiô-chiu-chhī;Trieu Chau;Triều Châu;chao zhou;chao zhou shi;chaojeou si;chawzhw;chawzhww;tæciw;Ĉaoĝou;Čaodžou;Čchao-čou;Чаочжоу;Чаоџоу;چاؤژوؤ;چاوژو;چاوژوو;แต้จิ๋ว;潮州;潮州市;차오저우 시; +city::1815427;Chaohu;Ch'ao;Ch'ao-hsien;Chaohu;Chaoxian;Ch’ao;Ch’ao-hsien;Ts'ao-chen;Ts’ao-chen;chao hu shi;巢湖市; +city::1815456;Changzhou;CZX;Cangdzou;Canggouo;Cchang-cou;Ch'ang-chou;Ch'ang-chou-shih;Chanchzhou;Chandzhou;Chang-chow-fu;Changchow;Changdzou;Changtsjou;Changzhou;Chanzhou khot;Ch’ang-chou;Ch’ang-chou-shih;Csangcsou;Siong-chiu-chhi;Siong-ciu;Siòng-ciŭ;Siông-chiu-chhī;Thuong Chau;Thường Châu;Wu-chin;Wu-chin-hsien;Wujin;Wutsin;chang zhou;chang zhou shi;changjeou si;changzhw;Ĉangĝoŭo;Čangdžou;Čchang-čou;Чангџоу;Чанджоу;Чанжоу хот;Чанчжоу;چانگژو;چاڭجو شەھىر;常州;常州市;창저우 시; +city::1815463;Changzhi;Ch'ang-chih;Chanchzhi;Changzhi;Ch’ang-chih;Shih-t'ou-ko-t'a;Shih-t’ou-ko-t’a;Shitougeta;Чанчжи; +city::1815577;Changsha;CSX;Cangsa;Cangzsah;Cansa;Cchang-sa;Ch'ang-sha-hsien;Ch'ang-sha-shih;Changsha;Changsja;Chansha;Chhong-sa-su;Chhòng-sâ-sṳ;Ch’ang-sha-hsien;Ch’ang-sha-shih;Csangsa;Diong-sa;Diòng-să;Tng-soa-chhi;Tn̂g-soa-chhī;Truong Sa;Trường Sa;Tsan'nksa;cangasa;chang cha;changsa;changsa si;changsha;changsha shەھyr;channasa;tshanghsha;zhang sha;zhang sha shi;Ĉangŝa;Čangša;Čanša;Čchang-ša;Τσανγκσά;Чангша;Чанша;Չանշա;تشانغشا;چانگشا;چاڭشا شەھىر;चांगशा;छांग्षा;ਛਾਂਙਸ਼ਾ;ฉางชา;ချနဆားမြ;ချန်ဆားမြို့;長沙;長沙市;长沙;长沙市;창사 시; +city::1815585;Changqing;Ch'ang-ch'ing;Ch'ang-ch'ing-hsien;Chancin;Changqing;Changtsing;Ch’ang-ch’ing;Ch’ang-ch’ing-hsien;Чанцин; +city::1815656;Changli;Ch'ang-li-ch'eng-kuan;Ch'ang-li-hsien;Changli;Chanli;Ch’ang-li-ch’eng-kuan;Ch’ang-li-hsien;Чанли; +city::1815667;Changleng;Ch'ang-ling-chen;Ch'ang-t'ou-ling;Changleng;Ch’ang-ling-chen;Ch’ang-t’ou-ling;Hsin-chien;Xinjian; +city::1816026;Caohe;Caohe;Caohe Zhen;Caojiahe;Ch'i-ch'un;Ch’i-ch’un;Qichun;Ts'ao-chia-ho;Ts'ao-ho;Ts'ao-ho-chen;Ts'ao-ho-cheng;Ts'ao-ho-chien;Ts’ao-chia-ho;Ts’ao-ho;Ts’ao-ho-chen;Ts’ao-ho-cheng;Ts’ao-ho-chien;cao he;cao he zhen;漕河;漕河镇; +city::1816028;Weining;Caohai;Vehjnin;Wei-ning-hsien;Wei-ning-hsien-i-tsu-hui-tsu-miao-tsu- tzu-chih-ch'u;Wei-ning-hsien-i-tsu-hui-tsu-miao-tsu- tzu-chih-ch’ü;Wei-ning-i-tsu-hui-ysu-miao-tsu-tzu-chih-hsien;Weining;Вэйнин; +city::1816080;Cangzhou;Canchzhou;Candzhou;Cangdzou;Cangou;Cangzhou;Cangzou;Canĝou;Cchang-cou;Cchang-čou;Changhsien;Chhong-chiu-chhi;Chhong-chiu-chhī;Chong-ciu;Chŏng-ciŭ;T'sang-chou-shih;Thuong Chau;Thương Châu;Ts'ang-chen;Ts'ang-chou;Ts'ang-hsien;Tsan'syan';Tsang;Tsangchow;Tsan’syan’;Ts’ang-chen;Ts’ang-chou;Ts’ang-hsien;T’sang-chou-shih;cang zhou;cang zhou shi;changjeou si;kangdhww;kangjw;sangjw shەھyry;Цангџоу;Цанджоу;Цанчжоу;ساڭجو شەھىرى;کانگجو;کانگذوو;沧州市;滄州;滄州市;창저우 시; +city::1816176;Caidian;Caidian;Caidian Jiedao;Caidian Qu;Han-yang-hsien;Hanyang;Ts'ai-tien;Ts'ai-tien-chen;Tsaitien;Ts’ai-tien;Ts’ai-tien-chen;cai dian;cai dian jie dao;cai dian qu;蔡甸;蔡甸区;蔡甸街道; +city::1816221;Buhe;Buhe;Buhe Zhen;Bukheh;Pu-ho;bu he;bu he zhen;Бухэ;埠河;埠河镇; +city::1816234;Bozhou;Bac Chau;Bochzhou;Bok-ciu;Boxian;Bozhou;Bŏk-ciŭ;Bạc Châu;Po;Po-cou;Po-hsien;Po-čou;Pochow;Pok-chiu-chhi;Po̍k-chiu-chhī;bo zhou;bo zhou shi;bojeou si;bwjwa;bwzhw;bwzhww;Бочжоу;Բոչժոու;بوجوا;بوژؤ;بوژوو;亳州;亳州市;보저우 시; +city::1816256;Botou;Bota;Botou;Botuchzhen';Botuchzhen’;Bozhen;Chiao-ho;Nan-p'i;Nan-p’i;Po-chen;Po-t'ou;Po-t'ou-chen;Po-t’ou;Po-t’ou-chen;Potowchen;Бота; +city::1816265;Boshan;Boshan;Po-shan;Tzu-po;Tzu-po-shih; +city::1816269;Baise City;AEB;Baicheng Jiedao;Baise;Baise City;Baise Zhen;Baksaek;Bose;Bose Zhen;Boze;Bósè;Bǎisè;Pai-se;Pai-se-chen;Pai-se-hsien;Po-se;Poseh;Poseh-hsien;bai cheng;bai cheng jie dao;bai se;bai se zhen;Бозе;百城;百城街道;百色;百色镇; +city::1816336;Binzhou;Beizhen;Bin'chzhou;Bindzhou;Bing-ciu;Bintsjou;Binzhou;Bĭng-ciŭ;Gorad Bin'chzhou;Hui-min;Pei-chen;Pin-chiu-chhi;Pin-chiu-chhī;Pin-cou;Pin-hsien;Pin-čou;Tan Chau;Tân Châu;bang zhou shi;bin zhou;bin zhou shi;binjeou si;bnzhww;bynzhw;Бинджоу;Биньчжоу;Горад Біньчжоу;بنژوو;بینژو;浜州市;滨州市;濱州;빈저우 시; +city::1816338;Luxu;Binyang;Binzhou;Lu-hsu;Lu-hsu-chen;Lu-hsü;Lu-hsü-chen;Luxu;Pin-yang;Pin-yang-hsien;lu wei;芦圩; +city::1816373;Bijie;BFJ;Bek-ciek;Bicze;Bijie;Bék-ciék;Bìjíe;Pi-tie;Pi-ťie;Pit-chiat-chhi;Pit-chiat-chhī;Prefecture de Bijie;Préfecture de Bijie;Tat Tiet;Tất Tiết;bi jie;bi jie shi;bije si;byjay;byjyy;Бицзе;بیجئی;بیجای;毕节;毕节市;畢節;畢節市;비제 시; +city::1816406;Bianzhuang;Bianzhuang;Cangshan;Hsia-chuang;Pien-chuang;Ts'ang-shan;Ts’ang-shan; +city::1816440;Bengbu;BFU;Bang Phu;Bangbu;Behnbu;Benbu;Bengbu;Bunbu;Bạng Phụ;Pang-fou;Pang-fou-shih;Pang-po-chhi;Pang-pu;Paung-buo;Peng-pu;Pâung-buô;Pāng-pō-chhī;bang bu;bang bu shi;beongbu si;bngbw;byngbw;bېngbۇ shەھەry;Бенгбу;Бънбу;Бэнбу;Բենբու;بنگبو;بینگبو;بېڭبۇ شەھەرى;蚌埠;蚌埠市;벙부 시; +city::1816670;Beijing;BJS;Bac Kinh;Baek-ging;Baekging;Behehzhin;Beijing;Beijing Shi;Beising;Beixin;Beixín;Bejdzing;Bejdżing;Bejing;Beyjing;Beȝcinȝ;Báe̤k-gĭng;Béising;Bắc Kinh;Gorad Pekin;Pechin;Pechino;Pechinu;Pechinum;Pecinum;Pei-ching;Pei-ching-shih;Pei-p'ing;Pei-p'ing-shih;Peken;Pekin;Pekin';Pekina;Pekinas;Peking;Pekini;Pekino;Pekín;Pekîn;Peping;Pequim;Pequin;Pequín;Pet-kin;Pet-kîn;Peycing;Pikkin;Pèquin;Pékin;Péqùin;Péycing;be'ijim;be'ijina;be'ijinga;bei jing;bei jing shi;beidjin;beijing;bijiga;bijing;bijinga;bkyn;buggyeong;byjng;bykyn;byyg'yng;byyzsyng;pakking;peyjin;pkn;Πεκίνο;Бейжің;Бээжин;Бәәҗң балһсн;Горад Пекін;Пекин;Пекинг;Пекін;Пекінґ;Պեկին;בייג'ינג;בייזשינג;بكين;بيكين;بیجنگ;بېجینګ;بېيجىڭ;بېيجىڭ شەھىرى;پکن;پێکەن;ބީޖިންގ;बीजिंग;बेइजिङ;বেইজিং;ਬੀਜਿੰਗ;બેઇજિંગ;பெய்ஜிங்;బీజింగ్;ಬೀಜಿಂಗ್;ബെയ്‌ജിങ്ങ്‌;බෙයිජිං;ปักกิ่ง;པེ་ཅིང་གྲོང་ཁྱེར།;ပေကျင်းမြို့;პეკინი;ቤዪጂንግ;ប៉េកាំង;北京;北京市;베이징;북경; +city::1816705;Beihai;BHY;Bac Hai;Baek-hai;Baekhaij;Behjkhaj;Beihai;Beihai i Guangxi;Beihajus;Bejkhaj;Beyhay;Báe̤k-hāi;Bắc Hải;Pak-hai-chhi;Pak-hái-chhī;Pakhoi;Pei-hai;Pei-hai-shih;Pej-chaj;Pet-hoi-su;Pet-hói-sṳ;bei hai;bei hai shi;beihai si;byhay;Бейхай;Бејхај;Бэйхай;Բեյհայ;بیئہائی;بیئیہائی;بیهای;بېيخەي شەھىرى;北海;北海市;베이하이 시; +city::1816751;Beidao;Beidao;Beidao jiedao;Beidaobu;Maji Qu;Pei-tao-pu;T'ien-shui;Tianshui;T’ien-shui;bei dao;bei dao jie dao;mai ji qu;北道;北道街道;麦积区; +city::1816753;Beidaihehaibin;Beidaihehaibin;Bejdajkheh;Pehtaiho;Pehtaiho Beach;Pei-tai-ho Hai-pin;Бейдайхэ; +city::1816790;Beibei;Behj;Beibei;Paipei;Pehpei;Pei-p'ei-ch'ang;Pei-p'ei-kuan-li-chu;Pei-p'ei-shih;Pei-p’ei-ch’ang;Pei-p’ei-kuan-li-chü;Pei-p’ei-shih;bei bei;Бэй;北碚; +city::1816890;Baoying;Baoying;Pao-ying;Pao-ying-ch'eng;Pao-ying-ch’eng;Pao-ying-hsien; +city::1816924;Langzhong;Baoning;Lang-chung;Lang-chung-hsien;Langzhong;Pao-ning-fu;Paoning;lang zhong;阆中; +city::1816971;Baoding;BVN;Bao GJinh;Baodin;Baodina;Baoding;Baodingas;Bawding shehiri;Bo-deng;Báoding;Bō̤-dêng;Bảo Định;Ch'ing-yuan-hsien;Ching-yuang;Ch’ing-yüan-hsien;Pao-ting;Pao-ting-shih;Po-teng-chhi;Prefettura di Baoding;Pó-tēng-chhī;Tsingyuan;Tsingyuan-hsien;Tsingyüan-hsien;bao ding;bao ding shi;baoding si;baywdyng;pea ting;Баодин;Баодинг;Բաոդին;באודינג;بائودینگ;باوڈنگ;เป่าติ้ง;保定;保定市;바오딩 시; +city::1817240;Baiyin;Aho Chia Chuan;Bach Ngan;Bah-ngung;Baiyin;Baiyin Shi;Bajin';Bayin;Băh-ngṳ̀ng;Bạch Ngân;Hao-chia-ch'uan;Hao-chia-ch’uan;Ho-chia-ch'uan;Ho-chia-ch’uan;Pai-yin;Pai-yin-ch'ang;Pai-yin-ch’ang;Pai-yin-shih;Paj-jin;Peh-gin-chhi;Pe̍h-gîn-chhī;bai yin;bai yin shi;baiin si;bayy yn;bayyyn;Байинь;Բային;بائی ین;بائیین;白銀;白銀市;白银;白银市;바이인 시; +city::1817701;Baihe;Baihe;bai he;百合; +city::1817720;Shangyu;Baiguan;Pai-kuan;Pai-kuan-chen;Pekwan;Pokwan;Shangyu; +city::1817858;Babu;Babu;Hexian;Ho;Ho-hsien;Pa-pu;Pa-pu-chen;Patpo;Бабу; +city::1817952;Anxiang;An-hsiang;An-hsiang-hsien;Ansiang;Ansiang-hsien;Anxiang;Anxiang Chengguanzhen;an xiang;an xiang cheng guan zhen;安乡;安乡城关镇; +city::1817968;Anshun;AVA;An Thuan;An Thuận;An'shun';An-shun-hsien;An-shun-hsien-ch'eng;An-shun-hsien-ch’eng;An-shun-shih;An-sun;An-sun-chhi;An-sūn-chhī;An-šun;Ang-song;Anshun;Anshunfu;Ansunas;Anšunas;P'u-ting;P’u-ting;an shun;an shun shi;anshwn;ansun si;Ăng-sông;Аншун;Аньшунь;انشون;安順;安順市;安顺市;안순 시; +city::1817990;Anqiu;An-ch'iu;An-ch'iu-hsien;An-ch’iu;An-ch’iu-hsien;An-kiu;Ankiuhsien;Anqiu; +city::1817993;Anqing;AQG;An Khanh;An Khánh;An'cin;An-cching;An-ch'ing;An-ch'ing-ch'eng;An-ch'ing-shih;An-ch’ing;An-ch’ing-ch’eng;An-ch’ing-shih;An-čching;Ancin;Ancing;Ancingas;Anking;Anqing;Anqing Shi;Ančingas;Ganking;Huai-ning;Huai-ning-hsien;Hwaining;Hwaining-hsien;Nganking;an qing;an qing shi;anching si;ankng;Анцин;Аньцин;Аньцін;Анћинг;ئەنچىڭ شەھىرى;انکنگ;安庆;安庆市;安慶;安慶市;안칭 시; +city::1818004;Mabai;Anping;Ma-kuan;Ma-kuan-hsien;Ma-pai-kuan;Mabai;Maguan;Makwan;Makwan-hsien;Mapai;ma bai;马白; +city::1818016;Anlu;An-lu-hsien;Anlu;Te-an;Tean-fu;Teian;Teianfu;an lu;安陆; +city::1818051;Anjiang;An-chiang;An-chiang-chen;Anjiang;Ankiang;Ch'ien-yang;Ch'ien-yang-hsien;Ch’ien-yang;Ch’ien-yang-hsien;Qianyang; +city::1818116;Anbu;An-pu;Anbu;Anbu Zhen;an bu;庵埠; +city::1885823;Jiangyou;; +city::1886760;Suzhou;SZV;So-chiu-chhi;Soutsoou;So͘-chiu-chhī;Su-chou;Su-chu-su;Su-ciu;Su-cou;Su-čou;Suchjou;Suchzhou;Sudzhou;Sudzou;Sudžou;Sugouo;Sutsjou;Suzhou;Suzhou Shi;Suzhou i Jiangsu;Suĝoŭo;Szucsou;Sû-chû-sṳ;Sŭ-ciŭ;To Chau;Tô Châu;Wu-hsien;cuco;ssujeou si;su cow;su zhou;su zhou shi;sujho'u;suzu;swgwʼw;swjw;swzhw;swzhww;Σουτσόου;Суджоу;Сучжоу;Сучжоў;Суџоу;Сүжоу;Սուչժոու;סוגואו;سوجو;سوژو;سوژوو;سۇجۇ شەھىرى;सूझोऊ;ਸੂਜ਼ੂ;சுசோ;ซูโจว;苏州;苏州市;蘇州;蘇州市;쑤저우 시; +city::1886762;Zhoushan;Chzhoushan';Dinghai Qu;HSN;Zhoushan;Zhoushan Shi;ding hai;ding hai qu;zhou shan;zhou shan shi;Чжоушань;定海;定海区;舟山;舟山市; +city::1898359;Mudu;Mu-tu;Mu-tu-chen;Mudu;Mudu Zhen;mu du;mu du zhen;Муду;木渎;木渎镇; +city::1898494;Songling;Songling;Songlingzhen;Sunlin;Wu-chiang;Wukiang;song ling;Сунлин;松陵; +city::1915223;Zhongshan;Zhongshan;zhong shan;zhong shan shi;中山;中山市; +city::1917790;Dadonghai;Dadonghai;Dadunkhaj;Дадунхай; +city::1919014;Lianghu;Lianghu;Lianghu Zhen;liang hu;liang hu zhen;梁湖;梁湖镇; +city::1920772;Zhoucheng;; +city::1921372;Dalianwan;; +city::1927639;Yueyang;Juee-jang;Juehjan;Juejang;Jüe-jang;Ngok-yong-su;Ngo̍k-yòng-sṳ;Nhac Duong;Nhạc Dương;YUG;Yo Chau;Yochau;Yochow;Youchou;Youchow;weyang si;yue yang shi;Юэян;岳阳市;岳陽市;웨양 시; +city::2033128;Zhenlai;Ch'a-kan-nao;Ch'a-kan-shao;Chen-lai;Chen-lai-chen;Chen-tung;Chen-tung-hsien;Chzhendun;Ch’a-kan-nao;Ch’a-kan-shao;Zhenlai;zhen lai;镇赉; +city::2033135;Zhengjiatun;Cheng-chia-t'un;Cheng-chia-t'un-chen;Cheng-chia-t’un;Cheng-chia-t’un-chen;Chengkiatun;Liao-yuan;Liao-yuan-hsien;Liao-yüan;Liao-yüan-hsien;Shuangliao;Zhengjiatun; +city::2033147;Zhaozhou;Chao Chow;Chao-chi;Chao-chou;Chao-chou-chen;Chao-chou-hsien;Chzhaochzhou;Lao-ch'eng-chi;Lao-chieh-chi;Lao-ch’eng-chi;Zhaozhou;Чжаочжоу; +city::2033149;Zhaoyuan;Chao-chou;Chao-yuan;Chao-yuan-chen;Chao-yuan-hsien;Chao-yüan;Chao-yüan-chen;Chao-yüan-hsien;Chaochow;Chzhaochzhou;Chzhaoyuan';Chzhaoyuan'gay;Chzhaoyuan’;Chzhaoyuan’gay;Gokhoutsi;Kuo-erh-lo-ssu-hou-ch'i;Kuo-erh-lo-ssu-hou-ch’i;Kuo-hou-ch'i;Kuo-hou-ch’i;Zhaoyuan; +city::2033168;Zhaodong;Chao-tung;Chao-tung-chen;Chzhaodun;Man'gou;Man-kou;Man’gou;T'ien-tsao-kang;T’ien-tsao-kang;Zhaodong;Zhaodong Shi;Zhaodong Zhen;zhao dong;zhao dong shi;zhao dong zhen;肇东;肇东市;肇东镇; +city::2033196;Zhangjiakou;Cang-tia-kchou;Chang-chia-k'ou;Chang-chia-k'ou-shih;Chang-chia-k’ou;Chang-chia-k’ou-shih;Chang-kia-k'ou;Chang-kia-k’ou;Changchiakow;Changkiakow;Chzhanczjakou;Chzhantseyakou;Diong-ga-kau;Diŏng-gă-kāu;Dzhandzjakou;Ganjakou;Kalgan;Khaalgan;Tiuⁿ-ka-kháu-chhī;Truong Gia Khau;Trương Gia Khẩu;Wan-ch'uan;Wan-ch'uan-hsien;Wan-ch’üan;Wan-ch’üan-hsien;ZQZ;Zhangjiakou;jangjakeou si;jangjyakw;zhang jia kou;zhang jia kou shi;zhangjyakww;Čang-ťia-kchou;Ĝanjakou;Џангђакоу;Джандзякоу;Хаалган;Чжанцзякоу;جانگجیاکو;ژانگجیاکوو;张家口市;張家口;張家口市;장자커우 시; +city::2033225;Zhalantun;Butha Qi;Cha-lan-tun;Chzhalan'tun';Chzhalantun;Cjalanjtunj;NZL;Pu-t'e-ha-ch'i;Pu-t’e-ha-ch’i;Tsa-lan-t'un;Tsa-lan-t’un;Xinghua;Xinghua Jiedao;Ya-lu;Ya-lu-hsien;Zalantun;Zhalantun;Zhalantun Shi;bu te ha qi;xing hua;xing hua jie dao;zha lan tun;zha lan tun shi;Чжаланьтунь;兴华;兴华街道;布特哈旗;扎兰屯;扎兰屯市; +city::2033242;Yushu;Jujshu;Ku-yu-shu;Ku-yü-shu;Yu-shu-chen;Yu-shu-hsien;Yushu;Yü-shu-chen;Yü-shu-hsien;Юйшу; +city::2033301;Youhao;Youhao;Youhao Jiedao;Youhao Qu;Yu-hao;you hao;you hao jie dao;you hao qu;友好;友好区;友好街道; +city::2033370;Yingkou;Eiko;Inkou;Newchwang;Niu-chuang;YDD;YKH;Ying-k'ou-hsien;Ying-k'ou-shih;Ying-k’ou-hsien;Ying-k’ou-shih;Yingkou;Yingkou Shi;Yingkow;ingkeou si;ying kou;ying kou shi;Инкоу;営口;営口市;營口;营口;营口市;잉커우 시; +city::2033403;Yilan;I-lan;I-lan-chen;I-lan-hsien;San-hsing;Sang-hsing;Sansing;Sen-hsing;YLN;Yilan;Yilan Xian;Yilan Zhen;yi lan;yi lan xian;yi lan zhen;依兰;依兰县;依兰镇; +city::2033413;Yichun;I-cchun;I-chhun-chhi;I-chhun-chhī;I-chung;I-čchun;Ichun';LDS;Y Xuan;Y Xuân;Yichun;Yichun i Heilongjiang;Yīchūn;ichun si;ichuni;yaychan;yi chun;yi chun shi;Ĭ-chŭng;Ичунь;یایچان;یکھن، ہیلونگجیانگ;იჩუნი;伊春;伊春市;이춘 시; +city::2033423;Yebaishou;Chien-p'ing;Chien-p’ing;Jianping;Teh-pai-shou;Tszyan'pin;Tszyan’pin;Yebaishou;Yeh-pai-shou;Yeh-pai-shou-chen;Yeh-pai-shu;Yeh-po-shou; +city::2033449;Yantongshan;Yantongshan;Yen-t'ung-shan;Yen-t’ung-shan; +city::2033467;Yanji;Chu-tzu-chieh;Chu-tzu-kai;Chü-tzu-chieh;Chü-tzu-kai;Dien Cat;Diên Cát;Jan'czi;YNJ;Yang-chi-t'eng;Yen-chi;Yen-chi-shih;yan ji shi;yangzhy;yanjy;yenji si;yeongil;Јанђи;Яньцзи;يانجي;یانجی;یانگژی;延吉市;연길;옌지 시; +city::2033536;Yakeshi;Hsi-kuei-t'u;Hsi-kuei-t’u;Jakehshi;Shih-k'o-ya;Shih-k’o-ya;Xingong Jiedao;Xuguit Qi;Ya-k'o-shih;Ya-k’o-shih;Yakeshi;Yakeshi Shi;xi gui tu qi;xin gong jie dao;ya ke shi;ya ke shi shi;Якэши;喜桂图旗;新工街道;牙克石;牙克石市; +city::2033574;Zhangjiakou Shi Xuanhua Qu;Ch'ang-chia-k'ou-shih;Ch’ang-chia-k’ou-shih;Hsuan-hua;Hsuan-hua-ch'eng;Hsuan-hua-hsien;Hsuan-hua-shih;Hsüan-hua;Hsüan-hua-ch’eng;Hsüan-hua-hsien;Hsüan-hua-shih;Suanhwa;Xuanhua;Zhangjiakou Shi Xuanhua Qu;zhang jia kou shi xuan hua qu;张家口市宣化区; +city::2033602;Xiuyan;Hsiu-yen;Hsiu-yen-chen;Hsiu-yen-hsien;Hsiujen;Siuyen;Xiuyan;Yu-yen;xiu yan;岫岩; +city::2033667;Xinqing;Xinqing;xin qing;新青; +city::2033675;Xinmin;Hsin-min;Hsin-min-chen;Hsin-min-hsien;Hsin-ming-t'ing;Hsin-ming-t’ing;Sin'min';Sinmin;Xinmin;Синьминь; +city::2033739;Xinglongshan;Hsing-lung-shan;Xinglongshan; +city::2033766;Xingcheng;Hingcheng;Hsing-ch'eng;Hsing-ch'eng-chen;Hsing-ch'eng-hsien;Hsing-ch’eng;Hsing-ch’eng-chen;Hsing-ch’eng-hsien;Ning-yuan;Ning-yuan-chou;Ning-yüan;Ning-yüan-chou;Shinchon;Sinchehn;Xingcheng;Синчэн; +city::2033824;Xilin Hot;A-pa-ha-na-erh-ch'i;A-pa-ha-na-erh-ch’i;A-pa-ha-na-erh-tso-i-ch'i;A-pa-ha-na-erh-tso-i-ch’i;A-pa-ha-na-erh-yu-i-ch'i;A-pa-ha-na-erh-yu-i-ch’i;A-pa-k'a-pei-tzu-fu;A-pa-k’a-pei-tzu-fu;Abaga Pei-tzu-fu;Abagnar Qi;Hsi-lin-hao-t'e;Hsi-lin-hao-t’e;Hsi-lin-kuo-ch'in;Hsi-lin-kuo-ch’in;Pei-tzu-fu;Pei-tzu-miao;Peitzemiao;Silinghot;XIL;Xilin Hot;Xilinhaote Shi;Xilinhot;a ba ha na er qi;xi lin hao te;xi lin hao te shi;锡林浩特;锡林浩特市;阿巴哈纳尔旗; +city::2033866;Xifeng;Hsi-feng;Hsi-feng-chen;Hsi-feng-hsien;Sifeng;T'ao-lu;T’ao-lu;Xifeng; +city::2033934;Xiaoshi;Benxi;Benxi Xian;Hsiao-shih;Hsiao-shih-chen;Pen-ch'i;Pen-ch'i-hsien;Pen-ch’i;Pen-ch’i-hsien;Pen-hsi;Pen-hsi-hsien;Xiaoshi;Xiaoshi Zhen;ben xi;ben xi xian;xiao shi;xiao shi zhen;小市;小市镇;本溪;本溪县; +city::2034141;Wuchang;Huan-hsi-ling;Uchan;Wu-ch'ang-chen;Wu-ch'ang-hsien;Wu-ch'ang-t'ing;Wu-ch’ang-chen;Wu-ch’ang-hsien;Wu-ch’ang-t’ing;Wuchang;Wuchang Shi;Wuchang Zhen;Wutschangting;wu chang;wu chang shi;wu chang zhen;Учан;五常;五常市;五常镇; +city::2034221;Wangqing;Ta-tu-ch'uan;Ta-tu-ch’uan;Ta-wang-kou;Vancine;Wang-ch'ing;Wang-ch'ing-chen;Wang-ch'ing-hsien;Wang-ch’ing;Wang-ch’ing-chen;Wang-ch’ing-hsien;Wangqing;Wangqing Xian;Wangqing Zhen;wang qing;wang qing xian;wang qing zhen;Ванцине;汪清;王清县;王清镇; +city::2034226;Hepingjie;Hepingjie;Wan-kou;Wangou;Wangou Zhen;he ping jie;wan gou;wan gou zhen;和平街;湾沟;湾沟镇; +city::2034228;Wangkui;Shuang-lung;Ta-wu-ching-tzu;Wang-k'uei;Wang-k'uei-chen;Wang-k'uei-hsien;Wang-k’uei;Wang-k’uei-chen;Wang-k’uei-hsien;Wangkui;Wangkui Xian;Wangkui Zhen;wang kui;wang kui xian;wang kui zhen;望奎;望奎县;望奎镇; +city::2034312;Ulanhot;HLH;Horqin Youyi Qianqi;Huai-yuan-chen;Huai-yuän-chen;K'o-erh-ch'in-yu-ch'ien-ch'i;K'o-erh-ch'in-yu-i-ch'ien-ch'i;K’o-erh-ch’in-yu-ch’ien-ch’i;K’o-erh-ch’in-yu-i-ch’ien-ch’i;Ulan Hot;Ulan Hoto;Ulan-Khoto;Ulanhot;Ulanhot Shi;Van''yemyao;Van’’yemyao;Wang-yeh-miao;Wangyemiao;Wu-lan-hao-t'e;Wu-lan-hao-t'e-shih;Wu-lan-hao-t’e;Wu-lan-hao-t’e-shih;Wulanhaote Shi;wang ye miao;wu lan hao te;wu lan hao te shi;乌兰浩特;乌兰浩特市;王爷庙; +city::2034340;Tumen;T'u-men-chan;T'u-men-shih;Tjumenskij;Tumen;T’u-men-chan;T’u-men-shih;Тюменский; +city::2034400;Tongliao;Bayan Tala;Horqin Qu;Ke'erqin Qu;Ke’erqin Qu;Pa-lin-ai-hsin;Pai-an-ta-la;Pai-yin-t'ai-lai;Pai-yin-t’ai-lai;Payintala;T'ung-liao;T'ung-liao-hsien;T'ung-liao-shih;TGO;Thong Lieu;Thong-liau-chhi;Thong-liâu-chhī;Thung-liau-su;Thông Liêu;Thûng-liàu-sṳ;Tongliao;Tongliao Shi;Tonljao khot;Tung-lieu;Tunglao;Tungliaochen;Tunljao;Tŭng-lièu;T’ung-liao;T’ung-liao-hsien;T’ung-liao-shih;ba yan ta la;ke er qin qu;tong liao;tong liao shi;tunglyao si;twnglyaw;Тонляо хот;Тунгљао;Тунляо;تونگلیاو;ٹونگلیاو;巴彦塔拉;科尔沁区;通辽;通辽市;通遼;通遼市;퉁랴오 시; +city::2034439;Tieling;T'e-ling;T'ieh-ling;T'ieh-ling-hsien;TTV;Telin;Tieling;Tiělíng;T’e-ling;T’ieh-ling;T’ieh-ling-hsien;tie ling;tyeling si;zhi ling shi;Телин;鉄嶺市;鐵嶺;铁岭;톄링 시; +city::2034440;Tieli;T'ieh-li;T'ieh-li-chen;T'ieh-li-hsien;T'ieh-shan-pao;Teli;Tieli;Tieli Shi;Tieli Zhen;T’ieh-li;T’ieh-li-chen;T’ieh-li-hsien;T’ieh-shan-pao;tie li;tie li shi;tie li zhen;铁力;铁力市;铁力镇; +city::2034497;Guangming;Guangming;T'ao-nan-chen;T'ao-nan-fu;T'ao-nan-hsien;Tao'an;Taonan;Taonan Shi;Taonan';Tao’an;T’ao-nan-chen;T’ao-nan-fu;T’ao-nan-hsien;guang ming;tao nan shi;Таонань;光明;洮南市; +city::2034599;Tailai;T'ai-lai-chen;T'ai-lai-hsien;Tailai;Tailai Xian;Tailai Zhen;Tailaichi;T’ai-lai-chen;T’ai-lai-hsien;tai lai;tai lai xian;tai lai zhen;泰来;泰来县;泰来镇; +city::2034600;Taikang;Dorbod;Du'erbote;Du'erbote Mengguzu Zizhixian;Duerbotetsi;Durvet;Du’erbote;Du’erbote Mengguzu Zizhixian;Hsiao-hao-tzu;Syaokhaotszy;T'ai-k'ang-chen;T'ai-k'ang-hsien;Taikang;Taikang Zhen;Taykan;Tu-erh-po-t'e;Tu-erh-po-t'e-ch'i;Tu-erh-po-t'e-meng-ku-tsu-tzu-chih-hsien;Tu-erh-po-t’e;Tu-erh-po-t’e-ch’i;Tu-erh-po-t’e-meng-ku-tsu-tzu-chih-hsien;T’ai-k’ang-chen;T’ai-k’ang-hsien;du er bo te;du er bo te meng gu zu zi zhi xian;tai kang;tai kang zhen;杜尔伯特;杜尔伯特蒙古族自治县;泰康;泰康镇; +city::2034615;Tahe;Ku-ch'i-ku;Ku-ch’i-ku;T'a-ho;Tahe;T’a-ho; +city::2034638;Sujiatun;Hsu-chia-t'un;Hsu-chia-t’un;Ssu-chia-t'un;Ssu-chia-t’un;Su-chia-t'un;Su-chia-t’un;Suczjatun';Sujiatun;Sukiatun;Суцзятунь; +city::2034651;Suileng;K'o-yin-ho;K’o-yin-ho;Sui-leng Hsien;Sui-leng-chen;Suileng;Suileng Xian;Suileng Zhen;sui leng;sui leng xian;sui leng zhen;绥棱;绥棱县;绥棱镇; +city::2034655;Suihua;Chui-hua;Chŭi-huá;Pei-lin-tzu;Pei-t'uan-lin-tzu;Pei-t’uan-lin-tzu;Suej-chua;Suejkhua;Sui-hoa-chhi;Sui-hoà-chhī;Sui-hua-chen;Sui-hua-hsien;Sui-hwa;Suihua;Suihua Shi;Sujkhua;Tuy Hoa;Tuy Hóa;sayhwa;ssu-ihwa si;sui hua;sui hua shi;Суејхуа;Суйхуа;سایهوا;سوئہوا;綏化;綏化市;绥化;绥化市;쑤이화 시; +city::2034691;Songjianghe;Songjianghe;Songjianghe Zhen;Sung-chiang-ho;song jiang he;song jiang he zhen;松江河;松江河镇; +city::2034714;Siping;OSQ;S-pching;Se-bing;Siping;Sipingjie;Ssupingkai;Su-peng-chhi;Supin;Sypin;Szeping;Szepingkai;Sé-bìng;Sìpíng;Sìpíngjiē;Sù-pêng-chhī;Tu Binh;Tứ Bình;si ping;si ping jie;si ping shi;spng jyln;sseuping si;sypyng;Сипинг;Съпин;Сыпин;سپنگ، جیلن;سیپینگ;四平;四平市;四平街;쓰핑 시; +city::2034754;Shunyi;Shun'i;Shun-i;Shun-i-ch'u;Shun-i-ch’ü;Shun-i-hsien;Shunyi;shun yi;Шуньи;顺义; +city::2034761;Shulan;Shu-lan-chen;Shu-lan-chieh;Shulan;Shulan';Ssu-chia-fang;Шулань; +city::2034786;Shuangyashan;Chien-shan;Seng-ak-sang;Shuang-ya-shan-shih;Shuangjashan;Shuangyashan;Shuanujashan';Siang-ah-san-chhi;Siang-ah-san-chhī;Song Ap Son;Song Áp Sơn;Suang-ja-san;Sĕ̤ng-ák-săng;shuang ya shan;shuang ya shan shi;shwangyashan;swang-yasan si;Šuang-ja-šan;Шуангјашан;Шуанъяшань;شوانگیاشان;双鴨山市;双鸭山市;雙鴨山;솽야산 시; +city::2034791;Shuangyang;Shuang-yang-chen;Shuang-yang-ho;Shuang-yang-hsien;Shuangyang;Shwangyang;Suan-yang-ho; +city::2034834;Shuangcheng;Schwang-tschong-ting;Schwang-tschöng-ting;Schwangcheng;Shuang-ch'eng-chen;Shuang-ch'eng-hsien;Shuang-ch'eng-pao;Shuang-ch’eng-chen;Shuang-ch’eng-hsien;Shuang-ch’eng-pao;Shuangcheng;Shwangcheng; +city::2034918;Shiguai;Shiguai;Shiguai Jiedao;Shiguai Qu;Shiguaigou;Shih-kuai;Shih-kuai-chen;Shih-kuai-kou;Shih-kuai-kou-kung-ch'u;Shih-kuai-kou-kung-ch’ü;Shih-kuai-tzu;Shih-kuai-tzw;Shihkuaitsun;Xiguit Kuangqu;shi guai;shi guai jie dao;shi guai kuang qu;shi guai qu;石拐;石拐区;石拐矿区;石拐街道; +city::2034937;Shenyang;Feng-t'ien;Feng-t’ien;Gorad Shehn'jan;Moukden;Mukden;SHE;Sen'gian'nk;Sen-jang;Senjana;Senjang;Senjangas;Senjango;Shehn'jan;Shehn'jan khot;Shen'jan;Shen-yang-hsien;Shen-yang-shih;Shengking;Shenjang;Shenyan;Shenyang;Shenyang Shi;Shunjan;Sim-iong-chhi;Sing-iong;Sjenyang;Swnjyangh;Sím-iông-chhī;Sīng-iòng;Tham Duong;Thẩm Dương;cenyan;chen yang;chen yang shi;san'yanga;sein hyang;sen'yan;senayanga;seon-yang;seon-yang si;shen yang;shen yang shi;shnyang;shnyangh;shynyang;sim-yang;Ŝenjango;Šen-jang;Šenjangas;Šeņjana;Σενγιάνγκ;Горад Шэньян;Шеньян;Шеньяң;Шенјанг;Шънян;Шэньян;Шэньян хот;שן-יאנג;شنيانغ;شنیانگ;شن‌یانگ;شینیانگ;شېنياڭ شەھىرى;शेनयांग;षन्यांग;ਸ਼ੇਨਯਾਂਗ;சென்யாங்;ഷെന്യാങ്;เสิ่นหยาง;沈阳;沈阳市;沉阳市;瀋陽;瀋陽市;선양;선양 시;심양; +city::2034995;Shanhecun;Shan-ho-t'un;Shan-ho-t’un;Shanhecun;Shanhetun;shan he cun;山河村; +city::2034996;Shanhaiguan;Lin-yu;Lin-yü;SHF;Shan'khajguan';Shan-hai-kuan;Shanhaiguan;Shanhaikwan;shan hai guan;Шаньхайгуань;山海关; +city::2035002;Shangzhi;Chu-he;Chu-ho;Chu-ho-hsien;Shang-chih;Shang-chih-chen;Shangzhi;Shangzhi Shi;Uchzukhe;Wu-chi-mi-ho;Wu-chu-ho;Wukimichan;Wukimiho;shang zhi;shang zhi shi;尚志;尚志市; +city::2035182;Sanchazi;Hsia-tien-tzu;San-ch'a-tze;San-ch'a-tzu;San-ch’a-tze;San-ch’a-tzu;Sanchazi; +city::2035196;Salaqi;Sa-hsien;Sa-la-ch'i;Sa-la-ch'i-hsien;Sa-la-ch’i;Sa-la-ch’i-hsien;Salaqi;Salatsi;Salqin;Saratsi;Saratsi-ting;T'u-mo-t'e-yu-ch'i;Tumd Youqi;Tumoteyou Qi;T’u-mo-t’e-yu-ch’i;sa la qi;tu mo te you qi;土默特右旗;萨拉齐; +city::2035225;Fendou;Fendou;Fendou Jiedao;Jang-hu-lu;Ranghulu;Ranghulu Qu;Ya-hu-lu-p'ao;Ya-hu-lu-p’ao;fen dou;fen dou jie dao;rang hu lu;rang hu lu qu;奋斗;奋斗街道;让胡路;让胡路区; +city::2035261;Taihecun;Ch'i-ho-ho;Ch'i-t'ai-ho;Ch’i-ho-ho;Ch’i-t’ai-ho;Qitaihe;Taihe;Taihecun;tai he;tai he cun;太和;太河村; +city::2035265;Qiqihar;Ca-ca-hak-i;Ch'i-ch'i-ha-erh;Ch'i-ch'i-ha-erh-shih;Chhe-chhe-ha-ngi-su;Chhè-chhè-hâ-ngì-sṳ;Ch’i-ch’i-ha-erh;Ch’i-ch’i-ha-erh-shih;Ciciharas;Ciciharo;Cicikar;Cicikhar;Cà̤-cà̤-hăk-ī;Lung-chiang;Lung-chiang-hsien;Lungkiang;NDG;Qiqiha'er;Qiqiha'er Shi;Qiqihaer;Qiqihar;Qiqihar Shi;Qiqihar-chhi;Qiqihar-chhī;Qiqiha’er;Qiqiha’er Shi;Te Te Cap Nhi;Tsitsihar;Tề Tề Cáp Nhĩ;Zizikar;chichi har;chichiha-eol si;chichiharu;chichiharu shi;chychyhar;qi qi ha er;qi qi ha er shi;Ĉiĉiharo;Čičiharas;Ћићихар;Цицикар;Цицихар;Ціцікар;چىچىخار شەھىرى;چیچیهار;چیچیہار;ฉีฉีฮาร์;チチハル;チチハル市;齊齊哈爾;齊齊哈爾市;齐齐哈尔;齐齐哈尔市;치치하얼 시; +city::2035325;Qinggang;Ch'ing-kang;Ch'ing-kang-chen;Ch'ing-kang-hsien;Ch’ing-kang;Ch’ing-kang-chen;Ch’ing-kang-hsien;Qinggang;Qinggang Xian;Qinggang Zhen;Tsingkang;Tso-shu-kang;qing gang;qing gang xian;qing gang zhen;青冈;青冈县;青冈镇; +city::2035399;Songyuan;Songyuan;Sunujuan';Sōngyuán;YSQ;sangywan;song yuan;ssung-wian si;Сунъюань;سانگیوان;松原;쑹위안 시; +city::2035453;Pingzhuang;P'ing-chuang;Pingzhuang;Pingzhuang Zhen;P’ing-chuang;Yuanbaoshan Qu;ping zhuang;ping zhuang zhen;yuan bao shan qu;元宝山区;平庄;平庄镇; +city::2035511;Panshi;Mo-p'a-shan;Mo-p'an-shan;Mo-p’a-shan;Mo-p’an-shan;P'an-shih;P'an-shih-chen;P'an-shih-hsien;Pan'shi;Panshi;Panshihtun;P’an-shih;P’an-shih-chen;P’an-shih-hsien;Паньши; +city::2035513;Panshan;P'an-shan-chen;P'an-shan-hsien;Panshan;P’an-shan-chen;P’an-shan-hsien;Shuang-t'ai-tzu;Shuang-t’ai-tzu; +city::2035593;Nianzishan;Ch'ien-nien-tzu-shan;Ch’ien-nien-tzu-shan;Nianzishan;Nien-tzu-shan;Nien-tzu-shan-chan; +city::2035601;Nenjiang;Mergen;Mo-erh-ken;Nen-ch'eng;Nen-ch'eng-hsien;Nen-chiang;Nen-chiang-chen;Nen-ch’eng;Nen-ch’eng-hsien;Nenjiang;Nenjiang Xian;Nenkiang;Nun Cheng;Nun-ch'iang;Nun-ch'ien;Nun-ch’iang;Nun-ch’ien;Nunkiang;Nunkianghsien;Nünkianghsien;nen jiang;nen jiang xian;嫩江;嫩江县; +city::2035610;Nehe;Bordo;Bordotschan;Na-ho;Ne-ho;Nehe;Nehkheh;Nekhe;No-ho;No-ho-chen;No-ho-hsien;Nê-ho;Po-erh-to;Porto;Нэхэ; +city::2035635;Nantai;Nantai;Nantai Zhen;nan tai;nan tai zhen;南台;南台镇; +city::2035644;Nanpiao;Nanpiao;Pien-lien-tzu;nan piao;南票; +city::2035669;Lianhe;Lianhe;Lianhe Jiedao;Nan-ch'a-t'un;Nan-ch’a-t’un;Nancha;Nancha Qu;lian he;lian he jie dao;nan cha;nan cha qu;南岔;南岔区;联合;联合街道; +city::2035707;Mujiayingzi;; +city::2035715;Mudanjiang;Bo-tan-kang-chhi;Bó͘-tan-kang-chhī;MDG;Mau GJon Giang;Mu-dang-geng;Mu-tan-chiang;Mu-tan-chiang-shih;Mu-tan-tiang;Mu-tan-ťiang;Mudan'czjan;Mudancjan;Mudandziangas;Mudandzjan;Mudanjiang;Mudanjiang Shi;Mutankiang;Mū-dăng-gĕ̤ng;Mẫu Đơn Giang;mu dan jiang;mu dan jiang shi;mudanjang si;mwdanjyang;Мудандзян;Муданьцзян;Муданђанг;مودانجیانگ;مۇدەنجياڭ شەھىرى;牡丹江;牡丹江市;무단장 시; +city::2035746;Mishan;Dunan;Hsin-mi-shan;Mi-shan-chen;Mishan;Mishan';Tung-an;Мишань; +city::2035754;Mingyue;An-t'u;An-t'u-hsien;An-t’u;An-t’u-hsien;Antuzhan;Ming-yueh-chen;Ming-yueh-kou;Ming-yueh-kou-chen;Ming-yüeh-chen;Ming-yüeh-kou;Ming-yüeh-kou-chen;Mingyue;Mingyuegou;Weng-sheng-la-tzu;ming yue;明月; +city::2035758;Mingshui;Hsing-lung-chen;Ming-shui-chen;Ming-shui-hsien;Mingshui;Mingshui Xian;Mingshui Zhen;ming shui;ming shui xian;ming shui zhen;明水;明水县;明水镇; +city::2035801;Meihekou;Hai-lung;Hai-lung-hsien;Hailong;Mei-ho-k'ou;Mei-ho-k'ou-chen;Mei-ho-kow;Mei-ho-k’ou;Mei-ho-k’ou-chen;Meihekou; +city::2035836;Manzhouli;Lu-pin-hsien;Lupin;Man-chou-li;Man-chou-li-shih;Man-chow-li;Manchuli;Manchuria;Manchuriya;Manchzhuriya;Mandschurei;Manzhouli;NZH;man zhou li;man zhou li shi;man'chzhurija;manjeouli;manzhuur;Манжуур;Маньчжурия;満州里;満州里市;满洲里市;만저우리; +city::2035966;Longjing;Liu-tao-kou;Longjing;Lung-ching;Lung-ching-chen;Lung-ching-chieh;Lung-ching-shih;Lung-ching-ts'un;Lung-ching-ts’un;Luntszintsun;Ryuseison;Ryūseison;Yanji;Yen-chi-hsien;Yonjontsuon;long jing;龙井; +city::2035970;Longjiang;Chu-chia-k'an;Chu-chia-k’an;Chukiakan;Lonczjan;Longjiang;Longjiang Xian;Longjiang Zhen;Lung-chiang;Lung-chiang-chen;T'u-erh-ch'ih-ha;T’u-erh-ch’ih-ha;long jiang;long jiang xian;long jiang zhen;Лонцзян;龙江;龙江县;龙江镇; +city::2035980;Longfeng;Longfeng;Longfeng Jiedao;Longfeng Qu;Lung-feng;Lung-feng-shan;long feng;long feng jie dao;long feng qu;龙凤;龙凤区;龙凤街道; +city::2036033;Liuhe;Liu-ho;Liu-ho-chen;Liu-ho-hsien;Liu-hu-ch'eng;Liu-hu-ch’eng;Liu-shu-ho-tzu;Liuhe;Ljukheh;Luiho;liu he;Люхэ;柳河; +city::2036055;Lishu;Chiu-li-shu;Feng-hua;Fenghwa;Li-shu-chen;Li-shu-hsien;Lishat';Lishu;Mai-mai-chieh;li shu;Лишать;梨树; +city::2036066;Linkou;Lin-k'ou-chen;Lin-k'ou-hsien;Lin-k’ou-chen;Lin-k’ou-hsien;Linkou;Linkou Xian;Linkow;lin kou;lin kou xian;林口;林口县; +city::2036069;Linjiang;Lin'czjane;Lin-chiang;Lin-chiang-hsien;Linjiang;Mao-erh-shan;Mao-tzu-shan;Maoerhshanchan;lin jiang;Линьцзяне;临江; +city::2036075;Lingyuan;Chien-ch'ang;Kienchang;Ling-yuan-chen;Ling-yuan-hsien;Ling-yüan-chen;Ling-yüan-hsien;T'a-kou; +city::2036081;Lingdong;Ling-tung;Lingdong; +city::2036106;Liaozhong;A-shih-niu-lu;A-ssu-niu;A-ssu-niu-lu;Chiu-liao-chung;Liao-chung;Liao-chung-chen;Liao-chung-hsien;Liaozhong;Lyaochzhun; +city::2036109;Liaoyuan;Dongliao;Hsi-an;Laeojuan;Liao-juean;Liao-jüan;Liao-yuan-shih;Liao-yüan-shih;Liaojuanas;Liaoyuan;Liau-goan-chhi;Lieu Nguyen;Lieu-nguong;Liâu-goân-chhī;Lièu-nguòng;Liêu Nguyên;Ljaojuan';Ljaojuen;Läojuan;Pei-feng;Pei-feng-hsien;Shian;Sian;T'a-k'a-ta;Ta-ko-tan;Tung-liao;T’a-k’a-ta;liao yuan;liao yuan shi;lyaowian si;lyawywan;Љаојуен;Ляоюань;لیاویوان;辽源市;遼源;遼源市;랴오위안 시; +city::2036113;Liaoyang;LQQ;Liao-jang;Liao-yang-hsien;Liao-yang-shih;Liaojangas;Liaoyang;Liau-iong-chhi;Lieu Duong;Lieu-iong;Liâu-iông-chhī;Lièu-iòng;Liêu Dương;Ljaojan;Ljaojang;liao yang;liao yang shi;lyaoyang si;lyawyang;Љаојанг;Ляоян;لياۋياڭ شەھەر;لیاویانگ;辽阳市;遼陽;遼陽市;랴오양 시; +city::2036226;Lanxi;Lan-hsi;Lan-hsi-chen;Lan-hsi-hsien;Lansi;Lanxi;Lanxi Xian;Lanxi Zhen;Shuang-miao-tzu;lan xi;lan xi xian;lan xi zhen;兰西;兰西县;兰西镇; +city::2036237;Langxiang;Lang-hsiang;Langxiang;Langxiang Zhen;lang xiang;lang xiang zhen;朗乡;朗乡镇; +city::2036241;Langtou;Lang-t'ou-chen;Lang-t’ou-chen;Langtou; +city::2036283;Kuandian;K'uan-tien;K'uan-tien-chen;K'uan-tien-hsien;Kuandian;Kwan-tien;K’uan-tien;K’uan-tien-chen;K’uan-tien-hsien; +city::2036337;Kaiyuan;Jih-pen-tsu-chieh-ti;K'ai-yuan-chen;Kaiyuan;Kajjuan';K’ai-yüan-chen;Sun-chia-t'ai;Sun-chia-t’ai;Кайюань; +city::2036338;Kaitong;Ch'i-ching-tsa;Ch'i-ching-tzu;Ch’i-ching-tsa;Ch’i-ching-tzu;K'ai-t'ung;K'ai-t'ung-chen;K'ai-t'ung-hsien;Kaibung;Kaitong;Kaitun;K’ai-t’ung;K’ai-t’ung-chen;K’ai-t’ung-hsien;T'ung-yu;Tongyu;T’ung-yü;kai tong;开通; +city::2036389;Jixi;Chi-hsi;Chi-hsi-shih;Chi-ning;Chi-ning-chieh;Czisi;Dzisi;Gie-sa;Giĕ-să̤;JXA;Jixi;Jixi Shi;Ke Tay;Ke-se-chhi;Ke-se-chhī;Kisi;Kê Tây;Ti-si;ji xi;ji xi shi;jisi si;jyshy;Ťi-si;Ђиси;Цзиси;جیشی;鶏西;鶏西市;鷄西;鸡西;鸡西市;지시 시; +city::2036401;Jiutai;Chiu-t'ai;Chiu-t'ai-chen;Chiu-t'ai-hsien;Chiu-t’ai;Chiu-t’ai-chen;Chiu-t’ai-hsien;Hsia-chiu-t'ai;Hsia-chiu-t’ai;Jiutai;Shachutai;Shāchūtai;Siakiutai;T'eu-t'ai;Teutay;Teymau;Teymaū;T’eu-t’ai; +city::2036403;Jiupu;; +city::2036418;Jishu;Chi-shu;Jishu; +city::2036427;Jinzhou;Cam Chau;Chien-hsien;Chin;Chin-chou;Chin-chou-shih;Chin-hsien;Chinchow;Czin'chzhou;Cẩm Châu;Dzindzou;Dzindžou;Ging-ciu;Gjingou;Gīng-ciŭ;JNZ;Jintsjou;Jinzhou;Kim-chiu-chhi;Kinchou;Kintschou;Kím-chiu-chhī;Tin-cou;dzinjou;jin zhou;jin zhou shi;jinjeou si;jnzhww;jynjw;Ĝjinĝou;Ťin-čou;Ђинџоу;Цзиньчжоу;Цзіньчжоу;جنژوو;جینجو;ძინჯოუ;錦州;錦州市;锦州市;진저우 시; +city::2036434;Lianshan;Chin-hsi;Chin-hsi-chen;Chinshi;Chinsi;Jinxi;Leinshan;Lianshan;Lianshan Qu;Lien-shan;lian shan;lian shan qu;连山;连山区; +city::2036458;Jining;Chi-ning;Chi-ning-hsien;Chi-ning-shih;Czinin;Jining;Jining Qu;P'ing-ti-ch'uan;P'ing-ti-ch'uan-chen;P’ing-ti-ch’üan;P’ing-ti-ch’üan-chen;Tsining;Tszinin;ji ning;ji ning qu;ping de quan zhen;Цзинин;平地泉镇;集宁;集宁区; +city::2036502;Jilin;Cat Lam;Chi-lin;Chi-lin-shih;Chi-ling;Ciudad de Jilin;Csilin;Czilin';Cát Lâm;Dzilin;Dzilinas;Gek-ling;Gilino;Girin;Girin khot;Gék-lìng;JIL;Jilin;Jilin Ceety;Jilin City;Jilin Hiria;Jilin Shi;Jilin i Jilin;Jilinstad;Kiat-lim-chhi;Kiat-lîm-chhī;Kilin;Kirin;Kota Jilin;Ti-lin;Yung-chi;Yung-chi-hsien;Yung-chi-shih;Yungki;gylyn;ji lin;ji lin shi;jilin si;jilina;Ĝilino;Ťi-lin;Ђилин;Гирин;Гирин хот;Дзилин;Цзилинь;גילין;جىلىن شەھىرى;جیلن شہر;جی‌لین;ਜਿਲਿਨ;吉林;吉林市;지린 시; +city::2036519;Jidong;Chi-tung;Chi-tung-chen;Jidong; +city::2036536;Minzhu;Chiacho;Chiao-ho;Chiao-ho-chen;Chiao-ho-hsien;Czjaokheh;Jiaohe;Kiaoho;Minzhu;O-mu-hsien;Omu;Ta-chiao-ho;Tachiaho;Takiaoho;min zhu;Цзяохэ;民主; +city::2036581;Jiamusi;Ch'a-mu-ssu;Chia-mu-ssu;Chia-mu-ssu-shih;Chieh-mu-ssu;Ch’a-mu-ssu;Czjamusy;Dziamusi;Ga-muk-su;Giai Moc Tu;Giai Mộc Tư;Gjamusi;Gă-mŭk-sṳ̆;Hua-ch'uan-hsien;Hua-chuan;Hua-ch’uan-hsien;Hwachwan;JMU;Jiamusi;Jiamusi Shi;Ka-bok-su-chhi;Ka-bo̍k-su-chhī;Kiamusas;Kiamusze;Tia-mu-s';jamusseu si;jamusu;jamusu shi;jia mu si;jia mu si shi;jyamwsy;Ťia-mu-s’;Ђамуси;Цзямусы;جيامۇسى شەھىرى;جیاموسی;ジャムス;ジャムス市;佳木斯;佳木斯市;자무쓰 시; +city::2036595;Jalai Nur;Cha-lai-no-erh;Chaiainor;Chalainor;Chzhalajnor;Chzhalaynor;Dalainur;Dalaynur;Jalai Nur;Zhalai Nuo'er;Zhalai Nuo’er;zha lai nuo er;Чжалайнор;扎赉诺尔; +city::2036597;Jiagedaqi;Chia-ko-ta-ch'i;Chia-ko-ta-ch’i;JGD;Jagdaqi;Jiagedaqi;Jiāgédáqí;K'u-erh-ch'i;K'u-lu-ch'i;Kurchi;K’u-erh-ch’i;K’u-lu-ch’i;jageodachi gu;jia ge da qi qu;加格达奇区;加格達奇区;加格達奇區;자거다치 구; +city::2036619;Hushitai;Hu-shih-t'ai;Hu-shih-t’ai;Hushitai; +city::2036653;Hunchun;Hui-ch'un;Hui-ch’un;Hun-ch'un-chen;Hun-ch'un-hsien;Hun-ch'ung;Hun-ch’un-chen;Hun-ch’un-hsien;Hun-ch’ung;Hunchun;Hunchun Shi;Hungtschung;Khun'chun';hui chun;hui chun shi;Хуньчунь;珲春;珲春市; +city::2036670;Hulan Ergi;Fu-erh-la-chi;Fu-la-erh-chi;Fularki;Hulan Ergi;Lung-chiang; +city::2036671;Hulan;Chu-lan-tschong;Chu-lan-tschöng;Hu-lan-chen;Hu-lan-hsien;Hu-lang-ch'eng;Hu-lang-ch’eng;Hulan;Khulan;Хулан; +city::2036685;Huinan;Chiu-hui-nan;Hui-nan-chen;Hui-nan-hsien;Huinan;Huinanzhen;Hwei-nan;Hweinan-ting; +city::2036713;Huanren;Chiu-huai-jen;Huai-jen;Huan-jen;Huan-jen-chen;Huan-jen-hsien;Huanren;Hwanjen;Yuan Jen; +city::2036734;Huangnihe;Huang-ni-ho;Huang-ni-ho-tzu;Huangnihe; +city::2036753;Huanan;Ch'ien-chen-chieh;Ch'ien-chen-hsiang;Ch’ien-chen-chieh;Ch’ien-chen-hsiang;Hu-nan-ying;Hu-nan-ying-chen;Hua-ch'uan;Hua-ch'uan-chen;Hua-ch’uan;Hua-ch’uan-chen;Hua-nan-chen;Huanan;Huanan Xian;Huanan Zhen;hua nan;hua nan xian;hua nan zhen;桦南;桦南县;桦南镇; +city::2036776;Huadian;Hua-tien;Hua-tien-chen;Hua-tien-hsien;Huadian;Huen-tien;Hwatien;K'uang-kai;Koangai;Kuan-chieh;K’uang-kai; +city::2036876;Honggang;Honggang;Honggang Jiedao;Honggang Qu;hong gang;hong gang jie dao;hong gang qu;红岗;红岗区;红岗街道; +city::2036892;Hohhot;Choech Chot;Choech chot;Chöch Chot;Chöch chot;HET;Hohhot;Hohhot Shi;Hohhot-chhi;Hohhot-chhī;Hohhot-su;Hohhot-sṳ;Hohotas;Hohoto;Hou-ho;Hoĥoto;Hu-ho-hao-t'e;Hu-ho-hao-t'e-shih;Hu-ho-hao-t’e;Hu-ho-hao-t’e-shih;Huhe Hoter;Huhehaote;Huhehot;Huhhot;Khokh khot;Khokhot;Khukh-Khoto;Koekxot shehiri;Kuei-hua;Kuei-sui;Kuei-sui-hsien;Kuei-sui-shih;Kuku-khoto;Kwei-hwa-cheng;Kwei-hwa-ting;Kweihwa;Kweihwa-Suiyuan;Kweisui;Kweisui-hsien;Kökxot shehiri;Suiyuan;Suiyüan;fufuhoto;fufuhoto shi;hohota;hu he hao te;hu he hao te shi;hu hxt;huheohaoteo si;hwhhwt;hwhwt;Хох хот;Хохот;Хух-Хото;Хөх хот;חוחחוט;هوهوت;ہوہوٹ;होहोत;ฮูฮอต;མཁར་སྔོན་གྲོང་ཁྱེར།;ᠬᠥᠬᠡᠬᠣᠲᠠ;フフホト;フフホト市;呼和浩特;呼和浩特市;후허하오터 시; +city::2036920;Fendou;Fendou;Hengshan;Hengshan Qu;fen dou;heng shan qu;奋斗;恒山区; +city::2036933;Helong;Helong;Helong Shi;Helong Zhen;Ho-lung;Ho-lung-chen;Khehlune;Longcheng Zhen;San-tao-kou;he long;he long shi;he long zhen;long cheng zhen;Хэлуне;和龙;和龙市;和龙镇;龙城镇; +city::2036959;Heishan;Chen-an;He Shan;Hei-shan-chen;Hei-shan-hsien;Heishan; +city::2036973;Heihe;Ai-hun;Ai-hun-hsien;Aigun;Aihui;Chej-che;HEK;Hac Ha;Haik-o;Hei-ho;Hei-ho-chen;Hei-ho-t'un;Hei-ho-t’un;Heihe;Heihe Shi;Hek-ho-chhi;Hek-hô-chhī;Háik-ò̤;Hắc Hà;Khehjkheh;Sa-ha-liang;Sachaljan;Sakhalyan;Ta-hei-ho;hayhy;hei he;hei he shi;heiheo si;Хэйхэ;هایهی;ہئیہے;黑河;黑河市;黒河;黒河市;헤이허 시; +city::2036986;Hegang;Che-kang;Hac Cuong;Hao-kang;Hao-kang-shih;Hegang;Hegang Shi;Hegangas;Hingshanchen;Hinshanchen;Ho-kang;Hok-gong;Hok-kong-chhi;Ho̍k-kong-chhī;Hsian-yuan-t'un;Hsian-yüan-t’un;Hsiangyuantun;Hsing-shan;Hsing-shan-chen;Hsing-shan-chieh;Hsinganchen;Hŏk-gŏng;Hạc Cương;Khegan;Khegang;Khehgan;Khugan;Sinshan Chzhen;he gang;he gang shi;heogang si;hngang;Хеганг;Хъган;Хэган;هنگانگ;ہیگانگ;鶴崗;鶴崗市;鹤岗;鹤岗市;허강 시; +city::2037013;Harbin;Cap Nhi Tan;Charbin;Charbinas;Charmpin;Cáp Nhĩ Tân;Gorad Kharbin;HRB;Ha'erbin;Ha-erh-pin;Ha-erh-pin-shih;Harbin;Harbin Shi;Harbin-chhi;Harbin-chhī;Harbina;Harbino;Ha’erbin;Kharbin;Lungsod ng Harbin;Pin-chiang;Pin-chiang-hsien;Pinkiang;Xarbin;ha er bin;ha er bin shi;ha-eolbin si;har bin;harabina;harbn;harbyn;harpina;harubin;harubin shi;hrbyn;kharbini;Χαρμπίν;Горад Харбін;Харбин;Харбін;Խարբին;חרבין;خاربىن شەھىرى;هاربن;هاربین;ہاربن;हारबिन;हार्पिन;ਹਾਰਬਿਨ;ฮาร์บิน;ဟာရ်ပင်းမြို့;ხარბინი;ハルビン;ハルビン市;哈尔滨;哈尔滨市;哈爾濱;하얼빈 시; +city::2037069;Hailun;Hai-lun-chen;Hai-lun-hsien;Hailun;Hailun Shi;Hailun Zhen;T'ung-ken;T'ung-ken-ho;Tung-kei;T’ung-ken;T’ung-ken-ho;hai lun;hai lun shi;hai lun zhen;海伦;海伦市;海伦镇; +city::2037075;Hailin;Hai-lin-chen;Hai-lin-ts'un;Hai-lin-ts’un;Hailin;Hailin Shi;Khajlin;hai lin;hai lin shi;Хайлин;海林;海林市; +city::2037078;Hailar;HLD;Hai-la-erh;Hai-la-erh-shih;Hailar;Hailar Shi;Hairaru;Hairāru;Hu-lun;Khailar;Khajlar;hai la er qu;hairaru qu;Хайлар;ハイラル区;海拉尔区; +city::2037086;Haicheng;Hai-ch'eng-chen;Hai-ch'eng-hsien;Hai-ch’eng-chen;Hai-ch’eng-hsien;Haicheng;Haicheng Shi;Haitschong;Haitschöng;Lo-lang;hai cheng;hai cheng shi;海城;海城市; +city::2037222;Gongzhuling;Gunchzhulina;Huai-te;Huai-to-hsien;Huaide;Kung-chu-ling;Kung-chu-ling-chen;Гунчжулина; +city::2037240;Gongchangling;Gongchangling;Kung-ch'ang-ling;Kung-ch’ang-ling; +city::2037252;Genhe;Ergun Zuoqi;Genhe;Genhe Shi;Hexi;Hexi Jiedao;Ken-ho;O-erh-ku-na-ch'i;O-erh-ku-na-ch’i;O-erh-ku-na-tso-ch'i;O-erh-ku-na-tso-ch’i;O-tso-ch'i;O-tso-ch’i;e er gu na zuo qi;gen he;gen he shi;he xi;he xi jie dao;根河;根河市;河西;河西街道;额尔古纳左旗; +city::2037311;Gannan;Erh-chan;Gannan;Gannan Xian;Gannan Zhen;Kan-ching-tzu;Kan-nan;Kan-nan-chen;Kan-nan-hsien;gan nan;gan nan xian;gan nan zhen;甘南;甘南县;甘南镇; +city::2037334;Fuyu;Fu-yu-chen;Fu-yü-chen;Fuyu;Fuyu Xian;Fuyu Zhen;Fuyuy;Ning-nien;Ning-nien Chan;Yantszyatun';Yantszyatun’;fu yu;fu yu xian;fu yu zhen;富裕;富裕县;富裕镇; +city::2037335;Fuyu;Betuna;Bodune;Fu-yu-chen;Fu-yu-hsien;Fu-yü-chen;Fu-yü-hsien;Fuyu;Hsin-ch'eng;Hsin-ch'eng-hsien;Hsin-ch’eng;Hsin-ch’eng-hsien;Petuna;Po-tu-na;Po-tu-no;Sincheng; +city::2037345;Fuxin;A-chin;Fou-hsin;Fou-hsin-chen;Fou-hsin-hsien;Fou-hsin-hsien-t'u-mo-t'e-ch'i;Fou-hsin-hsien-t’u-mo-t’e-ch’i;Fou-hsin-meng-ku-tsu-tzu-chih-hsien;Fu-hsin;Fu-sin;Fushin;Fusin';Fuxin;Hsin-fou-hsien-t'u-mo-t'e-ch'i;Hsin-fou-hsien-t’u-mo-t’e-ch’i;Фусинь; +city::2037346;Fuxin;Fou-hsin;Fou-hsin-shih;Fu-hsin;Fu-sin;Fusin;Fusin';Fusinas;Fuxin;Hu-sin-chhi;Hū-sin-chhī;Paiu-sing;Phu Tan;Phụ Tân;Pâiu-sĭng;faksyn;fu xin;fu xin shi;fwshn;pusin si;Фусин;Фусинь;Фүшинь хот;فاکسین;فوشن;阜新;阜新市;푸신 시; +city::2037355;Fushun;Bu-sun-chhi;Bú-sūn-chhī;Chiu-fu-shun;Fu-shan;Fu-shun-hsien;Fu-shun-shih;Fu-sun;Fu-šun;Fushun;Fushun';Fushuncheng;Fusjun;Fusun;Fusunas;Fusuno;Fuŝuno;Fušunas;Phu Thuan;Phủ Thuận;U-song;fu shun;fu shun shi;fusuna;fwshwn;pusun si;pwswn;Ū-sông;Фушун;Фушунь;פושון;فوشون;ਫ਼ੁਸ਼ੁਨ;抚顺市;撫順;撫順市;푸순 시; +city::2037370;Fuli;Chi-hsien;Fu-li-chen;Fuli;Fulitun;Jixian;Фули; +city::2037375;Fujin;Fu-chin;Fu-chin-chen;Fu-chin-hsien;Fu-k'o-chin;Fu-k’o-chin;Fuczin';Fujin;Fukin;Фуцзинь; +city::2037391;Beichengqu;Beichengqu;Beichengqu Jiedao;Feng-chen;Feng-chen-hsien;Fengzhen;Fengzhen Shi;bei cheng qu;bei cheng qu jie dao;feng zhen;feng zhen shi;li zhen;li zhen shi;丰镇;丰镇市;北城区;北城区街道;豊鎮;豊鎮市; +city::2037411;Fengcheng;Feng-ch'eng-chen;Feng-ch'eng-hsien;Feng-ch’eng-chen;Feng-ch’eng-hsien;Feng-huang-ch'eng;Feng-huang-ch’eng;Fengcheng;Fenghwangcheng; +city::2037494;Erdaojiang;Erdaojiang;Erh-tao-chiang;Erh-tao-kou; +city::2037534;Dunhua;Ao-tung-ch'eng;Ao-tung-ch’eng;Dun'khua;Dunhua;Tun-hua;Tun-hua-chen;Tun-hua-hsien;Tung Hua;Tunhwa;Дуньхуа; +city::2037611;Dongning;Dongning;Dongning Xian;Dongning Zhen;Hsiao-ch'eng-tzu;Hsiao-ch’eng-tzu;Tung-ning;Tung-ning-chen;Tung-ning-hsien;dong ning;dong ning xian;dong ning zhen;东宁;东宁县;东宁镇; +city::2037620;Dongling;Dongling;Donlin;Tung-ling;Донлин; +city::2037658;Dongfeng;Dongfeng;Ta-tu-ch'uan;Ta-tu-ch’uan;Tung-feng;Tung-feng-chen;Tung-feng-hsien;Tung-p'ing-hsien;Tung-p’ing-hsien;dong feng;东丰; +city::2037685;Dongxing;Didao;Didao Qu;Dongxing;Ti-tao;di dao;di dao qu;dong xing;东兴;滴道;滴道区; +city::2037712;Dehui;Chang-chia-wan;Dehui;Te-hui;Te-hui-chen;Tszhantszyavan';Tszhantszyavan’;Yao-men; +city::2037799;Datong;DAT;Dagu;Daido;Datong;Datongas;Datongo;Datun;Datung;GJai GJong;Ta-jen;Ta-jen-hsien;Ta-ku;Ta-t'ung;Ta-t'ung-hsien;Ta-t'ung-shih;Ta-tchung;Ta-t’ung;Ta-t’ung-hsien;Ta-t’ung-shih;da tong shi;datung si;datwng;Đại Đồng;Датун;Датунг;داتونگ;داتۇڭ شەھىر;大同市;다퉁 시; +city::2037820;Dashitou;Dashitou;Ta-shih-t'ou;Ta-shih-t'ou-ho-tzu;Ta-shih-t’ou;Ta-shih-t’ou-ho-tzu;Tashitou; +city::2037823;Dashiqiao;Dashiqiao;Dashiqiao Shi;Ta-shih-ch'iao;Ta-shih-ch'iao-chen;Ta-shih-ch’iao;Ta-shih-ch’iao-chen;Tashihkiao;Yingkou;da shi qiao;da shi qiao shi;大石桥;大石桥市; +city::2037860;Daqing;An-ta;An-ta-shih;Anda;DQA;Dachin;Dacin;Dai-keng;Daqing;Dâi-kéng;GJai Khanh;Gorad Dacyn;Sa-erh-t'u;Sa-erh-t’u;Sartu;Sha-erh-t'u;Sha-erh-t’u;Ta-cching;Ta-čching;Tai-kheng-chhi;Tāi-khèng-chhī;da qing;da qing shi;daching si;dachyng;dakyng;Đại Khánh;Горад Дацын;Дацин;Дачин;داچىڭ شەھىر;داچینگ;داکینگ;大庆市;大慶;大慶市;다칭 시; +city::2037886;Dandong;An-tung-hsien;An-tung-shih;Antung;DDG;Dan'dun;Dandong;Dandong - dan dong;Dandong - 丹东;Dandong Shi;Dandun;Dandung;Dang-dung;Dăng-dŭng;GJan GJong;Sha-ho-ch'en;Sha-ho-ch’en;Sha-ho-tzu;Tan-tong-chhi;Tan-tong-chhī;Tan-tung;Tan-tung-shih;dan dong;dan dong shi;dandung si;dandwng;dandwngh;dandwnj;tan tng;Đan Đông;Дандун;Дандунг;Даньдун;Դանդուն;داندونج;داندونغ;داندونگ;ഡാൻദോങ്;ตานตง;丹东市;丹東;丹東市;단둥 시; +city::2037913;Linghai;Chin;Chin-hsien;Dalinghe;Jinxian;Linghai;Linghai Shi;Ta-ling-ho;Ta-ling-ho-chen;Ta-ling-ho-tien;Ta-ling-ho-tien-tzu; +city::2037930;Dalai;Da'an;Dalai;Dalaysyan';Dalaysyan’;Da’an;Mo-lo-hung-kang-tzu;Ta-an;Ta-lai;Ta-lai-chen;Ta-lai-hsien;Talaicheng; +city::2038067;Chifeng;CIF;Cch'-feng;Ch'ih-feng;Ch'ih-feng-chou;Ch'ih-feng-hsien;Ch'ih-feng-shih;Chhak-fung-su;Chhak-fûng-sṳ;Chhek-hong-chhi;Chhek-hong-chhī;Chiah-hung;Chifehn;Chifeng;Chifeng Shi;Chiáh-hŭng;Ch’ih-feng;Ch’ih-feng-chou;Ch’ih-feng-hsien;Ch’ih-feng-shih;Ha-ta;Hongshan Qu;Tschifoeng;Tschiföng;Ulaan Hada;Ulaankhad;Ulanhad;Wu-lan-ha-ta;Xich Phong;Xích Phong;cheupeong si;chi feng;chi feng shi;chyfng;chyfyng;hong shan qu;Čch’-feng;Улаанхад;Чифенг;Чифэн;چیفنگ;چیفینگ;红山区;赤峰;赤峰市;츠펑 시; +city::2038080;Chengzihe;Ch'eng-tzu-ho;Chengzihe;Ch’eng-tzu-ho; +city::2038087;Chengde;CDE;Ccheng-te;Cengde;Ch'eng-te;Ch'eng-te-hsien;Ch'eng-te-shih;Chehndeh;Chengde;Chengdé;Chengteh;Ch’eng-te;Ch’eng-te-hsien;Ch’eng-te-shih;Je-ho;Jehoi;Jehol;Jo-ho;Seng-tek-chhi;Sing-daik;Sêng-tek-chhī;Sìng-dáik;Thua GJuc;Thừa Đức;Tschongto;cheng de;cheng de shi;cheongdeo si;chngdh;Čcheng-te;Čengdė;Ченгде;Чэндэ;چنگده;چینگدے;承徳市;承德;承德市;청더 시; +city::2038118;Chaoyang;Ch'ao-yang-chen;Ch'ao-yang-shen;Chaojan;Chaoyang;Ch’ao-yang-chen;Ch’ao-yang-shen;Huinan;chao yang;Чаоян;朝阳; +city::2038120;Chaoyang;CHG;Ch'ao-yang-chen;Ch'ao-yang-hsien;Ch'ao-yang-shih;Chaiyang;Chaojan;Chaoyang;Ch’ao-yang-chen;Ch’ao-yang-hsien;Ch’ao-yang-shih;San-tso-t'a;San-tso-t’a;chao yang shi;chaoyang si;chawyang;Чаоян;چاویانگ;朝陽市;차오양 시; +city::2038139;Changtu;Ch'ang-t'u-chen;Ch'ang-tu-chan;Changtu;Changtu Xian;Chantu;Ch’ang-tu-chan;Ch’ang-t’u-chen;chang tu;chang tu xian;Чанту;昌图;昌图县; +city::2038154;Changping;Ch'ang-p'ing-ch'u;Ch'ang-p'ing-chen;Ch'ang-p'ing-hsien;Changping;Chanpin;Ch’ang-p’ing-chen;Ch’ang-p’ing-ch’ü;Ch’ang-p’ing-hsien;chang ping;Чанпин;昌平; +city::2038158;Changling;Ch'ang-ling-chen;Ch'ang-ling-hsien;Ch'ang-ling-tzu;Changling;Ch’ang-ling-chen;Ch’ang-ling-hsien;Ch’ang-ling-tzu;zhang ling;长岭; +city::2038180;Changchun;CGQ;Cancuna;Cangcun;Cangcunas;Cangcuno;Cangzcenh;Cchang-cchun;Ch'ang-ch'un-hsien;Ch'ang-ch'un-shih;Chanchun;Chanchun';Changchuen;Changchun;Changchun Shi;Chhong-chhun-su;Chhòng-chhûn-sṳ;Chángchūn;Ch’ang-ch’un-hsien;Ch’ang-ch’un-shih;Csangcsun;Diong-chung;Diòng-chŭng;Gorad Chanchun';Hsin-chin;Hsin-ching;Hsinking;K'ua-ch'eng-tzu;Kwan-cheng-tze;K’ua-ch’eng-tzu;Tiong-chhun-chhi;Tiông-chhun-chhī;Truong Xuan;Trường Xuân;cangacuna;changachuna;changchun si;changchwn;jangchun;tshanghtshwn;zhang chun;zhang chun shi;Çangçun;Ĉangĉuno;Čangčun;Čangčunas;Čančuņa;Čchang-čchun;Горад Чанчунь;Чангчуен;Чанчун;Чанчунь;Чанчүнь хот;Չանչուն;צאנגצון;تشانغتشون;چانگچون;چاڭچۈن شەھىرى;चांगचून;छांगछुन;ਚਾਂਗਚੁਨ;ചാങ്ചൻ;ချောင်ချွန်းမြို့;長春;長春市;长春;长春市;장춘;창춘 시; +city::2038198;Chaihe;Ch'ai-ho;Chaihe;Chaihe Zhen;Ch’ai-ho;chai he;chai he zhen;柴河;柴河镇; +city::2038274;Boli;Boli;Boli Xian;P'o-li;P'o-li-chen;P'o-li-hsien;P’o-li;P’o-li-chen;P’o-li-hsien;bo li;bo li xian;Боли;勃利;勃利县; +city::2038283;Binzhou;Bin Xian;Binsyan;Binxian;Binzhou;Pin;Pin-chou;Pin-chou-chen;Pin-chow;Pin-hsien;Pintschou;Wei-tzu-kou;bin xian;bin zhou;bin zhou zhen;宾县;宾州;宾州镇; +city::2038300;Benxi;Ban Khe;Behn'si;Ben'si;Bensi;Benxi;Bunsi;Bản Khê;Pen Shi;Pen-ch'i;Pen-ch'i-hsien;Pen-ch'i-hu;Pen-ch'i-shih;Pen-ch’i;Pen-ch’i-hsien;Pen-ch’i-hu;Pen-ch’i-shih;Pen-hsi;Pen-hsi-shih;Pen-si;Penki;Penkihu;Pun-khe-chhi;Pún-khe-chhī;ben xi;ben xi shi;beonsi si;bnshy;bnsy;bynshy;Бенси;Беньсі;Бънси;Бэньси;Բենսի;בנשי;بنشی;بینشی;本渓;本渓市;本溪;本溪市;번시 시; +city::2038342;Beipiao;Beipiao;Pehpiao;Pei-p'iao;Pei-p'iao-chen;Pei-p'iao-hsien;Pei-p’iao;Pei-p’iao-chen;Pei-p’iao-hsien; +city::2038365;Bei'an;Bei'an;Bei’an;Lungchen;Pehanchen;Pei-an;Pei-an-chen;Pei-an-hsien;Pei-an-shih; +city::2038421;Bayan;Bajan;Bayan;Bayan Xian;Bayan Zhen;Pa Jen;Pa-yen-chen;Pa-yen-hsien;Pa-yen-su;Pa-yen-su-su;Payen;ba yan;ba yan xian;ba yan zhen;Баян;巴彦;巴彦县;巴彦镇; +city::2038432;Baotou;BAV;Bao GJau;Bao Đầu;Baotou;Baotou Shi;Baotou shaary;Bau-tau;Bautouo;Baŭtoŭo;Bugat khot;Bău-tàu;Pao-t'ou;Pao-t'ou-hsien;Pao-t'ou-shih;Pao-tchou;Pao-tow;Pao-t’ou;Pao-t’ou-hsien;Pao-t’ou-shih;Paotou;Pau-thau-chhi;Pau-theu-su;Pau-thâu-chhī;Pâu-thèu-sṳ;ba'otu;bao tou;bao tou shi;baoteou si;baywtw;Баотоу;Баотоу шаары;Бугат хот;Բաոտոու;بائوتو;باۋتۇ شەھىر;ਬਾਓਟੂ;包头市;包頭;包頭市;바오터우 시; +city::2038438;Baoshan;Baoshan;Baoshan';Pao-shan;Баошань; +city::2038446;Baoqing;Baocin;Baoqing;Baotsin;Pao-ch'ing;Pao-ch'ing-chen;Pao-ch'ing-hsien;Pao-ch’ing;Pao-ch’ing-chen;Pao-ch’ing-hsien;Paotsing;Баоцин; +city::2038482;Bamiantong;Bamiantong;Mu-leng;Mu-leng-hsien;Muleng Shi;Muling;Pa-mien-t'ung;Pa-mien-t'ung-chen;Pa-mien-t’ung;Pa-mien-t’ung-chen;ba mian tong;mu leng shi;八面通;穆棱市; +city::2038529;Baishishan;Baishishan;Pai-shih-shan; +city::2038541;Baiquan;Baiquan;Baiquan Xian;Baiquan Zhen;Pai-ch'uan;Pai-ch'uan-chen;Pai-ch'uan-hsien;Pai-ch’üan;Pai-ch’üan-chen;Pai-ch’üan-hsien;Ta-p'ao-tzu;Ta-p’ao-tzu;bai quan;bai quan xian;bai quan zhen;拜泉;拜泉县;拜泉镇; +city::2038569;Baicheng;Bach Thanh;Bah-siang;Baicheng;Baicheng Shi;Bajchehn;Bajchen;Bajcheng;Băh-siàng;Bạch Thành;DBC;Pai-ch'eng;Pai-ch'eng-shih;Pai-ch'eng-tzu;Pai-ch’eng;Pai-ch’eng-shih;Pai-ch’eng-tzu;Paichengtze;Paj-ccheng;Paj-čcheng;Pe̍k-siâⁿ-chhī;T'ao-an;T'ao-an-hsien;T'ao-yen;T’ao-an;T’ao-an-hsien;T’ao-yen;bai cheng;bai cheng shi;baicheong si;baychng;baychyng;Байчен;Байчэн;Бајченг;بائچینگ;بایچنگ;白城;白城市;바이청 시; +city::2038584;Baishan;Bach Son;Badaojiang;Bah-sang;Baishan;Baishan Shi;Bajshan';Băh-săng;Bạch Sơn;Hun-chiang;Hun-chiang-shih;Hunjiang;NBS;Pa-tao-chiang;Pa-tao-kou;Paj-san;Paj-šan;Pek-san-chhi;Pe̍k-san-chhī;ba dao jiang;bai shan;bai shan shi;baisan si;bayshan;Байшань;بائشان;بایشان;八道江;白山;白山市;바이산 시; +city::2038632;Anshan;AOG;An Son;An Sơn;An'shan';An-san;An-san-chhi;An-san-chhī;An-shan-shih;An-šan;Ang-sang;Ansanas;Ansano;Anshan;Anshan Shi;Ansjan;Anxan;Anŝano;Anšanas;an shan;an shan shi;anasana;ansan si;anshan;Ăng-săng;Аншан;Аньшань;אנשאן;آنشان;ئەنشەن شەھىرى;انشان;ਅਨਸ਼ਾਨ;鞍山;鞍山市;안산 시; +city::2038650;Anda;An-ta;An-ta-chan;An-ta-chen;An-ta-hsien;An-ta-shih;Anda;Anda Shi;Anda Zhen;an da;an da shi;an da zhen;Анда;安达;安达市;安达镇; +city::2038665;Oroqen Zizhiqi;A-li;A-li-ho;Alihe;Alihe Zhen;Alikheh;Ari;Elunchun Zizhiqi;O-lun-ch'un-tsu-tzu-chih-ch'i;O-lun-ch'un-tzu-chih-ch'i;O-lun-ch’un-tsu-tzu-chih-ch’i;O-lun-ch’un-tzu-chih-ch’i;Oroqen Zizhiqi;a li he;a li he zhen;e lun chun zi zhi qi;Алихэ;鄂伦春自治旗;阿里河;阿里河镇; +city::2038679;Acheng;A-ch'eng-chen;A-ch'eng-hsien;A-ch’eng-chen;A-ch’eng-hsien;A-shih-ho;A-shih-ko;Acheng;Acheng Shi;Akheng;Asche-ho;Ashiho;a cheng;a cheng shi;Ахенг;阿城;阿城市; +city::2047837;Songling;Songling;Sung-ling;song ling;松岭; +city::6825277;Shilin;Kamennyj les;Shilin;Shilin Zhen;shi lin;shi lin zhen;Каменный лес;Шилин;石林;石林镇; +city::7283386;Changshu City;; +city::7290013;Shixing;; +city::7304020;Fenghuang;Fenkhuan';Фенхуань; +city::7602670;Zhu Cheng City;; +city::7910932;Shangri-La;Shangelila;Shangri-La;Шангри-Ла; +city::8347664;Ordos;DSN;Erdos;Ordos;Ordos khot;e er duo si shi;eoeoldwosseu si;orudosu shi;Ордос;Ордос хот;オルドス市;鄂尔多斯市;어얼둬쓰 시; +city::8505006;Wenshan City;WNH;Wenshan;Wenshan City;Wénshān;wen shan;wen shan shi;wonsan si;文山;文山市;원산 시; +city::8533133;Liupanshui;LPF;Lek-buang-cui;Liou-pchan-suej;Liou-pchan-šuej;Lio̍k-poâⁿ-chúi-chhī;Liupanshui;Ljupan'shuj;Luc Ban Thuy;Lĕ̤k-buàng-cūi;Lục Bàn Thủy;liu pan shui;liu pan shui shi;lyupansu-i si;lywbanshyw;lywpanshay;lywpanshwyy;Люпаньшуй;ليوبانشيو;لیوپانشای;لیوپانشوئی;六盘水市;六盤水;六盤水市;류판수이 시; +city::3665542;Zipaquira;Sipakira;Zipaquira;Zipaquirá;sipakila;sypagyra;xi pa ji la;Сипакира;سیپاگیرا;სიპაკირა;錫帕基拉;시파키라; +city::3665657;Yumbo;Yumbo; +city::3665688;Yopal;EYP;El Yopal;Jopal';Jopalis;Juopales;Juopalės;Marroquin;Marroquín;Yopal;yopal;yue pa er;ywpal;Йопаль;یوپال;約帕爾;요팔; +city::3665900;Villavicencio;Cantarrana;Caserio Villavicencio;VVC;Vijavisensio;Vil'javisensio;Viljavisensijas;Viljavisensio;Villavicencio;Villavicêncio;bi ya wei sen xi ao;biryabisenshio;biyabisensio;viliavisensio;wlawyknsyw;Вильявисенсио;Вилявисенсио;Віявісенсіо;ولاویکنسیو;ვილიავისენსიო;ビリャビセンシオ;比亚维森西奥;비야비센시오; +city::3665913;Villa del Rosario;Rosario;Vil'ja-del'-Rosario;Villa Rosario;Villa del Rosario;Вилья-дель-Росарио; +city::3666304;Valledupar;VUP;Val'edupar;Valedupar;Valjeduparas;Valledupar;ba ye du pa er;bajedo~uparu;twrbw;wylydwpar;yedupaleu;Валедупар;Вальедупар;توربو;ویلیدوپار;ვალიედუპარი;バジェドゥパル;巴耶杜帕尔;예두파르; +city::3666570;Turbo;TRB;Turbo; +city::3666577;Turbaco;Turbaco; +city::3666608;Tunja;Toun'cha;Tuncha;Tunja;Tunkha;tnja;tong ha;to~unha;tunha;twnkha;Τούνχα;Тунха;تنجا;تونخا;トゥンハ;通哈;툰하; +city::3666640;Tumaco;San Andres de Tumaco;San Andrés de Tumaco;TCO;Tucano;Tumaco;Tumakas;Tumako;tu ma ke;Тумако;圖馬科; +city::3666645;Tulua;Tulua;Tuluá;Tulúa;ULQ;tu lu a;twlwa;Тулуа;تولوآ;ტულუა;图卢阿; +city::3667849;Soledad;Soledad; +city::3667873;Sogamoso;SOX;Sogamosas;Sogamoso;suo jia mo suo;Согамосо;索加莫索; +city::3667905;Soacha;Soacha;Soachu;Соачу; +city::3667983;Sincelejo;Cincelejo;Sincelejo;Sinselechas;Sinselekho;sinselekho;sinselleho;snsylkhw;snsylyw;synslkhw;xin sai lai huo;Синселехо;سنسیلخو;سنسیلیو;سینسلخو;სინსელეხო;辛塞萊霍;신셀레호; +city::3668454;Santa Rosa de Cabal;Santa Rosa;Santa Rosa Cabal;Santa Rosa de Cabal;Santa-Rosa-de-Kabal';Санта-Роса-де-Кабаль; +city::3668605;Santa Marta;SMR;Santa Marta;santa marta;snth mrth;Санта Марта;סנטה מרתה;سانتا مارتا; +city::3670218;San Andres;ADZ;San Andres;San Andrés; +city::3670419;Sahagun;Sahagun;Sahagún; +city::3670502;Sabanalarga;Sabanalarga;Sabanalargo; +city::3670730;Rionegro;Rionegro;li ao nei ge luo;lionegeulo;rionegro;rywngrw;Ριονέγρο;Рионегро;ریونگرو;რიონეგრო;里奧內格羅;리오네그로; +city::3670745;Riohacha;RCH;Riochacha;Riohacha;Ríohacha; +city::3671116;Quibdo;Kibdo;Kimpdo;Quibdo;Quibdó;UIB;ji bu duo;kib do;kibeudo;kwbdw;kybdw;qybdw;Κιμπδό;Кибдо;קיבדו;قیبدو;كيبدو;کوبدو;کیبدو;กิบโด;基布多;키브도; +city::3671315;Puerto Tejada;; +city::3671916;Popayan;PPN;Popajan;Popajanas;bo pa yang;popayan;pwpayan;Попаян;پوپایان;ポパヤン;波帕扬;포파얀; +city::3672110;Pitalito;PTX;Pitalitas;Pitalito;pi ta li tuo;Питалито;პიტალიტო;皮塔利托; +city::3672328;Piedecuesta;; +city::3672486;Pereira;Antigua Cartago;Cartago Viejo;PEI;Pereira;Perejra;Villa de Robledo;Перейра; +city::3672778;Pasto;PSO;Pastas;Pasto;San Juan de Pasto;Пасто; +city::3673045;Pamplona;Pamplona;Памплона; +city::3673164;Palmira;Palmira; +city::3673662;Ocana;Ocana;Ocaña;Okan'ja;Okanja;ao ka ni ya;awkanya;Оканья;اوکانیا;ოკანია;奧卡尼亞; +city::3673899;Neiva;NVA;Neiva;Nejva;Нейва; +city::3674453;Monteria;MTR;Monteria;Monterija;Montería;San Jeronimo de Buenavista;San Jerónimo de Buenavista;Монтерия; +city::3674470;Montelibano;MTB;Montelibano;Montelíbano; +city::3674962;Medellin;Gorad Medehl'in;MDE;Medegin;Medel'in;Medelim;Medelin;Medeljina;Medeljinas;Medeljino;Medellin;Medellín;mai de lin;mdlyn;mdyyn;me de yin;medein;medejin;medelini;medeyina;meteyin;mydyllyn;mydylyn;Μεδεγίν;Горад Медэльін;Меделин;Медельин;Медельїн;Медељин;מדיין;مدلین;ميديللين;ميديلين;میڈیلن;मेदेयीन;মেদেয়িন;ਮੇਦੇਯੀਨ;மெதெயின்;เมเดยิน;მედელინი;ទីក្រុងមេឌេយីណ;メデジン;麦德林;메데인; +city::3675443;Manizales;MZL;Manisales;Manisalesas;Manizales;ma ni sa lai si;manisalesi;manisalleseu;manisaresu;manyzalys;mnyzals;Манисалес;Манісалес;مانيزاليس;منیزالس;მანისალესი;マニサレス;馬尼薩萊斯;마니살레스; +city::3675595;Malambo;Malambo; +city::3675657;Maicao;MCJ;Maicao; +city::3675692;Magangue;MGN;Magange;Magangue;Magangué;Magangė;Manague;Mangue;ma gan ge;magange;Маганге;მაგანგე;馬甘格; +city::3675707;Madrid;Madrid;Serrezuela;Мадрид; +city::3675975;Los Patios;Los Patios; +city::3679277;La Dorada;Dorada;La Dorada;La-Dorada;Ла-Дорада; +city::3680450;Itaguei;Itagoui;Itagui;Itagüí;atagwy;aytagwyy;yi ta gui;Ιταγουί;Итагуи;اتاگوی;ایتاگویی;伊塔圭; +city::3680539;Ipiales;Gorad Ipijales;IPI;Ip'jales;Ipiales;Ipjalesas;yi pi ya lai si;Горад Іпіялес;Ипьялес;伊皮亞萊斯; +city::3680656;Ibague;Gorad Ibageh;IBE;Ibage;Ibague;Ibagué;Ibagė;abajy;ibage;yi wa ge;Ібаге;Горад Ібагэ;Ибаге;أباجي;اباگوۓ;იბაგე;イバゲ;伊瓦格;이바게; +city::3682018;Giron;Giron;Girón;Khiron;Хирон; +city::3682028;Girardot City;GIR;Girardot;Zhirardo;Жирардо; +city::3682274;Fusagasuga;Fusagasuga; +city::3682281;Funza;Funza; +city::3682292;Fundacion;Fundacion;Fundación; +city::3682385;Floridablanca;Florida;Floridablanca; +city::3682426;Florencia;FLA;Florencia; +city::3682516;Facatativa;Facatativa;Facatativá;Fakatativa;fa ka ta di wa;fakatatywa;Φακατατιβά;Факататива;فاکاتاتیوا;فیکاٹیٹوا;ფაკატატივა;法卡塔蒂瓦; +city::3682573;Espinal;Ehspinal';El Espinal;Espinal;Эспиналь; +city::3682631;Envigado;Ehnvigado;Envigadas;Envigado;anwygadw;aymbygadw;en wei jia duo;Ενβιγάδο;Енвигадо;Энвигадо;انویگادو;ایمبیگادو;恩維加多; +city::3684917;El Banco;Banco;ELB;Ehl'-Banka;El Banco;Эль-Банка; +city::3685084;Duitama;Douitama;Duitama;du yi ta ma;Δουιτάμα;Дуитама;杜伊塔馬; +city::3685095;Dos Quebradas;Dos Quebradas; +city::3685533;Cucuta;CUC;Cucuta;Cúcuta;Gorad Kukuta;Kukuta;San Jose de Cucuta;San Jose de Guacimal;San José de Cùcuta;San José de Cúcuta;San José de Guacimal;ku ku ta;kukuta;kwkwta;swswta;Горад Кукута;Кукута;سوسوتا;کوکوتا;กูกูตา;კუკუტა;ククタ;库库塔;쿠쿠타; +city::3686279;Cienaga;Cienaga;Ciénaga;San Juan de Cienaga;San Juan de Ciénaga;Sienaga;Сиенага; +city::3686561;Chinchina;Chinchina;Chinchiny;Chinchiná;Чинчины; +city::3686675;Chia;Chia;Chía; +city::3686922;Cerete;Cerete;Cereté; +city::3687025;Caucasia;CAQ;Canafistola;Caucasia;Cañafístola;Kaukasija;Kavkaz;kao ka xi ya;kawkasya;Кавказ;Каукасия;کاوکاسیا;კაუკასია;考卡西亞; +city::3687230;Cartago;CRC;Cartago; +city::3687238;Cartagena;CTG;Caratagena de Indias;Cartagena;Cartagena das Indias;Cartagena das Índias;Cartagena de Indias;Cartaxena de Indias;Carthagene;Carthagene des Indes;Carthagène;Carthagène des Indes;Kartachena;Kartageno;Kartakhena;Kartakhena de Indijas;ka ta he na;kaleutahena;kartagyna;kartajyna;karutahena;qrtajnt kwlwmbya;qrthnh;Картахена;Картахена де Индијас;קרטחנה;قرطاجنة، كولومبيا;کارتاجینا;کارتاگینا;კარტახენა;カルタヘナ;卡塔赫纳;카르타헤나; +city::3687925;Cali;CLO;Cali;Calium;Cáli;Kali;Kalis;Santiago de Cali;ka li;kali;kalli;kaly;santiago・de・kari;Кали;Калі;סנטיאגו דה קאלי;كالي;کالی;กาลี;サンティアゴ・デ・カリ;卡利;칼리; +city::3687952;Caldas;Caldas;Kal'das;Kaldas;ka er da si;kaldas;Κάλδας;Кальдас;کالداس;კალდასი;卡爾達斯; +city::3687964;Calarca;Calarca;Calarcá; +city::3688256;Buga;Buga;Guadalajara de Buga;bu jia;buga;bwga;Буга;بوگا;ბუგა;布加; +city::3688451;Buenaventura;BUN;Buehnaventura;Buenaventura;bu ai na wen tu la;bwynawntwra;Буенавентура;Буэнавентура;بوئناونتورا;بوئناونتورا، ویے دیل کاؤکا;ბუენავენტურა;布埃納文圖拉; +city::3688465;Bucaramanga;BGA;Bucaramanga;Bukaramanga;Gorad Bukaramanga;bu ka la man jia;bukalamang-ga;bukaramanga;bwkaramanga;Букараманга;Букараманґа;Горад Букараманга;بوکارامانگا;ბუკარამანგა;ブカラマンガ;布卡拉曼加;부카라망가; +city::3688689;Bogota;BOG;Bogot;Bogota;Bogoto;Bogotà;Bogotá;Boqota;Buoguota;Bógóta;Gorad Bagata;Mponkota;Santa-Fe-de-Bogota;Santafe de Bogota;Santafe de Bogotá;Santafé de Bogotá;Wukuta;beageatta;bo ge da;bogota;bokota;bwghwta;bwgwta;bwgwth;bwjwta;pokotta;Μπογκοτά;Богота;Боґота;Горад Багата;Санта-Фе-де-Богота;Բոգոտա;באגאטא;בוגוטה;بوجوتا;بوغوتا;بوگوتا;بگوٹا;بۆگۆتا;बोगोटा;बोगोता;বোগোতা;ਬੋਗੋਤਾ;ବୋଗୋଟା;பொகோட்டா;ಬೊಗೋಟ;ബൊഗോട്ട;โบโกตา;པོ་གོ་ཏ;ဘိုဂိုတာမြို့;ბოგოტა;ቦጎታ;ទីក្រុងបូកូតា;ボゴタ;波哥大;보고타; +city::3688928;Bello;Begio;Bejo;Bel'o;Beljas;Bella;Bello;bei yue;belio;byyw;byyw antywkya;Μπέγιο;Бейо;Белла;Бельо;بییو;بییو، انتیوکیا;ბელიო;貝約; +city::3689147;Barranquilla;BAQ;Barankila;Barankilija;Barankilja;Barran'kigia;Barrancas de San Nicolas;Barrancas de San Nicolás;Barrankil'ja;Barrankilya;Barranquilha;Barranquilla;Gorad Barankil'ja;ba lan ji ya;ba leng ji ye;balangkiya;bar rang ki ya;baranakiya;barankija;barankwla;barankwyla;brnqyyh;byarenkvila;Μπαρρανκίγια;Баранкиля;Баранкиља;Барранкилья;Барранкілья;Горад Баранкілья;ברנקייה;بارانكويلا;بارانکولا;ब्यारेन्क्विला;ਬਾਰਾਙਕੀਯਾ;บาร์รังกียา;ბარანკილია;バランキージャ;巴兰基亚;巴冷基也;바랑키야; +city::3689169;Barrancabermeja;Barankabermecha;Barracana Bermeja;Barrancabermeja;Barrankabermekha;EJA;ba lan ka wei mei ha;barankaberumeha;Барранкабермеха;ბარანკაბერმეხა;バランカベルメハ;巴蘭卡韋梅哈; +city::3689560;Armenia;AXM;Armenia; +city::3689570;Arjona;; +city::3689718;Arauca;AUC;Arauca;Arauka;Arauko;Araŭko;a lao ka;alauka;arawka;arawka arawka;araywka;Араука;آراؤکا;آرائوکا;آراوکا، آراوکا;არაუკა;阿劳卡;아라우카; +city::3689798;Apartado;APO; +city::3690465;Aguachica;Aguachica;Aguachika;Aquachia;Aquachía;Агуачика; +city::3792383;Agustin Codazzi;Agustin Codazzi;Agustin-Kodassi;Agustín Codazzi;Codazzi;agstn kwdazy;agwstyn kwdazy;ke da qi;Агустин-Кодасси;آگستن کودازی;اگوستین کودازی;კოდასი;科達齊; +city::3621849;San Jose;Gorad San-Khaseh;SJO;San Chose;San Chosė;San Hose;San Jose;San Jose de Costa Rica;San Jose i Costa Rica;San José;San José de Costa Rica;San José i Costa Rica;San Joze;San Jozé;San Jusiy;San Khose;San Khoze;San Xose;San Xosé;San-Joseo;San-Khose;San-Xose;Sanhose;Sanhosē;Urbs Sancti Iosephi in Costarica;can hoce;san jwz;san khwsyh;san khwzh;san khwzے kwsٹaryka;san-khose;sana hoje;sana hose;sana hoze;sanhose;sheng he xi;sn hwsh;syana hose;Σαν Χοσέ;Горад Сан-Хасэ;Сан Хозе;Сан Хосе;Сан-Хосе;Սան Խոսե;סאן חוסה;סן חוסה;سان جوز;سان خوزه;سان خوزے، کوسٹاریکا;سان خوسيه;سان خوسې;सान होज़े;सान होजे;স্যান হোসে;ਸਾਨ ਹੋਸੇ;சான் ஹொசே;ซันโฮเซ;སན་ཇོ་སེ།;სან-ხოსე;ሳን ሆዜ;サンホセ;聖荷西;산호세; +city::3621911;San Francisco;; +city::3622247;Limon;Ciudad de Limon;Ciudad de Limón;LIO;Limon;Limonas;Limón;Pouerto Limon;Provincia de Limon;Provinsi Limon;Provinsi Limón;Província de Limón;Puehrto-Limon;Puerto Limon;Puerto Limón;li meng;limon;lymwn;rimon;Πουέρτο Λιμόν;Лимон;Пуэрто-Лимон;Լիմոն;לימון;لیمون;リモン;利蒙;리몬; +city::3534915;Trinidad;Gorad Trynidad;TND;Trinidad;Trinidadas;te li ni da;teulinidadeu;torinida;trinidada;trynydad kwba;trynydd;Горад Трынідад;Тринидад;Тринідад;טרינידד;ترینیداد، کوبا;ٹرینیڈاڈ، کیوبا;त्रिनिदाद;ტრინიდადი;トリニダ;特立尼达;트리니다드; +city::3536729;Santiago de Cuba;Gorad Santjaga-deh-Kuba;Kubos Santjagas;SCU;Sant'jago-de-Kuba;Sant'jago-de-Kubae;Santiago;Santiago de Cuba;Santiago de Cúba;Santiago de Kubo;Santiago di Cuba;Santiago nte Kouva;Santijago de Kuba;Santjago de Kuba;santiagodekuba;santyaghw dy kwba;santyagw d kwba;sheng de ya ge-de gu ba;Σαντιάγο ντε Κούβα;Горад Сантяга-дэ-Куба;Сантијаго де Куба;Сантьяго-де-Кубæ;Сантьяго-де-Куба;Сантяго де Куба;סנטיאגו דה קובה;سانتياغو دي كوبا;سانتیاگو د کوبا;სანტიაგო-დე-კუბა;サンティアーゴ・デ・クーバ;圣地亚哥-德古巴;산티아고데쿠바; +city::3537906;Santa Clara;SNU;Santa Clara;Santa Klara;Santa-Klara;santa klara;santa klara kywba;santakeullala;sheng ke la la;snth qlrh;Σάντα Κλάρα;Санта Клара;Санта-Клара;סנטה קלרה;سانتا كلارا;سانتا کلارا;سانتا کلارا، کیوبا;სანტა-კლარა;サンタ・クララ;圣克拉拉;산타클라라; +city::3539093;San Luis;San Luis; +city::3539560;San Jose de las Lajas;; +city::3540667;Sancti Spiritus;Sancti Spiritus;Sancti Spíritus;Sankti-Spiritus;USS;Санкти-Спиритус; +city::3540680;San Cristobal;San Cristobal;San Cristóbal; +city::3541440;Sagua la Grande;Sagua;Sagua la Grande; +city::3543299;Puerto Padre;Puehrto-Padre;Puerto Padre;Пуэрто-Падре; +city::3543961;Placetas;Placetas; +city::3544091;Pinar del Rio;LCL;Pinar del Rio;Pinar del Rioko probintzia;Pinar del Río;Pinar-del'-Rio;Пинар дел Рио;Пинар-дель-Рио; +city::3545064;Palma Soriano;Palma Soriano; +city::3545841;Nuevitas;Nuevitas; +city::3546434;Moron;Moron;Morón;mo long;moroni;Морон;მორონი;莫隆; +city::3546791;Moa;MOA;Minas de Hierro Moa;Moa;Puerto Cayo Moa;Моа; +city::3547398;Matanzas;Gorad Matansas;Matansas;Matansasas;Matanzas;QMA;VRO;ma tan sa si;matansasu;Горад Матансас;Матанзас;Матансас;მატანსასი;マタンサス;馬坦薩斯; +city::3547867;Manzanillo;MZO;Mansanil'o;Mansaniljas;Manzanillo;Manzanilo;man sa ni yue;mansanilio;mansaniyo;mnsnyw;mnzanylw kywba;Манзаниљо;Мансанильо;מנסניו;منزانیلو، کیوبا;მანსანილიო;曼薩尼約;만사니요; +city::3550598;Las Tunas;Las Tunas;Las Tunasas;Las-Tunas;Tunas;VTU;Victoria;Victoria de Las Tunas;Victoria de las Tunas;Viktoria de las Tunas;Viktorija de Las Tunas;las twnas;laseutunaseu;wei duo li ya-de la si tu na si;Викторија де Лас Тунас;Лас-Тунас;Тунас;Վիկտորիա դե լաս Տունաս;ויקטוריה דה לאס טונאס;لاس توناس;ლას-ტუნასი;维多利亚-德拉斯图纳斯;라스투나스; +city::3553478;Havana;A Habana;Abana;Gavana;Gavanae;Gavane;Gorad Gavana;HAV;Habana;Hafana;Hahvaxnaz;Havan;Havana;Havanna;Havano;Hawana;Khavana;L'Avana;LAvan-a;LAvana;LAvann-a;LHabana;LHavana;La Ahuana;La Avan;La Avàn;La Habana;La Havana;La Havane;abana;avana;ha wa na;habana;habhana;hafana;havana;hawana;xia wan na;Ħavana;ŁAvana;Αβάνα;Гaванa;Гаванæ;Гавана;Гаване;Горад Гавана;Хавана;Ҳавана;Հավանա;האוואנע;הוואנה;هافانا;هاوانا;ہوانا;हवाना;হাভানা;ਹਵਾਨਾ;ହାଭାନା;அவானா;ഹവാന;ฮาวานา;ཧ་ཝན;ဟာဗားနားမြို့;ჰავანა;ሀቫና;ሀኖይ;ハバナ;哈瓦那;夏灣拿;아바나; +city::3556268;Jesus Menendez;Chaparra;Jesus Menendez;Jesús Menéndez; +city::3556437;Jaguey Grande;Jaguey Grande;Jagüey Grande; +city::3556969;Holguin;Gorad Ol'gin;HOG;Holginas;Holguin;Holguín;Holquin;Ol'gin;Olgin;ao er jin;olgini;orugin;ʼwlgyn;Горад Ольгін;Олгин;Ольгин;אולגין;ოლგინი;オルギン;奧爾金; +city::3557347;Guira de Melena;Gueira de Melena;Guira de Melena;Güira de Melena; +city::3557378;Gueines;Guines;Güines;Гуинес; +city::3557689;Guantanamo;GAO;Guantanama;Guantanamo;Guantánamo;Guatanamo;guantanamo;Гуантанама;Гуантанамо;גואנטנמו;グアンタナモ; +city::3558771;Florida;Florida;La Florida;Флорида; +city::3563317;Corralillo;Coralillo;Corralillo; +city::3563504;Contramaestre;Contramaestre; +city::3563559;Consolacion del Sur;Consolacion;Consolacion del Sur;Consolación;Consolación del Sur; +city::3563843;Colon;Colon;Colón;Kolon;Kolonas;QCO;ke long;kwlwn kywba;Колон;کولون، کیوبا;კოლონი;科隆; +city::3564124;Cienfuegos;CFG;Cienfuegos;Gorad S'enfuehgas;S'enfuegos;S'enfuehgos;Sjenfuegos;Sjenfuegosas;seiyn fwy kos;shienfuegosu;sienpuegosi;synfwyghws;xi en fu ge si;Горад Сьенфуэгас;Сьенфуэгос;Сьєнфуегос;Сјенфуегос;סיינפואגוס;سينفويغوس;เซียนฟวยโกส;სიენფუეგოსი;シエンフエーゴス;西恩富戈斯; +city::3564178;Ciego de Avila;AVI;Ciego de Avila;Ciego de Ávila; +city::3565432;Cardenas;Cardenas;Cárdenas;Gorad Kardehnas;Kardenas;Kardenasas;ka er de na si;Горад Кардэнас;Карденас;کارڈیناس، کیوبا;კარდენასი;卡爾德納斯; +city::3566067;Camaguey;CMW;Camagueey;Camaguey;Camagüey;Kamaguehj;Kamaguej;Puerto Principe;kamaguei;Камагуей;Камагуэй;קמאגואיי;カマグエイ; +city::3567597;Bayamo;BYM;Bajamo;Bayamo;Баямо; +city::3567669;Bartolome Maso;Bartolome Maso;Bartolomé Masó; +city::3567869;Banes;Banes; +city::3568312;Artemisa;Artemisa;Артемиса; +city::3568342;Arroyo Naranjo;Arroyo Naranjo;Ponce; +city::3374333;Praia;Braia;Cidade da Praia;Gorad Praja;Municipio da Praia;Município da Praia;Pragia;Praia;Praja;Praje;Prajo;Prajė;Praya;RAI;braya;pei ya;peulaia;pirxa;pra'i'a;pra'iya;praya;prayya;puraia;Πράγια;Πράια;Горад Прая;Прая;Праја;Պրայա;פראיה;برايا;پرائا;پرائیا;پرايا;پرایا;پڕایا;प्राईया;ਪ੍ਰਾਈਆ;ไปรอา;ཕུ་ར་ཡ།;პრაია;ፕራያ;プライア;培亞;프라이아; +city::3374462;Mindelo;Mihdelo;Mindelas;Mindello;Mindelo;Mindelu;Mintelo;mindellu;mindero;ming de lu;Μιντέλο;Минделу;Мінделу;ミンデロ;明德盧;민델루; +city::3513090;Willemstad;Gorad Vilemstad;Vilemstad;Vilemstadas;Vilemstade;Vilemstado;Villemstad;Villemstant;Villemştad;Willemstad;Willemsted;Willemstêd;billemseutateu;u~iremusutatto;vilemastada;villemstatu;wei lian si ta de;willems tad;wylmstad;Βίλλεμσταντ;Вилемстад;Виллемстад;Віллемстад;Горад Вілемстад;וילמסטאד;ويلمستاد;ویلمستاد;ویلمسٹیڈ;विलेमश्टाड;வில்லெம்ஸ்டாடு;วิลเลมสตัด;ვილემსტადი;ウィレムスタット;威廉斯塔德;빌렘스타트; +city::146268;Nicosia;An Leafcois;An Leafcóis;Gorad Nikasija;Lefkosa;Lefkosha;Lefkosia;Lefkosian;Lefkosía;Lefkoşa;Leucosia;NIC;Nekoseje;Nicosea;Nicosia;Nicosia (Lefkosia);Nicosia - Leukosia;Nicosia - Λευκωσία;Nicosie;Nicoséa;Nicosìa;Nicusia;Nicusìa;Nicòsia;Nicósia;Nikosi;Nikosia;Nikosie;Nikosii;Nikosij;Nikosija;Nikosija osh;Nikosiya;Nikozi;Nikozia;Nikozija;Nikozio;Nikozja;Nikósie;Nikósía;Nikózia;Niqusya;Nėkosėjė;ni ke xi ya;ni kho seiy;nikkeasya;nikkociya;nikojya;nikoshia;nikosi'a;nikosia;nikosiya;nikozia;nykwsya;nykwzya;nyqwsya;nyqwsyh;Λευκωσία;Λευκωσίαν;Горад Нікасія;Лефкоша;Никозия;Никозија;Никоси;Никосий;Никосия;Никосия ош;Нікосія;Նիկոսիա;ניקאסיע;ניקוסיה;نىكوسىيە;نيقوسيا;نيكوسيا;نیکوزیا;نیکوسیا;نیکۆسیا;निकोज्या;निकोसिया;নিকোসিয়া;ਨਿਕੋਸੀਆ;ନିକୋସିଆ;நிக்கோசியா;ನಿಕೋಸಿಯ;നിക്കോഷ്യ;นิโคเซีย;ནེ་ཁོ་ཤི་ཡ།;ნიქოზია;ሌፍኮዚያ;ニコシア;尼科西亚;尼科西亞;니코시아; +city::146384;Limassol;Gorad Limasol;Lemesos;Lemessus;Lemesós;Leymosun;Limasol;Limasol shaary;Limasolis;Limasolo;Limassol;Limisso;QLI;li ma suo er;li ma sxl;limasol;limasoli;lymaswl;lymswl;rimasoru;Λεμεσός;Горад Лімасол;Лимасол;Лимасол шаары;Лімасол;Լիմասոլ;לימסול;ليماسول;لیماسول;ലിമസ്സോൾ;ลีมาซอล;ლიმასოლი;リマソール;利马索尔;리마솔; +city::146400;Larnaca;Chittim;Citium;Kition;Kitium;Kittim;Kozan;LCA;Lapithou;Larnaca;Larnaka;Làrnaca;Lárnaca;Lárnaka;Salina;Salines;la na ka;laleunaka;lar na ka;larnaka;larnka;lrnaka;lrnqh;rarunaka;Λάρνακα;Ларнака;Լառնակա;לרנקה;لارناکا;لارنكا;لرناکا;ลาร์นากา;ལར་ན་ཀ།;ლარნაკა;ラルナカ;拉纳卡;라르나카; +city::3061370;Zlin;Gottvoldov;Gottwald;Gottwaldov;Sillein;Z'lin;Zlin;Zlín;Ζλιν;Злин;Зьлін; +city::3063548;Usti nad Labem;Aussig;Aussig an der Elbe;Auszig;Usti;Usti nad Labem;Usti-nad-Labem;Ustina Labe;usti nad labom;Ústina Labe;Ústí;Ústí nad Labem;Усти над Лабом;Усти-над-Лабем; +city::3064288;Teplice;Cieplice;Teplice;Teplice-Sanov;Teplice-Šanov;Teplicė;Teplitse;Teplitz;Teplitz-Schoenau;Teplitz-Schönau;tblytsh;te pu li cai;tepeulliche;tepuritsu~e;tplytsh;tplyzh;Теплитсе;Теплице;Тепліце;טפליצה;تبليتسه;تپلیتسه;ტეპლიცე;テプリツェ;特普利采;테플리체; +city::3067696;Prague;PRG;Praag;Prag;Praga;Pragae;Prago;Prague;Praha;Pràg;Prág;Prága;Prâg;Prāga;bragh;bu la ge;peulaha;prag;praga;prak;prg;puraha;Πράγα;Праг;Прагæ;Прага;פראג;براغ;پراگ;پراگا;ܦܪܓ;ปราก;པུ་ལ་ཁེ;პრაღა;ፕራግ;プラハ;布拉格;프라하; +city::3068160;Pilsen;P'lzen;Pilsen;Pilsna;Pilzen;Pilzenas;Pilzeń;Pilzno;Pl'zen';Plzen;Plzena;Plzeņa;Plzeň;bi er sen;blzn;peil sen;pelaja'ina;peuljen;plzn;puruzeni;pylzn;Πίλζεν;Πίλσεν;Пилзен;Плзен;Плзењ;Пльзень;П’лзењ;פילזן;פילזען;بلزن;پلزن;पेलजाईन;เปิลเซน;პლზენი;プルゼニ;比尔森;플젠; +city::3068582;Pardubice;PED;Pardubice;Pardubices;Pardubicy;Pardubicės;Pardubitse;Pardubitz;Parntoumpitse;bardwbytsh;pa er du bi cai;paleudubiche;par du bit se;pardwbytsh;parudo~ubitsu~e;prdwbyzh;Παρντούμπιτσε;Пардубитсе;Пардубице;פרדוביצה;باردوبيتسه;پاردوبیتسه;پاردوبیتسے;ปาร์ดูบีตเซ;პარდუბიცე;パルドゥビツェ;帕尔杜比采;파르두비체; +city::3068799;Ostrava;OSR;Ostraba;Ostrava;Ostrawa;ao si te la wa;awstrafa;e si te la fa;oseuteulaba;osutoravu~a;Οστράβα;Острава;אוסטרבה;أوسترافا;オストラヴァ;俄斯特拉發;奥斯特拉瓦;오스트라바; +city::3068927;Opava;Gorad Opava;Opava;Opawa;Oppavia;Troppau;Uopawa;ao pa wa;awbafa;awpawa;opaba;opavu~a;Горад Опава;Опава;أوبافا;اوپاوا;ოპავა;オパヴァ;奥帕瓦;오파바; +city::3069011;Olomouc;Aebura;Eburum;Gorad Olamauc;OLO;Olmic;Olmuetz;Olmütz;Olomouc;Olomouca;Olomoucas;Olomouch;Olomouts;Olomucium;Olomuniec;Ołomuniec;Wolomuc;Wołomuc;ao luo mu ke;awlwmwk;awlwmwts;ollomoucheu;olomauka;olomoutsi;oromoutsu;xxlx mots;ʼwlwmwʼwz;Όλομουτς;Горад Оламаўц;Оломоутс;Оломоуц;אולומואוץ;أولوموتس;اولوموتس;اولوموڅ;اولوموک;ओलोमौक;ออลอโมตซ์;ოლომოუცი;オロモウツ;奧洛穆克;올로모우츠; +city::3070291;Most;Bruex;Brüx;Most;Мост; +city::3071961;Liberec;Gorad Liberac;Liberec;Liberec';Libereca;Liberecas;Liberets;Limperets;Reichenberg;Reichenberga;li bei lei ci;libelecheu;liberetsi;lybrts;lybrz;lybyryts;riberetsu;Λίμπερετς;Горад Ліберац;Либеретс;Либерец;Ліберець;Լիբերեց;ליברץ;ليبيريتس;لیبرتس;ლიბერეცი;リベレツ;利贝雷茨;리베레츠; +city::3073699;Kladno;Cladna;Gorad Kladna;Kladnas;Kladno;Klantno;ke la de nuo;keulladeuno;klad no;kladnw;klandw;kuradono;Κλάντνο;Горад Кладна;Кладно;كلادنو;کلادنو;کلاندو;กลาดโน;კლადნო;クラドノ;克拉德诺;클라드노; +city::3073789;Karvina;Freistadt;Frystat;Frysztat;Fryštát;Karvina;Karvina 1;Karviná 1;Карвина; +city::3073803;Karlovy Vary;Carlsbad;Gorad Karlavy Vary;KLV;Karl Vary;Karlove Vari;Karlove Vary;Karlovi Varai;Karlovi Vari;Karlovi-Vari;Karlovy Vary;Karlovı Varı;Karlowe Ware;Karlowe Wary;Karlowé Warë;Karlsbad;Thermae Carolinae;ka luo wei fa li;kaleullobibali;karlwfy fary;karlwwy wary;karlwy wary;Κάρλοβι Βάρι;Горад Карлавы Вары;Карлове Вари;Карлови Вари;Карлови-Вари;Карловы Вары;Карлові Вари;Կառլովի Վարի;קרלובי וארי;كارلوفي فاري;کارلووی واری;کارلوی واری;კარლოვი-ვარი;カルロヴィ・ヴァリ;卡罗维发利;카를로비바리; +city::3074199;Jihlava;Iglau;Iglawa;Igława;Jiglava;Jihlava;Jikhlava;Јихлава;Йиглава; +city::3074967;Hradec Kralove;Chrantets Kralove;Gorad Gradzec-Kralave;Gradec Kralove;Gradec'-Kralove;Gradec-Kralove;Gradets Kralove;Gradets-Kralove;Hradec Kralove;Hradec Kralovė;Hradec Králové;Khradec Kralove;Koeniggraetz;Kraljicin Gradac;Kraljičin Gradac;Königgrätz;Reginogradecium;h ra dets kral xwe;he la de ci-ke la luo wei;heuladecheukeulallobe;hradts kralwfh;hradts kralwwh;Χράντετς Κράλοβε;Горад Градзец-Кралаве;Градетс-Кралове;Градец Кралове;Градец-Кралове;Градець-Кралове;Храдец Кралове;Һрадец-Кралове;הראדץ קראלובה;هرادتس كرالوفه;هرادتس کرالووه;ہاردک کارلوف;ฮราเดตส์กราลอเว;ჰრადეც-კრალოვე;フラデツ・クラーロヴェー;赫拉德茨-克拉洛韦;흐라데츠크랄로베; +city::3075921;Havirov;Chavirov;Gavirsov;Gavirzhov;Gorad Gavirzhau;Havirov;Havirzova;Havirzovas;Haviržovas;Havířov;Havīržova;Hawierzow;Hawierzów;Khavirzhov;ha wei ruo fu;ha weiychxf;habileujopeu;hafrwf;havirzhovi;havu~ijofu;hawyrzhw;Χάβιροβ;Гавиржов;Гавіржов;Гавіршов;Горад Гавіржаў;Хавиржов;هافروف;هاویرژو;ہاوہروف;ฮาเวียชอฟ;ჰავირჟოვი;ハヴィジョフ;哈维若夫;하비르조프; +city::3076127;Frydek-Mistek;Fridek-Mistek;Fridekmisteka;Friedeck;Friedek;Frydek;Frydek Mystekas;Frydek-Mistek;Frýdek;Frýdek-Místek;Frīdekmīsteka;Gorad Frydak-Mistak;Mistek;fri dek-mi s tek;frydk-mystk;fu li dai ke-mi si tai ke;furideku=misuteku;peulidekeumiseutekeu;Горад Фрыдак-Містак;Мистек;Фридек-Мистек;Фрідек-Містек;فريدك-ميستك;فریدک-میستک;ฟรีเดก-มีสเตก;ფრიდეკ-მისტეკი;フリーデク=ミーステク;弗里代克-米斯泰克;프리데크미스테크; +city::3077244;Decin;Dechin;Decin;Decina;Decynas;Dečynas;Dečīna;Djechin;Děčín;Gorad Dzechyn;Tetschen;dechin;dechini;dychyn;dytshyn;dyychyn;jechin;jie qin;Горад Дзечын;Дечин;Дјечин;ديتشين;دیچین;دییچین;დეჩინი;ジェチーン;杰钦;데친; +city::3077685;Chomutov;Chomutov;Chomutovas;Khomutov;Komotau;homutofu;homutopeu;huo mu tuo fu;khmwtw;khwmtw;khwmwtwf;Хомутов;خموتو;خومتو;خوموتوف;ხომუტოვი;ホムトフ;霍穆托夫;호무토프; +city::3077916;Ceske Budejovice;Boehmisch Budweis;Budejovice;Budweis;Böhmisch Budweis;Ceske Budejovicai;Ceske Budejovice;Ceské Budejovice;Cheshke Budjejovice;Cheske Budejovice;Cheske-Budejovice;Czeskie Budziejowice;Tseske Mpountegiobitse;Česke Budejovicai;České Budějovice;Τσέσκε Μπουντεγιόβιτσε;Ческе Будейовице;Ческе-Будеёвице;Чешке Будјејовице;Чешке Буђејовице; +city::3078610;Brno;BRQ;Berno;Brno;Brno osh;Bruenn;Bruna;Brunn;Brünn;Burno;Gorad Brno;Mprno;beuleuno;bexr no;brano;brno;brnw;bryn;bu er nuo;buruno;Μπρνο;Брно;Брно ош;Бърно;Горад Брно;Բռնո;ברין;ברנו;برنو;ब्रनो;เบอร์โน;ბრნო;ブルノ;布爾諾;브르노; +city::2803560;Zwickau;Cvikau;Cvikava;Cvikkau;Cygnea;Gorad Cvikau;Stadt Zwickau;Swikawa;Zwickau;cheubikau;ci wei kao;tsfykaw;tsuvu~ikkau;tswykaw;Šwikawa;Горад Цвікау;Цвикау;Цвиккау;Цвікау;צוויקאו;تسفيكاو;تسویکاو;ツヴィッカウ;茨维考;츠비카우; +city::2805615;Wuerzburg;Birtsmpournk;Gorad Vjurcburg;Herbipolis;Herbopolis;Vircburg;Vircburga;Virteburh [a. 704];Virtibriga;Viurcburgas;Vjurcburg;Vuirziburga [a. 779];Vyurcʻburg;Wiazburg;Wirciburc;Wirzaburg [a. 742];Wirziburg [a. 779];Wuerzboerj;Wuerzburg;Wurtzbourg;Wurtzburgo;Wurzburg;Wurzburgo;Wûrzburg;Würzburg;Würzbörj;bwileucheubuleukeu;fwrtsbwrgh;viurtsburgi;vu~yurutsuburuku;wei er ci bao;weu xr sburk;wrzbrg;wwrtsbwrg;wyrzbwrg;Βίρτσμπουργκ;Вирцбург;Вюрцбург;Горад Вюрцбург;Վյուրցբուրգ;וירצבורג;فورتسبورغ;ورزبرگ;وورتسبورگ;เวือร์ซบูร์ก;ვიურცბურგი;ヴュルツブルク;维尔茨堡;뷔르츠부르크; +city::2805753;Wuppertal;Boupertal;Gorad Vupertal';UWP;Vupertal;Vupertale;Vupertalis;Vupertāle;Vuppertal;Vuppertal';Wupperdaal;Wuppertal;bupeotal;fwbrtal;vupartala;vuppataru;wu po ta er;wuph phe xrthal;wwprtal;wwprtl;Βούπερταλ;Вупертал;Вупперталь;Горад Вуперталь;Վուպերտալ;וופרטל;فوبرتال;ووپاٹال;ووپرتال;وپرٹال;वुपर्टाल;วุพเพอร์ทัล;ვუპერტალი;ヴッパータール;伍珀塔尔;부퍼탈; +city::2806142;Worms;Borbetomagus;Gorad Vorms;Vormatia;Vorms;Vormsa;Vormsas;Woms;Wormacja;Wormatia;Worms;ZQV;boleumseu;fwrms;vu~orumusu;wo er mu si;wrmz alman;wwrms;Βορμς;Вормс;Горад Вормс;ווארמז;וורמס;فورمس;ورمز، آلمان;ቩርምዝ;ヴォルムス;沃尔姆斯;보름스; +city::2806654;Wolfsburg;BWE;Gorad Vol'fsburg;Vol'fsburg;Volfsburg;Volfsburgas;Volfsmpournk;Wolfsboerj;Wolfsbourg;Wolfsburg;Wolfsburgo;Wolfsbuurich;Wolfsbörj;Wulfsborg;bolpeuseubuleukeu;fwlfsbwrgh;volpsburgi;vu~orufusuburuku;wlfzbrg;wo er fu si bao;wwlfsbwrg;wwlfzbwrg;wwlpsbwrg;Βόλφσμπουργκ;Волфсбург;Вольфсбург;Горад Вольфсбург;Վոլֆսբուրգ;וולפסבורג;فولفسبورغ;ولفزبرگ;وولفزبورگ;وولفسبورگ;ვოლფსბურგი;ヴォルフスブルク;沃尔夫斯堡;볼프스부르크; +city::2806914;Wolfenbuettel;Guelpherbytum;Vol'fenbjuttel';Volfembutel;Volfenbitel;Volfenbjutel;Wolfenbuettel;Wolfenbuttel;Wolfenbüttel;Wulfenbuettel;Wulfenbüttel;fwlfnbwtl;wlfnbwtl;wo er fen bi te er;Волфенбител;Волфенбютел;Вольфенбюттель;فولفنبوتل;ولفنبوتل;沃爾芬比特爾; +city::2807363;Witten;Gorad Vitehn;Viten;Vitenas;Vitten;Witten;ZQR;biten;fytn;vu~itten;wei teng;wytn;Витен;Виттен;Віттен;Горад Вітэн;فيتن;ویتن;ویٹن;ヴィッテン;维滕;비텐; +city::2808559;Willich;Vilikh;Villikh;Villix;Willich;fylysh;wei li xi;wylysh;Вилих;Виллих;Вілліх;فيليش;ویلیش;維利希; +city::2808720;Wilhelmshaven;Gorad Vil'gel'mskhafen;Vil'gel'msgafen;Vil'gel'mskhafen;Vilchelmschafen;Vilhelmshafenas;Vilkhelmskhafen;WVN;Wilhelmshaven;Willelmeshaefen;Willelmeshæfen;Willemshaven;Wuelmshoawen;Wülmshoawen;bilhelleumseuhapen;fylhlmshafn;vu~iruherumusuhafen;wei lian gang;wylhmshafn;Βιλχελμσχάφεν;Вилхелмсхафен;Вильгельмсхафен;Вільгельмсгафен;Горад Вільгельмсхафен;וילהלמסהאפן;فيلهلمسهافن;ویلهمسهافن;ヴィルヘルムスハーフェン;威廉港;빌헬름스하펜; +city::2809346;Wiesbaden;Aquae Mattiacae;Aquae Mattiacorum;Aquae Matticae;Gorad Visbadehn;Uisibada;Visbaden;Visbadene;Vizmpanten;Vysbadenas;Vīsbādene;WIE;Wiasban;Wiasbån;Wiesbaden;Wisibada;Wissbade;biseubaden;fysbadn;visabadena;visbadeni;vu~isubaden;wayzbadn;wei si ba deng;wi sba dein;wysbadn;Βιζμπάντεν;Висбаден;Вісбаден;Горад Вісбадэн;Վիսբադեն;וויסבאדן;ויסבאדן;فيسبادن;وائزبادن;ویسبادن;वीसबाडेन;วีสบาเดิน;ვისბადენი;ヴィースバーデン;威斯巴登;비스바덴; +city::2809889;Wetzlar;Betslar;Gorad Veclar;Veclar;Veclara;Veclaras;Veclaro;Veclāra;Vetclar;Vetzlar;Weslar;Weslår;Wetzlar;Wetzlaria;ZQQ;becheulla-eo;ftslar;vetslari;vu~ettsura;wei ci la er;weth s lar;wtslar;wzlr;Βέτσλαρ;Ветцлар;Вецлар;Горад Вецлар;וצלר;فتسلار;وتسلار;เวทซลาร์;ვეცლარი;ヴェッツラー;韦茨拉尔;베츨라어; +city::2810678;Wesel;Vezel;Vezel';Wesel;wei sai er;wzl;Везел;Везель;وزل;韋塞爾; +city::2812482;Weimar;Gorad Vejmar;Vaimari;Vajmar;Vajmaro;Veimar;Veimara;Veimaras;Veimāra;Vejmar;Veymar;Vimaria;Vymar;Výmar;Wehimala;Weimar;baimaleu;faymr;va'imara;vaimari;vu~aimaru;waymar;waymr;wei ma;wi mar;Βαϊμάρη;Ваймар;Вајмар;Веймар;Горад Веймар;ויימאר;فايمر;وائمر;وایمار;वाईमार;ไวมาร์;ვაიმარი;ヴァイマル;魏玛;바이마르; +city::2815330;Waiblingen;Vajblingen;Vayblingen;Waiblinga;fayblynghn;wayblyngn;wei bu lin gen;Вайблинген;Вайблінген;Вајблинген;فايبلينغن;وایبلینگن;魏布林根; +city::2817220;Villingen-Schwenningen;Filingen-Shveningen;Filingenas-Sveningenas;Filingenas-Šveningenas;Fillingen-Shvenningen;Villingen Schwenningen;Villingen-Schwenningen;Villingen-Shvenningen;ZQL;fei lin gen-shi wen ning gen;fylynghn-shfnynghn;fylyngn-ashwnyngn;Виллинген-Швеннинген;Филинген-Швенинген;Филлинген-Швеннинген;Філлінген-Швеннінген;فيلينغن-شفنينغن;فیلینگن-اشونینگن;菲林根-施文宁根; +city::2817311;Viersen;Firzen;Veeese;Veeëse;Viersen;ZQK;fei er sen;fyrzn;Фирзен;Фірзен;فيرزن;فیرزن;菲爾森; +city::2817724;Velbert;Fel'bert;Felbert;Velbed;Velbert;Vèlbed;ZQJ;fei er bei te;flbrt;Фелберт;Фельберт;فلبرت;費爾貝特; +city::2820087;Unna;Una;Unna;ZQI;awna;weng na;Уна;Унна;اونا;翁納; +city::2820256;Ulm;Gorad Ul'm;Oulm;Owlm;QUL;Ul'm;Ulm;Ulma;Ulmas;alm;awlm;ulleum;ulma;ulmi;urumu;wu er mu;xulm;Ουλμ;Горад Ульм;Улм;Ульм;Ուլմ;אולם;أولم;الم;اولم;उल्म;উল্‌ম;อุล์ม;ულმი;ウルム;乌尔姆;울름; +city::2820860;Tuebingen;Gorad Cjubingen;ITuebingen;ITübingen;Tibingen;Tibingene;Tiubingenas;Tjubingen;Tubinga;Tuebinga;Tuebingen;Tybinga;Tybingen;Tympinken;Tübinga;Tübingen;Tībingene;di bin gen;te~yubingen;thu xbing ngein;tu bin gen;twbynghn;twbyngn;twibing-gen;tybyngn;tyubin'gana;Τύμπιγκεν;Горад Цюбінген;Тибинген;Тюбинген;Тюбінген;Түбинген;טובינגן;טיבינגן;توبينغن;توبینگن;ٹوبنگن;ट्युबिन्गन;ทือบิงเงิน;テュービンゲン;图宾根;蒂宾根;튀빙겐; +city::2821029;Troisdorf;Troisdorf;Trojsdorf;ZQG;te luo si duo fu;trwysdwrf;trwyzdwrf;Троисдорф;Тройсдорф;ترويسدورف;ترویزدورف;特羅斯多夫; +city::2821164;Trier;Augusta Treverorum;Gorad Tryr;Treier;Trevere;Treveri;Treveris;Treves;Trevir;Treviri;Treviro;Trevèri;Trevír;Trewir;Trier;Trir;Trire;Triri;Tryras;Trèveris;Trèves;Tréier;Tréveris;Trīre;ZQF;te li er;teulieo;the riyr;toria;tryr;Τρηρ;Горад Трыр;Трир;Трір;טריר;ترير;تری‌یر;ٹریر;เทรียร์;ტრირი;ትሪር;トリーア;特里尔;트리어; +city::2825297;Stuttgart;Estugarda;Gorad Shtutgart;STR;Shhutgart;Shtutgart;Shtutgarti;Shtuttgart;Stocarda;Stoccarda;Stoutnkarde;Stucarda;Stuggart;Stutgardia;Stutgartas;Stutgarte;Stutgarto;Stutqart;Stuttgart;ashtwtgart;ch tuthth kar th;icututkart;shtwtgart;shtwtghart;shuto~uttogaruto;si tu jia te;stutagarta;stwtgrt;syututeugaleuteu;Ştutqart;Štutgartas;Štutgarte;Στουτγκάρδη;Горад Штутгарт;Штутгарт;Штуттгарт;Щутгарт;שטוטגארט;שטוטגרט;اشتوتگارت;سٹٹگارٹ;شتوتغارت;شتوتگارت;شٹوٹگارٹ;श्टुटगार्ट;স্টুটগার্ট;સ્ટુટગાર્ટ;இசுடுட்கார்ட்;സ്റ്റുട്ട്ഗാർട്ട്;ชตุทท์การ์ท;შტუტგარტი;シュトゥットガルト;斯图加特;슈투트가르트; +city::2826287;Stralsund;BBH;Gorad Shtral'zund;Shhralzund;Shtral'zund;Shtralzund;Stralsund;Stralsunda;Stralzunde;Strzalowo;Strzałowò;ashtralzwnd;shi te la er song;shi te la er song de;shutoraruzunto;strlzwnd;syuteulaljunteu;Štrālzunde;Горад Штральзунд;Штралзунд;Штральзунд;Щралзунд;שטרלזונד;اشترالزوند;შტრალზუნდი;シュトラールズント;施特拉尔松;施特拉爾松德;슈트랄준트; +city::2826595;Stolberg;Shtol'berg;Shtolberg;Sjtolberg;Stolberg;Stolbersch;ashtwlbrg;shi tuo er bei ge;shtwlbrgh;shutoruberuku;Штолберг;Штольберг;اشتولبرگ;شتولبرغ;シュトルベルク;施托尔贝格; +city::2830582;Speyer;Espira;Gorad Shpaer;Noviomagus;Schbaya;Shpaer;Shpajer;Shpejer;Spaier;Speyer;Spira;Spire;Spires;Spyr;ZQC;ashpyr;ch pi xexr;shi pai er;shupaia;spyyr;syupaieo;Špýr;Σπάιερ;Горад Шпаер;Шпайер;Шпаєр;Шпајер;Шпейер;שפייר;اشپیر;ชไปเออร์;ስፓየር;シュパイアー;施派尔;슈파이어; +city::2831580;Solingen;Gorad Zolingen;Solich;Solingen;ZIO;Zolin'nken;Zolingen;Zolingenas;Zolingene;jolling-gen;so ling ngein;suo lin gen;swlngn;zolingeni;zoringen;zwlynghn;zwlyngn;Ζόλινγκεν;Горад Золінген;Золинген;Золінген;זולינגן;زولينغن;زولینگن;سولنگن;โซลิงเงิน;ზოლინგენი;ゾーリンゲン;索林根;졸링겐; +city::2831948;Sindelfingen;Sindelfingen;ZPZ;Zindel'fingen;Zindelfingen;Zintelfinken;jinderufingen;xin de er fen gen;zindelpingeni;zyndlfynghn;zyndlfyngn;Ζίντελφιγκεν;Зинделфинген;Зиндельфинген;Зіндельфінген;Զինդելֆինգեն;زيندلفينغن;زیندلفینگن;ზინდელფინგენი;ジンデルフィンゲン;辛德尔芬根; +city::2832495;Siegen;SGE;Siegen;Zigen;jigen;Зиген;ジーゲン; +city::2834265;Schwerte;Schweierte;Schwerte;Shverte;Sverte;ZPX;shfyrth;shi wei te;shwrth;Švertė;Шверте;شفيرته;شورته;施韦特; +city::2834282;Schwerin;Gorad Shveryn;SZW;Schwerin;Shverin;Shverini;Suerinum;Sverin;Sverinas;Sverine;Swerin;Zwerin;Zwěrin;ch weri n;shen wei lin;shfyryn;shuvu~erin;shwryn;sverina;swwryn;syubelin;Šverinas;Šverīne;Σβερίν;Горад Шверын;Шверин;Шверін;Շվերին;שוורין;شفيرين;شورین;श्वेरिन;ชเวริน;シュヴェリーン;什未林;슈베린; +city::2834498;Schweinfurt;Gorad Shvajnfurt;Schweinfurt;Shvajnfurt;Suevofortum;ZPW;shfaynfwrt;shi wei yin fu te;shwaynfwrt;Горад Швайнфурт;Швайнфурт;Швајнфурт;شفاينفورت;شواینفورت;施韦因富特; +city::2835482;Schwabisch Gmund;Gamundia;Gmund;Gmünd;Schwaebisch Gmuend;Schwäbisch Gmünd;Shvebish Gmind;Shvebish Gmjund;Shvebish-Gmjund;Svabijos Gmiundas;chwe bi chk mun d;shfaybysh ghmwnd;shi wa ben ge ming de;shvebish-gmiundi;shwbysh gmwnd;Švabijos Gmiundas;Швебиш Гминд;Швебиш Гмюнд;Швебиш-Гмюнд;Швебіш-Гмюнд;شفايبيش غموند;شوبیش گموند;ชเวบิชกมึนด์;შვებიშ-გმიუნდი;施瓦本格明德; +city::2841648;Sankt Augustin;Sankt Augustin;Sankt-Avgustin;Zankt-Augustin;sheng ao gu si ding;zankt agstyn;zankt awghstyn;Занкт-Аугустін;Санкт Аугустин;Санкт-Августин;زانكت آوغستين;زانکت آگستین;圣奥古斯丁; +city::2842647;Saarbruecken;Gorad Saarbruken;SCN;Saarbrecken;Saarbrigge;Saarbrjuken;Saarbrjukken;Saarbrucken;Saarbruecken;Saarbruekken;Saarbrécken;Saarbrücken;Saarbrükken;Saarmpryken;Saravipons;Sarbriken;Sarbriukenas;Sarbruch;Sarebryken;Sarrebruck;Sarëbryken;Sárbrúch;Zarbrikene;Zārbrikene;jaleubeulwiken;jarabryukana;sa er bu lu ken;sar brukhkhein;sarabrukena;sarbrkn;sarbrwkn;sha bo qin;zarbrwkn;zaruburyukken;Σααρμπρύκεν;Горад Саарбрукен;Саарбрюкен;Саарбрюккен;Сарбрикен;Սաարբրյուքեն;זארבריקן;زاربروکن;ساربروكن;ساربروکن;ساربرکن;जारब्र्युकन;सारब्रुकेन;ซาร์บรึคเคิน;ზაარბრიუკენი;ザールブリュッケン;沙卜勤;萨尔布吕肯;자르브뤼켄; +city::2842884;Ruesselsheim;Gorad Rusel'sgajm;Riselsheima;Riselskhajm;Rjussel'sgajm-am-Majn;Rjussel'skhajm;Rjusselskhajm;Rouselschaim;Ruesselsheim;Ruesselsheim am Main;Russelsheim;Rüsselsheim;Rüsselsheim am Main;lu sai er si hai mu;rwslshaym;rwslshyym;rwslzhaym;ryusserusuhaimu;Ρουσελσχάιμ;Горад Русельсгайм;Риселсхајм;Рюсселсхайм;Рюссельсгайм-ам-Майн;Рюссельсхайм;רוסלסהיים;روسلزهایم;روسلسهايم;リュッセルスハイム;吕塞尔斯海姆; +city::2844588;Rostock;Gorad Rostak;RLG;Roshhok;Roshtok;Rostochium;Rostock;Rostok;Rostoka;Rostokas;Roztok;loseutokeu;luo si tuo ke;rosutokku;rwstwk;rwstwq;rxs thxkh;Ρόστοκ;Горад Ростак;Росток;Рошток;Рощок;רוסטוק;روستوك;روستوک;روسٹاک;รอสทอค;როსტოკი;ロストック;罗斯托克;로스토크; +city::2844988;Rosenheim;Gorad Rozenkhajm;Pons Aeni;Rosenheim;Rousnam;Rozengajm;Rozenkhajm;ZPR;lojenhaim;luo sen hai mu;rozenhaimu;rznhaym;Горад Розенхайм;Розенгайм;Розенхайм;Розенхајм;رزنهایم;ローゼンハイム;罗森海姆;로젠하임; +city::2847645;Rheine;Rajn;Rajne;Rene;Rheine;ZPQ;lai nei;laine;raynh;Райн;Райне;Рајне;راينه;赖内;라이네; +city::2847736;Reutlingen;Rejtlingen;Reutlingen;Roitlingenas;Roitlinken;Rojtlingen;ZPP;loiteulling-gen;luo yi te lin gen;roitoringen;rwytlynghn;rwytlyngn;Ρόιτλιγκεν;Рейтлинген;Ройтлинген;Ройтлінген;Ројтлинген;רויטלינגן;رويتلينغن;روٹلنگن;ロイトリンゲン;罗伊特林根;로이틀링겐; +city::2848273;Remscheid;Remsaint;Remsayd;Remscheid;Remseidas;Remshajd;Remşayd;Remšeidas;ZPN;lei mu sha yi de;lemsyaiteu;remshaidi;remushaito;rmshayd;rmsyyd;Ρέμσαϊντ;Ремшайд;Ремшајд;רמשייד;رمشايد;رمشاید;ریمشیڈ;რემშაიდი;レムシャイト;雷姆沙伊德;렘샤이트; +city::2849483;Regensburg;Gorad Rehgensburg;Ratisbon;Ratisbona;Ratisbonne;Ratyzbona;Regensboerj;Regensburg;Regensburga;Regensburgas;Regensburgo;Regensbörj;Regenzburg;Rengschburg;Renkensmpournk;Rezno;Rēgensburga;Rėgensburgas;Rězno;ZPM;legenseubuleukeu;lei gen si bao;regensburgi;regensuburuku;rgnsbwrg;ryghnsbwrgh;rygnzbrg;Řezno;Ρέγκενσμπουργκ;Горад Рэгенсбург;Регензбург;Регенсбург;Реґенсбурґ;רגנסבורג;ريغنسبورغ;رگنسبورگ;ریگنزبرگ;რეგენსბურგი;レーゲンスブルク;雷根斯堡;레겐스부르크; +city::2849647;Recklinghausen;Recklinghausen;Recklinghusium;Reklinghauzenas;Reklingkhauzen;Riaekelhusen;Riäkelhusen;lei ke lin hao sen;lekeullinghaujen;rekkuringuhauzen;rklynghawzn;Реклингхаузен;Реклінгхаузен;رکلینگهاوزن;ریکلنگہاؤسن;რეკლინგჰაუზენი;レックリングハウゼン;雷克林豪森;레클링하우젠; +city::2850174;Ratingen;Ratingen;ZPJ;la ting gen;lating-en;ratlyngn;Ратинген;راتلینگن;拉廷根;라팅엔; +city::2851746;Pulheim;Pul'gajm;Pul'khajm;Pulheim;Pulkhajm;Pullem;bwlhaym;pu er hai mu;pwlhaym;Пулхајм;Пульгайм;Пульхайм;بولهايم;پولهایم;普爾海姆; +city::2852458;Potsdam;Poczdam;Podstupim;Postupim;Potsdam;Potsdamo;Poztupimi;bo ci tan;pocheudam;potsudamu;pwtsdm;Πότσδαμ;Потсдам;פוטסדאם;פוטסדם;ポツダム;波茨坦;포츠담; +city::2853292;Plauen;Plauehn;Plauen;Plauenas;Plauene;Plavia Variscorum;Plavno;Plawno;Pławno;blawyn;peullauen;phe la xein;plauehn;plawyn;pu lao en;purauen;Плауен;Плауэн;פלאואן;بلاوين;پلاوئن;เพลาเอิน;プラウエン;普劳恩;플라우엔; +city::2853969;Pforzheim;Gorad Pforckhajm;Pforcheimas;Pforckhajm;Pfortschaim;Pforzheim;Phorca;Porta Hercyneae;bfwrtshaym;fwrtshaym;poleucheuhaim;pu fu er ci hai mu;puforutsuhaimu;Πφόρτσχαϊμ;Горад Пфорцхайм;Пфорцхайм;Пфорцхајм;بفورتسهايم;فورتسهایم;فورزہائم;პფორცჰაიმი;プフォルツハイム;普福尔茨海姆;포르츠하임; +city::2855328;Passau;Bassa;Batavia Bavariae;Båssa;Gorad Pasau;Pasau;Pasavia;Pasawa;Pasov;Passaou;Passau;Passavia;ZPF;pa shao;pasau;pasaw;passau;phas sea;psaw;Πάσσαου;Горад Пасау;Пасау;Пассау;پاساو;پساؤ;พาสเซา;パッサウ;帕绍;파사우; +city::2855745;Paderborn;Gorad Padehrborn;PAD;Paderborn;Paderborna;Paderbornas;Paderbronna;Patterbuorn;Pāderborna;badrbwrn;pa de bo en;pa de xr bxrn;padaborun;padeoboleun;padrbwrn;Горад Падэрборн;Падерборн;بادربورن;پادربورن;پیڈربورن;ปาเดอร์บอร์น;პადერბორნი;パーダーボルン;帕德博恩;파더보른; +city::2856883;Osnabrueck;Gorad Asnabruk;Osnabrik;Osnabrika;Osnabriukas;Osnabrjuk;Osnabruck;Osnabrueck;Osnabruga;Osnabrugensis;Osnabrück;Ossenbruegge;Ossenbrügge;ao si na bu lu ke;asnabrwk;awsnabrwk;oseunabeulwikeu;osunaburyukku;Горад Аснабрук;Оснабрик;Оснабрюк;אוסנבריק;أسنابروك;اسنابروک;اوسنابروک;ოსნაბრიუკი;オスナブリュック;奥斯纳布吕克;오스나브뤼크; +city::2857458;Oldenburg;Aldenboarch;Aldinborg;Byen Oldenburg;Gorad Ol'dehnburg;Ol'denburg;Oldemburgh;Oldemburgo;Oldenboerj;Oldenbourg;Oldenburg;Oldenburgas;Oldenburgo;Oldenburgum;Oldenbörj;Ollnborg;Ooldenbuurich;ao er deng bao;awldnbwrg;awldnbwrgh;oldenbuleukeu;oldenburgi;orudenburuku;Горад Ольдэнбург;Олденбург;Ольденбург;Өльдэнбург;אולדנבורג;أولدنبورغ;اولدنبورگ;اولڈنبرگ;ოლდენბურგი;オルデンブルク;奥尔登堡;올덴부르크; +city::2857798;Offenburg;Ofenburg;Offenbourg;Offenburg;Offenburgum;ZPA;ao fen bao;awfnbwrg;awfnbwrgh;offenburuku;Офенбург;Оффенбург;אופנבורג;أوفنبورغ;اوفنبورگ;オッフェンブルク;奥芬堡; +city::2857807;Offenbach;Offenbach;Offenbach am Main; +city::2860410;Oberhausen;Obergauzen;Oberhausen;Oberhauzen;Oberhauzenas;Oberhauzene;Oberkhauzen;Omperchaouzen;Overhus;ao bo hao sen;awbrhawzn;obahauzen;obeohaujen;oberhauzeni;Ομπερχάουζεν;Обергаузен;Оберхаузен;אוברהאוזן;أوبرهاوزن;اوبرهاوزن;ობერჰაუზენი;オーバーハウゼン;奥伯豪森;오버하우젠; +city::2861650;Nuernberg;Gorad Njurnberg;NUE;Neurenberch;Neurenberg;Niamberg;Nirnberg;Nirnberga;Niurnbergas;Njurnberg;Norimberg;Norimberga;Norimberk;Norimbèrga;Norymberga;Nuernbarg;Nuernberg;Nuernberq;Nuremberg;Nuremberga;Nurembergo;Nuremburg;Nurembèrg;Nurenberg;Nurenbergo;Nurenburg;Nurnberg;Nyremberg;Nyremberge;Nyremvergi;Nyrëmberg;Nyurnberg;Nyurnbérg;Núremberg;Nürnbarg;Nürnberg;Nürnberq;n'yurnabarga;niu lun bao;niurnbergi;niyuramperk;nurem beirk;nwileunbeleukeu;nwrnbrg;nwrnbyrgh;nyrnbrg;nyurunberuku;nywrmbrg;Νυρεμβέργη;Νυρεμβεργη;Горад Нюрнберг;Нирнберг;Нюрнберг;Нӳрнберг;נירנבערג;נירנברג;نورنبرگ;نورنبيرغ;نۆریمبێرگ;نیورمبرگ;न्युर्नबर्ग;நியூரம்பெர்க்;นูเรมเบิร์ก;เนือร์นแบร์ก;ნიურნბერგი;ニュルンベルク;纽伦堡;뉘른베르크; +city::2861934;Nordhorn;Nordhorn;Nordkhorn;Nothoorn;nuo de huo en;nwrdhwrn;Нордхорн;نوردهورن;諾德霍恩; +city::2862026;Norderstedt;Nordershtedt;Nordershtet;Norderstedt;Norderstedt Stadt;ZOV;nrdrashtt;nuo de shi tai te;nwrdrshtyt;nwrdrstt;Нордерштедт;Нордерштет;נורדרשטט;نردراشتت;نوردرشتيت;諾德施泰特; +city::2863840;Neuwied;Langendorf;Neuweid;Neuwied;Nojvid;ZOU;noivu~ito;nwyfyd;nwywwyd;nwywyd;xin wei de;Нойвид;Нойвід;Нојвид;נויוויד;نويفيد;نویوید;ノイヴィート;新維德; +city::2863941;Neu-Ulm;Gorad Noj-Ul'm;Nei-Ulm;Neu Ulm;Neu-Ulm;Noea Ulma;Noj-Ul'm;Noj-Ulm;Nova Ulma;Noy Owlm;Nuevo Ulm;Nuova Ulma;Nöa Ulma;Subdistrikto Neu-Ulm;ZOT;noiulleum;noiurumu;nwy-awlm;xin wu er mu;Горад Ной-Ульм;Ной-Ульм;Ној-Улм;Նոյ Ուլմ;נוי-אולם;نوي-أولم;نوی-اولم;ノイウルム;新乌尔姆;노이울름; +city::2864054;Neustadt;Naischdadt;Neustadt;Neustadt an der Haardt;Neustadt an der Weinstrasse;Neustadt an der Weinstraße;Neustadt ce la Vinstrato;Neustadt ĉe la Vinstrato;Nojshhat an der Vajnshhrase;Nojshtadt-an-der-Vajnshtrase;Nojshtadt-an-der-Vajnshtrasse;Nojshtat an der Vajnshtrase;pu tao jiu zhi lu shang de xin cheng;Нойштадт-ан-дер-Вайнштрасе;Нойштадт-ан-дер-Вайнштрассе;Нойщат ан дер Вайнщрасе;Нојштат ан дер Вајнштрасе;نوی‌اشتات آن در واین‌اشترایه;葡萄酒之路上的新城; +city::2864118;Neuss;Gorad Nojs;Neuss;Neuß;Noisas;Nojs;Novaesium;Nuess;Nueuess;Nuus;Nüss;Nüüß;noiseu;noisi;noisu;nuo yi si;nwys;nyws;Горад Нойс;Нойс;Нојс;نويس;نویس;نیوس;ნოისი;ノイス;诺伊斯;노이스; +city::2864475;Neumuenster;EUM;Naimuenster;Naimünster;Neumuenster;Neumunster;Neumünster;Niemuenster;Niemünster;Nojminster;Nojmjunster;Novum Monasterium;noimwinseuteo;noimyunsuta;nywmnstr;xin ming si te;Ноймюнстер;Нојминстер;نوی‌مونستر;نیومنستر;ノイミュンスター;新明斯特;노이뮌스터; +city::2866110;Neubrueck;; +city::2866135;Neubrandenburg;FNB;Neibrandenburga;Neubrandenbourg;Neubrandenburg;Noibrandenburgas;Nojbrandenburg;Nojbrandenburge;Nuevo Brandeburgo;noibeulandenbuleukeu;noiburandenburuku;nwybrndnbwrg;xin bo lan deng bao;Нойбранденбург;Нойбранденбурге;Нојбранденбург;نویبرندنبورگ;ノイブランデンブルク;新勃兰登堡;노이브란덴부르크; +city::2867543;Muenster;FMO;Gorad Mjunstehr;Minster;Minstere;Miunsteris;Mjunster;Moenster;Monasterium;Muenster;Munistri;Munster;Mynster;Mönster;Münster;ming si te;mwinseuteo;mwnstr;mynstr;myunsuta;Μύνστερ;Горад Мюнстэр;Минстер;Мюнстер;מינסטר;مونستر;მიუნსტერი;ミュンスター;明斯特;뮌스터; +city::2867714;Munich;Gorad Mjunkhen;Lungsod ng Muenchen;Lungsod ng München;MUC;Minca;Minche;Minga;Minhen;Minhene;Minkhen;Miunchenas;Mjunkhen;Mnichov;Mnichow;Mníchov;Monachium;Monacho;Monaco de Baviera;Monaco di Baviera;Monaco e Baviera;Monacu;Monacu di Baviera;Monacum;Muenchen;Muenegh;Muenhen;Muenih;Munchen;Munhen;Munic;Munich;Munich ed Baviera;Munih;Munike;Munique;Munix;Munkeno;Munkhen;Munîh;Mynihu;Myunxen;Myunxén;Mònacu;Mùnich ëd Baviera;Múnic;Múnich;München;Münegh;Münhen;Münih;mi wnik;mi'unikha;miunkheni;miyunik;mu ni hei;mwinhen;mwnykh;mynkn;myunhen;myunik;myunikha;myunsena;mywnkh;mywnykh;Μόναχο;Горад Мюнхен;Минхен;Мюнхен;Мүнхен;Мүнхэн;Мӱнхен;Մյունխեն;מינכן;مونیخ;ميونخ;ميونيخ;میونخ;म्युन्शेन;म्यूनिख;মিউনিখ;மியூனிக்;ಮ್ಯೂನಿಕ್;มิวนิก;မြူးနစ်ချ်မြို့;მიუნხენი;ミュンヘン;慕尼黑;뮌헨; +city::2867838;Muelheim;ESS;Milchaim;Mjul'khajm-na-Rure;Moelm;Moeln;Muelheim;Muelheim (Ruhr);Muelheim an der Ruhr;Mulheim;Mulheim-on-Ruhr;Mölm;Möln;Mülheim;Mülheim (Ruhr);Mülheim an der Ruhr;Mülheim-on-Ruhr;Μιλχάιμ;Мюльхайм-на-Руре;מילהיים על הרוהר; +city::2869894;Moenchengladbach;Jlabbach;M'onkhengladbakh;Men'chen'nklantmpach;Menchengladbachas;Menhengladbaha;Menkhengladbakh;Mjonkhengladbakh;Moenchengladbach;Monchengladbach;Muenchen-Gladbach;Mönchengladbach;dwsldwrf;mein chen klad bakh;men xing ge la de ba he;menhyenguratobahha;menkhengladbakhi;mnsngldbk;moenhengeullateubaheu;mwnshnghladbakh;myonsanagladabakha;Μενχενγκλάντμπαχ;Менхенгладбах;Мьонхенгладбах;Мёнхенгладбах;מנשנגלדבך;دوسلدورف;مونشنغلادباخ;مونشن‌گلادباخ;म्योन्शनग्लाडबाख;เมินเชนกลัดบัค;მენხენგლადბახი;メンヒェングラートバッハ;门兴格拉德巴赫;묀헨글라트바흐; +city::2870221;Moers;Gorad Mjors;M'ors;Mers;Mersas;Meurs;Mjors;Moers;Mors;Mörs;Mėrsas;ZON;meirs;mo er si;moeleuseu;mwrz;mwyrs;myrs;Горад Мёрс;Мерс;Морс;Мьорс;Мёрс;مئرس;مورز;مويرس;เมิร์ส;默爾斯;뫼르스; +city::2871039;Minden;Minden;Minn;min dein;minden;ming deng;mndn;myndn;Минден;Мінден;مندن;میندن;มินเดิน;ミンデン;明登; +city::2871983;Menden;Menden;Mennen;men deng;mndn;Менден;مندن;门登; +city::2872504;Meerbusch;Meerbusch;Merbush;ZOK;mei er bu shi;myrbwsh;Мербуш;ميربوش;میربوش;梅尔布施; +city::2873263;Marl;Alt-Marl;Marl;Marl';ma er;marl alman;Марл;Марль;مارل، آلمان;马尔; +city::2873759;Marburg an der Lahn;Marbourg;Marburg;Marburg an der Lahn;Marburgo;Marmpournk;maruburuku;Μάρμπουργκ;Марбург;マールブルク; +city::2873891;Mannheim;Gorad Mangejm;MHG;Man'chaim;Man'geym;Man'géym;Mangejm;Manhajmi;Manheima;Manheimas;Manhemium;Mankhajm;Mannheim;Monnem;man hai mu;man him;manaha'ima;manhaim;manhaimi;manhaimu;manhaym;mnhyym;Μάνχαϊμ;Горад Мангейм;Мангейм;Манхайм;Манхајм;מנהיים;مانهايم;مانهایم;मानहाइम;มันไฮม์;მანჰაიმი;ማንሃይም;マンハイム;曼海姆;만하임; +city::2874225;Mainz;Gorad Majnc;Maeaenz;Maganza;Magonza;Maguncia;Maguntzia;Magunza;Magúncia;Maianca;Maiança;Mainca;Maincas;Maints;Mainz;Majenco;Majnc;Majnci;Mayence;Mayns;Meenz;Mogontiacum;Moguncia;Moguncja;Moguntiacum;Mogúncia;Mohuc;Mohuč;Määnz;ma'intsa;maincheu;maintsi;maintsu;maynts;maynz;mei yin ci;mins;myynz;Μάιντς;Горад Майнц;Майнц;Мајнц;מיינץ;مائنز;ماينتس;ماینتس;माइंत्स;ไมนซ์;მაინცი;ማይንጽ;マインツ;美因茨;마인츠; +city::2874545;Magdeburg;CSO;Dzewin;Dźěwin;Gorad Magdehburg;Maagdenburg;Madeborch;Magathaburg [a. 936];Magdeboerj;Magdeborg;Magdeborgh;Magdebourg;Magdebourgo;Magdebuag;Magdeburg;Magdeburga;Magdeburgas;Magdeburgh;Magdeburgo;Magdeburgu;Magdeburgum;Magdeburk;Magdebörj;Makekepuka;Meideborg;Meyburch [a. 1275];ma ge de bao;magadeburga;magdbwrg;magdeburgi;mageudebuleukeu;maghdybwrgh;mak de bur k;makdeburga;makudeburuku;mgdbwrg;Μαγδεβούργο;Горад Магдэбург;Магдебург;מגדבורג;ماغديبورغ;ماگدبورگ;مگڈیبرگ;माक्देबुर्ग;मागदेबुर्ग;มักเดบูร์ก;მაგდებურგი;マクデブルク;马格德堡;마그데부르크; +city::2875107;Luenen;Hliunon;Linen;Ljunen;Luenen;Lunen;Lünen;lu nen;lwinen;lwnn;ryunen;Линен;Люнен;لونن;リューネン;吕嫩;뤼넨; +city::2875115;Lueneburg;Glain;Gorad Ljuneburg;Lineburg;Ljuneburg;Luemborg;Lueneburg;Luneberg;Lunebourg;Luneburg;Luneburgo;Luneburgum;Lyneburgu;Lynempournk;Lümborg;Lüneburg;lu ne bao;lu nei bao;lwinebuleukeu;lwnbwrg;lwnbwrgh;lynbwrg;ryuneburuku;Λύνεμπουργκ;Горад Люнебург;Линебург;Люнебург;לינבורג;لونبورغ;لونبورگ;リューネブルク;吕内堡;吕讷堡;뤼네부르크; +city::2875376;Ludwigshafen am Rhein;Liudvigshafenas prie Reino;Ljudvigsgafen-na-Rejni;Ljudvigskhafen-na-Rejne;Lountvichschafen;Ludovici Portus Rhenanus;Ludvigskhafen;Ludvigskhafen na Rajni;Ludwichshafe;Ludwigshafen;Ludwigshafen am Rhein;Ludwigshafen sul Reno;Luedviqshafen;Lüdviqshafen;lu de wei xi gang;ludaviksahaphena;luteubihiseuhapen;lwdfyghshafn;lwdwygshafn;rainis ludvigshapeni;rutovu~ihhisuhafen;rutovu~ihisuhafen;Λουντβιχσχάφεν;Лудвигсхафен;Лудвигсхафен на Рајни;Людвигсхафен-на-Рейне;Людвіґсгафен-на-Рейні;לודוויגסהאפן;لودفيغسهافن;لودویگسهافن;لڈوگشافن;लुडविक्सहाफेन;რაინის ლუდვიგსჰაფენი;ルートヴィッヒスハーフェン;ルートヴィヒスハーフェン;路德维希港;루트비히스하펜; +city::2875392;Ludwigsburg;Gorad Ljudvigsburg;Liudvigsburgas;Ljudvigsburg;Lountvinksmpournk;Ludoviciburgum;Ludvigsburg;Ludwigsbourg;Ludwigsburg;Ludwigsburgo;Luedviqsburq;Luisburgo;Lüdviqsburq;lu de wei xi bao;lud wics bur k;lwdfyghsbwrgh;lwdwygzwbwrg;rutovu~ihisuburuku;Λούντβιγκσμπουργκ;Горад Людвігсбург;Лудвигсбург;Людвигсбург;Людвігсбург;لودفيغسبورغ;لودویگزوبورگ;ลุดวิจส์บูร์ก;ルートヴィヒスブルク;路德维希堡; +city::2875457;Luedenscheid;Leudenscheid;Lidenshajd;Liudolvescetha;Ljudenshajd;Ludenscheid;Luedenscheid;Luensche;Lüdenscheid;Lünsche;lu deng sha yi de;lwdnshayd;Лиденшајд;Люденшайд;لودنشايد;لودن‌شاید;吕登沙伊德; +city::2875601;Luebeck;Gorad Ljubek;Libek;Libeka;Limpek;Liubekas;Ljubek;Lubeca;Lubecca;Lubeck;Lubeck Hansestadt;Lubeka;Lubeko;Lubëcca;Luebeca;Luebeck;Lybeku;Lyypekki;Lübeca;Lübeck;Lübeck Hansestadt;Lībeka;lu bei ke;lux bekh;lwbk;lwbyk;lwibekeu;lybq;lyubeka;ryubekku;Λίμπεκ;Горад Любек;Либек;Любек;ליבק;لوبيك;لوبک;ल्युबेक;ลือเบค;ლიუბეკი;リューベック;吕贝克;뤼베크; +city::2876865;Lippstadt;Lip'stant;Lippshtadt;Lippshtadte;Lippstadt;Lipshhat;Lipshtat;li pu shi ta te;lybshtat;Λίπσταντ;Липпштадт;Липпштадте;Липштат;Липщат;Ліппштадт;ليبشتات;لیپ‌اشتات;利普施塔特; +city::2877088;Lingen;Gorad Lingen;Lingen;lin gen;lynghn;lyngn;ringen;Горад Лінген;Линген;لينغن;لینگن;リンゲン;林根; +city::2878234;Leverkusen;Laevverkuuse;Leberkouzen;Leverkusen;Leverkuzen;Leverkuzenas;Leverkuzene;Leverkūzene;Lävverkuuse;Lėverkuzenas;ZOA;lbrqwzn;le fexr khu sein;lebeokujen;lei wo ku sen;lwrkwzn;lyfrkwzn;lywrkwsn;rebakuzen;Λεβερκούζεν;Леверкузен;לברקוזן;لورکوزن;ليفركوزن;لیورکوسن;เลเฟอร์คูเซิน;ლევერკუზენი;レバークーゼン;勒沃库森;레버쿠젠; +city::2879139;Leipzig;Gorad Lejpcyg;LEJ;Laeipcig;Lajpcig;Lajpcigu;Lajpcik;Leipciga;Leipcigas;Leipsia;Leipzig;Lejpcig;Leypsiq;Leypzig;Lipcse;Lipekika;Lipsca;Lipsia;Lipsk;Lipsko;Läipcig;Léypzig;Lípsia;la'ipajhisa;la'ipasisa;lai bi xi;laipcik;laipeuchihi;laiptsigi;laybzygh;laypzsh;laypzyg;lip sik;lipajiga;liph sik;lypzsh;lyypzyg;raiputsu~ihi;Λειψία;Горад Лейпцыг;Лайпциг;Лајпциг;Лейпциг;Լայպցիգ;לייפציג;لائپزش;لايبزيغ;لایپزیگ;لیپزش;लाइपझिश;लिपजिग;লাইপ্‌ৎসিশ;ਲਾਈਪਸਿਸ਼;லைப்சிக்;ไลป์ซิก;ไลพ์ซิก;လိုက်ပဆစ်မြို့;ლაიფციგი;ላይፕጽግ;ライプツィヒ;莱比锡;萊比錫;라이프치히; +city::2881062;Langenhagen;Langenhagen;Langenhogen;Langenkhagen;Nienhagen [a. 1312];lang gen ha gen;langhnhaghn;langnhagn;Лангенхаген;لانغنهاغن;لانگنهاگن;朗根哈根; +city::2881085;Langenfeld;Langefaeael;Langefääl;Langenfel'd;Langenfeld;ZNX;lang gen fei er de;langnfld;Лангенфелд;Лангенфельд;لانگنفلد;朗根费尔德; +city::2881485;Landshut;Gorad Landsgut;Landishuta;Landsgut;Landshuad;Landshut;Landshutas;Landskhut;Lantschout;QLG;lan ci hu te;lan dshuth;lancheuhuteu;landshwt;rantsufuto;Λάντσχουτ;Горад Ландсгут;Ландсгут;Ландсхут;Լանդսհուտ;لاندسهوت;ลันด์สฮูท;ლანდსჰუტი;ランツフート;兰茨胡特;란츠후트; +city::2884509;Krefeld;Crefeld;Gorad Krehfel'd;Krefel'd;Krefeld;Krefeld-Uerdingen;Krefeldas;Krefelde;Krefelnt;Krieevel;Krievel;Krēfelde;Krėfeldas;QKF;ke lei fei er de;keulepelteu;kher fel d;krfld;kryfld;kureferuto;qrpld;Κρέφελντ;Горад Крэфельд;Крефелд;Крефельд;Կրեֆելդ;קרפלד;كريفلد;کرفلد;کریفیلڈ;เครเฟลด์;კრეფელდი;クレフェルト;クレーフェルト;克雷费尔德;크레펠트; +city::2885679;Konstanz;Constanca;Constance;Constanta;Constantia;Constanza;Constança;Constanța;Costansa;Costanza;Costnitz;Gorad Kanstanc;Konstanc;Konstanca;Konstancas;Konstancja;Konstanco;Konstantia;Konstantza;Konstanz;Kostnica;Kostnice;Kostnitz;QKZ;kang si tan ci;knstants;konseutancheu;konstensa;konsutantsu;kwnstans;qwnstnz;Κωνσταντία;Горад Канстанц;Констанц;קונסטנץ;كونستانس;کنستانتس;کونسٹانس;कॉन्स्टेंस;კონსტანცი;コンスタンツ;康斯坦茨;콘스탄츠; +city::2886242;Koeln;Augusta Ubiorum;CGN;Cologna;Cologne;Colonha;Colonia;Colonia Agrippina;Colonia Agrippinensis;Colonia Claudia Ara Agrippinensium;Colònia;Colônia;Cołogna;Culonia;Cwlen;Gorad Kjol'n;K'oln;Kel'n;Keln;Kelnas;Kelne;Kelni;Keulen;Kiolns;Kjol'n;Koelle;Koeln;Kol'n;Kolin nad Rynem;Kolin nad Rynom;Koln;Koloin;Kolon;Kolonia;Kolonjo;Kolín nad Rýnem;Kolín nad Rýnom;Kyoln;Këlni;Kölle;Köln;Lungsod ng Cologne;Oppidum Ubiorum;gu long;kalana;kalon;ke long;kerun;kholoy;kln;klwn;koelleun;koln;kolon;kwlwn;kwlwnya;kyolna;qln;Ķelne;Κολωνία;Горад Кёльн;Келн;Кельн;Кьолн;Кёльн;Кӧльн;Көлн;Քյոլն;קלן;קעלן;كولونيا;کلن;کلون;کولون;क्योल्न;ਕਲਨ;கோல்ன்;కొలోన్;ಕಲೋನ್;โคโลญ;კელნი;ኮልን;ケルン;古龍;科隆;쾰른; +city::2886946;Koblenz;Coblenca;Coblence;Coblentz;Coblenz;Coblenza;Coblença;Confluentes;Gorad Koblenc;Koblenc;Koblencas;Koblenci;Koblencja;Koblenco;Koblentza;Koblenz;Komplents;ZNV;ke bu lun ci;kobeullencheu;koburentsu;kwblns;kwblnts;kwblnz;qwblnz;Κόμπλεντς;Горад Кобленц;Кобленц;קובלנץ;كوبلنس;کوبلنتس;کوبلنز;コブレンツ;科布倫茨;코블렌츠; +city::2891122;Kiel;Gorad Kil';KEL;Kiel;Kielia;Kielo;Kil;Kil';Kile;Kilo;Kilonia;Kyle;Kylis;Kíl;ji er;khil;kil;kila;kiru;kyl;qyl;Ķīle;Κίελο;Горад Кіль;Кил;Киль;Кіль;Քիլ;קיל;كيل;کیل;कील;কিল;คีล;კილი;キール;基尔;킬; +city::2891524;Kerpen;Kerpe;Kerpen;ke er peng;Керпен;克尔彭; +city::2891621;Kempten (Allgaeu);Kempten; +city::2892518;Kassel;Cassala;Cassel;Castellum;Chasalla [a. 913];Gorad Kasel';KSF;Kasel;Kasele;Kaseli;Kaselis;Kaselo;Kassel;Kassel';ka sai er;ka sai er shi;kasel;kasl;kasseru;khas seil;kysl;Κάσσελ;Горад Касель;Касел;Кассель;קאסל;كاسل;کاسل;کیسل;คัสเซิล;კასელი;カッセル;卡塞尔;卡塞爾市;카셀; +city::2892794;Karlsruhe;Carlsruhe;Carolsruha;FKB;Gorad Karlsrueh;Kallsruh;Karlsroue;Karlsrue;Karlsrueh;Karlsruhe;Karlsruje;Karlsrūe;Karlsrūjė;ka er si lu e;kaleulseulue;karlsaruha;karlsrwh;karlsrwhh;karusurue;qrlsrwhh;Καρλσρούη;Горад Карлсруэ;Карлсруе;Карлсруэ;קרלסרוהה;كارلسروه;کارلزروہے محل;کارلسروهه;कार्ल्सरूह;კარლსრუე;カールスルーエ;卡尔斯鲁厄;카를스루에; +city::2894003;Kaiserslautern;K-Town;KLT;Kaiserlautern;Kaiserslantern;Kaiserslautern;Kaizerslauternas;Kajzerslautern;Lutra;kai sa si lao teng;kaijeoseullauteleun;kaizasurauterun;ki se xrs lea theirn;Кайзерслаутерн;Кајзерслаутерн;קייזרסלאוטרן;کائزرسلائوٹرن;ไกเซอร์สเลาเทิร์น;カイザースラウテルン;凯撒斯劳滕;카이저슬라우테른; +city::2895044;Jena;Ena;Gorad Iena;Iena;Iéna;Jena;Jena (Thueringen);Jéna;Jēna;Jėna;ZJS;iena;i~ena;jena;jyna;ye na;yena;yna;yyna;yynh;Ιένα;Єна;Јена;Горад Іена;Йена;יינה;جینا;يينا;ینا;जेना;জেনা;იენა;イェーナ;耶拿;예나; +city::2895669;Iserlohn;Iserlaun;Iserlohn;Iserlon;Izerlon;Izerlonas;ZNR;ayzlwn;azrlwn;ijeollon;izaron;yi se long;Ізерлон;Изерлон;Исерлон;إزرلون;ایزلون;イーザーローン;伊瑟隆;이절론; +city::2895992;Ingolstadt;IGS;Ingol'shtadt;Ingolshhat;Ingolshtat;Ingolstadt;ingorushutatto;Инголштат;Инголщат;Ингольштадт;インゴルシュタット; +city::2896817;Ibbenbueren;Ibbenbjuren;Ibbenbueren;Ibbenbüren;Ibenbiren;aybnbwrn;aynnbwrnn;yi ben bi lun;Іббенбюрен;Иббенбюрен;Ибенбирен;إيبنبورن;ایننبورنن;伊本比伦; +city::2897216;Huerth;Gjurt;Hiurtas;Huerth;Hürth;Khirt;Khjurt;ZNP;hwrt;xu er te;Гюрт;Хирт;Хюрт;هورت;许尔特; +city::2904789;Hildesheim;Chilnteschaim;Gil'desgajm;Gorad Gil'dehsgajm;Hildesheim;Hildesheima;Hildesheimas;Hildesia;Hilmessen;Khil'deskhajm;Khildeskhajm;ZNO;hildeseuhaim;hirudesuhaimu;hyldshaym;hyldshyym;hylds‌haym;xi er de si hai mu;Χίλντεσχαϊμ;Горад Гільдэсгайм;Гільдесгайм;Хилдесхайм;Хилдесхајм;Хильдесхайм;הילדסהיים;هيلدسهايم;هیلدس‌هایم;ہیلڈشیم;ヒルデスハイム;希尔德斯海姆;힐데스하임; +city::2904795;Hilden;Gil'den;Hilde;Hilden;Khil'den;Khilden;ZNN;hyldn;xi er deng;Гільден;Хилден;Хильден;هيلدن;هیلدن;希爾登; +city::2905560;Herten;Gerten;Heritono;Herten;Hiaetten;Hiätten;Hėritono;Kherten;hei er teng;hrtn;hyrtn;Гертен;Хертен;هرتن;هيرتن;黑尔滕; +city::2905891;Herne;Gerne;Gorad Kherneh;Herne;Hernė;Kherne;hei er ne;heleune;herne;herune;hrnh;hyrnh;Герне;Горад Хернэ;Херне;هرنه;هيرنه;ہرنے;ჰერნე;ヘルネ;黑尔讷;헤르네; +city::2906121;Herford;Herford;Hiarwede;Kherford;ZNK;hei er fu de;heruforuto;hrfwrd;Херфорд;هرفورد;ヘルフォルト;黑爾福德; +city::2907669;Heilbronn;Chailmpron;Gajl'bronn;Hailprunna;Hajlbrono;Heilbronas;Heilbronn;Heilbronn Neckar;Khajl'bronn;Khajlbron;hai er bu long;hailbeulon;hailbroni;hairuburon;haylbrwn;hyylbrwn;Χαϊλμπρόν;Гайльбронн;Хайлброн;Хайльбронн;Хајлброн;היילברון;هايلبرون;هایلبرون;ہیلبرون;ჰაილბრონი;ハイルブロン;海尔布隆;하일브론; +city::2907851;Heidenheim an der Brenz;Chainten'chaim;Gajdengajm-na-Brenci;Haidenhaim Brencal;Heidenheim;Heidenheim an der Brenz;Heidenheim in Wurttemberg;Heidenheim in Württemberg;Hoana;Khajdenkhajm an der Brenc;Khajdenkhajm na Brencu;Khajdenkhajm-an-der-Brenc;Khajdenkhajm-na-Brence;hai deng hai mu;haydnhaym;haydnhaym an dr brnts;Χάιντενχαϊμ;Гайденгайм-на-Бренці;Хайденхайм ан дер Бренц;Хайденхайм-ан-дер-Бренц;Хайденхайм-на-Бренце;Хајденхајм на Бренцу;هايدنهايم;هایدنهایم آن در برنتس;海登海姆; +city::2907911;Heidelberg;Chaidelvergi;Gajdel'berg;Gejdel'berg;Gorad Gejdehl'berg;HDB;Haidelbergu;Haidlbaersch;Haidlbärsch;Heidelbarg;Heidelberch;Heidelberg;Heidelberga;Heidelbergas;Heidelburg;Heidlberg;Hejdelbergo;Heydelberg;Heydelberq;Héydélbérg;Khajdel'berg;Khajdelberg;hai de bao;haidelbeleukeu;haidelbergi;haideruberuku;hayadelabarga;haydlbrg;haydlbrgh;hyydlbrg;Χαϊδελβέργη;Гайдельберг;Гейдельберг;Горад Гейдэльберг;Хайделберг;Хайдельберг;Хајделберг;היידלבערג;היידלברג;هايدلبرغ;هایدلبرگ;ہائیڈلبرگ;हायडेलबर्ग;ჰაიდელბერგი;ハイデルベルク;海德堡;하이델베르크; +city::2909230;Hattingen;Chatin'nken;Hattingen;Khatingen;Khattingen;ha ting gen;hatyngn;Χάτινγκεν;Хатинген;Хаттинген;هاتینگن;ہیٹنگن;哈廷根; +city::2910831;Hannover;Annobero;Gannovehr;Gannover;Gorad Ganover;HAJ;Hannauver;Hannober;Hannova;Hannover;Hannovera;Hannovere;Hannower;Hannóver;Hanobhar;Hanofer;Hanofér;Hanover;Hanoveri;Hanoveris;Hanovra;Hanovre;Hanovro;Hanower;Hanowery;Hanóver;Hanôver;Honovere;Hànobhar;IHanoveri;Khannover;Khanover;han no wexr;han nuo wei;hanobeo;hanofa;hanophara;hanoveri;hanwfr;hnwbr;Αννόβερο;Ганновер;Ганновэр;Горад Гановер;Ханновер;Хановер;Հաննովեր;האנאווער;הנובר;هانوفر;ھانۆفەر;ہینوور;हानोफर;হানোফার;ฮันโนเวอร์;ჰანოვერი;ハノーファー;汉诺威;漢諾威;하노버; +city::2911007;Hanau am Main;Chanaou;Hanau;Hanau am Main;Khanau;hanau;Χάναου;Ханау;ハーナウ; +city::2911240;Hamm;Gamm;Gorad Kham;Hamas;Hamm;Hammona;Kham;Khamm;ha mu;ham;hami;hamu;Гамм;Горад Хам;Хам;Хамм;هام;ہام;ჰამი;ハム;哈姆;함; +city::2911271;Hameln;Gamel'n;Gorad Khamel'n;Hamala;Hamelen;Hamelin;Hameln;Hamelín;Khamel'n;Khameln;ZEZ;ha mo er en;hamelleun;hamerun;hamln;hmlyn;Гамельн;Горад Хамельн;Хамелн;Хамельн;המלין;هاملن;ハーメルン;哈默爾恩;하멜른; +city::2911298;Hamburg;Amborg;Ambourgo;Amburgo;Amburgu;Augusta Gambriviorum;Ciutat d'Hamburg;Estat d'Hamburg;Gamburg;Gorad Gamburg;HAM;HH;Hamboarch;Hamboerg;Hamboerj;Hamborg;Hambourg;Hamburch;Hamburg;Hamburga;Hamburgas;Hamburgo;Hamburgu;Hamburgum;Hamburk;Hambuurich;Hambörg;Hambörj;Hambùrk;Hambûrg;Hamepuka;Hammaburg [a. 832];Hampuri;Hanburgo;Khamburg;ham bur k;hambuleukeu;hamburgi;hambwrg;hambwrgh;han bao;han bao shi;hanburuku;hemburga;hmbwrg;hyambarg;hʼambwrg;Ħamburg;Αμβούργο;Гамбург;Гамбурґ;Горад Гамбург;Хамбург;Համբուրգ;האַמבורג;המבורג;هامبورغ;هامبورگ;ہymbrg;ہیمبرگ;ܗܡܒܘܪܓ;हॅम्बुर्ग;ಹ್ಯಾಂಬರ್ಗ್;ฮัมบูร์ก;ჰამბურგი;ハンブルク;汉堡;汉堡市;함부르크; +city::2911522;Halle (Saale);Galle;Halle;Halle (Saale);Halle an der Saale;Halle sul Saale;Halle-on-the-Saale;Khale;hale;hare;Галле;Хале;ჰალე;ハレ; +city::2912621;Hagen;Hagen;Khagen;ZEY;hagen;hageni;Хаген;ჰაგენი;ハーゲン; +city::2913366;Guetersloh;GUT;Giterslokh;Giuterslas;Gjuterslo;Guetersloh;Gutersloh;Gütersloh;gwiteoseullo;gwtrzlwh;ju te si luo;kux the xrslo;kwtrslwh;Гитерслох;Гютерсло;كوترسلوه;گوترزلوه;กือเทอร์สโล;居特斯洛;귀터슬로; +city::2913761;Gummersbach;Gumersbakh;Gummersbach;Gummersbakh;ZEW;ghwmrsbakh;gu mei er si ba he;gwmrzbakh;Гумерсбах;Гуммерсбах;غومرسباخ;گومرزباخ;古梅尔斯巴赫; +city::2917540;Grevenbroich;Grefenbrojkh;Grevenbroich;Grevenbroichas;Grevenbroikh;Grevenbrokh;ZEV;ge lei wen bu luo yi xi;ghrfnbrwysh;grfnbrwysh;gurevu~enburoho;Гревенброих;Гревенброх;Грефенбройх;غرفنبرويش;گرفنبرویش;グレーヴェンブローホ;格雷文布羅伊希; +city::2917788;Greifswald;Gorad Grajfsval'd;Grajfsval'd;Grajfsvald;Greifsvaldas;Greifsvalde;Greifswald;Griefswald;Griepswohld;Gripiew Las;ZGW;ge lai fu si wa er de;geulaipeuseubalteu;ghrayfsfalt;graipsvaldi;grayfswald;guraifusuvu~aruto;Горад Грайфсвальд;Грайфсвалд;Грайфсвальд;Грајфсвалд;גרייפסוואלד;غرايفسفالت;گرایفسوالد;گریفزوالڈ;გრაიფსვალდი;グライフスヴァルト;格赖夫斯瓦尔德;그라이프스발트; +city::2918632;Goettingen;Choettingen;Chöttingen;G'otingen;Getingen;Getingenas;Getingene;Getynga;Gjottingen;Goettingen;Gorad Gjotyngen;Gotinga;Gottinga;Gottingen;Göttingen;Nketin'nken;ZEU;gatingen;ge ting gen;gettingen;ghwtynghn;goeting-gen;gtyngn;gwtyngn;gyotingana;keiththing ngein;Γκέτινγκεν;Гетинген;Горад Гётынген;Гьотинген;Гёттинген;Ґетінґен;Գյոթինգեն;גטינגן;غوتينغن;گوتینگن;گوٹنگن;ग्यॉटिंगन;ಗಾಟಿಂಗೆನ್;เกิททิงเงิน;გეტინგენი;ゲッティンゲン;哥廷根;괴팅겐; +city::2918987;Goerlitz;G'orlic;Gerlic;Gerlica;Giorlicas;Gjorlic;Goerlitz;Gorad Gjorlic;Gorlicium Germaniae;Gorlitz;Görlitz;Nkerlits;Zgorjelc;Zgórjelc;Zhorelec;Zhorjelc;Zhořelec;ge er li ci;gerlitsi;gerurittsu;ghwrlyts;goeleullicheu;grlytz;grlyz;Γκέρλιτς;Герлиц;Герліц;Горад Гёрліц;Гьорлиц;Гёрлиц;Гөрлиц;גרליץ;غورليتس;گرلیتز;گورلٹز;გერლიცი;ゲルリッツ;格尔利茨;괴를리츠; +city::2919054;Goeppingen;G'opingen;Gepingen;Geppingen;Gjoppingen;Goeppingen;Göppingen;ZES;ge ping gen;geppingen;ghwbynghn;gwpyngn;Гепинген;Геппінген;Гьопинген;Гёппинген;غوبينغن;گوپینگن;ゲッピンゲン;格平根; +city::2920236;Gladbeck;Gladbeck;Gladbek;Gladbeki;Gladbėki;Gorad Gladbek;ZEK;ge la de bei ke;geullateubekeu;ghladbyk;gladbk;Гладбек;Горад Гладбек;غلادبيك;گلادبک;格拉德貝克;글라트베크; +city::2920512;Giessen;Gieseni;Giessa;Giessen;Gießen;Gisen;Gissen;Gorad Gisen;Gysenas;Nkisen;ghysn;gisen;giseni;gysn;ji sen;kis sein;Γκίσεν;Гисен;Гиссен;Горад Гісен;Гіссен;גיסן;غيسن;گیسن;กีสเซิน;გისენი;ギーセン;吉森;기센; +city::2921232;Gera;Gera;Gerapolis;Gorad Gera;Gėra;ZGA;ge la;gela;gera;gra;gyra;Гера;Горад Гера;گرا;گیرا;ゲーラ;格拉;게라; +city::2921466;Gelsenkirchen;Gel'zenkirkhen;Gelsenkiaerken;Gelsenkirchen;Gelsenkiärken;Gelzenkirchenas;Gelzenkirhene;Gelzenkirheni;Gelzenkirkhen;Gorad Gel'zenkirkhen;Helzenkirxen;Nkelzen'kirchen;ZEJ;gai er sen ji xing;geljenkileuhen;gelsanakarsana;geruzenkiruhyen;ghylsnkyrshn;glsnkrchn;glznkyrshn;glznqyrkn;kel sen kheiyr khein;Γκελζενκίρχεν;Гелзенкирхен;Гельзенкирхен;Гельзенкірхен;Горад Гельзенкірхен;גלזנקירכן;غيلسنكيرشن;گلزنکیرشن;گلسنکرچن;गेल्सनकर्शन;เกลเซนเคียร์เคิน;გელზენკირხენი;ゲルゼンキルヒェン;盖尔森基兴;겔젠키르헨; +city::2922586;Garbsen;Altgarbsen;Garbsen;Garbzen;Gerbernessen [a. 1286];Olengarbsen;ZEH;garbzn;jia bu sen;Гарбзен;Гарбсен;گاربزن;加布森; +city::2923544;Furth;Firt;Fiurtas;Fjurt;Fuerth;Fürth;Gorad Fjurt;fei er te;fu~yuruto;fwrt;pwileuteu;Горад Фюрт;Фирт;Фюрт;פיורדא;فرتھ;فورت;ფიურტი;フュルト;菲尔特;퓌르트; +city::2923822;Fulda;Foulnta;Ful'da;Fulda;Gorad Ful'da;ZEE;fu er da;furuda;fwlda;pulda;pwldh;Φούλντα;Горад Фульда;Фулда;Фульда;פולדה;فولدا;フルダ;富尔达;풀다; +city::2924585;Friedrichshafen;FDH;Fridrikhsgafen;Fridrikhskhafen;Fridrixshafen;Friedrichshafen;Gorad Frydrykhsgafen;fei te lie gang;frydryshshafn;furidorihisuhafen;peulideulihiseuhapen;phridariksahaphena;pridrikhshapeni;Горад Фрыдрыхсгафен;Фридрихсхафен;Фрідріхсгафен;Ֆրիդրիխսհաֆեն;פרידריכסהאפן;فريدريشسهافن;فریدریشسهافن;फ्रीडरिक्सहाफेन;ფრიდრიხსჰაფენი;フリードリヒスハーフェン;腓特烈港;프리드리히스하펜; +city::2925177;Freiburg;Frajburg;Freiburg;Freiburg im Breisgau;Fribourg-en-Brisgau;Friburg de Brisgovia;Friburg de Brisgòvia;Friburgo de Brisgovia;Friburgo in Brisgovia;Fryburg Bryzgowijski;Phraimpournk;fraybwrg;fraybwrgh;fu lai bao;furaiburuku;Φράιμπουργκ;Фрайбург;Фрајбург;فرايبورغ;فرایبورگ;フライブルク;弗莱堡; +city::2925533;Frankfurt am Main;FRA;Francfort;Francfort - Frankfurt am Main;Francfort d'o Meno;Francfort del Meno;Francfort sul Main;Francfort-sur-le-Main;Francfòrt sul Main;Francoforte;Francoforte sul Meno;Francofurtum ad Moenum;Francuforti supro Menu;Francuforti suprô Menu;Frankford-on-Main;Frankfort;Frankfort an'n Main;Frankfort an’n Main;Frankfort on the Main;Frankfurt;Frankfurt am Main;Frankfurt del Main;Frankfurt na Majn;Frankfurt na Majni;Frankfurt nad Menem;Frankfurt nad Mohanem;Frankfurt nad Mohanom;Frankfurt-na-Majne;Frankfurt/Main;Frankfurtas prie Maino;Frankfurte pie Mainas;Frankfurto ce Majno;Frankfurto ĉe Majno;Fráncfort;Fráncfort - Frankfurt am Main;Fráncfort d'o Meno;Fráncfort del Meno;Phran'kphourte;fa lan ke fu;frankfwrt;peulangkeupuleuteu;prnqpwrt;Φρανκφούρτη;Франкфурт на Майн;Франкфурт на Мајни;Франкфурт-на-Майне;פרנקפורט;فرانكفورت;فرانکفورت;แฟรงค์เฟิร์ต;ფრანკფურტ-ამ-მაინი;フランクフルト・アム・マイン;法兰克福;프랑크푸르트; +city::2925535;Frankfurt (Oder);Francfort;Francfort del Oder;Francfort del Odra;Francfort-sur-l'Oder;Francoforte sull'Oder;Frankfort an de Oder;Frankfort on the Oder;Frankfurt;Frankfurt (Oder);Frankfurt Oderi aeaeres;Frankfurt Oderi ääres;Frankfurt an der Oder;Frankfurt de l'Oder;Frankfurt len Oder;Frankfurt na Oder;Frankfurt na Odri;Frankfurt nad Odra;Frankfurt nad Odrą;Frankfurt pe Oder;Frankfurt-na-Odere;Frankfurt/Oder;Frankfurtas prie Oderio;Frankfurto ce Odro;Frankfurto ĉe Odro;Fráncfort;Fráncfort del Odra;Fráncfort del Óder;ZFR;furankufuruto;oderis prankʼpurtʼi;Франкфурт на Одер;Франкфурт-на-Одере;פרנקפורט על האודר;ოდერის ფრანკფურტი;フランクフルト; +city::2926271;Flensburg;FLF;Flensboarch;Flensborag;Flensborg;Flensbourg;Flensburg;Flensburga;Flensburgas;Flensburgh;Flensburgo;Flensbuurich;Flensmpournk;Flenzburg;Gorad Flensburg;flnsbwrg;flnsbwrgh;flnzbrg;fu lun si bao;furensuburuku;peullenseubuleukeu;phlensaburga;plnsbwrg;Φλένσμπουργκ;Горад Фленсбург;Флензбург;Фленсбург;פלנסבורג;فلنزبرگ;فلنسبورغ;فلنسبورگ;ফ্লেন্সবুর্গ;フレンスブルク;弗伦斯堡;플렌스부르크; +city::2928396;Euskirchen;Euskirchen;OEskerche;Ojskirkhen;ZED;ao yi si ji xing;aywskyrsh;Öskerche;Ойскирхен;Ојскирхен;ائوسکیرش;奧伊斯基興; +city::2928751;Esslingen;Ehslingen-am-Nekkar;Eslinga;Eslingen;Esslingen;Esslingen am Neckar;Eszlingen;Eszlingen am Neckar;ZEB;Еслинген;Эслинген-ам-Неккар; +city::2928810;Essen;Asnithi;Assindia;ESS;Ehssen;Esen;Esenas;Esene;Esse;Essen;Gorad Ehsehn;ai sen;aisana;asn;aysn;aysyn;ecan;esen;esena;eseni;essen;xes sein;Ésén;Έσσεν;Горад Эсэн;Есен;Ессен;Эссен;Էսսեն;אסן;إسن;اسن;ایسن;ایسین;एसेन;এসেন;ਐੱਸਨ;எசன்;เอสเซิน;ესენი;エッセン;埃森;에센; +city::2928963;Eschweiler;Aischwiele;Ascvilare;Ehshvajler;Eschweiler;Eshvajler;Esvayler;Esveilere;Esveileris;Esveilers;Eşvayler;Ešveilere;Ešveileris;Ešveilers;ZEA;ai shi wei lei;ashwaylr;ayshfaylr;eshuvu~aira;eshvaileri;esyubailleo;Ешвайлер;Ешвајлер;Эшвайлер;אשוויילר;إيشفايلر;اشوایلر;ეშვაილერი;エシュヴァイラー;埃施韦勒;에슈바일러; +city::2929567;Erlangen;Ehrlangen;Erlanga;Erlangen;Erlangenas;Erlangene;Erlanken;Gorad Ehrlangen;ZCZ;ai er lan gen;ai er lang gen;arlangn;arlnjn;arlynjn;earangen;eleullang-gen;Έρλαγκεν;Горад Эрланген;Ерланген;Эрланген;ארלנגן;ارلانگن;ارلنجن;ارلینجن;エアランゲン;埃尔朗根;埃爾蘭根;에를랑겐; +city::2929670;Erfurt;ERF;Ehrfurt;Erfesfurt [a. 1144];Erfordia;Erfurt;Erfurtas;Erfurte;Erfurti;Erfurto;Erpesforth [a. 1133];Erphesfurt [a. 742];Erphord [a. 1210];Erphourte;Erpisfurt;Erpsfordia [a. 1222];Erpsfurd [a. 1196];Gorad Ehrfurt;Jarobrod;ai er fu te;arfwrt;eafuruto;eleupuleuteu;eraphurta;Érfurt;Ερφούρτη;Горад Эрфурт;Ерфурт;Эрфурт;ארפורט;ערפורט;إرفورت;ارفرٹ;ارفورت;एरफुर्ट;แอร์ฟูร์ท;ერფურტი;エアフルト;埃尔福特;에르푸르트; +city::2929671;Erftstadt;Ehrftshtadt;Erftshtadt;Erftshtat;Erftstadt;ai er fu te shi ta te;arftshtat;Ерфтштадт;Ерфтштат;Эрфтштадт;إرفتشتات;ارفت‌اشتات;埃尔夫特施塔特; +city::2930596;Emden;Amuthon;EME;Ehmden;Emda;Emden;Gorad Ehmdehn;Oamde;ai mu deng;amdn;emden;emtan;emuden;Āmūthon;Горад Эмдэн;Емден;Эмден;אמדן;إمدن;امدن;எம்டன்;エムデン;埃姆登;엠덴; +city::2934246;Duesseldorf;DUS;Diseldorf;Diseldorfa;Disseldorf;Diuseldorfas;Djuseldorf;Djussel'dorf;Duesseldoerp;Duesseldorf;Duessldorf;Duseldorfo;Dusseldoerp;Dusseldorf;Dusseldorpium;Dusseldörp;Dyuseldorf;Dyzeldorfi;Dzjusel'dorf;Düsseldorf;Düsseldörp;Düssldorf;Ntiselntorph;Ntysselntorf;daseladorfa;de~yusserudorufu;diao su duo er fu;diuseldorpi;du sai er duo fu;dus se ld xrf;dwiseldoleupeu;dwsldwrf;dysldwrp;dyuseladorpha;tiyucaltorhpu;Ντίσελντορφ;Ντύσσελντορφ;Дзюсельдорф;Диселдорф;Дюселдорф;Дюссельдорф;Дүсселдорф;Դյուսելդորֆ;דיסלדורף;دوسلدورف;دوسلدۆرف;ڈسلڈورف;डसेलडॉर्फ़;ड्युसेलडॉर्फ;தியூசல்டோர்ஃபு;ഡൂസൽഡോർഫ്;ดึสเซลดอร์ฟ;ဒပ်ဆဲလ်ဒေါ့ဖ်မြို့;დიუსელდორფი;ዲውስልዶርፍ;デュッセルドルフ;杜塞尔多夫;調素多爾夫;뒤셀도르프; +city::2934486;Dueren;Diren;Djuren;Dueren;Duren;Düren;di lun;dwilen;Дирен;Дюрен;ዲውረን;迪伦;뒤렌; +city::2934691;Duisburg;DUI;Disburga;Duisboerj;Duisborg;Duisbourg;Duisburch;Duisburg;Duisburg and Hamborn;Duisburg-Hamborn;Duisburgas;Duisburgo;Duisbörj;Duizburg;Dujsburg;Duusboerg;Duusbörg;Duysburg;Dīsburga;Gorad Dujsburg;Ntouismpournk;Thuiscoburgum;de~yusuburuku;du sburk;du yi si bao;du'isaburga;duisburgi;dwiseubuleukeu;dwysbwrg;dwysbwrgh;dysbwrg;Ντούισμπουργκ;Горад Дуйсбург;Дуизбург;Дуйсбург;Дујсбург;Դույսբուրգ;דיסבורג;دويسبورغ;دویسبورگ;ڈوئسبرگ;ڈیسبورگ;डुइसबुर्ग;ดืสบูร์ก;დუისბურგი;ዱይስቡርግ፣ ጀርመን;デュースブルク;杜伊斯堡;뒤스부르크; +city::2935022;Dresden;DRS;Drazdany;Drazgany;Dresda;Dresde;Dresden;Dresdenas;Dresdeno;Dresdn;Drezda;Drezden;Drezdene;Drezno;Drjezdzany;Drježdźany;Drážďany;Drèsda;Drézdén;Drēzdene;Gorad Drehzdehn;de lei si dun;de rs dein;deuleseuden;doresuden;dresdena;drezdeni;drsdn;drysdn;drzdn;Δρέσδη;Горад Дрэздэн;Дрезден;Դրեզդեն;דרזדן;דרעזדן;درسدن;دريسدن;ڈریسڈن;ड्रेस्डेन;เดรสเดิน;დრეზდენი;ドレスデン;德累斯顿;드레스덴; +city::2935517;Dortmund;DTM;Dortmund;Dortmundas;Dortmunde;Dortmundi;Dueoerpm;Düörpm;Gorad Dortmund;Ntortmount;Throtmenni;Tremonia;d xr thmund;doleuteumunteu;dortamunda;dorutomunto;duo te meng de;dwrtmwnd;Ντόρτμουντ;Горад Дортмунд;Дортмунд;דורטמונד;دورتموند;دۆرتمۆند;ڈارٹمنڈ;डॉर्टमुंड;ดอร์ทมุนด์;დორტმუნდი;ドルトムント;多特蒙德;도르트문트; +city::2935530;Dorsten;Doessen;Dorsten;Dössen;ZCX;duo si teng;dwrstn;Дорстен;دورستن;多斯滕; +city::2935825;Dormagen;Dormagen;Dormaje;ZCW;duo er ma gen;dwrmaghn;dwrmagn;Дормаген;دورماغن;دورماگن;ዶርማገን;多爾馬根; +city::2936871;Dinslaken;Dinslaken;Dinslakena;Ntinslaken;ZCV;ding si la ken;dynslakn;dynzlakn;Ντίνσλακεν;Динслакен;Динслакена;Дінслакен;دينسلاكن;دینزلاکن;丁斯拉肯; +city::2937936;Detmold;Detmol'd;Detmold;Detmolda;Detmoldas;dai te mo er de;deteumolteu;deth mx ld;detomoruto;dtmwld;Детмолд;Детмольд;دتمولد;เดทมอลด์;デトモルト;代特莫尔德;데트몰트; +city::2937959;Dessau;Desau;Desava;Dessau;Dessau-Rosslau;Dessau-Roßlau;Dessavia;Ntesaou;de shao;desau;dessau;dsayw;dysaw;Ντεσάου;Десау;Дессау;דסאו;دسائو;ديساو;დესაუ;デッサウ;德绍;데사우; +city::2938323;Delmenhorst;Del'menkhorst;Delmenhorst;Delmenkhorst;Demost;Gorad Dehl'menkhorst;ZCT;dai er men huo si te;derumenhorusuto;dlmnhwrst;Горад Дэльменхорст;Делменхорст;Дельменхорст;دلمنهورست;デルメンホルスト;代尔门霍斯特; +city::2938913;Darmstadt;Darmshhat;Darmshtadi;Darmshtadt;Darmshtat;Darmstadium;Darmstadt;Darmstat;Darmstatas;Darmstate;Darmundestadt;Darmştat;Darmštatas;Darmštate;Gorad Darmshtat;Ntarmstat;ZCS;da mu shi ta te;daleumsyutateu;darmastata;darmshtat;darumushutatto;drmstdt;Ντάρμστατ;Горад Дармштат;Дармштадт;Дармштат;Дармщат;דרמשטדט;دارمشتات;ڈریمسٹڈ;डार्मश्टाट;დარმშტადტი;ダルムシュタット;达姆施塔特;다름슈타트; +city::2939658;Cuxhaven;Cux;Cuxhaven;Cuxhoben;Cuxhuuwen;FCN;Kuksgafen;Kukskhafen;Kukskhaven;ku ke si gang;kugseuhapen;kukkusuhafen;kwkshafn;kwkshawn;Куксгафен;Куксхавен;Куксхафен;Կուքսհաֆեն;كوكسهافن;کوکسهاون;ککسہیون;クックスハーフェン;库克斯港;쿡스하펜; +city::2939811;Cottbus;CBU;Chocebuz;Chociebuz;Chociebuż;Chosebuz;Chotebuz;Chotěbuz;Choćebuz;Chośebuz;Chóśebuz;Cotbusium;Cottbus;Kotbus;Kotbusa;Kotbusas;Kottbus;ke te bu si;khxthth bus;kosbuseu;kotobusu;ktbws;kwtbws;qwtbws;Котбус;קוטבוס;كوتبوس;کتبوس;کوٹبس;คอทท์บุส;კოტბუსი;コトブス;科特布斯;콧부스; +city::2940132;Chemnitz;Chemnicas;Chemnicium;Chemnitz;Gorad Khemnic;Hemnica;Kamenica;Kamjenica;Karl-Marx-Stadt;Kemnic;Kemnits;Khemnic;Saska Kamenice;Saská Kamenice;chymntz;kai mu ni ci;kemnicheu;kemunittsu;khe mniths;kmnytz;kymnts;qmnyz;Κέμνιτς;Горад Хемніц;Кемниц;Хемниц;Хемніц;קמניץ;קעמניץ;كيمنتس;چیمنتز;کمنیتز;เคมนิทซ์;კემნიცი;ケムニッツ;开姆尼茨;켐니츠; +city::2940213;Celle;Cele;Cella;Celle;Celle i Tyskland;Celė;Gorad Cehle;ZCN;ce lei;chelle;sel lex;slh;syly;tsu~ere;Горад Цэле;Целе;Целле;سله;سيلي;เซลเลอ;ツェレ;策勒;첼레; +city::2940231;Castrop-Rauxel;Castrop-Rauxel;Kastrop-Rauksel;Kastrop-Rauksel';Stadt Castrop-Rauxel;ZCM;ka si te luo pu-lao ke sai er;kastrwb rawksl;kastrwp-rawksl;khas thrx ph-rea seil;Кастроп-Рауксел;Кастроп-Рауксель;كاستروب راوكسل;کاستروپ-راوکسل;คัสทรอพ-เราเซิล;卡斯特罗普-劳克塞尔; +city::2944368;Bremerhaven;BRV;Bremergafen;Bremerhafenas;Bremerhafene;Bremerhaven;Bremerhoawen;Bremerhoben;Bremerhuuwen;Bremerkhafen;Brēmerhāfene;Brėmerhafenas;Wesermuende;Wesermünde;beulemeohapen;bremerhaveni;brmrhafn;bu lai mei ha fen;buremahafen;Бремергафен;Бремерхафен;Брэмэрһаффен;برمرهافن;بریمرہیون;ბრემერჰავენი;ブレーマーハーフェン;不来梅哈芬;브레머하펜; +city::2944388;Bremen;BRE;Brehmehn;Brema;Breme;Bremen;Bremen hiria;Bremenas;Bremene;Bremeni;Bremeno;Bremy;Brèma;Bréma;Brémy;Brémén;Brême;Brēmene;Brėmenas;Byen Bremen;Gorad Brehmen;ber mein;beulemen;bremena;bremeni;brmn;brymn;bu lai mei;buremen;mdynt brymn;Βρέμη;Бремен;Брэмэн;Горад Брэмен;Բրեմեն;ברמן;برمن;بريمن;مدينة بريمن;ब्रेमेन;เบรเมิน;ဘရီမန်မြို့;ბრემენი;ブレーメン;不来梅;브레멘;𐌱𐍂𐌴𐌼𐌴𐌽; +city::2945024;Braunschweig;BWE;Braounsvaich;Braunschweig;Braunshvajg;Braunshvejg;Braunshweyg;Braunshwéyg;Braunsveiga;Braunsveigas;Braunšveiga;Braunšveigas;Bronswiek;Brunsvicum;Brunsvik;Brunswick;Brunswik;Brunswyck;Brunswyk;Brunszwik;Brunšwik;Brúnsvík;Gorad Braunshvejg;beulaunsyubaikeu;bra'unasva'iga;branjavika;branshwyg;braunshvaigi;brawnshfaygh;brawnshwayg;bu lun rui ke;buraunshuvu~aiku;Μπράουνσβαϊχ;Брауншвайг;Брауншвајг;Брауншвейг;Горад Браўншвейг;בראונשווייג;برانشویگ;براونشفايغ;براونشوایگ;ब्रंजविक;ब्राउनश्वाइग;ბრაუნშვაიგი;ブラウンシュヴァイク;不伦瑞克;브라운슈바이크; +city::2945358;Brandenburg an der Havel;Brandebourg-sur-la-Havel;Brandeburgas;Brandeburgo sulla Havel;Brandenburg;Brandenburg na Khafelu;Brandenburg un der Havel;Brandenburg-na-Khafele;Brandenburg-na-Khafeli;Brandenburgas;Brandenburgum;Brannenborg an de Havel;Ciudad de Brandeburgo;beulandenbuleukeuandeeohapel;brandenburgi;brndnbwrg;brndnbwrg an dr hawl;ha fu er he pan bo lan deng bao;Бранденбург;Бранденбург на Хафелу;Бранденбург-на-Хафеле;Бранденбург-на-Хафелі;ברנדנבורג;برانڈنبرگ آن ڈیر ہاول;برندنبورگ آن در هاول;ბრანდენბურგი;ブランデンブルク・アン・デア・ハーフェル;哈弗尔河畔勃兰登堡;브란덴부르크안데어하펠; +city::2945756;Bottrop;Botrop;Botropas;Bottrop;ZCJ;bo te luo pu;boteulopeu;botoroppu;bttrwp;Ботроп;Боттроп;بتتروپ;بوٹروپ;ბოტროპი;ボトロップ;博特罗普;보트로프; +city::2946447;Bonn;BNJ;Bon;Bona;Boni;Bonn;Bonna;Gorad Bon;Vonni;bn;bo en;bon;bona;boni;bwn;bxnn;Βόννη;Бон;Бонн;Горад Бон;באן;בון;بن;بون;बॉन;บอนน์;བྷོ་ཨིན།;ბონი;ボン;波恩;본; +city::2947416;Bochum;Baukem;Bochoum;Bochum;Bochumas;Bohuma;Bokhem;Bokhum;Bōkhêm;Gorad Bokhum;QBO;bo hong;bo khum;bofumu;bohum;bokhuma;bokhumi;bwkhm;bwkhwm;bwkwm;Μπόχουμ;Бохум;Горад Бохум;בוכום;بوخم;بوخوم;बोखुम;โบคุม;ბოხუმი;ボーフム;波鸿;보훔; +city::2947421;Bocholt;Bocholt;Bokelt;Bokhol't;Bokholt;Bōkholt;ZCI;bo huo er te;bwshwlt alman;Бохолт;Бохольт;بوشولت، آلمان;博霍爾特; +city::2949186;Bielefeld;BFE;Bielefeld;Bilefel'd;Bilefeld;Bilefelde;Bilifeld;Bilivelda;Builefeld;Bylefeldas;Bīlefelde;Bīlifeld;Gorad Bilefel'd;Mpilephelnt;bi lei fei er de;bilephelda;bilepildi;billepelteu;bireferuto;bylyfyld;Μπίλεφελντ;Билефелд;Билефельд;Білефельд;Горад Білефельд;بيليفيلد;بیلفیلڈ;بیله‌فلد;बीलेफेल्ड;ბილეფილდი;ビーレフェルト;比勒费尔德;빌레펠트; +city::2950159;Berlin;BER;Beirlin;Beirlín;Berleno;Berlien;Berliin;Berliini;Berlijn;Berlim;Berlin;Berline;Berlini;Berlino;Berlyn;Berlynas;Berlëno;Berlín;Berlîn;Berlīne;Berolino;Berolinum;Birlinu;Bèrlîn;Estat de Berlin;Estat de Berlín;bai lin;barlina;beleullin;berlini;berurin;bexrlin;brlyn;perlin;Βερολίνο;Берлин;Берлін;Бэрлін;Բերլին;בערלין;ברלין;برلين;برلین;بېرلىن;ܒܪܠܝܢ;बर्लिन;বার্লিন;பெர்லின்;เบอร์ลิน;ბერლინი;ベルリン;柏林;베를린; +city::2950344;Bergkamen;Bergkamen;Berkamen;Biaergkoamen;Biärgkoamen;ZCH;bei ge ka men;brghkamn;brgkamn;Бергкамен;Беркамен;برغكامن;برگکامن;贝格卡门; +city::2950349;Bergisch Gladbach;Bergisch Gladbach;Bergish Gladbakh;Jlaebbisch;Jläbbisch;ZCG;Бергиш Гладбах; +city::2950438;Bergheim;Bergem;Bergheim an der Erft;Бергем; +city::2951825;Bayreuth;BYU;Bairoit;Bajrojt;Baruthum;Bayreith;Bayreuth;Gorad Bajrojt;bai luo yi te;bailoiteu;bairoito;bayrwyt;byyrwyt;Μπαϊρόιτ;Байройт;Бајројт;Горад Байройт;ביירוית;بايرويت;بایرویت;ضلع بیرتھ;バイロイト;拜罗伊特;바이로이트; +city::2952984;Bamberg;Bambarg;Bamberg;Bamberga;Bambergas;Bamberk;Bampernk;Gorad Bamberg;ZCD;ba mu bei ge;bambeleukeu;bambergi;bambrg;bambrgh;ban bao;banberuku;bmbrg;Μπάμπεργκ;Бамберг;Горад Бамберг;במברג;بامبرغ;بامبرگ;บัมแบร์ก;ბამბერგი;バンベルク;巴姆贝格;班堡;밤베르크; +city::2953358;Bad Salzuflen;Bad Zalcuflen;Bad-Zal'cuflen;ba te sa er ci wu fu lun;bad zaltswfln;Бад Залцуфлен;Бад-Зальцуфлен;باد زالتسوفلن;バート・ザルツウフレン;巴特萨尔茨乌夫伦; +city::2953436;Bad Homburg vor der Hoehe;Bad Homburg;Bad Homburg v.d. Hoehe;Bad Homburg v.d. Höhe;Bad Homburg vor der Hoehe;Bad Homburg vor der Höhe;Bad Khomburg;Bad-Gomburg;Bad-Khomburg;Bant Chompournk;Gorad Bad-Khomburg;Homburg vor der Hohe;Homburg vor der Höhe;ba te hong bao;bad h xm bur kf xrde xr hex xex;bad hwmbwrg fwr dr hwhh;bateuhombuleukeupo-eodeeohoee;Μπαντ Χόμπουργκ;Бад Хомбург;Бад-Гомбург;Бад-Хомбург;Горад Бад-Хомбург;באד הומבורג;باد هومبورگ فور در هوهه;บัดฮอมบูร์กฟอร์เดอร์เฮอเออ;巴特洪堡;바트홈부르크포어데어회에; +city::2953504;Baden-Baden;Aquae Aureliae;Baden;Baden-Baden;Badenas-Badenas;Badenbadene;Banten-Banten;Bādenbādene;FKB;Gorad Badehn-Badehn;b+b;ba deng-ba deng;baden=baden;badenbaden;badn badn;badn-badn;Μπάντεν-Μπάντεν;Баден-Баден;Горад Бадэн-Бадэн;Բադեն-Բադեն;באדן-באדן;بادن بادن;بادن-بادن;バーデン=バーデン;巴登-巴登;바덴바덴; +city::2954172;Augsburg;AGY;Agsborg;Aounksmpournk;Augsberg;Augsboerj;Augsborg;Augsbourg;Augsburg;Augsburga;Augsburgas;Augsburgo;Augsbörj;Augschburg;Augusta;Augusta Vindelicorum;Augzburg;Auqsburq;Gorad Augsburg;a'ugsaburga;agzbrg;ao ge si bao;aucupurku;augsburga;augsburgi;augusuburuku;aukeuseubuleukeu;aukusuburuku;awghsbwrgh;awgsbwrg;xea k sburk;Ágsborg;Άουγκσμπουργκ;Аугзбург;Аугсбург;Горад Аўгсбург;אאוגסבורג;آوغسبورغ;آوگسبورگ;اگزبرگ;आउग्सबुर्ग;औग्स्बुर्ग;আউগ্‌সবুর্গ;ஔசுபூர்கு;เอาก์สบูร์ก;აუგსბურგი;アウクスブルク;アウグスブルク;奥格斯堡;아우크스부르크; +city::2955272;Aschaffenburg;A-Burg;Asafenburga;Asafenmpournk;Aschaffenbourg;Aschaffenburg;Aschaffenburgum;Ashafenburg;Ashaffenburg;Auscheffenburg;Ašafenburga;Gorad Ashafenburg;ZCB;a sha fen bao;ashaffenburuku;ashafnbwrg;ashafnbwrgh;asshyfnbrg;asyapenbuleukeu;Ασάφενμπουργκ;Ашафенбург;Ашаффенбург;Горад Ашафенбург;آشافنبورگ;أشافنبورغ;اسشیفنبرگ;アシャッフェンブルク;阿沙芬堡;아샤펜부르크; +city::2955471;Arnsberg;Arensperg;Arnsberg;Arnsberga;Arnsbergas;Arnsberge;Gorad Arnsberg;a en si bei ge;arnsbrg;arnsbrgh;Арнсберг;Арнсберге;Горад Арнсберг;آرنسبرغ;آرنسبرگ;阿恩斯貝格; +city::2959223;Ahlen;Ahlen;Alen;Alenas;Alene;Alna;Alnon;Aulen;a lun;ahln;allen;aren;Ālene;Ālna;Ālnon;Ален;اهلن;اہلن;アーレン;阿伦;알렌; +city::2959927;Aalen;Aalen;Ala;Alen;Alenas;Alene;a lun;aaleni;allen;aln;alyn;aren;Ālene;Άαλεν;Аален;Ален;آلن;آلین;აალენი;アーレン;阿倫;알렌; +city::3247449;Aachen;AAH;Aachen;Aakhen;Aaxen;Achen;Achenas;Ahene;Aix-la-Chapelle;Aken;Akhen;Akisgran;Akwizgran;Aoke;Aquae Grani;Aquisgra;Aquisgran;Aquisgrana;Aquisgrano;Aquisgranum;Aquisgrà;Aquisgrán;Axhe;Axin;Axın;Cachy;Cáchy;Kreisfreie Stadt Aachen;Lungsod ng Aachen;Oche;Oochen;a chen;aakheni;achn;ahen;ahkan;akhana;akhn;xa khein;ya chen;Åxhe;Āhene;Άαχεν;Аахен;Ахен;Աախեն;אאכן;آخن;آچن;आखन;ஆஃகன்;ആക്കൻ;อาเคิน;აახენი;アーヘン;亚琛;阿臣;아헨; +city::223817;Djibouti;Byen Djibouti;Cibuti;Dinas Jibwti;Diobuiti;Diobúití;Djiboeti;Djibouti;Djibouti Chhi;Djibouti Chhī;Djibuti;Dschibuti;Dzhibuti;Dzibuti;Dzibutis;Dzjibuty;Dzjibûty;Dzsibuti;Dżibuti;Džibuti;Džibutis;Džíbútí;Gibuti;Gibuto;Gibutum;Gorad Dzhybuci;Ilu Djibouti;JIB;Jabuuti;Jiboti;Jibouti;Jibuti;Lungsod ng Djibouti;Mbanza ya Djibuti;Sita Jibouti;Syudad han Djibouti;Tzimpouti;Xibuti;Xibutí;Yibuti;Zhibuti shaary;ci buti;ciputti;dzsybwty;gybwty;jbwty;jbwty ʿlaqہ;ji bu de shi;ji bu ti cheng;jibuchi shi;jibuti;jybwty;jybwwty;Ìlú Djibouti;Ĝibuto;Τζιμπουτί;Џибути;Горад Джыбуці;Джибути;Джибуті;Жибути шаары;Ҷибути;Ջիբութի;גיבוטי;דזשיבוטי;جبوتی;جبوتی علاقہ;جيبوتي;جیبوتی;جیبووتی;जिबूती;জিবুতি;ਜਿਬੂਤੀ;சீபூத்தீ;จิบูตี;ཇི་བའོ་ཊི།;ჯიბუტი;ジブチ市;吉布地市;吉布提城;지부티; +city::2610613;Vejle;Vaile;Vailė;Vajle;Vejle;baille;vaile;vu~aire;wa ai lei;waylh;wile;Вайле;Вајле;Вејле;وایله;ไวเล;ვაილე;ヴァイレ;瓦埃勒;바일레; +city::2615006;Randers;Randers;Randersa;Randersas;Raners;Ranners;Ranters;ZIR;lan ne si;laneleuseu;ra nex s;ranasu;randrs;ranersi;Ράντερς;Рандерс;Ранерс;Раннерс;راندرس;رانڈرز;ราเนอส์;რანერსი;ラナース;蘭訥斯;라네르스; +city::2615876;Odense;Gorad Odehnseh;ODE;Odensa;Odense;Odensė;Odinsve;Ontense;Othania;adnsh;awdnsh;odense;odinse;ou deng sai;xo den se;Óðinsvé;Όντενσε;Горад Одэнсэ;Оденсе;Օդենսե;אודנזה;أودنسه;ادنسه;اودنسے;اوڈینس;ओडिन्से;โอเดนเซ;ოდენსე;オーデンセ;欧登塞;오덴세; +city::2618425;Copenhagen;CPH;Cobanhavan;Copenaga;Copenaghen;Copenaguen;Copenhaga;Copenhagen;Copenhague;Copenhaguen;Copenhaguen - Kobenhavn;Copenhaguen - København;Cóbanhávan;Hafnia;Kapehngagen;Kaupmannahoefn;Kaupmannahöfn;Keypmannahavn;Kjobenhavn;Kjopenhamn;Kjøpenhamn;Kobenhamman;Kobenhaven;Kobenhavn;Kodan;Kodaň;Koebenhavn;Koeoepenhamina;Koepenhamn;Kopenage;Kopenchage;Kopengagen;Kopenhaagen;Kopenhag;Kopenhaga;Kopenhage;Kopenhagen;Kopenhagena;Kopenhago;Kopenhāgena;Kopenkhagen;Koppenhaga;Koppenhága;Kòpenhaga;Köbenhavn;Köpenhamn;Kööpenhamina;København;Københámman;ge ben ha gen;khopenheken;kopanahagana;kopenahagena;kopenahegena;kopenhagen;kwbnhaghn;kwpnhgn;qwpnhgn;Κοπεγχάγη;Капэнгаген;Копенгаген;Копенхаген;Կոպենհագեն;קופנהאגן;קופנהגן;كوبنهاغن;كوپېنھاگېن;ܟܘܦܢܗܓܢ;कोपनहागन;কোপেনহাগেন;কোপেনহেগেন;โคเปนเฮเกน;ཀའོ་པེན་ཧ་ཀེན;კოპენჰაგენი;ኮፐንሀገን;ኮፕንሀግ;コペンハーゲン;哥本哈根;코펜하겐; +city::2618528;Kolding;Gorad Kol'dyng;Kol'ding;Kolding;Koldinga;Koldingas;Koldingo;Kolling;ZBT;ke ling;khxleng;kolling;koringu;kwldngh;kwldyng;Горад Кольдынг;Колдинг;Коллинг;Кольдинг;كولدنغ;کولدینگ;کولڈنگ;คอเลง;კოლინგი;コリング;科靈;콜링; +city::2619771;Horsens;Horsens;Horsensas;Khorsens;h xr sens;holeusenseu;horsensi;hosensu;huo er sen si;hwrsyns;hwrzns;Хорсенс;هورزنس;هورسينس;ہارسنز;ฮอร์เซนส์;ჰორსენსი;ホーセンス;霍尔森斯;호르센스; +city::2621942;Frederiksberg;Frederiksberg;Frederiksberg Kommune;Frederiksbergin kunta;Frenteriksmpernk;fei te lie si bei;frydryksbrgh;peuledeligseubeleu;prederikʼsbergi;Φρέντερικσμπεργκ;Фредериксберг;Фредеріксберг;فريدريكسبرغ;فریڈرکسبرگ;ფრედერიკსბერგი;腓特烈斯贝;프레데릭스베르; +city::2622447;Esbjerg;EBJ;Ehsb'erg;Esber;Esberg;Esbjaerg;Esbjerg;Esbjerga;Esbjergas;Esbjærg;Esbyerq;ai si bi yue;asbjrg;asbyrg;aysbyrgh;esbieri;eseubieleu;esubyau;xe sbiyer;Есбер;Есбєрг;Есбјерг;Эсбьерг;אסביירג;إيسبيرغ;اسبجرگ;اسبیرگ;เอสบีเยร์;ესბიერი;エスビャウ;埃斯比约;에스비에르; +city::2624652;Arhus;Aarhus;Aarhusium;Archous;Arhus;Arhuzo;Arosar;Orhusa;Orhūsa;Orkhus;ao hu si;ofusu;Árósar;Århus;Άρχους;Орхус;אורהוס;オーフス;奥胡斯; +city::2624886;Aalborg;AAL;Aalborg;Alaborg;Alborg;Almpornk;Gorad Ol'barg;Ol'borg;Olbor;Olborg;Olborga;Olborgas;albrg;albw;albwrg;albwrgh;ao er bao;olboleu;olborgi;orubo;xx lb xr;Álaborg;Ålborg;Άλμποργκ;Горад Ольбарг;Олбор;Олборг;Ольборг;Օլբորգ;אולבורג;آلبرگ;آلبو;آلبورغ;آلبورگ;ออลบอร์;ოლბორგი;オールボー;奥尔堡;올보르; +city::3492908;Santo Domingo;Ciudad Trujillo;SDQ;Saint Domingue;Santo Domingo;Santo Domingo City;Santo Domingo de Guzman;Santo Domingo de Guzmán;Santo Ntomin'nko;Santo-Domingo;santodoming-go;Σάντο Ντομίνγκο;Санто-Доминго;산토도밍고; +city::3492914;Santiago de los Caballeros;STI;Sant'jago-de-los-Kabal'eros;Sant'jago-de-los-Trejnta-Kabal'eros;Santiago;Santiago de los Caballeros;Santiago de los Kampagieros;Santjago de los Kabaljerosas;santiagodeloseukabayeloseu;sheng de ya ge;Σαντιάγο δε λος Καμπαγιέρος;Сантьяго-де-лос-Кабальерос;Сантьяго-де-лос-Трейнта-Кабальерос;Сантьяго-де-лос-Трейнта-Кабальєрос;סנטיאגו דה לוס קביירוס;سانتیاغو دے لوس کابائیروس;サンティアゴ・デ・ロス・カバリェロス;聖地牙哥;산티아고데로스카바예로스; +city::3492985;Santa Cruz de Barahona;BRX;Barahona;Santa Cruz de Barahona;Santa-Krus-de-Baraona;Санта-Крус-де-Бараона; +city::3493032;San Pedro de Macoris;San Pedro Macoris;San Pedro de Macoris;San Pedro de Macorís; +city::3493081;San Juan de la Maguana;SJM;San Juan;San Juan de la Maguana; +city::3493146;San Francisco de Macoris;San Francisco de Macoris;San Francisco de Macorís; +city::3493175;Puerto Plata;POP;Port Plata;Puerto Plata;San Antonio de Guerra;San Felipe de Puerto Plata;San-Felipe-de-Puehrto-Plata;San-Felipe-de-Puerto-Plata;Vilojati Puehrto Plata;pueleutopeullata;pwrtw plata;sheng fei li-yin gang;Вилояти Пуэрто Плата;Сан-Фелипе-де-Пуэрто-Плата;Сан-Феліпе-де-Пуерто-Плата;פוארטו פלטה;پورتو پلاتا;プエルト・プラタ;聖斐利-銀港;푸에르토플라타; +city::3493240;Salvaleon de Higueey;Higueey;Higuey;Higüey;Salvaleon de Higueey;Salvaleón de Higüey; +city::3494242;Punta Cana;PUJ;Punta Cana;Punta Kana;Punta-Kana;Пунта Кана;Пунта-Кана; +city::3496331;Moca;Moca; +city::3500957;La Romana;LRM;La Romana;La-Romana;Romana;lalomana;lh rwmnh;luo ma na;Ла-Романа;לה רומנה;لا رومانا، جمہوریہ ڈومینیکن;ラ・ロマーナ;羅馬納;라로마나; +city::3509382;Concepcion de La Vega;Concepcion de La Vega;Concepcion de la Vega;Concepción de La Vega;Concepción de la Vega;Konsep'sion de La Vega;Konseps'jon-de-la-Vega;Konsepsion-de-la-Vega;La Vega;la wei jia;la wygha;labega;qwnspsywn dh lh wgh;Κονσεπσιόν δε Λα Βέγα;Консепсион-де-ла-Вега;Консепсьйон-де-ла-Вега;קונספסיון דה לה וגה;لا ویغا;コンセプシオン・デ・ラ・ベガ;拉維加;라베가; +city::3511233;Bonao;Banao;Bonao;Monsenor Nouel;Monseñor Nouel;Бонао; +city::3511540;San Cristobal;Benemerita de San Cristobal;Benemérita de San Cristóbal;San Cristobal;San Cristóbal; +city::3512067;Bani;Ban;Bani;Banti;Bany;Baní;Бан; +city::3512128;Bajos de Haina;Bajos de Haina;Bajos de Jaina; +city::3512208;Azua;Asua-de-Kompostela;Azua;Azua de Compostela;Compostela de Azua;Асуа-де-Компостела; +city::7874116;Santo Domingo Oeste;; +city::8601412;Santo Domingo Este;Santo Domingo Este; +city::2474141;Boumerdas;Bou-Merdes;Boumerdas;Bumerdes;Cite de Boumerdes;Cité de Boumerdes;Le Rocher Noir;Roche Noire;Rocher Noir;Бумердес; +city::2475612;Tolga;Tolga;Толга; +city::2475687;Tlemcen;Gorad Tlemsen;Pomaria;TLM;Termicen;Termicén;Tilimsan;Tilimsen;Tlemcen;Tlemsen;Tlemsenas;Tremecen;Tremecén;Wilaya ya Tlemcen;te lai mu sen;teullemsen;tlem sen;tlmsan;toremusen;Горад Тлемсен;Тлемсен;Тлемсен қаласы;תלמסאן;تلمسان;ตเลมเซน;トレムセン;特莱姆森;틀렘센; +city::2475744;Tizi Ouzou;QZI;Tizi Ouzou;Tizi Uzu;Tizi Wuzu;Tizi-Ouzou;Tizi-Uzu;ti ji wu zu;tijiuju;tyzy wzw;Тизи Узу;Тизи-Узу;تيزي وزو;تیزی وزو;提济乌祖;티지우주; +city::2475860;Tissemsilt;Tissemsil;Tissemsilt;Vialar;tsmsylt;تسمسيلت; +city::2476897;Tiaret;TID;Tiaret;Tiaretas;Tijarat;ti ya lei te;tyart;Тиарет;Тіарет;تيارت;تیارت;提亚雷特; +city::2477255;Telerghma;Telerghma;Telergma; +city::2477461;Tebessa;TEE;Tebesa;Tebessa;Theveste;Tibissa;Tébessa;tai bei sa;tbsh aljzayr;tbst;Тебесса;Тебесса қаласы;تبسة;تبسه، الجزایر;تیبازہ;泰贝萨; +city::2478216;Tamanrasset;Fort Laperine;Fort Laperrine;TMR;Tamahrasset;Tamanghasset;Tamanraset;Tamanrasetas;Tamanrasset;Tamanrassete;Tamenghasset;Tamenɣest;ta man la sai te;tamanlaseteu;tamanrasetto;tamnrast;tmnrast;Таманрасет;Таманрассет;Таманрассете;תאמאנראסט;تامنراست;تمنراست;タマンラセット;塔曼拉塞特;타만라세트; +city::2479161;Sour el Ghozlane;Aumale;Aumale-d'Algerie;Aumale-d’Algérie;Aumate;Sour el Ghozlane; +city::2479215;Souk Ahras;QSK;Souk Ahras;Souk-Ahras;Soukaras;Souq Ahras;Suk Ahras;Suk Ahrasas;Suk Aras;Suk-Akhras;Suq Ahras;Szuk Ahrasz;Szúk Ahrász;Tagaste;su ge ai he la si;sukeualaseu;swq ahras;swq ahras aljzayr;Сук-Ахрас;سوق أهراس;سوق اهراس، الجزایر;سوق اہراس;苏格艾赫拉斯;수크아라스; +city::2479247;Sougueur;Nadhora;Nador;Sougueur;Trezel;Trézel; +city::2479536;Skikda;Gorad Skikda;Philippeville;Phillippville;SKI;Skikda;Sukajkida;seukigda;si ji ke da;skikada;skykdt;Горад Скікда;Скикда;Скикда қаласы;Скікда;سكيكدة;سکیکدہ;ولاية سعيدة;স্কিকদা;斯基克达;스킥다; +city::2479609;Sig;QIL;Saint-Denis-du-Sig;Sig; +city::2479966;Sidi Moussa;Sidi Moussa; +city::2480368;Sidi Khaled;Sidi Khaled;Sidi Kraled; +city::2481007;Sidi Bel Abbes;BFW;Gorad Sidy-Bel'-Abes;Sid Bel Abbes;Sid Bel Abbès;Sidi Bel Abbes;Sidi Bel Abbès;Sidi Bel Abes;Sidi Belabbas;Sidi Belɛebbas;Sidi Bilabbas;Sidi Bu-l-Abbas;Sidi bel Abbes;Sidi bel Abbès;Sidi bel Abesas;Sidi-Bal-Abbes;Sidi-Bal-Abbès;Sidi-Bel'-Abbes;Sidi-Bel-Abbes;Sidi-Bel-Abbès;Sidi-bel-Abbes;Sidi-bel-Abbès;sidibel-abeseu;xi di bei lei a ba si;Горад Сіды-Бель-Абес;Сиди Бел Абес;Сиди-Бель-Аббес;Сиди-Бель-Аббес қаласы;Сіді-Бель-Аббес;סידי בל-עבאס;سيدي بلعباس;سیدی بلعباس;سیدی بلعباس، الجزایر;ولاية سيدي بلعباس;西迪贝勒阿巴斯;시디벨아베스; +city::2481246;Sidi Aissa;Sid Aissa;Sid Aïssa;Sidi Aissa;Sidi Aïssa;Sidi-Aissa;Сиди-Аисса; +city::2481700;Setif;Gorad Setyf;QSF;Sathif;Satif;Setif;Setifas;Sitifis;Stif;Sétif;sai ti fu;setifu;setipeu;stf;styf;styp;wlayt styf;Горад Сетыф;Сетиф;Сетиф қаласы;Сетіф;סטיף;سطف;سطيف;ولاية سطيف;Ṣṭif;セティフ;塞提夫;세티프; +city::2482090;Sedrata;Sedrata; +city::2482572;Saida;Sa'ida;Saida;Sajda;Saïda;Sa’ida;sai yi da;saida;Саида;Сайда;Саїда;سعيدة;سعیده، الجزایر;سعیدہ، الجزائر;サイダ;塞伊达;사이다; +city::2482886;Rouissat;Rouissat; +city::2483649;Remchi;Montagnac;Remchi; +city::2483668;Relizane;Ighil Izane;Prowincja Relizane;QZN;Relizan;Relizane;ghlyzan;wlayt ghlyzan;غلیزان;ولاية غليزان; +city::2483746;Reguiba;Reguiba;alrqybt;الرقيبة; +city::2483757;Reghaia;La Reghaia;La Reghaïa;La Reghia-Alma;Reghaia;Reghaïa; +city::2483936;Ras el Oued;Ras el Oued;Ras-ehl'-Uehd;Rass el Oued;Râs el Oued;Tocqueville;Рас-эль-Уэд; +city::2484620;Oum el Bouaghi;Canrobert;Oum el Bouaghi;Oum-el-Bouachi;QMH; +city::2485582;Oued Rhiou;Inkermann;Oued Rhiou;Oued Riou;QOU; +city::2485801;Ouargla;OGX;Ouargla;Quargla;Uargla;Warkala;Warqla;ualeugeulla;wa er ge la;war kla;warugura;wrqlh aljzayr;wrqlt;Уаргла;Уаргла қаласы;ورقلة;ورقله، الجزایر;ورقلہ;วาร์กลา;ワルグラ;瓦尔格拉;우아르글라; +city::2485926;Oran;Gorad Aran;ORN;Ora;Oran;Orana;Oranas;Orano;Orà;Orán;Orã;Orāna;Ouahran;Wahran;Wahrān;Waradinne;Wehran;olang;oran;orana;orani;vahirana;wa he lan;whran;whran aljzayr;wlayt whran;xx ran;Οράν;Горад Аран;Оран;Оран қаласы;אוראן;ولاية وهران;وهران;وهران، الجزایر;وہران;وەھران;ওরান;ਵਹਿਰਾਨ;ออราน;ორანი;オラン;瓦赫蘭;오랑; +city::2486690;M'Sila;M'Sila;MSila;M’Sila;ZZS;almsylt;المسيلة; +city::2487134;Mostaganem;MQV;Mastaganeam;Mostaganem;Mostaganemas;Mustaghanam;Mustaghanim;Mustɣanem;mostaghanemi;mstaghanm;mstghanm;mu si ta jia nai mu;Мостаганем;مستاغانم;مستغانم;მოსთაღანემი;穆斯塔加奈姆; +city::2487452;Mila;Mila;milla;mylt;Мила;ميلة;میلہ، الجزائر;밀라; +city::2487620;Metlili Chaamba;Metlili;Metlili Chaamba;Metlili-les Chaamba;Mettlili Chaamba; +city::2487772;Messaad;Messaad;Messad;Мессад; +city::2488722;Meftah;Meftah;Meftakh;Rivet;Мефтах; +city::2488835;Medea;Al-Madijja;Lambdia;Lemdiyyet;Medea;Medeah;Medeja;Medėja;Médéa;almdyh aljzayr;almdyt;mai di ya;medea;Медеа;Медея;المدية;المدیه، الجزایر;مدیہ;麦迪亚;메데아; +city::2490098;Mascara;MUW;Mascara;Maskara;Mu'askar;Muaskar;Mu’askar;maseukala;maskara;masukara;mu a si kai er;mʿskr‎;Маскара;معسكر;معسكر‎;معسکر، الجزائر;মাস্কারা;マスカラ;穆阿斯凯尔;마스카라; +city::2490183;Mansoura;Mansoura;Mansourah;Mansoûra;Mansura;Мансура; +city::2491050;Larbaa;Arba;El-Arba;L'Arba;Larba;Larbaa;Larbaâ;L’Arba;ZZL;Ларба; +city::2491134;Lakhdaria;Lakhdaria;Palestro; +city::2491191;Laghouat;Al-Aghwat;LOO;Laghouat;Laguat;Laguatas;Larhouat;aghwat;ai ge wa te;alaghwat;alaghwat aljzayr;Лагуат;לאגוואט;اغواط;الأغواط;الاغواط، الجزایر;艾格瓦特; +city::2491323;Ksar el Boukhari;Boghari;Borhari;Ksar el Boukhari; +city::2491335;Ksar Chellala;Chellala;Chellala-Reibell;Ksar Chellala;Reibel;Reibell;Reïbell;Shelala; +city::2491889;Khenchela;Khenchela;Krenchela;QKJ;khnshlt;خنشلة; +city::2491911;Khemis Miliana;Affreville;El Khemis;El Khemis Miliana;Khemis Miliana;ZZK; +city::2492913;Jijel;Djedjelli;Djidjelli;Dzhidzhel';Dzidzelis;Dzidzili;Dżidżili;Džidželis;GJL;Giger;Gíger;Igilgili;Jijelli;ji jie lei;jijeru;jyjl;jyjl aljzayr;Джиджель;جيجل;جیجل;جیجل، الجزایر;ジジェル;吉杰勒; +city::2494029;Hassi Messaoud;HME;Hassi Messaoud;Khasi Mesaud;Khassi-Messaud;ha xi mai sa wu de;hasimesaudeu;Хаси Месауд;Хасси-Мессауд;حاسي مسعود;哈西迈萨乌德;하시메사우드; +city::2494610;Hamma Bouziane;Hamma;Hamma Bouniane;Hamma Bouziane;Hamma-Plaisance;Le Hamma;Le Hamma-Plaisance; +city::2495662;Guelma;Calama;Galma;Gel'ma;Gelma;Guelma;Kalima;QGE;gai lei ma;qalmh aljzayr;qalmt;Гельма;قالمة;قالمه، الجزایر;قالمہ;盖勒马; +city::2496049;Ghardaia;GHA;Gardaja;Gardaya;Ghardaia;Ghardaja;Ghardaïa;Ghardája;Jimbo ya Ghardaia;Jimbo ya Ghardaïa;Rhardaia;Rhardaïa;Tagerdayt;Taγerdayt;gai er da ye;galeudaia;garudaia;ghrdayh;ghrdayt;wlayt ghrdayt;Гардая;Гардая қаласы;غرداية;غردایه;ولاية غرداية;ガルダイア;盖尔达耶;가르다이아; +city::2496232;Frenda;Frenda; +city::2497060;Es Senia;Es Senia;La Senia;La Sénia; +city::2497411;El Oued;Al-Wadi;ELU;Ehl'-Uehd;El Oued;El Qued;Oued Souf;Uedas;alwady;wa de;wady;wady swf;Эль-Уэд;Эль-Уэд қаласы;אל-ואד;الوادي;اﻟﻮادى;وادي سوف;وادی;瓦德; +city::2497849;El Khroub;El Khroub;El-Kroub;Kroubs;Le Khroub;Le Kroub; +city::2498392;El Eulma;El Eulma;Saint-Arnaud;ZAE; +city::2498543;El Bayadh;EBH;El Bayadh;El-Bayadh;Geryville;Géryville;Prowincja El Bayadh;Wilaya de El Bayadh;alblydh;wlayt albyd;البلیده;ولاية البيض; +city::2498611;Chlef;CFK;Castellum Tingitanum;Chlef;Ech Cheliff;Ech Chlef;El Asnam;Orleansville;Orléansville;Selifas;Shlef;Szalif;alshlf;shlf;shurefu;xie li fu;Šelifas;Шлеф;الشلف;شلف;シュレフ;谢利夫; +city::2498766;El Achir;El Achir; +city::2498954;Ech Chettia;Ech Chetia;Ech Chettia;Ech Chettiâ;Ech Chétia; +city::2499055;Drean;Drean;Mondovi; +city::2500017;Djelfa;Djelfa;Dzilfa;Dżilfa;Jelfa;QDJ;jlfh;wlayt aljlft;جلفه;ولاية الجلفة; +city::2500282;Djamaa;Djama;Djamaa;Djemaa;Djemâa;جامعة; +city::2500904;Dar Chioukh;Dar Chioukh;Diar el Chioukh; +city::2501152;Constantine;CZL;Cirta;Constantine; +city::2501404;Cheria;Cheria; +city::2501541;Chelghoum el Aid;Chateaudun;Chateaudun de Rhumel;Chateaudun-du Rummel;Chateaudun-du-Rhumel;Chateaudun-du-Rhummel;Chelghoum el Aid;Chelghoum el Aïd;Châteaudun;Châteaudun de Rhumel;Châteaudun-du Rummel;Châteaudun-du-Rhumel;Châteaudun-du-Rhummel;Ghelghoum Elaid;Ghelghoum Elaïd;Ghelgoum Elaid;Ghelgoum Elaïd; +city::2502958;Bouira;Bouira;Bouïra;QBZ; +city::2503147;Bougara;Bougara;Bouguera;Bouguerra;Rovigo; +city::2503181;Boufarik;Boufarik;QFD; +city::2503661;Bordj el Kiffan;Bordj El Kifan;Bordj el Kiffan;Fort de l'Eau;Fort de l’Eau; +city::2503701;Bordj Bou Arreridj;Bordj Bou Arerridj;Bordj Bou Arreridj;Bordj-Bou-Arreridj;Borj Bu Arrerij;Burdz Bu Urajridz;Burdż Bu Urajridż;QBJ;brj bwʿryryj;برج بوعريريج; +city::2503755;Boghni;Boghari;Boghni;Borhni; +city::2503769;Blida;Al-Bulajda;Bilda;Blida;Buleyde;Dilida;El Bouleida;Gorad Blida;QLD;alblydh;alblydt;b li da;beullida;bo li da;burida;Блида;Бліда;Горад Бліда;البليدة;البلیده;بلیدہ;บลีดา;ブリダ;卜利达;블리다; +city::2503826;Biskra;BSK;Biskira;Biskra;Briskra;Tibeskert;bi si ke la;bisakra;biseukeula;bisukura;bskrh;bskrt;wlayt bskrt;Бискра;Біскра;بسكرة;بسکره;بسکرہ;ولاية بسكرة;বিসক্রা;ビスクラ;比斯克拉;비스크라; +city::2503847;Birkhadem;Birkadem;Birkhadem; +city::2503852;Birine;Birin;Birine; +city::2503874;Bir el Djir;Arcole;Bir el Djir; +city::2503878;Bir el Ater;Bir el Ater; +city::2504072;Besbes;Besbes;Randon; +city::2504099;Berrouaghia;Berrouaghia;Berrouarhia; +city::2504622;Beni Mered;Beni Mered; +city::2505329;Bejaia;BJA;Bedzaja;Bejaia;Bejaïa;Bijaya;Bougie;Bugia;Bugía;Béjaïa;bjayt;Беџаја;بجاية; +city::2505530;Bechar;Basyar;Baszszar;Bechar;Besaras;Beshar;Beshare;Bexar;Bešaras;Béchar;CBH;Colomb-Bechar;Colomb-Béchar;Wilaya de Beshar;bei sha er;besharu;besyaleu;bshar;bshar aljzayr;Бешар;Бешаре;بشار;بشار، الجزایر;ベシャール;贝沙尔;베샤르; +city::2505572;Batna;BLJ;Batina;Batna;Batna City;Batnah;Gorad Batna;Tbatent;Wilaya de Batna;ba te na;bateuna;batnh aljzayr;batnt;batona;wlayt batnt;Батна;Батна қаласы;Горад Батна;باتنة;باتنه، الجزایر;باتنہ;باتنہ، الجزائر;ولاية باتنة;バトナ;巴特纳;바트나; +city::2505629;Barika;Barika;ZZB;Барика; +city::2505653;Baraki;Baraki; +city::2505854;Bab Ezzouar;Bab Ezzouar;Le Retour de la Chasse; +city::2505915;Azzaba;Azzaba;Jemmapes; +city::2506999;Annaba;AAE;Anaba;Annaba;Annaba - syaht;Annaba - سياحة;Annába;Bona;Bone;Bône;Hippo;Hippo Regius;Unknown;an na ba;an'naba;annaba;Анаба;Аннаба;Аннаба қаласы;Աննաբա;عنابة;عنابه;عنابہ;আন্নাবা;アンナバ;安纳巴;안나바; +city::2507480;Algiers;ALG;Al Jazair;Al-jezair;Alcher;Alge;Algeirsborg;Alger;Algeri;Algero;Algier;Algiers;Algir;Alg·èr;Algê;Algír;Alje;Aljer;Aljir;Alse;Alxer;Alzer;Alzhir;Alzhir khot;Alzhir shaary;Alziir;Alzir;Alzira;Alzirs;Alzyras;Alĝero;Alžiir;Alžir;Alžyras;Alžír;Alžěr;Alžīra;Alžīrs;Argel;Argier;Argièr;Arhel;Arjel;Arxel;Caesair;Cathair na hAilgeire;Cathair na hAilgéire;Cezayir;Cäsair;Gorad Alzhyr;Icosium;Jazoir;Zzayer;a er ji er;ala-jaza'ira;alajiyarsa;alje;alji'ersa;aljiyars;aljiyarsa;aljyrz;aljzayr;aljzyrh;alzhiri;aruje;jەzayyr;yaljyr;Əlcəzair;ʼlgyr;Αλγέρι;Алжир;Алжир хот;Алжир шаары;Алҷазоир;Горад Алжыр;Ալժիր;אלגיר;אלזשירס;ئالجىر;الجزائر;الجزائر شہر;الجزيره;الجزیره;الجیرز;جەزائیر;ܓܙܐܐܪ;अल्जीएर्स;अल्जीयर्स;আলজিয়ার্স;ਅਲ-ਜਜ਼ਾਇਰ;அல்ஜியர்ஸ்;അൾജിയേഴ്സ്;แอลเจียร์;ཨཱལ་ཇི་ཡར་སི།;အယ်လဂျီးယားမြို့;ალჟირი;አልጀርስ;アルジェ;阿爾及爾;알제; +city::2507646;Akbou;Akbou;Aqbu;Metz;aqbw;أقبو; +city::2507877;Ain Touta;Ain Touta;Aïn Touta;Mac Mahon; +city::2507901;Ain Temouchent;Aebura;Ain Temonchent;Ain Temoucheni;Ain Temouchent;Ain Temushent;Aine Temouchent;Albulae;Aïn Temouchent;Aïn Témoucheni;Aïne Temouchent; +city::2507943;Ain Sefra;Ain Sefra;Aine Sefra;Aïn Sefra;Aïne Sefra; +city::2507972;Ain Oussera;Ain Oussera;Aïn Oussera;El Oussera;Paul Cazelles; +city::2508102;Ain Fakroun;Ain Fakroun;Aine Fakroun;Aïn Fakroun;Aïne Fakroun; +city::2508228;Ain Defla;Ain Defla;Aïn Defla;Duperre;Duperré;ʿyn aldfly‎;عين الدفلى‎; +city::2508287;Ain Beida;Ain Beida;Aine Beida;Aïn Beïda;Aïne Beïda;QBP; +city::2508737;Aflou;Aflou;Aflu; +city::3650472;Tulcan;Gorad Tul'kan;TUA;Tul'kan;Tulcan;Tulchan;Tulcán;Tulkan;Tulkanas;to~urukan;tu er kan;tulkan;twlkan;Горад Тулькан;Тулькан;تولکان;トゥルカン;圖爾坎;툴칸; +city::3651297;Santo Domingo de los Colorados;Santo Domingo;Santo Domingo de los Colorados;Santo-Domingo-de-los-Kolorados;Санто-Доминго-де-лос-Колорадос; +city::3652350;Riobamba;Riobamba;Rispampa;li ao ban ba;liobamba;ri xoba m ba;riobamba;rywbamba;rywbmbh;Риобамба;Ріобамба;ריובמבה;ريوبامبا;ریؤبامبا;ریوبامبا;รีโอบัมบา;რიობამბა;里奧班巴;리오밤바; +city::3652462;Quito;Gorad Kita;Kitas;Kito;Kitu;Kuito;Quito;Quitu;Quitum;San Francisco de Quito;UIO;ji duo;ki to;kito;kitto;kvirrea;kvito;kwytw;kytw;qytw;Κίτο;Горад Кіта;Кито;Кіто;Կիտո;קיטא;קיטו;كىتو;كيتو;کوئتو;کیتو;کیٹو;क्वितो;क्वीटो;ਕੀਤੋ;கித்தோ;ക്വിറ്റോ;กีโต;ཁེ་ཐོ།;კიტო;ኪቶ;キト;基多;키토; +city::3652567;Quevedo;Kevedas;Kevedo;Quevedo;ke wei duo;Кеведо;კევედო;克韋多; +city::3652941;Portoviejo;Gorad Partauekha;PVO;Portov'ekho;Portoviejo;Portovjechas;bo tuo wei ye huo;poleutobieho;pwrtw wyyjw;pwrtwbykhw;Горад Партаўеха;Портовьехо;پورتو ویئجو;پورتوبیخو;პორტოვიეხო;波托維耶霍;포르토비에호; +city::3654215;Milagro;Milagras;Milagro;San Francisco de Milagro;mi la ge luo;milagro;მილაგრო;米拉格羅; +city::3654410;Manta;Gorad Manta;MEC;Manta;Manta Ecuador;Puerto de Manta;man ta;manta;Горад Манта;Манта;მანტა;曼塔;만타; +city::3654533;Machala;Gorad Machala;MCH;Macala;Machala;Maĉala;Mačala;ma cha la;machala;machalla;machara;matshala;mchala;Горад Мачала;Мачала;מצאלה;ماتشالا;ماچالا;مچالا;მაჩალა;マチャラ;馬查拉;마찰라; +city::3654667;Loja;LOH;Locha;Loha;Loja;Lokha;loha;lokha;luo ha;lwja;Лоха;لوجا;لوخا، ایکواڈور;ლოხა;洛哈;로하; +city::3654870;Latacunga;Gorad Latakunga;LTX;Latacunga;Latakunga;Latakunka;la ta kun jia;latakung-ga;latakwnga;latakwnga akwadwr;Горад Латакунга;Латакунга;لاتاکونگا;لاتاکونگا، اکوادور;拉塔昆加;라타쿵가; +city::3655131;La Libertad;La Libertad; +city::3655673;Ibarra;Ibarra;Ибарра; +city::3657509;Guayaquil;GYE;Gorad Guajakil';Gouagiakil;Guaiaquil;Guaiaquilum;Guajakil;Guajakil';Guayaquil;Gvajakil;Gvajakila;Gvajakilis;Santiago de Guayaquil;Wayakil;ghwayakyl;gu'a'i'akila;gua ya ji er;guayakiru;gvayakila;gwayakil;gwayakl;gwayakwyl;gwayakywl;kwa yaki l;Γουαγιακίλ;Гвајакил;Горад Гуаякіль;Гуаякил;Гуаякиль;Ґуаякіль;גואיאקיל;غواياكيل;گوآیاکوئل;گوایاکل;گوایاکیول;ग्वायाकिल;ਗੁਆਇਆਕੀਲ;กวายากิล;გუაიაკილი;グアヤキル;瓜亞基爾;과야킬; +city::3657990;Esmeraldas;ESM;Esmeraldas;Volcan Chimborazo;Volcán Chimborazo; +city::3658192;Eloy Alfaro;Alfaro;Duran;Durán;Eloy Alfaro; +city::3658666;Cuenca;CUE;Cuenca;Gorad Kuehnka;Kuehnka;Kuehnka shaary;Kuehnkae;Kuenka;Santa Ana de los cuatro rios de Cuenca;Santa Ana de los cuatro ríos de Cuenca;Tumipampa;ke wng ka;kuengka;kuenka;kun ka;kwanka;kwynka;Горад Куэнка;Куенка;Куэнкæ;Куэнка;Куэнка шаары;Կուենկա;קואנקה;کوئنکا;کوئنکا، ایکواڈور;کوانکا;เกวงกา;კუენკა;クエンカ;昆卡;쿠엥카; +city::3660418;Babahoyo;Babahojas;Babahoya;Babahoyo;ba ba ao yue;babaoyo;babawyw;باباویو;باباہویو;巴巴奧約;바바오요; +city::3660689;Ambato;ATF;Ambata;Ambatas;Ambato;Ampatu llaqta;San Juan de Ambato;ambato;ambatw;ambatw akwadwr;an ba tuo;anbato;Амбата;Амбато;Ամբատո;آمباتو، اکوادور;أمباتو;امباتو;امباتو، ایکواڈور;ამბატო;アンバート;安巴托;암바토; +city::588335;Tartu;Derpt;Dorpat;TAY;Tarbatum;Tartto;Tartu;Terbata;Tērbata;Yur'yev;Yurev;taleutu;taruto~u;trtw;Тарту;טרטו;ტარტუ;タルトゥ;타르투; +city::588409;Tallinn;Castrum Danorum;Gorad Talin;Kallinn;Kolyvan;Lindanaes;Lindanäs;Raeaeveli;Reval;Revel;Revel';Rääveli;TLL;Taillinn;Talin;Talinas;Talini;Talino;Talins;Tallidn;Tallin;Tallin osh;Tallina;Tallinn;Tallinna;Talín;Tàllin;ta lin;talin;talina;tallin;tallina;tallyn;talyn;tarin;thallin n;Ταλίν;Ταλιν;Ταλλίν;Горад Талін;Талин;Таллин;Таллин ош;Таллинн;Таллінн;Տալլին;טאלין;تاللىن;تالين;تالین;تاڵین;ٹالن;तालिन;ताल्लिन;তাল্লিন;ਤਾਲਿਨ;தாலின்;ടാലിൻ;ทาลลินน์;ཏཱལ་་ལིན།;ტალინი;ታሊን;タリン;塔林;탈린; +city::590031;Narva;Gorad Narva;Naarva;Narv;Narva;Narva osh;Narvae;Narve;Narwa;Nаrvа;na er wa;naleuba;nar wa;narfa;naruvu~a;narva;narwa;nrbh;Νάρβα;Горад Нарва;Наарва;Нарвæ;Нарва;Нарва ош;Нарве;Նառվա;נרבה;نارفا;ناروا;นาร์วา;ნარვა;ナルヴァ;纳尔瓦;나르바; +city::346030;Zifta;Zifta;Ziftá;zfty;Зифта;زفتى; +city::347236;Toukh;Toukh;Tukh;Tukh al Malaq;Tukh el-Malaq;Tûkh;Tûkh el-Malaq;twkh;Ţūkh;Ţūkh al Malaq;Тух;طوخ; +city::347497;Tanda;Tanda;Tanta;Tantā;tnta;tnth;Ţanţā;Танта;טנטא;טנטה;طنطا;Ṭanṭa;Ṭanṭā; +city::347591;Talkha;Talha;Talkha;tlkha;Ţalkhā;طلخا;Ṭalkha;Ṭalkhā; +city::347612;Tala;Tala;Tale;Talla;Talā;Тале; +city::347634;Tahta;Tahta;Takhta;Ţahţā;Тахта; +city::347796;Sohag;HMB;Sauhadz;Sauhadż;Sawhaj;Sawhāj;Sevhac;Sogag;Sohag;Sohagas;Sokhag;Souhag;Suhag;Suhaj;Suwhaj;sohageu;suhagi;suo ha jie;swhaj;Согаґ;Сохаг;سوهاج;სუჰაგი;索哈傑;소하그; +city::349114;Shirbin;Sharbin;Sharbīn;Sherbin;Shirbin;Shirbîn;Shirbīn;shrbyn;شربين; +city::349156;Shibin al Qanatir;Shabin al Qanatir;Shabir al-Kanatir;Shabīn al Qanātir;Shibin al Qanatir;Shibin el-Qanatir;Shibîn el-Qanâṭir;Shibīn al Qanāţir;shbyn alqnatr;شبين القناطر; +city::349158;Shibin al Kawm;Shabin al-Kum;Shebin al-Kom;Shibin al Kawm;Shibin el-Kom;Shibîn el-Kôm;Shibīn al Kawm;shbyn alkwm;شبين الكوم; +city::349715;Samannud;Samannud;Samannûd;Samannūd;Samnud;Samnūd;Sebennytos;smnwd;سمنود; +city::349717;Samalut;Samalut;Samālūţ; +city::350203;Rosetta;Ar-Rasid;Ar-Rašíd;Bolbitine;Er-Rashid;Rachid;Rashid;Rashîd;Rashīd;Rasid;Rasido;Raŝido;Rašid;Resid;Reşid;Roseta;Rosetta;Rosette;Rozeta;lojeta;luo sai ta;rashidi;rozetta;rshyd;rsyd;Ροζέτα;Рашид;Розета;רשיד;رشيد;رشید;რაშიდი;ロゼッタ;羅塞塔;로제타; +city::350422;Kousa;Apollinopolis Parva;Apollonopolis Parva;Kousa;Qus;Qūş;qws;قوص; +city::350550;Qina;Caene;Kena;Keneh;Qana;Qanā;Qena;Qina;Qinā;astan qna;qna;استان قنا;قنا; +city::350789;Qalyub;Kal'jub;Kalyub;Kalyûb;Qaliub;Qalyub;Qalyūb;qlywb;Кальюб;قليوب; +city::352344;Minyat an Nasr;MINYAT AN-NASR;MINYAT AN-NAṢR;Minyat an Nasr;Minyat an Naşr;Minyet el-Nasr;Minyet el-Naṣr;mnyt alnsr;منية النصر; +city::352354;Munuf;MINUF;MINŪF;Manuf;Manūf;Menouf;Menoufis;Menuf;Munuf;Munūf;mnwf;منوف; +city::352733;Mersa Matruh;MUH;Madara;Marsa Matruh;Marsa-Matrukh;Marsá Maţrūḩ;Matruh;Maţrūḩ;Mersa Matrouh;Mersa Matruh;Mhadara;Paraetonium;mrsy mtrwh;Марса-Матрух;مرسى مطروح; +city::352913;Manfalut;Manfalut;Manfalūţ;Monfalut;mnflwt;منفلوط; +city::352951;Mallawi;Mallauri;Mallavi;Mallawi;Mallawī;Маллави; +city::353802;Kawm Umbu;Kawm Ombo;Kawm Umbu;Kawm Umbū;Kom Ombo;Kom Ombo - kwm ambw;Kom Ombo - كوم أمبو;Kum Ombu;Kôm Ombo;Omboi;Ombos;kom-ombo;Ком-Омбо;コム・オンボ; +city::354365;Kafr az Zayyat;Kafr az Zayat;Kafr az Zayyat;Kafr az Zayyāt;Kafr az Zayāt;Kafr el-Zaiyat;Kafr el-Zaiyât;Kafr el-Zayat;Kafr ez Zaiyat;Kafraz Zayyt;kfr alzyat;كفر الزيات; +city::354502;Kafr ash Shaykh;Kafr al-Sheikh;Kafr ash Shaykh;Kafr el-Sheikh;Kafr-Sheikh;kfr alshykh;كفر الشيخ; +city::354775;Kafr ad Dawwar;Kafr ad Dawwar;Kafr ad Dawwār;Kafr al-Dawar;Kafr ed-Dauwar;Kafr ed-Dauwâr;Kafr el Dawdar;Kafr el-Dauwar;Kafr el-Dauwâr;kfr aldwar;كفر الدوار; +city::355026;Jirja;Girga;Jirja;Jirjā; +city::355449;Isna;Asna;Asnā;Ehsna;Esna;Esneh;Isna;Isnā;Latonpolis;Latopolia;Latopolis;Latónpolis;asna;Эсна;איסנא;אסנא;إسنا; +city::355628;Idku;Edkou;Idku;Idkū;adkw;Идку;إدكو; +city::355635;Idfu;Apollinopolis Magna;Apollonopolis Magna;Edfou;Edfu;Edfú;Ehdfu;Idfu;Idfu Bahari;Idfu Bahri;Idfu Baḥari;Idfū;Idfū Baḩri;adfw;edofu;Едфу;Эдфу;إدفو;エドフ; +city::355648;Ibshaway;Ibshawai;Ibshaway;Ibshawāy; +city::355795;Halwan;Halwan;Helouan;Helouan-les-Bains;Helwan;Helwan Les Bains;Hilwan;Hulwan;Hélouan-les-Bains;Kheluan;hlwan;Хелуан;حلوان;Ḥelwân;Ḩalwān;Ḩulwān; +city::356000;Hawsh `Isa;Haush `Isa;Haush ‘Isá;Hawsh `Isa;Hosh `Isa;Ḥôsh ‘Îsa;Ḩawsh ‘Īsá; +city::356806;Fuwwah;Fawwah;Fouah;Fowa;Fuwa;Fuwah;Fuwwah;fwt;فوة; +city::356933;Farshut;Farshut;Farshuut;Farshūţ; +city::356945;Faraskur;Faraskur;Faraskûr;Fariskur;Fâriskûr;Fāraskūr;Fāriskūr;farskwr;فارسكور; +city::356989;Faqus;Fakous;Fakus;Faqus;Fāqūs;faqws;فاقوس; +city::358048;Damietta;Damiata;Damieta;Damieti;Damietta;Damiette;Damijeta;Dimyat;Dimyath;Dimyāṭ;Doemjat;Dumiat;Dumjat;Dumjata;Dumjatas;Dumját;Dumjāta;Dumqat;Dumujat;Dumyat;Dumyâṭ;Dumyāţ;QDX;Tamiathis;da meiy t ta;dami'ata;damieta;dimuyato;dmyat;du mu ya te;Δαμιέτη;Дамиета;Дамијета;Думъят;Думят;Դամիետա;דמיאט;دمياط;دمیاط;ਦਮੀਆਤ;ดาเมียตตา;დუმიატი;ディムヤート;杜姆亚特;다미에타; +city::358095;Diyarb Najm;Diarb Negm;Diyarb Najm;Diyarb Nigm;Diyarb Nijm;dyrb njm;ديرب نجم; +city::358108;Disuq;Dasuq;Dasūq;Dessouk;Disuk;Disuq;Disūq;dswq;Дисук;دسوق; +city::358115;Dishna;Dashna;Dashnā;Dechna;Deshna;Dishna;Dishnā; +city::358172;Dikirnis;DIKIRNIS;Dekernes;Dikinis;Dikirnis;dkrns;Дикирнис;دكرنس; +city::358269;Dayrut;Dairut;Dairut el Mahatta;Dairût;Dairût el Maḥaṭṭa;Dayrut;Dayrut al Mahattah;Dayrūţ;Dayrūţ al Maḩaţţah;Deirout;Deirut; +city::358448;Damanhur;Bandar Damanhur;Bandar Damanhūr;Damanhour;Damanhur;Damanhûr;Damanhūr;Damankhur;Hermopolis Parva;Hermupolis Parva;dmnhwr;Даманхур;دمنهور; +city::358600;Bush;; +city::358619;Port Said;Bor Sa`id;Bor Sa‘īd;Bur Sa`id;Bursaid;Būr Sa‘īd;Madinat Bur Sa`id;Madinet Port Said;Madînat Būr Sa‘īd;Madînet Port Said;PORTSAINT;PSD;Port Said;Port Saidas;Port Saíd;Port-Said;Port-Saïd;Porto Said;Puerto Said;Puerto Saíd;sai de gang;ΠΟΡΤΣΑΪΝΤ;Порт-Саид;פורט סעיד;بور سعيد;بورسعيد;塞德港; +city::358821;Bilqas;Balqas;Balqās;Bilqas;Bilqas Qism Auwal;Bilqas Qism Awwal;Bilqâs;Bilqâs Qism Auwal;Bilqās;Bilqās Qism Awwal;blqas;بلقاس; +city::358840;Bilbays;Belbeis;Bilbays;Bilbeis;Bilbes;Bilbês;blbys;بلبيس; +city::358970;Basyun;Basyun;Basyûn;Basyūn; +city::359173;Bani Suwayf;Bani Suwayf;Banī Suwayf;Beni Souef;Beni Sue;Beni Suef;Beni Suweif;bny swyf;بني سويف; +city::359212;Bani Mazar;Bani Mazar;Banī Mazār;Beni Mazar;Beni Mazâr; +city::359280;Banha;Athribis;Bandar Banha;Bandar Banhā;Banha;Banhā;Bankha;Benha;Benna;bnha;Банха;بنها; +city::359493;Zagazig;Az Zaqaziq;Az Zaqāzīq;Ehz-Zakazik;Ez Zaqaziq;Ez Zaqāzīq;QZZ;Zagazig;Zaqaziq;Zaqazîq;alzqazyq;jagajigeu;zai jia ji ge;Эз-Заказик;الزقازيق;宰加济格;자가지그; +city::359576;Awsim;Ausim;Ausîm;Awsim;Awsīm;Letopolis;Letous Polis;Usiim;awsym;أوسيم; +city::359710;At Tall al Kabir;At Tall al Kabir;At Tall al Kabīr;At Tell al Kebir;At Tell al Kebīr;El-Tell el-Kebir;El-Tell el-Kebîr;Et Tell el Kebir;Et Tell el Kebīr;Tel el Kebir;Tell el- Kebir;Tell el- Kebîr;altl alkbyr;التل الكبير; +city::359783;Asyut;ATZ;As'jut;Assiout;Assiut;Assuit;Asyut;Asyūţ;Licopolis;Likupulis;Lycopolis;Līkūpūlīs;Siut;asywt;Асьют;أسيوط; +city::359792;Aswan;ASW;Assouan;Assuan;Assuao;Assuão;Asszuan;Asszuán;Asuan;Asuanas;Asuano;Asuán;Asvan;Aswan;Aswán;Aswân;Aswān;Es-Suan;Eswan;Gorad Asuan;Syena;Syene;Syeue;a si wang;aseuwan;asuani;asuwan;asvana;aswan;Ασσουάν;Асуан;Горад Асуан;אסואן;أسوان;اسوان;आस्वान;ასუანი;アスワン;阿斯旺;아스완; +city::359796;Suez;Al Qulzum;As Suways;Clysma;El Seweis;El Suweis;El-Qulzum;Es Suweis;Klysma;Souez;Suais;Suec;Suecas;Suehc;Suehckij;Sues;Suesia;Suess;Sueveys;Suez;Suezi;Suezo;Suvajs;Suèz;Suës;Szuez;Súes;Süveyş;alswys;su yi shi;su'ejha;suejeu;suetsi;suezu;swys;swyyz;swyz;Σουέζ;Сувайс;Суец;Суэц;Суэцкий;Սուեզ;סואץ;السويس;سوئز;سوئیز;سويس;सुएझ;სუეცი;スエズ;苏伊士;蘇伊士;수에즈; +city::360048;Ashmun;ASHMUN;ASHMŪN;Ashmun;Ashmūn;ashmwn;أشمون; +city::360502;Luxor;Al Uqsur;El Aqsur;El Kusur;El Qusur;El Uqsor;El-Aksur;El-Uksur;Gorad Luksor;LXR;Louksor;Louxor;Loxor;Loxòr;Lucsar;Luksor;Luksor shaary;Luksora;Luksoras;Luksoro;Luqsor;Luxor;Luxor- alaqsr;Luxor- الأقصر;Lúxor;al-ukcur;alaqsr;aqsr;lak sxr;lakasara;laksara;le shu;lksr;lugsoleu;luksora;luksori;lwqswr;rukusoru;Λούξορ;Горад Луксор;Луксор;Луксор шаары;Լուքսոր;לוקסור;اقصر;الأقصر;الاقصر;لکسر;लक्सर;लुक्सोर;ਲਕਸਰ;அல்-உக்சுர்;ลักซอร์;ლუქსორი;ルクソール;樂蜀;룩소르; +city::360526;Al Qusiyah;Al Qusiyah;Al Qūşīyah;Cusae;El Qusiya;El Qūsīya; +city::360542;Al Qurayn;Al Qurayn;Al Qurayn wa Tawahin al Haysamiyah;Al Qurayn wa Ţawāḩīn al Ḩayşamīyah;Al'-Ehl'-Kurajn;El Qurein and Tawahin el Heisamiya;El Qurein and Tawaḥîn el Heiṣamîya;El-Qurein;El-Qurein wa Tawahir;El-Qurein wa Ṭawâḥîr;alqryn;Аль-Эль-Курайн;القرين; +city::360615;Al Qanatir al Khayriyah;Al Qanatir al Khayriyah;Al Qanāţir al Khayrīyah;Barrage;Delta Barrage;Delta Barrage Station;Delta-Barrage;El-Qanatir el-Khairiya;El-Qanâtir el-Khairîya;El-Qanâṭir el-Khairîya;Muhammed `Ali Barrage;Muhammed ‘Ali Barrage;`Ezbet Shalaqan;`Izbat Shalqan;alqnatr alkhyryt;القناطر الخيرية;‘Ezbet Shalaqân;‘Izbat Shalqān; +city::360630;Cairo;Al Qahirah;Al Qāhirah;CAI;Caire;Cairo;Cairo - alqahrt;Cairo - القاهرة;Cairu;Cairus;Caïro;El Caire;El Cairo;El Kahira;El Kahirah;El-Qahira;El-Qâhira;Il Cairo;Kaherah;Kahira;Kahirae;Kahire;Kahirä;Kair;Kaira;Kairas;Kairo;Kairó;Kajro;Kayro;Kaíró;Kaïro;Káhira;Le Caire;Lo Cayiro;Lungsod ng Cairo;Masr;Misr;Qahirə;alqahrt;kai luo;kailo;kairo;keyro;khiro;qahrh;qhyr;Ël Cairo;Ël Càiro;Κάιρο;Каир;Каиро;Кайро;Каїр;קהיר;القاهرة;قاهره;قاھىرە;قاہرہ;கெய்ரோ;ไคโร;ཁ་ཡི་རོ;ქაირო;ካይሮ;カイロ;开罗;카이로; +city::360686;Al Minya;Al Minya;Al Minyā;EMY;Ehl'-Min'ja;El Minia;El-Minya;Minia;Minieh;Minya;almnya;Эль-Минья;المنيا; +city::360716;Al Matariyah;Al Matariyah;Al Maţarīyah;El Mataria;El-Matariya;El-Maṭarîya;Matarieh;almtryt;المطرية; +city::360754;Al Manzalah;Al Manzalah;Al Manzilah;El-Manzala;almnzlt;المنزلة; +city::360761;Al Mansurah;Al Mansurah;Al Manşūrah;Al-Mansura;Al-Mansurah;Al-Manṣūrah;El Mansura;El-Mansura;El-Manṣûra;El-Masura;El-Masûra;Manoura;Mansoura;Mansourah;Mansura;Mansurah;Mansûra;almnswrt;mnswrh;mnswrt;المنصورة;منصورة;منصوره; +city::360773;Al Manshah;Al Manshah;Al Manshāh;El Manshah;El Manshāh;Ptolemais Hernnon;Ptolemaîs Hernnon; +city::360829;Al Mahallah al Kubra;Al Mahallah al Kubra;Al Maḩallah al Kubrá;Al-Mahallah al-Kubra';Al-Maḥallah al-Kubra’;El Mahalla;El Mahalla el Kubra;El Mehalla el Kubra;El-Mahalla el-Kubra;El-Maḥalla el-Kubra;Mahalla el Kubra;Mehalla el Kobra;almhlt alkbry;المحلة الكبرى; +city::360923;Al Kharijah;Al Kharijah;Al Khārijah;Al-Kharga;El Kharga;El Khârga;El-Charge;Kharga;Kharga Oasis;UVL;alkharjt;الخارجة; +city::360928;Al Khankah;Al Khankah;Al Khānkah;El-Khanka;El-Khankah;El-Khânka;El-Khânkâh;Khanka; +city::360995;Giza;Al Jizah;Al Jīzah;El Gizeh;El-Giza;El-Gîza;Ghizeh;Giza;Gizah;Gize;Gizeh;Gizo;Gizé;Guiza;Gíza;Gîza;SPX;aljyzt;giza;jyzh;Гиза;الجيزة;جیزه;ギーザ; +city::361029;Al Jammaliyah;Al Jamaliyah;Al Jammaliyah;Al Jammālīyah;Al Jamālīyah;El-Gamaliya;El-Gamalîya;al-Jammaliyyah;al-Jammāliyyah;aljmalyt;الجمالية; +city::361055;Ismailia;Al Isma`iliya;Al Isma`iliyah;Al Ismā‘īlīya;Al Ismā‘īlīyah;Al-Isma'iliyah;Al-Ismā’īlīyah;Gorad Ismailija;Ismailia;Ismailieh;Ismailija;Ismailiya;Ismailiyah;Ismailiye;Ismailía;Ismailîya;Ismayilia;Ismaília;Ismaïlia;Ismoiliya;Ismáílíja;Iszmailija;Iszmáilija;QIV;asmaʿylyh;iseumaillia;isma'iliya;ismailia;isumairia;xis me xi li xa;yi si mei li ya;İsmailiye;Ισμαηλία;Ісмаїлія;Горад Ісмаілія;Исмаилия;Исмаилија;Իսմայիլիա;איסמעיליה;اسماعيليه;اسماعیلیه;اسماعیلیہ;الإسماعيلية;مدينة الإسماعيلية;इस्माइलिया;อิสเมอิลีอา;ისმაილია;イスマイリア;伊斯梅利亚;이스마일리아; +city::361058;Alexandria;ALY;Al Iskandariyah;Al Iskandarīyah;Alegsandiri;Alegsàndiri;Alehandriya;Aleixandria;Aleixandría;Alejandria;Alejandría;Aleksandria;Aleksandrii;Aleksandrij;Aleksandrija;Aleksandrio;Aleksandriya;Aleksandrje;Aleksandryjo;Alesandria dEgito;Alessandria;Alessandria d'Egitto;Alessandria dEggittu;Alessandria e Naggitto;Alexandreia;Alexandria;Alexandria Magna;Alexandrie;Alexandrië;Alexandría;Alexàndria;Ałesandria dEgito;Cathair Alastair;El Iskandariya;El Iskandarīya;Gorad Aleksandryja;Iskandariah;Iskandariya;Iskandariyah;Iskandri;Iskenderiye;Iskindiriya;Iskindirîya;Lisandria dEgittu;Lisàndria dEgittu;Ol'oksandrija;Taskendrit;alaksantriya;alaskndryt;alegjandriya;alekajandriya;alekcantiriya;alekjhandriya;aleksandria;aleksandriya;allegsandeulia;arekusandoria;askndryh;elekjhandriya;sikadari'a;sikandariya;xa lek san de riy;ya li shan da gang;ya li shan zhuo;yەskەndەryە;İsgəndəriyyə;İskenderiye;Αλεξάνδρεια;Александрий;Александрия;Александрија;Александрія;Горад Александрыя;Искандри;Искәндәриә;Ӧльӧксандрия;Ալեքսանդրիա;אלכסנדריה;אלעקסאנדריע;ئەسکەندەریە;اسكندريه;اسکندریه;اسکندریہ;الإسكندرية;ܐܠܟܣܢܕܪܝܐ;अलेक्झांड्रिया;सिकन्दरिया;আলেকজান্দ্রিয়া;আলেক্সান্ড্রিয়া;ਸਿਕੰਦਰੀਆ;એલેક્ઝાન્ડ્રિયા;அலெக்சாந்திரியா;అలెగ్జాండ్రియా;ಅಲೆಕ್ಸಾಂಡ್ರಿಯ;അലക്സാണ്ട്രിയ;อะเล็กซานเดรีย;ཡ་ལི་ཧྲན་ད;အလက်ဇန္ဒရီးယားမြို့;ალექსანდრია;እስክንድርያ;アレクサンドリア;亚历山大港;亞歷山卓;亞歷山大港;알렉산드리아; +city::361179;Al Hawamidiyah;Al Hawamidiyah;Al Ḩawāmidīyah;El-Hawamdiya;El-Ḥawâmdîya;Hawamidyah; +city::361291;Hurghada;Al Ghardaqah;Al-Ghardaqa;Chournkanta;El-Ghardaqa;Gorad Khurgada;Gurdaka;HRG;Hurgada;Hurghada;Khurgada;Khurgade;Urgada;alghrdqh;alghrdqt;furugada;ghrdqh;hong jia da;huleugada;Χουργκάντα;Горад Хургада;Хургада;Хургаде;Հուրգադա;ערדקה;الغردقة;الغردقه;غردقه;غردقہ;ელ-გურდაკა;フルガダ;洪加達;후르가다; +city::361320;Al Fayyum;Al Fayyum;Al Fayyūm;Al'-Fajum;Al-Fayyum;Arsinoe;Arsinoë;Crocodilopolis;El Faiyum;El Faiyûm;El-Fayum;Faijum;Faium;Fajum;Fayoom;Fayoum;Fayum;Fayyoum;Fayyum;Madinat al-Fayyum;Madinet el Faiyum;Madīnet el Faiyūm;Medinat Fayum;Medinat el-Fayoum;Médinat el-Fayoum;Shedit;alfywm;astan fywm;mhafzt alfywm;Аль-Фаюм;استان فیوم;الفيوم;محافظة الفيوم; +city::361329;Al Fashn;Al Fashn;El Fashn;Fashn; +city::361546;Arish;AAC;Al 'Arish;Al Arish;Al `Arish;Al ‘Arīsh;Al-'Arish;Al-Arisch;Al-Arish;Al-Arisz;Al-Arix;Al-‘Arīsh;Alarixe;Aris;Arisas;Arish;Arišas;Aríš;City of Cut Noses;Ehl'-Arish;El Aris;El Arish;El Ariŝ;El Ariş;El'-Arish;El-'Arish;El-Arich;El-‘Arîsh;Rhinocolorum;Rhinocolura;Rhinocorura;Rhinokorura;a li shen;alisi;arishu;el-arishi;Ариш;Ель-Аріш;Эль-Ариш;אל עריש;על אריש;العريش;عریش;ელ-არიში;アリーシュ;阿里什;아리시; +city::361661;Akhmim;Akhmim;Akhmun;Akhmûn;Akhmīm;Ekhmin;Khemmis;Paloupolis;Panopolis;Panospolis;Ахмим; +city::362004;Abu Tij;Abu Tig;Abu Tij;Abu Tîg;Abū Tīj; +city::362277;Abu Qurqas;Abu Gurgas;Abu Kerkae;Abu Kirkas;Abu Qurqas;Abu-Qirqas;Abū Qurqāş; +city::362485;Abu Kabir;Abu Kabir;Abu Kebir;Abu Kebîr;Abu Kibir;Abū Kabīr;Abū Kibīr;Kafr Abu Kabir;Kafr Abu Kebir;Kafr Abu Kebîr;Kafr Abū Kabīr;abw kbyr;أبو كبير; +city::362973;Abnub;Abnub;Abnūb; +city::2462881;Laayoune;Aaium;Aaiun;Aaiún;Aiun;Ajuno;Al Ayoun;Al-Aaiun;Al-Ajoen;Al-Ayun;Al-Ujun;EUN;Ehl'-Ajun;Ejbei Uad el Aabd;El Aaiun;El Aaiún;El Aium;El Aiun;El Aiún;El Ajun;El Ayun;El-Aaiun;El-Aaiún;La'Youn;Laayoune;Laâyoune;La’Youn;O Aiún - العيون;a you en;aiun;el-aiun;Ел Ајун;Эль-Аюн;العيون;العیون;アイウン;阿尤恩;엘아이운; +city::2463447;Dakhla;Ad - Dakhla;Ad Dakhla;Dajla;Dakhla;Dakhlah;Factoria Villa Cisneros;VIL;Villa Cisneras;Villa Cisneros;aldakhlt;dakhlh;Дахла;الداخلة;داخله; +city::333287;Keren;Cheren;Hamelmalo;Kehrehn;Keren;Kerenas;Kereno;ke lun;kelen;keren;krn;kyryn artrya;qrn;Κερέν;Керен;Кэрэн;קרן;كرن;کرن;کیرین، ارتریا;კერენი;ከረን;ケレン;克伦;케렌; +city::343300;Asmara;ASM;Asmar;Asmara;Asmaro;Asmehra;Asmera;Aszmara;Gorad Asmara;a si ma la;asamara;aseumala;asmara;asmera;asmrh;asmrt;asumara;yەsmەrە;Əsməra;Ασμάρα;Асмара;Асмэра;Асмєра;Горад Асмара;Ասմարա;אסמרה;أسمرة;ئەسمەرە;اسمارا;اسمره;अस्मारा;ਅਸਮਾਰਾ;அஸ்மாரா;അസ്മാറ;แอสมารา;ཨཱ་སི་མི་ར།;ასმერა;አስመራ;ኣስመራ;アスマラ;阿斯馬拉;아스마라; +city::2509509;Vila-real;Vila-Real;Vila-real;Villareal;Villarreal;Вила-Реал; +city::2509769;Velez-Malaga;Beleth-Malaga;Veles Malaga;Veles-Malaga;Velez-Malaga;Vélez-Màlaga;Vélez-Málaga;bei lai si-ma la jia;beresu=maraga;fylyth-malqt;Μπέλεθ-Μάλαγα;Вeлес-Мaлага;Велез-Малага;Велес-Малага;Վելես Մալագա;فيليث-مالقة;ベレス=マラガ;贝莱斯-马拉加; +city::2509954;Valencia;Balenzia;Gorad Valensija;Pa-lun-si-a;Pâ-lùn-sî-â;VLC;Valantsa;Valence;Valencia;Valencia - Valencia;Valencia - València;Valencie;Valencija;Valencio;Valenseje;Valensi;Valensia;Valensii;Valensij;Valensija;Valensiya;Valensyaa;Valensėjė;Valenthia;Valentia;Valentzia;Valenza;València;Valéncia;Valência;Vałénsia;Walencja;Walensiye;Walénsiye;ba len seiy;ba lun xi ya;ballensia;barenshia;blnsyt;hua lun xi ya;valainsi'a;valenciya;valensia;valensiya;valynsya;wa lun xi ya;walnsya;wlnsyh;wylnsya;Βαλένθια;Валенси;Валенсиа;Валенсий;Валенсия;Валенсија;Валенсія;Горад Валенсія;Վալենսիա;וואלענציע;ולנסיה;بلنسية;والنسیا;ویلنسیا;ویلنسیہ;ڤالينسيا;ڤالێنسیا;वालेन्सिया;ਵਾਲੈਂਸੀਆ;வாலேன்சியா;บาเลนเซีย;ვალენსია;バレンシア;巴倫西亞;瓦伦西亚;瓦倫西亞;華倫西亞;발렌시아; +city::2510073;Utrera;Utrera;Утрера; +city::2510253;Torrevieja;Malnovturo;Toreviekha;Toreviexa;Torevijekha;Torrev'ekha;Torrevekha;Torrevella;Torrevella de la Mata;Torrevieja;torebieha;trbykha;tuo lei wei ye ha;twrbyyhh;twrryfyykha;twryfayja;Торевиеха;Торевијеха;Торревьеха;Торревєха;Տոռեվիեխա;טורבייחה;تربیخا;تورريفييخا;توريفايجا;トレビエハ;托雷维耶哈; +city::2510279;Torrent;Torrent;Torrente; +city::2510281;Torremolinos;Toremolinos;Toremolinos-Malaga;Toremolinos-Málaga;Torremolinos;Torremolinos-Malaga;Torremolinos-Málaga;UTL;tuo lei mo li nuo si;twrymwlynws;Τορρεμολίνος;Торемолинос;Торремолинос;Торремолінос;توريمولينوس;托雷莫利诺斯; +city::2510409;Toledo;Gorad Taleda;Toledas;Tolede;Toledo;Toledo i Spania;Toledu;Toletum;Toleu;Tolède;XTJ;tlytlt;to le do;toledo;toleto;tolledo;toredo;tuo lai duo;tuo li duo;twldw;twldw aspanya;twlydw;Τολέδο;Горад Таледа;Толедо;Տոլեդո;טאלעדא;טולדו;تولدو، اسپانیا;توليدو;طليطلة;طلیطلہ;तोलेदो;ਤੋਲੇਦੋ;டொலேடோ;โตเลโด;ტოლედო;ቶሌዶ;トレド;托利多;托萊多;톨레도; +city::2510542;Telde;Tel'de;Telde;te er de;tyldy;Телде;Тельде;تيلدي;特尔德; +city::2510693;Talavera de la Reina;Aebura;Caesarobriga;Ebora;Ebura;Elbora;QWT;Talavera de la Reina;Talavera de la Rejna;Talavera de la reina;Talavera del Tajo;Talavera-de-la-Rejna;ta la be ra de la rey na;ta la wei la de la lei na;talavera di la rina;tlbyrt;Талавера де ла Реина;Талавера де ла Рейна;Талавера-де-ла-Рейна;طلبيرة;टालावेरा दी ला रीना;ตาลาเบราเดลาเรย์นา;ታላቬራ ዴ ላ ሬና;タラベラ・デ・ラ・レイナ;塔拉韦拉德拉雷纳; +city::2510911;Sevilla;Gorad Sevil'ja;Hispalis;Lungsod ng Sevilla;SVQ;Sebilla;Sebille;Sevidzheh;Sevil'ja;Sevila;Sevileje;Sevilha;Sevilia;Sevilija;Sevilja;Sevilla;Seville;Sevilo;Sevilya;Sevilėjė;Seviya;Seweliye;Sewilla;Sibilia;Siviglia;Sivilja;Séville;Séwéliye;ashbylyt;ceviya;isabili'a;sai wei li ya;sai wei ya;sbylyh;sebi ya;sebiria;sebirya;sebiya;sevilia;swya;sybyya;Σεβίλλη;Горад Севілья;Севиджэ;Севилья;Севиля;Севилја;Севиља;Севілья;Սևիլյա;סביליה;סעווילא;إشبيلية;اشبیلیہ;سویا;سيبييا;سێڤیلیا;सेबिया;ਇਸ਼ਬੀਲੀਆ;செவீயா;เซบียา;სევილია;セビリア;セビリャ;塞維亞;塞维利亚;세비야; +city::2511032;San Vicent del Raspeig;San Vicente;San Vicente del Raspeig;Sant Vicent del Raspeig;Sanvi; +city::2511150;Santa Lucia;Santa Lucia de Tirajana;Santa Lucía de Tirajana;sheng lu xi ya;圣卢西亚; +city::2511174;Santa Cruz de Tenerife;Gorad Santa-Krus-deh-Tehnehryfeh;Sancta Crux Nivariae;Santa Cruz;Santa Cruz Tenerifekoa;Santa Cruz de Tenerife;Santa Cruz de Ténérife;Santa Krouth nte Tenerife;Santa Krus de Tenerife;Santa Kruz de Tenerife;Santa-Krus-de-Tenerife;Santakrusa de Tenerife;TCI;Tenerife;Tenerifes Santa Krusas;Teneriffa;Tenerifės Santa Krusas;san ta kru sde te ne rife;santa kruja de teneriphe;santa krujha de teneripha;santa krusa de tenarifa;santa krws;santa krws dy tynyryfa;santa krwth dy tynyryfh;santa krwz dy tynyrf;santakeuluseudetenelipe;sheng ke lu si-de te nei li fei;snth qrws dh tnryph;Σάντα Κρουθ ντε Τενερίφε;Горад Санта-Крус-дэ-Тэнэрыфэ;Санта Круз де Тенерифе;Санта Крус де Тенерифе;Санта-Крус-де-Тенерифе;Санта-Крус-де-Тенеріфе;סאנטא קרוז דע טענעריפע;סנטה קרוס דה טנריפה;سانتا كروث دي تينيريفه;سانتا كروس دى تينيريفا;سانتا کروز دی تینیرف;سانتا کروز ٹینرائف;سانتا کروس;सांता क्रुझ दे तेनेरीफ;सान्ता क्रूस दे तेनरीफ़;সান্টা ক্রুজ দে তেনেরিফে;ซานตากรุซเดเตเนรีเฟ;სანტა-კრუს-დე-ტენერიფე;サンタ・クルス・デ・テネリフェ;圣克鲁斯-德特内里费;산타크루스데테네리페; +city::2511306;Sanlucar de Barrameda;San Lucar de Barrameda;Sanlucar de Barrameda;Sanlukar de Barameda;Sanlukar-de-Barrameda;Sanlúcar de Barrameda;Sunlucar de Barrameda;san luk arde bar ra me da;sang lu ka er de wa la mei da;sanlukaleudebalameda;shlwqt;Санлукар де Барамеда;Санлукар-де-Баррамеда;شلوقة;ซานลูการ์เดบาร์ราเมดา;სანლუკარ-დე-ბარამედა;サンルーカル・デ・バラメーダ;桑卢卡尔德瓦拉梅达;산루카르데바라메다; +city::2511388;San Fernando;San Fernanando;San Fernando;San Fernando i Spania;San-Fernando;san frnandw qads;sheng fei er nan duo;Сан Фернандо;Сан-Фернандо;سان فرناندو، قادس;サン・フェルナンド;圣费尔南多; +city::2511401;La Laguna;La Laguna;La-Laguna;San Cristobal de La Laguna;San Cristóbal de La Laguna;Ла-Лагуна; +city::2511440;San Bartolome de Tirajana;San Bartolome Tirajana;San Bartolome de Tirajana;San Bartolomé Tirajana;San Bartolomé de Tirajana; +city::2511619;Sagunto;Morvedre;Sagonte;Sagunt;Sagunto;Saguntum;sgwntwm;Сагунто;סגונטום; +city::2511716;Roquetas de Mar;Roketas de Mar;Roketas-de-Mar;Roquetas;Roquetas de Mar;luo ke ta si de ma er;rktas d mar;rwkwytas dy mar;Рокетас де Мар;Рокетас-де-Мар;روكويتاس دي مار;رکتاس د مار;ロケタス・デ・マル;罗克塔斯德马尔; +city::2512177;Puertollano;Puehrtol'jano;Puertojano;Puertolano;Puertollano;Puertolyano;UER;bwrtwlanw;pu ai er tuo li ya nuo;puerutoryano;Пуертояно;Пуертољано;Пуэртольяно;Պուերտոլյանո;بورتولانو;プエルトリャノ;普埃尔托利亚诺; +city::2512862;Paterna;Paterna;pa te er na;pateruna;Патерна;パテルナ;帕特尔纳; +city::2512989;Palma;Ciutat de Mallorca;Madina Mayurqa;PMI;Pal'ma;Palma;Palma Mallorcakoa;Palma de Maiorca;Palma de Majorque;Palma de Malhorca;Palma de Malhòrca;Palma de Mallorca;Palma di Maiorca;mywrqt;pa er ma;palmademayoleuka;plmh dh mywrqh;Пальма;פלמה דה מיורקה;ميورقة;パルマ・デ・マリョルカ;帕爾馬;팔마데마요르카; +city::2513076;Orihuela;Auraiola;Aurariola;Orihuela;Oriola;Oriouela;Oriuehla;Oriuela;Orivela;ao li wei la;aryhwyla;awrywyla;oriuera;Οριουέλα;Оривела;Ориуэла;Оріуела;Օրիուելա;أوريويلا;اریهوئلا;اوریہیولا;オリウエラ;奥里韦拉; +city::2513416;Murcia;Ciutat de Murcia;Ciutat de Múrcia;MJV;Murcia;Murcie;Murcio;Murcja;Mursia;Mursija;Múrcia;mrsyt;mu er xi ya;murushia;mwrsya;mwrsyh;Мурсия;מורסיה;مرسية;مورسیا;ムルシア;穆尔西亚; +city::2513477;Motril;Motril;Motril';mo te li er;motoriru;mwtryl;Мотрил;Мотриль;Мотріль;موتريل;モトリル;莫特里尔; +city::2513759;Molina de Segura;Molina;Molina de Segura;Molina-de-Segura;mo li na de sai gu la;mwlyna dy syghwra;Молина де Сегура;Молина-де-Сегура;Моліна-де-Сегура;مولينا دي سيغورا;モリナ・デ・セグラ;莫利纳德塞古拉; +city::2513882;Mijas;Mijas;Mikhas;mi ha si;mihasu;mykhas;Михас;Міхас;ميخاس;ミハス;米哈斯; +city::2513917;Merida;Emerita Augusta;Merida;Merido;Mérida;QWX;merida;mryda;mrydh;Мерида;מרידה;مریدا;メリダ; +city::2513947;Melilla;Ciudad Autonoma de Melilla;Ciudad Autónoma de Melilla;Ciudad de Melilla;Korisnik:Slaven Kosanovic/Melila;Lungsod ng Melilla;M'lila;MLN;Melil'ja;Melila;Melilla;Melilo;Melilya;Meliya;Millela;Rusaddir;Rusadir;Russadir;me li ya;mei li li ya;melilia;melliya;merirya;mlylyh;mlylyt;mlyyh;Корисник:Славен Косановић/Мелиља;Мелила;Мелилья;Мелиља;מלייה;مليلية;ملیلیه;เมลียา;მელილია;メリリャ;梅利利亚;멜리야; +city::2514169;Marbella;Gorad Marbellja;Marbel'ja;Marbela;Marbelja;Marbella;Marbelya;Marvegia;QRL;ma bei la;maleubeya;marbella;marbla;marbya;marbyla;maruberya;Μαρβέγια;Горад Марбелля;Марбeлья;Марбелья;Марбеля;Марбеља;Մարբելյա;ماربلا;ماربيا;ماربيلا;ماربیا;मार्बेल्ला;マルベーリャ;马贝拉;마르베야; +city::2514256;Malaga;AGP;Gorad Malaga;Malaca;Malaga;Malagae;Malago;Malaqa;Màlaga;Málaga;ma la jia;malaga;malaja;malaka;malga;mallaga;malqt;maraga;mlqt;Μάλαγα;Горад Малага;Малагæ;Малага;Մալագա;מאלגה;מלאגה;مالاجا;مالاگا;مالقة;مالگا;ملقة;مەلەگا;मलागा;மாலாகா;มาลากา;მალაგა;マラガ;馬拉加;马拉加;말라가; +city::2514891;Lorca;Llorca;Lorca;Lorka;Lorko;XJR;lwrka mrsyt;lwrqh;roruka;Лорка;לורקה;لوركا، مرسية;ロルカ; +city::2515045;Linares;Linares;Линарес; +city::2515270;Las Palmas de Gran Canaria;Kanaria Handiko Las Palmas;LPA;Las Palmas;Las Palmas de G.C.;Las Palmas de Gran Canaria;Las Palmas de Gran Kanaria;Las-Pal'mas-de-Gran-Kanarija;Laspalmasa;Les Palmes de Gran Canaria;Les Palmes de Gran Canària;Palmas;Palmas de Gran Canaria;la si pa er ma si;Лас Палмас де Гран Канариа;Лас-Пальмас-де-Гран-Канария;ラス・パルマス・デ・グラン・カナリア;拉斯帕尔马斯; +city::2515812;La Linea de la Concepcion;La Linea;La Linea de la Concepcion;La Línea;La Línea de la Concepción;La-Linea-de-la-Konseps'jon;La-Linea-de-la-Konseps'on;La-Linea-deh-la-Kanseps'jon;Linea de Konsepsion;la li nei ya de la kong sai pu xi weng;la lnya dy la kanspchyan;la yyna dy la kwnsybsywn;Ла-Линеа-де-ла-Консепсьон;Ла-Лінеа-де-ла-Консепсьйон;Ла-Лінеа-дэ-ла-Кансепсьён;Линеа де Консепсион;لا لنیا دی لا کانسپچیان;لا يينا دي لا كونسيبسيون;ラ・リネア・デ・ラ・コンセプション;拉利内亚德拉孔塞普西翁; +city::2516326;Jerez de la Frontera;Cheres de la Frontera;Gorad Kherehs-deh-la-Frantehra;Herezo;Jarez de la Frontera;Jerez;Jerez de la Frontera;Kheres de la Frontera;Kheres-de-la-Frontera;Kherez de la Frontera;XRY;Xeres;Xeresium;Xerez de la Frontera;Xerès;Xérès;he lei si-de la fu long te la;heleseudelapeulontela;hrs dh lh prwntrh;jyraz dy la frwntyra;shrysh;Ĥerezo;Горад Херэс-дэ-ла-Франтэра;Херез де ла Фронтера;Херес де ла Фронтера;Херес-де-ла-Фронтера;חרס דה לה פרונטרה;جیراز دی لا فرونتیرا;شريش;ヘレス・デ・ラ・フロンテーラ;赫雷斯-德拉弗龙特拉;헤레스데라프론테라; +city::2516395;Jaen;Aurgi;Haeno;JEA;Jaen;Jaén;Khaehn;Xaen - Jaen;Xaén - Jaén;haen;jyan;Ĥaeno;Хаэн;جيان;ハエン; +city::2516548;Huelva;HEV;Huelva;Onubo;Uehl'va;ueruba;u~eruba;Уэльва;ウェルバ;ウエルバ; +city::2517117;Granada;GRX;Girnata;Gorad Granada;Grana;Granada;Granada - Grenada;Granado;Granata;Graná;Grenada;Grenade;Grenado;Grenayd;Gırnata;Lungsod ng Granada;Qranada;ge la na da;ge lin na da;geulanada;ghrnatt;granada;grndh;guranada;gurenada;jranada;jrynada;kiranata;kran a da;Γρανάδα;Горад Гранада;Гранада;Гренада;גרנדה;جرانادا;جرينادا;غرناطة;غرناطہ;ګرېنادا;گرانادا;گرېنادا;ग्रानादा;গ্রানাডা;கிரனாதா;กรานาดา;გრანადა;ግራናዳ;グラナダ;グレナダ;格拉纳达;格林纳达;그라나다; +city::2517367;Gandia;Gandia;Gandie;Gandija;Gandía;Гандия; +city::2517595;Fuengirola;FGR;Fuehnkhirola;Fuengirola;Fuenkhirola;feng xi luo la;fu en ji luo la;fwynkhyrwla;Фуенхирола;Фуенхірола;Фуэнхирoла;Фуэнхирола;فوينخيرولا;丰希罗拉;福恩吉罗拉; +city::2517816;Estepona;EVO;Ehstepona;Estepona;ai si te bo na;astybwna;esutepona;Естепона;Эстепона;إستيبونا;エステポナ;埃斯特波纳; +city::2518207;El Puerto de Santa Maria;Ehl'-Puehrto-de-Santa-Marija;El Puerto;El Puerto de Santa Maria;El Puerto de Santa María;El'-Puerto-de-Santa-Marija;PXS;Portus Sanctae Mariae;Pto. de Sta. Maria;Pto. de Sta. María;Puerto;Puerto de Santa Maria;Puerto de Santa Marija;Puerto de Santa María;al bwyrtw dy santa marya;elpueleutodesantamalia;sheng ma li ya gang;xelpwyr to de san ta ma ri xa;Ель-Пуерто-де-Санта-Марія;Пуерто де Санта Марија;Эль-Пуэрто-де-Санта-Мария;إل بويرتو دي سانتا ماريا;เอลปวยร์โตเดซานตามารีอา;エル・プエルト・デ・サンタ・マリア;圣玛丽亚港;엘푸에르토데산타마리아; +city::2518494;El Ejido;Barriada El Ejido;Ehl'-Ehkhido;Ejido;Ekhido;El Edzido;El Ejido;El'-Ekhido;ai lai xi duo;al akhydw;alayjaydw;Ел Еџидо;Ель-Ехідо;Ехидо;Эль-Эхидо;إلإيجايدو;ال اخیدو;エル・エヒド;埃莱希多; +city::2518505;Elda;Ehl'da;El'da;Elda;ai er da;alda;xe lda;Елда;Ельда;Эльда;Էլդա;إلدا;الدا;เอลดา;埃尔达; +city::2518559;Elche;Ehl'ch;Ehl'che;El'che;Elce;Elch;Elche;Elig;Elx;Elčė;Illici;ai er qie;alchh;alsh;elche;eruche;xelche;ʼls;Елч;Елче;Ельче;Эльч;Эльче;אלש;إلش;الش;الچه;เอลเช;ელჩე;エルチェ;埃爾切;엘체; +city::2518794;Dos Hermanas;Dos Ermanas;Dos Hermanas;Дос Ерманас; +city::2519240;Cordoba;Cardoue;Cordoa;Cordoba;Cordoba i Spania;Cordoue;Cordova;Corduba;Còrdoa;Còrdova;Córdoba;Córdoba i Spania;Córdova;Córduba;Gorad Kordava;Kordoba;Kordova;Kordovo;Kordowa;ODB;ge duo hua;ke er duo wa;koleudoba;kordoba;korudoba;kurtupa;kwrdwba;kxr do ba;kۆrdۆba;qrtbh;qrtbt;qwrdwbh;Κόρδοβα;Горад Кордава;Кордоба;Кордова;Կորդովա;קארדאבע;קורדובה;قرطبة;قرطبه;قرطبہ;كوردوبا;کوردوبا;کۆردۆبا;कोर्दोबा;குர்துபா;กอร์โดบา;კორდობა;コルドバ;哥多華;科爾多瓦;코르도바; +city::2519402;Ciudad Real;CQM;Cidade Real;Ciuda Real;Ciudad Real;Ciudá Real;Gorad S'judad-Rehal';S'judad-Real';Sijudad Real;Villa-Real;lei a er cheng;siudadeuleal;sywdad ryal;thywdad ryal;Горад Сьюдад-Рэаль;Сијудад Реал;Сьюдад-Реаль;סיודאד ריאל;ثيوداد ريال;سیوداد رئال;シウダー・レアル;雷阿爾城;시우다드레알; +city::2519513;Chiclana de la Frontera;Chiclana;Chiclana de la Frontera;Chiklana-de-la-Frontera;Чиклана-де-ла-Фронтера; +city::2519752;Castello de la Plana;CDT;Castello;Castello de la Plana;Castellon;Castellon de la Plana;Castelló;Castelló de la Plana;Castellón;Castellón de la Plana;Kastel'on-de-la-Plana;Kastelon de la Plana;ka si te li weng-de la pu la na;qʼstywn dh lh plʼnh;Кастельон-де-ла-Плана;Кастељон де ла Плана;קאסטיון דה לה פלאנה;カステリョン・デ・ラ・プラナ;卡斯特利翁-德拉普拉納; +city::2520058;Cartagena;Cartachena;Cartagena;Cartagena i Spania;Cartaxena;Carthagene;Carthago Nova;Carthagène;Gorad Kartakhena;Kartachena;Kartagena;Kartagina;Kartagjena;Kartahena;Kartaheno;Kartakhena;Kartaĥeno;Karthageni;XUF;ka ta he na;kaleutahena;kartagna;kartajena;kartajina;kartakhyna;kartygana;karutahena;qrthnh;Καρθαγένη;Горад Картахена;Картагена;Картагина;Картахена;קרטחנה;كارتاخينا;کارتاگنا;کارتیگانا;कार्टाजेना;कार्ताजिना;კარტახენა;ካርታሔና;カルタヘナ;卡塔赫纳;카르타헤나; +city::2520425;Campina;Campina;Campiña;Caserio Campina;Caserío Campiña; +city::2520493;Calvia;Calvia;Calvià;Calviá;Kal'vija;Kalvia;Kalvija;ka er wei ya;kalbi xa;kalbya;kalfya;karubia;Калвиа;Калвија;Кальвия;Кальвія;كالفيا;کالبیا;กัลบีอา;カルビア;卡尔维亚; +city::2520600;Cadiz;CDZ;Cadice;Cadis;Cadix;Cadiz;Cai;Càdice;Cádice;Cádis;Cádiz;Gadeira;Gades;Gadir;Gaðes;Iungadir;Kadis;Kadisas;Kadiz;Kadizo;Kadyks;Kantith;La tacita de plata;jia de si;kadi s;kadiseu;kadisu;kads;kadydh;kadys;qads;qdys;Κάντιθ;Кадиз;Кадис;Кадіс;קדיס;قادس;كاديذ;کادس;کادیس;กาดิซ;კადისი;ካዲዝ;カディス;加的斯;카디스; +city::2520611;Caceres;Caceres;Caceres i Spania;Cacris;Caçris;Càceres;Cáceres;Cáceres i Spania;Gorad Kaserehs;Kaseres;Kaseresa;Kaseresas;Katheres;Norba Caesarina;QUQ;ka sai lei si;ka se res;ka sha li si;kakeresa;kakyrys spyn;kaseleseu;kaseresu;kasrs;katheresa;qsrs;qsrsh;Κάθερες;Горад Касерэс;Касерес;קסרס;قصرش;کاسرس;کاسیریس، ہسپانیہ;کاکیریس، سپین;काकेरेस;ਕਾਥੇਰੇਸ;กาเซเรส;კასერესი;カセレス;卡塞雷斯;卡沙利斯;카세레스; +city::2521088;Benidorm;Benidorm;Benidormo;bei ni duo er mu;benidoleum;benidorumu;bnydwrm;Бенидорм;Бенідорм;Բենիդորմ;بنيدورم;بنیدورم;ベニドルム;贝尼多尔姆;베니도름; +city::2521139;Benalmadena;Benal'madena;Benalmadena;Benalmádena;bei na er ma de na;benalmadena;bnalmadna;bynalmadyna;Беналмадена;Бенальмадена;Բենալմադենա;بنالمادنا;بينالمادينا;贝纳尔马德纳;베날마데나; +city::2521420;Badajoz;Ara Pacis Augustalis;BJZ;Badahozo;Badajoz;Badakhos;Badaĥozo;badahosu;badakhwz;Бадахос;باداخوز;バダホス; +city::2521570;Arrecife;ACE;Aresife;Arrecife;Аресифе; +city::2521582;Arona;Aron;Arona;Arona pa Tenerife;Arona på Tenerife;a luo na;arwna asbanya;Арон;Арона;أرونا، إسبانيا;阿罗纳; +city::2521886;Almeria;Al'meri;Al'merija;Almeria;Almerija;Almerio;Almería;Gorad Al'meryja;LEI;Unci;a er mei li ya;almelia;almeriya;almrya;almryt;almyrya;arumeria;Αλμερία;Алмерия;Алмерија;Альмери;Альмерия;Альмерія;Горад Альмерыя;Ալմերիա;אלמריה;آلمریا;ألمرية;المریہ;المیریا;अल्मेरिया;आल्मेरिया;அல்மேரீயா;アルメリア;阿尔梅里亚;알메리아; +city::2521978;Alicante;A-li-kham-thit;ALC;Akra Leuke;Alacant;Alakanto;Alicant;Alicante;Alicanti;Alikante;Alikantė;Alíkante;Gorad Alikanteh;Lucentum;a li kan te;alikante;allikante;alykant;alykanth;alykanty;arikante;xa li kan te;Â-li-kham-thi̍t;Αλικάντε;Аликанте;Аліканте;Горад Алікантэ;Ալիկանտե;אליקנטה;آلیکانته;أليكانتي;الیکانت;الیکانتے;आलिकांते;आलिकान्ते;อาลีกันเต;ალიკანტე;アリカンテ;阿利坎特;알리칸테; +city::2522013;Algeciras;AEI;Al Jezita;Al'khesiras;Alchesirasas;Alchethiras;Alchezira;Algeciras;Algecires;Algesiras;Algesires;Algésiras;Alkhesiras;Alxeciras;a er he xi la si;alghykras;alhesilaseu;alkhythyras;aruheshirasu;Αλχεθίρας;Алхесирас;Альхесирас;Альхесірас;الجزيرة الخضراء;الخيثيراس;الغیکراس;アルヘシラス;阿尔赫西拉斯;알헤시라스; +city::2522098;Alcoy;Al'ka;Al'koj;Alco;Alcodium;Alcoi;Alcoy;Alkoj;Alkojus;a er ke yi;alkwy;arukoi;Алкој;Алька;Алькой;آلکوی;ألكوي;アルコイ;阿尔科伊; +city::2522165;Alcala de Guadaira;Al'kala-de-Gvadaira;Alcala de Guadaira;Alcalá de Guadaira;Alcalá de Guadaíra;Алькала-де-Гвадаира; +city::2522258;Albacete;ABC;Al'basete;Albacet;Albacete;Albasete;Albasetė;Gorad Al'baseteh;a er wa sai te;albasete;albasth;albsyt;arubasete;Албасете;Альбасете;Горад Альбасетэ;אלבסטה;آلباسته;الباچیتے;البسيط;アルバセテ;阿尔瓦塞特;阿爾瓦塞特;알바세테; +city::2567529;Grao de Murviedro;; +city::3104324;Zaragoza;Caesaraugusta;Caesarea Augusta;Caragoca;Salduba;Salduie;Saragoca;Saragosa;Saragosae;Saragoso;Saragossa;Saragosse;Saragoza;Saragozza;Saragoça;Saragòssa;Saraqosa;ZAZ;ZGZ;Zaragosa;Zaragoza;Zaragozo;Zargoza;sa la ge sa;sa ra ko sa;salagosa;saragosa;saragwsa;sarajwsa;srgwsh;srqstt;sەrەgۆsa;taragota;Çaragoça;Żaragoża;Σαραγόσα;Сарагосæ;Сарагоса;Сарагосо;Սարագոսա;סאראגאסא;סרגוסה;ساراجوسا;ساراگوسا;سرقسطة;سەرەگۆسا;सारागोसा;ਤਾਰਾਗੋਤਾ;ซาราโกซา;სარაგოსა;サラゴサ;萨拉戈萨;사라고사; +city::3104342;Zamora;Samora;ZOB;Zamora;Zamoro;samora;thamora;zamwra;Самора;زامورا;থামোরা;サモラ; +city::3104499;Gasteiz / Vitoria;Bittorixa;Gasteiz;VIT;Victoriacum;Vitoria;Vitoria-Gasteiz;Vitorija;Vitorio;Vitòria;Vitória;bitoria;wytwryh;Витория;ויטוריה;ビトリア; +city::3105184;Vilanova i la Geltru;Vilanova;Vilanova i la Geltru;Vilanova i la Geltrú; +city::3105935;Viladecans;Biladakans;Viladekans;bi la de kan si;fyladykans;Біладаканс;Виладеканс;فيلاديكانس;比拉德坎斯; +city::3105976;Vigo;Bigo;Gorad Viga;VGO;Vigas;Vigo;Vigo shaary;Vigu;bi ko;bigo;bygw;fyghw;vigo;wei ge;wgw;wygw;Βίγο;Виго;Виго шаары;Віго;Горад Віга;Վիգո;ויגו;بیگو;فيغو;وگو;ویگو;वीगो;บีโก;ვიგო;ビーゴ;維戈;비고; +city::3106672;Valladolid;Gorad Val'jadalid;Lungsod ng Valladolid;Pincia;Pucela;VLL;Vagiadolid;Val'jadolid;Valadoli;Valadolid;Valadolido;Valdoletum;Valhadolid;Valjadolid;Valjadolida;Valjadolidas;Valladolid;Valladolis;Valladolit;Valladolíd;Valladolís;Vallis Tolitum;Valyadolid;Vayadolid;Vaładołì;ba li ya duo li de;ba ya do lid;baryadoriddo;bayadollideu;bld alwlyd;fayadwlydh;valiadolidi;vayadolida;wayadwlyd;wʼyʼdwlyd;Βαγιαδολίδ;Вальядолид;Вальядолід;Валядолид;Ваљадолид;Горад Вальядалід;ואיאדוליד;بلد الوليد;فايادوليذ;والاڈولڈ;وایادولید;ڤایادۆلید;वायादोलिद;บายาโดลิด;ვალიადოლიდი;バリャドリッド;巴利亚多利德;바야돌리드; +city::3106868;Valdemoro;Val'demoro;Valdemoro;Vallis Mauri;ba er de mo luo;fladymwrw;Валдеморо;Вальдеморо;فلاديمورو;巴尔德莫罗; +city::3107112;Rivas-Vaciamadrid;Vaciamadrid;Vasiamadrid;Васиамадрид; +city::3107775;Torrelavega;Torelavega;Torrelavega;torerabega;tuo lei la wei jia;twrylafyja;Торелавега;Торрелавега;Տոռելավեգա;توريلافيجا;ٹوریلاویگا;トレラベーガ;托雷拉韦加; +city::3107784;Torrejon de Ardoz;Torechon de Ardosas;Torekhon de Ardos;Torrejon de Ardoz;Torrejón de Ardoz;Torrekhon-de-Ardos;Turricula Ardozensis;tuo lei hong de ya er duo si;Торехон де Ардос;Торрехон-де-Ардос;トレホン・デ・アルドス;托雷洪德亚尔多斯; +city::3108286;Terrassa;Terasa;Terrassa;telasa;terrasa;Τεράσα;Террасса;テッラーサ;테라사; +city::3108288;Tarragona;QGN;Taragono;Tarraco;Tarrago;Tarragona;Tarragone;taragona;taragwna;trgwnh;Таррагона;טרגונה;تاراگونا;タラゴナ; +city::3109256;Segovia;Gorad Segovija;Segovia;Segovie;Segovija;Segovio;Segowia;Segòvia;Segóvia;Segóvía;Senkovia;Ségovie;XOU;sai ge wei ya;se ko beiy;segobia;segovi'a;segovia;sgwbya;sgwbyh;shqwbyt;syjwvya;Σεγκόβια;Горад Сеговія;Сеговия;Сеговија;Сеговія;סגוביה;سيجوڤيا;سگوبیا;شقوبية;सेगोविआ;เซโกเบีย;სეგოვია;セゴビア;塞哥维亚;세고비아; +city::3109402;Cerdanyola del Valles;Cerdanyola;Cerdanyola del Valles;Cerdanyola del Vallès; +city::3109453;Barakaldo;Baracaldo;Barakaldo;Done Bikendi;San Bizente;San Bizenti-Barakaldo;San Vicente de Baracaldo;Sanbi; +city::3109642;Santiago de Compostela;Compostela;Compostelako Donejakue;Compostella;Compostèla;Gorad Santjaga-deh-Kampastehla;Lungsod ng Santiago de Compostela;SCQ;Saint-Jacques-de-Compostelle;Sant'jago-de-Kompostela;Sant'jago-de-Kompostelae;Santiago;Santiago de Compostela;Santiago de Compostella;Santiago de Compostel·la;Santiago de Kompostela;Santiago di Compostela;Santiago nte Kompostela;Santiagu de Compostela;Santiaqo de Kompostela;Santijago de Kompostela;Santjago de Kompostela;Sint-Djake-el-Galice;Sint-Djåke-el-Galice;cantiyako te kompocutela;kong bo si te la de sheng de ya ge;san teiy ko dek xm po s te la;santi'ago de komaposatela;santi'ago de kompostela;santiagodekomposeutella;santiyago de kompostela;santyaghw dy kwmbwstyla;santyagw d kmpwstla;santyajw dy kwmbwstyla;sheng de ya ge jin bo si te la;sheng de ya ge-de kong bo si te la;Σαντιάγο ντε Κομποστέλα;Горад Сантяга-дэ-Кампастэла;Сантијаго де Компостела;Сантьяго-де-Компостелæ;Сантьяго-де-Компостела;Сантяго де Компостела;Сантјаго де Компостела;Սանտիագո դե Կոմպոստելա;סאנטיאגא דע קאמפאסטעלא;סנטיאגו דה קומפוסטלה;سانتياجو دى كومبوستيلا;سانتياغو دي كومبوستيلا;سانتیاگو د کمپوستلا;سانتیاگو دے کومپوستیلا;सांतिआगो दे कोम्पोस्तेला;सांतियागो दे कोंपोस्तेला;ਸਾਂਤੀਆਗੋ ਦੇ ਕੋਮਪੋਸਤੇਲਾ;சாந்தியாகோ தே கோம்போசுதேலா;සන්තියාගෝ ඩි කොම්පොස්ටෙලා;ซานเตียโกเดกอมโปสเตลา;სანტიაგო-დე-კომპოსტელა;サンティアゴ・デ・コンポステーラ;孔波斯特拉的聖地牙哥;聖地亞哥-德孔波斯特拉;聖地亞哥金波斯特拉;산티아고데콤포스텔라; +city::3109718;Santander;Gorad Santandehr;Portus Victoriae Iuliobrigensium;SDR;Sanandere;Santandel;Santander;Santandera;Santanderas;Santandero;Santandèr;Santandér;cantanter;sang tan de;santandeleu;santandera;santanderu;santandr;santandyr;sntndr;Горад Сантандэр;Сантандер;סנטנדר;سانتاندر;سانتاندير;سانٹانڈر;सांतांदेर;சான்தான்தேர்;サンタンデール;桑坦德;산탄데르; +city::3109981;Santa Coloma de Gramenet;Santa Coloma de Gramenet;Santa-Koloma-de-Gramanet;Санта-Колома-де-Граманет; +city::3110040;San Sebastian de los Reyes;S.S. de los Reyes;SS de los Reyes;San Sebastian de los Rejesas;San Sebastian de los Reyes;San Sebastijan de los Rejes;San Sebastián de los Reyes;San-Sebast'jan-de-los-Rees;San-Sebastian-de-los-Rejes;Sanctus Sebastianus Regum;Sanse;san sbastyan dy lws ryys;sheng sai wa si di an de luo si lei ai si;Сан Себастијан де лос Рејес;Сан-Себастиан-де-лос-Рейес;Сан-Себастьян-де-лос-Реєс;سان سباستيان دي لوس رييس;サン・セバスティアン・デ・ロス・レイエス;圣塞瓦斯蒂安德洛斯雷埃斯; +city::3110044;San Sebastian;Donosti;Donostia;Donostia-San Sebastian;Donostia-San Sebastián;Donostio;EAS;La Bella Easo;Saint-Sebastien;Saint-Sébastien;San Sebastian;San Sebastián;San-Sebast'jan;Sanse;Sant Sebastia;Sant Sebastià;Sao Sebastiao;São Sebastião;san sbastyan;sheng sai wa si ti an;Сан-Себастьян;סן סבסטיאן;سان سباستيان;サン・セバスティアン;圣塞瓦斯提安; +city::3110718;Sant Cugat del Valles;Sant Cugat;Sant Cugat del Valles;Sant Cugat del Vallès; +city::3110834;Sant Boi de Llobregat;Sant Boi de Llobregat; +city::3111108;Salamanca;Helmantica;SLM;Salamanca;Salamanka;Salamanko;Salamanque;Salmantica;saramanka;slmnqt;Саламанка;سلمنقة;サラマンカ; +city::3111199;Sabadell;QSA;Sabadell; +city::3111294;Rubi;Rubi;Rubí;Руби; +city::3111933;Reus;REU;Reus;Реус; +city::3112989;Pozuelo de Alarcon;Posuehlo-de-Alarkon;Posuelo-de-Alarkon;Pozolum;Pozuelo;Pozuelo de Alarcon;Pozuelo de Alarcón;Pozuelo de Alarkon;bo su ai luo de ya la er kong;bwzwylw dy alarkwn;posuellodeallaleukon;Позуело де Аларкон;Посуело-де-Аларкон;Посуэло-де-Аларкон;بوزويلو دي الاركون;波苏埃洛德亚拉尔孔;포수엘로데알라르콘; +city::3113209;Pontevedra;PTE;Pontevedra;Pontevedro;pontebedora;Понтеведра;ポンテベドラ; +city::3113236;Ponferrada;PFE;Pomeriada;Ponferada;Ponferado;Ponferrada;bwnfyrada;peng fei la da;ponferada;ponpelada;Понферада;Понферрада;بونفيرادا;ポンフェラーダ;蓬费拉达;폰페라다; +city::3114256;Parla;Parla;barla;pa er la;Парла;بارلا;帕尔拉; +city::3114472;Pamplona;Gorad Pamplona;Iruinea;Iruna;Irunea;Iruña;Iruñea;Lungsod ng Irunea;Lungsod ng Iruñea;PNA;Pampalona;Pampeluna;Pampelune;Pamplona;Pamplonae;Pamplono;Pompaelo;bnblwnt;iruniya;pam po lna;pampalona;pampeullona;pamplwna;pan pu luo na;panpurona;pmplwnh;Горад Памплона;Памплонæ;Памплона;Պամպլոնա;פמפלונה;بنبلونة;پامپلونا;पाम्पलोना;இருனியா;ปัมโปลนา;პამპლონა;パンプローナ;潘普洛納;팜플로나; +city::3114531;Palencia;Gorad Palensija;Liste del villagies locata in Palencia;PCI;Palencia;Palencio;Palensija;Palentzia;Pallantia;Palència;Paléncia;Palência;balnthya;pa lun xi ya;pallensia;palnsya;parenshia;Горад Паленсія;Паленсия;Паленсија;Паленсія;بالنثيا;پالنسیا;パレンシア;帕伦西亚;팔렌시아; +city::3114711;Oviedo;Gorad Aueda;OVD;Ov'edo;Ovedo;Ovetum;Oviedo;Oviedu;Ovieu;Ovijedo;Ovjedas;Ovjedo;Uvieu;Uviéu;abydw;ao wei ye duo;awfyydw;awwydw;obiedo;ovhiyedo;oviedo;oviyeto;xo beiy do;Горад Аўеда;Овиедо;Овиједо;Овьедо;Овєдо;אוביידו;أوفييدو;ابیدو;اوویدو;ओव्हियेदो;ஒவியேதோ;โอเบียโด;ოვიედო;オビエド;奥维耶多;오비에도; +city::3114965;Ourense;OUQ;Orance;Orense;Orenso;Ourense;ourense;Оренсе;オウレンセ; +city::3116025;Mostoles;Gorad Mostales;Monsteles;Mostoles;Mostolesas;Mostolo;mo si tuo lai si;moseutolleseu;mosutoresu;mwstwls;mwstwlys;Горад Мосталес;Мостолес;מוסטולס;موستولس;موستوليس;მოსტოლესი;モストレス;莫斯托莱斯;모스톨레스; +city::3116553;Mollet del Valles;Mollet del Valles;Mollet del Vallès;Mollet del Vallés; +city::3117164;Mataro;Iluro;Mataro;Mataró;ma ta luo;matalo;mataro;matarw brshlwnt;Матаро;ماتارو، برشلونة;मातारो;マタロー;马塔罗;마타로; +city::3117533;Manresa;Manresa;Манреса; +city::3117667;Majadahonda;Majadahonda;Makhadaonda;Maxadahonda;ma ha da weng da;majadahwnda;Махадаонда;ماجاداهوندا;马哈达翁达; +city::3117735;Madrid;Gorad Madryd;La Villa y Corte de Madrid;Los Madriles;Lungsod ng Madrid;MAD;Ma-daik-li;Ma-tet-li;Madrid;Madrid osh;Madridas;Madride;Madridi;Madrido;Madrids;Madril;Madrit;Madrite;Madryt;Madríd;Madrîd;Magerit;Maidrid;Mairil;Makelika;Matritum;Mâ-tet-lî;Mā-dáik-lī;Sanchinarro;ma de li;madarida;madeulideu;madorido;madorido shi;madri;madrid;madrida;madridi;madryd;matrit;mdryd;myadrida;mydrd;Μαδρίτη;Горад Мадрыд;Мaдрид;Мадрид;Мадрид ош;Мадрід;Մադրիդ;מאדריד;מדריד;مادرىد;مادرید;مدريد;میدرد;مەدرید;ܡܕܪܝܕ;मद्रिद;मद्रिद्;माद्रिद;माद्री;म्याड्रिड;মাদ্রিদ;ਮਾਦਰੀਦ;ମାଡ୍ରିଦ;மத்ரித்;ಮಡ್ರಿಡ್;മാഡ്രിഡ്;มาดริด;མ་ད་རིད།;မဒရစ်မြို့;მადრიდი;ማድሪድ;マドリード;マドリード市;馬德里;马德里;마드리드; +city::3117814;Lugo;LUY;Lugo;lwghw;rugo;Луго;لوغو;ルーゴ; +city::3118150;Logrono;Gorad Lagron'ja;Logron'jo;Logron'o;Logronh;Logronio;Logronjas;Logronjo;Logrono;Logronu;Logronyo;Logroño;Logroñu;Lucronium;RJL;lgrnyw;lo koryo;logeulonyo;logron'yo;logronyo;luo ge luo ni ao;lwghrwnyw;lwgrwnw;lwgrwnyw;roguronyo;Λογρόνιο;Горад Лагронья;Логроньйо;Логроньо;Логроњо;Լոգրոնյո;לוגרוניו;لوغرونيو;لوگرونو;لگرنیو;लोग्रोंयो;लोग्रोन्यो;โลโกรโญ;ログローニョ;洛格罗尼奥;로그로뇨; +city::3118514;Lleida;ILD;Ilerda;Ilerdo;Lerida;Lheida;Lhèida;Ljeida;Lleida;Lérida;lyydh;rerida;ryeida;Љеида;Лерида;ליידה;リェイダ;レリダ; +city::3118532;Leon;Ciuda de Llion;Ciudá de Llión;LEN;Leon;Leono;León;Lleo;Lleon;Lleó;Lleón;lywn;reon;Леон;ليون;レオン; +city::3118594;Leganes;Gorad Leganes;Legamar;Leganes;Leganesas;Leganés;lai jia nei si;leganeseu;lyjanys;reganesu;Горад Леганес;Леганес;ليجانيس;レガネス;萊加內斯;레가네스; +city::3118848;Las Rozas de Madrid;Las Rozas;Las Rozas de Madrid;Las-Rosas-de-Madrid;Rozae Matritenses;Rozas de Madrid;la si luo sa si de ma de li de;las rwzas dy mdryd;Лас-Росас-де-Мадрид;Розас де Мадрид;لاس روزاس دي مدريد;拉斯罗萨斯德马德里德; +city::3119841;A Coruna;A Coruna;A Coruña;A Cruna;A Cruña;A Koruna;A-Korun'ja;Akoruna;Akoruņa;Caronium;Coruna;Corunako;Corunha;Corunya;Coruña;Coruñako;Corùna;In Coruna;In Coruña;Koruna;Korunjo;LCG;La Corogne;La Coronha;La Coruna;La Coruña;La Koruna;La Korunja;La Korunya;La-Karun'ja;La-Korun'ja;La-Korunya;The Groyne;la ke lu ni ya;la kwrwnya;lakolunya;lakrwnya;xa ko ruya;А Коруња;А-Корунья;Коруња;Ла Коруня;Ла-Карунья;Ла-Корунья;Լա Կորունա;א קורוניה;اے کرونا;لا كورونيا;لا کۆرونیا;لاکرونیا;อาโกรูญา;ლა-კორუნია;ア・コルーニャ;拉科魯尼亞;라코루냐; +city::3120304;Irun;Irun;Irun-Uranzu;Irún;Irún-Uranzu;yi lun;Ирун;伊倫; +city::3120514;Huesca;Gorad Uehska;Gueesca;Güesca;HSK;Huesca;Hueska;Osca;Oska;Uehska;Uesca;Ueska;hwyska;ueseuka;uesuka;wei si ka;wshqt;Òsca;ʼwʼsqh;Горад Уэска;Уеска;Уэска;אואסקה;هوئسکا;وشقة;ウエスカ;韦斯卡;우에스카; +city::3120619;L'Hospitalet de Llobregat;Hospitalet de Llobregat;Ospitalet-de-L'obregat;l'Hospitalet;l'Hospitalet de Llobregat;Оспиталет-де-Льобрегат; +city::3121007;Getxo;Getxo;Guecho; +city::3121070;Guadalajara;GDU;Guadalajara;Gvadalaharo;Gvadalakhara;guadarahara;Гвадалахара;グアダラハラ; +city::3121145;Granollers;Granollers; +city::3121424;Gijon;Chichonas;Gigia;Gijon;Gijón;Gorad Khikhon;Hihono;Khikhon;Kixoi;QIJ;Xixon;Xixón;gyjwn;hihon;hyhwn;khi khxn;khikhoni;khykhn;khykhwn;kikon;xi hong;Ĥiĥono;Горад Хіхон;Хихон;Хіхон;חיחון;خيخون;خیخن;خیخۆن;گیجون;கிகோன்;คีคอน;ხიხონი;ヒホン;希洪;히혼; +city::3121437;Getafe;Chetafe;Chetafė;Getafe;Gorad Khetafeh;Khetafe;Tituacia;Xetafe;he ta fei;hetafe;hetape;khe tafe;khytafy;Χετάφε;Горад Хетафэ;Хетафе;خيتافي;เคตาเฟ;ヘタフェ;赫塔费;헤타페; +city::3121456;Girona;GRO;Gerona;Gerone;Girona;Girono;Gérone;Kherona;Zherona;jirona;Ĝirono;Жерона;Херона;ジローナ; +city::3121960;Fuenlabrada;Fons Laborata;Fuehnlabrada;Fuenlabrada;Gorad Fuehnlabrada;feng la fu la da;fuenraburada;fwynlabrada;Горад Фуэнлабрада;Фуенлабрада;Фуэнлабрада;פואנלברדה;فوينلابرادا;フエンラブラダ;丰拉夫拉达; +city::3123329;El Prat de Llobregat;Al-Prat-da-Ljubragat;Ehl' Prat;Ehl'-Prat-de-L'obregat;El Prat de Llobregat;Prat de LJobregat;Prat de Llobregat;Prat del Llobregat;ai er pu la te de e fu lei jia te;al bart dy ywbryghat;el Prat;el Prat de Llobregat;Ал-Прат-да-Любрагат;Прат де Љобрегат;Эль Прат;Эль-Прат-де-Льобрегат;إل بارت دي يوبريغات;アル・プラ・ダ・リョブレガート;埃尔普拉特德略夫雷加特; +city::3123493;Ferrol;El Ferrol;Ferrol; +city::3124132;Cuenca;CEJ;Conca;Cuenca;Cuenca i Spania;Gorad Kuehnka;Kouen'ka;Kuehnka;Kuenka;Kvenko;ke wng ka;ku'ainaka;ku'ainka;kuengka;kuenka;kun ka;kwynka;qwnkt;Κουένκα;Горад Куэнка;Куенка;Куэнка;Կուենկա;קואנקה;قونكة;کوئنکا;کوینکا، ہسپانیہ;कुऐनका;ਕੁਐਂਕਾ;เกวงกา;კუენკა;クエンカ;昆卡;쿠엥카; +city::3124408;Coslada;Coslada;Coslata;Koslada;Koslado;ke si la da;kosurada;kwslada;Кослада;كوسلادا;コスラーダ;科斯拉达; +city::3124569;Cornella de Llobregat;Cornella de Llobregat;Cornellà de Llobregat; +city::3124794;Collado-Villalba;Collado Villalba;Kol'jado-Vil'jal'ba;Кольядо-Вильяльба; +city::3124964;Ciudad Lineal;Barrio Ciudad Lineal;Ciudad Lineal;Ciudad Lineal distritu;Linia Urbo;swydad lynyal;سويداد لينيال;シウダー・リネアル; +city::3125239;Chamartin;Chamartin;Chamartin de la Rosa;Chamartín;Chamartín de la Rosa;Distrito Chamartin;Distrito Chamartín; +city::3125897;Castelldefels;Castelldefels; +city::3127461;Burgos;Bourgos;Burgi;Burgos;Burgosa;Burgosas;Burgoso;Burgus;Burqos;Gorad Burgas;RGS;brghsh;brgws;bu er ge si;buleugoseu;bur kos;burgosa;burugosu;bwrgws;Μπούργος;Бургос;Горад Бургас;Բուրգոս;בורגוס;برغش;برگوس;بورگوس;बुर्गोस;บูร์โกส;ブルゴス;布尔戈斯;부르고스; +city::3128026;Bilbao;BIO;Bil'bao;Bilbao;Bilbau;Bilbaum;Bilbaw;Bilbo;Bilbo / Bilbao;Bilmpao;El Bocho;Gorad Bil'baa;bi er ba e;bil ba xo;bilba'o;bilbao;birubao;blbaw;bylbaw;bylbayw;Μπιλμπάο;Билбао;Бильбао;Більбао;Горад Більбаа;Բիլբաո;בילבאו;بلباو;بیلبائو;بیلباو;बिल्बाओ;บิลบาโอ;ბილბაო;ビルバオ;毕尔巴鄂;빌바오; +city::3128760;Barcelona;BCN;Barcellona;Barcellonn-a;Barcelona;Barcelone;Barcelono;Barceluna;Barcelůna;Barcełona;Barcillona;Barcino;Barkelone;Barseloana;Barselon;Barselona;Barselonae;Barselono;Barseluna;Barseluona;Barselóna;Barslon-a;Barsélona;Bartzellona;Bartzelona;Barzelona;Barçellonn-a;Barċellona;Gorad Barselona;Lungsod ng Barcelona;ba sa long na;ba sai luo na;baleusellona;balsaleana;bar se lon a;barasilona;barselona;barsilona;barslwn;barslwna;barsylwna;barsێlۆna;baruserona;brshlwnt;brshlwnہ;brzlwnh;la Ciudad Condal;parcelona;Βαρκελώνη;Барселон;Барселонæ;Барселона;Барселоно;Горад Барселона;Բարսելոնա;בארצעלאנע;ברצלונה;بارسلون;بارسلونا;بارسیلونا;بارسێلۆنا;برشلونة;برشلونہ;बार्सिलोना;बार्सेलोना;বার্সেলোনা;ਬਾਰਸੀਲੋਨਾ;பார்செலோனா;ബാഴ്സലോണ;บาร์เซโลนา;ບາກເຊໂລນ;བྷར་སེ་ལོ་ནཱ།;ဘာစီလိုနာမြို့;ბარსელონა;ባርሴሎና;バルセロナ;巴塞罗那;巴薩隆拿;바르셀로나; +city::3129028;Badalona;Badalona;Gorad Badalona;ba da lon a;ba da luo na;badallona;badalona;badalwna;badarona;Μπαδαλόνα;Бадалона;Горад Бадалона;Բադալոնա;بادالونا;बाडालोना;บาดาโลนา;ბადალონა;バダロナ;巴达洛纳;바달로나; +city::3129135;Aviles;Aviles;Avilesas;Avileso;Avilés;a wei lai si;abilleseu;abiresu;abyls;afylys;awyls;Авилес;Авілес;آبیلس;أفيليس;اویلس;アビレス;阿维莱斯;아빌레스; +city::3129136;Avila;AVJ;Abela;Abila;Abula;Aebura;Albicella;Avela;Avila;Avila de los Caballeros;Avila de los Leales;Avila de los Santos;Avila del Rey;Avilo;Obila;abira;Àvila;Ávila;Ávila de los Caballeros;Ávila de los Leales;Ávila de los Santos;Ávila del Rey;Авила;アビラ; +city::3129636;Arganda;Arganda;Arganda del Rey;Арганда; +city::3129857;Aranjuez;Aranchuesas;Aranguesia;Aranjuez;Arankhuehs;Arankhues;Arankhuez;a lan hu ai si;alanhueseu;aranfuesu;arnkhwyth;Аранхуез;Аранхуес;Аранхуэс;ארנחואס;آرنخويث;アランフエス;阿兰胡埃斯;아란후에스; +city::3130564;Alcorcon;Al'korkon;Alcorcon;Alcorconum;Alcorcón;Alkorkon;Alkorkonas;Alkorkono;Gorad Al'karkon;a er ke er kong;alkoleukon;alkwrkwn;arukorukon;Алкоркон;Алькоркон;Горад Алькаркон;ألكوركون;アルコルコン;阿尔科尔孔;알코르콘; +city::3130583;Alcobendas;Al'kobendas;Alcobendas;Alcovendae;Alkobendas;Alkobendasas;a er ke wen da si;alkobendaseu;alkwbyndas;arukobendasu;Алкобендас;Алькобендас;ألكوبينداس;アルコベンダス;阿尔科文达斯;알코벤다스; +city::3130616;Alcala de Henares;Al'kala-de-Ehnares;Al'kala-de-Enares;Alcala de Henares;Alcalá de Henares;Alcála de Henares;Alkala de Enares;Alkala de Henaresas;Alkala nte Enares;Compluto;Complutum;Cómpluto;Gorad Al'kala-deh-Ehnarehs;ai na lei si bao;alkala dy aynarys;alkalladeenaleseu;arukara・de・enaresu;xal ka lade xe na res;Αλκαλά ντε Ενάρες;Алкала де Енарес;Алькала-де-Енарес;Алькала-де-Энарес;Горад Алькала-дэ-Энарэс;אלקלה דה אנארס;ألكالا دي إيناريس;الكالا دى ايناريس;อัลกาลาเดเอนาเรส;ალკალა-დე-ენარესი;アルカラ・デ・エナーレス;埃纳雷斯堡;알칼라데에나레스; +city::6362987;Ceuta;Ceuta;JCU;Seuta;Сеута; +city::6618856;Santutxu;; +city::328689;Shashemene;Sciasciamanna;Sciasciamanne;Shashamana;Shashamane;Shashamani;Shashamanna;Shashamanni;Shashamané;Shashemene;Shashemenē;Shāshamani;ሻሸመኔ; +city::330186;Nazret;Adama;Hadama;Nazareth;Nazret;Nazreth;Nazrēt; +city::331180;Mek'ele;MQX;Macalle;Macallè;Makale;Makalle;Maqale;Maqalle;Maqalē;Mehkehle;Mek'ele;Mekele;Mekelie;Mekelle;Mek’ele;me khele;mo ke lai;mqlh;Мекеле;Мэкэле;מקלה;میکیلے;เมเคเล;መቀሌ;默克萊; +city::333373;Kombolcha;Cambolcia;Combolcha;Combolcia;DSE;Kambolcha;Kambolchā;Kembolcha;Kombol'cha;Kombolcah;Kombolcha;Комбольча; +city::333772;Jimma;Djimma;Gima;Gimma;JIM;Jima;Jimma;Jīma; +city::333795;Jijiga;Djidjiga;Djigdjiga;Dschidschiga;Dzhidzhiga;Dzidziga;Dżidżiga;Džidžiga;Giggiga;Giggigga;Gigiga;JIJ;Jigjiga;Jigjigga;Jijiga;gygygh;ji ji jia;jijiga;jyjyga;Ĝiĝiga;Джиджига;גיגיגה;جیجیگا;ጅጅጋ;吉吉加;지지가; +city::334227;Inda Silase;Enda Salassie;Enda Selase;Enda Selassie;Enda Selassye;Enda Sellassie;Endā Selāsē;Inda Selassie;Inda Silase;Inda Silasē;SHC;Shire Inda Silase;Shirē Inda Silasē;Ynda Syllase; +city::335035;Harar;Charar;Gorad Kharehr;Harar;Harar Jugol;Hararas;Harer;Harrar;Hārar;Hārer;Kharar;Kharehr;Kharer;ha lei er;halaleu;harara;harari;hararu;hrr;Χαράρ;Горад Харэр;Харар;Харер;Харэр;הרר;هرر;ہرار;हरार;ਹਾਰਰ;ჰარარი;ሐረር;ハラール;哈勒尔;하라르; +city::336014;Gondar;GDQ;Gondar;Gondehr;Gonder;Gonderas;Gondero;Gwender;Gwonder;Nkontair;gondaleu;gondaru;gong de er;gwndr;Γκόνταιρ;Гондар;Гондэр;גונדר;ጎንደር ከተማ;ゴンダール;貢德爾;곤다르; +city::338832;Dire Dawa;D'ire Daua;DIR;Daredawa;Dirdabo;Dirdabò;Dire Daba;Dire Daua;Dire Dawa;Dire Dewa;Dire-Daoua;Direaoua;Diredavy;Dirediua;Diré-Daoua;Dirē Dawa;D’ire Daua;dile dawa;dyrt dawa;Диредавы;דירה דאווה;ديرة داوا;ድሬዳዋ;디레 다와; +city::339219;Dese;Dase;Dasē;Dese;Desje;Dessa;Dessi;Dessie;Dessye;Desē;Desė; +city::339666;Bishoftu;Biscioftu;Biscioftù;Bishoftu;Debra Zeit;Debre Zeit;Debre Zeyit;Debre Zeyt; +city::339708;Debre Mark'os;DBM;Dabra Marko's;Dabra Mārko’s;Dabra-7arqos;Dabra-7ārqos;Debra Marcos;Debra Markos;Debre Marcos;Debre Mark'os;Debre Mark’os;Moncorer;Monkorer; +city::339734;Debre Birhan;Dabra Berham;Dabra-Berhan;Dabra-Berhān;Debra Berham;Debra Berhan;Debra Birhan;Debra Brehan;Debre Berhan;Debre Birhan; +city::342884;Bahir Dar;BJR;Babardur Georgis;Bachr-Ntar;Bahar;Bahar Dar;Bahar Dar Ghiorghis;Baher Dar;Baherdar-Giyorgis;Bahir Dar;Bahr Dar;Bahrdar Giyergio;Bahrdar Giyorgis;Bahyr Dar;Bakhir Dar;Bakhr-Dar;Bāherdār-Giyorgis;ba he da er;bahileudaleu;bahr-dari;bhr dar;bhr dr;Μπαχρ-Νταρ;Бахир Дар;Бахр-Дар;בהר דר;بحر دار;ბაჰრ-დარი;ባሕር-ዳር;巴赫達爾;바히르다르; +city::343137;Hawassa;AWA;Avase;Awasa;Awassa;Hawassa;Āwasa;ʼwwsh;Авасе;אווסה; +city::343663;Arba Minch;AMH;Arba Mench;Arba Minch;Arba Mintch;Arba-Mynch;Gantar;Minghi;Арба-Мынч;አርባ ምንጭ; +city::344979;Addis Ababa;ADD;Addis Ababa;Addis Abbaba;Addis Abeba;Addis-Abeba;Addis-Abebae;Addisz-Abeba;Adis Abeba;Adis-Abebo;Adisabeba;Adís Abeba;Antis Ampempa;Neanthopolis;a di si a bei ba;adisa ababa;adiseuababa;adisuabeba;adys ababa;Ādīs Ābeba;Αντίς Αμπέμπα;Аддис-Абебæ;Аддис-Абеба;Адис Абеба;Ադիս Աբեբա;אדיס אבבה;آدیس آبابا;أديس أبابا;ئەددىس -ئەبىبە;अदिस अबाबा;አዲስ አበባ;アディスアベバ;阿迪斯阿貝巴;아디스아바바; +city::345149;Adigrat;; +city::632453;Vantaa;Gorad Vantaa;Vanda;Vanta;Vantaa;Vantania;Vantā;banta;fanta;vhanta;vu~anta;wan ta;wanta;wnth;Βάνταα;Ванта;Вантаа;Горад Вантаа;ונטה;فانتا;وانتا;व्हंटा;ვანტაა;ヴァンター;万塔;반타; +city::632978;Vaasa;Gorad Vasa;Nikolainkaupunki;Nikolaistad;VAA;Vaasa;Vas;Vasa;Wasa;basa;fasa;vu~asa;wa sa;wasa;Βάασα;Вааса;Васа;Горад Васа;ואסה;فآسا;وآسا;วาซา;ヴァーサ;瓦萨;바사; +city::633679;Turku;Abo;Aboa;Gorad Turku;TKU;Tourkou;Turcu;Turku;Turkù;Turu;Túrcú;to~uruku;trkw;tu er ku;tu rku;tuleuku;turku;twrkw;twrqw;Åbo;Τούρκου;Горад Турку;Турку;Տուրկու;טורקו;ترکو;توركو;تورکو;तुर्कू;টুর্কু;ตุรกุ;တားကူးမြို့;ტურკუ;ቱርኩ;トゥルク;图尔库;圖爾庫;투르쿠; +city::634963;Tampere;Gorad Tampereh;TMP;Tammerfors;Tammerforsia;Tampere;Tampereh;Tamperė;amabere;tambyry;tampele;tampere;tamprh;tan pei lei;tanpere;tmprh;Τάμπερε;Горад Тамперэ;Тампере;Տամպերե;טמפרה;تامبيري;تامپره;تامپیرے;ٹیمپیر;तांपेरे;আমবেরে;ตัมเปเร;ტამპერე;タンペレ;坦佩雷;탐페레; +city::640999;Pori;Arctopolis;Berneborg;Bjoerneborg;Björneborg;Bërneborg;Gorad Pory;POR;Pori;Poris;bo li;bwry;poli;pori;pwry;Πόρι;Горад Поры;Пори;Порі;Պոռի;פורי;بوري;پوری;ポリ;波里;포리; +city::643492;Oulu;Gorad Oulu;OUL;Ooulou;Oulo;Oulu;Oulu linn;Ovlu;Oŭlo;Uleaborg;Uleoborg;Uleåborg;Uloa;ao lu;awlu;awlw;awlw fnland;awwlw;oullu;ouru;xow lu;Όουλου;Горад Оўлу;Овлу;Оулу;אואולו;أولو;اوؤلو;اولو، فنلاند;اولُو;โอวลุ;オウル;奥卢;奧盧;오울루; +city::648900;Lappeenranta;Gorad Lapeehnranta;LPP;Lapeenranta;Lapenrand;Lapenranta;Lappeehnranta;Lappeenranta;Lappeenranta linn;Lappenranta;Lapēnranta;Villmanstrand;la peng lan ta;la pu lan da;labynrnta;lapenlanta;laprnta;lapynranta;lpyn rnta;rappenranta;Λαπεενράντα;Горад Лапеэнранта;Лапенранта;Лаппеенранта;Лаппенранта;Лаппеэнранта;לאפנראנטה;لابينرنتا;لاپرنتا;لاپینرانتا;لپین رنتا;ლაპეენრანტა;ラッペーンランタ;拉彭兰塔;拉普兰大;라펜란타; +city::649360;Lahti;Gorad Lakhty;Lachti;Laht;Lahti;Lahtis;Lakhti;Laxti;QLF;la he di;lah ti;lahty;lakhty;lati;rahati;Λάχτι;Горад Лахты;Лахти;Лахті;לאהטי;لاختی;لاهتي;لاہتی;ลาห์ตี;ラハティ;拉赫蒂;라티; +city::650224;Kuopio;KUO;Kouopio;Kuopijas;Kuopio;Kuopio linn;ko peiyw;ku ao pi ao;kuopio;kwwbyw;kwwpyw;qwpyw;Κουόπιο;Куопио;Куопіо;קופיו;كووبيو;کؤوپیو;کووپیو;โกเปียว;კუოპიო;クオピオ;庫奧皮奧;쿠오피오; +city::650946;Kotka;Gorad Kotka;Kotk;Kotka;Kotka linn;Kotko;Kòtka;Ruotsinsalmi;Svensksund;ke te ka;koska;kotoka;kwtka;qwtqh;Κότκα;Горад Котка;Котка;קוטקה;كوتكا;کوتکا;コトカ;科特卡;콧카; +city::655194;Jyvaeskylae;Gorad Juvjaskjulja;Granivicus;Gyvaskyla;JYV;Jiveskile;Jjuvjaskjulja;Juevaeskuelae;Juvaskula;Juveskiule;Juveskiulė;Juvjaskjulja;Jyvaeskylae;Jyvaeskylae linn;Jyvaskyla;Jyväskylä;Jyväskylä linn;Jüväskülä;iwibeseukwille;jywaskyla;yu wei si qu lai;yuvu~asukyura;ywaskwla;ywfaskwla;yybsqylh;yywaskyla;Γυβάσκυλα;Јивескиле;Горад Ювяскюля;Йювяскюля;Йӱвӓскӱлӓ;Ювяскюля;ייבסקילה;جیواسکیلا;يوفاسكولا;یواسکولا;ییواسکیلا;ยูแวสกูแล;ユヴァスキュラ;于韦斯屈莱;이위베스퀼레; +city::655808;Joensuu;JOE;Joehnsu;Joehnsu osh;Joehnsuu;Joensu;Joensuu;Joensuu linn;Joensū;Jogensu;Jovensuu;Ostia Carelorum;Yoensu;jwynsw;yoensu;yue en su;ywynsw;Ёэнсу;Јоенсу;Йоенсуу;Йоэнсу ош;Йоэнсуу;יואנסואו;جوئنسو;يوينسو;یوئنسو;ヨエンスー;约恩苏;요엔수; +city::658225;Helsinki;Elsin'ki;Elsinki;Elzinki;Gel'sinki;Gorad Khel'sinki;HEL;Heilsinci;Heilsincí;Hel'sinki;Helsenkis;Helsingfors;Helsingi;Helsingia;Helsinki;Helsinkis;Helsinkium;Helsinko;Helsinky;Helsinqui;Helsinquia;Helsset;Helsínquia;Helsînkî;Helsėnkis;Hèlsinki;Khel'sinki;Khel'sinki osh;Khelsinki;Khelzinki;Lungsod ng Helsinki;Stadi;Xelsinki;Xélsinki;elcinki;hailasiki;he er xin ji;helasinki;helsingki;helsinki;herushinki;hlsnky;hlsnqy;hlsynky;hlsynqy;hylsynky;Èlzinki;Ħelsinki;Ελσίνκι;Гельсінкі;Горад Хельсінкі;Хелзинки;Хелсинки;Хельсинки;Хельсинки ош;Ҳелсинкӣ;Һel'sinki;Һельсинки;Հելսինկի;הלסינקי;העלסינקי;هلسنكي;هلسنڪي;هلسینکی;هيلسينكى;هیلسینکی;ھێلسینکی;ہلسنکی;ہیلسنکی;ܗܠܣܢܩܝ;हेलसिंकी;हेल्सिन्की;হেলসিঙ্কি;ਹੈਲਸਿੰਕੀ;எல்சிங்கி;ಹೆಲ್ಸಿಂಕಿ;ഹെൽസിങ്കി;เฮลซิงกิ;ཧེལ་སིན་ཀི།;ဟယ်လ်ဆင်ကီမြို့;ჰელსინკი;ሄልሲንኪ;Ḥélsinki;ヘルシンキ;赫尔辛基;赫爾辛基;헬싱키; +city::660158;Espoo;Ehspoo;Esbo;Espo;Espoo;ai si bo;esupo;Έσποο;Еспо;Еспоо;Эспоо;ესპოო;エスポー;埃斯波; +city::2198148;Suva;Gorad Suva;SUV;Souba;Souva;Sufa;Suv;Suva;Suva City;Suvae;Suvo;Suwa;cuva;su wa;suba;subha;suva;suwa;swbh;swfa;swwa;Σούβα;Горад Сува;Сувæ;Сува;Սուվա;סובה;سوفا;سووا;सुवा;সুভা;ਸੂਵਾ;சுவா;ซูวา;སུ་ཝ།;სუვა;ሱቫ;スバ;蘇瓦;수바; +city::2204506;Lautoka;Lautok;Lautoka;lao tuo ka;lautoka;lawtwka;lutokka;lwtwqh;rautoka;Лаутока;לוטוקה;لاوتوكا;لاوتوکا;लौतोका;லூடோக்கா;ラウトカ;劳托卡;라우토카; +city::2967849;Vitry-sur-Seine;Port-de-Marat;Vitri sir Sen;Vitri sjur Sen;Vitri-sjur-Sen;Vitry;Vitry-sur-Seine;biteuliswileusen;fytry swr syn;sai na he pan wei ti;vu~itori=shuru=senu;wytry swr sn;wytry-swr-sn;Витри сир Сен;Витри сюр Сен;Витри-сюр-Сен;Вітрі-сюр-Сен;فيتري سور سين;ویتری سور سن;ویتری-سور-سن;ヴィトリー=シュル=セーヌ;塞纳河畔维提;비트리쉬르센; +city::2968254;Villeurbanne;Gorad Vijorban;Vijjorban;Vilerban;Vilerbana;Vilerbanas;Vilerbāna;Viljurban;Villerbann;Villeurbanne;billoeleuban;fylwrban;vilerbani;vu~iruruban'nu;wei lei ban;wei lei he peng na;wywrbn;Вийёрбан;Вилербан;Вилюрбан;Віллербанн;Горад Віёрбан;וילרבאן;فيلوربان;ولےاربین;ویوربن;ვილერბანი;ヴィルールバンヌ;维勒班;维嘞合朋纳;빌뢰르반; +city::2969679;Versailles;Berceau-de-la-Liberte;Berceau-de-la-Liberté;Bersallies;Versailles;Versaj;Versajlo;Versal';Versalhes;Versalia;Versaliae;Versalis;Versalles;Wersal;XVE;beleusayu;vu~erusaiyu;Βερσαλλίες;Версай;Версаль;ורסאי;ヴェルサイユ;베르사유; +city::2970072;Venissieux;Venis'e;Venis'jo;Venisje;Venissieux;Venissioex;Vènissiœx;Vénissieux;benisioe;vu~enishu;wei ni xi e;wnysyw;Венисье;Венисьё;Венисје;Венісьє;ونیسیو;ヴェニシュー;維尼西厄;베니시외; +city::2970777;Vannes;Dariorigum;Gwened;VNE;Van;Vanas;Vann;Vannes;Venetens;ban;fan;vani;vu~an'nu;wa ne;wns;Ван;Ванн;באניס;ואן;فان;ونس;ვანი;ヴァンヌ;瓦讷;반; +city::2971053;Valence;VAF;Valenca;Valence;Valencia;Valença;valansa;vu~aransu;वलांस;ヴァランス; +city::2971549;Troyes;QYR;Trecae;Troa;Troias;Troua;Troyes;Trua;Tròias;te lu wa;teulua;thraw;torowa;trwa;trwa fransh;Τρουά;Троа;Труа;טרואה;تروئے;تروا;تروا، فرانسه;ทรัว;トロワ;特鲁瓦;트루아; +city::2972191;Tours;Augusta-Turonum;Gorad Tur;La Reunion-du-Nord;La Réunion-du-Nord;TUF;Teurgn;Tors;Tour;Tours;Tur;Tura;Turas;Turones;Tūra;Tūras;to~uru;tu er;tuleu;tura;twr;Τουρ;Горад Тур;Тур;Տուր;טור;تور;ٹورز;टुर;तुर;ტური;トゥール;图尔;투르; +city::2972284;Tourcoing;Terkoeje;Toerkonje;Tourco;Tourcoing;Turcundium;Turkoan;Turkuehn;Turkuen;XTN;to~urukowan;tu er kuan;tuleukuaeng;turk wng;twrkwan;twrkwyngh;Туркоан;Туркуен;Туркуэн;توركوينغ;تورکوآن;ٹورکونگ;ตูร์กวง;トゥールコワン;图尔宽;투르쿠앵; +city::2972315;Toulouse;Gorad Tuluza;Lapangan Terbang Blagnac;TLS;Tolosa;Tolosa Okzitania;Tolosa de Francia;Tolosa de Llenguadoc;Toloxa;Toloza;Toulouse;Toulouz;Tołoxa;Tuluz;Tuluza;Tuluzae;Tuluzo;Tulūza;Tólóza;to~uruzu;tu lu zi;tu lus;tullujeu;tulujha;tulus;tuluza;twlwz;Τουλούζ;Горад Тулуза;Тулузæ;Тулуза;Тулузо;Թուլուզ;טולוז;تولوز;तुलूज़;तुलूझ;ਟੁਲੂਜ਼;துலூஸ்;ടൂളൂസ്;ตูลูซ;ཊོའུ་ལོའུ་སེ།;ტულუზა;ቱሉዝ;トゥールーズ;圖盧茲;圖魯茲;툴루즈; +city::2972328;Toulon;Gorad Tulon;Port-la-Montagne;TLN;Telo Martius;Tolo;Tolon;Tolone;Toló;Tolón;Toulon;Toulon-sur-Mer;Tulon;Tulona;Tulonas;Tuluni;to~uron;tu lng;tu lun;tulam;tullong;tulom;tulon;twlwn;Τουλόν;Горад Тулон;Тулон;Տուլոն;טולון;تولون;طولون;तुलाँ;तुलों;துலோன்;ടൂളാൻ;ตูลง;ტულონი;トゥーロン;土伦;土倫;툴롱; +city::2973385;Tarbes;Tarb;Tarba;Tarbas;Tarbe;Tarbes;XTB;ta bu;taleubeu;tarb;tarubu;Ταρμπ;Тарб;تارب;ཊར་བེ།;タルブ;塔布;타르브; +city::2973783;Strasbourg;Argentoratum;Estrasborg;Estrasbou;Estrasburg;Estrasburgo;Estrasburgu;Gorad Strasbur;Lungsod ng Strasbourg;SXB;Sjtraasburg;Straasburch;Straasbuurich;Straatsburg;Strasborg;Strasborgh;Strasbourg;Strasbourgo;Strasbura;Strasburas;Strasburg;Strasburgo;Strasburgu;Strasburk;Strasburq;Strasbwrg;Strasbôrg;Strasbūra;Strasbūras;Strassborg;Strassbourg;Strassburg;Straszburg;Strazbur;Strazburg;Strazburgu;Straßborg;Straßburg;Strażburgu;Stroatsburg;Stroosburi;Stroossbuerg;Strossburg;Strǣtburg;astrasbwrg;s thra sbur;satarasabaraga;seuteulaseubuleu;si te la si bao;stiraspurk;strasabarga;strasaborga;strasaburga;strasbwrg;strasbwrgh;strsbwrg;sutorasuburu;Štrasburg;Štrasburk;Στρασβούργο;Горад Страсбур;Стразбур;Страсбург;Ստրասբուրգ;שטראסבורג;שטרסבורג;استراسبورگ;ستراسبورغ;ستراسبورگ;شٹراسبرگ;स्ट्रासबर्ग;स्त्रासबुर्ग;ਸਟਰਾਸਬਰਗ;સ્ટ્રાસબોર્ગ;ஸ்திராஸ்பூர்க்;സ്ട്രാസ്ബർഗ്;สทราซบูร์;སི་ཐི་རཱ་སི་བུར།;სტრასბური;ስትራዝቡርግ;ストラスブール;斯特拉斯堡;스트라스부르; +city::2975921;Sartrouville;Sartrouville;Sartruvil;Sartruvil';sa te lu wei er;saleuteulubil;sartrwfyl;sartrwwyl;sarutoruvu~iru;srtrwwyl;Сартрувил;Сартрувиль;Сартрувіль;سارتروفيل;سارتروویل;سرتروویل;サルトルーヴィル;薩特魯維爾;사르트루빌; +city::2976043;Sarcelles;Sarcelles;Sarcelles-Lochere;Sarcelles-Lochère;Sarsel;Sarsel';sa er sai lei;saleusel;sarsl;sarsyl;saruseru;srsl;Сарсел;Сарсель;סרסל;سارسل;سارسيل;سرسل;サルセル;薩爾塞勒;사르셀; +city::2977295;Saint-Quentin;Egalite-sur-Somme;Egalité-sur-Somme;Linon-sur-Somme;Saint-Quentin;Somme-Libre; +city::2977921;Saint-Nazaire;Fanum Sancti Nazarii in Sinnuario;SNR;Sain-Nazair;Saint-Nazaire;Sant-Nazer;Sen Nazer;Sen Nazeras;Sen-Nazer;cen nacer;saengnajeleu;san=nazeru;sheng na ze er;sn nzr;sn-nzr;Σαιν-Ναζαίρ;Сен Назер;Сен-Назер;سن نزر;سن-نزر;سینٹ-نظارے;சென் நசேர்;แซ็ง-นาแซร์;サン=ナゼール;圣纳泽尔;생나제르; +city::2978179;Saint-Maur-des-Fosses;Saint-Maur;Saint-Maur-des-Fosses;Saint-Maur-des-Fossés;Saint-Maur-les-Fosses;Saint-Maur-les-Fossés;Sen Mor de Fose;Sen-Mor-de-Fosse;Vivant-sur-Marne;saengmoleudepose;san mwr dyh fwsyh;san=moru=de=fosse;sheng mo dai fu sai;sn mwr dfwsh;sn-mr-d-fwsh;Сен Мор де Фосе;Сен-Мор-де-Фоссе;سان مور ديه فوسيه;سن مور دفوسه;سن-مر-د-فوسه;سینٹ-موڑ-دس-فوسسس;サン=モール=デ=フォッセ;圣莫代福塞;생모르데포세; +city::2978640;Saint-Malo;Commune-de-la-Victoire;DNR;Maclovium;Mont-Mamet;Port-Malo;Sain-Malo;Saint Malo;Saint Mâlo;Saint-Malo;Sant-Malou;Sant-Maloù;Sen Malo;Sen-Malo;Senmalo;St-Malo;saengmallo;san malw;sen-malo;sheng ma luo;sn mlw;sn-mlw;Σαιν-Μαλό;Сен Мало;Сен-Мало;סן-מלו;سان مالو;سن ملو;سن-ملو;سینٹ-ملو;แซ็ง-มาโล;სენ-მალო;サン・マロ;圣马洛;생말로; +city::2980291;Saint-Etienne;Armes-Ville;Canton-d'Armes;Commune-d'Armes;EBU;Libre-Ville;Lungsod ng Saint-Etienne;Lungsod ng Saint-Étienne;Saint-Etien;Saint-Etienne;Saint-Étienne;Sainte;Sainté;Sanctus Stephanus de Furano;Sankta-Stefano;Sant Esteve;Sant Estève;Sant-Etieve;Sant-Etiève;Sent Etien;Sent Etjen;Sent Etjenas;Sent-Ehc'en;Sent-Eht'en;Sent-Et'en;Sent-Etyen;Sentetjena;Sentetjēna;St Etienne;St Étienne;saengtetien;san=techien'nu;san=tetien'nu;sant atyan;senta-etyena;sheng ai di an;sn-atyn;snt atyn;Σαιντ-Ετιέν;Сент Етиен;Сент Етјен;Сент-Етьєн;Сент-Этьен;Сент-Эцьен;Սենտ Էտիեն;סנט אטיין;سانت إتيان;ساں اتین;سن-اتین;سنت اتین;سینٹ-ایٹیینے;सेंत-एत्येन;แซ็งเตเตียน;სენტ-ეტიენი;サン=テチエンヌ;サン=テティエンヌ;圣艾蒂安;생테티엔; +city::2980916;Saint-Denis;Kamuna Sen-Dehni;Sain-Nteni;Saint-Denis;Sanctus Dionysius;Sen Deni;Sen-Deni;Sendeni;Sendenī;saengdeuni;san dwny;san=doni;senta denisa;senta-denisa;sheng dan ni;sn-dny;Σαιν-Ντενί;Камуна Сен-Дэні;Сен Дени;Сен-Дени;Сен-Дені;سان دوني;ساں ڈینس;سن-دنی;سینٹ-ڈینس;सेंट डेनिस;सेंत-देनिस;แซ็ง-เดอนี;サン=ドニ;聖但尼;생드니; +city::2981280;Saint-Brieuc;Fanum Sancti Brioci;Port-Brieuc;SBK;Sain-Briek;Saint-Brieu;Saint-Brieuc;Sant-Brieg;Sen Brijek;Sen-Brie;Sen-Brijo;Sent-Brie;saengbeulioe;san=buriyu;sant brywk;sen-brie;sheng bu li e;sn brywk;sn-bryw;Σαιν-Μπριέκ;Сен Бријек;Сен-Брие;Сен-Бриё;Сен-Бріє;Сент-Брие;סן-בריו;سانت بريوك;سن بریوک;سینٹ-بریک;სენ-ბრიე;サン=ブリユー;圣布里厄;생브리외; +city::2982235;Rueil-Malmaison;Rijej Malmezon;Rjuehj-Mal'mezon;Rjuej Malmezon;Rjuej-Mal'mezon;Rodolium;Rueil;Rueil-Malmaison;lu ai ma er mei song;lwieyumalmejong;rwy mlmzwn;rwy-malmyzwn;ryueiyu=marumezon;Ријеј Малмезон;Рюей Малмезон;Рюей-Мальмезон;Рюэй-Мальмезон;روي-مالميزون;روی ملمزون;リュエイユ=マルメゾン;吕埃马尔梅松;뤼에유말메종; +city::2982652;Rouen;Erruan;Gorad Ruan;Roan;Rodem;Roeaan;Rothomagus;Rouan;Rouen;Rovan;Roðem;Ruan;Ruana;Ruanas;Ruao;Ruduborg;Rueno;Ruán;Ruão;Ruāna;Rúðuborg;URO;lu ang;luang;ro'am;ru x xng;ru'am;ruan;ruani;rwan;rwn;Ρουέν;Горад Руан;Руан;Ռուան;רואן;رؤن;روان;रुआं;रोआँ;รูอ็อง;რუანი;ሩዋን;ルーアン;盧昂;鲁昂;루앙; +city::2982681;Roubaix;Robaais;Rosbacum;Roubaix;Roubes;Roubés;Rube;Rubē;Rubė;XRX;lu bei;lube;ru bæ;rube;rwbh;rwbyh;Рубе;רובה;روبه;روبيه;روبے;รูแบ;ルーベ;鲁贝;루베; +city::2983990;Rennes;Condate Redonum;Gorad Rehn;RNS;Ren;Renas;Renes;Renn;Renn Shehiri;Renna;Rennes;Roazhon;Rènes;Rénn Shehiri;lei en;len;ren;ren'nu;reni;rhena;rn;ryn;Ρεν;Горад Рэн;Рен;Ренн;Ռեն;רן;رن;رين;رین;رینے;ऱ्हेन;ரேன்;แรน;რენი;レンヌ;雷恩;렌; +city::2984114;Reims;Durocortorum;Gorad Rehjms;RHE;Reims;Reimsa;Reimsas;Rejms;Remes;Remeš;Rems;Rens;Reyms;Rheims;laengseu;lan si;rans;ransu;rayym;reimsi;rensa;rms;rns;ryyms;Ρενς;Горад Рэймс;Реймс;Ремс;Ռեյմս;ריימס;رائیم;رانس;رمس;رنس;रेंस;แร็งส์;რეიმსი;ランス;兰斯;랭스; +city::2984701;Quimper;Coriosopitum;Kemper;Kempera;Kempēra;Montagne-sur-Odet;Quimper;Tchimper;Tchîmpèr;UIP;kaengpeleu;kambar;kan pei er;kanperu;kmpr;kwympr;Кемпер;كامبار;کمپر;کویمپر;კემპერი;カンペール;坎佩尔;캥페르; +city::2986495;Poitiers;Gorad Puac'e;PIS;Peitieus;Pictavium;Piteus;Poatie;Poatje;Poitiers;Pouatie;Pouetiers;Pouètiérs;Puat'e;Puatie;Puatje;Puatjē;Puatjė;bwatyyh;paw tiye;po'iti;powachie;pu wa jie;puatie;pwatyh;Πουατιέ;Горад Пуацье;Поатие;Поатје;Пуатье;Пуатьє;Պուատիե;פואטייה;بواتييه;پوئیٹیرز;پواتیه;पॉइती;ปัวตีเย;პუატიე;ポワチエ;普瓦捷;푸아티에; +city::2987805;Pessac;Pecac;Pecac de Bordeu;Pesak;Pessac;Pessak;Pessake;Peçac;Peçac de Bordèu;pei sa ke;pesakeu;pesakku;pwsk;Песак;Пессак;Пессаке;پوسک;ペサック;佩萨克;페사크; +city::2987914;Perpignan;Gorad Perpin'jan;PGF;Perpignan;Perpignan la Catalane;Perpignano;Perpin'jan;Perpinan;Perpinana;Perpinha;Perpinhan;Perpinhã;Perpinia;Perpinian;Perpinianum;Perpinjan;Perpinjanas;Perpinjano;Perpinya;Perpinya la Catalana;Perpinyan;Perpinyà;Perpinyà la Catalana;Perpinyán;Perpiñán;Perpiņāna;Villa Perpiniarum;ban he bi rang;byrbynya;pei pi ni ang;peleupinyang;perpinam;perupinyan;prpynan;prpynya;prpynyan;Περπινιάν;Горад Перпіньян;Перпиньян;Перпинян;Перпињан;Перпіньян;פערפיניאן;פרפיניאן;بيربينيا;پرپگناں;پرپینان;پرپینیا;پرپینیان;पेर्पिञां;ペルピニャン;佩皮尼昂;班合比让;페르피냥; +city::2988358;Pau;PUF;Pau;Paue;po;Пау;ポー; +city::2988507;Paris;Baariis;Bahliz;Gorad Paryzh;Lungsod ng Paris;Lutece;Lutetia;Lutetia Parisorum;Lutèce;PAR;Pa-ri;Paarys;Palika;Paname;Pantruche;Paraeis;Paras;Pari;Paries;Parigge;Pariggi;Parighji;Parigi;Pariis;Pariisi;Pariizu;Pariižu;Parij;Parijs;Paris;Parisi;Parixe;Pariz;Parize;Parizh;Parizh osh;Parizh';Parizo;Parizs;Pariž;Parys;Paryz;Paryzius;Paryż;Paryžius;Paräis;París;Paríž;Parîs;Parĩ;Parī;Parīze;Paříž;Páras;Párizs;Ville-Lumiere;Ville-Lumière;ba li;barys;pairisa;pali;pari;paris;parys;paryzh;perisa;pryz;pyaris;pyarisa;pyrs;Παρίσι;Горад Парыж;Париж;Париж ош;Парижь;Париз;Парис;Паріж;Փարիզ;פאריז;פריז;باريس;پارىژ;پاريس;پاریس;پیرس;ܦܐܪܝܣ;पॅरिस;पेरिस;पैरिस;প্যারিস;ਪੈਰਿਸ;પૅરિસ;பாரிஸ்;పారిస్;ಪ್ಯಾರಿಸ್;പാരിസ്;ปารีส;ཕ་རི།;ပါရီမြို့;პარიზი;ፓሪስ;ប៉ារីស;パリ;巴黎;파리; +city::2988621;Pantin;Panten;Pantin;bantan;pang tan;pangtaeng;pantan;pantn;Пантен;Пантин;بانتان;پانتن;パンタン;庞坦;팡탱; +city::2989317;Orleans;Aurelianum;Gorad Arlean;ORE;Orleaes;Orlean;Orleana;Orleanas;Orleani;Orleans;Orleañs;Orleáns;Orleães;Orleāna;Orliens;Orlèans;Orléans;ao er liang;awrlyan;awrlynz;oleulleang;orleani;orleyom;orurean;xxr lex xng;Ορλεάνη;Горад Арлеан;Орлеан;Օռլեան;אורליאן;أورليان;اورلئان;اورلینز;ओर्लेयों;ออร์เลอ็อง;အော်လီယန်းမြို့;ორლეანი;オルレアン;奥尔良;奧爾良;오를레앙; +city::2990189;Noisy-le-Grand;Noazi le Gran;Noisy;Noisy-le-Grand;Nuazi-le-Gran;Shumnaja-le-Gran;da nuo wa xi;nowaji=ru=guran;nwazy lw ghran;nwazy-lw-grand;Ноази ле Гран;Нуази-ле-Гран;Нуазі-ле-Гран;Шумная-ле-Гран;نوآزی-لو-گراند;نوازي لو غران;ノワジー=ル=グラン;大诺瓦西; +city::2990355;Niort;N'or;NIT;Nior;Niort;Niortium;Niòrt;Njoras;ni ao er;nioleu;nioru;nywr;Ниор;Ньор;Ніор;ניור;نيور;نیور;ニオール;尼奥尔;니오르; +city::2990363;Nimes;FNI;Gorad Nim;Nemausus;Nim;Nima;Nimas;Nime;Nimes;Nimo;Nismes;Nîme;Nîmes;Nīma;nayym;ni mu;nim;nimi;nimu;nym;Νιμ;Горад Нім;Ним;Нім;Նիմ;נים;نائیم;نيم;نیم;นีม;ნიმი;ニーム;尼姆;님; +city::2990440;Nice;Gorad Nica;NCE;Nica;Nicaea;Nicc;Nicca;Niccae;Nice;Nicea;Nico;Nikaia;Nis;Nisa;Nissa;Nissa Maritima;Nissa Marìtima;Nitza;Niza;Nizza;Niça;Nìsa;ni si;nis;nisa;niseu;nisu;nitsa;nys;Νίκαια;Горад Ніца;Ница;Ниццæ;Ницца;Ніцца;Նիս;ניס;نيس;نیس;नीस;নিস;ਨੀਸ;நீஸ்;నీస్;นิส;ნიცა;ニース;尼斯;니스; +city::2990611;Neuilly-sur-Seine;Kamuna Njoi-sjur-Sen;N'oj sjur Sen;Neigi-syr-Sen;Neiji pie Senas;Neijī pie Sēnas;Neji na Seni;Neji-sjur-Sen;Neuilly;Neuilly sur Seine;Neuilly-sur-Seine;Njoji-sjur-Sen;Noeyi-suer-Sen;Noviliacum ad Sequanam;Nöyi-sür-Sen;QNL;noeiswileusen;nuii=shuru=senu;nwy-swr-sn;nwyy-swr-syn;nyy-syr-sn;sai na he pan na yi;sai na he pan ne yi;Νεϊγί-συρ-Σεν;Камуна Нёі-сюр-Сен;Нейи-сюр-Сен;Нейї-сюр-Сен;Неји на Сени;Ньой сюр Сен;Нёйи-сюр-Сен;ניי-סיר-סן;نويي-سور-سين;نوی-سور-سن;ヌイイ=シュル=セーヌ;塞纳河畔纳伊;塞纳河畔讷伊;뇌이쉬르센; +city::2990919;Narbonne;Gorad Narbona;NNE;Narbo;Narbon;Narbona;Narbonas;Narbonn;Narbonna;Narbonne;arbwnt;na bo ne;naleubon;narubon'nu;nrbwn;Горад Нарбона;Нарбон;Нарбонн;Нарбонна;נרבון;أربونة;نربون;ናርቦን፣ ፈረንሳይ;ナルボンヌ;纳博讷;나르본; +city::2990969;Nantes;NTE;Nant;Nante;Nantes;Nanto;Naoned;Portus Namnetus;nan te;nant;nanta;nanto;Нант;נאנט;نانت;नांत;ナント;南特; +city::2990970;Nanterre;Gorad Nantehr;Nanter;Nanteras;Nanterr;Nanterre;Nemetodurum;nan tai er;nangteleu;nanteru;nantr;nantyr;Горад Нантэр;Нантер;Нантерр;نانتر;نانتير;نانتیرے;ナンテール;楠泰尔;낭테르; +city::2990999;Nancy;ETZ;Nanceium;Nancio;Nancy;Nansi;Nanzeg;nan xi;nanshi;nansi;nansy;Нанси;נאנסי;نانسي;نانسی;नांसी;ナンシー;南希; +city::2991214;Mulhouse;EAP;Gorad Mjuluz;MLH;Miluz;Miluza;Miuluzas;Miulūzas;Mjuluz;Mueihausn;Muelhausen;Mulhouse;Mulhousen;Mulhusia;Mylhuzy;Mylhúzy;Mylouz;Müihausn;Mülhausen;mi lu si;miuluzi;mwillujeu;mwlwz;mylwz;myulujha;myuruzu;Μυλούζ;Горад Мюлуз;Милуз;Мюлуз;ملہاؤز;مولوز;ميلوز;म्युलुझ;მიულუზი;ミュルーズ;米卢斯;뮐루즈; +city::2992090;Montreuil;Montrej;Montreuil;Montreuil-sous-Bois;Монтрей; +city::2992166;Montpellier;Gorad Manpel'e;MPL;Monpel'e;Monpele;Monpelie;Monpelje;Monpeljē;Monpeljė;Monpelye;Monspessulanus;Montpelhier;Montpelhièr;Montpeller;Montpellier;Montpelyier;Montpelyiér;mamtapeli'e;meng bi li ai;meng bi li ye;mngpex liye;mongpellie;monperie;mwnblyyh;mwnplyh;mwnplyyh;Μονπελιέ;Горад Манпелье;Монпелие;Монпелье;Монпельє;Монпелје;Монпеље;Մոնպելիե;מונפלייה;مونبلييه;مونٹپلائیر;مونپلیه;مونپیلیے;مون‌پلیه;माँतपेलिए;มงเปอลีเย;მონპელიე;モンペリエ;夢比利耶;蒙庇利埃;蒙彼利埃;몽펠리에; +city::2993002;Montauban;Mons Albanus;Montalban;Montauban;Montoban;Montobanas;Montompan;Rive-Civique;XMW;meng tuo bang;mng to b xng;mongtobang;montoban;mwntwban;Μοντωμπάν;Монтобан;مونتوبان;มงโตบ็อง;モントーバン;蒙托邦;몽토방; +city::2994160;Metz;Divodurum;ETZ;Gorad Mec;Mec;Meca;Mecas;Mediomatricum;Meds;Mets;Mettis;Mety;Metz;Mètz;Méty;Métz;mei si;mesa;meseu;mesu;metcu;metsi;mtz;mytz;mz;Μετς;Горад Мец;Мец;Մեց;מעץ;מץ;متز;میتز;میٹز;मेस;மெட்சு;แม็ส;མེ་ཊི་ཛི།;მეცი;መትዝ;メス;梅斯;메스; +city::2994393;Merignac;Meirinhac;Merignac;Merignae;Mérignac; +city::2994798;Meaux;Meldis;Mo;mo;mo cheng;mw;mw fransh;Мо;مو;مو، فرانسه;モー;莫城;모; +city::2995469;Marseille;Gorad Marsel';MRS;Marseggia;Marsegia;Marseglia;Marseilla;Marseille;Marseilles;Marsej;Marseja;Marsejlo;Marsel;Marsel';Marsela;Marsele;Marselha;Marselis;Marsella;Marsella - Marseille;Marselye;Marsey;Marseya;Marseļa;Marsiella;Marsigghia;Marsiglia;Marsiho;Marsilha;Marsilia;Marsilija;Marsilya;Marsylia;Marsylijo;Marsèja;Marsêle;Marsêy;Massalia;Massilia;ma sai;maleuseyu;mar se;mar sæy;marcey;marsaiya;marsela;marseli;marsy;marsylya;marsylz;maruseiyu;mrsylya;mrsyy;Μασσαλία;Горад Марсель;Марсель;Марсеј;Марсељ;Марсилия;Մարսել;מארסיי;מרסיי;مارسيليا;مارسی;مارسیلز;مارسێی;مرسيليا;मार्सेल;मार्सैय;மர்சேய்;มาร์เซ;มาร์แซย์;မာဆေးမြို့;მარსელი;ማርሴ;マルセイユ;马赛;마르세유; +city::2996568;Maisons-Alfort;Maisons-Alfort;Mezon Alfor;Mezon-Al'for;Mezonz-Al'for;mai song a er fu;mejong-alpoleu;mezon=aruforu;myzwn alfwr;mzwn alfwr;mzwn-alfwr;Мезон Алфор;Мезон-Альфор;Мезонз-Альфор;مزون الفور;مزون-آلفور;ميزون ألفور;メゾン=アルフォール;邁松阿爾福;메종알포르; +city::2996944;Lyon;Gorad Lijon;LYS;Leon do Roine;León do Roine;Lio;Lion;Liona;Lionas;Lione;Lioni;Liono;Liun;Liyon;Lió;Lión;Lugdunum;Lyon;Lyons;li ang;li yng;li'om;li'ona;lion;liong;lioni;liyon;lyom;lywn;riyon;Λυών;Горад Ліён;Лион;Ліон;Լիոն;ליאן;ליון;ليون;لیون;لیۆن;ल्यों;ਲਿਓਂ;ଲିଓନ;லியோன்;ลียง;ལི་ཡོང་།;လီယွန်းမြို့;ლიონი;ልዮን;リヨン;里昂;리옹; +city::2997577;Lorient;An Oriant;Gorad Larjan;LRT;Lor'jan;Lorian;Lorient;Lorjan;Lorjanas;Lorjen;Oriens;loliang;luo li ang;lwryan;rorian;Λοριάν;Горад Ларян;Лориан;Лорьян;Лорян;Лорјен;لوریان;ロリアン;洛里昂;로리앙; +city::2998286;Limoges;Augustoritum;Gorad Limozh;LIG;Lemojez;Lemotges;Lemòtges;Limages;Limoges;Limogo;Limog·es;Limotges;Limoz;Limoza;Limozas;Limozh;Limoĝo;Limoža;Limožas;Limòtges;Llemotges;li meng;li mo ri;limoja;limoju;limozhi;lymwj;lymwz;lymwzh;rimoju;Λιμόζ;Горад Лімож;Лимож;Лімож;Լիմոժ;לימוז;ليموج;لیموژ;لیموگے;लिमोज;ლიმოჟი;リモージュ;利摩日;里蒙;리모주; +city::2998324;Lille;Gorad Lil';Insula;LIL;Lil;Lila;Lile;Lilis;Lill;Lill';Lilla;Lille;Lillo;Rijsel;Risel;Rysel;li er;lil;lil.;lila;lili;lly;lyl;riru;Λιλ;Горад Ліль;Лил;Лилль;Лілль;Լիլ;ליל;للی;ليل;لیل;लील;ਲੀਲ;லீல்;ลีล;ლილი;リール;里尔;里爾;릴; +city::2998975;Levallois-Perret;Levallois;Levallois-Perret;Levallua Pere;Levallua-Perre;Levaloa Pere;QBH;lei wa lu wa-pei lei;leuballuapele;lwalwa-prh;lwfalwa-byry;lwwlwa-prh;ruvu~arowa=pere;Леваллуа-Перре;Левалоа Пере;Լևալլուա Պերե;لوالوآ-پره;لوفالوا-بيري;لوولوآ-پره;ルヴァロワ=ペレ;勒瓦卢瓦-佩雷;르발루아페레; +city::3003603;Le Mans;Ar Mans;Ar Mañs;Cenomanum;L'Unite-sur-Sarthe;L'Unité-sur-Sarthe;L'o Man;LME;Le Man;Le Manas;Le Mans;Le-Man;Lemana;Lemāna;Lo Mans;le mam;le-mani;lei mang;leumang;lw man;lwman;ly mans;lya mamsa;Ле Ман;Ле-Ман;Льо Ман;לה מאן;لو مان;لومان;لی مانس;ले मां;ল্য মঁস;ლე-მანი;ル・マン;勒芒;르망; +city::3003796;Le Havre;An Havr Nevez;An Havr-Nevez;Avr;Chabre;El Havre;Franciscopolis;Gavr;Gorad Gaur;Grasville-Lheure;Havr;Havra;Havras;Havre;Havro;Hawr;Khavur;LEH;La Havro;Le Havre;Le port de Grace;Le port de Grâce;Lé Hâvre;O Havre;Saint-Jean-sur-Mer;havri;la avra;le avar;lei a fu er;leuabeuleu;lex xafwr;lh hbr;lw awr;lw hafr;xia hua;Χάβρη;Авр;Гавр;Горад Гаўр;Хавър;Հավր;לה הבר;لو آور;لو اور;لو هافر;لی ہاور;ला आव्र;லே ஆவர்;เลออาฟวร์;ჰავრი;ル・アーヴル;勒阿弗尔;夏華;르아브르; +city::3005866;Laval;LVA;Laval';Лаваль; +city::3006414;La Seyne-sur-Mer;La Sanha;La Sen sir Mer;La Seyne;La Seyne sur Mer;La Seyne-sur-Mer;La-Sejn-sjur-Mer;La-Sen-sjur-Mer;bin hai la sai ne;la syny-swr-myr;lasenswileumeleu;lsn swr mr;Ла Сен сир Мер;Ла-Сейн-сюр-Мер;Ла-Сен-сюр-Мер;لا سینی-سور-میر;لسن سور مر;ラ・セーヌ=シュル=メール;濱海拉塞訥;라센쉬르메르; +city::3006767;La Roche-sur-Yon;EDM;La Roche-sur-Yon;La Rosh sir Jon;La-Roche-sur-Yon;La-Rosh-sjur-Ion;La-Rosh-sjur-Jon;Les Fromages;Les Mineraux;Les Minéraux;Roche-sur-Yon;Rupes ad Yonem;la rwsh-swr-ywn;lalosyuswileuyong;larwsh swr ywn;lh rws-swr-ywn;lrwsh swr ywn;yong he pan la luo shen;Ла Рош сир Јон;Ла-Рош-сюр-Іон;Ла-Рош-сюр-Йон;לה רוש-סור-יון;لا روش-سور-یون;لا روشے-سور-یون;لاروش سور يون;لروش سور یون;ラ・ロッシュ=シュル=ヨン;永河畔拉罗什;라로슈쉬르용; +city::3006787;La Rochelle;Ar Rochell;Arroxela;Gorad La-Rashehl';LRH;La Cote;La Côte;La Rochela;La Rochelle;La Rochèla;La Rosel;La Roselis;La Roshel;La Roşel;La Rošelis;La-Rosel;La-Roshel';La-Rošel;Larosela;Larošela;Proclamation;Rupella;la luo xie er;la rocyala;la rwshl;la rwshyl;la-rosheli;lalosyel;lh rwsl;lrwshl;Λα Ροσέλ;Горад Ла-Рашэль;Ла Рошел;Ла-Рошель;Լա Ռոշել;לה רושל;لا روشل;لا روشيل;لا روشیل;لروشل;লা রোচ্যাল;ลารอแชล;ལ་རོ་ཅེ་ལེ།;ლა-როშელი;ラ・ロシェル;拉罗歇尔;라로셸; +city::3012621;Ivry-sur-Seine;Ivri sir Sen;Ivri sjur Sen;Ivri-sjur-Sen;Ivry;Ivry sobre Sena;Ivry-sur-Seine;ayfry swr syn;aywry swr sn;aywry-swr-sn;ibeuliswileusen;ivuri=shuru=senu;sai na he pan yi fu li;ʼybry-syr-sn;Іврі-сюр-Сен;Иври сир Сен;Иври сюр Сен;Иври-сюр-Сен;איברי-סיר-סן;إيفري سور سين;ایوری سور سن;ایوری-سور-سن;イヴリー=シュル=セーヌ;塞纳河畔伊夫里;이브리쉬르센; +city::3012649;Issy-les-Moulineaux;Isi le Mulino;Issi-le-Mulino;Issy;Issy-les-Moulineau;Issy-les-Moulineaux;L'Union;aysy-lh-mwlynw;aysy-lmwlynw;ishi=re=murino;isilemollino;yi xi lai mu li nuo;Іссі-ле-Муліно;Иси ле Мулино;Исси-ле-Мулино;ایسی-لمولینو;ایسی-له-مولینو;イシー=レ=ムリノー;伊西萊穆利諾;이시레몰리노; +city::3012937;Hyeres;Er;Hyeres;Hyerès;Hyères;Ier;Ieras;Jer;ayyr;hyyrys;ieru;yeleu;yi ai lei;Єр;Јер;Иер;Йер;ایئر;هييريس;イエール;伊埃雷;예르; +city::3014728;Grenoble;GNB;Gorad Grehnobl';Gratianopolis;Grelibre;Grenobel;Grenobl;Grenobl';Grenoble;Grenoblis;Grenoblo;Grenobul;Grenòble;Nkrenompl;Qroenobl;Qrönobl;ge lei nuo bu er;geuleunobeul;ghrwnwbl;granobala;grenobala;grenobla;grenobli;grnwbl;grwnwbl;grynwbl;gurunoburu;kiranopil;Γκρενόμπλ;Горад Грэнобль;Грeнобль;Гренобл;Гренобль;Гренобъл;Գրենոբլ;גרנובל;גרענאבלע;غرونوبل;گرونوبل;گرینوبل;ग्रेनोबल;ग्रेनोब्ल;গ্রনোবল;கிரனோபிள்;გრენობლი;グルノーブル;格勒诺布尔;그르노블; +city::3017253;Frejus;FRJ;Forum Iulii;Frejus;Frejús;Frezhis;Frezhjus;Frezhus;Fréjus;frzhw;fu lei rui si;furejusu;peulejwiseu;Фрежис;Фрежус;Фрежюс;فرژو;フレジュス;弗雷瑞斯;프레쥐스; +city::3017910;Fontenay-sous-Bois;Fontenay;Fontenay-sous-Bois;Fontene su Bua;Fontene-su-Bua;Fontenė su Bua;Fontne su Boa;fontone=su=bowa;fwntnh-sw-bwa;fwntny sw bwa;fwntwny sw bwa;lin pan feng te nai;pongteunesubua;Фонтене-су-Буа;Фонтне су Боа;فونتنه-سو-بوآ;فونتنی سو بوآ;فونتوني سو بوا;フォントネー=スー=ボワ;林畔丰特奈;퐁트네수부아; +city::3019256;Evry;Evry;Evry-Petit-Bourg;evuri;Évry;Évry-Petit-Bourg;エヴリー; +city::3019265;Evreux;Aebura;EVX;Ebroicum;Eburovici;Ehvrjo;Evre;Evreaux;Evreus;Evreux;Evreux-le-Coudray;Evrieis;afrw;ai fu lei;awrw;ebeuloe;evuru;xe wer x;Évreux;Евре;Эврё;אוורה;إفرو;اورو;เอเวรอ;エヴルー;埃夫勒;에브뢰; +city::3020686;Dunkerque;CQF;Denkerk;Denkerka;Diunkerkas;Djunkerk;Doun'kerki;Duenkirchen;Duinkerke;Duinkerken;Dukark;Dun-Libre;Dune-Libre;Dunes-Libres;Dunkeke;Dunkerk;Dunkerque;Dunkierka;Dunkirk;Dunkèke;Dunquerca;Dunquerque;Dunquèrca;Duntsjerk;Duunkerke;Dúntsjerk;Dünkirchen;Gorad Dzjunkerk;Lungsod ng Dunkerque;dainkarka;dankarka;dankeruku;dnkrk;dnqrq;doengkeleukeu;dui ke er ke;dun ke er ke;dun ku e ke;dwnkrk;dwnkyrk;tankirk;Δουνκέρκη;Горад Дзюнкерк;Денкерк;Дюнкерк;דונקערק;דנקרק;دنکرک;دونكيرك;دونکرک;ڈنکرک;डंकर्क;दैंकर्क;டன்கிர்க்;დიუნკერკი;ダンケルク;敦刻尔克;顿库厄克;됭케르크; +city::3020839;Drancy;Drancy;Dransi;de lang xi;deulangsi;doranshi;dr xng si;dransy;Дранси;Дрансі;דראנסי;درانسي;درانسی;ดร็องซี;ドランシー;德朗西;드랑시; +city::3021372;Dijon;DIJ;Digion;Digione;Dijon;Dij·on;Divio;Diviodunum;Dizhon;Dizon;Dizona;Dizonas;Dižon;Dižona;Dižonas;Gorad Dyzhon;Ntizon;di rong;dichng;dijam;dijom;dijon;dijong;dizhoni;dyjwn;dyzhwn;dyzwn;Ντιζόν;Горад Дыжон;Дижон;Діжон;Դիժոն;דיזון;ديجون;دیجون;دیژون;ڈیجون;दिजाँ;दीजों;ดีฌง;དི་ཇཱོན།;დიჟონი;ディジョン;第戎;디종; +city::3022530;Creteil;Creteil;Créteil;Kretej;Kretejus;Kretėjus;ke lei tai yi;keuleteyu;krty;krytay;kureteiyu;qrtyy;Кретей;Кретеј;Կրեթեյ;קרטיי;كريتاي;کرتی;کریٹیل;クレテイユ;克雷泰伊;크레테유; +city::3023141;Courbevoie;Curbavia;Kurb'ovoa;Kurbevua;Kurbvoa;QEV;ku er bu wa;kuleubeubua;kurubuvu~oa;kwrbfwa;kwrbwa;Курбвоа;Курбевуа;Курбьовоа;كوربفوا;کوربوآ;کوربیوۓ;კურბევუა;クールブヴォア;库尔布瓦;쿠르브부아; +city::3024266;Colombes;Colombes;Columbae;Kolomb;Kolombas;bai ge cheng;klwmb;kollongbeu;koronbu;kwlwmb aw dw syn;qwlwmb;Коломб;קולומב;كولومب، أو دو سين;کلومب;コロンブ;白鸽城;콜롱브; +city::3024297;Colmar;CMR;Colmar;Colmaria;Gorad Kal'mar;Koimar;Kol'mar;Kolmar;Kolmara;ke er ma;klmar;kolmaleu;korumaru;kwlmar;kwlmr;kx lmar;qwlmr;Κολμάρ;Горад Кальмар;Колмар;Кольмар;קולמר;كولمار;کلمار;کولمر;กอลมาร์;コルマール;科尔马;콜마르; +city::3024597;Clichy;Clichy;Clichy-la-Garenne;Clichy-sur-Seine;Clicy;Klishi;Клиши; +city::3024635;Clermont-Ferrand;Augustonemetum;CFE;Clarmont;Clarmont dAlvernia;Clarmont dAlvèrnia;Clarmont-Ferrand;Clermont;Clermont-Ferrand;Cllarmont-Ferrand;Cllârmont-Fèrrand;Gorad Klermon-Feran;Klermon Feran;Klermon-Feran;Klermon-Ferran;Klermonas-Feranas;Klermonferana;Klermonferāna;ke lai meng fei lang;keulleleumongpelang;kleramam feram;kleramam-pheram;klrmwn fran;klrmwn-fran;klymwn-fyrand;klyrmwn fyran;kurerumon=feran;Κλερμόν-Φεράν;Горад Клермон-Феран;Клермон Феран;Клермон-Феран;Клермон-Ферран;Կլերմոն Ֆերան;קלרמון-פראן;كليرمون فيران;کلرمون فران;کلرمون-فران;کلیمون-فیراند;क्लेरमाँ फ़ेराँ;क्लेरमाँ-फेराँ;แกลร์มง-แฟร็อง;კლერმონ-ფერანი;クレルモン=フェラン;克莱蒙费朗;클레르몽페랑; +city::3024783;Clamart;Clamart;Clemartium;Klamar;Le Vignoble;ke la ma;keullamaleu;klamar;klmr;kuramaru;Кламар;كلامار;کلمر;クラマール;克拉马;클라마르; +city::3025053;Cholet;CET;Cauletum;Shole;Sole;shao lai;shore;shwlh;shwlh fransh;syolle;Šolė;Шоле;شوله;شوله، فرانسه;ショレ;紹萊;숄레; +city::3026204;Chateauroux;CHR;Castrum Radulphi;Chateauroux;Châteauroux;Gorad Shataru;Indrelibre;Indreville;Satoru;Shatoru;sha tuo lu;shatoru;shatwrw;shtwrw;syatolu;Šatoru;Горад Шатару;Шатору;שאטורו;شاتورو;شتورو;シャトールー;沙托鲁;샤토루; +city::3026613;Charleville-Mezieres;Caroli Villa;Charleville;Charleville-Mezieres;Charleville-Mézières;Libreville;Mezieres;Mézières;Sarlevil Mezyer;Sarlevilis-Mezjeras;Sarlvil-Mezier;Sarlvill-Mezyer;Sharlevil Mezjer;Sharlevil'-Mez'er;Sharlvil Mezjer;sarlavhila-mejhi'eya;sha lei wei er-mei ji ye er;sharlwyl-mzyr;sharuruvu~iru=mejieru;shrlwyl-mzyh;srlwwyl-mzyyr;syaleulleubilmejieleu;Şarlevil Mezyer;Šarlevilis-Mezjeras;Σαρλβίλ-Μεζιέρ;Шарлвил Мезјер;Шарлевил Мезјер;Шарлевиль-Мезьер;Шарлевіль-Мезьєр;Շառլվիլլ-Մեզյեր;שרלוויל-מזייר;شارلویل-مزیر;شرلویل-مزیه;शार्लव्हिल-मेझिएया;シャルルヴィル=メジエール;沙勒维尔-梅济耶尔;샤를르빌메지에르; +city::3027105;Champigny-sur-Marne;Campinio-ce-Marno;Champigny;Champigny-sur-Marne;Shampin'i-sjur-Marn;Shampini na Marni;Shampini sjur Marn;ma en he pan shang pi ni;shambyny swr marn;shampayn swr mrn;shampyny-swr-mrn;shanpini=shuru=marunu;syangpiniswileumaleun;Ĉampinio-ĉe-Marno;Шампини сюр Марн;Шампиньи-сюр-Марн;Шампињи на Марни;Шампіньї-сюр-Марн;شامبيني سور مارن;شامپاین سور مرن;شامپینی-سور-مرن;シャンピニー=シュル=マルヌ;马恩河畔尚皮尼;샹피니쉬르마른; +city::3027422;Chambery;CMF;Camberiacum;Chamberi;Chambery;Chambery-le-Vieux;Chamberí;Chambèri;Chambéry;Chambéry-le-Vieux;Gorad Shambery;Samberi;Shamberi;shambry;shambyry;shanberi;shang bei li;syangbeli;Šamberi;Горад Шамберы;Шамбери;Шамбері;שאמברי;شامبری;شامبيري;شامبیری;シャンベリ;尚贝里;샹베리; +city::3027487;Chalons-en-Champagne;Chalons;Chalons-en-Champagne;Chalons-sur-Marne;Châlons;Châlons-en-Champagne;Châlons-sur-Marne;Durocatalaunum;Gorad Shalon-an-Shampan';Salon an Sampayn;Sampanes Salonas;Shalon an Shampan;Shalon-an-Shampan';cha lng-x xng-ch xng pay;salo-am-sampena;shalwn-an-shampany;sharon=an=shanpanyu;shlwnzan shampayn;shylwnz ayn shympayn;syallong-angsyangpanyu;xiang bin sha long;Šampanės Šalonas;Горад Шалон-ан-Шампань;Шалон ан Шампањ;Шалон-ан-Шампань;Շալոն ան Շամպայն;שאלון-אן-שמפאן;شالون-آن-شامپانی;شلونزان شامپاین;شیلونز این شیمپائن;शालो-आं-शाँपेन;ชาลง-อ็อง-ช็องปาญ;შალონ-ან-შამპანი;シャロン=アン=シャンパーニュ;香槟沙隆;샬롱앙샹파뉴; +city::3027883;Cergy;Cergeium;Cergy;Serzhi;sai er ji;seleuji;seruji;srzhy;syrjy;Сержи;Сержі;سرژی;سيرجي;セルジー;塞尔吉;세르지; +city::3028808;Cannes;CEQ;Canas;Canes;Cannes;Canua;Chalier;Châlier;Gorad Kany;Kan;Kanai;Kann;Kannad;Kannas;Kannash;Kannes;Kanni;Kanntae;Kanny;jia na;kaina;kan;kan'nu;kana;kang cheng;kn;Κάννες;Горад Каны;Кан;Канн;Каннаш;Канни;Каннтæ;Канны;Կանն;קאן;كان;کان;کن;कान;कैन;ਕੈਨ;கான்;กาน;კანი;カンヌ;康城;戛纳;칸; +city::3029162;Calais;CQF;Calais;Cales;Calesium;Calés;Gorad Kale;Kalai;Kale;Kale shaary;Kales;Kalē;Kalė;jia lai;kale;kalh;kalle;kalyh;kare;Καλαί;Горад Кале;Кале;Кале шаары;Կալե;קאלה;كاليه;کاله;کالے;கலே;กาแล;カレー;加来;加莱;칼레; +city::3029241;Caen;CFR;Cadomum;Cadum;Caen;Can;Caën;Caðum;Gorad Kan;Kaen;Kan;Kana;Kanas;Kāna;k xng;ka ang;kam;kan;kang;kayn;kyn;qn;Καέν;Горад Кан;Кан;Կան;קן;كاين;کان;کین;कां;கன்;ก็อง;კანი;ካየን;カーン;卡昂;캉; +city::3029974;Brive-la-Gaillarde;BVE;Briv la Gajar;Briv-la-Gajard;Briva;Brive;Brive-la-Gaillarde;beulibeulagayaleudeu;bryw lgyrd;bryw-la-gyard;bu li fu la gai ya er de;burivu=ra=gaiyarudo;Брив ла Гајар;Брив-ла-Гайард;Брив-ла-Гаярд;Бриве-ла-Гаилларде;بریو لگیرد;بریو-لا-گیارد;ブリーヴ=ラ=ガイヤルド;布里夫拉盖亚尔德;브리브라가야르드; +city::3030300;Brest;BES;Brest;Brestia;braista;bu lei si te;buresuto;Брест;ब्रैस्त;ブレスト;布雷斯特; +city::3031005;Bourges;Avaricum Biturigum;BOU;Borges;Bourges;Bourz;Burza;Burzas;Burzh;Burža;Buržas;Gorad Burzh;bu er ri;buleuju;buruju;bwrjyz;bwrz;bwrzh;Μπουρζ;Бурж;Горад Бурж;בורז;بورجيز;بورژ;ቡርዥ;ブールジュ;布尔日;부르주; +city::3031137;Boulogne-Billancourt;Billancourt;Bononia ad Sequanam;Boulogne;Boulogne e Billancourt;Boulogne-Billancourt;Boulogne-sur-Seine;Bulon Bijankur;Bulon'-Bijankur;Bulona-Bijankura;Bulone-Bijankuras;Bulonė-Bijankūras;Buloņa-Bijankūra;XBT;bu luo nie-bi yang gu;bullonyubiyangkuleu;buronyu=biyankuru;bwlwn-blankwr;bwlwn-byankwr;bwlwny byankwr;bwlwny-byankwr;Булон Биянкур;Булонь-Бийанкур;Булонь-Биянкур;Булонь-Біянкур;Булоњ Бијанкур;بولون-بلانکور;بولون-بيانكور;بولونی بیانکور;بولونی-بیانکور;ბულონ-ბიანკური;ブローニュ=ビヤンクール;布洛涅-比扬古;불로뉴비양쿠르; +city::3031582;Bordeaux;BOD;Bordeaux;Bordele;Bordeos;Bordeu;Bordeus;Bordo;Bordox;Bordozo;Bordèu;Bordéus;Bordò;Bordôx;Bornto;Bourdel;Burdeos;Burdeus;Burdigala;Gorad Bardo;bo er duo;boleudo;borado;bordo;bordu;borudo;bwrdw;bwrڈw;bxr do;porto;Μπορντό;Бордо;Горад Бардо;Բորդո;בארדא;בורדו;بوردو;بورڈو;बोर्दू;बोर्दो;ਬੋਰਦੋ;பொர்தோ;บอร์โด;ບອກໂດ;ბორდო;ቦርዶ;ボルドー;波尔多;波爾多;보르도; +city::3032213;Blois;Bleaz;Bles;Blesae;Bloa;Blois;Bloua;Blua;Gorad Blua;XBQ;beullua;blaw;blwa;bu lu wa;burowa;Μπλουά;Блоа;Блуа;Горад Блуа;Բլոիս;بلوآ;بلوا;บลัว;ブロワ;布卢瓦;블루아; +city::3032833;Beziers;BZR;Baeterrae;Besers;Besiers;Besièrs;Bez'e;Bezie;Beziers;Bezije;Bezje;Bezjė;Béziers;bei ji ye;bejie;byzyyh;bzyh;bzyyh;Μπεζιέ;Безие;Безије;Безье;Безьє;Безје;בזייה;بزیه;بيزييه;ベジエ;贝济耶;베지에; +city::3033123;Besancon;Becoinson;Besancon;Besanson;Besanzon;Besanzón;Besançon;Bezanson;Bezansona;Bezansonas;Gorad Bezanson;Vesuntio;bei sang song;bejhamsom;beujangsong;bexs xngsng;bezansoni;buzanson;byzanswn;byznswn;bzanswn;Μπεζανσόν;Безансон;Бесансон;Горад Безансон;Բեզանսոն;בזאנסון;בעזאנסאן;بزانسون;بيزنسون;بیزانسون;بیسانکاں;बेझाँसों;เบอซ็องซง;ბეზანსონი;ブザンソン;贝桑松;브장송; +city::3033791;Belfort;BOR;Beffert;Bel'for;Belfor;Belfort;Belfortium;Belfòrt;Gorad Bel'for;bei er fu;belpoleu;beruforu;blfwr;Μπελφόρ;Белфор;Бельфор;Горад Бельфор;بلفور;แบลฟอร์;ベルフォール;贝尔福;벨포르; +city::3034006;Beauvais;Beauvais;Bellovacum;Bieuvais;Bove;Bovoa;Bovė;Duthil-la-Montagne;La Chaussee-de-la-Montagne;La Chaussée-de-la-Montagne;bo wei;bobe;bovu~e;bwwh;Бове;Бовоа;בווה;بووه;ቦቬ;ボーヴェ;博韦;보베; +city::3035681;Avignon;AVN;Abinion;Avennio;Avignon;Avignone;Avignuni;Avin'jon;Avin'on;Avinhao;Avinhon;Avinhão;Avinjonas;Avinjono;Avinon;Avinon - Avignon;Avinona;Avinyo;Avinyon;Avinyó;Avinyón;Aviñón;Aviñón - Avignon;Aviņona;Awinion;Gorad Avin'jon;abinyong;afynywn;avhiyom;avinioni;avu~inyon;awynywn;xa wiyng;ya wei nong;Αβινιόν;Авиньон;Авињон;Авіньйон;Горад Авіньён;Ավինյոն;אביניון;آوینیون;أفينيون;اوینیون;ایوگناں;आव्हियों;อาวีญง;ཨ་ཝི་ཉོང་།;ავინიონი;アヴィニョン;亞維農;아비뇽; +city::3036145;Aulnay-sous-Bois;Aulnay;Aulnay-sous-Bois;Ol'ne-su-Bua;Olne su Boa;One-su-Bua;ao nai cong lin;awlnh sw bwa;awlnyh sw bwa;olne su boa;olnesubua;orune=su=bowa;Олне су Боа;Ольне-су-Буа;Оне-су-Буа;أولنيه سو بوا;اولنه سو بوآ;オルネー=スー=ボワ;奧奈叢林;올네수부아; +city::3036386;Aubervilliers;Aubervilles;Aubervilliers;Obervil'e;Obervilije;ao bei wei ai;awbarfylyyh;awbrwyh;awbrwylyh;obeleubillie;oberuvu~irie;Обервилије;Обервилье;Обервільє;أوبارفيلييه;اوبرویلیه;اوبرویه;オーベルヴィリエ;奥贝维埃;오베르빌리에; +city::3036572;Asnieres-sur-Seine;An'er-sjur-Sen;Anier sjur Sen;Anijer na Seni;Asinariae;Asnieres;Asnieres sur Seine;Asnières;Asnières sur Seine;anieleuswileusen;anieru=shuru=senu;anyar swr syn;anyyr-swr-sn;aznyr swr sn;sai na he pan a nie lei;Аниер сюр Сен;Анијер на Сени;Аньер-сюр-Сен;Аньєр-сюр-Сен;أنيار سور سين;ازنیر سور سن;انییر-سور-سن;アニエール=シュル=セーヌ;塞纳河畔阿涅勒;아니에르쉬르센; +city::3036938;Arles;Arelate;Arl;Arl';Arla;Arle;Arles;Arles-Trinquetaille;Arles-sur-Rhone;Arles-sur-Rhône;Arlet;Arlis;Arlés;Gorad Arl';a er lei;aleul;arl;arli;aruru;Αρλ;Арл;Арль;Горад Арль;Առլ;ארל;آرل;ارل;არლი;アルル;阿爾勒;아를; +city::3037044;Argenteuil;Argenteuil;Arzhantej;Arzhentoj;arujanto~uiyu;Аржантей;Аржантеј;Аржентој;アルジャントゥイユ; +city::3037423;Antony;Antony;Ontoni;Онтони; +city::3037456;Antibes;Antib;Antiba;Antibas;Antibes;Antibol;Antipolis;Antíbol;XAT;amtiba;ang di bu;angtibeu;antibu;antyb;Αντίμπ;Антиб;Антіб;Անթիբ;אנטיב;آنتیب;أنتيب;अँतिब;アンティーブ;昂蒂布;앙티브; +city::3037656;Angers;ANE;Andecavis;Angero;Angers;Angieus;Anje;Anze;Anzhe;Anzier;Anĝero;Anžē;Anžė;Añje;Bonne-Terre;Fruits-Sucres;Fruits-Sucrés;Gorad Anzheh;amji;ang re;angje;anje;anjyh;anzhe;anzhh;anzhw;ayngrz;x xngche;ʼnzh;Ανζέ;Анже;Горад Анжэ;אנזה;آنژه;آنژو;آنژہ;أنجيه;اینگرز;अँजी;อ็องเฌ;ანჟე;አንዤ;アンジェ;昂热;앙제; +city::3037854;Amiens;Am'en;Amen;Amian;Amians;Amien;Amiens;Amijen;Amjen;Amjena;Amjenas;Amjēna;Amyen;Anmyin;Gorad Amen;QAM;Samarobriva;amiaeng;amian;amieni;amiyam;amyan;xa meiyng;ya mian;Αμιάν;Амиен;Амијен;Амьен;Амєн;Амјен;Горад Амен;Ամյեն;אמיין;آمیاں;أميان;امیان;आमियां;อาเมียง;ამიენი;アミアン;亞眠;아미앵; +city::3038261;Albi;Al'bi;Albi;Albia;Alby;Albí;Albī;Almpi;LBI;a er bi;albi;alby;arubi;xa lbi;Αλμπί;Алби;Альби;Альбі;אלבי;ألبي;البی;ಆಲ್ಬಿ;อาลบี;ཨཱལ་ཕི།;ალბი;アルビ;阿尔比;알비; +city::3038334;Ajaccio;AJA;Adiacium;Aiacciu;Ajacas;Ajaccio;Ajacciu;Ajachcho;Ajacho;Ajacio;Ajaçio;Ajačas;Azaksjo;Azaxio;Azhaksio;Ažaksjo;Gorad Ajacha;a ya ke xiao;aiacho;ajagsio;ajaksyw;ajakushio;ajakyw;ajhaksiyo;azhaksy aw;azhaksyw;ʼzʼqsyw;Αζαξιό;Ажаксио;Аячо;Аяччо;Ајачо;Горад Аяча;Այաչչո;אזאקסיו;آژاکسیو;أجاكسيو;اجاکیو;اژاکسی او;अझाक्सियो;ཨ་ཇཀ་སིའོ།;აიაჩო;アジャクシオ;阿雅克肖;아작시오; +city::3038354;Aix-en-Provence;AEx-in-Profentse;Aikso Provenca;Ais de Provenca;Ais de Provença;Aix;Aix-an-Provans;Aix-en-Provence;Aquae Sextiae;Ehks-an-Provans;Eks an Provans;Eks-an-Provans;Eksanprovansa;Provanso Eksas;QXB;aks awn brwfans;aks-an-prwans;ayks ayn prwns;egsangpeulobangseu;ekusu=an=purovu~ansu;pu luo wang si de qu ai ke si;ya sang pu fang;Æx-in-Profentse;Ēksanprovansa;Αιξ-αν-Προβάνς;Екс ан Прованс;Екс-ан-Прованс;Экс-ан-Прованс;Էքս-ան-Պրովանս;אקס-אן-פרובאנס;آكس أون بروفانس;اکس-آن-پروانس;ایکس این پرونس;ཨེག་སི་-ཨེན་-ཕོ་རོའོ་ཝང་སི།;ექს-ან-პროვანსი;エクス=アン=プロヴァンス;亞桑蒲坊;普罗旺斯地区艾克斯;엑상프로방스; +city::6543862;Villeneuve-d'Ascq;Neuvile-Ask;Vil'nev-d'Ask;Vil'njov-d'Ask;Villeneuve d'Ascq;Villeneuve-d'Ascq;Villeneuve-d’Ascq;Villenyev d'Ask;Viln'ov d'Ask;Vilnev d'Ask;Vilnev d'Askas;Vilneva d'Aska;Vilnēva d'Aska;a si ke xin cheng;fylynwf dask;vu~irunuvu=dasuku;wynw dsk;Вилнев д’Аск;Вилньов д'Аск;Вильнев-д'Аск;Вильнёв-д’Аск;Вільнев-д'Аск;וילנב-ד'אסק;فيلينوف داسك;وینو دسک;ヴィルヌーヴ=ダスク;阿斯克新城; +city::7284889;Marseille 08;; +city::7284890;Marseille 10;Marseille 10;Marseille 10e arrondissement;Masalia;Massalia;Massilia;Μασσαλία; +city::7284891;Marseille 09;; +city::7284892;Marseille 11;; +city::7284893;Marseille 12;; +city::7284894;Marseille 13;; +city::7284895;Marseille 14;; +city::7284896;Marseille 15;; +city::8533870;Saint-Quentin-en-Yvelines;Communaute d'agglomeration de Saint-Quentin-en-Yvelines;Communauté d’agglomération de Saint-Quentin-en-Yvelines;Saint-Quentin-en-Yvelines; +city::2396518;Port-Gentil;Mandji;POG;Port Gentil;Port Zantilis;Port Zhantil;Port Žantilis;Port-Gentil;Port-Jantil;Port-Zhantil';bwrt jntyl;poleujangti;porujanti;pwrt-gntyl;rang di er gang;Порт Жантил;Порт-Жантиль;פורט-גנטיל;بورت جنتيل;ポールジャンティ;让蒂尔港;포르장티; +city::2399697;Libreville;Gorad Librehvil';LBV;Libarwil;Liberopolis;Librefille;Librevil;Librevil';Librevila;Librevilis;Libreville;Librevilo;Librvil;Libvil;Limprebil;Limprvil;Liuravila;lbrwl;lbrywyl;li be rx wil;li bo wei er;libaravila;libarevile;libeuleubil;librevhila;librevili;lipravil;lybrfyl;lybrwwyl;lybrwyl;riburuvu~iru;Λιμπρβίλ;Λιμπρεβίλ;Горад Лібрэвіль;Либрвил;Либревил;Либревиль;Лібревіль;Լիբրևիլ;ליברוויל;ליברעוויל;لبرول;لبریویل;ليبرفيل;لیبرویل;لیبرێڤیل;लिबरेविले;लिब्रेव्हिल;ਲਿਬਰਵਿਲ;லிப்ரவில்;ลีเบรอวิล;ལིབ་རེ་ཝིལ།;ლიბრევილი;ሊብረቪል;リーブルヴィル;利伯維爾;利伯维尔;리브르빌; +city::2633352;York;Aebura;Eabhrac;Eabhraig;Eboracum;Efrog;Eoforwic;Everoui;Evrek;Giork;Gorad Jork;Jork;Jorka;Jorkas;Jorvik;Jórvík;QQY;York;yark;yokeu;yoku;yorka;yue ke;ywrk;ywrq;yxrk;Évèroui;Γιορκ;Јорк;Горад Ёрк;Йорк;Յորք;יורק;يورك;یارک;یورک;یۆرک;यॉर्क;யார்க்;ยอร์ก;იორკი;ヨーク;約克;요크; +city::2633485;Wrexham;Reksamas;Reksem;Reksum;Rexam;Wrecsam;Wreksam;Wrexham;legseom;lei ke si han mu;rekusamu;wrksam;Ρέξαμ;Рексем;Рексъм;Ռեքսհեմ;רקסהאם;ورکسام;レクサム;雷克斯漢姆;렉섬; +city::2633521;Worthing;Vorting;Worthing;wajingu;wwrtyng;Вортинг;وورتینگ;ワージング; +city::2633563;Worcester;Caerwrangon;City of Worcester;Gorad Vustehr;UWC;Ustur;Vigornia;Vuster;Vusteris;Wiogoraceastre;Worcester;useuteo;usuta;vuster;wo shi da;wrkstr;wstr;wu si te;wurs texr;wwstr;Вустер;Горад Вустэр;Устър;Վուսթեր;ورکستر;وستر;وورسسٹر;ووستر;ووسٹر;วุร์สเตอร์;ウスター;伍斯特;窩士打;우스터; +city::2633691;Wolverhampton;Goulverchampton;Heantun;Ulvurkhamptun;Vulvergempton;Vulverhamptonas;Vulverhempton;Vulverhemptona;Vulverkhempton;Wolverhampton;Wulfrunehantona;XVW;ulbeohaempeuteon;u~oruvu~ahanputon;wlwrhmptwn;wu er fu han pu dun;wwlbrhmptwn;wwlfrhambtwn;Γουλβερχάμπτον;Вулвергемптон;Вулверхемптон;Улвърхамптън;Վուլվերհեմպտոն;וואלווערהאמפטאן;וולברהמפטון;ولورهمپتون;وولفرهامبتون;وولورہیمپٹن;วุลเวอร์แฮมป์ตัน;ვულვერჰემპტონი;ウォルヴァーハンプトン;伍爾弗漢普頓;울버햄프턴; +city::2633709;Woking;Uoking;Uokinge;Vokingas;Woking;XWO;u~okingu;wo jin;wwdkyng;wwkng;Уокинг;Уокинге;وودکینگ;ووکنگ;ウォキング;沃金; +city::2633948;Wigan;Uigan;Uigun;Vigan;Viganas;Wigan;XWI;la uigyn;u~igan;wei gan;wei gen;wigeon;wygan;Виган;Віган;Уиган;Уигън;ویگان;ウィガン;威根;维甘;위건; +city::2633954;Widnes;Vidnes;Widnes;wei de ni si;wydnz;Виднес;ویدنز;威德尼斯; +city::2634202;Weymouth;Uehjmut;Uejmut;Vejmut;Vimutium;Weymouth i Dorset;u~eimasu;waymth;wei mao si;weimeoseu;wymwth dwrst;Вејмут;Уеймът;Уэймут;وايمث;ویموث، دورست;ウェイマス;韦茅斯;웨이머스; +city::2634308;Weston-super-Mare;Uehston-s'juper-Mehr;Uest"n sjup"r Me"r;Uestun-Sjupur-Meur;Veston na Meru;Weston super Mare;Weston-super-Mare;u~esuton=supa=mea;weseuteonsyupeomeeo;wstwn-swpr-mar;Вестон на Меру;Уестън сюпър Меър;Уестън-Сюпър-Меър;Уэстон-сьюпер-Мэр;وستون-سوپر-مار;ウェストン=スーパー=メア;웨스턴슈퍼메어; +city::2634491;West Bromwich;Bromwich Thiar;Uehst-Bromidzh;Uest Bromich;Vest Bromicas;Vest Bromičas;Vest Bromvich;Vest-Bromvich;West Bromwich;weseuteubeulomichi;west br xm mich;wst brwmwych;xi bu lang;xi bu luo mi qi;Вест Бромвич;Вест-Бромвіч;Уест Бромич;Уэст-Бромидж;Վեստ Բրոմվիչ;وست برومویچ;เวสต์บรอมมิช;ウェスト・ブロムウィッチ;西布朗;西布羅米奇;웨스트브로미치; +city::2634552;Welwyn Garden City;Garden City;Uehlin-Garden-Siti;Welvyn Garden City;Welwyn Garden;Welwyn Garden City;wei lin hua yuan shi;wellingadeunsiti;wlwyn gardn syty;Уэлин-Гарден-Сити;ولوین گاردن سیتی;ウェリン・ガーデン・シティ;韋林花園市;웰린가든시티; +city::2634578;Wellingborough;Uehllingboro;Uelingburou;Velingboro;Vellingboro;Wellingborough;XWE;wei ling bo lei;Велингборо;Веллингборо;Уелингбъроу;Уэллингборо;ولینگ‌بورو;韋靈伯勒; +city::2634677;Watford;Uotford;Votford;Votfordas;WXF;Watford;waspeodeu;watfwrd;watofodo;wo te fu de;wtpwrd;wwtpwrd;Вотфорд;Уотфорд;ווטפורד;וטפורד;واتفورد;ワトフォード;沃特福德;왓퍼드; +city::2634686;Waterlooville;Uoterluvil';Voterluvil;Waterloo;Waterlooville;watrlwwyl;Вотерлувил;Уотерлувиль;واترلوویل; +city::2634715;Washington;Vashington;Washington;Washington New Town;Washington i Tyne and Wear;hua sheng dun;washyngtn;Вашингтон;واشینگتن;華盛頓; +city::2634739;Warrington;Uorrington;Vorington;Warrington;waryngtwn;wo ling dun;wolingteon;Ворингтон;Уоррингтон;وارینگتون;沃灵顿;워링턴; +city::2634853;Walsall;Owolsol;Uolsol;Uolsoll;Volslas;Volsol;Walhshalh;Wallsall;Walsall;u~orusoru;walsal;wo er suo er;wolsol;Волсол;Уолсол;Уолсолл;Ուոլսոլ;والسال;ウォルソール;沃爾索爾;월솔; +city::2634873;Wallasey;Uollasi;Volasi;Wallasey;walasy;wo lei xi;wolleosi;Воласи;Уолласи;والاسی;沃勒西;월러시; +city::2634910;Wakefield;Uehjkfild;Uejkfijld;Veikfildas;Vejkfild;Wakefield;XWD;u~eikufirudo;wei ke fei er de;weikeupildeu;wykfyld;Вејкфилд;Уейкфийлд;Уэйкфилд;Ուեյքֆիլդ;ويكفيلد;ウェイクフィールド;韦克菲尔德;웨이크필드; +city::2635650;Torquay;Torcaium;Torki;Torkvej;Torquay;toki;tuo ji;twrky;twrqy;Торквей;Торки;Торкі;טורקי;تورکی;トーキー;托基;토키; +city::2636177;Taunton;TTY;Tantonia;Taunton;Tonton;Tountun;tang dun;tawntwn;tonteon;tonton;Тонтон;Тоунтън;تاونتون;ولٹن، سومرسیٹ;トーントン;湯頓;톤턴; +city::2636276;Tamworth;Tamvertas;Tamvort;Tamworth;Tomtun;ta mu wo si;Тамворт;تم‌وورث، استافوردشایر;塔姆沃思; +city::2636389;Swindon;SWI;Suindon;Suindun;Svindon;Svindonas;Swindon;XWS;s win dan;seuwindeon;si wen dun;suu~indon;swyndwn;swyyndwn;Свиндон;Свіндон;Суиндон;Суиндън;Սուինդոն;سوئیندون;سويندون;สวินดัน;スウィンドン;斯温顿;스윈던; +city::2636432;Swansea;Abertawe;SWS;Souonsi;Suonsi;Suonzi;Svonsi;Svonsis;Svonzi;Swansea;s wxn si;seuwanji;si wang xi;suuae~onji;suu~onji;svanzi;svonjhi;swansy;swanzy;swwnsy;Σουόνσι;Свонзи;Свонсі;Суонзи;Суонси;Սուոնսի;סוונסי;سوانزي;سوانزی;سوانسی;स्वान्ज़ी;स्वॉन्झी;สวอนซี;スウæォンジ;スウォンジ;斯旺西;스완지; +city::2636486;Sutton Coldfield;Saton Koldfild;Saton Koldfildas;Sutton Coldfield;satn kwldfyld;seoteonkoldeupildeu;Сатон Колдфилд;ساتن کولدفیلد;サットン・コールドフィールド;서턴콜드필드; +city::2636503;Sutton;London Borough of Sutton;Satton;Sutton;Sutton keruelet;Sutton kerület;Саттон; +city::2636531;Sunderland;Sanderland;Sanderlandas;Sanderlend;Sanderlenda;Santerlant;Sunderland;Sundurland;sandaralamda;sandarando;sandrlnd;sandrlnd tayn w wr;sang de lan;seondeollaendeu;sndrland;sndrlnd;Σάντερλαντ;Сандерланд;Сандерленд;Съндърланд;Սանդերլենդ;סנדרלנד;ساندرلند;ساندرلند، تاین و ور;سندرلاند;संडरलँड;サンダーランド;桑德兰;선덜랜드; +city::2636616;Stroud;Straud;Stroud;astrwd glastrshr;seuteulaudeu;Страуд;استرود، گلاسترشر;스트라우드; +city::2636769;Stourbridge;Stauerbridz;Stauerbridzas;Stauerbridžas;Staurbridzh;Stourbridge;Stourbridzh;astawrbryj;s tea r bridc;Стауербриџ;Стаурбридж;Стоурбридж;استاوربریج;สเตาร์บริดจ์; +city::2636841;Stoke-on-Trent;Gorad Stok-on-Trehnt;Stok-on-Trent;Stoka pie Trentas;Stokas prie Trento;Stoke;Stoke-on-Trent;Stoke-upon-Trent;Stoouk on Trent;Stouk na Trent;Stouk na Trentu;Stouk on Trent;The Potteries;XWH;astwk-an-trnt;seutokeuonteulenteu;stwk-awn-trynt;te lun te he pan si tuo ke;Στόουκ ον Τρεντ;Горад Сток-он-Трэнт;Сток-он-Трент;Стоук на Трент;Стоук на Тренту;Стоук он Трент;استوک-آن-ترنت;ستوك-أون-ترينت;سٹاک اون ٹرینٹ;ストーク・オン・トレント;特倫特河畔斯托克;스토크온트렌트; +city::2636876;Stockton-on-Tees;Stockton;Stockton-on-Tees;Stokton na Tizu;Stokton-on-Tis;Stoktun on Tijs;astaktwn-an-tyz;di si he pan si tuo ke dun;sutokkuton=on=tizu;Стоктон на Тизу;Стоктон-он-Тис;Стоктън он Тийс;استاکتون-آن-تیز;ストックトン=オン=ティーズ;蒂斯河畔斯托克頓; +city::2636882;Stockport;Gorad Stokpart;Stockport;Stokport;Stokportas;XVA;seutogpoteu;si tuo ke bo te;st xk phxrt;stwkbwrt;sutokkupoto;Горад Стокпарт;Стокпорт;Ստոկպորտ;استاک‌پورت;ستوكبورت;สต็อกพอร์ต;ストックポート;斯托克波特;스톡포트; +city::2636940;Stevenage;Stevenage;Stiden Ac;Stivenedzh;Stivenidz;Stīðen Āc;XVJ;astywnj;seutebeoniji;si di fu ni qi;srrivanej;sti weni c;sutibunijji;Стивенедж;Стивениџ;استیونج;سٹیوینڈیج;സ്റ്റീവനേജ്;สตีเวนิจ;スティーブニッジ;斯蒂夫尼奇;스테버니지; +city::2637126;Staines;Staines;Staines-upon-Thames;Stejns;astaynz;si tan si;Стејнс;استاینز;斯坦斯; +city::2637142;Stafford;Staefford;Stafford;Staford;Stæfford;XVB;astafwrd anglstan;seutaepeodeu;si ta fu de;sutaffodo;Стафорд;Стаффорд;استافورد، انگلستان;スタッフォード;斯塔福德;스태퍼드; +city::2637329;South Shields;Saut Shijlds;Saut Shilds;Saut-Shilds;Shields;Shields Theas;South Shields;nan xi er ci;sauseusiljeu;sawt shyldz;Саут Шийлдс;Саут Шилдс;Саут-Шилдс;ساوت شیلدز;サウス・シールズ;南希尔兹;사우스실즈; +city::2637343;Southport;Sautport;Southport;sauseupoteu;sausupoto;shao si bo te;Саутпорт;ساوت‌پورت;サウスポート;紹斯波特;사우스포트; +city::2637433;Southend-on-Sea;SEN;Sautend-on-Si;Southend;Southend-on-Sea;Саутенд-он-Си; +city::2637487;Southampton;Gorad Sautgemptan;Hantonia;Hantonne;SOU;Saouthampton;Sautamptonas;Sautgempton;Sauthempton;Sauthemptona;Sautkhamptun;Sautkhempton;Southampton;nan an pu dui;sausaempeuteon;sausanputon;sawthhambtwn;Σαουθάμπτον;Горад Саўтгемптан;Саутгемптон;Саутхамптън;Саутхемптон;סאות'המפטון;ساؤتھمپٹن;ساوت‌همپتون;ساوثهامبتون;เซาแทมป์ตัน;ဆောက်သမ္ပတန်မြို့;サウサンプトン;南安普敦;사우샘프턴; +city::2637490;Southall;Southall;sa'uthala;sa'uthola;sawthal;shao suo er;ساؤتھ ہال;ساوتهال;साउथॉल;ਸਾਊਥਾਲ;紹索爾; +city::2637546;Solihull;Solihalas;Solihull;Solikhal;Solikhall;solliheol;sorifuru;suo li he er;swlyhal;swlyhl;Солихал;Солихалл;سوليهل;سولیهال;ソリフル;索利赫爾;솔리헐; +city::2637627;Slough;Slau;Slough;Слау; +city::2637891;Shrewsbury;Amwythig;Shrewsbury;Shrjusburi;Shrusberi;Шрусбери;Шрюсбъри; +city::2638077;Sheffield;DSA;Gorad Shehfild;Seffild;Sefild;Sefilda;Sefildas;Sefilnt;Sheffield;Sheffild;Shefild;chef fi ld;sefilda;sephild;sephilda;shefirudo;shepildi;shfyld;shyfyld;spyld;syepildeu;xie fei er de;Şeffild;Šefildas;Šefīlda;Σέφιλντ;Горад Шэфілд;Шефилд;Шеффилд;Шеффілд;Շեֆիլդ;שעפילד;שפילד;شفيلد;شفیلد;شيفيلد;شیفیلڈ;شێفیڵد;शेफ़ील्ड;शेफील्ड;షెఫీల్డ్;เชฟฟีลด์;შეფილდი;シェフィールド;谢菲尔德;셰필드; +city::2638324;Scunthorpe;Scunthorpe;Skantorp;Skantorpas;Skantorpe;seukeonsopeu;si ken suo pu;sukansopu;Сканторп;Сканторпе;اسکان‌ثورپ;スカンソープ;斯肯索普;스컨소프; +city::2638419;Scarborough;Scarborough;Skarboro;Skarburou;seukabeoleo;si ka bu luo;skarbwrw;sqrbwrw;sukabura;Скарборо;Скарбъроу;סקרבורו;اسکاربرو، یورک‌شر شمالی;سكاربورو;スカーブラ;斯卡布羅;스카버러; +city::2638671;Salford;Gorad Solfard;Salford;Salfordas;Solford;salfwrd;sarufodo;solpeodeu;suo er fu de;Горад Солфард;Солфорд;سالفورد;サルフォード;索爾福德;솔퍼드; +city::2638678;Sale;Sale i Stor-Manchester;Sejl;sai er;seil;syl mnchstr bzrg;Сейл;Сејл;سیل، منچستر بزرگ;塞爾;세일; +city::2638703;Saint Peters;Saint Peter Extra;Saint Peters;Thanet; +city::2638785;St Helens;Saint Helens;Sent-Khelens;St Helens;St. Helens;Сент-Хеленс; +city::2638867;St Albans;Fanum Sancti Albani;Gorad Sent-Olbans;Saint Albans;Sejnt Olbans;Sent Olbans;Sent-Ehlbans;Sent-Olbans;St Albans;St. Albans;sant albanz;seinteuolbeonseu;sheng ao er ben si;snt albnz;Горад Сент-Олбанс;Сейнт Олбанс;Сент Олбанс;Сент-Олбанс;Сент-Элбанс;سانت ألبانز;سنت آلبنز;セント・オールバンズ;聖奧爾本斯;세인트올번스; +city::2638960;Runcorn;Rankorn;Runcorn;XRC;lang ke en;rankwrn;Ранкорн;رانکورن;朗科恩; +city::2638978;Rugby;Ragbi;Rugby i Warwickshire;XRU;la ge bi;leogbi;ragubi;rajby;rakbi;rakpi;Рагби;راجبي;راگبی، وارویک‌شایر;ரக்பி;รักบี้;ラグビー;拉格比;럭비; +city::2639022;Royal Tunbridge Wells;Rojal Tanbridz Vels;Royal Tunbridge Wells;Tunbridge Wells;Turnbridge Wells;huang jia tang qiao jing;rwyal tanbryj wlz;Ројал Танбриџ Велс;رویال تانبریج ولز;皇家唐橋井; +city::2639093;Rotherham;Roderamas;Rodurum;Roteram;Roterem;Rotergem;Rotherdam;Rotherham;lodeoleom;luo se lei mu;ratrham;rozaramu;Родъръм;Ротерам;Ротергем;Ротерем;Ռոտերեմ;راترهام;ロザラム;羅瑟勒姆;로더럼; +city::2639272;Rochdale;Recedham;Rocdeilis;Rochdale;Rochdejl;Ročdeilis;lochideil;luo qi dai er;rotchideru;rwchdyl;Рочдейл;Рочдејл;راچڈیل;روچدیل;ロッチデール;羅奇代爾;로치데일; +city::2639447;Rhondda;Rhondda;Ronda;Ronta;Y Rhondda;rwnta;Ронда;Ронта;رونتا; +city::2639506;Reigate;Rajgejt;Rajgit;Reigate;rygyt;Райгейт;Райгит;ریگیت; +city::2639545;Redhill;KRH;Redhill; +city::2639557;Redditch;Radditch;Reddich;Redditch;Redicas;Redich;Redičas;ledichi;lei di qi;rdych;reditchi;Реддитч;Реддич;Редич;ردیچ;レディッチ;雷迪奇;레디치; +city::2639577;Reading;Reading;Reding;XRE;Рединг; +city::2639842;Purley;Purley; +city::2639912;Preston;Gorad Prehstan;Preston;Prestonas;Prestun;XPT;brstwn;peuleseuteon;prestana;prstwn;pu lei si dun;puresuton;Горад Прэстан;Престон;Престън;Պրեստոն;פרסטון;برستون;پرستون;پریسٹن، لنکاشائر;प्रेस्टन;プレストン;普雷斯顿;프레스턴; +city::2639996;Portsmouth;Gorad Portsmut;Porchemue;Porchémue;Portsmouth;Portsmut;Portsmuta;Portsmutas;Portus Ostium;bwrtsmwth;phxrt smath;pocheumeoseu;portasmatha;potsumasu;pu ci mao si;pwrtsmwt';pwrtsmwth;Πόρτσμουθ;Горад Портсмут;Портсмут;Портсмът;Պորտսմութ;פורטסמות';بورتسموث;پورتسموث;پۆرتسموت;पोर्टस्मथ;পোর্টস্‌মাথ;พอร์ตสมัท;ポーツマス;朴次茅斯;포츠머스; +city::2640101;Poole;POQ;Poole;Pul;Pulas;Puul;pu er;puru;pwl anglstan;Пул;Պուլ;پول، انگلستان;プール;普爾; +city::2640194;Plymouth;Aberplymm;PLH;Pliemue;Plimmuta;Plimouth;Plimowt;Plimut;Plimuta;Plimutas;Pliémue;Plymouth;Suthtun on Defnum;Sūþtun on Defnum;blymwth;peullimeoseu;phli math;plimatha;plymwt;plymwt';plymwth;pu li mao si;purimasu;Πλίμουθ;Плимут;Плимът;Плімут;פלימות';بليموث;پلائیموتھ;پلیموت;پلیموث;प्लिमथ;พลิมัท;プリマス;普利茅斯;플리머스; +city::2640354;Peterborough;Peterborough;Peterbrough;Petersborough;Petroburgum;Piterboras;Piterboro;Pīterboro;XVH;bi de bo lei;pitabara;piteobeoleo;pytrbwrw;Питерборо;Пітерборо;پیتربورو;پیٹربرا;ピーターバラ;彼得伯勒;피터버러; +city::2640677;Paisley;Gorad Pejsli;Paislig;Peislis;Pejsli;Pejzli;Peysli;Pàislig;Páislig;pei si li;peijeulli;peizuri;pyyzly;pyzly;Горад Пейслі;Пейзли;Пейсли;Пейслі;Пејсли;פייזלי;پیزلی;پیزلے;ペイズリー;佩斯利;페이즐리; +city::2640729;Oxford;Ath nan Damh;Gorad Oksfard;OXF;Oksford;Oksforda;Oksfordas;Oksfordo;Oksfuords;Oxford;Oxnaford;Oxonia;Oxphorde;Rhydychen;Rysoghen;akasaforada;akcuportu;aksaphorda;aksfwrd;awksfwrd;niu jin;ogseupeodeu;okkusufodo;oksapharda;oksaphorda;okspordi;x xksf xrd;Àth nan Damh;Οξφόρδη;Горад Оксфард;Оксфорд;Оқсфорд;אוקספורד;אקספארד;آکسفورد;آکسفورڈ;أكسفورد;اوكسفورد;ऑक्सफर्ड;ऑक्सफोर्ड;অক্সফোর্ড;ਆਕਸਫ਼ੋਰਡ;ஆக்சுபோர்டு;ఆక్స్‌ఫర్డ్;ಆಕ್ಸ್‌ಫರ್ಡ್;อ๊อกซฟอร์ด;အောက်စဖို့မြို့;ოქსფორდი;オックスフォード;牛津;옥스퍼드; +city::2641022;Oldham;Oldam;Oldamas;Oldem;Oldema;Oldham;Oldum;Olntam;ao er de mu;awldham;oldeom;orudamu;xo ldam;Όλνταμ;Олдам;Олдем;Олдъм;Օլդեմ;אולדהאם;أولدهام;اولدهام;โอลดัม;オールダム;奧爾德姆;올덤; +city::2641157;Nuneaton;Naniton;Nonne Etone;Nuneaton;XNV;na ni dun;nanytwn;nuniton;Нанитон;نانیتون;ヌニートン;納尼頓; +city::2641170;Nottingham;NQT;Nottigham;Nottingem;Nottingham;nottingamu;nuo ding han;nuo ding xian;nwtnghham;Ноттингем;Ноттингҳам;נוטינגהאם;نوتنغهام;ノッティンガム;諾定咸;诺丁汉; +city::2641181;Norwich;NWI;Nordovicum;Norgouits;Norich;Noridzas;Noridzh;Noridžas;Norvic;Norvich;Norviç;Norwich;narwch;nolichi;noritchi;nuo li qi;nwrwych;nwrwytsh;nx rich;Νόργουιτς;Норвіч;Норидж;Норич;ناروچ;نورويتش;نورویچ;นอริช;ノリッチ;諾里奇;노리치; +city::2641430;Northampton;Norsempton;Nortamptonas;Nortgempton;Northampton;Northamptonia;Nortkhamptun;Nortkhempton;ORM;bei an pu dun;nosaempeuteon;nozanputon;nwrthambtwn;nwrthhambtwn;Νορθάμπτον;Нортгемптон;Нортхамптън;Нортхемптон;Նորթհեմփթոն;نارتھیمپٹن;نورثامبتون;نورثهامبتون;نورث‌همپتون;നോർത്താംപ്റ്റൺ;ノーザンプトン;北安普顿;노샘프턴; +city::2641520;Newtownabbey;Baile na Mainistreach;N'jutaunabbi;N'jutonehbbej;Newtownabbey;Njutaunabi;Njutonabi;niu dui a bi;Њутонаби;Ньютаунабби;Ньютонэббей;Нютаунаби;تیوتاون‌ابی;紐敦阿比; +city::2641598;Newport;Casnewydd;Gorad N'jupart;N'juport;Newport;Niouport;Niuportas;Njuport;Novus Burgus;Nuporta;Nyuport;Trefdraeth;XNE;n'yuporta;niu bo te;niw phxrt;nyupoteu;nyupoto;nywbwrt;nywpwrt;Ņūporta;Νιούπορτ;Њупорт;Горад Ньюпарт;Ньюпорт;Нюпорт;Նյուպորտ;ניופורט;نيوبورت;نیوپورت;نیوپورٹ;نیوپورٹ، ویلز;न्यूपोर्ट;นิวพอร์ต;ニューポート;纽波特;뉴포트; +city::2641673;Newcastle upon Tyne;An Caisteal Nuadh;Gorad N'jukasl-apan-Tajn;N'jukasl;N'jukasl-apon-Tajn;NCL;Neuchate;Neuchâté;Newcastle;Newcastle tren song Tyne;Newcastle trên sông Tyne;Newcastle upon Tyne;Newcastle-on-Tyne;Newcastle-upon-Tyne;Nioukasl;Niukaslas prie Taino;Njukasl na Tajnu;Njukasul upon Tajn;Novum Castellum;Nukasla pie Tainas;Nyukasl apon Tayn;n'yukesala apona ta'ina;ni'ukyasala apana tya'ina;niw khas seilxa phxn thin;nyukaeseul-eopontain;nywkasl;nywkasl abwn tayn;tai en he pan niu ka si er;Ņūkāsla pie Tainas;Νιούκασλ;Њукасл на Тајну;Горад Ньюкасл-апан-Тайн;Ньюкасл;Ньюкасл-апон-Тайн;Нюкасъл ъпон Тайн;ניוקאסטל;ניוקאסל;نيوكاسل أبون تاين;نیوکاسل;نیوکاسڵ;न्यूकॅसल अपॉन टाईन;নিউক্যাসল আপন ট্যাইন;นิวคาสเซิลอะพอนไทน์;ნიუკასლ-აპონ-ტაინი;ニューカッスル・アポン・タイン;泰恩河畔纽卡斯尔;뉴캐슬어폰타인; +city::2641674;Newcastle under Lyme;Newcastle under Lyme;Newcastle-under-Lyme; +city::2642189;Morley;Morley i West Yorkshire;Morli;mwrly ywrkshayr ghrby;Морли;مورلی، یورکشایر غربی; +city::2642214;Morecambe;Morecambe;Morkam;Morkamas;Morkem;mo ke mu;mwrkm;Моркам;Моркем;مورکم;莫克姆; +city::2642465;Milton Keynes;KYN;MK;Middeltūn þǣra de Cahaignes;Milton Keinsas;Milton Keynes;Milton Kins;Milton-Kins;Milton-Kinz;mi er dun kai en si;milteonkeinseu;myltwn kynz;Милтон-Кинс;Мілтон-Кінз;Միլթոն-Քինս;ميلتون كينز;میلتون کینز;ミルトン・キーンズ;米尔顿凯恩斯;밀턴케인스; +city::2642607;Middlesbrough;Gorad Midlsbra;Middlebrough;Middlesborough;Middlesbrough;Midlsbro;Midulzbro;Mintlesmpro;mi de er si bo lei;mid deilsbe rx;midalsabro;mideuljeubeuleo;midlzbro;midoruzubura;mydlsbrw;mydlzbrt;mydlzbwrw;Μίντλεσμπρο;Горад Мідлсбра;Мидлсбро;Мидълзбро;Мідлсбро;מידלזברא;מידלסברו;ميدلزبرة;میدلزبورو;मिडल्सब्रो;มิดเดิลส์เบรอ;მიდლზბრო;ミドルズブラ;米德爾斯伯勒;미들즈브러; +city::2643044;Margate;Margate;Margejt;Margit;ma gai te;mageito;margyt;Маргейт;Маргејт;Маргит;مارگیت;マーゲイト;马盖特; +city::2643097;Mansfield;Mansfield;Mansfijld;Mansfildas;Mehnsfild;Mensfild;ZMA;maenseupildeu;man si fei er de;mansufirudo;mnspyld;mnzfyld;Мансфийлд;Менсфилд;Менсфілд;Мэнсфилд;מנספילד;منزفیلد;マンスフィールド;曼斯菲爾德;맨스필드; +city::2643123;Manchester;Gorad Manchehstehr;MAN;Mameceaster;Manceinion;Mancesteris;Mancestra;Manchain;Manchester;Manchestur;Manchetre;Manchuin;Manchéstér;Manchêtre;Mancunium;Mantsester;Mančesteris;Mančestra;Mánchester;maencheseuteo;maincestara;mamcestara;man che si te;mancestar;manchesuta;manshstr;mnchstr;mnchystyr;mnz'str;myanacestara;myancestar;Μάντσεστερ;Горад Манчэстэр;Манчестер;Манчестър;מאנטשעסטער;מנצ'סטר;مانشستر;مانچسٹر;منچئستئر;منچستر;मँचेस्टर;मैन्चेस्टर;ম্যানচেস্টার;மான்செஸ்டர்;మాంచెస్టర్;ಮ್ಯಾಂಚೆಸ್ಟರ್;മാഞ്ചസ്റ്റർ;แมนเชสเตอร์;მანჩესტერი;ማንችስተር;マンチェスター;曼彻斯特;맨체스터; +city::2643179;Maidstone;Maidstone;Meintstooun;Mejdston;Mejdstoun;medosuton;mei de si tong;meideuseuton;mydnstwn;Μέιντστοουν;Мейдстон;Мейдстоун;Мејдстон;میدنستون;میڈسٹون;メードストン;梅德斯通;메이드스톤; +city::2643186;Maidenhead;Maidenhead;Mejdenkhed;mei deng hei de;meidenheddo;mydnhd;Мейденхед;Мејденхед;میدنهد;メイデンヘッド;梅登黑德; +city::2643266;Macclesfield;Maklsfild;Maklsfildas;Makulsfijld;XMZ;meikeuljeupildeu;Маклсфилд;Макълсфийлд;مک‌کلسفیلد;메이클즈필드; +city::2643339;Luton;Luton;Lutonas;Lutun;lu dun;luteon;lwtn;lwtwn;ruton;Лутон;Лутън;لوتن;لوتون;ルートン;卢顿;루턴; +city::2643490;Lowestoft;Loustoft;Lowestoft;loseutopeuteu;luo si tuo fu te;lwystaft;Лоустофт;لوئستافت;洛斯托夫特;로스토프트; +city::2643567;Loughborough;Lafboro;Loughborough;Lufburou;la fu bao;lafba ra;lafbwrw;leopeubeoleo;rafubara;Лафборо;Лъфбъроу;لافبورو;ลัฟบะระ;ラフバラー;拉夫堡;러프버러; +city::2643736;Derry;Derae;Deri;Derri;Derry;Derry / Londonderry;Derry City;Dhoire;Doire;Doire Choluim Chille;Ker Dherow;LDY;Londenderry;Londonderis;Londonderry;Lunnonderry;de li;deli;dry;dyry;lun dui de li cheng;rondonderi;Дери;Дерри;Деррі;דרי;دری;ديري;ڈیری;ロンドンデリー;伦敦德里城;德里;데리; +city::2643743;London;Gorad Londan;ILondon;LON;Lakana;Landan;Landen;Ljondan;Llundain;Lodoni;Londain;Londan;Londar;Londe;Londen;Londin;Londinium;Londino;Londn;London;London osh;Londona;Londonas;Londoni;Londono;Londons;Londonu;Londra;Londres;Londrez;Londri;Londro;Londye;Londyn;Londýn;Lonn;Lontoo;Loundres;Luan GJon;Lun-tun;Lunden;Lundra;Lundun;Lundunir;Lundúnir;Lung-dung;Lunnainn;Lunnin;Lunnon;Luân Đôn;Lùn-tûn;Lùng-dŭng;Lûn-tun;Lākana;Lůndůn;Lọndọnu;Ranana;Rānana;ilantan;ladana;landan;landana;leondeon;lndn;london;londoni;lun dui;lun dun;lwndwn;lxndxn;rondon;Łondra;Λονδίνο;Горад Лондан;Лондан;Лондон;Лондон ош;Лондонъ;Лёндан;Լոնդոն;לאנדאן;לונדון;لأندأن;لندن;لوندون;لەندەن;ܠܘܢܕܘܢ;लंडन;लंदन;लण्डन;लन्डन्;लन्दन;লন্ডন;ਲੰਡਨ;લંડન;ଲଣ୍ଡନ;இலண்டன்;లండన్;ಲಂಡನ್;ലണ്ടൻ;ලන්ඩන්;ลอนดอน;ລອນດອນ;ལོན་ཊོན།;လန်ဒန်မြို့;ლონდონი;ለንደን;ᎫᎴ ᏗᏍᎪᏂᎯᏱ;ロンドン;伦敦;倫敦;런던; +city::2644204;Livingston;Baile Dhun Leibhe;Baile Dhunleibhe;Baile Dhùnlèibhe;Baile Dhún Léibhe;Baile Leibhinn;Baile Lèibhinn;Leivinstoun;Livingston;Livingston i Skottland;Livingstonas;Livinqston;li wen si tong;lywyngstwn askatlnd;Ливингстон;Лівінгстон;لونگسٹن;لیونگسٹن، مغربی لوتھیان;لیوینگستون، اسکاتلند;利文斯通; +city::2644210;Liverpool;Gorad Liverpul;LPL;Learpholl;Lerphoyll;Lerpwl;Liberpoul;Liverpolium;Liverpool;Liverpuil;Liverpul;Liverpul';Liverpule;Liverpulis;Liverpūle;Livurpul;Liwerpol;Liwérpol;Poll a' Ghruthain;Poll a' Ghrùthain;li wu pu;libeopul;livarapula;livarpul;livharapula;liwexrphul;lybrpwl;lyfrbwl;lywr pwl;lywrpwl;rivu~apuru;Λίβερπουλ;Горад Ліверпул;Ливерпул;Ливерпуль;Ливерпүүл;Ливърпул;Ліверпуль;Լիվերպուլ;ליברפול;ליווערפול;ليفربول;لیور پول;لیورپول;لیڤەرپوول;ܠܝܒܪܦܘܠ;लिवरपूल;लिव्हरपूल;லிவர்பூல்;ಲಿವರ್‌ಪೂಲ್;ലിവർപൂൾ;ลิเวอร์พูล;ლივერპული;ሊቨርፑል፣ እንግሊዝ;リヴァプール;利物浦;리버풀; +city::2644319;Littlehampton;Litlkhempton;Littlehampton;li te er han pu dun;liteulhaempeuteon;Литлхемптон;لیتل‌هامپتون;利特爾漢普頓;리틀햄프턴; +city::2644411;Lisburn;Districtul Lisburn;Lios na gCearrbhach;Lisbern;Lisbernas;Lisburn;Lizbern;li si ben;lijeubeon;lsbrn;lysbwrn;risuban;Лизберн;Лисберн;Лисбърн;لسبرن;لیسبورن;リスバーン;利斯本;리즈번; +city::2644487;Lincoln;Gorad Linkal'n;Lincoln;Lincoln i England;Lindum;Linkol'n;Linkoln;Linkolnas;Linkuln;lin ken;ling khxln;lingkeon;linkona;lnkn anglstan;lnkwln;lynkln anglstan;lynqwln;rinkan;Горад Лінкальн;Линколн;Линкольн;Линкълн;Лінкольн;Լինքոլն;לינקולן;لنكولن;لنکن، انگلستان;لینکلن، انگلستان;লিঙ্কোন;ลิงคอล์น;လင်ကွန်းမြို့၊ အင်္ဂလန်;ლინკოლნი;リンカン;林肯;링컨; +city::2644668;Leicester;Caerlyr;Caerlŷr;Gorad Lestehr;Leicester;Leicestria;Leiscester;Lester;Lestera;Lesteris;Lestur;Leysester;Léyséstér;QEW;lai si te;laystr;les texr;leseuteo;lstr;resuta;Λέστερ;Горад Лестэр;Лестер;Лестър;לסטר;לעסטער;لايستر;لستر;لیسسٹر;เลสเตอร์;レスター;莱斯特;레스터; +city::2644688;Leeds;Gorad Lids;LBA;Ledesia;Leeds;Lids;Lidsa;Lidsas;Lijds;Lints;Loidis;Līdsa;Ritis;li ci;lidjha;lids;lidsa;lidzi;lie si;lijeu;lyds;lydz;rizu;Ληντς;Горад Лідс;Лидс;Лийдс;Лідс;Լիդս;לידז;לידס;ليدز;لیدز;لیڈز;ܠܝܕܣ;लीड्स;લીડ્ઝ;లీడ్స్;ಲೀಡ್ಸ್;ลีดส์;ლიდზი;リーズ;列斯;利兹;리즈; +city::2644737;Royal Leamington Spa;Leamington;Leamington Spa;Lemington;Lemington Spa;Rojal Lemington Spa;Rojal-Lemington-Spa;Royal Leamington Spa;huang jia li ming dun wen quan;rwyal lymyngtwn aspa;Лемингтон;Лемингтон Спа;Ройал-Лемингтон-Спа;Ројал Лемингтон Спа;رویال لیمینگتون اسپا;ロイヤル・レミントン・スパ;皇家利明頓溫泉; +city::2645418;Kingswood;Kingsvud;Kingswood;Кингсвуд; +city::2645425;Kingston upon Hull;Hull;Kingston upon Hull;Kingston-apon-Khall;Kingston-upon-Hull;he er he pan jing shi dun;Кингстон-апон-Халл;האל;赫爾河畔京士頓; +city::2645724;Kidderminster;Kidderminster;Kiderminster;Kiderminsteris;ji de ming si te;kydrmynstr;Кидерминстер;کیدرمینستر;基德明斯特; +city::2645753;Kettering;Ketering;Kettering;Keturing;kai te ling;ketaringu;keteoling;ktryng;Кетеринг;Кеттеринг;Кетъринг;کترینگ;ケタリング;凱特靈;케터링; +city::2645889;Keighley;Keighley;Kejli;Kitli;ji si li;kyly;Кейли;Китли;کیلی;کیگلے;基斯利; +city::2646003;Islington;District londonien d'Islington;Islington;Islinqton;Izlingtan;ayzlyntn;ijeullingteon;izurinton;yi si ling dun;İslinqton;Ізлінгтан;Ислингтон;איזלינגטון;ازلنگٹن، لندن;ایزلینتن;იზლინგტონი;イズリントン;伊斯靈頓;이즐링턴; +city::2646057;Ipswich;Gippevicum;IPW;Ipsuich;Ipsvicas;Ipsvich;Ipsvičas;Ipswich;abswtsh;aypswyych;ibseuwichi;ipsuichi;ipsvic;ipusuu~itchi;xips wich;yi pu si wei qi;ʼypswwyz;Іпсвіч;Ипсвич;Ипсуич;Իպսուիչ;איפסוויץ;إبسوتش;ایپسوییچ;இப்ஸ்விச்;อิปสวิช;იფსუიჩი;イプスウィッチ;伊普斯威奇;입스위치; +city::2646329;Huyton;Huyton;Huyton with Roby;Khejton;Хейтон; +city::2646458;Huddersfield;Chantersfilnt;Gaddersfild;Gorad Khadehrsfild;Haddersfild;Hadersfild;Hadersfildas;Huddersfield;Khaddersfild;Khadersfild;Khudursfijld;attarcupiltu;ha de si fei er de;hadasufirudo;haderzpildi;hadrzfyld;hdrsfyld;heodeojeupildeu;Χάντερσφιλντ;Гаддерсфілд;Горад Хадэрсфілд;Хаддерсфилд;Хадерсфилд;Хъдърсфийлд;Հադերսֆիլդ;هادرزفیلد;هدرسفيلد;அட்டர்சுபீல்டு;ჰადერზფილდი;ハダースフィールド;哈德斯菲爾德;허더즈필드; +city::2646504;Hove;Hove;Hove i England;Khouv;Khov;hovu;hww anglstan;Хов;Хоув;هوو، انگلستان;ホヴ; +city::2646557;Horsham;Horsham;Khorsham;Khorshehm;Khorshum;West Horsham;hwrshm;Хоршам;Хоршъм;Хоршэм;هورشم; +city::2646914;High Wycombe;Chepping;HYC;High Wycombe;Khaj Uikumb;Khaj Vikom;Khaj-Uikom;Wycombe;hai wei ke mu;haiwikeom;hay waykamb;hi wi khamb;Хай Уикъмб;Хай-Уиком;Хај Виком;های وایکامب;ไฮวิคัมบ์;ハイ・ウィカム;海威科姆;하이위컴; +city::2647074;Hereford;Gereford;HFH;Henffordd;Hereford;Herefordas;Herefordia;Hererford;Khereford;Khereforde;he li fu de;he ri f xrd;helipeodeu;herefodo;hrfwrd;hrfwrd anglstan;hrpwrd;xi fu;Герефорд;Херефорд;Херефорде;Հերերֆորդ;הרפורד;هرفورد;هرفورد، انگلستان;ہیریفورڈ;เฮริฟอร์ด;ヘレフォード;禧福;赫里福德;헤리퍼드; +city::2647138;Hemel Hempstead;Hemel;Hemel Hempstead;Khemel Khempsted;he mo er heng pu si te de;hemeolhempeuseutedeu;hml hmpstd;Хемел Хемпстед;همل همپستد;ヘメル・ヘムステッド;赫默爾亨普斯特德;헤멀헴프스테드; +city::2647356;Hastings;Gastings;Hastings;Heistingsas;Khejstings;hai si ting si;heiseutingseu;heisutingusu;hystnghs;hystyngz;Гастингс;Гастінгс;Хейстингс;Хејстингс;Հասթինգս;هيستنغس;هیستینگز;ヘイスティングス;海斯廷斯;헤이스팅스; +city::2647400;Hartlepool;Harlepolis;Hartlepool;Hartlepulas;Khartlpul;ha te er pu;har tli phul;hatorupuru;Хартлпул;هارتل‌پول;ฮาร์ตลีพูล;ハートルプール;哈特爾浦; +city::2647428;Harrogate;HRT;Harrogate;Kharrogejt;ha luo gai te;harogeito;harwghyt;hrwgyt;Харрогейт;هاروغيت;هروگیت;ჰეროგეიტი;ハロゲイト;哈罗盖特; +city::2647461;Harlow;Gorad Kharlau;Harlow;Kharlou;hallo;harlw;harou;Горад Харлаў;Харлоу;هارلو;ہارلو;ハーロウ;할로; +city::2647570;Hamilton;Baile Hamaltan;Gamil'ton;Hamaltan;Hamilton i Skottland;Hamiltonas;Hamiltoun;Həmilton;Khamiltun;hamiruton;han mi er dun;hmyltwn;Гамильтон;Гамільтон;Хамилтън;همیلتون;ہملٹن;ہیملٹن، جنوبی لینکاشائر;ハミルトン;漢密爾頓; +city::2647632;Halifax;Galifaks;Halifax;Halifax i England;Khalifaks;ha li fa ke si;haellipaegseu;harifakusu;hlyfks;Галифакс;Халифакс;האליפאקס;هلیفکس;ハリファクス;哈利法克斯;핼리팩스; +city::2647639;Halesowen;Halesowen;Heilsovenas;Khejlsoven;hylzawwn;Хейлсовен;Хејлсовен;هیلزاوون; +city::2647793;Guildford;Gildfordas;Gilford;Gilfordia;Guildford;Guilford;ghldfwrd;gilpeodeu;girufodo;gyldfwrd;ji er fu de;Гилфорд;Гілфорд;غلدفورد;گیلدفورد;گیلڈفورڈ;ギルフォード;吉爾福德;길퍼드; +city::2647878;Grimsby;GSY;Great Grimsby;Grimsbi;Grimsbis;Grimsby;Grimzbi;ge li mu si bi;geulimjeubi;grymsbay;gurimuzubi;Гримзби;Гримсби;گریمسبای;グリムズビー;格里姆斯比;그림즈비; +city::2647984;Great Yarmouth;Gorad Grehjt-Jarmut;Grejt Jarmut;Grejt-Jarmut;Yarmouth;geuleiteuyameoseu;gryt yarmwth;Горад Грэйт-Ярмут;Грейт-Ярмут;Грејт Јармут;گریت یارموث;グレート・ヤーマス;그레이트야머스; +city::2648182;Grays;Grays;Grays Thurrock;Grejz;ge lei si;geuleiseu;gryz anglstan;Грејз;گریز، انگلستان;格雷斯;그레이스; +city::2648187;Gravesend;Gravesend;Grejvsend;Grejvzend;ge lei fu sen de;geuleibeujendeu;grywznd;Грейвзенд;Грејвсенд;گریوزند;格雷夫森德;그레이브젠드; +city::2648272;Gosport;Gosport;gaspwrt;ge si bo te;Госпорт;گاسپورت;戈斯波特; +city::2648404;Gloucester;Caerloyw;GLO;Glevum;Gloster;Glosteris;Glostur;Gloucester;Glutsester;Glutséstér;Gorad Glostehr;gao luo shi da;ge luo si te;geulloseuteo;ghlwstr;glastr;glwstr;gurosuta;jlwstr;klxs texr;Глостер;Глостър;Горад Глостэр;Գլոստեր;גלאסטער;גלוסטר;جلوستر;غلوستر;گلاستر;گلوسسٹر;گلوسٹر;กลอสเตอร์;グロスター;告羅士打;格洛斯特;글로스터; +city::2648579;Glasgow;GLA;Glascho;Glaschu;Glaschú;Glasgovo;Glasgow;Glasgua;Glaskobe;Glazgas;Glazgo;Glazgos;Glazgou;Glazgov;Glazgova;Glazgua;Glesga;Glázgua;Glāzgova;Gorad Glazga;Kak-la-su-ko;Kak-là-sṳ̂-kô;Qlazqo;galasago;ge la si ge;geullaeseugo;ghlaskw;glasago;glasgo;glasgw;glasgwv;glazgo;glyasgo;gurasugo;jlasjw;kilasko;klas kow;Γλασκώβη;Глазго;Глазгов;Глазгоу;Горад Глазга;Գլազգո;גלאזגא;גלאזגו;جلاسجو;غلاسكو;گلاسگو;گلاسگوۋ;گلاسگۆ;ग्लासगो;ग्लास्गो;গ্লাসগো;ਗਲਾਸਗੋ;கிளாஸ்கோ;గ్లాస్గో;ಗ್ಲ್ಯಾಸ್ಗೋ;กลาสโกว์;ဂလပ်စဂိုးမြို့;გლაზგო;ግላዝጎ;グラスゴー;格拉斯哥;글래스고; +city::2648657;Gillingham;Dzhillingem;Dzilingam;Dzilingamas;Džilingamas;Gillingham;gylynghʼm;jiringamu;jylyngham knt;Џилингам;Джиллингем;גילינגהאם;جیلینگهام، کنت;ジリンガム; +city::2648773;Gateshead;Gateshead;Gateshead-on-Tyne;Geitshedas;Gejtskhed;Gorad Gejtskhed;gai ci hei de;geicheuhedeu;getsuheddo;gyytshd;jytshyd;Гейтсхед;Гејтсхед;Горад Гейтсхед;גייטסהד;גייטסהעד;جيتشيد;گیتس‌هد;გეიტსჰედი;ゲーツヘッド;蓋茨黑德;게이츠헤드; +city::2648970;Fylde;Borough of Fylde;Fylde;Fylde Borough;Fylde Coast; +city::2649258;Folkestone;Fokston;Folkestone;Folkston;fu ke si tong;fwkstwn;fwlkstwn;Фокстон;Фолкстон;فولكستون;فوکستون;福克斯通; +city::2649672;Farnborough;FAB;Farnboro;Farnborough;Farnborough i Hampshire;fa en bo lei;farnbrt;farn‌bwrw hmpshr;Фарнборо;פארנבורו;فارنبرة;فارن‌بورو، همپشر;法恩伯勒; +city::2649692;Fareham;farham;fei lei mu;فارهام;แฟร์อัม;費勒姆; +city::2649808;Exeter;Caerwysg;EXT;Ehkseter;Ekseter;Eksetera;Ekseteris;Eksetur;Exanceaster;Exeter;Exonia;Karesk;ai ke sai te;akstr;akztr;egseoteo;ekuseta;xek se texr;xek si texr;ya xi te;Ексетер;Ексетър;Эксетер;Էքսետեր;אקסטר;עקסעטער;إكزتر;اکستر;ایکسٹر;เอกเซเตอร์;เอ็กซิเตอร์;エクセター;埃克塞特;雅息特;엑서터; +city::2649911;Esher;Ehsher;Esher;Эшер; +city::2649997;Enfield Town;Enfield; +city::2650096;Ellesmere Port;Ellesmere Port;Elsmir Port;ai er si mi er gang;alzmr pwrt;Елсмир Порт;الزمر پورت;埃爾斯米爾港; +city::2650225;Edinburgh;Aebura;Caeredin;Dinedin;Doon Edin;Dun Eideann;Dùn Èideann;Dún Éideann;EDI;Ebora;Edimborg;Edimborgh;Edimbourg;Edimbourgo;Edimburg;Edimburgh;Edimburgo;Edimburgo - Dun Eideann;Edimburgo - Dùn Èideann;Edimburgu;Edimburgum;Edimbùrgh;Edinbo;Edinboarch;Edinborg;Edinburc;Edinburg;Edinburga;Edinburgas;Edinburgh;Edinburgo;Edinburq;Edinburrie;Edynburg;Ehdinburg;Embra;Gorad Ehdynburg;Idinburg;adnbrt;adynbrw;ai ding bao;edeunbeoleo;edinabara;edinbara;edinburgi;etinparo;xedinbara;Édimbourg;Εδιμβούργο;Горад Эдынбург;Единбург;Эдинбург;Էդինբուրգ;אדינבורו;עדינבורג;إدنبرة;ئێدینبەرە;ادینبرو;ایڈنبرا;एडिनबरा;एदिनबरा;এডিনবরা;எடின்பரோ;ಎಡಿನ್‌ಬರ್ಗ್‌‌;എഡിൻബറോ;เอดินบะระ;အက်ဒင်ဗာရာမြို့;ედინბურგი;エディンバラ;爱丁堡;에든버러; +city::2650396;Eastleigh;Eastleigh;Istli;yi si te li;Истли;ایست‌لی;伊斯特利; +city::2650405;East Kilbride;Cille Bhrighde an Ear;Cille Bhrìghde an Ear;Cille Bhríghde an Ear;East Kilbride;East Kilbridge;Ist Kilbraidas;Ist Kilbrajd;Ist Kilbrayd;Ist-Kilbrajd;Keeill Vreeshey Hiar;ayst kylbrayd;dong ji er bu lai de;iseuteukilbeulaideu;İst Kilbrayd;Іст-Кілбрайд;Ист Килбрайд;Ист Килбрајд;ایست کیلبراید;ایسٹ کلبرائیڈ;イースト・キルブライド;東基爾布萊德;이스트킬브라이드; +city::2650497;Eastbourne;Eastbourne;Istborn;Istbornas;isutobon;yi si te ben;Істборн;Истборн;ایست‌بورن;イーストボーン;伊斯特本; +city::2650657;Dunstable;Danstabl;Dunstable;Ntansteimpl;danstybl;dansutaburu;deng si te bu er;dwnstabl;Ντάνστεϊμπλ;Данстабл;دانستیبل;دونستابل;ダンスタブル;鄧斯特布爾; +city::2650732;Dunfermline;Danfermlin;Danfermlinas;Danfrmlin;Dun Pharlain;Dunfaurlin;Dunfermline;Dunfurmlin;Dùn Phàrlain;Dún Phárlain;Gorad Danfermlin;dan feir mlin;danfamurin;deng fu mu lin;dmfrlyn;Горад Данфермлін;Данфермлин;Данфермлін;Дънфърмлин;Դանֆրմլին;دانفرم‌لاین;دمفرلين;ڈنفرملائن;ดันเฟิร์มลิน;ダンファームリン;鄧弗姆林; +city::2650752;Dundee;DND;Dandi;Dandī;Dun De;Dun Deagh;Dundee;Dundi;Dùn Dè;Dùn Dèagh;Dún Déagh;Gorad Dandy;Ntanti;Taodunum;dan di;dandi;dandy;deng de;deng di;deondi;dndy;Νταντί;Горад Данды;Данди;Данді;Дънди;Դանդի;דנדי;داندی;دندي;ڈنڈی شہر;ڈنڈی، سکاٹ لینڈ;डंडी;ดันดี;დანდი;ダンディー;登地;邓迪;던디; +city::2650839;Dudley;Dadli;Dadlis;Dudley;Dudli;Ntantlei;da de li;dad liy;dadly anglstan;dadori;Ντάντλεϊ;Дадли;Дадлі;Дъдли;Դադլի;دادلی، انگلستان;ดัดลีย์;ダドリー;達德利; +city::2651123;Doncaster;DSA;Denocestria;Doncaster;Donkaster;Donkasteris;Donkastur;Gorad Dankastehr;dongkeoseuteo;donkasuta;dwnkastr;dxng khas texr;tang ka shi da;tang ka si te;Горад Данкастэр;Донкастер;Донкастър;دونكاستر;دونکاستر;ดองคัสเตอร์;ドンカスター;唐卡士打;唐卡斯特;동커스터; +city::2651286;Dewsbury;D'jusberi;Dewsbury;Diusberis;Djusburi;Djuzberi;ZEQ;di si bo li;dwzbry;Дьюсбери;Дюсбъри;Дјузбери;دوزبری;迪斯伯里; +city::2651347;Derby;Darbi;Deoraby;Derbi;Derbia;Derbis;Derby;Derby i Derbyshire;Dérbi;Dārbi;Dēoraby;Gorad Dehrbi;Ntermpi;dabi;dar bi;darbi;darby anglstan;de bi;deobi;drby;dyrby;Ντέρμπι;Горад Дэрбі;Дарби;Дерби;Дербі;Դերբի;דארבי;דרבי;داربی، انگلستان;ديربي;ڈربی;डर्बी;ডার্বি;ดาร์บี;ደርቢ;ダービー;德比;더비; +city::2651500;Dartford;Dartford;Dartfordas;Dartforde;da te fu de;dartfwrd;dateupeodeu;Дартфорд;Дартфорде;دارتفورد;達特福德;다트퍼드; +city::2651513;Darlington;Darlington;Darlingtonas;Ntarlin'nkton;XVG;da ling dun;dallingteon;darinton;darlynghtwn;darlyngtwn;Ντάρλινγκτον;Дарлингтон;Дарлінгтон;دارلينغتون;دارلینگتون;ダーリントン;达灵顿;達靈頓;달링턴; +city::2651621;Dagenham;da gen lin;daegeoneom;dagenamu;dagnham;dajnham;deganahama;داجنهام;داگنهام;डेगनहम;ダゲナム;達根林;대거넘; +city::2651715;Cumbernauld;Comar nan Allt;Cummernaud;Kambernold;Kambernoldas;Kumburnold;kambrnwld;kan bo nuo er de;kanbanorudo;kham bexr nx ld;Камбернолд;Къмбърнолд;کامبرنولد;کمبرنالڈ;คัมเบอร์นอลด์;カンバーノールド;坎伯諾爾德; +city::2651817;Croydon;Croydon;Croydon Grants;Croydon London;Krojdun;Kroydon;ke luo yi deng;krwydwn;kuroidon;Кройдън;کرویدون;クロイドン;克羅伊登; +city::2652002;Crewe;Crewe;Krju;Kru;XVC;ke lu;keulu;krw chshr;kuru;Кру;Крю;کرو، چشر;クルー;克魯;크루; +city::2652053;Crawley;Crawley;Krolis;Krouli;ke lao li;Кроули;克劳利; +city::2652221;Coventry;CVT;Coventria;Coventry;Gorad Koventry;Koventri;Koventrija;Koventris;Kovuntri;kao wen chui;kawntry;khx wen thri;kobeonteuli;kovhentri;kovu~entori;kwfntry;qwbntry;Κόβεντρι;Горад Ковентры;Ковентри;Ковентрі;Ковънтри;קובנטרי;كوفنتري;کاونتری;کونٹری;कॉव्हेंट्री;คอเวนทรี;ကိုဗင်ထရီမြို့;კოვენტრი;コヴェントリー;考文垂;코번트리; +city::2652381;Corby;Corby;Korbi;kobi;kwrby;Корби;کوربی;コービー; +city::2652618;Colchester;CLB;Camulodunum;Colchester;Colneceaster;Kolcesteris;Kolchest"r;Kolchester;Kolčesteris;gao che shi da;ke er qie si te;kolcheseuteo;koruchesuta;kwlchstr;kwlshystr;kwltshystr;qwlzstr;Колчестер;Колчестър;Կոլչեստր;קולצסטר;كولتشيستر;كولشيستر;کولچستر;コルチェスター;科尔切斯特;高車士打;콜체스터; +city::2652974;Clacton-on-Sea;Clacton;Clacton al Mar;Clacton-on-Sea;Klakton na Moru;Klakton-on-Si;Pajurio Klaktonas;Pajūrio Klaktonas;klktwn-an-sy;Клактон на Мору;Клактон-он-Си;کلکتون-آن-سی; +city::2653225;Chesterfield;Cesterfildas;Chesterfield;Chesterfild;Chesturfijld;ZFI;che shi da fei te;cheseuteopildeu;chesutafirudo;chstrfyld;Česterfildas;Честерфилд;Честърфийлд;Չեստըրֆիլտ;چسترفیلد;چیسٹرفیلڈ;ჩესტერფილდი;チェスターフィールド;車士打菲特;체스터필드; +city::2653228;Chester;CEG;Caer;Cesteris;Cestria;Chester;Chestur;Deva;Tsester;Yn Chaayr;Yn Çhaayr;che shi da;ches texr;cheseuteo;chesuta;chstr;qie si te;tshstr;zstr;Česteris;Τσέστερ;Честер;Честър;Չեստեր;צסטר;تشستر;چستر;چیسٹر;เชสเตอร์;ချက်စတာမြို့;ቸስተር;チェスター;切斯特;車士打;체스터; +city::2653232;Cheshunt;Chesant;Cheshunt;chznt;qie sen te;Чесант;چزنت;切森特; +city::2653261;Cheltenham;CHW;Celtnamas;Cheltenam;Cheltenham;Cheltnem;Cheltnum;chelteuneom;cheltnam;cherutonamu;chltnham;qie er teng na mu;shltnham;Čeltnamas;Челтенам;Челтнем;Челтнъм;צ'לטנהאם;شلتنهام;چلتنهام;เชลต์นัม;チェルトナム;切爾滕納姆;첼트넘; +city::2653266;Chelmsford;Celmsfordas;Celmsfuords;Chelmsford;chelleumseupeodeu;cherumusufodo;chlmzfwrd;qie er mu si fu de;tshylmsfwrd;zlmspwrd;Čelmsfordas;Čelmsfuords;Челмсфорд;צלמספורד;تشيلمسفورد;چلمزفورد;چلمسفورڈ;ቸልምስፎርድ;チェルムスフォード;切爾姆斯福德;첼름스퍼드; +city::2653305;Chatham;Catamas;Chatam;Chatem;Chatham;Chatham i Kent;chaeteom;chatamu;chatham knt;Čatamas;Чатам;Чатем;چاتهام، کنت;チャタム;채텀; +city::2653558;Castlereagh;; +city::2653584;Castleford;Kasulford;kslfwrd;Касълфорд;کسلفورد; +city::2653775;Carlisle;CAX;Caerliwelydd;Carliolum;Carlisle;Cathair Luail;Karlail;Karlailas;Karlajl;Karlayl;Luel;ka lai er;kallail;karairu;karlayl;karlayl kambrya;kharlil;Καρλάιλ;Карлайл;Карлајл;Կարլայլ;كارلايل;کارلایل، کامبریا;คาร์ไลล์;კარლაილი;カーライル;卡萊爾;칼라일; +city::2653822;Cardiff;CWL;Caerdydd;Cairdiff;Cardiff;Cardiffa;Cayr Deeth;Gorad Kardyf;Kadif;Kardif;Kardifa;Kardifas;Kardiff;Kardip;Kardydh;Karntif;Kerdiz;Kārdifa;jia de fu;kadifu;kadipeu;karadifa;kardifa;kardipha;kardyf;kartihp;khardif f;Κάρντιφ;Горад Кардыф;Кардиф;Кардифф;Кардіфф;Քարդիֆ;קארדיף;كارديف;کاردیف;کارڈف;कार्डिफ;कार्डिफ़;কার্ডিফ;ਕਾਰਡਿਫ਼;கார்டிஃப்;കാർഡിഫ്;คาร์ดิฟฟ์;ကားဒစ်မြို့;კარდიფი;カーディフ;加的夫;카디프; +city::2653877;Canterbury;Caergaint;Canterbury;Cantorbery;Cantorbéry;Cantuaria;Cantuária;Cantwaraburg;Cantwarebyrig;Durovernum;Durovernum Canticorum;Gorad Kentehrbery;Kantaraborg;Kanterberi;Kantermperi;Kenterberi;Kenterberija;Kenterberis;Kenturburi;gen de bo li;kaenteobeli;kan te bo lei;kantaberi;kantrbyry;kntrbry;qntrbry;Κάντερμπερι;Горад Кентэрберы;Кантербери;Кентербери;Кентербері;Кентърбъри;Քենթերբերի;קנטרברי;كانتربيري;کنتربری;カンタベリー;坎特伯雷;根德伯里;캔터베리; +city::2653883;Cannock;Cannock;Kannok;Kanok;Kanokas;Kanuk;kaeneog;kanwk;Каннок;Канок;Канък;کانوک;캐넉; +city::2653941;Cambridge;CBG;Caergrawnt;Cambridge;Cantabrigia;Gorad Kembrydzh;Grantanbrycg;Kambrij;Kejmbridzh;Kembric;Kembridz;Kembridza;Kembridzas;Kembridzh;Kembridža;Kembridžas;Kembrigo;Kembriĝo;Kempritz;Kiam-khiau;Kiam-khiâu;jian qiao;kambrydj;keimbeuliji;kembridj;kembrij;kembrija;kenburijji;khem bridc;kmbryj;kyamabrija;kymbrj;qyymbrydg';Κέμπριτζ;Горад Кембрыдж;Кеймбридж;Кембридж;Кембриџ;Кембриҷ;Кембрідж;Քեմբրիջ;קיימברידג';كامبريدج;کمبریج;کیمبرج;केंब्रिज;ক্যামব্রিজ;ಕೇಂಬ್ರಿಜ್;കേംബ്രിഡ്ജ്;เคมบริดจ์;ကိန်းဘရစ်ချ်မြို့;კემბრიჯი;ケンブリッジ;劍橋;케임브리지; +city::2654187;Bury;Beri;Beris;Bury;bei li;beli;beri;bo li;bry;Бери;Бері;بری;ベリー;伯里;貝利;베리; +city::2654200;Burton upon Trent;Berton-apon-Trent;Bertonas prie Trento;Burton upon Trent;Burton-on-Trent;Burton-upon-Trent;Burtun upon Trent;bartwn apwn trnt;beoteon-eoponteulenteu;te lun he pan bo dun;Бертон-апон-Трент;Бъртън ъпон Трент;بارتون آپون ترنت;特倫河畔伯頓;버턴어폰트렌트; +city::2654264;Burnley;Bernlei;Bernli;Bernlis;Burnley;Burnli;ban ni;banri;beonli;bo en li;brnly;Μπέρνλεϊ;Бернли;Бернлі;Бърнли;ברנלי;برنلی;バーンリー;伯恩利;般尼;번리; +city::2654394;Buckley;Buckley;Bukli;Bwcle;Бъкли; +city::2654675;Bristol;BRS;Bricgstōƿ;Briosto;Briostó;Bristo;Bristol;Bristol';Bristole;Bristolis;Bristolium;Bristolo;Briston;Bristul;Bristullu;Bristón;Bryste;Brístol;Gorad Brystal';beuliseuteul;bris txl;bristala;brystwl;bu li si tuo er;burisutoru;Μπρίστολ;Бристол;Бристоль;Бристъл;Горад Брысталь;Բրիստոլ;בריסטאל;בריסטול;برسٹل نگر;بريستول;بریستول;ब्रिस्टल;ಬ್ರಿಸ್ಟಲ್‌;บริสตอล;ბრისტოლი;ブリストル;布里斯托尔;브리스틀; +city::2654710;Brighton;BSH;Braiton;Braitona;Braitonas;Brajton;Brajtono;Brajtun;Brighton;Brightonia;Gorad Brajtan;bai li dun;beulaiteon;bir tan;bra'itana;brayatana;braytwn;bryytwn;bu lai dun;buraiton;Μπράιτον;Брайтон;Брайтън;Брајтон;Горад Брайтан;Բրայթոն;ברייטון;برائٹن;برايتون;برایتون;ब्रायटन;ব্রাইটন;ไบรตัน;ბრაიტონი;ブライトン;布赖顿;白禮頓;브라이턴; +city::2654755;Bridgend;Bridgend;Bridgend County Borough;Bridzendas;Bridzhend;Bridžendas;Pen-y-bont ar Ogwr;beulijendeu;burijendo;Бридженд;ブリジェンド;브리젠드; +city::2654782;Brentwood;Brentud;Brentvud;Brentwood;Brentwood i Essex;beulenteuudeu;brntwwd asks;bu lun te wu de;Брентвуд;Брентуд;برنتوود، اسکس;برینٹووڈ، ایسیکس;布倫特伍德;브렌트우드; +city::2654938;Braintree;Braintree;Braintree i Essex;Brejntrij;WXF;brayntry asks;Брейнтрий;براینتری، اسکس; +city::2654993;Bradford;BRF;Bradanford;Bradford;Bradfordas;Brantfornt;Bredford;Bredforda;Brehdford;Brədford;Gorad Brehdfard;ba la fu te;beulaedeupeodeu;bradfwrd;brdpwrd;bredpordi;bu la de fu de;buraddofodo;Μπράντφορντ;Брадфорд;Бредфорд;Брэдфорд;Горад Брэдфард;Բրեդֆորդ;בראדפארד;ברדפורד;برادفورد;بریڈفورڈ;ბრედფორდი;ብራድፎርድ;ブラッドフォード;巴拉福特;布拉德福德;브래드퍼드; +city::2655009;Bracknell;Bracknell;Braknel;braknl;bu la ke nei er;Бракнел;براکنل;布拉克內爾; +city::2655095;Bournemouth;BOH;Bornemouth;Bornmut;Bornmutas;Bournemouth;bo en mao si;bonmasu;bonmeoseu;bor nmath;bornmuti;bwrnmwth;Борнмут;Борнмът;بورنموث;বোর্ন্‌মাথ;โบร์นมัท;ბორნმუთი;ボーンマス;伯恩茅斯;본머스; +city::2655198;Bootle;Bootle;Butl;Butlis;bu te er;bwtl anglstan;Бутл;بوتل، انگلستان;布特爾; +city::2655237;Bolton;Bolton;Boltonas;Boltonium;Boltun;bao dun;bo er dun;bol tan;bolteon;boruton;bwltn;bwltwn;Болтон;Болтън;Բոլթոն;بولتن;بولتون;โบลตัน;ბოლტონი;ボルトン;保頓;博尔顿;볼턴; +city::2655262;Bognor Regis;Bognor;Bognor Regis;Bognor Ridzis;Bognor Ridzisas;Bognor Ridžisas;bagnwr rjys;bo ge nuo li ji si;Богнор Риџис;باگنور رجیس;博格諾里吉斯; +city::2655351;Bletchley;Blechli;blchly;bu lai qi li;Блечли;بلچلی;布莱奇利; +city::2655459;Blackpool;BLK;Blackpool;Blakpul;Blakpulas;Blehkpul;Blekpul;Bləkpul;beullaegpul;blakbwl;blyakapula;burakkupuru;hei tan;Блакпул;Блекпул;Блэкпул;بلاكبول;بلک‌پول;ব্ল্যাকপুল;แบล็กพูล;ბლეკპული;ブラックプール;黑潭;블랙풀; +city::2655524;Blackburn;Blackburn;Blakbernas;Blakboern;Blakbörn;Blehkbern;Blekbern;Blekburn;beullaegbeon;blk‌brn;blqbrn;bu lai ke ben;bu li ban;burakkuban;Блекберн;Блекбърн;Блэкберн;Բլեկբերն;בלקברן;بلک‌برن;แบล็กเบิร์น;ブラックバーン;布力般;布莱克本;布萊克本;블랙번; +city::2655603;Birmingham;BHX;Birmin'gxam;Birmingam;Birmingamas;Birmingem;Birmingema;Birmingham;Birminghamia;Birminghem;Gorad Birmingem;Mpermincham;bamingamu;barming'hyam;barmingahama;barmingahema;barmingham;barminghama;beoming-eom;birmingemi;bo ming han;bo ming han shi;brmngm;brmynghham;byrmngam;parminkam;Μπέρμιγχαμ;Бирмингам;Бирмингем;Бірмінгем;Горад Бірмінгем;Բիրմինգհեմ;בירמינגהאם;ברמינגהאם;برمنگم;برمينغهام;بیرمنگام;बर्मिंगहॅम;बर्मिंघम;बर्मिङ्घम्;બર્મિંગહામ;பர்மிங்காம்;బర్మింగ్‌హామ్;ಬರ್ಮಿಂಗ್ಹ್ಯಾಮ್;เบอร์มิงแฮม;ბირმინგემი;በርሚንግሃም;バーミンガム;伯明翰;伯明翰市;버밍엄; +city::2655613;Birkenhead;Berkenged;Berkenhedas;Berkenkhed;Birkenhead;Birkenkhed;Kione Beih;Penbedw;bakenheddo;beokeonhedeu;bexr khen hed;Беркенгед;Беркенхед;Биркенхед;برکن‌هد;ബ്രിക്കൻഹെഡ്;เบอร์เคนเฮด;バーケンヘッド;버컨헤드; +city::2655984;Belfast;BFS;Beal Feirste;Beeal Feirshtey;Belfast;Belfast City;Belfasta;Belfastas;Belfasto;Belfastum;Belffast;Belfāsta;Belpas;Beul-Feirste;Bèlfast;Béal Feirste;Bélfast;Gorad Belfast;Mpelphast;baelpaseuteu;bei er fa si te;belaphasta;belfast;belpaseuteu;berufasuto;blfast;pelpast;Μπέλφαστ;Белфаст;Горад Белфаст;Բելֆաստ;בלפאסט;בעלפאסט;بلفاست;بیلفاسٹ;बेलफास्ट;বেলফাস্ট;பெல்பாஸ்ட்;ಬೆಲ್‌ಫಾಸ್ಟ್‌;เบลฟัสต์;ဗဲလဖတ်မြို့;ბელფასტი;ベルファスト;貝爾法斯特;贝尔法斯特;밸파스트;벨파스트; +city::2656046;Bedford;Bedford;Bedfordia;XQD;bdfwrd anglstan;bedeupeodeu;bydfwrd;Бедфорд;בעדפארד;بدفورد، انگلستان;بيدفورد;베드퍼드; +city::2656065;Beckenham;Beckenham;bekenahama;bekkunamu;bknham;بکنهام;بیکنہیم، لندن;बेकेनहम;ベックナム; +city::2656168;Batley;Batley;Batli;ba te li;batly;Батли;باتلی;巴特利; +city::2656173;Bath;Aquae Sulis;Ba;Badanceaster;Bat;Bata;Batas;Bath;Baðanceaster;Bāta;Caerfaddon;Gorad Bat;QQX;ba si;baseu;basu;bath;bati;bʼt;Μπαθ;Бат;Горад Бат;Բաթ;באת;باتھ;باتھ، سومرسیٹ;باث;บาธ;ბათი;バース;巴斯;바스; +city::2656192;Basingstoke;Basingstoke;Behjsingstok;Beisin'nkstoouk;Bejzingstouk;XQB;basyngstwk;bei xin si tuo ke;beijingusutoku;beisingseutokeu;byysyngstwq;Μπεϊσινγκστόουκ;Бејзингстоук;Бэйсингсток;בייסינגסטוק;باسینگستوک;ベイジングストーク;貝辛斯托克;베이싱스토크; +city::2656194;Basildon;Basildon;Bazildon;Bazildonas;Bazildun;Gorad Bazildan;ba xi er deng;baejildeon;bajirudon;bzyldwn;Базилдон;Базилдън;Басилдон;Горад Базілдан;بزیلدون;バジルドン;巴西爾登;배질던; +city::2656235;Barry;Bari;Baris;Barri;Barry;Barry i Wales;Beri;Y Barri;ba li;bry wlz;Бари;Барри;Баррі;Бери;בארי;بری، ولز;巴里; +city::2656284;Barnsley;Barnsley;Barnsli;Barnslis;Barnzli;Beornesleah;Beorneslēah;Gorad Barnsli;ba en si li;ban shi li;banjeulli;banzuri;barnzly;Барнзли;Барнсли;Барнслі;Горад Барнслі;بارنزلي;بارنزلی;バーンズリー;巴恩斯利;班士利;반즐리; +city::2656333;Barking;Barking;Barking Town;Barking i England;bakingu;barkinga;barkyng;بارکینگ;बार्किंग;バーキング; +city::2656396;Bangor;Bangor;Bangor i Nord-Irland;Bangoras;Beannchar;ban ge;banga;bngwr kanty dawn;Бангор;بنگور، کانتی داون;バンガー;班戈; +city::2656719;Aylesbury;AEgelesburg;Aelesburia;Aylesbury;Ehjlsberi;Eilsberis;Ejlsberi;Gorad Ehjlsbery;ai er si bo li;arisubari;aylzbry;eiljeubeli;Ægelesburg;Горад Эйлсберы;Ејлсбери;Эйлсбери;آیلزبری;أيلزبري;アリスバーリー;艾爾斯伯里;에일즈베리; +city::2656955;Ashford;Asfordas;Ashford;Ashford i Kent;Ašfordas;Ehshford;Eshford;QDH;a shen fu de;aesyupeodeu;ashfwrd knt;Ешфорд;Эшфорд;اشفورد، کنت;阿什福德;애슈퍼드; +city::2657540;Aldershot;Aldershot;Oldershot;Oldersotas;Olderšotas;aldrshat;aldrshwt;ao er de xiao te;arudashotto;oldeosyos;Олдершот;אלדרשוט;ألدرشوت;الدرشات;アルダーショット;奧爾德肖特;올더숏; +city::2657697;Acton;Acton i London;Akton;Aktun;aiktana;aktwn lndn;akuton;e dun;Актон;Актън;آکتون، لندن;ایکٹون، لندن;ऐक्टन;アクトン;厄頓; +city::2657832;Aberdeen;A-pak-ten;ABZ;Aberdeen;Aberdin;Aberdina;Aberdins;Aberdon;Aberdonia;Aberdynas;Aberdzin;Aberdīna;Aberdīns;Aburdijn;Aiberdeen;Amperntin;Devanha;Obar Dheathain;a bo ding;abadin;aberdin;aberdini;abrdyn;aebeodin;ebaradina;ya ba dian;Â-pak-tên;Αμπερντήν;Абердзін;Абердин;Абърдийн;Աբերդին;אבערדין;אברדין;أبردين;ابردین;ابرڈین;अ‍ॅबर्डीन;एबरडीन;অ্যাবরদিন;అబెర్డీన్;അബർഡീൻ;แอเบอร์ดีน;အဘာဒင်းမြို့;აბერდინი;アバディーン;阿伯丁;鴨巴甸;애버딘; +city::3209584;Crosby;; +city::3345283;Tonypandy;Tonupandi;tang ni pan di;Тонъпанди;湯尼潘帝; +city::3345439;Telford;Gorad Tehlfard;Telford;Telfordas;te er fu de;terufodo;tlfwrd;Горад Тэлфард;Телфорд;Թելֆորդ;تلفورد;テルフォード;特爾福德; +city::3345440;Craigavon;Craigavon;Creag Abhann;Districtul Craigavon;Krejgavon;Krejgejvun;ke lei jia wen;krygaywn;qryygbwn;Крейгавон;Крейгейвън;Крејгавон;קרייגבון;کریگایون;کریگ‌آوون;克雷加文; +city::610824;Zugdidi;Sugdidi;Zugdidi;Zugdidis;Zygdidi;zugdidi;zwgdydy;Зугдиди;זוגדידי;ზუგდიდი; +city::611717;Tbilisi;Gorad Tbilisi;TBS;Tbilis;Tbilisi;Tbilisi - tbilisi;Tbilisi - თბილისი;Tbilisi osh;Tbilisis;Tbiliso;Tbilissi;Tbilisy;Tbiliszi;Tbilsi;Tblisi;Thbilisi;Tibilisi;Tiblisi;Tiblissi;Tiblíssi;Tibîlîsî;Tiflis;Tiphlida;Tpilisi;Triphelis;Ttuplis;Tíblisi;Tíflis;Tıflis;di bi li si;karti;tbilisi;tblys;tblysy;tbylysy;teubillisi;tfls;tflys;thbi li si;thbilisi;tipilici;tobirishi;Τιφλίδα;Горад Тбілісі;Тбилис;Тбилиси;Тбилиси ош;Тбилисӣ;Тбілісі;Ттуплис;Қарҭ;Թբիլիսի;טביליסי;تبليسي;تبلیس;تبلیسی;تبىلىسى;تفلیس;طفلس;ܛܒܝܠܝܣܝ;त्बिलिसी;थ्बिलीसी;তিবি‌লিসি;திபிலீசி;ทบิลิซิ;ཁྲེ་བྷི་ལི་སི།;თბილისი;ქართი;ትብሊሲ;トビリシ;第比利斯;트빌리시; +city::611847;Sokhumi;Akva;Aҟəa;SUI;Sochumi;Sohum;Sohumi;Sokhumi;Soukhoumi;Ssuchum;Suchum;Suchumi;Suhhumi;Suhumi;Suhumo;Sujumi;Sukhum;Sukhumi;Suĥumo;su hu mi;sufumi;suhumi;swhwmy;Аҟәа;Сухум;Сухуми;סוחומי;スフミ;苏呼米;수후미; +city::613607;Kutaisi;KUT;Khuthaisi;Koetaisi;Koutaissi;Koutaïssi;Kutais;Kutaisi;Kutaisk;Kutaiso;Kutaissi;Kutayis;Kutayıs;Kutaïsi;kutaishi;kutaisi;Кутаиси;Кутаїсі;כותאיסי;קוטאיסי;ქუთაისი;クタイシ;쿠타이시; +city::615532;Batumi;BUS;Bat'umi;Bathumi;Batoemi;Batomis;Batoum;Batoumi;Batum;Batumi;Batumis;Batumo;Batûm;ba tong;bato~umi;batumi;batwmy;btwmy;Μπατούμι;Батуми;Батумі;Баҭым;Բաթում;בטומי;בתומי;باتومی;باطومي;बातुमी;ბათუმი;バトゥミ;巴统;바투미; +city::3382160;Cayenne;CAY;Caiena;Caienna;Cajen-a;Cajena;Cayena;Cayene;Cayenne;Gorad Kaena;Kaenna;Kagien;Kajen;Kajena;Kajenna;Kajennae;Kajenneh;Kajeno;Kayen;Kayene;Kayenna;kai yun;kaien'nu;kaiyana;kayen;kayena;kayn;kayyn;Καγιέν;Горад Каена;Кайен;Кайеннæ;Кайенна;Кайеннэ;Каєнна;Кајена;Կայեննա;קאיין;كايين;کائین;کاین;कायेन;ਕੈਯਨ;கயேன்;กาแยน;კაიენა;カイエンヌ;開雲;카옌; +city::2294206;Wa;Va;Wa;wa;Ва;وا، گھانا;วา;와; +city::2294700;Tema;Tema;Temma;Toma;te ma;tema;tma;Тема;تما;テマ;特马;테마; +city::2294727;Techiman;Takyiman;Techiman;Tekyiman;Tekyiman-Brong; +city::2294877;Tamale;TML;Tamale;Тамале; +city::2294915;Takoradi;TKD;Takoradi; +city::2294938;Tafo;Old Tafo;Tafo; +city::2294962;Swedru;Agona;Agona Swedru;Jwewuhu;Swedru; +city::2295021;Sunyani;NYI;Sun'jani;Sunjanis;Sunyani;su ni ya ni;suniani;Суньяні;蘇尼亞尼;수니아니; +city::2295458;Sekondi-Takoradi;Gorad Sekandy-Takarady;Sekondi;Sekondi Takoradi;Sekondi-Takoradi;Sekondis-Takoradis;Sékondi;se kan di-ta ko ra di;sekonditakoladi;skwndy-takwrady;sqwndy-tqwrdy;sykwndy takwrady;Горад Секанды-Такарады;Секонди;Секонди Такоради;Секонди-Такоради;Секонді-Такораді;סקונדי-טקורדי;سيكوندي تاكورادي;سکوندی-تاکورادی;سیکونڈی-ٹاکوراڈی;เซกันดี-ตาโกราดี;セコンディ・タコラディ;塞康第─塔科拉迪;세콘디타코라디; +city::2296564;Akim Oda;Akim Oda;Insuaim;Nsuaem;Oda;Ода; +city::2296606;Obuasi;Oboase;Obuasi;Obuasis;Obuassi;Обуаси; +city::2297313;Nkawkaw;Nkawkaw;Nkokoo; +city::2298330;Medina Estates;Madina;Medina Estates; +city::2298890;Kumasi;Coomassie;Gorad Kumasi;KMS;Kumase;Kumasi;Kumasi shaary;Kumasis;Kumassi;Kumasy;ku ma xi;kumashi;kumasi;kwmasy;Горад Кумасі;Кумаси;Кумаси шаары;Кумасі;Կումասի;كوماسي;کوماسی;ਕੁਮਾਸੀ;クマシ;库马西;쿠마시; +city::2299522;Koforidua;Koforidua;ke fu li du ya;kopolidua;kwfwrydwa;kwfwrydwya;Кофоридуа;کوفوریدوئا;کوفوریدوا;科福里杜亞;코포리두아; +city::2300372;Hohoe;Chochoe;Chokhoe;Hohoe;Khokhoe; +city::2300379;Ho;Ho;Hohoe;Kho;No;ho;hw. ghna;Но;Хо;هو٬ غنا;ہو، گھانا;ホ;호; +city::2301217;Ejura;Ejura; +city::2302357;Cape Coast;Cabo Corso;Cape Coast;Cape Coast Castle;Igua Ogwa;Keip Kostas;Kejp-Kost;Ogwa;hai an jiao;keipeukoseuteu;kyp kwst;Кейп-Кост;کیپ کوست;کیپ کوسٹ;ケープ・コースト;海岸角;케이프코스트; +city::2302821;Bolgatanga;Bolagatanga;Bolgatanga;Bolgatange;bo er jia tan jia;bolgatang-ga;borugatanga;Болгатанга;Болгатанге;ボルガタンガ;博爾加坦加;볼가탕가; +city::2303125;Berekum;Berekum; +city::2303287;Bawku;Bawku; +city::2306079;Achiaman;; +city::2306104;Accra;ACC;Aakra;Aakrá;Accra;Acra;Akara;Akkr;Akkra;Akkrae;Akra;Akrao;Akʻra;Gorad Akra;Nkran;a ke la;akara;akeula;akra;akura;xak kra;yەkra;΄Aκκρα;Άκκρα;Аккрæ;Аккра;Акра;Горад Акра;Աքրա;אקרא;אקרה;آکرا;أكرا;ئەکرا;اكرا;اکرا;عکرہ;अक्रा;आक्रा;আক্রা;ਅਕਰਾ;ଆକ୍ରା;அக்ரா;അക്ര;อักกรา;ཨ་ཁ་ར།;အက်ခရာမြို့;აკრა;አክራ;アクラ;阿克拉;아크라; +city::2413753;Brikama;Brikama;Brikame;beulikama;brykama;bu li ka ma;burikama;Брикама;Брикаме;بریکاما;ブリカマ;布里卡馬;브리카마; +city::2416969;Nzerekore;NZE;Nzerekore;Nzerekorė;Nzérékoré;eunjelekole;nzerekore;Нзерекоре;Նզերեկորե;نزیریکورے;ンゼレコレ;은제레코레; +city::2418362;Labe;LEK;Laba;Labe;Labé;Лаба; +city::2419533;Kindia;Kindia;Kindla;Киндиа; +city::2419992;Kankan;KNN;Kankan;Kankanas;kangkan;kankan;Канкан;کانکان;カンカン;캉칸; +city::2420056;Kamsar;Kamissar;Kamsar;Kansar;Komsar;Port Kamsar;ka mu sa er;Комсар;卡姆薩爾; +city::2420562;Gueckedou;Gueckedou;Guekedou;Guéckédou;Guékédou; +city::2422457;Coyah;Coya;Coyah;Koyah; +city::2422465;Conakry;CKY;Conacri;Conakry;Konakri;Konakrio;Konakris;Konakry;ke na ke li;konakeuli;konakuri;Κόνακρι;Конакри;קונאקרי;コナクリ;科納克里;코나크리; +city::2422488;Camayenne;Camayen;Camayenne; +city::3578959;Les Abymes;Abeymes;Abymes;Les Abymes;Lez-Abim;PTP;lzabym;lzbym;rezabimu;sa lai bi mei;Лез-Абім;לז אבים;لزابيم;لزبیم;レザビーム;薩萊比梅; +city::2309527;Malabo;Ciudad de Malabo;Malaba;Malabas;Malabo;Malabó;Malampo;Port Clarence;Rev Malebo;SSG;Santa Isabel;ma la bo;mala bo;malabo;malabw;malapo;mallabo;marabo;mlabw;Μαλάμπο;Малаба;Малабо;Մալաբո;מלאבו;مالابو;مالابۆ;ملابو;मलाबो;ਮਲਾਬੋ;மலாபோ;มาลาโบ;མ་ལ་བོ།;მალაბო;ማላቦ;マラボ;馬拉博;말라보; +city::2310046;Bata;BSG;Bata;Batao;Gorad Bata;Kokapipa;ba ta;bata;Бата;Горад Бата;באטה;باتا;ბატა;バタ;巴塔;바타; +city::251833;Volos;Bolus;Iolcus;VOL;Volo;Volos;Vólos;Wolos;wwlws;Βόλος;Волос;וולוס; +city::251948;Vyronas;Viron;Vyron;Vyronas;Víron;Výronas;Βύρων;Βύρωνας; +city::252664;Trikala;Tirhala;Trikala;Trikalon;Trikkaion;Trikkala;Trikkaíon;Trikálon;Tríkala;Tríkkala;Tırhala;trhalh;Τρίκαλα;Трикала;ترحاله; +city::255274;Piraeus;El Pireo;El Pireu;Gorad Pirehj;Il Pireo;Le Piree;Le Pirée;Lo Pireu;Lo Pirèu;O Pireo;Peiraeus;Peiraia;Peiraias;Peiraiefs;Peiraieus;Peiraievs;Peiraiá;Peiraiás;Peiraiéfs;Piraeus;Piraievs;Piraiévs;Piraus;Pire;Pireas;Pireefs;Pirej;Pireja;Pirejas;Pireo;Pireu;Pireus;Pireusz;Piräus;Piræus;Piréefs;Pirėjas;bi lei ai fu si;byrayws;phiri xas;pileaseu;pireusu;pyrh;Πειραιάς;Πειραιεύς;Горад Пірэй;Пирей;Пирея;Пиреј;Пірей;פיראוס;بيرايوس;پیره;ไพรีอัส;ピレウス;比雷埃夫斯;피레아스; +city::255377;Petroupolis;Kipoupolis;Kipoúpolis;Petroupoli;Petroupolis;Πετρούπολη;Петроуполис; +city::255524;Peristeri;Peristeri;Peristeri Attikes;Peristerion;Peristéri;Peristérion;Περιστέρι;Περιστέρι Αττικής;Περιστέριον;Перистерион; +city::255683;Patra;Patra;Patrae;Patrai;Patras;Patrasse;Patrasso;Patres;Patrás;Pátra;Pátrai;Pátras;pa te lei;patora;ptrs;Πάτρα;Патра;פטרס;パトラ;帕特雷; +city::256075;Palaio Faliro;Alt Phaleron;Old Faliron;Palaio Faliro;Palaion Faliron;Palaió Fáliro;Palaión Fáliron;Paleo Faliro;Palio Faliro;Παλαιό Φάληρο;Παλαιόν Φάληρον;Παλιό Φάληρο; +city::256429;Nikaia;Nea Kokkinia;Neokokinis;Nikaia;Nikea;Néa Kokkiniá;Níkaia;Νέα Κοκκινιά;Νίκαια; +city::256575;Nea Smyrni;Nea Smirni;Nea Smyrne;Nea Smyrni;Néa Smírni;Néa Smýrni;Νέα Σμύρνη; +city::256601;Ilion;Ilion;Kato Liosia;Káto Liósia;Nea Liosia;Néa Liósia;Ílion;Ίλιον;Νέα Λιόσια; +city::256614;Nea Ionia;Nea Ionia;Néa Ionía;Podharadhes;Podharádhes;Νέα Ιωνία; +city::258576;Larisa;Larisa;Larissa;Lárisa;Lárissa;Yenisehir;Yenişehir;Λάρισα;Лариса; +city::258620;Lamia;Izdin;Lamia;Lamija;Lamía;lmyaʾ;Λαμία;Ламия;لمياء; +city::260114;Chania;CHQ;Candia;Canea;Chania;Chanion;Chaniá;Cydonia;Càndia;Hania;Hanio;Hanià;Hanya;Khan'ja;Khania;Khaniá;Kreta;La Canea;La Canee;La Canée;Ĥanio;Χανίων;Χανιά;Ханья; +city::260133;Chalkida;Calcide;Calcis;Chalcis;Chalkida;Chalkis;Chalkída;Chalkís;Euripos;Khalkida;Khalkis;Khalkís;klqys;Χαλκίδα;Χαλκίς;Халкида;כלקיס; +city::260172;Khalandrion;Chalandri;Chalandrion;Flya;Khalandhrion;Khalandri;Khalándhrion;Khalándri;Phlya;Φλύα;Χαλάνδρι;Χαλάνδριον; +city::260204;Keratsini;Agios Georgios Keratsiniou;Ayios Yeoryios;Ayios Yeoryios Keratsiniou;Hagios Georgios Keratsiniou;Keratsini;Keratsinion;Keratsiniou;Keratsiníou;Keratsíni;Keratsínion;Tseratsinion;Áyios Yeóryios;Άγιος Γεώργιος Κερατσινίου;Κερατσίνι;Κερατσίνιον;Τσερατσίνιον; +city::261414;Kallithea;Kalitea;Kaliteja;Kalithea;Kalithéa;Kalitėja;Kallifeja;Kalliteja;Kallithea;Kallithéa;kalythya;kalyth‌a;Καλλιθέα;Калитеа;Каллифея;Каллітея;كاليثيا;کالیته‌آ; +city::261604;Kalamata;KLX;Kalamae;Kalamai;Kalamata;Kalamatas;Kalamato;Kalamáta;Kalmata;Kalámai;kalamata;Καλάμαι;Καλαμάτα;Каламата;كالاماتا; +city::261745;Irakleion;Candia;Candie;Càndia;Erakleion;HER;Heracleum;Heracliao;Heraclion;Heraclião;Heraclión;Herakleion;Heraklion;Herákleion;Héraklion;Iraclio;Iraclion;Irakleio;Irakleio Kritis;Irakleion;Iraklija;Iraklio;Iraklion;Iráclio;Irákleio;Irákleion;Iráklio;Iráklion;Kandiye;Khandax;Megalokastro;Megalokastron;hrqlywn;irakurion;yi la ke li weng;Ērakleion;Ηράκλειο;Ηράκλειο Κρήτης;Ираклио;Ираклион;הרקליון;イラクリオン;伊拉克利翁; +city::261779;Ioannina;Giannena;Giannina;IOA;Ioaa;Ioanina;Ioannina;Ioánina;Ioánnina;Ioäa;Janina;Yanina;Yannina;Yanya;yue a ni na;Γιάννενα;Γιάννινα;Ιωάννινα;Янина;约阿尼纳; +city::262036;Glyfada;Aixone;Glifadha;Glifádha;Glyfada;Glyfáda;Γλυφάδα;Γλυφαδα; +city::262135;Galatsi;Galatsi;Galatsion;Galátsi;Galátsion;Γαλάτσι;Γαλάτσιον; +city::263986;Agios Dimitrios;Agios Dimitrios;Ayios Dhimitrios;Brakhami;Brakhámi;Áyios Dhimítrios;Άγιος Δημήτριος; +city::264194;Agia Paraskevi;Agia Paraskeue;Agia Paraskevi;Agía Paraskeví;Ayia Paraskevi;Ayía Paraskeví;Αγία Παρασκευή; +city::264371;Athens;ATH;Afina;Afini;Afiny;An Aithin;Ateena;Atehny;Aten;Atena;Atenai;Atenas;Atenas - Athena;Atenas - Αθήνα;Atene;Atenes;Ateni;Ateno;Atenoj;Ateny;Athen;Athena;Athenae;Athenai;Athene;Athenes;Athens;Atheny;Athina;Athinai;Athinia;Athènes;Athén;Athénes;Athény;Athína;Athínai;Atina;Atény;Atēnas;Atėnai;Aþena;Kota Athena;Lungsod ng Athina;Lungsod ng Athína;atene;atene si;ateni;athensa;athyna;atn;etens;xethens;ya dian;Αθήνα;Αθήναι;Αθηνα;Αθηναι;Атина;Атэны;Афины;Афіни;Аѳины;Աթենք;אתונה;آتن;أثينا;ئافېنا;ܐܬܝܢܐ;अथेन्स;ஏதென்ஸ்;เอเธนส์;ათენი;Ἀθῆναι;アテネ;雅典;아테네;아테네 시; +city::265243;Marousi;Amarousio;Amarousion;Amaroúsion;Marousi;Maroussi;Maroúsi;Αμαρούσιον;Μαρούσι; +city::265488;Acharnes;Acharnae;Acharnai;Acharne;Acharnes;Akharnai;Akharnaí;Menidhi;Menidhion;Menidi;Menidion;Menioi;Menídhi;Menídhion;Meníoi;Αχαρνές;Αχαρναί;Μενίδι;Μενίδιον; +city::265533;Aigaleo;Aegaleo;Aigaleo;Aigáleo;Egaleo;Αιγάλεω; +city::400666;Rodos;RHO;Rhodes;Rhodes Town;Rhodos;Rodas;Rodes;Rodhos;Rodi;Rodos;Rodos Town;Ródhos;Ródos;Ρόδος;Родос; +city::734077;Thessaloniki;Ftohomana;Ftohomána;I Protevoussa ton Prosfigon;I Protévoussa ton Prosfígon;SKG;Salonic;Salonica;Salonicco;Salonik;Salonika;Salonikai;Salonike;Saloniki;Salonique;Saloníki;Saluniccu;Salónica;Saruna;Selanik;Selânik;Solun;Soluň;Solún;Săruna;THessalonika;Tesalonica;Tesaloniki;Tesalonîkî;Tesalónica;Tessalonica;Tessalònica;Thessalonica;Thessalonike;Thessaloniki;Thessalonique;Thessaloníki;Thessaloníkē;sai sa luo ni ji;salwnyk;slwnyqh;slwnyqy;tessaroniki;Þessalóníka;Θεσσαλονίκη;Σαλονίκη;Σαλονικη;Салоники;Салоніки;Солун;Ѳessalonika;Ѳєссалонїка;סלוניקה;סלוניקי;سالونيك;テッサロニキ;塞萨洛尼基; +city::734330;Serres;Ser;Seres;Serez;Serra;Serrae;Serrai;Serre;Serres;Serrès;Sjar;Szeresz;Széresz;Sérrai;Sérres;Sѣru;sai lei;seleseu;seres;seresu;Σέρρα;Σέρραι;Σέρρες;Сер;Серре;Серрес;Сяр;Сѣръ;סֶרֶס;セレス;塞雷;세레스; +city::735861;Kavala;Cavala;Cavalla;KVA;Kaballa;Kavala;Kavalla;Kavála;Kaválla;Kawala;Neapolis;ka wa la;kavu~ara;qwlt;Καβάλα;Кава̀ла;Кавала;قولة;カヴァラ;卡瓦拉; +city::735914;Katerini;Aikaterini;Aikateríni;Katerina;Katerini;Kateríni;Κατερίνη;Катерини; +city::736083;Kalamaria;Kalamaria;Kalamarija;Kalamariá;Kalamarya;Καλαμαριά;Каламария; +city::736928;Alexandroupoli;AXD;Alejandropolis;Alejandrópolis;Aleksandrupolis;Alessandropoli;Alexandhroupolis;Alexandhroúpolis;Alexandropolis;Alexandroupoli;Alexandroupolis;Alexandroúpoli;Alexandroúpolis;Dedeagac;Dedeagach;Dedeagatch;Dedeağaç;Dedéagach;alyksandrwbwly;Αλεξανδρούπολη;Αλεξανδρούπολις;Александруполис;Дедеагач;أليكساندروبولي; +city::8310138;Ilioupoli;Ilioupoli;Ilioúpoli;Ηλιούπολη; +city::8310183;Korydallos;Korydallos;Korydallós;Κορυδαλλός; +city::8358544;Zografos;Zografos;Zografou;Zográfos;Ζωγράφος;Ζωγράφου; +city::3587902;Villa Nueva;Vil'ja-Nuehva;Vilja Nueva;Viljanueva;Villa Nueva;bi ya nu ai wa;wya nwywa gwatymala;Вилья-Нуэва;Вилянуева;ویا نویوا، گواتیمالا;比亞努埃瓦; +city::3587923;Villa Canales;Villa Anales;Villa Canales; +city::3588258;Totonicapan;Totonicapan;Totonicapán;Totonikapan;Тотоникапан; +city::3589289;Santa Lucia Cotzumalguapa;Santa Lucia;Santa Lucia Cotzumalguapa;Santa Lucía;Santa Lucía Cotzumalguapa; +city::3589452;Santa Catarina Pinula;Santa Catarina Pinula; +city::3589885;San Juan Sacatepequez;San Juan Sacatepequez;San Juan Sacatepéquez; +city::3590219;San Francisco El Alto;San Francisco;San Francisco El Alto; +city::3590979;Quetzaltenango;AAZ;Kecaltenangas;Kecaltenango;Kesal'tenango;Ketsaltenan'nko;Ketzaltenango;Quetzaltenanco;Quetzaltenango;Quetzaltenānco;Quexaltenango;Quezaltenango;ke sa er te nan ge;keteusaltenang-go;ketsu~arutenango;Κετσαλτενάνγκο;Кесальтенанго;Кецалтенанго;ケツァルテナンゴ;克薩爾特南戈;케트살테낭고; +city::3591062;Puerto Barrios;PBR;Puehrto-Barrios;Puerto Barijosas;Puerto Barios;Puerto Barrios;ba li ao si gang;Пуерто Бариос;Пуэрто-Барриос;פוארטו באריוס;巴里奧斯港; +city::3591415;Petapa;Petapa;San Miguel Petapa; +city::3592519;Mixco;Mishko;Mixco;Мишко; +city::3595416;Huehuetenango;HUG;Huehuetenangas;Huehuetenango;Uehuehtenango;Ueuetenango;ue-uetenang-go;u~eu~etenango;wei wei te nan ge;Уеуетенанго;Уэуэтенанго;ウェウェテナンゴ;韋韋特南戈;우에우에테낭고; +city::3595803;Escuintla;Ehskuintla;Escuintla;Esquintla;esuku~intora;Эскуинтла;エスクィントラ; +city::3598119;Coban;Coban;Cobán;Koban;Kobanas;ke wan;koban;Кобан;קובאן;科萬;코반; +city::3598132;Guatemala City;Cidade da Guatemala;Citta del Guatemala;Città del Guatemala;Ciudad Guatemala;Ciudad de Guatemala;Ciutat de Guatemala;GUA;Guate;Guatemala;Guatemala City;Guatemala Hiria;Guatemala by;Guatemala la Nueva;Guatemala-Stadt;Guatemala-Urbo;Guatemala-stad;Gvatemala;Gvatemalurbo;Gwatemala;New Guatemala;Nueva Guatemala;Nueva Guatemala de la Asuncion;Nueva Guatemala de la Asunción;Pole tes Gouatemalas;Santiago de Guatimala;gua de ma la shi;guatemarashiti;gwatemalla si;gwatemallasiti;kawtemalasiti;mdynt ghwatymala;shhr gwatmala;Πόλη της Γουατεμάλας;Гватемала;גואטמלה סיטי;גוואטמלה סיטי;شهر گواتمالا;مدينة غواتيمالا;กัวเตมาลาซิตี;グアテマラシティ;瓜地馬拉市;과테말라 시;과테말라시티; +city::3598529;Chinautla;Chignautla;Chinautla;Santa Cruz de Chinautla; +city::3598572;Chimaltenango;Chimal'tenango;Chimaltenango;Santa Ana Chimaltenango;Чимальтенанго; +city::3598655;Chichicastenango;Chichicastenango;Chichikastenango;Santo Tomas Chichicastenango;Santo Tomás Chichicastenango;Чичикастенанго; +city::3599735;Amatitlan;Amatitlan;Amatitlán;San Juan Amatitlan;San Juan Amatitlán; +city::2374775;Bissau;Bisao;Bisau;Bisau - Bissau;Bisauo;Bisava;Bisaŭo;Biso;Bissa;Bissao;Bissau;Bissá;Bisáu;Gorad Bisau;Mpissaou;OXB;Sao Jose de Bissau;São José de Bissáu;Wisaw;bi shao;bis sea;bis'sa'u;bisa'u;bisau;bsaw;bysaw;bysayw;picavu;Μπισσάου;Бисао;Бисау;Бісау;Горад Бісау;Բիսաու;ביסאו;بساؤ;بيساو;بیسائو;بیساو;बिसाउ;বিসাউ;বিস্সাউ;ਬਿਸਾਊ;பிசாவு;บิสเซา;བི་སའོ།;ბისაუ;ቢሳው;ビサウ;比紹;比绍;비사우; +city::3378644;Georgetown;Demerara;Dzhordzhtaun;Dzordztaun;Dzordztauna;Dzordztaunas;Dzordztauns;Džordžtaun;Džordžtauna;Džordžtaunas;Džordžtauns;GEO;Georgetown;Georgetown i Guyana;Georgiopolis;Georgurbo;Gorad Dzhordzhtaun;Jojton;Jòjtòn;Tzortztaoun;Zhorzhtaun;cxrc thawn;gwrgtʼwn;jarajata'una;jarj ٹawn gyana;jarjata'una;jojitaun;jorjata'una;jorjtavun;jrj‌tawn;jwrj tawn;jwrj twghn;qiao zhi dui;qiao zhi dun;zuo zhi cheng;Τζορτζτάουν;Τζώρτζταουν;Џорџтаун;Горад Джорджтаўн;Джорджтаун;Жоржтаун;Ջորջթաուն;גורגטאון;جارج ٹاؤن، گیانا;جرج‌تاون;جورج تاون;جورج توغن;جورج‌تاو;जॉर्जटाउन;ਜਾਰਜਟਾਊਨ;ଜର୍ଜଟାଉନ;ஜோர்ஜ்டவுண்;ജോർജ്ജ് ടൗൺ;จอร์จทาวน์;ཅོར་ཅི་ཐོན།;ჯორჯტაუნი;ጆርጅታውን;ジョージタウン;乔治敦;佐治城;조지타운; +city::1818209;Tsuen Wan;Ch'uan-wan;Ch’üan-wan;Tsuen Wan;Tsun Wan;Tsun Wan Wai;quan wan;荃灣; +city::1818223;Yuen Long Kau Hui;Yuen Long Kau Hui;yuan lang jiu xu;元朗舊墟; +city::1819609;Kowloon;Chiu-lung;Czjulun;Kaulunas;Koulun;Kowloon;jiu long;julung;yi fa ban;Цзюлун;九龍;意法半;주룽; +city::1819729;Hong Kong;Chon'nk Kon'nk;Gankong;Gon Kong;Gonkong;HKG;Hiong-geng;Hiŏng-gē̤ng;Hong Kong;Hongkong;Honkong;Hồng Kông;Khongkong;Khonkong;Victoria;ankan;hamga kamga;hanakana;hang kang;hang kang nagaram;hangakanga;hang‌kang;hankam;heankean;hng kng;hon'ga kon'ga;hong-kʼongi;hongakonga;hongkong;honkongu;hwng kwng;hwng qwng;hwngh kwngh;hwnj kwnj;hxngkng;hʼng qʼng;shyanggang;xiang gang;Χονγκ Κονγκ;Ганконг;Гонконг;Хонгконг;Хонконг;Һoң Koң;Һоң Коң;Հոնկոնգ;האנג קאנג;הונג קונג;شياڭگاڭ;هانگ کانگ;هنگ کنگ;هونج كونج;هونغ كونغ;هونگ کونگ;ھwng kwng;ھونگ کونگ;ھۆng kۆng;ھۆنگ کۆنگ;ہang kang;ہانگ کانگ;ހޮންކޮންގު;हङकङ;हाँग काँग;हांगकांग;हांग् कांग् नगरम्;हॉन्ग कॉन्ग;হংকং;ਹਾਂਗਕਾਂਗ;હોંગકોંગ;ହଂକଂ;ஆங்காங்;హాంగ్‌కాంగ్;ಹಾಂಗ್ ಕಾಂಗ್;ഹോങ്കോങ്;හොංකොං;ฮ่องกง;ཧང་ཀང་།;ཧོང་ཀོང་།;ဟောငကောင;ဟောင်ကောင်;ჰონგ-კონგი;ሆንግ ኮንግ;ហងកង;ហុងកុង;香港;홍콩; +city::3600949;Tegucigalpa;Gorad Tehgusigal'pa;TGU;Tegousigalpa;Tegousigoualpa;Tegucigalpa;Tegucigalpo;Tegucigucigalpa;Tegusigal'pa;Tegusigalp;Tegusigalpa;Teguzigalpa;Tenkousinkalpa;Tequsiqalpa;Teuctzincalpan;Tègucigalpa;de gu si jia ba;te gu xi jia er ba;tegushigarupa;tegusigalapa;tegusigalpa;tekucikalpa;tekusikalpa;tgwsygalpa;tgwsyglph;tyghwsyghalba;Τεγκουσιγκάλπα;Τεγουσιγάλπα;Горад Тэгусігальпа;Тегусигалпа;Тегусигальпа;Тегусігальпа;Տեգուսիգալպա;טגוסיגלפה;טעגוסיגאלפע;تيغوسيغالبا;تگوسیگالپا;ٹیگوسیگلپا;तेगुसिगल्पा;তেগুসিগালপা;ਤੇਗੂਸੀਗਾਲਪਾ;டெகுசிகல்பா;ടെഗൂസിഗാൽപ;เตกูซิกัลปา;ཐེ་གུ་སི་གེ་པ།;ტეგუსიგალპა;ቴጉሲጋልፓ;テグシガルパ;德古斯加巴;特古西加爾巴;테구시갈파; +city::3601782;San Pedro Sula;Gorad San-Pedra-Sula;SAP;San Pedro;San Pedro Sula;San Pedro Zollan;San Pedro Zōllān;San-Pedro-Sula;san bydrw swla;san pe dor su la;sanpedeulosulla;san・pedoro・sura;sheng pei de luo su la;Горад Сан-Педра-Сула;Сан Педро Сула;Сан-Педро-Сула;سان بيدرو سولا;سان پیڈرو سولا;ซานเปโดรซูลา;サン・ペドロ・スーラ;圣佩德罗苏拉;산페드로술라; +city::3608248;La Ceiba;Ceiba;LCE;La Ceiba;La Seiba;La Sejba;La-Sejba;la sai wa;Ла Сейба;Ла-Сейба;ラ・セイバ;拉塞瓦; +city::3610613;El Progreso;Ehl'-Progreso;El Progreso;El Progress;Progreso;Эль-Прогресо; +city::3613321;Comayagua;Comayagua;XPL; +city::3613528;Ciudad Choluteca;Chollolteca;Choluteca;Ciudad Choluteca; +city::3613533;Choloma;; +city::3186886;Zagreb;Agram;Andautonia;Gorad Zagrab;Lungsod ng Zagreb;Sagrab;Sagreb;Sagwzlwgbouh;Sakreb;Ságrab;ZAG;Zabrag;Zabreg;Zagabbria;Zagabria;Zagavria;Zagrab;Zagrabia;Zagreb;Zagreba;Zagrebas;Zagrebi;Zagrebo;Zagrebs;Zagrep;Zagrev;Zagrzeb;Zagrèb;Zagréb;Zagrėbs;Zagàbria;Zahreb;Zankremp;Zaqreb;Zágráb;Záhreb;Záhřeb;cakirep;jagareba;jageulebeu;jagriba;jhagreba;sa ge lei bu;sa kerb;sagreb;zagaraba;zaghrb;zagrb;zagrebi;zagurebu;zajryb;zghrb;Żagreb;Ζάγκρεμπ;Горад Заграб;Загреб;Զագրեբ;זאגרב;זאגרעב;زاجريب;زاغرب;زاگرب;زاگرێب;زغرب;जग्रिब;झाग्रेब;জাগরেব;ਜ਼ਾਗਰਬ;சாகிரேப்;സാഗ്രെബ്;ซาเกร็บ;ཛག་རེབ།;ზაგრები;ዛግሬብ;ザグレブ;萨格勒布;薩格勒布;Ꙁагрєбъ;자그레브; +city::3186952;Zadar;Chadra;Gorad Zadar;Iadera;ZAD;Zadar;Zadara;Zadaras;Zantar;Zara;jadaleu;zadar;zadari;zadaru;zdar;zha da er;zʼdʼr;Ζαντάρ;Горад Задар;Задар;זאדאר;زادار;زدار;ზადარი;ዛዳር;ザダル;扎達爾;자다르; +city::3190261;Split;Gorad Split;SPU;Spalato;Spalatum;Split;Split / Dalmatien;Splita;Splitas;Spàlato;asplyt;sblyt;seupeulliteu;si pu li te;splita;splyt;supurito;Σπλιτ;Горад Спліт;Сплит;Спліт;Սպլիտ;ספליט;اسپلیت;سبليت;سپلٹ، کروشیا;स्प्लिट;სპლიტი;スプリト;斯普利特;스플리트; +city::3190586;Slavonski Brod;Brod;Bród;Marsonia;Slavons'kij Brod;Slavonski Brod;Slavonski Brodas;Slavonski brod;Slavonski-Brod;Slawonisch Brod;aslawnsky brd;seullabonseukibeulodeu;si la wo ni ya bu luo de;sla wxn ski br xd;slafwnsky brwd;slbwnsqy brwd;Славонски Брод;Славонски брод;Славонски-Брод;Славонський Брод;סלבונסקי ברוד;اسلاونسکی برد;سلافونسكي برود;سلاڤۆنسکی برۆد;สลาวอนสกีบรอด;スラヴォンスキ・ブロド;斯拉沃尼亞布羅德;슬라본스키브로드; +city::3190966;Sesvete;Sesvete;Сесвете; +city::3191648;Rijeka;Estado libre de Fiume;Fiume;Fkumen;Flumen Sancti Viti;RJK;Reka;Rieka;Rijeka;Rijeko;Rěka;Sankt Veit am Flaum;Sankt Veit am Pflaum;Slobodna Drzava Rijeka;Slobodna Drzhava Rijeka;Slobodna Država Rijeka;Stato libero di Fiume;Vitipolis;rieka;Риека;Ријека;Слободна Држава Ријека;リエカ; +city::3192224;Pula;PUY;Pietas Iulia;Pluj;Pola;Poula;Poła;Pul;Pula;Pulj;bwla;pu la;pulla;pura;pwla;pwlh;Πούλα;Пула;Պուլա;פולא;פולה;بولا;پولا;პულა;プーラ;普拉;풀라; +city::3193935;Osijek;Colonia Aelia Mursa;Esseg;Essegg;Essek;Eszek;Eszék;Mursa;Mursia;OSI;Osek;Osiek;Osigiek;Osijek;Osijeka;Osijekas;Osik;oshieku;xo siyekh;Οσιγιέκ;Осиек;Осијек;โอซีเยค;オシエク; +city::3716667;Thomazeau;Thomazeau;Tomazo; +city::3717588;Saint-Marc;Saint-Marc;Sen-Mark;Сен-Марк; +city::3718420;Port-de-Paix;PAX;Podepe;Podpe;Por-de-Pe;Port Paix;Port-de-Paix;Porto-da-Paz;Pòdepè;Pòdpè;he ping gang;poleudeupe;poleudeupei;porudope;Пор-де-Пе;پورت دے پئے;ポールドペ;和平港;포르드페;포르드페이; +city::3718426;Port-au-Prince;Gorad Port-o-Prehns;PAP;Port au Prince;Port o Prens;Port o Prensas;Port-au-Prince;Port-o-Prens;Port-o-Prins;Porto Principe;Porto Príncipe;Portoprensa;Portoprinco;Portus Principis;Potoprens;Puerto Principe;Puerto Príncipe;Pòtoprens;Ville de Port-au-Prince;bwrt aw brans;poleutopeulaengseu;porata-o-prainsa;port-o-pirins;porta-a-prinsa;porta-au-prinsa;porta-o-prinsa;porutopuransu;pwrtw prns;pwrtwprns;tai zi gang;Πορτ-ο-Πρενς;Горад Порт-о-Прэнс;Порт о Пренс;Порт-о-Пренс;Պորտ-օ-Պրենս;פורט או פרינס;פורט-או-פרנס;بورت أو برانس;پورتو پرنس;پورتوپرنس;پورٹ او پرنس;पोर्ट-ऑ-प्रिंस;पोर्ट-औ-प्रिन्स;পোর্ট-অ-প্রিন্স;ਪੋਰਤ-ਓ-ਪ੍ਰੈਂਸ;போர்ட்-ஓ-பிரின்ஸ்;പോർട്ട്-ഔ-പ്രിൻസ്;ปอร์โตแปรงซ์;པོ་རོ་ཊི་ཨའུ་པི་རིན་སི།;პორტ-ო-პრენსი;ፖርቶፕሪንስ;ポルトープランス;太子港;포르토프랭스; +city::3718962;Tigwav;Petit Goave;Petit Goâve;Petit-Goave;Petit-Goâve;Tigwav;Ville de Petit Goave;Ville de Petit Goâve; +city::3719028;Petionville;Petionville;Petyon-Vil;Pétionville;Ville de Petion-Ville;Ville de Pétion-Ville; +city::3720824;Miragoane;; +city::3722286;Leogane;Leogan;Leogane;Leyogan;Leyogàn;Léogâne;Ville de Leogane;Ville de Léogane;Yaguana;lai ao gan;reogan;Леоган;レオガン;萊奧甘; +city::3723593;Jeremie;JEE;Jeremi;Jeremias;Jeremie;Jérémie;Zheremi;jelemi;jeremi;jyrymy;re lei mi;zrmy;Жереми;Жеремі;זרמי;جیریمی;ジェレミー;熱雷米;제레미; +city::3723779;Jacmel;JAK;Jacmel;Jakmel;Jakmèl;Yaquimo;Yáquimo;Zhakmel';Zhakmele;jakeumel;jakumeru;jkml;ya ke mei lei;zʼqml;Жакмеле;Жакмель;זאקמל;جکمل;ジャクメル;雅克梅勒;자크멜; +city::3724696;Gonayiv;Gonaiv;Gonaives;Gonayiv;Gonaïves;Les Gonaives;Les Gonaïves;Ville des Gonaives;Ville des Gonaïves;Гонаив; +city::3726786;Delmas 73;; +city::3727135;Croix-des-Bouquets;Croix des Bouquets;Croix-des-Bouquets; +city::3728097;Les Cayes;Aux Cayes;CYA;Cayes;Le Kajus;Le-Ke;Les Cayes;Los Cayos;Okay;Ville des Cayes;lai kai;leukaye;rekai;Ле-Ке;لے سائیس;レカイ;萊凱;르카예; +city::3728474;Okap;CAP;Cabo Haitiano;Cap Haitien;Cap-Francais;Cap-Français;Cap-Haitien;Cap-Haïtien;Cape Haitien;Cape Haytien;Guarico;Guárico;Haitia Kabo;Kap Ayisyen;Kap-Ait'en;Kap-Ait'ene;Kap-Aitien;Le Cap;Okap;Ville du Cap-Haitien;hai de jiao;kap-hayytyn;kapaishan;kapeuaisiaeng;Καπ-Αϊτιέν;Кап-Аитьен;Кап-Аитьене;Кап-Аїтьєн;کاپ-هائیتین;カパイシャン;海地角;카프아이시앵; +city::715126;Szolnok;Gorad Sol'nak;Sol'nok;Solnoca;Solnok;Solnokas;Szolnok;shwlnwk;slnwk;solnokeu;sorunoku;suo er nuo ke;swlnwq;Горад Сольнак;Солнок;Сольнок;סולנוק;سلنوک;شولنوک;სოლნოკი;ソルノク;索尔诺克;솔노크; +city::715429;Szeged;Kiskundorozsma;QZD;Seged;Segedin;Seghedin;Szegedin;Szeghed;Tape;Tápé;skdyn;Сегед;سکدین; +city::716935;Nyiregyhaza;Gorad N'irehdz'khaza;N'ired'gaza;N'ired'khaza;Nired'khaza;Niredkhaza;Nireghaza;Njiredhaz;Njireghaza;Njiregkhaza;Njiređhaza;Nyirszollos;Nyirszolos;Nyredhaza;Nyírszőllős;Nyírszőlős;Níreďháza;ni lai ji ha zuo;nilejihajeo;niredhaza;nirejihaza;nyrghhaza;nyrghza;Њиређхаза;Њиреѓхаза;Горад Ньірэдзьхаза;Ниредхаза;Ниредьхаза;Ньиредьхаза;Ньїредьгаза;נירגהאזה;נירעדהאז;نيرغهازا;نیرادہازا;نیرگهزا;ნირედჰაზა;ニーレジハーザ;尼賴吉哈佐;니레지하저; +city::717582;Miskolc;MCQ;Mishkol'c;Mishkolc;Miskolc;Miskolca;Miskolcas;Miskolcz;Miskole;Miskovec;Miszkolc;Miškolc;Miškolca;Miškolcas;Miškovec;mi shen ke er ci;mishukorutsu;misyukolcheu;mskwls;myshkwlts;mysqwlz;Мишколц;Мишкольц;Мішкольц;מישקולץ;مسکولس;ميشكولتس;میشکولتس;მიშკოლცი;ミシュコルツ;米什科尔茨;미슈콜츠; +city::721239;Eger;Agria;Eger;Egera;Egeris;Egra;Egri;Ehger;Erlau;Eğri;Gorad Ehger;Jager;Jegra;Jáger;Szarvasko;Szarvaskő;agr;ai ge er;aygyr;egeleu;egeri;egeru;Јегра;Горад Эгер;Егер;Еґер;Эгер;אגר;ערלוי;اگر;ایگیر;ეგერი;エゲル;埃格爾;에게르; +city::721472;Debrecen;DEB;Debrecen;Debrecena;Debrecenas;Debrecin;Debrecinum;Debreczyn;Debrecín;Debretin;Debrețin;Ntempretsen;dbrsn;dbrtsn;dbrzn;de bu lei sen;debeulechen;debretseni;deburetsu~en;dybrysyn;Ντέμπρετσεν;Дебрецен;Дебрецин;Դեբրեցեն;דברצן;دبرتسن;دبرسن;دیبریسین;დებრეცენი;デブレツェン;德布勒森;데브레첸; +city::722437;Bekescsaba;Bekescab;Bekescaba;Bekescsaba;Bekeshchaba;Bekesska Caba;Bekeščab;Bekeščaba;Bichisciaba;Bichișciaba;Békešská Čaba;Békéscsaba;Gerla;Mezomegyer;Mezőmegyer;Nagymajor;bei kai shen qiao bao;bekeshuchaba;bekesyucheobeo;bykyschaba;bykyshchaba;Бекешчаба;בקשצאבה;بیکیسچابا;بیکیشچابا;ბეკეშჩაბა;ベーケーシュチャバ;貝凱什喬包;베케슈처버; +city::3042638;Zalaegerszeg;Jegersek;Zalaederseg;Zalaegerseg;Zalaegersegas;Zalaegerszeg;Zalaegerszegium;Zalaehgerseg;jeolleoegeleusegeu;zalaegersegi;zalaygrsg;zalaygyrshyg;zaraegerusegu;zuo luo ai ge sai ge;Залаегерсег;Залаеґерсеґ;Залаэгерсег;זאלאגרסג;زالائگرسگ;زالائگیرشیگ;ზალაეგერსეგი;ザラエゲルセグ;佐洛埃格塞格;절러에게르세그; +city::3042929;Veszprem;Comitatul Veszprem;Comitatul Veszprém;Gyulafiratot;Gyulafirátót;Kadarta;Kádárta;Vesprem;Vespremas;Vesprim;Vesprimia;Vesprém;Vesprėmas;Vessprem;Vessprém;Veszprem;Veszprem megye;Veszprim;Veszprém;Veszprém megye;Wesprim;ZFP;beseupeulem;vu~esupuremu;wei si pu lei mu;wei si pu lei mu zhou;wshprym;wsprm;wsprym;Веспрем;וספרם;وسپریم;وشپریم;ვესპრემი;ヴェスプレーム;維斯普雷姆;維斯普雷姆州;베스프렘; +city::3044082;Tatabanya;Tataban'ja;Tatabana;Tatabania;Tatabanj;Tatabanja;Tatabanya;Tatabánya;tao tao ba ni ao;tatabanya;teoteobanyeo;Татабанья;Татабаня;Татабања;טאטאבניה;تاتابانیا;ტატაბანია;タタバーニャ;陶陶巴尼奧;터터바녀; +city::3044310;Szombathely;Gorad Sombatkhej;Gyongyosherman;Gyöngyöshermán;Hereny;Herény;Kamon;Kámon;Olad;Perint;Sabaria;Sambotel;Savaria;Sombatgej;Sombathejus;Sombathel;Sombathelj;Sombathėjus;Sombatkhej;Sombatkhel;Sombotel;Steinamanger;Szentkiraly;Szentkirály;Szombatehly;Szombathely;Szombatnely;ZBX;Zanat;smbathy;som bxt he;sombeoteuhei;sonbatohei;song bo te hai yi;swmbthy;Горад Сомбатхей;Сомбатгей;Сомбатхей;Сомбатхељ;סומבטהי;سمباتهی;شامباتہیلی;โซมบอตเฮ;სომბატჰეი;ソンバトヘイ;松博特海伊;솜버트헤이; +city::3044774;Szekesfehervar;Alba Regalis;Alba Regia;Albareale;Gorad Sekeshfekhervar;Sekesfehervar;Sekesfehervara;Sekesfehervaras;Sekeshfegervar;Sekeshfekhervar;Sekešfehervar;Stolicny Belehrad;Stoličný Belehrad;Stolni Beograd;Stolni Biograd;Stuhlweissenburg;Stuhlweißenburg;Szekesfehervar;Székesfehérvár;Sēkešfehērvāra;Sėkešfehėrvaras;sai ke shen bai bao;sekeshufeheruvu~aru;sekesyupeheleubaleu;sekhesfe her war;sykshfhrwar;sykshfhyrfar;Горад Секешфехервар;Секешфегервар;Секешфехервар;Столни Београд;סקשפהרוואר;سيكشفهيرفار;سیکشفهروار;شیکیسفیہیروار;เซเคซเฟเฮร์วาร์;სეკეშფეჰერვარი;セーケシュフェヘールヴァール;塞克什白堡;세케슈페헤르바르; +city::3045190;Sopron;OEdenburg;Scarabantia;Scarbantia;Shopron;Sopron;Sopronas;Sopronium;shopuron;shprn;shwbrwn;soparona;swprwn;syopeulon;xiao pu lang;Ödenburg;Šopron;Šopronas;Σόπρον;Шопрон;שאפראן;שופרון;سوپرون;شوبرون;شپرن;सोपरोन;შოპრონი;ショプロン;肖普朗;쇼프론; +city::3046526;Pecs;Cinquechiese;Fuenfkirchen;Funfkirchen;Fünfkirchen;Gorad Pech;Hird;Magyarurugy;Magyarürügy;Malom;Meced Sabolc;Mecek Sabolc;Mecsekalja;Mecsekszabolcs;Málom;Nadapipad;Nadarpad;Nagyarpad;Nagyárpád;PEV;Paetkostolie;Patacs;Pec;Peca;Pecas;Pech;Pechuj;Pecs;Pecuh;Pecuj;Pecuy-;Pecz;Pets;Peçuy-;Peč;Pečuh;Pečuj;Päťkostolie;Pécs;Pēča;Pėčas;Quinque Ecclesiae;Racvaros;Rácváros;Somogy;Sopianae;Vasas;bytsh;pch;peca;pechi;pei qi;pych;pz;Πετς;Горад Печ;Печ;Печуј;פעטש;פץ;بيتش;پچ;پیچ;पेच;პეჩი;ペーチ;佩奇;페치; +city::3046619;Paradsasvar;Paradsasvar;Paradshashvar;Ureghuta;Uveghuta;Üreghuta;Üveghuta;Парадшашвар; +city::3047679;Nagykanizsa;Bagola;Bagolasanc;Bagolasánc;Bajcsa;Gross Kanischa;Grosz Kanischa;Kanije;Korpavar;Korpavár;Miklosfa;Miklósfa;Nad'kanizha;Nadkaniza;Nadkanizha;Nadkaniža;Nagykanizsa;Somogyszentmiklos;Somogyszentmiklós;Velika Kaniza;Velika Kanizha;Velika Kaniža;Velika Kanjiza;Velika Kanjiža;nadkanyzha;nadkanyzsa;najikanija;nao ji kao ni rao;neojikeonijeo;qnyzhh;Велика Канижа;Надканижа;Надьканижа;Надьканіжа;قنیژه;نادکانیزسا;نادکانیژا;ნადკანიჟა;ナジカニジャ;瑙吉考尼饒;너지커니저; +city::3050434;Kecskemet;Heteny;Hetenyegyhaza;Hetény;Hetényegyháza;Kechkemet;Keckemet;Keckemetas;Kecskemet;Kecskemét;Kečkemet;Kečkemėtas;kai qi kai mei te;kchkmyt;kchkymt;kechikemeteu;kechikemeto;khechkhe met;qz'qmt;Кечкемет;קצ'קמט;کچکمیت;کچکیمت;เคชเคเมต;ケチケメート;凯奇凯梅特;케치케메트; +city::3050616;Kaposvar;Kaposfured;Kaposfüred;Kaposhvar;Kaposszentjakab;Kaposvar;Kaposvaras;Kaposvár;Kapošvar;Kapošvaras;Toponar;Toponár;Torocske;Töröcske;kao bo shen bao;kaposhuvu~aru;kapshwar;kapwswar;keoposyubaleu;Капошвар;קאפושוואר;کاپشوار;کاپوسوار;კაპოშვარი;カポシュヴァール;考波什堡;커포슈바르; +city::3052009;Gyor;Arrabona;D'er;D'jor;D'or;Deras;Djor;Dėras;GJer;Gera;Gjer;Gjur;Gorad Dz'jor;Gyirmot;Gyirmót;Gyor;Gyorszentivan;Győr;Győrszentiván;Iaurinum;Jura;Menfocsanak;Ménfőcsanak;Pinnyed;Pinnyéd;Raab;cexr;diori;dywr;gywr;jeru;jie er;joeleu;Đer;Ģēra;Ђер;Ѓер;Горад Дзьёр;Дьер;Дьйор;Дьор;Дьёр;Дьӧр;גיור;دیؤر;گیور;เจอร์;დიორი;ジェール;杰尔;죄르; +city::3053281;Erd;Andzabeg;Ehrd;Erd;Hamzsabeg;Hamzsabég;ai er de;ayrd;eleudeu;erdi;erudo;Érd;Ерд;Эрд;ארד;ایرد;ერდი;エールド;埃爾德;에르드; +city::3053438;Dunaujvaros;Duna Pentele;Dunapentele;Dunauivarosas;Dunauivarošas;Dunaujvaros;Dunaujvarosh;Dunaujvaroš;Dunaújváros;Pentela;Stalinvaros;Sztalinvaros;Sztálinváros;do~unauivu~aroshu;dunauivaroshi;duneou-ibalosi;duo nao xin cheng;dwnawywarws;dwnayywrwsh;Дунауйварош;Дунаујварош;دوناؤئواروس;دونائیوروش;დუნაუივაროში;ドゥナウーイヴァーロシュ;多瑙新城;두너우이바로시; +city::3054643;Budapest;BUD;Boedapes;Boedapest;Boudapes;Boudapeste;Boudapès;Budaipeist;Budapescht;Budapeshha;Budapesht;Budapesht osh;Budapest;Budapesta;Budapestas;Budapeste;Budapesti;Budapestinum;Budapesto;Budapeszt;Budapeŝto;Budapeşt;Budapeşte;Budapešt;Budapešta;Budapeštas;Budapešť;Budapèst;Budapésht;Budimpeshta;Budimpesta;Budimpešta;Bùdapest;Bùdapeszt;Búdaipeist;Búdapest;Gorad Budapesht;bu da pei si;budapaisata;budapeseuteu;budapesrr;budapest;budapesta;budapesuto;bwdabst;bwdabyst;bwdapst;bwdpst;putapest;Βουδαπέστη;Будапешт;Будапешт ош;Будапеща;Будимпешта;Горад Будапешт;Բուդապեշտ;בודאפעשט;בודפשט;بودابست;بودابيست;بوداپست;بوداپێست;بوډاپسټ;बुडापेस्ट;बुदापेस्त;বুদাপেস্ট;ਬੁਦਾਪੈਸਤ;બુડાપેસ્ટ;ବୁଦାପେଷ୍ଟ;புடாபெஸ்ட்;ಬುಡಾಪೆಸ್ಟ್;ബുഡാപെസ്റ്റ്;บูดาเปสต์;བུ་ད་ཕེ་སིད།;ဗူးဒပက်မြို့;ბუდაპეშტი;ቡዳፔስት;ブダペスト;布达佩斯;부다페스트; +city::1213500;Tebingtinggi;Tebingtinggi; +city::1213547;Tanjungbalai;Tandjoengbalai;Tandjungbalai;Tanjungbalai; +city::1213614;Sunggal;Sungal;Sunggal; +city::1213855;Sibolga;FLZ;Kota Sibolga;Sibolga;Сиболга; +city::1214073;Rantauprapat;Rantauprapat; +city::1214189;Percut;Percut;Pertjoet;Pertjut; +city::1214191;Perbaungan;Baoengan;Baoengar;Baungan;Perbaungan; +city::1214204;Pematangsiantar;Pematangsiantar;Pematangsieantar; +city::1214369;Padangsidempuan;Padangsidempuan;Padangsidimpoean;Padangsidimpuan; +city::1214520;Medan;Gorad Medan;Kota Medan;Kuta Medan;Kuta Mèdan;Kutha Medan;MES;Medan;Medana;Medanas;Medano;Mentan;mdan;me dan;medan;metan;mian lan;mydan;Μεντάν;Горад Медан;Медан;مدان;ميدان;میدان ، انڈونیشیا;மேடான்;เมดาน;メダン;棉蘭;메단; +city::1214658;Lhokseumawe;Kota Lhokseumawe;LSW;Lho'seumawe;Lhokseumawe;Lhoksumawe;Lho’seumawe;Lokseumave;Локсеумаве; +city::1214724;Langsa;Langsa;Langsar; +city::1214882;Kisaran;Kisaran;Kisaran Baru; +city::1214965;Kabanjahe;Kabandjahe;Kabanjahe; +city::1215355;Binjai;Bindjai;Bindjei;Binjai;Kota Binjai;min li;民禮; +city::1215412;Belawan;Belawan; +city::1215502;Banda Aceh;BTJ;Baiturahman;Banda Aceh;Banda Aceha;Banda Acehas;Banda Acheh;Banda Achekh;Banda Achem;Banda Achém;Banda Atjeh;Banda Ačeha;Banda Ačehas;Banda-Achekh;Banta Atsech;Koetaradja;Kota Banda Aceh;Kota Banda Acéh;Kuta Banda Aceh;Kuta Banda Acèh;Kuta Raja;Kutaradja;Kutha Banda Aceh;Kutha Banda Acèh;ban da ya qi;ban dar xa ceah;banda ash;banda atshyh;bandaache;Μπάντα Άτσεχ;Банда Ачех;Банда-Ачех;باندا آتشيه;باندا آسه;بندا آچے;บันดาร์อาเจะห์;バンダ・アチェ;班達亞齊;반다아체; +city::1621177;Yogyakarta;DI Yogyakarta;DIY;Daerah Istimewa Yogyakarta;Djogjakarta;Djokja;Djokjakarta;Dzhodzhakarta;Dzhok'jakarta;Dzhokjakarta;Dzogdzakarta;Dzogjakarta;Džogjakarta;Gionkiakarta;JOG;Jogjakarta;Jogjakarto;Jogyakarta;Jokjakarta;Jokyakarta;Kota Yogyakarta;Kuta Yogyakarta;Kutha Ngayogyakarta;Special Region of Yogyakarta;Yogyakarta;jogujakaruta shi;ri re;yog-yakaleuta;yogyakarta;ywgyakarta;ywjyakrta;yxk ya kar ta;Γιογκιακάρτα;Џогџакарта;Джоджакарта;Джокьякарта;Джокякарта;يوجياكرتا;یوگیاکارتا;योग्यकर्ता;योग्यकार्ता;ยอกยาการ์ตา;ჯოკიაკარტა;ジョグジャカルタ市;日惹;욕야카르타; +city::1621395;Wonosobo;Wanasaba;Wonosabo;Wonosobo; +city::1621613;Weru;Weru; +city::1621655;Weleri;Weleri; +city::1621678;Wedi;Wed;Wedi; +city::1621884;Watampone;Bone;Boni;Watampone; +city::1622636;Ungaran;Oengaran;Ungaran;Unggaran; +city::1622786;Makassar;Djumpandang;Kota Makassar;Macassar;Makasar;Makasaras;Makassar;Makasser;UPG;Udjung Pandang;Ujungpandang;makasaleu;makasar;makassaru;Макассар;ماکاسار;マカッサル;마카사르; +city::1623080;Tulungagung;Toeloengagoeng;Toeloengoeng;Tulungagung; +city::1623096;Tulangan Utara;Toelangan;Tulangan;Tulangan Utara; +city::1623180;Tuban;Toeban;Tuban;Тубан; +city::1624041;Ternate;Kota Ternate;Ternate;teleunate seom;terunate dao;Тернате;テルナテ島;테르나테 섬; +city::1624058;Terbanggi Besar;Terbanggi Besar;Terbanggi-besar; +city::1624494;Tegal;Kota Tegal;Kutha Tegal;Tegal;tgal;tygal wsty jawa;tyghal;zhi ge;Тегал;تيغال;تگال;تیگال، وسطی جاوا;ტეგალი;直葛; +city::1624647;Tasikmalaya;Kota Tasikmalaya;TSY;Tasikmalaja;Tasikmalaya;Tasikmalaya kutha; +city::1624668;Tarub;; +city::1624725;Tarakan;Kota Tarakan;Kutha Tarakan;TRK;Tarakan;ta la ka en;tarakan;tarakan shmaly kalymantan;Таракан;تاراكان;تاراکان;تاراکان، شمالی کالیمانتان;塔拉卡恩; +city::1624863;Tanjungpinang;Tandjoengpinang;Tandjungpinang;Tanjungpinang; +city::1624877;Tanjung Pandan;Pandan;TJQ;Tandjoengpandan;Tandjong-pandan;Tandjungpandan;Tanjong Pandan;Tanjung Pandan;Tanjungpandan; +city::1624917;Bandar Lampung;Bandar Lampung;Bandar-Lampung;Bandarlampung;Kota Bandar Lampung;TKG;Tanjungkarang;Tanjungkarang-Telukbetung;Telukbetung;ban da nan bang;bandaleulampung;bandaruranpun;bndr lampwng;Бандар-Лампунг;بندر لامپونگ;バンダールランプン;班達楠榜;반다르람풍; +city::1624987;Tanjungagung;Tandjoengagoeag;Tandjoengagoeng;Tandjungagung;Tanjungagung; +city::1625084;Tangerang;Gorad Tangerang;Kota Tangerang;Kutha Tangerang;Tangarang;Tangerang;Tangerangas;tan ge lang;tang-elang;tangeran;tangrang;Горад Тангеранг;Тангеранг;تانگرانگ;ტანგერანგი;タンゲラン;坦格朗;탕에랑; +city::1625812;Surakarta;Gorad Surakarta;Kota Surakarta;Kutha Surakarta;SOC;Soerakarta;Solo;Sourakarta;Surakarta;Surakarte;sulakaleuta;suo luo;suo luo shi;surakarta;surakaruta;swrakarta;Σουρακάρτα;Горад Суракарта;Суракарта;Суракарте;سوراكارتا;سوراکارتا;सुरकर्ता;სურაკარტა;スラカルタ;梭罗市;索罗;수라카르타; +city::1625822;Surabaya;Gorad Surabaja;Kota Surabaya;Kutha Surabaya;SUB;Soerabaja;Soerabaya;Sourabaya;Sourampagia;Surabaia;Surabaja;Surabajo;Surabaya;si shui;sulabaya;sura ba ya;surabaia;surabaya;swrabaya;swrbyh;Σουραμπάγια;Горад Сурабая;Сурабайа;Сурабая;Сурабаја;סורביה;سورابايا;سورابایا;สุราบายา;სურაბაია;スラバヤ;泗水;수라바야; +city::1625929;Sungai Penuh;Soengaipenoeh;Sungai Penuh;Sungeipenu; +city::1625958;Sungailiat;Soengailiat;Soengei Liat;Sungailiat; +city::1626099;Sumenep;SUP;Soemanep;Soemenap;Soemenep;Sumenep; +city::1626103;Sumedang;Soemadang;Soemedang;Sumedang; +city::1626183;Sumber;Soember;Sumber; +city::1626185;Sumbawa Besar;SWQ;Soembawa;Soembawa-besar;Sumbawa;Sumbawa Besar; +city::1626312;Sokaraja;Soekaradja;Sokaraja;Sukaradja;Sukaraja; +city::1626381;Sukabumi;Kota Sukabumi;Kutha Sukabumi;Soekaboemi;Sukabumi;su jia wu mei;swkabwmy;Сукабуми;Сукабумі;سوکابومی;სუკაბუმი;蘇加武眉; +city::1626498;Sragen;Spagen;Sragen;Sregen; +city::1626542;Sorong;Kota Sorong;SOQ;Sorong;Соронг; +city::1626560;Soreang;Sereang;Soreang; +city::1626754;Sleman;Sleman;Suleman; +city::1626758;Slawi;Selawi;Slawi;Slawj; +city::1626801;Situbondo;Sitoebanda;Sitoebondo;Situbando;Situbondo; +city::1626899;Singosari;Singasari;Singosari;Сингосари; +city::1626916;Singkawang;Sekawang;Singkawang; +city::1626921;Sengkang;Sengkang;Singkang; +city::1626932;Singaraja;Boeleleng;Boelèlèng;Singaradja;Singaradzha;Singaraja;shigaraja;Сингараджа;シガラジャ; +city::1627253;Sidoarjo;Sidaardja;Sidoardio;Sidoardja;Sidoardjo;Sidoarjo;Sidohardjo; +city::1627357;Sewon;; +city::1627459;Serpong;; +city::1627549;Serang;Kabupaten Serang;Serang; +city::1627610;Sepatan;Sepaitan;Sepatan; +city::1627896;Semarang;Gorad Semarang;Kota Semarang;Kutha Semarang;SRG;Samarang;Semaran'nk;Semarang;Semarangas;cemaran;san bao long;san ma leng;se ma rang;semarangi;seumalang;smarang;sumaran;symarang;symaranj;Σεμαράνγκ;Горад Семаранг;Семаранг;سمارانگ;سيمارانج;سیمارانگ;செமாராங்;เซมารัง;სემარანგი;スマラン;三孖冷;三宝垄;三寶瓏;스마랑; +city::1628453;Sawangan;; +city::1628884;Sampit;SMQ;Sampit;Tanah Hevea; +city::1628899;Sampang;Sampand;Sampang; +city::1629001;Samarinda;Batoeng Panggol;Gorad Samarynda;Kota Samarinda;Kuta Samarinda;Kutha Samarinda;SRI;Samarinda;camarinta;sa ma rin da;samalinda;samarinda;samarynda;sha ma lin da;Горад Самарында;Самаринда;ساماريندا;ساماریندا;سامارینڈا;சமாரிண்டா;ซามารินดา;サマリンダ;沙馬林達;사마린다; +city::1629131;Salatiga;; +city::1629710;Rengasdengklok;Rengasdengklok; +city::1630058;Rangkasbitung;Rangkas Betung;Rangkasbitoeng;Rangkasbitung;Rangkasibitoeng; +city::1630328;Purwokerto;Kota Purwokerto;PWL;Poerwakerta;Poerwokerto;Purwakerta;Purwokerto; +city::1630333;Purwodadi;Poerwadadi;Poerwodadi;Purwadadi;Purwodadi;Purwodadi Grobogan; +city::1630341;Purwakarta;Kota Purwakarta;Poerwakarta;Purwakarta; +city::1630366;Purbalingga;Poerbalingga;Poerbolinggo;Purbalingga;Purbolinggo;Purbolingo; +city::1630634;Probolinggo;Kota Probolinggo;Prabalingga;Probalingga;Probalinggo;Probolinggo; +city::1630789;Pontianak;Kota Pontianak;Kuta Pontianak;Kutha Pontianak;PNK;Pontianak;Pontianakas;Pontijanak;bwntyanak;kun dian;pn ti xa nak;pontianag;pontianakku;pwntyanak;pwnٹyank anڈwnyshya;Понтианак;פונטיאנק;بونتياناك;پونتیاناک;پونٹیاناک;پونٹیانک، انڈونیشیا;ปนตีอานัก;ポンティアナック;坤甸;폰티아낙; +city::1630798;Ponorogo;Panaraga;Ponogoro;Ponorogo; +city::1630935;Polewali;Polewali; +city::1630997;Plumbon;Pelumbon;Ploembon;Plumbon; +city::1631271;Petarukan;Petaroekan;Petarukan; +city::1631393;Prabumulih;Peraboemoelih;Perabumulih;Praboemoelih;Prabumuli;Prabumulih; +city::1631648;Pemalang;Pemalang; +city::1631761;Pekanbaru;Kota Pekanbaru;Kutha Pekanbaru;PKU;Pakanbahru;Pakanbaroe;Pakanbaru;Pekanbaroe;Pekanbaru;bei gan ba lu;pekanbalu;pkanbarw;pukanbaru;pykanbarw;Пеканбару;پکانبارو;پیکانبارو;プカンバル;北干巴魯;페칸바루; +city::1631766;Pekalongan;Kota Pekalongan;Pekalongan; +city::1631851;Pecangaan;Pecangaan;Pecangakan;Petjangaan;Petjangakan;Petjangkan; +city::1631905;Payakumbuh;Kota Payakumbuh;Paja Kombo;PajaKumbuh;Pajakoemboeh;Payakumbuh;Rayakumbuh; +city::1631992;Pati;Pati;Пати; +city::1632033;Pasuruan;Kota Pasuruan;Pasoeroean;Pasuruan; +city::1632197;Paseh;Paseh; +city::1632228;Pasarkemis;Pasarkemis; +city::1632276;Parung;Paroeng;Parung; +city::1632334;Pariaman;Kota Pariaman;Pariaman; +city::1632353;Parepare;Parepare; +city::1632358;Pare;Pare; +city::1632654;Pangkalpinang;Merawang;PGK;Pangkalpinang;Pankal Pinang; +city::1632823;Pandeglang;Pandegelang;Pandeglang; +city::1632861;Pandak;; +city::1632937;Pamulang;; +city::1632978;Pamekasan;Pamekasan;Ramekasan; +city::1632998;Pamanukan;Pamanoekan;Pamanukan; +city::1633034;Palu;Kabupaten Poso;Kota Palu;PLW;Pal;Paloe;Palu;Пал; +city::1633037;Palopo;LLO;Palopo;Paloppo;Wara; +city::1633056;Palimanan;Palimanan; +city::1633070;Palembang;Gorad Palembang;Kota Palembang;Kutha Palembang;PLM;Palembang;Palembangas;Palempan'nk;Palimbao;Palimbão;Palèmbang;balymbanj;ju gang;pa lem bang;palembanga;pallembang;palmbang;palymbang;parenban;Παλεμπάνγκ;Горад Палембанг;Палембанг;باليمبانج;پالمبانگ;پالم‌بانگ;پالیمبانگ;पालेंबांग;ปาเล็มบัง;パレンバン;巨港;팔렘방; +city::1633118;Palangkaraya;Kota Palangka Raya;PKY;Pahandoet;Pahandut;Palangka Raya;Palangkaraja;Palangkaraya;Plangkaraja;pa lang ka la ya;帕朗卡拉亚; +city::1633308;Pagar Alam;PXA;Pagar Alam;Pageralam; +city::1633419;Padang;Gorad Padang;Kota Padang;Kuta Padang;Kutha Padang;PDG;Padang;Padangas;Padango;ba dong;badangh;pa dang;padan;padang;padanga;padng andwnzy;Горад Паданг;Паданг;بادانغ;پادانگ;پادنگ، اندونزی;پاڈانگ;पादांग;ปาดัง;パダン;巴東;파당; +city::1634131;Nganjuk;Ngandjoek;Ngandjuk;Nganjuk; +city::1634718;Muncar;Moentjar;Muncar;Muntjar; +city::1635111;Mojokerto;Kota Mojokerto;Madjakerta;Modjokerto;Mojokerto; +city::1635283;Metro;Kota Metro;Metra;Metro;Метро; +city::1635342;Mertoyudan;Mertajoedan;Mertojoedan;Mertojudan;Mertoyudan; +city::1635660;Melati;Melati;Mlati; +city::1635882;Mataram;AMI;Kota Mataram;Kutha Mataram;Mataram;Mataram-Lombok;Mataramas;ma ta lan;matalam;mataram;mataramu;Матарам;ماتارام;ماٹارام;მატარამი;マタラム;馬塔蘭;마타람; +city::1636022;Martapura;Martapoera;Martapura; +city::1636125;Margahayukencana;Margahajoe;Margahaju;Margahayu;Margahayukencana; +city::1636308;Manokwari;Kabupaten Manokwari;Kutha Manokwari;MKW;Manokvari;Manokvaris;Manokwari;Menoekwari;man nuo wa li;manokuwari;manokwali;manwkwary;Маноквари;مانوكواري;مانوکواری;მანოკვარი;マノクワリ;曼諾瓦里;마노콰리; +city::1636507;Mendaha;Mandahara;Mendaha;Mendahara; +city::1636544;Manado;Kota Manado;Kutha Manado;MDC;Manadas;Manado;Menado;ma na do;manado;manadw;wan ya lao;Манадо;مانادو;مناڈو;मानदो;มานาโด;マナド;万鸦老;萬鴉老;마나도; +city::1636722;Malang;Kabupaten Malang;Kota Malang;Kutha Malang;MLG;Maland;Malang;ma lang;malangh;malangi;mallang;malng;maran;Маланг;مالانغ;مالنگ;მალანგი;マラン;瑪琅;말랑; +city::1636816;Majalengka;Madjalengka;Majalengka; +city::1636884;Magelang;Kota Magelang;Kutha Magelang;Magelang;ma ge lang;magelangi;maglang;Магеланг;ماگلانگ;მაგელანგი;馬格朗; +city::1636930;Madiun;Kota Madiun;Madioen;Madiun; +city::1637090;Lumajang;Kabupaten Lumajang;Loemadjang;Lumadjang;Lumajang; +city::1637158;Lubuklinggau;Kota Lubuklinggau;Loeboeklinggau;Lubuklinggao;Lubuklinggau; +city::1637510;Loa Janan;Loa Djanan;Loa Janan; +city::1638063;Lembang;Lembang;Lembang 1;Lembange;Лембанге; +city::1638284;Lawang;Lawang; +city::1638562;Lamongan;; +city::1638775;Lahat;Lahat;PXA; +city::1638868;Labuan Bajo;Badjo;LBJ;Laboean Bajo;Laboehanbadjo;Labuan Bajo;Labuanbadzho;Labuanbajo;Labuhanbadjo;Labuhanbajo;Лабуанбаджо; +city::1639094;Kuningan;Koeningan;Kuningan; +city::1639215;Kudus;Koedoes;Kudus; +city::1639362;Kresek;Keresek;Kresek; +city::1639900;Klaten;Kabupaten Klaten;Klaten;Klathen; +city::1639925;Klangenan;Klangenan; +city::1640185;Kertosono;Pelem;Pĕlĕm; +city::1640296;Kepanjen;Kepandjen;Kepanjen; +city::1640344;Kendari;KDI;Kendari;Kendaris;Kota Kendari;Kutha Kendhari;ken da li;ken da ri;kendari;keundali;kndary;kndry andwnzy;Кендари;کنداری;کندری، اندونزی;เก็นดารี;ケンダリ;肯達里;큰다리; +city::1640581;Kedungwuni;Kedoengwoeni;Kedungwuni; +city::1640585;Kedungwaru;; +city::1640660;Kediri;Kediri;Kota Kediri;Kutha Kedhiri;jian yi li;kdyry;kydyry mshrqy jawa;Кедири;كديري;کیدیری، مشرقی جاوا;კედირი;諫義里; +city::1640765;Kebomas;; +city::1640902;Kawalu;Kawaloe;Kawalu; +city::1641184;Karangsembung;Karangsemboeng;Karangsembung; +city::1641333;Karanganom;Karanganom; +city::1642414;Jombang;Djombang;Jombang;Kabupaten Jombang; +city::1642588;Jember;Djember;JBB;Jember; +city::1642684;Jatiwangi;Djatiwangi;Jatiwangi; +city::1642692;Jatiroto;Djatiroto;Jatiroto; +city::1642726;Jatibarang;Djatibarang;Jatibarang; +city::1642858;Jambi City;DJB;Djambi;Dzhambi;Jambi;Jambi City;Sriindrapura;Telanaipura;jamby;Джамби;جامبي; +city::1642911;Jakarta;Batavia;Cakarta;D'akarta;Daerah Khusus Ibukota Jakarta;Djakarta;Djogkarta;Dki Jakarta;Dzakarta;Dzhakarta;Dzhakartae;Dżakarta;Džakarta;Gakarto;Giacarta;Gorad Dzhakarta;Iacarta;Iacárta;JKT;Jacarta;Jakarta;Jogkarta;Nga-ka-that Su-tu Thit-khi;Ngâ-kâ-tha̍t Sú-tû Thi̍t-khî;Tzakarta;Xacarta;Xhakarta;Yajgyadaz;Yakarta;Zhakarta;cakarta;g'qrth;jakaleuta;jakarata;jakarta;jakartta;jakaruta;jkarta;ya jia da;Ĝakarto;Τζακάρτα;Џакарта;Горад Джакарта;Джакартæ;Джакарта;Дьакарта;Жакарта;Ջակարտա;ג'קרטה;דזשאקארטא;جاكارتا;جاکارتا;جکارتا;جکارتہ;जकार्ता;জাকার্তা;ਜਕਾਰਤਾ;જાકાર્તા;ଜାକର୍ତା;ஜகார்த்தா;జకార్తా;ಜಕಾರ್ತ;ജക്കാർത്ത;จาการ์ตา;ཊ་ཁར་ཏ།;ဂျကာတာမြို့;ჯაკარტა;ጃካርታ;ចាការតា;ジャカルタ;雅加达;자카르타; +city::1643078;Indramayu;Indramajoe;Indramaju;Indramayu; +city::1643761;Grogol;; +city::1643776;Gresik;Geresik;Gersik;Gresik;Grise;Grisee;Grissee; +city::1643837;Gorontalo;Gorontalo;Горонтало; +city::1643981;Godean;Godean;Godejan; +city::1644178;Genteng;Genteng-kulon; +city::1644349;Gedangan;; +city::1644605;Galesong;Galesong; +city::1644932;Ende;ENE;Ende;Endeh;Kota Ende; +city::1645133;Dumai;DUM;Doemai;Dumai;Dumaj;Kota Dumai;Думай; +city::1645154;Dukuhturi;; +city::1645518;Depok;; +city::1645524;Depok;Depok;Depok kutha;Depokas;Kota Depok;Kota Dépok; +city::1645528;Denpasar;DPS;Dempasar;Dempassar;Denpasar;Denpasar Bali;Denpasaras;Gorad Dehnpasar;Kota Denpasar;Kutha Denpasar;Ntenpasar;dan pa sha;denapasara;denpasaleu;denpasaru;dnpasar;Ντενπασάρ;Горад Дэнпасар;Денпасар;דנפסאר;دنپاسار;ڈنپاسار;ڈنپسار;देनपसार;દેનપસાર;ဒန်ပါဆာမြို့;დენპასარი;デンパサール;丹帕沙;덴파사르; +city::1645895;Curug;Curug;Tjoeroeg;Tjurug; +city::1645976;Comal;Chiomal;Chomal;Comal;Tjomal; +city::1646034;Citeureup;Citeurep;Citeureup;Tjiteureup; +city::1646170;Cirebon;CBN;Cheribon;Chirebon;Cirebon;Cirebon kutha;Kota Cirebon;Kutha Cirebon;Tjerebon;Tjeribon;Tjirebon;chileubon;chireboni;chirubon;jing li wen;syrybwn;Чиребон;سيريبون;سیریبون;ჩირებონი;チルボン;井裡汶;치르본; +city::1646194;Ciputat;Ciputat;Tjipoetat;Tjipoetat 2;Tjiputat;Tjiputat 2; +city::1646448;Cimahi;Chimahi;Cimahi;Cimahi kutha;Kota Cimahi;Tjimahi;Tjimaki; +city::1646492;Cileunyi;Cileunyi;Tjileunji;Tjileunji 2; +city::1646494;Cileungsir;Cileungsi;Cileungsir;Tjileungsir; +city::1646678;Cikarang;Chikarang;Cikarang;Tjikarang; +city::1646698;Cikampek;Chikampek;Cikampek;Tjikampek; +city::1646893;Cicurug;Cicurug;Tjitjoeroeg;Tjitjurug; +city::1647003;Cibinong;Chibinong;Chibinung;Cibinong;Sibinonge;Tjibinong;Сибинонге; +city::1647149;Ciamis;Chiamis;Ciamis;Tjiamis; +city::1647179;Cepu;CPF;Cepu;Chepu;Panolan;Tjepoe;Tjepu; +city::1647298;Caringin;Caringin;Caringin 2;Tjaringin; +city::1647383;Ciampea;Campea;Ciampea;Tjampea;Tjampea 1; +city::1647866;Bukittinggi;Bukittinggi;Bukittingi;Fort de Kock;Fort de Rock;Kota Bukittinggi;Kutha Bukittinggi;bukitingi;wu ji ding yi;Букиттинги;ブキティンギ;武吉丁宜; +city::1648084;Boyolali;Bajalali;Bajalili;Bojolali;Boyolali; +city::1648186;Bontang;BXT;Bontang;Kota Bontang; +city::1648266;Bondowoso;Bandawasa;Bandowoso;Bondawasa;Bondowoso; +city::1648451;Bojonegoro;Bodjanegara;Bodjonegoro;Bojonegoro; +city::1648473;Bogor;Bogor;Buitenzorg;Kota Bogor;Kutha Bogor;bogoleu;bogori;bogoru;bwgwr;bwkwr;mao wu;Богор;بوكور;بوگور;ბოგორი;ボゴール;茂物;보고르; +city::1648568;Blora;Blora; +city::1648580;Blitar;Belitar;Blitar;Kota Blitar; +city::1648636;Bitung;Bitoeng;Bitung;Kota Bitung; +city::1648759;Bima;BMU;Bim;Bima;Бим; +city::1648918;Besuki;Besoeki; +city::1649150;Bengkulu;BKS;Bangkahulu;Bengkoeloe;Bengkulu;Benkoelen;Benkulen;Benkulu;Kota Bengkulu;Kutha Bengkulu;beungkullu;bngkwlw;bngkwlw andwnzy;bnjkwlw;ming gu lu shi;Бенгкулу;Бенкулу;بنجكولو;بنگکولو;بنگکولو، اندونزی;明古魯市;븡쿨루; +city::1649378;Bekasi;Bekasi;Bekasis;Gorad Bekasi;Kota Bekasi;Kutha Bekasi;beukasi;bkasy;bukashi;bykasy;wu jia si;Бекаси;Горад Бекасі;בקאסי;بيكاسي;بکاسی;ბეკასი;ᎠᎴᏂ;ブカシ;勿加泗;브카시; +city::1649593;Baturaja;Batoeradja;Batoerradja;Batu Radia;Baturadja;Baturaja; +city::1649824;Batu;Batoe;Batu;Batyj;Kota Batu;Sisir;Батый; +city::1649881;Batang;Batang; +city::1650064;Barabai;; +city::1650077;Banyuwangi;Banjoewangi;Banjuwangi;Banyuwangi; +city::1650119;Bantul;Bantoel;Bantul; +city::1650213;Banjarmasin;BDJ;Bandgermasin;Bandjarmasin;Bandjermasin;Bandjermassin;Banjarmasin;Banjermasin;Banyermasin; +city::1650227;Banjaran;Bandjaran;Banjaran; +city::1650232;Banjar;Bandjar;Banjar; +city::1650298;Bangkalan;Bangkalan;Pangkalan; +city::1650319;Bangil;; +city::1650357;Bandung;BDO;Bandoeng;Banduna;Bandung;Bandungas;Bandungo;Bantoun'nk;Gorad Bandung;Kota Bandung;Kuta Bandung;Kutha Bandhung;ban dung;bandon;bandung;bandungi;bandwng;bandwnj;bndwng;pantun;wan long;Μπαντούνγκ;Бандунг;Бандуң;Горад Бандунг;Բանդունգ;באנדונג;باندونج;باندونگ;بندونگ;بنڈونگ;பண்டுங்;บันดุง;ဘန်ဒေါင်းမြို့;ბანდუნგი;バンドン;万隆;萬隆;반둥; +city::1650527;Balikpapan;BPN;Balikpapan;Balikpapanas;Kota Balikpapan;Kutha Balikpapan;ba li ba ban;ba lik pa pan;balligpapan;balyk‌papan;barikupapan;Баликпапан;بالیک‌پاپان;บาลิก์ปาปัน;ဘာလစ်ပါပန်မြို့;ბალიკპაპანი;バリクパパン;巴厘巴板;발릭파판; +city::1650600;Balaipungut;Balaipoengoet;Balaipungut; +city::1650670;Baki;; +city::1650815;Baekrajan;Bae;Baekrajan;Beh;Tjendono;Бэ; +city::1651112;Astanajapura;Astanadjapura;Astanajapura; +city::1651226;Arjawinangun;Ardjawinangoen;Ardjawinangoen-Koelan;Ardjawinangun;Arjawinangun; +city::1651461;Amuntai;Amoentai; +city::1651531;Ambon;AMQ;Amboina;Ambon;Ambon City;Ambonas;Amboyna;Ambun;Gorad Ambon;Kota Ambon;Kutha Ambon;ambn;ambon;ambwn;ambwn malwkw;an wen;anbon;Амбон;Горад Амбон;آمبن;آمبون;أمبون;امبون، مالوکو;アンボン;安汶;암본; +city::1651555;Ambarawa;Ambarava;Ambarawa; +city::1651887;Adiwerna;Adiwerna;Adiwerno; +city::1963770;Padalarang;; +city::1964032;Ciranjang-hilir;Ciranjang-hilir;Tjirandjang-hilir; +city::1985663;Cikupa;; +city::1990589;Teluknaga;Teluknaga; +city::2005057;Gamping Lor;; +city::2005237;Kasihan;; +city::2010985;Kartasura;; +city::2057087;Kupang;Gorad Kupang;KOE;Koepang;Kota Kupang;Kupang;Kupangas;Kupange;Kupango;Kupanq;Kutha Kupang;gu bang;kupan;kupang;kwpang;Горад Купанг;Купанг;Купанге;کوپانگ;クパン;古邦;쿠팡; +city::2082600;Jayapura;DJJ;Djajapoera;Djajapura;Dzajapura;Dzhajapura;Džajapura;Hollandia;Jaya Pura;Jayapura;Kota Jayapura;Kotabaru;Noordwijk;Port Numbay;Port-Numbaj;Sukarnapura;Sukarnopura;ca ya pu ra;cha ya pu la;japapwra;jayapula;jayapura;Џајапура;Джаяпура;Порт-Нумбай;جاپاپورا;จายาปุระ;ジャヤプラ;查雅普拉;자야푸라; +city::2082727;Abepura;Abepura; +city::8224624;City of Balikpapan;; +city::8581443;South Tangerang;Tangerang Selatan; +city::2961284;Tallaght;Talagtas;Talat;Talla;Tallaght;Tallakht;Tamhlacht;ta la;talla;tla;Талат;Талла;Таллахт;تلا;塔拉;탈라; +city::2962943;Luimneach;Limereick;Limerick;Limerick city;Limerik;Limerika;Limerikas;Luimneach;lymryq;rimurikku;Лимерик;לימריק;リムリック; +city::2964180;Gaillimh;GWY;Gaillimh;Galway;Galway - Gaillimh;Galway city;Goluehj;Goluej;Golveja;Golvejus;Golvėjus;ge er wei;goruu~ei;Голуей;Голуэй;ゴールウェイ;戈尔韦; +city::2964506;Dun Laoghaire;Dan Lere;Dan Leri;Dan Lerė;Dan Liri;Dun Laoghaire;Dun Laoire;Dun-Lehare;Dunleary;Dunum Loigarii;Dún Laoghaire;Dún Laoire;Kingstown;danlyry;deng lai li;deonleleo;dn lyry;dunlere;Дан Лері;Дан Лири;Дун-Лэаре;דן לירי;دانلیری;ڈون لاری;ดูนเลเร;ダン・レアリー;邓莱里;던레러; +city::2964574;Dublin;Baile Atha Cliath;Baile Átha Cliath;Ciuda de Dublin;Ciudá de Dublín;DUB;Dablin;Diblin;Difelin;Divlyn;Doublino;Dublin;Dublin city;Dublina;Dublinas;Dublini;Dublino;Dublinu;Dublín;Dublîn;Dueblin;Dulenn;Dulyn;Dyflinn;Düblin;Eblana;Gorad Dublin;dabalina;dablin;dablina;daburin;dbln;dblyn;deobeullin;dou bai lin;dublini;dwblyn;taplin;Δουβλίνο;Горад Дублін;Даблин;Дублин;Дублін;Дъблин;Դուբլին;דבלין;דובלין;دبلن;دوبلين;دوبلین;دۇبلىن;ڈبلن;ډبلن;ܕܒܠܢ;डब्लिन;दब्लिन;ডাবলিন;ਡਬਲਿਨ;டப்லின்;ಡಬ್ಲಿನ್;ഡബ്ലിൻ;ดับลิน;དུབ་ལིན།;ဒပ်ဗလင်မြို့;დუბლინი;ደብሊን;ダブリン;都柏林;더블린; +city::2965140;Cork;Corc;Corcagia;Corcaigh;Cork;Cork - Corcaigh;Cork city;Corkee;Gorad Kork;Kork;Korka;Korkas;Korkig;ORK;ke ke;khxrk;kokeu;koku;korka;kwrk;qwrq;Κορκ;Горад Корк;Корк;Կորկ;קורק;كورك;کورک;कॉर्क;คอร์ก;კორკი;コーク;科克;코크; +city::281184;Jerusalem;Adonai-jireh;Aelia Capitolina;Al Quds;Al-Kuds;Al-Qudis;Al-Quds;Al-Qudıs;Ariel;Baitul Maqdis;Baitulmuqaddis;Bajtul Makudis;Bayt al-Maqdis;Bayt al-Muqaddas;Cherusalem;Colonia Aelia Capitolina;Djeruzalem;El Kuds;El Quds esh Sherif;Erusagem;Erusalim;Geruesalem;Gerusalem;Gerusalemme;Gerüsalem;Gierusalemme;Girusalemmi;Gorad Ierusalim;Herusale;Herusalem;Herusalẽ;Hierosolyma;Hierousalem;Hierousalēm;Hierusalem;Hiruharama;IJerusalem;Ia-lo-sak-leng;Ia-lo-sat-leng;Iarusaileim;Iarúsailéim;Iebous;Iebus;Ierosolyma;Ierousalem;Ierousalimu;Ierusalem;Ierusalema;Ierusalim;Ir David;Ir Ha-Qdoosha;Ir Ha-Qodesh;Iyerusalim;Ià-lô-sák-lēng;Iâ-lō͘-sat-léng;Iýerusalim;JRS;Jarusalen;Jeriwsalem;Jerozale;Jerozalė;Jerozolema;Jerozolima;Jerozolëma;Jerusalem;Jerusalemi;Jerusalemo;Jerusalemu;Jerusalen;Jerusalim;Jerusalèm;Jerusalém;Jerusalén;Jeruusalemm;Jeruzale;Jeruzalem;Jeruzaleme;Jeruzalim;Jeruzalém;Jeruzalė;Jeruzsalem;Jeruzsálem;Jerúsalem;Jerúsálẹ́mù;Jorsala;Jorsalaborg;Jorsalir;Jérusalem;Jórsalaborg;Jórsalir;Kouds;Kudues;Kudus;Kudüs;Kuuds-GӀala;Moria;Morias;Orcalim;Orselim;Orşelîm;Quddus;Qudus;Queds;Qüds;Salem;Shalem;Sion;Solyma;Ursalimmu;Urselim;Urshalim;Urusalim;Urušalim;Urşelim;Uršalimmu;Xerusalen;Xerusalén;Ya-lu-sat-lang;Yerusalem;Yerusalemi;Yerusalemu;Yerusalémi;Yerushalayim;Yirushalayim;Yirushalāyim;Yâ-lu-sat-lâng;Yérusalem;Zion;al-Balat;al-Quds as-Sarif;al-Quds aš-Šarīf;albla;alqds;alqds alshryf;aryyyl;awrshlym;byt almqds;erucalem;erusaremu;haqodes;ierusalimi;jerusalama;jerusalem;jerusalema;jeruselama;lqds;mrya;mworiyah;mwryh;qudus;qۇds;salem;salym;shywn;slm;wrshlym;yarusalama;ybws;ye lu sa leng;ye ru sa lem;yebws;yelusallem;yerwsalami;yerwsalayim;yerwselem;yrwshlm;yrwslm;yrwslym;ywrshەlym;ziywon;zywn;Αριηλ;Ιεβους;Ιεροσολυμα;Ιεροσόλυμα;Ιερουσαλήμ;Ιερουσαλημ;Μωριας;Σαλημ;Σιων;Σολυμα;Єрусалим;Їєроусалимъ;Јерусалим;Байтул Макъдис;Горад Іерусалім;Ерусалим;Иерусалим;Йерусалим;Кудус;Къудс-ГӀала;Уршалим;Երուսաղեմ;אֵילִיָּה קַפִּיטוֹלִינָה;הַקֹּדֶשׁ;יְבוּס;יְרוּשְׁלֶם;יְרוּשָׁלַיִם;יְרוּשָׁלַםִ;יְרוּשָׁלָםִ;יבוס;ירושלים;ירושלם;מוֹרִיָּה;מוריה;צִיּוֹן;ציון;שָׁלֵם;שלם;إيلياء;ئورشەلیم;اريئيل;البلا;القدس;القدس الشريف;اورشلیم;بيت المقدس;بیت المقدس;ساليم;صهيون;قۇدس;لقدس;مريّا;ورشليم;يبوس;یروشلم;ܐܘܪܫܠܡ;ܨܗܝܘܢ;ޤުދުސް;जेरुसलेम;जेरुसेलम;जेरूसलम;यरुशलम;জেরুসালেম;ਜੇਰੂਸਲਮ;ଜେରୁସାଲେମ;எருசலேம்;జెరూసలేం;ಜೆರುಸಲೆಂ;ജെറുസലേം;เยรูซาเลม;ເຢ​ຣູ​ຊາ​ເລັມ;ཇེ་རུ་ས་ལེམ།;ဂျေရုဆလင်မြို့;იერუსალიმი;እየሩሳሌም;エルサレム;耶路撒冷;예루살렘;𐌹𐌰𐌹𐍂𐌿𐍃𐌰𐌿𐌻𐍅𐌼𐌰; +city::282926;Modi'in Makkabbim Re'ut;Gane Modi'in;Gane Modi‘in;Makkabbim;Makkabbim Re`ut;Makkabbim Re‘ut;Makkabim;Modi'in;Modi'in Makkabbim Re'ut;Modiin;Modi‘in;Modi‘in Makkabbim Re‘ut;Nahal Modi'im;Naẖal Modi‘im;Ramot Modi'in;Ramot Modi‘in;Re`ut;Re‘ut;mwdyʻyn;מודיעין;מודיעין מכבים רעות;מכבים רעות;רעות; +city::293397;Tel Aviv;Lungsod ng Tel Aviv-Yafo;TLV;Tehl'-Aviu;Tel Avevs;Tel Aviv;Tel Aviv Yaffo;Tel Aviv Yafo;Tel Aviv-Jaffa;Tel Aviv-Jafo;Tel Aviv-Yafo;Tel Avivas;Tel Avív;Tel Avėvs;Tel Awiw;Tel Eviv;Tel'-Aviv;Tel-Aviv;Tel-Avivo;Tel-aviv;Tel-Əviv;Telaviva;Telavivum;Tell Abib;Tell Abīb;Tell Afif;te la wei fu;tel aviv;tel-abibeu;tel-avivi;tela abhibha;tela abhiva;tela aviva;teruabibu;thel xa wif;tl abyb;tl ʼbyb;tێl yەvyv;Τελ Αβίβ;Тел Авив;Тел-Авив;Тель-Авив;Тель-Авів;Тэль-Авіў;Թել Ավիվ;תל אביב;תל אביב-יפו;تل أبيب;تل ابيب;تل ابیب;تل‌آویو;تێل ئەڤیڤ;تېلاۋىف;ܬܠ ܐܒܝܒ;तेल अभिव;तेल अविव;तेल अवीव;তেল আভিভ;டெல் அவீவ்;ടെൽ അവീവ്;เทลอาวีฟ;თელ-ავივი;ቴል አቪቭ;テルアビブ;特拉維夫;特拉维夫;텔아비브; +city::293703;Rishon LeZiyyon;Ayun Kara;Le Tsiyon;Le Tsīyōn;Richon le Sion;Rischon LeZion;Rishon Le Zion;Rishon LeTsiyyon;Rishon LeZion;Rishon LeZiyyon;Rishon Letsiyon;Rishon LeẔiyyon;Rishon Lsiyon;Rishon le Siyon;Rishon le Ziyon;Rishon-le-Cion;Risjon Letsion;Rison-Le-Ciono;Riszon le-Cijjon;Riŝon-Le-Ciono;`Uyun Qara;rʼswn lzywn;Ришон-ле-Цион;ראשון לציון;‘Uyūn Qāra; +city::293725;Rehovot;Khirbet Deiran;Khirbet Deirān;Rechovot;Rechowot;Rehobot;Rehovot;Rehovoth;Rejovot;Reẖovot;Rhovot;Ruhaybah;rekhovot;rhwbwt;Реховот;רחובות; +city::293768;Ramla;Er Ramle;Ramla;Ramle;Ramlo;alrmlt;la mu la;lameulla;ramla;ramura;rmlh;Рамла;רמלה;الرملة;رمله;رملہ، اسرائیل;ラムラ;拉姆拉;라믈라; +city::293788;Ramat Gan;Gan;Gorad Ramat-Gan;Ramat Gan;Ramat Ganas;Ramat Nkan;Ramat-Gan;Ramat-Qan;la ma gan;lamateugan;ramat-gani;rmat ghan;rmt ghan;rmt gn;Ραμάτ Γκαν;Горад Рамат-Ган;Рамат Ган;Рамат-Ган;רמת גן;رمات غان;رمت غان;رمت گن;რამათ-განი;ラマト・ガン;拉馬干;라마트간; +city::293807;Ra'anana;Ra'anana;Ra'ananah;Ra'ananna;Raanana;Ra‘anana;Ra‘ananah;Ra‘ananna;rʻnnh;רעננה; +city::293918;Petah Tiqwa;Mulebbis;Petach Tikva;Petah Tikva;Petah Tikwah;Petah Tiqwa;Petaẖ Tikva;Petaẖ Tiqwa;Pethah Tiqva;Pethah Tiqvā;Tigrah;pth tqwh;pth tqwwh;pth tyqwh;pth tyqwwh;פתח תיקוה;פתח תיקווה;פתח תקוה;פתח תקווה; +city::294071;Netanya;Gorad Netanija;Lungsod ng Ntanya;Natania;Natanya;Nathanya;Netan'ja;Netania;Netanija;Netanja;Netanya;Netánja;Ntanya;na ta neiy;nattaniya;nei tan ya;netaniya;netanya;ntanya;ntnyh;Νετάνια;Горад Нетанія;Нетания;Нетанья;Нетаня;Нетанја;נתניה;نتانيا;نتانیا;நத்தானியா;นาตาเนีย;ネタニヤ;内坦亚;네타냐; +city::294098;Nazareth;En Nasira;En Nāsira;Lungsod ng Nazaret;Naatsaret;Nasaret;Nasira;Nasıra;Natserat;Natseret;Natsrat;Natséret;Natzaret;Nazara;Nazare;Nazaret;Nazaretas;Nazareth;Nazareto;Nazaré;Nazerat;Nazzerat;Naẕerat;Naẕẕerat;Nātsrat;alnasrt;na sa lei;nacarettu;nasales;nasrt;nazare;nsrt;nzrt;Ναζαρέτ;Назарет;נצרת;الناصرة;ناصرة;ܢܨܪܬ;நாசரேத்து;ナザレ;拿撒勒;나사렛; +city::294117;Nahariya;Nagarija;Naharia;Nahariia;Naharija;Naharijja;Nahariya;Nahariyah;Nahariyya;Nakharija;na ha li ya;naharia;nahariya;nharya;nhryh;Нагария;Нагарія;Нахария;Нахарија;נהריה;نهاريا;نهاریا;نہاریا;ნაჰარია;‏nhryh;‏נהריה;ナハリヤ;納哈里亞; +city::294421;Lod;Lida;Lidd;Lod;Lodas;Lont;Lud;Ludd;Lydda;Lūd;alld;lad;ld;lodeu;lodi;lu de;ludd;lwd;rodo;Λοντ;Лод;לד;לוד;اللد;لاد;لد;ലുദ്ദ്;ლოდი;ロード;卢德;로드; +city::294514;Kfar Saba;Kafr Saba;Kefar Saba;Kefar Sava;Kefar Sawa;Kefar-Sava;Kefár Saba;Kfar Saba;Kfar Sava;Kfar-Sava;ka fa sa ba;kfar saba;kfr sba;Кефар-Сава;Кфар Сава;Кфар-Сава;כפר סבא;كفار سابا;کفار سابا;کفر سبا;卡法薩巴; +city::294751;Holon;Cholon;Holon;H̱olon;Jolon;Jolón;Kholon;hwlwn;Холон;חולון;حولون; +city::294778;Herzliya;Gerclija;Herclijja;Herseliya;Hertseliyya;Hertsliyah;Hertsliyya;Hervlia;Hervlia B;Herzlia;Herzlia B;Herzliya;Herzliyah;Herzliyya;Herẕliyya;Lungsod ng Herzliyya;Lungsod ng Herẕliyya;hrzlyh;hrzlyyh;Герцлия;הרצליה;הרצלייה; +city::294801;Haifa;Aifa;Caiffa;Chaifa;Gorad Khajfa;HFA;Haifa;Hajfa;Hajfo;Hayfa;Haífa;Haïfa;Hefa;Heifa;Heifā;Hepha;Heyfa;H̱efa;Khajfa;Khajfae;Lungsod ng Hefa;Lungsod ng Ḥefa;ha'ipha;hai fa;haifa;haipa;haipha;hifa;hph;hyfa;hyph;kaihpa;khaipa;Ĥajfo;Χάιφα;Горад Хайфа;Хайфæ;Хайфа;Хајфа;Հայֆա;חיפה;חפה;حيفا;حیفا;حەیفا;ܚܝܦܐ;हाइफा;हैफ़ा;हैफा;கைஃபா;ಹೈಫ;ഹൈഫ;ไฮฟา;ხაიფა;Ḥeyfa;ハイファ;海法;하이파; +city::294946;Hadera;Chadera;El Khudeira;Hadera;Haderah;Hadeyra;Hedora;Hudeira;H̱adera;Khadera;Khederah;hdrh;Хадера;חדרה; +city::295432;Bet Shemesh;Beit Semes;Beit Şemeș;Beit-Shemesh;Bejt-Shemesh;Bet Schemesch;Bet Shemesh;Betxemeix;Betxèmeix;Maabarat Hartuv;byt sms;Бейт-Шемеш;בית שמש; +city::295514;Bnei Brak;Benai Beraq;Bene Berak;Bene Beraq;Benei Beraq;Beney Beraq;Bené Berak;Bené Beraq;Bne Beraq;Bnei Brak;Bné Beraq;bny brq;בני ברק; +city::295530;Beersheba;B'er Sheva';B'eyr-Sheva';BEV;Be'er Scheva;Be'er Sheva;Be'er Sheva`;Beehr-Sheva;Beer Scheva;Beer Seba;Beer Seva;Beer Sheba;Beer Sheva;Beer Sjeva;Beer Szewa;Beer Ŝeba;Beer Ševa;Beer Șeva;Beer-Seva;Beer-Sheva;Beer-Xeva;Beer-Şeva;Beerseba;Beerseva;Beersheba;Beerxeba;Beerşeba;Beerševa;Ber Seva;Bersabee;Bersabée;Berseba;Bersebá;Bersheva;Bersyeba;Berséba;Beér-Seva;Beër Sjeva;Beėršėva;Be’er Scheva;Bir el Saba;Bir es Sab`;Bir es Sabe;Birsheba;B’er Sheva‘;beer-sheva;beerusheba;bei er xie ba;beiyr chi ba;beleusyeba;bʼr sbʻ;pircepa;Μπερ Σεβά;Беер Шева;Беер-Шева;Бершева;Беэр-Шева;Биршеба;Բեեր Շևա;באר שבע;بئر السبع;بئرشبع;பீர்சேபா;เบียร์ชีบา;ბეერ-შევა;ቤርሳቤ;ベエルシェバ;贝尔谢巴;베르셰바; +city::295548;Bat Yam;Bat Jam;Bat Jamas;Bat Yam;Bat-Jam;ba te ya mu;bat yam;bat-iami;bateuyam;bt yam;bt ym;Бат Јам;Бат Ям;Бат-Ям;בת ים;بات يام;بات یام;بت یام;ბათ-იამი;バト・ヤム;巴特亚姆;바트얌; +city::295620;Ashqelon;Al Majdal;Ashkelon;Ashqelon;Ashquelon;El Majdal;El Medjdel;Majdal;Majdal `Asqalan;Majdal ‘Asqalān;Migdal Ascalon;Migdal Ashqelon;Migdal Gad;ʼsqlwn;Ашкелон;אשקלון; +city::295629;Ashdod;Aschdod;Asdod;Asdodas;Asdode;Asdód;Ashdod;Ashdod Yam;Ashdod on the Sea;Asjdod;Asntont;Asot;Aszdod;Axdod;Azotus;Aŝdod;Aşdod;Ašdod;Ašdodas;Așdod;Ukreir;a shen du de;asdead;ashdodi;ashdwd;ashudoddo;astotu;asyudodeu;ʼsdwd;Ασντόντ;Ашдод;Աշդոդ;אשדוד;أشدود;اشدود;அஸ்தோது;അഷ്ദോദ്;აშდოდი;アシュドッド;阿什杜德;아슈도드; +city::8199378;Modiin Ilit;מודיעין עילית; +city::1252758;Yelahanka;Yelahanka;yalahanka;ye la han ka;yelahanka;یلہانکا;यलहंक;য়েলাহান্কা;ಯಲಹಂಕ;耶拉汉卡; +city::1252770;Yavatmal;Yavatmal;Yavatmāl;Yeotmal;Yeotmāl; +city::1252797;Yamunanagar;Abdullahpur;Abdullapur;Abdullāhpur;Jamna Nagar;Yamuna Nagar;Yamunanagar;Yamunānagar; +city::1252822;Yadgir;Yadgir;Yādgīr; +city::1252840;Wokha;Wokha; +city::1252908;Washim;Basim;Băsim;Washim;Wāshīm; +city::1252942;Wardha;Vardha;Vardhá;Vardkha;Varntcha;Wardha;oyaradha;raaradha;vardha;varta;waruda;wo er ta;Βαρντχά;Вардха;وردھا;वर्धा;ওয়ারধা;ৱারধা;વર્ધા;வர்தா;ワルダー;沃尔塔; +city::1252948;Warangal;Ekasila Nagaram;Orugallu;Varangal;Varangalas;WGC;Warangal;raarangala;varangal;varangal jilla;varangala;varangala-nagaram;varankal;wa lang jia er;walang-gal;warangala;warangaru;warangl;wrnjl;Варангал;وارانگل;ورنجل;वरंगल;वरङ्गल-नगरम्;वारंगल;वारंगळ;ৱারাঙ্গাল;વારંગલ;ୱାରଙ୍ଗଲ;வாரங்கல்;వరంగల్ జిల్లా;ವರಂಗಲ್;വാറങ്കൽ;ワランガル;瓦朗加尔;와랑갈; +city::1252956;Wanparti;Wanaparthy;Wanparti; +city::1252960;Wani;Vanja;Wani;Wun;Wūn;Ваня; +city::1253079;Vrindavan;Brindaban;Brindāban;Vrindaban;Vrindavan;Vrindāban;Vrindāvan;Вриндаван; +city::1253080;Vriddhachalam;; +city::1253084;Vizianagaram;Viguyanagram;Vizianagaram;Vizianagarm;Vizianagram;Vizianagram City;Vizijanagaram;bijayanagarama;bijianagalam;bijiyanagarama;fyzynjarm;vijayanagara;vijayanagaram;vijayanagarama;vijayanakaram;vu~ijayanagaramu;wei ji ya ne ge lei mu;wjayangrm;Визианагарам;Визијанагарам;فيزينجارم;وجایانگرم;विजयनगरम;विजयनगरम्;বিজিয়ানগরম;વિજયનગર;ବିଜୟନଗରମ;விஜயநகரம்;విజయనగరం;ヴィジャヤナガラム;维济亚讷格勒姆;비지아나가람; +city::1253095;Visnagar;Visnagar; +city::1253102;Visakhapatnam;Gorad Vishakkhapatnam;VTZ;Vaisakhapattanam;Vaisākhapattanam;Visak;Visakha;Visakhapatnam;Visakhapatnamas;Vishakhapatnam;Vishakkhapatnam;Vishākhapatnam;Visákhapatnam;Vizag;Vizag City;Vizagapatam;Vizagapatnam;bisakhapatana;bisakhapattama;bisyakapateunam;fysakhabatnam;vicakappattinam;visakhapatanama;visakhapatnam;visakhapattanam;visakhapattanama;vu~ishakapatonamu;wei sha ka pa te nan;wisakha pat tnam;wshakھapٹnm;wysakapatnam;Визагапатнам;Вишакхапатнaм;Вишакхапатнам;Вішакхапатнам;Горад Вішакхапатнам;فيساخاباتنام;وشاکھاپٹنم;ويساکاپټنام;ویساکاپاتنام;ویساکھاپتنام;विशाखपट्टणम्;विशाखापट्टणम;विशाखापत्तनम;বিশাখাপত্তম;વિશાખાપટનમ;ବିଶାଖାପାଟଣା;விசாகப்பட்டினம்;విశాఖపట్నం;ವಿಶಾಖಪಟ್ಟಣಂ;വിശാഖപട്ടണം;วิศาขาปัตตนัม;ვიშაქაპატნამი;ვიშაქჰაპატნამი;ヴィシャーカパトナム;维沙卡帕特南;비샤카파트남; +city::1253113;Virudunagar;Virudhupatti;Virudunagar;Virudupatti; +city::1253133;Virar;Virar;Virār; +city::1253150;Vinukonda;Vinukonda; +city::1253166;Villupuram;Villapurum;Villupuram; +city::1253184;Vijayawada;Bezawada;Bezwada;Bezwāda;VGA;Vidzajavada;Vidzhajavada;Vidzsajavada;Vidzsajavádá;Vidžajavada;Vijajauada;Vijajaŭada;Vijayavada;Vijayavādā;Vijayawada;Vijayawāda;Widzajawada;Widźajawada;bejavada;bijayabada;bijayarada;bijayawada;bijayawara;fyjayawada;vicayavata;vijaiavada;vijaivara;vijayavada;vijayavara;vu~ijayawada;wei jie ya wa da;wyjyawada;Виджаявада;Виџајавада;Віджаявада;ויגיאוואדה;فيجاياوادا;وجئے واڑہ;ويجیواډا;ویجایاواڈا;ویجیاوادا;विजयवाड़ा;विजयवाडा;বিজযবাডা;বিজয়াৱদা;ਵਿਜਯਵਾਡਾ;ਵਿਜੈਵਾੜਾ;વિજયવાડા;ବିଜୟୱାଡ଼ା;ଵିଜଯଵାଡା;விசயவாடா;బెజవాడ;విజయవాడ;ವಿಜಯವಾಡ;വിജയവാഡ;ვიჯაიავადა;ヴィジャヤワーダ;维杰亚瓦达;비자야와다; +city::1253200;Vidisha;Bhilsa;Bhīlsa;Vidisa;Vidisha;Vidiša;bidisa;vidisa;vu~idisha;wdysha;wei di si ha;Видиша;ودیشا;विदिशा;বিদিশা;વિદિશા;ヴィディシャー;维迪斯哈; +city::1253237;Veraval;Veraval;Verāval; +city::1253286;Vellore;Gorad Veluru;Vellor;Vellore;Velluru;Velur;Veluru;belloleu;bellore;bhellora;vellor;vellora;vellura;velluru;velur;velura;vu~eruru;wei luo er;wylwr;Веллор;Веллуру;Горад Велуру;ویلور;भेल्लोर;वेल्लूर;वेल्लूरु;वेल्लोर;বেল্লোরে;ਵੇਲੂਰ;વેલ્લોર;வேலூர்;ವೆಲ್ಲೋರ್;വെല്ലൂർ;ヴェールール;韦洛尔;벨로르; +city::1253315;Vejalpur;Vejalpur; +city::1253367;Vasco Da Gama;Vasco;Vasco Da Gama;Vasco da Gama;Vasko-da-Gama;Vāsco Da Gāma;Васко-да-Гама; +city::1253405;Varanasi;Banaras;Banares;Banāras;Benares;Benarés;Kashi;Kasi;Kāsi;VNS;Varanasi;Varanasio;Varanasis;Varanassi;Vârânasî;Vārānasi;Waranasi;balanasi;baranasi;kasi;pha ran si;varanaci;varanasi;wa la na xi;waranashi;Варанаси;काशी;वाराणसी;বারানসি;வாரணாசி;พาราณสี;ワーラーナシー;瓦臘納西;바라나시; +city::1253437;Vaniyambadi;Vanivambadi;Vaniyambadi;Vānivambādi;Vāniyambādi;baniyamabari;fanymbdy;vaniyamabadi;vaniyampati;wa ni ye mu ba di;wanyyambady;wnymbdy;فانيمبدي;وانییامبادی;ونیمبدی;वनियामबादी;বানিয়ামবড়ি;வாணியம்பாடி;瓦尼耶姆巴迪; +city::1253468;Valsad;Bulsar;Bulsār;Valsad;Valsād;Walsad;Walsād; +city::1253472;Valparai;Valparai;Vālpārai; +city::1253573;Vadodara;BDQ;Baroda;Vadodara;Vapadedara;ba luo da;badodala;barodara;fadwdara;radodara;vadeadara;vadodara;vatotara;vu~adodara;wadwdara;wdwdrh;Вaдодaрa;Вадодара;Վադոդարա;فادودارا;وادودارا;واڈوڈارا;ودودره;وڈودرا;बड़ोदरा;वडोदरा;वदोदरा;বড়োদরা;ৱডোদরা;ਵਡੋਦਰਾ;વડોદરા;ବଡ଼ୋଦରା;வடோதரா;వడోదర;ವಡೋದರಾ;വഡോദര;ვადოდარა;ヴァドダラ;ヴァドーダラー;巴罗达;바도다라; +city::1253736;Upleta;Upleta; +city::1253744;Uppal Kalan;Oopal;Pedda Uppal;Upal;Uppal;Uppal Kalan; +city::1253747;Unnao;Unao;Unnao;Unnāo; +city::1253750;Unjha;Unjha; +city::1253783;Una;Una; +city::1253807;Umred;Umred;Umrer; +city::1253888;Ullal;Ulaul;Ullai;Ullal;Ullāl; +city::1253894;Ulhasnagar;Ulasnagar;Ulhasnagar;Ulhāsnagar;Ulkhasnagar;alہasngr;awlasnagr;awlhsngr;ul'hasanagara;ulahasanagara;ulhaseunagaleu;ullasanagara;uruhasunagaru;wu er ha si ne ge er;Уласнагар;Улхаснагар;الھاس نگر ممبئي;الہاسنگر;الہسنگر;اولاسناگر;اولهسنگر;उल्हासनगर;উল্লাসনগর;ਉਲਹਾਸਨਗਰ;ウルハースナガル;烏爾哈斯訥格爾;울하스나가르; +city::1253914;Ujjain;Uddzhajn;Uddzsain;Uddzsaín;Udzajin;Udzdzain;Udždžain;Ujjain;ajyn;awjayn;awjayyn;awjyn;ujain;ujaina;ujaini;ujjain;ujjaina;ujjayini;ujjeyan;wu du yan na;Удджайн;Уџајин;اجین;اوجائین;اوجاين;اوجین;اوجېن;उज्जैन;উজ্জয়িনী;উজ্জৈন;ਉੱਜੈਨ;ઉજ્જૈન;ଉଜ୍ଜୟିନୀ;உஜ்ஜைன்;ಉಜ್ಜೆಯನ್;ഉജ്ജയിൻ;უჯაინი;ウッジャイン;鄔闍衍那;우자인; +city::1253918;Ujhani;Ujhani;Ujhāni; +city::1253944;Udumalaippettai;Udamalpet;Udumalaippettai; +city::1253952;Udipi;Udipi;Udupi;udupi;wu du pi;ಉಡುಪಿ;乌杜皮; +city::1253956;Udhampur;Udhampur;Udkhampur;udamapura;udhamapura;udhamapuram;utampur;wu da mu pu er;Удхампур;ادھم پور;اودہم پور;उधमपुर;उधमपुरम्;उधमपूर;উদমপুর;ਉਧਮਪੁਰ;ઉધમપુર;உதம்பூர்;乌达姆普尔; +city::1253958;Udgir;Udgir;Udgīr; +city::1253986;Udaipur;Oodeypore;UDR;Udaipur;Udajpur;adے pwr;awdy pwr;udaipuleu;udaipura;udaipuru;udayapur;udayapura;udayapuram;utayappur;wu dai pu;Удайпур;Удајпур;ادے پور;اودہےپور;اودی پور;اودی‌پور;उदयपुर;उदयपुरम्;उदयपूर;উদয়পুর;ਉਦੈਪੁਰ;ઉદયપુર;ଉଦୟପୁର;உதயப்பூர்;ఉదయపూర్;ಉದಯಪುರ;ഉദയ്‌പൂർ;ウダイプル;烏代浦;우다이푸르; +city::1253993;Ooty;Ootacamund;Ooty;Udagamandalam;Udagamandalām;Udakamandalam;Udhagai;Udhagamandalam;Utakamand;udagamandalama;udakamandaramu;udhagamandalama;utakai;utakamantalam;Утакаманд;उदगमंदलम;উধগমন্ডলম;உதகமண்டலம்;உதகை;ウダカマンダラム; +city::1254046;Tura;Tura; +city::1254054;Tuni;Tuni; +city::1254069;Tundla;Tundla;Tūndla; +city::1254089;Tumkur;Tumakooru;Tumakuru;Tumakūru;Tumkur;Tumkūr;tumakuru;ತುಮಕೂರು; +city::1254163;Thiruvananthapuram;City of Lord Anantha;Gorad Tkhiruvanantkhapuram;TRV;Thiruvananthapuram;Tiruvananantapuram;Tiruvanantapuram;Tiruvanantapuramas;Trivandrum;te li fan de lang;thyrwfananthabwram;tilubanantapulam;tiru'anantapuram;tirubanantapurama;tiruvanantapuram;tiruvanantapurama;tiruvu~anantapuramu;tribanadrama;tribendrama;trywandrwm;trywwndrwm;Горад Тхіруванантхапурам;Тируванантапурам;טריוונדרום;تریواندروم;تریوینڈرم;تھیروواننتھاپورم;ثيروفانانثابورام;तिरुअनन्तपुरम्;तिरुवनंतपुरम;तिरुवनन्तपुरम;तिरुवनन्तपुरम्;তিরুবনন্তপুরম;ত্রিবানদ্রাম;તિરુવનંતપુરમ્;ତ୍ରିବେନ୍ଦ୍ରମ;திருவனந்தபுரம்;తిరువనంతపురం;ತಿರುವನಂತಪುರಮ್;തിരുവനന്തപുരം;ティルヴァナンタプラム;特里凡得琅;티루바난타푸람; +city::1254187;Trichur;Thrissur;Trichura;tiruccur;trssuർ;Тричура;திருச்சூர்;തൃശ്ശൂർ; +city::1254241;Tonk;Tonk;Tonk City; +city::1254274;Tohana;Tohana;Tohāna; +city::1254309;Titagarh;Titagarh;Titāgarh; +city::1254320;Tiruvottiyur;Tiruvattiyur;Tiruvattiyūr;Tiruvottiyur;Tiruvottiyūr; +city::1254327;Tiruvannamalai;Tirruvannamalai;Tiruvannamalai;Tiruvannamalaj;Tiruvannāmalai;tiruvannamalai;tiruvu~an'namarai;Тируваннамалай;திருவண்ணாமலை;ティルヴァンナーマライ; +city::1254335;Tiruvalla;Thiruvalla;Tiruvalla; +city::1254343;Tiruttangal;; +city::1254346;Tirur;Tirur;Tirur Station;Tirūr;di lu er;tirur;tirura;tyrwr;تیرور;তিরুর;திரூர்;തിരൂർ;蒂鲁尔; +city::1254348;Tiruppur;Tiruppur;Tiruppūr;Tirupur;di lu pu;tiruppur;tiruppura;tiruppuru;tirupura;tyrwpwr;Тируппур;Тирупур;تيروپور;تیروپور;तिरुपुर;तिरुपूर;तिरूपुर;তিরুপ্পুর;திருப்பூர்;ತಿರುಪ್ಪೂರು;തിരുപ്പൂർ;蒂魯普; +city::1254360;Tirupati;TIR;Tirumala - Tirupati;Tirumalai;Tirupati;di lu pa di;tirumala;tirupati;tirupatih;tiruppati;trwpty;tyrwpaty;tyrwpty;Тирупати;Тірупаті;تروپتی;تیروپاتی;تیروپتی;तिरुपति;तिरुपतिः;तिरुपती;तिरुप्पति;তিরুমালা;ତିରୁପତି;திருப்பதி;తిరుపతి;తిరుమల;ತಿರುಪತಿ;蒂鲁帕蒂; +city::1254361;Tirunelveli;Nellai;Tinnevelli;Tinnevelly;Tinnevelly Junction;Tirunelveli;Tirunelweli;di lu nei er wei li;tilunelbelli;tirunalaveli;tirunelabeli;tirunelaveli;tirunelveli;tiruneruvu~eri;trwnlwyly;tyrwnlfly;tyrwnlwly;tyrwnlwyly;tyrwnylwyly;Тирунелвели;ترونلویلی;تيرونلفلي;تيرونيلويلي;تیرونلولی;تیرونلویلی;तिरुनलवेली;तिरुनॆल्वेलि;तिरुनेल्वेली;तिरूनेलवेली;তিরুনেলবেলি;તિરુનેલવેલી;திருநெல்வேலி;తిరునెల్వేలి;ತಿರುನೆಲ್ವೆಲಿ;തിരുനെൽ‌വേലി;ティルネルヴェーリ;蒂魯內爾維利;티루넬벨리; +city::1254385;Tiruchengode;di lu qin ge ao de;tiruccenkotu;tirucengode;تروچینگوڑے;তিরুচেঙ্গোডে;திருச்செங்கோடு;蒂鲁琴格奥德; +city::1254388;Tiruchirappalli;TRZ;Tiruccirappalli;Tiruccsirapalli;Tiruccsirápalli;Tiruchchinappalli;Tiruchchināppalli;Tiruchchirappalli;Tiruchchirāppalli;Tiruchi;Tiruchirapali;Tiruchirapalli;Tiruchirappalli;Tiruchirappal·li;Tirucirapali;Tiruĉirapali;Tiruččiráppalli;Trichinapalli;Trichinopoli;Trichinopoly;Trichy;Trinchinopoly;di lu ji la pa li;tiluchilapalli;tiruccirappalli;tiruchiraparri;tirucirapalli;tirutchirapparri;tricimalaidurgam;trwchraply;tyrwchyrapaly;tyrwchyraply;Тиручирапали;Тируччираппалли;Тіручірапаллі;تروچراپلی;تيروچيراپلي;تیروچیراپالی;ٹyrwchyrapaly;ٹیروچیراپالی;ट्रिचिमलैदुर्गम्;तिरुचिरापल्ली;तिरुचिरापळ्ळि;তিরুচিরাপল্লী;திருச்சிராப்பள்ளி;ತಿರುಚ್ಚಿರಾಪ್ಪಳ್ಳಿ;തിരുച്ചിറപ്പള്ളി;ティルチラーパッリ;ティルッチラーッパッリ;蒂魯吉拉帕利;티루치라팔리; +city::1254420;Tiptur;Tiptur;Tiptūr; +city::1254432;Tinsukia;Tinsukia; +city::1254444;Tindivanam;Tindivanam;Tindivangam; +city::1254481;Tilhar;Tilhar; +city::1254534;Tikamgarh;Tikamgarh;Tīkamgarh; +city::1254589;Thiruvarur;Thiruvarur;Thiruvārūr;Tirnvalur;Tiruvalur;Tiruvarur;Tiruvālūr;di lu wa lu er;thirubarura;tiruvarur;tiruvarura;tiruvaruru;tiruvu~aruru;Тируварур;تھرووارور;तिरुवरुर;तिरुवारूर;तिरुवारूरु;থিরুবারুর;திருவாரூர்;ティルヴァールール;蒂鲁瓦鲁尔; +city::1254649;Tanjore;TJV;Tanjavur;Tanjavûr;Tanjor;Tanjore;Tanjāvūr;Thanjavur;Thanjāvūr;Tkhandzhavur;tancavur;tancavuർ;tanjavura;tanjavuru;Тханджавур;तंजावुर;தஞ்சாவூர்;തഞ്ചാവൂർ;タンジャーヴール; +city::1254657;Thanesar;Thanesar;Thānesar; +city::1254661;Thane;Tanja;Tanna;Thana;Thane;Thāna;Thāne;Таня; +city::1254710;Tezpur;Darrang;TEZ;Tezpur;tai ci pu er;tejapura;tyzpwr;Тезпур;تیزپور;तेजपुर;तेजपूर;তেজপুর;তেজপুৰ;ତେଜପୁର;泰兹普尔; +city::1254744;Thenkasi;Tenkasi;Tenkāsi; +city::1254780;Tellicherry;Talasseri;Tellicherri;Tellicherry;Tellichery;Thalassery;ta la si sai er yi;talacceri;talasseri;thalas'serya;tlshyry;تلشیری;থালস্সের্য;தலச்சேரி;തലശ്ശേരി;塔拉斯塞尔伊; +city::1254868;Tarn Taran;Tarn Taran;Tarn Tāran; +city::1254953;Tanuku;Tanuku;ta nu ku;tanukku;tanuku;tanuku mandala;tnwkw;تنوکو;तणुकु मण्डल;তানুকু;ତାନୁକୁ;தணுக்கு;తణుకు;塔努库; +city::1255004;Tandur;Tandur;Tāndūr; +city::1255024;Tanda;Tanda;Tāndā; +city::1255062;Tambaram;Tambaram;ta mu ba la mu;tambarama;tamparam;तांबरम;তাম্বারাম;தாம்பரம்;塔姆巴拉姆; +city::1255121;Talipparamba;Taliparamba;Talipparamba;Tullipurmbu;ta li pa la mu ba;taliparamba;talipparamp;talipparampa;টলিপরম্ব;தளிப்பறம்பா;തളിപ്പറമ്പ്;塔利帕拉姆巴; +city::1255254;Tadpatri;Tadpatri;Tādpatri; +city::1255264;Tadepallegudem;Tadepallegudem;Tadepalligudem;Tādepallegūdem;Tādepalligūdem; +city::1255344;Suriapet;Suriapet;Suriāpet;Suryapet; +city::1255349;Surendranagar;Civil Station;Surendranagar;Wadhwan;Wadhwan Camp;Wadhwan City;Wadhwan Civil Station;Wadhwān;Wadhwān Civil Station; +city::1255361;Suratgarh;Suratgarh;Suratgarkh;Sūratgarh;Суратгарх; +city::1255364;Surat;STV;Surat;Suratas;Surate;Sūrat;su la te;surata;surato;Сурат;सुरत;সুরাত;સુરત;スーラト;苏拉特; +city::1255396;Supaul;Supaul; +city::1255449;Sunam;Sunam;Sunām; +city::1255491;Sultanpur;Sultanpur;Sultānpur; +city::1255560;Sujangarh;Sujangarh;Sūjāngarh; +city::1255616;Srivilliputhur;si li wei li pu tu er;sribilliputhura;srivilli putturu;tiruvilliputtur;শ্রীবিল্লিপুথুর;ଶ୍ରୀବିଲ୍ଲିପୁଥୁର;திருவில்லிபுத்தூர்;శ్రీవిల్లి పుత్తూరు;斯里维利普图尔; +city::1255634;Srinagar;Caspira;Gorad Srynagar;SXR;Shrinagar;Srinagar;Srinagaras;Srinagaro;Srinankar;Srinigar;Srīnagar;Suryanagar;Szrinagar;cirinakar;seulinagaleu;shurinagaru;si li na jia;sirinagara;siry nagar;srinagar;srinagara;srinagaram;srinagari;srinkhr;sry ngr;srynaghar;sryngr;Śrinagar;Šrinagaras;Šrínagar;Σριναγκάρ;Горад Срынагар;Сринагар;Срінагар;Шринагар;Սրինագար;סרינגאר;جموں;سري نگر;سريناغار;سری نگر;سرینگر;سِری نَگَر;श्रीनगर;श्रीनगरम्;सिरीनगर;শ্রীনগর;ਸ੍ਰੀਨਗਰ;શ્રીનગર;ଶ୍ରୀନଗର;சிறிநகர்;శ్రీనగర్;ಶ್ರೀನಗರ;ശ്രീനഗർ;ศรีนคร;სრინაგარი;シュリーナガル;斯利那加;스리나가르; +city::1255647;Chicacole;Chicacole;Srikakulam;Srīkākulam;srikakulam;శ్రీకాకుళం; +city::1255714;Sopur;Sopor;Sopore;Sopur; +city::1255744;Sonipat;Sonepat;Sonepat Punjab;Sonipat;Sonīpat; +city::1255927;Siwan;Savan;Sivan;Siwan;Siwān;Сиван; +city::1255947;Sivakasi;Sivakasi;Sivakāsi;civakaci;sibakasi;sivakasi;xi wa ka xi;चिवकाचि;शिवकाशी;শিবকাশী;ਸਿਵਾਕਾਸੀ;ଶିବକାଶୀ;சிவகாசி;శివకాశి;ശിവകാശി;西瓦卡西;시바카시; +city::1255955;Siuri;Siuri;Suri;Sūri; +city::1255969;Sitapur;Sitapur;Sītāpur; +city::1255983;Sitamarhi;Sitamarhi;Sītāmarhi; +city::1256039;Sirsilla;Sirsilla;sirisilla;సిరిసిల్ల; +city::1256047;Sirsi;Sirsi;sirasi;sirsi;xi er xi;शिरसि;सिरसी;ସିର୍ସି;ಶಿರಸಿ;西尔西; +city::1256052;Sirsa;Sirsa;sirasa;sirsa;syrsa;xi er sa;Сирса;سیرسا;ضلع سرسہ;सिरसा;ସିର୍ସା;西尔萨; +city::1256087;Sirhind;Sirhind; +city::1256104;Sira;Sira;Sīra; +city::1256207;Sindhnur;Sindhnur;Sindhnūr; +city::1256237;Shimla;SLV;Shimla;Simla;Simlá;cimla;shimla;shimura;shymla;simala;simla;sinla;symlh;xi mu la;Ŝimla;Şimla;Šimla;Шимла;Шімла;שימלה;شملہ;شيملا;شیملا;शिमला;শিমলা;ਸ਼ਿਮਲਾ;શિમલા;ଶିମଲା;சிம்லா;సిమ్లా;ಶಿಮ್ಲಾ;ഷിംല;შიმლა;シムラ;シムラー;西姆拉;심라; +city::1256269;Sillod;Sillod; +city::1256287;Silchar;IXS;Silchar;silacara;silacara-nagaram;xi er qia er;Силчар;शिलचर-नगरम्;सिलचर;শিলচর;শিলচৰ;સિલચર;ସିଲ୍‌ଚର୍;西尔恰尔; +city::1256320;Sikar;Sikar;Sīkar; +city::1256329;Sikandarabad;Sikandarabad;Sikandarābād;Sikandrabad; +city::1256343;Sihor;Shihor;Sihara;Sihor;sihora;xi huo er;سِہور;सिहोर;সিহোর;સિહોર;西霍尔; +city::1256369;Sidhi;Sidhi;Sidi;Sidkhi;Сидхи; +city::1256377;Siddipet;Siddipet;siddipeta;సిద్దిపేట; +city::1256382;Siddhapur;Siddhapur;Sidhpur; +city::1256388;Sibsagar;Sibsagar;Sibsagor Naga Bhumi;Sibsāgar;Сибсагар; +city::1256409;Shyamnagar;Shamnagar;Shamnagore;Shyamnagar;Syamnagar;Syāmnagar; +city::1256422;Shrirampur;Serampore;Serampur;Shrirampur;Shrīrāmpur; +city::1256436;Solapur;SSE;Sholapur;Sholāpur;Solapur;Solāpur;solapura;sollapura;sorapuru;Солапур;सोलापूर;ಸೊಲ್ಲಾಪುರ;ソーラープル; +city::1256451;Shivpuri;Shivpuri;Shivpurī;si xi wo pu li;sibapuri;sivapuri;Шивпури;शिवपुरी;শিবপুরি;શિવપુરી;ଶିବପୁରି;斯希沃普里; +city::1256475;Shirpur;Shirpur;Shirpure;Ширпуре; +city::1256515;Shimoga;Shimoga;Shimogga;Shivamogga;Shivamoggi;cimakka;shymwga;shywamwga;simeaga;simoga;sivamogga;xi mo jia;Шимога;شیموگا;شیواموگا;शिमोगा;শিমোগা;શિમોગા;சீமக்கா;శివమొగ్గ;ಶಿವಮೊಗ್ಗ;ഷിമോഗ;希莫加; +city::1256523;Shillong;SHL;Shillong;Shilong;Silongas;cillan;shilongi;shiron;shylang;shylwngh;silam;silamga;silanga;sillang;silleann;sillong;silonga;xi long;Šilongas;Шиллонг;Шилонг;شيلونغ;شیلانگ;शिलाँग;शिलांग;शिलाङ्ग;शिलोंग;শিলং;ਸ਼ਿਲਾਂਗ;શિલોંગ;ଶିଲଂ;சில்லாங்;షిల్లాంగ్;ಶಿಲ್ಲಾಂಗ್;ഷില്ലോങ്ങ്;შილონგი;シロン;西隆;실롱; +city::1256525;Shiliguri;Shiliguri;Silguri;Siligun;Siliguri;Silīguri;Silīgurí;siliguri;xi li gu li;Силигури;सिलीगुड़ी;শিলিগুড়ি;西里古里; +city::1256529;Shikohabad;Shikohabad;Shikohābād; +city::1256569;Sherkot;Bijnor;Sherkot; +city::1256593;Sheopur;Sheopur;Sheopur Kalan;se'opura;serapura;si he ao pu er;syopura;syopuram;श्योपुरम्;শেওপুর;শেৱপুর;શ્યોપુર;ଶେଓପୁର;斯赫奥普尔; +city::1256620;Shegaon;Shegaon;segamo;seganva;si he jia ao en;شے گاؤں;शेगांव;শেগাঁও;ଶେ‌‌ଗାଓଁ;斯赫加奥恩; +city::1256639;Shantipur;Santipur;Shantipur;Shāntipur;Sāntipur; +city::1256671;Shamli;Shamli;Shāmli; +city::1256693;Shajapur;Shajapur;Shājāpur; +city::1256728;Shahjanpur;Shahjahanpur;Shahjanpur;Shāhjahānpur;Shāhjānpur; +city::1256739;Shahdol;Sahdol;Shahdol;sahadola;saharola;satol;si ha he duo er;शहडोल;शहदोल;শাহদোল;શાહડોલ;ଶାହଡ଼ୋଲ;ஷடோல்;斯哈赫多尔; +city::1256750;Shahada;; +city::1256755;Shahabad;Hardoi;Shahabad;Shāhābād; +city::1256759;Shahabad;Shahabad;Shahabad Deccan;Shāhābād; +city::1256826;Seoni;Seoni;Seonī; +city::1256854;Sendhwa;Sendhawa;Sendhwa; +city::1256913;Sehore;Sehore; +city::1256922;Secunderabad;Sekunderabad;cikkantarapat;sai kang de la ba de;sekkandrabad;sekundarabada;sekundelabadeu;shikandarabado;sikandarabada;sikindrabad;skndr abad;Секундерабад;سکندر آباد;सिकंदराबाद;সেকুন্দারাবাদ;சிக்கந்தராபாத்;సికింద్రాబాద్;സെക്കന്ദ്രാബാദ്;シカンダラーバード;塞康德拉巴德;세쿤데라바드; +city::1256949;Sawai Madhopur;Sawai Madhopur;Sawāi Mādhopur; +city::1257001;Sattenapalle;Sattenapalle; +city::1257022;Satna;Satna;TNI; +city::1257055;Satara;Satara;Sātāra;Сатара; +city::1257198;Sardarshahr;; +city::1257402;Sangrur;Sangrur;Sangrūr; +city::1257416;Sangli;Sangla;Sangli;Sāngli;Turmeric city; +city::1257431;Sangareddi;Sangareddi;Sangareddipet;Sangareddypeta;Sangāreddi;sangareddi;సంగారెడ్డి; +city::1257436;Sangamner;Sangamner;Sangamnor; +city::1257459;Sandila;Sandila;Sandīla; +city::1257540;Sambhal;Sambal;Sambhal;sambal;sambhala;Самбал;سامبال;سنبھل;संभल;সাম্ভাল;ସମ୍ଭାଲ; +city::1257542;Sambalpur;Sambalpore;Sambalpur;sa mu ba er pu er;sambalapura;sambalpuleu;sanbarupuru;smblpwr;Самбалпур;سمبلپور;संबलपुर;संबलपूर;সাম্বালপুর;સંબલપુર;ସମ୍ବଲପୁର;సంబల్‌పుర్;サンバルプル;萨姆巴尔普尔;삼발푸르; +city::1257551;Samastipur;Samastipur;Samastīpur;Samāstipur; +city::1257565;Samalkot;; +city::1257587;Salur;Salur;Sālūr;saluru;సాలూరు; +city::1257629;Salem;Gorad Salem;SXV;Salem;Selam;Szalem;Szálem;celam;sai lei mu;salema;sallem;salm;selam;selama;seramu;Горад Салем;Салем;سالم;سالم ،تامل ناڈو;سیلم، تامل ناڈو;सेलम;সালেম;સેલમ;ସେଲମ୍;சேலம்;సేలం;ಸೇಲಂ‌;സേലം;セーラム;塞勒姆;살렘; +city::1257794;Sahibganj;Sahibganj;Sāhibganj; +city::1257800;Sahaswan;Sahaswan;Sahaswān; +city::1257804;Saharsa;Saharsa;Sakharsa;sa ha er sa;saharasa;saharsa;Сахарса;ساهارسا;سہرسہ;सहरसा;सहर्सा;সহর্ষ;সহর্ষা;સહરસા;ସାହାର୍ସା;సహర్సా;萨哈尔萨; +city::1257806;Saharanpur;Saharanpur;Sahāranpur; +city::1257845;Saugor;Sagar;Saugor;Sāgar;Сагар; +city::1257851;Sagar;Sagar;Sāgar; +city::1257951;Ropar;Ropar;Rupar;Rupnagar;Rūpar;Rūpnagar; +city::1258044;Roorkee;Roorkee;Rurki;luo ao er kai ai;roraki;rraki;ruraki;rurki;rurkki;Рурки;Руркі;روڑکی;रुड़की;रूरकी;রোরকি;ଋଡ଼କୀ;ரூர்க்கி;రూర్కీ;罗奥尔凯埃; +city::1258076;Rohtak;Rohtak;Rokhtak;luo he ta ke;rohataka;rwhtak;rwtk;Рохтак;روتک;روهتاك;روہتک;रोहतक;রোহতক;રોહતક;ରୋହତକ;罗赫塔克; +city::1258099;Roha;Roha;Roha-Kolaba;rohe;روہا;रोहे; +city::1258109;Robertsonpet;Robertsonpet; +city::1258126;Rishra;Rishra; +city::1258128;Rishikesh;Rikhikesh;Rishikesh;Rishīkesh;Ришикеш; +city::1258178;Rewari;Rewari;Rewāri; +city::1258182;Rewa;REW;Reva;Rewa;Rewah;lei wa;reva sahara;rewa;riva;riwa;rywa;Рева;ریوا;रीवा;रेवा शहर;રીવા;ରେୱା;リーワー;雷瓦; +city::1258207;Renukut;Renukoot;Renukut;Renukūt; +city::1258290;Rayadrug;; +city::1258291;Rayachoti;Rayachoti;Rāyachoti; +city::1258338;Ratnagiri;RTC;Ratnagiri;Ratnāgiri;Rutnagherry;irattinakiri;la te na ji li;ratnagiri;rtnagry;Ратнагири;رتناگری;रत्नगिरी;रत्नागिरि;रत्‍नागिरी;রত্নগিরি;રત્નાગિરી;ରତ୍ନଗିରି;இரத்தினகிரி;ರತ್ನಾಗಿರಿ;拉特纳吉里; +city::1258342;Ratlam;Hatlam;Ratlam;Ratlām; +city::1258352;Rath;Rata;Rath;Rāth;Рата; +city::1258366;Ratangarh;; +city::1258470;Raniganj;Ranigandzhe;Raniganj;Rānīganj;Ранигандже; +city::1258474;Ranibennur;Ranibennur;Renibennur;Rānībennur; +city::1258526;Ranchi;IXR;Ranchi;Ranci;Rancis;Rancsi;Ranĉi;Rančis;Ráncsí;Ráňčí;Rānchi;Rānchī;lan qi;lanchi;raci;ramci;ranchi;ranchy;ranci;ranci jilla;ranshy;rʼnzy;Ранчи;Ранчі;ראנצי;رانشي;رانچي;رانچی;राँची;रांची;रांची जिल्ला;রাঁচি;রাচি;ਰਾਂਚੀ;રાંચી;ରାଞ୍ଚି;ராஞ்சி;రాంచీ;ರಾಂಚಿ;റാഞ്ചി;რანჩი;ラーンチー;蘭契;란치; +city::1258546;Ranaghat;Ranaghat;Rānāghāt; +city::1258581;Rampur Hat;; +city::1258599;Rampur;Rampur;Rāmpur; +city::1258637;Ramnagar;Ramnagar;Rāmnagar; +city::1258662;Ramgundam;Ramagundam;Ramgundam;Rāmgundam;ramagundam;రామగుండం; +city::1258686;Ramgarh;Ramgarh;Rāmgarh; +city::1258740;Ramanathapuram;Ramanathapuram;Ramanatkhapuram;Ramanatkhapurama;Ramanthapuram;Ramnad;Rāmanāthapuram;iramanatapuram;la ma na ta pu la mu;ramanatapuramu;ramanathapuram;ramanathapurama;ramanthapurama;Раманатхапурам;Раманатхапурама;रामनाथपुरम;रामनाथपुरम्;রমন্থাপুরম;રામનાથપુરમ;ରାମନାଥପୁରମ;இராமநாதபுரம்;ラーマナータプラム;拉马纳塔普拉姆; +city::1258744;Closepet;Closepet;Ramanagaram;Rāmanagaram;Раманагарам; +city::1258797;Rajsamand;Rajsamand;Rājsamand; +city::1258803;Rajpura;Kajpura;Rajpura;Rājpura; +city::1258831;Raj-Nandgaon;Raj Nandga;Raj Nandgaon;Raj-Nandgaon;Rāj Nāndgaon;Rāj-Nāndgaon; +city::1258847;Rajkot;RAJ;Radzhkot;Radzkot;Radzkotas;Radźkot;Radžkotas;Rajkot;Rājkot;rajikotto;Раджкот;ラージコット; +city::1258916;Rajapalaiyam;Rajapalaiyam;Rajapalayam;Rājapālaiyam; +city::1258932;Rajahmundry;RJA;Radzhamandri;Rajahmondry;Rajahmundry;Rajamahendravaram;Rajamahendri;Rajamandri;Rājahmundry;Rājamahendravaram;rajamandri;Раджамандри;రాజమండ్రి; +city::1258980;Raipur;RPR;Raipur;Raipura;Raipuras;Rajpur;Rajpuro;Rayapura;Raypur;Rájpur;lai bu er;laipuleu;ra'ipura;raipuru;ray pwr;rayapura;raybwr;rayppur;raypur;Райпур;Рајпур;Ռայպուր;رائے پور;رايبور;رای پور;رای‌پور;راۓپور;रायपुर;रायपूर;রাইপুর;রায়পুর;ਰਾਇਪੁਰ;રાયપુર;ରାୟପୁର;ராய்ப்பூர்;రాయ్‌పుర్;ರಾಯ್ಪುರ್;റായ്‌പൂർ;რაიპური;ラーイプル;賴布爾;라이푸르; +city::1259005;Raigarh;Raigarh;Raigârh;Rajgarkh;lai jia er;rayagadha;rayagara;rayjarh;Райгарх;رائے گڑھ;رايجاره;रायगढ;রায়গড়;રાયગઢ;ରାୟଗଢ;赖加尔; +city::1259009;Raiganj;Raiganj;Rayganj;Rāiganj; +city::1259012;Raichur;Raichur;Rajchur;Rāichūr;Райчур; +city::1259056;Raghogarh;Raghogarh;Raghugarh;Rāghogarh;Rāghugarh; +city::1259064;Raebareli;Rae Bareli;Raebareli;Rāe Bareli; +city::1259083;Rabkavi;; +city::1259091;Kollam;Coilum;Coulao;Coulão;Desinganadu;Kolam;Kolamo;Kollam;Kol·lam;Kullamalai;Kvilon;Quilon;keallam;kollam;kollama;korramu;kui long;kwlam;kwlm;Квилон;Колам;Коллам;کولام;کولم;कोल्लम;कोल्लम्;কোল্লম;কোল্লাম;કોલ્લમ;କୋଲ୍ଲାମ୍;கொல்லம்;കൊല്ലം;コッラム;奎隆;콜람; +city::1259124;Puttur;Puttur;Puttūr; +city::1259154;Pusad;Pusad; +city::1259163;Puruliya;Purulia;Puruliya; +city::1259166;Purnia;Purnia;Purnija;Pūrnia;bwrnya;pu er ni ya;puraniya;purni'a;purniya;pwrnya;Пурния;Пурнија;بورنيا;پورنیا;پورنیہ;पुर्णिया;पूर्णिया;পুরনিয়া;পূর্ণিয়া;ପୁର୍ନିଆ;பூர்ணியா;普尔尼亚; +city::1259184;Puri;Jagannath;Jagannathpur;Jagannāth;Puri;Puri District;Purî;puri;pwry;Пури;פורי;পুরি;பூரி;プーリ; +city::1259229;Pune;PNQ;Pona;Poona;Poune;Pun;Puna;Pune;Puneo;Puno;Puné;Púna;bwnh;poona;pu na;puna;pune;pune sahara;punyapattanam;pwna;pwnh;pwny;pwnہ;Πούνε;Пуна;Пуне;Пуно;Պունա;פונה;بونه;پونا;پونه;پونہ;پونی;पुणे;पुणे शहर;पुण्यपट्टनम्;পুনে;ਪੂਨਾ;પુના;ପୁଣେ;புனே;పూణే;ಪುಣೆ;പൂണെ;პუნა;プネー;浦那;푸네; +city::1259239;Punasa;; +city::1259263;Puliyangudi;Puliyangudi;Puliyankudi; +city::1259297;Pudukkottai;Poodoocottah;Puducotai;Pudukattai;Pudukkottai;Pudukkottai-Trichinopoly;Pudukkottaj;Pudukotah;Pudukottai;pu du ke tai;pudo~ukottai;pudukkotta'i;purukkotta'i;putukkottai;Пудуккоттай;পুড়ুক্কোত্তাই;ପୁଡୁକ୍କୋଟ୍ଟାଇ;புதுக்கோட்டை;プドゥコーッタイ;普杜科泰; +city::1259312;Proddatur;Proddatur;Proddatūr;prodduturu;ప్రొద్దుటూరు; +city::1259385;Port Blair;Gorad Port-Blehr;IXZ;Port Blair;Port Bler;Port Bleras;Port-Blehr;Port-Bler;Portus Blairensis;bu lai er gang;porata bale'ara;port bler;port piler;porta blera;porta bleyara;portableyara;poteubeulleeo;potoburea;pwrt blr;pwrt blyyr;Горад Порт-Блэр;Порт Блер;Порт-Блер;Порт-Блэр;פורט בלייר;پورت بلر;پورٹ بلیئر;पोर्ट ब्लेयर;पोर्ट ब्लेर;पोर्टब्लेयर;পোর্ট ব্লেয়ার;ਪੋਰਟ ਬਲੇਅਰ;પોર્ટ બ્લૅર;ପୋର୍ଟ ବ୍ଲେୟର;போர்ட் பிளேர்;ಪೋರ್ಟ್ ಬ್ಲೇರ್;പോർട്ട് ബ്ലെയർ;พอร์ตแบลร์;პორტ-ბლერი;ポートブレア;布萊爾港;포트블레어; +city::1259395;Porbandar;PBD;Poorbunder;Porbandar;Porbandarom;Port Porbandar;Purbandar;bo er ben de er;bwrbndr;poleubandaleu;porabandara;porpantar;Порбандар;Порбандаром;بوربندر;पोरबंदर;पोरबन्दर;পোরবন্দর;પોરબંદર;ପୋରବନ୍ଦର;போர்பந்தர்;పోర్‌బందర్;പോർബന്തർ;博尔本德尔;포르반다르; +city::1259408;Ponnuru;; +city::1259411;Ponnani;Ponani;Ponnani;Ponnāni; +city::1259425;Puducherry;PNY;Pondicero;Pondicheri;Pondicherri;Pondicherry;Pondichery;Pondichéri;Pondichéry;Pondiseri;Pondisheri;Pondiĉero;Ponducherry;Pondy;Poudhucherry;Puduchcheri;Puducherri;Puducherry;Puduvai;Territoire de Pondichery;Territoire de Pondichéry;ben de zhi li;ben de zhi li shi;pandiceri;panticceri;pondiceri;pondisheri;Пондишери;Пондішері;पॉण्डिचेरी;পন্ডিচেরী;પૉંડિચેરી;பாண்டிச்சேரி;პონდიშერი;ポンディシェリ;本地治里;本地治里市; +city::1259440;Pollachi;Pollachi;Pollāchi;bo la qi;peallacci;pollacci;pollaci;pwlachy;پولاچی;पोल्लाची;পোল্লাচি;ପୋଲ୍ଲାଚି;பொள்ளாச்சி;పొల్లాచి;പൊള്ളാച്ചി;波拉奇; +city::1259508;Pithapuram;Pithapuram;Pithāpuram; +city::1259652;Pimpri;Pimpri; +city::1259680;Pilkhua;Pilkhua;Pilkhuwa; +city::1259686;Pilibhit;Pilibhhit;Pilibhit;Pilibkhit;Pīlibhīt;Pīlībhīt;Пилибхит; +city::1259811;Phaltan;Phaltan;pa er tan;phalatana;پھلتان;फलटण;ফালটান;ફલટણ;ଫଲଟନ;帕尔坦; +city::1259827;Phagwara;Phagwara;Phagwāra; +city::1259841;Petlad;Petlad;Petlād; +city::1259994;Payyannur;Payyannur;Payyannūr;Payyanur; +city::1260040;Pattukkottai;Pattukkottai;pa tu ke tai;pattukkotta'i;pattukkottai;pattukotta'i;পাত্তুক্কোত্তাই;ପାତ୍ତୁକୋଟ୍ଟାଇ;பட்டுக்கோட்டை;帕图科泰; +city::1260086;Patna;New Patna;PAT;Patna;Patna New City;Patnao;ba te na;batna;pat na;patana;pateuna;patna;patona;ptnh;Πάτνα;Патна;Պատնա;פטנה;باتنا;پتنه;پٹنہ;پټنا;पटना;पाटणा;पाट्ना;পাটনা;ਪਟਨਾ;પટના;ପାଟଣା;பட்னா;பாட்னா;పాట్నా;ಪಟ್ನಾ;പട്ന;ปัฏนา;პატნა;パトナ;パトナー;巴特那;파트나; +city::1260107;Patiala;Pat'jala;Patiala;Patiāla;Патьяла; +city::1260137;Pathankot;IXP;Pathankot;Pathānkot;Patkhankot;Rathankot;pa tan ke te;pathanakota;Патханкот;پٹھان کوٹ;पठानकोट;পাঠানকোট;পাথানকোট;帕坦科特; +city::1260173;Patan;Patan;Pātan;Патан; +city::1260222;Parvatipuram;Parvatipuram;Pārvatipuram;Pārvatīpuram;parvatipuram;పార్వతీపురం; +city::1260290;Parli Vaijnath;Parli;Parli Vaijnath;Parli Vaijnāth;Purli;Purli Vaijnath; +city::1260341;Parbhani;Parbaini;Parbani;Parbhani;Parbkhani;pa er ba ni;parabhani;parbhani;prbany;Парбани;Парбхани;پربانی;پربھنی;परभणी;পারভানি;ପାର୍ଭାନି;帕尔巴尼; +city::1260387;Paramagudi;; +city::1260393;Paradip Garh;Paradeep;Paradip;Paradip Garh;Paradipur;Paradwip;Parādīp Garh;Pārādwīp; +city::1260434;Panvel;Panvel;Panwel;pan wei er;pana'oyela;panabela;panaraela;panavela;panvel;panwl;pnwyl;پانول;پنویل;पनवेल;পানওয়েল;পানৱেল;ପାନବେଲ;பன்வேல்;潘韦尔; +city::1260448;Panruti;Panruti;pan lu di;panaruti;pannurutti;পানরুটি;ପାନରୁତି;பண்ணுருட்டி;潘鲁蒂; +city::1260476;Panipat;Panipat;Panipata;Pānīpat;Панипата; +city::1260482;Panihati;Panihati;Pānihāti; +city::1260546;Pandharpur;Pandharpur;Pandkharpur;padharapura;pan da er pu er;pandaripuramu;pandharapura;pantaripuram;Пандхарпур;پانڈھراپور;पंढरपुर;पंढरपूर;পাধরপুর;ପାଣ୍ଢାରପୁର;பண்டரிபுரம்;పండరీపురము;ಪಂಢರಪುರ;潘达尔普尔; +city::1260607;Panaji;Nova Goa;Panadzhi;Panadzi;Panadzis;Panadzsi;Panadžis;Panadží;Panaji;Pangim;Panjim;pa na ji;panaji;panjy;pn chi;pnjy;Панаджи;پانجی;پنجی;पणजी;পানাজি;ਪਣਜੀ;ପାଣାଜୀ;பணஜி;பானஜி;పనజీ;ಪಣಜಿ;പനജി;ปณชี;პანაჯი;パナジ;帕纳吉;파나지; +city::1260637;Palwal;Palval;Palwal;balwal;pa er wa er;pala'oyala;palaraala;palavala;palawala;Палвал;بالوال;पलवल;পালওয়াল;পালৱাল;ପଲୱାଲ;帕尔瓦尔; +city::1260667;Paloncha;; +city::1260671;Palani;Palani;Palni;pa la ni;palani;Палани;पलनी;पळणी;पळनी;পালানি;ପାଲାନି;பழனி;പഴനി;帕拉尼; +city::1260692;Pallavaram;Pallavaram;Pallāvaram; +city::1260707;Palitana;Palitana;Pālitāna;Палитана; +city::1260716;Pali;Pali;Pali-Marwar;Pāli;Пали; +city::1260728;Palghat;Palakkad;Palghat;Palgkhat;Pālghāt;pa la ke ka de;palakkad;palakkada;palakkara;palakkat;palakkatu;Палгхат;پالگھاٹ;पालक्काड;पालक्काड़;পালক্কাদ;પલક્કડ;ପାଲାକ୍କଡ଼;பாலக்காடு;పాలక్కాడ్;പാലക്കാട്;帕拉克卡德; +city::1260730;Palghar;Palghar;Pālghar; +city::1260771;Palasa;Palasa;Palāsa;palasa;పలాస; +city::1260777;Palanpur;Palanpur;Pālanpur; +city::1260792;Palakollu;Palacole;Palakollu;Pālakollu; +city::1261008;Ottappalam;Ottapalam;Ottappalam;Ottappālam; +city::1261012;Osmanabad;OMN;Osmanabad;Osmānābād;Usmanabad;ao si ma na ba de;osamanabada;osmanabada;usamanabada;usmanabada;usumanabado;Османабад;عثمان آباد;उस्मानाबाद;ওসমানাবাদ;ਉਸਮਾਨਾਬਾਦ;ઉસ્માનાબાદ;ଓସ୍ମାନାବାଦ;ウスマーナーバード;奥斯马纳巴德; +city::1261039;Orai;Orai; +city::1261045;Ongole;Ongole;anagole;awngl;awngwl;ongol-nagaram;ongola;ongole;ongolu;onkol;weng guo er;Онголе;اونگل;اونگول;ओंगोल;ओङ्गोल्-नगरम्;অনগোলে;ઓંગોલે;ଓଙ୍ଗୋଲେ;ஒங்கோல்;ఒంగోలు;翁果爾; +city::1261086;Obra;Obra; +city::1261110;Nuzvid;Nuzvid;Nūzvīd; +city::1261162;Nowrangapur;Nabarangapur;Nabarangpur;Nowrangpur; +city::1261181;North Lakhimpur;IXI;Lakhimpur;North Lakhimpur;auyam laksipura;lakhimapura;nuo er te la ji mu pu er;uttara lakhimapura;uttara laksmipura;uttara-lakhimapuram;uttari lakhimapura;شمالی لیکھمپور;उत्तर लखिमपुर;उत्तर-लखिमपुरम्;उत्तरी लखीमपुर;लखीमपुर;উত্তর লখিমপুর;উত্তৰ লখিমপুৰ;ঔয়াং লক্ষিপুর;લખિમપુર;ଉତ୍ତର ଲକ୍ଷ୍ମୀପୁର;诺尔特拉基姆普尔; +city::1261227;Nokha;Noka;Nokha;Nokha mani;Nokhamandi; +city::1261258;Nizamabad;Nizamabad;Nizāmābād;nijamabad;నిజామాబాద్; +city::1261288;Nirmal;Nirmal;Nirmala;ni er ma er;nirmal;nirmala;nrml;Нирмала;نرمل;निर्मल;নির্মল;ନିର୍ମଲ;నిర్మల్;尼尔马尔; +city::1261309;Nipani;Nimpani;Nipani;Nipāni; +city::1261369;Nimbahera;Nimbahera;Nīmbāhera; +city::1261470;Neyyattinkara;Neyattinkara;Neyyattinkara;Neyyāttinkara; +city::1261481;New Delhi;Dellium Novum;Dilli;Dillí;N'ju-Deli;Neo Delchi;Neu-Delhi;Nev Deli;New Delhi;New Dilli;Nju Delkhi;Nov-Delhio;Nova Delhi;Nova Deli;Nova Deli - na'i dilli;Nova Deli - नई दिल्ली;Nova-Delhi;Nove Dilli;Nové Dillí;Nueba Deli;Nueva Delhi;Nuova Delhi;Nyja Deli;Nyu Deli;Nòva Delhi;Nýja Delí;Yeni Delhi;na'i dilli;naya dilli;niu-deli;niwde li;nyudelli;nyuderi;nyw dlhy;nywdlhy;putu tilli;xin de li;Νέο Δελχί;Њу Делхи;Нев Дели;Нью-Дели;Նյու Դելի;ניו דלהי;نيودلهي;नई दिल्ली;নয়া দিল্লী;புது தில்லி;นิวเดลี;ནེའུ་དིལ་ལིའི;ნიუ-დელი;ኒው ዴሊ;ニューデリー;新德里;뉴델리; +city::1261529;Nellore;Nellore;Nellur;Nelluru;Nelor;nei luo er;nellare;nellaura;nellora;nellur;nelluru;nelluru-nagaram;neruru;nlwr;nylwr;nylwry;sinhapuri;Неллуру;Нелор;نلور;نيلور;نيلوری;نیلور;नेल्लूरु-नगरम्;नेल्लोर;नेल्लौर;নেল্লরে;ନେଲ୍ଲୋର;நெல்லூர்;నెల్లూరు;సింహపురి;ネルール;內洛爾; +city::1261553;Nedumangad;Nedumangad;Nedumangād; +city::1261613;Nawalgarh;Nawalgarh;na wa er jia er;navalagadha;नवलगढ;纳瓦尔加尔; +city::1261631;Nawada;Nawada;Nawāda; +city::1261641;Nawabganj;Nawabgang;Nawabganj;Nawābganj; +city::1261669;Navadwip;Nabadurip;Nabadwip;Nadia;Navadvip;Navadwip;Navadwīp;Навадвип; +city::1261727;Nasirabad;Nasirabad;Nasīrābād; +city::1261731;Nashik;ISK;Nashik;Nasik;Nasikas;Nasiko;Naszik;Našikas;Nászik;na xi ke;nacik;nashiku;nashk;nasik;nasika;nasikeu;nask;nasyk;Насик;Нашик;Нашік;ناسک;ناسیک;ناشک;नाशिक;नाशीक;नासिक;নাশিক;ਨਾਸ਼ਿਕ;નાસિક;ନାଶିକ;நாசிக்;నాసిక్;ನಾಸಿಕ್;ნაშიკი;ナーシク;纳西克;나시크; +city::1261739;Narwana;Narwana;Narwanal;Narwāna; +city::1261772;Narnaul;Narnaul;Nārnaul; +city::1261848;Narasaraopet;Narasaraopet;na la sa la ao pei te;narasara'opet;narasara'opeta;narasaravupeta;نراساراو پیٹ;नरसरावुपेट;নারাসারাওপেত;ନାରସାରାଓପେଟ୍;నరసరావుపేట;纳拉萨拉奥佩特; +city::1261852;Narasapur;Narasapur;Narasapuram;Narsapur;na er sa pu er;naracapuram mantalam;narasapuram;narasapuram mandala;نراساپور، مغربی گوداوری ضلع;नरसापुरं मण्डल;ନାରସାପୁରମ୍;நரசாபுரம் மண்டலம்;నరసాపురం;纳尔萨普尔; +city::1261910;Nanjangud;Nanjangud;Nanjangud Town;Nanjangūd; +city::1261913;Nangloi Jat;Nangloi;Nangloi Jat;Nāngloi Jāt; +city::1261927;Nandyal;Nandial;Nandyal;Nandyala;Nandyāl;Nandyāla;nandyala;నంద్యాల; +city::1261931;Nandurbar;Nandurbar;Nandurbār; +city::1261977;Nanded;NDC;Nandair;Nanded;Nander;Nānded;Nānder;nadera;nan dai de;nan ded;nan theth;nandd;nandeda;nandedeu;nandedo;nandera;nandyd;nantet;nantetu;nndyd;Нандед;Нандер;ناندد;ناندید;ناندیڑ;ننديد;नांदेड;नांदेड़;नान्देड;ਨੰਦੇੜ;நாந்தேடு;நான்தேட்;นันเดด;นันเทฑ;ナーンデード;楠代德;난데드; +city::1262039;Namakkal;Namakkal; +city::1262067;Nalgonda;Nalgonda;na er ge en da;nalaganada;nalagonda;nalgonda;nalgonda-nagaram;naljwnda;nalkonta;Налгонда;نالجوندا;नलगोंडा;नल्गोण्डा-नगरम्;नल्गोन्डा;नालगोंडा;নলগনদা;ନାଲଗୋଣ୍ଡା;நல்கொண்டா;నల్గొండ;纳尔戈恩达; +city::1262092;Naksalbari;Nakalbari;Nakalbāri;Naksalbari;Naksalbāri;Naxalbari; +city::1262109;Najibabad;Najibabab;Najibabad;Najībābāb;Najībābād; +city::1262131;Naihati;Naihati;Naihāti; +city::1262180;Nagpur;Ajni;Gorad Nagpur;NAG;Nagpore;Nagpur;Nagpura;Nagpuras;Nankpour;Nágpur;Nāgpur;Nāgpura;na ge pu er;nagapur;nagapura;nagapuram;nageupuleu;naghbwr;nagpwr;nagupuru;nakpur;Ναγκπούρ;Горад Нагпур;Нагпур;Наґпур;נאגפור;ناغبور;ناگپور;नागपुर;नागपुरम्;नागपूर;নাগপুর;ਨਾਗਪੁਰ;નાગપુર;ନାଗପୁର;நாக்பூர்;నాగపూర్;ನಾಗಪುರ;നാഗ്‌പൂർ;ნაგპური;ナーグプル;那格浦尔;나그푸르; +city::1262200;Nagina;Nagina;Nagīna; +city::1262204;Nagercoil;Nagarkoil;Nagarkovil;Nagercoil;Nāgercoil;nakarkovil;நாகர்கோவில்; +city::1262209;Nagda;Nagda;Nagda-Dhar; +city::1262216;Nagaur;Nagaur;Nagaur Marwar;Nāgaur; +city::1262260;Negapatam;Nagapatinam;Nagapattinam;Nagappattinam;Negapainttam City;Negapatam;Negapattinam;Nāgappattinam;nagapattinamu;nagappattinamu;nakappattinam;நாகப்பட்டினம்;ナーガッパッティナム;ナーガパッティナム; +city::1262292;Nadiad;Hadiad;Nadiad;Nadiād;Naidad; +city::1262319;Nabha;Nabha;Nābha; +city::1262321;Mysore;MYQ;Mahisur;Mahisūr;Maisur;Maisuru;Maisúr;Maisūr;Maisūru;Majsor;Majsur;Majszur;Mysooru;Mysore;Mysuru;Mysūru;Májszúr;ma'isora;mahisura;mai suo er;maicur;maisoleu;maisoru;maisura;maisuru;mayswr;mhaisura;myswr;Майсур;Мајсор;مايسور;میسور;मैसूर;मैसूरु;म्हैसूर;মহীশূর;মাইসোর;ਮੈਸੂਰ;મૈસૂર;ମହୀଶୂର;மைசூர்;మైసూరు;ಮೈಸೂರು;മൈസൂരു;මයිසූර්;マイソール;迈索尔;마이소르; +city::1262330;Muzaffarpur;MZU;Muzaffarpur;Tirhoot; +city::1262332;Muzaffarnagar;Muzafarnagar;Muzaffarnagar;mu zha fa er na jia er;mujapharanagara;mujaphpharanagara;mujaphpharanagaram;mujhaphpharanagara;muzaffara nagara;muzaffarunagaru;mzfr ngr;mzfrngr;Музафарнагар;مظفر نگر;مظفرنگر;मुजफ्फरनगरम्;मुज़फ़्फ़र नगर;मुझफ्फरनगर;મુજફ્ફરનગર;ମୁଜଫରନଗର;ムザッファルナガル;穆扎法尔纳加尔; +city::1262395;Murwara;Katni;Murwara;Murwāra; +city::1262453;Muradnagar;Muradnagar;Muravnagar;Murādnagar; +city::1262463;Munnar;Munnar;munar;munara;munnar;munnara;mwnar;Муннар;مونار;मुन्नार;मुन्नार्;મુનાર;மூணார்;మున్నార్;മൂന്നാർ; +city::1262482;Monghyr;Manger;Monghyr;Munger;Мангер; +city::1262578;Muktsar;Muktsar; +city::1262634;Mughal Sarai;Moghal Sarai;Moghulserdai;Mughal Sarai;Mughal Sarāi; +city::1262678;Mubarakpur;Azamgarh;Mubarakpur;Mubārakpur; +city::1262710;Mothihari;Mothihari;Mothīhāri;Motihan;Motihari;Motīhāri;motihari;मोतिहारी; +city::1262771;Morena;Morena;Pech Morena;mo lei na;morena;muraina;mwryna;Морена;مورینا;मुरैना;मोरेना;মোরেনা;મુરૈના;ମୋରେନା;莫雷纳; +city::1262775;Morbi;Morbi;Morvi; +city::1262801;Moradabad;Moradabad;Morādābād;Muradabad;Murādābād;Морадабад; +city::1262852;Mokameh;Mokama;Mokamah;Mokameh;Mokāma; +city::1262951;Moga;Moga;Mogu;moga;moka;mwga;mwga pnjab;Мога;Могу;موگا;موگا، پنجاب;मोगा;ਮੋਗਾ;મોગા;ମୋଗା;மோகா; +city::1262958;Modasa;Modasa;Modassa;Modāsa; +city::1262995;Mirzapur;Mirzapur;Mirzapur-cum-Vindhyachal;Mirzarpur;Mirzāpur;Мирзапур; +city::1263012;Mirialguda;Mirialguda;Miriyalguda;Miriālgūda;Miryalguda; +city::1263101;Mettur;Mettur;Mettūr; +city::1263103;Mettupalayam;Mettupalaiyam;Mettupalayam-Coimbatore;Mettuppalaiyam;Mettuppālaiyam;Mettupālaiyam;mettupalayam koyambatturu;mettupalayama;mettuppalaiyam;मेट्टुपालयम;மேட்டுப்பாளையம்;మెట్టుపాలయం కోయంబత్తూరు; +city::1263214;Meerut;Meerut;Meerut City;Merath;Meratkh;Mirat;Miratas;Mirut;Mirát;meluteu;meratha;merato;mi la te;mirarr;mirat;mirat nagaram;mirata;miruta;myrwt;Меерут;Мератх;Мирут;Мірут;מיראט;ميروت;ميروټ;میروت;میرٹھ;मीरत;मेरठ;মীরুট;ਮੇਰਠ;મેરઠ;ମିରଟ;மீரட்;మీరట్ నగరం;മീററ്റ്;メーラト;密拉特;메루트; +city::1263220;Medinipur;Medinipur;Medinīpur;Midnapor;Midnapore;Midnapur;Миднапор; +city::1263247;Mayiladuthurai;Mayavaram;Mayaveram;Mayuram;Māyavaram;Māyuram;Māyūram;ma yi la du tu lai;mailadutturai;mayalanduthura'i;mayiladuthuraya;mayiladuturai;mayilatuturai;میئیلاڈوتھورائے;मयिलदुथुराय;मयीलाडूतुरै;মায়লান্দুথুরাই;மயிலாடுதுறை;మైలాదుత్తురై;马伊拉杜图赖; +city::1263275;Mawana;Mawana;Mawāna; +city::1263311;Mau;Mau;Mau Nath Bhanjan;Mau Nathbhanjan;Maunath Bhanjan;Maunāth Bhanjan;ma'u;ma'unatha bhanjana;mao na te ban zhan;mau;mavu;maw;myw;Мау;مئو;ماؤ;ماؤ ناتھ بھنجن;ماو;मऊ;मऊनाथ भंजन;मवु;मौ;মৌ;મઊ;毛纳特班詹; +city::1263364;Mathura;Madhura;Mandura;Mathura;Matkhura;Matura;Muttra;ma tu la;mathura;mato~ura;matula;matura;matwra;Матура;Матхура;Մաթհուրա;ماتورا;متھرا;मथुरा;মথুরা;મથુરા;ମଥୁରା;மதுரா;మథుర;ಮಥುರಾ;മഥുര;マトゥラー;马图拉;마투라; +city::1263427;Masaurhi Buzurg;Masaurhi;Masaurhi Buzurg;Masaurki; +city::1263494;Mormugao;Goa;Marmagao;Marmagoa;Marmugao;Mermugao;Mormugao;Porio;Мармагао; +city::1263504;Markapur;Markapur;Mārkāpur; +city::1263622;Mansa;Mansa;Mānsa; +city::1263659;Mannargudi;Mannargudi;Mannārgudi;ma na er gu di;mannaraguri;mannargudi;mannarkuti;मन्नर्गुडी;মান্নারগুড়ি;மன்னார்குடி;马纳尔古迪; +city::1263661;Mannarakkat;; +city::1263664;Manmad;Manmad;Manmād; +city::1263694;Manjeri;Manjeri;man jie li;manceri;manjeri;mnjyry;منجیری;मंजेरी;মঞ্জেরী;மஞ்சேரி;മഞ്ചേരി;曼杰里; +city::1263752;Mangrol;Mangral;Mangrol;Mungrol;Māngral;Māngrol;Mūngrol; +city::1263780;Mangalore;IXE;Kodial;Kudla;Maikala;Mangalooru;Mangalor;Mangalore;Mangaloro;Mangalur;Mangaluru;Mangalúru;Mangalūru;Manglapuram;Tulu Nadu;kodiyal;maingalura;mang kha l xr;mang-galloleu;mangalora;mangalore;mangalura;mangaluru;mangaroru;manghlwr;manglwr;mankalur;men ge luo er;mengalora;mnglwr;myangalora;Мангалор;Мангалур;Мангалуру;مانغلور;مانگلور;منگلور;मंगळूर;मङ्गलूरु;मङ्गळूरु;मैंगलूर;মাঙ্গালোর;ম্যাঙ্গালোর;મેંગલોર;ମାଙ୍ଗାଲୋରେ;மங்களூர்;మంగళూరు;ಕೊಡಿಯಾಲ್;ಮಂಗಳೂರು;മംഗളൂരു;มังคาลอร์;マンガロール;门格洛尔;망갈로르; +city::1263797;Mangalagiri;Mangalagiri;mang ge a la ji li;mangalagiri;mankalakiri;मंगलगिरी;মঙ্গলাগিরি;மங்களகிரி;మంగళగిరి;芒格阿拉吉里; +city::1263814;Mandya;Mand'ja;Mandya;man di ya;mandaya;mandya;mantiya;Мандья;مانڈیا;मंड्या;मांड्या;মান্দায়া;માંડ્યા;ମାନ୍ଦ୍ୟ;மண்டியா;మండ్య;ಮಂಡ್ಯ;曼迪亚; +city::1263833;Mandu;Mandu;Māndu; +city::1263834;Mandsaur;Mandasor;Mandsaur;man de shao er;mandasaura;mandosauru;mandsa'ur;mndswr;مندسور;मंदसौर;मन्दसौर;মান্দসৌর;મંદસૌર;ମାନ୍ଦ୍ସାଉର୍;マンドサウル;曼德绍尔; +city::1263936;Mancheral;Mancheral;Mancherial;Mancherāl;manciryala;మంచిర్యాల; +city::1264071;Malkapur;Malkapur;Malkāpur; +city::1264111;Maler Kotla;Maler Kotla;Māler Kotla; +city::1264115;Malegaon;Malegaon;Mālegaon;Малегаон; +city::1264138;Malaut;; +city::1264154;Malappuram;Malappuram;ma la pu nan;ma la pu pu la mu;malabwram;malappuram;malappurama;mlapwrm;Малаппурам;مالابورام;ملاپورم;मलप्पुरम;মালাপ্পুরম;மலப்புறம்;മലപ്പുറം;马拉普普拉姆;马拉浦南; +city::1264206;Makrana;Makrana;Makrāna; +city::1264292;Mainpuri;Mainpuri; +city::1264359;Mahoba;Mahoba;Mahobā; +city::1264407;Mahbubnagar;Mahboobnagar;Mahbubnagar;Mahbūbnagar; +city::1264414;Mahasamund;Mahasamund;Mahāsamund; +city::1264521;Madurai;IXM;Madura;Madurai;Maduraj;Madurajus;Maduráj;Mathurai;m thu ri;ma du lai;madhura;madhurai;mado~urai;madulai;madura'i;madurai;madwray;maturai;mdwray;mdwrayy;Мадурай;Мадурај;مادورائ;مادوراي;مادورای;مدورائی;مدورای;मदुरई;मदुराई;मदुरै;मधुरै;মদুরাই;ਮਦੁਰਈ;મદુરાઇ;ମଦୁରାଇ;மதுரை;మదురై;ಮಧುರೈ;മധുര;มทุไร;მადურაი;マドゥライ;马杜赖;마두라이; +city::1264527;Chennai;Cenaj;Cenajo;Cenajus;Cenay;Cennai;Cennaj;Chenaj;Chennai;Chennai - cennai;Chennai - சென்னை;Chennaj;Csennai;Gorad Chehnai;MAA;Maderaspatanum;Madras;Madrás;Tamizhagam;Tamulinadu;Tsennai;cen ni;cena'i;cenna'i;cennai;chen'nai;chenai;chennai;chnay;chnayy;chynay;chynayy;jin nai;qing nai;tshynay;znʼy;Çenay;Çennai;Ćennaj;Ĉenajo;Čenaj;Čenajus;Čennai;Čennaí;Τσεννάι;Горад Чэнаі;Ченай;Ченај;Ченнаи;Ченнай;Ченнаї;Չեննայ;צנאי;تشيناي;چنائی;چنای;چينای;چینائی;चेन्नई;चेन्नै;চেন্নাই;ਚੇਨਈ;ચેન્નઈ;ଚେନ୍ନାଇ;சென்னை;చెన్నై;ಚೆನ್ನೈ;ചെന്നൈ;චෙන්නායි;เจนไน;ချန်နိုင်းမြို့;ჩენაი;チェンナイ;清奈;金奈;첸나이; +city::1264543;Madhyamgram;Maddham Gram;Madhyamgram;ma di ya mu ge la mu;madhyagrama;madhyamagrama;مدھیامگرام;मध्यमग्राम;মধ্যগ্রাম;মধ্যমগ্রাম;马迪亚姆格拉姆; +city::1264551;Madhupur;Madhupur; +city::1264555;Madhubani;Madhubani;Madkhubani;Мадхубани; +city::1264570;Madhipura;Madhipura;Madhupura; +city::1264588;Madgaon;Madgaon;Margao;Margão;Маргао; +city::1264621;Madanapalle;Madanapalle;ma da na pa er lai;ma da na pa li;madanapalle;madanapalle mandala;madanapalli;matanappalli;mdnply;Маданапалле;مدنپلی;मदनपल्ली;मदनपल्ले मण्डल;মদনাপাল্লে;ମାଦାନାପାଲ୍ଲେ;மதனப்பள்ளி;మదనపల్లె;མ་ད་ནཱ་པལ་ལི།;馬達納帕利;马达纳帕尔莱; +city::1264637;Machilipatnam;Bandar;Kistna;Krishna;Machilipatnam;Machilīpatnam;Masulipatam;Masulipatao;Masulipatnam;Masulipatão;macilipatnam;మచిలీపట్నం; +city::1264647;Macherla;Macherla;Mācherla; +city::1264688;Lunglei;Lungleh;Lunglei;Lungliah;lnglyy;long ge lai yi;lun'gale'i;lungalai;lungle'i;lunle'i;lunley;lwngly;Лунглеи;لنگلئی;لونگلی;लुंग्लेइ;लुंग्लेई;लुङ्गलै;লুংলেই;લુન્ગલેઇ;ଲୁଙ୍ଗ୍ଲେଇ;லுங்லேய்;隆格莱伊; +city::1264728;Ludhiana;LUH;Ludhiana;Ludhijana;Ludhiāna;Ludkhijana;ludhi'ana;ludhiyana;lutiyana;rudiana;rudiyana;Лудхияна;लुधियाना;ਲੁਧਿਆਣਾ;லூதியானா;ルディアーナ;ルディヤーナー; +city::1264733;Lucknow;LKO;Lakhnau;Lakkhnau;Lakkhnau shaary;Laknaou;Laknau;Laknauo;Laknava;Laknaú;Laknaŭo;Lucknow;Lucknow City;Luknow;ilakno;lakh nea;lakhana'u;lakhanau;laknau;lakno;laksnau;lei ke nao;leokeunau;lkhnw;lknaw;rakunau;Λάκναου;Лакнау;Лакхнау;Лакхнау шаары;לאקנאו;لكهنؤ;لكهنو;لکناو;لکهنو;لکھنؤ;लखनऊ;लखनौ;লক্ষ্ণৌ;লখনৌ;ਲਖਨਊ;લખનૌ;ଲକ୍ଷ୍ନୌ;இலக்னோ;లక్నో;ಲಕ್ನೋ;ലഖ്‌നൗ;ลัคเนา;ლაქნაუ;ラクナウ;ラクナウー;勒克瑙;러크나우; +city::1264735;Luckeesarai;Lakhisarai;Luckeesarai;Luckesserai; +city::1264773;Loni;Lone;Loni;Лоне; +city::1264793;Lonavla;Lonauli;Lonavala;Lonavla; +city::1264839;Lohardaga;Lohardaga;Lohārdagā; +city::1265014;Latur;LTU;Latur;la du er;latr;latur;latura;latwr;rato~uru;Латур;لاتر;لاتور;लातूर;লাতুর;લાતૂર;ଲାତୁର୍;ラートゥール;拉杜爾; +city::1265157;Lalitpur;Lalitpur;lalipura;lalitapura;lalitapuram;lalitpur;lallispuleu;Лалитпур;للت پور، بھارت;ललितपुर;ललितपुरम्;ललितपूर;ললিতপুর;લલિતપુર;ଲାଲିପୁର;லலித்பூர்;랄릿푸르; +city::1265242;Lakhimpur;Lakhimpur;Lakhīmpur; +city::1265310;Laharpur;Laharpur;Lāharpur; +city::1265331;Ladnun;; +city::1265579;Kunnamkulam;Kunamkulam;Kunnamkulam;kun na mu ku lan;kunnamakulama;kunnamkulam;kunnankulam;kwnamkwlm;کونامکولم;कुन्नम्कुलम्;কুন্নামকুলম;କୁନ୍ନାମକୁଲାମ;குன்னங்குளம்;കുന്നംകുളം;昆纳姆库兰; +city::1265605;Kundla;; +city::1265683;Kumbakonam;Kumbakonam;ku mu ba ke na mu;kumbakonama;kumbhakeanam;kumbhakonam;kumbhakonama;kumpakonam;Кумбаконам;कुंभकोणम;कुम्बकोनाम;কুম্ভকোনম;கும்பகோணம்;కుంభకోణం;കുംഭകോണം;库姆巴科纳姆; +city::1265711;Kulti;Kulti;Култи; +city::1265767;Kukatpalli;Kukatpalli;Kukatpally;Kūkatpalli; +city::1265828;Kuchaman;Kuchaman;Kuchawan;Kuchāman;Kuchāwan; +city::1265859;Krishnanagar;Krishnagar;Krishnagar City;Krishnagiri;Krishnanagar;Krishnigar;ke li si he na na jia er;kirusnanakar;krsnanagara;Кришнанагар;Крішнанаґар;कृष्णनगर;कृष्णानगर;কৃষ্ণনগর;கிருஷ்ணாநகர்;克里斯赫纳纳加尔; +city::1265863;Krishnagiri;Krishnagiri;ke li si he na ji li;kiruttinakiri;krshnagry;krsnagiri;kurishunagiri;Кришнагири;کرشناگری;कृष्णगिरि;कृष्णगिरी;কৃষ্ণগিরি;કૃષ્ણાગિરિ;கிருட்டினகிரி;クリシュナギリ;克里斯赫纳吉里; +city::1265873;Kozhikode;CCJ;Calecute;Calicut;Calicutium;City of Spices;Kal'kutta;Kalicut;Kalikuto;Kojikode;Kolikod;Kozhikkot;Kozhikod;Kozhikode;Kozikkot;Kozikode;Kozsikode;Kozsíkóde;Kožikodė;Kóžikkót;kajahikode;kajhikada;kalikotu;kalykwt;karikatto;ke ze ke de;kealikkeat;kealikkeat jilla;kho chi khod;kojhikora;kojikodeu;kolikkot;kolikkota;kolikkotu;kolikod;kolikoda;kolikora;qwzyqwd;Калькутта;Кожикод;Кожикоде;Կոժիկոդե;קוזיקוד;كاليكوت;کالیکوت;کالیکٹ;کوزیکوڈ;ކާލީކޯޓު;कोलिक्कोट;कोळिकोड;कोष़िक्कोड;কজহিকোদে;কঝিকড;কোঝিকোড়;કોળિક્કોટ્;କୋଳିକୋଡ଼;கோழிக்கோடு;కోళికోడ్;കോഴിക്കോട്;കോഴിക്കോട് ജില്ല;കോഴിക്കോട്‌;โคชิโคด;カリカット;科泽科德;코지코드; +city::1265891;Kovilpatti;Koilpatti;Kovilpatti;ke wei er pa di;kobhilapatti;kobilapatti;kovilpatti;कोभिलपट्टी;কোবিলপাত্তি;கோவில்பட்டி;科维尔帕蒂; +city::1265911;Kottayam;Kotayam;Kottajam;Kottayam;kattayama;ke te ta ye mu;keattayam;kotayam;kottayam;kottayama;Коттаям;کوٹایم;कोट्टयम्;कोट्टायम;কত্তায়াম;কোট্টায়ম;કોટ્ટયમ;କୋତ୍ତାୟମ;கோட்டயம்;కోట్టాయం;കോട്ടയം;科特塔耶姆;코타얌; +city::1265938;Kottagudem;Kothagudem;Kottagudem;Kottagūdem; +city::1266049;Kota;KTU;Kota;Kotah;Kotah City;ke ta;kota;kotta;kwta;Кота;کوتا;کوٹا;कोटा;ਕੋਟਾ;કોટા;கோட்டா;コーター;科塔;코타; +city::1266073;Kosi;; +city::1266122;Korba;Korba;koraba jila;Корба;कोरबा जिला; +city::1266124;Koratla;Koratla; +city::1266154;Koppal;Kappal;Kopbal;Koppal;ke pu pa er;koppal;koppala;Коппал;कोप्पल;कोप्पळ;কোপ্পাল;કોપ્પલ;கொப்பள்;科普帕尔; +city::1266162;Kopargaon;Kopargaon; +city::1266179;Konnagar;Konnagar; +city::1266217;Konch;Konch;Kunch;Kūnch; +city::1266267;Kollegal;Collegal;Kollegal;Kollegalam;Kollegāl;Kollegālam; +city::1266285;Kolhapur;KLH;Kolhapur;Kolhāpur; +city::1266305;Kolar;Kolar;Kolār;Колар; +city::1266366;Kohima;Kohima;Kohīma;Kokhima;ke xi ma;keahima;kohima;kokima;Кохима;Кохіма;کوہیما;कोहिमा;কোহিমা;ਕੋਹਿਮਾ;કોહિમા;କୋହିମା;கோகிமா;കൊഹിമ;კოჰიმა;コヒマ;科希马;코히마; +city::1266416;Kodar;; +city::1266436;Koch Bihar;COH;Cooch Behar;Koch Bihar;Koch Bihār;Kuch Bihar;Kuch Bihār; +city::1266486;Kishangarh;KQH;Kishangarh;Kishangarkh;kil'ha harikrisanagarha;kisanagadha;kisanagara;kisanagarha;kʼishangarhi;Кишангарх;किशनगढ़;किशानगढ;কিষানগড়;ਕਿਲ੍ਹਾ ਹਰਿਕ੍ਰਿਸ਼ਨਗੜ੍ਹ;კიშანგარჰი; +city::1266489;Kishanganj;Kishanganj;Kishanganj Bazar; +city::1266509;Kiratpur;Kiratpur;Kīratpur; +city::1266607;Khurja;Khurja; +city::1266666;Khopoli;Khopoli;ke bo li;khopoli;کھوپولی;खोपोली;খোপোলি;科波利; +city::1266849;Khatauli;Khatauli; +city::1266928;Khargone;Khargon;Khargone; +city::1266945;Khardah;Khardah;Khardaha; +city::1266976;Kharagpur;Kharagpur;Khargpur;karakpur;ke lei ge bu er;kharagapura;khargapura;khragpwr;Харагпур;خراگپور;खरगपुर;खरगपूर;খড়্গপুর;ଖଡ଼ଗପୁର;கரக்பூர்;ಖರಗ್‌ಪುರ;克勒格布爾; +city::1267016;Khanna;Khanna;Ханна; +city::1267031;Khandwa;Kandva;Khandwa;kan de wa;khandava;khando'oya;khandoraa;khandva;Кандва;खंडवा;खण्डवा;खन्द्वा;खांडवा;খান্দোওয়া;খান্দোৱা;ખંડવા;坎德瓦; +city::1267076;Khammam;Khammam;Khammamett;Khammamette;Kkhammam;ka mu ma mu;kam'mam;kham'mam;kham'mama;khamam;Кхаммам;خامام;کھمم;खम्मम;खम्माम;খাম্মাম;ଖମ୍ମମ;கம்மம்;ఖమ్మం;卡姆马姆; +city::1267084;Khamgaon;Khamgaon;Khāmgaon; +city::1267090;Khambhat;Cambay;Kambay;Khambayat;Khambhat;Khambhāt;Khambāyat; +city::1267187;Khagaul;Khagaul; +city::1267195;Khadki;Khadki;Kirkee; +city::1267227;Keshod;IXK;Keshod;Kesod; +city::1267360;Kayankulam;Kayamkulam;Kayangulam;Kayankulam;Kāyankulam; +city::1267394;Kavali;Kavali;Kāvali; +city::1267439;Katras;Katras;Kātrās; +city::1267457;Katoya;Katoya;Katwa;Kātoya; +city::1267480;Katihar;Hafiz Saifganj;Katihar;Katihār; +city::1267579;Kashipur;Kashipur;Kāshīpur;ka si xi pu er;kashypwr;kasipura;Кашипур;Кашіпур;کاشی پور، اتراکھنڈ;کاشیپور;काशीपुर;काशीपूर;কাশিপুর;କାଶିପୁର;卡斯希普尔; +city::1267588;Kasganj;Kasganj;Kāsganj; +city::1267616;Kasaragod;Kasaragod;Kasaragod Fort;Kāsaragod; +city::1267635;Karwar;Karvar;Karwar;Kawar;Kárvár;Kārwār;ka er wa er;kara'oyara;kararaara;karavara;karavaram;karvar;karwar;krwar;Карвар;کاروار;کروار;कारवार;कारवारम्;কারওয়ার;কারৱার;કારવાર;କାର୍ୱାର୍;கார்வார்;ಕಾರವಾರ;卡尔瓦尔; +city::1267648;Karur;Karur;Karūr;ka lu er;kaluleu;karur;karura;karuru;karwr;krwr;Карур;كرور;کارور;करुर;करूर;करूरु;কারুর;કરુર;କାରୁର୍;கரூர்;ಕರೂರ್;കരൂർ;カルール;卡鲁尔;카루르; +city::1267708;Karnal;Karnal;Karnāl;Карнал; +city::1267755;Karimnagar;Karimnagar;Karīmnagar;karinnagar;కరీంనగర్; +city::1267758;Karimganj;Karimganj;Karīmganj;karimaganja;করিমগঞ্জ; +city::1267819;Karauli;Karauli;ka lao li;karauli;Караули;करौली;কারৌলি;કરૌલી;卡劳利; +city::1267853;Karanja;Karandzha;Karanja;Karanja Bibi;Kāranja;Kāranja Bibi;Каранджа; +city::1267885;Karaikkudi;Karaikkudi;Karaikudi;Kāraikkudi; +city::1267887;Karaikal;Karaikal;Karikal;Kārikāl;karaikal;kāraikāl; +city::1267904;Karad;Karad;Karād; +city::1267911;Kapurthala;Kapurtala;Kapurthala;Kapurthala Town;Kapūrthala; +city::1267995;Kanpur;Cawnpore;KNU;Kanpur;Kanpuras;Kanpwr;Kānpur;Kānpwr;kanapura;kanpur;kanpuru;Канпур;קאנפור;कानपुर;कानपूर;কানপুর;கான்பூர்;カーンプル; +city::1268011;Kannauj;Kanaudzh;Kanauj;Kannaudzh;Kannauj;Kânnauj;ka nao jie;kanauja;kanauji;kannauja;kannoci;kannoja;qnwj;Канаудж;Каннаудж;قنوج;कनौज;कन्नौज;কন্নৌজ;ਕੰਨੌਜ;કન્નોજ;கன்னோசி;კანაუჯი;カナウジ;卡瑙杰;카나우지; +city::1268015;Kannangad;Kanhangad;Kannangad;Kānnangād; +city::1268111;Kandukur;Kandukur;Kandukūr; +city::1268135;Kandi;Kandi;Kāndi; +city::1268159;Kanchipuram;Conjeeveram;Conjevaram;Conjeveram;Kancheepuram;Kanchipuram;Kancipuram;Kanjippuram;Kańćipuram;Kānchipuram;gan ji bu lei mu;kanchipuramu;kancipuram;kancipurama;Канчипурам;কাঞ্চিপুরম;காஞ்சிபுரம்;カーンチープラム;甘吉布勒姆; +city::1268189;Kankanhalli;Kanakapura;Kanakpura;Kankanhalli;Kānkānhalli; +city::1268205;Kamthi;Kamptee;Kamtha;Kamthi;Kāmtha;Kāmthi;kampti; +city::1268246;Cumbum;Kambam; +city::1268257;Kamarhati;Kamarhati;Kamarhatty;Kāmārhāti; +city::1268259;Kamareddi;Kamareddi;Kamareddipet;Kamaredi;Kāmāreddi; +city::1268293;Kalyani;Kalyani;ka li ya ni;kalyani;কল্যাণী;கல்யாணி;卡利亚尼; +city::1268295;Kalyan;Kal'jan;Kalyan;Kalyān;Кальян; +city::1268341;Kalna;Kalna;Kālna;Кална; +city::1268383;Kaliyaganj;Kaliaganj;Kaliyagan;Kaliyaganj;Kāliyāgan;Kāliyāganj; +city::1268561;Kakinada;Cocanada;Coconada;East Godavari;Godavari;Kakinada;Kākināda;kakinada;Какинада;కాకినాడ; +city::1268593;Kaithal;Kaithal;Kajtkhal;ka'ithala;kai ta er;kaithala;kythal;Кайтхал;كيتهال;کیتھل;कैथल;কাইথাল;ਕੈਥਲ;କୈଥଲ;凯塔尔; +city::1268601;Kairana;Kairana;Kairāna; +city::1268673;Kadiri;Kadiri;Кадири; +city::1268680;Kadi;Kadi; +city::1268707;Kadayanallur;Kadaiyanallur;Kadaiyanallūr;Kadayanallur; +city::1268715;Kanchrapara;Kachrapara;Kancharapara;Kanchrapara;Kāchrāpāra;Kānchrāpāra; +city::1268773;Junagadh;Junagad;Junagadh;Junagarh;Junaghur;Jūnāgadh; +city::1268775;Jumri Tilaiya;Jhumri Telaiya;Jhumri Tellaya;Jumri Tilaiya;Jumri Tilaiyā;Kodarma; +city::1268782;Jalandhar;Dzalandar;Dzalandhar;Dzhalandkhar;Dzsalandhar;Dzsálandhár;Dźalandhar;Galangar;Jalandar;Jalandhar;Jullundur;Jullundur City;QJU;gu lang da er;jaladhara;jalandhar;jalandhara;jalandhari;jalantar;jallandaleu;jarandaru;jlndr;Ĝalanĝar;Џаландар;Джаландхар;جالندھر;جلندر;جەلەندەر;जलंधर;जलन्धर;জলন্ধর;ਜਲੰਧਰ;જલંધર;ଜଳନ୍ଧର;ஜலந்தர்;ಜಲಂಧರ್;ജലന്ധർ;ჯალანდჰარი;ジャランダル;賈朗達爾;잘란다르; +city::1268820;Jorhat;Dzhorkhat;JRH;Jorhat;Jorhāt;Sibsagar;Sibságar;Джорхат; +city::1268865;Jodhpur;Codpur;Dzhodkhpur;Dzodhpur;Dzodhpura;Dzodhpuras;Dzodpur;Dzsodhpur;Dzsódhpur;Dźodhpur;Džodhpura;Džodhpuras;Džódpur;Godhpur;JDH;Jodhpur;Jodhpur City;Tzontchpour;cotpur;gwdpwr;jiao te bu er;jodeupuleu;jodhapura;jodhapuram;jodopuru;jwdapwr;jwdbwr;jwdpwr;jwdھpwr;yodapura;yodhapura;Ĝodhpur;Τζοντχπούρ;Џодпур;Джодхпур;גודפור;جوداپور;جودبور;جودپور;جودھ پور;جودھپور;जोधपुर;जोधपुरम्;जोधपूर;যোদপুর;যোধপুর;ਜੋਧਪੁਰ;જોધપુર;ଯୋଧପୁର;சோத்பூர்;ჯოდპური;ジョドプル;ジョードプル;焦特布尔;조드푸르; +city::1268907;Jind;Jind;Jīnd; +city::1268936;Jhunjhunun;Jhunjhunu;Jhunjhunun;Jhunjhunūn;Jhūnjhunu; +city::1268977;Jharsugra;Jharsaguda;Jharsguda;Jharsogra;Jharsugra;Jharsuguda;Jharsugude;Jhārsugra;Jhārsuguda; +city::1268988;Jharia;Jharia;gu li ya;jhariya;झरिया;贾里亚; +city::1268990;Jhargram;Jharagram;Jhargram;Jhāragrām;Jhārgrām; +city::1269006;Jhansi;Jhansi;Jhānsi; +city::1269027;Jhalawar;Brijnagar;Jhalawar;Jhālāwār; +city::1269065;Jetpur;Jetpur; +city::1269092;Jeypore;Jaypur;Jeyepore;Jeypore;PYB; +city::1269135;Jaunpur;Caunpur;Dzhaunpur;Jaunpur;Jawnpur;jaunapura;jaunapuram;jaunpuru;jauyanapura;jwn pwr;jwnfwr;jwnpwr;jwnpwr atrprdysh;qiao en pu er;Джаунпур;جون پور;جونفور;جونپور;جونپور، اترپردیش;जौनपुर;जौनपुरम्;জৌয়ানপুর;જૌનપુર;ジャウンプル;乔恩普尔; +city::1269154;Jatani;Jatani;Jatni;Jātni; +city::1269217;Jaora;Jaora;Jaorā; +city::1269247;Jangipur;; +city::1269280;Jamuria;Jamuria;Jaykayanagar;Jaykaynagar;Jāmuria; +city::1269291;Jamui;Jamui;Jamūi;Jamūī; +city::1269300;Jamshedpur;Cemsidpur;Cemşidpur;Dzamshedpur;Dzhamshedpur;Dzsamsedpur;Gamsedpur;IXW;Jamshedpur;Jarnshedpur;Tatanagar;chamseth pu ra;gu mu xie de bu er;jamasedapura;jamcetpur;jamsedapura;jamsyedeupuleu;jamushedopuru;jia mu xie de bu er;jmshdpwr;jmshyd pwr;jmshydbwr;jmshydpwr;Ĝamŝedpur;Џамшедпур;Джамшедпур;جمشدپور;جمشيد پور;جمشيدبور;جمشیدپور;जमशेदपुर;जमशेदपूर;जम्शेदपुर;জমশেদপুর;জামশেদপুর;જમશેદપુર;ଜାମସେଦପୁର;ஜம்சேத்பூர்;జంషెడ్‌పూర్;ಜಮ್ಶೆಡ್‌ಪುರ;ชัมเศทปุระ;ჯამშედპური;ジャムシェドプル;ジャムシェードプル;賈姆謝德布爾;贾姆谢德布尔;잠셰드푸르; +city::1269317;Jamnagar;Dzhamnagarom;JGA;Jamnagar;Jamnogar;Jāmnagar;Navanagar;Navangar;Nawanagar;Nowanagar;Nowanuggur;Джамнагаром; +city::1269321;Jammu;Dzammu;Dzamu;Dzhammu;Džammú;Džamu;Gamu;Gorad Dzhamu;IXJ;Jammu;Jammu City;cam'mu;gu mu mu;jam'mu;jammu;jamu;janmu;Ĝamu;Џаму;Горад Джаму;Джамму;جموں;जम्मू;জম্মু;ਜੰਮੂ;சம்மு;ജമ്മു;ジャンムー;贾姆穆;잠무; +city::1269328;Jamkhandi;Jamkhandi; +city::1269374;Jamalpur;Jamalpur;Jamālpur; +city::1269388;Jalpaiguri;Jalpaiguri;Jalpāiguri;Paiguri; +city::1269395;Jalna;Jalna;Jālna; +city::1269407;Jalgaon;Dzalgaon;Dzhalgaon;Dzhalgaone;Galgaon;Jalgaon;Jālgaon;jalagamo;jalagamva;jalaganva;jalagava;jalgaw;jalgawn;jalkav;jia er gang;jlgawn;Ĝalgaon;Џалгаон;Джалгаон;Джалгаоне;جالگاو;جالگاون;جلگاؤن;جلگاؤں;जलगाँव;जलगाव;जळगाव;জালগাঁও;જલગાંવ;ஜள்காவ்;加爾岡; +city::1269422;Jalaun;Jalaun;Jālaun; +city::1269507;Jaisalmer;Dzaisalmer;Dzhajsalmer;Dzsaiszalmer;Džaisalmér;Gorad Dzhajsalmer;JSA;Jailsamer;Jaisalmer;Tzaisalmer;gu sha mei er;jaisalamera;jaisalmeleu;jaisarumeru;jayasalamera;jesalamera;jeycalmer;jyslmyr;Τζαϊσαλμέρ;Горад Джайсалмер;Джайсалмер;جیسلمیر;जेसलमेर;जैसलमेर;জয়সলমের;জয়সালমের;ਜੈਸਲਮੇਰ;જેસલમેર;ଜୈସଲମେର;ஜெய்சல்மேர்;ജയ്സാൽമീർ;ジャイサルメール;贾沙梅尔;자이살메르; +city::1269515;Jaipur;Caypur;Dzaipur;Dzaipuras;Dzajpur;Dzajpura;Dzhajpur;Dzsaipur;Dźajpur;Džaipur;Džaipuras;Džajpur;Džajpura;Gajpuro;Gorad Dzhajpur;Iaipura;JAI;Jainagar;Jaipur;Jaipur City;Jayapur;Jaypur;Jeypore;Tzaipour;Zhajpur;ceyppur;chay pu ra;gʼypwr;jaipuleu;jaipura;jaipuru;jayapura;jayapuram;jaybwr;jaypwr;jypwr;zhai pu er;zhai pu ya;Ĝajpuro;Τζαϊπούρ;Џајпур;Горад Джайпур;Джайпур;Жайпур;Ջայպուր;גאיפור;جايبور;جایپور;جيپور;جے پور;जयपुर;जयपुरम्;जयपूर;জয়পুর;জয়পুৰ;ਜੈਪੁਰ;જયપુર;ଜୟପୁର;செய்ப்பூர்;ജയ്‌പൂർ;ชัยปุระ;ჯაიპური;ジャイプル;齋浦爾;齋葡亞;자이푸르; +city::1269551;Jahangirabad;; +city::1269557;Jahanabad;; +city::1269562;Jagtial;Jagtial;Jagtiāl;jagityala;జగిత్యాల; +city::1269564;Jagraon;Jagraon;gu ge la ao en;jagara'um;jagararana;jagra'om;jagravam;جگروں;जग्रावं;জাগরাৱন;ਜਗਰਾਉਂ;ଜାଗ୍ରାଓଁ;贾格拉奥恩; +city::1269578;Jagdalpur;Dzhagdalpur;JGB;Jagdalpur;gu ge da er pu er;jagadalapura;jagadalpura;jgdlpwr;Джагдалпур;جگدلپور;जगदलपुर;जगदलपूर;जगदल्पुर;জগদলপুর;જગદાલપુર;ଜଗଦଲପୁର;జగదల్‌పుర్;贾格达尔普尔; +city::1269605;Jagadhri;Jagadhri;Jagādhri; +city::1269633;Jabalpur;Dzabalpur;Dzabalpuras;Dzhabalpur;Dzsabalpur;Dżabalpur;Džabalpur;Džabalpuras;Gabalpur;JLR;Jabalpur;Jubbulpore;gu ba er pu er;jabalapura;jabalapuram;jabalpuleu;jabalpur;jabarupuru;japalpur;jbl pwr;jblbwr;Ĝabalpur;Џабалпур;Джабалпур;Ջաբալպուր;جبال‌پور;جبل پور;جبلبور;जबलपुर;जबलपुरम्;জবলপুর;જબલપુર;ଜାବାଲପୁର;ஜபல்பூர்;జబల్పూర్;ജബൽ‌പൂർ;ჯაბალპური;ジャバルプル;贾巴尔普尔;자발푸르; +city::1269653;Itarsi;Itarsi;Itārsi; +city::1269665;Islampur;Islampur;Islāmpur; +city::1269723;Ingraj Bazar;English Bazar;English Bāzār;Ingraj Bazar;Ingrāj Bāzār; +city::1269743;Indore;IDR;Indaur;Indor;Indore;Indore Madhya Pradesh;Induras;andwr;ayndwr;idaura;indaura;indoleu;indor;indora;indori;indoru;indura;intor;yin duo er;Індаур;Индаур;Индор;إندور;اندور;ایندور;इंदूर;इन्दोर;इन्दौर;ইন্দোর;ਇੰਦੌਰ;ઈંદોર;ଇନ୍ଦୋର;இந்தோர்;ఇండోర్;ಇಂದೋರ್;ഇൻ‌ഡോർ;ინდორი;インドール;印多尔;인도르; +city::1269771;Imphal;IMF;Imphal;Imphāl;Impkhal;impal;imphala;inparu;Импхал;इंफाल;इम्फाल;ইম্ফল;இம்பால்;インパール; +city::1269784;Ilkal;Ilkal; +city::1269819;Idappadi;Edapadi;Edappadi;Idappadi;Idāppādi; +city::1269834;Ichalkaranji;Icalkarandzi;Ichalkaranji;aychalkaranjy;aychl krnjy;aychlkyrnjy;icalakaranaji;icalakaranji;icalkaranji;yi qie er ge lun ji;Ицалкаранџи;ایچالکارانجی;ایچل کرنجی;ایچلکیرنجی;इचलकरंजी;ईचल्करंजी;ইচালকরনজি;ଇଚାଲକରଞ୍ଜି;伊切尔格伦吉; +city::1269843;Hyderabad;Bhaganagar;HYD;Haidarabadas;Haiderabad;Hajdarabad;Hajdarábád;Hyderabad;Hyderabad-Deccan;Hyderābād;Khajdarabad;Khajderabad;hai de la ba;haidarabada;haidarabadu;haiderabado;haitarapat;hayadarabada ema. karporesana;hayadrabada;hydr abad;hydr abad dkn;hydrabad;Хайдарабад;Хајдерабад;حیدر آباد;حیدر آباد دکن;حیدرآباد;हैदराबाद;হায়দরাবাদ এম. কর্পোরেশন;হায়দ্রাবাদ;ஹைதராபாத்;హైదరాబాదు;ハイデラバード;海得拉巴; +city::1269910;Hugli;Hooghly;Hooghly-Chinsura;Hooghly-Chinsurah;Hugli;Khugli;Хугли; +city::1269920;Hubli;HBX;Hubballi;Hubli;Hubli City;hubballi;ಹುಬ್ಬಳ್ಳಿ; +city::1269934;Hosur;Hosur;Hosūr;Oossoor; +city::1269935;Hospet;Hosapete;Hospet;Hoszpet;Khospet;hosapeta;hosapete;hospeta;hospete;huo si pei te;hwspt;Хоспет;هوسپت;ہوسپٹ;होसपेटे;होस्पेट;হোসপেত;ಹೊಸಪೇಟೆ;ಹೊಸ್ಪೇಟೆ;霍斯佩特; +city::1269939;Hoshangabad;Hoshangabad;Hoshangābād; +city::1270022;Hisar;HSS;Hisar;Hissar;Hissār;Hisār;Khisar;hisara;hsar;xi sa er;Хисар;حصار;ہسار;ہیسار;हिसार;હિસાર;ହିସାର;希萨尔; +city::1270032;Hiriyur;Hiriyur;Hiriyūr; +city::1270072;Hingoli;Hingoli;Khingoli;hingoli;xing ge ao li;Хинголи;ہنگولی;हिंगोली;हिङ्गोली;হিঙ্গোলি;હિંગોલી;兴格奥利; +city::1270077;Hinganghat;Hinganghat;Hinganghāt; +city::1270079;Hindupur;Hindupur; +city::1270090;Hindaun;Hindaun;Hindaun City;hinda'una;hindauna;hindauna siti;hindaunanagaram;hindona;xin dao en;हिंडोन;हिण्डौन;हिण्डौन सिटी;हिण्डौननगरम्;হিন্দাউন;欣道恩; +city::1270099;Himatnagar;Ahmadnagar;Ahmednagar;Himatnagar; +city::1270164;Hazaribag;Hazaribag;Hazaribagh;Hazarybaugh;Hazāribāgh;Hazārībāg;Khazaribag;hajaribaga;Хазарибаг;हजारीबाग; +city::1270171;Haveri;Haveri;Hāveri; +city::1270216;Hathras;Hathras;Hāthras; +city::1270239;Hassan;Hassan;Khasan;ha sang;hasana;Хасан;ಹಾಸನ;哈桑; +city::1270251;Hasanpur;Hasanpur; +city::1270349;Harihar;Harihar;ha li ha er;harihara;हरिहर;হরিহর;ಹರಿಹರ;哈里哈尔; +city::1270351;Haridwar;Hardwar;Hardwār;Haridvar;Haridvár;Haridwar;Haridwār;Khardvar;Kharidvar;arittuvar;haraduraara;haradvara;haridowaru;haridu'ara;haridvar;haridvara;haridvaram;he er de wa er;Хардвар;Харидвар;Харідвар;ہریدوار;हरिद्वार;हरिद्वारम्;হরদুৱার;ਹਰਿਦੁਆਰ;હરદ્વાર;ହରିଦ୍ଵାର;அரித்துவார்;హరిద్వార్;ಹರಿದ್ವಾರ;ഹരിദ്വാർ;ハリドワール;赫尔德瓦尔; +city::1270370;Hardoi;Hardoi;Hardoī; +city::1270375;Harda Khas;Harda;Harda Khas;Harda Khās; +city::1270393;Hapur;Hapur;Hāpur; +city::1270396;Haora;Haora;Haura;Hawrah;Howrah;Hāora;ha'ora;haura;হাওড়া;ハウラー;ハーウラー; +city::1270407;Hanumangarh;Hanumangarh;Hanumāngarh;Sadulgarh; +city::1270417;Hansi;Hansi;Hānsi;Khansi;Ханси; +city::1270484;Halisahar;Halisahar;Halishahar;Hālīsahar; +city::1270498;Haldwani;Haldwani;Haldwani-cum-Kathgodam;Haldwāni;Khaldvani;ha er de wa ni-qiu mu-ka te ge da mu;haladuraani-tilakara-kathagodama;haladwani;haldvani;haldvani-va-kathagodama;Халдвани;Халдвані;ہلدوانی;हल्द्वानी;हल्द्वानी-व-काठगोदाम;হলদুৱানি-তিলকরা-কাঠগোদাম;ହାଲଦ୍ୱାନି;哈尔德瓦尼-丘姆-卡特戈达姆; +city::1270525;Hajipur;Hajipur;Hājīpur;Khadzhipur;Хаджипур; +city::1270568;Habra;Habra;Hābra; +city::1270583;Gwalior;GWL;Gvalior;Gwalior;Гвалиор; +city::1270642;Gurgaon;Gurgaon;Gurgáon;gu er gang;gudaganva;guleugaon;guraga'om;guragamo;guraganv;guraganva;guragavam;gurugaon;gwrgan;gwrgaw;jwrjawn;khur khean;kurkan;Гургаон;Ґурґаон;جورجاون;گرگاؤں;گورگان;گورگاو;گڑگاؤں;गुडगांव;गुरगांव;গুরগাঁও;ਗੁੜਗਾਵਾਂ;ଗୁଡ଼ଗାଓଁ;குர்கான்;ಗುರಗಾಂವ್;ഗുഡ്‌ഗാവ്;คุร์เคาน์;グルガーオン;古爾岡;구르가온; +city::1270668;Guntur;Guntur;Guntura;Guntūr;guntur;gunturu;Гунтура;గుంటూరు;గుంటూర్; +city::1270670;Guntakal Junction;Guntakai;Guntakal;Guntakal Junction;Guntakul;gantalaka;gong ta ka er;guntakala;guntakallu;kuntakkal;गंतलक;गुंटकल;গুন্তকাল;குண்டக்கல்;గుంతకల్లు;贡塔卡尔; +city::1270711;Guna;GUX;Guna; +city::1270752;Gulbarga;Gul'barga;Gulbarga;Gulburga;Kalaburgi;Kalburgi;Kulbarga;glbrgh;gu er bo jia;gulabarga;gulbaleuga;gulbarga;gurubaruga;kalaburagi;kalaburgi;klbrkt;kulparka;Гулбарга;Гульбарга;كلبركة;گلبرگه;گلبرگہ;गुलबर्ग;गुलबर्गा;गुल्बर्गा;গুলবার্গ;ગુલબર્ગ;குல்பர்கா;గుల్బర్గా;ಕಲಬುರಗಿ;ಕಾಲಬೂರ್ಗಿ;ഗുൽബർഗ;გულბარგა;グルバルガ;古尔伯加;굴바르가; +city::1270791;Gudur;Gudur;Gūdūr; +city::1270800;Gudiyatham;; +city::1270801;Gudivada;Gudivada;Gudivāda; +city::1270845;Goyerkata;; +city::1270896;Gosaba;Gosaba;Gosaha;Gosāba; +city::1270926;Gorakhpur;Gorakhpur;Gorakpura;Горакпура; +city::1270927;Gorakhpur;GOP;Gorakhpur;Gorakkhpur;Gorakpur;Gorakpura;Goruckpur;Korakhpur;ge lei ke bu er;golakeupuleu;gorakhapura;gorakhapuram;gorakupuru;gwrakpwr;kho rakh pu ra;korakpur;Горакпур;Горакпура;Горакхпур;گوراکپور;گورکھپور;गोरखपुर;गोरखपुरम्;गोरखपूर;গোরখপুর;ਗੋਰਖਪੁਰ;ગોરખપુર;கோரக்பூர்;ಗೋರಖಪುರ;ഗോരഖ്പൂർ;โคราฆปุระ;ゴーラクプル;戈勒克布爾;고라크푸르; +city::1270947;Gobichettipalayam;Gobichettipalaiyam;Gobichettipalayam;Gobichettipalyam;Gopichettipalaiyam;Gopichettipālaiyam;ge bi qie di pa la ye mu;gobicettipalayama;kopiccettippalaiyam;گوبیچیٹیپلیام;गोबिचेट्टिपलयम;গোবিচেত্তিপালায়াম;ଗୋବିଚେତ୍ତିପାଲୟମ;கோபிச்செட்டிப்பாளையம்;戈比切蒂帕拉耶姆; +city::1270965;Gopalganj;Gopalganj;Gopālganj; +city::1270990;Gondia;Gondia;Gondija;Gondiya;Gondiā;gonadiya;gondiya;gondiya jila;gondiya jille;gong di ye;Гондия;गोंदिया;गोंदिया जिला;गोण्डिया;গোনদিয়া;ಗೊಂದಿಯಾ ಜಿಲ್ಲೆ;贡迪耶; +city::1270994;Gondal;Gondal; +city::1270996;Gonda City;Gonda;Gonda City;Gonda Oudh;Gondā City;Гонда; +city::1271049;Gola Gokarannath;Gola;Gola Gokarannath;Gola Gokarannāth; +city::1271067;Gokak;Gokak;Gokāk;Гокак; +city::1271079;Gohana;Gohana;Gohāna; +city::1271083;Gohadi;Gohad;Gohadi; +city::1271107;Godhra;Godhr;Godhra;Godkhra;Godkhre;ge de la;godhara;godhra;Годхра;Годхре;گودھرا;गोधरा;গোধরা;ગોધરા;ଗୋଧ୍ରା;戈德拉; +city::1271151;Goalpara;Goalpara;Goālpāra; +city::1271175;Giridih;Giridih;Girīdīh;girid'iha;girid'iha jila;giridi;gryڈyہ;گریڈیہ;गिरीडीह;गिरीडीह जिला;গিরিডি; +city::1271306;Ghazipur;Ghazipur;Ghazīpur;Ghāzīpur; +city::1271308;Ghaziabad;Gaziabad;Ghaziabad;Ghazibad;Ghāziābād;Газиабад; +city::1271346;Ghatal;Ghatal;Ghātāl; +city::1271439;Gaya;GAY;Gaya; +city::1271476;Guwahati;GAU;Gauhati;Gauháti;Gauhāti;Gaukhati;Guvahati;Guvahatis;Guvakhati;Guwahati;gauhati;gu wa ha ti;gu'ahati;guhati;guraahati;guvahati;guvahatti;guwahati;guyahati;gwahty;gwaty;gwwaہaty;jwahaty;kuvahatti;kuvakatti;Гаухати;Гувахати;Ґувахаті;جواهاتي;گواتی;گواهتي;گوواہاتی;گوہاٹی;गुवहाटी;गुवाहाटी;গুয়াহাটি;গুৱাহাটি;গুৱাহাটী;ਗੁਹਾਟੀ;ગુવાહાટી;ଗୁଆହାଟୀ;குவகாத்தி;குவஹாத்தி;గౌహతి;ಗುವಾಹಾಟಿ;ഗുവഹാത്തി;グワハティ;グワーハーティー;古瓦哈提;구와하티; +city::1271644;Gangoh;Gangoh; +city::1271662;Gangawati;Gangavati;Gangawati;Gangāwati; +city::1271670;Gangarampur;Gangarampur;Gangārāmpur; +city::1271675;Gangapur;; +city::1271685;Ganganagar;Ganganagar;Gangānagar;Sri Ganganagar;Sri Gangānagar;Sriganga Najar; +city::1271715;Ghandinagar;Gandhinagar;Gandinagar;Ghandinagar;Gāndhīnagar;gandhinagara;gandhinagaram;gandinagaru;ganjinagaru;kantinakar;Гандинагар;गान्धीनगरम्;গান্ধিনগর;গান্ধীনগর;ગાંધીનગર;காந்திநகர்;ガンジナガル;ガンディーナガル; +city::1271717;Gandhidham;Gandhidham;Gandi Dham;Gāndhīdhām; +city::1271780;Gajraula;Gajraula; +city::1271819;Gadwal;Gadwal;Gadwāl; +city::1271850;Gadag;Gadag; +city::1271883;Ferozepore;Ferozepore;Ferozepur;Feruzpur;Firozpur;Fērūzpur;Fīrozpur; +city::1271885;Firozabad;Firozabad;Fīrozābād; +city::1271891;Fazilka;Fazika;Fazilka;Fāzilka; +city::1271910;Fatehpur;; +city::1271912;Fatehpur;Fatehpur;Fatehpur City;Fatekhpur;Фатехпур; +city::1271934;Fatehabad;Fatahabad;Fatehabad;Fatehābād; +city::1271942;Farrukhabad;Farrukhabad;Farrukhābād; +city::1271947;Faridpur;Bharatpur;Faridpur;Farīdpur; +city::1271949;Faridkot;Faridkot;Farīdkot; +city::1271951;Faridabad;Faridabad;Faridabadas;Farīdābād;QNF;faridabado;pharidabada;Фаридабад;फरीदाबाद;ファリダバード;ファリーダーバード; +city::1271976;Fyzabad;Faizabad;Faizābād;Fajzabad;Fyzabad;Fyzābād;Файзабад; +city::1271987;Etawah;Etawah;Etāwah; +city::1272013;Erode;Brod;Erode;Irodu;Periyar;Periyār;ai luo de;elodeu;eroda;erode;iread;iroda;irodo~u;irotu;Брод;Ироду;اروڑ;इरोड;ईरोड;एरोड;এরোডে;ઇરોડ;ଇରୋଡ;ஈரோடு;ഈറോഡ്;イーロードゥ;埃罗德;에로드; +city::1272045;Emmiganur;Emmiganur;Emmiganuru;Emmiganūr;Emmiganūru;Yemmiganur; +city::1272051;Ellore;Ellore;Eluru;Elūru;West Godavari;West Godāvari; +city::1272175;Durgapur;Durgapur;RDP;do~urugapuru;drgapwr;du er jia bu er;duleugapuleu;durgapura;duർgapuർ pascima bangaൾ;dwrgapwr;turkapur;turkapur merku vankalam;Дургапур;درگاپور;دورگاپور;दुर्गापुर;दुर्गापूर;দুর্গাপুর;துர்காபூர்;துர்காபூர் மேற்கு வங்காளம்;ദുർഗാപൂർ;ദുർഗാപൂർ പശ്ചിമ ബംഗാൾ;ドゥルガプル;杜爾加布爾;두르가푸르; +city::1272181;Durg;Drug;Durg;Durga;drg;du er ge;durga;dwrg;dwrj;Дург;درگ;دورج;دورگ;ڈرگ;दुर्ग;দুর্গ;ଦୁର୍ଗ;杜爾格; +city::1272225;Dumraon;Dumraon; +city::1272243;Dam Dam;Dam Dam;Dum Dum; +city::1272423;Dombivli;Dombivali; +city::1272473;Dod Ballapur;Dod Ballapur;Dod Ballāpur; +city::1272513;Disa;Deesa;Dis;Disa;Dīsa;Дис; +city::1272525;Diphu;Diphn;Diphu; +city::1272543;Dindigul;Dhundgal;Dindigul;Dindukkal;Dundigal;dindigul;dindigula;dindukkala;ding di gu er;dyndygwl;tindo~ukkaru;tindo~ukkaru xian;tintukkal;Диндигул;Диндуккал;دیندیگول;दिंडुक्कल;दिण्डुक्कल;दिन्दिगुल;দিন্দিগুল;திண்டுக்கல்;ദിണ്ടിഗൽ;ティンドゥッカル;ティンドゥッカル県;丁迪古爾;딘디굴; +city::1272552;Dimapur;DMU;Dampur;Dimapur;Dimāpur;Димапур; +city::1272606;Diglur;Deglur;Diglur;Dīglūr; +city::1272648;Dibrugarh;DIB;Dibrugarh;Dibrugarkh;Lakhinpur;di bu lu jia er;dibraugara;dibrgara;dibrugadh;dibrugadha;dibrugara;dibrugara-nagaram;dibrugarha;dybrwjarh;tiprukar;Дибругарх;ديبروجاره;ڈبروگڑھ;डिब्रुगर-नगरम्;डिब्रूगढ़;दिब्रुगढ;ডিব্রুগড়;ডিব্ৰুগড়;દિબ્રુગઢ;ଦିବୃଗଡ଼;திப்ருகார்;ദിബ്രുഗഢ്;迪布鲁加尔; +city::1272670;Dhuri;Dhuri;Dhūri; +city::1272689;Dhulian;Dhulian;Dhuliān; +city::1272691;Dhulia;Dhule;Dhulia;Dhūlia;Dkhule;Dule;dhule;dwlh;tu lai;Дуле;Дхуле;دوله;دھول;धुले;धुळे;ধুলে;圖萊; +city::1272694;Dhuburi;Dhubri;Dhuburi;Dubri;dhubari;धुबरी; +city::1272701;Dhrangadhra;Dhrangadhra;Dhrangadra;Dhrāngadhra;Dhrāngadra; +city::1272720;Dhoraji;Dhorail;Dhoraji;Dhorāji; +city::1272733;Dholka;Dholka; +city::1272780;Dhenkanal;Dhenkanal;Dhenkānāl; +city::1272805;Dhaulpur;Dhaulpur;Dholpur; +city::1272842;Dharmavaram;Dharmavaram; +city::1272847;Dharmapuri;Dharmapuri;Dkharmapuri;da er ma pu li;darumapuri;dharmapuri;tarmapuri;Дхармапури;धर्मपुरी;ধর্মাপুরি;தர்மபுரி;ダルマプリ;达尔马普里; +city::1272873;Dharapuram;Dharapuram;Dhārāpuram;da la pu la mu;dharapurama;tarapuram;धारापुरम;ধারাপুরম;தாராபுரம்;达拉普拉姆; +city::1272892;Dhar;Dhar;Dhār;Dkhar;Дхар; +city::1272979;Dhanbad;DBD;Dhanabad;Dhanbad;Dhanbaid;Dhanbād;Dkhanbad;danbado;dhanabada;Дханбад;धनबाद;ধানাবাদ;ダンバード; +city::1272997;Dhamtari;Dhamtari; +city::1273066;Dewas;Devas;Dewas;Dewās;de wa si;de'oyasa;deraasa;devasa;dewasu;dwas;dywas;Девас;دواس;دیواس;देवस;देवास;দেওয়াস;দেৱাস;દેવાસ;デーワース;德瓦斯; +city::1273193;Deoria;Deoria;Deorija;de ao li ya;de'uriya;devariya;dywrya;dywrya atrprdysh;Деория;دیوریا;دیوریا، اترپردیش;देवरिया;দেউরিয়া;德奥里亚; +city::1273232;Deolali;Deolali;Deolāli; +city::1273265;Deoband;Deoband;Deobande;Деобанде; +city::1273294;Delhi;DEL;Daehli;Dehli;Dehlī;Delchi;Delhi;Delhio;Delhí;Delhî;Deli;Delis;Delkhi;Dellium;Delí;Dilhi;Dilli;Dillí;Dillī;Dähli;Déhli;Faritani Delhi;Gorad Dehli;New Delhi;Old Delhi;Sahdzahanabad;Stare Deli;de li;dehali;deli;delli;deri;dhilli;dhly;dhly qdym;dil'hi;dili;dilli;dlhy;dly;dlھy;dylhy;na'i dilli;prany dہly;tilli;Šáhdžahanabád;Δελχί;Горад Дэлі;Дели;Делхи;Делі;Деҳли;Старе Делі;Դելի;דלהי;דעלהי;دلهي;دلھی;دلی;دهلي;دهلی قدیم;ديلهى;دہلی;دێھلی;پرانی دہلی;ډېلي;ދިއްލީ;दिल्ली;देहली;नई दिल्ली;দিল্লি;দিল্লী;ਦਿੱਲੀ;દિલ્હી;ଦିଲ୍ଲୀ;தில்லி;ఢిల్లీ;ದೆಹಲಿ;ഡെൽഹി;เดลี;დელი;デリー;德里;델리; +city::1273309;Dehri;Dehm;Dehri; +city::1273313;Dehra Dun;Dehra;Dehra Dun;Dehra Dūn;Dehradun;Dekhradune;Дехрадуне; +city::1273369;Dausa;Daosa;Dausa;da'usa;dao sa;dausa;Дауса;دوسہ;दौसा;দাউসা;દૌસા;道萨; +city::1273403;Datia;Datia; +city::1273467;Darjiling;Dardzhiling;Dardzilingas;Dardžilingas;Dargiling;Darjeeling;Darjiling;Darĝiling;Dārjiling;Rdorje gling;da ji ling;daleujilling;dar jylng;darjilim;drgylyng;Дарджилинг;דרגילינג;دار جیلنگ;দার্জিলিং;大吉嶺;다르질링; +city::1273491;Darbhanga;Darbanga;Darbhanga;Darbkhanga;Gorad Darbkhanga;da er bang ge a;darabhaga;darabhanga;darbanga;darbhanga;darbhanja;drbnga;Горад Дарбханга;Дарбанга;Дарбханга;داربهانجا;دربنگا;دربھنگا;دربھنگہ;दरभंगा;दरभङ्गा;দারভাঙ্গা;ਦਰਭੰਗਾ;ଦାରଭଙ୍ଗା;దర్భాంగా;ದರ್ಬಂಗ;达尔邦格阿; +city::1273574;Dandeli;Dandeli; +city::1273581;Dinapore;Danapur;Dinapore;Dānāpur; +city::1273587;Damoh;Damoh;da mo;dameah;damoha;दमोह;दामोह;দামোহ;દામોહ;ദമോഹ്;达莫; +city::1273626;Daltonganj;Daltenganj;Daltongandzh;Daltonganj;Daltongganj;Dāltenganj;Medininagar;Medninagar;da er tong ge a en jie;daltanaganja;daltanaganjanagaram;Далтонгандж;डाल्टनगंज;डाल्टनगञ्ज;डाल्टनगञ्जनगरम्;দাল্টনগঞ্জ;ଡାଲଟନ୍‌ଗଞ୍ଜ;达尔通格阿恩杰; +city::1273687;Dohad;Dahod;Dohad;Dāhod; +city::1273724;Dadri;Dadri;Dādri; +city::1273745;Dabwali;; +city::1273751;Dabra;Dabra; +city::1273766;Dabhoi;Dabhoi; +city::1273780;Cuttack;Katak;Kataka;Kattak;Kattake;katak;kataka;katakam;katakku;katk;kattak;ke ta ke;kutakeu;kuttaka;Катак;Каттак;Каттаке;کاتک;کوٹاک;کٹک;کټاک;कटक;कटकम्;কটক;কুত্তক;ਕਟਕ;કટક;କଟକ;கட்டக்;కటక్;കട്ടക്;カタック;克塔克;쿠타크; +city::1273800;Cuddapah;CDP;Cuddapah;Kadapa;Kurpah;kadapa;katappa;கடப்பா;కడప; +city::1273802;Cuddalore;Cuddalore;Gondelour;Gudalur;Kudalur;Kuddalor;Kuddalore;Kūdalūr;gu da luo er;kadalura;kadaluru;kadaruru;kaddalora;katalur;kudalloleu;kuddalore;Куддалор;Куддалоре;कडलूर;कडलूरु;कड्डालोर;কুদ্দালোরে;કડલૂર;கடலூர்;കടലൂർ;カダルール;古达罗尔;쿠달로르; +city::1273865;Coimbatore;CJB;Coimbatore;Koimbator;Koimbatore;Koimbatur;Kojambuttur;Kojambuttúr;Kovai;Koyambattur;Koyambattūr;Koyamuttur;Koyamuttūr;ge yin bai tuo;keayampattuർ;ko'ibatura;ko'imabatore;ko'imbatora;ko'imbatura;koimbatoleu;kovai;koyambattura;koyambatturu;koyambatura;koyampattur;koyamputtur;koyanbutto~uru;kwymbatwr;kwymbtwr;Коимбатор;Коимбатур;Коїмбатор;كويمباتور;کوئمباتور;کويمبتور;کویمباتور;کویمبٹور;कोइंबतूर;कोयंबतूर;कोयम्बत्तूर;कोयम्बत्तूरु;কোইমবাতোরে;ਕੋਇੰਬਟੂਰ;કોઇમ્બતુર;କୋଇମ୍ବାଟୋର;கோயம்பத்தூர்;கோயம்புத்தூர்;கோவை;కోయంబత్తూరు;ಕೊಯಂಬತ್ತೂರು;കോയമ്പത്തൂർ;ကိုအင်ဘတောမြို့;კოიამპუტური;コーヤンブットゥール;哥印拜陀;코임바토르; +city::1273874;Cochin;British Cochin;COK;Cochim;Cochin;Cochín;Fort Cochin;Kochi;Kochin;Koczin;Kuchi Bandar;Malabar;ke zhi;keacci;kocci;kochi;koci;qwzy;Кочин;קוצי;कोच्चि;কোচি;கொச்சி;കൊച്ചി;コーチ;柯枝; +city::1273892;Churu;Churu;Chūru; +city::1273992;Chopda;Chopda; +city::1274040;Chittaurgarh;Chitor;Chitorgarh;Chittaurgarh;Chittor;Chittorgarh; +city::1274056;Chitradurga;Chitaldroog;Chitaldrug;Chitaldurg;Chitradurg;Chitradurga;Chitrakaldurga;Chitteldrug;citradurga;citradurga nagara;citradurgam;citraturka;Читрадурга;चित्रदुर्ग;चित्रदुर्गम्;চিত্রদুর্গ;சித்ரதுர்கா;ಚಿತ್ರದುರ್ಗ ನಗರ; +city::1274106;Chirala;Chirala;Chīrāla; +city::1274119;Chiplun;Chiplun;Chiplūn; +city::1274129;Chintamani;Chintamani;Chintāmani;Чинтамани; +city::1274213;Chilakalurupet;; +city::1274220;Chikmagalur;Chickmagalur;Chikkamagaluru;Chikkamagalūru;Chikmagalur;Chikmagalūr;Chikmanglur;Chikmugalur;Chikmugalūr;cikkamagaluru;ಚಿಕ್ಕಮಗಳೂರು; +city::1274237;Chikhli;Chikhli; +city::1274243;Chik Ballapur;Chik Ballapur;Chik Ballāpur; +city::1274256;Chidambaram;Chidambaram;Chitdambaram;Cidambaram;cidambaram;cidambarama;citamparam;ji deng bo lei mu;Ćidambaram;Чидамбарам;चिदाम्बरम;চিদাম্বরম;சிதம்பரம்;చిదంబరం;ചിദംബരം;吉登伯勒姆; +city::1274304;Chhindwara;Chhindwara;Chhindwāra;Chindwara;Sindwara; +city::1274315;Chhibramau;Chhibramau;Chhibrāmau; +city::1274337;Chhatarpur;Chantarpur;Chhatarpur;Chkatarpur; +city::1274353;Chapra;Chapra;Chhapra;Chkhapra;Chupra;Chāpra;capara;capra;chapara;chapra;qia pu la;Чапра;Чхапра;چاپرا;चप्रा;छपरा;छप्रा;চাপরা;恰普拉; +city::1274430;Chingleput;Chengalpat;Chengalpattu;Chingleput;cengalapattu;cenkalpattu;qin ge a er pa tu;चेंगलपट्टु;चेंगलपट्टू;চেঙ্গালপাত্তু;செங்கல்பட்டு;琴格阿尔帕图; +city::1274553;Chas;Chas;Chās;Час; +city::1274571;Charkhi Dadri;Charkhi Dadri;Charkhi Dādri;Charki Dadrai;Charki Dadri;Dadri;Dādri; +city::1274641;Channapatna;Channapatan;Channapatna; +city::1274664;Changanacheri;Changanacheri;Changanacherry;Changanācheri; +city::1274693;Chanda;Candrapur;Chanda;Chandrapur;Chānda;candrapur;candrapura;candrapura jille;candrapuram;chandrapwr;chndrapwr;chndrpwr;qian de la pu er;Ćandrapur;Чандрапур;چاندراپور;چندراپور;چندرپور;चंद्रपूर;चन्द्रपुर;चन्द्रपुरम्;চন্দ্রপুর;ચંદ્રપૂર;చంద్రపూర్;ಚಂದ್ರಪುರ ಜಿಲ್ಲೆ;钱德拉普尔; +city::1274714;Chandpur;Bijnor;Chandpur;Chāndpur; +city::1274746;Chandigarh;Candigarchas;Candigarh;Chandigar;Chandigarh;Chandigarkh;Chandīgarh;Czandigarh;IXC;cadigarha;candhigad;candigadh;candigadha;candigara;candigarha;cantikar;chandigadh;chandigarhi;chandigaru;chang di jia er;Čandigarchas;Čandígarh;Чандигар;Чандигарх;צ'אנדיגאר;चंडीगढ़;চন্ডিগড়;চন্ডীগড়;ਚੰਡੀਗੜ੍ਹ;ચંડીગઢ;சண்டிகர்;చండీగఢ్;ఛండీగఢ్;ചണ്ഢീഗഡ്;ჩანდიგარჰი;チャンディーガル;昌迪加尔; +city::1274767;Chanduasi;Chandausi;Chanduasi; +city::1274784;Chandannagar;Candanagaro;Chandan Nagar;Chandannagar;Chandernagor;Chandernagore;candananagara;cantannakar;chandanagaleu;chandanagari;chndngr;jin de ne ge er;shanderunagoru;Ĉandanagaro;Чанданнагар;Чанданнаґар;چندنگر;चन्दननगर;চন্দননগর;சந்தன்நகர்;ჩანდანაგარი;シャンデルナゴル;金德訥格爾;찬다나가르; +city::1274821;Chamrajnagar;; +city::1274862;Challakere;Challakere; +city::1274868;Chalisgaon;Chalisgaon;Chālisgaon; +city::1274928;Chaibasa;Chaibasa;Chāībāsa; +city::1274987;Kannur;CNN;Cananor;Cannanore;Kananorskom;Kannanur;Kannur;Kanoor;kan'nuru;kannanuru;kannara;kannur;kannura;kannuർ;kanura;kanwr;knwr;Кананорском;Каннур;کانور;کنور;कण्णुर;कण्णूर;कन्नूर;কন্নুর;ਕਨੂਰ;કણ્ણૂર;କାନ୍ନର;கண்ணூர்;ಕಣ್ಣಾನೂರು;ಕಣ್ಣೂರ್;കണ്ണൂർ;カンヌール; +city::1275004;Kolkata;CCU;Calcuta;Calcutta;Calcutá;Calcúta;Caligardamana;Kaelkuettae;Kal'kuta;Kal'kutta;Kal'kuttae;Kalikata;Kalikātā;Kalkata;Kalkota;Kalkouta;Kalkueta;Kalkuta;Kalkutta;Kalkútta;Kalküta;Kolkat;Kolkata;Kolkate;Kolkato;Kälküttä;Kəlkətə;Sealdah;jia er ge da;jia li ji da;kalakata;kalakatta;kalikata;kalkata;keaൽkkatta;klkta;klkth;klkwth;ko l ka ta;kolakata;kolkata;kolkatta;kol‌kata;korukata;kwlkata;kʼolkʼatʼa;qwlqth;Καλκούτα;Калькута;Калькуттæ;Калькутта;Колката;Колкате;Կալկաթա;כלכותה;קאלקאטא;קולקטה;كلكتا;كولكاتا;کلکته;کلکتہ;کولکاتہ;کَلٕکَتا;کەلکەتە;कलकत्ता;कोलकाता;কলকাতা;ਕੋਲਕਾਤਾ;કોલકાતા;କଲିକତା;கொல்கத்தா;కోల్‌కాతా;ಕೊಲ್ಕತ್ತ;കൊൽക്കത്ത;โกลกาตา;ཀ་ལི་ཀུ་ཏ;ကာလကတ္တားမြို့;კოლკატა;ኮልካታ;コルカタ;加尔各答;架利吉打;콜카타; +city::1275019;Buxar;Buxar; +city::1275068;Burhanpur;Burhanpur;Burhānpur; +city::1275103;Bundi;Bundi;Bundi City;Būndi;Бунди; +city::1275117;Buldana;; +city::1275120;Bulandshahr;Buelendsehr;Bulandshahr;Bulandshakhr;Bulandshakhre;Bulandshar;Bülendşehr;blndshhr;bu lan de si ha he er;bulandasahara;pulantacakar;Буландшар;Буландшахр;Буландшахре;بلند شہر;بلندشهر;बुलन्दशहर;बुलन्दसहर;বুলান্দশহর;புலந்தசகர்;布兰德斯哈赫尔; +city::1275163;Budaun;Badajun;Badaun;Budaun;badanyu;badauna;badayum;bu dao en;budauna;patavun;Бадаюн;بدایوں;बदांयू;बदायूँ;बुडौन;বুদৌন;બદૌન;பதாவுன்;布道恩; +city::1275194;Brajarajnagar;Brajarajnagar;Brajrajnagar;Brājarājnagar; +city::1275198;Brahmapur;Berhampore;Berhampur;Berkhampur;Brahmapur;Brahmapuramu;Brahmapuras;Bramapur;Ganjam;barampuram;brahmapura;brahmapuram;brhmapwr;bu la he ma pu er;Берхампур;Брамапур;برهماپور;برہماپور، اڑیسہ;برہمپور;ब्रह्मपुर;ব্রহ্মপুর;ব্রহ্মাপুর;ବ୍ରହ୍ମପୁର;బరంపురం;బ్రహ్మపురం;布拉赫马普尔; +city::1275218;Botad;Botad;Botād; +city::1275230;Borsad;Borsad; +city::1275248;Borivli;Borivali;Borivli; +city::1275321;Bongaigaon;Bongaigaon; +city::1275339;Mumbai;Asumumbay;BOM;Bombai;Bombaim;Bombaj;Bombay;Bombaya;Bombej;Bombejus;Bombėjus;Bumbaj;Bůmbaj;Dakbayan sa Bombay;Gorad Mumbai;Lungsod ng Mumbai;Moembaai;Mumbai;Mumbai - मुम़बई;Mumbaj;Mumbaja;Mumbajo;Mumbajus;Mumbay;Mumbaî;Numbai;Vomvai;bamba'i;bmbyy;gretara mumba'i;meng mai;mmbay;mmbyy;mu0bai;muba'i;mum bi;mumba'i;mumbai;mumpai;munbai;mwmbay;mwmbyy;mymbais;pullapa mumba'i;Βομβάη;Бомбай;Бомбей;Горад Мумбаі;Мумбаи;Мумбай;Мумбаі;Мумбаї;Мумбај;Մումբայ;מומבאי;מומביי;بمبئی;بَمبَے;ممبئي;ممبئی;ممبای;مومباى;مومباي;مومبای;މުންބާއީ;ग्रेटर मुम्बई;बम्बई;मुंबई;मुम्बई;পুল্লাপ মুম্বাই;মুম্বই;মুম্বাই;ਮੁੰਬਈ;મુંબઈ;ମୁମ୍ବାଇ;மும்பை;ముంబై;ಮುಂಬೈ;ಮು೦ಬೈ;മുംബൈ;มุมไบ;འབོམ་སྦེ;မွမ်ဘိုင်းမြို့;მუმბაი;ムンバイ;孟买;뭄바이; +city::1275346;Bolpur;Bolpur;bo er pu er;bolapura;bolapura pascima bangala;बोलपुर;बोलपुर पश्चिम बंगाल;বোলপুর;博尔普尔; +city::1275362;Bokaro;Bokaro;Bokaro Steel City;Bokāro;Бокаро; +city::1275388;Bodinayakkanur;Bodinayakanur;Bodinayakkanur;Bodināyakkanūr; +city::1275391;Bodhan;Bodhan;bodhan;బోధన్; +city::1275406;Bobbili;Bobbili;babbili;bo bu bi li;bobbili;bobbiri;bwbly;poppili;بوبلی;बोब्बिलि;বব্বিলি;ବୋବ୍ବିଲି;பொப்பிலி;బొబ్బిలి;ボッビリ;博布比利; +city::1275435;Biswan;Biswan;Biswān; +city::1275462;Bishnupur;Bishnupur;Vishnupur;Бишнупур; +city::1275481;Bisalpur;Bisalpur;Bīsalpur; +city::1275582;Etawa;Bina-Etawa;Bīna-Etāwa;Etawa;Etawah;Etāwa; +city::1275610;Bilimora;Bilimor;Bilimora;Mora; +city::1275637;Bilaspur;Bilaspur;Bilaspura;Bilāspur;PAB;Биласпура; +city::1275665;Bikaner;BKB;Bikaner;Bîkâner;Bīkaner;Bīkāner;bikanera;Биканер;बीकानेर; +city::1275679;Bijnor;Bidzhnor;Bijnor;bi jie nuo er;bijanaura;bijanora;bijnora;bjnwr;pijnor;Биджнор;بجنور;बिजनोर;बिजनौर;बिज्नोर;বিজনোর;બિજનૌર;பிஜ்னோர்;比杰诺尔; +city::1275701;Bijapur;Bidzapur;Bidzapuras;Bidzhapur;Bidzsapur;Bidźapur;Bidžapuras;Bijapur;Bijāpur;Bídzsápur;Bîjâpur;Districte de Bijapur;Vijapura;Vijayapur;Vijayapura;Visiapur;bi gu bu er;bi jia bu er;bijapuleu;bijapura;bijapuram;bijapuru;byjapwr;pijappur;vijapura;Биджапур;Биџапур;بیجاپور;बिजापुरम्;बीजापुर;विजापूर;ਬੀਜਾਪੁਰ;பிஜாப்பூர்;ಬಿಜಾಪುರ;ബിജാപ്പൂർ;ビジャープル;比贾布尔;비자푸르; +city::1275716;Bihar Sharif;Behar;Bihar;Bihar Sharif;Bihār;Bihār Sharīf; +city::1275738;Bidar;Bidar;Bīdar;Бидар; +city::1275778;Bhusaval;Bhusaval;Bhusawal;Bhusāval;Bhusāwal; +city::1275812;Bhuj;BHJ;Bhooj;Bhuj;Bkhudzh;bhoja;bhuja;bwj;puj;Бхудж;بوج;بھوج;ڀڄ;भुज;भूज;ভোজ;ભુજ;ଭୁଜ;புஜ்; +city::1275817;Bhubaneshwar;BBI;BBSR;Bhubaneshwar;Bhubaneswar;Bhubaneśwar;Bkhubaneshvar;Temple City of India;bhubanesbara;bhuvanesvara;bubaneshuwaru;puvanecuvaram;Бхубанешвар;בובנשוואר;भुवनेश्वर;ভুবনেশ্বর;புவனேசுவரம்;ブバネーシュワル; +city::1275841;Bhopal;BHO;Bhojpal;Bhopal;Bhopala;Bhopalas;Bhopalo;Bhopál;Bhopāl;Bhopāla;Bhópál;Bkhopal;Bopal;Bópal;Gorad Bkhapal;bhopal;bhopala;bo pa er;bopal;boparu;bwbal;bwpal;popal;Μποπάλ;Бопал;Бхопал;Горад Бхапал;בופאל;بوبال;بوپال;بھوپال;بہوپال;भोपाल;भोपाळ;ভোপাল;ਭੋਪਾਲ;ભોપાલ;ଭୋପାଳ;போபால்;భోపాల్;ಭೊಪಾಲ್;ഭോപ്പാൽ;ბჰოპალი;ボパール;ボーパール;博帕尔;보팔; +city::1275848;Bhongir;Bhongir;Bhongīr; +city::1275899;Bhiwani;Bhiwani;Bhiwāni; +city::1275901;Bhiwandi;Bhivandi;Bhivándi;Bhiwandi;Bhiwndi;Bivandi;Bkhivandi;bhi'oyadi;bhivandi;bhiwandi;biwandi;bywandy;pi wen di;Биванди;Бхиванди;بيوانډي;بھیواندی;بھیونڈی;بیواندی;भिवंडी;भिवन्दी;ভিওয়াদি;ભિવંડી;ଭିୱାନ୍ଦି;ビワンディー;皮文迪;비완디; +city::1275926;Bhind;Bhind; +city::1275947;Bhimavaram;Bhimavaram;Bhīmavaram; +city::1275960;Bhilwara;Bhilwara;Bhīlwāra; +city::1275971;Bhilai;Bhilai;Bhilai Nagar;Bhilaj Nagar;Bhilajus;Bhilāī;Bilaj;Bkhilai;balay;bhila'i;bhila'i nagara;bhilai nagara;bi lai;billai;birai;pilay;Билај;Бхилаи;بالای;بھلائی;بھیلائ;भिलाई;भिलै नगर;ভিলাই নগর;ଭିଲାଇ;பிலாய்;ビラーイー;比萊;빌라이; +city::1276014;Bhayandar;Bhayandar;Bhayndar;Bhayundar; +city::1276023;Bhawanipatna;Bhawanipatna;Bhawānipatna; +city::1276032;Bhavnagar;BHU;Baunagar;Bharnagar;Bhaunagar;Bhavnagar;Bhunagar;Bhāvnagar;Bkhavnagarom;ba fu na jia er;babeunagaleu;bavunagaru;bawngr;bhavanagara;bhav‌nagar;bھawngr;pavanakar;Бхавнагаром;باونگر;بھاونگر;भावनगर;ભાવનગર;பவநகர்;భావ్‌నగర్;バーヴナガル;巴夫那加尔;바브나가르; +city::1276058;Bhatpara;Bhatpara;Bhātpāra; +city::1276070;Bathinda;BUP;Bathinda;Bkhatinda;ba ting da;bathida;bathinda;batynda;bhatinda;pattinta;Бхатинда;باتیندا;बठिंडा;बठिण्डा;বাথিন্দা;ভাটিণ্ডা;ਬਠਿੰਡਾ;ଭଟିଣ୍ଡା;பட்டிண்டா;ബഠിംഡാ;巴廷達; +city::1276084;Bhatapara;Bhatapara;Bhātāpāra; +city::1276100;Bharuch;Baroach;Bharoch;Bharuch;Bharūch;Broach; +city::1276128;Bharatpur;Batarpur;Bharatpur;Bkharatpur;baratopuru;bharatapura;bharatapuram;po lei de bu er;Батарпур;Бхаратпур;بھارتپور;भरतपुर;भरतपुरम्;भरतपूर;ভরতপুর;ਭਰਤਪੁਰ;ભરતપુર;ଭରତପୁର;ഭരത്പൂർ;バラトプル;珀勒德布爾; +city::1276191;Bhandara;Bhandara;Bhandāra;Bkhandara;Бхандара; +city::1276300;Bhagalpur;Bhagalpur;Bhāgalpur; +city::1276320;Bhadreswar;Bhadreswar; +city::1276321;Bhadravati;Bhadravati;Bhadrāvati; +city::1276325;Bhadrakh;Bhadrak;Bhadrakh; +city::1276335;Bhadohi;Bhadohi;Bhadohī;XXB;ba duo xi;bhadohi;bhanadohi;بھدوہی;भदोही;ভানদোহি;巴多希; +city::1276378;Beypore;Beipur;Beppur;Beypore;Beypur;bei yi bo lei;bepura;beyapare;peppur;बेपुर;বেয়পারে;பேப்பூர்;ബേപ്പൂർ;贝伊波雷; +city::1276389;Betul;Badnur;Badnúr;Betul;Betūl; +city::1276393;Bettiah;Bettiah;Bettiakh;bei te di ya;betiya;betti'ah;bettiya;Беттиах;بیتیاہ;बेतिया;बेत्तिया;বেত্তিয়া;ବେଟ୍ଟିଆଃ;贝特蒂亚; +city::1276509;Bellary;BEP;Ballari;Ballāri;Belari;Belaris;Bellari;Bellary;Bellāri;ballari;bei la li;bellari;blary;bllary;bylary;pellari;Белари;Беллари;بلاری;بللاری;بیلاری;बळ्ळारी;बेल्लारी;বেল্লারী;ବଲ୍ଲାରୀ;பெல்லாரி;బళ్లారి;ಬಳ್ಳಾರಿ;贝拉里; +city::1276533;Belgaum;Belagaavi;Belagavi;Belagoavi;Belagāvi;Belgaavi;Belgaon;Belgaum;Belgaumas;Gorad Belgaan;IXG;bei er gao mu;belaga'uma;belagam;belagamva;belaganva;belagavi;belgam;belgaum;berugaumu;blgam;blgaywm;bylgawm;bylgwm;pelkam;Белгаум;Горад Белгаан;بلگام;بلگایوم;بيلگوم;بیلگاؤم;बेलगाँव;बेलगांव;बेळगांव;बेळगावी;বেলগাউম;ବେଲଗାଁ;பெல்காம்;బెల్గాం;ಬೆಳಗಾವಿ;ബെൽഗാം;ベルガウム;贝尔高姆;벨가움; +city::1276574;Bela;Bela;Bela Partabgarh;Partapgarh;Pratapgarh;Бела; +city::1276609;Begusarai;Begusarai;Begusaraj;begusara'i;begusaraya;bei gu sa lai;bjsaray;pekucaray;Бегусарай;Бегусарај;بجساراي;بیگوسرائے;बेगुसराई;बेगुसराय;बेगूसराय;বেগুসারাই;ବେଗୁସରାଇ;பேகூசராய்;贝古萨赖; +city::1276634;Beawar;Beawar;Beāwar; +city::1276720;Batala;Batala;Batāla;Butala; +city::1276736;Basti;Basti;Bastī;Басти; +city::1276752;Basoda;Basoda;Bāsoda; +city::1276757;Basmat;Basmat;Basmath; +city::1276783;Basavakalyan;Basavakalyan;Basavakalyān;Kalyani;Kalyāni; +city::1276829;Baruni;Barani;Baruni;Bāruni;Баруни; +city::1276856;Barsi;Barshi;Barsi;Bārsi; +city::1276895;Barnala;Anahadgarh;Anāhadgarh;Barnala;Barnāla;Барнала; +city::1276901;Barmer;Barmer;Bārmer; +city::1276948;Bari;Bari;Bāri; +city::1276988;Bargarh;Baragarh;Bargarh;Bargarkh;ba er jia er;baragadha;baragara;bargadh;parkaht;Баргарх;برگرہ;बरगढ;বারগড়;બરગઢ;ବରଗଡ଼;பர்கஃட்;బర్గఢ్;巴尔加尔; +city::1277013;Bareilly;BEK;Bareilly;Barejli;Bareli;Barelī;ba lei li;baleilli;baraili;bareli;bareri;bereli;bryly;pareli;Барейли;Барели;Барејли;بريلي;بریلی;बरेली;बरैली;বেরেলি;બરેલી;பரேலி;ಬರೇಲಿ;ബറേലി;バレーリー;巴雷利;바레일리; +city::1277022;Bardoli;Bardoli;Bardoti;Bārdoli;Бардоли; +city::1277029;Barddhaman;Barddhaman;Barddhamān;Bardhaman;Bardhamān;Bordhoman;Burdwan;Burdwān;bardhamana;বর্ধমান; +city::1277044;Baraut;Baraut; +city::1277065;Barasat;Barasat;Bārāsat; +city::1277066;Barasat;Barasat;Bārāsat; +city::1277084;Baran;Baran;Bārān;Баран; +city::1277085;Baramula;; +city::1277091;Baramati;Baramati;Bārāmati;Барамати; +city::1277100;Barakpur;Barakpur;Barrackpore;Bārākpur;Chanak; +city::1277183;Bapatla;Bapatla;Bāpatla; +city::1277214;Banswara;Banswara;Bānswāra; +city::1277240;Bansbaria;Bansbaria;Bansberia;Bānsbāria; +city::1277264;Bankura;Bankura;Bānkura;Банкура; +city::1277322;Bangaon;Bangaon; +city::1277324;Bangaon;Bangaon;Bongaon;banagam;banagamo;banagavam;bang ge a ao en;Бангаон;बानगावं;বনগাঁ;বনগাঁও;邦格阿奥恩; +city::1277333;Bengaluru;BLR;Ban'nkalor;Bangalor;Bangalora;Bangalore;Bangalore - bengaluru;Bangalore - ಬೆಂಗಳೂರು;Bangalore City;Bangalur;Bangaluri;Bangalúr;Bengalour;Bengaluras;Bengaluro;Bengaluru;Bengalurus;Bengalúru;Bengalūras;Bengalūru;Gorad Bangalor;baeng-geollo;bagalaura;ban jia luo er;bang kha l xr;bang-galloleu;bangalaura;bangalora;bangalura;bangaroru;beng-gallulu;bengalora;bengaluru;benguluru;bnghalwr;bnglwr;bynglwr;penkalur;Μπανγκαλόρ;Бангалор;Бенгалуру;Бенґалуру;Горад Бангалор;בנגלור;بنغالور;بنگلور;بینگلور;बंगलौर;बंगळूर;बेङ्गलूरु;बेङ्गलोर;बेङ्गळूरु;বাঙ্গালোর;বেঙ্গালুরু;ਬੰਗਲੌਰ;બેંગલોર;ବେଙ୍ଗାଳୁରୁ;பெங்களூர்;బెంగుళూరు;ಬೆಂಗಳೂರು;ബെംഗളൂരു;බැංගලෝර්;บังคาลอร์;ဘန်ဂလိုမြို့;ბენგალურუ;バンガロール;班加罗尔;班加羅爾;방갈로르;뱅걸로;벵갈루루; +city::1277397;Banda;Banda;Bānda; +city::1277508;Balurghat;Balurghat;Bālurghāt;RGH; +city::1277525;Balrampur;Balrampur;Balrāmpur; +city::1277527;Balotra;Balotra;Bālotra; +city::1277539;Bali;Bali;Bally;Bāli;Бали; +city::1277599;Balasore;Balasor;Balasore;Baleshwar;Baleswar;Bāleshwar;ba la suo er;balasor;balaswr;balesbara;balesvara;bareshuwaru;palesvar;Баласор;بالاسور;बालेश्वर;বালেশ্বর;બાલેશ્વર;ବାଲେଶ୍ଵର;பாலேஸ்வர்;బాలాసోర్;ಬಾಲಸೊರ್;バーレーシュワル;巴拉索尔; +city::1277643;Balangir;Balangir;Balāngīr;Bolangir;Bolāngir; +city::1277661;Balaghat;Balaghat;Burha;Bālāghāt; +city::1277723;Baj Baj;Baj Baj;Budge Budge; +city::1277780;Baidyabati;Baidyabati;Baidyabāti; +city::1277799;Bahraigh;Bahraich;Bahraigh; +city::1277814;Baheri;Baheri; +city::1277820;Baharampur;Baharampur;Bahrampur;Bahrāmpur;Bakharampur;Berhampore;ba ha la mu pu er;baharamapura;Бахарампур;بهرام‌پور;بہرام پور;बहरमपुर;बहरामपुर;बहरामपूर;বহরমপুর;বাহারামপুর;ବହରମ୍‌ପୁର୍;巴哈拉姆普尔; +city::1277835;Bahadurgarh;Bahadurgarh;Bahādurgarh; +city::1277936;Bagalkot;Bagalakote;Bagalkot;Bāgalkot;ba jia er ke te;bagalakota;pakalkot;Багалкот;बागलकोट;বাগলকোট;பாகல்கோட்;బాగల్‌కోట్;巴加尔科特; +city::1277939;Bagaha;Bagaha; +city::1277940;Bagaha;Bagaha;Bagaha Division; +city::1277976;Badlapur;Badlapur;ba de la pu er;badalapura;bdlapwr;بدلاپور;बदलापूर;बादलपुर;বাদলাপুর;巴德拉普尔; +city::1278023;Badagara;Badagara;Vatakara; +city::1278026;Bada Barabil;Bada Barabil;Bada Barabīl;Barabil; +city::1278083;Azamgarh;Azamgarh;Azamgarkh;a zha mu jia er;ajamagadha;ajamagadha jilla;ajamagadha-nagaram;ajamagara;ajhamagadha;azamagarha;azamugaru;Āzamgarh;Азамгарх;اعظم گڑھ;आजमगढ;आजमगढ जिल्ला;आजमगढ-नगरम्;आज़मगढ़;आझमगढ;আজমগড়;આઝમગઢ;ଆଜମ୍‌ଗଡ଼;アーザムガル;阿扎姆加尔; +city::1278094;Ajodhya;Ajodhija;Ajodhjo;Ajodhya;Ajodkh'e;Ajodkh'ja;Ajodkhja;Ayodhya;Oudh;a yue ti ya;ayead'dhya;ayod'dha;ayodhi'a;ayodhya;ayodhye;ayodia;ayodiya;ayotti;aywdya;x yoth ya;Айодхье;Айодхья;Айодхя;أيوديا;ایودھیا;ایودیا;अयोद्धा;अयोध्या;অযোধ্যা;ਅਯੋਧਿਆ;અયોધ્યા;ଅଯୋଧ୍ୟା;அயோத்தி;అయోధ్య;ಅಯೋಧ್ಯೆ;അയോദ്ധ്യ;อโยธยา;ཨ་ཡོ་དྷི་ཡ།;アヨーディヤー;阿约提亚;아요디아; +city::1278130;Avadi;Avadi;Āvadi;Авади; +city::1278148;Aurangabad;Aurangabad;Aurangābād; +city::1278149;Aurangabad;Aurangabad;Aurangabad - aurangabada;Aurangabad - औरंगाबाद;Aurangabadas;Aurangâbâd;Aurangābād;IXU;a'orangabada;a'urangabada;aurangabada;aurangabada sahara;aurangabado;Аурангабад;औरंगाबाद;औरंगाबाद शहर;আউরঙ্গাবাদ;আওরঙ্গাবাদ;アウランガーバード; +city::1278152;Auraiya;Auraiya;Aurajja;Etawah;a'ura'iya;ao lai ye;aura'iya;auraiya;awrya;Аурайя;اورایہ;اوریا;औराइया;औरैया;আউরাইয়া;ઔરૈયા;奥赖耶; +city::1278173;Attur;Attur;Atur-Salem;attur;attura;Āttūr;अत्तुर;আত্তুর;ஆத்தூர்; +city::1278178;Attili;Attili; +city::1278297;Ashoknagar;Ashok Nagar;Ashoknagar;Pachhar;Pachhār;a si huo ke na jia er;acok nakar;ashwk ngr;asokanagara;asokanagara jilla;asokanagaram;اشوک نگر;अशोकनगर;अशोकनगर जिल्ला;अशोकनगरम्;অশোকনগর;ଅଶୋକନଗର;அசோக் நகர்;阿斯霍克纳加尔; +city::1278314;Asansol;Asanol;Asansol;asanasola;asansoru;Āsansol;Асансол;आसनसोल;আসানসোল;アサンソル; +city::1278340;Aruppukkottai;Aruppukkottai; +city::1278432;Arcot;Arcot;Arkota;Аркота; +city::1278446;Araria;Araria;Ararija;Arāria;arariya;Арария;अररिया; +city::1278454;Arni;Arani;Arni;Ārani; +city::1278466;Arambagh;Arambagh;Arāmbāgh; +city::1278471;Arakkonam;Arakkonam;Arkonam; +city::1278483;Arrah;Ara;Arrah;Arrakh;Shahabad;a la;ara;araraha;arrah;Ара;Аррах;آرا;آراہ;اراہ;आरा;আররাহ;ਆਰਾ;આરા;ଆର୍ରାହ୍;阿拉; +city::1278498;Aonla;Aonla;Aonla Kila; +city::1278553;Ankleshwar;Ankleshwar;Anklesvar; +city::1278573;Anjar;Andzharom;Anjar;Anjār;Анджаром; +city::1278580;Anjangaon;Anjangaon; +city::1278667;Anantnag;Anantnag;Anantnāg;Islamabad;Islāmābād;a na en te na ge;anantanaga;anantanak;anantnag;anantnaj;anatanaga;annt nag;anntnag;Анантнаг;أنانتناج;انانتناگ;اننت ناگ;اننتناگ;अनंतनाग;अनन्तनाग;ਅਨੰਤਨਾਗ;અનંતનાગ;ଅନନ୍ତନାଗ;அனந்தநாக்;അനന്ത്നാഗ്;阿纳恩特纳格; +city::1278672;Anantapur;Anantapour;Anantapur;Anantapuramu;Anantapure;a na en ta pu er;anantapur;anantapura;anantapuram;anantapwr;annt pwr;Ανάνταπουρ;Анантапур;Анантапуре;آنانتاپور;اننت پور;اننتپور، آندھرا پردیش;अनंतपूर;अनन्तपुर;अनन्तपुरम्;অনন্তপুর;ଅନନ୍ତପୁର;அனந்தபூர்;అనంతపురం;అనంతపూర్;ಅನಂತಪುರ;阿纳恩塔普尔; +city::1278685;Anand;Aimand;Anand;Anaud;QNB;Ānand;Ананд; +city::1278688;Anakapalle;Anakapalle;Anakāpalle;anakapalli;అనకాపల్లి; +city::1278708;Amroha;Amroha; +city::1278710;Amritsar;ATQ;Amricar;Amritsar;Amritsar - amritasara;Amritsar - ਅੰਮ੍ਰਿਤਸਰ;Amritsara;Amritsaras;Amritszar;Amritszár;a mu li ze;amlichaleu;amritasara;amritcar;amrtasara;amrtasarah;amrtsr;amrytsar;amrytsr;amuritosaru;xm vt sar;yamrytsar;ʼmrytsr;Амритсар;Амрицар;Амрітсар;Ամրիթսար;אמריטסר;أمريتسار;ئامریتسار;امرتسر;امريتسر;امریتسار;अमृतसर;अमृतसरः;অমৃতসর;ਅੰਮ੍ਰਿਤਸਰ;અમૃતસર;ଅମୃତସର;அம்ரித்சர்;అమృత్‌సర్;ಅಮೃತಸರ;അമൃത്‌സർ;อมฤตสาร์;ამრიტსარი;アムリトサル;阿姆利则;암리차르; +city::1278715;Amreli;Amreli;Amrelis;amareli;amreli;amrly;amryly;an lei li;Амрели;امرلی;امریلی;अमरेली;অমরেলী;ਅਮਰੇਲੀ;અમરેલી;ଆମ୍ରେଲି;அம்ரேலி;ಅಮ್ರೇಲಿ;安雷利; +city::1278718;Amravati;Amaravati;Amraoti;Amraotī;Amravati;Amrāvati; +city::1278815;Ambur;Ambur;a mu bu er;ambura;amburu;ambwr;ampur;Āmbūr;آمبور;امبور;अम्बुर;আম্বুর;ஆம்பூர்;ಆಂಬೂರು;阿姆布尔; +city::1278827;Ambikapur;Ambikapur;Ambikāpur;Surguja;Surquja; +city::1278840;Ambattur;Ambattur;Ambattūr; +city::1278860;Ambala;Ambala;Ambata;Ambāla; +city::1278862;Ambajogai;Ambajogai;Ambe;Ambejogai;Ambājogāi;Mominabad;Mominābād; +city::1278903;Amarnath;Amarnath;Amarnatkh;Amarnāth;Ambarnath;Амарнатх; +city::1278931;Amalner;Amalner;a ma er nei er;amalanera;amalner;amalnera;amalnr;aml nyr;آمل نیر;امالنر;अमल्नेर;अमळनेर;আমালনের;અમલનેર;ଅମଳନେର;ಅಮಲ್ನೇರ್;阿马尔内尔; +city::1278935;Amalapuram;Amalapuram;Amalāpuram; +city::1278946;Alwar;Alvar;Alvaras;Alvaro;Alwar;Alwar City;District d'Alwar;a er wa er;ala'oyara;alaraara;alavara;alawara;alvar;alvara;alvari;alwar;aruwaru;Álvaro;Алвар;الوار;अलवर;अल्वर;আলওয়ার;আলৱার;ਅਲਵਰ;અલવર;ଅଲୱର;அல்வார்;ಅಳ್ವಾರ್;ალვარი;アルワル;阿尔瓦尔; +city::1278985;Alleppey;Alapalli;Alapolai;Alappula;Alappuzha;Alapulai;Aleppi;Allapuza;Alleppey;Alleppi;Aulapolai;alappula;Алаппужа;ആലപ്പുഴ; +city::1278994;Allahabad;Alahabadas;Alla Abba Habab;Allahabad;Allahabad - ilahabada;Allahabad - इलाहाबाद;Allahābād;Allakhabad;Allāhābād;IXD;Ilahabad;Ilāhābād;Prayag;Prayāg;alakapat;an la a ba de;arahabado;elahabada;ilahabada;irahabado;Аллахабад;إلٰه‌آباد;الہ آباد;इलाहाबाद;এলাহাবাদ;அலகாபாத்;アラハバード;イラーハーバード;安拉阿巴德; +city::1279017;Aligarh;Aligarh;Aligarkh;Alīgarh;Koil;aligara;aligarha;Алигарх;علی گڑھ;अलीगढ़;আলিগড়; +city::1279094;Akot;Akot;a ke te;akat;akota;آکوٹ;اکات;अकोट;अकोत;অকোট;ଆକୋଟ;阿科特; +city::1279105;Akola;AKD;Akola;Akolá;a ke la;akola;akolla;akwla;Акола;اکولا;اکولہ;अकोला;অকোলা;আকোলা;ਅਕੋਲਾ;અકોલા;ଅକୋଲା;அகோலா;ಅಕೋಲಾ;阿科拉;아콜라; +city::1279159;Ajmer;Acmer;Adzhmer;Adzmer;Adzmera;Adzmeras;Adzsmir;Adźmer;Adžmera;Adžmeras;Adžmér;Agmer;Ajmer;Ajmer City;Aĝmer;KQH;a jie mei er;ajamera;ajamira;ajimeleu;ajmer;ajmeri;ajmir;ajmyr;ajumeru;Ádzsmír;Аджмер;Аџмер;أجمير;اجمیر;اجمېر;अजमेर;অজমের;আজমির;ਅਜਮੇਰ;અજમેર;ଆଜମେର;அஜ்மீர்;అజ్మీర్;ಅಜ್ಮೇರ್;അജ്മീർ;აჯმერი;アジュメール;阿杰梅尔;아지메르; +city::1279186;Aizawl;AJL;Ai jal;Aidzhal;Aijal;Aizal;Aizavlis;Aizawl;Aizol;Aizwal;Ajzol;a'ijala;a'ijola;a'izola;ai zao er;aijali;aijaul;aijavla;aijhavala;aijhola;aijola;aizauru;aycal;ayyzwl;ayzal;ayzwal;Āīzawl;Аиджал;Аїджал;Ајзол;آئزال;آئیزول;ایزوال;आइज़ोल;आइजोल;ऐजव्ल;ऐजोल;ऐझॉल;আইজল;ਆਈਜ਼ੋਲ;ઐઝવાલ;ଆଇଜୋଲ;அய்சால்;ఐజ్‌వాల్;ഐസോൾ;აიჯალი;アイザウル;艾藻尔;아이자울; +city::1279228;Ahmadnagar;Ahmadnagar;Ahmadnâgar;Ahmednagar;ahamadanagara;ahamedanagara;ahmd ngr;akamatnakar;احمد نگر;अहमदनगर;আহমেদনগর;அகமத்நகர்; +city::1279233;Ahmedabad;AMD;Achmentampant;Ahmadabad;Ahmadabadas;Ahmadabado;Ahmadobod;Ahmadábád;Ahmadābād;Ahmedabad;Ahmedabad - amadavada;Ahmedabad - અમદાવાદ;Akhmadabad;Akhmadabad shaary;Akhmedabad;Amadavad;Amdavada;Amdāvāda;Amedebatum;Exmetabad;Gorad Akhmedabad;a mei da ba de;afumadabado;aham'madabad;ahamadabada;ahamedabada;ahimadabada;ahmadabad;ahmadabadi;ahmd abad;ahmdabad;ahmdabad - hyndystan;ai ha mai da ba de;ai ha mai de bao;akamatapat;amadabadeu;amadaraada;amadavada;xah mda bad;Αχμενταμπάντ;Ахмадабад;Ахмадабад шаары;Ахмедабад;Аҳмадобод;Горад Ахмедабад;אחמדאבאד;أحمد آباد;احمد آباد;احمدآباد;احمدآباد - هیندیستان;احمداباد;अमदावाद;अहमदाबाद;অমদাৱাদ;আহমেদাবাদ;ਅਹਿਮਦਾਬਾਦ;અમદાવાદ;ଅହମଦାବାଦ;அகமதாபாத்;అహ్మదాబాద్;ಅಹ್ಮದಾಬಾದ್;അഹമ്മദാബാദ്;อัห์มดาบาด;အမယ်ဒါဘတ်မြို့;აჰმადაბადი;アフマダーバード;艾哈迈德堡;艾哈迈达巴德;阿美達巴德;아마다바드; +city::1279259;Agra;AGR;Agra;Agra - agara;Agra - आगरा;Lungsod ng Agra;a ge la;agara;ageula;agra;agura;akra;Āgra;Āgrā;Агра;Аґра;אגרה;آگرہ;आगरा;আগ্রা;ஆக்ரா;ಆಗ್ರಾ;アーグラ;アーグラー;阿格拉;아그라; +city::1279290;Agartala;Agartala;Agratala;Ajarthala;Ankartala;Aqartala;IXA;a jia er ta la;agaleutalla;agaratala;agartala;agarutara;agrtla;akartala;Αγκαρτάλα;Агартала;اگارتالا;اگرتلا;अगरतला;अगरताल;अगरताला;अगर्तला;আগরতলা;ਅਗਰਤਲਾ;અગરતલા;ଅଗରତାଲା;அகர்தலா;అగర్తలా;ಅಗರ್ತಲ;അഗർത്തല;აგარტალა;アガルタラ;阿加尔塔拉;아가르탈라; +city::1279335;Adoni;Adoni;Ādoni;Адони; +city::1279344;Adilabad;Adilabad;Edlabad;Edlābād;adilabad;adilabadu;atilapat;Ādilābād;ஆதிலாபாத்;ఆదిలాబాదు;ఆదిలాబాద్; +city::1279390;Achalpur;Achalpur;Ellichpur;a qia er pu er;acalapura;accalpur;acharupuru;achlpwr;akalpwr;alacapura;اچلپور;اکالپور;अचलपूर;अलचपुर;অচলপুর;আচলপুর;ଅଚଳପୁର;அச்சல்பூர்;アチャルプル;阿恰尔普尔; +city::1279394;Abu Road;Abu Road;Ābu Road; +city::1279403;Abohar;Abohar;a bo he er;abohara;abwhar;apohar;آبوهار;ابوہر;अबोहर;আবোহার;ਅਬੋਹਰ;அபோஹர்;阿博赫尔; +city::1344069;Contai;Contai; +city::1344377;Haldia;Haldia; +city::1348747;Bankra;Bankra; +city::1348818;Nangi;; +city::1430991;Soyibug;; +city::6690108;Panchkula;Panchkula;Panchkula Urban Estate;Pusat Bandar Panchkula;bantshkwla;pancakula;pancakula upa sahara;Панчкула;بانتشكولا;پنج‌کولا;पंचकुला;पञ्चकुला;পঞ্চকুলা উপ শহর;ପଞ୍ଚକୁଲା;ಪಂಚಕುಲ; +city::6943660;Shivaji Nagar;; +city::6954929;Greater Noida;Didzioji Noida;Didžioji Noida;Velika Nojda;gretara no'eda;noyta perunakar;Велика Нойда;گریٹر نوئیڈا;ग्रेटर नोएडा;நொய்டா பெருநகர்; +city::6992326;Mohali;; +city::7279595;Pithampur;; +city::7279597;Barbil;; +city::7279599;Airoli;; +city::7279734;Kotkapura;; +city::7279741;Vapi;Wapi;Wāpi;bapi;vapi;vappi;wapy;wpy;واپی;وپی;वापि;वापी;বাপি;વાપી;வாப்பி; +city::7279746;Noida;Naveen;New Okhla Industrial Development Authority;Noida;Nojda;neayda;no'eda;no'era;no'ida;noyada;noyida;noyta;nuo yi da;nwyda;Ноида;Нойда;نوئدا;نوئیڈا;نويډا;نویدا;नोइडा;नोएडा;नोयडा;নোইদা;ਨੋਇਡਾ;નોઇડા;ନୋଏଡ଼ା;நொய்டா;నోయిడా;നോയ്ഡ;诺伊达; +city::7279754;Singrauli;Singrauli;singara'uli;singarauli;sinra'uli;sngrawly;syngrawly;xin ge lao li;Синграули;سنگراؤلی;سینگراولی;सिंगरौली;সিংরাউলি;ସିଙ୍ଗରାଉଲି;辛格劳利; +city::7284820;Jaigaon;; +city::7302806;Bellampalli;Bellampalle;bellampalli;బెల్లంపల్లి; +city::7302810;Gaddi Annaram;Gaddi Annaram;Gaddiannaram; +city::7302826;Lal Bahadur Nagar;L.B.Nagar;Lal Bahadur Nagar;Lalbahadur Nagar; +city::7302828;Malkajgiri;ma er ka jie ji li;makajgyry;malakajagiri;malkajaganja;mlkajgyry;ماکاجگیری;ملکاجگیری;मल्कजगञ्ज;মালকাজগিরি;మల్కాజ్‌గిరి;马尔卡杰吉里; +city::7302829;Mandamarri;mandamarri;మందమర్రి; +city::7302830;Chinnachowk;Chinna Chowk;Chinnachowk; +city::7302833;Gajuwaka;gajuvaka;గాజువాక; +city::7302844;Ponnur;; +city::7302845;Quthbullapur;Quthbullapur;Qutubullapur; +city::7302847;Palwancha;Paloncha;Palwancha; +city::7302856;Serilingampalle;Serilingampalle;Serilingampally; +city::7302861;Ashoknagar Kalyangarh;; +city::8347656;Ramagundam;RMD;Ramagundam;la ma gu en da mu;ramagndm;ramagundam;ramagundam mandala;ramagundama;ramagwndam;ramakuntam;Рамагундам;راماگندم;راماگوندام;راماگڈم;रामगुंडं मण्डल;রামগুন্দম;ରାମଗୁଣ୍ଡମ;ராமகுண்டம்;రామగుండం;拉马古恩达姆; +city::9781227;Kultali;; +city::10263232;Deoli;Deoli; +city::89570;Zaxo;Qada' Zakhu;Qaḑā’ Zākhū;Zakhaw;Zakho;Zakhu;Zakhu Qadha';Zaxo;Zaxu;Zākhaw;Zākhū;Zākhū Qadhā’;qdaʾ zakhw;zakhw;Заху;زاخو;زاخۆ;قضاء زاخو; +city::89824;Umm Qasr;Omolgasr;Um Kasr;Umm Qasr;Umm Qaşr;am qsr;ام قصر; +city::90026;Tozkhurmato;Khurmati;Touz Hourmato;Tozkhurmato;Tozkhurmatu;Tuz;Tuz Kermatli;Tuz Khurmatli;Tuz Khurmatu;Tuz Khurmatu District;Tuz Xurmatu;Tuzkhurmatu;twz;twz khwrmatw;twzkhwrmatw;Ţūz;Ţūz Khūrmātū;Ţūzkhūrmātū;توزخورماتو;طوز;طوز خورماتو;طوزخورماتو; +city::90708;Sinah;Sina;Sinah;Sine;Sîne;Sīnah;Sīnā;synt;سينة;سينە; +city::91597;Samarra';Saimarreh;Samara;Samarra;Samarra';Samarrah;Sāmarrah;Sāmarrā’;سامراء; +city::94787;Kirkuk;KIK;Karkh Slukh;Karkuk;Karkúk;Karkūk;Kerkouk;Kerkuek;Kerkuk;Kerkûk;Kerkük;Kirkoek;Kirkouk;Kirkuk;Kirkukas;Kirkúk;Kirkūk;Kərkük;ji er ku ke;khir khuk;kileukukeu;kirukuku;krk slwk;krkwk;kyrkwk;Κιρκούκ;Киркук;Кіркук;Кәркүк;Քիրքուք;כירכוכ;كركوك;كه‌ركووك;كەركوك;کرکوک;کەرکووک;ܟܪܟ ܣܠܘܟ;കിർകുക്ക്;คีร์คูก;კირკუკი;キルクーク;基爾庫克;키르쿠크; +city::94824;Karbala;Gorad Kerbela;Karbala;Karbala';Karbalaa;Karbalo;Karbalá;Karbalā’;Karbila;Karmpala;Kerbala;Kerbela;Kərbəla;Meshed Hussain;Meshed Hussein;Nainawa;Qerbelaja;Shathi'ul-Furat;Vilojati Karbalo;al-Ghadiriya;ka er ba la;kaleuballa;karabala;karbala;karpala;karubara;karubara xian;krbla;ktrbala;Καρμπάλα;Вилояти Карбало;Горад Кербела;Карбала;Кербала;Кербела;Քերբելա;כרבלא;מחוז כרבלא;كةربالا;كربلاء;محافظة كربلاء;کربلا;کەربەلا;ڪربلا;करबला;কারবালা;ਕਰਬਲਾ;கர்பலா;കർബല;ქარბალა;カルバラー;カルバラー県;卡爾巴拉;카르발라; +city::95446;Erbil;Arbeel;Arbela;Arbil;Arbēla;Arbīl;EBL;Erbil;Hawler;Hawlēr;Hewler;Hewlêr;Irbil;Irbīl;Viloati Arbil;ai er bi lei sheng;arbyl;arubiru xian;hەwlێr;mhafzt arbyl;Арбил;Вилояти Арбӣл;מחוז ארביל;أربيل;إربيل;اربیل;محافظة أربيل;هەولێر;アルビール県;埃爾比勒省; +city::96205;Halabjah;Alabja;Halabdscha;Halabia;Halabja;Halabjah;Halebdja;Halebja;Halebjeh;Halepce;Halepçe;Helebce;Helepce;Helepçe;Khalabdzha;hlbchh;hlbjt;Халабджа;حلبجة;حلبچه; +city::96994;Dihok;Dahuk;Dahūk;Dakhuk;Dihok;Dihuk;Dihōk;Dihūk;Dohuk;Duhok;Duhuk;Dûhok;dahuk;dhwk;dhۆk;Дахук;دهوك;دهوک;دهۆك;دهۆک;دووهۆک;دَهُکْ;ܢܘܗܕܪܐ; +city::97417;Jamjamal;Chamchamal;Chamchamāl;Chemchemal;Chemchemał;Chemchemāl;Jamjamal;Jamjamāl;Shamshamal;Shamshamāl;chmchmal;chەmchەmaڵ;jmjmal;جمجمال;چمچمال;چەمچەماڵ; +city::97990;Baqubah;Ba'quba;Ba'qubah;Bakouba;Bakuba;Baquba;Baqubah;Baqubeh;Ba‘qūbah;Ba’qūba;XQV;ba gu bai;Бакуба;بعقوبة;巴古拜; +city::98182;Baghdad;BGW;Bagda;Bagdad;Bagdadas;Bagdado;Bagdat;Bagdate;Bagdatum;Bagdod;Bagdá;Bagdád;Baghdad;Baghdād;Bağdad;Bağdat;Beghdad;Bexda;Lungsod ng Baghdad;ba ge da;bagadada;bageudadeu;bagudado;bghdad;bەghdad;paktat;Βαγδάτη;Багдад;Бағдод;Բաղդադ;בגדאד;بغداد;بەغداد;ܒܓܕܐܕ;बगदाद;பக்தாத்;པ་ག་ཏ;ባግዳድ;バグダード;巴格达;바그다드; +city::98245;Az Zubayr;Az Zubair;Az Zubayr;Az Zuhair;El Zubair;Zobier;Zubair;alzbyr;الزبير; +city::98463;As Sulaymaniyah;Al-Sulaimaniya;As Sulaymaniyah;As Sulaymānīyah;As-Sulajmanijja;ISU;Silemani;Silêmanî;Sleimani;Sleimāni;Slemani;Slêmanî;Slēmānī;Solimania;Souleimaniye;Sueleymaniye;Sulaimania;Sulaimanieh;Sulaimaniya;Sulaimaniyya;Sulaimany;Sulaymaniyah;Sulaymaniyya;Sulaymānīyah;Suleimania;Suleimaniya;Sulejmanija;Süleymaniye;alslymanyt;slymanyh;Сулеймания;السليمانية;سلیمانیه;سلێمانى;سلێمانی; +city::98530;As Samawah;As Samawah;As Samāwah;SAMAWA;Samava;Samawa;Samawah;Samāwah;alsmawh;Самава;السماوه; +city::98622;Ash Shatrah;Ash Shatrah;Ash Shaţrah;Shatra;Shatrat al Muntafiq;Shatreh;Shatret el Muntefiq;Shattra;Shattrah el Muntifik;alshtrt;الشطرة; +city::98629;Ash Shamiyah;Ash Shamiya;Ash Shamiyah;Ash Shāmīya;Ash Shāmīyah;Shamiya;Ummal Barur;alshamyt;الشامية; +city::98717;Ramadi;Al-Ramadi;Al-Rumadi;Ar Ramadi;Ar Ramādī;Ar-Ramadi;Ar-Ramādī;Ehr-Ramadi;Er-Ramadi;Ramadi;Ramadie;Ramadieh;Ramadiyah;Ramanti;Ramádi;Ramádí;Rumadiya;Rumadiyeh;Rumādīya;Rumādīyeh;XTM;alrmady;la ma di;lamadi;ramadi;ramady;rmady;Ραμάντι;Ер-Рамаді;Рамади;Эр-Рамади;רמאדי;الرمادى;الرمادي;رامادی;رمادی;ਰਮਾਦੀ;റമാദി;რამადი;ラマーディー;拉馬迪;라마디; +city::98854;Nasiriyah;Al-Nasiriya;An Nasiriya;An Nasiriyah;An Nāsirīya;An Nāşirīyah;An-Nasiriya;Muntafik;Muntifik;Nasirija;Nasirijja;Nasiriya;Nasiriyah;Nasiriyeh;Nasiriyya;Nasrie;Nasriye;Nāsirīyah;XNH;alnasryh;alnasryt;nashiriya;Насирия;الناصرية;الناصريه;ナーシリーヤ; +city::98860;Najaf;Al Najaf al Ashraf;An Najaf;An Najaf al Ashraf;An-Nadzaf;An-Nadzhaf;An-Nadżaf;An-Najaf;Ehn-Nadzhaf;Meshed 'Ali;Meshed ’Ali;NJF;Nachaf;Nadjaf;Nadschaf;Nadzaf;Nadzafas;Nadzhaf;Nadžaf;Nadžafas;Nagafo;Najaf;Najaf - njf;Najaf - نجف;Natzaf;Nayaf;Naĝafo;Necef;Nedjef;Nedzsef;Neshed Ali;Nəcəf;alnjf;alnjf alashrf;na jie fu;najafa;najafu;najap;najapeu;najapi;ngp;njf;Νατζάφ;Ан-Наджаф;Наджаф;Наџаф;Эн-Наджаф;נגף;النجف;النجف الاشرف;نجف;नजफ़;நஜாப்;നജഫ്‌;ნაჯაფი;ナジャフ;納杰夫;나자프; +city::99062;Al Miqdadiyah;Al Miqdadiyah;Al Miqdādīyah;Muqdadiyah;Shahraban;Shahroban;Shahrābān;almqdadyt;المقدادية; +city::99072;Mosul;Al Mawsil;Al Mawşil;Al Mosul;Al Musil;Al Mūşil;Mosel;Mosoel;Mosouli;Mossoul;Mossul;Mosul;Mosul khot;Mosula;Mosulas;Mosulo;Moszul;Mousl;Moussoul;Musil;Musił;Musul;Musıl;Mûsil;OSM;almwsl;mo su er;mo sul;mocul;mosala;mosul;mosula;mosuli;mosuru;mwsl;mwswl;mwsڵ;Μοσούλη;Мосeл;Мосул;Мосул хот;Մոսուլ;מאסול;מוסול;الموصل;موسڵ;موصل;موصول;مووسڵ;ܡܘܨܠ;मोसुल;ਮੋਸਲ;மோசுல்;മൊസൂൾ;โมซูล;მოსული;モースル;摩苏尔;摩蘇爾;모술; +city::99131;Al Kut;Al Koet;Al Kut;Al Kūt;Al-Kut;Kut;Kut al Amara;Kut al Amarah;Kut al Imara;Kut al Imāra;Kut al `Amarah;Kut-al-Almarah;Kut-al-Almārah;Kut-al-Imarah;Kūt;Kūt al ‘Amārah;Kūt-al-Imārah;alkwt;kwt;Кут;الكوت;كوت; +city::99135;Kufa;Al Kufa;Al Kūfa;Al-Kufa;Al-Kufah;Al-Kūfah;Cufa;Ehl'-Kufa;Gorad Ehl'-Kufa;Koefa;Koufa;Kufa;Kufah;Kufe;Kufə;Kúfa;Kūfa;Qada' al Kufah;Qaḑā’ al Kūfah;alkwfh;alkwft;ku fei;kufa;kupa;kupha;kwfh;kwph;Κούφα;Горад Эль-Куфа;Куфа;Эль-Куфа;כופה;الكوفة;الكوفه;كوفه;کوفه;کوفہ;کووفە;ކޫފާ;कूफ़ा;কুফা;ਕੂਫ਼ਾ;കൂഫ;კუფა;クーファ;库费;쿠파; +city::99169;Khalis;Al Khalis;Al Khāliş;Al'-Khalisa;Diltawah;Diltāwah;Khalis;Khāliş;khals;Аль-Халиса;خالص; +city::99344;Al Hindiyah;Al Hindiyah;Al Hindīyah;Hindiya;Hindīya;Qada' al Hindiyah;Qaḑā’ al Hindīyah;Tuwairij;Tuwairji;Tuwairīj;Tuwayrij;alhndyt;Ţuwayrīj;الهندية; +city::99347;Al Hillah;Al Hilla;Al Hillah;Al Ḩillah;Al'-Khilla;Al-Hella;Hilah;Hilla;Hille;Hillé;alhlt;Аль-Хилла;الحلة; +city::99350;Al Hayy;Al Hai;Al Hay;Al Hayy;Al Ḩayy;Al'-Khaja;Kut al Hai;alhy;Аль-Хая;الحي; +city::99446;Al Faw;Al Faw;Al Fāw;Al'-Fau;Fao;Fao Terminal;Fava;alfaw;Аль-Фау;الفاو; +city::99454;Al Fallujah;Al Falluja;Al Fallujah;Al Fallūja;Al Fallūjah;Al Falooja;Al-Falludza;Al-Falludża;Al-Falluja;Falloujah;Falludscha;Falluja;Fallujah;Fallūjah;Faludza;Faludzha;Faluga;Faluja;Faluya;Faluĝa;Feludja;Feluja;TQD;alflwjt;faruja;fei lu jie;Фалуджа;Фалуџа;الفلوجة;ファルージャ;费卢杰; +city::99532;Basrah;Al Basrah;Al Başrah;Al-Basra;BSR;Bacora;Basora;Basra;Basrah;Bassora;Bassorah;Bassra;Baçorá;Busra;Busrah;Bussora;Bàssora;albsrt;ba shi la;ba si la;basura;bsrh;bsrt;bzrh;Басра;בצרה;البصرة;بصرة;بصره;ܒܨܪܐ;バスラ;巴士拉;巴斯拉; +city::99608;Al 'Amarah;Al `Amarah;Al ‘Amārah;Amara;Amarah;Amare;Amaré;`Amara;alʿmart;العمارة;العماره;‘Amāra; +city::99762;Ad Diwaniyah;Ad Diwania;Ad Diwaniya;Ad Diwaniyah;Ad Dīwānīya;Ad Dīwānīyah;Al-Diwaniya;Divanija;Diwanie;Diwaniya;Diwaniyan;Diwaniyeh;Dīwanīya;Hiska;aldywanyt;Дивания;الديوانية; +city::100077;Abu Ghurayb;Abou Ghraib;Abu Ghraib;Abu Ghraib - abw ghryb;Abu Ghraib - أبو غريب;Abu Ghraib Farms;Abu Ghuraib;Abu Ghurayb;Abu-Grejb;Abū Ghraib Farms;Abū Ghurayb;Mazari` Abi Gharib;Mazari` Abi Ghurayb;Mazāri‘ Abī Ghurayb;Mazārı‘ Abī Gharīb;abw ghryb;Абу-Грейб;אבו גרייב;أبو غريب;ابو غریب; +city::14256;Azadshahr;Azad Shahr;Azadshahr;azadshhr;Āzādshahr;آزادشهر; +city::23814;Kahriz;Kahriz;Kahrīz;khryz;کهریز; +city::24851;Nurabad;Nurabad;Nūrābād;nwr abad;Нурабад;نور آباد; +city::32767;Qarchak;Qarchak;qrchk;قرچك; +city::32909;Shahre Jadide Andisheh;Shahrak-e Andisheh;Shahrak-e Andīsheh;shhr jdyd andyshh;شهر جدید اندیشه; +city::41210;Khorramdarreh;Khorramdareh;Khorramdarreh;Khurramdarreh;Khurramdarrekh;khrmdrh;خرمدره; +city::66093;Yasuj;Jasudz;Jasudzh;Jasudż;Jasudž;Jásúdž;YES;Yasooj;Yasuc;Yasudsch;Yasuj;Yasûc;Yesuj;Yesūj;Yāsūj;ya su ji;yasuj;yasuja;yasujeu;yasuju;yaswj;yiswj;yswj;Ёсӯҷ;Ясудж;Յասուջ;ياسوج;يَسُّج;يِسوج;یاسوج;یسوج;यासूज;ヤースージュ;亞蘇季;야수즈; +city::111421;Zarand;Zarand;zrnd;زرند; +city::111453;Zanjan;JWN;Zanjan;Zanjān;Zendzhan;Zenjan;Zenjān;znjan;Зенджан;زنجان; +city::111822;Yazd;AZD;Dakbayan sa Yazd;Giaznt;Jazd;Jazdo;Jezd;Jezdas;Yasd;Yazd;Yezd;Yəzd;iezdi;ya ci de;yajeudeu;yazda;yazudo;yzd;Γιαζντ;Јазд;Йезд;Язд;Յազդ;יזד;يزد;یزد;यज़्द;იეზდი;ヤズド;亚兹德;야즈드; +city::112214;Varamin;Esfandabad;Esfandābād;Varamin;Varāmīn;Veramin;Verāmin;varamin;wramyn;Варамин;ورامين; +city::112646;Torbat-e Heydariyeh;Torbat-e Heydariyeh;Torbat-e Ḩeydarīyeh;Torbat-e-Heydari;Turbat-i-Haidari;Turbet-i-Haidari;trbt hydryh;تربت حیدریه; +city::112931;Tehran;THR;Taekhran;Tahran;Techerane;Teera;Teerao;Teerã;Teerão;Tegeran;Teheran;Teherana;Teheranas;Teherano;Teherán;Teherāna;Tehran;Tehrano;Tekheran;Téhéran;de hei lan;teharan;teharana;tehelan;teheran;tehran;teirani;thran;thrn;thrwn;tihiran;tihran;Τεχεράνη;Тæхран;Тегеран;Техеран;Теҳрон;Թեհրան;טהראן;טהרן;تهران;تهرون;تِهران;تِهِرَن;تہران;طهران;ܛܗܪܐܢ;तेहरान;তেহরান;தெஹ்ரான்;เตหะราน;ཏེ་ཧི་རན​།;თეირანი;ቴህራን;テヘラン;德黑兰;테헤란; +city::113491;Takestan;Seyadahan;Seyādahan;Siadehan;Siahdehan;Siakh-Degen;Siakhdekhan;Sīahdehān;Sīādehan;Takestan;Takistan;Tākestān;Tākistān;syadihan;syahdihan;takstan;تاكستان;سيادِهَن;سيَهدِهان; +city::113508;Takab;Takab;Takan Tepe;Takāb;tkab;تکاب; +city::113646;Tabriz;Gorad Tehbryz;TBZ;Tabrez;Tabris;Tabriz;Tabrizo;Tabríz;Tabrīz;Taebris;Taebriz;Tampriz;Tauris;Tebriz;Tebriza;Tebrizas;Tebrīza;Tewrez;Tewrêz;Toewriz;Täbris;Täbriz;Töwriz;Təbriz;da bu li shi;ta bris;tabareza;tabariza;tabeulijeu;tabris;taburizu;tavrizi;tbryz;Ταμπρίζ;Горад Тэбрыз;Табрез;Табриз;Тебриз;Тәбриз;Թավրիզ;טאבריז;תבריז;تبريز;تبریز;تەورێز;तबरेज़;ਤਬਰੀਜ਼;ടാബ്രിസ്;ตาบริซ;ཊ་བི་རི་ཛ།;თავრიზი;タブリーズ;大不里士;타브리즈; +city::114259;Sirjan;SYJ;Sa'idabad;Sa‘īdābād;Sircan;Sirdschan;Sirdzan;Sirdzhan;Sirdżan;Sirdžan;Sirjan;Sīrjān;sirajana;syrjan;xi er zhan;Серҷон;Сирджан;سيرجان;سیرجان;सीरजान;錫爾詹; +city::114584;Shushtar;Shooshtar;Shushtar;Shushtehr;Shustar;Shūshtar;Shūstar;shwshtr;Шуштэр;شوشتر; +city::114593;Shush;Shoosh;Shush;Shūsh;Susa;Suse;Susy;Suza;Suzo;Suzy;Súsy;Sūsa;shwsh;susa;Сузы;شوش;スーサ; +city::114930;Shirvan;Shirvan;Shīrvān;shyrwan;شیروان; +city::115019;Shiraz;Chimaz;Chiraz;Gorad Shyraz;SYZ;Schiras;Sheroz;Shiraz;Shīrāz;Siraz;Siraza;Sirazas;Sirazo;Siráz;Sjiraz;Sziraz;Xiraz;chi ras;she la zi;shirazi;shirazu;shyraz;silajeu;Ŝirazo;Şiraz;Şîraz;Širaz;Širazas;Šíráz;Šīrāz;Šīrāza;Σιράζ;Горад Шыраз;Шероз;Шираз;Շիրազ;שיראז;شيراز;شیراز;ชีราซ;შირაზი;シーラーズ;設拉子;시라즈; +city::115770;Shahr-e Kord;CQD;QHK;Shahr Kord;Shahr Kurd;Shahr-e Kord;Shahrekord;Shakhre-Kord;shhr krd;Шахре-Корд;شهر كرد; +city::115781;Shahr-e Babak;Shahr Babak;Shahr Bābak;Shahr-e Babak;Shahr-e Bābak;Shahr-i-Babak;Shahr-i-Bābak;shhr babk;شهر بابک; +city::116402;Semnan;Samnan;Samnān;Semnan;Semnān;smnan;Семнан;سمنان; +city::116667;Saveh;Sava;Saveh;Sāveh;sawh;Сава;ساوه; +city::116996;Sari;SRY;Sari;Sari i Iran;Saris;Sariyo;Sarí;Sarî;Shahr-i-Tajan;Shari-i-Tajan;Sori;Szari;Szári;Sárí;Sārī;sa li shi;sali;sari;sary;sary ayran;Σάρι;Сари;Сарі;Сорӣ;Սարի;سارى;ساري;ساری;ساری، ایران;सारी;სარი;サーリー;薩里市;사리; +city::117392;Saqqez;Saggiz;Saggız;Saghez;Saghghez;Sakez;Sakezo;Sakiz;Sakkiz;Sakīz;Saqez;Saqqez;Saqqez (2);Saqqiz;Saqqız;Sekkez;Seqiz;sa gai zi;saghiz;sakkeja;sakyz;saqiz;sqz;sqz (1);sqz (2);Саққиз;Секкез;سقز;سقّز (1);سقّز (٢);سَغِز;سَقِّز;سَكيز;سەقز;सक्केज;薩蓋茲; +city::117574;Sanandaj;Gorad Senendehdzh;SDG;Sanandadsch;Sanandadz;Sanandadż;Sanandadž;Sanandago;Sanandaj;Sanandaĝo;Sanandij;Senendec;Senendedzas;Senendedzh;Senendedžas;Senna;Senneh;Sinandij;Sine;Sinneh;Sənəndəc;sa nan da ji;sanandaja;sanandaji;sina;sinih;snndj;Горад Сенендэдж;Санандаџ;Санандаҷ;Сенендедж;Сәнәндәҗ;Սանանդաջ;سنندج;سنە;سِنَّ;سِنِّه;सनंदज;सनंदाज;萨南达季;사난다지; +city::117656;Salmas;Dilmagan;Dilman;Dīlmagān;Dīlman;Salmas;Salmās;Shahpoor;Shahpur;Shapur;Shāhpūr;slmas;Салмас;سلماس; +city::118063;Sabzevar;AFZ;Sabzawar;Sabzawār;Sabzevar;Sabzevār;Sabzewar;Sabzivor;Sebzevar;Səbzivar;sa bo ze wa er;sab si war;sabzevara;sbzwar;Сабзевар;Сабзивор;Себзевар;سبزوار;सब्ज़ेवार;ซับซีวาร์;薩卜澤瓦爾; +city::118367;Robat Karim;Robat Karim;Robāţ Karīm;Shahriar;Shahryar;Shahryār;rbat krym;رباط كريم; +city::118743;Rasht;RAS;Raixt;Rascht;Rasht;Rasjt;Rast;Rasto;Raszt;Raŝto;Rašt;Reshh;Resht;Rest;Restas;Reşt;Reštas;Rəşt;la shen te;lasyuteu;rashuto;rasta;reshti;rsht;Рашт;Решт;Рещ;Рәшт;Ռեշտ;ראשת;رشت;ڕەشت;रश्त;แรชต์;რეშთი;ラシュト;拉什特;라슈트; +city::118994;Rafsanjan;Bahramabad;Bahrāmābād;RJN;Rafsandzhane;Rafsanjan;Rafsanjān;Rafsinjan;Rafsinjān;rfsnjan;Рафсанджане;رفسنجان; +city::119115;Quchan;Gochan;Quchan;Qūchān;qwchan;قوچان; +city::119161;Qorveh;Qorveh;Qurve;Qurveh;qrwh;قروه; +city::119208;Qom;Dakbayan sa Qom;Ghom;Gorad Kum;Homo;Kom;Kum;Kum shaary;Kumas;QUM;Qom;Qum;Qûm;gomu;koma;ku mu;kum;kuvom;qm;qwm;Ĥomo;Горад Кум;Ком;Кум;Кум шаары;Қум;קום;قم;قوم;कोम;குவோம்;ゴム;库姆;쿰; +city::119505;Qazvin;Dakbayan sa Qazvin;GZW;Gazvin;Kazvin;Kazvinas;Kazvín;Kazwin;Kuazvin;Qazvin;Qazvín;Qazvīn;Qazwen;Qazwên;Qəzvin;gazuvu~in;jia ci wen;kajeubin;kazvina;kxs win;qzwyn;Казвин;Казвін;Къазвин;Қазвин;Ղազվին;قزوين;قزوین;قەزوین;कज़्वीन;กอซวีน;ყაზვინი;ガズヴィーン;加兹温;카즈빈; +city::120931;Sarpol-e Zahab;Pol-e Zahab;Pol-e Zohab;Pol-e Z̄ahāb;Pol-e Z̄ohāb;Sar-e Pol-e Zahab;Sar-e Pol-e Z̄ahāb;Sar-i-Pul Zuhab;Sar-ī-Pūl Zūhāb;Sari-Pul;Sarpol;Sarpol-e Zahab;Sarpol-e Z̄ahāb;Sarī-Pūl;sr pl dhhab;سر پل ذهاب; +city::120972;Pishva;Pichva;Pishva;Pishyan;Pīchvā;Pīshvā;Pīshyān;pychwa;pyshwa;pyshyan;پيشوا;پيشيان;پيچوا; +city::121110;Piranshahr;KHA;Khaneh;Khāneh;Okrug Peronsahr;Okrug Peronšahr;Piran Shahr;Piransaher;Piransahr;Piransar;Piransara;Piranschahr;Piransehr;Piranshahr;Piranshekhr;Piransherkh;Piransjahr;Piranszahr;Piranxahr;Piranşehr;Piranşəhr;Piranšaher;Piranšahr;Piranšāra;Pîranşar;Pīrān Shahr;Pīrānshahr;byranshhr;pi lan sha he er;piranshafuru;pyranshar;pyranshhr;Пероншаҳр;Пираншехр;Піраншерх;بیرانشهر;پیرانشار;پیرانشهر;پیرانشھر;پیرانشہر;ピーラーンシャフル;皮兰沙赫尔; +city::121380;Parsabad;Farsabad;Fārsābād;PFQ;Parsabad;Pārsābād;fars abad;pars abad;Парсабад;فارس آباد;پارس آباد; +city::121795;Oshnaviyeh;Ashnooyeh;Oshnaviyeh;Oshnavīyeh;Oshnovieh;Oshnoviyeh;Oshnovīeh;Oshnovīyeh;Oshnuje;Ushnu;Ushnuiyeh;Ushnū;Ushnūīyeh;ashnwyh;Ошнуйе;اشنويه; +city::121801;Orumiyeh;OMH;Orumiyeh;Orūmīyeh;Ourmia;Reza'iyeh;Rezaeyeh;Rezaiyye;Rezâiyye;Rezā’īyeh;Rizaiyeh;Rizāiyeh;Urmia;Urmija;Urmiya;Urmiye;Urmía;Urumija;Urumiyeh;Urūmiyeh;arwmyh;arwmyt;shhrstan arwmyh;Úrmia;Ûrmiye;Урмия;Урумия;אורמיה;أرومية;ارومیه;ارومیّه;شهرستان ارومیه;ܐܘܪܡܝܐ; +city::121925;Nurabad;Nurabad;Nūrābād;nwr abad;نور آباد; +city::122285;Nishabur;Nejsaburo;Nejŝaburo;Neyshabur;Neyshābūr;Nichapur;Nisabur;Nischapur;Nishabur;Nishapur;Nishopur;Nişabur;Nīshābūr;Nīshāpūr;nishapu;nysabwr;nyshabwr;nyshapwr;Нишапур;Нишопур;نيسابور;نیشابور;نیشاپور;ニシャプー; +city::122438;Nazarabad;Nazarabad;Nazarabad-e Bozorg;Naz̧arābād;Naz̧arābād-e Bozorg;nazarabadi buzurg;nzr abad;نظر آباد;نَظَرابادِ بُزُرگ; +city::122698;Naqadeh;Nagadeh;Naghadeh;Naghdeh;Nakhuda;Naqadeh;Nākhuda;nqdh;نقده; +city::122915;Nahavand;Nachavant;Nagavande;Nahavand;Nahāvand;Nehavend;Nehāvend;Nihavand;Nīhāvand;nhawnd;nihavu~ando;Ναχαβάντ;Нагаванде;نهاوند;ニハーヴァンド; +city::123941;Minab;Minab;Mīnāb;mynab;Минаб;ميناب; +city::124085;Miandoab;Meyandoab;Meyāndoāb;Miandoab;Miandow Ab;Miandowab;Mianduab;Miyandoab;Miyanduab;Miyāndūāb;Mīyāndoāb;Mīāndow Āb;Mīāndowāb;Mīāndoāb;Mīāndūāb;myandwab;Миандоаб;میاندوآب; +city::124193;Meybod;Maibud;Meybod;mybd;ميبد; +city::124620;Masjed Soleyman;Masjed Soleiman;Masjed Soleyman;Masjed Soleymān;Masjed-e Soleyman;Masjed-e Soleymān;Masjid-i-Sulaiman;msjd slyman;مسجد سلیمان; +city::124665;Mashhad;Gorad Meshkhed;MHD;Masant;Masat;Maschhad;Mashad;Mashado;Mashhad;Mashkhad;Masyhad;Maxhad;Maŝhado;Maşat;Mašhad;Mașhad;Meixad;Meshed;Mesheda;Meshedas;Meshkhed;MeshkhӀed;Meszhed;Mexed;Meşhed;Mešheda;Mešhedas;Məshəd;Məşhəd;ma shen ha de;mach had;macukat;masahada;mashuhado;masyuhadeu;meshhedi;mshd;mshhd;Μασάντ;Горад Мешхед;Машхад;Машҳад;Мешхед;МешхӀед;Мешһед;Мәшһәд;Մաշհադ;משהד;مشهد;مشہد;مەشھەد;मशहद;মাশহাদ;ਮਸ਼ਹਦ;மசுகாத்;മശ്‌ഹദ്;มัชฮัด;მეშჰედი;マシュハド;馬什哈德;마슈하드; +city::124778;Marivan;Dezh Shahpur;Dezh Shapoor;Dezh Shāhpūr;Marivan;Marīvān;Qal`eh-ye Marivan;Qal‘eh-ye Marīvān;dizh shahpwr;mrywan;دِژ شاهپور;قَلعِۀ مَريوان;مریوان; +city::124862;Marand;Marand;Morand;mrnd;Маранд;مرند; +city::125185;Malayer;Daulatabad;Daūlatābād;Dowlatabad;Dowlatābād;Malayer;Malāyer;mlayr;ملایر; +city::125188;Malard;Malar;Malard;Malār;Malārd;Melard;Melārd;malar;mlard;ملارد;مَلار; +city::125446;Mahabad;Mahabad;Mahābād;Makhabad;Mehabad;Mehābād;Saujbulagh;Sāūjbulāgh;mah abad;mhabad;mih abad;Махабад;مهاباد;مَه آباد;مِه آباد; +city::125897;Langarud;Langarood;Langarud;Langarūd;Langerud;Langerūd;Shahr-e Langarud;Shahr-e Langarūd;lngrwd;لنگرود; +city::126409;Kuhdasht;Kuh-i-Dasht;Kuhdasht;Kūh-ī-Dasht;Kūhdasht;kwhdsht;کوهدشت; +city::126972;Khvoy;KHY;Khoi;Khowy;Khoy;Khvoy;khwy;خوی; +city::127319;Khorramshahr;Al-Muhammarah;Choremsehras;Choremšehras;Chorramsahr;Chorramschahr;Chorramszahr;Chorramšahr;Horamsaher;Horamšaher;Huerremsehr;Hürremşehr;Jorramchar;Khoramshahr;Khorram Shahr Abadan;Khorram Shahr Ābādān;Khorramchahre;Khorramshahr;Khorramxahr;Khorremshekhr;Khunin Shahr;Khurramshahr;Khūnīn Shahr;Koramshar;Koramsjar;Mohammerah;Muhammerah;Xürrəmşəhr;almhmrt;bndr khrmshhr;horramushafuru;huo la mu sha he er;khrmshhr;khurramasahara;Корамшар;Хорремшехр;Хуррамшаҳр;المحمرة;بندر خرمشهر;خرمشهر;خرمشھر;खुर्रमशहर;ホッラムシャフル;霍拉姆沙赫尔; +city::127349;Khorramabad;KHD;Khorramabad;Khorramābād;Khur Ramabad;Khur Ramābād;Khurramobod;khrm abad;Хуррамобод;خرم آباد; +city::127403;Khomeyn;Khomein;Khomeyn;Khomeīn;Khowmeyn;Khumain;Khūmaīn;khmyn;khumin;خمين;خُومِين; +city::128008;Khalkhal;Harau;Harowabad;Herau;Herauabad;Heroabad;Herow;Herowabad;Herowābād;Heroābād;Hirabad;Hirābād;Khalkhal;Khalkhāl;hrw abad;khlkhal;خلخال;هرو آباد; +city::128226;Kermanshah;Bahtaran;Bakhtaran;Bākhtarān;KSH;Kermansah;Kermansaho;Kermanschah;Kermanshah;Kermanshahan;Kermanshakh;Kermanŝaho;Kermânsâh;Kermānschāh;Kermānshāh;Kermānshāhān;Kirmansah;Kirmanşah;Kirmasan;Kirmaşan;Province de Kermanshah;Provincia de Kermanshah;Provinco Kermansah;Provinco Kermanŝah;Província de Kermanshah;Qahremanshahr;Qahremānshahr;astan krmanshah;ke er man sha he;kerumansha;krmanshah;Керманшах;Кирмоншоҳ;Устони Кирмоншоҳ;استان کرمانشاه;كرمانشاه;کرمانشاه;ケルマーンシャー;克尔曼沙赫; +city::128234;Kerman;Carmana;Dakbayan sa Kerman;Dakbayan sa Kermān;Gorad Kerman;KER;Kerman;Kermanas;Kermano;Kermon;Kermán;Kermān;Kirman;Kirmon;karmana;ke er man;keleuman;kermani;keruman;krman;Горад Керман;Керман;Кирмон;Կերման;כרמאן;كرمان;کرمان;कर्मान;ქერმანი;ケルマーン;克尔曼;케르만; +city::128321;Kazerun;Kasrun;Kazarun;Kazeroun;Kazerun;Kazeruna;Kāzarūn;Kāzerūn;kazrwn;Казеруна;كازرون; +city::128447;Kashmar;Kashmar;Khashmar;Kāshmar;Soultanabad;Torshiz;Torshīz;Turshiz;Turshīz;kashmr;کاشمر; +city::128747;Karaj;Heredi;Karadj;Karadje;Karadsch;Karadz;Karadzs;Karadż;Karadž;Karag;Karaj;Karatz;Karaĝ;Karej;Kerec;Keredi;Keredzas;Keredzh;Keredžas;Kerezh;Kərəc;Leredi;PYK;QKC;Qasabeh-e Karaj;Qaşabeh-e Karaj;ka la ji;kairaija;kalaji;karaj;karaji;kha rac;krj;kyaraji;qasabihi karaj;Καράτζ;Карай;Караџ;Караҷ;Кередж;Кереж;כאראג;قَصَبِهِ كَرَج;كرج;کرج;کەرەج;कैरैज;கராஜ்;คาราจ;ქარაჯი;キャラジ;卡拉季;카라지; +city::128831;Kangavar;Kangavar;Kangāvar;kngawr;کنگاور; +city::128905;Kamyaran;Kamyaran;Kāmyārān;kamyaran;کامیاران; +city::130802;Ilam;Elam;Elām;IIL;Ilam;ailam;aylam;ylam;Īlām;Илам;اِلام;ایلام;يلام; +city::131962;Harsin;Harsin;Harsīn;hrsyn;هرسین; +city::132144;Hamadan;Ecbatana;HDM;Hamadan;Hamadān;Hamedan;Hamedān;Khamadan;hmdan;Хамадан;همدان; +city::132892;Gorgan;Asterabad;Asterābād;GBT;Gorgan;Gorgān;Gurgan;Gurgon;Gūrgān;Hirkanio;aastir abad;grgan;gwrgan;Горган;Гургон;اَستِر آباد;گرگان;گورگان; +city::132938;Gonbad-e Kavus;Dashte Gorgan;Gonbad Qabus;Gonbad Qavoos;Gonbad Qābūs;Gonbad-e Kavus;Gonbad-e Kāvūs;Gonbad-e Qabus;Gonbad-e Qābūs;Gunbad-i-Kawas;Gunbad-i-Kawus;Gunbad-i-Kāwās;Gunbad-i-Kāwūs;Gunbad-i-Qabus;Gunbad-i-Qābūs;gnbd kawws;gnbd qabws;گنبد قابوس;گنبد کاووس; +city::134217;Bandar-e Ganaveh;Bandar Ganaveh;Bandar Ganāveh;Bandar-e Ganaveh;Bandar-e Ganāveh;Bandar-e Genaveh;Bandar-e Genāveh;Bandar-e-Gonaveh;Bandar-e-Gonāveh;Ganaveh;Ganāveh;Genaveh;Genāveh;Gonaveh;Gonāveh;Kenareh;Kenâreh;bndri gnawh;ganawih;بندرِ گناوه;گَناوِه; +city::134518;Firuzabad;Firuzabad;Fīrūzābād;fyrwz abad;فیروز آباد; +city::134721;Fasa;FAZ;Fasa;Fassa;Fasā;fsa;فسا; +city::135298;Esfarayen;Esfarayen;Esfarāyen;Meyanabad;Meyanābād;Mianabad;Miyanabad;Mīyānābād;Mīānābād;asfrayn;اسفراین; +city::135423;Shahrud;Emamshahr;Emāmshahr;RUD;Shahrud;Sharud;Shāhrūd;Shārūd;aimamshahr;shahrwd;sharwd;اِمامشَهر;شارود;شاهرود; +city::136014;Dogonbadan;Do Gonbadan;Do Gonbadān;Dogonbadan;Dow Gonbadan;Dow Gonbadān;Du Gunbadan;Du Gunbadān;GCH;Gachsaran;Gachsārān;du gunbadan;gchsaran;دُو گُنبَدان;گچساران; +city::136987;Dehdasht;Dehdasht;Dehdast;Kuhgiluyeh;dhdsht;dihdast;دهدشت;دِهدَست; +city::137956;Darab;Darab;Darab-e 2;Dārāb;Dārāb-e 2;Yek;darab;darab 2;yk;داراب;داراب ٢;يک; +city::138025;Damghan;Damghan;Dāmghān;damghan;دامغان; +city::139223;Chalus;Chalus;Chālūs;chalws;Чалус;چالوس; +city::139817;Bushehr;Abu Shahr;Abu Shehr;Abuschehr;BUZ;Bandar Abu Shehr;Bandar Bushehr;Bandar Būshehr;Bandar-e Bushehr;Bandar-e Būshehr;Bouchehr;Buschehr;Buschir;Busehr;Bushehr;Busher;Bushir;Bushire;Būshehr;Būšehr;bndr bwshhr;bwshhr;bwshihr;Бушер;Бушир;Бӯшеҳр;Бӯшиҳр;بندر بوشهر;بوشهر;بوشِهر; +city::139889;Bukan;Bokan;Bowkan;Bowkān;Bukan;Būkān;bwkan;Букан;بوکان; +city::140044;Borujerd;Borudzherd;Borujerd;Borūjerd;Burujird;Būrūjīrd;brwjrd;bwrwjyrd;Боруджерд;بروجرد;بوروجيرد; +city::140046;Borujen;Amrujan;Amrūjān;Beroojen;Borujan;Borujen;Borūjen;Borūjān;Burujan;Burūjān;Urujan;Urūjān;aamrwjan;birujin;brwjn;burwjan;اَمروجان;بروجن;بُروجان;بِرُّجِن; +city::140097;Borazjan;Borazdjan;Borazjan;Borazjun;Borāzjān;Borāzjūn;brazjan;burazdjan;برازجان;بُرَزدجَن; +city::140380;Bojnurd;BJB;Bodzhnurd;Bojnord;Bojnourd;Bojnurd;Bojnūrd;Bujnurd;Bujnūrd;bjnwrd;Боджнурд;بجنورد; +city::140463;Birjand;Birdjand;Birdschand;Birdzhend;Birjand;Bīrjand;XBJ;byrjnd;Бирдженд;Бӣрҷанд;بيرجند;بیرجند; +city::140521;Bijar;Bidzhar;Bijar;Bījār;byjar;Биджар;بيجار; +city::140889;Bonab;Benab;Benāb;Binab;Bināb;Bonab;Bonāb;Bunab;bnab;Бонаб;بناب; +city::140918;Behshahr;Ashraf;Behshahr;Bekhshekhr;aashraf;bhshhr;Бехшехр;اَشرَف;بهشهر; +city::140951;Behbahan;Behbahan;Behbahān;Behbehan;Behbehān;bhbhan;بهبهان; +city::141584;Baneh;Bane;Baneh;Bani;Bāneh;banh;bani;Бани;بانه;بَنِ; +city::141679;Bandar-e Anzali;Bandar Anzali;Bandar Pahlavi;Bandar Pahlevi;Bandar-e Anzali;Bandar-e Anzalī;Bandar-e Pahlavi;Bandar-e Pahlavī;Enceli;Enzeli;Pahlavi;Pahlavī;Pahlevi;Pahlevī;Pehlevi;bndr anzly;بندر انزلی; +city::141681;Bandar Abbas;BND;Bandar Abas;Bandar Abbas;Bandar Abbas - بندر عباس;Bandar Abbás;Bandar `Abbas;Bandar `Abbasi;Bandar ‘Abbās;Bandar ‘Abbāsī;Bandar-Abbas;Bandar-Abbasz;Bandar-Abbos;Bandar-Abbász;Bandar-e Abbas;Bandar-e `Abbas;Bandar-e ‘Abbās;Bandare Abasas;Bander Abbas;Bantar Ampas;Bender Abas;Bender Abbas;Bender Ebbas;Bender-Abbas;Bəndər Abbas;Cambarao;Cambarão;Gombroon;Gorad Bendehr-Abas;Gumrun;Port Comorao;Port Comorão;a ba si gang;ban dar xab bas;bandaleuabaseu;bandara abbasa;bandara-e-abbasa;bender-abasi;bndr ʻbʼs;bndr ʿbas;gumbrun;Μπαντάρ Αμπάς;Бандар-Аббос;Бендер Абас;Бендер-Аббас;Горад Бендэр-Абас;Բանդեր Աբբաս;בנדר עבאס;بندر عباس;بندرعباس;بَندَر عَبّاسی;بَندَرِ عَبّاس;بەندەر عەباس;گُمبرُّن;बंदर-ए-अब्बास;বন্দর আব্বাস;บันดาร์อับบาส;ბენდერ-აბასი;バンダレ・アッバース;阿巴斯港;반다르아바스; +city::141736;Bam;BXR;Bam;bamu;bm;Бам;بم;バム; +city::142363;Babol;Babol;Babol';Babul;Balfrush;Barfarush;Barfrush;Barfurush;Bābol;Bābul;Bārfurush;babl;Баболь;بابل; +city::142872;Asadabad;Asadabad;Asadabada;Asadābād;asd abad;Асадабада;اسد آباد; +city::143073;Ardakan;Ardakan;Ardakān;Ardekan;ardkan;اردکان; +city::143083;Ardabil;ADU;Ardabel;Ardabil;Ardabīl;Ardebil;Ardebīl;Erdebil;aardibyl;ardbyl;Ərdəbil;Ардабел;اردبيل;اردبیل;اَردِبيل; +city::143127;Arak;Arak;Arak - sawh;Arak - ساوه;Arok;Arāk;Ehrak;Soltanabad;Solţānābād;Sultanabad;Sultānābād;`Iraq;arak;sawh;sultan abad;Арак;Арок;Эрак;اراک;ساوه;سُلطان آباد;‘Irāq; +city::143534;Amol;Amol;Amol';Amul;aml;Āmol;Амоль;آمل; +city::143748;Alvand;Alband;Alvand;Alwand;El'vend;El’vend;alwnd;Алванд;الوند; +city::143860;Shahriar;Ali Shah `Iwaz;Ali Shāh ‘Iwaz;Shahreyar;Shahreyār;Shahriar;Shahriyar;Shahriyār;Shahrīār;Shakhrijar;`Ali Shah `Avaz;shhryar;Шахрияр;شهريار;‘Alī Shāh ‘Avaẕ; +city::143921;Aligudarz;Aligoodarz;Aligudarz;Alīgūdarz;`Ali Gudar;alygwdrz;Алигударз;اليگودرز;‘Ali Gudār; +city::144410;Akbarabad;Akbar Abad Kawar;Akbarabad;Akbarabad-e Kavar;Akbarābād;Akbarābād-e Kavār;akbr abad;Акбарабад;اکبر آباد; +city::144448;Ahvaz;AWZ;Ahvaz;Ahvaz - ahwaz;Ahvaz - اهواز;Ahvaza;Ahvazas;Ahvazo;Ahvoz;Ahváz;Ahvāz;Ahvāza;Ahwaz;Ahwāz;Akhvaz;Akhvaz shaary;Axvaz;Bandar Nasiri;Bandar Nāsirī;Bandar-e Naser;Bandar-e Nāşer;Ehvaz;Gorad Akhvaz;Naseri;Nasiri;Nāsiri;Nāşerī;a wa shi;abajeu;afuvu~azu;ahabaja;ahavaza;ahvazi;ahwaz;akvacu;alahwaz;Əhvaz;Ахваз;Ахваз шаары;Аҳвоз;Горад Ахваз;Ախվազ;אהוואז;ئەھواز;الأهواز;اهواز;اہواز;अहवाज़;আহবাজ;ਅਹਵਾਜ਼;ஆக்வாசு;ཨཱ་ཝཛ།;აჰვაზი;アフヴァーズ;阿瓦士;아바즈; +city::144616;Ahar;Ahar;Akhar;Eher;a ha er;ahaleu;ahara;ahr;Əhər;Ахар;Аҳар;أهر;اهر;اہار;اہر;अहार;阿哈尔;아하르; +city::144794;Abyek;Abiak;abyik;آبيِك; +city::145034;Abhar;Abhar;Abkhar;abhr;Абхар;ابهر; +city::145449;Abadeh;Abade;Abadeh;abadh;Ābādeh;Абаде;آباده; +city::145459;Abadan;ABD;Abadan;Abadana;Abadanas;Abadano;Abadán;Ampantan;Gorad Abadan;Obodon;a ba dan;abadan;abadana;abadani;Ábádán;Ābadāna;Ābādān;ʿbadan;Αμπαντάν;Абадан;Горад Абадан;Ободон;Աբադան;אבאדאן;آبادان;ابادان;عبادان;अबादान;ਆਬਾਦਾਨ;აბადანი;アバダーン;アーバーダーン;阿巴丹;아바단; +city::417594;Shahreza;; +city::418606;Najafabad;Nadzhafabad;Najafabad;Najafābād;Nejafabad;Nejafābād;njf abad;Наджафабад;نجف آباد; +city::418710;Khomeyni Shahr;Homayoon Shahr;Homayunshahr;Homāyūnshahr;Khomeyni Shahr;Khomeynishahr;Khomeynī Shahr;Khomeynīshahr;Sedeh;khmyny shhr;خمینی شهر; +city::418863;Isfahan;Aspadana;Dakbayan sa Esfahan;Dakbayan sa Esfahān;Esfahan;Esfahano;Esfahān;Esfehan;Eşfahān;Eşfehān;Gorad Isfakhan;IFN;Isfachan;Isfahan;Isfahana;Isfahanas;Isfahanum;Isfahon;Isfahán;Isfahāna;Isfakhan;Isfehan;Ispahan;Iszfahan;Iszfahán;Kota Isfahan;Spahan;Yspyhan;asfhan;aysfahan;esaphahana;esufahan;icupakan;isafahana;iseupahan;isfahana;isphahana;xis fa han;yi si fa han;Îsfehan;İsfahan;İsfehan;Ισφαχάν;Ісфахан;Горад Ісфахан;Исфахан;Исфаҳон;Исфаһан;Սպահան;אספהאן;أصفهان;ئسفأھان;ئەسفەھان;اصفهان;اصفہان;ایصفاهان;इस्फहान;इस्फ़हान;এসফাহন;ਇਸਫ਼ਹਾਨ;இசுபகான்;อิสฟาฮาน;ისპაანი;エスファハーン;伊斯法罕;이스파한; +city::1113217;Zabol;ACZ;Zabol;Zabol';Zābol;zabl;Заболь;زابل; +city::1159301;Zahedan;Dowzdab;Dowzdāb;Duzdab;Duzdap;Duzdāb;Duzdāp;Gorad Zakhedan;ZAH;Zahedan;Zahedan-e (Yek);Zahedanas;Zahedano;Zahedán;Zahidan;Zaidan;Zaidān;Zakhedan;Záhedán;Zāhedān;Zāhedān-e (Yek);cakitan;jahedan;jahedana;zahdan;zahedan;zahedana;zahedani;zha hei dan;Горад Захедан;Захедан;Зоҳидон;Զահեդան;زاهدان;زاہدان;ज़ाहेदान;জহেদন;சாகிதன்;ზაჰედანი;ザーヘダーン;扎黑丹;자헤단; +city::1159362;Torbat-e Jam;Torbat-e Jam;Torbat-e Jām;Torbat-e Sheykh Jam;Torbat-e Sheykh Jām;Turbat-i-Shaikh Jam;trbt jam;تربت جام; +city::1160571;Khash;Kavash;Khash;Khāsh;Kwash;Kwāsh;Vasht;Vāsht;khash;Хаш;خاش; +city::1160939;Iranshahr;Fahrej;Fehruj;IHR;Iranshahr;Qal`eh-ye Naseri;Qal‘eh-ye Nāşerī;ayranshhr;Īrānshahr;ايرانشهر; +city::10630176;Pasragad Branch;; +city::3413829;Reykjavik;Gorad Rehjkjavik;REK;Recwic;Refkiavik;Reiciavicia;Reicivic;Reikiavik;Reikiavike;Reikjaveks;Reikjavik;Reikjavika;Reikjavikas;Reikjavīka;Reiquiavik;Reiquiavique;Rejk'javik;Rejkijavik;Rejkjavik;Rejkjaviko;Rekyavik;Reykiavica;Reykjavik;Reykjavikur;Reykjavík;Reykjavíkur;Reykjawik;Reykyabik;Reykyavik;Rèkyavik;Réicivíc;Rēcwīc;Rėikjavėks;kartuli;lei ke ya wei ke;leikyabikeu;re'ikiyabhika;reikyavu~iku;rekavik;rekh ya wik;reki'avika;rekjabhika;rekjavika;rekyavika;reyikyavik;reykyavik;rykjawk;rykyafyk;rykyawk;rykyawyk;Ρέικιαβικ;Ρευκιαβικ;Горад Рэйкявік;Рейкиявик;Рейкьявик;Рейкявик;Рейкявік;Рејкјавик;Ռեյկյավիկ;רייקיאוויק;רעקיאוויק;ريكيافيك;ریکجاوک;ریکیاوک;ریکیاویک;رېيكياۋىك;ڕێکیاڤیک;रेक्जाविक;रेक्याविक;রেইকিয়াভিক;ਰੇਕਿਆਵਿਕ;ରେକ୍ଜାଭିକ;ரெய்க்யவிக்;రేకవిక్;റെയിക്യാവിക്;เรคยาวิก;རེཀ་ཇ་བིཀ།;რეიკიავიკი;ქართული;ሬይኪያቪክ;レイキャヴィーク;雷克亞維克;雷克雅未克;雷克雅維克;레이캬비크; +city::2522713;Vittoria;Vittoira;Vittoria;vu~ittoria;ヴィットーリア; +city::2522876;Trapani;Drepanum;TPS;Trapani;Trapena;Tràpani;Tràpena;Trápani;torapani;Трапани;טרפאני;トラーパニ; +city::2523083;Siracusa;Gorad Sirakuza;Lungsod ng Siracusa;QIC;Sarausa;Sioracus;Sioracús;Siracuesa;Siracusa;Siracuxa;Siracuza;Siracüsa;Sirakueza;Sirakusa;Sirakuz;Sirakuza;Sirakuzae;Sirakuzai;Sirakuzas;Sirakuze;Sirakuzo;Sirakuzy;Siraküza;Sirakūzai;Sirakūzas;Syracusae;Syracuse;Syrakouses;Syrakus;Syrakusa;Syrakusy;Syrakuzy;Syrakúzy;sayrakwz;shirakusa;si ra ku sa;silakusa;srqwst;syrakwz;syrqwzh;xi la ku zha;Συρακούσες;Горад Сіракуза;Сиракузæ;Сиракуза;Сиракузы;Сіракуза;Սիրակուզա;סירקוזה;سائراکوز;سرقوسة;سرقوسہ، صقلیہ;سیراکوز;ซีรากูซา;სირაკუზა;シラクサ;锡拉库扎;시라쿠사; +city::2523630;Reggio Calabria;REG;Redzho-di-Kalabrija;Reggio Calabria;Reggio de Calabre;Reggio de Calabria;Reggio de Calàbria;Reggio di Calabria;Regio;Regio de Calabria;Rhegium;Riggiu Calabbria;lei jiao ka la bu li ya;rg'w dy qlbryh;rydjw kalabrya;Реджо-ди-Калабрия;רג'ו די קלבריה;ريدجو كالابريا;レッジョ・ディ・カラブリア;雷焦卡拉布里亚; +city::2523650;Ragusa;QRG;Ragusa;Raguse;Raguza;Rausa;raguza;rgwzh;Рагуза;רגוזה;ラグーザ; +city::2523665;Quartu Sant'Elena;Cuartu Santa Aleni;Cuartu Santa Alèni;Quarto Sant'Elena;Quartu Sant'Elena; +city::2523920;Palermo;PMO;Palerm;Palerma;Palermas;Palerme;Palermo;Palermu;Panormus;Pałermo;ba lei mo shi;balyrmw;palermo;palleleumo;palrmw;parerumo;plrmw;Палерма;Палермо;פלרמו;باليرمو;پالرمو;पलेर्मो;パレルモ;巴勒莫市;팔레르모; +city::2524013;Nicastro-Sambiase;Nicastro;Nikastro;Никастро; +city::2524170;Messina;Mesina;Messana;Messina;Messine;Mesyna;Missina;QME;mesina;messhina;mo xi na;msynh;mysyna;Месина;Мессина;מסינה;ميسينا;メッシーナ;墨西拿;메시나; +city::2524245;Marsala;Marsala;QMR;marusara;Марсала;マルサーラ; +city::2524653;Gela;Dzhela;Gela;ge la;jera;jie la;Джела;ジェーラ;杰拉;格拉; +city::2524907;Cosenza;Cosenza;Cusenza;Kozenca;QCS;kozentsu~a;Козенца;コゼンツァ; +city::2525059;Catanzaro;Catanzara;Catanzaro;Catanzaru;Katandzaro;QCZ;katanchalo;katantsu~aro;Катандзаро;カタンツァーロ;카탄차로; +city::2525068;Catania;CTA;Catane;Catania;Catina;Catània;Catânia;Katane;Katania;Katanija;Katānija;katania;katanya;qtnyh;Κατάνη;Катания;Катанија;קטניה;كاتانيا;კატანია;カターニア; +city::2525448;Caltanissetta;Caltanisetta;Caltanissetta;Kal'tanissetta;Nissa;QCL;karutanissetta;qltnysth;Кальтаниссетта;קלטניסטה;カルタニッセッタ; +city::2525473;Cagliari;CAG;Cagliari;Cajari;Caliari;Caller;Caralis;Casteddu;Castel;Castèl;Càgliari;Càliari;Càller;Cáller;Gorad Kal'jary;Kagliari;Kal'jari;Kalari;Kaliari;Kaljari;Kaljaris;Kaljaro;Kaljāri;Kalyari;Lungsod ng Cagliari;ka li ya li;kagali'ari;kagliyari;kaglyary;kal ya ri;kaliyari;kalliali;kalyary;karyari;Κάλιαρι;Горад Кальяры;Кальяри;Кальярі;Каляри;Каљари;Կալիարի;קליארי;كالياري;کالیاری;کاگلیاری;कगलिआरी;काग्लियारी;கலியாரி;กาลยารี;კალიარი;カリャリ;卡利亚里;卡利亞里;칼리아리; +city::2525628;Bagheria;Bagerija;Bagheria;Багерия; +city::3164376;Vigevano;Vidzhevano;Vigebanum;Vigevano;vu~ijevu~ano;Виджевано;ヴィジェーヴァノ; +city::3164419;Vicenza;VIC;Vicence;Vicenza;Vicenzsa;Vicetia;Vichenca;vu~ichentsu~a;Виченца;ヴィチェンツァ; +city::3164527;Verona;VRN;Verona;Verone;Vérone;Werona;belona;fyrwna;verona;vu~erona;wei luo na;wrwna;wrwnh;Верона;ורונה;فيرونا;ورونا;वेरोना;ヴェローナ;维罗纳;베로나; +city::3164603;Venice;Benatky;Benetia;Benetke;Benezia;Benátky;Feneyjar;V'nise;VCE;Velence;Venecia;Venecia - Venezia;Venecija;Venecio;Venedeg;Venedig;Venedik;Venediku;Venesia;Venetia;Venetie;Venetik;Venetië;Venetsia;Veneza;Venezia;Venezsia;Veneția;Venice;Venies;Venise;Venizia;Venècia;Venèsia;Vignesie;Vinezzia;Wenecja;albndqyt;an Veineis;an Veinéis;benechia;beniseu;benisu;venetsia;vu~enetsu~ia;vu~enisu;wei ni si;wnyz;wnzyh;Βενετία;Венеция;Венеција;Венеція;Վենետիկ;ונציה;البندقية;ونیز;ۋېنىتسىيە;ვენეცია;ベニス;ヴェニス;ヴェネツィア;威尼斯;베네치아;베니스; +city::3164699;Varese;Baretium;QVA;Vareis;Varese;Vareze;Varèis;Varèse;vu~areze;wa lei ze;Варезе;ヴァレーゼ;瓦雷澤; +city::3165072;Udine;UDN;Udin;Udine;Удине; +city::3165185;Trieste;Gorad Tryest;TRS;Tergeste;Tergesti;Terst;Tit-li-nga-su-thit;Tit-lî-ngâ-sṳ̂-thi̍t;Triest;Triestas;Trieste;Triesti;Triesto;Triests;Trieszt;Triëst;Trst;de li ya si te;di li ya si te;teulieseute;toriesute;tri xe s te;tri'esta;tri'este;triyesrre;triyeste;trysth;tryysty;Τεργέστη;Горад Трыест;Триест;Трст;Трієст;Տրիեստ;טריאסטה;ترييستي;تریسته;تریستے;ٹریسٹ;ट्रिएस्ट;त्रिएस्ते;ত্রিয়েস্তে;ട്രിയെസ്റ്റെ;ตรีเอสเต;ტრიესტი;トリエステ;的里雅斯特;第里雅斯特;트리에스테; +city::3165201;Treviso;Tarvisium;Trevise;Treviso;Trevixo;Trevizo;Trévise;torevu~izo;trwwyzw;Тревизо;טרוויזו;トレヴィーゾ; +city::3165243;Trento;Gorad Trehnta;Treant;Trent;Trent/o;Trentas;Trente;Trento;Trentu;Trident;Tridentum;Trient;Trionta;Trydent;Trénto;ZIA;te lun tuo;teulento;torento;trntw;tryntw;Τρέντο;Горад Трэнта;Тренто;טרנטו;ترنتو;ترينتو;ٹرنٹو;ტრენტო;トレント;特伦托;트렌토; +city::3165322;Trani;Trani;Turenum;torani;Трани;トラーニ; +city::3165456;Torre del Greco;Torre d''o Grieco;Torre del Greco;Torre-del'-Greko;Торре-дель-Греко;トッレ・デル・グレーコ; +city::3165524;Turin;Augusta Taurinorum;Gorad Turyn;Julia Augusta Taurinorum;Lungsod ng Turino;TRN;Tori;Torin;Torino;Torinu;Torí;Tueri;Turen;Turijn;Turim;Turin;Turina;Turinas;Turino;Turinu;Turyn;Turén;Turìn;Turín;Turīna;Tórínó;Türì;dou ling;tolino;torino;tu rin;tulin;turin;turina;twryn;twrynw;Τορίνο;Горад Турын;Торино;Турин;Թուրին;טורין;טורינו;تورينو;تورین;टोरीनो;तोरिनो;তুরিন;துரின்;ตูริน;ཊུ་རིན།;ტურინი;トリノ;都灵;토리노;투린; +city::3165771;Terni;Interamna;Terni;teruni;Терни;テルニ; +city::3165926;Taranto;TAR;Taranto;Tarde;Tarent;Tarente;Tarento;Tarento - Taranto;Tarentum;Tàrent;taranto;tarantw;Таранто;تارانتو;ტარანტო;ターラント; +city::3166598;Sesto San Giovanni;Sesto;Sesto San Giovanni;セスト・サン・ジョヴァンニ; +city::3167022;Savona;Sann-a;Saona;Savo;Savo Oppidum Alpinum;Savon-a;Savona;Savone;savu~ona;Савона;サヴォーナ; +city::3167096;Sassari;QSS;Sassari;Sasser;Sàsser;Tatari;Tathari;Tattari;Tàthari;sasary;sassari;Сассари;ساساري;サッサリ; +city::3167731;San Severo;San Severo;サン・セヴェーロ; +city::3168673;Salerno;QSR;Salernas;Salerne;Salerno;Salernu;Salernum;Salierno;salyrnw;sareruno;Салерно;ساليرنو;サレルノ; +city::3169070;Rome;An Roimh;An Ròimh;An Róimh;Erroma;Hrom;Lungsod ng Roma;Mji wa Roma;ROM;Ramma;Rhufain;Rim;Rim";Roeme;Rom;Roma;Rome;Romma;Romo;Romë;Rooma;Roum;Rym;Rzym;Råmma;Rím;Róm;Róma;Urbs;loma;luo ma shi;rm;rom;roma;romi;rwm;rwma;rym;Řím;Ρώμη;Рим;Римъ;Ром;Рым;Հռոմ;רומא;رم;روم;روما;رىم;ܪܘܡܐ;रोम;रोमा;โรม;რომი;ሮማ;ローマ;罗马市;로마; +city::3169361;Rimini;Ariminum;RMI;Remin;Rimini;Rèmin;Rímini;rimini;rymyny;Римини;Ріміні;ريميني;リミニ; +city::3169522;Reggio nell'Emilia;Redzho-Ehmilija;Reggio;Reggio Emilia;Reggio nell'Emilia;ZRO;Реджо-Эмилия; +city::3169561;Ravenna;RAN;Ravena;Ravenna;Ravenne;Rawenna;Rávena;la wen na;ravenna;ravu~en'na;rwwnh;Равена;Равенна;רוונה;रवेन्ना;ラヴェンナ;拉文納; +city::3169921;Prato;Prato;Pratu;Pre;Prè;bratw;pu la tuo;purato;Прато;براتو;プラート;普拉托; +city::3170027;Potenza;Oppido Lucano;Potentia;Potenza;Putenza;QPO;potentsu~a;ポテンツァ; +city::3170116;Portici;Portichi;Portici;Puortece;bwrtysh;porutichi;Портичи;بورتيش;ポルティチ; +city::3170621;Pistoia;Pistoia;Pistoja;Pistojja;Pistola;Pistoria;Pistòja;pisutoia;Пистойя;ピストイア; +city::3170647;Pisa;PSA;Pisa;Pisae;Pise;Piza;Pizo;Písa;bi sa;byza;pisa;pyzh;Пиза;פיזה;بيزا;पीसा;ピサ;比萨; +city::3171058;Piacenza;P'jachehnca;P'jachenca;Piacenza;Piaseinsa;Piasensa;Piasëinsa;Placencia;Placentia;Placência;Plaisance;Plasencia;QPZ;pi ya qin cha;piachentsu~a;pyachnza;П'ячэнца;Пьяченца;پیاچنزا;ピアチェンツァ;皮亚琴察; +city::3171168;Pescara;PSR;Pescara;Peskara;byskara;pesukara;Пескара;بيسكارا;ペスカーラ; +city::3171173;Pesaro;Pesaro;Pesaru;Pezaro;Pisaurum;Pèsaru;pezaro;Пезаро;ペーザロ; +city::3171180;Perugia;PEG;Perosa;Perouse;Perudzha;Perugia;Perusa;Perusia;Pérouse;byrwdja;pei lu jia;peruja;prwg'h;Перуджа;Перуђа;פרוג'ה;بيرودجا;ペルージャ;佩鲁贾; +city::3171366;Pavia;Papia;Pavia;Pavie;Pavija;Pavio;Pavìa;Pavía;Pawia;Ticinum;pa wei ya;pavu~ia;Павия;パヴィア;帕維亞; +city::3171457;Parma;PMF;Parma;Parme;Perma;Pèrma;barma;parma;paruma;Парма;פארמה;بارما;پارما;パルマ; +city::3171728;Padova;Padoa;Padoue;Padova;Padovo;Padua;Paduja;Padwa;Patavium;Pàdua;Pádua;QPA;badwfa;pa duo wa;padoba;padovu~a;Падова;Падуа;Падуя;פאדובה;بادوفا;პადუა;パドヴァ;帕多瓦;파도바; +city::3172189;Novara;Novara;Novare;Novaria;Nuara;Nuvara;novu~ara;Новара;ノヴァーラ; +city::3172394;Naples;Gorad Neapal';NAP;Napels;Naples;Naplés;Napoles;Napoli;Napolo;Napols;Napoly;Nappoli;Napul;Napule;Napuli;Napulj;Napólí;Neapel;Neapelj;Neapol;Neapol';Neapole;Neapolis;Noapels;Nàpoli;Nàpols;Nàpuli;Nàpułi;Nápoles;Nápoli;Nápols;Nápoly;Parthenope;na bu lei si;nabwly;napl;napoli;napolli;napori;napwly;nepalasa;nepalsa;nepeils;nyplz;Νάπολη;Горад Неапаль;Напуљ;Неапол;Неаполь;Նեապոլ;נאפאלי;נאפולי;نابولي;ناپل;ناپولی;نیپلز;नापोलि;नापोली;नेपल्स;নেপলস;நாபொலி;เนเปิลส์;ნეაპოლი;ナポリ;那不勒斯;나폴리; +city::3172629;Monza;Modicia;Monca;Monsa;Monza;Munscia;meng zha;mnza;montsu~a;mwnzh;Монца;מונצה;منزا;モンツァ;蒙扎; +city::3173287;Molfetta;Mol'fetta;Molfetta;Мольфетта; +city::3173331;Modena;Modena;Modene;Modna;Modène;Mutina;Mòdena;Mòdna;Módena;ZMO;modena;mwdyna;Модена;مودينا;モデナ; +city::3173435;Milan;Lungsod ng Milano;MIL;Mailand;Mediolan;Mediolanum;Mila;Milaan;Milan;Milana;Milanas;Milano;Milanu;Milao;Milà;Milán;Miláno;Milánó;Milão;Milāna;Mílanó;Mилан;mi lan;milan;milani;millano;mirano;mylan;mylanw;Милан;Милано;Мілан;מילאנו;مىلان;ميلانو;மிலன்;มิลาน;მილანი;ミラノ;米蘭;밀라노; +city::3173529;Mestre;Mestracum;Mestre;Mestre bei Venedig;mei si te lei;mesutore;mstrh;Местре;מסטרה;メストレ;梅斯特雷; +city::3173721;Matera;Matera;Materia;matera;Матера;マテーラ; +city::3173775;Massa;Massa;massa;Масса;マッサ; +city::3174092;Manfredonia;Manfredonia;Manfredonija;Manfredònia;manfuredonia;Манфредония;マンフレドーニア; +city::3174530;Lucca;LCV;Locca;Luca;Lucca;Lucques;Luka;Lukka;lu ka;rukka;Лука;Лукка;ルッカ;卢卡; +city::3174659;Livorno;Labro;Leghorn;Levuorno;Liborno;Liorna;Livorn;Livornas;Livorno;Livornu;Livourne;lybwrnw;lyfwrnw;rivu~oruno;Λιβόρνο;Ливорно;ליבורנו;ليفورنو;リヴォルノ; +city::3174741;Lido di Ostia;Lido di Ostia;Lido di Roma;Lido-di-Ostija;Lido-di-Roma;Ostia Lido;Лидо-ди-Остия;Лидо-ди-Рома; +city::3174921;Legnano;Legnano;Len'jano;renyano;Леньяно;レニャーノ; +city::3174953;Lecce;LCC;Lecce;Lecci;Lece;Lechche;Leche;Letse;Lečė;Lungsod ng Lecce;Lupiae;Luppiu;lai qie;lchh;leche;letce;li che;lychy;lytshy;lzh;retche;Λέτσε;Лече;Лечче;Լեչե;לצה;ليتشي;لچه;لیچہ;لیچی;लेत्चे;ლეჩე;レッチェ;壢車;萊切;레체; +city::3175058;Latina;Latina;Littoria;QLT;ratina;Латина;ラティーナ; +city::3175081;La Spezia;La Specija;La Spezia;QLP;Specija;Spedia;Speza;Spezia;Ла Специја;Специя;ラ・スペツィア; +city::3175537;Imola;Forum Cornelii;Imola;Iommla;imora;Ímola;Имола;イーモラ; +city::3175786;Grosseto;GRS;Grosseto;Гроссето; +city::3176059;Giugliano in Campania;Giuglian;Giugliano;Giugliano in Campania;Giugliàn;ジュリアーノ・イン・カンパーニア; +city::3176219;Genoa;Cenova;Dzenova;Dženova;GOA;Genes;Genoa;Genova;Genovo;Genua;Genuja;Genès;Genúa;Gènova;Génova;Gênes;Janov;Xenova - Genova;Xénova - Genova;Zena;genua;jeno'a;jenoba;jenovu~a;jnwa;jnwt;re na ya;Ĝenovo;Ђенова;Генуа;Генуя;גנואה;جنوا;جنوة;जेनोआ;გენუა;ジェノヴァ;热那亚;제노바; +city::3176391;Gallarate;Gallarate;Галларате; +city::3176746;Forli;FRL;Forli;Forlì;Forum Livii;foruri;Форли;フォルリ; +city::3176885;Foggia;FOG;Fodzha;Foggia;Fovea;byrwdja;fojja;fwdja;Фоджа;بيرودجا;فودجا;フォッジャ; +city::3176959;Florence;FLR;Fflorens;Firenca;Firence;Firense;Firenz;Firenze;Firenzi;Florans;Floransa;Florenc;Florenca;Florence;Florenceje;Florenci;Florencia;Florencie;Florencij;Florencija;Florencja;Florenco;Florencėjė;Florens;Florensa;Florensiya;Florensya;Florenta;Florentia;Florentzia;Florenz;Florença;Florența;Florâns;Florència;Floréncia;Florénsa;Flórans;Flórens;Gorad Flarehncyja;Lungsod ng Florencia;Sciorenza;fei leng cui;firentsu~e;florensa;flwrans;flwrns;flwrnsa;flxrens;fu luo lun sa;peullolenseu;phlorens;phlorensa;pilenche;plorentsia;pyrnzh;Φλωρεντία;Горад Фларэнцыя;Фиренца;Флоренц;Флоренци;Флоренций;Флоренция;Флоренція;Ֆլորենցիա;פירנצה;פירענצע;فلورانس;فلورنس;فلورنسا;फ़्लोरेन्स;फ्लोरेन्स;ফ্লোরেন্স;ఫ్లోరెన్స్;ഫ്ലോറൻസ്;ฟลอเรนซ์;ཧྥུ་ལོ་རོན་ཟིའུ་ཡ།;ფლორენცია;フィレンツェ;佛罗伦萨;翡冷翠;플로렌스;피렌체; +city::3177090;Ferrara;Ferrara;Ferrare;Феррара; +city::3177363;Ercolano;Ercolano;Gerkulanum;Resina;Геркуланум; +city::3177838;Cremona;Cremon-a;Cremona;Cremone;Crémone;Kremona;ke lei mo na;keulemona;kuremona;Кремона;クレモナ;克雷莫納;크레모나; +city::3178229;Como;Com;Come;Como;Còm;Côme;Komo;Novum Comum;QCM;ke mo;komo;Комо;コモ;科莫; +city::3178671;Cinisello Balsamo;Cinisello;Cinisello Balsamo;チニゼッロ・バルサモ; +city::3178957;Cesena;Caesena;Cesena;Cesene;Chezena;Césène;Zisena;Zisèna;chezena;Чезена;チェゼーナ; +city::3179075;Cerignola;Corignola; +city::3179661;Castellammare di Stabia;Castellammare;Castellammare di Stabia;Estabia;Estàbia;Kastelamare di Stabija;Stabiae;Stabie;Кастеламаре ди Стабија; +city::3179806;Casoria;Casoria;kazoria;カゾーリア; +city::3179866;Caserta;CTJ;Caserta;Caserte;Kazerta;kazeruta;Казерта;カゼルタ; +city::3180423;Carrara;Apuania;Carara;Carrara;Carrare;Karrara;karrara;Каррара;カッラーラ; +city::3180445;Carpi Centro;Carpi;Cherp;Chèrp;Karpi;karupi;Карпи;カルピ; +city::3181355;Busto Arsizio;Ansizio;Busto Arsizio;Bustum Arsitium;bu si tuo-a xi qi ao;布斯托-阿西齊奧; +city::3181528;Brindisi;BDS;Brindisi;Brindizi;Brinnese;Brundisium;Brìndisi;brindisi;burindiji;Бриндизи;ब्रिंडिसि;ブリンディジ; +city::3181554;Brescia;BRZ;Brescia;Bresha;Breshija;Bresia;Bressia;Brixia;Bréscia;QBS;bryshya;bu lei xi ya;bureshia;Бреша;Брешия;بريشيا;ブレシア;布雷西亚; +city::3181913;Bolzano;BZO;Bal'cana;Bauzanum;Bocen;Bocenas;Boceno;Bol'cano;Bolcano;Bolcāno;Bolzan;Bolzano;Bolzanu;Bolzán;Bozen;Bozen-Bolzano;Bozn;Bulsaun;Buzzanu;Mpoltzano;bo er cha nuo;borutsu~ano;bwlznw;Μπολτζάνο;Бальцана;Болцано;Больцано;Боцен;בולצנו;ボルツァーノ;波尔查诺; +city::3181928;Bologna;BLQ;Baljon'ja;Bologna;Bologne;Bolon'ja;Bolona;Bolonha;Bolonia;Bolonija;Bolonja;Bolonjo;Bolonya;Boloņa;Boloňa;Bononia;Bulaggna;Bulogna;Bulåggna;bo luo ni ya;bollonya;boronya;bwlwnya;bwlwnyh;Балёнья;Болонья;Болоня;Болоња;בולוניה;بولونيا;ボローニャ;博洛尼亚;볼로냐; +city::3181995;Bitonto;Bitonto;bitonto;ビトント; +city::3182007;Bisceglie;Bisceglie;Bishell'e;bisherie;Бишеллье;ビシェーリエ; +city::3182164;Bergamo;Bergam;Bergame;Bergamo;Berghem;Bergomum;Bèrgam;Bèrghem;Bérgamo;Bérghem;bei er jia mo;bergamo;berugamo;byrghamw;Бергамо;بيرغامو;बेर्गमो;ベルガモ;贝尔加莫; +city::3182340;Barletta;Barletta;baruretta;Барлетта;バルレッタ; +city::3182351;Bari;BRI;Bari;Baris;Barium;Bary;Mpari;ba li;bali;bari;bary;Μπάρι;Μπαρι;Бари;Барі;בארי;باري;باری;बरि;बारी;বারি;ბარი;バーリ;巴里;바리; +city::3182640;Aversa;Aversa;Averza;avu~erusa;Аверса;アヴェルサ; +city::3182714;Asti;Ast;Asti;Hasta Pompeia;asuti;Асти;アスティ; +city::3182884;Arezzo;Arecco;Arezzo;Ареццо; +city::3183072;Andria;Andria;Andrija;andoria;Андрия;アンドリア; +city::3183089;Ancona;AOI;Ancona;Ancone;Anconn-a;Ancône;Ankona;an ke na;ankona;Анкона;アンコーナ;安科纳; +city::3183178;Altamura;Altamura;arutamura;Алтамура;アルタムーラ; +city::3183299;Alessandria;Alesandrija;Alessandria;Alessandrija;Alexandria;Alexandrie;Lissandria;QAL;aressandoria;aressandoria xian;Алесандрия;Алессандрия;Алессандрія;アレッサンドリア;アレッサンドリア県; +city::3183455;Afragola;Afragola;Afravola;afuragora;Афрагола;アフラゴーラ; +city::3183539;Acilia-Castel Fusano-Ostia Antica;; +city::3183541;Acerra;Acerra;Acerrae;acherra;アチェッラ; +city::6534228;Guidonia Montecelio;Guidonia; +city::6534232;Lamezia Terme;Lamezia;Lamezia Terme;SUF; +city::3488465;Spanish Town;Hispanurbo;Saint Jago de la Vega;Spanis Taoun;Spanis Taunas;Spanish Town;Spanish-Taun;Spaniš Taunas;sbanysh tawn;seupaenisitaun;xi ban ya zhen;Σπάνις Τάουν;Спаниш-Таун;سبانيش تاون;سپینش ٹاؤن;スパニッシュ・タウン;西班牙鎮;스패니시타운; +city::3488981;Portmore;Portmore; +city::3489460;Montego Bay;Bahia Montego;Bahía Montego;MBJ;Mantica Bahia;Montego;Montego Bay;Montego Bejus;Montego Bėjus;Montego-Bej;Montenko Bey;Monteqo-Bey;mamtego be;meng te ge bei;montegobei;mwntgwby;mwntyghw bay;mwntygw byy;Μοντέγκο Μπέυ;Монтего-Бей;מונטיגו ביי;مونتيغو باي;مونتگوبی;مونٹیگو بے;माँटेगो बे;モンテゴ・ベイ;蒙特哥貝;몬테고베이; +city::3489854;Kingston;KIN;Kin'nkston;Kingston;jing si dui;kingseuteon;kingusuton;kyngstwn;Κίνγκστον;Кингстон;کینگستون;キングストン;京斯敦;킹스턴; +city::246013;Wadi as Sir;Wadi Al Seer;Wadi Sir;Wadi as Sayr;Wadi as Sir;Wadi es Sir;Wadi es Sīr;Wādī as Sayr;Wādī as Sīr;wady alsyr;وادي السير; +city::248370;Ma'daba;Ma'daba;Madaba;Madeba;Ma’dabā;Medeba;Meideva;Meidevā;Mādabā;Mādeba;madba;mhafzt madba;mydbʼ;Мадаба;מידבא;مأدبا;مادبا;محافظة مادبا; +city::248382;Ma'an;Ahamant;MPQ;Ma'an;Ma`an;Ma‘ān;معان; +city::248946;Irbid;Arbela;Arbēla;Gorad Irbid;Irbid;Irbidas;QIR;arbd;ileubideu;irubido;yi er bi de;İrbid;Ірбід;Горад Ірбід;Ирбид;Ирбид қаласы;Իրբիդ;אירביד;إربد;اربد;イルビド;伊爾比德;이르비드; +city::250090;Zarqa;Az Zarqa';Az Zarqā’;Ehz-Zarka;Kalaat el Zerka;QZA;Qal'at az Zarqa';Qal‘at az Zarqā’;Zarka;Zarqa;Zerka;jaleuka;zaruka;zha er ka;Зарка;Эз-Зарка;الزرقاء;زرقاء;ザルカ;扎尔卡;자르카; +city::250258;As Salt;Al-Salt;As Salt;As Salţ;As-Sal't;Es Salt;Ramoth Gil`ad;Rāmoth Gil‘ād;Salt;alslt;Ас-Сальт;السلط; +city::250336;Ar Ramtha;Ar Ramtha;Ar Ramthā;El Remteh;Er Remtha;Ramtha;alrmtha;الرمثا; +city::250441;Amman;'Amman;AMM;Ama;Aman;Amanas;Amani;Amano;Amans;Amman;Ammana;Ammon;Ammán;Ammān;Ammāna;Amàn;Amán;Amã;Gorad Aman;Philadelphia;Rabbah;Rabbath Ammon;am'man;am'mana;aman;amana;amani;amman;an man;anman;xam man;yamman;ʻmʼn;ʿman;ʿmʾn;Αμμάν;Аман;Амман;Аммон;Горад Аман;Ամման;אמאן;עמאן;ئاممان;امان;عمان;عمان شہر;عمّان;عَمّان;عەممان;ܥܡܐܢ;अम्मान;আম্মান;ਅਮਾਨ;அம்மான்;ಅಮ್ಮಾನ್;അമ്മാൻ;อัมมาน;ཨམ་མན།;ამანი;አማን;‘Ammān;アンマン;安曼;암만; +city::250582;Mafraq;Al Mafraq;Al-Mafrak;Ehl'-Mafrak;El-Fedein;Kalat el Mafrak;Mafrak;Mafrakas;Mafraq;OMF;Qal`at al Mafraq;Qal`at el Mafraq;Qal‘at al Mafraq;Qal‘at el Mafraq;almfrq;ma fu la ke;mafuraku;mapeulakeu;mfrq;mprq;shhr almfrq;Эль-Мафрак;מפרק;المفرق;شهر المفرق;مفرق;マフラク;馬弗拉克;마프라크; +city::250774;Aqaba;AQJ;Akaba;Akabe;Al-'Aqabah;Al-‘Aqabah;Aqaba;Qal`at el `Aqaba;`Aqaba;akaba;ya ke ba;Акаба;עקבה;العقبة;عقبه;アカバ;亞喀巴; +city::250799;'Ajlun;Adjlun;Adzhlun;Ajloun;`Ajlun;Аджлун;عجلون;‘Ajlūn; +city::7838895;Russeifa;Rusaifa;Russayfah;ar-Russayfah; +city::11428685;Rukban;; +city::1847963;Atsugi;Acugi;Atsugi;Atsugicho;Atsugichō;Atsuki;Atugi;Atugi-chhi;Atugi-chhī;NJA;asseugi si;atswghy;atswgy kanagawa;hou mu;hou mu ding;hou mu shi;xa sungi;Атсуги;Ацуги;Ацуґі;آتسوگی، کاناگاوا;أتسوغي;اتسوگی، کاناگاوا;อะสึงิ;厚木;厚木市;厚木町;아쓰기 시; +city::1847966;Akashi;Akashi;Akasi;Akasi-chhi;Akasi-chhī;Akasis;Akasyi;Akaşi;Akašis;akashy;akashy hywgw;akasi si;ming shi;ming shi shi;xa ka chi;Акаси;Акаши;Акаші;آکاشی;آکاشی، هیوگو;أكاشي;อะกะชิ;明石;明石市;아카시 시; +city::1847968;Zushi;Zushi;dou zi;zushi;ずし;ズシ;逗子; +city::1848004;Zama;Dzama;Sama;Zama;Zama-chhi;Zama-chhī;jama si;sa ma;zama;zama kanagawa;zuo jian;zuo jian shi;Дзама;Зама;زاما;زاما، کاناگاوا;ซะมะ;座間;座間市;자마 시; +city::1848087;Yukuhashi;Jukukhashi;Jukukhasi;Yukihashi;Yukuhashi;Yukuhasi-chhi;Yukuhasi-chhī;Yukuhasyi;xing qiao;xing qiao shi;yukuhasi si;ywkhashy fwkwka;ywkwhashy;ywkwhashy fwkwywka;Юкухаси;Юкухаші;Юкуҳаши;يوكوهاشي;یوکحاشی، فوکوکا;یوکوهاشی، فوکوئوکا;行橋;行橋市;유쿠하시 시; +city::1848096;Yuki;Juki;Yuki;Yuki-chhi;Yuki-chhī;Yūki;jie cheng;jie cheng shi;yky abaraky;yuki;yuki si;ywky;ywky aybaraky;Юки;Юкі;يوكي;یوکی، ایباراکی;یکی، اباراکی;ยูกิ;結城;結城市;유키 시; +city::1848188;Yoshikawa;Esikava;Yoshikawa;ji chuan;Есикава;吉川; +city::1848254;Yono;; +city::1848277;Yonago;Jonagas;Jonago;YGJ;Yonago;Yonago-chhi;Yonago-chhī;ionago;mi zi;mi zi shi;yonago si;ywnaghw;ywnaghw twtwry;ywnagw twtwry;Ёнаго;Јонаго;Йонаго;Йонаґо;يوناغو;يوناغو، توتوري;یوناگو، توتوری;یوناگو، توتٹوری;იონაგო;米子;米子市;요나고 시; +city::1848313;Yokosuka;Gorad Iakosuka;Jokosuka;Yokosuka;Yokosuka-chhi;Yokosuka-chhī;heng xu he;heng xu he shi;yoa koa suk a;yokoseuka si;ywkwska knagwa;ywkwswka;ywkwswka kanagawa;ywqwswqh;Ёкосука;Јокосука;Горад Іакосука;Йокосука;יוקוסוקה;يوكوسوكا;یوکوسوکا، کاناگاوا;یوکوسکا، کناگوا;โยะโกะซุกะ;იოკოსუკა;横須賀;横須賀市;橫須賀市;요코스카 시; +city::1848354;Yokohama;Iokogama;Jokohama;Jokohamo;Jokokhama;YOK;Yokohama;Yokohama-shi;Yokohamashi;heng bang;heng bang shi;heng bin shi;yoa koa ha ma;yokohama;yokohama si;yokohamashi;ywkwhama;ywqwhmh;Јокохама;Иокогама;יוקוהמה;يوكوهاما;โยะโกะฮะมะ;იოკოჰამა;よこはま;よこはまし;ヨコハマ;ヨコハマシ;横浜;横浜市;横滨市;요코하마 시; +city::1848373;Yokkaichi;Gorad Jokaici;Jokaichi;Jokkaichi;Jokkaiti;Yokkaichi;Yokkaiti;Yokkaiti-chhi;Yokkaiti-chhī;Yokkaitsi;si ri;si ri shi shi;yk ki chi;yoskaichi si;ywkaychy myh;ywkaytshy;ywkychy myy;Ёккаичи;Јокаичи;Горад Ёкаіці;Йокаичи;Йоккаити;Йоккаичи;Йоккаїті;يوكايتشي;یوکایچی، میه;یوکای‌ایچی، میه;یوکیچی، مئی;ยกไกชิ;四日;四日市市;욧카이치 시; +city::1848439;Yawata;Jauata;Javata;Jaŭata;Yahata;Yahatanosho;Yahatanoshō;Yahatasho;Yahatashō;Yavata;Yawata-chhi;Yawata-chhī;ba fan;ba fan shi;yawata;yawata si;yawata kywtw;Явата;ياواتا;یاواتا، کیوتو;یوتا، کیوٹو;იავატა;八幡;八幡市;야와타 시; +city::1848445;Honmachi;Honmachi;Jacushiro;Jacusiro;Jacuširo;Jatsushiro;Yatsushiro;Yatsusiro;Yatsuşiro;Yatusiro;Yatusiro-chhi;Yatusiro-chhī;ba dai shi;ben ding;honmachi;iatsusiro;yasseusilo si;yatswshyrw;yatswshyrw kwmamwtw;Јацуширо;Ятсуширо;Яцусиро;Яцушіро;ياتسوشيرو;یاتسوشیرو، کوماموتو;یتسھیرو، کمموٹو;იაცუსირო;ほんまち;ホンマチ;八代市;本町;야쓰시로 시; +city::1848499;Yashio;Yashio;ba chao;八潮; +city::1848522;Yao;Jao;Yao;Yaocho;Yaochō;ba wei;ba wei shi;Яо;八尾;八尾市; +city::1848689;Yamaguchi;Jamaguci;Jamaguti;Jamaguči;Yamaguchi;Yamaguchi-shi;Yamaguchishi;Yamaguti;shan kou;shan kou shi;yamaghwtshy;yamaguchi;yamaguchi si;yamaguchishi;Ямагути;ياماغوتشي;やまぐち;やまぐちし;ヤマグチ;ヤマグチシ;山口;山口市;야마구치 시; +city::1848774;Yaizu;Jaidzu;Jaizu;Jajdzu;Yaidu;Yaisu;Yaizu;Yaizu Mati;Yaizu-chhi;Yaizu-chhī;shao jin;shao jin shi;yaijeu si;yayzw;yayzw shyzwywka;yyzw shzwka;Јаизу;Яидзу;Яизу;Яйдзу;يايزو;یایزو، شیزوئوکا;ییزو، شزوکا;焼津;焼津市;燒津市;야이즈 시; +city::1849053;Utsunomiya;Ucunomija;Utsunomiya;Utsunomiya-shi;Utsunomiyashi;usseunomiya si;utsunomiya;utsunomiyashi;yu dou gong;yu dou gong shi;Уцуномия;うつのみや;うつのみやし;ウツノミヤ;ウツノミヤシ;宇都宮;宇都宮市;우쓰노미야 시; +city::1849186;Urayasu;Urajasu;Urayasu;Urayasu-chhi;Urayasu-chhī;awrayasw chyba;pu an shi;ulayaseu si;xu ra yasu;ywrayasw chyba;ywraysw;Ураясу;Урајасу;اورایاسو، چیبا;يورايسو;یورایاسو، چیبا;อุระยะซุ;浦安市;우라야스 시; +city::1849372;Uji;Udyi;Udzhi;Udzi;Udzis;Udži;Udžis;Ugi;Uji;Uji-cho;Uji-chō;Uzi-chhi;Uzi-chhī;Uĝi;awjy kywtw;uji;uji si;xu ci;yu zhi;yu zhi shi;ywjy;Уджі;Удзи;Уџи;Уҷи;Үжи;اوجی، کیوتو;يوجي;উজি;อุจิ;宇治;宇治市;우지 시; +city::1849414;Ueno-ebisumachi;Ueno;Ueno-ebisumachi;shang ye hui mei xu ding;上野恵美須町; +city::1849429;Ueda;Oweda;Ueda;Ueda Nagano;Ueda-chhi;Ueda-chhī;Uehda;awyda naganw;shang tian;shang tian shi;ueda si;ywyda;Уеда;Уэда;Ուեդա;اوئدا، ناگانو;يويدا;上田;上田市;우에다 시; +city::1849498;Ube;UBJ;Ube;Ube-chhi;Ube-chhī;Ubi;Ubė;awbh yamagwchy;ube si;xu bea;yu bu;yu bu shi;ywby;Убе;ابے، یاماگوچی;اوبه، یاماگوچی;يوبي;อุเบะ;宇部;宇部市;우베 시; +city::1849519;Tsuyama;Cujama;Tsujama;Tsuyama;Tuyama;Tuyama-chhi;Tuyama-chhī;jin shan;jin shan shi;sseuyama si;tswyama;tswyama awkayama;Тсуяма;Цуяма;Цујама;تسوياما;تسویاما، اوکایاما;津山;津山市;쓰야마 시; +city::1849539;Tsushima;Cusima;Tsushima;Tsushima cho;Tsushima chō;jin dao;Цусима;津島; +city::1849561;Tsurusaki;Tsurusaki;he qi;鶴崎; +city::1849563;Tsuruoka;Curuoka;Tsuruoka;Turuoka;Turuoka-chhi;Turuoka-chhī;he gang;he gang shi;sseuluoka si;tswrwawka yamagata;tswrwka;Тсуруока;Цуруока;تسورواوکا، یاماگاتا;تسوروكا;鶴岡;鶴岡市;쓰루오카 시; +city::1849592;Tsuruga;Curuga;Tsuruga;Turuga;Turuga-chhi;Turuga-chhī;dui he;dui he shi;dun he shi;sseuluga si;tswrwga fwkwyy;tswrwgha;Тсуруга;Цуруга;Цуруґа;تسوروغا;تسوروگا، فوکوئی;敦賀;敦賀市;쓰루가 시; +city::1849796;Tsu;Cu;Tsu;Tsu-shi;Tsushi;Tu;jin;jin shi;sseu si;tsu;tsushi;Цу;つ;つし;ツ;ツシ;津;津市;쓰 시; +city::1849814;Toyota;Koromo;Tojoota khot;Tojota;Toyoda;Toyota;Toyota i Aichi;Toyota-chhi;Toyota-chhī;doyota si;feng tian shi;li tian;li tian shi;thoa yoa ta;twywta;twywta aychy;Тойота;Тоёота хот;Тоёта;Тојота;تويوتا;تویوتا، آیچی;ٹویوٹا، ایچی;ٹویوٹہ;โทะโยะตะ;丰田市;豊田;豊田市;도요타 시; +city::1849837;Toyonaka;li zhong;豊中; +city::1849845;Toyokawa;Tojokava;Toyokawa;Toyokawa-chhi;Toyokawa-chhī;doyokawa si;feng chuan shi;li chuan;li chuan shi;thoa yoa kawa;twywkawa aychy;twywkawa aytshy;Тойокава;Тоёкава;Тојокава;تويوكاوا، آيتشي;تویوکاوا، آیچی;ٹویوکاوہ;โทะโยะกะวะ;豊川;豊川市;豐川市;도요카와 시; +city::1849846;Toyohashi;Toekhasi;Tojohashi;Tojokhashi;Tojokhasi;Toyohashi;Toyohashi-shi;Toyohasi;Toyohasi-chhi;Toyohasi-chhī;Toyohasyi;Toyohaşi;doyohasi si;feng qiao shi;li qiao;li qiao shi;thoa yoa ha chi;twywhashy aychy;twywhashy aytshy;Тоехаси;Тойохасі;Тойохаши;Тоёхаси;Тоёҳаши;Тојохаши;تويوهاشي، آيتشي;تویوهاشی، آیچی;โทะโยะฮะชิ;豊橋;豊橋市;豐橋市;도요하시 시; +city::1849876;Toyama;TOY;Tojama;Toyama;Toyama-shi;Toyamashi;fu shan;fu shan shi;toyama;toyamashi;Тояма;とやま;とやまし;トヤマ;トヤマシ;富山;富山市; +city::1849892;Tottori;Lungsod ng Tottori;TTJ;Totori;Totoris;Tottori;Tottori-chhi;Tottori-chhī;Tottori-shi;Tottori-su;Tottori-sṳ;Toturi;dostoli si;niao qu;niao qu shi;tht toa ri;twtwry;twtwry twtwry;Тотори;Тоттори;Тотторі;توتوري;توتوری;توتوری، توتوری;ทตโตะริ;鳥取;鳥取市;돗토리 시; +city::1849904;Tosu;Tosu;Tosu-chhi;Tosu-chhī;doseu si;niao qi;niao qi shi;twsw;twsw saga;Тосу;توسو;توسو، ساگا;鳥栖;鳥栖市;도스 시; +city::1850034;Tondabayashicho;Tondabayashi;Tondabayashicho;Tondabayashichō;fu tian lin;fu tian lin ding;fu tian lin shi;富田林;富田林市;富田林町; +city::1850108;Tomigusuku;Gusuku;Temigusuku;Timigusuku;Tomigusuki;Tomigusuku;li jian cheng;豊見城; +city::1850147;Tokyo;Edo;TYO;Tochiu;Tocio;Tokija;Tokijas;Tokio;Tokió;Tokjo;Tokyo;Toquio;Toquio - dong jing;Toquio - 東京;Tòquio;Tókýó;Tóquio;Tōkyō;dokyo;dong jing;dong jing dou;dong-gyeong;tokeiyw;tokkiyo;tokyo;twkyw;twqyw;Τόκιο;Токио;Токё;Токіо;Տոկիո;טוקיו;توكيو;توکیو;طوكيو;ܛܘܟܝܘ;ܜܘܟܝܘ;टोक्यो;டோக்கியோ;โตเกียว;ტოკიო;东京;東京;東京都;도쿄;동경; +city::1850152;Tokuyama;Kakuyama;Tokuyama; +city::1850158;Tokushima;TKS;Tokushima;Tokushima - de dao shi;Tokushima - 徳島市;Tokushima-shi;Tokushimashi;Tokusima;Tokušima;de dao;de dao shi;dokusima si;tokushima;tokushimashi;Токусима;とくしま;とくしまし;トクシマ;トクシマシ;徳島;徳島市;도쿠시마 시; +city::1850181;Tokorozawa;Tokorodzava;Tokorosawa;Tokorozaua;Tokorozava;Tokorozawa;Tokorozawa-chhi;Tokorozawa-chhī;dokolojawa si;suo ze;suo ze shi;thoa koa roa sa wa;twkwrwzawa;twkwrwzawa saytama;twkwrwzawa sayytama;Τοκοροζάβα;Токородзава;Токорозава;Токорозауа;توكوروزاوا;توکوروزاوا، سائیتاما;توکوروزاوا، سایتاما;โทะโกะโระซะวะ;所沢;所沢市;所澤市;도코로자와 시; +city::1850207;Toki;Toka;Toki;Toki-chhi;Toki-chhī;Tokitsu-cho;Tokitsu-chō;doki si;tu qi;tu qi shi;twky;twky gyfw;Тока;Токи;Токі;توكي;توکی، گیفو;土岐;土岐市;도키 시; +city::1850311;Tochigi;Lungsod ng Tochigi;Tochigi;Totigi;Totigi-chhi;Totigi-chhī;dochigi si;li mu;li mu shi;twchygy;twtshyghy;Тотиги;Тотіґі;Точиги;توتشيغي;توچیگی;栃木;栃木市;도치기 시; +city::1850396;Tenri;Tehnri;Tenri;Tenri-chhi;Tenri-chhī;denli si;tian li;tian li shi;tnry nara;tyrny;Тенри;Тенрі;Тэнри;تنری، نارا;تيرني;天理;天理市;덴리 시; +city::1850523;Tateyama;Hojo;Hōjō;Tatejama;Tateyama;Tateyama-chhi;Tateyama-chhī;Tateyamahojo;Tateyamahozyo;Tateyamahōjō;Tateyamahōzyō;dateyama si;guan shan;guan shan shi;tath yama;tatyama chyba;tatyyama chyba;tha tea ya ma;Татеяма;تاته ياما;تاتیاما، چیبا;تاتییاما، چیبا;ทะเตะยะมะ;館山;館山市;다테야마 시; +city::1850559;Tatebayashi;Tatebajashi;Tatebajasi;Tatebayashi;Tatebayasi-chhi;Tatebayasi-chhī;datebayasi si;guan lin;guan lin shi;tatybayashy;Татебаяси;Татебаясі;Татебаяши;تاته‌بایاشی، گونما;تاتيباياشي;館林;館林市;다테바야시 시; +city::1850692;Nishi-Tokyo-shi;Hoya;Hoya-shi;Nishitokyo-shi;Tanashi;Tanashi-machi;bao gu shi;tian wu shi;xi dong jing;xi dong jing shi;保谷市;田無市;西東京;西東京市; +city::1850693;Tanashicho;Tanashi;Tanashicho;Tanashichō;tanashichou;tian wu ding;たなしちょう;タナシチョウ;田無町; +city::1850707;Tanabe;Tanabe;tian bian;田辺; +city::1850708;Tanabe;Tanabe;Tanabe-chhi;Tanabe-chhī;Tanabeh;danabe si;tanaba;tanabh wakayama;tian bian;tian bian shi;Танабе;Танабэ;تانابا;تانابه، واکایاما;田辺;田辺市;田邊市;다나베 시; +city::1850742;Tamano;Tamano;Tamano-chhi;Tamano-chhī;damano si;tamanw;tamanw awkayama;yu ye;yu ye shi;Тамано;تامانو;تامانو، اوکایاما;玉野;玉野市;다마노 시; +city::1850872;Takefu;Takebo;Takebu;Takefu;Takehu;wu sheng shi;武生市; +city::1850892;Takayama;Takajama;Takayama;Takayama-chhi;Takayama-chhī;dakayama si;fei tuono gao shan;gao shan;gao shan shi;takayama;takayama gyfw;tha ka ya ma;Такаяма;تاكاياما;تاکایاما، گیفو;ทะกะยะมะ;たかやま;飛騨の高山;高山;高山市;다카야마 시; +city::1850910;Takatsuki;Takacuki;Takatsuki;Takatuki;gao gui;gao gui shi;高槻;高槻市; +city::1851002;Takasaki;Takasaki;Takasaki-chhi;Takasaki-chhī;dakasaki si;gao qi;gao qi shi;takasaky;takasaky gwnma;tha ka saki;Такасаки;Такасакі;تاكاساكي;تاکاساکی، گونما;ทะกะซะกิ;ტაკასაკი;高崎;高崎市;다카사키 시; +city::1851012;Takarazuka;Takaradzuka;Takarazuka;Takarazuka-chhi;Takarazuka-chhī;bao zhong;bao zhong shi;dakalajeuka si;takarazwka;takarazwka hywgw;tha ka ra suk a;Такарадзука;Такаразука;تاكارازوكا;تاکارازوکا، هیوگو;تاکارازوکا، ہیوگو;ทะกะระซุกะ;宝塚;宝塚市;寶塚市;다카라즈카 시; +city::1851032;Takaoka;Takaoka;Takaoka-chhi;Takaoka-chhī;dakaoka si;gao gang;gao gang shi;takawka;takaywka twyama;Такаока;تاكاوكا;تاکائوکا، تویاما;高岡;高岡市;다카오카 시; +city::1851100;Takamatsu;Gorad Takamacu;TAK;Takamacu;Takamatsu;Takamatsu-shi;Takamatsushi;Takamatu;Takamatu-chhi;Takamatu-chhī;dakamasseu si;gao song;gao song shi;takamastu;takamatsu;takamatsushi;takamatsw;takamatsw kagawa;tha ka masu;Горад Такамацу;Такаматсу;Такамацу;تاكاماتسو;تاکاماتسو، کاگاوا;टाकामास्तु;ทะกะมะสึ;ტაკამაცუ;たかまつ;たかまつし;タカマツ;タカマツシ;高松;高松市;다카마쓰 시; +city::1851125;Takaishi;Takaishi;Takaishi-kita;Takashi-kita;gao shi;高石; +city::1851193;Tajimi;Tadimi;Tadzimi;Tajima;Tajimi;Tajumi;Tazimi;Tazimi-chhi;Tazimi-chhī;dajimi si;duo zhi jian;duo zhi jian shi;tajymy ghyfw;tajymy gyfw;Тадзими;Тадзімі;Таџими;Таҷими;تاجيمي غيفو;تاجیمی، گیفو;多治見;多治見市;다지미 시; +city::1851273;Tagawa;Tagava;Tagawa;Tagawa-chhi;Tagawa-chhī;Takawa;dagawa si;tagawa fwkwywka;taghawa;tian chuan;tian chuan shi;Тагава;Таґава;تاغاوا;تاگاوا، فوکوئوکا;田川;田川市;다가와 시; +city::1851348;Suzuka;Kambe;Sudzuka;Susuka;Suzuka;Suzuka-chhi;Suzuka-chhī;ling lu;ling lu shi;seujeuka si;swzwka;swzwka myh;Судзука;Сузука;سوزوكا;سوزوکا، میه;鈴鹿;鈴鹿市;스즈카 시; +city::1851357;Suzaka;Susaka;Suzaka;xu ban;xu ban shi;須坂;須坂市; +city::1851368;Suwa;Kamisuwa;Suva;Suwa-chhi;Suwa-chhī;seuwa si;swa;swwa naganw;zou fang;zou fang shi;Сува;Սուվա;سوا;سووا، ناگانو;諏訪;諏訪市;스와 시; +city::1851483;Suita;Suika;Suita;Suita-chhi;Suita-chhī;Sujta;chui tian;chui tian shi;seu-ita si;suxi ta;swyta awsaka;swyyta awsaka;Суита;Суйта;سوئیتا، اوساکا;سويتا، أوساكا;ซุอิตะ;吹田;吹田市;스이타 시; +city::1851604;Soka;Sok;Soka;Sōka;cao jia;Сок;草加; +city::1851606;Soja;Soja;Sozya;Sōja;Sōzya;zong she;総社; +city::1851717;Shizuoka;FSZ;Gorad Sidzuoka;Lungsod ng Shizuoka;Shidzuoka;Shizuoka;Shizuoka-shi;Shizuokashi;Siduoka;Sidzuok;Sidzuoka;Sizuoka;Sizuoka-chhi;Sizuoka-chhī;chisu xoa ka;jing gang;jing gang shi;shizuoka;shizuokashi;shyzwka;shyzwywka;sijeuoka si;sijhu'oka;Ŝizuoka;Şizuoka;Šidzuoka;Šizuoka;Горад Сідзуока;Сидзуока;Сідзуока;Шидзуока;Шизуока;שיזואוקה;شيزوكا;شیزوئوکا;شیزوکا;शिझुओका;ชิซุโอะกะ;しずおか;しずおかし;シズオカ;シズオカシ;静岡;静岡市;靜岡市;시즈오카 시; +city::1851883;Shiraoka;Shiraoka;bai gang;shiraoka;しらおか;シラオカ;白岡; +city::1852003;Shiojiri;Shiojiri;Siodziri;Siojiri;Sioziri;Sioziri-chhi;Sioziri-chhī;shywjyry;shywjyry naganw;siojili si;yan kao;yan kao shi;Сиодзири;Сіодзірі;Шиоҷири;Սիոձիրի;شيوجيري;شیوجیری، ناگانو;塩尻;塩尻市;鹽尻市;시오지리 시; +city::1852225;Shimonoseki;Gorad Simanaseki;Shimonoseki;Simonoseki;Simonoseki-chhi;Simonoseki-chhī;chi moa noa seaki;shymwnwsky;shymwnwsky yamagwchy;shymwnwsyky yamagwchy;simonoseki si;xia guan shi;Ŝimonoseki;Şimonoseki;Горад Сіманасекі;Симоносеки;Сімоносекі;Шимоносеки;Սիմոնոսեկի;شيمونوسكي;شیمونوسکی، یاماگوچی;شیمونوسیکی، یاماگوچی;ชิโมะโนะเซะกิ;下关市;下関市;시모노세키 시; +city::1852347;Shimodate;Shimodate;Simodate; +city::1852383;Minato;Minato;Shimminatocho;Shimminatochō;Shinkomachi;Shinkōmachi;cou;湊; +city::1852472;Shimada;Shimada;Simada;Simada-chhi;Simada-chhī;Syimada;dao tian;dao tian shi;shymada;shymada shyzwywka;simada si;Симада;Сімада;Шимада;شيمادا;شیمادا، شیزوئوکا;島田;島田市;시마다 시; +city::1852502;Shiki;Shiki;Siki;zhi mu;zhi mu shi;Сики;志木;志木市; +city::1852607;Shibata;Shibata;Sibata;Sibata-chhi;Sibata-chhī;Syibata;shybata;shybata nygata;sibata;sibata si;xin fa tian;xin fa tian shi;Сибата;Сібата;Шибата;شيباتا;شیباتا، نیگاتا;新発田;新発田市;新發田市;시바타 시; +city::1852663;Seto;Seto;Seto-chhi;Seto-chhī;Setu;lai hu;lai hu shi;seto si;stw aychy;sytw;sytw aychy;Сето;Сету;ستو، آیچی;سيتو;سیتو، ایچی;سیٹو;瀨戶市;瀬戸;瀬戸市;세토 시; +city::1852736;Satsumasendai;Sacuma-Sendaj;Sacumasendaj;Satsumasendai;Satumasendai-chhi;Satumasendai-chhī;Sendai;Sendaj;Sendajus;chuan nei;chuan nei shi;sa mo chuan nei;sa mo chuan nei shi;sasseumasendai si;satswmasnday kagwshyma;satswmasynday;Сатсумасендаи;Сацума-Сендай;Сацумасендай;Сацумасендај;Сендай;ساتسوماسندای، کاگوشیما;ساتسوماسينداي;川内;川内市;薩摩川內市;薩摩川内;사쓰마센다이 시; +city::1852849;Satte;Satte;satte;xing shou;さって;サッテ;幸手; +city::1852899;Sasebo;Gorad Saseba;Sasebo;Sasebo-chhi;Sasebo-chhī;Sasebum;Saseho;sa sea boa;sasebo si;sasybw;sasybw nagasaky;ssbw;zuo shi bao;zuo shi bao shi;Горад Сасеба;Сасебо;ססבו;ساسه‌بو، ناگازاکی;ساسيبو;ساسیبو، ناگاساکی;ซะเซะโบะ;佐世保;佐世保市;사세보 시; +city::1852964;Sano;Sana;Sano;Sano-chhi;Sano-chhī;sano si;sanw;sanw twchygy;zuo ye;zuo ye shi;Сана;Сано;سانو;سانو، توچیگی;佐野;佐野市;사노 시; +city::1852984;Sanjo;Sandscho;Sandyo;Sandz'o;Sandze;Sandzjo;Sandzo;Sanjo;Sanjō;Sanzyo;Sanzyo-chhi;Sanzyô-chhī;Sanzyō;san tiao;san tiao shi;sanjo si;sanjw;sanjw nygata;Сандзе;Сандзьо;Сандзё;Санџо;Санҷо;سانجو;سانجو، نیگاتا;三条;三条市;三條市;산조 시; +city::1853008;Sandacho;Sanda;Sandacho;Sandachō;san tian ding;Санда;三田町; +city::1853066;Sakurai;Sakurai;Sakurai-chhi;Sakurai-chhī;Sakuraj;Sakuri;sakulai si;sakwray;sakwray nara;ying jing;ying jing shi;Сакураи;Сакурай;ساكوراي;ساکورای، نارا;桜井;桜井市;櫻井市;사쿠라이 시; +city::1853081;Saku;Saku;Saku-chhi;Saku-chhī;sa ku;saku si;sakw;sakw naganw;zuo jiu;zuo jiu shi;Саку;Սակու;ساكو;ساکو، ناگانو;ซะกุ;佐久;佐久市;사쿠 시; +city::1853140;Sakata;SYO;Sakata;Sakata-chhi;Sakata-chhī;jiu tian;jiu tian shi;sakata;sakata si;sakata yamagata;Саката;ساكاتا;ساکاتا، یاماگاتا;酒田;酒田市;사카타 시; +city::1853190;Sakaidecho;Sakaide;Sakaide-cho;Sakaide-chō;Sakaidecho;Sakaidechō;Sakate;ban chu;ban chu ding;坂出;坂出町; +city::1853195;Sakai;Sacaia;Sacaium;Sakai;jie;jie shi;sakai si;Сакаи;堺;堺市;사카이 시; +city::1853209;Sakado;Sakado;Sakado-chhi;Sakado-chhī;ban hu;ban hu shi;sakado si;sakadw saytama;sakwdw;Сакадо;ساكودو;ساکادو، سایتاما;坂戶市;坂戸;坂戸市;사카도 시; +city::1853303;Saga;HSG;Saga;Saga Japonija;Saga-shi;Sagashi;sa nga;saga;saga si;sagashi;sagha;zuo he;zuo he shi;Сага;Сага Япония;ساغا;ساگا;ซะงะ;さが;さがし;サガ;サガシ;佐賀;佐賀市;사가 시; +city::1853338;Sabae;Sabae;qing jiang shi;zheng jiang;鯖江;鯖江市; +city::1853483;Oyama;Ojama;Oyama;Oyama-chhi;Oyama-chhī;awyama;awyama twchygy;oyama si;xiao shan;xiao shan shi;Ояма;Ојама;أوياما;اویاما، توچیگی;小山;小山市;오야마 시; +city::1853574;Otsu;Gorad Ocu;Ocu;Otsu;Otsu-shi;Otsushi;Otu;Otu-chhi;atsw shyga;awtsw;da jin;da jin shi;ootsu;ootsushi;osseu si;xosu;Ócu;Ôtu-chhī;Ōtsu;Ōtsu-shi;Ōtsushi;Ōtu;Горад Оцу;Отсу;Оцу;Оцү;أوتسو;اتسو، شیگا;โอสึ;おおつ;おおつし;オオツ;オオツシ;大津;大津市;오쓰 시; +city::1853677;Ota;Ota;Ota-chhi;awta;awta gwnma;ota si;tai tian;tai tian shi;xo ta;Ôta-chhī;Ōta;Ота;أوتا;اوتا، گونما;โอตะ;太田;太田市;오타 시; +city::1853909;Osaka;OSA;Osaacke;Osaca;Osaca - da ban shi;Osaca - 大阪市;Osaka;Osaka-shi;Osako;Oszaka;awsaka;awzaka;da ban;da ban shi;oosakashi;osaka;osaka si;xo sa ka;ywsaka;Ósaka;Ószaka;Ōsaka;Ōsaka-shi;Осака;אוסקה;أوساكا;ئوساكا;اوزاکا;ওসাকা;โอซะกะ;ოსაკა;おおさかし;大阪;大阪市;오사카 시; +city::1853992;Onomichi;Onomichi;Onomici;Onomiti;Onomiti-chhi;Onomiti-chhī;Onomiči;awnwmychy hyrwshyma;awnwmytshy;onomichi si;wei dao;wei dao shi;Ономити;Ономичи;Ономіті;أونومیتشي;اونومیچی، هیروشیما;尾道;尾道市;오노미치 시; +city::1854026;Ono;Ono;Ono-chhi;Ono-chhī;Onocho;Onochō;awnw;awnw hywgw;ono si;xiao ye;xiao ye shi;Оно;أونو;اونو، هیوگو;小野;小野市;오노 시; +city::1854083;Omuta;Omuda;Omuta;Omuta-chhi;awmwta;awmwta fwkwywka;da mou tian;da mou tian shi;omuta si;Ômuta-chhī;Ōmuda;Ōmuta;Омута;أوموتا;اوموتا، فوکوئوکا;大牟田;大牟田市;오무타 시; +city::1854093;Omura;Omura;Omura-chhi;awmwra;awmwra nagazaky;da cun;da cun shi;omula si;xo mu ra;Ômura-chhī;Ōmura;Омура;أومورا;اومورا، ناگازاکی;โอมุระ;大村;大村市;오무라 시; +city::1854162;Ome;Ome;Ome-chhi;Omė;Oume;awmh;awmh twkyw;ome si;qing mei;qing mei shi;xo mea;Ôme-chhī;Ōme;Оме;Օմե;أومه;اومه، توکیو;โอเมะ;青梅;青梅市;오메 시; +city::1854371;Okegawa;Okegawa;Okugawamachi;tong chuan;tong chuan shi;桶川;桶川市; +city::1854376;Okazaki;Aichi;Okadzaki;Okasaki;Okazaki;Okazaki-chhi;Okazaki-chhī;awkazaky;awkazaky aychy;gang qi;gang qi shi;okajaki si;xoa ka saki;Окадзаки;Окадзакі;Оказаки;أوكازاكي;اوکازاکی، آیچی;اوکازاکی، ایچی;โอะกะซะกิ;岡崎;岡崎市;오카자키 시; +city::1854383;Okayama;OKJ;Okajama;Okayama;Okayama-shi;Okayamashi;gang shan;gang shan shi;okayama;okayama si;okayamashi;Окаяма;おかやま;おかやまし;オカヤマ;オカヤマシ;岡山;岡山市;오카야마 시; +city::1854384;Okaya;Hirano;gang gu;岡谷; +city::1854487;Oita;OIT;Oita;Oita-shi;Oitashi;da fen;da fen shi;oita si;ooita;ooitashi;Óita;Ōita;Ōita-shi;Ōitashi;Оита;おおいた;おおいたし;オオイタ;オオイタシ;大分;大分市;오이타 시; +city::1854530;Oi;Oi;da jing;ooi;Ōi;おおい;オオイ;大井; +city::1854703;Ogaki;Oaki;Ogaki;Ogaki-chhi;awgaky gyfw;awghaky;da yuan;da yuan shi;ogaki si;Ôgaki-chhī;Ōgaki;Огаки;Оґакі;أوغاكي;اوگاکی، گیفو;大垣;大垣市;오가키 시; +city::1854747;Odawara;Odauara;Odavara;Odawara;Odawara-chhi;Odawara-chhī;Odaŭara;Ontagouara;awdawara kanagawa;awdawara kanaghawa;odawala si;xiao tian yuan;xiao tian yuan shi;xoa da wa ra;Ονταγουάρα;Одавара;أوداوارا، كاناغاوا;اوداوارا، کاناگاوا;โอะดะวะระ;小田原;小田原市;오다와라 시; +city::1854803;Obu;Obu;Obu-chhi;Ofu;awbw;awbw aychy;da fu;da fu shi;obu si;xo bu;Ôbu-chhī;Ōbu;Ōfu;Обу;أوبو;اؤبو، ایچی;اوبو، آیچی;โอบุ;大府;大府市;오부 시; +city::1854902;Numazu;Numadu;Numadzu;Numasu;Numazu;Numazu-chhi;Numazu-chhī;namazw;nu masu;numajeu si;nwmazw shyzwka;nwmazw shyzwywka;zhao jin;zhao jin shi;Нумадзу;Нумазу;Нүмазү;نامازو;نومازو، شیزوئوکا;نومازو، شیزوکا;นุมะซุ;沼津;沼津市;누마즈 시; +city::1855066;Nogata;Naogata;Naokata;Nogata;Nōgata;zhi fang;直方; +city::1855078;Noda;Noda;Noda-Shi;Noda-chhi;Noda-chhī;noa da;noda si;nwda;nwda chyba;ye tian;ye tian shi;Нода;نودا;نودا، چیبا;โนะดะ;野田;野田市;노다 시; +city::1855095;Nobeoka;Nobeoka;Nobeoka-chhi;Nobeoka-chhī;nobe-oka si;nwbywka;yan gang;yan gang shi;Нобеока;نوبه‌اوکا، میازاکی;نوبيوكا;延岡;延岡市;노베오카 시; +city::1855189;Nishio;Nishio;Nisio;Nisio-chhi;Nisio-chhī;Nisyio;Niŝio;nisio si;nyshw;nyshyw;nyshyw aychy;xi wei;xi wei shi;Нисио;Нишио;Нісіо;نيشيو;نیشو;نیشیو، آیچی;نیشیو، ایچی;西尾;西尾市;니시오 시; +city::1855207;Nishinomiya-hama;Nishinomiya;Nishinomiya-hama;Nisinomija;xi gong;xi gong bang;xi gong shi;Нисиномия;西宮;西宮市;西宮浜; +city::1855410;Niitsu-honcho;Niitsu;Niitsu-honcho;Niitsu-honchō;Niitu;Niizu;xin jin ben ding;xin jin shi;新津市;新津本町; +city::1855425;Niihama;Niihama;Niihama-chhi;Niihama-chhī;Niikhama;Nijihama;Nikhama;niihama;niihama si;nyhama;xin ju bang;xin ju bang shi;xin ju bin shi;Ниихама;Нииҳама;Нихама;Ніїхама;نيهاما;نیہاما، اہیمے;نی‌ایهاما، اهیمه;にいはま;新居浜;新居浜市;新居濱市;니이하마 시; +city::1855431;Niigata;KIJ;Niahi-niigata;Nigita;Niigata;nigata si;niigata;niigatashi;xin xi;xin xi shi;Ниигата;にいがた;にいがたし;ニイガタ;ニイガタシ;新潟;新潟市;니가타 시; +city::1855580;Narutocho-mitsuishi;Muya;Naruto;Narutocho-mitsuishi;Narutochō-mitsuishi;ming men;ming men ding san~tsu shi;鳴門;鳴門町三ッ石; +city::1855612;Nara-shi;Nara;Nara-shi;nai liang;nai liang shi;nala si;nara;narashi;Нара;نارا;ならし;奈良;奈良市;나라 시; +city::1855753;Nakatsugawa;Nakacugava;Nakatsu;Nakatsugava;Nakatsugawa;Nakatugawa-chhi;Nakatugawa-chhī;na ka sung a wa;nakasseugawa si;nakatswgawa gyfw;nakatswghawa ghyfw;zhong jin chuan;zhong jin chuan shi;Накатсугава;Накацугава;Накацуґава;ناكاتسوغاوا غيفو;ناکاتسوگاوا، گیفو;นะกะสึงะวะ;中津川;中津川市;나카쓰가와 시; +city::1855757;Nakatsu;Nakacu;Nakatsu;Nakatu;Nakatu-chhi;Nakatu-chhī;nakasseu si;nakatsw awyta;nakatsw awyyta;zhong jin shi;Накатсу;Накацу;ناكاتسو، أويتا;ناکاتسو، اوئیتا;中津市;나카쓰 시; +city::1856035;Naha;Nafa;Naha;Naha-shi;Nahashi;Nakha;Nawa;na ba;na ba shi;naha;naha si;nahashi;nhh;Наха;נהה;なは;なはし;ナハ;ナハシ;那覇;那覇市;那霸市;나하 시; +city::1856057;Nagoya;NGO;Nagoia;Nagoja;Nagojo;Nagoya;Nagoya City;Nagoya-shi;ming gu wu;ming gu wu shi;na ngoa ya;naghwya;nagoya si;nagoyashi;nagwya aychy;Нагоя;ناغويا;ناگویا، آیچی;นะโงะยะ;なごやし;名古屋;名古屋市;나고야 시; +city::1856068;Nago;Naga;Nago;Nago-chhi;Nago-chhī;Nagu;Okaneku;ming hu;ming hu shi;naghw awkynawa;nago si;nagw awkynawa;Ôkaneku;Нага;Наго;Наґо;נאגו;ناغو، أوكيناوا;ناگو، اوکیناوا;名護;名護市;나고 시; +city::1856177;Nagasaki;NGS;Nagasacium;Nagasaki;Nagasaki-shi;Nagasakis;Nagasakishi;Nagasako;Nagaszaki;Nangasaque;nagasaki;nagasaki si;nagasakishi;nagazaky;naghasaky;najazaky;zhang qi;zhang qi shi;Нагасаки;נגסאקי;ناجازاكي;ناغاساكي;ناگازاکی;नागासाकी;ნაგასაკი;ながさき;ながさきし;ナガサキ;ナガサキシ;長崎;長崎市;长崎市;나가사키 시; +city::1856184;Nagareyama;Nagarejama;Nagareyama;Nagareyama-chhi;Nagareyama-chhī;liu shan;liu shan shi;na ngarea ya ma;nagaleyama si;nagaryama chyba;nagaryyama chyba;nagharh yama;Нагареяма;Нагарејама;Наґареяма;ناغاره ياما;ناگاریاما، چیبا;ناگارییاما، چیبا;นะงะเระยะมะ;流山;流山市;나가레야마 시; +city::1856199;Nagaoka;Gorad Nagaoka;Nagaoka;Nagaoka-chhi;Nagaoka-chhī;na nga xoa ka;nagaoka si;nagawka nygata;nagaywka nygata;naghawka;zhang gang;zhang gang shi;Горад Нагаока;Нагаока;Наґаока;ناغاوكا;ناگائوکا، نیگاتا;ناگاوکا، نیگاتا;นะงะโอะกะ;ნაგაოკა;長岡;長岡市;나가오카 시; +city::1856215;Nagano;Nagano;Nagano-shi;Naganoshi;nagano;naganoshi;zhang ye;zhang ye shi;Нагано;ながの;ながのし;ナガノ;ナガノシ;長野;長野市; +city::1856243;Nagahama;Nagahama;Nagakhama;zhang bang;zhang bang shi;Нагахама;長浜;長浜市; +city::1856293;Nabari;Nabari;ming zhang;ming zhang shi;名張;名張市; +city::1856367;Musashino;Musashino;Musasinas;Musasino;Musasino-chhi;Musasino-chhī;Musašinas;mu sa chi noa;musasino si;mwsashynw;mwsashynw twkyw;wu cang ye shi;wu zang ye;wu zang ye shi;Мусасино;Мусасіно;Мусашино;Մուսասինո;מוסאשינו;موساشينو;موساشینو، توکیو;มุซะชิโนะ;武蔵野;武蔵野市;武藏野市;무사시노 시; +city::1856456;Muko;Muka;xiang ri;Мука;向日; +city::1856569;Moriyama;Morijama;Moriyama;shou shan;Морияма;守山; +city::1856584;Moriguchi;Moriguchi;Moriguci;Moriguti;Moriguti-chhi;Moriguti-chhī;Morigutsi;Moriguĉi;QGT;moa ringu ci;moliguchi si;mwryghwtshy awsaka;mwrygwchy awsaka;shou kou;shou kou shi;Моригути;Моригучи;Моригучӣ;Моріґучі;موريغوتشي، أوساكا;موریگوچی، اوساکا;โมะริงุจิ;守口;守口市;모리구치 시; +city::1856717;Miyazaki;KMI;Mijadzaki;Miyazaki;Miyazaki-shi;Miyazakishi;gong qi;gong qi shi;miyazaki;miyazakishi;Миядзаки;みやざき;みやざきし;ミヤザキ;ミヤザキシ;宮崎;宮崎市; +city::1856775;Miyakonojo;Mijakonodzh'o;Mijakonodzjo;Mijakonodzo;Mijakonojo;Miyakonojo;Miyakonojō;Miyakonozyo;Miyakonozyo-chhi;Miyakonozyô-chhī;Miyakonozyō;dou cheng;dou cheng shi;mi ya koa noa co;miyakonojo si;myakwnwjw;myakwnwjw myazaky;Мияконодзё;Мияконоҷо;Мијаконоџо;Міяконоджьо;مياكونوجو;میاکونوجو، میازاکی;มิยะโกะโนะโจ;都城;都城市;미야코노조 시; +city::1856942;Mitaka-shi;Mitaka;san ying;san ying shi;三鷹;三鷹市; +city::1856977;Mishima;Mishima;Misima;Misima-chhi;Misima-chhī;Misyima;Mişima;mi chi ma;misima si;myshyma;myshyma shyzwywka;san dao;san dao shi;Мисима;Мишима;Місіма;ميشيما;میشیما، شیزوئوکا;มิชิมะ;三島;三島市;미시마 시; +city::1857046;Mino;Mino-shi;Minoh;Minoh City;ji mian;ji mian shi;箕面;箕面市; +city::1857144;Minamirinkan;Minami Rinkan Yamato;Minami-rinkan;Minamirinkan;nan lin jian;南林間; +city::1857276;Miki;Miki;Miki-chhi;Miki-chhī;miki;miki si;myky;myky hywgw;san mu;san mu shi;Мики;Мікі;ميكي;میکی، هیوگو;มิกิ;三木;三木市;미키 시; +city::1857334;Mihara;Mihama;Mihara;Mihara-chhi;Mihara-chhī;Mikhara;mihala si;myhara;myhara hyrwshyma;san yuan;san yuan shi;Михара;Миҳара;Міхара;میهارا;میهارا، هیروشیما;三原;三原市;미하라 시; +city::1857470;Matsuto;Matsuto;Matsutō;Matto;Mattō; +city::1857519;Matsumoto;Fukase;Fukashi;MMJ;Macumoto;Matsumoto;Matumoto;Matumoto-chhi;Matumoto-chhī;Shonai;masseumoto si;masu moa toa;matswmwtw;matswmwtw naganw;song ben;song ben shi;Матсумото;Мацумото;Մացումոտո;ماتسوموتو;ماتسوموتو، ناگانو;มะสึโมะโตะ;松本;松本市;마쓰모토 시; +city::1857550;Matsue;Macue;Macueh;Macuje;Macujė;Matsu;Matsue;Matsue-shi;Matsue-su;Matsue-sṳ;Matsueshi;Matue;Matue-chhi;Matue-chhī;masseue si;masu xea;matsue;matsueshi;matswa;matswyh;song jiang;song jiang shi;Матсуе;Мацуе;Мацуэ;ماتسو، شیمانے;ماتسوئه;ماتسوا;มะสึเอะ;まつえ;まつえし;マツエ;マツエシ;松江;松江市;마쓰에 시; +city::1857553;Matsudo;Macudo;Matsudo;Matudo-chhi;Matudo-chhī;masseudo si;masu doa;matswdw;matswdw chyba;song hu;song hu shi;Матсудо;Мацудо;ماتسودو;ماتسودو، چیبا;มะสึโดะ;松戶市;松戸;松戸市;마쓰도 시; +city::1857568;Matsubara;Matsubara;song yuan;松原; +city::1857665;Marugame;Marugame;Marugame-chhi;Marugame-chhī;Marukame;Maruqame;malugame si;marwgamh kagawa;marwghamh;wan gui;wan gui shi;Маругаме;Маруґаме;ماروغامه;ماروگامه، کاگاوا;丸亀;丸亀市;丸龜市;마루가메 시; +city::1857766;Maizuru;Maidsuru;Maiduru;Maidzuru;Maizuru;Maizuru-chhi;Maizuru-chhī;Majdzuru;maijeulu si;mayzwrw;mayzwrw kywtw;misu ru;wu he;wu he shi;Маизуру;Майдзуру;مايزورو;مایزورو، کیوتو;ไมซุรุ;舞鶴;舞鶴市;舞鹤市;마이즈루 시; +city::1857843;Maebashi;Maebashi;Maebashi-shi;Maebashishi;Maebasi;Maebaši;Maehbasi;ma-ebasi si;maebashi;maebashishi;qian qiao;qian qiao shi;Маэбаси;まえばし;まえばしし;マエバシ;マエバシシ;前橋;前橋市;마에바시 시; +city::1857844;Maebaru-chuo;Maebaru;Maebaru-chuo;Maebaru-chūō;Maeharu;qian yuan zhong yang;前原中央; +city::1857871;Machida;Machida;Macida;Matida;Matida-chhi;Matida-chhī;Mačida;ding tian;ding tian shi;ma chi da;machida si;machyda twkyw;matshyda;ting tian shi;Матида;Матіда;Мачида;Մատիդա;ماتشيدا;ماچیدا، توکیو;ماچیدا، ٹوکیو;มะชิดะ;町田;町田市;마치다 시; +city::1857910;Kyoto;Gorad Kijota;Kejuots;Kiaⁿ-to͘-chhī;Kiotas;Kioto;Kiotó;Kjoto;Kjóto;Kyoto;Kyoto-shi;Kyotu;Kyotum;Kyōto;Kyōto-shi;Kėjuots;Lungsod ng Kyoto;Quioto;UKY;gyoto si;jing dou;jing dou shi;kheiyw toa;ki'oto;kiyoto;kiyotto;kyeattea;kyoto;kyoutoshi;kywtw;qywtw;Κιότο;Горад Кіёта;Киото;Кёто;Кіото;Кјото;Կիոտո;קיאטא;קיוטו;كيوتو;کیوتو;کیوٹو;ܩܝܘܛܘ;क्योटो;क्योतो;কিয়োটো;ਕਿਓਤੋ;கியோத்தோ;ക്യോത്തോ;ක්යෝතෝ;เคียวโตะ;ཁེཡོ་ཐྲོ།;ကျိုတိုမြို့;კიოტო;きょうとし;京都;京都市;교토 시; +city::1858067;Kusatsu;Kusacu;Kusatsu;Kusatsu-cho;Kusatsu-chō;Kusatu;Susatsu;cao jin;Кусацу;草津; +city::1858088;Kurume;Kurume;Kurume-chhi;Kurume-chhī;gulume si;jiu liu mi;jiu liu mi shi;khuru mea;kwrwmh fwkwywka;kwrwmy;kwrwmy fwkwka;Куруме;كورومي;کورومه، فوکوئوکا;کورومی، فوکوکا;คุรุเมะ;久留米;久留米市;구루메 시; +city::1858296;Kure;Kure;Kure-chhi;Kure-chhī;gule si;khurea;kwrh hyrwshyma;kwrshy;qwrh;wu;wu shi;Куре;קורה;كورشي;کوره، هیروشیما;کورے، ہیروشیما;คุเระ;吳市;呉;呉市;구레 시; +city::1858311;Kurashiki;Kurashiki;Kurasiki;Kurasiki-chhi;Kurasiki-chhī;Kurasyiki;Kuraşiki;cang fu;cang fu shi;gulasiki si;khu ra chiki;kwrashyky awkayama;Курасики;Курасікі;Курашики;كوراشيكي، أوكاياما;کوراشیکی، اوکایاما;คุระชิกิ;倉敷;倉敷市;구라시키 시; +city::1858421;Kumamoto;KMJ;Kumamoto;Kumamoto-shi;gumamoto si;kumamotoshi;xiong ben;xiong ben shi;Кумамото;くまもとし;熊本;熊本市;구마모토 시; +city::1858428;Kumagaya;Kumagai;Kumagaja;Kumagaya;Kumagaya-chhi;Kumagaya-chhī;gumagaya si;khu ma nga ya;kwmagaya saytama;kwmagaya sayytama;kwmaghaya;xiong gu;xiong gu shi;Кумагая;Кумагаја;Кумаґая;كوماغايا;کوماگایا، سائیتاما;کوماگایا، سایتاما;คุมะงะยะ;熊谷;熊谷市;구마가야 시; +city::1858445;Kukichuo;Kuki;Kukichuo;Kukichūō;jiu xi;jiu xi zhong yang;kukichuuou;Куки;くきちゅうおう;クキチュウオウ;久喜;久喜中央; +city::1858498;Kudamatsu;Kudamatsu;xia song;下松; +city::1858729;Koshigaya;Koshigaja;Koshigaya;Kosigaja;Kosigaya-chhi;Kosigaya-chhī;Kosyigaya;gosigaya si;khoa chi nga ya;kwshygaya saytama;kwshygaya sayytama;kwshyghaya;yue gu;yue gu shi;Косигая;Косіґая;Кошигая;Кошигаја;كوشيغايا;کوشیگایا، سائیتاما;کوشیگایا، سایتاما;โคะชิงะยะ;越谷;越谷市;고시가야 시; +city::1858794;Konosu;Konosu;Kōnosu;hong chao;kounosu;こうのす;コウノス;鴻巣; +city::1858836;Konan;Konan;jiang nan;Конан;江南; +city::1858910;Komatsu;KMQ;Komacu;Komatsu;Komatu-chhi;Komatu-chhī;gomasseu si;kwmatsw;kwmatsw ayshykawa;xiao song;xiao song shi;Коматсу;Комацу;كوماتسو;کوماتسو، ایشیکاوا;小松;小松市;고마쓰 시; +city::1858926;Komaki;Komaki;Komaki-chhi;Komaki-chhī;gomaki si;khoa maki;kwmaky;kwmaky aychy;kwmaky aytshy;xiao mu;xiao mu shi;Комаки;Комакі;كوماكي، آيتشي;کوماکی;کوماکی، آیچی;โคะมะกิ;小牧;小牧市;고마키 시; +city::1858964;Kokubunji;Kokubundzi;Kokubundzis;Kokubundžis;Kokubungi;Kokubunji;Kokubunzi-chhi;Kokubunzi-chhī;Kokubunĝi;gokubunji si;guo fen si;guo fen si shi;khoa ku bun ci;kwkwbwnjy;kwkwbwnjy twkyw;Кокубундзи;Кокубундзі;Кокубунџи;Кокубунҷи;Կոկուբունձի;كوكوبونجي;کوکوبونجی، توکیو;โคะกุบุนจิ;国分寺;国分寺市;國分寺市;고쿠분지 시; +city::1858972;Kokubu-matsuki;Kokubo;Kokubu;Kokubu-matsuki;Kokubun;guo fen;guo fen song mu;Кокубу;国分;国分松木; +city::1859093;Koga;Koga;Koga-chhi;Koga-chhī;goga si;gu he;gu he shi;kwga aybaraky;kwgha;Кога;Коґа;كوغا;کوگا، ایباراکی;古河;古河市;고가 시; +city::1859094;Koga;Koga;gu he;Кога;古賀; +city::1859100;Kofu;Kofe;Kofu;Kofu-shi;Kofushi;Kohu;Kohu-chhi;Kófu;Kôhu-chhī;Kōfu;Kōfu-shi;Kōfushi;Kōhu;gohu si;jia fu;jia fu shi;kho fu;koufu;koufushi;kwfw;kwfw yamanashy;qwpw;Кофе;Кофу;Կոֆու;קופו;كوفو;کوفو، یاماناشی;โคฟุ;こうふ;こうふし;コウフ;コウフシ;甲府;甲府市;고후 시; +city::1859146;Kochi;KCZ;Kochi;Kochi-shi;Kochin;Kochishi;Koti;Kôti;Kōchi-shi;Kōchishi;gao zhi;gao zhi shi;kouchi;kouchishi;Кочин;こうち;こうちし;コウチ;コウチシ;高知;高知市; +city::1859171;Kobe;Gorad Kobeh;Kobe;Kobe-chhi;Kobe-shi;Kobė;Kompe;Kóbe;Kôbe-chhī;Kōbe;Kōbe-shi;Lungsod ng Kobe;gobe si;kaube;kho bea;kobe;kope;koubeshi;kwbh;qwbh;shen hu;shen hu shi;Κόμπε;Горад Кобэ;Кобе;Կոբե;קובה;كوبه;کوبه;کوبے;कोबे;কৌবে;கோபே;โคเบะ;კობე;こうべし;神戶;神户市;神戸;神戸市;고베 시; +city::1859307;Kitakyushu;KKJ;Kita-Kjushju;Kitakiusiu;Kitakiūšiū;Kitakjushju;Kitakjushu;Kitakjusju;Kitakjusu;Kitakjuŝu;Kitakjúsú;Kitakjúšú;Kitakjūshū;Kitakyuesue;Kitakyushu;Kitakyusyu;Kitakyüşü;Kitakyūshū;Pak-kiu-chiu-chhi;Pak-kiú-chiu-chhī;bei jiu zhou;bei jiu zhou shi;gitakyusyu si;khi ta kiw chu;kytakywshw;kytakywshw fwkwywka;Китакюсю;Китакюшу;Китакюшю;Китакјушу;Кіта-Кюшю;Կիտակյուսյու;كيتاكيوشو;کیتاکیوشو، فوکوئوکا;คิตะกีวชู;北九州;北九州市;기타큐슈 시; +city::1859383;Kishiwada;Kishiwada;Kisivada;Kisiwada;an he tian;an he tian shi;gisiwada si;Кисивада;岸和田;岸和田市;기시와다 시; +city::1859393;Kisarazu;Kisaradu;Kisaradzu;Kisarazu;Kisarazu-chhi;Kisarazu-chhī;Kizarazu;gisalajeu si;khi sa rasu;kisaradzu;ksarazw chyba;kysarazw;kysarazw chyba;mu geng jin;mu geng jin shi;Кисарадзу;Кисаразу;Кісарадзу;كيسارازو;کسارازو، چیبا;کیسارازو، چیبا;คิซะระซุ;きさらづ;キサラヅ;木更津;木更津市;기사라즈 시; +city::1859405;Kiryu;Kiri;Kiriu;Kirju;Kiryu;Kiryu-chhi;Kiryû-chhī;Kiryū;gilyu si;kyrw;kyryw gwnma;tong sheng;tong sheng shi;Кири;Кирю;Кирју;Кірю;كيرو;کیریو، گونما;桐生;桐生市;기류 시; +city::1859586;Kazo;Kadzo;Kaso;Kazo;Kazo-chhi;Kazo-chhī;gajo si;jia xu;jia xu shi;kazw;kazw saytama;Кадзо;Казо;كازو;کازو، سایتاما;加須;加須市;가조 시; +city::1859642;Kawasaki;Cita de Kawasaki;Cità de Kawasaki;Gorad Kavasaki;Kauasaki;Kavasaki;Kavasakis;Kavaszaki;Kawasaki;Kawasaki City;Kawasaki Si;Kawasaki-chhi;Kawasaki-chhī;Kaŭasaki;chuan qi;chuan qi shi;gawasaki si;kavasaki;kawasaky;kawasaky kanagawa;kha wa saki;Καβασάκι;Горад Кавасакі;Кавасаки;Кавасакі;Կավասակի;קווסאקי;كاواساكي;کاواساکی، کاناگاوا;कावासाकी;คะวะซะกิ;川崎;川崎市;가와사키 시; +city::1859675;Kawanishi;Kauanishi;Kavanishi;Kavanisi;Kawanishi;Kawanisi-chhi;Kawanisi-chhī;chuan xi;chuan xi shi;gawanisi si;kawanyshy;kawanyshy hywgw;Каваниси;Каваниши;Каваніші;Кауаниши;كاوانيشي;کاوانیشی، هیوگو;川西;川西市;가와니시 시; +city::1859730;Kawaguchi;Kauaguchi;Kavaguchi;Kavagucis;Kavaguti;Kavagučis;Kavaquci;Kavaquçi;Kawaguchi;Kawaguti-chhi;Kawaguti-chhī;Kawagutsi;chuan kou;chuan kou shi;gawaguchi si;kawaghwtshy;kawaguchi;kawagwchy saytama;kawagwchy sayytama;kha wangu chi;Кавагути;Кавагучи;Каваґуті;Кауагучи;كاواغوتشي;کاواگوچی، سائیتاما;کاواگوچی، سایتاما;คะวะงุชิ;კავაგუტი;かわぐち;カワグチ;川口;川口市;가와구치 시; +city::1859740;Kawagoe;Kavagoe;Kavagoeh;Kawagoe;Kawagoe-chhi;Kawagoe-chhī;chuan yue;chuan yue shi;gawago-e si;kawaghwyh;kawagwyh saytama;kha wa ngoa xea;Кавагое;Кавагоэ;Каваґое;كاواغويه;کاواگوئه، سایتاما;کاواگوے، سائیتاما;คะวะโงะเอะ;კავაგოე;川越;川越市;가와고에 시; +city::1859884;Kasukabe;Kasukabe;Kasukabe-chhi;Kasukabe-chhī;chun ri bu;chun ri bu shi;gaseukabe si;kasukabe;kaswkabh saytama;kaswkaby;kha suk a bea;po bi;Касукабе;كاسوكابي;کاسوکابه، سایتاما;کاسوکابے، سائیتاما;คะซุกะเบะ;かすかべ;カスカベ;春日部;春日部市;粕壁;가스카베 시; +city::1859891;Kasugai;Kasugai;Kasugai-chhi;Kasugai-chhī;Kasugaj;chun ri jing;chun ri jing shi;gaseugai si;kaswgay;kaswgay aychy;kaswgayy aychy;kaswghay;khasu ngi;Касугаи;Касугай;Касугај;Касуґай;Касүгаи;كاسوغاي;کاسوگائی، ایچی;کاسوگای;کاسوگای، آیچی;کسوگا‌‍‌ئ;คะซุไง;春日井;春日井市;가스가이 시; +city::1859908;Kashiwazaki;Kashivazaki;Kashiwazaki;Kasivadzaki;Kasiwazaki-chhi;Kasiwazaki-chhī;Kasyiwasaki;bai qi;bai qi shi;gasiwajaki si;kashywazaky;kashywazaky nygata;Касивадзаки;Касівадзакі;Кашивазаки;كاشيوازاكي;کاشیوازاکی، نیگاتا;柏崎;柏崎市;가시와자키 시; +city::1859924;Kashiwa;Kashiva;Kashiwa;Kasiva;Kasiwa-chhi;Kasiwa-chhī;Kaşiva;bai;bai shi;gasiwa si;kashywa;kashywa chyba;kha chi wa;Касива;Касіва;Кашива;كاشيوا;کاشیوا، چیبا;คะชิวะ;柏;柏市;가시와 시; +city::1859951;Kashihara-shi;Kashihara;Kashihara-shi;jiang yuan;jiang yuan shi;橿原;橿原市; +city::1859952;Kashihara;Kashihara;Kashiharacho;Kashiharachō;Kashiwabara;Kashiwara;bai yuan;柏原; +city::1859990;Kasaoka;Kasaoka;li gang;笠岡; +city::1860034;Kariya;Karija;Kariya;Kariya-chhi;Kariya-chhī;Kariya-cho;Kariya-chō;galiya si;karya aychy;karyya;karyya aychy;yi gu;yi gu shi;Кария;Карија;Карія;كارييا;کاریا، آیچی;کاریہ;کارییا، ایچی;刈谷;刈谷市;가리야 시; +city::1860063;Karatsu;Karacu;Karatsu;Karatu;Karatu Si;Karatu-chhi;Karatu-chhī;galasseu si;karatsw;karatsw saga;tang jin;tang jin shi;Каратсу;Карацу;كاراتسو;کاراتسو;کاراتسو، ساگا;唐津;唐津市;가라쓰 시; +city::1860098;Kanuma;Kamima;Kanuma;Kanuma-chhi;Kanuma-chhī;ganuma si;kanwma;kanwma twchygy;lu zhao;lu zhao shi;Канума;كانوما;کانوما، توچیگی;鹿沼;鹿沼市;가누마 시; +city::1860112;Kanoya;Kanoja;Kanoya;Kanoya-chhi;Kanoya-chhī;ganoya si;kanwya;kanwya kagwshyma;lu wu;lu wu shi;Каноя;Каноја;كانويا;کانویا، کاگوشیما;鹿屋;鹿屋市;가노야 시; +city::1860243;Kanazawa;Canasava;Kanadzava;Kanazaua;Kanazawa;Kanazawa-shi;Kanazawa-si;Kanazawashi;Kanazaŭa;ganajawa si;jin ze;jin ze shi;kanazawa;kanazawashi;Канадзава;かなざわ;かなざわし;カナザワ;カナザワシ;金沢;金沢市;金澤市;가나자와 시; +city::1860437;Kamirenjaku;Kami-renjaku;Kamirenjaku;Mitaka;Mitaka-machi;Mitaka-mura;kamirenjaku;shang lian que;Митака;かみれんじゃく;カミレンジャク;上連雀; +city::1860635;Kameoka;Kameoka;Kameoka-chhi;Kameoka-chhī;game-oka si;gui gang;gui gang shi;kamywka;kha mea xoa ka;Камеока;كاميوكا;کامه‌اوکا، کیوتو;คะเมะโอะกะ;亀岡;亀岡市;龜岡市;가메오카 시; +city::1860672;Kamakura;Gorad Kamakura;Kamakura;Kamakura-chhi;Kamakura-chhī;gamakula si;kamakwra;kamakwra kanagawa;kha ma kura;lian cang;lian cang shi;Горад Камакура;Камакура;كاماكورا;کاماکورا، کاناگاوا;คะมะกุระ;鎌倉;鎌倉市;镰仓市;가마쿠라 시; +city::1860704;Kakogawacho-honmachi;Kakogawa;Kakogawacho-honmachi;Kakogawachō-honmachi;gakogawa si;jia gu chuan ding ben ding;jia gu chuan shi;加古川市;加古川町本町;가코가와 시; +city::1860728;Kakegawa;Kakegaua;Kakegava;Kakegawa;Kakegawa-chhi;Kakegawa-chhī;Kakegaŭa;Kakehgava;gakegawa si;gua chuan;gua chuan shi;kakyghawa;Какегава;Какеґава;Какэгава;كاكيغاوا;کاکه‌گاوا، شیزوئوکا;掛川;掛川市;가케가와 시; +city::1860735;Kakamigahara;Kagamigahara;Kagamihara;Kakamigahara;Kakamigahara-chhi;Kakamigahara-chhī;Kakamigakhara;gakamigahala si;ge wu yuan;ge wu yuan shi;kakamygahara gyfw;kakamyghhara;Какамигахара;Какамигаҳара;Какаміґахара;كاكاميغهارا;کاکامیگاهارا، گیفو;کاکامیگاہارا، گیفو;各务原市;各務原;各務原市;가카미가하라 시; +city::1860748;Kashima-shi;Kashima;lu dao;lu dao shi;鹿島;鹿島市;鹿嶋;鹿嶋市; +city::1860765;Kaizuka;Kaitsuka;Kaizuka;bei zhong;bei zhong shi;貝塚;貝塚市; +city::1860827;Kagoshima;KOJ;Kagoshima;Kagoshima-shi;Kagoshimashi;Kagosima;Kagošima;gagosima si;kaghwshyma;kagoshima;kagoshimashi;lu er dao;lu er dao shi;lu r dao shi;Кагошима;كاغوشيما;かごしま;かごしまし;カゴシマ;カゴシマシ;鹿儿岛市;鹿児島;鹿児島市;가고시마 시; +city::1860871;Kadoma;Kadoma;Kadoma-chhi;Kadoma-chhī;Kadome;gadoma si;kadwma awsaka;kha doa ma;men zhen;men zhen shi;Кадома;Кадоме;كادوما، أوساكا;کادوما، اوساکا;คะโดะมะ;門真;門真市;가도마 시; +city::1861084;Izumo;IZO;Idzumo;Isumo;Itsumo;Izumo;Izumo-chhi;Izumo-chhī;ayzwmw;azwmw;chu yun;chu yun shi;ijeumo si;xisu moa;Ідзумо;Идзумо;Изумо;إزومو;ایزومو;อิซุโมะ;出雲;出雲市;이즈모 시; +city::1861095;Izumiotsu;Ebisucho;Ebisuchō;Idzumotsu;Izumiotsu;Izumiōtsu;Otsu;quan da jin;Ōtsu;Идзумотсу;泉大津; +city::1861107;Izumi;Izumi;he quan;和泉; +city::1861164;Iwatsuki;Iwatsuki;iwatsuki;yan gui;いわつき;イワツキ;岩槻; +city::1861171;Iwata;Ivata;Iwata;Iwata-chhi;Iwata-chhī;awata;aywata shyzwywka;iwata si;pan tian;pan tian shi;xi wa ta;İvata;Івата;Ивата;إواتا;ایواتا، شیزوئوکا;อิวะตะ;磐田;磐田市;이와타 시; +city::1861212;Iwakuni;IWK;Ivakuni;Iwakuni;Iwakuni-chhi;Iwakuni-chhī;Ngam-koet-su;Ngàm-koet-sṳ;awakwny;aywakwny yamagwchy;iwakuni si;yan guo;yan guo shi;Івакуні;Ивакуни;איוואקוני;إواكوني;ایواکونی، یاماگوچی;ივაკუნი;岩国;岩国市;岩國市;이와쿠니 시; +city::1861244;Iwade;Iwade;yan chu;岩出; +city::1861280;Itoman;Ichuman;Itoman;Shionja;Shunja;Sunja;Sunza;itoman;mi man;いとまん;糸満; +city::1861290;Ito;Itas;Ito;Ito-chhi;Itó;Itô-chhī;Itō;atw;aytw shyzwywka;ito si;xi to;yi dong;yi dong shi;Іто;Ито;إتو;ایتو، شیزوئوکا;อิโต;伊東;伊東市;이토 시; +city::1861310;Itami;Itami;Itami-chhi;Itami-chhī;Itan;atamy;aytamy hywgw;itami si;xi ta mi;yi dan;yi dan shi;İtami;Ітамі;Итами;إتامي;ایتامی، هیوگو;อิตะมิ;伊丹;伊丹市;이타미 시; +city::1861436;Isesaki;Iseaki;Isehsaki;Isesaki;Isesaki-chhi;Isesaki-chhī;Isezaki;asysaky;asysaky gwnma;isesaki si;xi sea saki;yi shi qi;yi shi qi shi;Ісесакі;Исесаки;Исэсаки;إسيساكي;اسیساکی، گونما;ایسه‌ساکی، گونما;อิเซะซะกิ;伊勢崎;伊勢崎市;이세사키 시; +city::1861449;Isehara;Isehara;yi shi yuan;伊勢原; +city::1861450;Ise;Ise;Ise-chhi;Ise-chhī;Iseh;Isė;Udiyamada;Uji;Uji-Yamada;Uziyamada;Yamada;aysh;aysh myh;ise;ise si;yi shi;yi shi shi;Ісе;Исе;Исэ;إيسه;ایسه، میه;ისე;伊勢;伊勢市;이세 시; +city::1861464;Isahaya;Isahaja;Isahara;Isahaya;Isahaya-chhi;Isahaya-chhī;Isakhaja;aysahaya;aysahaya nagazaky;dong zao;dong zao shi;isahaya si;jian zao;jian zao shi;Ісахая;Исахая;Исахаја;Исаҳая;إيساهايا;ایساهایا، ناگازاکی;諌早;諌早市;諫早;諫早市;이사하야 시; +city::1861528;Inuyama;Inujama;Inuyama;Inuyama-chhi;Inuyama-chhī;Inuyama-cho;Inuyama-chō;anwyama aytshy;aynwyama aychy;inuyama si;quan shan;quan shan shi;xinu ya ma;Інуяма;Инуяма;إنوياما، آيتشي;انویامہ;اینویاما، آیچی;อินุยะมะ;犬山;犬山市;이누야마 시; +city::1861602;Inazawa;Inadzava;Inasawa;Inasawacho;Inasawachō;Inazava;Inazawa;Inazawa-chhi;Inazawa-chhī;Inazawacho;Inazawachō;anazawa;anazawa aychy;aynazawa aychy;dao ze;dao ze shi;inajawa si;Інадзава;Инадзава;Иназава;إنازاوا;انازاوا، ایچی;انازاوہ;اینازاوا، آیچی;稲沢;稲沢市;稻澤市;이나자와 시; +city::1861641;Ina;Ina;Ina-chhi;Ina-chhī;ana;ayna naganw;ina si;xin a;yi na;yi na shi;Іна;Ина;Ինա;إنا;اینا، ناگانو;อินะ;伊那;伊那市;이나 시; +city::1861677;Imaricho-ko;Imari;Imaricho-ko;Imarichō-kō;Imarimachi;yi wan li ding jia;Имари;伊万里町甲; +city::1861699;Imaichi;; +city::1861749;Ikoma;Ikoma;Ikoma-chhi;Ikoma-chhī;Ikuma;akwma;aykwma nara;ikoma si;sheng ju;sheng ju shi;xi koa ma;Ікома;Икома;إكوما;ایکوما، نارا;อิโกะมะ;生駒;生駒市;이코마 시; +city::1861795;Ikeda;Ikeda;chi tian;chi tian shi;Икеда;池田;池田市; +city::1861835;Iizuka;Iidzuka;Iisuka;Iizuka;Iizuka-chhi;Iizuka-chhī;Izuka;ayzwka fwkwywka;fan zhong;fan zhong shi;ijeuka si;lyzwka;Іїдзука;Изука;Иидзука;Иизука;ایزوکا، فوکوئوکا;ليزوكا;飯塚;飯塚市;이즈카 시; +city::1861864;Iida;Ida;Iida;Iida-chhi;Iida-chhī;ayda naganw;ayyda;fan tian;fan tian shi;ida si;xi da;Іїда;Ида;Иида;Իիդա;إييدا;ایدا، ناگانو;อีดะ;飯田;飯田市;이다 시; +city::1861949;Ichinomiya;Ichinomija;Ichinomiya;Itinomija;Itinomiya;Itinomiya-chhi;Itinomiya-chhī;Owari-ichinomiya;achynwmya aychy;aychynwmya aychy;aytshynwmya;ichinomiya si;xi chi noa mi ya;yi gong;yi gong shi;İtinomiya;Ітіномія;Итиномия;Ичиномия;Ичиномија;إيتشينوميا;اچینومیا، ایچی;ایچینومیا، آیچی;อิชิโนะมิยะ;იტინომია;一宮;一宮市;이치노미야 시; +city::1862033;Ibaraki;IBR;Ibaragi;Ibaraki;Ibaraki-chhi;Ibaraki-chhī;abaraky;aybaraky awsaka;ci cheng shi;ci mu;ci mu shi;ibalaki si;xiba raki;Ібаракі;Ибараки;إباراكي;ایباراکی، اوساکا;อิบะระกิ;იბარაკი;茨城市;茨木;茨木市;이바라키 시; +city::1862198;Honjo;Hondyo;Honjo;Honjō;Honzyo-chhi;Honzyô-chhī;Khondz'o;Khondzjo;ben zhuang;ben zhuang shi;honjo si;hwnjw;hwnjw saytama;Хондзьо;Хондзё;Ҳонҷо;هونجو;هونجو، سایتاما;本庄;本庄市;혼조 시; +city::1862302;Hofu;Bofu;Bohu;Bōfu;Bōhu;Hofu;Hōfu;fang fu;防府; +city::1862373;Hita;Hida;Hita;Hita-chhi;Hita-chhī;Khita;Khity;hita si;hyta awyta;hyta awyyta;ri tian;ri tian shi;Хита;Хиты;Хіта;Ҳита;هيتا، أويتا;هیتا، اوئیتا;日田;日田市;히타 시; +city::1862415;Hiroshima;Chirosima;HIJ;Hiroshima;Hiroshima-shi;Hiroshimashi;Hirosima;Hirosimo;Hiroxima;Hiroxima - guang dao shi;Hiroxima - 広島市;Hiroŝimo;Hiroşima;Hirošima;Hiroșima;Khiroshima;Khirosima;canghwad hi roa chi ma;guang dao;guang dao shi;hi ro chi ma;hilosima si;hiroshima;hiroshimashi;hirosima;hyrwshyma;hyrwsymh;Χιροσίμα;Хиросима;Хирошима;Хіросіма;הירושימה;هيروشيما;هیروشیما;हिरोशिमा;จังหวัดฮิโระชิมะ;ฮิโรชิมา;ჰიროსიმა;ჰიროშიმა;ひろしま;ひろしまし;ヒロシマ;ヒロシマシ;広島;広島市;廣島市;히로시마 시; +city::1862462;Hiratsuka;Hiracuka;Hiratsuka;Hiratuka;Hiratuka-chhi;Hiratuka-chhī;Khiracuka;hi ra suk a;hilasseuka si;hyratswka;hyratswka kanagawa;ping zhong;ping zhong shi;Хирацука;Хірацука;Ҳиратсука;هيراتسوكا;هیراتسوکا، کاناگاوا;ہیراتسوکا، کاناگاوا;ฮิระสึกะ;ჰირაცუკა;平塚;平塚市;히라쓰카 시; +city::1862540;Hirakata;Hirakata;hilakata si;hyrakata awsaka;mei fang;mei fang shi;هيراكاتا، أوساكا;枚方;枚方市;히라카타 시; +city::1862599;Hino;Hinas;Hino;Hino-chhi;Hino-chhī;Khino;hi noa;hino si;hynw;hynw twkyw;ri ye;ri ye shi;Хино;Хіно;Ҳино;Հինո;هينو;هینو، توکیو;ฮิโนะ;日野;日野市;히노 시; +city::1862612;Himimachi;bi mei ding;比美町; +city::1862627;Himeji;Gorad Khimedzi;Hime;Himeci;Himedi;Himegi;Himeji;Himezi;Himezi-chhi;Himezi-chhī;Himeĝi;Khimedzhi;Khimedzi;Khimehdzi;hi mea ci;himeji si;hymgy;hymyjy;ji lu shi;zhen lu;Горад Хімедзі;Химеджи;Химедзи;Химеџи;Химэдзи;Хімедзі;Ҳимеҷи;הימגי;هيميجي;هیمه‌جی، هیوگو;ہیمیجی، ہیوگو;ฮิเมะจิ;姫路;姫路市;姬路市;히메지 시; +city::1862636;Hikone;Hikone;Khikoneh;yan gen;yan gen shi;Хиконэ;彦根;彦根市; +city::1862912;Hekinan;Hekinan;Hekinan-chhi;Hekinan-chhī;Khekinan;bi nan;bi nan shi;hekinan si;hkynan aychy;hykynan;Хекинан;Хекинан қаласы;Хекінан;Ҳекинан;هيكينان;هکینان، آیچی;ہیکینان;碧南;碧南市;헤키난 시; +city::1863018;Hatsukaichi;Hacukaici;Hacukaiĉi;Hatsukaichi;Hatukaiti;Hatukaiti-chhi;Hatukaiti-chhī;Khacukaichi;Khacukaiti;hasseukaichi si;hasu ki chi;hatswkaaychy hyrwshyma;hatswkayjy;nian ri;nian ri shi shi;Хацукаити;Хацукаичи;Хацукаїті;Ҳатсукаичи;هاتسوکاایچی، هیروشیما;هاتسوکایجي;ฮะสึไกชิ;廿日;廿日市市;하쓰카이치 시; +city::1863023;Hatogaya-honcho;Hatagayacho;Hatagayachō;Hatogaya;Hatogaya-honcho;Hatogaya-honchō;Hatogayamachi;hatogayahonchou;jiu~ke gu ben ding;はとがやほんちょう;ハトガヤホンチョウ;鳩ヶ谷本町; +city::1863082;Hashimoto;Hashimoto;Hasimoto;Hasimoto-chhi;Hasimoto-chhī;Haŝimoto;Khasimoto;hashymwtw;hashymwtw wakayama;hasimoto si;qiao ben;qiao ben shi;Хасимото;Хасімото;Ҳашимото;هاشيموتو;هاشیموتو;هاشیموتو، واکایاما;橋本;橋本市;하시모토 시; +city::1863173;Hanyu;Hanyu;Hanyu-chhi;Hanyû-chhī;Hanyū;Khan'juj;Khanju;hanya;hanyu si;hanyw;hanyw saytama;yu sheng;yu sheng shi;Ханьюй;Ханю;Ҳаню;هانيا;هانیو;هانیو، سایتاما;羽生;羽生市;하뉴 시; +city::1863183;Hanno;Channo;Hanno;Hanno-chhi;Hanno-chhī;Hannō;Khanno;fan neng;fan neng shi;hanno si;hanw;Χάννο;Ханно;Ҳанноу;هانو;هان‌نو;هان‌نو، سایتاما;飯能;飯能市;한노 시; +city::1863209;Handa;Handa;Handa-chhi;Handa-chhī;Khanda;Manda;ban tian;ban tian shi;handa;handa si;handa aychy;Ханда;Ханда қаласы;هاندا;هاندا، آیچی;ہانڈا، ایچی;ہینڈا;半田;半田市;한다 시; +city::1863289;Hamamatsu;Hamamacu;Hamamatsu;Hamamatsu City;Hamamatsu-shi;Hamamatu;Hamamatu-chhi;Hamamatu-chhī;Khamamacu;bang song;bang song shi;bin song shi;ha ma masu;hamamasseu si;hamamatsw;hamamatsw shyzwywka;Хамамацу;Хамамацү;Ҳамаматсу;هاماماتسو;هاماماتسو، شیزوئوکا;ہاماماتسو;ฮะมะมะสึ;浜松;浜松市;滨松市;하마마쓰 시; +city::1863293;Hamakita;Hamakita; +city::1863431;Hadano;Hadano;Hadano-chhi;Hadano-chhī;Hatano;Hatano-machi;Khadano;ha da noa;hadano si;hadanw;hadanw kanagawa;qin ye;qin ye shi;Хадано;Ҳадано;هادانو;هادانو، کاناگاوا;ฮะดะโนะ;秦野;秦野市;하다노 시; +city::1863440;Hachioji;Hachioji;Hachiouji;Hachiōji;Haciodzis;Haciogi;Hatiozi;Hatiozi-chhi;Hatiôzi;Hatiôzi-chhī;Haĉioĝi;Hačiodžis;Khachiodzhi;Khachiodzi;Khatiodzi;ba wang zi;ba wang zi shi;ha chi xo ci;hachioji si;hatshywwjy;Хатиодзи;Хатіодзі;Хачиоджи;Хачиоџи;Ҳачиоҷи;هاتشيؤوجي;هاچی‌اوجی، توکیو;ہاچیوجی، ٹوکیو;ฮะชิโอจิ;八王子;八王子市;하치오지 시; +city::1863451;Omihachiman;Omi-Khachiman;Omihachiman;Omihachiman-shi;Omihatiman-chhi;Omikhatiman;awmyhachyman shyga;awmyhatshyman;jin jiang ba fan;jin jiang ba fan shi;omihachiman si;Ômihatiman-chhī;Ōmihachiman-shi;Омихатиман;Омі-Хачіман;Оумиҳачиман;أوميهاتشيمان;اومیهاچیمان، شیگا;近江八幡;近江八幡市;오미하치만 시; +city::1863482;Gyoda;G'oda;Gjoda;Gyoda;Gyoda-chhi;Gyôda-chhī;Gyōda;ghywda;gyoda si;gywda saytama;xing tian;xing tian shi;Гёда;Ґьода;غيودا;گیودا، سایتاما;行田;行田市;교다 시; +city::1863495;Gushikawa;Geshicha;Geshichā;Gushichaa;Gushikawa;Gusikawa;ju zhi chuan;具志川; +city::1863528;Gotenba;Gotemba;Gotenba;Kyu-gotemba;Kyū-gotemba;yu dian chang;Готемба;御殿場; +city::1863627;Ginowan;Chinon;Chinōn;Ginowan;Jinon;Jinōn;ginowan;ginowan si;yi ye wan;yi ye wan shi;ぎのわん;宜野湾;宜野湾市;宜野灣市;기노완 시; +city::1863641;Gifu-shi;Gifu;Gifu City;Gifu-shi;Gihu;gifushi;gihu si;qi fu;qi fu shi;Гифу;ぎふし;岐阜;岐阜市;기후 시; +city::1863693;Gamagori;Gamagori;Gamagori-chhi;Gamagôri-chhī;Gamagōri;gamagoli si;gamagwry;gamagwry aychy;ghamaghwry;pu jun;pu jun shi;Гамагори;Ґамаґорі;غاماغوري;گاماگوری;گاماگوری، آیچی;蒲郡;蒲郡市;가마고리 시; +city::1863713;Futtsu;Fuccu;Futtso;Futtsu;Huttu-chhi;Huttu-chhī;fu jin;fu jin shi;fut su;futtsu;fwtsw chyba;fwtsw tshyba;hus-sseu si;Футтсу;Фуццу;فوتسو، تشيبا;فوتسو، چیبا;ฟุตสึ;ふっつ;フッツ;富津;富津市;훗쓰 시; +city::1863905;Honcho;Funabashi;Funabasi;Funabaŝi;Funabaşi;Furabeshi;Honcho;Honchō;Hunabasi;Hunabasi-chhi;Hunabasi-chhī;ben ding;chuan qiao;chuan qiao shi;fu naba chi;fwnabashy;fwnabashy chyba;hunabasi si;Фунабаси;Фунабасі;Фунабаши;فوناباشي;فوناباشی، چیبا;ฟุนะบะชิ;本町;船橋;船橋市;후나바시 시; +city::1863917;Fukuyama;Fukujama;Fukuyama;Hukuyama;Hukuyama-chhi;Hukuyama-chhī;fu ku ya ma;fu shan;fu shan shi;fwkwyama;fwkwyama hyrwshyma;hukuyama si;Фукуяма;Фукујама;فوکویاما;فوکویاما، هیروشیما;فوکویاما، ہیروشیما;ฟุกุยะมะ;福山;福山市;후쿠야마 시; +city::1863945;Fukuroi;Fukuroi;Fukuroj;Hukuroi-chhi;Hukuroi-chhī;Pukuroi;dai jing;dai jing shi;fu ku roaxi;fwkwrwyy shyzwywka;fwkwry;hukuloi si;phukro'i;Фукурои;Фукурой;فوكوري;فوکورویی، شیزوئوکا;फुक्रोई;ฟุกุโระอิ;袋井;袋井市;후쿠로이 시; +city::1863967;Fukuoka;FUK;Fucuoca;Fukuoka;Fukuoka-shi;Fukuokashi;Hukuoka;fu gang;fu gang shi;fukuoka;fukuokashi;fwkwka;hukuoka si;Фукуока;فوكوكا;ふくおか;ふくおかし;フクオカ;フクオカシ;福岡;福岡市;후쿠오카 시; +city::1863985;Fukui-shi;FKJ;Fukuj;fu jing;fu jing shi;fukuishi;Фукуй;ふくいし;福井;福井市; +city::1864009;Fukuchiyama;Fukuchijama;Fukuchiyama;Fukucijama;Fukutijama;Fukučijama;Hukutiyama;fu ku chi ya ma;fu zhi shan;fu zhi shan shi;fwkwtshyama;hukuchiyama si;Фукутияма;Фукучияма;Фукучіяма;פוקושיאמה;فوكوتشياما;فوکوچی‌یاما، کیوتو;ฟุกุชิยะมะ;福知山;福知山市;후쿠치야마 시; +city::1864092;Fujisawa;Fudzhisava;Fudzisava;Fudžisava;Fujisava;Fujisawa;Gorad Fudzisava;Huzisawa-chhi;Huzisawa-chhī;Pudyisawa;fu ci sa wa;fwjysawa;fwjysawa kanagawa;hujisawa si;teng ze;teng ze shi;Горад Фудзісава;Фуджисава;Фудзисава;Фудзісава;Фуџисава;Фуҷисава;فوجيساوا;فوجیساوا، کاناگاوا;ฟุจิซะวะ;藤沢;藤沢市;藤澤市;후지사와 시; +city::1864099;Fujioka;Fudzioka;Fujioka;Huzioka-chhi;Huzioka-chhī;fwjywka;hujioka si;teng gang;teng gang shi;Фудзиока;Фудзіока;Фуҷиока;فوجيوكا;فوجی‌اوکا، گونما;藤岡;藤岡市;후지오카 시; +city::1864105;Fujinomiya;Fudzinomija;Fudžinomija;Fujimiya;Fujinomija;Fujinomiya;Huzinomiya-chhi;Huzinomiya-chhī;Omiya;Pudyinomiya;fu ci noa mi ya;fu shi gong;fu shi gong shi;fwjynwmya;hujinomiya si;Ōmiya;Фудзиномия;Фудзіномія;Фуџиномија;Фуҷиномия;فوجينوميا;فوجی‌نومیا، شیزوئوکا;ฟุจิโนะมิยะ;富士宮;富士宮市;후지노미야 시; +city::1864132;Fujieda;Fudziehda;Fujieda;teng zhi;teng zhi shi;Фудзиэда;藤枝;藤枝市; +city::1864134;Fuji;Foutzi;Fudzhi;Fudzi;Fudzis;Fudži;Fudžis;Fuji;Huzi-chhi;Huzi-chhī;fu ci;fu shi;fu shi shi;fwjy;fwjy shyzwywka;fywjy shyzwka;huji si;phuji;Φούτζι;Фуджи;Фудзи;Фудзі;Фуџи;Фуҷи;Фүжи;فوجي;فوجی، شیزوئوکا;فیوجی، شیزوکا;ফুজি;ฟุจิ;富士;富士市;후지 시; +city::1864155;Fuchucho;Fuchu;Fuchucho;Fuchū;Fuchūchō;fu zhong;fu zhong ding;Фучу;府中;府中町; +city::1864416;Daitocho;Daito;Daitocho;Daitō;Daitōchō;da dong;da dong ding;大東;大東町; +city::1864549;Chiryu;Chirju;Chiryu;Chiryu-cho;Chiryū;Chiryū-chō;Csirju;Csirjú;Tirju;Tiryu-chhi;Tiryū-chhī;Tsiryu;chyrw aychy;chyryw aychy;jilyu si;tshyryw;zhi li;zhi li shi;Тирю;Тірю;Чирю;تشيريو;چیرو، آیچی;چیریو، ایچی;知立;知立市;지류 시; +city::1864557;Chino;Chino;Cino;Tino;Tino-chhi;Tino-chhī;chi noa;chynw naganw;jino si;mao ye;mao ye shi;tshynw;Ĉino;Тино;Тіно;Чино;Տինո;تشينو;چینو، ناگانو;ชิโนะ;茅野;茅野市;지노 시; +city::1864572;Chikushino-shi;chikushino;zhu zi ye;zhu zi ye shi;筑紫野;筑紫野市; +city::1864624;Chigasaki;Chigaraki;Chigasaki;Cigasakis;Tigasaki;Tigasaki-chhi;Tigasaki-chhī;chi nga saki;chygasaky kanagawa;jigasaki si;mao qi shi;maoke qi;mao~ke qi;mao~ke qi shi;tshyghasaky;Čigasakis;Тигасаки;Тіґасакі;Чигасаки;تشيغاساكي;چیگاساکی، کاناگاوا;ชิงะซะกิ;茅ケ崎;茅ヶ崎;茅ヶ崎市;茅崎市;지가사키 시; +city::1864637;Chichibu;Chichibu;Cicibu;Titibu;Titibu-chhi;Titibu-chhī;Titubunomiya;Tsitsibu;chi chi bu;chychybw saytama;jichibu si;tshytshybw;zhi fu;zhi fu shi;Čičibu;Титибу;Тітібу;Чичибу;تشيتشيبو;چیچیبو، سایتاما;ชิชิบุ;秩父;秩父市;지치부 시; +city::1864750;Beppu;BPU;Behppu;Beppu;Beppu-chhi;Beppu-chhī;Bepu;bespu si;bie fu;bie fu shi;bpw awyyta;bybw;Беппу;Бепу;Бэппу;بيبو;بپو، اوئیتا;ბეპუ;別府;別府市;벳푸 시; +city::1864985;Ashiya;Ashija;Ashiya;Asija;Asiya;Asiya-chhi;Asiya-chhī;Aŝija;Aşiya;ashya;ashya hywgw;asiya si;lu wu;lu wu shi;Асия;Ашия;Ашія;آشيا;آشیا، هیوگو;芦屋;芦屋市;蘆屋市;아시야 시; +city::1865005;Ashikaga;Ashikaga;Ashikaga - zu li shi;Ashikaga - 足利市;Asikaga;Asikaga-chhi;Asikaga-chhī;Ašikaga;ashykaga twchygy;ashykagha;asikaga si;zu li;zu li shi;Асикага;Асікаґа;Ашикага;آشیکاگا، توچیگی;أشيكاغا;足利;足利市;아시카가 시; +city::1865294;Anjo;Andyo;Andz'o;Andzijas;Andzjo;Andzo;Andzso;Andzsó;Andžijas;Anjo;Anjō;Anziyan;Anzyo-chhi;Anzyô-chhī;an cheng;an cheng shi;anjo si;anjw;anjw aychy;aynjw;xan co;Андзьо;Андзё;Анџо;Анҷо;آنجو، آیچی;آنجو، ایچی;أنجو;اینجو;อันโจ;安城;安城市;안조 시; +city::1865309;Anan;Anan;Anan-chhi;Anan-chhī;a nan;a nan shi;anan;anan si;anan twkwshyma;Анан;آنان، توکوشیما;أنان;阿南;阿南市;아난 시; +city::1865387;Amagasaki;Amagasaki;ni qi;ni qi shi;尼崎;尼崎市; +city::1865412;Kariya;Akaho;Ako;Akō;Kariya;jia wu;Ако;仮屋; +city::1865714;Ageoshimo;Ageo;Ageomura;Ageoshimo;ageoshimo;shang wei;shang wei shi;shang wei xia;あげおしも;アゲオシモ;上尾;上尾下;上尾市; +city::1894616;Okinawa;Lungsod ng Okinawa;OKA;Okinava;Okinawa;Okinawa-chhi;Okinawa-chhī;awkynawa;chong sheng shi;chong ying;chong ying shi;mdynt awkynawa;okinawa si;xoa kin a wa;Окинава;Окінава;اوکیناوا;مدينة أوكيناوا;ඔකිනාවා;โอะกินะวะ;沖縄;沖縄市;沖繩市;오키나와 시; +city::1907123;Hasuda;Hasuda;hasuda;lian tian;lian tian shi;はすだ;ハスダ;蓮田;蓮田市; +city::1907125;Kamifukuoka;Kamifukuoka;kamifukuoka;shang fu gang;かみふくおか;カミフクオカ;上福岡; +city::1907146;Sayama;Irumagawa;Sajama;Sayama;Sayama-chhi;Sayama-chhī;sayama;sayama si;sayama saytama;xia shan;xia shan shi;Саяма;Сајама;ساياما;سایاما، سایتاما;狭山;狭山市;狹山市;사야마 시; +city::1907148;Fussa;Fusa;Fussa;Hussa-chhi;Hussa-chhī;fu sheng;fu sheng shi;fus sa;fwsa;fwsa twkyw;hus-sa si;Фусса;Ֆուսա;فوسا;فوسا، توکیو;ฟุสซะ;福生;福生市;훗사 시; +city::1907299;Asaka;Asaka;Asaka-chhi;Asaka-chhī;asaka si;asaka saytama;asaky;chao xia;chao xia shi;xa sa ka;Асака;آساکا، سایتاما;أساكي;อะซะกะ;朝霞;朝霞市;아사카 시; +city::1907300;Wako;Vako;Wako;he guang;Вако;和光; +city::1907301;Shimotoda;Shimotoda;Toda;shimotoda;xia hu tian;Тода;しもとだ;シモトダ;下戸田; +city::1907307;Kimitsu;Kimicu;Kimitsu;Kimitu-chhi;Kimitu-chhī;gimisseu si;jun jin;jun jin shi;khi misu;kimitsu;kymytsw;kymytsw chyba;Кимитсу;Кимицу;Кіміцу;كيميتسو;کیمیتسو، چیبا;คิมิสึ;きみつ;キミツ;君津;君津市;기미쓰 시; +city::1907309;Miura;Miura;Miura-chhi;Miura-chhī;mi xura;miula si;mywra;mywra kanagawa;san pu;san pu shi;Миура;Міура;ميورا;میورا، کاناگاوا;มิอุระ;三浦;三浦市;미우라 시; +city::1926004;Wakayama;Vakajama;Wakayama;Wakayama-shi;Wakayamashi;he ge shan;he ge shan shi;wakayama;wakayamashi;Вакаяма;わかやま;わかやまし;ワカヤマ;ワカヤマシ;和歌山;和歌山市; +city::1926020;Uwajima;Uvadzhima;Uvadzima;Uwadyima;Uwazima;Uwazima-chhi;Uwazima-chhī;awajyma ahymh;uwajima si;yu he dao;yu he dao shi;ywajyma;Уваджіма;Увадзима;Уваҷима;اواجیما، اهیمه;اواجیما، اہیمے;يواجيما;宇和島;宇和島市;우와지마 시; +city::1926054;Saijo;Saidyo;Saidzo;Saijo;Saijō;Saizyo;Saizyo-chhi;Saizyô;Saizyô-chhī;Sajdzh'o;Sajdzjo;saijo si;sajyw;sayjw ahymh;xi tiao;xi tiao shi;Саиџо;Саиҷо;Сайджьо;Сайдзё;ساجيو;سایجو، اهیمه;سےجو، اہمے;西条;西条市;西條市;사이조 시; +city::1926099;Matsuyama;MYJ;Macujama;Matsujama;Matsuyama;Matsuyama-shi;Matuyama;Matuyama-chhi;Matuyama-chhī;masseuyama si;masu ya ma;matsuyamashi;matswyama;matswyama ahymh;song shan;song shan shi;Матсуяма;Мацуяма;Мацујама;מצויאמה;ماتسوياما;ماتسویاما، اهیمه;ماتسویاما، اہیمے;มะสึยะมะ;まつやまし;松山;松山市;마쓰야마 시; +city::2110480;Yotsukaido;Yotsukaido;Yotsukaidō;si jie dao;si jie dao shi;四街道;四街道市; +city::2110498;Yonezawa;Jonedzava;Jonehdzava;Jonezava;Yonesawa;Yonezawa;Yonezawa-chhi;Yonezawa-chhī;ionedzava;mi ze;mi ze shi;yoanea sa wa;yonejawa si;ywnyzawa;ywnyzawa yamagata;Ёнезава;Ёнэдзава;Йонедзава;Йонезава;يونيزاوا;یونه‌زاوا، یاماگاتا;یونیزاوا، یاماگاتا;โยะเนะซะวะ;იონეძავა;米沢;米沢市;米澤市;요네자와 시; +city::2110556;Yamagata;GAJ;Jamagata;Yamagata;Yamagata-shi;Yamagatashi;shan xing;shan xing shi;yamagata;yamagatashi;Ямагата;やまがた;やまがたし;ヤマガタ;ヤマガタシ;山形;山形市; +city::2110579;Yachimata;Jachimata;Jatimata;Yachimata;Yatimata-chhi;Yatimata-chhī;ba jie;ba jie shi;ya chi ma ta;yachimata si;yachymata chyba;yatshymata;ychmata chba;Ятимата;Ятімата;Ячимата;ياتشيماتا;یاچیماتا، چیبا;یچماتا، چبا;ยะชิมะตะ;八街;八街市;야치마타 시; +city::2110629;Ushiku;Ushiku;Usiku;Usiku-chhi;Usiku-chhī;awshykw;awshykw aybaraky;niu jiu;niu jiu shi;usiku si;Усику;Усіку;Ушику;أوشيكو;اوشیکو، ایباراکی;牛久;牛久市;우시쿠 시; +city::2110683;Tsukuba;Tsukuba;XEI;tsukuba;tsukuba shi;つくば;つくば市; +city::2110729;Toride;Toride;Toride-chhi;Toride-chhī;Torite;dolide si;qu shou;qu shou shi;thoa ridea;twrydh;twrydh aybaraky;Ториде;Торіде;توريده;توریده، ایباراکی;โทะริเดะ;取手;取手市;도리데 시; +city::2110774;Togane;Togane;Togane-chhi;Toganemachi;Tôgane-chhī;Tōgane;Tōganemachi;dogane si;dong jin;dong jin shi;tho nganea;twganh chyba;twghanh;Тогане;Тоґане;تؤگانے، چیبا;توغانه;توگانه، چیبا;โทงะเนะ;東金;東金市;도가네 시; +city::2110793;Tendo;Tendo;Tendō;tian tong;Тендо;天童; +city::2110959;Sukagawa;Sukagawa;xu he chuan;xu he chuan shi;須賀川;須賀川市; +city::2111018;Shiroi;Shiroi;Siroi;Siroi-chhi;Siroi-chhī;Siroj;bai jing;bai jing shi;chi roaxi;shyrwy;shyrwy chyba;shyrwyy chyba;siloi si;Сирои;Сірой;Широи;شيروي;شیروئی، چیبا;شیروی، چیبا;ชิโระอิ;白井;白井市;시로이 시; +city::2111049;Shiogama;Schiogama;Shiogama;Siogama;yan zao;Сиогама;塩竃;塩竈; +city::2111149;Sendai;SDJ;Sendai;Sendai-shi;Sendaishi;Sendaj;sendai;sendaishi;xian tai;xian tai shi;Сендай;せんだい;せんだいし;センダイ;センダイシ;仙台;仙台市; +city::2111220;Sakura;Sakura;Sakura-chhi;Sakura-chhī;sa kura;sakula si;sakwra;sakwra chyba;zuo cang;zuo cang shi;Сакура;ساكورا;ساکورا، چیبا;ซะกุระ;佐倉;佐倉市;사쿠라 시; +city::2111258;Ryugasaki;Rjugasaki;Ryugasaki;Ryugasaki-chhi;Ryûgasaki-chhī;Ryūgasaki;long qi shi;longke qi;longke qi shi;lyugasaki si;rywgasaky aybaraky;rywghasaky;Рюгасаки;Рюґасакі;ريوغاساكي;ریوگاساکی، ایباراکی;龍ケ崎;龍ケ崎市;龍崎市;류가사키 시; +city::2111325;Otawara;Otahara;Otavara;Otawara;Otawara-chhi;awtawara;awtawara twchygy;da tian yuan;da tian yuan shi;otawala si;Ôtawara-chhī;Ōtawara;Отавара;أوتاوارا;اوتاوارا، توچیگی;大田原;大田原市;오타와라 시; +city::2111568;Oami;; +city::2111684;Narita;Narita;Narita-chhi;Narita-chhī;cheng tian;cheng tian shi;na ri ta;nalita si;naryta;naryta chyba;Нарита;Наріта;ناريتا;ناریتا، چیبا;นะริตะ;成田;成田市;나리타 시; +city::2111831;Moriya;Morija;Moriya;Moriya-chhi;Moriya-chhī;moliya si;mwrya;mwrya aybaraky;shou gu;shou gu shi;Мория;Морія;موريا;موریا، ایباراکی;守谷;守谷市;모리야 시; +city::2111834;Morioka;Morioka;Morioka-chhi;Morioka-chhī;Morioka-shi;Moriokashi;moa ri xoa ka;molioka si;morioka;moriokashi;mwrywka;mwrywka aywath;sheng gang;sheng gang shi;Мориока;Моріока;מוריאוקה;موريوكا;موریوکا، ایواته;موریوکا، ایواتے;โมะริโอะกะ;もりおか;もりおかし;モリオカ;モリオカシ;盛岡;盛岡市;모리오카 시; +city::2111836;Mooka;Moka;Moka-chhi;Moka-chhī;Mooka;Mōka;moka si;mwka;mwka twchygy;zhen gang;zhen gang shi;Мока;Моока;موكا;موکا، توچیگی;真岡;真岡市;모카 시; +city::2111855;Mobara;Mobara;Mobara-chhi;Mobara-chhī;Mobaramachi;Mohara;mao yuan;mao yuan shi;moaba ra;mobala si;mobara;mwbara chyba;mwbara tshyba;Мобара;موبارا، تشيبا;موبارا، چیبا;โมะบะระ;もばら;モバラ;茂原;茂原市;모바라 시; +city::2111859;Mizusawa;Midzusava;Mizusawa;Mizuzawa;Мидзусава; +city::2111884;Miyako;Mijakas;Mijako;Miyako;Miyako-chhi;Miyako-chhī;gong gu;gong gu shi;maykw;miyako si;myakw aywath;Мияко;Міяко;مايكو;میاکو، ایواته;宮古;宮古市;미야코 시; +city::2111901;Mito;Mito;Mito-shi;Mitoshi;mito;mitoshi;shui hu;shui hu shi;みと;みとし;ミト;ミトシ;水戸;水戸市; +city::2112077;Kuroiso;; +city::2112141;Koriyama;Ginqsan Si;Korijama;Koriyama;Koriyama-chhi;Kôriyama-chhī;Kōriyama;goliyama si;jun shan;jun shan shi;kho ri ya ma;kwryama;kwryama fwkwshyma;kwryyama fwkwshyma;Корияма;Коријама;Коріяма;كورياما;کوریاما، فوکوشیما;کورییاما، فوکوشیما;کوری‌یاما، فوکوشیما;โคริยะมะ;郡山;郡山市;고리야마 시; +city::2112227;Kitakami;Kitakami;Kitakami-chhi;Kitakami-chhī;Kitakamis;bei shang;bei shang shi;gitakami si;kytakamy;kytakamy aywath;Китаками;Кітакамі;كيتاكامي;کیتاکامی، ایواته;北上;北上市;기타카미 시; +city::2112232;Kitaibaraki;Kita-Ibaraki;Kitaibaragi;Kitaibaraki;Kitaibaraki-chhi;Kitaibaraki-chhī;bei ci cheng;bei ci cheng shi;gitaibalaki si;kyta aybaraky;kytaaybaraky aybaraky;Китаибараки;Кіта-Ібаракі;كيتا إيباراكي;کیتاایباراکی، ایباراکی;北茨城;北茨城市;기타이바라키 시; +city::2112312;Katsuta;; +city::2112319;Katori-shi;Katori;Sawara;Sawara-shi;xiang qu;xiang qu shi;zuo yuan shi;佐原市;香取;香取市; +city::2112539;Iwaki;Banjsingz Si;Iuaki;Ivaki;Iwaki;Iwaki-chhi;Iwaki-chhī;Iŭaki;aywaky fwkwshyma;iwaki;iwaki shi;iwaki si;lwaky;pan cheng;pan cheng shi;xi waki;Івакі;Иваки;ایواکی، فوکوشیما;لواكي;อิวะกิ;いわき;いわき市;磐城;磐城市;이와키 시; +city::2112571;Ishioka;Ishioka;Isioka;Isioka-chhi;Isioka-chhī;ayshywka;isioka si;shi gang;shi gang shi;Ісіока;Исиока;Ишиока;إيشيوكا;ایشی‌اوکا، ایباراکی;石岡;石岡市;이시오카 시; +city::2112576;Ishinomaki;Ishinomachi;Ishinomaki;Isinomaki;Isinomaki-chhi;Isinomaki-chhī;Isyinomaki;Iŝinomaki;ayshynwmaky;ayshynwmaky myagy;isinomaki si;shi juan;shi juan shi;xi chi noa maki;Ісіномакі;Исиномаки;Ишиномаки;إيشينوماكي;ایشینوماکی، میاگی;อิชิโนะมะกิ;石卷市;石巻;石巻市;이시노마키 시; +city::2112656;Ichinoseki;Ichinoseki;Icinosekis;Itinoseki;Itinoseki-chhi;Itinoseki-chhī;Itschinoseki;Ičinosekis;atshynwsyky;aychynwsky aywath;ichinoseki si;yi guan;yi guan shi;Ітіносекі;Итиносеки;Ичиносеки;إتشينوسيكي;ایچینوسکی، ایواته;一关市;一関;一関市;이치노세키 시; +city::2112664;Ichihara;Ichihara;Ichikhara;Icihara;Itihara-chhi;Itihara-chhī;Itikhara;Iĉihara;aychyhara chyba;aytshyhara;ichihala si;shi yuan shi;xi chi ha ra;yuan;Ітіхара;Итихара;Ичихара;Ичиҳара;إيتشيهارا;اچیہارا، چیبا;ایچیهارا، چیبا;อิชิฮะระ;იტიჰარა;原;市原市;이치하라 시; +city::2112708;Hitachi;Hidachi;Hitachi;Hitati-chhi;Hitati-chhī;Khitachi;Khitati;hi ta chi;hitachi si;hytachy aybaraky;hytatshy;ri li;ri li shi;Хитати;Хитачи;Хітаті;Ҳитачи;هيتاتشي;هیتاچی، ایباراکی;ฮิตะชิ;ჰიტატი;日立;日立市;히타치 시; +city::2112823;Hanamaki;HNA;Hanamaki;Hanamaki-chhi;Hanamaki-chhī;Hanamakis;Khanamaki;ha na maki;hanamaki si;hanamaky;hanamaky aywath;hua juan;hua juan shi;Ханамаки;Ханамакі;Ҳанамаки;هاناماكي;هاناماکی;هاناماکی، ایواته;ฮะนะมะกิ;花卷市;花巻;花巻市;하나마키 시; +city::2112899;Furukawa;Furukawa;Hurukawa; +city::2112923;Fukushima;FKS;Fukushima;Fukushima-shi;Fukushimashi;Fukusima;Furukawa;Hukusima;fu dao;fu dao shi;fukushima;fukushimashi;Фукусима;ふくしま;ふくしまし;フクシマ;フクシマシ;福島;福島市; +city::2113015;Chiba;Chiba;Chiba-shi;Chibashi;Ciba;QCB;Tiba;chiba;chibashi;jiba si;qian ye;qian ye shi;tshyba;Ĉiba;Čiba;Чиба;تشيبا;ちば;ちばし;チバ;チバシ;千葉;千葉市;지바 시; +city::2113126;Akita;AXT;Akita;Akita-shi;akita;akita si;akyta;qiu tian;qiu tian shi;Акита;آکیتا;أكيتا;अकिता;秋田;秋田市;아키타 시; +city::2113164;Abiko;Abiko;wo sun zi;wo sun zi shi;Абико;我孫子;我孫子市; +city::2113719;Akita;Akita;akita;akitashi;qiu tian;qiu tian shi;あきた;あきたし;アキタ;アキタシ;秋田;秋田市; +city::2127733;Tomakomai;QTM;Tomakomai;Tomakomai-chhi;Tomakomai-chhī;Tomakomaj;domakomai si;shan xiao mu;shan xiao mu shi;thoa ma koami;twmakwmay;twmakwmay hwkaydw;Томакомаи;Томакомай;Томакомај;توماكوماي;توماکومای، هوکایدو;โทะมะโกะไม;苫小牧;苫小牧市;도마코마이 시; +city::2128295;Sapporo;Gorad Sapara;SPK;Saporas;Saporo;Sapporo;Sapporo-chhi;Sapporo-chhī;Sapporo-shi;Sapporoshi;Sapporum;Szapporo;capporo;sabwrw;sap poa roa;sapporo;sapporoshi;sapwrw;saspolo si;sypwrw;zha huang;zha huang shi;Σαππόρο;Горад Сапара;Сапоро;Саппоро;Սապորո;סאפורו;سابورو;ساپورو;سیپورو;सप्पोरो;சப்போரோ;ซัปโปะโระ;საპორო;さっぽろ;さっぽろし;サッポロ;サッポロシ;札幌;札幌市;삿포로 시; +city::2128574;Otaru;Otaru;Otaru-chhi;Otaru-chhī;QOT;awtarw;awtarw hwkaydw;otalu si;xiao zun;xiao zun shi;xoa ta ru;Отару;Отарү;أوتارو;اوتارو، هوکایدو;โอะตะรุ;小樽;小樽市;오타루 시; +city::2128787;Odate;ONJ;Odate;Odate-chhi;Otate;awdath;awdath akyta;da guan;da guan shi;odate si;oodate;xo da tea;Ódate;Ôdate-chhī;Ōdate;Ōtate;Одате;Одатэ қаласы;أوداته;اوداته، آکیتا;اوداتے، اکیتا;โอดะเตะ;おおだて;オオダテ;大館;大館市;오다테 시; +city::2128815;Obihiro;OBO;Obibiro;Obihiro;Obihiro-chhi;Obihiro-chhī;Obikhiro;awbyhyrw;awbyhyrw hwkaydw;dai guang;dai guang shi;obihilo si;xoa bi hi roa;Обихиро;Обиҳиро;Обіхіро;أوبيهيرو;اوبیهیرو، هوکایدو;โอะบิฮิโระ;帯広;帯広市;帶廣市;오비히로 시; +city::2128867;Noshiro;Noshiro;Noshiro-shi;Noshiromachi;Noshirominato;Nosiro;ONJ;neng dai;neng dai ding;neng dai shi;nosilo si;nwshyrw;nwshyrw akyta;Носиро;نوشيرو;نوشیرو، آکیتا;能代;能代市;能代町;노시로 시; +city::2129101;Muroran;Muroran;Muroran-chhi;Muroran-chhī;QRN;mu roa rang;mulolan si;mwrwan;mwrwran hwkaydw;shi lan;shi lan shi;Муроран;موروان;موروران، هوکایدو;มุโระรัง;室蘭;室蘭市;무로란 시; +city::2129376;Kushiro;KUH;Kushira;Kushiro;Kushiro Hokkaido;Kushiro Hokkaidō;Kushiro-shi;Kusiras;Kusiro;Kusiro-chhi;Kusiro-chhī;Kusyiro;Kuŝiro;Kuşiro;Kuširas;Kuširo;chuan lu;chuan lu shi;gusilo si;khu chi roa;kwshyrw;kwshyrw hwkaydw;qwsyrw;Кусиро;Кусіро;Куширо;קושירו;كوشيرو;کوشیرو، هوکایدو;คุชิโระ;釧路;釧路市;구시로 시; +city::2129537;Kitami;Kitami;Kitami-chhi;Kitami-chhī;Kitamis;Kity;Nokkeushi;Nokkeusi;Notsukeushi;Nupukeushi-mura;bei jian;bei jian shi;gitami si;khi ta mi;kytamy;kytamy hwkaydw;Китами;Киты;Кітамі;كيتامي;کیتامی، هوکایدو;คิตะมิ;北見;北見市;기타미 시; +city::2129870;Iwamizawa;Iuamizaua;Iuamizava;Ivamidzava;Ivamizava;Iwamisawa;Iwamizawa;Iwamizawa-chhi;Iwamizawa-chhī;Iŭamizaŭa;Twamizawa;aywamyzawa;aywamyzawa hwkaydw;iwamijawa si;iwamizawa;yan jian ze;yan jian ze shi;İvamizava;Івамідзава;Ивамидзава;Иуамизава;إيواميزاوا;ایوامیزاوا، هوکایدو;いわみざわ;イワミザワ;岩見沢;岩見沢市;岩見澤市;이와미자와 시;イワミザワ; +city::2129909;Ishikari;Ishikari;Isikari;Isikari-chhi;Isikari-chhī;ashykary;ayshykary hwkaydw;isikali si;shi shou;shi shou shi;İşikari;Ісікарі;Исикари;Ишикари;إشيكاري;ایشیکاری، هوکایدو;石狩;石狩市;이시카리 시; +city::2130054;Kitahiroshima;Hiroshima;Khirosima;Kitahiroshima;Kitahirosima;Kitahirosima-chhi;Kitahirosima-chhī;Kitahiroşima;Kitakhirosima;Nakaosawa;bei guang dao;bei guang dao shi;gitahilosima si;khi ta hi roa chi ma;kytahyrwshyma;kytahyrwshyma hwkaydw;Китахиросима;Китаҳирошима;Кітахіросіма;Хиросима;كيتاهيروشيما;کیتاهیروشیما، هوکایدو;คิตะฮิโระชิมะ;北広島;北広島市;北廣島市;기타히로시마 시; +city::2130057;Hirosaki;Hirosaki;Hirosaki-chhi;Hirosaki-chhī;Hiroszaki;Khirosaki;hi roa saki;hilosaki si;hong qian;hong qian shi;hyrwsaky;hyrwzaky aywmwry;Хиросаки;Хиросаки қаласы;Хіросакі;Ҳиросаки;هيروساكي;هیروزاکی، آئوموری;ہیروساکی، اوموری;ฮิโระซะกิ;ჰიროსაკი;弘前;弘前市;히로사키 시; +city::2130188;Hakodate;HKD;Hakodate;Hakodate-chhi;Hakodate-chhī;Hakodatė;Hokodate;Khakodate;Khakodateh;ha koa da tea;hakodate si;hakwdath;hakwdath hwkaydw;han guan;han guan shi;Хакодате;Хакодатэ;Ҳакодате;הקודאטה;هاكوداته;هاکوداته;هاکوداته، هوکایدو;ہاکوداتے، ہوکائیدو;ฮะโกะดะเตะ;ჰაკოდატე;函館;函館市;하코다테 시; +city::2130203;Hachinohe;Hachinohe;ba hu;八戸; +city::2130404;Ebetsu;Ebecu;Ebetsu;Ebetu-chhi;Ebetu-chhī;Ehbecu;abtsw hwkaydw;abytsw;ebesseu si;jiang bie;jiang bie shi;Ебетсу;Ебецу;Эбецу;إبيتسو;ابتسو، هوکایدو;江別;江別市;에베쓰 시; +city::2130452;Chitose;Chitose;Citose;Titose;Titose-chhi;Titose-chhī;chi toa sea;chytwsh hwkaydw;jitose si;qian sui;qian sui shi;tshytwzy;Çitose;Титосе;Тітосе;Читосе;تشيتوزي;چیتوسه، هوکایدو;ชิโตะเซะ;千歲市;千歳;千歳市;지토세 시; +city::2130629;Asahikawa;AKJ;Asahikava;Asahikawa;Asahikawa-chhi;Asahikawa-chhī;Asakhikava;Gorad Asakhikava;asahikawa si;asahykawa;asahykawa hwkaydw;xa sa hi kawa;xu chuan;xu chuan shi;Асахикава;Асахікава;Асаҳикауа;Горад Асахікава;אסהיקאווה;آساهیکاوا، هوکایدو;أساهيكاوا;اساہیکاوا، ہوکائیدو;อะซะฮิกะวะ;旭川;旭川市;아사히카와 시; +city::2130658;Aomori;AOJ;Aomori;Aomori-shi;Aomorishi;aomoli si;aomori;aomorishi;awmwry;qing sen;qing sen shi;Аомори;آوموري;あおもり;あおもりし;アオモリ;アオモリシ;青森;青森市;아오모리 시; +city::6694821;Nanto-shi;Nanto;nan li;nan li shi;南砺;南砺市; +city::6697563;Neyagawa;Neyagawa-shi;qin wu chuan;qin wu chuan shi;寝屋川;寝屋川市; +city::6822096;Hitachi-Naka;hitachinaka;hitachinaka shi;hitachinaka-shi;ひたちなか;ひたちなか市; +city::6822146;Onojo;Onodyo;Onodzh'o;Onodzjo;Onodzo;Onojo;Onojyo;Onozyo-chhi;awnjw;awnwjw fwkwywka;da ye cheng;da ye cheng shi;onojo si;Ónodžó;Ônozyô-chhī;Оноджьо;Онодзё;Оноҷо;Օնոձյո;أونجو;اونوجو، فوکوئوکا;大野城;大野城市;오노조 시; +city::6822217;Minokamo;Mino-Kamo;Minokamo;Minokamo-chhi;Minokamo-chhī;mei nong jia mao;mei nong jia mao shi;minokamo si;mynwkamw ghyfw;mynwkamw gyfw;Минокамо;Міно-Камо;مينوكامو غيفو;مینوکامو، گیفو;美濃加茂;美濃加茂市;미노카모 시; +city::6825489;Joetsu;Dz'oecu;Dzjoehcu;Dzoecu;Joecu;Joetsu;Joetsu-shi;Zyoetu-chhi;Zyôetu-chhī;co xeasu;jo-esseu si;jwytsw;jwytsw nygata;jwyytsw nygata;shang yue;shang yue shi;Џоецу;Дзьоецу;Дзёэцу;Йоецу;Ҷоетсу;جوئتسو، نیگاتا;جوئیتسو، نیگاتا;جويتسو;โจเอะสึ;上越;上越市;조에쓰 시; +city::6940394;Saitama;Saitama;saitama;Саитама;さいたま; +city::7279570;Higashimurayama;Higashi-Murayama;Higashi-Murayama-shi;Higashimurayama;dong cun shan;dong cun shan shi;東村山;東村山市; +city::7422816;Dazaifu;Dadzajfu;Dasaipu;Dazaifu-chhi;Dazaifu-chhī;Dazaifu-shiyakusho;dajaihu si;dazaifushiyakusho;dazayfw;dazayfw fwkwywka;tai zai fu;tai zai fu shi;Дадзайфу;دازايفو;دازایفو، فوکوئوکا;だざいふしやくしょ;太宰府;太宰府市;다자이후 시; +city::8125829;Kamigyo-ku;; +city::179330;Thika;Dhika;Thika;Tik;Тик; +city::182701;Nyeri;N'eri;NYE;Njeri;Njeris;Nyeri;Nyiri;ni ye li;nieli;nieri;nyry knya;nyyry;Њери;Ньери;نیئری;نیری، کنیا;ნიერი;ニエリ;尼耶利;니에리; +city::184622;Nakuru;Gorad Nakuru;NUU;Nakuru;na ku lu;nakulu;nakuru;nakwrw;nakwrw knya;Горад Накуру;Накуру;ناکورو;ناکورو، کنیا;ნაკურუ;ナクル;纳库鲁;나쿠루; +city::184745;Nairobi;Gorad Najrobi;NBO;Nairoba;Nairobi;Nairobia;Nairobis;Nairobo;Nairoby;Nairobî;Nairompi;Nairòbi;Nairóbi;Najrobi;Najrobo;Nayrobi;Nayroobi;Naíróbí;Naýrobi;na'irobi;nai luo bi;nailobi;nairobi;nairopi;nayreabi;nayrwby;nei luo bi;nirobi;nyrwby;nyyrwby;Ναϊρόμπι;Горад Найробі;Найроби;Найробі;Најроби;Նայրոբի;נייראבי;ניירובי;نايروبى;نایروبی;نایرۆبی;نيروبي;نیروبی;नैरोबी;নাইরোবি;ਨੈਰੋਬੀ;நைரோபி;ನೈರೋಬಿ;നയ്റോബി;ไนโรบี;ནའི་རོ་བི།;နိုင်ရိုဘီမြို့;ნაირობი;ናይሮቢ;ナイロビ;内罗毕;奈洛比;나이로비; +city::186301;Mombasa;Gorad Mambasa;MBA;Mombaaso;Mombaca;Mombasa;Mombassa;Mombaça;Mombása;Mompasa;Mvita;meng ba sa;mmbasa;momabaka;mombasa;monbasa;mwmbasa;mwmbsh;Μομπάσα;Горад Мамбаса;Момбаса;מומבסה;ممباسا;مومباسا;मोम्बासा;মোমবাকা;მომბასა;モンバサ;蒙巴萨;몸바사; +city::187110;Mbale;Maragoli; +city::187968;Malindi;MYD;Malindi;Malindis;Melinde;ma lin di;malindi;mallindi;malyndy;malyndy knya;marindi;Малинди;Малінді;ماليندي;مالیندی;مالیندی، کنیا;მალინდი;マリンディ;馬林迪;말린디; +city::191220;Kitale;KTL;Kitale;Kitalė;ji ta lai;kitare;kytalh knya;Китале;کیتاله، کنیا;کیتالے;კიტალე;キタレ;基塔萊; +city::191245;Kisumu;Gorad Kisumu;KIS;Kisumo;Kisumu;Lady Whitehouse;Port Florence;Winam;ji su mu;kisumu;kyswmw knya;kyzymw;Горад Кісуму;Кисуму;Кісуму;كيزيمو;کیسومو، کنیا;კისუმუ;キスム;基蘇木;키수무; +city::194160;Kapenguria;Kap-Nguria;Kapenguria; +city::195272;Kakamega;GGM;Kakamega;Kakamege;ka ka mei jia;kakamga knya;Какамега;Какамеге;کاکامگا، کنیا;კაკამეგა;卡卡梅加; +city::197745;Garissa;GAS;Gaarisa;Garisa;Garissa;galisa;garisa;garissa;garysa;garysa knya;gharysa;jia li sa;Гариса;Гарисса;Гарісса;גאריסה;غاريسا;گاریسا;گاریسا، کنیا;გარისა;ガリッサ;加里萨;가리사; +city::198629;Eldoret;EDL;Ehldoret;Eldoret;Eldoretas;Olderet;Olteret;ai er duo lei te;aldwrt;aldwrt knya;eldoleteu;erudoretto;xel do ret;Елдорет;Элдорет;الدورت;الدورت، کنیا;เอลโดเรต;ელდორეტი;エルドレット;埃爾多雷特;엘도레트; +city::199989;Busia;Busia; +city::200067;Bungoma;Bungoma;Бунгома; +city::1527199;Tokmok;To'qmoq;Tokmak;Tokmakas;Tokmok;Toʻqmoq;tkhmaq;tokamoka;tokeumakeu;tokmaki;tokumaku;tuo ke ma ke;twkmwk;Токмак;Токмок;تخماق;توكموك;تۆقمۆق;तोकमोक;თოქმაქი;トクマク;托克马克;토크마크; +city::1527534;Osh;Gorad Osh;O'sh;OSS;Och;Oix;Os;Osa;Osas;Osch;Osh;Osj;Osz;Ox;Oŝ;Oş;Oš;Oša;Ošas;Oʻsh;ao shen;awsh;osa;oshi;osi;xxch;Горад Ош;Ош;אוש;أوش;اوش;ओश;ออช;ოში;オシ;奧什;오시; +city::1527592;Naryn;Naron;Naryn;Нарын; +city::1528121;Karakol;Gorad Karakol;Karakol;Karakola;Karakolas;Karakoł;Karakul;Karàkol;Khargol;Prjeval'sk;Prjeval’sk;Przheval'sk;Przheval’sk;Qoraqo'l;Qoraqoʻl;ka la ke er;kalakol;karakola;karakoru;kha ra khxl;qrakwl qrqyzstan;Горад Каракол;Каракол;Пржевальск;Харгол;Қарақол;קארקול;قاراقۆل;قراکول، قرقیزستان;काराकोल;คาราคอล;カラコル;卡拉科尔;카라콜; +city::1528182;Kara-Balta;Imeni Mikoyana;Kara-Balta;Kara-Balty;Karabalto;Karabaltö;Кара-Балта; +city::1528249;Jalal-Abad;Celal-Abad;Djalalabad;Dschalalabat;Dzalal Abad;Dzalal Abadas;Dzalal-Abad;Dzalalabad;Dzalalabada;Dzalalabat;Dzhalal Abad;Dzhalal-Abad;Dzjalal-Abad;Dzsalalabad;Dżalalabad;Džalal Abad;Džalal Abadas;Džalal-Abad;Džalalabada;Džalalabat;Gorad Dzhalal-Abad;Jalal-Abad;Jalalabat;Jalolobod;Zalal-Abad;Zalalabad;Zalalabat;Zhalal-Abad;Zhalal-Abad shaary;Zhalalabat;gu la la ba de;jalalabada;jallal-abateu;jararabado;jlal-abad;Ĵalalabat;Žalal-Abad;Žalalabad;Žalalabat;Горад Джалал-Абад;Джалал Абад;Джалал-Абад;Жалал-Абад;Жалал-Абад шаары;Жалалабат;جلال-آباد;جلال‌آباد، قرقیزستان;جەلالابات، قرغیزستان;जलालाबाद;ジャララバード;賈拉拉巴德;잘랄아바트; +city::1528675;Bishkek;Bichkek;Biscecum;Bischkek;Bishkek;Bishkek osh;Bisjkek;Biskek;Biskeka;Biskekas;Biskeko;Biskekʻ;Bisqeq;Bisqueque;Biszkek;Bixkek;Biŝkeko;Bişkek;Bişqeq;Biškek;Biškeka;Biškekas;Bișkek;Bîşkek;FRU;Frunze;Gorad Bishkek;Mpiskek;Pishkek;Pishpek;bi shen kai ke;bichkhek;bisakeka;bishukeku;biskek;biskeka;biskekk;bisyukekeu;bshkyk;byshkk;byshkyk;bysqq;picukkek;Μπισκέκ;Бишкек;Бишкек ош;Бішкек;Горад Бішкек;Բիշկեք;בישקעק;בישקק;بشکیک;بيشكك;بيشكيك;بيشکک;بیشکک;بیشکێک;बिश्केक;বিশকেক;ਬਿਸ਼ਕੇਕ;பிசுக்கெக்;ಬಿಷ್ಕೆಕ್;ബിഷ്കെക്ക്;บิชเคก;པི་སི་ཁེག;ბიშკეკი;ቢሽኬክ;ビシュケク;比什凯克;비슈케크; +city::1821306;Phnom Penh;Gorad Pnampen';Krong Chaktomuk;Nam Van;Nam-Vang;Nom Pen;PNH;Phnom Pen;Phnom Penh;Phnom Pénh;Phnom-Penh;Phnompen;Phnompenh;Phnum Penh;Phnum Peny;Phnum Pénh;Phnum Pény;Phnôm Pênh;Phon Phen;Pnom Pehn';Pnom Pen;Pnom Pen'ch;Pnom Pene;Pnom Penh;Pnom-Peno;Pnompen;Pnompen';Pnompena;Pnompenis;Pnompeņa;Ville de Phnom Penh;bnwm bnh;fnwm pn;fnwm pېn;jin bian;namapenha;panoma pena;peunompen;phnm pen;phnmpey;pnwm pn;punom pen;punonpen;Πνομ Πενχ;Горад Пнампень;Пном Пен;Пном Пэнь;Пномпень;Պնոմպեն;פנום פן;بنوم بنه;فنوم پن;فنوم پېن;پنوم پن;پنوم‌پن;پنۆم پێن;नामपेन्ह;पनॉम पेन;প্‌নম পেন;புனோம் பென்;พนมเปญ;พนมเปณ;ཕོམ་ཕེན།;ဖနွမ်းပင်မြို့;პნომპენი;ፕኖም ፔን;ភនកពងតរាច;ភនពេញ;ភ្នំកំពង់ត្រាច;ភ្នំពេញ;プノンペン;金边;프놈펜; +city::1821935;Ta Khmau;Ta Khmau;Takhman;Takhmau;Takkhmau;Такхмау;កណតាល;កណ្តាល; +city::1821940;Takeo;Prasat;Pràsàt;Takeo;Takev;Takéo;Takêv; +city::1822214;Siem Reap;Ciudad de Siem Riep;Khett Siem Reab;REP;Siem Reab;Siem Reap;Siem-Reap;Siemrap;Siemreab;Siemreabas;Siemreap;Siemrãp;Sijem Reap;Siĕm Réab;Siĕmréab;Sziemreap;Xiem Riep;Xiêm Riệp;ciyem rip;seiy mrath;shemuriappu;siemleapeu;sima ripa;syam ryb;sym ryp;syym ryp;syym ryyp;xian li sheng;xian li shi;Сием-Реап;Сиемреап;Сијем Реап;Сіемреап;سيام ريب;سیئم ریئپ;سیئم ریپ;سیم ریپ;सीम रीप;சியெம் ரீப்;เสียมราฐ;ក្រុងសៀមរាប;シェムリアップ;暹粒市;暹粒省;시엠레아프; +city::1822768;Pursat;Porsat;Pousat;Pouthisat;Poŭsăt;Poŭthĭsăt;Pursat; +city::1830194;Paoy Paet;Paoy Paet;Paoy Pet;Paôy Pêt;Phum Paoy Pet;Phum Paôy Pêt;Phumi Paoy Pet;Phumĭ Paôy Pêt;Poipet;Pojpet;Пойпет;ប៉ោយប៉ែត; +city::1831142;Sihanoukville;Ciudad de Sihanoukville;KOS;Kampong Saom;Kampong Semville;Kampong Som;Kampong Somville;Kom Pong Song;Kompong Som;Kompong Somville;Krong Preah Seihanu;Krong Preah Sihanouk;Krŏng Preăh Seihanŭ;Krŏng Preăh Sihanouk;Kâmpóng Saôm;Port de Sihanoukville;Preah Seihanouk;Sianukvil';Sihanouk;Sihanoukville;Sikanonville;shianukubiru;sih nu will;xi ha nu ke shi;Сиануквиль;สีหนุวิลล์;ក្រុងព្រះសីហនុ;シアヌークビル;西哈努克市; +city::1831167;Kampong Chhnang;KZC;Kampong Chhnang;Kampong Chnang;Kampongchnang;Kompon Chnang;Kompong Chhang;Kompong Chhnang;Kâmpóng Chhnăng;Phumi Kampong Chhnang;Phumĭ Kâmpông Chhnăng;Кампонгчнанг;ករងកពងឆនាង;ក្រុងកំពង់ឆ្នាំង; +city::1831173;Kampong Cham;Compon-lina;Kampong Cham;Kampongtjam;Kompon Cam;Kompong Cham;Kâmpóng Cham;Кампонгтям;ករងកពងចាម;ក្រុងកំពង់ចាម; +city::1831797;Battambang;BBM;Bat Dambang;Batambang;Batambangas;Batdamban;Batdambang;Batdâmbâng;Battamban;Battambang;Battampan'nk;Băt Dâmbâng;Bătdâmbâng;Ciudad de Battambang;Khett Batdambang;Phratabong;batambang;batanban;byatamabam;ma de wang;pattampan;phra tabxng;Μπατταμπάνγκ;Батамбанг;Батдамбан;Баттамбанг;باتم‌بنگ;باٹامبانگ;ব্যাটামবং;பட்டாம்பாங்;พระตะบอง;ករងបាតដបង;ក្រុងបាត់ដំបង;バタンバン;马德望;바탐방; +city::1866923;Wonsan;Gensan;Genzan;Genzan Hu;Onsan;Vonsan;Vonsanas;WOS;Wensen;Wonsan;Wŏnsan;Yuenchan;Yuensan;wonsan;wonsansi;yuan shan shi;Вонсан;元山市;원산;원산시; +city::1869446;Songnim;Kenjiho;Kenjiko;Kenniho;Kenziho;Kyomip'o;Kyŏmip’o;Shorin;Shōrin;Songnim; +city::1870883;Sariwon;Hozan;Sa-ri-uen;Sarivone;Sariwon;Sariwŏn;Shariin;Syariin;Sā-ri-uen;Саривоне; +city::1871859;Pyongyang;Binh Nhuong;Bình Nhưỡng;FNJ;Gorad Pkhen'jan;Heijo;Heijo-fu;Heijō;Heijō-fu;Heizyo;Heizyo Hu;Heizyō;Heizyō Hu;Hpyeng-yang;P'yongyang;P'yongyang-si;P'yŏngyang;P'yŏngyang-si;P-hjong-jang;P-hjöng-jang;Pchenjanas;Pchjongjang;Phenian;Phenjan;Phenjana;Phyeng-yang;Phyong-yang;Pienyang;Pingyang;Pion'gian'nk;Pion'nkgian'nk;Piongiang;Pionguiangue;Pionyang;Pjoengjang;Pjongian;Pjongjang;Pjongjango;Pjöngjang;Pkhen'jan;Pkhenjan;Pxenyan;Pyeongyang;Pyoengyang;Pyongyang;Pyongyang-si;Pyöngyang;bywnghyangh;peiyngyang;pi'ongayanga;ping rang;ping rang shi;piyam iyam;piyonyan;pkheniani;pyamgayanga;pyang yang;pyeong-yang;pyeong-yangjighalsi;pyeong-yangsi;pyon'gyang;pyongayanga;pywng yang;pywngyang;Πιονγιάνγκ;Πιονγκγιάνγκ;Горад Пхеньян;Пхеньян;Пхенян;Пјонгјанг;Փխենյան;פיאנגיאנג;פיונגיאנג;بيونغيانغ;پيونګيانګ;پيونگ يانگ;پيوڭياڭ;پیانگ یانگ;پیونگ‌یانگ;پیۆنگیانگ;प्याँगयांग;प्योंगयांग;পিয়ং ইয়াং;ਪਿਓਂਗਯਾਂਗ;பியொங்யாங்;ಪ್ಯೊನ್ಗ್ಯಾಂಗ್;เปียงยาง;ཕོང་ཡང་།;ფხენიანი;ፕዮንግያንግ;平壌;平壤;平壤市;평양;평양시;평양직할시; +city::1871871;P'yongsong;P'yongsong;P’yŏngsŏng;Sain-ni;Sainjang;Sanchon;Shajimjo;Shajimjō;Shajinjo;Shajinjō;Shaninjo;Shaninjō; +city::1873172;Ongjin;Bazan;Onchzhin;Ongjin;Ongjin-up;Ongjin-ŭp;Oshin;Osin;Yoshin;Yōshin;ongjin;Ōshin;Ōsin;Ончжин;옹진; +city::1873757;Namp'o;Channampo;Chinnamp'o;Chinnamp’o;Chinnanpo;Namp'o;Nampkho;Namp’o;Tinnanpo;Treaty Port;Tschin-nam-p-ho;nampo;Нампхо;남포; +city::1876373;Kaesong;Kaesong;Kaesŏng;Kai-seng;Kaijo;Kaijō;Kaisong;Kaizyo;Kaizyō;Kehson;Kesongas;Shoto;Shōto;Songdo;gaeseongsi;gaeseongteuggeubsi;kai cheng shi;kai cheng te ji shi;Кэсон;开城特级市;開城市;개성시;개성특급시; +city::1877030;Hungnam;Hungbong-ni;Hungdogi-dong;Hungdogil-tong;Hungdok-2-dong;Hungdok-tong;Hungdoki-dong;Hungdong-ni;Hungnam;Hungnam-dong;Hungnam-ni;Hungyam;Hŭngbong-ni;Hŭngdong-ni;Hŭngdŏgi-dong;Hŭngdŏgil-tong;Hŭngdŏk-2-dong;Hŭngdŏk-tong;Hŭngdŏki-dong;Hŭngnam;Hŭngnam-dong;Hŭngnam-ni;Konan;Kōnan;heunglam;흥람; +city::1877449;Hamhung;Hamheung;Hamhung;Hamhungas;Hamhungo;Hamhŭng;Hienhing;Kanko;Kankō;hamheung;hamheungsi;xian xing shi;咸興市;함흥;함흥시; +city::1877615;Haeju;Haeju;Hai-dschu;Hai-ju;Hai-tjyou;Haijuube;Haitcheou;Kaishu;Kaishū;Khehdzhu;haeju;Хэджу;해주; +city::1879487;Chaeryong-up;Chaenyong;Chaenyŏng;Chaeryong;Chaeryong-up;Chaeryŏng;Chaeryŏng-ŭp;Cheyong;Sainei;Sainei-men;Sainei-yu;Sainei-yū;jaelyeong-eub;재령읍; +city::1879613;Anju;Aanshu;An-dschu;Anju;Anju-up;Anju-ŭp;Anshu;Anshū;Ansyu;Ansyu Yu;Ansyū;Ansyū Yū;anju;안주; +city::2038854;Yuktae-dong;Rokudaito-ri;Rokudaitō-ri;Yuktae-dong;Yuktae-nodongjagu;Yuktaedong-ni;Yuktaetong-ni; +city::2039623;Uiju;Eui-chu;Gishu;Gishū;Gisyu;Gisyū;Ui-tsiu;Uiju;Uiju-up;Wi-dschu;Wi-ju;uiju;Ŭiju;Ŭiju-ŭp;의주; +city::2040893;Sinuiju;New Eui-chu;Shingishu;Shingishū;Sin-eui-chu;Sin-gi-shu;Sineidzu;Sineidžu;Sinidzsu;Sinuiju;Sinyichju;Sinŭiju;Wi-dschu;Wi-ju;sin-uiju;sin-uijusi;xin yi zhou;xin yi zhou shi;新义州;新義州市;신의주;신의주시; +city::2042645;Rajin;Najin;Najin-up;Najin-ŭp;Radzin;Rajin;Rashin;Rasin;lajin;Радзин;라진; +city::2043484;Kilju;Kichishu;Kichishū;Kil'dzhu;Kil-dschu;Kilchu;Kilchu-up;Kilchu-ŭp;Kilju;Kisshu;Kisshū;gilju;Кильджу;길주; +city::2043572;Kanggye;Kakai;Kang-ge;Kange;Kanggye;Kanggye-si;Kokai;Kōkai;gang-gye;gang-gyesi;jiang jie;jiang jie shi;Канге;江界;江界市;강계;강계시; +city::2043835;Hyesan-dong;Hyesan-dong;hyesandong;혜산동; +city::2043837;Hyesan;Hesanjin;Hyesan;Hyesan-si;Hyesanjin;Keisanchin;Keizan;Keizanchin;Keizantin;hui shan shi;hyesan;hyesansi;恵山市;惠山市;혜산;혜산시; +city::2044050;Hongwon;Hongwon;Hongwon-up;Hongwŏn;Hongwŏn-ŭp;Kogen;Kogon;Kōgen;hong-won;홍원; +city::2044757;Chongjin;Cchongdzin;Ch'ongjin;Cheongjin;Chkhonchzhine;Chkhondzhin;Chkhundzhin;Chongjin;Chonjin;Chonzhin';Chŏngjin;Ch’ŏngjin;Condzinas;Congjin;Cshongdzsin;RGO;Seishin;Seisin;Tschiun-tschan;Tschiün-tschan;ch xng cin;cheongjinsi;chwngjn;congjina;qing jin shi;Ĉongĵin;Čchongdžin;Čondžinas;Чонжинь;Чхонджин;Чхонджін;Чхончжине;Чхънджин;چونگجن;चोंग्जिन;ช็องจิน;清津市;청진시; +city::1832384;Eisen;Eisen;Eishu;Eishū;Yongju;Yŏngju; +city::1832617;Eisen;Eisen;Yongch'on;Yŏngch’ŏn; +city::1832828;Yangsan;Jangsan;Jansan;Ryosan;Ryozan;Ryōsan;Ryōzan;Yangsan;liang shan shi;yangsan;yangsansi;Янсан;سانگ‌سان;یانگسان;梁山市;양산;양산시; +city::1832830;Yangp'yong;Tohei;Yangp'yongumnae;Yangp'yŏngŭmnae;Yangpyeong;Yanp'yong;Yanp'yŏng;yangpyeong;yangpyeong-gun;양평;양평군; +city::1832847;Yangju;Jandzhu;Yangju-gun;yang zhou shi;yangju;yangjusi;yangjw;Янджу;یانگجو;楊州市;양주;양주시; +city::1833105;Wonju;Genshu;Genshū;Vondzhu;WJU;Wonju;Wŏnju;Вонджу; +city::1833466;Wanju;wanju;wanju-gun;wanjugun;완주;완주군; +city::1833747;Ulsan;USN;Ul'san;Ulsan;Ulsan-si;Urusan;ulsan;ulsangwang-yeogsi;ulsansi;wei shan;wei shan guang yu shi;Ульсан;蔚山;蔚山広域市;울산;울산광역시;울산시; +city::1833788;Uijeongbu-si;Uijeongbu;Uijeongbu-si;uijeongbu;uijeongbusi;의정부;의정부시; +city::1835235;Daejeon;Daejeon;Daejeon-si;Daejon;Daiden;QTW;Taejon;Taejŏn;Taiden;Tehdzhon;Tetyan;Thai-tyen;Thāi-tyen;Tētyan;da tian guang yu shi;daejeon;daejeongwang-yeogsi;daejeonsi;Тэджон;大田广域市;大田広域市;대전;대전광역시;대전시; +city::1835329;Daegu;Daegu;Daegu Kong-hek-chhi;Daegu Kóng-he̍k-chhī;Daegu-si;Daikyu;Daikyū;GJai Khau;Ntenkou;TAE;Taegu;Taikando;Taikandō;Taiku;Taikyu;Taikyū;Tegu;Teguo;Tehgu;Tägu;da qiu guang yu shi;daegu;daegugwang-yeogsi;daegusi;daigu;dayjw;degu;dyghw;tgw;Đại Khâu;Ντέγκου;Тегу;Тэгу;Тэгү;טגו;دائجو;ديغو;ڈیگو;दैगू;ദേഗു;แทกู;大邱广域市;大邱広域市;大邱廣域市;대구;대구광역시;대구시; +city::1835447;Taisen-ri;Daisen;Hannae-ri;Poryong;Poryŏng;Taech'on;Taech'on-ni;Taech’ŏn;Taech’ŏn-ni;Taisen;Taisen-ri;bolyeong;보령; +city::1835553;Suwon;SWU;Sououon;Suvon;Suwon;Suwon-si;shui yuan shi;suvona;suwon;suwonsi;suwxn;swwn;Σούουον;Сувон;سوون;सुवोन;ซูว็อน;水原市;수원;수원시; +city::1835648;Suncheon;Junten;SYS;Sunch'on;Suncheon;Sunchun;Sunch’ŏn;suncheon;순천; +city::1835848;Seoul;Gorad Seul;Hanyang;SEL;Seoel;Seol;Seoul;Seoul-si;Seuel;Seul;Seula;Seulas;Seulo;Seulum;Seúl;Seül;Siul;Soeul;Sol;Soul;Sye-ul;Syou-ouen;Szoeul;Szöul;Séoul;Sêûl;Söul;Sŏul;Wang-ching;Wo-jo;Wō-jō;ciyol;han-yang;saul;seoul;seoulsi;seoulteugbyeolsi;seuli;shou er;shou er te bie shi;si'ula;siyola;sol;sola;souru;souru te bie shi;sywl;Σεούλ;Горад Сеул;Сеул;Соул;Сөүл;Սեուլ;סאול;סיאול;סעאל;سئول;سيول;سیول;سێئول;سېئول;सियोल;सोल;সিউল;சியோல்;ಸೌಲ್;സോൾ;โซล;སེ་ཨུལ།;ဆိုးလ်မြို့;სეული;ሶል;សេអ៊ូល;ソウル;ソウル特別市;首尔;首尔特别市;서울;서울시;서울특별시;한양; +city::1835895;Seosan;HMY;Seosan;Seosan City;Sosan;Suisan;Sŏsan;rui shan shi;seosan;seosansi;Сосан;瑞山市;서산;서산시; +city::1836553;Sokcho;Sogcho;Sokch'o;Sokch'o-ri;Sokchkho;Sokcho;Sokch’o;Sokch’o-ri;sogcho;Сокчхо;속초; +city::1837706;Sangju;Ch'angju;Ch’angju;Sandzhu;Sang-dschu;Sangju;Shoshu;Shōshū;Syosyu;Syōsyū;sangju;Санджу;상주; +city::1838524;Busan;Bousan;Busan;Busan-si;Busán;Fousan;Fusan;Fuzan;PUS;Phu San;Phủ San;Pusan;Pusana;Pusano;Tsau-liang-hai;busan;busangwang-yeogsi;busansi;fu shan;fu shan guang yu shi;fu shan shi;pu san;Μπούσαν;Пусан;ปูซาน;釜山;釜山市;釜山广域市;釜山広域市;부산;부산광역시;부산시; +city::1838716;Bucheon-si;Bucheon;Bucheon-si;bucheon;bucheonsi;부천;부천시; +city::1839071;Pohang;Geijitsu;Hoko;Hoko-do;Hokō-dō;KPO;P'ohang;P'ohang-dong;Pohang;P’ohang;P’ohang-dong;pohang;포항; +city::1839652;Osan;OSN;Osan;Osan-ni;Usan';Usan-ri;Vu-san-su;Vû-sân-sṳ;awsan;osan;osansi;wu shan shi;xo san;Осан;Усань;اوسان;โอซัน;烏山市;오산;오산시; +city::1839726;Asan;Asan;Asan';Aszan;Nga-san-su;Ngà-sân-sṳ;Onyang;Onyo;Onyō;acan;asan;asansi;xa san;ya shan shi;Асан;Асань;آسان;அசன்;อาซัน;牙山市;아산;아산시; +city::1839873;Okcheon;Kumgu-ri;Okcheon;ogcheon;ogcheongun;옥천;옥천군; +city::1840179;Kosong;Kosong;goseong;goseong-gun;고성;고성군; +city::1840379;Nangen;Mangen;Namvon;Namweon;Namwon;Namwun;Namwŏn;Namwŭn;Nangen;Намвон; +city::1840886;Mungyeong;Bunke-gun;Bunkei-gun;Bunkē-gun;Mun'gyong;Mun'gyong-gun;Mun'gyōng-gun;Mun'gyŏng;Mungjon;Mungjong;Mungyeong gun;Munkyong-Mining Region;mungyeong;mungyeongsi;mwngywang;wen qing shi;Мунгён;مونگیوانگ;聞慶市;문경;문경시; +city::1840982;Muan;MWX;Muan;Muan-gun;Muap; +city::1841066;Moppo;Mogpkho;Mogpo;Mok-pho;Mokp'o;Mokp’o;Mokuho;Moppo;Могпхо; +city::1841149;Miryang;Milyang;Mirjan;Mirjang;Miryang;Mitsuyo;Mitsuyō;mi yang shi;mil-yangsi;mryang;myryang;Мирян;مریانگ;میریانگ;密陽市;밀양시; +city::1841246;Masan;Masan;Masan-ni;masan;마산; +city::1841598;Gyeongsan-si;Gyeongsan;Gyeongsan-si;gyeongsan;gyeongsansi;경산;경산시; +city::1841603;Kyonju;Gyeongju;Keishu;Keishū;Keisyu;Keisyū;Kjondzhu;Kjong-dschu;Kjöng-dschu;Kyeng-chu;Kyeng-ju;Kyong-choo;Kyongju;Kyonju;Kyŏngju;gyeongjusi;qing zhou;qing zhou shi;Кёнджу;慶州;慶州市;경주시; +city::1841775;Kwangyang;Gwang-yang;Koyo;Kuwagyan;Kwangyang;Kōyō; +city::1841810;Gwangju;Gwangju;Kong-chu-su;Kvandzhu;Kwangdzu;Kwangdžu;Kwangju;Kóng-chû-sṳ;guang zhou;guang zhou shi;gwang jw gyywngy;gwangju;gwangjusi;gwangjw gywnggy;kh wang cu;Кванджу;گوانگ جو، گیئونگی;گوانگجو، گیونگگی;ควังจู;კვანჯუ;広州市;廣州;廣州市;광주;광주시; +city::1841811;Gwangju;Gorad Kvandzhu;Gouanjou;Gwangju;Gwangju Kong-hek-chhi;Gwangju Kóng-he̍k-chhī;Gwangju-si;KWJ;Koshu;Kosyu;Kuandzhu;Kuangju;Kuangjuo;Kvandzhu;Kvandzu;Kvandžu;Kvangdzsu;Kvangdzu;Kvanju;Kvanzhe;Kvaңdzhu;Kwang-choo;Kwang-dschu;Kwangdzu;Kwangdžu;Kwangju;Kōshū;Kōsyū;Kŭangĵuo;Quansua;ghwanghjw;guang zhou;guang zhou guang yu shi;guang zhou shi;gvangaju;gwang jw;gwangju;gwangjugwang-yeogsi;gwangjusi;gwangjw;kh wang cu;Горад Кванджу;Квангџу;Кванджу;Кванже;Кваңджу;Куанджу;Куанжү;קוואנגגו;غوانغجو;گوانگ جو;گوانگجو;ग्वांगजू;ควังจู;光州;光州市;光州广域市;光州広域市;光州廣域市;광주;광주광역시;광주시; +city::1841988;Guri-si;Guri;Guri-si;guli;gulisi;구리;구리시; +city::1842025;Gunsan;Gunsan;Gunzan;KUV;Kunsan;Kunzan;gunsansi;qun shan shi;Кунсан;群山市;군산시; +city::1842225;Gumi;Gumi;Kibi;Kumi;Kwimi;QKM;gui wei shi;gumi;gumisi;Куми;亀尾市;龟尾市;구미;구미시; +city::1842485;Goyang-si;Goyang;Goyang-si;QYK;goyang;goyangsi;고양;고양시; +city::1842616;Gongju;Gongju;Kochu;Kondzhu;Kong Tjou;Kong-dschu;Kongju;Koshu;Kosyu;Kōshū;Kōsyū;gong zhou;gong zhou shi;gongju;gongjusi;Конджу;公州;公州市;공주;공주시; +city::1842754;Kyosai;Koje;Kyosai;Kŏje; +city::1842859;Koch'ang;Kosho;Kōshō;gochang;gochang-gun;고창;고창군; +city::1842943;Kimhae;Gimhae;Kimhae;Kinkai;Kumhae;Kŭmhae; +city::1842944;Gimcheon;Gimcheon;Kimcchon;Kimch'on-si;Kimch'ŏn-si;Kimchkhon;Kimčchon;Kumch'on-si;Kŭmch'ŏn-si;gim cheonsi;gimcheon;gimcheonsi;gmchywn;gymchywn;jin quan shi;Кимчхон;گمچیون;گیمچئون;金泉市;김 천시;김천;김천시; +city::1843082;Gapyeong;District de Gapyeong;Gapyeong County;Gapyeong-gun;Kahei-gun;Kap'yong-gun;Kap'yŏng-gun;Kapkhjon;gapyeong;gapyeong-gun;jia ping jun;Капхён;加平郡;가평;가평군; +city::1843137;Kang-neung;Gangneung;Gangreung;KAG;Kaguun;Kang-neung;Kangnung;Kangnŭng;Kannyn;Koryo;Kōryō;gangleungsi;jiang ling shi;Каннын;江陵市;강릉시; +city::1843491;Iksan;Iksan;Iri;Riri;aksan;ayksan;igsansi;iksani;yi shan shi;Іксан;Иксан;اکسان;ایکسان;იქსანი;益山市;익산시; +city::1843564;Incheon;Gorad Inchkhon;ICN;Incchon;Inch'on;Inch'ŏn;Incheon;Incheon-si;Inchkhon;Inchkhun;Inchon;Inchona;Incon;Inconas;Incshon;Intson;Inĉon;Inčchon;Inčhona;Inčonas;JCN;Nhan Xuyen;Nhân Xuyên;anchn;antshwn;aynchywn;incevona;incheon;incheongwang-yeogsi;incheonsi;inkiyon;ren chuan guang yu shi;xin chxn;İncheon;Ίντσον;Інчхон;Горад Інчхон;Инчон;Инчхон;Инчхън;אינצ'ון;إنتشون;انچن;اینچئون;इंचेवॉन;இங்கியோன்;อินช็อน;仁川广域市;仁川広域市;仁川廣域市;인천;인천광역시;인천시; +city::1843702;Icheon-si;Icheon;Icheon-si;icheon;icheonsi;이천;이천시; +city::1843841;Hwasun;Hwansun;Hwason;Hwasun;Khvasun;Wajun;hwasun;Хвасун;화순; +city::1843847;Hwaseong-si;Hwaseong;Hwaseong-si;hwaseong;hwaseongsi;화성;화성시; +city::1844174;Hongsung;CaminodeFloresta;Hongseong;Hongsong;Hongsŏng;Kojo;Kōjō;hongseong;홍성; +city::1844191;Hongch'on;Hongch'on;Hongch’ŏn;Kosen;Kōsen;hongcheon;hongcheongun;홍천;홍천군; +city::1845136;Chuncheon;Cchuncchon;Ch'unch'on;Ch'unch'ŏn;Chhun-chhen;Chhun-chhon-su;Chhûn-chhôn-sṳ;Chkhunchkhon;Chuncheon;Chүn'chon';Ch’unch’ŏn;Cunceon;Cuncon;Cunconas;QUN;Shunsen;Shusen;Syunsen;Tsch-hun-tsch-hon;Tsch-hun-tsch-hŏn;chanchywn;chun chuan;chun chuan shi;chuncheon;chuncheonsi;chwnchywn;tshntshwn;Çunçeon;Ĉunĉon;Čchunčchon;Čunčonas;Чхунчхон;Чүньчонь;تشنتشون;چانچئون;چونچیون;春川;春川市;춘천;춘천시; +city::1845457;Jeonju;CHN;Chenju;Chondzhu;Chongju;Chonju;Chunju;Chŏngju;Chŏnju;Condzu;Dzondzu;Džondžu;Jenchu;Jeonju;Tjyen-tjyou;Tschon-dschu;Tschön-dschu;Tsiuentcheou;Tyondyu;Tyondyū;jeonju;jeonjusi;jonju;jwnjw;jywnjw;quan zhou;quan zhou shi;Čondžu;Чонджу;Чоньжү;جئونجو;جونجو;जॉन्जू;全州;全州市;전주;전주시; +city::1845604;Cheongju-si;CJJ;Cheongju;Cheongju-si;cheongju;cheongjusi;청주;청주시; +city::1845759;Cheonan;Cchonan;Ch'onan;Ch'ŏnan;Cheonan;Chkhonan;Chonan';Ch’ŏnan;Tenan;Thien-on-su;Thiên-ôn-sṳ;Thyen-an;Thyen-ān;cheon-an;cheon-ansi;chywnan;tian an shi;tshwnan;Čchonan;Чонань;Чхонан;تشونان;چئونان;چیونان;天安市;천안;천안시; +city::1846052;Chinju;Chindzhu;Chinju;HIN;Jinju;Shinshu;Shinshū;Sinsyu;Sinsyū;Tschin-dschu;jin zhou;jin zhou shi;jinjusi;Чинджу;晋州;晋州市;진주시; +city::1846095;Chinch'on;Chinchon;Chinsen;Jincheon;jincheon;jincheongun;진천;진천군; +city::1846266;Jeju City;CJU;Chedzhu;Cheju;Chu-sung;Chyei Chyu;Czedzu;Czedżu;Jeju;Jeju City;Kota Jeju;Saishu;Saishū;Saisyu;Saisyu Yu;Saisyū;Saisyū Yū;Tsche-dschu;Tse-tsiu;Tsitcheou;Tzetzou;chjw;jeju;jejusi;ji zhou;ji zhou shi;jyjw;Τζέτζου;Чеджу;جيجو;چجو;済州市;濟州;濟州市;제주;제주시; +city::1846326;Changwon;Cangvonas;Cchangwon;Ch'angwon;Ch'angwŏn;Changuon;Changwon;Chanvon;Chkhanvon;Ch’angwŏn;Cshangvon;Sangwon;Shogen;Shōgen;chang yuan;chang yuan shi;chang-wonsi;changwn;changwwn;tshanghwwn;zngwwn;Čangvonas;Čchangwon;Чанвон;Чангуон;Чханвон;צנגוון;تشانغوون;چانگون;چانگوون;چانگ‌وون;昌原;昌原市;창원시; +city::1846898;Anyang-si;Anyang;Anyang-si;an-yang;an-yangsi;안양;안양시; +city::1846912;Anseong;Anjo;Anjŏ;Anseong;Anson;Ansong;Ansŏng;an cheng shi;anseong;anseongsi;Ансон;安城市;안성;안성시; +city::1846918;Ansan-si;Ansan;Ansan-si;an shan;an shan shi;ansan;ansansi;安山;安山市;안산;안산시; +city::1846986;Andong;An'dun;Andang;Andon;Andong;Andongas;Anto;Antō;an dong shi;andong;andongsi;andoni;andwng;xan dng;Андон;Аньдун;آندونگ;انڈونگ;อันดง;ანდონი;安东市;安東市;안동;안동시; +city::1882056;Sinhyeon;Sinhyeon;Sinhyon;Sinhyŏn; +city::1884138;Yeosu;Josu;RSU;Yoch'on;Yosu;Yŏch’ŏn;Yŏsu;iosu;li shui shi;yeosusi;ywsw;yywsw;Ёсү;Йосу;یئوسو;یوسو;იოსუ;麗水市;여수시; +city::1892823;Tonghae;; +city::1896953;Pubal;; +city::1897000;Seongnam-si;Seongnam;Seongnam-si;seongnam;seongnamsi;성남;성남시; +city::1897007;Hanam;Hanam;hanam;하남; +city::1897118;Hwado;; +city::1897122;Namyangju;Nam-yong-chu-su;Namjandzhu;Namujandzhu;Namujanzhү khot;Namyangju;Namyangju-si;Nàm-yòng-chû-sṳ;nam-yangju;nam-yangjusi;namyangjw;nan yang zhou shi;Намъянджу;Намъянжү хот;Намянджу;نامیانگجو;南楊州市;남양주;남양주시; +city::1912205;Ungsang;; +city::1912209;Wabu;Wabu;wabu;와부; +city::1925936;Naeso;; +city::1925943;Hwawon;; +city::1948005;Kwangmyong;Kwangmyong;Kwangmyŏng; +city::6395804;Sinan;sin-an;sin-angun;신안;신안군; +city::6621166;Seogwipo;JSP;Seogwipo;Sogvipkho;Согвипхо; +city::6903078;Changnyeong;Ch'angnyong;Ch’angnyŏng;changnyeong;changnyeong-eub;changnyeong-gun;창녕;창녕군;창녕읍; +city::11523293;Sejong;Sedzong;Sedżong;Sejong;Sejong Special Self-Governing City;Yeongi;se(ː).dʑon;se(ː).dʑoŋ;sejong;shi zong;世宗;세종; +city::285629;Hawalli;Hawali-nogra;Hawalli;Hawaly;hawaliy;hwly;حولي;حَوَلِّي;Ḩawallī; +city::285728;Ar Riqqah;Al-Riqqah;Ar Riqqah;Reqqa;aalriqat;alrqt;الرقة;اَلرِّقَّة; +city::285787;Kuwait City;Al Kuwait;Al Kuwayt;Al-Kuwait;Ciudad de Kuwait;Ehl'-Kuvejt;KWI;Koeweit;Kota Kuwait;Koveyit;Koweit;Koweït;Kuvaeyt;Kuvajt;Kuvajto;Kuvajturbo;Kuveitas;Kuväyt;Kuwait;Kuwait City;Kuwait Stad;Kuwait by;Kuwait-Stadt;Kuwait-Urbo;Kuwayt;Kuweit;Kuwejt;Madinat al Kuwayt;Madinat al-Kuwait;Madīnat al Kuwayt;Pole tou Koubeit;aalkuayt;ke wei te shi;khuwet si ti;kuu~eto shi;kuweiteu;kuweiteusiti;kwwyt syty;mdynt alkwyt;Πόλη του Κουβέιτ;Эль-Кувейт;כווית סיטי;اَلْكُوَيْت;مدينة الكويت;คูเวตซิตี;クウェート市;科威特市;쿠웨이트;쿠웨이트시티; +city::285811;Al Fahahil;Al Fahahil;Al Faḩāḩīl;Al Fuhaihil;Al Fuhayhil;Al Fuħaiħil;Al Fuḩayḩīl;Al Ifhaihil;Al-Fahaheel;Al-Fahahil;Fahaheel;Fahahil;Fahaihil;Fahaihīl;Fahayhil;Fahāhīl;Faḩayḩīl;Fuhayhil;Fuḩayḩīl;aalfuhayhil;alfhahyl;الفحاحيل;اَلْفُحَيْحِيل; +city::285815;Al Farwaniyah;Al Farwania;Al Farwaniyah;Al Farwānīyah;Al-Farawaniyah;Al-Farwaniyyah;Farwaniah;Farwaniyyeh;aalfarwaniat;اَلْفَرْوَانِيَّة; +city::285839;Al Ahmadi;Ahmad;Ahmadi;Ahmedi;Al Ahmadi;Al Aħmadi;Al Aḩmadī;aalaahmadi;alahmdy;الاحمدي;اَلأَحْمَدِي; +city::412800;Sabah as Salim;Sabah as Salim;Sabah as Salim as Sabbah;sabah aalsaalim;Şabāḩ as Salim aş Sabbāḩ;Şabāḩ as Sālim;صَبَاح اَلسَّالِم; +city::607610;Zhanaozen;Novyj Uzen';Novyy Uzen’;Schangaoesen;Schangaösen;Zhanaozen;Zhangaoezen;Zhangaozen;Zhangaözen;Zhaңaөzen;Жанаозен;Жаңаөзен;Новый Узень; +city::608668;Oral;Gorad Ural'sk;O'ral;Oral;Orala;Oralas;Oural;Oʻral;URA;Ural's'k;Ural'sk;Uralsk;Ural’sk;awral;awral kazakhstan;awral qazqstan;awral qzaqstan;olal;oraru;wu la er;Οράλ;Горад Уральск;Орал;Уралск;Уральск;Уральськ;Җаек;אוראל;أورال;أورال، كازاخستان;ئۆرال، کازاخستان;اورال;اورال، قازقستان;اورال، قزاقستان;オラル;烏拉爾;오랄; +city::609123;Qulsary;Kol'sary;Kul'sari;Kul'sary;Кульсары; +city::609655;Karagandy;KGF;Karaganda;Karagandi;Karagandy;Qaragandi;Qaraghandy;Qarağandı;Караганда; +city::610529;Atyrau;Aterau;Atirau;Atirav;Atiraw;Atorau;Aturau;Atyraou;Atyrau;Atyraw;Atyraū;Atîrau;Atõrau;Atırau;Atırav;Atıraw;Chapayev;GUW;Gorad Atyrau;Gur'yev;Gurev;Guriev;Gur’yev;a te lao;atilau;atirau;aturau;atyraw;atyrayw qzaqstan;yatraw;Атирау;Атърау;Атырау;Горад Атырау;אטיראו;آتیراؤ;آتیرائو، قزاقستان;أتيراو;ئاتراو;اتیراؤ;ਅਤੁਰੌ;ატირაუ;アティラウ;阿特勞;아티라우; +city::610611;Aqtobe;AKX;Aktioube;Aktioubé;Aktiube;Aktiubinsk;Aktobe;Aktoebe;Aktubinsk;Aktyubinsk;Aktöbe;Aqtoebe;Aqtöbe;Ukhtiubinskii;agtoebe;Актобе;Ақтөбе;악퇴베; +city::610612;Aktau;Akhtau;Aktaou;Aktau;Aktauskiy;Aktav;Aqtau;Aqtaw;Aqtaū;SCO;Shevchenko;a ke tao;agtau;aktau;aktaw;akutau;aqata'u;aqtaw;aq‌taw;yaqtaw;Актау;Ақтау;آقتاؤ;آق‌تاو;أكتاو;ئاقتاو;اقتاؤ;अक़तऊ;აქთაუ;アクタウ;阿克套;악타우; +city::1516589;Zhezqazghan;Bol'shoy Dzhezkazgan;Bol’shoy Dzhezkazgan;DZN;Dzhezkazgan;Jez-Kazgan;Jezgazgan;Schesqasghan;Zhezkazgan;Zhezkˌazgan;Zhezqazghan;Джезказган;Жезказган;Жезқазған; +city::1516905;Taraz;Auliye-Ata;DMB;Dzhambul;Gorad Taraz;Jambul;Talas;Taras;Taraz;Taraza;Tarazas;Zhambyl;ta la ci;talajeu;taraz;tarazu;traz;Ταράζ;Горад Тараз;Тараз;Թարազ;טאראז;تاراز;تراز;طراز;ტარაზი;タラズ;塔拉兹;타라즈; +city::1517945;Turkestan;Turkestan;Turkistan;Türkistan;Туркестан;Түркістан; +city::1518262;Temirtau;Samarand;Samarka;Samarkand;Samarkandskoye;Temirtaou;Temirtau;Temirtaw;Temirtaū;Temyrtau;temileutau;tie mi er tao;tmyrtaw;Темиртау;Теміртау;تميرتاو;تمیرتاؤ;تمیرتاو;تێمیرتاو;鐵米爾套;테미르타우; +city::1518542;Taldykorgan;Gavrilovka;Gavrilovskoye;Gorad Taldykargan;TDK;Taldi Kurgan;Taldikorgan;Taldiqo'rg'an;Taldiqorgan;Taldiqoʻrgʻan;Taldokorgan;Taldukorgan;Taldy-Korgon;Taldy-Kurgan;Taldykorgan;Taldykorganas;Taldykourgan;Taldyqorghan;Taldîkorgan;Taldõkorgan;Taldıqorğan;Talto-Kurgan;Taltö-Kurgan;Tałdykorgan;ta er di ku er gan;taldikoleugan;taldykwrghan;taldyqwrghan;taldyqwrghan qzaqstan;tarudikorugan;tldykwrghan;Горад Талдыкарган;Талдикорган;Талдъкорган;Талды-Коргон;Талдыкорган;Талдықорған;Տալդի Կուրգան;تالدقۆرغان;تالديكورغان;تالدیقورغان;تالدیقورغان، قزاقستان;تلدیکورغان;თალდიყორღანი;タルディコルガン;塔爾迪庫爾干;탈디코르간; +city::1518543;Taldyqorghan;Taldy - Kurgan;Taldy-Kurgan;Taldy-Kurgan Stantsiya;Taldykurgan;Taldyqorghan;Талды - Курган; +city::1518980;Shymkent;CIT;Chimkent;Chymkent;Cimkent;Gorad Shymkent;Schymkent;Shimkent;Shymkent;Shımkent;Simkent;Simkenta;Simkento;Sjimkent;Sjymkent;Somkent;Symkent;Symkentas;Szymkent;Tsjimkent;Ximkent;Xymkent;chymknd;qi mu ken te;shimkenti;shimukento;shmkynt;shymknt;simakenta;swimkenteu;symqnt;Çimkent;Çimkənd;Ŝimkento;Şımkent;Šimkent;Šimkenta;Šymkent;Šymkentas;Šõmkent;Șîmkent;Σιμκέντ;Горад Шымкент;Чимкент;Чымкент;Шимкент;Шымкент;שימקנט;شمکینت;شمکێنت;شيمكنت;شیمکنت;چیمکند;शिमकेंत;შიმქენთი;シムケント;奇姆肯特;쉼켄트; +city::1519422;Semey;Alash-kala;PLX;Semei;Semej;Semeja;Semejus;Semey;Semeï;Semipalatinsk;Semipalatynsk;sai mi yi;semei;smy;smyy;symay;symy;Σεμέι;Семей;Семеј;Семипалатинск;סמיי;سمی;سيماي;سیمی;سێمێی;セメイ;塞米伊;세메이; +city::1519691;Sarkand;Sarkand;Sarkanskaya;Sarqan;Sarqant;Сарканд; +city::1519843;Rudnyy;Rudnyj;Rudnyy;Rūdnyy;Рудный; +city::1519922;Kyzylorda;Ak-Mechet;Ak-Mechet';Fort Perovskij;Fort Perovsky;Gorad Kyzylarda;KZO;Khizilorda;Khizilordà;Kizilorda;Kizilornta;Kozolorda;Kuzulorda;Kyzylorda;Kyzyłorda;Kzyl-Orda;Kîzîlorda;Kõzõlorda;Kızılorda;Kˌyzylorda;Perovsk;Qizilo'rda;Qizilorda;Qiziloʻrda;Qysylorda;Qyzylorda;Qızılorda;ke zi lei ao er da;khuy si lxx r da;kijilloleuda;kijilorada;kuzuroruda;kyzylwrda;qyzylwrda;qzl awrda;Κιζιλορντά;Ак-Мечеть;Горад Кызыларда;Кзыл-Орда;Кизилорда;Къзълорда;Кызылорда;Перовск;Форт Перовский;Қызылорда;Կզըլ-Օրդա;قزل اوردا;قیزیلوردا;قیزیل‌اوردا;كيزيلوردا;ਕਿਜਿਲੋਰਡਾ;คืยซิลออร์ดา;ყიზილორდა;クズロルダ;克孜勒奧爾達;키질로르다; +city::1519928;Kostanay;KSN;Kostanai;Kostanaj;Kostanajus;Kostanay;Kostanaï;Kostanái;Kustanai;Kustanaisk;Kustanaj;Kustanay;Nikolayevsk;Qo'stanay;Qostanai;Qostanaj;Qostanay;Qoʻstanay;koseutanai;kosutanai;ku s ta ni;ku si ta nai;kwstnay;qwstanay;qwstanay qzaqstan;qwstanayy;Κοστανάι;Костанай;Кустанай;Кустанај;Қостанай;قوستانائی;قوستانای;قوستانای، قزاقستان;قۆستانای;كوستناي;กุสตาไน;კოსტანაი;コスタナイ;庫斯塔奈;코스타나이; +city::1520172;Petropavl;Kizilyar;Kızılyar;PPK;Petropavel;Petropavl;Petropavla;Petropavlas;Petropavlovs'k;Petropavlovsk;Petropawl;Petropawlowsk;Petropawł;Pietropawlowsk;Pietropawłowsk;bi de luo ba fu er;btrwbafl;peteulopabeul;petoropaburu;ptrwpawl qzaqstan;pytrwpawl;Πετροπάβλ;Петропавел;Петропавл;Петропавловск;Петропавловськ;بتروبافل;پتروپاول، قزاقستان;پیتروپاول;پێترۆپاڤل;ペトロパブル;彼得罗巴甫尔;페트로파블; +city::1520240;Pavlodar;Gorad Pauladar;Kereku;Kerekū;PWQ;Pavlodar;Pavlodara;Pavlodaras;Pavlontar;Pawlodar;Pawłodar;ba fu luo da er;baflwdar;pabeullodaleu;paf lod ar;pavalodara;pavurodaru;pawlwdar;pawlwdar qzaqstan;pawlwdr;pblwdr;Παβλοντάρ;Горад Паўладар;Павлодар;פבלודר;بافلودار;پاؤلودار;پاولودار، قزاقستان;پاولودر;پاڤلۆدار;ਪਾਵਲੋਦਰ;ปัฟโลดาร์;პავლოდარი;パヴロダル;巴甫洛達爾;파블로다르; +city::1520316;Ust-Kamenogorsk;OEskemen;Oskemen;UKK;Ust'-Kamenogorsk;Ust-Kamenogorsk;Ust-Kamienogorsk;oeseukemen;Öskemen;Усть-Каменогорск;Өskemen;Өскемен;ウスチ・カメノゴルスク;외스케멘; +city::1521368;Baikonur;BXY;Baikonur;Bajkonur;Bajkˌoңyr;Baykonur;Bayqonir;Bayqoñır;Leninsk;Leninskiy;Tyuratam;Zarya;Байконур;Байқоңыр;Ленинск; +city::1521370;Ridder;Leninogor;Leninogorsk;Lenīnogor;Lenīnogorsk;Ridder;Ridderskiy;Rideras;Rïdder;li de;rydr;rydr qazqstan;rydr qzaqstan;Лениногорск;Риддер;Ріддер;ريدر;ریدر، قازقستان;ریدر، قزاقستان;ڕیددێر;里德; +city::1522203;Kokshetau;KOV;Keksetau;Kekšetau;Ko'kshetau;Kochetayev;Koekschetau;Koeksetaw;Koekshetau;Koeksjetau;Kokcetau;Kokchetaou;Kokchetar;Kokchetau;Kokchetav;Kokczetaw;Koksetau;Kokshetau;Koksjetau;Kokxetau;Kokčetau;Kokšetau;Kokșetau;Koshetau;Koʻkshetau;Kökschetau;Kökshetaū;Köksjetau;Kökşetaw;Köshetaū;ke ke she tao;kogsyetau;kokshetau;kokushetau;kwkshh‌taw;kwkshytaw;kwkshytw;Кокчетав;Кокшетау;Көкчө-Тоо;Көкшетау;Կոկչետավ;كوكشيتو;کوکشه‌تاو;کوکشیتاؤ;کوێکشێتاو;ქოქშეთაუ;コクシェタウ;科克舍套;콕셰타우; +city::1522751;Kentau;Kentaou;Kentau;Kentaw;Kentaū;ken tao;kentau;kntaw;Кентау;كنتاو;کنتاؤ;کن‌تاو;کێنتاو;ქენთაუ;肯套; +city::1524325;Ekibastuz;EKB;Ehkibastuz;Ekibastouz;Ekibastus;Ekibastuz;Ekibastuza;Ekibastuzas;Ekibastuzugol';Ekibastuzugol’;Ekibastūz;Energograd;Gorad Ehkibastuz;Jekibastuz;Jekybastuz;ai ji ba si tu zi;akybastwz;akybastwz qzaqstan;ekibaseutujeu;ekibasutosu;xe khi bas tus;Горад Экібастуз;Екибастуз;Екібастуз;Екібастұз;Экибастуз;ئێکیباستوز;اکیباستوز;اکیباستوز، قزاقستان;เอคีบาสตุซ;エキバストス;埃基巴斯圖茲;에키바스투즈; +city::1525798;Balqash;BXH;Balkhash;Balqash;Pribalkhash;Pribalkhashstroy;Балхаш; +city::1526273;Astana;Akmola;Akmolinsk;Aqmola;Astana;Astano;Astanà;Astaná;Asztana;Aστάνα;Ostona;Qaraotkel;Qaraötkel;TSE;Tselinograd;a si ta na;aseutana;astana;astanh;asutana;Астана;Остона;Աստանա;אסטנה;آستانه;أسطانا;আস্তানা;ასტანა;አስታና;アスタナ;阿斯塔纳;아스타나; +city::1526384;Almaty;ALA;Alma Ata;Alma-Ata;Almaato;Almata;Almati;Almato;Almaty;Almatî;Almatõ;Almatý;Almatı;Almatʻa;Ałmaty;Gorad Alma-Ata;Vernyy;a la mu tu;alamati;almaaty;almati;almaty;arumatoi;xal mati;Αλμάτι;Алма-Ата;Алмаато;Алмати;Алматы;Горад Алма-Ата;Ալմաթա;אלמאטיע;אלמטי;آلماآتی;آلماتی;ألماتي;ئالمۇتا;الماتی;अलमाती;अल्माटी;อัลมาตี;ཨཱལ་མ་ཊི།;ალმათი;アルマトイ;阿拉木圖;알마티; +city::9862222;Kyzyl-Orda;Kyzylorda;Кызылорда; +city::1651944;Vientiane;Bientian;Fanhyiengh;Gorad Venc'jan;Nakhon Viangchan;V'ent'jan;VTE;Vent'jan;Ventjan;Ventyan;Vianchan;Viang chan;Viangchan;Vien Can;Vien Chang;Vienciana;Vieng Chan;Vieng-Caen;Vieng-Chan;Vieng-Cæn;Viengchan;Viengtjan;Vientane;Vientian;Vientianas;Vientiane;Vientijan;Vientián;Vientjan;Vientyan;Vijentijan;Viêng Chăn;Vjencana;Vjentiano;Vjentjan;Vjenčana;Vyantyan;Vyantyàn;Vyentyan;Wei-t'ien;Wei-t’ien;Wiang Chan;Wiangcan;Wien Tsjan;Wientian;Wiën Tsjan;Wyentyan;Wyéntyan;bhiyenatiyena;bientian;fyyntyan;vhi'antiyana;vi'anga cana;viyancan;viyen tiyen;vu~ienchan;vu~ienchan shi;wan xiang;weiyngcanthn;wyntyan;yong zhen;Βιεντιάν;Вентян;Виентијан;Виентян;Вијентијан;Вьентьян;Вєнтьян;Горад Венцьян;Վիենտյան;ויינטיאן;فيينتيان;وینتیان;ڤیێنتیان;व्हिआंतियान;ভিয়েনতিয়েন;ਵਿਆਂਗ ਚਾਨ;வியஞ்சான்;ವಿಯೆನ್ ಟಿಯೇನ್;വിയന്റിയൻ;เวียงจันทน์;ວຽງຈນ;ວຽງຈັນ;ཝིན་ཆིའང་;ဗီယင်ကျန်းမြို့;ვიენტიანი;ቭየንትዬን;ヴィエンチャン;ヴィエンチャン市;万象;永珍;비엔티안; +city::1653316;Savannakhet;Khwaeng Savannakhet;Khwaeng_Savannakhet;Muang Savannaket;Savannaket;Savannakhet;Savannakhét;Savannakkhet;Suvannakhet;Suwanakhet;Svannakhet;Svannakhét;ZVK;sawan'naketo xian;Саваннакхет;แขวงสะหวันนะเขต;サワンナケート県; +city::1654379;Pakse;PKZ;Pakse;Paksé;Paksė;Pakxe;Pakxé;ba se;baksy;pagse;pak se;paksh;pakuse jun;Паксе;باكسي;پاکسه;پاکسے;ปากเซ;ປາກເຊ;ເມືອງປາກເຊ;პაქსე;パークセー郡;巴色;팍세; +city::1655199;Thakhek;Khammouane;Muang Khammouan;Muang Thakek;Tha Khaek;Thakhek;Thakhet;Thakhok;Thakhèk; +city::266045;Zahle;Gorad Zakhle;QZQ;Sahla;Zachle;Zahla;Zahlah;Zahle;Zahleh;Zahlé;Zahlė;Zakhla;Zakhle;Zaḩlah;jaheulle;zare;zha he lei;zhlh;zhlh lbnan;zhlt;Ζάχλε;Горад Захле;Захла;Захле;Զահլե;זאכלא;זחלה;زحلة;زحله;زحله، لبنان;زحلہ;ザーレ;扎赫勒;자흘레; +city::266826;Tripoli;Gorad Trypali;KYE;Tarabulus;Trablous;Trablussam;Trablusşam;Tripol;Tripole;Tripoli;Tripoli i Libanon;Tripolis;Tripolo;Tripuli;Trypolis;Trâblous;Trìpuli;Trípol;Trípoli;de li bo li;teulipolli;toripori;trabls;trabls alsham;tripoli;trippeali;trypwly;Ţarābulus;Τρίπολη;Горад Трыпалі;Триполи;Триполі;Տրիպոլի;טריפאלי;טריפולי;ترابلس;طرابلس;طرابلس الشام;त्रिपोली;ട്രിപ്പൊളി;ตริโปลี;ტრიპოლი;トリポリ;的黎波里;트리폴리; +city::267008;Tyre;Es Sur;Sor;Sour;Soûr;Sur;Surru;Tir;Tiro;Tyr;Tyras;Tyre;Tyros;Tyrus;Týros;alswr;swr;tai er;tirusu;zr;zwr;Şūr;Τύρος;Тир;Тір;Тѵръ;צור;צר;الصور;صور;Ṣur;Ṣurru;Ṣōr;ティルス;泰爾; +city::268064;Sidon;Cidono;Gorad Sajda;QSQ;Saida;Sajda;Sayda;Saïda;Sido;Sidon;Sidona;Sidonas;Sidone;Sidoni;Sidun;Sidó;Sidón;Sidѡnu;Sydon;Sydón;Szidon;Szidón;Sídon;sai da;saida;si dxn;sidon;sidoni;syda;zydwn;Şaydā;Σιδώνα;Горад Сайда;Сайда;Сидон;Сідон;Сїдѡнъ;Սայդա;צידון;صيدا;صیدا;ไซดอน;სიდონი;サイダ;赛达;시돈; +city::273140;Jounieh;Djounie;Jounie;Joünié;Juniyah;Jūniyah;jwnyh;جونيه; +city::274874;Habbouch;Habbouch;Habboush;Habboûch;Habbush;Khabbushe;hbwsh;Хаббуше;حبوش;Ḩabbūsh; +city::276781;Beirut;BEY;Baeyrut;Bairut;Bayrut;Bayrūt;Beiriut;Beiroet;Beirot;Beirots;Beirout;Beiroūt;Beirut;Beiruta;Beirutas;Beirute;Beirút;Beirût;Beirūta;Bejrut;Bejrut oshs';Bejruti;Bejruto;Bejrút;Berut;Berytos;Berytus;Bewout;Beyrouth;Beyrut;Bey­rutʻ;Birut;Bäyrut;Béiriút;Bêrût;Gorad Bejrut;bairut;bairuta;bayrut;bei lu te;beiluteu;beiruti;beiruto;berut;beruta;beyaruta;beyruta;bey‌rutt;biruta;byrwt;byyrwt;peyrut;Βηρυτός;Бейрут;Бейрут ошсь;Бејрут;Бәйрут;Горад Бейрут;Բեյ­րութ;ביירוט;ביירות;بيروت;بَيْرُوت;بیروت;بېيرۇت;بەیرووت;ܒܝܪܘܬ;बेयरूत;बेय्रुत;बैरूत;বৈরুত;ਬੇਰੂਤ;ବିରୁଟ;பெய்ரூத்;ಬೈರುತ್;ബെയ്‌റൂത്ത്;เบรุต;པ་ར་ཐ།;པེ་རུ་ཐེ།;ဘေရွတ်မြို့;ბეირუთი;ቤይሩት;ベイルート;貝魯特;贝鲁特;베이루트; +city::278913;Nabatiye et Tahta;An Nabatiyah at Tahta;An Nabaţīyah at Taḩtā;NABATIEH TAHTA; +city::1225018;Vavuniya;Vavunija;Vavuniya;Vavuniya Town;babuniya;vavuniya;wawwnya;wawwnyya;Вавуния;واوونیا;واوونییا;வவுனியா;වවුනියාව;バブニヤ; +city::1225142;Valvedditturai;Valvedditturai;Valvettithurai;Valvettiturai; +city::1226260;Trincomalee;Gorad Trynkamali;TRR;Trikomali;Trikunamalaja;Trincomalee;Trincomali;Trinkomale;Trinkomali;Trinkomalis;Trinquemalay;teulingkomalli;ting ke ma li;tirukkeanamala;tirukkonamalai;torinkomari;trinkomali;trynkwmaly;Горад Трынкамалі;Трикомали;Тринкомале;Тринкомали;Трінкомалі;ترينكومالي;ترینکومالی;त्रिंकोमली;திருக்கோணமலை;തിരുക്കോണമല;ත්‍රිකුණාමලය;ტრინკომალი;トリンコマリー;亭可馬里;亭可马里;트링코말리; +city::1229989;Point Pedro;Point Pedro;Pojnt-Pedro;paruttitturai;Пойнт-Педро;پوائنٹ پیڈرو;பருத்தித்துறை;පේදුරු තුඩුව; +city::1230089;Pita Kotte;; +city::1233369;Negombo;Negombas;Negombo;nei gong bo;nigonbo;nirkolumpu;nygwmbw;Негомбо;نیگومبو;நீர்கொழும்பு;මීගමුව;ニゴンボ;內貢博; +city::1234569;Dehiwala-Mount Lavinia;Dehivala-Maunt Lavinija;Dehiwala-Mount Lavinia;Dekhivala-Maunt-Lavinija;Mount Lavania;Mount Lavina;Mount Lavinia;Mount Laviniya;dai xi wa lei-mang te la wei ni;tekivalai-kalkicai;Дехивала-Маунт-Лавиния;Дехівала-Маунт-Лавінія;دیہیوالا-ماؤنٹ لاوینیا;தெகிவளை-கல்கிசை;දෙහිවල-ගල්කිස්ස;მაუნტ-ლავინია;デヒワラ・マウントラビニア;代希瓦勒-芒特拉维尼; +city::1234633;Moratuwa;Moratuva;Moratuwa;mo la tu wa;morato~uwa;morattuvai;mwratwwa;Моратува;موراتووا;மொறட்டுவை;මොරටුව;モラトゥワ;莫拉圖瓦; +city::1235846;Matara;Matara;ma ta la;matara;mattarai;Матара;மாத்தறை;මාතර;მატარა;マータラ;馬塔拉; +city::1236854;Maharagama;Maharagama; +city::1238992;Sri Jayewardenepura Kotte;DWO;Kolompo;Kotte;New Capital Territory;Shri-Dzhajavardenepura-Kotte;Sri Dzajavardenepura;Sri Jayavardhanapura;Sri Jayawardenapura;Sri Jayawardenepura;Sri Jayawardenepura Kotte;Sri Jayewardanapura Kotte;Sri Jayewardanepura;Sri Jayewardanepura Kotte;Sri Jayewardenepura Kotte;kotte;seulijayawaleudanapula;surijayawarudanapurakotte;Šri Džajavardenepura;Κολόμπο;Шри-Джаяварденепура-Котте;கோட்டே;スリジャヤワルダナプラコッテ;스리자야와르다나푸라; +city::1239047;Kotikawatta;Kotikawatta; +city::1239593;Kolonnawa;Kolonnawa; +city::1240935;Katunayaka;Katunayaka;Katunayaka North;Katunayake; +city::1241622;Kandy;Gorad Kandy;KDW;Kandi;Kandis;Kandy;Mahanurora;Mahanuvara;Mahanuwara;kaendi;kaindi;kandy;kang ti;kanti;kendi;kndy;kyandi;Горад Канды;Канди;Канді;Կանդի;קאנדי;كاندي;کندی;کینڈی;कॅन्डी;कैंडी;क्यान्डी;ক্যান্ডি;கண்டி;കണ്ടി;මහනවර;මහනුවර;กัณฏิ;კანდი;キャンディ;康提;캔디; +city::1242110;Kalmunai;Kalmunai; +city::1242833;Jaffna;Dzafn;Dzafna;Dzhafna;Dżafna;Džafn;Džafna;Gorad Dzhafna;JAF;Jaffna;Jaffna Town;gu fu na;jafna;jafuna;japeuna;japhana;japhna;japna;yalppanam;Горад Джафна;Джафна;جافنا;जाफना;ਜਾਫਨਾ;யாழ்ப்பாணம்;జాఫ్నా;ജാഫ്ന;යාපනය;ჯაფნა;ジャフナ;賈夫納;자프나; +city::1244397;Hendala;; +city::1246294;Galle;Gale;Galla;Galle;Galė;Gorad Gale;Gálla;gal;gala;gale;gali;galla;galy;ghaly;goru;jia lei;kali;kxll;Гале;Галле;Горад Гале;Ґалле;גאלה;غالي;گال;گالی;गाल;गाली;गाल्ल;গালে;காலி;ഗാലെ;ගාල්ල;กอลล์;გალე;ゴール;加勒;갈; +city::1246321;Galkissa;; +city::1248749;Dambulla;DBU;Dambul;Dambula;Dambulla;Gorad Dambula;dambulla;dan bu lei;danburra;tampullai;Горад Дамбула;Дамбулла;தம்புள்ளை;ദംബുള്ള;දඹුල්ල;ダンブッラ;丹布勒; +city::1248991;Colombo;CMB;Colombo;Columbo;Columbum;Gorad Kalomba;Kolombas;Kolombo;Kolompo;Kolonbo;ge lin bao;kalambo;kalombo;ke lun po;kealambea;kholambo;klmbw;kolabo;kolambo;kollombo;kolumpu;kolunbu;koronbo;kwlmbw;kwlwmbw;qwlwmbw;Κολόμπο;Горад Каломба;Коломбо;Կոլոմբո;קולומבו;كولمبو;كولومبو;کلمبو;کولمبو;ކޮޅުނބު;कोलंबो;कोलम्बो;কলম্বো;ਕੋਲੰਬੋ;કોલંબો;କଲୋମ୍ବୋ;கொழும்பு;కొలంబో;ಕೊಲಂಬೊ;കൊളംബോ;කොළඹ;ෙකාළඹ;โคลัมโบ;ཁོ་ལུམ་པོ།;ကိုလံဘိုမြို့;კოლომბო;ኮሎምቦ;コロンボ;可倫坡;哥林堡;콜롬보; +city::1250161;Batticaloa;BTC;Batikaloa;Batticaloa;Batticoloa;Battikaloa;Gorad Batykaloa;Madakalapuva;Madakalapuwa;Madakalapuwra;Maddakkalabbu;ba ti ka luo a;battikalova;battikaroa;batykalwa;mattakkalappu;Баттикалоа;Баттікалоа;Горад Батыкалоа;باتيكالوا;باٹیکالوا;बट्टिकलोवा;மட்டக்களப்பு;මඩකලපව නගරය;මඩකලපුව නගරය;ბატიკალოა;バッティカロア;巴提卡洛阿; +city::1250164;Battaramulla South;Battaramulla;Battaramulla South; +city::1251081;Anuradhapura;ACJ;Aneuradhapura;Anuradhapur;Anuradhapura;Anuradhapura Town;Anuradhapuraja;Anuradkhapura;Anurádhapuraja;Anurâdhapura;Anurādhapura;Gorad Anuradkhapura;a nu la de pu lei;a nu la de pu lei wang guo;anuladapula;anuradapura;anuradhapura;anuradhapuram;anuradkhapura;anuratapuram;anwradabwra;xnu rath pu ra;Анурадхапура;Горад Анурадхапура;אנוראדאפורה;أنورادابورا;انورادھاپورہ;अनुराधापुर;अनुराधापुरा;அனுராதபுரம்;അനുരാധപുരം;අනුරාධපුර පෞරාණික නගරය;อนุราธปุระ;ანურადჰაპურა;アヌラーダプラ;阿努拉德普勒;阿努拉德普勒王國;아누라다푸라; +city::2274895;Monrovia;Gorad Manrovija;MLW;Monrobia;Monrofia;Monrovi;Monrovia;Monrovii;Monrovija;Monrovio;Monroviya;Monrowia;Monròvia;Monróvia;Monróvía;manarobhiya;manroweiy;manrwwya;meng luo wei ya;monarovi'a;monlobia;monrobia;monrovhiya;monrovia;monroviya;mwnrwbyh;mwnrwfya;mwnrwwya;Μονρόβια;Горад Манровія;Монрови;Монровия;Монровија;Монровія;Մոնրովիա;מאנראוויע;מונרוביה;مانروویا;مونروفيا;مونروویا;مۆنرۆڤیا;मोन्रोव्हिया;মনরোভিয়া;ਮੋਨਰੋਵੀਆ;மொன்றோவியா;มันโรเวีย;མོང་རོ་ཝི་ཡ།;მონროვია;ሞንሮቪያ;モンロビア;蒙罗维亚;蒙羅維亞;몬로비아; +city::932505;Maseru;Gorad Maseru;MSU;Maserou;Maseru;Maseruo;Maserú;Mazerou;ma sai lu;ma se ru;ma xie lu;maceru;maselu;maseru;masrw;masyrw;msrw;Μαζέρου;Μασερού;Горад Масеру;Масеру;Մասերու;מאסערו;מסרו;ماسرو;ماسيرو;ماسیرو;ماسێرو;मासेरू;ਮਸੇਰੂ;மசேரு;มาเซรู;མ་སི་རུ།;მასერუ;መሴሩ;マセル;馬些盧;马塞卢;마세루; +city::932614;Mafeteng;MFC;Mafeteng; +city::593116;Vilnius;Gorad Vil'njus;IVilnyusi;VNO;Vil'njus;Vil'no;Vil'nyus;Viln';Vilna;Vilnia;Vilnias;Vilniaus miestas;Vilnious;Vilnis;Vilnius;Vilnjus;Vilnjûs;Vilno;Vilnues;Vilnus;Vilnyus;Vilníus;Vilnüs;Viļņa;Vílnius;Wilna;Wilniyus;Wilno;Wilnus;Wilñus;bhilani'usa;bilnyuseu;fylnyws;vhilniyasa;vilniusi;vilniyas;vu~irinyusu;vylnyws;wei er niu si;wi lni xus;wlnys;wylnh;wylnyws;Βίλνα;Βίλνιους;Βιλνιους;Вилниус;Вилнус;Вилнюс;Вилн҄ь;Вильнюс;Вилњус;Виљнус;Вільнюс;Горад Вільнюс;Վիլնյուս;ווילנע;וילנה;فيلنيوس;ولنیس;ویلنیوس;ڤیلنیوس;व्हिल्नियस;ভিলনিউস;வில்னியஸ்;วิลนีอุส;ལྦེ་ནི་སུ་ནི།;ვილნიუსი;ቪልኒውስ;ᕕᓪᓂᐅᔅ/vilnius;ヴィリニュス;维尔纽斯;빌뉴스; +city::594739;Siauliai;Comune urbano di Siauliai;Comune urbano di Šiauliai;Gorad Shauljaj;SQQ;Sauli;Schaulen;Shaulyay;Shavli;Shawllay;Shjaulaj;Shjauljaj;Shyaulyay;Siaouliai;Siaule;Siauliai;Siauliu;Sjaulaj;Sokniai;Syaulyay;Szawle;cheale;shaurei;shiauliai;shyawlyay;shyawlyayy;syaullyai;xi ao li ai;Ŝjaulaj;Şyaulyay;Šauļi;Šiauliai;Šiaulių;Šiaulē;Σιαουλιάι;Горад Шаўляй;Шяуляй;Шјауљај;שאולאי;شياولياي;شیاؤلیائی;เชาเล;შიაულიაი;シャウレイ;希奥利艾;샤울랴이; +city::596128;Panevezys;PNV;Paneveza;Panevezhi;Panevezhis;Panevezio;Panevezis;Panevezys;Panevežis;Panevjazhys;Panevēža;Panevėžio;Panevėžys;Panevėžīs;Panjavezhis;Ponewesch;Ponewiesch;Poniewesch;Poniewiesh;Poniewiez;Poniewież;pa nei wei ri si;pa neiy weci s;panebejiseu;panevu~ejisu;pwnybz;pynywyzhys;Πανεβέζυς;Паневежис;Паневяжыс;Панявежис;פוניבז;پینیویژیس;ปาเนียเวจีส;პანევეჟისი;パネヴェジース;帕內韋日斯;파네베지스; +city::598098;Klaipeda;KLJ;Klaipada;Klaipeda;Klaipenta;Klaipéda;Klaipēda;Klaipėda;Klajpeda;Klaypeda;Kłajpeda;Lungsod ng Klaipeda;Lungsod ng Klaipėda;Memel;Memela;ke lai pei da;keullaipeda;khil pheda;klaipedas;kuraipeda;qlypdh;qlyypdh;Κλαϊπέντα;Клаипеда;Клайпеда;Клајпеда;קלייפדה;קליפדה;ไคลเพดา;クライペダ;克莱佩达;클라이페다; +city::598316;Kaunas;Caunas;Couna;Gorad Kaunas;KUN;Kaounas;Kauen;Kauna;Kaunas;Kauno;Kauns;Kauņa;Kawnas;Kaŭno;Kovno;Kowno;Palemonas;kao na si;kaunaseu;kaunasu;kawnas;khea nas;konasa;qwbnh;Κάουνας;Горад Каўнас;Каунас;קאוונע;קובנה;كاوناس;کاؤناس;کاوناس;कॉनास;เคานัส;კაუნასი;ᑯᓇᔅ/kunas;カウナス;考那斯;카우나스; +city::601084;Alytus;Alita;Alitos;Alitous;Alitus;Alytaus;Alytus;Alīta;Alītos;Gorad Alitus;Olita;a li tu si;allituseu;alwts;alytas;alyts;alytws;arito~usu;Αλίτους;Алитус;Алітус;Горад Алітус;Ալիտուս;אליטא;أليتس;الوتس;الیتاس;الیتوس;ალიტუსი;アリートゥス;阿利图斯;알리투스; +city::2960316;Luxembourg;Bandar Luxembourg;Ciudad de Luxemburgo;Ciutat de Luxemburg;Dinas Lwcsembwrg;Gorad Ljuksemburg;LUX;Letzebuerg;Letzeburg;Liksanbou;Liuksemburgas;Ljuksemburg;Louxemvourgo;Lucemburk;Lucilinburhuc;Lucsamburg;Lucsemburg;Lueksemburg;Lueksemburq;Luessemburgh;Luksambuur;Luksemboarch;Luksembourg;Luksemburg;Luksemburga;Luksemburgo;Luksemburgu;Luksembùrg;Luksimbur;Lungsod ng Luksemburgo;Lusenburgo;Lussemborgh;Lussemburgo;Lussemburgu;Lussimbork veye;Luxemboerg;Luxemborg;Luxemborj;Luxembourg;Luxembourg by;Luxemburg;Luxemburgo;Luxemburgum;Luxembuurich;Luxembôrg;Luxembörg;Luxenburgo;Lëtzebuerg;Lúksemboarch;Lúxemborg;Lüksemburg;Lüksemburq;Lüssemburgh;Rakapuo;Rakapuō;Stad Letzebuerg;Stad Lëtzebuerg;Stadt Luxemburg;Ville de Luxembourg;lak sem beirk;lakcampark;lakjhembarga;lksmbrg;lu sen bao cheng;lu sen bao shi;lugsembuleukeu;luksemaburga;luksemburgi;lwksmbwrgh;lwkzambwrg;lwqsmbwrg;rukusenburuku;Λουξεμβούργο;Горад Люксембург;Луксембург;Люксембург;Лүксембург;Լյուքսեմբուրգ;לוקסמבורג;لوكسمبورغ;لوکزامبورگ;لوکسەمبورگ;ليۇكسېمبۇرگ شەھىرى;لکسمبرگ;लक्झेंबर्ग;লুক্সেমবুর্গ;லக்சம்பர்க்;ลักเซมเบิร์ก;ལུ་སེམ་བའུརག;ლუქსემბურგი;ሉክሰምበርግ;ルクセンブルク;盧森堡城;盧森堡市;룩셈부르크; +city::456172;Riga;Gorad Ryga;RIX;Reiga;Riga;Rigae;Rige;Rigg-a;Rigo;Riia;Riigaa;Riika;Rija;Riqa;Ryga;Ríga;Ríge;Rīga;li jia;liga;ri ka;riga;rika;ryga;rygh;rygha;ryja;Ρίγα;Горад Рыга;Ригæ;Рига;Ріґа;Ռիգա;ריגה;ריגע;رىگا;ريجا;ريغا;ریگا;रिगा;रीगा;রিগা;ரீகா;รีกา;རི་ག;რიგა;ሪጋ;リガ;里加;리가; +city::457954;Liepaja;Gorad Liepaja;LPX;Leepaja;Lepaya;Libau;Libava;Liepagia;Liepaiya;Liepaja;Liepaya;Liepoja;Liepāja;Lietaja;Lietaya;Lijepaja;Lipawa;Liyepaya;li ye pa ya;lipaya;liyepaya;lyypʼyh;riepaya;Λιεπάγια;Λιεπαγια;Горад Ліепая;Лиепая;Лијепаја;Лієпая;לייפאיה;लीपाया;ლიეპაია;リエパーヤ;利耶帕亚;리예파야; +city::459201;Jurmala;Jurmala;Jūrmala;Riga Beach;Riga-Strand;Rigas Iurmala;Rigas Jormalas Pilseta;Rigas Jurmala;Rigas Yurmala;Rigastrand;Rizhskoye Vzmor'ye;Rīgas Jormalas Pilsēta;Rīgas Jūrmala;Yuomala;Yurmala;Юрмала; +city::459279;Jelgava;Elgava;Iyelgava;Jelgava;Jelgawa;Mitau;Mitava;Mitawa;Yelgava;Елгава;Елґава; +city::460413;Daugavpils;Borisoglebsk;DGP;Daugavpils;Daugawpils;Daugpelis;Daugpilis;Daugpils;Daugpiļs;Daugpėlis;Duenaburg;Duneburgum;Dvinsk;Dwinsk;Dyneburg;Dzwinow;Dünaburg;Dźwinów;Gorad Daugaupils;Nevgin;Ntaounkavpils;Vaeinaenlinna;Vaeinalinn;Väinalinn;Väinänlinna;daugafupirusu;daugapeupilseu;daugaupilsa;dawghafbyls;dwgapyls;tao ge fu pi er si;Ντάουγκαβπιλς;Νταουγκάβπιλς;Борисоглебск;Горад Даўгаўпілс;Даугавпилс;Даугавпілс;Дауґавпілс;Невгин;דאוגבפילס;דענענבורג;داوغافبيلس;دوگاپیلس;दौगौपिल्स;დაუგავპილსი;ダウガフピルス;陶格夫匹尔斯;다우가프필스;𐌳𐌰𐍅𐌲𐌰𐍅𐍀𐌹𐌻𐍃; +city::81302;Tobruk;Antipyrgos;Antipyrgus;Gorad Tabruk;TOB;Thubruq;Tobroek;Tobrouk;Tobruch;Tobruck;Tobruk;Tobrúk;Tomprouk;Tubruk;Tubrukas;Tubruq;Tóbruch;tbrq;tobruka;toburuku;tu bo lu ge;tubeulukeu;tupruk;twbrwq;Ţubruq;Τομπρούκ;Горад Табрук;Тобрук;טוברוק;طبرق;टोब्रुक;துப்ருக்;ტობრუკი;トブルク;图卜鲁格;투브루크; +city::87205;Darnah;DNF;Daernae;Darnah;Darnis;Derna;Därnä;Dérna;drnh;drnt;דרנה;درنة; +city::88319;Benghazi;BEN;Baengasi;Banghazi;Banghāzī;Bengasi;Bengaze;Bengazi;Bengazis;Bengazy;Benghasi;Benghazi;Benghází;Bengázi;Bengāzī;Benqazi;Berenice;Bingazi;Binghazi;Binghāzī;Bängasi;Bèngasi;Gorad Bengazi;Hesperides;Vilojati Bengazi;ban jia xi;banagazi;ben ka si;benagajhi;beng-gaji;bengaji;benghazi;bnghazy;pankaci;Βεγγάζη;Бенгази;Бенгазі;Вилояти Бенғази;Горад Бенгазі;Բենղազի;בנגאזי;بنغازى;بنغازي;بنغازی;बेनगाझी;ਬਨਗ਼ਾਜ਼ੀ;பங்காசி;เบนกาซี;ბენღაზი;ベンガジ;班加西;벵가지; +city::88903;Al Marj;Al Marj;Al'-Mardzh;El Merj;Maerciaen;Märciän;almrj;Аль-Мардж;المرج;شعبية المرج; +city::89055;Al Bayda';Al Bayda';Al Bayḑā’;Al-Baida;Az Zawiyah al Bayda';Az Zāwiyah al Bayḑā’;Baida;Balagrae;Balis;Bayda;Beda;Beida;El Beida;LAQ;White Monastery;Zauia el Beda;Zawiat al-Baida;Zawiyat al Bayda';Zawiyat el-Beda';Zāwiyat al Bayḑā’;Zāwiyat el-Bēḑā’;البيضاء; +city::89113;Ajdabiya;AEcdabiya;Adjadabia;Adschdabiya;Adzdabija;Adzedabija;Adzhdabija;Adzsdabija;Adzsdábija;Adżdabija;Adždabija;Adžedábíja;Agdabija;Agedabia;Ajdabiya;Ajdabiyah;Ajdābiyah;Ajdābiyā;Aĝdabija;Corniclanum;Ecdebiye;Gorad Adzhdabija;Laecdabiaen;Läcdabiän;QGG;ai ji da bi ye;ajdabia;ajdabya;ajidabiya;ajudabiya;Äcdabiya;Адждабия;Адждабія;Аџдабија;Горад Адждабія;אגדאביא;أجدابيا;اجدابیا;شعبية إجدابيا;აჯდაბია;アジュダービヤー;艾季达比耶;아지다비야; +city::2208485;Zliten;Isliten;Islīten;Izliten;Izlīten;QZL;Subgoli;Zalitan;Ziliten;Zlitan;Zliten;Zlitenas;Zlitán;Zlītan;ci li tan;jeulliten;zlytn;zuriten;Злитен;Злітен;زليتن;زلیتن;ზლიტენი;ズリテン;兹利坦;즐리텐; +city::2208791;Yafran;Gasr Iefren;Iefren;Jafran;Jefren;Yaefraeniaen;Yafran;Yafrin;Yäfräniän;Яфран;شعبية يفرن; +city::2210221;Tarhuna;El-Buerat;El-Buerát;El-Ubberat;El-Ubberát;Gasr Tarhuna;Qasr Tarhunah;Qaşr Tarhūnah;Tarhuna;Tarhunah;Tarhūnah;Tarkhuny;Тархуны; +city::2210247;Tripoli;Aea;Ea;Gorad Trypali;Oea;TIP;Tarables;Tarabulus;Tarabulus al Gharb;Tarabulus el Gharb;Taràbles;Trables;Trablus;Trablûs;Triboli;Tripili;Tripilí;Tripol;Tripole;Tripoli;Tripolis;Tripolo;Tripoly;Tripołi;Tripul;Tripuli;Trypolis;Trìpoli;Trìpuli;Trípol;Trípoli;Trípólí;de li bo li;tarabalasa;tarabulasa;tarabulus;teulipolli;tirippoli;toripori;trabls;trabls lybya;tripoli;trippeali;trypwly;Ţarābulus;Ţarābulus al Gharb;Τρίπολη;Горад Трыпалі;Триполи;Триполі;Տրիպոլի;טריפאלי;טריפולי;ترابلس;ترىپولى;تەرابلوس;طرابلس;طرابلس، لیبیا;طَرَابُلُس;ताराबूलस;त्रिपोली;ত্রিপোলি;ਤਰਾਬਲਸ;திரிப்பொலி;ട്രിപ്പോളി;ตริโปลี;ཐི་རི་ཕོ་ལི;ტრიპოლი;ትሪፖሊ;Ṭrables;トリポリ;的黎波里;트리폴리; +city::2210394;Tagiura;Tagiura;Tajura';Tajurah;Tājūrāh;Tājūrā’; +city::2210554;Sirte;Gasr Zaafran;Gasr Zaafrán;Gorad Sirt;Macomades-Euphranta;Qasr Sirt;Qasr Za`faran;Qaşr Sirt;Qaşr Za‘farān;SRX;Sert;Sirt;Sirta;Sirte;Sirto;Surt;Surtaen;Surtas;Surtiaen;Surtiän;Surtän;Syrta;Syrte;Syrti;Szurt;Vilojati Surt;sileute;sirta;srt;su er te;su te;surti;suruto;syrt;Σύρτη;Вилояти Сурт;Горад Сірт;Сирт;Сурт;סירת;سرت;شعبية سرت;सिर्त;სურთი;スルト;苏尔特;蘇爾特;蘇特;시르테; +city::2212771;Sabratah;Madinat Sabratah;Madīnat Şabrātah;Sabra;Sabrah;Sabratah;Sabratha;Sábra;sbratt;Şabrah;Şabrātah;صبراتة; +city::2212775;Sabha;El-Gedid;El-Gedíd;Fort Leclerc;SEB;Sabha;Sabhah;Sabhā;Saebha;Saebhiaen;Sebha;Sebhah;Säbha;Säbhiän;sabha;sai bo ha;sbha;sbht;سبها;سبهة;سَبها;شعبية سبها;塞卜哈; +city::2214846;Misratah;Al Misratah;MRA;Madinat Misratah;Madīnat Mişrātah;Misrata;Misratah;Misurata;Mişrātah;msrath;msratt;myswrth;Мисурата;מיסורטה;مصراتة;مصراته; +city::2216885;Zawiya;Al Harah;Al Ḩārah;El-Hara;El-Hára;Haraf Az Zawiyah;Haraf Az Zāwīyah;Harat az Zawiyah;Zawiya;Ḩārat az Zāwiyah; +city::2217362;Gharyan;Garian;Gasr Garian;Gasr Gariàn;Gharyan;Gharyān;QGH;ghryan;غريان; +city::2218970;Az Zawiyah;Az Zawiyah;Az Zawiyah al Gherbiyah;Az Zāwiyah al Gherbīyah;Az Zāwīyah;Ez Zauia;Zauia;Zavia;Zawia;alzawyt;الزاوية; +city::2219905;Al Khums;Al Hums;Al Khums;Al Ĥums;Al-Chums;Al-Khums;El Choms;Gorad Al'-Khums;Homs;Humsas;Khoms;Khums;Kums;Labdah;Lebda;alkhms;alkhms lyby;alkhums;el-khumsi;fumusu;hu mu si;humseu;khms lybya;Горад Аль-Хумс;Хомс;Хумс;אל-חומס;الخمس;الخمس، لیبی;الخُمس;خمس، لیبیا;ელ-ხუმსი;フムス;胡姆斯;훔스; +city::2219960;Al Jadid;Al Jadid;Al Jadīd;Al'-Dzhadid;El-Gedid;El-Gedíd;Аль-Джадид; +city::2526488;Youssoufia;Louis Gentil;Youssoufia; +city::2527089;Tiznit;Tiznit;Tiznitas;ti zi ni te;tznyt;Тизнит;تزنيت;تزنیت;提茲尼特; +city::2527645;Tirhanimine;; +city::2528659;Tiflet;; +city::2528910;Tetouan;Gorad Tehtuan;TTU;Tetouan;Tetouán;Tetuan;Tetuanas;Tetuano;Tetuao;Tetuán;Tetuão;Tétouan;de tu an;teto'una;teto~uan;tetuan;ttwan;Τετουάν;Горад Тэтуан;Тетуан;Тетуан қаласы;תטואן;تطوان;तेतोउन;თეტუანი;テトゥアン;得土安;테투안; +city::2529317;Taza;Taza;ta zha;tazh;tazt;Таза;Таза қаласы;תאזה;تازة;تازه;تازہ;塔扎; +city::2529649;Taroudant;Taroudannt;Taroudant;Tarudant;Tarudantas;Tarudante;ta lu dan te;tarwdant;Тарудант;تارودانت;塔魯丹特; +city::2530048;Taourirt;; +city::2530241;Tan-Tan;Gorad Tan-Tan;TTA;Tan-Tan;Tantan;Tantanas;tantan;Горад Тан-Тан;Тан-Тан;طانطان;タンタン; +city::2530335;Tangier;TNG;Tanger;Tangeri;Tangero;Tangier;Tangiers;Tanzher;Tanĝero;Tingis;Tànger;Tánger;Tânger;tan ji ya;tnjt;Тангер;Танжер;طنجة;坦幾亞; +city::2532945;Sidi Slimane;Sidi Slamain;Sidi Sliman;Sidi Slimane;Sidi-Slimane;Сиди-Слимане; +city::2533191;Sidi Qacem;Petitjean;Pettijean;Sidi Kacem;Sidi Qacem;Sidi Qasim;Sīdī Qāsim;sdy qasm;سدي قاسم; +city::2537406;Settat;Azettad;Aẓeṭṭaḍ;Sattat;Setatas;Settat;sai ta te;setateu;sltat;stat;Сеттат;سطات;سلطات;სეტატი;塞塔特;세타트; +city::2537545;Sefrou;Sefrou;Sefru;Sefrú; +city::2537763;Sale;Sala;Sale;Sali;Sallee;Salé;Sla;Slà;sla;Сале;سلا; +city::2537881;Safi;Asafi;Asfi;Gorad Safi;SFI;Safi;Safim;Safí;Sáfí;asfy;asfy mraksh;sa fei;safi;sapi;Горад Сафі;Сафи;Սաֆի;סאפי;آسفي;اسفی;اسفی، مراکش;საფი;ⴰⵙⴼⵉ;サフィ;薩非;사피; +city::2538475;Rabat;Gorad Rabat;RBA;Raba;Rabat;Rabata;Rabatas;Rabato;Rabatum;Rabot;Rabāt;Rabāta;Rampat;Rbat;Rbaṭ;alrbat;la ba;la ba te;labateu;raba t;rabat;rabata;rabato;rabota;rapat;rbat;Ραμπάτ;Горад Рабат;Рабат;Ռաբատ;ראבאט;רבאט;الرباط;رابات;ربات;رباط;ڕەبات;रबाट;रबात;রাবাত;ਰਬਾਤ;ରବୋଟ;ரபாத்;ราบัต;ར་བ་ཐ།;ར་བ་ཐེ།;რაბატი;ራባት;ラバト;剌八;拉巴特;라바트; +city::2539134;Oulad Teima;Oulad Teima;Oulad Teïma;Ouled Teima; +city::2540483;Oujda-Angad;OUD;Oudja;Oudjda;Ouja;Oujda;Oujda-Angad;Ucda;Udzda;Udzhda;Udžda;Ugda;Ujda;Uĝda;Wadzda;Wadżda;Wejda;ujida;wgdh;wjdh;wjdt;wu ji da;Уджда;Уджда қаласы;Уџда;וגדה;وجدة;وجده;وجدہ;ウジダ;乌季达;우지다; +city::2540689;Oued Zem;; +city::2540810;Ouezzane;Ouazzane;Ouezzane;Quazzane;Uazan;Uazán;Wazzan; +city::2540850;Ouarzazat;OZZ;Ouarzazat;Ouarzazate;Ouarzazte;Ouorzazate;Uarzazatas;Varzazat;Warzazat;Warzāzāt;wrzazat;wrzzat;Варзазат;ورزازات;ورززات; +city::2541479;Nador;NDR;Nador;Nadora;Nadoras;Nnadur;Nnaḍur;Nādora;Villa Nador;alnazwr;na zu er;nad xr;nadoleu;nazwr;Надор;الناظور;ناظور;นาดอร์;納祖爾;나도르; +city::2542051;Mohammedia;Al Muhammadiyah;Al Muḩammadīyah;Al-Muhammadijja;Fadalah;Faḑālah;Fdala;Fedala;Fedalah;Fedhala;Mohamedija;Mohamedio;Mohammadia;Mohammedia;Mohammédia;Mokhammedija;Muhammediye;Məhəmmədiyyə;Sedala;alhrawyyn;almhmdyt;mhmdyh;mohamedia;mu han mo di ye;Мохаммедия;المحمدية;الهراويين;محمدیه;محمدیہ;穆罕默迪耶;모하메디아; +city::2542715;Meknes;MEK;Mekinez;Meknes;Meknès;mei ke nei si;mekunesu;mknas;mqns;Мекнес;מקנס;مكناس;مکناس;ⴰⵎⴽⵏⴰⵙ;メクネス;梅克内斯; +city::2542997;Marrakesh;Marakes;Marakesh;Marakeso;Marakeŝo;Marakeš;Maraksh;Marrakech;Marrakes;Marrakesch;Marrakesh;Marrakesz;Marraqueix;Marraquexe;Marràqueix;Marrákes;Marrákeš;Merrakex;Morocco City;RAK;ma la ke shen;marakeshu;mraksh;Маракеш;Марракеш;مراكش;ⴰⵎⵓⵔⴰⴽⵓⵛ;マラケシュ;马拉喀什; +city::2543549;Larache;Al `Ara'ish;Al ‘Arā’īsh;Al-Araisz;El Aaraich;El Araish;Larache;Larasas;Larash;Larasha;Laraso;Laraxe;Laraŝo;Larašas;Larraix;Lavache;araishu;la la shen;la rach;lalasyu;Лараш;Лараша;לראצה;العرائش;عرائش;عرایش;ลารัช;アライシュ;拉臘什;라라슈; +city::2544001;Ksar El Kebir;Alcazarquebir;Alcazarquivir;Alcazquivir;El Ksar El Kbir;El Ksar El Kebir;Ksar El Kebir; +city::2544248;Khouribga;Khouribga;Khouribja;Kouriga;Kourigha;khrybkt;خريبكة; +city::2544333;Khenifra;Chenifra;Chunajfira;Jenifra;Khenifra;Khénifra;Xnifra;hai ni fu la;khnyfrh;khnyfrt;Хенифра;خنيفرة;خنیفره;خنیفرہ;海尼夫拉; +city::2544571;Kenitra;Al Qunaytirah;Al Qunayţirah;Al-Kunajtira;Gorad Kenitra;Kenitra;Kenitro;Khenifra;Kénitra;Lyautey;Mina Hassan Tani;NNA;Port Laoti;Port-Lyautey;Ville de Kenitra;alqnytrt;gai ni te la;keniteula;kenitora;qnytrh;Горад Кенітра;Кенитра;Кенитра қаласы;אל-קניטרה;القنيطرة;قنیطره;კენიტრა;ケニトラ;蓋尼特拉;케니트라; +city::2548489;Guercif;Garsif;Guercif; +city::2548526;Guelmim;GLN;Gelmima;Gelmimas;Gelmīma;Gorad Gulimin;Goulimine;Guelmim;Gulimin;Kulmim;gai lei min;gelmim;gerumin;gulimimi;klmym;Горад Гулімін;Гулимин;Гулимин қаласы;كلميم;کلمیم;გულიმიმი;ゲルミン;蓋勒敏;겔밈; +city::2548830;Al Fqih Ben Calah;Al Fqih Ben Calah;Al Fqih Ben Çalah;Fkih Ben Salah;Fquih Ben Salah; +city::2548885;Fes;FEZ;Fes;Fez;Fès;fas;fezu;Фес;فاس;フェズ; +city::2549263;Essaouira;Amegdul;As Suwayrah;As-Sawira;As-Sawíra;As-Shawirah;Aş Şuwayrah;ESU;Ehs-Suvejra;Ehssuehjra;Es Suira;Es-Suvejra;Esauira;Essaouira;Essauira;Magador;Medino de Esauiro;Medino de Esaŭiro;Mogadar;Mogador;Savira;Suira;Suvayr;Szavira;Szavíra;alswyrt;el-suvaira;es'sa'ura;esau-ila;essau~ira;suo wei la;swyrh;Ес-Сувейра;Эс-Сувейра;Эссуэйра;אסואירה;الصويرة;صویره;صویرہ;एस्साउरा;ელ-სუვაირა;エッサウィラ;索维拉;에사우이라; +city::2550078;El Jadid;Al Jadida;Al Yadida;Al-Djadida;Al-Dzadida;Al-Dżadida;Al-Džadída;Castilho Real;Dzadida;Džadida;Ehl'-Dzhadida;El Jadid;El Jadida;El-Jadida;El-Yadida;Gorad Ehl'-Dzhadzida;Mazagan;Mazagao;Mazaghan;Mazagão;Mazargan;aljdydh;aljdydt;el-jadida;ela jadida;eljadida;jie di dai;xælcha di da;Горад Эль-Джадзіда;Мазарґан;Эль-Джадида;אל-גדידה;الجديدة;الجدیده;الجدیدہ;एल जदिदा;แอลฌาดีดา;ელ-ჯადიდა;アル・ジャディーダ;杰迪代;엘자디다; +city::2553604;Casablanca;Ad Dar al Bayda;Ad Dar al Bayda';Ad Dār al Bayḑā’;Anafi;Anfa;CAS;Casa Branca;Casablanca;Casabranca;Dar-el-Beida;Darul Baidha;Ed Dar el Baida;Ed Dār el Baida;Gorad Kasablanka;Kasablank;Kasablanka;Kasablankae;Kazablanka;Kazablanko;Kazamplan'ka;Tigemmi Tamellalt;White House;dar albydaʾ;ka sa bu lan ka;ka sab l xng ka;kacapilanka;kasabalanka;kasabeullangka;kasablanka;kasaburanka;kazablanka;qzblnqh;Καζαμπλάνκα;Горад Касабланка;Казабланка;Касабланкæ;Касабланка;Կասաբլանկա;קזבלנקה;الدار البيضاء;دار البیضاء;کازابلانکا;کاسابلانکا;कासाब्लांका;কাসাব্লাংকা;ਕਾਸਾਬਲਾਂਕਾ;காசாபிளாங்கா;కాసాబ్లాంకా;ಕಾಸಾಬ್ಲಾಂಕಾ;കാസബ്ലങ്ക;กาซาบล็องกา;ກາຊາບັງກາ;ကာဆာဘလန်ကာမြို့;კასაბლანკა;ⴰⵏⴼⴰ;カサブランカ;卡萨布兰卡;카사블랑카; +city::2555467;Berkane;Berkan;Berkane;Berkawe;Berkán;Birkani;bai er kan;brkan;Беркан;بركان;برکان;拜爾坎; +city::2555745;Beni Mellal;Ayt Mellal;BEM;Bani Mallal;Beni Melal;Beni Melalis;Beni Mellal;Beni-Mellal;Beni-Mellal';Beni-Mellal-Centre;Béni Mellal;Béni-Mellal;bei ni mai la lei;benimellal;bny mlal;bny mll;Бени-Меллаль;בני מלל;بني ملال;بنی ملال;بنی‌ملال;貝尼邁拉勒;베니멜랄; +city::2556272;Berrechid;Barrechid;Berrechid;Bev-rechid; +city::2558470;Khemisset;Al Khmissat;Khemisset;Kimisset; +city::2558545;Al Hoceima;AHU;Al Hoceima;Al Hoceïma;Al Huceima;Al Husaymat;Al Ḩusaymāt;Al-Hoceima;Al-Husajma;Alhacemas;Alhucemas;Villa Alhucemas;Villa Sanjurjo;alhsymt;hsymh;الحسيمة;حسیمه; +city::2561668;Agadir;AGA;Agadair;Agadir;Agadir - akadyr;Agadir - اكادير;Agadir Ighir;Agadiras;Agádír;Ankantir;Irhir;Santa Cruz;a jia di er;agadileu;agadira;agadiru;agadyr;aghadyr;akadyr;Αγκαντίρ;Агадир;Агадір;אגאדיר;أكادير;اغادیر;اگادیر;अगादिर;アガディール;阿加迪尔;아가디르; +city::617239;Tiraspol;Gorad Ciraspal';Tiraspol;Tiraspol';Tiraspole;Tiraspoli;Tiraspolis;Tiraspolo;Tiraspol’;Tiráspol;Tyraspol;di la si bo er;ti ras pxl;tilaseupol;tirasupori;tyrasbwl;tyraspwl;tyrspwl;Горад Ціраспаль;Тираспол;Тирасполь;Тираспољ;טירספול;تيراسبول;تیراسپول;ตีรัสปอล;ტირასპოლი;ティラスポリ;蒂拉斯波尔;티라스폴; +city::617486;Ribnita;Rabnita;Ribnica;Ribnicja;Ribnita;Ribņica;Rybnica;Rybnitsa;Rybniza;Râbniţa;Râbnița;Rîbniţa;Rîbnița;rybnyzh;Рибниця;Рыбница;ריבניצה; +city::618426;Chisinau;Chisinau;Chişinău;Chișinău;KIV;Kischinew;Kiscinev;Kishinef;Kishinehu;Kishinev;Kishiniv;Kishinjov;Kishinëv;Kisinaou;Kisinev;Kisineva;Kisinevo;Kisiniovas;Kisinjev;Kisinov;Kisinyov;Kisyneu;Kiszyniow;Kiszyniów;Kiŝinevo;Kişinev;Kišiniovas;Kišinjev;Kišiněv;Kišiņeva;Kišiňov;cisina'u;cisinau;ji xi ne wu;kishinau;kisineou;kyshynaw;Κισινάου;Κισιναου;Кишинев;Кишинэу;Кишинёв;Кишињев;Кішынёў;Կիշինյով;קישינאו;كيشيناو;चिशिनाउ;चिशिनौ;კიშინიოვი;ኪሺንው;キシナウ;基希讷乌;키시너우; +city::618577;Bender;Bendary;Bender;Bendera;Benderai;Benderi;Bendery;Bəndər;Gorad Bendehr;Tighina;Tigina;bendeleu;benderi;benderu;bin jie li;byndr;byndr maldwwa;tygynh;Бендер;Бендери;Бендеры;Горад Бендэр;Тигина;טיגינה;بيندر;بیندر، مالدووا;ბენდერი;ベンデル;賓傑里;벤데르; +city::618605;Balti;BZY;Balti;Baltsy;Behlc';Bel'cy;Bel'tsy;Belcai;Belci;Beltsi;Bel’tsy;Bielce;Byelcy;Bălţi;Bălți;Municipalite de Balti;Municipalité de Bălţi;blzy;Белци;Бельцы;Бэлць;בלצי; +city::3193044;Podgorica;Birziminium;Gorad Padgoryca;Podgairitse;Podgairítse;Podgorica;Podgoricae;Podgoricja;Podgorico;Podgorika;Podgoritsa;Podgoritza;Podgorytsa;Podgòrica;Podqoritsa;Podugorica;Pontnkoritsa;TGD;Titograd;bo de ge li cha;bwdghwrytsa;padagoritasa;phx dk xrit sa;podagorika;podeugolicha;podogoritsu~a;potkorikka;pwdgwrytsa;pwdgwryzh;pۆdgۆrytsa;Ποντγκόριτσα;Горад Падгорыца;Подгоритса;Подгорицæ;Подгорица;Подгориця;Подъгорица;Պոդգորիցա;פודגוריצה;بودغوريتسا;پودگوریتسا;پوڈگوریکا;پۆدگۆریتسا;पॉडगोरिका;ਪਾਡਗੋਰਿਤਸਾ;பொட்கொரிக்கா;พอดกอรีตซา;პოდგორიცა;ፖድጎሪጻ;ポドゴリツァ;波德戈里察;포드고리차; +city::3194494;Niksic;Nikshic;Nikshich;Nikshik;Nikshiqi;Niksicius;Nikšičius;ni ke xi qi;nigsichi;nikh sikh;nikushitchi;nykshych;Никшич;Никшић;Никшиќ;نیکشیچ;นิคซิค;ニクシッチ;尼克希奇;닉시치; +city::1053384;Toamasina;TMM;Tamatave;Toamasina;Tuamasina;toamasina;to~uamashina;tu a ma xi na;twamasyna;Τοαμασίνα;Тоамасина;Туамасина;Туамасіна;טומאסינה;تواماسینا;ტუამასინა;トゥアマシナ;图阿马西纳;토아마시나; +city::1055429;Toliara;TLE;Toliara;Toliary;Tulear;Tuliara;Tullear;Tuléar;to li xa ra;tolliala;to~uriara;tu li ya la;Τολιάρα;Тулиара;Туліара;טוליארה;โตลีอารา;ტულიარა;トゥリアラ;圖利亞拉;톨리아라; +city::1062663;Mahajanga;Gorad Makhadzanga;MJN;Machatzan'nka;Mahadzanga;Mahajanga;Majunga;Makhadzanga;Makhadzhanga;ma ha zan jia;mahajang-ga;mahajanga;majnka;Μαχατζάνγκα;Горад Махадзанга;Махаджанга;Махадзанга;מאהאזאנגה;ماجنكا;マハジャンガ;马哈赞加;마하장가; +city::1064890;Fianarantsoa;Fianarancua;Fianarantsoa;WFI;fei ya na lan chu a;fianarantsu~oa;fyanarantswa;pianalanchoa;pianarantsua;Φιαναραντσόα;Фианаранцуа;Фіанаранцуа;פיאנארנצוה;فیانارانتسوا;ფიანარანცუა;フィアナランツォア;菲亞納蘭楚阿;피아나란초아; +city::1069129;Antsiranana;Anceranana;Antseranana;Antsirana;Antsiranana;Antsirane;Antsiran̈ana;DIE;Diego Soarez;Diego-Suarez;Diégo-Suarez;Анцеранана; +city::1069166;Antsirabe;ATJ;Ancirabe;Ancirabė;Antisrabe;Antsirabe;Sirabe;an qi la bei;anchilabe;antsu~irabe;antsyraby;Анцирабе;אנטסיראבה;أنتسيرابي;アンツィラベ;安齐拉贝;안치라베; +city::1070661;Antanifotsy;; +city::1070940;Antananarivo;Antananarifo;Antananarivo;Antananarivu;Antananariwo;Antananaryvas;Antananarywa;Antananarívó;Gorad Antananaryvu;TNR;Tana;Tananaribe;Tananarive;an ta na na li fu;anrananarivea;antananalibo;antananaribo;antananarivho;antananarivo;antananaryfw;antananaryww;antʼananarivu;atananarivo;ta na na li fu;xan ta nana ri wo;Ανταναναρίβο;Ταναναρίβη;Антананариво;Антананариву;Антананаріву;Горад Антананарыву;Тананариве;Անտանանարիվու;אנטאנאנאריווא;אנטננריבו;آنتاناناریوو;أنتاناناريفو;ئانتاناناریڤۆ;انٹاناناریوو;اینٹانانیریو;अंतानानारिव्हो;अन्टाननरीवो;ਅੰਤਾਨਾਨਾਰੀਵੋ;அண்டனானரீவோ;ആന്റനനറീവൊ;อันตานานาริโว;ཨེན་ཊ་ན་ན་རི་བོ།;ანტანანარივუ;አንታናናሪቮ;アンタナナリボ;塔那那利佛;安塔那那利佛;안타나나리보; +city::1078446;Amparafaravola;Amparafarovola;Amparofaravola; +city::1079048;Ambovombe;; +city::1082243;Ambilobe;AMB; +city::785058;Veles;Koprulu;Köprülü;Titov Veles;Veles;Velesa;Velesas;Velesi;Velessa;Velesu;Vélès;Weles;Wełes;belleseu;fylys;velesi;vu~eresu;wei lai si;wls;Βελεσά;Велес;Вєлєсъ;Վելես;ולס;فيليس;ولس;ველესი;ヴェレス;韋萊斯;벨레스; +city::785082;Tetovo;Gorad Cetava;Kalkandelen;Qalqan Delen;Tetobo;Tetova;Tetovas;Tetovo;Tetowo;tai tuo wo;tetobo;tetovu~o;ttwbw;ttwfw;tytwfw;Τέτοβο;Горад Цетава;Тетово;Хътѣтово;Տետովո;טטובו;تتوفو;تيتوفو;ტეტოვო;テトヴォ;泰托沃;테토보; +city::785842;Skopje;Escopia;Escópia;Gorad Skop'e;SKP;Scopia;Scupi;Shkup;Shkupi;Skop'e;Skope;Skopeia;Skopia;Skopie;Skopiye;Skopje;Skopjo;Skopjė;Skople;Skoplie;Skoplje;Skopye;Szkopje;UEskuep;Uskub;Usküb;askwpyh;s ko peiy;sakopi'e;seukope;si ke pu li;skopje;skopye;skwbyh;sqwpyh;sukopie;Üsküp;Σκόπια;Горад Скоп'е;Скоп'є;Скопе;Скопие;Скопье;Скопје;Скопље;Съкопиѥ;Սկոպյե;סקאפיע;סקופיה;اسکوپیه;اسکوپیہ;سكوبيه;سكوپليې;سکوپ جے;स्कोप्ये;ਸਕੋਪੀਏ;ஸ்கோப்ஜே;สโกเปีย;སི་ཀོཔ་ཇི།;სკოპიე;ስኮፕዬ;スコピエ;斯科普里;스코페; +city::786735;Prilep;Perlepe;Perlepes;Perlepé;Pirlepe;Prilep;Prilepa;Prilepas;pirlepe;Прилеп; +city::787487;Ohrid;Akhris;Gorad Okhryd;OHD;Ochrid;Ochrida;Ochridas;Ochryda;Ocrida;Ohri;Ohrid;Ohrida;Okhri;Okhrid;Okhridu;Oxrid;ao he li de;awhryd;awkhryd;ofurido;oheulideu;ohridi;xo kh rid;Οχρίδα;Горад Охрыд;Охрид;Охрїдъ;Օխրիդ;אוחריד;آکریڈا;أوخريد;اوهرید;โอครีด;ოჰრიდი;オフリド;奥赫里德;오흐리드; +city::788886;Kumanovo;Gorad Kumanava;Koumanovo;Kumanova;Kumanovas;Kumanove;Kumanovo;Kumanovë;Kumanowo;ku ma nuo wo;kumanobo;kumanovu~o;kwmanwfw;Κουμάνοβο;Горад Куманава;Коуманово;Куманово;Կումանովո;קומאנובו;كومانوفو;کومانوفو;კუმანოვო;クマノヴォ;库马诺沃;쿠마노보; +city::790295;Gostivar;Gostivar;Gostivar';Gostivara;Gostivaras;Gostivari;Gostiwar;Gosztivar;Kostovon;Nkostivar;ge si di wa er;ghwstyfar;goseutibaleu;gosutivu~aru;gshtyfar;gwstybr;Γκόστιβαρ;Гостивар;Гостивар҄ь;Գոստիվար;גוסטיבר;غوستيفار;گشتیفار;გოსტივარი;ゴスティヴァル;戈斯蒂瓦尔;고스티바르; +city::792578;Bitola;Bitol;Bitola;Bitolj;Bitolja;Bitolya;Manastir;Manastiri;Manastır;Monasterium;Monasteron;Monastir;Monastiri;Monastirion;Obitѣl';QBI;bi tuo la;bitolla;bitora;bytwla;bytwlh;Μοναστήρι;Μοναστήριον;Μπίτολα;Битола;Битоля;Битољ;Бітола;Манастир;Обитѣль;ביטולה;بيتولا;بیتولا;ビトラ;比托拉;비톨라; +city::833262;Cair;Cair;Chair;Čair;Чаир; +city::863675;Kisela Voda;Kisela Voda;Кисела Вода; +city::2451185;Sikasso;KSS;Sikasas;Sikaso;Sikasso;shikaso;sikaso;sykasw;xi ka suo;Σικασσό;Сикасо;Сікасо;سيكاسو;سیکاسو;シカソ;錫卡索;시카소; +city::2451478;Segou;Segi;Segou;Segu;Segú;Senkou;Ségou;sai gu;segu;sgw;syghw;Σεγκού;Сеги;Сегу;سيغو;سگو;セグー;塞古;세구; +city::2453348;Mopti;MZI;Mopti;Moptis;mo pu ti;mobti;moputi;mwbty;mwpty;Μοπτί;Мопти;Мопті;موبتي;موپتی;موپٹی;モプティ;莫普提;몹티; +city::2453662;Markala;Markala; +city::2454268;Koutiala;KTX;Koutiala;Kutiala;ku jia la;Кутиала;庫佳拉; +city::2455518;Kayes;Gorad Kaes;KYS;Kaes;Kagies;Kajes;Kajesas;Kayes;Kayi;ka yi;kai;kays;keseu;kyz;Καγιές;Горад Каес;Каес;Кайес;Каєс;كايس;کایس;کیز;კაესი;カイ;卡伊;케스; +city::2457163;Gao;GAQ;Gao;Nkao;gao;gaw;gayw;jaw;jia ao;ka xo;Γκάο;Гао;Ґао;גאו;جاو;گائو;گاو;กาโอ;ガオ;加奥;가오; +city::2460596;Bamako;BKO;Bamaco - Bamako;Bamakas;Bamako;Bamaku;Bamakó;Bamakɔ;Bammaco;Bammako;Mpamako;ba ma ke;bamako;bamakw;bmqw;Μπαμάκο;Бамако;Բամակո;במקו;باماكو;باماکو;ባማኮ;バマコ;巴馬科;바마코; +city::1285173;Yenangyaung;Yaynangyoung;Yenangyaung;Yenangyoung; +city::1285899;Yamethin;Yamethin;Yamethinn; +city::1290596;Taungoo;Taung-ngu;Taungngu;Taungoo;Taungu;Taungû;Toungoo;taung-u;txng xu;Таунгу;ตองอู;တောင်ငူမြို့;타웅우; +city::1291193;Thongwa;Thon-Khwa;Thongwa; +city::1292037;Thayetmyo;Thayetmo;Thayetmyo;Thyatmyo; +city::1292288;Thaton;Tha-tun;Thadon;Thadôn;Thaton; +city::1292313;Tharyarwady;Tharrawaddy;Tharyarwady;Thayawadi; +city::1293625;Dawei;Davejus;Davėjus;Dawei;TVY;Tavoj;Tavoy;Tawe;Tawè;dau~ei;dawei;dawy;dawyy;thway;tu wa;Тавой;داوئی;داوی;ทวาย;ထားဝယ်မြို့;ダウェイ;土瓦;다웨이; +city::1293960;Taunggyi;Taundzhi;Taundzi;Taundzis;Taundžis;Taunggi Mong;Taunggyi;dong zhi;taungji;taunji;tawngyy;txng yi;Таунджи;Таунџи;تاونگئی;ตองยี;တောင်ကြီးမြို့;タウンジー;東枝;타웅지; +city::1294041;Taungdwingyi;Taungdwingyi; +city::1295301;Tachilek;THL;Tachajlejk;Tachileik;Tachilek;Tha Chaleak;Tha Chi Lek;Wan Ta-hki-lek;Wān Ta-hki-lēk;Тачайлейк; +city::1295395;Syriam;; +city::1295765;Sittwe;AKY;Ak'jab;Akjab;Akyab;Sittwe;Situe;Situeh;Sitve;Sitvė;shi dui;shittou~e;sitave;siteuwe;wytwy;Акьяб;Ситуэ;Сітуе;ویتوی;सितवे;စစ်တွေမြို့;シットウェ;实兑;시트웨; +city::1296736;Shwebo;Shwebo; +city::1298482;Sagaing;Sagajn;Sagang;Sitkaing;Сагайн; +city::1298824;Yangon;Dagon;Gian'nkon;Gorad Jangon;Jangon;Jangon khot;Jangona;Jangono;Jangun;Jangún;Ngiong-kong;Ngióng-kông;RGN;Rangon;Rangoon;Rangoun;Rangum;Rangun;Rangunas;Rangún;Rangūnas;Yangjgvangh;Yangon;Yangôn;Yanqon;iangoni;iyanguna;raguna;ranguna;rngwn;yang guang;yang-gon;yanghwn;yangkung;yangon;yanguna;yangwn;yankon;Ýangon;Γιανγκόν;Јангон;Горад Янгон;Рангун;Янгон;Янгон хот;Յանգոն;יאנגון;رنگون;يانغون;یانگون;यांगून;रङ्गुन;रङ्गून;ইয়াংগুন;ਰੰਗੂਨ;யங்கோன்;యాంగోన్;യംഗോൺ;ย่างกุ้ง;ཡང་ཀོང་།;ရန်ကုန်မြို့;იანგონი;ያንጎን;យ៉ាំងហ្គូន;ヤンゴン;仰光;양곤; +city::1298987;Pyinmana;P'inmana;Pinmana;Pjinmana;Pyinmana;Pyinmana Naypyidaw;Pyinmank;Rangun;bin ma na;nai bi duo;p yin ma na;pinmana;Пьинмана;Пїнмана;Рангун;ปยินมะนา;ပျဉ်းမနားမြို့;ピンマナ;奈比多;彬馬那;핀마나; +city::1299154;Pyay;PRU;Prome;Pyay;Pye;Pyei;Pyit;Проме; +city::1299237;Pyapon;P'japon;Pyabon;Pyabôn;Pyapon;Pyapun;Пьяпон; +city::1300466;Bago;Bagas;Bago;Begu;Pegou;Pegu;Pégou;bago;bagw brma;bagw myanmar;bo gu;peku;pha kho;Пегу;باگو، برما;باگو، میانمار;பெகு;พะโค;ပဲခူးမြို့;バゴー;勃固;바고; +city::1302439;Pakokku;PKK;Pagukku;Pakkoku;Pakokku;Пакокку; +city::1303406;Nyaunglebin;; +city::1307741;Myitkyina;M'ichina;MYT;Michina;Mjicina;Mjičina;Myitkyin;Myitkyina;Myitkyinā;mi zhi na;michina;mit ci na;mitchina;myytkyyna;Мичина;Мьичина;Мїчина;میئتکیئنا;มิตจีนา;မြစ်ကြီးနားမြို့;ミッチーナー;密支那;미치나; +city::1307835;Myingyan;Myingan;Myingyan; +city::1308415;Mudon;Mudon; +city::1308465;Mawlamyine;MNU;Maulamiain;Mawlamyaing;Mawlamyine;Molam'jajn;Molamjainas;Molamjajn;Molamyaing;Moulamjin;Moulmein;Mulmejn;mao dan mian;mawlamyayn;mawlamyyn;meaa la leing;moramyain;moulmein;Моламьяйн;Моламяйн;Моуламјин;ماولامیئن;ماولامیاین;เมาะลำเลิง;မောလမြင;မော်လမြိုင်;モーラミャイン;毛淡棉;모울메인; +city::1308522;Monywa;Moniva;Monywa;Mounujua;Munywa;NYW;meng yu wa;mon'yuwa;moniwa;mony wa;mwnywa;Моунъюа;مونیوا;โมนยวา;မုံရွာ;モンユワ;蒙育瓦;모니와; +city::1308937;Mogok;Magok;Mogok;Могок; +city::1309289;Minbu;; +city::1309611;Myeik;MGZ;Mergui;Myeik; +city::1309793;Meiktila;Meiktila;Mejtkhila;Miktila;mea thi la;meikeutilla;meittira;myyktyla;Мейтхила;میئکتیلا;เมะทีลา;မိတ္ထီလာမြို့;メイッティーラ;메이크틸라; +city::1309937;Pyin Oo Lwin;Maymo;Maymyo;Meimyu;Memyo;Pyn U Lwin; +city::1310362;Maubin;Ma-oo-beng;Manbin;Maubin; +city::1311874;Mandalay;Gorad Mandalaj;MDL;Mandalaj;Mandalaja;Mandalajo;Mandalajus;Mandalay;Mandalay piirkond;Mandale;Mandalej;man de lei;mandalay;mandale;mandallei;mandaly;mandare;mantalai;manth a ley;Горад Мандалай;Мандалай;Мандалеј;ماندالاي;ماندالی;ماندالے;मांडले;माण्डले;மண்டலை;మాండలే;มัณฑะเลย์;မန္တလေးမြို့;マンダレー;曼德勒;만달레이; +city::1312609;Magway;MWQ;Magueh;Magway;Magwe;Магуэ; +city::1314759;Lashio;LSH;Lasha;Lashio;Lasho;Lasijas;Lašijas;la qu;lashyw;lasio;rasho;Лаша;Лашо;لاشیو;လားရှိုးမြို့;ラーショー;臘戌;라시오; +city::1316703;Kyaukse;Kyaukse; +city::1317397;Kyaiklat;Keiklat;Kyaiklat; +city::1320944;Kanbe;Kanbe;Kanhe;Канбе; +city::1325211;Hinthada;HEB;Henzada;Hintada;Hinthada; +city::1327659;Chauk;Chauk;Chouk;Чаук; +city::1328121;Bogale;Bogale; +city::1328421;Pathein;BSX;Basejn;Bassein;Bassejn;Pantejn;Patejn;Pathein;Patheinas;Puthein;bo sheng;patein;patyn;Бассейн;Пантейн;Патейн;پاتھین;پاتین;ပုသိမ်မြို့;パテイン;勃生;파테인; +city::1329239;Myaydo;Allanmyo;Aunglan;Aunglanmyo;Myaydo; +city::6611854;Nay Pyi Taw;Kyatpyay;Kyetpyay;NYT;Naipidau;Nay Pyi Taw;Naypyidaw;Naypyitaw;Ne Pyi Daw;Pyinmana;naepido;nepido;내피도;네피도; +city::2028462;Ulan Bator;Da Huryee;Da Hüryee;Da Khure;Da-Kure;K'u-lun;Orgoo;Oulan Mpator;Oulan-Bator;Ourga;ULN;Ula Bator;Ulaan Baatar;Ulaan Baatar Hoto;Ulaanbaatar;Ulaanbaataro;Ulaanbaator;Ulaanbaator hota;Ulaanbaatur;Ulan Bator;Ulan Bator Hoto;Ulan Batoras;Ulan Batur;Ulan-Bator;Ulan-Bator Khoto;Ulanbatar;Ulanbator;Ulanbátar;Ulán Bator;Ulán Bátor;Ulánbátar;Ulánbátor;Ulã Bator;Uranbatoru;Urga;Uruga;Ułan Bator;awlan batwr;ulanabatara;ullanbatoleu;uranbatoru;wu lan ba tuo;xulanbatxr;Örgöö;Úlan Bator;Ουλάν Μπατόρ;Улаанбаатар;Улан Батор;Улан-Батор;אולן בטור;أولان باتور;اولان‌باتور;उलानबातर;อูลานบาตอร์;ཝུ་ལན་བ་ཐུར;ኡላዓን ባዓታር;ウランバートル;乌兰巴托;울란바토르; +city::2031405;Erdenet;Ehrdehneht;Ehrdehneht khot;Erdenet;Erdenetas;Gorad Ehrdehneht;ardenaita;ardnt;e er deng te;eleudeneteu;erudeneto;Горад Эрдэнэт;Ерденет;Эрдэнэт;Эрдэнэт хот;ארדנט;اردنت;अर्देनैट;エルデネト;额尔登特;에르데네트; +city::2031964;Darhan;Darchan;Darhan;Darkhan;da er han;Дархан;דרחאן;达尔汗; +city::1821274;Macau;Aomen;Aomin';Au-mun;Aumwnz;Aumyn;Cidade de Macau;Cidade do Santo Nome de Deus de Macau;MFM;Ma Cao;Macao;Macau;Macaum;Makaa;Makaaw;Makao;Makaou;Makau;Makaw;Makawo;Makaó;Makee;Makèë;Màkáù;O-muong;ao men;maka;maka'o;maka'u;makao;makavu;makaw;makayw;makkavu;mkaw;Àu-mûn;Ó̤-muòng;Μακάου;Аоминь;Аумын;Макаа;Макао;מקאו;ئاۋمېن;ماكاو;ماکائو;مکاؤ;މަކާއޫ;मकाउ;मकाओ;মাকাউ;ਮਕਾਉ;મકાઉ;மக்காவு;మకావు;ಮಕಾವು;മകൗ;เขตบริหารพิเศษมาเก๊า;မကာအို;მაკაო;マカオ;澳門;澳门;마카오; +city::3570675;Fort-de-France;Arx Gallica;FDF;Fod Fwans;For d'o Frans;For de Frans;For de Fransas;For-de-Frans;For-nte-Frans;Fordefransa;Fort Royal;Fort Royale;Fort-de-France;Fort-de-Frans;Fòd Fwans;Fôrt-de-France;Gorad Fort-deh-Frans;Le Fort-de-France;f xr-dex-fr xngs;fa lan xi bao;foru=do=furansu;fwr dw frans;fwr-dw-frans;phorta-de-phransa;pirancuk kottai;poleudeupeulangseu;por-de-pransi;Φορ-ντε-Φρανς;Горад Форт-дэ-Франс;Фор де Франс;Фор дьо Франс;Фор-де-Франс;Форт-де-Франс;Ֆոր դե Ֆրանս;פור-דה-פראנס;فور دو فرانس;فور-دو-فرانس;فورٹ ڈی فرانس;फोर्ट-दे-फ्रान्स;பிரான்சுக் கோட்டை;ฟอร์-เดอ-ฟร็องส์;ფორ-დე-ფრანსი;フォール=ド=フランス;法兰西堡;포르드프랑스; +city::2377450;Nouakchott;Gorad Nuakshot;NKC;Naevakjut;Nawakshot;Nawakszut;Nouakchat;Nouakchot;Nouakchott;Nouaksot;Nouaxot;Nuakchot;Nuakshot;Nuaksjott;Nuaksot;Nuaksota;Nuaksotas;Nuaksoto;Nuaksott;Nuakxot;Nuakŝoto;Nuakşot;Nuakšot;Nuakšota;Nuakšotas;Nuakšott;Nwaqcut;Nwaqcuṭ;Nävakjut;Núaksjott;huo suo;navakasuta;nu wa ke xiao te;nu'akacota;nu'oyakasuta;nuagsyoteu;nuakushotto;nuvakcut;nwakshwt;Νουακσότ;Νουαξότ;Горад Нуакшот;Нуакшот;Նուակշոտ;נואקשוט;نواكشوط;نواکشوت;نواکشوط;نواکشۆت;نوواکوٹ;नवाकसुत;নুওয়াকশুত;ਨੁਆਕਚੋਤ;நுவாக்சூத்;นูแอกชอต;ནའུ་ཀ་ཅོ་ཊི།;ნუაქშოტი;ኑዋክሾት;ヌアクショット;努瓦克肖特;或索;누악쇼트; +city::2377457;Nouadhibou;NDB;Nawazibu;Nouadhibou;Nouâdhibou;Nuadibu;Nuadibú;Port Etienne;Port Ettienne;Port-Etienne;Port-Étienne;nwadhybw;Нуадибу;נואדיבו;نواذيبو; +city::2377539;Nema;An Na`mah;An Na‘mah;EMN;En Na`ma;En Na‘ma;Nema;Néma;النعمة; +city::2378736;Kaedi;KED;Kaedi;Kaedis;Kaehdi;Kajhajdi;Kayhaydi;Kayhaydī;Kaédi;ka ai di;ka-edi;kaedi;kyhydy;Каэди;Каэди қаласы;קאדי;كيهيدي;کیھیدی;カエディ;卡埃迪;카에디; +city::933945;Vacoas;Phoenix;Vacoa;Vacoas;Vacoas-Phoenix; +city::934131;Quatre Bornes;Quatre Bornes; +city::934154;Port Louis;Bort Lois;Gorad Port-Lui;Po-Loui;Por Loui;Por-Loui;Port Lois;Port Louis;Port Louis Town;Port Lui;Port Luis;Port Luisas;Port Luiz;Port-Louis;Port-Lui;Port-Luiso;Port-lui;Portlui;Portluī;Portus Ludovici;Puerto Louis;Pò-Loui;bwr lwys;lu yi gang;phxrt hluys;porata lu'i;port luyis;porta lu'i;porta lu'isa;poteulu-iseu;potoruisu;pwr lwʼy;Πορ Λουί;Πορ-Λουί;Горад Порт-Луі;Порт Луи;Порт Луис;Порт-Луи;Порт-Луї;Պորտ Լուի;פור לואי;بور لويس;پورت‌لوئیس;پورٹ لوئس;پورٹ لوئی;پۆرت لویس;पोर्ट लुई;पोर्ट लुईस;পোর্ট লুইস;ਪੋਰਟ ਲੂਈ;ପୋର୍ଟ ଲୁଇସ;போர்ட் லூயிஸ்;പോർട്ട് ലൂയിസ്;พอร์ตหลุยส์;ལོ་ཡི་སི་གྲུ་ཁ།;პორტ-ლუი;ፖርት ሉዊስ;ポートルイス;路易港;포트루이스; +city::934570;Curepipe;Curepipe;K'jurpajp;Kiurpipas;Kjurpajp;Kjurpip;ju er pi pu;kulepipe;kur pip;kwrybyb;kyurupippu;Кьюрпайп;Кюрпип;Кјурпајп;كوريبيب;کیورپیپہ;กูร์ปีป;キュールピップ;居爾皮普;쿠레피페; +city::934765;Beau Bassin;Beau Bassin; +city::1282027;Male;MLE;Maale;Male;Malé;Malė;ma lei;ma lu;male;malle;mare;Μαλέ;Мале;מאלה;މާލެ;माले;মালে;மாலே;มาเล;มาเล่;マレ;瑪律;馬累;말레; +city::923295;Zomba;Zomba;jomba;song ba;zomba;zonba;zwmba malawy;Зомба;زومبا، مالاوی;ზომბა;ゾンバ;松巴;좀바; +city::925475;Mzuzu;Kaningina;Mzouzou;Mzuzo;Mzuzu;ZZU;eumjuju;mu zu zu;muzuzu;mzwzw;Μζούζου;Мзузу;مزوزو;ムズズ;姆祖祖;음주주; +city::927967;Lilongwe;Gorad Lilongveh;LLW;Lilon'nkoue;Lilonguee;Lilongve;Lilongvo;Lilongvė;Lilongwe;Lilongüe;Lilonhue;Lilonqve;Lílongve;li lang wei;li long gui;li lxng we;lilamgve;lilangave;lillong-gwe;lilongve;lilonve;lylwnghwy;lylwngwh;lylwngwwh;rironguu~e;Λιλόνγκουε;Горад Лілонгвэ;Лилонгве;Лілонгве;Լիլոնգվե;לילאנגווע;לילונגווה;ليلونغوي;لیلونگوه;لیلونگوے;لیلۆنگوێ;لیلیونگوے;लिलाँग्वे;ਲਿਲਾਂਗਵੇ;லிலொங்வே;ลิลองเว;ལི་ལོང་ཀུའེ།;ლილონგვე;ሊሎንጔ;リロングウェ;利隆圭;里朗威;릴롱궤; +city::931755;Blantyre;BLZ;Blantair;Blantairas;Blantajer;Blantajr;Blantajur;Blantire;Blantyre;Blantyre-Limbe;Gorad Blantajr;Kapeni;beullaentaieo;blamtayara;blantayr;blantayr malawy;blantyyr;blntyyr;bu lan tai er;burantaiya;Μπλαντάιρ;Блантайр;Блантайър;Блантајер;Горад Блантайр;בלנטייר;بلانتاير;بلانتایر، مالاوی;بلانتیئر;ब्लँटायर;ブランタイヤ;布兰太尔;블랜타이어; +city::3513966;Zumpango;NLU;Zumpango;Zumpango de Ocampo;Zumpango-de-Okampo;Зумпанго-де-Окампо; +city::3514450;Xochimilco;Delegacion Xochimilco;Delegación Xochimilco;Xochimilco; +city::3514519;San Miguel Xico Viejo;San Miguel Xico;San Miguel Xico Viejo;Xico; +city::3514670;Villahermosa;Cualnezcaltepec;VSA;Vil'jaehrmosa;Vilaermosa;Viljaermosa;Viljahermosa;Villa Hermosa;Villahermosa;bi ya ai er mo sa;biya-eleumosa;biyaerumosa;byayrmwsa;fylahyrmwsa;viliaermosa;wylahrmsa tabaskw;Вильяэрмоса;Виляермоса;Виљаермоса;וייארמוסה;بیائرموسا;فيلاهيرموسا;ویلاهرمسا، تاباسکو;ვილიაერმოსა;ビヤエルモサ;比亚埃尔莫萨;비야에르모사; +city::3514674;Gustavo Adolfo Madero;Delegacion Gustavo A. Madero;Delegación Gustavo A. Madero;Guadalupe;Guadalupe Hidalgo;Gustavo A. Madero;Gustavo Adolfo Madero;Villa Gustavo A. Madero;Villa Madero;Villa de Guadalupe;Villa de Guadalupe Hidalgo; +city::3514783;Veracruz;Chalchiuhcuehcan;Chalchiuhcuehcān;Heroica Veracruz;VER;Veracruz;Veracruz Llave;Veracruz i Veracruz;Verakrus;Verakrusas;Verakruz;belakeuluseu;berakrutha;berakurusu;verakurucu;wei la ke lu si;wer a kru s;wrakrws;Веракруз;Веракрус;وراکروس;बेराक्रुथ;வேராகுரூசு;เวรากรุซ;ვერაკრუსი;ベラクルス;韦拉克鲁斯;베라크루스; +city::3515001;Tuxtla;Gutierrez;TGZ;Tochtlan Gutierrez;Tochtlan Gutiérrez;Touxtla Nkoutierres;Tukstla Gutijerez;Tustla Gutieres;Tustla Gutjeresas;Tustla-Gut'erres;Tuxtla;Tuxtla Gtz;Tuxtla Gtz.;Tuxtla Gutierres;Tuxtla Gutierrez;Tuxtla Gutiérrez;tu si te la gu tie lei si;tugseuteullagutieleseu;tus tla ku ti xerres;twksla gwtyrs. chyapas;twkstla ghwtyryz;twstla gywtyrs;twstlh gwtyyrs;Τούξτλα Γκουτιέρρες;Тукстла Гутијерез;Тустла Гутиерес;Тустла-Гутьеррес;Тустла-Ґутьєррес;טוסטלה גוטיירס;توستلا گیوتیرس;توكستلا غوتيريز;توکسلا گوتیرس٬ چیاپاس;ตุซตลากูตีเอร์เรซ;ტუსტლა-გუტიერესი;トゥストラ・グティエレス;图斯特拉古铁雷斯;툭스틀라구티에레스; +city::3515011;Tuxpam de Rodriguez Cano;Tuxpam;Tuxpam de Rodriguez Cano;Tuxpan;Tuxpan de Rodriguez Cano;Tuxpan de Rodríguez Cano;Túxpam;Túxpam de Rodríguez Cano; +city::3515044;Tultepec;San Pedro de Tultepec;Tultepec; +city::3515062;Tulancingo;Tulancingo;Tulancingo de Bravo; +city::3515302;Toluca;TLC;Tollohcan;Tolouka;Toluca;Toluca Lerdoensis;Toluca de Lerdo;Toluka;Toluka-de-Lerdo;Tōllohcān;to luk a;tolluka;toluka;toruka;tuo lu ka;twlwka;Τολούκα;Толука;Толука-де-Лердо;تولوکا;तोलुका;โตลูกา;ტოლუკა;トルーカ;托卢卡;톨루카; +city::3515428;Tlalpan;Delegacion Tlalpan;Delegación Tlalpan;Tlalpam;Tlalpan; +city::3515431;Tlalnepantla;Tlalnepantla;Tlalnepantla de Comonfort;Tlalnepantla de Galeana;Tlalnepantla de baz;Tlanepantla de baz;Тлалнепантла; +city::3515463;Tlahuac;Delegacion Tlahuac;Delegación Tláhuac;Tlahuac;Tláhuac; +city::3515696;Teziutlan;Teziutlan;Teziutlán; +city::3515715;Texcoco;Texcoco;Texcoco de Mora;Tezcoco;tesukoko;テスココ; +city::3515807;Cuautitlan Izcalli;Cuautitlan Izcalli;Cuautitlán Izcalli;Izcalli;San Francisco Tepoiaco;Tepujaco; +city::3515942;Teoloyucan;Teoloyucan; +city::3516035;Temixco;Temisco;Temisko;Temixco;te mi si ke;tmykskw;Темиско;تمیکسکو;特米斯科; +city::3516053;Temapache;Temapache; +city::3516109;Tehuacan;TCN;Tehuacan;Tehuacán;Tehuahcan;Teuakan;Tevakan;thwakan;ti wa kan;Тевакан;Теуакан;تهواکان;تیہواکان;ტეუაკანი;提瓦坎; +city::3516225;Taxco de Alarcon;Tasco;Tasko-de-Alarkon;Taxco;Taxco de Alarcon;Taxco de Alarcón;Таско-де-Аларкон; +city::3516266;Tapachula;TAP;Tapachula;Tapachule;ta pa qiu la;tapachwla;Тапачула;Тапачуле;تاپاچولا;塔帕丘拉; +city::3516271;Tantoyuca;Tantoyuca;carretera platon sanchez; +city::3516355;Tampico;Gorad Tampika;TAM;Tampico;Tampikas;Tampiko;tambykw;tampiko;tampykw;tan pi ke;tanpiko;tempiko;Горад Тампіка;Тампико;تامبيكو;تامپیکو;टॅम्पिको;タンピコ;坦皮科;탐피코; +city::3517270;Santa Maria Chimalhuacan;Chimalhuacan;Chimalhuacán;Santa Maria Chimalhuacan;Santa María Chimalhuacán; +city::3517517;Santa Cruz Xoxocotlan;Santa Cruz;Santa Cruz Xoxocotlan;Santa Cruz Xoxocotlán;Xoxocotlan; +city::3518135;San Pablo de las Salinas;Salinas;San Pablo;San Pablo de Salinas;San Pablo de las Salinas; +city::3518221;San Miguel Zinacantepec;San Miguel Zicantepec;San Miguel Zinacantepec;Zinacantepec;Zinacatepec; +city::3518387;San Mateo Atenco;Atenco;San Mateo;San Mateo Atenco; +city::3518407;San Martin Texmelucan de Labastida;San Martin;San Martin Texmelucan;San Martin Texmelucan de Labastida;San Martín;San Martín Texmelucan;San Martín Texmelucan de Labastida;Texmelucan; +city::3518692;San Juan del Rio;San Juan del Rio;San Juan del Río; +city::3518723;Tuxtepec;San Juan Bautista;San Juan Bautista Tuxtepec;San Juan Bautista Tuxtla;Tuxtepec; +city::3519537;San Cristobal de las Casas;Ciudad Las Casas;Ciudad de las Casas;SZT;San Cristobal;San Cristobal de Las Casas;San Cristobal de las Casas;San Cristobal las Casas;San Cristóbal de Las Casas;San Cristóbal de las Casas;San Cristóbal las Casas; +city::3519907;San Andres Tuxtla;San Andres Tuxtla;Tuxtla; +city::3520064;Salina Cruz;SCX;Salina Cruz;Salina-Krus;Салина-Крус;Саліна-Крус;サリナ・クルス; +city::3520271;Rio Bravo;El Ebano;Rio Bravo;Rio-Bravo;Río Bravo;Рио-Браво; +city::3520339;Reynosa;REX;Reinosa;Rejnosa;Reynosa;lei nuo sa;leinosa;reinosa;rynwsa tamaywlypas;ryynwsa;ryynwsh;Рейноса;Рејноса;ריינוסה;ریئنوسا;رینوسا تامائولیپاس;რეინოსა;レイノサ;雷諾薩;레이노사; +city::3521081;Puebla;Angelopolis;Byen Puebla;Cuetlaxcoapan;Gorad Ehroika-Puehbla-deh-Saragosa;Heroica Puebla de Zaragoza;Heróica Puebla de Zaragoza;Lungsod ng Puebla;PBC;Pouempla;Puebl;Puebla;Puebla City;Puebla de Saragosa;Puebla de Zaragoza;Puebla de los Angeles;Puebla de los Ángeles;Puehbla-de-Saragosa;Puehblae-de-Saragosae;Yucha Nchu'u;bwybla;pu ai bu la;pu'aibala;pu'ebla;puebeulla;puebura;pwybla pwybla;pwybla. pwybla;Πουέμπλα;Горад Эроіка-Пуэбла-дэ-Сарагоса;Пуебла;Пуэблæ-де-Сарагосæ;Пуэбла-де-Сарагоса;פואבלה;بويبلا;پوئبلا، پوئبلا;پوئبلا٬ پوئبلا;पुएब्ला;ਪੁਐਬਲਾ;პუებლა;プエブラ;普埃布拉;푸에블라; +city::3521168;Poza Rica de Hidalgo;PAZ;Poza Rica; +city::3521342;Playa del Carmen;PCM;Plaja-del'-Karmen;Playa del Carmen;peullayadelkaleumen;playya dyl karmyn;pu la ya de er ka man;Плая-дель-Кармен;פלאיה דל כרמן;پلائیا دیل کارمین;プラヤ・デル・カルメン;普拉亞德爾卡曼;플라야델카르멘; +city::3522210;Pachuca de Soto;Pachuca;Pachuca de Soto;Pachuka;Pachuka de Soto;Pachuka-de-Soto;Pachyohcan Soto;Pachyohcān Soto;Pacuka;Pasuca Sotoensis;Pačuka;pa qiu ka;pachuka;pachwka. aydalgw;Пачука;Пачука де Сото;Пачука-де-Сото;پاچوکا٬ ایدالگو;პაჩუკა;パチューカ;帕丘卡;파추카; +city::3522307;Orizaba;Orisaba;Orizaba;ao li sa ba;Орисаба;奧里薩巴; +city::3522507;Oaxaca;Byen Oaxaca;Guaxaca;Huaxyacac Juarez;Huaxyacac Juárez;Lungsod ng Oaxaca;Ndua;OAX;Oachaka;Oachaka nte Chouares;Oahaka;Oakhaka;Oakhaka de Khuares;Oakhaka-de-Khuares;Oakhakae-de-Khuares;Oaksaka de Khuarez;Oaxaca;Oaxaca City;Oaxaca by;Oaxaca de Juarez;Oaxaca de Juárez;Oaxaka de Juarez;Oaxaka de Juárez;Oaxaka de Xuares;Santa Maria;awakhaka d khwarz;awkhaka;oagsaka;oahaka;vahaka de ju'ereza;vahaka de khu'arisa;vasaka de hu'arejha;wa ha ka;wa ha ka shi;Οαχάκα ντε Χουάρες;Оаксака де Хуарез;Оахакæ-де-Хуарес;Оахака;Оахака де Хуарес;Оахака-де-Хуарес;Օախակա դե Խուարես;אואחאקה;أوخاكا;اوآخاکا د خوارز;اوکساکا سٹی;ܘܐܟܐܩܐ ܕܝ ܟܘܐܪܝܣ;वाशाका दे हुआरेझ;वाहाका डे जुएरेज़;ਵਾਹਾਕਾ ਦੇ ਖ਼ੁਆਰਿਸ;วาฮากา;གའཀགྲོང་།;ოახაკა-დე-ხუარესი;ወሓካ ዴ ዋሬዝ;オアハカ;瓦哈卡市;오악사카; +city::3522551;Nuevo Laredo;NLD;Novo Laredo;Novum Laredum;Nuehvo-Laredo;Nuevo Laredas;Nuevo Laredo;Opstina Nuevo Laredo;Opština Nuevo Laredo;nuebolaledo;nuevo-laredo;nwyww lardw;nwyww larydw;xin la lei duo;Нуево Ларедо;Нуэво-Ларедо;נואבו לארדו;نوئوو لاردو;نوئوو لاریدو;ნუევო-ლარედო;ヌエボ・ラレド;新拉雷多;누에보라레도; +city::3522732;Nicolas Romero;Ciudad Nicolas Romero;Ciudad Nicolás Romero;Lista de municipios do Mexico;Lista de municípios do México;Nicolas Romero;Nicolás Romero;Sijudad Nikolas Romero;Siudad Nikolas Romero;Villa Nicolas Romero;Villa Nicolás Romero;ni gu la si luo mei luo;nykwlas rwmrw mkzykw;Сиудад Николас Ромеро;Сијудад Николас Ромеро;نیکولاس رومرو، مکزیکو;尼古拉斯羅梅羅; +city::3522790;Naucalpan de Juarez;Municipio Naucalpan de Juarez;Municipio Naucalpan de Juárez;Naoukalpan;Naucalpan;Naucalpan de Juarez;Naucalpan de Juárez;Nauhcalpan Juarez;Nauhcalpan Juárez;Naukal'pan;Naukal'pan-de-Khuares;Naukalpan;Naukalpan de Khuarez;San Bartolo Naucalpan;kawkalpan;nao ka er pan;naukalpan;naukarupan;nawkalban dy khwaryz;nawkalpan d khwarz astadw d mkhykw;Ναουκάλπαν;Наукалпан;Наукалпан де Хуарез;Наукальпан;Наукальпан-де-Хуарес;ناوكالبان دي خواريز;ناوکالپان د خوارز، استادو د مخیکو;کاوکالپان;ნაუკალპანი;ナウカルパン;瑙卡尔潘;나우칼판; +city::3523149;Miramar;Miramar; +city::3523183;Minatitlan;MTT;Minatitlan;Minatitlán;mi na di te lan;mynatytlan;Минатитлан;میناتیتلان;米納蒂特蘭; +city::3523202;Milpa Alta;Milpa Alta; +city::3523303;Metepec;Metepec;Metepek;Metepēc;Municipio Metepec;Municipio de Metepec;mei te pei ke;mtpk;Метепек;متپک;梅特佩克; +city::3523349;Merida;Ciudad de Merida;Ciudad de Mérida;Emerita;Gorad Meryda;MID;Merida;Merida i Yucatan;Mérida;Mérida i Yucatán;mardt;mei li da;melida;merida;mryda ywkatan;Μέριδα;Горад Мерыда;Мерида;Меріда;ماردة;مریدا، یوکاتان;მერიდა;メリダ;梅里达;梅里達;메리다; +city::3523466;Heroica Matamoros;Heroica Matamoros;MAM;Matamoros;Матаморос; +city::3523513;Martinez de la Torre;Martinez de la Torre;Martínez de la Torre; +city::3523760;Magdalena Contreras;Magdalena Contreras; +city::3523908;Los Reyes Acaquilpan;Los Reyes;Los Reyes Acaquilpan;Los Reyes La Paz;Reyes;Reyes la Paz; +city::3524348;Linares;Linares;Линарес; +city::3524744;Las Margaritas;Las Margaritas; +city::3526323;Kanasin;Kanacin;Kanacín;Kanasin;Kanasín;Kanazin; +city::3526357;Juchitan de Zaragoza;Juchitan;Juchitan de Zaragoza;Juchitán;Juchitán de Zaragoza;Khuchitan-de-Saragosa;Opstina Heroica Ciudad de Juchitan de Zaragoza;Opština Heroica Ciudad de Juchitán de Zaragoza;Xochitlan Zaragoza;Хучитан-де-Сарагоса; +city::3526485;Jiutepec;Jiutepec;Xiutepec; +city::3526617;Xalapa de Enriquez;JAL;Jalapa;Jalapa Enriques;Jalapa Enriquez;Jalapa Enríquez;Xalapa;Xalapa de Enriquez;Xalapa de Enríquez;Xalapa-Enriquez;Xalapa-Enríquez; +city::3526682;Ixtapaluca;Ixtapaluca;Iztapaluca; +city::3526683;Iztapalapa;Delegacion Iztapalapa;Delegación Iztapalapa;Delegazione Iztapalapa;Istapalapa;Ixtapalapa;Iztaoalaoa;Iztapalapa;Iztapalapan;Iztapalāpan;yi si ta pa la pa;Истапалапа;伊斯塔帕拉帕; +city::3526700;Iztacalco;Delegacion de Ixtacalco;Delegación de Ixtacalco;Ixtacalco;Iztacalco; +city::3526798;Iguala de la Independencia;Iguala;Iguala de la Independencia;Iguala-de-la-Independensija;aygwala;yi gua la zi zhi shi;Игуала-де-ла-Индепенденсия;ایگوالا;伊瓜拉自治市; +city::3528756;Ciudad Mante;Ciudad Mante;El Mante;Juarez;Juárez;MMC;Villa Juarez;Villa Juárez;Villa Mante; +city::3529612;Ecatepec;Ecatepec;Ecatepec Morelos;Ecatepec de Morelos;Morelos;San Cristobal;San Cristobal Ecatepec;San Cristobal Ecatepec de Morelos;San Cristóbal;San Cristóbal Ecatepec;San Cristóbal Ecatepec de Morelos; +city::3529947;Cuernavaca;CVJ;Cuauhnahuac;Cuauhnāhuac;Cuernavaca;Gorad Kuehrnavaka;Kuehrnavaka;Kuernavaka;ku ai na wa ka;kueleunabaka;kuerunabaka;kwrnawak;Горад Куэрнавака;Куернавака;Куэрнавака;کورناواک;കെർണവാക്കാ;კუერნავაკა;クエルナバカ;庫埃納瓦卡;쿠에르나바카; +city::3529982;Cuautla;Cuautla;Cuautla Morelos; +city::3529986;Cuautitlan;Cuautitlan;Cuautitlan de Romero Rubio;Cuautitlán;Cuautitlán de Romero Rubio;Kuautitlan;Куаутитлан; +city::3530049;Delegacion Cuajimalpa de Morelos;Cuajimalpa;Cuajimalpa de Morelos;Delegacion Cuajimalpa de Morelos;Delegación Cuajimalpa de Morelos;Guajimalpa; +city::3530103;San Miguel de Cozumel;CZM;Conzumel;Cozumel;San Miguel Cozumel;San Miguel de Cozumel; +city::3530139;Coyoacan;Coyoacan;Coyoacán;koyoakan;コヨアカン; +city::3530240;Cordoba;Cordoba;Córdoba;Huilonco;Kordoba;Kordov;Kordova;ke er duo wa;kwrdwba wrakrwz;kwrdwba wyrakrwz;Кордова;کوردوبا، وراکروز;کوردوبا، ویراکروز;科爾多瓦; +city::3530367;Comitan;CJT;Comitan;Comitan de Dominguez;Comitán;Comitán de Domínguez;Komitan-de-Dominges;Комитан-де-Домингес; +city::3530517;Coatzacoalcos;Coatzacoalcos;Koacakoal'kos;Koacakoalkos;Koacakoalkosas;Puerto Mexico;QTZ;koateusakoalkoseu;koatsu~akoarukosu;kua cha kua er ke si;kwatzakwalkws;Коацакоалкос;Коацакоалькос;کواتزاکوالکوس;კოაცაკოალკოსი;コアツァコアルコス;夸察夸爾科斯;코아트사코알코스; +city::3530569;Coacalco;Coacalco;Coacalco de Berriozabal;Coacalco de Berriozaval;Coacalco de Berriozábal;Coacalco de Berriozával; +city::3530580;Ciudad Victoria;Altepetl Victoria;CVM;Cd. Victoria;Ciudad Victoria;Lungsod ng Victoria;S'judad-Viktorija;Sijudad Viktorija;Siudad Viktorija;Victoria;Victoria llaqta;shiudabikutoria;siudadeubigtolia;siw dad wik to reiy;sywdad wyktwrya;sywdd wyqtwryh;wei duo li ya cheng;Сиудад Виктория;Сијудад Викторија;Сьюдад-Виктория;סיודד ויקטוריה;سیوداد وکٹوریہ;سیوداد ویکتوریا;ซิวดัดวิกโตเรีย;სიუდად-ვიქტორია;シウダービクトリア;維多利亞城;시우다드빅토리아; +city::3530582;Ciudad Valles;Cd Valles;Cd. Valles;Ciudad Valles;Ciudad de Valles;S'judad-Val'es;Valles;Сьюдад-Вальес; +city::3530589;Ciudad Nezahualcoyotl;Cd. Neza;Cd. Nezahualcoyotl;Cd. Nezahualcóyotl;Ciudad Netzahualcoyotl;Ciudad Netzahualcóyotl;Ciudad Neza;Ciudad Nezahualcoyotl;Ciudad Nezahualcóyotl;Nesahualkojotlis;Nesaual'kojotl';Netzahualcoyotl;Netzahualcóyotl;Neza;Nezahualcoyotl;Nezahualcóyotl;Rancheria Netzahualcoyotl;Ranchería Netzahualcóyotl;Несауалькойотль; +city::3530594;Ciudad Madero;Cd Madero;Cd. Madero;Ciudad Madero;S'judad-Madero;Siudad Maderas;Siudad Madero;Villa de Cecilia;ma de luo cheng;sywdad madrw;Сиудад Мадеро;Сьюдад-Мадеро;سیوداد مادرو;馬德羅城; +city::3530597;Mexico City;Cidade de Mexico;Cidade de México;Cidade do Mexico;Cidade do México;Cita du Messicu;Citta del Messico;Città del Messico;Cità dû Messicu;Cità dû Mèssicu;Ciudad Mexico;Ciudad de Mejico;Ciudad de Mexico;Ciudad de Méjico;Ciudad de México;Ciutat de Mexic;Ciutat de Mèxic;Lungsod ng Mexico;Lungsod ng México;MEX;Mehiko;Mekhiko;Meksikas;Meksiko;Meksiko Siti;Meksikurbo;Meksyk;Mexico;Mexico City;Mexico D.F.;Mexico DF;Mexico Distrito Federal;Mexico by;Mexico-stad;Mexicopolis;Mexiko;Mexiko Hiria;Mexiko-Stadt;Mexikoborg;Mexíkóborg;México;México Distrito Federal;Nkoyo;Pole tou Mexikou;Valle de Mexico;Valle de México;mdynt mksykw;megsiko si;megsikositi;mekishikoshiti;meksiko siti;meksikositi;mkzykw;mkzykwsyty;mo xi ge cheng;mqsyqw syty;Πόλη του Μεξικού;Мексико;Мексико Сити;Мехико;Мехіко;מקסיקו סיטי;مدينة مكسيكو;مکزیکو;مکزیکوسیتی;مېكسىكا شەھىرى;मेक्सिको सिटी;เม็กซิโกซิตี;მეხიკო;メキシコシティ;墨西哥城;멕시코 시;멕시코시티; +city::3530599;Ciudad del Carmen;Altepetl Carmen;CME;Carmen;Cd Carmen;Cd del Carmen;Cd. Carmen;Cd. del Carmen;Ciudad del Carmen;S'judad-del'-Karmen;ka men cheng;sywdad dl karmn;Сьюдад-дель-Кармен;سیوداد دل کارمن;卡門城; +city::3530757;Cholula;Cholula;Cholula de Riva dabia;Colula;San Andres Cholula;San Andrés Cholula;San Pedro Cholula;San-Pedro-Cholula;chollulla;chwlwla;Čolula;Сан-Педро-Чолула;Чолула;چولولا;サン・ペドゥロ・チョルラ;촐룰라; +city::3530870;Chilpancingo;Chilpancingo;Chilpancingo de los Bravo;Chilpancingo de los Bravos;Ciudad Bravos; +city::3530937;Chicoloapan;Chicoloapan;Chicoloapan de Juarez;Chicoloapan de Juárez;San Vicente Chicoloapan;San Vicente Chiloloapan; +city::3531007;Chiautla;San Andres Chiautla;San Andrés Chiautla; +city::3531023;Chetumal;CTM;Cetumalis;Chetumal;Chetumal';Ciudad Chetumal;Payo Obispo;che tuma l;cheto~umaru;chetumal;chtwmal;chtwmal. kyntana rw;qie tu ma er;ztwml;Četumalis;Четумал;Четумаль;צטומל;چتومال;چتومال٬ کینتانا رو;เชตูมัล;ჩეტუმალი;チェトゥマル;切图马尔;체투말; +city::3531200;Chalco;Chalco;Chalco de Diaz Covarrubias;Chalco de Díaz Covarrubias; +city::3531576;Cardenas;Cardenas;Cárdenas;Kardenas;Карденас; +city::3531673;Cancun;CUN;Cancun;Cancún;Ciudad Cancun;Ciudad Cancún;Gorad Kankun;Kan'koun;Kankun;Kankuna;Kankunas;gang guan;kan kun;kang kun;kangkun;kankun;kankuna;kankwn;kankwn. kyntana rw;qnqwn;Κανκούν;Горад Канкун;Канкун;Կանկուն;קנקון;كانكون;کانکون;کانکون٬ کینتانا رو;कान्कुन;กังกุน;ကင်န်ကွန်မြို့;კანკუნი;カンクン;坎昆;港觀;칸쿤;캉쿤; +city::3531732;Campeche;CPE;Campeche;Kampeche;San Francisco de Campeche;Кампече; +city::3531865;Cadereyta;; +city::3532497;Azcapotzalco;Atzapotzalco;Atzcapotzalco;Azcapotzalco; +city::3532592;Atlixco;Atliksko;Atlixco;Атликско; +city::3532881;Amozoc de Mota;Amozoc;Amozoc de Mota; +city::3533005;Altamira;Al'tamira;Altamira;Альтамира; +city::3533462;Acapulco de Juarez;ACA;Acapolco Juarez;Acapolco Juárez;Acapulco;Acapulco de Juarez;Acapulco de Juárez;Acapulco Acapulco de Juarez;Acapulcum;Akapoulko;Akapul'ko;Akapulkas;Akapulko;Akapúlkó;Gorad Akapul'ka;a ka pu er ke;akabwlkw;akapulko;akapuruko;akapwlkw gwyrrw;xa ka pul ko;Ακαπούλκο;Акапулко;Акапулько;Горад Акапулька;אקפולקו;آکاپولکو، گوئررو;أكابولكو;അക്കാപുൽകോ;อากาปุลโก;აკაპულკო;アカプルコ;阿卡普尔科;아카풀코; +city::3815415;Tlaxcala;Tlaskala;Tlaxcala;Tlaxcala City;Tlaxcala de Xicohtencatl;Tlaxcala de Xicohténcatl;Tlaxcala de Xicotencatl;Tlaxcala de Xicoténcatl;Тласкала; +city::3815453;Villa Vicente Guerrero;San Pablo del Monte;Vicente Guerrero;Villa Vicente Guerrero; +city::3818742;San Andres Cholula;San Andres Cholollan;San Andres Cholula;San Andrés Cholula;San Andrés Cholōllān;san andrys chwlwla pwybla;سان آندریس چولولا، پوئبلا;サン・アンドゥレス・チョルラ; +city::3824166;Tampico;Gorad Tampika;Tampeks;Tampikas;Tampiko;Tampėks;tam pi ko;tambykw;tampiko;tampykw;tan pi ke;tanpiko;tempiko;tmpyqw;Горад Тампіка;Тампико;Տամպիկո;טמפיקו;تامبيكو;تامپیکو;टॅम्पिको;ตัมปีโก;タンピコ;坦皮科;탐피코; +city::3827406;Benito Juarez;; +city::3827408;Miguel Hidalgo;Delegacion Miguel Hidalgo;Delegación Miguel Hidalgo;Miguel Hidalgo; +city::3827409;Cuauhtemoc;Cuauhtemoc;Cuauhtémoc; +city::3827414;Huixquilucan;Huixquilucan; +city::3827598;Ojo de Agua;; +city::3827606;Buenavista;Buenavista; +city::3979673;Ixtapa-Zihuatanejo;Ixtapa Zihuatanejo;Ixtapa-Zihuatanejo;Jose Azueta;José Azueta;Siuatanekho;ZIH;Zihuatanejo;khwzh azwta gwyrrw;xi wa ta nei huo;Сиуатанехо;خوزه ازوتا، گوئررو;锡瓦塔内霍; +city::3979770;Zapopan;Gorad Sapapan;Sapopan;Sapopanas;Tzapopan;Zapopan;sa bo pan;sabwban khalyskw;sapopan;zapwpan khalyskw;Σαπόπαν;Горад Сапапан;Запопан;Сапопан;زاپوپان، خالیسکو;سابوبان، خاليسكو;საპოპანი;サポパン;萨波潘; +city::3979802;Zamora;Samora-de-Idal'go;ZMM;Zamora;Zamora de Hidalgo;Самора-де-Идальго; +city::3979844;Zacatecas;Altepetl Zacatecah;Sakatekas;ZCL;Zacatecas;Zacatecas City;sa ka te ka si;sakatekaseu;sakatekasu;sqtqs;zakatkas .zakatkas;Сакатекас;Սակատեկաս;סקטקס;زاکاتکاس ٬زاکاتکاس;زاکاٹیکاس;საკატეკასი;サカテカス;萨卡特卡斯;사카테카스; +city::3979846;Zacapu;Sakapu;Zacapu;Zacapu de Mier;Zacapú;Zacapú de Mier;Сакапу; +city::3980180;Ciudad Frontera;Ciudad Frontera;Frontera;Villa Frontera;Villa-Frontera;Вилла-Фронтера; +city::3980194;Ciudad de Villa de Alvarez;Vil'ja-de-Al'vares;Villa de Alvarez;Вилья-де-Альварес; +city::3980605;Valle de Santiago;Ciudad Valle de Santiago;Val'e-de-Sant'jago;Valle de Santiago;Валье-де-Сантьяго; +city::3980760;Uruapan;Opstina Uruapan;Opština Uruapan;Ourouapan;UPN;Uruapan;Uruapan del Progreso;awrwapan;uluapan;wu lu a pan;Ουρουάπαν;Уруапан;Уруапан дел Прогресо;اورواپان;烏魯阿潘;우루아판; +city::3981254;Torreon;TRC;Toreon;Toreonas;Torreon;Torreón;toreon;tuo lei weng;twrywn. kwawyla;Τορρεόν;Тореон;Торреон;تورئون٬ کواویلا;ტორეონი;トレオン;托雷翁; +city::3981369;Tonala;Opstina Tonala;Opština Tonalá;Tonala;Tonallan;Tonalá;Tōnallān;tuo na la;twnala khalyskw;Тонала;تونالا، خالیسکو;ტონალა;托納拉; +city::3981461;Tlaquepaque;San Pedro Tlaquepaque;Tlakepake;Tlakepakė;Tlaquepaque;te la ke pa ke;tlakwpakw;torakepake;Тлакепаке;تلاکوپاکو;ტლაკეპაკე;トラケパケ;特拉克帕克; +city::3981609;Tijuana;Gorad Tykhuana;TIJ;Tia Juana;Tichouana;Tichuana;Tihuana;Tijuana;Tikhuana;Tikhuanae;Tíjúana;Zaragoza;di hua na;tifuana;tihaw na;tihu'ana;tihuana;tihvana;tikhavana;tykhwana;Τιχουάνα;Горад Тыхуана;Тихуанæ;Тихуана;Тіхуана;טיחואנה;تيخوانا;تیخوانا;तिहुआना;ਤੀਖ਼ਵਾਨਾ;ടീഹ്വാന;ตีฮัวนา;ტიხუანა;ティフアナ;蒂華納;티후아나; +city::3981941;Tepic;Nayarit;TPQ;Tepic;Tepik;Tepikas;Tepīc;te pi ke;tepig;tepiku;tpyq;Тепик;טפיק;ტეპიკი;テピク;特皮克;테픽; +city::3981984;Tepatitlan de Morelos;Tepatitlan;Tepatitlan de Morelos;Tepatitlán de Morelos; +city::3982213;Tecoman;Tecoman;Tekomane;Текомане; +city::3982266;Tecate;Tecate;Tekate;te ka te;tekate;tkt;Текате;تکت;تیکاتے;テカテ;特卡特;테카테; +city::3982912;Soledad de Graciano Sanchez;Diaz Gutierrez;Diez Gutierrez;Diez Gutiérrez;Díaz Gutiérrez;Soledad Diaz Gutierrez;Soledad Diez Gutierrez;Soledad Díaz Gutiérrez;Soledad Díez Gutiérrez;Soledad de Diez Gutierrez;Soledad de Díez Gutiérrez;Soledad de Graciano Sanchez;Soledad de Graciano Sánchez; +city::3983058;Silao;Silao; +city::3984583;Santa Catarina;; +city::3985241;San Nicolas de los Garza;San Nicolas de los Garsas;San Nicolas de los Garza;San Nicolas de los Garzas;San Nicolás de los Garsas;San Nicolás de los Garza;San Nicolás de los Garzas;San Nikolas de los Garsa;San Nikolas de los Garza;sheng ni gu la si shi;sn nykwlas d lws garza;Сан Николас де лос Гарза;Сан Николас де лос Гарса;سن نیکولاس د لوس گارزا;სან-ნიკოლას-დე-ლოს-გარსა;聖尼古拉斯市; +city::3985344;San Miguel de Allende;San Migel de Aljende;San Migel de Aljendė;San Miguel Allende;San Miguel de Allende;San-Migel'-de-Al'ende;san-migel-de-aliende;sanmigeldeayende;sheng mi ge er de a lian de;sn mygwl d alnd;Сан-Мигель-де-Альенде;Сан-Міґель-де-Альєнде;סן מיגל דה איינדה;سن میگول د الند;სან-მიგელ-დე-ალიენდე;サン・ミゲル・デ・アジェンデ;聖米格爾德阿連德;산미겔데아옌데; +city::3985604;San Luis Rio Colorado;San Luis;San Luis Rio Colorado;San Luis Río Colorado;San-Luis-Rio-Kolorado;UAC;san lwys ryw kwlwradw;sheng lu yi si li ao ke luo la duo;sn lwyys ryw klradw;Сан-Луис-Рио-Колорадо;سان لویس ریو کولورادو;سن لوئیس ریو کلرادو;聖路易斯里奧科羅拉多; +city::3985606;San Luis Potosi;Altepetl San Luis Potosi;Altepetl San Luis Potosí;Gorad San-Luis-Patasi;SLP;San Louis Potosi;San Luis;San Luis Potosi;San Luis Potosi City;San Luis Potosí;San Luis Potosí City;San-Luis-Potosi;san lwyys pwtwsy san lwyys pwtwsy;sanlu-iseupotosi;sheng lu yi si bo tuo xi shi;Σαν Λουίς Ποτοσί;Горад Сан-Луіс-Патасі;Сан Луис Потоси;Сан-Луис-Потоси;Սան Լուիս;סן לואיס פוטוסי;سان لوئیس پوتوسی سٹی;سان لوئیس پوتوسی، سان لوئیس پوتوسی;სან-ლუის-პოტოსი;サン・ルイス・ポトシ;圣路易斯波托西市;산루이스포토시; +city::3986984;San Francisco del Rincon;San Francisco del Rincon;San Francisco del Rincón; +city::3988086;Saltillo;SLW;Sal'til'jo;Sal'til'o;Saltil'o;Saltillo;Saltilo;sa er di yue;saltiyo;saltyw;saltyyw kwawyla;sarutiyo;sltyw;Салтилло;Салтильо;Салтиљо;Сальтильо;Сальтільйо;סלטיו;سالتيو;سالتیو;سالتییو، کواویلا;სალტილიო;サルティーヨ;萨尔蒂约;살티요; +city::3988214;Salamanca;Ciudad Salamanca;Salamanca;Salamanka;sa la man ka;salamanka gwanakhwatw;slamanka gwanakhwatw;slamnka;Саламанка;سالامانکا، گواناخواتو;سلامانکا، گوآناخوآتو;سلامنكا;薩拉曼卡; +city::3988258;Sahuayo de Morelos;Sahuayo;Sahuayo de Diaz;Sahuayo de Díaz;Sahuayo de Jose Maria Morelos;Sahuayo de José María Morelos;Sahuayo de Morelos;Sahuayo de Porfirio Diaz;Sahuayo de Porfirio Díaz; +city::3988392;Rosarito;Ejido Mazatlan El Rosarito;Rosario;Rosarito;Rosarito Beach Baja;Росарито; +city::3991164;Santiago de Queretaro;Ciudad Queretaro;Kepetapo;Kepeтapo;Keretaro;QRO;Queretaro;Queretaro City;Queretarum;Querétaro;Querétaro City;Sant'jago-de-Keretaro;Santiago Tlachco;Santiago nte Keretaro;Santiagu di Queretaro;Santiagu di Querétaro;Santijago de Keretaro;Santjago de Keretaras;Santjago de Keretaro;ke lei ta luo;keletalo;kere ta ro;keretaro;krtarw krtarw;kwartarw kwartarw;qrtrw;santiyago de keretaro;santʼiago-de-kʼeretʼaro;Σαντιάγο ντε Κερέταρο;Керетаро;Сантијаго де Керетаро;Сантьяго-де-Керетаро;Сантяго де Керетаро;קרטרו;کرتارو، کرتارو;کوارتارو، کوارتارو;सान्तियागो दे केरेतारो;เกเรตาโร;სანტიაგო-დე-კერეტარო;ケレタロ;克雷塔罗;케레타로; +city::3991328;Puerto Vallarta;Las Penas;Las Peñas;PVR;Pto Vallarta;Puehrto-Val'jarta;Puerto Valjarta;Puerto Vallarta;ba ya er ta gang;pueleutobayaleuta;pwrtw bayarta khalyskw;Пуерто Валярта;Пуэрто-Вальярта;پورتو بایارتا، خالیسکو;巴亚尔塔港;푸에르토바야르타; +city::3992619;Piedras Negras;PDS;Piedras Negras;Piedrasnegras;پیئدراس نیگراس، كواہويلا; +city::3994489;Ocotlan;Ocotlan;Ocotlán; +city::3994616;Nuevo Casas Grandes;NCG;Nuehvo-Kasas-Grandes;Nueva Casa Grande;Nueva Casas Grandes;Nuevo Casas Grandes;Нуэво-Касас-Грандес; +city::3995019;Navojoa;Navoioa;Navojoa;Navokhoa;na wo hua;nawwkhwa;nawwywa;Навохоа;ناووخوا;ناوویوا;納沃華; +city::3995402;Morelia;MLM;Morelia;Morelija;mo lei li ya;molellia;morelia;moreria;mwrlya mychwakan;mwrlyh;mwrylya;mx re leiy;Морелия;Морелија;Морелія;Մորելիա;מורליה;مورلیا، میچوآکان;موريليا;موریلیا;มอเรเลีย;მორელია;モレリア;莫雷利亚;모렐리아; +city::3995465;Monterrey;Gorad Mantehrehj;MTY;Mons Regis;Monterej;Monterejo;Monterejus;Monterey;Monterrei;Monterrej;Monterreja;Monterrey;Monterrey City;Monterrey i Nuevo Leon;Monterrey i Nuevo León;Monterėjus;Tlahtoantepec;Tlahtoāntepēc;mamtere;meng te lei;montelei;montere'i;monterei;mwntry;mwntryy;mwntyry;mxn terrey;Μοντερρέι;Горад Мантэрэй;Монтерей;Монтереј;Монтеррей;Մոնտերեյ;מונטריי;مونتری;مونتيري;مونتےرئی;माँतेरे;ਮੋਂਤੇਰੇਈ;มอนเตร์เรย์;མཱོན་ཊི་རེ།;მონტერეი;モンテレイ;蒙特雷;몬테레이; +city::3995523;Monclova;LOV;Monclova;Monklova;meng ke luo wa;mwnklwwa;Монклова;مونکلووا;蒙克洛瓦; +city::3996069;Mexicali;Gorad Mekhikali;MXL;Mekhikali;Meksikalis;Mexicali;Mexicali i Baja California;Mexihcali;Mexikali;me khi kali;megsikalli;mehikari;mkhykaly;mksykaly;mo xi ka li;mqsyqly;myksykaly;Μεξικάλι;Горад Мехікалі;Мехикали;Мехікалі;מקסיקלי;مخیکالی;مكسيكالي;میکسیکالی;เมคีกาลี;მეხიკალი;メヒカリ;墨西卡利;멕시칼리; +city::3996322;Mazatlan;Ciudad Mazatlan;Ciudad Mazatlán;MZT;Macatlan;Masatlan;Masatlanas;Mazatlan;Mazatlán;ma sa te lan;masateullan;masatlan;masatoran;mzatlan synalwa;Μαζατλάν;Мазатлан;Масатлан;Мацатлан;מסטלאן;ماساتلان;مزاتلان، سینالوآ;მასატლანი;マサトラン;馬薩特蘭;마사틀란; +city::3996387;Matehuala;Matehuala;Mateuala;Матеуала; +city::3996426;Matamoros;Matamoros;Matamoros de la Laguna;Матаморос; +city::3996663;Manzanillo;Cozcatlan;Cōzcatlān;Mansanil'o;Manzanillo;ZLO;man sa ni yue;mansaniyo;manzanylw;mnsnyw;Мансанильо;מנסניו;مانزانیلو;曼萨尼约;만사니요; +city::3997479;Los Mochis;LMM;Los Mochis;Los-Mochis;Mochis;los-mochisi;loseumochiseu;luo si mo qi si;lws mwchys;lws mwzys;rosumochisu;Лос Мочис;Лос-Мочис;לוס מוציס;لوس موچیس;ლოს-მოჩისი;ロスモチス;洛斯莫奇斯;로스모치스; +city::3998655;Leon de los Aldama;BJX;Ciudad de Leon;Ciudad de León;Leon;Leon Guanajuato;Leon de los Aldama;Leon de los Aldamas;León;León de los Aldama;León de los Aldamas;reon;レオン; +city::4000821;La Piedad;La Piedad;La Piedad Cabadas;La Piedad Cavadas;La Piedad de Cabadas;Municipio La Piedad; +city::4000900;La Paz;LAP;La Paz;La-Pas;Paz;Ла-Пас; +city::4002224;Lagos de Moreno;LOM;Lagos de Moreno; +city::4004330;Irapuato;Irapuatas;Irapuato;Iraputa;ayrabwatw;ayrapwatw;ayrpwatw gwankhwatw;yi la pu a tuo;Ирапуато;ايرابواتو;ایراپواتو;ایرپواتو، گوانخواتو;ირაპუატო;伊拉普阿托; +city::4004867;Parral;Hidalgo del Parral;Paral;Parral;Parral';pa la er;paral chyywaywa;Парал;Парраль;پارال، چہواہوا;پارال، چیئوائوا;帕拉爾; +city::4004885;Heroica Zitacuaro;Heroica Zitacuaro;Heróica Zitácuaro;Zitacuaro;Zitácuaro; +city::4004886;Nogales;Heroica Nogales;Los Nogales;NOG;Nogales;nuo jia lai si;nwgals swnwra;nwgalys swnwra;Ногалес;نوگالس، سونورا;نوگالیس، سونورا;諾加萊斯; +city::4004887;Heroica Caborca;Caborca;Heroica Caborca; +city::4004898;Hermosillo;Ehrmosil'o;Ermosijo;Ermosil'o;Ermosilo;HMO;Hermosiljas;Hermosillo;Pitic;ai mo xi yue;armwsyw;armwsyyw swnwra;armwsyyw swnwra;eleumosiyo;ermosilio;erumoshijo;xer mo si yo;Ермосильо;Ермосиљо;Ермосійо;Эрмосильо;ארמוסיו;ارموسييو سونورا;ارموسیو;ارموسییو، سونورا;เอร์โมซีโย;ერმოსილიო;エルモシージョ;埃莫西约;에르모시요; +city::4005143;Heroica Guaymas;GYM;Guajmas;Guaymas;Heroica Guaymas;gua yi ma si;gwaymas;Гуаймас;گوایماس;瓜伊馬斯; +city::4005219;Guasave;Guasava;Guasave;gua sa wei;gwasaw;Гуасаве;گواساو;瓜薩維; +city::4005270;Guanajuato;Byen Guanajuato;Ciudad Guanajuato;Guanajuato;Guanajuato City;Guanakhuato;Guanaxuato;Gvanachuatas;Gvanakhuato;Pachtitlan;ghwanakhwatw;gua na hua tuo;guanafuato;gwanahuato;gwanakhwatw gwanakhwatw;kwa na khaw to;Гванахуато;Гуанахуато;גואנחואטו;غواناخواتو;گوآناخوآتو، گوآناخوآتو;กวานาคัวโต;გუანახუატო;グアナフアト;瓜纳华托;과나후아토; +city::4005297;Guamuchil;Guamuchil;Guamúchil; +city::4005492;Guadalupe;Ciudad Guadalupe;Guadalupe;Gvadalupe;Villa Guadalupe;Villa de Guadalupe;Гвадалупе; +city::4005509;Guadalupe;Guadalupe;Gvadalupe;Гвадалупе; +city::4005539;Guadalajara;Atemaxac;GDL;Gorad Gvadalakhara;Gouadalachara;Guadalajara;Guadalajara i Jalisco;Guadalakhara;Guadalaxara;Gvadalachara;Gvadalahara;Gvadalaharo;Gvadalakhara;Gvadalakharae;gatalajara;ghwadalakhara;gu'adalahara;gua da la ha la;guadarahara;gvadalahara;gvadalakhara;gwadalakhara khalyskw;gwadallahala;gwwdlhrh;kwa da la ha ra;Ātemaxac;Γουαδαλαχάρα;Гвадалахарæ;Гвадалахара;Горад Гвадалахара;Гуадалахара;גוודלחרה;غوادالاخارا;گوادالاخارا، خالیسکو;گواڈلہارا;ग्वादालाहारा;ਗੁਆਦਾਲਾਹਾਰਾ;ഗൗതലജാറ;กวาดาลาฮารา;გვადალახარა;グアダラハラ;瓜达拉哈拉;과달라하라; +city::4005775;Gomez Palacio;Gomez Palacio;Gómez Palacio; +city::4005867;Ciudad General Escobedo;Ciudad General Escobedo;General Escobedo;Gral. Escobedo; +city::4005937;Garza Garcia;; +city::4006163;Fresnillo;Fresnil'o;Fresniljas;Fresnillo;Fresnillo de Gonzalez Echeverria;Fresnillo de González Echeverría;frsnylw;frysnyw;fu lei si ni yue;Фреснильо;فرسنیلو;فریسنیو;弗雷斯尼約; +city::4006702;Ensenada;ESE;Ehnsenada;Enseada;Ensenada;ansnada bakha kalyfrnya;ansynada;aynsynada bakha kylyfwrnya;en sen na da;ensenada;xen se na da;Енсенада;Энсенада;אנסנדה;إنسينادا;انسنادا، باخا کالیفرنیا;اینسینادا، باخا کیلیفورنیا;เอนเซนาดา;ენსენადა;エンセナーダ;恩森那達;엔세나다; +city::4008303;El Pueblito;; +city::4011743;Victoria de Durango;Byen Durango;Ciudad de Durango;DGO;Durangas;Durango;Durango City;Victoria de Durango;Viktorija de Durango;Viktorija-de-Durango;do~urango;du lan ge;dulang-go;durango;dwrangw dwrangw;dwrngw;Виктория-де-Дуранго;Викторија де Дуранго;Дуранго;דורנגו;دورانگو سٹی;دورانگو، دورانگو;დურანგო;ドゥランゴ;杜兰戈;두랑고; +city::4012176;Culiacan;CUL;Colhuahcan Rosales;Cuilacan;Culiacan;Culiacan Rosales;Culiacana;Culiacán;Culiacán Rosales;Cōlhuahcān Rosales;Kul'jakan;Kuliakan;Kulijakan;Kuljakanas;ku leiy kan;ku li ya kan;kuriakan;Кулиакан;Кулијакан;Кульякан;กูเลียกัน;კულიაკანი;クリアカン;库利亚坎; +city::4012406;Cuauhtemoc;Ciudad Cuauhtemoc;Ciudad Cuauhtémoc;Cuahtemoc;Cuauhtemoc;Cuauhtémoc;San Antonio de los Arenales; +city::4012721;Cortazar;Cortazar;Kortasar;Villa Cortazar;Кортасар; +city::4013516;Colima;CLQ;Colima;Kolima;Колима; +city::4013704;Ciudad Obregon;Altepetl Obregon;Altepetl Obregón;CEN;Cajeme;Cd Obregon;Cd Obregón;Cd. Obregon;Cd. Obregón;Ciudad Obregon;Ciudad Obregón;Lungsod ng Obregon;Lungsod ng Obregón;Obregon;S'judad Obregon;S'judad-Obregon;Sijudad Obregon;Siudad Obregon;Siudad Obregonas;ao fu lei gong cheng;siudad-obregoni;siudadeuobeulegon;sywdad awbrgn;sywdad awbrygwn;Сиудад Обрегон;Сијудад Обрегон;Сьюдад Обрегон;Сьюдад-Обрегон;סיודד אוברגון;سیوداد اوبرگن;سیوداد اوبریگون;სიუდად-ობრეგონი;シウダ・オブレゴン;奧夫雷貢城;시우다드오브레곤; +city::4013706;Ciudad Lerdo;Ciudad Lerdo;Lerdo; +city::4013708;Ciudad Juarez;Altepetl Juarez;Altepetl Juárez;CJS;Chuaresas;Ciudad Juarez;Ciudad Juárez;El Paso del Norte;Gorad S'judad-Khuarehs;Huaresa;Juarez;Juárez;Lungsod Juarez;Lungsod Juárez;Paso del Norte;S'judad-Khuares;Sijudad Khuarez;Sioudad Chouares;Siudad Chuaresas;Siudad Khuares;Syudat Xuares;hua lei si cheng;si'udada hu'arejha;siudad-khuaresi;siudadeuhualeseu;sywdad khwars. chyywaywa;sywdad khwaryz;Σιουδάδ Χουάρες;Горад Сьюдад-Хуарэс;Сиудад Хуарес;Сијудад Хуарез;Сьюдад-Хуарес;Սյուդատ Խուարես;סיודאד חוארס;سيوداد خواريز;سیوداد خوارس٬ چیئوائوا;سیوداد خواریز;सिउदाद हुआरेझ;სიუდად-ხუარესი;シウダー・フアレス;華雷斯城;시우다드후아레스; +city::4013712;Ciudad Hidalgo;Ciudad Hidalgo;Hidalgo;S'judad-Idal'go;Taximaroa;Villa Hidalgo;Сьюдад-Идальго; +city::4013714;Ciudad Guzman;Altepetl Guzman;Cd Guzman;Cd Guzmán;Cd. Guzman;Cd. Guzmán;Ciudad Guzman;Ciudad Guzmán;S'judad-Gusman;gu si man cheng;sywdad gwzman;thywdad jwthman;Сьюдад-Гусман;ثيوداد جوثمان;سیوداد گوزمان;古斯曼城; +city::4013720;Ciudad Delicias;Delicias;Delis'jas;Las Delicias;Делисьяс; +city::4013728;Ciudad Acuna;ACN;Acuna;Acuña;Ciudad Acuna;Ciudad Acuña;Las Vacas;Lungsod ng Acuna;Lungsod ng Acuña;S'judad-Akun'ja;Siudad Akunja;Villa Acuna;Villa Acuña;a ku ni ya;akwna kwawyla;Сиудад Акуня;Сьюдад-Акунья;אקוניה;اکونا، کواویلا;阿庫尼亞; +city::4014338;Chihuahua;Altepetl Chihuahuah;Byen Chihuahua;CUU;Chihuahua;Chihuahua City;Chihuahua by;Chiuaua;Chiuauae;Chivava;Cihuahua;Ciuaua;Dakbayan sa Chihuahua;Tsiouaoua;chiuaua;chiwawa;chyywaywa. chyywaywa;qi wa wa shi;zhi hua hua shi;Čihuahua;Čiuaua;Τσιουάουα;Чивава;Чиуауæ;Чиуауа;Чіуауа;ציוואווה;چہواہوا;چیئوائوا٬ چیئوائوا;ჩიუაუა;チワワ;奇瓦瓦市;芝華華市;치와와; +city::4014875;Celaya;CYW;Celaya;Selaja;sai la ya;selaia;slaya;sylaya;sylayya;Селая;Селаја;Ցելայա;سلایا;سيلايا;سیلائیا;სელაია;塞拉亞; +city::4018390;Ciudad Apodaca;Apodaca;Apodaka;Ciudad Apodaca;Opstina Apodaca;Opština Apodaca;Sijudad Apodaka;a bo da ka;apwdaka;Аподака;Сијудад Аподака;آپوداکا;აპოდაკა;阿波達卡; +city::4018400;Apatzingan;AZG;Apantzincan;Apatzingan;Apatzingan de la Constitucion;Apatzingán;Apatzingán de la Constitución;a pa qin gan;apatzyngan;اپاتزینگان;阿帕欽甘; +city::4019233;Aguascalientes;AGU;Aguascalientes;Aguascalientes City;Aguascalientes by;Aguaskal'entes;Aguaskalentes;Aguaskalientes;Aguaskaljentesas;Agvaskalijentes;Altepetl Aguascalientes;Byen Aguascalientes;Ciudad de Aguascalientes;a gua si ka lian te si;aguasukarientesu;agwaseukallienteseu;agwyaskalynts;xa k was ka leiyn tes;Агваскалијентес;Агуаскалиентес;Агуаскальентес;Аґуаскальєнтес;אגואסקליינטס;آگوئاسکالینتس;آگوسکالینٹس;อากวัสกาเลียนเตส;აგუასკალიენტესი;アグアスカリエンテス;阿瓜斯卡连特斯;아과스칼리엔테스; +city::4019260;Agua Prieta;Agua Prieta; +city::4019827;Acambaro;Acambaro;Acámbaro;Akambaro;a kan ba luo;akambarw;Акамбаро;اکامبارو;阿坎巴罗; +city::4023117;Dolores Hidalgo Cuna de la Independencia Nacional;Ciudad de Dolores Hidalgo;Dolores Hidalgo; +city::4026082;Ciudad Lazaro Cardenas;Ciudad Lazaro Cardenas;Ciudad Lázaro Cárdenas;LZC;Lazaro Cardenas;Lázaro Cárdenas;Melchor Ocampo;Melchor Ocampo del Balsas; +city::8617692;San Pedro Garza Garcia;Garza Garcia;Garza García;San Pedro;San Pedro Garza Garcia;San Pedro Garza García; +city::8858078;Soledad de Graciano Sanchez;Soledad de Graciano Sanchez;Soledad de Graciano Sánchez; +city::8858079;Manzanillo;Cozcatlan;Mansanil'o;Manzanillo;man sa ni yue;mansaniyo;mansanyw kwlyma;manzanylw;mnsnyw;wen cheng li you;Мансанильо;מנסניו;مانزانیلو;مانسانیو، کولیما;文成李祐;曼萨尼约;만사니요; +city::8858082;Naucalpan de Juarez;Naucalpan de Juarez;Naucalpan de Juárez; +city::8858085;Hacienda Santa Fe;Hacienda Santa Fe; +city::8858086;Fuentes del Valle;Fuentes del Valle; +city::8858087;San Salvador Tizatlalli;San Salvador Tizatlalli; +city::8858088;Jardines de la Silla (Jardines);Jardines de la Silla (Jardines); +city::1732687;Batu Pahat;BP;Bandar Penggaram;Batu Pahat; +city::1732711;Pontian Kechil;Pontian;Pontian Kechil;Pontian Kecil; +city::1732721;Kampung Pasir Gudang Baru;Kampung Pasir Gudang;Kampung Pasir Gudang Baru; +city::1732738;Kota Tinggi;Kota Tinggi;Kota Tuiggi; +city::1732741;Taman Senai;Senai;Taman Senai;Сенаи; +city::1732742;Kulai;Kulai;Kuli; +city::1732752;Johor Bahru;Baru;Bharu;Dzhokhor Bakhru;Dzhokhor-Baru;Dzohor Baru;Dzokhor Bakhru;Džohor Baru;JHB;Jahore Bahru;Johor;Johor Baharu;Johor Bahru;Johore;Johore Bahru;Johore Baru;Johore Bharu;Sin-san-su;Sîn-sân-sṳ;joholeubalu;johora baru;johorubaru;jokur paru;jwhr bhrw;jwhwr bhrw;xin shan;ya hor bah ru;Џохор Бахру;Джохор Бахру;Джохор-Бару;גוהור באהרו;جوهر بهرو;جوهور بهرو;جوھر بھرو;जोहोर बारू;ஜொகூர் பாரு;ยะโฮร์บาห์รู;ဂျဟိုးဘာရူးမြို့;ジョホールバル;新山;조호르바루; +city::1732811;Kluang;Keluang;Kluang; +city::1732846;Segamat;Segamat; +city::1732869;Muar;Bandar Maharani;Muar;Muar town;ma po;Муар;麻坡; +city::1732891;Kuala Selangor;Kuala Selangor;Kuala-Selangor;Selangor;Куала-Селангор; +city::1732903;Shah Alam;Sa-a-nam;Shah Alam;Shakh Alam;Shakh-Alam;Sâ-â-nàm;sa alam;saha alama;sha a nan;sha ya nan;shaہ ʿalm mlayyshya;syaallam;Шах Алам;Шах-Алам;شاه عالم;شاہ عالم، ملائیشیا;शाह आलम;ஷா ஆலாம்;シャー・アラム;沙亞南;莎阿南;샤알람; +city::1732905;Klang;Kelang;Klang;Klangas;Klanq;keullang;killan;klang;klanj;kuran;Келанг;Кланг;كلانج;کلانگ;கிள்ளான்;クラン;클랑; +city::1732945;Cukai;Chukai;Chukei;Cukai;Mokuan;Telor Mokuan; +city::1733432;Kota Kinabalu;BKI;Jesselton;Kinabalu;Kota Kinabalu;Kota-Kinabalu;kotakinaballu;kotakinabalu;kotakinabaru;kwta kynabalw;ya bi;Кота-Кинабалу;کوتا کینابالو;コタキナバル;亞庇;코타키나바루;코타키나발루; +city::1733438;Donggongon;; +city::1733440;Putatan;Kampong Putatan;Putatan Station; +city::1733697;Semporna;SMM;Semporna;Semporna Settlement;Sempurna;Simporan;Simporna;Семпорна; +city::1733782;Victoria;Labuan;Victoria;Victoria Town;Viktorija;Виктория; +city::1733953;Lahad Datu;LDU;Lahad Datu;Lahad Datu Town;lakat tattu;na du;rahadato~u;லகாட் டத்து;ラハダトゥ;拿笃; +city::1734052;Sandakan;Elopura;SDK;Samdakan;San-ta-kin;Sandakan;Sandakan Town;Sân-tá-kîn;cantakkan;san da kan;sandakan;shan da gen;sndakan;Сандакан;سانداكان;سانداکان;سنداکان;சண்டாக்கான்;ശാന്തകൻ;ซันดากัน;サンダカン;山打根;산다칸; +city::1734098;Keningau;KGU;Kaningow;Kengingan;Keningau; +city::1734199;Tawau;TWU;Tavau;Tawao;Tawau;dou hu;tavav;tawau;tawaw;Тавау;تاواو;தாவாவ்;タワウ;斗湖;타와우; +city::1734393;Kulim;Kulim; +city::1734576;Simpang Empat;Semanggol;Simpang Ampat;Simpang Empat; +city::1734586;Taiping;Bandar Taiping;TPG;Taipeng;Taiping;Taipingo;Tajpin;tai ping;taipin;taiping;taippin;Тайпин;தைப்பிங்;タイピン;太平;타이핑; +city::1734634;Ipoh;IPH;Ipo;Ipoh;Ipoha;Ipohas;Ipokh;Yi-po-su;Yî-pó-sṳ;aybwh;aypw;aypwh;ipo;ippo;xi poh;yi bao;Іпох;Ипо;Ипох;איפוה;ايبوه;ایپو;ایپوه;ஈப்போ;อีโปห์;အီပိုးမြို့;イポー;怡保;이포; +city::1734705;Kuala Terengganu;Bandar Kuala Terengganu;Kuala Terenganu;Kuala Terengganu;Kuala Trengganu;Kuala-Trenganu;Kuala-Trengganu;Kvala Terenganu;TGG;Trengganu;Tringano;Tringganu;gua la deng jia lou;kaw la trang kanu;kuallateuleng-ganu;kuaratorenganu;kwala trnghanw;kwala tyrnganw;Куала Теренгану;Куала Теренггану;Куала-Тренгану;Куала-Тренггану;كوالا ترنغانو;کوالا تیرنگانو;กัวลาตรังกานู;クアラトレンガヌ;瓜拉登嘉楼;쿠알라트렝가누; +city::1734759;Malacca;Bandaraya Melaka;MKZ;Malaca;Malacca;Malacca Town;Malaka;Malakka;Melaka;ma liu jia;marakka;Малакка;マラッカ;马六甲; +city::1734798;Semenyih;Semenyeh;Semenyih;Semeyih; +city::1734810;Seremban;Fu-yung-su;Fû-yûng-sṳ;Gorad Serehmban;Seremban;cirampan;fu rong shi;sarembana;seuleumban;srem ban;srmban;surenban;Горад Серэмбан;Серембан;سرمبان;सरेंबान;சிரம்பான்;സിരമ്പാൻ;สเรมบัน;スレンバン;芙蓉市;스름반; +city::1734815;Port Dickson;Arang Arang Anchorage;Arang-Arang;Port Dickson; +city::1734821;Sepang;Sepang;Сепанг; +city::1735022;Temerluh;Temerloh;Temerluh; +city::1735076;Butterworth;BWH;Batervortas;Butterworth;bat te xrweirth;batawasu;batrwwrt;bei hai;beoteowoseu;kolappurai;باتروورت;கோலப்புறை;บัตเตอร์เวิร์ท;バターワース;北海;버터워스; +city::1735077;Perai;Perai;Prai; +city::1735079;Bukit Mertajam;Bukit Mertajam; +city::1735093;Tasek Glugor;Tasek Gelugor;Tasek Gelugur;Tasek Glugor; +city::1735106;George Town;Dzhordzhtaun;Dzordz Taun;Dzordztauna;Dzordztaunas;Džordžtauna;Džordžtaunas;George Town;Georgetown;Gorgtauno;Khiau-chhu-su;Khiâu-chhṳ-sṳ;PEN;Penang;Pinang;Pinang George Town;cxrc thawn;jarj tavun;jarja ta'una;jojitaun;jrj tawn pnang;qiao zhi shi;Ĝorĝtaŭno;Џорџ Таун;Джорджтаун;גורג טאון;جارج ٹاؤن، پینانگ;جرج تاون پنانگ;जर्ज टाउन;ஜார்ஜ் டவுன்;ജോർജ്ജ് ടൗൺ;จอร์จทาวน์;ပီနန်မြို့;ჯორჯტაუნი;ジョージタウン;乔治市;喬治市;조지타운; +city::1735150;Rawang;Rawang; +city::1735158;Petaling Jaya;Petaling Dzhaja;Petaling Jaya;Petaling-Dzhaja;ba da ling zai ye;bytalyngh jaya;petalin jeya;peutallingjaya;ptalyng jaya;pytalnyg jaya;Петалинг Джая;Петалинг-Джая;بيتالينغ جايا;پتالینگ جایا;پیتالنیگ جایا;பெடாலிங் ஜெயா;プタリン・ジャヤ;八打灵再也;프탈링자야; +city::1735161;Kuala Lumpur;Gizlungzpoh;Gorad Kuala-Lumpur;KUL;Kouala Loumpou;Kouala Loumpour;Kuala Lumpor;Kuala Lumpur;Kuala-Lumpur;Kuala-Lumpuro;Kualae-Lumpur;Kualalumpura;Kualalumpūra;Kvala Lumpuras;Kvala Lumpūras;Kúala Lúmpúr;ji long po;kaulalampur;kawlalampexr;kolalampur;ku'a lalampura;ku'ala lupura;ku'alalampura;ku'alalumpura;kuallalumpuleu;kuararunpuru;kuyalalamapura;kvalalampura;kwala lambwr;kwala lmpwr;kwalalampwr;kwalalmbwr;kwalalmpwr;kwalalwmpwr;kۇyalalۇmpۇr;Κουάλα Λουμπούρ;Горад Куала-Лумпур;Куалæ-Лумпур;Куала Лумпур;Куала-Лумпур;Կուալա Լումպուր;קואלה לומפור;كوالا لامبور;كوالالمبور;كۇئالالۇمپۇر;کوالا لمپور;کوالالامپور;کوالالمپور;کوالالومپور;कुआ लालम्पुर;कुआलालम्पुर;क्वालालंपूर;কুয়ালালামপুর;ਕੁਆਲਾ ਲੁੰਪੁਰ;କୁଆଲାଲୁମ୍ପୁର;கோலாலம்பூர்;ಕೌಲಾಲಂಪುರ್;കോലാലമ്പൂർ;กัวลาลัมเปอร์;ཁལ་ལུང་ཕུ།;ကွာလာလမ်ပူမြို့;კუალა-ლუმპური;ኩዋላ ሉምፑር;クアラルンプール;吉隆坡;쿠알라룸푸르; +city::1735227;Kuantan;KUA;Koan-tan-su;Kuala Kuantan;Kuala Kuatan;Kuantan;Kôan-tan-sṳ;guan dan;kuantan;kuvantan;kvantana;kwantan;kwn tan;Куантан;كوانتان;کوانتان;क्वांतान;குவாந்தான்;กวนตัน;クアンタン;关丹;쿠안탄; +city::1735459;Teluk Intan;Telok Anson;Teluk Anson;Teluk Intan;an shun;an shun shi;teluk intan;terokkuintan;teullug-intan;தெலுக் இந்தான்;テロックインタン;安顺;安顺市;틀룩인탄; +city::1735498;Sungai Petani;Sungai Patani;Sungai Petani;Sungei Patani; +city::1735634;Kuching;KCH;Kuching;Kucingas;Kučingas;gu jin;ku ching;kuchin;kuching;kucinga;kwchyng;kwtshyngh;qwzyng;Кучинг;קוצינג;كوتشينغ;کوچینگ;कुचिंग;กูชิง;クチン;古晉;쿠칭; +city::1735902;Sibu;Fort Brooke;SBW;Siboe;Sibu;shi wu;shibu;sibu;sybw;Сибу;سيبو;سیبو;シブ;詩巫;시부; +city::1736278;Kangar;Kangar;Perlis;Poelit;Polit;jia yang;kang-aleu;kangr;kanjar;kankar;kngr;Кангар;كانجار;کانگر;کنگر;கங்கார்;加央;캉아르; +city::1736302;Jitra;Jitra; +city::1736309;Alor Setar;AOR;Alor Setar;Alor Setaras;Alor Star;Alor-Setar;Alor-Star;Alostar;Alur Setar;Saiburu;Thai;alloleuseutaleu;alor star;alwr star;alwr sytar;arosuta;xlxrstar;ya luo shi da;Алор Стар;Алор-Сетар;Алор-Стар;ألور ستار;الور ستار;الور سیتار;அலோர் ஸ்டார்;อลอร์สตาร์;アロースター;亚罗士打;亞羅士打;알로르스타르; +city::1736376;Kota Bharu;Bharu;KBR;Khota Baharu;Khota Bahru;Ko-ta-hap-lu-su;Kota Baharu;Kota Bahru;Kota Baru;Kota Bharu;Kota-Baru;Kô-tá-ha̍p-lû-sṳ;ge da ba lu;kotabalu;kotabaru;kwta bharw;Кота Бару;Кота-Бару;كوتا بهارو;โกตาบารู;コタバル;哥打巴鲁;코타바루; +city::1737486;Bintulu;BTU;Bintulu;bintullu;byntwlw;min dou lu;Бинтулу;بينتولو;بینتولو;民都魯;民都鲁;빈툴루; +city::1738050;Miri;Bandar Miri;MYY;Miri;mei li;mili;miri;myry;Мири;ميري;میری;മിറി;მირი;ミリ;美里;미리; +city::1738294;Ulu Tiram;Ulu Tiram;Ulu Tiram Village; +city::1764160;Kampung Sungai Ara;Kampong Sungai Ara;Kampung Sungai Ara;Sungei Ara; +city::1769612;Kampong Dungun;Kampong Dungan;Kampong Dungun; +city::1770351;Kampung Bukit Baharu;Kampong Bukit Baru;Kampung Bukit Baharu; +city::1771023;Kampung Baru Subang;; +city::1771304;Kampong Baharu Balakong;Balakong;Kampong Baharu Balakong; +city::7302815;Bandar Labuan;; +city::10792382;Putra Heights;; +city::1024552;Xai-Xai;Chai Chai;Joa Belo;Joao Belo;João Belo;Sai Sajus;Sai-Sai;Shai-Shai;VJB;Vila de Joao Belo;Vila de João Belo;Vila-Joao-Belo;Vila-João-Belo;Xai Xai;Xai-Xai;sai sai;shai-shai;shaishai;shay-shay;syaisyai;Šai Šajus;Σάι-Σάι;Шаи-Шаи;Шаї-Шаї;شای-شای;შაი-შაი;シャイシャイ;賽賽;샤이샤이; +city::1024696;Dondo;Dondo;Vila do Dondo;Дондо; +city::1026014;Tete;TET;Tete;Tetė;Vila-de-Santiago-Maior;tai te;tete;teteu;Τέτε;Тете;تیتے، موزمبیق;ტეტე;テテ;太特;테트; +city::1028079;Ressano Garcia;Resano Garcia;Ressano Garcia; +city::1028434;Quelimane;Gorad Kelimaneh;Kelimane;Kelimanė;Quelimane;UEL;ke li ma nei;kellimaneu;kerimane;kylymany;Κελιμάνε;Горад Келіманэ;Келимане;Келімане;کیلیمانی;კელიმანე;ケリマネ;克利馬內;켈리마느; +city::1028918;Pemba;POL;Pemba;Pempa;Porto Amelia;pemba;penba;peng ba;pymba mwzmbyq;Πέμπα;Пемба;پیمبا، موزمبیق;პემბა;ペンバ;彭巴;펨바; +city::1033356;Nampula;APL;Nampoula;Nampula;nampulla;nampwla;nan pu la;nanpura;Ναμπούλα;Нампула;نامپولا;ნამპულა;ナンプラ;楠普拉;남풀라; +city::1035025;Nacala;Cidade de Nacala;Fernao Veloso;Fernão Veloso;Gorod-de-Nakala;MNC;Maaia;Maiaia;Nacala;Nacala-Porto;Город-де-Накала; +city::1037125;Montepuez;MTU;Montepuez;Montepveze;Vila de Montepuez;Монтепвезе; +city::1037390;Ilha de Mocambique;Ilha de Mocambique;Ilha de Moçambique;Mocambique;Mozambique;Moçambique; +city::1039536;Maxixe;Maxixe; +city::1039854;Matola;Cidade da Matola;Matola;Vila Salazar;Матола; +city::1040652;Maputo;Can Pfumo;Gorad Maputu;Kapfumo;Lourenco Marques;Lourenço Marques;MPM;Mabuto;Mabutu;Mapouto;Maputo;Maputu;Mapútó;ma pu to;ma pu tuo;mabwtw;maputo;maputto;maputu;mapwtw;mpwtw;Μαπούτο;Горад Мапуту;Мапуто;Мапуту;Մապուտու;מפוטו;مابوتو;ماپوتو;ماپوتۆ;ماپوٹو;मापुतो;ਮਾਪੂਤੋ;மபூட்டோ;มาปูโต;མ་པུ་ཊོ།;მაპუტუ;ማፑቶ;マプト;马普托;마푸토;마푸투; +city::1043893;Lichinga;Lichinga;Lishinga;Lisinga;Lišinga;VXC;Vila Cabral;li xin jia;lishinga;lising-ga;lychynga;rishinga;Лишинга;Лішинга;لیچینگا;ლიშინგა;リシンガ;利欣加;리싱가; +city::1045114;Inhambane;INH;In'jambane;Inhambane;Injambane;Injambanė;aynhambanh;iniambane;inyambaneu;inyanbane shi;yi ni yang ba nei;Іньямбане;Иньямбане;انہامبان;اینهامبانه;ინიამბანე;イニャンバネ市;伊尼揚巴內;이냠바느; +city::1047660;Cuamba;Cuamba;Cuanda;FXO;Guamba;Kwamba;Mucuamba;Mukwamba;Nova Freixo;ku an ba;kua mu ba;库安巴;誇姆巴; +city::1048364;Chokwe;Chokue;Chokué;Chokwe;Chokwé;Choque;Chókwè;TGS;Trigo Morais;Trigo de Morais;Vila Trigo de Morais; +city::1049261;Chimoio;Chimoio;Chimoyo;Shimojo;Simojas;VPY;Vila Pery;shimoio;shymwyw;simoiu;xi mo you;Šimojas;Шимойо;شیمویو;შიმოიო;希莫尤;시모이우; +city::1049861;Chibuto;Chibuto;Vila do Chibuto; +city::1052373;Beira;BEW;Beira;Bejra;bei la;beila;beira;byra mwzambyk;byyra mwzmbyq;Μπέιρα;Беира;Бейра;بیئرا، موزمبیق;بیرا، موزامبیک;ბეირა;ベイラ;贝拉;베이라; +city::1052944;Antonio Enes;Angoche;Antonio Enes;Antonio Engs;Antonio Ennes;António Enes;Vila de Antonio Enes;Vila de António Enes; +city::3352136;Windhoek;Gorad Vindkhuk;Gouintchouk;Vindguk;Vindhuk;Vindhuka;Vindhukas;Vindhuko;Vindkhuk;Vinduque;Vindxuk;Vintchouk;WDH;Windhoek;Windhuk;Windoek;Windoèk;Wynhoeke;binteuhukeu;u~intofukku;vatahuka;vindahoka;vintok;wen de he ke;wen he ke;win dhuk;wwynthwq;wyndhwk;wyndhwq;wyndھwk;wynٹہwk;Βίντχουκ;Γουίντχουκ;Виндхук;Віндгук;Горад Віндхук;Վինդհուկ;ווינטהוק;וינדהוק;ونڈہوک;ويندهوك;ویندهوک;ویندھوک;وینٹہوک;विंडहोक;ਵੰਟਹੁਕ;விந்தோக்;วินด์ฮุก;ཝིན་ཌི་ཧོཡིཀ།;ვინდჰუკი;ዊንድሁክ;ウィントフック;温得和克;溫得和克;溫荷克;빈트후크; +city::3353383;Rundu;NDU;Rundu;Runtu;long du;lundu;rwndw;Рунду;روندو;龍杜;룬두; +city::3359638;Walvis Bay;Gorad Uolvis-Behj;Uolfish Bej;Uolfish-Bej;Valvis Bej;Volfis-Bej;Volvis Bejus;Volvis Bėjus;WVB;Walfisch-Bucht-Niederland;Walfischbucht;Walvis Bay;Walvisbaai;jing wan gang;u~orubisubei;wlfs by;wolbiseubei;Валвис Беј;Волфіш-Бей;Горад Уолвіс-Бэй;Уолфиш Бей;Уолфиш-Бей;ואלוויס ביי;ولفس بي;ウォルビスベイ;鲸湾港;월비스베이; +city::2139521;Noumea;NOU;Nomea;Noumea;Nouméa;Numea;Numeja;Numeo;Numėja;Port de France;nu me xa;nu mei a;nume'a;numea;numiya;nwmya;Νουμεά;Нумеа;נומאה;نومئا;نوميا;नूमेआ;நூமியா;นูเมอา;ნუმეა;ヌメア;努美阿;누메아; +city::2437798;Zinder;Gorad Zindehr;Sinder;ZND;Zinder;Zinderis;jandeleu;jin de er;sinde xr;zanderu;zndr;zyndr;Горад Зіндэр;Зиндер;Зіндер;زندر;زيندر;ซินเดอร์;ザンデール;津德尔;잔데르; +city::2439376;Tahoua;THZ;Tahoua;Tahua;Takhua;ta wa;taua;Тахуа;تاہؤا;タウア;塔瓦;타우아; +city::2440485;Niamey;Gorad Nijamej;NIM;Niame;Niamei;Niamej;Niameja;Niamejus;Niameo;Niamey;Niamè;Niamėjus;Nijamej;Níamey;ni ya mei;ni'ami;niame;niamei;nixame;niyame;niyami;nyamy;nyʼmyy;Νιαμέι;Νιαμέυ;Горад Ніямей;Ниамей;Нијамеј;Ніамей;Նիամեյ;ניאמיי;نيامي;نیامی;نیامەی;ܢܝܐܡܝ;नियामे;নিয়ামে;ਨਿਆਮੀ;நியாமி;นีอาเม;ནི་ཡ་མེ།;ნიამეი;ኒያሜ;ニアメ;尼亞美;니아메; +city::2441291;Maradi;MFQ;Maradi;Maradis;maladi;maradi;marady nayjr;Маради;مارادی، نائجر;マラディ;마라디; +city::2447938;Alaghsas;Alaghsas;Alarsas; +city::2448085;Agadez;AJY;Agades;Agadesas;Agadez;Agadèz;Ankantez;a jia de zi;agadeja;agadejeu;agadesi;agadesu;agadyz;aghadys;Αγκαντέζ;Агадез;Агадес;אגדז;أغاديس;اگادیز;अगादेज;აგადესი;アガデス;阿加德茲;아가데즈; +city::2317765;Zaria;ZAR;Zaria;Zarija;Zariya;Zarja;jalia;zari'a;zaria;zarya;zha li ya;Зариа;Заря;زاريا;ਜ਼ਾਰੀਆ;ザリア;扎里亚;자리아; +city::2318044;Yola;Jola;YOL;Yola;yolla;yora;yue la;ywla nayjyrya;ywla nyjryh;Йола;یولا، نائجیریا;یولا، نیجریه;ヨラ;約拉;욜라; +city::2318921;Wukari;Ukari;Wukari; +city::2319133;Warri;Bappi;Bаppи;QRW;Varri;Warri;wa li;wali;wari;wary;Варри;واري;واری;ワリ;瓦里;와리; +city::2319480;Uyo;QUO;Uyo; +city::2319668;Uromi;; +city::2320576;Umuahia;Umuahia;Umuahia-Ibeku;Umuakhija;umuahia;wu mu a xi ya;Умуахия;Умуахія;اومواہیا;乌穆阿希亚;우무아히아; +city::2320829;Ughelli;Ughelli; +city::2320831;Ugep;Ugep; +city::2320920;Uga;Uga; +city::2322794;Suleja;Abudzha;Abuja;Sulaija;Suleija;Suleja;Абуджа; +city::2322911;Sokoto;SKO;Socoto;Sokotas;Sokoto;Sokoto stad;Sókótó;sokoto;suo ke tuo;Сокото;სოკოტო;ソコト;索科托;소코토; +city::2323390;Saki;Saki;Shaki;Саки; +city::2323411;Shagamu;Sagamu;Shagamu; +city::2323675;Sapele;Sapele; +city::2324767;Potiskum;Potiskum;Putuskum; +city::2324774;Port Harcourt;Gorad Port-Kharkort;PHC;Port Harcourt;Port Harkortas;Port Kharkurt;Port-Kharkort;Ugwu Ocha;Ugwu Ọcha;bwrt harkwrt;ha ke te gang;poteuhakeoteu;potohakoto;pwrt hrqwrt;Горад Порт-Харкорт;Порт Харкурт;Порт-Харкорт;פורט הרקורט;بورت هاركورت;ポートハーコート;哈科特港;포트하커트; +city::2324857;Pindiga;Pindiga; +city::2325161;Ozubulu;Ozubulu; +city::2325200;Oyo;Oio;Oió;Ojo;Oyo;Ойо; +city::2325249;Oyan;; +city::2325314;Owo;Ovo;Owo;Ово; +city::2325330;Owerri;Overi;Overri;Owerre;Owerri;Owẹrrẹ;QOW;ao wei li;awwyry;awyry;oweli;Овери;Оверри;أويري;اوویری;奧韋里;오웨리; +city::2325590;Osogbo;Eshogbo;Oshogbo;Osogbo; +city::2325733;Orita Eruwa;; +city::2326016;Onitsha;Onicha;Onitsha;Onịchạ;QNI;ao ni cha;onicha;Онитша;Онича;Оніча;オニチャ;奧尼查;오니차; +city::2326171;Ondo;Ondo;Ондо; +city::2326302;Olupona;Olupona;Olupono; +city::2326899;Okrika;Okrika; +city::2327143;Okigwe;Okigwe;Okigwi; +city::2327220;Okene;Okene;Okeni; +city::2327223;Oke Mesi;Oke Mesi;Oke Messi; +city::2327494;Ohafia-Ifigh;; +city::2327827;Ogaminana;Ogaminan;Ogaminana; +city::2327879;Offa;Offa;Оффа; +city::2328090;Ode;Awde;Oda;Ode;Ода; +city::2328185;Obonoma;Abonnema;Obonema;Obonoma; +city::2328617;Numan;Numan; +city::2328684;Nsukka;Nsukka;QNK;Нсукка; +city::2328765;Nnewi;Newi;Nnewi;Nnjuvi;Ннюви; +city::2328790;Nkwerre;Nkwerre; +city::2328811;Nkpor;Mkpor;Nkpor; +city::2328952;Nguru;N'gourou;Nguru;N’gourou; +city::2329821;Mubi;Mubi;Муби; +city::2330028;Modakeke;; +city::2330100;Minna;MXJ;Minna;ming na;minna;myna nayjyrya;Минна;Мінна;مینا، نائجیریا;明納;민나; +city::2331005;Malumfashi;Malumfashi; +city::2331140;Makurdi;MDI;Makurdi;Makurdu;ma ku er di;makuleudi;makwrdy;Макурди;Макурді;ماکوردی;马库尔迪;마쿠르디; +city::2331447;Maiduguri;MIU;Maidiguri;Maidugari;Maiduguri;Maiduguris;Majduguri;mai du gu li;maido~uguri;maiduguli;maydwghwry;mydwgwry;Маидугури;Майдугури;Майдугурі;מידוגורי;مايدوغوري;マイドゥグリ;邁杜古里;마이두구리; +city::2331939;Lokoja;Lairdstown;Lokoja;Zokoja; +city::2332079;Lere;Lera;Lere;Leri;Лера; +city::2332357;Lalupon;; +city::2332459;Lagos;Eko;Gorad Lagas;LOS;Lacupolis;Lagos;Lagos shaary;Lagosa;Lagosas;Lagoso;Laguosos;Laqos;Logos;la ge si;lageas;laghws;lagos;lagosa;lagoseu;lagosi;laguseu;lagws;lajws;lakos;legosa;lek xs;ragosu;Èkó;Λάγος;Горад Лагас;Лагос;Лагос шаары;Лаґос;Լագոս;לאגאס;לאגוס;لاجوس;لاغوس;لاگوس;لاگۆس;लागोस;লেগোস;ਲਾਗੋਸ;લાગોસ;லாகோஸ்;లాగోస్;ಲಾಗೊಸ್;ലാഗോസ്;เลกอส;လေးဂို့စ်မြို့;ლაგოსი;ሌጎስ;ラゴス;拉哥斯;라고스;라구스; +city::2332504;Lafiagi;; +city::2332515;Lafia;Lafia;Lafia Beriberi; +city::2333604;Kuje;Kuje; +city::2334008;Kontagora;Kontagora; +city::2334327;Kisi;Kishi;Kisi; +city::2334652;Keffi;; +city::2334756;Kaura Namoda;Kaura Namoda; +city::2334802;Katsina;DKA;Kacina;Katsina;Kàtsínà;ka qi na;kachina;Катсина;卡齐纳;카치나; +city::2335204;Kano;Byen Kano;Cano;Gorad Kano;KAN;Kanas;Kano;Kánò;ka nuo;kano;kanw;kanw nyjryh;qnw;Горад Кано;Кано;קנו;كانو;کانو;کانو، نیجریه;कानो;ਕਾਨੋ;கனோ;カノ;卡諾;카노; +city::2335614;Kagoro;Kagoro; +city::2335713;Kafanchan;Kafachan;Kafanchan;Kafanchan Junction;Kajanchan; +city::2335727;Kaduna;Gorad Kaduna;KAD;Kadun;Kaduna;Kaduno;Kàdúná;ka du na;kado~una;kaduna;kadwna;qdwnh;Горад Кадуна;Кадуна;קדונה;كادونا;کادونا;ਕਾਦੂਨਾ;カドゥナ;卡杜納;카두나; +city::2335953;Jos;Dzhos;Dzos;Dżos;JOS;Jos;joseu;josu;jws;jws nayjyrya;qiao si;Џос;Джос;Йос;جوس;جوس، نائجیریا;ジョス;乔斯;조스; +city::2336056;Jimeta;Jimeta; +city::2336237;Jega;; +city::2336589;Jalingo;Jalingo; +city::2336905;Iwo;Ivo;Iwo;Иво; +city::2337148;Isieke;Isieke; +city::2337207;Ise-Ekiti;Ise;Ise-Ekiti; +city::2337352;Ipoti;; +city::2337490;Inisa;; +city::2337639;Ilorin;Gorad Iloryn;ILR;Illorin;Ilorin;Ilorinas;alwrn;illolin;irorin;yi luo lin;Горад Ілорын;Илорин;אילורין;الورن;イロリン;伊洛林;일로린; +city::2337659;Ilobu;Ilobu; +city::2337704;Ilesa;Ilesa;Ilesha; +city::2337765;Ila Orangun;Ila;Ila Orangun; +city::2338106;Ikot Ekpene;Ikot Ekpene; +city::2338242;Ikom;; +city::2338269;Ikirun;Ikirun; +city::2338273;Ikire;Ikire; +city::2338287;Ikere-Ekiti;Ikare;Ikere;Ikere-Ekiti;Ikerre; +city::2338313;Ikeja;Ikeja; +city::2338385;Ijero-Ekiti;Ijero;Ijero-Ekiti; +city::2338400;Ijebu-Ode;Ijebu Ode;Ijebu-Ode; +city::2338401;Ijebu-Jesa;Ijebu-Ijesa;Ijebu-Ijesha;Ijebu-Jesa;Ijebu-Jesha; +city::2338403;Ijebu-Igbo;Ijebu-Igbo; +city::2338497;Ihiala;Ihiala; +city::2338630;Igede-Ekiti;Igbede;Igede;Igede-Ekiti; +city::2338640;Igbo-Ukwu;Igbo;Igbo-Ukwu; +city::2338669;Igbo-Ora;Igbo-Awra;Igbo-Ora; +city::2338711;Igboho;Igboho; +city::2338810;Igbara-Odo;Igbara-Odo;Igbarra-Odo; +city::2338876;Ifo;Ifaw;Ifo; +city::2339150;Idanre;; +city::2339156;Idah;Idah; +city::2339354;Ibadan;Gorad Ibadan;IBA;Ibadan;Ibadan shaary;Ibadana;Ibadanas;Ibadano;Ibadán;abadan;aybadan;ibadan;ibadana;yi ba dan;Ìbàdàn;İbadan;Ібадан;Горад Ібадан;Ибадан;Ибадан шаары;איבדאן;إبادان;إيبادان;ابادان;ਇਬਾਦਾਨ;イバダン;伊巴丹;이바단; +city::2339631;Hadejia;Hadejia; +city::2339937;Gusau;Gusau;QUS;Гусау; +city::2340451;Gombe;GMO;Gombe; +city::2341355;Gbongan;Gbongan; +city::2341656;Gashua;Gashua; +city::2342192;Gamboru;Gambaru;Gambaru Ngala;Gamboru;Gamboru Ngala; +city::2342490;Funtua;Funtua;Puntua; +city::2342628;Fiditi;; +city::2342883;Ezza-Ohu;; +city::2343093;Esuk Oron;; +city::2343252;Epe;Ehpe;Epe;Epeh;Эпе; +city::2343270;Enugu-Ukwu;Enugu;Enugu-Ukwu;Enugwu-Ukwu; +city::2343279;Enugu;ENU;Ehnugu;Enuga;Enugu;Enugwu;Enúgwu;ai nu gu;anwghw;anwgw;enugu;Енугу;Энугу;إنوغو;انوگو;Ẹnúgu;エヌグ;埃努古;에누구; +city::2343299;Emure-Ekiti;Emure;Emure-Ekiti; +city::2343641;Ekpoma;Ekpoma; +city::2343784;Ejigbo;Ejigbo; +city::2343822;Eha Amufu;; +city::2343983;Efon-Alaaye;Effon-Alaiye;Efon;Efon Alaaye;Efon Alaaye-Ekiti;Efon Alaye;Efon-Alaaye;Efon-Alaiye; +city::2343985;Effium;Effium; +city::2344082;Ebute Ikorodu;Awja-Ikoradu;Ebute Ikorodu;Ebute-Egga; +city::2345096;Daura;; +city::2346229;Calabar;CBQ;Calabar;Kalabar;Kalabaras;Kalabaro;ka la ba er;kalabar;kallabaleu;Калабар;کالابار;卡拉巴尔;칼라바르; +city::2346615;Buguma;Bugama;Buguma; +city::2346995;Biu;Biu; +city::2347059;Birnin Kebbi;Birnin Kebbi; +city::2347209;Bida;Bida;Бида; +city::2347283;Benin City;BNI;Benim;Benin;Benin City;Benin Siti;Benin by;Benin-Siti;Benin-Stadt;Benin-stad;Beninas;Beninborg;Beninurbo;Benínborg;Bénin;Ciudad de Benin;Ciudad de Benín;Ilu Benin;Kota Benin;Thanh pho Benin;Thành phố Benin;bei ning cheng;beni n si ti;benina sahira;benina siti;beninshiti;beninsiti;bnyn;Ìlú Benin;Бенин;Бенин-Сити;Бенін-Сіті;بنين;بنین;بینن شہر;बेनिन सिटी;ਬੇਨਿਨ ਸ਼ਹਿਰ;เบนินซิตี;ベニンシティ;贝宁城;베닌시티; +city::2347303;Bende;Bende; +city::2347470;Bauchi;BCU;Bauchi;Baucis;Bauczi;Baučis;Yakoba;Yakubu;bao qi;Баучи;包奇; +city::2347954;Bama;Bama; +city::2348595;Azare;Azare; +city::2348773;Awka;Akwa;Avka;Awka;Oka;ao ka;auka;awka;Óká;Авка;اوکا;奧卡;아우카; +city::2348892;Auchi;Auchi; +city::2349276;Asaba;ABB;Asaba;Асаба; +city::2349529;Aramoko-Ekiti;Ara;Aramoko;Aramoko-Ekiti;Araomoko Ekiti; +city::2349558;Apomu;; +city::2350249;Amaigbo;Amaigbo; +city::2350841;Akure;AKR;Akuce;Akure;Akurė;a ku lei;akule;Àkúrẹ́;Акуре;اکورے;阿庫雷;아쿠레; +city::2350886;Aku;Aku; +city::2351740;Agulu;Agulu; +city::2351979;Agbor;Afbor;Agbor;Agbor-BoIIboji;Агбор; +city::2352250;Afikpo;Afikpo;Ehugbo; +city::2352379;Ado-Ekiti;Ado;Ado-Ekiti; +city::2352778;Abuja;ABV;Abodza;Abodža;Abouja;Abuca;Abudz;Abudza;Abudzha;Abudża;Abudž;Abudža;Abugia;Abugo;Abuja;Abuya;Abuzha;Abuĝo;Abùjá;Ampouza;Gorad Abudzha;a bu gu;a bu jia;abuja;abwja;apuja;xabu ca;yەbwwja;ʼbwgh;Αμπούζα;Абуджа;Абужа;Абуџа;Абуҷа;Горад Абуджа;Աբուջա;אבוגה;אבודזשא;آبوجا;أبوجا;ئەبووجا;ابوجا;अबुजा;আবুজা;ਅਬੁਜਾ;ଅବୁଜା;அபுஜா;അബുജ;อาบูจา;ཨ་པུ་ཅ།;အဘူဂျာမြို့;აბუჯა;አቡጃ;アブジャ;阿布賈;阿布贾;아부자; +city::2352947;Abeokuta;Abeokuta;Abẹ́òkúta;QAT;a bei ao ku ta;abe-okuta;abeokuta;abwkata;abywkwta;Абеокута;אבאוקוטה;أبيوكوتا;ابوکاتا;ابیوکوتا;アベオクタ;阿贝奥库塔;아베오쿠타; +city::2353099;Abakaliki;Abakaliki;a ba ka li ji;阿巴卡利基; +city::2353151;Aba;Aba;Aba i Nigeria;Abá;QAX;a ba;aba;aba abya;Аба;Աբա;אבה;آبا;آبا، ابیا;აბა;アバ;阿巴;아바; +city::3616035;Tipitapa;Tipitapa;Типитапа; +city::3617459;Nueva Guinea;Colonia Nueva Guinea;NVG;Nueva Guinea; +city::3617708;Matagalpa;Matagal'pa;Matagalpa;Матагальпа; +city::3617723;Masaya;Masaja;Masaya;ma sa ya;masaia;masaya;Масая;มาซายา;მასაია;マサヤ;馬薩亞; +city::3617763;Managua;Gorad Managua;MGA;Managoua;Managua;Managuae;Managva;Managvo;Managûa;Manahuac;Manankoua;Manaqua;Manawa;Manágua;Mānāhuac;ma na gua;managhwa;managu'a;managua;managva;managwa;manakaw;manakuva;Μανάγκουα;Μανάγουα;Горад Манагуа;Манагва;Манагуæ;Манагуа;Մանագուա;מנגואה;ماناغوا;ماناگوآ;ماناگوا;ماناگۇئا;मानाग्वा;ਮਾਨਾਗੁਆ;மனாகுவா;มานากัว;མ་ན་གུ་འ།;მანაგუა;ማናጓ;マナグア;馬拿瓜;馬納瓜;마나과; +city::3618030;Leon;Gorad Leon;Leon;Leonas;León;lai ang;le-on;leoni;lywn nkaragwa;reon;Λεόν;Горад Леон;Леон;לאון;لیون، نکاراگوا;ლეონი;レオン;莱昂;레온; +city::3618908;Juigalpa;Juigalpa; +city::3618929;Jinotega;Jinotega;Khinotega;Хинотега; +city::3619136;Granada;Gorad Granada;Granada;Granadae;Granado;Grenada;ge la na da;geulanada;granada;grynada nkaragwa;guranada;Γρανάδα;Горад Гранада;Гранадæ;Гранада;Гренада;گرینادا، نکاراگوا;გრანადა;グラナダ;格拉纳达;그라나다; +city::3619194;Esteli;Ehsteli;Esteli;Estelí;ai si te li;aystaly;eseutelli;esuteri;Εστελί;Эстели;ایستالی;ესტელი;エステリ;埃斯特利;에스텔리; +city::3619267;El Viejo;Ehl'-V'ekho;El Viejo;Viejo;Эль-Вьехо; +city::3620381;Chinandega;Chinandega;Chinandege;Чинандеге; +city::3828262;Ciudad Sandino;Ciudad Sandino; +city::2743477;Zwolle;Gemeen Zwolle;Gorad Zvolle;Svolla;Swol;Zvole;Zvolle;Zvolė;Zwolle;ci wo lei;jeubolleo;jhvola;s wol lex;zfwlh;zi wo lei;zuvu~ore;zvole;zwwlh;Горад Зволле;Зволе;Зволле;Զվոլե;زفوله;زولے;زووله;झ्वोला;ซโวลเลอ;ზვოლე;ズヴォレ;兹沃勒;즈볼러; +city::2743856;Zoetermeer;Zeutermaer;Zoetermeer;zwtrmyyr;זוטרמייר; +city::2743977;Zeist;Seist;Zajst;Zeist;Zejst;Zeyst;jeiseuteu;zai si te;zaisuto;zayst;Зајст;Зейст;Զեյստ;زايست;زایست;ザイスト;宰斯特;제이스트; +city::2744114;Zaanstad;Zaanstad; +city::2744118;Zaandam;Zaandam;Zandam;Zandamas;jandam;zan dan;zan dm;zandamu;Заандам;Зандам;Զանդամ;زان دم;ザーンダム;赞丹;잔담; +city::2745467;Vlaardingen;Vlaardinge;Vlaardingen; +city::2745641;Venlo;Fenlo;Venlas;Venlo;Venlonum;Venloo;fen luo;fenro;fnlw;wynlw;Φένλο;Венло;فنلو;وینلو;フェンロー;芬洛; +city::2745673;Velsen-Zuid;Velsen;Velzen; +city::2745774;Veenendaal;QVX;Veenendaal;Venendaal; +city::2745912;Utrecht;Gemeente Utrecht;Gorad Utrehkht;Magaalada Utrecht;Outrechte;Owtrext;Traiectum ad Rhenum;UTC;Utert;Utrech;Utrecht;Utrechtas;Utreht;Utrehta;Utrei;Utrekht;Utrekht khot;Utreque;Utrext;awtrkht;utrekhta;witeuleheuteu;wu de lei zhi;yu the rkt;yutorehito;ywtrkht;ywtrykht;Ουτρέχτη;Горад Утрэхт;Утрехт;Утрехт хот;Ուտրեխտ;אוטרכט;أوترخت;اوترخت;یوترخت;یوتریخت;ܐܘܛܪܝܟܛ;उट्रेख्त;ยูเทรกต์;ယူးထရက်မြို့;უტრეხტი;ユトレヒト;乌得勒支;烏德勒支;위트레흐트; +city::2746301;Tilburg;Gorad Cilburg;Tilburch;Tilburg;Tilburga;Tilburgas;Tilburgo;Tilia;di er bao;thi lburk;tilbwileuheu;tiruburufu;tylbwrkh;Горад Цілбург;Тилбург;Тілбург;تیلبورخ;ٹلبرگ;ทิลบืร์ก;ტილბურგი;ティルブルフ;蒂尔堡;틸뷔르흐; +city::2746932;Spijkenisse;Spijkenisse; +city::2747351;'s-Hertogenbosch;'s Bosch;'s-Hertogenbosch;Bois-le-Duc;Bolduque;Boscoducale;De Bosk;Den Bosch;Hertogenbosch;Herzogenbusch;Khertogenbos;Oeteldonk;Silva Ducis;Хертогенбос;’s-Hertogenbosch; +city::2747373;The Hague;'s-Gravenhage;A Haia;An Haig;An Háig;Chage;D'n Haog;De Haach;Den Haag;Gaaga;HAG;Haag;Hag;Haga;Hago;Hague;Hága;Hāga;Khag;Khaga;L'Aia;La Haia;La Haya;La Haye;Lahey;The Hague;haaga;hagu;hai ya;heigeu;lahay;lahh;Χάγη;Гаага;Хаг;Хага;האג;لاهاي;لاهه;ჰააგა;ハーグ;海牙;헤이그; +city::2747596;Schiedam;Schidamas;Schiedam;Skhidam;Skiedam;Sxidam;askhydam;si xi dan;ski dam;Схидам;Շխիդամ;اسخیدام;สกีดาม;斯希丹; +city::2747891;Rotterdam;Gorad Ratehrdam;RTM;Roterdam;Roterdama;Roterdamas;Roterdami;Roterdamo;Roterdan;Roterdao;Roterdão;Roterntam;Roterodamum;Rotterdam;Rottérdam;Róterdam;Róterdan;loteleudam;lu te dan;rattartem;rotaradema;rotterudamu;rtrdam;rwtrdam;rwtrdm;rxt the xr dam;Ρότερνταμ;Горад Ратэрдам;Ротердам;Роттердам;ראטערדאם;רוטרדם;راٹرڈیم;رتردام;روتردام;ܪܘܛܪܕܐܡ;रॉटरडॅम;ராட்டர்டேம்;รอตเทอร์ดาม;ရော်တာဒမ်မြို့;როტერდამი;ロッテルダム;鹿特丹;로테르담; +city::2747930;Roosendaal;Roosendaal;Rosendael;Rozendael;Rozendal;Rozendal';ZYO;losendal;luo sen da er;ro sen dal;rozendaru;rwsyndal;Розендал;Розендаль;روزن‌دال;روسيندال;โรเซนดาล;ローゼンダール;罗森达尔;로센달; +city::2748413;Purmerend;Pjurmerend;Purmerein;Purmerend;bwrmyrand;pi er mo lun de;purumerento;pwileumeleonteu;pwrmrnd;Пурмеренд;Пюрмеренд;Պուրմերենդ;بورميراند;پورمرند;ปืร์เมอแร็นด์;プルメレント;皮爾默倫德;퓌르메런트; +city::2749234;Oss;Os;Oss;Oss i Nederland;ao si;osu;Осс;オス;奥斯; +city::2749450;Oosterhout;Oosterhout;Osterkhout;ao si te hao te;Остерхоут;奧斯特豪特; +city::2750053;Nijmegen;Gemeen Nimwaege;Gorad Najmegen;Naimechen;Najmegen;Neimegena;Neimegenas;Nejmegen;Neymeyxen;Nijmegen;Nijmeyen;Nimega;Nimegen;Nimegue;Nimwege;Nimwegen;Nimègue;Nymegen;Nymwegen;Nîmegue;Nijmegen;QNQ;Ulpia Noviomagus Batavorum;nai mei heng;naimehen;naymykhn;ne me ken;neimegeni;neimeheon;njmygan;nymykhn;nyymkn;Ναϊμέχεν;Горад Наймеген;Најмеген;Неймеген;Նեյմեյխեն;ניימכן;نايميخن;نجمیگان;نیمیخن;เนเมเกน;ნეიმეგენი;ኔመሕን;ナイメーヘン;奈梅亨;네이메헌; +city::2750325;Nieuwegein;Nieuwegein;Nieuwegen; +city::2751283;Maastricht;Gorad Maastrykht;MST;Maastricht;Maastrikht;Maestricht;Mastrichtas;Mastrihta;Mastrikht;Mastrique;Mastrixt;Mestreech;Māstrihta;Traiectum Mosae;ma si te li he te;mas thrichth;maseuteuliheuteu;mastrikhta;mastrikt;mastrkht;mastrsht;mastrykht;masutorihito;Μάαστριχτ;Горад Маастрыхт;Маастрихт;Мастрихт;Մաստրիխտ;מאסטריכט;ماسترخت;ماسترشت;ماستریخت;मास्ट्रिख्ट;மாஸ்ட்ரிக்ட்;มาสทริชท์;მაასტრიხტი;マーストリヒト;马斯特里赫特;마스트리흐트; +city::2751738;Lelystad;LEY;Lelistad;Lelystad;lai li si ta de;Лелистад;لیلی‌استاد;莱利斯塔德; +city::2751773;Leiden;Gorad Lejdehn;Lajden;Leida;Leiden;Leidenas;Leidene;Leie;Leien;Leinten;Lejda;Lejden;Lejdeni;Leyde;Leyden;Lugdunum;Lugdunum Batavorum;Lèida;la'idena;lai dun;laitan;laydn;laydyn;leideni;leideon;li dein;lydn;lyydn;raiden;Λέιντεν;Горад Лейдэн;Лайден;Лајден;Лейден;Լեյդեն;ליידן;لائڈن;لايدن;لايدين;لیدن;লাইডেন;லைடன்;ไลเดิน;ლეიდენი;ライデン;莱顿;레이던; +city::2751792;Leeuwarden;Gorad Leuvardehn;L'ovet;LWR;Leeuwarden;Leewarden;Leuvarden;Leuvardena;Leuvardenas;Leyvarden;Lieuwarden;Liewarde;Liwwadden;Ljouwert;leiualeudeon;lew ar dein;liyuvardena;lu fa deng;lywwardn;rewaruden;Горад Леўвардэн;Леуварден;Льовет;ليوواردن;لیوواردن;लीयुवार्डेन;เลวาร์เดิน;レーワルデン;吕伐登;레이우아르던; +city::2753638;Hoorn;Gorn;Hoarn;Hoorn;Hoorn NH;Horn;Khorn;he en;holeun;horn;horun;hwrn;Горн;Хорн;Հորն;هورن;โฮร์น;ホールン;荷恩;호른; +city::2753801;Hoofddorp;Haarlemmermeer;Hoofddorp;QHZ; +city::2754064;Hilversum;Hilfertsom;Hilversum;Hilvertsheim;Khilversjum;Khilversum;QYI;hylfrswm;xi er fu se mu;Хилверсум;Хилверсюм;Հիլվերսում;هيلفرسوم;هیلفرسوم;希爾弗瑟姆; +city::2754394;Hengelo;Hemgelo;Hengelo;Hengeloo; +city::2754447;Helmond;Gelmond;Hellemed;Helmond;Helmondas;Hèllemed;Khelmond;hai er meng de;he lmxnd;helmonteu;herumonto;hlmwnd;hylmwnd;Гелмонд;Хелмонд;Հելմոնդ;هلموند;هيلموند;เฮลมอนด์;ヘルモント;海爾蒙德;헬몬트; +city::2754652;Heerlen;Coriovalo;Heele;Heerlen;Heële;Kheerlen;Хеерлен; +city::2754861;Hardenberg;Hardenberg;Khardenberge;Stad-Hardenberg;ha deng bei he;Харденберге;هاردن‌برخ;哈登貝赫; +city::2755003;Haarlem;Chaarlem;Garlem;Gorad Kharlem;Haarlem;Haarlemo;Haarlim;Harlem;Harlema;Harlemas;Harlemum;Hārlema;Khaarlem;Kharlem;ha lei mu;haarlemi;haleulleom;harlm;haruremu;Χάαρλεμ;Гарлем;Горад Харлем;Хаарлем;Харлем;Հարլեմ;הארלם;هارلم;ہارلم;ܗܐܪܠܡ;ჰაარლემი;ハールレム;哈勒姆;하를럼; +city::2755251;Groningen;Chronin'nken;GRQ;Gorad Groningen;Greunienge;Grins;Groninga;Groninge;Groningen;Groningena;Groningenas;Groningue;Grunneng;Gròninga;Qroningen;Vilojati Groningen;furoningen;furoningen shi;ge luo ning gen;groningeni;heuloning-eon;hrwnyngn;khrwnyngn;Χρόνινγκεν;Вилояти Гронинген;Горад Гронінген;Гронинген;Гронінген;חרונינגן;خرونینگن;گروننگن شہر;გრონინგენი;フローニンゲン;フローニンゲン市;格罗宁根;흐로닝언; +city::2755420;Gouda;Chaounta;Gauda;Gaudanum;Gorad Gauda;Gouda;Guda;Quda;ga'uda;gauda;goda;hao da;hauda;kea da;khawda;Χάουντα;Гауда;Горад Гауда;Գաուդա;خاودا;गउडा;గౌడ;เกาดา;გაუდა;ゴーダ;豪达;하우다; +city::2756071;Enschede;ENS;Eanske;Ehnskhede;Enschede;Enschedė;Ensjedee;Enskede;Enskhede;Ensxeyde;Gorad Ehnskhedeh;Ynskedee;anskhdh;anskhydh;en si he de;enseuhedeo;enskhede;ensuhede;xen s kede;Горад Энсхедэ;Енсхеде;Энсхеде;Էնշխեյդե;אנסחדה;إنسخيده;انسخده;انشیدے;ܐܢܫܟܕܐ;เอนสเกเด;ენსხედე;エンスヘーデ;恩斯赫德;엔스헤더; +city::2756136;Emmen;Ehmmen;Emen;Emenas;Emme;Emmen;Emmeni vald;ai men;amn;aymyn;emen;emena;emeon;Емен;Еммен;Эммен;Էմմեն;אמן;إيمين;امن;एमेन;エメン;埃門;에먼; +city::2756253;Eindhoven;Aintchofen;Ajndkhoven;Ajntoven;Ajntovën;EIN;Ehjndkhoven;Ehjndkhoven khot;Eindhove;Eindhoven;Eindhovena;Eindhovenas;Eindovia;Ejndgoven;Eyndhoven;Gorad Ehjndkhoven;a'indahovana;ai yin huo wen;aintohofen;ayndhwfn;ayndhwwn;eindhoveni;einteuhobeon;xind ho wen;yan hao fen;Αϊντχόφεν;Айндховен;Ајндховен;Горад Эйндховен;Ейндговен;Эйндховен;Эйндховен хот;Էյնդհովեն;איינדהובן;آئنڈھون;آيندهوفن;آیندهوون;اینتہوون;आइंडहोवन;ไอนด์โฮเวน;ეინდჰოვენი;アイントホーフェン;埃因霍温;燕豪芬;에인트호번; +city::2756429;Ede;Ede;Ehde;ede;Эде;エーデ; +city::2756669;Dordrecht;Doardt;Dordracum;Dordrech;Dordrecht;Dordreque;Dordt;Dort;Ntorntrecht;dorutorehito;Ντόρντρεχτ;ドルトレヒト; +city::2756987;Deventer;Daventria;Deventer;Deventeris;Deyventer;Dimter;Gemeen Deventer;Gemeen Dèventer;QYV;dai fen te er;de wen texr;debenteoleu;defenteru;dfntr;Девентер;Դեյվենտեր;دفنتر;เดเวนเตอร์;デーフェンテル;代芬特尔;데벤터르; +city::2757220;Den Helder;DHR;De Helder;Den Helder;Den-Khelder;Der Helder;Helder;Le Helder;Nten Chelnter;deng hai er de;dn hldr;Ντεν Χέλντερ;Ден-Хелдер;Դեն Հելդեր;دن هلدر;デン・ヘルダー;登海尔德; +city::2757345;Delft;Delft;Ntelpht;dai er fu te;derufuto shi;dlpt;Ντελφτ;Делфт;דלפט;デルフト市;代尔夫特; +city::2758012;Capelle aan den IJssel;Capelle;Capelle a/d IJssel;Capelle a/d Yssel;Capelle aan de IJssel;Capelle aan de Yssel;Capelle aan den IJssel;Capelle aan den Ijssel;Capelle aan den Yssel;Kapele an den Eysel;Kapelle;Kapelle-an-den-Ehjssel;ai se er he pan ka pei lei;ka pe lex xan dex xi seil;kabyla an dn aysl;kapelleoanden-eiseol;Капелле-ан-ден-Эйссел;Կապելե ան դեն Էյսել;كابيلا آن دن آيسل;کاپله ان‌دن ایسل;กาเปเลออานเดอไอเซิล;艾瑟尔河畔卡佩勒;카펠러안덴에이설; +city::2758401;Breda;Breda;Breda khot;Brenta;Brigita;Bréda;GLZ;Gorad Brehda;be rda;beuleda;brda;brdh;breda;bryda;bu lei da;bureda;Μπρέντα;Бреда;Бреда хот;Горад Брэда;Բրեդա;ברדה;بردا;بريدا;بریڈا;เบรดา;ბრედა;ブレダ;布雷达;브레다; +city::2759145;Bergen op Zoom;Bergen op Zoom;Bergen-op-Zom;WOE;Берген-оп-Зом; +city::2759633;Assen;Asen;Asenas;Asningseli;Asningsėli;Asse;Assen;Gorad Asen;a sen;aseon;asn;assen;xas sein;Άσσεν;Асен;Ассен;Горад Асен;Ասսեն;آسن;أسن;อาสเซิน;アッセン;阿森;아선; +city::2759661;Arnhem;Arecanum;Arnem;Arnema;Arnheim;Arnhem;Arnhemas;Arnhemia;Arnhim;Arném;Gemeen Arnem;Gorad Arnem;ZYM;a na mu;aleunheom;anemu;arnahema;arnemi;arnhm;arnm;Άρνεμ;Арнем;Горад Арнем;Արնհեմ;ארנהם;آرنم;آرنهم;آرنہم;आर्नहेम;არნემი;アーネム;阿纳姆;아른험; +city::2759706;Apeldoorn;Apeldoarn;Apeldoorn;Apeldoorne;Apeldorn;Apeldornas;Gorad Apeldorn;QYP;a po er duo lun;abldwrn;apeldoleun;aperudorun;apldwrn;epeladorna;xa phel dorn;Апелдорн;Горад Апелдорн;Ապելդորն;آبلدورن;آپلدورن;ایپلڈوم;एपेलडॉर्न;อาเพลโดร์น;აპელდორნი;アペルドールン;阿珀尔多伦;아펠도른; +city::2759794;Amsterdam;AMS;Amesterdam;Amesterdao;Amesterdão;Amistardam;Amstardam;Amstedam;Amstelodamum;Amsterdam;Amsterdama;Amsterdamas;Amsterdami;Amsterdamo;Amsterdams;Amsterdan;Amsterntam;Amstèdam;Amszterdam;Damsko;Gorad Amstehrdam;I-Amsterdami;Mokum;a mu si te dan;aimstardaima;amasataradama;amastaradama;amastararyama;amseuteleudam;amstardama;amstartam;amstrdam;amusuterudamu;anstardyam;emstaradyama;xamstexrdam;yەmstەrdam;Àmsterdam;Ámsterdam;Ámsterdan;Άμστερνταμ;Амстердам;Горад Амстэрдам;Ամստերդամ;אמסטערדאם;אמסטרדם;آمستردام;أمستردام;ئامستېردام;ئەمستەردام;امستردام;امسټرډام;ایمسٹرڈیم;ܐܡܣܛܪܕܐܡ;अ‍ॅम्स्टरडॅम;आम्स्टर्डम;एम्स्तरद्याम;ऐम्स्टर्डैम;আমস্টারডাম;ਅਮਸਤਰਦਮ;ଆମଷ୍ଟରଡ଼୍ୟାମ;ஆம்ஸ்டர்டம்;ಆಂಸ್ಟರ್ಡ್ಯಾಮ್;ആംസ്റ്റർഡാം;ඈම්ස්ටර්ඩෑම්;อัมสเตอร์ดัม;ཨེམ་སི་ཊར་ཌམ།;အမ်စတာဒမ်မြို့;ამსტერდამი;አምስተርዳም;アムステルダム;阿姆斯特丹;암스테르담; +city::2759798;Amstelveen;Amstelveen;Amstelven;Amstelveyn;Amstelvin;Nieuwer Amstel;a mu si te er fen;amseutelbein;amusuterufen;Амстелвен;Амстелвин;Ամստելվեյն;אמסטלפיין;آمستل‌فین;アムステルフェーン;阿姆斯特尔芬;암스텔베인; +city::2759821;Amersfoort;Amersfoort;Amersfort;Amersforto;QYM;Амерсфорт; +city::2759875;Alphen aan den Rijn;Alfen;Alphen;Alphen a/d Rijn;Alphen aan de Rijn;Alphen aan den Rijn;Alphen aan der Rijn; +city::2759879;Almere Stad;Almere; +city::2759887;Almelo;Almelo;Almeloo;QYL;Алмело; +city::2759899;Alkmaar;Alkmaar;Alkmaer;Alkmar;Alkmaras;a er ke ma er;alkeumaleu;alkmar;arukumaru;Άλκμααρ;Алкмаар;Алкмар;Ալկմար;אלקמאר;آلکمار;ألكمار;ئەڵکمار;アルクマール;阿尔克马尔;알크마르; +city::3133880;Trondheim;Gorad Tronkhejm;Kommun Trondheim;Nidaros;Nidrosia;THrandheimur;TRD;Troandin;Trondheim;Trondheimas;Trondhjem;Trondkhajm;Trondkhejm;Trongejm;Tronheima;Tronkhejm;Trontchaim;Truondheims;Truondhėims;te long he mu;teulonheim;thrx nd hem;toronhaimu;toronheimu;tronad'ehima;troneim;trwndhaym;trwndhyym;Þrándheimur;Τροντχαιμ;Τρόντχαιμ;Τρόντχαϊμ;Горад Тронхейм;Тронгейм;Трондхайм;Трондхејм;Тронхейм;טרונדהיים;تروندهايم;تروندهایم;ٹرونڈہائم;ট্রোনডেহিম;ทรอนด์เฮม;ტრონჰეიმი;トロンハイム;トロンヘイム;特隆赫姆;트론헤임; +city::3133895;Tromso;Gorad Tromsjo;Kommun Tromso;Kommun Tromsø;Romsa;TOS;Troms'o;Tromse;Tromsieg;Tromsjo;Tromso;Tromsoe;Tromsoe kommun;Tromsonda;Tromssa;Tromsö;Tromsö kommun;Tromsø;Tromsīeg;Trumse;Trumsė;te luo mu se;teulomsoe;thrm sex;toromuso;tromasa;tromso;trwmsa;trwmsh;trwmsw;Горад Тромсё;Тромсе;Тромсьо;Тромсё;טרומסה;ترومسا;ترومسو;ٹرومسو;ट्रोम्सो;ট্রোমসা;ทรมเซอ;ტრომსე;トロムソ;特罗姆瑟;트롬쇠; +city::3137115;Stavanger;SVG;Stafangur;Stavanger;Stavangera;Stavenger;sutavu~angeru;Ставангер;スタヴァンゲル; +city::3139075;Skien;Gorad Shyen;Kommun Skien;SKE;Seins;Shien;Shijen;Sienas;Skien;Skieni vald;shien;sien;skayn;skiyena;xi en;Šienas;Šėins;Горад Шыен;Шиен;Шијен;Шієн;سکائن;স্কিয়েন;シーエン;希恩;시엔; +city::3140084;Sarpsborg;Gorad Sarpsborg;Kommun Sarpsborg;Sarpsborg;Sarpsborgas;Sarpsborgs kommun;Sarpsbuorgs;XKQ;sa er pu si bao;saleubseuboleugeu;sarpasaborga;sarpsbwrg;sarupusuborugu;Горад Сарпсборг;Сарпсборг;سارپسبورگ;সার্পসবোর্গ;サルプスボルグ;萨尔普斯堡;사릅스보르그; +city::3140321;Sandnes;Sandnes;Sandnes kommun; +city::3143244;Oslo;Asloa;Christiania (historical);Gorad Osla;Kristiania (historical);OSL;Ohoro;Oslas;Oslo;Oslo osh;Oslu;Osló;ao si lu;asalo;aslw;awslw;osalo;oseullo;oslea;oslo;osuro;xxslo;ywslw;Òslo;Ósló;Ōhoro;Όσλο;Горад Осла;Осло;Осло ош;Օսլո;אוסלו;أوسلو;ئوسلو;ئۆسلۆ;اسلو;اوسلو;ܐܘܣܠܘ;ओस्लो;ওসলো;ਓਸਲੋ;ଅସଲୋ;ஒஸ்லோ;ഓസ്ലൊ;ออสโล;ཨོ་སི་ལོ།;အော့စလိုမြို့;ოსლო;ኦስሎ;オスロ;奥斯陆;오슬로; +city::3149318;Kristiansand;Christiansand;KRS;Krisjansanna;Krisjānsanna;Kristiansand;Kristiansand Sor;Kristiansand Sør;Kristiansann;Kryscijansan;ke li si di an sang;Кристиансанд;Кристиансанн;Крысціянсан;כריסטיאנסנד;克里斯蒂安桑; +city::3156529;Fredrikstad;Frederikstad;Fredrikstad;XKF;furedorikusuta;Фредрикстад;フレドリクスタ; +city::3159016;Drammen;Dramen;Dramenas;Dramens;Drammen;Gorad Dramen;Kommun Drammen;Ntramen;XND;de la men;deulammen;doranmen;dram men;dramena;dramn;Ντράμεν;Горад Драмен;Драмен;Драммен;דראמן;درامن;ڈرامن;ড্রামেন;ดรัมเมน;ドランメン;德拉门;드람멘; +city::3161732;Bergen;BGO;Bargen;Berga;Bergen;Bergena;Bergenas;Bergn;Bernken;Birgon;Bjoergvin;Björgvin;Gorad Bergen;baragena;bargana;bei er gen;beleugen;bergeni;berugen;brghn;brgn;perkan;Μπέργκεν;Берген;Горад Берген;ברגן;برغن;برگن;बार्गन;বারগেন;பேர்கன்;แบร์เกน;ბერგენი;ベルゲン;卑爾根;베르겐; +city::1282898;Pokhara;PKR;Pakhra;Pokara;Pokhar;Pokhara;Pokhra;Pokkhara;bo ke la;bwkhara;pokala;pokara;pokh ra;pokhara;pokhara gavisa;pokhara upamahanagarapalika;pokkara;Ποκάρα;Покхара;פוקארה;بوخارا;پوکھرا;पोखरा;पोखरा उपमहानगरपालिका;पोखरा गाविस;பொக்காரா;ಪೊಖರಾ;โปขรา;ポカラ;博克拉;포카라; +city::1282931;Patan;Lalitapura;Lalitpur;Manigal;Patan;Pātan;Yala;Лалитпур; +city::1283095;Mahendranagar;Mahen Dkanagar;Mahendranagar;XMG; +city::1283240;Kathmandu;Catmandu;Catmandum;Gorad Katmandu;KTM;Kantipur;Kantipura;Katemandu;Kathmandau;Kathmandou;Kathmandu;Katmando;Katmandoe;Katmandou;Katmandu;Katmanduo;Katmandó;Katmandú;Katmandû;Katmandū;Katmantou;Khatmandu;Káthmandu;Káthmándú;jia de man dou;kateumandu;kath manthu;kathamadaum;kathamadaum mahanagarapalika;kathamadu;kathamandu;kathmandu;katmandw;katmandww;katmantu;katomanzu;qtmndw;yem jilla;Κατμαντού;Горад Катманду;Катманду;Կատմանդու;קאטמאנדו;קטמנדו;كاتماندو;كاتماندۇ;کاتماندو;کاتماندوو;کھٹمنڈو;काठमांडू;काठमाडौं;काठमाडौं महानगरपालिका;काठमाण्डू;येँ जिल्ला;কাঠমাণ্ডু;কাঠমান্ডু;ਕਠਮੰਡੂ;કાઠમંડુ;କାଠମାଣ୍ଡୁ;காட்மாண்டு;కాఠ్మండు;ಕಠ್ಮಂಡು;കാഠ്മണ്ഡു;කත්මන්ඩු;กาฐมาณฑุ;ཀ་ཏ་མན་ཏ།;ཀ་ཏ་མན་ཏུ།;კატმანდუ;ካትማንዱ;カトマンズ;加德滿都;카트만두; +city::1283318;Janakpur;Dzanakpuras;Dzhanakpur;Džanakpuras;JKR;Janakpur;Janakpur Dham;gu na ke bu er;janagpuleu;janakapura;janakapura nagarapalika;janakapura upamahanagarapalika;janakupuru;jnkpwr;Джанакпур;جنکپور;जनकपुर;जनकपुर उपमहानगरपालिका;जनकपुर नगरपालिका;ジャナクプル;賈納克布爾;자낙푸르; +city::1283339;Hetauda;Hetauda;Hetauda Bazar;Hetaunda;Hetaura;Heṭauḍā;Hithaura;Hitura;Khetauda;hei dao da;hetauda;hetaunda;hetaunda upamahanagarapalika;hetoura;Хетауда;ہیٹوڈا;हेटौंडा;हेटौंडा उपमहानगरपालिका;हेटौडा;ヘトウラ;黑道達; +city::1283368;Gulariya;Gularia;Gulariya;Gulariyā; +city::1283460;Dharan Bazar;Dharan;Dharan Bazar;Dharān Bāzār; +city::1283467;Dhangarhi;DHI;Dhangadhi;Dhangarhi;Dhantardhi; +city::1283562;Butwal;Butaul;Butwai;Butwal;Butwaī;Butwāl; +city::1283581;Birganj;Birganj;Birgunj;Bīrganj; +city::1283582;Biratnagar;BIR;Biratnagar;Biratnagur;bi la de ne ge er;bilasnagaleu;biratanagara;biratanagara upamahanagarapalika;biratonagaru;viratanagara;Биратнагар;बिराटनगर;बिराटनगर उपमहानगरपालिका;विराटनगर;ビラートナガル;比拉德訥格爾;비랏나가르; +city::1283613;Bharatpur;BHR;Bharatpur;Bhâratpur;balaspuleu;baratopuru;bharatapura;bharatapura upamahanagarapalika;bharatapura nepala;po luo duo bu er;بھرتپور، نیپال;भरतपुर;भरतपुर उपमहानगरपालिका;भरतपुर नेपाल;バラトプル;婆羅多布爾;바랏푸르; +city::1283621;Siddharthanagar;Bhairahawa;Bhairawa;Bhairhwa;Bhairwa;Bhairāhawā;Siddharthanagar; +city::6941099;Nepalgunj;KEP;Nepalganj;Nepalgun;Nepālganj;Непалгун; +city::2179537;Wellington;Gorad Velingtan;Hie-ling-dong;Hiê-lìng-dóng;Ouellin'nkton;Ouellinkton;Te Whanga-nui-a-Tara;Ueligitone;Uelingtun;Velington;Velingtona;Velingtonas;Velingtono;Vellington;Vellingtonia;Vellinqton;WLG;Welinton;Welintòn;Wellington;Wellinton;Weolingtun;Weolingtūn;Whanga-nui-a-Tara;hui ling dun;oyelintana;raelintana;uelingtʼoni;u~erinton;vailigatana;velingatana;velingtana;velingtoni;velintan;vellingtan;wei ling dun;wellingtan;wellingteon;wlyngtwn;wylynghtwn;wylynjtwn;Ουέλλιγκτον;Ουέλλινγκτον;Велингтон;Веллингтон;Веллінгтон;Горад Велінгтан;Уелингтън;Վելինգտոն;ולינגטון;װעלינגטאן;ولینگتون;ويلينجتون;ويلينغتون;ویلنگٹن;ۋېللىنگتون;वेलिंगटन;वेलिंग्टन;वेलिङ्गटन;ওয়েলিংটন;ৱেলিংটন;ਵੈਲਿੰਗਟਨ;વેલિંગ્ટન;வெலிங்டன்;ವೆಲ್ಲಿಂಗ್ಟನ್;വെല്ലിംഗ്ടൺ;เวลลิงตัน;ཝེ་ལིང་ཐོན།;ဝယ်လင်တန်မြို့;ველინგთონი;უელინგტონი;ዌሊንግተን;ウェリントン;威靈頓;惠灵顿;웰링턴; +city::2184397;Porirua;Porirua;bo li lu a;polilua;Порируа;პორირუა;波里魯阿;포리루아; +city::2185018;Palmerston North;PMR;Palmerston Nort;Palmerston Nortas;Palmerston Norte;Palmerston North;Palmerston North City;Palmerston Utara;Palmerston-Nort;Palmy;Te Papa-i-oea;bei pa mo si dun;palmrstwn nwrth;pamasuton'nosu;pameoseuteonnoseu;Палмерстон Норт;Палмерстон-Норт;پالمرستون نورث;پامرسٹن نارتھ;პალმერსტონ-ნორთი;パーマストンノース;北帕莫斯顿;파머스턴노스; +city::2186280;Nelson;Gorad Nel'san;NSN;Nel'son;Nelson;Nelson City;Nelson eskualdea;Nelson pa New Zealand;Nelson på New Zealand;Nelsonas;Nelsun;Whakatu;Whakatū;nelcan;nelsana;nelseun;nelsoni;neruson;ni er xun;nlswn;nlswn nywzlnd;nylswn;Горад Нельсан;Нелсон;Нелсън;Нельсон;נלסון;نلسون، نیوزلند;نيلسون;نیلسن، نیوزی لینڈ;नेल्सन;நெல்சன்;നെൽസൺ;ნელსონი;ネルソン;尼爾遜;넬슨; +city::2186313;Napier;Ahuriri;NPE;Napier;Napier City;Napier pa New Zealand;Napier på New Zealand;Neipiras;Nejpijer;Nejpir;nei pi er;neipieo;nepia;nepiyar;nepiyara;neppiyar;nypyr;Нейпир;Нейпір;Нејпијер;نیپئر، نیوزی لینڈ;نیپیر;नेपियर;நேப்பியர்;నేపియర్;നേപ്പിയർ;ნეიპირი;ネーピア;內皮爾;네이피어; +city::2187404;Manukau City;Manukau; +city::2187454;Mangere;; +city::2188164;Lower Hutt;Awakairangi;Hutt Bawah;Louehr-Khatt;Louer Hatas;Lower Hutt;Lower Hutt City;lowoheos;xia ha te;Лоуэр-Хатт;ლოუერ-ჰატი;下哈特;로워헛; +city::2190224;Hastings;Daerah Hastings;Hastings;Hastings pa New Zealand;Hastings på New Zealand;Heretaunga;Khejstings;NPE;hastynjs;heiseutingseu;heisutinguzu;Хейстингс;Хејстингс;ضلع ہیسٹنگز;هاستينجس;ჰეისტინგსი;ヘイスティングズ;헤이스팅스; +city::2190324;Hamilton;Gamil'ton;Gorad Gamil'tan;HLZ;Hameldun;Hameldūn;Hamilton;Hamilton City;Hamilton pa New Zealand;Hamilton på New Zealand;Hamiltonas;Khamilt"n;Khamilton;Kirikiriroa;amiltan;ha mi er dun;haemilteon;haimilatana;haimiltana;hamiruton;hamyltwn;hemiltana;Гамильтон;Гамільтон;Горад Гамільтан;Хамилтон;Хамилтън;هاميلتون;هامیلتون;ہیملٹن، نیوزی لینڈ;हॅमिल्टन;हैमिल्टन;ਹੈਮਿਲਟਨ;ஆமில்டன்;ഹാമിൽടൺ;ჰამილტონი;ハミルトン;哈密尔顿;해밀턴; +city::2191562;Dunedin;DUD;Dunedin;Dunidin;Otepoti;Taieri;dan ni ding;Ōtepoti;Дънидин;但尼丁; +city::2192362;Christchurch;CHC;Christchurch;Christopolis;Cristcirice;Crīstcirice;Gorad Krajstchehrch;Kraistcerca;Kraistcercas;Kraisttserts;Kraistčerčas;Kraistčērča;Krajstcherch;Krajstchjorch;Krajstchurch;Krayscoerc;Kraystcherch;Kraysçörç;Kristkirko;Otautahi;ji du cheng;ke lai si te che qi;keulaiseuteucheochi;khi rstcheirch;kiraistcerc;kra'istacarca;kraystshrsh;kuraisutochachi;qryystzrz;Ōtautahi;Κράισττσερτς;Горад Крайстчэрч;Крайстчерч;Крайстчърч;Крайстчёрч;Крајстчерч;קרייסטצרץ;كرايستشرش;کرائسٹ چرچ;کرایست‌چرچ;क्राइस्टचर्च;ক্রাইস্টচার্চ;கிறைஸ்ட்சேர்ச்;ക്രൈസ്റ്റ്‌ചർച്ച്‍;ไครสต์เชิร์ช;ခရစ်ချပ်ချ်မြို့;კრაისტჩერჩი;クライストチャーチ;克赖斯特彻奇;基督城;크라이스트처치; +city::2193733;Auckland;AKL;Auckland;Aucland;Aucopolis;Awklanda;Gorad Oklend;Okland;Oklandas;Oklant;Oklend;Oklenda;Tamaki-makau-rau;Tāmaki-makau-rau;akland;aklant;ao ke lan dou hui qu;awkland;awklnd;okalanda;okalenda;okeullaendeu;oklainda;okurando;yavkland;Ώκλαντ;Горад Окленд;Окланд;Окленд;Օկլենդ;אוקלנד;آوکلند;أوكلاند;ئاۋكلاند;ऑकलंड;ऑक्लैण्ड;ઓકલેન્ડ;ஆக்லன்ட்;ఆక్లాండ్;ಆಕ್ಲೆಂಡ್‌;ഓക്‌ലൻഡ്;โอกแลนด์;အော့ကလန်မြို့;ოკლენდი;オークランド;奧克蘭都會區;오클랜드; +city::2208032;Tauranga;TRG;Tauranga;Tauranga-moana;ta'iranga;tao lang jia;taranga;taulang-ga;tauranga;taywranga;Тауранга;טאורנגה;تائورانگا;ٹورانگا;टाइरंगा;ടൗരാംഗ;ტაურანგა;タウランガ;陶朗加;타우랑가; +city::6230919;Whangarei;Distretto di Whangarei;Fangarei;Fangarej;Vangarei;Vangarejus;Vangarėjus;WRE;Whangarei;Whangarei-terenga-paraoa;Whangārei-terenga-paraoa;fanaryy;fangarei;hwang-alei;uangarei;wang a lei;Вангареи;Фангареи;Фангареј;فانارئی;უანგარეი;ファンガレイ;旺阿雷;황아레이; +city::6241325;Rotorua;Distretto di Rotorua;ROT;Rotorua;Rotorua-nui-a-Kahu;lotolua;luo tuo lu ya;rotorua;rwtwrwa;Роторуа;רוטורואה;روتوروا;ضلع روٹوروا;როტორუა;ロトルア;罗托路亚;로토루아; +city::7302484;Waitakere;; +city::286245;Sur;As Sur;As Sūr;SUH;Sour;Sur;Suras;Súr;su er;suleu;suru;swr;wlayt swr;Şūr;Σουρ;Сур;صور;صور، عمان;ولاية صور;スール;苏尔;수르; +city::286282;Sohar;Al Sohar;As Suhar;Aş Şuḩār;OHS;Sahar;Sohar;Soharas;Suhar;Suhár;Sukhar;shar;sohaleu;soharu;su ha er;wlayt shar;Şuḩār;Сухар;صحار;ولاية صحار;ソハール;苏哈尔;소하르; +city::286621;Salalah;Al Kathir;As Salala;As Salalah;Aş Şalālah;SLL;Salala;Salalah;slalh;slalt;Āl Kathīr;Şalālah;Салала;صلالة;صلاله; +city::286647;Saham;As Saham;As Şaham;Saham;Saham Town;Sahb;Sahm;Salam;Şaḩam;Şaḩm;Салам; +city::286987;Nizwa;Nazwah;Nizva;Nizwa;Nizwá;nzwy;Низва;نزوى; +city::287286;Muscat;Gorad Maskat;MCT;Maeskat;Mascat;Mascate;Maskat;Maskata;Maskatas;Maskate;Maskato;Maskˌat;Masqat;Masqaţ;Masqaṭ;Masquat;Maszkat;Mouskat;Muscat;Muskat;Mäskat;Múskat;ma si ka te;ma si ke te;masakata;maskarr;maskat;maskata;masqata;masukatto;msqt;museukateu;Μουσκάτ;Горад Маскат;Маскат;Масқат;Мускат;Մասկատ;מסקט;مسقط;مسقط، عمان;مۇسكات;مەسقەت;मस्कत;मस्क़त;মাস্কাট;ਮਸਕਟ;ମସ୍କଟ;மஸ்கத்;మస్కట్;മസ്കറ്റ്;มัสกัต;མི་སི་ཁ་ཁྲི།;მასკატი;መስከት;マスカット;馬斯喀特;马斯喀特;무스카트; +city::287830;`Ibri;Ibri;`Ibri;‘Ibrī; +city::288764;Bawshar;Baushar;Bawshar;bwshr;بوشر; +city::288789;Barka';Barka';Barkah;Barkā’; +city::288899;Bahla';Bahla';Bahlah;Bahlā’; +city::288955;As Suwayq;As Suwaiq;As Suwayq;Suwaik;Suwayq; +city::288967;Seeb;Al-Sib;Al-Sīb;As Seeb al Jadidah;As Sib;As Sib al Jadidah;As Sīb;As Sīb al Jadīdah;As-Sib;Ehs-Sib;Seeb;Sib;Sybas;Szib;Szíb;Síb;alsyb;alsyb aljdydt;sibeu;xi bo;Сиб;Эс-Сиб;السيب;السيب الجديدة;السیب;锡卜;시브; +city::289011;Rustaq;Ar Rustaq;Ar Rustāq;MNH;Qal`at Kasra;Qal‘at Kasrá;Rostak;Rustaka;Rustaq;Rustāq;alrstaq;Рустака;الرستاق; +city::289199;Al Khaburah;Al Khabura;Al Khaburah;Al Khābūra;Al Khābūrah;Al-Khabourah;Khabura;Khaburah;Khābūrah; +city::289317;Al Buraymi;Al Buraymi;Al Buraymī;Baraimi;Bireimi;Buraimi;Burami;RMB;albrymy;البريمي; +city::3700563;Tocumen;Tocumen;Tokumen;Токумен; +city::3701329;San Miguelito;San Miguel;San Miguelito; +city::3703227;Pedregal;Pedregal; +city::3703443;Panama;Ciudad de Panama;Ciudad de Panamá;Ciutat de Panama;Ciutat de Panamà;PTY;Panama;Panama City;Panama Hiria;Panama by;Panama-Stadt;Panama-Urbo;Panama-stad;Panamurbo;Panamá;Pole tou Panama;Ziuda de Panama;Ziudá de Panamá;ba na ma cheng;panama si;panama siti;panamashiti;panamasiti;pnmh syty;shhr panama;Πόλη του Παναμά;Панама;פנמה סיטי;شهر پاناما;पनामा सिटी;ปานามาซิตี;ፓናማ ከተማ;パナマシティ;巴拿馬城;파나마 시;파나마시티; +city::3707961;La Chorrera;Chorrera;La Chorrera; +city::3708306;Juan Diaz;Juan Diaz;Juan Díaz; +city::3711668;David;Ciudad de David;DAV;David;Davida;Davidas;Dehvid;San Jose de David;San José de David;dabiddo;dabideu;dai wei;davidi;dwyd;Давид;Дэвид;דויד;ڈیوڈ، چیرکی;დავიდი;ダビッド;戴维;다비드; +city::3712076;Colon;Aspinwall;Ciudad de Colon;Ciudad de Colón;Colon;Colón;Kolon;Kolona;Kolonas;ONX;gao lang;ke long;kollon;koron;kwlwn panama;qwlwn;Колон;Կոլոն;קולון;کولون، پاناما;კოლონი;コロン;告郎;科隆;콜론; +city::3714637;Arraijan;Arraijan;Arraiján; +city::3691148;Tumbes;Gorad Tumbes;TBP;Tumbes;Tumbesas;Tumbez;Tumpis;Tumpiurbo;tong bei si;to~unbesu;tumbeseu;twmbs;twmbys pyrw;Горад Тумбес;Тумбес;تومبس;تومبیس، پیرو;ტუმბესი;トゥンベス;通贝斯;툼베스; +city::3691175;Trujillo;Gorad Trukhil'jo;TRU;Troxillo;Truchiljas;Truhillu;Trujillo;Trukhijo;Trukhil'o;Trukhiljo;Turgalium;te lu xi e;teuluhiyo;toruhiryo;trwhyw;trwkhyw;trwkhyw byrw;Горад Трухільё;Трухильо;Трухилјо;Трухійо;טרוחיו;تروخيو، بيرو;تروخیو;ტრუხილიო;トルヒーリョ;特鲁希略;트루히요; +city::3691348;Tingo Maria;TGI;Tingo Maria;Tingo María;Tinku Mariya;ting ge ma li ya;tyngw marya;تینگو ماریا;廷戈瑪麗亞; +city::3691582;Talara;Puerto Talara;TYL;Talara;ta la la;talara;tallala;tarara;Талара;تالارا;ტალარა;タララ;塔拉拉;탈라라; +city::3691674;Sullana;Sul'jana;Sulana;Sullana;su ya na;suliana;swyana;Сульяна;Суљана;سویانا;სულიანა;蘇亞納; +city::3693345;Pucallpa;Callaria;PCL;Pucallpa;Pucalpa;Pukal'pa;Pukal'pae;Pukallpa;Pukalpa;Pulcalla;pu ka er pa;pu ki pa;pu lan er pa;pukaipa;pukaruba;pwkaaypa;pwkaypa;Пукалпа;Пукальпæ;Пукальпа;پوکاایپا;پوکایپا;ปูไกปา;პუკალიპა;プカルバ;普兰尔帕;普卡尔帕;푸카이파; +city::3693528;Piura;Gorad Pjura;P'jura;PIU;Piura;Piwra;Pjuro;pi wu la;piula;piura;piw ra;pywra;pywrh;Горад Пюра;Пиура;Пьюра;Піура;פיורה;پیورا;ปิวรา;პიურა;ピウラ;皮乌拉;피우라; +city::3694112;Paita;Paita;Pajta;Payta;pai ta;payta;Паита;Пайта;پایتا;派塔; +city::3696150;Jaen;JAE;Jaen;Jaén;Khaehn;Хаэн; +city::3696183;Iquitos;Gorad Ikitas;IQT;Ikitos;Ikitosas;Ikitus;Iquitos;Iquitum;akytws;aykytws;ikitoseu;ikitosu;xiki tos;yi ji tuo si;Ікітос;Горад Ікітас;Икитос;איקיטוס;اکیتوس;ایکیتوس;อีกีโตส;იკიტოსი;イキトス;伊基托斯;이키토스; +city::3696378;Huaraz;Gorad Guaras;Huaras;Huarasas;Huaraz;Uaras;Uaraz;Varas;Waras;awaraz;ualaseu;uarasi;wa la si;waras;warasu;Горад Гуарас;Уараз;Уарас;ואראס;اواراز;واراس;უარასი;ワラス;瓦拉斯;우아라스; +city::3696417;Huanuco;HUU;Huanuco;Huanukas;Huánuco;Uanuko;Vanucum;Wanuku;awanwkw;uanuko;wa nu ke;wanuko;wanwkw;Ŭanuko;Уануко;اوانوکو;وانوکو;უანუკო;ワヌコ;瓦努科;우아누코; +city::3698105;Chulucanas;Chulucana;Chulucanas;Chulukanasa;Чулуканаса; +city::3698304;Chimbote;CHM;Chimbote;Chimputi;Cimbote;Cimboto;chimbote;chinbote;chymbwth;qin bo te;Ĉimboto;Čimbotė;Чимботе;Чімботе;چیمبوته;ჩიმბოტე;チンボテ;钦博特;침보테; +city::3698350;Chiclayo;CIX;Chiclaium;Chiclayo;Chiklajo;Chiklayu;Ciklajus;Gorad Chyklaja;chikeullayo;chikurayo;chyklayw;qi ke la yue;tshyklayw;Čiklajus;Горад Чыклая;Чиклайо;Чиклајо;Чіклайо;ציקלאיו;تشيكلايو;چیکلایو;ჩიკლაიო;チクラーヨ;奇克拉约;치클라요; +city::3698658;Catacaos;Catacaos; +city::3699088;Cajamarca;CJA;Cajamarca;Caxamarca;Gorad Kakhamarka;Kachamarka;Kakhamarka;Kasamarko;Kashamarka;Kaŝamarko;Qajamarka;Qashamarka;ka ha ma ka;ka ha mar ka;kahamaleuka;kahamaruka;kakhamarka;Горад Кахамарка;Кахамарка;کاخامارکا;กาฮามาร์กา;კახამარკა;カハマルカ;卡哈馬卡;카하마르카; +city::3927758;Tarma;Tarma;ta er ma;tarma;Тарма;تارما;塔爾馬; +city::3928128;Tacna;Gorad Takna;TCQ;Tacna;Takna;Takno;Taqna;ta ke na;tak na;takeuna;takna;takuna;Горад Такна;Такна;Տակնա;טאקנה;تاكنا;تاکنا;ตักนา;ტაკნა;タクナ;塔克纳;타크나; +city::3929631;San Isidro;; +city::3931276;Puno;Gorad Puna;Pouno;Punas;Punjo;Puno;Punu;Punum;San Carlos de Puno;pu no;pu nuo;puno;Πούνο;Горад Пуна;Пуно;Պունո;ปูโน;პუნო;プーノ;普诺;푸노; +city::3932145;Pisco;Byen Pisco;PIO;Pisco;Piskas;Pisko;Pisqu llaqta;pi si ke;Писко;პისკო;皮斯科; +city::3934608;Moquegua;Gorad Makegua;Moceva;Mokegua;Mokegva;Moquegua;Mukiwa;Muqiwa;mo ke gua;mokegwa;mwkgwa;mwkygwa;Горад Макегуа;Мокегуа;Мокеґуа;موکگوا;موکیگوا;მოკეგუა;莫克瓜;모케과; +city::3936456;Lima;Gorad Lima;LIM;Lim;Lima;Limae;Limaq;Lime;Limma;Limo;Lioma;Lungsod ng Lima;Lìmma;Líma;Líoma;Lîma;li ma;lima;lyma;lymh;rima;Λίμα;Горад Ліма;Лимæ;Лима;Лиме;Ліма;Լիմա;לימא;לימה;لىما;ليما;لیما;लिमा;लीमा;লিমা;ਲੀਮਾ;ଲିମା;லிமா;ലിമ;ลิมา;ལི་མ།;ლიმა;ሊማ;リマ;利馬;리마; +city::3937513;Juliaca;Hullaqa;JUL;Juliaca;Khul'jaka;Khulijaka;furiaka;hu li ya ka;hulliaka;khwlyaka;Хулијака;Хульяка;خولیاکا;ხულიაკა;フリアカ;胡利亞卡;훌리아카; +city::3938415;Ilo;ILQ;Ilas;Ilo;Ilu;New Ilo;Pacocha;ilo;yi luo;Іло;Ило;ილო;伊洛; +city::3938527;Ica;Gorad Ika;Ica;Ika;aka pyrw;ayka prw;ika;yi ka;Іка;Горад Іка;Ика;اکا، پیرو;ایکا، پرو;იკა;イカ;伊卡;이카; +city::3939285;Huaral;Huaral;Uaral';Waral;awaral;wa la er;Уараль;اوارال;瓦拉爾; +city::3939459;Huancayo;Gorad Guankajo;Huancaya;Huancayo;Huankajus;Uankajo;Vancaium;Wankayu;awankayw;uangkayo;wan ka yue;wankashw;wankayo;wankayw;x wng kiy xo;Горад Гуанкаё;Уанкайо;Уанкајо;اوانکایو;وانكاشو;وانکایو;อวงไกย์โอ;უანკაიო;ワンカヨ;万卡约;우앙카요; +city::3940002;Huacho;Huacho;Uacho;Wachu llaqta;awachw;uacho;wa qiao;wachw;Уачо;اواچو;واچو;უაჩო;瓦喬;우아초; +city::3941584;Cusco;CUZ;Ciudad del Cuzco;Cosco;Cuschum;Cusco;Cuscu;Cuzco;Gorad Kuska;Kousko;Kuskas;Kusko;Qusqu;kosko;ku s ko;ku si ke;kucukko;kuseuko;kusko;kusuko;kuzko;kwzkw;qwsqw;Κούσκο;Горад Куска;Куско;Կուսկո;קוסקו;قوسقو;کوزکو;कुज़्को;कुस्को;কোস্কো;குசுக்கோ;กุสโก;კუსკო;クスコ;庫斯科;쿠스코; +city::3943423;Chosica;Chosica;Nueva Chosica; +city::3943789;Chincha Alta;Chincha;Chincha Alta;Chincha-Al'ta;Cinca Alta;Hanan Chincha;chyncha alta;shang qin cha;Činča Alta;Чинча Алта;Чинча-Альта;چینچا آلتا;ჩინჩა-ალტა;上欽查; +city::3944797;Cerro de Pasco;Cerro de Pasco;Collis Pasca;Pasqu qullu;Pasqu urqu;Sero de Paskas;Serro-de-Pasko;krw dh paskw;sai luo de pa si ke;selodepaseuko;Серро-де-Паско;سیرو دے پاسکو;کرو ده پاسکو;სერო-დე-პასკო;セロ・デ・パスコ;塞羅德帕斯科;세로데파스코; +city::3946083;Callao;Callao;El Callao;Gorad Kal'jaa;Kajao;Kal'jao;Kalao;Kaljao;Kallao;Kallaw;Kalyao;Regio de Callao;Regió de Callao;ka ya e;kayao;kayaw;kayayw;klaw;Горад Кальяа;Кальяо;Каляо;Каяо;Каљао;Կալյաո;كاياو;کایائو;کایاو;کلاؤ;კალიაო;カヤオ;卡亞俄;카야오; +city::3947019;Ayacucho;AYP;Ajakucas;Ajakucho;Ajakuco;Ajakuĉo;Ajakučas;Ayacucho;Ayaquchu;Gorad Ajakucha;Vamanga;Wamanqa;a ya ku qiao;ayakucho;ayakwchw;Аякучо;Горад Аякуча;آیاکوچو;ایاکوچو;აიაკუჩო;アヤクーチョ;阿亚库乔;아야쿠초; +city::3947322;Arequipa;AQP;Arecipa;Arekip;Arekipa;Arekipo;Arequipa;Arikipa;Ariqipa;Gorad Arehkipa;a lei ji pa;alekipa;arekipa;arekkippa;arkypa;arykyba;arykypa;xareki pa;Αρεκίπα;Арекипа;Арекіпа;Горад Арэкіпа;ארקיפה;أريكيبا;ارکیپا;اریکیپا;अरेकिपा;அரேக்கிப்பா;อาเรกีปา;არეკიპა;アレキパ;阿雷基帕;아레키파; +city::3948642;Abancay;Abancai;Abancaius;Abancay;Abankaj;Abankajus;Abankay;Avan'kai;Awankay;Gorad Abankaj;a ban kai;abangkai;abankai;abankay;awankayy;Αβανκάι;Абанкай;Горад Абанкай;آبانکای;اوانکائی;აბანკაი;アバンカイ;阿班凯;아방카이; +city::2088122;Port Moresby;Gorad Port-Morsbi;POM;Po Moresbi;Port Moresby;Port Moresmpi;Port Morsbi;Port Morsbis;Port-Moresbo;Port-Morsbi;Portmorsbi;Portus Moresbiensis;Pot Mosbi;Puerto Moresby;Pò Moresbi;bwrt mwrsby;mo er ci bi gang;mo er zi bi gang;phxrt mxr sbi;porata moraisabi;porta moresbi;poteumoleujeubi;potomoresubi;pwrt mwrsby;Πορτ Μόρεσμπι;Горад Порт-Морсбі;Порт Морсби;Порт-Морсби;Порт-Морсбі;Պորտ Մորսբի;פורט מורסבי;بورت مورسبي;صوبہ پورٹ مورسبائی;مورېسبى پورتى;پورت مورسبی;پورٹ مورسبی;پۆرت مۆرسبی;पोर्ट मॉरेस्बी;पोर्ट मोरेस्बी;ਪੋਰਟ ਮੋਰੈਸਬੀ;พอร์ตมอร์สบี;པོ་རོ་ཊི་མོ་རེ་སི་བི།;პორტ-მორზბი;ፖርት ሞርስቢ;ポートモレスビー;莫尔兹比港;포트모르즈비; +city::2092740;Lae;LAE;Lae;Laeh;Laeh shaary;Laė;la-e;lai cheng;layh;rae;Лае;Лаэ;Лаэ шаары;לאה;لائه;لائے;ラエ;莱城;라에; +city::1679432;Zamboanga;Burleigh School;Ciudad ti Zamboanga;Dakbayan sa Zamboanga;Lungsod ng Zamboanga;Syudad han Zamboanga;ZAM;Zamboanga;Zamboanga City;Zamboanga Lakanbalen;samboang-ga;san bao yan;sanboanga;Замбоанга;サンボアンガ;三宝颜;삼보앙가; +city::1680007;Victorias;Dakbayan sa Victorias;Syudad han Victorias;Victorias;Victorias City; +city::1680116;NIA Valencia;Kota Valencia;Valencia;Valencia City;Valencia Lakanbalen;Valensija;ba lun xi ya cheng;ballensia;Валенсия;巴伦西亚城;발렌시아; +city::1680197;Urdaneta;Kota Urdaneta;Urdaneta Lakanbalen;Urdaneta de Pangasinan;Urdaneta de Pangasinán; +city::1680505;Ualog;Ualog; +city::1680932;Tuguegarao;Lungsod ng Tuguegarao;TUG;Tuguegarao;Tuguegarao City;Tuguegaro; +city::1681602;Toledo;Ciudad ti Toledo;Dakbayan sa Talisay;Toledo;Toledo City;Толедо; +city::1682598;Taytay;Taytay; +city::1682812;Tarlac City;Tarlac;Tarlac City; +city::1683013;Tanza;Tanza; +city::1683319;Tanay;Tanay; +city::1683340;Tanauan;Kota Tanauan;Tanauan City;Tanauan Lakanbalen; +city::1683877;Talisay;Talisay; +city::1683881;Talisay;Ciudad ti Talisay;Talisay;Talisay City;tarisai;タリサイ; +city::1684016;Talavera;Talavera;Талавера; +city::1684269;Magugpo;Kota Tagum;Magugpo;Tagum;Tagum City;Tagum Lakanbalen;Taum;Taúm;tagum;tagwm;تاگوم;타굼; +city::1684308;Taguig;City of Taguig;Santa Ana;Tagig;Taguig;Тагиг; +city::1684497;Tagbilaran City;Dakbayan sa Tagbilaran;Syudad han Tagbilaran;TAG;Tagbilaran;Tagbilaran City; +city::1684681;Tacurong;Kota Tacurong;Tacorong;Tacurong;Tacurong City;Tacurong Lakanbalen;Takrong;Takurong; +city::1685117;Tabaco;Kota Tabaco;Syudad nin Tabaco;Tabaco City;Tabaco Lakanbalen;Tobaco;tabako;tabako shi;タバコ市;타바코; +city::1685218;Surigao;Ciudad ti Surigao;Dakbayan sa Surigao;Lungsod ng Surigao;SUG;Surigao;Surigao City;Surigao Lakanbalen;su li gao;suligao;surigao;スリガオ;苏里高;수리가오; +city::1685577;Subic;Subic; +city::1685755;Sorsogon;; +city::1685880;Solana;Solana;Solano; +city::1686547;Silang;; +city::1687534;Santo Tomas;Santa Tomas;Santo Tomas;Santo-Tomas;Санто-Томас; +city::1687687;Santol;; +city::1687801;Santiago;; +city::1687894;Santa Rosa;Kota Santa Rosa;Santa Rosa City;Santa Rosa Lakanbalen;Santa-Rosa;Санта-Роса; +city::1688253;Santa Cruz;Santa Cruz;santa krwz lagwna;سانتا کروز، لاگونا; +city::1688749;San Pedro;San Pedro; +city::1688830;San Pablo;Dakbayan sa San Pablo;Kota San Pablo;Lungsod ng San Pablo;San Pablo;San Pablo City;San Pablo Lakanbalen;Siyudad na San Pablo; +city::1688954;San Miguel;San Miguel;San Muigel Mayumo; +city::1689056;San Mateo;San Mateo; +city::1689286;San Juan;San Juan;San Juan City;San Juan del Monte; +city::1689395;San Jose del Monte;Kota San Jose del Monte;Lungsod ng San Jose del Monte;San Jose Del Monte;San Jose del Monte;San Jose del Monte City;San Jose del Monte Lakanbalen;San José Del Monte;San José del Monte;San-Khose-del'-Monte;sanhosedelmonte;Сан-Хосе-дель-Монте;산호세델몬테; +city::1689510;San Jose;Pandurucan;SJI;San Jose; +city::1689832;San Ildefonso;San Ildefonso; +city::1690033;San Fernando;Dakbayan sa San Fernando;Kota San Fernando;Lungsod ng San Fernando;SFE;San Fernandas;San Fernando;San Fernando City;San Fernando Lakanbalen;San-Fernando;Siyudad na San Fernando;sanferunando;sanpeleunando;sheng fei er nan duo;Сан-Фернандо;سان فرنانڈو، لا یونین;サンフェルナンド;圣费尔南多;산페르난도; +city::1690039;San Fernando;Dakbayan sa San Fernando;Kota San Fernando;Lungsod ng San Fernando;San Fernando;San Fernando Lakanbalen;San-Fernando;Santo Rosario;Siyudad na San Fernando;Urbs Sancti Ferdinandi;sanferunando;sanpeleunando;sheng fei er nan duo;Сан Фернандо;Сан-Фернандо;سان فرنانڈو، پامپانگا;サンフェルナンド;圣费尔南多;산페르난도; +city::1691150;Sagay;Kota Sagay;Sagay City;Sagay Lakanbalen;سگے، نیگروس وکڈینٹل; +city::1691444;Roxas City;RXS;Roxas;Roxas City; +city::1692192;Quezon City;Keson-Siti;Quezon;Quezon City;Кесон-Сити; +city::1692520;Pulong Santa Cruz;Pulong Santa Cruz;Pulong Santa Rosa;Santa Cruz; +city::1692565;Pulilan;Pulilan; +city::1692685;Puerto Princesa;Dakbayan sa Puerto Princesa;Kota Puerto Princesa;Lungsod ng Puerto Princesa;PPS;Puehrto-Prinsesa;Puerta Princesa;Puerto Princesa;Puerto Princesa City;Puerto Princesa Lakanbalen;Puerto Prinsesa;Syudad han Puerto Princesa;Syudad nin Puerto Princesa;bwrtwbrnss;pu lin sai sa gang;pueleutopeulinsesa;pwrtwprnss;pwyrtw prnsysa;Пуерто Принсеса;Пуэрто-Принсеса;بورتوبرنسس;پورتوپرنسس;پویرتو پرنسیسا;プエルト・プリンセサ;普林塞薩港;푸에르토프린세사; +city::1693077;Polomolok;Polomoloc;Polomolok; +city::1693136;Polangui;Polangui; +city::1693239;Plaridel;Pandi;Plaridel;Quingua;Quinqua; +city::1694290;Patuto;Patuto; +city::1695743;Panalanoy;; +city::1695804;Panabo;Kota Panabo;Panabo;Panabo City;Panabo Lakanbalen; +city::1696710;Pagadian;Lungsod ng Pagad;PAG;Pagadian;Pagadian City; +city::1696899;Ozamiz City;OZC;Ozamis;Ozamis City;Ozamiz;Ozamiz City; +city::1697018;Ormoc;Ciudad ti Ormoc;Dakbayan sa Ormoc;Kota Ormoc;Lungsod ng Ormoc;MacArthur;OMC;Ormco;Ormoc;Ormoc City;Ormoc Lakanbalen;Oromoc;Syudad han Ormoc;awrmwk;oleumokeu;orumokku;اورموک;オルモック;오르모크; +city::1697175;Olongapo;Bandaraya Olongapo;Ciudad ti Olongapo;Dakbayan sa Olongapo;Kota Olongapo;Lungsod ng Olongapo;Olongapo;Olongapo City;Olongapo Lakanbalen;Olóngapo;Siyudad na Olongapo;Siyudad na Olóngapo;Syodad nin Olongapo;ao long a bo;awlwngapw;ollong-gapo;اولونگاپو;奥隆阿波;올롱가포; +city::1697376;Obando;Obando; +city::1697497;Norzagaray;Norzagaray;Norzugaray; +city::1698030;Nasugbu;Nasugbu; +city::1698548;Naic;; +city::1698829;Naga;Ciudad nin Naga;Dakbayan sa Naga;Kota Naga;Lungsod ng Naga;Maogmang Naga;Naga City;Naga Lakanbalen;Nagi;Syudad nin Naga;WNP;naga;naga kamarynz jnwby;Наги;ناگا، کامارینز جنوبی;ナガ;나가; +city::1699054;Muricay;Muricay; +city::1699296;Rodriguez;Montalban;Rodriges;Rodriguez;Rodríguez;luo de li ge si;Родригес;罗德里格斯; +city::1699323;Monkayo;Moncayo;Monkayo; +city::1699572;Minglanilla;Minglanilla; +city::1699802;Meycauayan;Kota Meycauayan;Meycauayan;Meycauayan City;Meycawayan;myykawayan;میئکاوایان; +city::1700360;Mati;Kota Mati;MXI;Mati;Mati City;ma di;maty dawayw shrqy;Мати;ماتی، داوائو شرقی;馬蒂; +city::1700868;Mariveles;Mariveles; +city::1700917;Marilao;Marilao;Марилао; +city::1700980;Mariano;Mariano; +city::1701053;Marawi City;City of Dansalan;Dansalan;Dansalan City;Islamic City of Marawi;Maraur;Marawi;Marawi City; +city::1701472;Mantampay;; +city::1701500;Mansilingan;; +city::1701668;Manila;City of Manila;Dakbayan sa Manila;Gorad Manila;Lungsod ng Maynila;MNL;Mainile;Manila;Manilae;Manilla;Manillah;Manille;Manilo;Manyl;Maníla;Maynila;Menila;ma ni la;manila;manilla;manira;manyl;manyla;mnila;mnylh;myanila;Μανίλα;Горад Маніла;Манилæ;Манила;Маніла;מנילה;مانىلا;مانيلا;مانیل;مانیلا;मनिला;मनीला;ম্যানিলা;மணிலா;ಮನಿಲ;මැනිලා;มนิลา;มะนิลา;མ་ནི་ལ།;မနီလာမြို့;მანილა;ማኒላ;マニラ;马尼拉;마닐라; +city::1701872;Mangaldan;Mangaldan; +city::1701947;Mandaue City;Dakbayan sa Mandaue;Lungsod ng Mandaue; +city::1701966;Mandaluyong City;Mandaluyong;Mandayulong;San Felipe;San Felipe Neri; +city::1702096;Manaoag;Manaoag; +city::1702442;Malungun;Malungon;Malungun;Maluñgun; +city::1702540;Malolos;Dakbayan sa Malolos;Lungsod ng Malolos;Malalos;Malolas;Malolos;Malolos City;Malolos Lakanbalen;Syudad nin Malolos;mallolloseu;Малолос;말롤로스; +city::1702934;Malaybalay;Dakbayan sa Malaybalay;Kota Malaybalay;Lungsod ng Malaybalay;Malajbalaj;Malaybalay;Malaybalay City;Malaybalay Lakanbalen;malaybalayy;mallaiballai;Малайбалай;مالایبالائی;말라이발라이; +city::1703417;Makati City;Makati;Makati City; +city::1704067;Magalang;Magalan;Magalang; +city::1704703;Mabalacat City;CRK;Mabalacat; +city::1705357;Lucena;Dakbayan sa Lucena;Kota Lucena;Lucena;Lucena City;Lucena Lakanbalen;Lungsod ng Lucena;Lusena;Siudad ti Lucena;lu sai na;lusena;lwsyna flpayn;Лусена;لوسینا، فلپائن;卢塞纳;루세나; +city::1705440;Lubao;Lubao; +city::1705536;Los Banos;Los Banos;Los Baños;Los-Ban'os;Лос-Баньос; +city::1706090;Lipa City;Ciudad ti Lipa;Lipa;Lipa City;Липа; +city::1706188;Lingayen;Lingayen; +city::1706361;Limay;Limay; +city::1706609;Libon;Libon; +city::1706684;Libertad;; +city::1706889;Legaspi;LGP;Legaspi City;Legazpi;Legazpi City; +city::1707267;Lapu-Lapu City;Dakbayan sa Lapu-Lapu;Lapu-Lapu;Lapu-Lapu City;Opon;Siudad ti Lapu-Lapu;la pu la pu shi;rapu=rapu shi;ラプ=ラプ市;拉普拉普市; +city::1707404;Laoag;Dakbayan sa Laoag;Kota Laoag;LAO;Laoag;Laoag City;Laoag Lakanbalen;Laoang;Laog;Loag;Lungsod ng Laoag;Siyudad na Laoag;Syudad nin Laoag;lao wo;laoageu;lawag;raoagu;Лаоаг;لاواگ;ལའ་ཨག;ལའོ་ཨག;ラオアグ;佬沃;라오아그; +city::1707944;Lala;Lala; +city::1708522;Koronadal;Koronadal;Koronadal City;Koronadal Lakanbalen;Kota Koronadal;Marbel;ke luo na da er;kolonadal;koronatal;kwrwnadal;کورونادال;கொரொனடால்;科罗纳达尔;코로나달; +city::1708824;Kidapawan;Kadapawan;Kidapavan;Kidapawan;Kidapawan Lakanbalen;Kota Kidapawan;kidapawan;kydapawan;Кидапаван;کیداپاوان;키다파완; +city::1709003;Kawit;qwwyt;קוויט; +city::1709632;Kalibo (poblacion);Banwa it Kalibo;KLO;Kalibo;Kalibo Town;Pueblo de Calivo;Калибо; +city::1709968;Kabankalan;Kabankalan; +city::1710141;Jolo;Dzholi;JOL;Jolo;Joló;Kholo;Sug;Sulu;Suluk;hollo;horo;jwlw swlw;Джоли;Холо;جولو، سولو;ホロ;홀로; +city::1710519;City of Isabela;Basilan;Basilan City;City of Isabela;Isabel;Isabela;Isabela City;Izabela;Lungsod ng Isabela;Municipality of Isabela;Изабела; +city::1710544;Iriga City;Iriga;Iriga City; +city::1710914;Imus;Imus;Imus Lakanbalen;Lungsod ng Imus;amws;Имус;اموس; +city::1711005;Iloilo;ILO;Iloilo;Iloilo City;Iloilo Proper;Илоило; +city::1711082;Iligan City;City of Iligan;Idigan;Iligan; +city::1711146;Ilagan;Ilagan;alagan;Илаган;الاگان; +city::1711982;Hagonoy;Hagonoy;Hagony;Hagunoy; +city::1712051;Guyong;Guyong; +city::1712531;Guiguinto;Guiguinto; +city::1713014;General Trias;General Trias Lakanbalen;Heneral Trias; +city::1713022;General Santos;Dadiangas;Dakbayan sa General Santos;GES;General Santos City;General Santos Lakanbalen;General-Santos;Heneral Santos;Kota General Santos;Siyudad na Heneral Santos;jeneoleolsantoseu;jnral santws;jnrl santws;san tou si jiang jun shi;Генерал-Сантос;جنرال سانتوس;جنرل سانتوس;ジェネラル・サントス;三投斯將軍市;제너럴산토스; +city::1713226;Gapan;Capan;Gapan; +city::1714201;Dumaguete;Ciudad ti Dumaguete;DGT;Dumagete;Dumageute;Dumaguete;Dumaguete City;Dumaguete Lakanbalen;Dumaguette;Kota Dumaguete;Urbs Dumaguete;do~umagete;dumagete;dwmagwyty;lang mang ya de;Думагете;دوماگویتی;ドゥマゲテ;朗芒芽地;두마게테; +city::1714674;Dipolog;DPL;Dakbayan sa Dipolog;Dipolog;Dipolog City;Dipolog Lakanbalen;Dipólog;Kota Dipolog;Lungsod ng Dipolog;dipollogeu;diporogu;dypwlwg;Диполог;دیپولوگ;ディポログ;디폴로그; +city::1714766;Dinalupihan;Dinalupian;Dinalupihan;Dinalupihari;Dinalupijan;Dinalupinan; +city::1714956;Digos;Digos City;Digos Lakanbalen;Kota Digos;dygws;دیگوس; +city::1715348;Davao;Central;Ciudad ti Davao;DVO;Dakbayan sa Davao;Davao;Davao City;Davao Lakanbalen;Davao Stad;Davaó;Lungsod ng Dabaw;Syudad han Davao;da wo shi;dabao;dafaw;dawayw syty;Давао;دافاو;داوائو سیتی;ダバオ;达沃市;다바오; +city::1715430;Dasmarinas;Dasmarin'jas;Dasmarinas;Dasmarinas Lakanbalen;Dasmarines;Dasmariñas;Dasmariñas Lakanbalen;Kota Dasmarinas;Kota Dasmariñas;da si ma li ni ya si;daseumalinyaseu;dasmarngas;dasmarynyas;dasumarinyasu;Дасмариньяс;داسمارنگاس;داسمارینیاس;ダスマリニャス;达斯马里尼亚斯;다스마리냐스; +city::1715542;Dapitan;Dapitan;Dapitan City;Дапитан; +city::1715804;Danao;Danao;Danao City;Idanao; +city::1716287;Daet;DTE;Daet;dayt kamarynz shmaly;Дает;دایت، کامارینز شمالی; +city::1716771;Cotabato;CBO;Catabate;Catabato;Cotabato;Cotabato City;Cottabato;Dakbayan sa Cotabato;Kota-Bato;Kotabato;kotabato;Котабато;コタバト; +city::1716995;Concepcion;Concepcion;Conception;Konseps'on;Консепсьон; +city::1717512;Cebu City;CEB;Cebu;Cebu City;City of Cebu;Ciudad de Cebu;Ciudad de Cebú;Dakbayan sa Sugbo;Sebu;sebu;Себу;세부; +city::1717641;Cavite City;Bandar Cavite;Cavite;Cavite City;Cavite Lakanbalen;Ciudad ti Cavite;Dakbayan sa Cavite;Kavite;Lungsod ng Kabite;Siyudad na Cavite;Syudad han Cavite;jia mi de;kabite;kavu~ite;Кавите;カヴィテ;甲米地;카비테; +city::1717911;Catbalogan;Catbalogan;Catbalogan City;Kota Catbalogan;Lungsod ng Catbalogan;katbalwgan;کاتبالوگان; +city::1718306;Carmona;Carmona; +city::1718722;Capas;Capas;Capaz;Kapas;Капас; +city::1719274;Candelaria;Candelaria; +city::1720034;Calumpit;Calumpit; +city::1720402;Calbayog City;CYP;Calbayog;Calbayog City;Dakbayan sa Calbayog;Syudad san Calbayog; +city::1720561;Calapan;Calapan;Calapan City;Calapan Lakanbalen;Calapán;Dakbayan sa Calapan;Kalapan;Kota Calapan;Lungsod ng Calapan;ka la pan;kalapan;kallapan;کالاپان;卡拉潘;칼라판; +city::1720681;Calamba;Calamba;Calamba City;Calamba Lakanbalen;Calambá;Kalamba;Kota Calamba;Urbs Calamba;ka lan ba;kalamba lagwna;kallamba;Каламба;کالامبا، لاگونا;卡兰巴;칼람바; +city::1720840;Cainta;Cainta; +city::1721080;Cagayan de Oro;CGY;Cagayan de Oro;Cagayan de Oro City;Cagayan de Oro Lakanbalen;Cagayán de Oro;Dakbayan sa Cagayan de Oro;Kagajan de Oras;Kagajan-de-Oro;Lungsod ng Cagayan de Oro;ka jia yan de ao luo;kagayande-olo;Кагаян-де-Оро;カガヤン・デ・オロ;卡加延德奥罗;카가얀데오로; +city::1721168;Cadiz;Cadiz;Cadiz Viejo; +city::1721906;Cabanatuan City;Cabanatuan;Cabanatuan City;Cabanatúan;Ciudad ti Cabanatuan; +city::1722186;Butuan;BXU;Butuan;Butuan City;Butuan Lakanbalen;Butuanas;City of Butuan;Dakbayan sa Butuan;Kota Butuan;Lungsod ng Butuan;Syudad nin Butuan;buto~uan;butuan;bwtwan;putuvan;wu duan shi;بوتوان;புடுவன்;ブトゥアン;武端市;부투안; +city::1722930;Bulaon;Bulaon;Bulaun; +city::1723066;Bulacan;Bulacan; +city::1723510;Budta;Budta; +city::1724489;Bocaue;Bocaue; +city::1724767;Bislig;BPH;Bislig;Bislig City;Bislig Lakanbalen;Dakbayan sa Bislig;Kota Bislig;Lungsod ng Bislig;bi si li ge shi;bslg;بسلگ;比斯利格市; +city::1724933;Binonga;Binonga; +city::1725094;Binangonan;Binangonan; +city::1725115;Binan;Binan;Binan City;Binyang;Biñan;Biñan City;Biñán;Ciudad nin Binan;Ciudad nin Biñan;Kota Binan;Kota Biñan;Lungsod ng Binan;Lungsod ng Biñan;bngan;بنگان; +city::1726280;Batangas;Batangas;Batangas City;Батангас; +city::1726339;Batac City;City of Batac;Ciudad ti Batac;Lungsod ng Batac; +city::1727400;Banga;Banga;Bañga; +city::1727995;Baliuag;Baliuag;Baliwag;Balíuag; +city::1728336;Balayan;Balajan;Balayan;Балаян; +city::1728523;Balanga;Balanga City;Kota Balanga;Syudad Balanga;balanga siti;balanga batan;بالانگا، باتآن;बलांगा सिटी; +city::1728584;Balagtas;Balagtas;Tabang; +city::1728772;Bais;Bais;Bais City;Bais Lakanbalen;Bajs;Ciudad ti Bais;Dakbayan sa Bais;Kota Bais;bays nygrws shrqy;jzyrt byz;Байс;بایس، نیگروس شرقی;جزيرة بيز; +city::1728930;Baguio;BAG;Bagijas;Bagio;Baguio;Baguio City;Baguio Lakanbalen;Ciudad ti Baguio;Dakbayan sa Baguio;Kota Baguio;Lungsod ng Baguio;Siyudad na Baguio;Syudad nin Baguio;ba keiy w;bagio;bagyw;bi yao shi;pakiyo;Багио;باگیؤ;باگیو;பாகியோ;บาเกียว;バギオ;碧瑶市;바기오; +city::1729085;Bago City;Bago;City of Bago; +city::1729524;Bacoor;Bacoor Lakanbalen;Bakoor;Lungsod ng Bacoor;bakwwr;Бакоор;باکوور; +city::1729564;Bacolod City;BCD;Baclod City;Bacolod;Bacolod City;Bacoloo City;Bacólod;Ciudad ti Bacolod;Dakbayan sa Bacolod;Lungsod ng Bacolod;Syudad han Bacolod; +city::1730225;Arayat;Arayat; +city::1730413;Apalit;Apalit; +city::1730501;Antipolo;; +city::1730713;Angono;Angono; +city::1730737;Angeles City;Angeles;Angeles City;CRK;anghelleseu;앙헬레스; +city::1978681;Malingao;Malingao; +city::7290466;Pasig City;Pasig; +city::1162004;Khairpur;Khaipur;Khairpur;Khairpur Mirs;Khairpur Mīrs;Khajrpura;Хайрпура; +city::1162105;Zhob;Apozai;Fort Sandeman;Fort Sanderman;PZH;Zhob; +city::1162456;Wazirabad;Wazirabad;Wazīrābād; +city::1162813;Vihari;Vehari;Vihari;Vihāri; +city::1163054;Turbat;TUK;Turbat;trbt;tu er ba te;turbt;Турбат;تربت;تُربت;土爾巴特; +city::1163272;Toba Tek Singh;Toba Tek Singh; +city::1163952;Tando Muhammad Khan;Tando Mohammad Khan;Tando Muhammad Khan;Tando Muhammad Khān; +city::1163965;Tando Allahyar;Tando Alahyar;Tando Allahyar;Tando Allāhyār; +city::1163967;Tando Adam;; +city::1164216;Swabi;Swabi;Swābi; +city::1164408;Sukkur;Gorad Sukur;SKZ;Sukkur;Sukur;Sukuras;Szukkur;Szukkúr;sakhkhara;sakkaru;skr;skr pakstan;su ku er;sukuleu;Горад Сукур;Суккур;Сукур;سکر;سکر، پاکستان;سکھر;सख्खर;サッカル;蘇庫爾;수쿠르; +city::1164896;Sibi;Ibis;SBQ;Sibi;Sibis;sby;Сиби;Сібі;سبي;سبی; +city::1164909;Sialkot;Gorad Sijalkot;SKT;Sialkot;Sialkotas;Sialkote;Sijalkot;Siālkot;ciyalkot;shiarukoto;si'alakota;sialkoteu;siyalakota;syalkwt pakstan;syalkwٹ;xi ya er ke te;Горад Сіялкот;Сиалкот;Сиялкот;Сијалкот;سيالکوټ;سیالکوت، پاکستان;سیالکوٹ;सियालकोट;শিয়ালকোট;ਸਿਆਲਕੋਟ;சியால்கோட்;സിയാൽകോട്ട്;シアールコート;锡亚尔科特;시알코트; +city::1164970;Shujaabad;Shujaabad;Shujabad;Shujāābād; +city::1164987;Shorkot;Shorko;Shorkot; +city::1165108;Shikarpur;Shikarpur;Shikārpur; +city::1165221;Sheikhupura;Qila Sheikhupura;Sekhupura;Sheikhu Pura;Sheikhupura;Sheikkhupura;Shekhupura;Shekhūpura;Shekkhupura;ceykkuppura;sekhupura;shykhwpwra;shykhwpwrh;shykhwpwrh pakstan;xie hu bu er;Śekhupura;Шеикхупура;Шекхупура;شيخوپوره;شیخوپورا;شیخوپوره، پاکستان;شیخوپورہ;ਸ਼ੇਖ਼ੂਪੁਰਾ;சேய்க்குப்புரா;謝胡布爾; +city::1165388;Shakargarh;Shakargarh;Shakargarr; +city::1165569;Shahkot;Shah kot;Shahkot;Shāh kot;Shāhkot; +city::1165635;Shahdadpur;Shahdadpur;Shāhdādpur; +city::1165638;Shahdad Kot;Shahdad Kot;Shahdadkot;Shahdadpur;Shahdād Kot;Shāhdādkot;Shāhdādpur; +city::1165744;Shabqadar;Shabgadar Fort;Shabkadar;Shabqadar;Shapqadar; +city::1166000;Sargodha;SGI;Sargoda;Sargodha;Sargodkha;sa ge da;saleugoda;saragodha;sarugoda;srgwdha;Саргода;Саргодха;سرگودها;سرگودھا;सरगोढा;ਸਰਗੋਧਾ;サルゴーダー;萨戈达;사르고다; +city::1166146;Sangla Hill;Sangla Hill; +city::1166164;Sanghar;Sangar;Sanghar;Sānghar; +city::1166265;Sambrial;Sambrial;Sambriāl; +city::1166548;Sahiwal;Gorad Sakhival;Montgomery;SWN;Sahivalas;Sahiwal;Sakhival;Sāhīwāl;sa xi wa er;sahivala;sahywal;sahywal pakstan;saہiwal;Горад Сахівал;Сахивал;ساهيوال;ساهیوال، پاکستان;ساہِيوال;ساہیوال;साहिवाल;ਸਾਹੀਵਾਲ;薩希瓦爾; +city::1166652;Sadiqabad;Sadikabad;Sadiqabad;Sādikābād;Sādiqābād; +city::1166827;Rohri;Lohri;Rohri;rohari;روہڑی;रोहड़ी; +city::1166993;Rawalpindi;Ralalpindi;Ravalpindi;Ravalpindis;Rawalpindi;Rawalpindî;Rávalpindí;Rāvalpindi;Rāwalpindi;iravalpinti;la wa er pin di;lawalpindi;ra'oyalapindi;ravalapidi;ravalapindi;ravalpyndy;rawa lpin di;rawarupindi;rawlbndy;rawlpndy;Равалпинди;Равалпінді;Ռավալպինդի;רוואלפינדי;راولبندي;راولپندی;راولپنڈی;راولپنڈی شہر;راولپنډي;راۋالپىندى;रावलपिंडी;रावळपिंडी;রাওয়ালপিন্ডি;ਰਾਵਲਪਿੰਡੀ;இராவல்பிண்டி;റാവൽപിണ്ടി;ราวัลปินดี;ラーワルピンディー;拉瓦尔品第;라왈핀디; +city::1167380;Rajanpur;Rajanpur;Rājanpur; +city::1167507;Chenab Nagar;Chenab Nagar;Chenāb Nagar;Rabwah;Rabwāh; +city::1167528;Quetta;Gorad Kveta;Ketta;Kotah;Kueta;Kveta;Kvetta;Kvéta;Kwatah;Kweta;Quetta;Shal;Shalkot;Shāl;Shālkot;UET;khewt ta;ko'ita;koyeta;kuetta;kui da;kuvetta;kverra;kveta;kvetta;kweta;kwyth;Горад Квета;Квета;Кветта;Куета;كويته;کوئٹہ;کوټه;کویته;क्वेटा;क्वेट्टा;কোয়েটা;ਕੋਇਟਾ;குவெட்டா;ക്വെറ്റ;ක්වේටා‍;เควตตา;კვეტა;クエッタ;奎達;퀘타; +city::1167622;Kambar;Kambar;Qambar;Камбар; +city::1168197;Peshawar;Gorad Peshavar;PEW;Pesabar;Pesavar;Pesavara;Pesavaras;Pesavaro;Pesaver;Peschawar;Peshavar;Peshawar;Peshovar;Pesjawar;Peszawar;Pexauar;Peŝavaro;Peşaver;Pešavaras;Pešāvara;Pişəvər;Péšávar;bai sha wa;byshawr;pecavar;pes war;pesa'oyara;pesavara;peshawaru;pesyawaleu;pshawr;pyshawr;Πεσαβάρ;Горад Пешавар;Пешавар;Փեշավար;פשאוור;بيشاور;پشاور;پیشاور;پېشاۋار;پېښور;पेशावर;পেশাওয়ার;ਪੇਸ਼ਾਵਰ;பெசாவர்;പെഷവാർ;เปศวาร์;პეშავარი;ペシャーワル;白沙瓦;페샤와르; +city::1168226;Pattoki;Mandi Pattoki;Pattoki;ptwky;tsyl ptwky;Паттоки;تصیل پتوکی;پتوكى; +city::1168307;Pasrur;Pasrur;Pasrūr;Pasur;Pasūr; +city::1168412;Pano Aqil;Pano Akil;Pano Aqil;Pāno Āqil; +city::1168555;Pakpattan;Pakpattan;Pākpattan; +city::1168718;Okara;Okara;Okāra;Окара; +city::1169116;Nawabshah;Nawabshah;Nawābshāh;WNS; +city::1169278;Narowal;Narowal;Nārowāl; +city::1169372;Nankana Sahib;Nanakana Sahib;Nankana Municipality;Nankana Sahib;Nankāna Sāhib; +city::1169605;Muzaffargarh;Muzafargarkh;Muzafargaro;Muzaffargar;Muzaffargarh;Muzaffargarkh;Muzaffargharh;mu zha fa er ge er xian;muzaffaragarha;mzfr grh pakstan;Музафаргарх;Музаффаргар;Музаффаргарх;مظفر گره، پاکستان;مظفر گڑھ;मुज़फ़्फ़रगढ़;穆扎法尔格尔县; +city::1169607;Muzaffarabad;MFG;Musaffarabad;Musaffarābād;Muzafarabad;Muzaffarabad;Музафарабад; +city::1169692;Muridke;Muridke;Murīdke; +city::1169825;Multan;MUX;Multan;Multanas;Multān;mu er tan;multan;murutan;Мултан;مُلتان;ムルターン;木爾坦; +city::1170013;Moro;; +city::1170295;Mirpur Khas;MPD;Mirpur Khas;Mirpur-Khas;mi er bu er ha si;myr pwr khas;myrpwr khas;myrpwr khas pakstan;Мирпур Хас;Мирпур-Хас;ميرپور خاص;میر پور خاص;میرپور خاص;میرپور خاص، پاکستان;მირპურქასი;米爾布爾哈斯; +city::1170395;Mingora;Mingaora;Mingora;Mingāora;migora;ming ge la;ming jiao la;ming-gola;myngwra;myngwrh;Мингаора;Мингора;مينگوره;مینګورہ;مینگورا;مینگوره;مینگورہ;ਮਿੰਗੋਰਾ;明戈拉;明绞拉;밍고라; +city::1170425;Mianwali;MWD;Mianwali;Miānwāli; +city::1170486;Mian Channun;Mian Channu;Mian Channun;Miān Channūn; +city::1170667;Matli;; +city::1170880;Mardan;Mardan;Mardanas;Mardān;ma er dan;mrdan;Мардан;مردان;馬爾丹; +city::1170951;Mansehra;Mansehra;Mansekhra;Mānsehra;Мансехра; +city::1171123;Mandi Bahauddin;Bahauddin;Mandi Bahauddin;Mandi Bahāuddīn; +city::1171502;Mailsi;Mailsi; +city::1171965;Lodhran;Lodhran;Lodhrān; +city::1172035;Layyah;Layyah;Leiah; +city::1172128;Larkana;Larkana;Larkane;Larkāna;Lārkāna;Ларкане; +city::1172318;Lala Musa;Lala Musa;Lalamusa;Lāla Mūsa; +city::1172451;Lahore;Gorad Lakhor;LHE;Lachori;Lahaur;Lahor;Lahora;Lahoras;Lahore;Lahorium;Lakhor;Lohur;Láhaur;Lâhore;Lāhaur;la h xr;la he er;lahaura;laholeu;lahor;lahora;lahori;lahwr;lakur;lwہwr;rahoru;Λαχόρη;Горад Лахор;Лахор;Լահոր;לאהור;لاهور;لاھور;لاھۆر;لاہور;لوہوٗر;لہور;लाहोर;लाहौर;লাহোর;ਲਹੌਰ;લાહોર;லாகூர்;లాహోర్;ಲಾಹೋರ್;ലാഹോർ;ลาฮอร์;ლაჰორი;ラホール;ラーホール;拉合尔;拉合爾;라호르; +city::1172904;Kotri;Koti;Kotri;Котри;کوٹری; +city::1173055;Kotli;Kotli; +city::1173378;Kot Addu;Kot Addu;Kot-Adu; +city::1173491;Kohat;Kohat;Kohāt;Kokhat;OHT;Кохат; +city::1173664;Khuzdar;KDD;Khozdar;Khuzdar;Khuzdār; +city::1173687;Khushab;Khushab;Khushah;Khushāb; +city::1174042;Kharian;Kharian;Khāriān; +city::1174167;Khanpur;Khanpur;Khānpur; +city::1174625;Kasur;Kansur;Kansūr;Kasur;Kasūr;Касур; +city::1174872;Karachi;Carachi;Gorad Karachy;KHI;Karaaji;Karaces;Karachi;Karachi - krachy;Karachi - كراچى;Karaci;Karacio;Karacis;Karacsi;Karaczi;Karanchi;Karatschi;Karatsi;Karatsji;Karatxi;Karaçi;Karaĉio;Karači;Karačis;Karačės;Karochi;Karáči;Karáčí;Karâchi;Karāchi;Karāči;Keraci;Keraçî;Kurrachee;Kurrachi;Kəraçi;ka la qi;ka ra ci;kalachi;karaaci;karacci;karachi;karachy;karaci;karatshy;ke la chi;krachy;kratshy;pechs;qrʼzy;Καράτσι;Горад Карачы;Карачи;Карачі;Կարաչի;קאראטשי;קראצי;كاراتشى;كاراچى;كراتشي;کراچی;کراچۍ;کَرٲچی;کەراچی;ڪراچي;ކަރާޗީ;कराची;করাচী;কৰাচী;ਕਰਾਚੀ;કરાચી;କରାଚୀ;கராச்சி;కరాచీ;ಕರಾಚಿ;കറാച്ചി;การาจี;ཀ་ར་ཆི;ကရာချိမြို့;კარაჩი;ከራቺ;カラチ;カラーチー;卡拉奇;喀拉蚩;카라치; +city::1175021;Kandhkot;; +city::1175088;Kamoke;Kamoke;Kamoki;Kāmoke;Kāmoki; +city::1175156;Kamalia;Kamalia;Kamālia; +city::1175446;Kohror Pakka;Kahror;Kehror Pakka Town;Kharor;Kohror Pakka; +city::1175560;Kabirwala;; +city::1175864;Jhelum;Alessandria Bucefala;Dzelam;Dzelamas;Dzhelam;Dźhelam;Dželamas;Jhelam;Jhelum;jehalama;jellum;jhelama sahara;jhlm;jie he lei mu;Џелам;Джелам;جهلم;جہلم;جێھلۆم;झेलम शहर;ਜੇਹਲਮ;傑赫勒姆;젤룸; +city::1175892;Jhang Sadr;Jhang Marghiana;Jhang Marghiānā;Jhang Sadar;Jhang Sadr;Jhang-Maghiana;Jhang-Maghiāna;Maghiana;Maghiāna; +city::1176106;Jaranwala;Jaranwala;Jarānwāla; +city::1176241;Jampur;; +city::1176368;Jalalpur Jattan;Jalalpur;Jalalpur Jattan;Jalalpur Jattān;Jalālpur; +city::1176515;Jacobabad;JAG;Jacobabad;Jacobadad;Jacobābād;Jacobādad; +city::1176615;Islamabad;Gorad Islamabad;ISB;Islamabad;Islamabada;Islamabadas;Islamabade;Islamabadi;Islamabado;Islamahbad;Islamampant;Islàmabad;Islámábád;Islāmābād;Islāmābāda;Iszlamabad;Iszlámábád;aslam abad;isalamabada;iseullamabadeu;islamabad;islamabada;islamabadi;islamapat;isuramabado;xislamabad;yi si lan bao;yyslamabad;yyslamyabad;Îslamabad;İslamabad;Ισλαμαμπάντ;Ісламабад;Горад Ісламабад;Исламабад;Իսլամաբադ;איסלאמאבאד;איסלמבאד;إسلام آباد;ئىسلامئاباد;ئیسلاماباد;اسلام آباد;اسلام اباد;اسلام‌آباد;އިސްލާމްއާބާދު;इस्लामाबाद;ইসলামাবাদ;ਇਸਲਾਮਾਬਾਦ;ઇસ્લામાબાદ;ଇସଲାମାବାଦ;இஸ்லாமாபாத்;ಇಸ್ಲಾಮಾಬಾದ್;ഇസ്ലാമബാദ്;อิสลามาบัด;ཨི་སི་ལམ་བོ།;ისლამაბადი;ኢስላማባድ;イスラマバード;伊斯兰堡;伊斯蘭堡;이슬라마바드; +city::1176734;Hyderabad;Chainterampant;HDD;Haidarabad;Haidarabadas;Hajdarabad;Hajderabado;Haydarabad;Haydarobod;Hiderabad;Hiderábád;Hyderabad;Hyderabad i Pakistan;Hyderâbâd;Hyderābād;Khajdarabad;Khajderabad;aitarapat;hai de la ba;haidarabad;haidarabada;haidarabadi;haidelabadeu;haiderabado;hydr abad;hydrabad;hydrabad snڌ;Χαϊντεραμπάντ;Хайдарабад;Хајдерабад;היידראבאד;حيدر آباد;حيدرآباد، سنڌ;حیدرآباد;حیدرآباد، سندھ;हैदराबाद;हैदराबाद्;ਹੈਦਰਾਬਾਦ;ஐதராபாத்;ჰაიდარაბადი;ハイデラバード;海得拉巴;하이데라바드; +city::1176800;Hujra Shah Muqim;Hujra;Hujra Shah Muqim;Hujra Shāh Muqim; +city::1176997;Haveli Lakha;Haveli;Haveli Lakha; +city::1177042;Hasilpur;Hasilpur;Hasipur;Hāsilpur;Hāsipur; +city::1177073;Haru Zbad;Badruwala Mandi;Badruwāla Mandi;Haroonabad Municipality;Haru Zbad;Harunabad;Hārūnābād; +city::1177107;Haripur;Haripur;Harīpur;Kharipur;Харипур; +city::1177384;Hafizabad;Hafizabad;Hāfizābād; +city::1177446;Gwadar;GWD;Gorad Gvadar;Gvadar;Gvadaras;Gwadar;Gwadur;Gwādar;gua da er;guwadaru;gvadara;gwadaleu;gwadr;jwadr;Гвадар;Горад Гвадар;جوادر;گوادر;ग्वादर;グワーダル;瓜达尔;瓜達爾;과다르; +city::1177654;Gujrat;GRT;Gudzharat;Gujrat;Gujrāt;gjrat;Гуджарат;گجرات; +city::1177662;Gujranwala;Gajranvala;Gujranwala;Gujrānwāla;Гайранвала;گوجرانوالہ; +city::1177682;Gujar Khan;Gujar Khan;Gujar Khān;Gūjar Khān; +city::1178231;Gojra;Godzhra;Gojra;gwjra;gwjrh pakstan;Годжра;Гојра;گوجرا;گوجره، پاکستان;گوجرہ; +city::1178456;Ghotki;Ghotki;Gotki; +city::1179400;Faisalabad;Faisalabad;Faisalabada;Faisalābad;Faisalābād;Faisalābāda;Fajsalabad;Feisalabadas;Fejsalabade;LYP;Lyallpur;Shah Faisalabad;faisarabado;fysl abad;Фейсалабаде;فيصل آباد;فیصل آباد;ファイサラバード;ファイサラーバード; +city::1179760;Dipalpur;Dipalpur;Dīpālpur; +city::1180281;Dera Ismail Khan;DSK;Dera Ismail Khan;Dera Ismāīl Khān; +city::1180289;Dera Ghazi Khan;DEA;Dera Gazi Chanas;Dera Gazi Hano;Dera Gazi Khan;Dera Gazi Ĥano;Dera Ghazi Khan;Dera Ghoz Khan;Dera Ghāzi Khān;Dera-Gazi-Khan;Deri-Ghazi Khan;de la jia qi han;de ra ka si khan;dera gazi khana;Дера Гази Хан;Дера-Гази-Хан;دیره غازی‌خان، پاکستان;ڈیرہ غازی خان;ډېره غازي خان;डेरा ग़ाज़ी ख़ान;เดรากาซีข่าน;德拉加齊汗; +city::1180809;Dadu;DDU;Dadu;Dādu;dadu;دادُو; +city::1180942;Chunian;Chunian;Chūniān; +city::1180983;Chuhar Kana;Chuchar-kana Mandi;Chuhar Kana;Chuhar Kand;Chūhar Kāna;Chūhar Kānd; +city::1181073;Chishtian;Chishtian;Chishtian Mandi;Chishtiān;Chishtiān Mandi;Chistian; +city::1181096;Chiniot;Chaniot;Chiniot;Chinot;chnywt pakstan;ji ni ao de;Чиниот;چنيوټ;چنیوت، پاکستان;چنیوٹ;吉尼奧德; +city::1181163;Chichawatni;Chichawatni;Chīchāwatni; +city::1181439;Charsadda;Charsadda;Chārsadda; +city::1181611;Chaman;Caman;Camanas;Chaman;camana;chaman;chmn;Çaman;Čamanas;Чаман;چمن;चमन;チャマン;차만; +city::1181636;Chakwal;Chakwal;Chakwāl; +city::1182092;Burewala;; +city::1182637;Bhimbar;Bhimbar;Bhimber; +city::1182787;Bhalwal;Bhalwal;Bhalwāl; +city::1182815;Bhakkar;Bhakkar; +city::1182829;Bhai Pheru;Bhai Pheru;Bhar Pheru;Bhāi Pheru;Mian-ki-Maur;Miān-ki-Maur;Phool Nagar; +city::1183105;Battagram;Batagram;Batagrām;Batgram;Batgran;Batgrām;Batgrān;Battagram;Battagram City;Battagrām; +city::1183880;Bahawalpur;BHV;Bahawalpur;Bahāwalpur;Bakhavalpura;Бахавалпура; +city::1183883;Bahawalnagar;Bahawalnagar;Bahawalpur;Bahawatnagar;Bahawâlpur;Bahāwalnagar;بہاولپور; +city::1184055;Badin;BDN;Badin;bdyn‎;Бадин;بدين‎; +city::1184249;Attock City;Attock City;Campbellpore;Campbellpur; +city::1184370;Arifwala;Arifwala;Ārifwāla; +city::1184845;Ahmadpur East;Ahmadpur;Ahmadpur East;Ahmedpur East;Ahmedpur East Municipality; +city::1185056;Abbottabad;Abbottabad;Abbottābād;Абботтабад; +city::1332083;Bahawalnagar;Bahawalnagar;Bahāwalnagar; +city::1341204;Nowshera Cantonment;; +city::753142;Zoliborz;Zalborz;Zalbórz; +city::753866;Zamosc;Gorad Zamasc';Zamosc;Zamosc';Zamosca;Zamoscia;Zamose;Zamoshc;Zamoshch;Zamost'ye;Zamoste;Zamostja;Zamosts;Zamostė;Zamost’ye;Zamość;jamosichi;sa mxchch;zamoshichi;zamostsi;zha mo xi qi;zmwsz;Ζάμοστς;Горад Замасць;Замостя;Замосць;Замошч;Замошћ;Զամոշչ;זמושץ;ซามอชช์;ზამოსცი;ザモシチ;扎莫希奇;자모시치; +city::755330;Wola;Volja;Воля; +city::756092;Wawer;; +city::756135;Warsaw;Barsobia;Varsa;Varsava;Varsavia;Varsavja;Varshava;Varshavae;Varsja;Varsjá;Varso;Varsova;Varsovia;Varsovia - Warszawa;Varsovie;Varsovio;Varssavi;Varsuva;Varsòvia;Varsó;Varsóvia;Varşova;Varšava;Varšuva;Varșovia;Vársá;WAW;Warsaw;Warsawa;Warschau;Warskou;Warszaw;Warszawa;Waršawa;baleusyaba;hua sha;varshava;vorso;warsw;warushawa;wrsh;wrshw;wrsw;wxrsx;Βαρσοβία;Варшавæ;Варшава;Վարշավա;ווארשע;ורשה;װאַרשע;وارسو;ورشو;ۋارشاۋا;ܘܪܣܘ;वॉर्सो;วอร์ซอ;ვარშავა;ዋርሶው;ワルシャワ;华沙;華沙;바르샤바; +city::756867;Tomaszow Mazowiecki;Mazovijos Tomasuvas;Mazovijos Tomašuvas;Thomasovia;Tomashov Mazovecki;Tomashov Mazovjecki;Tomashuv-Mazovec'kij;Tomashuv-Mazovecki;Tomashuv-Mazoveckij;Tomasova Mazovecka;Tomaszow;Tomaszow Mazowiecki;Tomaszów;Tomaszów Mazowiecki;Tomašova Mazovecka;ma zuo fu she de qu tuo ma shu fu;twmswb mzwbyyzqy;tx ma chuf ma sx weiyt ski;Томашов Мазовецки;Томашов Мазовјецки;Томашув-Мазовецки;Томашув-Мазовецкий;Томашув-Мазовецький;טומשוב מזובייצקי;ตอมาชูฟมาซอเวียตสกี;馬佐夫舍地區托馬舒夫; +city::757026;Tarnow;Gorad Tarnuu;Tarnov;Tarnova;Tarnow;Tarnuv;Tarnuvas;Tarnuw;Tarnów;Tarnůw;ta er nu fu;taleunupeu;tarnwf;tarunufu;trnwb;Горад Тарнуў;Тарнов;Тарнув;טארנע;טרנוב;تارنوف;タルヌフ;塔爾努夫;타르누프; +city::757033;Tarnobrzeg;Gorad Tarnobzhag;Nova Tarnovia;QEP;Tarnobjeg;Tarnobrzeg;Tarnobrzyg;Tarnobzega;Tarnobzegas;Tarnobzheg;Tarnobzhege;Tarnobžega;Tarnobžegas;ta er nuo bu re ge;taleunobeujekeu;tarnwbzk;tarunobujeku;trnwbzg;Горад Тарнобжаг;Тарнобжег;Тарнобжеге;דזשיקאוו;טרנובזג;تارنوبزک;タルノブジェク;塔尔诺布热格;타르노브제크; +city::757065;Targowek;Targuvek;Таргувек; +city::757718;Suwalki;Gorad Suvalki;Suvalkai;Suvalki;Suwalki;Suwalkie;Suwałki;su wa wu ji;subauki;suvu~auki;Горад Сувалкі;Сувалки;סובאלק;スヴァウキ;苏瓦乌基;수바우키; +city::758390;Starachowice;Starachovices;Starachovicės;Starachovitse;Starachowice;Starachowice-Wierzbnik;Starahovice;Starakhovice;si ta la huo wei cai;strhwbyzh;Σταραχοβίτσε;Стараховице;Стараховіце;סטרחוביצה;斯塔拉霍維采; +city::758445;Stalowa Wola;QXQ;Stal'ova Volja;Staliova Volia;Staljova-Volja;Stalova Vola;Stalowa Wola;Stalowo Wola;si ta luo wa wo la;Сталова Вола;Стальова Воля;Сталёва-Воля;斯塔洛瓦沃拉; +city::758470;Srodmiescie;Seredmistja;Sredmest'e;Srodmiescie;Warszawa-Srodmiescie;Warszawa-Śródmieście;shrudmieshtsie;Śródmieście;Середмістя;Средместье;შრუდმიეშციე; +city::759412;Siedlce;Gorad Sedl'cy;Sedl'ce;Sedl'tse;Sedlce;Sedlcos;Shedulce;Siedlce;Sjedlice;sdlyz;siedeulche;xie de er cai;Горад Седльцы;Седльце;Сједлице;Шедълце;שדליץ;שעדליץ;謝德爾采;시에들체; +city::759734;Rzeszow;Gorad Zhehshau;Jesuv;Jeşuv;RZE;Reichshof;Resov;Resovia;Rjashiv;Rzeszow;Rzeszuw;Rzeszów;Rzeszůw;Zesova;Zesuv;Zesuvas;Zheshev;Zheshov;Zheshuv;che chuf;jeshufu;jesyupeu;jyshwf;re shu fu;zhshwf;zswb;Řešov;Žešova;Žešuv;Žešuvas;Горад Жэшаў;Жешов;Жешув;Ряшів;זשוב;ריישע;جيشوف;ژشوف;เชชูฟ;ジェシュフ;热舒夫;제슈프; +city::760778;Radom;Gorad Radam;La-to-me;Là-tô-mê;RDO;Radom;Radoma;Radomas;Radum;Radům;Rantom;la duo mu;ladom;rad xm;radomi;radomu;radwm;Ράντομ;Горад Радам;Радом;Ռադոմ;ראדום;ראדעם;رادوم;ราดอม;რადომი;ラドム;拉多姆;라돔; +city::761168;Przemysl;Peremishl';Peremishl’;Peremyshl';Peremyshl’;Peremyslis;Peremyšlis;Premislia;Premysl;Przemysl;Przemyśl;Psemisla;Pshemishul;Pshemisl;Pshemys'l';Pshemysl';Pshemys’l’;Přemyšl;Pšemisla;peusyemisil;psmysl;pu re mei xi er;pushemu~ishiru;Перемишль;Перемышль;Пшемисл;Пшемишъл;Пшемысль;פשמישל;פשעמישל;プシェムィシル;普热梅希尔;프셰미실; +city::761228;Pruszkow;Prushkov;Prushkuv;Pruskova;Pruskuvas;Pruszkow;Pruszków;Pruškova;Pruškuvas;pu lu si ke fu;purushukufu;Прушков;Прушкув;プルシュクフ;普魯斯科夫; +city::762863;Ostrowiec Swietokrzyski;Ostrovec Shventokshiski;Ostrovec'-Sventokshis'kij;Ostrovec-Sventokshiskij;Ostrovec-Sventokshizhski;Ostroveca Sventoksiska;Ostroveca Sventokšiska;Ostrovets;Ostrovjec Svjentokshiski;Ostrowiec;Ostrowiec Kielecki;Ostrowiec Swietokrzyski;Ostrowiec nad Kamienna;Ostrowiec nad Kamienną;Ostrowiec Świętokrzyski;Svento Kryziaus Ostrovecas;sheng shi zi de qu ao si te luo wei ci;xx st rx weiytschfeiyn txk chi ski;Švento Kryžiaus Ostrovecas;ʼwstrwbyyz swwyyntwqzysqy;Островец Швентокшиски;Островец-Свентокшижски;Островец-Свентокшиский;Островець-Свентокшиський;Островјец Свјентокшиски;אוסטרובייץ שוויינטוקזיסקי;אסטראווצע;ออสตรอเวียตซ์ชเฟียนตอกชิสกี;聖十字地區奧斯特羅維茨; +city::762909;Ostroleka;Gorad Astralehnka;Ostroleka;Ostrolenka;Ostrołęka;ao si te luo wen ka;oseuteulowengka;osutorou~enka;Горад Астралэнка;Остроленка;אוסטרולנקה;オストロウェンカ;奧斯特羅文卡;오스트로웽카; +city::763166;Olsztyn;Allenshteyn;Allenstein;Ol'shtyn;Olsztyn;QYO;Ольштын; +city::763442;Ochota;Okhota;Охота; +city::763534;Nowy Sacz;Gorad Novy-Sonch;Naujasis Soncas;Naujasis Sončas;Neu Sandez;Neu-Sandec;Novi Sonca;Novi Sonch;Novi Sonča;Novij Sonch;Novy Sonch;Novy-Sonch;Novyy Sandets;Novyy Sonch;Nowi Soncz;Nowi Sóncz;Nowy Sacz;Nowy Suncz;Nowy Sącz;Nowy Sůncz;Ujszandec;nobisongchi;novi-sonchi;nowy.sontc;nwby swnz;nwwy swnts;xin song qi;Újszandec;Горад Новы-Сонч;Нови Сонч;Новий Сонч;Новы Сонч;Новы-Сонч;נובי סונץ;צאנז;نووی سونتس;ნოვი-სონჩი;ノヴィ・ソンチ;新松奇;노비송치; +city::764484;Mokotow;Mokotuv;Мокотув; +city::764849;Mielec;Melec;Melec';Meleca;Melecas;Melets;Mielec;Mjelec;mei lai ci;mi xe let s;myylz;Мелец;Мелець;Мјелец;מיילץ;มีเอเลตส์;梅萊茨; +city::765876;Lublin;Gorad Ljublin;LUZ;Lioblens;Lioblėns;Liublinas;Ljublin;Ljublin osh;Ljublin shaary;Loumplin;Lu-pu-lim;Lubblinu;Lublin;Lublina;Lublino;Lublinum;Lueblin;Lyublin;Lû-pu-lìm;Lüblin;lbln;lu bu lin;lub lin;lubeullin;lublina;lublini;lwblyn;ruburin;Ļubļina;Λούμπλιν;Горад Люблін;Лублин;Люблин;Люблин ош;Люблин шаары;Люблін;Լյուբլին;לובלין;لبلن;لوبلين;لوبلین;लुब्लिन;ลูบลิน;ლუბლინი;ルブリン;卢布林;盧布林;루블린; +city::766027;Lomza;Gorad Lomzha;Lomsa;Lomza;Lomzha;Lomža;lwmzh;u~omuja;wo mu zha;womja;wxm cha;Łomża;Горад Ломжа;Ломжа;לומזה;วอมชา;ウォムジャ;沃姆扎;웜자; +city::766555;Legionowo;Jablonna-Legionowo;Jabłonna-Legionowo;Leg'onovo;Legionovas;Legionovo;Legionowo;Legonovo;lai ji ao nuo wo;Легионово;Легьоново;Леґьоново;萊吉奧諾沃; +city::769250;Kielce;Gorad Kel'cy;Kel'ce;Kel'tsy;Kelcai;Kelce;Khai-ngi-chhai;Khái-ngì-chhái;Kielce;Kjelce;QKI;kai er cai;kielche;kyerutsu~e;kylch;kylsy;kylts;qyylzh;Горад Кельцы;Келце;Кельце;Кјелце;Кјељце;קיילצה;קעלץ;كيلسي;کیئلتسہ;کیلتس;کیلچ;კელცე;キェルツェ;凯尔采;키엘체; +city::772621;Elk;Ehlk;Elk;Elka;Ełk;Lik;Lukas;Lyck;ai wu ke;euku;xelk;Елк;Элк;אלק;เอลก์;エウク;埃烏克; +city::774558;Chelm;Chelm;Chelmas;Chełm;Gorad Khehlm;Helma;Khelm;Kholm;hai wu mu;he-um;heumu;hlm;Горад Хэлм;Хелм;Холм;חלם;ヘウム;海乌姆;헤움; +city::776029;Bielany;; +city::776069;Bialystok;Balstoge;Balstogė;Belostok;Belostoko;Bialistok;Bialystok;Białystok;Bilostok;Bjalistok;Bjalistoka;Bjalistoko;Bjelostock;Bjolystok;Bjołystok;Byelostok;Gorad Belastok;QYY;bi ya wei si tuo ke;biawiseutokeu;byalystwk;byau~isutoku;byawystwk;Μπιάλιστοκ;Белосток;Бялисток;Білосток;Бјалисток;Горад Беласток;ביאליסטאק;ביאליסטוק;بیالیستوک;بیاویستوک;ბელოსტოკი;ビャウィストク;比亚韦斯托克;비아위스토크; +city::776103;Bialoleka;; +city::776175;Biala Podlaska;Alba;BXP;Biala Podlaska;Biała Podlaska;Bila Pidljas'ka;Bjala Podlaska;Bjala Podljaska;Bjala-Podljaska;Gorad Bjala-Padljaska;Palenkes Biala;Palenkės Biala;bi ya wa-bo de la si ka;biawapodeullaseuka;Бяла Подляска;Бяла-Подляска;Біла Підляська;Бјала Подласка;Горад Бяла-Падляска;ביאלא פודולסק;ביאלע;比亞瓦-波德拉斯卡;비아와포들라스카; +city::776251;Bemowo;Bemovo;Бемово; +city::3080004;Zory;Gorad Zhory;Sohrau;Zhori;Zhory;Zori;Zoros;Zory;ch xrux;joli;joru~i;ruo lei;Żory;Žori;Žoros;Žory;Горад Жоры;Жори;Жоры;ชอรือ;ジョルィ;若雷;조리; +city::3080165;Zielona Gora;Gorad Zjaljona-Gura;Gruentberg;Grunberg;Grünberg;IEG;Prasia Elysiorum;Zelena Gura;Zeliona Gura;Zeljona-Gura;Zeloena Gur;Zelona Gura;Zelono Gora;Zelonô Góra;Zelöna Gur;Zhel'ona Gora;Zielona Gora;Zielona Gura;Zielona Góra;Zielona Nkora;Zjelona Gora;jiellonagula;jlwna ghwra;lu shan cheng;zhlwna gwra;zhylwna gwra;zylwna gwra;Ζιελόνα Γκόρα;Горад Зялёна-Гура;Жельона Гора;Зелена Гура;Зелёна-Гура;Зјелона Гора;Զիելոնա Գուրա;جلونا غورا;زیلونا گورا;ژلونا گورا;ژیلونا گورا;แชลอนากูรา;ジェロナ・グラ;綠山城;지엘로나구라; +city::3080251;Zgierz;Gorad Zgezh;Zgeza;Zgezas;Zgezh;Zgeža;Zgežas;Zgierz;Zgjezh;Znkies;ci gai ri;jeugiesi;sex keiyr ch;zgyyz;zugyeshi;Ζγκιες;Горад Згеж;Згеж;Згјеж;זגייז;เซอเกียร์ช;ズギェシ;兹盖日;즈기에시; +city::3080526;Zawiercie;Zaverce;Zaverche;Zavercis;Zavertse;Zaviercis;Zavjerce;Zawiercie;zha wei er qie;zwwyyrzh;Заверце;Заверче;Завјерће;זוויירצה;扎维尔切; +city::3080985;Zabrze;Gorad Zabzheh;Hindenburg;Zabje;Zaborze;Zabrze;Zabzas;Zabze;Zabzhe;Zabžas;Zabže;Zobrze;jabeuje;sab che;zabjh;zabuje;zabzhh;zha bu re;zʼbzh;Горад Забжэ;Забже;Զաբժե;זאבזה;زابجه;زابژه;زبرزے;ซาบเช;ザブジェ;扎布热;자브제; +city::3081368;Wroclaw;Brassel;Breslau;Breslavia;Breslavl';Breslavl’;Gorad Vroclau;Vratislav;Vratislavia;Vroclav;Vroclava;Vroclavas;Vroclavo;Vroklave;Vroslav;Vrotslav;WRO;Wroclaw;Wroclow;Wrocław;Wrocłow;Wroklaw;Wroslaw;Wrosław;Wrócław;beulocheuwapeu;frwtswaf;fu luo ci wa fu;viratscahp;vrotsavapha;vrotslavi;vurotsuwafu;w rxtswaf;wrwslaw;wrwtswaf;wrwzlb;Βρότσλαβ;Вроцлав;Горад Вроцлаў;ברעסלוי;ורוצלב;فروتسواف;وروتسواف;وروسلاو;ڤرۆتسواف;व्रोत्सवाफ;விராத்ஸ்சாஃப்;วรอตสวัฟ;ვროცლავი;ヴロツワフ;弗罗茨瓦夫;브로츠와프; +city::3081741;Wloclawek;Gorad Ulaclavak;Leslau;Vloclavek;Vloclaveka;Vloclavekas;Wloclawek;Włocławek;beuwocheuwabekeu;fu wo ci wa wei ke;fwtswafk;vuu~otsuwavu~eku;w wxts wa wek;Влоцлавек;Горад Улацлавак;ולוצלאווק;فوتسوافك;ووتس‌واوک;ววอตซวาเวก;ヴウォツワヴェク;弗沃茨瓦韦克;브워츠와베크; +city::3082707;Walbrzych;Gorad Valbzhykh;Valbzhikh;Valbziha;Valbzychas;Valbžiha;Valbžychas;Walbrzych;Waldenburg;Waldenburg in Schlesien;Wałbrzych;baubeujiheu;vu~aubujifu;wa lb cik;wa wu bu ri he;wawb jykh;wawb zhykh;wlbzyk;Валбжих;Горад Валбжых;ולבזיך;واوب جيخ;واوب ژیخ;วาลบ์จิก;ヴァウブジフ;瓦烏布日赫;바우브지흐; +city::3082914;Tychy;Tichau;Tihi;Tikhi;Tychos;Tychy;Tykhy;Tıhı;di hei;thi khi;tihi;tixa;tyshy;Тихи;Тыхы;تیشی;ทิคี;ティヒ;蒂黑;티히; +city::3083271;Torun;Gorad Torun';Thorn;Thorunium;Torn;Toroun;Torun;Torun';Toruna;Torune;Toruni;Torunj;Torunė;Toruń;Toruņa;Toruň;Torń;Torůń;thx run;tolun;torun;trwny;tuo lun;twrwn;twryny;Τόρουν;Горад Торунь;Торун;Торунь;Торуњ;טורון;ترونی;تورون;تورینی;تۆرون;ทอรูน;ტორუნი;トルン;托伦;토룬; +city::3083426;Tczew;Derszewo;Dirschau;Dërszewò;Tceva;Tcevas;Tchev;Tczew;Tčeva;Tčevas;Тчев; +city::3083440;Tarnowskie Gory;Tarnovs'ki Guri;Tarnovske Gori;Tarnovske Gurai;Tarnovske Guri;Tarnovske-Gury;Tarnovskje Gori;Tarnowitz;Tarnowske Gury;Tarnowske Gůry;Tarnowskie Gory;Tarnowskie Góry;ta er nuo fu si kai gu lei;taleunopeuseukieguli;Тарновске Гори;Тарновске-Гуры;Тарновскје Гори;Тарновські Гури;タルノフスキェ・グルィ;塔爾諾夫斯凱古雷;타르노프스키에구리; +city::3083829;Szczecin;Estetino;Estettin;Gorad Shchehcin;SZZ;Scecin;Scecina;Scecinas;Scetsin;Shchechin;Shchecin;Shchekin;Shchetsin;Shchétsin;Shhechin;Shhecin;Stetin;Stettin;Stettino;Stettinum;Stsetsin;Szczecin;Szczetno;Szczëtno;Sztetin;shchchyn;shchetsini;shen qie qing;shshychn;shttyn;shuchechin;stecina;syuchechin;sz'z'yn;Şçetsin;Şçeçin;Štetín;Štětín;Šćećin;Ščecin;Ščecina;Ščecinas;Στσέτσιν;Горад Шчэцін;Шчечин;Шчећин;Шчеќин;Шчэцін;Щецин;Щечин;שטעטין;שצ'צ'ין;شتتين;ششیچن;شچچین;श्टेचिन;შჩეცინი;シュチェチン;什切青;슈체친; +city::3083988;Swietochlowice;Sbietochlobitse;Schweintochlitz;Schwientochlowitz;Shventokhlovice;Sventochlovices;Sventochlovicės;Sventohlovice;Sventokhlovice;Svintohuvitso;Svjentokhlovice;Svjetohlovice;Swietochlowice;Swjyntochlowicy;ashfyntwkhwwytsh;shfyntwkhwfytsh;shifientofuu~ovu~itsu~e;sibiengtoheuwobiche;swwyyntwhlwbyzh;xi wei tuo he luo wei cai;Świętochłowice;Śwjyntochlowicy;Ŝvintohuvitso;Σβιετοχλόβιτσε;Свентохловице;Свентохловіце;Свјентохловице;Швентохловице;שוויינטוחלוביצה;اشفینتوخوویتسه;شفينتوخوفيتسه;シフィエントフウォヴィツェ;希维托赫洛维采;시비엥토흐워비체; +city::3084093;Swidnica;Schweidnitz;Schweidnitz-Schlesian;Schweinitz;Shvidnica;Svidnica;Svidnice;Svidnicja;Svidņica;Svídnice;Swidnica;swwydnyzh;xi wei de ni cha;Świdnica;Свидница;Свидњица;Свідниця;Швидница;שווידניצה;希维德尼察; +city::3084840;Stargard;Gorad Stargard;Stargard;Stargard Shchechinski;Stargard Szczecinski;Stargard Szczeciński;Stargard-Shhecins'kij;Stargarda;Stargardas;Stargardia;Starnkarnt;Starogrod;Storgard;Stôrgard;Szczecinski Stargard;Szczećiński Stargard;astargart ashchchynsky;s tar kard chche ching ski;seutaleugaleuteusyuchechinseuki;shen qie qing jiu cheng;starghard ztsysynsky;sutarugaruto;Στάργκαρντ;Горад Старгард;Старгард;Старгард Шчечински;Старгард-Щецинський;استارگارت اشچچینسکی;ستارغارد زتسيسينسكي;สตาร์การ์ดชเชชีงสกี;スタルガルト;什切青旧城;스타르가르트슈체친스키; +city::3085128;Sosnowiec;Sosnovec;Sosnoveca;Sosnovecas;Sosnovice;Sosnowez;Sosnowiec;Sossnowitz;Сосновец; +city::3085450;Slupsk;Gorad Slupsk;Slups'k;Slupsk;Slupska;Slupskas;Stolp;Stolp in Pommern;Stolpe;Stolpsk;Stôłpsk;Słupsk;seuubseukeu;si wu pu si ke;suupusuku;swwbsk;swwpsk;Горад Слупск;Слупск;Слупськ;سووبسك;سووپسک;スウプスク;斯武普斯克;스웁스크; +city::3086024;Siemianowice Slaskie;Semjanovice Slonske;Semjanovice-Shl'ons'ki;Semjanovice-Sljonske;Shemjanovice Silezko;Siemianowice;Siemianowice Slaskie;Siemianowice Śląskie;Siemianowitz;Silezijos Semianovicai;Symjanowicy;siemianobichesillongseukie;xi long si ke de qu xie mi ya nuo wei cai;Śymjanowicy;Семяновице-Слёнске;Семяновіце-Шльонські;Шемяновице Силезко;シェミャノヴィツェ・シロンスキェ;希隆斯克地區謝米亞諾維采;시에미아노비체실롱스키에; +city::3086586;Rybnik;Gorad Rybnik;Ribnik;Ribnika;Ribņika;Rimpnik;Rybnik;Rybnikas;Rybńik;lei bu ni ke;libeunikeu;rbnyk;ribuniku;rybnyk;Ρίμπνικ;Горад Рыбнік;Рибник;Рибњик;Рыбник;ربنیک;ريبنيك;リブニク;雷布尼克;리브니크; +city::3086800;Ruda Slaska;Ruda;Ruda O.S.;Ruda Silezka;Ruda Slaska;Ruda Slonska;Ruda Śląska;Ruda-Shl'ons'ka;Ruda-Slenska;Ruda-Sljonskaja;Silezijos Ruda;Slunsko Ruda;lu da xi long si ka;ludasillongseuka;ru das lxn ska;rwda shlwska;Ślůnsko Ruda;Руда Силезка;Руда-Сленска;Руда-Слёнская;Руда-Шльонська;رودا شلوسکا;รูดาซลอนสกา;ルダ・シロンスカ;鲁达希隆斯卡;루다실롱스카; +city::3087584;Raciborz;Gorad Racibuzh;Racebuzos;Rachibozh;Raciborz;Raciboza;Racibozh;Raciboža;Raciburz;Racibuzas;Racibuzh;Racibužas;Racibórz;Racėbužos;Rakibozh;Rasibuj;Ratibor;Ratiboria;Ratiboř;Ratihor;Ratsibuj;Ratsimporz;Raćibůrz;la qi bu ri;lachibusi;ra chi burch;rachibushu;rasiborj;rasybwrz;rtybwr;Ρατσίμπορζ;Горад Рацібуж;Ратибор;Рацибуж;Рачибож;Раћибож;Раќибож;ראטיבאר;רטיבור;راسيبورز;راسیبورز;रसिबोर्ज्;ราชีบุร์ช;ラチブシュ;拉齐布日;라치부시; +city::3088171;Poznan;Gorad Poznan';POZ;Po-tsu-nam;Posen;Posnania;Poznan;Poznan';Poznan' osh;Poznana;Poznane;Poznanj;Poznano;Poznany;Poznanė;Poznań;Poznańy;Poznaņa;Poznaň;Poznon;Pòznóń;Pô-tsṳ-nàm;Pоznan;bo zi nan;bwznan;phx snan;pocunan;pojeunan;pojhnana;pozunan;pwyzn;pwznan;pwznn;Πόζναν;Горад Познань;Познан;Познань;Познань ош;Познањ;Պոզնան;פוזנן;פויזן;بوزنان;پوزنان;پۆزنان;पोझ्नान;போசுனான்;พอซนาน;ཕྰོ་ཟོ་ནན།;პოზნანი;ポズナン;波茲南;포즈난; +city::3088825;Plock;Gorad Plock;Ploc'k;Plock;Plocka;Plockas;Plotsk;Płock;bwtsk;peuwocheukeu;plwzq;pu wo ci ke;puu~otsuku;pwtsk;Горад Плоцк;Плоцк;Плоцьк;Պլոցկ;פלאצק;פלוצק;بوتسك;پوتسک;プウォツク;普沃茨克;프워츠크; +city::3088972;Piotrkow Trybunalski;Gorad Pjotrkau-Trybunal'ski;P'oturkov Tribunalski;Petrakavas;Petrikau;Petrokov;Piotrkow;Piotrkow Trybunalski;Piotrków;Piotrków Trybunalski;Pjotrkov Tribunalski;Pjotrkova Tribunalska;Pjotrkuv-Tribunal's'kij;Pjotrkuv-Trybunal'ski;Pjotrkuv-Trybunal'skij;bi de ku fu te lei bu na er si ji;pi yxtr kuft rux bunal ski;pioteuleukupeuteulibunalseuki;pywtrqwb trybwnlsqy;Горад Пётркаў-Трыбунальскі;Пйотркув-Трибунальський;Пьотърков Трибуналски;Пётркув-Трыбунальски;Пётркув-Трыбунальский;Пјотрков Трибуналски;פיוטרקוב טריבונלסקי;פיעטרקאוו;ปียอตร์กุฟตรือบูนัลสกี;ピョートルクフ・トルィブナルスキ;彼得庫夫特雷布納爾斯基;피오트르쿠프트리부날스키; +city::3089033;Pila;Gorad Pila;Piela;Pila;Pily;Piéła;Piła;Schneidemuhl;Schneidemühl;pi wa;piwa;Горад Піла;Пила;Пилы;Піла;ピワ;皮瓦;피와; +city::3089125;Piekary Slaskie;Gorad Pjakary Sljonske;Pekarai;Pekari Shl'onske;Pekari Slonski;Pekari-Shl'ons'ki;Pekary-Shljonske;Pekary-Sljonske;Piekary Slaskie;Piekary Wielkie;Piekary Śląskie;Pjekari Slonskje;Pjekary;piekalisillongseukie;xi long si ke de qu pei ka lei;Горад Пякары Слёнске;Пекари Шльонске;Пекари-Шльонські;Пекары-Слёнске;Пекары-Шлёнске;Пјекари Слонскје;ピェカルィ・シロンスキェ;希隆斯克地區佩卡雷;피에카리실롱스키에; +city::3089578;Pabianice;Pab'janice;Pab'janicy;Pab'yanitsy;Pabianice;Pabianices;Pabianicės;Pabjanice;Pabjaņice;Pab’yanitsy;pa bi ya ni cai;Паб'яніцы;Пабьянице;Пабянице;Пабяніце;Пабјањице;פביאניצה;帕比亞尼采; +city::3089684;Ostrow Wielkopolski;Didziosios Lenkijos Ostruvas;Didžiosios Lenkijos Ostruvas;Gorad Ostrau-Vel'kapol'ski;Ostrov;Ostrov Velkopolski;Ostrov Vjelkopolski;Ostrova Velkopolska;Ostrovia;Ostrovo;Ostrow;Ostrow Wielkopolski;Ostruv-Vel'kopol'ski;Ostruv-Vel'kopol'skij;Ostruv-Velikopol's'kij;Ostrów;Ostrów Wielkopolski;QDG;Wjelgopolski Uostruw;Wjelgopolski Uostrůw;awstrw wlkwbwlysky;da bo lan de qu ao si te lu fu;Горад Остраў-Велькапольскі;Остров Велкополски;Остров Вјелкополски;Острув-Великопольський;Острув-Велькопольски;Острув-Велькопольский;اوسترو ولكوبوليسكي;大波蘭地區奧斯特魯夫; +city::3090048;Opole;Gorad Apole;Opole;Opoli;Opolí;Opolė;Oppein;Oppeln;Uopole;abwlwsky;ao bo lai;awpwl;awpwlh;opolle;opore;xx pxle;Òpòle;Горад Аполе;Ополе;אופולה;أبولوسكي;اوپول;اوپوله;ออปอเล;オポーレ;奥波莱;오폴레; +city::3091232;Myslowice;Gorad Myslavicy;Mislovice;Myslovice;Myslovices;Myslovicės;Myslowice;Myslowicy;Mysłowice;mei si wo wei cai;miseuwobiche;mu~isuu~ovu~itsu~e;Горад Мыславіцы;Мисловице;Мисловіце;Мысловице;ムィスウォヴィツェ;梅斯沃維采;미스워비체; +city::3092931;Lubin;Gorad Ljubin;Liubinas;Ljubin;Luben;Lubin;Lubina;Luebin;Lüben;Lübin;lu bin;lubin;lwbyn;lyubina;rubin;Горад Любін;Лубин;Любин;Любін;לובין;ल्युबिन;ルビン;盧賓;루빈; +city::3093133;Lodz;Gorad Lodz';Litzmannstadt;Lo-tsu;Lodz;Lodz';Lodz' osh;Lodza;Lodze;Lodzia;Lodzo;Lodzė;Lodž;Log;Loj;Lotz;Luc;Ludz;Luz;Lò-tsṳ;lodzi;luo ci;luo zi;lwdz;uchi;utchi;vutsa;wuch;wwch;wwdj;Łódź;Łůdź;Λοτζ;Горад Лодзь;Лодз;Лодзь;Лодзь ош;Лођ;Лоѓ;Луӟ;Լոձ;לאדזש;לודז;لودز;وودج;ووچ;वूत्श;วูช;ლოძი;ウッチ;罗兹;羅茲;우치; +city::3093524;Leszno;Gorad Leshna;Leshno;Lesnas;Lesno;Leszno;Lešnas;Lešno;Lissa;lai shen nuo;lesyuno;lsnw;reshuno;Горад Лешна;Лешно;ליסא;לשנו;レシュノ;莱什诺;레슈노; +city::3093692;Legnica;Gorad Ljagnica;Legnica;Legnicja;Legņica;Lehnice;Liegnitz;Lignica;Lignitium;Ligńica;lai ge ni cha;legeunicha;lghnytsa;lgnytsa;lgnyzh;regunitsu~a;Горад Лягніца;Легница;Легниця;Легњица;Լեգնիցա;לגניצה;لغنيتسا;لگنیتسا;レグニツァ;萊格尼察;레그니차; +city::3094802;Krakow;Carcovia;Cracau;Cracaû;Cracovia;Cracovie;Cracow;Cracòvia;Cracóvia;Gorad Krakau;KRK;Kraka;Krakau;Krakiv;Krakko;Krakkó;Krakobia;Krakov;Krakova;Krakovi;Krakovia;Krakovija;Krakovja;Krakovo;Krakow;Krakowo;Krakuw;Kraká;Krakòwò;Krakóvia;Kraków;Krakůw;Krakоv;Krokuva;ke la ke fu;keulakupeu;kraku f;krakupha;krakwf;kurakufu;qrqwb;Κρακοβία;Горад Кракаў;Краков;Краковия;Краків;Կրակով;קראקע;קרקוב;كراكوف;کراکوف;क्राकूफ;กรากุฟ;ကရားကော့မြို့;კრაკოვი;クラクフ;克拉科夫;크라쿠프; +city::3095049;Koszalin;Gorad Kashalin;Kezlin;Koeslin;Kosalina;Kosalinas;Koshalin;Koslin;Koszaleno;Koszalin;Košalina;Košalinas;Kòszalëno;Köslin;OSZ;Scurgum;ke sha lin;kosharin;kosyallin;kshalyn;kx chalin;Горад Кашалін;Кошалин;Кошалін;كشالين;کشالین;กอชาลิน;コシャリン;科沙林;코샬린; +city::3095321;Konin;Gorad Konin;Konin;Konina;Koninas;Koņina;ke ning;konin;kwnyn;qwnyn;Горад Конін;Конин;Конін;קונין;كونين;科寧;코닌; +city::3096372;Kedzierzyn-Kozle;Heydebreck;Kandrzin;Kandrzin Pogorzelletz;Kandrzin-Kozle;Kandrzin-Koźle;Kedzierzyn;Kedzierzyn-Kozle;Kendzezhin-Koz'le;Kendzezhin-Kozle;Kendzezina-Kozle;Kendzezynas-Kozle;Kendzežynas-Kozlė;Kendzhezhin-Kozhle;Keņdzežina-Kozle;Kędzierzyn;Kędzierzyn-Koźle;ken jie ren ke zi lai;Кенджежин-Кожле;Кендзежин-Козле;Кендзежин-Козьле;Кенђежин Козле;แกนแจชึน-กอชแล;肯傑任科茲萊; +city::3096472;Katowice;Catowice;Gorad Katavicy;KTW;Katobitse;Katovica;Katovicai;Katovice;Katovice osh;Katovicum;Katovits;Katovitse;Katovîts;Katowice;Katowicy;Katowihi;Kattowitz;Kha-thok-vi-chu;Khà-thok-vì-chṳ;Stalinogorod;Stalinograd;Stalinogrod;Stalinogród;ka tuo wei ci;ka tuo wei zhi;ka tuo wei zi;katobiche;katovis'sa;katovitsa;katovitses;katovu~itsu~e;katwfytsh;katwwch;katwwyts;ketovis;kha to wit se;kha to wits;kyatobhisa;mstkhdm:mhmd alqyrwany;qtwbyz;tcadrkatovitse;Κάτοβιτσε;Κατοβίτσε;Κατοβιτσε;Горад Катавіцы;Катовица;Катовице;Катовице ош;Катовіце;Կատովիցե;קאטאוויץ;קטוביץ;كاتوفيتسه;مستخدم:محمد القيرواني;کاتووچ;کاتوویتس;ކެޓޮވިސް;कातोवित्सा;क्याटोभिस;ಕತೋವೀಸ್ಸ;คะโตวิตซ;คาโตวีตเซ;კატოვიცე;ካቶቪጸ;カトヴィツェ;卡托維治;卡托维兹;카토비체; +city::3096880;Kalisz;Gorad Kalish;Kalis;Kalisa;Kalisas;Kalisch;Kalish;Kalisz;Kališa;Kališas;ka li shen;kallisi;kalysh;karishu;Горад Каліш;Калиш;Каліш;Կալիշ;קאליש;كاليش;کالیش;カリシュ;卡利什;칼리시; +city::3097257;Jelenia Gora;Hirschberg;Hirschberg im Riesengebirge;Hirschberg in Schlesien;Jelena Gura;Jelenia Gora;Jelenia Góra;Jelenja Gura;Jeleņa Gura;yelleniagula;Йеленя Гура;옐레니아구라; +city::3097333;Jaworzno;Gorad Javozhna;Javozhno;Javoznas;Javozno;Javožnas;Javožno;Jaworzno;Jaworzyna;ya wo ri nuo;yabojuno;yafwrjnw;yavu~ojuno;yawwzhnw;Горад Явожна;Явожно;يافورجنو;یاووژنو;ヤヴォジュノ;亚沃日诺;야보주노; +city::3097391;Jastrzebie Zdroj;Jastrzebie Zdroj;Jastrzebie-Zdroj;Jastrzębie Zdrój;Jastrzębie-Zdrój;Jastsembe Zdroja;Jastšembe Zdroja; +city::3097872;Inowroclaw;Gorad Inauroclau;Hohensalza;Inovroclav;Inovroclava;Inovroclavas;Inovrotslav;Inowraclaw;Inowracław;Inowroclaw;Inowrocław;Irownoclaw;inovurotsuwafu;xi nxw rxtswaf;yi nuo fu luo ci wa fu;Іновроцлав;Горад Інаўроцлаў;Иновроцлав;อีนอวรอตสวัฟ;イノヴロツワフ;伊诺弗罗茨瓦夫; +city::3098218;Grudziadz;Gorad Grudzjondz;Graudenz;Gredzadz;Grudz'ondz;Grudzendz;Grudzh'ondz;Grudziadz;Grudziondzas;Grudziądz;Grudzjondz;Grudzjondza;Grudzundz;Grudzëndz;Grudźůndz;Grëdządz;ge lu qiong zi;geulujiongcheu;ghrwjwnts;grwjwnts;gurujontsu;kru cxn ts;Горад Грудзёндз;Груджьондз;Грудзендз;Грудзьондз;Грудзёндз;Груђондз;غروجونتس;گروجونتس;กรูจอนตส์;グルジョンツ;格魯瓊茲;그루지옹츠; +city::3098722;Gorzow Wielkopolski;Gorad Gozhau Vel'kapol'ski;Gorzow Wielkopolski;Gorzuw Wjelgopolski;Gorzów Wielkopolski;Gorzůw Wjelgopolski;Gozhov Velkopolski;Gozhov Vjelkopolski;Gozhuv-Vel'kopol's'kij;Gozhuv-Vel'kopol'ski;Gozhuv-Vel'kopol'skij;Gozova Velkopolska;Gozuv-Velkopolski;Gozuvas;Gožova Velkopolska;Gožuv-Velkopolski;Gožuvas;Ladzbarg;Landsberg;Landsberg an der Warthe;Landsbergum;Lãdzbarg;Thai Po-lan Thi-khi Ko-yi-fu;Thai Pô-làn Thi-khî Kô-yî-fû;da bo lan de qu ge ru fu;ghwrjwf wylkwbwlsky;gojupeubielkopolseuki;gwrzhwf wylkwpwlsky;gwrzhww wyylwpwlsky;gwzwb wyylqwpwlsqy;kxr sufwei yl khx pxl ski;Гожов Велкополски;Гожов Вјелкополски;Гожув-Велькопольски;Гожув-Велькопольский;Горад Гожаў Велькапольскі;Ґожув-Велькопольський;Գորժուվ-Վելկապոլսկացի;גוזוב ויילקופולסקי;غورجوف ويلكوبولسكي;گورژوف ویلکوپولسکی;گورژوو ویئلوپولسکی;กอร์ซูฟเวียลคอปอลสกี;ゴジュフ・ヴィエルコポルスキ;大波蘭地區戈茹夫;고주프비엘코폴스키; +city::3099112;Gniezno;Gnesen;Gnesna;Gnezno;Gnieznas;Gniezno;Gorad Gnezna;Gņezno;Hnezdno;Hnězdno;ge nie ci nuo;geuniejeuno;gnezno;gnyyznw;gunyezuno;gynyzna;k neiy snx;Гнезно;Горад Гнезна;Гњезно;גנייזנו;گینیزنا;กเนียซนอ;გნეზნო;グニェズノ;格涅兹诺;그니에즈노; +city::3099213;Glogow;Glogau;Glogov;Glogova;Glogovia;Glogow;Gloguv;Gloguvas;Gloguw;Głogów;Głogůw;Hlohov;Hlohow;Hłohow;ge wo gu fu;geuwogupeu;glwgwb;guu~ogufu;k wx kuf;Глогов;Глогув;Ґлоґув;גלוגוב;กวอกูฟ;グウォグフ;格沃古夫;그워구프; +city::3099230;Gliwice;Gleiwitz;Glivice;Glivices;Glivicės;Glivitse;Gliwice;Gliwice-Sosnowiec;Glywicy;Gorad Glivicy;QLC;ge li wei cai;geullibiche;ghlyfytsh;glivisa;glybyzh;glywytsh;gurivu~itsu~e;Гливице;Глівіце;Горад Глівіцы;Гљивице;Գլիվիցե;גליביצה;غليفيتسه;گلیویتسه;گلیویتسہ;ग्लिविस;グリヴィツェ;格利维采;글리비체; +city::3099424;Gdynia;Civitas Gdinensis;Gdina;Gdingen;Gdinio;Gdiniô;Gdinja;Gdinya;Gdiņa;Gdyna;Gdyne;Gdynia;Gdynja;Gdynė;Gdyně;Gdyńa;Gdyňa;Gorad Gdynja;Gotenhafen;Gothenhafen;Kak-ten-ni-a;Kak-tên-nì-â;Nkntinia;QYD;gdinia;gdnya;gdynyh;ge ding ni ya;geudinia;ghdynya;gudinya;Γκντίνια;Гдиня;Гдиња;Гдыня;Горад Гдыня;Գդինյա;גדיניה;غدينيا;گدنیا;გდინია;グディニャ;格丁尼亚;그디니아; +city::3099434;Gdansk;Danceke;Dancigo;Dantsic;Danzica;Danzig;Dànzica;GDN;Gdan'sk;Gdanjsk;Gdans'k;Gdansk;Gdanska;Gdanskas;Gdańsk;Gdaņska;Gdaňsk;Gdunsk;Gduńsk;Gedanum;Gorad Gdan'sk;Gothiscandza;Gudan'sku;Gydanysg;Nkntansk;Qdansk;gadanska;gdansk;gdnsq;ge dan si ke;geudanseukeu;ghdansk;gudanisuku;katansk;kday sk;Γκντανσκ;Гданск;Гданськ;Гданьск;Гдањск;Горад Гданьск;Гъданьскъ;Գդանսկ;גדנסק;דאנציג;غدانسك;گدانسک;गदान्स्क;கதான்ஸ்க்;กดัญสก์;გდანსკი;グダニスク;格但斯克;그단스크; +city::3099654;Fordon;; +city::3099759;Elblag;Ehl'blong;El'bleng;El'blong;Elbing;Elbinga;Elbingas;Elbl'ong;Elblag;Elblong;Elblonga;Elbląg;Elwing;El’blëng;Gorad Ehl'bljong;Ilfingburg;ZBG;ai er bu long ge;alblng;alblngh;elbeullongkeu;eruburonku;xe lb lxng k;Горад Эльблёнг;Елблаг;Елбльонг;Ельблонг;Эльблонг;אלבלונג;البلنغ;البلنگ;เอลบลองก์;エルブロンク;埃爾布隆格;엘블롱크; +city::3100796;Dabrowa Gornicza;Dabrowa Gornicza;Dombrova Gurnica;Dombrova Gurnicha;Dombrova Gurniča;Dombrova Gurņiča;Dombrova-Gurnicha;Dombrowa;Dumbrowa;Dąbrowa Górnicza;Důmbrowa;dong bu luo wa gu er ni qia;dongbeulobaguleunicha;dwmbrwbh;dwmbrwwh gwrnycha;Домброва Гурнича;Домброва-Гурнича;דומברובה;دومبرووه گورنیچا;ドンブロヴァ・グルニチャ;栋布罗瓦古尔尼恰;동브로바구르니차; +city::3100946;Czestochowa;CZW;Censtakava;Censtochova;Censtohova;Censtokhova;Chenstochov;Chenstokhov;Chenstokhova;Czenstochau;Czestochowa;Czynstochowy;Częstochowa;Gorad Chanstakhova;Khim-su-thok-khok-nga;Khìm-sṳ̂-thok-khok-ngá;Tschenstochau;chen s to kho wa;chengseutohoba;chensutohovu~a;chstwhwwa;qin si tuo huo wa;tshystwkhwfa;znstwhwbh;Çenstohova;Čenstakava;Čenstochová;Čenstohova;Горад Чанстахова;Ченстохова;Ӵенстохова;Չեստոխովա;צנסטוחובה;تشيستوخوفا;چستوهووا;เชนสโตโควา;チェンストホヴァ;琴斯托霍瓦;쳉스토호바; +city::3101619;Chorzow;Cherzow;Cherzów;Chorzow;Chorzuw;Chorzów;Chorzůw;Chozuvas;Chožuvas;Gorad Khozhau;Hozova;Hožova;Khozhov;Khozhuv;Konigshutte;Krolewska Huta;Królewska Huta;Königshütte;Xozuv;hojufu;hojupeu;huo ru fu;khwjwf;khwzhwf;Горад Хожаў;Хожов;Хожув;Խոժուվ;خوجوف;خوژوف;ホジュフ;霍茹夫;호주프; +city::3101950;Bytom;Beuthen;Bithomia;Bitom;Bitoma;Bytom;Bytomas;Bytun;Bytůń;Bıtom;Gorad Bytam;bi tuo mu;bitom;bitomu;bytwm;Битом;Бытом;Горад Бытaм;ביטום;بیتوم;ビトム;比托姆;비톰; +city::3102014;Bydgoszcz;BZG;Bedgoszcza;Bidgosc;Bidgosca;Bidgoshch;Bidgoshh;Bidgošč;Bidgošča;Bidqos;Bintnkos;Brombarg;Bromberch;Bromberg;Bydgoscius;Bydgoshh;Bydgostia;Bydgoszcz;Bydgoščius;Bydhost;Bydhošť;Bëdgòszcza;Bıdgoşç;Bıdqoş;Gorad Bydgashch;bi de ge shen;bideugosyuchi;bidgoshchi;bu~idogoshuchu;bydghwshtsh;bydgwshch;bydgwsz;Μπιντγκός;Бидгошч;Бидгощ;Быдгощ;Горад Быдгашч;בידגאש;בידגושץ;بيدغوشتش;بیدگوشچ;ბიდგოშჩი;ブィドゴシュチュ;比得哥什;비드고슈치; +city::3103402;Bielsko-Biala;Bel's'ko-Bjala;Bel'sko-Bjala;Belsko-Biala;Belsko-Bjala;Biala;Biala Krakowska;Biała;Biała Krakowska;Bielsko-Biala;Bielsko-Biała;Bilsko-Bela;Bjelsko-Bjala;Bjylsko-Bjolo;Bjylsko-Bjoło;Byala;Bílsko-Bělá;bie er si ke-bi ya wa;bielseukobiawa;byerusuko=byawa;bylskw byawa;Белско-Бяла;Бельско-Бяла;Бельсько-Бяла;Бјелско-Бјала;ביילסקו-ביאלה;بیلسکو بیاوا;ビェルスコ=ビャワ;别尔斯科-比亚瓦;비엘스코비아와; +city::3103709;Belchatow;Belchatow;Belchatuvas;Belhatova;Belkhatov;Belkhatuv;Bełchatów;be-uhatupeu;bei wu ha tu fu;beuhato~ufu;blhtwb;Белхатов;Белхатув;בלחטוב;ベウハトゥフ;貝烏哈圖夫;베우하투프; +city::3103719;Bedzin;Bedzin;Bendzhin;Bendzin;Bendzina;Bendzinas;Beņdzina;Będzin;ben jin;bengjin;bndyn;Бенджин;Бендзин;Бенђин;בנדין;בענדין;แบนจิน;本津;벵진; +city::6545326;Ursynow;Ursinuv;Ursynov;Урсинув;Урсынов; +city::6545347;Praga Polnoc;; +city::6545348;Praga Poludnie;; +city::4562831;Bayamon;Bajamon;Bajamonas;Bayamon;Bayamón;ba a meng;bayamana;bayamon;bayamwn;Баямон;Бајамон;بايامون;বায়ামন;バヤモン;巴阿蒙;바야몬; +city::4563008;Caguas;Kaguas;Kaguasas;Kagvas;ka gua si;kaguasu;kaguraasa;Кагвас;Кагуас;קגואס;کاگواس، پورٹو ریکو;কাগুৱাস;カグアス;卡瓜斯; +city::4563243;Carolina;San Fernando de la Carolina; +city::4565119;Guaynabo;; +city::4566385;Mayagueez;MAZ;Magiagoues;Majaguehs;Majagues;Majaguesas;Majagvez;Mayagueez;Mayaguez;Mayagüez;ma ya gui si;mayaguesu;mayaguraeja;mayagvejha;mayagweseu;Μαγιαγουές;Маягуес;Маягуэс;Мајагвез;מאיאגואס;مایاگویس، پورٹو ریکو;मायाग्वेझ;মায়াগুৱেজ;マヤグエス;馬亞圭斯;마야궤스; +city::4566880;Ponce;La Ciudad Senorial;La Ciudad de las Quenepas;La Perla del Sur;PSE;Ponce;Ponce Senorial;Ponse;Ponsė;Porto 4 e Ponce;The Pearl of the 54 uth;pang sai;ponse;Понсе;ポンセ;龐塞;폰세; +city::4568127;San Juan;Caparra;Ciudad de Puerto Rico;Gorad San-Khuan;Portorico;Prico;Puerto Rico;SJU;Saint Iuan;Saint John de Porto Rico;Sainte Jean de Porto-rico;San Chouan;San Chuanas;San Huan;San Ian de Porto Rico;San Ioanni;San Jean de Portorico;San Juan;San Juan Batista de Puerto Rico;San Juan Bautistade de Puerto Rico;San Juan de Puerto Rico;San Khuan;San Xoan;San Xoán;San Xuan;San-Juano;San-Khuan;Sanhuana;The City of Saint John;Ville de Porto-Rico;Ville de Sainte Jean de Porto Rico;can van;saenhwan;san hwn;san khwan;san-khuani;sana hu'ana;sana huraana;sanfuan;sanhuan;sheng hu an;Σαν Χουάν;Горад Сан-Хуан;Сан Хуан;Сан-Хуан;Սան Խուան;סן חואן;سان خوآن;سان خوان;सान हुआन;সান হুৱান;ਸਾਨ ਹੁਆਨ;சான் வான்;ซานฮวน;სან-ხუანი;サンフアン;圣胡安;산후안;샌환; +city::4568451;Trujillo Alto;Trukhil'jo-Al'to;Trukhilo Alto;shang te lu xi e;teuluhiyoalto;trwzhylw altw pwrtwrykw;Трухиљо Алто;Трухільйо-Альто;تروخیلو التو، پورٹو ریکو;تروژیلو آلتو، پورتوریکو;上特魯希略;트루히요알토; +city::281102;Rafah;Er Rafa;Rafa;Rafaa;Rafah;Rafakh;Rafaḩ;Rafia;Rafiah;Rafīah;Raphia;Rifah;Ràfia;la fa shi;rfh;rpyh;Рафа;Рафах;רפיח;رفح;拉法市; +city::281124;Khan Yunis;Hanut Yona;Hanūt Yōnā;Jan Yunis;Jan Yunís;Khan Younes;Khan Younis;Khan Yumus;Khan Yunis;Khan Yunus;Khan-Junis;Khān Yūnis;Khān Yūnus;Yunas;Yunus;khan ywns;Хан-Юнис;خان يونس; +city::281129;Jabalya;Dzhabalija;Jabalia;Jabaliya;Jabalya;Jabāliyā;Jabālyā;jbalya;Джабалия;جباليا; +city::281133;Gaza;Azzah;Dakbayan sa Gaza;GZA;Gaesa;Gasa;Gaz;Gaza;Gaza City;Gaza by;Gaza-urbo;Gazae;Gazze;Ghazah;Ghazza;Ghazzah;Ghazze;Ghazzi;Ghuzze;Gàsa;Gáza;Qəzza;Xeze;`Azza;`Azzā;gaja;gaja sahara;gaja siti;gajha;gaza;gaza sahira;ghzh;ghzt;jia sa;jia sha;jia sha cheng;kaca;Γάζα;Газa;Газæ;Газа;Газзә;Ղազա;עזה;غزة;غزه;غزہ;غەززە;ग़ज़ा;गाजा शहर;गाझा;গাজা সিটি;ਗ਼ਜ਼ਾ ਸ਼ਹਿਰ;காசா;ガザ;加沙;加沙城;加薩;가자; +city::281141;Dayr al Balah;Belar;Dayr al Balah;Dayr al Balaḩ;Deir el-Balah;Der el Bela;Dier El Balah;dyr alblh;دير البلح; +city::281145;Bayt Lahya;Bayt Lahiya;Bayt Lahiyah;Bayt Lahya;Bayt Lāhiya;Bayt Lāhiyah;Bayt Lāhyā;Beit Lahia;Beit Lahiya;Beit Lahya;Beit Lāhiya;byt lahya;بيت لاهيا; +city::282615;Nablus;Flavia Neapolis;Nablus;Nablusas;Nablusz;Nabulus;Namplous;Naplouse;Naplusa;Napouse;Neapolis;Náblus;Náblusz;Nāblus;Schechem;Shechem;Shekhem;Sichem;Sihhem;Siquem;Sychem;Sykhem;ZDF;na bu lu si;nabeulluseu;nabls;nablws;naburusu;skm;Ναμπλούς;Наблус;שכם;نابلس;نابلوس;ナーブルス;納布盧斯;나블루스; +city::285066;Hebron;Al Khalil;Al Khalīl;Al-Khalil;Chevrona;El Halil;El Khalil;El Khulil;Gorad Kheuron;Habrun;Hebrom;Hebron;Hebronas;Hebroni;Hebrón;Hevron;Hevrōn;Hébron;Khalil';Khalil-el-Rahman;Khebron;Khevron;alkhlyl;epiron;hbrwn;hebarana;hebeulon;hebrona;heburon;hi brxn;xi bo lun;Əl Xəlil;Χεβρώνα;Горад Хеўрон;Халиль;Хеброн;Хеврон;Әл-Халил;חברון;الخليل;الخلیل;हेब्रॉन;হেবরন;எபிரோன்;ฮีบรอน;ኬብሮን;Ḩabrūn;ヘブロン;希伯仑;헤브론; +city::2262963;Setubal;Caetobriga;Gorad Setubal;Setoumpal;Setubal;Setubala;Setubalis;Setúbal;sai tu ba er;seto~ubaru;setubal;stwbal;stwbl;sux tu bal;sytwbal;Σετούμπαλ;Горад Сетубал;Сетубал;סטובל;ستوبال;سيتوبال;سیتوبال;ซือตูบัล;სეტუბალი;ሴቱባል;セトゥーバル;塞图巴尔;세투발; +city::2263827;Rio de Mouro;Rio de Mouro; +city::2264268;Queluz;Kelush;Queluz;Келуш; +city::2265467;Odivelas;Odivelas;awdywlas;اودیولاس; +city::2266977;Loures;Loures;Loyres;Λόυρες; +city::2267057;Lisbon;Felicitas Julia;Felicitas Julia Olissipo;LIS;Liospoin;Liospóin;Lisabon;Lisabona;Lisboa;Lisbon;Lisbona;Lisbonne;Lisbono;Lisbonum;Lissabon;Lisszabon;Lizboa;Lizbon;Lizbona;Olisipo;Olissipo;li si ben;lisaboni;lisbana;lisbxn;liseubon;lshbwnt;lysabwn;lysbwn;risubon;Λισαβώνα;Лисабон;Лиссабон;Лісабон;Լիսբոնա;ליסבון;لشبونة;لىسابون;لیسبون;ܠܫܒܘܢܐ;लिस्बन;ลิสบอน;ლისაბონი;ሊዝቦን;リスボン;里斯本;리스본; +city::2267827;Funchal;FNC;Funchal;Funsala;Funsalis;Funshal;Funšala;Funšalis;Gorad Funshal;Phountsal;feng sha er;fnchal prtgal;fung chal;funsharu;fwnchal;fwnshal;phunkala;punshali;punsyal;pwnsl;Φουντσάλ;Горад Фуншал;Фуншал;פונשל;فنچال ،پرتگال;فونشال;فونچال;फुंकल;ฟุงชาล;ფუნშალი;フンシャル;丰沙尔;푼샬; +city::2268406;Evora;Aebura;Ebora;Ehvora;Elbora;Erbora;Evora;Yabura/Yabora/Yabra;Ébora;Évora;Эвора; +city::2269041;Corroios;Corroios; +city::2270503;Cacem;Cacem;Cacém; +city::2271071;Barreiro;Barreiro;Barrejru;ba lei lu;Баррейру;巴雷鲁; +city::2271680;Amora;Amora; +city::2271772;Amadora;Amadora;Αμαδόρα;Амадора; +city::2732544;Vila Nova de Gaia;Bila Noba nte Nkaia;Gaia;Portus Cale;Vila Nova de Gaia;Vila-Nova-de-Gajja;Βίλα Νόβα ντε Γκάια;Вила-Нова-де-Гайя; +city::2735943;Porto;OPO;Oporto;Porto;Portu;Portus Cale;bo tu;bwrtw;poruto;pwrtw;Πορτο;Πόρτο;Порто;Порту;פורטו;بورتو;پورتو;პორტუ;ポルト;波圖; +city::2740637;Coimbra;CBP;Coimbra;Coímbra;Coïmbra;Koimbra;Koimbro;Koimpra;Koímbra;ke ying bu la;koinbura;Κόιμπρα;Коимбра;コインブラ;科英布拉; +city::2742032;Braga;BGZ;Bracara Augusta;Braga;Mpranka;braga;buraga;Μπράγκα;Брага;براگا;ブラガ; +city::2742611;Aveiro;Abeiro;Aveiro;Avejru;ZAV;Αβέιρο;Авейру; +city::3436725;Villa Hayes;New Bordeaux;Nueva Burdeos;Remanzo;Villa Hayes;Villa Occidental; +city::3436728;Villa Elisa;Colonia Eliza;Villa Elisa; +city::3437056;San Lorenzo;San Lorensas;San Lorenso;San Lorenzo;San Lorenzo del Campo Grande;San-Lorenso;san lwrynzw;san-lorenso;sheng luo lun suo;sn lwrnzw paragwyh;Сан Лорензо;Сан-Лоренсо;سان لورينزو;سن لورنزو، پاراگوئه;სან-ლორენსო;聖洛倫索; +city::3437127;San Antonio;San Antonio; +city::3437444;Presidente Franco;Presidente Franco;Puerto Presidente Franco; +city::3437547;Pedro Juan Caballero;PJC;Pedro Chuan Kabaljeras;Pedro Huan Kabaljero;Pedro Juan Caballero;Pedro Khuan Kabalero;Pedro-Khuan-Kabal'ero;pdrw khwan kabalrw;pedeulohuankabayelo;pei de luo hu an ka wa lie luo;Педро Хуан Кабалеро;Педро-Хуан-Кабальеро;Педро-Хуан-Кабальєро;פדרו חואן קבאיירו;پدرو خوآن کابالرو;پیدرو خوان کابالیرو، پیراگوئے;პედრო-ხუან-კაბალიერო;ペドロ・フアン・カバリェロ市;佩德罗胡安卡瓦列罗;페드로후안카바예로; +city::3437665;Nemby;Nemby;San Lorenzo de la Frontera; +city::3437842;Limpio;Limpio; +city::3437863;Lambare;Lambare;Lambaré;Lambarė;lambale;lambare;lambarh;lambary;lan ba lei;ranbare;Ламбаре;لامباره;لامباری;ლამბარე;ランバレ;蘭巴雷;람바레; +city::3437918;Itaugua;Itaugua;Itauguá;Itaugva;Ytaygua;aytaywgwa;yi tao gua;Итаугуа;ایتائوگوآ;იტაუგუა;伊陶瓜; +city::3438115;Fernando de la Mora;Fernando de la Mora;Fernando-de-la-Mor;fei er nan duo de la mo la;frnandw dla mwra;fyrnandw dy la mwra;pernando-de-la-mora;Фернандо де ла Мора;فرناندو دلا مورا;فيرناندو دي لا مورا;ფერნანდო-დე-ლა-მორა;費爾南多德拉莫拉; +city::3438735;Encarnacion;ENO;Ehnkarnas'on;Encarnacao;Encarnacion;Encarnación;Encarnação;Enkarnas'jon;Enkarnasion;Enkarnasjonas;ankaransywn;en ka na xi weng;engkaleunasion;enkarunashion;xe ngkar na si xxng;Енкарнасион;Енкарнасьйон;Энкарнасьон;אנקרנסיון;انکارانسیون;انکارنسیون، پیراگوئے;เองการ์นาซีออง;ენკარნასიონი;エンカルナシオン;恩卡纳西翁;엥카르나시온; +city::3438819;Coronel Oviedo;Ajos;Coronel Oviedo;Koronel Ovjedas;Koronel Ovyedo;Koronel'-Ov'edo;ao wei duo shang xiao zhen;kolonel-obiedo;kwrwnl awwydw;kwrwnyl awwydw;Коронель-Овьедо;Коронель-Овьєдо;Կորոնել Օվյեդո;کورونل اوویدو;کورونیل اوویدو;კორონელ-ოვიედო;コロネル・オビエド;奥维多上校镇;코로넬오비에도; +city::3438995;Colonia Mariano Roque Alonso;Colonia Mariano Roque Alonso;Colonia Roque Alonso;Mariano Roque Alonso; +city::3439101;Ciudad del Este;AGT;Ciudad Presidente Stroessner;Ciudad del Este;Presidente Stroessner;Puerto Presidente Stroessner;S'judad-del'-Ehste;S'judad-del'-Este;Sijudad del Este;Siudad del Este;Siudad del Estė;Sjudad Del Este;Sjudad del Este;dong fang shi;siudadeudel-eseute;siw dad del xe s te;sywdad dl asth;Сиудад дел Есте;Сијудад дел Есте;Сьюдад-дель-Есте;Сьюдад-дель-Эсте;Сјудад дел Есте;סיודאד דעל עסטע;סיודד דל אסטה;سیوداد دل استه;سیوداد دیل استے;ซิวดัดเดลเอสเต;სიუდად-დელ-ესტე;シウダー・デル・エステ;東方市;시우다드델에스테; +city::3439214;Capiata;Capiata;Capiatá;Capista;Kapiata;Kapiatã;Kapijata;Kapjata;ka pi ya ta;kapiata;kapyata;Капијата;کاپیاتا;კაპიატა;カピアタ;卡皮亞塔;카피아타; +city::3439317;Caaguazu;Caaguazu;Caaguazú; +city::3439389;Asuncion;ASU;Asounsion;Asounsyon;Asounsyòn;Asounthion;Assumptio;Assuncao;Assuncion;Assunção;Asuncion;Asunciono;Asunción;Asuns'jon;Asuns'on;Asunsaun;Asunsion;Asunsjon;Asunsjona;Asunsjonas;Asunson;Asunsyon;Asunsyun;Asúnsjón;Gorad Asuns'jon;Gunung Berapi Asuncion;La Muy Noble y Leal Ciudad de Nuestra Senora Santa Maria de la Asuncion;La Muy Noble y Leal Ciudad de Nuestra Señora Santa María de la Asunción;Nuestra Senora Santa Maria de la Asuncion;Nuestra Señora Santa María de la Asunción;Paraguay;acunciyon;asnshn;asunshion;asunsion;asunsioni;asunsiyona;asusi'ona;aswnsywn;xa sun si xxng;ya song sen;Ασουνθιόν;Ασουνσιόν;Асунсион;Асунсьйон;Асунсьон;Горад Асунсьён;Ասունսյոն;אסונסיאן;אסונסיון;آسونسیون;أسونسيون;ئاسۇنسىئون;اسنشن;اسونسیون;आसुन्सियोन;ਅਸੂੰਸੀਓਨ;அசுன்சியோன்;ಅಸೂನ್‌ಸಿಯಾನ್;อะซุนซิออง;ཨ་སུན་སི་འན།;ასუნსიონი;አሱንሲዮን;アスンシオン;亞松森;아순시온; +city::289888;Ar Rayyan;Al Raiyan;Al Rayyan;Ar Rayyan;Ar Rayyān;Raiyan;alryan;ar-Rayyan;الريان; +city::290030;Doha;Ad Dawha;Ad Dawhah;Ad Dawḩa;Ad Dawḩah;Ad Doha;Ad Dowhah;Ad-Dauha;Ad-Dawhah;Ad-Dawḩah;DOH;Daeuha;Dauha;Dauhá;Dawha;Dawhat al Qatar;Dawḥa;Dawḩat al Qaţar;Dewhe;Do'ha;Doh;Doha;Doho;Dokha;Dokhae;Dokho;Dooxa;Doʻha;Doḥa;Duoha;Däuha;Gorad Dokha;Ntocha;aaldawhat;aldwhh;aldwht;deaha;do ha;doha;dohara;duo ha;dwhh;toka;Ντόχα;Горад Доха;Дохæ;Доха;Дохо;Доҳа;Доһа;Դոհա;דאכא;דוחא;דוחה;الدوحة;الدوحه;اَلدَّوْحَة;دوحه;دوحہ;دوحە;دوھا;دەوحە;दोहा;দোহা;দোহার;ਦੋਹਾ;தோகா;ದೊಹಾ;ദോഹ;โดฮา;དྷོ་ཧ།;ဒိုဟာမြို့;დოჰა;ዶሃ;ドーハ;多哈;도하; +city::935214;Saint-Pierre;Saint-Pierre;Sent-P'er;ZSE;Сент-Пьер; +city::935221;Saint-Paul;Saint-Paul; +city::935264;Saint-Denis;RUN;Saint-Denis;Saint-Denis de la Reunion;Saint-Denis de la Réunion;Sen-Deni;St. Denis;snt dnys;Сен-Дени;סנט דניס;サン・ドゥニ; +city::935582;Le Tampon;Le Tampon;Le-Tampon;Tampon;Village du Tampon;lw tampwn;Ле Тампон;Ле-Тампон;لو تامپون;ル・タンポン; +city::662334;Zalau;Zalaou;Zalau;Zalehu;Zaleu;Zaluu;Zalyu;Zalău;Zelau;Zilah;jalleou;sylaw;zalaw;zaleu;zalyw;zha lei wu;zlyw;Ζαλάου;Залау;Залеу;Залъу;Залыу;Залэу;زالاو;زالیو;زلئو;سیلاؤ;ზალეუ;札勒烏;잘러우; +city::663118;Vaslui;Vasloui;Vaslui;Vasluiul;Vasluj;Vaslujus;Vaszlo;Vászló;baseullu-i;faslwy;vu~asurui;wa si lu yi;waslwy;waslwyy;wslwy;wzlw;Βασλούι;Васлуй;Васлуј;וסלוי;فاسلوي;واسلوئی;واسلوی;وزلو;ヴァスルイ;瓦斯盧伊;바슬루이; +city::664460;Turda;Opstina Turda;Opština Turda;Potaissa;Thorenburg;Torda;Turda;to~uruda;tu er da;twrda;Турда;توردا;ტურდა;トゥルダ;圖爾達; +city::664518;Tulcea;Aegyssos;Gorad Tulcha;TCE;Toultsea;Tul'cha;Tulca;Tulcea;Tulcha;Tulcsa;Tulcza;Tultscha;Tulča;to~urucha;tu er qia;tulchea;twlcha;twlchy;twltshya;Τούλτσεα;Горад Тулча;Тулча;Тулчә;Тульча;Տուլչա;טולצאה;تولتشيا;تولچا;طولچی;トゥルチャ;圖爾恰;툴체아; +city::665004;Targu-Mures;Maros-Vasarhely;Maros-Vásárhely;Marosvasarhely;Marosvásárhely;Muresh;Neumarkt;Neumarkt am Mieresch;Novum Forum Siculorum;TGM;Targu Mures;Targul-Mures;Tirgu Mures;Turgul Mures;Tyrgu-Muresh;Târgu Mureş;Târgu Mureș;Târgul-Mureş;Tîrgu Mureş;Tîrgu Mureș;Vasarhely;Vásárhely;trgw mwrs;Тыргу-Муреш;טרגו מורש; +city::665010;Targu Jiu;Jiu;Targu Jiu;Targu Zhiju;Targul-Jiu;Tirgu Jiu;Tirgu Ziu;Tirgu Žiu;Tirgu-Zhiu;Tirnkou Ziou;Turgu Zhiu;Tyrgu-Zhiu;Târgu Jiu;Târgul-Jiu;Tîrgu Jiu;Zsilvasarhely;Zsilvásárhely;te er gu ri wu;teuleugujiu;trgw zhy;trgw zyw;trjw jyw;tyrgw zhyw;tyrgwjw;Τίργκου Ζίου;Таргу Жију;Тиргу-Жиу;Тиргу-Жіу;Търгу Жиу;Тыргу-Жиу;טרגו זיו;ترجو جيو;ترگو ژی;تیرگو ژیو;تیرگوجو;ტირგუ-ჟიუ;トゥルグ・ジウ;特爾古日烏;트르구지우; +city::665024;Targoviste;Targoviste;Tirgoviste;Turgovishhe;Târgoviste;Târgovişte;Târgoviște;Tîrgovişte;to~urugovu~ishute;Търговище;トゥルゴヴィシュテ; +city::665087;Timisoara;Freidorf;Josefvarosa;Josephs-Stadt;Jozsefvaros;Jósefvárosa;Józsefváros;Kendetelep;Szabadfalu;TSR;Temeschburg;Temeschwar;Temesvar;Temesvarinum;Temesvár;Temeswar;Temeşvar;Temešvár;Temishvar;Temisoara;Temisvar;Temişoara;Temišvar;Timishoara;Timisoara;Timişoara;Timišoara;Timișoara;timishoara;timisyoala;tmshwar;tymyshwara;Темишвар;Тимишоара;טימישוארה;تيميشوارا;طمشوار;ティミショアラ;티미쇼아라; +city::665850;Suceava;Gorad Suchava;SCV;Soutseava;Sucava;Suceava;Suchava;Suczawa;Sučava;Szucsava;Szucsáva;su qia wa;suchava;suchavu~a;sucheaba;swchawa;swtshafa;swzʼbh;sʼz;Σουτσεάβα;Горад Сучава;Сучава;Сучәва;Սուչավա;סוצאבה;שאץ;سوتشافا;سوچاوا;სუჩავა;スチャヴァ;蘇恰瓦;수체아바; +city::666767;Slatina;Slatina;Slatina i Romania;Striharet;seullatina;si la di na;slatyna;styya;suratina;Σλάτινα;Слатина;Слатіна;ستیئا;سلاتينا;سلاتینا;سلاتینا، رومانیہ;スラティナ;斯拉蒂納;슬라티나; +city::667268;Sibiu;Cibinium;Gorad Sibiu;Hermannstadt;Hermanstat;Hermanştat;Nagy-Szeben;Nagy-Szében;Nagyszeben;SBZ;Sibin;Sibiu;Simpiou;Sybin;Szeben;shibiu;sibi xu;sibiu;sibiva;sybw;sybyw;xi bi wu;Σιμπίου;Горад Сібіу;Сибиу;Сибињ;Сібіу;סיביו;سيبيو;سیبو;سیبیو;सिबिव;ซีบีอู;სიბიუ;シビウ;錫比烏;시비우; +city::667303;Sfantu-Gheorghe;Sepsiszentgyorgy;Sepsiszentgyőrgy;Sfantu Gheorghe;Sfantu-Gheorghe;Sfantul;Sfantul-Gheorghe;Sfehntu-Georg;Sfintu Gheorghe;Sfântu Gheorghe;Sfântu-Gheorghe;Sfântul;Sfântul-Gheorghe;Sfîntu Gheorghe;snt dszʼrdzs;Сфэнту-Георг;סנט דשזארדזש; +city::667873;Satu Mare;Gorad Satu-Mareh;SUJ;Sathmar;Satmar;Satmarinum;Satou Mare;Satu Mare;Satu Marė;Satu-Mare;Satul Mare;Szathmar;Szatmar;Szatmar-Nemeti;Szatmarnemeti;Szatmár;Szatmár-Németi;Szatmárnémeti;Sătmar;sa tu ma lei;satumale;satw mary;stw marh;Σάτου Μάρε;Горад Сату-Марэ;Сату Маре;Сату-Маре;סאַטמאַר;סאטו מארה;סאטמאר;סטו מארה;ساتو ماري;ساتو مارے;ستو ماره;サトゥ・マーレ;薩圖馬雷;사투마레; +city::668732;Roman;Roman;Roman i Romania;Romanas;Romanvasar;Románvásár;loman;luo man;rwman;Ρόμαν;Роман;ראמאן;רומאן;رومان;羅曼;로만; +city::668872;Ramnicu Valcea;Ramnicu Valcea;Ramnicul Valcea;Ramniku Valcha;Rimnicu Vilcea;Rimnikou Viltsea;Rimniku Vilca;Rimniku Vilča;Rimniku-Vilcha;Rumniku Vulcha;Rymniku-Vylcha;Râmnicu Vâlcea;Râmnicul Vâlcea;Rîmnicu Vîlcea;lei mu ni ku wo er qia;leumnikubeulchea;rmnykw wlcha;rmnyqw wlzh;rmynkw fyltsha;rymnkw wylcha;rymnykw wylcha;Ρίμνικου Βίλτσεα;Рамнику Валча;Римнику-Вилча;Римніку-Вилча;Ръмнику Вълча;Рымнику-Вылча;רמניקו ולצה;رمنیکو ولچا;رمينكو فيلتشا;ریمنکو ویلچا;ریمنیکو ویلچا;რიმნიკუ-ვილჩა;ルムニク・ヴルチャ;勒姆尼庫沃爾恰;름니쿠블체아; +city::668954;Resita;QRS;Recita;Reciţa;Reschitz;Reschitza;Resicabanya;Resicabánya;Resicza;Resiczabanya;Resiczabánya;Resita;Reşiţa;Reșița; +city::670474;Ploiesti;Ploeshh;Ploesti;Ploeszti;Ploeşti;Ploiesti;Ploieşti;Ploiești;plwyst;plwysty;Плоещ;פלוישט;פלוישטי; +city::670609;Pitesti;Pitesci;Pitescï;Piteshh;Piteshti;Pitesti;Piteşti;Pitești;pytst;Питещ;פיטשט; +city::670889;Piatra Neamt;Karacsonko;Karácsonkő;Piatra Neamt;Piatra Neamţ;Piatra Neamț;Piatra-Neamt; +city::671768;Oradea;Gorad Aradzja;Grosswardein;Großwardein;Nagy-Varad;Nagy-Várad;Nagyvarad;Nagyvárad;OMR;Oradae;Oradea;Oradea-Mare;Oradia;Oradja;Oradja khot;Oradä;Orantea;Varadinum;Veliki Varadin;Velky Varadin;Velký Varadín;ao la di ya;awradya;oladea;oradea;oradeas;oradia;orateya;ʼwrʼdyh;Οράντεα;Велики Варадин;Горад Арадзя;Орадя;Орадя хот;אוראדיה;גרויסווארדיין;أوراديا;اورادئا;اورادیا;ஒராதேயா;ორადია;オラデア;奥拉迪亚;오라데아; +city::673634;Medias;Aranyosmeggyes;Medgyes;Medias;Mediasch;Mediaş;Mediaș;Medivisch; +city::675810;Iasi;Copou;Copou-Targ;Copou-Târg;Galata;Gorad Jasy;IAS;Iasi;Iasio;Iassium;Iaşi;Iași;Ilasi;Jasai;Jash;Jashi;Jasi;Jassenmarkt;Jassi;Jassy;Jasy;Jaszvasar;Jaßenmarkt;Jászvásár;Munteni;Pacurari;Pacuret;Podgoria;Păcurari;Păcureţ;Socol;Socola;Yas;Yashi;Yasi;Yassi;Yassy;Yaş;ayashy;iasi;ya xi;yach;yasa;yash;yashi;Ιάσιο;Јаши;Горад Ясы;Ясси;Яссы;Яш;Յասի;יאס;יאשי;ایاشی;ياش;یاش;याश;ยาช;ヤシ;雅西;이아시; +city::675918;Hunedoara;Hunedoara;Khunedoara;Vajdahunyad;Хунедоара;חונדוארה; +city::677106;Giurgiu;Giurgiu;Gjurgevo;Gyurgyevo;Gyurgyevó;Yergogu;Yergoğu;giurgiu;Гюргево;გიურგიუ; +city::677697;Galati;Galac;Galacis;Galacz;Galati;Galats;Galatz;Galaz;Galaţi;Galați;Gałacz;Nkalatsi;galatsy;gallachi;garatsu~i;ghalats;glatsy;jia la ci;Γκαλάτσι;Галатс;Галац;גאלאץ;גאלץ;غالاتس;گالاتسی;گلاتسی;ガラツィ;加拉茨;갈라치; +city::678015;Focsani;Focsani;Focşani;Focșani;Foksany;Fokschan;Fokshani;Foksány;Фокшани;פוקשאן;פוקשאני; +city::678817;Drobeta-Turnu Severin;Drobeta;Drobeta - Turnu Severin;Drobeta Turnu Severin;Drobeta Turnu-Severin;Drobeta-Turnu Severin;Drobeta-Turnu Severinas;Drobeta-Turnu-Severin;Drubeta;Gorad Drabeta-Turnu-Severyn;Ntrompeta-Tournou Severin;Szoerenyvar;Szörényvár;Turnu Severin;Turnul Severin;atla drwbyta trnw;de luo bei ta-sai wei lin bao;deulobetatuleunusebelin;dor beta-thur nu se weri n;drwbta-twrnw swryn;drwbth-twrnw sbryn;drwbyta twrnw syfyryn;drwbyta-twrnw sywyryn;Ντρομπέτα-Τούρνου Σεβερίν;Горад Драбета-Турну-Северын;Дробета - Турну Северин;Дробета-Турну Северин;Дробета-Турну-Северин;Дробета-Турну-Северін;דרובטה-טורנו סברין;اتلا دروبیتا ترنو;دروبتا-تورنو سورین;دروبيتا تورنو سيفيرين;دروبیتا-تورنو سیویرین;โดรเบตา-ทูร์นูเซเวรีน;დრობეტა-ტურნუ-სევერინი;ドロベタ=トゥルヌ・セヴェリン;德羅貝塔-塞維林堡;드로베타투르누세베린; +city::679452;Deva;Deva;Deva i Romania;Diemrich;Déva;Nteva;Sargetia;de wa;deba;deva;devu~a;dwa;dyfa;Ντέβα;Дева;دوا;ديفا;دیوا ،رومانیہ;دیوا، رومانیہ;დევა;デヴァ;德瓦;데바; +city::680332;Craiova;CRA;Craiova;Croiova;Gorad Krajova;Kraiov;Kraiova;Krajova;Krajova khot;Krajowa;ke la yue wa;keulaioba;kraywfa;kraywwa;krayywwa;kurayovu~a;qrywbh;Κραϊόβα;Горад Краёва;Крайова;Крайова хот;Крајова;קראיובה;קריובה;كرايوفا;کرائیؤوا;کرايووا;کرایووا;クラヨーヴァ;克拉約瓦;크라이오바; +city::680963;Constanta;CND;Constanca;Constancia;Constanta;Constantia;Constantza;Constanza;Constança;Constanţa;Constanța;Costansa;Costanza;Gorad Kanstanca;Kjustendzha;Koestence;Konstanca;Konstancae;Konstanco;Konstansa;Konstantsa;Konstantza;Konstanza;Kuestence;Kustenja;Kustenje;Kustenji;Kyustendja;Köstence;Küstence;Küstenja;Tomis;kang si tan cha;khxn s tan sa;konseutancha;konstantsa;konsutantsu~a;kwnstansa;kwnstantsa;qwnstnzh;Κωνστάντζα;Горад Канстанца;Константса;Констанцæ;Констанца;Кюстенджа;Կոնստանցա;קונסטנצה;كونستانتسا;کونستانتسا;کونستانسا;कोन्स्तांत्सा;คอนสตันซา;კონსტანცა;コンスタンツァ;康斯坦察;콘스탄차; +city::681290;Cluj-Napoca;CLJ;Castrum Clus;Claudiopolis;Clausemburgo;Clausenburg;Cluj;Cluj Napoca;Cluj-Napoca;Gorad Kluzh-Napoka;Kalosvar;Kaloşvar;Klausenburg;Klouz-Napoka;Klujo;Kluz;Kluz Napok;Kluz-Napoka;Kluza-Napoka;Kluzas-Napoka;Kluzh-Napoka;Kluzh-Napoka khot;Kluĵo;Kluż-Napoka;Kluž;Kluž Napok;Kluža-Napoka;Klužas-Napoka;Koloszvar;Koloszvár;Kolozsvar;Kolozsvár;Municipium Aelium Hadrianum Napoca;Napoca;ke lu ri-na bo ka;keullujinapoka;khluch-na po ka;kluja-napoka;klwj nabwka;klwj napwka;klwzh napwka;klwzh-napwka;klwzh-npwka;kuruju=napoka;qlwyznbwrg;qlwz-nʼpwqh;Κλουζ-Ναπόκα;Горад Клуж-Напока;Клуж-Напока;Клуж-Напока хот;Կլուժ-Նապոկա;קלוז'-נאפוקה;קלוז-נאפוקה;קלויזנבורג;كلوج نابوكا;کلوج ناپوکا;کلوژ ناپوکا;کلوژ-ناپوکا;کلوژ-نپوکا;क्लुज-नापोका;คลูช-นาโปกา;კლუჟ-ნაპოკა;クルジュ=ナポカ;克卢日-纳波卡;클루지나포카; +city::683123;Buzau;Bodzavasar;Bodzavásár;Bouzaou;Buzau;Buzehu;Buzeu;Buzuu;Buzyu;Buzău;bu ze wu;bujeou;buzau;bwzaw;bwzayw;Μπουζάου;Бузау;Бузеу;Бузъу;Бузыу;Бузэу;בוזאו;بوزاؤ;بوزائو;بوزاو;ブザウ;布澤烏;부저우; +city::683506;Bucharest;BUH;Boekarest;Boukouresti;Bucarest;Bucaresta;Bucareste;Bucarèst;Bucharest;Bucuresti;Bucureşti;București;Buekres;Bukarest;Bukarestas;Bukareste;Bukaresto;Bukareszt;Bukareŝto;Bukareštas;Bukharest;Bukureshh;Bukuresht;Bukureshta;Bukureshti;Bukurest;Bukurešt;Bukurešť;Buxarest;Búkarest;Bûkarest;Bükreş;bkharst;bu jia lei si te;bukaresuto;bukulesyuti;bwkharst;bwqrst;Βουκουρέστι;Букурешт;Букурещ;Бухарест;Բուխարեստ;בוקאַרעשט;בוקרשט;بخارست;بوخارست;بۇخارېست;པུ་ཁ་རེ་སིད;ბუქარესტი;ቡካረስት;ブカレスト;布加勒斯特;부쿠레슈티; +city::683844;Brasov;Brashov;Brasov;Brasso;Brassó;Braszow;Braszów;Brazov;Braşov;Brašov;Brașov;Kronstadt;Kronstant;Orasu Stalin;Orasul Stalin;Oraşu Stalin;Oraşul Stalin;XHV;beulasyobeu;brswb;burashofu;Брашов;ברשוב;ブラショフ;브라쇼브; +city::683902;Braila;Braila;Brailov;Braiła;Brăila;Ibrail;Браила;בראילה; +city::684039;Botosani;Botosan;Botosani;Botoshani;Botoszany;Botosán;Botoşani;Botoșani;QDD;Ботошани;בוטושאן; +city::684657;Bistrita;Beszterce;Besztercze;Bistrica;Bistrita;Bistritz;Bistriţa;Bistrița;QBY;bisutoritsu~a;Бистрица;ビストリツァ; +city::684802;Barlad;Barlad;Barlád;Birlad;Birladas;Burlad;Byrlad;Bârlad;Bîrlad;Opstina Barlad;Opština Bârlad;beuleulladeu;birladi;bo er la de;brlh;Барлад;Бирлад;Бърлад;Бырлад;ברלאד;برله;ბირლადი;伯尔拉德;브를라드; +city::685826;Baia Mare;BAY;Baia Mare;Baja Mare;Baja-Mare;Frauenbach;Nagybanya;Nagybánya;Neustadt;Rivulus Dominarum;Бая-Маре; +city::685948;Bacau;BCM;Bacau;Bacău;Bako;Bakuu;Bákó;Бакъу;בקאו; +city::686254;Arad;ARW;Altarad;Arad;Aradia;Aradinum Vetus;Micalaca;Micălaca;Mikelaka;Murasel;Muresel;Mureşel;Murăşel;O-Arad;Orodinum;Zsigmondhaza;Zsigmondháza;Ō-Arad;ʻrd;Арад;ערד; +city::686578;Alba Iulia;Alba Iulia;Alba Julija;Alba-Julija;Almpa Ioulia;Balgrad;Bălgrad;Gorad Alba-Julija;Gyulafehervar;Gyulafehérvár;Karlsburg;QAY;Weissenburg;Weisskirchen;Weißenburg;Weißkirchen;a er ba you li ya;alba aywlya;alba ywlya;alba-iulia;albaiullia;alpa luliya;Άλμπα Ιούλια;Алба Јулија;Алба Юлия;Алба-Юлия;Алба-Юлія;Горад Алба-Юлія;אלבה יוליה;آلبا ایولیا;ألبا يوليا;البا ایولیا;البا یولیا;அல்பா லூலியா;ალბა-იულია;アルバ・ユリア;阿爾巴尤利亞;알바이울리아; +city::6697993;Baia Mare;Baia Mare;Baja Mare;Baja Marė;Baja-Mare;Nagybanya;Nagybánya;Rivulus Dominarum;ba ya ma lei;baia-mare;baiamale;baya marh;baya mary;Μπάια Μάρε;Бая Маре;Бая-Маре;Баја Маре;באיה מארה;بائیا مارے;بايا ماري;بایا ماره;بایا مارے;ბაია-მარე;バヤ・マレ;巴亞馬雷;바이아마레; +city::8581467;Slobozia;; +city::11048317;Sector 1;Sectorul 1; +city::11048318;Sector 2;Sectorul 2; +city::11048319;Sector 3;Sectorul 3; +city::11048320;Sector 4;Sectorul 4; +city::11048322;Sector 5;Sectorul 5; +city::11048323;Sector 6;Sectorul 6; +city::783814;Zrenjanin;Becicherecu Mare;Becicherecul Mare;Beckerek;Becskerek;Betschkerek;Beçkerek;Gross-Betschkerek;Nagybecskerek;Petrovgrad;Veliki Beckerek;Veliki Bečkerek;Zrenanin;Zrenianin;Zrenianinas;Zrenjanin;Zrenjanin-grad;bchkrk;ci lei ni ya ning;jeulenyanin;zrnjanyn;zrynyann;zrynyanyn;zurenyanin;Ζρένιανιν;Зренянин;Зрењанин;זרניאנין;بچکرک;زرنجانین;زرینیانن;زرینیانین;زرێنیانین;ズレニャニン;兹雷尼亚宁;즈레냐닌; +city::783920;Zemun;Opstina Zemun;Opština Zemun;Semlin;Semlino;Taurunum;Zeman;Zemlen;Zemlén;Zemun;Zimony;jemun;ze meng;zemun;zmwn;Σεμλίνο;Земун;זמון;ゼムン;泽蒙;제문; +city::784227;Vranje;Ivranya;Vrane;Vranie;Vranja;Vranje;Vranya;beulane;franyy;fu la nie;vuranye;wranyh;Βράνιε;Вране;Враня;Врање;וראניה;فرانيي;وارنیے;ورانیئے;ورانیه;ڤرانیێ;ヴラニェ;弗拉涅;브라네; +city::785756;Smederevo;Gorad Smedarava;Semendire;Semendria;Semêndria;Smedere;Smederevas;Smedereve;Smederevo;Smederewo;Smenterevo;Szendro;Szendrő;asmdrfw;seumedelebo;si mei dai lei wo;smdrbw;smederevo;smydyryww;sumederevu~o;Σμεντέρεβο;Горад Смедарава;Смедереве;Смедерево;סמדרבו;اسمدرفو;سمیدیریوو;سمێدێرێفپڤو;სმედერევო;スメデレヴォ;斯梅代雷沃;스메데레보; +city::787237;Pancevo;Banstadt;Gorad Panchava;Hertelendyfalva;Marienfeld;Pancevas;Pancevo;Panchevo;Panciova;Pancsal;Pancsaly;Pancsova;Pantschowa;Pantsevo;Panĉevo;Pančevas;Pančevo;QBG;Vojlovica;Wojlowitz;Wojlowitza;pan qie wo;panchebo;panchevu~o;panchfw;panchyww;pnzbw;Πάντσεβο;Горад Панчава;Панчево;פנצבו;پانچفو;پانچیوو;پانچێڤۆ;パンチェヴォ;潘切沃;판체보; +city::787595;Novi Pazar;Novi Pazar;Novi Pazaras;Novi pazar;Novi-Pazar;Pazari i Ri;Yeni Pazar;Yenipazar;nobipajaleu;novi pazar;nwfy bazar;nwwy pazar;xin pa zha er;Νόβι Παζάρ;Нови Пазар;Нови пазар;Нови-Пазар;נובי פאזאר;نوفي بازار;نووی پازار;نۆڤی پازار، سربیا;ノヴィ・パザル;新帕扎爾;노비파자르; +city::787657;Nis;INI;Nich;Nis;Nisch;Nish;Niso;Nissa;Nisz;Nix;Niŝo;Niš;Ниш; +city::788709;Leskovac;Gorad Leskovac;Leshkuqi;Leskofca;Leskofça;Leskovac;Leskovacas;Leskovats;lai si ke wa ci;leseukobacheu;lskwas;lsqwbz;lyskwfats;lyskwwach;lyskwwats;resukovu~atsu;Λέσκοβατς;Горад Лесковац;Лесковац;לסקובץ;لسکواس;ليسكوفاتس;لیسکوواتس;لیسکوواچ;لێسکۆڤاتس;レスコヴァツ;莱斯科瓦茨;레스코바츠; +city::788975;Krusevac;Alacahisar;Gorad Krushavac;Krousevats;Krusevac;Krusevacas;Krushevac;Kruševac;Kruševacas;alajh hsar;ke lu she wa ci;keulusyebacheu;krwshwas;krwshyfats;krwshywach;krwshywats;kurushevu~atsu;qrwsbz;Κρούσεβατς;Горад Крушавац;Крушевац;קרושבץ;الاجه حصار;كروشيفاتس;کروشواس;کروشیواتس;کروشیواچ;کروشێڤاتس;クルシェヴァツ;克鲁舍瓦茨;크루셰바츠; +city::789107;Kraljevo;Kralevas;Kralevo;Kralievo;Kraljevo;Rankovicevo;Rankovićevo;ke la lie wo;keulallebo;kralyfw;kralyyfw;kralyyww;kuraryevu~o;qrlywbw;Κράλιεβο;Кралево;Краљево;קרליובו;كرالييفو;کرالیئوو;کرالیفو;کرالێڤۆ;クラリェヴォ;克拉列沃;크랄레보; +city::789128;Kragujevac;Gorad Kraguevac;Krabujevac;Kragiyevac;Kraguevac;Kraguevac';Kragujevac;Kragujevaca;Kragujevacas;Krankougievats;ke la gu ye wa ci;keulaguyebacheu;khra kuye wat s;kraghwyyfats;kragwywats;kragwywts;kragwyywach;kuragui~evu~atsu;qrgwyybz;Κραγκούγιεβατς;Горад Крагуевац;Крагоуѥвьць;Крагуевац;Крагуєваць;Крагујевац;קרגוייבץ;كراغوييفاتس;کراگوئیواچ;کراگویواتس;کراگویوتس;ครากูเยวัตส์;クラグイェヴァツ;克拉古耶瓦茨;크라구예바츠; +city::792078;Cacak;Cacak;Cacakas;Chachak;Gorad Chachak;Tsatsak;cha cha ke;cha chak;chachak;chachakeu;chachaku;tshatshak;Čačak;Čačakas;Τσάτσακ;Горад Чачак;Чачак;צאצאק;تشاتشاك;چاچاک;ชาชัก;チャチャク;查查克;차차크; +city::792680;Belgrade;BEG;Belehrad;Belgrad;Belgrada;Belgradas;Belgrade;Belgrado;Belgradu;Belgrau;Belgrað;Belgrád;Belgráu;Beligradi;Belogradum;Belohrod;Beograd;Beogradi;Beogrado;Bèlgrade;Bělehrad;Běłohród;Nandorfehervar;Nándorfehérvár;Singidunum;be-ogeuladeu;bei er ge lai de;belgradi;beogurado;blghrad;blgrd;pelkiret;Βελιγράδι;Белград;Београд;Бѣлъ Градъ · Срьбїи;Բելգրադ;בלגרד;بلغراد;بېلگراد;பெல்கிறேட்;ბელგრადი;በልግራድ;ベオグラード;贝尔格莱德;베오그라드; +city::3188402;Valjevo;QWV;Valevas;Valevo;Valievo;Valjevo;ballebo;falyfw;vu~aryevu~o;wa lie wo;walyfw;walyyww;wayyww;wlyybw;Βάλιεβο;Валево;Ваљево;ולייבו;فاليفو;والیئوو;والیفو;وایئوو;ڤالێڤۆ;ヴァリェヴォ;瓦列沃;발레보; +city::3188434;Uzice;Gorad Uzhycy;Oujiste;Ouzhice;Ouzitse;Titovo Uzice;Titovo Užice;UZC;Ussitza;Uzhice;Uzice;Užice;Užicė;awzhytsh;ujiche;ujitsu~e;wu ri ce;xu sit se;Ούζιτσε;Горад Ужыцы;Оужицє;Ужице;ئوژیتسێ;اوژیتسه;اوژیتسے;اوژیچے;อูซีตเซ;ウジツェ;乌日策;우지체; +city::3189595;Subotica;Maria-Theresianopel;Maria-Theresiopel;Maria-Theresiopolis;Sawaditz;Subotica;Subotiza;Szabadka;Szent-Maria;Szent-Mária;Theresiopel;Zubotica;Суботица; +city::3191376;Sabac;Boeguerdelen;Böğürdelen;Chabats;Sabac;Sampats;Shabac;Szabacs;Szabács;sha ba ci;shabach;shabas;shabats;shabatsu;syabacheu;Ŝabac;Šabac;Σάμπατς;Шабац;שאבאץ;شاباتس;شاباس;شاباچ;シャバツ;沙巴茨;샤바츠; +city::3194360;Novi Sad;Gorad Novi-Sad;Neoplanta;Neusatz;Novi Sad;Novi Sadas;Novi Sant;Novi-Sad;Novi-Sad khot;Novij Sad;Novisada;Novu Sadu;Novy Sad;Novî Sad;Nový Sad;Nowy Sad;O-petervaradja;Petervarad;Pétervárad;QND;Ujvidek;Varadinum Petri;Vasaros-Varad;Vásáros-Várad;nobisadeu;novhi sada;novi-sadi;nuo wei sa;nwfy sad;nwwy sad;nx wi sad;Ó-péterváradja;Újvidék;Νόβι Σαντ;Горад Нові-Сад;Нови Сад;Нови-Сад;Нови-Сад хот;Новий Сад;Новъ Садъ;Նովի Սադ;נובי סאד;نوفي ساد;نووی ساد;नोव्ही साद;นอวีซาด;ნოვი-სადი;ノヴィ・サド;诺威萨;노비사드; +city::462444;Zlatoust;Gorad Zlatavust;Slatoust;Zlato-oest;Zlatooust;Zlatoust;Zlatousta;Zlatoustas;Zlatoutsk;Złatoust;ci la tuo wu si te;jeullatouseuteu;zlatwst;zlatwwst;zuratousuto;Горад Златавуст;Златоуст;زلاتؤوست;زلاتوؤست;زلاتوست;ズラトウースト;兹拉托乌斯特;즐라토우스트; +city::462755;Zhukovskiy;Otdykh;Stakhanovo;ZIA;Zhukovskij;Zhukovskiy;Zhukovskogo;Zjukovskij;Zukovski;Žukovski;Жуковский; +city::463082;Zhigulevsk;Otvazhnoye;Otvazhnyy;Zhigulevsk;Zjigulevsk;Жигулевск; +city::463343;Zheleznogorsk;Zeleznogorsk;Zheleznogorsk;Zjeleznogorsk;Železnogorsk;Железногорск; +city::463355;Zheleznodorozhnyy;Obiralovka;Zheleznodorozhny;Zheleznodorozhnyj;Zheleznodorozhnyy;Zjeleznodorozjnyj;Железнодорожный; +city::463829;Zelenograd;Zelenograd;Зеленоград; +city::463835;Zelenodolsk;Gorad Zelenadol'sk;Parat;Selenodolsk;Zelendol'sk;Zelendol’sk;Zelenodol's'k;Zelenodol'sk;Zelenodoljsk;Zelenodolsk;Zelenodolsk i Russland;Zelenodolskas;Zielonodolsk;jellenodolseukeu;ze lie nuo duo er si ke;zerenodorisuku;zlnwdwlsk rwsyh;zylynwdwlsk;Горад Зеленадольск;Зеленодольск;Зеленодольськ;Зеленодољск;Парат;Яшел Үзән;زلنودولسک، روسیه;زيلينودولسك;زیلینودولسک;ゼレノドリスク;泽列诺多尔斯克;젤레노돌스크; +city::464625;Zarechnyy;Zarechnyj;Zarechnyy;Zaretsjnyj;Заречный; +city::466806;Yoshkar-Ola;Iochkar-Ola;Ioshkar Ola;JOK;Joschkar-Ola;Joshkar-Ola;Josjkar-Ola;Joskar-Ola;Joszkar-Ola;Joszkar-Oła;Joŝkar-Ola;Joškar-Ola;Tsarevokokshaysk;Yoshkar-Ola;yosikaleuolla;Йошкaр-Ола;Йошкар-Ола;יושקר-אולה;ヨシュカル・オラ;요시카르올라; +city::466885;Yeysk;EIK;Eisk;Ejs'k;Ejsk;Gorad Ejsk;Ieisk;Ieïsk;Jeisk;Jejsk;Jejsko;Yeisk;Yeysk;Yiesk;eisuku;ye yi si ke;yeiseukeu;yysk;yysm;Єйськ;Јејск;Горад Ейск;Ейск;ييسك;ییسم;ییسک;エイスク;葉伊斯克;예이스크; +city::466990;Yessentuki;Essentuki;Jessentuki;Yessentaki;Yessentuki;Ессентуки; +city::467978;Yelets;Elec;Elec';Elecum;Elet;Eleț;Gorad Jalec;Ielets;Jelec;Jelecas;Jelets;Jelez;Yelets;eretsu;ye lie ci;yellecheu;ylts;yylyts;yylz;Єлець;Јелец;Горад Ялец;Елец;Елец балһсн;יילץ;ييليتس;یلتس;ییلیتس;エレツ;叶列茨;옐레츠; +city::468082;Yelabuga;Alabuga;Elabuga;Jelaboega;Jelabuga;Yelabuga;Јелабуга;Алабуга;Елабуга; +city::468250;Yegor'yevsk;Egor'ev;Egor'evsk;Egorievsk;Egor’ev;Jegorjevsk;Jegorjewsk;Yegor'yevsk;Yegorevsk;Yegor’yevsk;Егорьевск; +city::468866;Yartsevo;Jarcevo;Jartsevo;Yartseva;Yartsevo;Ярцево; +city::468902;Yaroslavl;Giaroslavl;Gorad Jaraslaul';IAR;Iaroslavia;Iaroslavl;Jaroslavelj;Jaroslavl;Jaroslavl';Jaroslavl' osh;Jaroslavla;Jaroslavlis;Jaroslavlj;Jaroslavul;Jaroslavļa;Jaroslavľ;Jaroslaw;Jaroslawl;Jaroszlavl;Jarosław;Yaroslavl;iaroslavli;ya luo si la fu er;ya ro sla fl;yaloseullabeul;yaroslava;yarosuravuri;yarwslafl;yarwslawl;yrwslbl;Γιαροσλάβλ;Јарослављ;Горад Яраслаўль;Ярославль;Ярославль ош;Ярославъл;Յարոսլավլ;ירוסלבל;ياروسلافل;یاروسلاول;यरोस्लाव;यारोस्लाव;ยาโรสลาฟล์;იაროსლავლი;ヤロスラヴリ;雅罗斯拉夫尔;야로슬라블; +city::470252;Vyshniy Volochek;Vyshnij Volochek;Vyshniy Volochek;Vyshniy Volochëk;Vysjnij Volotsjek;Wyschni-Wolotschek;Вышний Волочек; +city::470444;Vyksa;Gorad Vyksa;Viksa;Vyksa;Vîksa;Vıksa;Wyksa;bigsa;fyksa;wei ke sa;wyksa;Викса;Выкса;Горад Выкса;فيكسا;ویکسا;維克薩;빅사; +city::470546;Vyborg;Gorad Vybarg;VBR;Viborg;Viborga;Viborgas;Viburgum;Viiburi;Viipuri;Vimpornk;Vioborg;Vipuri;Vyborg;Vyborg osh;Vyborgas;Víborg;Víobórg;Vîborg;Wiborg;Wyborg;biboleukeu;fybwrgh;viborgi;vu~iborugu;wei bao;wybwrg;Βίμποργκ;Виборг;Виипури;Выборг;Выборг ош;Вꙑборгъ;Горад Выбарг;ויבורג;فيبورغ;ویبورگ;ვიბორგი;ヴィボルグ;维堡;비보르크; +city::470676;Vyaz'ma;Vjaz'ma;Vjazma;Vyasma;Vyaz'ma;Vyaz’ma;Вязьма; +city::471430;Votkinsk;Gorad Votkinsk;Votka;Votkins'k;Votkinsk;Votkinszk;Vótkinsk;Wotkinsk;Wotkińsk;boskinseukeu;fwtkynsk;vu~otokinsuku;wo te jin si ke;wtkynsk;wwtknsk;Вотка;Воткинск;Воткінськ;Горад Воткінск;فوتكينسك;وتکینسک;ووتکنسک;ヴォトキンスク;沃特金斯克;봇킨스크; +city::471656;Voskresensk;Voskresens'k;Voskresensk;Voskresenska;Voskresenskaj;Voskressensk;Woskressensk;Woskriesiensk;Woskrjesensk;boseukeulesenseukeu;fwskrysynsk;vu~osukuresensuku;wo si ke lie xian si ke;wwskrsnsk;wwskrysnsk;Воскресенск;Воскресенск балһсн;Воскресенскай;Воскресенськ;فوسكريسينسك;ووسکرسنسک;ووسکریسنسک;ヴォスクレセンスク;沃斯克列先斯克;보스크레센스크; +city::472045;Voronezh;VOZ;Voronej;Voronez;Voroneza;Voronezas;Voronezh;Voronezhskaja oblast';Voronezj;Voroneĵ;Voronež;Voronežas;Voroněž;Voroņeža;Woronesch;Woronesh;Woronez;Woroneż;bolonesi;vu~oroneji;Воронеж;Воронежская область;ヴォロネジ;보로네시; +city::472231;Volzhskiy;Volzh Sky;Volzhskij;Volzhskiy;Volzjskij;Volzski;Volžski;Волжский; +city::472234;Volzhsk;Julser-Ola;Lopatin;Lopatino;Volzhsk;Volzjsk;Volzsk;Volžsk;Волжск;Юлсер-Ола; +city::472278;Vol'sk;Vol'sk;Volsk;Vol’sk;Wolsk;Вольск; +city::472459;Vologda;Bologda;Bологда;Gorad Volagda;VGD;Vologd;Vologda;Vologdae;Vologdo;Vólogda;Wologda;Wołogda;bollogeuda;fwlwghda;vologda;vu~oroguda;wlwgda;wo luo ge da;wo lxk da;wwlwgda;wwlwgdh;Вологдæ;Вологда;Вологдо;Волоґда;Вӧлӧгда;Горад Волагда;Վոլոգդա;וולוגדה;فولوغدا;ولوگدا;وولوگدا;โวลอกดา;ვოლოგდა;ヴォログダ;沃洛格达;볼로그다; +city::472757;Volgograd;Caricyn;Estalingrado;Gorad Valgagrad;Stalingrad;Stalingrado;Tsaritsyn;VOG;Vl'gogradu;Volgograd;Volgograda;Volgogradas;Volgogrado;Volgogradum;Volgográd;Volnkonkrant;Volqoqrad;Wolgograd;Wołgograd;Zarizyn;bolgogeuladeu;fu er jia ge lei;fwlghwghrad;fwljwjrad;volagagarata;volgograda;volgogradi;volkokirat;vu~orugogurado;wlgwgrad;wwlgw grad;wwlgwgrad;wwlgwgrd;wxl kok rad;Βόλγκογκραντ;Аһш балһсн;Вльгоградъ;Волгоград;Горад Валгаград;Сталинград;Царицын;Վոլգոգրադ;וולגוגרד;فولجوجراد;فولغوغراد;ولگوگراد;وولگو گراد;وولگوگراد;ڤۆڵگۆگراد;वोल्गोग्राद;ਵੋਲਗਾਗਰਾਤ;வோல்கோகிராட்;වොල්ගාග්‍රාද්;วอลโกกราด;စတာလင်ဂရက်မြို့;ვოლგოგრადი;ヴォルゴグラード;伏尔加格勒;伏爾加格勒;볼고그라드; +city::472761;Volgodonsk;Gorad Valgadonsk;VLK;Volgodons'k;Volgodonsk;Volgodonska;Volgodonskas;Volqodonsk;Wolgodonsk;Wołgodońsk;bolgodonseukeu;fu er jia dun si ke;fwlghwdwnsk;vu~orugodonsuku;wlgwdwnsk;wwlgwdwnsk;wwlgwdwnsq;Волгодонск;Волгодонск балһсн;Волгодонськ;Горад Валгадонск;וולגודונסק;فولغودونسك;ولگودونسک;وولگودونسک;ヴォルゴドンスク;伏尔加顿斯克;볼고돈스크; +city::473247;Vladimir;Blantimir;Gorad Uladzimir;Ulatimer;Vladimir;Vladimir khot;Vladimir shaary;Vladimira;Vladimiras;Vladimír;Vladímir;Vladîmîr;Vlagyimir;Volodimir;Volodimiria;Wladimir;Wladymir;Wlodzimierz;Władymir;Włodzimierz;beulladimileu;fladymyr;fu la ji mi er;urajimiru;vladimiri;wladymyr;wldymyr;Βλαντίμιρ;Владимир;Владимир хот;Владимир шаары;Володимир;Горад Уладзімір;Улатимĕр;ולדימיר;فلاديمير;ولادیمیر;ვლადიმირი;ウラジーミル;弗拉基米尔;블라디미르; +city::473249;Vladikavkaz;Dzaeudzhykhuaeu;Dzhaudzhikau;Gorad Uladzikaukaz;OGZ;Ordshonikidse;Ordzhonikidve;Ordzhonikidze;Orjonikidze;Tehrchkualeh;Vladicaucaso;Vladicáucaso;Vladikaukaza;Vladikaukazas;Vladikaukāza;Vladikavkaz;Vladiqafqaz;Vlantikavkaz;Wladikafkaz;Wladikawkas;Wladikawkaz;Wladykaukaz;Władykaukaz;beulladikabkaseu;fladyqwqaz;fu la ji gao jia suo;urajikafukasu;wladyqfqaz;wldyqwwqz;Βλαντικαβκάζ;Буро-ГӀала;Владикавказ;Владикавказ балһсн;Горад Уладзікаўказ;Дзæуджыхъæу;КӀапӀкӀай;Орджоникидзе;Тэрчкъалэ;Վլադիկավկազ;ולדיקווקז;فلاديقوقاز;ولادیقفقاز;ولادی‌قفقاز;ვლადიკავკაზი;ウラジカフカス;弗拉季高加索;블라디캅카스; +city::473778;Vidnoye;Poselok Vidnoye;Posëlok Vidnoye;Vidnoe;Vidnoje;Vidnoye;Видное; +city::476077;Velikiye Luki;VLU;Velikie Luki;Velikije Loeki;Velikije Luki;Velikiye Luki;Welikije Luki;Wielkie Luki;Wielkie Łuki;bellikiyeluki;Великие Луки;벨리키예루키; +city::477494;Uzlovaya;Ouzlovaia;Ouzlovaïa;Uslowaja;Uzlovaia;Uzlovaja;Uzlovaya;Uzlowaja;Uzłowaja;awzlwfaya;awzlwwaya;ujeullobaya;uzurovu~aya;wu zi luo wa ya;Узловая;Узловаја;أوزلوفايا;اوزلووایا;ウズロヴァヤ;烏茲洛瓦亞;우즐로바야; +city::479123;Ulyanovsk;Chemper;Gorad Ul'janausk;Oeljanofsk;Oeljanovsk;Oulianofsk;Oulianovsk;Oulyanovsk;Owlyanovsk;Sember;Simbir;Simbirsk;Sinbirsk;ULY;Ul'janon' osh;Ul'janovs'k;Ul'janovsk;Ul'yanovsk;Ulanovsk;Ulianovsk;Uliànovsk;Uliánovsk;Uljanovsk;Uljanovska;Uljanovskas;Uljanovsko;Uljanovszk;Uljanowsk;Uljanowska am Wolga;Ulyanovsk;Ul’yanovsk;Uļjanovska;alyanwwsk;awlyanwfsk;awlyanwwsk;uliyanobhaska;ulliyanobseukeu;ulyanovska;uriyanofusuku;wu li yang nuo fu si ke;Ουλιάνοφσκ;Горад Ульянаўск;Оулиꙗновьскъ;Сембер;Синбирск;Сімбір;Ульяновск;Ульяновськ;Ульянонь ош;Уляновск;Улјановск;Уљановск;Чĕмпĕр;Ուլյանովսկ;אוליאנובסק;أوليانوفسك;الیانووسک;اولیانوفسک;اولیانووسک;उल्यानोव्स्क;উলিয়ানোভস্ক;ウリヤノフスク;乌里扬诺夫斯克;울리야놉스크; +city::479411;Ukhta;Chib'yu;Chib’yu;Gorad Ukhta;Oechta;Oukhta;UCT;Uchta;Uht;Uhta;Ujta;Ujtá;Ukhta;Ukhtà;Ukva;Uĥta;awkhta;uheuta;wu he ta;Горад Ухта;Уква;Ухта;أوختا;اوختا;乌赫塔;우흐타; +city::479561;Ufa;Ephu;Gorad Ufa;Oefa;Oufa;Owfa;UFA;Uf;Ufa;Ufà;Ufá;Ufа;Upo;awfa;ufa;upa;wu fa;Ĕпхӳ;Горад Уфа;Оуфа;Уфа;Үфі;Өфө;Ӱпӧ;Ուֆա;אופה;أوفا;اوفا;ऊफ़ा;უფა;ウファ;烏法;우파; +city::480060;Tver;Gorad Cver;KLD;Kalinin;Tueria;Tver;Tver';Tvera;Tvere;Tverj;Tverė;Tver’;Twer;t weiyr;tbr;te wei er;teubeli;tfyr;tibhera;tiver;tovu~eri;twr;twwr;Горад Цвер;Калинин;Твер;Тверь;Տվեր;טבר;تفير;تور;توور;তিভের;திவெர்;ตเวียร์;ტვერი;トヴェリ;特维尔;트베리; +city::480089;Tuymazy;Tuimasa;Tuimazy;Tujmazi;Tujmazy;Tuymaza;Tuymazy;Туймазы; +city::480562;Tula;Gorad Tula;TYA;Toela;Toula;Tul;Tula;Tula i Russland;Tulae;Tulo;Tuła;Tûla;to~ura;tu la;tulla;twla;twla rws;twlh;Τούλα;Горад Тула;Тулæ;Тулă;Тула;Туло;Տուլա;טולה;تولا;تولا، روس;ٹولا;ტულა;トゥーラ;圖拉;툴라; +city::480716;Tuapse;Gorad Tuapseh;Toeapse;Touapse;Touapsé;Tuapse;Tuapseo;Tuapsse;Tuapsé;to~uapuse;tu a pu xie;tu'apse;tuabse;twabsy;twapsh;Горад Туапсэ;Туапсе;Туапсе балһсн;ТӀуапсы;Տուապսե;توآپسے;توابسي;تواپسه;टुआप्से;ტუაფსე;トゥアプセ;圖阿普謝;투압세; +city::482283;Tol'yatti;Stavropol';Stavropol’;Stawropol;Togliatti;Togliatti-on-the-Volga;Togliattigrad;Tol'jatti;Tol'yatti;Tolati;Toliatti;Toljati;Toljatti;Tolyatti;Tol’yatti;tolliyati;toriyatchi;Ставрополь;Тольятти;Тољати;トリヤッチ;톨리야티; +city::482965;Timashevsk;Timashevsk;Timashevskaya;Timashjovsk;Timashëvsk;Timashëvskaya;Timasjevsk;Timoschewskaja;Timoshevskaya;Тимашёвск; +city::483019;Tikhvin;Gorad Cikhvin;Tichvin;Tichvina;Tichwin;Tihvin;Tihvina;Tihvinae;Tihvinä;Tijvin;Tikhvin;Tikhvine;Tikhvinu;Tiĥvin;chifuvu~in;ji he wen;tiheubin;tikhvin;tykhfyn;tykhwyn;Горад Ціхвін;Тихвин;Тихвинъ;Тихвін;تيخفين;تیخوین;ტიხვინი;チフヴィン;季赫溫;티흐빈; +city::483029;Tikhoretsk;Gorad Cikharehck;Tichoreck;Tichoretsk;Tichorezk;Tichorieck;Tihhoretsk;Tihoreck;Tihoretk;Tihorețk;Tijoretsk;Tikhorec'k;Tikhoreck;Tikhoretsk;Tixoretsk;Tiĥoreck;ji huo lie ci ke;tykhwrtsk;tykhwrytsk;Горад Ціхарэцк;Тихоретск;Тихорецк;Тихорецк балһсн;Тихорєцьк;Տիխորեցկ;تيخورتسك;تیخورتسک;تیخوریتسک;季霍列茨克; +city::484646;Tambov;Gorad Tambou;TBW;Tambof;Tambov;Tambova;Tambovas;Tambovia;Tambow;Tombu;tambopeu;tambwf;tan bo fu;tanbofu;tmbwb;Горад Тамбоў;Тамбов;Томбу;טמבוב;تامبوف;ტამბოვი;タンボフ;坦波夫;탐보프; +city::484907;Taganrog;Gorad Taganrog;TGK;Taganrog;Taganroga;Taganrogas;Tankanronk;Taqanroq;ta gan luo ge;taganlokeu;taganrogu;taganrwg;taghanrwgh;Ταγκανρόγκ;Горад Таганрог;Таганрог;تاغانروغ;تاگانروگ;ტაგანროგი;タガンログ;塔甘羅格;타간로크; +city::484972;Syzran';Sysran;Syzran;Syzran';Syzran’;Сызрань; +city::485239;Syktyvkar;Gorad Syktyukar;SCW;Siktifkar;Siktivkar;Siktivkara;Soktovkar;Syktyvkar;Syktyvkaras;Syktywkar;Sziktivkar;Sîktîvkar;Sõktõvkar;Sıktıvkar;Ust'-Sysol'sk;Ust’-Sysol’sk;se ke te fu ka er;sigtibkaleu;sukh tuf khar;su~ikutifukaru;syktyfkar;syktywkar;syqtybqr;Горад Сыктыўкар;Сиктивкар;Сыктывкар;Сыктывкар балһсн;Усть-Сысольск;Սիկտիվկար;סיקטיבקר;سيكتيفكار;سیکتیوکار;ซึคตึฟคาร์;スィクティフカル;瑟克特夫卡爾;식팁카르; +city::486968;Stupino;Elektrovoz;Gorad Stupina;Stoepino;Stoupino;Stupino;Stúpino;astwpynw;si tu pi nuo;stwbynw;stwpynw;Горад Ступіна;Ступино;Ступино балһсн;Ступіно;استوپینو;ستوبينو;ستوپینو;斯图皮诺; +city::487495;Sterlitamak;Cterle;Gorad Stehrlitamak;Staerletamaq;Sterlitamak;Sterlitamaka;Sterlitamakas;Sterļitamaka;Stärletamaq;Sztyerlitamak;astrlytamak;seuteleullitamakeu;si jie er li ta ma ke;strlytamak;suteruritamaku;Çтерлĕ;Горад Стэрлітамак;Стерлитамак;Стерлитамак балһсн;Стерлітамак;Стәрлетамак;Стәрлетамаҡ;Ստեռլիտամակ;استرلیتاماک;سترليتاماك;سترلیتاماک;ステルリタマク;斯捷尔利塔马克;스테를리타마크; +city::487846;Stavropol';STW;Stavropol;Stavropol';Stavropol’;Stawropol;Voroshilovsk;Ставрополь; +city::487928;Staryy Oskol;Starij Oskol;Stary Oskol;Staryi Oskol;Staryj Oskol;Staryy Oskol;seutalioseukol;Старий Оскол;Старый Оскол;스타리오스콜; +city::490172;Sosnovyy Bor;Sosnovyj Bor;Sosnovyy Bor;Uustia;Сосновый Бор; +city::490996;Solnechnogorsk;Solnechangorski;Solnechnogors'k;Solnechnogorsk;Solnechnogorski;Solnechnogorskiy;Solnecinogorsk;Solnecnogorsk;Solnecnoqorsk;Solnetchnogorsk;Solnetschnogorsk;Solnetsjnogorsk;Solnetsnogorsk;Solnetšnogorsk;Solneçnoqorsk;Solneĉnogorsk;Solnečnogorsk;Solniecznogorsk;Solnjecnogorsk;Solnječnogorsk;Solněčnogorsk;Sołniecznogorsk;suo er nie qi nuo ge er si ke;swlnchnwgwrsk;swlntshnwghwrsk;swlnychnwgwrsk;Солнечногорск;Солнечногорск балһсн;Солнечногорськ;سولنتشنوغورسك;سولنچنوگورسک;سولنیچنوگورسک;索爾涅奇諾戈爾斯克; +city::491023;Solikamsk;Gorad Salikamsk;Solikamsk;Solikamskas;Sovkar;Szolikamszk;suo li ka mu si ke;swlkamsk;swlykamsk;Горад Салікамск;Совкар;Соликамск;Սոլիկամսկ;سولكامسك;سولیکامسک;索利卡姆斯克; +city::491422;Sochi;AER;Sochi;Sochi - Soci;Sochi - Со́чи;Soci;Soczi;Sotchi;Sotji;Sotschi;Sotsi;Sotsji;Sotši;Soĉi;Ssotschi;sochi;soci;suo qi;Сочи;Сочі;सोची;სოჭი;ソチ;索契;소치; +city::491687;Smolensk;Gorad Smalensk;LNX;Smol'n'sku;Smolen'sk;Smolens'k;Smolenscum;Smolensk;Smolenska;Smolenskaj;Smolenskas;Smoleńsk;Smoļenska;Smulen;Szmolenszk;asmwlnsk;s mo len skh;seumollenseukeu;si mo leng si ke;smolenska;smwlnsk;smwlnsq;smwlynsk;sumorensuku;Σμολένσκ;Горад Смаленск;Смоленск;Смоленскай;Смоленськ;Смоленьск;Смольньскъ;Смулен;Սմոլենսկ;סמאלענסק;סמולנסק;اسمولنسک;سمولنسک;سمولينسك;स्मोलेन्स्क;สโมเลนสค์;სმოლენსკი;スモレンスク;斯摩棱斯克;스몰렌스크; +city::492094;Slavyansk-na-Kubani;Slavanskaya;Slavjansk Na Kubani;Slavjansk-na-Kubani;Slavyansk-na-Kubani;Slavyanskaya;Slawjanskaja;Slov'jans'k na Kubani;Sslawjanskaja;seullabyanseukeunakubani;Славянск На Кубани;Славянск-на-Кубани;Слов'янськ на Кубані;슬라뱐스크나쿠바니; +city::493160;Sibay;Sibai;Sibaj;Sibay;sibai;Сибай;시바이; +city::493231;Shuya;Chouia;Chouïa;Schuja;Shuja;Shuya;Sjuja;Suia;Suja;Suya;Szuja;Xuia;Xúia;shu ya;shuya;shwaya;shwya;syuya;Ŝuja;Şuya;Šuja;Șuia;Шуя;Шуја;شوايا;شویا;シューヤ;舒亚;슈야; +city::493702;Mikhaylovsk;Mihajlovsk;Mikhajlovsk;Mikhaylovsk;Mikhaylovska;Mikhaylovskoye;Shpakovskoe;Shpakovskoye;Sjpakovskoje;Михайловск;Шпаковское; +city::495344;Shchelkovo;Shchelkovo;Shchyolkovo;Shhelkovo;Shhjolkovo;Щелково;Щёлково; +city::495394;Shchekino;Schekino;Shchekino;Shchëkino;Shehekino;Shhekino;Shhjokino;Щекино;Щёкино; +city::496015;Shakhty;Aleksandrovsk-Grushevskiy;Aleksandrovsk-Grushevskoy;Chakhty;Gorad Shakhty;Sachtos;Sachty;Sahti;Sahto;Sahty;Saxti;Schachty;Shajty;Shakhti;Shakhty;Sjachty;Sjakhty;Szachty;sha he te;shakhtay;shakhty;syaheuti;Ŝaĥti;Şahti;Şaxtı;Šachtos;Šachty;Šahti;Šahty;Šahtõ;Șahtî;Горад Шахты;Шахти;Шахты;شاختاي;شاختی;沙赫特;샤흐티; +city::496278;Severomorsk;Gorad Severamorsk;Severomors'k;Severomorsk;Severomorskas;Seweromorsk;Sewjeromorsk;Siewieromorsk;Szeveromorszk;Vaenga;Vaenka;Vayenga;bei mo er si ke;sebelomoleuseukeu;sevu~eromorusuku;sfyrwmwrsk;swrwmwrsk;sywrwmwrsk;Горад Севераморск;Североморск;Сєвєроморськ;سفيرومورسك;سورومورسک;سیورومورسک;セヴェロモルスク;北莫爾斯克;세베로모르스크; +city::496285;Severodvinsk;Gorad Severadzvinsk;Molotovsk;Molotowsk;Severodvins'k;Severodvinsk;Severodvinska;Severodvinskas;Sewerodwinsk;Sewjerodwinsk;Siewierodwinsk;Siewierodwińsk;Sudostroy;bei de wen si ke;sebelodeubinseukeu;sevu~erodovu~insuku;sfrwdfnsk;swrwdwynsk;sywrwdwnsk;Горад Северадзвінск;Северодвинск;Сєверодвінськ;سفرودفنسك;سورودوینسک;سیورودونسک;სევეროდვინსკი;セヴェロドヴィンスク;北德文斯克;세베로드빈스크; +city::496527;Serpukhov;Serpoechov;Serpuchov;Serpuchow;Serpuhhov;Serpuhov;Serpukhov;Serpuĥov;Sierpuchow;Sierpukhovo;seleupuhopeu;Серпухов;세르푸호프; +city::496638;Sergiyev Posad;Sergiev Posad;Sergijev Posad;Sergijev Possad;Sergijew Possad;Sergiyev;Sergiyev Posad;Sergiyevskiy Posad;Siergijew Posad;Zagorsk;Сергиев Посад;Сергијев Посад; +city::498525;Sarov;Arzamas-16;Gorad Sarou;Kremlev;Kremlëv;Sarov;Sarova;Sarow;Sarykylych;Szarov;sa luo fu;salopeu;sarofu;sarwf;Горад Сароў;Саров;Сарыкылыч;ساروف;サロフ;薩羅夫;사로프; +city::498677;Saratov;Gorad Saratau;ISaratov;RTW;Saratof;Saratov;Saratov osh;Saratova;Saratovas;Saratovia;Saratovu;Saratow;Saratu;Saratuovs;Saratów;Saretow;Sarytau;Saràtov;Sarátov;Szaratov;sa la tuo fu;salatopeu;saratofu;saratova;saratwf;srʼtwb;Σαράτοφ;Горад Саратаў;Сарăту;Саратов;Саратов балһсн;Саратов ош;Саратовъ;Сарытау;Һарытау;Սարատով;סראטוב;ساراتوف;ساراٹوف;सारातोव;სარატოვი;サラトフ;薩拉托夫;사라토프; +city::498687;Sarapul;Gorad Sarapul;Sarapoel;Sarapoul;Sarapul;Sarapulas;Sarapuł;Szarapul;sa la pu er;sarabwl;sarapl;sarapuru;sarapwl;Горад Сарапул;Сарапул;سارابول;ساراپل;ساراپول;サラプル;萨拉普尔; +city::498698;Saransk;Gorad Saransk;SKX;Saran;Saran osh;Saranosh;Sarans'k;Saransk;Saranska;Saranskas;Saransko;Sarańsk;Szaranszk;sa lan si ke;sa ran skh;salanseukeu;saransk;saranska;saransuku;sransk;srnsq;Горад Саранск;Саран;Саран ош;Саранош;Саранск;Саранск балһсн;Саранськ;סרנסק;سارانسك;سارانسک;سرانسک;सारान्स्क;ซารันสค์;サランスク;萨兰斯克;사란스크; +city::498817;Saint Petersburg;Agia Petroupole;Betuyrbukh;LED;Leningrad;Leningrado;Lungsod ng Sankt-Peterburg;Peterburg;Peterburgo;Peterburi;Petersburg;Petrapilis;Petrograd;Petrogrado;Petrohrad;Petropolis;Petursborg;Pietari;Piiteri;Piter;Pétursborg;SPb;Saint Petersbourg;Saint Petersburg;Saint Pétersbourg;Saint-Petersbourg;Saint-Pétersbourg;San Petersburgo;San Pietroburgo;San Pietruburgu;Sankt Peitersbuerg;Sankt Peterburg;Sankt Peterburgas;Sankt Petersborg;Sankt Petersburg;Sankt Peterzburg;Sankt Péitersbuerg;Sankt-Peterburg;Sankt-Peterburgo;Sankt-Petersburg;Sankti Petursborg;Sankti Pétursborg;Sanktpeterburga;Sanktpēterburga;Sant Petersburg;Sant Petersburgo;Sant-Petersbourg;Santa Peterburg;Sao Petersburgo;Sint Petersbork;Sint-Petersburg;St Petersburg;St. Petersburg;St.-Petersburg;Szentpetervar;Szentpétervár;São Petersburgo;leningeuladeu;sangteupeteleubuleukeu;sankt. peterburg;sankutopeteruburuku;sant btrsbrgh;seinteupiteojeubeogeu;sent pi te xrs beirk;sheng bi de bao;sn ptrzbwrg;snqt ptrbwrg;Αγία Πετρούπολη;Бетъырбух;Ленинград;Петербург;Петроград;Питер;СПб;Санкт Петербург;Санкт Петерзбург;Санкт-Петербург;Սանկտ Պետերբուրգ;סנקט פטרבורג;سانت بطرسبرغ;سن پترزبورگ;เซนต์ปีเตอร์สเบิร์ก;სანკტ-პეტერბურგი;სანქტ-პეტერბურგი;サンクトペテルブルク;圣彼得堡;레닌그라드;상트페테르부르크;세인트피터즈버그; +city::499099;Samara;Gorad Samara;KUF;Kuibyschew;Kuibyshev;Kujbyshev;Kuybyshev;Samar;Samar khot;Samar osh;Samara;Samarae;Samare;Samarga;Samāra;Szamara;sa ma la;sa ma ra;samala;samara;smara;smara rws;smrh;Σαμάρα;Горад Самара;Куйбышев;Самар;Самар ош;Самар хот;Самарæ;Самара;Самаре;Самарҕа;Һамар;Սամարա;סמרה;سامارا;سامارہ;سمارا;سمارا، روس;समारा;ซามารา;სამარა;サマーラ;薩馬拉;사마라; +city::499161;Sal'sk;Sal'sk;Salsk;Sal’sk;Ssalsk;Torgovyy;Сальск; +city::499292;Salavat;Gorad Salavat;Salauat;Salavat;Salavat i Russland;Salavata;Salavatas;Salawat;Saławat;Szalavat;sa la wa te;salafat;salawat;salawat rwsyh;saravu~ato;Горад Салават;Салават;Салават балһсн;Салауат;سالافات;سالاوات;سالاوات، روسیه;サラヴァト;薩拉瓦特; +city::499717;Rzhev;Gorad Rzhehu;Raesevae;Rescovia;Rjev;Rjov;Rschew;Rshew;Rzev;Rzew;Rzhev;Rzjev;Räsevä;Rĵev;Rżew;Ržev;lei re fu;leujepeu;rjyf;rujefu;rzb;rzhf;rzhyf;Горад Ржэў;Ржев;רזב;رجيف;رژف;رژیف;ルジェフ;勒熱夫;르제프; +city::500004;Rybinsk;Andropov;Gorad Rybinsk;RYB;Ribins'k;Ribinsk;Ribinska;Ribinsko;Robinsk;Rybinsk;Rybinskas;Rybińsk;Ríbinsk;Rîbinsk;Rõbinsk;Rýbinsk;Rıbinsk;Shcherbakov;lei bin si ke;libinseukeu;raybansk;ruibinsuku;rybnsk;rybynsk;Горад Рыбінск;Рибинск;Рибінськ;Рыбинск;رايبانسك;ریبنسک;ریبینسک;ルイビンスク;雷宾斯克;리빈스크; +city::500096;Ryazan';RZN;Resania;Riazan;Riazań;Rjasan;Rjazan;Rjazan';Rjazaň;Ryazan;Ryazan';Ryazan’;liang zan;lyajan;ryazan;Рязань;リャザン;梁赞;랴잔; +city::501175;Rostov-na-Donu;Don umbalne Rostov;Dondaguy Rostov;Dondagy Rostov;Dondokhi Rostov;Doni Rostov;Donyn Rostov;Gorad Rastou-na-Done;ROV;Rostof aan die Don;Rostof epi tou Nton;Rostov;Rostov Don;Rostov Donal;Rostov Doni aeaeres;Rostov Doni ääres;Rostov aan de Don;Rostov de Don;Rostov del Don;Rostov do Don;Rostov na Don;Rostov na Donu;Rostov nad Donom;Rostov sopra-u-Donu;Rostov sul Don;Rostov tren song GJong;Rostov trên sông Đông;Rostov ved Don;Rostov-Don;Rostov-Donyl;Rostov-Tan-cinchi;Rostov-an-Don;Rostov-ar-Ddon;Rostov-na-Donu;Rostov-on-Don;Rostov-pe-Don;Rostov-sur-le-Don;Rostova pie Donas;Rostovas prie Dono;Rostovia ad Tanaim;Rostow;Rostow Am Don;Rostow am Don;Rostow na Donu;Rostow nad Donem;Rostow nad Donom;Rostòv de Dòn;Rostóv na Donú;Rostów nad Donem;Rosztov-na-Donu;Tyndagy Rostov;dun he pan luo si tuo fu;loseutopeunadonu;rastov-an-dan;rostova dona;rwstwf-na-dwnw;rwstww na danw;Ροστόφ επί του Ντον;Горад Растоў-на-Доне;Дон ӱмбалне Ростов;Дон-тӀера-Ростов;Дондагъы Ростов;Дондағы Ростов;Дондохи Ростов;Донын Ростов;Растовъ на Донѣ;Ростов;Ростов на Дон;Ростов на Дону;Ростов-Доныл;Ростов-Тан-çинчи;Ростов-на-Дону;Ростов-на-Дону балһсн;Тындагы Ростов;Դոնի Ռոստով;רוסטוב על הדון;روستوف-نا-دونو;روستوو نا دانو;रोस्तोव दॉन;ರಾಸ್ಟೊವ್-ಆನ್-ಡಾನ್;დონის როსტოვი;დონიშ როსტოვი;ロストフ・ナ・ドヌ;顿河畔罗斯托夫;로스토프나도누; +city::501215;Rossosh';Pervaya Rossosh';Pervaya Rossosh’;Rossosh';Rossosh' Pervaya;Rossoshi;Rossosh’;Rossosh’ Pervaya;Rossosji;Россошь; +city::501231;Rossosh';Rossoh';Rossos;Rossosch;Rossosh';Rossosh’;Rossosj;Rossoš;Россошь; +city::501283;Roslavl';Raslawl;Roslavl;Roslavl';Roslavl’;Roslawl;Рославль; +city::502011;Revda;Gorad Rehuda;Revda;Revda i Sverdlovsk oblast;Revnta;Rewda;lie fu da;rfda awblast swrdlwfsk;ryfda;rywda;Ρεβντά;Горад Рэўда;Ревда;Рәүде;رفدا، اوبلاست سوردلوفسک;ريفدا;ریودا;列夫達; +city::502018;Reutov;Reoutov;Reutov;Reutova;Reutovas;Reutovo;Reutow;Rieutow;Rjeutov;Rjeutow;Réutov;lie wu tuo fu;rywtwf;Реутов;Реутов балһсн;Рјеутов;رئوتوف;ريوتوف;ریوتوف;列烏托夫; +city::502965;Ramenskoye;Gorad Ramenskae;Ramenska;Ramenskoe;Ramenskoie;Ramenskoje;Ramenskojė;Ramenskoye;Ramenskoïe;Ramienskoje;Rámenskoye;la mian si ke ye;lamenseukoye;ramensukoe;ramnskwy;ramnskwyh;Горад Раменскае;Раменское;Раменскоје;رامنسكوي;رامنسکوئے;رامنسکویه;ラメンスコエ;拉緬斯科耶;라멘스코예; +city::503550;Pyatigorsk;Five Mountains;Piatigorsk;Pjatigors'k;Pjatigorsk;Pyatigorsk;pyachigorusuku;pyatigoleuseukeu;wu shan cheng;Пятигорск;Пятигорськ;פיאטיגורסק;ピャチゴルスク;五山城;퍄티고르스크; +city::503977;Pushkino;Poesjkino;Pouchkino;Puschkino;Pushkino;Pusjkino;Puskino;Puszkino;Puŝkino;Puşkino;Puškino;Púshkino;bwshkynw;pu xi jin nuo;pwshkynw;pwshkynw astan mskw;Пушкино;Пушкіно;بوشكينو;پوشکینو;پوشکینو، استان مسکو;普希金諾; +city::504003;Pushkin;Detskoye Selo;Puschkin;Pushkin;Pusjkin;Saari;Suari;Tsarskoye Selo;Šuari;Пушкин; +city::504341;Pskov;Gorad Pskou;PKV;Pihkova;Pihkva;Pleskau;Pleskava;Pscovia;Pskof;Pskov;Pskov osh;Pskovas;Pskovo;Pskow;Psków;Pszkov;bskwf;pas khxf;peuseukopeu;pskwf;psqwb;pu si ke fu;pusukofu;Горад Пскоў;Пльсковъ · Рѡсїи;Псков;Псков ош;Պսկով;פסקוב;بسكوف;پسکوف;ปัสคอฟ;ფსკოვი;プスコフ;普斯科夫;프스코프; +city::504935;Prokhladnyy;Prochladnaja;Prochladnyj;Prohladnyi;Prokhladneh;Prokhladnyj;Prokhladnyy;Прохладный;Прохладнэ; +city::508101;Podolsk;OSF;Podol'sk;Podolsk;Подольск; +city::509820;Petrozavodsk;AEaenislinna;Gorad Petrazavodsk;PES;Petrosavodsk;Petrosawodsk;Petroskoi;Petroskoj;Petroskoj osh;Petrozavods'k;Petrozavodsk;Petrozavodska;Petrozavodskas;Petrozavodszk;Petrozavontsk;Petrozawodsk;Petrozawodzk;Pietrozawodsk;Pjetrozawodsk;bi de luo zha wo ci ke;bytrwzwfwdsk;peteulojabocheukeu;petorozavu~otsuku;petrozavodska;ptrwzawdsk;ptrwzbwdsq;pytrwzawwdsk;Äänislinna;Πετροζαβόντσκ;Горад Петразаводск;Петрозаводск;Петрозаводськ;Петроской;Петроской ош;Петроскӧй;פטרוזבודסק;بيتروزوفودسك;پتروزاودسک;پیتروزاوودسک;پیٹروزاودسک;पेत्रोज़ावोद्स्क;პეტროზავოდსკი;ペトロザヴォーツク;彼得罗扎沃茨克;페트로자보츠크;𐍀𐌴𐍄𐍂𐍉𐌶𐌰𐌸𐌰𐌿𐌳𐍃𐌺; +city::510225;Petrodvorets;Petergof;Petrodvorec;Petrodvorets;Петродворец; +city::510291;Peterhof;Gorad Pecjargof;Paleizencomplex in Peterhof;Peterchof;Petergof;Peterhof;Peterhofa;Peterhofium;Peterkhof;Petrodvorec;Petrodvorets;Petěrgof;Pietarhovi;Pjetergof;Pēterhofa;bi de gong cheng;bytyrhwf;peteleugopeu;peterugofu;ptrgwf;pʼetʼergopi;Πέτερχοφ;Горад Пецяргоф;Петергоф;Петерхоф;Петродворец;بيتيرهوف;پترگوف;პეტერგოფი;ペテルゴフ;彼得宮城;페테르고프; +city::510808;Pervoural'sk;Pervoural'sk;Pervoural'skiy;Pervouralsk;Pervoural’sk;Pervoural’skiy;byrfwralsk;di yi wu la er si ke;Первоуральск;بيرفورالسك;第一烏拉爾斯克; +city::511196;Perm;Gorad Perm;Molotov;PEE;Perem;Perm;Perm';Perma;Perme;Permia;Permjo;Permė;Perym;bi er mu;byrm;parma;peiy rm;peleum;perumi;prm;pyrm;Περμ;Горад Перм;Молотов;Перĕм;Перем;Перм;Пермь;Перым;Пєрмь;Պերմ;פרם;بيرم;پرم;پیرم;पर्म;เปียร์ม;პერმი;ペルミ;彼尔姆;페름; +city::511510;Novo-Peredelkino;Novo-Peredelkino;Peredelkino;Ново-Переделкино; +city::511565;Penza;Gorad Penza;PEZ;Pensa;Penz;Penza;Penza osh;Penzae;Penze;ben sa;bynza;penja;penza;pnza;pnzh;pynza;Πένζα;Горад Пенза;Пензæ;Пенза;Пенза балһсн;Пенза ош;Пензе;Պենզա;פנזה;بينزا;پنزا;پینزا;ペンザ;奔萨;펜자; +city::512023;Pavlovskiy Posad;Pavloro Pasad;Pavlov-Posad;Pavlovo-Posad;Pavlovski Posad;Pavlovskij Posad;Pavlovskiy Posad;Павловский Посад; +city::513883;Otradnyy;Otradnoye;Otradny;Otradnyj;Otradnyy;Отрадный; +city::514734;Orsk;Gorad Orsk;OSW;Ors'k;Orsk;Orska;Orskas;Orski;Orsko;ao er si ke;awrsk;oleuseukeu;orusuku;Горад Орск;Орск;Орски;Орськ;أورسك;اورسک;オルスク;奧爾斯克;오르스크; +city::515003;Orenburg;Arenpur;Chkalov;Gorad Arehnburg;Oremburgo;Orenbourg;Orenburg;Orenburg osh;Orenburga;Orenburgas;Orenburgo;Orenburgum;Orenburq;Orynbor;REN;Tschkalow;ao lun bao;awrnbrg;awrnbrgh;awrnbwrg;awrynbwrgh;olenbuleukeu;orenabarga;orenburgi;orenburuku;xo re nburk;yrymbur;yrynbur;Ăренпур;Горад Арэнбург;Оренбург;Оренбург ош;Орынбор;Чкалов;Ырымбур;Ырынбур;Օրենբուրգ;אורנבורג;أورنبرغ;أورينبورغ;اورنبرگ;اورنبورگ;ओरेनबर्ग;โอเรนบุร์ก;ორენბურგი;オレンブルク;奥伦堡;오렌부르크; +city::515012;Orel;OEL;Orel;Oriol;Oriolas;Orjol;Oryol;Orzel;Orzeł;Orël;olyol;oryoru;Орел;Орёл;オリョール;오룔; +city::515024;Orekhovo-Zuyevo;Gorad Arehkhava-Zueva;Orechovas-Zujevas;Orechovo-Zoejevo;Orechovo-Zuevo;Orechovo-Zujevo;Orechowo-Sujewo;Orehhovo-Zujevo;Orehovo-Zuevo;Orehovo-Zujevo;Orehovo-Zuyevo;Orehovozujeva;Orejovo-Zuyevo;Orekhovo;Orekhovo-Zouievo;Orekhovo-Zouïevo;Orekhovo-Zuevo;Orekhovo-Zujevo;Orekhovo-Zuyevo;Orexovo-Zuyevo;Oreĥovo-Zujevo;Oriechowo-Zujewo;Orjechowo Sujewo;Oryekhovo;Oréjovo-Zúyevo;ao lie huo wo-zu ye wo;arykhwfw-zwyfw;awrkhwfw-zwyfw;awrykhwfw-zwyfw;awrykhww zwyyww;olehobojuyebo;orehovu~o=zuevu~o;Горад Арэхава-Зуева;Орехово-Зуево;Орехово-Зујево;Орєхово-Зуєво;أوريخوفو-زويفو;اريخوفو-زويفو;اورخوفو-زویفو;اوریخوو زوئیوو;オレホヴォ=ズエヴォ;奧列霍沃-祖耶沃;오레호보주예보; +city::515083;Sunzha;Ordshonikidsewskaja;Ordzhonikidzevskaja;Ordzhonikidzevskaya;Ordzhonikidzevskoye;Ordzjonikidzevskaja;Sipsoj-gӀala;Sleptsovskaya;Slyeptsovskaya;Sunza;Sunzha;Sunzja;Sunža;Орджоникидзевская;Сипсой-гӀала;Сунжа; +city::515879;Oktyabr'skiy;OKT;Oktiabr'skil;Oktiabr’skil;Oktjabr'skij;Oktjabrskij;Oktyabr'skiy;Oktyabrsk;Oktyabr’skiy;Октябрьский; +city::516215;Odintsovo;Gorad Adzincova;Odincova;Odincovas;Odincovo;Odincowo;Odintovo;Odintsovo;Odinzowo;Odințovo;ao jin zuo wo;awdynstww;awdyntswfw;odinchobo;ojintsu~obo;xo din t so wo;Горад Адзінцова;Одинтсово;Одинцово;Одинцово балһсн;أودينتسوفو;اودینتسوفو;اودینستوو;โอดินต์โซโว;オジンツォボ;奧金佐沃;오딘초보; +city::516436;Obninsk;Gorad Obninsk;Obnins'k;Obninsk;Obninskas;Obnińsk;ao bu ning si ke;awbnynsk;obeuninseukeu;obuninsuku;Óbninsk;Горад Обнінск;Обнинск;Обнінськ;أوبنينسك;اوبنینسک;ობნინსკი;オブニンスク;奥布宁斯克;오브닌스크; +city::517836;Novotroitsk;Gorad Navatroick;Novo-Troitskiy;Novotroic'k;Novotroick;Novotroickas;Novotroitc;Novotroitsk;Novotroițc;Novotroytsk;Novotroïtsk;Nowotroick;Nowotroizk;nwfwtrwytsk;nwwtrwyytsk;nwwwtrwysk;xin te luo yi ci ke;Горад Наватроіцк;Новотроитск;Новотроицк;Новотроїцьк;Яңа Троицк;نوفوترويتسك;نوووترویسک;نوّوتروئیتسک;新特羅伊茨克; +city::517963;Novoshakhtinsk;Komintern;Kominternovskiy;Molotovskiy;Novosahtinsk;Novoshakhtinsk;Novoŝaĥtinsk;Novošahtinsk;Nowoschachtinsk;Nowoszachtynsk;Nowoszachtyńsk;Новошахтинск; +city::518255;Novorossiysk;NOI;Noborosisk;Novorosijsk;Novorossiejsk;Novorossiisk;Novorossijsk;Novorossisk;Novorossiysk;Noworossiisk;Noworossijsk;Noworosyjsk;nobolosiseukeu;Νοβορωσίσκ;Новоросијск;Новороссийск;노보로시스크; +city::518557;Novomoskovsk;Bobriki;Gorad Novamaskousk;Novomoskovs'k;Novomoskovsk;Novomoskovsk i Russland;Novomoskovskas;Nowomoskowsk;Stalinogorsk;Stalinogorsk Pervyy;Stalinogorsk Severnyy;Stalinogorsk Vtoroy;Stalinogorsk Yuzhnyy;nobomoseukobseukeu;novu~omosukofusuku;nwfwmwskwfyk;nwwmaskwwsk;nwwwmwskwfsk rwsyh;xin mo si ke si ke;Горад Новамаскоўск;Новомосковск;Новомосковськ;Яңа Мәскәү;نوفوموسكوفيك;نووماسکووسک;نوووموسکوفسک، روسیه;ノヴォモスコフスク;新莫斯科斯克;노보모스콥스크; +city::518659;Novokuybyshevsk;Gorad Navakujbyshehusk;Novo-Kuybuyshev;Novo-Kuybyshevskiy;Novokoejbysjevsk;Novokouibychevsk;Novokouïbychevsk;Novokuibisevsk;Novokuibiševsk;Novokuibosevsk;Novokuibysevsk;Novokuibysevskas;Novokuibyshevsk;Novokuibyševsk;Novokuibyševskas;Novokuibîșevsk;Novokuibõševsk;Novokujbisevsk;Novokujbisevszk;Novokujbishevs'k;Novokujbishevsk;Novokujbiŝevsk;Novokujbiševsk;Novokujbysevsk;Novokujbyshevsk;Novokujbysjevsk;Novokujbyševsk;Novokuybyshevsk;Novokúibyshevsk;Nowokuibyschewsk;Nowokujbysewsk;Nowokujbyszewsk;Nowokujbyšewsk;nwfwkwybyshfsk;nwwkwybyshfsk;nwwkwyybyshywsk;xin gu bi xue fu si ke;Горад Навакуйбышэўск;Новокуйбишевск;Новокуйбишевськ;Новокуйбышевск;Новокујбишевск;Яңа Куйбышев;نوفوكويبيشفسك;نووکویبیشفسک;نوّوکوئیبیشیوسک;新古比雪夫斯克; +city::518970;Novocherkassk;Gorad Novacharkask;Novocerkask;Novocerkaska;Novocerkaskas;Novocerkassk;Novocherkas'k;Novocherkask;Novocherkassk;Novocserkasszk;Novotcherkassk;Novotjerkassk;Novotserkassk;Novotsjerkassk;Novotšerkassk;Novoçerkassk;Novoĉerkassk;Novočerkask;Novočerkaska;Novočerkaskas;Novočerkassk;Nowoczerkask;Nowotscherkask;Nowotscherkassk;Nowotsjerkassk;nobocheleukaseukeu;novu~ocherukassuku;nwbwzrqsq;nwfwtshrkask;nwwchrkask;nwwchrkysk;xin qie er ka si ke;Горад Новачаркаск;Новочеркаск;Новочеркасск;Новочеркаськ;נובוצרקסק;نوفوتشركاسك;نووچرکاسک;نووچرکیسک;ნოვოჩერკასკი;ノヴォチェルカッスク;新切爾卡斯克;노보체르카스크; +city::518976;Novocheboksarsk;Cene Shupashkar;Novoceboksarsk;Novocheboksarsk;Novotseboksarsk;Novotsjeboksarsk;Novotšeboksarsk;Novoĉeboksarsk;Novočeboksarsk;Nowotscheboksarsk;nobochebogsaleuseukeu;novu~ochebokusarusuku;Çĕнĕ Шупашкар;Новочебоксарск;ノヴォチェボクサルスク;노보체복사르스크; +city::519336;Velikiy Novgorod;Holmgardur;Hólmgarður;NVR;Naugard;Naugardas;Nobnkoront;Nov" Grad";Nov"grad";Novgorod;Novogardia Magna;Nowgorod;Nowogrod Wielki;Nowogród Wielki;Suuri Novgorodi;Veliki Novgorod;Veliki Nóvgorod;Velikij Novgorod;Velikiy Novgorod;Veliky Novgorod;Weliki Nowgorod;bellikinobeugolodeu;da nuo fu ge luo de;didi novgorodi;novugorodo;nwbgwrwd;Šuuri Novgorodi;Νόβγκοροντ;Велики Новгород;Великий Новгород;Новгород;Новъ Градъ;Новъградъ;נובגורוד;დიდი ნოვგოროდი;ノヴゴロド;大诺夫哥罗德;벨리키노브고로드; +city::520068;Noginsk;Gorad Naginsk;Noghinsk;Nogins'k;Noginsk;Noginska;Noginskas;Nogińsk;Noguinsk;Noqinsk;noginseukeu;noginsuku;nuo jin si ke;nwgnsk;nwgynsk;nwjynsk;Горад Нагінск;Ногинск;Ногинск балһсн;Ногінськ;نوجينسك;نوگنسک;نوگینسک;ノギンスク;諾金斯克;노긴스크; +city::520494;Nizhniy Tagil;Nizhne-Tagil'skiy;Nizhne-Tagil’skiy;Nizhni Tagil;Nizhnii Tagil;Nizhnij Tagil;Nizhniy Tagil;Nizjnij Tagil;Нижний Тагил; +city::520555;Nizhniy Novgorod;GOJ;Gor'kij;Gor'kiy;Gorkey;Gorki;Gorkii;Gorkij;Gorky;Nijni Novgorod;Nijnii Novgorod;Nischni Nowgorod;Nishni-Nowgorod;Nishnii Nowgorod;Nishnij Nowgorod;Nizhni Novgorod;Nizhnii Novgorod;Nizhnij Novgorod;Nizhniy Novgorod;Nizhny Novgorod;Nizjnij Novgorod;Nizni Novgorod;Niznij Nowgorod;Nižni Novgorod;Nižnij Nowgorod;Горький;Нижний Новгород; +city::521118;Nizhnekamsk;Anat Kama;Gorad Nizhnjakamsk;NBC;Nijnekamsk;Nischnekamsk;Nizhn'okams'k;Nizhnekamsk;Nizhnekamskiy;Nizjnekamsk;Niznekamsk;Niznekamska;Niznekamskas;Nizniekamsk;Niznjekamsk;Niĵnekamsk;Niżniekamsk;Nižnekamsk;Nižnekamskas;Nižnjekamsk;Nižněkamsk;Tuebaen Kama;Tuebenkama;Tübenkama;Tübän Kama;nijeunekamseukeu;nijinekamusuku;nyjnkamsk;nyzhnkamsk;nyzhnykamsk;xia ka mu si ke;Ņižņekamska;Анат Кама;Горад Ніжнякамск;Нижнекамск;Нижньокамськ;Нижњекамск;Түбән Кама;نيجنكامسك;نیژنکامسک;نیژنیکامسک;ニジネカムスク;下卡姆斯克;니즈네캄스크; +city::522377;Nevinnomyssk;Gorad Njavinnamysk;Nevinnomis'k;Nevinnomissk;Nevinnomossk;Nevinnomyskaya;Nevinnomyssk;Nevinnomysskaya;Nevinnomîssk;Nevinnomõssk;Nevinnomıssk;Nevinnonyssk;Nevinomisk;Nevinomysk;Nevinomyskas;Nevinomısk;Newinnomyssaja;Newinnomyssk;Newinnomysskaja;Niewinnomyssk;Njewinnomyssk;Něvinnomyssk;nafynwmysk;nebinomiseukeu;nevu~in'nomuisuku;nie wen nuo mei si ke;nwynwmysk;nywynwmysk;Горад Нявіннамыск;Невинномисск;Невинномиськ;Невинномысск;Невинномысск балһсн;Невиномиск;Նեվինոմիսկ;نافينوميسك;نوینومیسک;نیوینومیسک;ネヴィンノムイスク;涅溫諾梅斯克;네비노미스크; +city::522942;Neftekamsk;Gorad Nefcjakamsk;Kasevo;Kaseyevo;NEF;Neftekama;Neftekams'k;Neftekamsk;Neftekamska;Neftekamskas;Nieftiekamsk;Njeftekamsk;Nyeftyekamszk;Něftěkamsk;nebtekamseukeu;nftkamsk;nie fu jie ka mu si ke;nyftykamsk;Ņeftekamska;Горад Нефцякамск;Нефтекама;Нефтекамск;Нефтекамск балһсн;Нефтекамськ;نفتكامسك;نفتکامسک;نیفتیکامسک;涅夫捷卡姆斯克;넵테캄스크; +city::523064;Nazran';Imeni Kost-Khetagurova;Kazran;Kosta-Khetagurovo;Nana-Na'sare;Nasran;Nazran;Nazran';Nazrane;Nazranj;Nazrano;Nazranė;Nazran’;Nazrań;Poselok Nazran';Posëlok Nazran’;najeulan;Назрань;Нана-Наьсаре;나즈란; +city::523426;Naro-Fominsk;Gorad Nara-Faminsk;Naro-Fomins'k;Naro-Fominsk;Naro-Fomińsk;Narofominska;na luo-fu ming si ke;nalopominseukeu;naro=fominsuku;narw-fwmynsk;narwfwmnsk;Горад Нара-Фамінск;Наро-Фоминск;Наро-Фоминск балһсн;Наро-Фомінськ;Նարո-Ֆոմինսկ;نارو-فومينسك;نارو-فومینسک;ناروفومنسک;ナロ=フォミンスク;納羅-福明斯克;나로포민스크; +city::523523;Nal'chik;NAL;Nal'chik;Nalshyk;Naltschik;Naltsik;Naltšik;Nal’chik;Налшык;Нальчик; +city::523750;Naberezhnyye Chelny;Brezhnev;Jar Chally;Naberejnije Celni;Naberejnye Chelny;Nabereschnyje Tschelny;Naberezhnye Chelny;Naberezhnyye Chelny;Naberezjnye Tsjelny;Nabereznije Celni;Nabereznoje Tselno;Nabereznye Celny;Nabereznyje Celny;Nabereznyje Tselny;Nabereĵnije Ĉelni;Naberežnije Čelni;Naberežnye Čelny;Naberežnyje Tšelny;Naberežnyje Čelny;Naberežnõje Tšelnõ;nabelejeuniyechelni;nabelejuniyechelni;Брежнев;Набережные Челны;Яр Чаллы;나베레주니예첼니;나베레즈니예첼니; +city::523812;Mytishchi;Gorad Mycishchy;Mitischi;Mitisci;Mitishchi;Mitishhi;Mitisi;Mitisxi;Mitiŝĉi;Mitišči;Mityiscsi;Miytisci;Motistsi;Mytichtchi;Mytischtschi;Mytisci;Mytisciai;Mytishchi;Mytishhi;Mytishi;Mytisjtji;Mytisjtsji;Mytistsi;Mytiszczi;Mytištši;Mytišći;Mytišči;Mytiščiai;Mîtișci;Mõtištši;Mıtişi;Mıytişçi;maytshy;mei ji xi;mitisi;mitisichi;muy thich chi;mu~itishi;mytyshchy;Горад Мыцішчы;Митишчи;Митищі;Мытищи;Мытищи балһсн;مايتشي;میتیشچی;มืยทิชชี;ムィティシ;梅季希;미티시;미티시치; +city::524294;Murom;Gorad Muram;Moerom;Mourom;Murom;Murom am Oka;Muromas;Muromum;Múrom;mu luo mu;mulom;muromu;mwrwm;Горад Мурам;Муром;Мөрәм;موروم;ムーロム;穆罗姆;무롬; +city::524305;Murmansk;Gorad Murmansk;Gorod Murmansk;MMK;Moermansk;Mourmansk;Murmans'k;Murmansk;Murmansk osh;Murmanska;Murmanskas;Murmanski;Murmansko;Murmanszk;Murmańsk;Murmánska;Muurmanni;Muurmanski;Múrmansk;Mûrmansk;mo er man si ke;muleumanseukeu;muramanska;murmanska;murumansuku;mwrmansk;mwrmnsq;Μούρμανσκ;Горад Мурманск;Мурманск;Мурманск ош;Мурманськ;Մուրմանսկ;מורמנסק;مورمانسك;مورمانسک;मुर्मान्स्क;मूरमान्स्क;მურმანსკი;ムルマンスク;摩爾曼斯克;무르만스크; +city::524901;Moscow;Gorad Maskva;MOW;Maeskuy;Maskav;Maskava;Maskva;Mat-xco-va;Matxcova;Matxcơva;Mosca;Moscfa;Moscha;Mosco;Moscou;Moscova;Moscovo;Moscow;Moscoƿ;Moscu;Moscua;Moscòu;Moscó;Moscù;Moscú;Mosk"va;Moska;Moskau;Mosko;Moskokh;Moskou;Moskov;Moskova;Moskovu;Moskow;Moskowa;Mosku;Moskuas;Moskva;Moskvo;Moskwa;Moszkva;Muskav;Musko;Mát-xcơ-va;Mòskwa;Məskəү;masko;maskw;mo si ke;moseukeuba;mosko;mosukuwa;mskw;mwskva;mwskw;mwsqbh;mx s ko;Μόσχα;Горад Масква;Мæскуы;Маскав;Москва;Москова;Москох;Москъва;Мускав;Муско;Мәскәү;Մոսկվա;מאָסקװע;מאסקווע;מוסקבה;ماسکو;مسکو;موسكو;موسكۋا;ܡܘܣܩܒܐ;मास्को;मॉस्को;মস্কো;மாஸ்கோ;มอสโก;མོ་སི་ཁོ།;მოსკოვი;ሞስኮ;モスクワ;莫斯科;모스크바; +city::526480;Mineralnye Vody;Gorad Mineral'nyja Vody;MRV;Mineral Waters;Mineral'ni Vodi;Mineral'nye Vody;Mineral'nyye Vody;Mineralized Veded;Mineraližed Veded;Mineralne Wody;Mineralnie Vodi;Mineralnie Vody;Mineralnie vodi;Mineralnije Vodi;Mineralniye Vodi;Mineralnoje Vodo;Mineralnye Vody;Mineralnyje Vody;Mineralnyje Wody;Mineralnyye Vody;Mineralnîe Vodî;Mineralnõje Vodõ;Mineralnıye Vodı;Mineral’nyye Vody;Minjeralnyje Wody;Minvod;kuang shui cheng;minelalniyebodi;minerarinu~ie・vu~odo~i;mnralny fwdy;mynralnyh wwdy;mynrlnyyh wwdy;mynyralnayy fwdy;Горад Мінеральныя Воды;Минвод;Минералние води;Минералније Води;Минеральные Воды;Минеральные Воды балһсн;Мінеральні Води;Միներալնիե Վոդի;מינרלנייה וודי;منرالني فودي;منرالنیئے وودی;مينيرالنايي فودي;مینرالنیه وودی;ミネラーリヌィエ・ヴォードィ;礦水城;미네랄니예보디; +city::527012;Mikhaylovka;Gorad Mikhajlauka;Michailowka;Michajlovka;Michajlowka;Michajłowka;Michalowka;Mihailovk;Mihailovka;Mihajlovka;Mihhailovka;Mikhailovka;Mikhajlovka;Mikhaylovka;Mikhaïlovka;Miĥajlovka;mi ha yi luo fu ka;mykhaylwfka;mykhayylwfka awblast wlgwgrad;mykhayylwka;Горад Міхайлаўка;Михайловка;Михайловка балһсн;Михајловка;ميخايلوفكا;میخائیلوفکا، اوبلاست ولگوگراد;میخائیلوکا;米哈伊洛夫卡; +city::527191;Michurinsk;Gorad Michurynsk;Koslov;Kozlov;Michurins'k;Michurinsk;Michúrinsk;Miciurinsk;Micurinsk;Miczurynsk;Miczuryńsk;Mitchourinsk;Mitjurinsk;Mitschurinsk;Mitschurnisk;Mitsjoerinsk;Mitsjurinsk;Mitsurinsk;Mitxurinsk;Mitxúrinsk;Mitšurinsk;Miçurinsk;Miĉurinsk;Mičurinsk;mi qiu lin si ke;michulinseukeu;michurinsuku;mychwrnsk;mychwrynsk;mytshwrynsk;Горад Мічурынск;Мичуринск;Мічурінськ;ميتشورينسك;میچورنسک;میچورینسک;ミチュリンスク;米丘林斯克;미추린스크; +city::527717;Meleuz;Gorad Meljauz;Meleouz;Meleus;Meleuz;Mieleuz;mei lie wu zi;mlywz;mylywz;Горад Меляўз;Мелеуз;Мәләвез;Мәләүез;ملئوز;مليوز;میلیؤز;梅列烏茲; +city::528293;Maykop;Maikop;Maikopas;Majkop;Majkopo;Majkuop;Maykop;Maïkop;Myekuuapeh;maikopeu;maikopu;myyqwp;Майкоп;Майкъоп;Мајкоп;Мыекъуапэ;מייקופ;マイコープ;마이코프; +city::532096;Makhachkala;Anzhi;GIjanzhi-Kuala;MCX;Machackala;Machaczkala;Machaczkała;Machatjkala;Machatsch-Kala;Machatschkala;Machatsjkala;Machačkala;Mag'achkuala;Mahackala;Mahackalao;Mahacqala;Mahatskala;Mahatškala;Mahaçqala;Mahačkala;Mahhatskala;Mahhatškala;MakhIachkhuala;Makhachkala;Makhatchkala;Makhatsjkala;Makhatxkala;Makhatxkalà;Maĥaĉkalao;Petrovsk;Petrovsk-Port;mahachikalla;mahachikara;mhzqlh;Анжи;ГIянжи-Къала;Магьачкъала;МахIачхъала;МахІачхъала;Махачкала;מחצקלה;マハチカラ;마하치칼라; +city::532288;Magnitogorsk;Gorad Magnitagorsk;MQF;Magnetogorsk;Magnitogors'k;Magnitogorsk;Magnitogorska;Magnitogorskas;Magņitogorska;Manknitonkorsk;ma ge ni tuo ge er si ke;mageunitogoleuseukeu;magnytwgwrsk;magunitogorusuku;mak ni to kxskh;mghnytaghwrsk;mgnytwgwrsq;Μαγκνιτογκόρσκ;Горад Магнітагорск;Магнитогорск;Магнітогорськ;Մագնիտոգորսկ;מגניטוגורסק;ماگنیتوگورسک;ماگنیٹوگورس;مغنيتاغورسك;มักนีโตกอสค์;マグニトゴルスク;马格尼托哥尔斯克;마그니토고르스크; +city::532615;Lyubertsy;Gorad Ljubercy;Lioubertsy;Liubercai;Liuberti;Liubertsi;Liubertsy;Liuberțî;Liúbertsy;Ljoebertsy;Ljuberci;Ljubercy;Ljubertso;Ljubertsy;Ljubertsõ;Ljuberzy;Luberci;Lubertsi;Lubiercy;Lyubertsi;Lyubertsy;Lyubertsı;liu bie er qi;liubertsi;lyubeleuchi;lywbartsy;lywbrtsy;lywbyrtsy;ryuberutsu~i;Ļuberci;Љуберци;Горад Люберцы;Люберци;Люберцы;Люберці;ليوبارتسي;لیوبرتسی;لیوبیرتسی;ლიუბერცი;リュベルツィ;柳別爾齊;류베르치; +city::532657;Lytkarino;Gorad Lytkaryna;Litkarino;Lytkarino;Lytkorino;Lîtkarino;Lıtkarino;lei te ka li nuo;lytkarynw;lytkrynw;Łytkarino;Горад Лыткарына;Литкарино;Литкаріно;Лыткарино;Лыткарино балһсн;ليتكرينو;لیتکارینو;雷特卡里諾; +city::532675;Lys'va;Lys'va;Lysva;Lys’va;Лысьва; +city::534595;Lobnya;Krasnaya Polyana;Lobnja;Lobnya;Лобня; +city::534701;Livny;Gorad Liuny;Livni;Livno;Livny;Livnî;Livnõ;Liwny;li fu nei;libeuni;lyfny;rivunu~i;Горад Ліўны;Ливни;Ливны;Ливны балһсн;Лівни;ليفني;لیفنی;リーヴヌィ;利夫內;리브니; +city::534838;Liski;Georgiu-Dezh;Gorad Liski;Liski;Novopokrovka;Svoboda;li si ji;lysky;Горад Ліскі;Лиски;Лиски балһсн;ليسكي;لیسکی;利斯基; +city::535121;Lipetsk;Gorad Lipeck;LPK;Lipec'k;Lipeck;Lipeck shaary;Lipecka;Lipeckas;Lipetk;Lipetsk;Lipezk;Lipețk;Lipieck;Lipjeck;Lípetsk;li pei ci ke;li pet skh;lipecheukeu;lybytsk;lyptsk;ripetsuku;Ļipecka;Горад Ліпецк;Липецк;Липецк балһсн;Липецк шаары;Липецьк;ليبيتسك;لپٹسک;لیپتسک;لیپٹسک;ลีเปตสค์;リペツク;利佩茨克;리페츠크; +city::536162;Leninogorsk;Gorad Leninagorsk;Leninogorsk;Leninogorsk i Russland;Leninoqorsk;Novaya Pis'menka;Novaya Pis'myanka;Novaya Pis’menka;Novaya Pis’myanka;Novopis'myanka;Novopis’myanka;leninogoleuseukeu;lie ning nuo ge er si ke;lnynwghwrsk;lnynwgwrsk rwsyh;lynynwgrsk;reninogorusuku;Горад Ленінагорск;Лениногорск;Лењиногорск;لنينوغورسك;لنینوگورسک، روسیه;لینینوگرسک;レニノゴルスク;列寧諾戈爾斯克;레니노고르스크; +city::537281;Labinsk;Gorad Labinsk;Labins'k;Labinsk;Labinskaja;Labinskaya;la bin si ke;labaynsk;labinseukeu;labnsk;labynsk;Łabińsk;Горад Лабінск;Лабинск;Лабинск балһсн;Лабінськ;لاباينسك;لابنسک;لابینسک;拉賓斯克;라빈스크; +city::537737;Kuznetsk;Gorad Kuzneck;Kouznetsk;Kusnezk;Kuznec'k;Kuzneck;Kuzneckas;Kuznetk;Kuznetsk;Kuznețk;Kuznieck;Kuznjeck;Kuźnieck;ku zi nie ci ke;kwzntsk;kwznytsk;Горад Кузнецк;Кузнецк;Кузнецк балһсн;Кузнецьк;Кузњецк;كوزنتسك;کوزنتسک;کوزنیتسک;庫茲涅茨克; +city::538560;Kursk;Koersk;Koursk;Kurs'k;Kursk;Kurskas;Kúrsk;URS;ku er si ke;kuleuseukeu;kurusuku;Курск;Курськ;クルスク;库尔斯克;庫爾斯克;쿠르스크; +city::539147;Kungur;Gorad Kungur;Koengoer;Koungour;Kungur;Kunqur;kun gu er;kung-guleu;kunguleu;kwnghwr;kwngwr;Горад Кунгур;Кунгур;Кӧҥгыр;Көңгер;كونغور;کونگور;昆古爾;쿤구르;쿵구르; +city::539283;Kumertau;Gorad Kumjartau;Koumertaou;Kumertau;Kumiertau;Kumjertau;ku mei er tao;kwmrtaw;Горад Кумяртаў;Кумертау;Кумертау балһсн;Күмертау;كومرتاو;کومرتاؤ;کومرتاو;庫梅爾套; +city::540103;Kstovo;Gorad Kstova;Kostova;Kstovo;Kstowo;ke si tuo wo;keuseutobo;kstwfw;kstww;kusutovu~o;Горад Кстова;Кстово;كستوفو;کستوفو;کستوو;クストヴォ;克斯托沃;크스토보; +city::540251;Krymsk;Gorad Krymsk;Krims'k;Krimsk;Krimskaja;Krimskaya;Kromsk;Krymasko;Krymsk;Krymskaja;Krymskaya;Krîmsk;Krõmsk;Krımsk;ke lei mu si ke;keulimseukeu;krymsk;Горад Крымск;Кримск;Кримськ;Крымск;Крымск балһсн;كريمسك;کریمسک;克雷姆斯克;크림스크; +city::540761;Kropotkin;Gorad Krapotkin;Krapotkin;Kropotkin;Kropotkin i Krasnodar kraj;Kropotkine;Romanovskiy Khutor;ke lu pao te jin;krwbwtkyn;krwptkyn krasnwdar;krwpwtkn;Горад Крапоткін;Кропоткин;Кропоткин балһсн;Кропоткін;كروبوتكين;کروپتکین، کراسنودار;کروپوتکن;克魯泡特金; +city::542327;Krasnokamsk;Gorad Krasnakamsk;Krasnokamsk;Krasznokamszk;ke la si nuo ka mu si ke;krasnwkamsk;Горад Краснакамск;Краснокамск;كراسنوكامسك;کراسنوکامسک;克拉斯諾卡姆斯克; +city::542374;Krasnogorsk;Ban'ki;Ban’ki;Krasnogors'k;Krasnogorsk;Krasnogorsk i Moskva oblast;Krasnogorska;Krasnoqorsk;ke la si nuo ge er si ke;keulaseunogoleuseukeu;krasnwghwrsk;krasnwgwrsk;krasnwgwrsk mskw;kurasunogorusuku;Красногорск;Красногорск балһсн;Красногорськ;كراسنوغورسك;کراسنوگورسک;کراسنوگورسک، مسکو;クラスノゴルスク;克拉斯諾戈爾斯克;크라스노고르스크; +city::542420;Krasnodar;Ekaterinodar;KRR;Krasnodar;Krasnodara;Yekaterinodar;ke la si nuo da er;keulaseunodaleu;kurasunodaru;qrsnwdr;Краснодар;קרסנודר;クラスノダル;克拉斯诺达尔;크라스노다르; +city::543460;Kovrov;Gorad Kaurou;Kovrov;Kovrova;Kovrovas;Kowrow;kawrww;ke fu luo fu;kobeulopeu;kovurofu;kwfrwf;kwwrwf;Горад Каўроў;Ковров;كوفروف;کاوروو;کووروف;コヴロフ;科夫罗夫;코브로프; +city::543704;Kotlas;Gorad Kotlas;KSZ;Kotlas;Kotlass;Kotlasz;Kotłas;ke te la si;koteullaseu;kotorasu;kwtlas;Горад Котлас;Котлас;كوتلاس;کوتلاس;コトラス;科特拉斯;코틀라스; +city::543878;Kostroma;Costroma;Gorad Kastrama;KMW;Kostrom;Kostroma;Kostromna;Kostromà;Kostromá;Kosztroma;ke si te luo ma;koseuteuloma;kosutoroma;kwstrwma;qwstrwmh;Горад Кастрама;Кострома;Կոստրոմա;קוסטרומה;كوستروما;کوستروما;კოსტრომა;コストロマ;科斯特羅馬;코스트로마; +city::546105;Kolpino;Gorad Kolpina;Koljpino;Kolpina;Kolpinas;Kolpino;Kolppina;Kołpino;ke er pi nuo;kolpino;kwlbynw;kwlpynw;Горад Колпіна;Колпино;كولبينو;کولپینو;კოლპინო;科爾皮諾;콜피노; +city::546230;Kolomna;Columna;Gorad Kalomna;Kolom'na;Kolomna;Kolomnae;Kolomno;Kołomna;ke luo mu na;kollomna;koromuna;kwlwmna;qwlwmnh;Горад Каломна;Коломнæ;Коломна;Коломна балһсн;Коломно;Коломьна;Կոլոմնա;קולומנה;كولومنا;کولومنا;コロムナ;科洛姆纳;콜롬나; +city::547475;Klintsy;Gorad Klincy;Klincad;Klince;Klinci;Klincy;Klinti;Klintsi;Klintso;Klintsy;Klintsõ;Klinzy;Klințî;Klińce;Kļinci;ke lin qi;keullinchi;klntsy;klyntsy;kurintsu~i;qlynzy;Горад Клінцы;Клинтси;Клинци;Клинцы;Клинцы балһсн;Клинці;קלינצי;كلينتسي;کلنتسی;کلینتسی;クリンツィ;克林齊;클린치; +city::547523;Klin;Gorad Klin;Klin;Klina;Kline;Kļina;Ulin;ke lin;keullin;kln;klyn;kurin;Горад Клін;Клин;Клин балһсн;كلين;کلن;کلین;クリン;克林;클린; +city::547560;Klimovsk;Gorad Klimausk;Klimovs'k;Klimovsk;Klimovska;Klimovskaj;Klimovskas;Klimovskiy;Klimowsk;Kļimovska;ke li mo fu si ke;klymwfsk;klymwwsk;kurimofusuku;Горад Клімаўск;Климовск;Климовск балһсн;Климовскай;Климовськ;كليموفسك;کلیموفسک;کلیمووسک;クリモフスク;克利莫夫斯克; +city::547840;Kizlyar;Kisljar;Kizilyar;Kizlar;Kizljar;Kizlyar;kijeullyaleu;kizljar;Кизляр;키즐랴르; +city::548114;Kislovodsk;Gorad Kislavodsk;Kislovods'k;Kislovodsk;Kislovodsk - Kislovodsk;Kislovodsk - Кисловодск;Kislovodskas;Kislowodsk;Kislowodzk;Kisslowodsk;Kisłowodzk;Nartsaneh;ji ci luo wo ci ke;kiseullobocheukeu;kisurovu~otsuku;kslwwwdsk;kyslwfwdsk;qyslwbwdsq;Горад Кіславодск;Кисловодск;Кисловодск балһсн;Кисловодськ;Нартсанэ;Կիսլովոդսկ;קיסלובודסק;كيسلوفودسك;کسلووودسک;کیسلوفودسک;キスロヴォツク;基兹洛沃茨克;키슬로보츠크; +city::548395;Kirovo-Chepetsk;Chepets;Chepetsk;Cheptsa;Gorad Kirava-Chapeck;Kirovo Chepetsk;Kirovo-Cepeck;Kirovo-Cepetsk;Kirovo-Chepec'k;Kirovo-Chepeck;Kirovo-Chepetsk;Kirovo-Chepetskiy;Kirovo-Tchepetsk;Kirovo-Tsepetsk;Kirovo-Tsjepetsk;Kirovo-Tšepetsk;Kirovo-Çepetsk;Kirovo-Ĉepeck;Kirovo-Čepeck;Kirowo-Czepieck;Kirowo-Tschepezk;Ust'-Chepetskoye;Ust'-Cheptsa;Ust’-Chepetskoye;Ust’-Cheptsa;ji luo wo-qie pei ci ke;kilobochepecheukeu;kyrwfw-chptsk;kyrwfw-tshybytsk;kyrww chpytsk;Горад Кірава-Чапецк;Кирово-Чепетск;Кирово-Чепецк;Кірово-Чепецьк;كيروفو-تشيبيتسك;کیروفو-چپتسک;کیروّو چپیتسک;基洛沃-切佩茨克;키로보체페츠크; +city::548408;Kirov;Gorad Kirau;KVX;Khlynov;Kirof;Kirov;Kirov i Kirov oblast;Kirova;Kirovas;Kirow;Kírov;Viatka;Vyatka;Wjatka;ji luo fu;kilopeu;kirofu;kirova;kyrwf;kyrwf kyrwf awblast;kyrww;qyrwb;Горад Кіраў;Киров;Кіров;Կիրով;קירוב;كيروف;کیروف;کیروف، کیروف اوبلاست;کیروو;किरोव;კიროვი;キーロフ;基洛夫;키로프; +city::548442;Kirishi;Gorad Kiryshy;Kirichi;Kirisai;Kirischi;Kirishi;Kirisi;Kirisji;Kiriszy;Kiriŝi;Kirišai;Kiriši;Kiriși;Kírishi;ji li xi;kilisi;kyryshy;Горад Кірышы;Кириши;Кіріши;كيريشي;کیریشی;კირიში;基里希;키리시; +city::548602;Kingisepp;Gorad Kingisep;Jaama;Jamburg;Juama;Kinghisepp;Kingisep;Kingisepa;Kingisepp;Kingiseppu;Kingissepp;Kinguissepp;Yamburg;jin ji xie pu;king-gisepeu;kingisepeu;kingiseppu;kynghysyb;kyngysp;kyngysyp;qyngysp;Горад Кінгісеп;Кингисеп;Кингисепп;Кингисєппъ;Кінгісепп;קינגיספ;كينغيسيب;کینگیسپ;کینگیسیپ;კინგისეპი;キンギセップ;金吉谢普;킨기세프;킹기세프; +city::548605;Kineshma;Gorad Kineshma;Kinechma;Kineixma;Kineschma;Kineshima;Kineshma;Kineshme;Kinesjma;Kinesma;Kineszma;Kineŝma;Kineşma;Kinešma;Kineșma;Kiněšma;Kíneixma;Kíneshma;ji nie shen ma;kineshima;kinesima;kinesyuma;kynshma;kynyshma;Горад Кінешма;Кинешма;Кинешме;Киңәшмә;Кінешма;كينيشما;کینشما;کینیشما;キネシマ;基涅什马;키네슈마;키네시마; +city::548652;Kimry;Gorad Kimry;Kimrai;Kimri;Kimro;Kimry;Kimrî;Kimrõ;Kimrı;ji mu lei;kimli;kimuru~i;kymry;Горад Кімры;Кимри;Кимры;Кімри;كيمري;کیمری;キームルィ;基姆雷;킴리; +city::550280;Khimki;Chimkai;Chimki;Gorad Khimki;Himki;Jimki;Khimki;Moskau-Chimki;Ximki;himki;himuki;hymqy;khymky;xi mu ji;Ĥimki;Горад Хімкі;Химки;Химки балһсн;Хімки;Խիմկի;חימקי;خيمكي;خیمکی;ヒムキ;希姆基;힘키; +city::550478;Khasavyurt;Chassaw-Jurt;Hasavjurt;Khasav;Khasav-jurt;Khasavjurt;Khasavyurt;Staro Khasav-Yurt;Xasavyurt;Хасав;Хасав-юрт;Хасавюрт; +city::551487;Kazan;Casanum;Caza;Cazã;Gorad Kazan';KZN;Kaasan;Kasa;Kasan;Kasã;Kazan;Kazan';Kazan' osh;Kazana;Kazane;Kazani;Kazanj;Kazano;Kazanė;Kazan’;Kazań;Kazaņa;Kazaň;Kazán;Khuazan;Khusan;Kozan';Kuazan;Kuzon;Qazan;Qozon;ka shan;kajan;kajhana;kazan;kazana;kha san;qazan;Καζάν;Горад Казань;Казан;Казань;Казань ош;Казањ;Каꙁанъ;Козань;Кузон;Къазан;Озаҥ;Хусан;Хъазан;Қазан;Ҡazan;Ҡазан;Կազան;קאזאן;قازان;كازان;کازان;कझान;काज़ान;คาซาน;ყაზანი;カザン;喀山;카잔; +city::551847;Kaspiysk;Dvigatel'stroy;Dvigatel’stroy;Kaspijsk;Kaspiysk;Sotsgorod;kaseupiseukeu;Каспийск;카스피스크; +city::553287;Kamyshin;Gorad Kamyshyn;Kamishin;Kamisin;Kamixin;Kamiŝin;Kamišin;Kamosin;Kamychine;Kamyschin;Kamyshin;Kamysin;Kamysinas;Kamysjin;Kamyszyn;Kamyšin;Kamyšinas;Kamîșin;Kamõšin;ka mei shen;kamisin;kamuishin;kamyshn;kamyshyn;Горад Камышын;Камишин;Камышин;Камышин балһсн;Կամիշին;كاميشين;کامیشن;کامیشین;カムイシン;卡梅申;카미신; +city::553399;Kamensk-Shakhtinskiy;Kamensk;Kamensk Shakhtinski;Kamensk-Schachtinskij;Kamensk-Schachtiuski;Kamensk-Shakhtinskij;Kamensk-Shakhtinskiy;Kamenskaya;Каменск;Каменск-Шахтинский; +city::553915;Kaluga;Caluga;Gorad Kaluga;KLF;Kaloega;Kalouga;Kalug;Kaluga;Kalugae;Kalugo;Kaluqa;Kalyga;Kaługa;ka lu jia;kalluga;kaluga;kalwga;kalwgha;karuga;klwga;qlwgh;Горад Калуга;Калугæ;Калуга;Калуго;Կալուգա;קלוגה;كالوغا;کالوگا;کلوگا;कालुगा;ಕಲೂಗಾ;カルーガ;卡盧加;칼루가; +city::554233;Korolev;Kaliningrad;Kalininskiy;Korolev;Koroljov;Королев;Королёв; +city::554234;Kaliningrad;Calininopolis;Gorad Kaliningrad;KGD;Kalinin'nkrant;Kaliningrad;Kaliningrada;Kaliningradas;Kaliningrado;Kaliningradum;Kaliningrau;Kaliningráu;Kalininqrad;Kalinjingrad;Kalinyingrad;Kalinyingrád;Kalińingrad;Kalíníngrad;Karaliaucios;Karaliaucius;Karaliaučios;Karaliaučius;Kaļiņingrada;Kenisberg;Koenigsbarg;Koenigsberg;Koenigsberg in Preussen;Korigsberg;Krolewiec;Królewiec;Kënisberg;Königsbarg;Königsberg;Königsberg in Preußen;Körigsberg;jia li ning ge lei;kalininagrada;kalliningeuladeu;kalynynghrad;kalynyngrad;kariningurado;qlynyngrd;Καλίνινγκραντ;Горад Калінінград;Калининград;Калињинград;Калінінград;Կալինինգրադ;קלינינגרד;كالينينغراد;کالیننگراڈ;کالینینگراد;کیلننگراڈ;कालिनिनग्राद;ಕಲಿನಿನ್‍ಗ್ರಾಡ್;კალინინგრადი;カリーニングラード;加里寧格勒;칼리닌그라드; +city::554840;Izhevsk;Gorad Izhehusk;IJK;Ijevsk;Ischewsk;Ishewsk;Izevsk;Izevska;Izevskas;Izewsk;Izh;Izhau;Izhevs'k;Izhevsk;Izhkar;Izjefsk;Izjevsk;Izsevszk;Iĵevsk;Iżewsk;Iževsk;Iževska;Iževskas;Ustinov;ayjyfsk;ayzhwsk;azwsk;ijebseukeu;ijefusuku;yi re fu si ke;İjevsk;ʼyzbsq;Ιζέβσκ;Іжевськ;Горад Іжэўск;Иж;Ижау;Ижевск;Ижкар;איזבסק;إيجيفسك;ازوسک;ایژوسک;იჟევსკი;イジェフスク;伊熱夫斯克;이젭스크; +city::555111;Ivanteyevka;Ivanteevka;Ivantejevka;Ivanteyevka;Ivanteyevskiy;Ивантеевка; +city::555312;Ivanovo;Gorad Ivanava;IWA;Ivanova;Ivanovas;Ivanovo;Ivanovo shaary;Ivanovo-Voznesensk;Ivànovo;Ivánovo;Iwanowo;ayfanwfw;aywanwfw;aywanww;ibanobo;ivu~anovu~o;xi wa no wo;yi wan nuo wo;İvanovo;ʼywwʼnwbw;Іваново;Горад Іванава;Иваново;Иваново шаары;Իվանովո;איוואנובו;إيفانوفو;ایوانوفو;ایوانوو;อีวาโนโว;イヴァノヴォ;伊万诺沃;이바노보; +city::555980;Ishimbay;Isembai;Ishimbaj;Ishimbay;Isimbai;Isimbaj;Iszymbaj;Iŝimbaj;Išembai;Išimbai;Išimbaj;isimbai;Ишимбай;Ишимбај;이심바이; +city::557775;Gus'-Khrustal'nyy;Gus'-Khrustal'ny;Gus'-Khrustal'nyj;Gus'-Khrustal'nyy;Gus-Hrustalnyi;Gus-Khrustalnyi;Gus-Khrustalnyj;Gus’-Khrustal’ny;Gus’-Khrustal’nyy;Гусь-Хрустальный; +city::558082;Gukovo;Gukova;Gukovo;Gukowo;Гуково; +city::558146;Gubkin;Gorad Gubkin;Goubkine;Gubkin;Gupkin;Qubkin;Rabochiy Poselok Imeni Gubkina;ghwbkyn;gu bu jin;gubkin;gwbkyn;gwbnk;Горад Губкін;Губкин;Губкін;Гупкин;غوبكين;گوبنک;گوبکین;古布金;굽킨; +city::558418;Groznyy;Dzhokhar;Dzhokhar-Gala;Dzhokhar-Geala;Dzhokhar-Ghala;Dzhokhargala;Dzhovkhar-GӀala;Dzohar;Dzohhar;Džohar;Džohhar;Dƶohargala;Dƶoxar;GRV;Grosni;Grosnij;Grosny;Grosnyi;Grosnyj;Grosní;Grosnî;Groznai;Groznas;Grozni;Groznii;Grozno;Groznoi;Grozny;Groznyi;Groznyj;Groznyy;Groznâi;Groznîi;Groznõi;Grózni;Nasongi;Nkrozny;Novyj Hutor;So'lzh-GIala;So'lzha-GIala;So'lzha-GӀala;Soelz-Ghala;Soelƶ-Gala;Soelƶa-Gala;Sölž-Ghala;Sölƶ-Ġala;Sölƶa-Ġala;geulojeuni;grozno;grwzny;gurozunui;Ƶovhar-Gala;Ƶovhar-Ġala;Γκρόζνυ;Грозни;Грозный;Джовхар-ГӀала;Джохар;Джохаргала;Соьлж-ГІала;Соьлжа-ГІала;Соьлжа-ГӀала;גרוזני;გროზნო;グロズヌイ;그로즈니; +city::561347;Glazov;Glasow;Glaz;Glazov;Glazovas;Glazow;Glázov;Gorad Glazau;Głazow;ge la zuo fu;geullajopeu;glazwf;gurazofu;jlazwf;Глаз;Глазов;Горад Глазаў;جلازوف;گلازوف;グラゾフ;格拉佐夫;글라조프; +city::561627;Georgiyevsk;Georgievsk;Georgiewsk;Georgijevsk;Georgijewsk;Georgiyevsk;Георгиевск; +city::561667;Gelendzhik;GDZ;Gelendjik;Gelendschik;Gelendshik;Gelendzhik;Gelendzik;Gelendzjik;Gelendzyk;Gelendĵik;Gelendżyk;Gelendžik;Gelenjir;Gelenzhik;Gelyendzhik;Ghelenjik;Gorad Gelendzhyk;Guelendjik;Gyelyendzhik;Khyluehzh'yj;Nkelentzik;Qelencik;ge lian ji ke;gellenjikeu;gerenjiku;ghylynjyk;gln dzhyk;glndzhyk;Γκελεντζίκ;Геленджик;Геленџик;Горад Геленджык;Хылъэжьый;غيلينجيك;گلن دژیک;گلندژیک;ゲレンジーク;格連吉克;겔렌지크; +city::561887;Gatchina;Gatchina;Gatcina;Gatcsina;Gatczyna;Gatschina;Gatsjina;Gattjina;Gattschina;Gattsina;Gattsjina;Gattšina;Gatçina;Gatĉina;Gatčina;Gorad Gatchyna;Gátchina;Hatcina;Hatsina;Hatčina;Krasnogvardeysk;Krasnogwardeisk;Nkatsina;gachina;gatchina;gatchyna;ghattshyna;jia te qi na;Γκάτσινα;Гатчина;Горад Гатчына;غاتتشينا;گاتچینا;გატჩინა;ガッチナ;加特契纳;가치나; +city::562319;Fryazino;Frjasino;Frjazino;Fryazino;Фрязино; +city::562321;Fryazevo;Frjazevo;Fryazevo;Фрязево; +city::563379;Ezhva;Ehzhva;Ezhva;Ezjva;Sloboda;Эжва; +city::563464;Engel's;Ehngel's;Engel's;Engels;Engels an der Wolga;Engel’s;Pokrovsk;Pokrovskaya;Энгельс; +city::563514;Elista;ESL;Ehlista;Ehlst;Elist;Elista;Elistà;Elistá;Eliszta;Elst;Gorad Ehlista;Stepnoi;Stepnoy;ai li si ta;alysta;aylysta;erisuta;yelliseuta;Ėlista;Ελίστα;Горад Эліста;Елиста;Еліста;Элиста;Элст;Элст балһсн;Элһэтэ;אליסטה;إيليستا;الیستا;ایلیستا;エリスタ;埃利斯塔;옐리스타; +city::563523;Elektrostal';Ehlektrostal';Elektrostal;Elektrostal';Elektrostalj;Elektrostal’;yellegteuloseutal;Электросталь;옐렉트로스탈; +city::563708;Dzerzhinsk;Chernorech'ye;Chernorech’ye;Chernoye;Dserschinsk;Dzerhinsh;Dzerjinsk;Dzerzhins'k;Dzerzhinsk;Dzerzinsk;Dzerzinska;Dzerzinskas;Dzerzjinsk;Dzerĵinsk;Dzeržinsk;Dzeržinska;Dzeržinskas;Dzierzynsk;Dzierżyńsk;Dzjarzhynsk;Rastyapino;[dʲzʲɪrˈʐɨnsk];d seiyr cinskh;dzrzhynsk;dzyrjynsk;dzyrzhnsk;jeleujinseukeu;jerujinsuku;jie er ren si ke;Дзержинск;Дзержинськ;Дзяржынск;دزرژینسک;دزيرجينسك;دزیرژنسک;ดเซียร์จินสค์;ジェルジンスク;捷尔任斯克;제르진스크; +city::564719;Dubna;Doebna;Doubna;Dubna;Dubno;Dubnà;Dubná;Gorad Dubna;do~ubuna;du bu na;dub na;dubeuna;dubna;dwbna;dwbnh;Горад Дубна;Дубна;Дубна балһсн;דובנה;دوبنا;ดุบนา;ドゥブナ;杜布纳;두브나; +city::565348;Donetsk;Donec'k;Doneck;Donecka;Donetk;Donets'k;Donetsk;Donetsk i Russland;Donets’k;Donezk;Donețk;Donieck;Donjeck;Doněck;Doņecka;Gorad Daneck;Gunderovskaya;Gundorovka;Gundorovskaya;Gundurovka;donecheukeu;dun nie ci ke;dwntsk;dwntsk rwsyh;Горад Данецк;Донецк;Донецк балһсн;Донецьк;Доњецк;دونتسک;دونتسک، روسیه;頓涅茨克;도네츠크; +city::565381;Domodedovo;Domodedova;Domodedovas;Domodedovo;Domodedowo;Domodiedowo;Domodédovo;Domodědovo;Gorad Damadzedava;domodedobo;domojedovu~o;duo mo jie duo wo;dwmwddwfw;dwmwdydwfw;dwmwdydww;Горад Дамадзедава;Домодедово;Домодедово балһсн;Домодєдово;دوموددوفو;دوموديدوفو;دومودیدوو;ドモジェドヴォ;多莫傑多沃;도모데도보; +city::565614;Dolgoprudnyy;Dolgoprodnyy;Dolgoprudnyi;Dolgoprudnyj;Dolgoprudnyy;Dolgoprudyy;Долгопрудный; +city::565955;Dmitrov;Demitriovia;Dmitrov;Dmitrow;Dmítrov;Gorad Dzmitrau;de mi te luo fu;deumiteulopeu;dmitrov;dmtrwf;dmytrwf;domitorofu;dymytrwf;Горад Дзмітраў;Дмитров;Дмитров балһсн;دمتروف;دميتروف;دیمیتروف;ドミトロフ;德米特罗夫;드미트로프; +city::566199;Dimitrovgrad;Dimitrovgrad;Dimitrovgrad i Russland;Dimitrovgradas;Dimitrovqrad;Dimitrowgrad;Gorad Dzimitraugrad;Melekes;Melekess;Mitreen' osh;dimiteulobeugeuladeu;dimitorofugurado;dymytrwfghrad;dymytrwfgrad rwsyh;dymytrwwgrad;ji mi te luo fu ge lei;Горад Дзімітраўград;Димитровград;Мелекес;Митреень ош;Мәләкәс;ديميتروفغراد;دیمیتروفگراد، روسیه;دیمیترووگراد;ディミトロフグラード;季米特洛夫格勒;디미트로브그라드; +city::566532;Derbent;Cali;Chjali;Darband;Darbant;Derbend;Derbent;Derbenta;Derbentas;Derbente;Derbentum;Dərbənd;Gorad Dzerbent;K'vevar;Temyrkualeh;deleubenteu;derubento;drbnd;drbnt;jie er bin te;Горад Дзербент;Дарбант;Дербенд;Дербент;Дербент балһсн;Дәрбәнт;Кьвевар;Темыркъалэ;Цали;Чяли;Դերբենդ;דרבנט;دربند;დერბენტი;デルベント;傑爾賓特;데르벤트; +city::567434;Chusovoy;Chusovaya;Chusovij;Chusovoi;Chusovoj;Chusovoy;Chusovói;Chusva;Ciusovoi;Csuszovoj;Cusovoi;Cusovoj;Cusovoy;Cusowoj;Czusowoj;Gorad Chusavoj;Tchoussovoi;Tchoussovoï;Tchussovoi;Tjusovoj;Tschussowoi;Tsjoesovoj;Tsjusovoj;Tsusovoi;Tšusovoi;Zavod Chusovskoye;chwswfwy;chwswwwyy;qiu suo wo yi;tshwswfwy;Çusovoy;Ĉusovoj;Čusovoi;Čusovoj;Čusowoj;Горад Чусавой;Чусва;Чусовий;Чусовой;Чусовој;تشوسوفوي;چوسوفوی;چوسوووئی;丘索沃伊; +city::567990;Chistopol';Chistaj;Chistopol';Chistopol’;Tsistopol;Tsjistopol;Tšistopol;Чистай;Чистополь; +city::569154;Cherkessk;Batalpashinsk;Cerkesk;Cerkessk;Cherkes kuala;Cherkessk;Cherkessk shakhar;Czerkiesk;Shehrdzhehs kualeh;Sherkesh shakhar;Tscherkessk;Tserkessk;Tsjerkessk;Tšerkessk;Yezhovo-Cherkessk;Zhezhoro-Cherkessk;cheleukeseukeu;cherukesuku;zrqsq;Ĉerkessk;Čerkesk;Черкес къала;Черкесск;Черкесск шахар;Шеркеш шахар;Шэрджэс къалэ;צרקסק;チェルケスク;체르케스크; +city::569223;Cherepovets;CEE;Cerepovec;Cerepoveca;Cerepovecas;Cerepoveco;Cerepovet;Cerepovets;Cerepoveț;Cerjepowjec;Cherepovec;Cherepovec';Cherepovets;Cherepovetz;Cherepovéts;Cserepovec;Czerepowiec;Gorad Charapavec;Tcherepovets;Tjerepovets;Tscherepowez;Tserepovets;Tsjerepovets;Txerepovets;Tšerepovets;chelepobecheu;cherepovu~etsu;chrpwwts;chyrypwwts;qie lie bo wei ci;tshyrybwfyts;Çerepovets;Ĉerepoveco;Čerepovec;Čerepoveca;Čerepovecas;Čerjepowjec;Горад Чарапавец;Череповетс;Череповец;Череповець;تشيريبوفيتس;چرپووتس;چیریپووتس;チェレポヴェツ;切列波韋茨;체레포베츠; +city::569273;Cheremushki;Cheremushki;Cherjomushki;Cherëmushki;Черёмушки; +city::569591;Chekhov;Cechov;Cehov;Cehova;Cexov;Chejov;Chekhov;Chéjov;Czechow;Gorad Chehkhau;Lopasnya;Tchekhov;Tjechov;Tschechow;Tsehhov;Tsehov;Tsjekhov;Tsjekhov i Moskva oblast;Tšehhov;Tšehov;chehofu;chehopeu;chkhwf astan mskw;chykhwf;qi he fu;tshykhwf;Çexov;Ĉeĥov;Čechov;Čehov;Čehova;Горад Чэхаў;Чехов;تشيخوف;چخوف، استان مسکو;چیخوف;チェーホフ;契訶夫;체호프; +city::569696;Cheboksary;CSY;Ceboksarad;Ceboksarai;Ceboksari;Ceboksary;Ceboksarî;Chabaksar;Cheboksar;Cheboksar';Cheboksara;Cheboksari;Cheboksary;Cheboksar’;Choupachkar;Csebokszari;Csebokszári;Czeboksary;Gorad Chehbaksary;Shoupashkaru;Shovakshehҥer;Shubashkar;Shupashkar;Shyvashar;Supaskar;Tcheboksary;Tjeboksary;Tscheboksary;Tscheboxari;Tseboksaro;Tseboksary;Tsjeboksari;Tsjeboksary;Txeboksari;Txeboksary;Tšeboksary;Tšeboksarõ;chebogsali;cheboksari;chebokusaru;chybwksary;qie bo ke sa lei;tshybwksary;zbwqsry;Çeboksarı;Ĉeboksari;Čeboksarad;Čeboksarai;Čeboksari;Čeboksary;Şupaşkar;Горад Чэбаксары;Чабаксар;Чебоксар;Чебоксара;Чебоксари;Чебоксары;Шовакшэҥер;Шоупашкаръ;Шубашкар;Шупашкар;Шывашар;Չեբոքսարի;צבוקסרי;تشيبوكساري;چاباق‌سر;چیبوکساری;چیبوکسارے;ჩებოქსარი;チェボクサル;切博克萨雷;체복사리; +city::569742;Chaykovskiy;Chajkovskij;Chaykovskiy;Tsaikovski;Tsjajkovskij;Tšaikovski;Чайковский; +city::569955;Chapayevsk;Capaevsk;Capajevsk;Capajewsk;Ceapaievsk;Chapaevs'k;Chapaevsk;Chapajevsk;Chapayevsk;Chapáyevsk;Czapajewsk;Gorad Chapaeusk;Ivashchenkovo;Tchapaievsk;Tchapaïevsk;Tjapajevsk;Trotsk;Tsapajevsk;Tschapajewsk;Tsjapajevsk;Tšapajevsk;chapayebseukeu;chapayfsk;chpayywsk;qia pa ye fu si ke;tshabayyfsk;Ĉapajevsk;Čapaevsk;Čapajewsk;Горад Чапаеўск;Чапаевск;Чапаєвськ;Чапајевск;تشاباييفسك;چاپایفسک;چپائیوسک;恰帕耶夫斯克;차파옙스크; +city::570427;Buzuluk;Bouzoulouk;Bozaulyk;Busuluk;Buzuluk;Buzulukas;Buzułuk;Gorad Buzuluk;bu zu lu ke;bujullukeu;bwzwlwk;Бозаулык;Бузулук;Быҙаулыҡ;Горад Бузулук;بوزولوك;بوزولوک;布祖盧克;부줄루크; +city::570479;Buynaksk;Boejnaksk;Buinaksk;Bujnakh"sk;Bujnaksk;Buynaksk;Temir Khan Choura;Temir-Khan-Shura;bu-inagseukeu;Буйнакск;Буйнахъск;부이낙스크; +city::571159;Buguruslan;Bogoroslan;Bogyryslan;Bougourouslan;Bugurslan;Buguruslan;Buguruslanas;Buguruslano;Buguruslán;Buguruszlan;Bugurusłan;Buquruslan;Gorad Buguruslan;bu gu lu si lan;buguluseullan;bwghwrwslan;bwgwrwslan;Богырыслан;Боғорослан;Бугурслан;Бугуруслан;Горад Бугуруслан;بوغوروسلان;بوگوروسلان;布古魯斯蘭;부구루슬란; +city::571170;Bugul'ma;Bugul'ma;Bugulina;Bugulma;Bugul’ma;Bөgelmə;UUA;Бугульма;Бөгелмә; +city::571306;Budennovsk;Budennovsk;Budennowsk;Budenovsk;Budjennowsk;Budjonnovsk;Budyonovsk;Budënnovsk;Karabagly;Prikumsk;Svetaya Kresta;Svyatoy Krest;Буденновск;Будённовск; +city::571476;Bryansk;BZK;Breansk;Briansk;Briańsk;Brjansk;Brjansko;Bryansk;beulyanseukeu;Брянск;Брјанск;브랸스크; +city::572154;Borovichi;Borovichi;Borovichí;Borovici;Boroviciai;Borovitchi;Borovitji;Borovitsi;Borovitsji;Borovitši;Boroviçi;Boroviĉi;Boroviči;Borovičiai;Borowicze;Borowitschi;Gorad Baravichy;bo luo wei qi;bolobichi;borovu~ichi;bwrwfytshy;bwrwwychy;Боровичи;Боровичі;Горад Баравічы;بوروفيتشي;بوروویچی;ボロヴィチ;博羅維奇;보로비치; +city::572525;Borisoglebsk;Borisoglebs'k;Borisoglebsk;Borisoglebska;Borisoglebskas;Borisogļebska;Borisoqlebsk;Borissoglebsk;Borysoglebsk;Gorad Barysaglebsk;bao li suo ge lie bu si ke;bolisogeullebseukeu;bwryswghlybsk;bwryswglbsk;bwryswglybsk;Борисоглебск;Борисоглебск балһсн;Борисоглєбськ;Горад Барысаглебск;بوريسوغليبسك;بوریسوگلبسک;بوریسوگلیبسک;鲍里索格列布斯克;보리소글렙스크; +city::572665;Bor;Bor;Bor i Nizjegorod oblast;Boras;Gorad Bor;Motavka;bo er;boleu;bwr;bwr astan nyzhny nwwgwrwd;Бор;Горад Бор;بور;بور، استان نیژنی نووگورود;博爾;보르; +city::576432;Bibirevo;Bibirevo;Бибирево; +city::577206;Berezniki;Beresniki;Bereznikai;Berezniki;Bereznikí;Bereznyiki;Berezņiki;Bieriezniki;Bjerezniki;Gorad Bjarehzniki;Kydzzakar;Usol'ye-Solikamskoye;Usol’ye-Solikamskoye;belejeuniki;berezuniki;bie lie ci ni ji;bryznyky;brznyky;byryznyky;Березники;Березњики;Горад Бярэзнікі;Кыдззакар;برزنیکی;بریزنیکی;بيريزنيكي;ベレズニキ;别列兹尼基;베레즈니키; +city::577881;Beloretsk;BCX;Belorec'k;Beloreck;Beloreckas;Beloret;Beloretk;Beloretsk;Beloretskiy Zavod;Belorezk;Belorețk;Bielorieck;Biełorieck;Bjelorjeck;Gorad Belarehck;bellolecheukeu;bie luo lie ci ke;blwrtsk;bylwrtsk;bylwrytsk;Белорет;Белорецк;Белорецк балһсн;Бєлорєцьк;Горад Беларэцк;بلورتسک;بيلوريتسك;بیلورتسک;بیلوریتسک;別洛列茨克;벨로레츠크; +city::577893;Belorechensk;Belorecensk;Belorecenskas;Belorechens'k;Belorechensk;Belorechenskaya;Beloretchensk;Beloretschensk;Beloretschenskaja;Beloretsjensk;Beloretxensk;Beloreçensk;Beloreĉensk;Belorečensk;Belorečenskas;Beloréchensk;Belorétxensk;Bieloriecziensk;Biełorieczieńsk;Gorad Belarehchansk;bie luo lie qin si ke;blwrchnsk krasnwdar;bylwrychynsk;bylwrytshynsk;Белореченск;Бєлорєченськ;Горад Беларэчанск;بلورچنسک، کراسنودار;بيلوريتشينسك;بیلوریچینسک;別洛列琴斯克; +city::578072;Belgorod;Belgorod;Belgorod shaary;Belgoroda;Belgorodas;Belgorodo;Belnkoront;Belqorod;Bielgorod;Bielogroda;Biełgorod;Bilhorod-Dnistrovskyi;Bjelgorod;Bélgorod;Bělgorod;EGO;Gorad Belgarad;belgolodeu;belgoroda;berugorodo;bie er ge luo de;blgwrwd;bylghwrwd;Μπέλγκοροντ;Белгород;Белгород балһсн;Белгород шаары;Бєлгород;Горад Белгарад;Բելգորոդ;בלגורוד;بلگورود;بيلغورود;بیلگوروڈ;बेल्गोरोद;ベルゴロド;别尔哥罗德;벨고로드; +city::578120;Belebey;Belebei;Belebej;Belebey;Belebeï;Belebéi;Bielebiej;Gorad Beljabej;Pelepej;bie lie bie yi;blby;bylyby;bylybyy;Белебей;Белебеј;Бәләбәй;Горад Белябей;Пелепей;بلبی;بيليبي;بیلیبیئ;別列別伊; +city::578740;Bataysk;Batajsk;Bataysk;Gorodovikovsk;Батайск; +city::579460;Balashov;Balachov;Balaschow;Balashov;Balashovo;Balasjov;Balasov;Balasovas;Balaszow;Balaŝov;Balaşov;Balašov;Balašovas;Bałaszow;Gorad Balashou;ba la shao fu;balashwf;Балашов;Горад Балашоў;بالاشوف;巴拉紹夫; +city::579464;Balashikha;Balachikha;Balaschicha;Balashikha;Balashikhae;Balashikhe;Balasicha;Balasiha;Balasihha;Balasixa;Balasjicha;Balasjikha;Balaszycha;Balaŝiĥa;Balaşiha;Balaşixa;Balašicha;Balašiha;Balašihha;Balașiha;Balishikha;Bałaszycha;Gorad Balashykha;ba la xi ha;balashyka;balashykha;ballasiha;barashiha;Балашихæ;Балашиха;Балашихе;Горад Балашыха;بالاشيكا;بالاشیخا;バラシハ;巴拉希哈;발라시하; +city::579492;Balakovo;BWO;Balakova;Balakovas;Balakovo;Balakowo;Bałakowo;Gorad Balakova;ba la ke wo;balakwfw;balakww;ballakobo;Балаково;Балаково балһсн;Горад Балакова;بالاكوفو;بالاکوفو;بالاکوو;巴拉科沃;발라코보; +city::579514;Novaya Balakhna;Balachna;Balahna;Balakhna;Balaĥna;Novaya Balakhna;ballaheuna;Балахна;발라흐나; +city::580054;Azov;Asoff;Asovia;Asow;Azak;Azov;Azov - Azov;Azov - Азов;Azova;Azovas;Azow;Gorad Azou;ajopeu;azofu;azwf;ya su;Азак;Азов;Азов балһсн;Горад Азоў;Ազով;אזוב;آزوف;ازوف;アゾフ;亞速;아조프; +city::580497;Astrakhan;ASF;Actarkhan;Ashhtehrkhuan;Ashttarkhan;Astarkhaan;Astiraxan;Astraca;Astracan;Astrachan;Astrachan';Astrachane;Astrachanum;Astrachanė;Astrachań;Astrachaň;Astrachán;Astracán;Astracã;Astrahan;Astrahana;Astrahano;Astrahaņa;Astrakan;Astrakhan;Astrakhan';Astrakán;Astraxan;Astraxon;Astraĥano;Asztrahan;Asztrahán;Gorad Astrakhan';Həstərxan;Həştərxan;a si te la han;aseuteulahan;astrakhan;astrakhana;astʼrakhani;asutorahan;Àstrakhan;Əsterkhan;ʼstrhn;Άστραχαν;Аçтăрхан;Астархаан;Астрахан;Астрахань;Ашттархан;Ащтэрхъан;Горад Астрахань;Әстерхан;Әәдрхн балһсн;Աստրախան;אסטרחן;آستراخان;أستراخان;استراخان;आस्त्राख़ान;आस्त्राखान;အကစထရာကနမြ;အက်စထရာကန်မြို့;ასტრახანი;アストラハン;阿斯特拉罕;아스트라한; +city::580724;Arzamas;Arsamas;Arsamassium;Arzamas;Arzamasas;Arzamass;Arzamasz;Gorad Arzamas;a er zha ma si;aleujamaseu;aruzamasu;arzamas;Арзамас;Горад Арзамас;آرزاماس;أرزاماس;ارزاماس;アルザマス;阿爾扎馬斯;아르자마스; +city::580922;Armavir;Aramir;Armavir;Armavir i Russland;Armavira;Armaviras;Armawir;Gorad Armavir;a er ma wei er;aleumabileu;armafyr;armawyr;armawyr rws;armawyr rwsyh;arumavu~iru;Армавир;Армавир балһсн;Армавір;Горад Армавір;آرماویر;آرماویر، روسیه;أرمافير;ارماویر، روس;アルマヴィル;阿爾馬維爾;아르마비르; +city::581049;Arkhangel'sk;ARH;Archangel;Archangelsk;Arhankeli;Arkangeli;Arkhangel'sk;Arkhangelsk;Arkhangel’sk;Novo-Kholmogory;Novyye Kholmogory;Архангельск; +city::581357;Apatity;Apatiitti;Apatit;Apatitad;Apatitai;Apatiti;Apatito;Apatity;Apatitî;Apatitõ;Apatitı;Apatyty;Gorad Apatyty;KVK;a pa ji te;abatyty;apachito~ui;apatiti;apatyty;Апатити;Апатиты;Горад Апатыты;آپاتیتی;أباتيتي;اپاتیتی;アパチートゥイ;阿帕季特;아파티티; +city::582182;Anapa;AAQ;Anaapa;Anap;Anapa;Anape;Gorad Anapa;a na pa;anaba;anapa;xa na pa;Ανάπα;Анаапа;Анапа;Анапа балһсн;Анапе;Горад Анапа;Անապա;آناپا;أنابا;اناپا;ਅਨਾਪਾ;อะนาปา;ანაპა;アナパ;阿纳帕;아나파; +city::582432;Al'met'yevsk;Al'met'evsk;Al'met'yevo;Al'met'yevsk;Almetjevsk;Almetyevsk;Al’met’yevo;Al’met’yevsk;Əlmət;Альметьевск;Әлмәт; +city::582750;Aleksin;Aleksin;Aleksinas;Aleksine;Alexin;Gorad Aleksin;a lie ke xin;alekasina;alksyn;allegsin;alyksn;alyksyn;arekushin;Алексин;Горад Алексін;آلکسین;أليكسين;الیکسن;ਅਲੇਕਸਿਨ;アレクシン;阿列克辛;알렉신; +city::583350;Aleksandrov;Aleksandrov;Aleksandrova;Aleksandrovas;Aleksandrovo;Aleksandrow;Aleksàndrov;Aleksándrov;Alexandrov;Alexandrow;Gorad Aljaksandrau;alaigazaindarova;alksandrwf;allegsandeulopeu;alygzndrwf wladymyr awblast;alyksandrwf;arekusandorofu;ya li shan de luo fu;Александров;Горад Аляксандраў;أليكساندروف;الکساندروف;الیکساندروف;الیگزندروف، ولادیمیر اوبلاست;ਅਲੈਗਜ਼ੈਂਡਰੋਵ;アレクサンドロフ;亞歷山德羅夫;알렉산드로프; +city::584243;Adler;Adler;Adlerskij rajon;Adlersky City District;Adlersky rajon;Adlerský rajón;District Adlerski;Distrito de Adler;Distrito de Ádler;a de lie er;Адлер;Адлерский район;阿德列爾; +city::827329;Pavlovo;Gorad Paulava;Pavlovas;Pavlovo;Pavlovo i Nizjegorod oblast;Pawlowo;Pawłowo;Pávlovo;ba fu luo wo;baflwfw;pabeullobo;pawlwf nyzhny nwwgwrwd;pawlww;Горад Паўлава;Павлово;بافلوفو;پاولوف، نیژنی نووگورود;پاولوو;巴甫洛沃;파블로보; +city::831165;Zarechnyy;Penza-19;Zarechnyj;Zarechnyy;Заречный; +city::1485439;Zarinsk;Gorad Zarynsk;Sarinsk;Zarinsk;Zarinskaja;Zarinskaya;zarynsk;zha lin si ke;Горад Зарынск;Заринск;Заринская;زارينسك;زارینسک;扎林斯克; +city::1485724;Yurga;Jurga;Yurga;yuruga;Юрга;ユルガ; +city::1486209;Yekaterinburg;Catharinoburgum;Ekaterimburgo;Ekaterinburg;Ekaterinburgo;Iekaterinbourg;Jekaterinburg;Jekaterinburga;Jekaterinburgas;Jekaterinenburg;Jekaterynburg;Jekatyerinburg;Jekatěrinburg;SVX;Sverdlovsk;Sverolovsk;Yekaterinburg;ekaterinburuku;ye ka jie lin bao;yekatelinbuleukeu;yqtrynbwrg;Єкатеринбург;Екатеринбург;Свердловск;יקטרינבורג;エカテリンブルク;葉卡捷琳堡;예카테린부르크; +city::1486910;Vorkuta;Gorad Varkuta;VKT;Vorcuta;Vorkoeta;Vorkouta;Vorkut;Vorkuta;Vorkuta karkytsh;Vorkutà;Vorkutá;Workuta;boleukuta;fwrkwta;vu~orukuta;wo er ku ta;wwrkwta;wwrqwth;Βορκουτά;Воркута;Воркута балһсн;Вӧркута;Вӧркута каркытш;Горад Варкута;Վորկուտա;וורקוטה;فوركوتا;وورکوتا;ヴォルクタ;沃尔库塔;보르쿠타; +city::1487281;Verkhnyaya Pyshma;Aukstutine Pysma;Aukštutinė Pyšma;Gorad Verkhnjaja Pyshma;Jugary Pyshma;Pyshma;Turi Pyshma;Verchniagia Pisma;Verchnjaja Pysjma;Verchnjaja Pysma;Verchnjaja Pyšma;Verhnjaja Pisma;Verhnjaja Posma;Verhnjaja Pysma;Verhnjaja Pyšma;Verhnjaja Põšma;Verkhnaja Pishma;Verkhniaia Pychma;Verkhniaïa Pychma;Verkhnja Pishma;Verkhnjaja Pishma;Verkhnjaja Pyshma;Verkhnjaja Pysjma;Verkhnyaya Pyshma;Verxnyaya Pisma;Verxnyaya Pışma;Verĥnjaja Piŝma;Werchnjaja Pyschma;Wierchniaja Pyszma;Wjerchnjaja Pysma;Wjerchnjaja Pyšma;beleuheunyayapisima;fyrkhnyaya byshma;shang pei shen ma;wrkhnyaya pyshma;wrkhnyya pyshma;Βέρχνιαγια Πησμά;Верхня Пишма;Верхняя Пишма;Верхняя Пышма;Верхњаја Пишма;Горад Верхняя Пышма;Пышма;Тури Пышмă;Югары Пышма;فيرخنيايا بيشما;ورخنیایا پیشما;ورخنییا پیشما;上佩什馬;베르흐냐야피시마; +city::1488253;Zelenogorsk;Barga;Gorad Zelenagorsk;Krasnoyarsk-45;Selenogorsk;Ust'-Barga;Ust’-Barga;Zelenogorsk;Zelenogorsk i Krasnojarsk kraj;Zielenogorsk;jellenogoleuseukeu;ze lie nuo ge er si ke;zlnwgwrsk krasnwyarsk;zlynwgwrsk;zylynwghwrsk;Горад Зеленагорск;Зеленогорск;Зељеногорск;زلنوگورسک، کراسنویارسک;زلینوگورسک;زيلينوغورسك;泽列诺戈尔斯克;젤레노고르스크; +city::1488754;Tyumen;Gorad Cjumen';TJM;Temen;Tioumen;Tiumen;Tiumene;Tiumenė;Tiumeń;Tiumén;Tjoemen;Tjumen;Tjumen';Tjumen' khot;Tjumena;Tjumenj;Tjumeno;Tjumeń;Tjumeņa;Tuemen;Tumen;Tumenum;Tyoumen;Tyumen;Tyumen';Tyumeny;Tyumen’;Tümen;chumeni;qiu ming;tyumen;tyumena;tywmn;tywmyn;Ťumeň;Горад Цюмень;Тĕмен;Тюмен;Тюмень;Тюмень хот;Тјумењ;Түмен;Түмэн;Төмән;טיומן;تيومين;تیومن;ٹیومن;त्युमेन;チュメニ;秋明;튜멘; +city::1489246;Troitsk;Gorad Troick;Troic'k;Troick;Troitk;Troitsk;Troitsk i Tsjeljabinsk oblast;Troizk;Troițk;Troïtsk;te luo yi ci ke;trwytsk;trwytsk awblast chlyabynsk;Горад Троіцк;Троицк;Троїцьк;تروئتسک;ترويتسك;ترویتسک، اوبلاست چلیابینسک;特羅伊茨克; +city::1489425;Tomsk;Gorad Tomsk;TOF;Tom'sku;Tomck;Tomium;Toms'k;Tomsk;Tomska;Tomskaj;Tomskas;Tomszk;Tomçk;tomseukeu;tomska;tomusuku;tuo mu si ke;twmsk;twmsq;Τομσκ;Горад Томск;Томск;Томскай;Томськ;Томьскъ;Տոմսկ;טומסק;تومسك;تومسک;ٹومسک;तोम्स्क;トムスク;托木斯克;톰스크; +city::1489530;Tobol'sk;TOX;Tobol'sk;Tobolsk;Tobol’sk;Тобольск; +city::1490256;Talnakh;Talnakh;Талнах; +city::1490624;Surgut;Gorad Surgut;SGC;Soergoet;Sorgyt;Sourgout;Surgut;Surguta;Surgutas;Surguto;Surgutum;Surqut;Szurgut;srgwt;su er gu te;suleuguteu;suruguto;swrghwt;swrgwt;Горад Сургут;Соргыт;Сургут;סורגוט;سرگوت;سورغوت;سورگوت;スルグト;蘇爾古特;수르구트; +city::1492517;Shadrinsk;Chadrinsk;Gorad Shadrynsk;Sadrinsk;Sadrinszk;Schadrinsk;Shadrin;Shadrins'k;Shadrinsk;Sjadrinsk;sha de lin si ke;shadrnsk;shadrnysk;shadrynsk;syadeulinseukeu;Ŝadrinsk;Šadrinsk;Șadrinsk;Горад Шадрынск;Шадрин;Шадринск;Шадринськ;شادرنسک;شادرنیسک;شادرينسك;沙德林斯克;샤드린스크; +city::1492663;Serov;Gorad Sjarou;Kabakovsk;Nadezhdinsk;Serof;Serov;Serova;Serovas;Serow;Sierow;selopeu;serofu;srwf;syrwf;syrww;xie luo fu;Σερόφ;Горад Сяроў;Серов;Сєров;سروف;سيروف;سیروو;セロフ;谢罗夫;세로프; +city::1493467;Rubtsovsk;Gorad Rubcousk;Roebtsovsk;Roubtsovsk;Rubcovs'k;Rubcovsk;Rubcovska;Rubcovskas;Rubcowsk;Rubtovsk;Rubtsovsk;Rubzowsk;Rubțovsk;Rupcovsk;Rustovsk;lu bu zuo fu si ke;lubchobseukeu;ruputsu~ofusuku;rwbtswfsk;rwbtswwsk;Горад Рубцоўск;Рубцовск;Рубцовськ;Рупцовск;روبتسوفسك;روبتسوفسک;روبتسووسک;ルプツォフスク;魯布佐夫斯克;룹촙스크; +city::1494114;Prokop'yevsk;Prokop'evsk;Prokop'yevo;Prokop'yevsk;Prokop'yevskiy;Prokopjevsk;Prokopyevsk;Prokop’yevo;Prokop’yevsk;Prokop’yevskiy;Prokoyevsk;Прокопьевск; +city::1494573;Polevskoy;Polevskoj;Polevskoy;Tolevskoy;Полевской; +city::1496153;Omsk;Gorad Omsk;OMS;Om'sku;Omby;Omium;Oms'k;Omsc;Omsk;Omska;Omskas;Omszk;Omva;amsk;awmsk;e mu si ke;omseukeu;omska;omusuku;xxm skh;Ομσκ;Горад Омск;Омбы;Омва;Омск;Омськ;Омьскъ;Օմսկ;אומסק;أومسك;امسک;اومسک;ओम्स्क;ออมสค์;ომსკი;オムスク;鄂木斯克;옴스크; +city::1496476;Nyagan;NYA;Nagin;Njagan;Njagan';Nyagan;Nyakh;Nyakhyn';Nyakhyn’;Yurty Nyagin;Нягань; +city::1496503;Noyabrsk;NOJ;Nojabr'sk;Noyabrsk;Ноябрьск; +city::1496511;Novyy Urengoy;NUX;Noviy Urengoi;Novy Urengoy;Novyj Urengoj;Novyy Urengoy;Новый Уренгой; +city::1496747;Novosibirsk;Cen Ceper;Gorad Novasibirsk;Nobosimpirsk;Novo-Nikolaevsk;Novo-Nikolaievsk;Novo-Nikolaïevsk;Novonikolaevsk;Novonikolayevsk;Novosibir;Novosibir'sku;Novosibirs'k;Novosibirscum;Novosibirsk;Novosibirska;Novosibirskaj;Novosibirskas;Novosibirsko;Novosimpirsk;Novossibirsk;Novoszibirszk;Nowosibirsk;Nowosibirski;Nowosybirsk;OVB;Odsibiren' osh;Vil' Sibirkar;no wo sibiskh;nobosibileuseukeu;novosibirsk;novosibirska;novu~oshibirusuku;nwbwsybyrsq;nwfwsybyrsk;nwwsybrsk;nwwsybyrsk;xin xi bo li ya;Çĕн Çĕпĕр;Νοβοσιμπίρσκ;Νοβοσιμπιρσκ;Виль Сибиркар;Горад Новасібірск;Новониколаевск;Новосибирск;Новосибирскай;Новосибирьскъ;Новосибірськ;Новосібір;Одсибирень ош;Նովոսիբիրսկ;נובוסיבירסק;نوفوسيبيرسك;نووسیبرسک;نووسیبیرسک;नोवोसिबिर्स्क;โนโวซีบีสค์;ნოვოსიბირსკი;ノヴォシビルスク;新西伯利亚;新西伯利亞;노보시비르스크; +city::1496990;Novokuznetsk;Cusnezia;Gorad Navakuzneck;Kuvnetsk;Kuznetsk;Kuznetsk-Sibirskiy;NOZ;Novokoeznetsk;Novokouznetsk;Novokusnetsk;Novokuznec'k;Novokuzneck;Novokuznecka;Novokuzneckas;Novokuznetk;Novokuznetsk;Novokuznețk;Novokuznjeck;Novokuznyeck;Novokuzněck;Novokuzņecka;Nowokoeznetsk;Nowokusnezk;Nowokuznieck;Nowokuźnieck;Stalinsk;nobokujeunecheukeu;novu~okuzunetsuku;nwbwqwznzq;nwfwkwzntsk;nwwkwzntsk;xin ku ci nie ci ke;Νοβοκουζνέτσκ;Горад Навакузнецк;Новокузнетск;Новокузнецк;Новокузнецьк;Новокузњецк;Сталинск;נובוקוזנצק;نوفوكوزنتسك;نووکوزنتسک;نووکوزنٹسک;ノヴォクズネツク;新库兹涅茨克;노보쿠즈네츠크; +city::1497173;Novoaltaysk;Chesnokovka;Chesnokovo;Chesnokovskoye;Novoaltajsk;Novoaltaysk;noboaltaiseukeu;Новоалтайск;노보알타이스크; +city::1497337;Norilsk;Gorad Naryl'sk;Noril's'k;Noril'sk;Noriljsk;Norilsk;Norilska;Norilskas;Norilsko;Norilskoe;Norilszk;Noril’sk;Noriļska;Noriľsk;Norylsk;nolilseukeu;noririsuku;nuo li er si ke;nwrlsk;nwrylsk;nwrylsq;Горад Нарыльск;Норилск;Норильск;Норильськ;Нориљск;נורילסק;نورلسک;نوريلسك;نوریلسک;ノリリスク;諾里爾斯克;노릴스크; +city::1497543;Nizhnevartovsk;Gorad Nizhnjavartausk;NJC;Nijnevartovsk;Nischnewartowsk;Nizhn'ovartovs'k;Nizhne-Vartovskaya;Nizhne-Vartovskoye;Nizhnevartovsk;Nizhnevartovskiy;Nizhnevártovsk;Nizjnevartovsk;Niznevartovsk;Niznevartovska;Niznevartovskas;Nizniewartowsk;Niĵnevartovsk;Niżniewartowsk;Nižnevartovsk;Nižnevartovskas;nijeunebaleutobseukeu;nijinevu~arutofusuku;nyjnfartwfsk;nyzhnwartwfsk;nyzhnywartwwsk;xia wa er tuo fu si ke;Ņižņevartovska;Горад Ніжнявартаўск;Нижневартовск;Нижньовартовськ;Нижњевартовск;Түбән Варта;نيجنفارتوفسك;نیژنوارتوفسک;نیژنیوارتووسک;ニジネヴァルトフスク;下瓦爾托夫斯克;니즈네바르톱스크; +city::1497917;Nefteyugansk;NFG;Neftejugansk;Nefteyugansk;Нефтеюганск; +city::1497951;Nazarovo;Gorad Nazarava;Nasarowo;Nazarovo;Nazarowo;Nazàrovo;na zha luo wo;nazarwfw;nazarwfw krasnwyarsk;Горад Назарава;Назарово;نازاروفو;نازاروفو، کراسنویارسک;納扎羅沃; +city::1498693;Minusinsk;Gorad Minusinsk;Minoesinsk;Minoussinsk;Minusinka;Minusins'k;Minusinsk;Minusinskas;Minusinsko;Minusińsk;Minussinsk;mi nu xin si ke;minushinsuku;minusinaska;minusinseukeu;mynwsnsk;mynwsynsk;Горад Мінусінск;Минусинск;Мінусинськ;مينوسينسك;مینوسنسک;مینوسینسک;মিনুসিনস্ক;ミヌシンスク;米努辛斯克;미누신스크; +city::1498894;Miass;Gorad Mias;Mias;Miasa;Miasas;Miass;Miassz;Mijas;mi a si;miaseu;miasu;myas;Горад Міас;Мейәс;Миас;Миасс;Мияс;Мијас;Міас;مياس;میاس;ミアス;米阿斯;미아스; +city::1498920;Mezhdurechensk;Gorad Mezhdurehchansk;Mejdouretchensk;Mejdurecensk;Mejdurechensk;Mejduretxensk;Mejdurétxensk;Meschduretschensk;Mezdurecensk;Mezdurecenska;Mezdurecenskas;Mezduretsensk;Mezhdurechens'k;Mezhdurechensk;Mezhduréchensk;Mezjdoeretsjensk;Mezjduretjensk;Mezjduretsjensk;Mezjduretsjensk i Kemerovo oblast;Meĵdureĉensk;Mežduretšensk;Meždurečensk;Meždurečenska;Meždurečenskas;Miezdurieczensk;Mieżdurieczensk;Ol'zheras;Ol’zheras;mei ri du lie qin si ke;mejeudulechenseukeu;mejudo~urechensuku;myjdwrychynsk;myjdwrytshynsk;mzhdwrchnsk awblast kmrww;Горад Междурэчанск;Междуреченск;Мєждурєченськ;ميجدوريتشينسك;مژدورچنسک، اوبلاست کمروو;میجدوریچینسک;メジュドゥレチェンスク;梅日杜列琴斯克;메즈두레첸스크; +city::1500607;Lesosibirsk;Gorad Lesasibirsk;Lesosibirsk;Lesosibirskas;Lessosibirsk;Lessossibirsk;Maklakova;Maklakovo;Novomaklakovo;lie suo xi bi er si ke;lswsybyrsk;lyswsybyrsk;Горад Лесасібірск;Лесосибирск;Новомаклаково;لسوسيبيرسك;لسوسیبیرسک;لیسوسیبیرسک;列索西比爾斯克; +city::1500665;Leninsk-Kuznetsky;Gorad Leninsk-Kuznecki;Kuznecko Leninskas;Leninsk Kuznecki;Leninsk Kuznetski;Leninsk Kuzniecki;Leninsk-Koeznetski;Leninsk-Kouznetski;Leninsk-Kusnezki;Leninsk-Kuzneckij;Leninsk-Kuznetki;Leninsk-Kuznetsk;Leninsk-Kuznetski;Leninsk-Kuznetskij;Leninsk-Kuznetskiy;Leninsk-Kuznetsky;Leninsk-Kuznețki;Leninska-Kuznecka;Lenińsk Kuźniecki;Léninsk-Kuznetski;lie ning si ke-ku zi nie ci ji;lnynsk-kwzntsky;lnynsk-kwzntskyy;lynnsk kwznytsky;Ļeņinska-Kuzņecka;Горад Ленінск-Кузнецкі;Ленинск-Кузнецкий;Лењинск Кузњецки;لنينسك-كوزنتسكي;لنینسک-کوزنتسکیی;لیننسک کوزنیتسکی;列寧斯克-庫茲涅茨基; +city::1500973;Kyzyl;Belotsarsk;Bielorsarsk;Chi-ch'i-erh;Chi-ch’i-erh;Gorad Kyzyl;K'en-mu-pi-ch'i-erh;KYZ;Kezelli;Khem Belder;Kizil;Kizil Khoto;Kizila;Kozol;Krasni;Krasnij;Krasny;Krasnyy;Kysyl;Kyzyl;Kyzyl Khoro;Kyzyl Khoto;Kyzyl shaary;Kyzylas;Kyzył;Këzëlli;Kîzîl;Kõzõl;Kızıl;K’en-mu-pi-ch’i-erh;Qizil;kayzl;ke zi lei;kijil;kizila;kuzuru;kyzl;kyzyl;qyzyl;Κιζίλ;Горад Кызыл;Кизил;Кызыл;Кызыл шаары;Қызыл;קיזיל;كيزيل;کائزل;کیزل;کیزیل;किज़िल;クズル;克孜勒;키질; +city::1501321;Kurgan;Gorad Kurgan;KRO;Koergan;Kourgan;Kurgan;Kurgan Pervyy;Kurgan i Kurgan oblast;Kurgana;Kurganas;Kurgano;Kurgán;Kurgāna;Kurqan;krgan;ku er gan;kuleugan;kurugan;kwrgan awblast kwrgan;kwrgan kwrgan awblast;kwrghan;Горад Курган;Курган;كورغان;کرگان;کورگان، اوبلاست کورگان;کورگان، کورگان اوبلاست;クルガン;库尔干;쿠르간; +city::1502026;Krasnoyarsk;KJA;Krasnoiarsk;Krasnojarsk;Krasnoyarsk;Krasnoïarsk;keulaseunoyaleuseukeu;Красноярск;크라스노야르스크; +city::1502061;Krasnotur'insk;Krasnotur'insk;Krasnoturinsk;Krasnotur’insk;Tur'inskiy;Tur’inskiy;Краснотурьинск; +city::1502603;Kopeysk;Kopeisk;Kopejsk;Kopeysk;Kopi;Kopiejsk;Ugolnye Kopi;Копейск; +city::1503277;Kiselevsk;Kiselevsk;Kiseljovsk;Kiselyovsk;Kiselëvsk;Kizelovsk;Киселевск;Киселёвск; +city::1503772;Khanty-Mansiysk;Chanti-Mansiisk;Chanty Mansijskas;Chanty-Mansiejsk;Chanty-Mansijsk;Chanty-Mansyjsk;Gorad Khanty-Mansijsk;HMA;Hanti-Mansiisk;Hanti-Mansijsk;Hanti-Mansiysk;Hanti-Manszijszk;Hantimansijska;Hanto-Mansiisk;Hanty-Mansijsk;Hantî-Mansiisk;Hantõ-Mansiisk;Hantı-Mansiysk;Janty-Mansisk;Jograkar;Jomvosh;Khanti-Mansijs'k;Khanti-Mansijsk;Khanti-Mansisk;Khanty Mansisk;Khanty-Mansiisk;Khanty-Mansijsk;Khanty-Mansisk;Khanty-Mansiysk;Khanty-Mansiïsk;Ostyako-Vogul'sk;Ostyako-Vogul’sk;Xanti-Mansi;Xanti-Mansiysk;Xanti-mansiysk;han te-man xi si ke;hantimansiseukeu;hnty-mnsysq;khanty mansyysk;khanty-mansysk;khanty-mansyysk;Ĥanti-Mansijsk;Ёмвош;Горад Ханты-Мансійск;Йӧгракар;Ханти-Мансийск;Ханти-Мансијск;Ханти-Мансійськ;Ханты-Мансийск;Խանտի-Մանսիյսկ;חנטי-מנסיסק;خانتي-مانسييسك;خانتی مانسیئسک;خانتی-مانسیسک;خانتی-مانسییسک;ხანტი-მანსიისკი;ハンティ・マンシースク;汉特-曼西斯克;한티만시스크; +city::1503901;Kemerovo;Gorad Kemerava;KEJ;Kemer;Kemerova;Kemerovas;Kemerovo;Kemerovo khot;Kemerowo;Kèmerovo;Kémerovo;Shcheglovsk;ke mai luo wo;kemelobo;kemerovo;kemerovu~o;kmrwf;kymyrwfw;kymyrww;qmrwbw;Горад Кемерава;Кемĕр;Кемерово;Кемерово хот;Կեմերովո;קמרובו;كيميروفو;کمروف;کیمیروو;केमेरोवो;ケメロヴォ;克麥羅沃;케메로보; +city::1504682;Kansk;Gorad Kansk;Kansk;Kanskas;Kańsk;kan si ke;kanseukeu;kansk;Горад Канск;Канск;كانسك;کانسک;坎斯克;칸스크; +city::1504826;Kamensk-Ural'skiy;Kamenisk;Kamensk;Kamensk-Ural'skij;Kamensk-Ural'skiy;Kamensk-Uralskij;Kamensk-Uralsky;Kamensk-Ural’skiy;Каменск-Уральский; +city::1505429;Iskitim;Gorad Iskicim;Iskitim;ayskytym;yi si ji ji mu;Іскітим;Горад Іскіцім;Искитим;إيسكيتيم;ایسکیتیم;伊斯基季姆; +city::1505453;Ishim;Byen Isjim;Gorad Ishym;Ichim;Ischim;Ishem;Ishim;Isim;Isjim;Iszym;Ixim;Iŝim;Išim;Ișim;ayshym;isim;yi xi mu;İşim;Ішим;Горад Ішым;Ишем;Ишим;إيشيم;ایشیم;伊希姆;이심; +city::1506271;Gorno-Altaysk;Gorno-Altaisk;Gorno-Altaiskas;Gorno-Altajsk;Gorno-Altaysk;Gorno-Altaïsk;Gorno-Ałtajsk;Gornyy Altaysk;Oirat-Tura;Oirot-Tura;Oyrot-Tura;RGK;Tuulu Altaj;Ulala;goleunoaltaiseukeu;Горно-Алтайск;Туулу Алтай;고르노알타이스크; +city::1508054;Chernogorsk;Cernogorsk;Chernogorsk;Kharatas;Tsernogorsk;Tšernogorsk;cheleunogoleuseukeu;Ĉernogorsk;Харатас;Черногорск;체르노고르스크; +city::1508291;Chelyabinsk;CEK;Celabinsk;Celabinska;Celaebinsk;Celeabinsk;Celiabinsc;Celiabinsca;Celiabinskas;Celjabinsk;Celyabinsk;Chelepi;Cheliabinsk;Cheliábinsk;Cheljaba;Cheljaba osh;Cheljabe;Cheljabi;Cheljabins'k;Cheljabinsk;Chelyabinsk;Cseljabinszk;Czelabinsk;Czelabińsk;Gorad Chaljabinsk;Tcheliabinsk;Tchelyabinsk;Tchéliabïnsk;Tjeljabinsk;Tscheljabinsk;Tseliampinsk;Tseljabinsk;Tsjeljabinsk;Tsyelyabinsk;Txeliabinsk;Txeliàbinsk;Tšeljabinsk;celiyabinska;celyabinska;che li ya bin si ke;chellyabinseukeu;cheryabinsuku;chlyabnsk;chlyabynsk;chylyabnsk;tshylyabnsk;zlyʼbynsq;Çelyabinsk;Ĉeljabinsk;Čeliabinskas;Čeljabinsk;Čeläbinsk;Čeļabinska;Čeľabinsk;Τσελιάμπινσκ;Горад Чалябінск;Силәбе;Челепи;Челяба;Челяба ош;Челябе;Челябинск;Челябі;Челябінськ;Чељабинск;Чиләбе;Чєлѣбиньскъ;Չելյաբինսկ;טשעליאבינסק;צליאבינסק;تشيليابنسك;چلیابنسک;چلیابینسک;چیلیابنسک;चेलियाबिन्स्क;चेल्याबिंस्क;চেলিয়াবিন্‌স্ক;ჩელიაბინსკი;チェリャビンスク;車里雅賓斯克;첼랴빈스크; +city::1510018;Biysk;Biejsk;Biisk;Bijs'k;Bijsk;Biscum;Bisk;Biysk;Biyusk;Mpisk;Viysk;bi si ke;biseukeu;Μπισκ;Бийск;Бійськ;比斯克;비스크; +city::1510205;Berezovskiy;Berezovskij;Berezovskiy;Berjozovskij;Berëzovskiy;Березовский;Берёзовский; +city::1510350;Berdsk;Berds'k;Berdsk;Berdskas;Berdskoye;Bierdsk;Bjerdsk;Bordsk;Gorad Berdsk;beleucheukeu;bie er ci ke;brdsk;byrdsk;Бердск;Бердськ;Горад Бердск;بردسک;بيردسك;بیردسک;別爾茨克;베르츠크; +city::1510469;Belovo;Belova;Belovas;Belovo;Belovo i Russland;Belowo;Bielowo;Biełowo;Gorad Bjalova;bellobo;bie luo wo;blwfw rwsyh;bylwfw;bylwww;Белово;Бєлово;Горад Бялова;بلوفو، روسیه;بيلوفو;بیلووو;別洛沃;벨로보; +city::1510853;Barnaul;BAX;Barnaoel;Barnaoul;Barnauel;Barnaul;Barnaul - Barnaul;Barnaul - Барнау́л;Barnaula;Barnaulas;Barnaulia;Barnauyl;Barnauł;Barnaúl;Barnaül;Gorad Barnaul;Mparnaoul;ba er nao er;baleunaul;barna'ula;barnal;barnawl;barnaywl;barunauru;Μπαρναούλ;Барнаул;Барнауыл;Горад Барнаул;Բարնաուլ;ברנאול;بارنائول;بارنال;بارناول;बर्नाउल;バルナウル;巴尔瑙尔;바르나울; +city::1511330;Asbest;Asbest;Asbest i Russland;Asbestas;Asbiest;Asmpest;Gorad Asbest;a si bie si te;asbst;asbyst;aseubeseuteu;asubesuto shi;Ασμπέστ;Асбест;Горад Асбест;Әсбест;אסבסט;آسبست;أسبيست;اسبست;اسبیست;アスベスト市;阿斯别斯特;아스베스트; +city::1511494;Anzhero-Sudzhensk;Anjero-Sudjensk;Anschero-Sudschensk;Anshero-Sudshensk;Anzero-Sudzensk;Anzherka;Anzhero-Sudzhenka;Anzhero-Sudzhensk;Anzhero-Sujensk;Anĵero-Sudĵensk;Anžero-Sudžensk;Sudzhenka;anjelosujenseukeu;Анжеро-Судженск;안제로수젠스크; +city::1512165;Achinsk;ACS;Achins'k;Achinsk;Acinsk;Acinska;Acinskas;Aczynsk;Aczyńsk;Atchinsk;Atjinsk;Atschinsk;Atsinsk;Atsjinsk;Atxinsk;Atšinsk;Açinsk;Aĉinsk;Ačinsk;Ačinska;Ačinskas;Gorad Achynsk;a qin si ke;achinseukeu;achinsuku;achynsk;akisaka;atshynsk;Àtxinsk;Áchinsk;Ачинск;Ачинськ;Горад Ачынск;آچینسک;أتشينسك;اچینسک;ਅਕਿੰਸਕ;アチンスク;阿钦斯克;아친스크; +city::1512236;Abakan;ABA;Abakan;Abakan shaary;Abakana;Abakanas;Abakanskoye;Abakán;Agban;Ampakan;Gorad Abakan;a ba kan;abakan;abakana;Αμπακάν;Абакан;Абакан шаары;Ағбан;Горад Абакан;Աբական;آباکان;أباكان;اباکان;अबाकान;ਅਬਾਕਾਨ;アバカン;阿巴坎;아바칸; +city::1536289;Snezhinsk;Cheljabinsk-70;Chelyabinsk-70;Gorad Snezhynsk;Semidesjatka;Semidesyatka;Snejinsk;Sneschinsk;Snezhins'k;Snezhinsk;Snezinsk;Snezjinsk;Sneĵinsk;Snežinsk;Sniezynsk;Snieżynsk;Sněžinsk;asnzhynsk;si nie ren si ke;snjynsk;snyzhynsk;Горад Снежынск;Семидесятка;Снежинск;Снєжинськ;Челябинск-70;اسنژینسک;سنجينسك;سنیژینسک;斯涅任斯克; +city::1538634;Ozersk;Chelyabinsk-40;Chelyabinsk-65;Ozersk;Ozjorsk;Озёрск; +city::1538635;Zheleznogorsk;Atomgrad;Devyatka;Krasnoyarsk-26;Krasnoyarsk-9;Zeleznogorsk;Zheleznogorsk;Zjeleznogorsk;Železnogorsk;Железногорск; +city::1538636;Novoural'sk;Novoural'sk;Novoural’sk;Sverdlovsk-44;Verkh-Nejvinskij;Верх-Нейвинский;Новоуральск; +city::1538637;Seversk;Gorad Seversk;Severs'k;Seversk;Severskas;Sewersk;Sewjersk;Siewiersk;Sèversk;Tomsk-7;sebeleuseukeu;sevu~erusuku;swrsk;sywrsk;xie wei er si ke;Горад Северск;Северск;Сєвєрськ;سورسک;سیورسک;セヴェルスク;謝韋爾斯克;세베르스크; +city::2013159;Yakutsk;D'okuuskaj;Jakutsk;YKS;Yakutsk;Yerkutsk;yakucheukeu;Дьокуускай;Якутск;야쿠츠크; +city::2013348;Vladivostok;Bladibostok;Gorad Uladzivastok;VVO;Vladivostok;Vladivostoka;Vladivostokas;Vladivostokium;Vlagyivosztok;Wladiwostok;Wladywostok;Władywostok;beulladiboseutokeu;fladyfwstwk;hai can wai;hai can wei;urajiosutoku;vilativostok;vladivastak;vladivostoka;w la di wx s txkh;wladywstwk;wldywwstwq;Βλαδιβοστόκ;Владивосток;Горад Уладзівасток;Վլադիվոստոկ;וולאדיוואסטאק;ולדיווסטוק;فلاديفوستوك;ولادیوستوک;ولادی‌وؤستؤک;ولادی‌وستوک;ولاڈیووسٹوک;व्लादिवोस्तॉक;व्लादिवोस्तोक;விலாடிவொஸ்டொக்;ವ್ಲಾಡಿವಾಸ್ಟಾಕ್;วลาดีวอสตอค;ვლადივოსტოკი;ウラジオストク;海参崴;海參崴;블라디보스토크; +city::2013952;Ust'-Ilimsk;UIK;Ust'-Ilimsk;Ust-Ilimsk;Ust’-Ilimsk;Усть-Илимск; +city::2014006;Ussuriysk;Lungsod ng Ussurijsk;Nikol'sk-Ussuriyskiy;Nikolaevsk-Ussuri;Nikol’sk-Ussuriyskiy;Oessoeriejsk;Ussuriisk;Ussurijsk;Ussuriysk;Ussuryjsk;Usszurijszk;Voroshilov;usuliseukeu;usurisuku;wu su li si ke;Уссурийск;ウスリースク;乌苏里斯克;우수리스크; +city::2014022;Usol'ye-Sibirskoye;Isol'ye-Sibirskoye;Isol’ye-Sibirskoye;Usel'ye-Sibirskoye;Usel’ye-Sibirskoye;Usol'e-Sibirskoe;Usol'ye;Usol'ye-Sibirskoye;Usole Sibirskoe;Usolje-Sibirskoje;Usol’ye;Usol’ye-Sibirskoye;Усолье-Сибирское; +city::2014407;Ulan-Ude;Oelan-Oede;Oulan Ounte;UUD;Ulaan-Udeh;Ulaan-Үdeh;Ulan Ude;Ulan Udė;Ulan-Ude;Ulan-Udeh;Ulan-Udè;Ulán-Udé;Ułan-Ude;Verkhne-Udinsk;Verkhneudinsk;ullan-ude;wu lan wu de;Ουλάν Ουντέ;Верхнеудинск;Улаан-Удэ;Улаан-Үдэ;Улан Уде;Улан-Удэ;אולן-אודה;ウラン・ウデ;烏蘭烏德;울란우데; +city::2014927;Tulun;Gorad Tulun;Toeloen;Touloun;Tulun;Tulunas;Tulún;tu lun;twlwn;Горад Тулун;Тулун;تولون;图伦; +city::2015833;Svobodnyy;Alekseyevsk;Svobodni;Svobodny;Svobodnyi;Svobodnyj;Svobodnyy;Свободный; +city::2019309;Neryungri;N'iruungra;Neriungri;Neriungris;Nerjoengri;Nerjungri;Neryugran;Neryungar;Neryungra;Neryungri;Nүөrүҥgүrү;nelyungeuli;Нерюнгри;Ньируунгра;Нүөрүҥгүрү;네륜그리; +city::2019528;Nakhodka;Gorad Nakhodka;Nachodka;Nahhodka;Nahodka;Nahotk;Najodka;Nakhodka;Nakhodkae;Nakhodko;Nakhotka;Naxodka;Naĥodka;na huo de ka;nahoska;nahotoka;nakhwdka;Горад Находка;Находкæ;Находка;Находко;Нахотка;ناخودكا;ناخودکا;ナホトカ;納霍德卡;나홋카; +city::2021618;Krasnokamensk;Chandacha;Chindachi;Chindachinskaya;Gorad Krasnakamensk;Krasnokamensk;Krasnokamenskas;Krasnokamiensk;Krasnokàmensk;ke la si nuo ka mian si ke;krasnwkamnsk;krasnwkamnsk srzmyn zabaykalsky;Горад Краснакаменск;Краснокаменск;كراسنوكامنسك;کراسنوکامنسک;کراسنوکامنسک، سرزمین زابایکالسکی;克拉斯諾卡緬斯克; +city::2021851;Komsomolsk-on-Amur;KXK;Komsomol's'k-na-Amuri;Komsomol'sk;Komsomol'sk-na-Amure;Komsomolsk am Amur;Komsomolsk del Amur;Komsomolsk-na-Amure;Komsomolsk-on-Amur;Komsomolsk-sur-l'Amour;Komsomol’sk;Permskoye;a mu er he pan gong qing cheng;komsomolseukeunaamule;komusomorisuku・na・amure;Комсомольск-на-Амуре;Комсомольськ-на-Амурі;コムソモリスク・ナ・アムーレ;阿穆尔河畔共青城;콤소몰스크나아무레; +city::2022890;Khabarovsk;Chabarofsk;Chabarovsk;Chabarovskas;Chabarowsk;Champarofsk;Gorad Khabarausk;Habarovsk;Habarovska;Habarovszk;Jabarovsk;Jabárovsk;KHV;Khabarovka;Khabarovs'k;Khabarovsk;Khabarovskaj;Khabàrovsk;Khbarovsk;Xabarovsk;bo li;habalobseukeu;habarofusuku;hbrwbsq;khabarovska;khabarwfsk;khabarwwsk;Ĥabarovsk;Χαμπάροφσκ;Горад Хабараўск;Хабаровск;Хабаровскай;Хабаровськ;Խաբարովսկ;חברובסק;خاباروفسك;خاباروفسک;خابارووسک;ہابروسک;खबारोव्स्क;ख़ाबारोव्स्क;ハバロフスク;伯力;하바롭스크; +city::2023469;Irkutsk;Ehrkhүү khot;Ehrkhүү khoto;Gorad Irkuck;IKT;Ircutia;Irkoetsk;Irkotsk;Irkoutsk;Irkuck;Irkutk;Irkuts'k;Irkutsc;Irkutsk;Irkutska;Irkutskaj;Irkutskas;Irkutszk;Irkuțk;Irkùck;ayrktsk;ayrkwtsk;ileukucheukeu;irakutska;irukutsuku;xir khut skh;yi er ku ci ke;İrkutsk;Ιρκούτσκ;Іркутськ;Горад Іркуцк;Иркутск;Иркутскай;Иркуцк;Эрхүү хот;Эрхүү хото;Өrket;Өркет;אירקוטסק;אירקוצק;إيركوتسك;ارکٹسک;ایرکتسک;ایرکوتسک;इरकुत्स्क;อีร์คุตสค์;ირკუტსკი;イルクーツク;伊爾庫茨克;이르쿠츠크; +city::2025339;Chita;Chita;Chitá;HTA;Tchita;Tschita;Tsita;Tsjita;Tšita;chi ta;chita;Чита;チタ;赤塔;치타; +city::2025527;Cheremkhovo;Cheremkhovo;Tseremhovo;Tsjeremkhovo;Tšeremhovo;Черемхово; +city::2026609;Blagoveshchensk;BQS;Blagovechtchensk;Blagovescensk;Blagovescenska;Blagovescenskas;Blagoveschensk;Blagovescsenszk;Blagoveshchensk;Blagoveshensk;Blagoveshhens'k;Blagoveshhensk;Blagoveshhensk shaary;Blagovesjtjensk;Blagovesjtsjensk;Blagovestsensk;Blagovesxensk;Blagovextxensk;Blagoveŝĉensk;Blagoveşçensk;Blagoveštšensk;Blagoveščensk;Blagoveščenska;Blagoveščenskas;Blagoveșcensk;Blagovjescensk;Blagovjeshchensk;Blagovješčensk;Blagovyeshchensk;Blagovéshchensk;Blagovésxensk;Blagověščensk;Blagoweschtschensk;Blagowesjtsjensk;Blagowieszczensk;Blagowjeschtschensk;Blаgоvеsjtsjеnsk;Błagowieszczeńsk;Gorad Blagaveshchansk;Hailanpao;b la ko wech chen skh;beullagobesyenseukeu;blaghwfyshtshynsk;blagwwshchnsk;blagwwyshchnsk;blagwwyshchynsk;blʼgwbsznsq;buragovu~eshichensuku;hai lan pao;Благовешенск;Благовешченск;Благовещенск;Благовещенск шаары;Благовєщенськ;Благовјешченск;Горад Благавешчанск;Բլագովեշչենսկ;בלאגובשצנסק;بلاغوفيشتشينسك;بلاگووشچنسک;بلاگوویشچنسک;بلاگوویشچینسک;บลาโกเวชเชนสค์;ბლაგოვეშჩენსკი;ブラゴヴェシチェンスク;海兰泡;海蘭泡;블라고베셴스크; +city::2026643;Birobidzhan;Birabidzhan;Birobican;Birobidjan;Birobidschan;Birobidshansk;Birobidzan;Birobidzana;Birobidzanas;Birobidzhan;Birobidzhán;Birobidzjan;Birobidzsan;Birobidżan;Birobidžan;Birobidžana;Birobidžanas;Birobigano;Birobijan;Birobiĝano;Bîrobîcan;Gorad Birabidzhan;Tikhon'kaya Stantsiya;Tikhon’kaya Stantsiya;Tikhou'kaya Stantsiya;Tikhou’kaya Stantsiya;bi luo bi zhan;bilobijan;birobijan;byrwbygn;byrwbyjan;Биробиджан;Биробиџан;Біробіджан;Горад Бірабіджан;ביראבידזשאן;בירוביגן;بيروبيجان;بیروبیجان;ビロビジャン;比罗比詹;비로비잔; +city::2026895;Belogorsk;Aleksandrovka;Aleksandrovsk;Beletorsk;Belogors'k;Belogorsk;Belogorsk i Amur oblast;Belogorskas;Beloqorsk;Bielogorsk;Biełogorsk;Gorad Belagorsk;Kuibyshevka;Kuybyshevka;Kuybyshevka-Vostochnaya;Svobodnyy-18;bellogoleuseukeu;berogorusuku;bie luo ge er si ke;blwgwrsk astan amwr;bylwghwrsk;bylwgwrsk;bylwgwrsk amwr awblast;Белогорск;Бєлогорськ;Горад Белагорск;بلوگورسک، استان آمور;بيلوغورسك;بیلوگورسک;بیلوگورسک، آمور اوبلاست;ベロゴルスク;别洛戈尔斯克;벨로고르스크; +city::2027456;Artem;Artem;Artjom;Artëm;Артем;Артём; +city::2027468;Arsen'yev;Arsen'ev;Arsen'yev;Arsenjev;Arsen’yev;Semenovka;Арсеньев; +city::2027667;Angarsk;Angars'k;Angarsk;Angarska;Angarskas;Angarskiy;Angarszk;Anqarsk;Gorad Angarsk;agarasaka;an jia er si ke;angaleuseukeu;angarsk;angarusuku;angharsk;Ангарск;Ангарськ;Горад Ангарск;آنگارسک;أنغارسك;انگارسک;ਅੰਗਾਰਸਕ;アンガルスク;安加尔斯克;안가르스크; +city::2051523;Bratsk;BTK;Brack;Brats'k;Bratsk;Bratska;Bratskas;Gorad Brack;beulacheukeu;bratsk;bu la ci ke;buratsuku;Братск;Братськ;Горад Брацк;براتسك;براتسک;ブラーツク;布拉茨克;브라츠크; +city::2119441;Yuzhno-Sakhalinsk;Gorad Juzhna-Sakhalinsk;Ioujno-Sakhalinsk;Iujno-Sahalinsk;Iujno-Sakhalinsk;Joezjno-Sachalinsk;Jujno-Sahalinsk;Juschno-Sachalinsk;Juzhno-Sakhalins'k;Juzhno-Sakhalinsk;Juzhnosakhalinsk;Juzjno-Sachalinsk;Juzjno-Sakhalinsk;Juzno Sachalinskas;Juzno-Sachalinsk;Juzno-Sahalinsk;Juzno-Sahhalinsk;Juznosachalinsk;Juznosahalinska;Juzsno-Szahalinszk;Juĵno-Saĥalinsk;Jużnosachalińsk;Južno Sachalinskas;Južno-Sachalinsk;Južno-Sahalinsk;Južno-Sahhalinsk;Južnosahaļinska;Suvisahalinsk;Toekhara;Toyohara;Toyokhara;Toëkhara;UUS;Urajimirofuka;Yujno-Sahalinsk;Yujno-Saxalinsk;Yuzhno-Sajalinsk;Yuzhno-Sakhalinsk;nan sa ha lin si ke;yujeunosahallinseukeu;yujhno-sakhalinska;yujinosaharinsuku;ywjnw-sakhalynsk;ywzhnw-sakhalynsk;ywzhnw-skhalnsk;ywzhnwskhalynsk;ywznw-shlynsq;Јужно-Сахалинск;Горад Южна-Сахалінск;Южно-Сахалинск;Южно-Сахалінськ;Южносахалинск;יוזנו-סחלינסק;يوجنو-ساخالينسك;یوژنو-ساخالینسک;یوژنو-سخالنسک;یوژنوسخالینسک;युझ्नो-साखालिन्स्क;ユジノサハリンスク;南萨哈林斯克;유즈노사할린스크; +city::2122104;Petropavlovsk-Kamchatsky;Gorad Petrapaulausk-Kamchacki;Kamchatkataagy Petropavlovskaj;Kamciatkos Petropavlovskas;Kamčiatkos Petropavlovskas;PKC;Petropaulovscum Camtschaticum;Petropavlofsk Kamtsatski;Petropavlovs'k-Kamchats'kij;Petropavlovsk;Petropavlovsk Kamcatkal;Petropavlovsk Kamcatski;Petropavlovsk Kamchatski;Petropavlovsk Kamchatsky;Petropavlovsk Kamciatki;Petropavlovsk Kamciațki;Petropavlovsk Kamčatkal;Petropavlovsk Kamčatski;Petropavlovsk-Kamcatski;Petropavlovsk-Kamcatskij;Petropavlovsk-Kamchatkari;Petropavlovsk-Kamchatski;Petropavlovsk-Kamchatskij;Petropavlovsk-Kamchatskiy;Petropavlovsk-Kamchatsky;Petropavlovsk-Kamtchatski;Petropavlovsk-Kamtjatskij;Petropavlovsk-Kamtsatski;Petropavlovsk-Kamtsjatski;Petropavlovsk-Kamtsjatskij;Petropavlovsk-Kamtxatski;Petropavlovsk-Kamtšatski;Petropavlovsk-Kamçatski;Petropavlovsk-Kamĉatskij;Petropavlovsk-Kamčatski;Petropavlovsk-Kamčatskij;Petropavlovska-Kamcatska;Petropavlovska-Kamčatska;Petropavlovszk-Kamcsatszkij;Petropawlofsk-Kamtsjatski;Petropawlowsk-Kamtschatski;Petropàvlovsk-Kamtxatski;Petropávlovsk-Kamchatski;Pietropawlowsk Kamczacki;Pietropawłowsk Kamczacki;btrwbaflwfsk;kan cha jia bi de ba fu luo fu si ke;kan cha jia de bi de ba fu luo fu si ke;peteulopabeullobseukeukamchacheuki;peteulopabeullopeuseukeu kamchaseuki;pi tra paflafskh-khamchat ski;ptrwpawlwfsk-kamchatskyy;ptrwpblwbsq-qmztsqy;pytrwpawlwwsk kmchatsky;Πετροπάβλοφσκ Καμτσάτσκι;Горад Петрапаўлаўск-Камчацкі;Камчаткатааҕы Петропавловскай;Петропавловск Камчатски;Петропавловск-Камчаткăри;Петропавловск-Камчатски;Петропавловск-Камчатский;Петропавловськ-Камчатський;Կամչատկայի Պետրոպավլովսկ;פטרופבלובסק-קמצטסקי;بتروبافلوفسك;پتروپاولوفسک-کامچاتسکیی;پٹروپاولوسک-کامچاٹسکی;پیتروپاولووسک کمچاتسکی;ปิตราปัฟลัฟสค์-คัมชัตสกี;ペトロパブロフスク・カムチャツキー;堪察加彼得巴甫洛夫斯克;堪察加的彼得巴甫洛夫斯克;페트로파블로프스크 캄차스키;페트로파블롭스크캄차츠키; +city::2123628;Magadan;GDX;Gorad Magadan;Magadaan;Magadan;Magadana;Magadanas;Magadán;Mankantan;Maqadan;ma jia dan;magadan;magadana;maghadan;majadan;mgdn;Μαγκαντάν;Горад Магадан;Магадаан;Магадан;Մագադան;מגדן;ماجادان;ماغادان;ماگادان;मागादान;マガダン;马加丹;마가단; +city::6695754;Kogalym;Gorad Kagalym;KGP;Kogalim;Kogalom;Kogalym;Kogalymas;Kogalîm;Kogalõm;Kogalım;Kogałym;Koqalim;Koqalım;ke jia lei mu;kogarimu;kwgalym;kwghalym;Горад Кагалым;Когалим;Когалым;كوغاليم;کوگالیم;コガリム;科加雷姆; +city::6853140;Lesnoy;Lesnoj;Lesnoy;Лесной; +city::8505053;Vostochnoe Degunino;Vostochnoe Degunino;Восточное Дегунино; +city::201521;Musanze;Musanze;RHG;Ruhengeri;Ruhengeris;Rukhengeri;Рухенгери; +city::202061;Kigali;Gorad Kigali;KGL;Kigale;Kigali;Kigalis;Kigalo;Kigaly;Kinkali;Kiqali;Kígalí;ji jia li;khikali;kigali;kigalli;kigari;kikali;kygaly;kyghaly;Κιγκάλι;Горад Кігалі;Кигали;Кігалі;Կիգալի;קיגאלי;كيغالي;کیگالی;किगाली;ਕਿਗਾਲੀ;கிகாலி;කිගාලි;คิกาลี;ཀི་ག་ལི།;კიგალი;ኪጋሊ;キガリ;吉佳利;키갈리; +city::202217;Gitarama;Gitarama;Gitarame;Nkitarama;gitalama;gitarama;ji ta la ma;Γκιταράμα;Гитарама;Гитараме;გიტარამა;ギタラマ;吉塔拉馬;기타라마; +city::202326;Cyangugu;Cyangugu;Rusizi;Shangugu;Siangugu;Сиангугу; +city::202905;Gisenyi;Colline Gosenyi;Gisehn'i;Gisen'i;Gisenjis;Gisenyi;Gosenyi;Nkiseni;giseni;ji sai ni;jysayny;Γκισένι;Гисеньи;Гисэньи;جيسايني;ギセニ;吉塞尼;기세니; +city::203104;Byumba;Biumba;Bjumba;Byumba;Биумба; +city::203112;Butare;BTQ;Butare;Butaré;Butarė;Бутаре; +city::100425;Yanbu;YNB;Yambo;Yanbu;Yanbu al-Bahar;Yanbu' al Bahr;Yanbu`;Yanbu` al Bahr;Yanbu‘;Yanbu‘ al Baḩr;Yenbo;Yenbo` al Bahar;Yenbo‘ al Bahar;ynbʿ;ينبع; +city::101554;Tarut;Darin Fort;Tarut;Tarut fort;Tārūt;Tārūt fort; +city::101628;Tabuk;Gabouk;TUU;Tabouk;Tabuk;Tabukas;Tabūk;Taebuk;Tebuek;Tebuk;Tebük;Täbuk;ta bu ke;tabukeu;tabukk;tabuku;tbwk;Табук;תבוכ;تبوك;تبوک;تبوک، سعودی عرب;തബൂക്ക്;タブーク;塔布克;타부크; +city::101760;Sultanah;Sultanah;Sulţānah; +city::102318;Sayhat;As Saihat;As Saihāt;As Sayhat;As Sayhāt;Saihat;Sayhat;Sayhāt;Sihat;Sīhāt; +city::102527;Sakakah;AJF;Sakaka;Sakakah;Sakākā;Skaka;Skâka;sai ka kai;sakaka;skaka;skakh;Сакака;سكاكا;سکاکه;ਸਕਾਕਾ;സകാക;サカーカ;塞卡凱;사카카; +city::102651;Sabya;Al-Sabya;As Sabya;Aş Şabyā;Sabie;Sabiya;Sabya;sbya;Şabyā;صبيا; +city::103369;Qal`at Bishah;BHH;Bisha;Qal`at Bishah;Qal‘at Bīshah; +city::103630;Najran;EAM;Najran;Najrān;njran;نجران; +city::104515;Mecca;A Meca;La Meca;La Mecca;La Mecque;Macoraba;Maekkae;Makka;Makkah;Makkah al Mukarramah;Makkah al Mukarraman;Makkah al-Mukarramah;Meca;Mecca;Mecka;Meice;Meka;Mekao;Meke;Mekka;Mekkah;Mekke;Mekko;Mäkkä;mai jia;mak kah;meka;mekka;mkh;mkt;mkt almkrmt;Μέκκα;Мека;Мекка;מכה;مكة;مكة المكرمة;مکه;مکہ;มักกะฮ์;མ་ཁ།;მექა;メッカ;麥加;메카; +city::105072;Khamis Mushait;Chamis Musaitas;Chamis Muschait;Chamis Muszajt;Chamis Mušaitas;KMX;Khamis Mushait;Khamis Mushayt;Khamis-Mushait;Khamis-Mushajt;Khamīs Mushayt;hai mi si mu xie te;hamiseumusyaiteu;hmys mwsyyt;kamicu mucait;khamis musaitt;khmys mshyt;Хамис Мушаит;Хамис-Мушаит;Хамис-Мушайт;Хаміс-Мушайт;חמיס מושייט;خميس مشيط;خمیس مشیط;கமீசு முசைத்;ഖമീസ് മുശൈത്ത്;ハミース・ムシャイト;海米斯穆谢特;하미스무샤이트; +city::105299;Jizan;Djayzan;Djayzān;Djazan;Djāzān;Dzhizan;GIZ;Gazan;Gizan;Gizán;Jaizan;Jazan;Jezan;Jizan;Jāzān;Jīzān;Qizan;Qīzān;jazan;Джизан;جازان; +city::105343;Jeddah;Chidda;Cidda;Ciddae;Cidde;Ciddä;Ciddə;Djedda;Djeddah;Djidda;Dschidda;Dzeda;Dzedda;Dzhida;Dzhidda;Dzhiddae;Dzhiddat;Dzhidde;Dzida;Dzidd;Dzidda;Dzsidda;Dzudda;Dżudda;Džeda;Džedda;Džida;Džidd;Džidda;Gedda;Gidda;Gido;Gorad Dzhyda;Iedda;JED;Jaddah;Jedda;Jeddah;Jida;Jidda;Jiddah;Jidde;Jidá;Judah;Juddah;Tzenta;Yida;Yidda;Zhidda;gdh;jada;jdh;jdt;jeda;jedda;jeddaha;ji da;jida;jidda;jitta;yid dah;Ĝido;Ğidda;Τζέντα;Џеда;Горад Джыда;Джида;Джиддæ;Джидда;Джиддат;Джидде;Жидда;Ջիդդա;גדה;جدة;جده;جدہ;ޖިއްދާ;जेद्दाह;জেদ্দা;ਜੱਦਾ;ஜித்தா;ജിദ്ദ;ญิดดะฮ์;ჯიდა;ジッダ;吉达;吉達;제다;지다; +city::106281;Ha'il;HAS;Ha'il;Hael;Hajel;Hayil;hayl;حائل;Ḥâjel; +city::107304;Buraydah;Buraeydae;Buraida;Buraidah;Burajda;Buraydah;Buräydä;brydt;بريدة; +city::107781;Az Zulfi;Az Zilfi;Az Zilfī;Az Zulfi;ZUL;Zilfi; +city::107797;Dhahran;Az Zahran;Az-Zahran;Az̧ Z̧ahrān;DHA;Dahahron;Dahran;Dahrán;Dakhran;Dhahram;Dhahran;Dharaan;Gorad Dakhran;Ntachran;Zahran;Zhahran;alzhran;dahrani;dalan;daran;zai he lan;zha ha lan;zhran;Νταχράν;Горад Дахран;Дахран;דהראן;الظهران;ظهران;ظہران;ദഹ്റാൻ;დაჰრანი;ダーラン;宰赫兰;扎哈蘭;다란; +city::107968;Ta'if;At Ta'if;At-Ta'if;At-Ta’if;Aţ Ţā’if;TIF;Ta'if;Taef;Taif;Tayif;Taëf;Ta’if;Tāif;altayf;Таиф;الطائف; +city::108410;Riyadh;Al-Riad;Al-Riyad;Ar Riyadh;Ar Riyādh;Ar-Riaad;Ar-Rijad;Ar-Riyad;Ar-Riyod;Ar-Riyāḑ;Ehr-Rijad;Er-Rijad;Er-riyad;Gorad Ehr-Ryjad;RUH;Riaad;Riad;Riade;Riadi;Riado;Riadum;Riant;Rihad;Rijad;Rijada;Rijadas;Rijád;Rijāda;Riyad;Riyadh;Riyaḍ;Ríad;alryad;er-riadi;li ya de;liyadeu;raiyadha;ri'ada;ri'adha;riyad;riyada;riyadh;riyadha;riyado;riyat;ryad;ryyad;Ər-Riyad;Ριάντ;Ар-Рияд;Горад Эр-Рыяд;Ер-Ріяд;Рияд;Ријад;Эр-Рияд;Ալ-Ռիադ;ריאד;الرياض;رىياد;رياض;ریاض;ڕیاز;रियाद;रियाध;রিয়াদ;ৰিয়াধ;ਰਿਆਧ;ରିଆଦ;ரியாத்;ರಿಯಾಧ್;റിയാദ്;ริยาด;རིས་ཡག;ერ-რიადი;ሪያድ;リヤド;利雅得;利雅德;리야드; +city::108435;Ar Rass;Al Russ;Ar Rass;El Russ;Rass;alrs;الرس; +city::108512;Arar;Ara`ar;Arar;Ara‘ar;RAE;عرعر; +city::108648;Qurayyat;Al Qurayyat;Al Qurayyāt;An Nabk;An Nabk Abu Nakhlah;Gurayat;Nabek;Qurayyat;URY;alqryat;القريات; +city::108927;Al Qatif;Al Qatif;Al Qaţīf;Ehl'-Katif;El Katif;Qatif;Эль-Катиф; +city::109101;Al Mubarraz;Al Mubarraz; +city::109131;Al Mithnab;Al Midnab;Al Miznab;Midhnib;Mudhnib;almdhnb;المذنب; +city::109223;Medina;Al Madina;Al Madinah;Al Madinah al Munawwarah;Al Madīnah;Al Madīnah al Munawwarah;Al Medina;El Medina;Gorad Medzina;Lathrippa;MED;Madina;Madinah;Madinah al-Munawwarah;Madinat;Madīna;Maedinae;Mediina;Medin;Medina;Medinae;Medine;Medino;Medyna;Medína;Medîne;Medīna;Mädinä;Médine;Mədinə;Yathrib;almdynt;almdynt almnwrh;almdynt almnwrt;ma di nah;madina;mai de na;matina;mdynh;medina;Μεδίνα;Горад Медзіна;Мадина;Мадинат;Мединæ;Медина;Медине;Медіна;Мәдинә;Մադինա;אל-מדינה;المدينة;المدينة المنورة;المدينة المنوره;مدينه;مدینه;مدینھ;مدینہ منورہ;مەدینە;މަދީނާ;मदिना;मदीना;মদিনা;মেডিনা;ਮਦੀਨਾ;મદીના;மதீனா;మదీనా;മദീന;มะดีนะฮ์;მედინა;መዲና;マディーナ;麥地那;麦地那;메디나; +city::109323;Khobar;Al Khobar;Al Khubar;Al-Chubar;Al-Khobar;Al-Khubar;Ehl'-Khubar;El Huber;El'-Khubar;Khobar;ala-khobara;alkhbr;khbr;kobaleu;mhafzt alkhbr;Ель-Хубар;Эль-Хубар;Әл-Хубар;الخبر;خبر;محافظة الخبر;अल-खोबर;ഖോബാർ;アル・コバール;코바르; +city::109380;Al Khafji;Al Khafji;Al Khafjī;Ra's al Khafji;Ra’s al Khafjī; +city::109435;Al Jubayl;Ainain;Ainan;Al Jubayl;Al'-Dzhubajl';Jubail;Jubail al Bahri;Jubayl;Jubayl `Aynayw;Jubayl al Bahri;Jubayl al Baḩri;Jubayl ‘Aynayw;`Aynayn;aljbyl;Аль-Джубайль;الجبيل;‘Aynayn; +city::109571;Al Hufuf;Al Hufuf;Al Hufūf;HOF;Hofuf;Hofūf;Hufuf;Hufūf; +city::109953;Al Bahah;ABT;Al Bahah;Al Bāḩah;Ehl'-Bakha;albaht;ba ha;baha;Эль-Баха;الباحة;巴哈;바하; +city::110325;Ad Dawadimi;Ad Dawadami;Ad Dawadimi;Ad Dawādamī;Ad Dawādimī;Ad Duwadami;Ad Duwādamī;Al-Dawadimi;Al-Dawādimi;DWD;Duwadami;Duwadimi;Duwādimi; +city::110336;Dammam;Ad Dammam;Ad Dammām;Ad-Dammam;Ad-Damman;DMM;Daemmam;Damam;Damamas;Dammam;Damman;Dammám;Dammām;Dämmam;Ed Dammam;Ntamam;aldmam;da man;dam'mam;dam'mama;damam;damama;damami;dammam;danmamu;dmam;xad dam mam;Νταμάμ;Дамам;Даммам;דמאם;الدمام;دمام;दम्मम;दम्माम;ਦਮਾਮ;డమ్మామ్;ദമാം;อัดดัมมาม;დამამი;ダンマーム;达曼;담맘; +city::110690;Abha;AEbha;AHB;Abh;Abha;Abhá;Abhā;Abkha;Ebha;abaha;abeuha;abha;abuha;ai bo ha;Äbha;Абха;أبها;ابها;ابھا;അബഹ;アブハー;艾卜哈;아브하; +city::410096;Ash Shafa;Ash Shafa;Ash Shafā;Ash-Shafa;Аш-Шафа; +city::8394316;Unaizah;Unaizah;Unajza;Unayza;Unayzah;ou nai zai;unaisa;Унайза;عنيزة;عنیزه;عنیزہ;محافظة عنيزة;ഉനൈസ;歐奈宰; +city::2108502;Honiara;HIR;Honiara;Honiaro;Khoniara;Oniara;ho ni xa ra;honiala;honiara;huo ni ya la;hwnyara;Ονιάρα;Хониара;הוניארה;هونيارا;هونیارا;โฮนีอารา;ሆኒያራ;ホニアラ;霍尼亚拉;霍尼亞拉;호니아라; +city::364103;Wad Medani;DNI;Medani;Wad Madani;Wad Medani;wd mdny;ود مدني; +city::364706;Umm Ruwaba;Um Ruaba;Um Ruwwaba;Um Ruwwāba;Umm Ruwaba;Umm Ruwabah;Umm Ruwābah; +city::365137;Omdurman;Omdoerman;Omdourman;Omdurman;Omdurmana;Omdurmanas;Omdurmán;Omdurmāna;Umm Durman;Umm Durmán;Umm Durmān;am drman;ama daramana;en tu man;omduleuman;omdurman;omdurmani;omudo~uruman;xxm de xr man;Омдурман;Омдурман қаласы;אומדורמאן;أم درمان;ام درمان;ਅਮ ਦਰਮਾਨ;ออมเดอร์มาน;ომდურმანი;オムドゥルマン;恩图曼;옴두르만; +city::366847;Singa;Senga;Singa;Sinja;Sinjah;snjt;سنجة; +city::367308;Shendi;Shandi;Shendi;Shindi;Shindî; +city::367644;Sinnar;Sannar;Sannār;Sennaar;Sennar;Sennār;Sinnar; +city::368277;Rabak;KST;Rabak;Rabaq;rbk;ربك; +city::371760;Kosti;Costi;KST;Kosti;Kusti;Kūstī;rbk;Кусти;ربك; +city::372753;Kassala;Cassala;KSL;Kasala;Kassala;Kassale;Kassalā;Kaszala;Statul Kassala;ka sa la;kasalla;kassara;ksl;ksla;Кассала;Кассале;كسل;کسلا;カッサラ;卡薩拉;카살라; +city::373141;Kadugli;KDX;Kadugli;Kaduqli;Kāduqlī;kadqly;Кадугли;كادقلى;كادقلي; +city::377039;Port Sudan;Bur Sudan;Burt Sudan;Būr Sūdān;Būrt Sūdān;Gorad Port-Sudan;New Sawakin;New Sawâkin;PZU;Port Sodan;Port Sudan;Port Sudanas;Port Szudan;Port Szudán;Port-Soudan;Port-Sudan;Port-sudan;Porto Sudan;Porto Sudao;Porto Sudão;Puerto Sudan;Puerto Sudán;Pòrt Sodan;Shaikh Barghuth;Shaikh Barghūth;Shaykh Burghuth;Shaykh Burghūth;Sheikh Barghuth;Sheikh Barghūth;Sudanhavenurbo;bwr swdan;bwrtswdan;phxrt sudan;poteusudan;potosudan;su dan gang;Горад Порт-Судан;Порт Судан;Порт-Судан;Պորտ Սուդան;פורט סודאן;بور سودان;بورتسودان;پورٹ سوڈان;พอร์ตซูดาน;ポートスーダン;苏丹港;포트수단; +city::378231;Atbara;ATB;Atbara;Atbarah;Atbare;Madent Atbara;`Atbarah;a te ba la;atobara;Атбара;Атбаре;عطبرة;عطبره;‘Aţbarah;アトバラ;阿特巴拉; +city::378699;An Nuhud;An Nahud;An Nahūd;An Nuhud;An Nuhūd;En Nahud;En Nahūd;NUD;Nahad; +city::379003;El Obeid;Al Obayyid;Al Ubayd;Al Ubayyid;Al Ubayyiḑ;Al-Ubayyid;Al-`Obed;Al-‘Obêd;EBD;El Obeid;El Ubeiyad;`Ubed;alaby;Ел Обеид;الأبي;‘Ubêd; +city::379062;Al Qadarif;Al Qadarif;Al Qaḑārif;Al-Kadarif;Al-Qadarif;Al-Qaḑārif;El Gedaref;El-Gadarif;GSU;Gadaref;Gadarif;Gedaref;alqdarf;jia da li fu;Гедареф;אל-קדריף;القضارف;加达里夫; +city::379149;Al Manaqil;Al Manaqil;Al Manāqil;El Managil;El Manaqil;El Manāqil;Manaqil; +city::379252;Khartoum;Al Khartum;Al Kharţūm;Al Khurtum;Al Khurţūm;Cartum;Cartúm;Chartoum;Chartum;Chartumas;Chartúm;Hartum;Hartumo;Jartum;KRT;Kartum;Kartúm;Khartoem;Khartoum;Khartoun;Khartum;Khartun - alkhrtwm;Khartún - الخرطوم;haleutum;harutsumu;hrtwm;karttaum;ke tu mu;khartwm;khrtwm;Ĥartumo;Χαρτούμ;Картум;Хартум;חרטום;خارطوم;خرطوم;கார்த்தௌம்;ཁར་ཏུམ;ካርቱም;ハルツーム;喀土穆;하르툼; +city::379303;Geneina;Aj Jinena;Aj Jinēna;Al Geneina;Al Jeneina;Al Jinena;Al Jinēna;Al Junaynah;EGN;El Geneina;Geneina;aljnynt;الجنينة; +city::379555;El Fasher;Al Fashir;Al Fāshir;Al-Faschir;Al-Fashir;ELF;Ehl'-Fashir;El Fasher;Tendelti;Эль-Фашир; +city::380129;Ad Douiem;Ad Diwem;Ad Douiem;Ad Duwaym;Ad Duwem;Ad Duwēm;Al Dewaym;Dewaim;Dueim;Ed Dueim;Ehd-Duehjm;aldwym;aldwym (mdynt);Эд-Дуэйм;الدويم (مدينة);الدویم; +city::380148;El Daein;ADV;Ad Du'ayn;Ed Daein;El Daein;aldʿyn;الضعين;الضعین; +city::380173;Ed Damer;Ad Damar;Ad Damir;Ad Dāmir;Ad-Damir;Al-Damir;Ed Damer;El Damar;aldamr;الدامر; +city::380174;Ad-Damazin;Ad Damazin;Ad Damāzīn;Ad-Damazin;Damazin;Ed Damazin;RSS;aldmazyn;Ед Дамазин;الدمازين; +city::602150;Umea;Gorad Umea;Oumeo;Owmeo;UME;Ubmi;Uma;Umea;Umeo;Umeå;Uumaja;awmyw;ume'o;ume-o;umeo;umi'o;xu me xo;yu mo ao;Ūmeo;Ούμεο;Горад Умеа;Умео;Ումեո;אומאו;أوميو;امیہ;اومئو;اومیو;ऊमेओ;ਊਮਿਓ;อูเมโอ;უმეო;ウメオ;于默奧;우메오; +city::2663536;Vaexjoe;Gorad Veksheh;VXO;Vaexjoe;Vaxjo;Vekse;Veksh'o;Vekshe;Vekshjo;Vekše;Vekšė;Vexioe;Vexionia;Vexiö;Växjö;begsye;bekusho;faksyw;vekshe;wei ke she;wek chex;wkfw;wqsh;wykyw;Векше;Векшьо;Векшё;Горад Векшэ;וקשה;فاكسيو;وکفو;ویکوہ;ویکیو;เวกเชอ;ვექშე;ベクショー;韦克舍;벡셰; +city::2664454;Vaesteras;Arosia;Gorad Vestehros;Vaesteras;Vesteros;Vesterosa;Vesterosas;Västerås;beseuteloseu;fystyrws;vu~esuterosu;wei si te luo si;wes te ros;wstrws;wystyrws;Βεστερός;Вестерос;Горад Вестэрос;וועסטעראס;וסטרוס;فيستيروس;واسٹیراس;وستروس;ویستیروس;เวสเตโรส;ვესტეროსი;ヴェステロース;韦斯特罗斯;베스테로스; +city::2666199;Uppsala;Gorad Upsala;Oupsala;QYX;Ubsala;Upfala;Uppsal;Uppsala;Uppsalae;Uppsalir;Upsala;Upsalia;Upsalo;Upsāla;apsala;awbsala;awpsala;ubsalla;upcala;upsala;upusara;wu pu sa la;xup sx la;Ουψάλα;Горад Упсала;Убсала;Уппсалæ;Уппсала;Упсала;Упфала;Өпсала;Ուփսալա;אופסאלא;אופסלה;أوبسالا;اوبسالا;اوپسالا;اپسالا;उप्साला;உப்சாலா;อุปซอลา;უფსალა;ᐆᑉᓴᓚ/uupsala;ウプサラ;乌普萨拉;웁살라; +city::2669772;Taby;; +city::2670781;Sundsvall;Gorad Sundsval';SDL;Sountsval;Sundsval;Sundsval FA;Sundsvalis;Sundsvall;Sundsvall';sndsfal;sndswal;song zi wa er;sundsvali;sunseubal;suntsuvu~aru;swndswal;Σούντσβαλ;Горад Сундсваль;Сундсвал;Сундсвалль;Սունդսվալ ՖԱ;סונדסוואל;سندسفال;سندسوال;سوندسوال;სუნდსვალი;スンツヴァル;松茲瓦爾;순스발; +city::2673730;Stockholm;Estocolm;Estocolme;Estocolmo;Estocolmu;Estocòlme;Estokolma;Estokolmo;Gorad Stakgol'm;Holmia;STO;Stjokolna;Stoccholm;Stoccolma;Stockholbma;Stockholm;Stockolm;Stocolm;Stocolma;Stocòlma;Stocólma;Stokcholme;Stokgol'm;Stokgol'm osh;Stokgolm;Stokhol'm;Stokholm;Stokholma;Stokholmas;Stokholmi;Stokholmo;Stokkholm;Stokkholmur;Stokkhólmur;Stokkolma;Stokol'ma;Stokolm;Stuculma;Stuokhuolms;Stócólm;Sztokholm;Sztokhòlm;Tukholma;astkhlm;satakahoma;seutogholleum;si de ge er mo;stak'hom;stakahoma;stokahoma;stwkhwlm;stwqhwlm;stxkholm;sutokkuhorumu;Štokholm;Στοκχόλμη;Горад Стакгольм;Стокhольм;Стокгольм;Стокгольм ош;Стокольма;Стокхолм;Стокҳолм;Стёколна;Ստոկհոլմ;סטוקהולם;שטאקהאלם;استکهلم;ستوكهولم;ستۆکھۆڵم;سٹاکہوم;ܣܛܘܩܗܘܠܡ;स्टकहोम;स्टॉकहोम;स्तकहोम;স্টকহোম;ਸਟਾਕਹੋਮ;ஸ்டாக்ஹோம்;స్టాక్‌హోమ్;ಸ್ಟಾಕ್‍ಹೋಮ್;സ്റ്റോക്ക്‌ഹോം;สตอกโฮล์ม;སི་ཏོག་ཧོ་ལིམ།;စတော့ဟုမ်းမြို့;სტოკჰოლმი;ስቶኮልም;ᔅᑑᒃᓱᓪᒻ/stuukhulm;ストックホルム;斯德哥尔摩;斯德哥爾摩;스톡홀름;𐍃𐍄𐌿𐌺𐌺𐌰𐌷𐌿𐌻𐌼𐍃; +city::2675397;Solna;Sol'na;Сольна; +city::2675408;Sollentuna;; +city::2676176;Soedertaelje;Gorad Sjodehrtehl'e;JSO;S'odertale;S'odertele;S'odertelie;Sedertel'e;Sedertele;Sedertelje;Siodertelje;Sioderteljė;Sjodertel'e;Soedertaelje;Södertälje;Telga australis;XEZ;nan tai li ye;sederuterie;sex de xr telye;soedeleutellie;swdrtalya;swdtlya;Горад Сёдэртэлье;Седертельє;Седертелје;Седертеље;Сьодертале;Сьодертеле;Сьодертелие;Сёдертелье;سودتلیا;سودرتاليا;سودرتالیا;سودرتالیے;เซอเดอร์เตลเย;სედერტელიე;セーデルテリエ;南泰利耶;쇠데르텔리에; +city::2686657;OErebro;Ehrebru;Erebro;Erebru;Erebrū;Erempro;Gorad Ehrehbru;Jorebru;OErebro;OErebro kommuna;OErebro Isvec;ORB;Orebro;Orebrogia;arybrw;awrbrw;awrybrw;e lei bu lu;erebre;ereburu;oelebeulo;xex re bru;Örebro;Örebro kommuna;Örebro İsveç;Ørebro;Έρεμπρο;Горад Эрэбру;Еребро;Еребру;Йоребру;Эребру;ארברו;ערעברו;أوربرو;اریبرو;اوربرو;اوریبرو;เออเรบรู;ერებრე;エレブルー;厄勒布鲁;외레브로; +city::2688368;Norrkoeping;Gorad Norchehping;NRK;Norceping;Norcopia;Norrcheping;Norrchjoping;Norrkoeping;Norrkoping;Norrköping;Norrkøping;Norrshjopin;Norsepinga;Norsh'oping;Norsheping;Norsiopingas;Noršiopingas;Noršēpinga;bei xue ping;noleusyeping;noshopingu;nwrkwpng;nwrshwbyngh;nwrshwpyng;nwrspyng;nxr chex ping;Горад Норчэпінг;Норрчепінг;Норрчёпинг;Норршёпин;Норшепинг;Норшьопинг;Норћепинг;נארשעפינג;נורשפינג;نورشوبينغ;نورشوپینگ;نورکوپنگ;นอร์เชอปิง;ნორჩეპინგი;ノーショーピング;北雪平;노르셰핑; +city::2691459;Moelndal;M'olndal;Melndal;Melndala;Miolndalas;Mjol'ndal';Mjol'ndal'skaja kommuna;Moelndal;Molndal;Mölndal;Mølndal;Mēlndala;Мелндал;Мьолндал;Мёльндаль;Мёльндальская коммуна;ሜልንዳል;ᒧᓪᓐᑕᓪ/Mölndal; +city::2692969;Malmoe;MMA;Mal'mjo;Malm'o;Malme;Malmey;Malmo;Malmoe;Malmogia;Malmö;Malmø;Málmey;ma er mo;marume;Малме;Малмьо;Мальмё;מאלמה;マルメ;马尔莫;马尔默; +city::2693678;Lund;Gorad Lund;Lount;Lund;Lunda;Lundas;Lundur;long de;lund;lunda;lundeu;lundi;lunt;lwnd;rundo;Λουντ;Горад Лунд;Лунд;Лөнд;لنڈ;لوند;لونڈ;লুন্ড;லுண்ட்;ลุนด์;ლუნდი;ルンド;隆德;룬드; +city::2694762;Linkoeping;Gorad Linchehping;LPI;Lin'kopin'nk;Linceping;Lincheping;Linchjoping;Lincopia;Linkoeping;Linkoping;Linköping;Linkøping;Linsepinga;Linsh'oping;Linsheping;Linsiopingas;Linšiopingas;Linšēpinga;lin chex ping;lin xue ping;linsyeping;lnkwmng;lnshwpng;lynshwbyngh;lynshwpyng;rinshepingu;Λινκόπινγκ;Горад Лінчэпінг;Линчёпинг;Линшепинг;Линшьопинг;Линьшөпин;Линћепинг;Лінчепінг;לינשעפינג;لنشوپنگ;لنکومنگ;لينشوبينغ;لینشوپینگ;ลินเชอปิง;ლინჩეპინგი;リンシェーピング;林雪平;린셰핑; +city::2701680;Karlstad;Carolostadium;Gorad Karl'stad;KSD;Karlstad;Karlstadas;Karlstade;Kārlstade;ka er si ta de;kalseutadeu;karlshth;karlsta;karlstad;karusutado;qrlstd;Горад Карльстад;Карлстад;קרלסטד;كارلستاد;کارلستا;کارلسٹاڈ;کارلشته;კარლსტადი;ካርልስታድ;ᑲᕐᓪᔅᑕᑦ;カールスタード;卡尔斯塔德;칼스타드; +city::2702979;Joenkoeping;Encheping;Gorad Jonchehping;Iunecopia;JKG;Jenceping;Jensepinga;Jensheping;Jenšēpinga;Jjonchjoping;Joenkoeping;Joenkoepings kommuna;Jonkoping;Jonsh'oping;Jonsiopingas;Jonšiopingas;Jönköping;Jönköpings kommuna;Jønkøping;jwnkwmng;yan xue ping;yein chex ping;yensyeping;yonshopingu shi;ywnshwbyngh;ywnshwpng;ywnshwpyn;ywnshwpyng;Єнчепінг;Јеншепинг;Јенћепинг;Горад Ёнчэпінг;Йоншьопинг;Йёнчёпинг;Йёньшөпин;جونکومنگ;يونشوبينغ;یونشوپنگ;یونشوپینگ;ܝܘܢܫܘܦܝܢ;เยินเชอปิง;იენჩეპინგი;ヨンショーピング市;延雪平;옌셰핑; +city::2704620;Huddinge;; +city::2706767;Helsingborg;AGH;Chelsin'nkmpornk;Gel'sinborg;Gorad Khel'singbarg;Haelsingborg;Helsingborg;Helsingborgas;Helsingborja;Helsingjaborg;Helsingoburgum;Hälsingborg;Khel'sinborg;Khel'singborg;Khelsingborg;Khelsingbori;he er xin bao;hel si ngb xry;helsingboli;helsingborgi;herushinbori;hlsyngbwrg;hlsynghbwrgh;xi xing bao;Χέλσινγκμποργκ;Гельсінборг;Горад Хельсінгбарг;Хелсингборг;Хелсингбори;Хельсинборг;Хельсингборг;הלסינגבורג;هلسينغبورغ;هلسینگبورگ;ہلسنگبورگ;เฮลซิงบอรย์;ჰელსინგბორგი;ヘルシンボリ;希星堡;赫尔辛堡;헬싱보리; +city::2707953;Haninge;; +city::2708365;Halmstad;Gal'mstad;Gorad Khal'mstad;HAD;Halmostadium;Halmstad;Halmstadas;Hamstad;Khal'mstad;Khalmstad;ha er mu si ta de;halleumseutadeu;halms ta;halmstad;harumusutaddo;Гальмстад;Горад Хальмстад;Халмстад;Хальмстад;האלמסטד;هالمستاد;ہالمستا;ہالمسٹاڈ;ฮาล์มสตา;ჰალმსტადი;ハルムスタッド;哈尔姆斯塔德;할름스타드; +city::2711537;Goeteborg;G'oteborg;GOT;Gautaborg;Geteborg;Geteborga;Geteborgas;Gjoteborg;Goeteborg;Goeteborq;Gorad Gjotehbarg;Goteborg;Goteburg;Gotemburgo;Gotenburg;Gothembourg;Gothenburg;Gothoburgum;Gotnburg;Gottenborg;Göteborg;Göteborq;Gøteborg;Gēteborga;Nketempornk;ge de bao;ghwtnbrgh;gtbwrg;jwtnbrj;kx then beirk;yeteboli;yohateborya;yotebori;ywtbry;Γκέτεμποργκ;Гетеборг;Горад Гётэбарг;Гьотеборг;Гётеборг;גטבורג;געטעבארג;جوتنبرج;غوتنبرغ;گووتھنبرگ;یوتبری;योहतेबोर्य;กอเทนเบิร์ก;გეტებორგი;ዬተቦርይ;ᐃᐅᑕᐳᕆ;ヨーテボリ;哥德堡;예테보리; +city::2712414;Gaevle;Evle;GVX;Gaefle;Gaevle;Gefle;Gevalia;Gorad Eule;Gäfle;Gävle;Jevle;Jevlė;Jēvle;evle;i~evure;yblh;ye fu lei;yebeulle;yefle;yflh;ywlh;Євле;Јевле;Горад Еўле;Евле;Йевле;יבלה;يفله;گاولے;یاولہ;یوله;เยฟเล;ევლე;イェヴレ;耶夫勒;예블레; +city::2715953;Eskilstuna;EKT;Ehskil'stuna;Eshilstruna;Eskil'stuna;Eskilstiuna;Eskilstjuna;Eskilstouna;Eskilstuna;Eskilstūna;Gorad Ehskil'stuna;ai si ji er si di na;asklstwna;askylstwna;eseukilseutuna;eshirusuto~una;Εσκιλστούνα;Горад Эскільстуна;Ескилстюна;Ескільстуна;Ешилструна;Эскильстуна;إسكيلستونا;اسکلستونا;اسکیلستونا;ესკილსტუნა;エシルストゥーナ;埃斯基尔斯蒂纳;에스킬스투나; +city::2720501;Boras;Boerosia;Boras;Boros;Borås;Buros;Burosa;Burosas;Celfsborg;Gorad Buras;boloseu;borosu;bu luo si;bu ros;burosi;bwras;bwrws;Борос;Бурос;Горад Бурас;בורוס;بوراس;بوروس;บูโรส;ბუროსი;ボロース;布羅斯;보로스; +city::1880252;Singapore;SIN;Sin-ka-po;Singapore;Singapore City;Singapour;Singapur;Singapura;Sinkapoure;Sîn-kâ-po;Tumasik;cinkappur;prathes singkhpor;shingaporu;sigapura;sing-gapol;sing-gapoleu;singapura;singkh por;sngapwr;snghafwrt;syngpwr;xin jia po;xing jia po;Σιγκαπούρη;Сингапур;Сінгапур;סינגפור;سنغافورة;سنگاپور;सिंगापुर;सिंगापूर;ਸਿੰਗਾਪੁਰ;சிங்கப்பூர்;ประเทศสิงคโปร์;สิงค์โปร;ປະເທດສງກະໂປ;ປະເທດສິງກະໂປ;စငကာပနငင;စင်ကာပူနိုင်ငံ;សងហបរ;សិង្ហបុរី;シンガポール;新加坡;星架坡;싱가포르;싱가폴; +city::3195506;Maribor;MBX;Marburg an der Drau;Marburgo;Maribor;Maribora;Mariboras;Mariboro;Mestna obcina Maribor;Mestna občina Maribor;ma li bo er;mariboru;Марибор;マリボル;马里博尔; +city::3196359;Ljubljana;Aemona;Gorad Ljubljana;Jubaljana;LJU;Laibach;Laiboch;Lioumpliana;Liubliana;Liublianne;Liublijana;Liuibleana;Liúibleána;Ljubljan;Ljubljana;Ljubljana osh;Ljubljanae;Ljubljano;Lubian-a;Lubiana;Lubiane;Lubiann-a;Lubjana;Lublan;Lublana;Lublaň;Lubliano;Lubljana;Luebiana;Lueblaen;Lueblana;Lyoubyana;Lyublyana;Lübiana;Lüblâna;Lüblän;li'ubali'ana;li'ubliyana;liubliana;liyubliyana;liyupliyana;lu bu er ya na;lub li ya na;lyubeullyana;lywblyana;ryuburyana;Ļubļana;Ľubľana;Łubiana;Λιουμπλιάνα;Љубљана;Горад Любляна;Люблян;Люблянæ;Любляна;Любляна ош;Люблꙗна;Լյուբլյանա;ליובליאנה;ليوبليانا;ليۇبليانا;لیوبلیانا;लियुब्लियाना;লিউব্লিয়ানা;ਲਿਊਬਲਿਆਨਾ;லியுப்லியானா;ลูบลิยานา;ལི་པོ་ཡ་ན།;ლიუბლიანა;ልዩብልያና;リュブリャナ;卢布尔雅那;盧布爾雅那;류블랴나; +city::723819;Presov;Eperjes;POV;Prasiv;Preshov;Presov;Presova;Preszow;Preszów;Prešov;Prešova;Prjashev;prswb;Прешов;Пряшев;Пряшів;פרשוב; +city::723846;Poprad;Deutschendorf;Poprad;TAT;Попрад; +city::724443;Kosice;Cassovia;Gorad Koshycy;KSC;Kaschau;Kassa;Koesice;Koshice;Koshici;Kosice;Kositse;Koszyce;Koşitse;Košice;Košicė;Kösice;ke xi ce;koshitsu~e;kosiche;kositsa;kwshytsh;qwsyzh;Κόσιτσε;Горад Кошыцы;Кошице;Кошіцї;קושיצה;كوشيتسه;کوشیتسه;کوشیسہ;کوشیسے;कोशित्सा;კოშიცე;コシツェ;科希策;코시체; +city::3056508;Zilina;Gorad Zhylina;ILZ;Jilina;Silina;Sillein;Solna;Zhilina;Zhilinae;Zilina;Zsolna;Zylina;jillina;jirina;jylyna;ri li na;zhilina;zhylyna;zylyna;zylynh;Żylina;Žilina;Горад Жыліна;Жилинæ;Жилина;Жиліна;זילינה;جيلينا;زیلینا;ژیلینا;ჟილინა;ジリナ;日利納;질리나; +city::3057124;Trnava;Gorad Trnava;Nagyszombat;Trnava;Trnawa;Turnava;Tyrnau;te er na wa;teuleunaba;texr nawa;torunavu~a;trnafa;trnbh;Горад Трнава;Трнава;Търнава;טרנבה;ترنافا;เตอร์นาวา;トルナヴァ;特爾納瓦;트르나바; +city::3057140;Trencin;Trenchin;Trencin;Trencsen;Trencsén;Trenczyn;Trentschin;Trentsen;Trenčin;Trenčín;Тренчин; +city::3058000;Prievidza;Gorad Previdza;Pr'evidza;Previdza;Prievidza;Privigye;Priеvidzа;Prjevidza;bryfydza;peuliebideuja;pu lie wei zha;purievu~idoza;Горад Превідза;Приевидза;Прьевидза;Прєвідза;Прјевидза;بريفيدزا;پریه‌ویدزا;プリエヴィドザ;普列維扎;프리에비드자; +city::3058531;Nitra;Gorad Nitra;Neutra;Nitra;Njitra;Nyitra;ni te la;niteula;nitora;nytra;nytrh;Њитра;Горад Нітра;Нитра;Нітра;ניטרה;נייטרא;نيترا;نیترا;ნიტრა;ニトラ;尼特拉;니트라; +city::3058780;Martin;Gorad Marcin;Martin;Martin i Slovakia;Martina;Martinas;Mаrtin;Turciansky Svaty Martin;Turocszentmarton;Turz-Sankt Martin;Turz-St. Martin;Turócszentmárton;Turčiansky Svätý Martin;ma ding;maleutin;martn;maruchin;Горад Марцін;Мартин;Мартін;مارتن;マルチン;马丁;마르틴; +city::3060972;Bratislava;An Bhrataslaiv;An Bhratasláiv;BTS;Baratislawa;Bratislav;Bratislava;Bratislava osh;Bratislavae;Bratislavo;Bratislawa;Bratisllava;Bratisława;Bratyslawa;Bratysława;Bratîslava;Gorad Bracislava;Mpratislaba;Posonium;Pozsony;Presburg;Presporok;Prespurk;Pressburg;Preszburg;Preßburg;Prešporok;Prešpurk;beulatiseullaba;bra ti sla wa;bratisalava;bratislabha;bratislava;bratislavha;bratslawa;bratsylava;bratyslafa;bratyslava;bratyslaw;bratyslawa;bu la di si la fa;burachisuravu~a;pirattislava;Μπρατισλάβα;Братислав;Братиславæ;Братислава;Братислава ош;Братіслава;Братїслава;Горад Браціслава;Բրատիսլավա;בראטיסלאווא;ברטיסלאבה;براتسلاوا;براتسیلاڤا;براتىسلاۋا;براتيسلافا;براتیسلاو;براتیسلاوا;براٹیسلاوا;ܒܪܛܝܣܠܐܒܐ;ब्रातिस्लाभा;ब्रातिस्लाव्हा;ব্রাতিস্লাভা;ਬ੍ਰਾਤਿਸਲਾਵਾ;பிராத்திஸ்லாவா;ಬ್ರಾಟಿಸ್ಲಾವಾ;ബ്രാട്ടിസ്‌ലാവ;บราติสลาวา;བ་ར་ཏིསི་ལ་བ།;ბრატისლავა;ብራቲስላቫ;ブラチスラヴァ;布拉迪斯拉发;布拉迪斯拉發;브라티슬라바; +city::3061186;Banska Bystrica;Bans'ka Bistricja;Banska Bistrica;Banska Bistritsa;Banska Bystrica;Banska Bystrzyca;Banska-Bistrica;Banská Bystrica;Bańska Bystrzyca;Besztercebanya;Besztercebánya;Beszterczebanya;Beszterczebánya;Gorad Banska Bistryca;Neosolium;Neusohl;ban si ka-bi si te li cha;ban ska bi stri t sa;banseukabiseuteulicha;banska bystrytsa;Банска Бистрица;Банска-Бистрица;Банська Бистриця;Горад Банска Бістрыца;באנסקה ביסטריצה;بانسكا بيستريتسا;บันสกาบิสตรีตซา;バンスカー・ビストリツァ;班斯卡-比斯特里察;반스카비스트리차; +city::2406407;Makeni;Makeni;Makenis;ma ka ni;makeni;makyny;Μακένι;Макени;ماکینی;マケニ;馬卡尼;마케니; +city::2407656;Koidu;Koidu;Koidu Town;Koldu; +city::2407790;Kenema;KEN;Kenema;Keneme;kai nei ma;kenema;kynyma;Κενέμα;Кенема;Кенеме;کینیما;ケネマ;凯内马;케네마; +city::2409306;Freetown;FNA;Freetown;Frijtaun;Fritaun;Fritauna;Fritaunas;Fritauno;Fritaŭno;Fritonn;Frītauna;Gorad Frytaun;Phritaoun;Saint George;Urbs Libera;farita'una;fri thawn;frita'una;frytawn;fu li dun;furitaun;peulitaun;phrita'una;phritaun;piritavun;zi you shi;Φρίταουν;Горад Фрытаўн;Фрийтаун;Фритаун;Фрітаун;Ֆրիթաուն;פריטאון;فريتاون;فری ٹاؤن;فریتاون;فری‌تاون;फ़्रीटाउन;फ्रीटाउन;ਫ਼ਰੀਟਾਊਨ;பிரீடவுன்;ಫ್ರೀಟೌನ್;ฟรีทาวน์;ཕིརི་ཊའུན།;ფრიტაუნი;ፍሪታውን;フリータウン;弗里敦;自由市;프리타운; +city::2410048;Bo;Bo;KBS;bo;bo cheng;bw;bw syralywn;Μπο;Бо;בו;بو، سیرالیون;ボー;博城;보; +city::2243940;Ziguinchor;ZIG;Zighinkor;Zigincor;Ziginshor;Ziginsor;Ziginsoras;Ziginĉor;Ziginšor;Ziginšoras;Zigiunchor;Ziguinchor;Zinguinhor;ji jin shao er;jiganshoru;jiginsyoleu;zygynchwr;Зигиншор;زیگینچور;ジガンショール;济金绍尔;지긴쇼르; +city::2244322;Touba;Touba;Tub;Tuba;Tuubaa;to~uba;tu ba;tuba;Туба;トゥーバ;圖巴;투바; +city::2244616;Tiebo;; +city::2244799;Thies Nones;; +city::2244991;Tambacounda;TUD;Tambacounda;Tambakunda;tambakunda;tambakwnda;tan ba kun da;tanbakunda;Тамбакунда;تامباکؤندا;タンバクンダ;坦巴昆達;탐바쿤다; +city::2246452;Saint-Louis;Gorad Sen-Lui;Ndar;Saint Louis;Saint-Louis;SanLuis;Sen Lui;Sen Luji;Sen-Lui;Senegalyn Sen-Lui;St-Louis;XLS;saenglu-i;san=rui;sant lwys;sen-lui;senta lu'isa dvipa;senta-lo'isa;sheng lu yi;Горад Сен-Луі;Сен-Луи;Сен-Луї;Сенегалын Сен-Луи;Սեն Լուի;סן-לואי;سانت لويس;سن‌لوئی;سینٹ-لوئیس، سینیگال;सेन्ट लुईस द्वीप;सेन्ट-लोइस;სენ-ლუი;サン=ルイ;圣路易;생루이; +city::2246678;Pikine;Pikin;Pikine;pi jin;pikin;Пикин;ピキン;皮金; +city::2248698;Mbake;Mbacke;Mbacké; +city::2249222;Louga;Louga;Luga; +city::2249782;Kolda;KDA;Kolda;Колда; +city::2250805;Kaolack;KLC;Kaolac;Kaolack;Kaolak; +city::2253354;Dakar;DKR;Dacar;Dacár;Dakaa;Dakar;Dakara;Dakaras;Dakaro;Gorad Dakar;Ndakaaru;Ntakar;da ka er;dakaleu;dakar;dakara;dakaru;dqr;takkar;Ντακάρ;Горад Дакар;Дакар;Դակար;דאקאר;דקר;داكار;داکار;ڈا کار;ڈاکار;डकार;ডাকার;ਡਾਕਾਰ;டக்கார்;ഡാക്കർ;ดาการ์;ཌ་ཀར།;დაკარი;ዳካር;ダカール;達喀爾;다카르; +city::52867;Qoryooley;Coriole;Coriolei;Koriolay;Qoreyole;Qoryolay;Qoryooley; +city::53654;Mogadishu;Gorad Magadysha;MGQ;Magadiscio;Maqdishu;Mogadiisho;Mogadis;Mogadisas;Mogadischu;Mogadiscio;Mogadish;Mogadisho;Mogadishu;Mogadisjoe;Mogadisju;Mogadisjû;Mogadiso;Mogadiss;Mogadisu;Mogadisxo;Mogadiszu;Mogadixo;Mogadiŝo;Mogadişu;Mogadiš;Mogadišas;Mogadišo;Mogadišu;Mogadíscio;Mogadīšo;Mogaidisiu;Mogaidisiú;Monkantisou;Moqadiso;Moqadişo;Moukdicho;Moukntiso;Mugadiccu;Mugadishu;Mugadiss;Muqdisho;Muqdishow;Muqdishu;Mógadisjú;Xamar;makadisu;meagadisu;mo jia di sha;mo jia di xiu;mo kadi chu;mogadisho;mogadishu;mogadisu;mogadisyu;mogarisu;mqdyshw;mqdyshyw;mukticu;mwgadyshw;mwgdysw;mwghadyshw;mۆgadyshۆ;Μογκαντίσου;Μουκντίσο;Горад Магадыша;Могадишо;Могадишу;Могадішо;Մոգադիշո;מאגאדישו;מוגדישו;مقديشو;مقديشيو;موغادیشو;موگادیشو;مۆگادیشۆ;मोगादिशू;मोगादीशू;মোগাদিশু;ਮਕਦੀਸ਼ੂ;ମୋଗାଡ଼ିସୁ;முக்தீசூ;മൊഗാദിഷു;โมกาดิชู;མོ་ག་དི་ཤུ།;მოგადიშო;ሞቃዲሾ;モガディシュ;摩加迪休;摩加迪沙;모가디슈; +city::54225;Marka;Marca;Marka;Merca;Merka;mrkt‎;مركة‎; +city::55671;Kismayo;Chisimaio;Chisimayu;KMU;Kisimayo;Kisimayu;Kismaanyo;Kismaayo;Kismanyo;Kismayo;Kismayu;Kismānyó;kisumayo;キスマヨ; +city::56399;Jamaame;Giamama;Giamame;Giamana;Giamane;Jamaame;Jamame;Jamāme;Margherita; +city::57289;Hargeysa;HGA;Hargeisa;Hargesa;Hargeysa;Khargejse;Харгейсе; +city::58933;Garoowe;GGR;Garoe;Garoowe;Garoueh;Garove;Garoway;Garowe;Geroweh;Gherroue;Gherrowe;Gherròue;Gorad Garoveh;Magiamacarscio;galowe;garoue;garou~e;gharwy;gharwy‎;jia luo wei;ka rowe;Гарове;Гароуэ;Горад Гаровэ;غاروي‎;غاروی;กาโรเว;გაროუე;ガローウェ;加罗韦;가로웨; +city::59611;Gaalkacyo;GLK;Gaal Kacyo;Gaalkacyo;Gaalkayo;Gal'kajo;Galcaio;Galka`yo';Galkacyo;Galkajo;Galkayo;Galka‘yo’;Gallacai;Gallacaio;Rocca Littorio;galkayo;garukaiyo;jia lei ka yue;kal khak yo;Галькайо;جالكعيو;جالکعیو;กาลคักโย;გალკაიო;ガルカイヨ;加勒卡約;갈카요; +city::63795;Burao;BUO;Bur `o;Bur ‘ó;Burao;Burco;Buruo;bu la ao;burao;Бурао;Буръо;برعو;ბურაო;ブラオ;布拉奧; +city::64013;Bosaso;BSA;Bandar Kassim;Bandar Qasim;Bender Qaasin;Bender Qasin;Boosaaso;Boosaso;Bosasas;Bosaso;Bosasso;Bénder Qāsin;bo sa so;bo sa suo;bosaso;bwsasw;Босасо;بوساسو;بوصاصو;โบซาโซ;ბოსასო;ボサソ;博萨索;보사소; +city::64435;Berbera;BBO;Berbera;Berberah;Berbere;Gorad Berbera;bai pei la;beleubela;berbera;berubera;brbrh;brbrt;Бербера;Бербера қаласы;Горад Бербера;ברברה;بربرة;بربرہ;ბერბერა;ベルベラ;柏培拉;베르베라; +city::64460;Beledweyne;BLW;Balad Weyn;Belai-Wen;Beled Weyn;Beleduehjne;Beledueyne;Beledweyne;Belet Uen;Belet Wayne;Belet Wen;Belet Weyne;Bālad Weyn;bei lan de wen;beledueini;belledeuweine;beretou~ein;bld wyn;bldwyn;Беледуэйне;بلد وين;بلدوین;ბელედუეინი;ベレトウェイン;貝蘭德文;벨레드웨이네; +city::64536;Baidoa;BIB;Baidabho;Baidabo;Baidoa;Bajdabo;Bajdoa;Baydhabo;Iscia Baidoa;Isha Baydabo;Isha Baydhaba;Isha Baydhabo;bai duo ya;baidabo;baidoa;bydwa;ri ben yu;Байдабо;Байдоа;بيدوا;بیدوا;ბაიდოა;バイドア;拜多亞;日本語;바이다보; +city::65785;Afgooye;Afgoi;Afgoje;Afgooye;Afgoye;Afgōye;Asgoi;Афгойе; +city::400769;Laascaanood;Laascaanood;Las Anod; +city::3383330;Paramaribo;Gorad Paramaryba;PBM;Paramaribas;Paramaribo;Paramaribô;Paramarimpo;Paramaríbó;ba la ma li bo;baramarybw;pa la ma li bo;pa rama ri bo;palamalibo;paramaribo;paramaripo;paramarybw;prmrybw;Παραμαρίμπο;Горад Парамарыба;Парамарибо;Парамарібо;Պարամարիբո;פאראמאריבא;פרמריבו;باراماريبو;پاراماریبو;पारामरिबो;पारामारिबो;ਪਾਰਾਮਾਰੀਬੋ;પારામારિબો;பரமாரிபோ;ปารามารีโบ;པེ་ར་མེ་རི་བོ།;პარამარიბო;ፓራማሪቦ;パラマリボ;巴拉馬利波;帕拉马里博;파라마리보; +city::363807;Winejok;Wanyjok; +city::363885;Wau;Uau;Vau;Vav;WUU;Wau;Waw;Wāw;vau;wa wu;wau;waw;Вав;Вау;Уау;ואו;واو;واو، جنوبی سوڈان;ვაუ;ワーウ;瓦烏;와우; +city::370737;Malakal;MAK;Malakal;Malakal';Malakalis;Malakál;ma la ka er;mallakal;marakaru;mlkal;Малакал;Малакаль;מלקאל;ملكال;ملکال;მალაკალი;マラカル;馬拉卡爾;말라칼; +city::373303;Juba;Djouba;Dschuba;Dzhuba;Goba;JUB;Juba;Uula;g'wbh;Джуба;ג'ובה; +city::2410763;Sao Tome;Gorad San-Tameh;Salazar;San Tomas;San Tome;San Tomé;San Tomė;San-Tome;Santo Tome;Santo Tomé;Santome;Sao Thome;Sao Tome;Sao Tomee;Sao Tomé;Sao-Tomeo;Soeo Tome;Svaety Tomas;Svätý Tomáš;Sào Thomé;São Tomé;Söo Tomé;TMS;Urbs Sancti Thomae;cavo tome;sa'o tome;sangtume;santome;savea team;saw twmy;saywtwmh;sea tu me;sheng duo mei;Σάο Τομέ;Горад Сан-Тамэ;Сан-Томе;Сао Томе;Սան Տոմե;סאו טומה;ساؤ ٹومے;سائوتومه;ساو تومي;ساو تۆمێ;ساو ٹومے;साओ टोमे;সাও টোমে;ਸਾਓ ਤੋਮੇ;சாவோ தொமே;സാവോ ടോം;เซาตูเม;སའོ་ཊོ་མེ།;სან-ტომე;ሳን ቶሜ;サントメ;圣多美;聖多美;상투메; +city::3582883;Usulutan;Ocelotlan;Ousouloutan;Usulutan;Usulutanas;Usulutane;Usulután;awswlwtan;usullutan;usulutana;wu su lu tan;Ουσουλουτάν;Усулутан;Усулутане;אוסולוטאן;اوسولوتآن;उसुलुतान;烏蘇盧坦;우술루탄; +city::3583096;Soyapango;Sojapangas;Sojapango;Soyapango;Soyopango;Zoyapanco;suo ya pan ge;swyapangw;Сояпанго;Сојапанго;سویاپانگو;索亞潘戈; +city::3583102;Sonsonate;Centzonatl;Ciudad de Sonsonate;Sonsonate;Sonsonatė;snsnath;sonasonate;song suo na te;sonsonate;swnswnth;Σονσονάτε;Сонсонате;סונסונטה;سنسناته;سونسوناتے، ایل سیلواڈور;सोनसोनाते;松索納特;손소나테; +city::3583334;Santa Ana;Cihuatehuahcan;Gorad Santa-Ana;Santa Ana;Santa-Ana;Santaana;sanata-ana;santaana;sheng an na;Σάντα Άνα;Горад Санта-Ана;Санта Ана;Санта-Ана;Սանտա Անա;סנטה אנה;سانتا آنا، ایل سیلواڈور;सानता-आना;サンタ・アナ;聖安娜;산타아나; +city::3583361;San Salvador;Gorad San-Sal'vador;SAL;Salvador;San Salbador;San Salvado;San Salvador;San Salvadoras;San Salvadori;San Salvadò;San Salwador;San-Sal'vador;San-Salvador;San-Salvadoro;Sansalvadora;Urbs Sancti Salvatoris;can calvator;san salvadwr;san salwadwr;san slfadwr;san-salvadori;sana salavadora;sana salvhadora;sana-salvadora;sansalbadoleu;sansalwadxr;sansarubadoru;sheng sa er wa duo;sn slwwdwr;Σαν Σαλβαδόρ;Горад Сан-Сальвадор;Сан Салвадор;Сан-Сальвадор;Սան Սալվադոր;סאן סאלוואדאר;סן סלוודור;سان سالوادور;سان سالۋادور;سان سلفادور;سان سلواڈور;सान साल्व्हाडोर;सान-साल्वाडोर;ਸਾਨ ਸਾਲਵਾਦੋਰ;சான் சல்வடோர்;ซันซัลวาดอร์;སན་སལ་ཝ་ཌོར།;სან-სალვადორი;ሳን ሳልቫዶር;サンサルバドル;聖薩爾瓦多;산살바도르; +city::3583446;San Miguel;San Miguel;San Miquel; +city::3583480;San Marcos;San Marcos; +city::3584257;Santa Tecla;Ciudad de Nueva San Salvador;La Ciudad de Nueva San Salvador;Nuehva-San-Sal'vador;Nueva San Salvador;Santa Tecla;Santa Tekla;Santa-Tekla;santatekeulla;sheng te ke la;Σάντα Τέκλα;Нуэва-Сан-Сальвадор;Санта Текла;Санта-Текла;سانتا تکلا، ایل سیلواڈور;聖特克拉;산타테클라; +city::3584399;Mejicanos;Mejicanos;Mekhikanos;Mexicanos;Мехиканос; +city::3586814;Delgado;Del'gado;Delgado;Villa Delcado;Villa Delgado;Дельгадо; +city::3587345;Apopa;Apopa; +city::163345;Tartouss;Antaradus;Tartous;Tartouss;Tartoûs;Tartus;mhafzt trtws;trtws;Ţarţūs;Тартус;טרטוס;طرطوس;محافظة طرطوس; +city::163808;Tadmur;PMS;Pal'mira;Palmira;Palmuera;Palmyra;Palmyre;Palmüra;Palmýra;Tadmor;Tadmur;Tedmor;ba er mi la;parumira yi ji;tdmr;tdmwr;Палмира;Пальмира;תדמור;تدمر;パルミラ遺跡;巴尔米拉; +city::164947;As Salamiyah;As Salamiyah;As Salamīyah;Salamias;Salamiyah;Salamiyeh;Salamīyah;Selemie;Selemiya;Selemiye;Selemié;Selemīya;Sélémîyé;alslmyt;slmyt;السلمية;سلمية; +city::167357;Manbij;Bambyce;Giyerapol;Hierapolis;Manbej;Manbi;Manbidsch;Manbidz;Manbidzh;Manbidż;Manbidž;Manbij;Manbiy;Membidj;Membij;Memdidge;Menbidj;Menbij;Mennbidj;Minbej;Muenbic;Münbiç;man bi ji;manbiji;mnbj;Манбидж;Манбідж;منبج;ማንቢጅ;マンビジ;曼比季; +city::169304;Jablah;Djeble;Djéblé;Jablah;Jableh;Jebele;Jebeleh;Jebelli;Jeble;jblt;جبلة; +city::169389;Idlib;Idleb;Idlib;Idlibas;Idlip;adlb;idaliba;ideullibeu;idoribu;mhafzt adlb;yi de li bo;İdlib;İdlip;Ідліб;Идлиб;Իդլիբ;אדלב;إدلب;ادلب;محافظة إدلب;इदलिब;イドリブ;伊德利卜;이들리브; +city::169577;Homs;Choms;Emesa;Gorad Khoms;Hims;Himsa;Homs;Homsas;Homsz;Houmousse;Hums;Humus;Kh'oms;KhIums;Khoms;QHS;h xms;himasa;hms;homsa;homseu;homsi;homusu;huo mu si;hwms;mdynt hms;Χομς;Горад Хомс;ХІумс;Хомс;Хьомс;Հոմս;חומס;حمص;مدينة حمص;ܚܡܨ;होम्स;ਹਿਮਸ;ฮอมส์;ჰომსი;Ḩimş;Ἔμεσα;ホムス;霍姆斯;홈스; +city::170017;Hamah;Epiphaneia;Epiphania;Hama;Hamah;Hamao;Hamath;Khama;hmah;hmat;Хама;حماة;حماه;Ḥamāh;Ḩamāh; +city::170063;Aleppo;ALP;Alep;Alepas;Alepo;Aleppe;Aleppo;Aleppu;Aleppó;Alèp;Berea;Beroea;Chalepi;Gorad Khaleb;Halab;Haleb;Haleba;Halep;Heleb;Hələb;Khaleb;Khaleb khot;Khalepion;Madinat Halab;Madīnat Ḩalab;Xalab;a lei po;aleppea;aleppo;allepo;areppo;halaba;hlb;xa lep po;Χαλέπι;Алеп;Алеппо;Горад Халеб;Халеб;Халеб хот;ХӀалаб;Хәлеб;Հալեպ;חאלב;حلب;ܚܠܒ;अलेप्पो;हलब;আলেপ্পো;ਹਲਬ;அலெப்போ;അലെപ്പോ;อะเลปโป;ალეპო;Ḥaleb;Ḩalab;アレッポ;阿勒颇;알레포; +city::170592;Douma;Douma;Duma;Dūmā;dwma;Дума;دوما; +city::170654;Damascus;Al-Sham;Al-Shām;An Damaisc;Cham;DAM;Damas;Damasc;Damasch;Damasco;Damascu;Damascus;Damasek;Damashq;Damasiko;Damask;Damask";Damaska;Damaskas;Damasko;Damaskos;Damaskosy;Damasku;Damaskus;Damaszek;Damaszkusz;Damašek;Dameski;Dammeseq;Damsyik;Dimaejk;Dimaesq;Dimashk;Dimashk al-Sham;Dimashk al-Shām;Dimashku;Dimashq;Dimeshki esh Sham;Dimishiq;Dimishku;Dimishq;Dimäjk;Dimäşq;Domas;Domás;Dàmáskù;Dəməşq;Esh Sham;Esh Shām;Gorad Damask;Kamakeko;Ndamako;Ndamáko;Sam;d mshq;da ma shi ge;damasaka;damasakasa;damaseukuseu;damaskas;damaskasa;damasukasu;dameska;damiska;dimisqu;dmshq;dmsq;drmswq;timisku;Şam;Δαμασκός;Горад Дамаск;Дамаск;Дамаскус;Дамаскъ;Димашкъ;Димишкъ;Димишқ;Դամասկոս;דמשק;د مشق;دمشق;دیمەشق;دەمەشىق;ܕܪܡܣܘܩ;ދިމިޝްޤު;दमास्कस;दमिश्क;দামেস্ক;ਦਮਸ਼ਕ;ଡାମାସକସ;திமிஷ்கு;ಡಮಾಸ್ಕಸ್;ദമാസ്കസ്;ดามัสกัส;དྷ་མ་སི་ཁོ་སི།;ဒမားစကပ်မြို့;დამასკი;ደማስቆ;ダマスカス;大馬士革;大马士革;다마스쿠스;𐌳𐌰𐌼𐌰𐍃𐌺𐍉/Damasko; +city::170794;Deir ez-Zor;Azaura;DEZ;Dair az-Zaur;Dair az-Zaŭr;Dajr az-Zaur;Dajr ez-Zaur;Dajr-ehz-Zaur;Dayr al-Zawr;Dayr al-Zor;Dayr az Zawr;Dayr az Zur;Dayr az Zūr;Dayr az-Zawr;Dayr uz-Zur;Deir Azzor;Deir Zzor;Deir al-Zor;Deir al-Zour;Deir el-Zor;Deir ez Zoar;Deir ez Zor;Deir ez Zoras;Deir ez-Zor;Dejr ez-Zor;Dejr-ehz-Zor;Dejr-ez-Zor;Der Ezzor;Deyr-el-Zor;Deyrizor;Deïr ez Zor;Nteir al-Zor;Ter Zor Der Zor Ter Zor;dai er zu er;deileuejeujoleu;deileuejoleu;deir-el-zori;derizoru;dyr alzwr;dyralzwr;dyrʾ zʿwrtʾ;Ντέιρ αλ-Ζορ;Дайр-эз-Заур;Дейр ез-Зор;Дейр-ез-Зор;Дейр-эз-Зор;Դեյր-էլ-Զոր;Տէր Զօր Դեր Զոր Ter Zor;דיר א-זור;دير الزور;دیر الزور;دیرالزور;ܕܝܪܐ ܙܥܘܪܬܐ;დეირ-ელ-ზორი;デリゾール;代尔祖尔;데이르에조르;데이르에즈조르; +city::170892;Darayya;Daraiya;Daraje;Daraya;Daraye;Darayya;Darayyah;Dareiya;Deraya;Dâraiya;Dārayyah;Dārayyā;Dārayā;Dāreiya;darya;Дарайе;داريّا; +city::170905;Dar'a;Adraa;Dar`a;Dar‘ā;Der`a;Deraa;Deraâ;Derua;Der‘ā;Деръа;درعا; +city::172082;I`zaz;A`zaz;Aazaz;Aazâz;Azaz;A‘zāz;E'zaz;Ezzaz;I`zaz;Izaz;I‘zāz;aʿzaz;Аазаз;Азаз;أعزاز;إعزاز; +city::172349;At Tall;Al-Tal;At Tall;Ett Tell;Tal;Tall;Tell;al-Tell;altl;التل; +city::172374;Ath Thawrah;Al Tabaqah;Al-Tabbaqah;Al-Thawra;At Tabaqah;At Tabqah;Ath Thawrah;Aţ Ţabaqah;Aţ Ţabqah;Madinat ath Thawrah;Madīnat ath Thawrah;Medinat Al Thawra;Revolution City;Tabaqah;Tabqa;Thawrah;altbqt;althwrt;thwrt;Ţabaqah;الثورة;الطبقة;ثورة; +city::172408;As Suwayda';Al-Sweida;As Suwayda';As Suwaydah;As Suwaydā’;Dionysia;Ehs-Suvejda;Es Suweida;Es Suweidiya;Es Suweidīya;Soueida;Soueïda;Suwaydah;Sweida;Эс-Сувейда;السويداء; +city::172503;As Safirah;Al-Safira;As Safirah;As Safīrah;Safir;Safira;Safirah;Safīrah;Sfaireh;Sfira;Sfire;Sfiré;Sfīra;alsfyrt;sfyrt;Şafīr;السفيرة;سفيرة; +city::172946;Ar Rastan;Al-Rastan;Ar Rastan;Arethousa;Arethus;El Rastane;Er Rastan;Rastan;Rastane;Rastâne;alrstn;الرستن; +city::172955;Ar Raqqah;Al-Rakka;Ar Raqqah;Ar-Rakka;Ar-Raqqah;Nicephorium;Rakka;Raqqa;Raqqah;alrqt;Ар-Ракка;الرقة; +city::173480;Al Mayadin;Al Mayadin;Al Mayādīn;Al-Mayadeen;Audattha;Mayadin;Mayadine;Mayādīn;Meyadin;Meyadine;Meyedine;Meyādīn;almyadyn;myadyn;الميادين;ميادين; +city::173576;Latakia;Al Ladhiqiyah;Al Lādhiqīyah;Al-Laziqiyah;El Ladhaqiye;El Ladhiqiya;El Lādhaqiyé;El Lādhiqīya;Gorad Latakija;LTK;Ladhiqiye;Ladikija;Ladikis;Ladikiya;Laodicea;Laodicea ad Mare;Laodicee;Laodicée;Laodikeia;Latakia;Latakieh;Latakija;Latakija shaary;Latakio;Latakiya;Lataqiae;Lataqiä;Lataquia;Lattakeia;Lattakia;Lattaquie;Lattaquié;Latʻakia;Lazikija;Lazkiye;Lázikíja;Lādikīja;alladhqyt;la ta ji ya;ladhqyh;ladhqyt;ladhqyہ;latakia;latakiya;ltqyh;ratakia;Əl-Laziqiyyə;Λαττάκεια;Горад Латакія;Латакия;Латакия шаары;Латакија;Латакія;Լաթակիա;לטקיה;اللاذقية;لاذقية;لاذقیه;لاذقیہ;लताकिया;ლათაკია;ラタキア;拉塔基亚;라타키아; +city::173811;Al Hasakah;Al Hasakah;Al Ḩasakah;Al-Hasakeh;El Haseke;Hasakeh;Hasijih;Hassetche;Hasskih;alhskt;الحسكة;Ḩasijih;Ḩasskih; +city::174018;Al Bab;Al Bab;Al Balo;Al Bāb;Al Bālo;Bab;Bâb;El Bab;El Bāb;albab;الباب; +city::174448;Albu Kamal;Abou Kemal;Abu Kamal;Abu Kemal;Abu Kemāl;Abu-Kamal';Abū Kamāl;Al-Bukamal;Al-bu-Kamal;Albu Kamal;Bukmal;Hindane;Hindané;abw kmal;albw kmal;Ālbū Kamāl;Абу-Камаль;أبو كمال;البو كمال; +city::934985;Mbabane;Embabane;Gorad Mbabaneh;Mabane;Mbaban;Mbabane;Mbabano;Mbabanė;Mbabàn;Mpampane;QMN;ababane;ambabane;ambabany;eumbabane;impapan;mbaban;mbabane;mbabanh;mbabyn;mbbnh;mo ba ben;mubabane;xam ba bane;Μπαμπάνε;Горад Мбабанэ;Мбабане;Մբաբանե;מבאבאנע;מבבנה;امبابانی;مبابان;مبابانه;مبابانێ;مبابین;अंबाबाने;ਅੰਬਾਬਾਨੇ;இம்பபான்;อัมบาบาเน;མ་པ་པན།;მბაბანე;ምባባኔ;ムババーネ;墨巴本;음바바네; +city::934995;Manzini;Bremersdorp;MTS;Maneini;Manzini;Manzinis;Manêini;man qi ni;manjini;mnzyny;Μανζίνι;Манзини;Манзіні;מנזיני;マンジニ;曼齐尼;만지니; +city::245785;Abeche;AEH;Abacher;Abeche;Abecher;Abese;Abeshe;Abeşe;Abešė;Abécher;Abéché;Gorad Abesheh;a bei xie;abeshe;abesye;abshy;Абеше;Горад Абешэ;أبشي;ابشی;アベシェ;阿贝歇;아베셰; +city::2425791;Sarh;Archambault;Fort-Archambault;SRH;Sagh;Sahr;Sarh;Sarkh;Shar;Сарх; +city::2427123;N'Djamena;Fort-Lamy;Lamy;N'Djamena;NDJ;Ndjamena;Ndjemena;Ndzamena;Ndzhamena;Ndżamena;Ndžamena;Njameno;Nĵameno;N’Djamena;N’Dj·amèna;Tzamena;Yamena;anjmyna;en jia mei na;eunjamena;ng'mnh;njamena;Τζαμένα;Нджамена;נג'מנה;أنجمينا;ንጃሜና;ンジャメナ;恩賈梅納;은자메나; +city::2427455;Moundou;Gorad Mundu;MQQ;Mondou;Mondu;Moundou;Moundu;Mundu;meng du;mun du;mundo~u;mundu;mwndw;Горад Мунду;Мунду;مؤندؤ;มูนดู;ムンドゥ;蒙杜;문두; +city::2363534;Tsevie;Tsevie;Tsevye;Tsévié;Tsévyé;Tzevie; +city::2364104;Sokode;Sokode;Sokodé;Sokodė;Sokonte;sokode;suo ke de;Σοκοντέ;Сокоде;سوکودے;ソコデ;索科德;소코데; +city::2365267;Lome;Gorad Lameh;LFW;Lome;Lomee;Lomeo;Lomé;Lomė;lome;luo mei;lwm;lwmh;lwmy;lwmyh;rome;Λομέ;Горад Ламэ;Ломе;Լոմե;לאמע;לומה;لوم;لومه;لومي;لوميه;لومې;لومے;لۆمێ;लोमे;ਲੋਮੇ;லோமே;โลเม;ལཱོ་མེ།;ლომე;ሎሜ;ロメ;洛美;로메; +city::2365560;Kpalime;Agome-Palime;Agomé-Palimé;Kpalime;Kpalimé;Palime;Palimé;pa li mei;帕利梅; +city::2366152;Kara;Kara;Lama;Lama-Kara;Кара; +city::2367568;Bassar;Basar;Bassar;Bassari;ba sa;Басар;巴萨; +city::2367886;Atakpame;Atakpame;Atakpamé;Atakpamė;a ta pa mei;atakeupame;atakupame;Ατακπαμέ;Атакпаме;اتاکپامے;アタクパメ;阿塔帕梅;아타크파메; +city::1117652;Ban Talat Yai;Talat Yai;Talat-Jai;Талат-Яи; +city::1150007;Trang;Amphoe Muang Trang;Changwat Trang;TST;Trang;trang;Транг;ตรัง; +city::1150275;Tha Maka;Amphoe Tha Maka;Tha Maka; +city::1150515;Surat Thani;Amphoe Ban Don;Amphoe Muang Surat Thani;Ban Dohn;Ban Don;Ban Makham Tia;Ban Makham Tir;Bandaun;Changwat Surat;Changwat Surat Thani;Makham Tia;Mueang Surat Thani;Suras;Surashtradhani;Surat Thani;Surathanis;Surattkhani;Szuratthani;URT;su le ta ni;sulastani;suratotani;thesbal nkhr surasʹdrthani;Сураттхани;סוראט טהאני;سورات تھانی;سورت تھانی;สุราษฎร์ธานี;เทศบาลนครสุราษฎร์ธานี;སུ་ར་ཊི་ཐ་ནི།;スラートターニー;素叻他尼;수랏타니; +city::1150954;Ratchaburi;Amphoe Muang Rat Buri;Changwat Rat Buri;Mondhol Rajburi;Muang Rajburi;Muang Ratburi;Mueang Ratchaburi;Rajburi;Rat Buri;Ratchaburi;rachburi;Ратчабури;ราชบุรี; +city::1151254;Phuket;Amphoe Muang Phuket;Bhuket;Changwat Phuket;HKT;Phuket;Phuketas;Pkhuket;Pxuket;Tongka;Tongkah;bu ji shi;fwkyt;phuket;pu ji shi;pukes;pukkes;pukkit;pwqt;tesaban'nakon・puketto;thesbal nkhr phuket;Пхукет;פוקט;فوكيت;پھوکیت;புக்கிட்;ภูเก็ต;เทศบาลนครภูเก็ต;པུ་ཁེཊ་གྲོང་ཁྱེར​།;テーサバーンナコーン・プーケット;布吉市;普吉市;푸껫;푸켓; +city::1151933;Nakhon Si Thammarat;Amphoe Muang Nakhon Si Thammarat;Changwat Nakhon Si Thammarat;Lakawn;Lakon;Ligor;Muang Nagorn Sridharmaraj;Muang Nakawn Sri Tamarat;Mueang Nakhon Si Thammarat;NST;Nagara Sridharmaraj;Nagor Sridhamaraj;Nagorn Sridharmrat;Nagorri Sridharmrat;Nakawn Sitamarat;Nakawn Sritamarat;Nakhaun Si Thammarat;Nakhon Si Tammarat;Nakhon Si Thammarat;Nakhon Si Thammarht;Nakhon Sritamarai;Nakhon Srithamarat;Nakhon Srithamrat;Nakhon Szi Thammarat;Nakhonsithamrat;Nakkhonsitkhammarat;Nakon;Nakon Si Tham Rat;Nakon Sitamarat;Nakon Sri Tammarat;Nakon Sritamaraj;Nakon Sritamarat;Nakorn Si Thamarat;Nakorn Sridamaraja;na kong shi tan ma le;nakonshitanmarato;nakonsitammalas;nkhrsrithrrmrach;thesbal nkhr nkhrsrithrrmrach;Накхонситхаммарат;נאקון סי טמרט;ناکھون سی تھامارات;نکھون سی تھاماراٹ;นครศรีธรรมราช;เทศบาลนครนครศรีธรรมราช;ན་ཁཱོན་སི་ཐམ་མ་ར་ཊི།;ナコーンシータンマラート;那空是贪玛叻;나콘시탐마랏; +city::1152473;Lampang;Amphoe Muang Lampang;Amphoe Mueang Lampang;Changwat Lampang;Changwat Muang Lampang;Changwat Muang Nagorn Lambang;LPT;Lakhon;Lakhon Lampang;Lampang;Lampangas;Muang Lakhon Lampang;Muang Lampang;Muang Nagorn Lambang;Muang Nakon Lampang;Mueang Lampang;Nakawn;Nakawn Lampang;Nakhon Lampang;Nakon Lampang;Nakorn Lampang;lampang;lamppang;lapang;lympyng;thesbal nkhr lapang;Лампанг;لامپانگ;لیمپینگ;ลำปาง;เทศบาลนครลำปาง;ལམ་པང་།;람빵; +city::1153081;Kanchanaburi;Changwat Kanchanaburi;Kanburi;Kanchana;Kanchanaburi;Kancsanaburi;Kanpuri;Moeang Kanchana Buri;Muang Kanchana Buri;kancanapuri;kanchanaburi;kanchanabwry;kaycnburi;kkanjjanabuli;qnznbwry;thesbal meuxng kaycnburi;Канчанабури;קנצנבורי;کانچانابوری;காஞ்சனபுரி;กาญจนบุรี;เทศบาลเมืองกาญจนบุรี;ཀཱན་ཅ་ན་བུ་རི།;カーンチャナブリー;깐짜나부리; +city::1153090;Kamphaeng Phet;Amphoe Muang Kamphaeng Phet;Amphoe Mueang Kamphaeng Phet;Changwat Kamphaeng Phet;Changwat Muang Kam Bheng Bhej;Gamphaeng Phet;Gampheang Phet;Kam Baeng Bejr;Kambheng Bhej;Kamphaeng Phet;Meuangkamphayng;Muang Kam Bheng Bhej;Muang Kam Phaeng Phet;Muang Kum Pang Pet;กำแพงเพชร; +city::1153269;Hua Hin;Amphoe Hua Hin;Ban Hua Hin;HHQ;Hau Hin;Hua Hin;King Amphoe Ban Hua Hin;King Amphoe Hua Hin;fuwahin;hawhin-pranburi;xaphex hawhin;หัวหิน-ปราณบุรี;อำเภอหัวหิน;フワヒン; +city::1153557;Chumphon;Amphoe Muang Chumphon;CJM;Champawn;Changwat Chumphon;Chumphaun;Chumphon;Chumpkhon;Chumpon;Chumporn;Csumphon;Cumphonas;Jumbhorn;Jumbor;Muang Champawn;Muang Choum Pon;Muang Chum Pon;Muang Chumporn;Muang Jum Bhorn;Mueang Chumphon;chumphr;chumpon;thesbal meuxng chumphr;Čumphonas;Чумпхон;چمپھون;ชุมพร;เทศบาลเมืองชุมพร;ཅུམ་ཕཱོན།;춤폰; +city::1153669;Chiang Rai;Amphoe Chiang Rai;Amphoe Muang Chiang Rai;CEI;Chang Rai;Changwat Chiang Rai;Changwat Muang Chiang Rai;Changwat Muang Jieng Rai;Chiang Rai;Chiangraj;Chiengrai;Ciangrajus;Cziang Raj;Jieng Rai;Muang Chiang Rai;Muang Chieng Rai;Muang Jieng Rai;Mueang Chiang Rai;Propinsi Chiang Rai;Thanh pho Chiang Rai;Thành phố Chiang Rai;Xieng Rai;cheiyngray;chianglai;chienrai;chyang rayy;qing lai;thesbal nkhr cheiyngray;zyʼng rʼy;Čiangrajus;Чианграй;ציאנג ראי;چیانگ رائی;เชียงราย;เทศบาลนครเชียงราย;ཆེང་རཱེ།;チエンラーイ;清萊;치앙라이; +city::1153671;Chiang Mai;Amphoe Muang Chiang Mai;CNX;Changwat Chiang Mai;Chiang Mai;Chiang-Maj;Chiangmai;Chiengmai;Cziang Maj;Kiangmai;Muang Chieng Mai;Muang Jieng Hmai;Mueang Chiang Mai;Xieng Mai;Zimme;Zimmé;chiangmai;chienmai;qing mai;Чианг-Май;צ'אנג מאי;צ'יאנג מאי;เชียงใหม่;แม่ริม เชียงใหม่;チエンマイ;清迈;清邁;치앙마이; +city::1155139;Ban Pong;Amphoe Ban Pong;Ban Pong;Pan-pong;banpong;Пан-понг;บ้านโป่ง; +city::1601579;Ban Mai;Ban Mai;บ้านใหม่; +city::1604870;Yala;Amphoe Mueang Yala;Amphoe Yala;Ban Yala;Changwat Yala;Jala;Muang Yala;Mueang Yala;Yala;yala;Яла;ยะลา; +city::1605215;Uttaradit;Amphoe Mueang Uttaradit;Changwat Muang Utaradith;Changwat Uttaradit;Muang Utaradit;Muang Utaradith;Outaradit;UTR;Utaradit;Utaraditas;Utaraditra;Uttaradit;Uttradit;cheng yi;thesbal meuxng xutrditth;uttaladis;xutrditth;Уттарадит;اٹاراڈٹ;อุตรดิตถ์;เทศบาลเมืองอุตรดิตถ์;程逸;우따라딧; +city::1605239;Udon Thani;Ban Dua Makeng;Ban Ma Keng;Ban Mak Khaeng;Bar Deua Ma Khong;Changwat Udaunthani;Changwat Udon Thani;Mak Khaeng;Mueang Udon Thani;UTH;Udaun Thani;Udon;Udon Tani;Udon Thani;Udonthani;Udonthanis;Udontkhani;Udorn;Udorndhani;Udornthani;thesbal nkhr xudrthani;udontani;wdwn tany;wu long ta ni;xudrthani;Удон Тани;Удонтхани;אודון תאני;اودون تھانی;ودون تاني;อุดรธานี;เทศบาลนครอุดรธานี;ཨུ་ཌོན་ཐ་ནི།;テーサバーンナコーン・ウドーンターニー;乌隆他尼;우돈타니; +city::1605245;Ubon Ratchathani;Changwat Muang Ubon;Changwat Ubon Ratchathani;Muang Ubol;Muang Ubon;Muang Ubon Ratcha-Thani;Muang Ubun;Mueang Ubon Ratchathani;Oubon;UBP;Ubol;Ubol Rachatani;Ubol Rajadhani;Ubolrajdhani;Ubon;Ubon Rachatani;Ubon Rachpani;Ubon Ratchathani;Ubon Ratczathani;Ubonrajathani;Ubonrajdhani;Ubonrajthani;Ubonratcathanis;Ubonratčathanis;awbwn ratshathany;tesaban'nakon・ubonrachatani;thesbal nkhr xublrachthani;ubonlaschatani;wu wen le cha ta ni;xublrachthani;ywbwn ratchatany;Убон Рачатані;أوبون راتشاثاني;ابون راتچاتھانی;اوبون راٹچاتھانی;یوبون راتچاتانی;อุบลราชธานี;เทศบาลนครอุบลราชธานี;ཨུ་བཱོན་ར་ཊི་ཅ་ཐ་ནི།;テーサバーンナコーン・ウボンラーチャターニー;乌汶叻差他尼;우본랏차타니; +city::1606033;Suphan Buri;Amphoe Muang Suphan Buri;Ban Tha Phi Liang;Changwat Suphan Buri;Muang Subharn;Muang Supan;Muang Suphan;Mueang Suphan Buri;Subhan Buri;Subharn;Sufan Buri;Supan;Supanburi;Supham Buri;Suphan Buri;Thaphi Liang;suphrrnburi;Суфан Бури;สุพรรณบุรี; +city::1606147;Songkhla;Amphoe Muang Songkhla;Changwat Songkhla;Monthon Nakhon Si Thamarat;Monthon Nakhon Si Thammarat;Muang Sawng Kla;Muang Songkla;SGZ;Sawng Kla;Senggora;Singgora;Singora;Singorra;Songkhla;Songkkhla;Songkla;Sung Kla;Thanh pho Songkhla;Thành phố Songkhla;sngkhla;song ka;song ka shi;songkeulla;swnjkhla;thesbal nkhr sngkhla;Сонгкхла;سونجخلا;سونگکھلا;สงขลา;เทศบาลนครสงขลา;སོང་ཁ་ལ།;宋卡;宋卡市;송클라; +city::1606250;Si Racha;Amphoe Si Racha;Amphu Sri Maha Raja;Ban Si Racha;Ban Sriracha;Si Racha;Sri Maha Raja;Sri Mahā Rājā;Sriracha;Srirachi;sriracha;ศรีราชา; +city::1606386;Sattahip;Amphoe Sattahip;Ban Sata Hib;Ban Satahip;Ban Sattahip;King Amphoe Sattahip;Satahib;Sattaheeb;Sattaheep;Sattahib;Sattahiep;Sattahip;sathib;สัตหีบ; +city::1606418;Saraburi;Ban Pak Phrieo;Changwat Sara Buri;Muang Sara Buri;Pak Phrieu;Pak Phrio;Pak Preo;Sita;Sraburi; +city::1606588;Samut Sakhon;Ban Maha Chai;Ban Tachin;Changwat Samut Sakhon;Dha-chin;Mahachai;Muang Samudh Sagorn;Muang Samut Sakawn;Muang Samut Sakhon;Mueang Sakhon Buri;Mueang Samut Sakhon;Mueang Tha Chin;Samudh Sagorn;Samut Sakhon;Smutsakhon;Taachin;Tachin;Tanchin;Tha Chin;smuthrsakhr;สมุทรสาคร; +city::1606590;Samut Prakan;Ban Pak Nam;Paakunamu;Pakham;Paknam;Samudh Prakarn;Samut;Samut Prakan;Samutprakan;Samutpraken;Smutprakan;samuttopurakan;smuthrprakar;Самутпракан;สมุทรปราการ;サムットプラーカーン; +city::1606790;Sakon Nakhon;Amphoe Muang Sakhon Nakhon;Ban That Choeng Chum;Changwat Muang Sakhon Nakhon;Changwat Sakon Nakhon;Muang Sakol Nakorn;Muang Sakon Lakon;Muang Sakon Nakawn;Muang Sakon Nakon;Mueang Sakon Nakhon;SNO;Sakhon Nakhon;Sakol;Sakol Nagorn;Sakol Nakorn;Sakon Nakawn;Sakon Nakhaun;Sakon Nakhon;Sakon Nakorn;Skol Nakon;Thatchoengchum;sklnkhr;สกลนคร; +city::1607017;Rayong;Rajong;Rayaung;Rayohng;Rayong;layong;luo yong shi;raywng;rayxng;thesbal nkhr rayxng;Районг;رایونگ;ระยอง;เทศบาลนครระยอง;རེ་ཡོང་།;羅勇市;라용; +city::1607508;Phra Pradaeng;Amphoe Bhra Pradeng;Amphoe Bhra Pradēng;Amphoe Phra Padaeng;Amphoe Phra Pradaeng;Bhra Pradeng;Khoan Khan;Muang Nagorn Khoean Khan;Muang Nakawn Khoan Khan;Muang Nakhon Khaun Khan;Muang Nakhon Khuan Khan;Nakhon Khuan Khan;Nakhon Khuen Khan;Phra Pradaeng;purapuraden jun;พระประแดง;อำเภอพระประแดง;プラプラデーン郡; +city::1607512;Phra Phutthabat;Amphoe Phra Phutthabat;Ban Khun Khlon;Bhra Bhudhabadh;Bhra Bhudhābadh;Khun Khlon;King Amphoe Phra Phutthabat;King Phra Phutthabat;Phra Phutthabat;Phra Phutthabet;phraphuththbath;พระพุทธบาท; +city::1607532;Phra Nakhon Si Ayutthaya;Ajuthaja;Ajuttkhaja;Amphoe Krung Kao;Amphoe Phra Nakhon Si Ayutthaya;Amphoe Rop Krung;Ayouthia;Ayudhya;Ayuthaya;Ayuthia;Ayuthya;Ayutia;Ayutthaya;Ayutthaya - phrankhrsrixyuthya;Ayutthaya - พระนครศรีอยุธยา;Ayutthia;Ayutya;Changwat Phra Nakhon Si Ayutthaya;Krung Kao;Monthon Ayutthaya;Phra Nakhon Si Ax Ayutthaya;Phra Nakhon Si Ayutthaya;phrankhrsrixyuthya;tesaban'nakon・puranakonshiayuttaya;thesbal nkhr phrankhrsrixyuthya;Аюттхая;พระนครศรีอยุธยา;เทศบาลนครพระนครศรีอยุธยา;テーサバーンナコーン・プラナコーンシーアユッタヤー; +city::1607708;Phitsanulok;Amphoe Muang Phitsanulok;Amphoe Mueang Phitsanulok;Bhisanulok;Bisanulok;Bisnulok;Changwat Phitsanulok;Muang Phitsanulok;Muang Pitsanulok;PHS;Philtsanuloke;Phisanulauk;Phitsanulok;Phitsanulokas;Phitszanulok;Pisanuloke;Pitsanoulok;Pitsanulok;Pitsanuloke;Pkhitsanulok;fytsanwlwk;peng shi luo;pis-sanullog;Пхитсанулок;فیتسانولوک;پھسٹانولوک;پھیتسانولوک;พิษณุโลก;เทศบาลนครพิษณุโลก;เมืองพิษณุโลก;ཕི་ཊི་ཙ་ནུ་ལོཀ།;彭世洛;핏사눌록; +city::1607737;Phetchabun;Amphoe Muang Phetchabun;Bhejaburn;Changwat Muang Bheia Burn;Changwat Muang Bhĕia Būrn;Changwat Muang Phetchabun;Changwat Phetchabun;Muang Bheia Burn;Muang Petchboun;Muang Phecha Bun;Muang Phetchabun;PHY;Pechabun;Petchabun;Phetchabun;Pkhetchabun;phechrburn;Пхетчабун;เพชรบูรณ์; +city::1608048;Pak Kret;Amphoe Pak Kret;Ban Pak Kret;Pak Kred;Pak Kret;pakkerd;ปากเกร็ด; +city::1608133;Mueang Nonthaburi;Non Buri;Nondaburi;Nondha Buri;Nonthaburi;Nontkhaburi;thesbal nkhr nnthburi;Нонтхабури;เทศบาลนครนนทบุรี; +city::1608232;Nong Khai;Amphoe Muang Nong Khai;Ban Mi Chai;Changwat Nang Khai;Changwat Nong Khai;Hnohnggai;Michai;Muang Nawng Kai;Muang Nong Khay;Mueang Nong Khai;Naung Khai;Nawng Kai;Nong Hai;Nong Kai;Nong Khai;Nongkkhaj;QJX;hnxngkhay;nongkai;nonkai;thesbal meuxng hnxngkhay;Нонгкхай;نونگ کھائی;หนองคาย;เทศบาลเมืองหนองคาย;ནོང་ཁའི།;ノーンカーイ;농카이; +city::1608527;Nakhon Sawan;Amphoe Muang Nakhon Sawan;Changwat Muang Nakhon Sawan;Changwat Nakhon Sawan;Muang Nagorn Sawarn;Muang Nakawn Sawan;Muang Nakhon Savan;Muang Nakhon Sawan;Mueang Nakhon Sawan;Nagara Sawan;Nagor Svarga;Nagorn Sawarn;Nakaun Sawan;Nakawan Sawn;Nakawn Sawan;Nakhaun Sawan;Nakhon Sawan;Nakhonsavanas;Nakkhonsavan;Naklon Sawan;Nakon Sawan;Nakorn Sawan;bei lan po;nakonsawan;nkhrswrrkh;thesbal nkhr nkhrswrrkh;Накхонсаван;نکھون سوان;นครสวรรค์;เทศบาลนครนครสวรรค์;ན་ཁཱོན་ས་ཝན།;ナコーンサワン;北欖坡;나콘사완; +city::1608529;Nakhon Ratchasima;Amphoe Muang Nakhon Ratchasima;Changwat Nakhon Rarchasima;Changwat Nakhon Rat Sima;Corat;Khorat;Korat;Koyat;Lungsod ng Nakhon Ratchasima;Muang Nakawn Rachasima;NAK;Nagara Rajasima;Nagor Rajashima;Nagor Rajasima;Nakhaun Rachasima;Nakhon Ratcasima;Nakhon Ratchasim;Nakhon Ratchasima;Nakhon Ratchsima;Nakhon Ratcsaszima;Nakhon Ratczasima;Nakhon Ratčasima;Nakhonratcasim;Nakhonratcasima;Nakhonratsima;Nakhonratčasim;Nakhonratčasima;Nakkhonratchasima;Nakonrajsima;Nakonratchasima;Nakorn Rajsima;a le;nakhwn ratshasyma;nakonlaschasima;nakonrachashima;nkhrrachsima;thesbal nkhr nkhrrachsima;Накхонратчасима;ناخون راتشاسيما;ناکھون راتچاسیما;نکھون راٹچاسیما;นครราชสีมา;เทศบาลนครนครราชสีมา;ན་ཁཱོན་ར་ཊི་ཅ་སི་མ།;នគររាជសីមា;ナコーンラーチャシーマー;呵叻;나콘랏차시마; +city::1608534;Nakhon Pathom;Amphoe Muang Nakhon Pathom;Changwat Nakhon Chai Si;Changwat Nakhon Pathom;Monthon Nakhon Chai Si;Mueang Nakhon Pathom;Nagara Pathom;Nagorn Pathom;Nakawn Patom;Nakhaun Pathom;Nakhon Chai Si;Nakhon Pathom;Nakkhonpatkhom;Nakon Patom;fu tong;nakhwn batwm;nakonpatomu;nakonppatom;nkhrpthm;thesbal nkhr nkhrpthm;Накхонпатхом;ناخون باتوم;ناکھون پاتھوم;นครปฐม;เทศบาลนครนครปฐม;ナコーンパトム;佛统;나콘빠톰; +city::1608900;Maha Sarakham;Amphoe Muang Maha Sarakham;Ban Khlong Khleng;Ban Lat;Ban Talat;Changwat Maha Sarakham;Maha Saragam;Maha Sarakam;Maha Sarakham;Mueang Maha Sarakham;Talat;Uthai Sarakham;mhasarkham;มหาสารคาม; +city::1609032;Lop Buri;Amphoe Muang Lop Buri;Ban Tha Hin;Changwat Lop Buri;Changwat Thahanbok Lop Buri;KKM;Lava Pura;Lavo;Lobh Buri;Lop Buri;Lopburi;Muang Lobh Buri;Muang Lopburi;Muang Xop Buri;Mueang Lop Buri;Tha Hin;lphburi;robburi;Лопбури;ลพบุรี;ロッブリー; +city::1609350;Bangkok;Amphoe Phra Nakhon;BKK;Ban'nkok;Bancac;Bancocum;Bancoque;Bancác;Banghok;Bangkok;Bangkok Metropolis;Bangkoka;Bangkòk;Banguecoque;Bankok;Bankokas;Bankoko;Banqkok;Changwat Phra Nakhon;Krung Thep;Krung Thep Maha Nakhon;Krung Thep Maha Nakhon Amon Rattanakosin Mahintarayutthaya Maha Dilok Phop Noppharat Ratchathani Buri Rom Udom Ratchaniwet Maha Sathan Amon Phiman Awatan Sathit Sakka Thattiya Witsanukam Prasit;Krungdeb;Man-kuk;Màn-kuk;Phra Nakhon;Siayuthia;The City of Angels;bainkaka;bainkoka;bamkoka;bangkog;bangkwk;bankeakk;bankoku;bankwk;bngqwq;bnkak;byankak;byankaka;camraata byankaka;krungtheph;krungthephmhankhr;krungtheph‡;man gu;penkak;Μπανγκόκ;Бангкок;Банкок;Баҥкок;Բանգկոկ;באנגקאק;בנגקוק;بانكوك;بانکوک;بانکۆک;بانګکوک;بانگكوك;بنکاک;बँकॉक;बैंकक;बैंकॉक;চাংৱাত ব্যাংকক;ব্যাংকক;ਬੈਂਕਾਕ;பேங்காக்;ಬ್ಯಾಂಕಾಕ್;ബാങ്കോക്ക്;බැංකොක්;กรุงเทพ;กรุงเทพมหานคร;กรุงเทพฯ;ບາງກອກ;པན་ཀོག;ဘန်ကောက်မြို့;ბანგკოკი;ባንኮክ;バンコク;曼谷;방콕; +city::1609395;Krathum Baen;Amphor Kathum Baen;Ban Krathum Baen;Ban Talat Kathum Baen;Kathum Baen;Krathu Baen;Krathum Baen;Krathumban;Talat Kathum Baen;กระทุ่มแบน; +city::1609610;Klaeng;Amphoe Klaeng;Ban Sam Yan;Ban Thang Kwian;Klaeng;Kleng;Klēng;Mueang Klaeng;Thang Kwian;ต.แกลง;แกลง; +city::1609776;Khon Kaen;Amphoe Muang Khon Kaen;Amphoe Phralap;Amphoe Pralap;Changwat Khon Kaen;Changwat Muang Khon Kaen;KKC;Kawn Ken;Khohn Ken;Khon Kaen;Khon Kan;Khon Khen;Khonkean;Khonken;Khonkenas;Khonkhaen;Kkhonkehn;Konkahen;Muang Kaun Gean;Muang Khaunkaen;Muang Khon Kaen;Mueang Khon Kaen;khxnkæn;kong jing;konkkaen;kun jing shi;Кхонкэн;קון קאן;کھون کائن;کھون کیئن;ขอนแก่น;เทศบาลนครขอนแก่น;เมืองขอนแก่น;坤敬市;孔敬;콘깬; +city::1609899;Khlong Luang;Amphoe Bang Wai;Amphoe Khlong Luang;Ban Bang Wai;Ban Khlong Song (3);Bang Wai;Khlong Luang;khlxnghlwng;คลองหลวง; +city::1610469;Kalasin;Amphoe Hlup;Amphoe Kalasin;Amphoe Lup;Amphoe Muang Kalasin;Ban Neur;Changwat Kalasin;Changwat Muang Kalasin;Kalasim;Kalasin;Kalasindhu;Lup;Muang Kalasim;Muang Kalasin;Muang Kalassim;Muang Kansin;Mueang Kalasin;kalsinthu;Каласин;กาฬสินธุ์; +city::1610780;Hat Yai;Amphoe Hat Yai;Ban Haad Yai;Ban Hat Yai;HDY;Haad Yai;Had Yai;Hat Yai;Hatjaj;Hatjajus;Khat Jai;Khatujaj;has-yai;hat yay;hatoyai jun;he ai;Хат Јаи;Хатъяй;האד-יאי;هات ياي;ہات یائی;หาดใหญ่;เทศบาลนครหาดใหญ่;ཧ་ཊི་ཡའི།;ハートヤイ郡;合艾;핫야이; +city::1611110;Chon Buri;Amphoe Muang Chon Buri;Baanburaisoi;Ban Bang Pla Soi;Ban Pla Sai;Ban Pla Soi;Bang Pla Soi;Bang Pla Soil;Changwat Chon Buri;Cholburi;Chon Buri;Chonburi;Chor Buri;Jilburi;Jīlburi;Muang Jol Buri;Muang Xonburi;Mueang Chon Buri;chlburi;Чонбури;ชลบุรี; +city::1611269;Chanthaburi;Amphoe Muang Chanthaburi;Canthaburis;Chandaburi;Chandha Buri;Changwat Chanthaburi;Chantaboun;Chantabun;Chantaburi;Chanthaburi;Chantkhaburi;Chentabun;Chiyandburii;Mueang Chanthaburi;canthburi;jjantabuli;thesbal meuxng canthburi;zhuang ta wu li;Čanthaburis;Чантхабури;چانتھابوری;จันทบุรี;เทศบาลเมืองจันทบุรี;ཅཱན་ཐ་བུ་རི།;庄他武里;짠타부리; +city::1611407;Chaiyaphum;Amphoe Muang Chaiyaphum;Ban Hin Tang;Chai Phum;Chaiaphum;Chaiapum;Chaiyaphum;Chaiyaphun;Chaiyapoom;Chajjapkhum;Chalyaphum;Changwat Chaiyaphum;Changwat Chaiyaphun;Jaibhum;Jaiyabhum;Jayabhumi;Muang Chaiyapum;Muang Jaiyabhum;Tchaiapoum;chayphumi;Чайяпхум;ชัยภูมิ; +city::1614295;Phatthaya;Ban Hat Phatthaya (2);Ban Phatthaya;PYX;Pataja;Pattajja;Pattaya;Phattaya;Phatthaya;Port Phattaya;ba da ya;pataya;pattaya;phathya;Патая;Паттайя;พัทยา;パッタヤー;芭達亞;파타야; +city::1617111;Ban Lam Luk Ka;Lam Luk Ka;Luk Ka;Lūk Ka; +city::1619434;Bang Kruai;Amphoe Bang Kruai;Amphoe Bang Yai;Ban Bang Yai;Bang Krai;Bang Kruai;Bang Yai;bangkrwy;บางกรวย; +city::1220253;Istaravshan;Bundzhikat;Istaravchan;Istaravsan;Istaravsanas;Istaravshan;Istaravsjan;Istaravson;Istaravŝan;Istaravšan;Istaravšanas;Istaravšon;Istaravșan;Istarawschan;Istarawshan;Istarawszan;Ura-Tyube;Uroteppa;astrwshn;iseuteulabeusyan;isutarafushan;yi si ta la fu shang;İstərövşən;Ŭroteppa;Істаравшан;Истаравшан;Истәраушан;استروشن;イスタラフシャン;伊斯塔拉夫尚;이스트라브샨; +city::1220747;Qurghonteppa;KQT;Kurgan Tjube;Kurgan-Tyube;Qurghan Tyube;Qurghonteppa;Qurghān Tyube;Qŭrghonteppa;Курган Тюбе;Қӯрғонтеппа; +city::1221194;Kulob;Kulab;Kuljab;Kulob;Kulyab;Kŭlob;TJU;Куляб;Кӯлоб; +city::1221874;Dushanbe;DYU;Djuschambe;Doesjanbe;Douchanbe;Douchanbé;Dusanbe;Dusanbeo;Duschanbe;Dushambe;Dushanbe;Dusjanbe;Duszanbe;Duŝanbeo;Duşanbe;Dušanbe;Dušanbė;Dušhanbe;Dyushambe;Düşənbə;Jushambe;Ntousanmpe;Stalinabad;do~ushanbe;du shang bie;dusyanbe;dwshnbh;dwsnbh;Ντουσάνμπε;Душанбе;דושנבה;دوشنبه;ዱሻንቤ;ドゥシャンベ;杜尚别;두샨베; +city::1514879;Khujand;Choedzjand;Chudschand;Chudzandas;Chudzjand;Chudžandas;Hodjent;Hudzand;Hudžand;Khodjent;Khodyent;Khodzhent;Khojend;Khudzhand;Khujand;Khuzhant;Khŭjand;Kojend;LBD;Leninabad;Leninobod;Ursaten;Xo'jand;Xoʻjand;hojendo;khjnd;ku zhan;Ходжент;Худжанд;Хужант;Хуҷанд;Хӯҷвнд;خجند;ホジェンド;苦盏; +city::1514891;Konibodom;Kanibadam;Konibodom;Konibodomas;Qənibadam;kan badam;kany badam;ke ni bo duo mu;konibodom;Кoнибодом;Канибадам;Канібадам;Конибодом;کان بادام;کانی بادام;科尼博多姆;코니보돔; +city::1645457;Dili;DIL;Delhi;Dilhi;Dili;Dili khot;Dilis;Dilli;Dilly;Dilo;Dily;Díli;Gorad Dyli;Nova Dili;Ntili;di li;dili;dilli;diri;dyly;tili;Ντίλι;Горад Дылі;Дили;Дили хот;Ділі;Դիլի;דילי;دىلى;ديلي;دیلی;ڈلی;दिली;দিলি;ਦੀਲੀ;டிலி;ಡಿಲಿ;ദിലി;ดิลี;དྷི་ལི།;ဒီလီမြို့;დილი;ディリ;帝力;딜리; +city::161616;Balkanabat;BKN;Balkanabad;Balkanabat;Balkanabatas;Bolqonobod;Nebit-Dag;Nebitdag;Neftedag;ba er kan na ba de;balaqanabata;balkanabateu;barukanabato;blkhan abad;Балканабат;Небит-Даг;بلخان آباد;بلخان‌آباد;बलक़ानाबात;ბალკანაბადი;バルカナバート;巴尔坎纳巴德;발카나바트; +city::162183;Ashgabat;ASB;Achgabat;Achkhabad;Aschabad;Aschabadas;Aschchabad;Aschgabat;Asgabat;Asgabata;Asgabate;Asgabato;Ashabad;Ashabat;Ashgabat;Ashkabad;Ashkhabad;Ashkhabad osh;Ashkˌobod;Ashqabad;Ashxabad;Ashxobod;Asjabad;Asjchabad;Asjchabat;Asjkhabad;Askabad;Askabat;Askhabad;Asnkampat;Asqabad;Asxabad;Aszchabad;Aŝgabato;Aşgabat;Aşkabat;Aşqabad;Aşğabat;Ašchabad;Ašchabadas;Ašgabat;Ašgabata;Ašhabad;Așgabat;GIashkuabad;Gorad Ashgabad;Poltoratsk;a shen ha ba de;acukapat;asagabata;asakhabada;asgabad;asgabada;asgabat;ashigabato;ashk abad;ashkhabadi;asigabateu;asqabada;asyuhabateu;xa chka bat;yashkhabad;ʼsgbʼt;ʿەshqabad;Ασγκαμπάτ;Ашгабат;Ашкабад;Ашхабад;Ашхабад ош;Ашқобод;ГІашкъабад;Горад Ашгабад;Աշխաբադ;אשגאבאט;אשגבאט;ئاشخاباد;اشک آباد;عاشق‌آباد;عشق آباد;عشق اباد;عشق‌آباد;عەشقاباد;अश्क़ाबाद;अश्गाबाद;আশখাবাদ;ਅਸ਼ਗ਼ਾਬਾਤ;அசுகாபாத்;ಅಶ್ಗಾಬಾತ್;അഷ്ഗാബാദ്;อาชกาบัต;ཨ་ཧྲི་ཁ་པད།;აშხაბადი;አሽጋባት;アシガバート;阿什哈巴德;아슈하바트;아시가바트; +city::601594;Turkmenbasy;Gorad Turkmenbashy;KRW;Krasnovodsk;Krasnowodsk;Krassnowodsk;Tourkmenmpasi;Tuerkmenbasi;Tuerkmenbasy;Turkmanboshi;Turkmenbachi;Turkmenbashi;Turkmenbashy;Turkmenbasi;Turkmenbasis;Turkmenbasy;Turkmenbaszy;Turkmenbaši;Turkmėnbašis;Türkmenbashy;Türkmenbaşy;Türkmenbaşî;Türkmenbaşı;Türkmənbaşı;torukumenbashi;trkman bashy;trkmanbashy;trkmnbashy trkmanstan;tu ku man ba xi;tuleukeumenbasi;turkmenbashi;Τουρκμένμπασι;Горад Туркменбашы;Красноводск;Туркменбаши;Туркменбашы;Туркменбаші;Төрекмәнбашы;Թուրքմենբաշի;טורקמנבאשי;تركمانباشي;ترکمان باشی;ترکمنباشی، ترکمانستان;ترکمن‌باشی;თურქმენბაში;トルクメンバシ;土庫曼巴希;투르크멘바시; +city::601734;Dasoguz;Dashhowuz;Dashkhovuz;Dashoguz;Dashowuz;Dasoguz;Dasoguzas;Daszoguz;Daşoguz;Daşoğuz;Dašhowuz;Dašoguz;Dašoguzas;Dașoguz;Gorad Dashaguz;TAZ;Tashauz;Tasjauz;Toshhovuz;da sha gu ci;dash awghwz;dashoguzi;dashoguzu;dashwghwz;dasoguza;dasyogujeu;Горад Дашагуз;Дашогуз;داش اوغوز;داشوغوز;داش‌اغوز;दाशोग़ुज़;დაშოგუზი;ダショグズ;达沙古兹;다쇼구즈; +city::1218239;Tejen;Tedjen;Tedzen;Tedzhen;Tedżen;Tejen;Tejend;Теджен; +city::1218667;Mary;MYP;Maras;Margiana;Mari;Mary;Mary shaary;Marı;Merv;ma lei;ma ri;mali;mari;maru;mary;mary trkmanstan;mrw;Мари;Мары;Мары шаары;ماری;ماری، ترکمانستان;مرو;मरी;มารี;მარი;マル;马雷;마리; +city::1219649;Turkmenabat;CRZ;Chardzha;Chardzhev;Chardzhou;Chardzhui;Chardzhuy;Charjew;Charjou;Chärjew;Leninsk-Turkmenski;Leninsk-Turmenski;Nov Charjui;Nov Chārjui;Novo Chardzhou;Novo-Chardzhuy;Tuerkmenabat;Turkmanobod;Turkmenabad;Turkmenabat;Turkmenabatas;Türkmenabat;Türkmənabad;te~yurukumenabato;trkman abad;trkmn abad;tu ku man na ba de;tuleukeumenabateu;turkamenabata;turkmenabadi;Туркменабад;Туркменабат;Түркменабат;Չարզոու;ترکمان آباد;ترکمن آباد;ترکمن‌آباد;तुर्कमेनाबात;თურქმენაბადი;テュルクメナバート;土庫曼納巴德;투르크메나바트; +city::1219762;Bayramaly;Bairam Ali;Bajramali;Bayram-Ali;Bayramaly;Байрамали; +city::2464470;Tunis;Gorad Tunis;TUN;Tinis;Tiwnis;Tuenis;Tuinis;Tunes;Tunes tamaneɣt;Tunez;Tunis;Tunis khot;Tunis shaary;Tunis-Ville;Tunisa;Tunisas;Tunisi;Tunisin Orn;Tunisz;Tunixi;Tuniz;Tunizo;Tunus;Tynida;Tùnis;Tùnisi;Túinis;Túnez;Túnis;Túnixi;Túniz;Tûnis;Tünis;chunisu;tu ni si;tu ni si shi;tunis;tunis's;tunisa;twiniseu;twns;twnys;twwns;tyunisa;Τύνιδα;Горад Туніс;Тунис;Тунис хот;Тунис шаары;Тунисин Орн;Туніс;Թունիս;תוניס;تونس;تونس شہر;توونس;تۇنىس شەھىرى;ٹیونس نگر;ܬܘܢܣ;ट्युनिस;ट्यूनिस;ਤੂਨਿਸ;தூனிஸ்;ടൂണിസ്സ്;ตูนิส;ཊུ་ནིསི།;ტუნისი;ቱኒስ;チュニス;突尼斯;突尼斯市;튀니스; +city::2464701;Tataouine;Foum Tatahouine;Foum Tataouine;Fum Tatawin;Fum Taţāwīn;Fumm Tattauin;Tatahouine;Tatahouïne;Tataouine;Tatauin;Tatavin;Tatavinas;Tatawin;Taţāwīn;tai ta wen;tatau-in;tatauinu;ttawyn;Татавин;Татауїн;تطاوين;تطاوین;タタウイヌ;泰塔溫;타타우인; +city::2464915;Sousse;Gorad Sus;Hadrumetum;QSO;Sousa;Souse;Soussa;Sousse;Sus;Susa;Susah;Susas;Suss;Sussa;Szusza;Szúsza;Súsa;Sūsah;su sai;suseu;susi;susu;swsh;swst;xi lan ni;Горад Сус;Сус;Сусс;Սուս;סוסה;سوسة;سوسه;სუსი;スース;昔兰尼;苏塞;수스; +city::2467246;Skanes;Chekanes;Saqanis;Skanes;Şaqānis; +city::2467454;Sfax;Gorad Sfaks;SFA;Safakes;Safakis;Safaqis;Sfaks;Sfaksas;Sfakso;Sfaqes;Sfax;Sfvks;Szfaksz;Taparura;Thaenae;s fak s;seupagseu;sfaqs;si fa ke si;spaksi;spqs;sufakkusu;Şafāqis;Σφαξ;Горад Сфакс;Сфакс;Сфвкс;ספקס;صفاقس;สฟักซ์;სფაქსი;Ṣfaqes;スファックス;斯法克斯;스팍스; +city::2468353;Gafsa;Capsa;GAF;Gafsa;Gafsah;Gafso;Gafşah;Justiniania;Kafsa;Qafsah;Qafşah;gafusa;gapeusa;jia fu sa;kaf sa;qfsh;qfst;vfst;Κάφσα;Гафса;גאפסה;قفصة;قفصه;ڤفصة;กัฟซา;ガフサ;加夫薩;가프사; +city::2468369;Gabes;Abes;GAE;Gabes;Gabesas;Gabis;Gabès;Gābis;Kabis;Kābis;Nkampes;Qabes;Qabis;Qābis;Tacapae;Tacape;gabeseu;gabesu;jia bei si;ka bæs;qabs;vabs;wlayt qabs;Γκαμπές;Габес;قابس;ولاية قابس;ڤابس;กาแบ็ส;ガベス;加貝斯;가베스; +city::2468579;Nabeul;Nabeul;Naboel;Nabul;Nābul;nabl;Набул;نابل; +city::2468925;Midoun;Midoun;Midun;Mīdūn;Мидун; +city::2469140;Msaken;M'saken;Masakin;Masākin;Msaken;Msaker;msakn;Мсакен;مساكن; +city::2469473;Medenine;Madanin;Madanīn;Medenin;Medenina;Medeninas;Medenine;Mednin;Mentenin;Médenine;mdnyn;medeunin;mei de ning;Μεντενίν;Меденин;Меденін;مدنين;مدنین;梅德寧;메드닌; +city::2470088;Jendouba;Dzhenduba;Jendouba;Jundubah;Jundūbah;Souk el Arba;Souq el Arba;Suq al Arba`a';Sūq al Arba‘ā’;jndwbt;Джендуба;جندوبة; +city::2470173;Zarzis;Dzardzis;Dzsardzsisz;Dzsardzsísz;Dżardżis;Jarjis;Jarjīs;Zarzia;Zarzis;Zerzis;jaleujiseu;jie er ji si;jrjys;zarujisu;Зарзис;Зарзіс;جرجيس;جرجیس;ザルジス;傑爾吉斯;자르지스; +city::2470384;Houmt Souk;Djerba;Hawmat as Suq;Houmet Es Souk;Houmet Essouk;Houmt El Souk;Houmt Souk;Houmt Souq;Humk-Suk;Humt-Suk;Khumt-Suk;hao mai te su ge;hwmh alswq;hwmt alswq;Хумт-Сук;حومة السوق;حومه السوق;حومۃ السوق;Ḩawmat as Sūq;豪邁特蘇格; +city::2470656;La Goulette;Chalk el Uedas;El Aouina;Goleta;Goletta;Goulette;Halk el Oued;Halq al Wadi;Halq el Oued;Khal'k-ehl'-Uehd;La Goleta;La Goletta;La Gouletta;La Goulette;La-Gulet;hlq alwady;la gwlyty;lagulleteu;lh gwlt;Ла-Ґулєт;Хальк-эль-Уэд;לה גולט;حلق الوادي;حلق الوادی;لا گولیتی;Ḩalq al Wādī;ラ・グレット;라굴레트; +city::2472479;Ben Arous;Ben Arous;Ben Arus;Ben Arusas;Ben-Arus;Bin Arous;Bin Arus;Bin `Arus;Bin ‘Arūs;ben a lu si;ben-aluseu;Μπιν Αρούς;Бен-Арус;بن عروس;本阿鲁斯;벤아루스; +city::2472706;Bizerte;Banzart;Biserta;Bizerta;Bizerte;Hippo Diarrhytus;Hippou Aksa;QIZ;bi sai da;bijeleute;bizeruto;bnzrt;byzrth;Μπιζέρτα;Бизерта;Бизерта қаласы;Бізерта;ביזרטה;بنزرت;ビゼルト;比塞大;비제르테; +city::2472774;Beja;Bace;Badza;Badża;Badža;Bajah;Batza;Bedja;Bedzha;Beja;Béja;Bājah;ba jie;bajh;bajt;beja;Μπατζά;Беджа;باجة;باجه;巴杰;베자; +city::2473247;Ariana;Ar'jana;Ariana;Arjana;Aryana;Aryanah;Aryānah;El Ariana;L'Ariana;L’Ariana;ai er ya nai;aliana;aryanh;aryant;aryant‎;Αρυάνα;Арьяна;Аряна;أريانة;أريانة‎;اریانه;艾尔亚奈;아리아나; +city::2473449;Kairouan;Al Qayrawan;Al Qayrawān;Al-Kayrawan;Al-Kayrawān;Al-Qayrawan;Al-Qayrawān;Cairuao;Cairuão;Kairouan;Kairuan;Kairuanas;Kairuán;Kairwan;Kajruan;Kajruano;Kayravan;Keruan;QKN;Qairawan;Qairawān;Qairouan;Qairwan;Qayrawan;Qayruvon;alqyrwan;kai lu wan;kaileuwan;keruan;qyrwan;Καϊρουάν;Кайруан;Қайруан қаласы;קירואן;القيروان;قیروان;კაირუანი;ケルアン;凯鲁万;카이르완; +city::2473457;Kasserine;Al Kasrayn;Al Qasrayn;Al Qaşrayn;Al-Kasrajn;Kaserin;Kaserinas;Kassarin;Kasserin;Kasserine;Qasserine;alqsryn;ka sai lin;kaselin;kasurinu;Αλ Κασράυν;Касерін;Кассерин;القصرين;القصرین;カスリーヌ;卡塞林;카세린; +city::2473493;Monastir;Al Munastir;Al Munastīr;El Menstir;Gorad Manascir;Hadrumetum;MIR;Monastir;Monastyr;Monastyras;Monastır;Monasztir;Munastir;Munastır;Ruspina;almnstyr;mnstyr;mnstyr tywns;mo na si ti er;monaseutileu;monasutiru;Μοναστίρ;Горад Манасцір;Монастир;Монастір;Մոնաստիր;المنستير;المنستیر;منستير;منستیر، تیونس;მონასტირი;モナスティル;莫纳斯提尔;모나스티르; +city::2473499;La Mohammedia;Al Muhammadiyah;Al Muḩammadīyah;La Mohammedia;Mohamedia;Mohamedla;Mohammedia; +city::2473540;Al Marsa;Al Marsa;Al Marsá;El Marsa;La Marsa; +city::2473744;Hammamet;Al Hammamat;Al Ḩammāmāt;Al-Hammamat;Gorad Khamamet;Hamametas;Hammamet;Khamamet;Khammamet;alhmamat;ha ma ma te;hammameteu;hanmametto;hmamat tywns;Горад Хамамет;Хамамет;Хаммамет;الحمامات;حمامات، تیونس;ハンマメット;哈马马特;함마메트; +city::2473747;El Hamma;Al Hammah;Al Ḩāmmah;Ehl'-Khamma;El Hamma;El Hamma de l'Arad;El Hamma de l’Arad;Эль-Хамма; +city::2581754;Douane;; +city::296173;Yuksekova;Dize;Gever;Juksekova;YKO;Yueksekova;Yuksekova;Yusekova;Yüksekova;Yüsekova;yu ke sai ke wa;ywksk awwa;ywkskwfa;ywksykwwa;Йӱксекова;Юксекова;ضلع یکسیکووا;يوكسكوفا;گەڤەر;یوکسک اووا;یوکسیکووا;یوک‌سکوا;于克塞科瓦; +city::296562;Yozgat;Gioznkat;Jozgat;Jozgatas;Saralus;Yozgad;Yozgat;Yozqat;Yuzgat;iozgati;yojeugateu;yozgata;yozugato;yue zi jia te;ywzgat;ywzghad;ywzghat;ywzgt;Γιοζγκάτ;Йозгат;Յոզղատ;يوزغات;یوزغاد;یوزگات;یوزگت;योज़्गत;იოზგათი;ヨズガト;約茲加特;요즈가트; +city::298033;Viransehir;Antoninopolis;Veeranshahr;Viransehir;Viranshekhire;Viranşehir;Wiranschehir;Вираншехире; +city::298117;Van;Gorad Van;Thospia;Urartu;VAN;Van;Van i Tyrkia;Vana;Vanas;Wan;ban;bhyana;fan cheng;van;vani;vu~an;wan;wan trky;Βαν;Ван;Горад Ван;Վան;ואן;وان;وان، ترکی;भ्यान;வான்;วาน;ვანი;ヴァン;凡城;반; +city::298299;Usak;Flaviopolis;Gorad Ushak;Ouchak;Ousak;Temenothyrae;USQ;Usak;Usakas;Uschak;Ushak;Ushaq;Uşak;Ušakas;awshak;usaka;ushaki;ushaku;usyakeu;wu sha ke;Ουσάκ;Горад Ушак;Ушак;أوشاك;اوشاک;عشاق;ਉਸ਼ਾਕ;უშაქი;ウシャク;烏沙克;우샤크; +city::298333;Sanliurfa;Antiocheia;Edesa;Edessa;Ehdessa;Orfa;Ourfa;SFQ;Sanliurfa;Urfa;Urfeh;Şanlıurfa;Αντιόχεια;Эдесса; +city::298806;Turgutlu;Caesarea Trocetta;Cassaba;Kasaba;Turgutlu; +city::298935;Torbali;Tepekoey;Tepeköy;Torbali;Torbaly;Torbalı;Торбалы; +city::299545;Tavsanli;Taushanli;Tavsanli;Tavşanlı; +city::299582;Tatvan;Tatvan;Татван; +city::299817;Tarsus;Antiochia ad Cydnum;Gorad Tarsus;Tars;Tarsas;Tarse;Tarso;Tarson;Tarsos;Tarsous;Tarsus;Tarsus i Mersin;Tersus;da shu;taleususeu;tarsusi;tarsws;tarususu;trsws;trsws mrsyn;Ταρσός;Горад Тарсус;Тарс;Тарсус;Տարսոն;טרסוס;تارسوس;ضلع ٹارسس;طرسوس;طرسوس، مرسین;თარსუსი;タルスス;大數;타르수스; +city::300352;Sorgun;Buyukkohne;Büyükköhne;Kohne;Köhne;Sorgun;Sorgune;Yesilova;Yeşilova;Соргуне; +city::300371;Soma;Distretto di Soma;Germe;Soma;Soma i Tyrkia;Somy;soma;suo ma;swmh;Σόμα;Сома;Сомы;סומה;ضلع سوما;ソマ;索馬;소마; +city::300399;Soeke;Sjoke;So'ke;Sok;Soke;Sokia;Söke;se kai;swkh;Сок;Соьке;Сёке;Сӧке;سوکه;瑟凱; +city::300614;Siverek;Severek;Siverek;Sivereke;Suverek;Сивереке; +city::300619;Sivas;Gorad Sivas;Megalopolis;Sebastea;Sebastia;Sevas;Sevasteia;Sewas;Sivas;Sivasas;Siwas;Sêwas;VAS;sibaseu;sivasi;su~ivu~asu;sywas;sywws;xi wa si;Σεβάστεια;Горад Сівас;Сивас;Сівас;Սեբաստիա;סיווס;سيواس;سیواس;سێواس;სივასი;スィヴァス;錫瓦斯;시바스; +city::300640;Sirnak;Shirnak;Sirnak;Şırnak;Ширнак; +city::300796;Silvan;Farqin;Farqîn;Martyropolis;Miyafarkin;Sil'van;Siliwan;Silvan;Sıliwan;farqyn;myafarqyn;sylwan;sylwan dyar baqr;xi er wan;Силван;Сильван;سیلوان;سیلوان، دیار باقر;فارقین;ميافارقين;錫爾萬; +city::300797;Silopi;Girgimac;Girgimaç;Girikamo;Girikoma;Sil'opi;Silopi;Sil’opi;Силопи; +city::300808;Silifke;Selefke;Selefkeh;Seleucia;Seleucia ad Calycadnum;Silifka;Silifke;Sılıfka;shirifuke;slwkyh;sylyfky;xi li fu kai;Силифке;سلوکیه;سيليفكى;ضلع سلیفکے;シリフケ;錫利夫凱; +city::300822;Siirt;Gorad Siirt;SXZ;Sairt;Sert;Sgerd;Siirt;Sirt;Sirtas;Sêrt;siileuteu;siirti;su~iiruto;syrt;xi er te;Горад Сіірт;Сиирт;Сирт;Сіїрт;Սղերդ;سعرد;سیرت;سێرت;სიირთი;スィイルト;錫爾特;시이르트; +city::301010;Seydisehir;Seydisehir;Seydişehir; +city::302043;Salihli;Salihli; +city::302355;Reyhanli;Airandji;Airanndji;Airinge;Ayranci;Aïrandji;Rayhaniyah;Rayḩānīyah;Rehaniye;Rejkhanly;Reyhaniye;Reyhanli;Reyhanlı;`Ayranj;ryhanyt;Рейханлы;ريحانية;‘Ayranj; +city::302525;Polatli;Polath;Polatli;Polatly;Polatlî;Polatlı;bo la te lei;pwlatly;Полатли;Полатлы;ضلع پولاٹلی;پولاتلی;波拉特勒; +city::302819;Patnos;Patnos; +city::303195;Osmaniye;Cebelibereket;Gebelibereket;Gorad Asmanie;Kinikan;Osmanie;Osmanigie;Osmanije;Osmanijė;Osmaniye;Osmaniyə;ao si man ni ye;oseumaniye;osmanie;osumanie;Οσμανίγιε;Горад Асманіе;Османие;Османије;Османіє;אוסמניה;אסמאניע;عثمانية;عثمانیه;عثمانیہ;عثمانیے;ოსმანიე;オスマニエ;奧斯曼尼耶;오스마니예; +city::303700;OEdemis;Eudemish;Hypaepa;OEdemis;Odemis;Ödemiş; +city::303750;Nusaybin;Antiocheia;Nasabina;Nisibin;Nisibis;Nissibine;Nusaybin;Nuseybin;Nuzajbin;Αντιόχεια;Нузайбин; +city::303798;Nizip;Nezip;Nizip;Nizipe;Низипе; +city::303827;Nigde;Gorad Nijdeh;Nigdah;Nigde;Nigdeh;Nigdi;Niide;Niğde;Niğdə;ni dai;nide;nigde;nyghdh;nyghdt;Νίγδη;Горад Нійдэ;Нигде;نيغدة;نگدے;نیغده;نیغدے;ნიგდე;ニーデ;尼代;니데; +city::303831;Nevsehir;Muskara;Muşkara;NAV;Nevsechir;Nevsehir;Nevshehr;Nevshekhir;Nevşehir;Nevşəhər;nebeusyehileu;nei fu xie xi er;nevshehiri;nevushehiru;nwshhr;Νεβσεχίρ;Невшехир;نو شہر;نوشهر;نیوشہر;ნევშეჰირი;ネヴシェヒル;內夫謝希爾;네브셰히르; +city::303873;Nazilli;Gorad Nazili;Nasly;Nazili;Nazilis;Nazilli;Pazarkoy;Pazarköy;na ji li;nazyly;Горад Назілі;Назили;Назилли;نازیلی;納濟利; +city::304081;Mus;MSR;Mus;Mush;Muş;Mûş;mu shen;mushi;mushu;musyu;mwsh;mwwsh;Муш;Մուշ;موش;مووش;მუში;ムシュ;穆什;무슈; +city::304382;Midyat;Estil;Medeat;Mid'jat;Midyad;Midyat;Mityat;mdyad;mdyat;mdyd;mi di ya te;mydyat;Мидьят;Мідьят;ضلع مدیات;مديات;مدیاد;میدیات;ܡܕܝܕ;米迪亞特; +city::304531;Mercin;Icel;Mersin;Mersina;Mersine;Merson;Mersyna;Myrte;Mêrsîn;Zephyrium;İçel;Μερσίνη;Мерсин; +city::304612;Menemen;Distretto di Menemen;Menemen;Menemeni;Temnos;Менемен;مینےمن; +city::304797;Mardin;MQM;Marde;Mardin;Marntin;Merdin;Mêrdin;Mêrdîn;ma er ding;maleudin;mardini;mardn;mardyn;marudin;mrdyn;Μαρντίν;Мардин;Мардін;Մարդին;ماردن;ماردين;ماردین;مێردین;ܡܪܕܝܢ;მარდინი;マルディン;馬爾丁;마르딘; +city::304827;Manisa;Magnesia;Magnesia ad Sipylum;Magnesia am Sipylos;Magnisiyah;Magnēsıa;Mahnisa;Manisa;Manissa;Sarouhan;Saruhan;Маниса; +city::304854;Manavgat;Manavgat;Манавгат; +city::304922;Malatya;Gorad Malatja;MLX;Malat'ja;Malateia;Malatia;Malatija;Malatiyah;Malatja;Malatya;Meleti;Meletiye;Meletî;Melitene;ma la di ya;malatia;mallatia;maratiya;mltyh;mltyt;Μαλάτεια;Горад Малатя;Малатия;Малатија;Малатья;Մալաթիա;מלטיה;مالاطیہ;ملطية;ملطیه;مەلەدی;მალათია;マラティヤ;馬拉蒂亞;말라티아; +city::305268;Kutahya;Cotiaeum;Cotyaeum;Gorad Kjutakhja;KZR;Kioutacheia;Kiutahija;Kjutakh'ja;Kjutakhija;Kjutakhja;Kuetahiya;Kuetahj;Kuetahya;Kutahiyah;Kutahya;Kutaia;Kutakh'ja;Kutakhja;Kutaya;Kütahiya;Kütahj;Kütahya;kutahia;kwitahia;kwtahyh;kwtahyt;kwtaہya;kyutahiya;qu ta xi ya;Κιουτάχεια;Горад Кютахя;Кутахја;Кютахия;Кютахья;Кютахя;Кӱтахья;Кӳтахья;Քյոթահիա;كوتاهية;کتہیا;کوتاهیه;کوتاھیا;کوتاہیا;ქუთაჰია;キュタヒヤ;屈塔希亞;퀴타히아; +city::305359;Kusadasi;Efes;Kusadasi;Kush Adasi;Kush Adası;Kushadasi;Kushadassi;Kushadasy;Kuushadasy;Kuşadası;Marathesium;Nea Ephesus;Scalanuova;Skala Nuova;Skalanova;ku sha da se;kushadas";kushadasi;kushadasu;kusyadaseu;Кушадаси;Кушадасъ;Кушадасы;Къушадасы;کوش‌آداسی;クシャダス;庫沙達瑟;쿠샤다스; +city::306112;Kozan;Flaviopolis;Kozan;Sis; +city::306571;Konya;Conia;Gorad Kon'ja;Iconio;Iconium;Ikonio;Ikoniow;KYA;Ko'niya;Kon'ja;Koni;Konia;Konieh;Konija;Konja;Konjao;Konya;Koʻniya;Kuniyah;Kuon'ja;Qonia;Qonya;Qonye;ke ni ya;kean'ya;kon'ya;konia;qwnyh;qwnyt;Ικόνιο;Горад Конья;Кония;Конија;Конья;Къонья;Կոնիա;קוניה;قونية;قونیه;قونیہ;कोन्या;കോന്യ;კონია;コンヤ;科尼亞;코니아; +city::307084;Kiziltepe;Kiziltepe;Kochisar;Kochkhisar;Koçhisar;Kyzyltepe;Kızıltepe;Кызылтепе; +city::307515;Kirsehir;Gorad Kyrshehkhir;Justinianopolis;Kirsechir;Kirsehir;Kirshahr;Kirshehr;Kirshekhir;Kurshekhir;Kyrshekhir;Kırşehir;Kırşəhər;Mocissus;Mokissus;Qirseher;Qırşeher;ke er xie xi er;kileusyehileu;kirasehara;kirshehiri;kurushehiru;qr shhr;qrshhr;Κιρσεχίρ;Горад Кыршэхір;Киршехир;Киршехір;Кършехир;Кыршехир;قر شهر;قر شہر;قرشهر;کرسیہر;ਕਿਰਸੇਹਰ;ქირშეჰირი;クルシェヒル;克爾謝希爾;키르셰히르; +city::307654;Kirikkale;Gorad Kyrykale;Kirikale;Kirikalė;Kirikkale;Kurukkale;Kyrykkale;Kırıkkale;Qirixqele;Qirqqalʼa;Qırıxqele;ke lei ke ka lai;kilikalle;kurukkare;kyrkaly;Κιρίκαλε;Горад Кырыкале;Кирикале;Кириккале;Къръккале;Кырыккале;قیریق قلعہ;قیریق‌قلعه;كيركالي;کیرک کلے;ქირიქკალე;クルッカレ;克勒克卡萊;키리칼레; +city::307657;Kirikhan;Kirikhan;Kırıkhan; +city::307864;Kilis;Ciliza;Kilis;Kilisas;Kilita;Kilîs;Kılis;ji li si;kilisi;killiseu;kirisu;kls;kyls;kylys;Κιλίς;Килис;Кіліс;Քիլիս;كلس;کیلس;کیلیس;ქილისი;キリス;基利斯;킬리스; +city::308464;Kayseri;ASR;Caesarea;Caesarea in Cappadocia;Casarea;Cearee;Cesarea;Cesarea de Capadocia;Cesarea in Cappadocia;Cesaree;Céarée;Césarée;Eusebeia;Gorad Kajsery;Kaisareia;Kaisaria;Kaisarie;Kaisarije;Kaiseri;Kaiseris;Kaizarie;Kajseri;Kayseri;Kaīzarie;Khuajseri;Mazaca;Mazakʻ;Qaisariye;Qayseri;kai sai li;kaiseli;kaiseri;ki se ri;qysry;qysryh;qysryt;qyysry;Καισάρεια;Горад Кайсеры;Кaйсери;Кайсери;Кайсері;Кајсери;Хъайсери;Մաժաք;קייסרי;قيصرية;قیصری;قیصریه;قەیسەری;کیسری شہر;ไกเซรี;კაისერი;カイセリ;開塞利;카이세리; +city::309527;Karaman;Ak Yokus;Ak Yokuş;Darende;Gorad Karaman;Karaman;Karamana;Karamanas;Kuaraman;Laranda;Qereman;ka la man;kalaman;karaman;karamana;karamani;qraman;Καραμάν;Горад Караман;Караман;Къараман;קאראמאן;قرامان;كارامان;کارامان;ਕਾਰਮਾਨ;ქარამანი;カラマン;卡拉曼;카라만; +city::309647;Agri;AJI;Aari;Aarı;Agiri;Agr";Agri;Agry;Agury;Agıri;Ahras;Ağrı;Karakilise;Karakose;Karaköse;Provinsi Agri;Provinsi Ağrı;Qerekose;a lei;aghri;aghry;ali;ari;aru;Агри;Агръ;Агры;Агъры;Աղրի;آغری;أغري;قەرەکۆسە;আরি;აღრი;アール;阿勒;아리; +city::310855;Kahta;Kahta;Kakhta;Kolik;Koluk;Kâhta;Kölük;Кахта; +city::310859;Kahramanmaras;Caesarea Germanicia;Germanicea Marqasi;Gorad Kakhramanmarash;Gurgum;KCM;Kachramanmaras;Kachramanmarasas;Kachramanmarašas;Kahramanmaras;Kahramanmaraş;Kakhramanmarash;Karamanmarash;Kuag'ramanmarash;Maraache;Marache;Maraix;Maras;Marasch;Marash;Marasion;Maraş;Meres;Qəhrəmanmaraş;ka he la man ma la shen;kafuramanmarashu;kahramanmarashi;kalamanmalasyu;Καχραμανμαράς;Горад Кахраманмараш;Караманмараш;Кахраманмараш;Къагьраманмараш;Қаһраманмараш;Մարաշ;קהרמאנמרש;قهرمان مرعش;قهرمان‌مرعش;قہرمان مرعش;مرعش;مەرعەش;کہرامانمراش;ქაჰრამანმარაში;カフラマンマラシュ;卡赫拉曼馬拉什;카라만마라슈; +city::310892;Kadirli;Kadirli;Karszulkadriye;Karszülkadriye; +city::311046;Izmir;Azmir;Esmirna;IZM;Ismir;Izmir;Izmira;Izmiras;Izmiro;Smirne;Smyrna;Smyrne;Yazmir;azmyr;izmiri;izumiru;yi zi mi er;İzmir;Σμύρνη;Измир;איזמיר;إزمير;იზმირი;イズミル;伊兹密尔; +city::311073;Isparta;"sparta;Baris;Gorad ysparta;Hamid;Hamid-Abad;Hamitabat;ISE;Isbarta;Isparta;Ispartah;Izbarta;Izparta;Sparta;Sparte;Spartē;Ysparta;asbrtt;asparta;iseupaleuta;usuparuta;yi si pa er ta;ysparta;İsparta;İzparta;Ισπάρτα;Горад Ыспарта;Испарта;Ъспарта;Ыспарта;אספרטה;إسبرطة;اسپارتا;ისპარტა;ウスパルタ;伊斯帕爾塔;이스파르타; +city::311111;Iskenderun;Alejandreta;Aleksandretta;Alessandretta;Alexandretta;Alexandrette;Alexandria ad Issum;Gorad Iskendehrun;Iskandariyah;Iskanderun;Iskenderon;Iskenderun;Iskenderunas;Lissandretta;Myriandrus;askndrwn;askndrwnt;iseukendelun;yi si ken de lun;Îskenderûn;İskenderon;İskenderun;Αλεξανδρέττα;Іскендерун;Горад Іскендэрун;Искендерун;Ալեքսանդրեթ;إسكندرونة;اسكندرون;اسکندرون;伊斯肯德倫;이스켄데룬; +city::311665;Igdir;"gdur;IGD;Idir;Igdir;Igdira;Igdyras;Iidir;Iğdır;Iıdır;aghdyr;ayghdr;ayghdyr;e de er;idileu;igdiri;udo~uru;ygdyr;Îdir;Īgdira;İğdır;Игдир;Ъгдър;Ыгдыр;Ցոլակերտ;اغدير;ایغدر;ایغدیر;ڕەشقەلاس;იგდირი;ウードゥル;厄德尔;이디르; +city::314830;Gaziantep;Aintab;Antep;Ayintap;Ayıntap;Dilok;Dîlok;GZT;Gazi-Ayintap;Gaziantep;Gaziantepa;Gaziantepas;Gazijantep;Gorad Gazijantehp;Guaziantep;Nkaziantep;Qazianteb;Qaziantep;gaji'antepa;gajiantepeu;gaziantepi;gazu~iantepu;jia ji an tai pu;ka si xan tep;Γκαζιαντέπ;Газиантеп;Газијантеп;Горад Газіянтэп;Гъазиантеп;Ґазіантеп;Գազիանթեպ;גזיאנטפ;عنتاب;غازی عینتاب;گازی ئانتەپ;ਗਜਿਆਂਤੇਪ;กาซีอันเตป;გაზიანთეფი;ガズィアンテプ;加濟安泰普;가지안테프; +city::314967;Fethiye;Fethieh;Fethiye;Fethiye-Calis;Fethy;Fetiye;Fetkhie;Makri;Makry;Telmessus;fei te xi ye;fetohii~e;fthyh;fthyt;petiye;pthyyh;Μάκρη;Фетхие;Фетхіє;פטהייה;ضلع فتھیے;فتحية;فتحیه;フェトヒイェ;费特希耶;페티예; +city::315202;Eskisehir;Dorylaeum;ESK;Ehskishekhir;Eski Shahr;Eski Shehir;Eski shehr;Eski-chehir;Eski-chéhir;Eskischehir;Eskisechir;Eskisechiras;Eskiseher;Eskisehir;Eskisehira;Eskishekhir;Eskişeher;Eskişehir;Eskišechiras;Eskišehira;Gorad Ehskishehkhir;ai si ji xie xi er;asky shhr;esakisehara;eseukisyehileu;eskishehiri;esukishehiru;Əskişəhər;Εσκισεχίρ;Горад Эскішэхір;Ескишехир;Ескішехір;Эскишехир;אסקישהיר;أسكي شهر;ئێسکی شەھر;اسکی شہر;اسکی‌شهر;ਏਸਕਿਸੇਹਰ;ესქიშეჰირი;エスキシェヒル;埃斯基谢希尔;에스키셰히르; +city::315368;Erzurum;Ard-ar-Rum;Arzan-ar-Rum;Arzirum;Carana;ERZ;Ehrzurum;Erserum;Erzeroum;Erzerum;Erzirom;Erzirum;Erzurum;Erzuruma;Erzurumas;Erzéroum;Erzîrom;Gorad Ehrzurum;Kalikala;Karin;Theodosiopolis;ai er zu lu mu;ard rwm;ardrwm;arzrwm;eleujulum;eruzurumu;erzurumi;xer su rum;yەrzyڕۆm;Ərzurum;Ερζερούμ;Горад Эрзурум;Ерзурум;Эрзурум;Կարին;ארזורום;أرضروم;ئەرزیڕۆم;ارزروم;ارض روم;เอร์ซูรุม;ერზურუმი;エルズルム;埃尔祖鲁姆;에르주룸; +city::315373;Erzincan;Arzanjan;Aziris;ERC;Ehrzindzhan;Ersindjan;Ersingan;Ersingjan;Erzincam;Erzincan;Erzindjan;Erzindzan;Erzindzanas;Erzindzhan;Erzindžanas;Erzingan;Erzinjan;Erznka;Erzıngan;Ezirgan;Yerznka;ai er jin zhan;arznjan;arzynjan;eleujinjan;erajikana;eruzu~injan;erzinjani;xer sin can;Ərzincan;Ерзинджан;Ерзинџан;Ерзінджан;Эрзинджан;Երզնկա;أرزينجان;ئەرزگان;ارزنجان;ਏਰਜਿੰਕਾਨ;เอร์ซินจาน;ერზინჯანი;エルズィンジャン;埃尔津詹;에르진잔; +city::315468;Ergani;Arghana;Ehgrani;Ergani;Erganiosmaniye;Osmaniye;Эграни; +city::315498;Eregli;Cybistra;Ehregli;Erakleia;Eregli;Ereğli;Heraclea;Heraclea Minoa;Heraclee;Heracleia Minoa;Herakleia;Héraclée;Konyaereglisi;Konyaereğlisi;ai lei li;arghly;Ηράκλεια;Ерегли;Ереглі;Эрегли;ارغلی;ارغلی، قونیہ;埃雷利; +city::315530;Ercis;Arcis;Ercis;Erciş; +city::315795;Elbistan;Ehl'bistan;Elbistan;albstan;Эльбистан;البستان; +city::315808;Elazig;EZS;Ehljazyg;Elazig;Elazii;Elaziz;Elaziğ;Elazığ;Elazıı;Eleziz;Elezîz;Eliazihas;Eljaz"g;Eljazig;Elâzız;Elâzığ;Gorad Ehljazyg;Mezreh;Xarberd;ai la ze;alazygh;aylazgh;elajiga;elazighi;ellaji;erazu;mʿmwrt alʿzyz;Горад Элязыг;Елазиг;Елязиг;Елязъг;Элязыг;Խարբերդ;الازیغ;ایلازغ;خارپێت;معمورة العزيز;ਏਲਾਜਿਗ;ელაზიღი;エラズー;埃拉泽;엘라지; +city::316284;Dortyol;Dortyol;Dörtyol; +city::316411;Dogubayazit;Baiazid;Bajaset;Bajasid;Bajesid;Bayazid;Bayazit;Bayezid;Bazid;Bazîd;Baīazid;Beyazit;Beyazıt;Beyzit;Beyzıt;Dogu Beyazidi;Dogubajazit;Dogubayazid;Dogubayazidi;Dogubayazit;Dogubeyazit;Doğu Beyazidi;Doğubayazidi;Doğubayazıd;Doğubayazıt;Doğubeyazıt;Karakose;Karaköse;dghw bayzyd;Догубаязит;دغو بایزید; +city::316541;Diyarbakir;Amed;Amida;DIY;Diarbekir;Diarbekr;Diari-Bekir;Diari-Békir;Dijarbakir;Dijarbakira;Dijarbakiro;Dijarbakyr;Dijarbakyras;Dijarbakˌyr;Dijarbekir;Dikranakerd;Diyarbakir;Diyarbakır;Diyarbekir;Diyarbekır;Diyarbəkir;Diyaribakir;Diyaribekir;Diyarıbakır;Diyarıbekir;Gorad Dyjarbakyr;Ntigiarmpakir;di ya ba ke er;diarbakiri;diyaleubakileu;diyarubakuru;dyar bkr;dyarbkr;Ντιγιαρμπακίρ;Горад Дыярбакыр;Диарбекир;Диярбакыр;Диярбақыр;Дијарбакир;Дијарбекир;Діярбакир;Դիարբեքիր;דיארבקיר;ئامەد;ديار بكر;دیار بکر;دیاربکر;დიარბაქირი;ディヤルバクル;迪亚巴克尔;디야르바키르; +city::317109;Denizli;DNZ;Denisli;Denislu;Denislü;Denizli;Denizlis;Denizlu;Gorad Dehnizli;Ntenizli;dai ni zi li;deni s li;denijali;denijeulli;denizli;denizuri;dnyzly;Ντενιζλί;Горад Дэнізлі;Денизли;Денізлі;دنيزلي;دنیزلی;دەنیزلی;ڈینزلی;ਦੇਨਿਜਲੀ;เดนิซลี;დენიზლი;デニズリ;代尼茲利;데니즐리; +city::318137;Hakkari;Colemerik;Hakari;Hakkari;Hakâri;Julamerk;Khakkari;Çölemerik;Хаккари; +city::318253;Cizre;Beit Zabde;Bezabde;Cizre;Dzhizre;Jazirhe-a-ibn-a Omar;Jesiret ibn Omar;Jesıret ibn Omar;NKT;Джизре; +city::318675;Ceyhan;Ceyhan;Dzejkhan;Dzhejg'an;Dzhejkhan;Gorad Dzhehjkhan;Hamidiye;Jehan;Jeyhan;Zhejkhan;jeihan;jeihani;jie yi han;jyhan;Џејхан;Горад Джэйхан;Джейгьан;Джейхан;Жейхан;Ջեյհան;גייהאן;جيهان;جیحان;سیہان;ჯეიჰანი;ジェイハン;傑伊漢;제이한; +city::320392;Burdur;Bourdour;Bourntour;Buldur;Burdur;Polydorion;ba er du er;brdwd;buleuduleu;burduri;burudo~uru;bwrdwr;Μπουρντούρ;Бурдур;بردود;بوردور;ბურდური;ブルドゥル;巴爾杜爾;부르두르; +city::320557;Bozuyuk;Bozoyuk;Bozujuk;Bozuyuk;Bozöyük;Bozüyük;bo ju yu ke;bwzwywk;Бозӱйӱк;بوزویوک;博聚于克; +city::320879;Bolvadin;Bolvadin; +city::321031;Bismil;Bismil; +city::321082;Bingol;BGG;Badlis;Bingol;Bingöl;Capakcur;Cevlik;Çapakçur;Çevlik;Бингол; +city::321426;Bergama;Bergama;Pergam;Pergame;Pergamo;Pergamon;Pergamos;Pergamum;Pérgamo;bie jia mo;brgama;pa jia ma;perugamon;prgamwn;prgmwn;Пергам;פרגמון;برگاما;پرگامون;ペルガモン;別迦摩;帕加马; +city::321580;Belek;Belek;Belekoy;Beleköy;Besyigit;Beşyiğit;Белек; +city::321836;Batman;BAL;Batman;Batman i Tyrkia;Batmanas;Elih;Gorad Batman;Iloh;Iluh;ba te man;bateuman;batman;batman trky;batmani;batoman;btman;btmn;Êlih;Μπατμάν;Батман;Баҭман;Горад Батман;בטמן;ئێلح;باتمان;باتمان، ترکی;بطمان;ضلع باتمان;ბათმანი;バトマン;巴特曼;바트만; +city::322165;Balikesir;Achyraus;Adrianoutherai;Adrianouthērai;BZI;Bali-Kessir;Balikesir;Balikesira;Balikesr;Balikesri;Balikesyras;Balukesir;Balukisu;Balykesir;Balıkesir;Belikesir;Belikiser;Gorad Balykesir;Hadrianutherae;Karassi;ba lei ke ai xi er;balikesiri;baliq asyr;ballikesileu;balyksyr;barukesu~iru;Μπαλικεσίρ;Баликесир;Баликесір;Балъкесир;Балыкесир;Балықесир;Горад Балыкесір;بالِق أسير;بالیکسیر;ბალიქესირი;バルケスィル;巴勒克埃西爾;발리케시르; +city::322830;Aydin;Aidin;Aidinas;Aidinio;Aidinion;Ajdin;Ajdun;Ajdyn;Ajdın;Aydin;Aydın;Aïdin;Aïdínion;CII;Gorad Ajdyn;Guesel Hissar;Guezel Hissar;Guezelhisar;Güsel Hissar;Güzel Hissar;Güzelhisar;Tralleis;Tralles;Tralli;ai deng;aidin;aidina;aidini;aido~un;aydyn;aywdn;Αϊδίνιο;Айдин;Айдън;Айдын;Ајдин;Горад Айдын;آیدین;أيدين;ایودن;ਐਦਿਨ;აიდინი;アイドゥン;艾登;아이딘; +city::323777;Antalya;AYT;Adalia;Antal'ja;Antalia;Antalija;Antaliya;Antaliyah;Antalja;Antalya;Antayla;Antália;Atali;Attalea;Attaleia;Attalia;Gorad Antal'ja;Olbia;Satalia;an ta li ya;antalia;antallia;antalya;antaruya;yantalya;Αττάλεια;Анталия;Анталија;Анталья;Анҭалиа;Горад Анталья;Անթալիա;אנטליה;آنتالیا;أنطاليا;ئانتالیا;انطالیہ;अंताल्या;ანთალია;アンタルヤ;安塔利亚;安塔利亞;안탈리아; +city::323779;Antakya;Antak'ja;Antakija;Antakiya;Antakiyah;Antakiyyah;Antakya;Antioch;Antioche;Antiocheia;Antiochia;Antiochia am Orontes;Antiochia di Siria;Antiochia vid Orontes;Antiochie;Antiochië;Antiohija;Antiokheia;Antiokhija;Antiokia;Antioquia;Antioquía;Antākiyyah;Antıoch;Anţākiyah;Hatay;an tiao ke;antakyt;antiokeia;ntakyt;Αντιόχεια;Антакия;Антакья;Антиохия;Антиохија;אנטיוכיה;أنطاكية;نتاكيّة;アンティオケイア;安条克; +city::323786;Ankara;ANK;Anakara;Ancara;Ancyra;Ang-ka-la;Angkara;Angora;Anguriyah;Ankar;Ankara;Ankara khot;Ankaro;Ankuara;Ankura;Ankyra;Ankyra (Ankyra);Anqara;Enguri;Engüri;Enqere;Gorad Ankara;akara;an ka la;angkala;ankara;anqrh;anqrt;xangkara;Ăng-kā-lá;Άγκυρα (Ankyra);Анкара;Анкара хот;Анкъара;Горад Анкара;Әнкара;Անկարա;אנקארא;אנקרה;آنکارا;أنقرة;ئەنقەرە;انقره;انقرہ;انکرہ;ܐܢܩܪܐ;अंकारा;আঙ্কারা;ਅੰਕਾਰਾ;ଆଙ୍କାରା;அங்காரா;అంకారా;ಅಂಕಾರಾ;അങ്കാറ;อังการา;ཨན་ཁ་ར།;ანკარა;አንካራ;アンカラ;安卡拉;앙카라; +city::323828;Anamur;Anamur;Anemur;Anemurium;a na mu er;anamwr;Анамур;آنامور;أنامور;ضلع انامور;阿納穆爾; +city::324190;Alanya;Alaia;Alaiye;Alan'ja;Alana;Alanija;Alanja;Alanya;Alaya;Alâiye;Coracesium;a la ni ya;alania;alanya;allania;aran'ya;Алания;Аланья;Аланія;Алања;אלניה;آلانیا;ألانيا;الانیا;ალანია;アランヤ;阿拉尼亚;알라니아; +city::324490;Aksehir;Ak Shehr;Aksehir;Akşehir;Philomelium; +city::324496;Aksaray;Aksarai;Aksaraj;Aksarajus;Aksaray;Akusaraj;Aqserayiye;Gorad Aksaraj;a ke sa lai;agsalai;akasara'e;aksarai;akusarai;aq sray;Ακσαράι;Аксарай;Аксарај;Акъсарай;Ақсарай;Горад Аксарай;آق سراي;آق‌سرای;آکسرے;ਅਕਸਾਰਾਏ;აქსარაი;アクサライ;阿克萨赖;악사라이; +city::324698;Akhisar;Ak Hisar;Akchisaras;Akhisar;Akhissar;Akkhisar;Aq Hisar;Axari;Azarion;Gorad Akkhisar;Thyatira;a ke xi sa er;akeuhisaleu;akysar;Акхисар;Горад Акхісар;آق‌حصار;آکیسار;阿克希薩爾;아크히사르; +city::325103;Ahlat;Ahlat;Akhlat;Erkizan;Ахлат; +city::325303;Afyonkarahisar;AFY;Acroenus;Acroënus;Af'on-Karakhisar;Af'onkarakhisar;Afion;Afion Karachisar;Afion Karahissar;Afion-Karahisar;Afionkarakhisar;Afioun-Kara-Hissar;Afium Kara Hissar;Afium Karahisar;Afiun Karahissar;Afiun Qarahisar;Afiun-Carahissar;Afjonkarahisara;Afjonkarahisaras;Afyon;Afyonkara Hisar;Afyonkarahisar;Afıon Karahissar;Gorad Afjon;Kara Hissar Sahib;Karahisarisahip;Karahısarısahıp;a fei yong ka la xi sa er;afiyonkarahisaru;afywn qrh hsar;apionkalahisaleu;Αφιόν Καραχισάρ;Афионкарахисар;АфйонкъарахӀисар;Афьон-Карахисар;Афьон-Карахісар;Афьонкарахисар;Горад Афён;Աֆիոն-Կարահիսար;أفيون قره حصار;ئافيون قاراھىسار;افیون قره‌حصار;افیون قرہ حصار;افیون‌ قره حصاری;قره ‌حصار ساحب;აფიონ-ყარაჰისარი;アフィヨンカラヒサール;阿菲永卡拉希萨尔;아피온카라히사르; +city::325330;Adiyaman;ADF;Adiaman;Adijaman;Adijamanas;Adityman;Adiyaman;Adiyamanska;Adujaman;Adyjaman;Adıyaman;Adıyamanská;Antigiaman;Carbanum;Gorad Adyjaman;Hisnumansur;Husnimansur;Husnumansur;Hüsnümansur;Perre;Pordonnium;Semsur;Semsûr;a de ya man;a de ya man sheng;adiamani;adiyaman;adiyamana;ado~uyaman;adyaman;adyyamyn;yadyyama;Αντιγιαμάν;Адияман;Адијаман;Адъяман;Адыяман;Горад Адыяман;Ադիյաման;אדיאמן;آدیامان;آدی‌یامان;أديامان;ئادىياما;ادییامین;سەمسوور;আদিয়ামান;ადიამანი;アドゥヤマン;阿德亚曼;阿德亚曼省;아디야만; +city::325336;Adilcevaz;Adeljivaz;Adilcevaz;Adildzhevaz;Адилджеваз;عادالجواز;عادلجواز; +city::325363;Adana;ADA;Adana;Adane;Adanë;Adhanah;Antiocheia;Edene;Gorad Adana;a da na;adana;adnt;xa da na;yadana;Άδανα;Αδανα;Αντιόχεια;Адана;Горад Адана;Ադանա;אדנה;آدانا;أضنة;ئادانا;अदना;আদানা;อาดานา;ადანა;アダナ;阿达纳;아다나; +city::442301;Batikent;Batikent;Batıkent; +city::737022;Zonguldak;Gorad Zanguldak;ONQ;Sandaraca;Songuldak;Sungul;Zon'nkoulntak;Zonguldak;Zonguldakas;Zonguldaq;Zonquldak;Zoungouldagh;Zunguldak;jong-guldakeu;zangwldak;zngwldagh;zong gu er da ke;zonguldaki;zongurudaku;zwnghwldaq;zwngwldagh;zwngwldak;Ζονγκουλντάκ;Горад Зангулдак;Зонгулдак;زانگولداک;زنگولداغ;زونغولداق;زونگولداغ;زونگولداک;ზონგულდაქი;ゾングルダク;宗古爾達克;종굴다크; +city::737054;Zile;Zil;Zile;Зил; +city::737071;Zeytinburnu;; +city::737961;Korfez;Korfez;Körfez;Yaremdji;Yarimca;Yarımca; +city::738025;Yalova;Gialova;Jalov;Jalova;Pythiae Thermae;Yalova;Yaluva;ialova;ya luo wa;yalloba;yalwa;yalwfa;yalwwa;yarovu~a;Γιάλοβα;Јалова;Ялова;يالوفا;یالوا;یالووا;იალოვა;ヤロヴァ;亞洛瓦;얄로바; +city::738329;UEskuedar;Chrysopolis;Scutari;Skutari;Uskjudar;Uskudar;askdar;Üsküdar;Ускюдар;اسکدار; +city::738349;UEnye;Oenoe;Onieh;UEnye;Un'e;Unia;Unie;Unieh;Ünia;Ünye;Унье; +city::738377;Umraniye;; +city::738618;Turhal;Turhal;Turkhal;Турхал; +city::738648;Trabzon;Atrabazandah;Gorad Trabzon;TZX;Tarabazandah;Tirabson;Tirabzon;Trabzon;Trabzona;Trabzonas;Trapesonda;Trapezonte;Trapezounta;Trapezund;Trapezunt;Trapezus;Trapisonda;Trapizon;Trebisonda;Trebizond;Trebizonda;Trebizonde;Trébizonde;tarabazona;te la bu zong;teulabeujon;torabuzon;trabzwn;trbzwn;tʼrapʼizoni;Τραπεζούντα;Горад Трабзон;Трабзон;Трапезунт;Տրապիզոն;טרבזון;ترابزون;ترابزۆن;طرابزون;ਤਰਾਬਜ਼ੋਨ;ტრაპიზონი;トラブゾン;特拉布宗;트라브존; +city::738743;Tokat;Dazimon;Evdokia;Gorad Takat;Provincia de Tokat;TJK;Tocat;Tokat;Tokat Province;Tokatas;Tokatiaen;Tokatiän;Tokatska provincie;Tokatská provincie;Tokhuat;Toqat;Tukat;tokateu;tokati;tokatto;tuo ka te;twkat;twqat;twqt;Τοκάτ;Горад Такат;Токат;Тохъат;Եվդոկիա;טוקט;توقات;توکات;თოქათი;トカット;托卡特;토카트; +city::738927;Tekirdag;Bisanthe;Gorad Tehkirdag;Raidestos;Rhaedestus;Rodoscuk;Rodosto;Rodostó;Rodosçuk;Tekfur Dagh;Tekfurdag;Tekfurdağ;Tekirdaa;Tekirdag;Tekirdahas;Tekirdağ;Tektur Dagh;Təkirdağ;tai ji er da;teki r dak;tekileuda;tekirdaghi;tekiruda;tkyrdagh;tykrdagh;Ραιδεστός;Горад Тэкірдаг;Родосто;Текирдаг;Текірдаг;טקירדא;تكيرداغ;تکیرداغ;تیکرداغ;เตกีร์ดาก;თექირდაღი;テキルダー;泰基爾達;테키르다; +city::739549;Sisli;Sisli;Şişli; +city::739634;Silivri;Selibria;Selymbria;Siliviri;Silivri;slwry;slywry;سلوری;سلیوری; +city::740264;Samsun;Amisos;Amisus;Djanik;Gorad Samsun;Janik;SSX;SZF;Sampsounta;Sams;Samsoun;Samsun;Samsuna;Samsunas;sa mu song;sam sun;samsun;samsuni;samswn;samusun;smswn;symsn;Αμισός;Σαμψούντα;Горад Самсун;Самсун;Սամսուն;סמסון;سامسون;سیمسن;ซัมซุน;სამსუნი;サムスン;薩姆松;삼순; +city::740483;Rize;Bechirias;Corum;Provinsi Rize;QRI;Rhizus;Rize;Rizeh;Rizenska provincie;Rizenská provincie;Rizounta;Rizė;Rizə;li ze;lije;rize;ryzh;Çorum;Ριζούντα;Ризе;Різе;Ռիզե;ريزه;ریزه;ریزہ;ریزے;რიზე;リゼ;里澤;리제; +city::741045;Orhangazi;Orhangazi;Pazarkoy;Pazarköy; +city::741100;Ordu;Cotyora;OGU;Ordu;Орду; +city::741385;Mustafakemalpasa;Kirmasti;Mustafakemalpasa;Mustafakemalpaşa;Mustafakemelpasa;Mustafakemelpaşa; +city::741609;Merzifon;Marsivan;Merzifon;Phazemon;mei er ji feng;mrzyfwn;Мерзифон;ضلع مرزیفون;مرزیفون;梅爾濟豐; +city::741763;Maltepe;; +city::741855;Luleburgaz;Arcadiopolis;Bergula;Ljuleburgas;Ljuleburgaz;Lueleburgaz;Lule Burgas;Luleburgaz;Lüleburgaz;Люлебургаз;Люлебургас; +city::743166;Kirklareli;Kirk Kilise;Kirk Kilisse;Kirk-Kilissa;Kirklareli;Kirklarelis;Kyrklareli;Kırklareli;Lozen;Lozengrad;Qirxlareli;Qırxlareli;Saranta Ekklesiai;Saranta Ekklēsiai;ke er ke la lei li;kileukeullalelli;kirakalaleri;kirklareli;krklaryly;kurukurareri;qrqlr ayly;qrqlrayly;Κιρκλαρελί;Киркларелі;Кыркларели;Лозенград;قرقلر ايلي;قرقلرایلی;کرکلاریلی;ਕਿਰਕਲਾਲੇਰੀ;ქირქლარელი;クルクラーレリ;克爾克拉雷利;키르클라렐리; +city::743818;Kavakli;Fetekoy;Feteköy;Kavakli;Kavakly;Kavaklı;Каваклы; +city::743882;Kastamonu;Castamena;Castamon;Castamoni;Castamonu;Castamuni;KFS;Kastambul;Kastamoni;Kastamonu;Kastamouni;Kastamuni;Kastamuniyah;Qastamuni;Qestamonu;ka si ta mo nu;kaseutamonu;kastamanw;kastamwnw;kasutamonu;qstmwny;Κασταμονή;Кастамону;Касҭамону;قسطموني;قسطمونی;کاستامانو;کاستامونو;კასთამონუ;カスタモヌ;卡斯塔莫努;카스타모누; +city::743952;Kars;Cars;Gorad Kars;KSY;Kapc;Kars;Karsa;Karsas;Khuars;Kuars;Qars;Qers;Vanand;ka er si;kaleuseu;kar s;karasa;kars;karusu;qars;Καρς;Горад Карс;Карс;Къарс;Хъарс;Ҟарс;Կարս;קארס;قارص;قەرس;كارس;کارس;ਕਾਰਸ;การ์ส;ყარსი;カルス;卡爾斯;카르스; +city::744562;Karabuk;Karabiukas;Karabjuk;Karabuek;Karabuk;Karabük;Karampouk;Qerebuk;ka la bi ke;ka la bi ke sheng;kalabwikeu;karabuka;karabwk;karabyukku;Καραμπούκ;Карабук;Карабюк;Карабүк;Карабӱк;قره‌بوک;قرہ بوک;كارابوك;کارابوک;ਕਾਰਾਬੁਕ;ყარაბუქი;カラビュック;卡拉比克;卡拉比克省;카라뷔크; +city::745028;Izmit;Astacus;Cocaeli;Ismid;Ismit;Isnimid;Izmid;Izmit;Kodja-Eli;Koja-Ili;Nicomedia;Nicomedie;Nicomédie;Nikomedeia;Nikomedia;izumitto;yi zi mi te;İzmit;Измит;イズミット;伊兹密特; +city::745044;Istanbul;Bizanc;Bizánc;Byzance;Byzantion;Byzantium;Byzanz;Constantinoble;Constantinopla;Constantinople;Constantinopolen;Constantinopoli;Constantinopolis;Costantinopoli;Estambul;IST;Istamboul;Istambul;Istambuł;Istampoul;Istanbul;Istanbúl;Isztambul;Konstantinapoly;Konstantinopel;Konstantinopolo;Konstantinoupole;Konstantinoupoli;Konstantinoupolis;Konstantinápoly;Kustantiniyah;Micklagard;Micklagård;Mikligardur;Mikligarður;Stamboul;Stambul;Stambula;Stambuł;Tsarigrad;Vizantija (Vizantija);Vyzantio;astnbwl;bijantium;byuzantion;byzntywn;iseutanbul;istambula;isutanburu;stin Poli [stimˈboli];yi si tan bu er;İstanbul;Βυζάντιο;Βυζαντιο;Ισταμπουλ;Ισταμπούλ;Κωνσταντινουπολη;Κωνσταντινούπολη;Κωνσταντινούπολις;στην Πόλι [stimˈboli];Византија (Vizantija);Истанбул;Стамбул;ביזנטיון;اسطنبول;इस्तांबुल;イスタンブール;ビュザンティオン;伊斯坦布尔;비잔티움;이스탄불; +city::745169;Inegol;Inegeul;Inegoel;Inegol;İnegöl; +city::746666;Goelcuek;Geulzuk;Goelcuek;Gölcük; +city::746881;Giresun;Cerasus;Choerades;Gireson;Giresun;Giresunas;Kerasounta;Kerassunde;Kerasun;Kerasunda;Kerasunt;Kiresun;OGU;Pharnacia;ghyrswn;gilesun;giresun;giresuni;grysn;gryswn;ji lei song;Κερασούντα;Гиресун;Ґіресун;Կերասուն;غيرسون;گره‌سون;گریسن;گریسون;გირესუნი;ギレスン;吉雷松;기레순; +city::746958;Gemlik;Cius;Gemlik;Kios;Kiye;Гемлик; +city::747014;Gebze;Gebze;Gebzė;Gorad Gebze;Guebze;Libyssa;gai bu ze;gbzh;gebuze;kkbwzh;Гебзе;Горад Гебзе;ضلع گیبزے;ککبوزه;گبزه;گەبزە;ゲブゼ;蓋布澤; +city::747155;Fatsa;Fatisa;Fatsa;Fatseh;Fatza;Phadisana;Phadısana;Polemonium;Side;Фатса; +city::747323;Esenyurt;Eksinoz;Ekşinoz;Esenyurt;Eskiyuz;Eskiyüz; +city::747340;Esenler;Litros; +city::747471;Eregli;Bender Erekli;Bender-Eregli;Bender-Ereğli;Ehregli;Eregli;Erekli;Ereğli;Ergeli;Heraclea Pontica;Heraklea;Karadenizereglisi;Karadenizereğlisi;Эрегли; +city::747489;Erbaa;Ehrba;Erbaa;Herek;Эрба; +city::747712;Edirne;Adrianapolis;Adrianopel;Adrianople;Adrianopoja;Adrianopol;Adrianopoli;Adrianopolis;Adrianoupoli;Adrianoupolis;Adrianòpolis;Adrinople;Andrianoplin;Andrinople;Andrinòple;Drinapoly;Drinopolje;Drinápoly;Ederne;Ederné;Edirnae;Edirne;Edirnä;Edirnė;Edrene;Ehdirne;Gorad Ehdyrneh;Hadrianople;Hadrianopolis;Jedrene;Odrin;Odrín;adrnh;adrnt;ai di er nei;edileune;edirane;edirne;edirune;xe dirne;Édirne;Ədirnə;Αδριανούπολη;Једрене;Горад Эдырнэ;Едрене;Едірне;Одрин;Эдирне;Ադրիանապոլիս;אדירנה;أدرنة;ادرنه;ادرنہ;ਏਦਿਰਨੇ;เอดีร์เน;အီဒါးနီမြို့;ედირნე;エディルネ;埃迪爾內;에디르네; +city::747764;Duzce;Dusje;Duzce;Duzdje;Düzce; +city::748870;Cubuk;Chubuk;Chubuku;Cubuk;Distretto di Cubuk;Distretto di Çubuk;Çubuk;Чубук;Чубукъ;ضلع چوبک;چوبوک، انقرہ; +city::748879;Corum;Chorum;Corum;Corumas;Euchaita;Gorad Charum;Tsoroum;cholum;chorumi;chorumu;chwrwm;jwrwm;koruma;qiao lu mu;Çorum;Čorumas;Τσορούμ;Горад Чарум;Чорум;جوروم;چوروم;چۆروم;ਕੋਰੁਮ;ჩორუმი;チョルム;喬魯姆;초룸; +city::748893;Corlu;Chorlu;Corlu;Corum;Gorad Charlu;Tzirallum;Tzurullum;chwrlw;qiao er lu;tshwrlw;Çorlu;Çorum;Čorlu;Горад Чарлу;Чорлу;تشورلو;ضلع چورلو;چورلو;喬爾盧; +city::749274;Cerkezkoey;Cerkezkoey;Çerkezköy; +city::749704;Carsamba;Carsamba;Carsampa;Carsanba;Charshamba;Charshambah;Charshembe;Themiscyra;Çarşamba;Çarşanba;Чаршамба; +city::749748;Khanjarah;Cankiri;Changra;Changri;Chankiri;Chankyry;Gangra Germanicopolis;Ghanjarah;Kangiri;Kangırı;Khanjarah;knghry;Çankırı;Чанкыры;کنغری; +city::749780;Canakkale;Abydus;CKZ;Canakale;Canakkale;Canaqqala;Canaxqele;Chanak;Chanakale;Chanakkale;Chanaq;Chanoqqalʼa;Dardanelles;Kale-Sultanie;Tsanakkale;canakale;cha nak kale;chanakalle;chanakkare;chnaq‌qlʿh;chynk qlʿh;janakaly;qia na ka lai;qia na ka lai sheng;znqlh;Çanakkale;Çanaqqala;Çanaxqele;Čanakalė;Τσανάκκαλε;Чанакале;Чанаккале;Չանաքկալե;צנקלה;تاناککالے;جاناكالي;چاناق‌قلعه;چناق قلعے;چناق‌قلعه;چینک قلعه;ਚਾਨਕਲੇ;ชานักกาเล;ჩანაქკალე;チャナッカレ;恰納卡萊;恰纳卡莱省;차나칼레; +city::750269;Bursa;Boursa;Brossa;Broussa;Brousse;Brusa;Brussa;Burs;Bursa;Bursae;Burso;Gorad Bursa;Prousa;YEI;bu er sa;buleusa;bur sa;bursa;burusa;bwrsa;bwrsh;bwrst;Προύσα;Бурсæ;Бурса;Бурсо;Горад Бурса;בורסה;برصہ;بورسا;بورصة;بورصه;بورصہ;بۇرسا;बुर्सा;บูร์ซา;ბურსა;ブルサ;布尔萨;부르사; +city::750516;Bolu;Boli;Bolou;Bolu;Claudiopolis;Gorad Balu;bo lu;bollu;bolu;boru;bwlw;bwly;Μπολού;Болу;Горад Балу;بولو;بولی;ბოლუ;ボル;博盧;볼루; +city::751077;Bandirma;BDM;Banderma;Bandirma;Bandyrma;Bandırma;Panderma;Panormos;Panormus;Бандырма; +city::751324;Bagcilar;Badzilaras rajons;Bagdzhylar;Bādžilaras rajons;Cifitburgaz;Ciftburgaz;Çiftburgaz;Çıfıtburgaz;Багджылар; +city::751335;Bafra;Bafra;Paura;Бафра; +city::751949;Ardesen;Ardasen;Ardaşen;Ardesen;Ardeshen;Ardeşen;Ardisin;Ardişin;Ардешен; +city::752015;Amasya;Amas'ja;Amasea;Amaseia;Amasia;Amasija;Amasiyah;Amasya;Amasya ringkond;Amàsia;Amásia;MZH;a ma xi ya;amasi'a;amasia;amasu~iya;amasya;amasyh;yamasya;Αμάσεια;Амасия;Амасья;Ամասիա;אמסיה;آماسیه;أماصيا;ئاماسیا;اماسیا;ਅਮਾਸਿਆ;ამასია;アマスィヤ;阿馬西亞;아마시아; +city::752850;Adapazari;Ada Bazar;Adapazar;Adapazari;Adapazaris;Adapazaru;Adapazary;Adapazarı;Antapazari;Gorad Adapazary;Sakar'ja;Sakarya;Tarsia;a da pa zha lei;adabazary;adapajali;adapazari;adapazaru;adapazary;yadapazary;Ανταπαζαρί;Адапазар;Адапазари;Адапазаръ;Адапазары;Адаҧазары;Горад Адапазары;Сакарья;Ադաբազարը;آدابازاري;آداپازاری;ئاداپازاری;ضلع اداپازاری;ადაფაზარი;アダパザル;阿达帕扎勒;아다파자리; +city::6947637;Atasehir;; +city::6947639;Basaksehir;; +city::6947640;Beylikduezue;; +city::6947641;Bueyuekcekmece;; +city::6955677;Cankaya;Cankaya;Çankaya; +city::7627067;Bahcelievler;; +city::7628416;Sultangazi;; +city::7628419;Sultanbeyli;; +city::7628420;Sancaktepe;; +city::7701384;Karabaglar;; +city::8074174;Muratpasa;Muratpasa;Muratpaşa; +city::11238838;Merkezefendi;; +city::3573738;San Fernando;San Fernando; +city::3574116;Mon Repos;; +city::3574309;Laventille;Laventille; +city::3574810;Chaguanas;Chaguanas; +city::1665196;Douliu;Douliou;Douliu;Doulju;Dǒuliù;GJau Luc;Tau-lak-chhi;Teu-liuk-su;Tou-liou;Tou-liu;Tou-liu-chieh;Táu-la̍k-chhī;Téu-liuk-sṳ;Yun-lin;Yun-lin-hsien;Yün-lin;Yün-lin-hsien;deoulyu si;dou liu;dou liu shi;dwlyw;Đấu Lục;Доулю;دولیو;斗六;斗六市;더우류 시; +city::1668341;Taipei;GJai Bac;Kota Taipei;Pan Kiao;Pan-ch'iao;Pan-ch'iao-chen;Pan-ch'iao-chieh;Pan-ch’iao;Pan-ch’iao-chen;Pan-ch’iao-chieh;T'ai-pei;T'ai-pei Shih;T'ai-pei-hsien;TPE;Taibei Shi;Taibei Shih;Taibejus;Taibėjus;Taipe;Taipeh;Taipei;Taipeium;Taipejus;Taipé;Taipéi;Taipėjus;Tajbehj;Tajpej;Tajpeo;Tayipeh;Tayipèh;Tchaj-pej;T’ai-pei;T’ai-pei Shih;T’ai-pei-hsien;ta'ipe;tai bei;tai bei shi;taibei;taibei si;taipei;thipe;Đài Bắc;Ταϊπέι;Тайбэй;Тайпей;Тајпеј;טאיפי;טאיפיי;تەيبېي;ताइपे;ไทเป;ཐའེ་པེ;ታይፔ;台北;台北市;臺北市;타이베이;타이베이 시;타이페이; +city::1668355;Tainan;Dai-nang;Dài-nàng;GJai Nam;Gorad Tajnan';Kota Tainan;T'ai-nan;T'ai-nan-shih;TNN;Tai-lam-chhi;Tainan;Tainan City;Tainanas;Tainanshi;Tainanshih;Tajnan;Tajnan';Taynam;Tchaj-nan;Teynen shehiri;Thoi-nam-su;Thòi-nàm-sṳ;Tâi-lâm-chhī;T’ai-nan;T’ai-nan-shih;tai nan;tai nan shi;tainan si;taynan;thi hnan;Đài Nam;Горад Тайнань;Тайнань;טאינאן;تاينان;تاینان;ไถหนัน;台南;台南市;臺南;臺南市;타이난 시; +city::1668399;Taichung;GJai Trung;Kota Taichung;RMQ;Tai-tiong-chhi;Taichung;Taicungas;Taizhong;Taizhong Shi;Taičungas;Tajchzhun;Tajcung;Tajzhun;Tajĉung;Taychun;Tchaj-cung;Tchaj-čung;Teyjong shehiri;Thoi-chung-su;Thòi-chûng-sṳ;Tâi-tiong-chhī;tai zhong;tai zhong shi;taijung si;tay shangh;Đài Trung;Тайжун;Тайчжун;تاي شانغ;台中;台中市;臺中市;타이중 시; +city::1668467;Daxi;Dasi;Daxi;Ta-Si-chen;Ta-ch'i;Ta-ch'i-chen;Ta-ch'i-chieh;Ta-ch’i;Ta-ch’i-chen;Ta-ch’i-chieh;Ta-hsi;Ta-hsi-chen;Ta-k'o-k'an;Ta-k’o-k’an;da xi;Та-Си-чен;大溪; +city::1670029;Banqiao;Banchiao;Banciao;Banciao District;Banqiao;Banqiao District;Fang-ch'iao;Fang-ch’iao;Pan-ch'iao;Pan-ch’iao;San-kuang;San-kuang-li;ban qiao;ban qiao qu;fang qiao;板橋;板橋區;枋橋; +city::1670310;Puli;P'u-li;P'u-li-chieh;Puli;P’u-li;P’u-li-chieh;bu li;Пули;埔里; +city::1671566;Nantou;Lam-tau-chhi;Lâm-tâu-chhī;Nam GJau;Nam Đầu;Nam-theu-su;Nan'tou;Nan-t'ou;Nan-t'ou-chieh;Nan-t'ou-hsien;Nan-t'ou-shih;Nan-tchou;Nan-t’ou;Nan-t’ou-chieh;Nan-t’ou-hsien;Nan-t’ou-shih;Nantou;Nantou City;Nantou by;Nantow;Nàm-thèu-sṳ;nan tou;nan tou shi;nanteou si;nantw;Наньтоу;نانتو;南投;南投市;난터우 시; +city::1672228;Magong;MZG;Magong;Magun;P'eng-hu;P'eng-hu-hsien;ma gong;Магун;馬公; +city::1673820;Kaohsiung;Gaosjun;Gaosyongshih;Gaoxiong;Gaoxiongshi;KHH;Kao-hsiung;Kao-hsiung-shih;Kaohsiung;Kaohsiung City;Takao;gao xiong;gao xiong fu;gao xiong shi;Гаосюн;高雄;高雄巿;高雄市; +city::1674199;Yilan;Ciudad de Yilan;Gi-lan-chhi;Gî-lân-chhī;I-lan;I-lan-hsien;I-lan-shih;Ilan;Ilan';Jilanas;Ka-ma-lan;Kota Yilan;Nghi Lan;Ngi-lan-su;Ngì-làn-sṳ;Yilan;Yilan City;Yílán;ilan si;yi lan;yi lan shi;yylan;Илань;یلن سٹی;ییلان;宜蘭;宜蘭市;이란 시; +city::1674504;Hualien City;HUN;Hua Lien Kang;Hua-lien;Hua-lien-chiang;Hua-lien-hsien;Hua-lien-shih;Hualian;Hualian Shi;Hualien;Hualien City;Huālián Shì;Khualjan';hua lian shi;hwalyen si;hwalyn;Хуалянь;هوالین;花蓮市;화롄 시; +city::1675151;Hsinchu;HSZ;Hsin-chu;Hsin-chu-hsien;Hsin-chu-shih;Hsinchu;Kota Hsinchu;Sin'chzhu;Sin-chuk-su;Sin-cu;Sin-tek-chhi;Sin-tek-chhī;Sin-ču;Sinhcuz;Sinjhushih;Sîn-chuk-sṳ;Tan Truc;Tân Trúc;Xinzhu;Xinzhushi;nkhr sin cu;sinju si;syn shw;xin zhu;xin zhu shi;Синьчжу;Шиньжү;سين شو;นครซินจู๋;ཞིག་ཀྲུའུ།;新竹;新竹市;신주 시; +city::1678228;Keelung;Chi-lung;Chi-lung-shih;Chilung;Co Long;Czilun;Cơ Long;Gie-leng;Giĕ-lè̤ng;Jilong;Jilongshi;Jilongshih;Ke-lang-chhi;Ke-lâng-chhī;Keelung;Ki-lung-su;Kota Keelung;Kî-lùng-sṳ;Shi-lun;Ti-lung;ji long;ji long shi;jilung si;ky lngh;Ťi-lung;Цзилун;Ши-лун;كي لنغ;基隆;基隆市;지룽 시; +city::6696918;Taoyuan City;Taojuan';Таоюань; +city::6949678;Taitung City;GJai GJong;Taidong;Taitung;Tchaj-tung;Táidong;tai dong;Đài Đông;台東; +city::148730;Zanzibar;Gorad Zanzibar;Ilu Zanzibar;Poli tis Zanzivaris;Sansibar;Sansibar-Stadt;Unguja;ZNZ;Zanjibar;Zanzibar;Zanzibar City;Zanzibar by;Zanzibaras;Zanzibaro;Zanzibár;Zanzíbar;janjibaleusiti;mdynt znjbar;sang gei ba er shi;zanjibarushiti;zanzibari;zngbar;znzybr syty;Ìlú Zanzibar;Πόλη της Ζανζιβάρης;Горад Занзібар;Занзибар;Занзібар;זנזיבר סיטי;زنجبار شہر;زنگبار;مدينة زنجبار;ზანზიბარი;ザンジバルシティ;桑给巴尔市;잔지바르시티; +city::149027;Uyovu;; +city::149129;Ushirombo;Ushirombo; +city::149606;Tanga;Gorad Tanga;Longa;TGT;Tan'nka;Tanga;tan ga;tang-ga;tanga;tanga tanzanya;tnja;Τάνγκα;Горад Танга;Танга;טאנגה;تانگا، تانزانیا;تانگا، تنزانیہ;تنجا;タンガ;坦噶;탕가; +city::149658;Tabora;TBO;Tabora;Tampora;ta bo la;tabola;tabora;tabwra;Ταμπόρα;Табора;تابورا;タボラ;塔波拉;타보라; +city::149703;Sumbawanga;SUT;Sumbauanga;Sumbavanga;Sumbawanga;Zumbawanga;Zumbayanga;song ba wan jia;sumbawang-ga;sunbawanga;swmbawanga;Сумбаванга;Сумбауанга;سومباوانگا;スンバワンガ;松巴萬加;숨바왕가; +city::149879;Singida;; +city::150006;Shinyanga;SHY;Schinjanga;Shin'janga;Shinjanga;Shinyanga;Sinjanga;shinyanga;shynyanga;siniang-ga;xin yan jia;Šinjanga;Шиньянга;Шинянга;شینیانگا;シニャンガ;欣延加;시니앙가; +city::152224;Mwanza;Gorad Mvanza;MWZ;Muansa;Muanza;Muvanzo;Mvanza;Mwamza;Mwansa;Mwanza;meuwanja;mu wan zha;muwanza;mvanza;mwanza;Горад Мванза;Мванза;Муанза;موانزا;მვანზა;ムワンザ;姆万扎;므완자; +city::152451;Musoma;MUZ;Mazama;Misoma;Musoma;Musome;Muzoma;maswma;mu suo ma;musoma;mwswma;Мусома;ماسوما;موسوما;ムソマ;穆索馬;무소마; +city::153176;Mpanda;Mpanda; +city::153209;Moshi;Moschi;Moshi;Mosi;Mosis;Mošis;QSI;mo xi;moshi;mosi;mwshy;mwsy;Μόσι;Моши;מושי;موشی;موشی، تنزانیہ;モシ;莫希;모시; +city::153220;Morogoro;Gorad Maragora;Mkoa wa Morogoro;Morogoras;Morogoro;Moronkoro;Mrogoro;Murogoro;mo luo ge luo;mologolo;morogoro;mwrwghwrw;mwrwgwrw;Μορογκόρο;Горад Марагора;Морогоро;موروغورو;موروگورو;モロゴロ;莫罗戈罗;모로고로; +city::154380;Mbeya;MBI;Mbee;Mbeja;Mbeya;ambya;mbya;meubeya;mu bei ya;mubeya;Мбее;Мбея;امبیا;مبيا;مبیا;ムベヤ;姆貝亞;므베야; +city::155101;Makumbako;Makambako;Makumbako; +city::157403;Kilosa;Kilosa;Kilossa; +city::157738;Kigoma;Gorad Kigoma;Kigoma;Kigoma-Ujiji;Kigome;Kigomo;TKQ;ji ge ma;kigoma;kyghwma;kygwma;qygwmh;Горад Кігома;Кигома;Кигоме;קיגומה;كيغوما;کیگوما;キゴマ;基戈馬;키고마; +city::158151;Katumba;Kabumba;Katumba;Катумба; +city::159071;Iringa;IRI;Irin'nka;Iringa;ayrynga;ayryngha;iling-ga;iringa;yi lin jia;Ιρίνγκα;Иринга;إيرينغا;ایرینگا;イリンガ;伊林加;이링가; +city::160196;Dodoma;DOD;Dodom;Dodoma;Dodomao;Dódóma;Gorad Dadoma;Idodoma;Ntontoma;do do ma;dodoma;du du ma;duo duo ma;dwdwma;dwdwmh;totoma;Ντοντόμα;Горад Дадома;Додома;Դոդոմա;דאדאמא;דודומה;دودوما;دۆدۆما;ڈوڈوما;डोडोमा;दोदोमा;ਦੋਦੋਮਾ;டொடோமா;โดโดมา;დოდომა;ዶዶማ;ドドマ;多多马;杜篤瑪;도도마; +city::160263;Dar es Salaam;DAR;Dar Es Salaam;Dar Es Salam;Dar es Salaam;Dar es Salam;Dar es Salamas;Dar es Salams;Dar es Salám;Dar es-Salaam;Dar es-Salam;Dar əs Salam;Dar-ehs-Salam;Dar-ehs-Salam shaary;Dar-es-Salaam;Dar-es-Salam;Darasalam;Daresalama;Daresalamo;Daressalaam;Daressalam;Daruesselam;Darüsselam;Dárasalám;Dār es Salām;Dāresalāma;Gorad Dar-ehs-Salam;Ntar es Salam;Ntontoma;da lei si sa la mu;daleueseusallam;dar alslam;dar-es-salami;dar-xes-salam;dara asa salama;dara esa salama;daralslam;daruesusaramu;san lan gang;tarus'salam;Νταρ ες Σαλάμ;Ντοντόμα;Горад Дар-эс-Салам;Дар ес Салам;Дар ес-Салаам;Дар-ес-Салам;Дар-эс-Салам;Дар-эс-Салам шаары;דאר א-סלאם;דאר עס סאלאאם;دار السلام;دارالسلام;دارېسسالام;दार अस सलाम;दार एस सलाम;ਦਾਰ ਅਸ ਸਲਾਮ;தாருஸ்ஸலாம்;ดาร์-เอส-ซาลาม;ཏ་རེ་སི་ས་ལམ།;ဒါအက်စ် ဆယ်လန်းမြို့;დარ-ეს-სალამი;ダルエスサラーム;三蘭港;达累斯萨拉姆;다르에스살람; +city::160833;Buseresere;; +city::160892;Bunda;; +city::160961;Bukoba;BKZ;Bukoba;Bukobo;Gorad Bukoba;bu ke ba;bukoba;bwkwba;Букоба;Горад Букоба;بوكوبا;بوکوبا;ブコバ;布科巴;부코바; +city::161290;Bagamoyo;Bagamojo;Bagamoyo;ba jia mo yue;bagamoyo;bajamwyw;Багамойо;باجامويو;バガモヨ;巴加莫約;바가모요; +city::161325;Arusha;ARK;Aruscha;Arusha;Aruso;Aruŝo;a lu sha;arusha;arwsha;Аруша;آروشا;アルーシャ;阿鲁沙; +city::877401;Songea;SGX;Songea;Songeja;Ssongea;sangy;song gai a;song-gea;songea;swngya;Сонгеа;Сонгея;سانگی;سونگیا;ソンゲア;松蓋阿;송게아; +city::877747;Mtwara;MYW;Mikindani;Mtvara;Mtwara;amtwara;meuteuwala;mtwara;mutowara;Мтвара;امتوارا;متوارا;ムトワラ;므트와라; +city::616743;Druzhkivka;Druzhkivka;Druzhkovka;Дружковка;Дружківка; +city::686967;Zhytomyr;Gorad Zhytomir;Jitomir;Jytomyr;Jytómyr;Jîtomîr;Jıtomır;Schytomyr;Shitomir;ZTR;Zhitomir;Zhitomiru;Zhytomir;Zhytomyr;Zitomir;Zitomiria;Zjytomyr;Zotomor;Zsitomir;Zytomierz;Zytomyr;Zytomyras;jitomileu;jitomu~iru;jytwmyr;ri tuo mi er;z'ytwmyr;zhytwmyr;Ĵitomir;Żytomierz;Žitomir;Žytomyr;Žytomyras;Žõtomõr;Горад Жытомір;Житомир;Житомиръ;Жытомир;Ժիտոմիր;ז'יטומיר;זשיטאמיר;جيتومير;ژیتومیر;ჟიტომირი;ジトームィル;日托米尔;지토미르; +city::687196;Zhovti Vody;Geltonieji Vandenys;Jovti Vodi;Jovti Vody;Jovti Vodî;Jovti Vodı;Rudnik Shvarts;Scholti Woody;Schowti Wody;Zheleznyy Rudnik Shvarts;Zheltaya Reka;Zheltye Vody;Zheltyye Vody;Zhjoltye Vody;Zholtie vodi;Zhovti Vodi;Zhovti Vody;Zhyeltyy Vody;Zhëltaya Reka;Zhëltyye Vody;Zjovti Vody;Zolte Wody;Zovti Vodi;Zovti Vody;Zyoltie Vodi;jwfty fwdy;zhwfty wwdy;Żółte Wody;Žovti Vodi;Žovti Vody;Желтые Воды;Жовти Води;Жовті Води;Жолтие води;Жёлтые Воды;Ժյոլտիե Վոդի;جوفتي فودي;ژوفتی وودی;ჟოლტიე-ვოდი;ジョーウチ・ヴォーディ; +city::687700;Zaporizhia;Aleksandrovsk;Alexandrovsk;OZH;Saporischschja;Saporoshje;Zaborozha;Zaporijia;Zaporizhia;Zaporizhzhya;Zaporizza;Zaporizzja;Zaporižžja;Zaporozh'e;Zaporozh'ye;Zaporozhye;Zaporozh’e;Zaporozh’ye;Алекса́ндровск;Запорожье;Запоріжжя; +city::688105;Yevpatoriya;Eupatoria;Eupatorio;Evpatorija;Evpatorya;Eŭpatorio;Jevpatorija;Jewpatorija;Kezlev;Yevpatoriya;ybptwryh;Євпаторія;Евпатория;יבפטוריה; +city::688148;Yenakiyeve;Enakieve;Enakievo;Ordshonikidse;Ordzhonikidze;Rykovo;Yenakiieve;Yenakiyeve;Yenakiyevo;Єнакієве;Енакиево; +city::688533;Yalta;Ialta;Jalta;Jalto;Jałta;Yalta;ya er ta;yalta;yaruta;Ялта;يالطا;იალტა;ヤルタ;雅尔塔;얄타; +city::689558;Vinnytsya;VIN;Vinnica;Vinnicja;Vinnitsa;Vinnytsia;Vinnytsya;Winniza;Винница;Вінниця; +city::690548;Uzhhorod;Gorad Uzhgarad;Oezjhorod;Oujhorod;UDJ;Ujgorod;Ujhorod;Ujhorodo;Ujqorod;Ungvar;Ungvár;Uschhorod;Uzgorod;Uzhgorod;Uzhhorod;Uzhorod;Uzhorodas;Uzhorodum;Uzjhorod;Uĵhorodo;Użhorod;Užgorod;Užhorod;Užhorodas;awzhhwrwd;ujuholodeu;ujuhorodo;uzhgorodi;wu ri huo luo de;Úzhgorod;ʼwngwwʼr;Горад Ужгарад;Ужгород;אוז'הורוד;אונגוואר;اوژهورود;უჟგოროდი;ウージュホロド;乌日霍罗德;우주호로드; +city::690688;Uman';Human;Humań;Uman;Uman';Uman’;ʼwmn;ʼwmʼn;Умань;אומאן;אומן; +city::691374;Torez;Chistyakovo;Thorez;Topez;Tores;Torez;Toreza;Torezas;Tschistjakowa;Tschistjakowo;duo lie shi;twrz;Топез;Торез;Տորեզ;تورز;ტორეზი;多列士; +city::691650;Ternopil';TNL;Tarnopol;Tarnopol';Tarnopol’;Ternopil;Ternopil';Ternopilo;Ternopil’;Ternopol';Ternopol’;trnwpwl;Тернополь;Тернопіль;טרנופול; +city::691999;Syevyerodonets'k;Severodonec'k;Severodoneck;Severodonetsk;Sievierodonetsk;Syeverodonets'k;Syeverodonets’k;Syevyerodonets'k;Syevyerodonets’k;Северодонецк;Сєвєродонецьк; +city::692105;Sverdlovs'k;Imeni Sverdlova;Selo Imeni Sverdlova;Selo imeni Sverdlova;Sverdlovs'k;Sverdlovsk;Sverdlovs’k;Свердловск;Свердловськ;Село имени Свердлова; +city::692194;Sumy;Gorad Sumy;Soemi;Soemy;Soumy;Sumad;Sumae;Sumai;Sumi;Sumio;Sumo;Sumy;Sumî;Sumõ;Sumı;Szumi;UMY;su mei;sumi;sumu~i;swmy;Горад Сумы;Суми;Сумы;Սումի;סומי;سومي;سومی;სუმი;スームィ;蘇梅;수미; +city::692372;Stryi;Strij;Stry;Stryi;Stryj;Stryy;Стрий;Стрый; +city::692975;Stakhanov;Gorad Stakhanau;Kadijewka;Kadiyevka;Ssergo;Stachanov;Stachanovas;Stachanow;Stahanov;Stahanova;Stahhanov;Stajanov;Stajánov;Stakhanov;Staxanov;astakhanwf awkrayn;si da han nuo fu;Горад Стаханаў;Стаханов;Ստախանով;استاخانوف، اوکراین;სტახანოვი;斯達漢諾夫; +city::693381;Snizhne;Shezhnoye;Snezhnoe;Snezhnoye;Snizhne;Снежное;Сніжне; +city::693457;Smila;Smela;Smila;Smiła;asmyla awkrayn;si mi la;smela;smylh;Смела;Смила;Сміла;Սմելա;סמילה;اسمیلا، اوکراین;სმელა;斯米拉; +city::693468;Sloviansk;Gorad Slavjansk;Slavjansk;Slavyansk;Slawjansk;Sloveansk;Sloviansk;Slovjan'sk;Slovjans'k;Slovjansk;Slovjanska;Slovjanskas;Slovjansko;Slovyansk;Slov”yans'k;Slowiansk;Slowjansk;Słowiańsk;Słowjansk;aslwfyansk;seullobiyansikeu;si la wei yang si ke;slwfyansk;suravu~yansuku;Σλοβιάνσκ;Горад Славянск;Славянск;Славјанск;Словянськ;Словяньск;Սլովյանսկ;اسلوفیانسک;سلوفيانسك;სლავიანსკი;スラヴャンスク;斯拉維揚斯克;슬로비얀시크; +city::693805;Simferopol;Akmescit;Akməsҗit;Aq Mecit;Aq Mečit;Aqmescit;Gorad Simferopal';SIP;Simferepol';Simferopol;Simferopol';Simferopole;Simferopoli;Simferopolis;Simferopolj;Simferopolo;Simferòpol;Simferópol;Sinferopol;Sinferopoli;Sinferòpol;Symferopol;Symferopoli;Sympheropolis;Szimferopol;cimhperoppol;shinferopori;simpelopol;simpheropola;smfrwpwl;symfrbwl;symfrwbwl;symfrwpwl;symprwpwl;xin fei luo bo er;Συμφερόπολη;Акмәсҗит;Горад Сімферопаль;Симфереполь;Симферопол;Симферополь;Симферопољ;Сімферополь;Սիմֆերոպոլ;סימפרופול;سمفروپول;سيمفربول;سيمفروبول;سیمفروپول;सिंफेरोपोल;சிம்ஃபெரோப்போல்;სიმფეროპოლი;シンフェロポリ;辛菲罗波尔;심페로폴; +city::693942;Shostka;Schostka;Shostka;Шостка; +city::694382;Shakhtars'k;Katyk;Shakhtars'k;Shakhtars’k;Shakhtersk;Shakhtërsk;Zapadno-Gruppskiy;Шахтарськ;Шахтерск; +city::694423;Sevastopol;Akujar;Akyar;Aqjar;Aqyar;Sebastopol;Sebastopoli;Sebastopolis;Sebastopolo;Sebastòpol;Sevastopal';Sevastopol;Sevastopol';Sevastopole;Sevastopolis;Sevastopolj;Sevastopolo;Sevastopoľ;Sevastoupoli;Sewastopol;Sivastopol;Szevasztopol;Sébastopol;UKS;sai wa si tuo bo er;sbstwpwl;sebaseutopol;sevhastopola;sevu~asutopori;swastwpwl;syfastwbwl;Σεβαστούπολη;Акъяр;Севастопаль;Севастопол;Севастополь;Севастопољ;סבסטופול;سواستوپول;سيفاستوبول;सेव्हास्तोपोल;ဆီပတ်စတိုပိုမြို့;სევასტოპოლი;セヴァストポリ;塞瓦斯托波爾;세바스토폴; +city::695274;Rubizhne;Rubezhnaya;Rubezhnoe;Rubezhnoye;Rubizhne;Rubizne;Рубежное;Рубіжне; +city::695379;Roven'ky;Roven'ki;Roven'ky;Rovenki;Roven’ki;Roven’ky;Rowenki;Ровеньки; +city::695594;Rivne;Eractum;Gorad Rouna;RWN;Rivne;Rivno;Rivnė;Riwne;Rovno;Rowne;Ruvne;Równe;liune;luo fu nuo;riune;rovno;rwbnw;rwfnw;rywn;rywnh;Горад Роўна;Ровно;Рівне;Ռովնո;ראוונע;רובנו;روفنو;ریون;ریونه;როვნო;リウネ;羅夫諾;리우네; +city::696108;Pryluky;Priluki;Pryluki;Pryluky;Pryłuki;Прилуки; +city::696643;Poltava;Gorad Paltava;PLV;Poltav;Poltava;Poltavae;Poltave;Poltavo;Poltawa;Połtawa;Pultava;bo er ta wa;bwltafa;poltaba;porutavu~a;pwltawa;pwltbh;Горад Палтава;Полтав;Полтавæ;Полтава;Полтаве;Պոլտավա;פאלטאווע;פולטבה;بولتافا;پولتاوا;პოლტავა;ポルタヴァ;波尔塔瓦;폴타바; +city::697593;Pervomays'k;Ol'viopol';Olwiopol;Ol’viopol’;Pervomaisk;Pervomajs'k;Pervomajsk;Pervomays'k;Pervomays’k;Perwomaisk;Первомайск;Первомайськ; +city::697889;Pavlohrad;Gorad Paulagrad;Pavlogi;Pavlograd;Pavlohrad;Pavlohrada;Pavlohradas;Pawlograd;Pawlohrad;Pawłohrad;ba fu luo ge lei;pabeulloheuladeu;paurofurado;pawlwhrad;Горад Паўлаград;Павлоград;Պավլոգրադ;פאבלוהראד;پاولوهراد;პავლოგრადი;パウロフラード;巴甫洛格勒;파블로흐라드; +city::698625;Oleksandriya;Aleksandria;Aleksandrija;Aleksandriya;Alexandrija Pervaya;Oleksandrija;Oleksandriya;Александрия;Олександрия;Олександрія; +city::698740;Odessa;Ades;Gorad Adehsa;ODS;Odesa;Odess;Odessa;Odessa osh;Odessae;Odesse;Odessos;Odessus;Odessza;Odissos;Oděsa;Udessa;ao de sa;awdsa;awdysa;odesa;odessa;Ódessa;Οδησσός;Горад Адэса;Одеса;Одесс;Одессæ;Одесса;Одесса ош;Одессе;Օդեսա;אדעס;אודסה;أوديسا;اودسا;اوديسا;اودیسا;ओदेसा;အိုဒက်ဆာမြို့;ოდესა;オデッサ;敖德薩;오데사; +city::699035;Novovolyns'k;Novovolins'k;Novovolyns'k;Novovolynsk;Novovolynskiy;Novovolyns’k;Нововолинськ;Нововолынск; +city::699445;Novomoskovs'k;Novomoskovs'k;Novomoskovsk;Novomoskovs’k;Новомосковск;Новомосковськ; +city::699553;Novohrad-Volyns'kyy;Novograd Volynski;Novograd-Volins'kij;Novograd-Volynsk;Novograd-Volynskij;Novograd-Volynskiy;Novohrad-Volyns'kyy;Novohrad-Volyns’kyy;Nowograd Wolynsk;Nowogrod Wolynski;Nowogród Wołyński;Zvyagel';Zvyagel’;Zvydgel;Zwiahl;nwbwhrd-wwlynsqy;Новоград-Волинський;Новоград-Волынский;נובוהרד-וולינסקי; +city::699839;Nova Kakhovka;Naujoji Kachovka;Nova Kachovka;Nova Kahovka;Nova Kajovka;Nova Kakhovka;Novaja Kakhovka;Novaya Kakhova;Novaya Kakhovka;Novaya Kaxovka;Novo Kakhovka;Nowa Kachowka;nobakahouka;nwbh qhwbqh;nwwa kakhwfka;xin ka huo fu ka;Нова Каховка;Новая Каховка;Նովայա Կախովկա;נובה קחובקה;نووا کاخوفکا;ნოვაია-კახოვკა;新卡霍夫卡;노바카호우카; +city::699942;Nizhyn;Gorad Nezhyn;Neshin;Nezhin;Nezin;Niezyn;Nieżyn;Nijin;Nijino;Nijyn;Nijîn;Nijın;Nischyn;Nizhin;Nizhyn;Nizin;Nizjyn;Nizon;Nizyn;Nizynas;Niĵino;Nižyn;Nižynas;Nižõn;nie ren;nyzhyn;Горад Нежын;Нежин;Нижин;Ніжин;Нїжин;Նեժին;نیژین;涅任; +city::700051;Nikopol';Nikopol;Nikopol';Nikopol’;Никополь;Нікополь; +city::700569;Mykolayiv;Mikolaiv;Mykolaiv;Mykolayiv;NLV;Nikolaev;Nikolajew;Nikolayev;Vernoleninsk;Верноленинск;Миколаїв;Николаев; +city::700646;Mukacheve;Mikachevo;Mukaceve;Mukacevo;Mukacheve;Mukachevo;Mukaczewo;Mukatschewe;Mukačeve;Mukačevo;Munkacevo;Munkachevo;Munkacs;Munkačevo;Munkács;Мукачеве;Мукачево;מונקאטש;מונקאץ'; +city::701404;Melitopol';Melitopol;Melitopol';Melitopol’;mellitopol;Мелитополь;Мелітополь;멜리토폴; +city::701822;Mariupol;Gorad Maryupal';Hayeren;MPW;Marijupol;Marioupol;Marioupol';Marioupoli;Mariupol;Mariupol';Mariupolj;Zhdanov;hindi;kartuli;ma li wu bo er;ma ri xupal;maliupol;mari'upol;mari'upola;marywbwl;marywpwl;mrwpl;mryʼwpwl;mʼrywpʼl;ri ben yu;Μαριούπολη;Горад Марыупаль;Жданов;Мариупол;Мариуполь;Маријупољ;Маріуполь;Марїоуполь;Հայերեն;מאריופאל;מריאופול;ماريوبول;ماریوپول;مروپل;मरिउपोल;हिन्दी;మరిఉపొల్;ಮರಿಉಪೊಲ್;มารีอูปัล;ქართული;ማሪኡፖል;日本語;马里乌波尔;마리우폴; +city::701855;Marhanets';Komintern;Marganec;Marganec';Marganets;Marhanets';Marhanets’;Марганец;Марганець; +city::702320;Makiyivka;Dmitriyevsk;Makayevka;Makeevka;Makejewka;Makeyevka;Makiivka;Makiyivka;Makyeevka;Makyevka;Макеевка;Макіївка; +city::702550;Lviv;Gorad L'vou;Ilbav;L'viv;L'vov;L'vov osh;LWO;Lavov;Lembaersch;Lemberg;Lemburg;Lembärsch;Leopoli;Leopolis;Leopołi;Leopul;Leópolis;Liopuli;Liov;Liòpuli;Ljviv;Lviv;Lvivo;Lvov;Lvova;Lvovas;Lwif;Lwiw;Lwow;Lwuw;Lwów;Lwůw;l wif;l'vov;lbwb;lfyf;li wo fu;libibeu;libiu;livhiva;liviv;lvov;lvovi;lvyv;lwwf;lwyw;lywyw;lʻmbryq;rivu~iu;İlbav;Ļvova;Ľvov;Λβιβ;Горад Львоў;Лавов;Лвов;Львив;Львов;Львов ош;Львів;Լվով;לבוב;לעמבערג;לעמבריק;لفيف;لووف;لویو;لڤیڤ;لیویو;लिव्हिव;லிவீவ்;ลวีฟ;ლვოვი;リヴィウ;利沃夫;리비브;리비우; +city::702569;Luts'k;Loetsk;Loutsk;Luc'k;Luck;Luckas;Lucko;Luts'k;Lutsk;Luts’k;Luzk;UCK;lwzq;Łuck;Луцк;Луцьк;לוצק; +city::702658;Luhansk;Gorad Lugansk;Loehansk;Louchansk;Louhansk;Lugan'sk;Lugans'k;Lugansk;Luganskaj;Lugánsk;Luhans'k;Luhansk;Luhanska;Luhanskas;Luhansko;Luhanszk;Luhans’k;Lukhansk;Luqansk;VSG;Voroshilovgrad;Woroschilowgrad;lu gan si ke;luhansikeu;lwhansk;lwhnsq;ruhanshiku;Ługańsk;Łuhańsk;Λουχάνσκ;Ворошиловград;Горад Луганск;Луганск;Луганскай;Луганськ;Луганьск;Луханск;Луһанск;Լուգանսկ;לוהנסק;لوهانسك;لوهانسک;لوہانسک;ლუგანსკი;ルハーンシク;卢甘斯克;루한시크; +city::702723;Lubny;Loubny;Lubin;Lubnai;Lubni;Lubnie;Lubny;Lubnî;Lubnı;lu bu ni;lubni;lwbny;Łubnie;Лубни;Лубны;Լուբնի;לובני;لوبنی;ლუბნი;盧布尼; +city::702760;Lozova;Losowa;Losowaja;Lozova;Lozovaja;Lozovaya;Lozowa;lozovaia;luo zuo wa;lwzwbh;Łozowa;Лозова;Лозовая;Լոզովայա;לוזובה;ლოზოვაია;洛佐瓦; +city::702972;Lysychans'k;Lisichans'k;Lisichansk;Lysychans'k;Lysychans’k;Лисичанск;Лисичанськ; +city::703448;Kyiv;Chijv;Civ;Cív;Gorad Kieu;IEV;Kaenugardur;Keju;Kiebo;Kief;Kieu;Kiev;Kiev osh;Kievi;Kievo;Kiew;Kiiev;Kiiv;Kijev;Kijeva;Kijevas;Kijew;Kijow;Kijuw;Kijv;Kijów;Kijůw;Kiova;Kiovia;Kiyev;Kiyiw;Kiëf;Kjiv;Kueyiv;Kyev;Kyiiv;Kyiv;Kyiw;Kyjev;Kyjiv;Kyjiw;Kyèv;Kænugarður;Kíev;Kîev;Küyiv;ji fu;kheiyf;kiefu;kiv;kiva;kiyebha;kiyepeu;kyf;kyiva;kyyf;qyyb;Κίεβο;Горад Кіеў;Кейӳ;Киев;Киев ош;Київ;Кијев;Кыив;Кыйив;Кꙑѥвъ;Կիև;קייב;קיעוו;كىيېۋ;كييف;کیف;کیێڤ;کی‌یف;कीव;क्यीव;কিয়েভ;கீவ்;കീവ്;เคียฟ;ཀིབ།;ကီးယက်မြို့;კიევი;ኪየቭ;キエフ;基輔;키예프; +city::703845;Kryvyi Rih;Gorad Kryvy Rog;KWG;Krivi Rih;Krivi Rog;Krivii Rih;Krivij Rig;Krivij Rih;Kriviy Rig;Krivoi Rog;Krivoj Rog;Krivoj rog;Krivojroga;Krivoy Rog;Krivoy Roq;Krivyj Rig;Kriví Rih;Krivói Rog;Kriwoi Rog;Krovoi Rig;Kruevuey Rih;Kryvy Rih;Kryvyi Rih;Kryvyj Rih;Kryvyj Rihas;Kryvyy Rih;Kryvyï Rih;Krywyj Rih;Krzywy Rog;Krzywy Róg;Krîvîi Rih;Krõvõi Rig;Krüvüy Rih;Krıvıy Rig;ke li wo luo ge;keulibiliheu;kh ri wi rikh;kryfy ryh;kryfyy ryh;qryby ryh;Горад Крывы Рог;Криви Рог;Кривий Риҕ;Кривий Ріг;Кривой Рог;Кривой рог;Кривый Ріг;Կրիվոյ Ռոգ;קריבי ריה;كريفي ريه;کریفیی ریه;ครีวีริค;კრივოი-როგი;クルィヴィーイ・リーフ;克里沃罗格;크리비리흐; +city::704147;Kremenchuk;Gorad Kramjanchug;KHU;Kermenchuk;Kremenchug;Kremenchuk;Kremenciuk;Kremencsuk;Kremencug;Kremencuk;Kremencuka;Kremencukas;Krementchouk;Krementjuk;Krementschug;Krementschuk;Krementsjoek;Krementsjuk;Krementsuk;Krementxuk;Krementšuk;Kremençug;Kremençuk;Kremenĉuk;Kremenčuk;Kremenčuka;Kremenčukas;Krzemienczuk;Krzemieńczuk;ke lie mian qiu ge;keulemenchukeu;krmnchwk;kuremenchuku;kʼremenchugi;qrmnzwg;Горад Крамянчуг;Керменчӳк;Кирмәнчек;Кременчуг;Кременчук;Կրեմենչուգ;קרמנצוג;کرمنچوک;კრემენჩუგი;クレメンチューク;克列緬丘格;크레멘추크; +city::704202;Krasnyy Luch;Krasnij Luch;Krasniluch;Krasny Luch;Krasnyi Luch;Krasnyj luch;Krasnyy Luch;Krassntjlutsch;Красний Луч;Красный луч; +city::704422;Krasnoarmiys'k;Grishino;Krasnoarmejsk;Krasnoarmeysk;Krasnoarmeyskoye;Krasnoarmijs'k;Krasnoarmiys'k;Krasnoarmiys’k;Krassnoarmeiskoje;Красноармейск;Красноармійськ; +city::704508;Kramators'k;Kramators'k;Kramatorsk;Kramatorskaja;Kramatorskaya;Kramators’k;Краматорск;Краматорськ; +city::704617;Kovel;Kovel;Kovel';Kovel’;Kowel;Ковель; +city::704901;Korosten';Korosten;Korosten';Korostenj;Korosten’;Korosteń;Koroszteny;Коростень; +city::705104;Kostyantynivka;Konstantinovka;Konstantinowka;Kostjantinivka;Kostjantyniwka;Kostyantynivka;Константиновка;Костянтинівка; +city::705135;Konotop;Gorad Kanatop;Kanatyp;Konotop;Konotopa;Konotopas;ke nuo tuo pu;kho nx thxp;kwnwtwp;qwnwtwp;Горад Канатоп;Канатып;Конотоп;Կոնոտոպ;קונוטופ;کونوتوپ;โคนอทอป;კონოტოპი;科諾托普; +city::705392;Kolomyya;Colomeea;Kholomya;Kolomea;Kolomea-Ost;Kolomeo;Kolomija;Kolomyia;Kolomyja;Kolomyya;Kołomyja;Коломия;Коломыя; +city::705812;Kropyvnytskyi;Elisavet;Elisavetgrad;Elizavetgrad;Gorad Kiravagrad;Jelisawetgrad;Jelizawietgrad;KGO;Kirovo;Kirovograd;Kirovogrado;Kirovohrad;Kirovohrada;Kirovohradas;Kirovohrado;Kirovoqrad;Kirowo;Kirowograd;Kirowohrad;Kropivnic'kij;Kropivnickij;Kropyvnytskyi;Kropywnycki;Sinowjewsk;Yelisavetgrad;Yelizavetgrad;Yelizavety;Zinov'evs'k;Zinov'evsk;Zinov'yevsk;Zinovievsk;Zinov’evsk;Zinov’yevsk;Zinowjewsk;ji luo wo ge lei;kiloboheuladeu;kirovu~ofurado;kyrwwhrad;qyrwbwgrd;Єлизаветград;Єлисавет;Горад Кіраваград;Елисаветград;Зиновьевск;Зінов'євськ;Кирово;Кировоград;Кропивницкий;Кропивницький;Кірово;Кіровоград;Կիրովոգրադ;קירובוגרד;کیرووهراد;کیرووہراد;კიროვოგრადი;キロヴォフラード;基洛沃格勒;키로보흐라드; +city::706369;Khmelnytskyi;Chmelnyzkyj;HMJ;Kamelnitskiy;Khmel'nic'kij;Khmel'nickij;Khmel'nitskiy;Khmel'nyts'kyy;Khmelinitski;Khmel’nitskiy;Khmel’nyts’kyy;Proskurov;Proskurovak;Proskurow;Проскуров;Хмельницкий;Хмельницький; +city::706448;Kherson;Cherson;Chersona;Chersonas;Chersoń;Gorad Kherson;H'erson;Herson;Hersona;Hersono;Herszon;H’erson;Jerson;Jersón;KHE;Kherson;Xerson;he er song;heleuson;heruson;hrswn;khersana;khersoni;khrswn;khyrswn;Ĥersono;Χερσώνα;Горад Херсон;Херсон;Խերսոն;חרסון;خرسون;خيرسون;خیرسون;खेर्सन;ხერსონი;ヘルソン;赫尔松;헤르손; +city::706466;Khartsyz'k;Kharciz'k;Kharcyzsk;Khartsysk;Khartsyz'k;Khartsyzsk;Khartsyz’k;Харцизьк;Харцызск; +city::706483;Kharkiv;Carcovia;Carcóvia;Charcovia;Charkiv;Charkiw;Charkov;Charkovas;Charkow;Charków;HRK;Harkiv;Harkiva;Harkivo;Harkov;Harkova;Jarkov;Khar'kov;Kharkiv;Kharkov;Khar’kov;ha er ke fu;haleukiu;harikofu;hrqwb;kaleukipeu;kalipeu;kharkwf;Ĥarkivo;Ĥarkov;Харков;Харків;Харьков;חרקוב;خاركوف;ხარკოვი;ハリコフ;哈爾科夫;카르키프;카리프;하르키우; +city::706524;Kerch;Bospor;KHC;Kerc;Kerc';Kerca;Kerce;Kerch;Kerch';Kerci;Kerco;Kercs;Kercz;Keric;Keritch;Keriç;Kertch;Kertj;Kerts;Kertsch;Kertschia;Kertsj;Kertx;Kertš;Kerç;Kerĉo;Kerč;Kerč';Kerča;Kerčė;Panticapaeum;ke chi;keleuchi;kerchi;keruchi;krch;kyrtsh;qrz;Κερτς;Керч;Керчь;Կերչ;קרץ;كيرتش;کرچ;ქერჩი;ケルチ;刻赤;케르치; +city::706950;Kamianets-Podilskyi;KCP;Kam"yanets'-Podil's'kyy;Kam'janec'-Podil's'kij;Kamenec-Podol'skij;Kamenec-Podolski;Kamenets Podol'ski;Kamenets Podol’ski;Kamenets-Podilski;Kamenets-Podol'sk;Kamenets-Podol'skiy;Kamenets-Podol’sk;Kamenets-Podol’skiy;Kamenez-Podolsk;Kamianets-Podilskyi;Kamieniec Podolski;Kamjanec'-Podil's'kij;Kamjanets-Podilskoi;Kamjanets-Podilskyi;Kamjanets-Podilskyj;Kamjanets-Podilskõi;Kamjanez-Podilskyj;Kamyanets-Podilsky;Kam”yanets’-Podil’s’kyy;qmnyz-pwdwlsqy;qʼamʻnyz;qʼamʻnʻz־pʼdʼlsq;Каменец-Подолски;Каменец-Подольский;Камянець-Подільський;Кам’янець-Подільський;קאַמעניץ;קאַמענעץ־פאדאלסק;קמניץ-פודולסקי; +city::707099;Kalush;Kalouch;Kalush;Kalusz;Katusz;Kałusz;karushu;Калуш;קאַלוש;カルシュ; +city::707292;Izyum;Izjum;Izyum;Изюм; +city::707308;Izmayil;Ismail;Ismajil;Izmail;Izmaił;Izmayil;Tuchkov;İsmail;Ізмаїл;Измаил;Измаїл; +city::707471;Ivano-Frankivs'k;IFO;Ivano-Frankivs'k;Ivano-Frankivs’k;Ivano-Frankovsk;Stanislau;Stanislav;Stanislavov;Stanislavyv;Stanislaw;Stanistawow;Stanistawów;Stanisław;stnyslb;stʼnyslʼww;ʼywwnw-prnqybsq;Івано-Франківськ;Ивано-Франковск;איוונו-פרנקיבסק;סטאניסלאוו;סטניסלב; +city::707688;Illichivs'k;Il'ichevka;Il'ichevsk;Illichivs'k;Illichivs’k;Ilyitschovsk;Il’ichevka;Il’ichevsk;Il’ichëvsk;Іллічівськ;Ильичевск; +city::707753;Horlivka;Gorlauka;Gorlivka;Gorlovk;Gorlovka;Gorlovko;Gorlowka;Gorłówka;Górlovka;Horlivka;Horliwka;Horļivka;Hòrlivka;Qorlivka;ge er luo fu ka;gorlovkʼa;holeulliuka;hwrlybqh;hwrlyfka;Горлаўка;Горловк;Горловка;Горловко;Горлівка;Һорливка;Գորլովկա;הורליבקה;هورليفكا;هورلیفکا;გორლოვკა;戈爾洛夫卡;호를리우카; +city::709161;Feodosiya;Caffa;Feodosia;Feodosija;Feodosiya;Feodossia;Feodossija;Feodosya;Feodòssia;Fyeodosiya;Kaffa;Kefe;Teodosia;Teodozio;Teodozja;Teodósia;Theodosia;Theodosie;Théodosie;feodoshiya;pe-odosiya;Феодосия;Феодосія;フェオドシヤ;페오도시야; +city::709248;Fastiv;Fastiv;Fastiva;Fastiw;Fastov;Fastow;Fastów;fa si di fu;fastyw;pstwb;Фастив;Фастов;Фастів;Ֆաստով;כוואסטוב;פסטוב;فاستیو;ფასტოვი;法斯蒂夫; +city::709276;Energodar;Ehnergodar;Energodar;Енергодар;Энергодар; +city::709611;Drohobych;Drogobich;Drogobych;Drogobycz;Drohobic;Drohobico;Drohobiĉ;Drohobiĉo;Drohobych;Drohobycz;Drohobytsch;Drohobytsj;dorohobu~ichi;drwhwbyz;Дрогобич;Дрогобыч;דרוהוביץ;ドロホブィチ; +city::709717;Donetsk;DOK;Donec'k;Doneck;Doneck osh;Donecka;Doneckas;Donecko;Donesk;Donetk;Donetsk;Donetsk i Ukraina;Donezk;Donețk;Donieck;Donietsk;Donjeck;Doněck;Dońeck;Doņecka;Gorad Daneck;Hughesovka;Jusowka;Juzivka;Juzovka;Ntonetsk;Stalin;Staline;Stalino;Yuzovka;Yuzovo;deanerrsk;do net skh;donecheukeu;donetska;donetsu~iku;dun nie ci ke;dwntsk;dwnytsk;dwnzq;tonetsk;Ντονέτσκ;Горад Данецк;Донецк;Донецк ош;Донецьк;Доњецк;Сталино;Сталіне;Сталіно;Юзовка;Юзівка;Դոնեցկ;דונצק;دونتسک;دونيتسك;دونیتسک;دۆنێتسک;दोनेत्स्क;தோனெத்ஸ்க்;ഡൊണെറ്റ്സ്ക്;โดเนตสค์;დონეცკი;ドネツィク;頓涅茨克;도네츠크; +city::709930;Dnipro;DNK;Dnepr;Dnepropetrovsk;Dnepropetrovska;Dnepropetrowsk;Dnetropetrovsk;Dniepropetrovsk;Dniepropetrovskas;Dniepropetrowsk;Dnipro;Dnipropetrovs'k;Dnipropetrovsk;Dnipropetrovsko;Dnipropetrovs’k;Dnipropetrowsk;Dnjepropetrovsk;Dnjepropetrowsk;Dnjipropetrovsk;Dnyipropetrovszk;Dněpropetrovsk;Dņepropetrovska;Ekaterinoslav;Ekaṭerinoslav;Gorad Dneprapjatrousk;Iekaterinoslav;Katerynoslav;Ntnipropetrofsk;Yekaterinoslav;Yekaterinovslav;d ni por pet rxfskh;deunipeulopeteulousikeu;di nie bo luo bi de luo fu si ke;dnepropetrovska;dnybrwbtrwfsk;dnyprwptrwbsq;dnyprwptrwfsk;dnyprwptrwwsk;donipuropetoroushiku;Ντνιπροπετρόφσκ;Горад Днепрапятроўск;Днепр;Днепропетровск;Дніпро;Дніпропетровськ;Днїпропетровск;Дњепропетровск;Екатеринослав;Դնեպրոպետրովսկ;דניפרופטרובסק;دنيبروبتروفسك;دنیپروپتروفسک;دنیپروپترووسک;द्नेप्रोपेत्रोव्स्क;ดนีโปรเปตรอฟสค์;დნეპროპეტროვსკი;ドニプロペトロウシク;第聂伯罗彼得罗夫斯克;드니프로페트로우시크; +city::709932;Dniprodzerzhyns'k;Dneprodsershinsk;Dneprodzerzhinsk;Dneprodzherzhinsk;Dnieprodzerzhynsk;Dniprodzerzhyns'k;Dniprodzerzhynsk;Dniprodzerzhyns’k;Kam'jans'ke;Kamenskoe;Kamenskoye;Kamianske;Днепродзержинск;Кам'янське;Каменское; +city::710554;Chervonohrad;Cervonohrad;Chervonograd;Chervonohrad;Czerwonohrad;Krasnipali;Krisnipolye;Kristinopol';Kristinopol’;Krvstonopol;Krystynopol;Червоноград; +city::710719;Chernivtsi;CWC;Cernauti;Cernivci;Cernivciai;Cernivco;Cernivtsi;Cernovci;Cernovice;Cernăuţi;Cernăuți;Charnaucy;Chernivci;Chernivtsi;Chernovci;Chernovcy;Chernovits;Chernovitsy;Chernovsi;Chernovtsy;Csernyivci;Czerniowce;Czernovicum;Czernowitz;Tchernivtsi;Tjernivtsi;Tschernowitz;Tsernivtsi;Tsjernivtsi;Txernivtsi;Txernivtsí;Tšernivtsi;cheleuniuchi;chernovtsi;cheruniutsu~i;chrnywtsy;chyrnywtsy;qie er nuo fu ce;zrnwbyz;Çernivtsi;Çernivtsı;Ĉernivco;Černivci;Černivciai;Černovci;Černovice;Čerņivci;Чарнаўцы;Чернивци;Черновци;Черновцы;Чернівці;Чернівцї;Չեռնովցի;טשערנאוויץ;צרנוביץ;چرنیوتسی;چیرنیوتسی;ჩერნოვცი;チェルニウツィー;切爾諾夫策;체르니우치; +city::710735;Chernihiv;Cernigau;Cernigiv;Cernigivo;Cernigovas;Cernigău;Cernihiv;Cernihivo;Cernihiw;Cernihov;Cerniqov;Chernigiv;Chernigov;Chernihiv;Chernígov;Csernyihiv;Czernihovia;Czernihow;Czernihów;Gorad Charnigau;Tchernihiv;Tjernihiv;Tschernigow;Tschernihiw;Tsernigiv;Tsernihiv;Tsjernihiv;Txernihiv;Txerníhiv;Tšernigiv;Tšernihiv;cheleunihiu;chernigovi;cherunihiu;chrnyhyf;qie er ni ge fu;tshrnyhyf;z'rnyhyb;Çernigiv;Çerniqov;Ĉernigivo;Ĉernihivo;Černigiv;Černigovas;Černihiv;Černihiw;Černihov;Горад Чарнігаў;Чернигов;Чернігів;Чернїгів;Չեռնիգով;צ'רניהיב;تشرنيهيف;چرنیهیف;چرنیہیف;ჩერნიგოვი;チェルニーヒウ;切尔尼戈夫;체르니히우; +city::710791;Cherkasy;CKC;Cerkasad;Cerkasai;Cerkasi;Cerkaso;Cerkassi;Cerkasy;Cerkasî;Cherkas khot;Cherkasi;Cherkassi;Cherkassy;Cherkasy;Circassium;Cserkaszi;Czerkasy;Gorad Charkasy;Tcherkassi;Tcherkassy;Tcherkássi;Tjerkasy;Tscherkassy;Tserkasso;Tserkasy;Tsjerkasi;Tsjerkasy;Txerkassi;Txerkasy;Tšerkassõ;Tšerkasy;cheleukasi;cherukasu~i;chrkasy;chrkysy;chyrkasy;qie er ka se;zrqʼsy;Çerkassi;Çerkası;Ĉerkaso;Čerkasad;Čerkasai;Čerkasi;Čerkasy;Горад Чаркасы;Черкас хот;Черкаси;Черкасси;Черкассы;Черкасы;Չերկասի;צרקאסי;چرکاسی;چرکیسی;چیرکاسی;ჩერკასი;チェルカースィ;切爾卡瑟;체르카시; +city::711369;Bryanka;Brjanka;Bryanka;Bryanskiy;Bryanskiy Rudnik;Брянка; +city::711390;Brovary;Brovarai;Brovari;Brovary;Brovarî;Brovarı;Browary;Gorad Bravary;beulobali;brovari;brwfary;brwwary;bu luo wa li;burovu~aru~i;Бровари;Бровары;Броварі;Горад Бравары;Բրովարի;ברובארי;بروفاري;بروواری;ბროვარი;ブロヴァルィー;布羅瓦里;브로바리; +city::711660;Boryspil';Borispil';Borispilo;Borispol';Borispol’;Boryspil;Boryspil';Boryspil’;Boryspol;boru~isupiri;Борисполь;Бориспіль;ボルィースピリ; +city::712160;Bilhorod-Dnistrovs'kyy;Akkerman;Belgorod-Dnestrovskij;Belgorod-Dnestrovskiy;Bilgorod-Dnistrovs'kij;Bilhorod-Dnistrovs'kyy;Bilhorod-Dnistrovs’kyy;Byelogorod;Cetatea Alba;Cetatea Albă;Белгород-Днестровский;Білгород-Дністровський; +city::712165;Bila Tserkva;Belaja Cerkov';Belaja Zerkow;Belaya Tserkov';Belaya Tserkov’;Belaya serkov;Biala Cerkiew;Biała Cerkiew;Bila Cerkva;Bila Cerkwa;Bila Terkva;Bila Tserkva;Bila Zerkwa;Bila Țerkva;Gorad Belaja Carkva;Shura Chirku;bai cai er ke wei;belaia-tserkʼovi;billacheleukeuba;byla tsrkfa;byla tsyrkfa;bylh zrqwwh;Белая Церковь;Била Церква;Біла Церква;Горад Белая Царква;Шурă Чиркӳ;Բելայա Ցերկով;בילה צרקווה;שווארצע טומאה;بيلا تسيركفا;بیلا تسرکفا;ბელაია-ცერკოვი;ビーラ・ツェールクヴァ;白采尔科维;빌라체르크바; +city::712441;Berdychiv;Berdicev;Berdichen;Berdichev;Berdichiv;Berdiciv;Berdiciva;Berditschew;Berdiçev;Berdičiva;Berdychiv;Berdyciv;Berdycivas;Berdyciw;Berdyczow;Berdyczów;Berdytchiv;Berdytjiv;Berdytschiw;Berdytsiv;Berdytsjiv;Berdytšiv;Berdyčiv;Berdyčivas;Berdyčiw;Berdîciv;Berdıçiv;Gorad Behrdychyu;beleudichiu;berdichevi;berudichifu;bie er ji qie fu;brdychyf;brdyzb;byrdytshyf;Бердичев;Бердичив;Бердичів;Горад Бэрдычыў;Բերդիչև;בערדיטשעוו;ברדיצב;بردیچیف;بيرديتشيف;ბერდიჩევი;ベルディチフ;別爾基切夫;베르디치우; +city::712451;Berdyans'k;Berdjans'k;Berdjansk;Berdyans'k;Berdyansk;Berdyans’k;Osipenko;Бердянск;Бердянськ; +city::713174;Artemivs'k;Artemivs'k;Artemivs’k;Artemovsk;Artemovskiy;Artemowsk;Artëmovsk;Bakhmut;Артемовск;Артемівськ; +city::713259;Antratsyt;Antracit;Antracita;Antracyt;Antracytas;Antratit;Antratsit;Antratsot;Antratsyt;Antratsõt;Antratsıt;Antrazyt;Antrațît;Bokovo-Antratsit;an te la qi te;antratsyt;Антрацит;Անտրացիտ;آنتراتسیت;أنتراتسيت;ანტრაციტი;安特拉齊特; +city::713716;Alchevs'k;Alchevs'k;Alchevsk;Alchevskoe;Alchevs’k;Kommunarsk;Voroshilovsk;Woroschilowsk;Алчевск;Алчевськ; +city::6559559;Komsomolsk;Komsomol's'k;Komsomol'sk;Komsomolsk;Komsomolsk i Ukraina;Komsomolsk na Dnepru;Komsomolska;Komsomoļska;gong qing cheng;komsomolsikeu;kwmswmwlsk awkrayn;qwmswmwlsq;Комсомолск;Комсомольск;Комсомольськ;Комсомољск на Дњепру;Կոմսոմոլսկ;קומסומולסק;کومسومولسک، اوکراین;კომსომოლსკი;共青城;콤소몰시크; +city::226234;Soroti;SRT;Soroti;suo luo ti;swrwty;סורוטי;سوروتی;索羅提; +city::227812;Njeru;Daru;Njeru; +city::228853;Mukono;Mukono; +city::229268;Mbarara;Barara;MBQ;Mbarara;eumbalala;mbarara;Μπαράρα;Мбарара;مبارارا;მბარარა;음바라라; +city::229278;Mbale;Mbale;Mbalė;mu ba lai;Мбале;מבאלה;مبالے;姆巴萊; +city::229380;Masaka;Masaka;Masaki;Масака;Масаки; +city::230166;Lira;Lira;lyrh;Лира;לירה;لیرا، یوگنڈا; +city::230893;Kitgum;Kitgum;Kitgumo;Китгум; +city::232066;Kasese;KSE;Kasese;Kasesė;ka sai sai;qssh;Касесе;קססה;کاسیسے;卡塞塞; +city::232422;Kampala;Campala;Gorad Kampala;IKampala;KLA;Kaempaala;Kambaala;Kampal;Kampala;Kampalo;Kanpala;kam pa la;kambala;kampala;kampalla;kan pa la;kanpara;kapala;kmpala;qmplh;Καμπάλα;Горад Кампала;Кампала;Կամպալա;קאמפאלא;קמפלה;كامبالا;كامپالا;کامپالا;کمپالا;کمپالہ;कंपाला;कम्पाला;ਕੰਪਾਲਾ;କାମ୍ପାଲା;கம்பாலா;กัมปาลา;ཀམ་པ་ལ།;კამპალა;ካምፓላ;カンパラ;坎帕拉;캄팔라; +city::233114;Jinja;Dzhindzha;Dzindza;Džindža;JIN;Jinga;Jinja;Tzintza;gyngh;jin gu;jinja;Τζίντζα;Джинджа;גינגה;ジンジャ;金賈;진자; +city::233346;Gulu;Gul;Gulu;Nkoulou;ULU;gu lu;gullu;gulu;gwlw;Γκουλού;Гул;Гулу;גולו;گولو;გულუ;古盧;굴루; +city::233508;Entebbe;EBB;Ehntebbe;Entebbe;Entebe;Entebė;antbh;antyby;en de pei;entebe;Ентеббе;Ентебе;Энтеббе;אנטבה;ענטעבע;إنتيبي;انتبه;انتیبے;အင်တက်ဘီမြို့;ენტებე;エンテベ;恩德培;엔테베; +city::233730;Bwizibwera;Bwizibwera; +city::235039;Arua;Arua;RUA;a lu a;alua;arwa;Аруа;اروا;阿鲁阿;아루아; +city::4049979;Birmingham;BHM;Bermincham;Bermingkham;Birmingam;Birmingamas;Birmingem;Birmingema;Birmingham;Birmingham i Alabama;Birminhem;Gorad Birmingem;baminguhamu;baminhamu;barmingahema;barmingahyama;beominghaem;birmingemi;bo ming han;brmnghham;brmyngm alabama;parminkam;Μπέρμιγχαμ;Бермингхам;Бирмингам;Бирмингем;Бірмінгем;Горад Бірмінгем;ברמינגהאם;برمنغهام;برمنگھم، الاباما;برمینگم، آلاباما;बर्मिंगहॅम;बर्मिङ्गह्याम;பர்மிங்காம்;རྦིར་མིང་ཧམ།;ბირმინგემი;バーミングハム;バーミンハム;伯明翰;버밍햄; +city::4058553;Decatur;Decatur;Dekejter;Dekejtur;decatur;dekatara;di kai te;dikeiteo;diketa;diketara;dykatwr;dykytr alabama;Декейтер;Декејтур;ديكاتور;دیکیتر، آلاباما;دیکەیتەر، ئەلاباما;ڈیکیٹر، الاباما;डिकेटर;डेकाटर;ディケーター;迪凯特;디케이터; +city::4059102;Dothan;Cawthons Cowpen;DHN;Dotan;Dothan;Dothen;Poplar Head;dosan;doseon;dothana;dothyana;duo sen;dwthan;dwthn alabama;Дотан;دوثان;دوثن، آلاباما;دۆتەن، ئەلاباما;ڈوتھن، الاباما;डोथान;डोथ्यान;ドーサン;多森;도선; +city::4067994;Hoover;Guver;Hoover;Khuver;fuba;hu fu;hubhara;hwfr;hwwr alabama;Гувер;Хувер;هوفر;هوور، آلاباما;ھووڤەر، ئەلاباما;ہوور، الاباما;हूभर;フーバー;胡佛; +city::4068590;Huntsville;Gantsvill;HSV;Hantsvila;Hantsvilis;Hantsvill;Hunts Spring;Huntsville;Khantsvil;Khantsvill;Khuntsvil;Twickenham;hantsabhila;hantsubiru;hantswyl alabama;heng ci wei er;heoncheubil;hntsfyl;Гантсвілл;Хантсвил;Хантсвилл;Хънтсвил;האנטסוויל;هانتسویل، آلاباما;هنتسفيل;ھەنتسڤیل، ئەلاباما;ہنٹسویل، الاباما;हन्त्सभिल;ハンツビル;亨茨维尔;헌츠빌; +city::4076598;Mobile;La Mobila;La Mobile;MOB;Mo-il-la;Mobajl;Mobil;Mobila;Mobilas;Mobile;Mobille;Moville;mo bi er;moba'ila;mobil;mobila;mobili;mobiru;mwbayl alabama;mwbyl;mwbyl alabama;Мобајл;Мобил;Мобіл;מוביל;موبائل، الاباما;موبيل;موبیل، آلاباما;मोबाइल;मोबिल;მობილი;ម៉ូបាល;モービル;莫比尔;모빌; +city::4076784;Montgomery;Gorad Mantgomery;MGM;Mons Gomerici;Montgomeri;Montgomeris;Montgomery;Montgomuri;Montnkomeri;mamtagomeri;mantagomeri;mantgameri;mantkamari;meng ge ma li;mong-gomeli;mongomeri;montagomari;mwntghwmry;mwntgmry;mwntgwmry;mxn t kx me xri;Μοντγκόμερι;Горад Мантгомеры;Монтгомери;Монтгомері;Монтгомъри;Մոնտգոմերի;מאנטגאמערי;מונטגומרי;مونتغومري;مونتگمری;مونٹگمری;مونٹگمری، الاباما;माँटगोमेरी;मान्टगोमेरी;मोन्टगोमरी;मोन्तगोमरी;மான்ட்கமரி;ಮಾಂಟ್ಗಾಮೆರಿ;มอนต์กอเมอรี;მონტგომერი;モンゴメリー;蒙哥馬利;蒙哥马利;몽고메리; +city::4094455;Tuscaloosa;Black Warrior Town;Druid City;Louiseville;Matildaville;Shelbyville;Shelleyville;Shelltown;Shellytown;TCL;Taskalusa;Tuscaloosa;Tuskalloosa;Tuskaloosa;ta si ka lu sa;taskalusa;taskalwsa alabama;tasukarusa;teoseukeollusa;tsqlwsh;twskalwsa;Таскалуса;טסקלוסה;تاسکالوسا، آلاباما;توسكالوسا;टस्कालूसा;ടസ്കലൂസ;タスカルーサ;塔斯卡卢萨;터스컬루사; +city::4106458;Conway;Conway;Conway Station;Konuehj;Konvej;kanve;kanwy;kon-wei;kwnwy;Конвей;Конвеј;Конуэй;كونوي;کانوی;کونوے، آرکنساس;कन्वे;콘웨이; +city::4110486;Fayetteville;FYV;Faetvil';Fayetteville;Fejetvil;Fejetvilis;Fejetvill;Washington Courthouse;faytfyl;fayt‌wyl;fei ye te wei er;feiettobiru;peiesbil;phayetabhila;phetavhila;Фаєтвіль;Фейетвилл;Фејетвил;פאייטוויל;فائیٹویل، آرکنساس;فايتفيل;فایت‌ویل;फायेटभिल;फेटव्हिल;フェイエットビル;费耶特维尔;페이엣빌; +city::4111410;Fort Smith;Belle Point;FSM;Fort Smit;Fort Smith;Fort-Smit;fotosumisu;fwrt asmyt;fwrt smyth;pharta smitha;pwrt smyt;shi mi si bao;Форт Смит;Форт-Смит;פורט סמית;فورت اسمیت;فورت سميث;فورٹ سمتھ، آرکنساس;फर्ट स्मिथ;フォートスミス;史密斯堡; +city::4116834;Jonesboro;Dzhonsboro;Dzhounsburou;Dzounsboro;JBR;Jonesboro;Jonesborough;jonasbro;jonjeubeoleo;jonzuboro;jwnsbwrw arknsas;jwnzbrw;jwnzbwrw;qiong si bo lei;Џоунсборо;Джонсборо;Джоунсбъроу;جونزبرو;جونزبورو;جونسبورو، آرکنساس;जोनस्ब्रो;ジョーンズボロ;琼斯伯勒;존즈버러; +city::4119403;Little Rock;Acropolis;Anilco;Arkopolis;Gorad Litl-Rok;LIT;La Petit Roche;Litl Rok;Litl Rokas;Litl Roks;Litl-Rok;Litlroka;Little Rock;Littlerock;Litul Rok;Old Channel;Old Channel Little River;Petit Roche;Petit Rochelle;Petit Rocher;lie du luo bu;litala raka;litala roka;liteullog;litil rak;litila raka;littil rak;lytl rak arkanzas;lytl rwk;lytl rwq;ritorurokku;xiao shi cheng;xiao yan cheng;Λιτλ Ροκ;Горад Літл-Рок;Литл Рок;Литл-Рок;Литъл Рок;Літл-Рок;Լիթլ Ռոք;ליטל ראק;ליטל רוק;ليتل روك;لٹل راک;لٹل راک، آرکنساس;لیتل راک، آرکانزاس;लिटल रॉक;लिटिल रक;लिटिल् राक्;लितल रक;லிட்டில் ராக்;ලිට්ල් රොක්;ლიტლ-როკი;リトルロック;列度洛埠;小岩城;小石城;리틀록; +city::4124112;North Little Rock;Argenta;Barling Cross;De Cantillion;De Cantillon;Huntersville;Hunterville;Nort Litl Rok;Nort-Litl-Rok;North Little Rock;nartha litala raka;noseuliteullog;nwrt lytl rak;nwrth lytl rwk;Норт Литл Рок;Норт-Литл-Рок;Норт-Літл-Рок;نارتھ لٹل راک، آرکنساس;نورت لیتل راک;نورث ليتل روك;नर्थ लिटल रक;노스리틀록; +city::4128894;Rogers;ROG;Rodzers;Rodzhers;Rogers;lojeoseu;luo jie si;rajrz arknsas;rojarsa;rwgrz;rwjrz;Роджерс;Роџерс;راجرز، آرکنساس;روجرز;روگرز;रोजर्स;罗杰斯;로저스; +city::4132093;Springdale;SPZ;Shiloh;Springdale;Springdejl;Springdejl';aspryngdyl arkanzas;sbrynghdl;seupeulingdeil;springadela;supuringuderu;Спрингдейл;Спрингдејл;Спрінгдейль;اسپرینگدیل، آرکانزاس;سبرينغدل;سپرنگڈیل، آرکنساس;स्प्रिङ्गडेल;スプリングデール;스프링데일; +city::4140963;Washington; D.C.;Federal Capital;Federal City;Federal Town;Nations Capital;Ouasinkton;Ranatakariahshne;Ranatakariáhshne;Rome;Territory of Columbia;Vashington;Vasingtonas;Vasingtonia;Vašingtonas;WAS;Washington;Washington City;Washington D. C.;Washington D.C.;Washington DC;Waszyngton;hua sheng dun te qu;wosingteon D.C.;wosingteon DC;Ουάσιγκτον;Вашингтон;华盛顿特区;워싱턴 D.C.;워싱턴 DC; +city::4145381;Wilmington;Christinahamn;Fort Altena;Fort Christina;Gorad Uilmingtan;ILG;Uilmington;Uilmingtun;Vilmington;Vilmingtona;Vilmingtonas;Vilmingtonia;Walmington;Willington;Willingtown;Wilmington;Wilmington City;Wilmington i Delaware;u~iruminton;vilmingatana;wei er ming dun;wilmingteon;wylmnghtwn;wylmyngtwn;wylmyngtwn dlawr;Вилмингтон;Вілмінгтон;Горад Уілмінгтан;Уилмингтон;Уилмингтън;וילמינגטון;ويلمنغتون;ویلمینگتون، دلاور;ویلمینگٹن، ڈیلاویئر;विल्मिंगटन;უილმინგტონი;ウィルミントン;威尔明顿;윌밍턴; +city::4145805;Allapattah;Allapatah;Allapattah; +city::4148411;Boca Raton;BCT;Boca Raton;Boca Ratone;Boca Ratón;Boca de Ratones;Bocaraton;Boka Raton;Boka-Raton;WTA Boca Raton;bo ka la dun;boka retana;bokaleoton;bokaraton;bwka ratwn;bwka ratwn flwryda;Бока Ратон;Бока-Ратон;באקא ראטאן;بوكا راتون;بوکا راتون، فلوریدا;बोका रेटन;ボカラトン;博卡拉頓;보카러톤; +city::4148533;Bonita Springs;Bonita Springs;Bonita-Springs;bo ni ta wen quan;bonita springas;bwnyta aspryngz flwryda;bwnyta sbrnghz;Бонита Спрингс;Боніта-Спрінгс;بونيتا سبرنغز;بونیتا اسپرینگز، فلوریدا;बोनिता स्प्रिङ्गस्;博尼塔温泉; +city::4148677;Boynton Beach;Bojnton Bich;Bojnton-Bich;Boynton;Boynton Beach;bo yin dun hai tan;bo'inatana bica;bointeonbichi;bwyntwn;bwyntwn bych flwryda;Бойнтон-Біч;Бојнтон Бич;بوينتون;بوینتون بیچ، فلوریدا;बोइनटन बीच;博因顿海滩;보인턴비치; +city::4148708;Bradenton;Braden Town;Bradenton;Bradentown;Braiden Town;Braidentown;Brejdenton;beuleideunteon;bradenatana;bradntwn;bradntwn flwryda;bu lei deng dun;bureidenton;Брейдентон;Брејдентон;برادنتون;برادنتون، فلوریدا;ब्राडेनटन;ბრადენტონი;ブレイデントン;布雷登顿;브레이든턴; +city::4148757;Brandon;Brando;Brandon;Brehndon;bryandana;burandon;Брандон;Брэндон;برینڈن، فلوریڈا;ब्र्यान्डन;ブランドン; +city::4149962;Cape Coral;Cabo Coral;Cape Coral;Keip Koralas;Kejp Koral;Kejp Korul;Kejp-Koral;kai pu ke lei er;keipeukoleol;kepa korala;kepukoraru;kyb kwral;kyp kwral flwryda;qyyp qwrl;Кейп Коръл;Кейп-Корал;Кејп Корал;קייפ קורל;كيب كورال;کیپ کورال، فلوریدا;کیپ کورل، فلوریڈا;केप कोरल;ケープコーラル;開普科勒爾;케이프코럴; +city::4150066;Carol City;Carol City; +city::4151316;Clearwater;CLW;Clearwater;Clearwater Harbor;Kliruoter;Klirvoter;Klirvoteris;Kliuruotur;ke li er wo te;keullieowoteo;kliyaravatara;klyrwatr;klyrwatr flwryda;kuriau~ota;Клирвотер;Клируотер;Клиъруотър;Клірвотер;كليرواتر;کلیئرواٹر، فلوریڈا;کلیرواتر، فلوریدا;کلیرواٹر;क्लियरवाटर;クリアウォーター;克利爾沃特;클리어워터; +city::4151455;Coconut Creek;Kokonat Krik;Kokonat-Krik;kokonata krika;kwkwnat kryk flwryda;kwkwnt kryk;ye zi xi;Коконат Крик;Коконат-Крік;كوكونت كريك;کوکونات کریک، فلوریدا;کوکونٹ کریک، فلوریڈا;कोकोनट क्रीक;椰子溪; +city::4151871;Coral Gables;Koral Gejbls;Koral-Gejblz;ke lei er gai bu er si;koleolgeibeuljeu;korala gyabalsa;kwral ghyblz;kwral gyblz flwryda;Корал Гејблс;Корал-Ґейблз;كورال غيبلز;کورال گیبلز، فلوریدا;कोरल ग्याबल्स;科勒尔盖布尔斯;코럴게이블즈; +city::4151909;Coral Springs;Coral Springs;Koral Springs;Koral Springsas;Koral-Springs;ke lei er si pu lin si;koleolseupeulingseu;korala springas;korarusupuringusu;kwral aspryngz flwryda;kwral sbrnghz;Корал Спрингс;Корал-Спрингс;Корал-Спрінгс;كورال سبرنغز;کورال اسپرینگز، فلوریدا;کورل اسپرنگز، فلوریڈا;कोरल स्प्रिङ्गस्;コーラルスプリングス;科勒爾斯普林斯;코럴스프링스; +city::4152820;Davie;Davie;Dehvi;Dejvi;Devi;dai wei;debhi;dyfy;dywy flwryda;Деві;Дейви;Дејви;Дэви;ديفي;دیوی، فلوریدا;डेभी;戴维; +city::4152872;Daytona Beach;DAB;Daytona;Daytona Beach;Dejtona Bich;Dejtona Bijch;Dejtona-Bich;dai tong na hai tan;daytwna bytsh;deitonabichi;detana bica;dytwna bych flwryda;teytona katarkarai;Дейтона Бийч;Дейтона-Бич;Дейтона-Біч;Дејтона Бич;دايتونا بيتش;دیتونا بیچ، فلوریدا;डेटना बीच;டெய்டோனா கடற்கரை;デイトナビーチ;戴通納海灘;데이토나비치; +city::4153071;Deerfield Beach;Deerfield;Deerfield Beach;Dirfild Bich;Dirfild-Bich;di er fei er de hai tan;dyaraphilda bica;dyrfyld bych flwryda;dyrfyld bytsh;Дирфилд Бич;Дирфилд-Бич;Дірфілд-Біч;ديرفيلد بيتش;دیرفیلد بیچ، فلوریدا;ड्यरफिल्ड बीच;迪尔菲尔德海滩; +city::4153132;Delray Beach;Delray Beach;Delrej Bich;Delrej-Bich;de la hai tan;delre bica;derureibichi;dlray bytsh;dlry bych flwryda;dlryy byz;Делрей-Бич;Делрей-Біч;Делреј Бич;דלריי ביץ;دلراي بيتش;دلری بیچ، فلوریدا;डेल्रे बीच;デルレイビーチ;德拉海灘; +city::4153146;Deltona;Deltona;de er tuo na;deltana;dltwna;dltwna flwryda;Делтона;دلتونا;دلتونا، فلوریدا;डेल्टना;დელტონა;德尔托纳; +city::4153471;Doral;Doral;dorala;duo la;dwral;dwral flwryda;Дорал;دورال;دورال، فلوریدا;डोराल;多拉; +city::4154047;East Pensacola Heights;; +city::4155529;Flagami;; +city::4155966;Fort Lauderdale;FLL;Fort Lauderdale;Fort Loderdeil;Fort Loderdeilas;Fort Loderdejl;Fort Lodurdejl;Fort-Loderdejl;Fortloderdeila;Ft. Lauderdale;f xr tlxde xrdel;fotorodaderu;fwrt ladrdyl flwryda;fwrt lawdrdal;lao de dai er bao;pharta la'udaradela;phorta lodaradela;poteulodeodeil;pwrt lwdrdyyl;Форт Лодердејл;Форт Лодърдейл;Форт-Лодердейл;פורט לודרדייל;فورت لادردیل، فلوریدا;فورت لاودردال;فورٹ لاؤڈرڈیل;فورٹ لاوڈرڈیل، فلوریڈا;फर्ट लाउदरदेल;फोर्ट लॉडरडेल;ฟอร์ตลอเดอร์เดล;フォートローダーデール;劳德代尔堡;포트로더데일; +city::4155995;Fort Myers;FMY;Fort Majers;Fort Myers;Fort-Maers;Ft. Myers;Myers;fotomaiyazu;fwrt mayrz;fwrt mayrz flwryda;mai er zi bao;pharta mayarsa;poteumaieoseu;Форт Мајерс;Форт-Маєрс;فورت مايرز;فورت مایرز، فلوریدا;फर्ट मायर्स;フォートマイヤーズ;麥爾茲堡;포트마이어스; +city::4156091;Fountainebleau;Fountainbleau; +city::4156404;Gainesville;GNV;Gainesopolis;Gainesville;Geinsvilis;Gejnsvil;Gejnsvill;Hog Town;ga'insabhila;gai en si wei er;geinjeubil;geinzubiru;ghynzfyl;gynzwyl flwryda;gyynswwyl;Гейнсвил;Гейнсвилл;Гейнсвілл;Гејнсвил;גיינסוויל;غينزفيل;گینزویل، فلوریدا;गाइन्सभिल;ゲインズビル;蓋恩斯維爾;게인즈빌; +city::4158476;Hialeah;Hajalija;Hialeah;Khajalia;Khajalija;hai e li ya;haiaria;haieollia;hayali'ah;hyalya flwryda;hyalyh;Хайалиа;Хаялия;Хаяліа;Хајалија;هياليه;هیالیا، فلوریدا;ہیالیاہ، فلوریڈا;ہیالیح;हायालिआः;ハイアリア;海厄利亞;하이얼리아; +city::4158928;Hollywood;Gollivud;HWO;Hollywood;Hollywood by the Sea;Kholivud;Khollivud;halivuda;halliudeu;halywwd flwryda;hao lai wu;hariuddo;hwlywwd;Голливуд;Голлівуд;Холивуд;Холливуд;הוליווד;هالیوود، فلوریدا;هوليوود;ہالی ووڈ، فلوریڈا;ہولی وڈ;हलिवूड;ハリウッド;好萊塢;할리우드; +city::4159050;Homestead;Gomsted;HST;Homestead;Khomsted;homasteda;huo mu si te de;hwmstd flwryda;hwmstyd;Гомстед;Хомстед;هومستد، فلوریدا;هومستيد;होमस्टेड;霍姆斯特德; +city::4160021;Jacksonville;Ceksonvill;Cow Creek;Cow Ford;Cowford;Dzeksonvil;Dzeksonvila;Dzeksonvilis;Dzhaks"nvil;Dzhehksanvil;Dzhehksonvill;Dzheksonvill;Džeksonvila;Džeksonvilis;Iacsoniapolis;Iacsonvilla;JAX;Jacksonville;Tzaksonvil;Wakka Pilatka;Zhehksonvill;gqswnwwyl;jaegseunbil;jaikasanavila;jaiksanavila;jakcanvil;jakswnfyl;jakusonbiru;jeksanavhila;jeksonvili;jie ke xun wei er;jyakasanabhila;jyaksanabhila;jyksn wyl;Τζάκσονβιλ;Џексонвил;Джаксънвил;Джексонвілл;Джэксанвіл;Джэксонвилл;Жэксонвилл;Ջեքսոնվիլ;גקסונוויל;جاكسونفيل;جکسون‌ویل;جیکسن ویل;जॅक्सनव्हिल;जैक्सनविल;ज्याकसनभिल;জ্যাক্সনভিল;ਜੈਕਸਨਵਿਲ;ஜாக்சன்வில்;แจ็กสันวิลล์;ჯექსონვილი;ジャクソンビル;杰克逊维尔;잭슨빌; +city::4160610;Jupiter;Dzhjupiter;Dzupiter;Jupiter;Júpiter;jupita;jwbytr flwryda;zhu bi te;zhwpytr flwryda;Џупитер;Джюпітер;Юпитер;جوبيتر، فلوريدا;ژوپیتر، فلوریدا;ジュピター;朱庇特; +city::4160705;Kendale Lakes;Kendale Lakes; +city::4160711;Kendall;Kendal;Kendall;kendala;Кендал;Кендалл;केन्डल; +city::4160983;Kissimmee;Kisimi;Kissimmee;Kissimmi;ji xi mi;kishimi;kisime;kysymy;kysymy flwryda;qysymy;Кисими;Киссимми;Кіссіммі;קיסימי;كيسيمي;کیسیمی، فلوریدا;किसिमे;キシミー;基西米; +city::4161438;Lakeland;LAL;Lakeland;Lejkland;Lejklend;lai ke lan;leikeullaendeu;lekalyanda;lykland;reikurando;Лейкленд;Лејкланд;ليكلاند;لیک لینڈ، فلورایڈا;لیک‌لند، فلوریدا;लेकल्यान्ड;レイクランド;莱克兰;레이클랜드; +city::4161580;Largo;Largo;la ge;larghw;largo;largw flwryda;Ларго;Ларґо;لارغو;لارگو، فلورایڈا;لارگو، فلوریدا;लार्गो;拉哥; +city::4161625;Lauderhill;; +city::4161785;Lehigh Acres;Leeland Heights;Lehigh;Lehigh Acres; +city::4163407;Margate;Margejt;ma gai te;marageta;marghyt;margyt flwryda;Маргейт;Маргејт;مارغيت;مارگیت، فلوریدا;मारगेट;马盖特; +city::4163971;Melbourne;MLB;Mel'burn;Melborn;Melbourne;Melburn;melbarna;meruborun;mlbwrn;mlbwrn flwryda;mo er ben;Мелборн;Мелбурн;Мелбърн;Мельбурн;מלבורן;ملبورن;ملبورن، فلوریدا;ملبورن، فلوریڈا;मेल्बर्न;メルボルン;墨爾本; +city::4164138;Miami;Gorad Majami;MIA;Maiami;Majami;Majamis;Mayami;Miami;Miamia;Miamo;mai a mi;mai ya mei;maiaemi;maiami;mayami;mayamy;miyami;myamy;myamy flwryda;Μαϊάμι;Горад Маямі;Майами;Маями;Маямі;Мајами;Մայամի;מיאמי;مايامى;ميامي;میامی;میامی، فلوریدا;मायामी;मियामी;মায়ামি;માયામિ;மயாமி;మయామి;ಮಿಯಾಮಿ;ไมแอมี;မိုင်ယာမီမြို့;მაიამი;ማያሚ;マイアミ;迈阿密;邁亞美;邁阿密;마이애미; +city::4164143;Miami Beach;Majami Bich;Majami Bijch;Majami-Bich;Miami Beach;Saut Bich;mai a mi hai tan;maiaemibichi;maiamibichi;mayami bica;myamy bych flwryda;myamy bytsh;Майами-Бич;Маями Бийч;Маямі-Біч;Мајами Бич;Саут Бич;ميامي بيتش;میامی بیچ، فلوریدا;میامی بیچ، فلوریڈا;मायामी बीच;マイアミビーチ;迈阿密海滩;마이애미비치; +city::4164167;Miami Gardens;Majami Gardens;Majami-Gardens;mai a mi hua yuan;maiaemigadeunseu;maiamigadenzu;mayami gardensa;myamy gardnz flwryda;myamy ghardnz;Майами-Гарденс;Маямі-Ґарденс;Мајами Гарденс;ميامي غاردنز;میامی گاردنز، فلوریدا;میامی گارڈنز;میامی گارڈنز، فلوریڈا;मायामी गार्डेन्स;マイアミガーデンズ;迈阿密花园;마이애미가든스; +city::4164601;Miramar;Miramar;mi la ma er;mirama;miramara;myramar;myramar flwryda;Мирамар;Мірамар;ميرامار;میرامار، فلوریدا;मिरामार;ミラマー;米拉馬爾; +city::4166232;North Miami;Nort Majami;Nort-Majami;bei mai a mi;nartha mayami;noseumaiaemi;nwrth myamy;nwrth myamy flwryda;Норт Мајами;Норт-Маямі;شمالی میامی، فلوریڈا;نورث ميامي;نورث میامی، فلوریدا;नर्थ मायामी;北迈阿密;노스마이애미; +city::4166274;North Port;Nort Pojnt;Nort-Port;North Port;North Port Charlotte;bei gang;nartha porta;nosupoto;nwrth bwrt;nwrth pwrt flwryda;Норт Појнт;Норт-Порт;نورث بورت;نورث پورت، فلوریدا;नर्थ पोर्ट;ノースポート;北港; +city::4166673;Ocala;OCF;Ocala;Ocola;Okala;ao ka la;awkala;awkala flwryda;okaella;okala;okara;Окала;أوكالا;اوکالا، فلوریدا;ओकाला;オカラ;奥卡拉;오캘라; +city::4167147;Orlando;ORL;Orlandas;Orlando;Orlando i Florida;Orlanto;ao lan duo;aralyando;awrlandw;awrlndw flwryda;ollaendo;oralamdo;orando;orlando;orlanto;Ορλάντο;Орландо;Օռլանդո;אורלנדו;أورلاندو;اورلندو، فلوریدا;اورلینڈو;اورلینڈو، فلوریڈا;अरल्यान्दो;ओरलँडो;ઓર્લાન્ડો;ஒர்லாண்டோ;ออร์แลนโด;ორლანდო;オーランド;奥兰多;올랜도; +city::4167499;Palm Bay;Palm Bay;Palm Bej;Palm-Bej;balm bay;palm by flwryda;pama be;pamubei;zong lu wan;Палм Беј;Палм-Бей;بالم باي;پالم بی، فلوریدا;पाम बे;パームベイ;棕榈湾; +city::4167519;Palm Beach Gardens;Palm Bich Gardens;Palm-Bich-Gardens;balm bytsh ghardnz;palm bych gardnz flwryda;pama bica gardensa;zong lu tan hua yuan;Палм Бич Гарденс;Палм-Бич-Гарденс;Палм-Біч-Ґарденс;بالم بيتش غاردنز;پالم بیچ گاردنز، فلوریدا;پام بیچ گارڈنز، فلوریڈا;पाम बीच गार्डेन्स;棕櫚灘花園; +city::4167538;Palm Coast;Palm Koust;Palm-Kost;balm kwst;palm kwst flwryda;pama kosta;zong lu hai an;Палм Коуст;Палм-Кост;بالم كوست;پالم کوست، فلوریدا;پام کوسٹ، فلوریڈا;पाम कोस्ट;棕榈海岸; +city::4167545;Palm Harbor;Palm Harbor;Palm-Kharbor;Pam Kharbor;Southerland;Sutherland;pama harbara;Палм-Харбор;Пам Харбор;पाम हार्बर; +city::4168139;Pembroke Pines;Pembrok-Pajns;Pembroke Pines;Pembrouk Pajns;Pembruk Pajns;bymbrwk baynz;pembeulokeupainjeu;pembroka pa'insa;penburokupainzu;peng bu luo ke pai en si;pmbrwk paynz flwryda;pmbrwk payynz;Пемброк-Пайнс;Пемброук Пайнс;Пембрук Пајнс;بيمبروك باينز;پمبروک پائینز;پمبروک پاینز، فلوریدا;پیمبروک پائنز، فلوریڈا;पेम्ब्रोक पाइन्स;ペンブロークパインズ;彭布羅克派恩斯;펨브로크파인즈; +city::4168228;Pensacola;PNS;Pansacolas;Panzacola;Pencocolos;Pensacola;Pensacola i Florida;Pensacolas;Pensakola;Pensicola;bynsakwla;peng sa ge la;peng sa ke la;pensakola;pensakora;penseokolla;pnsakwla flwryda;Пенсакола;بينساكولا;پنساکولا، فلوریدا;पेन्साकोला;ペンサコーラ;彭萨科拉;彭薩哥拉;펜서콜라; +city::4168459;Pine Hills;; +city::4168630;Pinellas Park;Pinelas Park;Pinellas City;Pinellas Park;Pinellas-Park;bynylas bark;pa'inallasa parka;paynlas park flwryda;pi nei la si gong yuan;Пинелас Парк;Пінеллас-Парк;بينيلاس بارك;پاینلاس پارک، فلوریدا;पाइनlलस पार्क;皮内拉斯公园; +city::4168782;Plantation;Plantacija;Plantejshn;Plantejshon;blantyshn;plantesana;plntyshn flwryda;zhong zhi yuan;Плантация;Плантейшн;Плантејшон;بلانتيشن;پلانٹیشن، فلوریڈا;پلنتیشن، فلوریدا;प्लान्टेसन;种植园; +city::4168930;Poinciana;; +city::4169014;Pompano Beach;PPM;Pompano;Pompano Beach;Pompano Bich;Pompano-Bich;bwmbanw syty;pang pa nuo bi qi;pompano bica;ponpanobichi;pwmpanw bych flwryda;Помпано Бич;Помпано-Бич;Помпано-Біч;بومبانو سيتي;پومپانو بیچ، فلوریدا;پومپانو بیچ، فلوریڈا;पोम्पानो बीच;ポンパノビーチ;龐帕諾比奇; +city::4169130;Port Charlotte;Port Sharlot;Port-Sharlott;porta sarlota;Порт Шарлот;Порт-Шарлотт;पोर्ट शार्लोट; +city::4169156;Port Orange;; +city::4169171;Port Saint Lucie;Port St. Lucie; +city::4170156;Riverview;Riverv'ju;ribharabhyu;Ривервью;रिभरभ्यू; +city::4171563;St. Petersburg;SPG;Saint Petersburg;St. Petersburg; +city::4172086;Sanford;Fort Mellon;Mellonville;Sanford;Senford;saenpeodeu;sanfwrd;sang fu de;snfwrd flwryda;syanpharda;Санфорд;Сенфорд;سانفورد;سنفورد، فلوریدا;स्यान्फर्ड;桑福德;샌퍼드; +city::4172131;Sarasota;SRQ;Sarasota;sa la suo ta;saeleosota;sarasota;saraswta;saraswta flwryda;Сарасота;ساراسوتا;ساراسوتا، فلوریدا;सारासोटा;サラソータ;萨拉索塔;새러소타; +city::4173838;Spring Hill;Spring Khil;Spring-Khill;springa hila;Спринг Хил;Спринг-Хилл;स्प्रिङ्ग हिल; +city::4174402;Sunrise;Sanrajz;sanrayz flwryda;sen lai si;seonlaijeu;snrayz flwryda;Санрайз;Санрајз;سانرایز، فلوریدا;صنرايز، فلوريدا;森赖斯;선라이즈; +city::4174715;Tallahassee;Apalache Old Fields;Gorad Talakhasi;Newton;Newtown;Old Field Town;Pueblo Nueva;TLH;Talachasi;Talahasi;Talahasis;Talahasī;Talajasy;Talakhasi;Tallahassa;Tallahassee;Tallahassee Talofa;Tallahassia;Tallakhassi;Tonabys Town;Tunapy;Villanueva;da la ha xi;ta la he xi;taelleohaesi;talahaci;talahase;talahasi;talahasy;tarahashi;telahasi;Ταλαχάσι;Горад Талахасі;Талахаси;Таллахасси;Таллахассі;Թալահասի;טאלאהאסי;تالاهاسي;تالاهاسی;تالاہاسی، فلوریڈا;ٹالیحسی;टालाहासे;टॅलाहासी;तालाहासे;টালাহাসি;டலஹாசி;ടലഹാസി;แทลลาแฮสซี;ტალაჰასი;タラハシー;塔拉赫西;達拉哈西;탤러해시; +city::4174738;Tamarac;Tamarak;ta ma la ke;tamarak;tamarak flwryda;tyamaraka;Тамарак;تاماراك;تاماراک، فلوریدا;ट्यामाराक;塔玛拉克; +city::4174744;Tamiami;Tamiami; +city::4174757;Tampa;Gorad Tampa;TPA;Tampa;taempa;taimpa;tamba;tampa;tamppa;tan pa;tanpa;tmpa flwryda;tmph;Τάμπα;Горад Тампа;Тампа;Տամպա;טמפה;تامبا;تمپا، فلوریدا;ٹیمپا، فلوریڈا;टँपा;टैम्पा;ताम्पा;டாம்ப்பா;แทมปา;ტამპა;タンパ;坦帕;탬파; +city::4175117;The Hammocks;The Hammocks; +city::4175179;The Villages;Orange Blossom Gardens;Te-Villidzhis;The Villages;The Villages at Spanish Springs;Vilidzes;da bhilejesa;Вилиџес;Те-Виллиджис;द भिलेजेस; +city::4175538;Town 'n' Country;Town 'n' Country; +city::4177703;Wellington;Velington;Vellington;hui ling dun;velalingatana;wlyngtwn flwryda;wylnghtwn;Велингтон;Веллингтон;Веллінгтон;ولینگتون، فلوریدا;ويلنغتون;ویلنگٹن، فلوریڈا;वेललिङ्गटन;惠灵顿; +city::4177887;West Palm Beach;Litus Palmense Occidentale;Okcidenta Palm Beach;PBI;Uehst-Palm-Bich;Vest Palm Bich;Vest-Palm-Bich;West Palm Beach;u~esutopamubichi;vesta pama bica;weseuteupambichi;wst palm bych flwryda;wst pʼlm byz;wyst balm bytsh;xi zong lu tan;Вест Палм Бич;Вест-Палм-Біч;Уэст-Палм-Бич;וסט פאלם ביץ;وست پالم بیچ، فلوریدا;ويست بالم بيتش;ویسٹ پام بیچ، فلوریڈا;वेस्ट पाम बीच;ウェストパームビーチ;西棕榈滩;웨스트팜비치; +city::4178003;Weston;Uehston;Veston;Weston;vestana;wei si dun;wstwn;wstwn flwryda;Вестон;Уэстон;وستون;وستون، فلوریدا;वेस्टन;韦斯顿; +city::4179320;Albany;ABY;Albany;City of Opportunity;Olbani;albani;albany;albany jarjya;albany jwrjya;ao er ba ni;olbeoni;orubani;Олбани;Олбані;آلبانی، جورجیا;ألباني;البانی، جارجیا;अल्बानी;オールバニ;奧爾巴尼;올버니; +city::4179574;Alpharetta;Al'faretta;Alfareta;Alpharetta;New Prospect Campground;alfarta jwrjya;alfaryta;alfaryta jarjya;alphareta;Алфарета;Альфаретта;آلفارتا، جورجیا;ألفاريتا;الفاریتا، جارجیا;अल्फारेटा; +city::4180386;Athens;AHN;Atens;Atensas;Athens;Athens i Georgia;Athens-Clarke County;Atina;Atuns;Cedar Shoals;aeseonseu;asenzu;athensa;athyna;atn jwrjya;atynz jwrjya;ethensaklarka ka'unti;ya dian;Атенс;Атина;Атънс;אתנס;آتئنز، جورجیا;آتن، جورجیا;أثينا;ایتھنز، جارجیا;अथेन्स;एथेन्सक्लार्क काउन्टी;アセンズ;雅典;애선스; +city::4180439;Atlanta;ATL;Atlant;Atlanta;Atlantae;Atlonta;Canebrake;Gorad Atlanta;Marthasdale;Marthasville;Standing Peachtree;Terminus;White Hall;Whitehall;aeteullaenta;arr‌lanra nagaram;atalanta;ateullaenta;ateullanta;atlanta;atoranta;atʼlantʼa;etalanta;etlanta;ya te lan da;Ατλάντα;Атлантæ;Атланта;Горад Атланта;Ատլանտա;אטלאנטא;אטלנטה;آتلانتا;أتلانتا;ئەتڵانتا;اٹلانٹا;اٹلانٹا، جارجیا;अटलांटा;अटलान्टा;एट्लान्टा;एत्लान्ता;আটলান্টা;એટલાન્ટા;அட்லான்டா;అట్లాంటా;ಅಟ್ಲಾಂಟಾ;അറ്റ്‌ലാന്റാ നഗരം;แอตแลนตา;ཨ་ཊི་ལཱན་ཊཱ།;အတ္တလန္တာမြို့;ატლანტა;አትላንታ;アトランタ;亚特兰大;亞特蘭大;아틀란타;아틀랜타;애틀랜타; +city::4184530;Brookhaven;Brookhaven;Brookhaven Heights;Nort Atlanta;North Atlanta;brwk hawn jwrjya;brwkhafn;nartha etlanta;Норт Атланта;بروكهافن;بروک هاون، جورجیا;بروک ہیون، جارجیا;नर्थ एट्लान्टा; +city::4188985;Columbus;CSG;Columbus;Kolambus;Kolumbas;Kolumbus;Kulumbus;ge lun bu;klmbws jwrjya;kolambasa;kolleombeoseu;kolumbus;koronbasu;kwlmbs jarjya;kwlwmbws;qwlwmbws;Коламбус;Колумбус;Кълъмбъс;קולומבוס;كولومبوس;کلمبوس، جورجیا;کولمبس، جارجیا;कोलम्बस;コロンバス;哥伦布;콜럼버스; +city::4207400;Macon;Fort Hawkins;MCN;Macon;Maiikon;Makon;Mejkon;Newtown;Tiger Town;Troy;makn jwrjya;makwn;mei ken;meikeon;meikon;myakona;mykn jarjya;myyqwn;Μαίηκον;Макон;Мейкон;Мејкон;מייקון;ماكون;ماکن، جورجیا;میکن، جارجیا;म्याकोन;メイコン;梅肯;메이컨; +city::4207783;Marietta;MGE;Marieta;Marietta;Marijeta;ma li ai ta;maelieta;mari'eta;marietta;maryta;mryta jwrjya;Мариета;Мариетта;Маријета;ماريتا;مریتا، جورجیا;مریٹا، جارجیا;मारिएटा;マリエッタ;玛丽埃塔;매리에타; +city::4219934;Roswell;Roswell;Rozvel;lojeuwel;luo si wei er;rosvela;rwzwl jarjya;rwzwyl;rzwl jwrjya;Розвел;رزول، جورجیا;روزول، جارجیا;روزويل;रोस्वेल;罗斯韦尔;로즈웰; +city::4221333;Sandy Springs;Burdal;Sandi-Springs;Sandy Springs;Sendi Springs;sandisupuringusu;sandy sbrynghz;sang di si pu lin si;sndy aspryng jwrjya;syandi springas;Санди-Спрингс;Санді-Спрінгс;Сенди Спрингс;ساندي سبرينغز;سندی اسپرینگ، جورجیا;سینڈی سپرنگز، جارجیا;स्यान्डी स्प्रिङ्गस्;サンディスプリングス;桑迪斯普林斯; +city::4221552;Savannah;Gorad Savana;SAV;Sarannah;Savana;Savanah;Savanna;Savannah;Sawanna;Yamacraw;sa fan na;saban'na;sabhana;safana;savhana;sawana jwrjya;seobaeneo;sha wa na;Горад Савана;Савана;Саванна;סאוואנאה;סוואנה;سافانا;ساوانا، جورجیا;ساواناہ، جارجیا;सभाना;सव्हाना;サバンナ;沙瓦納;薩凡納;서배너; +city::4223379;Smyrna;Neal Dow;Smirna;Smyrna;Varners Station;asmyrna jwrjya;shi mai na;smirna;smrna jarjya;smyrna;Смирна;اسمیرنا، جورجیا;سمرنا، جارجیا;سميرنا;स्मीर्ना;士麦那; +city::4228147;Valdosta;Troupville;VLD;Valdosta;barudosuta;bhyaladosta;faldwsta;waldsta jwrjya;Валдоста;فالدوستا;والدستا، جورجیا;والڈوسٹا، جارجیا;भ्यालडोस्टा;バルドスタ; +city::4229476;Warner Robins;Uorner-Robins;Vorner Robins;Vorner-Robins;WRB;Warner Robins;Wellston;York;varnara rabinsa;warnr rwbynz;warnrrabynz jwrjya;warnz rwbnz jarjya;Ворнер Робинс;Ворнер-Робінс;Уорнер-Робинс;وارنر روبينز;وارنررابینز، جورجیا;وارنز روبنز، جارجیا;वार्नर रबिन्स; +city::4236895;Decatur;DEC;Decatur;Dekaturo;Dekejter;Dekejtur;dekatara;di kai te;dikatura;dikeiteo;diketa;diketara;dikhe the xr;dykadwr;dykytwr aylynwy;Декейтер;Декејтур;ديكادور;دیکیتور، ایلینوی;ڈیکاٹر، الینوائے;डिकॅटर;डेकाटर;ডিকাটুর;ดิเคเทอร์;ディケーター;迪凯特;디케이터; +city::4250542;Springfield;Campifons;Gorad Spryngfild;SPI;Sprin'nkfilnt;Springfield;Springfijld;Springfild;Springfilda;Springfildas;Springfilds;Springfīlda;Sprinqfild;icuppirinhpilt;sbrynj fyld alynwy;seupeulingpildeu;si pu lin fei er de;sprimphilda;springaphilda;springfild;spryngpyld;supuringufirudo;Σπρίνγκφιλντ;Горад Спрынгфілд;Спрингфиелд;Спрингфийлд;Спрингфилд;Спрингфілд;Սփրինգֆիլդ;ספרינגפילד;اسپرنگ فیلڈ، الینوائے;اسپرینگ‌فیلد;سبرينج فيلد، إلينوي;سپرنگفیلڈ;स्प्रिंगफील्ड;स्प्रिङ्गफिल्द;স্প্রিংফিল্ড;இசுப்பிரிங்ஃபீல்ட்;สปริงฟิลด์;スプリングフィールド;斯普林菲尔德;스프링필드; +city::4254679;Bloomington;BMG;Bloomington;Blumington;Blumingtona;Blumingtun;Blūmingtona;beullumingteon;blumintana;blwmnghtwn;blwmyngtwn;blwmyngtwn ayndyana;bu lu ming dun;buruminton;Блумингтон;Блумингтън;Блумінгтон;בלומינגטון;بلومنغتون;بلومنگٹن، انڈیانا;بلومینگتون، ایندیانا;ব্লুমিংটন;ブルーミントン;布卢明顿;블루밍턴; +city::4255466;Carmel;Bethleham;Bethlehem;Carmel;Karmel;Karmel';ka mei er;kameol;kameru;karml;karml ayndyana;Кармел;Кармель;كارمل;کارمل، انڈیانا;کارمل، ایندیانا;カーメル;卡梅尔;카멀; +city::4257227;Evansville;EVV;Ehvansvill;Evansvil;Evansvilis;Evansville;Gorad Ehvansvil;ai wen si wei er;awanzwyl ayndyana;ayfansfyl;ebanzubiru;ebeonjeubil;evhansavhila;evu~anzuvu~iru;ivansavila;xe wan s will;Горад Эвансвіл;Евансвил;Евансвіл;Эвансвилл;אוונסוויל;إيفانسفيل;اوانزویل، ایندیانا;ایوانز ویل، انڈیانا;इवान्सविल;एव्हान्सव्हिल;เอวันส์วิลล์;エバンズビル;エヴァンズヴィル;埃文斯維爾;에번즈빌; +city::4257494;Fishers;Fishers;Fishers Station;Fishers Switch;fyshrz;Фишерс;فشرز، انڈیانا;فيشرز; +city::4258313;Greenwood;Greenfield;Greenwood;Grinvud;Smockton;ghrynwwd;grynwwd ayndyana;Гринвуд;غرينوود;گرین ووڈ، انڈیانا;گرینوود، ایندیانا; +city::4259418;Indianapolis;Gorad Indyjanapalis;IND;Indianapoles;Indianapoli;Indianapolis;Indianapolisa;Indianapolės;Indianapòlis;Indianàpolis;Indianápolis;Indijanapolis;Indiyanapolis;andyanabwlys;ayndyanapwlys;idi'anapolisa;indiaenapolliseu;indianaporisu;indiyanapolis;indiyanapolisa;intiyanapolis;xin deiy næ pho lis;yin di an na bo li si;İndianapolis;Ινδιανάπολη;Індіанаполіс;Горад Індыянапаліс;Индианаполис;Индијанаполис;Ինդիանապոլիս;אינדיאנאפאליס;אינדיאנפוליס;إنديانابوليس;انڈیاناپولس;انڈیاناپولس، انڈیانا;ایندیاناپولیس;इंडियानापोलिस;इन्डियानापोलिस;इन्डियानापोलिस्;इन्दियानापोलिस;ইন্ডিয়ানাপোলিস;ਇੰਡੀਆਨਾਪੋਲਿਸ;இண்டியானாபொலிஸ்;อินเดียแนโพลิส;ინდიანაპოლისი;ኢንዲያናፖሊስ;インディアナポリス;印第安納波利斯;인디애나폴리스; +city::4265737;Terre Haute;HUF;Tera Khout;Tere Khout;Terra Alta;Terre-Khot;te lei huo te;telehote;tere hauta;tere haute;terehoto;therre hot;trh‌hwt ayndyana;tyr hwt;Тера Хоут;Тере Хоут;Терре-Хот;تر ہات، انڈیانا;تره‌هوت، ایندیانا;تير هوت;टेरे हौट;टेरे हौते;เทร์เรโฮต;テレホート;特雷霍特;테레호테; +city::4273837;Kansas City;Fort Cavagnolle;KCK;Kansas City;Kansas City i Kansas;Kanzas-Siti;kan sa si cheng;Канзас-Сити;堪薩斯城; +city::4274277;Lawrence;Gorad Lourehns;LWC;Lawrence;Lorens;Lourens;lao lun si;larns knsas;lolenseu;lwrans;lwrns kanzas;rorensu;Горад Лоўрэнс;Лоренс;Лоуренс;Լոուրենս;لارنس، کنساس;لورانس;لورنس، کانزاس;ローレンス;勞倫斯;로렌스; +city::4274356;Lenexa;Lenexa;Sherman; +city::4274994;Manhattan;MHK;Mankhehtten;Menkhetn;maenhaeteun;man ha dun;manhatn;manhattan;mnhtn kanzas;Манхэттен;Менхетн;مانهاتن;منهتن، کانزاس;مینہٹن، کنساس;マンハッタン;曼哈頓;맨해튼; +city::4276614;Olathe;Olat;Olathe;Olejt;Olejte;ao la xi;awlath;awlyta kanzas;oreisa;Олейт;Олејте;أولاث;اولیتا، کانزاس;اولیتھی، کنساس;オレイサ;奧拉西; +city::4276873;Overland Park;Ouvurlund Park;Overland Park;Overlend-Park;awfrland bark;awwrlnd park kanzas;obarandopaku;obeollaendeupakeu;ou fu lan pa ke;Оверланд Парк;Оверленд-Парк;Оувърлънд Парк;أوفرلاند بارك;اوورلند پارک، کانزاس;اوورلینڈ پارک، کنساس;オーバーランドパーク;歐弗蘭帕克;오벌랜드파크; +city::4279247;Shawnee;Shani;Shoni;shany knsas;shawny;shwny kanzas;syoni;Шани;Шони;شانی، کنساس;شاوني;شونی، کانزاس;쇼니; +city::4280539;Topeka;Google;Gorad Topika;Mid-Continent;Pomme de Terre;TOP;To-pe-ka;To-poo-ka;Too Beega;Topage;Topeca;Topeka;Topika;Topikae;Topīka;topeka;topika;tuo pi ka;twbyka kansas;twpyka;twpyqh;Τοπίκα;Горад Топіка;Топека;Топикæ;Топика;Топіка;Տոպիկա;טופיקה;توبيكا، كانساس;توپیکا;टोपेका;டொபீகா;トピカ;托皮卡;토피카; +city::4281730;Wichita;Camp Beecher;Camp Davidson;Doo-Dah;Doodah;Gorad Uichyta;ICT;Ouitsita;Uichita;Uichito;Vichita;Vicita;Viçita;Vičita;Wichita;uichitʼo;u~ichita;vicita;wei qi tuo;wi chi thx;wichito;wychyta kanzas;wychyta knsas;wytshyta;wyzyth;Ουιτσίτα;Вичита;Вічіта;Горад Уічыта;Уичита;Уичито;Ուիչիտո;ויציטה;ويتشيتا;ویچیتا، کانزاس;ویچیتا، کنساس;विचिटा;วิชิทอ;უიჩიტო;ウィチタ;威奇托;위치토; +city::4285268;Bowling Green;BWG;Bouling Grin;Bouling-Grin;Bowling Green;Bowlinggreen;bao ling ge lin;bolling-geulin;boringugurin;bwlyngh ghryn;bwwlyng gryn kntaky;Боулинг Грин;Боулинг-Грин;باولنگ گرین، کینٹکی;بولينغ غرين;بوولینگ گرین، کنتاکی;ボーリンググリーン;鮑靈格林;볼링그린; +city::4295940;Ironville;; +city::4297983;Lexington;LEX;Leksington;Leksingtona;Leksingtonas;Leksingtono;Leksingtun;Leksinqton;Lexington;Lexington-Fayette;Lexintonia;legsingteon;leksingtana;lie ke xing dui;lksyngtwn kntaky;lqsyngtwn;lyksynghtwn;rekishinton;Лексингтон;Лексингтън;לקסינגטון;ليكسينغتون;لکسینگتون، کنتاکی;لیکسنگٹن، کینٹکی;लेक्सिंग्टन;ലെക്സിങ്ടൺ;ლექსინგტონი;レキシントン;列克星敦;렉싱턴; +city::4297999;Lexington-Fayette;Fayette County;Lexington;Lexington-Fayette; +city::4299276;Louisville;Gorad Luisvil;Louisvil;Louisville;Louisville-Jefferson County;Ludovicopolis;Luisvil;Luisvilis;Luisvill;Luivil;Luivila;Lujzvill;Lūivila;SDF;lu yi wei er;lu'ivhila;lu-ibil;lu-ijeubil;lubhala;luisvili;luizvili;luy s will;luyivil;lwyfyl;lwyywyl kntaky;ruibiru;Λούισβιλ;Горад Луісвіл;Луивил;Луисвил;Луисвилл;Луйзвилл;Луїсвілл;Լուիսվիլ;לואיוויל;لوئیزویل، کینٹکی;لويفيل;لوییویل، کنتاکی;लुईव्हिल;লুভল;லூயிவில்;ลุยส์วิลล์;ლუიზვილი;ლუისვილი;ルイビル;路易維爾;루이빌;루이즈빌; +city::4300488;Meads;; +city::4303436;Owensboro;OWB;Ouensboro;Ouensburou;Ounsboro;Owensboro;Owensborough;Yellow Banks;awwnzbrww kntaky;awynsbwrw;o-eonjeubeoleo;oenzuboro;ou wen si bo lei;Оуенсборо;Оуенсбъроу;Оунсборо;أوينسبورو;اوونزبروو، کنتاکی;اوینسبورو، کینٹکی;オーエンズボロ;欧文斯伯勒;오언즈버러; +city::4315588;Baton Rouge;BTR;Baton Rouge;Baton Rouz;Baton Ruj;Baton Ruzas;Baton Ruzh;Baton Ruzos;Baton Ružas;Baton Ružos;Baton-Rouge;Baton-Ruzh;Batonruza;Batonrūža;Batun Ruzh;Bâton-Rouge;Dironbourg;Gorad Batan-Ruzh;New Richmond;Rubribaculum;ba tun lu ri;baeteonluji;batonruju;batwn rwj;batwn rwzh;batwn‌rwzh lwyyzyana;betana ru;betana ruja;byatana ruja;bʼtwn rwz;patan ruj;Μπατόν Ρουζ;Батон Руж;Батон-Руж;Батън Руж;Горад Батан-Руж;Բաթոն Ռուժ;באטון רוז;باتون روج;باتون روژ;باتون‌روژ، لوئیزیانا;باٹن روگ;بیٹون روج، لوزیانا;बॅटन रूज;बेटन रु;बेटन रूज;ब्यातन रुज;பாடன் ரூஜ்;แบตันรูช;バトンルージュ;巴吞鲁日;배턴루지; +city::4317639;Bossier City;Bossier;Bossier City;Bozher Siti;bo xi er cheng;bosyeositi;bwsyr syty;bwwzhr lwyyzyana;Божер Сити;بوسير سيتي;بوسیئر سٹی، لوزیانا;بووژر، لوئیزیانا;波西尔城;보셔시티; +city::4329753;Kenner;Cannes Brulees;Kener;Kenner;ken na;kena;knr lwyyzyana;kynr lwzyana;kynyr;Кенер;Кеннер;كينير;کنر، لوئیزیانا;کینر، لوزیانا;ケナー;肯纳; +city::4330145;Lafayette;LFT;La Fayette;Lafajet;Lafayette;Lafejet;Lafejett;Little Manchac;Pinhool;Vermilion;Vermilionville;Vermillion Bridge;Vermillionville;Village of Saint Jean Au Vermilion;la fa ye;lafayt lwyyzyana;lafayyt;lapies;rafaietto;Лафайет;Лафейетт;Лафејет;לפאייט;لافاييت;لافایت، لوئیزیانا;لافیت، لوسیانہ;ラファイエット;拉法葉;라피엣; +city::4330236;Lake Charles;Charlestown;LCH;Lake Charles;Lejk Charls;Lejk-Charl'z;lai ke cha er si;leikeuchalseu;lyk charlz lwyyzyana;lyk tsharlz;reikucharuzu;Лейк-Чарльз;Лејк Чарлс;ليك تشارلز;لیک چارلز، لوئیزیانا;لیک چارلس، لوسیانہ;レイクチャールズ;莱克查尔斯;레이크찰스; +city::4333177;Metairie;Maiterie;Metairie;Metairieburgh;Metairieville;Metari;metali;meteri;mitiry lwyyzyana;Метари;مِتِری، لوئیزیانا;میٹیری، لوزیانا;メテリー;메타리; +city::4333190;Metairie Terrace;; +city::4335045;New Orleans;Bagong Orleans;Big Easy;Cene Orlean;Crescent City;Gorad Novy Arlean;La Nouvelle-Orleans;La Nouvelle-Orléans;MSY;N'ju-Orlean;N'ju-Orleans;NOLA;Naujasis Orleanas;Nawlins;Nea Orleani;Neu Orleans;Neuva Orleans;New Orleans;Nieuw Orleans;Nju Orleans;Nju Orliuns;Nog Orlean;Nor Orlean;Nouvelle Orleans;Nov-Orleano;Nov-Orleans;Nova Aurelia;Nova Orleaes;Nova Orleans;Nova Orleáns;Nova Orleães;Novij Orlean;Novyj Orlean;Nowy Orlean;Nowy Uorlean;Nueva Orleans;Nuoba Orleanes;Nuorleana;Nyu-Orlean;Nòva Orleans;Orleans Parish;The Big Easy;U Orlean;Uz Orlean;Yancuic Orleans;Yengi Orlean;Yéngi Orléan;akhali orleani;awrlynz parsh;n'yu orlins;n'yu orlinsa;n'yu orliyansa;new orleans louisiana;ni wx xr lins;ni'u aralinsa;niu ao liang;niyu orlens;nyuollieonseu;nyuorinzu;nyw awrlynz;nywawrlyan lwyyzyana;oralensa parisa;xin ao er liang;Çĕнĕ Орлеан;Ņūorleāna;Νέα Ορλεάνη;Њу Орлеанс;Горад Новы Арлеан;Жаңы орлеан;Новий Орлеан;Новый Орлеан;Ног Орлеан;Нью-Орлеан;Нью-Орлеанс;Ню Орлиънс;У Орлеан;Նոր Օռլեան;ניו אורלינס;ניו ארלינס;اورلینز پارش;نيو أورلينز;نیواورلئان، لوئیزیانا;न्यू ऑर्लिन्स;न्यू ओर्लियंस;न्‍यू आर्लीन्‍स;ওরলেন্স পারিশ;নিউ অরলিন্স;நியூ ஓர்லென்ஸ்;ನ್ಯೂ ಒರ್ಲೀನ್ಸ್;นิวออร์ลีนส์;ახალი ორლეანი;ニューオーリンズ;新奥尔良;紐奧良;뉴올리언스; +city::4341513;Shreveport;SHV;Shreve Town;Shreveport;Shreves Landing;Shrivport;shen li fu bo te;shryfbwrt;shrywpwrt lwyyzyana;shuribupoto;srivaporta;srybpwrt;syulibeupoteu;Шревепорт;Шривпорт;שריבפורט;شريفبورت;شریوپورت، لوئیزیانا;شریوپورٹ، لوزیانا;श्रीवपोर्ट;シュリーブポート;什里夫波特;슈리브포트; +city::4347778;Baltimore;BWI;Baltemore Town;Baltimor;Baltimor shaary;Baltimora;Baltimore;Baltimore City;Baltimorė;Baltimòra;Charm City;Gorad Baltymar;Jonas Town;Jones Town;Jonestown;Old Town;Oldtown;Valtimori;ba er de mo;balatimora;baltimor;baltimora;baltymwr;baltʼimori;boltimo-eo;boruchimoa;bwltymwr;bxl thim xr;palttimor;Βαλτιμόρη;Балтимор;Балтимор шаары;Горад Балтымар;Բալթիմոր;באלטימאר;בולטימור;بالتيمور;بالتیمور;بالٹیمور;بالٹیمور، میری لینڈ;बाल्टिमोर;बाल्टीमोर;বাল্টিমোর;ਬਾਲਟੀਮੋਰ;பால்ட்டிமோர்;ಬಾಲ್ಟಿಮೋರ್;ബാൾട്ടിമോർ;บอลทิมอร์;བྷལ་ཏྲི་མོར།;ဘော်လ်တီမိုးမြို့;ბალტიმორი;ボルチモア;巴爾的摩;볼티모어; +city::4348599;Bethesda;Betesda;Budezda;bei sai si da;beseoseuda;besesuda;btzda mrylnd;bythysda;Бетесда;Бъдезда;بتزدا، مریلند;بيثيسدا;بیتھسڈا، میری لینڈ;ベセスダ;贝塞斯达;베서스다; +city::4349159;Bowie;Boui;Bovi;Bowie;Bowie Station;Bui;Huntington City;Huntington Station;bawy;bui;bwwy mrylnd;Бови;Боуи;Буи;باوي;بووئی، میری لینڈ;بووی، مریلند;ブーイ; +city::4352053;Columbia;Columbia;Kolambija;Kolumbija;keolleombia;klmbya mrylnd;koronbia;kwlwmbya;Коламбија;Колумбия;كولومبيا;کلمبیا، مریلند;کولمبیا، میریلینڈ;コロンビア;컬럼비아; +city::4353765;Dundalk;Avondale;Dandalk;Dandok;Dandolk;Dundalk;dandk mrylnd;Дандалк;Дандок;Дандолк;داندک، مریلند;ڈنڈاک، میری لینڈ; +city::4354265;Ellicott City;Ehllikot Siti;Elikot Siti;Ellicott;Ellicott City;Ellicott Mills;Ellicotts Lower Mills;Ellicotts Mills;ai li ke te cheng;alykt mrylnd;erikottoshiti;Еликот Сити;Элликот Сити;الیکت، مریلند;ایلیکاٹ سٹی، میری لینڈ;エリコットシティ;埃利科特城; +city::4355585;Frederick;FDK;Frederic Town;Frederick;Frederick City;Frederick Town;Frederick i Maryland;Fredericktown;Frederik;Frederikas;Frehderik;Fridericus;Friedrichtown;Monaquesy;Monocacy;Monockkasye;frdryk mrylnd;frydryk;fu lei de li ke;furederikku;peuledeolig;Фредерик;Фредерік;Фрэдерик;فردریک، مریلند;فريدريك;فریڈرک، میری لینڈ;フレデリック;弗雷德里克;프레더릭; +city::4355843;Gaithersburg;Forest Oak;GAI;Gaithersburg;Gaithersburgum;Gejtersberg;Gejtersburg;Gejtursburg;Gejzehrsburg;gai se si bao;geideoseubeogeu;geizasubagu;ghaythrsbyrgh;gytrzbrg mrylnd;Гейзэрсбург;Гейтерсберг;Гейтърсбърг;Гејтерсбург;Ґейтерсбург;غايثرسبيرغ;گیترزبرگ، مریلند;گیتھرزبرگ، میری لینڈ;ゲイザースバーグ;盖瑟斯堡;게이더스버그; +city::4356050;Germantown;Dzermantaun;Dzhermantaun;jamantaun;jrmntawn mrylnd;jyrmantawn;Џермантаун;Джермантаун;جرمن ٹاؤن، مونٹگمری کاؤنٹی، میری لینڈ;جرمنتاون، مریلند;جيرمانتاون;ジャーマンタウン; +city::4356188;Glen Burnie;Glehn Bjurni;Glen Berni;Glen Burnie;Glenburnie;Myrtle;Traceys Station;ny mrylnd;Глен Берни;Глэн Бюрни;نی، مریلند;گلین برنی، میری لینڈ; +city::4367175;Rockville;Hungerford's Tavern;Hungerfords;Hungerfords Tavern;Montgomery Court House;Montgomery Courthouse;Owen's Ordinary;Rockvilla;Rockville;Rokvil;Rokvil';Rokvilis;Rokvill;Williamsburg;Williamsburgh;logbil;luo ke wei er;rakwyl mrylnd;rokkubiru;rwkfyl;rwqwwyl;Роквил;Роквилл;Роквіль;רוקוויל;راکویل، مریلند;راکویل، میری لینڈ;روكفيل;როკვილი;ロックビル;羅克維爾;록빌; +city::4369596;Silver Spring;Fons Argenteus;Silvehr Spring;Silver Spring;Silver Springs Station;Silver-Spring;Silvur Spring;shirubasupuringu;silbeoseupeuling;sylwr aspryng mrylnd;yin quan;Силвер Спринг;Силвер-Спринг;Силвър Спринг;Силвэр Спринг;Сілвер-Спрінг;سلور سپرنگ، میری لینڈ;سیلور اسپرینگ، مریلند;シルバースプリング;银泉;실버스프링; +city::4371582;Towson;Tauson;Towson;Towson Town;Towsontown;tao sen;tauson;tawsn mrylnd;Таусон;تاوسن، مریلند;ٹاوسن، میری لینڈ;タウソン;陶森; +city::4372599;Waldorf;Beantown;Valdof;Voldorf;Waldorf;u~orudofu;waldwrf mrylnd;woldopeu;Валдоф;Волдорф;والدورف، مریلند;والڈورف، میری لینڈ;ウォルドーフ;월도프; +city::4377664;Blue Springs;Blu Springs;blw aspryngz myzwry;blw sbrynghz;blyw sprngz mswry;Блу Спрингс;بلو اسپرینگز، میزوری;بلو سبرينغز;بلیو سپرنگز، مسوری; +city::4381982;Columbia;COU;Columbia;Kolambija;Kolumbia;Kolumbija;ge lun bi ya;keolleombia;klmbya myzwry;koronbia;kwlmbya mswry;kwlwmbya;Коламбија;Коламбія;Колумбиа;Колумбия;كولومبيا;کلمبیا، میزوری;کولمبیا، مسوری;コロンビア;哥倫比亞;컬럼비아; +city::4385018;East Independence;Independence Mo;Pixley;Pixleys; +city::4386802;Florissant;Ferdinand;Fleurissant;Florisant;Florissant;Saint Ferdinand;Saint Ferdinand Florissant;Saint Ferdinand de Florissant;San Fernando;San Fernando de Florissant;flwrysant;flwrysnt myzwry;Флорисант;Флориссант;فلوريسانت;فلوریسنت، میزوری;فلوریسینٹ، مسوری; +city::4391812;Independence;Bristol;Indehpendens;Independence;Independens;Independensas;Indipenduns;andybndns;ayndypndns myzwry;du li cheng;indipendensu;indipendeonseu;Індепенденс;Индепенденс;Индипендънс;Индэпенденс;אינדפנדנס;إنديبندنس;انڈیپینڈینس، مسوری;ایندیپندنس، میزوری;インディペンデンス;独立城;인디펜던스; +city::4392768;Joplin;Dzhoplin;Dzoplin;JLN;Joplin;Union City;gwplyn;japlyn myzwry;jopurin;jwbln;jwpln mswry;Џоплин;Джоплин;גופלין;جاپلین، میزوری;جوبلن;جوپلن، مسوری;ジョプリン; +city::4393217;Kansas City;Caasimada Kansas;City of Kansas;Dinas Kansas;Gorad Kanzas-Sici;Greenwood;Ilu Kansas;Kansas City;Kansas City i Missouri;Kansas Lakanbalen;Kansas Sity;Kansasurbo;Kanzas Shehiri;Kanzas Siti;Kanzas Sitis;Kanzas-Siti;Kanzassitija;Kota Kansas;Lungsod ng Kansas;MKC;Maple Gardens;Milton;Moscow;Town of Kansas;Westport;Winnetonka;Winnwood;kaenjaseusiti;kan sa si cheng;kanasasa siti;kansas syty;kanzasushiti;kanzas‌syty myzwry;kencas nakaram;kensasa siti;kʼanzas-sitʼi;qnzs syty;Ìlú Kansas;Κάνσας Σίτυ;Горад Канзас-Сіці;Канзас Сити;Канзас-Сити;Канзас-Сіті;Կանզաս Սիթի;קנזס סיטי;كانساس سيتي;کانزاس‌سیتی، میزوری;کنساس شہر، مسوری;कॅन्सस सिटी;কানসাস সিটি;கேன்சஸ் நகரம்;แคนซัสซิตี;კანზას-სიტი;カンザスシティ;堪薩斯城;캔자스시티; +city::4394870;Lee's Summit;Lee's Summit;Lee’s Summit;Lis Samit;Lis Sammit;Strother;lyz samyt myzwry;Лис Самит;Лис Саммит;ليز ساميت، ميزوري;リーズ・サミット; +city::4401242;O'Fallon;O'Fallon;O'Fallon Station; +city::4406831;Saint Charles;City of Saint Charles;Las Pequenas Cuestas;Le Village de Cotes;Le Village du Cote;Les Petites Cotes;Petit Cotes;Saint Andrew;Saint Charles;Saint Charles City;San Carlos del Missouri;San Carlos del Misuri;San Fernando;Sehjnt Charlz;Sent Charls;Sent-Charl'z;St. Charles;sent chal s;snt charlz myzwry;Сент Чарлс;Сент-Чарльз;Сэйнт Чарлз;سنت چارلز، میزوری;เซนต์ชาลส์; +city::4407010;Saint Joseph;Robidoux Landing;STJ;Saint Joseph;Sankta Jozefo;Sejnt Dzhouzef;Sent DZozef;Sent Dzhozef;Sent-Dzhozef;South Saint Joseph;St. Joseph;seinteujojipeu;snt jwzf myzwry;Сейнт Джоузеф;Сент Џозеф;Сент Джозеф;Сент-Джозеф;سنت جوزف، میزوری;세인트조지프; +city::4407066;St. Louis;City of Saint Louis;Gorad Sent-Luis;Lacledes Village;Mound City;Pain Court;Pancore;STL;Saint Lewis;Saint Louis;Saint Louis City;Saint-Louis;San Luis;Sankta Luiso;Sejnt Luis;Sent Loisos;Sent Luis;Sent Luisas;Sent-Luis;Sentluisa;Sint-Louis;St Louis;St. Louis;Urbs Sancti Ludovici;ceyint luyis;saint luyis;sant lwys;seinteulu-iseu;senta lu'isa;senthluys;sentoruisu;seyint luyis;sheng lu yi si;snt lwyys;Σαιντ Λούις;Горад Сент-Луіс;Сейнт Луис;Сент Луис;Сент-Луис;Сент-Луїс;סנט לואיס;سانت لويس;سنت لوئیس;سینٹ لوئس;सेंट लुईस;செயின்ட் லூயிஸ்;సెయింట్ లూయిస్;ಸೈಂಟ್ ಲೂಯಿಸ್;เซนต์หลุยส์;სენტ-ლუისი;セントルイス;圣路易斯;세인트루이스; +city::4407237;Saint Peters;City of Saint Peters;Sankt-Peterbu;Санкт-Петербу; +city::4409896;Springfield;North Springfield;SGF;Springfield;Springfijld;Springfild;aspryngfyld myzwry;sbrynghfyld;seupeulingpildeu;si pu lin fei er de;spryngpyld;supuringufirudo;Спрингфийлд;Спрингфилд;Спрингфілд;ספרינגפילד;اسپرینگفیلد، میزوری;سبرينغفيلد;سپرنگفیلڈ، مسوری;スプリングフィールド;斯普林菲尔德;스프링필드; +city::4428667;Gulfport;GPT;Galfport;Galfporta;Gulfport;galfpwrt mysysypy;garufupoto;ge er fu bo te;ghwlfbwrt;Галфпорт;Галфпорта;Гулфпорт;Гълфпорт;Ґалфпорт;غولفبورت;گالفپورت، میسیسیپی;گلف پورٹ، مسیسپی;ガルフポート;格尔夫波特; +city::4431410;Jackson;Dzekson;Dzeksona;Dzeksonas;Dzeksons;Dzhaksun;Dzhekson;Džeksona;Džeksonas;Džeksons;Gorad Dzhehksan;JAN;Jackson;Jackson i Mississippi;Le Fleurs Bluff;Siti of Dzhekson;Tzakson;Zhehkson;gqswn;jaegseun;jakcan;jaksan;jakswn;jakuson;jeksana;jie ke xun;jkswn mysysypy;jyakasana;jyaksana;jyksn;jyksn msyspy;Τζάκσον;Џексон;Горад Джэксан;Джаксън;Джексон;Жэксон;Сити оф Джексон;Ջեքսոն;גקסון;جاكسون;جکسون، میسیسیپی;جیکسن;جیکسن، مسیسپی;जाक्सन्;जॅक्सन;ज्याकसन;ज्याक्सन;ஜாக்சன்;ジャクソン;杰克逊;잭슨; +city::4446675;Southaven;Sautaven;Southhaven;Soutkhehven;sausuheibun;sawthywn mysysypy;Саутавен;Соутхэвен;ساؤتھایون، مسیسپی;ساوتهیون، میسیسیپی;サウスヘイブン; +city::4450687;West Gulfport;; +city::4453066;Asheville;AVL;Asheville;Biltmore;Ehshvill;Eshvil;Eshvil';Kasdu'yi;Keniworth;Montford;Morristown;Ramoth;Sunset Park;Victoria;West Asheville;Woolsey;a shen wei er;aesyubil;ashfyl;ashubiru;ashwyl karwlynay shmaly;ayshwyl shmaly kyrwlayna;Ешвил;Ешвіль;Эшвилл;אשוויל;آشفيل;اشویل، کارولینای شمالی;ایشویل، شمالی کیرولائنا;アシュビル;阿什维尔;애슈빌; +city::4458228;Burlington;Berlington;Berlingtona;Bjorlington;Burlington;Bērlingtona;Company Shops;barinton;brlnghtwn;lyngtn karwlynay shmaly;Берлингтон;Берлінгтон;Бёрлингтон;برلنغتون;برلنگٹن، شمالی کیرولائنا;لینگتن، کارولینای شمالی;バーリントン; +city::4459467;Cary;Cary;Kehri;Keri;Keris;Pages Siding;Pages Tavern;Pages Turnout;ka rui;kary;keli;keri;kry karwlynay shmaly;kyry shmaly kyrwlayna;Кери;Кері;Кэри;كاري;کری، کارولینای شمالی;کیری، شمالی کیرولائنا;ケーリー;卡瑞;케리; +city::4460162;Chapel Hill;; +city::4460243;Charlotte;CLT;Carolinum;Charlotte;Charlotte i Nord-Carolina;Charlottesburg;Charlottesburgh;Gorad Sharlat;Sarlot;Sarlota;Sarlote;Sarlott;Sharl"t;Sharlot;Sharlott;carlat;charlxtt;saralata;sarlata;sarlet;sharlotʼi;sharlwt karwlynay shmaly;sharotto;syalleos;tsharlwt;xia luo te;Şarlott;Šarlota;Šarlotė;Σάρλοτ;Горад Шарлат;Шарлот;Шарлотт;Шарлът;Շառլոթ;שארלוט;تشارلوت;شارلوت، کارولینای شمالی;شارلوٹ، شمالی کیرولائنا;शार्लट;শার্লট;ਸ਼ਾਰਲਟ;சார்லட்;షార్లెట్;ಷಾರ್ಲೆಟ್;ชาร์ลอตต์;შარლოტი;シャーロット;夏洛特;샬럿; +city::4461574;Concord;Concord;Konkord;USA;kankrd karwlynay shmaly;konkodo;kwnkwrd;Конкорд;كونكورد;کانکرد، کارولینای شمالی;کونکورڈ، شمالی کیرولائنا;コンコード; +city::4464368;Durham;Daram;Darem;Daremas;Duram;Durham;Durhamsville;Gorad Darehm;RDU;daramu;de han;deoleom;dwrham;dyurema;Горад Дарэм;Дарам;Дарем;Дърам;דרהאם;دورهام;ڈرہم، شمالی کیرولائنا;ड्युरॅम;เดอแรม;ダーラム;德罕;더럼; +city::4466033;Fayetteville;Campbellton;Cross Creek;FAY;Fajetvil;Fayetteville;Feetvil';Fejetvil;Fejetvill;Lower Campbellton;Upper Campbellton;faiettobiru;fayytfyl;fei ye te wei er;fey xett will;fyytwyl karwlynay shmaly;peiesbil;Файетвил;Фейетвилл;Феєтвіль;Фејетвил;פאייטוויל;فائیٹویل، شمالی کیرولائنا;فاييتفيل;فییتویل، کارولینای شمالی;เฟย์เอตต์วิลล์;ファイエットビル;費耶特維爾;페이엣빌; +city::4467732;Gastonia;Gastonija;gaeseutonia;gasutonia;ghastwnya;gstwwnya karwlynay shmaly;jia si tuo ni ya;kastaniya;Гастония;Гастонија;Ґастонія;غاستونيا;گستوونیا، کارولینای شمالی;گیسٹونیا، شمالی کیرولائنا;கஸ்டானியா;แกสโตเนีย;ガストニア;加斯托尼亞;개스토니아; +city::4469146;Greensboro;GSO;Gorad Grynsbara;Greensboro;Grijnsburo;Grinsboras;Grinsboro;Qrinsboro;ge lin si bo lei;geulinjeubeoleo;ghrynzbwrw;grinsaboro;grynsbwrw;grynzbwrw karwlynay shmaly;grynzbwrw shmaly kyrwlayna;gurinzuboro;kri ns bo ro;Горад Грынсбара;Грийнсбъро;Гринсборо;Ґрінсборо;Գրինսբորո;גרינסבורו;غرينزبورو;گرینزبورو، شمالی کیرولائنا;گرینزبورو، کارولینای شمالی;ग्रीन्सबोरो;กรีนส์โบโร;グリーンズボロ;格林斯伯勒;그린즈버러; +city::4469160;Greenville;Greenesville;Greensville;Greenville;Grinvil;Grinvill;Martinsborough;PGV;ghrynfyl;grynwwyl;grynwyl karwlynay shmaly;grynwyl shmaly kyrwlayna;gurinbiru;Гринвил;Гринвилл;גרינוויל;غرينفيل;گرینویل، شمالی کیرولائنا;گرینویل، کارولینای شمالی;グリーンビル; +city::4471025;High Point;Khaj Pojnt;Khaj-Pojnt;hai bo yin te;haipointo;hay bwynt;hay pwynt karwlynay shmaly;Хай-Пойнт;Хај Појнт;هاي بوينت;های پوینت، کارولینای شمالی;ہائی پوائنٹ، شمالی کیرولائنا;ハイポイント;海波因特; +city::4472370;Huntersville;Khantersvil;hantazubiru;hantrsfyl;hwntrswyl karwlynay shmaly;Хантерсвил;هانترسفيل;هونترسویل، کارولینای شمالی;ہنٹرزویل، شمالی کیرولائنا;ハンターズビル; +city::4473083;Jacksonville;Dzeksonvil;Dzhaksunvil;Dzhehksonvill;Dzheksonvil';Dzheksonvill;Jacksonville;OAJ;Onslow Court House;jakswnfyl;jakusonbiru;jksnwyl karwlynay shmaly;jyksn wyl shmaly kyrwlayna;Џексонвил;Джаксънвил;Джексонвилл;Джексонвіль;Джэксонвилл;جاكسونفيل;جکسنویل، کارولینای شمالی;جیکسن ویل، شمالی کیرولائنا;ジャクソンビル; +city::4487042;Raleigh;Gorad Roli;RDU;Ralei;Raleigh;Rali;Roles;Roli;Rolis;Rolės;Wake Court House;lolli;luo li;ra li;raley;rali;raly;raly shmaly kyrwlyna;rele;reli;roli;rori;ryale'i;Ράλεϊ;Горад Ролі;Рали;Ралі;Роли;Ռոլի;ראלי;رالي;رالی;رالی، شمالی کیرولینا;रालेय्;रॅले;रेली;र्यालेइ;র‌্যালি;ராலீ;ราลี;როლი;ローリー;罗利;롤리; +city::4488762;Rocky Mount;RWI;Rocky Mount;Roki Maunt;Roki-Maunt;raky mawnt karwlynay shmaly;rokkimaunto;rwky mawnt;Роки Маунт;Роки-Маунт;Рокі-Маунт;راکی ماؤنٹ، شمالی کیرولائنا;راکی ماونت، کارولینای شمالی;روكي ماونت;ロッキーマウント; +city::4499379;Wilmington;ILM;New Carthage;New Liverpool;New Town;Newton;Uilmington;Uilmingtun;Vilmington;Wilmington;u~iruminton;wei er ming dun;wilmingteon;wylmynghtwn;wylmyngtn karwlynay shmaly;wylmyngtwn;Вилмингтон;Вілмінгтон;Уилмингтон;Уилмингтън;וילמינגטון;ويلمينغتون;ویلمینگتن، کارولینای شمالی;ویلمینگٹن، شمالی کیرولائنا;ウィルミントン;威尔明顿;윌밍턴; +city::4499612;Winston-Salem;INT;Uinston-Sejlem;Uinstun-Sejlum;Vinston-Salem;Vinston-Sejlem;Vinstonas-Seilemas;Winston;Winston Salem;Winston-Salem;wen si dun-sai lei mu;winseuteonseilleom;wynstwn-salm karwlayna alshmalyt;wynstwn-sylm;Винстон-Салем;Винстон-Сейлем;Винстон-Сејлем;Уинстон-Сейлем;Уинстън-Сейлъм;وينستون-سالم، كارولاينا الشمالية;وینستون-سیلم;ウィンストン・セーラム;温斯顿-塞勒姆;윈스턴세일럼; +city::4501018;Camden;Camden;Camden Village;Cooper's Ferry;Cooper's Point Ferry Village;Coopers Ferry;Coopersville;Dogwood;Kaighnton;Kamdehn;Kamden;Kamdun;Pinchtown;Spicers;Stockton;Wrightsville;kaemdeon;kamdn;kamuden;kemdena;ken dun;kmdn nywjrsy;qmdn;Камден;Камдън;Камдэн;קמדן;كامدن;کمدن، نیوجرسی;کیڈمن، نیو جرسی;कॅम्डेन;カムデン;肯頓;캠던; +city::4501198;Cherry Hill;Cherry Hill;Ellisburg; +city::4502434;Jackson;; +city::4504225;South Vineland;; +city::4504476;Toms River;Goose Creek;MJX;Main Branch Toms River;North Branch Toms River;Tom's River;Toms Creek;Toms Rivehr Taunship;Toms River;Toms River Bay;Toms Rivur;tamz rywr nywjrsy;tang mu si he;tomseulibeo;tomuzuriba;Томс Ривер;Томс Ривър;Томс Ривэр Тауншип;تامز ریور، نیوجرسی;トムズリバー;湯姆斯河;톰스리버; +city::4504621;Vineland;Vajnland;bainrando;waynlnd nywjrsy;Вайнланд;Вајнланд;وائنلینڈ، نیو جرسی;واینلند، نیوجرسی;バインランド; +city::4508722;Cincinnati;CVG;Cincinnati;Cincinnatopolis;Covalts Station;Fort Washington;Gorad Cyncynaci;Losantiville;Porkopolis;Queen City;Queen City of the West;Sinsinati;Sinsinatis;Sinsinatti;Sinsinnati;cincinatti;shinshinati;sinasinati;sinsinaeti;synsynaty;synsynty;synsynty awhayw;xin xin na ti;Σινσινάτι;Горад Цынцынаці;Синсинати;Синсинатти;Цинциннати;Цинциннаті;Ցինցինատի;סינסינטי;سنسیناٹی;سينسيناتي;سینسینتی، اوهایو;सिनसिनाटी;சின்சினாட்டி;ซินซินแนติ;ცინცინატი;シンシナティ;辛辛那提;신시내티; +city::4509177;Columbus;CMH;Columbopolis;Columbus;Columbus i Ohio;Franklin;Franklinton;Gorad Kalumbus;Kolambus;Kolompous;Kolumbas;Kolumbs;Kolumbu;Kolumbus;Kolumbusa;Kulumbus;ge lun bu;kalabasa;kalambasa;kholambas;klmbws awhayw;kolambas;kolambasa;kolampas;kolleombeoseu;koronbasu;kwlwmbws;qwlwmbws;Κολόμπους;Горад Калумбус;Коламбус;Колумбус;Кълъмбъс;Կոլումբուս;קאלומבוס;קולומבוס;كولومبوس;کلمبوس، اوهایو;کولمبس، اوہائیو;कोलंबस;कोलम्बस;कोलम्बस्;কলম্বাস;ਕਲੰਬਸ;கொலம்பஸ்;โคลัมบัส;კოლუმბუსი;コロンバス;哥伦布;哥倫布;콜럼버스; +city::4509884;Dayton;Cabintown;DAY;Dayton;Dehjton;Deitonas;Dejton;Dejtun;Venice;dai dun;daytwn awhayw;deiteon;deiton;detana;dytwn;dyytwn;Дейтон;Дейтън;Дејтон;Дэйтон;דייטון;دايتون، أوهايو;دیتون;डेटन;デイトン;代顿;데이턴; +city::4513575;Hamilton;Fort Hamilton;Gamil'ton;HAO;Hamilton;Hamilton!;Khamilton;Khamiltun;Khehmilton;Rossville;haemilteon;hamiruton;hamltn;han mi er dun;hmyltwn awhayw;Гамильтон;Гамільтон;Хамилтон;Хамилтън;Хэмилтон;هاملتن;همیلتون، اوهایو;ہیملٹن، اوہائیو;ハミルトン;漢密爾頓;해밀턴; +city::4515843;Kettering;Kehttering;Ketering;Kettering;katrngh;keteoling;ktryng awhayw;Кетеринг;Кеттеринг;Кэттеринг;كاترنغ;کترینگ، اوهایو;کیٹرنگ، اوہائیو;케터링; +city::4525353;Springfield;Gillistown;Post Town;SGH;Springfield;Springfild;aspryngfyld awhayw;sbrynghfyld;seupeulingpildeu;si pu lin fei er de;spryngpyld;supuringufirudo;Спрингфилд;Спрінгфілд;ספרינגפילד;اسپرینگفیلد، اوهایو;سبرينغفيلد;سپرنگفیلڈ، اوہائیو;སི་པི་རིང་ཧྥིལ་ཌི།;スプリングフィールド;斯普林菲尔德;스프링필드; +city::4531405;Broken Arrow;Broken Arou;Broken Arrow;Broken-Ehrrou;Broken-Errov;Broukehn Arrou;beulokeun-aelo;brwkn arw;brwkn arww aklahma;burokun'aro;Брокен Ароу;Брокен-Ерров;Брокен-Эрроу;Броукэн Арроу;ברוקן ארו;بروكن أرو;بروکن اروو، اکلاهما;بروکن ایرو، اوکلاہوما;ブロークンアロー;브로큰애로; +city::4535740;Edmond;Edmond;Edmont;Ehdmon;Ehdmond;Ehdmont;admnd aklahma;admwnd;edeumeondeu;edomondo;Едмонд;Едмонт;Эдмон;Эдмонд;Эдмонт;אדמונד;إدموند;ادمند، اکلاهما;ایڈمونڈ، اوکلاہوما;エドモンド;에드먼드; +city::4535961;Enid;Ehnid;Enid;Inid;WDG;anyd;aynyd aklahma;inideu;Енід;Инид;Энид;إنيد;اینڈ، اوکلاہوما;اینید، اکلاهما;이니드; +city::4540737;Lawton;LAW;Lavton;Lawton;Loton;Louton;lao dun;loteon;ltn aklahma;lwtwn;roton;Лавтон;Лотон;Лоутон;לוטון;لاٹن، اوکلاہوما;لتن، اکلاهما;لوتون;ロートン;劳顿;로턴; +city::4542765;Midwest City;Miduehst-Siti;Midvehst Siti;Midvest Siti;Midvest-Siti;mydwst syty aklahma;mydwyst syty;Мидвест Сити;Мидвэст Сити;Мидуэст-Сити;Мідвест-Сіті;ميدويست سيتي;مڈویسٹ سٹی، اوکلاہوما;میدوست سیتی، اکلاهما; +city::4542975;Moore;Mur;mu er;mua;mueo;mwr;mwr aklahma;Мур;مور;مور، اکلاهما;موور، اوکلاہوما;ムーア;穆尔;무어; +city::4543762;Norman;Norman;OUN;noman;nomeon;normana;nuo man;nwrmn aklahma;Норман;نورمن، اکلاهما;नॉर्मन;ノーマン;諾曼;노먼; +city::4544349;Oklahoma City;Caayr Oklahoma;Cathair Oklahoma;Dinas Oklahoma;Gorad Aklakhoma-Sici;Kota Oklahoma;Kutha Oklahoma;Lungsod ng Oklahoma;Maxeponoe;Maxepónoe;OKC;Oklachoma Siti;Oklahoma;Oklahoma Ceety;Oklahoma City;Oklahoma Sites;Oklahoma Siti;Oklahoma Sitis;Oklahoma Sitės;Oklahoma Station;Oklahoma llaqta;Oklahomasitija;Oklahomaurbo;Oklakhoma;Oklakhoma Siti;Oklakhoma-Siti;Oklakhomae-Siti;Oklaxoma Shehiri;aklahma syty;ao ke la he ma shi;awklahwma syty;e ke la he ma cheng;okalahoma siti;okeullahomasiti;oklahoma nakaram;oklahoma siti;oklahoma-siti;okurahomashiti;xo khla ho ma si ti;Οκλαχόμα Σίτι;Горад Аклахома-Сіці;Оклахомæ-Сити;Оклахома;Оклахома Сити;Оклахома-Сити;Оклахома-Сіті;Օկլահոմա Սիթի;אוקלהומה סיטי;أوكلاهوما سيتي;اوکلاہوما شہر، اوکلاہوما;اکلاهما سیتی;ओक्लाहोमा सिटी;ওকলাহোমা সিটি;ஓக்லஹோமா நகரம்;โอคลาโฮมาซิตี;ოკლაჰომა-სიტი;ოქლაჰომა-სითი;オクラホマシティ;俄克拉荷馬城;奧克拉荷馬市;오클라호마시티; +city::4553433;Tulsa;T"lsa;TUL;Talsa;Tulsa;tarusa;tu er sa;Талса;Тълса;タルサ;圖爾薩; +city::4560349;Philadelphia;Coaquannock;Fi-sang;Fi-sàng;Filadel'fi;Filadel'fij;Filadel'fija;Filadelfi;Filadelfia;Filadelfiae;Filadelfie;Filadelfii;Filadelfija;Filadelfijo;Filadelfio;Filadelfiya;Filadelfiye;Filadelfiä;Filadèlfia;Filadélfia;Filadélfiye;Ga-na-ta-jen-go-na;Gorad Filadehl'fija;PHL;Philadelpheia;Philadelphia;Philadelphie;Philly;Quequenakee;Tsi wahswen:to Tekahso:ken;Tsi wahswèn:to Tekahsó:ken;fei cheng;fi la delfeiy;filadailafi'a;firaderufia;flaڈylfya;fyladlfya;fyladlfya pnsylwanya;philadelaphiya;philadelphiya;piladelpia;pilatelpiya;pilladelpia;pyldlpyh;Φιλαδέλφεια;Горад Філадэльфія;Филаделфиа;Филаделфия;Филаделфија;Филадельфи;Филадельфий;Филадельфия;Філадельфія;Ֆիլադելֆիա;פילאדעלפיע;פילדלפיה;فلاڈیلفیا;فلاڈیلفیا، پنسلوانیا;فيلادلفيا;فیلادلفیا;فیلادلفیا، پنسیلوانیا;फिलाडेल्फिया;ফিলাডেলফিয়া;ਫ਼ਿਲਾਡੈਲਫ਼ੀਆ;ફિલાડેલ્ફિયા;பிலடெல்பியா;ఫిలడెల్ఫియా;ಫಿಲಡೆಲ್ಫಿಯಾ;ഫിലഡെൽഫിയ;ฟิลาเดลเฟีย;ဖီလာဒဲလ်ဖီးယားမြို့;ფილადელფია;ፊላዴልፊያ;ភីឡាដេលផ្យា;フィラデルフィア;費城;费城;필라델피아; +city::4574324;Charleston;Carolopolis;Charles Town;Charles Towne;Charleston;Charleston i Sor-Carolina;Charleston i Sør-Carolina;Charlestowne;Charlston;Charlstoun;Charlstown;Charlstun;Tsarleston;cha er si dun;chalseuteon;charlstwn karwlynay jnwby;charusuton;tsharlstwn;zʼrlstwn;Τσάρλεστον;Чарлстон;Чарлстън;צארלסטון;تشارلستون;چارلستون، کارولینای جنوبی;چارلسٹن، جنوبی کیرولائنا;チャールストン;查尔斯顿;찰스턴; +city::4575352;Columbia;CAE;Columbia;Columbia i Sor-Carolina;Columbia i Sør-Carolina;Colùmbia;Colúmbia;Gorad Kalumbija;Kolambija;Koloumpia;Kolumbi;Kolumbia;Kolumbija;Kuolumbeje;Kuolumbėjė;ge lun bi ya;kalambiya;keolleombia;klmbya karwlynay jnwby;kolambiya;kolampiya;koronbia;kwlmbya jnwby kyrwlayna;kwlwmbya;qwlwmbyh;Κολούμπια;Горад Калумбія;Коламбија;Колумби;Колумбия;Колумбија;Колумбія;Կոլումբիա;קאלאמביע;קולומביה;كولومبيا;کلمبیا، کارولینای جنوبی;کولمبیا، جنوبی کیرولائنا;कोलंबिया;कोलम्बिया;কলাম্বিয়া;કોલંબિયા;கொலம்பியா;కొలంబియా;კოლუმბია;コロンビア;哥伦比亚;컬럼비아; +city::4580543;Greenville;GSP;Greenville;Greenville City;Greenville Court House;Greenville Courthouse;Grijnvil;Grinvil;Grinvil';Grinvill;Pleasantburg;Pleasantville;ge lin wei er;geulinbil;ghrynfyl;grinvili;grynwwyl;grynwyl jnwby kyrwlayna;grynwyl karwlynay jnwby;gurinbiru;Грийнвил;Гринвил;Гринвилл;Ґрінвіль;גרינוויל;غرينفيل;گرینویل، جنوبی کیرولائنا;گرینویل، کارولینای جنوبی;გრინვილი;グリーンビル;格林维尔;그린빌; +city::4588165;Mount Pleasant;Maunt Plezant;Mt. Pleasant;mang te pu lin sen;mauntopurezanto;mawnt plznt karwlynay jnwby;mwnt blystant;Маунт Плезант;ماؤنٹ پلیزینٹ، جنوبی کیرولائنا;ماونت پلزنت، کارولینای جنوبی;مونت بليستانت;マウントプレザント;芒特普林森; +city::4589387;North Charleston;CHS;N. Charleston;Nort Charlston;Nort-Charlston;North Charleston;bei cha er si dun;nosucharusuton;nwrt charlstn karwlynay jnwby;nwrth tsharlstwn;Норт Чарлстон;Норт-Чарлстон;شمالی چارلسٹن، جنوبی کیرولائنا;نورت چارلستن، کارولینای جنوبی;نورث تشارلستون;ノースチャールストン;北查尔斯顿; +city::4593142;Rock Hill;Ebenezer Depot;RKH;Rock Hill;Rockhill;Rocky Hill; +city::4604183;Bartlett;Bartlet;Bartlett;Union Depot;bartlyt;bartlyt tnsy;Бартлет;Бартлетт;بارتليت;بارتلیت، تنسی;بارٹلیٹ، ٹینیسی; +city::4612862;Chattanooga;A'tla'nuwa;Atala'nuwa';CHA;Catanuga;Chatanuga;Chattanooga;Chattanuga;Lookout City;Old French Store;Ross Landing;Ross's Landing;Ross's Store;Ross's Warehouse;Ross's Wharf;Tsattanounka;cetanuga;cha ta nu jia;chaeteonuga;chatanuga;chatanwga tnsy;tshatanwgha;ztnwgh;Čatanuga;Τσαττανούγκα;Чатануга;Чаттануга;Чаттануґа;צטנוגה;تشاتانوغا;چاتانوگا، تنسی;چٹانوگا، ٹینیسی;चॅटानूगा;チャタヌーガ;查塔努加;채터누가; +city::4613868;Clarksville;CKV;Clarksville;Klarksvil;Klarksvilis;Klarksvill;ke la ke si wei er;klarks vyl tynysy;klarksavhila;klarksfyl;kurakusubiru;Кларксвил;Кларксвилл;Кларксвілл;קלארקסוויל;كلاركسفيل;کلارکس ڤیل، تئنئسی;کلارکسویل، ٹینیسی;کلارک‌اسویل، تنسی;क्लार्क्सव्हिल;クラークスビル;克拉克斯维尔; +city::4619947;East Chattanooga;; +city::4623560;Franklin;Franklin;franklyn;franklyn tnsy;furankurin;peulaengkeullin;Франклин;فرانكلين;فرانکلین، تنسی;فرینکلن، ٹینیسی;フランクリン;프랭클린; +city::4628735;Hendersonville;Khendersonvil;hendason'vu~iru;hendeoseunbil;hndrsnwyl tnsy;hyndrswnfyl;Хендерсонвил;هندرسنویل، تنسی;هيندرسونفيل;ہینڈرسنویل، ٹینیسی;ヘンダーソンヴィル;헨더슨빌; +city::4632595;Jackson;Dzekson;Dzhaksun;Dzhekson;Jackson;MKL;jaegseun;jakswn;jakuson;jie ke xun;jksn tnsy;Џексон;Джаксън;Джексон;جاكسون;جکسن، تنسی;جیکسن، ٹینیسی;ジャクソン;傑克遜;잭슨; +city::4633419;Johnson City;Blue Plum Station;Dzonson Siti;Haynesville;Johnson City;Johnsons Depot;Johnsons Tank;gwnswn syty;janswn syty tnsy;jonseunsiti;jonsonshiti;jwnswn syty;yue han xun cheng;Џонсон Сити;גונסון סיטי;جانسن سٹی، ٹینیسی;جانسون سیتی، تنسی;جونسون سيتي;ジョンソンシティ;約翰遜城;존슨시티; +city::4634662;Kingsport;Boat Yard;Boatyard;Christiansville;Island Flats;Kings Port;Kingsport;Peace Island;jin si bo te;kynghsbwrt;kyngzprt tnsy;Кингспорт;Кінгспорт;كينغسبورت;کنگزپورٹ، ٹینیسی;کینگزپرت، تنسی;金斯波特; +city::4634946;Knoxville;Knoxville;Noksvil;Noksvill;Noxvil;TYS;Whites Fort;Whites Mill;nakswyl tnsy;nogseubil;nokkusubiru;noksavhila;nuo ke si wei er;nwksfyl;nwqswwyl;Νόξβιλ;Ноксвил;Ноксвилл;Ноксвілл;נוקסוויל;ناکسویل، تنسی;نوكسفيل;नॉक्सव्हिल;ノックスビル;諾克斯維爾;녹스빌; +city::4641239;Memphis;Gorad Memfis;MEM;Memfis;Memfisa;Memphis;Memphis Tennesiae;Menfis;Mémfis;Mênfis;memfis;memhpis;memphisa;mempiseu;mempisi;menfisu;meng fei si;mmfys;mmfys tnsy;mmpys;Μέμφις;Горад Мемфіс;Мемфис;Мемфіс;Մեմֆիս;ממפיס;מעמפיס;ممفيس;ممفیس;ممفیس، تنسی;میمفس، ٹینیسی;मेम्फिस;মেম্ফিস;மெம்ஃபிஸ்;เมมฟิส;მემფისი;メンフィス;孟菲斯;孟非斯;멤피스; +city::4644312;Murfreesboro;Cannonsburgh;Merfrisboro;Murfreesboro;Murfreesborough;Murfreysburo;Murfrijzburou;Murfrisboro;Murfrizboro;mafurizuboro;meopeulijeubeoleo;mo fu li si bo lei;mrprysbwrw;mwrfryzbwrw tnsy;Мерфрисборо;Мурфризборо;Мурфрисборо;Мърфрийзбъроу;מרפריסבורו;مورفریزبورو، تنسی;مورفریزبورو، ٹینیسی;マーフリーズボロ;默弗里斯伯勒;머프리즈버러; +city::4644585;Nashville;BNA;French Lick;Gorad Nashvil;Nachville;Nasburgum;Nashboro;Nashborough;Nashfile;Nashvil;Nashvill;Nashville;Nashville-Davidson;Nashwil;Nasvelis;Nasvil;Nasvila;Nasvilo;Naŝvilo;Našvila;Našvėlis;Nehshvill;Neshvil;Nesvil;Nesvilis;Nesvill;Neşvill;Nešvilis;n'yasabhila;n'yasbhila;n'yasbhilla;na shen wei er;na shu wei er;naesyubil;nashfyl;nasshubiru;nasvil;nesavhila;neshvili;nshwyl;Νάσβιλ;Горад Нашвіл;Нашвил;Нашвилл;Нашвілл;Нешвил;Нэшвилл;Նեշվիլ;נאשוויל;ناشفيل;ناشولے;نشویل;نیشویل، ٹینیسی;नाश्विल्;नॅशव्हिल;न्याश्भिल;न्यास्भिल्ल;ন্যাশভিল;நாஷ்வில்;แนชวิลล์;ნეშვილი;ナッシュビル;納殊維爾;纳什维尔;내슈빌; +city::4669635;Abilene;ABI;Abilenas;Abilene;Abilin;Abilina;Abilīna;Abulijn;Gorad Abilin;a bi lin;abirin;abylyn;abylyn tgzas;aebillin;Абилин;Абълийн;Абілін;Горад Абілін;אבילין;أبيلين;ابیلین;ابیلین، تگزاس;ابیلین، ٹیکساس;アビリーン;阿比林;애빌린; +city::4670300;Allen;Alen;Allen;aln;alyn;Ален;Аллен;آلن;ألين;ایلن، ٹیکساس;അല്ലെൻ; +city::4671240;Arlington;Arlin'nkton;Arlingt"n;Arlington;Arlingtona;Arlingtonas;Arlinqton;Gorad Arlingtan;a ling dun;allingteon;arinton;arlingtana;arlintana;arlynghtwn;arlyngtwn tgzas;arlyngtwn tygzas;xar ling tan;Ārlingtona;Άρλινγκτον;Арлингтон;Арлингтън;Арлінгтон;Горад Арлінгтан;Արլինգտոն;ארלינגטון;آرلنگٹن;آرلنگٹن، ٹیکساس;آرلینگتون، تئگزاس;آرلینگتون، تگزاس;أرلينغتون;आर्लिंग्टन;আর্লিংটন;ആർലിങ്ടൺ;อาร์ลิงตัน;არლინგტონი;アーリントン;阿灵顿;알링턴; +city::4671524;Atascocita;; +city::4671654;Austin;AUS;Austin;Austino;Austinopolis;Aŭstino;Gorad Oscin;Montopolis;Ostin;Ostina;Ostinas;Ostins;Waterloo;ao si ting;asatina;astin;astina;astyn tgzas;awstn;ke shi dian;oseutin;ostina;ostʼini;osutin;xxstin;Ώστιν;Горад Осцін;Остин;Остін;Օստին;אוסטין;אסטין;آستین، تگزاس;آسٹن;آسٹن، ٹیکساس;أوستن;अस्टिन;अस्तिन;आस्टिन्;ऑस्टिन;অস্টিন;ਆਸਟਿਨ;ஆஸ்டின்;ഓസ്റ്റിൻ;ออสติน;ოსტინი;ኦስቲን፣ ቴክሳስ;ᎠᏍᏘᏂ;オースティン;奧斯汀;柯士甸;오스틴; +city::4672731;Baytown;Baytown;Bejtaun;Creek;Goose Creek;HPY;bay tawn;bei dui;beitaun;by tawn tgzas;Бејтаун;باي تاون;بی تاون، تگزاس;بےٹاؤن، ٹیکساس;ベイタウン;貝敦;베이타운; +city::4672989;Beaumont;BPT;Beaumont;Bomont;Bomontas;Cow Bayou;Jefferson City;Neches River Settlement;Tevis Bluff;bo meng te;bomamta;bomonteu;bomonto;bwmant tgzas;bwmwnt;Бомонт;بومانت، تگزاس;بومونت;بیومونٹ;بیومونٹ، ٹیکساس;बोमाँट;ボーモント;博蒙特;보몬트; +city::4676740;Brownsville;BRO;Braunsvil;Braunsvila;Braunsvilis;Braunsvill;Brownsville;Fort Brown;Fort Taylor;beulaunjeubil;brawnzfyl;brawnzwl;brawnzwyl tgzas;bu lang si wei er;buraunzubiru;Браунсвил;Браунсвилл;בראונסוויל;براؤنزول;براونزفيل;براونزویل، تگزاس;براونزویل، ٹیکساس;ブラウンズビル;布朗斯維爾;브라운즈빌; +city::4677008;Bryan;Brajan;Bryan;CFD;beulaieon;brayan tgzas;bryan;bu lai en;buraian;Брайан;Брајан;برائن، ٹیکساس;برایان، تگزاس;بريان;ブライアン;布賴恩;브라이언; +city::4679195;Carrollton;Carrollton;Karolton;Karoltonas;Karrolton;Kerrolton;ka luo er dun;kaeleolteon;karwltwn;krwltwn tgzas;kyaroruton;Каролтон;Карролтон;Керролтон;كارولتون;کرولتون، تگزاس;کیرولٹن;کیرولٹن، ٹیکساس;കരോൾട്ടൺ;キャロルトン;卡羅爾頓;캐럴턴; +city::4679867;Cedar Park;Cedar Park;Cedarpark;Sidar Park;sydar bark;sydr park tgzas;Сидар Парк;سيدار بارك;سیدر پارک، تگزاس;سیڈر پارک، ٹیکساس; +city::4682464;College Station;CLL;College Station;Koledz Stejshon;Kolledzh-Stejshen;da xue cheng;kalej stesan;kalj astyshn tgzas;kallijiseuteisyeon;karejjisuteshon;koleja stesana;kwlyj styshn;Колеџ Стејшон;Колледж-Стейшен;كوليج ستيشن;کالج استیشن، تگزاس;کالج سٹیشن، ٹیکساس;कॉलेज स्टेशन;కాలేజ్ స్టేషన్;カレッジステーション;大學城;칼리지스테이션; +city::4682991;Conroe;CXO;Konro;kanrw tgzas;kwnrwy;Конро;كونروي;کانرو، تگزاس;کونرو، ٹیکساس; +city::4683416;Corpus Christi;CRP;Corpus Christi;Gorad Korpus-Krysty;Korpous Kristi;Korpus Kristi;Korpus-Kristi;Korpuskristi;ke po si ke li si di;khxrpaskh ri sti;kopasukurisuti;kopeoseukeuliseuti;korpasa kristi;kwrbws krysty;kwrps krysty;qwrpws krysty;Κόρπους Κρίστι;Горад Корпус-Крысты;Корпус Кристи;Корпус-Кристи;Корпус-Крісті;Корпъс Кристи;קורפוס כריסטי;كوربوس كريستي;کارپس کرسٹی، ٹیکساس;کورپس کرسٹی;کورپس کریستی;कॉर्पस क्रिस्टी;คอร์ปัสคริสตี;コーパスクリスティ;科珀斯克里斯蒂;코퍼스크리스티; +city::4684888;Dallas;DFW;Dalas;Dalasa;Dalasas;Dallas;Dallas shaary;Dallasium;Gorad Dalas;Ntalas;da la si;daelleoseu;dailasa;dalas;dalasa;dalasi;dallas;dallasa;dallaseu;darasu;delasa;talas;Ντάλας;Горад Далас;Далас;Даллас;Даллас шаары;Դալաս;דאלאס;دالاس;داللاس;داڵاس;ڈیلاس;डॅलस;डैलस;ডালাস;ਡਾਲਸ;ડલ્લાસ;டாலஸ்;డల్లాస్;ഡാളസ്;แดลลัส;ဒါးလတ်စ်မြို့;დალასი;ዳላስ;ダラス;達拉斯;달라스;댈러스; +city::4685524;DeSoto;De Soto;DeSoto;Desoto;Opportunity;Soto;Woodland Hills;deseattea;dswtw tgzas;dy swtw;Десото;Сото;دسوتو، تگزاس;دي سوتو;ڈیسوٹو، ٹیکساس;ഡെസോട്ടൊ; +city::4685907;Denton;Denton;Dentonas;Dentono;Dentun;deng dun;dentana;denteon;denton;dntwn tgzas;dyntwn;Дентон;Дентън;دنتون، تگزاس;دينتون;ڈینٹن;ڈینٹن، ٹیکساس;डेंटन;ডেন্টন;ഡെന്റൺ;デントン;登頓;덴턴; +city::4688275;Edinburg;Edinburg;Ehdinburg;adynbrg tgzas;adynbwrgh;edinbagu;Единбург;Эдинбург;إدينبورغ;ادینبرگ، تگزاس;ایڈنبرگ، ٹیکساس;エディンバーグ; +city::4689550;Euless;Jules;ywls;ywls tgzas;Јулес;يولس;یولس، تگزاس;یولیس، ٹیکساس; +city::4691585;Flower Mound;Flauer Maund;Flower Mound;flawr;flawr mawnd tgzas;Флауер Маунд;فلاور;فلاور ماؤنڈ، ٹیکساس;فلاور ماوند، تگزاس; +city::4691930;Fort Worth;Arx Vorthensis;Camp Worth;FTW;Fort Gouorth;Fort Uehrt;Fort Uert;Fort Uurt;Fort Vort;Fort Worth;Fort-Owert;Fort-Uehrt;Fort-Vort;Fortverta;Fortvortas;Fortvērta;Gorad Fort-Uehrt;f xrtweirth;forata varatha;fotowasu;fwrt wwrth;fwrt wwrth tgzas;phorta oyartha;phorta vartha;portʼ-uerti;poteuwoseu;pwrt wwrt;vort kottai;wo si bao;Φορτ Γουόρθ;Горад Форт-Уэрт;Форт Ворт;Форт Уърт;Форт Уэрт;Форт-Ворт;Форт-Уэрт;Ֆորտ-Ուերտ;פורט וורת;فورت وورث;فورت وورث، تگزاس;فورٹ ورتھ;فورٹ ورتھ، ٹیکساس;फोर्ट वर्थ;ফোর্ট ওয়ার্থ;ਫ਼ੋਰਟ ਵਰਥ;வொர்த் கோட்டை;ഫോർട്ട് വർത്ത്;ฟอร์ตเวิร์ท;ფორტ-უერთი;フォートワース;沃思堡;포트워스; +city::4692559;Frisco;Firsco;Frisco;Frisko;fryskw;fryskw tgzas;furisuko;peuliseuko;phriskea;Фриско;Фріско;فريسكو;فریسکو، تگزاس;فریسکو، ٹیکساس;ഫ്രിസ്കോ;フリスコ;프리스코; +city::4692883;Galveston;GLS;Galveston;Gorad Galvestan;gaelbeoseuteon;galwstwn tgzas;garubesuton;gelvhastana;ghalfstwn;jia er wei si dui;Галвестон;Горад Галвестан;Ґалвестoн;غالفستون;گالوستون، تگزاس;गॅल्व्हस्टन;ഗാൽ‌വെസ്റ്റൺ;ガルベストン;加爾維斯敦;갤버스턴; +city::4693003;Garland;Duck Creek;Embree;Garland;Garlandas;Garlend;Girljanda;gallaendeu;garando;garlnd tgzas;gharland;jia lan;Гарланд;Гарленд;Гирлянда;Ґарланд;غارلاند;گارلند، تگزاس;گارلینڈ;گارلینڈ، ٹیکساس;ഗാർലന്റ്;ガーランド;加蘭;갈랜드; +city::4693342;Georgetown;Dzhordzhtaun;Dzordztaun;Džordžtaun;jrj‌tawn tgzas;jwrjtawn;Џорџтаун;Джорджтаун;جارج ٹاؤن، ٹیکساس;جرج‌تاون، تگزاس;جورجتاون; +city::4694482;Grand Prairie;Deckman;Grand Prairie;Grand Preri;Grand Preris;Grand-Preri;da cao yuan cheng;geulaendeupeuleli;ghrand brary;grnd pryry tgzas;gurandopureri;Гранд Прери;Гранд-Прери;Гранд-Прері;غراند براري;گرند پریری، تگزاس;گرینڈ پریری;گرینڈ پریرے;ഗ്രാൻഡ് പ്രയറി;グランドプレーリー;大草原城;그랜드프레리; +city::4694568;Grapevine;; +city::4696233;Harlingen;Garlingen;HRL;Harlingen;Kharlindzen;Kharlingen;ha ling gen;hallingjeon;harinjen;harlynghn;harlynjn;hrlyngn;Гарлінґен;Харлинген;Харлинџен;הרלינגן;هارلينغن;هارلینجن;ہارلنگین، ٹیکساس;ハーリンジェン;哈靈根;할링전; +city::4699066;Houston;Chiouston;Gorad Khjustan;HOU;Hiu-su-tun;Hiustonas;Hiû-sṳ̂-tûn;Hjuston;Hjustona;Hjūstona;Houston;Houston City;Hustonia;Hyuston;Kh'juston;Khjust"n;Khjuston;hi'ustana;hiustʼoni;hiws tan;hiyustan;hou si dun;husatana;hyuseuteon;hyustan;hyustana;hyusuton;hywstn;hywstwn;xiu si dun;ywstwn;Χιούστον;Горад Хюстан;Хьюстон;Хюстон;Хюстън;Хјустон;Հյուստոն;היוסטן;יוסטון;هيوستن;هیوستون;ھیووستن;ہywsٹn;ہیوسٹن;ह्युस्टन;হিউস্টন;ਹੂਸਟਨ;હ્યુસ્ટન;ஹியூஸ்டன்;హ్యూస్టన్;ഹ്യൂസ്റ്റൺ;ฮิวสตัน;ဟူစတန်မြို့;ჰიუსტონი;ሂውስተን;ヒューストン;休斯敦;休斯頓;侯斯頓;휴스턴; +city::4700168;Irving;"rving;Erving;Irving;Irvingas;abingu;ayrfyngh;ayrwyng tgzas;eobing;ou wen;Ірвінг;Ервинг;Ирвинг;Ървинг;ارونگ، ٹیکساس;ايرفينغ;ایروینگ، تگزاس;എർവിങ്;アービング;歐文;어빙; +city::4703223;Killeen;ILE;Kilin;Kilinas;Killean;Killeen;Killin;ji lin;kaylyn tgzas;killin;kirin;klyn;kylyn;Килин;Киллин;Кіллін;كيلين;کایلین، تگزاس;کلین;کیلین، ٹیکساس;キリーン;基林;킬린; +city::4705349;Laredo;LRD;Laredo;Laredum;Villa de San Augustine de Laredo;la lei duo;larydw;larydw tgzas;leoleido;raredo;Ларедо;לארדו;لاريدو;لاریدو، تگزاس;لاریڈو، ٹیکساس;لریڈو;ラレド;拉雷多;러레이도; +city::4705692;League City;League City;Lig Siti;lyg syty tgzas;lygh syty;Лиг Сити;ليغ سيتي;لیگ سٹی، ٹیکساس;لیگ سیتی، تگزاس; +city::4706057;Lewisville;L'juisvill;Lewisville;Luisvil;liu yi si wei er;lu-iseubil;lwysfyl;lwyzwl;ruisubiru;Луисвил;Льюисвилл;لوئیس‌ویل، تگزاس;لويسفيل;لویزول;لیوسویل، ٹیکساس;ലൂയിസ്‌വിൽ;ルイスビル;刘易斯维尔;루이스빌; +city::4707814;Longview;GGG;Longv'ju;Longview;Longvju;lang wei you;langwyw tgzas;longbyu;lwnghfyw;lwngwyw;rongubyu;Лонгвью;Лонгвю;Лонгвју;لانگویو، تگزاس;لونغفيو;لونگویئو، ٹیکساس;لونگویو;ロングビュー;朗維尤;롱뷰; +city::4709013;Mansfield;Mansfeild;Mansfield;Mehnsfild;Mensfild;mansfyld;mnsfyld tgzas;Менсфилд;Мэнсфилд;مانسفيلد;منسفیلد، تگزاس;مینسفیلڈ، ٹیکساس; +city::4709796;McAllen;MFE;Mak-Allen;Makalen;McAllen;maekaelleon;mai ka lun;makalyn;makkaren;Мак-Аллен;Макален;מקאלן;ماكالين;مک ایلن، ٹیکساس;مک‌آلن;マッカレン;麦卡伦;매캘런; +city::4710178;McKinney;Mak-Kinni;Makini;McKinney;maekini;mai jin ni;makkini;makkinni;makkyny;Мак-Кинни;Мак-Кінні;Макини;ماككيني;مک کینی، ٹیکساس;مک‌کینی، تگزاس;മക്കിന്നി;マッキニー;麥金尼;매키니; +city::4710826;Mesquite;Meskit;Meskvit;Mesquite;mei si ji te;meseukiteu;meskvirr;mesukito;mskyt tgzas;mwskw;Месквіт;Мескит;مسکیت، تگزاس;مسکیٹ، ٹیکساس;موسكو;میسکوٹ;മെസ്ക്വിറ്റ്;メスキート;梅斯基特;메스키트; +city::4711725;Mission;Mishon;Missija;Mission;mi shen;misshon;myshn tgzas;Миссия;Мишон;میشن، تگزاس;ミッション;米申; +city::4711801;Missouri City;Missouri City;Misuri Siti;mi su li cheng;misari sirri;myswry syty;myzwry‌syty tgzas;Мисури Сити;مسوری سٹی، ٹیکساس;ميسوري سيتي;میزوری‌سیتی، تگزاس;മിസൗറി സിറ്റി;密蘇里城; +city::4714131;New Braunfels;N'ju-Braunfels;Nju Bronfels;nyuburonferuzu;nyw branflz tgzas;nyw brawnfylz;xin bu lang fei er si;Њу Бронфелс;Нью-Браунфелс;نيو براونفيلز;نیو برانفلز، تگزاس;نیو براونفیلز، ٹیکساس;ニューブローンフェルズ;新布朗費爾斯; +city::4715292;North Richland Hills;; +city::4717782;Pasadena;Pasadena;Pasadina;basadyna;pa sa di na;paeseodina;pasadena;pasadna tgzas;Пасадена;Пасадина;باسادينا;پاسادنا، تگزاس;パサデナ;帕薩迪納;패서디나; +city::4718097;Pearland;Pehrlend;Perland;byrland;pyr lnd tgzas;Перланд;Пэрленд;بيرلاند;پئیرلینڈ، ٹیکساس;پیر لند، تگزاس; +city::4718711;Pflugerville;Flugervil;bflwghrfyl;flagrwyl tgzas;Флугервил;بفلوغرفيل;فلاگرویل، تگزاس;فلوگیرویل، ٹیکساس; +city::4718721;Pharr;Far;Farra;far;far tgzas;Фар;Фарра;فار;فار، تگزاس;فار، ٹیکساس; +city::4719457;Plano;Planas;Planom;Plejno;Plejnou;blanw;peulleino;planw;plenea;pleno;plynw;pu lai nuo;pureino;Планом;Плейно;Плейноу;Плејно;פלאנו;بلانو;پلانو;پلانو، ٹیکساس;پلینو;प्लेनो;പ്ലേനോ;プレイノ;普莱诺;플레이노; +city::4720039;Port Arthur;BPT;Port Arthur;Port Arthur i Texas;Port Artur;Port-Artur;a se gang;bwrt arthr;poteuaseo;potoasa;pwrt artr tgzas;Порт Артур;Порт-Артур;Պորտ-Արտուր;بورت أرثر;پورت آرتر، تگزاس;پورٹ آرتھر، ٹیکساس;ポートアーサー;阿瑟港;포트아서; +city::4722625;Richardson;Ricardsonas;Richardson;Ričardsonas;licheodeuseun;richadoson;rychardswn tgzas;rytshardswn;Ричардсон;Річардсон;ريتشاردسون;رچرڈسن;ریچاردسون، تگزاس;റിച്ചാർഡ്സൺ;リチャードソン;리처드슨; +city::4724129;Round Rock;Raund Rok;Raund Rokas;Raund-Rok;Round Rock;Roundrock;lang de luo ke;laundeu log;rand rak tgzas;raundorokku;rawnd rwks;Раунд Рок;Раунд-Рок;راؤنڈ راک، ٹیکساس;راند راک، تگزاس;راوند روكس;ラウンドロック;朗德羅克;라운드 록; +city::4724194;Rowlett;Rowlett;Rowlette; +city::4726206;San Antonio;Gorad San-Antonia;SAT;San Antonijus;San Antonio;San Antonio de Bejar;San Antoniyo;San Antònio;San-Antonio;Sanantonio;Sanctus Antonius;can antoniyo;saen-antonio;saina entoniyo;san antoniyo;san antwnyw;san'antonio;san-antʼonio;sana antoni'o;sena amtoniyo;sheng an dong ni ao;Σαν Αντόνιο;Горад Сан-Антоніа;Сан Антонио;Сан-Антонио;Сан-Антоніо;Սան Անտոնիո;סאן אנטאניא;סן אנטוניו;سان آنتونیو;سان أنطونيو;سان انٹونیو;सॅन अँटोनियो;सैन एन्टोनियो;স্যান অ্যান্টোনিও;ਸਾਨ ਆਂਤੋਨੀਓ;சான் அந்தோனியோ;శాన్ అంటోనియో;സാൻ അന്റോണിയോ;แซนแอนโทนีโอ;სან-ანტონიო;サンアントニオ;圣安东尼奥;聖安東尼奧;샌안토니오; +city::4726491;San Marcos;San Markos;San-Markos;san markws;sanmarukosu;sheng ma ke si;sn markws tgzas;Сан Маркос;Сан-Маркос;سان ماركوس;سان مارکوس، ٹیکساس;سن مارکوس، تگزاس;サンマルコス;聖馬科斯; +city::4733624;Spring;Springtaun;aspryng tgzas;sbryngh;seupeuling;Спрингтаун;اسپرینگ، تگزاس;سبرينغ;سپرنگ، ٹیکساس;스프링; +city::4734825;Sugar Land;SGR;Shugar Land;Shugar-Lend;Sugar Land;shu ge lan;shugarando;shwgrlnd tgzas;shwjr land;syugeolaendeu;Шугар Ланд;Шугар-Ленд;Шуґар-Ленд;شوجر لاند;شوگر لینڈ، ٹیکساس;شوگرلند، تگزاس;ഷുഗർലാൻഡ്;シュガーランド;舒格蘭;슈거랜드; +city::4735966;Temple;TPL;Templ;tan pu er;tempeul;tenpuru;tmbl;tmpl tgzas;Темпл;تمبل;تمپل، تگزاس;ٹیمپل، ٹیکساس;テンプル;坦普爾;템플; +city::4736476;The Woodlands;Te-Vudlends;The Woodlands;Vudlands;Ze-Vudlends;dha wwdlandz;wu de lan shi;wwdlndz tgzas;Вудландс;Зе-Вудлендс;Те-Вудлендс;دی ووڈلینڈز، ٹیکساس;ذا وودلاندز;وودلندز، تگزاس;ザ・ウッドランズ;伍德蘭市; +city::4738214;Tyler;TYR;Tajler;Tyler;tai lei;taira;taylr;taylr tgzas;Тайлер;Тајлер;تايلر;تایلر، تگزاس;ٹائلر;ٹائلر، ٹیکساس;タイラー;泰勒; +city::4739157;Victoria;Guadalupe Victoria;VCT;Victoria;Viktorija;bigtolia;bikutoria;fyktwrya;wei duo li ya;wyktwrya tgzas;Виктория;Викторија;فيكتوريا;وکٹوریہ، ٹیکساس;ویکتوریا، تگزاس;ビクトリア;維多利亞;빅토리아; +city::4739526;Waco;ACT;Uehjko;Uejkou;Vako;Vejko;Waco;u~eko;veko;wakw;wei ke;weiko;wykw;wykw tgzas;wyyqw;Вако;Вейко;Вејко;Уейкоу;Уэйко;וייקו;واكو;ویکو;ویکو، تگزاس;ویکو، ٹیکساس;वेको;ウェーコ;韋科;韦科;웨이코; +city::4741752;Wichita Falls;SPS;Uichito Fols;Uichito-Fols;Vichita Fols;Vichita-Fols;Wichita Falls;u~ichitaforuzu;vicita pholsa;wei qi tuo fu er si;wichitopolseu;wychyta falz tgzas;wytshyta fwlz;Вичита Фолс;Вічита-Фолс;Уичито Фолс;Уичито-Фолс;ويتشيتا فولز;وچیٹا فالز;ویچیتا فالز، تگزاس;ویچیتا فالز، ٹیکساس;विचिटा फॉल्स;ウィチタフォールズ;威奇托福尔斯;위치토폴스; +city::4744091;Alexandria;Aleksandri;Aleksandrija;Alexandria;Alexandria City;Allexandria;Belhaven;Belle Haven;Bellhaven;Chincoteague Creek;Gincatic Creek;Guicatic Run;alaskndryt;alksandrya wyrjynya;allegsandeulia;arekusandoria;ya li shan de li ya;Александри;Александрия;Александрија;Александрія;Ալեքսանդրիա;אלכסנדריה;الإسكندرية;الکساندریا، ویرجینیا;الیگزینڈریا، ورجینیا;অ্যালেক্সান্ড্রিয়া;アレクサンドリア;亚历山德里亚;알렉산드리아; +city::4744709;Arlington;Arlington;Arlingtonas;a ling dun xian;arinton;Арлингтон;アーリントン;阿靈頓縣; +city::4751839;Centreville;Centerville;Centreville;New Gate;Newgate;Sentervil;sntrwyl wyrjynya;Сентервил;سنترویل، ویرجینیا; +city::4752186;Chesapeake;Cesapikas;Chesapeack;Chesapeake;Chesapijk;Chesapik;Norfolk County;South Norfolk;cespik;chesapiku;cheseopikeu;chsapyk wrjynya;chsapyk wyrjynya;qie sa pi ke;tshysabyk;zspyq;Česapikas;Чесапийк;Чесапик;Чесапік;צספיק;تشيسابيك;چساپیک، ورجینیا;چساپیک، ویرجینیا;ಚೆಸ್ಪೀಕ್;チェサピーク;切萨皮克;체서피크; +city::4755158;Dale City;Dale City;Dejl Siti;Дейл Сити;Дејл Сити; +city::4756955;East Hampton;; +city::4762894;Hampton;Elizabeth City;Gempton;Hampton;Hampton City;Hampton Town;Hamptonas;Kecoughtan;Khamptun;Khehmpton;Khempton;Kiccowtan;Kichotan;LFI;PHF;Southampton;haempeuteon;hambtwn;han pu dun;hanputon;hmptwn wyrjynya;Гемптон;Хамптън;Хемптон;Хэмптон;هامبتون;همپتون، ویرجینیا;ہیمپٹن، ورجینیا;ハンプトン;漢普頓;햄프턴; +city::4763231;Harrisonburg;Harisonburg;Harrisonburg;Harrisonburg City;Hub of the Valley;Kharisonburg;Rockingham Court House;Rocktown;ha li sen bao;harisonbagu;haryswnbwrgh;hryswnbrg wyrjynya;Харисонбург;هاريسونبورغ;هریسونبرگ، ویرجینیا;ہیریسنبرگ، ورجینیا;ハリソンバーグ;哈里森堡; +city::4769125;Leesburg;George Town;Georgetown;Leesburg;Leesburgh;Lizburg;Louisburg;lysbwrgh;lyzbrg wrjynya;Лизбург;ليسبورغ;لیزبرگ، ورجینیا; +city::4771075;Lynchburg;Campbell Court House;LYH;Linchberg;Linchburg;Lynchburg;Lynchs Ferry;Lynchs Warehouse;lin qi bao;linchibeogeu;lynchbrg wrjynya;lynchbrg wyrjynya;lynshbrgh;rinchibagu;Линчберг;Линчбург;Линчбърг;لينشبرغ;لینچبرگ، ورجینیا;لینچبرگ، ویرجینیا;リンチバーグ;林奇堡;린치버그; +city::4776024;Newport News;N'juport-N'jus;New Port Newce;New Porte Newce;Newport Ness;Newport News;Newport Newse;Newport's News;Newportes Newce;Newportes Newes;Newports News;PHF;Point Hope;Pointe Hope;Porte Newce;The New Port of the Newces;ZWW;Ньюпорт-Ньюс; +city::4776222;Norfolk;Gorad Norfalk;Norfok;Norfolk;Norfolk City;Norfolka;Norfolkas;Norfolko;ORF;narfwk wrjynya;nofoku;nopeog;nuo fu ke;nwrfwk wyrjynya;nwrfwlk;nwrpwq;Горад Норфалк;Норфок;Норфолк;נורפוק;نارفوک، ورجینیا;نورفولك;نورفوک، ویرجینیا;ნორფოლკი;ノーフォーク;諾福克;노퍽; +city::4779999;Portsmouth;Portsmouth;Portsmut;bwrtsmwth;pocheumeoseu;potsumasu;pu ci mao si;pwrtsmwt;pwrtsmwth wyrjynya;Портсмут;פורטסמות;بورتسموث;پورتسموث، ویرجینیا;پورٹسماؤت، ورجینیا;ポーツマス;朴次茅斯;포츠머스; +city::4780011;Portsmouth Heights;; +city::4781530;Reston;Reston;Thornton Station;Thornton's Station;Wiehle;resuton;rstwn wyrjynya;Рестон;رستون، ویرجینیا;レストン; +city::4781708;Richmond;Gorad Rychmand;Manchester;None Such;RIC;Richmond;Richmond City;Richmund;Ricmonda;Ricmondas;Ricmondia;Ricmonds;Ritsmont;Ričmonda;Ričmondas;Ričmonds;Shoccoe's;Shockoe;li shi man;lichimeondeu;lie zhi wen;rchmnڈ;ricamanda;ricmand;ricmant;ritchimondo;rychmwnd;rychmwnd wyrjynya;rytshmwnd;ryzmwnd;Ρίτσμοντ;Горад Рычманд;Ричмонд;Ричмънд;Ռիչմոնդ;ריצמונד;ريتشموند;رچمنڈ;رچمنڈ، ورجینیا;ریچموند;ریچموند، ویرجینیا;रिचमंड;रिचमन्ड;रिच्मन्ड्;ரிச்மண்ட்;リッチモンド;列治文;里士满;리치먼드; +city::4782167;Roanoke;Big Lick;Old Lick;ROA;Rawrenock;Rhoanoke;Roanok;Roanoke;Roanoke City;Rowrenoc;Rōwrenoc;Star City;Star City of the SouMagic City;The own;lo-eonokeu;luo a nuo ke;ro'anoka;roanoku;rwanwk;rwanwk wrjynya;rwnwk wyrjynya;Роанок;רואנוק;روانوك;روانوک، ورجینیا;رونوک، ویرجینیا;रोआनोक;ロアノーク;羅阿諾克;로어노크; +city::4786714;South Suffolk;; +city::4788158;Suffolk;Constances Warehouse;Contant's Wharf;Saffolk;Safok;Sleepy Hole;Suffolk;Suffolk City;sa fu ke;safk wyrjynya;safoku;seopeog;swfwlk;swfwlk wrjynya;Сафок;Саффолк;سافک، ویرجینیا;سوفولك;سوفولک، ورجینیا;サフォーク;薩福克;서퍽; +city::4791259;Virginia Beach;Gorad Virdzhynija-Bich;Litus Virginiae;NTU;Verdzhinija-Bich;Vijini Beach;Virciniya Bic;Virciniya Biç;Virdzhini-Bich;Virdzhinija Bijch;Virdzhinija-Bich;Virdzinija Bich;Virdzinija Bycas;Virdzinijabica;Virdžinija Byčas;Virdžīnijabīča;Virginia Beach;Virginia Beach City;Virginija-Bich;Virgìnia Beach;Virtzinia Bits;bajiniabichi;beojiniabichi;bharjiniya bica;frjynya bytsh;vharjiniya bica;virjinia-bichi;wei zhen ni ya hai tan;wexr ci neiy bich;wrjynya bych;wyrgynyh byz;wyrjynya bych wyrjynya;Βιρτζίνια Μπιτς;Верджиния-Бич;Виргиния-Бич;Вирджини-Бич;Вирджиния Бийч;Вирджиния-Бич;Вирџинија Бич;Вірджинія-Біч;Горад Вірджынія-Біч;Վիրջինիա Բիչ;וירגיניה ביץ;فرجينيا بيتش;ورجینیا بیچ;ویرجینیا بیچ، ویرجینیا;व्हर्जिनिया बीच;ভার্জিনিয়া বিচ;เวอร์จิเนียบีช;ვირჯინია-ბიჩი;バージニアビーチ;維珍尼亞海灘;버지니아비치; +city::4792867;West Lynchburg;; +city::4830796;Auburn;AUO;Obern;a'ubarna;abarna;abrn alabama;awbwrn;oban;obeon;ou ben;Оберн;آبرن، آلاباما;آبرن، الاباما;أوبورن;अउबर्न;अबर्न;オーバーン;歐本;오번; +city::4832294;Revere;North Chelsea;Rehvia;Revere;Revir;Riviur;li wei er;libieo;rfyr;ribia;rwy‌yr masachwst;Ревир;Ривиър;Рэвиа;راویر، میساچوسٹس;رفير;روی‌یر، ماساچوست;リビア;里维尔;리비어; +city::4832353;Danbury;Beantown;DXR;Danberi;Danbjuri;Danburi;Danbury;The Hatchery;daenbeli;dan bo li;danberi;danbry;danbry kntykt;denabari;dyanabari;Данбери;Данбері;Данбъри;Данбюри;دانبري;دانبری، کنتیکت;ڈینبری، کنیکٹیکٹ;डॅनबरी;ड्यानबरी;แดนเบอรี;ダンベリー;丹伯里;댄베리; +city::4833403;East Hartford;EHT;East Hartford;Ist Khartford;ayst hartfwrd;ista hartapharda;isutohatofodo;Ист Хартфорд;إيست هارتفورد;ایسٹ ہارٹفورڈ، کنیکٹیکٹ;इस्ट हार्टफर्ड;イーストハートフォード; +city::4833505;East Norwalk;; +city::4834157;Fairfield;Fairfield;Fajrfild;Fehrfild;Fejrfild;Feurfijld;Feurfild;Uncoa;feafirudo;fei er fei er de;fyrfyld;fyrfyld kntykt;peeopildeu;Файрфилд;Фейрфілд;Феърфийлд;Феърфилд;Фэрфилд;فيرفيلد;فیئرفیلڈ، کونیکٹیکٹ;فیرفیلد، کنتیکت;フェアフィールド;費爾菲爾德;페어필드; +city::4835654;Hamden;Khamdehn;hamdn;hamuden;Хамдэн;هامدن;ہیمڈن، کنیکٹیکٹ;ハムデン; +city::4835797;Hartford;Chartfornt;Gartford;Gorad Khartfard;HFD;Halakepoka;Hartford;Hartforda;Hartfordas;Hartfordia;Hartfords;Hārtforda;Kharford;Khartford;Newtown;Siti of Khartford;Suckiag;ha te fu;hartafard;hartaforda;hartapharda;hartaphorda;hartfwrd;hartfwrd kntykt;hartpart;hateupeodeu;hatofodo;hrtpwrd;Χάρτφορντ;Гартфорд;Горад Хартфард;Сити оф Хартфорд;Хартфорд;Харфорд;Ҳартфорд;Հարթֆորդ;הרטפורד;هارتفورد;هارتفورد، کنتیکت;ہارٹفورڈ;ہارٹفورڈ، کنیکٹیکٹ;हार्टफर्ड;हार्टफ़र्ड्;हार्टफ़ोर्ड;हार्टफोर्ड;हार्तफर्द;ஹார்ட்பர்ட்;ハートフォード;哈特福;하트퍼드; +city::4838524;Meriden;Meridehn;Meriden;Silver City;mei li deng;meriden;meridena;mrydn kntykt;myrydyan;Мериден;Меридэн;Меріден;مریدن، کنتیکت;ميريديان;میریڈن، کنیکٹیکٹ;मेरिडेन;メリデン;梅里登; +city::4838652;Milford;Four Corners;Milford;Milfordas;Millfort;Wepowaug;mi er fu de;milapharda;milaphorda;milpeodeu;mirufodo;myldfwrd kntykt;mylfwrd;Милфорд;Мілфорд;ميلفورد;میلدفورد، کنتیکت;میلفورڈ، کنیکٹیکٹ;मिलफर्ड;मिलफोर्ड;ミルフォード;米尔福德;밀퍼드; +city::4839292;New Britain;Hardware City;N'ju Britan;N'ju-Briten;New Britain;Nju Briten;Quebec;Quebek;n'yu britana;n'yu britena;nyubeuliteun;nyuburiten;nyw brytn;nyw brytyn kntykt;xin bu lie dian;Њу Бритен;Нью Британ;Нью-Бритен;Нью-Брітен;نيو بريتن;نیو بریتین، کنتیکت;نیو بریٹن، کنیکٹیکٹ;न्यु ब्रिटेन;न्यू ब्रिटन;ニューブリテン;新不列颠;뉴브리튼; +city::4839366;New Haven;Gorad N'ju-Khehjven;HVN;N'ju Khehven;N'ju-Gejven;N'ju-Khejven;New Haven;Nju Khejven;Nju Khejvun;Novus Portus;Nuheivena;Queenapick;Quillipiack;Quinnepyooghq;Quinnipiac;Quinnypiock;Quinopiocke;Rodeberg;Rodenburg;n'yu hevana;n'yu hyabhena;niu ha fen shi;niu hei wen;niu-heiveni;niw he wen;nyuheibeun;nyuheibun;nyw hyfn;nyw hyybn;nywhywn kntykt;Ņūheivena;Њу Хејвен;Горад Нью-Хэйвен;Нью Хэвен;Нью-Гейвен;Нью-Хейвен;Ню Хейвън;ניו הייבן;نيو هيفن;نیو ہیون، کنیکٹیکٹ;نیوهیون، کنتیکت;न्यु ह्याभेन;न्यू हेवन;นิวเฮเวน;ნიუ-ჰეივენი;ニューヘイブン;纽哈芬市;纽黑文;뉴헤이븐; +city::4839745;North Stamford;; +city::4839822;Norwalk;Chichester;Naramake;Noruolk;Norvalk;Norvok;Norvolk;Norvolkas;Norwaake;Norwalk;ORQ;The Bridge;The Great Bridge;naravaka;noravoka;nou~oku;nowokeu;nuo wo ke;nwrwak kntykt;nwrwwlk;Норвалк;Норвок;Норволк;Норуолк;نارواک، کنیکٹیکٹ;نورواک، کنتیکت;نوروولك;नरवाक;नॉरवॉक;ノーウォーク;诺沃克;노워크; +city::4843564;Stamford;Rippowams;Stamford;Stamfordas;Stehmford;Stemford;ZTF;astmfwrd kntykt;seutaempeodeu;si tan fu;stamfwrd;stemapharda;stmpwrd;styamapharda;sutanfodo;Стамфорд;Стемфорд;Стэмфорд;סטמפורד;استمفورد، کنتیکت;ستامفورد;سٹیمفورڈ، کنیکٹیکٹ;स्टॅमफर्ड;स्ट्यामफर्ड;สแตมเฟิร์ด;スタンフォード;斯坦福;스탬퍼드; +city::4843811;Stratford;Cupheag;Stratford;Strehtford;astratfrd kntykt;seuteulaespeodeu;stryatapharda;sutoratofodo;Стратфорд;Стрэтфорд;استراتفرد، کنتیکت;سٹریٹفورڈ، کنیکٹیکٹ;स्ट्र्याटफर्ड;ストラトフォード;스트랫퍼드; +city::4845193;Waterbury;Forest City;The Brass City;Uot"rb"ri;Uoterberi;Vaterbjuri;Voterberi;Waterbury;u~otabari;u~otaberi;vatarabari;votarabari;watrbry kntykt;watrbwry;wo te bo li;woteobeli;wwtrbry;Ватербюри;Вотербери;Вотербері;Уотербери;Уотърбъри;ווטרברי;واتربری، کنتیکت;واتربوري;واٹربری، کنیکٹیکٹ;वाटरबरी;वॉटरबरी;ウォーターバリー;ウォーターベリー;沃特伯里;워터베리; +city::4845411;West Hartford;Vehst Khartford;Vest Kharford;Vest Khartford;Vest-Gartford;West Division;West Hartford;Zapadnyj Khartford;uesutohatofodo;vesta hartapharda;Вест Хартфорд;Вест Харфорд;Вест-Гартфорд;Вэст Хартфорд;Западный Хартфорд;וועסט הארטפארד;ویسٹ ہارٹفورڈ، کنیکٹیکٹ;वेस्ट हार्टफर्ड;ウエストハートフォード; +city::4845419;West Haven;Uehst-Khejven;Vehst Khehjvn;Vest Khehven;Vest Khejven;Vest-Gejven;u~esutoheibun;vesta hevana;vesta hyabhena;wst hywn kntykt;wyst hyfn;xi hei wen;Вест Хејвен;Вест Хэвен;Вест-Гейвен;Вэст Хэйвн;Уэст-Хейвен;وست هیون، کنتیکت;ويست هيفن;ویسٹ ہیون، کنیکٹیکٹ;वेस्ट हेवन;वेस्ट ह्याभेन;ウェストヘイブン;西黑文; +city::4846834;Ames;AMW;Ames;Ehjmes;Ehjmsa;Ejms;ai mu si;amesi;amys;aymz aywwa;aymz ayywwa;eimseu;eimuzu;xem s;Ејмс;Эймес;Эймса;أميس;ایمز، آئیووا;ایمز، آیووا;เอมส์;ამესი;エイムズ;艾姆斯;에임스; +city::4846960;Ankeny;Ankehni;Ankeni;Ankenny;Ankeny;ankny aywwa;ankyny;ankyny ayywwa;Анкени;Анкэни;أنكيني;انکنی، آیووا;انکینی، آئیووا;ანკენი; +city::4850751;Cedar Rapids;CID;Sehdar Rapids;Sidar Rapids;Sidar-Rapids;Sidur Rapids;sdar rapydz aywwa;shidarapizzu;sidara repidsa;sideolaepijeu;sydar rabydz;sydr rpyds;xi da la pi zi;Сидар Рапидс;Сидар-Рапидс;Сидър Рапидс;Сэдар Рапидс;Сідар-Рапідс;Սիդար Ռեփիդս;סידר רפידס;سدار راپیدز، آیووا;سيدار رابيدز;سڈار ریپڈس، آئیووا;سیڈار ریپڈز;सीडार रॅपिड्स;シーダーラピッズ;錫達拉皮茲;시더래피즈; +city::4852832;Council Bluffs;CBF;Council Bluffs;Kanesville;Kaunsil Bafs;Kaunsil-Blafs;Konsil-Blafs;Kounsl Blaffs;Miller's Hollow;ka'unsila blaphsa;kang se er bu la fu si;kaunshiruburafusu;kwnsl blfs ayywwa;kwnsyl blwfs;kwnsyl blwfs aywwa;Каунсил Бафс;Каунсил-Блафс;Консіл-Блафс;Коунсл Блаффс;كونسيل بلوفس;کونسل بلفس، آئیووا;کونسیل بلوفس، آیووا;काउन्सिल ब्लफ्स;カウンシルブラフス;康瑟尔布拉夫斯; +city::4853423;Davenport;DVN;Davehnport;Davenport;Dehvenport;da wen bo te;dabenpoto;daebeunpoteu;dafnbwrt;dbnpwrt;devhenaporta;dwnpwrt aywwa;Давенпорт;Давэнпорт;Дэвенпорт;דבנפורט;دافنبورت;دونپورت، آیووا;ڈیونپورٹ، آئیووا;डॅव्हेनपोर्ट;แดเวนพอร์ต;ダベンポート;達文波特;대븐포트; +city::4853828;Des Moines;DSM;De Moinas;De Moins;De Mojn;De Moyn;De-Mojn;Dehs Mojns;Demoina;Des Moines;Gorad Deh-Mojn;Monachopolis;Nte Moin;de mayne;de mei yin;de mo'ina;de-moini;demoin;des mvane;dh mwyn;di mo'ina;di mxyn;dimoin;dmwyn aywwa;dy mwyn;dy mwyn ayywwa;ti moyin;Ντε Μόιν;Горад Дэ-Мойн;Де Мойн;Де Мојн;Де-Мойн;Дэс Мойнс;Դե Մոյն;דה מוין;دموین، آیووا;دي موين;دی موین، آئیووا;ڈس موئنس;डे माय्ने;डेस् म्वाने;दि मोइन;दे मॉईन;டி மொயின்;ดิมอยน์;დე-მოინი;デモイン;德梅因;디모인; +city::4854529;Dubuque;DBQ;Dub'juk;Дубьюк; +city::4862034;Iowa City;Ajova Siti;Ajova-Siti;IOW;Iowa City;Lova Siti;a'i'ova nagara;ai ao wa cheng;aiowashiti;aiowasiti;ayova siti;aywa syty;aywwa syty aywwa;Айова Сити;Айова-Сити;Айова-Сіті;Ајова Сити;Лова Сити;Այովա Սիթի;איווה סיטי;آئیووا سٹی، آئیووا;آيوا سيتي;آیووا سیتی، آیووا;आइओवा नगर;आयोवा सिटी;アイオワシティ;艾奥瓦城;아이오와시티; +city::4876523;Sioux City;Kota Sioux;SUX;Siouks Siti;Su Siti;Su-Siti;su cheng;su siti;sushiti;susiti;sw syty;sw syty aywwa;sywks syty;Сиоукс Сити;Су Сити;Су-Сити;Су-Сіті;סו סיטי;سو سیتی، آیووا;سيوكس سيتي;سیو سٹی، آئیووا;सू सिटी;スーシティ;蘇城;수시티; +city::4880889;Waterloo;ALO;Uatehrlu;Vaterlo;Voterlu;Waterloo;u~otaru;votarlu;watrlw;watrlw aywwa;woteollu;wwtrlw;Ватерло;Вотерлу;Уатэрлу;ווטרלו;واترلو;واترلو، آیووا;واٹرلو، آئیووا;वॉटर्लू;ウォータールー;워털루; +city::4881346;West Des Moines;Valley Junction;Vehst Dehs Mojnehs;Vest De Mojn;West Des Moines;wst ds mwyns aywwa;wyst dy mwynz;Вест Де Мојн;Вэст Дэс Мойнэс;وست دس موینس، آیووا;ويست دي موينز;ویسٹ دی موین، آئیووا; +city::4883555;Arlington Heights;Arlington Heights;Arlington Khajts;Arlington-Khajts;Dunton;JLH;arintonhaitsu;arlingatana ha'itsa;arlynghtwn hayts;Арлингтон Хајтс;Арлингтон-Хайтс;آرلنگٹن ہائٹس، الینوائے;أرلينغتون هايتس;आर्लिङ्गटन हाइट्स;アーリントンハイツ; +city::4883817;Aurora;AUZ;Aurora;Avrora;Аврора; +city::4884597;Berwyn;Beruin;Bervin;barvina;beowin;brwyn;brwyn aylynwy;Бервин;Бервін;Беруин;بروين;بروین، الینوائے;بروین، ایلینوی;बर्विन;버윈; +city::4885164;Bloomington;BMI;Blooming Grove;Bloomington;Blumington;Blumingtona;Blumingtun;Blūmingtona;Keg Grove;beullumingteon;blumingatana;blumingtana;blumintana;blwmnjtwn;blwmyngtwn;bu lu ming dun;buruminton;Блумингтон;Блумингтън;Блумінгтон;بلومنجتون;بلومنگٹن;بلومینگتون;ब्लूमिंगटन;ब्लूमिंग्टन;ব্লুমিংটন;ブルーミントン;布卢明顿;블루밍턴; +city::4885265;Bolingbrook;Bolingbrook;Bolingbruk;bolingabruka;bwlygh brwk;Болингбрук;بولنگبروک، الینوائے;بوليغ بروك;बोलिङ्गब्रूक; +city::4887158;Champaign;CMI;Champaign;Shampejn;West Urbana;cyampena;shang pei en;shanpen;shmpyn aylynwy;smpyyn;syaempein;syampe'ina;tshambyghn;Шампейн;Шампејн;שמפיין;تشامبيغن;شمپین، ایلینوی;شیمپین، الینوائے;च्याम्पेन;শ্যাম্পেইন;シャンペーン;尚佩恩;섐페인; +city::4887398;Chicago;CHI;Cekaga;Chi-ka-ko;Chi-kâ-kô;Chicago;Chicagu;Chikago;Cikaga;Cikago;Cikaqo;E-Chicago;Gorad Chykaga;Kikako;Shikago;Sicagum;Sikago;The Windy City;Tsikago;Windy City;chikhako;cikago;cikako;shikago;shkagw;shykaghw;shykagw;shykajw;shyqgw;sikago;sikkagea;syqgw;zhi jia ge;Çikago;Çikaqo;Ĉikago;Čikaga;Čikago;Čikāga;Čėkaga;Şikago;Σικάγο;Горад Чыкага;Чикаго;Чикаґо;Չիկագո;שיקאגא;שיקגו;شيكاجو;شيكاغو;شکاگو;شیکاگو;شیکاگۆ;ܫܝܩܓܘ;शिकागो;শিকাগো;ਸ਼ਿਕਾਗੋ;சிகாகோ;చికాగో;ಶಿಕಾಗೊ;ഷിക്കാഗോ;ชิคาโก;ရှီကာဂိုမြို့;ჩიკაგო;ሺካጎ;ᓰᖄᑯ;Ṣìkágò;シカゴ;芝加哥;시카고;𐍃𐌾𐌹𐌺𐌰𐌲𐍉; +city::4888015;Cicero;Cicero;Ciceron;Cícero;Hawthorne;Siseras;Sisero;shisero;siseolo;sisero;sysyrw;Сисеро;Сісеро;Цицерон;سيسيرو;سیسیرو، الینوائے;सिसेरो;シセロ;시서로; +city::4889772;Des Plaines;Des Plaines;Des Pleinsas;Des Plejns;Des-Plejns;Desplaines Station;Maine;Rand;des ple'insa;deseupeulleinseu;dys blyns;Дес Плејнс;Дес-Плейнс;دس‌پلینز، ایلینوی;ديس بلينس;دےپلینے، الینوائے;डेस् प्लेइन्स;데스플레인스; +city::4890864;Elgin;Ehldzhin;Eldzhin;Eldzin;Elgin;ai er jin;algn aylynwy;aljyn;aylgn;elgin;elgina;erujin;Елджін;Елџин;Элджин;إلجين;الگن، الینوائے;الگن، ایلینوی;ایلگن;एल्गिन;エルジン;埃爾金;엘긴; +city::4891382;Evanston;Ehvanston;Evanston;Evanstonas;Evanstun;Gorad Ehvanstan;Grosse Pointe;Ridgeville;ai wen si dun;awanstwn aylynwy;ayfanstwn;ebansuton;ebeonseuteon;ibhansatana;Горад Эванстан;Еванстон;Еванстън;Эванстон;אוונסטון;إيفانستون;اوانستون، ایلینوی;اوانسٹن، الینوائے;इभान्सटन;എവൻസ്റ്റൺ;エバンストン;埃文斯顿;에번스턴; +city::4896075;Hoffman Estates;; +city::4898015;Joliet;JOT;Joliet;Juliet; +city::4903024;Mount Prospect;Maunt Prospekt;ma'unta prospekta;mwnt brwsbkt;Маунт Проспект;ماؤنٹ پراسپیکٹ، الینوائے;مونت بروسبكت;माउन्ट प्रोस्पेक्ट; +city::4903279;Naperville;Fort Naper;Naper Settlement;Naperville;Napervillium;Napiersville;Napierville;Nejpervil;Nejpervill;Nepervill;nabrfyl;nei po wei er;neipabiru;neipeobil;neparabhila;Нейпервилл;Непервілл;Нејпервил;نابرفيل;ناپرس‌ویل، ایلینوی;نیپرویل، الینوائے;नेपरभिल;ネイパービル;內珀維爾;네이퍼빌; +city::4903780;Normal;Normal;Normal'naja;North Bloomington;nuo mo er;nwrmal alynwy;Нормал;Нормальная;نورمال، إلينوي;诺默尔; +city::4903976;North Peoria;; +city::4904365;Oak Lawn;Ouk Lon;awk lawn;oka lana;Оук Лон;أوك لاون;اوک لان، الینوائے;ओक लन; +city::4904381;Oak Park;Harlem;Noyesville;Oak Park;Oak Ridge;Ouk-Park;Оук-Парк; +city::4904937;Orland Park;Orland;Orland Park;awrland bark;Орланд Парк;اورلاند بارك;اورلینڈ پارک، الینوائے; +city::4905211;Palatine;Palatajn;Palatin;Palatinas;Palatine;blatyn;Палатајн;Палатин;بلاتين;پالاتائن، الینوائے; +city::4905687;Peoria;Au Pay;Au Pe;Le Pe;Opq;PIA;Peoria;Peorija;Pimitoui;Piorias;Piorija;bywrya;pi ao li ya;piolia;pioria;piyoriya;pywrya;pywrya aylynwy;Пеория;Пиорија;Піорія;פאוריה;بيوريا;پئوریا، ایلینوی;پیوریا;پیوریا، الینوائے;पियोरिया;ピオリア;皮奥里亚;피오리아; +city::4907959;Rockford;Gorad Rokfard;RFD;RMC;Rockford;Rokford;Rokfordas;The Forest City;ZRK;logpeodeu;luo ke fu de;rakaphorda;rokkufodo;rwkfwrd;rwqpwrd;Горад Рокфард;Рокфорд;רוקפורד;راک فورڈ، الینوائے;راک‌فورد، ایلینوی;روكفورد;روکفورڈ;রকফোর্ড;ロックフォード;罗克福德;록퍼드; +city::4910713;Schaumburg;JMH;Schaumberg;Schaumburg;Schaumburg Center;Shaumburg;Shomberg;shambwrgh;shanbagu;shao mu bao;syambeogeu;Шаумбург;Шомберг;شامبرگ، الینوائے;شامبورغ;シャンバーグ;绍姆堡;샴버그; +city::4911600;Skokie;Niles Center;Niles Centre;Skoki;Skokie;seukoki;skwky;sqwqy;Скоки;Скокі;סקוקי;سكوكي;سکوکی، الینوائے;스코키; +city::4913723;Tinley Park;Tinley Park;Tinleypark;Tinli Park;tynly bark;Тинли Парк;تينلي بارك;ٹنلی پارک، الینوائے; +city::4915734;Waukegan;Little Fort;UGN;Uokigan;Vokigan;Waukegan;u~okigan;waywkgan aylynwy;wkghn;wo ji gen;wokigeon;wwqygn;wx khi kan;Вокиган;Вокіган;Уокиган;ווקיגן;وائوکگان، ایلینوی;واکیگن، الینوائے;وكغن;วอคีกัน;ウォキーガン;沃基根;워키건; +city::4916288;Wheaton;Uiton;Viton;hui dun;hwiteon;wyatwn aylynwy;wytwn;Витон;Уитон;وئاتون، ایلینوی;ويتون;ویٹن، الینوائے;惠顿;휘턴; +city::4917592;Anderson;AID;Anderson;Andersonton;Andersontown;Wa-piminskink;aendeoseun;andrswn ayndyana;mdynt andrswn;Андерсон;اندرسون، ایندیانا;اینڈرسن، انڈیانا;مدينة اندرسون;앤더슨; +city::4919987;Elkhart;EKI;Ehlkkhart;Elkkhart;ai er ke ha te;alkart ayndyana;alkhart;Елкхарт;Элкхарт;إلخارت;الکارت، انڈیانا;الکارت، ایندیانا;埃尔克哈特; +city::4920423;Fort Wayne;Arx Vainensis;FWA;Fort Gouein;Fort Miami;Fort Uejn;Fort Veinas;Fort Vejn;Fort Veyn;Fort Wayne;Fort-Uehjn;Fort-Vejn;Fortveina;Frenchtown;Kekionga;Kiskakon;Miami Town;Omee Town;Post Miami;Twightwee Village;fotou~ein;fwrt wayn;fwrt‌wyn ayndyana;phorta vena;poteuwein;pwrt wyyn;wei en bao;Φορτ Γουέιν;Форт Вејн;Форт Уейн;Форт-Вейн;Форт-Уэйн;פורט ויין;فورت واين;فورت‌وین، ایندیانا;فورٹ وین، انڈیانا;फोर्ट वेन;フォートウェイン;韋恩堡;포트웨인; +city::4920607;Gary;GYY;Gary;Gehri;Geri;Gorad Gehry;Qari;gairi;geli;geri;ghary;gry ayndyana;jia li;Гери;Гері;Горад Гэры;Гэри;Գերի;غاري;گری، انڈیانا;گری، ایندیانا;गैरी;แกรี;გერი;ゲーリー;加里;게리; +city::4921100;Hammond;Hammond;Hohman;Khammond;Khamond;State Line;ha meng de;haemeondeu;hamondo;hamwnd;hmwnd ayndyana;Хаммонд;Хамонд;هاموند;هموند، ایندیانا;ہیمونڈ، انڈیانا;ハモンド;哈蒙德;해먼드; +city::4922388;Kokomo;OKK;ke ke mo;kokomo;kwkwmw;kwkwmw ayndyana;كوكومو;کوکومو، انڈیانا;کوکومو، ایندیانا;コーコモー;科科莫; +city::4922462;Lafayette;LAF;La Fayette;LaFayette;Lafajet;Lafayette;Lafejet;la fei te;lafayyt;lafyt ayndyana;lapies;rafaietto;Лафайет;Лафејет;لا فائت، انڈیانا;لافاييت;لافیت، ایندیانا;ラファイエット;拉斐特;라피엣; +city::4924006;Muncie;MIE;Mansi;Muncey Town;Muncie;Munseetown;Munsey;man si;manshi;mwnsy;mwnsy ayndyana;Манси;منسی، انڈیانا;مونسي;مونسی، ایندیانا;มันซี;མཱུན་སི།;マンシー; +city::4924198;Noblesville;Noblsvil;Nobulsvil;noburuzubiru;Ноблсвил;Нобълсвил;ノーブルズビル; +city::4926563;South Bend;Big Saint Joseph Station;Flexuvium Australe;Gorad Saut-Bend;SBN;Saint Joseph's;Saut Bend;Saut Bendas;Saut-Bend;South Bend;Southold;The Bend;nan ben de;sauseubendeu;sausubendo;sawth bnd;sawth bnd ayndyana;Горад Саўт-Бенд;Саут Бенд;Саут-Бенд;סאות בנד;ساؤتھ بینڈ، انڈیانا;ساوث بند;ساوث بند، ایندیانا;サウスベンド;南本德;사우스벤드; +city::4930956;Boston;BOS;Baston;Boston;Bostona;Bostonas;Bostone;Bostonia;Bostono;Bostons;Bostun;Bostún;Gorad Bostan;Mushauwomuk;Old Boston;Po-su-tun;Pokekona;Pô-sṳ-tun;Shawmut;Shawmutt;Shawnnut;Totant;Tramount;Tremont;Trimountain;Trimountaine;Vostoni;Wahstoronon:ke;Wahstoronòn:ke;Wastok;bastan;bastana;bausatana;beasrraൺ;bo shi dun;boseuteon;bostan;bostana;bostʼoni;bosuton;bwstn;bwstwn;bxstan;pastan;Βοστωνη;Βοστώνη;Бостон;Бостън;Горад Бостан;Բոստոն;באסטאן;בוסטון;بوستون;بوسطن;بوسٹن;بۆستن;ܒܘܣܛܘܢ;बस्तन;बास्टन्;बॉस्टन;बोस्टन;বস্টন;ਬੌਸਟਨ;பாஸ்டன்;బోస్టన్;ಬಾಸ್ಟನ್;ബോസ്റ്റൺ;บอสตัน;བོ་སེ་ཊོན།;ဘော့စတွန်မြို့;ბოსტონი;ቦስቶን;ボストン;波士頓;波士顿;보스턴; +city::4931429;Brockton;Brockton;Brokton;Broktun;North Bridgewater;braktwn masachwst;brwktwn;bu luo ke dun;burokkuton;Броктон;Броктън;براکتون، ماساچوست;بروكتون;بروکٹن، میساچوسٹس;ブロックトン;布罗克顿; +city::4931482;Brookline;Brookline;Brouklain;Bruklajn;Bruklin;beulukeullain;brwklayn masachwst;brwqlyyn;bu lu ke lai en;burukkurain;Μπρούκλαϊν;Бруклайн;Бруклајн;Бруклин;ברוקליין;بروکلاین، ماساچوست;ブルックライン;布鲁克莱恩;브루클라인; +city::4931972;Cambridge;Cambridge;Cambridge i Massachusetts;Cantabrigia;Gorad Kembrydzh;Kehmbridzh;Keimbridza;Keimbridža;Keimpritz;Kejmbridzh;Kembridz;Kembridzas;Kembridzh;Kembridžas;Kembrigo;Kembrizh;Kembriĝo;Mishawum;New Town;New Towne;Newtown;Newtowne;Old Cambridge;jian qiao;kambrydj;keimbeuliji;kembrija;kempirij;kenburijji;khem bridc;kmbryj masachwst;qyymbrydg;Κέιμπριτζ;Горад Кембрыдж;Кеймбридж;Кембридж;Кембриж;Кембриџ;Кембриҷ;Кэмбридж;Քեմբրիջ;קיימברידג;קעמברידזש;كامبريدج;کمبریج، ماساچوست;کیمبرج، میساچوسٹس;केंब्रिज;கேம்பிரிஜ்;เคมบริดจ์;ケンブリッジ;剑桥;케임브리지; +city::4933002;Chicopee;CEF;Chicopee;Chikopi;chikopi;qi ke pi;shykwby;shykwpy masachwst;Чикопи;Чікопі;شيكوبي;شیکوپی، ماساچوست;چیکوپی، میساچوسٹس;チコピー;奇科皮; +city::4936159;Fall River;Border City Village;Fall River;Fall River Village;Fol Riveh;Fol River;Foll-River;Pocasset;The Border City;fal rywr masachwst;foruriba;fu er li fu;fwl ryfr;Фол Ривер;Фол Ривэ;Фолл-Ривер;Фолл-Рівер;فال ریور، ماساچوست;فال ریور، میساچوسیٹس;فول ريفر;フォールリバー;福尔里弗; +city::4937230;Framingham;Framingham;Framingkham;Frejmingkham;South Framingham;framyngham masachwst;framynghham;fureiminguhamu;peuleiminghaem;Фрамингхам;Фрејмингхам;فرامينغهام;فرامینگهام، ماساچوست;フレイミングハム;프레이밍햄; +city::4937232;Framingham Center;Framingham Center;Framingham Centre; +city::4939085;Haverhill;Haverhill;Khaverkhill;Pentucket;Pentuckett;Хаверхилл; +city::4941720;Lawrence;LWM;Lawrence;Lorehns;Lorens;Lourens;lao lun si;larns masachwst;lolenseu;lwrans;lwrns;rorensu;Лоренс;Лорэнс;Лоуренс;לורנס;لارنس، ماساچوست;لارنس، میساچوسٹس;لورانس;ローレンス;劳伦斯;로렌스; +city::4942618;Lowell;Lauehll;Loouel;Louehll;Louel;Louell;Louul;Lowell;lovela;lowel;luo e er;lwwl;lwwl masachwst;lwwyl;rou~eru;Λόουελ;Лауэлл;Лоуел;Лоуелл;Лоуъл;Лоуэлл;לוול;لوول، ماساچوست;لوويل;لوویل، میساچوسٹس;लॉवेल;ក្រុងឡូវែល រដ្ឋម៉ាស្សាឈូស៊ែត;ローウェル;洛厄尔;로웰; +city::4942807;Lynn;Lin;Linn;Lyn;Lynn;Saugus;lin;lin en;lyn;lynn masachwst;rin;Лин;Линн;Лінн;لين;لین، میساچوسٹس;لینن، ماساچوست;リン;林恩;린; +city::4942939;Malden;Maldehn;Maldeno;Molden;maldn;mldn masachwst;moldeun;moruden;Малдэн;Молден;مالدن;مالڈن، میساچوسٹس;ملدن، ماساچوست;モールデン;몰든; +city::4943629;Medford;Medford;Mehdford;Mistic;Mystic;mdfwrd masachwst;medeupeodeu;medofodo;mydfwrd;Медфорд;Мэдфорд;مدفورد، ماساچوست;ميدفورد;میڈفورڈ، میساچوسٹس;メドフォード;메드퍼드; +city::4945121;New Bedford;Achushena;Acushnet Village;EWB;N'ju Behdford;N'ju-Bedford;New Bedford;Nju Bedford;bdfwrd jdyd masachwst;niwbedf xrd;nyubeddofodo;nyubedeupeodeu;nyw bdfwrd;xin bei de fu de;Њу Бедфорд;Нью Бэдфорд;Нью-Бедфорд;بدفورد جدید، ماساچوست;نيو بدفورد;نیو بیڈفورڈ، میساچوسٹس;นิวเบดฟอร์ด;ニューベッドフォード;新贝德福德;뉴베드퍼드; +city::4945283;Newton;Cambridge;N'juton;New Towne;Newton;Njuton;Njutun;Nonantum;niu dun;nyuteon;nyuton;nywtn;nywtwn masachwst;Њутон;Ньютон;Нютън;نيوتن;نیوتون، ماساچوست;نیوٹن، میساچوسٹس;ニュートン;牛顿;뉴턴; +city::4945588;North Chicopee;; +city::4946863;Peabody;Peabody;Pibodi;South Danvers;bybwdy;pibodi;pybwy masachwst;Пибоди;بيبودي;پیباڈی، میساچوسٹس;پیبوی، ماساچوست;ピーボディ; +city::4948247;Quincy;Braintree;Brantree;City Presidents;Kuajnsi;Kuinsi;Kvinsi;MQI;Quincy;kuinshi;kun shi;kun xi;kwinsi;kwynsy;kwynsy masachwst;Квинси;Квінсі;Куайнси;Куинси;كوينسي;کوئنسی، ماساچوست;کوئنسی، میساچوسٹس;クインシー;昆市;昆西;퀸시; +city::4951257;Somerville;Samervil;Somehrvill;Somervill;Somerville;Sumurvil;sa mo wei er;samabiru;samrwyl masachwst;Самервил;Сомервилл;Сомэрвилл;Съмървил;سامرویل، ماساچوست;サマービル;萨默维尔; +city::4951473;South Peabody;; +city::4951788;Springfield;Agawam;Agawome;Campifons;Nayasset;SFY;Springfield;Springfield City;Springfijld;Springfild;Springfilda;Springfildas;Springfīlda;Spryngfild;aspryngfyld masachwst;sbrynghfyld;seupeulingpildeu;si pu lin fei er de;spryngpyld;supuringufirudo;Спрингфийлд;Спрингфилд;Спрингфілд;Спрынгфілд;ספרינגפילד;اسپرینگفیلد، ماساچوست;سبرينغفيلد;سپرنگفیلڈ، میساچوسٹس;スプリングフィールド;斯普林菲尔德;스프링필드; +city::4952629;Taunton;Taunton;Taunton Green;Tonten;Tonton;Tontun;tang dun;tantwn masachwst;tonteon;tonton;twntwn;Тонтен;Тонтон;Тонтън;تانتون، ماساچوست;تونتون;ٹاؤنٹن، میساچوسٹس;トーントン;汤顿;톤턴; +city::4954380;Waltham;Uoltem;Voltam;Voltgem;WLM;u~orusamu;waltham;waltham masachwst;wo er se mu;wwltm;Волтам;Волтгем;Уолтем;וולתם;والتهام، ماساچوست;والتھم، میساچوسٹس;والثام;ウォルサム;沃尔瑟姆; +city::4955336;Weymouth;Uejmut;Vehjmaus;Vejmut;Wessagusset;Wessagussett;Weymouth;Weymouth Centre;u~eimasu;weimeoseu;wymawth;wymwt masachwst;Вејмут;Вэймаус;Уеймът;ويماوث;ویماوتھ، میساچوسٹس;ویموت، ماساچوست;ウェイマス;웨이머스; +city::4956184;Worcester;Gorad Vustehr;Grafton Gore;ORH;Ouorster;Pakachoog;Uorsestehr;Ustur;Vigornia;Vuster;Vusteris;Worcester;Worcester i USA;useuteo;usuta;wrsstr;wu si te;wwstr;wwstr masachwst;Ουόρστερ;Вустер;Горад Вустэр;Уорсестэр;Устър;ווסטר;ورسستر;ووستر، ماساچوست;ووسٹر، میساچوسٹس;ウースター;伍斯特;우스터; +city::4975802;Portland;Casco;Elbow;Falmouth;Falmouth Neck;Gorad Portlend;Indigreat;Machegony;Machigonne;PWM;Portland;Portland i Maine;Portlandia;Portlant;Portlend;Portlenda;Quack;The Neck;Uh-kos-is-co;bo te lan;bwrtland;portalanda;portalyanda;poteullaendeu;potorando;pwrtlnd;pwrtlnd myn;Πόρτλαντ;Горад Портленд;Портланд;Портленд;Փորթլենդ;פורטלנד;بورتلاند;ورٹلینڈ، مینے;پورتلند، مین;पोर्टलंड;পোর্টল্যান্ড;ポートランド;波特蘭;포틀랜드; +city::4984247;Ann Arbor;A2;ARB;An Arboras;An Arbur;Ann Arbor;Ann Armpor;Ann-Arbor;Arbaro de Ana;Ehnn-Arbor;En Arbor;Enarbora;Enn Arbor;Enn-Arbor;Enārbora;aen-abeo;aena arbara;aina arbara;an arbr;an arbr myshygan;an nuo bao;anaba;ayn arbr mshy gn;en arpar;ena arbar;Ανν Άρμπορ;Ан Арбър;Анн-Арбор;Ен Арбор;Енн-Арбор;Энн-Арбор;אן ארבור;آن آربر;ان آربر، میشیگان;این آربر، مشی گن;अॅन आर्बर;ऍन आर्बर्;ऐन आर्बर;ஏன் ஆர்பர்;アナーバー;安娜堡;앤아버; +city::4985153;Battle Creek;BTL;Batl Krik;Batul Krijk;Betl Krik;ba te er ke li ke;baeteulkeulikeu;batl kryk;batorukuriku;Батл Крик;Батъл Крийк;Бетл Крик;باتل كريك;بتل‌کریک، میشیگان;بیٹل کریک، مشی گن;バトルクリーク;巴特爾克里克;배틀크리크; +city::4987990;Canton;; +city::4989133;Clinton Township;Charter Township of Clinton;Clinton Township; +city::4990510;Dearborn;Dearborn;Dearbornville;Dirborn;Dirborna;Diurborn;Dīrborna;di er bo en;diabon;dieobon;diyaraborna;dyrbwrn;dyrbwrn myshygan;Дирборн;Диърборн;Дірборн;דירבורן;ديربورن;دیربورن، میشیگان;ڈئربورن، مشی گن;डीयरबॉर्न;ディアボーン;迪尔伯恩;디어본; +city::4990512;Dearborn Heights;Dirborn Khajts;Dirborn Khehjts;dyrbwrn hayts;Дирборн Хајтс;Дирборн Хэйтс;ديربورن هايتس;دیربورن‌هایتس، میشیگان;ڈئربورن ہائٹس، مشی گن; +city::4990729;Detroit;D-town;DTT;Detroit;Detroita;Detroitas;Detroitum;Detrojt;Detrojto;Detroyt;Détroit;Détroyt;Gorad Dehtrojt;Mo-Town;Motor City;Motown;Ntitroit;The D;Tiughsaghrondy;Tsi kiohsahron:ta;Tsi kiohsahrón:ta;Wawyachtenok;detoroito;detra'ita;detrayeta;detrayit;detro'ita;detʼroitʼi;di te lu;di thrx yt;ditara'ita;diteuloiteu;dtrwyt;dytrwyt;titrayit;Ντιτρόιτ;Горад Дэтройт;Детроит;Детройт;Դետրոյթ;דטרויט;דעטרויט;ديترويت;دیترویت;ڈیٹرائٹ;डेट्राइट;डेट्रॉईट;ডেট্রয়েট;ਡਿਟਰਾਇਟ;டிட்ராயிட்;డెట్రాయిట్;ดีทรอยต์;დეტროიტი;ዲትሮይት;デトロイト;底特律;디트로이트; +city::4992523;Farmington Hills;; +city::4992982;Flint;FNT;Flint;Siti of Flint;flynt;flynt myshygan;fu lin te;furinto;peullinteu;plynt;Сити оф Флинт;Флинт;Флінт;פלינט;فلنٹ، مشی گن;فلينت;فلینت، میشیگان;フリント;弗林特;플린트; +city::4994358;Grand Rapids;GRR;Gorad Grand-Rapids;Grand Rapids;Grand Rapidsas;Grand-Rapids;Grend-Repids;da ji liu cheng;geulaendeulaepijeu;gramda repidsa;grndrpydz myshygan;gurandorapizzu;Горад Гранд-Рапідс;Гранд Рапидс;Гранд-Рапидс;Гренд-Репідс;גרנד ראפידס;گرندرپیدز، میشیگان;ग्रँड रॅपिड्स;ᒥᓯ ᐹᐗᔅᑎᒃ;グランドラピッズ;大急流城;그랜드래피즈; +city::4997787;Kalamazoo;AZO;Bronson;Kalamazoo;Kalamazu;Kalamazū;ka la ma zu;kaelleomeoju;kalamazw;kalamazw mshy gn;kalamzw myshygan;karamazu;Каламазу;קאלאמאזו;كالامازو;کالامازو، مشی گن;کالامزو، میشیگان;カラマズー;卡拉马祖;캘러머주; +city::4998018;Kentwood;Kentvud;kenteuudeu;kntwwd myshygan;kyntwwd;Кентвуд;كينتوود;کنتوود، میشیگان;کینٹووڈ، مشی گن;켄트우드; +city::4998830;Lansing;Gorad Lansing;LAN;Lansin'nk;Lansing;Lansinga;Lansingas;Lansings;Lehnsing;Lensing;laensing;lan xin;lancin;lansin;lansina;lansinga;lansng;lansng mshy gn;lansngh;lnsyng;lnsyng myshygan;lyansinga;ranshingu;Λάνσινγκ;Горад Лансінг;Лансинг;Ленсинг;Лэнсинг;Լանսինգ;לאנסינג;لانسنغ;لانسنگ;لانسنگ، مشی گن;لنسینگ;لنسینگ، میشیگان;लान्सिंग;लान्सिङ;लान्सिङ्;ल्यान्सिंग;லான்சிங்;ランシング;兰辛;蘭辛;랜싱; +city::4999837;Livonia;Livonia;Livonija;libonia;lyfwnya;lywwnya mshy gn;lywwnya myshygan;Ливониа;Ливония;Ливонија;ليفونيا;لیوونیا، مشی گن;لیوونیا، میشیگان;리보니아; +city::5004062;Novi;Novaj;Novi;Novyj;nobai;nwfy;nwwy myshygan;nwy mshy gn;Новај;Нови;Новый;نوفي;نووی، میشیگان;نوی، مشی گن;ノバイ;노바이; +city::5006166;Pontiac;PTK;Pontiac;Pontiak;Pontijak;bwntyak;pang di ya ke;pontiaeg;pontiakku;pwntyak myshygan;Понтиак;Понтијак;Понтіак;بونتياك;پونتیاک، میشیگان;پونٹیئک، مشی گن;ポンティアック;庞蒂亚克;폰티액; +city::5007402;Rochester Hills;; +city::5007804;Royal Oak;Rojal Ouk;loyeol-okeu;rayl awk mshy gn;roiyaruoku;rwyal awk;rwyal awk myshygan;Ројал Оук;رائل اوک، مشی گن;رويال أوك;رویال اوک، میشیگان;ロイヤルオーク;로열오크; +city::5009586;Shelby;; +city::5010636;Southfield;Sautfild;Sousfild;Southfield;sauseupildeu;Саутфилд;Соусфилд;사우스필드; +city::5010978;Saint Clair Shores;; +city::5011148;Sterling Heights;Sterling Khajts;Sterling-Khajts;Sturling Khajts;astrlyng hayts myshygan;si te ling hai ci;styrlyngh hayts;sutaringuhaitsu;Стерлинг Хајтс;Стерлинг-Хайтс;Стърлинг Хайтс;استرلینگ هایتس، میشیگان;ستيرلينغ هايتس;سٹرلنگ ہائٹس، مشی گن;スターリングハイツ;斯特靈海茨; +city::5011908;Taylor;Tehjlor;Tejlor;taylwr;tylwr myshygan;Тейлор;Тејлор;Тэйлор;تايلور;تیلور، میشیگان;ٹیلر، مشی گن; +city::5012639;Troy;Troj;Troja;Troy;Troy Corners;te luo yi;teuloi;toroi;trwy;trwy myshygan;Трой;Троя;Трој;تروي;تروی، میشیگان;ٹرائے، مشی گن;トロイ;特洛伊;트로이; +city::5014051;Warren;Gorad Uorehn;Uorren;Uorun;Voren;Vorren;Warren;u~oren;warn mshy gn;warn myshygan;waryn;wo lun;woleon;wwrn;Ворен;Воррен;Горад Уорэн;Уоррен;Уорън;וורן;وارن، مشی گن;وارن، میشیگان;وارين;ウォーレン;沃伦;워런; +city::5014130;Waterford;Uoterford;Уотерфорд; +city::5014681;Westland;Vehstland;Vestland;weseuteullaendeu;wstlnd myshygan;wystland;Вестланд;Вэстланд;وستلند، میشیگان;ويستلاند;ویسٹلینڈ، مشی گن;웨스틀랜드; +city::5015618;Wyoming;Vajoming;waywmngh;wayywmng mshy gn;wywmyng myshygan;Вајоминг;وائیومنگ، مشی گن;وايومنغ;ویومینگ، میشیگان; +city::5016494;Apple Valley;Appl Volehj;Apple Valley;City of Apple Valley;Ehpl-Valli;Epl Vali;Epl-Velli;abl faly;aepeulbaelli;Аппл Волэй;Епл Вали;Епл-Веллі;Эпл-Валли;أبل فالي;اپل ولی، مینه‌سوتا;ایپل ویلی، مینیسوٹا;애플밸리; +city::5018651;Blaine;Blaine;City of Blaine; +city::5018739;Bloomington;Bloomington;Bloominton;Blumington;City of Bloomington;beullumingteon;blwmnghtwn;blwmyngtn mynh‌swta;buruminton;Блумингтон;بلومنغتون;بلومنگٹن، مینیسوٹا;بلومینگتن، مینه‌سوتا;ブルーミントン;블루밍턴; +city::5019335;Brooklyn Park;Brooklyn Park;Bruklin Park;Bruklin-Park;City of Brooklyn Park;beulukeullinpakeu;brwklyn bark;Бруклин Парк;Бруклин-Парк;Бруклін-Парк;بروكلين بارك;بروکلین پارک، مینه‌سوتا;بروکلین پارک، مینیسوٹا;브루클린파크; +city::5019767;Burnsville;Bernsvil;Bernsvil';Bernsvill;Burnsvill;Burnsville;City of Burnsville;bwrnsfyl;Бернсвил;Бернсвилл;Бернсвіль;Бурнсвилл;برنزویل، مینه‌سوتا;برنزویل، مینیسوٹا;بورنسفيل; +city::5022025;Coon Rapids;City of Coon Rapids;Coon Rapids;Kun Rapids;Kun-Rapids;kwn rabydz;Кун Рапидс;Кун-Рапидс;Кун-Рапідс;كون رابيدز;کون رپیدز، مینه‌سوتا;کون ریپڈز، مینیسوٹا; +city::5024719;Duluth;City of Duluth;DLH;Dalut;Duljut;Dulut;Dulutas;Duluth;Onigamiinsing;darusu;deolluseu;dlwth mynh‌swta;du lu si;dulutha;dwlwt;dwlwth;Далут;Дулут;Дълют;Դուլութ;דולות;دلوث، مینه‌سوتا;دولوث;ڈولوتھ، مینیسوٹا;डुलुथ;ダルース;杜魯斯;덜루스; +city::5024825;Eagan;City of Eagan;Eagan;Igan;aygan mynh‌swta;ayjan;igan;igana;Іґан;Иган;إيجان;ایگان، مینه‌سوتا;ایگان، مینیسوٹا;ईगन;イーガン; +city::5025219;Eden Prairie;City of Eden Prairie;Eden Prairie;Ehden Prehjraj;Iden Preri;Iden-Preri;aydn bryry;aydn pryry mynh‌swta;Іден-Прері;Иден Прери;Иден-Прери;Эден Прэйрай;إيدن بريري;ایدن پریری، مینه‌سوتا;ایڈن پریری، مینیسوٹا; +city::5025264;Edina;City of Edina;Edina;Idajna;adyna;idaina;Идайна;Идајна;إدينا;ادینا، مینه‌سوتا;ایڈینا، مینیسوٹا;イーダイナ; +city::5034059;Lakeville;City of Lakeville;Fairfield;Lake Ville;Lakeville;Lakeville Village;Lehjkvill;Lejkvil;Lejkvil';Lejkvill;lykfyl;lykwyl mynh‌swta;Лейквилл;Лейквіль;Лејквил;Лэйквилл;ليكفيل;لیک ویل، منیسوٹا;لیکویل، مینه‌سوتا; +city::5036493;Maple Grove;City of Maple Grove;Maple Grove;Mehjpl Grouv;Mejpl Grouv;Mejpl-Grov;mabl ghrwf;Мейпл-Гров;Мейпл-Ґров;Мејпл Гроув;Мэйпл Гроув;مابل غروف;میپل گروو، مینه‌سوتا;میپل گروو، مینیسوٹا; +city::5037649;Minneapolis;City of Minneapolis;Gakaabikaang;Gorad Mineapalis;MSP;Min-ni-a-po-li-su;Mineapoli;Mineapolis;Mineapolisa;Mineápolis;Minneapolis;Minneapòlis;Minnéapolis;Minyapolis;Mìn-nì-â-pô-li-sṳ̂;mineaporisu;minepolisa;ming ni a bo li si;ming ni ya bo li si;miniaepolliseu;miniyapolisa;miniyappolis;minniyapolis;mnyapwls;mynyabwls;mynyapwlys;Μινεάπολη;Горад Мінеапаліс;Минеаполис;Миннеаполис;Міннеаполіс;Մինեապոլիս;מיניאפוליס;منیاپولس;مينيابولس;مینیاپولیس;मिनियापोलिस;मिनीयापोलिस;মিনিয়াপোলিস;મિનેપોલિસ;மினியாப்பொலிஸ்;మిన్నియాపోలిస్;ಮಿನ್ನಿಯಾಪೋಲಿಸ್;มินนีแอโพลิส;მინეაპოლისი;ミネアポリス;明尼亞波利斯;明尼阿波利斯;미니애폴리스; +city::5037784;Minnetonka;City of Minnetonka;Minitonka;Minnetonka;minetongka;minetonka;mynytwnka;Минитонка;Миннетонка;Міннетонка;مينيتونكا;مینه‌تونکا، مینه‌سوتا;مینیٹونکا، مینیسوٹا;ミネトンカ;미네통카; +city::5037790;Minnetonka Mills;Minnetonka;Minnetonka Mills; +city::5041926;Plymouth;City of Plymouth;Plajmaus;Plimut;Plymouth;blymwth;Плаймаус;Плимут;Плімут;بليموث;پلایماؤت، مینیسوٹا;پلیموث، مینه‌سوتا; +city::5043473;Rochester;City of Rochester;RST;Rochester;Rochestur;locheseuteo;luo che si te;rachstr mynh‌swta;rochesuta;rwtshystr;rwzstr;Рочестер;Рочестър;רוצסטר;راچستر، مینه‌سوتا;روتشيستر;روچیسٹر، مینیسوٹا;ロチェスター;羅徹斯特;로체스터; +city::5044407;Saint Cloud;City of Saint Cloud;Ozaagiiziibiing;STC;Saint Cloud;St. Cloud; +city::5045360;Saint Paul;City of Saint Paul;Gorad Sent-Pol;Imnizha ska;Saint Paul;Saint Pol;San Pablo;Sejnt Pol;Sent Pol;Sent Polas;Sent Pols;Sent-Pol;Sentpola;Sint-Paul;St. Paul;Urbs Sancti Pauli de Minnesota;ceyint pal;saint pal;sant bawl;santa pala;seinteupol;senta pala;senta pola;sentoporu;sentphxl;sheng bao luo;synt pl mynh‌swta;syynt pwl;Σαιντ Πωλ;Горад Сент-Пол;Сейнт Пол;Сент Пол;Сент-Пол;Սեյնթ Փոլ;סיינט פול;سانت باول;سینت پل، مینه‌سوتا;سینٹ پال;سینٹ پال، مینیسوٹا;सन्त पल;सेंट पॉल;सेन्त पल;सैन्ट् पाल्;செயின்ட் பால்;เซนต์พอล;სენტ-პოლი;セントポール;圣保罗;세인트폴; +city::5052361;West Coon Rapids;; +city::5053358;Woodbury;City of Woodbury;Vudbari;Vudberi;Vudbjuri;Woodbury;udeubeli;vudabari;wwdbwry;Вудбарі;Вудбери;Вудбюри;وودبری، مینه‌سوتا;وودبوري;ووڈبری، مینیسوٹا;वुडबरी;우드베리; +city::5059163;Fargo;Centralia;FAR;Fago;Fargas;Fargo;Fàgo;Fārgo;Gorad Farga;fa ge;fago;farghw;fargw;fargw dakwtay shmaly;pago;pargo;phargo;Горад Фарга;Фарго;Фарґо;פארגא;פארגו;فارغو;فارگو;فارگو، داکوتای شمالی;फार्गो;ფარგო;ファーゴ;法戈;파고; +city::5059429;Grand Forks;GFK;Grand Foks;Grand Forks;Grand-Forks;Grandforksa;Grann Foks;Grann Fòks;da fu ke si;geulaendeupokeuseu;ghrand fwrks;grnd frk dakwtay shmaly;grnd pwrqs;gurandofokusu;Гранд Фокс;Гранд-Форкс;גרנד פורקס;غراند فوركس;گرند فرک، داکوتای شمالی;گرینڈفورکس;グランドフォークス;大福克斯;그랜드포크스; +city::5063805;Bellevue;Behllevju;Belv'ju;Belvju;bei er wei you;berubyu;blwyw nbraska;blwyw nybraska;bylyfyw;Белвью;Белвю;Белвју;Бэллевю;بلویو، نبراسکا;بلویو، نیبراسکا;بيليفيو;ベルビュー;贝尔维尤; +city::5069297;Grand Island;GRI;Grand Ajland;Grand-Ajlend;Grandis Insula;ge lan de ai lan;geulaendeuaillaendeu;ghrand aysland;gramda ayalanda;grnd aylnd nbraska;gurandoairando;Гранд Айланд;Гранд Ајланд;Гранд-Айленд;Ґранд-Айленд;غراند إيسلاند;گرند آیلند، نبراسکا;گرینڈ آئلینڈ، نیبراسکا;ग्रँड आयलंड;グランドアイランド;格蘭德艾蘭;그랜드아일랜드; +city::5072006;Lincoln;Gorad Linkal'n;LNK;Lin'koln;Lincoln;Lincolnia;Linkol'n;Linkoln;Linkolna;Linkolnas;Linkolns;Linkuln;lin ken;ling khxln;lingkeon;linkan;linkana;lnkn;lnkn nybraska;lynkln nbraska;lynqwln;rinkan;Λίνκολν;Горад Лінкальн;Линколн;Линкольн;Линкълн;Лінкольн;Լինքոլն;לינקולן;لنكن;لنکن;لنکن، نیبراسکا;لینکلن، نبراسکا;लिंकन;लिङ्कन;லிங்கன்;ลิงคอล์น;ლინკოლნი;リンカーン;林肯;링컨; +city::5074472;Omaha;OMA;Omacha;Omaha;Omakha;ao ma ha;awmaha;awmaha nbraska;awmaha nbraska;omaha;xo ma ha;Ομάχα;Омаха;Օմահա;אומהה;أوماها;اوماها نبراسكا;اوماها، نبراسکا;اوماہا، نیبراسکا;ओमाहा;ওমাহা;โอมาฮา;ომაჰა;オマハ;奥马哈;오마하; +city::5089178;Manchester;Derryfield;Harrytown;MHT;Manchehster;Manchester;Manchestur;Namaskeag;Old Harrytown;Tyng's Town;Tyngstown;maencheseuteo;man che si te;manchesuta;manshstr;mnchstr nywhmpshayr;mnzstr;Манчестер;Манчестър;Манчэстер;מנצסטר;مانشستر;مانچسٹر، نیو ہیمپشائر;منچستر، نیوهمپشایر;マンチェスター;曼徹斯特;맨체스터; +city::5090046;Nashua;ASH;Nashua;Watanic;na shu e;naesyua;nashua;nashwa;nshwa nywhmpshayr;Нашуа;נשואה;ناشوا;ناشوا، نیو ہیمپشائر;نشوا، نیوهمپشایر;ナシュア;纳舒厄;내슈아; +city::5095445;Bayonne;Bajon;Bajonn;Bayonne;Bejon;Bejonn;Bergen Neck;Constabals Hoek;Pamlicae Farme;Pamrepau;baywn nywjrsy;bei yong;beion;beiyon;byywnny nyw jrsy;Байон;Байонн;Бейонн;Бејон;بایون، نیوجرسی;بیئوننی، نیو جرسی;ベイヨン;貝永;베이온; +city::5096699;Clifton;Clifton;Klifton;Weasel;ke li fu dun;keullipeuteon;klyftwn nywjrsy;kurifuton;Клифтон;کلفٹن، نیو جرسی;کلیفتون، نیوجرسی;クリフトン;克利夫頓;클리프턴; +city::5097441;East Orange;Doddtown;East Orange; +city::5097529;Edison;Edison;Edisun;Ehdison;Ehdison Taunship;Gmina Edison;Menlo Park;adyswn nywjrsy;ai di sheng;edisana;ediseun;ejison;etican;Едисон;Едисън;Эдисон;Эдисон Тауншип;ادیسون، نیوجرسی;ایڈیسن، نیو جرسی;एडिसन;எடிசன்;エジソン;爱迪生;에디슨; +city::5097598;Elizabeth;Ehlizabeht;Ehlizabet;Elizabet;Elizabetas;Elizabeth;Elizabeth Town;Elizabeth Towne;Elizabethtown;Elizabets Towne;alyzabt nywjrsy;alyzabyth;ellijabeseu;erizabesu;yi li sha bai;Елизабет;Елізабет;Элизабет;Элизабэт;אליזבת;إليزابيث;الزبتھ، نیو جرسی;الیزابت، نیوجرسی;エリザベス;伊麗莎白;엘리자베스; +city::5099133;Hoboken;Hobocan;Hoboken;Hobokena;Hoebuck;Khoboken;Khobouken;Khouboukun;habwkn nywjrsy;hoboken;hobokeon;huo bo ken;hwbwqn;Хобокен;Хобоукен;Хоубоукън;הובוקן;هابوکن، نیوجرسی;ہوبوکین، نیو جرسی;ホーボーケン;霍博肯;호보컨; +city::5099724;Irvington;Camptown;Irvington; +city::5099836;Jersey City;Arissheck;Dinas Jersey;Dzersi Siti;Dzersi Sitis;Dzersisitija;Dzerzi Siti;Dzhehrsi-Sici;Dzhersej Siti;Dzhersi-Siti;Dzhursi Siti;Džersi Sitis;Džērsisitija;Hudson;JEC;Jersey Ceety;Jersey City;Paulus Hook;Paulus's Hook;Powles Hook;Thanh pho Jersey;Thành phố Jersey;grzy syty;jajishiti;jarsi siti;jeojisiti;jrzy syty;jyrsy syty;ze xi shi;Џерзи Сити;Џерси Сити;Джерсей Сити;Джерси-Сити;Джерсі-Сіті;Джърси Сити;Джэрсі-Сіці;Ջերսի Սիթի;גרזי סיטי;جرزی سیتی;جرسی شہر، نیو جرسی;جيرسي سيتي;जर्सी सिटी;ジャージーシティ;泽西市;저지시티; +city::5100280;Lakewood;Bergen Works;Bricksburg;Lakewood;Lakewood Township;Lehjkvud;Lejkvud;Municipio de Lakewood;Washington Furnace;lykwwd nywjrsy;lyyqwwd;reikuuddo;Лейквуд;Лејквуд;Лэйквуд;לייקוואוד;לייקווד;لیک ووڈ ٹاؤنشپ، نیو جرسی;لیکوود، نیوجرسی;レイクウッド; +city::5101717;New Brunswick;Brunswick;Inian;Inians Ferry;Middlesex;N'ju Bransvik;N'ju-Bransuik;N'ju-Bransvik;New Brunswick;Nju Bransvik;Nju Brunzuik;Nuevo Brunswick;The River;nyubeuleonjeuwig;nyuburanzuu~ikku;nyw branzwyk nywjrsy;nyw brnzwk nyw jrsy;nyw brwnzwyk;xin bu lang si wei ke;Њу Брансвик;Нью Брансвик;Нью-Брансвік;Нью-Брансуик;Ню Брънзуик;نيو برونزويك;نیو برانزویک، نیوجرسی;نیو برنزوک، نیو جرسی;ニューブランズウィック;新布朗斯维克;뉴브런즈윅; +city::5101798;Newark;EWR;Gorad N'juark;Milford;N'juark;New Worke;Newark;Nieworke;Niouark;Niuarkas;Njuark;Novarcum;Nuarka;Nyuark;Youngs Point;n'yu'arka;n'yurka;nevark;niu hua ke;nuvark;nwrk;nyuaku;nyueokeu;nywark;nywark nyw jrsy;nywark nywjrsy;Ņuarka;Νιούαρκ;Њуарк;Горад Ньюарк;Ньюарк;Нюарк;Նյուարկ;נוארק;ניוארק;نيوآرك;نیوآرک، نیو جرسی;نیوآرک، نیوجرسی;न्यूअर्क;न्यूर्क;நுவார்க்;నెవార్క్;นวร์ก;ნიუარკი;ニューアーク;紐華克;뉴어크; +city::5101879;North Bergen;brgn shmaly nywjrsy;برگن شمالی، نیوجرسی; +city::5102427;Parsippany;Parcipany;Parcipponog;Parsippani;Parsippany;Percipany;Percipeny;Парсиппани; +city::5102443;Passaic;Acquackanonk;Acquackanonk Bridge;Acquackanonk Landing;Aqueyquinunke;Haquequenunck;Pasejik Siti;Passaic;Passaik;ba sai ke;pasayyk nywjrsy;paseiku;peoseiig;pysayk nyw jrsy;Пасејик Сити;Пассаик;פאסעיק;پاسائیک، نیوجرسی;پیسایک، نیو جرسی;パセーイク;巴賽克;퍼세이익; +city::5102466;Paterson;Great Falls;Manchester;New Manchester;Patehrson;Paterson;Patersun;Totowa;batrswn;pa te sen;paeteoseun;patason;ptrswn;ptrswn nywjrsy;Патерсон;Патерсън;Патэрсон;פטרסון;باترسون;پترسون، نیوجرسی;پیٹرسن، نیو جرسی;แพเทอร์สัน;パターソン;帕特森;패터슨; +city::5102578;Perth Amboy;Ambo Point;Amboy;Amboy Perth;New Perth;New Point;Pehrs Ehmboj;Pert Amboj;Perth;Perth Amboy;Perth Town;Purt Amboj;pasuanboi;peoseuaemboi;prth ambwy nywjrsy;Перт Амбој;Пърт Амбой;Пэрс Эмбой;پرتھ امبوی، نیو جرسی;پرث امبوی، نیوجرسی;パースアンボイ;퍼스앰보이; +city::5102713;Piscataway;New Market;Piscataway;Piscattaway; +city::5102720;Plainfield;Plehjnfild;Plejnfild;peulleinpildeu;plynfyld nywjrsy;pureinfirudo;Плейнфилд;Плейнфілд;Плејнфилд;Плэйнфилд;پلینفیلد، نیوجرسی;プレインフィールド;플레인필드; +city::5105496;Trenton;Chambersburg;Gorad Trehntan;Lamberton;Mill Hill;Santhickan;TTN;The Falls;Trehnton;Trent Town;Trent's Town;Trenton;Trentona;Trentonas;Trentonia;Trents Town;Trentun;itrentan;te lun dun;teulenteon;torenton;trentana;trntwn;Τρέντον;Горад Трэнтан;Трентон;Трентън;Трэнтон;Թրենթոն;טרנטון;ترنتون;ٹرنٹن، نیو جرسی;ٹرینٹن;ट्रेंटन;ट्रेन्टन;त्रेन्तन;இட்ரென்டன்;トレントン;特伦顿;트렌턴; +city::5105608;Union;Connecticut Farms;Union; +city::5105634;Union City;ECC;East Cost Cities;Junion Siti;Junion-Siti;Union City;awnywn syty nywjrsy;you lian shi;yunieonsiti;yunionshiti;ywnywn syty;Јунион Сити;Юнион Сити;Юнион-Сити;Юніон-Сіті;יוניון סיטי;اونیون سیتی، نیوجرسی;يونيون سيتي;یونین شہر، نیو جرسی;ユニオンシティ;友聯市;유니언시티; +city::5106160;Wayne;; +city::5106292;West New York;Vehst N'ju Jork;Vest NJujork;mghrby nyw yark nyw jrsy;nyw ywrk ghrby nywjrsy;weseuteunyuyog;Вест Њујорк;Вэст Нью Йорк;مغربی نیو یارک، نیو جرسی;نیو یورک غربی، نیوجرسی;웨스트뉴욕; +city::5106834;Albany;ALB;Albania;Albanija;Albany;Albany i New York;Albany on Niwum Eoforwice;Albany on Nīwum Eoforwīce;Aurania;Beverswyck;Beverwick;Beverwyck;Ches-co-don-ta;Fort Orange;Fuyck;Ga-isch-ti-nic;Gaasch-tinick;Gaishtinic;Gorad Olbani;Kaishtinic;New Orange;Olbani;Olbanis;Olmpani;Pem-pot-a-wut-hut;Pempotuwuthut;Rensselaerwyck;Scheneghtada;Shaw-na-taw-ty;Ska-neh-ta-de;Skaghnetade;Skaneghtada;Skenectadea;William Stadt;Williamstadt;albani;albany;albany nyw yark;albany nywywrk;albny;alpeni;ao er ba ni;elbani;ke ba li;olbeoni;orubani;xxlbani;Όλμπανι;Албания;Горад Олбані;Олбани;Олбані;Օլբանի;אולבני;אלבאני;آلبانی، نیویورک;ألباني;ئالبانی، نیویۆرک;البانی، نیو یارک;البنی;अल्बानी;आल्बनी;एल्बानी;ஆல்பெனி;ออลบานี;ალბანი;オールバニ;奥尔巴尼;柯巴利;올버니; +city::5107129;Amherst;Amherst;Amkherst;amhrst nywywrk;amuhasuto;Амхерст;امهرست، نیویورک;アムハースト; +city::5107464;Astoria;Astoria;Astorija;Hallett's Cove;aeseutolia;astwrya;Αστόρια;Астория;آستوریا;অ্যাস্টোরিয়া;애스토리아; +city::5108193;Bayside;Bay Side;Bayside;بے سائڈ، کوئینز; +city::5108815;Bensonhurst;Bensonhurst;Bensonhurst-By-The-Sea;Bensonkherst;Bensonkhjorst;Бенсонхерст;Бенсонхёрст; +city::5109790;Borough Park;Blythebourne;Boro-Park;Borough Park;Боро-Парк;בארא פארק;בורו פארק; +city::5110077;Brentwood;Brentud;Brentvud;Brentwood;Modern Times;bryntwwd;Брентвуд;Брентуд;برينتوود;برینٹووڈ، نیو یارک; +city::5110266;The Bronx;Borough of Bronx;Bronks;Bronx;The Bronx;Бронкс; +city::5110302;Brooklyn;BK;Bklyn;Borough of Brooklyn;Breuckelen;Breukelen;Broklino;Brooklyn;Brucclinu;Bruklin;Bruklina;Bruklinas;Comitatus Bruclinum;Kings County;Marechkawick;beulukeullin;bru klin;brukalina;brwklyn;brwqlyn;bu lu ke lin qu;burukkurin qu;kinsa ka'unti;Бруклин;Бруклін;ברוקלין;بروكلين;بروکلین;ब्रुकलीन;ब्रूकलिन;কিংস কাউন্টি;ব্রুকলিন;บรุกลิน;ბრუკლინი;ブルックリン区;布鲁克林区;브루클린; +city::5110446;Brownsville;Brown's Village;Brownsville; +city::5110629;Buffalo;BUF;Bafalas;Bafalo;Baffalo;Bufalo;Bufalum;Buffalo;Buffalo i New York;Bupalo;Búfalo;De-o-tro-weh;De-ose-lole;Gorad Bufala;Ne-o-thro-ra;New Amsterdam;Tick-e-ack-gou-ga;Tsistekeriia'kon:ke;Tsistekeriia'kón:ke;bafelo;baffalo;baffaro;baphalo;baphelo;beopeollo;bfylw nyw yark;bupalo;bwfalw;bwfalw nywywrk;bwfylw;pahpalo;shui niu cheng;Μπάφαλο;Бафало;Баффало;Буфало;Буффало;Бъфало;Горад Буфала;Բուֆֆալո;באפאלא;באפלו;بفیلو، نیو یارک;بوفالو;بوفالو، نیویورک;بوفیلو;बफ़ेलो;बफेलो;பஃபலோ;బఫెలో;ಬಫಲೋ;บัฟฟาโล;ბუფალო;バッファロー;水牛城;버펄로; +city::5110918;Bushwick;Boswijck;Bushuik;Bushwick;Bushwyck;bu xi wei ke;bwswwyq;Бушуик;בושוויק;布希維克; +city::5111412;Canarsie;; +city::5112375;Cheektowaga;Cheektowaga;Cheektowaga Station;Cheektowaga Village;Jiik-do-waah-geh; +city::5113481;Coney Island;Coney Adasi;Coney Adası;Coney Island;Conyn Island;Conyne Island;Insulo Coney;Koni-Ajlend;kang ni dao;koni-ailendi;koniaillaendeu;koniairando;kwny ayland;Кони-Айленд;קוני איילנד;كوني آيلاند;კონი-აილენდი;ქონი-აილენდი;コニーアイランド;康尼島;코니아일랜드; +city::5113779;Corona;Corona;West Flushing; +city::5114418;Cypress Hills;Cypress Hills;Union Place; +city::5115843;East Flatbush;East Flatbush;Rugby; +city::5116495;Elmhurst;Elmhurst;Middeburgh;Middelburg;Middelburgh;Neutuyn;Newtown; +city::5117378;Flatbush;Flatbush;Middelwout;Middewout;Vlackebos;פלעטבוש; +city::5117388;Flatlands;Flatlands;Keskachauge;Neue Amserfoort; +city::5117549;Fordham;; +city::5117575;Forest Hills;Forest Hill;Forest Hills;Whitepot; +city::5119167;Gravesend;; +city::5119347;Greenburgh;Grinburg;Гринбург;Ґрінбург; +city::5120034;Harlem;Garlem;Harlem;Harlema;Harlemas;Harlemo;Hārlema;Kharlem;New Harlem;Nieu Haarlem;Nieuw Haarlem;Northern Manhattan;ha lai mu qu;hallem;haremu;harlemi;harlm;Гарлем;Харлем;Հառլեմ;הארלם;هارلم;ہارلم;ჰარლემი;ハーレム;哈莱姆区;할렘; +city::5120478;Hempstead;Hempstead;Hemsted;Khempsted;Хемпстед; +city::5122331;Irondequoit;Irondikvojt;arwndykwwyt;Ирондиквојт;إرونديكوويت; +city::5122477;Jackson Heights;jaegseunhaicheu;جیکسن ہائیٹس، کوئینز;잭슨하이츠; +city::5122520;Jamaica;Jaimaica;Jamaica;Jamaicah;Jamaick;Jamaico;Jamaika;Jamanica;Jameco;Jemaica;Jemaicae;Jemaico;Jemecah;Rustdorp;gmyyqh;jamaika de qu;jameika;גמייקה;ジャマイカ地区;자메이카; +city::5123443;Kings Bridge;; +city::5124276;Levittown;Island Trees;Levittaun;Levittown;lyfytawn;Левиттаун;ليفيتاون; +city::5125771;Manhattan;Borough of Manhattan;Manatans;Manathans;Manathas;Manathes;Manatte;Manhattan;Manhattanville;Mankhetten;Mannahattan;Menathans;maenhaeteun;man ha dun;manhatn;mnhtn;mæn hat tan;Манхеттен;מנהטן;مانهاتن;แมนฮัตตัน;曼哈顿;맨해튼; +city::5127670;Mott Haven;; +city::5127835;Mount Vernon;Hutchinson's;Maunt Vernon;Maunt-Vernon;Mount Vernon;fu nong shan;mant wrnwn nywywrk;maunteubeoneon;mauntobanon;mwnt fyrnwn;Маунт Вернон;Маунт-Вернон;מאונט ורנון;ماؤنٹ ورنن، نیو یارک;مانت ورنون، نیویورک;مونت فيرنون;マウントバーノン;弗農山;마운트버넌; +city::5128549;New Rochelle;N'ju-Roshel';N'ju-Roshell;New Rochelle;Nju Roshel;Njuroshel;Nouvelle-Rochelle;Nueva Rochelle;nyulosyel;nyurosheru;nyw rashl nywywrk;nyw rwchyl nywyark;nyw rwsl;nyw rwtshyl;xin luo xie er;Њу Рошел;Нью-Рошелл;Нью-Рошель;Нюрошел;ניו רושל;نيو روتشيل;نیو راشل، نیویورک;نیو روچیل، نیویارک;ニューロシェル;新羅謝爾;뉴로셸; +city::5128581;New York City;Aebura;Bandar Raya New York;Big Apple;Cathair Nua Eabhraic;City of New York;Eabhraig Nuadh;Efrog Newydd;Evrek Nowydh;Ga-no-no;Kanon:no;Kanono;Kanón:no;Kota New York;Lungsod ng New York;N'ju-Jork;NY;NYC;Nea Yorke;Nei Yarrick Schtadt;Neu Amsterdam;Neu Jorck;New Amsterdam;New Orange;New Yorc;New York;New York City;New York Stad;New York borg;New York kenti;New York-borg;New Yorke;New Yorku;Niujorkas;Nju Jork;Njujork;Nouvelle Yorck;Nouvieau York;Nov-Jorko;Nova Amsterda;Nova Iorque;Nova York;Nova-York;Novjorko;Novum Eboracum;Nowy Jork;Nua-Eabhrac;Nueva York;Nujorka;Nyja Jorvik;Nyu York Shehiri;Nòva York;Nýja Jórvík;Thanh pho New York;The Big Apple;Thành phố New York;York Berri;manhattan;n'yuyorka;ni'u iyarka siti;niu yue;niu yue shi;niyuyark nakaram;nkhr niwyxrk;nyuyog;nyuyog si;nyuyoku;nyw ywrq;nywywrk;Ņujorka;Νέα Υόρκη;Њу Јорк;Њујорк;Нью-Ёрк;Нью-Йорк;Ню Йорк;ניו יארק;ניו יורק;ניו־יאָרק;نيويورك;نیویارک شہر;نیویورک;न्यूयॉर्क;নিউ ইয়র্ক সিটি;நியூயார்க் நகரம்;นครนิวยอร์ก;ნიუ-იორკი;ニューヨーク;マンハッタン;紐約市;纽约;뉴욕;뉴욕 시; +city::5130334;Ozone Park;awzwn park kwyynz;اوزون پارک، کوئینز; +city::5130572;Parkchester;; +city::5133271;Queens Village;Brushville;Queens;Queens Village; +city::5133273;Queens;Borough of Queens;Queens; +city::5133825;Richmond Hill;; +city::5134086;Rochester;Ga-sko-sa-ga;Gaskosago;ROC;Rocestera;Rocesteris;Rocestro;Rochester;Rochesterville;Rochestur;Roffa;Rotsester;Roĉestro;Ročestera;Ročesteris;locheseuteo;luo che si te;racestara;rocestar;rocestara;rochesuta;rwchstr nywywrk;rwtshstr;rwzstr;rx ches texr;Ρότσεστερ;Рочестер;Рочестър;רוצסטר;روتشستر;روچستر، نیویورک;روچسٹر;روچیسٹر، نیو یارک;रॉचेस्टर;रोचेस्टर;রচেস্টার;రోచెస్టర్;รอเชสเตอร์;ロチェスター;羅徹斯特;로체스터; +city::5136454;Schenectady;SCH;Schenectady;Shinetadi;Skanehtati;Skanéhtati;Skenektadi;Skenektadis;Skunektadi;seukinegteodi;si ke nei ke ta di;sknktdy nywywrk;sknyktady;sqnqtdy;sukenekutadi;Скенектади;Скенектаді;Скънектади;Шинетади;סקנקטדי;سكنيكتادي;سکنکتدی، نیویورک;سکینکٹڈی ، نیویارک;سکینیکٹیڈی، نیو یارک;スケネクタディ;斯克内克塔迪;스키넥터디; +city::5137849;Sheepshead Bay;; +city::5139568;Staten Island;Borough of Staten Island;Staten Island; +city::5140405;Syracuse;Bogardus Corners;Cossitts Corners;Gorad Sirakjus;Kah-ya-hoo-neh;Ken-tue-ho-ne;Milan;Na-ta-dunk;SYR;Siracusa;Sirak'jus;Sirakjus;Sirakjuz;Sirakuso;Sirakuz;South Salina;Sy-kuse;Syracusae;Syracuse;Syracuse i New York;Tu-na-ten-tonk;sayrakywz;shirakyusu;shirakyuzu;sileokyuseu;sirekyuja;syrakywz;syrakywz nyw yark;syrakywz nywywrk;syrqywz;xi la qiu ci;Горад Сіракюс;Сиракуз;Сиракьюс;Сиракюз;Сиракјус;Сіракюс;סירקיוז;سائراکیوز;سيراكيوز;سیراکیوز، نیو یارک;سیراکیوز، نیویورک;सिरॅक्युज;სირაკიუსი;シラキュース;シラキューズ;锡拉丘兹;시러큐스; +city::5142056;Utica;Fort Schuyler;Gorad Jutyka;Iotekha;Iotékha;Jutika;Nundadasis;Old Fort Schuyler;Tevadahahtodague;Twa-dah-ah-lo-dah-que;UCA;Unungagages;Utica;Utika;Yanundadasis;ZUA;awtyka;you ti ka;yutika;ywtyka nywywrk;ywtyqh;Јутика;Горад Ютыка;Утика;Ютика;Ютіка;יוטיקה;أوتيكا;یوتیکا، نیویورک;یوٹیکا، نیو یارک;ユーティカ;由提卡; +city::5143056;Wakefield;; +city::5143307;Washington Heights;Harlem Heights;Pen-a-bick;Washington Heights;washintonhaitsu;wosingteonhaicheu;ワシントンハイツ;워싱턴하이츠; +city::5143620;West Albany;Spencerville;West Albany; +city::5144336;White Plains;Quaropas;Uajt Plejns;Uajt-Plejns;Vajt Plajns;Vajt Plejns;Vajt-Plejns;White Plains;Whiteplains;bai yuan shi;hwaiteupeulleinseu;wayt blyns;wayt playnz nywywrk;wyyt plyyns;Вайт Плайнс;Вайт-Плейнс;Вајт Плејнс;Уайт Плейнс;Уайт-Плейнс;ווייט פלעינס;וייט פליינס;وائٹ پلینس، نیویارک;وايت بلينس;وایت پلاینز، نیویورک;ホワイト・プレインズ;ホワイト・プレインズ_;白原市;화이트플레인스; +city::5145215;Yonkers;Gorad Ionkers;Jonkers;Jonkersas;Jonkurs;Yonckers;Yonkers;yang ke si;yankrz;yongkeoseu;yonkazu;ywnkrz;ywnkrz nyw yark;ywnkyrs;ywnqrs;Јонкерс;Горад Іонкерс;Йонкерс;Йонкърс;יאנקערס;יונקרס;يونكيرس;یانکرز;یونکرز;یونکرز، نیو یارک;ヨンカーズ;揚克斯;용커스; +city::5145476;Akron;Akron;Akron City;Akrona;Akronas;Akrun;CAK;Ehkron;New Portage;Summitville;a ke lun;aekeuleon;akran awhayw;akrwn;akuron;ekran;Акрон;Акрън;Экрон;Ակրոն;אקרון;آكرون;اکران، اوهایو;اکرون، اوہائیو;अ‍ॅक्रन;ஏக்ரன்;അക്രോൺ;アクロン;阿克伦;애크런; +city::5149222;Canton;Canton; +city::5150529;Cleveland;CLE;Cleaveland;Cleveland;Forest City;Gorad Kliulend;Klevalehnd;Klevlando;Klivelant;Klivland;Klivlandas;Klivlend;Klivlenda;Klīvlenda;ka fu lan;ke li fu lan;keullibeullaendeu;kilivlant;klebhilyanda;klivhalanda;klyfland;klywlnd;kuriburando;qlyblnd;Κλίβελαντ;Горад Кліўленд;Клевалэнд;Кливланд;Кливленд;Клівленд;Քլիվլենդ;קליבלנד;קליוולאנד;كليفلاند;کلیولند;کلیولینڈ، اوہائیو;क्लीव्हलंड;ক্লেভিল্যান্ড;கிளீவ்லன்ட்;คลีฟแลนด์;კლივლენდი;クリーブランド;克利夫兰;克里夫蘭;卡夫蘭;클리블랜드; +city::5153207;Elyria;Ehlajria;Ehlirija;Elirija;alyrya;alyrya awhayw;eriria;yi li li ya;Елирија;Элайриа;Элирия;إليريا;الیریا، اوهایو;ایلیریا، اوہائیو;エリリア;伊利里亞; +city::5160315;Lakewood;Arlington;East Rockport;Lakewood;Lehjkvud;Lejkvud;leikeuudeu;lykwwd;lyyqwwd;reikuuddo;Лейквуд;Лејквуд;Лэйквуд;לייקווד;ليكوود;لیک ووڈ، اوہائیو;لیک‌وود، اوهایو;レイクウッド;레이크우드; +city::5161262;Lorain;Black River;Black River Settlement;Blackriver;Charleston;Charlestown;Lorain;Lorehjn;Lorejn;Loren;Mouth of Black River;luo lan;lwryn;lwryn awhayw;lwryyn;rorein;Лорейн;Лорен;Лорэйн;לוריין;لورين;لورین، اوهایو;لورین، اوہائیو;ロレイン;洛兰; +city::5166177;Parma;Parma;barma;pama;parma awhayw;Парма;פארמה;بارما;پارما، اوهایو;پارما، اوہائیو;パーマ;파마; +city::5174035;Toledo;Fort Industry;Gorad Talida;Port Lawrence;TOL;Toledo;Tolido;Tolīdo;Upper Toledo;Vistula;teollido;tolido;toredo;tuo lai duo;twldw;twlydw;twlydw awhayw;Горад Таліда;Толедо;Толидо;Толідо;Թոլեդո;טולדו;توليدو;تولیدو، اوهایو;ٹولیڈو، اوہائیو;टॉलिडो;トレド;托莱多;털리도; +city::5177568;Youngstown;Jangstaun;Jangstauna;Jongstaun;Jungstaun;YNG;Youngs Town;Youngstown;yang si dui;yangusutaun;yeongseutaun;yngstʼwn;ywnghztawn;ywngstawn awhayw;Јангстаун;Йонгстаун;Йънгстаун;Янгстаун;ינגסטאון;يونغزتاون;ینگزٹاؤن، اوہائیو;یونگستاون، اوهایو;ヤングスタウン;扬斯敦;영스타운; +city::5178127;Allentown;ABE;Alentaun;Alentaunas;Allenschteddel;Allentaun;Allentoun;Allentown;Aluntaun;Northampton;Northamptontown;a lun dui;aelleontaun;alyntawn;arentaun;Алентаун;Аллентаун;Аллентоун;Алънтаун;אלנטאון;آلن‌تاون، پنسیلوانیا;ألينتاون;ایلن ٹاؤن;ایلن ٹاؤن، پنسلوانیا;アレンタウン;阿伦敦;앨런타운; +city::5180225;Bethlehem;Bethlehem;Betlegem;Betlehemas;Betlekhem;Menagachsink;Vifleem;beseullihem;besurehemu;bo li heng;btlhm pnsylwanya;byt allhm pnslwanya;byt allhm pnslwynya;byt lhm;Бетлегем;Бетлехем;Вифлеем;بتلهم، پنسیلوانیا;بيت لحم;بیت اللحم، پنسلوانیا;بیت اللحم، پنسلوینیا;ベスレヘム;伯利恒;베슬리헴; +city::5188843;Erie;City of Erie;ERI;Ehri;Eri;Erie;Iri;ayry;ayry pnslwanya;ayry pnsylwanya;eri;ili;yi li;Érié;Ēri;Ери;Ері;Ири;Эри;אירי;إيري;ایری;ایری، پنسلوانیا;ایری، پنسیلوانیا;エリー;伊利;이리; +city::5197079;Lancaster;LNS;Lancaster;Lankast"r;Lankaster;Lengeschder;laengkeoseuteo;lainkisatara;lamkestara;lan kai si te;lnkstr pnsylwanya;rankasuta;Ланкастер;Ланкастър;لنکاسٹر، پنسلوانیا;لنکاسٹر، پنسلوینیا;لنکستر، پنسیلوانیا;लँकेस्टर;ਲੈਂਕਿਸਟਰ;ランカスター;兰开斯特;랭커스터; +city::5197796;Levittown;Levittaun;Левиттаун; +city::5206379;Pittsburgh;Allegheny;Fort Dunmore;Fort Duquesne;Fort Pitt;Fort Trent;Gorad Pitsburg;PIT;Pitsb"rg;Pitsburg;Pitsburga;Pitsburgas;Pitsburgo;Pitsmpernk;Pitts-Bourg;Pittsbarig;Pittsburg;Pittsburgh;Pittsburgum;Pittsburq;The Manor of Pittsburgh;bytsbrgh;phitts beirk;pi ci bao;pi zi bao;picheubeogeu;pitasabaraga;pitsabarga;pitspark;pits‌barg;pittsubagu;pytsbrg pnsylwanya;pytsbwrg;Πίτσμπεργκ;Горад Пітсбург;Питсбург;Питсбърг;Питтсбург;Піттсбург;פיטסבורג;بيتسبرغ;پٹس برگ;پٹسبرگ;پیتسبرگ، پنسیلوانیا;पिट्सबर्ग;ਪਿਟਸਬਰਗ;பிட்ஸ்பர்க்;పిట్స్‌బర్గ్;ಪಿಟ್ಸ್‌ಬರ್ಗ್;พิตต์สเบิร์ก;ピッツバーグ;匹兹堡;匹茲堡;피츠버그; +city::5207728;Reading;Gorad Rehdyng;RDG;Reading;Reddin;Reding;leding;lei ding;redingu;rydyng pnsylwanya;rydyngh;Горад Рэдынг;Рединг;Редінг;ريدينغ;ریدینگ، پنسیلوانیا;ریڈنگ، پنسلوانیا;ریڈنگ، پنسلوینیا;レディング;雷丁;레딩; +city::5211303;Scranton;AVP;Capouse;Deep Hollow;Gorad Skrantan;Harrison;Scranton;Skranton;Skrantonas;Skrantun;Skrenton;Slocum Hollow;askrantwn pnsylwanya;seukeulaenteon;si ke lan dun;skrantwn;sqrntwn;sukuranton;Горад Скрантан;Скрантон;Скрантън;Скрентон;סקרנטון;اسکرانتون، پنسیلوانیا;سكرانتون;سکرانٹن;سکرانٹن، پنسلوانیا;スクラントン;斯克蘭頓;스크랜턴; +city::5221659;Cranston;Cranston;Kranston;Krehnston;Krenston;Mashapaug;Maushapogue;Maushapoque;ke lan si dun;kranstwn;kranstwn rwd aylnd;kuransuton;qrnstwn;Кранстон;Кренстон;Крэнстон;קרנסטון;كرانستون;کرانستون، رود آیلند;کرانسٹون، روڈ آئلینڈ;แครนสตัน;クランストン;克兰斯顿; +city::5223869;Pawtucket;Pawtucket;Potaket;bo ta ji te;bwtkyt;patakyt rwd aylnd;phxw thak ket;potaketto;Потакет;بوتكيت;پاتاکیت، رود آیلند;پوٹکیٹ، روڈ آئلینڈ;พอว์ทักเก็ต;ポータケット;波塔基特; +city::5224151;Providence;Gorad Providehns;PVD;Provedensos;Provid"ns;Providence;Providens;Providensa;Providensas;Providentia;Provintens;Provėdensos;brwfydns;peulobideonseu;phr x wi den s;piravitens;prabhidensa;pravidens;prawydns;probhidensa;provhidansa;prwbydns;prwwyڈns rwڈ aylynڈ;pu luo wei deng si;pu luo wei dun si;purobidensu;purovu~idensu;Πρόβιντενς;Горад Провідэнс;Провиденс;Провидънс;Провіденс;Փրովիդենս;פראווידענס;פרובידנס;بروفيدنس;پراویدنس;پروویڈنس;پروویڈنس، روڈ آئلینڈ;प्रभिदेन्स;प्राविडेन्स्;प्रॉव्हिडन्स;प्रोभिडेन्स;பிராவிடென்ஸ்;พรอวิเดนซ์;プロビデンス;プロヴィデンス;普洛威頓斯;普罗维登斯;프로비던스; +city::5225507;Warwick;Shawomet;Uorik;Vorik;Vorvik;Warwick;u~orikku;war wik;warwyk;waryk rwd aylnd;wo wei ke;wolig;wwryq;Ворвик;Ворік;Уорик;ווריק;وارويك;واروک، روڈ آئلینڈ;واریک، رود آیلند;วาร์วิก;ウォリック;沃威克;워릭; +city::5231851;Sioux Falls;FSD;Siou Fols;Sioux Falls;Siuks Fols;Su Fols;Su-Fols;Sufolsa;Sūfolsa;saywks falz;siyuka folsa;su fxls;su pholsa;su pu;suforuzu;supolseu;sw falz dakwtay jnwby;sw pwls;Σιου Φολς;Сиукс Фолс;Су Фолс;Су-Фолс;סו פולס;سايوكس فالز;سو فالز، داکوتای جنوبی;سیو فالز، جنوبی ڈکوٹا;सियुक फ़ॉल्स;सू फॉल्स;ซูฟอลส์;スーフォールズ;蘇瀑;수폴스; +city::5244080;Appleton;ATW;Aplton;Appleton;Epplton;ablytwn;aepeulteon;apltwn wyskansyn;appuruton;Аплтон;Епплтон;أبليتون;اپلتون، ویسکانسین;ایپلٹن، وسکونسن;ეპლტონი;アップルトン;애플턴; +city::5251436;Eau Claire;Clearwater;EAU;Eau Claire;Eauclaire;O Kler;O Kleras;O-Klehr;O-Kler;Oklera;Oklēra;Ou Kler;aw klyr;aww klyyr wskwnsn;aywklyr wyskansyn;okeulleeo;okurea;ou ke lei er;qing shui shi;О Клер;О-Клер;О-Клэр;Оу Клер;أو كلير;اوو کلیئر، وسکونسن;ایوکلیر، ویسکانسین;โอแคลร์;ო-კლერი;オークレア;歐克雷爾;清水市;오클레어; +city::5254962;Green Bay;GRB;Green Bay;Greenbay;Grijn Bej;Grin Bej;Grin Bejus;Grin Bey;Grin Bėjus;Grin-Bej;Nkrin Bei;ge lin bei;geulinbei;ghryn bay;grin-bei;grina be;gryn byy;gurinbei;kri nbey;Γκριν Μπέι;Грийн Бей;Грин Беј;Грин-Бей;Грін-Бей;Գրին Բեյ;גרין ביי;غرين باي;گرین بے، وسکانسن;گرین‌بی، ویسکانسین;ग्रीन बे;กรีนเบย์;გრინ-ბეი;グリーンベイ;格林贝;그린베이; +city::5257754;Janesville;Black Hawk;Dzejnsvil;Dzhejnsvil';Dzhejnsvill;E-nee-poro-poro;JVL;Janesville;jaynsfyl;jeinseubil;jeinsvili;jenzubiru;jnswyl wskwnsn;jynswyl wyskansyn;Џејнсвил;Джейнсвилл;Джейнсвіль;جاينسفيل;جنسویل، وسکونسن;جینسویل، ویسکانسین;ჯეინსვილი;ジェーンズビル;제인스빌; +city::5258393;Kenosha;ENW;Kenosa;Kenosha;Kenoša;Southport;kenosha;keonosya;knwsha wyskansyn;kynwsha;kynwsha wskwnsn;qnwsh;Кеноша;Կենոշա;קנושה;كينوشا;کنوشا، ویسکانسین;کینوشا، وسکونسن;კენოშა;ケノーシャ;커노샤; +city::5258957;La Crosse;Gateway City;LSE;La Crosse;La Kros;La-Kross;Lac Rosse;Lacrosse;Prairie La Crosse;Prairie la Crosse;la ke luo si;la kras wyskansyn;la krws wskwnsn;lakrws;rakurosu;Ла Крос;Ла-Кросс;لا کراس، ویسکانسین;لا کروس، وسکونسن;لاكروس;ლა-კროსი;ラクロス;拉克罗斯; +city::5261457;Madison;Gorad Madysan;MSN;Madison;Madisonas;Madisonia;Madisons;Madisun;Mantison;Medison;Medisona;Mehdison;madisan;madison;madisoni;madyswn;maediseun;mai di xun;maidisana;mdysn wyskansyn;mdyswn;medisana;metican;Μάντισον;Горад Мадысан;Мадисон;Мадисън;Медисон;Медісон;Мэдисон;Մեդիսոն;מדיסון;ماديسون;مدیسن، ویسکانسین;میڈیسن;میڈیسون، وسکونسن;माडिसन्;मॅडिसन;मेडिसन;मैडिसन;மேடிசன்;მადისონი;マディソン;麦迪逊;매디슨; +city::5263045;Milwaukee;Gorad Miluoki;Juneautown;Kilbourntown;MKE;Mahn-a-wau-kee Seepe;Mahn-a-wauk-ee See-pe;Mahn-a-waukee Seepe;Mahn-a-waukie;Mahn-ah-wauk Seepe;Mahnawauk;Man-a-wau-kee;Man-a-wauk-ee;Man-na-wah-kie;Mana'wa;Manawaki;Manawaukee;Manayaukee;Maunahwauke;Mee-lee-waug-ee;Meliki;Melleoki;Melwarik;Meneawkee;Meolaki;Mil-wah-kie;Milgouoki;Milioke;Millewacki;Millicki;Milo-aki;Milouagui;Milouakik;Milowages;Miluoki;Miluokʻi;Milvauchia;Milvoki;Milvokio;Milvokis;Milwacky;Milwahkie;Milwalka;Milwalky;Milwarck;Milwarik;Milwaucki;Milwaukee;Milwaukie;Minewaki;Miniaki;Minnawack;Winnipesaukee;mi er wo ji;mil wxki;mil-woki;mila'oyaki;milavoki;miluokʼi;milvaki;milvakki;milvauki;miruu~oki;mlwaky;mylwaky;mylwaky wyskansyn;mylwwqy;Μιλγουόκι;Горад Мілуокі;Милвоки;Милуоки;Мілуокі;Միլուոքի;מילוואקי;מילווקי;ملواکی;ميلواكي;میلواکی، ویسکانسین;मिलवॉकी;मिल्वौकी;মিলওয়াকি;மில்வாக்கி;మిల్వాకీ;ಮಿಲ್ವಾಕೀ;มิลวอกี;მილუოკი;ミルウォーキー;密尔沃基;密爾沃基;밀워키; +city::5264870;North La Crosse;; +city::5265838;Oshkosh;Algoma;Athens;Brooklyn;OSH;Oshkosh;Oskosh;Sawdust City;ashkwsh wyskansyn;ausakosa;awshkwsh;awshkwsh wskwnsn;oshukoshu;Ошкош;אושקוש;أوشكوش;اشکوش، ویسکانسین;اوشکوش، وسکونسن;औशकोश;ოშკოში;オシュコシュ; +city::5268249;Racine;Kipikawi;Port Gilbert;RAC;Racine;Rasijn;Rasin;Rasinas;la xin;leosin;rashin;rasini;rasyn;rasyn wskwnsn;rysyn wyskansyn;Расийн;Расин;Расін;ראסין;راسين;راسین، وسکونسن;ریسین، ویسکانسین;რასინი;ラシーン;拉辛;러신; +city::5278052;Waukesha;Prairieville;UES;Uokesho;Uokisha;Vokesha;Vokisha;Waukesha;u~okisho;wakysha wyskansyn;wawkysha wskwnsn;wkysha;Вокеша;Вокиша;Уокешо;Уокиша;واوکیشا، وسکونسن;واکیشا، ویسکانسین;وكيشا;უოკეშო;ウォキショー; +city::5278420;West Allis;Vest Alis;alys ghrby wyskansyn;wyst alys;Вест Алис;آلیس غربی، ویسکانسین;ويست أليس;ویسٹ الیس، وسکونسن;უესტ-ალისი; +city::5282804;Bridgeport;BDR;Bricport;Bridgeport;Bridzhport;Bridzport;Bridzporta;Bridzportas;Bridžporta;Bridžportas;Gorad Brydzhpart;Newfield;Park City;Stratfield;beulijipoteu;brijaporta;brydgpwrt;brydjbwrt;bryjpwrt kntykt;bu li qi bo te;burijjipoto;Бриджпорт;Бриџпорт;Бріджпорт;Горад Брыджпарт;ברידגפורט;برج پورٹ، کنیکٹیکٹ;بريدجبورت;بریجپورت، کنتیکت;ब्रिजपोर्ट;ブリッジポート;布里奇波特;브리지포트; +city::5282835;Bristol;Bristol;Bristol';Bristul;Mixville Brook;beuliseuteul;bristala;brystwl;brystwl kntykt;bu li si tuo er;burisutoru;Бристол;Бристоль;Бристъл;برسٹل، کنیکٹی کٹ;بريستول;بریستول، کنتیکت;ब्रिस्टल;ブリストル;布里斯托尔;브리스틀; +city::5287262;Buckeye;BXK;Bakaj;Buckeye;Bukaj;Sydney;ba ke ai;baka'a'i;bakay aryzwna;bakyy;bkayy ayryzwna;Бакай;Бакај;Бъкай;باكيي;باکای، آریزونا;بکآئی، ایریزونا;बकआइ;巴克艾; +city::5288636;Casa Grande;CGZ;Casa Grande;Casagrande;Kasa Grand;Kasa Grande;Kasa-Grande;ka sa ge lan de;kaesageulaendi;kasa gryanda;kaza ghrandy;kaza grandh;Каса Гранд;Каса Гранде;Каса-Гранде;كازا غراندي;کازا گرانده;कासा ग्र्यान्ड;卡萨格兰德;캐사그랜디; +city::5288661;Casas Adobes;Casas Adobes;Kasas Adobes;Kazas-Edobs;kasas adwbz;kasas edobej;Казас-Едобс;Касас Адобес;كاساس أدوبز;कासास् एडोबेज्; +city::5288786;Catalina Foothills;Catalina Foothills; +city::5289282;Chandler;Candler;Candleris;Chandler;Chandler Junction;Chandlur;chaendeulleo;chandora;chndlr aryzwna;cyandlara;qian de lei;tshandlr;Çandler;Čandleris;Чандлер;Чандлър;تشاندلر;چانڈلر، ایریزونا;چندلر، آریزونا;च्यान्ड्लर;チャンドラー;钱德勒;챈들러; +city::5294810;Flagstaff;FLG;Flagstaf;Flagstaff;Flankstaf;Flegstaff;Kinlani;Kinłání;Milltown;Skylight City;flaghstaf;flgstf aryzwna;fu la ge si ta fu;furaggusutaffu;peullaegeuseutaepeu;phlegastapha;phlyagastapha;plgstp;Φλάγκσταφ;Флагстаф;Флагстафф;Флегстафф;פלגסטף;فلاغستاف;فلگستف، آریزونا;فلیگ سٹاف، ایریزونا;फ्लॅगस्टाफ;फ्ल्यागस्टाफ;แฟลกสแตฟฟ์;ፍላግስታፍ፥ አሪዞና;フラッグスタッフ;弗拉格斯塔夫;플래그스태프; +city::5295903;Gilbert;Gilbert;Gilbertas;Gilburt;gilbarta;gilbeoteu;girubato;gylbrt;gylbrt aryzwna;ji er bo te;Гилберт;Гилбърт;Гілберт;גילברט;گلبرٹ، ایریزونا;گیلبرت، آریزونا;गिल्बर्ट;ギルバート;吉尔伯特;길버트; +city::5295985;Glendale;Glendale;Glendeilas;Glendejl;Gorad Glendehjl;Nklenteil;Qlendeyl;ge lan dai er;geullendeil;ghlandyl;glenadela;glndyl aryzwna;glndyyl;gurenderu;Γκλέντεϊλ;Глендейл;Глендејл;Горад Глендэйл;גלנדייל;غلانديل;گلندیل، آریزونا;گلنڈیل، ایریزونا;ग्लेनडेल;グレンデール;格蘭岱爾;글렌데일; +city::5296266;Goodyear;Egypt;GYR;Goodyear;Goodyear Farms;Gudier;Gudir;Gudiur;Gudjer;ghwdyyr;gudayara;guddoiya;gwdyr aryzwna;jia nian;Гудиер;Гудиър;Гудїр;Гудјер;غوديير;گودیر، آریزونا;گڈایر، ایریزونا;गूडयर;グッドイヤー;嘉年; +city::5301388;Lake Havasu City;HII;Lejk Khavasu Siti;Lejk-Gavasu-Siti;Lejk-Khavasu-Siti;ha wa su hu cheng;leikeuhaebeosusiti;leka habhasu siti;lyk hafasw syty;lyk hawasw syty aryzwna;reikuhabasushiti;Лейк Хавасу Сити;Лейк-Гавасу-Сіті;Лейк-Хавасу-Сити;Лејк Хавасу Сити;לייק האווסו סיטי;ليك هافاسو سيتي;لیک هاواسو سیتی، آریزونا;لیک ہاواسو سٹی، اریزونا;लेक हभासु सिटी;レイクハバスシティ;哈瓦苏湖城;레이크해버수시티; +city::5304391;Mesa;Gorad Mesa;Hayden;MSC;Mejsa;Mesa;Mesa City;Zenos;me sa;mei sa;mesa;msh;mysa;mysa ayryzwna;myza;Μέσα;Горад Меса;Мейса;Меса;Մեսա;מסה;ميسا;میزا;میسا، ایریزونا;मेसा;মেসা;เมซา;მესა;メサ;梅薩;메사; +city::5308480;Peoria;Peori;Peoria;Peorija;Piorija;bywrya;pe'oriya;pi ao li ya;pioria;pywrya aryzwna;pywrya ayryzwna;Пеори;Пеория;Пиорија;Піорія;بيوريا;پیوریا، آریزونا;پیوریا، ایریزونا;पेओरिया;ピオリア;皮奧里亞; +city::5308655;Phoenix;East Phoenix;Feniks;Fenikso;Finiks;Finiksa;Finiksas;Finiksos;Foinix;Féniks;Fīniksa;Gorad Finiks;Hellings Mill;Hoozdoh;Mill City;PHX;Peniki;Phenix;Phoeniks;Phoenix;Pumpkinsville;Pēniki;Salt River;Smith Station;Smith Station Phenix;Smiths Station;feng huang cheng;fenikkusu;finikasa;finiks;finiksa;fynks;fynyks;fynyks aryzwna;phiniks;phiniks nagaram;phiniksa;pinigseu;piniks;piniksi;pnyqs;pynyqs;Φοίνιξ;Горад Фінікс;Финикс;Фінікс;Ֆինիքս;פיניקס;פניקס;فينيكس;فینکس;فینیکس، آریزونا;फ़ीनिक्स;फिनिक्स;फिनिक्स्;फीनिक्स;ফিনিক্স;ਫ਼ੀਨਿਕਸ;பீனிக்ஸ்;ఫీనిక్స్ నగరం;ಫೀನಿಕ್ಸ್;ഫീനിക്സ്;ฟีนิกซ์;ფინიქსი;ፊኒክስ፥ አሪዞና;フェニックス;凤凰城;鳳凰城;피닉스; +city::5313457;Scottsdale;SCF;Scottsdale;Skotsdejl;Skottsdejl;seukocheudeil;si ke ci dai er;skatasdela;skatzdyl aryzwna;skwtsdyl;sqwtsdyyl;sukottsuderu;Скотсдейл;Скотсдејл;Скоттсдейл;סקוטסדייל;سكوتسديل;سکاتزدیل، آریزونا;سکاٹسڈیل، ایریزونا;स्कटस्डेल;スコッツデール;斯科茨代爾;스코츠데일; +city::5316428;Surprise;Ennis;Serprajz;Sjurprajz;Sjurpriz;Surprajz;Surprise;sapuraizu;sarpra'ija;se pu lai si;seopeulaijeu;swpryyz;swrbrayz;swrprayz aryzwna;Серпрайз;Сурпрајз;Сърпрайз;Сюрпрайз;Сюрприз;סופרייז;سوربرايز;سورپرایز، آریزونا;सर्प्राइज;サプライズ;瑟普赖斯;서프라이즈; +city::5317058;Tempe;Butte City;Haydens Butte;Haydens Ferry;Haydens Mill;San Pablo;Tempe;Tempi;tan pei;tempe;tempi;tenpi;tmb;tmpy aryzwna;Темпе;Темпи;Темпі;تمب;تمپی، آریزونا;ٹیمپے، ایریزونا;तेम्पे;テンピ;坦佩;템피; +city::5317071;Tempe Junction;; +city::5318313;Tucson;Fucson;Gorad Tusan;Lucson;San Casme del Tucson;TUS;Takson;Teuson;Toison;Touson;Tucson;Tuczon;Tugson;Tuguison;Tuison;Tuksonas;Tulquson;Tuozon;Tuquisson;Tuqulson;Tuson;Tusona;Tūsona;taksana;thu sxn;tsuson;tu sen;tusana;tuson;tusona;twsan;twswn;tʼusoni;Τουσόν;Горад Тусан;Тусон;Թուսոն;טוסון;توسان;توسون;ٹوسان، ایریزونا;टक्सन;तुसॉन;টুসান;ทูซอน;ტუსონი;ツーソン;图森;투손; +city::5322053;Yuma;Arizona;Arizona City;Colorado City;Doonysio;Juma;La Purisima Concepcion;Pueblo de la Concepcion;Puutsiyumah;San Dionisio;San Dionysio;YUM;Yuma;Yuma City;Yumas;you ma;yuma;ywma;ywma aryzwna;ywma ayryzwna;ywmh;Јума;Юма;יומה;يوما;یوما، آریزونا;یوما، ایریزونا;युमा;ዩማ፥ አሪዞና;ユマ;尤馬; +city::5322737;Alameda;Alameda;Alamida;Alaminta;a la mi da;aelleomida;alamda kalyfrnya;alameda;alamyda;arameda;Αλαμήντα;Аламеда;Аламида;آلامدا، کالیفرنیا;ألاميدا;अलामेदा;アラメダ;阿拉米達;앨러미다; +city::5323060;Alhambra;Al'gambra;Algambra;Alhambra;Alkhambra;a han bu la;alhambra;alhambra kalyfrnya;alhmra kylyfwrnya;el'hambra;Алгамбра;Алхамбра;Альгамбра;آلهامبرا، کالیفرنیا;ألهامبرا;الحمرا، کیلیفورنیا;الہامبرا;एल्हाम्ब्रा;阿罕布拉; +city::5323163;Aliso Viejo;Aliso Viekho;Aliso Vijekho;alysw fyjw;alysw wyjw kalyfrnya;eliso bhiyo;ya li suo wei ye he;Алисо Виехо;Алисо Вијехо;آلیسو ویجو، کالیفرنیا;أليسو فيجو;एलिसो भियो;アリソ・ビエホ;亚里索维耶荷; +city::5323810;Anaheim;ANA;Anachaim;Anahaima;Anahaym;Anaheim;Anaheimas;Anakhajm;Campo Aleman;Gorad Anakhajm;a na hai mu;aeneohaim;an na han;anahaimi;anahaimu;anahaym;anahaym kalyfrnya;enaha'ima;Άναχαϊμ;Анахайм;Анахајм;Горад Анахайм;Անահայմ;אנאהיים;אנהיים;آناهايم;آناهایم، کالیفرنیا;اناہیم، کیلیفورنیا;ایناہیم;अ‍ॅनाहाइम;एनाहाइम;ანაჰაიმი;アナハイム;安那罕;阿納海姆;애너하임; +city::5324200;Antioch;Antioch;Antiocheia;Antiok;Antiokas;East Antioch;Marshs Landing;Smith's Landing;an tiao ke;antiokku;antywch kalyfrnya;antywk;entiyaka;Αντιόχεια;Антиок;Антиоч;آنتیوچ، کالیفرنیا;أنتيوك;اینٹیوخ;एन्टियक;アンティオック;安條克; +city::5324363;Apple Valley;APV;Apple Valley;Apul Vali;Epl Vali;abbl faly;aepeulbaelli;apl wly kalyfrnya;aypl wyly kylyfwrnya;eppala bhyali;ping guo gu;Апъл Вали;Епл Вали;أببل فالي;اپل ولی، کالیفرنیا;ایپل ویلی، کیلیفورنیا;एप्पल भ्याली;苹果谷;애플밸리; +city::5324477;Arcadia;Arkadija;Arkejdija;akeidia;arkadiya;arkadya;arkadya kalyfrnya;ya kai di ya;Аркадия;Аркадія;Аркејдија;آرکادیا، کالیفرنیا;آرکیڈیا، کیلیفورنیا;أركاديا;आर्काडिया;亞凱迪亞;아케이디아; +city::5325738;Bakersfield;Alkali City;BFL;Baker's Field;Bakersfield;Beikersfilda;Beikersfildas;Beikersfilnt;Beikersfīlda;Bejkersfild;Bejkursfijld;Beykersfild;Kern Island;bei ke si fei er de;beikeojeupildeu;bekarsaphilda;bekazufirudo;bykrsfyld;bykrzfyld kalyfrnya;byyqrspyld;Μπέικερσφιλντ;Бейкерсфилд;Бейкерсфілд;Бейкърсфийлд;Бејкерсфилд;Բեյկերսֆիլդ;בייקרספילד;بيكرسفيلد;بیکرزفیلد، کالیفرنیا;بیکرزفیلڈ;بیکرزفیلڈ، کیلیفورنیا;बेकर्सफिल्ड;बेकर्सफील्ड;ბეიკერსფილდი;ベーカーズフィールド;贝克斯菲尔德;베이커즈필드; +city::5325866;Baldwin Park;Baldwin Park;Bolduin Park;Bolduin-Park;Boldvin Park;Boldvin-Park;baldavina parka;baldwyn bark;baldwyn park kalyfrnya;bao de wen gong yuan;Болдвин Парк;Болдвін-Парк;Болдуин Парк;Болдуин-Парк;بالدوين بارك;بالدوین پارک، کالیفرنیا;بالڈون پارک، کیلیفورنیا;बाल्डविन पार्क;鲍德温公园; +city::5327422;Bellflower;Belflauer;Belflauur;Bellflauehr;Bellflaver;Bellflower;Somerset;bei er fu lao er;belaphlavara;belpeullawo;berufurawa;blflawr kalyfrnya;bylflawr kylyfwrnya;bylflawyr;Беллфлавер;Беллфлауэр;Белфлауер;Белфлауър;بلفلاور، کالیفرنیا;بيلفلاوير;بیلفلاور، کیلیفورنیا;बेलफ्लावर;ベルフラワー;贝尔弗劳尔;벨플라워; +city::5327684;Berkeley;Berkeleia;Berkeley;Berkli;Berklis;Burkli;Bērkli;Gorad Berkli;JBK;bakure;bakuri;barkali;barkeli;barkli;beokeulli;bo ke li;brkly kalyfrnya;brqly;byrkyly;Беркли;Берклі;Бъркли;Горад Берклі;ברקלי;برکلی، کالیفرنیا;برکلے;بيركيلي;बर्कली;बर्केली;बर्क्ली;ბერკლი;バークリー;バークレー;伯克利;버클리; +city::5330413;Boyle Heights;; +city::5330642;Brentwood;Brentud;Brentvud;beulenteuudeu;brentavuda;brnt wwd kalyfrnya;bryntwwwd;bu lun te wu de;burentoudo;Брентвуд;Брентуд;برنت وود، کالیفرنیا;برينتووود;برینٹووڈ، کیلیفورنیا;ब्रेन्टवूड;ブレントウード;布伦特伍德;브렌트우드; +city::5331575;Buena Park;Buehna-Park;Buena Park;Buenapark;Northam;buenapaku;buyana parka;bwyna bark;bwyna park;bywna park kalyfrnya;pu an na gong yuan;Буена Парк;Буэна-Парк;بوينا بارك;بوینا پارک;بیونا پارک، کالیفرنیا;बुयना पार्क;ブエナパーク;普安那公园; +city::5331835;Burbank;B"rbank;BUR;Berbank;Berbanka;Berbankas;Bermpan'k;Burbank;Bērbanka;babanku;barbyanka;beobaengkeu;bo ban ke;brbank;brbnk;brbnk kalyfrnya;brbnq;brbynk kylyfwrnya;Μπέρμπανκ;Бербанк;Бърбанк;Բըրբանք;ברבנק;بربانك;بربنک;بربنک، کالیفرنیا;بربینک، کیلیفورنیا;बर्ब्याङ्क;เบอร์แบงก์;バーバンク;伯班克;버뱅크; +city::5333180;Camarillo;Camarillo;Camarillo Station;Kamaril'jo;Kamaril'o;Kamarilo;Pleasant Valley;ka ma li ao;kaemeolillo;kamariro;kamarylw;kamarylw kalyfrnya;kyamarillo;Камарило;Камарильо;Камарільйо;كاماريلو;کاماریلو، کالیفرنیا;क्यामारिल्लो;カマリロ;卡马里奥;캐머릴로; +city::5333913;Canoga Park;Canoga Park;Owensmouth; +city::5334223;Carlsbad;Carlsbad;Frazier's Station;Karlsbad;ka er si ba de;kaljeubaedeu;karlsabada;karlsbad;karls‌bd kalyfrnya;karusubaddo;Карлсбад;كارلسباد;کارلزبیڈ;کارلس‌بد، کالیفرنیا;कार्ल्सबाद;คาร์ลสแบด;カールスバッド;卡尔斯巴德;칼즈배드; +city::5334336;Carmichael;Karmajkl;Karmajkul;karmisela;Кармайкл;Кармайкъл;Кармајкл;कार्मिशेल; +city::5334519;Carson;Carson;Karson;Karsun;Lungsod ng Carson;ka sen;karsana;karsn;karswn;karswn kalyfrnya;kaseun;kason;Κάρσον;Карсон;Карсън;كارسون;کارسن;کارسون، کالیفرنیا;कार्सन;カーソン;卡森;카슨; +city::5334928;Castro Valley;Castro Valley;Kastro Vali;kaeseuteulobaelli;kyastro bhyali;Кастро Вали;क्यास्ट्रो भ्याली;캐스트로밸리; +city::5335006;Cathedral City;Katidral Siti;Katidral-Siti;Kutidrul Siti;Lungsod ng Cathedral;da jiao tang cheng;kathydral syty;ktdral syty kalyfrnya;kyathedrala siti;Катидрал Сити;Катидрал-Сити;Кътидръл Сити;كاثيدرال سيتي;کتدرال سیتی، کالیفرنیا;क्याथेड्रल सिटी;大教堂城; +city::5336269;Chico;CIC;Chico;Chiko;chiko;chykw;chykw kalyfrnya;ciko;qi ke;tshykw;Чико;Чіко;Չիքո;تشيكو;چیکو;چیکو، کالیفرنیا;चिको;チコ;奇科;치코; +city::5336537;Chino;CNO;Chino;chino;chynw;chynw kalyfrnya;qi nuo;sino;tshynw;Чино;Чіно;تشينو;چینو;چینو، کالیفرنیا;शिनो;チノ;奇诺;치노; +city::5336545;Chino Hills;; +city::5336899;Chula Vista;Chula Vista;Chula-Vista;Chulavista;Cula Vista;chullabiseuta;churabisuta;chwla wsta;chwla wysta kalyfrnya;cula bhista;qiu la wei si ta;tshwla fysta;zwlh wysth;Čula Vista;Чула Виста;Чула-Виста;Чула-Віста;צולה ויסטה;تشولا فيستا;چولا وستا;چولا ویستا، کالیفرنیا;चुला भिस्टा;チュラビスタ;丘拉維斯塔;출라비스타; +city::5337561;Citrus Heights;Citrus Heights;Sitrus Khajts;gan ju gao de;sa'itrasa ha'itsa;sytrws hayts kalyfrnya;sytrws hyayts;Ситрус Хајтс;Ситръс Хайтс;سيتروس هيايتس;سٹرس ہائٹس;سیتروس هایتس، کالیفرنیا;साइट्रस हाइट्स;柑橘高地; +city::5338122;Clovis;Clovis;Klovis;ke luo wei si;keullobiseu;klobhisa;klwfys;klwws;klwwys kalyfrnya;kurovu~isu;Кловис;كلوفيس;کلووس;کلوویس، کالیفرنیا;क्लोभिस;クローヴィス;克洛维斯;클로비스; +city::5338783;Colton;Kolton;Koltun;ke er dun;koltana;kolteon;kwltwn;kwltwn kalyfrnya;Колтон;Колтън;كولتون;کولتون، کالیفرنیا;کولٹن، کیلیفورنیا;कोल्टन;科尔顿;콜턴; +city::5339066;Compton;Compton;Kompton;Komptun;kamptana;kamptwn kalyfrnya;kang pu dun;kompeuteon;konputon;kwmbtwn;qwmptwn;Комптон;Комптън;קומפטון;كومبتون;کامپتون، کالیفرنیا;کامپٹن، کیلیفورنیا;کیمپٹن;कम्प्टन;コンプトン;康普顿;콤프턴; +city::5339111;Concord;CCR;Concord;Drunken Indian;Konkord;Todos Santos;kang ke de;kankarda;kankwrd kalyfrnya;konkodo;kwnkwrd;qwnqwrd;Конкорд;קונקורד;كونكورد;کانکورد، کالیفرنیا;کونکورڈ;کونکورڈ، کیلیفورنیا;कन्कर्ड;コンコード;康科德; +city::5339631;Corona;Circle City;Corona;Korona;South Riverside;ke luo na;kolona;korona;kwrwna;kwrwna kalyfrnya;Корона;كورونا;کورونا;کورونا، کالیفرنیا;कोरोना;コロナ;科洛納;코로나; +city::5339840;Costa Mesa;Costa Mesa;Costa Mesa (Orange County);Fairview;Goat Hill;Harper;Kosta Mesa;Kosta-Mesa;Thurin;ke si ta mei sa;kosta mesa;kosutamesa;kwsta msa kalyfrnya;kwsta mysa;Коста Меса;Коста-Меса;كوستا ميسا;کوستا مسا، کالیفرنیا;کوسٹا میسا;कोस्टा मेसा;コスタメサ;科斯塔梅薩; +city::5341145;Cupertino;Cupertino;Kupertino;ku bi di nuo;kupachino;kupartino;kupeotino;kwbyrtynw;kwprtynw kalyfrnya;kyuparatino;qwprtynw;Купертино;Купертіно;קופרטינו;كوبيرتينو;کوپرتینو، کالیفرنیا;کپرٹینو;कुपर्तिनो;कूपर्टीनो;क्युपरटिनो;クパチーノ;庫比蒂諾;쿠퍼티노; +city::5341430;Daly City;Daly City;Dalyurbo;Dejli Siti;Dejli-Siti;Lungsod ng Daly;Thanh pho Daly;Thành phố Daly;dai li cheng;daly syty;deillisiti;deirishiti;deli siti;dyly syty kalyfrnya;Дейли Сити;Дейли-Сити;Дејли Сити;دالي سيتي;دیلی سیتی، کالیفرنیا;ڈالی سٹی;ڈالی سٹی، کیلیفورنیا;डेली सिटी;デイリーシティ;戴利城;데일리시티; +city::5341704;Davis;Davies;Davis;Davisville;Dejvis;Devis;dafys;dai wei si;debhisa;deibiseu;deibisu;dywys kalyfrnya;Девіс;Дейвис;Дејвис;دافيس;دیویس، کالیفرنیا;ڈیوس، کیلیفورنیا;डेभिस;デイビス;戴維斯;데이비스; +city::5342485;Delano;Delano;Delejno;de la nuo;delyano;dlanw kalyfrnya;dylanw;Делано;Делејно;دلانو، کالیفرنیا;ديلانو;डेल्यानो;德拉诺; +city::5342992;Diamond Bar;Dajmond Bar;Dajmond-Bar;Dajmund Bar;dayamanda bara;dyamwnd bar;dyamwnd bar kalyfrnya;zuan shi ba;Даймонд-Бар;Даймънд Бар;Дајмонд Бар;دياموند بار;دیاموند بار، کالیفرنیا;डायमन्ड बार;钻石吧; +city::5343858;Downey;Dauni;Daunis;Davni;Downey;da'uni;dauni;dawny;dwny kalyfrnya;tang ni;Давні;Дауни;داوني;دونی، کالیفرنیا;ڈاؤنی;डाउनी;ダウニー;唐尼;다우니; +city::5344157;Dublin;Amador;Dablin;Dougherty's Station;Dublin;dablina;deobeullin;dou bo lin;dwblyn;dwblyn kalyfrnya;Даблин;Дублин;Дублін;Дъблин;دوبلين;دوبلین، کالیفرنیا;ڈبلن، کیلیفورنیا;डब्लिन;都伯林;더블린; +city::5344994;East Los Angeles;East Los Angeles;Este de Los Angeles;Este de Los Ángeles;Ist Los Andzeles;Orienta Losangeleso;Orienta Losanĝeleso;dong luo shan ji;iseuteuloseuaenjelleseu;ista lasa enjelsa;isutorosanzerusu;Ист Лос Анџелес;इस्ट लस एन्जेल्स;イーストロサンゼルス;东洛杉矶;이스트로스앤젤레스; +city::5345529;El Cajon;CJN;Ehl'-Kakhon;El Cajon;El Cajón;El Kakhon;Elcajon;ai er ka hong;al kajwn;al kajwn kalyfrnya;alkahwn;ela kyayom;elkahon;erukahon;Ел Кахон;Эль-Кахон;ال کاجون;ال کاجون، کالیفرنیا;الكاهون;एल क्यायों;エルカホン;埃尔卡洪;엘카혼; +city::5345743;El Monte;EMT;Ehl'-Monte;El Monte;El Monti;El Montė;Elmonte;Monte;ai er meng de;al mwnth kalyfrnya;al mwnty;ela monte;erumonte;Ел Монте;Ел Монти;Эль-Монте;إل مونتي;ال مونته، کالیفرنیا;ال مونٹی;एल मोन्ते;エルモンテ;艾爾蒙地; +city::5346111;Elk Grove;Ehlk-Grov;Elk Grouv;Elk Grove;Elk-Grouv;Elkgrove;ai er ke ge luo fu;al kgrww kalyfrnya;alk ghrwfy;alk grww;elka grobha;elkeugeulobeu;erukugurobu;Елк Гроув;Елк-Ґроув;Элк-Гров;إلك غروفي;ال کگروو، کالیفرنیا;الک گروو;एल्क ग्रोभ;エルクグローブ;埃爾克格羅夫;엘크그로브; +city::5346646;Encinitas;Ehnsinitas;Encenitos;Encinitas;Encinitos;Ensinitas;ansynytas;ansynytas kalyfrnya;en xi ni ta si;ensinitasa;ensiniteoseu;Енсинитас;Енсінітас;Энсинитас;إنسينيتاس;انسینیتاس، کالیفرنیا;एन्सिनितास;恩西尼塔斯;엔시니터스; +city::5346827;Escondido;Apex;Ehskondido;Escondido;Eskondidas;Eskondido;ai si kong di duo;askandydw kalyfrnya;askwndydw;eseukondido;eskandido;esukondido;Ескондидо;Эскондидо;إسكونديدو;اسکاندیدو، کالیفرنیا;اسکونڈیڈو;एस्कन्डिडो;エスコンディード;埃斯孔迪多;에스콘디도; +city::5347335;Fairfield;Fairfield;Fehrfild;Fejrfild;Ferfild;Ferfildas;Feurfijld;SUU;feafirudo;fei er fei er de;fyrfyld;fyrfyld kalyfrnya;peeopildeu;pheyaraphilda;Фейрфілд;Ферфилд;Феърфийлд;Фэрфилд;فئرفیلڈ;فيرفيلد;فیئرفیلڈ، کیلیفورنیا;فیرفیلد، کالیفرنیا;फेयरफिल्ड;フェアフィールド;費爾菲爾德;페어필드; +city::5349705;Folsom;Folsom;Folsom City;Folsum;fu sen;fwlswm;fwlswm kalyfrnya;pholsama;Фолсом;Фолсъм;فولسوم;فولسوم، کالیفرنیا;फोल्सम;佛森; +city::5349755;Fontana;Fontana;Rosena;fang ta na;fontana;fwntana;fwntana kalyfrnya;phontana;pontaena;Фонтана;فونتانا;فونتانا، کالیفرنیا;فونٹانا;فونٹانا، کیلیفورنیا;फोन्टाना;フォンタナ;方塔納;폰태나; +city::5350207;Fountain Valley;Fauntin Vali;Fauntun Vali;Fountain Valley;Talbert;fang quan gu;fantyn wly kalyfrnya;fwwntyn faly;pauntinbaelli;pha'untena bhyali;Фаунтин Вали;Фаунтън Вали;فانتین ولی، کالیفرنیا;فوونتين فالي;फाउन्टेन भ्याली;芳泉谷;파운틴밸리; +city::5350734;Fremont;Centerville;Centreville;Fremont;Fremontas;Frimont;Hardscrabble;Irvington;Mission San Jose;Nikes;Warm Springs;fei li meng;frymant kalyfrnya;frymwnt;furimonto;peulimonteu;phremonta;phrimamta;prymwnt;Фремонт;Фримонт;פרימונט;فريمونت;فریمانت، کالیفرنیا;فریمونٹ;فریمونٹ، کیلیفورنیا;फ्रिमाँट;फ्रेमोन्ट;フリーモント;費利蒙;프리몬트; +city::5350937;Fresno;FAT;Fraxinus;Fresnas;Fresno;Fresno i California;Frezno;Gorad Frehsna;fers no;frnsw kylyfwrnya;frynsw;frysnw;frznw;fu lei si nuo;furezuno;peulejeuno;phresano;phresno;presno;prznw;Φρέσνο;Горад Фрэсна;Фрезно;Фресно;Ֆրեզնո;פרזנו;فرزنو;فرنسو، کیلیفورنیا;فريسنو;فرینسو;फ्रेस्नो;ফ্রেসনো;เฟรสโน;ფრესნო;フレズノ;弗雷斯诺;프레즈노; +city::5351247;Fullerton;FUL;Fulerton;Fulertonas;Fullerton;Fulurtun;fu lei dun;furaton;fwlrtwn kalyfrnya;fwlyrtwn;phularatana;Фулертон;Фуллертон;Фулъртън;فلرٹن;فلرٹن، کیلیفورنیا;فولرتون، کالیفرنیا;فوليرتون;फुलरटन;フラートン;富勒顿; +city::5351515;Garden Grove;Garden Grouv;Garden Grov;Garden Grovas;Garden Grove;Garden-Grov;Gardengrove;Gardun Grouv;gadengurobu;gadeungeulobeu;gardena grobha;gardn grww kalyfrnya;ghardyn ghrwfy;jia deng ge luo fu;Гарден Гров;Гарден Гроув;Гарден-Гров;Гардън Гроув;غاردين غروفي;گاردن گروو، کالیفرنیا;گارڈن گروو;गार्डेन ग्रोभ;ガーデングローブ;加登格羅夫;가든그로브; +city::5351549;Gardena;Gardena;Gardina;gadena;gardena;gardna kalyfrnya;ghardyna;jia di na;Гардена;Гардина;غاردينا;گاردنا، کالیفرنیا;गार्डेना;ガーデナ;加迪纳;가데나; +city::5352214;Gilroy;Gilroj;Gilroy;Pleasant Valley;ghylrwy;gilro'i;giruroi;glrwy kylyfwrnya;gylrwy kalyfrnya;ji er luo yi;Гилрой;Гилрој;Гілрой;غيلروي;گلروی، کیلیفورنیا;گیلروی، کالیفرنیا;गिल्रोइ;ギルロイ;吉尔罗伊; +city::5352423;Glendale;Glendale;Glendeilas;Glendejl;Glendel;Gorad Glendehjl;JGX;Mason;Riverdale;ge lun dai er;geullendeil;ghlyndyl;glenadela;glndyl;glndyyl;gurenderu;Глендейл;Глендејл;Горад Глендэйл;Ґлендейл;Գլենդել;גלנדייל;غلينديل;گلندیل;گلینڈیل;ग्लेनडेल;グレンデール;格倫代爾;글렌데일; +city::5352439;Glendora;Glendora;ge lun duo la;ghlyndwra;glenadora;glndwra kalyfrnya;Глендора;غليندورا;گلندورا، کالیفرنیا;ग्लेनडोरा;格伦多拉; +city::5354819;Hacienda Heights;Khacijenda Khajts;asiendahaicheu;asynda hayts kalyfrnya;ha xian da gang;hyasi'enda ha'itsa;Хацијенда Хајтс;آسیندا هایتس، کالیفرنیا;ह्यासिएन्डा हाइट्स;哈仙達崗;아시엔다하이츠; +city::5355180;Hanford;Hanford;Khanford;Khehnford;Khenford;haenpeodeu;han fu de;hanfodo;hanfwrd;hyanapharda;Ханфорд;Хенфорд;Хэнфорд;هانفورد;ह्यानफर्ड;ハンフォード;汉福德;핸퍼드; +city::5355828;Hawthorne;HHR;Hawthorne;Khotorn;hahtharna;hawthwrny;hawtwrn;hoson;huo sang;Хоторн;هاوتورن;هاوثورني;ہاتھورن;ہاوتھرون، کیلیفورنیا;हःथर्न;ホーソーン;霍桑;호손; +city::5355933;Hayward;Gejvard;HWD;Hayward;Hayward Station;Hayward's;Haywards;Haywards Station;Haywood;Heivordas;Kheju"rd;Khejvard;hai wo de;hayward;heiwado;heiwodeu;hevarda;hywrd kalyfrnya;Гейвард;Хейвард;Хейуърд;Хејвард;هايوارد;هیورد، کالیفرنیا;ہےوارڈ;हेवार्ड;ヘイワード;海沃德;헤이워드; +city::5356277;Hemet;HMT;Hemet;Hemicia;Khemet;he mi te;hemeta;hmt kalyfrnya;hymyt;Хемет;همت، کالیفرنیا;هيميت;ہیمٹ;ہیمٹ، کیلیفورنیا;हेमेट;赫米特; +city::5356576;Hesperia;Hesperia;Khespirija;heseupelia;hespariya;hsprya kalyfrnya;hysbyrya;xi si pi li ya;Хеспирия;Хеспирија;هسپریا، کالیفرنیا;هيسبيريا;ہسپیریا;हेस्परिया;希斯皮里亚;헤스페리아; +city::5356868;Highland;Highland;Highlands;Khajland;ha'ilyanda;hai lan;haillaendeu;hayland;haylnd kalyfrnya;Хайланд;Хајланд;هايلاند;هایلند، کالیفرنیا;हाइल्यान्ड;海兰;하일랜드; +city::5358705;Huntington Beach;Gantington-Bich;Hantington Bycas;Hantington Byčas;Huntington Beach;Kh"ntingt"n Bijch;Khantington Bich;Khantington-Bich;Pacific Beach;Pacific City;han ting tan bich;hantingatana bica;hantintonbichi;hantyngtwn bych kalyfrnya;heng ting dun bi qi;heontingteonbichi;hwntynghtwn bytsh;Гантінґтон-Біч;Хантингтон Бич;Хантингтон-Бич;Хънтингтън Бийч;هانتینگتون بیچ، کالیفرنیا;هونتينغتون بيتش;ہنٹنگٹن بیچ;हन्टिंगटन बीच;ฮันติงตันบีช;ハンティントンビーチ;亨廷頓比奇;헌팅턴비치; +city::5358736;Huntington Park;Huntington Park;Khantington Park;Khantington-Park;Khuntingtun Park;hantingatana parka;hantyngtwn park;heng ting dun gong yuan;hwntynghtwn bark;Хантингтон Парк;Хантингтон-Парк;Хънтингтън Парк;هانتینگتون پارک;هونتينغتون بارك;ہنٹنگٹن پارک، کیلیفورنیا;हन्टिंगटन पार्क;亨廷顿公园; +city::5359446;Indio;Indian Wells;Indio;Indiou;andyw;ayndyw kalyfrnya;indio;indiyo;yin di ao;Індіо;Индио;Индиоу;إنديو;ایندیو، کالیفرنیا;इन्डियो;インディオ;印第奥;인디오; +city::5359488;Inglewood;Inglewood;Inglvud;Inglvudas;Ingulud;anghlywwwd;aynglwwd kalyfrnya;in'gelavuda;ing-geul-udeu;inguruuddo;ying ge er wu de;Інґлвуд;Инглвуд;Ингълуд;Ինգլվուդ;אינגלווד;إنغليووود;انگل ووڈ;انگلووڈ، کیلیفورنیا;اینگلوود، کالیفرنیا;इन्गेलवूड;イングルウッド;英格爾伍德;잉글우드; +city::5359777;Irvine;"rvajn;Ervajn;Irvajn;Irvin;Irvinas;Irvine;abain;arfayn;arwayn;arwayn kalyfrnya;eobain;er wan;ou wen;Ервайн;Ервајн;Ирвайн;Ирвин;Ървайн;אירוויין;إرفاين;اروائن;ارواین، کالیفرنیا;アーバイン;歐文;爾灣;어바인; +city::5363922;La Habra;La Khabra;la ha bu la;la habra;la habra kalyfrnya;Ла Хабра;لا هابرا;لا هابرا، کالیفرنیا;ला हाब्रा;拉哈布拉; +city::5363990;La Mesa;Allison Springs;La Mesa;La Mesa Heights;La Mesa Springs;Lamesa;la mesa;la mi sa;la msa kalyfrnya;la mysa;Ла Меса;لا مسا، کالیفرنیا;لا ميسا;ला मेसा;拉米萨; +city::5364329;Laguna Niguel;Laguna Nigel;Laguna Niguel;laghwna nyghwyl;laguna nigela;lagwna nygwyl kalyfrnya;ni gu hu;Лагуна Нигел;لاغونا نيغويل;لاگونا نیگوئل، کالیفرنیا;लागुना निगेल;尼古湖; +city::5364499;Lake Elsinore;Elsinore;Etengvo;Etengvo Wumona;Laguna;Laguna Grande;Lake Elsinore;Lejk Elsinor;Lejk Elzinor;Lejk-Ehlsinor;Machadao;Machado;Wamoma;hu ai er xi nuo;lak alsynwry;leka elsinora;lyk al synwr kalyfrnya;lyk aylsynwry kylyfwrnya;Лейк Елзинор;Лейк-Элсинор;Лејк Елсинор;لاك إلسينوري;لیک ال سینور، کالیفرنیا;لیک ایلسینوری، کیلیفورنیا;लेक एल्सिनोर;湖埃尔西诺; +city::5364514;Lake Forest;El Toro;Eltoro;Lake Forest;Lejk Forest;Lejk Forist;lak fwryst;leikeupoliseuteu;leka pharesta;lyk farst kalyfrnya;reikuforesuto;sen lin hu;Лейк Форест;Лејк Форист;لاك فوريست;لیک فارست، کالیفرنیا;لیک فارسٹ، کیلیفورنیا;لیک فورسٹ;लेक फरेस्ट;レイクフォレスト;森林湖;레이크포리스트; +city::5364855;Lakewood;Lakewood;Lakewood Village;Lejkud;Lejkvud;lai ke wu de;lakywwwd;leikeuudeu;lekavuda;lykwwd kalyfrnya;reikuuddo;Лейквуд;Лейкуд;Лејквуд;لاكيووود;لیکوود، کالیفرنیا;لیکووڈ;लेकवूड;レイクウッド;莱克伍德;레이크우드; +city::5364940;Lancaster;Lancaster;Lankaster;Lankastur;WJF;lan kai si te;lankstr;lnkstr kalyfrnya;lnqstr;lyancestara;rankasuta;Ланкастер;Ланкастър;לנקסטר;لانكستر;لنکستر، کالیفرنیا;لینکاسٹر;ल्यान्चेस्टर;ランカスター;蘭開斯特; +city::5367440;Livermore;LVK;Laddville;Liv"rmor;Livermor;Livermore;Livermore's;Nottingham;li fu mo;libeomo-eo;libharamora;lybrmwr;lyfyrmwry;lywrmwr;lywrmwr kalyfrnya;ribamoa;Ливермор;Ливърмор;Лівермор;ליברמור;ليفيرموري;لیورمور;لیورمور، کالیفرنیا;लिभरमोर;リバモア;利佛摩;리버모어; +city::5367565;Lodi;Lodaj;Lodi;Loudaj;Mokelumne;Moquelumne;lodi;luo di;lwdy;lwdy kalyfrnya;rodai;Лодай;Лодај;Лоди;Лоді;Лоудай;لودي;لودی، کالیفرنیا;लोडी;ローダイ;洛迪;로디; +city::5367929;Long Beach;Gorad Long-Bich;LGB;Litus Longum;Lon'nk Bits;Long Beach;Long Bich;Long Bijch;Long Bycas;Long Byčas;Long-Bich;Longbica;Longbīča;Lonq Bic;Lonq Biç;Willmore City;lam bica;lamga bica;lang bic;lang bych kalyfrnya;lang bych kylyfwrnya;langa bica;long-bichi;longbichi;lwng byz;lwngh bytsh;lxng bich;rongubichi;zhang tan;Λονγκ Μπιτς;Горад Лонг-Біч;Лонг Бийч;Лонг Бич;Лонг-Бич;Лонг-Біч;Լոնգ Բիչ;לונג ביץ;لانگ بیچ، کالیفرنیا;لانگ بیچ، کیلیفورنیا;لونغ بيتش;लङ्ग बीच;लाँग बीच;লং বিচ;లాంగ్ బీచ్;ลองบีช;ლონგ-ბიჩი;ឡងបច;ឡងប៊ិច;ロングビーチ;長灘;롱비치; +city::5368361;Los Angeles;Angelopolis;Cuidad De Los Angelos;Cuidad De los Angelos;El Pueblo de Nuestra Senora La Reina de Los Angeles de Porcivncula;El Pueblo de Nuestra Senora de los Angeles de Porciuncula;El Pueblo de Nuestra Señora de los Ángeles de Porciúncula;El Pueblo del Rio de Nuestra Senora;Gorad Los-Andzhehles;L.A.;LA;LAX;La Reina de Los Angeles de Porciuncula;Lok-chham-ki;Los And'eles;Los Andzelas;Los Andzeles;Los Andzheles;Los Andzhelis;Los Andželas;Los Andželes;Los Angeles;Los Anjeles;Los Anjélés;Los Antzeles;Los Anxheles;Los Anxhelos;Los Anzeles;Los Anzheles;Los Ángeles;Los-Anceles;Los-Andzeles;Los-Andzheles;Los-Angeleso;Los-Anjeles;Los-Anzheles;Los-Anzheles shaary;Los-Anĝeleso;Losandzelosa;Losandželosa;Lo̍k-chhám-kî;Lungsod ng Los Angeles;Luos Andzels;Luos Andžels;Os Anxeles;Os Ánxeles;Pueblo De Los Angeles;Pueblo Los Angelos;el-ei;las aynjls;las encalas;las enjales;las enjalis;lasa ainjalasa;lasa enjalasa;lasa enjilasa;leas anceles;los-anjelesi;losa enjelasa;losa enjelisa;losa enjelsa;loseuaenjelleseu;loseuenjelleseu;ls anjls;luo shan ji;lws anjls;lws anjlws;lws anjlys;lws ʼngls;rosanzerusu;Λος Άντζελες;Горад Лос-Анджэлес;Лос Анджелес;Лос Анджелис;Лос Андьелес;Лос Анжелес;Лос Анђелес;Лос Анџелес;Лос Анҷелес;Лос Анӂелес;Лос-Анджелес;Лос-Анжелес;Лос-Анжелес шаары;Лос-Анџелес;Լոս Անջելես;לאס אנדזשעלעס;לוס אנגלס;لاس اینجلس;لس آنجلس;لس‌آنجلس;لوس آنجلس;لوس أنجلوس;لوس ئانجېلېس;لوس انجليس;لوس‌آنجلس;لۆس ئانجلەس;लस एञ्जिलस;लस एन्जलस;लास एंजलस;लॉस एंजेलिस;लॉस एंजेल्स;লস অ্যাঞ্জেলেস;ਲਾਸ ਐਂਜਲਸ;લોસ એન્જેલસ;லாஸ் ஏஞ்சலஸ்;లాస్ ఏంజలెస్;ಲಾಸ್ ಎಂಜಲೀಸ್;ലോസ് ആഞ്ചെലെസ്;ลอสแอนเจลิส;လော့စ်အိန်ဂျယ်လိစ်မြို့;ლოს-ანჯელესი;ሎስ አንጄሌስ;ロサンゼルス;洛杉矶;洛杉磯;로스앤젤레스;로스엔젤레스;엘에이; +city::5369367;Lynwood;Linud;Linvud;Lynwood;lin wu de;lin-udeu;linavuda;lynwwd kalyfrnya;lynwwwd;rin'uddo;Линвуд;Линуд;لينووود;لینوود، کالیفرنیا;لینووڈ، کیلیفورنیا;लीनवूड;リンウッド;林伍德;린우드; +city::5369568;Madera;MAE;Madera;ma de la;madera;madra kalyfrnya;madyra;Мадера;مادرا، کالیفرنیا;ماديرا;मादेरा;マデラ;马德拉; +city::5370164;Manteca;Cowell;Cowell's Station;Manteca;Mantika;man te ka;mantka kalyfrnya;mantyka;myanateka;Мантика;مانتيكا;مانتکا، کالیفرنیا;म्यानटेका;曼特卡; +city::5372205;Menifee;Menifi;Munufij;mny fy kalyfrnya;mynyfy;Менифи;Мънъфий;منی فی، کالیفرنیا;مينيفي;مینیفی; +city::5372253;Merced;MCE;Merced;Mersed;Mursed;marsida;masedo;mei xi de;meosedeu;mrsd kalyfrnya;myrsyd;Мерсед;Мърсед;مرسد، کالیفرنیا;مرسڈ;ميرسيد;मर्सिड;マーセド;美熹德;머세드; +city::5373327;Milpitas;Milpitas;Penitencia;mi er pi ta si;milpitaja;milpitasa;mirupitasu;mylbytas;mylpytas;Милпитас;Мілпітас;ميلبيتاس;میلپیتاس;मिल्पिटास;मिल्पिताज;ミルピタス;米尔皮塔斯; +city::5373497;Mira Mesa;; +city::5373763;Mission Viejo;Mishen-V'ekho;Mishn-Vekho;Mishon Vijekho;Mishun Viekho;Mission Viejo;mi shen wei ye huo;misana bhi'eyo;misshonbieho;misyeonbieho;mshn wyjw;myshn wyjw kalyfrnya;mysywn fyjw;Мишен-Вьехо;Мишон Вијехо;Мишън Виехо;Мішн-Вєхо;مشن ویجو;ميسيون فيجو;میشن ویجو، کالیفرنیا;मिसन भिएयो;ミッションビエホ;米申维耶霍;미션비에호; +city::5373900;Modesto;MOD;Modesto;Ralston;meodeseuto;mo de si tuo;modesto;modesuto;mwdstw;mwdstw kalyfrnya;mwdystw;Модесто;מודסטו;مودستو، کالیفرنیا;موديستو;موڈیسٹو;मोदेस्तो;モデスト;莫德斯托;머데스토; +city::5374322;Montebello;Montebello;Montebelo;Newmark;meng ti bei luo;montebello;montebelo;montebero;mwntybylw;mwnt‌blw kalyfrnya;Монтебелло;Монтебело;Մոնթեբելլո;مونتيبيلو;مونت‌بلو، کالیفرنیا;मोन्तेबेलो;モンテベロ;蒙提贝罗;몬테벨로; +city::5374406;Monterey Park;Monterej Park;Monterey Park;Ramona Acres;meng te li gong yuan;montere parka;mwnth ry park kalyfrnya;mwntyry bark;Монтерей Парк;Монтереј Парк;مونته ری پارک، کالیفرنیا;مونتيري بارك;मोन्तेरे पार्क;蒙特利公园; +city::5374732;Moreno Valley;Moreno Vali;Moreno Valley;Moreno-Valli;mo lei nuo gu;morano bhyali;morenobare;mwrnw wly kalyfrnya;mwrynw faly;mwrynw wyly;Морено Вали;Морено-Валли;Морено-Валлі;مورنو ولی، کالیفرنیا;مورينو فالي;مورینو ویلی;मोरनो भ्याली;モレノバレー;莫雷諾谷; +city::5375480;Mountain View;Mauntin Vju;Mauntin Vyu;Mauntin-V'ju;Mauntin-Vju;Mountain View;Mountainview;NUQ;Prospectus Montis;ma'untana vhyu;ma'unte'ina bhi'u;ma'untena bhyu;ma'untena vyu;mang ting wei you;mantyn wyw;mauntenbyu;mauntinbyu;mavuntan viyu;mawntn fyw;mea n the nwiw;shan jing cheng;Маунтин Вю;Маунтин Вју;Маунтин-Вью;Маунтін-Вю;מאונטיין ויו;مانتین ویو;ماونتن فيو;माउंटन व्ह्यू;माउंटेन व्यू;माउन्टेन भ्यु;माउन्टेन भ्यू;মাউন্টেইন ভিউ;மவுண்டன் வியூ;เมาน์เทนวิว;マウンテンビュー;山景城;芒廷维尤;마운틴뷰; +city::5375911;Murrieta;Mjurijeta;Murieta;Murietta;Murrieta;Murrietta;RBK;marieta;mu lie ta;muri'eta;mwrryta ryfyrsydy kalyfwrnya;mwryta kalyfrnya;Муриета;Мјуријета;مورريتا، ريفيرسيدي، كاليفورنيا;موریتا، کالیفرنیا;موریٹا;मुरिएटा;マリエータ;穆列塔; +city::5376095;Napa;APC;Napa;Napa City;Nappa;na pa;naba;napa;napa kalyfrnya;napa kyly fwrnya;Напа;نابا;ناپا;ناپا، کالیفرنیا;ناپا، کیلی فورنیا;नापा;แนปา;ナパ;纳帕;나파; +city::5376200;National City;Lungsod ng National;Nashonal Siti;National City;National Ranch;Neshunul Siti;Rancho de la Nacion *;n'yasanala siti;na xiong nai er cheng;naesyeoneolsiti;nashnal syty;nshnal syty kalyfrnya;Нашонал Сити;Нешънъл Сити;ناشنال سيتي;نشنال سیتی، کالیفرنیا;نیشنل سٹی، کیلیفورنیا;न्यासनल सिटी;纳雄耐尔城;내셔널시티; +city::5376890;Newport Beach;JNP; +city::5377613;North Glendale;; +city::5377654;North Hollywood;Lankershim;North Hollywood;Severnyj Gollivud;Toluca;noseuhalliudeu;Северный Голливуд;نورث هالیوود، لس‌آنجلس;노스할리우드; +city::5377985;Northridge;Northridge;Zelzah;northarija;نورثریج، لس‌آنجلس;नॉर्थरिज; +city::5377995;Norwalk;Corvallis;Noruok;Noruolk;Norvok;Norvolk;Norvolkas;Norwalk;naravaka;nou~oku;nowokeu;nuo wo ke;nwrwak kalyfrnya;nwrwak kylyfwrnya;nwrwalk;nwrwwq;Норвок;Норволк;Норуок;Норуолк;נורווק;نوروالك;نوروالک;نورواک، کالیفرنیا;نورواک، کیلیفورنیا;नरवाक;ノーウォーク;諾沃克;노워크; +city::5378044;Novato;NOT;Novato;nobhato;nuo wa tuo;nwfatw;nwwatw kalyfrnya;Новато;نوفاتو;نوواتو، کالیفرنیا;नोभातो;诺瓦托; +city::5378538;Oakland;Gorad Oklend;OAK;Oakland;Oakland i California;Okland;Oklandas;Oklend;Oklenda;Oouklant;Oukland;Ouklend;Quercupolis;ao ke lan;awkland;awklnd;okalanda;okalyanda;okeullaendeu;oklant;okurando;Όουκλαντ;Горад Окленд;Окланд;Окленд;Оукланд;Оукленд;Օքլենդ;אוקלנד;אקלאנד;أوكلاند;اوکلند;اوکلینڈ;اوکلینڈ، کیلیفورنیا;ओकलंड;ओकल्याण्ड;ओकल्यान्ड;ওকল্যান্ড;ஓக்லண்ட்;ოკლენდი;オークランド;奥克兰;奧克蘭;오클랜드; +city::5378771;Oceanside;OCN;Ocean Side;Oceanside;Oushansajd;Oushensajd;Oushunsajd;awshn sayd kalyfrnya;awsyansydy;osanasa'ida;oshansaido;osyeonsaideu;ou shen sai de;Оушансајд;Оушенсайд;Оушънсайд;אושנסייד;أوسيانسيدي;اوشن ساید، کالیفرنیا;اوشینسائڈ;ओसनसाइड;オーシャンサイド;歐申賽德;오션사이드; +city::5379439;Ontario;ONT;Ontario;Ontehrio;an da e;antaryw kalyfrnya;awntaryw;ontalio;ontario;ontariyo;Онтарио;Онтаріо;Онтэрио;أونتاريو;انتاریو، کالیفرنیا;اونٹاریو،کیلیفورنیا;ओन्टारियो;オンタリオ;安大略;온타리오; +city::5379513;Orange;JOR;Orandzh;Orange;Orindz;Orindzh;Richland;arenja;awranj;awrnj kalyfrnya;awrynj;chen shi;olenji;orenji;Орандж;Ориндж;Оринџ;أورانج;اورنج، کالیفرنیا;اورینج;अरेन्ज;オレンジ;橙市;오렌지; +city::5380184;Oxnard;OXR;Oksnard;Oxnard;aksanarda;ao ke si na de;awks nard kalyfrnya;awksnard;ogseunadeu;okkusunado;Окснард;אוקסנארד;أوكسنارد;اوکس نارد، کالیفرنیا;اوکسنارڈ;अक्सनार्ड;オックスナード;奥克斯纳德;옥스나드; +city::5380202;Oxnard Shores;; +city::5380626;Palm Desert;Old McDonald Ranch;Palm Desert;Palm Dezert;Palm Dezurt;Palm Village;Palm-Dezert;Sand Hole;balm dysyrt;palm dzrt kalyfrnya;pama dejarta;pamdejeoteu;zong lu sha mo;Палм Дезерт;Палм Дезърт;Палм-Дезерт;بالم ديسيرت;پالم دزرت، کالیفرنیا;पाम डेजर्ट;棕榈沙漠;팜데저트; +city::5380698;Palmdale;PMD;Palmdale;Palmdejl;balmdyl;palm dyl kalyfrnya;pamadela;pamuderu;zong lu gu;Палмдейл;Палмдејл;פאלמדייל;بالمديل;پالم دیل، کالیفرنیا;پالم ڈیل;पामडेल;パームデール;棕櫚谷; +city::5380748;Palo Alto;Gorad Pala-Al'ta;PAO;Palo Al'to;Palo Alto;Palo-Al'to;Palo-Alto;Paloalto;University Park;balw altw;pa luo ao duo;pa luo ao tu;paelloaelto;palo alto;palo elto;palw altw kalyfrnya;palwaltw;paroaruto;Πάλο Άλτο;Горад Пала-Альта;Пало Алто;Пало Альто;Пало-Альто;פאלו אלטו;بالو ألتو;پالو آلتو، کالیفرنیا;پالوآلتو;पालो आल्टो;पालो एल्टो;パロアルト;帕羅奧圖;帕羅奧多;팰로앨토; +city::5381110;Paramount;Hynes;Paramaunt;Paramount;baramwwnt;pai la meng;paramwnt kalyfrnya;pyarama'unta;Парамаунт;باراموونت;پارامونت، کالیفرنیا;پیراماؤنٹ، کیلیفورنیا;प्यारामाउन्ट;派拉蒙; +city::5381396;Pasadena;Gorad Pasadehna;Indiana Colony;JPD;Pasadena;Pasadina;Pasadīna;Pasantina;Pasedena;basadyna;pa sa di na;paeseodina;pasadena;pasadyna kalyfrnya;psdynh;Πασαντίνα;Горад Пасадэна;Пасадена;Пасадина;Փասադենա;פסדינה;باسادينا;پاسادینا، کالیفرنیا;پاساڈینا;पासादेना;แพซาดีนา;パサデナ;帕萨迪纳;패서디나; +city::5382146;Perris;Peris;Perris;byrrys;pei li si;perisa;prys kalyfrnya;Перис;Перрис;بيرريس;پریس، کالیفرنیا;पेरिस;佩里斯; +city::5382232;Petaluma;Chickaluma;Petaloma;Petaluma;Petluma;bytalwma;pei ta lu ma;petaluma;petaruma;ptalwma kalyfrnya;Петалума;Петлума;بيتالوما;پتالوما، کالیفرنیا;पेतालुमा;ペタルーマ;佩塔卢马; +city::5382496;Pico Rivera;Pico;Pico Rivera;Piko Rivera;Rivera;bykw ryfyra;pi ke li wei la;piko ribhera;pykw rywra kalyfrnya;Пико Ривера;بيكو ريفيرا;پیکو ریورا، کالیفرنیا;पिको रिभेरा;皮科里韦拉; +city::5383465;Pittsburg;Black Diamond;City of New York of the Pacific;New York of the Pacific;Pitsb"rg;Pitsburg;Pittsburg;Pittsburgh;bytsbwrgh;pi ci bao;pi zi bao;picheubeogeu;pitsabarga;pittsubagu;pytz brg kalyfrnya;Питсбург;Питсбърг;بيتسبورغ;پیتز برگ، کالیفرنیا;पिट्सबर्ग;ピッツバーグ;匹兹堡;匹茲堡;피츠버그; +city::5383527;Placentia;Plasensha;Plasentija;blasyntya;peullasentia;plasntya kalyfrnya;plesensiya;pu la sen;Пласентия;Пласенша;بلاسينتيا;پلاسنتیا، کالیفرنیا;प्लेसेन्सिया;普拉森;플라센티아; +city::5383777;Pleasanton;Alisal;JBS;Pleasanton;Pleasonton;Plezant"n;Plezanton;blysantwn;peullejeonteon;plijentatana;plyzantwn kalyfrnya;pu lai sen dun;Плезантон;Плезантън;بليسانتون;پلیزانتون، کالیفرنیا;प्लिजेन्टटन;普莱森顿;플레전턴; +city::5384170;Pomona;Pomon;Pomona;bo mo na;bwmwna;pomona;pwmwna;pwmwna kalyfrnya;pwmwnh;Помона;פומונה;بومونا;پومونا;پومونا، کالیفرنیا;पोमोना;ポモナ;波莫纳;포모나; +city::5384471;Porterville;PTV;Porter's Station;Porter's Village;Porter'sville;Porters Trading Post;Portersville;Portervil;Porterville;Porturvil;Putnamville;bo te wei er;bwrtyrfyl;portarabhila;potabiru;pwrtrwyl kalyfrnya;Портервил;Портървил;بورتيرفيل;پورترویل، کالیفرنیا;पोर्टरभिल;ポータービル;波特维尔; +city::5384690;Poway;Pauej;Pawai;Poway;baway;bo wei;pawei;pove;pwwy kalyfrnya;Пауей;Пауеј;باواي;پووی، کالیفرنیا;पोवे;波威;파웨이; +city::5385941;Rancho Cordova;Rancho Kordova;lan qiao ke er duo wa;ranchw kwrdwwa kalyfrnya;rantshw kwrdwfa;rryanco kordobha;Ранчо Кордова;رانتشو كوردوفا;رانچو کوردووا، کالیفرنیا;र्र्यान्चो कोर्दोभा;兰乔科尔多瓦; +city::5385955;Rancho Cucamonga;Cucamonga;North Cucamonga;Nuestra Senora del Pilar de Cucamonga;Rancho Cucamonga;Rancho Kukamanga;Rancho Kukamonga;Rancho-Kukamonga;ku ka meng ge mu chang;laenchokukamong-ga;ranchokukamonga;ranchw kwkamwnga kalyfrnya;rantshw kwkamwngha;rryanco kukamonga;Ранчо Кукаманга;Ранчо Кукамонга;Ранчо-Кукамонга;Ранчо-Кукамонґа;رانتشو كوكامونغا;رانچو کوکامونگا، کالیفرنیا;رانچھو کیوکامونگا;र्र्यान्चो कुकामोंगा;ランチョクカモンガ;庫卡蒙格牧場;랜초쿠카몽가; +city::5386039;Rancho Penasquitos;; +city::5386754;Redlands;Lugonia;Redlands;Redlends;Redlunds;ledeullaenjeu;lei de lan ci;rdlndz kalyfrnya;redalyandsa;reddoranzu;rydlands;Редландс;Редлендс;Редлъндс;ردلندز، کالیفرنیا;ريدلاندس;रेडल्यान्ड्स;レッドランズ;雷德兰兹;레들랜즈; +city::5386785;Redondo Beach;Redondo Beach;Redondo Bich;Redondo Bijch;Redondo-Bich;lei dong duo hai tan;lidondobichi;rdwndw bych kalyfrnya;redondo bica;redondobichi;rydwndw bytsh;Редондо Бийч;Редондо Бич;Редондо-Бич;Редондо-Біч;ردوندو بیچ، کالیفرنیا;ريدوندو بيتش;ریڈونڈو بیچ، کیلیفورنیا;रेडोन्डो बीच;レドンドビーチ;雷东多海滩;리돈도비치; +city::5386834;Redwood City;Lungsod ng Redwood;Menzesville;Mezesville;Red Woods City;Redud Siti;Redvud Siti;Redvud-Siti;Redwood;Redwood City;Redwood Lakanbalen;hong mu cheng;ledeuudeusiti;rdwwd syty kalyfrnya;redavuda siti;reddouddoshiti;rydwwd;Редвуд Сити;Редвуд-Сити;Редвуд-Сіті;Редуд Сити;ردوود سیتی، کالیفرنیا;ريدوود;ریڈووڈ شہر، کیلیفورنیا;रेडवूड सिटी;レッドウッドシティ;紅木城;레드우드시티; +city::5387288;Rialto;Rial'to;Rialto;Rijalto;li ya tuo;liaelto;ri xal to;riaruto;riyalto;ryaltw;ryaltw kalyfrnya;Риалто;Риальто;Ријалто;ريالتو;ریالتو، کالیفرنیا;ریالٹو;रियाल्तो;รีอัลโต;リアルト;里亚托;리앨토; +city::5387428;Richmond;Richmond;Richmund;lichimeondeu;lie zhi wen;ricamanda;ritchimondo;rychmwnd kalyfrnya;rytshmwnd;Ричмонд;Ричмънд;Річмонд;ريتشموند;ریچموند، کالیفرنیا;रिचमंड;リッチモンド;列治文;리치먼드; +city::5387877;Riverside;Jurupa;RAL;Riversaida;Riversaint;Riversajd;Riversayd;Riverside;Rivursajd;li fu sai de;libeosaideu;ribasaido;ribharasa'ida;riversaidi;rybrsyyd;ryfrsayd;rywrsayd kalyfrnya;Ριβερσάιντ;Риверсайд;Риверсајд;Ривърсайд;Ріверсайд;ריברסייד;رور سائڈ;ريفرسايد;ریورساید، کالیفرنیا;रिभरसाइड;რივერსაიდი;リバーサイド;里弗赛德;리버사이드; +city::5388319;Rocklin;Rocklin;Rocklissa;Roklin;luo ke lin;rakalina;raklyn kalyfrnya;rwklyn;Роклин;راکلین، کالیفرنیا;روكلين;रकलिन;罗克林; +city::5388867;Rosemead;Rouzmid;Rouzmijd;rojamida;rou shi mi;rwsymyd;rzmyd kalyfrnya;Роузмид;Роузмийд;رزمید، کالیفرنیا;روزمیڈ، کیلیفورنیا;روسيميد;रोजमीड;柔似蜜; +city::5388881;Roseville;Griders;Roseville;Roseville Junction;Rouzvil;Rozvell;Rozvill;lojeubil;luo si wei er;rojabhila;rozubiru;rwzfyl;rzwyl kalyfrnya;Розвелл;Розвилл;Роузвил;رزویل، کالیفرنیا;روزفيل;روسولے;रोजभिल;ローズビル;羅斯維爾;로즈빌; +city::5389489;Sacramento;Gorad Sakramenta;Kakalameko;New Helvetia;SAC;Sacramento;Sacramento Stad;Sacramentum;Sakramentas;Sakramento;Sakraments;Sakraminto;Sakraménto;cekramento;saekeulamento;saikaramainto;saikramento;sakramento;sakramntw;sakramntw kalyfrnya;sakuramento;sekramento;sha jia mian du;sqrmntw;Σακραμέντο;Горад Сакрамента;Сакраменто;Սակրամենտո;סאקראמענטא;סקרמנטו;ساكرامنتو;ساکرامنتو;ساکرامنتو، کالیفرنیا;ساکرامنٹو;سکرامنٹو، کیلی فورنیا;साक्रामेंटो;साक्रामेन्टो;सेक्रामेन्टो;सेक्रामेन्तो;सैक्रामेण्टो;সাক্রামেন্টো;ਸੈਕਰਾਮੈਂਟੋ;சேக்ரமெண்டோ;แซคราเมนโต;საკრამენტო;ሳክራመንቶ;サクラメント;沙加緬度;새크라멘토; +city::5391295;Salinas;SNS;Salinae;Salinas;sa li na si;salinasa;sallinaseu;salynas;salynas kalyfrnya;sarinasu;Салинас;Салінас;ساليناس;سالیناس;سالیناس، کالیفرنیا;सालिनास;サリナス;萨利纳斯;살리나스; +city::5391710;San Bernardino;Kaampu`u;SBD;SBT;San Bernandino;San Bernardino;San-Bernardino;saenbeoneodino;san byrnardynw kalyfwrnya;sanbanadino;sanbanadino_;sheng bei na di nuo;sn brnardynw kalyfrnya;sn brnrdynw;Сан Бернандино;Сан Бернардино;Сан-Бернардино;סן ברנרדינו;سان بيرناردينو، كاليفورنيا;سانبرنارڈینو;سن برناردینو، کالیفرنیا;サンバーナーディーノ;サンバーナーディーノ_;聖貝納迪諾;샌버너디노; +city::5391791;San Clemente;San Clemente;San Klemente;San-Klemente;Spanish Village;saenkeullemente;san klmnt kalyfrnya;san klymynty;sheng ke lai men te;syana klemente;Сан Клементе;Сан-Клементе;Սան Կլեմենտե;سان كليمينتي;سان کلمنت، کالیفرنیا;स्यान क्लेमेन्ते;แซนเคลเมนที;圣克莱门特;샌클레멘테; +city::5391811;San Diego;Davis' Folly;Didacopolis;Gorad San-Dyega;Graytown;Lungsod ng San Diego;New San Diego;SAN;San Diegas;San Diego;San Diegu;San Dijego;San Diyego;San Diyégo;San Miguel;San Ntienko;San-Diego;San-Dieqo;Sandjego;can tiyeko;saendiego;saendieigo;saina di'ego;san diyago;san dyyghw;san-diego;sana di'ego;sana diyago;sandiego;sena diyego;sheng de ya ge;sn dygw;sn dyygw;syana di'ego;Σαν Ντιέγκο;Горад Сан-Дыега;Сан Диего;Сан Дијего;Сан-Диего;Сан-Дієго;Սան Դիեգո;סאן דיעגא;סן דייגו;سان دييغو;سان ڈیاگو;سان ڈیگو;سن دیگو;सॅन डियेगो;सैन डिएगो;स्यान डिएगो;সান ডিয়াগো;ਸਾਨ ਦੀਏਗੋ;சான் டியேகோ;శాన్ డియాగో;แซนดีเอโก;სან-დიეგო;ሳንዲየጎ;サンディエゴ;聖地牙哥;샌디에고;샌디에이고; +city::5391959;San Francisco;Franciscopolis;Frisco;Gorad San-Francyska;Kapalakiko;Khiu-kim-san;Khiu-kîm-sân;Lungsod ng San Francisco;New Albion;SF;SFO;San Francisco;San Franciscu;San Francisko;San Fransisco;San Fransiskas;San Fransisko;San Frantzisko;San Phransisko;San-Francisko;San-Fransisko;Sanfrancisko;Sao Francisco;São Francisco;Yerba Buena;can pirancisko;jiu jin shan;saenpeulan;saenpeulansiseuko;saina pharansisako;saina phransisko;san f ran si s ko;san fan shi;san fransskw;san fransyskw;san fransyskۆ;san phransisko;sana phransisako ka'unti;sana phransisko;sanfuranshisuko;sena phransisko;sn prnsysqw;syana phransisko;Σαν Φρανσίσκο;Горад Сан-Францыска;Сан Франсиско;Сан Франциско;Сан-Франциско;Сан-Франціско;Սան Ֆրանցիսկո;סאן פראנציסקא;סן פרנסיסקו;سان فرانسسکو;سان فرانسيسكو;سان فرانسیسکو;سان فرانسیسکۆ;सॅन फ्रान्सिस्को;सैन फ्रांसिस्को;स्यान फ्रान्सिस्को;সান ফ্রান্সিসকো কাউন্টি;সান ফ্রান্সিস্কো;ਸੈਨ ਫਰਾਂਸਿਸਕੋ;சான் பிரான்சிஸ்கோ;శాన్ ఫ్రాన్సిస్కో;സാൻ ഫ്രാൻസിസ്കോ;සැන් ෆ්‍රැන්සිස්කෝ;ซานฟรานซิสโก;སན་ཧྥུ་རན་སིས་ཁོ;ဆန်ဖရန်စစ္စကိုမြို့;სან-ფრანცისკო;サンフランシスコ;三藩市;旧金山;舊金山;샌프란;샌프란시스코; +city::5392171;San Jose;Gorad San-Khaseh;Iosephopolis;Pueblo De Alvarado;Pueblo De San Jose De Guadalupe;SJC;San Chose;San Choze;San Chozė;San Jose;San Jose De Alvarado;San Jose De Guadalupe *;San Jose i California;San José;San Khose;San Khoze;San Xose;San Xosé;San-Joseo;San-Khose;San-Xose;Sanhose;Sanhosē;can hoce;sa n jwz;saeneojei;saina hoze;san hwzyh;san ose;san'noze;san-khose;sana hose;sana hoze;sanhose;sena hoje;sheng he xi;sn hwzh;sn‌khwzh kalyfrnya;syana hose;Σαν Χοσέ;Горад Сан-Хасэ;Сан Хозе;Сан Хосе;Сан-Хосе;Սան Խոսե;סן חוזה;سا ن جوز;سان هوزيه;سان ہوزے، کیلیفورنیا;سن‌خوزه، کالیفرنیا;सान होसे;सॅन होजे;सैन होज़े;স্যান হোসে;ਸਾਨ ਹੋਜ਼ੇ;સાન હોસે;சான் ஹொசே;శాన్ ఓసె;ಸ್ಯಾನ್‌ ಜೋಸ್‌‌;แซนโฮเซ;სან-ხოსე;サンノゼ;聖荷西;산호세;새너제이; +city::5392263;San Leandro;Cherry City of California;San Leandro;San Lijandro;San-Leandro;saenliaendeulo;san lyandrw kalyfrnya;san lyndrw;sanreandoro;sheng li an zhuo;syana liyandro;Сан Леандро;Сан Лијандро;Сан-Леандро;سان لئاندرو، کالیفرنیا;سان ليندرو;سان لیانڈرو;स्यान लीयान्द्रो;サンレアンドロ;聖利安卓;샌리앤드로; +city::5392368;San Marcos;San Marcos;San Markos;San-Markos;saenmakoseu;san markws;san markws kalyfrnya;sanmarkws;sanmarukosu;sheng ma ke si;syana markosa;Сан Маркос;Сан-Маркос;سان ماركوس;سان مارکوس، کالیفرنیا;سانمارکوس;स्यान मार्कोस;サンマルコス;聖馬可斯;샌마코스; +city::5392423;San Mateo;Matthaeopolis;San Mateo;San Matheo;San-Mateo;saenmeoteio;san matyw;san matyw kalyfrnya;sanmateo;sheng ma diao;syana myatiyo;Сан Матео;Сан-Матео;سان ماتيو;سان ماتیو، کالیفرنیا;سانماٹیو;स्यान म्याटियो;サンマテオ;聖馬刁;샌머테이오; +city::5392528;San Pedro;San Pedro;San Pedro y San Pablo;San Pedro y San Pablo Bicuner *;saenpideulo;sanpedoro;Сан Педро;サンペドロ;샌피드로; +city::5392567;San Rafael;SRF;San Rafael;San Rafel;San-Rafael';San-Rafel;Sao Rafael;São Rafael;san rafayyl;sanraferu;sheng la fei er;sn rafayl kalyfrnya;syana raphela;Сан Рафаел;Сан Рафел;Сан-Рафаель;Сан-Рафел;سان رافاييل;سن رافائل، کالیفرنیا;स्यान राफेल;サンラフェル;圣拉菲尔; +city::5392593;San Ramon;Limerick;Lynchville;San Ramon;San Ramón;San-Ramon;san ramwn;san ramwn kalyfrnya;sheng la meng;syana ramona;Сан Рамон;Сан-Рамон;سان رامون;سان رامون، کالیفرنیا;स्यान रामोन;圣拉蒙;聖拉蒙; +city::5392900;Santa Ana;Gorad Santa-Ana;SNA;Santa Ana;Santa-Ana;Santanna;saentaaena;santa ana;santa ana kalyfrnya;santa ana kylyfwrnya;santaana;sheng an na;syanta ena;Горад Санта-Ана;Санта Ана;Санта-Ана;Սանտա Անա;סנטה אנה;سانتا آنا، کالیفرنیا;سانتا أنا;سانتا انا، کیلیفورنیا;स्यान्टा एना;แซนตาแอนา;サンタアナ;圣安娜;샌타애나; +city::5392952;Santa Barbara;Barbaropolis;La Laguna de la Concepcion *;SBA;Santa Barbara;Santa Barmpara;Santa Bàrbara;Santa Bárbara;Santa-Barbara;Santabarbara;saentababeola;samta barbara;santa barbara;santababara;sheng ba ba la;snta barbara kalyfrnya;snth brbrh;syanta barbara;Σάντα Μπάρμπαρα;Санта Барбара;Санта-Барбара;סנטה ברברה;سانتا باربارا;سانٹا باربرا;سنتا باربارا، کالیفرنیا;सँटा बार्बरा;स्यान्टा बार्बरा;แซนตาบาร์บารา;サンタバーバラ;圣巴巴拉;샌타바버라; +city::5393015;Santa Clara;Santa Clara;Santa Klara;Santa-Klara;saentakeullaela;santa klara;santa klara kalyfrnya;santakurara;sheng ke la la;snth qlrh;syanta klera;Санта Клара;Санта-Клара;סנטה קלרה;سانتا كلارا;سانتا کلارا، کالیفرنیا;سانٹا کلارا;स्यान्टा क्लेरा;サンタクララ;圣克拉拉;샌타클래라; +city::5393049;Santa Clarita;Sanita Clarita;Santa Clarita;Santa Klarita;Santa-Klarita;saentakeullalita;santa klaryta;santa klaryta kalyfrnya;santakurarita;sheng ta ke la li ta;snth qlryth;syanta klarita;Санта Кларита;Санта-Кларита;Санта-Кларіта;סנטה קלריטה;سانتا كلاريتا;سانتا کلاریتا، کالیفرنیا;سانٹا کلاریٹا;स्यान्टा क्लारिता;サンタクラリタ;聖塔克拉利塔;샌타클라리타; +city::5393052;Santa Cruz;City of the Holy Cross;Newport of California;Newport of the Pacific;Santa Cruz;Santa Krouz;Santa Krus;Santa Kruz;Santa-Krus;Santa-Kruz;Santakruza;Santakrūza;Surf City;Swantacruz;saentakeulujeu;santa krwz;santa krwz kalyfrnya;santakuruzu;sheng ta ke lu zi;syanta kruja;Σάντα Κρουζ;Санта Круз;Санта Крус;Санта-Круз;Санта-Крус;سانتا كروز;سانتا کروز، کالیفرنیا;स्यान्टा क्रुज;サンタクルーズ;聖塔克魯茲;샌타크루즈; +city::5393180;Santa Maria;Central City;Central Valley;Grangeville;SMX;Santa Maria;Santa Marija;Santa María;Santa-Marija;santa mariya;santa marya;santa marya kalyfrnya;santamaria;sheng ma li ya;Санта Мария;Санта Марија;Санта-Мария;سانتا ماريا;سانتا ماریا، کالیفرنیا;سانٹا ماریا;सान्ता मारिया;サンタマリア;圣玛丽亚; +city::5393212;Santa Monica;Gorad Santa-Monika;Monicopolis;SMO;Santa Monica;Santa Monika;Santa Mónica;Santa Mônica;Santa-Monika;Santamonika;canta monikka;saentamonika;santa mwnyka;santa mwnyka kylyfwrnya;santa mۆnyka kalyfۆrnya;santamonika;sheng mo ni ka;snta mwnyka kalyfrnya;snth mwnyqh;syanta monika;Σάντα Μόνικα;Горад Санта-Моніка;Санта Моника;Санта-Моника;Санта-Моніка;סנטה מוניקה;سانتا مونيكا;سانتا مونیکا، کیلیفورنیا;سانتا مۆنیکا، کالیفۆرنیا;سانٹا مونیکا;سنتا مونیکا، کالیفرنیا;स्यान्टा मोनिका;சாந்தா மொனிக்கா;แซนตามอนิกา;サンタモニカ;圣莫尼卡;샌타모니카; +city::5393287;Santa Rosa;Franklin Town;STS;Santa Rosa;Santa Roza;Santa-Rosa;Santa-Roza;saentaloja;santa rwsa;santa rwza kalyfrnya;santaroza;sheng luo sha;snth rwzh;syanta roja;Санта Роза;Санта Роса;Санта-Роза;Санта-Роса;סנטה רוזה;سانتا روزا، کالیفرنیا;سانتا روسا;سانٹا روزا;स्यान्टा रोजा;サンタローザ;聖羅莎;샌타로자; +city::5393429;Santee;Cowles;Cowles Station;Cowlestown;Fanita;Santee;Santi;Sentij;saenti;sang di;santy;santy kalyfrnya;syanti;Санти;Сентий;سانتي;سانتی، کالیفرنیا;स्यान्टी;桑蒂;샌티; +city::5396003;Simi Valley;Chimii;Simi;Simi Vali;Simi Valley;Simi-Vehlli;Simi-Velli;Simih;Simiopolis;shimibare;simi bhyali;simibaelli;smy wyly;symy faly;symy wly kalyfrnya;xi mi gu;Сими Вали;Сими-Вэлли;Сімі-Веллі;סימי ואלי;سمی ویلی;سيمي فالي;سیمی ولی، کالیفرنیا;सिमि भ्याली;シミバレー;西米谷;시미밸리; +city::5397603;South Gate;Juzhen Gejt;Saut Gejt;South Gate;nan men;sa'utha geta;sausugeito;swt gyt kalyfrnya;swth ghyt;sʼwt gyyt;Саут Гејт;Южен Гейт;סאות גייט;ساؤتھ گیٹ;ساؤتھ گیٹ، کیلیفورنیا;سوت گیت، کالیفرنیا;سوث غيت;साउथ गेट;サウスゲイト;南门; +city::5397765;South San Francisco;Baden;Juzhen San Francisko;Saus-San-Francisko;Saut San Francisko;South San Francisco;nan jiu jin shan;sa'utha syana phransisko;saususanfuranshisuko;swt san fransyskw kalyfrnya;swwth san fransyskw;Саус-Сан-Франциско;Саут Сан Франциско;Южен Сан Франциско;سوت سان فرانسیسکو، کالیفرنیا;سووث سان فرانسيسكو;साउथ स्यान फ्रान्सिस्को;サウスサンフランシスコ;南旧金山;南舊金山; +city::5397841;South Whittier;; +city::5399020;Stockton;SCK;Stockton;Stokt"n;Stokton;Tuleburg;Weberville;astwktwn;seutogteon;shi de dun;si tuo ke dun;stakatana;stwktwn;stwqtwn;sutokkuton;Стоктон;Стоктън;סטוקטון;استوکتون;ستوكتون;سٹوکٹن;स्टकटन;ストックトン;士德頓;斯托克顿;스톡턴; +city::5400075;Sunnyvale;Encinal;S"nivejl;Sanivejl;Sannivejl;Sunnyvale;saniberu;sanivela;sannibhela;sanyfal;sany‌wyl kalyfrnya;sen ni wei er;seonibeil;snywyl;Санивејл;Саннивейл;Саннівейл;Сънивейл;סאניווייל;سانيفال;سانی‌ویل، کالیفرنیا;سنیویل;सनीवेल;सन्नीभेल;サニーベール;森尼韦尔;서니베일; +city::5401395;Temecula;Temecula;Temecula Station;Temekjula;Temekula;te man ku la;temakula;temekyura;tmwkwla kalyfrnya;tymykwla;Темекула;Темекјула;تموکولا، کالیفرنیا;تيميكولا;ٹیمکولا;तेमाकुला;テメキュラ;特曼库拉; +city::5402405;Thousand Oaks;Tauzand Ouks;Tauzend-Ouks;Tauzund Ouks;qian xiang shi;saujeondeuokeuseu;sauzandookusu;tawznd awks;tha'ujenda oksa;thwsnd awks;Таузанд Оукс;Таузенд-Оукс;Таузънд Оукс;تاوزند اوکس;تھاؤسینڈ اوکس;ثوسند أوكس;थाउजेन्ड ओक्स;サウザンドオークス;千橡市;사우전드오크스; +city::5403022;Torrance;TOA;Torans;Torrance;Torrans;Torrens;Toruns;toleonseu;toransa;toransu;tuo lun si;twrans kalyfrnya;twrransy;Торанс;Торранс;Торренс;Торънс;تورانس، کالیفرنیا;توررانسي;ٹورینس;टोरान्स;トーランス;托倫斯;토런스; +city::5403191;Tracy;Tracy;Trejsi;te lei xi;trasay;tresi;trysy kalyfrnya;Трейси;Трејси;تراساي;تریسی، کالیفرنیا;ٹریسی;ट्रेसी;特雷西; +city::5403783;Tulare;TLR;Tjuleri;Tular;Tuleri;tu lai li;tulera;twlary;twlr kalyfrnya;Тулар;Тулери;Тюлери;تولاري;تولر، کالیفرنیا;टुलेर;图莱里; +city::5404024;Turlock;Sierra;Terlok;Turlock;Turlok;taralaka;te luo ke;trlwk;twrlak kalyfrnya;Терлок;Търлок;ترلوك;تورلاک، کالیفرنیا;टरलक;特洛克; +city::5404119;Tustin;Tastin;Tustin;Tustin City;ta si ting;tasatina;tastyn kalyfrnya;teoseutin;twstyn;Тастин;Тъстин;تاستین، کالیفرنیا;توستين;टसटिन;塔斯廷;터스틴; +city::5404555;Union City;Juni"n Siti;Junion Siti;Junion-Siti;Thanh pho Union;Thành phố Union;Union City;lian he shi;yunieonsiti;yuniyana siti;ywnyn syty kalyfrnya;ywnywn syty;Јунион Сити;Юниън Сити;Юніон-Сіті;يونيون سيتي;یونین سٹی، کیلیفورنیا;یونین سیتی، کالیفرنیا;युनियन सिटी;聯合市;유니언시티; +city::5404794;Universal City;Juniversal-Siti;Junivursul Siti;huan qiu shi;yunibeoseolsiti;ywnyfrsal syty;ywnywrsal syty kalyfrnya;Юниверсал-Сити;Юнивърсъл Сити;يونيفرسال سيتي;یونیورسال سیتی، کالیفرنیا;環球市;유니버설시티; +city::5404915;Upland;"plend;Apland;CCB;Magnolia Villa;North Ontario;Upland;a pu lan;abland;ap lnd kalyfrnya;apalyanda;eoblaendeu;Апланд;Ъпленд;آبلاند;آپ لند، کالیفرنیا;अपल्यांड;阿普兰;업랜드; +city::5405228;Vacaville;Vacaville;Vakavil;bhakabhila;fakafyly;wa ka wei er;wakawyl kalyfrnya;Βάκαβιλ;Вакавил;فاكافيلي;واکاولے;واکاویل، کالیفرنیا;भाकाभिल;瓦卡维尔; +city::5405288;Valencia;; +city::5405380;Vallejo;VLO;Val'ekho;Val'jo;Valejo;Valekho;Vallejo;balleio;bhaleyo;falyjw;vu~areho;wa lie huo;walhw kalyfrnya;walyjw;Валехо;Валејо;Вальехо;Вальйо;فاليجو;والهو، کالیفرنیا;والیجو;भालेयो;ヴァレーホ;瓦列霍;발레이오; +city::5405693;Van Nuys;Van-Najs;baennaijeu;fan nwys;Ван-Найс;فان نويس;ون نایز، لس‌آنجلس;밴나이즈; +city::5405878;Ventura;La Asumpta;La Asuncionde Nuestra Senora;La Pueblo de los Canoas;Mishkanakan;Mitskanakan;Poinsettia City;Ponsettia City by the Sea;Pueblo De las Canoas;Pueblo de Canoas;S B Ventura;San Buenaventura;The Palm City;Ventura;Ventura-by-the Sea;benchura;bentula;fyntwra;syana byuyanabhencura;wen tu la;wnchra;wntwra kalyfrnya;Вентура;فينتورا;ونتورا، کالیفرنیا;ونچرا;स्यान ब्युयनाभेन्चुरा;ベンチュラ;文图拉;벤투라; +city::5406222;Victorville;Huntington;Mormon Crossing;VCV;Victor;Victorville;Viktorvil;Viktorvill;Vikturvil;bhiktarabhila;bigteobil;fyktwrfyly;vu~ikutavu~iru;wei ke duo wei er;wyktwr wyl kalyfrnya;Викторвил;Викторвилл;Виктървил;فيكتورفيلي;وکٹورولے;ویکتور ویل، کالیفرنیا;भिक्टरभिल;ヴィクターヴィル;维克多维尔;빅터빌; +city::5406567;Visalia;Buena Vista;VIS;Vajsejlija;Vajselija;Vicealia;Visaija;Visalia;Visejlija;baiseiria;bhisaliya;fysalya;wei sai li ya;wysalya;wysalya kalyfrnya;Вайселия;Вајсејлија;Висейлия;Вісейлія;فيساليا;ویسالیا;ویسالیا، کالیفرنیا;भिसालिया;バイセイリア;維塞利亞; +city::5406602;Vista;Vista;bhista;biseuta;fysta;wei si ta;wysta kalyfrnya;Виста;فيستا;وسٹا;ویستا، کالیفرنیا;भिस्टा;维斯塔;비스타; +city::5406990;Walnut Creek;Uoln"t Krijk;Uolnat-Krik;Volnat Krik;Volnat-Krik;Walnut Creek;he tao xi;u~orunattokuriku;valanata krika;walnat kryk kalyfrnya;walnwt kryk;wolneoskeulig;Волнат Крик;Волнат-Крік;Уолнат-Крик;Уолнът Крийк;والنات کریک، کالیفرنیا;والنوت كريك;वालनट क्रीक;ウォールナットクリーク;核桃溪;월넛크릭; +city::5407529;Watsonville;Apple City;Pajaro;Sugar City;Uotsunvil;Votsonvil;WVI;Watsonville;vatasanabhila;watosonbiru;watswn wyl kalyfrnya;watswnfyl;wo sen wei er;Вотсонвил;Уотсънвил;واتسون ویل، کالیفرنیا;واتسونفيل;वाटसनभिल;ワトソンビル;沃森维尔; +city::5407933;West Covina;Okcidenta Covina;Uehst-Kovina;Vest Kovina;West Covina;Zapadna Kovina;Zapadnaja Kovina;u~esutokobina;vesta kobhina;weseuteukobina;wst kwwyna kalyfrnya;wst qwbynh;wyst kwfyna;xi ke wen na;Вест Ковина;Западна Ковина;Западная Ковина;Уэст-Ковина;וסט קובינה;وست کووینا، کالیفرنیا;وسٹ کووینا;ويست كوفينا;वेस्ट कोभिना;ウェストコビーナ;西柯汶纳;웨스트코비나; +city::5408211;West Sacramento;Vest Sakramento;Zapaden Sakramento;vesta syakramento;wst sakramntw kalyfrnya;wyst sakramyntw;xi sa ke la men tuo;Вест Сакраменто;Западен Сакраменто;وست ساکرامنتو، کالیفرنیا;ويست ساكرامينتو;वेस्ट स्याक्रामेन्टो;西萨克拉门托; +city::5408406;Westminster;Uestministur;Vestminster;Westminister;Westminster;vestaminstara;wei si min si te;wst mynstr kalyfrnya;wystmynstyr;Вестминстер;Уестминистър;وست مینستر، کالیفرنیا;وسٹ منسٹر;ويستمينستير;वेस्टमिन्स्टर;威斯敏斯特; +city::5409059;Whittier;Uitiur;Vitir;Whittier;hui ti er;hwitieo;u~ittia;vhitiyara;waytyr kalyfrnya;wytyr;Витир;Уитиър;وائٹئر;وایتیر، کالیفرنیا;ويتير;व्हिटियर;ウィッティア;惠提尔;휘티어; +city::5410430;Woodland;By Hell;Udlend;Vudland;Woodland;Yolo City;uddorando;udeullaendeu;vudalyanda;wu de lan;wwdlnd kalyfrnya;wwwdland;Вудланд;Удленд;وودلند، کالیفرنیا;ووودلاند;ووڈلینڈ، کیلیفورنیا;वूडल्यान्ड;ウッドランド;伍德兰;우들랜드; +city::5410438;Woodland Hills;Girad;Girard;Woodland Hills; +city::5410902;Yorba Linda;Jorba Linda;Jorba-Linda;Jorbalinda;Yorba Linda;yobalinda;yobarinda;yobra linda;yue ba lin da;ywrba lynda;ywrba lynda kalyfrnya;Јорба Линда;Йорба Линда;Йорба-Линда;Йорба-Лінда;يوربا ليندا;یوربا لیندا، کالیفرنیا;یوربہ لنڈا، کیلی فورنیا;योब्रा लिन्डा;ヨーバリンダ;约巴林达;요바린다; +city::5411015;Yuba City;Juba Siti;Juba-Siti;Kota Yuba;Thanh pho Yuba;Thành phố Yuba;Yuba Lakanbalen;you ba cheng;yuba siti;yubashiti;ywba syty;ywba syty kalyfrnya;Јуба Сити;Юба Сити;Юба-Сити;يوبا سيتي;یبا سٹی، کیلی فورنیا;یوبا سیتی، کالیفرنیا;युबा सिटी;ユバシティ;尤巴城; +city::5411046;Yucaipa;Jukajpa;Jukipa;you ka pa;yuka'ipa;yukaipa;ywkaypa kalyfrnya;ywkyba;ywkypa kyly fwrnya;Јукајпа;Юкипа;يوكيبا;یوکایپا، کالیفرنیا;یوکیپا، کیلی فورنیا;युकाइपा;尤卡帕;유카이파; +city::5412199;Arvada;Arvada;Arvado;Arveda;Ralston Point;Ralston Station;a wa da;abada;arbhada;arfada;arvada kwlwradw;arwada klradw;Арвада;Арведа;ארבאדה;آروادا، کلرادو;آرواڈا، کولوراڈو;آرڤادا، کولورادو;أرفادا;अर्भादा;アーバダ;阿瓦達; +city::5412347;Aurora;Aurora;Avrora;Fletcher;Orora;ao luo la;arwra klradw;aurora;awrwra;olola;orora;Аврора;Аурора;Орора;אורורה;آرورا، کلرادو;أورورا;ارورا، کولوراڈو;ऑरोरा;औरोरा;オーロラ;奥罗拉;오로라; +city::5415035;Broomfield;BJC;Broomfield;Broomfield Heights;City of Broomfield;Zangs Spur; +city::5416329;Castle Rock;Kasl Rok;Kasul Rok;cheng bao shi;kasl rak klradw;kasl rwk;kyasala raka;Касл Рок;Касъл Рок;كاسل روك;کاسل راک، کلرادو;کیسل راک، کولوراڈو;क्यासल रक;城堡石; +city::5416541;Centennial;Centennial;Sentenial;Sentenijal;Sentennial;sen te ni er;senteniaru;sntnyal klradw;syntynyal;Сентениал;Сентенијал;Сентенниал;Сентенніал;Центенниал;סנטניאל;سنتنیال، کلرادو;سينتينيال;سینٹینیل، کولوراڈو;センテニアル;森特尼尔; +city::5417598;Colorado Springs;COS;Colorado Springs;El Paso;Fontes Coloratenses;Gorad Kalarada-Spryngs;Kolorado Springs;Kolorado Springsas;Kolorado Sprinqs;Kolorado-Springs;Kolorado-Springz;Koloradospringsa;Koloranto Sprin'nks;Kolorādospringsa;kalorado sprinsa;ke luo la duo si pu lin si;klradw aspryngz;kolloladoseupeulingseu;kolorado springja;kolorado springs;kolorryado springas;kororadosupuringusu;kwlwradw sbrynghs;qwlwrdw spryngs;Κολοράντο Σπρινγκς;Горад Каларада-Спрынгс;Колорадо Спрингс;Колорадо-Спрингс;Колорадо-Спрінгз;Կոլորադո Սպրինգս;קולורדו ספרינגס;كولورادو سبرينغس;کلرادو اسپرینگز;کولاریڈو سپرنگس، کولاریڈو;कॉलोराडो स्प्रिंग्ज;कोलोराडो स्प्रिंग्स्;कोलोर्र्याडो स्प्रिङ्गस्;কলোরাডো স্প্রিংস;კოლორადო-სპრინგზი;コロラドスプリングス;科罗拉多斯普林斯;콜로라도스프링스; +city::5417737;Commerce City;Commerce City;Commerce Town;Derby;Komers Siti;Kommerse Siti;Kumurs Siti;kamarsa siti;kamrs syty klradw;keomeoseusiti;kwmyrk syty;shang mao cheng;Комерс Сити;Коммерсе Сити;Къмърс Сити;كوميرك سيتي;کامرس سٹی، کولوراڈو;کامرس سیتی، کلرادو;कमर्स सिटी;商贸城;커머스시티; +city::5419384;Denver;DEN;Dehnver;Denber;Denv"r;Denver;Denver County;Denvera;Denveres;Denveris;Denverium;Denvero;Denverės;Denwer;Dénwér;Gorad Dehnver;Mile-High City;Ntenver;Queen City of the Plains;Saint Charles;The Mexican Diggings;The Spanish Diggings;dainavara;dan fu;denabhara;denabhara ka'unti;denavara;denba;denbeo;denbhara;denvar;denveri;denvhara;denwexr;dnfr;dnwr;dnwr klradw;dnwwr;tenvar;Ντένβερ;Горад Дэнвер;Денвер;Денвър;Дэнвер;Դենվեր;דנוור;דענווער;دنفر;دنور;دنور، کلرادو;ڈینور;डॅनवर;डेन्भर;डेन्वर्;डेन्व्हर;देन्भर;ডেনভার;ডেনভার কাউন্টি;ਡੈਨਵਰ;டென்வர்;డెన్వర్;ഡെൻവർ;เดนเวอร์;დენვერი;ደንቨር;デンバー;丹佛;덴버; +city::5423573;Grand Junction;GJT;Grand DZankshon;Grand Dzhankshen;Grand Dzhankshn;Grand Dzhunkshun;Grand Junction;Grand-Dzhankshen;Grand-Dzhankshn;Ute;da zhang ke shen;ghrand jnkshn;gramda janksana;grand jankshn klradw;gryanda janksana;gurandojankushon;Гранд Џанкшон;Гранд Джанкшен;Гранд Джанкшн;Гранд Джънкшън;Гранд-Джанкшен;Ґранд-Джанкшн;גראנד גנקשן;غراند جنكشن;گراند جانکشن، کلرادو;گرینڈ جنکشن، کولوراڈو;ग्रँड जंक्शन;ग्र्यान्ड जंक्सन;グランドジャンクション;大章克申; +city::5425043;Highlands Ranch;Hailands Rancas;Hailands Rančas;Highlands Ranch;Khajlands Ranch;ha'ilyandsa rryanca;Хайландс Ранч;Хајландс Ранч;हाइल्यांड्स र्र्यान्च; +city::5427946;Lakewood;Lakewood;Lehjkvud;Lejkud;Lejkvud;lai ke wu de;leikeuudeu;lekavuda;lykwwd;lykwwd klradw;lyyqwwd;reikuuddo;Лейквуд;Лейкуд;Лејквуд;Лэйквуд;לייקווד;ليكوود;لیک ووڈ، کولوراڈو;لیکوود، کلرادو;लेकवूड;レイクウッド;萊克伍德;레이크우드; +city::5435464;Pueblo;Independence;PUB;Pueblo;Puehblo;bwyblw;peblo;phiw bol;pu wei bu luo;puebeullo;pueburo;pwablw klradw;pyu'eblo;pywblw;Пуебло;Пуэбло;פואבלו;بويبلو;پوابلو، کلرادو;پوابلو، کولوراڈو;پیوبلو;पेब्लो;प्युएब्लो;พิวโบล;プエブロ;普韋布洛;푸에블로; +city::5441492;Thornton;Sorton;Thornton;Tornton;Torntun;sang dun;sonton;swrntwn klradw;tharnatana;thwrntwn;twrntwn;Сортон;Торнтон;Торнтън;תורנטון;تھورن ٹن، کولوراڈو;ثورنتون;سورنتون، کلرادو;थर्नटन;ソーントン;桑頓; +city::5443910;Westminster;Harris Park;Uestminstur;Vestminster;Westminster;u~esutominsuta;vestaminstara;wei si min si te;wstmnstr;wstmynstr;wstmynstr klradw;Вестминстер;Вестмінстер;Уестминстър;וסטמינסטר;وستمنستر;وستمینستر، کلرادو;ویسٹ منسٹر، کولوراڈو;वेस्टमिन्स्टर;ウェストミンスター;威斯敏斯特; +city::5454711;Albuquerque;ABQ;Al'bukerke;Albak"rki;Albakerki;Albjukuehrokju;Albukerke;Albukerki;Albukerkė;Albukwer kwe;Albukwér kwé;Albuquerque;Alburquerque;Almpoukerki;Beeldil Daesenili *;Beeʼeldííl Dahsinil;Duke City;New Albuquerque;San Felipe de Neri;San Francisco Xavier;San Francisco de Albuquerque;The Duke City;Vokekyi Leuwi *;a bu kui ji;aelbeokeoki;alabakarki;alabukaraki;albakrky;albukark;albukarki;albukʼerkʼe;albwkrk nyw myksykw;albwkrky;alpukerkki;arubakaki;Αλμπουκέρκη;Албакерки;Албакърки;Албукерки;Албюкуэрокю;Альбукерке;Ալբուկերկե;אלבקרקי;آلبوکرک، نیو میکسیکو;ألباكركي;البوکرکی;आल्बुकर्की;আলবাকার্কি;ਅਲਬੂਕਰਕੀ;ஆல்புகெர்க்கி;ಆಲ್ಬುಕರ್ಕ್;แอลบูเคอร์คี;ალბუკერკე;アルバカーキ;阿布奎基;앨버커키; +city::5475352;Las Cruces;LRU;Las Cruces;Las Krjusehs;Las Kruses;Las Krusis;Las-Kruses;la si ke lu sai si;las kruces;las krwss nywmkzykw;las krwsys;las krwsys nyw myksykw;laseukeulusiseu;rasukurusesu;Лас Крусес;Лас Крусис;Лас Крюсэс;Лас-Крусес;לאס קרוסס;لاس كروسيس;لاس کروسس، نیومکزیکو;لاس کروسیس، نیو میکسیکو;லாஸ் க்ரூசெஸ்;ラスクルーセス;拉斯克鲁塞斯;라스크루시스; +city::5487810;Rio Rancho;Rio Rancho;Rio-Rancho;Río Rancho;liolaencho;riorancho;ryw rantshw;ryw rnchw nywmkzykw;ryw rynchw nyw myksykw;Рио Ранчо;Рио-Ранчо;Ріо-Ранчо;ريو رانتشو;ریو رنچو، نیومکزیکو;ریو رینچو، نیو میکسیکو;リオランチョ;리오랜초; +city::5487811;Rio Rancho;Rio Rancho;Rio Rancho Estates;Rio-Rancho;Рио-Ранчо; +city::5490263;Santa Fe;Alavija *;Gorad Santa-Feh;Hashoko *;Hulpana *;Kwa'apoge *;La Villa;La Villa Real de Santa Fe de San Francisco;La Villa de Santa Fe;Ogapoge *;Pala *;Poge *;SAF;San daxeye *;Sanctae Fidei fanum;Santa Fe;Santa Fe Analco;Santa Fe de San Francisco;Santa Fe ou Granada;Santa Feh;Santa Fé;Santa Fė;Santa-Fe;Santafe;Santafē;Yoo'to;Yooto;Yootó;Yotqo *;ZSH;canta pe;santa fe;santa fyh;santa phe;santafe;santape;sheng da fei;sheng fei;sntafh nywmkzykw;snth ph;Σάντα Φε;Горад Санта-Фэ;Санта Фе;Санта Фэ;Санта-Фе;Սանտա Ֆե;סנטה פה;سانتا فيه;سانتا فێ;سانتا فے، نیو میکسیکو;سانٹا فے;سنتافه، نیومکزیکو;सांता फे;साण्टा फे;सान्टा फ़े;सान्ता फे;சாந்தா பே;แซนตาเฟ;სანტა-ფე;サンタフェ;圣菲;聖大非;산타페; +city::5501344;Carson City;Altepetl Carson;CSN;Carson;Carson City;Carson City County;Carson city;Carsonurbo;Gorad Karsan-Sici;Karson Siti;Karson Sitis;Karson-Siti;Karsonsitija;Karsun Siti;Kota Carson;Kārsonsitija;Lungsod ng Carson;Thanh pho Carson;Thành phố Carson;ka sen cheng;karcan nakaram;karsan siti;karsana siti;karswn syty;kaseunsiti;kasonshiti;kharsansiti;qrswn syty;Κάρσον Σίτι;Горад Карсан-Сіці;Карсон Сити;Карсон-Сити;Карсон-Сіті;Карсън Сити;Քարսոն Սիթի;קרסון סיטי;كارسون سيتى;كارسون سيتي;کارسن سٹی;کارسن شہر، نیواڈا;کارسون‌سیتی;कार्सन सिटी;कार्सन सिति;कार्सन् सिटी;কার্সন সিটি;கார்சன் நகரம்;คาร์สันซิตี;カーソンシティ;卡森城;카슨시티; +city::5503766;Enterprise;Enterprajz;antrbrayz;antrprayz nwada;entapuraizu;Ентерпрајз;إنتربرايز;انترپرایز، نوادا;انٹرپرائز، نیواڈا;エンタープライズ; +city::5505411;Henderson;Basic;Chenterson;Genderson;Gorad Khendehrsan;Henderson;Hendersonas;Jericho Heights;Khenderson;Khendersun;Midway City;Pittman;hendason;hendeoseun;heng de sen;hndrswn;hndrswn nwada;Χέντερσον;Гендерсон;Горад Хендэрсан;Хендерсон;Хендерсън;הנדרסון;هندرسون;هندرسون، نوادا;ہینڈرسن، نیواڈا;ヘンダーソン;亨德森;헨더슨; +city::5506956;Las Vegas;Campi;Gorad Las-Vegas;LAS;Las Vegas;Las Vegas Mission;Las Vegas Ranch;Las Vegasas;Las Venkas;Las-Vegas;Las-Veqas;Lasvegasa;Lasvegaso;Los Vegas;Lungsod ng Las Vegas;McWilliamstown;Naʼazhǫǫsh Hátsoh;Old Town;Piigisi;Ragtown;Vegas;Westside;la si wei jia si;las fyghas;las vegas;las vekas;las veygas;las weka s;las wgas;las wygas nywaڈa;las-vegasi;lasa bhegasa;lasa vegasa;lasa vhegasa;laseubegaseu;laseubeigeoseu;lʼs wgʼs;rasubegasu;Λας Βέγκας;Горад Лас-Вегас;Лас Вегас;Лас-Вегас;Լաս Վեգաս;לאס וגאס;לאס וועגאס;لاس فيغاس;لاس وگاس;لاس ویگاس، نیواڈا;لاس‌وقاس;लास वेगास;लास व्हेगस;লাস ভেগাস;ਲਾਸ ਵੇਗਸ;લાસ વેગાસ;லாஸ் வேகஸ்;లాస్ వెగాస్;ലാസ് വെയ്ഗസ്;ลาสเวกัส;လပ်ဗီးဂပ်စ်မြို့;ლას-ვეგასი;ላስ ቬጋስ;ラスベガス;拉斯維加斯;拉斯维加斯;라스베가스;라스베이거스; +city::5509403;North Las Vegas;Bac Las Vegas;Bắc Las Vegas;Norda Lasvegaso;Nort-Las-Vegas;North Las Vegas;Severen Las Vegas;Severni Las Vegas;Vegas Verdes;Vegas Verdi;bei la si wei jia si;las wgas shmaly nwada;noseulaseubeigeoseu;nosurasubegasu;nwrth las fyghas;Норт-Лас-Вегас;Северен Лас Вегас;Северни Лас Вегас;لاس وگاس شمالی، نوادا;نارتھ لاس ویگاس، نیواڈا;نورث لاس فيغاس;ノースラスベガス;北拉斯維加斯;노스라스베이거스; +city::5509952;Paradise;Paradajs;Paradajz;Paradise;baradays;paeleodaiseu;paradaisu;paradays nwada;tian tang shi;Парадайз;Парадайс;Парадајс;بارادايس;پارادایس، نوادا;پيراڈائز، نیواڈا;パラダイス;天堂市;패러다이스; +city::5511077;Reno;Fullers Crossing;Lakes Crossing;RNO;Rehno;Reno;Reno-Stead;Rino;Rynas;Rīno;lei nuo;lino;rino;rynw;rynw nwada;Ρίνο;Рено;Рино;Рэно;רינא;רינו;رينو;رینو;رینو، نوادا;رینو، نیواڈا;रिनो;リノ;雷諾;리노; +city::5512862;Sparks;Harriman;Sparks;asparks nwada;sbarks;seupakeuseu;Спаркс;اسپارکس، نوادا;سباركس;سپارکس، نیواڈا;스파크스; +city::5512909;Spring Valley;Spring Vali;Spring Valley;Spring-Vehlli;aspryng wly nwada;sbryngh faly;seupeulingbaelli;supuringubare;Спринг Вали;Спринг-Вэлли;اسپرینگ ولی، نوادا;سبرينغ فالي;سپرنگ ویلی، نیواڈا;スプリングバレー;스프링밸리; +city::5513343;Sunrise Manor;Sanrajz Mejnor;Sanrajz-Mehner;Sunrise Manor;sanraizumana;sanrayz mnwr nwada;snrayz manwr;Санрайз-Мэнер;Санрајз Мејнор;سانرایز منور، نوادا;سنرائز مینور، نیواڈا;سنرايز مانور;サンライズマナー; +city::5516233;Amarillo;AMA;Amarilas;Amarillo;Amarilo;Amarilyo;Oneida;a ma li luo;aemeolillo;amariro;amariyo;amarylw;amarylw tgzas;Амарилло;Амарило;Ամարիլլո;אמרילו;آماریلو، تگزاس;آماریلو، ٹیکساس;أماريلو;اماریلو;आमारियो;アマリロ;阿馬里洛;애머릴로; +city::5520993;El Paso;Concordia;ELP;Ehl'-Paso;El Pasas;El Paso;El'-Paso;El-Paso;Elpaso;Franklin;Gorad Ehl'-Pasa;Magoffinsville;Passus;ai er pa suo;al basw;al pasw;ayl pasw;el-paso;ela peso;ela pyaso;elpaeso;Ελ Πάσο;Горад Эль-Паса;Ел Пасо;Ель-Пасо;Эль-Пасо;Էլ Պասո;אל פאסו;إل باسو;ال پاسو;ایل پاسو;एल पॅसो;এল প্যাসো;เอลแพโซ;ელ-პასო;ელ-ფასო;エル・パソ;艾爾帕索;엘패소; +city::5525577;Lubbock;LBB;Labbok;Labok;Lubbock;Lubuk;la bo ke;labak tgzas;labaka;lbk;leobeog;lwbwk;rabokku;Лаббок;Лабок;Лъбък;לאבק;لاباک، تگزاس;لابوک، ٹیکساس;لبک;لوبوك;लबक;ラボック;拉伯克;러벅; +city::5526337;Midland;MAF;Midland;Midlend;Midway;mdland;mi de lan;middorando;mideullaendeu;mydlnd;mydlnd tgzas;Мидланд;Мидленд;Мідленд;מידלנד;مدلاند;مڈلینڈ، ٹیکساس;میدلند، تگزاس;ミッドランド;米德蘭;미들랜드; +city::5527554;Odessa;Odesa;Odessa;ao de sa;awdsa;awdysa;odessa;Одеса;Одесса;أوديسا;اودسا;اوڈیسا، ٹیکساس;اوڈیسہ، ٹیکساس;オデッサ;敖德薩; +city::5530022;San Angelo;SJT;San Andzelo;San Angelo;saen-aenjello;san anjylw;san aynjlw;san'anjero;sheng an ji luo;sn anjlw tgzas;Сан Анџело;سان أنجيلو;سان اینجلو;سان اینجلو، ٹیکساس;سن آنجلو، تگزاس;サンアンジェロ;聖安吉洛;샌앤젤로; +city::5546220;Saint George;SGU; +city::5552301;Avondale;Avondale;Avondale Ranch;Avondejl;Avundejl;Ejvondejl;Litchfield;afwndyl;ai wen dai er;awndyl aryzwna;ebhonadela;Авондејл;Авъндейл;Ейвондейл;أفونديل;اوندیل، آریزونا;ایونڈیل، ایریزونا;एभोनडेल;埃文代尔; +city::5570160;Redding;Latona;RDD;Reading;Redding;Reding;leding;lei ding;rdyng kalyfrnya;rdyngh;redinga;redingu;Реддинг;Рединг;ردينغ;ردینگ، کالیفرنیا;ریڈنگ،امریکہ;रेडिंग;レディング;雷丁;레딩; +city::5574991;Boulder;Bolder;Boulder;Bouldur;WBU;ba'uldara;bo de;boldara;bolde xr;boldeo;boruda;bwldr;bwldr klradw;Болдер;Боулдер;Боулдър;בולדר;بولدر;بولدر، کلرادو;بولڈر، کولوراڈو;बाउल्डर;बोल्डर;โบลเดอร์;ボルダー;波德;볼더; +city::5577147;Fort Collins;Camp Collins;FNL;Fort Collins;Fort Kolins;Fort Kolinsas;Fort Kollins;Fort-Kollins;Ft. Collins;fwrt kalynz klradw;fwrt kwlnz;ke lin si bao;pharta kolinsa;phorta kolinsa;poteukollinseu;pwrt qwlyns;Форт Колинс;Форт Коллинс;Форт-Коллинс;Форт-Коллінс;פורט קולינס;فورت كولنز;فورت کالینز، کلرادو;فورٹ کولنز، کولوراڈو;फर्ट कोलिन्स;फोर्ट कॉलिन्स;フォート・コリンズ;科林斯堡;포트콜린스; +city::5577592;Greeley;GXY;Greeley;Greely;Grijli;Grili;ge li li;ghryly;grili;gryly;gryly klradw;guriri;Грийли;Грили;גרילי;غريلي;گریلی، کلرادو;گریلی، کولوراڈو;ग्रीली;グリーリー;格里利; +city::5579276;Longmont;Longmont;Longmott;Longmunt;lang meng te;langamonta;langmant klradw;longmeonteu;lwnghmwnt;rongumonto;Лонгмонт;Лонгмотт;Лонгмънт;لانگمانت، کلرادو;لونغمونت;لونگمونٹ، کولوراڈو;लङ्गमोन्ट;ロングモント;朗蒙特;롱먼트; +city::5579368;Loveland;FNL;Lavland;Lovland;Luvlend;la fu lan;labhalyanda;lawlnd klradw;leobeulaendeu;lwfland;Лавланд;Ловланд;Лъвленд;لاولند، کلرادو;لوفلاند;لولینڈ، کولوراڈو;लभल्यान्ड;拉夫兰;러브랜드; +city::5586437;Boise;BOI;Boise;Boise City;Boisisitija;Boisė;Boizi;Boizis;Bojse;Bojsi;Bojzi;Boyse;Gorad Bojseh;baysi;bo yi xi;bo'ija;bo'ijhi;bo'isi;boise;boishi;boisi;bwysy;bwyz;bwyzy aydahw;poyci;Μπόιζι;Бойзи;Бойсе;Бојси;Горад Бойсэ;Բոյսե;בויסי;بوئسے;بويسي;بویز;بویزی، آیداهو;बाय्सी;बॉइझी;बोइज;बोइसी;பொய்சி;ಬಾಯ್ಸಿ;ბოისე;ボイシ;博伊西;보이시; +city::5587698;Caldwell;Caldwell;Hamburg Siding;Kolduehll;Kolduel;Koldvel;kaldavela;kaldwl;kaldwyl;koldeuwel;korudou~eru;qwldwwl;Колдвел;Колдуел;Колдуэлл;קולדוול;كالدويل;کالدول;کالڈویل، ایڈاہو;काल्डवेल;კოლდუელი;コールドウェル;콜드웰; +city::5596475;Idaho Falls;Ajdago-Folls;Ajdakho Fols;Ajdakho-Fols;IDA;a'id'aho phalsa;ai da he fu er si;aidaho-polsi;aidahoforuzu;aydahw falz aydahw;aydahw fwlz;Айдаго-Фоллс;Айдахо Фолс;Айдахо-Фолс;Ајдахо Фолс;آیداهو فالز، آیداهو;أيداهو فولز;ایڈاہو فالز، ایڈاہو;आइडाहो फल्स;აიდაჰო-ფოლსი;アイダホフォールズ;爱达荷福尔斯; +city::5600685;Meridian;Meridian;Meridijan;Muridiun;meridian;meridiani;meridiyana;mrydyan aydahw;myrydyan;Меридиан;Меридијан;Меридіан;Мъридиън;مریدیان، آیداهو;ميريديان;میریڈیئن، ایڈاہو;मेरिडियन;მერიდიანი;メリディアン; +city::5601933;Nampa;Nampa;New Jerusalem;namba;nampa;nampa aydahw;nan pa;nanpa;Нампа;نامبا;نامپا، آیداهو;نامپا، ایڈاہو;नाम्पा;ნამპა;ナンパ;楠帕; +city::5604045;Pocatello;PIH;Pocatello;Pocatello Junction;Pokatello;Pokatelo;Poukatelou;bo ka te luo;bwkatylw;pokatelo;pokaterro;pokeotello;pwkatlw aydahw;Покателло;Покатело;Поукателоу;بوكاتيلو;پوکاتلو، آیداهو;پوکاٹیلو، ایڈاہو;पोकातेलो;პოკატელო;ポカテッロ;波卡特洛;포커텔로; +city::5640350;Billings;Area metropolitana de Billings;BIL;Belinum;Billings;Billings Metropolitan Area;biringusu;Área metropolitana de Billings;Биллингс;ビリングス; +city::5655240;Great Falls;Electric City;GTF;Great Falls;Grejt Fols;Grejt-Fols;Grit Fouls;da pu bu cheng;ghryt fwlz mwntana;guretoforuzu;Грейт Фолс;Грейт-Фолс;Грејт Фолс;Грит Фоулс;غريت فولز، مونتانا;グレートフォールズ;大瀑布城; +city::5666639;Missoula;Hnme'suuli;Im-i-sul-e-tiku;In-mae-soo-la;In-may-soo-let-que;MSO;Missoula;Missoula Mills;Missula;Misula;Mizula;Nemissoolatakoo;mi su la;mijulla;mizura;myswla;myzwla mwntana;myzwlh;Мизула;Миссоула;Миссула;Мисула;Міссула;מיזולה;ميسولا;میزولا، مونتانا;میسولا، مونٹانا;ミズーラ;米蘇拉;미줄라; +city::5688025;Bismarck;BIS;Bismak;Bismarck;Bismarck i Nord-Dakota;Bismark;Bismarka;Bismarkas;Bismarks;Bismàk;Bizmark;Edwinton;Gorad Bismark;The Crossing;bi si mai;bijeumakeu;bismark;bismarka;bisumaku;bysmark;bysmark dakwtay shmaly;bysmrq;pismark;Μπίσμαρκ;Бизмарк;Бисмарк;Бісмарк;Горад Бісмарк;Բիսմարկ;ביסמרק;انٹیل;بسمارک، شمالی ڈکوٹا;بيسمارك;بیسمارک، داکوتای شمالی;बिस्मार्क;பிஸ்மார்க்;บิสมาร์ก;ბისმარკი;ビスマーク;俾斯麥;비즈마크; +city::5710756;Albany;Albani;Ehlbani;Olbani;albany;albany awrgn;albany awrygwn;ao er ba ni;orubani;xxlbani;Албани;Олбани;Элбани;آلبانی، اورگن;ألباني;البانی، اوریگون;ออลบานี;オールバニ;奥尔巴尼; +city::5713376;Beaverton;Beaverton;Beaverton Old Siding;Bijvurtun;Bivehrton;Biverton;bibaton;byfyrtwn;bywrtwn awrgn;Бивертон;Бивэртон;Бийвъртън;Бівертон;بيفيرتون;بیورتون، اورگن;بیورٹن، اوریگون;ビーバートン; +city::5713587;Bend;Behnd;Bend;ben de;bendo;bnd;bnd awrgn;bynd;Бенд;Бэнд;בנד;بند، اورگن;بيند;ベンド;本德; +city::5720727;Corvallis;CVO;Corvallis;Korvalis;Korvallis;Kovalis;ke wa li si;kobaelliseu;kobarisu;krwlys awrgn;kwrfalys;kwrwyls awrygwn;Ковалис;Корвалис;Корваллис;كورفاليس;کرولیس، اورگن;کورویلس، اوریگون;コーバリス;科瓦利斯;코밸리스; +city::5725846;Eugene;EUG;Eugene;Eugine City;Gorad Judzhyn;Judzhijn;Judzhin;Judzin;Judzinas;Judžinas;you jin;yujin;ywgyn;ywjyn;ywjyn awrgn;Јуџин;Горад Юджын;Юджийн;Юджин;Юджін;יוגין;يوجين;یوجین;یوجین، اورگن;ユージン;ユージーン;尤金;유진; +city::5729485;Gresham;Eugene;Grehskham;Gresham;ghrysham;grsham awrgn;grsm;grysham awrygwn;gureshamu;Грешам;Грэсхам;גרשם;غريشام;گرشام، اورگن;گریشام، اوریگون;グレシャム; +city::5731371;Hillsboro;Chilsmporo;Gilsboro;HIO;Hillsboro;Khillsboro;Khillsborou;Khilsboro;Khilsburo;hiljeubeoleo;hiruzuboro;hylsbrw awrgn;hylsbwrw;xi er si bo lei;Χίλσμπορο;Гілсборо;Хиллсборо;Хиллсбороу;Хилсборо;Хилсбъро;هيلسبورو;هیلسبرو، اورگن;ہلزبورو، اوریگون;ヒルズボロ;希尔斯伯勒;힐즈버러; +city::5740099;Medford;MFR;Medford;mdfwd awrgn;mdpwrd;medeupeodeu;medofodo;mei de fu;mydfwrd;Медфорд;מדפורד;مدفود، اورگن;ميدفورد;میڈفورڈ، اوریگون;メドフォード;梅德福;메드퍼드; +city::5746545;Portland;Bridgetown;Gorad Portlend;P-town;PDX;Portland;Portland i Oregon;Portlandas;Portlandia;Portlando;Portlant;Portlend;Portlenda;Puddletown;Rip City;River City;Stumptown;The City of Roses;bo te lan;bwrtland awryghwn;port land;portalainda;portalanda;portlant;portlendi;poteullaendeu;potorando;pwrtlnd;pwrtlnd awrgn;Πόρτλαντ;Горад Портленд;Портланд;Портленд;Պորտլենդ;פורטלנד;بورتلاند، أوريغون;پورتلند، اورگن;पोर्टलंड;पोर्टलैंड;போர்ட்லன்ட்;పోర్ట్ లాండ్;ಪೋರ್ಟ್‌ಲ್ಯಾಂಡ್‌;พอร์ตแลนด์;პორტლენდი;ფორთლენდი;ポートランド;波特蘭;포틀랜드; +city::5750162;Salem;Chemeketa;Gorad Sejlem;SLE;Salem;Salemas;Salems;Seilema;Sejlem;Sejlum;celam;sai lei mu;salema;salm;saylm;se lem;seilleom;seiramu;selama;selem;sylm awrgan;sylm awrygwn;syylm;Σάλεμ;Горад Сейлем;Салем;Сейлем;Сейлъм;Сејлем;Սալեմ;סיילם;سالم;سايلم;سیلم، اورگان;سیلم، اوریگون;सालेम;सेलम;सेलेम्;சேலம்;เซเลม;セイラム;塞勒姆;세일럼; +city::5754005;Springfield;Springfijld;Springfild;aspyryng fyld awrgn;sbrynghfyld;seupeulingpildeu;si pu lin fei er de;supuringufirudo;Спрингфийлд;Спрингфилд;Спрінгфілд;اسپیرینگ فیلد، اورگن;سبرينغفيلد;سپرنگفیلڈ، اوریگون;スプリングフィールド;斯普林菲尔德;스프링필드; +city::5756758;Tigard;Tajgard;Tigard;Tigurd;tai ge de;taigado;taigeodeu;taygrd awrgn;thi kard;tyghard;Тајгард;Тигард;Тигърд;تایگرد، اورگن;تيغارد;ٹائگرڈ، اوریگون;ไทการ์ด;タイガード;泰格德;타이거드; +city::5768233;Rapid City;Haeohemahpe;Hay Camp;Háeohémahpe;RAP;Rapid;Rapid City;Rapid Siti;Rapid-Siti;la pi de cheng;laepideusiti;rabyd syty;raipida siti;rapiddoshiti;rpyd syty dakwtay jnwby;Рапид Сити;Рапид-Сити;Рапід-Сіті;رابيد سيتي;رپید سیتی، داکوتای جنوبی;ریپڈ سٹی، جنوبی ڈکوٹا;रैपिड सिटी;แรพิดซิตี;ラピッドシティ;拉皮德城;래피드시티; +city::5777107;Layton;Layton;Lejton;Lejtun;laytwn;lei dun;leiteon;lytwn ywta;Лейтон;Лейтън;Лејтон;لايتون;لیتون، یوتا;لیٹن، یوٹاہ;雷顿;레이턴; +city::5777224;Lehi;Lehi;Lehi City;Lehi Junction;Lekhe;Likhaj;lhy ywta;li hai;lyhy;Лехе;Лихай;لحی، یوتا;ليهي;لیہائی، یوٹاہ;李海; +city::5777544;Logan;LGU;Logan;Lougan;luo gen;lwgan ywta;lwghan;rogan;Логан;Лоуган;لوغان;لوگان، یوتا;لوگن، یوٹاہ;ローガン;洛根; +city::5778352;Millcreek;Milkrik;Милкрик;میل‌کریک، یوتا; +city::5779206;Ogden;Brownsville;Fort Buenaventura;Lynne;OGD;Ogden;Ogden City;Ogdun;ao ge deng;awdn ywta;awghdn;ogeudeon;oguden;Огден;Огдън;Оґден;آگڈین، یوٹاہ;أوغدن;اودن، یوتا;オグデン;奥格登;오그던; +city::5779334;Orem;Orem;Oremas;Orum;ao lei mu;awrym;awrym ywta;oremu;Орем;Оръм;أوريم;اورم، یوٹاہ;اوریم، یوتا;オレム;奥勒姆; +city::5780026;Provo;Fort Utah;PVU;Provas;Provo;Provo City;Provou;brwfw;peulobo;prwbw;prwww;prwww ywta;pu ruo fu;purobo;Прово;Провоу;פרובו;بروفو;پرووو;پرووو، یوتا;پرووو، یوٹاہ;プロボ;普若佛;프로보; +city::5780993;Salt Lake City;Cathair Salt Lake;Civitas Lacus Salsi;Gorad Solt-Lehjk-Sici;Kota Salt Lake;Lungsod ng Salt Lake;SLC;Sallaga Urbo;Salt Lake;Salt Lake Ceety;Salt Lake City;Sol Lek Siti;Solt Leik Sites;Solt Leik Siti;Solt Leik Sitis;Solt Leik Sitės;Solt Lejk Siti;Solt Leyk Siti;Solt-Lejk-Siti;Soltleiksitija;Thanh pho Salt Lake;Thành phố Salt Lake;calt lek nakaram;salata leka siti;salt lek siti;salt lyk;salt lyk syty;salta leka siti;solta leka siti;solteuleikeusiti;sorutoreikushiti;swlt lyyq syty;sxltleksiti;yan hu cheng;Σολτ Λέικ Σίτι;Горад Солт-Лэйк-Сіці;Солт Лейк Сити;Солт Лејк Сити;Солт-Лейк-Сити;Солт-Лейк-Сіті;Սոլթ Լեյք Սիթի;סולט לייק סיטי;سالت ليك;سالت لیک سیتی;سالت‌لیک‌سیتی;سالٹ لیک سٹی;سالٹ لیک سٹی، یوٹاہ;साल्ट लेक सिटी;साल्ट् लेक् सिटी;सॉल्ट लेक सिटी;ਸਾਲਟ ਲੇਕ ਸਿਟੀ;சால்ட் லேக் நகரம்;ಸಾಲ್ಟ್ ಲೇಕ್ ಸಿಟಿ;ซอลต์เลกซิตี;ཚྭ་མཚོའི་གྲོང་ཁྱེར།;სოლტ-ლეიკ-სიტი;ソルトレイクシティ;盐湖城;鹽湖城;솔트레이크시티; +city::5781061;Sandy;Sandy;Sandy City; +city::5781770;South Jordan;Juzhen Dzhordan;Saut DZordan;Saut-Dzhordan;jwrdn aljnwbyt;nan qiao dan;sawt jrdn ywta;Саут Џордан;Саут-Джордан;Южен Джордан;جوردن الجنوبية;ساوت جردن، یوتا;ساوتھ جورڈن، یوٹاہ;南乔丹; +city::5782476;Taylorsville;Tejlorsvil;Tejlorsvil';Tejlorsvill;Tejlursvil;tai lei si wei er;taylwrzfyl;teilleoseubil;tylwrzwyl ywta;Тейлорсвилл;Тейлорсвіль;Тейлърсвил;Тејлорсвил;تايلورزفيل;تیلورزویل، یوتا;ٹیلرزویل، یوٹاہ;泰勒斯维尔;테일러스빌; +city::5784549;West Jordan;Okcidenta Jordan;Uehst-Dzhordan;Vest DZordan;Vest-Dzhordan;West Jordan;Zapaden Dzhordan;u~esutojodan;weseuteujodeon;wst gwrdn;wst jrdn ywta;wyst jwrdan;xi qiao dan;Вест Џордан;Вест-Джордан;Западен Джордан;Уэст-Джордан;וסט גורדן;وست جردن، یوتا;ويست جوردان;ویسٹ جورڈن، یوٹاہ;ウェストジョーダン;西喬丹;웨스트조던; +city::5784607;West Valley City;Granger-Hunter;Uehst-Valli-Siti;Uest Vali Siti;Vest Vali Siti;Vest-Velli-Siti;Wast Valley Ceety;West Valley;West Valley City;u~esutobareshiti;wst wly syty ywta;wyst faly syty;xi wa li cheng;Вест Вали Сити;Вест-Веллі-Сіті;Уест Вали Сити;Уэст-Валли-Сити;وست ولی سیتی، یوتا;ويست فالي سيتي;چیسٹرفیلڈ، یوٹاہ;ウェストバレーシティ;西瓦利城; +city::5785965;Auburn;Auburn;Obern;Slaughter;ao ben;awbrn washyngtn;awbwrn;oban;obeon;Оберн;آبرن، واشنگٹن;أوبورن;اوبرن، واشینگتن;オーバーン;奥本;오번; +city::5786882;Bellevue;Bellevue;Belv'ju;Belvju;balfyw;bei er wei you;belavhyu;belbyu;berubyu;blwyw washyngtn;Белвью;Белвю;Белвју;بالفيو;بلویو، واشنگٹن;بلویو، واشینگتن;बेलव्ह्यू;ベルビュー;贝尔维尤;벨뷰; +city::5786899;Bellingham;BLI;Belingam;Belinghem;Belingkham;Bellingham;Bellingkhem;Bellinqham;bei ling e mu;bellinghaem;berinhamu;blyngham washyngtn;bylyngham;Белингам;Белингхам;Беллингхем;Беллінгхем;Բելինգհեմ;בלינגהאם;بلینگهام، واشینگتن;بيلينغام;بیلنگہام;ベリンハム;贝灵厄姆;벨링햄; +city::5788516;Burien;Bjurijen;Bjuriun;baryn washyngtn;berian;bu li en;bwryn;byeolieon;Бюриън;Бјуријен;بارین، واشینگتن;بورين;ベリアン;布里恩;벼리언; +city::5793933;Everett;Ehverett;Everet;Everett;Evuret;PAE;ai fu li te;awrt washyngtn;ayfryt;ebaretto;ebeoles;Еверет;Еверетт;Евърет;Эверетт;אוורט;إيفريت;اورت، واشینگتن;ایورٹ;ایوریٹ، واشنگٹن;エバレット;埃弗里特;에버렛; +city::5794245;Federal Way;Federal Vej;Federal Way;Fedural Uej;fdral wy washyngtn;federaruu~ei;fei de lei er wei;fydral way;pedeoleol-wei;Федерал Веј;Федърал Уей;فدرال وی، واشینگتن;فيدرال واي;فیڈرل وئے، واشنگٹن;فیڈرل وے;フェデラルウェイ;费德勒尔韦;페더럴웨이; +city::5799610;Kennewick;Dell Haven;Kenevik;Keniuik;Kennevik;Kennewick;VSK;ken na wei ke;keneowig;keniu~ikku;kn wyk washyngtn;kynwk;kynwyk;Кеневик;Кениуик;Кенневик;Кенневік;كينويك;کن ویک، واشینگتن;کیناویک، واشنگٹن;کینوک;ケニウィック;肯纳威克;케너윅; +city::5799625;Kent;Kent;Titusville;ken te;kenteu;kento;knt washyngtn;kynt;Кент;كينت;کنت، واشینگتن;کینٹ، واشنگٹن;ケント;肯特;켄트; +city::5799841;Kirkland;Kerkland;Kirklandas;Kurkland;kakurando;ke ke lan;keokeullaendeu;krklnd washyngtn;kyrkland;Керкланд;Къркланд;كيركلاند;کرکلند، واشینگتن;کرکلینڈ، واشنگٹن;カークランド;柯克兰;커클랜드; +city::5800420;Lakewood;Lakewood;Lakewood Center;Lejkud;Lejkvud;lai ke wu de;leikeuudeu;lyk wwd washyngtn;lykwwd;reikuuddo;Лейквуд;Лейкуд;Лејквуд;ليكوود;لیک وود، واشینگتن;لیک ووڈ، واشنگٹن;レイクウッド;莱克伍德;레이크우드; +city::5802570;Marysville;Merisvil;ma li si wei er;marys wyl washyngtn;marysfyly;mearizubiru;melijeubil;myryzwl;Мерисвил;ماريسفيلي;ماریس ویل، واشینگتن;میریزول;میریزویل، واشنگٹن;メアリーズビル;马里斯维尔;메리즈빌; +city::5805687;Olympia;Gorad Alimpija;Marshville;OLM;Olimpeje;Olimpi;Olimpia;Olimpija;Olimpėjė;Olympia;ao lin pi ya;awlmbya;awlmpya;awlmpya washyngtn;olampiya;olimpiya;ollimpia;orinpia;Ολύμπια;Горад Алімпія;Олимпи;Олимпия;Олимпија;Олімпія;Օլիմպիա;אולימפיה;أولمبيا;اولمپیا;اولمپیا، واشنگٹن;اولمپیا، واشینگتن;ऑलिंपिया;ओलम्पिया;ஒலிம்பியா;オリンピア;奧林匹亞;올림피아; +city::5806298;Pasco;PSC;Pasko;Paskou;Pesko;baskw;pa si ke;paskw washyngtn;pasuko;Паско;Паскоу;Песко;باسكو;پاسکو، واشنگٹن;پاسکو، واشینگتن;پاسکو،واشنگٹن;パスコ;帕斯科; +city::5808079;Redmond;Melrose;Redmond;Redmund;Salmonberg;ledeumeondeu;lei de meng de;rdmwnd;redomondo;rydmwnd washntn;Редмонд;Редмънд;ردموند;ريدموند، واشنطن;ریڈمونڈ;レドモンド;雷德蒙德;레드먼드; +city::5808189;Renton;Black River Bridge;RNT;Renton;Rentun;lenteon;lun dun;renton;rntwn washyngtn;ryntwn;Рентон;Рентън;Ռենտոն;رنتون، واشینگتن;رينتون;رینٹن، واشنگٹن;レントン;伦顿;렌턴; +city::5808276;Richland;RLD;Richland;Richlend;li qi lan;ritchirando;rychlnd washyngtn;rytshland;ryzlnd;Ричланд;Ричленд;Річленд;ריצלנד;ريتشلاند;رچلینڈ، واشنگٹن;ریچلند، واشینگتن;リッチランド;里奇兰; +city::5809402;Sammamish;Samamish;sam mamysh washyngtn;samamisshu;samamysh;se ma mi shen;Самамиш;سام مامیش، واشینگتن;ساماميش;サマミッシュ;瑟马米什; +city::5809844;Seattle;Gorad Siehtl;SEA;Seatl;Seattle;Seattlum;Siatl;Siatul;Siehtl;Sietl;Sietla;Sietlas;Sijetl;Siyaatil;Séatl;ciyattil;shiatoru;si'aitala;siaeteul;sietʼli;siyatal;siyatala;syatl;xi ya tu;Σιάτλ;Горад Сіэтл;Сиатъл;Сиетл;Сиэтл;Сијетл;Сієтл;Սիեթլ;סיאטל;سياتل;سیئٹل;سیاتل;سیاٹل;सिअ‍ॅटल;सीऐटल;সিয়াটল;சியாட்டில்;ಸಿಯಾಟಲ್;ซีแอตเทิล;სიეტლი;ስያትል;ស៊ីតថល;シアトル;西雅圖;시애틀; +city::5810301;Shoreline;Shorlajn;an xian shi;shoarain;shwrlayn washyngtn;shwrlyn;syolain;Шорлайн;Шорлајн;شورلائن، واشنگٹن;شورلاین، واشینگتن;شورلين;ショアライン;岸線市;쇼라인; +city::5811456;South Hill;; +city::5811696;Spokane;GEG;Gorad Spakan;Spocanum;Spokan;Spokane;Spokane Falls;Spokein;Spoken;aspwkn;sbwkyn;seupokaen;si bo kan;spwkyn;spwqyyn;supoken;Σποκέιν;Горад Спакан;Спокан;Спокен;Սպոքեն;ספוקיין;اسپوکن;سبوكين;سپوکین;سپوکین، واشنگٹن;スポケーン;スポーケン;斯波坎;스포캔; +city::5811729;Spokane Valley;Spokan Vali;Spoken Vali;aspwkyn wly washyngtn;sbwkan faly;seupokaenbaelli;si bo kan gu;spwkyn wyly;Спокан Вали;Спокен Вали;اسپوکین ولی، واشینگتن;سبوكان فالي;سپوکین ویلی;سپوکین ویلی، واشنگٹن;斯波坎谷;스포캔밸리; +city::5812944;Tacoma;Chebaulip;Commencement City;Gorad Takoma;Puyallup;T'kope;T'kopt;TIW;Tacoma;Takoma;Takouma;da jin ma;ta ke ma;takoma;takwma;takwma washyngtn;teokoma;tqwmh;Τακόμα;Горад Такома;Такома;Такоума;טקומה;تاكوما;تاکوما، واشینگتن;ٹاکوما;ٹاکوما، واشنگٹن;タコマ;塔科马;打金麻;터코마; +city::5814616;Vancouver;Alashikash;Camp Vancouver;Columbia Barracks;Columbia City;Fort Vancouver;Predloga:Zascitenovand;Predloga:Zaščitenovand;Template:Vandalism;Van'kouver;Vancouver;Vancouver Barracks;Vancouver City;Vankuver;Vankuveris;Vankuvur;baenkubeo;bankuba;fankwfr;wen ge hua;wnkwwr washyngtn;wnqwbr;Βανκούβερ;Ванкувер;Ванкувър;ונקובר;فانكوفر;ونکوور، واشینگتن;وینکوور، واشنگٹن;แวนคูเวอร์;バンクーバー;溫哥華;밴쿠버; +city::5816605;Yakima;Jakima;Jakimo;North Yakima;YKM;Yakima;ya ji ma;yakima;yakyma;yakyma washyngtn;Јакимо;Якима;Якіма;יאקימה;ياكيما;یاکیما;یاکیما، واشینگتن;یکما، واشنگٹن;ヤキマ;雅基馬;야키마; +city::5820705;Casper;CPR;Kasper;Kaspur;ka si po;kaeseupeo;kasbr;kspr waywmyng;kyasupa;kyspr wayywmng;qspr;Каспер;Каспър;קספר;كاسبر;کسپر، وایومینگ;کیسپر، وائیومنگ;キャスパー;卡斯珀;캐스퍼; +city::5821086;Cheyenne;CYS;Cheyenna;Cheyenne;Gorad Shaen;Hell on Wheels;Saien;Saiena;Sajenas;Sajens;Sayen;Shaen;Shaenn;Shajen;Shajenn;ce'ini;ceyen;sayana;seyen;shaian;shayan;shayn;shayn waywmyng;shayn wayywmng;syaien;xia yan;Šaiena;Šajenas;Šajens;Σαϊέν;Горад Шаен;Шаен;Шайен;Шайенн;Шаєнн;Шајен;Շայեն;שאיין;شايان;شاین;شاین، وائیومنگ;شاین، وایومینگ;चेइनी;शायान;शेयेन्;செயென்;シャイアン;夏延;샤이엔; +city::5856195;Honolulu;Anorourou;Chonoloulou;Gana-Rura;Gana-ruru;Ganaruro;Ganaruru;Gonolulu;Gorad Ganalulu;HNL;Hana-Rura;Hana-Ruru;Hana-ruru;Honoloulou;Honolulu;Honolulú;Honolúlú;Honoruru;Khonolulu;Than-hiong-san;Thàn-hiông-sân;hanalulu;hanululu;honalulu;honollullu;honolulu;honoruru;hwnwlwlw;tan xiang shan;Χονολουλού;Гонолулу;Горад Ганалулу;Хонолулу;Һонолулу;Հոնոլուլու;האנאלולו;הונולולו;هونولولو;ہwnwlwlw ہwayy;ہونولولو;ہونولولو، ہوائی;हानलूलू;होनालुलु;होनोलुलु;होनोलूलू;হনুলুলু;ହନଲୁଲୁ;ஹொனலுலு;ಹೊನೊಲುಲು;โฮโนลูลู;ཧོ་ནོ་ལུ་ལུ།;ဟိုနိုလူလူမြို့;ჰონოლულუ;ሆኖሉሉ;ホノルル;檀香山;호놀룰루; +city::5879400;Anchorage;ANC;Alaska City;An'koreitz;Anchorage;Ancoraria;Angits;Ankoric;Ankoridz;Ankoridza;Ankoridzas;Ankoridzh;Ankoridž;Ankoridža;Ankoridžas;Ankorij;Ankuridzh;Brownville;Dgheyay Kaq';Enkoridz;Gorad Ankorydzh;Kisagvik;Kisaġvik;Port Woodrow;Qatuk'e'usht;Ship Creek;Tan;Ves Dnaghildeqt;Woodrow;aengkeoliji;amkareja;an ke la zhi;ancorage byuro;ankarej;ankarejji;ankwryj;aynkrayj alaska;enkarej;enkoreja;ʼnqwrg;Ανκορέιτζ;Анкоридж;Анкъридж;Горад Анкорыдж;Енкориџ;Անքորեջ շրջան;אנקורג;أنكوريج;انکوریج;اینکرایج، الاسکا;अँकरेज;एंकोरेज;অ্যাংকারিজ;আন্চোরগে ব্যুরো;ஏங்கரெஜ்;ആങ്കറേജ്;ანკორიჯი;アンカレッジ;安克拉治;앵커리지; +city::6331909;Johns Creek;City of Johns Creek;Dzons Krik;Johns Creek;janz kryk jarjya;janz kryk jwrjya;jonseukeulig;jwnz kryk;Џонс Крик;جانز کریک، جارجیا;جانز کریک، جورجیا;جونز كريك;존스크릭; +city::6332439;Alafaya;; +city::7160204;City of Milford (balance);; +city::7259621;West Bloomfield Township;Municipio de West Bloomfield;West Bloomfield;West Bloomfield Township;West Bloomfield Township CDP;Xa West Bloomfield;Xã West Bloomfield;bldt wyst blwmfyld;بلدة ويست بلومفيلد;ویسٹ بلوم فیلڈ ٹاؤن شپ، مشی گن;ウェスト・ブルームフィールド; +city::7260806;Arden-Arcade;Arden-Arcade;Arden-Arcade CDP;Arden-Arkejd;aden'akedo;ardena'arkeda;Арден-Аркејд;आर्डेनआर्केड;アーデンアーケード; +city::7261268;Florence-Graham;Florence-Graham;Florence-Graham CDP; +city::7310164;San Tan Valley;; +city::7839240;Enchanted Hills;; +city::8096217;Eastvale;Istvejl;ayst wyl kalyfrnya;aystfal;dong gu;Иствејл;إيستفال;ایست ویل، کالیفرنیا;东谷; +city::3440034;Tacuarembo;San Fructuoso;TAW;Tacuarembo;Tacuarembó;Takuarembo;Villa de San Fructuoso;Villa de Tacuarembo;ta kua lun bo;takkuvarimpo;takuarenbo;takwalembo;takwarmbw;takwarymbw;Такуарембо;Տակուարեմբո;تاکوآرمبو;تاکواریمبو;தக்குவாறிம்போ;ტაკუარემბო;タクアレンボー;塔夸伦博;타콰렘보; +city::3440714;Salto;Ciudad del Salto;STY;Sal'to;Salta;Saltas;Salto;sa er tuo;sal to;salato;salto;saltw arwgwyh;saltw awrwghway;saruto;sltw;Салто;Сальто;Սալտո;סלטו;سالتو، أوروغواي;سالتو، اروگوئه;سالتو، یوراگوئے;साल्तो;সালতো;ซัลโต;სალტო;サルト;萨尔托;살토; +city::3440781;Rivera;RVY;Rivera;Villa de Rivera;li wei la;libela;ri be ra;ribera;rivera;rybrh;ryfyra;rywra;rywyra;Ривера;Рівера;Ռիվերա;ריברה;ريفيرا;ریورا;ریویرا;রিবেরা;รีเบรา;რივერა;リベラ;里韦拉;리베라; +city::3441243;Paysandu;Ciudad de Paysandu;Ciudad de Paysandú;Gorad Pajsandu;PDU;Paisandu;Pajsandu;Paysandu;Paysandú;pai sang du;paisando~u;paisandu;payasandu;paysandw;piy san du;Горад Пайсанду;Пайсанду;Պայսանդու;پایساندو;পায়সান্দু;ไปย์ซันดู;პაისანდუ;パイサンドゥー;派桑杜;파이산두; +city::3441575;Montevideo;Ciudad de Montevideo;Gorad Mantehvideha;MVD;Montebideo;Montevidejas;Montevideo;Montevideu;Montevidiejos;Montevidéu;Montevidėjas;Montevídeó;Muntivideu;Muntividew;Muntividèu;Muntividëw;Urbs Montis Videi;mantibhiri'o;meantevidiyea;meng de wei de ya;meng te wei duo;montebide'o;montebide-o;montebideo;montevide'o;montevidi'o;montevidiyo;montevitiyo;mwntfydw;mwnth wydyw;mwntybydyw;mxn te wi de xo;Μοντεβιδέο;Горад Мантэвідэа;Монтевидео;Монтевідео;Մոնտևիդեո;מאנטעווידעא;מונטווידאו;مونتفيدو;مونته ویدئو;مونته‌ویدئ;مونته‌ویدئو;مونتیبیدیو;مونتېۋىدېئو;मोण्टेवीडियो;मोन्तेविदेओ;মোন্তেবিদেও;ਮੋਂਤੇਵੀਦਿਓ;ମଣ୍ଟିଭିଡ଼ିଓ;மொண்டேவீடியோ;മൊണ്ടേവീഡിയോ;มอนเตวิเดโอ;མཱོན་ཊི་ཝི་ཌོ།;မွန်တီဗစ်ဒီအိုမြို့;მონტევიდეო;ሞንቴቪዴዎ;モンテビデオ;蒙得维的亚;蒙特維多;몬테비데오; +city::3441702;Melo;Ciudad de Melo;MLZ;Mel;Melas;Melo;mei luo;mello;melo;mero;mlw arwgwyh;Мел;Мело;Մելո;ملو، اروگوئه;میلو، یوراگوئے;মেলো;მელო;メロ;梅洛;멜로; +city::3441894;Maldonado;Mal'donado;Maldonadas;Maldonado;San Fernando de Maldonado;ma er duo na duo;maldonado;maldwnadw arwgwyh;marudonado;Малдонадо;Мальдонадо;Մալդոնադո;مالدونادو، اروگوئه;مالدونادو، یوراگوئے;მალდონადო;マルドナド;馬爾多納多;말도나도; +city::3442057;Las Piedras;Las Pedras;Las Piedras;Las Piedrasas;Las Pjedras;Las-P'edras;Piedras;San Isidrio;Villa de las Piedras;la si bi de la si;lasa piyedrasa;laseupiedeulaseu;Лас Пиедрас;Лас-Пьедрас;Լաս Պեդրաս;لاس پیڈراس، یوراگوئے;لاس‌پیدراس، اروگوئه;লাস পিয়েদ্রাস;ლას-პიედრასი;ラス・ピエドラス;拉斯彼德拉斯;라스피에드라스; +city::601294;Nukus;Gorad Nukus;NCU;Noekis;Nokis;Noukous;Nukus;Nukusas;Nökis;nkws;nu ku si;nu kus;nukuseu;nukusu;nwkws;nwkys;nwqws;Горад Нукус;Нукус;Нүкіс;Նուկուս;נוקוס;نؤکیس;نكوص;نوکوس;นูกุส;ヌクス;努库斯;누쿠스; +city::601417;Oltinko`l;Altynkul';Altynkul’;Oltinko`l;Oltinko‘l;Oltinkul;Oltinkŭl; +city::1215957;Tirmiz;Termez;Termiz;Tirmiz;tai er mei zi;trmdh;trmz;Термез;טרמז;ترمذ;ترمز;泰尔梅兹; +city::1216187;Shahrisabz;Chakhrisabz;Sachrisabz;Sachrizabz;Sahrisabz;Sahrisabzas;Schachrissjabs;Sehr-i-Sebz;Shahri-i-Sabz;Shahrisabz;Shakhrisab;Shakhrisabz;Shakhrisabzs;Shakhrisyabz;Sjachrisabz;Xahrisabz;sakhrisabjako etihasika kendra;sha he li sa bu zi;shafurisabusu;shahrisabzi;shhrsbz;Ŝahrisabz;Şehr-i-Sebz;Šachrizabz;Šahrisabz;Šahrisabzas;Шахрисаб;Шахрисабз;שאחריסאבז;شهرسبز;شهری‌سبز;شہر سبز;शख्रिसब्जको एतिहासिक केन्द्र;შაჰრისაბზი;シャフリサブス;沙赫里薩布茲; +city::1216265;Samarqand;SKD;Samarcanda;Samarcande;Samarkand;Samarkanda;Samarkandas;Samarkando;Samarqand;Semerkant;Semerqend;sa ma er han;samaleukanteu;samarukando;smrqnd;Самарканд;סמרקנד;سمرقند;サマルカンド;撒馬爾罕;撒马尔罕;사마르칸트; +city::1216311;Qarshi;Bek Budi;KSQ;Karaki;Karchi;Karshi;Karshy;Karsi;Karsio;Karsis;Karsji;Karszy;Karŝio;Karşi;Karši;Karšis;Karși;Kharsh khot;Qarshi;Qarsi;Qarši;ka er xi;kaleusi;karasi;karushi;nkhshb;qarshy;qrshy;qrsy;Карши;Каршы;Карші;Харш хот;Қарсы;Կարշի;קרשי;قارشی;قرشي;قرشی;نخشب;ਕਾਰਸ਼ੀ;カルシ;卡爾希;카르시; +city::1216982;Kattaqo`rg`on;Kattakurgan;Kattaqo`rg`on;Kattaqo‘rg‘on;Kattaqurghon;Kattaqŭrghon; +city::1217007;Koson;Kasan;Kassan;Koson;Косон; +city::1217180;Kogon;Kagan;Kogon;Novaya Bukhara;Каган; +city::1217474;Denov;Dehnan;Denan;Denau;Denov;Denow;Deynau;Денов; +city::1217662;Bukhara;BHK;Bochara;Bokhara;Bouchara;Boukhara;Bucara;Buchara;Buhar;Buhara;Buharo;Buhhaara;Buhāra;Bujara;Bujará;Bukhaara;Bukhar;Bukhara;Bukharà;Bukhoro;Buxara;Buxoro;Buĥaro;Gorad Bukhara;Staraya Bukhara;bkhara;bkhary;bu ha la;buhala;buhara;bukhara;bukharako etihasika kendra;bwkhara;bwkrh;pukara;Μπουχάρα;Бухар;Бухара;Бухоро;Бұхара;Горад Бухара;בוכרה;بخارا;بخارى;بوخارا;बुखराको एतिहासिक केन्द्र;बुख़ारा;बुखारा;বুখারা;ਬੁਖਾਰਾ;புகாரா;ബുഖാറ;ბუხარა;ブハラ;布哈拉;부하라; +city::1512339;Yangiyul;Jangijul';Kaunchi;Янгиюль; +city::1512473;Urganch;Novo-Urgench;Ourguentch;UGC;Urganch;Urgench;Urgentj;Yrgench;uleugenchi;urugenchi;Ургенч;ウルゲンチ;우르겐치; +city::1512569;Tashkent;Daskent;Daşkent;Daşkənd;Gorad Tashkent;Lithopolis;TAS;Ta.kent;Tachkent;Tachkènt;Taixkent;Taschkent;Tashken;Tashkend;Tashkent;Tashkent osh;Tashkenti;Tasjkent;Taskende;Taskent;Taskenta;Taskentas;Taskento;Taszkent;Taxkent;Taŝkento;Taşkent;Taškent;Taškenta;Taškentas;Tașkent;Tochkent;Toshkand;Toshkent;Toshkent shahri;ta shen gan;tasakada;tasakanda;tasakhanda;tashknd;tashqnd;tashukento;taskanda;taskanr;taskantu;taskent;tasyukenteu;thach khen t;tshqnd;tsqnt;Τασκένδη;Горад Ташкент;Ташкен;Ташкент;Ташкент ош;Тошканд;Տաշքենդ;טאשקענט;טשקנט;تاشقند;تاشكند;تاشكەنت;تاشکند;تاشکەند;طشقند;ताशकन्द;ताश्कंद;তাশখন্দ;ਤਾਸ਼ਕੰਦ;தாஷ்கந்து;తాష్కెంట్;ತಾಷ್ಕೆಂಟ್;താഷ്കന്റ്;ทาชเคนต์;ཐ་ཧྲི་ཀན།;ტაშკენტი;ታሽኬንት;タシュケント;塔什干;타슈켄트; +city::1512979;Qo`qon;Kokand;Kokandas;Qo'qon;Qo`qon;Qoʻqon;Qo‘qon;Quqon;Qŭqon;kokando;kokanteu;Коканд;コーカンド;코칸트; +city::1513064;Olmaliq;Almalik;Almalyk;Almalykas;Almalık;Ałmałyk;Olmaliq;a er ma lei ke;almallikeu;almalyq;almalyq azbkstan;arumariku;yalmalyq;Алмалик;Алмалык;Олмалиқ;آلمالیق;آلمالیق، ازبکستان;ئالمالیق;アルマリク;阿尔马雷克;알말리크; +city::1513131;Navoiy;Kermene;Kermine;NVI;Nava;Navoi;Navoiy;Navojis;Navojo;Navoy;Navoï;Nawayi;Nawayı;Nawoi;Nawoiy;Nazoy;Nevai;na wo yi;naboi;navo'i;navu~ai;nwawy;nwayy;nwayy azbkstan;Навои;Навої;نوائی;نواوي;نوایی;نوایی، ازبکستان;نەڤایی;नवोई;ਨਵੋਈ;ナヴァーイー;纳沃伊;나보이; +city::1513157;Namangan;Gorad Namangan;NMA;Namangan;Namanganas;Namangano;Namangán;Nemengan;na ma ngkan;na man gan;namagana;namang-gan;namangan;nmngan;nmnkan;nmnqan;Горад Наманган;Наманган;Наманған;نمنقان;نمنكان;نمنگان;ਨਮਾਗਾਨ;นามางกาน;ナマンガン;納曼干;나망간; +city::1513243;Marg`ilon;Marg`ilon;Margelan;Marghilon;Margilan;Marg‘ilon;Маргилан; +city::1513271;Asaka;Asaka;Asake;Assake;Leninsk;Zelensk;Асака; +city::1513604;Khiwa;Chiva;Chiwa;Hiiva;Hiva;Jiva;Khiva;Khivà;Khiwa;Khorezm;Xiva;khywa;khywh;khywt;Ĥiva;Хива;خيوة;خیوا;خیوه; +city::1513886;Jizzax;Cizzak;Dishsak;Djizak;Djizaks;Dzhizak;Dzhizzak;Dzizakas;Dzjizak;Dzyzak;Dżyzak;Džizakas;Gizaho;Jizak;Jizzakh;Jizzaq;Jizzax;Zhyzak;dzyzq;ji zha ke;jijaheu;jizafu;jizakha;jyzakh;jyzk;jyzkh;Ĝizaĥo;Джизак;Джиззак;Жызак;Жызақ;דזיזק;جيزاخ;جيزك;جیزخ;جیزک;ਜਿਜ਼ਾਖ;ジザフ;吉扎克;지자흐; +city::1513966;Guliston;Golodnaya Step';Golodnaya Step’;Gorad Gulistan;Goulistan;Guelistan;Gulistan;Gulistanas;Gulistano;Guliston;Gülistan;Mirzachul';Mirzachul’;glstan azbkstan;gu li si tan;gulisatona;gulistona;gulliseutan;gurisutan;gwlstan;gwlystan;Горад Гулістан;Гулистан;Гулистон;Գուլիստան;گلستان، ازبکستان;گولستان;گولیستان;گوڵستان، ئۆزبەکستان;गुलिस्तोन;ਗੁਲੀਸਤੋਨ;グリスタン;古利斯坦;굴리스탄; +city::1514019;Fergana;FEG;Farg'ona;Farghana;Farghona;Farghāna;Fargona;Fargʻona;Fergan;Fergana;Fergano;Ferganá;Ferghana;Fernkana;Fərqanə;Gorad Fergana;Novyy Margelan;Skobelev;Skobelevo;fei er gan na;ferugana;frghanh;frghanh‎;frghant;fyrghana;peleugana;prgnh;Φεργκάνα;Горад Фергана;Фарғона;Фергана;Ֆերգանա;פרגנה;فرغانة;فرغانه;فرغانه‎;فرغانہ;فیرغانا;فەرغانە;ഫെർഗാന;フェルガナ;费尔干纳;페르가나; +city::1514192;Chust;Chust;Chust Shahri;Tschust;Чуст; +city::1514210;Chirchiq;Chirchik;Chirchiq;Circig;Circik;Circikas;Tchirtchik;Tjirtjik;Tschirtschik;chileuchikeu;chiruchiku;chyrchyq;chyrchyq azbkstan;qi er qi ke;Çirçig;Čirčikas;Чирчик;Чирчиқ;چیرچیق;چیرچیق، ازبکستان;チルチク;奇爾奇克;치르치크; +city::1514387;Beruniy;Beruni;Berunij;Beruniy;Biruni;Biruniy;Shabbaz;Shchabbaz;Sheikh Abaz Vali;Беруний; +city::1514402;Bekobod;Bagevat;Begovat;Begowat;Bekabad;Bekabadas;Bekobod;Bigovat;Bïgovat;bei ke bo de;bekabado;byk abad;Бекабад;Бекобод;Բեկաբադ;بیک آباد;بیک‌آباد، ازبکستان;بێکاباد;ベカバード;貝科博德; +city::1514581;Angren;Angren;Angrenas;Angrenshakhtstroy;Turk;Turn;an ge lian;ang-geulen;angrn azbkstan;anguren;Ангрен;آنگرن، ازبکستان;ئانگرێن;アングレン;安格連;앙그렌; +city::1514588;Andijon;AZN;Andican;Andidzhan;Andijan;Andijon;Andiján;Andisjan;Andizan;Andizhan;Andizhan - Andijon;Andizjan;Andiżan;Andižan;an ji yan;andijan;ztnjan;Андижан;ظةنجان;アンディジャン;安集延;안디잔; +city::1538229;Navoiy;Gorod Navoi;Kermine;Navoi;Navoiy;Navoiy Shahri;Nawoiy Shahri; +city::3486270;Anaco;AAO;Anaco; +city::3487903;Alto Barinas;; +city::3625207;Yaritagua;; +city::3625341;Villa de Cura;; +city::3625515;Valle de La Pascua;VDP;Val'e-de-La-Paskua;Valle de La Pascua;Valle de Pascua;Валье-де-Ла-Паскуа; +city::3625542;Valera;VLV;Valera;ba lai la;valera;Валера;ვალერა;巴莱拉; +city::3625549;Valencia;Balenzia;Gorad Valensija;VLN;Valencia;Valencio;Valens;Valensi;Valensia;Valensii;Valensija;Valensiya;Valentia;Valentzia;Valincia;Valência;ba lun xi ya;balainsi'a;ballensia;barenshia;blnsyt;valensia;walnsya wnzwyla;wlnsyh;Валенс;Валенси;Валенсия;Валенсија;Валенсія;Горад Валенсія;Վալենսիա;ולנסיה;بلنسية;والنسیا، ونزوئلا;والیںسیا، کارابوبو;ਬਾਲੈਂਸੀਆ;ვალენსია;バレンシア;巴伦西亚;발렌시아; +city::3625710;Upata;Upata; +city::3625829;Turmero;Turmeras;Turmero;trmrw;tu er mei luo;Турмеро;ترمرو;ტურმერო;圖爾梅羅; +city::3625929;Tucupita;TUV;Tucupita;Tukupita;Тукупита; +city::3626219;Tinaquillo;di na ji yue;蒂納基約; +city::3627047;Santa Teresa;Santa Teresa; +city::3627968;San Mateo;; +city::3628053;San Juan de los Morros;San Juan de Los Morros;San Juan de los Moros;San Juan de los Morros; +city::3628142;San Jose de Guanipa;El Tigrito;San Jose de Guanipa;San José de Guanipa; +city::3628423;San Felipe;SNF;San Felipe;San Felipė;San-Felipe;sanpellipe;sheng fei li pei;Сан-Фелипе;Сан-Феліпе;سان فیلیپے، جاراکوئی;სან-ფელიპე;聖費利佩;산펠리페; +city::3628473;San Cristobal;Gorad San-Krystobal';SCI;San Cristobal;San Cristóbal;San Kristobal;San Kristobalis;San-Kristobal';san krystwbal;san krystwbal tachyra;sankeuliseutobal;sheng ke li si tuo wa er;Горад Сан-Крыстобаль;Сан Кристобал;Сан-Кристобаль;Сан-Крістобаль;سان كريستوبال;سان کریستوبال، تاچیرا;სან-კრისტობალი;聖克里斯托瓦爾;산크리스토발; +city::3628489;San Carlos del Zulia;Del Zulia;San Carlos;San Carlos del Zulia; +city::3628503;San Carlos;San Carlos;San Karlosas;san karlws kwkhydys;sankaleulloseu;sheng ka luo si;سان کارلوس، کوخیدیس;სან-კარლოსი;聖卡洛斯;산카를로스; +city::3628550;San Antonio de Los Altos;; +city::3628952;Rubio;Rubio;Рубио; +city::3628966;La Villa del Rosario;Rosario;Villa del Rosario;Росарио; +city::3629576;Punto Fijo;LSP;Punto Fijo;peng tuo fei huo;პუნტო-ფიხო;蓬托菲霍; +city::3629614;Punta Cardon;Cardon;Cordon;El Cardon;El Cardón;Puerto Cardon;Punta Cardon;Punta Cardón;Punta-Kardon;Пунта-Кардон; +city::3629672;Puerto La Cruz;Puehrto La Kruz;Puehrto-la-Krus;Puerto Cruz;Puerto La Krus;Puerto de La Cruz;Puerto la Cruz;Puerto la Krusas;bwyrtw la krwz;la ke lu si gang;Пуерто Ла Крус;Пуэрто Ла Круз;Пуэрто-ла-Крус;بويرتو لا كروز;პუერტო-ლა-კრუსი;拉克魯斯港; +city::3629706;Puerto Cabello;PBL;Portus Cabellensis;Puehrto-Kabel'o;Puerto Cabello;Puerto Kabeljas;Puerto Kabello;Puerto-Kabel'jo;ka bei e gang;pueleutokabeyo;Пуерто Кабелло;Пуерто-Кабельйо;Пуэрто-Кабельо;პუერტო-კაბელიო;卡貝略港;푸에르토카베요; +city::3629710;Puerto Ayacucho;PYH;Pouerto Agiakoutso;Puehrto-Ajakucho;Puerto Ajakucas;Puerto Ajakučas;Puerto Ayacucho;a ya ku qiao gang;pueleutoayakucho;pwyr to xi xa kucho;pwyrtw ajakwchw;Πουέρτο Αγιακούτσο;Пуэрто-Аякучо;پویرتو اجاکوچو;ปวยร์โตไออากูโช;პუერტო-აიაკუჩო;阿亞庫喬港;푸에르토아야쿠초; +city::3629965;Porlamar;PMV;Porlamar;Porlamaras;bo la ma er;Порламар;პორლამარი;波拉马尔; +city::3630297;Petare;Petare;Petarė;pei ta lei;petale;petare;Петаре;პეტარე;ペタレ;佩塔雷;페타레; +city::3630932;Palo Negro;; +city::3631412;Ocumare del Tuy;Ocumare;Ocumare del Tuy; +city::3631741;Mucumpiz;; +city::3632308;Merida;Emerita;Gorad Meryda;MRD;Meria;Merida;Meridae;Merido;Méria;Mérida;Santiago de los Caballeros de Merida;Santiago de los Caballeros de Mérida;mardt;mei li da shi;melida;merida;mryda;mrydh;myryda myryda;Μέριδα;Горад Мерыда;Меридæ;Мерида;Меріда;Մերիդա;מערידא;מרידה;ماردة;مریدا;میریدا، میریدا;მერიდა;ሜሪዳ፣ ቬኔዝዌላ;メリダ;梅里達市;메리다; +city::3632929;Mariara;; +city::3632998;Maracay;MYC;Maracay;Marakai;Marakaj;Marakajo;Marakajus;Marakay;ma la kai;malakai;marakai;marakay;Μαρακάι;Маракай;ماراکای;მარაკაი;マラカイ;马拉凯;마라카이; +city::3633009;Maracaibo;Gorad Marakajba;MAR;Maracaibo;Marakaibas;Marakaibo;Marakaimpo;Marakajbo;Marakaybo;Marakaypu;ma la kai bo;ma ra ki bo;malakaibo;maraka'ibo;marakaibo;marakaybw;Μαρακάιμπο;Горад Маракайба;Маракаибо;Маракайбо;Մարակայբո;מרקאיבו;ماراكايبو;माराकाईबो;ਮਾਰਾਕਾਈਬੋ;มาราไกโบ;მარაკაიბო;マラカイボ;马拉开波;마라카이보; +city::3633341;Maiquetia;Maiquetia;Maiquetía; +city::3633444;Machiques;Machiques; +city::3633622;Los Teques;Los Tekes;Los Tekesas;Los Teques;Los-Tekes;loseutekeseu;luo si te ke si;lws tykys;Λος Τέκες;Лос Текес;Лос-Текес;لوس تیکیس;ლოს-ტეკესი;ロス・テケス;洛斯特克斯;로스테케스; +city::3634184;Los Dos Caminos;Dos Caminos;Los Dos Caminos; +city::3634922;La Victoria;La Victoria;La Viktorija;la wei duo li ya;la wyktwrya aragwa;لا ویکتوریا، اراگوا;ლა-ვიქტორია;拉維多利亞; +city::3639747;Guigue;; +city::3639898;Guatire;Guatire;gua di lei;guatire;gwatile;Гуатире;Гуатіре;გუატირე;グアティレ;瓜蒂雷;과티레; +city::3640049;Guarenas;Guarenas; +city::3640226;Guanare;GUQ;Guanare;Gvanare;Gvanarė;gua na lei;guanare;gwanale;Гуанаре;گوانارے;გუანარე;グアナレ;瓜納雷;과나레; +city::3640465;Guacara;Guacara; +city::3641099;El Vigia;El Vigia;El Vigía;VIG; +city::3641275;El Tocuyo;Ehl'-Tokujo;El Tocuyo;El'-Tokujo;Tocuyo;ai er tuo ku yue;Ель-Токуйо;Эль-Токуйо;埃爾托庫約; +city::3641351;El Tigre;ELX;El Tigre;El Tigrė;ai er di ge lei;eltigeule;xel ti ker;เอลตีเกร;ელ-ტიგრე;埃爾蒂格雷;엘티그레; +city::3642833;El Limon;El Limon;El Limonas;El Limón;ai er li meng;el-limoni;ელ-ლიმონი;埃爾利蒙; +city::3643031;El Hatillo;El Hatillo;El Hatillo Municipality;Municipio El Hatillo;Pueblo el Hatillo;ai er a di yue shi;el-atiyo si;eruatijo shi;ელ-ატილიოს მუნიციპალიტეტი;エルアティジョ市;埃爾阿蒂約市;엘아티요 시; +city::3644417;Ejido;Egido;Ehkhido;Ejido;Эхидо; +city::3644768;Cumana;CUM;Cumana;Cumaná;Gorad Kumana;Kumana;ku ma na;kumana;kwmana;Горад Кумана;Кумана;کومانا;กูมานา;კუმანა;クマナ;庫馬納;쿠마나; +city::3644918;Cua;Cua;Cúa;Kua;Куа; +city::3645213;Coro;CZE;Coro;Corum;Koro;Koro shaary;Santa Ana de Coro;Santa Ana de Koras;Santa-Ana-de-Koro;kolo;koro;qwrw;santa ana dy kwrw;sheng an na de ke luo;Коро;Коро шаары;Санта-Ана-де-Коро;קורו;سانتا آنا دي كورو;سانتا آنا دے کورو;სანტა-ანა-დე-კორო;コロ;聖安娜德科羅;코로; +city::3645528;Ciudad Guayana;CGU;Cidade Guaiana;Ciudad Guayana;Ciudad Guiana;Ciudat Guayana;Guayana;Guayana City;PZO;S'judad-Guajana;San Felix de Guayana;San Félix de Guayana;San Tome;San Tome de Guayana;San Tomé;San Tomé de Guayana;Santo Tome de Guayana;Santo Tomo;Santo Tomé de Guayana;Sijudad Gvajana;Siudad Guajana;Sjudad Guajan;gui ya na cheng;shiudaguayana;siudad-guaiana;siudadeugwayana;Сиудад Гуаяна;Сијудад Гвајана;Сьюдад-Гуаяна;סיודד גואיאנה;სიუდად-გუაიანა;シウダーグアヤナ;圭亞那城;시우다드과야나; +city::3645532;Ciudad Bolivar;Angostura;Bolivar;Bolivar llaqta;Bolívar;Bolívar llaqta;CBL;Ciudad Bolivar;Ciudad Bolívar;Gorad S'judad-Balivar;S'judad-Bolivar;Siudad Bolivar;Siudad Bolivaras;Syudad Bolivar;Syudad Bolívar;Ziuda Bolivar;Ziudá Bolívar;bo li wa er cheng;si'udada bolivara;siudad-bolivari;siudadeubollibaleu;sywdad bwlywar;Горад Сьюдад-Балівар;Сиудад Боливар;Сьюдад-Боливар;Сьюдад-Болівар;سیوداد بولیوار;सिउदाद बोलिवर;სიუდად-ბოლივარი;シウダ・ボリバル;玻利瓦尔城;시우다드볼리바르; +city::3645854;Charallave;; +city::3645981;Chacao;Chacao;Municipio Chacao;cha kao shi;chakao shi;chakao si;ჩაკაოს მუნიციპალიტეტი;チャカオ市;查考市;차카오 시; +city::3646169;Caucaguito;Caucaguita;Caucaguito;Caucagüito; +city::3646190;Catia La Mar;Catia La Mar;Catia de la Mar; +city::3646382;Carupano;CUP;Carupano;Carúpano;Karupanas;ka lu pa nuo;კარუპანო;卡魯帕諾; +city::3646487;Carora;Carora;VCR; +city::3646738;Caracas;CCS;Caracae;Caracas;Caraques;Gorad Karakas;Karakas;Karakasa;Karakasas;Karakaso;ka la ka si;ka raka s;kalakaseu;karakas;karakasa;karakasu;karakkas;kraks;Καράκας;Горад Каракас;Каракас;Կարակաս;קאראקאס;קראקס;كاراكاس;کاراکاس;کراکس;काराकास;কারাকাস;ਕਾਰਾਕਾਸ;કારાકાસ;କାରାକାସ;கரகஸ்;ಕರಾಕಸ್;കാരക്കാസ്;การากัส;ཁ་ར་ཁ་སི;ကရာကက်စ်မြို့;კარაკასი;ካራካስ;カラカス;卡拉卡斯;카라카스; +city::3647444;Calabozo;CLZ;Calabozo;Kalabosas;ka la wo suo;კალაბოსო;卡拉沃索; +city::3647549;Cagua;Cagua; +city::3647651;Cabimas;CBS;Cabimas;Caramas;Kabimas;Kabimasas;ka wei ma si;kabymas;Кабимас;كابيماس;კაბიმასი;卡維馬斯; +city::3648439;Baruta;Baruta;Nuestra Senora del Rosario de Baruta;Nuestra Señora del Rosario de Baruta; +city::3648522;Barquisimeto;BRM;Barkisimetas;Barkisimeto;Barquisimeto;Barquisimetum;Barquisimito;Gorad Barkisimeta;ba ji xi mei tuo;baleukisimeto;barkysymtw;barukishimeto;brqysymtw;Баркисимето;Баркісімето;Горад Баркісімета;ברקיסימטו;بارکیسیمتو;ბარკისიმეტო;バルキシメト;巴基西梅托;바르키시메토; +city::3648546;Barinas;BNS;Barinas;Barinas llaqta;Barinasas;Ijoloti Barinas;ba li na si;balinaseu;barinasi;barynas;barynas barynas;Μπαρίνας;Баринас;Барінас;Иёлоти Баринас;باريناس;باریناس، باریناس;ბარინასი;巴里納斯;바리나스; +city::3648559;Barcelona;BLA;Barcelona;Barcelono;Barselona;Gorad Barselona;Varkeloni;ba sai luo na;baleusellona;barselona;barslwna wnzwyla;barslwna wynyzwyla;baruserona;Βαρκελώνη;Барселона;Горад Барселона;بارسلونا، ونزوئلا;بارسلونا، وینیزویلا;ဘာစီလိုနာမြို့၊ ဗင်နီဇွဲလား;ბარსელონა;バルセロナ;巴塞羅那;바르셀로나; +city::3649017;Araure;Araure; +city::3649833;Acarigua;AGV;Acarigua;Acarígua;Akarigua;Akarigva;a ka li gua;akaligwa;akarigua;akarygwa;Акаригуа;Акарігуа;اکاریگوا;აკარიგუა;アカリグア;阿卡里瓜;아카리과; +city::3778045;Maturin;MUN;Maturin;Maturinas;Maturín;ma tu lin;matulin;matwryn;Матурин;Матурін;ماتورين;ماتورین;მატურინი;馬圖林;마투린; +city::3803515;Caucaguita;; +city::3805673;San Fernando de Apure;SFD;San Fernando;San Fernando Apure;San Fernando de Apure; +city::4796512;Saint Croix;Agay;Ay Ay;Ay-Ay;Ayay;Cibuguiera;Cibuquiera;Eylandet Saint Croix;L'Isle de Sainte Croix;STX;Sainte Croix;Sanct Croix;Sancta Crux;Santa Cruz;St Croix;The Quiet Virgin; +city::1560037;Yen Vinh;; +city::1560349;Yen Bai;Jenbaj;Yen Bai;Yen Bay;Yên Bái;Йенбай; +city::1562414;Vung Tau;Cap-Saint-Jacques;Cape Saint James;Saint James;VTG;Ville du Cap;Vung Tau;Vungtau;Vũng Tàu;Xa Vung Tau;bungttau;buntau;tou dun shi;Вунгтау;ブンタウ;頭 頓市;붕따우; +city::1562693;Vinh Long;Vinh Long;Vĩnh Long;XVL; +city::1562798;Vinh;VII;Vin;Vin';Vinh;Vinis;bin;fynh;rong shi;vu~in;wiy;wyn;wyn wytnam;Вин;Винь;Вінь;וין;فينه;وین، ویتنام;وینہ;วิญ;ヴィン;荣市;빈; +city::1562820;Viet Tri;Viet Tri;Vietri;Việt Trì; +city::1563241;Thanh Pho Uong Bi;Thanh Pho Uong Bi;Thành Phố Uông Bí;Uong Bi;Uông Bí; +city::1563281;Tuy Hoa;Chau Thanh;TBB;Thanh pho Tuy Hoa;Thuy Hoa;Thành phố Tuy Hòa;Toy Hoa;Tuikhoa;Tuy Hoa;Tuy Hòa;sui he shi;to~uihoa;Туихоа;トゥイホア;綏和市; +city::1563926;Tra Vinh;Phu Vinh;Phú Vinh;Tra Vin;Tra Vinh;Trà Vinh; +city::1565022;Thu Dau Mot;Phu Cuong;Phú Cường;Thu Dau Mot;Thủ Dầu Một;Tkhuzaumot;thu seiwhmt;to~uzaumotto;tu long mu shi she;tujeoumos;tw dayw mwt;Тхузаумот;تو دائو موت;تھو داو مؤت;ถูเสิ่วหมต;トゥーザウモット;土龍木市社;투저우못; +city::1566083;Ho Chi Minh City;Cathair Ho Chi Minh;Cidade de Ho Chi Minh;Ciudad Ho Chi Minh;HCMC;HCMV;Ho Chi Minh;Ho Chi Minh City;Ho Chi Minh Ville;Ho Chi Minh-borg;Ho Chi Minh-byen;Ho Chi Minhin kaupunki;Ho Chi Minhstad;Ho Ci Minovo Mesto;Ho Si Minh-varos;Ho Si Minh-város;Ho Či Minovo Město;Ho-Chi-Minh-Stadt;Ho-Chi-Minh-Ville;Ho-Ci-Min-urbo;Ho-Ĉi-Min-urbo;HoChiMinh City;Hociminovo Mesto;Hosimina;Hosiminh;Hočiminovo Mesto;Hošimina;Hošiminh;Hô Chi Minh Ville;Hô-Chi-Minh-Ville;Hồ Chí Minhin kaupunki;Khoshimin;Kota Ho Chi Minh;Kota Hồ Chí Minh;SGN;Sai Gon;Saigon;Saïgon;Sài Gòn;TPHCM;Thanh pho Ho Chi Minh;Thành phố Hồ Chí Minh;hochimin;hochimin shi;hojjimin si;hu zhi ming shi;hw z'y myn syty;mdynt hw tshy mynh;saigon;saygwn;Хошимин;הו צ'י מין סיטי;سايگون;مدينة هو تشي مينه;サイゴン;ホーチミン;ホーチミン市;胡志明市;호찌민 시;호치민; +city::1566166;Thanh Hoa;THD;Than" Hoa;Thanh Hoa;Thanh Hóa;Than” Hoa; +city::1566319;Thanh Pho Thai Nguyen;Taj-Nguen;Thai Nguyen;Thanh Pho Thai Nguyen;Thành Phố Thái Nguyên;Thái Nguyên;Тай-Нгуен; +city::1566346;Thanh Pho Thai Binh;Kua Loc;Taibinh;Thai Bin;Thai Binh;Thanh Pho Thai Binh;Thành Phố Thái Bình;Thái Bình; +city::1567069;Tan An;Tan;Tan Am;Tan An;Tân An;Тан; +city::1567148;Tam Ky;Tam Ky;Tam Kỳ;Tanky; +city::1567723;Song Cau;Bong Cau;Bông Cầu;Song Cau;Song Ka;Song Ko;Songkau;Sông Cầu; +city::1567788;Soc Trang;Khanh Hong;Khanh Hung;Khánh Hưng;SOA;Shokchang;Soc Trang;Sok Trang;Sóc Trăng;Шокчанг; +city::1568043;Sa Pa;Chapa;Shapa;Шапа; +city::1568212;Sa Dec;Sa Dec;Sa Đéc;Sadek; +city::1568510;Rach Gia;Gorad Rac'zja;Lit-ka-su;Li̍t-ka-sṳ;Rach Gia;Rach Zhia;Racza;Racža;Rat'zja;Rạch Giá;VKG;Zhac Zhja;di shi shi;lagja;racha gya;rakkuza;rch gya;sak sa;Горад Рацьзя;Жаћ Жја;Ратьзя;راچا گیا;رچ گیآ;สักซ้า;ラックザー;迪石市;락자; +city::1568574;Qui Nhon;Ki N'on;Ki N’on;Kin-hon;Kuinjon;Kwinhon;Qui Nhan;Qui Nhon;Qui Nhơn;Quinn Yan;Quinton;Quy Nhon;Quy Nhơn;UIH;gui ren shi;kku-inyeon;kuinyon;Куинён;クイニョン;歸仁市;꾸이년; +city::1569684;Pleiku;Gia Lai;PXU;Play Cu;Play Ku;Plei Cu;Pleiku;Plejku;Plây Cu;Plây Ku;Po-loi-ku;Pô-lòi-kú;Tinh Pleiku;Tỉnh Pleiku;bo lai gu shi;pel yku;plykw;ppeullaeikku;pureiku;Плеику;Плейку;پلیکو;เปล็ยกู;プレイク;波來古市;쁠래이꾸; +city::1571058;Phan Thiet;Fan Thiet;Fant'et;Fanthit;Fantiet;Phan Thiet;Phan Thiết;Phan Tiet;Xa Phan Thiet;pan qie;Фантьет;潘切; +city::1571067;Phan Rang-Thap Cham;PHA;Phan Rang;Phan Rang- Thap Cham;Phan Rang-Thap Cham;Phan Rang-Tháp Chàm;Phan Ranh; +city::1572151;Nha Trang;Gorad Njachang;INhatrang;Kanh-Hoa;NHA;Nacana;Nga-tsong-su;Ngà-tsông-sṳ;Nha Trang;Niacangas;Niačangas;Nja Chang;Njachang;nateulang;nha tranj;nha trng;nyachan;nyajjang;ya cang;ya zhuang;ya zhuang shi;Ņačana;Ња Чанг;Горад Нячанг;Ня Чанг;Нячанг;نها ترانج;نها ترنگ;ญาจาง;ニャチャン;芽庄市;芽莊;芽莊市;나트랑;냐짱; +city::1573517;Thanh Pho Nam Dinh;Nam Din;Nam Dinh;Nam GJinh;Nam Định;Namdin';Thanh Pho Nam Dinh;Thành Phố Nam Định;Намдинь; +city::1574023;My Tho;Mitho;My Tho;Mỹ Tho; +city::1574507;Mong Cai;Mon Cay;Mon Gay;Mong Cai;Monkai;Móng Cái;Wangchieh; +city::1575627;Long Xuyen;Cholong Xuyen;Chơlong Xuyen;Long Swiyen;Long Xuyen;Long Xuyên;Long-Shuyen; +city::1576633;Thanh Pho Lang Son;Lang Son;Lạng Sơn;Thanh Pho Lang Son;Thành Phố Lạng Sơn; +city::1577995;La Gi;La Ghi;La Gi;Lag;Lagi; +city::1580240;Hue;Choue;HUI;Hue;Huje;Hujė;Hué;Huế;Khjue;Khjueh;Khue;Sun-fa-su;Sun-fa-sṳ;Thanh pho Hue;Thành phố Huế;fue;hue;hwyh;shun hua;shun hua shi;we;Χουέ;Хуе;Хюе;Хюэ;הואה;هوئه;ہوائے;เว้;ჰუე;フエ;順化;順化市;顺化市;후에; +city::1580410;Thanh Pho Ha Long;Ha Long;Hon Cay;Hon Gai;Hon Gay;Hon Goi;Hong Gai;Honggay;Hạ Long;Hồng Gai;Khalong;Thanh Pho Ha Long;Thành Phố Hạ Long;xia long shi;Халонг;下龙市; +city::1580830;Thanh Pho Hoa Binh;Hao Binh;Hoa Bin;Hoa Binh;Hòa Bình;Thanh Pho Hoa Binh;Thành Phố Hòa Bình; +city::1581130;Hanoi;Anoi;Anoy;Anòy;Gorad Khanoj;HAN;Ha Noi;Ha Nui;Hanoi;Hanoj;Hanoja;Hanojo;Hanojus;Hanoy;Hanoí;Hanoï;Hanòi;Hanói;Ho-nui-su;Hà Nội;Hò-nui-sṳ;Keicho;Khanoj;hano'i;hanoi;hanoy;hanwy;hanxy;he nei;he nei shi;hyanaya;khanwy;Ανόι;Горад Ханой;Ханой;Ханој;Հանոյ;האנוי;خانوي;هانوى;هانوي;هانوی;ھانۆی;ہنوئی;हनोई;হ্যানয়;ਹਨੋਈ;ହାନୋଇ;ஹனோய்;ಹಾನೊಯ್;හැනෝයි;ฮานอย;ཧེ་ནོ།;ဟနွိုင်းမြို့;ჰანოი;ሀኖይ;ទីក្រុងហានូយ;Ḥanoi;ハノイ;河內;河內市;하노이; +city::1581298;Haiphong;HPH;Hai Phong;Haiphong;Hajfong;Hải Phòng;Khajfon;hai fang shi;haifon;hayfwngh;hi fxng;Хайфон;هايفونغ;ไฮฟอง;ハイフォン;海防市; +city::1581326;Thanh Pho Hai Duong;Hai Doong;Hai Duong;Hai dzung;Hai-Doung;Haidong;Haidöng;Hải Dương;Khajzyong;Thanh Pho Hai Duong;Thành Phố Hải Dương;Хайзыонг; +city::1581364;Ha Dong;Ha Dong;Hà Đông; +city::1582173;GJuc Trong;Duc Trong;Dyk Trong;Lien Nghia;Liên Nghĩa;Đưc Trọng;Дык Тронг; +city::1583992;Da Nang;DAD;Da Nang;Danang;GJa Nang;Tourane;Turan;danan;danang;xian gang;Đà Nẵng;Да Нанг;ダナン;岘港;峴港;다낭; +city::1584071;Da Lat;DLI;Da Lat;Da lat;Dalat;Ðà Lạt;Далат; +city::1584661;Cu Chi;Cu Chi;Củ Chi;Ku-Chi;Ку-Чи; +city::1585660;Cho Dok;Angiang;Chau Doc;Chau Phu;Chau Phú;Chaudok;Cho Dok;Châu Đốc; +city::1586151;Cao Lanh;Cao Lanh;Cao Lãnh;Phong Thanh; +city::1586203;Can Tho;Can Tho;Cần Thơ;Kan Tho;VCA;kanto;qin ju shi;カントー;芹苴市; +city::1586288;Can Gio;Can Gio;Can Thanh;Cần Giờ;Cần Thạnh; +city::1586296;Can Giuoc;Can Duoc;Can Gioc;Can Giuoc;Cần Duộc;Cần Giuộc; +city::1586350;Cam Ranh;Cam Linh;Cam Ranh Port;Kamran';Thon Cam Ranh;Thôn Cam Ranh;Камрань; +city::1586357;Cam Pha Mines;; +city::1586443;Ca Mau;CAH;Ca Mau;Camo;Cu Mau;Cà Mau;Kamao;Kamau;Quan Long;Quang Long;Song Kualon;Камау; +city::1586896;Buon Ma Thuot;BMV;Ban Me Thaut;Ban Me Thnot;Ban Me Thot;Ban Me Thout;Ban Me Thuot;Ban Mê Thuột;Ban-me-Thurt;Benmethout;Buon Ma Thuot;Buon Me Thuot;Buôn Ma Thuột;Buôn Mê Thuột;Lac Giao;Lạc Giao;Me Thuot;Metuotas; +city::1587919;Bim Son;Bien Son;Bim Son;Biên Sơn;Bỉm Sơn; +city::1587923;Bien Hoa;Bia Hoa;Bien Hoa;Biên Hòa; +city::1587976;Ben Tre;Ben Tre;Bến Tre;Truc Giang;Trúc Giang; +city::1588275;Bao Loc;Ap Thanh Tam;Ban Lao;Bao Loc;Baolok;Blao;Bảo Lộc;Cong Hinh;Баолок;Ấp Thánh Tâm; +city::1591474;Thanh pho Bac Lieu;Bac Lieu;Bac-Lien;Bach Lieu;Bak Lieu;Bạc Liêu;Thanh pho Bac Lieu;Thành phố Bạc Liêu;Vinh Loi;Vĩnh Lợi; +city::1591527;Bac Giang;Bac Giang;Bakziangas;Bakzjang;Bắc Giang;Pet-kong;Pet-kông;Phu Lang Thong;Phu Lang Thuong;Phu Long Thuong;Thuong;Vilojati Bak Giang;bagjang;bak gyang;bak zyang;bakuzan;bei jiang shi;Бакзянг;Вилояти Бак Гианг;باک زیانگ;باک گیانگ;バクザン;北江市;박장; +city::8340760;Cung Kiem;Cung Kiem;Cung Kiệm; +city::784759;Ferizaj;Ferezaj;Ferizaj;Ferizovik;Urosevac;Uroshevac;Uroševac;Урошевац; +city::785238;Suva Reka;Lumthate;Lumthatë;Suha Reka;Suhareka;Suhareke;Suharekë;Suharjeka;Sukareke;Sukarekë;Suva Reka;Suva Reki;Theranda;Thëranda;Сува Река; +city::786712;Prizren;Perzeren;Perzerin;Prizren;Prizrena;Prizrenas;Prizreni;Përzeren;bryzrn;peulijeulen;pryzrn;pu li ci lun;purizuren;Πρίζρεν;Призрен;Приꙁрѣнь;Прізрен;بريزرن;پریزرن;プリズレン;普里兹伦;프리즈렌; +city::786714;Pristina;Gorad Pryshcina;PRN;Prestena;Prishhina;Prishtina;Prishtinae;Prishtine;Prishtinë;Prisjtina;Pristin;Pristina;Pristine;Pristino;Pristína;Prisztina;Prixtina;Priŝtino;Priştina;Priştine;Prištin;Priština;Priștina;Prìstina;Prėštėna;bryshtyna;peulisyutina;phrich ti na;piristina;prisatina;pristina;pryshtyna;prystynh;prysٹyna;pu li shen di na;purishutina;Πρίστινα;Горад Прышціна;Приштинæ;Приштина;Прищина;Պրիշտինա;פרישטינה;بريشتينا;پریسٹینا;پریشتینا;प्रिस्टिना;ਪ੍ਰਿਸ਼ਤੀਨਾ;பிரிஸ்டினா;พริชตีนา;པི་རི་སི་ཊི་ན།;პრიშტინა;プリシュティナ;普里什蒂納;普里什蒂纳;프리슈티나; +city::787157;Peje;Pec;Pecas;Pech;Pegia;Peja;Peje;Pejë;Peć;Pečas;Picaria;Πέγια;Печ;Пећ; +city::789225;Mitrovice;Kosovska Mitrovica;Mitrovica;Mitrovice;Mitrovicë;Косовска Митровица; +city::790674;Gjilan;Gilan;Gjilan;Gjilani;Gnilane;Gniljane;Gnjilane;Gnjilanė;Komuna e Gjilanit;Гњилане; +city::790701;Glogovac;Drenas;Drenasi;Gllogoc;Gllogoci;Gllogofc;Gllogovc;Glogovac;Glogovce;Глоговац; +city::791580;Decan;Decan;Decani;Dekan;Deçan;Deçani;Декан; +city::791646;Gjakove;Gjakova;Gjakove;Gjakovë; +city::69500;Zabid;Zabid;Zabīd;Zebid;zbyd;Забид;زبيد; +city::70225;Ta`izz;TAI;Ta'izz;Ta`izz;Taiz;Taizz;Ta‘izz;Таиз;تعز; +city::70979;Sayyan;Saiyan;Saiyān;Sayyan;Sayyān;Seijan;Seijân;Sian;Siryan;Siryān;syan;سيان; +city::71137;Sanaa;SAH;San"o;San'a;San'a';San'ah;San`a';Sana;Sana'a;Sanaa;Sanaà;Sanaá;Saná;San’ah;sa na;sana;sanua;Şan‘ā';Şan‘ā’;Σάνα;Сана;Санъо;צנעא;صنعاء;ሳና;サヌア;萨那;사나; +city::71334;Sa'dah;SYE;Sa'dah;Sa`da;Sa`dah;Saada;Sa‘da;Sa’dah;Şa‘dah;صعده; +city::74477;Ibb;Ibas;Ibb;ab;ibbu;ibeu;yi bo;Ібб;Ибб;איב;إب;اب;イッブ;伊卜;이브; +city::76184;Dhamar;DMR;Damar;Dhamar;Dhamār;dhmar;ذمار; +city::78428;'Amran;`Amran;`Umran;عمران;‘Amrān;‘Umrān; +city::78754;Al Mukalla;Al Mukalla;Al Mukallā;Al'-Mukalla;Al-Mukalla;MKX;Mukalla;RIY;almkla;Аль-Мукалла;المكلا; +city::79415;Al Hudaydah;Al Hudaydah;Al Ḩudaydah;El-Hodeidah;El-Ḥodeidah;HOD;Hodaidah;Hodeida;Hudaida;Hudaydah;alhdydt;hdydh;الحديدة;حدیده;Ḩudaydah; +city::415189;Aden;ADE;Adan;Adem;Aden;Aden khot;Aden shaary;Adena;Adenas;Adeno;Adén;Aidin;Anten;Cadan;Gorad Adehn;`Adan;adana;aden;edana;xeden;ya ding;Áden;Áidin;Ədən;Ɛaden;Άντεν;Аден;Аден хот;Аден шаары;Горад Адэн;Ադեն;עדן;عدن;अदन;एडन;เอเดน;အေဒင်မြို့;‘Adan;アデン;亚丁;亞丁;아덴; +city::921815;Mamoudzou;Mambutzou;Mamoudzou;Mamoutzou;Mamudzu;Mamutzu;Мамудзу; +city::936374;Roodepoort;Roodepoort;Roodeport-Maraisburg; +city::939270;Witbank;EMalahleni;Ehmalakhleni;Emalahleni;Gorad Ehmalakhleni;Vitbank;Vitbankas;Witbank;wei te ban ke;Вітбанк;Горад Эмалахлені;Эмалахлени;وٹبینک;威特班克; +city::940316;Westonaria;Vestonarija;Westonaria;Вестонария; +city::940909;Welkom;Velkom;Velkomas;WEL;Welkom;u~erukomu;wei er ke mu;Велком;Վելկոմ;ウェルコム;韋爾科姆; +city::941966;Warmbaths;Warmbad;Warmbaths; +city::942470;Vryheid;VYD;Vryheid; +city::943882;Virginia;Virdzhinija;Virginia;Вирджиния; +city::943960;Viljoenskroon;Viljoenskroon; +city::944385;Vereeniging;Feriniging;Ferinikhing;Vereeniging;Vereniging;Verenigingas;ferinihingu;fu li ni xin;peleinihing;wrynygyng;Веренигинг;Феринихинг;Ферінігінг;ورینیگینگ;フェリーニヒング;弗里尼欣;페레이니힝; +city::944986;Vanderbijlpark;Fanderbajpark;Fanderbejlpark;Vanderbijlpark;fan de bai er pa ke;fandrbyjlbark;phandarabilaparka;wandrbjlpark;wndrbyjlprk;Фандербајпарк;Фандербейлпарк;فاندربيجلبارك;واندربجلپارک;وندربیجلپرک;फांडरबीलपार्क;范德拜爾帕克; +city::945945;Upington;Apington;UTN;Upington;eopingteon;wu ping tong;Апингтон;烏平通;어핑턴; +city::946058;Mthatha;Mthatha;UTT;Umtata;umutata;wu mu ta ta;Умтата;متھاتھا;ウムタタ;烏姆塔塔; +city::946877;Uitenhage;Ehjtenkhakhe;Ejtenkhakhe;Jutunkhakh;Uitenhage;awytnhag;oitenhahe;Ейтенхахе;Эйтенхахе;Ютънхах;اویتنهاگ;オイテンハーヘ; +city::949880;Tembisa;Tembisa; +city::952192;Stilfontein;Stilfontein; +city::952734;Stanger;KwaDukuza;Stanger;Stanger Station; +city::952747;Standerton;Standerston;Standerton; +city::953781;Soweto;Mpanzaville;Souehto;Soueto;Sovetas;Soveto;Soweto;sou~eto;soweto;suo wei tuo;swwtw;swytw;Σοβέτο;Совето;Соуэто;סווטו;سويتو;სოვეტო;ソウェト;索韦托;소웨토; +city::956907;Schweizer-Reneke;Schweizer-Reineke;Schweizer-Reneke; +city::957487;Sasolburg;Sasolburg; +city::958724;Rustenburg;Restenberha;Rjustenburg;Rustemburg;Rustemburgo;Rustenburg;Rustenburgas;lei si teng bao;luseutenbeogeu;rastnbrg;rstnbwrg;rus then beirk;rustenabarga;rusutenburuku;rwstnbrgh;Рустенбург;Рюстенбург;רסטנבורג;راستنبرگ;رسٹنبرگ;روستنبرغ;روسٹنبرگ;रुस्टेनबर्ग;รุสเทนเบิร์ก;ሩስተንበርግ;ルステンブルク;勒斯滕堡;루스텐버그; +city::962367;Richards Bay;RCB;Ricardusbaia;Richards Bay;Richards Bej;Richards-Bej;Richardsbaai;Ричардс Беј;Ричардс-Бей; +city::963230;Randfontein;Randfontejn;lan de fang tan;Рандфонтейн;蘭德方坦; +city::963516;Queenstown;EKomani;Kuinstaun;Kvinstaun;Queenstown;UTW;kun shi dui;Квинстаун;Куинстаун;昆士敦; +city::964137;Pretoria;E-Pitoli;Gorad Prehtoryja;IPitoli;PRY;Pitoli;Praetoria;Pretori;Pretoria;Pretoria/Pole tou Akroteriou;Pretoriae;Pretorii;Pretorija;Pretorio;Pretoriya;Pretoriye;Pretoriä;Pretoría;Pretòria;Pretória;Prétoriye;Pta;Tshwane;bi lei tuo li ya;brytwrya;peulitolia;phri thx reiy;pirittoriya;pritori'a;pritoriya;pritteariya;prtwrya;prtwryh;pu li tuo li ya;puretoria;Πρετόρια;Πρετόρια/Πόλη του Ακρωτηρίου;Горад Прэторыя;Претори;Претория;Преторија;Преторія;Պրետորիա;פרטוריה;بريتوريا;پرتوریا;پریٹوریا;پرێتۆریا;प्रिटोरिया;ਪ੍ਰਿਟੋਰੀਆ;பிரிட்டோரியா;ప్రిటోరియా;പ്രിട്ടോറിയ;พริทอเรีย;ཕི་རི་ཐོ་རི་ཡ།;პრეტორია;ፕሪቶሪያ;プレトリア;普利托里亞;比勒陀利亞;프리토리아; +city::964315;Mokopane;Mokopane;Potgietersrus;Potgietersrust;Potgitersrus;mo ke pa nei;Мокопане;Потгитерсрус;莫科帕內; +city::964349;Potchefstroom;PCF;Pochefstrum;Potchefstroom;Potchefstrum;bo qie fu si te lu mu;peaccephestrum;pocephastruma;pochefusutorumu;pochepeuseuteulom;Потчефструм;Почефструм;पॉचेफस्ट्रूम;പൊച്ചെഫെസ്ട്രൂം;ポチェフストルーム;波切夫斯特魯姆;포체프스트롬; +city::964406;Port Shepstone;Port Shepstone;Port-Shepston;xie pu si dui gang;Порт-Шепстон;謝普斯敦港; +city::964420;Port Elizabeth;Gorad Port-Ehlizabet;IBhayi;Ibhayi;PLZ;Port Elisabeth;Port Elizabet;Port Elizabetas;Port Elizabeth;Port Elizampeth;Port-Ehlizabet;Port-Elizabet;Portelizabeta;Porto Elizabeth;Portus Elisabethae;Puerto Elizabeth;bwrt alyzabyth;phxrt xe li sabeth;porta elijhabetha;porta elizabetha;poteuellijabeseu;pwrt alyzabt;yi li sha bai gang;Πορτ Ελίζαμπεθ;Горад Порт-Элізабет;Порт Елизабет;Порт-Елізабет;Порт-Элизабет;פורט אליזבת;بورت إليزابيث;پورت الیزابت;پورٹ الزبتھ;पोर्ट एलिज़ाबेथ;पोर्ट एलिझाबेथ;พอร์ตเอลิซาเบท;პორტ-ელიზაბეთი;ፖርት ኤልሳቤጥ;ポート・エリザベス;伊莉莎白港;포트엘리자베스; +city::965241;Piet Retief;Piet Retief; +city::965289;Polokwane;Gorad Palakvaneh;PTG;Petriburgum;Pietersburg;Polokouane;Polokvane;Polokvanė;Polokwane;bo luo ke wa ni;bwlwkwan;pho lokhe wn;polakvani;pollokwane;polokvane;porokuwane;pwlwkwyn;Πολοκουάνε;Горад Палакванэ;Полокване;פולוקוואנה;بولوكوان;پولوکوانے;پولوکوین;पोलक्वानी;पोलोक्वाने;โพโลเควน;ፖሎክዋኔ;ポロクワネ;波羅克瓦尼;폴로콰네; +city::965301;Pietermaritzburg;Gorad Pitehrmarycburg;Maritzburg;Mokokotlofo;PZB;Petromaritzburgum;Pietermaritsburg;Pietermaritzburg;Pitermaricburg;Pitermaricburgas;Piturmaricburg;bi de ma li ci bao;bytrmarytzbrgh;pi texr ma rits beirk;pitamarittsubagu;pitaramairitsabarga;pitaramaritjhabarga;piteomalicheubeogeu;pytrmarytsbrg;Горад Пітэрмарыцбург;Питермарицбург;Питърмарицбург;Пітермаріцбург;بيترماريتزبرغ;پیترماریتسبرگ;پیٹرماریٹزبرگ;پیٹرومیرٹبرگ;पीटरमारित्झबर्ग;पीटरमैरिट्सबर्ग;ปีเตอร์มาริตซ์เบิร์ก;ピーターマリッツバーグ;彼得马里茨堡;피터마리츠버그; +city::965401;Phuthaditjhaba;Phutaditjhaba;Phuthaditjhaba; +city::965528;Phalaborwa;PHW;Palabora;Palaborva;Phalaborwa;Pkhalaborva;pa la bo lu wa;Палаборва;Пхалаборва;帕拉博魯瓦; +city::966166;Parys;Paris;Parys;Парис; +city::967106;Oudtshoorn;OUH;Oudskhorn;Oudtshoorn;ao ci hu en;Оудсхорн;奧茨胡恩; +city::967476;Orkney;Eastleigh;Orknejskie;Orkney;Оркнейские; +city::970566;Nigel;Najdzhel;Nigel;Найджел; +city::971421;Newcastle;NCS;Newcastle; +city::971534;Nelspruit;Mbombela;NLP;Naspoti;Nel'sprjujt;Nelspreyt;Nelsprojt;Nelspruit;mbombela;nei er si pu lei te;nels pirt;nelsapru'ita;nelseupeulu-iteu;nerusupuroito;nlsprwyt;nlspryyt;nylsbrwyt;nylsprwyt;Мбомбела;Нелспройт;Нелспруит;Нельспрюйт;נלספרייט;نلسپرویت;نيلسبرويت;نیلسپرویت;नेल्सप्रूइत;म्बोम्बेला;เนลสไปรต์;ኔልስፕሩዊት;ネルスプロイト;内尔斯普雷特;넬스프루이트; +city::973111;Mpumalanga;Mpumalanga; +city::973709;Mossel Bay;MZY;Mossel Bay;Mossel-Bej;Mosselbaai;Mosul Bej;Teluk Mossel;mo sai er bei;Моссел-Бей;Мосъл Бей;莫塞爾貝; +city::976361;Middelburg;Middelberg;Middelburg;mi de er bao;Мидделбург;米德爾堡; +city::980921;Mabopane;Mabopane; +city::981827;Louis Trichardt;LCD;Louis Trichardt;Luis-Trichard;lu yi te li ha te;Луис-Тричард;لوئی ٹرشارٹ;ルイス・トリハート;路易特里哈特; +city::982899;Lichtenburg;Lichtenburg;Likhtenburge;Лихтенбурге; +city::986083;Kutloanong;; +city::986822;Krugersdorp;Krjugersdorp;Krjugersdorpa;Krugersdorp;Krugersdorpas;ke lu ge si duo pu;Крюгерсдорп;Крюгерсдорпа;克魯格斯多普; +city::986846;Kroonstad;Kroonstad;Krunstad;ke long si ta de;krwnstad;Крунстад;کرونستاد;克龍斯塔德; +city::988698;Knysna;De Nysna;Knajsno;Knisna;Knysna;Najsna;ke ni si na;knysna;Книсна;Найсна;كنيسنا;克尼斯納; +city::989921;Klerksdorp;Gorad Klerksdorp;KXE;Klerksdorp;ke lai ke si duo pu;Горад Клерксдорп;Клерксдорп;克萊克斯多普; +city::990930;Kimberley;Gorad Kimberli;KIM;Kimberley;Kimberli;Kimberlis;Kimburli;jin bo li;kimbarali;kimbeolli;kinbari;kmbrly shmaly kyp;kymbrly;qymbrly;Горад Кімберлі;Кимберли;Кимбърли;Кімберлі;קימברלי;كيمبرلي;کمبرلی، شمالی کیپ;کمبرلے;کیمبرلی;किम्बरली;キンバリー;金伯利;킴벌리; +city::993800;Johannesburg;EGoli;Giochanesmpournk;Gorad Joganesburg;IGoli;IJohannesburg;Ioannesburgum;JNB;Jo'anna;Joanesburgo;Joburg;Jog'annesburg;Jogannesburg;Johanesburgas;Johanesburgo;Johannesarborg;Johannesbourg;Johannesburg;Johannesburga;Johannesburgo;Johannesburgu;Jokhanesburg;Jokhanezburg;Jokhannesburg;J·ohanesbôrg;Jóhannesarborg;Xohanesburgo;Yohannesburg;Yohannesburq;Yohannésburg;Yok-hon-ni-su-pau;Yok-hon-nì-sṳ̂-páu;Yoxannesburg;cohannes beirk;iohanesburgi;johanisabaraga;johannesbarga;johansabarga;jokanasperk;jwhansbrgh;yohaneseubeogeu;yohanesuburugu;yue han nei si bao;yue han ni si bao;ywhnsbwrg;zhwhansbwrg;Γιοχάνεσμπουργκ;Јоханезбург;Јоханесбург;Горад Ёганесбург;Йоганнесбург;Йогьаннесбург;Йоханесбург;Йоханнесбург;Յոհաննեսբուրգ;יאהאנעסבורג;יוהנסבורג;جوهانسبرغ;جوہانسبرگ;جۆھانسبێرگ;ژوهانسبورگ;یوہانس برگ;जोहन्नेस्बर्ग;जोहान्सबर्ग;ਜੋਹਾਨਿਸਬਰਗ;ஜோகானஸ்பேர்க்;ജൊഹാനസ്‌ബർഗ്;โจฮันเนสเบิร์ก;ဂျိုဟန္နက်စဗတ်မြို့;იოჰანესბურგი;ጆሃንስበርግ;ヨハネスブルグ;約翰尼斯堡;约翰内斯堡;요하네스버그; +city::997140;Heilbron;Heilbron; +city::997151;Heidelberg;Gejdel'berg;Heidelberg;Heidelburg;Гейдельберг; +city::1000501;Grahamstown;Grahamstad;Grahamstown;Grehkhehmstaun;IRhini;ge la han zhen;geuleieomseutaun;gurahamuzutaun;Грэхэмстаун;グラハムズタウン;格拉罕鎮;그레이엄스타운; +city::1000543;Graaff-Reinet;Graaf Reinet;Graaff Reinet;Graaff-Reinet;Khraff-Rejnet;ge la fu-li nei te;gurafu=raine;Храфф-Рейнет;グラーフ=ライネ;格拉夫-里內特; +city::1002851;Ga-Rankuwa;Ga-Rankuwa; +city::1003953;Fort Beaufort;Fort Beaufort;Fort-Bofort;bo fu te gang;Форт-Бофорт;فورٹ بیوفورٹ;博福特港; +city::1004109;Fochville;Fochville; +city::1005646;eMbalenhle;eMbalenhle; +city::1006984;East London;Buffalo City;ELS;EMonti;East London;Gorad Ist-Londan;Ist-London;Istochni London;Iztochen London;Londinium Orientale;Oos Londen;Oos-Londen;Orient-Londono;Tung Lun-tun;Tûng Lùn-tûn;Yst Londonas;ayst lndn;dong lun dui;iseuteuleondeon;ista landana;Іст-Лондон;Горад Іст-Лондан;Източен Лондон;Ист-Лондон;Источни Лондон;איסט לונדון;إيست لندن;ایسٹ لندن;ईस्ट लंडन;イースト・ロンドン;東倫敦;이스트런던; +city::1007311;Durban;DUR;Durban;Durbana;Durbanas;Durbano;Durbanum;EThekwini;Gorad Durban;ITheku;Ntermpan;Port Natal;Thekong;daban;darabana;darban;darbana;de ban;de xr ban;deoban;die bin;drbn;durbani;dwrban;dyrban;tarpan;Ντέρμπαν;Горад Дурбан;Дурбан;Дърбан;Դուրբան;דרבן;دوربان;ديربان;ڈربن;डरबन;डर्बन;ਡਰਬਨ;டர்பன்;డర్బన్;ಡರ್ಬನ್;ഡർബൻ;เดอร์บัน;ဒါဘန်မြို့;დურბანი;ደርባን;ダーバン;德班;爹濱;더반; +city::1007400;Dundee;Dandi;Dundee;Данди; +city::1011031;Delmas;Del'mas;Delmas;Дельмас; +city::1014073;Carletonville;Carletonville; +city::1015621;Brits;Britancy;Brits;bu li ci;Британцы;Бритс;布里茨; +city::1016181;Brakpan;Brakpan; +city::1016670;Botshabelo;Botshabelo; +city::1016698;Bothaville;Botavill';Bothaville;Ботавилль; +city::1017780;Boksburg;Boksburg;Boksburgas;Боксбург;Բոկսբուրգ; +city::1018725;Bloemfontein;BFN;Bloemfontein;Blumfonteina;Blumfonteinas;Blumfontejn;Blumfonteyn;EBloemfontein;Gorad Blumfantehjn;IBloemfontein;Mangaung;Mploumphontein;balumaphontaina;beullumpontein;blum fxn then;blumafonatena;blumaphamtena;blumphanteyiൻ;blwmfwntn;blwmfwntyn;blwmpwntyyn;blwwmfۆntەyn;bu long fang dan;burumufonten;Μπλουμφοντέιν;Блумфонтейн;Блумфонтејн;Горад Блумфантэйн;Բլումֆոնթեյն;בלומפונטיין;بلوئمفونٹین;بلومفونتن;بلومفونتين;بلومفونٹین;بلوومفۆنتەین;ब्लूमफ़ोनटेन;ब्लूमफाँटेन;ਬਲੂਮਫੋਂਟੈਨ;ബ്ലൂംഫൗണ്ടെയിൻ;บลูมฟอนเทน;ბლუმფონტეინი;ብሉምፎንቴይን;ブルームフォンテーン;布隆方丹;블룸폰테인; +city::1019330;Bhisho;BIY;Bhisho;Bisho;Biso;Bišo;bhiso;bi shao;bisho;bisyo;byshw;Бишо;Бішо;بيشو;بھشو;بھیشو;भिशो;ビショ;比绍;비쇼; +city::1019704;Bethlehem;Bethlehem;Vifleem;Вифлеем; +city::1019760;Bethal;Bethal; +city::1020098;Benoni;Benoni;Бенони;Беноні;Բենոնի; +city::1021086;Barberton;Barberton;ba bo dun;巴伯頓; +city::1105776;Midrand;Midrand;Мидранд; +city::1105777;Centurion;Centurion;Verwoerdburg;centurion;sencyuriyana;Центурион;सेंच्युरियन; +city::3359041;Worcester;Gorad Vustehr;Vuster;Worcester;Worcester i Western Cape;usuta;wu si te;Вустер;Горад Вустэр;ウースター;伍斯特; +city::3359510;Wellington;Wellington; +city::3361025;Stellenbosch;Stellenbos;Stellenbosch;seutellenboseu;si tai lun bo si;suterenbosshu;Стелленбос;Սթելլենբոս;ステレンボッシュ;斯泰倫博斯;스텔렌보스; +city::3361934;Saldanha;Hoedjes Bay;Hoedjesbaai;Hoetjes Bay;SDB;Saldana;Saldanha;Салдана; +city::3363094;Paarl;Paarl;pa a er;paru;Паарл;パール;帕阿爾; +city::3365083;Kraaifontein;Kraaifontein; +city::3369157;Cape Town;Altepetl In Cabo;Ar Chab;CPT;Cape Toun;Cape Town;Cidade do Cabo;Cita del Cap;Citati du Capu;Citati dû Capu;Citta del Capo;Cittae do Cavo;Città del Capo;Cità del Cap;Ciuda del Cabu;Ciudad del Cabo;Ciudat do Cabo;Ciudá del Cabu;Ciutat del Cap;Civitas Capitis;El Cabo;Fokvaros;Fokváros;Gorad Kejptaun;Hoefdaborg;Hovdastadur;Höfðaborg;Høvdastaður;IKapa;Kaapstad;Kaapsted;Kaapstêd;Kab town;Kabe Urbe;Kaburbo;Kaepstad;Kapetown;Kapkaupunki;Kaplinn;Kapske Mesto;Kapske Misto;Kapské Mesto;Kapské Město;Kapstad;Kapstaden;Kapstadt;Kapsztad;Kapétown;Keip Taoun;Keiptaun;Keiptauna;Keiptaunas;Keiptauns;Kejptaun;Keyptaun;Keyptawn;Keýptaun;Le Cap;Li Kap;Lo Cap;Lurmutur Hiria;Lé Cap;Sita del Cao;Sita del Cap;Sità del Cao;Sità dël Cap;Tref y Penrhyn;Yvy akua Tava;Yvy akua Táva;hao wang jiao zhen;iKapa;kai pu dui;kai pu dun;keipeutaun;kep taun;kep tavun;kepa ta'una;kepata'una;keputaun;khep thawn;kyb tawn;kېp ټawn;Çittæ do Cavo;Κέιπ Τάουν;Горад Кейптаўн;Капске Місто;Кейптаун;Кејптаун;Քեյփթաուն;קאפשטאט;קייפטאון;كيب تاون;کیپ ٹاؤن;کیپ‌تاون;کېپ ټاون;کەیپ تاون;केपटाउन;केपताउन;কেপ টাউন;ਕੇਪਟਾਊਨ;કેપ ટાઉન;କେପ ଟାଉନ;கேப் டவுன்;కేప్ టౌన్;ಕೇಪ್ ಟೌನ್;കേപ് ടൗൺ;เคปทาวน์;ကိပ်တောင်းမြို့;კეიპტაუნი;ኬፕ ታውን;ケープタウン;好望角鎮;開普敦;케이프타운; +city::3370352;Atlantis;Atlantida;Atlantis;Атлантида; +city::901344;Ndola;Gorad Ndola;NLA;Ndola;Ntola;en duo la;eundolla;ndola;ndora;ndwla;Ντόλα;Горад Ндола;Ндола;ندولا;ნდოლა;ンドラ;恩多拉;은돌라; +city::905395;Mufulira;Mufulira;Mufulire;Муфулире; +city::906054;Mongu;MNR;Mongu;Mungu;Монгу; +city::907111;Mazabuka;Mazabuka;Мазабука; +city::909137;Lusaka;Gorad Lusaka;LUN;Lousaka;Louzaka;Lusaca;Lusak;Lusaka;Lusako;Lúsaka;Lûsaka;lu sa ka;lu sha ka;lucakka;lusaka;lwsaka;lwsqh;lwwsaka;rusaka;Λουσάκα;Горад Лусака;Лусака;Լուսակա;לוסאקא;לוסקה;لوساكا;لوساکا;لووساکا;لۇساكا;लुसाका;লুসাকা;ਲੁਸਾਕਾ;ଲୁସାକ;லுசாக்கா;ลูซากา;ལུ་ས་ཀ།;ლუსაკა;ሉሳካ;ルサカ;盧薩卡;路沙卡;루사카; +city::909863;Luanshya;Luansh'ja;Luansha;Luanshya;Luanshyo;Luansija;Luanšija;lu an xia;luansya;lwanshya;ruansha;Луанша;Луаншья;لوانشیا;ルアンシャ;盧安夏;루안샤; +city::910111;Livingstone;LVI;Livin'nkston;Livingston;Livingston shaary;Livingstonas;Livingstone;Livingstore;Livingstun;Maramba;li wen si dun;libingseuteon;lywwyngstwn;Λίβινγκστον;Ливингстон;Ливингстон шаары;Ливингстън;Марамба;ליווינגסטון;لیونگسٹون، زیمبیا;利文斯顿;리빙스턴; +city::911148;Kitwe;KIW;Kitoue;Kitue;Kitve;Kitve-Nkana;Kitvė;Kitwe;Kitwe Nkana;Nkana-Kitwe;ji te wei;kiteuwe;kitou~e;kytwy;Κίτουε;Китве;Китве-Нкана;Китуе;Кітве;Կիտվե-Նկանա;كيتوي;کتوے;კიტვე;キトウェ;基特韦;키트웨; +city::912764;Kasama;Arcidiocesi di Kasama;KAA;Kasama;Kazama;ka sa ma;kasama;kasama zymbya;Καζάμα;Касама;Կասամա;کاساما، زیمبیا;カサマ;卡薩馬;카사마; +city::914959;Kalulushi;Kalulshi;Kalulushi; +city::916095;Kabwe;Broken Hill;Gorad Kabveh;Kabue;Kabve;Kabvė;Kabwe;QKE;ka bu wei;kabeuwe;kabuu~e;kabwy;Горад Кабвэ;Кабве;Кабуе;كابوي;کابوے;カブウェ;卡布韦;카브웨; +city::918702;Chipata;CIP;Chipata;Cipata;Fort Jameson;Tsipata;chipata;chpata;qi pa ta;Čipata;Τσιπάτα;Чипата;چپاتا;奇帕塔;치파타; +city::919009;Chingola;CGJ;Chingola;Cingola;ching-golla;chingora;chngwla;qin ge la;shynghwla;Čingola;Чингола;شينغولا;چنگولا;チンゴラ;欽戈拉;칭골라; +city::919544;Chililabombwe;Bancroft;Chilabombwe;Chiliabombwe;Chiliadomewe;Chililabombwe; +city::884141;Norton;Norton;Нортон; +city::884979;Mutare;Gorad Mutareh;Mutare;Mutarė;Nyautare;UTA;Umtali;mu ta lei;mutale;Горад Мутарэ;Мутаре;穆塔雷;무타레; +city::886763;Masvingo;Fort Victoria;MVZ;Mashvingo;Masvingo;Nyanda;Машвинго; +city::886990;Marondera;Marandellas;Marondera; +city::888710;Kwekwe;Hwe Hwe;Kvekve;Kvekvė;Kwekwe;Que Que;kui kui shi;kwekwe;kwykwy;kwyykwyy;Квекве;كويكوى;کوئیکوئی;奎奎市;퀘퀘; +city::889453;Kadoma;Gatooma;Kadoma;Kadome;Katoma;ka duo ma;kadoma;Кадома;Кадоме;کادوما، زمبابوے;カドマ;卡多馬;카도마; +city::890299;Harare;Arare;Charare;Gorad Kharareh;HRE;Harare;Hararensis Urbs;Harareo;Hararė;Kharare;Salisbury;ha la lei;halale;harare;harary;hrarh;hrary;Χαράρε;Горад Харарэ;Хараре;Հարարե;הארארה;هارارى;هراره;هراري;ھارارې;ھەرارێ;ہرارے;हरारे;ਹਰਾਰੇ;ହାରାରେ;ஹராரே;ฮาราเร;ཧ་ར་རི།;ჰარარე;ሀራሬ;ハラレ;哈拉雷;하라레; +city::890422;Gweru;GWE;Gveru;Gwelo;Gweru;Гверу; +city::893697;Chinhoyi;Chinhoyi;Chinkhoi;Chinkhoji;Chinoyi;Cinhojis;Sinoia;qi nuo yi;Činhojis;Чинхойи;Чинхої;Чинхоји;چینہوئی;奇諾伊; +city::894701;Bulawayo;BUQ;Bulavajas;Bulavajo;Bulavejo;Bulawayo;Gorad Bulavajo;bu la wa yue;bullawayo;burawayo;Булавайо;Булавајо;Булавейо;Горад Булаваё;ブラワヨ;布拉瓦约;불라와요; +city::1106542;Chitungwiza;Chitungviza;Chitungwiza;Citungviza;Gorad Chytungviza;chytwngwyza;Čitungviza;Горад Чытунгвіза;Читунгвиза;Читунгвіза;چیتونگویزا; diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java index a9068a893..45540636c 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java @@ -1,16 +1,16 @@ package eu.dnetlib.pace.distance; import eu.dnetlib.pace.distance.algo.JaroWinklerNormalizedName; -import org.apache.commons.lang.StringUtils; import org.junit.Before; import org.junit.Test; import eu.dnetlib.pace.common.AbstractPaceFunctions; import java.util.HashMap; -import java.util.List; import java.util.Map; +import static junit.framework.Assert.assertEquals; + public class DistanceAlgoTest extends AbstractPaceFunctions { private final static String TEST_STRING = "Toshiba NB550D: è un netbook su piattaforma AMD Fusion⁽¹²⁾."; @@ -47,9 +47,18 @@ public class DistanceAlgoTest extends AbstractPaceFunctions { @Test public void testJaroWinklerNormalizedName() { final JaroWinklerNormalizedName jaroWinklerNormalizedName = new JaroWinklerNormalizedName(params); - double result = jaroWinklerNormalizedName.distance("universita degli studi di genova", "universita di genova"); + double result = jaroWinklerNormalizedName.distance("Universita di Pisa", "Universita di Parma"); - System.out.println(result); + assertEquals(result, 0.0); + } + + @Test + public void testJaroWinklerNormalizedName2() { + + final JaroWinklerNormalizedName jaroWinklerNormalizedName = new JaroWinklerNormalizedName(params); + double result = jaroWinklerNormalizedName.distance("University of Pisa", "Universita degli studi di Pisa"); + + assertEquals(result, 1.0); } } From 0dfb2ea600a4eae81b568b544ec21a47cb515461 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Sat, 17 Nov 2018 09:11:38 +0100 Subject: [PATCH 042/449] added distance function fot software titles --- .../algo/LevensteinTitleIgnoreVersion.java | 55 +++++++++++++++++++ .../pace/distance/DistanceAlgoTest.java | 9 +++ 2 files changed, 64 insertions(+) create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinTitleIgnoreVersion.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinTitleIgnoreVersion.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinTitleIgnoreVersion.java new file mode 100644 index 000000000..0d8dd609c --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinTitleIgnoreVersion.java @@ -0,0 +1,55 @@ +package eu.dnetlib.pace.distance.algo; + +import com.wcohen.ss.AbstractStringDistance; +import eu.dnetlib.pace.distance.DistanceClass; +import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; + +import java.util.Map; + +/** + * Compared distance between two titles, ignoring version numbers. Suitable for Software entities. + */ +@DistanceClass("LevensteinTitleIgnoreVersion") +public class LevensteinTitleIgnoreVersion extends SecondStringDistanceAlgo { + + public LevensteinTitleIgnoreVersion(Map params){ + super(params, new com.wcohen.ss.Levenstein()); + } + + public LevensteinTitleIgnoreVersion(final double w) { + super(w, new com.wcohen.ss.Levenstein()); + } + + protected LevensteinTitleIgnoreVersion(final double w, final AbstractStringDistance ssalgo) { + super(w, ssalgo); + } + + @Override + public double distance(final String a, final String b) { + String ca = cleanup(a); + String cb = cleanup(b); + + ca = ca.replaceAll("\\d", "").replaceAll(getRomans(ca), "").trim(); + cb = cb.replaceAll("\\d", "").replaceAll(getRomans(cb), "").trim(); + + final String cca = finalCleanup(ca); + final String ccb = finalCleanup(cb); + + return normalize(ssalgo.score(cca, ccb), cca.length(), ccb.length()); + } + + private double normalize(final double score, final int la, final int lb) { + return 1 - (Math.abs(score) / Math.max(la, lb)); + } + + @Override + public double getWeight() { + return super.weight; + } + + @Override + protected double normalize(final double d) { + return 1 / Math.pow(Math.abs(d) + 1, 0.1); + } + +} diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java index a9068a893..4380a6f3e 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java @@ -1,6 +1,7 @@ package eu.dnetlib.pace.distance; import eu.dnetlib.pace.distance.algo.JaroWinklerNormalizedName; +import eu.dnetlib.pace.distance.algo.LevensteinTitleIgnoreVersion; import org.apache.commons.lang.StringUtils; import org.junit.Before; import org.junit.Test; @@ -52,4 +53,12 @@ public class DistanceAlgoTest extends AbstractPaceFunctions { System.out.println(result); } + @Test + public void testLevensteinTitleIgnoreVersion() { + final LevensteinTitleIgnoreVersion algo = new LevensteinTitleIgnoreVersion(params); + double result = algo.distance("gCube data layer v1.0 XI", "gCube data layer v1.5 VIII"); + + System.out.println(result); + } + } From 397554130c43a383f866f04b6c3fae0dbadcfb91 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Sat, 17 Nov 2018 09:13:09 +0100 Subject: [PATCH 043/449] [maven-release-plugin] prepare release dnet-dedup-3.0.5 --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 1e3f34e5d..52b82a158 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 3.0.5-SNAPSHOT + 3.0.5 ../pom.xml From 394fcafd41d84e561d776721d9023cdb6b2d311d Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Sat, 17 Nov 2018 09:13:16 +0100 Subject: [PATCH 044/449] [maven-release-plugin] prepare for next development iteration --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 52b82a158..1b9cddaee 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 3.0.5 + 3.0.6-SNAPSHOT ../pom.xml From c2d4cb3ba6cb7a4f7212bf48e7d868ad2f96c074 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Mon, 19 Nov 2018 17:37:57 +0100 Subject: [PATCH 045/449] added new properties to FieldDef (size, length) to limit the information mapped onto each MapDocument --- .../java/eu/dnetlib/pace/model/FieldDef.java | 45 ++++++++++++++----- .../eu/dnetlib/pace/util/BlockProcessor.java | 11 +---- 2 files changed, 35 insertions(+), 21 deletions(-) diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java index bcc96c6c0..736a255d7 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java @@ -36,7 +36,15 @@ public class FieldDef implements Serializable { private double weight; - private int limit = -1; + /** + * Sets maximum size for the repeatable fields in the model. -1 for unbounded size. + */ + private int size = -1; + + /** + * Sets maximum length for field values in the model. -1 for unbounded length. + */ + private int length = -1; private Map params; @@ -73,7 +81,12 @@ public class FieldDef implements Serializable { if (params == null) { params = new HashMap<>(); } - params.put("limit", getLimit()); + + //TODO verify that the init signatures for the distance algos are all the same! + /* + params.put("size", getSize()); + params.put("length", getLength()); + */ params.put("weight", getWeight()); return PaceConfig.paceResolver.getDistanceAlgo(getAlgo(), params); } @@ -98,11 +111,6 @@ public class FieldDef implements Serializable { this.overrideMatch = overrideMatch; } - @Override - public String toString() { - return new Gson().toJson(this); - } - public double getWeight() { return weight; } @@ -119,12 +127,21 @@ public class FieldDef implements Serializable { this.algo = algo; } - public int getLimit() { - return limit; + + public int getSize() { + return size; } - public void setLimit(final int limit) { - this.limit = limit; + public void setSize(int size) { + this.size = size; + } + + public int getLength() { + return length; + } + + public void setLength(int length) { + this.length = length; } public Map getParams() { @@ -146,4 +163,10 @@ public class FieldDef implements Serializable { public void setIgnoreMissing(boolean ignoreMissing) { this.ignoreMissing = ignoreMissing; } + + @Override + public String toString() { + return new Gson().toJson(this); + } + } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java index f5a41f5c5..2b2ddf02d 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java @@ -149,7 +149,7 @@ public class BlockProcessor { if (!idCurr.equals(idPivot) && (fieldCurr != null)) { - final ScoreResult sr = similarity(algo, pivot, curr); + final ScoreResult sr = algo.between(pivot, curr, dedupConf); log.debug(sr.toString()+"SCORE "+ sr.getScore()); emitOutput(sr, idPivot, idCurr, context); i++; @@ -171,15 +171,6 @@ public class BlockProcessor { } } - private ScoreResult similarity(final PaceDocumentDistance algo, final MapDocument a, final MapDocument b) { - try { - return algo.between(a, b, dedupConf); - } catch(Throwable e) { - log.error(String.format("\nA: %s\n----------------------\nB: %s", a, b), e); - throw new IllegalArgumentException(e); - } - } - private boolean mustSkip(final String idPivot) { return dedupConf.getWf().getSkipList().contains(getNsPrefix(idPivot)); } From 9869dff1d2943d68867a80ee80d44c73f5ab8f04 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Mon, 19 Nov 2018 17:41:37 +0100 Subject: [PATCH 046/449] [maven-release-plugin] prepare release dnet-dedup-3.0.6 --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 1b9cddaee..a4df14b23 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 3.0.6-SNAPSHOT + 3.0.6 ../pom.xml From c5979ffe18986e0497467a1734ca7835ec341718 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Mon, 19 Nov 2018 17:41:45 +0100 Subject: [PATCH 047/449] [maven-release-plugin] prepare for next development iteration --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index a4df14b23..7e6fea288 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 3.0.6 + 3.0.7-SNAPSHOT ../pom.xml From f1c68d8ba3650cad783c05e3163102fefc6afb35 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Tue, 20 Nov 2018 10:51:38 +0100 Subject: [PATCH 048/449] apply limits (length, size) to pace Fields --- .../dnetlib/pace/distance/DistanceScorer.java | 41 +++++++++++++++---- .../pace/distance/algo/LevensteinTitle.java | 5 +++ .../eu/dnetlib/pace/util/PaceException.java | 6 ++- 3 files changed, 43 insertions(+), 9 deletions(-) diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceScorer.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceScorer.java index 115fd1a1e..bb3c37ed6 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceScorer.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceScorer.java @@ -1,23 +1,28 @@ package eu.dnetlib.pace.distance; -import java.util.Collection; -import java.util.List; - import eu.dnetlib.pace.condition.ConditionAlgo; import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.distance.eval.ConditionEvalMap; import eu.dnetlib.pace.distance.eval.DistanceEval; import eu.dnetlib.pace.distance.eval.DistanceEvalMap; import eu.dnetlib.pace.distance.eval.ScoreResult; -import eu.dnetlib.pace.model.Document; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.model.FieldDef; +import eu.dnetlib.pace.model.*; +import eu.dnetlib.pace.util.PaceException; +import org.apache.commons.lang.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; /** * The distance between two documents is given by the weighted mean of the field distances */ public class DistanceScorer { + private static final Log log = LogFactory.getLog(DistanceScorer.class); + private Config config; public DistanceScorer(final Config config) { @@ -79,7 +84,7 @@ public class DistanceScorer { if (va.getType().equals(vb.getType())) { de.setDistance(w * fd.distanceAlgo().distance(va, vb)); } else { - throw new IllegalArgumentException(String.format("Types are differents type: %s:%s - %s:%s", va, va.getType(), vb, vb.getType())); + throw new PaceException(String.format("Types are different: %s:%s - %s:%s", va, va.getType(), vb, vb.getType())); } } return de; @@ -87,7 +92,27 @@ public class DistanceScorer { } private Field getValue(final Document d, final FieldDef fd) { - return d.values(fd.getName()); + final Field v = d.values(fd.getName()); + if (fd.getLength() > 0) { + + if (v instanceof FieldValueImpl) { + ((FieldValueImpl) v).setValue(StringUtils.substring(v.stringValue(), 0, fd.getLength())); + } else if (v instanceof FieldListImpl) { + List strings = ((FieldListImpl) v).stringList(); + strings = strings.stream() + .limit(fd.getSize() > 0 ? fd.getSize() : strings.size()) + .map(s -> StringUtils.substring(s, 0, fd.getLength())) + .collect(Collectors.toList()); + ((FieldListImpl) v).clear(); + ((FieldListImpl) v).addAll(strings.stream() + .limit(fd.getSize() > 0 ? fd.getSize() : strings.size()) + .map(s -> StringUtils.substring(s, 0, fd.getLength())) + .map(s -> new FieldValueImpl(v.getType(), v.getName(), s)) + .collect(Collectors.toList())); + } + } + + return v; } private double sumWeights(final Collection fields) { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinTitle.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinTitle.java index 10de8597c..503dc33b2 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinTitle.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinTitle.java @@ -2,13 +2,18 @@ package eu.dnetlib.pace.distance.algo; import com.wcohen.ss.AbstractStringDistance; import eu.dnetlib.pace.distance.DistanceClass; +import eu.dnetlib.pace.distance.DistanceScorer; import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import java.util.Map; @DistanceClass("LevensteinTitle") public class LevensteinTitle extends SecondStringDistanceAlgo { + private static final Log log = LogFactory.getLog(LevensteinTitle.class); + public LevensteinTitle(Map params){ super(params, new com.wcohen.ss.Levenstein()); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/PaceException.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/PaceException.java index 34fd8ba20..19c546f03 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/PaceException.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/PaceException.java @@ -2,8 +2,12 @@ package eu.dnetlib.pace.util; public class PaceException extends RuntimeException { - public PaceException(String s, Throwable e){ + public PaceException(String s, Throwable e) { super(s, e); } + public PaceException(String s) { + super(s); + } + } From 39613dbbd6fa7a0b3b6ffb9bd7e7258a82a811bb Mon Sep 17 00:00:00 2001 From: Michele De Bonis Date: Wed, 12 Dec 2018 16:30:03 +0100 Subject: [PATCH 049/449] implementation of the decisional tree, addition of the dnet-openaire-data-protos module, definition of the person proto, blockprocessor and paceconfig modified with addition of support for the tree processing --- dnet-openaire-data-protos/deploy.info | 2 + dnet-openaire-data-protos/pom.xml | 58 + .../proto/DatasourceOrganizationProtos.java | 1017 ++ .../dnetlib/data/proto/DatasourceProtos.java | 6758 ++++++++ .../eu/dnetlib/data/proto/DedupProtos.java | 564 + .../data/proto/DedupSimilarityProtos.java | 562 + .../dnetlib/data/proto/FieldTypeProtos.java | 8049 +++++++++ .../eu/dnetlib/data/proto/KindProtos.java | 108 + .../java/eu/dnetlib/data/proto/OafProtos.java | 6730 ++++++++ .../proto/OrganizationOrganizationProtos.java | 651 + .../data/proto/OrganizationProtos.java | 3420 ++++ .../eu/dnetlib/data/proto/PersonProtos.java | 1752 ++ .../data/proto/ProjectOrganizationProtos.java | 1112 ++ .../eu/dnetlib/data/proto/ProjectProtos.java | 4486 +++++ .../dnetlib/data/proto/RelMetadataProtos.java | 680 + .../eu/dnetlib/data/proto/RelTypeProtos.java | 228 + .../data/proto/ResultOrganizationProtos.java | 1017 ++ .../data/proto/ResultProjectProtos.java | 1016 ++ .../eu/dnetlib/data/proto/ResultProtos.java | 14212 ++++++++++++++++ .../data/proto/ResultResultProtos.java | 4927 ++++++ .../data/proto/SpecialTrustProtos.java | 109 + .../eu/dnetlib/data/proto/TypeProtos.java | 118 + .../eu/dnetlib/data/proto/Datasource.proto | 61 + .../data/proto/Datasource_Organization.proto | 23 + .../eu/dnetlib/data/proto/Dedup.proto | 16 + .../dnetlib/data/proto/DedupSimilarity.proto | 16 + .../eu/dnetlib/data/proto/FieldType.proto | 104 + .../eu/dnetlib/data/proto/Kind.proto | 9 + .../eu/dnetlib/data/proto/OafParent.proto | 97 + .../eu/dnetlib/data/proto/Organization.proto | 33 + .../proto/Organization_Organization.proto | 15 + .../eu/dnetlib/data/proto/Person.proto | 25 + .../eu/dnetlib/data/proto/Project.proto | 42 + .../data/proto/Project_Organization.proto | 23 + .../eu/dnetlib/data/proto/RelMetadata.proto | 15 + .../eu/dnetlib/data/proto/RelType.proto | 36 + .../eu/dnetlib/data/proto/Result.proto | 128 + .../data/proto/Result_Organization.proto | 23 + .../dnetlib/data/proto/Result_Project.proto | 23 + .../eu/dnetlib/data/proto/Result_Result.proto | 94 + .../eu/dnetlib/data/proto/SpecialTrust.proto | 9 + .../eu/dnetlib/data/proto/Type.proto | 13 + .../pace/clustering/PersonClustering.java | 65 +- .../pace/common/AbstractPaceFunctions.java | 11 +- .../eu/dnetlib/pace/config/PaceConfig.java | 21 +- .../java/eu/dnetlib/pace/model/FieldList.java | 7 + .../eu/dnetlib/pace/model/FieldListImpl.java | 28 +- .../eu/dnetlib/pace/model/TreeNodeDef.java | 100 + .../dnetlib/pace/tree/AbstractTreeNode.java | 33 + .../eu/dnetlib/pace/tree/CoauthorsMatch.java | 46 + .../java/eu/dnetlib/pace/tree/ExactMatch.java | 25 + .../eu/dnetlib/pace/tree/SimilarMatch.java | 36 + .../eu/dnetlib/pace/tree/TopicsMatch.java | 36 + .../java/eu/dnetlib/pace/tree/TreeNode.java | 10 + .../eu/dnetlib/pace/tree/TreeNodeClass.java | 14 + .../eu/dnetlib/pace/tree/UndefinedNode.java | 25 + .../dnetlib/pace/tree/support/MatchType.java | 21 + .../eu/dnetlib/pace/util/BlockProcessor.java | 55 +- .../eu/dnetlib/pace/util/PaceException.java | 4 + .../eu/dnetlib/pace/util/PaceResolver.java | 21 +- 60 files changed, 58893 insertions(+), 46 deletions(-) create mode 100644 dnet-openaire-data-protos/deploy.info create mode 100644 dnet-openaire-data-protos/pom.xml create mode 100644 dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/DatasourceOrganizationProtos.java create mode 100644 dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/DatasourceProtos.java create mode 100644 dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/DedupProtos.java create mode 100644 dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/DedupSimilarityProtos.java create mode 100644 dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/FieldTypeProtos.java create mode 100644 dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/KindProtos.java create mode 100644 dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/OafProtos.java create mode 100644 dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/OrganizationOrganizationProtos.java create mode 100644 dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/OrganizationProtos.java create mode 100644 dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/PersonProtos.java create mode 100644 dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/ProjectOrganizationProtos.java create mode 100644 dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/ProjectProtos.java create mode 100644 dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/RelMetadataProtos.java create mode 100644 dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/RelTypeProtos.java create mode 100644 dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/ResultOrganizationProtos.java create mode 100644 dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/ResultProjectProtos.java create mode 100644 dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/ResultProtos.java create mode 100644 dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/ResultResultProtos.java create mode 100644 dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/SpecialTrustProtos.java create mode 100644 dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/TypeProtos.java create mode 100644 dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Datasource.proto create mode 100644 dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Datasource_Organization.proto create mode 100644 dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Dedup.proto create mode 100644 dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/DedupSimilarity.proto create mode 100644 dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/FieldType.proto create mode 100644 dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Kind.proto create mode 100644 dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/OafParent.proto create mode 100644 dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Organization.proto create mode 100644 dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Organization_Organization.proto create mode 100644 dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Person.proto create mode 100644 dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Project.proto create mode 100644 dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Project_Organization.proto create mode 100644 dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/RelMetadata.proto create mode 100644 dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/RelType.proto create mode 100644 dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Result.proto create mode 100644 dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Result_Organization.proto create mode 100644 dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Result_Project.proto create mode 100644 dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Result_Result.proto create mode 100644 dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/SpecialTrust.proto create mode 100644 dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Type.proto create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/TreeNodeDef.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AbstractTreeNode.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/CoauthorsMatch.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatch.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SimilarMatch.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/TopicsMatch.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/TreeNode.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/TreeNodeClass.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/UndefinedNode.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/MatchType.java diff --git a/dnet-openaire-data-protos/deploy.info b/dnet-openaire-data-protos/deploy.info new file mode 100644 index 000000000..b3c6d02a5 --- /dev/null +++ b/dnet-openaire-data-protos/deploy.info @@ -0,0 +1,2 @@ +{"type_source": "SVN", "goal": "package -U source:jar", +"url": "http://svn-public.driver.research-infrastructures.eu/driver/dnet45/modules/dnet-openaire-data-protos/trunk/", "deploy_repository": "dnet45-snapshots", "version": "4", "mail": "sandro.labruzzo@isti.cnr.it,michele.artini@isti.cnr.it, claudio.atzori@isti.cnr.it, alessia.bardi@isti.cnr.it", "deploy_repository_url": "http://maven.research-infrastructures.eu/nexus/content/repositories/dnet45-snapshots", "name": "dnet-openaire-data-protos"} \ No newline at end of file diff --git a/dnet-openaire-data-protos/pom.xml b/dnet-openaire-data-protos/pom.xml new file mode 100644 index 000000000..47ed2ea8c --- /dev/null +++ b/dnet-openaire-data-protos/pom.xml @@ -0,0 +1,58 @@ + + + + eu.dnetlib + dnet45-parent + 1.0.0 + + + 4.0.0 + eu.dnetlib + dnet-openaire-data-protos + jar + 3.9.4-CUSTOM + + + + 2.4.1 + + + + + dnet4-bootstrap-release + http://maven.research-infrastructures.eu/nexus/content/repositories/dnet4-bootstrap-release/ + + + + + + + eu.dnetlib + protoc-jar-maven-plugin + 1.1.0 + + + generate-sources + + run + + + ${google.protobuf.version} + + src/main/resources + + src/gen/java + + + + + + + + + com.google.protobuf + protobuf-java + ${google.protobuf.version} + + + diff --git a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/DatasourceOrganizationProtos.java b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/DatasourceOrganizationProtos.java new file mode 100644 index 000000000..6ad51ee0f --- /dev/null +++ b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/DatasourceOrganizationProtos.java @@ -0,0 +1,1017 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: Datasource_Organization.proto + +package eu.dnetlib.data.proto; + +public final class DatasourceOrganizationProtos { + private DatasourceOrganizationProtos() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + } + public interface DatasourceOrganizationOrBuilder + extends com.google.protobuf.MessageOrBuilder { + + // optional .eu.dnetlib.data.proto.DatasourceOrganization.Provision provision = 1; + boolean hasProvision(); + eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision getProvision(); + eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.ProvisionOrBuilder getProvisionOrBuilder(); + } + public static final class DatasourceOrganization extends + com.google.protobuf.GeneratedMessage + implements DatasourceOrganizationOrBuilder { + // Use DatasourceOrganization.newBuilder() to construct. + private DatasourceOrganization(Builder builder) { + super(builder); + } + private DatasourceOrganization(boolean noInit) {} + + private static final DatasourceOrganization defaultInstance; + public static DatasourceOrganization getDefaultInstance() { + return defaultInstance; + } + + public DatasourceOrganization getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.DatasourceOrganizationProtos.internal_static_eu_dnetlib_data_proto_DatasourceOrganization_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.DatasourceOrganizationProtos.internal_static_eu_dnetlib_data_proto_DatasourceOrganization_fieldAccessorTable; + } + + public interface ProvisionOrBuilder + extends com.google.protobuf.MessageOrBuilder { + + // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; + boolean hasRelMetadata(); + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata(); + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder(); + } + public static final class Provision extends + com.google.protobuf.GeneratedMessage + implements ProvisionOrBuilder { + // Use Provision.newBuilder() to construct. + private Provision(Builder builder) { + super(builder); + } + private Provision(boolean noInit) {} + + private static final Provision defaultInstance; + public static Provision getDefaultInstance() { + return defaultInstance; + } + + public Provision getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.DatasourceOrganizationProtos.internal_static_eu_dnetlib_data_proto_DatasourceOrganization_Provision_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.DatasourceOrganizationProtos.internal_static_eu_dnetlib_data_proto_DatasourceOrganization_Provision_fieldAccessorTable; + } + + public enum RelName + implements com.google.protobuf.ProtocolMessageEnum { + isProvidedBy(0, 1), + provides(1, 2), + ; + + public static final int isProvidedBy_VALUE = 1; + public static final int provides_VALUE = 2; + + + public final int getNumber() { return value; } + + public static RelName valueOf(int value) { + switch (value) { + case 1: return isProvidedBy; + case 2: return provides; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static com.google.protobuf.Internal.EnumLiteMap + internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public RelName findValueByNumber(int number) { + return RelName.valueOf(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor + getValueDescriptor() { + return getDescriptor().getValues().get(index); + } + public final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptorForType() { + return getDescriptor(); + } + public static final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptor() { + return eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision.getDescriptor().getEnumTypes().get(0); + } + + private static final RelName[] VALUES = { + isProvidedBy, provides, + }; + + public static RelName valueOf( + com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "EnumValueDescriptor is not for this type."); + } + return VALUES[desc.getIndex()]; + } + + private final int index; + private final int value; + + private RelName(int index, int value) { + this.index = index; + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:eu.dnetlib.data.proto.DatasourceOrganization.Provision.RelName) + } + + private int bitField0_; + // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; + public static final int RELMETADATA_FIELD_NUMBER = 1; + private eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata relMetadata_; + public boolean hasRelMetadata() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata() { + return relMetadata_; + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder() { + return relMetadata_; + } + + private void initFields() { + relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + if (!hasRelMetadata()) { + memoizedIsInitialized = 0; + return false; + } + if (!getRelMetadata().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeMessage(1, relMetadata_); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, relMetadata_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder + implements eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.ProvisionOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.DatasourceOrganizationProtos.internal_static_eu_dnetlib_data_proto_DatasourceOrganization_Provision_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.DatasourceOrganizationProtos.internal_static_eu_dnetlib_data_proto_DatasourceOrganization_Provision_fieldAccessorTable; + } + + // Construct using eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getRelMetadataFieldBuilder(); + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + if (relMetadataBuilder_ == null) { + relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); + } else { + relMetadataBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision.getDescriptor(); + } + + public eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision getDefaultInstanceForType() { + return eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision.getDefaultInstance(); + } + + public eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision build() { + eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + private eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return result; + } + + public eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision buildPartial() { + eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision result = new eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + if (relMetadataBuilder_ == null) { + result.relMetadata_ = relMetadata_; + } else { + result.relMetadata_ = relMetadataBuilder_.build(); + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision) { + return mergeFrom((eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision other) { + if (other == eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision.getDefaultInstance()) return this; + if (other.hasRelMetadata()) { + mergeRelMetadata(other.getRelMetadata()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + if (!hasRelMetadata()) { + + return false; + } + if (!getRelMetadata().isInitialized()) { + + return false; + } + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + } + break; + } + case 10: { + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder subBuilder = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.newBuilder(); + if (hasRelMetadata()) { + subBuilder.mergeFrom(getRelMetadata()); + } + input.readMessage(subBuilder, extensionRegistry); + setRelMetadata(subBuilder.buildPartial()); + break; + } + } + } + } + + private int bitField0_; + + // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; + private eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder> relMetadataBuilder_; + public boolean hasRelMetadata() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata() { + if (relMetadataBuilder_ == null) { + return relMetadata_; + } else { + return relMetadataBuilder_.getMessage(); + } + } + public Builder setRelMetadata(eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata value) { + if (relMetadataBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + relMetadata_ = value; + onChanged(); + } else { + relMetadataBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder setRelMetadata( + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder builderForValue) { + if (relMetadataBuilder_ == null) { + relMetadata_ = builderForValue.build(); + onChanged(); + } else { + relMetadataBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder mergeRelMetadata(eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata value) { + if (relMetadataBuilder_ == null) { + if (((bitField0_ & 0x00000001) == 0x00000001) && + relMetadata_ != eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance()) { + relMetadata_ = + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.newBuilder(relMetadata_).mergeFrom(value).buildPartial(); + } else { + relMetadata_ = value; + } + onChanged(); + } else { + relMetadataBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder clearRelMetadata() { + if (relMetadataBuilder_ == null) { + relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); + onChanged(); + } else { + relMetadataBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder getRelMetadataBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return getRelMetadataFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder() { + if (relMetadataBuilder_ != null) { + return relMetadataBuilder_.getMessageOrBuilder(); + } else { + return relMetadata_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder> + getRelMetadataFieldBuilder() { + if (relMetadataBuilder_ == null) { + relMetadataBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder>( + relMetadata_, + getParentForChildren(), + isClean()); + relMetadata_ = null; + } + return relMetadataBuilder_; + } + + // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.DatasourceOrganization.Provision) + } + + static { + defaultInstance = new Provision(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.DatasourceOrganization.Provision) + } + + private int bitField0_; + // optional .eu.dnetlib.data.proto.DatasourceOrganization.Provision provision = 1; + public static final int PROVISION_FIELD_NUMBER = 1; + private eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision provision_; + public boolean hasProvision() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision getProvision() { + return provision_; + } + public eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.ProvisionOrBuilder getProvisionOrBuilder() { + return provision_; + } + + private void initFields() { + provision_ = eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision.getDefaultInstance(); + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + if (hasProvision()) { + if (!getProvision().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeMessage(1, provision_); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, provision_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder + implements eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganizationOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.DatasourceOrganizationProtos.internal_static_eu_dnetlib_data_proto_DatasourceOrganization_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.DatasourceOrganizationProtos.internal_static_eu_dnetlib_data_proto_DatasourceOrganization_fieldAccessorTable; + } + + // Construct using eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getProvisionFieldBuilder(); + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + if (provisionBuilder_ == null) { + provision_ = eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision.getDefaultInstance(); + } else { + provisionBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.getDescriptor(); + } + + public eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization getDefaultInstanceForType() { + return eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.getDefaultInstance(); + } + + public eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization build() { + eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + private eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return result; + } + + public eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization buildPartial() { + eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization result = new eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + if (provisionBuilder_ == null) { + result.provision_ = provision_; + } else { + result.provision_ = provisionBuilder_.build(); + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization) { + return mergeFrom((eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization other) { + if (other == eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.getDefaultInstance()) return this; + if (other.hasProvision()) { + mergeProvision(other.getProvision()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + if (hasProvision()) { + if (!getProvision().isInitialized()) { + + return false; + } + } + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + } + break; + } + case 10: { + eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision.Builder subBuilder = eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision.newBuilder(); + if (hasProvision()) { + subBuilder.mergeFrom(getProvision()); + } + input.readMessage(subBuilder, extensionRegistry); + setProvision(subBuilder.buildPartial()); + break; + } + } + } + } + + private int bitField0_; + + // optional .eu.dnetlib.data.proto.DatasourceOrganization.Provision provision = 1; + private eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision provision_ = eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision, eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision.Builder, eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.ProvisionOrBuilder> provisionBuilder_; + public boolean hasProvision() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision getProvision() { + if (provisionBuilder_ == null) { + return provision_; + } else { + return provisionBuilder_.getMessage(); + } + } + public Builder setProvision(eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision value) { + if (provisionBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + provision_ = value; + onChanged(); + } else { + provisionBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder setProvision( + eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision.Builder builderForValue) { + if (provisionBuilder_ == null) { + provision_ = builderForValue.build(); + onChanged(); + } else { + provisionBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder mergeProvision(eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision value) { + if (provisionBuilder_ == null) { + if (((bitField0_ & 0x00000001) == 0x00000001) && + provision_ != eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision.getDefaultInstance()) { + provision_ = + eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision.newBuilder(provision_).mergeFrom(value).buildPartial(); + } else { + provision_ = value; + } + onChanged(); + } else { + provisionBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder clearProvision() { + if (provisionBuilder_ == null) { + provision_ = eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision.getDefaultInstance(); + onChanged(); + } else { + provisionBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + public eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision.Builder getProvisionBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return getProvisionFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.ProvisionOrBuilder getProvisionOrBuilder() { + if (provisionBuilder_ != null) { + return provisionBuilder_.getMessageOrBuilder(); + } else { + return provision_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision, eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision.Builder, eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.ProvisionOrBuilder> + getProvisionFieldBuilder() { + if (provisionBuilder_ == null) { + provisionBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision, eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision.Builder, eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.ProvisionOrBuilder>( + provision_, + getParentForChildren(), + isClean()); + provision_ = null; + } + return provisionBuilder_; + } + + // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.DatasourceOrganization) + } + + static { + defaultInstance = new DatasourceOrganization(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.DatasourceOrganization) + } + + private static com.google.protobuf.Descriptors.Descriptor + internal_static_eu_dnetlib_data_proto_DatasourceOrganization_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_eu_dnetlib_data_proto_DatasourceOrganization_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_eu_dnetlib_data_proto_DatasourceOrganization_Provision_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_eu_dnetlib_data_proto_DatasourceOrganization_Provision_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\035Datasource_Organization.proto\022\025eu.dnet" + + "lib.data.proto\032\021RelMetadata.proto\"\325\001\n\026Da" + + "tasourceOrganization\022J\n\tprovision\030\001 \001(\0132" + + "7.eu.dnetlib.data.proto.DatasourceOrgani" + + "zation.Provision\032o\n\tProvision\0227\n\013relMeta" + + "data\030\001 \002(\0132\".eu.dnetlib.data.proto.RelMe" + + "tadata\")\n\007RelName\022\020\n\014isProvidedBy\020\001\022\014\n\010p" + + "rovides\020\002B5\n\025eu.dnetlib.data.protoB\034Data" + + "sourceOrganizationProtos" + }; + com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = + new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { + public com.google.protobuf.ExtensionRegistry assignDescriptors( + com.google.protobuf.Descriptors.FileDescriptor root) { + descriptor = root; + internal_static_eu_dnetlib_data_proto_DatasourceOrganization_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_eu_dnetlib_data_proto_DatasourceOrganization_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_eu_dnetlib_data_proto_DatasourceOrganization_descriptor, + new java.lang.String[] { "Provision", }, + eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.class, + eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Builder.class); + internal_static_eu_dnetlib_data_proto_DatasourceOrganization_Provision_descriptor = + internal_static_eu_dnetlib_data_proto_DatasourceOrganization_descriptor.getNestedTypes().get(0); + internal_static_eu_dnetlib_data_proto_DatasourceOrganization_Provision_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_eu_dnetlib_data_proto_DatasourceOrganization_Provision_descriptor, + new java.lang.String[] { "RelMetadata", }, + eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision.class, + eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision.Builder.class); + return null; + } + }; + com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + eu.dnetlib.data.proto.RelMetadataProtos.getDescriptor(), + }, assigner); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/DatasourceProtos.java b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/DatasourceProtos.java new file mode 100644 index 000000000..ced36fa73 --- /dev/null +++ b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/DatasourceProtos.java @@ -0,0 +1,6758 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: Datasource.proto + +package eu.dnetlib.data.proto; + +public final class DatasourceProtos { + private DatasourceProtos() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + } + public interface DatasourceOrBuilder + extends com.google.protobuf.MessageOrBuilder { + + // optional .eu.dnetlib.data.proto.Datasource.Metadata metadata = 2; + boolean hasMetadata(); + eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata getMetadata(); + eu.dnetlib.data.proto.DatasourceProtos.Datasource.MetadataOrBuilder getMetadataOrBuilder(); + } + public static final class Datasource extends + com.google.protobuf.GeneratedMessage + implements DatasourceOrBuilder { + // Use Datasource.newBuilder() to construct. + private Datasource(Builder builder) { + super(builder); + } + private Datasource(boolean noInit) {} + + private static final Datasource defaultInstance; + public static Datasource getDefaultInstance() { + return defaultInstance; + } + + public Datasource getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.DatasourceProtos.internal_static_eu_dnetlib_data_proto_Datasource_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.DatasourceProtos.internal_static_eu_dnetlib_data_proto_Datasource_fieldAccessorTable; + } + + public interface MetadataOrBuilder + extends com.google.protobuf.MessageOrBuilder { + + // optional .eu.dnetlib.data.proto.Qualifier datasourcetype = 15; + boolean hasDatasourcetype(); + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getDatasourcetype(); + eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getDatasourcetypeOrBuilder(); + + // optional .eu.dnetlib.data.proto.Qualifier openairecompatibility = 17; + boolean hasOpenairecompatibility(); + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getOpenairecompatibility(); + eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getOpenairecompatibilityOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField officialname = 1; + boolean hasOfficialname(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getOfficialname(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOfficialnameOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField englishname = 2; + boolean hasEnglishname(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getEnglishname(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEnglishnameOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField websiteurl = 3; + boolean hasWebsiteurl(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getWebsiteurl(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getWebsiteurlOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField logourl = 4; + boolean hasLogourl(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getLogourl(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getLogourlOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField contactemail = 5; + boolean hasContactemail(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getContactemail(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getContactemailOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField namespaceprefix = 7; + boolean hasNamespaceprefix(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getNamespaceprefix(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getNamespaceprefixOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField latitude = 18; + boolean hasLatitude(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getLatitude(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getLatitudeOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField longitude = 19; + boolean hasLongitude(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getLongitude(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getLongitudeOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField dateofvalidation = 20; + boolean hasDateofvalidation(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getDateofvalidation(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDateofvalidationOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField description = 21; + boolean hasDescription(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getDescription(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDescriptionOrBuilder(); + + // repeated .eu.dnetlib.data.proto.StructuredProperty subjects = 45; + java.util.List + getSubjectsList(); + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty getSubjects(int index); + int getSubjectsCount(); + java.util.List + getSubjectsOrBuilderList(); + eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder getSubjectsOrBuilder( + int index); + + // optional .eu.dnetlib.data.proto.StringField odnumberofitems = 9; + boolean hasOdnumberofitems(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getOdnumberofitems(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOdnumberofitemsOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField odnumberofitemsdate = 10; + boolean hasOdnumberofitemsdate(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getOdnumberofitemsdate(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOdnumberofitemsdateOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField odpolicies = 12; + boolean hasOdpolicies(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getOdpolicies(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOdpoliciesOrBuilder(); + + // repeated .eu.dnetlib.data.proto.StringField odlanguages = 13; + java.util.List + getOdlanguagesList(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getOdlanguages(int index); + int getOdlanguagesCount(); + java.util.List + getOdlanguagesOrBuilderList(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOdlanguagesOrBuilder( + int index); + + // repeated .eu.dnetlib.data.proto.StringField odcontenttypes = 14; + java.util.List + getOdcontenttypesList(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getOdcontenttypes(int index); + int getOdcontenttypesCount(); + java.util.List + getOdcontenttypesOrBuilderList(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOdcontenttypesOrBuilder( + int index); + + // repeated .eu.dnetlib.data.proto.StringField accessinfopackage = 6; + java.util.List + getAccessinfopackageList(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getAccessinfopackage(int index); + int getAccessinfopackageCount(); + java.util.List + getAccessinfopackageOrBuilderList(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getAccessinfopackageOrBuilder( + int index); + + // optional .eu.dnetlib.data.proto.StringField releasestartdate = 31; + boolean hasReleasestartdate(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getReleasestartdate(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getReleasestartdateOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField releaseenddate = 32; + boolean hasReleaseenddate(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getReleaseenddate(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getReleaseenddateOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField missionstatementurl = 33; + boolean hasMissionstatementurl(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getMissionstatementurl(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getMissionstatementurlOrBuilder(); + + // optional .eu.dnetlib.data.proto.BoolField dataprovider = 34; + boolean hasDataprovider(); + eu.dnetlib.data.proto.FieldTypeProtos.BoolField getDataprovider(); + eu.dnetlib.data.proto.FieldTypeProtos.BoolFieldOrBuilder getDataproviderOrBuilder(); + + // optional .eu.dnetlib.data.proto.BoolField serviceprovider = 35; + boolean hasServiceprovider(); + eu.dnetlib.data.proto.FieldTypeProtos.BoolField getServiceprovider(); + eu.dnetlib.data.proto.FieldTypeProtos.BoolFieldOrBuilder getServiceproviderOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField databaseaccesstype = 36; + boolean hasDatabaseaccesstype(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getDatabaseaccesstype(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDatabaseaccesstypeOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField datauploadtype = 37; + boolean hasDatauploadtype(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getDatauploadtype(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDatauploadtypeOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField databaseaccessrestriction = 38; + boolean hasDatabaseaccessrestriction(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getDatabaseaccessrestriction(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDatabaseaccessrestrictionOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField datauploadrestriction = 39; + boolean hasDatauploadrestriction(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getDatauploadrestriction(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDatauploadrestrictionOrBuilder(); + + // optional .eu.dnetlib.data.proto.BoolField versioning = 40; + boolean hasVersioning(); + eu.dnetlib.data.proto.FieldTypeProtos.BoolField getVersioning(); + eu.dnetlib.data.proto.FieldTypeProtos.BoolFieldOrBuilder getVersioningOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField citationguidelineurl = 41; + boolean hasCitationguidelineurl(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getCitationguidelineurl(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getCitationguidelineurlOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField qualitymanagementkind = 42; + boolean hasQualitymanagementkind(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getQualitymanagementkind(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getQualitymanagementkindOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField pidsystems = 43; + boolean hasPidsystems(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getPidsystems(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getPidsystemsOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField certificates = 44; + boolean hasCertificates(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getCertificates(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getCertificatesOrBuilder(); + + // repeated .eu.dnetlib.data.proto.KeyValue policies = 46; + java.util.List + getPoliciesList(); + eu.dnetlib.data.proto.FieldTypeProtos.KeyValue getPolicies(int index); + int getPoliciesCount(); + java.util.List + getPoliciesOrBuilderList(); + eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder getPoliciesOrBuilder( + int index); + } + public static final class Metadata extends + com.google.protobuf.GeneratedMessage + implements MetadataOrBuilder { + // Use Metadata.newBuilder() to construct. + private Metadata(Builder builder) { + super(builder); + } + private Metadata(boolean noInit) {} + + private static final Metadata defaultInstance; + public static Metadata getDefaultInstance() { + return defaultInstance; + } + + public Metadata getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.DatasourceProtos.internal_static_eu_dnetlib_data_proto_Datasource_Metadata_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.DatasourceProtos.internal_static_eu_dnetlib_data_proto_Datasource_Metadata_fieldAccessorTable; + } + + private int bitField0_; + // optional .eu.dnetlib.data.proto.Qualifier datasourcetype = 15; + public static final int DATASOURCETYPE_FIELD_NUMBER = 15; + private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier datasourcetype_; + public boolean hasDatasourcetype() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getDatasourcetype() { + return datasourcetype_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getDatasourcetypeOrBuilder() { + return datasourcetype_; + } + + // optional .eu.dnetlib.data.proto.Qualifier openairecompatibility = 17; + public static final int OPENAIRECOMPATIBILITY_FIELD_NUMBER = 17; + private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier openairecompatibility_; + public boolean hasOpenairecompatibility() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getOpenairecompatibility() { + return openairecompatibility_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getOpenairecompatibilityOrBuilder() { + return openairecompatibility_; + } + + // optional .eu.dnetlib.data.proto.StringField officialname = 1; + public static final int OFFICIALNAME_FIELD_NUMBER = 1; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField officialname_; + public boolean hasOfficialname() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getOfficialname() { + return officialname_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOfficialnameOrBuilder() { + return officialname_; + } + + // optional .eu.dnetlib.data.proto.StringField englishname = 2; + public static final int ENGLISHNAME_FIELD_NUMBER = 2; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField englishname_; + public boolean hasEnglishname() { + return ((bitField0_ & 0x00000008) == 0x00000008); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEnglishname() { + return englishname_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEnglishnameOrBuilder() { + return englishname_; + } + + // optional .eu.dnetlib.data.proto.StringField websiteurl = 3; + public static final int WEBSITEURL_FIELD_NUMBER = 3; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField websiteurl_; + public boolean hasWebsiteurl() { + return ((bitField0_ & 0x00000010) == 0x00000010); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getWebsiteurl() { + return websiteurl_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getWebsiteurlOrBuilder() { + return websiteurl_; + } + + // optional .eu.dnetlib.data.proto.StringField logourl = 4; + public static final int LOGOURL_FIELD_NUMBER = 4; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField logourl_; + public boolean hasLogourl() { + return ((bitField0_ & 0x00000020) == 0x00000020); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getLogourl() { + return logourl_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getLogourlOrBuilder() { + return logourl_; + } + + // optional .eu.dnetlib.data.proto.StringField contactemail = 5; + public static final int CONTACTEMAIL_FIELD_NUMBER = 5; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField contactemail_; + public boolean hasContactemail() { + return ((bitField0_ & 0x00000040) == 0x00000040); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getContactemail() { + return contactemail_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getContactemailOrBuilder() { + return contactemail_; + } + + // optional .eu.dnetlib.data.proto.StringField namespaceprefix = 7; + public static final int NAMESPACEPREFIX_FIELD_NUMBER = 7; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField namespaceprefix_; + public boolean hasNamespaceprefix() { + return ((bitField0_ & 0x00000080) == 0x00000080); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getNamespaceprefix() { + return namespaceprefix_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getNamespaceprefixOrBuilder() { + return namespaceprefix_; + } + + // optional .eu.dnetlib.data.proto.StringField latitude = 18; + public static final int LATITUDE_FIELD_NUMBER = 18; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField latitude_; + public boolean hasLatitude() { + return ((bitField0_ & 0x00000100) == 0x00000100); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getLatitude() { + return latitude_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getLatitudeOrBuilder() { + return latitude_; + } + + // optional .eu.dnetlib.data.proto.StringField longitude = 19; + public static final int LONGITUDE_FIELD_NUMBER = 19; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField longitude_; + public boolean hasLongitude() { + return ((bitField0_ & 0x00000200) == 0x00000200); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getLongitude() { + return longitude_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getLongitudeOrBuilder() { + return longitude_; + } + + // optional .eu.dnetlib.data.proto.StringField dateofvalidation = 20; + public static final int DATEOFVALIDATION_FIELD_NUMBER = 20; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField dateofvalidation_; + public boolean hasDateofvalidation() { + return ((bitField0_ & 0x00000400) == 0x00000400); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getDateofvalidation() { + return dateofvalidation_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDateofvalidationOrBuilder() { + return dateofvalidation_; + } + + // optional .eu.dnetlib.data.proto.StringField description = 21; + public static final int DESCRIPTION_FIELD_NUMBER = 21; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField description_; + public boolean hasDescription() { + return ((bitField0_ & 0x00000800) == 0x00000800); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getDescription() { + return description_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDescriptionOrBuilder() { + return description_; + } + + // repeated .eu.dnetlib.data.proto.StructuredProperty subjects = 45; + public static final int SUBJECTS_FIELD_NUMBER = 45; + private java.util.List subjects_; + public java.util.List getSubjectsList() { + return subjects_; + } + public java.util.List + getSubjectsOrBuilderList() { + return subjects_; + } + public int getSubjectsCount() { + return subjects_.size(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty getSubjects(int index) { + return subjects_.get(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder getSubjectsOrBuilder( + int index) { + return subjects_.get(index); + } + + // optional .eu.dnetlib.data.proto.StringField odnumberofitems = 9; + public static final int ODNUMBEROFITEMS_FIELD_NUMBER = 9; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField odnumberofitems_; + public boolean hasOdnumberofitems() { + return ((bitField0_ & 0x00001000) == 0x00001000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getOdnumberofitems() { + return odnumberofitems_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOdnumberofitemsOrBuilder() { + return odnumberofitems_; + } + + // optional .eu.dnetlib.data.proto.StringField odnumberofitemsdate = 10; + public static final int ODNUMBEROFITEMSDATE_FIELD_NUMBER = 10; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField odnumberofitemsdate_; + public boolean hasOdnumberofitemsdate() { + return ((bitField0_ & 0x00002000) == 0x00002000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getOdnumberofitemsdate() { + return odnumberofitemsdate_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOdnumberofitemsdateOrBuilder() { + return odnumberofitemsdate_; + } + + // optional .eu.dnetlib.data.proto.StringField odpolicies = 12; + public static final int ODPOLICIES_FIELD_NUMBER = 12; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField odpolicies_; + public boolean hasOdpolicies() { + return ((bitField0_ & 0x00004000) == 0x00004000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getOdpolicies() { + return odpolicies_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOdpoliciesOrBuilder() { + return odpolicies_; + } + + // repeated .eu.dnetlib.data.proto.StringField odlanguages = 13; + public static final int ODLANGUAGES_FIELD_NUMBER = 13; + private java.util.List odlanguages_; + public java.util.List getOdlanguagesList() { + return odlanguages_; + } + public java.util.List + getOdlanguagesOrBuilderList() { + return odlanguages_; + } + public int getOdlanguagesCount() { + return odlanguages_.size(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getOdlanguages(int index) { + return odlanguages_.get(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOdlanguagesOrBuilder( + int index) { + return odlanguages_.get(index); + } + + // repeated .eu.dnetlib.data.proto.StringField odcontenttypes = 14; + public static final int ODCONTENTTYPES_FIELD_NUMBER = 14; + private java.util.List odcontenttypes_; + public java.util.List getOdcontenttypesList() { + return odcontenttypes_; + } + public java.util.List + getOdcontenttypesOrBuilderList() { + return odcontenttypes_; + } + public int getOdcontenttypesCount() { + return odcontenttypes_.size(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getOdcontenttypes(int index) { + return odcontenttypes_.get(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOdcontenttypesOrBuilder( + int index) { + return odcontenttypes_.get(index); + } + + // repeated .eu.dnetlib.data.proto.StringField accessinfopackage = 6; + public static final int ACCESSINFOPACKAGE_FIELD_NUMBER = 6; + private java.util.List accessinfopackage_; + public java.util.List getAccessinfopackageList() { + return accessinfopackage_; + } + public java.util.List + getAccessinfopackageOrBuilderList() { + return accessinfopackage_; + } + public int getAccessinfopackageCount() { + return accessinfopackage_.size(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getAccessinfopackage(int index) { + return accessinfopackage_.get(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getAccessinfopackageOrBuilder( + int index) { + return accessinfopackage_.get(index); + } + + // optional .eu.dnetlib.data.proto.StringField releasestartdate = 31; + public static final int RELEASESTARTDATE_FIELD_NUMBER = 31; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField releasestartdate_; + public boolean hasReleasestartdate() { + return ((bitField0_ & 0x00008000) == 0x00008000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getReleasestartdate() { + return releasestartdate_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getReleasestartdateOrBuilder() { + return releasestartdate_; + } + + // optional .eu.dnetlib.data.proto.StringField releaseenddate = 32; + public static final int RELEASEENDDATE_FIELD_NUMBER = 32; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField releaseenddate_; + public boolean hasReleaseenddate() { + return ((bitField0_ & 0x00010000) == 0x00010000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getReleaseenddate() { + return releaseenddate_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getReleaseenddateOrBuilder() { + return releaseenddate_; + } + + // optional .eu.dnetlib.data.proto.StringField missionstatementurl = 33; + public static final int MISSIONSTATEMENTURL_FIELD_NUMBER = 33; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField missionstatementurl_; + public boolean hasMissionstatementurl() { + return ((bitField0_ & 0x00020000) == 0x00020000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getMissionstatementurl() { + return missionstatementurl_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getMissionstatementurlOrBuilder() { + return missionstatementurl_; + } + + // optional .eu.dnetlib.data.proto.BoolField dataprovider = 34; + public static final int DATAPROVIDER_FIELD_NUMBER = 34; + private eu.dnetlib.data.proto.FieldTypeProtos.BoolField dataprovider_; + public boolean hasDataprovider() { + return ((bitField0_ & 0x00040000) == 0x00040000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.BoolField getDataprovider() { + return dataprovider_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.BoolFieldOrBuilder getDataproviderOrBuilder() { + return dataprovider_; + } + + // optional .eu.dnetlib.data.proto.BoolField serviceprovider = 35; + public static final int SERVICEPROVIDER_FIELD_NUMBER = 35; + private eu.dnetlib.data.proto.FieldTypeProtos.BoolField serviceprovider_; + public boolean hasServiceprovider() { + return ((bitField0_ & 0x00080000) == 0x00080000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.BoolField getServiceprovider() { + return serviceprovider_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.BoolFieldOrBuilder getServiceproviderOrBuilder() { + return serviceprovider_; + } + + // optional .eu.dnetlib.data.proto.StringField databaseaccesstype = 36; + public static final int DATABASEACCESSTYPE_FIELD_NUMBER = 36; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField databaseaccesstype_; + public boolean hasDatabaseaccesstype() { + return ((bitField0_ & 0x00100000) == 0x00100000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getDatabaseaccesstype() { + return databaseaccesstype_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDatabaseaccesstypeOrBuilder() { + return databaseaccesstype_; + } + + // optional .eu.dnetlib.data.proto.StringField datauploadtype = 37; + public static final int DATAUPLOADTYPE_FIELD_NUMBER = 37; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField datauploadtype_; + public boolean hasDatauploadtype() { + return ((bitField0_ & 0x00200000) == 0x00200000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getDatauploadtype() { + return datauploadtype_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDatauploadtypeOrBuilder() { + return datauploadtype_; + } + + // optional .eu.dnetlib.data.proto.StringField databaseaccessrestriction = 38; + public static final int DATABASEACCESSRESTRICTION_FIELD_NUMBER = 38; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField databaseaccessrestriction_; + public boolean hasDatabaseaccessrestriction() { + return ((bitField0_ & 0x00400000) == 0x00400000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getDatabaseaccessrestriction() { + return databaseaccessrestriction_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDatabaseaccessrestrictionOrBuilder() { + return databaseaccessrestriction_; + } + + // optional .eu.dnetlib.data.proto.StringField datauploadrestriction = 39; + public static final int DATAUPLOADRESTRICTION_FIELD_NUMBER = 39; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField datauploadrestriction_; + public boolean hasDatauploadrestriction() { + return ((bitField0_ & 0x00800000) == 0x00800000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getDatauploadrestriction() { + return datauploadrestriction_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDatauploadrestrictionOrBuilder() { + return datauploadrestriction_; + } + + // optional .eu.dnetlib.data.proto.BoolField versioning = 40; + public static final int VERSIONING_FIELD_NUMBER = 40; + private eu.dnetlib.data.proto.FieldTypeProtos.BoolField versioning_; + public boolean hasVersioning() { + return ((bitField0_ & 0x01000000) == 0x01000000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.BoolField getVersioning() { + return versioning_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.BoolFieldOrBuilder getVersioningOrBuilder() { + return versioning_; + } + + // optional .eu.dnetlib.data.proto.StringField citationguidelineurl = 41; + public static final int CITATIONGUIDELINEURL_FIELD_NUMBER = 41; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField citationguidelineurl_; + public boolean hasCitationguidelineurl() { + return ((bitField0_ & 0x02000000) == 0x02000000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getCitationguidelineurl() { + return citationguidelineurl_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getCitationguidelineurlOrBuilder() { + return citationguidelineurl_; + } + + // optional .eu.dnetlib.data.proto.StringField qualitymanagementkind = 42; + public static final int QUALITYMANAGEMENTKIND_FIELD_NUMBER = 42; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField qualitymanagementkind_; + public boolean hasQualitymanagementkind() { + return ((bitField0_ & 0x04000000) == 0x04000000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getQualitymanagementkind() { + return qualitymanagementkind_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getQualitymanagementkindOrBuilder() { + return qualitymanagementkind_; + } + + // optional .eu.dnetlib.data.proto.StringField pidsystems = 43; + public static final int PIDSYSTEMS_FIELD_NUMBER = 43; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField pidsystems_; + public boolean hasPidsystems() { + return ((bitField0_ & 0x08000000) == 0x08000000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getPidsystems() { + return pidsystems_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getPidsystemsOrBuilder() { + return pidsystems_; + } + + // optional .eu.dnetlib.data.proto.StringField certificates = 44; + public static final int CERTIFICATES_FIELD_NUMBER = 44; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField certificates_; + public boolean hasCertificates() { + return ((bitField0_ & 0x10000000) == 0x10000000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getCertificates() { + return certificates_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getCertificatesOrBuilder() { + return certificates_; + } + + // repeated .eu.dnetlib.data.proto.KeyValue policies = 46; + public static final int POLICIES_FIELD_NUMBER = 46; + private java.util.List policies_; + public java.util.List getPoliciesList() { + return policies_; + } + public java.util.List + getPoliciesOrBuilderList() { + return policies_; + } + public int getPoliciesCount() { + return policies_.size(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue getPolicies(int index) { + return policies_.get(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder getPoliciesOrBuilder( + int index) { + return policies_.get(index); + } + + private void initFields() { + datasourcetype_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + openairecompatibility_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + officialname_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + englishname_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + websiteurl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + logourl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + contactemail_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + namespaceprefix_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + latitude_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + longitude_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + dateofvalidation_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + description_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + subjects_ = java.util.Collections.emptyList(); + odnumberofitems_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + odnumberofitemsdate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + odpolicies_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + odlanguages_ = java.util.Collections.emptyList(); + odcontenttypes_ = java.util.Collections.emptyList(); + accessinfopackage_ = java.util.Collections.emptyList(); + releasestartdate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + releaseenddate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + missionstatementurl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + dataprovider_ = eu.dnetlib.data.proto.FieldTypeProtos.BoolField.getDefaultInstance(); + serviceprovider_ = eu.dnetlib.data.proto.FieldTypeProtos.BoolField.getDefaultInstance(); + databaseaccesstype_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + datauploadtype_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + databaseaccessrestriction_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + datauploadrestriction_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + versioning_ = eu.dnetlib.data.proto.FieldTypeProtos.BoolField.getDefaultInstance(); + citationguidelineurl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + qualitymanagementkind_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + pidsystems_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + certificates_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + policies_ = java.util.Collections.emptyList(); + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + if (hasDatasourcetype()) { + if (!getDatasourcetype().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasOpenairecompatibility()) { + if (!getOpenairecompatibility().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasOfficialname()) { + if (!getOfficialname().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasEnglishname()) { + if (!getEnglishname().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasWebsiteurl()) { + if (!getWebsiteurl().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasLogourl()) { + if (!getLogourl().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasContactemail()) { + if (!getContactemail().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasNamespaceprefix()) { + if (!getNamespaceprefix().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasLatitude()) { + if (!getLatitude().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasLongitude()) { + if (!getLongitude().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasDateofvalidation()) { + if (!getDateofvalidation().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasDescription()) { + if (!getDescription().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + for (int i = 0; i < getSubjectsCount(); i++) { + if (!getSubjects(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasOdnumberofitems()) { + if (!getOdnumberofitems().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasOdnumberofitemsdate()) { + if (!getOdnumberofitemsdate().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasOdpolicies()) { + if (!getOdpolicies().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + for (int i = 0; i < getOdlanguagesCount(); i++) { + if (!getOdlanguages(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + for (int i = 0; i < getOdcontenttypesCount(); i++) { + if (!getOdcontenttypes(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + for (int i = 0; i < getAccessinfopackageCount(); i++) { + if (!getAccessinfopackage(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasReleasestartdate()) { + if (!getReleasestartdate().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasReleaseenddate()) { + if (!getReleaseenddate().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasMissionstatementurl()) { + if (!getMissionstatementurl().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasDataprovider()) { + if (!getDataprovider().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasServiceprovider()) { + if (!getServiceprovider().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasDatabaseaccesstype()) { + if (!getDatabaseaccesstype().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasDatauploadtype()) { + if (!getDatauploadtype().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasDatabaseaccessrestriction()) { + if (!getDatabaseaccessrestriction().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasDatauploadrestriction()) { + if (!getDatauploadrestriction().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasVersioning()) { + if (!getVersioning().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasCitationguidelineurl()) { + if (!getCitationguidelineurl().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasQualitymanagementkind()) { + if (!getQualitymanagementkind().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasPidsystems()) { + if (!getPidsystems().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasCertificates()) { + if (!getCertificates().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + for (int i = 0; i < getPoliciesCount(); i++) { + if (!getPolicies(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000004) == 0x00000004)) { + output.writeMessage(1, officialname_); + } + if (((bitField0_ & 0x00000008) == 0x00000008)) { + output.writeMessage(2, englishname_); + } + if (((bitField0_ & 0x00000010) == 0x00000010)) { + output.writeMessage(3, websiteurl_); + } + if (((bitField0_ & 0x00000020) == 0x00000020)) { + output.writeMessage(4, logourl_); + } + if (((bitField0_ & 0x00000040) == 0x00000040)) { + output.writeMessage(5, contactemail_); + } + for (int i = 0; i < accessinfopackage_.size(); i++) { + output.writeMessage(6, accessinfopackage_.get(i)); + } + if (((bitField0_ & 0x00000080) == 0x00000080)) { + output.writeMessage(7, namespaceprefix_); + } + if (((bitField0_ & 0x00001000) == 0x00001000)) { + output.writeMessage(9, odnumberofitems_); + } + if (((bitField0_ & 0x00002000) == 0x00002000)) { + output.writeMessage(10, odnumberofitemsdate_); + } + if (((bitField0_ & 0x00004000) == 0x00004000)) { + output.writeMessage(12, odpolicies_); + } + for (int i = 0; i < odlanguages_.size(); i++) { + output.writeMessage(13, odlanguages_.get(i)); + } + for (int i = 0; i < odcontenttypes_.size(); i++) { + output.writeMessage(14, odcontenttypes_.get(i)); + } + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeMessage(15, datasourcetype_); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + output.writeMessage(17, openairecompatibility_); + } + if (((bitField0_ & 0x00000100) == 0x00000100)) { + output.writeMessage(18, latitude_); + } + if (((bitField0_ & 0x00000200) == 0x00000200)) { + output.writeMessage(19, longitude_); + } + if (((bitField0_ & 0x00000400) == 0x00000400)) { + output.writeMessage(20, dateofvalidation_); + } + if (((bitField0_ & 0x00000800) == 0x00000800)) { + output.writeMessage(21, description_); + } + if (((bitField0_ & 0x00008000) == 0x00008000)) { + output.writeMessage(31, releasestartdate_); + } + if (((bitField0_ & 0x00010000) == 0x00010000)) { + output.writeMessage(32, releaseenddate_); + } + if (((bitField0_ & 0x00020000) == 0x00020000)) { + output.writeMessage(33, missionstatementurl_); + } + if (((bitField0_ & 0x00040000) == 0x00040000)) { + output.writeMessage(34, dataprovider_); + } + if (((bitField0_ & 0x00080000) == 0x00080000)) { + output.writeMessage(35, serviceprovider_); + } + if (((bitField0_ & 0x00100000) == 0x00100000)) { + output.writeMessage(36, databaseaccesstype_); + } + if (((bitField0_ & 0x00200000) == 0x00200000)) { + output.writeMessage(37, datauploadtype_); + } + if (((bitField0_ & 0x00400000) == 0x00400000)) { + output.writeMessage(38, databaseaccessrestriction_); + } + if (((bitField0_ & 0x00800000) == 0x00800000)) { + output.writeMessage(39, datauploadrestriction_); + } + if (((bitField0_ & 0x01000000) == 0x01000000)) { + output.writeMessage(40, versioning_); + } + if (((bitField0_ & 0x02000000) == 0x02000000)) { + output.writeMessage(41, citationguidelineurl_); + } + if (((bitField0_ & 0x04000000) == 0x04000000)) { + output.writeMessage(42, qualitymanagementkind_); + } + if (((bitField0_ & 0x08000000) == 0x08000000)) { + output.writeMessage(43, pidsystems_); + } + if (((bitField0_ & 0x10000000) == 0x10000000)) { + output.writeMessage(44, certificates_); + } + for (int i = 0; i < subjects_.size(); i++) { + output.writeMessage(45, subjects_.get(i)); + } + for (int i = 0; i < policies_.size(); i++) { + output.writeMessage(46, policies_.get(i)); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000004) == 0x00000004)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, officialname_); + } + if (((bitField0_ & 0x00000008) == 0x00000008)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(2, englishname_); + } + if (((bitField0_ & 0x00000010) == 0x00000010)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(3, websiteurl_); + } + if (((bitField0_ & 0x00000020) == 0x00000020)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(4, logourl_); + } + if (((bitField0_ & 0x00000040) == 0x00000040)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(5, contactemail_); + } + for (int i = 0; i < accessinfopackage_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(6, accessinfopackage_.get(i)); + } + if (((bitField0_ & 0x00000080) == 0x00000080)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(7, namespaceprefix_); + } + if (((bitField0_ & 0x00001000) == 0x00001000)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(9, odnumberofitems_); + } + if (((bitField0_ & 0x00002000) == 0x00002000)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(10, odnumberofitemsdate_); + } + if (((bitField0_ & 0x00004000) == 0x00004000)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(12, odpolicies_); + } + for (int i = 0; i < odlanguages_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(13, odlanguages_.get(i)); + } + for (int i = 0; i < odcontenttypes_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(14, odcontenttypes_.get(i)); + } + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(15, datasourcetype_); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(17, openairecompatibility_); + } + if (((bitField0_ & 0x00000100) == 0x00000100)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(18, latitude_); + } + if (((bitField0_ & 0x00000200) == 0x00000200)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(19, longitude_); + } + if (((bitField0_ & 0x00000400) == 0x00000400)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(20, dateofvalidation_); + } + if (((bitField0_ & 0x00000800) == 0x00000800)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(21, description_); + } + if (((bitField0_ & 0x00008000) == 0x00008000)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(31, releasestartdate_); + } + if (((bitField0_ & 0x00010000) == 0x00010000)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(32, releaseenddate_); + } + if (((bitField0_ & 0x00020000) == 0x00020000)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(33, missionstatementurl_); + } + if (((bitField0_ & 0x00040000) == 0x00040000)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(34, dataprovider_); + } + if (((bitField0_ & 0x00080000) == 0x00080000)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(35, serviceprovider_); + } + if (((bitField0_ & 0x00100000) == 0x00100000)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(36, databaseaccesstype_); + } + if (((bitField0_ & 0x00200000) == 0x00200000)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(37, datauploadtype_); + } + if (((bitField0_ & 0x00400000) == 0x00400000)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(38, databaseaccessrestriction_); + } + if (((bitField0_ & 0x00800000) == 0x00800000)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(39, datauploadrestriction_); + } + if (((bitField0_ & 0x01000000) == 0x01000000)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(40, versioning_); + } + if (((bitField0_ & 0x02000000) == 0x02000000)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(41, citationguidelineurl_); + } + if (((bitField0_ & 0x04000000) == 0x04000000)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(42, qualitymanagementkind_); + } + if (((bitField0_ & 0x08000000) == 0x08000000)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(43, pidsystems_); + } + if (((bitField0_ & 0x10000000) == 0x10000000)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(44, certificates_); + } + for (int i = 0; i < subjects_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(45, subjects_.get(i)); + } + for (int i = 0; i < policies_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(46, policies_.get(i)); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder + implements eu.dnetlib.data.proto.DatasourceProtos.Datasource.MetadataOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.DatasourceProtos.internal_static_eu_dnetlib_data_proto_Datasource_Metadata_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.DatasourceProtos.internal_static_eu_dnetlib_data_proto_Datasource_Metadata_fieldAccessorTable; + } + + // Construct using eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getDatasourcetypeFieldBuilder(); + getOpenairecompatibilityFieldBuilder(); + getOfficialnameFieldBuilder(); + getEnglishnameFieldBuilder(); + getWebsiteurlFieldBuilder(); + getLogourlFieldBuilder(); + getContactemailFieldBuilder(); + getNamespaceprefixFieldBuilder(); + getLatitudeFieldBuilder(); + getLongitudeFieldBuilder(); + getDateofvalidationFieldBuilder(); + getDescriptionFieldBuilder(); + getSubjectsFieldBuilder(); + getOdnumberofitemsFieldBuilder(); + getOdnumberofitemsdateFieldBuilder(); + getOdpoliciesFieldBuilder(); + getOdlanguagesFieldBuilder(); + getOdcontenttypesFieldBuilder(); + getAccessinfopackageFieldBuilder(); + getReleasestartdateFieldBuilder(); + getReleaseenddateFieldBuilder(); + getMissionstatementurlFieldBuilder(); + getDataproviderFieldBuilder(); + getServiceproviderFieldBuilder(); + getDatabaseaccesstypeFieldBuilder(); + getDatauploadtypeFieldBuilder(); + getDatabaseaccessrestrictionFieldBuilder(); + getDatauploadrestrictionFieldBuilder(); + getVersioningFieldBuilder(); + getCitationguidelineurlFieldBuilder(); + getQualitymanagementkindFieldBuilder(); + getPidsystemsFieldBuilder(); + getCertificatesFieldBuilder(); + getPoliciesFieldBuilder(); + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + if (datasourcetypeBuilder_ == null) { + datasourcetype_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + } else { + datasourcetypeBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + if (openairecompatibilityBuilder_ == null) { + openairecompatibility_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + } else { + openairecompatibilityBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000002); + if (officialnameBuilder_ == null) { + officialname_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + officialnameBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000004); + if (englishnameBuilder_ == null) { + englishname_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + englishnameBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000008); + if (websiteurlBuilder_ == null) { + websiteurl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + websiteurlBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000010); + if (logourlBuilder_ == null) { + logourl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + logourlBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000020); + if (contactemailBuilder_ == null) { + contactemail_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + contactemailBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000040); + if (namespaceprefixBuilder_ == null) { + namespaceprefix_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + namespaceprefixBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000080); + if (latitudeBuilder_ == null) { + latitude_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + latitudeBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000100); + if (longitudeBuilder_ == null) { + longitude_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + longitudeBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000200); + if (dateofvalidationBuilder_ == null) { + dateofvalidation_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + dateofvalidationBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000400); + if (descriptionBuilder_ == null) { + description_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + descriptionBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000800); + if (subjectsBuilder_ == null) { + subjects_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00001000); + } else { + subjectsBuilder_.clear(); + } + if (odnumberofitemsBuilder_ == null) { + odnumberofitems_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + odnumberofitemsBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00002000); + if (odnumberofitemsdateBuilder_ == null) { + odnumberofitemsdate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + odnumberofitemsdateBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00004000); + if (odpoliciesBuilder_ == null) { + odpolicies_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + odpoliciesBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00008000); + if (odlanguagesBuilder_ == null) { + odlanguages_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00010000); + } else { + odlanguagesBuilder_.clear(); + } + if (odcontenttypesBuilder_ == null) { + odcontenttypes_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00020000); + } else { + odcontenttypesBuilder_.clear(); + } + if (accessinfopackageBuilder_ == null) { + accessinfopackage_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00040000); + } else { + accessinfopackageBuilder_.clear(); + } + if (releasestartdateBuilder_ == null) { + releasestartdate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + releasestartdateBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00080000); + if (releaseenddateBuilder_ == null) { + releaseenddate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + releaseenddateBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00100000); + if (missionstatementurlBuilder_ == null) { + missionstatementurl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + missionstatementurlBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00200000); + if (dataproviderBuilder_ == null) { + dataprovider_ = eu.dnetlib.data.proto.FieldTypeProtos.BoolField.getDefaultInstance(); + } else { + dataproviderBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00400000); + if (serviceproviderBuilder_ == null) { + serviceprovider_ = eu.dnetlib.data.proto.FieldTypeProtos.BoolField.getDefaultInstance(); + } else { + serviceproviderBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00800000); + if (databaseaccesstypeBuilder_ == null) { + databaseaccesstype_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + databaseaccesstypeBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x01000000); + if (datauploadtypeBuilder_ == null) { + datauploadtype_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + datauploadtypeBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x02000000); + if (databaseaccessrestrictionBuilder_ == null) { + databaseaccessrestriction_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + databaseaccessrestrictionBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x04000000); + if (datauploadrestrictionBuilder_ == null) { + datauploadrestriction_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + datauploadrestrictionBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x08000000); + if (versioningBuilder_ == null) { + versioning_ = eu.dnetlib.data.proto.FieldTypeProtos.BoolField.getDefaultInstance(); + } else { + versioningBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x10000000); + if (citationguidelineurlBuilder_ == null) { + citationguidelineurl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + citationguidelineurlBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x20000000); + if (qualitymanagementkindBuilder_ == null) { + qualitymanagementkind_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + qualitymanagementkindBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x40000000); + if (pidsystemsBuilder_ == null) { + pidsystems_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + pidsystemsBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x80000000); + if (certificatesBuilder_ == null) { + certificates_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + certificatesBuilder_.clear(); + } + bitField1_ = (bitField1_ & ~0x00000001); + if (policiesBuilder_ == null) { + policies_ = java.util.Collections.emptyList(); + bitField1_ = (bitField1_ & ~0x00000002); + } else { + policiesBuilder_.clear(); + } + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata.getDescriptor(); + } + + public eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata getDefaultInstanceForType() { + return eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata.getDefaultInstance(); + } + + public eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata build() { + eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + private eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return result; + } + + public eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata buildPartial() { + eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata result = new eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata(this); + int from_bitField0_ = bitField0_; + int from_bitField1_ = bitField1_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + if (datasourcetypeBuilder_ == null) { + result.datasourcetype_ = datasourcetype_; + } else { + result.datasourcetype_ = datasourcetypeBuilder_.build(); + } + if (((from_bitField0_ & 0x00000002) == 0x00000002)) { + to_bitField0_ |= 0x00000002; + } + if (openairecompatibilityBuilder_ == null) { + result.openairecompatibility_ = openairecompatibility_; + } else { + result.openairecompatibility_ = openairecompatibilityBuilder_.build(); + } + if (((from_bitField0_ & 0x00000004) == 0x00000004)) { + to_bitField0_ |= 0x00000004; + } + if (officialnameBuilder_ == null) { + result.officialname_ = officialname_; + } else { + result.officialname_ = officialnameBuilder_.build(); + } + if (((from_bitField0_ & 0x00000008) == 0x00000008)) { + to_bitField0_ |= 0x00000008; + } + if (englishnameBuilder_ == null) { + result.englishname_ = englishname_; + } else { + result.englishname_ = englishnameBuilder_.build(); + } + if (((from_bitField0_ & 0x00000010) == 0x00000010)) { + to_bitField0_ |= 0x00000010; + } + if (websiteurlBuilder_ == null) { + result.websiteurl_ = websiteurl_; + } else { + result.websiteurl_ = websiteurlBuilder_.build(); + } + if (((from_bitField0_ & 0x00000020) == 0x00000020)) { + to_bitField0_ |= 0x00000020; + } + if (logourlBuilder_ == null) { + result.logourl_ = logourl_; + } else { + result.logourl_ = logourlBuilder_.build(); + } + if (((from_bitField0_ & 0x00000040) == 0x00000040)) { + to_bitField0_ |= 0x00000040; + } + if (contactemailBuilder_ == null) { + result.contactemail_ = contactemail_; + } else { + result.contactemail_ = contactemailBuilder_.build(); + } + if (((from_bitField0_ & 0x00000080) == 0x00000080)) { + to_bitField0_ |= 0x00000080; + } + if (namespaceprefixBuilder_ == null) { + result.namespaceprefix_ = namespaceprefix_; + } else { + result.namespaceprefix_ = namespaceprefixBuilder_.build(); + } + if (((from_bitField0_ & 0x00000100) == 0x00000100)) { + to_bitField0_ |= 0x00000100; + } + if (latitudeBuilder_ == null) { + result.latitude_ = latitude_; + } else { + result.latitude_ = latitudeBuilder_.build(); + } + if (((from_bitField0_ & 0x00000200) == 0x00000200)) { + to_bitField0_ |= 0x00000200; + } + if (longitudeBuilder_ == null) { + result.longitude_ = longitude_; + } else { + result.longitude_ = longitudeBuilder_.build(); + } + if (((from_bitField0_ & 0x00000400) == 0x00000400)) { + to_bitField0_ |= 0x00000400; + } + if (dateofvalidationBuilder_ == null) { + result.dateofvalidation_ = dateofvalidation_; + } else { + result.dateofvalidation_ = dateofvalidationBuilder_.build(); + } + if (((from_bitField0_ & 0x00000800) == 0x00000800)) { + to_bitField0_ |= 0x00000800; + } + if (descriptionBuilder_ == null) { + result.description_ = description_; + } else { + result.description_ = descriptionBuilder_.build(); + } + if (subjectsBuilder_ == null) { + if (((bitField0_ & 0x00001000) == 0x00001000)) { + subjects_ = java.util.Collections.unmodifiableList(subjects_); + bitField0_ = (bitField0_ & ~0x00001000); + } + result.subjects_ = subjects_; + } else { + result.subjects_ = subjectsBuilder_.build(); + } + if (((from_bitField0_ & 0x00002000) == 0x00002000)) { + to_bitField0_ |= 0x00001000; + } + if (odnumberofitemsBuilder_ == null) { + result.odnumberofitems_ = odnumberofitems_; + } else { + result.odnumberofitems_ = odnumberofitemsBuilder_.build(); + } + if (((from_bitField0_ & 0x00004000) == 0x00004000)) { + to_bitField0_ |= 0x00002000; + } + if (odnumberofitemsdateBuilder_ == null) { + result.odnumberofitemsdate_ = odnumberofitemsdate_; + } else { + result.odnumberofitemsdate_ = odnumberofitemsdateBuilder_.build(); + } + if (((from_bitField0_ & 0x00008000) == 0x00008000)) { + to_bitField0_ |= 0x00004000; + } + if (odpoliciesBuilder_ == null) { + result.odpolicies_ = odpolicies_; + } else { + result.odpolicies_ = odpoliciesBuilder_.build(); + } + if (odlanguagesBuilder_ == null) { + if (((bitField0_ & 0x00010000) == 0x00010000)) { + odlanguages_ = java.util.Collections.unmodifiableList(odlanguages_); + bitField0_ = (bitField0_ & ~0x00010000); + } + result.odlanguages_ = odlanguages_; + } else { + result.odlanguages_ = odlanguagesBuilder_.build(); + } + if (odcontenttypesBuilder_ == null) { + if (((bitField0_ & 0x00020000) == 0x00020000)) { + odcontenttypes_ = java.util.Collections.unmodifiableList(odcontenttypes_); + bitField0_ = (bitField0_ & ~0x00020000); + } + result.odcontenttypes_ = odcontenttypes_; + } else { + result.odcontenttypes_ = odcontenttypesBuilder_.build(); + } + if (accessinfopackageBuilder_ == null) { + if (((bitField0_ & 0x00040000) == 0x00040000)) { + accessinfopackage_ = java.util.Collections.unmodifiableList(accessinfopackage_); + bitField0_ = (bitField0_ & ~0x00040000); + } + result.accessinfopackage_ = accessinfopackage_; + } else { + result.accessinfopackage_ = accessinfopackageBuilder_.build(); + } + if (((from_bitField0_ & 0x00080000) == 0x00080000)) { + to_bitField0_ |= 0x00008000; + } + if (releasestartdateBuilder_ == null) { + result.releasestartdate_ = releasestartdate_; + } else { + result.releasestartdate_ = releasestartdateBuilder_.build(); + } + if (((from_bitField0_ & 0x00100000) == 0x00100000)) { + to_bitField0_ |= 0x00010000; + } + if (releaseenddateBuilder_ == null) { + result.releaseenddate_ = releaseenddate_; + } else { + result.releaseenddate_ = releaseenddateBuilder_.build(); + } + if (((from_bitField0_ & 0x00200000) == 0x00200000)) { + to_bitField0_ |= 0x00020000; + } + if (missionstatementurlBuilder_ == null) { + result.missionstatementurl_ = missionstatementurl_; + } else { + result.missionstatementurl_ = missionstatementurlBuilder_.build(); + } + if (((from_bitField0_ & 0x00400000) == 0x00400000)) { + to_bitField0_ |= 0x00040000; + } + if (dataproviderBuilder_ == null) { + result.dataprovider_ = dataprovider_; + } else { + result.dataprovider_ = dataproviderBuilder_.build(); + } + if (((from_bitField0_ & 0x00800000) == 0x00800000)) { + to_bitField0_ |= 0x00080000; + } + if (serviceproviderBuilder_ == null) { + result.serviceprovider_ = serviceprovider_; + } else { + result.serviceprovider_ = serviceproviderBuilder_.build(); + } + if (((from_bitField0_ & 0x01000000) == 0x01000000)) { + to_bitField0_ |= 0x00100000; + } + if (databaseaccesstypeBuilder_ == null) { + result.databaseaccesstype_ = databaseaccesstype_; + } else { + result.databaseaccesstype_ = databaseaccesstypeBuilder_.build(); + } + if (((from_bitField0_ & 0x02000000) == 0x02000000)) { + to_bitField0_ |= 0x00200000; + } + if (datauploadtypeBuilder_ == null) { + result.datauploadtype_ = datauploadtype_; + } else { + result.datauploadtype_ = datauploadtypeBuilder_.build(); + } + if (((from_bitField0_ & 0x04000000) == 0x04000000)) { + to_bitField0_ |= 0x00400000; + } + if (databaseaccessrestrictionBuilder_ == null) { + result.databaseaccessrestriction_ = databaseaccessrestriction_; + } else { + result.databaseaccessrestriction_ = databaseaccessrestrictionBuilder_.build(); + } + if (((from_bitField0_ & 0x08000000) == 0x08000000)) { + to_bitField0_ |= 0x00800000; + } + if (datauploadrestrictionBuilder_ == null) { + result.datauploadrestriction_ = datauploadrestriction_; + } else { + result.datauploadrestriction_ = datauploadrestrictionBuilder_.build(); + } + if (((from_bitField0_ & 0x10000000) == 0x10000000)) { + to_bitField0_ |= 0x01000000; + } + if (versioningBuilder_ == null) { + result.versioning_ = versioning_; + } else { + result.versioning_ = versioningBuilder_.build(); + } + if (((from_bitField0_ & 0x20000000) == 0x20000000)) { + to_bitField0_ |= 0x02000000; + } + if (citationguidelineurlBuilder_ == null) { + result.citationguidelineurl_ = citationguidelineurl_; + } else { + result.citationguidelineurl_ = citationguidelineurlBuilder_.build(); + } + if (((from_bitField0_ & 0x40000000) == 0x40000000)) { + to_bitField0_ |= 0x04000000; + } + if (qualitymanagementkindBuilder_ == null) { + result.qualitymanagementkind_ = qualitymanagementkind_; + } else { + result.qualitymanagementkind_ = qualitymanagementkindBuilder_.build(); + } + if (((from_bitField0_ & 0x80000000) == 0x80000000)) { + to_bitField0_ |= 0x08000000; + } + if (pidsystemsBuilder_ == null) { + result.pidsystems_ = pidsystems_; + } else { + result.pidsystems_ = pidsystemsBuilder_.build(); + } + if (((from_bitField1_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x10000000; + } + if (certificatesBuilder_ == null) { + result.certificates_ = certificates_; + } else { + result.certificates_ = certificatesBuilder_.build(); + } + if (policiesBuilder_ == null) { + if (((bitField1_ & 0x00000002) == 0x00000002)) { + policies_ = java.util.Collections.unmodifiableList(policies_); + bitField1_ = (bitField1_ & ~0x00000002); + } + result.policies_ = policies_; + } else { + result.policies_ = policiesBuilder_.build(); + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata) { + return mergeFrom((eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata other) { + if (other == eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata.getDefaultInstance()) return this; + if (other.hasDatasourcetype()) { + mergeDatasourcetype(other.getDatasourcetype()); + } + if (other.hasOpenairecompatibility()) { + mergeOpenairecompatibility(other.getOpenairecompatibility()); + } + if (other.hasOfficialname()) { + mergeOfficialname(other.getOfficialname()); + } + if (other.hasEnglishname()) { + mergeEnglishname(other.getEnglishname()); + } + if (other.hasWebsiteurl()) { + mergeWebsiteurl(other.getWebsiteurl()); + } + if (other.hasLogourl()) { + mergeLogourl(other.getLogourl()); + } + if (other.hasContactemail()) { + mergeContactemail(other.getContactemail()); + } + if (other.hasNamespaceprefix()) { + mergeNamespaceprefix(other.getNamespaceprefix()); + } + if (other.hasLatitude()) { + mergeLatitude(other.getLatitude()); + } + if (other.hasLongitude()) { + mergeLongitude(other.getLongitude()); + } + if (other.hasDateofvalidation()) { + mergeDateofvalidation(other.getDateofvalidation()); + } + if (other.hasDescription()) { + mergeDescription(other.getDescription()); + } + if (subjectsBuilder_ == null) { + if (!other.subjects_.isEmpty()) { + if (subjects_.isEmpty()) { + subjects_ = other.subjects_; + bitField0_ = (bitField0_ & ~0x00001000); + } else { + ensureSubjectsIsMutable(); + subjects_.addAll(other.subjects_); + } + onChanged(); + } + } else { + if (!other.subjects_.isEmpty()) { + if (subjectsBuilder_.isEmpty()) { + subjectsBuilder_.dispose(); + subjectsBuilder_ = null; + subjects_ = other.subjects_; + bitField0_ = (bitField0_ & ~0x00001000); + subjectsBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + getSubjectsFieldBuilder() : null; + } else { + subjectsBuilder_.addAllMessages(other.subjects_); + } + } + } + if (other.hasOdnumberofitems()) { + mergeOdnumberofitems(other.getOdnumberofitems()); + } + if (other.hasOdnumberofitemsdate()) { + mergeOdnumberofitemsdate(other.getOdnumberofitemsdate()); + } + if (other.hasOdpolicies()) { + mergeOdpolicies(other.getOdpolicies()); + } + if (odlanguagesBuilder_ == null) { + if (!other.odlanguages_.isEmpty()) { + if (odlanguages_.isEmpty()) { + odlanguages_ = other.odlanguages_; + bitField0_ = (bitField0_ & ~0x00010000); + } else { + ensureOdlanguagesIsMutable(); + odlanguages_.addAll(other.odlanguages_); + } + onChanged(); + } + } else { + if (!other.odlanguages_.isEmpty()) { + if (odlanguagesBuilder_.isEmpty()) { + odlanguagesBuilder_.dispose(); + odlanguagesBuilder_ = null; + odlanguages_ = other.odlanguages_; + bitField0_ = (bitField0_ & ~0x00010000); + odlanguagesBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + getOdlanguagesFieldBuilder() : null; + } else { + odlanguagesBuilder_.addAllMessages(other.odlanguages_); + } + } + } + if (odcontenttypesBuilder_ == null) { + if (!other.odcontenttypes_.isEmpty()) { + if (odcontenttypes_.isEmpty()) { + odcontenttypes_ = other.odcontenttypes_; + bitField0_ = (bitField0_ & ~0x00020000); + } else { + ensureOdcontenttypesIsMutable(); + odcontenttypes_.addAll(other.odcontenttypes_); + } + onChanged(); + } + } else { + if (!other.odcontenttypes_.isEmpty()) { + if (odcontenttypesBuilder_.isEmpty()) { + odcontenttypesBuilder_.dispose(); + odcontenttypesBuilder_ = null; + odcontenttypes_ = other.odcontenttypes_; + bitField0_ = (bitField0_ & ~0x00020000); + odcontenttypesBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + getOdcontenttypesFieldBuilder() : null; + } else { + odcontenttypesBuilder_.addAllMessages(other.odcontenttypes_); + } + } + } + if (accessinfopackageBuilder_ == null) { + if (!other.accessinfopackage_.isEmpty()) { + if (accessinfopackage_.isEmpty()) { + accessinfopackage_ = other.accessinfopackage_; + bitField0_ = (bitField0_ & ~0x00040000); + } else { + ensureAccessinfopackageIsMutable(); + accessinfopackage_.addAll(other.accessinfopackage_); + } + onChanged(); + } + } else { + if (!other.accessinfopackage_.isEmpty()) { + if (accessinfopackageBuilder_.isEmpty()) { + accessinfopackageBuilder_.dispose(); + accessinfopackageBuilder_ = null; + accessinfopackage_ = other.accessinfopackage_; + bitField0_ = (bitField0_ & ~0x00040000); + accessinfopackageBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + getAccessinfopackageFieldBuilder() : null; + } else { + accessinfopackageBuilder_.addAllMessages(other.accessinfopackage_); + } + } + } + if (other.hasReleasestartdate()) { + mergeReleasestartdate(other.getReleasestartdate()); + } + if (other.hasReleaseenddate()) { + mergeReleaseenddate(other.getReleaseenddate()); + } + if (other.hasMissionstatementurl()) { + mergeMissionstatementurl(other.getMissionstatementurl()); + } + if (other.hasDataprovider()) { + mergeDataprovider(other.getDataprovider()); + } + if (other.hasServiceprovider()) { + mergeServiceprovider(other.getServiceprovider()); + } + if (other.hasDatabaseaccesstype()) { + mergeDatabaseaccesstype(other.getDatabaseaccesstype()); + } + if (other.hasDatauploadtype()) { + mergeDatauploadtype(other.getDatauploadtype()); + } + if (other.hasDatabaseaccessrestriction()) { + mergeDatabaseaccessrestriction(other.getDatabaseaccessrestriction()); + } + if (other.hasDatauploadrestriction()) { + mergeDatauploadrestriction(other.getDatauploadrestriction()); + } + if (other.hasVersioning()) { + mergeVersioning(other.getVersioning()); + } + if (other.hasCitationguidelineurl()) { + mergeCitationguidelineurl(other.getCitationguidelineurl()); + } + if (other.hasQualitymanagementkind()) { + mergeQualitymanagementkind(other.getQualitymanagementkind()); + } + if (other.hasPidsystems()) { + mergePidsystems(other.getPidsystems()); + } + if (other.hasCertificates()) { + mergeCertificates(other.getCertificates()); + } + if (policiesBuilder_ == null) { + if (!other.policies_.isEmpty()) { + if (policies_.isEmpty()) { + policies_ = other.policies_; + bitField1_ = (bitField1_ & ~0x00000002); + } else { + ensurePoliciesIsMutable(); + policies_.addAll(other.policies_); + } + onChanged(); + } + } else { + if (!other.policies_.isEmpty()) { + if (policiesBuilder_.isEmpty()) { + policiesBuilder_.dispose(); + policiesBuilder_ = null; + policies_ = other.policies_; + bitField1_ = (bitField1_ & ~0x00000002); + policiesBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + getPoliciesFieldBuilder() : null; + } else { + policiesBuilder_.addAllMessages(other.policies_); + } + } + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + if (hasDatasourcetype()) { + if (!getDatasourcetype().isInitialized()) { + + return false; + } + } + if (hasOpenairecompatibility()) { + if (!getOpenairecompatibility().isInitialized()) { + + return false; + } + } + if (hasOfficialname()) { + if (!getOfficialname().isInitialized()) { + + return false; + } + } + if (hasEnglishname()) { + if (!getEnglishname().isInitialized()) { + + return false; + } + } + if (hasWebsiteurl()) { + if (!getWebsiteurl().isInitialized()) { + + return false; + } + } + if (hasLogourl()) { + if (!getLogourl().isInitialized()) { + + return false; + } + } + if (hasContactemail()) { + if (!getContactemail().isInitialized()) { + + return false; + } + } + if (hasNamespaceprefix()) { + if (!getNamespaceprefix().isInitialized()) { + + return false; + } + } + if (hasLatitude()) { + if (!getLatitude().isInitialized()) { + + return false; + } + } + if (hasLongitude()) { + if (!getLongitude().isInitialized()) { + + return false; + } + } + if (hasDateofvalidation()) { + if (!getDateofvalidation().isInitialized()) { + + return false; + } + } + if (hasDescription()) { + if (!getDescription().isInitialized()) { + + return false; + } + } + for (int i = 0; i < getSubjectsCount(); i++) { + if (!getSubjects(i).isInitialized()) { + + return false; + } + } + if (hasOdnumberofitems()) { + if (!getOdnumberofitems().isInitialized()) { + + return false; + } + } + if (hasOdnumberofitemsdate()) { + if (!getOdnumberofitemsdate().isInitialized()) { + + return false; + } + } + if (hasOdpolicies()) { + if (!getOdpolicies().isInitialized()) { + + return false; + } + } + for (int i = 0; i < getOdlanguagesCount(); i++) { + if (!getOdlanguages(i).isInitialized()) { + + return false; + } + } + for (int i = 0; i < getOdcontenttypesCount(); i++) { + if (!getOdcontenttypes(i).isInitialized()) { + + return false; + } + } + for (int i = 0; i < getAccessinfopackageCount(); i++) { + if (!getAccessinfopackage(i).isInitialized()) { + + return false; + } + } + if (hasReleasestartdate()) { + if (!getReleasestartdate().isInitialized()) { + + return false; + } + } + if (hasReleaseenddate()) { + if (!getReleaseenddate().isInitialized()) { + + return false; + } + } + if (hasMissionstatementurl()) { + if (!getMissionstatementurl().isInitialized()) { + + return false; + } + } + if (hasDataprovider()) { + if (!getDataprovider().isInitialized()) { + + return false; + } + } + if (hasServiceprovider()) { + if (!getServiceprovider().isInitialized()) { + + return false; + } + } + if (hasDatabaseaccesstype()) { + if (!getDatabaseaccesstype().isInitialized()) { + + return false; + } + } + if (hasDatauploadtype()) { + if (!getDatauploadtype().isInitialized()) { + + return false; + } + } + if (hasDatabaseaccessrestriction()) { + if (!getDatabaseaccessrestriction().isInitialized()) { + + return false; + } + } + if (hasDatauploadrestriction()) { + if (!getDatauploadrestriction().isInitialized()) { + + return false; + } + } + if (hasVersioning()) { + if (!getVersioning().isInitialized()) { + + return false; + } + } + if (hasCitationguidelineurl()) { + if (!getCitationguidelineurl().isInitialized()) { + + return false; + } + } + if (hasQualitymanagementkind()) { + if (!getQualitymanagementkind().isInitialized()) { + + return false; + } + } + if (hasPidsystems()) { + if (!getPidsystems().isInitialized()) { + + return false; + } + } + if (hasCertificates()) { + if (!getCertificates().isInitialized()) { + + return false; + } + } + for (int i = 0; i < getPoliciesCount(); i++) { + if (!getPolicies(i).isInitialized()) { + + return false; + } + } + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + } + break; + } + case 10: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasOfficialname()) { + subBuilder.mergeFrom(getOfficialname()); + } + input.readMessage(subBuilder, extensionRegistry); + setOfficialname(subBuilder.buildPartial()); + break; + } + case 18: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasEnglishname()) { + subBuilder.mergeFrom(getEnglishname()); + } + input.readMessage(subBuilder, extensionRegistry); + setEnglishname(subBuilder.buildPartial()); + break; + } + case 26: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasWebsiteurl()) { + subBuilder.mergeFrom(getWebsiteurl()); + } + input.readMessage(subBuilder, extensionRegistry); + setWebsiteurl(subBuilder.buildPartial()); + break; + } + case 34: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasLogourl()) { + subBuilder.mergeFrom(getLogourl()); + } + input.readMessage(subBuilder, extensionRegistry); + setLogourl(subBuilder.buildPartial()); + break; + } + case 42: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasContactemail()) { + subBuilder.mergeFrom(getContactemail()); + } + input.readMessage(subBuilder, extensionRegistry); + setContactemail(subBuilder.buildPartial()); + break; + } + case 50: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addAccessinfopackage(subBuilder.buildPartial()); + break; + } + case 58: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasNamespaceprefix()) { + subBuilder.mergeFrom(getNamespaceprefix()); + } + input.readMessage(subBuilder, extensionRegistry); + setNamespaceprefix(subBuilder.buildPartial()); + break; + } + case 74: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasOdnumberofitems()) { + subBuilder.mergeFrom(getOdnumberofitems()); + } + input.readMessage(subBuilder, extensionRegistry); + setOdnumberofitems(subBuilder.buildPartial()); + break; + } + case 82: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasOdnumberofitemsdate()) { + subBuilder.mergeFrom(getOdnumberofitemsdate()); + } + input.readMessage(subBuilder, extensionRegistry); + setOdnumberofitemsdate(subBuilder.buildPartial()); + break; + } + case 98: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasOdpolicies()) { + subBuilder.mergeFrom(getOdpolicies()); + } + input.readMessage(subBuilder, extensionRegistry); + setOdpolicies(subBuilder.buildPartial()); + break; + } + case 106: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addOdlanguages(subBuilder.buildPartial()); + break; + } + case 114: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addOdcontenttypes(subBuilder.buildPartial()); + break; + } + case 122: { + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(); + if (hasDatasourcetype()) { + subBuilder.mergeFrom(getDatasourcetype()); + } + input.readMessage(subBuilder, extensionRegistry); + setDatasourcetype(subBuilder.buildPartial()); + break; + } + case 138: { + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(); + if (hasOpenairecompatibility()) { + subBuilder.mergeFrom(getOpenairecompatibility()); + } + input.readMessage(subBuilder, extensionRegistry); + setOpenairecompatibility(subBuilder.buildPartial()); + break; + } + case 146: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasLatitude()) { + subBuilder.mergeFrom(getLatitude()); + } + input.readMessage(subBuilder, extensionRegistry); + setLatitude(subBuilder.buildPartial()); + break; + } + case 154: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasLongitude()) { + subBuilder.mergeFrom(getLongitude()); + } + input.readMessage(subBuilder, extensionRegistry); + setLongitude(subBuilder.buildPartial()); + break; + } + case 162: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasDateofvalidation()) { + subBuilder.mergeFrom(getDateofvalidation()); + } + input.readMessage(subBuilder, extensionRegistry); + setDateofvalidation(subBuilder.buildPartial()); + break; + } + case 170: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasDescription()) { + subBuilder.mergeFrom(getDescription()); + } + input.readMessage(subBuilder, extensionRegistry); + setDescription(subBuilder.buildPartial()); + break; + } + case 250: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasReleasestartdate()) { + subBuilder.mergeFrom(getReleasestartdate()); + } + input.readMessage(subBuilder, extensionRegistry); + setReleasestartdate(subBuilder.buildPartial()); + break; + } + case 258: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasReleaseenddate()) { + subBuilder.mergeFrom(getReleaseenddate()); + } + input.readMessage(subBuilder, extensionRegistry); + setReleaseenddate(subBuilder.buildPartial()); + break; + } + case 266: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasMissionstatementurl()) { + subBuilder.mergeFrom(getMissionstatementurl()); + } + input.readMessage(subBuilder, extensionRegistry); + setMissionstatementurl(subBuilder.buildPartial()); + break; + } + case 274: { + eu.dnetlib.data.proto.FieldTypeProtos.BoolField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.BoolField.newBuilder(); + if (hasDataprovider()) { + subBuilder.mergeFrom(getDataprovider()); + } + input.readMessage(subBuilder, extensionRegistry); + setDataprovider(subBuilder.buildPartial()); + break; + } + case 282: { + eu.dnetlib.data.proto.FieldTypeProtos.BoolField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.BoolField.newBuilder(); + if (hasServiceprovider()) { + subBuilder.mergeFrom(getServiceprovider()); + } + input.readMessage(subBuilder, extensionRegistry); + setServiceprovider(subBuilder.buildPartial()); + break; + } + case 290: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasDatabaseaccesstype()) { + subBuilder.mergeFrom(getDatabaseaccesstype()); + } + input.readMessage(subBuilder, extensionRegistry); + setDatabaseaccesstype(subBuilder.buildPartial()); + break; + } + case 298: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasDatauploadtype()) { + subBuilder.mergeFrom(getDatauploadtype()); + } + input.readMessage(subBuilder, extensionRegistry); + setDatauploadtype(subBuilder.buildPartial()); + break; + } + case 306: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasDatabaseaccessrestriction()) { + subBuilder.mergeFrom(getDatabaseaccessrestriction()); + } + input.readMessage(subBuilder, extensionRegistry); + setDatabaseaccessrestriction(subBuilder.buildPartial()); + break; + } + case 314: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasDatauploadrestriction()) { + subBuilder.mergeFrom(getDatauploadrestriction()); + } + input.readMessage(subBuilder, extensionRegistry); + setDatauploadrestriction(subBuilder.buildPartial()); + break; + } + case 322: { + eu.dnetlib.data.proto.FieldTypeProtos.BoolField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.BoolField.newBuilder(); + if (hasVersioning()) { + subBuilder.mergeFrom(getVersioning()); + } + input.readMessage(subBuilder, extensionRegistry); + setVersioning(subBuilder.buildPartial()); + break; + } + case 330: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasCitationguidelineurl()) { + subBuilder.mergeFrom(getCitationguidelineurl()); + } + input.readMessage(subBuilder, extensionRegistry); + setCitationguidelineurl(subBuilder.buildPartial()); + break; + } + case 338: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasQualitymanagementkind()) { + subBuilder.mergeFrom(getQualitymanagementkind()); + } + input.readMessage(subBuilder, extensionRegistry); + setQualitymanagementkind(subBuilder.buildPartial()); + break; + } + case 346: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasPidsystems()) { + subBuilder.mergeFrom(getPidsystems()); + } + input.readMessage(subBuilder, extensionRegistry); + setPidsystems(subBuilder.buildPartial()); + break; + } + case 354: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasCertificates()) { + subBuilder.mergeFrom(getCertificates()); + } + input.readMessage(subBuilder, extensionRegistry); + setCertificates(subBuilder.buildPartial()); + break; + } + case 362: { + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addSubjects(subBuilder.buildPartial()); + break; + } + case 370: { + eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addPolicies(subBuilder.buildPartial()); + break; + } + } + } + } + + private int bitField0_; + private int bitField1_; + + // optional .eu.dnetlib.data.proto.Qualifier datasourcetype = 15; + private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier datasourcetype_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> datasourcetypeBuilder_; + public boolean hasDatasourcetype() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getDatasourcetype() { + if (datasourcetypeBuilder_ == null) { + return datasourcetype_; + } else { + return datasourcetypeBuilder_.getMessage(); + } + } + public Builder setDatasourcetype(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { + if (datasourcetypeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + datasourcetype_ = value; + onChanged(); + } else { + datasourcetypeBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder setDatasourcetype( + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder builderForValue) { + if (datasourcetypeBuilder_ == null) { + datasourcetype_ = builderForValue.build(); + onChanged(); + } else { + datasourcetypeBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder mergeDatasourcetype(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { + if (datasourcetypeBuilder_ == null) { + if (((bitField0_ & 0x00000001) == 0x00000001) && + datasourcetype_ != eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance()) { + datasourcetype_ = + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(datasourcetype_).mergeFrom(value).buildPartial(); + } else { + datasourcetype_ = value; + } + onChanged(); + } else { + datasourcetypeBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder clearDatasourcetype() { + if (datasourcetypeBuilder_ == null) { + datasourcetype_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + onChanged(); + } else { + datasourcetypeBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder getDatasourcetypeBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return getDatasourcetypeFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getDatasourcetypeOrBuilder() { + if (datasourcetypeBuilder_ != null) { + return datasourcetypeBuilder_.getMessageOrBuilder(); + } else { + return datasourcetype_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> + getDatasourcetypeFieldBuilder() { + if (datasourcetypeBuilder_ == null) { + datasourcetypeBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder>( + datasourcetype_, + getParentForChildren(), + isClean()); + datasourcetype_ = null; + } + return datasourcetypeBuilder_; + } + + // optional .eu.dnetlib.data.proto.Qualifier openairecompatibility = 17; + private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier openairecompatibility_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> openairecompatibilityBuilder_; + public boolean hasOpenairecompatibility() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getOpenairecompatibility() { + if (openairecompatibilityBuilder_ == null) { + return openairecompatibility_; + } else { + return openairecompatibilityBuilder_.getMessage(); + } + } + public Builder setOpenairecompatibility(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { + if (openairecompatibilityBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + openairecompatibility_ = value; + onChanged(); + } else { + openairecompatibilityBuilder_.setMessage(value); + } + bitField0_ |= 0x00000002; + return this; + } + public Builder setOpenairecompatibility( + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder builderForValue) { + if (openairecompatibilityBuilder_ == null) { + openairecompatibility_ = builderForValue.build(); + onChanged(); + } else { + openairecompatibilityBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000002; + return this; + } + public Builder mergeOpenairecompatibility(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { + if (openairecompatibilityBuilder_ == null) { + if (((bitField0_ & 0x00000002) == 0x00000002) && + openairecompatibility_ != eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance()) { + openairecompatibility_ = + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(openairecompatibility_).mergeFrom(value).buildPartial(); + } else { + openairecompatibility_ = value; + } + onChanged(); + } else { + openairecompatibilityBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000002; + return this; + } + public Builder clearOpenairecompatibility() { + if (openairecompatibilityBuilder_ == null) { + openairecompatibility_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + onChanged(); + } else { + openairecompatibilityBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000002); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder getOpenairecompatibilityBuilder() { + bitField0_ |= 0x00000002; + onChanged(); + return getOpenairecompatibilityFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getOpenairecompatibilityOrBuilder() { + if (openairecompatibilityBuilder_ != null) { + return openairecompatibilityBuilder_.getMessageOrBuilder(); + } else { + return openairecompatibility_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> + getOpenairecompatibilityFieldBuilder() { + if (openairecompatibilityBuilder_ == null) { + openairecompatibilityBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder>( + openairecompatibility_, + getParentForChildren(), + isClean()); + openairecompatibility_ = null; + } + return openairecompatibilityBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField officialname = 1; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField officialname_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> officialnameBuilder_; + public boolean hasOfficialname() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getOfficialname() { + if (officialnameBuilder_ == null) { + return officialname_; + } else { + return officialnameBuilder_.getMessage(); + } + } + public Builder setOfficialname(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (officialnameBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + officialname_ = value; + onChanged(); + } else { + officialnameBuilder_.setMessage(value); + } + bitField0_ |= 0x00000004; + return this; + } + public Builder setOfficialname( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (officialnameBuilder_ == null) { + officialname_ = builderForValue.build(); + onChanged(); + } else { + officialnameBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000004; + return this; + } + public Builder mergeOfficialname(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (officialnameBuilder_ == null) { + if (((bitField0_ & 0x00000004) == 0x00000004) && + officialname_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + officialname_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(officialname_).mergeFrom(value).buildPartial(); + } else { + officialname_ = value; + } + onChanged(); + } else { + officialnameBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000004; + return this; + } + public Builder clearOfficialname() { + if (officialnameBuilder_ == null) { + officialname_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + officialnameBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000004); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getOfficialnameBuilder() { + bitField0_ |= 0x00000004; + onChanged(); + return getOfficialnameFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOfficialnameOrBuilder() { + if (officialnameBuilder_ != null) { + return officialnameBuilder_.getMessageOrBuilder(); + } else { + return officialname_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getOfficialnameFieldBuilder() { + if (officialnameBuilder_ == null) { + officialnameBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + officialname_, + getParentForChildren(), + isClean()); + officialname_ = null; + } + return officialnameBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField englishname = 2; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField englishname_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> englishnameBuilder_; + public boolean hasEnglishname() { + return ((bitField0_ & 0x00000008) == 0x00000008); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEnglishname() { + if (englishnameBuilder_ == null) { + return englishname_; + } else { + return englishnameBuilder_.getMessage(); + } + } + public Builder setEnglishname(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (englishnameBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + englishname_ = value; + onChanged(); + } else { + englishnameBuilder_.setMessage(value); + } + bitField0_ |= 0x00000008; + return this; + } + public Builder setEnglishname( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (englishnameBuilder_ == null) { + englishname_ = builderForValue.build(); + onChanged(); + } else { + englishnameBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000008; + return this; + } + public Builder mergeEnglishname(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (englishnameBuilder_ == null) { + if (((bitField0_ & 0x00000008) == 0x00000008) && + englishname_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + englishname_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(englishname_).mergeFrom(value).buildPartial(); + } else { + englishname_ = value; + } + onChanged(); + } else { + englishnameBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000008; + return this; + } + public Builder clearEnglishname() { + if (englishnameBuilder_ == null) { + englishname_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + englishnameBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000008); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getEnglishnameBuilder() { + bitField0_ |= 0x00000008; + onChanged(); + return getEnglishnameFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEnglishnameOrBuilder() { + if (englishnameBuilder_ != null) { + return englishnameBuilder_.getMessageOrBuilder(); + } else { + return englishname_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getEnglishnameFieldBuilder() { + if (englishnameBuilder_ == null) { + englishnameBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + englishname_, + getParentForChildren(), + isClean()); + englishname_ = null; + } + return englishnameBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField websiteurl = 3; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField websiteurl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> websiteurlBuilder_; + public boolean hasWebsiteurl() { + return ((bitField0_ & 0x00000010) == 0x00000010); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getWebsiteurl() { + if (websiteurlBuilder_ == null) { + return websiteurl_; + } else { + return websiteurlBuilder_.getMessage(); + } + } + public Builder setWebsiteurl(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (websiteurlBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + websiteurl_ = value; + onChanged(); + } else { + websiteurlBuilder_.setMessage(value); + } + bitField0_ |= 0x00000010; + return this; + } + public Builder setWebsiteurl( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (websiteurlBuilder_ == null) { + websiteurl_ = builderForValue.build(); + onChanged(); + } else { + websiteurlBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000010; + return this; + } + public Builder mergeWebsiteurl(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (websiteurlBuilder_ == null) { + if (((bitField0_ & 0x00000010) == 0x00000010) && + websiteurl_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + websiteurl_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(websiteurl_).mergeFrom(value).buildPartial(); + } else { + websiteurl_ = value; + } + onChanged(); + } else { + websiteurlBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000010; + return this; + } + public Builder clearWebsiteurl() { + if (websiteurlBuilder_ == null) { + websiteurl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + websiteurlBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000010); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getWebsiteurlBuilder() { + bitField0_ |= 0x00000010; + onChanged(); + return getWebsiteurlFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getWebsiteurlOrBuilder() { + if (websiteurlBuilder_ != null) { + return websiteurlBuilder_.getMessageOrBuilder(); + } else { + return websiteurl_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getWebsiteurlFieldBuilder() { + if (websiteurlBuilder_ == null) { + websiteurlBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + websiteurl_, + getParentForChildren(), + isClean()); + websiteurl_ = null; + } + return websiteurlBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField logourl = 4; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField logourl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> logourlBuilder_; + public boolean hasLogourl() { + return ((bitField0_ & 0x00000020) == 0x00000020); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getLogourl() { + if (logourlBuilder_ == null) { + return logourl_; + } else { + return logourlBuilder_.getMessage(); + } + } + public Builder setLogourl(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (logourlBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + logourl_ = value; + onChanged(); + } else { + logourlBuilder_.setMessage(value); + } + bitField0_ |= 0x00000020; + return this; + } + public Builder setLogourl( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (logourlBuilder_ == null) { + logourl_ = builderForValue.build(); + onChanged(); + } else { + logourlBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000020; + return this; + } + public Builder mergeLogourl(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (logourlBuilder_ == null) { + if (((bitField0_ & 0x00000020) == 0x00000020) && + logourl_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + logourl_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(logourl_).mergeFrom(value).buildPartial(); + } else { + logourl_ = value; + } + onChanged(); + } else { + logourlBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000020; + return this; + } + public Builder clearLogourl() { + if (logourlBuilder_ == null) { + logourl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + logourlBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000020); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getLogourlBuilder() { + bitField0_ |= 0x00000020; + onChanged(); + return getLogourlFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getLogourlOrBuilder() { + if (logourlBuilder_ != null) { + return logourlBuilder_.getMessageOrBuilder(); + } else { + return logourl_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getLogourlFieldBuilder() { + if (logourlBuilder_ == null) { + logourlBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + logourl_, + getParentForChildren(), + isClean()); + logourl_ = null; + } + return logourlBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField contactemail = 5; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField contactemail_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> contactemailBuilder_; + public boolean hasContactemail() { + return ((bitField0_ & 0x00000040) == 0x00000040); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getContactemail() { + if (contactemailBuilder_ == null) { + return contactemail_; + } else { + return contactemailBuilder_.getMessage(); + } + } + public Builder setContactemail(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (contactemailBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + contactemail_ = value; + onChanged(); + } else { + contactemailBuilder_.setMessage(value); + } + bitField0_ |= 0x00000040; + return this; + } + public Builder setContactemail( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (contactemailBuilder_ == null) { + contactemail_ = builderForValue.build(); + onChanged(); + } else { + contactemailBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000040; + return this; + } + public Builder mergeContactemail(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (contactemailBuilder_ == null) { + if (((bitField0_ & 0x00000040) == 0x00000040) && + contactemail_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + contactemail_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(contactemail_).mergeFrom(value).buildPartial(); + } else { + contactemail_ = value; + } + onChanged(); + } else { + contactemailBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000040; + return this; + } + public Builder clearContactemail() { + if (contactemailBuilder_ == null) { + contactemail_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + contactemailBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000040); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getContactemailBuilder() { + bitField0_ |= 0x00000040; + onChanged(); + return getContactemailFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getContactemailOrBuilder() { + if (contactemailBuilder_ != null) { + return contactemailBuilder_.getMessageOrBuilder(); + } else { + return contactemail_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getContactemailFieldBuilder() { + if (contactemailBuilder_ == null) { + contactemailBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + contactemail_, + getParentForChildren(), + isClean()); + contactemail_ = null; + } + return contactemailBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField namespaceprefix = 7; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField namespaceprefix_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> namespaceprefixBuilder_; + public boolean hasNamespaceprefix() { + return ((bitField0_ & 0x00000080) == 0x00000080); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getNamespaceprefix() { + if (namespaceprefixBuilder_ == null) { + return namespaceprefix_; + } else { + return namespaceprefixBuilder_.getMessage(); + } + } + public Builder setNamespaceprefix(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (namespaceprefixBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + namespaceprefix_ = value; + onChanged(); + } else { + namespaceprefixBuilder_.setMessage(value); + } + bitField0_ |= 0x00000080; + return this; + } + public Builder setNamespaceprefix( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (namespaceprefixBuilder_ == null) { + namespaceprefix_ = builderForValue.build(); + onChanged(); + } else { + namespaceprefixBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000080; + return this; + } + public Builder mergeNamespaceprefix(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (namespaceprefixBuilder_ == null) { + if (((bitField0_ & 0x00000080) == 0x00000080) && + namespaceprefix_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + namespaceprefix_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(namespaceprefix_).mergeFrom(value).buildPartial(); + } else { + namespaceprefix_ = value; + } + onChanged(); + } else { + namespaceprefixBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000080; + return this; + } + public Builder clearNamespaceprefix() { + if (namespaceprefixBuilder_ == null) { + namespaceprefix_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + namespaceprefixBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000080); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getNamespaceprefixBuilder() { + bitField0_ |= 0x00000080; + onChanged(); + return getNamespaceprefixFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getNamespaceprefixOrBuilder() { + if (namespaceprefixBuilder_ != null) { + return namespaceprefixBuilder_.getMessageOrBuilder(); + } else { + return namespaceprefix_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getNamespaceprefixFieldBuilder() { + if (namespaceprefixBuilder_ == null) { + namespaceprefixBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + namespaceprefix_, + getParentForChildren(), + isClean()); + namespaceprefix_ = null; + } + return namespaceprefixBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField latitude = 18; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField latitude_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> latitudeBuilder_; + public boolean hasLatitude() { + return ((bitField0_ & 0x00000100) == 0x00000100); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getLatitude() { + if (latitudeBuilder_ == null) { + return latitude_; + } else { + return latitudeBuilder_.getMessage(); + } + } + public Builder setLatitude(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (latitudeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + latitude_ = value; + onChanged(); + } else { + latitudeBuilder_.setMessage(value); + } + bitField0_ |= 0x00000100; + return this; + } + public Builder setLatitude( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (latitudeBuilder_ == null) { + latitude_ = builderForValue.build(); + onChanged(); + } else { + latitudeBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000100; + return this; + } + public Builder mergeLatitude(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (latitudeBuilder_ == null) { + if (((bitField0_ & 0x00000100) == 0x00000100) && + latitude_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + latitude_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(latitude_).mergeFrom(value).buildPartial(); + } else { + latitude_ = value; + } + onChanged(); + } else { + latitudeBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000100; + return this; + } + public Builder clearLatitude() { + if (latitudeBuilder_ == null) { + latitude_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + latitudeBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000100); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getLatitudeBuilder() { + bitField0_ |= 0x00000100; + onChanged(); + return getLatitudeFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getLatitudeOrBuilder() { + if (latitudeBuilder_ != null) { + return latitudeBuilder_.getMessageOrBuilder(); + } else { + return latitude_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getLatitudeFieldBuilder() { + if (latitudeBuilder_ == null) { + latitudeBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + latitude_, + getParentForChildren(), + isClean()); + latitude_ = null; + } + return latitudeBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField longitude = 19; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField longitude_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> longitudeBuilder_; + public boolean hasLongitude() { + return ((bitField0_ & 0x00000200) == 0x00000200); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getLongitude() { + if (longitudeBuilder_ == null) { + return longitude_; + } else { + return longitudeBuilder_.getMessage(); + } + } + public Builder setLongitude(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (longitudeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + longitude_ = value; + onChanged(); + } else { + longitudeBuilder_.setMessage(value); + } + bitField0_ |= 0x00000200; + return this; + } + public Builder setLongitude( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (longitudeBuilder_ == null) { + longitude_ = builderForValue.build(); + onChanged(); + } else { + longitudeBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000200; + return this; + } + public Builder mergeLongitude(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (longitudeBuilder_ == null) { + if (((bitField0_ & 0x00000200) == 0x00000200) && + longitude_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + longitude_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(longitude_).mergeFrom(value).buildPartial(); + } else { + longitude_ = value; + } + onChanged(); + } else { + longitudeBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000200; + return this; + } + public Builder clearLongitude() { + if (longitudeBuilder_ == null) { + longitude_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + longitudeBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000200); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getLongitudeBuilder() { + bitField0_ |= 0x00000200; + onChanged(); + return getLongitudeFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getLongitudeOrBuilder() { + if (longitudeBuilder_ != null) { + return longitudeBuilder_.getMessageOrBuilder(); + } else { + return longitude_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getLongitudeFieldBuilder() { + if (longitudeBuilder_ == null) { + longitudeBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + longitude_, + getParentForChildren(), + isClean()); + longitude_ = null; + } + return longitudeBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField dateofvalidation = 20; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField dateofvalidation_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> dateofvalidationBuilder_; + public boolean hasDateofvalidation() { + return ((bitField0_ & 0x00000400) == 0x00000400); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getDateofvalidation() { + if (dateofvalidationBuilder_ == null) { + return dateofvalidation_; + } else { + return dateofvalidationBuilder_.getMessage(); + } + } + public Builder setDateofvalidation(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (dateofvalidationBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + dateofvalidation_ = value; + onChanged(); + } else { + dateofvalidationBuilder_.setMessage(value); + } + bitField0_ |= 0x00000400; + return this; + } + public Builder setDateofvalidation( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (dateofvalidationBuilder_ == null) { + dateofvalidation_ = builderForValue.build(); + onChanged(); + } else { + dateofvalidationBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000400; + return this; + } + public Builder mergeDateofvalidation(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (dateofvalidationBuilder_ == null) { + if (((bitField0_ & 0x00000400) == 0x00000400) && + dateofvalidation_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + dateofvalidation_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(dateofvalidation_).mergeFrom(value).buildPartial(); + } else { + dateofvalidation_ = value; + } + onChanged(); + } else { + dateofvalidationBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000400; + return this; + } + public Builder clearDateofvalidation() { + if (dateofvalidationBuilder_ == null) { + dateofvalidation_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + dateofvalidationBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000400); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getDateofvalidationBuilder() { + bitField0_ |= 0x00000400; + onChanged(); + return getDateofvalidationFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDateofvalidationOrBuilder() { + if (dateofvalidationBuilder_ != null) { + return dateofvalidationBuilder_.getMessageOrBuilder(); + } else { + return dateofvalidation_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getDateofvalidationFieldBuilder() { + if (dateofvalidationBuilder_ == null) { + dateofvalidationBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + dateofvalidation_, + getParentForChildren(), + isClean()); + dateofvalidation_ = null; + } + return dateofvalidationBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField description = 21; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField description_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> descriptionBuilder_; + public boolean hasDescription() { + return ((bitField0_ & 0x00000800) == 0x00000800); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getDescription() { + if (descriptionBuilder_ == null) { + return description_; + } else { + return descriptionBuilder_.getMessage(); + } + } + public Builder setDescription(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (descriptionBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + description_ = value; + onChanged(); + } else { + descriptionBuilder_.setMessage(value); + } + bitField0_ |= 0x00000800; + return this; + } + public Builder setDescription( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (descriptionBuilder_ == null) { + description_ = builderForValue.build(); + onChanged(); + } else { + descriptionBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000800; + return this; + } + public Builder mergeDescription(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (descriptionBuilder_ == null) { + if (((bitField0_ & 0x00000800) == 0x00000800) && + description_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + description_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(description_).mergeFrom(value).buildPartial(); + } else { + description_ = value; + } + onChanged(); + } else { + descriptionBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000800; + return this; + } + public Builder clearDescription() { + if (descriptionBuilder_ == null) { + description_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + descriptionBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000800); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getDescriptionBuilder() { + bitField0_ |= 0x00000800; + onChanged(); + return getDescriptionFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDescriptionOrBuilder() { + if (descriptionBuilder_ != null) { + return descriptionBuilder_.getMessageOrBuilder(); + } else { + return description_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getDescriptionFieldBuilder() { + if (descriptionBuilder_ == null) { + descriptionBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + description_, + getParentForChildren(), + isClean()); + description_ = null; + } + return descriptionBuilder_; + } + + // repeated .eu.dnetlib.data.proto.StructuredProperty subjects = 45; + private java.util.List subjects_ = + java.util.Collections.emptyList(); + private void ensureSubjectsIsMutable() { + if (!((bitField0_ & 0x00001000) == 0x00001000)) { + subjects_ = new java.util.ArrayList(subjects_); + bitField0_ |= 0x00001000; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder> subjectsBuilder_; + + public java.util.List getSubjectsList() { + if (subjectsBuilder_ == null) { + return java.util.Collections.unmodifiableList(subjects_); + } else { + return subjectsBuilder_.getMessageList(); + } + } + public int getSubjectsCount() { + if (subjectsBuilder_ == null) { + return subjects_.size(); + } else { + return subjectsBuilder_.getCount(); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty getSubjects(int index) { + if (subjectsBuilder_ == null) { + return subjects_.get(index); + } else { + return subjectsBuilder_.getMessage(index); + } + } + public Builder setSubjects( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty value) { + if (subjectsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureSubjectsIsMutable(); + subjects_.set(index, value); + onChanged(); + } else { + subjectsBuilder_.setMessage(index, value); + } + return this; + } + public Builder setSubjects( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder builderForValue) { + if (subjectsBuilder_ == null) { + ensureSubjectsIsMutable(); + subjects_.set(index, builderForValue.build()); + onChanged(); + } else { + subjectsBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + public Builder addSubjects(eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty value) { + if (subjectsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureSubjectsIsMutable(); + subjects_.add(value); + onChanged(); + } else { + subjectsBuilder_.addMessage(value); + } + return this; + } + public Builder addSubjects( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty value) { + if (subjectsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureSubjectsIsMutable(); + subjects_.add(index, value); + onChanged(); + } else { + subjectsBuilder_.addMessage(index, value); + } + return this; + } + public Builder addSubjects( + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder builderForValue) { + if (subjectsBuilder_ == null) { + ensureSubjectsIsMutable(); + subjects_.add(builderForValue.build()); + onChanged(); + } else { + subjectsBuilder_.addMessage(builderForValue.build()); + } + return this; + } + public Builder addSubjects( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder builderForValue) { + if (subjectsBuilder_ == null) { + ensureSubjectsIsMutable(); + subjects_.add(index, builderForValue.build()); + onChanged(); + } else { + subjectsBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + public Builder addAllSubjects( + java.lang.Iterable values) { + if (subjectsBuilder_ == null) { + ensureSubjectsIsMutable(); + super.addAll(values, subjects_); + onChanged(); + } else { + subjectsBuilder_.addAllMessages(values); + } + return this; + } + public Builder clearSubjects() { + if (subjectsBuilder_ == null) { + subjects_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00001000); + onChanged(); + } else { + subjectsBuilder_.clear(); + } + return this; + } + public Builder removeSubjects(int index) { + if (subjectsBuilder_ == null) { + ensureSubjectsIsMutable(); + subjects_.remove(index); + onChanged(); + } else { + subjectsBuilder_.remove(index); + } + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder getSubjectsBuilder( + int index) { + return getSubjectsFieldBuilder().getBuilder(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder getSubjectsOrBuilder( + int index) { + if (subjectsBuilder_ == null) { + return subjects_.get(index); } else { + return subjectsBuilder_.getMessageOrBuilder(index); + } + } + public java.util.List + getSubjectsOrBuilderList() { + if (subjectsBuilder_ != null) { + return subjectsBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(subjects_); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder addSubjectsBuilder() { + return getSubjectsFieldBuilder().addBuilder( + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.getDefaultInstance()); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder addSubjectsBuilder( + int index) { + return getSubjectsFieldBuilder().addBuilder( + index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.getDefaultInstance()); + } + public java.util.List + getSubjectsBuilderList() { + return getSubjectsFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder> + getSubjectsFieldBuilder() { + if (subjectsBuilder_ == null) { + subjectsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder>( + subjects_, + ((bitField0_ & 0x00001000) == 0x00001000), + getParentForChildren(), + isClean()); + subjects_ = null; + } + return subjectsBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField odnumberofitems = 9; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField odnumberofitems_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> odnumberofitemsBuilder_; + public boolean hasOdnumberofitems() { + return ((bitField0_ & 0x00002000) == 0x00002000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getOdnumberofitems() { + if (odnumberofitemsBuilder_ == null) { + return odnumberofitems_; + } else { + return odnumberofitemsBuilder_.getMessage(); + } + } + public Builder setOdnumberofitems(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (odnumberofitemsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + odnumberofitems_ = value; + onChanged(); + } else { + odnumberofitemsBuilder_.setMessage(value); + } + bitField0_ |= 0x00002000; + return this; + } + public Builder setOdnumberofitems( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (odnumberofitemsBuilder_ == null) { + odnumberofitems_ = builderForValue.build(); + onChanged(); + } else { + odnumberofitemsBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00002000; + return this; + } + public Builder mergeOdnumberofitems(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (odnumberofitemsBuilder_ == null) { + if (((bitField0_ & 0x00002000) == 0x00002000) && + odnumberofitems_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + odnumberofitems_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(odnumberofitems_).mergeFrom(value).buildPartial(); + } else { + odnumberofitems_ = value; + } + onChanged(); + } else { + odnumberofitemsBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00002000; + return this; + } + public Builder clearOdnumberofitems() { + if (odnumberofitemsBuilder_ == null) { + odnumberofitems_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + odnumberofitemsBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00002000); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getOdnumberofitemsBuilder() { + bitField0_ |= 0x00002000; + onChanged(); + return getOdnumberofitemsFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOdnumberofitemsOrBuilder() { + if (odnumberofitemsBuilder_ != null) { + return odnumberofitemsBuilder_.getMessageOrBuilder(); + } else { + return odnumberofitems_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getOdnumberofitemsFieldBuilder() { + if (odnumberofitemsBuilder_ == null) { + odnumberofitemsBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + odnumberofitems_, + getParentForChildren(), + isClean()); + odnumberofitems_ = null; + } + return odnumberofitemsBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField odnumberofitemsdate = 10; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField odnumberofitemsdate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> odnumberofitemsdateBuilder_; + public boolean hasOdnumberofitemsdate() { + return ((bitField0_ & 0x00004000) == 0x00004000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getOdnumberofitemsdate() { + if (odnumberofitemsdateBuilder_ == null) { + return odnumberofitemsdate_; + } else { + return odnumberofitemsdateBuilder_.getMessage(); + } + } + public Builder setOdnumberofitemsdate(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (odnumberofitemsdateBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + odnumberofitemsdate_ = value; + onChanged(); + } else { + odnumberofitemsdateBuilder_.setMessage(value); + } + bitField0_ |= 0x00004000; + return this; + } + public Builder setOdnumberofitemsdate( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (odnumberofitemsdateBuilder_ == null) { + odnumberofitemsdate_ = builderForValue.build(); + onChanged(); + } else { + odnumberofitemsdateBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00004000; + return this; + } + public Builder mergeOdnumberofitemsdate(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (odnumberofitemsdateBuilder_ == null) { + if (((bitField0_ & 0x00004000) == 0x00004000) && + odnumberofitemsdate_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + odnumberofitemsdate_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(odnumberofitemsdate_).mergeFrom(value).buildPartial(); + } else { + odnumberofitemsdate_ = value; + } + onChanged(); + } else { + odnumberofitemsdateBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00004000; + return this; + } + public Builder clearOdnumberofitemsdate() { + if (odnumberofitemsdateBuilder_ == null) { + odnumberofitemsdate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + odnumberofitemsdateBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00004000); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getOdnumberofitemsdateBuilder() { + bitField0_ |= 0x00004000; + onChanged(); + return getOdnumberofitemsdateFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOdnumberofitemsdateOrBuilder() { + if (odnumberofitemsdateBuilder_ != null) { + return odnumberofitemsdateBuilder_.getMessageOrBuilder(); + } else { + return odnumberofitemsdate_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getOdnumberofitemsdateFieldBuilder() { + if (odnumberofitemsdateBuilder_ == null) { + odnumberofitemsdateBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + odnumberofitemsdate_, + getParentForChildren(), + isClean()); + odnumberofitemsdate_ = null; + } + return odnumberofitemsdateBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField odpolicies = 12; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField odpolicies_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> odpoliciesBuilder_; + public boolean hasOdpolicies() { + return ((bitField0_ & 0x00008000) == 0x00008000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getOdpolicies() { + if (odpoliciesBuilder_ == null) { + return odpolicies_; + } else { + return odpoliciesBuilder_.getMessage(); + } + } + public Builder setOdpolicies(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (odpoliciesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + odpolicies_ = value; + onChanged(); + } else { + odpoliciesBuilder_.setMessage(value); + } + bitField0_ |= 0x00008000; + return this; + } + public Builder setOdpolicies( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (odpoliciesBuilder_ == null) { + odpolicies_ = builderForValue.build(); + onChanged(); + } else { + odpoliciesBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00008000; + return this; + } + public Builder mergeOdpolicies(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (odpoliciesBuilder_ == null) { + if (((bitField0_ & 0x00008000) == 0x00008000) && + odpolicies_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + odpolicies_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(odpolicies_).mergeFrom(value).buildPartial(); + } else { + odpolicies_ = value; + } + onChanged(); + } else { + odpoliciesBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00008000; + return this; + } + public Builder clearOdpolicies() { + if (odpoliciesBuilder_ == null) { + odpolicies_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + odpoliciesBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00008000); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getOdpoliciesBuilder() { + bitField0_ |= 0x00008000; + onChanged(); + return getOdpoliciesFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOdpoliciesOrBuilder() { + if (odpoliciesBuilder_ != null) { + return odpoliciesBuilder_.getMessageOrBuilder(); + } else { + return odpolicies_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getOdpoliciesFieldBuilder() { + if (odpoliciesBuilder_ == null) { + odpoliciesBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + odpolicies_, + getParentForChildren(), + isClean()); + odpolicies_ = null; + } + return odpoliciesBuilder_; + } + + // repeated .eu.dnetlib.data.proto.StringField odlanguages = 13; + private java.util.List odlanguages_ = + java.util.Collections.emptyList(); + private void ensureOdlanguagesIsMutable() { + if (!((bitField0_ & 0x00010000) == 0x00010000)) { + odlanguages_ = new java.util.ArrayList(odlanguages_); + bitField0_ |= 0x00010000; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> odlanguagesBuilder_; + + public java.util.List getOdlanguagesList() { + if (odlanguagesBuilder_ == null) { + return java.util.Collections.unmodifiableList(odlanguages_); + } else { + return odlanguagesBuilder_.getMessageList(); + } + } + public int getOdlanguagesCount() { + if (odlanguagesBuilder_ == null) { + return odlanguages_.size(); + } else { + return odlanguagesBuilder_.getCount(); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getOdlanguages(int index) { + if (odlanguagesBuilder_ == null) { + return odlanguages_.get(index); + } else { + return odlanguagesBuilder_.getMessage(index); + } + } + public Builder setOdlanguages( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (odlanguagesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureOdlanguagesIsMutable(); + odlanguages_.set(index, value); + onChanged(); + } else { + odlanguagesBuilder_.setMessage(index, value); + } + return this; + } + public Builder setOdlanguages( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (odlanguagesBuilder_ == null) { + ensureOdlanguagesIsMutable(); + odlanguages_.set(index, builderForValue.build()); + onChanged(); + } else { + odlanguagesBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + public Builder addOdlanguages(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (odlanguagesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureOdlanguagesIsMutable(); + odlanguages_.add(value); + onChanged(); + } else { + odlanguagesBuilder_.addMessage(value); + } + return this; + } + public Builder addOdlanguages( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (odlanguagesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureOdlanguagesIsMutable(); + odlanguages_.add(index, value); + onChanged(); + } else { + odlanguagesBuilder_.addMessage(index, value); + } + return this; + } + public Builder addOdlanguages( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (odlanguagesBuilder_ == null) { + ensureOdlanguagesIsMutable(); + odlanguages_.add(builderForValue.build()); + onChanged(); + } else { + odlanguagesBuilder_.addMessage(builderForValue.build()); + } + return this; + } + public Builder addOdlanguages( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (odlanguagesBuilder_ == null) { + ensureOdlanguagesIsMutable(); + odlanguages_.add(index, builderForValue.build()); + onChanged(); + } else { + odlanguagesBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + public Builder addAllOdlanguages( + java.lang.Iterable values) { + if (odlanguagesBuilder_ == null) { + ensureOdlanguagesIsMutable(); + super.addAll(values, odlanguages_); + onChanged(); + } else { + odlanguagesBuilder_.addAllMessages(values); + } + return this; + } + public Builder clearOdlanguages() { + if (odlanguagesBuilder_ == null) { + odlanguages_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00010000); + onChanged(); + } else { + odlanguagesBuilder_.clear(); + } + return this; + } + public Builder removeOdlanguages(int index) { + if (odlanguagesBuilder_ == null) { + ensureOdlanguagesIsMutable(); + odlanguages_.remove(index); + onChanged(); + } else { + odlanguagesBuilder_.remove(index); + } + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getOdlanguagesBuilder( + int index) { + return getOdlanguagesFieldBuilder().getBuilder(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOdlanguagesOrBuilder( + int index) { + if (odlanguagesBuilder_ == null) { + return odlanguages_.get(index); } else { + return odlanguagesBuilder_.getMessageOrBuilder(index); + } + } + public java.util.List + getOdlanguagesOrBuilderList() { + if (odlanguagesBuilder_ != null) { + return odlanguagesBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(odlanguages_); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addOdlanguagesBuilder() { + return getOdlanguagesFieldBuilder().addBuilder( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addOdlanguagesBuilder( + int index) { + return getOdlanguagesFieldBuilder().addBuilder( + index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); + } + public java.util.List + getOdlanguagesBuilderList() { + return getOdlanguagesFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getOdlanguagesFieldBuilder() { + if (odlanguagesBuilder_ == null) { + odlanguagesBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + odlanguages_, + ((bitField0_ & 0x00010000) == 0x00010000), + getParentForChildren(), + isClean()); + odlanguages_ = null; + } + return odlanguagesBuilder_; + } + + // repeated .eu.dnetlib.data.proto.StringField odcontenttypes = 14; + private java.util.List odcontenttypes_ = + java.util.Collections.emptyList(); + private void ensureOdcontenttypesIsMutable() { + if (!((bitField0_ & 0x00020000) == 0x00020000)) { + odcontenttypes_ = new java.util.ArrayList(odcontenttypes_); + bitField0_ |= 0x00020000; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> odcontenttypesBuilder_; + + public java.util.List getOdcontenttypesList() { + if (odcontenttypesBuilder_ == null) { + return java.util.Collections.unmodifiableList(odcontenttypes_); + } else { + return odcontenttypesBuilder_.getMessageList(); + } + } + public int getOdcontenttypesCount() { + if (odcontenttypesBuilder_ == null) { + return odcontenttypes_.size(); + } else { + return odcontenttypesBuilder_.getCount(); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getOdcontenttypes(int index) { + if (odcontenttypesBuilder_ == null) { + return odcontenttypes_.get(index); + } else { + return odcontenttypesBuilder_.getMessage(index); + } + } + public Builder setOdcontenttypes( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (odcontenttypesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureOdcontenttypesIsMutable(); + odcontenttypes_.set(index, value); + onChanged(); + } else { + odcontenttypesBuilder_.setMessage(index, value); + } + return this; + } + public Builder setOdcontenttypes( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (odcontenttypesBuilder_ == null) { + ensureOdcontenttypesIsMutable(); + odcontenttypes_.set(index, builderForValue.build()); + onChanged(); + } else { + odcontenttypesBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + public Builder addOdcontenttypes(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (odcontenttypesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureOdcontenttypesIsMutable(); + odcontenttypes_.add(value); + onChanged(); + } else { + odcontenttypesBuilder_.addMessage(value); + } + return this; + } + public Builder addOdcontenttypes( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (odcontenttypesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureOdcontenttypesIsMutable(); + odcontenttypes_.add(index, value); + onChanged(); + } else { + odcontenttypesBuilder_.addMessage(index, value); + } + return this; + } + public Builder addOdcontenttypes( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (odcontenttypesBuilder_ == null) { + ensureOdcontenttypesIsMutable(); + odcontenttypes_.add(builderForValue.build()); + onChanged(); + } else { + odcontenttypesBuilder_.addMessage(builderForValue.build()); + } + return this; + } + public Builder addOdcontenttypes( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (odcontenttypesBuilder_ == null) { + ensureOdcontenttypesIsMutable(); + odcontenttypes_.add(index, builderForValue.build()); + onChanged(); + } else { + odcontenttypesBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + public Builder addAllOdcontenttypes( + java.lang.Iterable values) { + if (odcontenttypesBuilder_ == null) { + ensureOdcontenttypesIsMutable(); + super.addAll(values, odcontenttypes_); + onChanged(); + } else { + odcontenttypesBuilder_.addAllMessages(values); + } + return this; + } + public Builder clearOdcontenttypes() { + if (odcontenttypesBuilder_ == null) { + odcontenttypes_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00020000); + onChanged(); + } else { + odcontenttypesBuilder_.clear(); + } + return this; + } + public Builder removeOdcontenttypes(int index) { + if (odcontenttypesBuilder_ == null) { + ensureOdcontenttypesIsMutable(); + odcontenttypes_.remove(index); + onChanged(); + } else { + odcontenttypesBuilder_.remove(index); + } + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getOdcontenttypesBuilder( + int index) { + return getOdcontenttypesFieldBuilder().getBuilder(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOdcontenttypesOrBuilder( + int index) { + if (odcontenttypesBuilder_ == null) { + return odcontenttypes_.get(index); } else { + return odcontenttypesBuilder_.getMessageOrBuilder(index); + } + } + public java.util.List + getOdcontenttypesOrBuilderList() { + if (odcontenttypesBuilder_ != null) { + return odcontenttypesBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(odcontenttypes_); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addOdcontenttypesBuilder() { + return getOdcontenttypesFieldBuilder().addBuilder( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addOdcontenttypesBuilder( + int index) { + return getOdcontenttypesFieldBuilder().addBuilder( + index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); + } + public java.util.List + getOdcontenttypesBuilderList() { + return getOdcontenttypesFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getOdcontenttypesFieldBuilder() { + if (odcontenttypesBuilder_ == null) { + odcontenttypesBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + odcontenttypes_, + ((bitField0_ & 0x00020000) == 0x00020000), + getParentForChildren(), + isClean()); + odcontenttypes_ = null; + } + return odcontenttypesBuilder_; + } + + // repeated .eu.dnetlib.data.proto.StringField accessinfopackage = 6; + private java.util.List accessinfopackage_ = + java.util.Collections.emptyList(); + private void ensureAccessinfopackageIsMutable() { + if (!((bitField0_ & 0x00040000) == 0x00040000)) { + accessinfopackage_ = new java.util.ArrayList(accessinfopackage_); + bitField0_ |= 0x00040000; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> accessinfopackageBuilder_; + + public java.util.List getAccessinfopackageList() { + if (accessinfopackageBuilder_ == null) { + return java.util.Collections.unmodifiableList(accessinfopackage_); + } else { + return accessinfopackageBuilder_.getMessageList(); + } + } + public int getAccessinfopackageCount() { + if (accessinfopackageBuilder_ == null) { + return accessinfopackage_.size(); + } else { + return accessinfopackageBuilder_.getCount(); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getAccessinfopackage(int index) { + if (accessinfopackageBuilder_ == null) { + return accessinfopackage_.get(index); + } else { + return accessinfopackageBuilder_.getMessage(index); + } + } + public Builder setAccessinfopackage( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (accessinfopackageBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureAccessinfopackageIsMutable(); + accessinfopackage_.set(index, value); + onChanged(); + } else { + accessinfopackageBuilder_.setMessage(index, value); + } + return this; + } + public Builder setAccessinfopackage( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (accessinfopackageBuilder_ == null) { + ensureAccessinfopackageIsMutable(); + accessinfopackage_.set(index, builderForValue.build()); + onChanged(); + } else { + accessinfopackageBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + public Builder addAccessinfopackage(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (accessinfopackageBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureAccessinfopackageIsMutable(); + accessinfopackage_.add(value); + onChanged(); + } else { + accessinfopackageBuilder_.addMessage(value); + } + return this; + } + public Builder addAccessinfopackage( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (accessinfopackageBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureAccessinfopackageIsMutable(); + accessinfopackage_.add(index, value); + onChanged(); + } else { + accessinfopackageBuilder_.addMessage(index, value); + } + return this; + } + public Builder addAccessinfopackage( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (accessinfopackageBuilder_ == null) { + ensureAccessinfopackageIsMutable(); + accessinfopackage_.add(builderForValue.build()); + onChanged(); + } else { + accessinfopackageBuilder_.addMessage(builderForValue.build()); + } + return this; + } + public Builder addAccessinfopackage( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (accessinfopackageBuilder_ == null) { + ensureAccessinfopackageIsMutable(); + accessinfopackage_.add(index, builderForValue.build()); + onChanged(); + } else { + accessinfopackageBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + public Builder addAllAccessinfopackage( + java.lang.Iterable values) { + if (accessinfopackageBuilder_ == null) { + ensureAccessinfopackageIsMutable(); + super.addAll(values, accessinfopackage_); + onChanged(); + } else { + accessinfopackageBuilder_.addAllMessages(values); + } + return this; + } + public Builder clearAccessinfopackage() { + if (accessinfopackageBuilder_ == null) { + accessinfopackage_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00040000); + onChanged(); + } else { + accessinfopackageBuilder_.clear(); + } + return this; + } + public Builder removeAccessinfopackage(int index) { + if (accessinfopackageBuilder_ == null) { + ensureAccessinfopackageIsMutable(); + accessinfopackage_.remove(index); + onChanged(); + } else { + accessinfopackageBuilder_.remove(index); + } + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getAccessinfopackageBuilder( + int index) { + return getAccessinfopackageFieldBuilder().getBuilder(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getAccessinfopackageOrBuilder( + int index) { + if (accessinfopackageBuilder_ == null) { + return accessinfopackage_.get(index); } else { + return accessinfopackageBuilder_.getMessageOrBuilder(index); + } + } + public java.util.List + getAccessinfopackageOrBuilderList() { + if (accessinfopackageBuilder_ != null) { + return accessinfopackageBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(accessinfopackage_); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addAccessinfopackageBuilder() { + return getAccessinfopackageFieldBuilder().addBuilder( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addAccessinfopackageBuilder( + int index) { + return getAccessinfopackageFieldBuilder().addBuilder( + index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); + } + public java.util.List + getAccessinfopackageBuilderList() { + return getAccessinfopackageFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getAccessinfopackageFieldBuilder() { + if (accessinfopackageBuilder_ == null) { + accessinfopackageBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + accessinfopackage_, + ((bitField0_ & 0x00040000) == 0x00040000), + getParentForChildren(), + isClean()); + accessinfopackage_ = null; + } + return accessinfopackageBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField releasestartdate = 31; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField releasestartdate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> releasestartdateBuilder_; + public boolean hasReleasestartdate() { + return ((bitField0_ & 0x00080000) == 0x00080000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getReleasestartdate() { + if (releasestartdateBuilder_ == null) { + return releasestartdate_; + } else { + return releasestartdateBuilder_.getMessage(); + } + } + public Builder setReleasestartdate(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (releasestartdateBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + releasestartdate_ = value; + onChanged(); + } else { + releasestartdateBuilder_.setMessage(value); + } + bitField0_ |= 0x00080000; + return this; + } + public Builder setReleasestartdate( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (releasestartdateBuilder_ == null) { + releasestartdate_ = builderForValue.build(); + onChanged(); + } else { + releasestartdateBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00080000; + return this; + } + public Builder mergeReleasestartdate(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (releasestartdateBuilder_ == null) { + if (((bitField0_ & 0x00080000) == 0x00080000) && + releasestartdate_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + releasestartdate_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(releasestartdate_).mergeFrom(value).buildPartial(); + } else { + releasestartdate_ = value; + } + onChanged(); + } else { + releasestartdateBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00080000; + return this; + } + public Builder clearReleasestartdate() { + if (releasestartdateBuilder_ == null) { + releasestartdate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + releasestartdateBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00080000); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getReleasestartdateBuilder() { + bitField0_ |= 0x00080000; + onChanged(); + return getReleasestartdateFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getReleasestartdateOrBuilder() { + if (releasestartdateBuilder_ != null) { + return releasestartdateBuilder_.getMessageOrBuilder(); + } else { + return releasestartdate_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getReleasestartdateFieldBuilder() { + if (releasestartdateBuilder_ == null) { + releasestartdateBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + releasestartdate_, + getParentForChildren(), + isClean()); + releasestartdate_ = null; + } + return releasestartdateBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField releaseenddate = 32; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField releaseenddate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> releaseenddateBuilder_; + public boolean hasReleaseenddate() { + return ((bitField0_ & 0x00100000) == 0x00100000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getReleaseenddate() { + if (releaseenddateBuilder_ == null) { + return releaseenddate_; + } else { + return releaseenddateBuilder_.getMessage(); + } + } + public Builder setReleaseenddate(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (releaseenddateBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + releaseenddate_ = value; + onChanged(); + } else { + releaseenddateBuilder_.setMessage(value); + } + bitField0_ |= 0x00100000; + return this; + } + public Builder setReleaseenddate( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (releaseenddateBuilder_ == null) { + releaseenddate_ = builderForValue.build(); + onChanged(); + } else { + releaseenddateBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00100000; + return this; + } + public Builder mergeReleaseenddate(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (releaseenddateBuilder_ == null) { + if (((bitField0_ & 0x00100000) == 0x00100000) && + releaseenddate_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + releaseenddate_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(releaseenddate_).mergeFrom(value).buildPartial(); + } else { + releaseenddate_ = value; + } + onChanged(); + } else { + releaseenddateBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00100000; + return this; + } + public Builder clearReleaseenddate() { + if (releaseenddateBuilder_ == null) { + releaseenddate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + releaseenddateBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00100000); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getReleaseenddateBuilder() { + bitField0_ |= 0x00100000; + onChanged(); + return getReleaseenddateFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getReleaseenddateOrBuilder() { + if (releaseenddateBuilder_ != null) { + return releaseenddateBuilder_.getMessageOrBuilder(); + } else { + return releaseenddate_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getReleaseenddateFieldBuilder() { + if (releaseenddateBuilder_ == null) { + releaseenddateBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + releaseenddate_, + getParentForChildren(), + isClean()); + releaseenddate_ = null; + } + return releaseenddateBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField missionstatementurl = 33; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField missionstatementurl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> missionstatementurlBuilder_; + public boolean hasMissionstatementurl() { + return ((bitField0_ & 0x00200000) == 0x00200000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getMissionstatementurl() { + if (missionstatementurlBuilder_ == null) { + return missionstatementurl_; + } else { + return missionstatementurlBuilder_.getMessage(); + } + } + public Builder setMissionstatementurl(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (missionstatementurlBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + missionstatementurl_ = value; + onChanged(); + } else { + missionstatementurlBuilder_.setMessage(value); + } + bitField0_ |= 0x00200000; + return this; + } + public Builder setMissionstatementurl( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (missionstatementurlBuilder_ == null) { + missionstatementurl_ = builderForValue.build(); + onChanged(); + } else { + missionstatementurlBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00200000; + return this; + } + public Builder mergeMissionstatementurl(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (missionstatementurlBuilder_ == null) { + if (((bitField0_ & 0x00200000) == 0x00200000) && + missionstatementurl_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + missionstatementurl_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(missionstatementurl_).mergeFrom(value).buildPartial(); + } else { + missionstatementurl_ = value; + } + onChanged(); + } else { + missionstatementurlBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00200000; + return this; + } + public Builder clearMissionstatementurl() { + if (missionstatementurlBuilder_ == null) { + missionstatementurl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + missionstatementurlBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00200000); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getMissionstatementurlBuilder() { + bitField0_ |= 0x00200000; + onChanged(); + return getMissionstatementurlFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getMissionstatementurlOrBuilder() { + if (missionstatementurlBuilder_ != null) { + return missionstatementurlBuilder_.getMessageOrBuilder(); + } else { + return missionstatementurl_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getMissionstatementurlFieldBuilder() { + if (missionstatementurlBuilder_ == null) { + missionstatementurlBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + missionstatementurl_, + getParentForChildren(), + isClean()); + missionstatementurl_ = null; + } + return missionstatementurlBuilder_; + } + + // optional .eu.dnetlib.data.proto.BoolField dataprovider = 34; + private eu.dnetlib.data.proto.FieldTypeProtos.BoolField dataprovider_ = eu.dnetlib.data.proto.FieldTypeProtos.BoolField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.BoolField, eu.dnetlib.data.proto.FieldTypeProtos.BoolField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.BoolFieldOrBuilder> dataproviderBuilder_; + public boolean hasDataprovider() { + return ((bitField0_ & 0x00400000) == 0x00400000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.BoolField getDataprovider() { + if (dataproviderBuilder_ == null) { + return dataprovider_; + } else { + return dataproviderBuilder_.getMessage(); + } + } + public Builder setDataprovider(eu.dnetlib.data.proto.FieldTypeProtos.BoolField value) { + if (dataproviderBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + dataprovider_ = value; + onChanged(); + } else { + dataproviderBuilder_.setMessage(value); + } + bitField0_ |= 0x00400000; + return this; + } + public Builder setDataprovider( + eu.dnetlib.data.proto.FieldTypeProtos.BoolField.Builder builderForValue) { + if (dataproviderBuilder_ == null) { + dataprovider_ = builderForValue.build(); + onChanged(); + } else { + dataproviderBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00400000; + return this; + } + public Builder mergeDataprovider(eu.dnetlib.data.proto.FieldTypeProtos.BoolField value) { + if (dataproviderBuilder_ == null) { + if (((bitField0_ & 0x00400000) == 0x00400000) && + dataprovider_ != eu.dnetlib.data.proto.FieldTypeProtos.BoolField.getDefaultInstance()) { + dataprovider_ = + eu.dnetlib.data.proto.FieldTypeProtos.BoolField.newBuilder(dataprovider_).mergeFrom(value).buildPartial(); + } else { + dataprovider_ = value; + } + onChanged(); + } else { + dataproviderBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00400000; + return this; + } + public Builder clearDataprovider() { + if (dataproviderBuilder_ == null) { + dataprovider_ = eu.dnetlib.data.proto.FieldTypeProtos.BoolField.getDefaultInstance(); + onChanged(); + } else { + dataproviderBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00400000); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.BoolField.Builder getDataproviderBuilder() { + bitField0_ |= 0x00400000; + onChanged(); + return getDataproviderFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.BoolFieldOrBuilder getDataproviderOrBuilder() { + if (dataproviderBuilder_ != null) { + return dataproviderBuilder_.getMessageOrBuilder(); + } else { + return dataprovider_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.BoolField, eu.dnetlib.data.proto.FieldTypeProtos.BoolField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.BoolFieldOrBuilder> + getDataproviderFieldBuilder() { + if (dataproviderBuilder_ == null) { + dataproviderBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.BoolField, eu.dnetlib.data.proto.FieldTypeProtos.BoolField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.BoolFieldOrBuilder>( + dataprovider_, + getParentForChildren(), + isClean()); + dataprovider_ = null; + } + return dataproviderBuilder_; + } + + // optional .eu.dnetlib.data.proto.BoolField serviceprovider = 35; + private eu.dnetlib.data.proto.FieldTypeProtos.BoolField serviceprovider_ = eu.dnetlib.data.proto.FieldTypeProtos.BoolField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.BoolField, eu.dnetlib.data.proto.FieldTypeProtos.BoolField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.BoolFieldOrBuilder> serviceproviderBuilder_; + public boolean hasServiceprovider() { + return ((bitField0_ & 0x00800000) == 0x00800000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.BoolField getServiceprovider() { + if (serviceproviderBuilder_ == null) { + return serviceprovider_; + } else { + return serviceproviderBuilder_.getMessage(); + } + } + public Builder setServiceprovider(eu.dnetlib.data.proto.FieldTypeProtos.BoolField value) { + if (serviceproviderBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + serviceprovider_ = value; + onChanged(); + } else { + serviceproviderBuilder_.setMessage(value); + } + bitField0_ |= 0x00800000; + return this; + } + public Builder setServiceprovider( + eu.dnetlib.data.proto.FieldTypeProtos.BoolField.Builder builderForValue) { + if (serviceproviderBuilder_ == null) { + serviceprovider_ = builderForValue.build(); + onChanged(); + } else { + serviceproviderBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00800000; + return this; + } + public Builder mergeServiceprovider(eu.dnetlib.data.proto.FieldTypeProtos.BoolField value) { + if (serviceproviderBuilder_ == null) { + if (((bitField0_ & 0x00800000) == 0x00800000) && + serviceprovider_ != eu.dnetlib.data.proto.FieldTypeProtos.BoolField.getDefaultInstance()) { + serviceprovider_ = + eu.dnetlib.data.proto.FieldTypeProtos.BoolField.newBuilder(serviceprovider_).mergeFrom(value).buildPartial(); + } else { + serviceprovider_ = value; + } + onChanged(); + } else { + serviceproviderBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00800000; + return this; + } + public Builder clearServiceprovider() { + if (serviceproviderBuilder_ == null) { + serviceprovider_ = eu.dnetlib.data.proto.FieldTypeProtos.BoolField.getDefaultInstance(); + onChanged(); + } else { + serviceproviderBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00800000); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.BoolField.Builder getServiceproviderBuilder() { + bitField0_ |= 0x00800000; + onChanged(); + return getServiceproviderFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.BoolFieldOrBuilder getServiceproviderOrBuilder() { + if (serviceproviderBuilder_ != null) { + return serviceproviderBuilder_.getMessageOrBuilder(); + } else { + return serviceprovider_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.BoolField, eu.dnetlib.data.proto.FieldTypeProtos.BoolField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.BoolFieldOrBuilder> + getServiceproviderFieldBuilder() { + if (serviceproviderBuilder_ == null) { + serviceproviderBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.BoolField, eu.dnetlib.data.proto.FieldTypeProtos.BoolField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.BoolFieldOrBuilder>( + serviceprovider_, + getParentForChildren(), + isClean()); + serviceprovider_ = null; + } + return serviceproviderBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField databaseaccesstype = 36; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField databaseaccesstype_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> databaseaccesstypeBuilder_; + public boolean hasDatabaseaccesstype() { + return ((bitField0_ & 0x01000000) == 0x01000000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getDatabaseaccesstype() { + if (databaseaccesstypeBuilder_ == null) { + return databaseaccesstype_; + } else { + return databaseaccesstypeBuilder_.getMessage(); + } + } + public Builder setDatabaseaccesstype(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (databaseaccesstypeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + databaseaccesstype_ = value; + onChanged(); + } else { + databaseaccesstypeBuilder_.setMessage(value); + } + bitField0_ |= 0x01000000; + return this; + } + public Builder setDatabaseaccesstype( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (databaseaccesstypeBuilder_ == null) { + databaseaccesstype_ = builderForValue.build(); + onChanged(); + } else { + databaseaccesstypeBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x01000000; + return this; + } + public Builder mergeDatabaseaccesstype(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (databaseaccesstypeBuilder_ == null) { + if (((bitField0_ & 0x01000000) == 0x01000000) && + databaseaccesstype_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + databaseaccesstype_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(databaseaccesstype_).mergeFrom(value).buildPartial(); + } else { + databaseaccesstype_ = value; + } + onChanged(); + } else { + databaseaccesstypeBuilder_.mergeFrom(value); + } + bitField0_ |= 0x01000000; + return this; + } + public Builder clearDatabaseaccesstype() { + if (databaseaccesstypeBuilder_ == null) { + databaseaccesstype_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + databaseaccesstypeBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x01000000); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getDatabaseaccesstypeBuilder() { + bitField0_ |= 0x01000000; + onChanged(); + return getDatabaseaccesstypeFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDatabaseaccesstypeOrBuilder() { + if (databaseaccesstypeBuilder_ != null) { + return databaseaccesstypeBuilder_.getMessageOrBuilder(); + } else { + return databaseaccesstype_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getDatabaseaccesstypeFieldBuilder() { + if (databaseaccesstypeBuilder_ == null) { + databaseaccesstypeBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + databaseaccesstype_, + getParentForChildren(), + isClean()); + databaseaccesstype_ = null; + } + return databaseaccesstypeBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField datauploadtype = 37; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField datauploadtype_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> datauploadtypeBuilder_; + public boolean hasDatauploadtype() { + return ((bitField0_ & 0x02000000) == 0x02000000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getDatauploadtype() { + if (datauploadtypeBuilder_ == null) { + return datauploadtype_; + } else { + return datauploadtypeBuilder_.getMessage(); + } + } + public Builder setDatauploadtype(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (datauploadtypeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + datauploadtype_ = value; + onChanged(); + } else { + datauploadtypeBuilder_.setMessage(value); + } + bitField0_ |= 0x02000000; + return this; + } + public Builder setDatauploadtype( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (datauploadtypeBuilder_ == null) { + datauploadtype_ = builderForValue.build(); + onChanged(); + } else { + datauploadtypeBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x02000000; + return this; + } + public Builder mergeDatauploadtype(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (datauploadtypeBuilder_ == null) { + if (((bitField0_ & 0x02000000) == 0x02000000) && + datauploadtype_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + datauploadtype_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(datauploadtype_).mergeFrom(value).buildPartial(); + } else { + datauploadtype_ = value; + } + onChanged(); + } else { + datauploadtypeBuilder_.mergeFrom(value); + } + bitField0_ |= 0x02000000; + return this; + } + public Builder clearDatauploadtype() { + if (datauploadtypeBuilder_ == null) { + datauploadtype_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + datauploadtypeBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x02000000); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getDatauploadtypeBuilder() { + bitField0_ |= 0x02000000; + onChanged(); + return getDatauploadtypeFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDatauploadtypeOrBuilder() { + if (datauploadtypeBuilder_ != null) { + return datauploadtypeBuilder_.getMessageOrBuilder(); + } else { + return datauploadtype_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getDatauploadtypeFieldBuilder() { + if (datauploadtypeBuilder_ == null) { + datauploadtypeBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + datauploadtype_, + getParentForChildren(), + isClean()); + datauploadtype_ = null; + } + return datauploadtypeBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField databaseaccessrestriction = 38; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField databaseaccessrestriction_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> databaseaccessrestrictionBuilder_; + public boolean hasDatabaseaccessrestriction() { + return ((bitField0_ & 0x04000000) == 0x04000000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getDatabaseaccessrestriction() { + if (databaseaccessrestrictionBuilder_ == null) { + return databaseaccessrestriction_; + } else { + return databaseaccessrestrictionBuilder_.getMessage(); + } + } + public Builder setDatabaseaccessrestriction(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (databaseaccessrestrictionBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + databaseaccessrestriction_ = value; + onChanged(); + } else { + databaseaccessrestrictionBuilder_.setMessage(value); + } + bitField0_ |= 0x04000000; + return this; + } + public Builder setDatabaseaccessrestriction( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (databaseaccessrestrictionBuilder_ == null) { + databaseaccessrestriction_ = builderForValue.build(); + onChanged(); + } else { + databaseaccessrestrictionBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x04000000; + return this; + } + public Builder mergeDatabaseaccessrestriction(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (databaseaccessrestrictionBuilder_ == null) { + if (((bitField0_ & 0x04000000) == 0x04000000) && + databaseaccessrestriction_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + databaseaccessrestriction_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(databaseaccessrestriction_).mergeFrom(value).buildPartial(); + } else { + databaseaccessrestriction_ = value; + } + onChanged(); + } else { + databaseaccessrestrictionBuilder_.mergeFrom(value); + } + bitField0_ |= 0x04000000; + return this; + } + public Builder clearDatabaseaccessrestriction() { + if (databaseaccessrestrictionBuilder_ == null) { + databaseaccessrestriction_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + databaseaccessrestrictionBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x04000000); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getDatabaseaccessrestrictionBuilder() { + bitField0_ |= 0x04000000; + onChanged(); + return getDatabaseaccessrestrictionFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDatabaseaccessrestrictionOrBuilder() { + if (databaseaccessrestrictionBuilder_ != null) { + return databaseaccessrestrictionBuilder_.getMessageOrBuilder(); + } else { + return databaseaccessrestriction_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getDatabaseaccessrestrictionFieldBuilder() { + if (databaseaccessrestrictionBuilder_ == null) { + databaseaccessrestrictionBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + databaseaccessrestriction_, + getParentForChildren(), + isClean()); + databaseaccessrestriction_ = null; + } + return databaseaccessrestrictionBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField datauploadrestriction = 39; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField datauploadrestriction_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> datauploadrestrictionBuilder_; + public boolean hasDatauploadrestriction() { + return ((bitField0_ & 0x08000000) == 0x08000000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getDatauploadrestriction() { + if (datauploadrestrictionBuilder_ == null) { + return datauploadrestriction_; + } else { + return datauploadrestrictionBuilder_.getMessage(); + } + } + public Builder setDatauploadrestriction(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (datauploadrestrictionBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + datauploadrestriction_ = value; + onChanged(); + } else { + datauploadrestrictionBuilder_.setMessage(value); + } + bitField0_ |= 0x08000000; + return this; + } + public Builder setDatauploadrestriction( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (datauploadrestrictionBuilder_ == null) { + datauploadrestriction_ = builderForValue.build(); + onChanged(); + } else { + datauploadrestrictionBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x08000000; + return this; + } + public Builder mergeDatauploadrestriction(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (datauploadrestrictionBuilder_ == null) { + if (((bitField0_ & 0x08000000) == 0x08000000) && + datauploadrestriction_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + datauploadrestriction_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(datauploadrestriction_).mergeFrom(value).buildPartial(); + } else { + datauploadrestriction_ = value; + } + onChanged(); + } else { + datauploadrestrictionBuilder_.mergeFrom(value); + } + bitField0_ |= 0x08000000; + return this; + } + public Builder clearDatauploadrestriction() { + if (datauploadrestrictionBuilder_ == null) { + datauploadrestriction_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + datauploadrestrictionBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x08000000); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getDatauploadrestrictionBuilder() { + bitField0_ |= 0x08000000; + onChanged(); + return getDatauploadrestrictionFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDatauploadrestrictionOrBuilder() { + if (datauploadrestrictionBuilder_ != null) { + return datauploadrestrictionBuilder_.getMessageOrBuilder(); + } else { + return datauploadrestriction_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getDatauploadrestrictionFieldBuilder() { + if (datauploadrestrictionBuilder_ == null) { + datauploadrestrictionBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + datauploadrestriction_, + getParentForChildren(), + isClean()); + datauploadrestriction_ = null; + } + return datauploadrestrictionBuilder_; + } + + // optional .eu.dnetlib.data.proto.BoolField versioning = 40; + private eu.dnetlib.data.proto.FieldTypeProtos.BoolField versioning_ = eu.dnetlib.data.proto.FieldTypeProtos.BoolField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.BoolField, eu.dnetlib.data.proto.FieldTypeProtos.BoolField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.BoolFieldOrBuilder> versioningBuilder_; + public boolean hasVersioning() { + return ((bitField0_ & 0x10000000) == 0x10000000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.BoolField getVersioning() { + if (versioningBuilder_ == null) { + return versioning_; + } else { + return versioningBuilder_.getMessage(); + } + } + public Builder setVersioning(eu.dnetlib.data.proto.FieldTypeProtos.BoolField value) { + if (versioningBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + versioning_ = value; + onChanged(); + } else { + versioningBuilder_.setMessage(value); + } + bitField0_ |= 0x10000000; + return this; + } + public Builder setVersioning( + eu.dnetlib.data.proto.FieldTypeProtos.BoolField.Builder builderForValue) { + if (versioningBuilder_ == null) { + versioning_ = builderForValue.build(); + onChanged(); + } else { + versioningBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x10000000; + return this; + } + public Builder mergeVersioning(eu.dnetlib.data.proto.FieldTypeProtos.BoolField value) { + if (versioningBuilder_ == null) { + if (((bitField0_ & 0x10000000) == 0x10000000) && + versioning_ != eu.dnetlib.data.proto.FieldTypeProtos.BoolField.getDefaultInstance()) { + versioning_ = + eu.dnetlib.data.proto.FieldTypeProtos.BoolField.newBuilder(versioning_).mergeFrom(value).buildPartial(); + } else { + versioning_ = value; + } + onChanged(); + } else { + versioningBuilder_.mergeFrom(value); + } + bitField0_ |= 0x10000000; + return this; + } + public Builder clearVersioning() { + if (versioningBuilder_ == null) { + versioning_ = eu.dnetlib.data.proto.FieldTypeProtos.BoolField.getDefaultInstance(); + onChanged(); + } else { + versioningBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x10000000); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.BoolField.Builder getVersioningBuilder() { + bitField0_ |= 0x10000000; + onChanged(); + return getVersioningFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.BoolFieldOrBuilder getVersioningOrBuilder() { + if (versioningBuilder_ != null) { + return versioningBuilder_.getMessageOrBuilder(); + } else { + return versioning_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.BoolField, eu.dnetlib.data.proto.FieldTypeProtos.BoolField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.BoolFieldOrBuilder> + getVersioningFieldBuilder() { + if (versioningBuilder_ == null) { + versioningBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.BoolField, eu.dnetlib.data.proto.FieldTypeProtos.BoolField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.BoolFieldOrBuilder>( + versioning_, + getParentForChildren(), + isClean()); + versioning_ = null; + } + return versioningBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField citationguidelineurl = 41; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField citationguidelineurl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> citationguidelineurlBuilder_; + public boolean hasCitationguidelineurl() { + return ((bitField0_ & 0x20000000) == 0x20000000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getCitationguidelineurl() { + if (citationguidelineurlBuilder_ == null) { + return citationguidelineurl_; + } else { + return citationguidelineurlBuilder_.getMessage(); + } + } + public Builder setCitationguidelineurl(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (citationguidelineurlBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + citationguidelineurl_ = value; + onChanged(); + } else { + citationguidelineurlBuilder_.setMessage(value); + } + bitField0_ |= 0x20000000; + return this; + } + public Builder setCitationguidelineurl( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (citationguidelineurlBuilder_ == null) { + citationguidelineurl_ = builderForValue.build(); + onChanged(); + } else { + citationguidelineurlBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x20000000; + return this; + } + public Builder mergeCitationguidelineurl(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (citationguidelineurlBuilder_ == null) { + if (((bitField0_ & 0x20000000) == 0x20000000) && + citationguidelineurl_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + citationguidelineurl_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(citationguidelineurl_).mergeFrom(value).buildPartial(); + } else { + citationguidelineurl_ = value; + } + onChanged(); + } else { + citationguidelineurlBuilder_.mergeFrom(value); + } + bitField0_ |= 0x20000000; + return this; + } + public Builder clearCitationguidelineurl() { + if (citationguidelineurlBuilder_ == null) { + citationguidelineurl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + citationguidelineurlBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x20000000); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getCitationguidelineurlBuilder() { + bitField0_ |= 0x20000000; + onChanged(); + return getCitationguidelineurlFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getCitationguidelineurlOrBuilder() { + if (citationguidelineurlBuilder_ != null) { + return citationguidelineurlBuilder_.getMessageOrBuilder(); + } else { + return citationguidelineurl_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getCitationguidelineurlFieldBuilder() { + if (citationguidelineurlBuilder_ == null) { + citationguidelineurlBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + citationguidelineurl_, + getParentForChildren(), + isClean()); + citationguidelineurl_ = null; + } + return citationguidelineurlBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField qualitymanagementkind = 42; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField qualitymanagementkind_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> qualitymanagementkindBuilder_; + public boolean hasQualitymanagementkind() { + return ((bitField0_ & 0x40000000) == 0x40000000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getQualitymanagementkind() { + if (qualitymanagementkindBuilder_ == null) { + return qualitymanagementkind_; + } else { + return qualitymanagementkindBuilder_.getMessage(); + } + } + public Builder setQualitymanagementkind(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (qualitymanagementkindBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + qualitymanagementkind_ = value; + onChanged(); + } else { + qualitymanagementkindBuilder_.setMessage(value); + } + bitField0_ |= 0x40000000; + return this; + } + public Builder setQualitymanagementkind( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (qualitymanagementkindBuilder_ == null) { + qualitymanagementkind_ = builderForValue.build(); + onChanged(); + } else { + qualitymanagementkindBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x40000000; + return this; + } + public Builder mergeQualitymanagementkind(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (qualitymanagementkindBuilder_ == null) { + if (((bitField0_ & 0x40000000) == 0x40000000) && + qualitymanagementkind_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + qualitymanagementkind_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(qualitymanagementkind_).mergeFrom(value).buildPartial(); + } else { + qualitymanagementkind_ = value; + } + onChanged(); + } else { + qualitymanagementkindBuilder_.mergeFrom(value); + } + bitField0_ |= 0x40000000; + return this; + } + public Builder clearQualitymanagementkind() { + if (qualitymanagementkindBuilder_ == null) { + qualitymanagementkind_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + qualitymanagementkindBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x40000000); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getQualitymanagementkindBuilder() { + bitField0_ |= 0x40000000; + onChanged(); + return getQualitymanagementkindFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getQualitymanagementkindOrBuilder() { + if (qualitymanagementkindBuilder_ != null) { + return qualitymanagementkindBuilder_.getMessageOrBuilder(); + } else { + return qualitymanagementkind_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getQualitymanagementkindFieldBuilder() { + if (qualitymanagementkindBuilder_ == null) { + qualitymanagementkindBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + qualitymanagementkind_, + getParentForChildren(), + isClean()); + qualitymanagementkind_ = null; + } + return qualitymanagementkindBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField pidsystems = 43; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField pidsystems_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> pidsystemsBuilder_; + public boolean hasPidsystems() { + return ((bitField0_ & 0x80000000) == 0x80000000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getPidsystems() { + if (pidsystemsBuilder_ == null) { + return pidsystems_; + } else { + return pidsystemsBuilder_.getMessage(); + } + } + public Builder setPidsystems(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (pidsystemsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + pidsystems_ = value; + onChanged(); + } else { + pidsystemsBuilder_.setMessage(value); + } + bitField0_ |= 0x80000000; + return this; + } + public Builder setPidsystems( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (pidsystemsBuilder_ == null) { + pidsystems_ = builderForValue.build(); + onChanged(); + } else { + pidsystemsBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x80000000; + return this; + } + public Builder mergePidsystems(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (pidsystemsBuilder_ == null) { + if (((bitField0_ & 0x80000000) == 0x80000000) && + pidsystems_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + pidsystems_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(pidsystems_).mergeFrom(value).buildPartial(); + } else { + pidsystems_ = value; + } + onChanged(); + } else { + pidsystemsBuilder_.mergeFrom(value); + } + bitField0_ |= 0x80000000; + return this; + } + public Builder clearPidsystems() { + if (pidsystemsBuilder_ == null) { + pidsystems_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + pidsystemsBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x80000000); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getPidsystemsBuilder() { + bitField0_ |= 0x80000000; + onChanged(); + return getPidsystemsFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getPidsystemsOrBuilder() { + if (pidsystemsBuilder_ != null) { + return pidsystemsBuilder_.getMessageOrBuilder(); + } else { + return pidsystems_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getPidsystemsFieldBuilder() { + if (pidsystemsBuilder_ == null) { + pidsystemsBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + pidsystems_, + getParentForChildren(), + isClean()); + pidsystems_ = null; + } + return pidsystemsBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField certificates = 44; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField certificates_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> certificatesBuilder_; + public boolean hasCertificates() { + return ((bitField1_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getCertificates() { + if (certificatesBuilder_ == null) { + return certificates_; + } else { + return certificatesBuilder_.getMessage(); + } + } + public Builder setCertificates(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (certificatesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + certificates_ = value; + onChanged(); + } else { + certificatesBuilder_.setMessage(value); + } + bitField1_ |= 0x00000001; + return this; + } + public Builder setCertificates( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (certificatesBuilder_ == null) { + certificates_ = builderForValue.build(); + onChanged(); + } else { + certificatesBuilder_.setMessage(builderForValue.build()); + } + bitField1_ |= 0x00000001; + return this; + } + public Builder mergeCertificates(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (certificatesBuilder_ == null) { + if (((bitField1_ & 0x00000001) == 0x00000001) && + certificates_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + certificates_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(certificates_).mergeFrom(value).buildPartial(); + } else { + certificates_ = value; + } + onChanged(); + } else { + certificatesBuilder_.mergeFrom(value); + } + bitField1_ |= 0x00000001; + return this; + } + public Builder clearCertificates() { + if (certificatesBuilder_ == null) { + certificates_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + certificatesBuilder_.clear(); + } + bitField1_ = (bitField1_ & ~0x00000001); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getCertificatesBuilder() { + bitField1_ |= 0x00000001; + onChanged(); + return getCertificatesFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getCertificatesOrBuilder() { + if (certificatesBuilder_ != null) { + return certificatesBuilder_.getMessageOrBuilder(); + } else { + return certificates_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getCertificatesFieldBuilder() { + if (certificatesBuilder_ == null) { + certificatesBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + certificates_, + getParentForChildren(), + isClean()); + certificates_ = null; + } + return certificatesBuilder_; + } + + // repeated .eu.dnetlib.data.proto.KeyValue policies = 46; + private java.util.List policies_ = + java.util.Collections.emptyList(); + private void ensurePoliciesIsMutable() { + if (!((bitField1_ & 0x00000002) == 0x00000002)) { + policies_ = new java.util.ArrayList(policies_); + bitField1_ |= 0x00000002; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.KeyValue, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder, eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder> policiesBuilder_; + + public java.util.List getPoliciesList() { + if (policiesBuilder_ == null) { + return java.util.Collections.unmodifiableList(policies_); + } else { + return policiesBuilder_.getMessageList(); + } + } + public int getPoliciesCount() { + if (policiesBuilder_ == null) { + return policies_.size(); + } else { + return policiesBuilder_.getCount(); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue getPolicies(int index) { + if (policiesBuilder_ == null) { + return policies_.get(index); + } else { + return policiesBuilder_.getMessage(index); + } + } + public Builder setPolicies( + int index, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue value) { + if (policiesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensurePoliciesIsMutable(); + policies_.set(index, value); + onChanged(); + } else { + policiesBuilder_.setMessage(index, value); + } + return this; + } + public Builder setPolicies( + int index, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder builderForValue) { + if (policiesBuilder_ == null) { + ensurePoliciesIsMutable(); + policies_.set(index, builderForValue.build()); + onChanged(); + } else { + policiesBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + public Builder addPolicies(eu.dnetlib.data.proto.FieldTypeProtos.KeyValue value) { + if (policiesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensurePoliciesIsMutable(); + policies_.add(value); + onChanged(); + } else { + policiesBuilder_.addMessage(value); + } + return this; + } + public Builder addPolicies( + int index, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue value) { + if (policiesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensurePoliciesIsMutable(); + policies_.add(index, value); + onChanged(); + } else { + policiesBuilder_.addMessage(index, value); + } + return this; + } + public Builder addPolicies( + eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder builderForValue) { + if (policiesBuilder_ == null) { + ensurePoliciesIsMutable(); + policies_.add(builderForValue.build()); + onChanged(); + } else { + policiesBuilder_.addMessage(builderForValue.build()); + } + return this; + } + public Builder addPolicies( + int index, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder builderForValue) { + if (policiesBuilder_ == null) { + ensurePoliciesIsMutable(); + policies_.add(index, builderForValue.build()); + onChanged(); + } else { + policiesBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + public Builder addAllPolicies( + java.lang.Iterable values) { + if (policiesBuilder_ == null) { + ensurePoliciesIsMutable(); + super.addAll(values, policies_); + onChanged(); + } else { + policiesBuilder_.addAllMessages(values); + } + return this; + } + public Builder clearPolicies() { + if (policiesBuilder_ == null) { + policies_ = java.util.Collections.emptyList(); + bitField1_ = (bitField1_ & ~0x00000002); + onChanged(); + } else { + policiesBuilder_.clear(); + } + return this; + } + public Builder removePolicies(int index) { + if (policiesBuilder_ == null) { + ensurePoliciesIsMutable(); + policies_.remove(index); + onChanged(); + } else { + policiesBuilder_.remove(index); + } + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder getPoliciesBuilder( + int index) { + return getPoliciesFieldBuilder().getBuilder(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder getPoliciesOrBuilder( + int index) { + if (policiesBuilder_ == null) { + return policies_.get(index); } else { + return policiesBuilder_.getMessageOrBuilder(index); + } + } + public java.util.List + getPoliciesOrBuilderList() { + if (policiesBuilder_ != null) { + return policiesBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(policies_); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder addPoliciesBuilder() { + return getPoliciesFieldBuilder().addBuilder( + eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.getDefaultInstance()); + } + public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder addPoliciesBuilder( + int index) { + return getPoliciesFieldBuilder().addBuilder( + index, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.getDefaultInstance()); + } + public java.util.List + getPoliciesBuilderList() { + return getPoliciesFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.KeyValue, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder, eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder> + getPoliciesFieldBuilder() { + if (policiesBuilder_ == null) { + policiesBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.KeyValue, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder, eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder>( + policies_, + ((bitField1_ & 0x00000002) == 0x00000002), + getParentForChildren(), + isClean()); + policies_ = null; + } + return policiesBuilder_; + } + + // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.Datasource.Metadata) + } + + static { + defaultInstance = new Metadata(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.Datasource.Metadata) + } + + private int bitField0_; + // optional .eu.dnetlib.data.proto.Datasource.Metadata metadata = 2; + public static final int METADATA_FIELD_NUMBER = 2; + private eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata metadata_; + public boolean hasMetadata() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata getMetadata() { + return metadata_; + } + public eu.dnetlib.data.proto.DatasourceProtos.Datasource.MetadataOrBuilder getMetadataOrBuilder() { + return metadata_; + } + + private void initFields() { + metadata_ = eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata.getDefaultInstance(); + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + if (hasMetadata()) { + if (!getMetadata().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeMessage(2, metadata_); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(2, metadata_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static eu.dnetlib.data.proto.DatasourceProtos.Datasource parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.DatasourceProtos.Datasource parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.DatasourceProtos.Datasource parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.DatasourceProtos.Datasource parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.DatasourceProtos.Datasource parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.DatasourceProtos.Datasource parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.DatasourceProtos.Datasource parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.DatasourceProtos.Datasource parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.DatasourceProtos.Datasource parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.DatasourceProtos.Datasource parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(eu.dnetlib.data.proto.DatasourceProtos.Datasource prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder + implements eu.dnetlib.data.proto.DatasourceProtos.DatasourceOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.DatasourceProtos.internal_static_eu_dnetlib_data_proto_Datasource_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.DatasourceProtos.internal_static_eu_dnetlib_data_proto_Datasource_fieldAccessorTable; + } + + // Construct using eu.dnetlib.data.proto.DatasourceProtos.Datasource.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getMetadataFieldBuilder(); + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + if (metadataBuilder_ == null) { + metadata_ = eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata.getDefaultInstance(); + } else { + metadataBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return eu.dnetlib.data.proto.DatasourceProtos.Datasource.getDescriptor(); + } + + public eu.dnetlib.data.proto.DatasourceProtos.Datasource getDefaultInstanceForType() { + return eu.dnetlib.data.proto.DatasourceProtos.Datasource.getDefaultInstance(); + } + + public eu.dnetlib.data.proto.DatasourceProtos.Datasource build() { + eu.dnetlib.data.proto.DatasourceProtos.Datasource result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + private eu.dnetlib.data.proto.DatasourceProtos.Datasource buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + eu.dnetlib.data.proto.DatasourceProtos.Datasource result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return result; + } + + public eu.dnetlib.data.proto.DatasourceProtos.Datasource buildPartial() { + eu.dnetlib.data.proto.DatasourceProtos.Datasource result = new eu.dnetlib.data.proto.DatasourceProtos.Datasource(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + if (metadataBuilder_ == null) { + result.metadata_ = metadata_; + } else { + result.metadata_ = metadataBuilder_.build(); + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof eu.dnetlib.data.proto.DatasourceProtos.Datasource) { + return mergeFrom((eu.dnetlib.data.proto.DatasourceProtos.Datasource)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(eu.dnetlib.data.proto.DatasourceProtos.Datasource other) { + if (other == eu.dnetlib.data.proto.DatasourceProtos.Datasource.getDefaultInstance()) return this; + if (other.hasMetadata()) { + mergeMetadata(other.getMetadata()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + if (hasMetadata()) { + if (!getMetadata().isInitialized()) { + + return false; + } + } + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + } + break; + } + case 18: { + eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata.Builder subBuilder = eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata.newBuilder(); + if (hasMetadata()) { + subBuilder.mergeFrom(getMetadata()); + } + input.readMessage(subBuilder, extensionRegistry); + setMetadata(subBuilder.buildPartial()); + break; + } + } + } + } + + private int bitField0_; + + // optional .eu.dnetlib.data.proto.Datasource.Metadata metadata = 2; + private eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata metadata_ = eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata, eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata.Builder, eu.dnetlib.data.proto.DatasourceProtos.Datasource.MetadataOrBuilder> metadataBuilder_; + public boolean hasMetadata() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata getMetadata() { + if (metadataBuilder_ == null) { + return metadata_; + } else { + return metadataBuilder_.getMessage(); + } + } + public Builder setMetadata(eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata value) { + if (metadataBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + metadata_ = value; + onChanged(); + } else { + metadataBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder setMetadata( + eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata.Builder builderForValue) { + if (metadataBuilder_ == null) { + metadata_ = builderForValue.build(); + onChanged(); + } else { + metadataBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder mergeMetadata(eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata value) { + if (metadataBuilder_ == null) { + if (((bitField0_ & 0x00000001) == 0x00000001) && + metadata_ != eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata.getDefaultInstance()) { + metadata_ = + eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata.newBuilder(metadata_).mergeFrom(value).buildPartial(); + } else { + metadata_ = value; + } + onChanged(); + } else { + metadataBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder clearMetadata() { + if (metadataBuilder_ == null) { + metadata_ = eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata.getDefaultInstance(); + onChanged(); + } else { + metadataBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + public eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata.Builder getMetadataBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return getMetadataFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.DatasourceProtos.Datasource.MetadataOrBuilder getMetadataOrBuilder() { + if (metadataBuilder_ != null) { + return metadataBuilder_.getMessageOrBuilder(); + } else { + return metadata_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata, eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata.Builder, eu.dnetlib.data.proto.DatasourceProtos.Datasource.MetadataOrBuilder> + getMetadataFieldBuilder() { + if (metadataBuilder_ == null) { + metadataBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata, eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata.Builder, eu.dnetlib.data.proto.DatasourceProtos.Datasource.MetadataOrBuilder>( + metadata_, + getParentForChildren(), + isClean()); + metadata_ = null; + } + return metadataBuilder_; + } + + // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.Datasource) + } + + static { + defaultInstance = new Datasource(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.Datasource) + } + + private static com.google.protobuf.Descriptors.Descriptor + internal_static_eu_dnetlib_data_proto_Datasource_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_eu_dnetlib_data_proto_Datasource_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_eu_dnetlib_data_proto_Datasource_Metadata_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_eu_dnetlib_data_proto_Datasource_Metadata_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\020Datasource.proto\022\025eu.dnetlib.data.prot" + + "o\032\017FieldType.proto\"\310\020\n\nDatasource\022<\n\010met" + + "adata\030\002 \001(\0132*.eu.dnetlib.data.proto.Data" + + "source.Metadata\032\373\017\n\010Metadata\0228\n\016datasour" + + "cetype\030\017 \001(\0132 .eu.dnetlib.data.proto.Qua" + + "lifier\022?\n\025openairecompatibility\030\021 \001(\0132 ." + + "eu.dnetlib.data.proto.Qualifier\0228\n\014offic" + + "ialname\030\001 \001(\0132\".eu.dnetlib.data.proto.St" + + "ringField\0227\n\013englishname\030\002 \001(\0132\".eu.dnet" + + "lib.data.proto.StringField\0226\n\nwebsiteurl", + "\030\003 \001(\0132\".eu.dnetlib.data.proto.StringFie" + + "ld\0223\n\007logourl\030\004 \001(\0132\".eu.dnetlib.data.pr" + + "oto.StringField\0228\n\014contactemail\030\005 \001(\0132\"." + + "eu.dnetlib.data.proto.StringField\022;\n\017nam" + + "espaceprefix\030\007 \001(\0132\".eu.dnetlib.data.pro" + + "to.StringField\0224\n\010latitude\030\022 \001(\0132\".eu.dn" + + "etlib.data.proto.StringField\0225\n\tlongitud" + + "e\030\023 \001(\0132\".eu.dnetlib.data.proto.StringFi" + + "eld\022<\n\020dateofvalidation\030\024 \001(\0132\".eu.dnetl" + + "ib.data.proto.StringField\0227\n\013description", + "\030\025 \001(\0132\".eu.dnetlib.data.proto.StringFie" + + "ld\022;\n\010subjects\030- \003(\0132).eu.dnetlib.data.p" + + "roto.StructuredProperty\022;\n\017odnumberofite" + + "ms\030\t \001(\0132\".eu.dnetlib.data.proto.StringF" + + "ield\022?\n\023odnumberofitemsdate\030\n \001(\0132\".eu.d" + + "netlib.data.proto.StringField\0226\n\nodpolic" + + "ies\030\014 \001(\0132\".eu.dnetlib.data.proto.String" + + "Field\0227\n\013odlanguages\030\r \003(\0132\".eu.dnetlib." + + "data.proto.StringField\022:\n\016odcontenttypes" + + "\030\016 \003(\0132\".eu.dnetlib.data.proto.StringFie", + "ld\022=\n\021accessinfopackage\030\006 \003(\0132\".eu.dnetl" + + "ib.data.proto.StringField\022<\n\020releasestar" + + "tdate\030\037 \001(\0132\".eu.dnetlib.data.proto.Stri" + + "ngField\022:\n\016releaseenddate\030 \001(\0132\".eu.dne" + + "tlib.data.proto.StringField\022?\n\023missionst" + + "atementurl\030! \001(\0132\".eu.dnetlib.data.proto" + + ".StringField\0226\n\014dataprovider\030\" \001(\0132 .eu." + + "dnetlib.data.proto.BoolField\0229\n\017servicep" + + "rovider\030# \001(\0132 .eu.dnetlib.data.proto.Bo" + + "olField\022>\n\022databaseaccesstype\030$ \001(\0132\".eu", + ".dnetlib.data.proto.StringField\022:\n\016datau" + + "ploadtype\030% \001(\0132\".eu.dnetlib.data.proto." + + "StringField\022E\n\031databaseaccessrestriction" + + "\030& \001(\0132\".eu.dnetlib.data.proto.StringFie" + + "ld\022A\n\025datauploadrestriction\030\' \001(\0132\".eu.d" + + "netlib.data.proto.StringField\0224\n\nversion" + + "ing\030( \001(\0132 .eu.dnetlib.data.proto.BoolFi" + + "eld\022@\n\024citationguidelineurl\030) \001(\0132\".eu.d" + + "netlib.data.proto.StringField\022A\n\025quality" + + "managementkind\030* \001(\0132\".eu.dnetlib.data.p", + "roto.StringField\0226\n\npidsystems\030+ \001(\0132\".e" + + "u.dnetlib.data.proto.StringField\0228\n\014cert" + + "ificates\030, \001(\0132\".eu.dnetlib.data.proto.S" + + "tringField\0221\n\010policies\030. \003(\0132\037.eu.dnetli" + + "b.data.proto.KeyValueB)\n\025eu.dnetlib.data" + + ".protoB\020DatasourceProtos" + }; + com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = + new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { + public com.google.protobuf.ExtensionRegistry assignDescriptors( + com.google.protobuf.Descriptors.FileDescriptor root) { + descriptor = root; + internal_static_eu_dnetlib_data_proto_Datasource_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_eu_dnetlib_data_proto_Datasource_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_eu_dnetlib_data_proto_Datasource_descriptor, + new java.lang.String[] { "Metadata", }, + eu.dnetlib.data.proto.DatasourceProtos.Datasource.class, + eu.dnetlib.data.proto.DatasourceProtos.Datasource.Builder.class); + internal_static_eu_dnetlib_data_proto_Datasource_Metadata_descriptor = + internal_static_eu_dnetlib_data_proto_Datasource_descriptor.getNestedTypes().get(0); + internal_static_eu_dnetlib_data_proto_Datasource_Metadata_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_eu_dnetlib_data_proto_Datasource_Metadata_descriptor, + new java.lang.String[] { "Datasourcetype", "Openairecompatibility", "Officialname", "Englishname", "Websiteurl", "Logourl", "Contactemail", "Namespaceprefix", "Latitude", "Longitude", "Dateofvalidation", "Description", "Subjects", "Odnumberofitems", "Odnumberofitemsdate", "Odpolicies", "Odlanguages", "Odcontenttypes", "Accessinfopackage", "Releasestartdate", "Releaseenddate", "Missionstatementurl", "Dataprovider", "Serviceprovider", "Databaseaccesstype", "Datauploadtype", "Databaseaccessrestriction", "Datauploadrestriction", "Versioning", "Citationguidelineurl", "Qualitymanagementkind", "Pidsystems", "Certificates", "Policies", }, + eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata.class, + eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata.Builder.class); + return null; + } + }; + com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + eu.dnetlib.data.proto.FieldTypeProtos.getDescriptor(), + }, assigner); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/DedupProtos.java b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/DedupProtos.java new file mode 100644 index 000000000..67eba7d15 --- /dev/null +++ b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/DedupProtos.java @@ -0,0 +1,564 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: Dedup.proto + +package eu.dnetlib.data.proto; + +public final class DedupProtos { + private DedupProtos() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + } + public interface DedupOrBuilder + extends com.google.protobuf.MessageOrBuilder { + + // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; + boolean hasRelMetadata(); + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata(); + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder(); + } + public static final class Dedup extends + com.google.protobuf.GeneratedMessage + implements DedupOrBuilder { + // Use Dedup.newBuilder() to construct. + private Dedup(Builder builder) { + super(builder); + } + private Dedup(boolean noInit) {} + + private static final Dedup defaultInstance; + public static Dedup getDefaultInstance() { + return defaultInstance; + } + + public Dedup getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.DedupProtos.internal_static_eu_dnetlib_data_proto_Dedup_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.DedupProtos.internal_static_eu_dnetlib_data_proto_Dedup_fieldAccessorTable; + } + + public enum RelName + implements com.google.protobuf.ProtocolMessageEnum { + isMergedIn(0, 1), + merges(1, 2), + ; + + public static final int isMergedIn_VALUE = 1; + public static final int merges_VALUE = 2; + + + public final int getNumber() { return value; } + + public static RelName valueOf(int value) { + switch (value) { + case 1: return isMergedIn; + case 2: return merges; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static com.google.protobuf.Internal.EnumLiteMap + internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public RelName findValueByNumber(int number) { + return RelName.valueOf(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor + getValueDescriptor() { + return getDescriptor().getValues().get(index); + } + public final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptorForType() { + return getDescriptor(); + } + public static final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptor() { + return eu.dnetlib.data.proto.DedupProtos.Dedup.getDescriptor().getEnumTypes().get(0); + } + + private static final RelName[] VALUES = { + isMergedIn, merges, + }; + + public static RelName valueOf( + com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "EnumValueDescriptor is not for this type."); + } + return VALUES[desc.getIndex()]; + } + + private final int index; + private final int value; + + private RelName(int index, int value) { + this.index = index; + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:eu.dnetlib.data.proto.Dedup.RelName) + } + + private int bitField0_; + // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; + public static final int RELMETADATA_FIELD_NUMBER = 1; + private eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata relMetadata_; + public boolean hasRelMetadata() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata() { + return relMetadata_; + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder() { + return relMetadata_; + } + + private void initFields() { + relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + if (!hasRelMetadata()) { + memoizedIsInitialized = 0; + return false; + } + if (!getRelMetadata().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeMessage(1, relMetadata_); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, relMetadata_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static eu.dnetlib.data.proto.DedupProtos.Dedup parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.DedupProtos.Dedup parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.DedupProtos.Dedup parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.DedupProtos.Dedup parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.DedupProtos.Dedup parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.DedupProtos.Dedup parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.DedupProtos.Dedup parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.DedupProtos.Dedup parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.DedupProtos.Dedup parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.DedupProtos.Dedup parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(eu.dnetlib.data.proto.DedupProtos.Dedup prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder + implements eu.dnetlib.data.proto.DedupProtos.DedupOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.DedupProtos.internal_static_eu_dnetlib_data_proto_Dedup_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.DedupProtos.internal_static_eu_dnetlib_data_proto_Dedup_fieldAccessorTable; + } + + // Construct using eu.dnetlib.data.proto.DedupProtos.Dedup.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getRelMetadataFieldBuilder(); + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + if (relMetadataBuilder_ == null) { + relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); + } else { + relMetadataBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return eu.dnetlib.data.proto.DedupProtos.Dedup.getDescriptor(); + } + + public eu.dnetlib.data.proto.DedupProtos.Dedup getDefaultInstanceForType() { + return eu.dnetlib.data.proto.DedupProtos.Dedup.getDefaultInstance(); + } + + public eu.dnetlib.data.proto.DedupProtos.Dedup build() { + eu.dnetlib.data.proto.DedupProtos.Dedup result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + private eu.dnetlib.data.proto.DedupProtos.Dedup buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + eu.dnetlib.data.proto.DedupProtos.Dedup result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return result; + } + + public eu.dnetlib.data.proto.DedupProtos.Dedup buildPartial() { + eu.dnetlib.data.proto.DedupProtos.Dedup result = new eu.dnetlib.data.proto.DedupProtos.Dedup(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + if (relMetadataBuilder_ == null) { + result.relMetadata_ = relMetadata_; + } else { + result.relMetadata_ = relMetadataBuilder_.build(); + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof eu.dnetlib.data.proto.DedupProtos.Dedup) { + return mergeFrom((eu.dnetlib.data.proto.DedupProtos.Dedup)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(eu.dnetlib.data.proto.DedupProtos.Dedup other) { + if (other == eu.dnetlib.data.proto.DedupProtos.Dedup.getDefaultInstance()) return this; + if (other.hasRelMetadata()) { + mergeRelMetadata(other.getRelMetadata()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + if (!hasRelMetadata()) { + + return false; + } + if (!getRelMetadata().isInitialized()) { + + return false; + } + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + } + break; + } + case 10: { + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder subBuilder = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.newBuilder(); + if (hasRelMetadata()) { + subBuilder.mergeFrom(getRelMetadata()); + } + input.readMessage(subBuilder, extensionRegistry); + setRelMetadata(subBuilder.buildPartial()); + break; + } + } + } + } + + private int bitField0_; + + // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; + private eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder> relMetadataBuilder_; + public boolean hasRelMetadata() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata() { + if (relMetadataBuilder_ == null) { + return relMetadata_; + } else { + return relMetadataBuilder_.getMessage(); + } + } + public Builder setRelMetadata(eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata value) { + if (relMetadataBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + relMetadata_ = value; + onChanged(); + } else { + relMetadataBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder setRelMetadata( + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder builderForValue) { + if (relMetadataBuilder_ == null) { + relMetadata_ = builderForValue.build(); + onChanged(); + } else { + relMetadataBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder mergeRelMetadata(eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata value) { + if (relMetadataBuilder_ == null) { + if (((bitField0_ & 0x00000001) == 0x00000001) && + relMetadata_ != eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance()) { + relMetadata_ = + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.newBuilder(relMetadata_).mergeFrom(value).buildPartial(); + } else { + relMetadata_ = value; + } + onChanged(); + } else { + relMetadataBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder clearRelMetadata() { + if (relMetadataBuilder_ == null) { + relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); + onChanged(); + } else { + relMetadataBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder getRelMetadataBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return getRelMetadataFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder() { + if (relMetadataBuilder_ != null) { + return relMetadataBuilder_.getMessageOrBuilder(); + } else { + return relMetadata_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder> + getRelMetadataFieldBuilder() { + if (relMetadataBuilder_ == null) { + relMetadataBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder>( + relMetadata_, + getParentForChildren(), + isClean()); + relMetadata_ = null; + } + return relMetadataBuilder_; + } + + // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.Dedup) + } + + static { + defaultInstance = new Dedup(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.Dedup) + } + + private static com.google.protobuf.Descriptors.Descriptor + internal_static_eu_dnetlib_data_proto_Dedup_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_eu_dnetlib_data_proto_Dedup_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\013Dedup.proto\022\025eu.dnetlib.data.proto\032\021Re" + + "lMetadata.proto\"g\n\005Dedup\0227\n\013relMetadata\030" + + "\001 \002(\0132\".eu.dnetlib.data.proto.RelMetadat" + + "a\"%\n\007RelName\022\016\n\nisMergedIn\020\001\022\n\n\006merges\020\002" + + "B$\n\025eu.dnetlib.data.protoB\013DedupProtos" + }; + com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = + new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { + public com.google.protobuf.ExtensionRegistry assignDescriptors( + com.google.protobuf.Descriptors.FileDescriptor root) { + descriptor = root; + internal_static_eu_dnetlib_data_proto_Dedup_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_eu_dnetlib_data_proto_Dedup_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_eu_dnetlib_data_proto_Dedup_descriptor, + new java.lang.String[] { "RelMetadata", }, + eu.dnetlib.data.proto.DedupProtos.Dedup.class, + eu.dnetlib.data.proto.DedupProtos.Dedup.Builder.class); + return null; + } + }; + com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + eu.dnetlib.data.proto.RelMetadataProtos.getDescriptor(), + }, assigner); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/DedupSimilarityProtos.java b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/DedupSimilarityProtos.java new file mode 100644 index 000000000..ff080188f --- /dev/null +++ b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/DedupSimilarityProtos.java @@ -0,0 +1,562 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: DedupSimilarity.proto + +package eu.dnetlib.data.proto; + +public final class DedupSimilarityProtos { + private DedupSimilarityProtos() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + } + public interface DedupSimilarityOrBuilder + extends com.google.protobuf.MessageOrBuilder { + + // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; + boolean hasRelMetadata(); + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata(); + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder(); + } + public static final class DedupSimilarity extends + com.google.protobuf.GeneratedMessage + implements DedupSimilarityOrBuilder { + // Use DedupSimilarity.newBuilder() to construct. + private DedupSimilarity(Builder builder) { + super(builder); + } + private DedupSimilarity(boolean noInit) {} + + private static final DedupSimilarity defaultInstance; + public static DedupSimilarity getDefaultInstance() { + return defaultInstance; + } + + public DedupSimilarity getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.DedupSimilarityProtos.internal_static_eu_dnetlib_data_proto_DedupSimilarity_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.DedupSimilarityProtos.internal_static_eu_dnetlib_data_proto_DedupSimilarity_fieldAccessorTable; + } + + public enum RelName + implements com.google.protobuf.ProtocolMessageEnum { + isSimilarTo(0, 1), + ; + + public static final int isSimilarTo_VALUE = 1; + + + public final int getNumber() { return value; } + + public static RelName valueOf(int value) { + switch (value) { + case 1: return isSimilarTo; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static com.google.protobuf.Internal.EnumLiteMap + internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public RelName findValueByNumber(int number) { + return RelName.valueOf(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor + getValueDescriptor() { + return getDescriptor().getValues().get(index); + } + public final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptorForType() { + return getDescriptor(); + } + public static final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptor() { + return eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.getDescriptor().getEnumTypes().get(0); + } + + private static final RelName[] VALUES = { + isSimilarTo, + }; + + public static RelName valueOf( + com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "EnumValueDescriptor is not for this type."); + } + return VALUES[desc.getIndex()]; + } + + private final int index; + private final int value; + + private RelName(int index, int value) { + this.index = index; + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:eu.dnetlib.data.proto.DedupSimilarity.RelName) + } + + private int bitField0_; + // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; + public static final int RELMETADATA_FIELD_NUMBER = 1; + private eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata relMetadata_; + public boolean hasRelMetadata() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata() { + return relMetadata_; + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder() { + return relMetadata_; + } + + private void initFields() { + relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + if (!hasRelMetadata()) { + memoizedIsInitialized = 0; + return false; + } + if (!getRelMetadata().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeMessage(1, relMetadata_); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, relMetadata_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder + implements eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarityOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.DedupSimilarityProtos.internal_static_eu_dnetlib_data_proto_DedupSimilarity_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.DedupSimilarityProtos.internal_static_eu_dnetlib_data_proto_DedupSimilarity_fieldAccessorTable; + } + + // Construct using eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getRelMetadataFieldBuilder(); + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + if (relMetadataBuilder_ == null) { + relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); + } else { + relMetadataBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.getDescriptor(); + } + + public eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity getDefaultInstanceForType() { + return eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.getDefaultInstance(); + } + + public eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity build() { + eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + private eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return result; + } + + public eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity buildPartial() { + eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity result = new eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + if (relMetadataBuilder_ == null) { + result.relMetadata_ = relMetadata_; + } else { + result.relMetadata_ = relMetadataBuilder_.build(); + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity) { + return mergeFrom((eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity other) { + if (other == eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.getDefaultInstance()) return this; + if (other.hasRelMetadata()) { + mergeRelMetadata(other.getRelMetadata()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + if (!hasRelMetadata()) { + + return false; + } + if (!getRelMetadata().isInitialized()) { + + return false; + } + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + } + break; + } + case 10: { + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder subBuilder = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.newBuilder(); + if (hasRelMetadata()) { + subBuilder.mergeFrom(getRelMetadata()); + } + input.readMessage(subBuilder, extensionRegistry); + setRelMetadata(subBuilder.buildPartial()); + break; + } + } + } + } + + private int bitField0_; + + // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; + private eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder> relMetadataBuilder_; + public boolean hasRelMetadata() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata() { + if (relMetadataBuilder_ == null) { + return relMetadata_; + } else { + return relMetadataBuilder_.getMessage(); + } + } + public Builder setRelMetadata(eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata value) { + if (relMetadataBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + relMetadata_ = value; + onChanged(); + } else { + relMetadataBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder setRelMetadata( + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder builderForValue) { + if (relMetadataBuilder_ == null) { + relMetadata_ = builderForValue.build(); + onChanged(); + } else { + relMetadataBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder mergeRelMetadata(eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata value) { + if (relMetadataBuilder_ == null) { + if (((bitField0_ & 0x00000001) == 0x00000001) && + relMetadata_ != eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance()) { + relMetadata_ = + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.newBuilder(relMetadata_).mergeFrom(value).buildPartial(); + } else { + relMetadata_ = value; + } + onChanged(); + } else { + relMetadataBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder clearRelMetadata() { + if (relMetadataBuilder_ == null) { + relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); + onChanged(); + } else { + relMetadataBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder getRelMetadataBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return getRelMetadataFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder() { + if (relMetadataBuilder_ != null) { + return relMetadataBuilder_.getMessageOrBuilder(); + } else { + return relMetadata_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder> + getRelMetadataFieldBuilder() { + if (relMetadataBuilder_ == null) { + relMetadataBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder>( + relMetadata_, + getParentForChildren(), + isClean()); + relMetadata_ = null; + } + return relMetadataBuilder_; + } + + // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.DedupSimilarity) + } + + static { + defaultInstance = new DedupSimilarity(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.DedupSimilarity) + } + + private static com.google.protobuf.Descriptors.Descriptor + internal_static_eu_dnetlib_data_proto_DedupSimilarity_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_eu_dnetlib_data_proto_DedupSimilarity_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\025DedupSimilarity.proto\022\025eu.dnetlib.data" + + ".proto\032\021RelMetadata.proto\"f\n\017DedupSimila" + + "rity\0227\n\013relMetadata\030\001 \002(\0132\".eu.dnetlib.d" + + "ata.proto.RelMetadata\"\032\n\007RelName\022\017\n\013isSi" + + "milarTo\020\001B.\n\025eu.dnetlib.data.protoB\025Dedu" + + "pSimilarityProtos" + }; + com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = + new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { + public com.google.protobuf.ExtensionRegistry assignDescriptors( + com.google.protobuf.Descriptors.FileDescriptor root) { + descriptor = root; + internal_static_eu_dnetlib_data_proto_DedupSimilarity_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_eu_dnetlib_data_proto_DedupSimilarity_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_eu_dnetlib_data_proto_DedupSimilarity_descriptor, + new java.lang.String[] { "RelMetadata", }, + eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.class, + eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.Builder.class); + return null; + } + }; + com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + eu.dnetlib.data.proto.RelMetadataProtos.getDescriptor(), + }, assigner); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/FieldTypeProtos.java b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/FieldTypeProtos.java new file mode 100644 index 000000000..03ca7f45e --- /dev/null +++ b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/FieldTypeProtos.java @@ -0,0 +1,8049 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: FieldType.proto + +package eu.dnetlib.data.proto; + +public final class FieldTypeProtos { + private FieldTypeProtos() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + } + public interface StringFieldOrBuilder + extends com.google.protobuf.MessageOrBuilder { + + // required string value = 1; + boolean hasValue(); + String getValue(); + + // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 2; + boolean hasDataInfo(); + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo(); + eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder(); + } + public static final class StringField extends + com.google.protobuf.GeneratedMessage + implements StringFieldOrBuilder { + // Use StringField.newBuilder() to construct. + private StringField(Builder builder) { + super(builder); + } + private StringField(boolean noInit) {} + + private static final StringField defaultInstance; + public static StringField getDefaultInstance() { + return defaultInstance; + } + + public StringField getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_StringField_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_StringField_fieldAccessorTable; + } + + private int bitField0_; + // required string value = 1; + public static final int VALUE_FIELD_NUMBER = 1; + private java.lang.Object value_; + public boolean hasValue() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public String getValue() { + java.lang.Object ref = value_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + value_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getValueBytes() { + java.lang.Object ref = value_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + value_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 2; + public static final int DATAINFO_FIELD_NUMBER = 2; + private eu.dnetlib.data.proto.FieldTypeProtos.DataInfo dataInfo_; + public boolean hasDataInfo() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo() { + return dataInfo_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder() { + return dataInfo_; + } + + private void initFields() { + value_ = ""; + dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + if (!hasValue()) { + memoizedIsInitialized = 0; + return false; + } + if (hasDataInfo()) { + if (!getDataInfo().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeBytes(1, getValueBytes()); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + output.writeMessage(2, dataInfo_); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(1, getValueBytes()); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(2, dataInfo_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static eu.dnetlib.data.proto.FieldTypeProtos.StringField parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.StringField parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.StringField parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.StringField parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.StringField parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.StringField parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.StringField parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.FieldTypeProtos.StringField parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.FieldTypeProtos.StringField parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.StringField parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(eu.dnetlib.data.proto.FieldTypeProtos.StringField prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder + implements eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_StringField_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_StringField_fieldAccessorTable; + } + + // Construct using eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getDataInfoFieldBuilder(); + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + value_ = ""; + bitField0_ = (bitField0_ & ~0x00000001); + if (dataInfoBuilder_ == null) { + dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); + } else { + dataInfoBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000002); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDescriptor(); + } + + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getDefaultInstanceForType() { + return eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } + + public eu.dnetlib.data.proto.FieldTypeProtos.StringField build() { + eu.dnetlib.data.proto.FieldTypeProtos.StringField result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + private eu.dnetlib.data.proto.FieldTypeProtos.StringField buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + eu.dnetlib.data.proto.FieldTypeProtos.StringField result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return result; + } + + public eu.dnetlib.data.proto.FieldTypeProtos.StringField buildPartial() { + eu.dnetlib.data.proto.FieldTypeProtos.StringField result = new eu.dnetlib.data.proto.FieldTypeProtos.StringField(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + result.value_ = value_; + if (((from_bitField0_ & 0x00000002) == 0x00000002)) { + to_bitField0_ |= 0x00000002; + } + if (dataInfoBuilder_ == null) { + result.dataInfo_ = dataInfo_; + } else { + result.dataInfo_ = dataInfoBuilder_.build(); + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof eu.dnetlib.data.proto.FieldTypeProtos.StringField) { + return mergeFrom((eu.dnetlib.data.proto.FieldTypeProtos.StringField)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(eu.dnetlib.data.proto.FieldTypeProtos.StringField other) { + if (other == eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) return this; + if (other.hasValue()) { + setValue(other.getValue()); + } + if (other.hasDataInfo()) { + mergeDataInfo(other.getDataInfo()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + if (!hasValue()) { + + return false; + } + if (hasDataInfo()) { + if (!getDataInfo().isInitialized()) { + + return false; + } + } + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + } + break; + } + case 10: { + bitField0_ |= 0x00000001; + value_ = input.readBytes(); + break; + } + case 18: { + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.newBuilder(); + if (hasDataInfo()) { + subBuilder.mergeFrom(getDataInfo()); + } + input.readMessage(subBuilder, extensionRegistry); + setDataInfo(subBuilder.buildPartial()); + break; + } + } + } + } + + private int bitField0_; + + // required string value = 1; + private java.lang.Object value_ = ""; + public boolean hasValue() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public String getValue() { + java.lang.Object ref = value_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + value_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setValue(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + value_ = value; + onChanged(); + return this; + } + public Builder clearValue() { + bitField0_ = (bitField0_ & ~0x00000001); + value_ = getDefaultInstance().getValue(); + onChanged(); + return this; + } + void setValue(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000001; + value_ = value; + onChanged(); + } + + // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 2; + private eu.dnetlib.data.proto.FieldTypeProtos.DataInfo dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder> dataInfoBuilder_; + public boolean hasDataInfo() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo() { + if (dataInfoBuilder_ == null) { + return dataInfo_; + } else { + return dataInfoBuilder_.getMessage(); + } + } + public Builder setDataInfo(eu.dnetlib.data.proto.FieldTypeProtos.DataInfo value) { + if (dataInfoBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + dataInfo_ = value; + onChanged(); + } else { + dataInfoBuilder_.setMessage(value); + } + bitField0_ |= 0x00000002; + return this; + } + public Builder setDataInfo( + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder builderForValue) { + if (dataInfoBuilder_ == null) { + dataInfo_ = builderForValue.build(); + onChanged(); + } else { + dataInfoBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000002; + return this; + } + public Builder mergeDataInfo(eu.dnetlib.data.proto.FieldTypeProtos.DataInfo value) { + if (dataInfoBuilder_ == null) { + if (((bitField0_ & 0x00000002) == 0x00000002) && + dataInfo_ != eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance()) { + dataInfo_ = + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.newBuilder(dataInfo_).mergeFrom(value).buildPartial(); + } else { + dataInfo_ = value; + } + onChanged(); + } else { + dataInfoBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000002; + return this; + } + public Builder clearDataInfo() { + if (dataInfoBuilder_ == null) { + dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); + onChanged(); + } else { + dataInfoBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000002); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder getDataInfoBuilder() { + bitField0_ |= 0x00000002; + onChanged(); + return getDataInfoFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder() { + if (dataInfoBuilder_ != null) { + return dataInfoBuilder_.getMessageOrBuilder(); + } else { + return dataInfo_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder> + getDataInfoFieldBuilder() { + if (dataInfoBuilder_ == null) { + dataInfoBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder>( + dataInfo_, + getParentForChildren(), + isClean()); + dataInfo_ = null; + } + return dataInfoBuilder_; + } + + // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.StringField) + } + + static { + defaultInstance = new StringField(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.StringField) + } + + public interface BoolFieldOrBuilder + extends com.google.protobuf.MessageOrBuilder { + + // required bool value = 1; + boolean hasValue(); + boolean getValue(); + + // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 2; + boolean hasDataInfo(); + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo(); + eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder(); + } + public static final class BoolField extends + com.google.protobuf.GeneratedMessage + implements BoolFieldOrBuilder { + // Use BoolField.newBuilder() to construct. + private BoolField(Builder builder) { + super(builder); + } + private BoolField(boolean noInit) {} + + private static final BoolField defaultInstance; + public static BoolField getDefaultInstance() { + return defaultInstance; + } + + public BoolField getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_BoolField_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_BoolField_fieldAccessorTable; + } + + private int bitField0_; + // required bool value = 1; + public static final int VALUE_FIELD_NUMBER = 1; + private boolean value_; + public boolean hasValue() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public boolean getValue() { + return value_; + } + + // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 2; + public static final int DATAINFO_FIELD_NUMBER = 2; + private eu.dnetlib.data.proto.FieldTypeProtos.DataInfo dataInfo_; + public boolean hasDataInfo() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo() { + return dataInfo_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder() { + return dataInfo_; + } + + private void initFields() { + value_ = false; + dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + if (!hasValue()) { + memoizedIsInitialized = 0; + return false; + } + if (hasDataInfo()) { + if (!getDataInfo().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeBool(1, value_); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + output.writeMessage(2, dataInfo_); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeBoolSize(1, value_); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(2, dataInfo_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static eu.dnetlib.data.proto.FieldTypeProtos.BoolField parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.BoolField parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.BoolField parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.BoolField parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.BoolField parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.BoolField parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.BoolField parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.FieldTypeProtos.BoolField parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.FieldTypeProtos.BoolField parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.BoolField parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(eu.dnetlib.data.proto.FieldTypeProtos.BoolField prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder + implements eu.dnetlib.data.proto.FieldTypeProtos.BoolFieldOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_BoolField_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_BoolField_fieldAccessorTable; + } + + // Construct using eu.dnetlib.data.proto.FieldTypeProtos.BoolField.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getDataInfoFieldBuilder(); + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + value_ = false; + bitField0_ = (bitField0_ & ~0x00000001); + if (dataInfoBuilder_ == null) { + dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); + } else { + dataInfoBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000002); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return eu.dnetlib.data.proto.FieldTypeProtos.BoolField.getDescriptor(); + } + + public eu.dnetlib.data.proto.FieldTypeProtos.BoolField getDefaultInstanceForType() { + return eu.dnetlib.data.proto.FieldTypeProtos.BoolField.getDefaultInstance(); + } + + public eu.dnetlib.data.proto.FieldTypeProtos.BoolField build() { + eu.dnetlib.data.proto.FieldTypeProtos.BoolField result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + private eu.dnetlib.data.proto.FieldTypeProtos.BoolField buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + eu.dnetlib.data.proto.FieldTypeProtos.BoolField result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return result; + } + + public eu.dnetlib.data.proto.FieldTypeProtos.BoolField buildPartial() { + eu.dnetlib.data.proto.FieldTypeProtos.BoolField result = new eu.dnetlib.data.proto.FieldTypeProtos.BoolField(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + result.value_ = value_; + if (((from_bitField0_ & 0x00000002) == 0x00000002)) { + to_bitField0_ |= 0x00000002; + } + if (dataInfoBuilder_ == null) { + result.dataInfo_ = dataInfo_; + } else { + result.dataInfo_ = dataInfoBuilder_.build(); + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof eu.dnetlib.data.proto.FieldTypeProtos.BoolField) { + return mergeFrom((eu.dnetlib.data.proto.FieldTypeProtos.BoolField)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(eu.dnetlib.data.proto.FieldTypeProtos.BoolField other) { + if (other == eu.dnetlib.data.proto.FieldTypeProtos.BoolField.getDefaultInstance()) return this; + if (other.hasValue()) { + setValue(other.getValue()); + } + if (other.hasDataInfo()) { + mergeDataInfo(other.getDataInfo()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + if (!hasValue()) { + + return false; + } + if (hasDataInfo()) { + if (!getDataInfo().isInitialized()) { + + return false; + } + } + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + } + break; + } + case 8: { + bitField0_ |= 0x00000001; + value_ = input.readBool(); + break; + } + case 18: { + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.newBuilder(); + if (hasDataInfo()) { + subBuilder.mergeFrom(getDataInfo()); + } + input.readMessage(subBuilder, extensionRegistry); + setDataInfo(subBuilder.buildPartial()); + break; + } + } + } + } + + private int bitField0_; + + // required bool value = 1; + private boolean value_ ; + public boolean hasValue() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public boolean getValue() { + return value_; + } + public Builder setValue(boolean value) { + bitField0_ |= 0x00000001; + value_ = value; + onChanged(); + return this; + } + public Builder clearValue() { + bitField0_ = (bitField0_ & ~0x00000001); + value_ = false; + onChanged(); + return this; + } + + // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 2; + private eu.dnetlib.data.proto.FieldTypeProtos.DataInfo dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder> dataInfoBuilder_; + public boolean hasDataInfo() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo() { + if (dataInfoBuilder_ == null) { + return dataInfo_; + } else { + return dataInfoBuilder_.getMessage(); + } + } + public Builder setDataInfo(eu.dnetlib.data.proto.FieldTypeProtos.DataInfo value) { + if (dataInfoBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + dataInfo_ = value; + onChanged(); + } else { + dataInfoBuilder_.setMessage(value); + } + bitField0_ |= 0x00000002; + return this; + } + public Builder setDataInfo( + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder builderForValue) { + if (dataInfoBuilder_ == null) { + dataInfo_ = builderForValue.build(); + onChanged(); + } else { + dataInfoBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000002; + return this; + } + public Builder mergeDataInfo(eu.dnetlib.data.proto.FieldTypeProtos.DataInfo value) { + if (dataInfoBuilder_ == null) { + if (((bitField0_ & 0x00000002) == 0x00000002) && + dataInfo_ != eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance()) { + dataInfo_ = + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.newBuilder(dataInfo_).mergeFrom(value).buildPartial(); + } else { + dataInfo_ = value; + } + onChanged(); + } else { + dataInfoBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000002; + return this; + } + public Builder clearDataInfo() { + if (dataInfoBuilder_ == null) { + dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); + onChanged(); + } else { + dataInfoBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000002); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder getDataInfoBuilder() { + bitField0_ |= 0x00000002; + onChanged(); + return getDataInfoFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder() { + if (dataInfoBuilder_ != null) { + return dataInfoBuilder_.getMessageOrBuilder(); + } else { + return dataInfo_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder> + getDataInfoFieldBuilder() { + if (dataInfoBuilder_ == null) { + dataInfoBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder>( + dataInfo_, + getParentForChildren(), + isClean()); + dataInfo_ = null; + } + return dataInfoBuilder_; + } + + // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.BoolField) + } + + static { + defaultInstance = new BoolField(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.BoolField) + } + + public interface IntFieldOrBuilder + extends com.google.protobuf.MessageOrBuilder { + + // required int32 value = 1; + boolean hasValue(); + int getValue(); + + // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 2; + boolean hasDataInfo(); + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo(); + eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder(); + } + public static final class IntField extends + com.google.protobuf.GeneratedMessage + implements IntFieldOrBuilder { + // Use IntField.newBuilder() to construct. + private IntField(Builder builder) { + super(builder); + } + private IntField(boolean noInit) {} + + private static final IntField defaultInstance; + public static IntField getDefaultInstance() { + return defaultInstance; + } + + public IntField getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_IntField_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_IntField_fieldAccessorTable; + } + + private int bitField0_; + // required int32 value = 1; + public static final int VALUE_FIELD_NUMBER = 1; + private int value_; + public boolean hasValue() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public int getValue() { + return value_; + } + + // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 2; + public static final int DATAINFO_FIELD_NUMBER = 2; + private eu.dnetlib.data.proto.FieldTypeProtos.DataInfo dataInfo_; + public boolean hasDataInfo() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo() { + return dataInfo_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder() { + return dataInfo_; + } + + private void initFields() { + value_ = 0; + dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + if (!hasValue()) { + memoizedIsInitialized = 0; + return false; + } + if (hasDataInfo()) { + if (!getDataInfo().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeInt32(1, value_); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + output.writeMessage(2, dataInfo_); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(1, value_); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(2, dataInfo_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static eu.dnetlib.data.proto.FieldTypeProtos.IntField parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.IntField parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.IntField parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.IntField parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.IntField parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.IntField parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.IntField parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.FieldTypeProtos.IntField parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.FieldTypeProtos.IntField parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.IntField parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(eu.dnetlib.data.proto.FieldTypeProtos.IntField prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder + implements eu.dnetlib.data.proto.FieldTypeProtos.IntFieldOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_IntField_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_IntField_fieldAccessorTable; + } + + // Construct using eu.dnetlib.data.proto.FieldTypeProtos.IntField.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getDataInfoFieldBuilder(); + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + value_ = 0; + bitField0_ = (bitField0_ & ~0x00000001); + if (dataInfoBuilder_ == null) { + dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); + } else { + dataInfoBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000002); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return eu.dnetlib.data.proto.FieldTypeProtos.IntField.getDescriptor(); + } + + public eu.dnetlib.data.proto.FieldTypeProtos.IntField getDefaultInstanceForType() { + return eu.dnetlib.data.proto.FieldTypeProtos.IntField.getDefaultInstance(); + } + + public eu.dnetlib.data.proto.FieldTypeProtos.IntField build() { + eu.dnetlib.data.proto.FieldTypeProtos.IntField result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + private eu.dnetlib.data.proto.FieldTypeProtos.IntField buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + eu.dnetlib.data.proto.FieldTypeProtos.IntField result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return result; + } + + public eu.dnetlib.data.proto.FieldTypeProtos.IntField buildPartial() { + eu.dnetlib.data.proto.FieldTypeProtos.IntField result = new eu.dnetlib.data.proto.FieldTypeProtos.IntField(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + result.value_ = value_; + if (((from_bitField0_ & 0x00000002) == 0x00000002)) { + to_bitField0_ |= 0x00000002; + } + if (dataInfoBuilder_ == null) { + result.dataInfo_ = dataInfo_; + } else { + result.dataInfo_ = dataInfoBuilder_.build(); + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof eu.dnetlib.data.proto.FieldTypeProtos.IntField) { + return mergeFrom((eu.dnetlib.data.proto.FieldTypeProtos.IntField)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(eu.dnetlib.data.proto.FieldTypeProtos.IntField other) { + if (other == eu.dnetlib.data.proto.FieldTypeProtos.IntField.getDefaultInstance()) return this; + if (other.hasValue()) { + setValue(other.getValue()); + } + if (other.hasDataInfo()) { + mergeDataInfo(other.getDataInfo()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + if (!hasValue()) { + + return false; + } + if (hasDataInfo()) { + if (!getDataInfo().isInitialized()) { + + return false; + } + } + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + } + break; + } + case 8: { + bitField0_ |= 0x00000001; + value_ = input.readInt32(); + break; + } + case 18: { + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.newBuilder(); + if (hasDataInfo()) { + subBuilder.mergeFrom(getDataInfo()); + } + input.readMessage(subBuilder, extensionRegistry); + setDataInfo(subBuilder.buildPartial()); + break; + } + } + } + } + + private int bitField0_; + + // required int32 value = 1; + private int value_ ; + public boolean hasValue() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public int getValue() { + return value_; + } + public Builder setValue(int value) { + bitField0_ |= 0x00000001; + value_ = value; + onChanged(); + return this; + } + public Builder clearValue() { + bitField0_ = (bitField0_ & ~0x00000001); + value_ = 0; + onChanged(); + return this; + } + + // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 2; + private eu.dnetlib.data.proto.FieldTypeProtos.DataInfo dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder> dataInfoBuilder_; + public boolean hasDataInfo() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo() { + if (dataInfoBuilder_ == null) { + return dataInfo_; + } else { + return dataInfoBuilder_.getMessage(); + } + } + public Builder setDataInfo(eu.dnetlib.data.proto.FieldTypeProtos.DataInfo value) { + if (dataInfoBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + dataInfo_ = value; + onChanged(); + } else { + dataInfoBuilder_.setMessage(value); + } + bitField0_ |= 0x00000002; + return this; + } + public Builder setDataInfo( + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder builderForValue) { + if (dataInfoBuilder_ == null) { + dataInfo_ = builderForValue.build(); + onChanged(); + } else { + dataInfoBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000002; + return this; + } + public Builder mergeDataInfo(eu.dnetlib.data.proto.FieldTypeProtos.DataInfo value) { + if (dataInfoBuilder_ == null) { + if (((bitField0_ & 0x00000002) == 0x00000002) && + dataInfo_ != eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance()) { + dataInfo_ = + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.newBuilder(dataInfo_).mergeFrom(value).buildPartial(); + } else { + dataInfo_ = value; + } + onChanged(); + } else { + dataInfoBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000002; + return this; + } + public Builder clearDataInfo() { + if (dataInfoBuilder_ == null) { + dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); + onChanged(); + } else { + dataInfoBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000002); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder getDataInfoBuilder() { + bitField0_ |= 0x00000002; + onChanged(); + return getDataInfoFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder() { + if (dataInfoBuilder_ != null) { + return dataInfoBuilder_.getMessageOrBuilder(); + } else { + return dataInfo_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder> + getDataInfoFieldBuilder() { + if (dataInfoBuilder_ == null) { + dataInfoBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder>( + dataInfo_, + getParentForChildren(), + isClean()); + dataInfo_ = null; + } + return dataInfoBuilder_; + } + + // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.IntField) + } + + static { + defaultInstance = new IntField(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.IntField) + } + + public interface StructuredPropertyOrBuilder + extends com.google.protobuf.MessageOrBuilder { + + // required string value = 1; + boolean hasValue(); + String getValue(); + + // optional .eu.dnetlib.data.proto.Qualifier qualifier = 2; + boolean hasQualifier(); + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getQualifier(); + eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getQualifierOrBuilder(); + + // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 3; + boolean hasDataInfo(); + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo(); + eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder(); + } + public static final class StructuredProperty extends + com.google.protobuf.GeneratedMessage + implements StructuredPropertyOrBuilder { + // Use StructuredProperty.newBuilder() to construct. + private StructuredProperty(Builder builder) { + super(builder); + } + private StructuredProperty(boolean noInit) {} + + private static final StructuredProperty defaultInstance; + public static StructuredProperty getDefaultInstance() { + return defaultInstance; + } + + public StructuredProperty getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_StructuredProperty_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_StructuredProperty_fieldAccessorTable; + } + + private int bitField0_; + // required string value = 1; + public static final int VALUE_FIELD_NUMBER = 1; + private java.lang.Object value_; + public boolean hasValue() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public String getValue() { + java.lang.Object ref = value_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + value_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getValueBytes() { + java.lang.Object ref = value_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + value_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // optional .eu.dnetlib.data.proto.Qualifier qualifier = 2; + public static final int QUALIFIER_FIELD_NUMBER = 2; + private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier qualifier_; + public boolean hasQualifier() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getQualifier() { + return qualifier_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getQualifierOrBuilder() { + return qualifier_; + } + + // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 3; + public static final int DATAINFO_FIELD_NUMBER = 3; + private eu.dnetlib.data.proto.FieldTypeProtos.DataInfo dataInfo_; + public boolean hasDataInfo() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo() { + return dataInfo_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder() { + return dataInfo_; + } + + private void initFields() { + value_ = ""; + qualifier_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + if (!hasValue()) { + memoizedIsInitialized = 0; + return false; + } + if (hasQualifier()) { + if (!getQualifier().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasDataInfo()) { + if (!getDataInfo().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeBytes(1, getValueBytes()); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + output.writeMessage(2, qualifier_); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + output.writeMessage(3, dataInfo_); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(1, getValueBytes()); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(2, qualifier_); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(3, dataInfo_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder + implements eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_StructuredProperty_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_StructuredProperty_fieldAccessorTable; + } + + // Construct using eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getQualifierFieldBuilder(); + getDataInfoFieldBuilder(); + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + value_ = ""; + bitField0_ = (bitField0_ & ~0x00000001); + if (qualifierBuilder_ == null) { + qualifier_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + } else { + qualifierBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000002); + if (dataInfoBuilder_ == null) { + dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); + } else { + dataInfoBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000004); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.getDescriptor(); + } + + public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty getDefaultInstanceForType() { + return eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.getDefaultInstance(); + } + + public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty build() { + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + private eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return result; + } + + public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty buildPartial() { + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty result = new eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + result.value_ = value_; + if (((from_bitField0_ & 0x00000002) == 0x00000002)) { + to_bitField0_ |= 0x00000002; + } + if (qualifierBuilder_ == null) { + result.qualifier_ = qualifier_; + } else { + result.qualifier_ = qualifierBuilder_.build(); + } + if (((from_bitField0_ & 0x00000004) == 0x00000004)) { + to_bitField0_ |= 0x00000004; + } + if (dataInfoBuilder_ == null) { + result.dataInfo_ = dataInfo_; + } else { + result.dataInfo_ = dataInfoBuilder_.build(); + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty) { + return mergeFrom((eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty other) { + if (other == eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.getDefaultInstance()) return this; + if (other.hasValue()) { + setValue(other.getValue()); + } + if (other.hasQualifier()) { + mergeQualifier(other.getQualifier()); + } + if (other.hasDataInfo()) { + mergeDataInfo(other.getDataInfo()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + if (!hasValue()) { + + return false; + } + if (hasQualifier()) { + if (!getQualifier().isInitialized()) { + + return false; + } + } + if (hasDataInfo()) { + if (!getDataInfo().isInitialized()) { + + return false; + } + } + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + } + break; + } + case 10: { + bitField0_ |= 0x00000001; + value_ = input.readBytes(); + break; + } + case 18: { + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(); + if (hasQualifier()) { + subBuilder.mergeFrom(getQualifier()); + } + input.readMessage(subBuilder, extensionRegistry); + setQualifier(subBuilder.buildPartial()); + break; + } + case 26: { + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.newBuilder(); + if (hasDataInfo()) { + subBuilder.mergeFrom(getDataInfo()); + } + input.readMessage(subBuilder, extensionRegistry); + setDataInfo(subBuilder.buildPartial()); + break; + } + } + } + } + + private int bitField0_; + + // required string value = 1; + private java.lang.Object value_ = ""; + public boolean hasValue() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public String getValue() { + java.lang.Object ref = value_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + value_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setValue(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + value_ = value; + onChanged(); + return this; + } + public Builder clearValue() { + bitField0_ = (bitField0_ & ~0x00000001); + value_ = getDefaultInstance().getValue(); + onChanged(); + return this; + } + void setValue(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000001; + value_ = value; + onChanged(); + } + + // optional .eu.dnetlib.data.proto.Qualifier qualifier = 2; + private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier qualifier_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> qualifierBuilder_; + public boolean hasQualifier() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getQualifier() { + if (qualifierBuilder_ == null) { + return qualifier_; + } else { + return qualifierBuilder_.getMessage(); + } + } + public Builder setQualifier(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { + if (qualifierBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + qualifier_ = value; + onChanged(); + } else { + qualifierBuilder_.setMessage(value); + } + bitField0_ |= 0x00000002; + return this; + } + public Builder setQualifier( + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder builderForValue) { + if (qualifierBuilder_ == null) { + qualifier_ = builderForValue.build(); + onChanged(); + } else { + qualifierBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000002; + return this; + } + public Builder mergeQualifier(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { + if (qualifierBuilder_ == null) { + if (((bitField0_ & 0x00000002) == 0x00000002) && + qualifier_ != eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance()) { + qualifier_ = + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(qualifier_).mergeFrom(value).buildPartial(); + } else { + qualifier_ = value; + } + onChanged(); + } else { + qualifierBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000002; + return this; + } + public Builder clearQualifier() { + if (qualifierBuilder_ == null) { + qualifier_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + onChanged(); + } else { + qualifierBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000002); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder getQualifierBuilder() { + bitField0_ |= 0x00000002; + onChanged(); + return getQualifierFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getQualifierOrBuilder() { + if (qualifierBuilder_ != null) { + return qualifierBuilder_.getMessageOrBuilder(); + } else { + return qualifier_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> + getQualifierFieldBuilder() { + if (qualifierBuilder_ == null) { + qualifierBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder>( + qualifier_, + getParentForChildren(), + isClean()); + qualifier_ = null; + } + return qualifierBuilder_; + } + + // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 3; + private eu.dnetlib.data.proto.FieldTypeProtos.DataInfo dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder> dataInfoBuilder_; + public boolean hasDataInfo() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo() { + if (dataInfoBuilder_ == null) { + return dataInfo_; + } else { + return dataInfoBuilder_.getMessage(); + } + } + public Builder setDataInfo(eu.dnetlib.data.proto.FieldTypeProtos.DataInfo value) { + if (dataInfoBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + dataInfo_ = value; + onChanged(); + } else { + dataInfoBuilder_.setMessage(value); + } + bitField0_ |= 0x00000004; + return this; + } + public Builder setDataInfo( + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder builderForValue) { + if (dataInfoBuilder_ == null) { + dataInfo_ = builderForValue.build(); + onChanged(); + } else { + dataInfoBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000004; + return this; + } + public Builder mergeDataInfo(eu.dnetlib.data.proto.FieldTypeProtos.DataInfo value) { + if (dataInfoBuilder_ == null) { + if (((bitField0_ & 0x00000004) == 0x00000004) && + dataInfo_ != eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance()) { + dataInfo_ = + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.newBuilder(dataInfo_).mergeFrom(value).buildPartial(); + } else { + dataInfo_ = value; + } + onChanged(); + } else { + dataInfoBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000004; + return this; + } + public Builder clearDataInfo() { + if (dataInfoBuilder_ == null) { + dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); + onChanged(); + } else { + dataInfoBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000004); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder getDataInfoBuilder() { + bitField0_ |= 0x00000004; + onChanged(); + return getDataInfoFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder() { + if (dataInfoBuilder_ != null) { + return dataInfoBuilder_.getMessageOrBuilder(); + } else { + return dataInfo_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder> + getDataInfoFieldBuilder() { + if (dataInfoBuilder_ == null) { + dataInfoBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder>( + dataInfo_, + getParentForChildren(), + isClean()); + dataInfo_ = null; + } + return dataInfoBuilder_; + } + + // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.StructuredProperty) + } + + static { + defaultInstance = new StructuredProperty(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.StructuredProperty) + } + + public interface KeyValueOrBuilder + extends com.google.protobuf.MessageOrBuilder { + + // required string key = 1; + boolean hasKey(); + String getKey(); + + // optional string value = 2; + boolean hasValue(); + String getValue(); + + // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 3; + boolean hasDataInfo(); + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo(); + eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder(); + } + public static final class KeyValue extends + com.google.protobuf.GeneratedMessage + implements KeyValueOrBuilder { + // Use KeyValue.newBuilder() to construct. + private KeyValue(Builder builder) { + super(builder); + } + private KeyValue(boolean noInit) {} + + private static final KeyValue defaultInstance; + public static KeyValue getDefaultInstance() { + return defaultInstance; + } + + public KeyValue getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_KeyValue_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_KeyValue_fieldAccessorTable; + } + + private int bitField0_; + // required string key = 1; + public static final int KEY_FIELD_NUMBER = 1; + private java.lang.Object key_; + public boolean hasKey() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public String getKey() { + java.lang.Object ref = key_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + key_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getKeyBytes() { + java.lang.Object ref = key_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + key_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // optional string value = 2; + public static final int VALUE_FIELD_NUMBER = 2; + private java.lang.Object value_; + public boolean hasValue() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public String getValue() { + java.lang.Object ref = value_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + value_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getValueBytes() { + java.lang.Object ref = value_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + value_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 3; + public static final int DATAINFO_FIELD_NUMBER = 3; + private eu.dnetlib.data.proto.FieldTypeProtos.DataInfo dataInfo_; + public boolean hasDataInfo() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo() { + return dataInfo_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder() { + return dataInfo_; + } + + private void initFields() { + key_ = ""; + value_ = ""; + dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + if (!hasKey()) { + memoizedIsInitialized = 0; + return false; + } + if (hasDataInfo()) { + if (!getDataInfo().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeBytes(1, getKeyBytes()); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + output.writeBytes(2, getValueBytes()); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + output.writeMessage(3, dataInfo_); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(1, getKeyBytes()); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(2, getValueBytes()); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(3, dataInfo_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static eu.dnetlib.data.proto.FieldTypeProtos.KeyValue parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.KeyValue parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.KeyValue parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.KeyValue parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.KeyValue parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.KeyValue parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.KeyValue parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.FieldTypeProtos.KeyValue parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.FieldTypeProtos.KeyValue parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.KeyValue parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(eu.dnetlib.data.proto.FieldTypeProtos.KeyValue prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder + implements eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_KeyValue_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_KeyValue_fieldAccessorTable; + } + + // Construct using eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getDataInfoFieldBuilder(); + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + key_ = ""; + bitField0_ = (bitField0_ & ~0x00000001); + value_ = ""; + bitField0_ = (bitField0_ & ~0x00000002); + if (dataInfoBuilder_ == null) { + dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); + } else { + dataInfoBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000004); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.getDescriptor(); + } + + public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue getDefaultInstanceForType() { + return eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.getDefaultInstance(); + } + + public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue build() { + eu.dnetlib.data.proto.FieldTypeProtos.KeyValue result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + private eu.dnetlib.data.proto.FieldTypeProtos.KeyValue buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + eu.dnetlib.data.proto.FieldTypeProtos.KeyValue result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return result; + } + + public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue buildPartial() { + eu.dnetlib.data.proto.FieldTypeProtos.KeyValue result = new eu.dnetlib.data.proto.FieldTypeProtos.KeyValue(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + result.key_ = key_; + if (((from_bitField0_ & 0x00000002) == 0x00000002)) { + to_bitField0_ |= 0x00000002; + } + result.value_ = value_; + if (((from_bitField0_ & 0x00000004) == 0x00000004)) { + to_bitField0_ |= 0x00000004; + } + if (dataInfoBuilder_ == null) { + result.dataInfo_ = dataInfo_; + } else { + result.dataInfo_ = dataInfoBuilder_.build(); + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof eu.dnetlib.data.proto.FieldTypeProtos.KeyValue) { + return mergeFrom((eu.dnetlib.data.proto.FieldTypeProtos.KeyValue)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(eu.dnetlib.data.proto.FieldTypeProtos.KeyValue other) { + if (other == eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.getDefaultInstance()) return this; + if (other.hasKey()) { + setKey(other.getKey()); + } + if (other.hasValue()) { + setValue(other.getValue()); + } + if (other.hasDataInfo()) { + mergeDataInfo(other.getDataInfo()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + if (!hasKey()) { + + return false; + } + if (hasDataInfo()) { + if (!getDataInfo().isInitialized()) { + + return false; + } + } + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + } + break; + } + case 10: { + bitField0_ |= 0x00000001; + key_ = input.readBytes(); + break; + } + case 18: { + bitField0_ |= 0x00000002; + value_ = input.readBytes(); + break; + } + case 26: { + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.newBuilder(); + if (hasDataInfo()) { + subBuilder.mergeFrom(getDataInfo()); + } + input.readMessage(subBuilder, extensionRegistry); + setDataInfo(subBuilder.buildPartial()); + break; + } + } + } + } + + private int bitField0_; + + // required string key = 1; + private java.lang.Object key_ = ""; + public boolean hasKey() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public String getKey() { + java.lang.Object ref = key_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + key_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setKey(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + key_ = value; + onChanged(); + return this; + } + public Builder clearKey() { + bitField0_ = (bitField0_ & ~0x00000001); + key_ = getDefaultInstance().getKey(); + onChanged(); + return this; + } + void setKey(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000001; + key_ = value; + onChanged(); + } + + // optional string value = 2; + private java.lang.Object value_ = ""; + public boolean hasValue() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public String getValue() { + java.lang.Object ref = value_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + value_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setValue(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + value_ = value; + onChanged(); + return this; + } + public Builder clearValue() { + bitField0_ = (bitField0_ & ~0x00000002); + value_ = getDefaultInstance().getValue(); + onChanged(); + return this; + } + void setValue(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000002; + value_ = value; + onChanged(); + } + + // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 3; + private eu.dnetlib.data.proto.FieldTypeProtos.DataInfo dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder> dataInfoBuilder_; + public boolean hasDataInfo() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo() { + if (dataInfoBuilder_ == null) { + return dataInfo_; + } else { + return dataInfoBuilder_.getMessage(); + } + } + public Builder setDataInfo(eu.dnetlib.data.proto.FieldTypeProtos.DataInfo value) { + if (dataInfoBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + dataInfo_ = value; + onChanged(); + } else { + dataInfoBuilder_.setMessage(value); + } + bitField0_ |= 0x00000004; + return this; + } + public Builder setDataInfo( + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder builderForValue) { + if (dataInfoBuilder_ == null) { + dataInfo_ = builderForValue.build(); + onChanged(); + } else { + dataInfoBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000004; + return this; + } + public Builder mergeDataInfo(eu.dnetlib.data.proto.FieldTypeProtos.DataInfo value) { + if (dataInfoBuilder_ == null) { + if (((bitField0_ & 0x00000004) == 0x00000004) && + dataInfo_ != eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance()) { + dataInfo_ = + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.newBuilder(dataInfo_).mergeFrom(value).buildPartial(); + } else { + dataInfo_ = value; + } + onChanged(); + } else { + dataInfoBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000004; + return this; + } + public Builder clearDataInfo() { + if (dataInfoBuilder_ == null) { + dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); + onChanged(); + } else { + dataInfoBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000004); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder getDataInfoBuilder() { + bitField0_ |= 0x00000004; + onChanged(); + return getDataInfoFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder() { + if (dataInfoBuilder_ != null) { + return dataInfoBuilder_.getMessageOrBuilder(); + } else { + return dataInfo_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder> + getDataInfoFieldBuilder() { + if (dataInfoBuilder_ == null) { + dataInfoBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder>( + dataInfo_, + getParentForChildren(), + isClean()); + dataInfo_ = null; + } + return dataInfoBuilder_; + } + + // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.KeyValue) + } + + static { + defaultInstance = new KeyValue(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.KeyValue) + } + + public interface QualifierOrBuilder + extends com.google.protobuf.MessageOrBuilder { + + // optional string classid = 1; + boolean hasClassid(); + String getClassid(); + + // optional string classname = 2; + boolean hasClassname(); + String getClassname(); + + // optional string schemeid = 3; + boolean hasSchemeid(); + String getSchemeid(); + + // optional string schemename = 4; + boolean hasSchemename(); + String getSchemename(); + + // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 5; + boolean hasDataInfo(); + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo(); + eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder(); + } + public static final class Qualifier extends + com.google.protobuf.GeneratedMessage + implements QualifierOrBuilder { + // Use Qualifier.newBuilder() to construct. + private Qualifier(Builder builder) { + super(builder); + } + private Qualifier(boolean noInit) {} + + private static final Qualifier defaultInstance; + public static Qualifier getDefaultInstance() { + return defaultInstance; + } + + public Qualifier getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_Qualifier_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_Qualifier_fieldAccessorTable; + } + + private int bitField0_; + // optional string classid = 1; + public static final int CLASSID_FIELD_NUMBER = 1; + private java.lang.Object classid_; + public boolean hasClassid() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public String getClassid() { + java.lang.Object ref = classid_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + classid_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getClassidBytes() { + java.lang.Object ref = classid_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + classid_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // optional string classname = 2; + public static final int CLASSNAME_FIELD_NUMBER = 2; + private java.lang.Object classname_; + public boolean hasClassname() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public String getClassname() { + java.lang.Object ref = classname_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + classname_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getClassnameBytes() { + java.lang.Object ref = classname_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + classname_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // optional string schemeid = 3; + public static final int SCHEMEID_FIELD_NUMBER = 3; + private java.lang.Object schemeid_; + public boolean hasSchemeid() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + public String getSchemeid() { + java.lang.Object ref = schemeid_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + schemeid_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getSchemeidBytes() { + java.lang.Object ref = schemeid_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + schemeid_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // optional string schemename = 4; + public static final int SCHEMENAME_FIELD_NUMBER = 4; + private java.lang.Object schemename_; + public boolean hasSchemename() { + return ((bitField0_ & 0x00000008) == 0x00000008); + } + public String getSchemename() { + java.lang.Object ref = schemename_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + schemename_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getSchemenameBytes() { + java.lang.Object ref = schemename_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + schemename_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 5; + public static final int DATAINFO_FIELD_NUMBER = 5; + private eu.dnetlib.data.proto.FieldTypeProtos.DataInfo dataInfo_; + public boolean hasDataInfo() { + return ((bitField0_ & 0x00000010) == 0x00000010); + } + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo() { + return dataInfo_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder() { + return dataInfo_; + } + + private void initFields() { + classid_ = ""; + classname_ = ""; + schemeid_ = ""; + schemename_ = ""; + dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + if (hasDataInfo()) { + if (!getDataInfo().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeBytes(1, getClassidBytes()); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + output.writeBytes(2, getClassnameBytes()); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + output.writeBytes(3, getSchemeidBytes()); + } + if (((bitField0_ & 0x00000008) == 0x00000008)) { + output.writeBytes(4, getSchemenameBytes()); + } + if (((bitField0_ & 0x00000010) == 0x00000010)) { + output.writeMessage(5, dataInfo_); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(1, getClassidBytes()); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(2, getClassnameBytes()); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(3, getSchemeidBytes()); + } + if (((bitField0_ & 0x00000008) == 0x00000008)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(4, getSchemenameBytes()); + } + if (((bitField0_ & 0x00000010) == 0x00000010)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(5, dataInfo_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static eu.dnetlib.data.proto.FieldTypeProtos.Qualifier parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.Qualifier parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.Qualifier parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.Qualifier parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.Qualifier parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.Qualifier parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.Qualifier parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.FieldTypeProtos.Qualifier parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.FieldTypeProtos.Qualifier parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.Qualifier parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder + implements eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_Qualifier_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_Qualifier_fieldAccessorTable; + } + + // Construct using eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getDataInfoFieldBuilder(); + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + classid_ = ""; + bitField0_ = (bitField0_ & ~0x00000001); + classname_ = ""; + bitField0_ = (bitField0_ & ~0x00000002); + schemeid_ = ""; + bitField0_ = (bitField0_ & ~0x00000004); + schemename_ = ""; + bitField0_ = (bitField0_ & ~0x00000008); + if (dataInfoBuilder_ == null) { + dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); + } else { + dataInfoBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000010); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDescriptor(); + } + + public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getDefaultInstanceForType() { + return eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + } + + public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier build() { + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return result; + } + + public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier buildPartial() { + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier result = new eu.dnetlib.data.proto.FieldTypeProtos.Qualifier(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + result.classid_ = classid_; + if (((from_bitField0_ & 0x00000002) == 0x00000002)) { + to_bitField0_ |= 0x00000002; + } + result.classname_ = classname_; + if (((from_bitField0_ & 0x00000004) == 0x00000004)) { + to_bitField0_ |= 0x00000004; + } + result.schemeid_ = schemeid_; + if (((from_bitField0_ & 0x00000008) == 0x00000008)) { + to_bitField0_ |= 0x00000008; + } + result.schemename_ = schemename_; + if (((from_bitField0_ & 0x00000010) == 0x00000010)) { + to_bitField0_ |= 0x00000010; + } + if (dataInfoBuilder_ == null) { + result.dataInfo_ = dataInfo_; + } else { + result.dataInfo_ = dataInfoBuilder_.build(); + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof eu.dnetlib.data.proto.FieldTypeProtos.Qualifier) { + return mergeFrom((eu.dnetlib.data.proto.FieldTypeProtos.Qualifier)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier other) { + if (other == eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance()) return this; + if (other.hasClassid()) { + setClassid(other.getClassid()); + } + if (other.hasClassname()) { + setClassname(other.getClassname()); + } + if (other.hasSchemeid()) { + setSchemeid(other.getSchemeid()); + } + if (other.hasSchemename()) { + setSchemename(other.getSchemename()); + } + if (other.hasDataInfo()) { + mergeDataInfo(other.getDataInfo()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + if (hasDataInfo()) { + if (!getDataInfo().isInitialized()) { + + return false; + } + } + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + } + break; + } + case 10: { + bitField0_ |= 0x00000001; + classid_ = input.readBytes(); + break; + } + case 18: { + bitField0_ |= 0x00000002; + classname_ = input.readBytes(); + break; + } + case 26: { + bitField0_ |= 0x00000004; + schemeid_ = input.readBytes(); + break; + } + case 34: { + bitField0_ |= 0x00000008; + schemename_ = input.readBytes(); + break; + } + case 42: { + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.newBuilder(); + if (hasDataInfo()) { + subBuilder.mergeFrom(getDataInfo()); + } + input.readMessage(subBuilder, extensionRegistry); + setDataInfo(subBuilder.buildPartial()); + break; + } + } + } + } + + private int bitField0_; + + // optional string classid = 1; + private java.lang.Object classid_ = ""; + public boolean hasClassid() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public String getClassid() { + java.lang.Object ref = classid_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + classid_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setClassid(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + classid_ = value; + onChanged(); + return this; + } + public Builder clearClassid() { + bitField0_ = (bitField0_ & ~0x00000001); + classid_ = getDefaultInstance().getClassid(); + onChanged(); + return this; + } + void setClassid(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000001; + classid_ = value; + onChanged(); + } + + // optional string classname = 2; + private java.lang.Object classname_ = ""; + public boolean hasClassname() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public String getClassname() { + java.lang.Object ref = classname_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + classname_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setClassname(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + classname_ = value; + onChanged(); + return this; + } + public Builder clearClassname() { + bitField0_ = (bitField0_ & ~0x00000002); + classname_ = getDefaultInstance().getClassname(); + onChanged(); + return this; + } + void setClassname(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000002; + classname_ = value; + onChanged(); + } + + // optional string schemeid = 3; + private java.lang.Object schemeid_ = ""; + public boolean hasSchemeid() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + public String getSchemeid() { + java.lang.Object ref = schemeid_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + schemeid_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setSchemeid(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000004; + schemeid_ = value; + onChanged(); + return this; + } + public Builder clearSchemeid() { + bitField0_ = (bitField0_ & ~0x00000004); + schemeid_ = getDefaultInstance().getSchemeid(); + onChanged(); + return this; + } + void setSchemeid(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000004; + schemeid_ = value; + onChanged(); + } + + // optional string schemename = 4; + private java.lang.Object schemename_ = ""; + public boolean hasSchemename() { + return ((bitField0_ & 0x00000008) == 0x00000008); + } + public String getSchemename() { + java.lang.Object ref = schemename_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + schemename_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setSchemename(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000008; + schemename_ = value; + onChanged(); + return this; + } + public Builder clearSchemename() { + bitField0_ = (bitField0_ & ~0x00000008); + schemename_ = getDefaultInstance().getSchemename(); + onChanged(); + return this; + } + void setSchemename(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000008; + schemename_ = value; + onChanged(); + } + + // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 5; + private eu.dnetlib.data.proto.FieldTypeProtos.DataInfo dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder> dataInfoBuilder_; + public boolean hasDataInfo() { + return ((bitField0_ & 0x00000010) == 0x00000010); + } + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo() { + if (dataInfoBuilder_ == null) { + return dataInfo_; + } else { + return dataInfoBuilder_.getMessage(); + } + } + public Builder setDataInfo(eu.dnetlib.data.proto.FieldTypeProtos.DataInfo value) { + if (dataInfoBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + dataInfo_ = value; + onChanged(); + } else { + dataInfoBuilder_.setMessage(value); + } + bitField0_ |= 0x00000010; + return this; + } + public Builder setDataInfo( + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder builderForValue) { + if (dataInfoBuilder_ == null) { + dataInfo_ = builderForValue.build(); + onChanged(); + } else { + dataInfoBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000010; + return this; + } + public Builder mergeDataInfo(eu.dnetlib.data.proto.FieldTypeProtos.DataInfo value) { + if (dataInfoBuilder_ == null) { + if (((bitField0_ & 0x00000010) == 0x00000010) && + dataInfo_ != eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance()) { + dataInfo_ = + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.newBuilder(dataInfo_).mergeFrom(value).buildPartial(); + } else { + dataInfo_ = value; + } + onChanged(); + } else { + dataInfoBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000010; + return this; + } + public Builder clearDataInfo() { + if (dataInfoBuilder_ == null) { + dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); + onChanged(); + } else { + dataInfoBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000010); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder getDataInfoBuilder() { + bitField0_ |= 0x00000010; + onChanged(); + return getDataInfoFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder() { + if (dataInfoBuilder_ != null) { + return dataInfoBuilder_.getMessageOrBuilder(); + } else { + return dataInfo_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder> + getDataInfoFieldBuilder() { + if (dataInfoBuilder_ == null) { + dataInfoBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder>( + dataInfo_, + getParentForChildren(), + isClean()); + dataInfo_ = null; + } + return dataInfoBuilder_; + } + + // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.Qualifier) + } + + static { + defaultInstance = new Qualifier(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.Qualifier) + } + + public interface DataInfoOrBuilder + extends com.google.protobuf.MessageOrBuilder { + + // optional bool invisible = 6 [default = false]; + boolean hasInvisible(); + boolean getInvisible(); + + // optional bool inferred = 1; + boolean hasInferred(); + boolean getInferred(); + + // optional bool deletedbyinference = 2; + boolean hasDeletedbyinference(); + boolean getDeletedbyinference(); + + // optional string trust = 3; + boolean hasTrust(); + String getTrust(); + + // optional string inferenceprovenance = 4; + boolean hasInferenceprovenance(); + String getInferenceprovenance(); + + // required .eu.dnetlib.data.proto.Qualifier provenanceaction = 5; + boolean hasProvenanceaction(); + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getProvenanceaction(); + eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getProvenanceactionOrBuilder(); + } + public static final class DataInfo extends + com.google.protobuf.GeneratedMessage + implements DataInfoOrBuilder { + // Use DataInfo.newBuilder() to construct. + private DataInfo(Builder builder) { + super(builder); + } + private DataInfo(boolean noInit) {} + + private static final DataInfo defaultInstance; + public static DataInfo getDefaultInstance() { + return defaultInstance; + } + + public DataInfo getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_DataInfo_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_DataInfo_fieldAccessorTable; + } + + private int bitField0_; + // optional bool invisible = 6 [default = false]; + public static final int INVISIBLE_FIELD_NUMBER = 6; + private boolean invisible_; + public boolean hasInvisible() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public boolean getInvisible() { + return invisible_; + } + + // optional bool inferred = 1; + public static final int INFERRED_FIELD_NUMBER = 1; + private boolean inferred_; + public boolean hasInferred() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public boolean getInferred() { + return inferred_; + } + + // optional bool deletedbyinference = 2; + public static final int DELETEDBYINFERENCE_FIELD_NUMBER = 2; + private boolean deletedbyinference_; + public boolean hasDeletedbyinference() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + public boolean getDeletedbyinference() { + return deletedbyinference_; + } + + // optional string trust = 3; + public static final int TRUST_FIELD_NUMBER = 3; + private java.lang.Object trust_; + public boolean hasTrust() { + return ((bitField0_ & 0x00000008) == 0x00000008); + } + public String getTrust() { + java.lang.Object ref = trust_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + trust_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getTrustBytes() { + java.lang.Object ref = trust_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + trust_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // optional string inferenceprovenance = 4; + public static final int INFERENCEPROVENANCE_FIELD_NUMBER = 4; + private java.lang.Object inferenceprovenance_; + public boolean hasInferenceprovenance() { + return ((bitField0_ & 0x00000010) == 0x00000010); + } + public String getInferenceprovenance() { + java.lang.Object ref = inferenceprovenance_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + inferenceprovenance_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getInferenceprovenanceBytes() { + java.lang.Object ref = inferenceprovenance_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + inferenceprovenance_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // required .eu.dnetlib.data.proto.Qualifier provenanceaction = 5; + public static final int PROVENANCEACTION_FIELD_NUMBER = 5; + private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier provenanceaction_; + public boolean hasProvenanceaction() { + return ((bitField0_ & 0x00000020) == 0x00000020); + } + public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getProvenanceaction() { + return provenanceaction_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getProvenanceactionOrBuilder() { + return provenanceaction_; + } + + private void initFields() { + invisible_ = false; + inferred_ = false; + deletedbyinference_ = false; + trust_ = ""; + inferenceprovenance_ = ""; + provenanceaction_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + if (!hasProvenanceaction()) { + memoizedIsInitialized = 0; + return false; + } + if (!getProvenanceaction().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000002) == 0x00000002)) { + output.writeBool(1, inferred_); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + output.writeBool(2, deletedbyinference_); + } + if (((bitField0_ & 0x00000008) == 0x00000008)) { + output.writeBytes(3, getTrustBytes()); + } + if (((bitField0_ & 0x00000010) == 0x00000010)) { + output.writeBytes(4, getInferenceprovenanceBytes()); + } + if (((bitField0_ & 0x00000020) == 0x00000020)) { + output.writeMessage(5, provenanceaction_); + } + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeBool(6, invisible_); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000002) == 0x00000002)) { + size += com.google.protobuf.CodedOutputStream + .computeBoolSize(1, inferred_); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + size += com.google.protobuf.CodedOutputStream + .computeBoolSize(2, deletedbyinference_); + } + if (((bitField0_ & 0x00000008) == 0x00000008)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(3, getTrustBytes()); + } + if (((bitField0_ & 0x00000010) == 0x00000010)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(4, getInferenceprovenanceBytes()); + } + if (((bitField0_ & 0x00000020) == 0x00000020)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(5, provenanceaction_); + } + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeBoolSize(6, invisible_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static eu.dnetlib.data.proto.FieldTypeProtos.DataInfo parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.DataInfo parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.DataInfo parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.DataInfo parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.DataInfo parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.DataInfo parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.DataInfo parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.FieldTypeProtos.DataInfo parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.FieldTypeProtos.DataInfo parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.DataInfo parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(eu.dnetlib.data.proto.FieldTypeProtos.DataInfo prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder + implements eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_DataInfo_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_DataInfo_fieldAccessorTable; + } + + // Construct using eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getProvenanceactionFieldBuilder(); + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + invisible_ = false; + bitField0_ = (bitField0_ & ~0x00000001); + inferred_ = false; + bitField0_ = (bitField0_ & ~0x00000002); + deletedbyinference_ = false; + bitField0_ = (bitField0_ & ~0x00000004); + trust_ = ""; + bitField0_ = (bitField0_ & ~0x00000008); + inferenceprovenance_ = ""; + bitField0_ = (bitField0_ & ~0x00000010); + if (provenanceactionBuilder_ == null) { + provenanceaction_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + } else { + provenanceactionBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000020); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDescriptor(); + } + + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDefaultInstanceForType() { + return eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); + } + + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo build() { + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + private eu.dnetlib.data.proto.FieldTypeProtos.DataInfo buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return result; + } + + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo buildPartial() { + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo result = new eu.dnetlib.data.proto.FieldTypeProtos.DataInfo(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + result.invisible_ = invisible_; + if (((from_bitField0_ & 0x00000002) == 0x00000002)) { + to_bitField0_ |= 0x00000002; + } + result.inferred_ = inferred_; + if (((from_bitField0_ & 0x00000004) == 0x00000004)) { + to_bitField0_ |= 0x00000004; + } + result.deletedbyinference_ = deletedbyinference_; + if (((from_bitField0_ & 0x00000008) == 0x00000008)) { + to_bitField0_ |= 0x00000008; + } + result.trust_ = trust_; + if (((from_bitField0_ & 0x00000010) == 0x00000010)) { + to_bitField0_ |= 0x00000010; + } + result.inferenceprovenance_ = inferenceprovenance_; + if (((from_bitField0_ & 0x00000020) == 0x00000020)) { + to_bitField0_ |= 0x00000020; + } + if (provenanceactionBuilder_ == null) { + result.provenanceaction_ = provenanceaction_; + } else { + result.provenanceaction_ = provenanceactionBuilder_.build(); + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof eu.dnetlib.data.proto.FieldTypeProtos.DataInfo) { + return mergeFrom((eu.dnetlib.data.proto.FieldTypeProtos.DataInfo)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(eu.dnetlib.data.proto.FieldTypeProtos.DataInfo other) { + if (other == eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance()) return this; + if (other.hasInvisible()) { + setInvisible(other.getInvisible()); + } + if (other.hasInferred()) { + setInferred(other.getInferred()); + } + if (other.hasDeletedbyinference()) { + setDeletedbyinference(other.getDeletedbyinference()); + } + if (other.hasTrust()) { + setTrust(other.getTrust()); + } + if (other.hasInferenceprovenance()) { + setInferenceprovenance(other.getInferenceprovenance()); + } + if (other.hasProvenanceaction()) { + mergeProvenanceaction(other.getProvenanceaction()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + if (!hasProvenanceaction()) { + + return false; + } + if (!getProvenanceaction().isInitialized()) { + + return false; + } + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + } + break; + } + case 8: { + bitField0_ |= 0x00000002; + inferred_ = input.readBool(); + break; + } + case 16: { + bitField0_ |= 0x00000004; + deletedbyinference_ = input.readBool(); + break; + } + case 26: { + bitField0_ |= 0x00000008; + trust_ = input.readBytes(); + break; + } + case 34: { + bitField0_ |= 0x00000010; + inferenceprovenance_ = input.readBytes(); + break; + } + case 42: { + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(); + if (hasProvenanceaction()) { + subBuilder.mergeFrom(getProvenanceaction()); + } + input.readMessage(subBuilder, extensionRegistry); + setProvenanceaction(subBuilder.buildPartial()); + break; + } + case 48: { + bitField0_ |= 0x00000001; + invisible_ = input.readBool(); + break; + } + } + } + } + + private int bitField0_; + + // optional bool invisible = 6 [default = false]; + private boolean invisible_ ; + public boolean hasInvisible() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public boolean getInvisible() { + return invisible_; + } + public Builder setInvisible(boolean value) { + bitField0_ |= 0x00000001; + invisible_ = value; + onChanged(); + return this; + } + public Builder clearInvisible() { + bitField0_ = (bitField0_ & ~0x00000001); + invisible_ = false; + onChanged(); + return this; + } + + // optional bool inferred = 1; + private boolean inferred_ ; + public boolean hasInferred() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public boolean getInferred() { + return inferred_; + } + public Builder setInferred(boolean value) { + bitField0_ |= 0x00000002; + inferred_ = value; + onChanged(); + return this; + } + public Builder clearInferred() { + bitField0_ = (bitField0_ & ~0x00000002); + inferred_ = false; + onChanged(); + return this; + } + + // optional bool deletedbyinference = 2; + private boolean deletedbyinference_ ; + public boolean hasDeletedbyinference() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + public boolean getDeletedbyinference() { + return deletedbyinference_; + } + public Builder setDeletedbyinference(boolean value) { + bitField0_ |= 0x00000004; + deletedbyinference_ = value; + onChanged(); + return this; + } + public Builder clearDeletedbyinference() { + bitField0_ = (bitField0_ & ~0x00000004); + deletedbyinference_ = false; + onChanged(); + return this; + } + + // optional string trust = 3; + private java.lang.Object trust_ = ""; + public boolean hasTrust() { + return ((bitField0_ & 0x00000008) == 0x00000008); + } + public String getTrust() { + java.lang.Object ref = trust_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + trust_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setTrust(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000008; + trust_ = value; + onChanged(); + return this; + } + public Builder clearTrust() { + bitField0_ = (bitField0_ & ~0x00000008); + trust_ = getDefaultInstance().getTrust(); + onChanged(); + return this; + } + void setTrust(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000008; + trust_ = value; + onChanged(); + } + + // optional string inferenceprovenance = 4; + private java.lang.Object inferenceprovenance_ = ""; + public boolean hasInferenceprovenance() { + return ((bitField0_ & 0x00000010) == 0x00000010); + } + public String getInferenceprovenance() { + java.lang.Object ref = inferenceprovenance_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + inferenceprovenance_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setInferenceprovenance(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000010; + inferenceprovenance_ = value; + onChanged(); + return this; + } + public Builder clearInferenceprovenance() { + bitField0_ = (bitField0_ & ~0x00000010); + inferenceprovenance_ = getDefaultInstance().getInferenceprovenance(); + onChanged(); + return this; + } + void setInferenceprovenance(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000010; + inferenceprovenance_ = value; + onChanged(); + } + + // required .eu.dnetlib.data.proto.Qualifier provenanceaction = 5; + private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier provenanceaction_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> provenanceactionBuilder_; + public boolean hasProvenanceaction() { + return ((bitField0_ & 0x00000020) == 0x00000020); + } + public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getProvenanceaction() { + if (provenanceactionBuilder_ == null) { + return provenanceaction_; + } else { + return provenanceactionBuilder_.getMessage(); + } + } + public Builder setProvenanceaction(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { + if (provenanceactionBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + provenanceaction_ = value; + onChanged(); + } else { + provenanceactionBuilder_.setMessage(value); + } + bitField0_ |= 0x00000020; + return this; + } + public Builder setProvenanceaction( + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder builderForValue) { + if (provenanceactionBuilder_ == null) { + provenanceaction_ = builderForValue.build(); + onChanged(); + } else { + provenanceactionBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000020; + return this; + } + public Builder mergeProvenanceaction(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { + if (provenanceactionBuilder_ == null) { + if (((bitField0_ & 0x00000020) == 0x00000020) && + provenanceaction_ != eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance()) { + provenanceaction_ = + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(provenanceaction_).mergeFrom(value).buildPartial(); + } else { + provenanceaction_ = value; + } + onChanged(); + } else { + provenanceactionBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000020; + return this; + } + public Builder clearProvenanceaction() { + if (provenanceactionBuilder_ == null) { + provenanceaction_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + onChanged(); + } else { + provenanceactionBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000020); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder getProvenanceactionBuilder() { + bitField0_ |= 0x00000020; + onChanged(); + return getProvenanceactionFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getProvenanceactionOrBuilder() { + if (provenanceactionBuilder_ != null) { + return provenanceactionBuilder_.getMessageOrBuilder(); + } else { + return provenanceaction_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> + getProvenanceactionFieldBuilder() { + if (provenanceactionBuilder_ == null) { + provenanceactionBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder>( + provenanceaction_, + getParentForChildren(), + isClean()); + provenanceaction_ = null; + } + return provenanceactionBuilder_; + } + + // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.DataInfo) + } + + static { + defaultInstance = new DataInfo(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.DataInfo) + } + + public interface OAIProvenanceOrBuilder + extends com.google.protobuf.MessageOrBuilder { + + // optional .eu.dnetlib.data.proto.OAIProvenance.OriginDescription originDescription = 1; + boolean hasOriginDescription(); + eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription getOriginDescription(); + eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescriptionOrBuilder getOriginDescriptionOrBuilder(); + } + public static final class OAIProvenance extends + com.google.protobuf.GeneratedMessage + implements OAIProvenanceOrBuilder { + // Use OAIProvenance.newBuilder() to construct. + private OAIProvenance(Builder builder) { + super(builder); + } + private OAIProvenance(boolean noInit) {} + + private static final OAIProvenance defaultInstance; + public static OAIProvenance getDefaultInstance() { + return defaultInstance; + } + + public OAIProvenance getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_OAIProvenance_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_OAIProvenance_fieldAccessorTable; + } + + public interface OriginDescriptionOrBuilder + extends com.google.protobuf.MessageOrBuilder { + + // optional string harvestDate = 1; + boolean hasHarvestDate(); + String getHarvestDate(); + + // optional bool altered = 2 [default = true]; + boolean hasAltered(); + boolean getAltered(); + + // optional string baseURL = 3; + boolean hasBaseURL(); + String getBaseURL(); + + // optional string identifier = 4; + boolean hasIdentifier(); + String getIdentifier(); + + // optional string datestamp = 5; + boolean hasDatestamp(); + String getDatestamp(); + + // optional string metadataNamespace = 6; + boolean hasMetadataNamespace(); + String getMetadataNamespace(); + + // optional .eu.dnetlib.data.proto.OAIProvenance.OriginDescription originDescription = 7; + boolean hasOriginDescription(); + eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription getOriginDescription(); + eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescriptionOrBuilder getOriginDescriptionOrBuilder(); + } + public static final class OriginDescription extends + com.google.protobuf.GeneratedMessage + implements OriginDescriptionOrBuilder { + // Use OriginDescription.newBuilder() to construct. + private OriginDescription(Builder builder) { + super(builder); + } + private OriginDescription(boolean noInit) {} + + private static final OriginDescription defaultInstance; + public static OriginDescription getDefaultInstance() { + return defaultInstance; + } + + public OriginDescription getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_OAIProvenance_OriginDescription_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_OAIProvenance_OriginDescription_fieldAccessorTable; + } + + private int bitField0_; + // optional string harvestDate = 1; + public static final int HARVESTDATE_FIELD_NUMBER = 1; + private java.lang.Object harvestDate_; + public boolean hasHarvestDate() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public String getHarvestDate() { + java.lang.Object ref = harvestDate_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + harvestDate_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getHarvestDateBytes() { + java.lang.Object ref = harvestDate_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + harvestDate_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // optional bool altered = 2 [default = true]; + public static final int ALTERED_FIELD_NUMBER = 2; + private boolean altered_; + public boolean hasAltered() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public boolean getAltered() { + return altered_; + } + + // optional string baseURL = 3; + public static final int BASEURL_FIELD_NUMBER = 3; + private java.lang.Object baseURL_; + public boolean hasBaseURL() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + public String getBaseURL() { + java.lang.Object ref = baseURL_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + baseURL_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getBaseURLBytes() { + java.lang.Object ref = baseURL_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + baseURL_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // optional string identifier = 4; + public static final int IDENTIFIER_FIELD_NUMBER = 4; + private java.lang.Object identifier_; + public boolean hasIdentifier() { + return ((bitField0_ & 0x00000008) == 0x00000008); + } + public String getIdentifier() { + java.lang.Object ref = identifier_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + identifier_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getIdentifierBytes() { + java.lang.Object ref = identifier_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + identifier_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // optional string datestamp = 5; + public static final int DATESTAMP_FIELD_NUMBER = 5; + private java.lang.Object datestamp_; + public boolean hasDatestamp() { + return ((bitField0_ & 0x00000010) == 0x00000010); + } + public String getDatestamp() { + java.lang.Object ref = datestamp_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + datestamp_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getDatestampBytes() { + java.lang.Object ref = datestamp_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + datestamp_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // optional string metadataNamespace = 6; + public static final int METADATANAMESPACE_FIELD_NUMBER = 6; + private java.lang.Object metadataNamespace_; + public boolean hasMetadataNamespace() { + return ((bitField0_ & 0x00000020) == 0x00000020); + } + public String getMetadataNamespace() { + java.lang.Object ref = metadataNamespace_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + metadataNamespace_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getMetadataNamespaceBytes() { + java.lang.Object ref = metadataNamespace_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + metadataNamespace_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // optional .eu.dnetlib.data.proto.OAIProvenance.OriginDescription originDescription = 7; + public static final int ORIGINDESCRIPTION_FIELD_NUMBER = 7; + private eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription originDescription_; + public boolean hasOriginDescription() { + return ((bitField0_ & 0x00000040) == 0x00000040); + } + public eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription getOriginDescription() { + return originDescription_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescriptionOrBuilder getOriginDescriptionOrBuilder() { + return originDescription_; + } + + private void initFields() { + harvestDate_ = ""; + altered_ = true; + baseURL_ = ""; + identifier_ = ""; + datestamp_ = ""; + metadataNamespace_ = ""; + originDescription_ = eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.getDefaultInstance(); + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeBytes(1, getHarvestDateBytes()); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + output.writeBool(2, altered_); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + output.writeBytes(3, getBaseURLBytes()); + } + if (((bitField0_ & 0x00000008) == 0x00000008)) { + output.writeBytes(4, getIdentifierBytes()); + } + if (((bitField0_ & 0x00000010) == 0x00000010)) { + output.writeBytes(5, getDatestampBytes()); + } + if (((bitField0_ & 0x00000020) == 0x00000020)) { + output.writeBytes(6, getMetadataNamespaceBytes()); + } + if (((bitField0_ & 0x00000040) == 0x00000040)) { + output.writeMessage(7, originDescription_); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(1, getHarvestDateBytes()); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + size += com.google.protobuf.CodedOutputStream + .computeBoolSize(2, altered_); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(3, getBaseURLBytes()); + } + if (((bitField0_ & 0x00000008) == 0x00000008)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(4, getIdentifierBytes()); + } + if (((bitField0_ & 0x00000010) == 0x00000010)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(5, getDatestampBytes()); + } + if (((bitField0_ & 0x00000020) == 0x00000020)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(6, getMetadataNamespaceBytes()); + } + if (((bitField0_ & 0x00000040) == 0x00000040)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(7, originDescription_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder + implements eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescriptionOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_OAIProvenance_OriginDescription_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_OAIProvenance_OriginDescription_fieldAccessorTable; + } + + // Construct using eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getOriginDescriptionFieldBuilder(); + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + harvestDate_ = ""; + bitField0_ = (bitField0_ & ~0x00000001); + altered_ = true; + bitField0_ = (bitField0_ & ~0x00000002); + baseURL_ = ""; + bitField0_ = (bitField0_ & ~0x00000004); + identifier_ = ""; + bitField0_ = (bitField0_ & ~0x00000008); + datestamp_ = ""; + bitField0_ = (bitField0_ & ~0x00000010); + metadataNamespace_ = ""; + bitField0_ = (bitField0_ & ~0x00000020); + if (originDescriptionBuilder_ == null) { + originDescription_ = eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.getDefaultInstance(); + } else { + originDescriptionBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000040); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.getDescriptor(); + } + + public eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription getDefaultInstanceForType() { + return eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.getDefaultInstance(); + } + + public eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription build() { + eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + private eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return result; + } + + public eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription buildPartial() { + eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription result = new eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + result.harvestDate_ = harvestDate_; + if (((from_bitField0_ & 0x00000002) == 0x00000002)) { + to_bitField0_ |= 0x00000002; + } + result.altered_ = altered_; + if (((from_bitField0_ & 0x00000004) == 0x00000004)) { + to_bitField0_ |= 0x00000004; + } + result.baseURL_ = baseURL_; + if (((from_bitField0_ & 0x00000008) == 0x00000008)) { + to_bitField0_ |= 0x00000008; + } + result.identifier_ = identifier_; + if (((from_bitField0_ & 0x00000010) == 0x00000010)) { + to_bitField0_ |= 0x00000010; + } + result.datestamp_ = datestamp_; + if (((from_bitField0_ & 0x00000020) == 0x00000020)) { + to_bitField0_ |= 0x00000020; + } + result.metadataNamespace_ = metadataNamespace_; + if (((from_bitField0_ & 0x00000040) == 0x00000040)) { + to_bitField0_ |= 0x00000040; + } + if (originDescriptionBuilder_ == null) { + result.originDescription_ = originDescription_; + } else { + result.originDescription_ = originDescriptionBuilder_.build(); + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription) { + return mergeFrom((eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription other) { + if (other == eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.getDefaultInstance()) return this; + if (other.hasHarvestDate()) { + setHarvestDate(other.getHarvestDate()); + } + if (other.hasAltered()) { + setAltered(other.getAltered()); + } + if (other.hasBaseURL()) { + setBaseURL(other.getBaseURL()); + } + if (other.hasIdentifier()) { + setIdentifier(other.getIdentifier()); + } + if (other.hasDatestamp()) { + setDatestamp(other.getDatestamp()); + } + if (other.hasMetadataNamespace()) { + setMetadataNamespace(other.getMetadataNamespace()); + } + if (other.hasOriginDescription()) { + mergeOriginDescription(other.getOriginDescription()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + } + break; + } + case 10: { + bitField0_ |= 0x00000001; + harvestDate_ = input.readBytes(); + break; + } + case 16: { + bitField0_ |= 0x00000002; + altered_ = input.readBool(); + break; + } + case 26: { + bitField0_ |= 0x00000004; + baseURL_ = input.readBytes(); + break; + } + case 34: { + bitField0_ |= 0x00000008; + identifier_ = input.readBytes(); + break; + } + case 42: { + bitField0_ |= 0x00000010; + datestamp_ = input.readBytes(); + break; + } + case 50: { + bitField0_ |= 0x00000020; + metadataNamespace_ = input.readBytes(); + break; + } + case 58: { + eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.newBuilder(); + if (hasOriginDescription()) { + subBuilder.mergeFrom(getOriginDescription()); + } + input.readMessage(subBuilder, extensionRegistry); + setOriginDescription(subBuilder.buildPartial()); + break; + } + } + } + } + + private int bitField0_; + + // optional string harvestDate = 1; + private java.lang.Object harvestDate_ = ""; + public boolean hasHarvestDate() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public String getHarvestDate() { + java.lang.Object ref = harvestDate_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + harvestDate_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setHarvestDate(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + harvestDate_ = value; + onChanged(); + return this; + } + public Builder clearHarvestDate() { + bitField0_ = (bitField0_ & ~0x00000001); + harvestDate_ = getDefaultInstance().getHarvestDate(); + onChanged(); + return this; + } + void setHarvestDate(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000001; + harvestDate_ = value; + onChanged(); + } + + // optional bool altered = 2 [default = true]; + private boolean altered_ = true; + public boolean hasAltered() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public boolean getAltered() { + return altered_; + } + public Builder setAltered(boolean value) { + bitField0_ |= 0x00000002; + altered_ = value; + onChanged(); + return this; + } + public Builder clearAltered() { + bitField0_ = (bitField0_ & ~0x00000002); + altered_ = true; + onChanged(); + return this; + } + + // optional string baseURL = 3; + private java.lang.Object baseURL_ = ""; + public boolean hasBaseURL() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + public String getBaseURL() { + java.lang.Object ref = baseURL_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + baseURL_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setBaseURL(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000004; + baseURL_ = value; + onChanged(); + return this; + } + public Builder clearBaseURL() { + bitField0_ = (bitField0_ & ~0x00000004); + baseURL_ = getDefaultInstance().getBaseURL(); + onChanged(); + return this; + } + void setBaseURL(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000004; + baseURL_ = value; + onChanged(); + } + + // optional string identifier = 4; + private java.lang.Object identifier_ = ""; + public boolean hasIdentifier() { + return ((bitField0_ & 0x00000008) == 0x00000008); + } + public String getIdentifier() { + java.lang.Object ref = identifier_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + identifier_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setIdentifier(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000008; + identifier_ = value; + onChanged(); + return this; + } + public Builder clearIdentifier() { + bitField0_ = (bitField0_ & ~0x00000008); + identifier_ = getDefaultInstance().getIdentifier(); + onChanged(); + return this; + } + void setIdentifier(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000008; + identifier_ = value; + onChanged(); + } + + // optional string datestamp = 5; + private java.lang.Object datestamp_ = ""; + public boolean hasDatestamp() { + return ((bitField0_ & 0x00000010) == 0x00000010); + } + public String getDatestamp() { + java.lang.Object ref = datestamp_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + datestamp_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setDatestamp(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000010; + datestamp_ = value; + onChanged(); + return this; + } + public Builder clearDatestamp() { + bitField0_ = (bitField0_ & ~0x00000010); + datestamp_ = getDefaultInstance().getDatestamp(); + onChanged(); + return this; + } + void setDatestamp(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000010; + datestamp_ = value; + onChanged(); + } + + // optional string metadataNamespace = 6; + private java.lang.Object metadataNamespace_ = ""; + public boolean hasMetadataNamespace() { + return ((bitField0_ & 0x00000020) == 0x00000020); + } + public String getMetadataNamespace() { + java.lang.Object ref = metadataNamespace_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + metadataNamespace_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setMetadataNamespace(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000020; + metadataNamespace_ = value; + onChanged(); + return this; + } + public Builder clearMetadataNamespace() { + bitField0_ = (bitField0_ & ~0x00000020); + metadataNamespace_ = getDefaultInstance().getMetadataNamespace(); + onChanged(); + return this; + } + void setMetadataNamespace(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000020; + metadataNamespace_ = value; + onChanged(); + } + + // optional .eu.dnetlib.data.proto.OAIProvenance.OriginDescription originDescription = 7; + private eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription originDescription_ = eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription, eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.Builder, eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescriptionOrBuilder> originDescriptionBuilder_; + public boolean hasOriginDescription() { + return ((bitField0_ & 0x00000040) == 0x00000040); + } + public eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription getOriginDescription() { + if (originDescriptionBuilder_ == null) { + return originDescription_; + } else { + return originDescriptionBuilder_.getMessage(); + } + } + public Builder setOriginDescription(eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription value) { + if (originDescriptionBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + originDescription_ = value; + onChanged(); + } else { + originDescriptionBuilder_.setMessage(value); + } + bitField0_ |= 0x00000040; + return this; + } + public Builder setOriginDescription( + eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.Builder builderForValue) { + if (originDescriptionBuilder_ == null) { + originDescription_ = builderForValue.build(); + onChanged(); + } else { + originDescriptionBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000040; + return this; + } + public Builder mergeOriginDescription(eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription value) { + if (originDescriptionBuilder_ == null) { + if (((bitField0_ & 0x00000040) == 0x00000040) && + originDescription_ != eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.getDefaultInstance()) { + originDescription_ = + eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.newBuilder(originDescription_).mergeFrom(value).buildPartial(); + } else { + originDescription_ = value; + } + onChanged(); + } else { + originDescriptionBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000040; + return this; + } + public Builder clearOriginDescription() { + if (originDescriptionBuilder_ == null) { + originDescription_ = eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.getDefaultInstance(); + onChanged(); + } else { + originDescriptionBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000040); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.Builder getOriginDescriptionBuilder() { + bitField0_ |= 0x00000040; + onChanged(); + return getOriginDescriptionFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescriptionOrBuilder getOriginDescriptionOrBuilder() { + if (originDescriptionBuilder_ != null) { + return originDescriptionBuilder_.getMessageOrBuilder(); + } else { + return originDescription_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription, eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.Builder, eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescriptionOrBuilder> + getOriginDescriptionFieldBuilder() { + if (originDescriptionBuilder_ == null) { + originDescriptionBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription, eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.Builder, eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescriptionOrBuilder>( + originDescription_, + getParentForChildren(), + isClean()); + originDescription_ = null; + } + return originDescriptionBuilder_; + } + + // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.OAIProvenance.OriginDescription) + } + + static { + defaultInstance = new OriginDescription(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.OAIProvenance.OriginDescription) + } + + private int bitField0_; + // optional .eu.dnetlib.data.proto.OAIProvenance.OriginDescription originDescription = 1; + public static final int ORIGINDESCRIPTION_FIELD_NUMBER = 1; + private eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription originDescription_; + public boolean hasOriginDescription() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription getOriginDescription() { + return originDescription_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescriptionOrBuilder getOriginDescriptionOrBuilder() { + return originDescription_; + } + + private void initFields() { + originDescription_ = eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.getDefaultInstance(); + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeMessage(1, originDescription_); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, originDescription_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder + implements eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenanceOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_OAIProvenance_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_OAIProvenance_fieldAccessorTable; + } + + // Construct using eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getOriginDescriptionFieldBuilder(); + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + if (originDescriptionBuilder_ == null) { + originDescription_ = eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.getDefaultInstance(); + } else { + originDescriptionBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.getDescriptor(); + } + + public eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance getDefaultInstanceForType() { + return eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.getDefaultInstance(); + } + + public eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance build() { + eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + private eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return result; + } + + public eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance buildPartial() { + eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance result = new eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + if (originDescriptionBuilder_ == null) { + result.originDescription_ = originDescription_; + } else { + result.originDescription_ = originDescriptionBuilder_.build(); + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance) { + return mergeFrom((eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance other) { + if (other == eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.getDefaultInstance()) return this; + if (other.hasOriginDescription()) { + mergeOriginDescription(other.getOriginDescription()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + } + break; + } + case 10: { + eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.newBuilder(); + if (hasOriginDescription()) { + subBuilder.mergeFrom(getOriginDescription()); + } + input.readMessage(subBuilder, extensionRegistry); + setOriginDescription(subBuilder.buildPartial()); + break; + } + } + } + } + + private int bitField0_; + + // optional .eu.dnetlib.data.proto.OAIProvenance.OriginDescription originDescription = 1; + private eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription originDescription_ = eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription, eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.Builder, eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescriptionOrBuilder> originDescriptionBuilder_; + public boolean hasOriginDescription() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription getOriginDescription() { + if (originDescriptionBuilder_ == null) { + return originDescription_; + } else { + return originDescriptionBuilder_.getMessage(); + } + } + public Builder setOriginDescription(eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription value) { + if (originDescriptionBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + originDescription_ = value; + onChanged(); + } else { + originDescriptionBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder setOriginDescription( + eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.Builder builderForValue) { + if (originDescriptionBuilder_ == null) { + originDescription_ = builderForValue.build(); + onChanged(); + } else { + originDescriptionBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder mergeOriginDescription(eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription value) { + if (originDescriptionBuilder_ == null) { + if (((bitField0_ & 0x00000001) == 0x00000001) && + originDescription_ != eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.getDefaultInstance()) { + originDescription_ = + eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.newBuilder(originDescription_).mergeFrom(value).buildPartial(); + } else { + originDescription_ = value; + } + onChanged(); + } else { + originDescriptionBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder clearOriginDescription() { + if (originDescriptionBuilder_ == null) { + originDescription_ = eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.getDefaultInstance(); + onChanged(); + } else { + originDescriptionBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.Builder getOriginDescriptionBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return getOriginDescriptionFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescriptionOrBuilder getOriginDescriptionOrBuilder() { + if (originDescriptionBuilder_ != null) { + return originDescriptionBuilder_.getMessageOrBuilder(); + } else { + return originDescription_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription, eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.Builder, eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescriptionOrBuilder> + getOriginDescriptionFieldBuilder() { + if (originDescriptionBuilder_ == null) { + originDescriptionBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription, eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.Builder, eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescriptionOrBuilder>( + originDescription_, + getParentForChildren(), + isClean()); + originDescription_ = null; + } + return originDescriptionBuilder_; + } + + // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.OAIProvenance) + } + + static { + defaultInstance = new OAIProvenance(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.OAIProvenance) + } + + public interface ExtraInfoOrBuilder + extends com.google.protobuf.MessageOrBuilder { + + // required string name = 1; + boolean hasName(); + String getName(); + + // required string typology = 2; + boolean hasTypology(); + String getTypology(); + + // required string provenance = 3; + boolean hasProvenance(); + String getProvenance(); + + // optional string trust = 4; + boolean hasTrust(); + String getTrust(); + + // optional string value = 5; + boolean hasValue(); + String getValue(); + } + public static final class ExtraInfo extends + com.google.protobuf.GeneratedMessage + implements ExtraInfoOrBuilder { + // Use ExtraInfo.newBuilder() to construct. + private ExtraInfo(Builder builder) { + super(builder); + } + private ExtraInfo(boolean noInit) {} + + private static final ExtraInfo defaultInstance; + public static ExtraInfo getDefaultInstance() { + return defaultInstance; + } + + public ExtraInfo getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_ExtraInfo_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_ExtraInfo_fieldAccessorTable; + } + + private int bitField0_; + // required string name = 1; + public static final int NAME_FIELD_NUMBER = 1; + private java.lang.Object name_; + public boolean hasName() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public String getName() { + java.lang.Object ref = name_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + name_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // required string typology = 2; + public static final int TYPOLOGY_FIELD_NUMBER = 2; + private java.lang.Object typology_; + public boolean hasTypology() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public String getTypology() { + java.lang.Object ref = typology_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + typology_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getTypologyBytes() { + java.lang.Object ref = typology_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + typology_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // required string provenance = 3; + public static final int PROVENANCE_FIELD_NUMBER = 3; + private java.lang.Object provenance_; + public boolean hasProvenance() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + public String getProvenance() { + java.lang.Object ref = provenance_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + provenance_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getProvenanceBytes() { + java.lang.Object ref = provenance_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + provenance_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // optional string trust = 4; + public static final int TRUST_FIELD_NUMBER = 4; + private java.lang.Object trust_; + public boolean hasTrust() { + return ((bitField0_ & 0x00000008) == 0x00000008); + } + public String getTrust() { + java.lang.Object ref = trust_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + trust_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getTrustBytes() { + java.lang.Object ref = trust_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + trust_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // optional string value = 5; + public static final int VALUE_FIELD_NUMBER = 5; + private java.lang.Object value_; + public boolean hasValue() { + return ((bitField0_ & 0x00000010) == 0x00000010); + } + public String getValue() { + java.lang.Object ref = value_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + value_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getValueBytes() { + java.lang.Object ref = value_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + value_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private void initFields() { + name_ = ""; + typology_ = ""; + provenance_ = ""; + trust_ = ""; + value_ = ""; + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + if (!hasName()) { + memoizedIsInitialized = 0; + return false; + } + if (!hasTypology()) { + memoizedIsInitialized = 0; + return false; + } + if (!hasProvenance()) { + memoizedIsInitialized = 0; + return false; + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeBytes(1, getNameBytes()); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + output.writeBytes(2, getTypologyBytes()); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + output.writeBytes(3, getProvenanceBytes()); + } + if (((bitField0_ & 0x00000008) == 0x00000008)) { + output.writeBytes(4, getTrustBytes()); + } + if (((bitField0_ & 0x00000010) == 0x00000010)) { + output.writeBytes(5, getValueBytes()); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(1, getNameBytes()); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(2, getTypologyBytes()); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(3, getProvenanceBytes()); + } + if (((bitField0_ & 0x00000008) == 0x00000008)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(4, getTrustBytes()); + } + if (((bitField0_ & 0x00000010) == 0x00000010)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(5, getValueBytes()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder + implements eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfoOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_ExtraInfo_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_ExtraInfo_fieldAccessorTable; + } + + // Construct using eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + name_ = ""; + bitField0_ = (bitField0_ & ~0x00000001); + typology_ = ""; + bitField0_ = (bitField0_ & ~0x00000002); + provenance_ = ""; + bitField0_ = (bitField0_ & ~0x00000004); + trust_ = ""; + bitField0_ = (bitField0_ & ~0x00000008); + value_ = ""; + bitField0_ = (bitField0_ & ~0x00000010); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo.getDescriptor(); + } + + public eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo getDefaultInstanceForType() { + return eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo.getDefaultInstance(); + } + + public eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo build() { + eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + private eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return result; + } + + public eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo buildPartial() { + eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo result = new eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + result.name_ = name_; + if (((from_bitField0_ & 0x00000002) == 0x00000002)) { + to_bitField0_ |= 0x00000002; + } + result.typology_ = typology_; + if (((from_bitField0_ & 0x00000004) == 0x00000004)) { + to_bitField0_ |= 0x00000004; + } + result.provenance_ = provenance_; + if (((from_bitField0_ & 0x00000008) == 0x00000008)) { + to_bitField0_ |= 0x00000008; + } + result.trust_ = trust_; + if (((from_bitField0_ & 0x00000010) == 0x00000010)) { + to_bitField0_ |= 0x00000010; + } + result.value_ = value_; + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo) { + return mergeFrom((eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo other) { + if (other == eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo.getDefaultInstance()) return this; + if (other.hasName()) { + setName(other.getName()); + } + if (other.hasTypology()) { + setTypology(other.getTypology()); + } + if (other.hasProvenance()) { + setProvenance(other.getProvenance()); + } + if (other.hasTrust()) { + setTrust(other.getTrust()); + } + if (other.hasValue()) { + setValue(other.getValue()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + if (!hasName()) { + + return false; + } + if (!hasTypology()) { + + return false; + } + if (!hasProvenance()) { + + return false; + } + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + } + break; + } + case 10: { + bitField0_ |= 0x00000001; + name_ = input.readBytes(); + break; + } + case 18: { + bitField0_ |= 0x00000002; + typology_ = input.readBytes(); + break; + } + case 26: { + bitField0_ |= 0x00000004; + provenance_ = input.readBytes(); + break; + } + case 34: { + bitField0_ |= 0x00000008; + trust_ = input.readBytes(); + break; + } + case 42: { + bitField0_ |= 0x00000010; + value_ = input.readBytes(); + break; + } + } + } + } + + private int bitField0_; + + // required string name = 1; + private java.lang.Object name_ = ""; + public boolean hasName() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public String getName() { + java.lang.Object ref = name_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + name_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setName(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + name_ = value; + onChanged(); + return this; + } + public Builder clearName() { + bitField0_ = (bitField0_ & ~0x00000001); + name_ = getDefaultInstance().getName(); + onChanged(); + return this; + } + void setName(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000001; + name_ = value; + onChanged(); + } + + // required string typology = 2; + private java.lang.Object typology_ = ""; + public boolean hasTypology() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public String getTypology() { + java.lang.Object ref = typology_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + typology_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setTypology(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + typology_ = value; + onChanged(); + return this; + } + public Builder clearTypology() { + bitField0_ = (bitField0_ & ~0x00000002); + typology_ = getDefaultInstance().getTypology(); + onChanged(); + return this; + } + void setTypology(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000002; + typology_ = value; + onChanged(); + } + + // required string provenance = 3; + private java.lang.Object provenance_ = ""; + public boolean hasProvenance() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + public String getProvenance() { + java.lang.Object ref = provenance_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + provenance_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setProvenance(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000004; + provenance_ = value; + onChanged(); + return this; + } + public Builder clearProvenance() { + bitField0_ = (bitField0_ & ~0x00000004); + provenance_ = getDefaultInstance().getProvenance(); + onChanged(); + return this; + } + void setProvenance(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000004; + provenance_ = value; + onChanged(); + } + + // optional string trust = 4; + private java.lang.Object trust_ = ""; + public boolean hasTrust() { + return ((bitField0_ & 0x00000008) == 0x00000008); + } + public String getTrust() { + java.lang.Object ref = trust_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + trust_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setTrust(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000008; + trust_ = value; + onChanged(); + return this; + } + public Builder clearTrust() { + bitField0_ = (bitField0_ & ~0x00000008); + trust_ = getDefaultInstance().getTrust(); + onChanged(); + return this; + } + void setTrust(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000008; + trust_ = value; + onChanged(); + } + + // optional string value = 5; + private java.lang.Object value_ = ""; + public boolean hasValue() { + return ((bitField0_ & 0x00000010) == 0x00000010); + } + public String getValue() { + java.lang.Object ref = value_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + value_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setValue(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000010; + value_ = value; + onChanged(); + return this; + } + public Builder clearValue() { + bitField0_ = (bitField0_ & ~0x00000010); + value_ = getDefaultInstance().getValue(); + onChanged(); + return this; + } + void setValue(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000010; + value_ = value; + onChanged(); + } + + // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.ExtraInfo) + } + + static { + defaultInstance = new ExtraInfo(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.ExtraInfo) + } + + public interface AuthorOrBuilder + extends com.google.protobuf.MessageOrBuilder { + + // required string fullname = 1; + boolean hasFullname(); + String getFullname(); + + // optional string name = 2; + boolean hasName(); + String getName(); + + // optional string surname = 3; + boolean hasSurname(); + String getSurname(); + + // required int32 rank = 4; + boolean hasRank(); + int getRank(); + + // repeated .eu.dnetlib.data.proto.KeyValue pid = 5; + java.util.List + getPidList(); + eu.dnetlib.data.proto.FieldTypeProtos.KeyValue getPid(int index); + int getPidCount(); + java.util.List + getPidOrBuilderList(); + eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder getPidOrBuilder( + int index); + + // repeated .eu.dnetlib.data.proto.StringField affiliation = 6; + java.util.List + getAffiliationList(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getAffiliation(int index); + int getAffiliationCount(); + java.util.List + getAffiliationOrBuilderList(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getAffiliationOrBuilder( + int index); + } + public static final class Author extends + com.google.protobuf.GeneratedMessage + implements AuthorOrBuilder { + // Use Author.newBuilder() to construct. + private Author(Builder builder) { + super(builder); + } + private Author(boolean noInit) {} + + private static final Author defaultInstance; + public static Author getDefaultInstance() { + return defaultInstance; + } + + public Author getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_Author_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_Author_fieldAccessorTable; + } + + private int bitField0_; + // required string fullname = 1; + public static final int FULLNAME_FIELD_NUMBER = 1; + private java.lang.Object fullname_; + public boolean hasFullname() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public String getFullname() { + java.lang.Object ref = fullname_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + fullname_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getFullnameBytes() { + java.lang.Object ref = fullname_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + fullname_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // optional string name = 2; + public static final int NAME_FIELD_NUMBER = 2; + private java.lang.Object name_; + public boolean hasName() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public String getName() { + java.lang.Object ref = name_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + name_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // optional string surname = 3; + public static final int SURNAME_FIELD_NUMBER = 3; + private java.lang.Object surname_; + public boolean hasSurname() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + public String getSurname() { + java.lang.Object ref = surname_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + surname_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getSurnameBytes() { + java.lang.Object ref = surname_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + surname_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // required int32 rank = 4; + public static final int RANK_FIELD_NUMBER = 4; + private int rank_; + public boolean hasRank() { + return ((bitField0_ & 0x00000008) == 0x00000008); + } + public int getRank() { + return rank_; + } + + // repeated .eu.dnetlib.data.proto.KeyValue pid = 5; + public static final int PID_FIELD_NUMBER = 5; + private java.util.List pid_; + public java.util.List getPidList() { + return pid_; + } + public java.util.List + getPidOrBuilderList() { + return pid_; + } + public int getPidCount() { + return pid_.size(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue getPid(int index) { + return pid_.get(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder getPidOrBuilder( + int index) { + return pid_.get(index); + } + + // repeated .eu.dnetlib.data.proto.StringField affiliation = 6; + public static final int AFFILIATION_FIELD_NUMBER = 6; + private java.util.List affiliation_; + public java.util.List getAffiliationList() { + return affiliation_; + } + public java.util.List + getAffiliationOrBuilderList() { + return affiliation_; + } + public int getAffiliationCount() { + return affiliation_.size(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getAffiliation(int index) { + return affiliation_.get(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getAffiliationOrBuilder( + int index) { + return affiliation_.get(index); + } + + private void initFields() { + fullname_ = ""; + name_ = ""; + surname_ = ""; + rank_ = 0; + pid_ = java.util.Collections.emptyList(); + affiliation_ = java.util.Collections.emptyList(); + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + if (!hasFullname()) { + memoizedIsInitialized = 0; + return false; + } + if (!hasRank()) { + memoizedIsInitialized = 0; + return false; + } + for (int i = 0; i < getPidCount(); i++) { + if (!getPid(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + for (int i = 0; i < getAffiliationCount(); i++) { + if (!getAffiliation(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeBytes(1, getFullnameBytes()); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + output.writeBytes(2, getNameBytes()); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + output.writeBytes(3, getSurnameBytes()); + } + if (((bitField0_ & 0x00000008) == 0x00000008)) { + output.writeInt32(4, rank_); + } + for (int i = 0; i < pid_.size(); i++) { + output.writeMessage(5, pid_.get(i)); + } + for (int i = 0; i < affiliation_.size(); i++) { + output.writeMessage(6, affiliation_.get(i)); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(1, getFullnameBytes()); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(2, getNameBytes()); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(3, getSurnameBytes()); + } + if (((bitField0_ & 0x00000008) == 0x00000008)) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(4, rank_); + } + for (int i = 0; i < pid_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(5, pid_.get(i)); + } + for (int i = 0; i < affiliation_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(6, affiliation_.get(i)); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static eu.dnetlib.data.proto.FieldTypeProtos.Author parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.Author parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.Author parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.Author parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.Author parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.Author parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.Author parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.FieldTypeProtos.Author parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.FieldTypeProtos.Author parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.FieldTypeProtos.Author parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(eu.dnetlib.data.proto.FieldTypeProtos.Author prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder + implements eu.dnetlib.data.proto.FieldTypeProtos.AuthorOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_Author_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_Author_fieldAccessorTable; + } + + // Construct using eu.dnetlib.data.proto.FieldTypeProtos.Author.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getPidFieldBuilder(); + getAffiliationFieldBuilder(); + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + fullname_ = ""; + bitField0_ = (bitField0_ & ~0x00000001); + name_ = ""; + bitField0_ = (bitField0_ & ~0x00000002); + surname_ = ""; + bitField0_ = (bitField0_ & ~0x00000004); + rank_ = 0; + bitField0_ = (bitField0_ & ~0x00000008); + if (pidBuilder_ == null) { + pid_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000010); + } else { + pidBuilder_.clear(); + } + if (affiliationBuilder_ == null) { + affiliation_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000020); + } else { + affiliationBuilder_.clear(); + } + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return eu.dnetlib.data.proto.FieldTypeProtos.Author.getDescriptor(); + } + + public eu.dnetlib.data.proto.FieldTypeProtos.Author getDefaultInstanceForType() { + return eu.dnetlib.data.proto.FieldTypeProtos.Author.getDefaultInstance(); + } + + public eu.dnetlib.data.proto.FieldTypeProtos.Author build() { + eu.dnetlib.data.proto.FieldTypeProtos.Author result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + private eu.dnetlib.data.proto.FieldTypeProtos.Author buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + eu.dnetlib.data.proto.FieldTypeProtos.Author result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return result; + } + + public eu.dnetlib.data.proto.FieldTypeProtos.Author buildPartial() { + eu.dnetlib.data.proto.FieldTypeProtos.Author result = new eu.dnetlib.data.proto.FieldTypeProtos.Author(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + result.fullname_ = fullname_; + if (((from_bitField0_ & 0x00000002) == 0x00000002)) { + to_bitField0_ |= 0x00000002; + } + result.name_ = name_; + if (((from_bitField0_ & 0x00000004) == 0x00000004)) { + to_bitField0_ |= 0x00000004; + } + result.surname_ = surname_; + if (((from_bitField0_ & 0x00000008) == 0x00000008)) { + to_bitField0_ |= 0x00000008; + } + result.rank_ = rank_; + if (pidBuilder_ == null) { + if (((bitField0_ & 0x00000010) == 0x00000010)) { + pid_ = java.util.Collections.unmodifiableList(pid_); + bitField0_ = (bitField0_ & ~0x00000010); + } + result.pid_ = pid_; + } else { + result.pid_ = pidBuilder_.build(); + } + if (affiliationBuilder_ == null) { + if (((bitField0_ & 0x00000020) == 0x00000020)) { + affiliation_ = java.util.Collections.unmodifiableList(affiliation_); + bitField0_ = (bitField0_ & ~0x00000020); + } + result.affiliation_ = affiliation_; + } else { + result.affiliation_ = affiliationBuilder_.build(); + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof eu.dnetlib.data.proto.FieldTypeProtos.Author) { + return mergeFrom((eu.dnetlib.data.proto.FieldTypeProtos.Author)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(eu.dnetlib.data.proto.FieldTypeProtos.Author other) { + if (other == eu.dnetlib.data.proto.FieldTypeProtos.Author.getDefaultInstance()) return this; + if (other.hasFullname()) { + setFullname(other.getFullname()); + } + if (other.hasName()) { + setName(other.getName()); + } + if (other.hasSurname()) { + setSurname(other.getSurname()); + } + if (other.hasRank()) { + setRank(other.getRank()); + } + if (pidBuilder_ == null) { + if (!other.pid_.isEmpty()) { + if (pid_.isEmpty()) { + pid_ = other.pid_; + bitField0_ = (bitField0_ & ~0x00000010); + } else { + ensurePidIsMutable(); + pid_.addAll(other.pid_); + } + onChanged(); + } + } else { + if (!other.pid_.isEmpty()) { + if (pidBuilder_.isEmpty()) { + pidBuilder_.dispose(); + pidBuilder_ = null; + pid_ = other.pid_; + bitField0_ = (bitField0_ & ~0x00000010); + pidBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + getPidFieldBuilder() : null; + } else { + pidBuilder_.addAllMessages(other.pid_); + } + } + } + if (affiliationBuilder_ == null) { + if (!other.affiliation_.isEmpty()) { + if (affiliation_.isEmpty()) { + affiliation_ = other.affiliation_; + bitField0_ = (bitField0_ & ~0x00000020); + } else { + ensureAffiliationIsMutable(); + affiliation_.addAll(other.affiliation_); + } + onChanged(); + } + } else { + if (!other.affiliation_.isEmpty()) { + if (affiliationBuilder_.isEmpty()) { + affiliationBuilder_.dispose(); + affiliationBuilder_ = null; + affiliation_ = other.affiliation_; + bitField0_ = (bitField0_ & ~0x00000020); + affiliationBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + getAffiliationFieldBuilder() : null; + } else { + affiliationBuilder_.addAllMessages(other.affiliation_); + } + } + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + if (!hasFullname()) { + + return false; + } + if (!hasRank()) { + + return false; + } + for (int i = 0; i < getPidCount(); i++) { + if (!getPid(i).isInitialized()) { + + return false; + } + } + for (int i = 0; i < getAffiliationCount(); i++) { + if (!getAffiliation(i).isInitialized()) { + + return false; + } + } + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + } + break; + } + case 10: { + bitField0_ |= 0x00000001; + fullname_ = input.readBytes(); + break; + } + case 18: { + bitField0_ |= 0x00000002; + name_ = input.readBytes(); + break; + } + case 26: { + bitField0_ |= 0x00000004; + surname_ = input.readBytes(); + break; + } + case 32: { + bitField0_ |= 0x00000008; + rank_ = input.readInt32(); + break; + } + case 42: { + eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addPid(subBuilder.buildPartial()); + break; + } + case 50: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addAffiliation(subBuilder.buildPartial()); + break; + } + } + } + } + + private int bitField0_; + + // required string fullname = 1; + private java.lang.Object fullname_ = ""; + public boolean hasFullname() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public String getFullname() { + java.lang.Object ref = fullname_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + fullname_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setFullname(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + fullname_ = value; + onChanged(); + return this; + } + public Builder clearFullname() { + bitField0_ = (bitField0_ & ~0x00000001); + fullname_ = getDefaultInstance().getFullname(); + onChanged(); + return this; + } + void setFullname(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000001; + fullname_ = value; + onChanged(); + } + + // optional string name = 2; + private java.lang.Object name_ = ""; + public boolean hasName() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public String getName() { + java.lang.Object ref = name_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + name_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setName(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + name_ = value; + onChanged(); + return this; + } + public Builder clearName() { + bitField0_ = (bitField0_ & ~0x00000002); + name_ = getDefaultInstance().getName(); + onChanged(); + return this; + } + void setName(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000002; + name_ = value; + onChanged(); + } + + // optional string surname = 3; + private java.lang.Object surname_ = ""; + public boolean hasSurname() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + public String getSurname() { + java.lang.Object ref = surname_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + surname_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setSurname(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000004; + surname_ = value; + onChanged(); + return this; + } + public Builder clearSurname() { + bitField0_ = (bitField0_ & ~0x00000004); + surname_ = getDefaultInstance().getSurname(); + onChanged(); + return this; + } + void setSurname(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000004; + surname_ = value; + onChanged(); + } + + // required int32 rank = 4; + private int rank_ ; + public boolean hasRank() { + return ((bitField0_ & 0x00000008) == 0x00000008); + } + public int getRank() { + return rank_; + } + public Builder setRank(int value) { + bitField0_ |= 0x00000008; + rank_ = value; + onChanged(); + return this; + } + public Builder clearRank() { + bitField0_ = (bitField0_ & ~0x00000008); + rank_ = 0; + onChanged(); + return this; + } + + // repeated .eu.dnetlib.data.proto.KeyValue pid = 5; + private java.util.List pid_ = + java.util.Collections.emptyList(); + private void ensurePidIsMutable() { + if (!((bitField0_ & 0x00000010) == 0x00000010)) { + pid_ = new java.util.ArrayList(pid_); + bitField0_ |= 0x00000010; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.KeyValue, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder, eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder> pidBuilder_; + + public java.util.List getPidList() { + if (pidBuilder_ == null) { + return java.util.Collections.unmodifiableList(pid_); + } else { + return pidBuilder_.getMessageList(); + } + } + public int getPidCount() { + if (pidBuilder_ == null) { + return pid_.size(); + } else { + return pidBuilder_.getCount(); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue getPid(int index) { + if (pidBuilder_ == null) { + return pid_.get(index); + } else { + return pidBuilder_.getMessage(index); + } + } + public Builder setPid( + int index, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue value) { + if (pidBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensurePidIsMutable(); + pid_.set(index, value); + onChanged(); + } else { + pidBuilder_.setMessage(index, value); + } + return this; + } + public Builder setPid( + int index, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder builderForValue) { + if (pidBuilder_ == null) { + ensurePidIsMutable(); + pid_.set(index, builderForValue.build()); + onChanged(); + } else { + pidBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + public Builder addPid(eu.dnetlib.data.proto.FieldTypeProtos.KeyValue value) { + if (pidBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensurePidIsMutable(); + pid_.add(value); + onChanged(); + } else { + pidBuilder_.addMessage(value); + } + return this; + } + public Builder addPid( + int index, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue value) { + if (pidBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensurePidIsMutable(); + pid_.add(index, value); + onChanged(); + } else { + pidBuilder_.addMessage(index, value); + } + return this; + } + public Builder addPid( + eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder builderForValue) { + if (pidBuilder_ == null) { + ensurePidIsMutable(); + pid_.add(builderForValue.build()); + onChanged(); + } else { + pidBuilder_.addMessage(builderForValue.build()); + } + return this; + } + public Builder addPid( + int index, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder builderForValue) { + if (pidBuilder_ == null) { + ensurePidIsMutable(); + pid_.add(index, builderForValue.build()); + onChanged(); + } else { + pidBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + public Builder addAllPid( + java.lang.Iterable values) { + if (pidBuilder_ == null) { + ensurePidIsMutable(); + super.addAll(values, pid_); + onChanged(); + } else { + pidBuilder_.addAllMessages(values); + } + return this; + } + public Builder clearPid() { + if (pidBuilder_ == null) { + pid_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000010); + onChanged(); + } else { + pidBuilder_.clear(); + } + return this; + } + public Builder removePid(int index) { + if (pidBuilder_ == null) { + ensurePidIsMutable(); + pid_.remove(index); + onChanged(); + } else { + pidBuilder_.remove(index); + } + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder getPidBuilder( + int index) { + return getPidFieldBuilder().getBuilder(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder getPidOrBuilder( + int index) { + if (pidBuilder_ == null) { + return pid_.get(index); } else { + return pidBuilder_.getMessageOrBuilder(index); + } + } + public java.util.List + getPidOrBuilderList() { + if (pidBuilder_ != null) { + return pidBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(pid_); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder addPidBuilder() { + return getPidFieldBuilder().addBuilder( + eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.getDefaultInstance()); + } + public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder addPidBuilder( + int index) { + return getPidFieldBuilder().addBuilder( + index, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.getDefaultInstance()); + } + public java.util.List + getPidBuilderList() { + return getPidFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.KeyValue, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder, eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder> + getPidFieldBuilder() { + if (pidBuilder_ == null) { + pidBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.KeyValue, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder, eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder>( + pid_, + ((bitField0_ & 0x00000010) == 0x00000010), + getParentForChildren(), + isClean()); + pid_ = null; + } + return pidBuilder_; + } + + // repeated .eu.dnetlib.data.proto.StringField affiliation = 6; + private java.util.List affiliation_ = + java.util.Collections.emptyList(); + private void ensureAffiliationIsMutable() { + if (!((bitField0_ & 0x00000020) == 0x00000020)) { + affiliation_ = new java.util.ArrayList(affiliation_); + bitField0_ |= 0x00000020; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> affiliationBuilder_; + + public java.util.List getAffiliationList() { + if (affiliationBuilder_ == null) { + return java.util.Collections.unmodifiableList(affiliation_); + } else { + return affiliationBuilder_.getMessageList(); + } + } + public int getAffiliationCount() { + if (affiliationBuilder_ == null) { + return affiliation_.size(); + } else { + return affiliationBuilder_.getCount(); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getAffiliation(int index) { + if (affiliationBuilder_ == null) { + return affiliation_.get(index); + } else { + return affiliationBuilder_.getMessage(index); + } + } + public Builder setAffiliation( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (affiliationBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureAffiliationIsMutable(); + affiliation_.set(index, value); + onChanged(); + } else { + affiliationBuilder_.setMessage(index, value); + } + return this; + } + public Builder setAffiliation( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (affiliationBuilder_ == null) { + ensureAffiliationIsMutable(); + affiliation_.set(index, builderForValue.build()); + onChanged(); + } else { + affiliationBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + public Builder addAffiliation(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (affiliationBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureAffiliationIsMutable(); + affiliation_.add(value); + onChanged(); + } else { + affiliationBuilder_.addMessage(value); + } + return this; + } + public Builder addAffiliation( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (affiliationBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureAffiliationIsMutable(); + affiliation_.add(index, value); + onChanged(); + } else { + affiliationBuilder_.addMessage(index, value); + } + return this; + } + public Builder addAffiliation( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (affiliationBuilder_ == null) { + ensureAffiliationIsMutable(); + affiliation_.add(builderForValue.build()); + onChanged(); + } else { + affiliationBuilder_.addMessage(builderForValue.build()); + } + return this; + } + public Builder addAffiliation( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (affiliationBuilder_ == null) { + ensureAffiliationIsMutable(); + affiliation_.add(index, builderForValue.build()); + onChanged(); + } else { + affiliationBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + public Builder addAllAffiliation( + java.lang.Iterable values) { + if (affiliationBuilder_ == null) { + ensureAffiliationIsMutable(); + super.addAll(values, affiliation_); + onChanged(); + } else { + affiliationBuilder_.addAllMessages(values); + } + return this; + } + public Builder clearAffiliation() { + if (affiliationBuilder_ == null) { + affiliation_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000020); + onChanged(); + } else { + affiliationBuilder_.clear(); + } + return this; + } + public Builder removeAffiliation(int index) { + if (affiliationBuilder_ == null) { + ensureAffiliationIsMutable(); + affiliation_.remove(index); + onChanged(); + } else { + affiliationBuilder_.remove(index); + } + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getAffiliationBuilder( + int index) { + return getAffiliationFieldBuilder().getBuilder(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getAffiliationOrBuilder( + int index) { + if (affiliationBuilder_ == null) { + return affiliation_.get(index); } else { + return affiliationBuilder_.getMessageOrBuilder(index); + } + } + public java.util.List + getAffiliationOrBuilderList() { + if (affiliationBuilder_ != null) { + return affiliationBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(affiliation_); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addAffiliationBuilder() { + return getAffiliationFieldBuilder().addBuilder( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addAffiliationBuilder( + int index) { + return getAffiliationFieldBuilder().addBuilder( + index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); + } + public java.util.List + getAffiliationBuilderList() { + return getAffiliationFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getAffiliationFieldBuilder() { + if (affiliationBuilder_ == null) { + affiliationBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + affiliation_, + ((bitField0_ & 0x00000020) == 0x00000020), + getParentForChildren(), + isClean()); + affiliation_ = null; + } + return affiliationBuilder_; + } + + // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.Author) + } + + static { + defaultInstance = new Author(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.Author) + } + + private static com.google.protobuf.Descriptors.Descriptor + internal_static_eu_dnetlib_data_proto_StringField_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_eu_dnetlib_data_proto_StringField_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_eu_dnetlib_data_proto_BoolField_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_eu_dnetlib_data_proto_BoolField_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_eu_dnetlib_data_proto_IntField_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_eu_dnetlib_data_proto_IntField_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_eu_dnetlib_data_proto_StructuredProperty_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_eu_dnetlib_data_proto_StructuredProperty_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_eu_dnetlib_data_proto_KeyValue_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_eu_dnetlib_data_proto_KeyValue_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_eu_dnetlib_data_proto_Qualifier_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_eu_dnetlib_data_proto_Qualifier_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_eu_dnetlib_data_proto_DataInfo_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_eu_dnetlib_data_proto_DataInfo_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_eu_dnetlib_data_proto_OAIProvenance_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_eu_dnetlib_data_proto_OAIProvenance_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_eu_dnetlib_data_proto_OAIProvenance_OriginDescription_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_eu_dnetlib_data_proto_OAIProvenance_OriginDescription_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_eu_dnetlib_data_proto_ExtraInfo_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_eu_dnetlib_data_proto_ExtraInfo_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_eu_dnetlib_data_proto_Author_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_eu_dnetlib_data_proto_Author_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\017FieldType.proto\022\025eu.dnetlib.data.proto" + + "\"O\n\013StringField\022\r\n\005value\030\001 \002(\t\0221\n\010dataIn" + + "fo\030\002 \001(\0132\037.eu.dnetlib.data.proto.DataInf" + + "o\"M\n\tBoolField\022\r\n\005value\030\001 \002(\010\0221\n\010dataInf" + + "o\030\002 \001(\0132\037.eu.dnetlib.data.proto.DataInfo" + + "\"L\n\010IntField\022\r\n\005value\030\001 \002(\005\0221\n\010dataInfo\030" + + "\002 \001(\0132\037.eu.dnetlib.data.proto.DataInfo\"\213" + + "\001\n\022StructuredProperty\022\r\n\005value\030\001 \002(\t\0223\n\t" + + "qualifier\030\002 \001(\0132 .eu.dnetlib.data.proto." + + "Qualifier\0221\n\010dataInfo\030\003 \001(\0132\037.eu.dnetlib", + ".data.proto.DataInfo\"Y\n\010KeyValue\022\013\n\003key\030" + + "\001 \002(\t\022\r\n\005value\030\002 \001(\t\0221\n\010dataInfo\030\003 \001(\0132\037" + + ".eu.dnetlib.data.proto.DataInfo\"\210\001\n\tQual" + + "ifier\022\017\n\007classid\030\001 \001(\t\022\021\n\tclassname\030\002 \001(" + + "\t\022\020\n\010schemeid\030\003 \001(\t\022\022\n\nschemename\030\004 \001(\t\022" + + "1\n\010dataInfo\030\005 \001(\0132\037.eu.dnetlib.data.prot" + + "o.DataInfo\"\272\001\n\010DataInfo\022\030\n\tinvisible\030\006 \001" + + "(\010:\005false\022\020\n\010inferred\030\001 \001(\010\022\032\n\022deletedby" + + "inference\030\002 \001(\010\022\r\n\005trust\030\003 \001(\t\022\033\n\023infere" + + "nceprovenance\030\004 \001(\t\022:\n\020provenanceaction\030", + "\005 \002(\0132 .eu.dnetlib.data.proto.Qualifier\"" + + "\312\002\n\rOAIProvenance\022Q\n\021originDescription\030\001" + + " \001(\01326.eu.dnetlib.data.proto.OAIProvenan" + + "ce.OriginDescription\032\345\001\n\021OriginDescripti" + + "on\022\023\n\013harvestDate\030\001 \001(\t\022\025\n\007altered\030\002 \001(\010" + + ":\004true\022\017\n\007baseURL\030\003 \001(\t\022\022\n\nidentifier\030\004 " + + "\001(\t\022\021\n\tdatestamp\030\005 \001(\t\022\031\n\021metadataNamesp" + + "ace\030\006 \001(\t\022Q\n\021originDescription\030\007 \001(\01326.e" + + "u.dnetlib.data.proto.OAIProvenance.Origi" + + "nDescription\"]\n\tExtraInfo\022\014\n\004name\030\001 \002(\t\022", + "\020\n\010typology\030\002 \002(\t\022\022\n\nprovenance\030\003 \002(\t\022\r\n" + + "\005trust\030\004 \001(\t\022\r\n\005value\030\005 \001(\t\"\256\001\n\006Author\022\020" + + "\n\010fullname\030\001 \002(\t\022\014\n\004name\030\002 \001(\t\022\017\n\007surnam" + + "e\030\003 \001(\t\022\014\n\004rank\030\004 \002(\005\022,\n\003pid\030\005 \003(\0132\037.eu." + + "dnetlib.data.proto.KeyValue\0227\n\013affiliati" + + "on\030\006 \003(\0132\".eu.dnetlib.data.proto.StringF" + + "ieldB(\n\025eu.dnetlib.data.protoB\017FieldType" + + "Protos" + }; + com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = + new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { + public com.google.protobuf.ExtensionRegistry assignDescriptors( + com.google.protobuf.Descriptors.FileDescriptor root) { + descriptor = root; + internal_static_eu_dnetlib_data_proto_StringField_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_eu_dnetlib_data_proto_StringField_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_eu_dnetlib_data_proto_StringField_descriptor, + new java.lang.String[] { "Value", "DataInfo", }, + eu.dnetlib.data.proto.FieldTypeProtos.StringField.class, + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder.class); + internal_static_eu_dnetlib_data_proto_BoolField_descriptor = + getDescriptor().getMessageTypes().get(1); + internal_static_eu_dnetlib_data_proto_BoolField_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_eu_dnetlib_data_proto_BoolField_descriptor, + new java.lang.String[] { "Value", "DataInfo", }, + eu.dnetlib.data.proto.FieldTypeProtos.BoolField.class, + eu.dnetlib.data.proto.FieldTypeProtos.BoolField.Builder.class); + internal_static_eu_dnetlib_data_proto_IntField_descriptor = + getDescriptor().getMessageTypes().get(2); + internal_static_eu_dnetlib_data_proto_IntField_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_eu_dnetlib_data_proto_IntField_descriptor, + new java.lang.String[] { "Value", "DataInfo", }, + eu.dnetlib.data.proto.FieldTypeProtos.IntField.class, + eu.dnetlib.data.proto.FieldTypeProtos.IntField.Builder.class); + internal_static_eu_dnetlib_data_proto_StructuredProperty_descriptor = + getDescriptor().getMessageTypes().get(3); + internal_static_eu_dnetlib_data_proto_StructuredProperty_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_eu_dnetlib_data_proto_StructuredProperty_descriptor, + new java.lang.String[] { "Value", "Qualifier", "DataInfo", }, + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.class, + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder.class); + internal_static_eu_dnetlib_data_proto_KeyValue_descriptor = + getDescriptor().getMessageTypes().get(4); + internal_static_eu_dnetlib_data_proto_KeyValue_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_eu_dnetlib_data_proto_KeyValue_descriptor, + new java.lang.String[] { "Key", "Value", "DataInfo", }, + eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.class, + eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder.class); + internal_static_eu_dnetlib_data_proto_Qualifier_descriptor = + getDescriptor().getMessageTypes().get(5); + internal_static_eu_dnetlib_data_proto_Qualifier_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_eu_dnetlib_data_proto_Qualifier_descriptor, + new java.lang.String[] { "Classid", "Classname", "Schemeid", "Schemename", "DataInfo", }, + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.class, + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder.class); + internal_static_eu_dnetlib_data_proto_DataInfo_descriptor = + getDescriptor().getMessageTypes().get(6); + internal_static_eu_dnetlib_data_proto_DataInfo_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_eu_dnetlib_data_proto_DataInfo_descriptor, + new java.lang.String[] { "Invisible", "Inferred", "Deletedbyinference", "Trust", "Inferenceprovenance", "Provenanceaction", }, + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.class, + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder.class); + internal_static_eu_dnetlib_data_proto_OAIProvenance_descriptor = + getDescriptor().getMessageTypes().get(7); + internal_static_eu_dnetlib_data_proto_OAIProvenance_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_eu_dnetlib_data_proto_OAIProvenance_descriptor, + new java.lang.String[] { "OriginDescription", }, + eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.class, + eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.Builder.class); + internal_static_eu_dnetlib_data_proto_OAIProvenance_OriginDescription_descriptor = + internal_static_eu_dnetlib_data_proto_OAIProvenance_descriptor.getNestedTypes().get(0); + internal_static_eu_dnetlib_data_proto_OAIProvenance_OriginDescription_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_eu_dnetlib_data_proto_OAIProvenance_OriginDescription_descriptor, + new java.lang.String[] { "HarvestDate", "Altered", "BaseURL", "Identifier", "Datestamp", "MetadataNamespace", "OriginDescription", }, + eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.class, + eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.Builder.class); + internal_static_eu_dnetlib_data_proto_ExtraInfo_descriptor = + getDescriptor().getMessageTypes().get(8); + internal_static_eu_dnetlib_data_proto_ExtraInfo_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_eu_dnetlib_data_proto_ExtraInfo_descriptor, + new java.lang.String[] { "Name", "Typology", "Provenance", "Trust", "Value", }, + eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo.class, + eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo.Builder.class); + internal_static_eu_dnetlib_data_proto_Author_descriptor = + getDescriptor().getMessageTypes().get(9); + internal_static_eu_dnetlib_data_proto_Author_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_eu_dnetlib_data_proto_Author_descriptor, + new java.lang.String[] { "Fullname", "Name", "Surname", "Rank", "Pid", "Affiliation", }, + eu.dnetlib.data.proto.FieldTypeProtos.Author.class, + eu.dnetlib.data.proto.FieldTypeProtos.Author.Builder.class); + return null; + } + }; + com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + }, assigner); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/KindProtos.java b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/KindProtos.java new file mode 100644 index 000000000..ccd35de15 --- /dev/null +++ b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/KindProtos.java @@ -0,0 +1,108 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: Kind.proto + +package eu.dnetlib.data.proto; + +public final class KindProtos { + private KindProtos() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + } + public enum Kind + implements com.google.protobuf.ProtocolMessageEnum { + entity(0, 1), + relation(1, 2), + ; + + public static final int entity_VALUE = 1; + public static final int relation_VALUE = 2; + + + public final int getNumber() { return value; } + + public static Kind valueOf(int value) { + switch (value) { + case 1: return entity; + case 2: return relation; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static com.google.protobuf.Internal.EnumLiteMap + internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public Kind findValueByNumber(int number) { + return Kind.valueOf(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor + getValueDescriptor() { + return getDescriptor().getValues().get(index); + } + public final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptorForType() { + return getDescriptor(); + } + public static final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptor() { + return eu.dnetlib.data.proto.KindProtos.getDescriptor().getEnumTypes().get(0); + } + + private static final Kind[] VALUES = { + entity, relation, + }; + + public static Kind valueOf( + com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "EnumValueDescriptor is not for this type."); + } + return VALUES[desc.getIndex()]; + } + + private final int index; + private final int value; + + private Kind(int index, int value) { + this.index = index; + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:eu.dnetlib.data.proto.Kind) + } + + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\nKind.proto\022\025eu.dnetlib.data.proto* \n\004K" + + "ind\022\n\n\006entity\020\001\022\014\n\010relation\020\002B#\n\025eu.dnet" + + "lib.data.protoB\nKindProtos" + }; + com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = + new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { + public com.google.protobuf.ExtensionRegistry assignDescriptors( + com.google.protobuf.Descriptors.FileDescriptor root) { + descriptor = root; + return null; + } + }; + com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + }, assigner); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/OafProtos.java b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/OafProtos.java new file mode 100644 index 000000000..d9e370b83 --- /dev/null +++ b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/OafProtos.java @@ -0,0 +1,6730 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: OafParent.proto + +package eu.dnetlib.data.proto; + +public final class OafProtos { + private OafProtos() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + } + public interface OafOrBuilder + extends com.google.protobuf.MessageOrBuilder { + + // required .eu.dnetlib.data.proto.Kind kind = 1; + boolean hasKind(); + eu.dnetlib.data.proto.KindProtos.Kind getKind(); + + // optional .eu.dnetlib.data.proto.OafEntity entity = 2; + boolean hasEntity(); + eu.dnetlib.data.proto.OafProtos.OafEntity getEntity(); + eu.dnetlib.data.proto.OafProtos.OafEntityOrBuilder getEntityOrBuilder(); + + // optional .eu.dnetlib.data.proto.OafRel rel = 3; + boolean hasRel(); + eu.dnetlib.data.proto.OafProtos.OafRel getRel(); + eu.dnetlib.data.proto.OafProtos.OafRelOrBuilder getRelOrBuilder(); + + // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 4; + boolean hasDataInfo(); + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo(); + eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder(); + + // optional sfixed64 lastupdatetimestamp = 5; + boolean hasLastupdatetimestamp(); + long getLastupdatetimestamp(); + } + public static final class Oaf extends + com.google.protobuf.GeneratedMessage + implements OafOrBuilder { + // Use Oaf.newBuilder() to construct. + private Oaf(Builder builder) { + super(builder); + } + private Oaf(boolean noInit) {} + + private static final Oaf defaultInstance; + public static Oaf getDefaultInstance() { + return defaultInstance; + } + + public Oaf getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.OafProtos.internal_static_eu_dnetlib_data_proto_Oaf_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.OafProtos.internal_static_eu_dnetlib_data_proto_Oaf_fieldAccessorTable; + } + + private int bitField0_; + // required .eu.dnetlib.data.proto.Kind kind = 1; + public static final int KIND_FIELD_NUMBER = 1; + private eu.dnetlib.data.proto.KindProtos.Kind kind_; + public boolean hasKind() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.KindProtos.Kind getKind() { + return kind_; + } + + // optional .eu.dnetlib.data.proto.OafEntity entity = 2; + public static final int ENTITY_FIELD_NUMBER = 2; + private eu.dnetlib.data.proto.OafProtos.OafEntity entity_; + public boolean hasEntity() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public eu.dnetlib.data.proto.OafProtos.OafEntity getEntity() { + return entity_; + } + public eu.dnetlib.data.proto.OafProtos.OafEntityOrBuilder getEntityOrBuilder() { + return entity_; + } + + // optional .eu.dnetlib.data.proto.OafRel rel = 3; + public static final int REL_FIELD_NUMBER = 3; + private eu.dnetlib.data.proto.OafProtos.OafRel rel_; + public boolean hasRel() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + public eu.dnetlib.data.proto.OafProtos.OafRel getRel() { + return rel_; + } + public eu.dnetlib.data.proto.OafProtos.OafRelOrBuilder getRelOrBuilder() { + return rel_; + } + + // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 4; + public static final int DATAINFO_FIELD_NUMBER = 4; + private eu.dnetlib.data.proto.FieldTypeProtos.DataInfo dataInfo_; + public boolean hasDataInfo() { + return ((bitField0_ & 0x00000008) == 0x00000008); + } + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo() { + return dataInfo_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder() { + return dataInfo_; + } + + // optional sfixed64 lastupdatetimestamp = 5; + public static final int LASTUPDATETIMESTAMP_FIELD_NUMBER = 5; + private long lastupdatetimestamp_; + public boolean hasLastupdatetimestamp() { + return ((bitField0_ & 0x00000010) == 0x00000010); + } + public long getLastupdatetimestamp() { + return lastupdatetimestamp_; + } + + private void initFields() { + kind_ = eu.dnetlib.data.proto.KindProtos.Kind.entity; + entity_ = eu.dnetlib.data.proto.OafProtos.OafEntity.getDefaultInstance(); + rel_ = eu.dnetlib.data.proto.OafProtos.OafRel.getDefaultInstance(); + dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); + lastupdatetimestamp_ = 0L; + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + if (!hasKind()) { + memoizedIsInitialized = 0; + return false; + } + if (hasEntity()) { + if (!getEntity().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasRel()) { + if (!getRel().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasDataInfo()) { + if (!getDataInfo().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeEnum(1, kind_.getNumber()); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + output.writeMessage(2, entity_); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + output.writeMessage(3, rel_); + } + if (((bitField0_ & 0x00000008) == 0x00000008)) { + output.writeMessage(4, dataInfo_); + } + if (((bitField0_ & 0x00000010) == 0x00000010)) { + output.writeSFixed64(5, lastupdatetimestamp_); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeEnumSize(1, kind_.getNumber()); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(2, entity_); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(3, rel_); + } + if (((bitField0_ & 0x00000008) == 0x00000008)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(4, dataInfo_); + } + if (((bitField0_ & 0x00000010) == 0x00000010)) { + size += com.google.protobuf.CodedOutputStream + .computeSFixed64Size(5, lastupdatetimestamp_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static eu.dnetlib.data.proto.OafProtos.Oaf parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.OafProtos.Oaf parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.OafProtos.Oaf parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.OafProtos.Oaf parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.OafProtos.Oaf parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.OafProtos.Oaf parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.OafProtos.Oaf parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.OafProtos.Oaf parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.OafProtos.Oaf parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.OafProtos.Oaf parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(eu.dnetlib.data.proto.OafProtos.Oaf prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder + implements eu.dnetlib.data.proto.OafProtos.OafOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.OafProtos.internal_static_eu_dnetlib_data_proto_Oaf_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.OafProtos.internal_static_eu_dnetlib_data_proto_Oaf_fieldAccessorTable; + } + + // Construct using eu.dnetlib.data.proto.OafProtos.Oaf.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getEntityFieldBuilder(); + getRelFieldBuilder(); + getDataInfoFieldBuilder(); + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + kind_ = eu.dnetlib.data.proto.KindProtos.Kind.entity; + bitField0_ = (bitField0_ & ~0x00000001); + if (entityBuilder_ == null) { + entity_ = eu.dnetlib.data.proto.OafProtos.OafEntity.getDefaultInstance(); + } else { + entityBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000002); + if (relBuilder_ == null) { + rel_ = eu.dnetlib.data.proto.OafProtos.OafRel.getDefaultInstance(); + } else { + relBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000004); + if (dataInfoBuilder_ == null) { + dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); + } else { + dataInfoBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000008); + lastupdatetimestamp_ = 0L; + bitField0_ = (bitField0_ & ~0x00000010); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return eu.dnetlib.data.proto.OafProtos.Oaf.getDescriptor(); + } + + public eu.dnetlib.data.proto.OafProtos.Oaf getDefaultInstanceForType() { + return eu.dnetlib.data.proto.OafProtos.Oaf.getDefaultInstance(); + } + + public eu.dnetlib.data.proto.OafProtos.Oaf build() { + eu.dnetlib.data.proto.OafProtos.Oaf result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + private eu.dnetlib.data.proto.OafProtos.Oaf buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + eu.dnetlib.data.proto.OafProtos.Oaf result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return result; + } + + public eu.dnetlib.data.proto.OafProtos.Oaf buildPartial() { + eu.dnetlib.data.proto.OafProtos.Oaf result = new eu.dnetlib.data.proto.OafProtos.Oaf(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + result.kind_ = kind_; + if (((from_bitField0_ & 0x00000002) == 0x00000002)) { + to_bitField0_ |= 0x00000002; + } + if (entityBuilder_ == null) { + result.entity_ = entity_; + } else { + result.entity_ = entityBuilder_.build(); + } + if (((from_bitField0_ & 0x00000004) == 0x00000004)) { + to_bitField0_ |= 0x00000004; + } + if (relBuilder_ == null) { + result.rel_ = rel_; + } else { + result.rel_ = relBuilder_.build(); + } + if (((from_bitField0_ & 0x00000008) == 0x00000008)) { + to_bitField0_ |= 0x00000008; + } + if (dataInfoBuilder_ == null) { + result.dataInfo_ = dataInfo_; + } else { + result.dataInfo_ = dataInfoBuilder_.build(); + } + if (((from_bitField0_ & 0x00000010) == 0x00000010)) { + to_bitField0_ |= 0x00000010; + } + result.lastupdatetimestamp_ = lastupdatetimestamp_; + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof eu.dnetlib.data.proto.OafProtos.Oaf) { + return mergeFrom((eu.dnetlib.data.proto.OafProtos.Oaf)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(eu.dnetlib.data.proto.OafProtos.Oaf other) { + if (other == eu.dnetlib.data.proto.OafProtos.Oaf.getDefaultInstance()) return this; + if (other.hasKind()) { + setKind(other.getKind()); + } + if (other.hasEntity()) { + mergeEntity(other.getEntity()); + } + if (other.hasRel()) { + mergeRel(other.getRel()); + } + if (other.hasDataInfo()) { + mergeDataInfo(other.getDataInfo()); + } + if (other.hasLastupdatetimestamp()) { + setLastupdatetimestamp(other.getLastupdatetimestamp()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + if (!hasKind()) { + + return false; + } + if (hasEntity()) { + if (!getEntity().isInitialized()) { + + return false; + } + } + if (hasRel()) { + if (!getRel().isInitialized()) { + + return false; + } + } + if (hasDataInfo()) { + if (!getDataInfo().isInitialized()) { + + return false; + } + } + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + } + break; + } + case 8: { + int rawValue = input.readEnum(); + eu.dnetlib.data.proto.KindProtos.Kind value = eu.dnetlib.data.proto.KindProtos.Kind.valueOf(rawValue); + if (value == null) { + unknownFields.mergeVarintField(1, rawValue); + } else { + bitField0_ |= 0x00000001; + kind_ = value; + } + break; + } + case 18: { + eu.dnetlib.data.proto.OafProtos.OafEntity.Builder subBuilder = eu.dnetlib.data.proto.OafProtos.OafEntity.newBuilder(); + if (hasEntity()) { + subBuilder.mergeFrom(getEntity()); + } + input.readMessage(subBuilder, extensionRegistry); + setEntity(subBuilder.buildPartial()); + break; + } + case 26: { + eu.dnetlib.data.proto.OafProtos.OafRel.Builder subBuilder = eu.dnetlib.data.proto.OafProtos.OafRel.newBuilder(); + if (hasRel()) { + subBuilder.mergeFrom(getRel()); + } + input.readMessage(subBuilder, extensionRegistry); + setRel(subBuilder.buildPartial()); + break; + } + case 34: { + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.newBuilder(); + if (hasDataInfo()) { + subBuilder.mergeFrom(getDataInfo()); + } + input.readMessage(subBuilder, extensionRegistry); + setDataInfo(subBuilder.buildPartial()); + break; + } + case 41: { + bitField0_ |= 0x00000010; + lastupdatetimestamp_ = input.readSFixed64(); + break; + } + } + } + } + + private int bitField0_; + + // required .eu.dnetlib.data.proto.Kind kind = 1; + private eu.dnetlib.data.proto.KindProtos.Kind kind_ = eu.dnetlib.data.proto.KindProtos.Kind.entity; + public boolean hasKind() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.KindProtos.Kind getKind() { + return kind_; + } + public Builder setKind(eu.dnetlib.data.proto.KindProtos.Kind value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + kind_ = value; + onChanged(); + return this; + } + public Builder clearKind() { + bitField0_ = (bitField0_ & ~0x00000001); + kind_ = eu.dnetlib.data.proto.KindProtos.Kind.entity; + onChanged(); + return this; + } + + // optional .eu.dnetlib.data.proto.OafEntity entity = 2; + private eu.dnetlib.data.proto.OafProtos.OafEntity entity_ = eu.dnetlib.data.proto.OafProtos.OafEntity.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.OafProtos.OafEntity, eu.dnetlib.data.proto.OafProtos.OafEntity.Builder, eu.dnetlib.data.proto.OafProtos.OafEntityOrBuilder> entityBuilder_; + public boolean hasEntity() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public eu.dnetlib.data.proto.OafProtos.OafEntity getEntity() { + if (entityBuilder_ == null) { + return entity_; + } else { + return entityBuilder_.getMessage(); + } + } + public Builder setEntity(eu.dnetlib.data.proto.OafProtos.OafEntity value) { + if (entityBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + entity_ = value; + onChanged(); + } else { + entityBuilder_.setMessage(value); + } + bitField0_ |= 0x00000002; + return this; + } + public Builder setEntity( + eu.dnetlib.data.proto.OafProtos.OafEntity.Builder builderForValue) { + if (entityBuilder_ == null) { + entity_ = builderForValue.build(); + onChanged(); + } else { + entityBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000002; + return this; + } + public Builder mergeEntity(eu.dnetlib.data.proto.OafProtos.OafEntity value) { + if (entityBuilder_ == null) { + if (((bitField0_ & 0x00000002) == 0x00000002) && + entity_ != eu.dnetlib.data.proto.OafProtos.OafEntity.getDefaultInstance()) { + entity_ = + eu.dnetlib.data.proto.OafProtos.OafEntity.newBuilder(entity_).mergeFrom(value).buildPartial(); + } else { + entity_ = value; + } + onChanged(); + } else { + entityBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000002; + return this; + } + public Builder clearEntity() { + if (entityBuilder_ == null) { + entity_ = eu.dnetlib.data.proto.OafProtos.OafEntity.getDefaultInstance(); + onChanged(); + } else { + entityBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000002); + return this; + } + public eu.dnetlib.data.proto.OafProtos.OafEntity.Builder getEntityBuilder() { + bitField0_ |= 0x00000002; + onChanged(); + return getEntityFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.OafProtos.OafEntityOrBuilder getEntityOrBuilder() { + if (entityBuilder_ != null) { + return entityBuilder_.getMessageOrBuilder(); + } else { + return entity_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.OafProtos.OafEntity, eu.dnetlib.data.proto.OafProtos.OafEntity.Builder, eu.dnetlib.data.proto.OafProtos.OafEntityOrBuilder> + getEntityFieldBuilder() { + if (entityBuilder_ == null) { + entityBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.OafProtos.OafEntity, eu.dnetlib.data.proto.OafProtos.OafEntity.Builder, eu.dnetlib.data.proto.OafProtos.OafEntityOrBuilder>( + entity_, + getParentForChildren(), + isClean()); + entity_ = null; + } + return entityBuilder_; + } + + // optional .eu.dnetlib.data.proto.OafRel rel = 3; + private eu.dnetlib.data.proto.OafProtos.OafRel rel_ = eu.dnetlib.data.proto.OafProtos.OafRel.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.OafProtos.OafRel, eu.dnetlib.data.proto.OafProtos.OafRel.Builder, eu.dnetlib.data.proto.OafProtos.OafRelOrBuilder> relBuilder_; + public boolean hasRel() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + public eu.dnetlib.data.proto.OafProtos.OafRel getRel() { + if (relBuilder_ == null) { + return rel_; + } else { + return relBuilder_.getMessage(); + } + } + public Builder setRel(eu.dnetlib.data.proto.OafProtos.OafRel value) { + if (relBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + rel_ = value; + onChanged(); + } else { + relBuilder_.setMessage(value); + } + bitField0_ |= 0x00000004; + return this; + } + public Builder setRel( + eu.dnetlib.data.proto.OafProtos.OafRel.Builder builderForValue) { + if (relBuilder_ == null) { + rel_ = builderForValue.build(); + onChanged(); + } else { + relBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000004; + return this; + } + public Builder mergeRel(eu.dnetlib.data.proto.OafProtos.OafRel value) { + if (relBuilder_ == null) { + if (((bitField0_ & 0x00000004) == 0x00000004) && + rel_ != eu.dnetlib.data.proto.OafProtos.OafRel.getDefaultInstance()) { + rel_ = + eu.dnetlib.data.proto.OafProtos.OafRel.newBuilder(rel_).mergeFrom(value).buildPartial(); + } else { + rel_ = value; + } + onChanged(); + } else { + relBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000004; + return this; + } + public Builder clearRel() { + if (relBuilder_ == null) { + rel_ = eu.dnetlib.data.proto.OafProtos.OafRel.getDefaultInstance(); + onChanged(); + } else { + relBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000004); + return this; + } + public eu.dnetlib.data.proto.OafProtos.OafRel.Builder getRelBuilder() { + bitField0_ |= 0x00000004; + onChanged(); + return getRelFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.OafProtos.OafRelOrBuilder getRelOrBuilder() { + if (relBuilder_ != null) { + return relBuilder_.getMessageOrBuilder(); + } else { + return rel_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.OafProtos.OafRel, eu.dnetlib.data.proto.OafProtos.OafRel.Builder, eu.dnetlib.data.proto.OafProtos.OafRelOrBuilder> + getRelFieldBuilder() { + if (relBuilder_ == null) { + relBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.OafProtos.OafRel, eu.dnetlib.data.proto.OafProtos.OafRel.Builder, eu.dnetlib.data.proto.OafProtos.OafRelOrBuilder>( + rel_, + getParentForChildren(), + isClean()); + rel_ = null; + } + return relBuilder_; + } + + // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 4; + private eu.dnetlib.data.proto.FieldTypeProtos.DataInfo dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder> dataInfoBuilder_; + public boolean hasDataInfo() { + return ((bitField0_ & 0x00000008) == 0x00000008); + } + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo() { + if (dataInfoBuilder_ == null) { + return dataInfo_; + } else { + return dataInfoBuilder_.getMessage(); + } + } + public Builder setDataInfo(eu.dnetlib.data.proto.FieldTypeProtos.DataInfo value) { + if (dataInfoBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + dataInfo_ = value; + onChanged(); + } else { + dataInfoBuilder_.setMessage(value); + } + bitField0_ |= 0x00000008; + return this; + } + public Builder setDataInfo( + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder builderForValue) { + if (dataInfoBuilder_ == null) { + dataInfo_ = builderForValue.build(); + onChanged(); + } else { + dataInfoBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000008; + return this; + } + public Builder mergeDataInfo(eu.dnetlib.data.proto.FieldTypeProtos.DataInfo value) { + if (dataInfoBuilder_ == null) { + if (((bitField0_ & 0x00000008) == 0x00000008) && + dataInfo_ != eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance()) { + dataInfo_ = + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.newBuilder(dataInfo_).mergeFrom(value).buildPartial(); + } else { + dataInfo_ = value; + } + onChanged(); + } else { + dataInfoBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000008; + return this; + } + public Builder clearDataInfo() { + if (dataInfoBuilder_ == null) { + dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); + onChanged(); + } else { + dataInfoBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000008); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder getDataInfoBuilder() { + bitField0_ |= 0x00000008; + onChanged(); + return getDataInfoFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder() { + if (dataInfoBuilder_ != null) { + return dataInfoBuilder_.getMessageOrBuilder(); + } else { + return dataInfo_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder> + getDataInfoFieldBuilder() { + if (dataInfoBuilder_ == null) { + dataInfoBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder>( + dataInfo_, + getParentForChildren(), + isClean()); + dataInfo_ = null; + } + return dataInfoBuilder_; + } + + // optional sfixed64 lastupdatetimestamp = 5; + private long lastupdatetimestamp_ ; + public boolean hasLastupdatetimestamp() { + return ((bitField0_ & 0x00000010) == 0x00000010); + } + public long getLastupdatetimestamp() { + return lastupdatetimestamp_; + } + public Builder setLastupdatetimestamp(long value) { + bitField0_ |= 0x00000010; + lastupdatetimestamp_ = value; + onChanged(); + return this; + } + public Builder clearLastupdatetimestamp() { + bitField0_ = (bitField0_ & ~0x00000010); + lastupdatetimestamp_ = 0L; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.Oaf) + } + + static { + defaultInstance = new Oaf(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.Oaf) + } + + public interface OafEntityOrBuilder + extends com.google.protobuf.MessageOrBuilder { + + // required .eu.dnetlib.data.proto.Type type = 1; + boolean hasType(); + eu.dnetlib.data.proto.TypeProtos.Type getType(); + + // required string id = 12; + boolean hasId(); + String getId(); + + // repeated string originalId = 8; + java.util.List getOriginalIdList(); + int getOriginalIdCount(); + String getOriginalId(int index); + + // repeated .eu.dnetlib.data.proto.KeyValue collectedfrom = 9; + java.util.List + getCollectedfromList(); + eu.dnetlib.data.proto.FieldTypeProtos.KeyValue getCollectedfrom(int index); + int getCollectedfromCount(); + java.util.List + getCollectedfromOrBuilderList(); + eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder getCollectedfromOrBuilder( + int index); + + // repeated .eu.dnetlib.data.proto.StructuredProperty pid = 10; + java.util.List + getPidList(); + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty getPid(int index); + int getPidCount(); + java.util.List + getPidOrBuilderList(); + eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder getPidOrBuilder( + int index); + + // optional string dateofcollection = 11; + boolean hasDateofcollection(); + String getDateofcollection(); + + // optional string dateoftransformation = 13; + boolean hasDateoftransformation(); + String getDateoftransformation(); + + // repeated .eu.dnetlib.data.proto.OafRel cachedRel = 2; + java.util.List + getCachedRelList(); + eu.dnetlib.data.proto.OafProtos.OafRel getCachedRel(int index); + int getCachedRelCount(); + java.util.List + getCachedRelOrBuilderList(); + eu.dnetlib.data.proto.OafProtos.OafRelOrBuilder getCachedRelOrBuilder( + int index); + + // repeated .eu.dnetlib.data.proto.Oaf cachedOafRel = 18; + java.util.List + getCachedOafRelList(); + eu.dnetlib.data.proto.OafProtos.Oaf getCachedOafRel(int index); + int getCachedOafRelCount(); + java.util.List + getCachedOafRelOrBuilderList(); + eu.dnetlib.data.proto.OafProtos.OafOrBuilder getCachedOafRelOrBuilder( + int index); + + // optional .eu.dnetlib.data.proto.Datasource datasource = 3; + boolean hasDatasource(); + eu.dnetlib.data.proto.DatasourceProtos.Datasource getDatasource(); + eu.dnetlib.data.proto.DatasourceProtos.DatasourceOrBuilder getDatasourceOrBuilder(); + + // optional .eu.dnetlib.data.proto.Organization organization = 4; + boolean hasOrganization(); + eu.dnetlib.data.proto.OrganizationProtos.Organization getOrganization(); + eu.dnetlib.data.proto.OrganizationProtos.OrganizationOrBuilder getOrganizationOrBuilder(); + + // optional .eu.dnetlib.data.proto.Project project = 6; + boolean hasProject(); + eu.dnetlib.data.proto.ProjectProtos.Project getProject(); + eu.dnetlib.data.proto.ProjectProtos.ProjectOrBuilder getProjectOrBuilder(); + + // optional .eu.dnetlib.data.proto.Result result = 7; + boolean hasResult(); + eu.dnetlib.data.proto.ResultProtos.Result getResult(); + eu.dnetlib.data.proto.ResultProtos.ResultOrBuilder getResultOrBuilder(); + + // optional .eu.dnetlib.data.proto.Person person = 5; + boolean hasPerson(); + eu.dnetlib.data.proto.PersonProtos.Person getPerson(); + eu.dnetlib.data.proto.PersonProtos.PersonOrBuilder getPersonOrBuilder(); + + // repeated .eu.dnetlib.data.proto.OafEntity children = 16; + java.util.List + getChildrenList(); + eu.dnetlib.data.proto.OafProtos.OafEntity getChildren(int index); + int getChildrenCount(); + java.util.List + getChildrenOrBuilderList(); + eu.dnetlib.data.proto.OafProtos.OafEntityOrBuilder getChildrenOrBuilder( + int index); + + // repeated .eu.dnetlib.data.proto.ExtraInfo extraInfo = 15; + java.util.List + getExtraInfoList(); + eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo getExtraInfo(int index); + int getExtraInfoCount(); + java.util.List + getExtraInfoOrBuilderList(); + eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfoOrBuilder getExtraInfoOrBuilder( + int index); + + // optional .eu.dnetlib.data.proto.OAIProvenance oaiprovenance = 17; + boolean hasOaiprovenance(); + eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance getOaiprovenance(); + eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenanceOrBuilder getOaiprovenanceOrBuilder(); + } + public static final class OafEntity extends + com.google.protobuf.GeneratedMessage + implements OafEntityOrBuilder { + // Use OafEntity.newBuilder() to construct. + private OafEntity(Builder builder) { + super(builder); + } + private OafEntity(boolean noInit) {} + + private static final OafEntity defaultInstance; + public static OafEntity getDefaultInstance() { + return defaultInstance; + } + + public OafEntity getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.OafProtos.internal_static_eu_dnetlib_data_proto_OafEntity_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.OafProtos.internal_static_eu_dnetlib_data_proto_OafEntity_fieldAccessorTable; + } + + private int bitField0_; + // required .eu.dnetlib.data.proto.Type type = 1; + public static final int TYPE_FIELD_NUMBER = 1; + private eu.dnetlib.data.proto.TypeProtos.Type type_; + public boolean hasType() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.TypeProtos.Type getType() { + return type_; + } + + // required string id = 12; + public static final int ID_FIELD_NUMBER = 12; + private java.lang.Object id_; + public boolean hasId() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public String getId() { + java.lang.Object ref = id_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + id_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getIdBytes() { + java.lang.Object ref = id_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + id_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // repeated string originalId = 8; + public static final int ORIGINALID_FIELD_NUMBER = 8; + private com.google.protobuf.LazyStringList originalId_; + public java.util.List + getOriginalIdList() { + return originalId_; + } + public int getOriginalIdCount() { + return originalId_.size(); + } + public String getOriginalId(int index) { + return originalId_.get(index); + } + + // repeated .eu.dnetlib.data.proto.KeyValue collectedfrom = 9; + public static final int COLLECTEDFROM_FIELD_NUMBER = 9; + private java.util.List collectedfrom_; + public java.util.List getCollectedfromList() { + return collectedfrom_; + } + public java.util.List + getCollectedfromOrBuilderList() { + return collectedfrom_; + } + public int getCollectedfromCount() { + return collectedfrom_.size(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue getCollectedfrom(int index) { + return collectedfrom_.get(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder getCollectedfromOrBuilder( + int index) { + return collectedfrom_.get(index); + } + + // repeated .eu.dnetlib.data.proto.StructuredProperty pid = 10; + public static final int PID_FIELD_NUMBER = 10; + private java.util.List pid_; + public java.util.List getPidList() { + return pid_; + } + public java.util.List + getPidOrBuilderList() { + return pid_; + } + public int getPidCount() { + return pid_.size(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty getPid(int index) { + return pid_.get(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder getPidOrBuilder( + int index) { + return pid_.get(index); + } + + // optional string dateofcollection = 11; + public static final int DATEOFCOLLECTION_FIELD_NUMBER = 11; + private java.lang.Object dateofcollection_; + public boolean hasDateofcollection() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + public String getDateofcollection() { + java.lang.Object ref = dateofcollection_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + dateofcollection_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getDateofcollectionBytes() { + java.lang.Object ref = dateofcollection_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + dateofcollection_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // optional string dateoftransformation = 13; + public static final int DATEOFTRANSFORMATION_FIELD_NUMBER = 13; + private java.lang.Object dateoftransformation_; + public boolean hasDateoftransformation() { + return ((bitField0_ & 0x00000008) == 0x00000008); + } + public String getDateoftransformation() { + java.lang.Object ref = dateoftransformation_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + dateoftransformation_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getDateoftransformationBytes() { + java.lang.Object ref = dateoftransformation_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + dateoftransformation_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // repeated .eu.dnetlib.data.proto.OafRel cachedRel = 2; + public static final int CACHEDREL_FIELD_NUMBER = 2; + private java.util.List cachedRel_; + public java.util.List getCachedRelList() { + return cachedRel_; + } + public java.util.List + getCachedRelOrBuilderList() { + return cachedRel_; + } + public int getCachedRelCount() { + return cachedRel_.size(); + } + public eu.dnetlib.data.proto.OafProtos.OafRel getCachedRel(int index) { + return cachedRel_.get(index); + } + public eu.dnetlib.data.proto.OafProtos.OafRelOrBuilder getCachedRelOrBuilder( + int index) { + return cachedRel_.get(index); + } + + // repeated .eu.dnetlib.data.proto.Oaf cachedOafRel = 18; + public static final int CACHEDOAFREL_FIELD_NUMBER = 18; + private java.util.List cachedOafRel_; + public java.util.List getCachedOafRelList() { + return cachedOafRel_; + } + public java.util.List + getCachedOafRelOrBuilderList() { + return cachedOafRel_; + } + public int getCachedOafRelCount() { + return cachedOafRel_.size(); + } + public eu.dnetlib.data.proto.OafProtos.Oaf getCachedOafRel(int index) { + return cachedOafRel_.get(index); + } + public eu.dnetlib.data.proto.OafProtos.OafOrBuilder getCachedOafRelOrBuilder( + int index) { + return cachedOafRel_.get(index); + } + + // optional .eu.dnetlib.data.proto.Datasource datasource = 3; + public static final int DATASOURCE_FIELD_NUMBER = 3; + private eu.dnetlib.data.proto.DatasourceProtos.Datasource datasource_; + public boolean hasDatasource() { + return ((bitField0_ & 0x00000010) == 0x00000010); + } + public eu.dnetlib.data.proto.DatasourceProtos.Datasource getDatasource() { + return datasource_; + } + public eu.dnetlib.data.proto.DatasourceProtos.DatasourceOrBuilder getDatasourceOrBuilder() { + return datasource_; + } + + // optional .eu.dnetlib.data.proto.Organization organization = 4; + public static final int ORGANIZATION_FIELD_NUMBER = 4; + private eu.dnetlib.data.proto.OrganizationProtos.Organization organization_; + public boolean hasOrganization() { + return ((bitField0_ & 0x00000020) == 0x00000020); + } + public eu.dnetlib.data.proto.OrganizationProtos.Organization getOrganization() { + return organization_; + } + public eu.dnetlib.data.proto.OrganizationProtos.OrganizationOrBuilder getOrganizationOrBuilder() { + return organization_; + } + + // optional .eu.dnetlib.data.proto.Project project = 6; + public static final int PROJECT_FIELD_NUMBER = 6; + private eu.dnetlib.data.proto.ProjectProtos.Project project_; + public boolean hasProject() { + return ((bitField0_ & 0x00000040) == 0x00000040); + } + public eu.dnetlib.data.proto.ProjectProtos.Project getProject() { + return project_; + } + public eu.dnetlib.data.proto.ProjectProtos.ProjectOrBuilder getProjectOrBuilder() { + return project_; + } + + // optional .eu.dnetlib.data.proto.Result result = 7; + public static final int RESULT_FIELD_NUMBER = 7; + private eu.dnetlib.data.proto.ResultProtos.Result result_; + public boolean hasResult() { + return ((bitField0_ & 0x00000080) == 0x00000080); + } + public eu.dnetlib.data.proto.ResultProtos.Result getResult() { + return result_; + } + public eu.dnetlib.data.proto.ResultProtos.ResultOrBuilder getResultOrBuilder() { + return result_; + } + + // optional .eu.dnetlib.data.proto.Person person = 5; + public static final int PERSON_FIELD_NUMBER = 5; + private eu.dnetlib.data.proto.PersonProtos.Person person_; + public boolean hasPerson() { + return ((bitField0_ & 0x00000100) == 0x00000100); + } + public eu.dnetlib.data.proto.PersonProtos.Person getPerson() { + return person_; + } + public eu.dnetlib.data.proto.PersonProtos.PersonOrBuilder getPersonOrBuilder() { + return person_; + } + + // repeated .eu.dnetlib.data.proto.OafEntity children = 16; + public static final int CHILDREN_FIELD_NUMBER = 16; + private java.util.List children_; + public java.util.List getChildrenList() { + return children_; + } + public java.util.List + getChildrenOrBuilderList() { + return children_; + } + public int getChildrenCount() { + return children_.size(); + } + public eu.dnetlib.data.proto.OafProtos.OafEntity getChildren(int index) { + return children_.get(index); + } + public eu.dnetlib.data.proto.OafProtos.OafEntityOrBuilder getChildrenOrBuilder( + int index) { + return children_.get(index); + } + + // repeated .eu.dnetlib.data.proto.ExtraInfo extraInfo = 15; + public static final int EXTRAINFO_FIELD_NUMBER = 15; + private java.util.List extraInfo_; + public java.util.List getExtraInfoList() { + return extraInfo_; + } + public java.util.List + getExtraInfoOrBuilderList() { + return extraInfo_; + } + public int getExtraInfoCount() { + return extraInfo_.size(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo getExtraInfo(int index) { + return extraInfo_.get(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfoOrBuilder getExtraInfoOrBuilder( + int index) { + return extraInfo_.get(index); + } + + // optional .eu.dnetlib.data.proto.OAIProvenance oaiprovenance = 17; + public static final int OAIPROVENANCE_FIELD_NUMBER = 17; + private eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance oaiprovenance_; + public boolean hasOaiprovenance() { + return ((bitField0_ & 0x00000200) == 0x00000200); + } + public eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance getOaiprovenance() { + return oaiprovenance_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenanceOrBuilder getOaiprovenanceOrBuilder() { + return oaiprovenance_; + } + + private void initFields() { + type_ = eu.dnetlib.data.proto.TypeProtos.Type.datasource; + id_ = ""; + originalId_ = com.google.protobuf.LazyStringArrayList.EMPTY; + collectedfrom_ = java.util.Collections.emptyList(); + pid_ = java.util.Collections.emptyList(); + dateofcollection_ = ""; + dateoftransformation_ = ""; + cachedRel_ = java.util.Collections.emptyList(); + cachedOafRel_ = java.util.Collections.emptyList(); + datasource_ = eu.dnetlib.data.proto.DatasourceProtos.Datasource.getDefaultInstance(); + organization_ = eu.dnetlib.data.proto.OrganizationProtos.Organization.getDefaultInstance(); + project_ = eu.dnetlib.data.proto.ProjectProtos.Project.getDefaultInstance(); + result_ = eu.dnetlib.data.proto.ResultProtos.Result.getDefaultInstance(); + person_ = eu.dnetlib.data.proto.PersonProtos.Person.getDefaultInstance(); + children_ = java.util.Collections.emptyList(); + extraInfo_ = java.util.Collections.emptyList(); + oaiprovenance_ = eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.getDefaultInstance(); + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + if (!hasType()) { + memoizedIsInitialized = 0; + return false; + } + if (!hasId()) { + memoizedIsInitialized = 0; + return false; + } + for (int i = 0; i < getCollectedfromCount(); i++) { + if (!getCollectedfrom(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + for (int i = 0; i < getPidCount(); i++) { + if (!getPid(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + for (int i = 0; i < getCachedRelCount(); i++) { + if (!getCachedRel(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + for (int i = 0; i < getCachedOafRelCount(); i++) { + if (!getCachedOafRel(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasDatasource()) { + if (!getDatasource().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasOrganization()) { + if (!getOrganization().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasProject()) { + if (!getProject().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasResult()) { + if (!getResult().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasPerson()) { + if (!getPerson().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + for (int i = 0; i < getChildrenCount(); i++) { + if (!getChildren(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + for (int i = 0; i < getExtraInfoCount(); i++) { + if (!getExtraInfo(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeEnum(1, type_.getNumber()); + } + for (int i = 0; i < cachedRel_.size(); i++) { + output.writeMessage(2, cachedRel_.get(i)); + } + if (((bitField0_ & 0x00000010) == 0x00000010)) { + output.writeMessage(3, datasource_); + } + if (((bitField0_ & 0x00000020) == 0x00000020)) { + output.writeMessage(4, organization_); + } + if (((bitField0_ & 0x00000100) == 0x00000100)) { + output.writeMessage(5, person_); + } + if (((bitField0_ & 0x00000040) == 0x00000040)) { + output.writeMessage(6, project_); + } + if (((bitField0_ & 0x00000080) == 0x00000080)) { + output.writeMessage(7, result_); + } + for (int i = 0; i < originalId_.size(); i++) { + output.writeBytes(8, originalId_.getByteString(i)); + } + for (int i = 0; i < collectedfrom_.size(); i++) { + output.writeMessage(9, collectedfrom_.get(i)); + } + for (int i = 0; i < pid_.size(); i++) { + output.writeMessage(10, pid_.get(i)); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + output.writeBytes(11, getDateofcollectionBytes()); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + output.writeBytes(12, getIdBytes()); + } + if (((bitField0_ & 0x00000008) == 0x00000008)) { + output.writeBytes(13, getDateoftransformationBytes()); + } + for (int i = 0; i < extraInfo_.size(); i++) { + output.writeMessage(15, extraInfo_.get(i)); + } + for (int i = 0; i < children_.size(); i++) { + output.writeMessage(16, children_.get(i)); + } + if (((bitField0_ & 0x00000200) == 0x00000200)) { + output.writeMessage(17, oaiprovenance_); + } + for (int i = 0; i < cachedOafRel_.size(); i++) { + output.writeMessage(18, cachedOafRel_.get(i)); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeEnumSize(1, type_.getNumber()); + } + for (int i = 0; i < cachedRel_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(2, cachedRel_.get(i)); + } + if (((bitField0_ & 0x00000010) == 0x00000010)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(3, datasource_); + } + if (((bitField0_ & 0x00000020) == 0x00000020)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(4, organization_); + } + if (((bitField0_ & 0x00000100) == 0x00000100)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(5, person_); + } + if (((bitField0_ & 0x00000040) == 0x00000040)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(6, project_); + } + if (((bitField0_ & 0x00000080) == 0x00000080)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(7, result_); + } + { + int dataSize = 0; + for (int i = 0; i < originalId_.size(); i++) { + dataSize += com.google.protobuf.CodedOutputStream + .computeBytesSizeNoTag(originalId_.getByteString(i)); + } + size += dataSize; + size += 1 * getOriginalIdList().size(); + } + for (int i = 0; i < collectedfrom_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(9, collectedfrom_.get(i)); + } + for (int i = 0; i < pid_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(10, pid_.get(i)); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(11, getDateofcollectionBytes()); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(12, getIdBytes()); + } + if (((bitField0_ & 0x00000008) == 0x00000008)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(13, getDateoftransformationBytes()); + } + for (int i = 0; i < extraInfo_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(15, extraInfo_.get(i)); + } + for (int i = 0; i < children_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(16, children_.get(i)); + } + if (((bitField0_ & 0x00000200) == 0x00000200)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(17, oaiprovenance_); + } + for (int i = 0; i < cachedOafRel_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(18, cachedOafRel_.get(i)); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static eu.dnetlib.data.proto.OafProtos.OafEntity parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.OafProtos.OafEntity parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.OafProtos.OafEntity parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.OafProtos.OafEntity parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.OafProtos.OafEntity parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.OafProtos.OafEntity parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.OafProtos.OafEntity parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.OafProtos.OafEntity parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.OafProtos.OafEntity parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.OafProtos.OafEntity parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(eu.dnetlib.data.proto.OafProtos.OafEntity prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder + implements eu.dnetlib.data.proto.OafProtos.OafEntityOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.OafProtos.internal_static_eu_dnetlib_data_proto_OafEntity_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.OafProtos.internal_static_eu_dnetlib_data_proto_OafEntity_fieldAccessorTable; + } + + // Construct using eu.dnetlib.data.proto.OafProtos.OafEntity.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getCollectedfromFieldBuilder(); + getPidFieldBuilder(); + getCachedRelFieldBuilder(); + getCachedOafRelFieldBuilder(); + getDatasourceFieldBuilder(); + getOrganizationFieldBuilder(); + getProjectFieldBuilder(); + getResultFieldBuilder(); + getPersonFieldBuilder(); + getChildrenFieldBuilder(); + getExtraInfoFieldBuilder(); + getOaiprovenanceFieldBuilder(); + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + type_ = eu.dnetlib.data.proto.TypeProtos.Type.datasource; + bitField0_ = (bitField0_ & ~0x00000001); + id_ = ""; + bitField0_ = (bitField0_ & ~0x00000002); + originalId_ = com.google.protobuf.LazyStringArrayList.EMPTY; + bitField0_ = (bitField0_ & ~0x00000004); + if (collectedfromBuilder_ == null) { + collectedfrom_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000008); + } else { + collectedfromBuilder_.clear(); + } + if (pidBuilder_ == null) { + pid_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000010); + } else { + pidBuilder_.clear(); + } + dateofcollection_ = ""; + bitField0_ = (bitField0_ & ~0x00000020); + dateoftransformation_ = ""; + bitField0_ = (bitField0_ & ~0x00000040); + if (cachedRelBuilder_ == null) { + cachedRel_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000080); + } else { + cachedRelBuilder_.clear(); + } + if (cachedOafRelBuilder_ == null) { + cachedOafRel_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000100); + } else { + cachedOafRelBuilder_.clear(); + } + if (datasourceBuilder_ == null) { + datasource_ = eu.dnetlib.data.proto.DatasourceProtos.Datasource.getDefaultInstance(); + } else { + datasourceBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000200); + if (organizationBuilder_ == null) { + organization_ = eu.dnetlib.data.proto.OrganizationProtos.Organization.getDefaultInstance(); + } else { + organizationBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000400); + if (projectBuilder_ == null) { + project_ = eu.dnetlib.data.proto.ProjectProtos.Project.getDefaultInstance(); + } else { + projectBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000800); + if (resultBuilder_ == null) { + result_ = eu.dnetlib.data.proto.ResultProtos.Result.getDefaultInstance(); + } else { + resultBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00001000); + if (personBuilder_ == null) { + person_ = eu.dnetlib.data.proto.PersonProtos.Person.getDefaultInstance(); + } else { + personBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00002000); + if (childrenBuilder_ == null) { + children_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00004000); + } else { + childrenBuilder_.clear(); + } + if (extraInfoBuilder_ == null) { + extraInfo_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00008000); + } else { + extraInfoBuilder_.clear(); + } + if (oaiprovenanceBuilder_ == null) { + oaiprovenance_ = eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.getDefaultInstance(); + } else { + oaiprovenanceBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00010000); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return eu.dnetlib.data.proto.OafProtos.OafEntity.getDescriptor(); + } + + public eu.dnetlib.data.proto.OafProtos.OafEntity getDefaultInstanceForType() { + return eu.dnetlib.data.proto.OafProtos.OafEntity.getDefaultInstance(); + } + + public eu.dnetlib.data.proto.OafProtos.OafEntity build() { + eu.dnetlib.data.proto.OafProtos.OafEntity result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + private eu.dnetlib.data.proto.OafProtos.OafEntity buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + eu.dnetlib.data.proto.OafProtos.OafEntity result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return result; + } + + public eu.dnetlib.data.proto.OafProtos.OafEntity buildPartial() { + eu.dnetlib.data.proto.OafProtos.OafEntity result = new eu.dnetlib.data.proto.OafProtos.OafEntity(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + result.type_ = type_; + if (((from_bitField0_ & 0x00000002) == 0x00000002)) { + to_bitField0_ |= 0x00000002; + } + result.id_ = id_; + if (((bitField0_ & 0x00000004) == 0x00000004)) { + originalId_ = new com.google.protobuf.UnmodifiableLazyStringList( + originalId_); + bitField0_ = (bitField0_ & ~0x00000004); + } + result.originalId_ = originalId_; + if (collectedfromBuilder_ == null) { + if (((bitField0_ & 0x00000008) == 0x00000008)) { + collectedfrom_ = java.util.Collections.unmodifiableList(collectedfrom_); + bitField0_ = (bitField0_ & ~0x00000008); + } + result.collectedfrom_ = collectedfrom_; + } else { + result.collectedfrom_ = collectedfromBuilder_.build(); + } + if (pidBuilder_ == null) { + if (((bitField0_ & 0x00000010) == 0x00000010)) { + pid_ = java.util.Collections.unmodifiableList(pid_); + bitField0_ = (bitField0_ & ~0x00000010); + } + result.pid_ = pid_; + } else { + result.pid_ = pidBuilder_.build(); + } + if (((from_bitField0_ & 0x00000020) == 0x00000020)) { + to_bitField0_ |= 0x00000004; + } + result.dateofcollection_ = dateofcollection_; + if (((from_bitField0_ & 0x00000040) == 0x00000040)) { + to_bitField0_ |= 0x00000008; + } + result.dateoftransformation_ = dateoftransformation_; + if (cachedRelBuilder_ == null) { + if (((bitField0_ & 0x00000080) == 0x00000080)) { + cachedRel_ = java.util.Collections.unmodifiableList(cachedRel_); + bitField0_ = (bitField0_ & ~0x00000080); + } + result.cachedRel_ = cachedRel_; + } else { + result.cachedRel_ = cachedRelBuilder_.build(); + } + if (cachedOafRelBuilder_ == null) { + if (((bitField0_ & 0x00000100) == 0x00000100)) { + cachedOafRel_ = java.util.Collections.unmodifiableList(cachedOafRel_); + bitField0_ = (bitField0_ & ~0x00000100); + } + result.cachedOafRel_ = cachedOafRel_; + } else { + result.cachedOafRel_ = cachedOafRelBuilder_.build(); + } + if (((from_bitField0_ & 0x00000200) == 0x00000200)) { + to_bitField0_ |= 0x00000010; + } + if (datasourceBuilder_ == null) { + result.datasource_ = datasource_; + } else { + result.datasource_ = datasourceBuilder_.build(); + } + if (((from_bitField0_ & 0x00000400) == 0x00000400)) { + to_bitField0_ |= 0x00000020; + } + if (organizationBuilder_ == null) { + result.organization_ = organization_; + } else { + result.organization_ = organizationBuilder_.build(); + } + if (((from_bitField0_ & 0x00000800) == 0x00000800)) { + to_bitField0_ |= 0x00000040; + } + if (projectBuilder_ == null) { + result.project_ = project_; + } else { + result.project_ = projectBuilder_.build(); + } + if (((from_bitField0_ & 0x00001000) == 0x00001000)) { + to_bitField0_ |= 0x00000080; + } + if (resultBuilder_ == null) { + result.result_ = result_; + } else { + result.result_ = resultBuilder_.build(); + } + if (((from_bitField0_ & 0x00002000) == 0x00002000)) { + to_bitField0_ |= 0x00000100; + } + if (personBuilder_ == null) { + result.person_ = person_; + } else { + result.person_ = personBuilder_.build(); + } + if (childrenBuilder_ == null) { + if (((bitField0_ & 0x00004000) == 0x00004000)) { + children_ = java.util.Collections.unmodifiableList(children_); + bitField0_ = (bitField0_ & ~0x00004000); + } + result.children_ = children_; + } else { + result.children_ = childrenBuilder_.build(); + } + if (extraInfoBuilder_ == null) { + if (((bitField0_ & 0x00008000) == 0x00008000)) { + extraInfo_ = java.util.Collections.unmodifiableList(extraInfo_); + bitField0_ = (bitField0_ & ~0x00008000); + } + result.extraInfo_ = extraInfo_; + } else { + result.extraInfo_ = extraInfoBuilder_.build(); + } + if (((from_bitField0_ & 0x00010000) == 0x00010000)) { + to_bitField0_ |= 0x00000200; + } + if (oaiprovenanceBuilder_ == null) { + result.oaiprovenance_ = oaiprovenance_; + } else { + result.oaiprovenance_ = oaiprovenanceBuilder_.build(); + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof eu.dnetlib.data.proto.OafProtos.OafEntity) { + return mergeFrom((eu.dnetlib.data.proto.OafProtos.OafEntity)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(eu.dnetlib.data.proto.OafProtos.OafEntity other) { + if (other == eu.dnetlib.data.proto.OafProtos.OafEntity.getDefaultInstance()) return this; + if (other.hasType()) { + setType(other.getType()); + } + if (other.hasId()) { + setId(other.getId()); + } + if (!other.originalId_.isEmpty()) { + if (originalId_.isEmpty()) { + originalId_ = other.originalId_; + bitField0_ = (bitField0_ & ~0x00000004); + } else { + ensureOriginalIdIsMutable(); + originalId_.addAll(other.originalId_); + } + onChanged(); + } + if (collectedfromBuilder_ == null) { + if (!other.collectedfrom_.isEmpty()) { + if (collectedfrom_.isEmpty()) { + collectedfrom_ = other.collectedfrom_; + bitField0_ = (bitField0_ & ~0x00000008); + } else { + ensureCollectedfromIsMutable(); + collectedfrom_.addAll(other.collectedfrom_); + } + onChanged(); + } + } else { + if (!other.collectedfrom_.isEmpty()) { + if (collectedfromBuilder_.isEmpty()) { + collectedfromBuilder_.dispose(); + collectedfromBuilder_ = null; + collectedfrom_ = other.collectedfrom_; + bitField0_ = (bitField0_ & ~0x00000008); + collectedfromBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + getCollectedfromFieldBuilder() : null; + } else { + collectedfromBuilder_.addAllMessages(other.collectedfrom_); + } + } + } + if (pidBuilder_ == null) { + if (!other.pid_.isEmpty()) { + if (pid_.isEmpty()) { + pid_ = other.pid_; + bitField0_ = (bitField0_ & ~0x00000010); + } else { + ensurePidIsMutable(); + pid_.addAll(other.pid_); + } + onChanged(); + } + } else { + if (!other.pid_.isEmpty()) { + if (pidBuilder_.isEmpty()) { + pidBuilder_.dispose(); + pidBuilder_ = null; + pid_ = other.pid_; + bitField0_ = (bitField0_ & ~0x00000010); + pidBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + getPidFieldBuilder() : null; + } else { + pidBuilder_.addAllMessages(other.pid_); + } + } + } + if (other.hasDateofcollection()) { + setDateofcollection(other.getDateofcollection()); + } + if (other.hasDateoftransformation()) { + setDateoftransformation(other.getDateoftransformation()); + } + if (cachedRelBuilder_ == null) { + if (!other.cachedRel_.isEmpty()) { + if (cachedRel_.isEmpty()) { + cachedRel_ = other.cachedRel_; + bitField0_ = (bitField0_ & ~0x00000080); + } else { + ensureCachedRelIsMutable(); + cachedRel_.addAll(other.cachedRel_); + } + onChanged(); + } + } else { + if (!other.cachedRel_.isEmpty()) { + if (cachedRelBuilder_.isEmpty()) { + cachedRelBuilder_.dispose(); + cachedRelBuilder_ = null; + cachedRel_ = other.cachedRel_; + bitField0_ = (bitField0_ & ~0x00000080); + cachedRelBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + getCachedRelFieldBuilder() : null; + } else { + cachedRelBuilder_.addAllMessages(other.cachedRel_); + } + } + } + if (cachedOafRelBuilder_ == null) { + if (!other.cachedOafRel_.isEmpty()) { + if (cachedOafRel_.isEmpty()) { + cachedOafRel_ = other.cachedOafRel_; + bitField0_ = (bitField0_ & ~0x00000100); + } else { + ensureCachedOafRelIsMutable(); + cachedOafRel_.addAll(other.cachedOafRel_); + } + onChanged(); + } + } else { + if (!other.cachedOafRel_.isEmpty()) { + if (cachedOafRelBuilder_.isEmpty()) { + cachedOafRelBuilder_.dispose(); + cachedOafRelBuilder_ = null; + cachedOafRel_ = other.cachedOafRel_; + bitField0_ = (bitField0_ & ~0x00000100); + cachedOafRelBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + getCachedOafRelFieldBuilder() : null; + } else { + cachedOafRelBuilder_.addAllMessages(other.cachedOafRel_); + } + } + } + if (other.hasDatasource()) { + mergeDatasource(other.getDatasource()); + } + if (other.hasOrganization()) { + mergeOrganization(other.getOrganization()); + } + if (other.hasProject()) { + mergeProject(other.getProject()); + } + if (other.hasResult()) { + mergeResult(other.getResult()); + } + if (other.hasPerson()) { + mergePerson(other.getPerson()); + } + if (childrenBuilder_ == null) { + if (!other.children_.isEmpty()) { + if (children_.isEmpty()) { + children_ = other.children_; + bitField0_ = (bitField0_ & ~0x00004000); + } else { + ensureChildrenIsMutable(); + children_.addAll(other.children_); + } + onChanged(); + } + } else { + if (!other.children_.isEmpty()) { + if (childrenBuilder_.isEmpty()) { + childrenBuilder_.dispose(); + childrenBuilder_ = null; + children_ = other.children_; + bitField0_ = (bitField0_ & ~0x00004000); + childrenBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + getChildrenFieldBuilder() : null; + } else { + childrenBuilder_.addAllMessages(other.children_); + } + } + } + if (extraInfoBuilder_ == null) { + if (!other.extraInfo_.isEmpty()) { + if (extraInfo_.isEmpty()) { + extraInfo_ = other.extraInfo_; + bitField0_ = (bitField0_ & ~0x00008000); + } else { + ensureExtraInfoIsMutable(); + extraInfo_.addAll(other.extraInfo_); + } + onChanged(); + } + } else { + if (!other.extraInfo_.isEmpty()) { + if (extraInfoBuilder_.isEmpty()) { + extraInfoBuilder_.dispose(); + extraInfoBuilder_ = null; + extraInfo_ = other.extraInfo_; + bitField0_ = (bitField0_ & ~0x00008000); + extraInfoBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + getExtraInfoFieldBuilder() : null; + } else { + extraInfoBuilder_.addAllMessages(other.extraInfo_); + } + } + } + if (other.hasOaiprovenance()) { + mergeOaiprovenance(other.getOaiprovenance()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + if (!hasType()) { + + return false; + } + if (!hasId()) { + + return false; + } + for (int i = 0; i < getCollectedfromCount(); i++) { + if (!getCollectedfrom(i).isInitialized()) { + + return false; + } + } + for (int i = 0; i < getPidCount(); i++) { + if (!getPid(i).isInitialized()) { + + return false; + } + } + for (int i = 0; i < getCachedRelCount(); i++) { + if (!getCachedRel(i).isInitialized()) { + + return false; + } + } + for (int i = 0; i < getCachedOafRelCount(); i++) { + if (!getCachedOafRel(i).isInitialized()) { + + return false; + } + } + if (hasDatasource()) { + if (!getDatasource().isInitialized()) { + + return false; + } + } + if (hasOrganization()) { + if (!getOrganization().isInitialized()) { + + return false; + } + } + if (hasProject()) { + if (!getProject().isInitialized()) { + + return false; + } + } + if (hasResult()) { + if (!getResult().isInitialized()) { + + return false; + } + } + if (hasPerson()) { + if (!getPerson().isInitialized()) { + + return false; + } + } + for (int i = 0; i < getChildrenCount(); i++) { + if (!getChildren(i).isInitialized()) { + + return false; + } + } + for (int i = 0; i < getExtraInfoCount(); i++) { + if (!getExtraInfo(i).isInitialized()) { + + return false; + } + } + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + } + break; + } + case 8: { + int rawValue = input.readEnum(); + eu.dnetlib.data.proto.TypeProtos.Type value = eu.dnetlib.data.proto.TypeProtos.Type.valueOf(rawValue); + if (value == null) { + unknownFields.mergeVarintField(1, rawValue); + } else { + bitField0_ |= 0x00000001; + type_ = value; + } + break; + } + case 18: { + eu.dnetlib.data.proto.OafProtos.OafRel.Builder subBuilder = eu.dnetlib.data.proto.OafProtos.OafRel.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addCachedRel(subBuilder.buildPartial()); + break; + } + case 26: { + eu.dnetlib.data.proto.DatasourceProtos.Datasource.Builder subBuilder = eu.dnetlib.data.proto.DatasourceProtos.Datasource.newBuilder(); + if (hasDatasource()) { + subBuilder.mergeFrom(getDatasource()); + } + input.readMessage(subBuilder, extensionRegistry); + setDatasource(subBuilder.buildPartial()); + break; + } + case 34: { + eu.dnetlib.data.proto.OrganizationProtos.Organization.Builder subBuilder = eu.dnetlib.data.proto.OrganizationProtos.Organization.newBuilder(); + if (hasOrganization()) { + subBuilder.mergeFrom(getOrganization()); + } + input.readMessage(subBuilder, extensionRegistry); + setOrganization(subBuilder.buildPartial()); + break; + } + case 42: { + eu.dnetlib.data.proto.PersonProtos.Person.Builder subBuilder = eu.dnetlib.data.proto.PersonProtos.Person.newBuilder(); + if (hasPerson()) { + subBuilder.mergeFrom(getPerson()); + } + input.readMessage(subBuilder, extensionRegistry); + setPerson(subBuilder.buildPartial()); + break; + } + case 50: { + eu.dnetlib.data.proto.ProjectProtos.Project.Builder subBuilder = eu.dnetlib.data.proto.ProjectProtos.Project.newBuilder(); + if (hasProject()) { + subBuilder.mergeFrom(getProject()); + } + input.readMessage(subBuilder, extensionRegistry); + setProject(subBuilder.buildPartial()); + break; + } + case 58: { + eu.dnetlib.data.proto.ResultProtos.Result.Builder subBuilder = eu.dnetlib.data.proto.ResultProtos.Result.newBuilder(); + if (hasResult()) { + subBuilder.mergeFrom(getResult()); + } + input.readMessage(subBuilder, extensionRegistry); + setResult(subBuilder.buildPartial()); + break; + } + case 66: { + ensureOriginalIdIsMutable(); + originalId_.add(input.readBytes()); + break; + } + case 74: { + eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addCollectedfrom(subBuilder.buildPartial()); + break; + } + case 82: { + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addPid(subBuilder.buildPartial()); + break; + } + case 90: { + bitField0_ |= 0x00000020; + dateofcollection_ = input.readBytes(); + break; + } + case 98: { + bitField0_ |= 0x00000002; + id_ = input.readBytes(); + break; + } + case 106: { + bitField0_ |= 0x00000040; + dateoftransformation_ = input.readBytes(); + break; + } + case 122: { + eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addExtraInfo(subBuilder.buildPartial()); + break; + } + case 130: { + eu.dnetlib.data.proto.OafProtos.OafEntity.Builder subBuilder = eu.dnetlib.data.proto.OafProtos.OafEntity.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addChildren(subBuilder.buildPartial()); + break; + } + case 138: { + eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.newBuilder(); + if (hasOaiprovenance()) { + subBuilder.mergeFrom(getOaiprovenance()); + } + input.readMessage(subBuilder, extensionRegistry); + setOaiprovenance(subBuilder.buildPartial()); + break; + } + case 146: { + eu.dnetlib.data.proto.OafProtos.Oaf.Builder subBuilder = eu.dnetlib.data.proto.OafProtos.Oaf.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addCachedOafRel(subBuilder.buildPartial()); + break; + } + } + } + } + + private int bitField0_; + + // required .eu.dnetlib.data.proto.Type type = 1; + private eu.dnetlib.data.proto.TypeProtos.Type type_ = eu.dnetlib.data.proto.TypeProtos.Type.datasource; + public boolean hasType() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.TypeProtos.Type getType() { + return type_; + } + public Builder setType(eu.dnetlib.data.proto.TypeProtos.Type value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + type_ = value; + onChanged(); + return this; + } + public Builder clearType() { + bitField0_ = (bitField0_ & ~0x00000001); + type_ = eu.dnetlib.data.proto.TypeProtos.Type.datasource; + onChanged(); + return this; + } + + // required string id = 12; + private java.lang.Object id_ = ""; + public boolean hasId() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public String getId() { + java.lang.Object ref = id_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + id_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setId(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + id_ = value; + onChanged(); + return this; + } + public Builder clearId() { + bitField0_ = (bitField0_ & ~0x00000002); + id_ = getDefaultInstance().getId(); + onChanged(); + return this; + } + void setId(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000002; + id_ = value; + onChanged(); + } + + // repeated string originalId = 8; + private com.google.protobuf.LazyStringList originalId_ = com.google.protobuf.LazyStringArrayList.EMPTY; + private void ensureOriginalIdIsMutable() { + if (!((bitField0_ & 0x00000004) == 0x00000004)) { + originalId_ = new com.google.protobuf.LazyStringArrayList(originalId_); + bitField0_ |= 0x00000004; + } + } + public java.util.List + getOriginalIdList() { + return java.util.Collections.unmodifiableList(originalId_); + } + public int getOriginalIdCount() { + return originalId_.size(); + } + public String getOriginalId(int index) { + return originalId_.get(index); + } + public Builder setOriginalId( + int index, String value) { + if (value == null) { + throw new NullPointerException(); + } + ensureOriginalIdIsMutable(); + originalId_.set(index, value); + onChanged(); + return this; + } + public Builder addOriginalId(String value) { + if (value == null) { + throw new NullPointerException(); + } + ensureOriginalIdIsMutable(); + originalId_.add(value); + onChanged(); + return this; + } + public Builder addAllOriginalId( + java.lang.Iterable values) { + ensureOriginalIdIsMutable(); + super.addAll(values, originalId_); + onChanged(); + return this; + } + public Builder clearOriginalId() { + originalId_ = com.google.protobuf.LazyStringArrayList.EMPTY; + bitField0_ = (bitField0_ & ~0x00000004); + onChanged(); + return this; + } + void addOriginalId(com.google.protobuf.ByteString value) { + ensureOriginalIdIsMutable(); + originalId_.add(value); + onChanged(); + } + + // repeated .eu.dnetlib.data.proto.KeyValue collectedfrom = 9; + private java.util.List collectedfrom_ = + java.util.Collections.emptyList(); + private void ensureCollectedfromIsMutable() { + if (!((bitField0_ & 0x00000008) == 0x00000008)) { + collectedfrom_ = new java.util.ArrayList(collectedfrom_); + bitField0_ |= 0x00000008; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.KeyValue, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder, eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder> collectedfromBuilder_; + + public java.util.List getCollectedfromList() { + if (collectedfromBuilder_ == null) { + return java.util.Collections.unmodifiableList(collectedfrom_); + } else { + return collectedfromBuilder_.getMessageList(); + } + } + public int getCollectedfromCount() { + if (collectedfromBuilder_ == null) { + return collectedfrom_.size(); + } else { + return collectedfromBuilder_.getCount(); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue getCollectedfrom(int index) { + if (collectedfromBuilder_ == null) { + return collectedfrom_.get(index); + } else { + return collectedfromBuilder_.getMessage(index); + } + } + public Builder setCollectedfrom( + int index, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue value) { + if (collectedfromBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureCollectedfromIsMutable(); + collectedfrom_.set(index, value); + onChanged(); + } else { + collectedfromBuilder_.setMessage(index, value); + } + return this; + } + public Builder setCollectedfrom( + int index, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder builderForValue) { + if (collectedfromBuilder_ == null) { + ensureCollectedfromIsMutable(); + collectedfrom_.set(index, builderForValue.build()); + onChanged(); + } else { + collectedfromBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + public Builder addCollectedfrom(eu.dnetlib.data.proto.FieldTypeProtos.KeyValue value) { + if (collectedfromBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureCollectedfromIsMutable(); + collectedfrom_.add(value); + onChanged(); + } else { + collectedfromBuilder_.addMessage(value); + } + return this; + } + public Builder addCollectedfrom( + int index, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue value) { + if (collectedfromBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureCollectedfromIsMutable(); + collectedfrom_.add(index, value); + onChanged(); + } else { + collectedfromBuilder_.addMessage(index, value); + } + return this; + } + public Builder addCollectedfrom( + eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder builderForValue) { + if (collectedfromBuilder_ == null) { + ensureCollectedfromIsMutable(); + collectedfrom_.add(builderForValue.build()); + onChanged(); + } else { + collectedfromBuilder_.addMessage(builderForValue.build()); + } + return this; + } + public Builder addCollectedfrom( + int index, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder builderForValue) { + if (collectedfromBuilder_ == null) { + ensureCollectedfromIsMutable(); + collectedfrom_.add(index, builderForValue.build()); + onChanged(); + } else { + collectedfromBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + public Builder addAllCollectedfrom( + java.lang.Iterable values) { + if (collectedfromBuilder_ == null) { + ensureCollectedfromIsMutable(); + super.addAll(values, collectedfrom_); + onChanged(); + } else { + collectedfromBuilder_.addAllMessages(values); + } + return this; + } + public Builder clearCollectedfrom() { + if (collectedfromBuilder_ == null) { + collectedfrom_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000008); + onChanged(); + } else { + collectedfromBuilder_.clear(); + } + return this; + } + public Builder removeCollectedfrom(int index) { + if (collectedfromBuilder_ == null) { + ensureCollectedfromIsMutable(); + collectedfrom_.remove(index); + onChanged(); + } else { + collectedfromBuilder_.remove(index); + } + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder getCollectedfromBuilder( + int index) { + return getCollectedfromFieldBuilder().getBuilder(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder getCollectedfromOrBuilder( + int index) { + if (collectedfromBuilder_ == null) { + return collectedfrom_.get(index); } else { + return collectedfromBuilder_.getMessageOrBuilder(index); + } + } + public java.util.List + getCollectedfromOrBuilderList() { + if (collectedfromBuilder_ != null) { + return collectedfromBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(collectedfrom_); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder addCollectedfromBuilder() { + return getCollectedfromFieldBuilder().addBuilder( + eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.getDefaultInstance()); + } + public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder addCollectedfromBuilder( + int index) { + return getCollectedfromFieldBuilder().addBuilder( + index, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.getDefaultInstance()); + } + public java.util.List + getCollectedfromBuilderList() { + return getCollectedfromFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.KeyValue, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder, eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder> + getCollectedfromFieldBuilder() { + if (collectedfromBuilder_ == null) { + collectedfromBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.KeyValue, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder, eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder>( + collectedfrom_, + ((bitField0_ & 0x00000008) == 0x00000008), + getParentForChildren(), + isClean()); + collectedfrom_ = null; + } + return collectedfromBuilder_; + } + + // repeated .eu.dnetlib.data.proto.StructuredProperty pid = 10; + private java.util.List pid_ = + java.util.Collections.emptyList(); + private void ensurePidIsMutable() { + if (!((bitField0_ & 0x00000010) == 0x00000010)) { + pid_ = new java.util.ArrayList(pid_); + bitField0_ |= 0x00000010; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder> pidBuilder_; + + public java.util.List getPidList() { + if (pidBuilder_ == null) { + return java.util.Collections.unmodifiableList(pid_); + } else { + return pidBuilder_.getMessageList(); + } + } + public int getPidCount() { + if (pidBuilder_ == null) { + return pid_.size(); + } else { + return pidBuilder_.getCount(); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty getPid(int index) { + if (pidBuilder_ == null) { + return pid_.get(index); + } else { + return pidBuilder_.getMessage(index); + } + } + public Builder setPid( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty value) { + if (pidBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensurePidIsMutable(); + pid_.set(index, value); + onChanged(); + } else { + pidBuilder_.setMessage(index, value); + } + return this; + } + public Builder setPid( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder builderForValue) { + if (pidBuilder_ == null) { + ensurePidIsMutable(); + pid_.set(index, builderForValue.build()); + onChanged(); + } else { + pidBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + public Builder addPid(eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty value) { + if (pidBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensurePidIsMutable(); + pid_.add(value); + onChanged(); + } else { + pidBuilder_.addMessage(value); + } + return this; + } + public Builder addPid( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty value) { + if (pidBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensurePidIsMutable(); + pid_.add(index, value); + onChanged(); + } else { + pidBuilder_.addMessage(index, value); + } + return this; + } + public Builder addPid( + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder builderForValue) { + if (pidBuilder_ == null) { + ensurePidIsMutable(); + pid_.add(builderForValue.build()); + onChanged(); + } else { + pidBuilder_.addMessage(builderForValue.build()); + } + return this; + } + public Builder addPid( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder builderForValue) { + if (pidBuilder_ == null) { + ensurePidIsMutable(); + pid_.add(index, builderForValue.build()); + onChanged(); + } else { + pidBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + public Builder addAllPid( + java.lang.Iterable values) { + if (pidBuilder_ == null) { + ensurePidIsMutable(); + super.addAll(values, pid_); + onChanged(); + } else { + pidBuilder_.addAllMessages(values); + } + return this; + } + public Builder clearPid() { + if (pidBuilder_ == null) { + pid_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000010); + onChanged(); + } else { + pidBuilder_.clear(); + } + return this; + } + public Builder removePid(int index) { + if (pidBuilder_ == null) { + ensurePidIsMutable(); + pid_.remove(index); + onChanged(); + } else { + pidBuilder_.remove(index); + } + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder getPidBuilder( + int index) { + return getPidFieldBuilder().getBuilder(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder getPidOrBuilder( + int index) { + if (pidBuilder_ == null) { + return pid_.get(index); } else { + return pidBuilder_.getMessageOrBuilder(index); + } + } + public java.util.List + getPidOrBuilderList() { + if (pidBuilder_ != null) { + return pidBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(pid_); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder addPidBuilder() { + return getPidFieldBuilder().addBuilder( + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.getDefaultInstance()); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder addPidBuilder( + int index) { + return getPidFieldBuilder().addBuilder( + index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.getDefaultInstance()); + } + public java.util.List + getPidBuilderList() { + return getPidFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder> + getPidFieldBuilder() { + if (pidBuilder_ == null) { + pidBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder>( + pid_, + ((bitField0_ & 0x00000010) == 0x00000010), + getParentForChildren(), + isClean()); + pid_ = null; + } + return pidBuilder_; + } + + // optional string dateofcollection = 11; + private java.lang.Object dateofcollection_ = ""; + public boolean hasDateofcollection() { + return ((bitField0_ & 0x00000020) == 0x00000020); + } + public String getDateofcollection() { + java.lang.Object ref = dateofcollection_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + dateofcollection_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setDateofcollection(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000020; + dateofcollection_ = value; + onChanged(); + return this; + } + public Builder clearDateofcollection() { + bitField0_ = (bitField0_ & ~0x00000020); + dateofcollection_ = getDefaultInstance().getDateofcollection(); + onChanged(); + return this; + } + void setDateofcollection(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000020; + dateofcollection_ = value; + onChanged(); + } + + // optional string dateoftransformation = 13; + private java.lang.Object dateoftransformation_ = ""; + public boolean hasDateoftransformation() { + return ((bitField0_ & 0x00000040) == 0x00000040); + } + public String getDateoftransformation() { + java.lang.Object ref = dateoftransformation_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + dateoftransformation_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setDateoftransformation(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000040; + dateoftransformation_ = value; + onChanged(); + return this; + } + public Builder clearDateoftransformation() { + bitField0_ = (bitField0_ & ~0x00000040); + dateoftransformation_ = getDefaultInstance().getDateoftransformation(); + onChanged(); + return this; + } + void setDateoftransformation(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000040; + dateoftransformation_ = value; + onChanged(); + } + + // repeated .eu.dnetlib.data.proto.OafRel cachedRel = 2; + private java.util.List cachedRel_ = + java.util.Collections.emptyList(); + private void ensureCachedRelIsMutable() { + if (!((bitField0_ & 0x00000080) == 0x00000080)) { + cachedRel_ = new java.util.ArrayList(cachedRel_); + bitField0_ |= 0x00000080; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.OafProtos.OafRel, eu.dnetlib.data.proto.OafProtos.OafRel.Builder, eu.dnetlib.data.proto.OafProtos.OafRelOrBuilder> cachedRelBuilder_; + + public java.util.List getCachedRelList() { + if (cachedRelBuilder_ == null) { + return java.util.Collections.unmodifiableList(cachedRel_); + } else { + return cachedRelBuilder_.getMessageList(); + } + } + public int getCachedRelCount() { + if (cachedRelBuilder_ == null) { + return cachedRel_.size(); + } else { + return cachedRelBuilder_.getCount(); + } + } + public eu.dnetlib.data.proto.OafProtos.OafRel getCachedRel(int index) { + if (cachedRelBuilder_ == null) { + return cachedRel_.get(index); + } else { + return cachedRelBuilder_.getMessage(index); + } + } + public Builder setCachedRel( + int index, eu.dnetlib.data.proto.OafProtos.OafRel value) { + if (cachedRelBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureCachedRelIsMutable(); + cachedRel_.set(index, value); + onChanged(); + } else { + cachedRelBuilder_.setMessage(index, value); + } + return this; + } + public Builder setCachedRel( + int index, eu.dnetlib.data.proto.OafProtos.OafRel.Builder builderForValue) { + if (cachedRelBuilder_ == null) { + ensureCachedRelIsMutable(); + cachedRel_.set(index, builderForValue.build()); + onChanged(); + } else { + cachedRelBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + public Builder addCachedRel(eu.dnetlib.data.proto.OafProtos.OafRel value) { + if (cachedRelBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureCachedRelIsMutable(); + cachedRel_.add(value); + onChanged(); + } else { + cachedRelBuilder_.addMessage(value); + } + return this; + } + public Builder addCachedRel( + int index, eu.dnetlib.data.proto.OafProtos.OafRel value) { + if (cachedRelBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureCachedRelIsMutable(); + cachedRel_.add(index, value); + onChanged(); + } else { + cachedRelBuilder_.addMessage(index, value); + } + return this; + } + public Builder addCachedRel( + eu.dnetlib.data.proto.OafProtos.OafRel.Builder builderForValue) { + if (cachedRelBuilder_ == null) { + ensureCachedRelIsMutable(); + cachedRel_.add(builderForValue.build()); + onChanged(); + } else { + cachedRelBuilder_.addMessage(builderForValue.build()); + } + return this; + } + public Builder addCachedRel( + int index, eu.dnetlib.data.proto.OafProtos.OafRel.Builder builderForValue) { + if (cachedRelBuilder_ == null) { + ensureCachedRelIsMutable(); + cachedRel_.add(index, builderForValue.build()); + onChanged(); + } else { + cachedRelBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + public Builder addAllCachedRel( + java.lang.Iterable values) { + if (cachedRelBuilder_ == null) { + ensureCachedRelIsMutable(); + super.addAll(values, cachedRel_); + onChanged(); + } else { + cachedRelBuilder_.addAllMessages(values); + } + return this; + } + public Builder clearCachedRel() { + if (cachedRelBuilder_ == null) { + cachedRel_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000080); + onChanged(); + } else { + cachedRelBuilder_.clear(); + } + return this; + } + public Builder removeCachedRel(int index) { + if (cachedRelBuilder_ == null) { + ensureCachedRelIsMutable(); + cachedRel_.remove(index); + onChanged(); + } else { + cachedRelBuilder_.remove(index); + } + return this; + } + public eu.dnetlib.data.proto.OafProtos.OafRel.Builder getCachedRelBuilder( + int index) { + return getCachedRelFieldBuilder().getBuilder(index); + } + public eu.dnetlib.data.proto.OafProtos.OafRelOrBuilder getCachedRelOrBuilder( + int index) { + if (cachedRelBuilder_ == null) { + return cachedRel_.get(index); } else { + return cachedRelBuilder_.getMessageOrBuilder(index); + } + } + public java.util.List + getCachedRelOrBuilderList() { + if (cachedRelBuilder_ != null) { + return cachedRelBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(cachedRel_); + } + } + public eu.dnetlib.data.proto.OafProtos.OafRel.Builder addCachedRelBuilder() { + return getCachedRelFieldBuilder().addBuilder( + eu.dnetlib.data.proto.OafProtos.OafRel.getDefaultInstance()); + } + public eu.dnetlib.data.proto.OafProtos.OafRel.Builder addCachedRelBuilder( + int index) { + return getCachedRelFieldBuilder().addBuilder( + index, eu.dnetlib.data.proto.OafProtos.OafRel.getDefaultInstance()); + } + public java.util.List + getCachedRelBuilderList() { + return getCachedRelFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.OafProtos.OafRel, eu.dnetlib.data.proto.OafProtos.OafRel.Builder, eu.dnetlib.data.proto.OafProtos.OafRelOrBuilder> + getCachedRelFieldBuilder() { + if (cachedRelBuilder_ == null) { + cachedRelBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.OafProtos.OafRel, eu.dnetlib.data.proto.OafProtos.OafRel.Builder, eu.dnetlib.data.proto.OafProtos.OafRelOrBuilder>( + cachedRel_, + ((bitField0_ & 0x00000080) == 0x00000080), + getParentForChildren(), + isClean()); + cachedRel_ = null; + } + return cachedRelBuilder_; + } + + // repeated .eu.dnetlib.data.proto.Oaf cachedOafRel = 18; + private java.util.List cachedOafRel_ = + java.util.Collections.emptyList(); + private void ensureCachedOafRelIsMutable() { + if (!((bitField0_ & 0x00000100) == 0x00000100)) { + cachedOafRel_ = new java.util.ArrayList(cachedOafRel_); + bitField0_ |= 0x00000100; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.OafProtos.Oaf, eu.dnetlib.data.proto.OafProtos.Oaf.Builder, eu.dnetlib.data.proto.OafProtos.OafOrBuilder> cachedOafRelBuilder_; + + public java.util.List getCachedOafRelList() { + if (cachedOafRelBuilder_ == null) { + return java.util.Collections.unmodifiableList(cachedOafRel_); + } else { + return cachedOafRelBuilder_.getMessageList(); + } + } + public int getCachedOafRelCount() { + if (cachedOafRelBuilder_ == null) { + return cachedOafRel_.size(); + } else { + return cachedOafRelBuilder_.getCount(); + } + } + public eu.dnetlib.data.proto.OafProtos.Oaf getCachedOafRel(int index) { + if (cachedOafRelBuilder_ == null) { + return cachedOafRel_.get(index); + } else { + return cachedOafRelBuilder_.getMessage(index); + } + } + public Builder setCachedOafRel( + int index, eu.dnetlib.data.proto.OafProtos.Oaf value) { + if (cachedOafRelBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureCachedOafRelIsMutable(); + cachedOafRel_.set(index, value); + onChanged(); + } else { + cachedOafRelBuilder_.setMessage(index, value); + } + return this; + } + public Builder setCachedOafRel( + int index, eu.dnetlib.data.proto.OafProtos.Oaf.Builder builderForValue) { + if (cachedOafRelBuilder_ == null) { + ensureCachedOafRelIsMutable(); + cachedOafRel_.set(index, builderForValue.build()); + onChanged(); + } else { + cachedOafRelBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + public Builder addCachedOafRel(eu.dnetlib.data.proto.OafProtos.Oaf value) { + if (cachedOafRelBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureCachedOafRelIsMutable(); + cachedOafRel_.add(value); + onChanged(); + } else { + cachedOafRelBuilder_.addMessage(value); + } + return this; + } + public Builder addCachedOafRel( + int index, eu.dnetlib.data.proto.OafProtos.Oaf value) { + if (cachedOafRelBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureCachedOafRelIsMutable(); + cachedOafRel_.add(index, value); + onChanged(); + } else { + cachedOafRelBuilder_.addMessage(index, value); + } + return this; + } + public Builder addCachedOafRel( + eu.dnetlib.data.proto.OafProtos.Oaf.Builder builderForValue) { + if (cachedOafRelBuilder_ == null) { + ensureCachedOafRelIsMutable(); + cachedOafRel_.add(builderForValue.build()); + onChanged(); + } else { + cachedOafRelBuilder_.addMessage(builderForValue.build()); + } + return this; + } + public Builder addCachedOafRel( + int index, eu.dnetlib.data.proto.OafProtos.Oaf.Builder builderForValue) { + if (cachedOafRelBuilder_ == null) { + ensureCachedOafRelIsMutable(); + cachedOafRel_.add(index, builderForValue.build()); + onChanged(); + } else { + cachedOafRelBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + public Builder addAllCachedOafRel( + java.lang.Iterable values) { + if (cachedOafRelBuilder_ == null) { + ensureCachedOafRelIsMutable(); + super.addAll(values, cachedOafRel_); + onChanged(); + } else { + cachedOafRelBuilder_.addAllMessages(values); + } + return this; + } + public Builder clearCachedOafRel() { + if (cachedOafRelBuilder_ == null) { + cachedOafRel_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000100); + onChanged(); + } else { + cachedOafRelBuilder_.clear(); + } + return this; + } + public Builder removeCachedOafRel(int index) { + if (cachedOafRelBuilder_ == null) { + ensureCachedOafRelIsMutable(); + cachedOafRel_.remove(index); + onChanged(); + } else { + cachedOafRelBuilder_.remove(index); + } + return this; + } + public eu.dnetlib.data.proto.OafProtos.Oaf.Builder getCachedOafRelBuilder( + int index) { + return getCachedOafRelFieldBuilder().getBuilder(index); + } + public eu.dnetlib.data.proto.OafProtos.OafOrBuilder getCachedOafRelOrBuilder( + int index) { + if (cachedOafRelBuilder_ == null) { + return cachedOafRel_.get(index); } else { + return cachedOafRelBuilder_.getMessageOrBuilder(index); + } + } + public java.util.List + getCachedOafRelOrBuilderList() { + if (cachedOafRelBuilder_ != null) { + return cachedOafRelBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(cachedOafRel_); + } + } + public eu.dnetlib.data.proto.OafProtos.Oaf.Builder addCachedOafRelBuilder() { + return getCachedOafRelFieldBuilder().addBuilder( + eu.dnetlib.data.proto.OafProtos.Oaf.getDefaultInstance()); + } + public eu.dnetlib.data.proto.OafProtos.Oaf.Builder addCachedOafRelBuilder( + int index) { + return getCachedOafRelFieldBuilder().addBuilder( + index, eu.dnetlib.data.proto.OafProtos.Oaf.getDefaultInstance()); + } + public java.util.List + getCachedOafRelBuilderList() { + return getCachedOafRelFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.OafProtos.Oaf, eu.dnetlib.data.proto.OafProtos.Oaf.Builder, eu.dnetlib.data.proto.OafProtos.OafOrBuilder> + getCachedOafRelFieldBuilder() { + if (cachedOafRelBuilder_ == null) { + cachedOafRelBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.OafProtos.Oaf, eu.dnetlib.data.proto.OafProtos.Oaf.Builder, eu.dnetlib.data.proto.OafProtos.OafOrBuilder>( + cachedOafRel_, + ((bitField0_ & 0x00000100) == 0x00000100), + getParentForChildren(), + isClean()); + cachedOafRel_ = null; + } + return cachedOafRelBuilder_; + } + + // optional .eu.dnetlib.data.proto.Datasource datasource = 3; + private eu.dnetlib.data.proto.DatasourceProtos.Datasource datasource_ = eu.dnetlib.data.proto.DatasourceProtos.Datasource.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.DatasourceProtos.Datasource, eu.dnetlib.data.proto.DatasourceProtos.Datasource.Builder, eu.dnetlib.data.proto.DatasourceProtos.DatasourceOrBuilder> datasourceBuilder_; + public boolean hasDatasource() { + return ((bitField0_ & 0x00000200) == 0x00000200); + } + public eu.dnetlib.data.proto.DatasourceProtos.Datasource getDatasource() { + if (datasourceBuilder_ == null) { + return datasource_; + } else { + return datasourceBuilder_.getMessage(); + } + } + public Builder setDatasource(eu.dnetlib.data.proto.DatasourceProtos.Datasource value) { + if (datasourceBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + datasource_ = value; + onChanged(); + } else { + datasourceBuilder_.setMessage(value); + } + bitField0_ |= 0x00000200; + return this; + } + public Builder setDatasource( + eu.dnetlib.data.proto.DatasourceProtos.Datasource.Builder builderForValue) { + if (datasourceBuilder_ == null) { + datasource_ = builderForValue.build(); + onChanged(); + } else { + datasourceBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000200; + return this; + } + public Builder mergeDatasource(eu.dnetlib.data.proto.DatasourceProtos.Datasource value) { + if (datasourceBuilder_ == null) { + if (((bitField0_ & 0x00000200) == 0x00000200) && + datasource_ != eu.dnetlib.data.proto.DatasourceProtos.Datasource.getDefaultInstance()) { + datasource_ = + eu.dnetlib.data.proto.DatasourceProtos.Datasource.newBuilder(datasource_).mergeFrom(value).buildPartial(); + } else { + datasource_ = value; + } + onChanged(); + } else { + datasourceBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000200; + return this; + } + public Builder clearDatasource() { + if (datasourceBuilder_ == null) { + datasource_ = eu.dnetlib.data.proto.DatasourceProtos.Datasource.getDefaultInstance(); + onChanged(); + } else { + datasourceBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000200); + return this; + } + public eu.dnetlib.data.proto.DatasourceProtos.Datasource.Builder getDatasourceBuilder() { + bitField0_ |= 0x00000200; + onChanged(); + return getDatasourceFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.DatasourceProtos.DatasourceOrBuilder getDatasourceOrBuilder() { + if (datasourceBuilder_ != null) { + return datasourceBuilder_.getMessageOrBuilder(); + } else { + return datasource_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.DatasourceProtos.Datasource, eu.dnetlib.data.proto.DatasourceProtos.Datasource.Builder, eu.dnetlib.data.proto.DatasourceProtos.DatasourceOrBuilder> + getDatasourceFieldBuilder() { + if (datasourceBuilder_ == null) { + datasourceBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.DatasourceProtos.Datasource, eu.dnetlib.data.proto.DatasourceProtos.Datasource.Builder, eu.dnetlib.data.proto.DatasourceProtos.DatasourceOrBuilder>( + datasource_, + getParentForChildren(), + isClean()); + datasource_ = null; + } + return datasourceBuilder_; + } + + // optional .eu.dnetlib.data.proto.Organization organization = 4; + private eu.dnetlib.data.proto.OrganizationProtos.Organization organization_ = eu.dnetlib.data.proto.OrganizationProtos.Organization.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.OrganizationProtos.Organization, eu.dnetlib.data.proto.OrganizationProtos.Organization.Builder, eu.dnetlib.data.proto.OrganizationProtos.OrganizationOrBuilder> organizationBuilder_; + public boolean hasOrganization() { + return ((bitField0_ & 0x00000400) == 0x00000400); + } + public eu.dnetlib.data.proto.OrganizationProtos.Organization getOrganization() { + if (organizationBuilder_ == null) { + return organization_; + } else { + return organizationBuilder_.getMessage(); + } + } + public Builder setOrganization(eu.dnetlib.data.proto.OrganizationProtos.Organization value) { + if (organizationBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + organization_ = value; + onChanged(); + } else { + organizationBuilder_.setMessage(value); + } + bitField0_ |= 0x00000400; + return this; + } + public Builder setOrganization( + eu.dnetlib.data.proto.OrganizationProtos.Organization.Builder builderForValue) { + if (organizationBuilder_ == null) { + organization_ = builderForValue.build(); + onChanged(); + } else { + organizationBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000400; + return this; + } + public Builder mergeOrganization(eu.dnetlib.data.proto.OrganizationProtos.Organization value) { + if (organizationBuilder_ == null) { + if (((bitField0_ & 0x00000400) == 0x00000400) && + organization_ != eu.dnetlib.data.proto.OrganizationProtos.Organization.getDefaultInstance()) { + organization_ = + eu.dnetlib.data.proto.OrganizationProtos.Organization.newBuilder(organization_).mergeFrom(value).buildPartial(); + } else { + organization_ = value; + } + onChanged(); + } else { + organizationBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000400; + return this; + } + public Builder clearOrganization() { + if (organizationBuilder_ == null) { + organization_ = eu.dnetlib.data.proto.OrganizationProtos.Organization.getDefaultInstance(); + onChanged(); + } else { + organizationBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000400); + return this; + } + public eu.dnetlib.data.proto.OrganizationProtos.Organization.Builder getOrganizationBuilder() { + bitField0_ |= 0x00000400; + onChanged(); + return getOrganizationFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.OrganizationProtos.OrganizationOrBuilder getOrganizationOrBuilder() { + if (organizationBuilder_ != null) { + return organizationBuilder_.getMessageOrBuilder(); + } else { + return organization_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.OrganizationProtos.Organization, eu.dnetlib.data.proto.OrganizationProtos.Organization.Builder, eu.dnetlib.data.proto.OrganizationProtos.OrganizationOrBuilder> + getOrganizationFieldBuilder() { + if (organizationBuilder_ == null) { + organizationBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.OrganizationProtos.Organization, eu.dnetlib.data.proto.OrganizationProtos.Organization.Builder, eu.dnetlib.data.proto.OrganizationProtos.OrganizationOrBuilder>( + organization_, + getParentForChildren(), + isClean()); + organization_ = null; + } + return organizationBuilder_; + } + + // optional .eu.dnetlib.data.proto.Project project = 6; + private eu.dnetlib.data.proto.ProjectProtos.Project project_ = eu.dnetlib.data.proto.ProjectProtos.Project.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ProjectProtos.Project, eu.dnetlib.data.proto.ProjectProtos.Project.Builder, eu.dnetlib.data.proto.ProjectProtos.ProjectOrBuilder> projectBuilder_; + public boolean hasProject() { + return ((bitField0_ & 0x00000800) == 0x00000800); + } + public eu.dnetlib.data.proto.ProjectProtos.Project getProject() { + if (projectBuilder_ == null) { + return project_; + } else { + return projectBuilder_.getMessage(); + } + } + public Builder setProject(eu.dnetlib.data.proto.ProjectProtos.Project value) { + if (projectBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + project_ = value; + onChanged(); + } else { + projectBuilder_.setMessage(value); + } + bitField0_ |= 0x00000800; + return this; + } + public Builder setProject( + eu.dnetlib.data.proto.ProjectProtos.Project.Builder builderForValue) { + if (projectBuilder_ == null) { + project_ = builderForValue.build(); + onChanged(); + } else { + projectBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000800; + return this; + } + public Builder mergeProject(eu.dnetlib.data.proto.ProjectProtos.Project value) { + if (projectBuilder_ == null) { + if (((bitField0_ & 0x00000800) == 0x00000800) && + project_ != eu.dnetlib.data.proto.ProjectProtos.Project.getDefaultInstance()) { + project_ = + eu.dnetlib.data.proto.ProjectProtos.Project.newBuilder(project_).mergeFrom(value).buildPartial(); + } else { + project_ = value; + } + onChanged(); + } else { + projectBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000800; + return this; + } + public Builder clearProject() { + if (projectBuilder_ == null) { + project_ = eu.dnetlib.data.proto.ProjectProtos.Project.getDefaultInstance(); + onChanged(); + } else { + projectBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000800); + return this; + } + public eu.dnetlib.data.proto.ProjectProtos.Project.Builder getProjectBuilder() { + bitField0_ |= 0x00000800; + onChanged(); + return getProjectFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.ProjectProtos.ProjectOrBuilder getProjectOrBuilder() { + if (projectBuilder_ != null) { + return projectBuilder_.getMessageOrBuilder(); + } else { + return project_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ProjectProtos.Project, eu.dnetlib.data.proto.ProjectProtos.Project.Builder, eu.dnetlib.data.proto.ProjectProtos.ProjectOrBuilder> + getProjectFieldBuilder() { + if (projectBuilder_ == null) { + projectBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ProjectProtos.Project, eu.dnetlib.data.proto.ProjectProtos.Project.Builder, eu.dnetlib.data.proto.ProjectProtos.ProjectOrBuilder>( + project_, + getParentForChildren(), + isClean()); + project_ = null; + } + return projectBuilder_; + } + + // optional .eu.dnetlib.data.proto.Result result = 7; + private eu.dnetlib.data.proto.ResultProtos.Result result_ = eu.dnetlib.data.proto.ResultProtos.Result.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ResultProtos.Result, eu.dnetlib.data.proto.ResultProtos.Result.Builder, eu.dnetlib.data.proto.ResultProtos.ResultOrBuilder> resultBuilder_; + public boolean hasResult() { + return ((bitField0_ & 0x00001000) == 0x00001000); + } + public eu.dnetlib.data.proto.ResultProtos.Result getResult() { + if (resultBuilder_ == null) { + return result_; + } else { + return resultBuilder_.getMessage(); + } + } + public Builder setResult(eu.dnetlib.data.proto.ResultProtos.Result value) { + if (resultBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + result_ = value; + onChanged(); + } else { + resultBuilder_.setMessage(value); + } + bitField0_ |= 0x00001000; + return this; + } + public Builder setResult( + eu.dnetlib.data.proto.ResultProtos.Result.Builder builderForValue) { + if (resultBuilder_ == null) { + result_ = builderForValue.build(); + onChanged(); + } else { + resultBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00001000; + return this; + } + public Builder mergeResult(eu.dnetlib.data.proto.ResultProtos.Result value) { + if (resultBuilder_ == null) { + if (((bitField0_ & 0x00001000) == 0x00001000) && + result_ != eu.dnetlib.data.proto.ResultProtos.Result.getDefaultInstance()) { + result_ = + eu.dnetlib.data.proto.ResultProtos.Result.newBuilder(result_).mergeFrom(value).buildPartial(); + } else { + result_ = value; + } + onChanged(); + } else { + resultBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00001000; + return this; + } + public Builder clearResult() { + if (resultBuilder_ == null) { + result_ = eu.dnetlib.data.proto.ResultProtos.Result.getDefaultInstance(); + onChanged(); + } else { + resultBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00001000); + return this; + } + public eu.dnetlib.data.proto.ResultProtos.Result.Builder getResultBuilder() { + bitField0_ |= 0x00001000; + onChanged(); + return getResultFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.ResultProtos.ResultOrBuilder getResultOrBuilder() { + if (resultBuilder_ != null) { + return resultBuilder_.getMessageOrBuilder(); + } else { + return result_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ResultProtos.Result, eu.dnetlib.data.proto.ResultProtos.Result.Builder, eu.dnetlib.data.proto.ResultProtos.ResultOrBuilder> + getResultFieldBuilder() { + if (resultBuilder_ == null) { + resultBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ResultProtos.Result, eu.dnetlib.data.proto.ResultProtos.Result.Builder, eu.dnetlib.data.proto.ResultProtos.ResultOrBuilder>( + result_, + getParentForChildren(), + isClean()); + result_ = null; + } + return resultBuilder_; + } + + // optional .eu.dnetlib.data.proto.Person person = 5; + private eu.dnetlib.data.proto.PersonProtos.Person person_ = eu.dnetlib.data.proto.PersonProtos.Person.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.PersonProtos.Person, eu.dnetlib.data.proto.PersonProtos.Person.Builder, eu.dnetlib.data.proto.PersonProtos.PersonOrBuilder> personBuilder_; + public boolean hasPerson() { + return ((bitField0_ & 0x00002000) == 0x00002000); + } + public eu.dnetlib.data.proto.PersonProtos.Person getPerson() { + if (personBuilder_ == null) { + return person_; + } else { + return personBuilder_.getMessage(); + } + } + public Builder setPerson(eu.dnetlib.data.proto.PersonProtos.Person value) { + if (personBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + person_ = value; + onChanged(); + } else { + personBuilder_.setMessage(value); + } + bitField0_ |= 0x00002000; + return this; + } + public Builder setPerson( + eu.dnetlib.data.proto.PersonProtos.Person.Builder builderForValue) { + if (personBuilder_ == null) { + person_ = builderForValue.build(); + onChanged(); + } else { + personBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00002000; + return this; + } + public Builder mergePerson(eu.dnetlib.data.proto.PersonProtos.Person value) { + if (personBuilder_ == null) { + if (((bitField0_ & 0x00002000) == 0x00002000) && + person_ != eu.dnetlib.data.proto.PersonProtos.Person.getDefaultInstance()) { + person_ = + eu.dnetlib.data.proto.PersonProtos.Person.newBuilder(person_).mergeFrom(value).buildPartial(); + } else { + person_ = value; + } + onChanged(); + } else { + personBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00002000; + return this; + } + public Builder clearPerson() { + if (personBuilder_ == null) { + person_ = eu.dnetlib.data.proto.PersonProtos.Person.getDefaultInstance(); + onChanged(); + } else { + personBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00002000); + return this; + } + public eu.dnetlib.data.proto.PersonProtos.Person.Builder getPersonBuilder() { + bitField0_ |= 0x00002000; + onChanged(); + return getPersonFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.PersonProtos.PersonOrBuilder getPersonOrBuilder() { + if (personBuilder_ != null) { + return personBuilder_.getMessageOrBuilder(); + } else { + return person_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.PersonProtos.Person, eu.dnetlib.data.proto.PersonProtos.Person.Builder, eu.dnetlib.data.proto.PersonProtos.PersonOrBuilder> + getPersonFieldBuilder() { + if (personBuilder_ == null) { + personBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.PersonProtos.Person, eu.dnetlib.data.proto.PersonProtos.Person.Builder, eu.dnetlib.data.proto.PersonProtos.PersonOrBuilder>( + person_, + getParentForChildren(), + isClean()); + person_ = null; + } + return personBuilder_; + } + + // repeated .eu.dnetlib.data.proto.OafEntity children = 16; + private java.util.List children_ = + java.util.Collections.emptyList(); + private void ensureChildrenIsMutable() { + if (!((bitField0_ & 0x00004000) == 0x00004000)) { + children_ = new java.util.ArrayList(children_); + bitField0_ |= 0x00004000; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.OafProtos.OafEntity, eu.dnetlib.data.proto.OafProtos.OafEntity.Builder, eu.dnetlib.data.proto.OafProtos.OafEntityOrBuilder> childrenBuilder_; + + public java.util.List getChildrenList() { + if (childrenBuilder_ == null) { + return java.util.Collections.unmodifiableList(children_); + } else { + return childrenBuilder_.getMessageList(); + } + } + public int getChildrenCount() { + if (childrenBuilder_ == null) { + return children_.size(); + } else { + return childrenBuilder_.getCount(); + } + } + public eu.dnetlib.data.proto.OafProtos.OafEntity getChildren(int index) { + if (childrenBuilder_ == null) { + return children_.get(index); + } else { + return childrenBuilder_.getMessage(index); + } + } + public Builder setChildren( + int index, eu.dnetlib.data.proto.OafProtos.OafEntity value) { + if (childrenBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureChildrenIsMutable(); + children_.set(index, value); + onChanged(); + } else { + childrenBuilder_.setMessage(index, value); + } + return this; + } + public Builder setChildren( + int index, eu.dnetlib.data.proto.OafProtos.OafEntity.Builder builderForValue) { + if (childrenBuilder_ == null) { + ensureChildrenIsMutable(); + children_.set(index, builderForValue.build()); + onChanged(); + } else { + childrenBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + public Builder addChildren(eu.dnetlib.data.proto.OafProtos.OafEntity value) { + if (childrenBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureChildrenIsMutable(); + children_.add(value); + onChanged(); + } else { + childrenBuilder_.addMessage(value); + } + return this; + } + public Builder addChildren( + int index, eu.dnetlib.data.proto.OafProtos.OafEntity value) { + if (childrenBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureChildrenIsMutable(); + children_.add(index, value); + onChanged(); + } else { + childrenBuilder_.addMessage(index, value); + } + return this; + } + public Builder addChildren( + eu.dnetlib.data.proto.OafProtos.OafEntity.Builder builderForValue) { + if (childrenBuilder_ == null) { + ensureChildrenIsMutable(); + children_.add(builderForValue.build()); + onChanged(); + } else { + childrenBuilder_.addMessage(builderForValue.build()); + } + return this; + } + public Builder addChildren( + int index, eu.dnetlib.data.proto.OafProtos.OafEntity.Builder builderForValue) { + if (childrenBuilder_ == null) { + ensureChildrenIsMutable(); + children_.add(index, builderForValue.build()); + onChanged(); + } else { + childrenBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + public Builder addAllChildren( + java.lang.Iterable values) { + if (childrenBuilder_ == null) { + ensureChildrenIsMutable(); + super.addAll(values, children_); + onChanged(); + } else { + childrenBuilder_.addAllMessages(values); + } + return this; + } + public Builder clearChildren() { + if (childrenBuilder_ == null) { + children_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00004000); + onChanged(); + } else { + childrenBuilder_.clear(); + } + return this; + } + public Builder removeChildren(int index) { + if (childrenBuilder_ == null) { + ensureChildrenIsMutable(); + children_.remove(index); + onChanged(); + } else { + childrenBuilder_.remove(index); + } + return this; + } + public eu.dnetlib.data.proto.OafProtos.OafEntity.Builder getChildrenBuilder( + int index) { + return getChildrenFieldBuilder().getBuilder(index); + } + public eu.dnetlib.data.proto.OafProtos.OafEntityOrBuilder getChildrenOrBuilder( + int index) { + if (childrenBuilder_ == null) { + return children_.get(index); } else { + return childrenBuilder_.getMessageOrBuilder(index); + } + } + public java.util.List + getChildrenOrBuilderList() { + if (childrenBuilder_ != null) { + return childrenBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(children_); + } + } + public eu.dnetlib.data.proto.OafProtos.OafEntity.Builder addChildrenBuilder() { + return getChildrenFieldBuilder().addBuilder( + eu.dnetlib.data.proto.OafProtos.OafEntity.getDefaultInstance()); + } + public eu.dnetlib.data.proto.OafProtos.OafEntity.Builder addChildrenBuilder( + int index) { + return getChildrenFieldBuilder().addBuilder( + index, eu.dnetlib.data.proto.OafProtos.OafEntity.getDefaultInstance()); + } + public java.util.List + getChildrenBuilderList() { + return getChildrenFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.OafProtos.OafEntity, eu.dnetlib.data.proto.OafProtos.OafEntity.Builder, eu.dnetlib.data.proto.OafProtos.OafEntityOrBuilder> + getChildrenFieldBuilder() { + if (childrenBuilder_ == null) { + childrenBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.OafProtos.OafEntity, eu.dnetlib.data.proto.OafProtos.OafEntity.Builder, eu.dnetlib.data.proto.OafProtos.OafEntityOrBuilder>( + children_, + ((bitField0_ & 0x00004000) == 0x00004000), + getParentForChildren(), + isClean()); + children_ = null; + } + return childrenBuilder_; + } + + // repeated .eu.dnetlib.data.proto.ExtraInfo extraInfo = 15; + private java.util.List extraInfo_ = + java.util.Collections.emptyList(); + private void ensureExtraInfoIsMutable() { + if (!((bitField0_ & 0x00008000) == 0x00008000)) { + extraInfo_ = new java.util.ArrayList(extraInfo_); + bitField0_ |= 0x00008000; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo, eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfoOrBuilder> extraInfoBuilder_; + + public java.util.List getExtraInfoList() { + if (extraInfoBuilder_ == null) { + return java.util.Collections.unmodifiableList(extraInfo_); + } else { + return extraInfoBuilder_.getMessageList(); + } + } + public int getExtraInfoCount() { + if (extraInfoBuilder_ == null) { + return extraInfo_.size(); + } else { + return extraInfoBuilder_.getCount(); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo getExtraInfo(int index) { + if (extraInfoBuilder_ == null) { + return extraInfo_.get(index); + } else { + return extraInfoBuilder_.getMessage(index); + } + } + public Builder setExtraInfo( + int index, eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo value) { + if (extraInfoBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureExtraInfoIsMutable(); + extraInfo_.set(index, value); + onChanged(); + } else { + extraInfoBuilder_.setMessage(index, value); + } + return this; + } + public Builder setExtraInfo( + int index, eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo.Builder builderForValue) { + if (extraInfoBuilder_ == null) { + ensureExtraInfoIsMutable(); + extraInfo_.set(index, builderForValue.build()); + onChanged(); + } else { + extraInfoBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + public Builder addExtraInfo(eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo value) { + if (extraInfoBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureExtraInfoIsMutable(); + extraInfo_.add(value); + onChanged(); + } else { + extraInfoBuilder_.addMessage(value); + } + return this; + } + public Builder addExtraInfo( + int index, eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo value) { + if (extraInfoBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureExtraInfoIsMutable(); + extraInfo_.add(index, value); + onChanged(); + } else { + extraInfoBuilder_.addMessage(index, value); + } + return this; + } + public Builder addExtraInfo( + eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo.Builder builderForValue) { + if (extraInfoBuilder_ == null) { + ensureExtraInfoIsMutable(); + extraInfo_.add(builderForValue.build()); + onChanged(); + } else { + extraInfoBuilder_.addMessage(builderForValue.build()); + } + return this; + } + public Builder addExtraInfo( + int index, eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo.Builder builderForValue) { + if (extraInfoBuilder_ == null) { + ensureExtraInfoIsMutable(); + extraInfo_.add(index, builderForValue.build()); + onChanged(); + } else { + extraInfoBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + public Builder addAllExtraInfo( + java.lang.Iterable values) { + if (extraInfoBuilder_ == null) { + ensureExtraInfoIsMutable(); + super.addAll(values, extraInfo_); + onChanged(); + } else { + extraInfoBuilder_.addAllMessages(values); + } + return this; + } + public Builder clearExtraInfo() { + if (extraInfoBuilder_ == null) { + extraInfo_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00008000); + onChanged(); + } else { + extraInfoBuilder_.clear(); + } + return this; + } + public Builder removeExtraInfo(int index) { + if (extraInfoBuilder_ == null) { + ensureExtraInfoIsMutable(); + extraInfo_.remove(index); + onChanged(); + } else { + extraInfoBuilder_.remove(index); + } + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo.Builder getExtraInfoBuilder( + int index) { + return getExtraInfoFieldBuilder().getBuilder(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfoOrBuilder getExtraInfoOrBuilder( + int index) { + if (extraInfoBuilder_ == null) { + return extraInfo_.get(index); } else { + return extraInfoBuilder_.getMessageOrBuilder(index); + } + } + public java.util.List + getExtraInfoOrBuilderList() { + if (extraInfoBuilder_ != null) { + return extraInfoBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(extraInfo_); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo.Builder addExtraInfoBuilder() { + return getExtraInfoFieldBuilder().addBuilder( + eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo.getDefaultInstance()); + } + public eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo.Builder addExtraInfoBuilder( + int index) { + return getExtraInfoFieldBuilder().addBuilder( + index, eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo.getDefaultInstance()); + } + public java.util.List + getExtraInfoBuilderList() { + return getExtraInfoFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo, eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfoOrBuilder> + getExtraInfoFieldBuilder() { + if (extraInfoBuilder_ == null) { + extraInfoBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo, eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfoOrBuilder>( + extraInfo_, + ((bitField0_ & 0x00008000) == 0x00008000), + getParentForChildren(), + isClean()); + extraInfo_ = null; + } + return extraInfoBuilder_; + } + + // optional .eu.dnetlib.data.proto.OAIProvenance oaiprovenance = 17; + private eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance oaiprovenance_ = eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance, eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.Builder, eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenanceOrBuilder> oaiprovenanceBuilder_; + public boolean hasOaiprovenance() { + return ((bitField0_ & 0x00010000) == 0x00010000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance getOaiprovenance() { + if (oaiprovenanceBuilder_ == null) { + return oaiprovenance_; + } else { + return oaiprovenanceBuilder_.getMessage(); + } + } + public Builder setOaiprovenance(eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance value) { + if (oaiprovenanceBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + oaiprovenance_ = value; + onChanged(); + } else { + oaiprovenanceBuilder_.setMessage(value); + } + bitField0_ |= 0x00010000; + return this; + } + public Builder setOaiprovenance( + eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.Builder builderForValue) { + if (oaiprovenanceBuilder_ == null) { + oaiprovenance_ = builderForValue.build(); + onChanged(); + } else { + oaiprovenanceBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00010000; + return this; + } + public Builder mergeOaiprovenance(eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance value) { + if (oaiprovenanceBuilder_ == null) { + if (((bitField0_ & 0x00010000) == 0x00010000) && + oaiprovenance_ != eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.getDefaultInstance()) { + oaiprovenance_ = + eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.newBuilder(oaiprovenance_).mergeFrom(value).buildPartial(); + } else { + oaiprovenance_ = value; + } + onChanged(); + } else { + oaiprovenanceBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00010000; + return this; + } + public Builder clearOaiprovenance() { + if (oaiprovenanceBuilder_ == null) { + oaiprovenance_ = eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.getDefaultInstance(); + onChanged(); + } else { + oaiprovenanceBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00010000); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.Builder getOaiprovenanceBuilder() { + bitField0_ |= 0x00010000; + onChanged(); + return getOaiprovenanceFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenanceOrBuilder getOaiprovenanceOrBuilder() { + if (oaiprovenanceBuilder_ != null) { + return oaiprovenanceBuilder_.getMessageOrBuilder(); + } else { + return oaiprovenance_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance, eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.Builder, eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenanceOrBuilder> + getOaiprovenanceFieldBuilder() { + if (oaiprovenanceBuilder_ == null) { + oaiprovenanceBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance, eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.Builder, eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenanceOrBuilder>( + oaiprovenance_, + getParentForChildren(), + isClean()); + oaiprovenance_ = null; + } + return oaiprovenanceBuilder_; + } + + // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.OafEntity) + } + + static { + defaultInstance = new OafEntity(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.OafEntity) + } + + public interface OafRelOrBuilder + extends com.google.protobuf.MessageOrBuilder { + + // required .eu.dnetlib.data.proto.RelType relType = 1; + boolean hasRelType(); + eu.dnetlib.data.proto.RelTypeProtos.RelType getRelType(); + + // required .eu.dnetlib.data.proto.SubRelType subRelType = 19; + boolean hasSubRelType(); + eu.dnetlib.data.proto.RelTypeProtos.SubRelType getSubRelType(); + + // required string relClass = 20; + boolean hasRelClass(); + String getRelClass(); + + // required string source = 2; + boolean hasSource(); + String getSource(); + + // required string target = 3; + boolean hasTarget(); + String getTarget(); + + // required bool child = 4; + boolean hasChild(); + boolean getChild(); + + // optional .eu.dnetlib.data.proto.OafEntity cachedTarget = 5; + boolean hasCachedTarget(); + eu.dnetlib.data.proto.OafProtos.OafEntity getCachedTarget(); + eu.dnetlib.data.proto.OafProtos.OafEntityOrBuilder getCachedTargetOrBuilder(); + + // optional .eu.dnetlib.data.proto.Oaf cachedOafTarget = 8; + boolean hasCachedOafTarget(); + eu.dnetlib.data.proto.OafProtos.Oaf getCachedOafTarget(); + eu.dnetlib.data.proto.OafProtos.OafOrBuilder getCachedOafTargetOrBuilder(); + + // optional .eu.dnetlib.data.proto.DatasourceOrganization datasourceOrganization = 6; + boolean hasDatasourceOrganization(); + eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization getDatasourceOrganization(); + eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganizationOrBuilder getDatasourceOrganizationOrBuilder(); + + // optional .eu.dnetlib.data.proto.ProjectOrganization projectOrganization = 9; + boolean hasProjectOrganization(); + eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization getProjectOrganization(); + eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganizationOrBuilder getProjectOrganizationOrBuilder(); + + // optional .eu.dnetlib.data.proto.ResultOrganization resultOrganization = 10; + boolean hasResultOrganization(); + eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization getResultOrganization(); + eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganizationOrBuilder getResultOrganizationOrBuilder(); + + // optional .eu.dnetlib.data.proto.ResultProject resultProject = 11; + boolean hasResultProject(); + eu.dnetlib.data.proto.ResultProjectProtos.ResultProject getResultProject(); + eu.dnetlib.data.proto.ResultProjectProtos.ResultProjectOrBuilder getResultProjectOrBuilder(); + + // optional .eu.dnetlib.data.proto.ResultResult resultResult = 16; + boolean hasResultResult(); + eu.dnetlib.data.proto.ResultResultProtos.ResultResult getResultResult(); + eu.dnetlib.data.proto.ResultResultProtos.ResultResultOrBuilder getResultResultOrBuilder(); + + // optional .eu.dnetlib.data.proto.OrganizationOrganization organizationOrganization = 17; + boolean hasOrganizationOrganization(); + eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization getOrganizationOrganization(); + eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganizationOrBuilder getOrganizationOrganizationOrBuilder(); + + // repeated .eu.dnetlib.data.proto.KeyValue collectedfrom = 21; + java.util.List + getCollectedfromList(); + eu.dnetlib.data.proto.FieldTypeProtos.KeyValue getCollectedfrom(int index); + int getCollectedfromCount(); + java.util.List + getCollectedfromOrBuilderList(); + eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder getCollectedfromOrBuilder( + int index); + } + public static final class OafRel extends + com.google.protobuf.GeneratedMessage + implements OafRelOrBuilder { + // Use OafRel.newBuilder() to construct. + private OafRel(Builder builder) { + super(builder); + } + private OafRel(boolean noInit) {} + + private static final OafRel defaultInstance; + public static OafRel getDefaultInstance() { + return defaultInstance; + } + + public OafRel getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.OafProtos.internal_static_eu_dnetlib_data_proto_OafRel_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.OafProtos.internal_static_eu_dnetlib_data_proto_OafRel_fieldAccessorTable; + } + + private int bitField0_; + // required .eu.dnetlib.data.proto.RelType relType = 1; + public static final int RELTYPE_FIELD_NUMBER = 1; + private eu.dnetlib.data.proto.RelTypeProtos.RelType relType_; + public boolean hasRelType() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.RelTypeProtos.RelType getRelType() { + return relType_; + } + + // required .eu.dnetlib.data.proto.SubRelType subRelType = 19; + public static final int SUBRELTYPE_FIELD_NUMBER = 19; + private eu.dnetlib.data.proto.RelTypeProtos.SubRelType subRelType_; + public boolean hasSubRelType() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public eu.dnetlib.data.proto.RelTypeProtos.SubRelType getSubRelType() { + return subRelType_; + } + + // required string relClass = 20; + public static final int RELCLASS_FIELD_NUMBER = 20; + private java.lang.Object relClass_; + public boolean hasRelClass() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + public String getRelClass() { + java.lang.Object ref = relClass_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + relClass_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getRelClassBytes() { + java.lang.Object ref = relClass_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + relClass_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // required string source = 2; + public static final int SOURCE_FIELD_NUMBER = 2; + private java.lang.Object source_; + public boolean hasSource() { + return ((bitField0_ & 0x00000008) == 0x00000008); + } + public String getSource() { + java.lang.Object ref = source_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + source_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getSourceBytes() { + java.lang.Object ref = source_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + source_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // required string target = 3; + public static final int TARGET_FIELD_NUMBER = 3; + private java.lang.Object target_; + public boolean hasTarget() { + return ((bitField0_ & 0x00000010) == 0x00000010); + } + public String getTarget() { + java.lang.Object ref = target_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + target_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getTargetBytes() { + java.lang.Object ref = target_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + target_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // required bool child = 4; + public static final int CHILD_FIELD_NUMBER = 4; + private boolean child_; + public boolean hasChild() { + return ((bitField0_ & 0x00000020) == 0x00000020); + } + public boolean getChild() { + return child_; + } + + // optional .eu.dnetlib.data.proto.OafEntity cachedTarget = 5; + public static final int CACHEDTARGET_FIELD_NUMBER = 5; + private eu.dnetlib.data.proto.OafProtos.OafEntity cachedTarget_; + public boolean hasCachedTarget() { + return ((bitField0_ & 0x00000040) == 0x00000040); + } + public eu.dnetlib.data.proto.OafProtos.OafEntity getCachedTarget() { + return cachedTarget_; + } + public eu.dnetlib.data.proto.OafProtos.OafEntityOrBuilder getCachedTargetOrBuilder() { + return cachedTarget_; + } + + // optional .eu.dnetlib.data.proto.Oaf cachedOafTarget = 8; + public static final int CACHEDOAFTARGET_FIELD_NUMBER = 8; + private eu.dnetlib.data.proto.OafProtos.Oaf cachedOafTarget_; + public boolean hasCachedOafTarget() { + return ((bitField0_ & 0x00000080) == 0x00000080); + } + public eu.dnetlib.data.proto.OafProtos.Oaf getCachedOafTarget() { + return cachedOafTarget_; + } + public eu.dnetlib.data.proto.OafProtos.OafOrBuilder getCachedOafTargetOrBuilder() { + return cachedOafTarget_; + } + + // optional .eu.dnetlib.data.proto.DatasourceOrganization datasourceOrganization = 6; + public static final int DATASOURCEORGANIZATION_FIELD_NUMBER = 6; + private eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization datasourceOrganization_; + public boolean hasDatasourceOrganization() { + return ((bitField0_ & 0x00000100) == 0x00000100); + } + public eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization getDatasourceOrganization() { + return datasourceOrganization_; + } + public eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganizationOrBuilder getDatasourceOrganizationOrBuilder() { + return datasourceOrganization_; + } + + // optional .eu.dnetlib.data.proto.ProjectOrganization projectOrganization = 9; + public static final int PROJECTORGANIZATION_FIELD_NUMBER = 9; + private eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization projectOrganization_; + public boolean hasProjectOrganization() { + return ((bitField0_ & 0x00000200) == 0x00000200); + } + public eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization getProjectOrganization() { + return projectOrganization_; + } + public eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganizationOrBuilder getProjectOrganizationOrBuilder() { + return projectOrganization_; + } + + // optional .eu.dnetlib.data.proto.ResultOrganization resultOrganization = 10; + public static final int RESULTORGANIZATION_FIELD_NUMBER = 10; + private eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization resultOrganization_; + public boolean hasResultOrganization() { + return ((bitField0_ & 0x00000400) == 0x00000400); + } + public eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization getResultOrganization() { + return resultOrganization_; + } + public eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganizationOrBuilder getResultOrganizationOrBuilder() { + return resultOrganization_; + } + + // optional .eu.dnetlib.data.proto.ResultProject resultProject = 11; + public static final int RESULTPROJECT_FIELD_NUMBER = 11; + private eu.dnetlib.data.proto.ResultProjectProtos.ResultProject resultProject_; + public boolean hasResultProject() { + return ((bitField0_ & 0x00000800) == 0x00000800); + } + public eu.dnetlib.data.proto.ResultProjectProtos.ResultProject getResultProject() { + return resultProject_; + } + public eu.dnetlib.data.proto.ResultProjectProtos.ResultProjectOrBuilder getResultProjectOrBuilder() { + return resultProject_; + } + + // optional .eu.dnetlib.data.proto.ResultResult resultResult = 16; + public static final int RESULTRESULT_FIELD_NUMBER = 16; + private eu.dnetlib.data.proto.ResultResultProtos.ResultResult resultResult_; + public boolean hasResultResult() { + return ((bitField0_ & 0x00001000) == 0x00001000); + } + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult getResultResult() { + return resultResult_; + } + public eu.dnetlib.data.proto.ResultResultProtos.ResultResultOrBuilder getResultResultOrBuilder() { + return resultResult_; + } + + // optional .eu.dnetlib.data.proto.OrganizationOrganization organizationOrganization = 17; + public static final int ORGANIZATIONORGANIZATION_FIELD_NUMBER = 17; + private eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization organizationOrganization_; + public boolean hasOrganizationOrganization() { + return ((bitField0_ & 0x00002000) == 0x00002000); + } + public eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization getOrganizationOrganization() { + return organizationOrganization_; + } + public eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganizationOrBuilder getOrganizationOrganizationOrBuilder() { + return organizationOrganization_; + } + + // repeated .eu.dnetlib.data.proto.KeyValue collectedfrom = 21; + public static final int COLLECTEDFROM_FIELD_NUMBER = 21; + private java.util.List collectedfrom_; + public java.util.List getCollectedfromList() { + return collectedfrom_; + } + public java.util.List + getCollectedfromOrBuilderList() { + return collectedfrom_; + } + public int getCollectedfromCount() { + return collectedfrom_.size(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue getCollectedfrom(int index) { + return collectedfrom_.get(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder getCollectedfromOrBuilder( + int index) { + return collectedfrom_.get(index); + } + + private void initFields() { + relType_ = eu.dnetlib.data.proto.RelTypeProtos.RelType.datasourceOrganization; + subRelType_ = eu.dnetlib.data.proto.RelTypeProtos.SubRelType.provision; + relClass_ = ""; + source_ = ""; + target_ = ""; + child_ = false; + cachedTarget_ = eu.dnetlib.data.proto.OafProtos.OafEntity.getDefaultInstance(); + cachedOafTarget_ = eu.dnetlib.data.proto.OafProtos.Oaf.getDefaultInstance(); + datasourceOrganization_ = eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.getDefaultInstance(); + projectOrganization_ = eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.getDefaultInstance(); + resultOrganization_ = eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.getDefaultInstance(); + resultProject_ = eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.getDefaultInstance(); + resultResult_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.getDefaultInstance(); + organizationOrganization_ = eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization.getDefaultInstance(); + collectedfrom_ = java.util.Collections.emptyList(); + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + if (!hasRelType()) { + memoizedIsInitialized = 0; + return false; + } + if (!hasSubRelType()) { + memoizedIsInitialized = 0; + return false; + } + if (!hasRelClass()) { + memoizedIsInitialized = 0; + return false; + } + if (!hasSource()) { + memoizedIsInitialized = 0; + return false; + } + if (!hasTarget()) { + memoizedIsInitialized = 0; + return false; + } + if (!hasChild()) { + memoizedIsInitialized = 0; + return false; + } + if (hasCachedTarget()) { + if (!getCachedTarget().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasCachedOafTarget()) { + if (!getCachedOafTarget().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasDatasourceOrganization()) { + if (!getDatasourceOrganization().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasProjectOrganization()) { + if (!getProjectOrganization().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasResultOrganization()) { + if (!getResultOrganization().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasResultProject()) { + if (!getResultProject().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasResultResult()) { + if (!getResultResult().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasOrganizationOrganization()) { + if (!getOrganizationOrganization().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + for (int i = 0; i < getCollectedfromCount(); i++) { + if (!getCollectedfrom(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeEnum(1, relType_.getNumber()); + } + if (((bitField0_ & 0x00000008) == 0x00000008)) { + output.writeBytes(2, getSourceBytes()); + } + if (((bitField0_ & 0x00000010) == 0x00000010)) { + output.writeBytes(3, getTargetBytes()); + } + if (((bitField0_ & 0x00000020) == 0x00000020)) { + output.writeBool(4, child_); + } + if (((bitField0_ & 0x00000040) == 0x00000040)) { + output.writeMessage(5, cachedTarget_); + } + if (((bitField0_ & 0x00000100) == 0x00000100)) { + output.writeMessage(6, datasourceOrganization_); + } + if (((bitField0_ & 0x00000080) == 0x00000080)) { + output.writeMessage(8, cachedOafTarget_); + } + if (((bitField0_ & 0x00000200) == 0x00000200)) { + output.writeMessage(9, projectOrganization_); + } + if (((bitField0_ & 0x00000400) == 0x00000400)) { + output.writeMessage(10, resultOrganization_); + } + if (((bitField0_ & 0x00000800) == 0x00000800)) { + output.writeMessage(11, resultProject_); + } + if (((bitField0_ & 0x00001000) == 0x00001000)) { + output.writeMessage(16, resultResult_); + } + if (((bitField0_ & 0x00002000) == 0x00002000)) { + output.writeMessage(17, organizationOrganization_); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + output.writeEnum(19, subRelType_.getNumber()); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + output.writeBytes(20, getRelClassBytes()); + } + for (int i = 0; i < collectedfrom_.size(); i++) { + output.writeMessage(21, collectedfrom_.get(i)); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeEnumSize(1, relType_.getNumber()); + } + if (((bitField0_ & 0x00000008) == 0x00000008)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(2, getSourceBytes()); + } + if (((bitField0_ & 0x00000010) == 0x00000010)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(3, getTargetBytes()); + } + if (((bitField0_ & 0x00000020) == 0x00000020)) { + size += com.google.protobuf.CodedOutputStream + .computeBoolSize(4, child_); + } + if (((bitField0_ & 0x00000040) == 0x00000040)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(5, cachedTarget_); + } + if (((bitField0_ & 0x00000100) == 0x00000100)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(6, datasourceOrganization_); + } + if (((bitField0_ & 0x00000080) == 0x00000080)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(8, cachedOafTarget_); + } + if (((bitField0_ & 0x00000200) == 0x00000200)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(9, projectOrganization_); + } + if (((bitField0_ & 0x00000400) == 0x00000400)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(10, resultOrganization_); + } + if (((bitField0_ & 0x00000800) == 0x00000800)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(11, resultProject_); + } + if (((bitField0_ & 0x00001000) == 0x00001000)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(16, resultResult_); + } + if (((bitField0_ & 0x00002000) == 0x00002000)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(17, organizationOrganization_); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + size += com.google.protobuf.CodedOutputStream + .computeEnumSize(19, subRelType_.getNumber()); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(20, getRelClassBytes()); + } + for (int i = 0; i < collectedfrom_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(21, collectedfrom_.get(i)); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static eu.dnetlib.data.proto.OafProtos.OafRel parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.OafProtos.OafRel parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.OafProtos.OafRel parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.OafProtos.OafRel parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.OafProtos.OafRel parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.OafProtos.OafRel parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.OafProtos.OafRel parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.OafProtos.OafRel parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.OafProtos.OafRel parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.OafProtos.OafRel parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(eu.dnetlib.data.proto.OafProtos.OafRel prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder + implements eu.dnetlib.data.proto.OafProtos.OafRelOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.OafProtos.internal_static_eu_dnetlib_data_proto_OafRel_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.OafProtos.internal_static_eu_dnetlib_data_proto_OafRel_fieldAccessorTable; + } + + // Construct using eu.dnetlib.data.proto.OafProtos.OafRel.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getCachedTargetFieldBuilder(); + getCachedOafTargetFieldBuilder(); + getDatasourceOrganizationFieldBuilder(); + getProjectOrganizationFieldBuilder(); + getResultOrganizationFieldBuilder(); + getResultProjectFieldBuilder(); + getResultResultFieldBuilder(); + getOrganizationOrganizationFieldBuilder(); + getCollectedfromFieldBuilder(); + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + relType_ = eu.dnetlib.data.proto.RelTypeProtos.RelType.datasourceOrganization; + bitField0_ = (bitField0_ & ~0x00000001); + subRelType_ = eu.dnetlib.data.proto.RelTypeProtos.SubRelType.provision; + bitField0_ = (bitField0_ & ~0x00000002); + relClass_ = ""; + bitField0_ = (bitField0_ & ~0x00000004); + source_ = ""; + bitField0_ = (bitField0_ & ~0x00000008); + target_ = ""; + bitField0_ = (bitField0_ & ~0x00000010); + child_ = false; + bitField0_ = (bitField0_ & ~0x00000020); + if (cachedTargetBuilder_ == null) { + cachedTarget_ = eu.dnetlib.data.proto.OafProtos.OafEntity.getDefaultInstance(); + } else { + cachedTargetBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000040); + if (cachedOafTargetBuilder_ == null) { + cachedOafTarget_ = eu.dnetlib.data.proto.OafProtos.Oaf.getDefaultInstance(); + } else { + cachedOafTargetBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000080); + if (datasourceOrganizationBuilder_ == null) { + datasourceOrganization_ = eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.getDefaultInstance(); + } else { + datasourceOrganizationBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000100); + if (projectOrganizationBuilder_ == null) { + projectOrganization_ = eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.getDefaultInstance(); + } else { + projectOrganizationBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000200); + if (resultOrganizationBuilder_ == null) { + resultOrganization_ = eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.getDefaultInstance(); + } else { + resultOrganizationBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000400); + if (resultProjectBuilder_ == null) { + resultProject_ = eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.getDefaultInstance(); + } else { + resultProjectBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000800); + if (resultResultBuilder_ == null) { + resultResult_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.getDefaultInstance(); + } else { + resultResultBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00001000); + if (organizationOrganizationBuilder_ == null) { + organizationOrganization_ = eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization.getDefaultInstance(); + } else { + organizationOrganizationBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00002000); + if (collectedfromBuilder_ == null) { + collectedfrom_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00004000); + } else { + collectedfromBuilder_.clear(); + } + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return eu.dnetlib.data.proto.OafProtos.OafRel.getDescriptor(); + } + + public eu.dnetlib.data.proto.OafProtos.OafRel getDefaultInstanceForType() { + return eu.dnetlib.data.proto.OafProtos.OafRel.getDefaultInstance(); + } + + public eu.dnetlib.data.proto.OafProtos.OafRel build() { + eu.dnetlib.data.proto.OafProtos.OafRel result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + private eu.dnetlib.data.proto.OafProtos.OafRel buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + eu.dnetlib.data.proto.OafProtos.OafRel result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return result; + } + + public eu.dnetlib.data.proto.OafProtos.OafRel buildPartial() { + eu.dnetlib.data.proto.OafProtos.OafRel result = new eu.dnetlib.data.proto.OafProtos.OafRel(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + result.relType_ = relType_; + if (((from_bitField0_ & 0x00000002) == 0x00000002)) { + to_bitField0_ |= 0x00000002; + } + result.subRelType_ = subRelType_; + if (((from_bitField0_ & 0x00000004) == 0x00000004)) { + to_bitField0_ |= 0x00000004; + } + result.relClass_ = relClass_; + if (((from_bitField0_ & 0x00000008) == 0x00000008)) { + to_bitField0_ |= 0x00000008; + } + result.source_ = source_; + if (((from_bitField0_ & 0x00000010) == 0x00000010)) { + to_bitField0_ |= 0x00000010; + } + result.target_ = target_; + if (((from_bitField0_ & 0x00000020) == 0x00000020)) { + to_bitField0_ |= 0x00000020; + } + result.child_ = child_; + if (((from_bitField0_ & 0x00000040) == 0x00000040)) { + to_bitField0_ |= 0x00000040; + } + if (cachedTargetBuilder_ == null) { + result.cachedTarget_ = cachedTarget_; + } else { + result.cachedTarget_ = cachedTargetBuilder_.build(); + } + if (((from_bitField0_ & 0x00000080) == 0x00000080)) { + to_bitField0_ |= 0x00000080; + } + if (cachedOafTargetBuilder_ == null) { + result.cachedOafTarget_ = cachedOafTarget_; + } else { + result.cachedOafTarget_ = cachedOafTargetBuilder_.build(); + } + if (((from_bitField0_ & 0x00000100) == 0x00000100)) { + to_bitField0_ |= 0x00000100; + } + if (datasourceOrganizationBuilder_ == null) { + result.datasourceOrganization_ = datasourceOrganization_; + } else { + result.datasourceOrganization_ = datasourceOrganizationBuilder_.build(); + } + if (((from_bitField0_ & 0x00000200) == 0x00000200)) { + to_bitField0_ |= 0x00000200; + } + if (projectOrganizationBuilder_ == null) { + result.projectOrganization_ = projectOrganization_; + } else { + result.projectOrganization_ = projectOrganizationBuilder_.build(); + } + if (((from_bitField0_ & 0x00000400) == 0x00000400)) { + to_bitField0_ |= 0x00000400; + } + if (resultOrganizationBuilder_ == null) { + result.resultOrganization_ = resultOrganization_; + } else { + result.resultOrganization_ = resultOrganizationBuilder_.build(); + } + if (((from_bitField0_ & 0x00000800) == 0x00000800)) { + to_bitField0_ |= 0x00000800; + } + if (resultProjectBuilder_ == null) { + result.resultProject_ = resultProject_; + } else { + result.resultProject_ = resultProjectBuilder_.build(); + } + if (((from_bitField0_ & 0x00001000) == 0x00001000)) { + to_bitField0_ |= 0x00001000; + } + if (resultResultBuilder_ == null) { + result.resultResult_ = resultResult_; + } else { + result.resultResult_ = resultResultBuilder_.build(); + } + if (((from_bitField0_ & 0x00002000) == 0x00002000)) { + to_bitField0_ |= 0x00002000; + } + if (organizationOrganizationBuilder_ == null) { + result.organizationOrganization_ = organizationOrganization_; + } else { + result.organizationOrganization_ = organizationOrganizationBuilder_.build(); + } + if (collectedfromBuilder_ == null) { + if (((bitField0_ & 0x00004000) == 0x00004000)) { + collectedfrom_ = java.util.Collections.unmodifiableList(collectedfrom_); + bitField0_ = (bitField0_ & ~0x00004000); + } + result.collectedfrom_ = collectedfrom_; + } else { + result.collectedfrom_ = collectedfromBuilder_.build(); + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof eu.dnetlib.data.proto.OafProtos.OafRel) { + return mergeFrom((eu.dnetlib.data.proto.OafProtos.OafRel)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(eu.dnetlib.data.proto.OafProtos.OafRel other) { + if (other == eu.dnetlib.data.proto.OafProtos.OafRel.getDefaultInstance()) return this; + if (other.hasRelType()) { + setRelType(other.getRelType()); + } + if (other.hasSubRelType()) { + setSubRelType(other.getSubRelType()); + } + if (other.hasRelClass()) { + setRelClass(other.getRelClass()); + } + if (other.hasSource()) { + setSource(other.getSource()); + } + if (other.hasTarget()) { + setTarget(other.getTarget()); + } + if (other.hasChild()) { + setChild(other.getChild()); + } + if (other.hasCachedTarget()) { + mergeCachedTarget(other.getCachedTarget()); + } + if (other.hasCachedOafTarget()) { + mergeCachedOafTarget(other.getCachedOafTarget()); + } + if (other.hasDatasourceOrganization()) { + mergeDatasourceOrganization(other.getDatasourceOrganization()); + } + if (other.hasProjectOrganization()) { + mergeProjectOrganization(other.getProjectOrganization()); + } + if (other.hasResultOrganization()) { + mergeResultOrganization(other.getResultOrganization()); + } + if (other.hasResultProject()) { + mergeResultProject(other.getResultProject()); + } + if (other.hasResultResult()) { + mergeResultResult(other.getResultResult()); + } + if (other.hasOrganizationOrganization()) { + mergeOrganizationOrganization(other.getOrganizationOrganization()); + } + if (collectedfromBuilder_ == null) { + if (!other.collectedfrom_.isEmpty()) { + if (collectedfrom_.isEmpty()) { + collectedfrom_ = other.collectedfrom_; + bitField0_ = (bitField0_ & ~0x00004000); + } else { + ensureCollectedfromIsMutable(); + collectedfrom_.addAll(other.collectedfrom_); + } + onChanged(); + } + } else { + if (!other.collectedfrom_.isEmpty()) { + if (collectedfromBuilder_.isEmpty()) { + collectedfromBuilder_.dispose(); + collectedfromBuilder_ = null; + collectedfrom_ = other.collectedfrom_; + bitField0_ = (bitField0_ & ~0x00004000); + collectedfromBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + getCollectedfromFieldBuilder() : null; + } else { + collectedfromBuilder_.addAllMessages(other.collectedfrom_); + } + } + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + if (!hasRelType()) { + + return false; + } + if (!hasSubRelType()) { + + return false; + } + if (!hasRelClass()) { + + return false; + } + if (!hasSource()) { + + return false; + } + if (!hasTarget()) { + + return false; + } + if (!hasChild()) { + + return false; + } + if (hasCachedTarget()) { + if (!getCachedTarget().isInitialized()) { + + return false; + } + } + if (hasCachedOafTarget()) { + if (!getCachedOafTarget().isInitialized()) { + + return false; + } + } + if (hasDatasourceOrganization()) { + if (!getDatasourceOrganization().isInitialized()) { + + return false; + } + } + if (hasProjectOrganization()) { + if (!getProjectOrganization().isInitialized()) { + + return false; + } + } + if (hasResultOrganization()) { + if (!getResultOrganization().isInitialized()) { + + return false; + } + } + if (hasResultProject()) { + if (!getResultProject().isInitialized()) { + + return false; + } + } + if (hasResultResult()) { + if (!getResultResult().isInitialized()) { + + return false; + } + } + if (hasOrganizationOrganization()) { + if (!getOrganizationOrganization().isInitialized()) { + + return false; + } + } + for (int i = 0; i < getCollectedfromCount(); i++) { + if (!getCollectedfrom(i).isInitialized()) { + + return false; + } + } + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + } + break; + } + case 8: { + int rawValue = input.readEnum(); + eu.dnetlib.data.proto.RelTypeProtos.RelType value = eu.dnetlib.data.proto.RelTypeProtos.RelType.valueOf(rawValue); + if (value == null) { + unknownFields.mergeVarintField(1, rawValue); + } else { + bitField0_ |= 0x00000001; + relType_ = value; + } + break; + } + case 18: { + bitField0_ |= 0x00000008; + source_ = input.readBytes(); + break; + } + case 26: { + bitField0_ |= 0x00000010; + target_ = input.readBytes(); + break; + } + case 32: { + bitField0_ |= 0x00000020; + child_ = input.readBool(); + break; + } + case 42: { + eu.dnetlib.data.proto.OafProtos.OafEntity.Builder subBuilder = eu.dnetlib.data.proto.OafProtos.OafEntity.newBuilder(); + if (hasCachedTarget()) { + subBuilder.mergeFrom(getCachedTarget()); + } + input.readMessage(subBuilder, extensionRegistry); + setCachedTarget(subBuilder.buildPartial()); + break; + } + case 50: { + eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Builder subBuilder = eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.newBuilder(); + if (hasDatasourceOrganization()) { + subBuilder.mergeFrom(getDatasourceOrganization()); + } + input.readMessage(subBuilder, extensionRegistry); + setDatasourceOrganization(subBuilder.buildPartial()); + break; + } + case 66: { + eu.dnetlib.data.proto.OafProtos.Oaf.Builder subBuilder = eu.dnetlib.data.proto.OafProtos.Oaf.newBuilder(); + if (hasCachedOafTarget()) { + subBuilder.mergeFrom(getCachedOafTarget()); + } + input.readMessage(subBuilder, extensionRegistry); + setCachedOafTarget(subBuilder.buildPartial()); + break; + } + case 74: { + eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Builder subBuilder = eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.newBuilder(); + if (hasProjectOrganization()) { + subBuilder.mergeFrom(getProjectOrganization()); + } + input.readMessage(subBuilder, extensionRegistry); + setProjectOrganization(subBuilder.buildPartial()); + break; + } + case 82: { + eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Builder subBuilder = eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.newBuilder(); + if (hasResultOrganization()) { + subBuilder.mergeFrom(getResultOrganization()); + } + input.readMessage(subBuilder, extensionRegistry); + setResultOrganization(subBuilder.buildPartial()); + break; + } + case 90: { + eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Builder subBuilder = eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.newBuilder(); + if (hasResultProject()) { + subBuilder.mergeFrom(getResultProject()); + } + input.readMessage(subBuilder, extensionRegistry); + setResultProject(subBuilder.buildPartial()); + break; + } + case 130: { + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Builder subBuilder = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.newBuilder(); + if (hasResultResult()) { + subBuilder.mergeFrom(getResultResult()); + } + input.readMessage(subBuilder, extensionRegistry); + setResultResult(subBuilder.buildPartial()); + break; + } + case 138: { + eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization.Builder subBuilder = eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization.newBuilder(); + if (hasOrganizationOrganization()) { + subBuilder.mergeFrom(getOrganizationOrganization()); + } + input.readMessage(subBuilder, extensionRegistry); + setOrganizationOrganization(subBuilder.buildPartial()); + break; + } + case 152: { + int rawValue = input.readEnum(); + eu.dnetlib.data.proto.RelTypeProtos.SubRelType value = eu.dnetlib.data.proto.RelTypeProtos.SubRelType.valueOf(rawValue); + if (value == null) { + unknownFields.mergeVarintField(19, rawValue); + } else { + bitField0_ |= 0x00000002; + subRelType_ = value; + } + break; + } + case 162: { + bitField0_ |= 0x00000004; + relClass_ = input.readBytes(); + break; + } + case 170: { + eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addCollectedfrom(subBuilder.buildPartial()); + break; + } + } + } + } + + private int bitField0_; + + // required .eu.dnetlib.data.proto.RelType relType = 1; + private eu.dnetlib.data.proto.RelTypeProtos.RelType relType_ = eu.dnetlib.data.proto.RelTypeProtos.RelType.datasourceOrganization; + public boolean hasRelType() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.RelTypeProtos.RelType getRelType() { + return relType_; + } + public Builder setRelType(eu.dnetlib.data.proto.RelTypeProtos.RelType value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + relType_ = value; + onChanged(); + return this; + } + public Builder clearRelType() { + bitField0_ = (bitField0_ & ~0x00000001); + relType_ = eu.dnetlib.data.proto.RelTypeProtos.RelType.datasourceOrganization; + onChanged(); + return this; + } + + // required .eu.dnetlib.data.proto.SubRelType subRelType = 19; + private eu.dnetlib.data.proto.RelTypeProtos.SubRelType subRelType_ = eu.dnetlib.data.proto.RelTypeProtos.SubRelType.provision; + public boolean hasSubRelType() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public eu.dnetlib.data.proto.RelTypeProtos.SubRelType getSubRelType() { + return subRelType_; + } + public Builder setSubRelType(eu.dnetlib.data.proto.RelTypeProtos.SubRelType value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + subRelType_ = value; + onChanged(); + return this; + } + public Builder clearSubRelType() { + bitField0_ = (bitField0_ & ~0x00000002); + subRelType_ = eu.dnetlib.data.proto.RelTypeProtos.SubRelType.provision; + onChanged(); + return this; + } + + // required string relClass = 20; + private java.lang.Object relClass_ = ""; + public boolean hasRelClass() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + public String getRelClass() { + java.lang.Object ref = relClass_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + relClass_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setRelClass(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000004; + relClass_ = value; + onChanged(); + return this; + } + public Builder clearRelClass() { + bitField0_ = (bitField0_ & ~0x00000004); + relClass_ = getDefaultInstance().getRelClass(); + onChanged(); + return this; + } + void setRelClass(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000004; + relClass_ = value; + onChanged(); + } + + // required string source = 2; + private java.lang.Object source_ = ""; + public boolean hasSource() { + return ((bitField0_ & 0x00000008) == 0x00000008); + } + public String getSource() { + java.lang.Object ref = source_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + source_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setSource(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000008; + source_ = value; + onChanged(); + return this; + } + public Builder clearSource() { + bitField0_ = (bitField0_ & ~0x00000008); + source_ = getDefaultInstance().getSource(); + onChanged(); + return this; + } + void setSource(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000008; + source_ = value; + onChanged(); + } + + // required string target = 3; + private java.lang.Object target_ = ""; + public boolean hasTarget() { + return ((bitField0_ & 0x00000010) == 0x00000010); + } + public String getTarget() { + java.lang.Object ref = target_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + target_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setTarget(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000010; + target_ = value; + onChanged(); + return this; + } + public Builder clearTarget() { + bitField0_ = (bitField0_ & ~0x00000010); + target_ = getDefaultInstance().getTarget(); + onChanged(); + return this; + } + void setTarget(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000010; + target_ = value; + onChanged(); + } + + // required bool child = 4; + private boolean child_ ; + public boolean hasChild() { + return ((bitField0_ & 0x00000020) == 0x00000020); + } + public boolean getChild() { + return child_; + } + public Builder setChild(boolean value) { + bitField0_ |= 0x00000020; + child_ = value; + onChanged(); + return this; + } + public Builder clearChild() { + bitField0_ = (bitField0_ & ~0x00000020); + child_ = false; + onChanged(); + return this; + } + + // optional .eu.dnetlib.data.proto.OafEntity cachedTarget = 5; + private eu.dnetlib.data.proto.OafProtos.OafEntity cachedTarget_ = eu.dnetlib.data.proto.OafProtos.OafEntity.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.OafProtos.OafEntity, eu.dnetlib.data.proto.OafProtos.OafEntity.Builder, eu.dnetlib.data.proto.OafProtos.OafEntityOrBuilder> cachedTargetBuilder_; + public boolean hasCachedTarget() { + return ((bitField0_ & 0x00000040) == 0x00000040); + } + public eu.dnetlib.data.proto.OafProtos.OafEntity getCachedTarget() { + if (cachedTargetBuilder_ == null) { + return cachedTarget_; + } else { + return cachedTargetBuilder_.getMessage(); + } + } + public Builder setCachedTarget(eu.dnetlib.data.proto.OafProtos.OafEntity value) { + if (cachedTargetBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + cachedTarget_ = value; + onChanged(); + } else { + cachedTargetBuilder_.setMessage(value); + } + bitField0_ |= 0x00000040; + return this; + } + public Builder setCachedTarget( + eu.dnetlib.data.proto.OafProtos.OafEntity.Builder builderForValue) { + if (cachedTargetBuilder_ == null) { + cachedTarget_ = builderForValue.build(); + onChanged(); + } else { + cachedTargetBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000040; + return this; + } + public Builder mergeCachedTarget(eu.dnetlib.data.proto.OafProtos.OafEntity value) { + if (cachedTargetBuilder_ == null) { + if (((bitField0_ & 0x00000040) == 0x00000040) && + cachedTarget_ != eu.dnetlib.data.proto.OafProtos.OafEntity.getDefaultInstance()) { + cachedTarget_ = + eu.dnetlib.data.proto.OafProtos.OafEntity.newBuilder(cachedTarget_).mergeFrom(value).buildPartial(); + } else { + cachedTarget_ = value; + } + onChanged(); + } else { + cachedTargetBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000040; + return this; + } + public Builder clearCachedTarget() { + if (cachedTargetBuilder_ == null) { + cachedTarget_ = eu.dnetlib.data.proto.OafProtos.OafEntity.getDefaultInstance(); + onChanged(); + } else { + cachedTargetBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000040); + return this; + } + public eu.dnetlib.data.proto.OafProtos.OafEntity.Builder getCachedTargetBuilder() { + bitField0_ |= 0x00000040; + onChanged(); + return getCachedTargetFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.OafProtos.OafEntityOrBuilder getCachedTargetOrBuilder() { + if (cachedTargetBuilder_ != null) { + return cachedTargetBuilder_.getMessageOrBuilder(); + } else { + return cachedTarget_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.OafProtos.OafEntity, eu.dnetlib.data.proto.OafProtos.OafEntity.Builder, eu.dnetlib.data.proto.OafProtos.OafEntityOrBuilder> + getCachedTargetFieldBuilder() { + if (cachedTargetBuilder_ == null) { + cachedTargetBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.OafProtos.OafEntity, eu.dnetlib.data.proto.OafProtos.OafEntity.Builder, eu.dnetlib.data.proto.OafProtos.OafEntityOrBuilder>( + cachedTarget_, + getParentForChildren(), + isClean()); + cachedTarget_ = null; + } + return cachedTargetBuilder_; + } + + // optional .eu.dnetlib.data.proto.Oaf cachedOafTarget = 8; + private eu.dnetlib.data.proto.OafProtos.Oaf cachedOafTarget_ = eu.dnetlib.data.proto.OafProtos.Oaf.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.OafProtos.Oaf, eu.dnetlib.data.proto.OafProtos.Oaf.Builder, eu.dnetlib.data.proto.OafProtos.OafOrBuilder> cachedOafTargetBuilder_; + public boolean hasCachedOafTarget() { + return ((bitField0_ & 0x00000080) == 0x00000080); + } + public eu.dnetlib.data.proto.OafProtos.Oaf getCachedOafTarget() { + if (cachedOafTargetBuilder_ == null) { + return cachedOafTarget_; + } else { + return cachedOafTargetBuilder_.getMessage(); + } + } + public Builder setCachedOafTarget(eu.dnetlib.data.proto.OafProtos.Oaf value) { + if (cachedOafTargetBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + cachedOafTarget_ = value; + onChanged(); + } else { + cachedOafTargetBuilder_.setMessage(value); + } + bitField0_ |= 0x00000080; + return this; + } + public Builder setCachedOafTarget( + eu.dnetlib.data.proto.OafProtos.Oaf.Builder builderForValue) { + if (cachedOafTargetBuilder_ == null) { + cachedOafTarget_ = builderForValue.build(); + onChanged(); + } else { + cachedOafTargetBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000080; + return this; + } + public Builder mergeCachedOafTarget(eu.dnetlib.data.proto.OafProtos.Oaf value) { + if (cachedOafTargetBuilder_ == null) { + if (((bitField0_ & 0x00000080) == 0x00000080) && + cachedOafTarget_ != eu.dnetlib.data.proto.OafProtos.Oaf.getDefaultInstance()) { + cachedOafTarget_ = + eu.dnetlib.data.proto.OafProtos.Oaf.newBuilder(cachedOafTarget_).mergeFrom(value).buildPartial(); + } else { + cachedOafTarget_ = value; + } + onChanged(); + } else { + cachedOafTargetBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000080; + return this; + } + public Builder clearCachedOafTarget() { + if (cachedOafTargetBuilder_ == null) { + cachedOafTarget_ = eu.dnetlib.data.proto.OafProtos.Oaf.getDefaultInstance(); + onChanged(); + } else { + cachedOafTargetBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000080); + return this; + } + public eu.dnetlib.data.proto.OafProtos.Oaf.Builder getCachedOafTargetBuilder() { + bitField0_ |= 0x00000080; + onChanged(); + return getCachedOafTargetFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.OafProtos.OafOrBuilder getCachedOafTargetOrBuilder() { + if (cachedOafTargetBuilder_ != null) { + return cachedOafTargetBuilder_.getMessageOrBuilder(); + } else { + return cachedOafTarget_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.OafProtos.Oaf, eu.dnetlib.data.proto.OafProtos.Oaf.Builder, eu.dnetlib.data.proto.OafProtos.OafOrBuilder> + getCachedOafTargetFieldBuilder() { + if (cachedOafTargetBuilder_ == null) { + cachedOafTargetBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.OafProtos.Oaf, eu.dnetlib.data.proto.OafProtos.Oaf.Builder, eu.dnetlib.data.proto.OafProtos.OafOrBuilder>( + cachedOafTarget_, + getParentForChildren(), + isClean()); + cachedOafTarget_ = null; + } + return cachedOafTargetBuilder_; + } + + // optional .eu.dnetlib.data.proto.DatasourceOrganization datasourceOrganization = 6; + private eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization datasourceOrganization_ = eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization, eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Builder, eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganizationOrBuilder> datasourceOrganizationBuilder_; + public boolean hasDatasourceOrganization() { + return ((bitField0_ & 0x00000100) == 0x00000100); + } + public eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization getDatasourceOrganization() { + if (datasourceOrganizationBuilder_ == null) { + return datasourceOrganization_; + } else { + return datasourceOrganizationBuilder_.getMessage(); + } + } + public Builder setDatasourceOrganization(eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization value) { + if (datasourceOrganizationBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + datasourceOrganization_ = value; + onChanged(); + } else { + datasourceOrganizationBuilder_.setMessage(value); + } + bitField0_ |= 0x00000100; + return this; + } + public Builder setDatasourceOrganization( + eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Builder builderForValue) { + if (datasourceOrganizationBuilder_ == null) { + datasourceOrganization_ = builderForValue.build(); + onChanged(); + } else { + datasourceOrganizationBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000100; + return this; + } + public Builder mergeDatasourceOrganization(eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization value) { + if (datasourceOrganizationBuilder_ == null) { + if (((bitField0_ & 0x00000100) == 0x00000100) && + datasourceOrganization_ != eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.getDefaultInstance()) { + datasourceOrganization_ = + eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.newBuilder(datasourceOrganization_).mergeFrom(value).buildPartial(); + } else { + datasourceOrganization_ = value; + } + onChanged(); + } else { + datasourceOrganizationBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000100; + return this; + } + public Builder clearDatasourceOrganization() { + if (datasourceOrganizationBuilder_ == null) { + datasourceOrganization_ = eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.getDefaultInstance(); + onChanged(); + } else { + datasourceOrganizationBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000100); + return this; + } + public eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Builder getDatasourceOrganizationBuilder() { + bitField0_ |= 0x00000100; + onChanged(); + return getDatasourceOrganizationFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganizationOrBuilder getDatasourceOrganizationOrBuilder() { + if (datasourceOrganizationBuilder_ != null) { + return datasourceOrganizationBuilder_.getMessageOrBuilder(); + } else { + return datasourceOrganization_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization, eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Builder, eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganizationOrBuilder> + getDatasourceOrganizationFieldBuilder() { + if (datasourceOrganizationBuilder_ == null) { + datasourceOrganizationBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization, eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Builder, eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganizationOrBuilder>( + datasourceOrganization_, + getParentForChildren(), + isClean()); + datasourceOrganization_ = null; + } + return datasourceOrganizationBuilder_; + } + + // optional .eu.dnetlib.data.proto.ProjectOrganization projectOrganization = 9; + private eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization projectOrganization_ = eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization, eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Builder, eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganizationOrBuilder> projectOrganizationBuilder_; + public boolean hasProjectOrganization() { + return ((bitField0_ & 0x00000200) == 0x00000200); + } + public eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization getProjectOrganization() { + if (projectOrganizationBuilder_ == null) { + return projectOrganization_; + } else { + return projectOrganizationBuilder_.getMessage(); + } + } + public Builder setProjectOrganization(eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization value) { + if (projectOrganizationBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + projectOrganization_ = value; + onChanged(); + } else { + projectOrganizationBuilder_.setMessage(value); + } + bitField0_ |= 0x00000200; + return this; + } + public Builder setProjectOrganization( + eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Builder builderForValue) { + if (projectOrganizationBuilder_ == null) { + projectOrganization_ = builderForValue.build(); + onChanged(); + } else { + projectOrganizationBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000200; + return this; + } + public Builder mergeProjectOrganization(eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization value) { + if (projectOrganizationBuilder_ == null) { + if (((bitField0_ & 0x00000200) == 0x00000200) && + projectOrganization_ != eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.getDefaultInstance()) { + projectOrganization_ = + eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.newBuilder(projectOrganization_).mergeFrom(value).buildPartial(); + } else { + projectOrganization_ = value; + } + onChanged(); + } else { + projectOrganizationBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000200; + return this; + } + public Builder clearProjectOrganization() { + if (projectOrganizationBuilder_ == null) { + projectOrganization_ = eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.getDefaultInstance(); + onChanged(); + } else { + projectOrganizationBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000200); + return this; + } + public eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Builder getProjectOrganizationBuilder() { + bitField0_ |= 0x00000200; + onChanged(); + return getProjectOrganizationFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganizationOrBuilder getProjectOrganizationOrBuilder() { + if (projectOrganizationBuilder_ != null) { + return projectOrganizationBuilder_.getMessageOrBuilder(); + } else { + return projectOrganization_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization, eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Builder, eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganizationOrBuilder> + getProjectOrganizationFieldBuilder() { + if (projectOrganizationBuilder_ == null) { + projectOrganizationBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization, eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Builder, eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganizationOrBuilder>( + projectOrganization_, + getParentForChildren(), + isClean()); + projectOrganization_ = null; + } + return projectOrganizationBuilder_; + } + + // optional .eu.dnetlib.data.proto.ResultOrganization resultOrganization = 10; + private eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization resultOrganization_ = eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization, eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Builder, eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganizationOrBuilder> resultOrganizationBuilder_; + public boolean hasResultOrganization() { + return ((bitField0_ & 0x00000400) == 0x00000400); + } + public eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization getResultOrganization() { + if (resultOrganizationBuilder_ == null) { + return resultOrganization_; + } else { + return resultOrganizationBuilder_.getMessage(); + } + } + public Builder setResultOrganization(eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization value) { + if (resultOrganizationBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + resultOrganization_ = value; + onChanged(); + } else { + resultOrganizationBuilder_.setMessage(value); + } + bitField0_ |= 0x00000400; + return this; + } + public Builder setResultOrganization( + eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Builder builderForValue) { + if (resultOrganizationBuilder_ == null) { + resultOrganization_ = builderForValue.build(); + onChanged(); + } else { + resultOrganizationBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000400; + return this; + } + public Builder mergeResultOrganization(eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization value) { + if (resultOrganizationBuilder_ == null) { + if (((bitField0_ & 0x00000400) == 0x00000400) && + resultOrganization_ != eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.getDefaultInstance()) { + resultOrganization_ = + eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.newBuilder(resultOrganization_).mergeFrom(value).buildPartial(); + } else { + resultOrganization_ = value; + } + onChanged(); + } else { + resultOrganizationBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000400; + return this; + } + public Builder clearResultOrganization() { + if (resultOrganizationBuilder_ == null) { + resultOrganization_ = eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.getDefaultInstance(); + onChanged(); + } else { + resultOrganizationBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000400); + return this; + } + public eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Builder getResultOrganizationBuilder() { + bitField0_ |= 0x00000400; + onChanged(); + return getResultOrganizationFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganizationOrBuilder getResultOrganizationOrBuilder() { + if (resultOrganizationBuilder_ != null) { + return resultOrganizationBuilder_.getMessageOrBuilder(); + } else { + return resultOrganization_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization, eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Builder, eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganizationOrBuilder> + getResultOrganizationFieldBuilder() { + if (resultOrganizationBuilder_ == null) { + resultOrganizationBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization, eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Builder, eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganizationOrBuilder>( + resultOrganization_, + getParentForChildren(), + isClean()); + resultOrganization_ = null; + } + return resultOrganizationBuilder_; + } + + // optional .eu.dnetlib.data.proto.ResultProject resultProject = 11; + private eu.dnetlib.data.proto.ResultProjectProtos.ResultProject resultProject_ = eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ResultProjectProtos.ResultProject, eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Builder, eu.dnetlib.data.proto.ResultProjectProtos.ResultProjectOrBuilder> resultProjectBuilder_; + public boolean hasResultProject() { + return ((bitField0_ & 0x00000800) == 0x00000800); + } + public eu.dnetlib.data.proto.ResultProjectProtos.ResultProject getResultProject() { + if (resultProjectBuilder_ == null) { + return resultProject_; + } else { + return resultProjectBuilder_.getMessage(); + } + } + public Builder setResultProject(eu.dnetlib.data.proto.ResultProjectProtos.ResultProject value) { + if (resultProjectBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + resultProject_ = value; + onChanged(); + } else { + resultProjectBuilder_.setMessage(value); + } + bitField0_ |= 0x00000800; + return this; + } + public Builder setResultProject( + eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Builder builderForValue) { + if (resultProjectBuilder_ == null) { + resultProject_ = builderForValue.build(); + onChanged(); + } else { + resultProjectBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000800; + return this; + } + public Builder mergeResultProject(eu.dnetlib.data.proto.ResultProjectProtos.ResultProject value) { + if (resultProjectBuilder_ == null) { + if (((bitField0_ & 0x00000800) == 0x00000800) && + resultProject_ != eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.getDefaultInstance()) { + resultProject_ = + eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.newBuilder(resultProject_).mergeFrom(value).buildPartial(); + } else { + resultProject_ = value; + } + onChanged(); + } else { + resultProjectBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000800; + return this; + } + public Builder clearResultProject() { + if (resultProjectBuilder_ == null) { + resultProject_ = eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.getDefaultInstance(); + onChanged(); + } else { + resultProjectBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000800); + return this; + } + public eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Builder getResultProjectBuilder() { + bitField0_ |= 0x00000800; + onChanged(); + return getResultProjectFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.ResultProjectProtos.ResultProjectOrBuilder getResultProjectOrBuilder() { + if (resultProjectBuilder_ != null) { + return resultProjectBuilder_.getMessageOrBuilder(); + } else { + return resultProject_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ResultProjectProtos.ResultProject, eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Builder, eu.dnetlib.data.proto.ResultProjectProtos.ResultProjectOrBuilder> + getResultProjectFieldBuilder() { + if (resultProjectBuilder_ == null) { + resultProjectBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ResultProjectProtos.ResultProject, eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Builder, eu.dnetlib.data.proto.ResultProjectProtos.ResultProjectOrBuilder>( + resultProject_, + getParentForChildren(), + isClean()); + resultProject_ = null; + } + return resultProjectBuilder_; + } + + // optional .eu.dnetlib.data.proto.ResultResult resultResult = 16; + private eu.dnetlib.data.proto.ResultResultProtos.ResultResult resultResult_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ResultResultProtos.ResultResult, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Builder, eu.dnetlib.data.proto.ResultResultProtos.ResultResultOrBuilder> resultResultBuilder_; + public boolean hasResultResult() { + return ((bitField0_ & 0x00001000) == 0x00001000); + } + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult getResultResult() { + if (resultResultBuilder_ == null) { + return resultResult_; + } else { + return resultResultBuilder_.getMessage(); + } + } + public Builder setResultResult(eu.dnetlib.data.proto.ResultResultProtos.ResultResult value) { + if (resultResultBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + resultResult_ = value; + onChanged(); + } else { + resultResultBuilder_.setMessage(value); + } + bitField0_ |= 0x00001000; + return this; + } + public Builder setResultResult( + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Builder builderForValue) { + if (resultResultBuilder_ == null) { + resultResult_ = builderForValue.build(); + onChanged(); + } else { + resultResultBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00001000; + return this; + } + public Builder mergeResultResult(eu.dnetlib.data.proto.ResultResultProtos.ResultResult value) { + if (resultResultBuilder_ == null) { + if (((bitField0_ & 0x00001000) == 0x00001000) && + resultResult_ != eu.dnetlib.data.proto.ResultResultProtos.ResultResult.getDefaultInstance()) { + resultResult_ = + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.newBuilder(resultResult_).mergeFrom(value).buildPartial(); + } else { + resultResult_ = value; + } + onChanged(); + } else { + resultResultBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00001000; + return this; + } + public Builder clearResultResult() { + if (resultResultBuilder_ == null) { + resultResult_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.getDefaultInstance(); + onChanged(); + } else { + resultResultBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00001000); + return this; + } + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Builder getResultResultBuilder() { + bitField0_ |= 0x00001000; + onChanged(); + return getResultResultFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.ResultResultProtos.ResultResultOrBuilder getResultResultOrBuilder() { + if (resultResultBuilder_ != null) { + return resultResultBuilder_.getMessageOrBuilder(); + } else { + return resultResult_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ResultResultProtos.ResultResult, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Builder, eu.dnetlib.data.proto.ResultResultProtos.ResultResultOrBuilder> + getResultResultFieldBuilder() { + if (resultResultBuilder_ == null) { + resultResultBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ResultResultProtos.ResultResult, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Builder, eu.dnetlib.data.proto.ResultResultProtos.ResultResultOrBuilder>( + resultResult_, + getParentForChildren(), + isClean()); + resultResult_ = null; + } + return resultResultBuilder_; + } + + // optional .eu.dnetlib.data.proto.OrganizationOrganization organizationOrganization = 17; + private eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization organizationOrganization_ = eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization, eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization.Builder, eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganizationOrBuilder> organizationOrganizationBuilder_; + public boolean hasOrganizationOrganization() { + return ((bitField0_ & 0x00002000) == 0x00002000); + } + public eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization getOrganizationOrganization() { + if (organizationOrganizationBuilder_ == null) { + return organizationOrganization_; + } else { + return organizationOrganizationBuilder_.getMessage(); + } + } + public Builder setOrganizationOrganization(eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization value) { + if (organizationOrganizationBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + organizationOrganization_ = value; + onChanged(); + } else { + organizationOrganizationBuilder_.setMessage(value); + } + bitField0_ |= 0x00002000; + return this; + } + public Builder setOrganizationOrganization( + eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization.Builder builderForValue) { + if (organizationOrganizationBuilder_ == null) { + organizationOrganization_ = builderForValue.build(); + onChanged(); + } else { + organizationOrganizationBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00002000; + return this; + } + public Builder mergeOrganizationOrganization(eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization value) { + if (organizationOrganizationBuilder_ == null) { + if (((bitField0_ & 0x00002000) == 0x00002000) && + organizationOrganization_ != eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization.getDefaultInstance()) { + organizationOrganization_ = + eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization.newBuilder(organizationOrganization_).mergeFrom(value).buildPartial(); + } else { + organizationOrganization_ = value; + } + onChanged(); + } else { + organizationOrganizationBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00002000; + return this; + } + public Builder clearOrganizationOrganization() { + if (organizationOrganizationBuilder_ == null) { + organizationOrganization_ = eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization.getDefaultInstance(); + onChanged(); + } else { + organizationOrganizationBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00002000); + return this; + } + public eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization.Builder getOrganizationOrganizationBuilder() { + bitField0_ |= 0x00002000; + onChanged(); + return getOrganizationOrganizationFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganizationOrBuilder getOrganizationOrganizationOrBuilder() { + if (organizationOrganizationBuilder_ != null) { + return organizationOrganizationBuilder_.getMessageOrBuilder(); + } else { + return organizationOrganization_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization, eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization.Builder, eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganizationOrBuilder> + getOrganizationOrganizationFieldBuilder() { + if (organizationOrganizationBuilder_ == null) { + organizationOrganizationBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization, eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization.Builder, eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganizationOrBuilder>( + organizationOrganization_, + getParentForChildren(), + isClean()); + organizationOrganization_ = null; + } + return organizationOrganizationBuilder_; + } + + // repeated .eu.dnetlib.data.proto.KeyValue collectedfrom = 21; + private java.util.List collectedfrom_ = + java.util.Collections.emptyList(); + private void ensureCollectedfromIsMutable() { + if (!((bitField0_ & 0x00004000) == 0x00004000)) { + collectedfrom_ = new java.util.ArrayList(collectedfrom_); + bitField0_ |= 0x00004000; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.KeyValue, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder, eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder> collectedfromBuilder_; + + public java.util.List getCollectedfromList() { + if (collectedfromBuilder_ == null) { + return java.util.Collections.unmodifiableList(collectedfrom_); + } else { + return collectedfromBuilder_.getMessageList(); + } + } + public int getCollectedfromCount() { + if (collectedfromBuilder_ == null) { + return collectedfrom_.size(); + } else { + return collectedfromBuilder_.getCount(); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue getCollectedfrom(int index) { + if (collectedfromBuilder_ == null) { + return collectedfrom_.get(index); + } else { + return collectedfromBuilder_.getMessage(index); + } + } + public Builder setCollectedfrom( + int index, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue value) { + if (collectedfromBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureCollectedfromIsMutable(); + collectedfrom_.set(index, value); + onChanged(); + } else { + collectedfromBuilder_.setMessage(index, value); + } + return this; + } + public Builder setCollectedfrom( + int index, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder builderForValue) { + if (collectedfromBuilder_ == null) { + ensureCollectedfromIsMutable(); + collectedfrom_.set(index, builderForValue.build()); + onChanged(); + } else { + collectedfromBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + public Builder addCollectedfrom(eu.dnetlib.data.proto.FieldTypeProtos.KeyValue value) { + if (collectedfromBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureCollectedfromIsMutable(); + collectedfrom_.add(value); + onChanged(); + } else { + collectedfromBuilder_.addMessage(value); + } + return this; + } + public Builder addCollectedfrom( + int index, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue value) { + if (collectedfromBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureCollectedfromIsMutable(); + collectedfrom_.add(index, value); + onChanged(); + } else { + collectedfromBuilder_.addMessage(index, value); + } + return this; + } + public Builder addCollectedfrom( + eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder builderForValue) { + if (collectedfromBuilder_ == null) { + ensureCollectedfromIsMutable(); + collectedfrom_.add(builderForValue.build()); + onChanged(); + } else { + collectedfromBuilder_.addMessage(builderForValue.build()); + } + return this; + } + public Builder addCollectedfrom( + int index, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder builderForValue) { + if (collectedfromBuilder_ == null) { + ensureCollectedfromIsMutable(); + collectedfrom_.add(index, builderForValue.build()); + onChanged(); + } else { + collectedfromBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + public Builder addAllCollectedfrom( + java.lang.Iterable values) { + if (collectedfromBuilder_ == null) { + ensureCollectedfromIsMutable(); + super.addAll(values, collectedfrom_); + onChanged(); + } else { + collectedfromBuilder_.addAllMessages(values); + } + return this; + } + public Builder clearCollectedfrom() { + if (collectedfromBuilder_ == null) { + collectedfrom_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00004000); + onChanged(); + } else { + collectedfromBuilder_.clear(); + } + return this; + } + public Builder removeCollectedfrom(int index) { + if (collectedfromBuilder_ == null) { + ensureCollectedfromIsMutable(); + collectedfrom_.remove(index); + onChanged(); + } else { + collectedfromBuilder_.remove(index); + } + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder getCollectedfromBuilder( + int index) { + return getCollectedfromFieldBuilder().getBuilder(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder getCollectedfromOrBuilder( + int index) { + if (collectedfromBuilder_ == null) { + return collectedfrom_.get(index); } else { + return collectedfromBuilder_.getMessageOrBuilder(index); + } + } + public java.util.List + getCollectedfromOrBuilderList() { + if (collectedfromBuilder_ != null) { + return collectedfromBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(collectedfrom_); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder addCollectedfromBuilder() { + return getCollectedfromFieldBuilder().addBuilder( + eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.getDefaultInstance()); + } + public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder addCollectedfromBuilder( + int index) { + return getCollectedfromFieldBuilder().addBuilder( + index, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.getDefaultInstance()); + } + public java.util.List + getCollectedfromBuilderList() { + return getCollectedfromFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.KeyValue, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder, eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder> + getCollectedfromFieldBuilder() { + if (collectedfromBuilder_ == null) { + collectedfromBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.KeyValue, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder, eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder>( + collectedfrom_, + ((bitField0_ & 0x00004000) == 0x00004000), + getParentForChildren(), + isClean()); + collectedfrom_ = null; + } + return collectedfromBuilder_; + } + + // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.OafRel) + } + + static { + defaultInstance = new OafRel(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.OafRel) + } + + private static com.google.protobuf.Descriptors.Descriptor + internal_static_eu_dnetlib_data_proto_Oaf_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_eu_dnetlib_data_proto_Oaf_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_eu_dnetlib_data_proto_OafEntity_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_eu_dnetlib_data_proto_OafEntity_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_eu_dnetlib_data_proto_OafRel_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_eu_dnetlib_data_proto_OafRel_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\017OafParent.proto\022\025eu.dnetlib.data.proto" + + "\032\nKind.proto\032\017FieldType.proto\032\nType.prot" + + "o\032\020Datasource.proto\032\022Organization.proto\032" + + "\rProject.proto\032\014Result.proto\032\014Person.pro" + + "to\032\rRelType.proto\032\035Datasource_Organizati" + + "on.proto\032\032Project_Organization.proto\032\031Re" + + "sult_Organization.proto\032\024Result_Project." + + "proto\032\023Result_Result.proto\032\037Organization" + + "_Organization.proto\"\336\001\n\003Oaf\022)\n\004kind\030\001 \002(" + + "\0162\033.eu.dnetlib.data.proto.Kind\0220\n\006entity", + "\030\002 \001(\0132 .eu.dnetlib.data.proto.OafEntity" + + "\022*\n\003rel\030\003 \001(\0132\035.eu.dnetlib.data.proto.Oa" + + "fRel\0221\n\010dataInfo\030\004 \001(\0132\037.eu.dnetlib.data" + + ".proto.DataInfo\022\033\n\023lastupdatetimestamp\030\005" + + " \001(\020\"\211\006\n\tOafEntity\022)\n\004type\030\001 \002(\0162\033.eu.dn" + + "etlib.data.proto.Type\022\n\n\002id\030\014 \002(\t\022\022\n\nori" + + "ginalId\030\010 \003(\t\0226\n\rcollectedfrom\030\t \003(\0132\037.e" + + "u.dnetlib.data.proto.KeyValue\0226\n\003pid\030\n \003" + + "(\0132).eu.dnetlib.data.proto.StructuredPro" + + "perty\022\030\n\020dateofcollection\030\013 \001(\t\022\034\n\024dateo", + "ftransformation\030\r \001(\t\0220\n\tcachedRel\030\002 \003(\013" + + "2\035.eu.dnetlib.data.proto.OafRel\0220\n\014cache" + + "dOafRel\030\022 \003(\0132\032.eu.dnetlib.data.proto.Oa" + + "f\0225\n\ndatasource\030\003 \001(\0132!.eu.dnetlib.data." + + "proto.Datasource\0229\n\014organization\030\004 \001(\0132#" + + ".eu.dnetlib.data.proto.Organization\022/\n\007p" + + "roject\030\006 \001(\0132\036.eu.dnetlib.data.proto.Pro" + + "ject\022-\n\006result\030\007 \001(\0132\035.eu.dnetlib.data.p" + + "roto.Result\022-\n\006person\030\005 \001(\0132\035.eu.dnetlib" + + ".data.proto.Person\0222\n\010children\030\020 \003(\0132 .e", + "u.dnetlib.data.proto.OafEntity\0223\n\textraI" + + "nfo\030\017 \003(\0132 .eu.dnetlib.data.proto.ExtraI" + + "nfo\022;\n\roaiprovenance\030\021 \001(\0132$.eu.dnetlib." + + "data.proto.OAIProvenance\"\200\006\n\006OafRel\022/\n\007r" + + "elType\030\001 \002(\0162\036.eu.dnetlib.data.proto.Rel" + + "Type\0225\n\nsubRelType\030\023 \002(\0162!.eu.dnetlib.da" + + "ta.proto.SubRelType\022\020\n\010relClass\030\024 \002(\t\022\016\n" + + "\006source\030\002 \002(\t\022\016\n\006target\030\003 \002(\t\022\r\n\005child\030\004" + + " \002(\010\0226\n\014cachedTarget\030\005 \001(\0132 .eu.dnetlib." + + "data.proto.OafEntity\0223\n\017cachedOafTarget\030", + "\010 \001(\0132\032.eu.dnetlib.data.proto.Oaf\022M\n\026dat" + + "asourceOrganization\030\006 \001(\0132-.eu.dnetlib.d" + + "ata.proto.DatasourceOrganization\022G\n\023proj" + + "ectOrganization\030\t \001(\0132*.eu.dnetlib.data." + + "proto.ProjectOrganization\022E\n\022resultOrgan" + + "ization\030\n \001(\0132).eu.dnetlib.data.proto.Re" + + "sultOrganization\022;\n\rresultProject\030\013 \001(\0132" + + "$.eu.dnetlib.data.proto.ResultProject\0229\n" + + "\014resultResult\030\020 \001(\0132#.eu.dnetlib.data.pr" + + "oto.ResultResult\022Q\n\030organizationOrganiza", + "tion\030\021 \001(\0132/.eu.dnetlib.data.proto.Organ" + + "izationOrganization\0226\n\rcollectedfrom\030\025 \003" + + "(\0132\037.eu.dnetlib.data.proto.KeyValueB\"\n\025e" + + "u.dnetlib.data.protoB\tOafProtos" + }; + com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = + new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { + public com.google.protobuf.ExtensionRegistry assignDescriptors( + com.google.protobuf.Descriptors.FileDescriptor root) { + descriptor = root; + internal_static_eu_dnetlib_data_proto_Oaf_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_eu_dnetlib_data_proto_Oaf_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_eu_dnetlib_data_proto_Oaf_descriptor, + new java.lang.String[] { "Kind", "Entity", "Rel", "DataInfo", "Lastupdatetimestamp", }, + eu.dnetlib.data.proto.OafProtos.Oaf.class, + eu.dnetlib.data.proto.OafProtos.Oaf.Builder.class); + internal_static_eu_dnetlib_data_proto_OafEntity_descriptor = + getDescriptor().getMessageTypes().get(1); + internal_static_eu_dnetlib_data_proto_OafEntity_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_eu_dnetlib_data_proto_OafEntity_descriptor, + new java.lang.String[] { "Type", "Id", "OriginalId", "Collectedfrom", "Pid", "Dateofcollection", "Dateoftransformation", "CachedRel", "CachedOafRel", "Datasource", "Organization", "Project", "Result", "Person", "Children", "ExtraInfo", "Oaiprovenance", }, + eu.dnetlib.data.proto.OafProtos.OafEntity.class, + eu.dnetlib.data.proto.OafProtos.OafEntity.Builder.class); + internal_static_eu_dnetlib_data_proto_OafRel_descriptor = + getDescriptor().getMessageTypes().get(2); + internal_static_eu_dnetlib_data_proto_OafRel_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_eu_dnetlib_data_proto_OafRel_descriptor, + new java.lang.String[] { "RelType", "SubRelType", "RelClass", "Source", "Target", "Child", "CachedTarget", "CachedOafTarget", "DatasourceOrganization", "ProjectOrganization", "ResultOrganization", "ResultProject", "ResultResult", "OrganizationOrganization", "Collectedfrom", }, + eu.dnetlib.data.proto.OafProtos.OafRel.class, + eu.dnetlib.data.proto.OafProtos.OafRel.Builder.class); + return null; + } + }; + com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + eu.dnetlib.data.proto.KindProtos.getDescriptor(), + eu.dnetlib.data.proto.FieldTypeProtos.getDescriptor(), + eu.dnetlib.data.proto.TypeProtos.getDescriptor(), + eu.dnetlib.data.proto.DatasourceProtos.getDescriptor(), + eu.dnetlib.data.proto.OrganizationProtos.getDescriptor(), + eu.dnetlib.data.proto.ProjectProtos.getDescriptor(), + eu.dnetlib.data.proto.ResultProtos.getDescriptor(), + eu.dnetlib.data.proto.PersonProtos.getDescriptor(), + eu.dnetlib.data.proto.RelTypeProtos.getDescriptor(), + eu.dnetlib.data.proto.DatasourceOrganizationProtos.getDescriptor(), + eu.dnetlib.data.proto.ProjectOrganizationProtos.getDescriptor(), + eu.dnetlib.data.proto.ResultOrganizationProtos.getDescriptor(), + eu.dnetlib.data.proto.ResultProjectProtos.getDescriptor(), + eu.dnetlib.data.proto.ResultResultProtos.getDescriptor(), + eu.dnetlib.data.proto.OrganizationOrganizationProtos.getDescriptor(), + }, assigner); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/OrganizationOrganizationProtos.java b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/OrganizationOrganizationProtos.java new file mode 100644 index 000000000..b04807eb1 --- /dev/null +++ b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/OrganizationOrganizationProtos.java @@ -0,0 +1,651 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: Organization_Organization.proto + +package eu.dnetlib.data.proto; + +public final class OrganizationOrganizationProtos { + private OrganizationOrganizationProtos() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + } + public interface OrganizationOrganizationOrBuilder + extends com.google.protobuf.MessageOrBuilder { + + // optional .eu.dnetlib.data.proto.Dedup dedup = 1; + boolean hasDedup(); + eu.dnetlib.data.proto.DedupProtos.Dedup getDedup(); + eu.dnetlib.data.proto.DedupProtos.DedupOrBuilder getDedupOrBuilder(); + + // optional .eu.dnetlib.data.proto.DedupSimilarity dedupSimilarity = 2; + boolean hasDedupSimilarity(); + eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity getDedupSimilarity(); + eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarityOrBuilder getDedupSimilarityOrBuilder(); + } + public static final class OrganizationOrganization extends + com.google.protobuf.GeneratedMessage + implements OrganizationOrganizationOrBuilder { + // Use OrganizationOrganization.newBuilder() to construct. + private OrganizationOrganization(Builder builder) { + super(builder); + } + private OrganizationOrganization(boolean noInit) {} + + private static final OrganizationOrganization defaultInstance; + public static OrganizationOrganization getDefaultInstance() { + return defaultInstance; + } + + public OrganizationOrganization getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.OrganizationOrganizationProtos.internal_static_eu_dnetlib_data_proto_OrganizationOrganization_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.OrganizationOrganizationProtos.internal_static_eu_dnetlib_data_proto_OrganizationOrganization_fieldAccessorTable; + } + + private int bitField0_; + // optional .eu.dnetlib.data.proto.Dedup dedup = 1; + public static final int DEDUP_FIELD_NUMBER = 1; + private eu.dnetlib.data.proto.DedupProtos.Dedup dedup_; + public boolean hasDedup() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.DedupProtos.Dedup getDedup() { + return dedup_; + } + public eu.dnetlib.data.proto.DedupProtos.DedupOrBuilder getDedupOrBuilder() { + return dedup_; + } + + // optional .eu.dnetlib.data.proto.DedupSimilarity dedupSimilarity = 2; + public static final int DEDUPSIMILARITY_FIELD_NUMBER = 2; + private eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity dedupSimilarity_; + public boolean hasDedupSimilarity() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity getDedupSimilarity() { + return dedupSimilarity_; + } + public eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarityOrBuilder getDedupSimilarityOrBuilder() { + return dedupSimilarity_; + } + + private void initFields() { + dedup_ = eu.dnetlib.data.proto.DedupProtos.Dedup.getDefaultInstance(); + dedupSimilarity_ = eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.getDefaultInstance(); + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + if (hasDedup()) { + if (!getDedup().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasDedupSimilarity()) { + if (!getDedupSimilarity().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeMessage(1, dedup_); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + output.writeMessage(2, dedupSimilarity_); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, dedup_); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(2, dedupSimilarity_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder + implements eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganizationOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.OrganizationOrganizationProtos.internal_static_eu_dnetlib_data_proto_OrganizationOrganization_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.OrganizationOrganizationProtos.internal_static_eu_dnetlib_data_proto_OrganizationOrganization_fieldAccessorTable; + } + + // Construct using eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getDedupFieldBuilder(); + getDedupSimilarityFieldBuilder(); + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + if (dedupBuilder_ == null) { + dedup_ = eu.dnetlib.data.proto.DedupProtos.Dedup.getDefaultInstance(); + } else { + dedupBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + if (dedupSimilarityBuilder_ == null) { + dedupSimilarity_ = eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.getDefaultInstance(); + } else { + dedupSimilarityBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000002); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization.getDescriptor(); + } + + public eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization getDefaultInstanceForType() { + return eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization.getDefaultInstance(); + } + + public eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization build() { + eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + private eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return result; + } + + public eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization buildPartial() { + eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization result = new eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + if (dedupBuilder_ == null) { + result.dedup_ = dedup_; + } else { + result.dedup_ = dedupBuilder_.build(); + } + if (((from_bitField0_ & 0x00000002) == 0x00000002)) { + to_bitField0_ |= 0x00000002; + } + if (dedupSimilarityBuilder_ == null) { + result.dedupSimilarity_ = dedupSimilarity_; + } else { + result.dedupSimilarity_ = dedupSimilarityBuilder_.build(); + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization) { + return mergeFrom((eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization other) { + if (other == eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization.getDefaultInstance()) return this; + if (other.hasDedup()) { + mergeDedup(other.getDedup()); + } + if (other.hasDedupSimilarity()) { + mergeDedupSimilarity(other.getDedupSimilarity()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + if (hasDedup()) { + if (!getDedup().isInitialized()) { + + return false; + } + } + if (hasDedupSimilarity()) { + if (!getDedupSimilarity().isInitialized()) { + + return false; + } + } + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + } + break; + } + case 10: { + eu.dnetlib.data.proto.DedupProtos.Dedup.Builder subBuilder = eu.dnetlib.data.proto.DedupProtos.Dedup.newBuilder(); + if (hasDedup()) { + subBuilder.mergeFrom(getDedup()); + } + input.readMessage(subBuilder, extensionRegistry); + setDedup(subBuilder.buildPartial()); + break; + } + case 18: { + eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.Builder subBuilder = eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.newBuilder(); + if (hasDedupSimilarity()) { + subBuilder.mergeFrom(getDedupSimilarity()); + } + input.readMessage(subBuilder, extensionRegistry); + setDedupSimilarity(subBuilder.buildPartial()); + break; + } + } + } + } + + private int bitField0_; + + // optional .eu.dnetlib.data.proto.Dedup dedup = 1; + private eu.dnetlib.data.proto.DedupProtos.Dedup dedup_ = eu.dnetlib.data.proto.DedupProtos.Dedup.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.DedupProtos.Dedup, eu.dnetlib.data.proto.DedupProtos.Dedup.Builder, eu.dnetlib.data.proto.DedupProtos.DedupOrBuilder> dedupBuilder_; + public boolean hasDedup() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.DedupProtos.Dedup getDedup() { + if (dedupBuilder_ == null) { + return dedup_; + } else { + return dedupBuilder_.getMessage(); + } + } + public Builder setDedup(eu.dnetlib.data.proto.DedupProtos.Dedup value) { + if (dedupBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + dedup_ = value; + onChanged(); + } else { + dedupBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder setDedup( + eu.dnetlib.data.proto.DedupProtos.Dedup.Builder builderForValue) { + if (dedupBuilder_ == null) { + dedup_ = builderForValue.build(); + onChanged(); + } else { + dedupBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder mergeDedup(eu.dnetlib.data.proto.DedupProtos.Dedup value) { + if (dedupBuilder_ == null) { + if (((bitField0_ & 0x00000001) == 0x00000001) && + dedup_ != eu.dnetlib.data.proto.DedupProtos.Dedup.getDefaultInstance()) { + dedup_ = + eu.dnetlib.data.proto.DedupProtos.Dedup.newBuilder(dedup_).mergeFrom(value).buildPartial(); + } else { + dedup_ = value; + } + onChanged(); + } else { + dedupBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder clearDedup() { + if (dedupBuilder_ == null) { + dedup_ = eu.dnetlib.data.proto.DedupProtos.Dedup.getDefaultInstance(); + onChanged(); + } else { + dedupBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + public eu.dnetlib.data.proto.DedupProtos.Dedup.Builder getDedupBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return getDedupFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.DedupProtos.DedupOrBuilder getDedupOrBuilder() { + if (dedupBuilder_ != null) { + return dedupBuilder_.getMessageOrBuilder(); + } else { + return dedup_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.DedupProtos.Dedup, eu.dnetlib.data.proto.DedupProtos.Dedup.Builder, eu.dnetlib.data.proto.DedupProtos.DedupOrBuilder> + getDedupFieldBuilder() { + if (dedupBuilder_ == null) { + dedupBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.DedupProtos.Dedup, eu.dnetlib.data.proto.DedupProtos.Dedup.Builder, eu.dnetlib.data.proto.DedupProtos.DedupOrBuilder>( + dedup_, + getParentForChildren(), + isClean()); + dedup_ = null; + } + return dedupBuilder_; + } + + // optional .eu.dnetlib.data.proto.DedupSimilarity dedupSimilarity = 2; + private eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity dedupSimilarity_ = eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity, eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.Builder, eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarityOrBuilder> dedupSimilarityBuilder_; + public boolean hasDedupSimilarity() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity getDedupSimilarity() { + if (dedupSimilarityBuilder_ == null) { + return dedupSimilarity_; + } else { + return dedupSimilarityBuilder_.getMessage(); + } + } + public Builder setDedupSimilarity(eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity value) { + if (dedupSimilarityBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + dedupSimilarity_ = value; + onChanged(); + } else { + dedupSimilarityBuilder_.setMessage(value); + } + bitField0_ |= 0x00000002; + return this; + } + public Builder setDedupSimilarity( + eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.Builder builderForValue) { + if (dedupSimilarityBuilder_ == null) { + dedupSimilarity_ = builderForValue.build(); + onChanged(); + } else { + dedupSimilarityBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000002; + return this; + } + public Builder mergeDedupSimilarity(eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity value) { + if (dedupSimilarityBuilder_ == null) { + if (((bitField0_ & 0x00000002) == 0x00000002) && + dedupSimilarity_ != eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.getDefaultInstance()) { + dedupSimilarity_ = + eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.newBuilder(dedupSimilarity_).mergeFrom(value).buildPartial(); + } else { + dedupSimilarity_ = value; + } + onChanged(); + } else { + dedupSimilarityBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000002; + return this; + } + public Builder clearDedupSimilarity() { + if (dedupSimilarityBuilder_ == null) { + dedupSimilarity_ = eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.getDefaultInstance(); + onChanged(); + } else { + dedupSimilarityBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000002); + return this; + } + public eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.Builder getDedupSimilarityBuilder() { + bitField0_ |= 0x00000002; + onChanged(); + return getDedupSimilarityFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarityOrBuilder getDedupSimilarityOrBuilder() { + if (dedupSimilarityBuilder_ != null) { + return dedupSimilarityBuilder_.getMessageOrBuilder(); + } else { + return dedupSimilarity_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity, eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.Builder, eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarityOrBuilder> + getDedupSimilarityFieldBuilder() { + if (dedupSimilarityBuilder_ == null) { + dedupSimilarityBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity, eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.Builder, eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarityOrBuilder>( + dedupSimilarity_, + getParentForChildren(), + isClean()); + dedupSimilarity_ = null; + } + return dedupSimilarityBuilder_; + } + + // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.OrganizationOrganization) + } + + static { + defaultInstance = new OrganizationOrganization(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.OrganizationOrganization) + } + + private static com.google.protobuf.Descriptors.Descriptor + internal_static_eu_dnetlib_data_proto_OrganizationOrganization_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_eu_dnetlib_data_proto_OrganizationOrganization_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\037Organization_Organization.proto\022\025eu.dn" + + "etlib.data.proto\032\021RelMetadata.proto\032\013Ded" + + "up.proto\032\025DedupSimilarity.proto\"\210\001\n\030Orga" + + "nizationOrganization\022+\n\005dedup\030\001 \001(\0132\034.eu" + + ".dnetlib.data.proto.Dedup\022?\n\017dedupSimila" + + "rity\030\002 \001(\0132&.eu.dnetlib.data.proto.Dedup" + + "SimilarityB7\n\025eu.dnetlib.data.protoB\036Org" + + "anizationOrganizationProtos" + }; + com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = + new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { + public com.google.protobuf.ExtensionRegistry assignDescriptors( + com.google.protobuf.Descriptors.FileDescriptor root) { + descriptor = root; + internal_static_eu_dnetlib_data_proto_OrganizationOrganization_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_eu_dnetlib_data_proto_OrganizationOrganization_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_eu_dnetlib_data_proto_OrganizationOrganization_descriptor, + new java.lang.String[] { "Dedup", "DedupSimilarity", }, + eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization.class, + eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization.Builder.class); + return null; + } + }; + com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + eu.dnetlib.data.proto.RelMetadataProtos.getDescriptor(), + eu.dnetlib.data.proto.DedupProtos.getDescriptor(), + eu.dnetlib.data.proto.DedupSimilarityProtos.getDescriptor(), + }, assigner); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/OrganizationProtos.java b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/OrganizationProtos.java new file mode 100644 index 000000000..2b27423a0 --- /dev/null +++ b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/OrganizationProtos.java @@ -0,0 +1,3420 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: Organization.proto + +package eu.dnetlib.data.proto; + +public final class OrganizationProtos { + private OrganizationProtos() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + } + public interface OrganizationOrBuilder + extends com.google.protobuf.MessageOrBuilder { + + // optional .eu.dnetlib.data.proto.Organization.Metadata metadata = 2; + boolean hasMetadata(); + eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata getMetadata(); + eu.dnetlib.data.proto.OrganizationProtos.Organization.MetadataOrBuilder getMetadataOrBuilder(); + } + public static final class Organization extends + com.google.protobuf.GeneratedMessage + implements OrganizationOrBuilder { + // Use Organization.newBuilder() to construct. + private Organization(Builder builder) { + super(builder); + } + private Organization(boolean noInit) {} + + private static final Organization defaultInstance; + public static Organization getDefaultInstance() { + return defaultInstance; + } + + public Organization getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.OrganizationProtos.internal_static_eu_dnetlib_data_proto_Organization_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.OrganizationProtos.internal_static_eu_dnetlib_data_proto_Organization_fieldAccessorTable; + } + + public interface MetadataOrBuilder + extends com.google.protobuf.MessageOrBuilder { + + // optional .eu.dnetlib.data.proto.StringField legalshortname = 1; + boolean hasLegalshortname(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getLegalshortname(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getLegalshortnameOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField legalname = 2; + boolean hasLegalname(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getLegalname(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getLegalnameOrBuilder(); + + // repeated .eu.dnetlib.data.proto.StringField alternativeNames = 17; + java.util.List + getAlternativeNamesList(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getAlternativeNames(int index); + int getAlternativeNamesCount(); + java.util.List + getAlternativeNamesOrBuilderList(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getAlternativeNamesOrBuilder( + int index); + + // optional .eu.dnetlib.data.proto.StringField websiteurl = 3; + boolean hasWebsiteurl(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getWebsiteurl(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getWebsiteurlOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField logourl = 4; + boolean hasLogourl(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getLogourl(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getLogourlOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField eclegalbody = 5; + boolean hasEclegalbody(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getEclegalbody(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEclegalbodyOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField eclegalperson = 6; + boolean hasEclegalperson(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getEclegalperson(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEclegalpersonOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField ecnonprofit = 7; + boolean hasEcnonprofit(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcnonprofit(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcnonprofitOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField ecresearchorganization = 8; + boolean hasEcresearchorganization(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcresearchorganization(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcresearchorganizationOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField echighereducation = 9; + boolean hasEchighereducation(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getEchighereducation(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEchighereducationOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField ecinternationalorganizationeurinterests = 10; + boolean hasEcinternationalorganizationeurinterests(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcinternationalorganizationeurinterests(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcinternationalorganizationeurinterestsOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField ecinternationalorganization = 11; + boolean hasEcinternationalorganization(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcinternationalorganization(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcinternationalorganizationOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField ecenterprise = 12; + boolean hasEcenterprise(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcenterprise(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcenterpriseOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField ecsmevalidated = 13; + boolean hasEcsmevalidated(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcsmevalidated(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcsmevalidatedOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField ecnutscode = 14; + boolean hasEcnutscode(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcnutscode(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcnutscodeOrBuilder(); + + // optional .eu.dnetlib.data.proto.Qualifier country = 16; + boolean hasCountry(); + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getCountry(); + eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getCountryOrBuilder(); + } + public static final class Metadata extends + com.google.protobuf.GeneratedMessage + implements MetadataOrBuilder { + // Use Metadata.newBuilder() to construct. + private Metadata(Builder builder) { + super(builder); + } + private Metadata(boolean noInit) {} + + private static final Metadata defaultInstance; + public static Metadata getDefaultInstance() { + return defaultInstance; + } + + public Metadata getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.OrganizationProtos.internal_static_eu_dnetlib_data_proto_Organization_Metadata_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.OrganizationProtos.internal_static_eu_dnetlib_data_proto_Organization_Metadata_fieldAccessorTable; + } + + private int bitField0_; + // optional .eu.dnetlib.data.proto.StringField legalshortname = 1; + public static final int LEGALSHORTNAME_FIELD_NUMBER = 1; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField legalshortname_; + public boolean hasLegalshortname() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getLegalshortname() { + return legalshortname_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getLegalshortnameOrBuilder() { + return legalshortname_; + } + + // optional .eu.dnetlib.data.proto.StringField legalname = 2; + public static final int LEGALNAME_FIELD_NUMBER = 2; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField legalname_; + public boolean hasLegalname() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getLegalname() { + return legalname_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getLegalnameOrBuilder() { + return legalname_; + } + + // repeated .eu.dnetlib.data.proto.StringField alternativeNames = 17; + public static final int ALTERNATIVENAMES_FIELD_NUMBER = 17; + private java.util.List alternativeNames_; + public java.util.List getAlternativeNamesList() { + return alternativeNames_; + } + public java.util.List + getAlternativeNamesOrBuilderList() { + return alternativeNames_; + } + public int getAlternativeNamesCount() { + return alternativeNames_.size(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getAlternativeNames(int index) { + return alternativeNames_.get(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getAlternativeNamesOrBuilder( + int index) { + return alternativeNames_.get(index); + } + + // optional .eu.dnetlib.data.proto.StringField websiteurl = 3; + public static final int WEBSITEURL_FIELD_NUMBER = 3; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField websiteurl_; + public boolean hasWebsiteurl() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getWebsiteurl() { + return websiteurl_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getWebsiteurlOrBuilder() { + return websiteurl_; + } + + // optional .eu.dnetlib.data.proto.StringField logourl = 4; + public static final int LOGOURL_FIELD_NUMBER = 4; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField logourl_; + public boolean hasLogourl() { + return ((bitField0_ & 0x00000008) == 0x00000008); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getLogourl() { + return logourl_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getLogourlOrBuilder() { + return logourl_; + } + + // optional .eu.dnetlib.data.proto.StringField eclegalbody = 5; + public static final int ECLEGALBODY_FIELD_NUMBER = 5; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField eclegalbody_; + public boolean hasEclegalbody() { + return ((bitField0_ & 0x00000010) == 0x00000010); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEclegalbody() { + return eclegalbody_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEclegalbodyOrBuilder() { + return eclegalbody_; + } + + // optional .eu.dnetlib.data.proto.StringField eclegalperson = 6; + public static final int ECLEGALPERSON_FIELD_NUMBER = 6; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField eclegalperson_; + public boolean hasEclegalperson() { + return ((bitField0_ & 0x00000020) == 0x00000020); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEclegalperson() { + return eclegalperson_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEclegalpersonOrBuilder() { + return eclegalperson_; + } + + // optional .eu.dnetlib.data.proto.StringField ecnonprofit = 7; + public static final int ECNONPROFIT_FIELD_NUMBER = 7; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField ecnonprofit_; + public boolean hasEcnonprofit() { + return ((bitField0_ & 0x00000040) == 0x00000040); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcnonprofit() { + return ecnonprofit_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcnonprofitOrBuilder() { + return ecnonprofit_; + } + + // optional .eu.dnetlib.data.proto.StringField ecresearchorganization = 8; + public static final int ECRESEARCHORGANIZATION_FIELD_NUMBER = 8; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField ecresearchorganization_; + public boolean hasEcresearchorganization() { + return ((bitField0_ & 0x00000080) == 0x00000080); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcresearchorganization() { + return ecresearchorganization_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcresearchorganizationOrBuilder() { + return ecresearchorganization_; + } + + // optional .eu.dnetlib.data.proto.StringField echighereducation = 9; + public static final int ECHIGHEREDUCATION_FIELD_NUMBER = 9; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField echighereducation_; + public boolean hasEchighereducation() { + return ((bitField0_ & 0x00000100) == 0x00000100); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEchighereducation() { + return echighereducation_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEchighereducationOrBuilder() { + return echighereducation_; + } + + // optional .eu.dnetlib.data.proto.StringField ecinternationalorganizationeurinterests = 10; + public static final int ECINTERNATIONALORGANIZATIONEURINTERESTS_FIELD_NUMBER = 10; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField ecinternationalorganizationeurinterests_; + public boolean hasEcinternationalorganizationeurinterests() { + return ((bitField0_ & 0x00000200) == 0x00000200); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcinternationalorganizationeurinterests() { + return ecinternationalorganizationeurinterests_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcinternationalorganizationeurinterestsOrBuilder() { + return ecinternationalorganizationeurinterests_; + } + + // optional .eu.dnetlib.data.proto.StringField ecinternationalorganization = 11; + public static final int ECINTERNATIONALORGANIZATION_FIELD_NUMBER = 11; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField ecinternationalorganization_; + public boolean hasEcinternationalorganization() { + return ((bitField0_ & 0x00000400) == 0x00000400); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcinternationalorganization() { + return ecinternationalorganization_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcinternationalorganizationOrBuilder() { + return ecinternationalorganization_; + } + + // optional .eu.dnetlib.data.proto.StringField ecenterprise = 12; + public static final int ECENTERPRISE_FIELD_NUMBER = 12; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField ecenterprise_; + public boolean hasEcenterprise() { + return ((bitField0_ & 0x00000800) == 0x00000800); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcenterprise() { + return ecenterprise_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcenterpriseOrBuilder() { + return ecenterprise_; + } + + // optional .eu.dnetlib.data.proto.StringField ecsmevalidated = 13; + public static final int ECSMEVALIDATED_FIELD_NUMBER = 13; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField ecsmevalidated_; + public boolean hasEcsmevalidated() { + return ((bitField0_ & 0x00001000) == 0x00001000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcsmevalidated() { + return ecsmevalidated_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcsmevalidatedOrBuilder() { + return ecsmevalidated_; + } + + // optional .eu.dnetlib.data.proto.StringField ecnutscode = 14; + public static final int ECNUTSCODE_FIELD_NUMBER = 14; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField ecnutscode_; + public boolean hasEcnutscode() { + return ((bitField0_ & 0x00002000) == 0x00002000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcnutscode() { + return ecnutscode_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcnutscodeOrBuilder() { + return ecnutscode_; + } + + // optional .eu.dnetlib.data.proto.Qualifier country = 16; + public static final int COUNTRY_FIELD_NUMBER = 16; + private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier country_; + public boolean hasCountry() { + return ((bitField0_ & 0x00004000) == 0x00004000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getCountry() { + return country_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getCountryOrBuilder() { + return country_; + } + + private void initFields() { + legalshortname_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + legalname_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + alternativeNames_ = java.util.Collections.emptyList(); + websiteurl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + logourl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + eclegalbody_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + eclegalperson_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + ecnonprofit_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + ecresearchorganization_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + echighereducation_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + ecinternationalorganizationeurinterests_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + ecinternationalorganization_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + ecenterprise_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + ecsmevalidated_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + ecnutscode_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + country_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + if (hasLegalshortname()) { + if (!getLegalshortname().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasLegalname()) { + if (!getLegalname().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + for (int i = 0; i < getAlternativeNamesCount(); i++) { + if (!getAlternativeNames(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasWebsiteurl()) { + if (!getWebsiteurl().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasLogourl()) { + if (!getLogourl().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasEclegalbody()) { + if (!getEclegalbody().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasEclegalperson()) { + if (!getEclegalperson().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasEcnonprofit()) { + if (!getEcnonprofit().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasEcresearchorganization()) { + if (!getEcresearchorganization().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasEchighereducation()) { + if (!getEchighereducation().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasEcinternationalorganizationeurinterests()) { + if (!getEcinternationalorganizationeurinterests().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasEcinternationalorganization()) { + if (!getEcinternationalorganization().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasEcenterprise()) { + if (!getEcenterprise().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasEcsmevalidated()) { + if (!getEcsmevalidated().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasEcnutscode()) { + if (!getEcnutscode().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasCountry()) { + if (!getCountry().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeMessage(1, legalshortname_); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + output.writeMessage(2, legalname_); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + output.writeMessage(3, websiteurl_); + } + if (((bitField0_ & 0x00000008) == 0x00000008)) { + output.writeMessage(4, logourl_); + } + if (((bitField0_ & 0x00000010) == 0x00000010)) { + output.writeMessage(5, eclegalbody_); + } + if (((bitField0_ & 0x00000020) == 0x00000020)) { + output.writeMessage(6, eclegalperson_); + } + if (((bitField0_ & 0x00000040) == 0x00000040)) { + output.writeMessage(7, ecnonprofit_); + } + if (((bitField0_ & 0x00000080) == 0x00000080)) { + output.writeMessage(8, ecresearchorganization_); + } + if (((bitField0_ & 0x00000100) == 0x00000100)) { + output.writeMessage(9, echighereducation_); + } + if (((bitField0_ & 0x00000200) == 0x00000200)) { + output.writeMessage(10, ecinternationalorganizationeurinterests_); + } + if (((bitField0_ & 0x00000400) == 0x00000400)) { + output.writeMessage(11, ecinternationalorganization_); + } + if (((bitField0_ & 0x00000800) == 0x00000800)) { + output.writeMessage(12, ecenterprise_); + } + if (((bitField0_ & 0x00001000) == 0x00001000)) { + output.writeMessage(13, ecsmevalidated_); + } + if (((bitField0_ & 0x00002000) == 0x00002000)) { + output.writeMessage(14, ecnutscode_); + } + if (((bitField0_ & 0x00004000) == 0x00004000)) { + output.writeMessage(16, country_); + } + for (int i = 0; i < alternativeNames_.size(); i++) { + output.writeMessage(17, alternativeNames_.get(i)); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, legalshortname_); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(2, legalname_); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(3, websiteurl_); + } + if (((bitField0_ & 0x00000008) == 0x00000008)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(4, logourl_); + } + if (((bitField0_ & 0x00000010) == 0x00000010)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(5, eclegalbody_); + } + if (((bitField0_ & 0x00000020) == 0x00000020)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(6, eclegalperson_); + } + if (((bitField0_ & 0x00000040) == 0x00000040)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(7, ecnonprofit_); + } + if (((bitField0_ & 0x00000080) == 0x00000080)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(8, ecresearchorganization_); + } + if (((bitField0_ & 0x00000100) == 0x00000100)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(9, echighereducation_); + } + if (((bitField0_ & 0x00000200) == 0x00000200)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(10, ecinternationalorganizationeurinterests_); + } + if (((bitField0_ & 0x00000400) == 0x00000400)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(11, ecinternationalorganization_); + } + if (((bitField0_ & 0x00000800) == 0x00000800)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(12, ecenterprise_); + } + if (((bitField0_ & 0x00001000) == 0x00001000)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(13, ecsmevalidated_); + } + if (((bitField0_ & 0x00002000) == 0x00002000)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(14, ecnutscode_); + } + if (((bitField0_ & 0x00004000) == 0x00004000)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(16, country_); + } + for (int i = 0; i < alternativeNames_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(17, alternativeNames_.get(i)); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder + implements eu.dnetlib.data.proto.OrganizationProtos.Organization.MetadataOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.OrganizationProtos.internal_static_eu_dnetlib_data_proto_Organization_Metadata_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.OrganizationProtos.internal_static_eu_dnetlib_data_proto_Organization_Metadata_fieldAccessorTable; + } + + // Construct using eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getLegalshortnameFieldBuilder(); + getLegalnameFieldBuilder(); + getAlternativeNamesFieldBuilder(); + getWebsiteurlFieldBuilder(); + getLogourlFieldBuilder(); + getEclegalbodyFieldBuilder(); + getEclegalpersonFieldBuilder(); + getEcnonprofitFieldBuilder(); + getEcresearchorganizationFieldBuilder(); + getEchighereducationFieldBuilder(); + getEcinternationalorganizationeurinterestsFieldBuilder(); + getEcinternationalorganizationFieldBuilder(); + getEcenterpriseFieldBuilder(); + getEcsmevalidatedFieldBuilder(); + getEcnutscodeFieldBuilder(); + getCountryFieldBuilder(); + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + if (legalshortnameBuilder_ == null) { + legalshortname_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + legalshortnameBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + if (legalnameBuilder_ == null) { + legalname_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + legalnameBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000002); + if (alternativeNamesBuilder_ == null) { + alternativeNames_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000004); + } else { + alternativeNamesBuilder_.clear(); + } + if (websiteurlBuilder_ == null) { + websiteurl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + websiteurlBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000008); + if (logourlBuilder_ == null) { + logourl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + logourlBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000010); + if (eclegalbodyBuilder_ == null) { + eclegalbody_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + eclegalbodyBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000020); + if (eclegalpersonBuilder_ == null) { + eclegalperson_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + eclegalpersonBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000040); + if (ecnonprofitBuilder_ == null) { + ecnonprofit_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + ecnonprofitBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000080); + if (ecresearchorganizationBuilder_ == null) { + ecresearchorganization_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + ecresearchorganizationBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000100); + if (echighereducationBuilder_ == null) { + echighereducation_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + echighereducationBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000200); + if (ecinternationalorganizationeurinterestsBuilder_ == null) { + ecinternationalorganizationeurinterests_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + ecinternationalorganizationeurinterestsBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000400); + if (ecinternationalorganizationBuilder_ == null) { + ecinternationalorganization_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + ecinternationalorganizationBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000800); + if (ecenterpriseBuilder_ == null) { + ecenterprise_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + ecenterpriseBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00001000); + if (ecsmevalidatedBuilder_ == null) { + ecsmevalidated_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + ecsmevalidatedBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00002000); + if (ecnutscodeBuilder_ == null) { + ecnutscode_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + ecnutscodeBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00004000); + if (countryBuilder_ == null) { + country_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + } else { + countryBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00008000); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata.getDescriptor(); + } + + public eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata getDefaultInstanceForType() { + return eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata.getDefaultInstance(); + } + + public eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata build() { + eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + private eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return result; + } + + public eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata buildPartial() { + eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata result = new eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + if (legalshortnameBuilder_ == null) { + result.legalshortname_ = legalshortname_; + } else { + result.legalshortname_ = legalshortnameBuilder_.build(); + } + if (((from_bitField0_ & 0x00000002) == 0x00000002)) { + to_bitField0_ |= 0x00000002; + } + if (legalnameBuilder_ == null) { + result.legalname_ = legalname_; + } else { + result.legalname_ = legalnameBuilder_.build(); + } + if (alternativeNamesBuilder_ == null) { + if (((bitField0_ & 0x00000004) == 0x00000004)) { + alternativeNames_ = java.util.Collections.unmodifiableList(alternativeNames_); + bitField0_ = (bitField0_ & ~0x00000004); + } + result.alternativeNames_ = alternativeNames_; + } else { + result.alternativeNames_ = alternativeNamesBuilder_.build(); + } + if (((from_bitField0_ & 0x00000008) == 0x00000008)) { + to_bitField0_ |= 0x00000004; + } + if (websiteurlBuilder_ == null) { + result.websiteurl_ = websiteurl_; + } else { + result.websiteurl_ = websiteurlBuilder_.build(); + } + if (((from_bitField0_ & 0x00000010) == 0x00000010)) { + to_bitField0_ |= 0x00000008; + } + if (logourlBuilder_ == null) { + result.logourl_ = logourl_; + } else { + result.logourl_ = logourlBuilder_.build(); + } + if (((from_bitField0_ & 0x00000020) == 0x00000020)) { + to_bitField0_ |= 0x00000010; + } + if (eclegalbodyBuilder_ == null) { + result.eclegalbody_ = eclegalbody_; + } else { + result.eclegalbody_ = eclegalbodyBuilder_.build(); + } + if (((from_bitField0_ & 0x00000040) == 0x00000040)) { + to_bitField0_ |= 0x00000020; + } + if (eclegalpersonBuilder_ == null) { + result.eclegalperson_ = eclegalperson_; + } else { + result.eclegalperson_ = eclegalpersonBuilder_.build(); + } + if (((from_bitField0_ & 0x00000080) == 0x00000080)) { + to_bitField0_ |= 0x00000040; + } + if (ecnonprofitBuilder_ == null) { + result.ecnonprofit_ = ecnonprofit_; + } else { + result.ecnonprofit_ = ecnonprofitBuilder_.build(); + } + if (((from_bitField0_ & 0x00000100) == 0x00000100)) { + to_bitField0_ |= 0x00000080; + } + if (ecresearchorganizationBuilder_ == null) { + result.ecresearchorganization_ = ecresearchorganization_; + } else { + result.ecresearchorganization_ = ecresearchorganizationBuilder_.build(); + } + if (((from_bitField0_ & 0x00000200) == 0x00000200)) { + to_bitField0_ |= 0x00000100; + } + if (echighereducationBuilder_ == null) { + result.echighereducation_ = echighereducation_; + } else { + result.echighereducation_ = echighereducationBuilder_.build(); + } + if (((from_bitField0_ & 0x00000400) == 0x00000400)) { + to_bitField0_ |= 0x00000200; + } + if (ecinternationalorganizationeurinterestsBuilder_ == null) { + result.ecinternationalorganizationeurinterests_ = ecinternationalorganizationeurinterests_; + } else { + result.ecinternationalorganizationeurinterests_ = ecinternationalorganizationeurinterestsBuilder_.build(); + } + if (((from_bitField0_ & 0x00000800) == 0x00000800)) { + to_bitField0_ |= 0x00000400; + } + if (ecinternationalorganizationBuilder_ == null) { + result.ecinternationalorganization_ = ecinternationalorganization_; + } else { + result.ecinternationalorganization_ = ecinternationalorganizationBuilder_.build(); + } + if (((from_bitField0_ & 0x00001000) == 0x00001000)) { + to_bitField0_ |= 0x00000800; + } + if (ecenterpriseBuilder_ == null) { + result.ecenterprise_ = ecenterprise_; + } else { + result.ecenterprise_ = ecenterpriseBuilder_.build(); + } + if (((from_bitField0_ & 0x00002000) == 0x00002000)) { + to_bitField0_ |= 0x00001000; + } + if (ecsmevalidatedBuilder_ == null) { + result.ecsmevalidated_ = ecsmevalidated_; + } else { + result.ecsmevalidated_ = ecsmevalidatedBuilder_.build(); + } + if (((from_bitField0_ & 0x00004000) == 0x00004000)) { + to_bitField0_ |= 0x00002000; + } + if (ecnutscodeBuilder_ == null) { + result.ecnutscode_ = ecnutscode_; + } else { + result.ecnutscode_ = ecnutscodeBuilder_.build(); + } + if (((from_bitField0_ & 0x00008000) == 0x00008000)) { + to_bitField0_ |= 0x00004000; + } + if (countryBuilder_ == null) { + result.country_ = country_; + } else { + result.country_ = countryBuilder_.build(); + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata) { + return mergeFrom((eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata other) { + if (other == eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata.getDefaultInstance()) return this; + if (other.hasLegalshortname()) { + mergeLegalshortname(other.getLegalshortname()); + } + if (other.hasLegalname()) { + mergeLegalname(other.getLegalname()); + } + if (alternativeNamesBuilder_ == null) { + if (!other.alternativeNames_.isEmpty()) { + if (alternativeNames_.isEmpty()) { + alternativeNames_ = other.alternativeNames_; + bitField0_ = (bitField0_ & ~0x00000004); + } else { + ensureAlternativeNamesIsMutable(); + alternativeNames_.addAll(other.alternativeNames_); + } + onChanged(); + } + } else { + if (!other.alternativeNames_.isEmpty()) { + if (alternativeNamesBuilder_.isEmpty()) { + alternativeNamesBuilder_.dispose(); + alternativeNamesBuilder_ = null; + alternativeNames_ = other.alternativeNames_; + bitField0_ = (bitField0_ & ~0x00000004); + alternativeNamesBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + getAlternativeNamesFieldBuilder() : null; + } else { + alternativeNamesBuilder_.addAllMessages(other.alternativeNames_); + } + } + } + if (other.hasWebsiteurl()) { + mergeWebsiteurl(other.getWebsiteurl()); + } + if (other.hasLogourl()) { + mergeLogourl(other.getLogourl()); + } + if (other.hasEclegalbody()) { + mergeEclegalbody(other.getEclegalbody()); + } + if (other.hasEclegalperson()) { + mergeEclegalperson(other.getEclegalperson()); + } + if (other.hasEcnonprofit()) { + mergeEcnonprofit(other.getEcnonprofit()); + } + if (other.hasEcresearchorganization()) { + mergeEcresearchorganization(other.getEcresearchorganization()); + } + if (other.hasEchighereducation()) { + mergeEchighereducation(other.getEchighereducation()); + } + if (other.hasEcinternationalorganizationeurinterests()) { + mergeEcinternationalorganizationeurinterests(other.getEcinternationalorganizationeurinterests()); + } + if (other.hasEcinternationalorganization()) { + mergeEcinternationalorganization(other.getEcinternationalorganization()); + } + if (other.hasEcenterprise()) { + mergeEcenterprise(other.getEcenterprise()); + } + if (other.hasEcsmevalidated()) { + mergeEcsmevalidated(other.getEcsmevalidated()); + } + if (other.hasEcnutscode()) { + mergeEcnutscode(other.getEcnutscode()); + } + if (other.hasCountry()) { + mergeCountry(other.getCountry()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + if (hasLegalshortname()) { + if (!getLegalshortname().isInitialized()) { + + return false; + } + } + if (hasLegalname()) { + if (!getLegalname().isInitialized()) { + + return false; + } + } + for (int i = 0; i < getAlternativeNamesCount(); i++) { + if (!getAlternativeNames(i).isInitialized()) { + + return false; + } + } + if (hasWebsiteurl()) { + if (!getWebsiteurl().isInitialized()) { + + return false; + } + } + if (hasLogourl()) { + if (!getLogourl().isInitialized()) { + + return false; + } + } + if (hasEclegalbody()) { + if (!getEclegalbody().isInitialized()) { + + return false; + } + } + if (hasEclegalperson()) { + if (!getEclegalperson().isInitialized()) { + + return false; + } + } + if (hasEcnonprofit()) { + if (!getEcnonprofit().isInitialized()) { + + return false; + } + } + if (hasEcresearchorganization()) { + if (!getEcresearchorganization().isInitialized()) { + + return false; + } + } + if (hasEchighereducation()) { + if (!getEchighereducation().isInitialized()) { + + return false; + } + } + if (hasEcinternationalorganizationeurinterests()) { + if (!getEcinternationalorganizationeurinterests().isInitialized()) { + + return false; + } + } + if (hasEcinternationalorganization()) { + if (!getEcinternationalorganization().isInitialized()) { + + return false; + } + } + if (hasEcenterprise()) { + if (!getEcenterprise().isInitialized()) { + + return false; + } + } + if (hasEcsmevalidated()) { + if (!getEcsmevalidated().isInitialized()) { + + return false; + } + } + if (hasEcnutscode()) { + if (!getEcnutscode().isInitialized()) { + + return false; + } + } + if (hasCountry()) { + if (!getCountry().isInitialized()) { + + return false; + } + } + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + } + break; + } + case 10: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasLegalshortname()) { + subBuilder.mergeFrom(getLegalshortname()); + } + input.readMessage(subBuilder, extensionRegistry); + setLegalshortname(subBuilder.buildPartial()); + break; + } + case 18: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasLegalname()) { + subBuilder.mergeFrom(getLegalname()); + } + input.readMessage(subBuilder, extensionRegistry); + setLegalname(subBuilder.buildPartial()); + break; + } + case 26: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasWebsiteurl()) { + subBuilder.mergeFrom(getWebsiteurl()); + } + input.readMessage(subBuilder, extensionRegistry); + setWebsiteurl(subBuilder.buildPartial()); + break; + } + case 34: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasLogourl()) { + subBuilder.mergeFrom(getLogourl()); + } + input.readMessage(subBuilder, extensionRegistry); + setLogourl(subBuilder.buildPartial()); + break; + } + case 42: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasEclegalbody()) { + subBuilder.mergeFrom(getEclegalbody()); + } + input.readMessage(subBuilder, extensionRegistry); + setEclegalbody(subBuilder.buildPartial()); + break; + } + case 50: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasEclegalperson()) { + subBuilder.mergeFrom(getEclegalperson()); + } + input.readMessage(subBuilder, extensionRegistry); + setEclegalperson(subBuilder.buildPartial()); + break; + } + case 58: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasEcnonprofit()) { + subBuilder.mergeFrom(getEcnonprofit()); + } + input.readMessage(subBuilder, extensionRegistry); + setEcnonprofit(subBuilder.buildPartial()); + break; + } + case 66: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasEcresearchorganization()) { + subBuilder.mergeFrom(getEcresearchorganization()); + } + input.readMessage(subBuilder, extensionRegistry); + setEcresearchorganization(subBuilder.buildPartial()); + break; + } + case 74: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasEchighereducation()) { + subBuilder.mergeFrom(getEchighereducation()); + } + input.readMessage(subBuilder, extensionRegistry); + setEchighereducation(subBuilder.buildPartial()); + break; + } + case 82: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasEcinternationalorganizationeurinterests()) { + subBuilder.mergeFrom(getEcinternationalorganizationeurinterests()); + } + input.readMessage(subBuilder, extensionRegistry); + setEcinternationalorganizationeurinterests(subBuilder.buildPartial()); + break; + } + case 90: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasEcinternationalorganization()) { + subBuilder.mergeFrom(getEcinternationalorganization()); + } + input.readMessage(subBuilder, extensionRegistry); + setEcinternationalorganization(subBuilder.buildPartial()); + break; + } + case 98: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasEcenterprise()) { + subBuilder.mergeFrom(getEcenterprise()); + } + input.readMessage(subBuilder, extensionRegistry); + setEcenterprise(subBuilder.buildPartial()); + break; + } + case 106: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasEcsmevalidated()) { + subBuilder.mergeFrom(getEcsmevalidated()); + } + input.readMessage(subBuilder, extensionRegistry); + setEcsmevalidated(subBuilder.buildPartial()); + break; + } + case 114: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasEcnutscode()) { + subBuilder.mergeFrom(getEcnutscode()); + } + input.readMessage(subBuilder, extensionRegistry); + setEcnutscode(subBuilder.buildPartial()); + break; + } + case 130: { + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(); + if (hasCountry()) { + subBuilder.mergeFrom(getCountry()); + } + input.readMessage(subBuilder, extensionRegistry); + setCountry(subBuilder.buildPartial()); + break; + } + case 138: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addAlternativeNames(subBuilder.buildPartial()); + break; + } + } + } + } + + private int bitField0_; + + // optional .eu.dnetlib.data.proto.StringField legalshortname = 1; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField legalshortname_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> legalshortnameBuilder_; + public boolean hasLegalshortname() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getLegalshortname() { + if (legalshortnameBuilder_ == null) { + return legalshortname_; + } else { + return legalshortnameBuilder_.getMessage(); + } + } + public Builder setLegalshortname(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (legalshortnameBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + legalshortname_ = value; + onChanged(); + } else { + legalshortnameBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder setLegalshortname( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (legalshortnameBuilder_ == null) { + legalshortname_ = builderForValue.build(); + onChanged(); + } else { + legalshortnameBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder mergeLegalshortname(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (legalshortnameBuilder_ == null) { + if (((bitField0_ & 0x00000001) == 0x00000001) && + legalshortname_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + legalshortname_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(legalshortname_).mergeFrom(value).buildPartial(); + } else { + legalshortname_ = value; + } + onChanged(); + } else { + legalshortnameBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder clearLegalshortname() { + if (legalshortnameBuilder_ == null) { + legalshortname_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + legalshortnameBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getLegalshortnameBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return getLegalshortnameFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getLegalshortnameOrBuilder() { + if (legalshortnameBuilder_ != null) { + return legalshortnameBuilder_.getMessageOrBuilder(); + } else { + return legalshortname_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getLegalshortnameFieldBuilder() { + if (legalshortnameBuilder_ == null) { + legalshortnameBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + legalshortname_, + getParentForChildren(), + isClean()); + legalshortname_ = null; + } + return legalshortnameBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField legalname = 2; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField legalname_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> legalnameBuilder_; + public boolean hasLegalname() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getLegalname() { + if (legalnameBuilder_ == null) { + return legalname_; + } else { + return legalnameBuilder_.getMessage(); + } + } + public Builder setLegalname(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (legalnameBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + legalname_ = value; + onChanged(); + } else { + legalnameBuilder_.setMessage(value); + } + bitField0_ |= 0x00000002; + return this; + } + public Builder setLegalname( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (legalnameBuilder_ == null) { + legalname_ = builderForValue.build(); + onChanged(); + } else { + legalnameBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000002; + return this; + } + public Builder mergeLegalname(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (legalnameBuilder_ == null) { + if (((bitField0_ & 0x00000002) == 0x00000002) && + legalname_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + legalname_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(legalname_).mergeFrom(value).buildPartial(); + } else { + legalname_ = value; + } + onChanged(); + } else { + legalnameBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000002; + return this; + } + public Builder clearLegalname() { + if (legalnameBuilder_ == null) { + legalname_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + legalnameBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000002); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getLegalnameBuilder() { + bitField0_ |= 0x00000002; + onChanged(); + return getLegalnameFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getLegalnameOrBuilder() { + if (legalnameBuilder_ != null) { + return legalnameBuilder_.getMessageOrBuilder(); + } else { + return legalname_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getLegalnameFieldBuilder() { + if (legalnameBuilder_ == null) { + legalnameBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + legalname_, + getParentForChildren(), + isClean()); + legalname_ = null; + } + return legalnameBuilder_; + } + + // repeated .eu.dnetlib.data.proto.StringField alternativeNames = 17; + private java.util.List alternativeNames_ = + java.util.Collections.emptyList(); + private void ensureAlternativeNamesIsMutable() { + if (!((bitField0_ & 0x00000004) == 0x00000004)) { + alternativeNames_ = new java.util.ArrayList(alternativeNames_); + bitField0_ |= 0x00000004; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> alternativeNamesBuilder_; + + public java.util.List getAlternativeNamesList() { + if (alternativeNamesBuilder_ == null) { + return java.util.Collections.unmodifiableList(alternativeNames_); + } else { + return alternativeNamesBuilder_.getMessageList(); + } + } + public int getAlternativeNamesCount() { + if (alternativeNamesBuilder_ == null) { + return alternativeNames_.size(); + } else { + return alternativeNamesBuilder_.getCount(); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getAlternativeNames(int index) { + if (alternativeNamesBuilder_ == null) { + return alternativeNames_.get(index); + } else { + return alternativeNamesBuilder_.getMessage(index); + } + } + public Builder setAlternativeNames( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (alternativeNamesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureAlternativeNamesIsMutable(); + alternativeNames_.set(index, value); + onChanged(); + } else { + alternativeNamesBuilder_.setMessage(index, value); + } + return this; + } + public Builder setAlternativeNames( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (alternativeNamesBuilder_ == null) { + ensureAlternativeNamesIsMutable(); + alternativeNames_.set(index, builderForValue.build()); + onChanged(); + } else { + alternativeNamesBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + public Builder addAlternativeNames(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (alternativeNamesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureAlternativeNamesIsMutable(); + alternativeNames_.add(value); + onChanged(); + } else { + alternativeNamesBuilder_.addMessage(value); + } + return this; + } + public Builder addAlternativeNames( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (alternativeNamesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureAlternativeNamesIsMutable(); + alternativeNames_.add(index, value); + onChanged(); + } else { + alternativeNamesBuilder_.addMessage(index, value); + } + return this; + } + public Builder addAlternativeNames( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (alternativeNamesBuilder_ == null) { + ensureAlternativeNamesIsMutable(); + alternativeNames_.add(builderForValue.build()); + onChanged(); + } else { + alternativeNamesBuilder_.addMessage(builderForValue.build()); + } + return this; + } + public Builder addAlternativeNames( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (alternativeNamesBuilder_ == null) { + ensureAlternativeNamesIsMutable(); + alternativeNames_.add(index, builderForValue.build()); + onChanged(); + } else { + alternativeNamesBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + public Builder addAllAlternativeNames( + java.lang.Iterable values) { + if (alternativeNamesBuilder_ == null) { + ensureAlternativeNamesIsMutable(); + super.addAll(values, alternativeNames_); + onChanged(); + } else { + alternativeNamesBuilder_.addAllMessages(values); + } + return this; + } + public Builder clearAlternativeNames() { + if (alternativeNamesBuilder_ == null) { + alternativeNames_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000004); + onChanged(); + } else { + alternativeNamesBuilder_.clear(); + } + return this; + } + public Builder removeAlternativeNames(int index) { + if (alternativeNamesBuilder_ == null) { + ensureAlternativeNamesIsMutable(); + alternativeNames_.remove(index); + onChanged(); + } else { + alternativeNamesBuilder_.remove(index); + } + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getAlternativeNamesBuilder( + int index) { + return getAlternativeNamesFieldBuilder().getBuilder(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getAlternativeNamesOrBuilder( + int index) { + if (alternativeNamesBuilder_ == null) { + return alternativeNames_.get(index); } else { + return alternativeNamesBuilder_.getMessageOrBuilder(index); + } + } + public java.util.List + getAlternativeNamesOrBuilderList() { + if (alternativeNamesBuilder_ != null) { + return alternativeNamesBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(alternativeNames_); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addAlternativeNamesBuilder() { + return getAlternativeNamesFieldBuilder().addBuilder( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addAlternativeNamesBuilder( + int index) { + return getAlternativeNamesFieldBuilder().addBuilder( + index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); + } + public java.util.List + getAlternativeNamesBuilderList() { + return getAlternativeNamesFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getAlternativeNamesFieldBuilder() { + if (alternativeNamesBuilder_ == null) { + alternativeNamesBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + alternativeNames_, + ((bitField0_ & 0x00000004) == 0x00000004), + getParentForChildren(), + isClean()); + alternativeNames_ = null; + } + return alternativeNamesBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField websiteurl = 3; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField websiteurl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> websiteurlBuilder_; + public boolean hasWebsiteurl() { + return ((bitField0_ & 0x00000008) == 0x00000008); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getWebsiteurl() { + if (websiteurlBuilder_ == null) { + return websiteurl_; + } else { + return websiteurlBuilder_.getMessage(); + } + } + public Builder setWebsiteurl(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (websiteurlBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + websiteurl_ = value; + onChanged(); + } else { + websiteurlBuilder_.setMessage(value); + } + bitField0_ |= 0x00000008; + return this; + } + public Builder setWebsiteurl( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (websiteurlBuilder_ == null) { + websiteurl_ = builderForValue.build(); + onChanged(); + } else { + websiteurlBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000008; + return this; + } + public Builder mergeWebsiteurl(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (websiteurlBuilder_ == null) { + if (((bitField0_ & 0x00000008) == 0x00000008) && + websiteurl_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + websiteurl_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(websiteurl_).mergeFrom(value).buildPartial(); + } else { + websiteurl_ = value; + } + onChanged(); + } else { + websiteurlBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000008; + return this; + } + public Builder clearWebsiteurl() { + if (websiteurlBuilder_ == null) { + websiteurl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + websiteurlBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000008); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getWebsiteurlBuilder() { + bitField0_ |= 0x00000008; + onChanged(); + return getWebsiteurlFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getWebsiteurlOrBuilder() { + if (websiteurlBuilder_ != null) { + return websiteurlBuilder_.getMessageOrBuilder(); + } else { + return websiteurl_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getWebsiteurlFieldBuilder() { + if (websiteurlBuilder_ == null) { + websiteurlBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + websiteurl_, + getParentForChildren(), + isClean()); + websiteurl_ = null; + } + return websiteurlBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField logourl = 4; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField logourl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> logourlBuilder_; + public boolean hasLogourl() { + return ((bitField0_ & 0x00000010) == 0x00000010); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getLogourl() { + if (logourlBuilder_ == null) { + return logourl_; + } else { + return logourlBuilder_.getMessage(); + } + } + public Builder setLogourl(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (logourlBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + logourl_ = value; + onChanged(); + } else { + logourlBuilder_.setMessage(value); + } + bitField0_ |= 0x00000010; + return this; + } + public Builder setLogourl( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (logourlBuilder_ == null) { + logourl_ = builderForValue.build(); + onChanged(); + } else { + logourlBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000010; + return this; + } + public Builder mergeLogourl(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (logourlBuilder_ == null) { + if (((bitField0_ & 0x00000010) == 0x00000010) && + logourl_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + logourl_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(logourl_).mergeFrom(value).buildPartial(); + } else { + logourl_ = value; + } + onChanged(); + } else { + logourlBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000010; + return this; + } + public Builder clearLogourl() { + if (logourlBuilder_ == null) { + logourl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + logourlBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000010); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getLogourlBuilder() { + bitField0_ |= 0x00000010; + onChanged(); + return getLogourlFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getLogourlOrBuilder() { + if (logourlBuilder_ != null) { + return logourlBuilder_.getMessageOrBuilder(); + } else { + return logourl_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getLogourlFieldBuilder() { + if (logourlBuilder_ == null) { + logourlBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + logourl_, + getParentForChildren(), + isClean()); + logourl_ = null; + } + return logourlBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField eclegalbody = 5; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField eclegalbody_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> eclegalbodyBuilder_; + public boolean hasEclegalbody() { + return ((bitField0_ & 0x00000020) == 0x00000020); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEclegalbody() { + if (eclegalbodyBuilder_ == null) { + return eclegalbody_; + } else { + return eclegalbodyBuilder_.getMessage(); + } + } + public Builder setEclegalbody(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (eclegalbodyBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + eclegalbody_ = value; + onChanged(); + } else { + eclegalbodyBuilder_.setMessage(value); + } + bitField0_ |= 0x00000020; + return this; + } + public Builder setEclegalbody( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (eclegalbodyBuilder_ == null) { + eclegalbody_ = builderForValue.build(); + onChanged(); + } else { + eclegalbodyBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000020; + return this; + } + public Builder mergeEclegalbody(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (eclegalbodyBuilder_ == null) { + if (((bitField0_ & 0x00000020) == 0x00000020) && + eclegalbody_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + eclegalbody_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(eclegalbody_).mergeFrom(value).buildPartial(); + } else { + eclegalbody_ = value; + } + onChanged(); + } else { + eclegalbodyBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000020; + return this; + } + public Builder clearEclegalbody() { + if (eclegalbodyBuilder_ == null) { + eclegalbody_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + eclegalbodyBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000020); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getEclegalbodyBuilder() { + bitField0_ |= 0x00000020; + onChanged(); + return getEclegalbodyFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEclegalbodyOrBuilder() { + if (eclegalbodyBuilder_ != null) { + return eclegalbodyBuilder_.getMessageOrBuilder(); + } else { + return eclegalbody_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getEclegalbodyFieldBuilder() { + if (eclegalbodyBuilder_ == null) { + eclegalbodyBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + eclegalbody_, + getParentForChildren(), + isClean()); + eclegalbody_ = null; + } + return eclegalbodyBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField eclegalperson = 6; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField eclegalperson_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> eclegalpersonBuilder_; + public boolean hasEclegalperson() { + return ((bitField0_ & 0x00000040) == 0x00000040); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEclegalperson() { + if (eclegalpersonBuilder_ == null) { + return eclegalperson_; + } else { + return eclegalpersonBuilder_.getMessage(); + } + } + public Builder setEclegalperson(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (eclegalpersonBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + eclegalperson_ = value; + onChanged(); + } else { + eclegalpersonBuilder_.setMessage(value); + } + bitField0_ |= 0x00000040; + return this; + } + public Builder setEclegalperson( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (eclegalpersonBuilder_ == null) { + eclegalperson_ = builderForValue.build(); + onChanged(); + } else { + eclegalpersonBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000040; + return this; + } + public Builder mergeEclegalperson(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (eclegalpersonBuilder_ == null) { + if (((bitField0_ & 0x00000040) == 0x00000040) && + eclegalperson_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + eclegalperson_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(eclegalperson_).mergeFrom(value).buildPartial(); + } else { + eclegalperson_ = value; + } + onChanged(); + } else { + eclegalpersonBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000040; + return this; + } + public Builder clearEclegalperson() { + if (eclegalpersonBuilder_ == null) { + eclegalperson_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + eclegalpersonBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000040); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getEclegalpersonBuilder() { + bitField0_ |= 0x00000040; + onChanged(); + return getEclegalpersonFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEclegalpersonOrBuilder() { + if (eclegalpersonBuilder_ != null) { + return eclegalpersonBuilder_.getMessageOrBuilder(); + } else { + return eclegalperson_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getEclegalpersonFieldBuilder() { + if (eclegalpersonBuilder_ == null) { + eclegalpersonBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + eclegalperson_, + getParentForChildren(), + isClean()); + eclegalperson_ = null; + } + return eclegalpersonBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField ecnonprofit = 7; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField ecnonprofit_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> ecnonprofitBuilder_; + public boolean hasEcnonprofit() { + return ((bitField0_ & 0x00000080) == 0x00000080); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcnonprofit() { + if (ecnonprofitBuilder_ == null) { + return ecnonprofit_; + } else { + return ecnonprofitBuilder_.getMessage(); + } + } + public Builder setEcnonprofit(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (ecnonprofitBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ecnonprofit_ = value; + onChanged(); + } else { + ecnonprofitBuilder_.setMessage(value); + } + bitField0_ |= 0x00000080; + return this; + } + public Builder setEcnonprofit( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (ecnonprofitBuilder_ == null) { + ecnonprofit_ = builderForValue.build(); + onChanged(); + } else { + ecnonprofitBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000080; + return this; + } + public Builder mergeEcnonprofit(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (ecnonprofitBuilder_ == null) { + if (((bitField0_ & 0x00000080) == 0x00000080) && + ecnonprofit_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + ecnonprofit_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(ecnonprofit_).mergeFrom(value).buildPartial(); + } else { + ecnonprofit_ = value; + } + onChanged(); + } else { + ecnonprofitBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000080; + return this; + } + public Builder clearEcnonprofit() { + if (ecnonprofitBuilder_ == null) { + ecnonprofit_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + ecnonprofitBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000080); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getEcnonprofitBuilder() { + bitField0_ |= 0x00000080; + onChanged(); + return getEcnonprofitFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcnonprofitOrBuilder() { + if (ecnonprofitBuilder_ != null) { + return ecnonprofitBuilder_.getMessageOrBuilder(); + } else { + return ecnonprofit_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getEcnonprofitFieldBuilder() { + if (ecnonprofitBuilder_ == null) { + ecnonprofitBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + ecnonprofit_, + getParentForChildren(), + isClean()); + ecnonprofit_ = null; + } + return ecnonprofitBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField ecresearchorganization = 8; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField ecresearchorganization_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> ecresearchorganizationBuilder_; + public boolean hasEcresearchorganization() { + return ((bitField0_ & 0x00000100) == 0x00000100); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcresearchorganization() { + if (ecresearchorganizationBuilder_ == null) { + return ecresearchorganization_; + } else { + return ecresearchorganizationBuilder_.getMessage(); + } + } + public Builder setEcresearchorganization(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (ecresearchorganizationBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ecresearchorganization_ = value; + onChanged(); + } else { + ecresearchorganizationBuilder_.setMessage(value); + } + bitField0_ |= 0x00000100; + return this; + } + public Builder setEcresearchorganization( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (ecresearchorganizationBuilder_ == null) { + ecresearchorganization_ = builderForValue.build(); + onChanged(); + } else { + ecresearchorganizationBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000100; + return this; + } + public Builder mergeEcresearchorganization(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (ecresearchorganizationBuilder_ == null) { + if (((bitField0_ & 0x00000100) == 0x00000100) && + ecresearchorganization_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + ecresearchorganization_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(ecresearchorganization_).mergeFrom(value).buildPartial(); + } else { + ecresearchorganization_ = value; + } + onChanged(); + } else { + ecresearchorganizationBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000100; + return this; + } + public Builder clearEcresearchorganization() { + if (ecresearchorganizationBuilder_ == null) { + ecresearchorganization_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + ecresearchorganizationBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000100); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getEcresearchorganizationBuilder() { + bitField0_ |= 0x00000100; + onChanged(); + return getEcresearchorganizationFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcresearchorganizationOrBuilder() { + if (ecresearchorganizationBuilder_ != null) { + return ecresearchorganizationBuilder_.getMessageOrBuilder(); + } else { + return ecresearchorganization_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getEcresearchorganizationFieldBuilder() { + if (ecresearchorganizationBuilder_ == null) { + ecresearchorganizationBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + ecresearchorganization_, + getParentForChildren(), + isClean()); + ecresearchorganization_ = null; + } + return ecresearchorganizationBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField echighereducation = 9; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField echighereducation_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> echighereducationBuilder_; + public boolean hasEchighereducation() { + return ((bitField0_ & 0x00000200) == 0x00000200); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEchighereducation() { + if (echighereducationBuilder_ == null) { + return echighereducation_; + } else { + return echighereducationBuilder_.getMessage(); + } + } + public Builder setEchighereducation(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (echighereducationBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + echighereducation_ = value; + onChanged(); + } else { + echighereducationBuilder_.setMessage(value); + } + bitField0_ |= 0x00000200; + return this; + } + public Builder setEchighereducation( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (echighereducationBuilder_ == null) { + echighereducation_ = builderForValue.build(); + onChanged(); + } else { + echighereducationBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000200; + return this; + } + public Builder mergeEchighereducation(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (echighereducationBuilder_ == null) { + if (((bitField0_ & 0x00000200) == 0x00000200) && + echighereducation_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + echighereducation_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(echighereducation_).mergeFrom(value).buildPartial(); + } else { + echighereducation_ = value; + } + onChanged(); + } else { + echighereducationBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000200; + return this; + } + public Builder clearEchighereducation() { + if (echighereducationBuilder_ == null) { + echighereducation_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + echighereducationBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000200); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getEchighereducationBuilder() { + bitField0_ |= 0x00000200; + onChanged(); + return getEchighereducationFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEchighereducationOrBuilder() { + if (echighereducationBuilder_ != null) { + return echighereducationBuilder_.getMessageOrBuilder(); + } else { + return echighereducation_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getEchighereducationFieldBuilder() { + if (echighereducationBuilder_ == null) { + echighereducationBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + echighereducation_, + getParentForChildren(), + isClean()); + echighereducation_ = null; + } + return echighereducationBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField ecinternationalorganizationeurinterests = 10; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField ecinternationalorganizationeurinterests_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> ecinternationalorganizationeurinterestsBuilder_; + public boolean hasEcinternationalorganizationeurinterests() { + return ((bitField0_ & 0x00000400) == 0x00000400); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcinternationalorganizationeurinterests() { + if (ecinternationalorganizationeurinterestsBuilder_ == null) { + return ecinternationalorganizationeurinterests_; + } else { + return ecinternationalorganizationeurinterestsBuilder_.getMessage(); + } + } + public Builder setEcinternationalorganizationeurinterests(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (ecinternationalorganizationeurinterestsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ecinternationalorganizationeurinterests_ = value; + onChanged(); + } else { + ecinternationalorganizationeurinterestsBuilder_.setMessage(value); + } + bitField0_ |= 0x00000400; + return this; + } + public Builder setEcinternationalorganizationeurinterests( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (ecinternationalorganizationeurinterestsBuilder_ == null) { + ecinternationalorganizationeurinterests_ = builderForValue.build(); + onChanged(); + } else { + ecinternationalorganizationeurinterestsBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000400; + return this; + } + public Builder mergeEcinternationalorganizationeurinterests(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (ecinternationalorganizationeurinterestsBuilder_ == null) { + if (((bitField0_ & 0x00000400) == 0x00000400) && + ecinternationalorganizationeurinterests_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + ecinternationalorganizationeurinterests_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(ecinternationalorganizationeurinterests_).mergeFrom(value).buildPartial(); + } else { + ecinternationalorganizationeurinterests_ = value; + } + onChanged(); + } else { + ecinternationalorganizationeurinterestsBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000400; + return this; + } + public Builder clearEcinternationalorganizationeurinterests() { + if (ecinternationalorganizationeurinterestsBuilder_ == null) { + ecinternationalorganizationeurinterests_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + ecinternationalorganizationeurinterestsBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000400); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getEcinternationalorganizationeurinterestsBuilder() { + bitField0_ |= 0x00000400; + onChanged(); + return getEcinternationalorganizationeurinterestsFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcinternationalorganizationeurinterestsOrBuilder() { + if (ecinternationalorganizationeurinterestsBuilder_ != null) { + return ecinternationalorganizationeurinterestsBuilder_.getMessageOrBuilder(); + } else { + return ecinternationalorganizationeurinterests_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getEcinternationalorganizationeurinterestsFieldBuilder() { + if (ecinternationalorganizationeurinterestsBuilder_ == null) { + ecinternationalorganizationeurinterestsBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + ecinternationalorganizationeurinterests_, + getParentForChildren(), + isClean()); + ecinternationalorganizationeurinterests_ = null; + } + return ecinternationalorganizationeurinterestsBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField ecinternationalorganization = 11; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField ecinternationalorganization_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> ecinternationalorganizationBuilder_; + public boolean hasEcinternationalorganization() { + return ((bitField0_ & 0x00000800) == 0x00000800); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcinternationalorganization() { + if (ecinternationalorganizationBuilder_ == null) { + return ecinternationalorganization_; + } else { + return ecinternationalorganizationBuilder_.getMessage(); + } + } + public Builder setEcinternationalorganization(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (ecinternationalorganizationBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ecinternationalorganization_ = value; + onChanged(); + } else { + ecinternationalorganizationBuilder_.setMessage(value); + } + bitField0_ |= 0x00000800; + return this; + } + public Builder setEcinternationalorganization( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (ecinternationalorganizationBuilder_ == null) { + ecinternationalorganization_ = builderForValue.build(); + onChanged(); + } else { + ecinternationalorganizationBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000800; + return this; + } + public Builder mergeEcinternationalorganization(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (ecinternationalorganizationBuilder_ == null) { + if (((bitField0_ & 0x00000800) == 0x00000800) && + ecinternationalorganization_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + ecinternationalorganization_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(ecinternationalorganization_).mergeFrom(value).buildPartial(); + } else { + ecinternationalorganization_ = value; + } + onChanged(); + } else { + ecinternationalorganizationBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000800; + return this; + } + public Builder clearEcinternationalorganization() { + if (ecinternationalorganizationBuilder_ == null) { + ecinternationalorganization_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + ecinternationalorganizationBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000800); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getEcinternationalorganizationBuilder() { + bitField0_ |= 0x00000800; + onChanged(); + return getEcinternationalorganizationFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcinternationalorganizationOrBuilder() { + if (ecinternationalorganizationBuilder_ != null) { + return ecinternationalorganizationBuilder_.getMessageOrBuilder(); + } else { + return ecinternationalorganization_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getEcinternationalorganizationFieldBuilder() { + if (ecinternationalorganizationBuilder_ == null) { + ecinternationalorganizationBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + ecinternationalorganization_, + getParentForChildren(), + isClean()); + ecinternationalorganization_ = null; + } + return ecinternationalorganizationBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField ecenterprise = 12; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField ecenterprise_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> ecenterpriseBuilder_; + public boolean hasEcenterprise() { + return ((bitField0_ & 0x00001000) == 0x00001000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcenterprise() { + if (ecenterpriseBuilder_ == null) { + return ecenterprise_; + } else { + return ecenterpriseBuilder_.getMessage(); + } + } + public Builder setEcenterprise(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (ecenterpriseBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ecenterprise_ = value; + onChanged(); + } else { + ecenterpriseBuilder_.setMessage(value); + } + bitField0_ |= 0x00001000; + return this; + } + public Builder setEcenterprise( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (ecenterpriseBuilder_ == null) { + ecenterprise_ = builderForValue.build(); + onChanged(); + } else { + ecenterpriseBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00001000; + return this; + } + public Builder mergeEcenterprise(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (ecenterpriseBuilder_ == null) { + if (((bitField0_ & 0x00001000) == 0x00001000) && + ecenterprise_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + ecenterprise_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(ecenterprise_).mergeFrom(value).buildPartial(); + } else { + ecenterprise_ = value; + } + onChanged(); + } else { + ecenterpriseBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00001000; + return this; + } + public Builder clearEcenterprise() { + if (ecenterpriseBuilder_ == null) { + ecenterprise_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + ecenterpriseBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00001000); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getEcenterpriseBuilder() { + bitField0_ |= 0x00001000; + onChanged(); + return getEcenterpriseFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcenterpriseOrBuilder() { + if (ecenterpriseBuilder_ != null) { + return ecenterpriseBuilder_.getMessageOrBuilder(); + } else { + return ecenterprise_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getEcenterpriseFieldBuilder() { + if (ecenterpriseBuilder_ == null) { + ecenterpriseBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + ecenterprise_, + getParentForChildren(), + isClean()); + ecenterprise_ = null; + } + return ecenterpriseBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField ecsmevalidated = 13; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField ecsmevalidated_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> ecsmevalidatedBuilder_; + public boolean hasEcsmevalidated() { + return ((bitField0_ & 0x00002000) == 0x00002000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcsmevalidated() { + if (ecsmevalidatedBuilder_ == null) { + return ecsmevalidated_; + } else { + return ecsmevalidatedBuilder_.getMessage(); + } + } + public Builder setEcsmevalidated(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (ecsmevalidatedBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ecsmevalidated_ = value; + onChanged(); + } else { + ecsmevalidatedBuilder_.setMessage(value); + } + bitField0_ |= 0x00002000; + return this; + } + public Builder setEcsmevalidated( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (ecsmevalidatedBuilder_ == null) { + ecsmevalidated_ = builderForValue.build(); + onChanged(); + } else { + ecsmevalidatedBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00002000; + return this; + } + public Builder mergeEcsmevalidated(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (ecsmevalidatedBuilder_ == null) { + if (((bitField0_ & 0x00002000) == 0x00002000) && + ecsmevalidated_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + ecsmevalidated_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(ecsmevalidated_).mergeFrom(value).buildPartial(); + } else { + ecsmevalidated_ = value; + } + onChanged(); + } else { + ecsmevalidatedBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00002000; + return this; + } + public Builder clearEcsmevalidated() { + if (ecsmevalidatedBuilder_ == null) { + ecsmevalidated_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + ecsmevalidatedBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00002000); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getEcsmevalidatedBuilder() { + bitField0_ |= 0x00002000; + onChanged(); + return getEcsmevalidatedFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcsmevalidatedOrBuilder() { + if (ecsmevalidatedBuilder_ != null) { + return ecsmevalidatedBuilder_.getMessageOrBuilder(); + } else { + return ecsmevalidated_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getEcsmevalidatedFieldBuilder() { + if (ecsmevalidatedBuilder_ == null) { + ecsmevalidatedBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + ecsmevalidated_, + getParentForChildren(), + isClean()); + ecsmevalidated_ = null; + } + return ecsmevalidatedBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField ecnutscode = 14; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField ecnutscode_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> ecnutscodeBuilder_; + public boolean hasEcnutscode() { + return ((bitField0_ & 0x00004000) == 0x00004000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcnutscode() { + if (ecnutscodeBuilder_ == null) { + return ecnutscode_; + } else { + return ecnutscodeBuilder_.getMessage(); + } + } + public Builder setEcnutscode(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (ecnutscodeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ecnutscode_ = value; + onChanged(); + } else { + ecnutscodeBuilder_.setMessage(value); + } + bitField0_ |= 0x00004000; + return this; + } + public Builder setEcnutscode( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (ecnutscodeBuilder_ == null) { + ecnutscode_ = builderForValue.build(); + onChanged(); + } else { + ecnutscodeBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00004000; + return this; + } + public Builder mergeEcnutscode(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (ecnutscodeBuilder_ == null) { + if (((bitField0_ & 0x00004000) == 0x00004000) && + ecnutscode_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + ecnutscode_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(ecnutscode_).mergeFrom(value).buildPartial(); + } else { + ecnutscode_ = value; + } + onChanged(); + } else { + ecnutscodeBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00004000; + return this; + } + public Builder clearEcnutscode() { + if (ecnutscodeBuilder_ == null) { + ecnutscode_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + ecnutscodeBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00004000); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getEcnutscodeBuilder() { + bitField0_ |= 0x00004000; + onChanged(); + return getEcnutscodeFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcnutscodeOrBuilder() { + if (ecnutscodeBuilder_ != null) { + return ecnutscodeBuilder_.getMessageOrBuilder(); + } else { + return ecnutscode_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getEcnutscodeFieldBuilder() { + if (ecnutscodeBuilder_ == null) { + ecnutscodeBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + ecnutscode_, + getParentForChildren(), + isClean()); + ecnutscode_ = null; + } + return ecnutscodeBuilder_; + } + + // optional .eu.dnetlib.data.proto.Qualifier country = 16; + private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier country_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> countryBuilder_; + public boolean hasCountry() { + return ((bitField0_ & 0x00008000) == 0x00008000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getCountry() { + if (countryBuilder_ == null) { + return country_; + } else { + return countryBuilder_.getMessage(); + } + } + public Builder setCountry(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { + if (countryBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + country_ = value; + onChanged(); + } else { + countryBuilder_.setMessage(value); + } + bitField0_ |= 0x00008000; + return this; + } + public Builder setCountry( + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder builderForValue) { + if (countryBuilder_ == null) { + country_ = builderForValue.build(); + onChanged(); + } else { + countryBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00008000; + return this; + } + public Builder mergeCountry(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { + if (countryBuilder_ == null) { + if (((bitField0_ & 0x00008000) == 0x00008000) && + country_ != eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance()) { + country_ = + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(country_).mergeFrom(value).buildPartial(); + } else { + country_ = value; + } + onChanged(); + } else { + countryBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00008000; + return this; + } + public Builder clearCountry() { + if (countryBuilder_ == null) { + country_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + onChanged(); + } else { + countryBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00008000); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder getCountryBuilder() { + bitField0_ |= 0x00008000; + onChanged(); + return getCountryFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getCountryOrBuilder() { + if (countryBuilder_ != null) { + return countryBuilder_.getMessageOrBuilder(); + } else { + return country_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> + getCountryFieldBuilder() { + if (countryBuilder_ == null) { + countryBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder>( + country_, + getParentForChildren(), + isClean()); + country_ = null; + } + return countryBuilder_; + } + + // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.Organization.Metadata) + } + + static { + defaultInstance = new Metadata(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.Organization.Metadata) + } + + private int bitField0_; + // optional .eu.dnetlib.data.proto.Organization.Metadata metadata = 2; + public static final int METADATA_FIELD_NUMBER = 2; + private eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata metadata_; + public boolean hasMetadata() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata getMetadata() { + return metadata_; + } + public eu.dnetlib.data.proto.OrganizationProtos.Organization.MetadataOrBuilder getMetadataOrBuilder() { + return metadata_; + } + + private void initFields() { + metadata_ = eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata.getDefaultInstance(); + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + if (hasMetadata()) { + if (!getMetadata().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeMessage(2, metadata_); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(2, metadata_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static eu.dnetlib.data.proto.OrganizationProtos.Organization parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.OrganizationProtos.Organization parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.OrganizationProtos.Organization parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.OrganizationProtos.Organization parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.OrganizationProtos.Organization parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.OrganizationProtos.Organization parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.OrganizationProtos.Organization parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.OrganizationProtos.Organization parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.OrganizationProtos.Organization parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.OrganizationProtos.Organization parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(eu.dnetlib.data.proto.OrganizationProtos.Organization prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder + implements eu.dnetlib.data.proto.OrganizationProtos.OrganizationOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.OrganizationProtos.internal_static_eu_dnetlib_data_proto_Organization_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.OrganizationProtos.internal_static_eu_dnetlib_data_proto_Organization_fieldAccessorTable; + } + + // Construct using eu.dnetlib.data.proto.OrganizationProtos.Organization.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getMetadataFieldBuilder(); + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + if (metadataBuilder_ == null) { + metadata_ = eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata.getDefaultInstance(); + } else { + metadataBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return eu.dnetlib.data.proto.OrganizationProtos.Organization.getDescriptor(); + } + + public eu.dnetlib.data.proto.OrganizationProtos.Organization getDefaultInstanceForType() { + return eu.dnetlib.data.proto.OrganizationProtos.Organization.getDefaultInstance(); + } + + public eu.dnetlib.data.proto.OrganizationProtos.Organization build() { + eu.dnetlib.data.proto.OrganizationProtos.Organization result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + private eu.dnetlib.data.proto.OrganizationProtos.Organization buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + eu.dnetlib.data.proto.OrganizationProtos.Organization result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return result; + } + + public eu.dnetlib.data.proto.OrganizationProtos.Organization buildPartial() { + eu.dnetlib.data.proto.OrganizationProtos.Organization result = new eu.dnetlib.data.proto.OrganizationProtos.Organization(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + if (metadataBuilder_ == null) { + result.metadata_ = metadata_; + } else { + result.metadata_ = metadataBuilder_.build(); + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof eu.dnetlib.data.proto.OrganizationProtos.Organization) { + return mergeFrom((eu.dnetlib.data.proto.OrganizationProtos.Organization)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(eu.dnetlib.data.proto.OrganizationProtos.Organization other) { + if (other == eu.dnetlib.data.proto.OrganizationProtos.Organization.getDefaultInstance()) return this; + if (other.hasMetadata()) { + mergeMetadata(other.getMetadata()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + if (hasMetadata()) { + if (!getMetadata().isInitialized()) { + + return false; + } + } + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + } + break; + } + case 18: { + eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata.Builder subBuilder = eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata.newBuilder(); + if (hasMetadata()) { + subBuilder.mergeFrom(getMetadata()); + } + input.readMessage(subBuilder, extensionRegistry); + setMetadata(subBuilder.buildPartial()); + break; + } + } + } + } + + private int bitField0_; + + // optional .eu.dnetlib.data.proto.Organization.Metadata metadata = 2; + private eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata metadata_ = eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata, eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata.Builder, eu.dnetlib.data.proto.OrganizationProtos.Organization.MetadataOrBuilder> metadataBuilder_; + public boolean hasMetadata() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata getMetadata() { + if (metadataBuilder_ == null) { + return metadata_; + } else { + return metadataBuilder_.getMessage(); + } + } + public Builder setMetadata(eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata value) { + if (metadataBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + metadata_ = value; + onChanged(); + } else { + metadataBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder setMetadata( + eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata.Builder builderForValue) { + if (metadataBuilder_ == null) { + metadata_ = builderForValue.build(); + onChanged(); + } else { + metadataBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder mergeMetadata(eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata value) { + if (metadataBuilder_ == null) { + if (((bitField0_ & 0x00000001) == 0x00000001) && + metadata_ != eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata.getDefaultInstance()) { + metadata_ = + eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata.newBuilder(metadata_).mergeFrom(value).buildPartial(); + } else { + metadata_ = value; + } + onChanged(); + } else { + metadataBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder clearMetadata() { + if (metadataBuilder_ == null) { + metadata_ = eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata.getDefaultInstance(); + onChanged(); + } else { + metadataBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + public eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata.Builder getMetadataBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return getMetadataFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.OrganizationProtos.Organization.MetadataOrBuilder getMetadataOrBuilder() { + if (metadataBuilder_ != null) { + return metadataBuilder_.getMessageOrBuilder(); + } else { + return metadata_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata, eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata.Builder, eu.dnetlib.data.proto.OrganizationProtos.Organization.MetadataOrBuilder> + getMetadataFieldBuilder() { + if (metadataBuilder_ == null) { + metadataBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata, eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata.Builder, eu.dnetlib.data.proto.OrganizationProtos.Organization.MetadataOrBuilder>( + metadata_, + getParentForChildren(), + isClean()); + metadata_ = null; + } + return metadataBuilder_; + } + + // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.Organization) + } + + static { + defaultInstance = new Organization(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.Organization) + } + + private static com.google.protobuf.Descriptors.Descriptor + internal_static_eu_dnetlib_data_proto_Organization_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_eu_dnetlib_data_proto_Organization_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_eu_dnetlib_data_proto_Organization_Metadata_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_eu_dnetlib_data_proto_Organization_Metadata_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\022Organization.proto\022\025eu.dnetlib.data.pr" + + "oto\032\017FieldType.proto\"\250\010\n\014Organization\022>\n" + + "\010metadata\030\002 \001(\0132,.eu.dnetlib.data.proto." + + "Organization.Metadata\032\327\007\n\010Metadata\022:\n\016le" + + "galshortname\030\001 \001(\0132\".eu.dnetlib.data.pro" + + "to.StringField\0225\n\tlegalname\030\002 \001(\0132\".eu.d" + + "netlib.data.proto.StringField\022<\n\020alterna" + + "tiveNames\030\021 \003(\0132\".eu.dnetlib.data.proto." + + "StringField\0226\n\nwebsiteurl\030\003 \001(\0132\".eu.dne" + + "tlib.data.proto.StringField\0223\n\007logourl\030\004", + " \001(\0132\".eu.dnetlib.data.proto.StringField" + + "\0227\n\013eclegalbody\030\005 \001(\0132\".eu.dnetlib.data." + + "proto.StringField\0229\n\reclegalperson\030\006 \001(\013" + + "2\".eu.dnetlib.data.proto.StringField\0227\n\013" + + "ecnonprofit\030\007 \001(\0132\".eu.dnetlib.data.prot" + + "o.StringField\022B\n\026ecresearchorganization\030" + + "\010 \001(\0132\".eu.dnetlib.data.proto.StringFiel" + + "d\022=\n\021echighereducation\030\t \001(\0132\".eu.dnetli" + + "b.data.proto.StringField\022S\n\'ecinternatio" + + "nalorganizationeurinterests\030\n \001(\0132\".eu.d", + "netlib.data.proto.StringField\022G\n\033ecinter" + + "nationalorganization\030\013 \001(\0132\".eu.dnetlib." + + "data.proto.StringField\0228\n\014ecenterprise\030\014" + + " \001(\0132\".eu.dnetlib.data.proto.StringField" + + "\022:\n\016ecsmevalidated\030\r \001(\0132\".eu.dnetlib.da" + + "ta.proto.StringField\0226\n\necnutscode\030\016 \001(\013" + + "2\".eu.dnetlib.data.proto.StringField\0221\n\007" + + "country\030\020 \001(\0132 .eu.dnetlib.data.proto.Qu" + + "alifierB+\n\025eu.dnetlib.data.protoB\022Organi" + + "zationProtos" + }; + com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = + new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { + public com.google.protobuf.ExtensionRegistry assignDescriptors( + com.google.protobuf.Descriptors.FileDescriptor root) { + descriptor = root; + internal_static_eu_dnetlib_data_proto_Organization_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_eu_dnetlib_data_proto_Organization_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_eu_dnetlib_data_proto_Organization_descriptor, + new java.lang.String[] { "Metadata", }, + eu.dnetlib.data.proto.OrganizationProtos.Organization.class, + eu.dnetlib.data.proto.OrganizationProtos.Organization.Builder.class); + internal_static_eu_dnetlib_data_proto_Organization_Metadata_descriptor = + internal_static_eu_dnetlib_data_proto_Organization_descriptor.getNestedTypes().get(0); + internal_static_eu_dnetlib_data_proto_Organization_Metadata_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_eu_dnetlib_data_proto_Organization_Metadata_descriptor, + new java.lang.String[] { "Legalshortname", "Legalname", "AlternativeNames", "Websiteurl", "Logourl", "Eclegalbody", "Eclegalperson", "Ecnonprofit", "Ecresearchorganization", "Echighereducation", "Ecinternationalorganizationeurinterests", "Ecinternationalorganization", "Ecenterprise", "Ecsmevalidated", "Ecnutscode", "Country", }, + eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata.class, + eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata.Builder.class); + return null; + } + }; + com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + eu.dnetlib.data.proto.FieldTypeProtos.getDescriptor(), + }, assigner); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/PersonProtos.java b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/PersonProtos.java new file mode 100644 index 000000000..2c997d81b --- /dev/null +++ b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/PersonProtos.java @@ -0,0 +1,1752 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: Person.proto + +package eu.dnetlib.data.proto; + +public final class PersonProtos { + private PersonProtos() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + } + public interface PersonOrBuilder + extends com.google.protobuf.MessageOrBuilder { + + // optional .eu.dnetlib.data.proto.Person.Metadata metadata = 2; + boolean hasMetadata(); + eu.dnetlib.data.proto.PersonProtos.Person.Metadata getMetadata(); + eu.dnetlib.data.proto.PersonProtos.Person.MetadataOrBuilder getMetadataOrBuilder(); + } + public static final class Person extends + com.google.protobuf.GeneratedMessage + implements PersonOrBuilder { + // Use Person.newBuilder() to construct. + private Person(Builder builder) { + super(builder); + } + private Person(boolean noInit) {} + + private static final Person defaultInstance; + public static Person getDefaultInstance() { + return defaultInstance; + } + + public Person getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.PersonProtos.internal_static_eu_dnetlib_data_proto_Person_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.PersonProtos.internal_static_eu_dnetlib_data_proto_Person_fieldAccessorTable; + } + + public interface MetadataOrBuilder + extends com.google.protobuf.MessageOrBuilder { + + // required string fullname = 1; + boolean hasFullname(); + String getFullname(); + + // optional string firstname = 2; + boolean hasFirstname(); + String getFirstname(); + + // optional string lastname = 3; + boolean hasLastname(); + String getLastname(); + + // required string pubID = 4; + boolean hasPubID(); + String getPubID(); + + // optional string pubDOI = 5; + boolean hasPubDOI(); + String getPubDOI(); + + // optional string orcid = 6; + boolean hasOrcid(); + String getOrcid(); + + // required int32 rank = 7; + boolean hasRank(); + int getRank(); + + // repeated string coauthors = 8; + java.util.List getCoauthorsList(); + int getCoauthorsCount(); + String getCoauthors(int index); + + // repeated double topics = 9; + java.util.List getTopicsList(); + int getTopicsCount(); + double getTopics(int index); + + // required string area = 10; + boolean hasArea(); + String getArea(); + } + public static final class Metadata extends + com.google.protobuf.GeneratedMessage + implements MetadataOrBuilder { + // Use Metadata.newBuilder() to construct. + private Metadata(Builder builder) { + super(builder); + } + private Metadata(boolean noInit) {} + + private static final Metadata defaultInstance; + public static Metadata getDefaultInstance() { + return defaultInstance; + } + + public Metadata getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.PersonProtos.internal_static_eu_dnetlib_data_proto_Person_Metadata_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.PersonProtos.internal_static_eu_dnetlib_data_proto_Person_Metadata_fieldAccessorTable; + } + + private int bitField0_; + // required string fullname = 1; + public static final int FULLNAME_FIELD_NUMBER = 1; + private java.lang.Object fullname_; + public boolean hasFullname() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public String getFullname() { + java.lang.Object ref = fullname_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + fullname_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getFullnameBytes() { + java.lang.Object ref = fullname_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + fullname_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // optional string firstname = 2; + public static final int FIRSTNAME_FIELD_NUMBER = 2; + private java.lang.Object firstname_; + public boolean hasFirstname() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public String getFirstname() { + java.lang.Object ref = firstname_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + firstname_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getFirstnameBytes() { + java.lang.Object ref = firstname_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + firstname_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // optional string lastname = 3; + public static final int LASTNAME_FIELD_NUMBER = 3; + private java.lang.Object lastname_; + public boolean hasLastname() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + public String getLastname() { + java.lang.Object ref = lastname_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + lastname_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getLastnameBytes() { + java.lang.Object ref = lastname_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + lastname_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // required string pubID = 4; + public static final int PUBID_FIELD_NUMBER = 4; + private java.lang.Object pubID_; + public boolean hasPubID() { + return ((bitField0_ & 0x00000008) == 0x00000008); + } + public String getPubID() { + java.lang.Object ref = pubID_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + pubID_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getPubIDBytes() { + java.lang.Object ref = pubID_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + pubID_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // optional string pubDOI = 5; + public static final int PUBDOI_FIELD_NUMBER = 5; + private java.lang.Object pubDOI_; + public boolean hasPubDOI() { + return ((bitField0_ & 0x00000010) == 0x00000010); + } + public String getPubDOI() { + java.lang.Object ref = pubDOI_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + pubDOI_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getPubDOIBytes() { + java.lang.Object ref = pubDOI_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + pubDOI_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // optional string orcid = 6; + public static final int ORCID_FIELD_NUMBER = 6; + private java.lang.Object orcid_; + public boolean hasOrcid() { + return ((bitField0_ & 0x00000020) == 0x00000020); + } + public String getOrcid() { + java.lang.Object ref = orcid_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + orcid_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getOrcidBytes() { + java.lang.Object ref = orcid_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + orcid_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // required int32 rank = 7; + public static final int RANK_FIELD_NUMBER = 7; + private int rank_; + public boolean hasRank() { + return ((bitField0_ & 0x00000040) == 0x00000040); + } + public int getRank() { + return rank_; + } + + // repeated string coauthors = 8; + public static final int COAUTHORS_FIELD_NUMBER = 8; + private com.google.protobuf.LazyStringList coauthors_; + public java.util.List + getCoauthorsList() { + return coauthors_; + } + public int getCoauthorsCount() { + return coauthors_.size(); + } + public String getCoauthors(int index) { + return coauthors_.get(index); + } + + // repeated double topics = 9; + public static final int TOPICS_FIELD_NUMBER = 9; + private java.util.List topics_; + public java.util.List + getTopicsList() { + return topics_; + } + public int getTopicsCount() { + return topics_.size(); + } + public double getTopics(int index) { + return topics_.get(index); + } + + // required string area = 10; + public static final int AREA_FIELD_NUMBER = 10; + private java.lang.Object area_; + public boolean hasArea() { + return ((bitField0_ & 0x00000080) == 0x00000080); + } + public String getArea() { + java.lang.Object ref = area_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + area_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getAreaBytes() { + java.lang.Object ref = area_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + area_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private void initFields() { + fullname_ = ""; + firstname_ = ""; + lastname_ = ""; + pubID_ = ""; + pubDOI_ = ""; + orcid_ = ""; + rank_ = 0; + coauthors_ = com.google.protobuf.LazyStringArrayList.EMPTY; + topics_ = java.util.Collections.emptyList();; + area_ = ""; + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + if (!hasFullname()) { + memoizedIsInitialized = 0; + return false; + } + if (!hasPubID()) { + memoizedIsInitialized = 0; + return false; + } + if (!hasRank()) { + memoizedIsInitialized = 0; + return false; + } + if (!hasArea()) { + memoizedIsInitialized = 0; + return false; + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeBytes(1, getFullnameBytes()); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + output.writeBytes(2, getFirstnameBytes()); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + output.writeBytes(3, getLastnameBytes()); + } + if (((bitField0_ & 0x00000008) == 0x00000008)) { + output.writeBytes(4, getPubIDBytes()); + } + if (((bitField0_ & 0x00000010) == 0x00000010)) { + output.writeBytes(5, getPubDOIBytes()); + } + if (((bitField0_ & 0x00000020) == 0x00000020)) { + output.writeBytes(6, getOrcidBytes()); + } + if (((bitField0_ & 0x00000040) == 0x00000040)) { + output.writeInt32(7, rank_); + } + for (int i = 0; i < coauthors_.size(); i++) { + output.writeBytes(8, coauthors_.getByteString(i)); + } + for (int i = 0; i < topics_.size(); i++) { + output.writeDouble(9, topics_.get(i)); + } + if (((bitField0_ & 0x00000080) == 0x00000080)) { + output.writeBytes(10, getAreaBytes()); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(1, getFullnameBytes()); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(2, getFirstnameBytes()); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(3, getLastnameBytes()); + } + if (((bitField0_ & 0x00000008) == 0x00000008)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(4, getPubIDBytes()); + } + if (((bitField0_ & 0x00000010) == 0x00000010)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(5, getPubDOIBytes()); + } + if (((bitField0_ & 0x00000020) == 0x00000020)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(6, getOrcidBytes()); + } + if (((bitField0_ & 0x00000040) == 0x00000040)) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(7, rank_); + } + { + int dataSize = 0; + for (int i = 0; i < coauthors_.size(); i++) { + dataSize += com.google.protobuf.CodedOutputStream + .computeBytesSizeNoTag(coauthors_.getByteString(i)); + } + size += dataSize; + size += 1 * getCoauthorsList().size(); + } + { + int dataSize = 0; + dataSize = 8 * getTopicsList().size(); + size += dataSize; + size += 1 * getTopicsList().size(); + } + if (((bitField0_ & 0x00000080) == 0x00000080)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(10, getAreaBytes()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static eu.dnetlib.data.proto.PersonProtos.Person.Metadata parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.PersonProtos.Person.Metadata parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.PersonProtos.Person.Metadata parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.PersonProtos.Person.Metadata parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.PersonProtos.Person.Metadata parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.PersonProtos.Person.Metadata parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.PersonProtos.Person.Metadata parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.PersonProtos.Person.Metadata parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.PersonProtos.Person.Metadata parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.PersonProtos.Person.Metadata parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(eu.dnetlib.data.proto.PersonProtos.Person.Metadata prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder + implements eu.dnetlib.data.proto.PersonProtos.Person.MetadataOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.PersonProtos.internal_static_eu_dnetlib_data_proto_Person_Metadata_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.PersonProtos.internal_static_eu_dnetlib_data_proto_Person_Metadata_fieldAccessorTable; + } + + // Construct using eu.dnetlib.data.proto.PersonProtos.Person.Metadata.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + fullname_ = ""; + bitField0_ = (bitField0_ & ~0x00000001); + firstname_ = ""; + bitField0_ = (bitField0_ & ~0x00000002); + lastname_ = ""; + bitField0_ = (bitField0_ & ~0x00000004); + pubID_ = ""; + bitField0_ = (bitField0_ & ~0x00000008); + pubDOI_ = ""; + bitField0_ = (bitField0_ & ~0x00000010); + orcid_ = ""; + bitField0_ = (bitField0_ & ~0x00000020); + rank_ = 0; + bitField0_ = (bitField0_ & ~0x00000040); + coauthors_ = com.google.protobuf.LazyStringArrayList.EMPTY; + bitField0_ = (bitField0_ & ~0x00000080); + topics_ = java.util.Collections.emptyList();; + bitField0_ = (bitField0_ & ~0x00000100); + area_ = ""; + bitField0_ = (bitField0_ & ~0x00000200); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return eu.dnetlib.data.proto.PersonProtos.Person.Metadata.getDescriptor(); + } + + public eu.dnetlib.data.proto.PersonProtos.Person.Metadata getDefaultInstanceForType() { + return eu.dnetlib.data.proto.PersonProtos.Person.Metadata.getDefaultInstance(); + } + + public eu.dnetlib.data.proto.PersonProtos.Person.Metadata build() { + eu.dnetlib.data.proto.PersonProtos.Person.Metadata result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + private eu.dnetlib.data.proto.PersonProtos.Person.Metadata buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + eu.dnetlib.data.proto.PersonProtos.Person.Metadata result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return result; + } + + public eu.dnetlib.data.proto.PersonProtos.Person.Metadata buildPartial() { + eu.dnetlib.data.proto.PersonProtos.Person.Metadata result = new eu.dnetlib.data.proto.PersonProtos.Person.Metadata(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + result.fullname_ = fullname_; + if (((from_bitField0_ & 0x00000002) == 0x00000002)) { + to_bitField0_ |= 0x00000002; + } + result.firstname_ = firstname_; + if (((from_bitField0_ & 0x00000004) == 0x00000004)) { + to_bitField0_ |= 0x00000004; + } + result.lastname_ = lastname_; + if (((from_bitField0_ & 0x00000008) == 0x00000008)) { + to_bitField0_ |= 0x00000008; + } + result.pubID_ = pubID_; + if (((from_bitField0_ & 0x00000010) == 0x00000010)) { + to_bitField0_ |= 0x00000010; + } + result.pubDOI_ = pubDOI_; + if (((from_bitField0_ & 0x00000020) == 0x00000020)) { + to_bitField0_ |= 0x00000020; + } + result.orcid_ = orcid_; + if (((from_bitField0_ & 0x00000040) == 0x00000040)) { + to_bitField0_ |= 0x00000040; + } + result.rank_ = rank_; + if (((bitField0_ & 0x00000080) == 0x00000080)) { + coauthors_ = new com.google.protobuf.UnmodifiableLazyStringList( + coauthors_); + bitField0_ = (bitField0_ & ~0x00000080); + } + result.coauthors_ = coauthors_; + if (((bitField0_ & 0x00000100) == 0x00000100)) { + topics_ = java.util.Collections.unmodifiableList(topics_); + bitField0_ = (bitField0_ & ~0x00000100); + } + result.topics_ = topics_; + if (((from_bitField0_ & 0x00000200) == 0x00000200)) { + to_bitField0_ |= 0x00000080; + } + result.area_ = area_; + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof eu.dnetlib.data.proto.PersonProtos.Person.Metadata) { + return mergeFrom((eu.dnetlib.data.proto.PersonProtos.Person.Metadata)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(eu.dnetlib.data.proto.PersonProtos.Person.Metadata other) { + if (other == eu.dnetlib.data.proto.PersonProtos.Person.Metadata.getDefaultInstance()) return this; + if (other.hasFullname()) { + setFullname(other.getFullname()); + } + if (other.hasFirstname()) { + setFirstname(other.getFirstname()); + } + if (other.hasLastname()) { + setLastname(other.getLastname()); + } + if (other.hasPubID()) { + setPubID(other.getPubID()); + } + if (other.hasPubDOI()) { + setPubDOI(other.getPubDOI()); + } + if (other.hasOrcid()) { + setOrcid(other.getOrcid()); + } + if (other.hasRank()) { + setRank(other.getRank()); + } + if (!other.coauthors_.isEmpty()) { + if (coauthors_.isEmpty()) { + coauthors_ = other.coauthors_; + bitField0_ = (bitField0_ & ~0x00000080); + } else { + ensureCoauthorsIsMutable(); + coauthors_.addAll(other.coauthors_); + } + onChanged(); + } + if (!other.topics_.isEmpty()) { + if (topics_.isEmpty()) { + topics_ = other.topics_; + bitField0_ = (bitField0_ & ~0x00000100); + } else { + ensureTopicsIsMutable(); + topics_.addAll(other.topics_); + } + onChanged(); + } + if (other.hasArea()) { + setArea(other.getArea()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + if (!hasFullname()) { + + return false; + } + if (!hasPubID()) { + + return false; + } + if (!hasRank()) { + + return false; + } + if (!hasArea()) { + + return false; + } + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + } + break; + } + case 10: { + bitField0_ |= 0x00000001; + fullname_ = input.readBytes(); + break; + } + case 18: { + bitField0_ |= 0x00000002; + firstname_ = input.readBytes(); + break; + } + case 26: { + bitField0_ |= 0x00000004; + lastname_ = input.readBytes(); + break; + } + case 34: { + bitField0_ |= 0x00000008; + pubID_ = input.readBytes(); + break; + } + case 42: { + bitField0_ |= 0x00000010; + pubDOI_ = input.readBytes(); + break; + } + case 50: { + bitField0_ |= 0x00000020; + orcid_ = input.readBytes(); + break; + } + case 56: { + bitField0_ |= 0x00000040; + rank_ = input.readInt32(); + break; + } + case 66: { + ensureCoauthorsIsMutable(); + coauthors_.add(input.readBytes()); + break; + } + case 73: { + ensureTopicsIsMutable(); + topics_.add(input.readDouble()); + break; + } + case 74: { + int length = input.readRawVarint32(); + int limit = input.pushLimit(length); + while (input.getBytesUntilLimit() > 0) { + addTopics(input.readDouble()); + } + input.popLimit(limit); + break; + } + case 82: { + bitField0_ |= 0x00000200; + area_ = input.readBytes(); + break; + } + } + } + } + + private int bitField0_; + + // required string fullname = 1; + private java.lang.Object fullname_ = ""; + public boolean hasFullname() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public String getFullname() { + java.lang.Object ref = fullname_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + fullname_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setFullname(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + fullname_ = value; + onChanged(); + return this; + } + public Builder clearFullname() { + bitField0_ = (bitField0_ & ~0x00000001); + fullname_ = getDefaultInstance().getFullname(); + onChanged(); + return this; + } + void setFullname(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000001; + fullname_ = value; + onChanged(); + } + + // optional string firstname = 2; + private java.lang.Object firstname_ = ""; + public boolean hasFirstname() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public String getFirstname() { + java.lang.Object ref = firstname_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + firstname_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setFirstname(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + firstname_ = value; + onChanged(); + return this; + } + public Builder clearFirstname() { + bitField0_ = (bitField0_ & ~0x00000002); + firstname_ = getDefaultInstance().getFirstname(); + onChanged(); + return this; + } + void setFirstname(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000002; + firstname_ = value; + onChanged(); + } + + // optional string lastname = 3; + private java.lang.Object lastname_ = ""; + public boolean hasLastname() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + public String getLastname() { + java.lang.Object ref = lastname_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + lastname_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setLastname(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000004; + lastname_ = value; + onChanged(); + return this; + } + public Builder clearLastname() { + bitField0_ = (bitField0_ & ~0x00000004); + lastname_ = getDefaultInstance().getLastname(); + onChanged(); + return this; + } + void setLastname(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000004; + lastname_ = value; + onChanged(); + } + + // required string pubID = 4; + private java.lang.Object pubID_ = ""; + public boolean hasPubID() { + return ((bitField0_ & 0x00000008) == 0x00000008); + } + public String getPubID() { + java.lang.Object ref = pubID_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + pubID_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setPubID(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000008; + pubID_ = value; + onChanged(); + return this; + } + public Builder clearPubID() { + bitField0_ = (bitField0_ & ~0x00000008); + pubID_ = getDefaultInstance().getPubID(); + onChanged(); + return this; + } + void setPubID(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000008; + pubID_ = value; + onChanged(); + } + + // optional string pubDOI = 5; + private java.lang.Object pubDOI_ = ""; + public boolean hasPubDOI() { + return ((bitField0_ & 0x00000010) == 0x00000010); + } + public String getPubDOI() { + java.lang.Object ref = pubDOI_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + pubDOI_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setPubDOI(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000010; + pubDOI_ = value; + onChanged(); + return this; + } + public Builder clearPubDOI() { + bitField0_ = (bitField0_ & ~0x00000010); + pubDOI_ = getDefaultInstance().getPubDOI(); + onChanged(); + return this; + } + void setPubDOI(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000010; + pubDOI_ = value; + onChanged(); + } + + // optional string orcid = 6; + private java.lang.Object orcid_ = ""; + public boolean hasOrcid() { + return ((bitField0_ & 0x00000020) == 0x00000020); + } + public String getOrcid() { + java.lang.Object ref = orcid_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + orcid_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setOrcid(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000020; + orcid_ = value; + onChanged(); + return this; + } + public Builder clearOrcid() { + bitField0_ = (bitField0_ & ~0x00000020); + orcid_ = getDefaultInstance().getOrcid(); + onChanged(); + return this; + } + void setOrcid(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000020; + orcid_ = value; + onChanged(); + } + + // required int32 rank = 7; + private int rank_ ; + public boolean hasRank() { + return ((bitField0_ & 0x00000040) == 0x00000040); + } + public int getRank() { + return rank_; + } + public Builder setRank(int value) { + bitField0_ |= 0x00000040; + rank_ = value; + onChanged(); + return this; + } + public Builder clearRank() { + bitField0_ = (bitField0_ & ~0x00000040); + rank_ = 0; + onChanged(); + return this; + } + + // repeated string coauthors = 8; + private com.google.protobuf.LazyStringList coauthors_ = com.google.protobuf.LazyStringArrayList.EMPTY; + private void ensureCoauthorsIsMutable() { + if (!((bitField0_ & 0x00000080) == 0x00000080)) { + coauthors_ = new com.google.protobuf.LazyStringArrayList(coauthors_); + bitField0_ |= 0x00000080; + } + } + public java.util.List + getCoauthorsList() { + return java.util.Collections.unmodifiableList(coauthors_); + } + public int getCoauthorsCount() { + return coauthors_.size(); + } + public String getCoauthors(int index) { + return coauthors_.get(index); + } + public Builder setCoauthors( + int index, String value) { + if (value == null) { + throw new NullPointerException(); + } + ensureCoauthorsIsMutable(); + coauthors_.set(index, value); + onChanged(); + return this; + } + public Builder addCoauthors(String value) { + if (value == null) { + throw new NullPointerException(); + } + ensureCoauthorsIsMutable(); + coauthors_.add(value); + onChanged(); + return this; + } + public Builder addAllCoauthors( + java.lang.Iterable values) { + ensureCoauthorsIsMutable(); + super.addAll(values, coauthors_); + onChanged(); + return this; + } + public Builder clearCoauthors() { + coauthors_ = com.google.protobuf.LazyStringArrayList.EMPTY; + bitField0_ = (bitField0_ & ~0x00000080); + onChanged(); + return this; + } + void addCoauthors(com.google.protobuf.ByteString value) { + ensureCoauthorsIsMutable(); + coauthors_.add(value); + onChanged(); + } + + // repeated double topics = 9; + private java.util.List topics_ = java.util.Collections.emptyList();; + private void ensureTopicsIsMutable() { + if (!((bitField0_ & 0x00000100) == 0x00000100)) { + topics_ = new java.util.ArrayList(topics_); + bitField0_ |= 0x00000100; + } + } + public java.util.List + getTopicsList() { + return java.util.Collections.unmodifiableList(topics_); + } + public int getTopicsCount() { + return topics_.size(); + } + public double getTopics(int index) { + return topics_.get(index); + } + public Builder setTopics( + int index, double value) { + ensureTopicsIsMutable(); + topics_.set(index, value); + onChanged(); + return this; + } + public Builder addTopics(double value) { + ensureTopicsIsMutable(); + topics_.add(value); + onChanged(); + return this; + } + public Builder addAllTopics( + java.lang.Iterable values) { + ensureTopicsIsMutable(); + super.addAll(values, topics_); + onChanged(); + return this; + } + public Builder clearTopics() { + topics_ = java.util.Collections.emptyList();; + bitField0_ = (bitField0_ & ~0x00000100); + onChanged(); + return this; + } + + // required string area = 10; + private java.lang.Object area_ = ""; + public boolean hasArea() { + return ((bitField0_ & 0x00000200) == 0x00000200); + } + public String getArea() { + java.lang.Object ref = area_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + area_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setArea(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000200; + area_ = value; + onChanged(); + return this; + } + public Builder clearArea() { + bitField0_ = (bitField0_ & ~0x00000200); + area_ = getDefaultInstance().getArea(); + onChanged(); + return this; + } + void setArea(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000200; + area_ = value; + onChanged(); + } + + // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.Person.Metadata) + } + + static { + defaultInstance = new Metadata(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.Person.Metadata) + } + + private int bitField0_; + // optional .eu.dnetlib.data.proto.Person.Metadata metadata = 2; + public static final int METADATA_FIELD_NUMBER = 2; + private eu.dnetlib.data.proto.PersonProtos.Person.Metadata metadata_; + public boolean hasMetadata() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.PersonProtos.Person.Metadata getMetadata() { + return metadata_; + } + public eu.dnetlib.data.proto.PersonProtos.Person.MetadataOrBuilder getMetadataOrBuilder() { + return metadata_; + } + + private void initFields() { + metadata_ = eu.dnetlib.data.proto.PersonProtos.Person.Metadata.getDefaultInstance(); + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + if (hasMetadata()) { + if (!getMetadata().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeMessage(2, metadata_); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(2, metadata_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static eu.dnetlib.data.proto.PersonProtos.Person parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.PersonProtos.Person parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.PersonProtos.Person parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.PersonProtos.Person parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.PersonProtos.Person parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.PersonProtos.Person parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.PersonProtos.Person parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.PersonProtos.Person parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.PersonProtos.Person parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.PersonProtos.Person parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(eu.dnetlib.data.proto.PersonProtos.Person prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder + implements eu.dnetlib.data.proto.PersonProtos.PersonOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.PersonProtos.internal_static_eu_dnetlib_data_proto_Person_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.PersonProtos.internal_static_eu_dnetlib_data_proto_Person_fieldAccessorTable; + } + + // Construct using eu.dnetlib.data.proto.PersonProtos.Person.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getMetadataFieldBuilder(); + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + if (metadataBuilder_ == null) { + metadata_ = eu.dnetlib.data.proto.PersonProtos.Person.Metadata.getDefaultInstance(); + } else { + metadataBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return eu.dnetlib.data.proto.PersonProtos.Person.getDescriptor(); + } + + public eu.dnetlib.data.proto.PersonProtos.Person getDefaultInstanceForType() { + return eu.dnetlib.data.proto.PersonProtos.Person.getDefaultInstance(); + } + + public eu.dnetlib.data.proto.PersonProtos.Person build() { + eu.dnetlib.data.proto.PersonProtos.Person result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + private eu.dnetlib.data.proto.PersonProtos.Person buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + eu.dnetlib.data.proto.PersonProtos.Person result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return result; + } + + public eu.dnetlib.data.proto.PersonProtos.Person buildPartial() { + eu.dnetlib.data.proto.PersonProtos.Person result = new eu.dnetlib.data.proto.PersonProtos.Person(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + if (metadataBuilder_ == null) { + result.metadata_ = metadata_; + } else { + result.metadata_ = metadataBuilder_.build(); + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof eu.dnetlib.data.proto.PersonProtos.Person) { + return mergeFrom((eu.dnetlib.data.proto.PersonProtos.Person)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(eu.dnetlib.data.proto.PersonProtos.Person other) { + if (other == eu.dnetlib.data.proto.PersonProtos.Person.getDefaultInstance()) return this; + if (other.hasMetadata()) { + mergeMetadata(other.getMetadata()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + if (hasMetadata()) { + if (!getMetadata().isInitialized()) { + + return false; + } + } + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + } + break; + } + case 18: { + eu.dnetlib.data.proto.PersonProtos.Person.Metadata.Builder subBuilder = eu.dnetlib.data.proto.PersonProtos.Person.Metadata.newBuilder(); + if (hasMetadata()) { + subBuilder.mergeFrom(getMetadata()); + } + input.readMessage(subBuilder, extensionRegistry); + setMetadata(subBuilder.buildPartial()); + break; + } + } + } + } + + private int bitField0_; + + // optional .eu.dnetlib.data.proto.Person.Metadata metadata = 2; + private eu.dnetlib.data.proto.PersonProtos.Person.Metadata metadata_ = eu.dnetlib.data.proto.PersonProtos.Person.Metadata.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.PersonProtos.Person.Metadata, eu.dnetlib.data.proto.PersonProtos.Person.Metadata.Builder, eu.dnetlib.data.proto.PersonProtos.Person.MetadataOrBuilder> metadataBuilder_; + public boolean hasMetadata() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.PersonProtos.Person.Metadata getMetadata() { + if (metadataBuilder_ == null) { + return metadata_; + } else { + return metadataBuilder_.getMessage(); + } + } + public Builder setMetadata(eu.dnetlib.data.proto.PersonProtos.Person.Metadata value) { + if (metadataBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + metadata_ = value; + onChanged(); + } else { + metadataBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder setMetadata( + eu.dnetlib.data.proto.PersonProtos.Person.Metadata.Builder builderForValue) { + if (metadataBuilder_ == null) { + metadata_ = builderForValue.build(); + onChanged(); + } else { + metadataBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder mergeMetadata(eu.dnetlib.data.proto.PersonProtos.Person.Metadata value) { + if (metadataBuilder_ == null) { + if (((bitField0_ & 0x00000001) == 0x00000001) && + metadata_ != eu.dnetlib.data.proto.PersonProtos.Person.Metadata.getDefaultInstance()) { + metadata_ = + eu.dnetlib.data.proto.PersonProtos.Person.Metadata.newBuilder(metadata_).mergeFrom(value).buildPartial(); + } else { + metadata_ = value; + } + onChanged(); + } else { + metadataBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder clearMetadata() { + if (metadataBuilder_ == null) { + metadata_ = eu.dnetlib.data.proto.PersonProtos.Person.Metadata.getDefaultInstance(); + onChanged(); + } else { + metadataBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + public eu.dnetlib.data.proto.PersonProtos.Person.Metadata.Builder getMetadataBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return getMetadataFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.PersonProtos.Person.MetadataOrBuilder getMetadataOrBuilder() { + if (metadataBuilder_ != null) { + return metadataBuilder_.getMessageOrBuilder(); + } else { + return metadata_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.PersonProtos.Person.Metadata, eu.dnetlib.data.proto.PersonProtos.Person.Metadata.Builder, eu.dnetlib.data.proto.PersonProtos.Person.MetadataOrBuilder> + getMetadataFieldBuilder() { + if (metadataBuilder_ == null) { + metadataBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.PersonProtos.Person.Metadata, eu.dnetlib.data.proto.PersonProtos.Person.Metadata.Builder, eu.dnetlib.data.proto.PersonProtos.Person.MetadataOrBuilder>( + metadata_, + getParentForChildren(), + isClean()); + metadata_ = null; + } + return metadataBuilder_; + } + + // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.Person) + } + + static { + defaultInstance = new Person(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.Person) + } + + private static com.google.protobuf.Descriptors.Descriptor + internal_static_eu_dnetlib_data_proto_Person_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_eu_dnetlib_data_proto_Person_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_eu_dnetlib_data_proto_Person_Metadata_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_eu_dnetlib_data_proto_Person_Metadata_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\014Person.proto\022\025eu.dnetlib.data.proto\032\017F" + + "ieldType.proto\"\363\001\n\006Person\0228\n\010metadata\030\002 " + + "\001(\0132&.eu.dnetlib.data.proto.Person.Metad" + + "ata\032\256\001\n\010Metadata\022\020\n\010fullname\030\001 \002(\t\022\021\n\tfi" + + "rstname\030\002 \001(\t\022\020\n\010lastname\030\003 \001(\t\022\r\n\005pubID" + + "\030\004 \002(\t\022\016\n\006pubDOI\030\005 \001(\t\022\r\n\005orcid\030\006 \001(\t\022\014\n" + + "\004rank\030\007 \002(\005\022\021\n\tcoauthors\030\010 \003(\t\022\016\n\006topics" + + "\030\t \003(\001\022\014\n\004area\030\n \002(\tB%\n\025eu.dnetlib.data." + + "protoB\014PersonProtos" + }; + com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = + new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { + public com.google.protobuf.ExtensionRegistry assignDescriptors( + com.google.protobuf.Descriptors.FileDescriptor root) { + descriptor = root; + internal_static_eu_dnetlib_data_proto_Person_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_eu_dnetlib_data_proto_Person_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_eu_dnetlib_data_proto_Person_descriptor, + new java.lang.String[] { "Metadata", }, + eu.dnetlib.data.proto.PersonProtos.Person.class, + eu.dnetlib.data.proto.PersonProtos.Person.Builder.class); + internal_static_eu_dnetlib_data_proto_Person_Metadata_descriptor = + internal_static_eu_dnetlib_data_proto_Person_descriptor.getNestedTypes().get(0); + internal_static_eu_dnetlib_data_proto_Person_Metadata_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_eu_dnetlib_data_proto_Person_Metadata_descriptor, + new java.lang.String[] { "Fullname", "Firstname", "Lastname", "PubID", "PubDOI", "Orcid", "Rank", "Coauthors", "Topics", "Area", }, + eu.dnetlib.data.proto.PersonProtos.Person.Metadata.class, + eu.dnetlib.data.proto.PersonProtos.Person.Metadata.Builder.class); + return null; + } + }; + com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + eu.dnetlib.data.proto.FieldTypeProtos.getDescriptor(), + }, assigner); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/ProjectOrganizationProtos.java b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/ProjectOrganizationProtos.java new file mode 100644 index 000000000..7604c67d0 --- /dev/null +++ b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/ProjectOrganizationProtos.java @@ -0,0 +1,1112 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: Project_Organization.proto + +package eu.dnetlib.data.proto; + +public final class ProjectOrganizationProtos { + private ProjectOrganizationProtos() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + } + public interface ProjectOrganizationOrBuilder + extends com.google.protobuf.MessageOrBuilder { + + // optional .eu.dnetlib.data.proto.ProjectOrganization.Participation participation = 1; + boolean hasParticipation(); + eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation getParticipation(); + eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.ParticipationOrBuilder getParticipationOrBuilder(); + } + public static final class ProjectOrganization extends + com.google.protobuf.GeneratedMessage + implements ProjectOrganizationOrBuilder { + // Use ProjectOrganization.newBuilder() to construct. + private ProjectOrganization(Builder builder) { + super(builder); + } + private ProjectOrganization(boolean noInit) {} + + private static final ProjectOrganization defaultInstance; + public static ProjectOrganization getDefaultInstance() { + return defaultInstance; + } + + public ProjectOrganization getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.ProjectOrganizationProtos.internal_static_eu_dnetlib_data_proto_ProjectOrganization_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.ProjectOrganizationProtos.internal_static_eu_dnetlib_data_proto_ProjectOrganization_fieldAccessorTable; + } + + public interface ParticipationOrBuilder + extends com.google.protobuf.MessageOrBuilder { + + // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; + boolean hasRelMetadata(); + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata(); + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder(); + + // optional string participantnumber = 2; + boolean hasParticipantnumber(); + String getParticipantnumber(); + } + public static final class Participation extends + com.google.protobuf.GeneratedMessage + implements ParticipationOrBuilder { + // Use Participation.newBuilder() to construct. + private Participation(Builder builder) { + super(builder); + } + private Participation(boolean noInit) {} + + private static final Participation defaultInstance; + public static Participation getDefaultInstance() { + return defaultInstance; + } + + public Participation getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.ProjectOrganizationProtos.internal_static_eu_dnetlib_data_proto_ProjectOrganization_Participation_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.ProjectOrganizationProtos.internal_static_eu_dnetlib_data_proto_ProjectOrganization_Participation_fieldAccessorTable; + } + + public enum RelName + implements com.google.protobuf.ProtocolMessageEnum { + isParticipant(0, 1), + hasParticipant(1, 2), + ; + + public static final int isParticipant_VALUE = 1; + public static final int hasParticipant_VALUE = 2; + + + public final int getNumber() { return value; } + + public static RelName valueOf(int value) { + switch (value) { + case 1: return isParticipant; + case 2: return hasParticipant; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static com.google.protobuf.Internal.EnumLiteMap + internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public RelName findValueByNumber(int number) { + return RelName.valueOf(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor + getValueDescriptor() { + return getDescriptor().getValues().get(index); + } + public final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptorForType() { + return getDescriptor(); + } + public static final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptor() { + return eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation.getDescriptor().getEnumTypes().get(0); + } + + private static final RelName[] VALUES = { + isParticipant, hasParticipant, + }; + + public static RelName valueOf( + com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "EnumValueDescriptor is not for this type."); + } + return VALUES[desc.getIndex()]; + } + + private final int index; + private final int value; + + private RelName(int index, int value) { + this.index = index; + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:eu.dnetlib.data.proto.ProjectOrganization.Participation.RelName) + } + + private int bitField0_; + // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; + public static final int RELMETADATA_FIELD_NUMBER = 1; + private eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata relMetadata_; + public boolean hasRelMetadata() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata() { + return relMetadata_; + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder() { + return relMetadata_; + } + + // optional string participantnumber = 2; + public static final int PARTICIPANTNUMBER_FIELD_NUMBER = 2; + private java.lang.Object participantnumber_; + public boolean hasParticipantnumber() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public String getParticipantnumber() { + java.lang.Object ref = participantnumber_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + participantnumber_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getParticipantnumberBytes() { + java.lang.Object ref = participantnumber_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + participantnumber_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private void initFields() { + relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); + participantnumber_ = ""; + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + if (!hasRelMetadata()) { + memoizedIsInitialized = 0; + return false; + } + if (!getRelMetadata().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeMessage(1, relMetadata_); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + output.writeBytes(2, getParticipantnumberBytes()); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, relMetadata_); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(2, getParticipantnumberBytes()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder + implements eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.ParticipationOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.ProjectOrganizationProtos.internal_static_eu_dnetlib_data_proto_ProjectOrganization_Participation_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.ProjectOrganizationProtos.internal_static_eu_dnetlib_data_proto_ProjectOrganization_Participation_fieldAccessorTable; + } + + // Construct using eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getRelMetadataFieldBuilder(); + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + if (relMetadataBuilder_ == null) { + relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); + } else { + relMetadataBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + participantnumber_ = ""; + bitField0_ = (bitField0_ & ~0x00000002); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation.getDescriptor(); + } + + public eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation getDefaultInstanceForType() { + return eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation.getDefaultInstance(); + } + + public eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation build() { + eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + private eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return result; + } + + public eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation buildPartial() { + eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation result = new eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + if (relMetadataBuilder_ == null) { + result.relMetadata_ = relMetadata_; + } else { + result.relMetadata_ = relMetadataBuilder_.build(); + } + if (((from_bitField0_ & 0x00000002) == 0x00000002)) { + to_bitField0_ |= 0x00000002; + } + result.participantnumber_ = participantnumber_; + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation) { + return mergeFrom((eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation other) { + if (other == eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation.getDefaultInstance()) return this; + if (other.hasRelMetadata()) { + mergeRelMetadata(other.getRelMetadata()); + } + if (other.hasParticipantnumber()) { + setParticipantnumber(other.getParticipantnumber()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + if (!hasRelMetadata()) { + + return false; + } + if (!getRelMetadata().isInitialized()) { + + return false; + } + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + } + break; + } + case 10: { + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder subBuilder = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.newBuilder(); + if (hasRelMetadata()) { + subBuilder.mergeFrom(getRelMetadata()); + } + input.readMessage(subBuilder, extensionRegistry); + setRelMetadata(subBuilder.buildPartial()); + break; + } + case 18: { + bitField0_ |= 0x00000002; + participantnumber_ = input.readBytes(); + break; + } + } + } + } + + private int bitField0_; + + // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; + private eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder> relMetadataBuilder_; + public boolean hasRelMetadata() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata() { + if (relMetadataBuilder_ == null) { + return relMetadata_; + } else { + return relMetadataBuilder_.getMessage(); + } + } + public Builder setRelMetadata(eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata value) { + if (relMetadataBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + relMetadata_ = value; + onChanged(); + } else { + relMetadataBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder setRelMetadata( + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder builderForValue) { + if (relMetadataBuilder_ == null) { + relMetadata_ = builderForValue.build(); + onChanged(); + } else { + relMetadataBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder mergeRelMetadata(eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata value) { + if (relMetadataBuilder_ == null) { + if (((bitField0_ & 0x00000001) == 0x00000001) && + relMetadata_ != eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance()) { + relMetadata_ = + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.newBuilder(relMetadata_).mergeFrom(value).buildPartial(); + } else { + relMetadata_ = value; + } + onChanged(); + } else { + relMetadataBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder clearRelMetadata() { + if (relMetadataBuilder_ == null) { + relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); + onChanged(); + } else { + relMetadataBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder getRelMetadataBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return getRelMetadataFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder() { + if (relMetadataBuilder_ != null) { + return relMetadataBuilder_.getMessageOrBuilder(); + } else { + return relMetadata_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder> + getRelMetadataFieldBuilder() { + if (relMetadataBuilder_ == null) { + relMetadataBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder>( + relMetadata_, + getParentForChildren(), + isClean()); + relMetadata_ = null; + } + return relMetadataBuilder_; + } + + // optional string participantnumber = 2; + private java.lang.Object participantnumber_ = ""; + public boolean hasParticipantnumber() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public String getParticipantnumber() { + java.lang.Object ref = participantnumber_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + participantnumber_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setParticipantnumber(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + participantnumber_ = value; + onChanged(); + return this; + } + public Builder clearParticipantnumber() { + bitField0_ = (bitField0_ & ~0x00000002); + participantnumber_ = getDefaultInstance().getParticipantnumber(); + onChanged(); + return this; + } + void setParticipantnumber(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000002; + participantnumber_ = value; + onChanged(); + } + + // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.ProjectOrganization.Participation) + } + + static { + defaultInstance = new Participation(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.ProjectOrganization.Participation) + } + + private int bitField0_; + // optional .eu.dnetlib.data.proto.ProjectOrganization.Participation participation = 1; + public static final int PARTICIPATION_FIELD_NUMBER = 1; + private eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation participation_; + public boolean hasParticipation() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation getParticipation() { + return participation_; + } + public eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.ParticipationOrBuilder getParticipationOrBuilder() { + return participation_; + } + + private void initFields() { + participation_ = eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation.getDefaultInstance(); + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + if (hasParticipation()) { + if (!getParticipation().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeMessage(1, participation_); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, participation_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder + implements eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganizationOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.ProjectOrganizationProtos.internal_static_eu_dnetlib_data_proto_ProjectOrganization_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.ProjectOrganizationProtos.internal_static_eu_dnetlib_data_proto_ProjectOrganization_fieldAccessorTable; + } + + // Construct using eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getParticipationFieldBuilder(); + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + if (participationBuilder_ == null) { + participation_ = eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation.getDefaultInstance(); + } else { + participationBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.getDescriptor(); + } + + public eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization getDefaultInstanceForType() { + return eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.getDefaultInstance(); + } + + public eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization build() { + eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + private eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return result; + } + + public eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization buildPartial() { + eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization result = new eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + if (participationBuilder_ == null) { + result.participation_ = participation_; + } else { + result.participation_ = participationBuilder_.build(); + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization) { + return mergeFrom((eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization other) { + if (other == eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.getDefaultInstance()) return this; + if (other.hasParticipation()) { + mergeParticipation(other.getParticipation()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + if (hasParticipation()) { + if (!getParticipation().isInitialized()) { + + return false; + } + } + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + } + break; + } + case 10: { + eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation.Builder subBuilder = eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation.newBuilder(); + if (hasParticipation()) { + subBuilder.mergeFrom(getParticipation()); + } + input.readMessage(subBuilder, extensionRegistry); + setParticipation(subBuilder.buildPartial()); + break; + } + } + } + } + + private int bitField0_; + + // optional .eu.dnetlib.data.proto.ProjectOrganization.Participation participation = 1; + private eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation participation_ = eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation, eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation.Builder, eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.ParticipationOrBuilder> participationBuilder_; + public boolean hasParticipation() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation getParticipation() { + if (participationBuilder_ == null) { + return participation_; + } else { + return participationBuilder_.getMessage(); + } + } + public Builder setParticipation(eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation value) { + if (participationBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + participation_ = value; + onChanged(); + } else { + participationBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder setParticipation( + eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation.Builder builderForValue) { + if (participationBuilder_ == null) { + participation_ = builderForValue.build(); + onChanged(); + } else { + participationBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder mergeParticipation(eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation value) { + if (participationBuilder_ == null) { + if (((bitField0_ & 0x00000001) == 0x00000001) && + participation_ != eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation.getDefaultInstance()) { + participation_ = + eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation.newBuilder(participation_).mergeFrom(value).buildPartial(); + } else { + participation_ = value; + } + onChanged(); + } else { + participationBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder clearParticipation() { + if (participationBuilder_ == null) { + participation_ = eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation.getDefaultInstance(); + onChanged(); + } else { + participationBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + public eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation.Builder getParticipationBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return getParticipationFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.ParticipationOrBuilder getParticipationOrBuilder() { + if (participationBuilder_ != null) { + return participationBuilder_.getMessageOrBuilder(); + } else { + return participation_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation, eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation.Builder, eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.ParticipationOrBuilder> + getParticipationFieldBuilder() { + if (participationBuilder_ == null) { + participationBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation, eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation.Builder, eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.ParticipationOrBuilder>( + participation_, + getParentForChildren(), + isClean()); + participation_ = null; + } + return participationBuilder_; + } + + // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.ProjectOrganization) + } + + static { + defaultInstance = new ProjectOrganization(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.ProjectOrganization) + } + + private static com.google.protobuf.Descriptors.Descriptor + internal_static_eu_dnetlib_data_proto_ProjectOrganization_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_eu_dnetlib_data_proto_ProjectOrganization_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_eu_dnetlib_data_proto_ProjectOrganization_Participation_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_eu_dnetlib_data_proto_ProjectOrganization_Participation_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\032Project_Organization.proto\022\025eu.dnetlib" + + ".data.proto\032\021RelMetadata.proto\"\376\001\n\023Proje" + + "ctOrganization\022O\n\rparticipation\030\001 \001(\01328." + + "eu.dnetlib.data.proto.ProjectOrganizatio" + + "n.Participation\032\225\001\n\rParticipation\0227\n\013rel" + + "Metadata\030\001 \002(\0132\".eu.dnetlib.data.proto.R" + + "elMetadata\022\031\n\021participantnumber\030\002 \001(\t\"0\n" + + "\007RelName\022\021\n\risParticipant\020\001\022\022\n\016hasPartic" + + "ipant\020\002B2\n\025eu.dnetlib.data.protoB\031Projec" + + "tOrganizationProtos" + }; + com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = + new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { + public com.google.protobuf.ExtensionRegistry assignDescriptors( + com.google.protobuf.Descriptors.FileDescriptor root) { + descriptor = root; + internal_static_eu_dnetlib_data_proto_ProjectOrganization_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_eu_dnetlib_data_proto_ProjectOrganization_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_eu_dnetlib_data_proto_ProjectOrganization_descriptor, + new java.lang.String[] { "Participation", }, + eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.class, + eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Builder.class); + internal_static_eu_dnetlib_data_proto_ProjectOrganization_Participation_descriptor = + internal_static_eu_dnetlib_data_proto_ProjectOrganization_descriptor.getNestedTypes().get(0); + internal_static_eu_dnetlib_data_proto_ProjectOrganization_Participation_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_eu_dnetlib_data_proto_ProjectOrganization_Participation_descriptor, + new java.lang.String[] { "RelMetadata", "Participantnumber", }, + eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation.class, + eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation.Builder.class); + return null; + } + }; + com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + eu.dnetlib.data.proto.RelMetadataProtos.getDescriptor(), + }, assigner); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/ProjectProtos.java b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/ProjectProtos.java new file mode 100644 index 000000000..27ba77dfa --- /dev/null +++ b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/ProjectProtos.java @@ -0,0 +1,4486 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: Project.proto + +package eu.dnetlib.data.proto; + +public final class ProjectProtos { + private ProjectProtos() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + } + public interface ProjectOrBuilder + extends com.google.protobuf.MessageOrBuilder { + + // optional .eu.dnetlib.data.proto.Project.Metadata metadata = 2; + boolean hasMetadata(); + eu.dnetlib.data.proto.ProjectProtos.Project.Metadata getMetadata(); + eu.dnetlib.data.proto.ProjectProtos.Project.MetadataOrBuilder getMetadataOrBuilder(); + } + public static final class Project extends + com.google.protobuf.GeneratedMessage + implements ProjectOrBuilder { + // Use Project.newBuilder() to construct. + private Project(Builder builder) { + super(builder); + } + private Project(boolean noInit) {} + + private static final Project defaultInstance; + public static Project getDefaultInstance() { + return defaultInstance; + } + + public Project getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.ProjectProtos.internal_static_eu_dnetlib_data_proto_Project_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.ProjectProtos.internal_static_eu_dnetlib_data_proto_Project_fieldAccessorTable; + } + + public interface MetadataOrBuilder + extends com.google.protobuf.MessageOrBuilder { + + // optional .eu.dnetlib.data.proto.StringField websiteurl = 1; + boolean hasWebsiteurl(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getWebsiteurl(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getWebsiteurlOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField code = 2; + boolean hasCode(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getCode(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getCodeOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField acronym = 3; + boolean hasAcronym(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getAcronym(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getAcronymOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField title = 4; + boolean hasTitle(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getTitle(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getTitleOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField startdate = 5; + boolean hasStartdate(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getStartdate(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getStartdateOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField enddate = 6; + boolean hasEnddate(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getEnddate(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEnddateOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField callidentifier = 7; + boolean hasCallidentifier(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getCallidentifier(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getCallidentifierOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField keywords = 8; + boolean hasKeywords(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getKeywords(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getKeywordsOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField duration = 9; + boolean hasDuration(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getDuration(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDurationOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField ecsc39 = 10; + boolean hasEcsc39(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcsc39(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcsc39OrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField oamandatepublications = 11; + boolean hasOamandatepublications(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getOamandatepublications(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOamandatepublicationsOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField ecarticle29_3 = 12; + boolean hasEcarticle293(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcarticle293(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcarticle293OrBuilder(); + + // repeated .eu.dnetlib.data.proto.StructuredProperty subjects = 14; + java.util.List + getSubjectsList(); + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty getSubjects(int index); + int getSubjectsCount(); + java.util.List + getSubjectsOrBuilderList(); + eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder getSubjectsOrBuilder( + int index); + + // repeated .eu.dnetlib.data.proto.StringField fundingtree = 15; + java.util.List + getFundingtreeList(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getFundingtree(int index); + int getFundingtreeCount(); + java.util.List + getFundingtreeOrBuilderList(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getFundingtreeOrBuilder( + int index); + + // optional .eu.dnetlib.data.proto.Qualifier contracttype = 13; + boolean hasContracttype(); + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getContracttype(); + eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getContracttypeOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField optional1 = 16; + boolean hasOptional1(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getOptional1(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOptional1OrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField optional2 = 17; + boolean hasOptional2(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getOptional2(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOptional2OrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField jsonextrainfo = 18; + boolean hasJsonextrainfo(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getJsonextrainfo(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getJsonextrainfoOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField contactfullname = 19; + boolean hasContactfullname(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getContactfullname(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getContactfullnameOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField contactfax = 20; + boolean hasContactfax(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getContactfax(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getContactfaxOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField contactphone = 21; + boolean hasContactphone(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getContactphone(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getContactphoneOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField contactemail = 22; + boolean hasContactemail(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getContactemail(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getContactemailOrBuilder(); + } + public static final class Metadata extends + com.google.protobuf.GeneratedMessage + implements MetadataOrBuilder { + // Use Metadata.newBuilder() to construct. + private Metadata(Builder builder) { + super(builder); + } + private Metadata(boolean noInit) {} + + private static final Metadata defaultInstance; + public static Metadata getDefaultInstance() { + return defaultInstance; + } + + public Metadata getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.ProjectProtos.internal_static_eu_dnetlib_data_proto_Project_Metadata_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.ProjectProtos.internal_static_eu_dnetlib_data_proto_Project_Metadata_fieldAccessorTable; + } + + private int bitField0_; + // optional .eu.dnetlib.data.proto.StringField websiteurl = 1; + public static final int WEBSITEURL_FIELD_NUMBER = 1; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField websiteurl_; + public boolean hasWebsiteurl() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getWebsiteurl() { + return websiteurl_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getWebsiteurlOrBuilder() { + return websiteurl_; + } + + // optional .eu.dnetlib.data.proto.StringField code = 2; + public static final int CODE_FIELD_NUMBER = 2; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField code_; + public boolean hasCode() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getCode() { + return code_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getCodeOrBuilder() { + return code_; + } + + // optional .eu.dnetlib.data.proto.StringField acronym = 3; + public static final int ACRONYM_FIELD_NUMBER = 3; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField acronym_; + public boolean hasAcronym() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getAcronym() { + return acronym_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getAcronymOrBuilder() { + return acronym_; + } + + // optional .eu.dnetlib.data.proto.StringField title = 4; + public static final int TITLE_FIELD_NUMBER = 4; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField title_; + public boolean hasTitle() { + return ((bitField0_ & 0x00000008) == 0x00000008); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getTitle() { + return title_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getTitleOrBuilder() { + return title_; + } + + // optional .eu.dnetlib.data.proto.StringField startdate = 5; + public static final int STARTDATE_FIELD_NUMBER = 5; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField startdate_; + public boolean hasStartdate() { + return ((bitField0_ & 0x00000010) == 0x00000010); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getStartdate() { + return startdate_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getStartdateOrBuilder() { + return startdate_; + } + + // optional .eu.dnetlib.data.proto.StringField enddate = 6; + public static final int ENDDATE_FIELD_NUMBER = 6; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField enddate_; + public boolean hasEnddate() { + return ((bitField0_ & 0x00000020) == 0x00000020); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEnddate() { + return enddate_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEnddateOrBuilder() { + return enddate_; + } + + // optional .eu.dnetlib.data.proto.StringField callidentifier = 7; + public static final int CALLIDENTIFIER_FIELD_NUMBER = 7; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField callidentifier_; + public boolean hasCallidentifier() { + return ((bitField0_ & 0x00000040) == 0x00000040); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getCallidentifier() { + return callidentifier_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getCallidentifierOrBuilder() { + return callidentifier_; + } + + // optional .eu.dnetlib.data.proto.StringField keywords = 8; + public static final int KEYWORDS_FIELD_NUMBER = 8; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField keywords_; + public boolean hasKeywords() { + return ((bitField0_ & 0x00000080) == 0x00000080); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getKeywords() { + return keywords_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getKeywordsOrBuilder() { + return keywords_; + } + + // optional .eu.dnetlib.data.proto.StringField duration = 9; + public static final int DURATION_FIELD_NUMBER = 9; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField duration_; + public boolean hasDuration() { + return ((bitField0_ & 0x00000100) == 0x00000100); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getDuration() { + return duration_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDurationOrBuilder() { + return duration_; + } + + // optional .eu.dnetlib.data.proto.StringField ecsc39 = 10; + public static final int ECSC39_FIELD_NUMBER = 10; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField ecsc39_; + public boolean hasEcsc39() { + return ((bitField0_ & 0x00000200) == 0x00000200); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcsc39() { + return ecsc39_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcsc39OrBuilder() { + return ecsc39_; + } + + // optional .eu.dnetlib.data.proto.StringField oamandatepublications = 11; + public static final int OAMANDATEPUBLICATIONS_FIELD_NUMBER = 11; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField oamandatepublications_; + public boolean hasOamandatepublications() { + return ((bitField0_ & 0x00000400) == 0x00000400); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getOamandatepublications() { + return oamandatepublications_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOamandatepublicationsOrBuilder() { + return oamandatepublications_; + } + + // optional .eu.dnetlib.data.proto.StringField ecarticle29_3 = 12; + public static final int ECARTICLE29_3_FIELD_NUMBER = 12; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField ecarticle293_; + public boolean hasEcarticle293() { + return ((bitField0_ & 0x00000800) == 0x00000800); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcarticle293() { + return ecarticle293_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcarticle293OrBuilder() { + return ecarticle293_; + } + + // repeated .eu.dnetlib.data.proto.StructuredProperty subjects = 14; + public static final int SUBJECTS_FIELD_NUMBER = 14; + private java.util.List subjects_; + public java.util.List getSubjectsList() { + return subjects_; + } + public java.util.List + getSubjectsOrBuilderList() { + return subjects_; + } + public int getSubjectsCount() { + return subjects_.size(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty getSubjects(int index) { + return subjects_.get(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder getSubjectsOrBuilder( + int index) { + return subjects_.get(index); + } + + // repeated .eu.dnetlib.data.proto.StringField fundingtree = 15; + public static final int FUNDINGTREE_FIELD_NUMBER = 15; + private java.util.List fundingtree_; + public java.util.List getFundingtreeList() { + return fundingtree_; + } + public java.util.List + getFundingtreeOrBuilderList() { + return fundingtree_; + } + public int getFundingtreeCount() { + return fundingtree_.size(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getFundingtree(int index) { + return fundingtree_.get(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getFundingtreeOrBuilder( + int index) { + return fundingtree_.get(index); + } + + // optional .eu.dnetlib.data.proto.Qualifier contracttype = 13; + public static final int CONTRACTTYPE_FIELD_NUMBER = 13; + private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier contracttype_; + public boolean hasContracttype() { + return ((bitField0_ & 0x00001000) == 0x00001000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getContracttype() { + return contracttype_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getContracttypeOrBuilder() { + return contracttype_; + } + + // optional .eu.dnetlib.data.proto.StringField optional1 = 16; + public static final int OPTIONAL1_FIELD_NUMBER = 16; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField optional1_; + public boolean hasOptional1() { + return ((bitField0_ & 0x00002000) == 0x00002000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getOptional1() { + return optional1_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOptional1OrBuilder() { + return optional1_; + } + + // optional .eu.dnetlib.data.proto.StringField optional2 = 17; + public static final int OPTIONAL2_FIELD_NUMBER = 17; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField optional2_; + public boolean hasOptional2() { + return ((bitField0_ & 0x00004000) == 0x00004000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getOptional2() { + return optional2_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOptional2OrBuilder() { + return optional2_; + } + + // optional .eu.dnetlib.data.proto.StringField jsonextrainfo = 18; + public static final int JSONEXTRAINFO_FIELD_NUMBER = 18; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField jsonextrainfo_; + public boolean hasJsonextrainfo() { + return ((bitField0_ & 0x00008000) == 0x00008000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getJsonextrainfo() { + return jsonextrainfo_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getJsonextrainfoOrBuilder() { + return jsonextrainfo_; + } + + // optional .eu.dnetlib.data.proto.StringField contactfullname = 19; + public static final int CONTACTFULLNAME_FIELD_NUMBER = 19; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField contactfullname_; + public boolean hasContactfullname() { + return ((bitField0_ & 0x00010000) == 0x00010000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getContactfullname() { + return contactfullname_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getContactfullnameOrBuilder() { + return contactfullname_; + } + + // optional .eu.dnetlib.data.proto.StringField contactfax = 20; + public static final int CONTACTFAX_FIELD_NUMBER = 20; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField contactfax_; + public boolean hasContactfax() { + return ((bitField0_ & 0x00020000) == 0x00020000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getContactfax() { + return contactfax_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getContactfaxOrBuilder() { + return contactfax_; + } + + // optional .eu.dnetlib.data.proto.StringField contactphone = 21; + public static final int CONTACTPHONE_FIELD_NUMBER = 21; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField contactphone_; + public boolean hasContactphone() { + return ((bitField0_ & 0x00040000) == 0x00040000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getContactphone() { + return contactphone_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getContactphoneOrBuilder() { + return contactphone_; + } + + // optional .eu.dnetlib.data.proto.StringField contactemail = 22; + public static final int CONTACTEMAIL_FIELD_NUMBER = 22; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField contactemail_; + public boolean hasContactemail() { + return ((bitField0_ & 0x00080000) == 0x00080000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getContactemail() { + return contactemail_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getContactemailOrBuilder() { + return contactemail_; + } + + private void initFields() { + websiteurl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + code_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + acronym_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + title_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + startdate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + enddate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + callidentifier_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + keywords_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + duration_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + ecsc39_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + oamandatepublications_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + ecarticle293_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + subjects_ = java.util.Collections.emptyList(); + fundingtree_ = java.util.Collections.emptyList(); + contracttype_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + optional1_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + optional2_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + jsonextrainfo_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + contactfullname_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + contactfax_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + contactphone_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + contactemail_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + if (hasWebsiteurl()) { + if (!getWebsiteurl().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasCode()) { + if (!getCode().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasAcronym()) { + if (!getAcronym().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasTitle()) { + if (!getTitle().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasStartdate()) { + if (!getStartdate().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasEnddate()) { + if (!getEnddate().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasCallidentifier()) { + if (!getCallidentifier().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasKeywords()) { + if (!getKeywords().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasDuration()) { + if (!getDuration().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasEcsc39()) { + if (!getEcsc39().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasOamandatepublications()) { + if (!getOamandatepublications().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasEcarticle293()) { + if (!getEcarticle293().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + for (int i = 0; i < getSubjectsCount(); i++) { + if (!getSubjects(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + for (int i = 0; i < getFundingtreeCount(); i++) { + if (!getFundingtree(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasContracttype()) { + if (!getContracttype().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasOptional1()) { + if (!getOptional1().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasOptional2()) { + if (!getOptional2().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasJsonextrainfo()) { + if (!getJsonextrainfo().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasContactfullname()) { + if (!getContactfullname().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasContactfax()) { + if (!getContactfax().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasContactphone()) { + if (!getContactphone().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasContactemail()) { + if (!getContactemail().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeMessage(1, websiteurl_); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + output.writeMessage(2, code_); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + output.writeMessage(3, acronym_); + } + if (((bitField0_ & 0x00000008) == 0x00000008)) { + output.writeMessage(4, title_); + } + if (((bitField0_ & 0x00000010) == 0x00000010)) { + output.writeMessage(5, startdate_); + } + if (((bitField0_ & 0x00000020) == 0x00000020)) { + output.writeMessage(6, enddate_); + } + if (((bitField0_ & 0x00000040) == 0x00000040)) { + output.writeMessage(7, callidentifier_); + } + if (((bitField0_ & 0x00000080) == 0x00000080)) { + output.writeMessage(8, keywords_); + } + if (((bitField0_ & 0x00000100) == 0x00000100)) { + output.writeMessage(9, duration_); + } + if (((bitField0_ & 0x00000200) == 0x00000200)) { + output.writeMessage(10, ecsc39_); + } + if (((bitField0_ & 0x00000400) == 0x00000400)) { + output.writeMessage(11, oamandatepublications_); + } + if (((bitField0_ & 0x00000800) == 0x00000800)) { + output.writeMessage(12, ecarticle293_); + } + if (((bitField0_ & 0x00001000) == 0x00001000)) { + output.writeMessage(13, contracttype_); + } + for (int i = 0; i < subjects_.size(); i++) { + output.writeMessage(14, subjects_.get(i)); + } + for (int i = 0; i < fundingtree_.size(); i++) { + output.writeMessage(15, fundingtree_.get(i)); + } + if (((bitField0_ & 0x00002000) == 0x00002000)) { + output.writeMessage(16, optional1_); + } + if (((bitField0_ & 0x00004000) == 0x00004000)) { + output.writeMessage(17, optional2_); + } + if (((bitField0_ & 0x00008000) == 0x00008000)) { + output.writeMessage(18, jsonextrainfo_); + } + if (((bitField0_ & 0x00010000) == 0x00010000)) { + output.writeMessage(19, contactfullname_); + } + if (((bitField0_ & 0x00020000) == 0x00020000)) { + output.writeMessage(20, contactfax_); + } + if (((bitField0_ & 0x00040000) == 0x00040000)) { + output.writeMessage(21, contactphone_); + } + if (((bitField0_ & 0x00080000) == 0x00080000)) { + output.writeMessage(22, contactemail_); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, websiteurl_); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(2, code_); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(3, acronym_); + } + if (((bitField0_ & 0x00000008) == 0x00000008)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(4, title_); + } + if (((bitField0_ & 0x00000010) == 0x00000010)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(5, startdate_); + } + if (((bitField0_ & 0x00000020) == 0x00000020)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(6, enddate_); + } + if (((bitField0_ & 0x00000040) == 0x00000040)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(7, callidentifier_); + } + if (((bitField0_ & 0x00000080) == 0x00000080)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(8, keywords_); + } + if (((bitField0_ & 0x00000100) == 0x00000100)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(9, duration_); + } + if (((bitField0_ & 0x00000200) == 0x00000200)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(10, ecsc39_); + } + if (((bitField0_ & 0x00000400) == 0x00000400)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(11, oamandatepublications_); + } + if (((bitField0_ & 0x00000800) == 0x00000800)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(12, ecarticle293_); + } + if (((bitField0_ & 0x00001000) == 0x00001000)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(13, contracttype_); + } + for (int i = 0; i < subjects_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(14, subjects_.get(i)); + } + for (int i = 0; i < fundingtree_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(15, fundingtree_.get(i)); + } + if (((bitField0_ & 0x00002000) == 0x00002000)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(16, optional1_); + } + if (((bitField0_ & 0x00004000) == 0x00004000)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(17, optional2_); + } + if (((bitField0_ & 0x00008000) == 0x00008000)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(18, jsonextrainfo_); + } + if (((bitField0_ & 0x00010000) == 0x00010000)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(19, contactfullname_); + } + if (((bitField0_ & 0x00020000) == 0x00020000)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(20, contactfax_); + } + if (((bitField0_ & 0x00040000) == 0x00040000)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(21, contactphone_); + } + if (((bitField0_ & 0x00080000) == 0x00080000)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(22, contactemail_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static eu.dnetlib.data.proto.ProjectProtos.Project.Metadata parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.ProjectProtos.Project.Metadata parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ProjectProtos.Project.Metadata parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.ProjectProtos.Project.Metadata parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ProjectProtos.Project.Metadata parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.ProjectProtos.Project.Metadata parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ProjectProtos.Project.Metadata parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.ProjectProtos.Project.Metadata parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.ProjectProtos.Project.Metadata parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.ProjectProtos.Project.Metadata parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(eu.dnetlib.data.proto.ProjectProtos.Project.Metadata prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder + implements eu.dnetlib.data.proto.ProjectProtos.Project.MetadataOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.ProjectProtos.internal_static_eu_dnetlib_data_proto_Project_Metadata_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.ProjectProtos.internal_static_eu_dnetlib_data_proto_Project_Metadata_fieldAccessorTable; + } + + // Construct using eu.dnetlib.data.proto.ProjectProtos.Project.Metadata.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getWebsiteurlFieldBuilder(); + getCodeFieldBuilder(); + getAcronymFieldBuilder(); + getTitleFieldBuilder(); + getStartdateFieldBuilder(); + getEnddateFieldBuilder(); + getCallidentifierFieldBuilder(); + getKeywordsFieldBuilder(); + getDurationFieldBuilder(); + getEcsc39FieldBuilder(); + getOamandatepublicationsFieldBuilder(); + getEcarticle293FieldBuilder(); + getSubjectsFieldBuilder(); + getFundingtreeFieldBuilder(); + getContracttypeFieldBuilder(); + getOptional1FieldBuilder(); + getOptional2FieldBuilder(); + getJsonextrainfoFieldBuilder(); + getContactfullnameFieldBuilder(); + getContactfaxFieldBuilder(); + getContactphoneFieldBuilder(); + getContactemailFieldBuilder(); + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + if (websiteurlBuilder_ == null) { + websiteurl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + websiteurlBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + if (codeBuilder_ == null) { + code_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + codeBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000002); + if (acronymBuilder_ == null) { + acronym_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + acronymBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000004); + if (titleBuilder_ == null) { + title_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + titleBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000008); + if (startdateBuilder_ == null) { + startdate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + startdateBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000010); + if (enddateBuilder_ == null) { + enddate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + enddateBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000020); + if (callidentifierBuilder_ == null) { + callidentifier_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + callidentifierBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000040); + if (keywordsBuilder_ == null) { + keywords_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + keywordsBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000080); + if (durationBuilder_ == null) { + duration_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + durationBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000100); + if (ecsc39Builder_ == null) { + ecsc39_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + ecsc39Builder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000200); + if (oamandatepublicationsBuilder_ == null) { + oamandatepublications_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + oamandatepublicationsBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000400); + if (ecarticle293Builder_ == null) { + ecarticle293_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + ecarticle293Builder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000800); + if (subjectsBuilder_ == null) { + subjects_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00001000); + } else { + subjectsBuilder_.clear(); + } + if (fundingtreeBuilder_ == null) { + fundingtree_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00002000); + } else { + fundingtreeBuilder_.clear(); + } + if (contracttypeBuilder_ == null) { + contracttype_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + } else { + contracttypeBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00004000); + if (optional1Builder_ == null) { + optional1_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + optional1Builder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00008000); + if (optional2Builder_ == null) { + optional2_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + optional2Builder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00010000); + if (jsonextrainfoBuilder_ == null) { + jsonextrainfo_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + jsonextrainfoBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00020000); + if (contactfullnameBuilder_ == null) { + contactfullname_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + contactfullnameBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00040000); + if (contactfaxBuilder_ == null) { + contactfax_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + contactfaxBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00080000); + if (contactphoneBuilder_ == null) { + contactphone_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + contactphoneBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00100000); + if (contactemailBuilder_ == null) { + contactemail_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + contactemailBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00200000); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return eu.dnetlib.data.proto.ProjectProtos.Project.Metadata.getDescriptor(); + } + + public eu.dnetlib.data.proto.ProjectProtos.Project.Metadata getDefaultInstanceForType() { + return eu.dnetlib.data.proto.ProjectProtos.Project.Metadata.getDefaultInstance(); + } + + public eu.dnetlib.data.proto.ProjectProtos.Project.Metadata build() { + eu.dnetlib.data.proto.ProjectProtos.Project.Metadata result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + private eu.dnetlib.data.proto.ProjectProtos.Project.Metadata buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + eu.dnetlib.data.proto.ProjectProtos.Project.Metadata result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return result; + } + + public eu.dnetlib.data.proto.ProjectProtos.Project.Metadata buildPartial() { + eu.dnetlib.data.proto.ProjectProtos.Project.Metadata result = new eu.dnetlib.data.proto.ProjectProtos.Project.Metadata(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + if (websiteurlBuilder_ == null) { + result.websiteurl_ = websiteurl_; + } else { + result.websiteurl_ = websiteurlBuilder_.build(); + } + if (((from_bitField0_ & 0x00000002) == 0x00000002)) { + to_bitField0_ |= 0x00000002; + } + if (codeBuilder_ == null) { + result.code_ = code_; + } else { + result.code_ = codeBuilder_.build(); + } + if (((from_bitField0_ & 0x00000004) == 0x00000004)) { + to_bitField0_ |= 0x00000004; + } + if (acronymBuilder_ == null) { + result.acronym_ = acronym_; + } else { + result.acronym_ = acronymBuilder_.build(); + } + if (((from_bitField0_ & 0x00000008) == 0x00000008)) { + to_bitField0_ |= 0x00000008; + } + if (titleBuilder_ == null) { + result.title_ = title_; + } else { + result.title_ = titleBuilder_.build(); + } + if (((from_bitField0_ & 0x00000010) == 0x00000010)) { + to_bitField0_ |= 0x00000010; + } + if (startdateBuilder_ == null) { + result.startdate_ = startdate_; + } else { + result.startdate_ = startdateBuilder_.build(); + } + if (((from_bitField0_ & 0x00000020) == 0x00000020)) { + to_bitField0_ |= 0x00000020; + } + if (enddateBuilder_ == null) { + result.enddate_ = enddate_; + } else { + result.enddate_ = enddateBuilder_.build(); + } + if (((from_bitField0_ & 0x00000040) == 0x00000040)) { + to_bitField0_ |= 0x00000040; + } + if (callidentifierBuilder_ == null) { + result.callidentifier_ = callidentifier_; + } else { + result.callidentifier_ = callidentifierBuilder_.build(); + } + if (((from_bitField0_ & 0x00000080) == 0x00000080)) { + to_bitField0_ |= 0x00000080; + } + if (keywordsBuilder_ == null) { + result.keywords_ = keywords_; + } else { + result.keywords_ = keywordsBuilder_.build(); + } + if (((from_bitField0_ & 0x00000100) == 0x00000100)) { + to_bitField0_ |= 0x00000100; + } + if (durationBuilder_ == null) { + result.duration_ = duration_; + } else { + result.duration_ = durationBuilder_.build(); + } + if (((from_bitField0_ & 0x00000200) == 0x00000200)) { + to_bitField0_ |= 0x00000200; + } + if (ecsc39Builder_ == null) { + result.ecsc39_ = ecsc39_; + } else { + result.ecsc39_ = ecsc39Builder_.build(); + } + if (((from_bitField0_ & 0x00000400) == 0x00000400)) { + to_bitField0_ |= 0x00000400; + } + if (oamandatepublicationsBuilder_ == null) { + result.oamandatepublications_ = oamandatepublications_; + } else { + result.oamandatepublications_ = oamandatepublicationsBuilder_.build(); + } + if (((from_bitField0_ & 0x00000800) == 0x00000800)) { + to_bitField0_ |= 0x00000800; + } + if (ecarticle293Builder_ == null) { + result.ecarticle293_ = ecarticle293_; + } else { + result.ecarticle293_ = ecarticle293Builder_.build(); + } + if (subjectsBuilder_ == null) { + if (((bitField0_ & 0x00001000) == 0x00001000)) { + subjects_ = java.util.Collections.unmodifiableList(subjects_); + bitField0_ = (bitField0_ & ~0x00001000); + } + result.subjects_ = subjects_; + } else { + result.subjects_ = subjectsBuilder_.build(); + } + if (fundingtreeBuilder_ == null) { + if (((bitField0_ & 0x00002000) == 0x00002000)) { + fundingtree_ = java.util.Collections.unmodifiableList(fundingtree_); + bitField0_ = (bitField0_ & ~0x00002000); + } + result.fundingtree_ = fundingtree_; + } else { + result.fundingtree_ = fundingtreeBuilder_.build(); + } + if (((from_bitField0_ & 0x00004000) == 0x00004000)) { + to_bitField0_ |= 0x00001000; + } + if (contracttypeBuilder_ == null) { + result.contracttype_ = contracttype_; + } else { + result.contracttype_ = contracttypeBuilder_.build(); + } + if (((from_bitField0_ & 0x00008000) == 0x00008000)) { + to_bitField0_ |= 0x00002000; + } + if (optional1Builder_ == null) { + result.optional1_ = optional1_; + } else { + result.optional1_ = optional1Builder_.build(); + } + if (((from_bitField0_ & 0x00010000) == 0x00010000)) { + to_bitField0_ |= 0x00004000; + } + if (optional2Builder_ == null) { + result.optional2_ = optional2_; + } else { + result.optional2_ = optional2Builder_.build(); + } + if (((from_bitField0_ & 0x00020000) == 0x00020000)) { + to_bitField0_ |= 0x00008000; + } + if (jsonextrainfoBuilder_ == null) { + result.jsonextrainfo_ = jsonextrainfo_; + } else { + result.jsonextrainfo_ = jsonextrainfoBuilder_.build(); + } + if (((from_bitField0_ & 0x00040000) == 0x00040000)) { + to_bitField0_ |= 0x00010000; + } + if (contactfullnameBuilder_ == null) { + result.contactfullname_ = contactfullname_; + } else { + result.contactfullname_ = contactfullnameBuilder_.build(); + } + if (((from_bitField0_ & 0x00080000) == 0x00080000)) { + to_bitField0_ |= 0x00020000; + } + if (contactfaxBuilder_ == null) { + result.contactfax_ = contactfax_; + } else { + result.contactfax_ = contactfaxBuilder_.build(); + } + if (((from_bitField0_ & 0x00100000) == 0x00100000)) { + to_bitField0_ |= 0x00040000; + } + if (contactphoneBuilder_ == null) { + result.contactphone_ = contactphone_; + } else { + result.contactphone_ = contactphoneBuilder_.build(); + } + if (((from_bitField0_ & 0x00200000) == 0x00200000)) { + to_bitField0_ |= 0x00080000; + } + if (contactemailBuilder_ == null) { + result.contactemail_ = contactemail_; + } else { + result.contactemail_ = contactemailBuilder_.build(); + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof eu.dnetlib.data.proto.ProjectProtos.Project.Metadata) { + return mergeFrom((eu.dnetlib.data.proto.ProjectProtos.Project.Metadata)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(eu.dnetlib.data.proto.ProjectProtos.Project.Metadata other) { + if (other == eu.dnetlib.data.proto.ProjectProtos.Project.Metadata.getDefaultInstance()) return this; + if (other.hasWebsiteurl()) { + mergeWebsiteurl(other.getWebsiteurl()); + } + if (other.hasCode()) { + mergeCode(other.getCode()); + } + if (other.hasAcronym()) { + mergeAcronym(other.getAcronym()); + } + if (other.hasTitle()) { + mergeTitle(other.getTitle()); + } + if (other.hasStartdate()) { + mergeStartdate(other.getStartdate()); + } + if (other.hasEnddate()) { + mergeEnddate(other.getEnddate()); + } + if (other.hasCallidentifier()) { + mergeCallidentifier(other.getCallidentifier()); + } + if (other.hasKeywords()) { + mergeKeywords(other.getKeywords()); + } + if (other.hasDuration()) { + mergeDuration(other.getDuration()); + } + if (other.hasEcsc39()) { + mergeEcsc39(other.getEcsc39()); + } + if (other.hasOamandatepublications()) { + mergeOamandatepublications(other.getOamandatepublications()); + } + if (other.hasEcarticle293()) { + mergeEcarticle293(other.getEcarticle293()); + } + if (subjectsBuilder_ == null) { + if (!other.subjects_.isEmpty()) { + if (subjects_.isEmpty()) { + subjects_ = other.subjects_; + bitField0_ = (bitField0_ & ~0x00001000); + } else { + ensureSubjectsIsMutable(); + subjects_.addAll(other.subjects_); + } + onChanged(); + } + } else { + if (!other.subjects_.isEmpty()) { + if (subjectsBuilder_.isEmpty()) { + subjectsBuilder_.dispose(); + subjectsBuilder_ = null; + subjects_ = other.subjects_; + bitField0_ = (bitField0_ & ~0x00001000); + subjectsBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + getSubjectsFieldBuilder() : null; + } else { + subjectsBuilder_.addAllMessages(other.subjects_); + } + } + } + if (fundingtreeBuilder_ == null) { + if (!other.fundingtree_.isEmpty()) { + if (fundingtree_.isEmpty()) { + fundingtree_ = other.fundingtree_; + bitField0_ = (bitField0_ & ~0x00002000); + } else { + ensureFundingtreeIsMutable(); + fundingtree_.addAll(other.fundingtree_); + } + onChanged(); + } + } else { + if (!other.fundingtree_.isEmpty()) { + if (fundingtreeBuilder_.isEmpty()) { + fundingtreeBuilder_.dispose(); + fundingtreeBuilder_ = null; + fundingtree_ = other.fundingtree_; + bitField0_ = (bitField0_ & ~0x00002000); + fundingtreeBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + getFundingtreeFieldBuilder() : null; + } else { + fundingtreeBuilder_.addAllMessages(other.fundingtree_); + } + } + } + if (other.hasContracttype()) { + mergeContracttype(other.getContracttype()); + } + if (other.hasOptional1()) { + mergeOptional1(other.getOptional1()); + } + if (other.hasOptional2()) { + mergeOptional2(other.getOptional2()); + } + if (other.hasJsonextrainfo()) { + mergeJsonextrainfo(other.getJsonextrainfo()); + } + if (other.hasContactfullname()) { + mergeContactfullname(other.getContactfullname()); + } + if (other.hasContactfax()) { + mergeContactfax(other.getContactfax()); + } + if (other.hasContactphone()) { + mergeContactphone(other.getContactphone()); + } + if (other.hasContactemail()) { + mergeContactemail(other.getContactemail()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + if (hasWebsiteurl()) { + if (!getWebsiteurl().isInitialized()) { + + return false; + } + } + if (hasCode()) { + if (!getCode().isInitialized()) { + + return false; + } + } + if (hasAcronym()) { + if (!getAcronym().isInitialized()) { + + return false; + } + } + if (hasTitle()) { + if (!getTitle().isInitialized()) { + + return false; + } + } + if (hasStartdate()) { + if (!getStartdate().isInitialized()) { + + return false; + } + } + if (hasEnddate()) { + if (!getEnddate().isInitialized()) { + + return false; + } + } + if (hasCallidentifier()) { + if (!getCallidentifier().isInitialized()) { + + return false; + } + } + if (hasKeywords()) { + if (!getKeywords().isInitialized()) { + + return false; + } + } + if (hasDuration()) { + if (!getDuration().isInitialized()) { + + return false; + } + } + if (hasEcsc39()) { + if (!getEcsc39().isInitialized()) { + + return false; + } + } + if (hasOamandatepublications()) { + if (!getOamandatepublications().isInitialized()) { + + return false; + } + } + if (hasEcarticle293()) { + if (!getEcarticle293().isInitialized()) { + + return false; + } + } + for (int i = 0; i < getSubjectsCount(); i++) { + if (!getSubjects(i).isInitialized()) { + + return false; + } + } + for (int i = 0; i < getFundingtreeCount(); i++) { + if (!getFundingtree(i).isInitialized()) { + + return false; + } + } + if (hasContracttype()) { + if (!getContracttype().isInitialized()) { + + return false; + } + } + if (hasOptional1()) { + if (!getOptional1().isInitialized()) { + + return false; + } + } + if (hasOptional2()) { + if (!getOptional2().isInitialized()) { + + return false; + } + } + if (hasJsonextrainfo()) { + if (!getJsonextrainfo().isInitialized()) { + + return false; + } + } + if (hasContactfullname()) { + if (!getContactfullname().isInitialized()) { + + return false; + } + } + if (hasContactfax()) { + if (!getContactfax().isInitialized()) { + + return false; + } + } + if (hasContactphone()) { + if (!getContactphone().isInitialized()) { + + return false; + } + } + if (hasContactemail()) { + if (!getContactemail().isInitialized()) { + + return false; + } + } + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + } + break; + } + case 10: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasWebsiteurl()) { + subBuilder.mergeFrom(getWebsiteurl()); + } + input.readMessage(subBuilder, extensionRegistry); + setWebsiteurl(subBuilder.buildPartial()); + break; + } + case 18: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasCode()) { + subBuilder.mergeFrom(getCode()); + } + input.readMessage(subBuilder, extensionRegistry); + setCode(subBuilder.buildPartial()); + break; + } + case 26: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasAcronym()) { + subBuilder.mergeFrom(getAcronym()); + } + input.readMessage(subBuilder, extensionRegistry); + setAcronym(subBuilder.buildPartial()); + break; + } + case 34: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasTitle()) { + subBuilder.mergeFrom(getTitle()); + } + input.readMessage(subBuilder, extensionRegistry); + setTitle(subBuilder.buildPartial()); + break; + } + case 42: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasStartdate()) { + subBuilder.mergeFrom(getStartdate()); + } + input.readMessage(subBuilder, extensionRegistry); + setStartdate(subBuilder.buildPartial()); + break; + } + case 50: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasEnddate()) { + subBuilder.mergeFrom(getEnddate()); + } + input.readMessage(subBuilder, extensionRegistry); + setEnddate(subBuilder.buildPartial()); + break; + } + case 58: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasCallidentifier()) { + subBuilder.mergeFrom(getCallidentifier()); + } + input.readMessage(subBuilder, extensionRegistry); + setCallidentifier(subBuilder.buildPartial()); + break; + } + case 66: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasKeywords()) { + subBuilder.mergeFrom(getKeywords()); + } + input.readMessage(subBuilder, extensionRegistry); + setKeywords(subBuilder.buildPartial()); + break; + } + case 74: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasDuration()) { + subBuilder.mergeFrom(getDuration()); + } + input.readMessage(subBuilder, extensionRegistry); + setDuration(subBuilder.buildPartial()); + break; + } + case 82: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasEcsc39()) { + subBuilder.mergeFrom(getEcsc39()); + } + input.readMessage(subBuilder, extensionRegistry); + setEcsc39(subBuilder.buildPartial()); + break; + } + case 90: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasOamandatepublications()) { + subBuilder.mergeFrom(getOamandatepublications()); + } + input.readMessage(subBuilder, extensionRegistry); + setOamandatepublications(subBuilder.buildPartial()); + break; + } + case 98: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasEcarticle293()) { + subBuilder.mergeFrom(getEcarticle293()); + } + input.readMessage(subBuilder, extensionRegistry); + setEcarticle293(subBuilder.buildPartial()); + break; + } + case 106: { + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(); + if (hasContracttype()) { + subBuilder.mergeFrom(getContracttype()); + } + input.readMessage(subBuilder, extensionRegistry); + setContracttype(subBuilder.buildPartial()); + break; + } + case 114: { + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addSubjects(subBuilder.buildPartial()); + break; + } + case 122: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addFundingtree(subBuilder.buildPartial()); + break; + } + case 130: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasOptional1()) { + subBuilder.mergeFrom(getOptional1()); + } + input.readMessage(subBuilder, extensionRegistry); + setOptional1(subBuilder.buildPartial()); + break; + } + case 138: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasOptional2()) { + subBuilder.mergeFrom(getOptional2()); + } + input.readMessage(subBuilder, extensionRegistry); + setOptional2(subBuilder.buildPartial()); + break; + } + case 146: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasJsonextrainfo()) { + subBuilder.mergeFrom(getJsonextrainfo()); + } + input.readMessage(subBuilder, extensionRegistry); + setJsonextrainfo(subBuilder.buildPartial()); + break; + } + case 154: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasContactfullname()) { + subBuilder.mergeFrom(getContactfullname()); + } + input.readMessage(subBuilder, extensionRegistry); + setContactfullname(subBuilder.buildPartial()); + break; + } + case 162: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasContactfax()) { + subBuilder.mergeFrom(getContactfax()); + } + input.readMessage(subBuilder, extensionRegistry); + setContactfax(subBuilder.buildPartial()); + break; + } + case 170: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasContactphone()) { + subBuilder.mergeFrom(getContactphone()); + } + input.readMessage(subBuilder, extensionRegistry); + setContactphone(subBuilder.buildPartial()); + break; + } + case 178: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasContactemail()) { + subBuilder.mergeFrom(getContactemail()); + } + input.readMessage(subBuilder, extensionRegistry); + setContactemail(subBuilder.buildPartial()); + break; + } + } + } + } + + private int bitField0_; + + // optional .eu.dnetlib.data.proto.StringField websiteurl = 1; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField websiteurl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> websiteurlBuilder_; + public boolean hasWebsiteurl() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getWebsiteurl() { + if (websiteurlBuilder_ == null) { + return websiteurl_; + } else { + return websiteurlBuilder_.getMessage(); + } + } + public Builder setWebsiteurl(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (websiteurlBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + websiteurl_ = value; + onChanged(); + } else { + websiteurlBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder setWebsiteurl( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (websiteurlBuilder_ == null) { + websiteurl_ = builderForValue.build(); + onChanged(); + } else { + websiteurlBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder mergeWebsiteurl(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (websiteurlBuilder_ == null) { + if (((bitField0_ & 0x00000001) == 0x00000001) && + websiteurl_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + websiteurl_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(websiteurl_).mergeFrom(value).buildPartial(); + } else { + websiteurl_ = value; + } + onChanged(); + } else { + websiteurlBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder clearWebsiteurl() { + if (websiteurlBuilder_ == null) { + websiteurl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + websiteurlBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getWebsiteurlBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return getWebsiteurlFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getWebsiteurlOrBuilder() { + if (websiteurlBuilder_ != null) { + return websiteurlBuilder_.getMessageOrBuilder(); + } else { + return websiteurl_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getWebsiteurlFieldBuilder() { + if (websiteurlBuilder_ == null) { + websiteurlBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + websiteurl_, + getParentForChildren(), + isClean()); + websiteurl_ = null; + } + return websiteurlBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField code = 2; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField code_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> codeBuilder_; + public boolean hasCode() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getCode() { + if (codeBuilder_ == null) { + return code_; + } else { + return codeBuilder_.getMessage(); + } + } + public Builder setCode(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (codeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + code_ = value; + onChanged(); + } else { + codeBuilder_.setMessage(value); + } + bitField0_ |= 0x00000002; + return this; + } + public Builder setCode( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (codeBuilder_ == null) { + code_ = builderForValue.build(); + onChanged(); + } else { + codeBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000002; + return this; + } + public Builder mergeCode(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (codeBuilder_ == null) { + if (((bitField0_ & 0x00000002) == 0x00000002) && + code_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + code_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(code_).mergeFrom(value).buildPartial(); + } else { + code_ = value; + } + onChanged(); + } else { + codeBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000002; + return this; + } + public Builder clearCode() { + if (codeBuilder_ == null) { + code_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + codeBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000002); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getCodeBuilder() { + bitField0_ |= 0x00000002; + onChanged(); + return getCodeFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getCodeOrBuilder() { + if (codeBuilder_ != null) { + return codeBuilder_.getMessageOrBuilder(); + } else { + return code_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getCodeFieldBuilder() { + if (codeBuilder_ == null) { + codeBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + code_, + getParentForChildren(), + isClean()); + code_ = null; + } + return codeBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField acronym = 3; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField acronym_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> acronymBuilder_; + public boolean hasAcronym() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getAcronym() { + if (acronymBuilder_ == null) { + return acronym_; + } else { + return acronymBuilder_.getMessage(); + } + } + public Builder setAcronym(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (acronymBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + acronym_ = value; + onChanged(); + } else { + acronymBuilder_.setMessage(value); + } + bitField0_ |= 0x00000004; + return this; + } + public Builder setAcronym( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (acronymBuilder_ == null) { + acronym_ = builderForValue.build(); + onChanged(); + } else { + acronymBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000004; + return this; + } + public Builder mergeAcronym(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (acronymBuilder_ == null) { + if (((bitField0_ & 0x00000004) == 0x00000004) && + acronym_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + acronym_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(acronym_).mergeFrom(value).buildPartial(); + } else { + acronym_ = value; + } + onChanged(); + } else { + acronymBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000004; + return this; + } + public Builder clearAcronym() { + if (acronymBuilder_ == null) { + acronym_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + acronymBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000004); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getAcronymBuilder() { + bitField0_ |= 0x00000004; + onChanged(); + return getAcronymFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getAcronymOrBuilder() { + if (acronymBuilder_ != null) { + return acronymBuilder_.getMessageOrBuilder(); + } else { + return acronym_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getAcronymFieldBuilder() { + if (acronymBuilder_ == null) { + acronymBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + acronym_, + getParentForChildren(), + isClean()); + acronym_ = null; + } + return acronymBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField title = 4; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField title_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> titleBuilder_; + public boolean hasTitle() { + return ((bitField0_ & 0x00000008) == 0x00000008); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getTitle() { + if (titleBuilder_ == null) { + return title_; + } else { + return titleBuilder_.getMessage(); + } + } + public Builder setTitle(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (titleBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + title_ = value; + onChanged(); + } else { + titleBuilder_.setMessage(value); + } + bitField0_ |= 0x00000008; + return this; + } + public Builder setTitle( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (titleBuilder_ == null) { + title_ = builderForValue.build(); + onChanged(); + } else { + titleBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000008; + return this; + } + public Builder mergeTitle(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (titleBuilder_ == null) { + if (((bitField0_ & 0x00000008) == 0x00000008) && + title_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + title_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(title_).mergeFrom(value).buildPartial(); + } else { + title_ = value; + } + onChanged(); + } else { + titleBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000008; + return this; + } + public Builder clearTitle() { + if (titleBuilder_ == null) { + title_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + titleBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000008); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getTitleBuilder() { + bitField0_ |= 0x00000008; + onChanged(); + return getTitleFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getTitleOrBuilder() { + if (titleBuilder_ != null) { + return titleBuilder_.getMessageOrBuilder(); + } else { + return title_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getTitleFieldBuilder() { + if (titleBuilder_ == null) { + titleBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + title_, + getParentForChildren(), + isClean()); + title_ = null; + } + return titleBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField startdate = 5; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField startdate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> startdateBuilder_; + public boolean hasStartdate() { + return ((bitField0_ & 0x00000010) == 0x00000010); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getStartdate() { + if (startdateBuilder_ == null) { + return startdate_; + } else { + return startdateBuilder_.getMessage(); + } + } + public Builder setStartdate(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (startdateBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + startdate_ = value; + onChanged(); + } else { + startdateBuilder_.setMessage(value); + } + bitField0_ |= 0x00000010; + return this; + } + public Builder setStartdate( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (startdateBuilder_ == null) { + startdate_ = builderForValue.build(); + onChanged(); + } else { + startdateBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000010; + return this; + } + public Builder mergeStartdate(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (startdateBuilder_ == null) { + if (((bitField0_ & 0x00000010) == 0x00000010) && + startdate_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + startdate_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(startdate_).mergeFrom(value).buildPartial(); + } else { + startdate_ = value; + } + onChanged(); + } else { + startdateBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000010; + return this; + } + public Builder clearStartdate() { + if (startdateBuilder_ == null) { + startdate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + startdateBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000010); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getStartdateBuilder() { + bitField0_ |= 0x00000010; + onChanged(); + return getStartdateFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getStartdateOrBuilder() { + if (startdateBuilder_ != null) { + return startdateBuilder_.getMessageOrBuilder(); + } else { + return startdate_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getStartdateFieldBuilder() { + if (startdateBuilder_ == null) { + startdateBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + startdate_, + getParentForChildren(), + isClean()); + startdate_ = null; + } + return startdateBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField enddate = 6; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField enddate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> enddateBuilder_; + public boolean hasEnddate() { + return ((bitField0_ & 0x00000020) == 0x00000020); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEnddate() { + if (enddateBuilder_ == null) { + return enddate_; + } else { + return enddateBuilder_.getMessage(); + } + } + public Builder setEnddate(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (enddateBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + enddate_ = value; + onChanged(); + } else { + enddateBuilder_.setMessage(value); + } + bitField0_ |= 0x00000020; + return this; + } + public Builder setEnddate( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (enddateBuilder_ == null) { + enddate_ = builderForValue.build(); + onChanged(); + } else { + enddateBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000020; + return this; + } + public Builder mergeEnddate(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (enddateBuilder_ == null) { + if (((bitField0_ & 0x00000020) == 0x00000020) && + enddate_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + enddate_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(enddate_).mergeFrom(value).buildPartial(); + } else { + enddate_ = value; + } + onChanged(); + } else { + enddateBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000020; + return this; + } + public Builder clearEnddate() { + if (enddateBuilder_ == null) { + enddate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + enddateBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000020); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getEnddateBuilder() { + bitField0_ |= 0x00000020; + onChanged(); + return getEnddateFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEnddateOrBuilder() { + if (enddateBuilder_ != null) { + return enddateBuilder_.getMessageOrBuilder(); + } else { + return enddate_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getEnddateFieldBuilder() { + if (enddateBuilder_ == null) { + enddateBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + enddate_, + getParentForChildren(), + isClean()); + enddate_ = null; + } + return enddateBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField callidentifier = 7; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField callidentifier_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> callidentifierBuilder_; + public boolean hasCallidentifier() { + return ((bitField0_ & 0x00000040) == 0x00000040); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getCallidentifier() { + if (callidentifierBuilder_ == null) { + return callidentifier_; + } else { + return callidentifierBuilder_.getMessage(); + } + } + public Builder setCallidentifier(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (callidentifierBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + callidentifier_ = value; + onChanged(); + } else { + callidentifierBuilder_.setMessage(value); + } + bitField0_ |= 0x00000040; + return this; + } + public Builder setCallidentifier( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (callidentifierBuilder_ == null) { + callidentifier_ = builderForValue.build(); + onChanged(); + } else { + callidentifierBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000040; + return this; + } + public Builder mergeCallidentifier(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (callidentifierBuilder_ == null) { + if (((bitField0_ & 0x00000040) == 0x00000040) && + callidentifier_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + callidentifier_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(callidentifier_).mergeFrom(value).buildPartial(); + } else { + callidentifier_ = value; + } + onChanged(); + } else { + callidentifierBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000040; + return this; + } + public Builder clearCallidentifier() { + if (callidentifierBuilder_ == null) { + callidentifier_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + callidentifierBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000040); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getCallidentifierBuilder() { + bitField0_ |= 0x00000040; + onChanged(); + return getCallidentifierFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getCallidentifierOrBuilder() { + if (callidentifierBuilder_ != null) { + return callidentifierBuilder_.getMessageOrBuilder(); + } else { + return callidentifier_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getCallidentifierFieldBuilder() { + if (callidentifierBuilder_ == null) { + callidentifierBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + callidentifier_, + getParentForChildren(), + isClean()); + callidentifier_ = null; + } + return callidentifierBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField keywords = 8; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField keywords_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> keywordsBuilder_; + public boolean hasKeywords() { + return ((bitField0_ & 0x00000080) == 0x00000080); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getKeywords() { + if (keywordsBuilder_ == null) { + return keywords_; + } else { + return keywordsBuilder_.getMessage(); + } + } + public Builder setKeywords(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (keywordsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + keywords_ = value; + onChanged(); + } else { + keywordsBuilder_.setMessage(value); + } + bitField0_ |= 0x00000080; + return this; + } + public Builder setKeywords( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (keywordsBuilder_ == null) { + keywords_ = builderForValue.build(); + onChanged(); + } else { + keywordsBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000080; + return this; + } + public Builder mergeKeywords(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (keywordsBuilder_ == null) { + if (((bitField0_ & 0x00000080) == 0x00000080) && + keywords_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + keywords_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(keywords_).mergeFrom(value).buildPartial(); + } else { + keywords_ = value; + } + onChanged(); + } else { + keywordsBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000080; + return this; + } + public Builder clearKeywords() { + if (keywordsBuilder_ == null) { + keywords_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + keywordsBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000080); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getKeywordsBuilder() { + bitField0_ |= 0x00000080; + onChanged(); + return getKeywordsFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getKeywordsOrBuilder() { + if (keywordsBuilder_ != null) { + return keywordsBuilder_.getMessageOrBuilder(); + } else { + return keywords_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getKeywordsFieldBuilder() { + if (keywordsBuilder_ == null) { + keywordsBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + keywords_, + getParentForChildren(), + isClean()); + keywords_ = null; + } + return keywordsBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField duration = 9; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField duration_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> durationBuilder_; + public boolean hasDuration() { + return ((bitField0_ & 0x00000100) == 0x00000100); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getDuration() { + if (durationBuilder_ == null) { + return duration_; + } else { + return durationBuilder_.getMessage(); + } + } + public Builder setDuration(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (durationBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + duration_ = value; + onChanged(); + } else { + durationBuilder_.setMessage(value); + } + bitField0_ |= 0x00000100; + return this; + } + public Builder setDuration( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (durationBuilder_ == null) { + duration_ = builderForValue.build(); + onChanged(); + } else { + durationBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000100; + return this; + } + public Builder mergeDuration(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (durationBuilder_ == null) { + if (((bitField0_ & 0x00000100) == 0x00000100) && + duration_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + duration_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(duration_).mergeFrom(value).buildPartial(); + } else { + duration_ = value; + } + onChanged(); + } else { + durationBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000100; + return this; + } + public Builder clearDuration() { + if (durationBuilder_ == null) { + duration_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + durationBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000100); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getDurationBuilder() { + bitField0_ |= 0x00000100; + onChanged(); + return getDurationFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDurationOrBuilder() { + if (durationBuilder_ != null) { + return durationBuilder_.getMessageOrBuilder(); + } else { + return duration_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getDurationFieldBuilder() { + if (durationBuilder_ == null) { + durationBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + duration_, + getParentForChildren(), + isClean()); + duration_ = null; + } + return durationBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField ecsc39 = 10; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField ecsc39_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> ecsc39Builder_; + public boolean hasEcsc39() { + return ((bitField0_ & 0x00000200) == 0x00000200); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcsc39() { + if (ecsc39Builder_ == null) { + return ecsc39_; + } else { + return ecsc39Builder_.getMessage(); + } + } + public Builder setEcsc39(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (ecsc39Builder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ecsc39_ = value; + onChanged(); + } else { + ecsc39Builder_.setMessage(value); + } + bitField0_ |= 0x00000200; + return this; + } + public Builder setEcsc39( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (ecsc39Builder_ == null) { + ecsc39_ = builderForValue.build(); + onChanged(); + } else { + ecsc39Builder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000200; + return this; + } + public Builder mergeEcsc39(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (ecsc39Builder_ == null) { + if (((bitField0_ & 0x00000200) == 0x00000200) && + ecsc39_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + ecsc39_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(ecsc39_).mergeFrom(value).buildPartial(); + } else { + ecsc39_ = value; + } + onChanged(); + } else { + ecsc39Builder_.mergeFrom(value); + } + bitField0_ |= 0x00000200; + return this; + } + public Builder clearEcsc39() { + if (ecsc39Builder_ == null) { + ecsc39_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + ecsc39Builder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000200); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getEcsc39Builder() { + bitField0_ |= 0x00000200; + onChanged(); + return getEcsc39FieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcsc39OrBuilder() { + if (ecsc39Builder_ != null) { + return ecsc39Builder_.getMessageOrBuilder(); + } else { + return ecsc39_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getEcsc39FieldBuilder() { + if (ecsc39Builder_ == null) { + ecsc39Builder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + ecsc39_, + getParentForChildren(), + isClean()); + ecsc39_ = null; + } + return ecsc39Builder_; + } + + // optional .eu.dnetlib.data.proto.StringField oamandatepublications = 11; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField oamandatepublications_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> oamandatepublicationsBuilder_; + public boolean hasOamandatepublications() { + return ((bitField0_ & 0x00000400) == 0x00000400); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getOamandatepublications() { + if (oamandatepublicationsBuilder_ == null) { + return oamandatepublications_; + } else { + return oamandatepublicationsBuilder_.getMessage(); + } + } + public Builder setOamandatepublications(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (oamandatepublicationsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + oamandatepublications_ = value; + onChanged(); + } else { + oamandatepublicationsBuilder_.setMessage(value); + } + bitField0_ |= 0x00000400; + return this; + } + public Builder setOamandatepublications( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (oamandatepublicationsBuilder_ == null) { + oamandatepublications_ = builderForValue.build(); + onChanged(); + } else { + oamandatepublicationsBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000400; + return this; + } + public Builder mergeOamandatepublications(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (oamandatepublicationsBuilder_ == null) { + if (((bitField0_ & 0x00000400) == 0x00000400) && + oamandatepublications_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + oamandatepublications_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(oamandatepublications_).mergeFrom(value).buildPartial(); + } else { + oamandatepublications_ = value; + } + onChanged(); + } else { + oamandatepublicationsBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000400; + return this; + } + public Builder clearOamandatepublications() { + if (oamandatepublicationsBuilder_ == null) { + oamandatepublications_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + oamandatepublicationsBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000400); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getOamandatepublicationsBuilder() { + bitField0_ |= 0x00000400; + onChanged(); + return getOamandatepublicationsFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOamandatepublicationsOrBuilder() { + if (oamandatepublicationsBuilder_ != null) { + return oamandatepublicationsBuilder_.getMessageOrBuilder(); + } else { + return oamandatepublications_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getOamandatepublicationsFieldBuilder() { + if (oamandatepublicationsBuilder_ == null) { + oamandatepublicationsBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + oamandatepublications_, + getParentForChildren(), + isClean()); + oamandatepublications_ = null; + } + return oamandatepublicationsBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField ecarticle29_3 = 12; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField ecarticle293_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> ecarticle293Builder_; + public boolean hasEcarticle293() { + return ((bitField0_ & 0x00000800) == 0x00000800); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcarticle293() { + if (ecarticle293Builder_ == null) { + return ecarticle293_; + } else { + return ecarticle293Builder_.getMessage(); + } + } + public Builder setEcarticle293(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (ecarticle293Builder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ecarticle293_ = value; + onChanged(); + } else { + ecarticle293Builder_.setMessage(value); + } + bitField0_ |= 0x00000800; + return this; + } + public Builder setEcarticle293( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (ecarticle293Builder_ == null) { + ecarticle293_ = builderForValue.build(); + onChanged(); + } else { + ecarticle293Builder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000800; + return this; + } + public Builder mergeEcarticle293(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (ecarticle293Builder_ == null) { + if (((bitField0_ & 0x00000800) == 0x00000800) && + ecarticle293_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + ecarticle293_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(ecarticle293_).mergeFrom(value).buildPartial(); + } else { + ecarticle293_ = value; + } + onChanged(); + } else { + ecarticle293Builder_.mergeFrom(value); + } + bitField0_ |= 0x00000800; + return this; + } + public Builder clearEcarticle293() { + if (ecarticle293Builder_ == null) { + ecarticle293_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + ecarticle293Builder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000800); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getEcarticle293Builder() { + bitField0_ |= 0x00000800; + onChanged(); + return getEcarticle293FieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcarticle293OrBuilder() { + if (ecarticle293Builder_ != null) { + return ecarticle293Builder_.getMessageOrBuilder(); + } else { + return ecarticle293_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getEcarticle293FieldBuilder() { + if (ecarticle293Builder_ == null) { + ecarticle293Builder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + ecarticle293_, + getParentForChildren(), + isClean()); + ecarticle293_ = null; + } + return ecarticle293Builder_; + } + + // repeated .eu.dnetlib.data.proto.StructuredProperty subjects = 14; + private java.util.List subjects_ = + java.util.Collections.emptyList(); + private void ensureSubjectsIsMutable() { + if (!((bitField0_ & 0x00001000) == 0x00001000)) { + subjects_ = new java.util.ArrayList(subjects_); + bitField0_ |= 0x00001000; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder> subjectsBuilder_; + + public java.util.List getSubjectsList() { + if (subjectsBuilder_ == null) { + return java.util.Collections.unmodifiableList(subjects_); + } else { + return subjectsBuilder_.getMessageList(); + } + } + public int getSubjectsCount() { + if (subjectsBuilder_ == null) { + return subjects_.size(); + } else { + return subjectsBuilder_.getCount(); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty getSubjects(int index) { + if (subjectsBuilder_ == null) { + return subjects_.get(index); + } else { + return subjectsBuilder_.getMessage(index); + } + } + public Builder setSubjects( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty value) { + if (subjectsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureSubjectsIsMutable(); + subjects_.set(index, value); + onChanged(); + } else { + subjectsBuilder_.setMessage(index, value); + } + return this; + } + public Builder setSubjects( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder builderForValue) { + if (subjectsBuilder_ == null) { + ensureSubjectsIsMutable(); + subjects_.set(index, builderForValue.build()); + onChanged(); + } else { + subjectsBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + public Builder addSubjects(eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty value) { + if (subjectsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureSubjectsIsMutable(); + subjects_.add(value); + onChanged(); + } else { + subjectsBuilder_.addMessage(value); + } + return this; + } + public Builder addSubjects( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty value) { + if (subjectsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureSubjectsIsMutable(); + subjects_.add(index, value); + onChanged(); + } else { + subjectsBuilder_.addMessage(index, value); + } + return this; + } + public Builder addSubjects( + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder builderForValue) { + if (subjectsBuilder_ == null) { + ensureSubjectsIsMutable(); + subjects_.add(builderForValue.build()); + onChanged(); + } else { + subjectsBuilder_.addMessage(builderForValue.build()); + } + return this; + } + public Builder addSubjects( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder builderForValue) { + if (subjectsBuilder_ == null) { + ensureSubjectsIsMutable(); + subjects_.add(index, builderForValue.build()); + onChanged(); + } else { + subjectsBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + public Builder addAllSubjects( + java.lang.Iterable values) { + if (subjectsBuilder_ == null) { + ensureSubjectsIsMutable(); + super.addAll(values, subjects_); + onChanged(); + } else { + subjectsBuilder_.addAllMessages(values); + } + return this; + } + public Builder clearSubjects() { + if (subjectsBuilder_ == null) { + subjects_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00001000); + onChanged(); + } else { + subjectsBuilder_.clear(); + } + return this; + } + public Builder removeSubjects(int index) { + if (subjectsBuilder_ == null) { + ensureSubjectsIsMutable(); + subjects_.remove(index); + onChanged(); + } else { + subjectsBuilder_.remove(index); + } + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder getSubjectsBuilder( + int index) { + return getSubjectsFieldBuilder().getBuilder(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder getSubjectsOrBuilder( + int index) { + if (subjectsBuilder_ == null) { + return subjects_.get(index); } else { + return subjectsBuilder_.getMessageOrBuilder(index); + } + } + public java.util.List + getSubjectsOrBuilderList() { + if (subjectsBuilder_ != null) { + return subjectsBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(subjects_); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder addSubjectsBuilder() { + return getSubjectsFieldBuilder().addBuilder( + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.getDefaultInstance()); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder addSubjectsBuilder( + int index) { + return getSubjectsFieldBuilder().addBuilder( + index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.getDefaultInstance()); + } + public java.util.List + getSubjectsBuilderList() { + return getSubjectsFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder> + getSubjectsFieldBuilder() { + if (subjectsBuilder_ == null) { + subjectsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder>( + subjects_, + ((bitField0_ & 0x00001000) == 0x00001000), + getParentForChildren(), + isClean()); + subjects_ = null; + } + return subjectsBuilder_; + } + + // repeated .eu.dnetlib.data.proto.StringField fundingtree = 15; + private java.util.List fundingtree_ = + java.util.Collections.emptyList(); + private void ensureFundingtreeIsMutable() { + if (!((bitField0_ & 0x00002000) == 0x00002000)) { + fundingtree_ = new java.util.ArrayList(fundingtree_); + bitField0_ |= 0x00002000; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> fundingtreeBuilder_; + + public java.util.List getFundingtreeList() { + if (fundingtreeBuilder_ == null) { + return java.util.Collections.unmodifiableList(fundingtree_); + } else { + return fundingtreeBuilder_.getMessageList(); + } + } + public int getFundingtreeCount() { + if (fundingtreeBuilder_ == null) { + return fundingtree_.size(); + } else { + return fundingtreeBuilder_.getCount(); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getFundingtree(int index) { + if (fundingtreeBuilder_ == null) { + return fundingtree_.get(index); + } else { + return fundingtreeBuilder_.getMessage(index); + } + } + public Builder setFundingtree( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (fundingtreeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureFundingtreeIsMutable(); + fundingtree_.set(index, value); + onChanged(); + } else { + fundingtreeBuilder_.setMessage(index, value); + } + return this; + } + public Builder setFundingtree( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (fundingtreeBuilder_ == null) { + ensureFundingtreeIsMutable(); + fundingtree_.set(index, builderForValue.build()); + onChanged(); + } else { + fundingtreeBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + public Builder addFundingtree(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (fundingtreeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureFundingtreeIsMutable(); + fundingtree_.add(value); + onChanged(); + } else { + fundingtreeBuilder_.addMessage(value); + } + return this; + } + public Builder addFundingtree( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (fundingtreeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureFundingtreeIsMutable(); + fundingtree_.add(index, value); + onChanged(); + } else { + fundingtreeBuilder_.addMessage(index, value); + } + return this; + } + public Builder addFundingtree( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (fundingtreeBuilder_ == null) { + ensureFundingtreeIsMutable(); + fundingtree_.add(builderForValue.build()); + onChanged(); + } else { + fundingtreeBuilder_.addMessage(builderForValue.build()); + } + return this; + } + public Builder addFundingtree( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (fundingtreeBuilder_ == null) { + ensureFundingtreeIsMutable(); + fundingtree_.add(index, builderForValue.build()); + onChanged(); + } else { + fundingtreeBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + public Builder addAllFundingtree( + java.lang.Iterable values) { + if (fundingtreeBuilder_ == null) { + ensureFundingtreeIsMutable(); + super.addAll(values, fundingtree_); + onChanged(); + } else { + fundingtreeBuilder_.addAllMessages(values); + } + return this; + } + public Builder clearFundingtree() { + if (fundingtreeBuilder_ == null) { + fundingtree_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00002000); + onChanged(); + } else { + fundingtreeBuilder_.clear(); + } + return this; + } + public Builder removeFundingtree(int index) { + if (fundingtreeBuilder_ == null) { + ensureFundingtreeIsMutable(); + fundingtree_.remove(index); + onChanged(); + } else { + fundingtreeBuilder_.remove(index); + } + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getFundingtreeBuilder( + int index) { + return getFundingtreeFieldBuilder().getBuilder(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getFundingtreeOrBuilder( + int index) { + if (fundingtreeBuilder_ == null) { + return fundingtree_.get(index); } else { + return fundingtreeBuilder_.getMessageOrBuilder(index); + } + } + public java.util.List + getFundingtreeOrBuilderList() { + if (fundingtreeBuilder_ != null) { + return fundingtreeBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(fundingtree_); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addFundingtreeBuilder() { + return getFundingtreeFieldBuilder().addBuilder( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addFundingtreeBuilder( + int index) { + return getFundingtreeFieldBuilder().addBuilder( + index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); + } + public java.util.List + getFundingtreeBuilderList() { + return getFundingtreeFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getFundingtreeFieldBuilder() { + if (fundingtreeBuilder_ == null) { + fundingtreeBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + fundingtree_, + ((bitField0_ & 0x00002000) == 0x00002000), + getParentForChildren(), + isClean()); + fundingtree_ = null; + } + return fundingtreeBuilder_; + } + + // optional .eu.dnetlib.data.proto.Qualifier contracttype = 13; + private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier contracttype_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> contracttypeBuilder_; + public boolean hasContracttype() { + return ((bitField0_ & 0x00004000) == 0x00004000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getContracttype() { + if (contracttypeBuilder_ == null) { + return contracttype_; + } else { + return contracttypeBuilder_.getMessage(); + } + } + public Builder setContracttype(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { + if (contracttypeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + contracttype_ = value; + onChanged(); + } else { + contracttypeBuilder_.setMessage(value); + } + bitField0_ |= 0x00004000; + return this; + } + public Builder setContracttype( + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder builderForValue) { + if (contracttypeBuilder_ == null) { + contracttype_ = builderForValue.build(); + onChanged(); + } else { + contracttypeBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00004000; + return this; + } + public Builder mergeContracttype(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { + if (contracttypeBuilder_ == null) { + if (((bitField0_ & 0x00004000) == 0x00004000) && + contracttype_ != eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance()) { + contracttype_ = + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(contracttype_).mergeFrom(value).buildPartial(); + } else { + contracttype_ = value; + } + onChanged(); + } else { + contracttypeBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00004000; + return this; + } + public Builder clearContracttype() { + if (contracttypeBuilder_ == null) { + contracttype_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + onChanged(); + } else { + contracttypeBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00004000); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder getContracttypeBuilder() { + bitField0_ |= 0x00004000; + onChanged(); + return getContracttypeFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getContracttypeOrBuilder() { + if (contracttypeBuilder_ != null) { + return contracttypeBuilder_.getMessageOrBuilder(); + } else { + return contracttype_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> + getContracttypeFieldBuilder() { + if (contracttypeBuilder_ == null) { + contracttypeBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder>( + contracttype_, + getParentForChildren(), + isClean()); + contracttype_ = null; + } + return contracttypeBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField optional1 = 16; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField optional1_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> optional1Builder_; + public boolean hasOptional1() { + return ((bitField0_ & 0x00008000) == 0x00008000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getOptional1() { + if (optional1Builder_ == null) { + return optional1_; + } else { + return optional1Builder_.getMessage(); + } + } + public Builder setOptional1(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (optional1Builder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + optional1_ = value; + onChanged(); + } else { + optional1Builder_.setMessage(value); + } + bitField0_ |= 0x00008000; + return this; + } + public Builder setOptional1( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (optional1Builder_ == null) { + optional1_ = builderForValue.build(); + onChanged(); + } else { + optional1Builder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00008000; + return this; + } + public Builder mergeOptional1(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (optional1Builder_ == null) { + if (((bitField0_ & 0x00008000) == 0x00008000) && + optional1_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + optional1_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(optional1_).mergeFrom(value).buildPartial(); + } else { + optional1_ = value; + } + onChanged(); + } else { + optional1Builder_.mergeFrom(value); + } + bitField0_ |= 0x00008000; + return this; + } + public Builder clearOptional1() { + if (optional1Builder_ == null) { + optional1_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + optional1Builder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00008000); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getOptional1Builder() { + bitField0_ |= 0x00008000; + onChanged(); + return getOptional1FieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOptional1OrBuilder() { + if (optional1Builder_ != null) { + return optional1Builder_.getMessageOrBuilder(); + } else { + return optional1_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getOptional1FieldBuilder() { + if (optional1Builder_ == null) { + optional1Builder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + optional1_, + getParentForChildren(), + isClean()); + optional1_ = null; + } + return optional1Builder_; + } + + // optional .eu.dnetlib.data.proto.StringField optional2 = 17; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField optional2_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> optional2Builder_; + public boolean hasOptional2() { + return ((bitField0_ & 0x00010000) == 0x00010000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getOptional2() { + if (optional2Builder_ == null) { + return optional2_; + } else { + return optional2Builder_.getMessage(); + } + } + public Builder setOptional2(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (optional2Builder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + optional2_ = value; + onChanged(); + } else { + optional2Builder_.setMessage(value); + } + bitField0_ |= 0x00010000; + return this; + } + public Builder setOptional2( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (optional2Builder_ == null) { + optional2_ = builderForValue.build(); + onChanged(); + } else { + optional2Builder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00010000; + return this; + } + public Builder mergeOptional2(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (optional2Builder_ == null) { + if (((bitField0_ & 0x00010000) == 0x00010000) && + optional2_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + optional2_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(optional2_).mergeFrom(value).buildPartial(); + } else { + optional2_ = value; + } + onChanged(); + } else { + optional2Builder_.mergeFrom(value); + } + bitField0_ |= 0x00010000; + return this; + } + public Builder clearOptional2() { + if (optional2Builder_ == null) { + optional2_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + optional2Builder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00010000); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getOptional2Builder() { + bitField0_ |= 0x00010000; + onChanged(); + return getOptional2FieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOptional2OrBuilder() { + if (optional2Builder_ != null) { + return optional2Builder_.getMessageOrBuilder(); + } else { + return optional2_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getOptional2FieldBuilder() { + if (optional2Builder_ == null) { + optional2Builder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + optional2_, + getParentForChildren(), + isClean()); + optional2_ = null; + } + return optional2Builder_; + } + + // optional .eu.dnetlib.data.proto.StringField jsonextrainfo = 18; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField jsonextrainfo_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> jsonextrainfoBuilder_; + public boolean hasJsonextrainfo() { + return ((bitField0_ & 0x00020000) == 0x00020000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getJsonextrainfo() { + if (jsonextrainfoBuilder_ == null) { + return jsonextrainfo_; + } else { + return jsonextrainfoBuilder_.getMessage(); + } + } + public Builder setJsonextrainfo(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (jsonextrainfoBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + jsonextrainfo_ = value; + onChanged(); + } else { + jsonextrainfoBuilder_.setMessage(value); + } + bitField0_ |= 0x00020000; + return this; + } + public Builder setJsonextrainfo( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (jsonextrainfoBuilder_ == null) { + jsonextrainfo_ = builderForValue.build(); + onChanged(); + } else { + jsonextrainfoBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00020000; + return this; + } + public Builder mergeJsonextrainfo(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (jsonextrainfoBuilder_ == null) { + if (((bitField0_ & 0x00020000) == 0x00020000) && + jsonextrainfo_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + jsonextrainfo_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(jsonextrainfo_).mergeFrom(value).buildPartial(); + } else { + jsonextrainfo_ = value; + } + onChanged(); + } else { + jsonextrainfoBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00020000; + return this; + } + public Builder clearJsonextrainfo() { + if (jsonextrainfoBuilder_ == null) { + jsonextrainfo_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + jsonextrainfoBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00020000); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getJsonextrainfoBuilder() { + bitField0_ |= 0x00020000; + onChanged(); + return getJsonextrainfoFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getJsonextrainfoOrBuilder() { + if (jsonextrainfoBuilder_ != null) { + return jsonextrainfoBuilder_.getMessageOrBuilder(); + } else { + return jsonextrainfo_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getJsonextrainfoFieldBuilder() { + if (jsonextrainfoBuilder_ == null) { + jsonextrainfoBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + jsonextrainfo_, + getParentForChildren(), + isClean()); + jsonextrainfo_ = null; + } + return jsonextrainfoBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField contactfullname = 19; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField contactfullname_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> contactfullnameBuilder_; + public boolean hasContactfullname() { + return ((bitField0_ & 0x00040000) == 0x00040000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getContactfullname() { + if (contactfullnameBuilder_ == null) { + return contactfullname_; + } else { + return contactfullnameBuilder_.getMessage(); + } + } + public Builder setContactfullname(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (contactfullnameBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + contactfullname_ = value; + onChanged(); + } else { + contactfullnameBuilder_.setMessage(value); + } + bitField0_ |= 0x00040000; + return this; + } + public Builder setContactfullname( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (contactfullnameBuilder_ == null) { + contactfullname_ = builderForValue.build(); + onChanged(); + } else { + contactfullnameBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00040000; + return this; + } + public Builder mergeContactfullname(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (contactfullnameBuilder_ == null) { + if (((bitField0_ & 0x00040000) == 0x00040000) && + contactfullname_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + contactfullname_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(contactfullname_).mergeFrom(value).buildPartial(); + } else { + contactfullname_ = value; + } + onChanged(); + } else { + contactfullnameBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00040000; + return this; + } + public Builder clearContactfullname() { + if (contactfullnameBuilder_ == null) { + contactfullname_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + contactfullnameBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00040000); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getContactfullnameBuilder() { + bitField0_ |= 0x00040000; + onChanged(); + return getContactfullnameFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getContactfullnameOrBuilder() { + if (contactfullnameBuilder_ != null) { + return contactfullnameBuilder_.getMessageOrBuilder(); + } else { + return contactfullname_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getContactfullnameFieldBuilder() { + if (contactfullnameBuilder_ == null) { + contactfullnameBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + contactfullname_, + getParentForChildren(), + isClean()); + contactfullname_ = null; + } + return contactfullnameBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField contactfax = 20; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField contactfax_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> contactfaxBuilder_; + public boolean hasContactfax() { + return ((bitField0_ & 0x00080000) == 0x00080000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getContactfax() { + if (contactfaxBuilder_ == null) { + return contactfax_; + } else { + return contactfaxBuilder_.getMessage(); + } + } + public Builder setContactfax(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (contactfaxBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + contactfax_ = value; + onChanged(); + } else { + contactfaxBuilder_.setMessage(value); + } + bitField0_ |= 0x00080000; + return this; + } + public Builder setContactfax( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (contactfaxBuilder_ == null) { + contactfax_ = builderForValue.build(); + onChanged(); + } else { + contactfaxBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00080000; + return this; + } + public Builder mergeContactfax(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (contactfaxBuilder_ == null) { + if (((bitField0_ & 0x00080000) == 0x00080000) && + contactfax_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + contactfax_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(contactfax_).mergeFrom(value).buildPartial(); + } else { + contactfax_ = value; + } + onChanged(); + } else { + contactfaxBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00080000; + return this; + } + public Builder clearContactfax() { + if (contactfaxBuilder_ == null) { + contactfax_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + contactfaxBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00080000); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getContactfaxBuilder() { + bitField0_ |= 0x00080000; + onChanged(); + return getContactfaxFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getContactfaxOrBuilder() { + if (contactfaxBuilder_ != null) { + return contactfaxBuilder_.getMessageOrBuilder(); + } else { + return contactfax_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getContactfaxFieldBuilder() { + if (contactfaxBuilder_ == null) { + contactfaxBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + contactfax_, + getParentForChildren(), + isClean()); + contactfax_ = null; + } + return contactfaxBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField contactphone = 21; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField contactphone_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> contactphoneBuilder_; + public boolean hasContactphone() { + return ((bitField0_ & 0x00100000) == 0x00100000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getContactphone() { + if (contactphoneBuilder_ == null) { + return contactphone_; + } else { + return contactphoneBuilder_.getMessage(); + } + } + public Builder setContactphone(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (contactphoneBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + contactphone_ = value; + onChanged(); + } else { + contactphoneBuilder_.setMessage(value); + } + bitField0_ |= 0x00100000; + return this; + } + public Builder setContactphone( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (contactphoneBuilder_ == null) { + contactphone_ = builderForValue.build(); + onChanged(); + } else { + contactphoneBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00100000; + return this; + } + public Builder mergeContactphone(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (contactphoneBuilder_ == null) { + if (((bitField0_ & 0x00100000) == 0x00100000) && + contactphone_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + contactphone_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(contactphone_).mergeFrom(value).buildPartial(); + } else { + contactphone_ = value; + } + onChanged(); + } else { + contactphoneBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00100000; + return this; + } + public Builder clearContactphone() { + if (contactphoneBuilder_ == null) { + contactphone_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + contactphoneBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00100000); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getContactphoneBuilder() { + bitField0_ |= 0x00100000; + onChanged(); + return getContactphoneFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getContactphoneOrBuilder() { + if (contactphoneBuilder_ != null) { + return contactphoneBuilder_.getMessageOrBuilder(); + } else { + return contactphone_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getContactphoneFieldBuilder() { + if (contactphoneBuilder_ == null) { + contactphoneBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + contactphone_, + getParentForChildren(), + isClean()); + contactphone_ = null; + } + return contactphoneBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField contactemail = 22; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField contactemail_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> contactemailBuilder_; + public boolean hasContactemail() { + return ((bitField0_ & 0x00200000) == 0x00200000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getContactemail() { + if (contactemailBuilder_ == null) { + return contactemail_; + } else { + return contactemailBuilder_.getMessage(); + } + } + public Builder setContactemail(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (contactemailBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + contactemail_ = value; + onChanged(); + } else { + contactemailBuilder_.setMessage(value); + } + bitField0_ |= 0x00200000; + return this; + } + public Builder setContactemail( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (contactemailBuilder_ == null) { + contactemail_ = builderForValue.build(); + onChanged(); + } else { + contactemailBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00200000; + return this; + } + public Builder mergeContactemail(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (contactemailBuilder_ == null) { + if (((bitField0_ & 0x00200000) == 0x00200000) && + contactemail_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + contactemail_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(contactemail_).mergeFrom(value).buildPartial(); + } else { + contactemail_ = value; + } + onChanged(); + } else { + contactemailBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00200000; + return this; + } + public Builder clearContactemail() { + if (contactemailBuilder_ == null) { + contactemail_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + contactemailBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00200000); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getContactemailBuilder() { + bitField0_ |= 0x00200000; + onChanged(); + return getContactemailFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getContactemailOrBuilder() { + if (contactemailBuilder_ != null) { + return contactemailBuilder_.getMessageOrBuilder(); + } else { + return contactemail_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getContactemailFieldBuilder() { + if (contactemailBuilder_ == null) { + contactemailBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + contactemail_, + getParentForChildren(), + isClean()); + contactemail_ = null; + } + return contactemailBuilder_; + } + + // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.Project.Metadata) + } + + static { + defaultInstance = new Metadata(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.Project.Metadata) + } + + private int bitField0_; + // optional .eu.dnetlib.data.proto.Project.Metadata metadata = 2; + public static final int METADATA_FIELD_NUMBER = 2; + private eu.dnetlib.data.proto.ProjectProtos.Project.Metadata metadata_; + public boolean hasMetadata() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.ProjectProtos.Project.Metadata getMetadata() { + return metadata_; + } + public eu.dnetlib.data.proto.ProjectProtos.Project.MetadataOrBuilder getMetadataOrBuilder() { + return metadata_; + } + + private void initFields() { + metadata_ = eu.dnetlib.data.proto.ProjectProtos.Project.Metadata.getDefaultInstance(); + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + if (hasMetadata()) { + if (!getMetadata().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeMessage(2, metadata_); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(2, metadata_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static eu.dnetlib.data.proto.ProjectProtos.Project parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.ProjectProtos.Project parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ProjectProtos.Project parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.ProjectProtos.Project parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ProjectProtos.Project parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.ProjectProtos.Project parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ProjectProtos.Project parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.ProjectProtos.Project parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.ProjectProtos.Project parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.ProjectProtos.Project parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(eu.dnetlib.data.proto.ProjectProtos.Project prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder + implements eu.dnetlib.data.proto.ProjectProtos.ProjectOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.ProjectProtos.internal_static_eu_dnetlib_data_proto_Project_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.ProjectProtos.internal_static_eu_dnetlib_data_proto_Project_fieldAccessorTable; + } + + // Construct using eu.dnetlib.data.proto.ProjectProtos.Project.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getMetadataFieldBuilder(); + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + if (metadataBuilder_ == null) { + metadata_ = eu.dnetlib.data.proto.ProjectProtos.Project.Metadata.getDefaultInstance(); + } else { + metadataBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return eu.dnetlib.data.proto.ProjectProtos.Project.getDescriptor(); + } + + public eu.dnetlib.data.proto.ProjectProtos.Project getDefaultInstanceForType() { + return eu.dnetlib.data.proto.ProjectProtos.Project.getDefaultInstance(); + } + + public eu.dnetlib.data.proto.ProjectProtos.Project build() { + eu.dnetlib.data.proto.ProjectProtos.Project result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + private eu.dnetlib.data.proto.ProjectProtos.Project buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + eu.dnetlib.data.proto.ProjectProtos.Project result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return result; + } + + public eu.dnetlib.data.proto.ProjectProtos.Project buildPartial() { + eu.dnetlib.data.proto.ProjectProtos.Project result = new eu.dnetlib.data.proto.ProjectProtos.Project(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + if (metadataBuilder_ == null) { + result.metadata_ = metadata_; + } else { + result.metadata_ = metadataBuilder_.build(); + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof eu.dnetlib.data.proto.ProjectProtos.Project) { + return mergeFrom((eu.dnetlib.data.proto.ProjectProtos.Project)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(eu.dnetlib.data.proto.ProjectProtos.Project other) { + if (other == eu.dnetlib.data.proto.ProjectProtos.Project.getDefaultInstance()) return this; + if (other.hasMetadata()) { + mergeMetadata(other.getMetadata()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + if (hasMetadata()) { + if (!getMetadata().isInitialized()) { + + return false; + } + } + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + } + break; + } + case 18: { + eu.dnetlib.data.proto.ProjectProtos.Project.Metadata.Builder subBuilder = eu.dnetlib.data.proto.ProjectProtos.Project.Metadata.newBuilder(); + if (hasMetadata()) { + subBuilder.mergeFrom(getMetadata()); + } + input.readMessage(subBuilder, extensionRegistry); + setMetadata(subBuilder.buildPartial()); + break; + } + } + } + } + + private int bitField0_; + + // optional .eu.dnetlib.data.proto.Project.Metadata metadata = 2; + private eu.dnetlib.data.proto.ProjectProtos.Project.Metadata metadata_ = eu.dnetlib.data.proto.ProjectProtos.Project.Metadata.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ProjectProtos.Project.Metadata, eu.dnetlib.data.proto.ProjectProtos.Project.Metadata.Builder, eu.dnetlib.data.proto.ProjectProtos.Project.MetadataOrBuilder> metadataBuilder_; + public boolean hasMetadata() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.ProjectProtos.Project.Metadata getMetadata() { + if (metadataBuilder_ == null) { + return metadata_; + } else { + return metadataBuilder_.getMessage(); + } + } + public Builder setMetadata(eu.dnetlib.data.proto.ProjectProtos.Project.Metadata value) { + if (metadataBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + metadata_ = value; + onChanged(); + } else { + metadataBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder setMetadata( + eu.dnetlib.data.proto.ProjectProtos.Project.Metadata.Builder builderForValue) { + if (metadataBuilder_ == null) { + metadata_ = builderForValue.build(); + onChanged(); + } else { + metadataBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder mergeMetadata(eu.dnetlib.data.proto.ProjectProtos.Project.Metadata value) { + if (metadataBuilder_ == null) { + if (((bitField0_ & 0x00000001) == 0x00000001) && + metadata_ != eu.dnetlib.data.proto.ProjectProtos.Project.Metadata.getDefaultInstance()) { + metadata_ = + eu.dnetlib.data.proto.ProjectProtos.Project.Metadata.newBuilder(metadata_).mergeFrom(value).buildPartial(); + } else { + metadata_ = value; + } + onChanged(); + } else { + metadataBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder clearMetadata() { + if (metadataBuilder_ == null) { + metadata_ = eu.dnetlib.data.proto.ProjectProtos.Project.Metadata.getDefaultInstance(); + onChanged(); + } else { + metadataBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + public eu.dnetlib.data.proto.ProjectProtos.Project.Metadata.Builder getMetadataBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return getMetadataFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.ProjectProtos.Project.MetadataOrBuilder getMetadataOrBuilder() { + if (metadataBuilder_ != null) { + return metadataBuilder_.getMessageOrBuilder(); + } else { + return metadata_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ProjectProtos.Project.Metadata, eu.dnetlib.data.proto.ProjectProtos.Project.Metadata.Builder, eu.dnetlib.data.proto.ProjectProtos.Project.MetadataOrBuilder> + getMetadataFieldBuilder() { + if (metadataBuilder_ == null) { + metadataBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ProjectProtos.Project.Metadata, eu.dnetlib.data.proto.ProjectProtos.Project.Metadata.Builder, eu.dnetlib.data.proto.ProjectProtos.Project.MetadataOrBuilder>( + metadata_, + getParentForChildren(), + isClean()); + metadata_ = null; + } + return metadataBuilder_; + } + + // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.Project) + } + + static { + defaultInstance = new Project(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.Project) + } + + private static com.google.protobuf.Descriptors.Descriptor + internal_static_eu_dnetlib_data_proto_Project_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_eu_dnetlib_data_proto_Project_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_eu_dnetlib_data_proto_Project_Metadata_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_eu_dnetlib_data_proto_Project_Metadata_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\rProject.proto\022\025eu.dnetlib.data.proto\032\017" + + "FieldType.proto\"\251\n\n\007Project\0229\n\010metadata\030" + + "\002 \001(\0132\'.eu.dnetlib.data.proto.Project.Me" + + "tadata\032\342\t\n\010Metadata\0226\n\nwebsiteurl\030\001 \001(\0132" + + "\".eu.dnetlib.data.proto.StringField\0220\n\004c" + + "ode\030\002 \001(\0132\".eu.dnetlib.data.proto.String" + + "Field\0223\n\007acronym\030\003 \001(\0132\".eu.dnetlib.data" + + ".proto.StringField\0221\n\005title\030\004 \001(\0132\".eu.d" + + "netlib.data.proto.StringField\0225\n\tstartda" + + "te\030\005 \001(\0132\".eu.dnetlib.data.proto.StringF", + "ield\0223\n\007enddate\030\006 \001(\0132\".eu.dnetlib.data." + + "proto.StringField\022:\n\016callidentifier\030\007 \001(" + + "\0132\".eu.dnetlib.data.proto.StringField\0224\n" + + "\010keywords\030\010 \001(\0132\".eu.dnetlib.data.proto." + + "StringField\0224\n\010duration\030\t \001(\0132\".eu.dnetl" + + "ib.data.proto.StringField\0222\n\006ecsc39\030\n \001(" + + "\0132\".eu.dnetlib.data.proto.StringField\022A\n" + + "\025oamandatepublications\030\013 \001(\0132\".eu.dnetli" + + "b.data.proto.StringField\0229\n\recarticle29_" + + "3\030\014 \001(\0132\".eu.dnetlib.data.proto.StringFi", + "eld\022;\n\010subjects\030\016 \003(\0132).eu.dnetlib.data." + + "proto.StructuredProperty\0227\n\013fundingtree\030" + + "\017 \003(\0132\".eu.dnetlib.data.proto.StringFiel" + + "d\0226\n\014contracttype\030\r \001(\0132 .eu.dnetlib.dat" + + "a.proto.Qualifier\0225\n\toptional1\030\020 \001(\0132\".e" + + "u.dnetlib.data.proto.StringField\0225\n\topti" + + "onal2\030\021 \001(\0132\".eu.dnetlib.data.proto.Stri" + + "ngField\0229\n\rjsonextrainfo\030\022 \001(\0132\".eu.dnet" + + "lib.data.proto.StringField\022;\n\017contactful" + + "lname\030\023 \001(\0132\".eu.dnetlib.data.proto.Stri", + "ngField\0226\n\ncontactfax\030\024 \001(\0132\".eu.dnetlib" + + ".data.proto.StringField\0228\n\014contactphone\030" + + "\025 \001(\0132\".eu.dnetlib.data.proto.StringFiel" + + "d\0228\n\014contactemail\030\026 \001(\0132\".eu.dnetlib.dat" + + "a.proto.StringFieldB&\n\025eu.dnetlib.data.p" + + "rotoB\rProjectProtos" + }; + com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = + new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { + public com.google.protobuf.ExtensionRegistry assignDescriptors( + com.google.protobuf.Descriptors.FileDescriptor root) { + descriptor = root; + internal_static_eu_dnetlib_data_proto_Project_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_eu_dnetlib_data_proto_Project_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_eu_dnetlib_data_proto_Project_descriptor, + new java.lang.String[] { "Metadata", }, + eu.dnetlib.data.proto.ProjectProtos.Project.class, + eu.dnetlib.data.proto.ProjectProtos.Project.Builder.class); + internal_static_eu_dnetlib_data_proto_Project_Metadata_descriptor = + internal_static_eu_dnetlib_data_proto_Project_descriptor.getNestedTypes().get(0); + internal_static_eu_dnetlib_data_proto_Project_Metadata_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_eu_dnetlib_data_proto_Project_Metadata_descriptor, + new java.lang.String[] { "Websiteurl", "Code", "Acronym", "Title", "Startdate", "Enddate", "Callidentifier", "Keywords", "Duration", "Ecsc39", "Oamandatepublications", "Ecarticle293", "Subjects", "Fundingtree", "Contracttype", "Optional1", "Optional2", "Jsonextrainfo", "Contactfullname", "Contactfax", "Contactphone", "Contactemail", }, + eu.dnetlib.data.proto.ProjectProtos.Project.Metadata.class, + eu.dnetlib.data.proto.ProjectProtos.Project.Metadata.Builder.class); + return null; + } + }; + com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + eu.dnetlib.data.proto.FieldTypeProtos.getDescriptor(), + }, assigner); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/RelMetadataProtos.java b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/RelMetadataProtos.java new file mode 100644 index 000000000..585fcfd9d --- /dev/null +++ b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/RelMetadataProtos.java @@ -0,0 +1,680 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: RelMetadata.proto + +package eu.dnetlib.data.proto; + +public final class RelMetadataProtos { + private RelMetadataProtos() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + } + public interface RelMetadataOrBuilder + extends com.google.protobuf.MessageOrBuilder { + + // optional .eu.dnetlib.data.proto.Qualifier semantics = 1; + boolean hasSemantics(); + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getSemantics(); + eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getSemanticsOrBuilder(); + + // optional string startdate = 3; + boolean hasStartdate(); + String getStartdate(); + + // optional string enddate = 4; + boolean hasEnddate(); + String getEnddate(); + } + public static final class RelMetadata extends + com.google.protobuf.GeneratedMessage + implements RelMetadataOrBuilder { + // Use RelMetadata.newBuilder() to construct. + private RelMetadata(Builder builder) { + super(builder); + } + private RelMetadata(boolean noInit) {} + + private static final RelMetadata defaultInstance; + public static RelMetadata getDefaultInstance() { + return defaultInstance; + } + + public RelMetadata getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.RelMetadataProtos.internal_static_eu_dnetlib_data_proto_RelMetadata_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.RelMetadataProtos.internal_static_eu_dnetlib_data_proto_RelMetadata_fieldAccessorTable; + } + + private int bitField0_; + // optional .eu.dnetlib.data.proto.Qualifier semantics = 1; + public static final int SEMANTICS_FIELD_NUMBER = 1; + private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier semantics_; + public boolean hasSemantics() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getSemantics() { + return semantics_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getSemanticsOrBuilder() { + return semantics_; + } + + // optional string startdate = 3; + public static final int STARTDATE_FIELD_NUMBER = 3; + private java.lang.Object startdate_; + public boolean hasStartdate() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public String getStartdate() { + java.lang.Object ref = startdate_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + startdate_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getStartdateBytes() { + java.lang.Object ref = startdate_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + startdate_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // optional string enddate = 4; + public static final int ENDDATE_FIELD_NUMBER = 4; + private java.lang.Object enddate_; + public boolean hasEnddate() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + public String getEnddate() { + java.lang.Object ref = enddate_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + enddate_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getEnddateBytes() { + java.lang.Object ref = enddate_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + enddate_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private void initFields() { + semantics_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + startdate_ = ""; + enddate_ = ""; + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + if (hasSemantics()) { + if (!getSemantics().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeMessage(1, semantics_); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + output.writeBytes(3, getStartdateBytes()); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + output.writeBytes(4, getEnddateBytes()); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, semantics_); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(3, getStartdateBytes()); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(4, getEnddateBytes()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder + implements eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.RelMetadataProtos.internal_static_eu_dnetlib_data_proto_RelMetadata_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.RelMetadataProtos.internal_static_eu_dnetlib_data_proto_RelMetadata_fieldAccessorTable; + } + + // Construct using eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getSemanticsFieldBuilder(); + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + if (semanticsBuilder_ == null) { + semantics_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + } else { + semanticsBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + startdate_ = ""; + bitField0_ = (bitField0_ & ~0x00000002); + enddate_ = ""; + bitField0_ = (bitField0_ & ~0x00000004); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDescriptor(); + } + + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getDefaultInstanceForType() { + return eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); + } + + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata build() { + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + private eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return result; + } + + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata buildPartial() { + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata result = new eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + if (semanticsBuilder_ == null) { + result.semantics_ = semantics_; + } else { + result.semantics_ = semanticsBuilder_.build(); + } + if (((from_bitField0_ & 0x00000002) == 0x00000002)) { + to_bitField0_ |= 0x00000002; + } + result.startdate_ = startdate_; + if (((from_bitField0_ & 0x00000004) == 0x00000004)) { + to_bitField0_ |= 0x00000004; + } + result.enddate_ = enddate_; + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata) { + return mergeFrom((eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata other) { + if (other == eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance()) return this; + if (other.hasSemantics()) { + mergeSemantics(other.getSemantics()); + } + if (other.hasStartdate()) { + setStartdate(other.getStartdate()); + } + if (other.hasEnddate()) { + setEnddate(other.getEnddate()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + if (hasSemantics()) { + if (!getSemantics().isInitialized()) { + + return false; + } + } + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + } + break; + } + case 10: { + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(); + if (hasSemantics()) { + subBuilder.mergeFrom(getSemantics()); + } + input.readMessage(subBuilder, extensionRegistry); + setSemantics(subBuilder.buildPartial()); + break; + } + case 26: { + bitField0_ |= 0x00000002; + startdate_ = input.readBytes(); + break; + } + case 34: { + bitField0_ |= 0x00000004; + enddate_ = input.readBytes(); + break; + } + } + } + } + + private int bitField0_; + + // optional .eu.dnetlib.data.proto.Qualifier semantics = 1; + private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier semantics_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> semanticsBuilder_; + public boolean hasSemantics() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getSemantics() { + if (semanticsBuilder_ == null) { + return semantics_; + } else { + return semanticsBuilder_.getMessage(); + } + } + public Builder setSemantics(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { + if (semanticsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + semantics_ = value; + onChanged(); + } else { + semanticsBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder setSemantics( + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder builderForValue) { + if (semanticsBuilder_ == null) { + semantics_ = builderForValue.build(); + onChanged(); + } else { + semanticsBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder mergeSemantics(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { + if (semanticsBuilder_ == null) { + if (((bitField0_ & 0x00000001) == 0x00000001) && + semantics_ != eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance()) { + semantics_ = + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(semantics_).mergeFrom(value).buildPartial(); + } else { + semantics_ = value; + } + onChanged(); + } else { + semanticsBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder clearSemantics() { + if (semanticsBuilder_ == null) { + semantics_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + onChanged(); + } else { + semanticsBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder getSemanticsBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return getSemanticsFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getSemanticsOrBuilder() { + if (semanticsBuilder_ != null) { + return semanticsBuilder_.getMessageOrBuilder(); + } else { + return semantics_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> + getSemanticsFieldBuilder() { + if (semanticsBuilder_ == null) { + semanticsBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder>( + semantics_, + getParentForChildren(), + isClean()); + semantics_ = null; + } + return semanticsBuilder_; + } + + // optional string startdate = 3; + private java.lang.Object startdate_ = ""; + public boolean hasStartdate() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public String getStartdate() { + java.lang.Object ref = startdate_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + startdate_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setStartdate(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + startdate_ = value; + onChanged(); + return this; + } + public Builder clearStartdate() { + bitField0_ = (bitField0_ & ~0x00000002); + startdate_ = getDefaultInstance().getStartdate(); + onChanged(); + return this; + } + void setStartdate(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000002; + startdate_ = value; + onChanged(); + } + + // optional string enddate = 4; + private java.lang.Object enddate_ = ""; + public boolean hasEnddate() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + public String getEnddate() { + java.lang.Object ref = enddate_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + enddate_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setEnddate(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000004; + enddate_ = value; + onChanged(); + return this; + } + public Builder clearEnddate() { + bitField0_ = (bitField0_ & ~0x00000004); + enddate_ = getDefaultInstance().getEnddate(); + onChanged(); + return this; + } + void setEnddate(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000004; + enddate_ = value; + onChanged(); + } + + // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.RelMetadata) + } + + static { + defaultInstance = new RelMetadata(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.RelMetadata) + } + + private static com.google.protobuf.Descriptors.Descriptor + internal_static_eu_dnetlib_data_proto_RelMetadata_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_eu_dnetlib_data_proto_RelMetadata_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\021RelMetadata.proto\022\025eu.dnetlib.data.pro" + + "to\032\017FieldType.proto\"f\n\013RelMetadata\0223\n\tse" + + "mantics\030\001 \001(\0132 .eu.dnetlib.data.proto.Qu" + + "alifier\022\021\n\tstartdate\030\003 \001(\t\022\017\n\007enddate\030\004 " + + "\001(\tB*\n\025eu.dnetlib.data.protoB\021RelMetadat" + + "aProtos" + }; + com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = + new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { + public com.google.protobuf.ExtensionRegistry assignDescriptors( + com.google.protobuf.Descriptors.FileDescriptor root) { + descriptor = root; + internal_static_eu_dnetlib_data_proto_RelMetadata_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_eu_dnetlib_data_proto_RelMetadata_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_eu_dnetlib_data_proto_RelMetadata_descriptor, + new java.lang.String[] { "Semantics", "Startdate", "Enddate", }, + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.class, + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder.class); + return null; + } + }; + com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + eu.dnetlib.data.proto.FieldTypeProtos.getDescriptor(), + }, assigner); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/RelTypeProtos.java b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/RelTypeProtos.java new file mode 100644 index 000000000..4f4ffe04d --- /dev/null +++ b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/RelTypeProtos.java @@ -0,0 +1,228 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: RelType.proto + +package eu.dnetlib.data.proto; + +public final class RelTypeProtos { + private RelTypeProtos() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + } + public enum RelType + implements com.google.protobuf.ProtocolMessageEnum { + datasourceOrganization(0, 1), + projectOrganization(1, 4), + resultOrganization(2, 5), + resultProject(3, 6), + resultResult(4, 9), + organizationOrganization(5, 11), + ; + + public static final int datasourceOrganization_VALUE = 1; + public static final int projectOrganization_VALUE = 4; + public static final int resultOrganization_VALUE = 5; + public static final int resultProject_VALUE = 6; + public static final int resultResult_VALUE = 9; + public static final int organizationOrganization_VALUE = 11; + + + public final int getNumber() { return value; } + + public static RelType valueOf(int value) { + switch (value) { + case 1: return datasourceOrganization; + case 4: return projectOrganization; + case 5: return resultOrganization; + case 6: return resultProject; + case 9: return resultResult; + case 11: return organizationOrganization; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static com.google.protobuf.Internal.EnumLiteMap + internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public RelType findValueByNumber(int number) { + return RelType.valueOf(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor + getValueDescriptor() { + return getDescriptor().getValues().get(index); + } + public final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptorForType() { + return getDescriptor(); + } + public static final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptor() { + return eu.dnetlib.data.proto.RelTypeProtos.getDescriptor().getEnumTypes().get(0); + } + + private static final RelType[] VALUES = { + datasourceOrganization, projectOrganization, resultOrganization, resultProject, resultResult, organizationOrganization, + }; + + public static RelType valueOf( + com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "EnumValueDescriptor is not for this type."); + } + return VALUES[desc.getIndex()]; + } + + private final int index; + private final int value; + + private RelType(int index, int value) { + this.index = index; + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:eu.dnetlib.data.proto.RelType) + } + + public enum SubRelType + implements com.google.protobuf.ProtocolMessageEnum { + provision(0, 1), + participation(1, 4), + outcome(2, 6), + similarity(3, 8), + publicationDataset(4, 9), + affiliation(5, 12), + dedup(6, 10), + dedupSimilarity(7, 11), + supplement(8, 13), + part(9, 15), + version(10, 16), + relationship(11, 17), + ; + + public static final int provision_VALUE = 1; + public static final int participation_VALUE = 4; + public static final int outcome_VALUE = 6; + public static final int similarity_VALUE = 8; + public static final int publicationDataset_VALUE = 9; + public static final int affiliation_VALUE = 12; + public static final int dedup_VALUE = 10; + public static final int dedupSimilarity_VALUE = 11; + public static final int supplement_VALUE = 13; + public static final int part_VALUE = 15; + public static final int version_VALUE = 16; + public static final int relationship_VALUE = 17; + + + public final int getNumber() { return value; } + + public static SubRelType valueOf(int value) { + switch (value) { + case 1: return provision; + case 4: return participation; + case 6: return outcome; + case 8: return similarity; + case 9: return publicationDataset; + case 12: return affiliation; + case 10: return dedup; + case 11: return dedupSimilarity; + case 13: return supplement; + case 15: return part; + case 16: return version; + case 17: return relationship; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static com.google.protobuf.Internal.EnumLiteMap + internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public SubRelType findValueByNumber(int number) { + return SubRelType.valueOf(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor + getValueDescriptor() { + return getDescriptor().getValues().get(index); + } + public final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptorForType() { + return getDescriptor(); + } + public static final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptor() { + return eu.dnetlib.data.proto.RelTypeProtos.getDescriptor().getEnumTypes().get(1); + } + + private static final SubRelType[] VALUES = { + provision, participation, outcome, similarity, publicationDataset, affiliation, dedup, dedupSimilarity, supplement, part, version, relationship, + }; + + public static SubRelType valueOf( + com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "EnumValueDescriptor is not for this type."); + } + return VALUES[desc.getIndex()]; + } + + private final int index; + private final int value; + + private SubRelType(int index, int value) { + this.index = index; + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:eu.dnetlib.data.proto.SubRelType) + } + + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\rRelType.proto\022\025eu.dnetlib.data.proto*\231" + + "\001\n\007RelType\022\032\n\026datasourceOrganization\020\001\022\027" + + "\n\023projectOrganization\020\004\022\026\n\022resultOrganiz" + + "ation\020\005\022\021\n\rresultProject\020\006\022\020\n\014resultResu" + + "lt\020\t\022\034\n\030organizationOrganization\020\013*\315\001\n\nS" + + "ubRelType\022\r\n\tprovision\020\001\022\021\n\rparticipatio" + + "n\020\004\022\013\n\007outcome\020\006\022\016\n\nsimilarity\020\010\022\026\n\022publ" + + "icationDataset\020\t\022\017\n\013affiliation\020\014\022\t\n\005ded" + + "up\020\n\022\023\n\017dedupSimilarity\020\013\022\016\n\nsupplement\020" + + "\r\022\010\n\004part\020\017\022\013\n\007version\020\020\022\020\n\014relationship", + "\020\021B&\n\025eu.dnetlib.data.protoB\rRelTypeProt" + + "os" + }; + com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = + new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { + public com.google.protobuf.ExtensionRegistry assignDescriptors( + com.google.protobuf.Descriptors.FileDescriptor root) { + descriptor = root; + return null; + } + }; + com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + }, assigner); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/ResultOrganizationProtos.java b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/ResultOrganizationProtos.java new file mode 100644 index 000000000..d551ff255 --- /dev/null +++ b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/ResultOrganizationProtos.java @@ -0,0 +1,1017 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: Result_Organization.proto + +package eu.dnetlib.data.proto; + +public final class ResultOrganizationProtos { + private ResultOrganizationProtos() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + } + public interface ResultOrganizationOrBuilder + extends com.google.protobuf.MessageOrBuilder { + + // optional .eu.dnetlib.data.proto.ResultOrganization.Affiliation affiliation = 1; + boolean hasAffiliation(); + eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation getAffiliation(); + eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.AffiliationOrBuilder getAffiliationOrBuilder(); + } + public static final class ResultOrganization extends + com.google.protobuf.GeneratedMessage + implements ResultOrganizationOrBuilder { + // Use ResultOrganization.newBuilder() to construct. + private ResultOrganization(Builder builder) { + super(builder); + } + private ResultOrganization(boolean noInit) {} + + private static final ResultOrganization defaultInstance; + public static ResultOrganization getDefaultInstance() { + return defaultInstance; + } + + public ResultOrganization getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.ResultOrganizationProtos.internal_static_eu_dnetlib_data_proto_ResultOrganization_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.ResultOrganizationProtos.internal_static_eu_dnetlib_data_proto_ResultOrganization_fieldAccessorTable; + } + + public interface AffiliationOrBuilder + extends com.google.protobuf.MessageOrBuilder { + + // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; + boolean hasRelMetadata(); + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata(); + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder(); + } + public static final class Affiliation extends + com.google.protobuf.GeneratedMessage + implements AffiliationOrBuilder { + // Use Affiliation.newBuilder() to construct. + private Affiliation(Builder builder) { + super(builder); + } + private Affiliation(boolean noInit) {} + + private static final Affiliation defaultInstance; + public static Affiliation getDefaultInstance() { + return defaultInstance; + } + + public Affiliation getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.ResultOrganizationProtos.internal_static_eu_dnetlib_data_proto_ResultOrganization_Affiliation_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.ResultOrganizationProtos.internal_static_eu_dnetlib_data_proto_ResultOrganization_Affiliation_fieldAccessorTable; + } + + public enum RelName + implements com.google.protobuf.ProtocolMessageEnum { + isAuthorInstitutionOf(0, 1), + hasAuthorInstitution(1, 2), + ; + + public static final int isAuthorInstitutionOf_VALUE = 1; + public static final int hasAuthorInstitution_VALUE = 2; + + + public final int getNumber() { return value; } + + public static RelName valueOf(int value) { + switch (value) { + case 1: return isAuthorInstitutionOf; + case 2: return hasAuthorInstitution; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static com.google.protobuf.Internal.EnumLiteMap + internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public RelName findValueByNumber(int number) { + return RelName.valueOf(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor + getValueDescriptor() { + return getDescriptor().getValues().get(index); + } + public final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptorForType() { + return getDescriptor(); + } + public static final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptor() { + return eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation.getDescriptor().getEnumTypes().get(0); + } + + private static final RelName[] VALUES = { + isAuthorInstitutionOf, hasAuthorInstitution, + }; + + public static RelName valueOf( + com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "EnumValueDescriptor is not for this type."); + } + return VALUES[desc.getIndex()]; + } + + private final int index; + private final int value; + + private RelName(int index, int value) { + this.index = index; + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:eu.dnetlib.data.proto.ResultOrganization.Affiliation.RelName) + } + + private int bitField0_; + // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; + public static final int RELMETADATA_FIELD_NUMBER = 1; + private eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata relMetadata_; + public boolean hasRelMetadata() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata() { + return relMetadata_; + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder() { + return relMetadata_; + } + + private void initFields() { + relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + if (!hasRelMetadata()) { + memoizedIsInitialized = 0; + return false; + } + if (!getRelMetadata().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeMessage(1, relMetadata_); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, relMetadata_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder + implements eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.AffiliationOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.ResultOrganizationProtos.internal_static_eu_dnetlib_data_proto_ResultOrganization_Affiliation_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.ResultOrganizationProtos.internal_static_eu_dnetlib_data_proto_ResultOrganization_Affiliation_fieldAccessorTable; + } + + // Construct using eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getRelMetadataFieldBuilder(); + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + if (relMetadataBuilder_ == null) { + relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); + } else { + relMetadataBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation.getDescriptor(); + } + + public eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation getDefaultInstanceForType() { + return eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation.getDefaultInstance(); + } + + public eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation build() { + eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + private eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return result; + } + + public eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation buildPartial() { + eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation result = new eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + if (relMetadataBuilder_ == null) { + result.relMetadata_ = relMetadata_; + } else { + result.relMetadata_ = relMetadataBuilder_.build(); + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation) { + return mergeFrom((eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation other) { + if (other == eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation.getDefaultInstance()) return this; + if (other.hasRelMetadata()) { + mergeRelMetadata(other.getRelMetadata()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + if (!hasRelMetadata()) { + + return false; + } + if (!getRelMetadata().isInitialized()) { + + return false; + } + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + } + break; + } + case 10: { + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder subBuilder = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.newBuilder(); + if (hasRelMetadata()) { + subBuilder.mergeFrom(getRelMetadata()); + } + input.readMessage(subBuilder, extensionRegistry); + setRelMetadata(subBuilder.buildPartial()); + break; + } + } + } + } + + private int bitField0_; + + // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; + private eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder> relMetadataBuilder_; + public boolean hasRelMetadata() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata() { + if (relMetadataBuilder_ == null) { + return relMetadata_; + } else { + return relMetadataBuilder_.getMessage(); + } + } + public Builder setRelMetadata(eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata value) { + if (relMetadataBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + relMetadata_ = value; + onChanged(); + } else { + relMetadataBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder setRelMetadata( + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder builderForValue) { + if (relMetadataBuilder_ == null) { + relMetadata_ = builderForValue.build(); + onChanged(); + } else { + relMetadataBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder mergeRelMetadata(eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata value) { + if (relMetadataBuilder_ == null) { + if (((bitField0_ & 0x00000001) == 0x00000001) && + relMetadata_ != eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance()) { + relMetadata_ = + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.newBuilder(relMetadata_).mergeFrom(value).buildPartial(); + } else { + relMetadata_ = value; + } + onChanged(); + } else { + relMetadataBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder clearRelMetadata() { + if (relMetadataBuilder_ == null) { + relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); + onChanged(); + } else { + relMetadataBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder getRelMetadataBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return getRelMetadataFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder() { + if (relMetadataBuilder_ != null) { + return relMetadataBuilder_.getMessageOrBuilder(); + } else { + return relMetadata_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder> + getRelMetadataFieldBuilder() { + if (relMetadataBuilder_ == null) { + relMetadataBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder>( + relMetadata_, + getParentForChildren(), + isClean()); + relMetadata_ = null; + } + return relMetadataBuilder_; + } + + // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.ResultOrganization.Affiliation) + } + + static { + defaultInstance = new Affiliation(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.ResultOrganization.Affiliation) + } + + private int bitField0_; + // optional .eu.dnetlib.data.proto.ResultOrganization.Affiliation affiliation = 1; + public static final int AFFILIATION_FIELD_NUMBER = 1; + private eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation affiliation_; + public boolean hasAffiliation() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation getAffiliation() { + return affiliation_; + } + public eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.AffiliationOrBuilder getAffiliationOrBuilder() { + return affiliation_; + } + + private void initFields() { + affiliation_ = eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation.getDefaultInstance(); + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + if (hasAffiliation()) { + if (!getAffiliation().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeMessage(1, affiliation_); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, affiliation_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder + implements eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganizationOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.ResultOrganizationProtos.internal_static_eu_dnetlib_data_proto_ResultOrganization_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.ResultOrganizationProtos.internal_static_eu_dnetlib_data_proto_ResultOrganization_fieldAccessorTable; + } + + // Construct using eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getAffiliationFieldBuilder(); + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + if (affiliationBuilder_ == null) { + affiliation_ = eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation.getDefaultInstance(); + } else { + affiliationBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.getDescriptor(); + } + + public eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization getDefaultInstanceForType() { + return eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.getDefaultInstance(); + } + + public eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization build() { + eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + private eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return result; + } + + public eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization buildPartial() { + eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization result = new eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + if (affiliationBuilder_ == null) { + result.affiliation_ = affiliation_; + } else { + result.affiliation_ = affiliationBuilder_.build(); + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization) { + return mergeFrom((eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization other) { + if (other == eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.getDefaultInstance()) return this; + if (other.hasAffiliation()) { + mergeAffiliation(other.getAffiliation()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + if (hasAffiliation()) { + if (!getAffiliation().isInitialized()) { + + return false; + } + } + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + } + break; + } + case 10: { + eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation.Builder subBuilder = eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation.newBuilder(); + if (hasAffiliation()) { + subBuilder.mergeFrom(getAffiliation()); + } + input.readMessage(subBuilder, extensionRegistry); + setAffiliation(subBuilder.buildPartial()); + break; + } + } + } + } + + private int bitField0_; + + // optional .eu.dnetlib.data.proto.ResultOrganization.Affiliation affiliation = 1; + private eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation affiliation_ = eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation, eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation.Builder, eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.AffiliationOrBuilder> affiliationBuilder_; + public boolean hasAffiliation() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation getAffiliation() { + if (affiliationBuilder_ == null) { + return affiliation_; + } else { + return affiliationBuilder_.getMessage(); + } + } + public Builder setAffiliation(eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation value) { + if (affiliationBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + affiliation_ = value; + onChanged(); + } else { + affiliationBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder setAffiliation( + eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation.Builder builderForValue) { + if (affiliationBuilder_ == null) { + affiliation_ = builderForValue.build(); + onChanged(); + } else { + affiliationBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder mergeAffiliation(eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation value) { + if (affiliationBuilder_ == null) { + if (((bitField0_ & 0x00000001) == 0x00000001) && + affiliation_ != eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation.getDefaultInstance()) { + affiliation_ = + eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation.newBuilder(affiliation_).mergeFrom(value).buildPartial(); + } else { + affiliation_ = value; + } + onChanged(); + } else { + affiliationBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder clearAffiliation() { + if (affiliationBuilder_ == null) { + affiliation_ = eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation.getDefaultInstance(); + onChanged(); + } else { + affiliationBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + public eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation.Builder getAffiliationBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return getAffiliationFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.AffiliationOrBuilder getAffiliationOrBuilder() { + if (affiliationBuilder_ != null) { + return affiliationBuilder_.getMessageOrBuilder(); + } else { + return affiliation_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation, eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation.Builder, eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.AffiliationOrBuilder> + getAffiliationFieldBuilder() { + if (affiliationBuilder_ == null) { + affiliationBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation, eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation.Builder, eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.AffiliationOrBuilder>( + affiliation_, + getParentForChildren(), + isClean()); + affiliation_ = null; + } + return affiliationBuilder_; + } + + // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.ResultOrganization) + } + + static { + defaultInstance = new ResultOrganization(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.ResultOrganization) + } + + private static com.google.protobuf.Descriptors.Descriptor + internal_static_eu_dnetlib_data_proto_ResultOrganization_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_eu_dnetlib_data_proto_ResultOrganization_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_eu_dnetlib_data_proto_ResultOrganization_Affiliation_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_eu_dnetlib_data_proto_ResultOrganization_Affiliation_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\031Result_Organization.proto\022\025eu.dnetlib." + + "data.proto\032\021RelMetadata.proto\"\351\001\n\022Result" + + "Organization\022J\n\013affiliation\030\001 \001(\01325.eu.d" + + "netlib.data.proto.ResultOrganization.Aff" + + "iliation\032\206\001\n\013Affiliation\0227\n\013relMetadata\030" + + "\001 \002(\0132\".eu.dnetlib.data.proto.RelMetadat" + + "a\">\n\007RelName\022\031\n\025isAuthorInstitutionOf\020\001\022" + + "\030\n\024hasAuthorInstitution\020\002B1\n\025eu.dnetlib." + + "data.protoB\030ResultOrganizationProtos" + }; + com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = + new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { + public com.google.protobuf.ExtensionRegistry assignDescriptors( + com.google.protobuf.Descriptors.FileDescriptor root) { + descriptor = root; + internal_static_eu_dnetlib_data_proto_ResultOrganization_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_eu_dnetlib_data_proto_ResultOrganization_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_eu_dnetlib_data_proto_ResultOrganization_descriptor, + new java.lang.String[] { "Affiliation", }, + eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.class, + eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Builder.class); + internal_static_eu_dnetlib_data_proto_ResultOrganization_Affiliation_descriptor = + internal_static_eu_dnetlib_data_proto_ResultOrganization_descriptor.getNestedTypes().get(0); + internal_static_eu_dnetlib_data_proto_ResultOrganization_Affiliation_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_eu_dnetlib_data_proto_ResultOrganization_Affiliation_descriptor, + new java.lang.String[] { "RelMetadata", }, + eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation.class, + eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation.Builder.class); + return null; + } + }; + com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + eu.dnetlib.data.proto.RelMetadataProtos.getDescriptor(), + }, assigner); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/ResultProjectProtos.java b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/ResultProjectProtos.java new file mode 100644 index 000000000..0e7948e49 --- /dev/null +++ b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/ResultProjectProtos.java @@ -0,0 +1,1016 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: Result_Project.proto + +package eu.dnetlib.data.proto; + +public final class ResultProjectProtos { + private ResultProjectProtos() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + } + public interface ResultProjectOrBuilder + extends com.google.protobuf.MessageOrBuilder { + + // optional .eu.dnetlib.data.proto.ResultProject.Outcome outcome = 1; + boolean hasOutcome(); + eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome getOutcome(); + eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.OutcomeOrBuilder getOutcomeOrBuilder(); + } + public static final class ResultProject extends + com.google.protobuf.GeneratedMessage + implements ResultProjectOrBuilder { + // Use ResultProject.newBuilder() to construct. + private ResultProject(Builder builder) { + super(builder); + } + private ResultProject(boolean noInit) {} + + private static final ResultProject defaultInstance; + public static ResultProject getDefaultInstance() { + return defaultInstance; + } + + public ResultProject getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.ResultProjectProtos.internal_static_eu_dnetlib_data_proto_ResultProject_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.ResultProjectProtos.internal_static_eu_dnetlib_data_proto_ResultProject_fieldAccessorTable; + } + + public interface OutcomeOrBuilder + extends com.google.protobuf.MessageOrBuilder { + + // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; + boolean hasRelMetadata(); + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata(); + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder(); + } + public static final class Outcome extends + com.google.protobuf.GeneratedMessage + implements OutcomeOrBuilder { + // Use Outcome.newBuilder() to construct. + private Outcome(Builder builder) { + super(builder); + } + private Outcome(boolean noInit) {} + + private static final Outcome defaultInstance; + public static Outcome getDefaultInstance() { + return defaultInstance; + } + + public Outcome getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.ResultProjectProtos.internal_static_eu_dnetlib_data_proto_ResultProject_Outcome_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.ResultProjectProtos.internal_static_eu_dnetlib_data_proto_ResultProject_Outcome_fieldAccessorTable; + } + + public enum RelName + implements com.google.protobuf.ProtocolMessageEnum { + isProducedBy(0, 1), + produces(1, 2), + ; + + public static final int isProducedBy_VALUE = 1; + public static final int produces_VALUE = 2; + + + public final int getNumber() { return value; } + + public static RelName valueOf(int value) { + switch (value) { + case 1: return isProducedBy; + case 2: return produces; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static com.google.protobuf.Internal.EnumLiteMap + internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public RelName findValueByNumber(int number) { + return RelName.valueOf(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor + getValueDescriptor() { + return getDescriptor().getValues().get(index); + } + public final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptorForType() { + return getDescriptor(); + } + public static final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptor() { + return eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome.getDescriptor().getEnumTypes().get(0); + } + + private static final RelName[] VALUES = { + isProducedBy, produces, + }; + + public static RelName valueOf( + com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "EnumValueDescriptor is not for this type."); + } + return VALUES[desc.getIndex()]; + } + + private final int index; + private final int value; + + private RelName(int index, int value) { + this.index = index; + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:eu.dnetlib.data.proto.ResultProject.Outcome.RelName) + } + + private int bitField0_; + // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; + public static final int RELMETADATA_FIELD_NUMBER = 1; + private eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata relMetadata_; + public boolean hasRelMetadata() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata() { + return relMetadata_; + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder() { + return relMetadata_; + } + + private void initFields() { + relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + if (!hasRelMetadata()) { + memoizedIsInitialized = 0; + return false; + } + if (!getRelMetadata().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeMessage(1, relMetadata_); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, relMetadata_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder + implements eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.OutcomeOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.ResultProjectProtos.internal_static_eu_dnetlib_data_proto_ResultProject_Outcome_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.ResultProjectProtos.internal_static_eu_dnetlib_data_proto_ResultProject_Outcome_fieldAccessorTable; + } + + // Construct using eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getRelMetadataFieldBuilder(); + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + if (relMetadataBuilder_ == null) { + relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); + } else { + relMetadataBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome.getDescriptor(); + } + + public eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome getDefaultInstanceForType() { + return eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome.getDefaultInstance(); + } + + public eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome build() { + eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + private eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return result; + } + + public eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome buildPartial() { + eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome result = new eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + if (relMetadataBuilder_ == null) { + result.relMetadata_ = relMetadata_; + } else { + result.relMetadata_ = relMetadataBuilder_.build(); + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome) { + return mergeFrom((eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome other) { + if (other == eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome.getDefaultInstance()) return this; + if (other.hasRelMetadata()) { + mergeRelMetadata(other.getRelMetadata()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + if (!hasRelMetadata()) { + + return false; + } + if (!getRelMetadata().isInitialized()) { + + return false; + } + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + } + break; + } + case 10: { + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder subBuilder = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.newBuilder(); + if (hasRelMetadata()) { + subBuilder.mergeFrom(getRelMetadata()); + } + input.readMessage(subBuilder, extensionRegistry); + setRelMetadata(subBuilder.buildPartial()); + break; + } + } + } + } + + private int bitField0_; + + // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; + private eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder> relMetadataBuilder_; + public boolean hasRelMetadata() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata() { + if (relMetadataBuilder_ == null) { + return relMetadata_; + } else { + return relMetadataBuilder_.getMessage(); + } + } + public Builder setRelMetadata(eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata value) { + if (relMetadataBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + relMetadata_ = value; + onChanged(); + } else { + relMetadataBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder setRelMetadata( + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder builderForValue) { + if (relMetadataBuilder_ == null) { + relMetadata_ = builderForValue.build(); + onChanged(); + } else { + relMetadataBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder mergeRelMetadata(eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata value) { + if (relMetadataBuilder_ == null) { + if (((bitField0_ & 0x00000001) == 0x00000001) && + relMetadata_ != eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance()) { + relMetadata_ = + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.newBuilder(relMetadata_).mergeFrom(value).buildPartial(); + } else { + relMetadata_ = value; + } + onChanged(); + } else { + relMetadataBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder clearRelMetadata() { + if (relMetadataBuilder_ == null) { + relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); + onChanged(); + } else { + relMetadataBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder getRelMetadataBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return getRelMetadataFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder() { + if (relMetadataBuilder_ != null) { + return relMetadataBuilder_.getMessageOrBuilder(); + } else { + return relMetadata_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder> + getRelMetadataFieldBuilder() { + if (relMetadataBuilder_ == null) { + relMetadataBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder>( + relMetadata_, + getParentForChildren(), + isClean()); + relMetadata_ = null; + } + return relMetadataBuilder_; + } + + // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.ResultProject.Outcome) + } + + static { + defaultInstance = new Outcome(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.ResultProject.Outcome) + } + + private int bitField0_; + // optional .eu.dnetlib.data.proto.ResultProject.Outcome outcome = 1; + public static final int OUTCOME_FIELD_NUMBER = 1; + private eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome outcome_; + public boolean hasOutcome() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome getOutcome() { + return outcome_; + } + public eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.OutcomeOrBuilder getOutcomeOrBuilder() { + return outcome_; + } + + private void initFields() { + outcome_ = eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome.getDefaultInstance(); + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + if (hasOutcome()) { + if (!getOutcome().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeMessage(1, outcome_); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, outcome_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static eu.dnetlib.data.proto.ResultProjectProtos.ResultProject parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProjectProtos.ResultProject parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProjectProtos.ResultProject parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProjectProtos.ResultProject parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProjectProtos.ResultProject parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProjectProtos.ResultProject parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProjectProtos.ResultProject parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.ResultProjectProtos.ResultProject parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.ResultProjectProtos.ResultProject parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProjectProtos.ResultProject parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(eu.dnetlib.data.proto.ResultProjectProtos.ResultProject prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder + implements eu.dnetlib.data.proto.ResultProjectProtos.ResultProjectOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.ResultProjectProtos.internal_static_eu_dnetlib_data_proto_ResultProject_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.ResultProjectProtos.internal_static_eu_dnetlib_data_proto_ResultProject_fieldAccessorTable; + } + + // Construct using eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getOutcomeFieldBuilder(); + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + if (outcomeBuilder_ == null) { + outcome_ = eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome.getDefaultInstance(); + } else { + outcomeBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.getDescriptor(); + } + + public eu.dnetlib.data.proto.ResultProjectProtos.ResultProject getDefaultInstanceForType() { + return eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.getDefaultInstance(); + } + + public eu.dnetlib.data.proto.ResultProjectProtos.ResultProject build() { + eu.dnetlib.data.proto.ResultProjectProtos.ResultProject result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + private eu.dnetlib.data.proto.ResultProjectProtos.ResultProject buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + eu.dnetlib.data.proto.ResultProjectProtos.ResultProject result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return result; + } + + public eu.dnetlib.data.proto.ResultProjectProtos.ResultProject buildPartial() { + eu.dnetlib.data.proto.ResultProjectProtos.ResultProject result = new eu.dnetlib.data.proto.ResultProjectProtos.ResultProject(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + if (outcomeBuilder_ == null) { + result.outcome_ = outcome_; + } else { + result.outcome_ = outcomeBuilder_.build(); + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof eu.dnetlib.data.proto.ResultProjectProtos.ResultProject) { + return mergeFrom((eu.dnetlib.data.proto.ResultProjectProtos.ResultProject)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(eu.dnetlib.data.proto.ResultProjectProtos.ResultProject other) { + if (other == eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.getDefaultInstance()) return this; + if (other.hasOutcome()) { + mergeOutcome(other.getOutcome()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + if (hasOutcome()) { + if (!getOutcome().isInitialized()) { + + return false; + } + } + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + } + break; + } + case 10: { + eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome.Builder subBuilder = eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome.newBuilder(); + if (hasOutcome()) { + subBuilder.mergeFrom(getOutcome()); + } + input.readMessage(subBuilder, extensionRegistry); + setOutcome(subBuilder.buildPartial()); + break; + } + } + } + } + + private int bitField0_; + + // optional .eu.dnetlib.data.proto.ResultProject.Outcome outcome = 1; + private eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome outcome_ = eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome, eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome.Builder, eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.OutcomeOrBuilder> outcomeBuilder_; + public boolean hasOutcome() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome getOutcome() { + if (outcomeBuilder_ == null) { + return outcome_; + } else { + return outcomeBuilder_.getMessage(); + } + } + public Builder setOutcome(eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome value) { + if (outcomeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + outcome_ = value; + onChanged(); + } else { + outcomeBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder setOutcome( + eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome.Builder builderForValue) { + if (outcomeBuilder_ == null) { + outcome_ = builderForValue.build(); + onChanged(); + } else { + outcomeBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder mergeOutcome(eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome value) { + if (outcomeBuilder_ == null) { + if (((bitField0_ & 0x00000001) == 0x00000001) && + outcome_ != eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome.getDefaultInstance()) { + outcome_ = + eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome.newBuilder(outcome_).mergeFrom(value).buildPartial(); + } else { + outcome_ = value; + } + onChanged(); + } else { + outcomeBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder clearOutcome() { + if (outcomeBuilder_ == null) { + outcome_ = eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome.getDefaultInstance(); + onChanged(); + } else { + outcomeBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + public eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome.Builder getOutcomeBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return getOutcomeFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.OutcomeOrBuilder getOutcomeOrBuilder() { + if (outcomeBuilder_ != null) { + return outcomeBuilder_.getMessageOrBuilder(); + } else { + return outcome_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome, eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome.Builder, eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.OutcomeOrBuilder> + getOutcomeFieldBuilder() { + if (outcomeBuilder_ == null) { + outcomeBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome, eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome.Builder, eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.OutcomeOrBuilder>( + outcome_, + getParentForChildren(), + isClean()); + outcome_ = null; + } + return outcomeBuilder_; + } + + // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.ResultProject) + } + + static { + defaultInstance = new ResultProject(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.ResultProject) + } + + private static com.google.protobuf.Descriptors.Descriptor + internal_static_eu_dnetlib_data_proto_ResultProject_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_eu_dnetlib_data_proto_ResultProject_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_eu_dnetlib_data_proto_ResultProject_Outcome_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_eu_dnetlib_data_proto_ResultProject_Outcome_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\024Result_Project.proto\022\025eu.dnetlib.data." + + "proto\032\021RelMetadata.proto\"\275\001\n\rResultProje" + + "ct\022=\n\007outcome\030\001 \001(\0132,.eu.dnetlib.data.pr" + + "oto.ResultProject.Outcome\032m\n\007Outcome\0227\n\013" + + "relMetadata\030\001 \002(\0132\".eu.dnetlib.data.prot" + + "o.RelMetadata\")\n\007RelName\022\020\n\014isProducedBy" + + "\020\001\022\014\n\010produces\020\002B,\n\025eu.dnetlib.data.prot" + + "oB\023ResultProjectProtos" + }; + com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = + new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { + public com.google.protobuf.ExtensionRegistry assignDescriptors( + com.google.protobuf.Descriptors.FileDescriptor root) { + descriptor = root; + internal_static_eu_dnetlib_data_proto_ResultProject_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_eu_dnetlib_data_proto_ResultProject_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_eu_dnetlib_data_proto_ResultProject_descriptor, + new java.lang.String[] { "Outcome", }, + eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.class, + eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Builder.class); + internal_static_eu_dnetlib_data_proto_ResultProject_Outcome_descriptor = + internal_static_eu_dnetlib_data_proto_ResultProject_descriptor.getNestedTypes().get(0); + internal_static_eu_dnetlib_data_proto_ResultProject_Outcome_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_eu_dnetlib_data_proto_ResultProject_Outcome_descriptor, + new java.lang.String[] { "RelMetadata", }, + eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome.class, + eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome.Builder.class); + return null; + } + }; + com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + eu.dnetlib.data.proto.RelMetadataProtos.getDescriptor(), + }, assigner); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/ResultProtos.java b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/ResultProtos.java new file mode 100644 index 000000000..816bc203b --- /dev/null +++ b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/ResultProtos.java @@ -0,0 +1,14212 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: Result.proto + +package eu.dnetlib.data.proto; + +public final class ResultProtos { + private ResultProtos() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + } + public interface ResultOrBuilder + extends com.google.protobuf.MessageOrBuilder { + + // optional .eu.dnetlib.data.proto.Result.Metadata metadata = 2; + boolean hasMetadata(); + eu.dnetlib.data.proto.ResultProtos.Result.Metadata getMetadata(); + eu.dnetlib.data.proto.ResultProtos.Result.MetadataOrBuilder getMetadataOrBuilder(); + + // repeated .eu.dnetlib.data.proto.Result.Instance instance = 6; + java.util.List + getInstanceList(); + eu.dnetlib.data.proto.ResultProtos.Result.Instance getInstance(int index); + int getInstanceCount(); + java.util.List + getInstanceOrBuilderList(); + eu.dnetlib.data.proto.ResultProtos.Result.InstanceOrBuilder getInstanceOrBuilder( + int index); + + // repeated .eu.dnetlib.data.proto.Result.ExternalReference externalReference = 7; + java.util.List + getExternalReferenceList(); + eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference getExternalReference(int index); + int getExternalReferenceCount(); + java.util.List + getExternalReferenceOrBuilderList(); + eu.dnetlib.data.proto.ResultProtos.Result.ExternalReferenceOrBuilder getExternalReferenceOrBuilder( + int index); + } + public static final class Result extends + com.google.protobuf.GeneratedMessage + implements ResultOrBuilder { + // Use Result.newBuilder() to construct. + private Result(Builder builder) { + super(builder); + } + private Result(boolean noInit) {} + + private static final Result defaultInstance; + public static Result getDefaultInstance() { + return defaultInstance; + } + + public Result getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_fieldAccessorTable; + } + + public interface MetadataOrBuilder + extends com.google.protobuf.MessageOrBuilder { + + // repeated .eu.dnetlib.data.proto.Author author = 40; + java.util.List + getAuthorList(); + eu.dnetlib.data.proto.FieldTypeProtos.Author getAuthor(int index); + int getAuthorCount(); + java.util.List + getAuthorOrBuilderList(); + eu.dnetlib.data.proto.FieldTypeProtos.AuthorOrBuilder getAuthorOrBuilder( + int index); + + // optional .eu.dnetlib.data.proto.Qualifier resulttype = 8; + boolean hasResulttype(); + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getResulttype(); + eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getResulttypeOrBuilder(); + + // optional .eu.dnetlib.data.proto.Qualifier language = 12; + boolean hasLanguage(); + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getLanguage(); + eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getLanguageOrBuilder(); + + // repeated .eu.dnetlib.data.proto.Qualifier country = 33; + java.util.List + getCountryList(); + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getCountry(int index); + int getCountryCount(); + java.util.List + getCountryOrBuilderList(); + eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getCountryOrBuilder( + int index); + + // repeated .eu.dnetlib.data.proto.StructuredProperty subject = 1; + java.util.List + getSubjectList(); + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty getSubject(int index); + int getSubjectCount(); + java.util.List + getSubjectOrBuilderList(); + eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder getSubjectOrBuilder( + int index); + + // repeated .eu.dnetlib.data.proto.StructuredProperty title = 2; + java.util.List + getTitleList(); + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty getTitle(int index); + int getTitleCount(); + java.util.List + getTitleOrBuilderList(); + eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder getTitleOrBuilder( + int index); + + // repeated .eu.dnetlib.data.proto.StructuredProperty relevantdate = 3; + java.util.List + getRelevantdateList(); + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty getRelevantdate(int index); + int getRelevantdateCount(); + java.util.List + getRelevantdateOrBuilderList(); + eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder getRelevantdateOrBuilder( + int index); + + // repeated .eu.dnetlib.data.proto.StringField description = 25; + java.util.List + getDescriptionList(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getDescription(int index); + int getDescriptionCount(); + java.util.List + getDescriptionOrBuilderList(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDescriptionOrBuilder( + int index); + + // optional .eu.dnetlib.data.proto.StringField dateofacceptance = 4; + boolean hasDateofacceptance(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getDateofacceptance(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDateofacceptanceOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField publisher = 5; + boolean hasPublisher(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getPublisher(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getPublisherOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField embargoenddate = 6; + boolean hasEmbargoenddate(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getEmbargoenddate(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEmbargoenddateOrBuilder(); + + // repeated .eu.dnetlib.data.proto.StringField source = 27; + java.util.List + getSourceList(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getSource(int index); + int getSourceCount(); + java.util.List + getSourceOrBuilderList(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getSourceOrBuilder( + int index); + + // repeated .eu.dnetlib.data.proto.StringField fulltext = 29; + java.util.List + getFulltextList(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getFulltext(int index); + int getFulltextCount(); + java.util.List + getFulltextOrBuilderList(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getFulltextOrBuilder( + int index); + + // repeated .eu.dnetlib.data.proto.StringField format = 21; + java.util.List + getFormatList(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getFormat(int index); + int getFormatCount(); + java.util.List + getFormatOrBuilderList(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getFormatOrBuilder( + int index); + + // repeated .eu.dnetlib.data.proto.StringField contributor = 30; + java.util.List + getContributorList(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getContributor(int index); + int getContributorCount(); + java.util.List + getContributorOrBuilderList(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getContributorOrBuilder( + int index); + + // optional .eu.dnetlib.data.proto.Qualifier resourcetype = 19; + boolean hasResourcetype(); + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getResourcetype(); + eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getResourcetypeOrBuilder(); + + // repeated .eu.dnetlib.data.proto.StringField coverage = 43; + java.util.List + getCoverageList(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getCoverage(int index); + int getCoverageCount(); + java.util.List + getCoverageOrBuilderList(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getCoverageOrBuilder( + int index); + + // repeated .eu.dnetlib.data.proto.Result.Context context = 28; + java.util.List + getContextList(); + eu.dnetlib.data.proto.ResultProtos.Result.Context getContext(int index); + int getContextCount(); + java.util.List + getContextOrBuilderList(); + eu.dnetlib.data.proto.ResultProtos.Result.ContextOrBuilder getContextOrBuilder( + int index); + + // optional .eu.dnetlib.data.proto.Result.Journal journal = 18; + boolean hasJournal(); + eu.dnetlib.data.proto.ResultProtos.Result.Journal getJournal(); + eu.dnetlib.data.proto.ResultProtos.Result.JournalOrBuilder getJournalOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField storagedate = 9; + boolean hasStoragedate(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getStoragedate(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getStoragedateOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField device = 26; + boolean hasDevice(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getDevice(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDeviceOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField size = 20; + boolean hasSize(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getSize(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getSizeOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField version = 22; + boolean hasVersion(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getVersion(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getVersionOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField lastmetadataupdate = 23; + boolean hasLastmetadataupdate(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getLastmetadataupdate(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getLastmetadataupdateOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField metadataversionnumber = 24; + boolean hasMetadataversionnumber(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getMetadataversionnumber(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getMetadataversionnumberOrBuilder(); + + // repeated .eu.dnetlib.data.proto.Result.GeoLocation geolocation = 44; + java.util.List + getGeolocationList(); + eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation getGeolocation(int index); + int getGeolocationCount(); + java.util.List + getGeolocationOrBuilderList(); + eu.dnetlib.data.proto.ResultProtos.Result.GeoLocationOrBuilder getGeolocationOrBuilder( + int index); + + // repeated .eu.dnetlib.data.proto.StringField documentationUrl = 35; + java.util.List + getDocumentationUrlList(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getDocumentationUrl(int index); + int getDocumentationUrlCount(); + java.util.List + getDocumentationUrlOrBuilderList(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDocumentationUrlOrBuilder( + int index); + + // repeated .eu.dnetlib.data.proto.StructuredProperty license = 36; + java.util.List + getLicenseList(); + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty getLicense(int index); + int getLicenseCount(); + java.util.List + getLicenseOrBuilderList(); + eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder getLicenseOrBuilder( + int index); + + // optional .eu.dnetlib.data.proto.StringField codeRepositoryUrl = 38; + boolean hasCodeRepositoryUrl(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getCodeRepositoryUrl(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getCodeRepositoryUrlOrBuilder(); + + // optional .eu.dnetlib.data.proto.Qualifier programmingLanguage = 39; + boolean hasProgrammingLanguage(); + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getProgrammingLanguage(); + eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getProgrammingLanguageOrBuilder(); + + // repeated .eu.dnetlib.data.proto.StringField contactperson = 45; + java.util.List + getContactpersonList(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getContactperson(int index); + int getContactpersonCount(); + java.util.List + getContactpersonOrBuilderList(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getContactpersonOrBuilder( + int index); + + // repeated .eu.dnetlib.data.proto.StringField contactgroup = 41; + java.util.List + getContactgroupList(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getContactgroup(int index); + int getContactgroupCount(); + java.util.List + getContactgroupOrBuilderList(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getContactgroupOrBuilder( + int index); + + // repeated .eu.dnetlib.data.proto.StringField tool = 42; + java.util.List + getToolList(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getTool(int index); + int getToolCount(); + java.util.List + getToolOrBuilderList(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getToolOrBuilder( + int index); + } + public static final class Metadata extends + com.google.protobuf.GeneratedMessage + implements MetadataOrBuilder { + // Use Metadata.newBuilder() to construct. + private Metadata(Builder builder) { + super(builder); + } + private Metadata(boolean noInit) {} + + private static final Metadata defaultInstance; + public static Metadata getDefaultInstance() { + return defaultInstance; + } + + public Metadata getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_Metadata_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_Metadata_fieldAccessorTable; + } + + private int bitField0_; + // repeated .eu.dnetlib.data.proto.Author author = 40; + public static final int AUTHOR_FIELD_NUMBER = 40; + private java.util.List author_; + public java.util.List getAuthorList() { + return author_; + } + public java.util.List + getAuthorOrBuilderList() { + return author_; + } + public int getAuthorCount() { + return author_.size(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.Author getAuthor(int index) { + return author_.get(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.AuthorOrBuilder getAuthorOrBuilder( + int index) { + return author_.get(index); + } + + // optional .eu.dnetlib.data.proto.Qualifier resulttype = 8; + public static final int RESULTTYPE_FIELD_NUMBER = 8; + private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier resulttype_; + public boolean hasResulttype() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getResulttype() { + return resulttype_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getResulttypeOrBuilder() { + return resulttype_; + } + + // optional .eu.dnetlib.data.proto.Qualifier language = 12; + public static final int LANGUAGE_FIELD_NUMBER = 12; + private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier language_; + public boolean hasLanguage() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getLanguage() { + return language_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getLanguageOrBuilder() { + return language_; + } + + // repeated .eu.dnetlib.data.proto.Qualifier country = 33; + public static final int COUNTRY_FIELD_NUMBER = 33; + private java.util.List country_; + public java.util.List getCountryList() { + return country_; + } + public java.util.List + getCountryOrBuilderList() { + return country_; + } + public int getCountryCount() { + return country_.size(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getCountry(int index) { + return country_.get(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getCountryOrBuilder( + int index) { + return country_.get(index); + } + + // repeated .eu.dnetlib.data.proto.StructuredProperty subject = 1; + public static final int SUBJECT_FIELD_NUMBER = 1; + private java.util.List subject_; + public java.util.List getSubjectList() { + return subject_; + } + public java.util.List + getSubjectOrBuilderList() { + return subject_; + } + public int getSubjectCount() { + return subject_.size(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty getSubject(int index) { + return subject_.get(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder getSubjectOrBuilder( + int index) { + return subject_.get(index); + } + + // repeated .eu.dnetlib.data.proto.StructuredProperty title = 2; + public static final int TITLE_FIELD_NUMBER = 2; + private java.util.List title_; + public java.util.List getTitleList() { + return title_; + } + public java.util.List + getTitleOrBuilderList() { + return title_; + } + public int getTitleCount() { + return title_.size(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty getTitle(int index) { + return title_.get(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder getTitleOrBuilder( + int index) { + return title_.get(index); + } + + // repeated .eu.dnetlib.data.proto.StructuredProperty relevantdate = 3; + public static final int RELEVANTDATE_FIELD_NUMBER = 3; + private java.util.List relevantdate_; + public java.util.List getRelevantdateList() { + return relevantdate_; + } + public java.util.List + getRelevantdateOrBuilderList() { + return relevantdate_; + } + public int getRelevantdateCount() { + return relevantdate_.size(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty getRelevantdate(int index) { + return relevantdate_.get(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder getRelevantdateOrBuilder( + int index) { + return relevantdate_.get(index); + } + + // repeated .eu.dnetlib.data.proto.StringField description = 25; + public static final int DESCRIPTION_FIELD_NUMBER = 25; + private java.util.List description_; + public java.util.List getDescriptionList() { + return description_; + } + public java.util.List + getDescriptionOrBuilderList() { + return description_; + } + public int getDescriptionCount() { + return description_.size(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getDescription(int index) { + return description_.get(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDescriptionOrBuilder( + int index) { + return description_.get(index); + } + + // optional .eu.dnetlib.data.proto.StringField dateofacceptance = 4; + public static final int DATEOFACCEPTANCE_FIELD_NUMBER = 4; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField dateofacceptance_; + public boolean hasDateofacceptance() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getDateofacceptance() { + return dateofacceptance_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDateofacceptanceOrBuilder() { + return dateofacceptance_; + } + + // optional .eu.dnetlib.data.proto.StringField publisher = 5; + public static final int PUBLISHER_FIELD_NUMBER = 5; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField publisher_; + public boolean hasPublisher() { + return ((bitField0_ & 0x00000008) == 0x00000008); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getPublisher() { + return publisher_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getPublisherOrBuilder() { + return publisher_; + } + + // optional .eu.dnetlib.data.proto.StringField embargoenddate = 6; + public static final int EMBARGOENDDATE_FIELD_NUMBER = 6; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField embargoenddate_; + public boolean hasEmbargoenddate() { + return ((bitField0_ & 0x00000010) == 0x00000010); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEmbargoenddate() { + return embargoenddate_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEmbargoenddateOrBuilder() { + return embargoenddate_; + } + + // repeated .eu.dnetlib.data.proto.StringField source = 27; + public static final int SOURCE_FIELD_NUMBER = 27; + private java.util.List source_; + public java.util.List getSourceList() { + return source_; + } + public java.util.List + getSourceOrBuilderList() { + return source_; + } + public int getSourceCount() { + return source_.size(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getSource(int index) { + return source_.get(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getSourceOrBuilder( + int index) { + return source_.get(index); + } + + // repeated .eu.dnetlib.data.proto.StringField fulltext = 29; + public static final int FULLTEXT_FIELD_NUMBER = 29; + private java.util.List fulltext_; + public java.util.List getFulltextList() { + return fulltext_; + } + public java.util.List + getFulltextOrBuilderList() { + return fulltext_; + } + public int getFulltextCount() { + return fulltext_.size(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getFulltext(int index) { + return fulltext_.get(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getFulltextOrBuilder( + int index) { + return fulltext_.get(index); + } + + // repeated .eu.dnetlib.data.proto.StringField format = 21; + public static final int FORMAT_FIELD_NUMBER = 21; + private java.util.List format_; + public java.util.List getFormatList() { + return format_; + } + public java.util.List + getFormatOrBuilderList() { + return format_; + } + public int getFormatCount() { + return format_.size(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getFormat(int index) { + return format_.get(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getFormatOrBuilder( + int index) { + return format_.get(index); + } + + // repeated .eu.dnetlib.data.proto.StringField contributor = 30; + public static final int CONTRIBUTOR_FIELD_NUMBER = 30; + private java.util.List contributor_; + public java.util.List getContributorList() { + return contributor_; + } + public java.util.List + getContributorOrBuilderList() { + return contributor_; + } + public int getContributorCount() { + return contributor_.size(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getContributor(int index) { + return contributor_.get(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getContributorOrBuilder( + int index) { + return contributor_.get(index); + } + + // optional .eu.dnetlib.data.proto.Qualifier resourcetype = 19; + public static final int RESOURCETYPE_FIELD_NUMBER = 19; + private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier resourcetype_; + public boolean hasResourcetype() { + return ((bitField0_ & 0x00000020) == 0x00000020); + } + public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getResourcetype() { + return resourcetype_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getResourcetypeOrBuilder() { + return resourcetype_; + } + + // repeated .eu.dnetlib.data.proto.StringField coverage = 43; + public static final int COVERAGE_FIELD_NUMBER = 43; + private java.util.List coverage_; + public java.util.List getCoverageList() { + return coverage_; + } + public java.util.List + getCoverageOrBuilderList() { + return coverage_; + } + public int getCoverageCount() { + return coverage_.size(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getCoverage(int index) { + return coverage_.get(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getCoverageOrBuilder( + int index) { + return coverage_.get(index); + } + + // repeated .eu.dnetlib.data.proto.Result.Context context = 28; + public static final int CONTEXT_FIELD_NUMBER = 28; + private java.util.List context_; + public java.util.List getContextList() { + return context_; + } + public java.util.List + getContextOrBuilderList() { + return context_; + } + public int getContextCount() { + return context_.size(); + } + public eu.dnetlib.data.proto.ResultProtos.Result.Context getContext(int index) { + return context_.get(index); + } + public eu.dnetlib.data.proto.ResultProtos.Result.ContextOrBuilder getContextOrBuilder( + int index) { + return context_.get(index); + } + + // optional .eu.dnetlib.data.proto.Result.Journal journal = 18; + public static final int JOURNAL_FIELD_NUMBER = 18; + private eu.dnetlib.data.proto.ResultProtos.Result.Journal journal_; + public boolean hasJournal() { + return ((bitField0_ & 0x00000040) == 0x00000040); + } + public eu.dnetlib.data.proto.ResultProtos.Result.Journal getJournal() { + return journal_; + } + public eu.dnetlib.data.proto.ResultProtos.Result.JournalOrBuilder getJournalOrBuilder() { + return journal_; + } + + // optional .eu.dnetlib.data.proto.StringField storagedate = 9; + public static final int STORAGEDATE_FIELD_NUMBER = 9; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField storagedate_; + public boolean hasStoragedate() { + return ((bitField0_ & 0x00000080) == 0x00000080); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getStoragedate() { + return storagedate_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getStoragedateOrBuilder() { + return storagedate_; + } + + // optional .eu.dnetlib.data.proto.StringField device = 26; + public static final int DEVICE_FIELD_NUMBER = 26; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField device_; + public boolean hasDevice() { + return ((bitField0_ & 0x00000100) == 0x00000100); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getDevice() { + return device_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDeviceOrBuilder() { + return device_; + } + + // optional .eu.dnetlib.data.proto.StringField size = 20; + public static final int SIZE_FIELD_NUMBER = 20; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField size_; + public boolean hasSize() { + return ((bitField0_ & 0x00000200) == 0x00000200); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getSize() { + return size_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getSizeOrBuilder() { + return size_; + } + + // optional .eu.dnetlib.data.proto.StringField version = 22; + public static final int VERSION_FIELD_NUMBER = 22; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField version_; + public boolean hasVersion() { + return ((bitField0_ & 0x00000400) == 0x00000400); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getVersion() { + return version_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getVersionOrBuilder() { + return version_; + } + + // optional .eu.dnetlib.data.proto.StringField lastmetadataupdate = 23; + public static final int LASTMETADATAUPDATE_FIELD_NUMBER = 23; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField lastmetadataupdate_; + public boolean hasLastmetadataupdate() { + return ((bitField0_ & 0x00000800) == 0x00000800); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getLastmetadataupdate() { + return lastmetadataupdate_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getLastmetadataupdateOrBuilder() { + return lastmetadataupdate_; + } + + // optional .eu.dnetlib.data.proto.StringField metadataversionnumber = 24; + public static final int METADATAVERSIONNUMBER_FIELD_NUMBER = 24; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField metadataversionnumber_; + public boolean hasMetadataversionnumber() { + return ((bitField0_ & 0x00001000) == 0x00001000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getMetadataversionnumber() { + return metadataversionnumber_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getMetadataversionnumberOrBuilder() { + return metadataversionnumber_; + } + + // repeated .eu.dnetlib.data.proto.Result.GeoLocation geolocation = 44; + public static final int GEOLOCATION_FIELD_NUMBER = 44; + private java.util.List geolocation_; + public java.util.List getGeolocationList() { + return geolocation_; + } + public java.util.List + getGeolocationOrBuilderList() { + return geolocation_; + } + public int getGeolocationCount() { + return geolocation_.size(); + } + public eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation getGeolocation(int index) { + return geolocation_.get(index); + } + public eu.dnetlib.data.proto.ResultProtos.Result.GeoLocationOrBuilder getGeolocationOrBuilder( + int index) { + return geolocation_.get(index); + } + + // repeated .eu.dnetlib.data.proto.StringField documentationUrl = 35; + public static final int DOCUMENTATIONURL_FIELD_NUMBER = 35; + private java.util.List documentationUrl_; + public java.util.List getDocumentationUrlList() { + return documentationUrl_; + } + public java.util.List + getDocumentationUrlOrBuilderList() { + return documentationUrl_; + } + public int getDocumentationUrlCount() { + return documentationUrl_.size(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getDocumentationUrl(int index) { + return documentationUrl_.get(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDocumentationUrlOrBuilder( + int index) { + return documentationUrl_.get(index); + } + + // repeated .eu.dnetlib.data.proto.StructuredProperty license = 36; + public static final int LICENSE_FIELD_NUMBER = 36; + private java.util.List license_; + public java.util.List getLicenseList() { + return license_; + } + public java.util.List + getLicenseOrBuilderList() { + return license_; + } + public int getLicenseCount() { + return license_.size(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty getLicense(int index) { + return license_.get(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder getLicenseOrBuilder( + int index) { + return license_.get(index); + } + + // optional .eu.dnetlib.data.proto.StringField codeRepositoryUrl = 38; + public static final int CODEREPOSITORYURL_FIELD_NUMBER = 38; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField codeRepositoryUrl_; + public boolean hasCodeRepositoryUrl() { + return ((bitField0_ & 0x00002000) == 0x00002000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getCodeRepositoryUrl() { + return codeRepositoryUrl_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getCodeRepositoryUrlOrBuilder() { + return codeRepositoryUrl_; + } + + // optional .eu.dnetlib.data.proto.Qualifier programmingLanguage = 39; + public static final int PROGRAMMINGLANGUAGE_FIELD_NUMBER = 39; + private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier programmingLanguage_; + public boolean hasProgrammingLanguage() { + return ((bitField0_ & 0x00004000) == 0x00004000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getProgrammingLanguage() { + return programmingLanguage_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getProgrammingLanguageOrBuilder() { + return programmingLanguage_; + } + + // repeated .eu.dnetlib.data.proto.StringField contactperson = 45; + public static final int CONTACTPERSON_FIELD_NUMBER = 45; + private java.util.List contactperson_; + public java.util.List getContactpersonList() { + return contactperson_; + } + public java.util.List + getContactpersonOrBuilderList() { + return contactperson_; + } + public int getContactpersonCount() { + return contactperson_.size(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getContactperson(int index) { + return contactperson_.get(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getContactpersonOrBuilder( + int index) { + return contactperson_.get(index); + } + + // repeated .eu.dnetlib.data.proto.StringField contactgroup = 41; + public static final int CONTACTGROUP_FIELD_NUMBER = 41; + private java.util.List contactgroup_; + public java.util.List getContactgroupList() { + return contactgroup_; + } + public java.util.List + getContactgroupOrBuilderList() { + return contactgroup_; + } + public int getContactgroupCount() { + return contactgroup_.size(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getContactgroup(int index) { + return contactgroup_.get(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getContactgroupOrBuilder( + int index) { + return contactgroup_.get(index); + } + + // repeated .eu.dnetlib.data.proto.StringField tool = 42; + public static final int TOOL_FIELD_NUMBER = 42; + private java.util.List tool_; + public java.util.List getToolList() { + return tool_; + } + public java.util.List + getToolOrBuilderList() { + return tool_; + } + public int getToolCount() { + return tool_.size(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getTool(int index) { + return tool_.get(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getToolOrBuilder( + int index) { + return tool_.get(index); + } + + private void initFields() { + author_ = java.util.Collections.emptyList(); + resulttype_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + language_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + country_ = java.util.Collections.emptyList(); + subject_ = java.util.Collections.emptyList(); + title_ = java.util.Collections.emptyList(); + relevantdate_ = java.util.Collections.emptyList(); + description_ = java.util.Collections.emptyList(); + dateofacceptance_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + publisher_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + embargoenddate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + source_ = java.util.Collections.emptyList(); + fulltext_ = java.util.Collections.emptyList(); + format_ = java.util.Collections.emptyList(); + contributor_ = java.util.Collections.emptyList(); + resourcetype_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + coverage_ = java.util.Collections.emptyList(); + context_ = java.util.Collections.emptyList(); + journal_ = eu.dnetlib.data.proto.ResultProtos.Result.Journal.getDefaultInstance(); + storagedate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + device_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + size_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + version_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + lastmetadataupdate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + metadataversionnumber_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + geolocation_ = java.util.Collections.emptyList(); + documentationUrl_ = java.util.Collections.emptyList(); + license_ = java.util.Collections.emptyList(); + codeRepositoryUrl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + programmingLanguage_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + contactperson_ = java.util.Collections.emptyList(); + contactgroup_ = java.util.Collections.emptyList(); + tool_ = java.util.Collections.emptyList(); + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + for (int i = 0; i < getAuthorCount(); i++) { + if (!getAuthor(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasResulttype()) { + if (!getResulttype().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasLanguage()) { + if (!getLanguage().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + for (int i = 0; i < getCountryCount(); i++) { + if (!getCountry(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + for (int i = 0; i < getSubjectCount(); i++) { + if (!getSubject(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + for (int i = 0; i < getTitleCount(); i++) { + if (!getTitle(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + for (int i = 0; i < getRelevantdateCount(); i++) { + if (!getRelevantdate(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + for (int i = 0; i < getDescriptionCount(); i++) { + if (!getDescription(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasDateofacceptance()) { + if (!getDateofacceptance().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasPublisher()) { + if (!getPublisher().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasEmbargoenddate()) { + if (!getEmbargoenddate().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + for (int i = 0; i < getSourceCount(); i++) { + if (!getSource(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + for (int i = 0; i < getFulltextCount(); i++) { + if (!getFulltext(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + for (int i = 0; i < getFormatCount(); i++) { + if (!getFormat(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + for (int i = 0; i < getContributorCount(); i++) { + if (!getContributor(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasResourcetype()) { + if (!getResourcetype().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + for (int i = 0; i < getCoverageCount(); i++) { + if (!getCoverage(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + for (int i = 0; i < getContextCount(); i++) { + if (!getContext(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasJournal()) { + if (!getJournal().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasStoragedate()) { + if (!getStoragedate().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasDevice()) { + if (!getDevice().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasSize()) { + if (!getSize().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasVersion()) { + if (!getVersion().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasLastmetadataupdate()) { + if (!getLastmetadataupdate().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasMetadataversionnumber()) { + if (!getMetadataversionnumber().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + for (int i = 0; i < getDocumentationUrlCount(); i++) { + if (!getDocumentationUrl(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + for (int i = 0; i < getLicenseCount(); i++) { + if (!getLicense(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasCodeRepositoryUrl()) { + if (!getCodeRepositoryUrl().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasProgrammingLanguage()) { + if (!getProgrammingLanguage().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + for (int i = 0; i < getContactpersonCount(); i++) { + if (!getContactperson(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + for (int i = 0; i < getContactgroupCount(); i++) { + if (!getContactgroup(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + for (int i = 0; i < getToolCount(); i++) { + if (!getTool(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + for (int i = 0; i < subject_.size(); i++) { + output.writeMessage(1, subject_.get(i)); + } + for (int i = 0; i < title_.size(); i++) { + output.writeMessage(2, title_.get(i)); + } + for (int i = 0; i < relevantdate_.size(); i++) { + output.writeMessage(3, relevantdate_.get(i)); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + output.writeMessage(4, dateofacceptance_); + } + if (((bitField0_ & 0x00000008) == 0x00000008)) { + output.writeMessage(5, publisher_); + } + if (((bitField0_ & 0x00000010) == 0x00000010)) { + output.writeMessage(6, embargoenddate_); + } + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeMessage(8, resulttype_); + } + if (((bitField0_ & 0x00000080) == 0x00000080)) { + output.writeMessage(9, storagedate_); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + output.writeMessage(12, language_); + } + if (((bitField0_ & 0x00000040) == 0x00000040)) { + output.writeMessage(18, journal_); + } + if (((bitField0_ & 0x00000020) == 0x00000020)) { + output.writeMessage(19, resourcetype_); + } + if (((bitField0_ & 0x00000200) == 0x00000200)) { + output.writeMessage(20, size_); + } + for (int i = 0; i < format_.size(); i++) { + output.writeMessage(21, format_.get(i)); + } + if (((bitField0_ & 0x00000400) == 0x00000400)) { + output.writeMessage(22, version_); + } + if (((bitField0_ & 0x00000800) == 0x00000800)) { + output.writeMessage(23, lastmetadataupdate_); + } + if (((bitField0_ & 0x00001000) == 0x00001000)) { + output.writeMessage(24, metadataversionnumber_); + } + for (int i = 0; i < description_.size(); i++) { + output.writeMessage(25, description_.get(i)); + } + if (((bitField0_ & 0x00000100) == 0x00000100)) { + output.writeMessage(26, device_); + } + for (int i = 0; i < source_.size(); i++) { + output.writeMessage(27, source_.get(i)); + } + for (int i = 0; i < context_.size(); i++) { + output.writeMessage(28, context_.get(i)); + } + for (int i = 0; i < fulltext_.size(); i++) { + output.writeMessage(29, fulltext_.get(i)); + } + for (int i = 0; i < contributor_.size(); i++) { + output.writeMessage(30, contributor_.get(i)); + } + for (int i = 0; i < country_.size(); i++) { + output.writeMessage(33, country_.get(i)); + } + for (int i = 0; i < documentationUrl_.size(); i++) { + output.writeMessage(35, documentationUrl_.get(i)); + } + for (int i = 0; i < license_.size(); i++) { + output.writeMessage(36, license_.get(i)); + } + if (((bitField0_ & 0x00002000) == 0x00002000)) { + output.writeMessage(38, codeRepositoryUrl_); + } + if (((bitField0_ & 0x00004000) == 0x00004000)) { + output.writeMessage(39, programmingLanguage_); + } + for (int i = 0; i < author_.size(); i++) { + output.writeMessage(40, author_.get(i)); + } + for (int i = 0; i < contactgroup_.size(); i++) { + output.writeMessage(41, contactgroup_.get(i)); + } + for (int i = 0; i < tool_.size(); i++) { + output.writeMessage(42, tool_.get(i)); + } + for (int i = 0; i < coverage_.size(); i++) { + output.writeMessage(43, coverage_.get(i)); + } + for (int i = 0; i < geolocation_.size(); i++) { + output.writeMessage(44, geolocation_.get(i)); + } + for (int i = 0; i < contactperson_.size(); i++) { + output.writeMessage(45, contactperson_.get(i)); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + for (int i = 0; i < subject_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, subject_.get(i)); + } + for (int i = 0; i < title_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(2, title_.get(i)); + } + for (int i = 0; i < relevantdate_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(3, relevantdate_.get(i)); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(4, dateofacceptance_); + } + if (((bitField0_ & 0x00000008) == 0x00000008)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(5, publisher_); + } + if (((bitField0_ & 0x00000010) == 0x00000010)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(6, embargoenddate_); + } + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(8, resulttype_); + } + if (((bitField0_ & 0x00000080) == 0x00000080)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(9, storagedate_); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(12, language_); + } + if (((bitField0_ & 0x00000040) == 0x00000040)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(18, journal_); + } + if (((bitField0_ & 0x00000020) == 0x00000020)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(19, resourcetype_); + } + if (((bitField0_ & 0x00000200) == 0x00000200)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(20, size_); + } + for (int i = 0; i < format_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(21, format_.get(i)); + } + if (((bitField0_ & 0x00000400) == 0x00000400)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(22, version_); + } + if (((bitField0_ & 0x00000800) == 0x00000800)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(23, lastmetadataupdate_); + } + if (((bitField0_ & 0x00001000) == 0x00001000)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(24, metadataversionnumber_); + } + for (int i = 0; i < description_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(25, description_.get(i)); + } + if (((bitField0_ & 0x00000100) == 0x00000100)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(26, device_); + } + for (int i = 0; i < source_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(27, source_.get(i)); + } + for (int i = 0; i < context_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(28, context_.get(i)); + } + for (int i = 0; i < fulltext_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(29, fulltext_.get(i)); + } + for (int i = 0; i < contributor_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(30, contributor_.get(i)); + } + for (int i = 0; i < country_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(33, country_.get(i)); + } + for (int i = 0; i < documentationUrl_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(35, documentationUrl_.get(i)); + } + for (int i = 0; i < license_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(36, license_.get(i)); + } + if (((bitField0_ & 0x00002000) == 0x00002000)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(38, codeRepositoryUrl_); + } + if (((bitField0_ & 0x00004000) == 0x00004000)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(39, programmingLanguage_); + } + for (int i = 0; i < author_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(40, author_.get(i)); + } + for (int i = 0; i < contactgroup_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(41, contactgroup_.get(i)); + } + for (int i = 0; i < tool_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(42, tool_.get(i)); + } + for (int i = 0; i < coverage_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(43, coverage_.get(i)); + } + for (int i = 0; i < geolocation_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(44, geolocation_.get(i)); + } + for (int i = 0; i < contactperson_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(45, contactperson_.get(i)); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static eu.dnetlib.data.proto.ResultProtos.Result.Metadata parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProtos.Result.Metadata parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProtos.Result.Metadata parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProtos.Result.Metadata parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProtos.Result.Metadata parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProtos.Result.Metadata parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProtos.Result.Metadata parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.ResultProtos.Result.Metadata parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.ResultProtos.Result.Metadata parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProtos.Result.Metadata parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(eu.dnetlib.data.proto.ResultProtos.Result.Metadata prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder + implements eu.dnetlib.data.proto.ResultProtos.Result.MetadataOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_Metadata_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_Metadata_fieldAccessorTable; + } + + // Construct using eu.dnetlib.data.proto.ResultProtos.Result.Metadata.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getAuthorFieldBuilder(); + getResulttypeFieldBuilder(); + getLanguageFieldBuilder(); + getCountryFieldBuilder(); + getSubjectFieldBuilder(); + getTitleFieldBuilder(); + getRelevantdateFieldBuilder(); + getDescriptionFieldBuilder(); + getDateofacceptanceFieldBuilder(); + getPublisherFieldBuilder(); + getEmbargoenddateFieldBuilder(); + getSourceFieldBuilder(); + getFulltextFieldBuilder(); + getFormatFieldBuilder(); + getContributorFieldBuilder(); + getResourcetypeFieldBuilder(); + getCoverageFieldBuilder(); + getContextFieldBuilder(); + getJournalFieldBuilder(); + getStoragedateFieldBuilder(); + getDeviceFieldBuilder(); + getSizeFieldBuilder(); + getVersionFieldBuilder(); + getLastmetadataupdateFieldBuilder(); + getMetadataversionnumberFieldBuilder(); + getGeolocationFieldBuilder(); + getDocumentationUrlFieldBuilder(); + getLicenseFieldBuilder(); + getCodeRepositoryUrlFieldBuilder(); + getProgrammingLanguageFieldBuilder(); + getContactpersonFieldBuilder(); + getContactgroupFieldBuilder(); + getToolFieldBuilder(); + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + if (authorBuilder_ == null) { + author_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + } else { + authorBuilder_.clear(); + } + if (resulttypeBuilder_ == null) { + resulttype_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + } else { + resulttypeBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000002); + if (languageBuilder_ == null) { + language_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + } else { + languageBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000004); + if (countryBuilder_ == null) { + country_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000008); + } else { + countryBuilder_.clear(); + } + if (subjectBuilder_ == null) { + subject_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000010); + } else { + subjectBuilder_.clear(); + } + if (titleBuilder_ == null) { + title_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000020); + } else { + titleBuilder_.clear(); + } + if (relevantdateBuilder_ == null) { + relevantdate_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000040); + } else { + relevantdateBuilder_.clear(); + } + if (descriptionBuilder_ == null) { + description_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000080); + } else { + descriptionBuilder_.clear(); + } + if (dateofacceptanceBuilder_ == null) { + dateofacceptance_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + dateofacceptanceBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000100); + if (publisherBuilder_ == null) { + publisher_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + publisherBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000200); + if (embargoenddateBuilder_ == null) { + embargoenddate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + embargoenddateBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000400); + if (sourceBuilder_ == null) { + source_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000800); + } else { + sourceBuilder_.clear(); + } + if (fulltextBuilder_ == null) { + fulltext_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00001000); + } else { + fulltextBuilder_.clear(); + } + if (formatBuilder_ == null) { + format_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00002000); + } else { + formatBuilder_.clear(); + } + if (contributorBuilder_ == null) { + contributor_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00004000); + } else { + contributorBuilder_.clear(); + } + if (resourcetypeBuilder_ == null) { + resourcetype_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + } else { + resourcetypeBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00008000); + if (coverageBuilder_ == null) { + coverage_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00010000); + } else { + coverageBuilder_.clear(); + } + if (contextBuilder_ == null) { + context_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00020000); + } else { + contextBuilder_.clear(); + } + if (journalBuilder_ == null) { + journal_ = eu.dnetlib.data.proto.ResultProtos.Result.Journal.getDefaultInstance(); + } else { + journalBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00040000); + if (storagedateBuilder_ == null) { + storagedate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + storagedateBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00080000); + if (deviceBuilder_ == null) { + device_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + deviceBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00100000); + if (sizeBuilder_ == null) { + size_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + sizeBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00200000); + if (versionBuilder_ == null) { + version_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + versionBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00400000); + if (lastmetadataupdateBuilder_ == null) { + lastmetadataupdate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + lastmetadataupdateBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00800000); + if (metadataversionnumberBuilder_ == null) { + metadataversionnumber_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + metadataversionnumberBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x01000000); + if (geolocationBuilder_ == null) { + geolocation_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x02000000); + } else { + geolocationBuilder_.clear(); + } + if (documentationUrlBuilder_ == null) { + documentationUrl_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x04000000); + } else { + documentationUrlBuilder_.clear(); + } + if (licenseBuilder_ == null) { + license_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x08000000); + } else { + licenseBuilder_.clear(); + } + if (codeRepositoryUrlBuilder_ == null) { + codeRepositoryUrl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + codeRepositoryUrlBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x10000000); + if (programmingLanguageBuilder_ == null) { + programmingLanguage_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + } else { + programmingLanguageBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x20000000); + if (contactpersonBuilder_ == null) { + contactperson_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x40000000); + } else { + contactpersonBuilder_.clear(); + } + if (contactgroupBuilder_ == null) { + contactgroup_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x80000000); + } else { + contactgroupBuilder_.clear(); + } + if (toolBuilder_ == null) { + tool_ = java.util.Collections.emptyList(); + bitField1_ = (bitField1_ & ~0x00000001); + } else { + toolBuilder_.clear(); + } + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return eu.dnetlib.data.proto.ResultProtos.Result.Metadata.getDescriptor(); + } + + public eu.dnetlib.data.proto.ResultProtos.Result.Metadata getDefaultInstanceForType() { + return eu.dnetlib.data.proto.ResultProtos.Result.Metadata.getDefaultInstance(); + } + + public eu.dnetlib.data.proto.ResultProtos.Result.Metadata build() { + eu.dnetlib.data.proto.ResultProtos.Result.Metadata result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + private eu.dnetlib.data.proto.ResultProtos.Result.Metadata buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + eu.dnetlib.data.proto.ResultProtos.Result.Metadata result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return result; + } + + public eu.dnetlib.data.proto.ResultProtos.Result.Metadata buildPartial() { + eu.dnetlib.data.proto.ResultProtos.Result.Metadata result = new eu.dnetlib.data.proto.ResultProtos.Result.Metadata(this); + int from_bitField0_ = bitField0_; + int from_bitField1_ = bitField1_; + int to_bitField0_ = 0; + if (authorBuilder_ == null) { + if (((bitField0_ & 0x00000001) == 0x00000001)) { + author_ = java.util.Collections.unmodifiableList(author_); + bitField0_ = (bitField0_ & ~0x00000001); + } + result.author_ = author_; + } else { + result.author_ = authorBuilder_.build(); + } + if (((from_bitField0_ & 0x00000002) == 0x00000002)) { + to_bitField0_ |= 0x00000001; + } + if (resulttypeBuilder_ == null) { + result.resulttype_ = resulttype_; + } else { + result.resulttype_ = resulttypeBuilder_.build(); + } + if (((from_bitField0_ & 0x00000004) == 0x00000004)) { + to_bitField0_ |= 0x00000002; + } + if (languageBuilder_ == null) { + result.language_ = language_; + } else { + result.language_ = languageBuilder_.build(); + } + if (countryBuilder_ == null) { + if (((bitField0_ & 0x00000008) == 0x00000008)) { + country_ = java.util.Collections.unmodifiableList(country_); + bitField0_ = (bitField0_ & ~0x00000008); + } + result.country_ = country_; + } else { + result.country_ = countryBuilder_.build(); + } + if (subjectBuilder_ == null) { + if (((bitField0_ & 0x00000010) == 0x00000010)) { + subject_ = java.util.Collections.unmodifiableList(subject_); + bitField0_ = (bitField0_ & ~0x00000010); + } + result.subject_ = subject_; + } else { + result.subject_ = subjectBuilder_.build(); + } + if (titleBuilder_ == null) { + if (((bitField0_ & 0x00000020) == 0x00000020)) { + title_ = java.util.Collections.unmodifiableList(title_); + bitField0_ = (bitField0_ & ~0x00000020); + } + result.title_ = title_; + } else { + result.title_ = titleBuilder_.build(); + } + if (relevantdateBuilder_ == null) { + if (((bitField0_ & 0x00000040) == 0x00000040)) { + relevantdate_ = java.util.Collections.unmodifiableList(relevantdate_); + bitField0_ = (bitField0_ & ~0x00000040); + } + result.relevantdate_ = relevantdate_; + } else { + result.relevantdate_ = relevantdateBuilder_.build(); + } + if (descriptionBuilder_ == null) { + if (((bitField0_ & 0x00000080) == 0x00000080)) { + description_ = java.util.Collections.unmodifiableList(description_); + bitField0_ = (bitField0_ & ~0x00000080); + } + result.description_ = description_; + } else { + result.description_ = descriptionBuilder_.build(); + } + if (((from_bitField0_ & 0x00000100) == 0x00000100)) { + to_bitField0_ |= 0x00000004; + } + if (dateofacceptanceBuilder_ == null) { + result.dateofacceptance_ = dateofacceptance_; + } else { + result.dateofacceptance_ = dateofacceptanceBuilder_.build(); + } + if (((from_bitField0_ & 0x00000200) == 0x00000200)) { + to_bitField0_ |= 0x00000008; + } + if (publisherBuilder_ == null) { + result.publisher_ = publisher_; + } else { + result.publisher_ = publisherBuilder_.build(); + } + if (((from_bitField0_ & 0x00000400) == 0x00000400)) { + to_bitField0_ |= 0x00000010; + } + if (embargoenddateBuilder_ == null) { + result.embargoenddate_ = embargoenddate_; + } else { + result.embargoenddate_ = embargoenddateBuilder_.build(); + } + if (sourceBuilder_ == null) { + if (((bitField0_ & 0x00000800) == 0x00000800)) { + source_ = java.util.Collections.unmodifiableList(source_); + bitField0_ = (bitField0_ & ~0x00000800); + } + result.source_ = source_; + } else { + result.source_ = sourceBuilder_.build(); + } + if (fulltextBuilder_ == null) { + if (((bitField0_ & 0x00001000) == 0x00001000)) { + fulltext_ = java.util.Collections.unmodifiableList(fulltext_); + bitField0_ = (bitField0_ & ~0x00001000); + } + result.fulltext_ = fulltext_; + } else { + result.fulltext_ = fulltextBuilder_.build(); + } + if (formatBuilder_ == null) { + if (((bitField0_ & 0x00002000) == 0x00002000)) { + format_ = java.util.Collections.unmodifiableList(format_); + bitField0_ = (bitField0_ & ~0x00002000); + } + result.format_ = format_; + } else { + result.format_ = formatBuilder_.build(); + } + if (contributorBuilder_ == null) { + if (((bitField0_ & 0x00004000) == 0x00004000)) { + contributor_ = java.util.Collections.unmodifiableList(contributor_); + bitField0_ = (bitField0_ & ~0x00004000); + } + result.contributor_ = contributor_; + } else { + result.contributor_ = contributorBuilder_.build(); + } + if (((from_bitField0_ & 0x00008000) == 0x00008000)) { + to_bitField0_ |= 0x00000020; + } + if (resourcetypeBuilder_ == null) { + result.resourcetype_ = resourcetype_; + } else { + result.resourcetype_ = resourcetypeBuilder_.build(); + } + if (coverageBuilder_ == null) { + if (((bitField0_ & 0x00010000) == 0x00010000)) { + coverage_ = java.util.Collections.unmodifiableList(coverage_); + bitField0_ = (bitField0_ & ~0x00010000); + } + result.coverage_ = coverage_; + } else { + result.coverage_ = coverageBuilder_.build(); + } + if (contextBuilder_ == null) { + if (((bitField0_ & 0x00020000) == 0x00020000)) { + context_ = java.util.Collections.unmodifiableList(context_); + bitField0_ = (bitField0_ & ~0x00020000); + } + result.context_ = context_; + } else { + result.context_ = contextBuilder_.build(); + } + if (((from_bitField0_ & 0x00040000) == 0x00040000)) { + to_bitField0_ |= 0x00000040; + } + if (journalBuilder_ == null) { + result.journal_ = journal_; + } else { + result.journal_ = journalBuilder_.build(); + } + if (((from_bitField0_ & 0x00080000) == 0x00080000)) { + to_bitField0_ |= 0x00000080; + } + if (storagedateBuilder_ == null) { + result.storagedate_ = storagedate_; + } else { + result.storagedate_ = storagedateBuilder_.build(); + } + if (((from_bitField0_ & 0x00100000) == 0x00100000)) { + to_bitField0_ |= 0x00000100; + } + if (deviceBuilder_ == null) { + result.device_ = device_; + } else { + result.device_ = deviceBuilder_.build(); + } + if (((from_bitField0_ & 0x00200000) == 0x00200000)) { + to_bitField0_ |= 0x00000200; + } + if (sizeBuilder_ == null) { + result.size_ = size_; + } else { + result.size_ = sizeBuilder_.build(); + } + if (((from_bitField0_ & 0x00400000) == 0x00400000)) { + to_bitField0_ |= 0x00000400; + } + if (versionBuilder_ == null) { + result.version_ = version_; + } else { + result.version_ = versionBuilder_.build(); + } + if (((from_bitField0_ & 0x00800000) == 0x00800000)) { + to_bitField0_ |= 0x00000800; + } + if (lastmetadataupdateBuilder_ == null) { + result.lastmetadataupdate_ = lastmetadataupdate_; + } else { + result.lastmetadataupdate_ = lastmetadataupdateBuilder_.build(); + } + if (((from_bitField0_ & 0x01000000) == 0x01000000)) { + to_bitField0_ |= 0x00001000; + } + if (metadataversionnumberBuilder_ == null) { + result.metadataversionnumber_ = metadataversionnumber_; + } else { + result.metadataversionnumber_ = metadataversionnumberBuilder_.build(); + } + if (geolocationBuilder_ == null) { + if (((bitField0_ & 0x02000000) == 0x02000000)) { + geolocation_ = java.util.Collections.unmodifiableList(geolocation_); + bitField0_ = (bitField0_ & ~0x02000000); + } + result.geolocation_ = geolocation_; + } else { + result.geolocation_ = geolocationBuilder_.build(); + } + if (documentationUrlBuilder_ == null) { + if (((bitField0_ & 0x04000000) == 0x04000000)) { + documentationUrl_ = java.util.Collections.unmodifiableList(documentationUrl_); + bitField0_ = (bitField0_ & ~0x04000000); + } + result.documentationUrl_ = documentationUrl_; + } else { + result.documentationUrl_ = documentationUrlBuilder_.build(); + } + if (licenseBuilder_ == null) { + if (((bitField0_ & 0x08000000) == 0x08000000)) { + license_ = java.util.Collections.unmodifiableList(license_); + bitField0_ = (bitField0_ & ~0x08000000); + } + result.license_ = license_; + } else { + result.license_ = licenseBuilder_.build(); + } + if (((from_bitField0_ & 0x10000000) == 0x10000000)) { + to_bitField0_ |= 0x00002000; + } + if (codeRepositoryUrlBuilder_ == null) { + result.codeRepositoryUrl_ = codeRepositoryUrl_; + } else { + result.codeRepositoryUrl_ = codeRepositoryUrlBuilder_.build(); + } + if (((from_bitField0_ & 0x20000000) == 0x20000000)) { + to_bitField0_ |= 0x00004000; + } + if (programmingLanguageBuilder_ == null) { + result.programmingLanguage_ = programmingLanguage_; + } else { + result.programmingLanguage_ = programmingLanguageBuilder_.build(); + } + if (contactpersonBuilder_ == null) { + if (((bitField0_ & 0x40000000) == 0x40000000)) { + contactperson_ = java.util.Collections.unmodifiableList(contactperson_); + bitField0_ = (bitField0_ & ~0x40000000); + } + result.contactperson_ = contactperson_; + } else { + result.contactperson_ = contactpersonBuilder_.build(); + } + if (contactgroupBuilder_ == null) { + if (((bitField0_ & 0x80000000) == 0x80000000)) { + contactgroup_ = java.util.Collections.unmodifiableList(contactgroup_); + bitField0_ = (bitField0_ & ~0x80000000); + } + result.contactgroup_ = contactgroup_; + } else { + result.contactgroup_ = contactgroupBuilder_.build(); + } + if (toolBuilder_ == null) { + if (((bitField1_ & 0x00000001) == 0x00000001)) { + tool_ = java.util.Collections.unmodifiableList(tool_); + bitField1_ = (bitField1_ & ~0x00000001); + } + result.tool_ = tool_; + } else { + result.tool_ = toolBuilder_.build(); + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof eu.dnetlib.data.proto.ResultProtos.Result.Metadata) { + return mergeFrom((eu.dnetlib.data.proto.ResultProtos.Result.Metadata)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(eu.dnetlib.data.proto.ResultProtos.Result.Metadata other) { + if (other == eu.dnetlib.data.proto.ResultProtos.Result.Metadata.getDefaultInstance()) return this; + if (authorBuilder_ == null) { + if (!other.author_.isEmpty()) { + if (author_.isEmpty()) { + author_ = other.author_; + bitField0_ = (bitField0_ & ~0x00000001); + } else { + ensureAuthorIsMutable(); + author_.addAll(other.author_); + } + onChanged(); + } + } else { + if (!other.author_.isEmpty()) { + if (authorBuilder_.isEmpty()) { + authorBuilder_.dispose(); + authorBuilder_ = null; + author_ = other.author_; + bitField0_ = (bitField0_ & ~0x00000001); + authorBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + getAuthorFieldBuilder() : null; + } else { + authorBuilder_.addAllMessages(other.author_); + } + } + } + if (other.hasResulttype()) { + mergeResulttype(other.getResulttype()); + } + if (other.hasLanguage()) { + mergeLanguage(other.getLanguage()); + } + if (countryBuilder_ == null) { + if (!other.country_.isEmpty()) { + if (country_.isEmpty()) { + country_ = other.country_; + bitField0_ = (bitField0_ & ~0x00000008); + } else { + ensureCountryIsMutable(); + country_.addAll(other.country_); + } + onChanged(); + } + } else { + if (!other.country_.isEmpty()) { + if (countryBuilder_.isEmpty()) { + countryBuilder_.dispose(); + countryBuilder_ = null; + country_ = other.country_; + bitField0_ = (bitField0_ & ~0x00000008); + countryBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + getCountryFieldBuilder() : null; + } else { + countryBuilder_.addAllMessages(other.country_); + } + } + } + if (subjectBuilder_ == null) { + if (!other.subject_.isEmpty()) { + if (subject_.isEmpty()) { + subject_ = other.subject_; + bitField0_ = (bitField0_ & ~0x00000010); + } else { + ensureSubjectIsMutable(); + subject_.addAll(other.subject_); + } + onChanged(); + } + } else { + if (!other.subject_.isEmpty()) { + if (subjectBuilder_.isEmpty()) { + subjectBuilder_.dispose(); + subjectBuilder_ = null; + subject_ = other.subject_; + bitField0_ = (bitField0_ & ~0x00000010); + subjectBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + getSubjectFieldBuilder() : null; + } else { + subjectBuilder_.addAllMessages(other.subject_); + } + } + } + if (titleBuilder_ == null) { + if (!other.title_.isEmpty()) { + if (title_.isEmpty()) { + title_ = other.title_; + bitField0_ = (bitField0_ & ~0x00000020); + } else { + ensureTitleIsMutable(); + title_.addAll(other.title_); + } + onChanged(); + } + } else { + if (!other.title_.isEmpty()) { + if (titleBuilder_.isEmpty()) { + titleBuilder_.dispose(); + titleBuilder_ = null; + title_ = other.title_; + bitField0_ = (bitField0_ & ~0x00000020); + titleBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + getTitleFieldBuilder() : null; + } else { + titleBuilder_.addAllMessages(other.title_); + } + } + } + if (relevantdateBuilder_ == null) { + if (!other.relevantdate_.isEmpty()) { + if (relevantdate_.isEmpty()) { + relevantdate_ = other.relevantdate_; + bitField0_ = (bitField0_ & ~0x00000040); + } else { + ensureRelevantdateIsMutable(); + relevantdate_.addAll(other.relevantdate_); + } + onChanged(); + } + } else { + if (!other.relevantdate_.isEmpty()) { + if (relevantdateBuilder_.isEmpty()) { + relevantdateBuilder_.dispose(); + relevantdateBuilder_ = null; + relevantdate_ = other.relevantdate_; + bitField0_ = (bitField0_ & ~0x00000040); + relevantdateBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + getRelevantdateFieldBuilder() : null; + } else { + relevantdateBuilder_.addAllMessages(other.relevantdate_); + } + } + } + if (descriptionBuilder_ == null) { + if (!other.description_.isEmpty()) { + if (description_.isEmpty()) { + description_ = other.description_; + bitField0_ = (bitField0_ & ~0x00000080); + } else { + ensureDescriptionIsMutable(); + description_.addAll(other.description_); + } + onChanged(); + } + } else { + if (!other.description_.isEmpty()) { + if (descriptionBuilder_.isEmpty()) { + descriptionBuilder_.dispose(); + descriptionBuilder_ = null; + description_ = other.description_; + bitField0_ = (bitField0_ & ~0x00000080); + descriptionBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + getDescriptionFieldBuilder() : null; + } else { + descriptionBuilder_.addAllMessages(other.description_); + } + } + } + if (other.hasDateofacceptance()) { + mergeDateofacceptance(other.getDateofacceptance()); + } + if (other.hasPublisher()) { + mergePublisher(other.getPublisher()); + } + if (other.hasEmbargoenddate()) { + mergeEmbargoenddate(other.getEmbargoenddate()); + } + if (sourceBuilder_ == null) { + if (!other.source_.isEmpty()) { + if (source_.isEmpty()) { + source_ = other.source_; + bitField0_ = (bitField0_ & ~0x00000800); + } else { + ensureSourceIsMutable(); + source_.addAll(other.source_); + } + onChanged(); + } + } else { + if (!other.source_.isEmpty()) { + if (sourceBuilder_.isEmpty()) { + sourceBuilder_.dispose(); + sourceBuilder_ = null; + source_ = other.source_; + bitField0_ = (bitField0_ & ~0x00000800); + sourceBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + getSourceFieldBuilder() : null; + } else { + sourceBuilder_.addAllMessages(other.source_); + } + } + } + if (fulltextBuilder_ == null) { + if (!other.fulltext_.isEmpty()) { + if (fulltext_.isEmpty()) { + fulltext_ = other.fulltext_; + bitField0_ = (bitField0_ & ~0x00001000); + } else { + ensureFulltextIsMutable(); + fulltext_.addAll(other.fulltext_); + } + onChanged(); + } + } else { + if (!other.fulltext_.isEmpty()) { + if (fulltextBuilder_.isEmpty()) { + fulltextBuilder_.dispose(); + fulltextBuilder_ = null; + fulltext_ = other.fulltext_; + bitField0_ = (bitField0_ & ~0x00001000); + fulltextBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + getFulltextFieldBuilder() : null; + } else { + fulltextBuilder_.addAllMessages(other.fulltext_); + } + } + } + if (formatBuilder_ == null) { + if (!other.format_.isEmpty()) { + if (format_.isEmpty()) { + format_ = other.format_; + bitField0_ = (bitField0_ & ~0x00002000); + } else { + ensureFormatIsMutable(); + format_.addAll(other.format_); + } + onChanged(); + } + } else { + if (!other.format_.isEmpty()) { + if (formatBuilder_.isEmpty()) { + formatBuilder_.dispose(); + formatBuilder_ = null; + format_ = other.format_; + bitField0_ = (bitField0_ & ~0x00002000); + formatBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + getFormatFieldBuilder() : null; + } else { + formatBuilder_.addAllMessages(other.format_); + } + } + } + if (contributorBuilder_ == null) { + if (!other.contributor_.isEmpty()) { + if (contributor_.isEmpty()) { + contributor_ = other.contributor_; + bitField0_ = (bitField0_ & ~0x00004000); + } else { + ensureContributorIsMutable(); + contributor_.addAll(other.contributor_); + } + onChanged(); + } + } else { + if (!other.contributor_.isEmpty()) { + if (contributorBuilder_.isEmpty()) { + contributorBuilder_.dispose(); + contributorBuilder_ = null; + contributor_ = other.contributor_; + bitField0_ = (bitField0_ & ~0x00004000); + contributorBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + getContributorFieldBuilder() : null; + } else { + contributorBuilder_.addAllMessages(other.contributor_); + } + } + } + if (other.hasResourcetype()) { + mergeResourcetype(other.getResourcetype()); + } + if (coverageBuilder_ == null) { + if (!other.coverage_.isEmpty()) { + if (coverage_.isEmpty()) { + coverage_ = other.coverage_; + bitField0_ = (bitField0_ & ~0x00010000); + } else { + ensureCoverageIsMutable(); + coverage_.addAll(other.coverage_); + } + onChanged(); + } + } else { + if (!other.coverage_.isEmpty()) { + if (coverageBuilder_.isEmpty()) { + coverageBuilder_.dispose(); + coverageBuilder_ = null; + coverage_ = other.coverage_; + bitField0_ = (bitField0_ & ~0x00010000); + coverageBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + getCoverageFieldBuilder() : null; + } else { + coverageBuilder_.addAllMessages(other.coverage_); + } + } + } + if (contextBuilder_ == null) { + if (!other.context_.isEmpty()) { + if (context_.isEmpty()) { + context_ = other.context_; + bitField0_ = (bitField0_ & ~0x00020000); + } else { + ensureContextIsMutable(); + context_.addAll(other.context_); + } + onChanged(); + } + } else { + if (!other.context_.isEmpty()) { + if (contextBuilder_.isEmpty()) { + contextBuilder_.dispose(); + contextBuilder_ = null; + context_ = other.context_; + bitField0_ = (bitField0_ & ~0x00020000); + contextBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + getContextFieldBuilder() : null; + } else { + contextBuilder_.addAllMessages(other.context_); + } + } + } + if (other.hasJournal()) { + mergeJournal(other.getJournal()); + } + if (other.hasStoragedate()) { + mergeStoragedate(other.getStoragedate()); + } + if (other.hasDevice()) { + mergeDevice(other.getDevice()); + } + if (other.hasSize()) { + mergeSize(other.getSize()); + } + if (other.hasVersion()) { + mergeVersion(other.getVersion()); + } + if (other.hasLastmetadataupdate()) { + mergeLastmetadataupdate(other.getLastmetadataupdate()); + } + if (other.hasMetadataversionnumber()) { + mergeMetadataversionnumber(other.getMetadataversionnumber()); + } + if (geolocationBuilder_ == null) { + if (!other.geolocation_.isEmpty()) { + if (geolocation_.isEmpty()) { + geolocation_ = other.geolocation_; + bitField0_ = (bitField0_ & ~0x02000000); + } else { + ensureGeolocationIsMutable(); + geolocation_.addAll(other.geolocation_); + } + onChanged(); + } + } else { + if (!other.geolocation_.isEmpty()) { + if (geolocationBuilder_.isEmpty()) { + geolocationBuilder_.dispose(); + geolocationBuilder_ = null; + geolocation_ = other.geolocation_; + bitField0_ = (bitField0_ & ~0x02000000); + geolocationBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + getGeolocationFieldBuilder() : null; + } else { + geolocationBuilder_.addAllMessages(other.geolocation_); + } + } + } + if (documentationUrlBuilder_ == null) { + if (!other.documentationUrl_.isEmpty()) { + if (documentationUrl_.isEmpty()) { + documentationUrl_ = other.documentationUrl_; + bitField0_ = (bitField0_ & ~0x04000000); + } else { + ensureDocumentationUrlIsMutable(); + documentationUrl_.addAll(other.documentationUrl_); + } + onChanged(); + } + } else { + if (!other.documentationUrl_.isEmpty()) { + if (documentationUrlBuilder_.isEmpty()) { + documentationUrlBuilder_.dispose(); + documentationUrlBuilder_ = null; + documentationUrl_ = other.documentationUrl_; + bitField0_ = (bitField0_ & ~0x04000000); + documentationUrlBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + getDocumentationUrlFieldBuilder() : null; + } else { + documentationUrlBuilder_.addAllMessages(other.documentationUrl_); + } + } + } + if (licenseBuilder_ == null) { + if (!other.license_.isEmpty()) { + if (license_.isEmpty()) { + license_ = other.license_; + bitField0_ = (bitField0_ & ~0x08000000); + } else { + ensureLicenseIsMutable(); + license_.addAll(other.license_); + } + onChanged(); + } + } else { + if (!other.license_.isEmpty()) { + if (licenseBuilder_.isEmpty()) { + licenseBuilder_.dispose(); + licenseBuilder_ = null; + license_ = other.license_; + bitField0_ = (bitField0_ & ~0x08000000); + licenseBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + getLicenseFieldBuilder() : null; + } else { + licenseBuilder_.addAllMessages(other.license_); + } + } + } + if (other.hasCodeRepositoryUrl()) { + mergeCodeRepositoryUrl(other.getCodeRepositoryUrl()); + } + if (other.hasProgrammingLanguage()) { + mergeProgrammingLanguage(other.getProgrammingLanguage()); + } + if (contactpersonBuilder_ == null) { + if (!other.contactperson_.isEmpty()) { + if (contactperson_.isEmpty()) { + contactperson_ = other.contactperson_; + bitField0_ = (bitField0_ & ~0x40000000); + } else { + ensureContactpersonIsMutable(); + contactperson_.addAll(other.contactperson_); + } + onChanged(); + } + } else { + if (!other.contactperson_.isEmpty()) { + if (contactpersonBuilder_.isEmpty()) { + contactpersonBuilder_.dispose(); + contactpersonBuilder_ = null; + contactperson_ = other.contactperson_; + bitField0_ = (bitField0_ & ~0x40000000); + contactpersonBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + getContactpersonFieldBuilder() : null; + } else { + contactpersonBuilder_.addAllMessages(other.contactperson_); + } + } + } + if (contactgroupBuilder_ == null) { + if (!other.contactgroup_.isEmpty()) { + if (contactgroup_.isEmpty()) { + contactgroup_ = other.contactgroup_; + bitField0_ = (bitField0_ & ~0x80000000); + } else { + ensureContactgroupIsMutable(); + contactgroup_.addAll(other.contactgroup_); + } + onChanged(); + } + } else { + if (!other.contactgroup_.isEmpty()) { + if (contactgroupBuilder_.isEmpty()) { + contactgroupBuilder_.dispose(); + contactgroupBuilder_ = null; + contactgroup_ = other.contactgroup_; + bitField0_ = (bitField0_ & ~0x80000000); + contactgroupBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + getContactgroupFieldBuilder() : null; + } else { + contactgroupBuilder_.addAllMessages(other.contactgroup_); + } + } + } + if (toolBuilder_ == null) { + if (!other.tool_.isEmpty()) { + if (tool_.isEmpty()) { + tool_ = other.tool_; + bitField1_ = (bitField1_ & ~0x00000001); + } else { + ensureToolIsMutable(); + tool_.addAll(other.tool_); + } + onChanged(); + } + } else { + if (!other.tool_.isEmpty()) { + if (toolBuilder_.isEmpty()) { + toolBuilder_.dispose(); + toolBuilder_ = null; + tool_ = other.tool_; + bitField1_ = (bitField1_ & ~0x00000001); + toolBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + getToolFieldBuilder() : null; + } else { + toolBuilder_.addAllMessages(other.tool_); + } + } + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + for (int i = 0; i < getAuthorCount(); i++) { + if (!getAuthor(i).isInitialized()) { + + return false; + } + } + if (hasResulttype()) { + if (!getResulttype().isInitialized()) { + + return false; + } + } + if (hasLanguage()) { + if (!getLanguage().isInitialized()) { + + return false; + } + } + for (int i = 0; i < getCountryCount(); i++) { + if (!getCountry(i).isInitialized()) { + + return false; + } + } + for (int i = 0; i < getSubjectCount(); i++) { + if (!getSubject(i).isInitialized()) { + + return false; + } + } + for (int i = 0; i < getTitleCount(); i++) { + if (!getTitle(i).isInitialized()) { + + return false; + } + } + for (int i = 0; i < getRelevantdateCount(); i++) { + if (!getRelevantdate(i).isInitialized()) { + + return false; + } + } + for (int i = 0; i < getDescriptionCount(); i++) { + if (!getDescription(i).isInitialized()) { + + return false; + } + } + if (hasDateofacceptance()) { + if (!getDateofacceptance().isInitialized()) { + + return false; + } + } + if (hasPublisher()) { + if (!getPublisher().isInitialized()) { + + return false; + } + } + if (hasEmbargoenddate()) { + if (!getEmbargoenddate().isInitialized()) { + + return false; + } + } + for (int i = 0; i < getSourceCount(); i++) { + if (!getSource(i).isInitialized()) { + + return false; + } + } + for (int i = 0; i < getFulltextCount(); i++) { + if (!getFulltext(i).isInitialized()) { + + return false; + } + } + for (int i = 0; i < getFormatCount(); i++) { + if (!getFormat(i).isInitialized()) { + + return false; + } + } + for (int i = 0; i < getContributorCount(); i++) { + if (!getContributor(i).isInitialized()) { + + return false; + } + } + if (hasResourcetype()) { + if (!getResourcetype().isInitialized()) { + + return false; + } + } + for (int i = 0; i < getCoverageCount(); i++) { + if (!getCoverage(i).isInitialized()) { + + return false; + } + } + for (int i = 0; i < getContextCount(); i++) { + if (!getContext(i).isInitialized()) { + + return false; + } + } + if (hasJournal()) { + if (!getJournal().isInitialized()) { + + return false; + } + } + if (hasStoragedate()) { + if (!getStoragedate().isInitialized()) { + + return false; + } + } + if (hasDevice()) { + if (!getDevice().isInitialized()) { + + return false; + } + } + if (hasSize()) { + if (!getSize().isInitialized()) { + + return false; + } + } + if (hasVersion()) { + if (!getVersion().isInitialized()) { + + return false; + } + } + if (hasLastmetadataupdate()) { + if (!getLastmetadataupdate().isInitialized()) { + + return false; + } + } + if (hasMetadataversionnumber()) { + if (!getMetadataversionnumber().isInitialized()) { + + return false; + } + } + for (int i = 0; i < getDocumentationUrlCount(); i++) { + if (!getDocumentationUrl(i).isInitialized()) { + + return false; + } + } + for (int i = 0; i < getLicenseCount(); i++) { + if (!getLicense(i).isInitialized()) { + + return false; + } + } + if (hasCodeRepositoryUrl()) { + if (!getCodeRepositoryUrl().isInitialized()) { + + return false; + } + } + if (hasProgrammingLanguage()) { + if (!getProgrammingLanguage().isInitialized()) { + + return false; + } + } + for (int i = 0; i < getContactpersonCount(); i++) { + if (!getContactperson(i).isInitialized()) { + + return false; + } + } + for (int i = 0; i < getContactgroupCount(); i++) { + if (!getContactgroup(i).isInitialized()) { + + return false; + } + } + for (int i = 0; i < getToolCount(); i++) { + if (!getTool(i).isInitialized()) { + + return false; + } + } + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + } + break; + } + case 10: { + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addSubject(subBuilder.buildPartial()); + break; + } + case 18: { + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addTitle(subBuilder.buildPartial()); + break; + } + case 26: { + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addRelevantdate(subBuilder.buildPartial()); + break; + } + case 34: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasDateofacceptance()) { + subBuilder.mergeFrom(getDateofacceptance()); + } + input.readMessage(subBuilder, extensionRegistry); + setDateofacceptance(subBuilder.buildPartial()); + break; + } + case 42: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasPublisher()) { + subBuilder.mergeFrom(getPublisher()); + } + input.readMessage(subBuilder, extensionRegistry); + setPublisher(subBuilder.buildPartial()); + break; + } + case 50: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasEmbargoenddate()) { + subBuilder.mergeFrom(getEmbargoenddate()); + } + input.readMessage(subBuilder, extensionRegistry); + setEmbargoenddate(subBuilder.buildPartial()); + break; + } + case 66: { + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(); + if (hasResulttype()) { + subBuilder.mergeFrom(getResulttype()); + } + input.readMessage(subBuilder, extensionRegistry); + setResulttype(subBuilder.buildPartial()); + break; + } + case 74: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasStoragedate()) { + subBuilder.mergeFrom(getStoragedate()); + } + input.readMessage(subBuilder, extensionRegistry); + setStoragedate(subBuilder.buildPartial()); + break; + } + case 98: { + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(); + if (hasLanguage()) { + subBuilder.mergeFrom(getLanguage()); + } + input.readMessage(subBuilder, extensionRegistry); + setLanguage(subBuilder.buildPartial()); + break; + } + case 146: { + eu.dnetlib.data.proto.ResultProtos.Result.Journal.Builder subBuilder = eu.dnetlib.data.proto.ResultProtos.Result.Journal.newBuilder(); + if (hasJournal()) { + subBuilder.mergeFrom(getJournal()); + } + input.readMessage(subBuilder, extensionRegistry); + setJournal(subBuilder.buildPartial()); + break; + } + case 154: { + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(); + if (hasResourcetype()) { + subBuilder.mergeFrom(getResourcetype()); + } + input.readMessage(subBuilder, extensionRegistry); + setResourcetype(subBuilder.buildPartial()); + break; + } + case 162: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasSize()) { + subBuilder.mergeFrom(getSize()); + } + input.readMessage(subBuilder, extensionRegistry); + setSize(subBuilder.buildPartial()); + break; + } + case 170: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addFormat(subBuilder.buildPartial()); + break; + } + case 178: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasVersion()) { + subBuilder.mergeFrom(getVersion()); + } + input.readMessage(subBuilder, extensionRegistry); + setVersion(subBuilder.buildPartial()); + break; + } + case 186: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasLastmetadataupdate()) { + subBuilder.mergeFrom(getLastmetadataupdate()); + } + input.readMessage(subBuilder, extensionRegistry); + setLastmetadataupdate(subBuilder.buildPartial()); + break; + } + case 194: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasMetadataversionnumber()) { + subBuilder.mergeFrom(getMetadataversionnumber()); + } + input.readMessage(subBuilder, extensionRegistry); + setMetadataversionnumber(subBuilder.buildPartial()); + break; + } + case 202: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addDescription(subBuilder.buildPartial()); + break; + } + case 210: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasDevice()) { + subBuilder.mergeFrom(getDevice()); + } + input.readMessage(subBuilder, extensionRegistry); + setDevice(subBuilder.buildPartial()); + break; + } + case 218: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addSource(subBuilder.buildPartial()); + break; + } + case 226: { + eu.dnetlib.data.proto.ResultProtos.Result.Context.Builder subBuilder = eu.dnetlib.data.proto.ResultProtos.Result.Context.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addContext(subBuilder.buildPartial()); + break; + } + case 234: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addFulltext(subBuilder.buildPartial()); + break; + } + case 242: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addContributor(subBuilder.buildPartial()); + break; + } + case 266: { + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addCountry(subBuilder.buildPartial()); + break; + } + case 282: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addDocumentationUrl(subBuilder.buildPartial()); + break; + } + case 290: { + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addLicense(subBuilder.buildPartial()); + break; + } + case 306: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasCodeRepositoryUrl()) { + subBuilder.mergeFrom(getCodeRepositoryUrl()); + } + input.readMessage(subBuilder, extensionRegistry); + setCodeRepositoryUrl(subBuilder.buildPartial()); + break; + } + case 314: { + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(); + if (hasProgrammingLanguage()) { + subBuilder.mergeFrom(getProgrammingLanguage()); + } + input.readMessage(subBuilder, extensionRegistry); + setProgrammingLanguage(subBuilder.buildPartial()); + break; + } + case 322: { + eu.dnetlib.data.proto.FieldTypeProtos.Author.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.Author.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addAuthor(subBuilder.buildPartial()); + break; + } + case 330: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addContactgroup(subBuilder.buildPartial()); + break; + } + case 338: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addTool(subBuilder.buildPartial()); + break; + } + case 346: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addCoverage(subBuilder.buildPartial()); + break; + } + case 354: { + eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation.Builder subBuilder = eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addGeolocation(subBuilder.buildPartial()); + break; + } + case 362: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addContactperson(subBuilder.buildPartial()); + break; + } + } + } + } + + private int bitField0_; + private int bitField1_; + + // repeated .eu.dnetlib.data.proto.Author author = 40; + private java.util.List author_ = + java.util.Collections.emptyList(); + private void ensureAuthorIsMutable() { + if (!((bitField0_ & 0x00000001) == 0x00000001)) { + author_ = new java.util.ArrayList(author_); + bitField0_ |= 0x00000001; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.Author, eu.dnetlib.data.proto.FieldTypeProtos.Author.Builder, eu.dnetlib.data.proto.FieldTypeProtos.AuthorOrBuilder> authorBuilder_; + + public java.util.List getAuthorList() { + if (authorBuilder_ == null) { + return java.util.Collections.unmodifiableList(author_); + } else { + return authorBuilder_.getMessageList(); + } + } + public int getAuthorCount() { + if (authorBuilder_ == null) { + return author_.size(); + } else { + return authorBuilder_.getCount(); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.Author getAuthor(int index) { + if (authorBuilder_ == null) { + return author_.get(index); + } else { + return authorBuilder_.getMessage(index); + } + } + public Builder setAuthor( + int index, eu.dnetlib.data.proto.FieldTypeProtos.Author value) { + if (authorBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureAuthorIsMutable(); + author_.set(index, value); + onChanged(); + } else { + authorBuilder_.setMessage(index, value); + } + return this; + } + public Builder setAuthor( + int index, eu.dnetlib.data.proto.FieldTypeProtos.Author.Builder builderForValue) { + if (authorBuilder_ == null) { + ensureAuthorIsMutable(); + author_.set(index, builderForValue.build()); + onChanged(); + } else { + authorBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + public Builder addAuthor(eu.dnetlib.data.proto.FieldTypeProtos.Author value) { + if (authorBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureAuthorIsMutable(); + author_.add(value); + onChanged(); + } else { + authorBuilder_.addMessage(value); + } + return this; + } + public Builder addAuthor( + int index, eu.dnetlib.data.proto.FieldTypeProtos.Author value) { + if (authorBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureAuthorIsMutable(); + author_.add(index, value); + onChanged(); + } else { + authorBuilder_.addMessage(index, value); + } + return this; + } + public Builder addAuthor( + eu.dnetlib.data.proto.FieldTypeProtos.Author.Builder builderForValue) { + if (authorBuilder_ == null) { + ensureAuthorIsMutable(); + author_.add(builderForValue.build()); + onChanged(); + } else { + authorBuilder_.addMessage(builderForValue.build()); + } + return this; + } + public Builder addAuthor( + int index, eu.dnetlib.data.proto.FieldTypeProtos.Author.Builder builderForValue) { + if (authorBuilder_ == null) { + ensureAuthorIsMutable(); + author_.add(index, builderForValue.build()); + onChanged(); + } else { + authorBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + public Builder addAllAuthor( + java.lang.Iterable values) { + if (authorBuilder_ == null) { + ensureAuthorIsMutable(); + super.addAll(values, author_); + onChanged(); + } else { + authorBuilder_.addAllMessages(values); + } + return this; + } + public Builder clearAuthor() { + if (authorBuilder_ == null) { + author_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + } else { + authorBuilder_.clear(); + } + return this; + } + public Builder removeAuthor(int index) { + if (authorBuilder_ == null) { + ensureAuthorIsMutable(); + author_.remove(index); + onChanged(); + } else { + authorBuilder_.remove(index); + } + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.Author.Builder getAuthorBuilder( + int index) { + return getAuthorFieldBuilder().getBuilder(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.AuthorOrBuilder getAuthorOrBuilder( + int index) { + if (authorBuilder_ == null) { + return author_.get(index); } else { + return authorBuilder_.getMessageOrBuilder(index); + } + } + public java.util.List + getAuthorOrBuilderList() { + if (authorBuilder_ != null) { + return authorBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(author_); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.Author.Builder addAuthorBuilder() { + return getAuthorFieldBuilder().addBuilder( + eu.dnetlib.data.proto.FieldTypeProtos.Author.getDefaultInstance()); + } + public eu.dnetlib.data.proto.FieldTypeProtos.Author.Builder addAuthorBuilder( + int index) { + return getAuthorFieldBuilder().addBuilder( + index, eu.dnetlib.data.proto.FieldTypeProtos.Author.getDefaultInstance()); + } + public java.util.List + getAuthorBuilderList() { + return getAuthorFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.Author, eu.dnetlib.data.proto.FieldTypeProtos.Author.Builder, eu.dnetlib.data.proto.FieldTypeProtos.AuthorOrBuilder> + getAuthorFieldBuilder() { + if (authorBuilder_ == null) { + authorBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.Author, eu.dnetlib.data.proto.FieldTypeProtos.Author.Builder, eu.dnetlib.data.proto.FieldTypeProtos.AuthorOrBuilder>( + author_, + ((bitField0_ & 0x00000001) == 0x00000001), + getParentForChildren(), + isClean()); + author_ = null; + } + return authorBuilder_; + } + + // optional .eu.dnetlib.data.proto.Qualifier resulttype = 8; + private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier resulttype_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> resulttypeBuilder_; + public boolean hasResulttype() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getResulttype() { + if (resulttypeBuilder_ == null) { + return resulttype_; + } else { + return resulttypeBuilder_.getMessage(); + } + } + public Builder setResulttype(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { + if (resulttypeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + resulttype_ = value; + onChanged(); + } else { + resulttypeBuilder_.setMessage(value); + } + bitField0_ |= 0x00000002; + return this; + } + public Builder setResulttype( + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder builderForValue) { + if (resulttypeBuilder_ == null) { + resulttype_ = builderForValue.build(); + onChanged(); + } else { + resulttypeBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000002; + return this; + } + public Builder mergeResulttype(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { + if (resulttypeBuilder_ == null) { + if (((bitField0_ & 0x00000002) == 0x00000002) && + resulttype_ != eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance()) { + resulttype_ = + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(resulttype_).mergeFrom(value).buildPartial(); + } else { + resulttype_ = value; + } + onChanged(); + } else { + resulttypeBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000002; + return this; + } + public Builder clearResulttype() { + if (resulttypeBuilder_ == null) { + resulttype_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + onChanged(); + } else { + resulttypeBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000002); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder getResulttypeBuilder() { + bitField0_ |= 0x00000002; + onChanged(); + return getResulttypeFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getResulttypeOrBuilder() { + if (resulttypeBuilder_ != null) { + return resulttypeBuilder_.getMessageOrBuilder(); + } else { + return resulttype_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> + getResulttypeFieldBuilder() { + if (resulttypeBuilder_ == null) { + resulttypeBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder>( + resulttype_, + getParentForChildren(), + isClean()); + resulttype_ = null; + } + return resulttypeBuilder_; + } + + // optional .eu.dnetlib.data.proto.Qualifier language = 12; + private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier language_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> languageBuilder_; + public boolean hasLanguage() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getLanguage() { + if (languageBuilder_ == null) { + return language_; + } else { + return languageBuilder_.getMessage(); + } + } + public Builder setLanguage(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { + if (languageBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + language_ = value; + onChanged(); + } else { + languageBuilder_.setMessage(value); + } + bitField0_ |= 0x00000004; + return this; + } + public Builder setLanguage( + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder builderForValue) { + if (languageBuilder_ == null) { + language_ = builderForValue.build(); + onChanged(); + } else { + languageBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000004; + return this; + } + public Builder mergeLanguage(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { + if (languageBuilder_ == null) { + if (((bitField0_ & 0x00000004) == 0x00000004) && + language_ != eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance()) { + language_ = + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(language_).mergeFrom(value).buildPartial(); + } else { + language_ = value; + } + onChanged(); + } else { + languageBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000004; + return this; + } + public Builder clearLanguage() { + if (languageBuilder_ == null) { + language_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + onChanged(); + } else { + languageBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000004); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder getLanguageBuilder() { + bitField0_ |= 0x00000004; + onChanged(); + return getLanguageFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getLanguageOrBuilder() { + if (languageBuilder_ != null) { + return languageBuilder_.getMessageOrBuilder(); + } else { + return language_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> + getLanguageFieldBuilder() { + if (languageBuilder_ == null) { + languageBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder>( + language_, + getParentForChildren(), + isClean()); + language_ = null; + } + return languageBuilder_; + } + + // repeated .eu.dnetlib.data.proto.Qualifier country = 33; + private java.util.List country_ = + java.util.Collections.emptyList(); + private void ensureCountryIsMutable() { + if (!((bitField0_ & 0x00000008) == 0x00000008)) { + country_ = new java.util.ArrayList(country_); + bitField0_ |= 0x00000008; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> countryBuilder_; + + public java.util.List getCountryList() { + if (countryBuilder_ == null) { + return java.util.Collections.unmodifiableList(country_); + } else { + return countryBuilder_.getMessageList(); + } + } + public int getCountryCount() { + if (countryBuilder_ == null) { + return country_.size(); + } else { + return countryBuilder_.getCount(); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getCountry(int index) { + if (countryBuilder_ == null) { + return country_.get(index); + } else { + return countryBuilder_.getMessage(index); + } + } + public Builder setCountry( + int index, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { + if (countryBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureCountryIsMutable(); + country_.set(index, value); + onChanged(); + } else { + countryBuilder_.setMessage(index, value); + } + return this; + } + public Builder setCountry( + int index, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder builderForValue) { + if (countryBuilder_ == null) { + ensureCountryIsMutable(); + country_.set(index, builderForValue.build()); + onChanged(); + } else { + countryBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + public Builder addCountry(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { + if (countryBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureCountryIsMutable(); + country_.add(value); + onChanged(); + } else { + countryBuilder_.addMessage(value); + } + return this; + } + public Builder addCountry( + int index, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { + if (countryBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureCountryIsMutable(); + country_.add(index, value); + onChanged(); + } else { + countryBuilder_.addMessage(index, value); + } + return this; + } + public Builder addCountry( + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder builderForValue) { + if (countryBuilder_ == null) { + ensureCountryIsMutable(); + country_.add(builderForValue.build()); + onChanged(); + } else { + countryBuilder_.addMessage(builderForValue.build()); + } + return this; + } + public Builder addCountry( + int index, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder builderForValue) { + if (countryBuilder_ == null) { + ensureCountryIsMutable(); + country_.add(index, builderForValue.build()); + onChanged(); + } else { + countryBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + public Builder addAllCountry( + java.lang.Iterable values) { + if (countryBuilder_ == null) { + ensureCountryIsMutable(); + super.addAll(values, country_); + onChanged(); + } else { + countryBuilder_.addAllMessages(values); + } + return this; + } + public Builder clearCountry() { + if (countryBuilder_ == null) { + country_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000008); + onChanged(); + } else { + countryBuilder_.clear(); + } + return this; + } + public Builder removeCountry(int index) { + if (countryBuilder_ == null) { + ensureCountryIsMutable(); + country_.remove(index); + onChanged(); + } else { + countryBuilder_.remove(index); + } + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder getCountryBuilder( + int index) { + return getCountryFieldBuilder().getBuilder(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getCountryOrBuilder( + int index) { + if (countryBuilder_ == null) { + return country_.get(index); } else { + return countryBuilder_.getMessageOrBuilder(index); + } + } + public java.util.List + getCountryOrBuilderList() { + if (countryBuilder_ != null) { + return countryBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(country_); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder addCountryBuilder() { + return getCountryFieldBuilder().addBuilder( + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance()); + } + public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder addCountryBuilder( + int index) { + return getCountryFieldBuilder().addBuilder( + index, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance()); + } + public java.util.List + getCountryBuilderList() { + return getCountryFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> + getCountryFieldBuilder() { + if (countryBuilder_ == null) { + countryBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder>( + country_, + ((bitField0_ & 0x00000008) == 0x00000008), + getParentForChildren(), + isClean()); + country_ = null; + } + return countryBuilder_; + } + + // repeated .eu.dnetlib.data.proto.StructuredProperty subject = 1; + private java.util.List subject_ = + java.util.Collections.emptyList(); + private void ensureSubjectIsMutable() { + if (!((bitField0_ & 0x00000010) == 0x00000010)) { + subject_ = new java.util.ArrayList(subject_); + bitField0_ |= 0x00000010; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder> subjectBuilder_; + + public java.util.List getSubjectList() { + if (subjectBuilder_ == null) { + return java.util.Collections.unmodifiableList(subject_); + } else { + return subjectBuilder_.getMessageList(); + } + } + public int getSubjectCount() { + if (subjectBuilder_ == null) { + return subject_.size(); + } else { + return subjectBuilder_.getCount(); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty getSubject(int index) { + if (subjectBuilder_ == null) { + return subject_.get(index); + } else { + return subjectBuilder_.getMessage(index); + } + } + public Builder setSubject( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty value) { + if (subjectBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureSubjectIsMutable(); + subject_.set(index, value); + onChanged(); + } else { + subjectBuilder_.setMessage(index, value); + } + return this; + } + public Builder setSubject( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder builderForValue) { + if (subjectBuilder_ == null) { + ensureSubjectIsMutable(); + subject_.set(index, builderForValue.build()); + onChanged(); + } else { + subjectBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + public Builder addSubject(eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty value) { + if (subjectBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureSubjectIsMutable(); + subject_.add(value); + onChanged(); + } else { + subjectBuilder_.addMessage(value); + } + return this; + } + public Builder addSubject( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty value) { + if (subjectBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureSubjectIsMutable(); + subject_.add(index, value); + onChanged(); + } else { + subjectBuilder_.addMessage(index, value); + } + return this; + } + public Builder addSubject( + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder builderForValue) { + if (subjectBuilder_ == null) { + ensureSubjectIsMutable(); + subject_.add(builderForValue.build()); + onChanged(); + } else { + subjectBuilder_.addMessage(builderForValue.build()); + } + return this; + } + public Builder addSubject( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder builderForValue) { + if (subjectBuilder_ == null) { + ensureSubjectIsMutable(); + subject_.add(index, builderForValue.build()); + onChanged(); + } else { + subjectBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + public Builder addAllSubject( + java.lang.Iterable values) { + if (subjectBuilder_ == null) { + ensureSubjectIsMutable(); + super.addAll(values, subject_); + onChanged(); + } else { + subjectBuilder_.addAllMessages(values); + } + return this; + } + public Builder clearSubject() { + if (subjectBuilder_ == null) { + subject_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000010); + onChanged(); + } else { + subjectBuilder_.clear(); + } + return this; + } + public Builder removeSubject(int index) { + if (subjectBuilder_ == null) { + ensureSubjectIsMutable(); + subject_.remove(index); + onChanged(); + } else { + subjectBuilder_.remove(index); + } + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder getSubjectBuilder( + int index) { + return getSubjectFieldBuilder().getBuilder(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder getSubjectOrBuilder( + int index) { + if (subjectBuilder_ == null) { + return subject_.get(index); } else { + return subjectBuilder_.getMessageOrBuilder(index); + } + } + public java.util.List + getSubjectOrBuilderList() { + if (subjectBuilder_ != null) { + return subjectBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(subject_); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder addSubjectBuilder() { + return getSubjectFieldBuilder().addBuilder( + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.getDefaultInstance()); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder addSubjectBuilder( + int index) { + return getSubjectFieldBuilder().addBuilder( + index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.getDefaultInstance()); + } + public java.util.List + getSubjectBuilderList() { + return getSubjectFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder> + getSubjectFieldBuilder() { + if (subjectBuilder_ == null) { + subjectBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder>( + subject_, + ((bitField0_ & 0x00000010) == 0x00000010), + getParentForChildren(), + isClean()); + subject_ = null; + } + return subjectBuilder_; + } + + // repeated .eu.dnetlib.data.proto.StructuredProperty title = 2; + private java.util.List title_ = + java.util.Collections.emptyList(); + private void ensureTitleIsMutable() { + if (!((bitField0_ & 0x00000020) == 0x00000020)) { + title_ = new java.util.ArrayList(title_); + bitField0_ |= 0x00000020; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder> titleBuilder_; + + public java.util.List getTitleList() { + if (titleBuilder_ == null) { + return java.util.Collections.unmodifiableList(title_); + } else { + return titleBuilder_.getMessageList(); + } + } + public int getTitleCount() { + if (titleBuilder_ == null) { + return title_.size(); + } else { + return titleBuilder_.getCount(); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty getTitle(int index) { + if (titleBuilder_ == null) { + return title_.get(index); + } else { + return titleBuilder_.getMessage(index); + } + } + public Builder setTitle( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty value) { + if (titleBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureTitleIsMutable(); + title_.set(index, value); + onChanged(); + } else { + titleBuilder_.setMessage(index, value); + } + return this; + } + public Builder setTitle( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder builderForValue) { + if (titleBuilder_ == null) { + ensureTitleIsMutable(); + title_.set(index, builderForValue.build()); + onChanged(); + } else { + titleBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + public Builder addTitle(eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty value) { + if (titleBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureTitleIsMutable(); + title_.add(value); + onChanged(); + } else { + titleBuilder_.addMessage(value); + } + return this; + } + public Builder addTitle( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty value) { + if (titleBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureTitleIsMutable(); + title_.add(index, value); + onChanged(); + } else { + titleBuilder_.addMessage(index, value); + } + return this; + } + public Builder addTitle( + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder builderForValue) { + if (titleBuilder_ == null) { + ensureTitleIsMutable(); + title_.add(builderForValue.build()); + onChanged(); + } else { + titleBuilder_.addMessage(builderForValue.build()); + } + return this; + } + public Builder addTitle( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder builderForValue) { + if (titleBuilder_ == null) { + ensureTitleIsMutable(); + title_.add(index, builderForValue.build()); + onChanged(); + } else { + titleBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + public Builder addAllTitle( + java.lang.Iterable values) { + if (titleBuilder_ == null) { + ensureTitleIsMutable(); + super.addAll(values, title_); + onChanged(); + } else { + titleBuilder_.addAllMessages(values); + } + return this; + } + public Builder clearTitle() { + if (titleBuilder_ == null) { + title_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000020); + onChanged(); + } else { + titleBuilder_.clear(); + } + return this; + } + public Builder removeTitle(int index) { + if (titleBuilder_ == null) { + ensureTitleIsMutable(); + title_.remove(index); + onChanged(); + } else { + titleBuilder_.remove(index); + } + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder getTitleBuilder( + int index) { + return getTitleFieldBuilder().getBuilder(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder getTitleOrBuilder( + int index) { + if (titleBuilder_ == null) { + return title_.get(index); } else { + return titleBuilder_.getMessageOrBuilder(index); + } + } + public java.util.List + getTitleOrBuilderList() { + if (titleBuilder_ != null) { + return titleBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(title_); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder addTitleBuilder() { + return getTitleFieldBuilder().addBuilder( + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.getDefaultInstance()); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder addTitleBuilder( + int index) { + return getTitleFieldBuilder().addBuilder( + index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.getDefaultInstance()); + } + public java.util.List + getTitleBuilderList() { + return getTitleFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder> + getTitleFieldBuilder() { + if (titleBuilder_ == null) { + titleBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder>( + title_, + ((bitField0_ & 0x00000020) == 0x00000020), + getParentForChildren(), + isClean()); + title_ = null; + } + return titleBuilder_; + } + + // repeated .eu.dnetlib.data.proto.StructuredProperty relevantdate = 3; + private java.util.List relevantdate_ = + java.util.Collections.emptyList(); + private void ensureRelevantdateIsMutable() { + if (!((bitField0_ & 0x00000040) == 0x00000040)) { + relevantdate_ = new java.util.ArrayList(relevantdate_); + bitField0_ |= 0x00000040; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder> relevantdateBuilder_; + + public java.util.List getRelevantdateList() { + if (relevantdateBuilder_ == null) { + return java.util.Collections.unmodifiableList(relevantdate_); + } else { + return relevantdateBuilder_.getMessageList(); + } + } + public int getRelevantdateCount() { + if (relevantdateBuilder_ == null) { + return relevantdate_.size(); + } else { + return relevantdateBuilder_.getCount(); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty getRelevantdate(int index) { + if (relevantdateBuilder_ == null) { + return relevantdate_.get(index); + } else { + return relevantdateBuilder_.getMessage(index); + } + } + public Builder setRelevantdate( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty value) { + if (relevantdateBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureRelevantdateIsMutable(); + relevantdate_.set(index, value); + onChanged(); + } else { + relevantdateBuilder_.setMessage(index, value); + } + return this; + } + public Builder setRelevantdate( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder builderForValue) { + if (relevantdateBuilder_ == null) { + ensureRelevantdateIsMutable(); + relevantdate_.set(index, builderForValue.build()); + onChanged(); + } else { + relevantdateBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + public Builder addRelevantdate(eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty value) { + if (relevantdateBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureRelevantdateIsMutable(); + relevantdate_.add(value); + onChanged(); + } else { + relevantdateBuilder_.addMessage(value); + } + return this; + } + public Builder addRelevantdate( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty value) { + if (relevantdateBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureRelevantdateIsMutable(); + relevantdate_.add(index, value); + onChanged(); + } else { + relevantdateBuilder_.addMessage(index, value); + } + return this; + } + public Builder addRelevantdate( + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder builderForValue) { + if (relevantdateBuilder_ == null) { + ensureRelevantdateIsMutable(); + relevantdate_.add(builderForValue.build()); + onChanged(); + } else { + relevantdateBuilder_.addMessage(builderForValue.build()); + } + return this; + } + public Builder addRelevantdate( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder builderForValue) { + if (relevantdateBuilder_ == null) { + ensureRelevantdateIsMutable(); + relevantdate_.add(index, builderForValue.build()); + onChanged(); + } else { + relevantdateBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + public Builder addAllRelevantdate( + java.lang.Iterable values) { + if (relevantdateBuilder_ == null) { + ensureRelevantdateIsMutable(); + super.addAll(values, relevantdate_); + onChanged(); + } else { + relevantdateBuilder_.addAllMessages(values); + } + return this; + } + public Builder clearRelevantdate() { + if (relevantdateBuilder_ == null) { + relevantdate_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000040); + onChanged(); + } else { + relevantdateBuilder_.clear(); + } + return this; + } + public Builder removeRelevantdate(int index) { + if (relevantdateBuilder_ == null) { + ensureRelevantdateIsMutable(); + relevantdate_.remove(index); + onChanged(); + } else { + relevantdateBuilder_.remove(index); + } + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder getRelevantdateBuilder( + int index) { + return getRelevantdateFieldBuilder().getBuilder(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder getRelevantdateOrBuilder( + int index) { + if (relevantdateBuilder_ == null) { + return relevantdate_.get(index); } else { + return relevantdateBuilder_.getMessageOrBuilder(index); + } + } + public java.util.List + getRelevantdateOrBuilderList() { + if (relevantdateBuilder_ != null) { + return relevantdateBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(relevantdate_); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder addRelevantdateBuilder() { + return getRelevantdateFieldBuilder().addBuilder( + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.getDefaultInstance()); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder addRelevantdateBuilder( + int index) { + return getRelevantdateFieldBuilder().addBuilder( + index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.getDefaultInstance()); + } + public java.util.List + getRelevantdateBuilderList() { + return getRelevantdateFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder> + getRelevantdateFieldBuilder() { + if (relevantdateBuilder_ == null) { + relevantdateBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder>( + relevantdate_, + ((bitField0_ & 0x00000040) == 0x00000040), + getParentForChildren(), + isClean()); + relevantdate_ = null; + } + return relevantdateBuilder_; + } + + // repeated .eu.dnetlib.data.proto.StringField description = 25; + private java.util.List description_ = + java.util.Collections.emptyList(); + private void ensureDescriptionIsMutable() { + if (!((bitField0_ & 0x00000080) == 0x00000080)) { + description_ = new java.util.ArrayList(description_); + bitField0_ |= 0x00000080; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> descriptionBuilder_; + + public java.util.List getDescriptionList() { + if (descriptionBuilder_ == null) { + return java.util.Collections.unmodifiableList(description_); + } else { + return descriptionBuilder_.getMessageList(); + } + } + public int getDescriptionCount() { + if (descriptionBuilder_ == null) { + return description_.size(); + } else { + return descriptionBuilder_.getCount(); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getDescription(int index) { + if (descriptionBuilder_ == null) { + return description_.get(index); + } else { + return descriptionBuilder_.getMessage(index); + } + } + public Builder setDescription( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (descriptionBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureDescriptionIsMutable(); + description_.set(index, value); + onChanged(); + } else { + descriptionBuilder_.setMessage(index, value); + } + return this; + } + public Builder setDescription( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (descriptionBuilder_ == null) { + ensureDescriptionIsMutable(); + description_.set(index, builderForValue.build()); + onChanged(); + } else { + descriptionBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + public Builder addDescription(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (descriptionBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureDescriptionIsMutable(); + description_.add(value); + onChanged(); + } else { + descriptionBuilder_.addMessage(value); + } + return this; + } + public Builder addDescription( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (descriptionBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureDescriptionIsMutable(); + description_.add(index, value); + onChanged(); + } else { + descriptionBuilder_.addMessage(index, value); + } + return this; + } + public Builder addDescription( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (descriptionBuilder_ == null) { + ensureDescriptionIsMutable(); + description_.add(builderForValue.build()); + onChanged(); + } else { + descriptionBuilder_.addMessage(builderForValue.build()); + } + return this; + } + public Builder addDescription( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (descriptionBuilder_ == null) { + ensureDescriptionIsMutable(); + description_.add(index, builderForValue.build()); + onChanged(); + } else { + descriptionBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + public Builder addAllDescription( + java.lang.Iterable values) { + if (descriptionBuilder_ == null) { + ensureDescriptionIsMutable(); + super.addAll(values, description_); + onChanged(); + } else { + descriptionBuilder_.addAllMessages(values); + } + return this; + } + public Builder clearDescription() { + if (descriptionBuilder_ == null) { + description_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000080); + onChanged(); + } else { + descriptionBuilder_.clear(); + } + return this; + } + public Builder removeDescription(int index) { + if (descriptionBuilder_ == null) { + ensureDescriptionIsMutable(); + description_.remove(index); + onChanged(); + } else { + descriptionBuilder_.remove(index); + } + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getDescriptionBuilder( + int index) { + return getDescriptionFieldBuilder().getBuilder(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDescriptionOrBuilder( + int index) { + if (descriptionBuilder_ == null) { + return description_.get(index); } else { + return descriptionBuilder_.getMessageOrBuilder(index); + } + } + public java.util.List + getDescriptionOrBuilderList() { + if (descriptionBuilder_ != null) { + return descriptionBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(description_); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addDescriptionBuilder() { + return getDescriptionFieldBuilder().addBuilder( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addDescriptionBuilder( + int index) { + return getDescriptionFieldBuilder().addBuilder( + index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); + } + public java.util.List + getDescriptionBuilderList() { + return getDescriptionFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getDescriptionFieldBuilder() { + if (descriptionBuilder_ == null) { + descriptionBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + description_, + ((bitField0_ & 0x00000080) == 0x00000080), + getParentForChildren(), + isClean()); + description_ = null; + } + return descriptionBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField dateofacceptance = 4; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField dateofacceptance_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> dateofacceptanceBuilder_; + public boolean hasDateofacceptance() { + return ((bitField0_ & 0x00000100) == 0x00000100); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getDateofacceptance() { + if (dateofacceptanceBuilder_ == null) { + return dateofacceptance_; + } else { + return dateofacceptanceBuilder_.getMessage(); + } + } + public Builder setDateofacceptance(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (dateofacceptanceBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + dateofacceptance_ = value; + onChanged(); + } else { + dateofacceptanceBuilder_.setMessage(value); + } + bitField0_ |= 0x00000100; + return this; + } + public Builder setDateofacceptance( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (dateofacceptanceBuilder_ == null) { + dateofacceptance_ = builderForValue.build(); + onChanged(); + } else { + dateofacceptanceBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000100; + return this; + } + public Builder mergeDateofacceptance(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (dateofacceptanceBuilder_ == null) { + if (((bitField0_ & 0x00000100) == 0x00000100) && + dateofacceptance_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + dateofacceptance_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(dateofacceptance_).mergeFrom(value).buildPartial(); + } else { + dateofacceptance_ = value; + } + onChanged(); + } else { + dateofacceptanceBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000100; + return this; + } + public Builder clearDateofacceptance() { + if (dateofacceptanceBuilder_ == null) { + dateofacceptance_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + dateofacceptanceBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000100); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getDateofacceptanceBuilder() { + bitField0_ |= 0x00000100; + onChanged(); + return getDateofacceptanceFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDateofacceptanceOrBuilder() { + if (dateofacceptanceBuilder_ != null) { + return dateofacceptanceBuilder_.getMessageOrBuilder(); + } else { + return dateofacceptance_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getDateofacceptanceFieldBuilder() { + if (dateofacceptanceBuilder_ == null) { + dateofacceptanceBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + dateofacceptance_, + getParentForChildren(), + isClean()); + dateofacceptance_ = null; + } + return dateofacceptanceBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField publisher = 5; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField publisher_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> publisherBuilder_; + public boolean hasPublisher() { + return ((bitField0_ & 0x00000200) == 0x00000200); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getPublisher() { + if (publisherBuilder_ == null) { + return publisher_; + } else { + return publisherBuilder_.getMessage(); + } + } + public Builder setPublisher(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (publisherBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + publisher_ = value; + onChanged(); + } else { + publisherBuilder_.setMessage(value); + } + bitField0_ |= 0x00000200; + return this; + } + public Builder setPublisher( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (publisherBuilder_ == null) { + publisher_ = builderForValue.build(); + onChanged(); + } else { + publisherBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000200; + return this; + } + public Builder mergePublisher(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (publisherBuilder_ == null) { + if (((bitField0_ & 0x00000200) == 0x00000200) && + publisher_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + publisher_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(publisher_).mergeFrom(value).buildPartial(); + } else { + publisher_ = value; + } + onChanged(); + } else { + publisherBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000200; + return this; + } + public Builder clearPublisher() { + if (publisherBuilder_ == null) { + publisher_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + publisherBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000200); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getPublisherBuilder() { + bitField0_ |= 0x00000200; + onChanged(); + return getPublisherFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getPublisherOrBuilder() { + if (publisherBuilder_ != null) { + return publisherBuilder_.getMessageOrBuilder(); + } else { + return publisher_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getPublisherFieldBuilder() { + if (publisherBuilder_ == null) { + publisherBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + publisher_, + getParentForChildren(), + isClean()); + publisher_ = null; + } + return publisherBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField embargoenddate = 6; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField embargoenddate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> embargoenddateBuilder_; + public boolean hasEmbargoenddate() { + return ((bitField0_ & 0x00000400) == 0x00000400); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEmbargoenddate() { + if (embargoenddateBuilder_ == null) { + return embargoenddate_; + } else { + return embargoenddateBuilder_.getMessage(); + } + } + public Builder setEmbargoenddate(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (embargoenddateBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + embargoenddate_ = value; + onChanged(); + } else { + embargoenddateBuilder_.setMessage(value); + } + bitField0_ |= 0x00000400; + return this; + } + public Builder setEmbargoenddate( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (embargoenddateBuilder_ == null) { + embargoenddate_ = builderForValue.build(); + onChanged(); + } else { + embargoenddateBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000400; + return this; + } + public Builder mergeEmbargoenddate(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (embargoenddateBuilder_ == null) { + if (((bitField0_ & 0x00000400) == 0x00000400) && + embargoenddate_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + embargoenddate_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(embargoenddate_).mergeFrom(value).buildPartial(); + } else { + embargoenddate_ = value; + } + onChanged(); + } else { + embargoenddateBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000400; + return this; + } + public Builder clearEmbargoenddate() { + if (embargoenddateBuilder_ == null) { + embargoenddate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + embargoenddateBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000400); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getEmbargoenddateBuilder() { + bitField0_ |= 0x00000400; + onChanged(); + return getEmbargoenddateFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEmbargoenddateOrBuilder() { + if (embargoenddateBuilder_ != null) { + return embargoenddateBuilder_.getMessageOrBuilder(); + } else { + return embargoenddate_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getEmbargoenddateFieldBuilder() { + if (embargoenddateBuilder_ == null) { + embargoenddateBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + embargoenddate_, + getParentForChildren(), + isClean()); + embargoenddate_ = null; + } + return embargoenddateBuilder_; + } + + // repeated .eu.dnetlib.data.proto.StringField source = 27; + private java.util.List source_ = + java.util.Collections.emptyList(); + private void ensureSourceIsMutable() { + if (!((bitField0_ & 0x00000800) == 0x00000800)) { + source_ = new java.util.ArrayList(source_); + bitField0_ |= 0x00000800; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> sourceBuilder_; + + public java.util.List getSourceList() { + if (sourceBuilder_ == null) { + return java.util.Collections.unmodifiableList(source_); + } else { + return sourceBuilder_.getMessageList(); + } + } + public int getSourceCount() { + if (sourceBuilder_ == null) { + return source_.size(); + } else { + return sourceBuilder_.getCount(); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getSource(int index) { + if (sourceBuilder_ == null) { + return source_.get(index); + } else { + return sourceBuilder_.getMessage(index); + } + } + public Builder setSource( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (sourceBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureSourceIsMutable(); + source_.set(index, value); + onChanged(); + } else { + sourceBuilder_.setMessage(index, value); + } + return this; + } + public Builder setSource( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (sourceBuilder_ == null) { + ensureSourceIsMutable(); + source_.set(index, builderForValue.build()); + onChanged(); + } else { + sourceBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + public Builder addSource(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (sourceBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureSourceIsMutable(); + source_.add(value); + onChanged(); + } else { + sourceBuilder_.addMessage(value); + } + return this; + } + public Builder addSource( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (sourceBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureSourceIsMutable(); + source_.add(index, value); + onChanged(); + } else { + sourceBuilder_.addMessage(index, value); + } + return this; + } + public Builder addSource( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (sourceBuilder_ == null) { + ensureSourceIsMutable(); + source_.add(builderForValue.build()); + onChanged(); + } else { + sourceBuilder_.addMessage(builderForValue.build()); + } + return this; + } + public Builder addSource( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (sourceBuilder_ == null) { + ensureSourceIsMutable(); + source_.add(index, builderForValue.build()); + onChanged(); + } else { + sourceBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + public Builder addAllSource( + java.lang.Iterable values) { + if (sourceBuilder_ == null) { + ensureSourceIsMutable(); + super.addAll(values, source_); + onChanged(); + } else { + sourceBuilder_.addAllMessages(values); + } + return this; + } + public Builder clearSource() { + if (sourceBuilder_ == null) { + source_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000800); + onChanged(); + } else { + sourceBuilder_.clear(); + } + return this; + } + public Builder removeSource(int index) { + if (sourceBuilder_ == null) { + ensureSourceIsMutable(); + source_.remove(index); + onChanged(); + } else { + sourceBuilder_.remove(index); + } + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getSourceBuilder( + int index) { + return getSourceFieldBuilder().getBuilder(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getSourceOrBuilder( + int index) { + if (sourceBuilder_ == null) { + return source_.get(index); } else { + return sourceBuilder_.getMessageOrBuilder(index); + } + } + public java.util.List + getSourceOrBuilderList() { + if (sourceBuilder_ != null) { + return sourceBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(source_); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addSourceBuilder() { + return getSourceFieldBuilder().addBuilder( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addSourceBuilder( + int index) { + return getSourceFieldBuilder().addBuilder( + index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); + } + public java.util.List + getSourceBuilderList() { + return getSourceFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getSourceFieldBuilder() { + if (sourceBuilder_ == null) { + sourceBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + source_, + ((bitField0_ & 0x00000800) == 0x00000800), + getParentForChildren(), + isClean()); + source_ = null; + } + return sourceBuilder_; + } + + // repeated .eu.dnetlib.data.proto.StringField fulltext = 29; + private java.util.List fulltext_ = + java.util.Collections.emptyList(); + private void ensureFulltextIsMutable() { + if (!((bitField0_ & 0x00001000) == 0x00001000)) { + fulltext_ = new java.util.ArrayList(fulltext_); + bitField0_ |= 0x00001000; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> fulltextBuilder_; + + public java.util.List getFulltextList() { + if (fulltextBuilder_ == null) { + return java.util.Collections.unmodifiableList(fulltext_); + } else { + return fulltextBuilder_.getMessageList(); + } + } + public int getFulltextCount() { + if (fulltextBuilder_ == null) { + return fulltext_.size(); + } else { + return fulltextBuilder_.getCount(); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getFulltext(int index) { + if (fulltextBuilder_ == null) { + return fulltext_.get(index); + } else { + return fulltextBuilder_.getMessage(index); + } + } + public Builder setFulltext( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (fulltextBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureFulltextIsMutable(); + fulltext_.set(index, value); + onChanged(); + } else { + fulltextBuilder_.setMessage(index, value); + } + return this; + } + public Builder setFulltext( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (fulltextBuilder_ == null) { + ensureFulltextIsMutable(); + fulltext_.set(index, builderForValue.build()); + onChanged(); + } else { + fulltextBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + public Builder addFulltext(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (fulltextBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureFulltextIsMutable(); + fulltext_.add(value); + onChanged(); + } else { + fulltextBuilder_.addMessage(value); + } + return this; + } + public Builder addFulltext( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (fulltextBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureFulltextIsMutable(); + fulltext_.add(index, value); + onChanged(); + } else { + fulltextBuilder_.addMessage(index, value); + } + return this; + } + public Builder addFulltext( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (fulltextBuilder_ == null) { + ensureFulltextIsMutable(); + fulltext_.add(builderForValue.build()); + onChanged(); + } else { + fulltextBuilder_.addMessage(builderForValue.build()); + } + return this; + } + public Builder addFulltext( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (fulltextBuilder_ == null) { + ensureFulltextIsMutable(); + fulltext_.add(index, builderForValue.build()); + onChanged(); + } else { + fulltextBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + public Builder addAllFulltext( + java.lang.Iterable values) { + if (fulltextBuilder_ == null) { + ensureFulltextIsMutable(); + super.addAll(values, fulltext_); + onChanged(); + } else { + fulltextBuilder_.addAllMessages(values); + } + return this; + } + public Builder clearFulltext() { + if (fulltextBuilder_ == null) { + fulltext_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00001000); + onChanged(); + } else { + fulltextBuilder_.clear(); + } + return this; + } + public Builder removeFulltext(int index) { + if (fulltextBuilder_ == null) { + ensureFulltextIsMutable(); + fulltext_.remove(index); + onChanged(); + } else { + fulltextBuilder_.remove(index); + } + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getFulltextBuilder( + int index) { + return getFulltextFieldBuilder().getBuilder(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getFulltextOrBuilder( + int index) { + if (fulltextBuilder_ == null) { + return fulltext_.get(index); } else { + return fulltextBuilder_.getMessageOrBuilder(index); + } + } + public java.util.List + getFulltextOrBuilderList() { + if (fulltextBuilder_ != null) { + return fulltextBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(fulltext_); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addFulltextBuilder() { + return getFulltextFieldBuilder().addBuilder( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addFulltextBuilder( + int index) { + return getFulltextFieldBuilder().addBuilder( + index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); + } + public java.util.List + getFulltextBuilderList() { + return getFulltextFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getFulltextFieldBuilder() { + if (fulltextBuilder_ == null) { + fulltextBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + fulltext_, + ((bitField0_ & 0x00001000) == 0x00001000), + getParentForChildren(), + isClean()); + fulltext_ = null; + } + return fulltextBuilder_; + } + + // repeated .eu.dnetlib.data.proto.StringField format = 21; + private java.util.List format_ = + java.util.Collections.emptyList(); + private void ensureFormatIsMutable() { + if (!((bitField0_ & 0x00002000) == 0x00002000)) { + format_ = new java.util.ArrayList(format_); + bitField0_ |= 0x00002000; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> formatBuilder_; + + public java.util.List getFormatList() { + if (formatBuilder_ == null) { + return java.util.Collections.unmodifiableList(format_); + } else { + return formatBuilder_.getMessageList(); + } + } + public int getFormatCount() { + if (formatBuilder_ == null) { + return format_.size(); + } else { + return formatBuilder_.getCount(); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getFormat(int index) { + if (formatBuilder_ == null) { + return format_.get(index); + } else { + return formatBuilder_.getMessage(index); + } + } + public Builder setFormat( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (formatBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureFormatIsMutable(); + format_.set(index, value); + onChanged(); + } else { + formatBuilder_.setMessage(index, value); + } + return this; + } + public Builder setFormat( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (formatBuilder_ == null) { + ensureFormatIsMutable(); + format_.set(index, builderForValue.build()); + onChanged(); + } else { + formatBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + public Builder addFormat(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (formatBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureFormatIsMutable(); + format_.add(value); + onChanged(); + } else { + formatBuilder_.addMessage(value); + } + return this; + } + public Builder addFormat( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (formatBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureFormatIsMutable(); + format_.add(index, value); + onChanged(); + } else { + formatBuilder_.addMessage(index, value); + } + return this; + } + public Builder addFormat( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (formatBuilder_ == null) { + ensureFormatIsMutable(); + format_.add(builderForValue.build()); + onChanged(); + } else { + formatBuilder_.addMessage(builderForValue.build()); + } + return this; + } + public Builder addFormat( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (formatBuilder_ == null) { + ensureFormatIsMutable(); + format_.add(index, builderForValue.build()); + onChanged(); + } else { + formatBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + public Builder addAllFormat( + java.lang.Iterable values) { + if (formatBuilder_ == null) { + ensureFormatIsMutable(); + super.addAll(values, format_); + onChanged(); + } else { + formatBuilder_.addAllMessages(values); + } + return this; + } + public Builder clearFormat() { + if (formatBuilder_ == null) { + format_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00002000); + onChanged(); + } else { + formatBuilder_.clear(); + } + return this; + } + public Builder removeFormat(int index) { + if (formatBuilder_ == null) { + ensureFormatIsMutable(); + format_.remove(index); + onChanged(); + } else { + formatBuilder_.remove(index); + } + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getFormatBuilder( + int index) { + return getFormatFieldBuilder().getBuilder(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getFormatOrBuilder( + int index) { + if (formatBuilder_ == null) { + return format_.get(index); } else { + return formatBuilder_.getMessageOrBuilder(index); + } + } + public java.util.List + getFormatOrBuilderList() { + if (formatBuilder_ != null) { + return formatBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(format_); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addFormatBuilder() { + return getFormatFieldBuilder().addBuilder( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addFormatBuilder( + int index) { + return getFormatFieldBuilder().addBuilder( + index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); + } + public java.util.List + getFormatBuilderList() { + return getFormatFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getFormatFieldBuilder() { + if (formatBuilder_ == null) { + formatBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + format_, + ((bitField0_ & 0x00002000) == 0x00002000), + getParentForChildren(), + isClean()); + format_ = null; + } + return formatBuilder_; + } + + // repeated .eu.dnetlib.data.proto.StringField contributor = 30; + private java.util.List contributor_ = + java.util.Collections.emptyList(); + private void ensureContributorIsMutable() { + if (!((bitField0_ & 0x00004000) == 0x00004000)) { + contributor_ = new java.util.ArrayList(contributor_); + bitField0_ |= 0x00004000; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> contributorBuilder_; + + public java.util.List getContributorList() { + if (contributorBuilder_ == null) { + return java.util.Collections.unmodifiableList(contributor_); + } else { + return contributorBuilder_.getMessageList(); + } + } + public int getContributorCount() { + if (contributorBuilder_ == null) { + return contributor_.size(); + } else { + return contributorBuilder_.getCount(); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getContributor(int index) { + if (contributorBuilder_ == null) { + return contributor_.get(index); + } else { + return contributorBuilder_.getMessage(index); + } + } + public Builder setContributor( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (contributorBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureContributorIsMutable(); + contributor_.set(index, value); + onChanged(); + } else { + contributorBuilder_.setMessage(index, value); + } + return this; + } + public Builder setContributor( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (contributorBuilder_ == null) { + ensureContributorIsMutable(); + contributor_.set(index, builderForValue.build()); + onChanged(); + } else { + contributorBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + public Builder addContributor(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (contributorBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureContributorIsMutable(); + contributor_.add(value); + onChanged(); + } else { + contributorBuilder_.addMessage(value); + } + return this; + } + public Builder addContributor( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (contributorBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureContributorIsMutable(); + contributor_.add(index, value); + onChanged(); + } else { + contributorBuilder_.addMessage(index, value); + } + return this; + } + public Builder addContributor( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (contributorBuilder_ == null) { + ensureContributorIsMutable(); + contributor_.add(builderForValue.build()); + onChanged(); + } else { + contributorBuilder_.addMessage(builderForValue.build()); + } + return this; + } + public Builder addContributor( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (contributorBuilder_ == null) { + ensureContributorIsMutable(); + contributor_.add(index, builderForValue.build()); + onChanged(); + } else { + contributorBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + public Builder addAllContributor( + java.lang.Iterable values) { + if (contributorBuilder_ == null) { + ensureContributorIsMutable(); + super.addAll(values, contributor_); + onChanged(); + } else { + contributorBuilder_.addAllMessages(values); + } + return this; + } + public Builder clearContributor() { + if (contributorBuilder_ == null) { + contributor_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00004000); + onChanged(); + } else { + contributorBuilder_.clear(); + } + return this; + } + public Builder removeContributor(int index) { + if (contributorBuilder_ == null) { + ensureContributorIsMutable(); + contributor_.remove(index); + onChanged(); + } else { + contributorBuilder_.remove(index); + } + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getContributorBuilder( + int index) { + return getContributorFieldBuilder().getBuilder(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getContributorOrBuilder( + int index) { + if (contributorBuilder_ == null) { + return contributor_.get(index); } else { + return contributorBuilder_.getMessageOrBuilder(index); + } + } + public java.util.List + getContributorOrBuilderList() { + if (contributorBuilder_ != null) { + return contributorBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(contributor_); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addContributorBuilder() { + return getContributorFieldBuilder().addBuilder( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addContributorBuilder( + int index) { + return getContributorFieldBuilder().addBuilder( + index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); + } + public java.util.List + getContributorBuilderList() { + return getContributorFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getContributorFieldBuilder() { + if (contributorBuilder_ == null) { + contributorBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + contributor_, + ((bitField0_ & 0x00004000) == 0x00004000), + getParentForChildren(), + isClean()); + contributor_ = null; + } + return contributorBuilder_; + } + + // optional .eu.dnetlib.data.proto.Qualifier resourcetype = 19; + private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier resourcetype_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> resourcetypeBuilder_; + public boolean hasResourcetype() { + return ((bitField0_ & 0x00008000) == 0x00008000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getResourcetype() { + if (resourcetypeBuilder_ == null) { + return resourcetype_; + } else { + return resourcetypeBuilder_.getMessage(); + } + } + public Builder setResourcetype(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { + if (resourcetypeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + resourcetype_ = value; + onChanged(); + } else { + resourcetypeBuilder_.setMessage(value); + } + bitField0_ |= 0x00008000; + return this; + } + public Builder setResourcetype( + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder builderForValue) { + if (resourcetypeBuilder_ == null) { + resourcetype_ = builderForValue.build(); + onChanged(); + } else { + resourcetypeBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00008000; + return this; + } + public Builder mergeResourcetype(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { + if (resourcetypeBuilder_ == null) { + if (((bitField0_ & 0x00008000) == 0x00008000) && + resourcetype_ != eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance()) { + resourcetype_ = + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(resourcetype_).mergeFrom(value).buildPartial(); + } else { + resourcetype_ = value; + } + onChanged(); + } else { + resourcetypeBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00008000; + return this; + } + public Builder clearResourcetype() { + if (resourcetypeBuilder_ == null) { + resourcetype_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + onChanged(); + } else { + resourcetypeBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00008000); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder getResourcetypeBuilder() { + bitField0_ |= 0x00008000; + onChanged(); + return getResourcetypeFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getResourcetypeOrBuilder() { + if (resourcetypeBuilder_ != null) { + return resourcetypeBuilder_.getMessageOrBuilder(); + } else { + return resourcetype_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> + getResourcetypeFieldBuilder() { + if (resourcetypeBuilder_ == null) { + resourcetypeBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder>( + resourcetype_, + getParentForChildren(), + isClean()); + resourcetype_ = null; + } + return resourcetypeBuilder_; + } + + // repeated .eu.dnetlib.data.proto.StringField coverage = 43; + private java.util.List coverage_ = + java.util.Collections.emptyList(); + private void ensureCoverageIsMutable() { + if (!((bitField0_ & 0x00010000) == 0x00010000)) { + coverage_ = new java.util.ArrayList(coverage_); + bitField0_ |= 0x00010000; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> coverageBuilder_; + + public java.util.List getCoverageList() { + if (coverageBuilder_ == null) { + return java.util.Collections.unmodifiableList(coverage_); + } else { + return coverageBuilder_.getMessageList(); + } + } + public int getCoverageCount() { + if (coverageBuilder_ == null) { + return coverage_.size(); + } else { + return coverageBuilder_.getCount(); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getCoverage(int index) { + if (coverageBuilder_ == null) { + return coverage_.get(index); + } else { + return coverageBuilder_.getMessage(index); + } + } + public Builder setCoverage( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (coverageBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureCoverageIsMutable(); + coverage_.set(index, value); + onChanged(); + } else { + coverageBuilder_.setMessage(index, value); + } + return this; + } + public Builder setCoverage( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (coverageBuilder_ == null) { + ensureCoverageIsMutable(); + coverage_.set(index, builderForValue.build()); + onChanged(); + } else { + coverageBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + public Builder addCoverage(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (coverageBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureCoverageIsMutable(); + coverage_.add(value); + onChanged(); + } else { + coverageBuilder_.addMessage(value); + } + return this; + } + public Builder addCoverage( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (coverageBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureCoverageIsMutable(); + coverage_.add(index, value); + onChanged(); + } else { + coverageBuilder_.addMessage(index, value); + } + return this; + } + public Builder addCoverage( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (coverageBuilder_ == null) { + ensureCoverageIsMutable(); + coverage_.add(builderForValue.build()); + onChanged(); + } else { + coverageBuilder_.addMessage(builderForValue.build()); + } + return this; + } + public Builder addCoverage( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (coverageBuilder_ == null) { + ensureCoverageIsMutable(); + coverage_.add(index, builderForValue.build()); + onChanged(); + } else { + coverageBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + public Builder addAllCoverage( + java.lang.Iterable values) { + if (coverageBuilder_ == null) { + ensureCoverageIsMutable(); + super.addAll(values, coverage_); + onChanged(); + } else { + coverageBuilder_.addAllMessages(values); + } + return this; + } + public Builder clearCoverage() { + if (coverageBuilder_ == null) { + coverage_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00010000); + onChanged(); + } else { + coverageBuilder_.clear(); + } + return this; + } + public Builder removeCoverage(int index) { + if (coverageBuilder_ == null) { + ensureCoverageIsMutable(); + coverage_.remove(index); + onChanged(); + } else { + coverageBuilder_.remove(index); + } + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getCoverageBuilder( + int index) { + return getCoverageFieldBuilder().getBuilder(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getCoverageOrBuilder( + int index) { + if (coverageBuilder_ == null) { + return coverage_.get(index); } else { + return coverageBuilder_.getMessageOrBuilder(index); + } + } + public java.util.List + getCoverageOrBuilderList() { + if (coverageBuilder_ != null) { + return coverageBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(coverage_); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addCoverageBuilder() { + return getCoverageFieldBuilder().addBuilder( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addCoverageBuilder( + int index) { + return getCoverageFieldBuilder().addBuilder( + index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); + } + public java.util.List + getCoverageBuilderList() { + return getCoverageFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getCoverageFieldBuilder() { + if (coverageBuilder_ == null) { + coverageBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + coverage_, + ((bitField0_ & 0x00010000) == 0x00010000), + getParentForChildren(), + isClean()); + coverage_ = null; + } + return coverageBuilder_; + } + + // repeated .eu.dnetlib.data.proto.Result.Context context = 28; + private java.util.List context_ = + java.util.Collections.emptyList(); + private void ensureContextIsMutable() { + if (!((bitField0_ & 0x00020000) == 0x00020000)) { + context_ = new java.util.ArrayList(context_); + bitField0_ |= 0x00020000; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.ResultProtos.Result.Context, eu.dnetlib.data.proto.ResultProtos.Result.Context.Builder, eu.dnetlib.data.proto.ResultProtos.Result.ContextOrBuilder> contextBuilder_; + + public java.util.List getContextList() { + if (contextBuilder_ == null) { + return java.util.Collections.unmodifiableList(context_); + } else { + return contextBuilder_.getMessageList(); + } + } + public int getContextCount() { + if (contextBuilder_ == null) { + return context_.size(); + } else { + return contextBuilder_.getCount(); + } + } + public eu.dnetlib.data.proto.ResultProtos.Result.Context getContext(int index) { + if (contextBuilder_ == null) { + return context_.get(index); + } else { + return contextBuilder_.getMessage(index); + } + } + public Builder setContext( + int index, eu.dnetlib.data.proto.ResultProtos.Result.Context value) { + if (contextBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureContextIsMutable(); + context_.set(index, value); + onChanged(); + } else { + contextBuilder_.setMessage(index, value); + } + return this; + } + public Builder setContext( + int index, eu.dnetlib.data.proto.ResultProtos.Result.Context.Builder builderForValue) { + if (contextBuilder_ == null) { + ensureContextIsMutable(); + context_.set(index, builderForValue.build()); + onChanged(); + } else { + contextBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + public Builder addContext(eu.dnetlib.data.proto.ResultProtos.Result.Context value) { + if (contextBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureContextIsMutable(); + context_.add(value); + onChanged(); + } else { + contextBuilder_.addMessage(value); + } + return this; + } + public Builder addContext( + int index, eu.dnetlib.data.proto.ResultProtos.Result.Context value) { + if (contextBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureContextIsMutable(); + context_.add(index, value); + onChanged(); + } else { + contextBuilder_.addMessage(index, value); + } + return this; + } + public Builder addContext( + eu.dnetlib.data.proto.ResultProtos.Result.Context.Builder builderForValue) { + if (contextBuilder_ == null) { + ensureContextIsMutable(); + context_.add(builderForValue.build()); + onChanged(); + } else { + contextBuilder_.addMessage(builderForValue.build()); + } + return this; + } + public Builder addContext( + int index, eu.dnetlib.data.proto.ResultProtos.Result.Context.Builder builderForValue) { + if (contextBuilder_ == null) { + ensureContextIsMutable(); + context_.add(index, builderForValue.build()); + onChanged(); + } else { + contextBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + public Builder addAllContext( + java.lang.Iterable values) { + if (contextBuilder_ == null) { + ensureContextIsMutable(); + super.addAll(values, context_); + onChanged(); + } else { + contextBuilder_.addAllMessages(values); + } + return this; + } + public Builder clearContext() { + if (contextBuilder_ == null) { + context_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00020000); + onChanged(); + } else { + contextBuilder_.clear(); + } + return this; + } + public Builder removeContext(int index) { + if (contextBuilder_ == null) { + ensureContextIsMutable(); + context_.remove(index); + onChanged(); + } else { + contextBuilder_.remove(index); + } + return this; + } + public eu.dnetlib.data.proto.ResultProtos.Result.Context.Builder getContextBuilder( + int index) { + return getContextFieldBuilder().getBuilder(index); + } + public eu.dnetlib.data.proto.ResultProtos.Result.ContextOrBuilder getContextOrBuilder( + int index) { + if (contextBuilder_ == null) { + return context_.get(index); } else { + return contextBuilder_.getMessageOrBuilder(index); + } + } + public java.util.List + getContextOrBuilderList() { + if (contextBuilder_ != null) { + return contextBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(context_); + } + } + public eu.dnetlib.data.proto.ResultProtos.Result.Context.Builder addContextBuilder() { + return getContextFieldBuilder().addBuilder( + eu.dnetlib.data.proto.ResultProtos.Result.Context.getDefaultInstance()); + } + public eu.dnetlib.data.proto.ResultProtos.Result.Context.Builder addContextBuilder( + int index) { + return getContextFieldBuilder().addBuilder( + index, eu.dnetlib.data.proto.ResultProtos.Result.Context.getDefaultInstance()); + } + public java.util.List + getContextBuilderList() { + return getContextFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.ResultProtos.Result.Context, eu.dnetlib.data.proto.ResultProtos.Result.Context.Builder, eu.dnetlib.data.proto.ResultProtos.Result.ContextOrBuilder> + getContextFieldBuilder() { + if (contextBuilder_ == null) { + contextBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.ResultProtos.Result.Context, eu.dnetlib.data.proto.ResultProtos.Result.Context.Builder, eu.dnetlib.data.proto.ResultProtos.Result.ContextOrBuilder>( + context_, + ((bitField0_ & 0x00020000) == 0x00020000), + getParentForChildren(), + isClean()); + context_ = null; + } + return contextBuilder_; + } + + // optional .eu.dnetlib.data.proto.Result.Journal journal = 18; + private eu.dnetlib.data.proto.ResultProtos.Result.Journal journal_ = eu.dnetlib.data.proto.ResultProtos.Result.Journal.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ResultProtos.Result.Journal, eu.dnetlib.data.proto.ResultProtos.Result.Journal.Builder, eu.dnetlib.data.proto.ResultProtos.Result.JournalOrBuilder> journalBuilder_; + public boolean hasJournal() { + return ((bitField0_ & 0x00040000) == 0x00040000); + } + public eu.dnetlib.data.proto.ResultProtos.Result.Journal getJournal() { + if (journalBuilder_ == null) { + return journal_; + } else { + return journalBuilder_.getMessage(); + } + } + public Builder setJournal(eu.dnetlib.data.proto.ResultProtos.Result.Journal value) { + if (journalBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + journal_ = value; + onChanged(); + } else { + journalBuilder_.setMessage(value); + } + bitField0_ |= 0x00040000; + return this; + } + public Builder setJournal( + eu.dnetlib.data.proto.ResultProtos.Result.Journal.Builder builderForValue) { + if (journalBuilder_ == null) { + journal_ = builderForValue.build(); + onChanged(); + } else { + journalBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00040000; + return this; + } + public Builder mergeJournal(eu.dnetlib.data.proto.ResultProtos.Result.Journal value) { + if (journalBuilder_ == null) { + if (((bitField0_ & 0x00040000) == 0x00040000) && + journal_ != eu.dnetlib.data.proto.ResultProtos.Result.Journal.getDefaultInstance()) { + journal_ = + eu.dnetlib.data.proto.ResultProtos.Result.Journal.newBuilder(journal_).mergeFrom(value).buildPartial(); + } else { + journal_ = value; + } + onChanged(); + } else { + journalBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00040000; + return this; + } + public Builder clearJournal() { + if (journalBuilder_ == null) { + journal_ = eu.dnetlib.data.proto.ResultProtos.Result.Journal.getDefaultInstance(); + onChanged(); + } else { + journalBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00040000); + return this; + } + public eu.dnetlib.data.proto.ResultProtos.Result.Journal.Builder getJournalBuilder() { + bitField0_ |= 0x00040000; + onChanged(); + return getJournalFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.ResultProtos.Result.JournalOrBuilder getJournalOrBuilder() { + if (journalBuilder_ != null) { + return journalBuilder_.getMessageOrBuilder(); + } else { + return journal_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ResultProtos.Result.Journal, eu.dnetlib.data.proto.ResultProtos.Result.Journal.Builder, eu.dnetlib.data.proto.ResultProtos.Result.JournalOrBuilder> + getJournalFieldBuilder() { + if (journalBuilder_ == null) { + journalBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ResultProtos.Result.Journal, eu.dnetlib.data.proto.ResultProtos.Result.Journal.Builder, eu.dnetlib.data.proto.ResultProtos.Result.JournalOrBuilder>( + journal_, + getParentForChildren(), + isClean()); + journal_ = null; + } + return journalBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField storagedate = 9; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField storagedate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> storagedateBuilder_; + public boolean hasStoragedate() { + return ((bitField0_ & 0x00080000) == 0x00080000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getStoragedate() { + if (storagedateBuilder_ == null) { + return storagedate_; + } else { + return storagedateBuilder_.getMessage(); + } + } + public Builder setStoragedate(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (storagedateBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + storagedate_ = value; + onChanged(); + } else { + storagedateBuilder_.setMessage(value); + } + bitField0_ |= 0x00080000; + return this; + } + public Builder setStoragedate( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (storagedateBuilder_ == null) { + storagedate_ = builderForValue.build(); + onChanged(); + } else { + storagedateBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00080000; + return this; + } + public Builder mergeStoragedate(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (storagedateBuilder_ == null) { + if (((bitField0_ & 0x00080000) == 0x00080000) && + storagedate_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + storagedate_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(storagedate_).mergeFrom(value).buildPartial(); + } else { + storagedate_ = value; + } + onChanged(); + } else { + storagedateBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00080000; + return this; + } + public Builder clearStoragedate() { + if (storagedateBuilder_ == null) { + storagedate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + storagedateBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00080000); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getStoragedateBuilder() { + bitField0_ |= 0x00080000; + onChanged(); + return getStoragedateFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getStoragedateOrBuilder() { + if (storagedateBuilder_ != null) { + return storagedateBuilder_.getMessageOrBuilder(); + } else { + return storagedate_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getStoragedateFieldBuilder() { + if (storagedateBuilder_ == null) { + storagedateBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + storagedate_, + getParentForChildren(), + isClean()); + storagedate_ = null; + } + return storagedateBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField device = 26; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField device_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> deviceBuilder_; + public boolean hasDevice() { + return ((bitField0_ & 0x00100000) == 0x00100000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getDevice() { + if (deviceBuilder_ == null) { + return device_; + } else { + return deviceBuilder_.getMessage(); + } + } + public Builder setDevice(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (deviceBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + device_ = value; + onChanged(); + } else { + deviceBuilder_.setMessage(value); + } + bitField0_ |= 0x00100000; + return this; + } + public Builder setDevice( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (deviceBuilder_ == null) { + device_ = builderForValue.build(); + onChanged(); + } else { + deviceBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00100000; + return this; + } + public Builder mergeDevice(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (deviceBuilder_ == null) { + if (((bitField0_ & 0x00100000) == 0x00100000) && + device_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + device_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(device_).mergeFrom(value).buildPartial(); + } else { + device_ = value; + } + onChanged(); + } else { + deviceBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00100000; + return this; + } + public Builder clearDevice() { + if (deviceBuilder_ == null) { + device_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + deviceBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00100000); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getDeviceBuilder() { + bitField0_ |= 0x00100000; + onChanged(); + return getDeviceFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDeviceOrBuilder() { + if (deviceBuilder_ != null) { + return deviceBuilder_.getMessageOrBuilder(); + } else { + return device_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getDeviceFieldBuilder() { + if (deviceBuilder_ == null) { + deviceBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + device_, + getParentForChildren(), + isClean()); + device_ = null; + } + return deviceBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField size = 20; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField size_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> sizeBuilder_; + public boolean hasSize() { + return ((bitField0_ & 0x00200000) == 0x00200000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getSize() { + if (sizeBuilder_ == null) { + return size_; + } else { + return sizeBuilder_.getMessage(); + } + } + public Builder setSize(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (sizeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + size_ = value; + onChanged(); + } else { + sizeBuilder_.setMessage(value); + } + bitField0_ |= 0x00200000; + return this; + } + public Builder setSize( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (sizeBuilder_ == null) { + size_ = builderForValue.build(); + onChanged(); + } else { + sizeBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00200000; + return this; + } + public Builder mergeSize(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (sizeBuilder_ == null) { + if (((bitField0_ & 0x00200000) == 0x00200000) && + size_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + size_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(size_).mergeFrom(value).buildPartial(); + } else { + size_ = value; + } + onChanged(); + } else { + sizeBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00200000; + return this; + } + public Builder clearSize() { + if (sizeBuilder_ == null) { + size_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + sizeBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00200000); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getSizeBuilder() { + bitField0_ |= 0x00200000; + onChanged(); + return getSizeFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getSizeOrBuilder() { + if (sizeBuilder_ != null) { + return sizeBuilder_.getMessageOrBuilder(); + } else { + return size_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getSizeFieldBuilder() { + if (sizeBuilder_ == null) { + sizeBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + size_, + getParentForChildren(), + isClean()); + size_ = null; + } + return sizeBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField version = 22; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField version_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> versionBuilder_; + public boolean hasVersion() { + return ((bitField0_ & 0x00400000) == 0x00400000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getVersion() { + if (versionBuilder_ == null) { + return version_; + } else { + return versionBuilder_.getMessage(); + } + } + public Builder setVersion(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (versionBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + version_ = value; + onChanged(); + } else { + versionBuilder_.setMessage(value); + } + bitField0_ |= 0x00400000; + return this; + } + public Builder setVersion( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (versionBuilder_ == null) { + version_ = builderForValue.build(); + onChanged(); + } else { + versionBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00400000; + return this; + } + public Builder mergeVersion(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (versionBuilder_ == null) { + if (((bitField0_ & 0x00400000) == 0x00400000) && + version_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + version_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(version_).mergeFrom(value).buildPartial(); + } else { + version_ = value; + } + onChanged(); + } else { + versionBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00400000; + return this; + } + public Builder clearVersion() { + if (versionBuilder_ == null) { + version_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + versionBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00400000); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getVersionBuilder() { + bitField0_ |= 0x00400000; + onChanged(); + return getVersionFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getVersionOrBuilder() { + if (versionBuilder_ != null) { + return versionBuilder_.getMessageOrBuilder(); + } else { + return version_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getVersionFieldBuilder() { + if (versionBuilder_ == null) { + versionBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + version_, + getParentForChildren(), + isClean()); + version_ = null; + } + return versionBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField lastmetadataupdate = 23; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField lastmetadataupdate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> lastmetadataupdateBuilder_; + public boolean hasLastmetadataupdate() { + return ((bitField0_ & 0x00800000) == 0x00800000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getLastmetadataupdate() { + if (lastmetadataupdateBuilder_ == null) { + return lastmetadataupdate_; + } else { + return lastmetadataupdateBuilder_.getMessage(); + } + } + public Builder setLastmetadataupdate(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (lastmetadataupdateBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + lastmetadataupdate_ = value; + onChanged(); + } else { + lastmetadataupdateBuilder_.setMessage(value); + } + bitField0_ |= 0x00800000; + return this; + } + public Builder setLastmetadataupdate( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (lastmetadataupdateBuilder_ == null) { + lastmetadataupdate_ = builderForValue.build(); + onChanged(); + } else { + lastmetadataupdateBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00800000; + return this; + } + public Builder mergeLastmetadataupdate(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (lastmetadataupdateBuilder_ == null) { + if (((bitField0_ & 0x00800000) == 0x00800000) && + lastmetadataupdate_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + lastmetadataupdate_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(lastmetadataupdate_).mergeFrom(value).buildPartial(); + } else { + lastmetadataupdate_ = value; + } + onChanged(); + } else { + lastmetadataupdateBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00800000; + return this; + } + public Builder clearLastmetadataupdate() { + if (lastmetadataupdateBuilder_ == null) { + lastmetadataupdate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + lastmetadataupdateBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00800000); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getLastmetadataupdateBuilder() { + bitField0_ |= 0x00800000; + onChanged(); + return getLastmetadataupdateFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getLastmetadataupdateOrBuilder() { + if (lastmetadataupdateBuilder_ != null) { + return lastmetadataupdateBuilder_.getMessageOrBuilder(); + } else { + return lastmetadataupdate_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getLastmetadataupdateFieldBuilder() { + if (lastmetadataupdateBuilder_ == null) { + lastmetadataupdateBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + lastmetadataupdate_, + getParentForChildren(), + isClean()); + lastmetadataupdate_ = null; + } + return lastmetadataupdateBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField metadataversionnumber = 24; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField metadataversionnumber_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> metadataversionnumberBuilder_; + public boolean hasMetadataversionnumber() { + return ((bitField0_ & 0x01000000) == 0x01000000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getMetadataversionnumber() { + if (metadataversionnumberBuilder_ == null) { + return metadataversionnumber_; + } else { + return metadataversionnumberBuilder_.getMessage(); + } + } + public Builder setMetadataversionnumber(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (metadataversionnumberBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + metadataversionnumber_ = value; + onChanged(); + } else { + metadataversionnumberBuilder_.setMessage(value); + } + bitField0_ |= 0x01000000; + return this; + } + public Builder setMetadataversionnumber( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (metadataversionnumberBuilder_ == null) { + metadataversionnumber_ = builderForValue.build(); + onChanged(); + } else { + metadataversionnumberBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x01000000; + return this; + } + public Builder mergeMetadataversionnumber(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (metadataversionnumberBuilder_ == null) { + if (((bitField0_ & 0x01000000) == 0x01000000) && + metadataversionnumber_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + metadataversionnumber_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(metadataversionnumber_).mergeFrom(value).buildPartial(); + } else { + metadataversionnumber_ = value; + } + onChanged(); + } else { + metadataversionnumberBuilder_.mergeFrom(value); + } + bitField0_ |= 0x01000000; + return this; + } + public Builder clearMetadataversionnumber() { + if (metadataversionnumberBuilder_ == null) { + metadataversionnumber_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + metadataversionnumberBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x01000000); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getMetadataversionnumberBuilder() { + bitField0_ |= 0x01000000; + onChanged(); + return getMetadataversionnumberFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getMetadataversionnumberOrBuilder() { + if (metadataversionnumberBuilder_ != null) { + return metadataversionnumberBuilder_.getMessageOrBuilder(); + } else { + return metadataversionnumber_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getMetadataversionnumberFieldBuilder() { + if (metadataversionnumberBuilder_ == null) { + metadataversionnumberBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + metadataversionnumber_, + getParentForChildren(), + isClean()); + metadataversionnumber_ = null; + } + return metadataversionnumberBuilder_; + } + + // repeated .eu.dnetlib.data.proto.Result.GeoLocation geolocation = 44; + private java.util.List geolocation_ = + java.util.Collections.emptyList(); + private void ensureGeolocationIsMutable() { + if (!((bitField0_ & 0x02000000) == 0x02000000)) { + geolocation_ = new java.util.ArrayList(geolocation_); + bitField0_ |= 0x02000000; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation, eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation.Builder, eu.dnetlib.data.proto.ResultProtos.Result.GeoLocationOrBuilder> geolocationBuilder_; + + public java.util.List getGeolocationList() { + if (geolocationBuilder_ == null) { + return java.util.Collections.unmodifiableList(geolocation_); + } else { + return geolocationBuilder_.getMessageList(); + } + } + public int getGeolocationCount() { + if (geolocationBuilder_ == null) { + return geolocation_.size(); + } else { + return geolocationBuilder_.getCount(); + } + } + public eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation getGeolocation(int index) { + if (geolocationBuilder_ == null) { + return geolocation_.get(index); + } else { + return geolocationBuilder_.getMessage(index); + } + } + public Builder setGeolocation( + int index, eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation value) { + if (geolocationBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureGeolocationIsMutable(); + geolocation_.set(index, value); + onChanged(); + } else { + geolocationBuilder_.setMessage(index, value); + } + return this; + } + public Builder setGeolocation( + int index, eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation.Builder builderForValue) { + if (geolocationBuilder_ == null) { + ensureGeolocationIsMutable(); + geolocation_.set(index, builderForValue.build()); + onChanged(); + } else { + geolocationBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + public Builder addGeolocation(eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation value) { + if (geolocationBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureGeolocationIsMutable(); + geolocation_.add(value); + onChanged(); + } else { + geolocationBuilder_.addMessage(value); + } + return this; + } + public Builder addGeolocation( + int index, eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation value) { + if (geolocationBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureGeolocationIsMutable(); + geolocation_.add(index, value); + onChanged(); + } else { + geolocationBuilder_.addMessage(index, value); + } + return this; + } + public Builder addGeolocation( + eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation.Builder builderForValue) { + if (geolocationBuilder_ == null) { + ensureGeolocationIsMutable(); + geolocation_.add(builderForValue.build()); + onChanged(); + } else { + geolocationBuilder_.addMessage(builderForValue.build()); + } + return this; + } + public Builder addGeolocation( + int index, eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation.Builder builderForValue) { + if (geolocationBuilder_ == null) { + ensureGeolocationIsMutable(); + geolocation_.add(index, builderForValue.build()); + onChanged(); + } else { + geolocationBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + public Builder addAllGeolocation( + java.lang.Iterable values) { + if (geolocationBuilder_ == null) { + ensureGeolocationIsMutable(); + super.addAll(values, geolocation_); + onChanged(); + } else { + geolocationBuilder_.addAllMessages(values); + } + return this; + } + public Builder clearGeolocation() { + if (geolocationBuilder_ == null) { + geolocation_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x02000000); + onChanged(); + } else { + geolocationBuilder_.clear(); + } + return this; + } + public Builder removeGeolocation(int index) { + if (geolocationBuilder_ == null) { + ensureGeolocationIsMutable(); + geolocation_.remove(index); + onChanged(); + } else { + geolocationBuilder_.remove(index); + } + return this; + } + public eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation.Builder getGeolocationBuilder( + int index) { + return getGeolocationFieldBuilder().getBuilder(index); + } + public eu.dnetlib.data.proto.ResultProtos.Result.GeoLocationOrBuilder getGeolocationOrBuilder( + int index) { + if (geolocationBuilder_ == null) { + return geolocation_.get(index); } else { + return geolocationBuilder_.getMessageOrBuilder(index); + } + } + public java.util.List + getGeolocationOrBuilderList() { + if (geolocationBuilder_ != null) { + return geolocationBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(geolocation_); + } + } + public eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation.Builder addGeolocationBuilder() { + return getGeolocationFieldBuilder().addBuilder( + eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation.getDefaultInstance()); + } + public eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation.Builder addGeolocationBuilder( + int index) { + return getGeolocationFieldBuilder().addBuilder( + index, eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation.getDefaultInstance()); + } + public java.util.List + getGeolocationBuilderList() { + return getGeolocationFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation, eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation.Builder, eu.dnetlib.data.proto.ResultProtos.Result.GeoLocationOrBuilder> + getGeolocationFieldBuilder() { + if (geolocationBuilder_ == null) { + geolocationBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation, eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation.Builder, eu.dnetlib.data.proto.ResultProtos.Result.GeoLocationOrBuilder>( + geolocation_, + ((bitField0_ & 0x02000000) == 0x02000000), + getParentForChildren(), + isClean()); + geolocation_ = null; + } + return geolocationBuilder_; + } + + // repeated .eu.dnetlib.data.proto.StringField documentationUrl = 35; + private java.util.List documentationUrl_ = + java.util.Collections.emptyList(); + private void ensureDocumentationUrlIsMutable() { + if (!((bitField0_ & 0x04000000) == 0x04000000)) { + documentationUrl_ = new java.util.ArrayList(documentationUrl_); + bitField0_ |= 0x04000000; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> documentationUrlBuilder_; + + public java.util.List getDocumentationUrlList() { + if (documentationUrlBuilder_ == null) { + return java.util.Collections.unmodifiableList(documentationUrl_); + } else { + return documentationUrlBuilder_.getMessageList(); + } + } + public int getDocumentationUrlCount() { + if (documentationUrlBuilder_ == null) { + return documentationUrl_.size(); + } else { + return documentationUrlBuilder_.getCount(); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getDocumentationUrl(int index) { + if (documentationUrlBuilder_ == null) { + return documentationUrl_.get(index); + } else { + return documentationUrlBuilder_.getMessage(index); + } + } + public Builder setDocumentationUrl( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (documentationUrlBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureDocumentationUrlIsMutable(); + documentationUrl_.set(index, value); + onChanged(); + } else { + documentationUrlBuilder_.setMessage(index, value); + } + return this; + } + public Builder setDocumentationUrl( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (documentationUrlBuilder_ == null) { + ensureDocumentationUrlIsMutable(); + documentationUrl_.set(index, builderForValue.build()); + onChanged(); + } else { + documentationUrlBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + public Builder addDocumentationUrl(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (documentationUrlBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureDocumentationUrlIsMutable(); + documentationUrl_.add(value); + onChanged(); + } else { + documentationUrlBuilder_.addMessage(value); + } + return this; + } + public Builder addDocumentationUrl( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (documentationUrlBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureDocumentationUrlIsMutable(); + documentationUrl_.add(index, value); + onChanged(); + } else { + documentationUrlBuilder_.addMessage(index, value); + } + return this; + } + public Builder addDocumentationUrl( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (documentationUrlBuilder_ == null) { + ensureDocumentationUrlIsMutable(); + documentationUrl_.add(builderForValue.build()); + onChanged(); + } else { + documentationUrlBuilder_.addMessage(builderForValue.build()); + } + return this; + } + public Builder addDocumentationUrl( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (documentationUrlBuilder_ == null) { + ensureDocumentationUrlIsMutable(); + documentationUrl_.add(index, builderForValue.build()); + onChanged(); + } else { + documentationUrlBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + public Builder addAllDocumentationUrl( + java.lang.Iterable values) { + if (documentationUrlBuilder_ == null) { + ensureDocumentationUrlIsMutable(); + super.addAll(values, documentationUrl_); + onChanged(); + } else { + documentationUrlBuilder_.addAllMessages(values); + } + return this; + } + public Builder clearDocumentationUrl() { + if (documentationUrlBuilder_ == null) { + documentationUrl_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x04000000); + onChanged(); + } else { + documentationUrlBuilder_.clear(); + } + return this; + } + public Builder removeDocumentationUrl(int index) { + if (documentationUrlBuilder_ == null) { + ensureDocumentationUrlIsMutable(); + documentationUrl_.remove(index); + onChanged(); + } else { + documentationUrlBuilder_.remove(index); + } + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getDocumentationUrlBuilder( + int index) { + return getDocumentationUrlFieldBuilder().getBuilder(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDocumentationUrlOrBuilder( + int index) { + if (documentationUrlBuilder_ == null) { + return documentationUrl_.get(index); } else { + return documentationUrlBuilder_.getMessageOrBuilder(index); + } + } + public java.util.List + getDocumentationUrlOrBuilderList() { + if (documentationUrlBuilder_ != null) { + return documentationUrlBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(documentationUrl_); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addDocumentationUrlBuilder() { + return getDocumentationUrlFieldBuilder().addBuilder( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addDocumentationUrlBuilder( + int index) { + return getDocumentationUrlFieldBuilder().addBuilder( + index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); + } + public java.util.List + getDocumentationUrlBuilderList() { + return getDocumentationUrlFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getDocumentationUrlFieldBuilder() { + if (documentationUrlBuilder_ == null) { + documentationUrlBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + documentationUrl_, + ((bitField0_ & 0x04000000) == 0x04000000), + getParentForChildren(), + isClean()); + documentationUrl_ = null; + } + return documentationUrlBuilder_; + } + + // repeated .eu.dnetlib.data.proto.StructuredProperty license = 36; + private java.util.List license_ = + java.util.Collections.emptyList(); + private void ensureLicenseIsMutable() { + if (!((bitField0_ & 0x08000000) == 0x08000000)) { + license_ = new java.util.ArrayList(license_); + bitField0_ |= 0x08000000; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder> licenseBuilder_; + + public java.util.List getLicenseList() { + if (licenseBuilder_ == null) { + return java.util.Collections.unmodifiableList(license_); + } else { + return licenseBuilder_.getMessageList(); + } + } + public int getLicenseCount() { + if (licenseBuilder_ == null) { + return license_.size(); + } else { + return licenseBuilder_.getCount(); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty getLicense(int index) { + if (licenseBuilder_ == null) { + return license_.get(index); + } else { + return licenseBuilder_.getMessage(index); + } + } + public Builder setLicense( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty value) { + if (licenseBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureLicenseIsMutable(); + license_.set(index, value); + onChanged(); + } else { + licenseBuilder_.setMessage(index, value); + } + return this; + } + public Builder setLicense( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder builderForValue) { + if (licenseBuilder_ == null) { + ensureLicenseIsMutable(); + license_.set(index, builderForValue.build()); + onChanged(); + } else { + licenseBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + public Builder addLicense(eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty value) { + if (licenseBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureLicenseIsMutable(); + license_.add(value); + onChanged(); + } else { + licenseBuilder_.addMessage(value); + } + return this; + } + public Builder addLicense( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty value) { + if (licenseBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureLicenseIsMutable(); + license_.add(index, value); + onChanged(); + } else { + licenseBuilder_.addMessage(index, value); + } + return this; + } + public Builder addLicense( + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder builderForValue) { + if (licenseBuilder_ == null) { + ensureLicenseIsMutable(); + license_.add(builderForValue.build()); + onChanged(); + } else { + licenseBuilder_.addMessage(builderForValue.build()); + } + return this; + } + public Builder addLicense( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder builderForValue) { + if (licenseBuilder_ == null) { + ensureLicenseIsMutable(); + license_.add(index, builderForValue.build()); + onChanged(); + } else { + licenseBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + public Builder addAllLicense( + java.lang.Iterable values) { + if (licenseBuilder_ == null) { + ensureLicenseIsMutable(); + super.addAll(values, license_); + onChanged(); + } else { + licenseBuilder_.addAllMessages(values); + } + return this; + } + public Builder clearLicense() { + if (licenseBuilder_ == null) { + license_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x08000000); + onChanged(); + } else { + licenseBuilder_.clear(); + } + return this; + } + public Builder removeLicense(int index) { + if (licenseBuilder_ == null) { + ensureLicenseIsMutable(); + license_.remove(index); + onChanged(); + } else { + licenseBuilder_.remove(index); + } + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder getLicenseBuilder( + int index) { + return getLicenseFieldBuilder().getBuilder(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder getLicenseOrBuilder( + int index) { + if (licenseBuilder_ == null) { + return license_.get(index); } else { + return licenseBuilder_.getMessageOrBuilder(index); + } + } + public java.util.List + getLicenseOrBuilderList() { + if (licenseBuilder_ != null) { + return licenseBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(license_); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder addLicenseBuilder() { + return getLicenseFieldBuilder().addBuilder( + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.getDefaultInstance()); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder addLicenseBuilder( + int index) { + return getLicenseFieldBuilder().addBuilder( + index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.getDefaultInstance()); + } + public java.util.List + getLicenseBuilderList() { + return getLicenseFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder> + getLicenseFieldBuilder() { + if (licenseBuilder_ == null) { + licenseBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder>( + license_, + ((bitField0_ & 0x08000000) == 0x08000000), + getParentForChildren(), + isClean()); + license_ = null; + } + return licenseBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField codeRepositoryUrl = 38; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField codeRepositoryUrl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> codeRepositoryUrlBuilder_; + public boolean hasCodeRepositoryUrl() { + return ((bitField0_ & 0x10000000) == 0x10000000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getCodeRepositoryUrl() { + if (codeRepositoryUrlBuilder_ == null) { + return codeRepositoryUrl_; + } else { + return codeRepositoryUrlBuilder_.getMessage(); + } + } + public Builder setCodeRepositoryUrl(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (codeRepositoryUrlBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + codeRepositoryUrl_ = value; + onChanged(); + } else { + codeRepositoryUrlBuilder_.setMessage(value); + } + bitField0_ |= 0x10000000; + return this; + } + public Builder setCodeRepositoryUrl( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (codeRepositoryUrlBuilder_ == null) { + codeRepositoryUrl_ = builderForValue.build(); + onChanged(); + } else { + codeRepositoryUrlBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x10000000; + return this; + } + public Builder mergeCodeRepositoryUrl(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (codeRepositoryUrlBuilder_ == null) { + if (((bitField0_ & 0x10000000) == 0x10000000) && + codeRepositoryUrl_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + codeRepositoryUrl_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(codeRepositoryUrl_).mergeFrom(value).buildPartial(); + } else { + codeRepositoryUrl_ = value; + } + onChanged(); + } else { + codeRepositoryUrlBuilder_.mergeFrom(value); + } + bitField0_ |= 0x10000000; + return this; + } + public Builder clearCodeRepositoryUrl() { + if (codeRepositoryUrlBuilder_ == null) { + codeRepositoryUrl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + codeRepositoryUrlBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x10000000); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getCodeRepositoryUrlBuilder() { + bitField0_ |= 0x10000000; + onChanged(); + return getCodeRepositoryUrlFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getCodeRepositoryUrlOrBuilder() { + if (codeRepositoryUrlBuilder_ != null) { + return codeRepositoryUrlBuilder_.getMessageOrBuilder(); + } else { + return codeRepositoryUrl_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getCodeRepositoryUrlFieldBuilder() { + if (codeRepositoryUrlBuilder_ == null) { + codeRepositoryUrlBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + codeRepositoryUrl_, + getParentForChildren(), + isClean()); + codeRepositoryUrl_ = null; + } + return codeRepositoryUrlBuilder_; + } + + // optional .eu.dnetlib.data.proto.Qualifier programmingLanguage = 39; + private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier programmingLanguage_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> programmingLanguageBuilder_; + public boolean hasProgrammingLanguage() { + return ((bitField0_ & 0x20000000) == 0x20000000); + } + public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getProgrammingLanguage() { + if (programmingLanguageBuilder_ == null) { + return programmingLanguage_; + } else { + return programmingLanguageBuilder_.getMessage(); + } + } + public Builder setProgrammingLanguage(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { + if (programmingLanguageBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + programmingLanguage_ = value; + onChanged(); + } else { + programmingLanguageBuilder_.setMessage(value); + } + bitField0_ |= 0x20000000; + return this; + } + public Builder setProgrammingLanguage( + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder builderForValue) { + if (programmingLanguageBuilder_ == null) { + programmingLanguage_ = builderForValue.build(); + onChanged(); + } else { + programmingLanguageBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x20000000; + return this; + } + public Builder mergeProgrammingLanguage(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { + if (programmingLanguageBuilder_ == null) { + if (((bitField0_ & 0x20000000) == 0x20000000) && + programmingLanguage_ != eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance()) { + programmingLanguage_ = + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(programmingLanguage_).mergeFrom(value).buildPartial(); + } else { + programmingLanguage_ = value; + } + onChanged(); + } else { + programmingLanguageBuilder_.mergeFrom(value); + } + bitField0_ |= 0x20000000; + return this; + } + public Builder clearProgrammingLanguage() { + if (programmingLanguageBuilder_ == null) { + programmingLanguage_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + onChanged(); + } else { + programmingLanguageBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x20000000); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder getProgrammingLanguageBuilder() { + bitField0_ |= 0x20000000; + onChanged(); + return getProgrammingLanguageFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getProgrammingLanguageOrBuilder() { + if (programmingLanguageBuilder_ != null) { + return programmingLanguageBuilder_.getMessageOrBuilder(); + } else { + return programmingLanguage_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> + getProgrammingLanguageFieldBuilder() { + if (programmingLanguageBuilder_ == null) { + programmingLanguageBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder>( + programmingLanguage_, + getParentForChildren(), + isClean()); + programmingLanguage_ = null; + } + return programmingLanguageBuilder_; + } + + // repeated .eu.dnetlib.data.proto.StringField contactperson = 45; + private java.util.List contactperson_ = + java.util.Collections.emptyList(); + private void ensureContactpersonIsMutable() { + if (!((bitField0_ & 0x40000000) == 0x40000000)) { + contactperson_ = new java.util.ArrayList(contactperson_); + bitField0_ |= 0x40000000; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> contactpersonBuilder_; + + public java.util.List getContactpersonList() { + if (contactpersonBuilder_ == null) { + return java.util.Collections.unmodifiableList(contactperson_); + } else { + return contactpersonBuilder_.getMessageList(); + } + } + public int getContactpersonCount() { + if (contactpersonBuilder_ == null) { + return contactperson_.size(); + } else { + return contactpersonBuilder_.getCount(); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getContactperson(int index) { + if (contactpersonBuilder_ == null) { + return contactperson_.get(index); + } else { + return contactpersonBuilder_.getMessage(index); + } + } + public Builder setContactperson( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (contactpersonBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureContactpersonIsMutable(); + contactperson_.set(index, value); + onChanged(); + } else { + contactpersonBuilder_.setMessage(index, value); + } + return this; + } + public Builder setContactperson( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (contactpersonBuilder_ == null) { + ensureContactpersonIsMutable(); + contactperson_.set(index, builderForValue.build()); + onChanged(); + } else { + contactpersonBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + public Builder addContactperson(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (contactpersonBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureContactpersonIsMutable(); + contactperson_.add(value); + onChanged(); + } else { + contactpersonBuilder_.addMessage(value); + } + return this; + } + public Builder addContactperson( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (contactpersonBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureContactpersonIsMutable(); + contactperson_.add(index, value); + onChanged(); + } else { + contactpersonBuilder_.addMessage(index, value); + } + return this; + } + public Builder addContactperson( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (contactpersonBuilder_ == null) { + ensureContactpersonIsMutable(); + contactperson_.add(builderForValue.build()); + onChanged(); + } else { + contactpersonBuilder_.addMessage(builderForValue.build()); + } + return this; + } + public Builder addContactperson( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (contactpersonBuilder_ == null) { + ensureContactpersonIsMutable(); + contactperson_.add(index, builderForValue.build()); + onChanged(); + } else { + contactpersonBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + public Builder addAllContactperson( + java.lang.Iterable values) { + if (contactpersonBuilder_ == null) { + ensureContactpersonIsMutable(); + super.addAll(values, contactperson_); + onChanged(); + } else { + contactpersonBuilder_.addAllMessages(values); + } + return this; + } + public Builder clearContactperson() { + if (contactpersonBuilder_ == null) { + contactperson_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x40000000); + onChanged(); + } else { + contactpersonBuilder_.clear(); + } + return this; + } + public Builder removeContactperson(int index) { + if (contactpersonBuilder_ == null) { + ensureContactpersonIsMutable(); + contactperson_.remove(index); + onChanged(); + } else { + contactpersonBuilder_.remove(index); + } + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getContactpersonBuilder( + int index) { + return getContactpersonFieldBuilder().getBuilder(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getContactpersonOrBuilder( + int index) { + if (contactpersonBuilder_ == null) { + return contactperson_.get(index); } else { + return contactpersonBuilder_.getMessageOrBuilder(index); + } + } + public java.util.List + getContactpersonOrBuilderList() { + if (contactpersonBuilder_ != null) { + return contactpersonBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(contactperson_); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addContactpersonBuilder() { + return getContactpersonFieldBuilder().addBuilder( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addContactpersonBuilder( + int index) { + return getContactpersonFieldBuilder().addBuilder( + index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); + } + public java.util.List + getContactpersonBuilderList() { + return getContactpersonFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getContactpersonFieldBuilder() { + if (contactpersonBuilder_ == null) { + contactpersonBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + contactperson_, + ((bitField0_ & 0x40000000) == 0x40000000), + getParentForChildren(), + isClean()); + contactperson_ = null; + } + return contactpersonBuilder_; + } + + // repeated .eu.dnetlib.data.proto.StringField contactgroup = 41; + private java.util.List contactgroup_ = + java.util.Collections.emptyList(); + private void ensureContactgroupIsMutable() { + if (!((bitField0_ & 0x80000000) == 0x80000000)) { + contactgroup_ = new java.util.ArrayList(contactgroup_); + bitField0_ |= 0x80000000; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> contactgroupBuilder_; + + public java.util.List getContactgroupList() { + if (contactgroupBuilder_ == null) { + return java.util.Collections.unmodifiableList(contactgroup_); + } else { + return contactgroupBuilder_.getMessageList(); + } + } + public int getContactgroupCount() { + if (contactgroupBuilder_ == null) { + return contactgroup_.size(); + } else { + return contactgroupBuilder_.getCount(); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getContactgroup(int index) { + if (contactgroupBuilder_ == null) { + return contactgroup_.get(index); + } else { + return contactgroupBuilder_.getMessage(index); + } + } + public Builder setContactgroup( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (contactgroupBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureContactgroupIsMutable(); + contactgroup_.set(index, value); + onChanged(); + } else { + contactgroupBuilder_.setMessage(index, value); + } + return this; + } + public Builder setContactgroup( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (contactgroupBuilder_ == null) { + ensureContactgroupIsMutable(); + contactgroup_.set(index, builderForValue.build()); + onChanged(); + } else { + contactgroupBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + public Builder addContactgroup(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (contactgroupBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureContactgroupIsMutable(); + contactgroup_.add(value); + onChanged(); + } else { + contactgroupBuilder_.addMessage(value); + } + return this; + } + public Builder addContactgroup( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (contactgroupBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureContactgroupIsMutable(); + contactgroup_.add(index, value); + onChanged(); + } else { + contactgroupBuilder_.addMessage(index, value); + } + return this; + } + public Builder addContactgroup( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (contactgroupBuilder_ == null) { + ensureContactgroupIsMutable(); + contactgroup_.add(builderForValue.build()); + onChanged(); + } else { + contactgroupBuilder_.addMessage(builderForValue.build()); + } + return this; + } + public Builder addContactgroup( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (contactgroupBuilder_ == null) { + ensureContactgroupIsMutable(); + contactgroup_.add(index, builderForValue.build()); + onChanged(); + } else { + contactgroupBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + public Builder addAllContactgroup( + java.lang.Iterable values) { + if (contactgroupBuilder_ == null) { + ensureContactgroupIsMutable(); + super.addAll(values, contactgroup_); + onChanged(); + } else { + contactgroupBuilder_.addAllMessages(values); + } + return this; + } + public Builder clearContactgroup() { + if (contactgroupBuilder_ == null) { + contactgroup_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x80000000); + onChanged(); + } else { + contactgroupBuilder_.clear(); + } + return this; + } + public Builder removeContactgroup(int index) { + if (contactgroupBuilder_ == null) { + ensureContactgroupIsMutable(); + contactgroup_.remove(index); + onChanged(); + } else { + contactgroupBuilder_.remove(index); + } + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getContactgroupBuilder( + int index) { + return getContactgroupFieldBuilder().getBuilder(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getContactgroupOrBuilder( + int index) { + if (contactgroupBuilder_ == null) { + return contactgroup_.get(index); } else { + return contactgroupBuilder_.getMessageOrBuilder(index); + } + } + public java.util.List + getContactgroupOrBuilderList() { + if (contactgroupBuilder_ != null) { + return contactgroupBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(contactgroup_); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addContactgroupBuilder() { + return getContactgroupFieldBuilder().addBuilder( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addContactgroupBuilder( + int index) { + return getContactgroupFieldBuilder().addBuilder( + index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); + } + public java.util.List + getContactgroupBuilderList() { + return getContactgroupFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getContactgroupFieldBuilder() { + if (contactgroupBuilder_ == null) { + contactgroupBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + contactgroup_, + ((bitField0_ & 0x80000000) == 0x80000000), + getParentForChildren(), + isClean()); + contactgroup_ = null; + } + return contactgroupBuilder_; + } + + // repeated .eu.dnetlib.data.proto.StringField tool = 42; + private java.util.List tool_ = + java.util.Collections.emptyList(); + private void ensureToolIsMutable() { + if (!((bitField1_ & 0x00000001) == 0x00000001)) { + tool_ = new java.util.ArrayList(tool_); + bitField1_ |= 0x00000001; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> toolBuilder_; + + public java.util.List getToolList() { + if (toolBuilder_ == null) { + return java.util.Collections.unmodifiableList(tool_); + } else { + return toolBuilder_.getMessageList(); + } + } + public int getToolCount() { + if (toolBuilder_ == null) { + return tool_.size(); + } else { + return toolBuilder_.getCount(); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getTool(int index) { + if (toolBuilder_ == null) { + return tool_.get(index); + } else { + return toolBuilder_.getMessage(index); + } + } + public Builder setTool( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (toolBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureToolIsMutable(); + tool_.set(index, value); + onChanged(); + } else { + toolBuilder_.setMessage(index, value); + } + return this; + } + public Builder setTool( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (toolBuilder_ == null) { + ensureToolIsMutable(); + tool_.set(index, builderForValue.build()); + onChanged(); + } else { + toolBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + public Builder addTool(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (toolBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureToolIsMutable(); + tool_.add(value); + onChanged(); + } else { + toolBuilder_.addMessage(value); + } + return this; + } + public Builder addTool( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (toolBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureToolIsMutable(); + tool_.add(index, value); + onChanged(); + } else { + toolBuilder_.addMessage(index, value); + } + return this; + } + public Builder addTool( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (toolBuilder_ == null) { + ensureToolIsMutable(); + tool_.add(builderForValue.build()); + onChanged(); + } else { + toolBuilder_.addMessage(builderForValue.build()); + } + return this; + } + public Builder addTool( + int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (toolBuilder_ == null) { + ensureToolIsMutable(); + tool_.add(index, builderForValue.build()); + onChanged(); + } else { + toolBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + public Builder addAllTool( + java.lang.Iterable values) { + if (toolBuilder_ == null) { + ensureToolIsMutable(); + super.addAll(values, tool_); + onChanged(); + } else { + toolBuilder_.addAllMessages(values); + } + return this; + } + public Builder clearTool() { + if (toolBuilder_ == null) { + tool_ = java.util.Collections.emptyList(); + bitField1_ = (bitField1_ & ~0x00000001); + onChanged(); + } else { + toolBuilder_.clear(); + } + return this; + } + public Builder removeTool(int index) { + if (toolBuilder_ == null) { + ensureToolIsMutable(); + tool_.remove(index); + onChanged(); + } else { + toolBuilder_.remove(index); + } + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getToolBuilder( + int index) { + return getToolFieldBuilder().getBuilder(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getToolOrBuilder( + int index) { + if (toolBuilder_ == null) { + return tool_.get(index); } else { + return toolBuilder_.getMessageOrBuilder(index); + } + } + public java.util.List + getToolOrBuilderList() { + if (toolBuilder_ != null) { + return toolBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(tool_); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addToolBuilder() { + return getToolFieldBuilder().addBuilder( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addToolBuilder( + int index) { + return getToolFieldBuilder().addBuilder( + index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); + } + public java.util.List + getToolBuilderList() { + return getToolFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getToolFieldBuilder() { + if (toolBuilder_ == null) { + toolBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + tool_, + ((bitField1_ & 0x00000001) == 0x00000001), + getParentForChildren(), + isClean()); + tool_ = null; + } + return toolBuilder_; + } + + // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.Result.Metadata) + } + + static { + defaultInstance = new Metadata(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.Result.Metadata) + } + + public interface JournalOrBuilder + extends com.google.protobuf.MessageOrBuilder { + + // optional string name = 1; + boolean hasName(); + String getName(); + + // optional string issnPrinted = 2; + boolean hasIssnPrinted(); + String getIssnPrinted(); + + // optional string issnOnline = 3; + boolean hasIssnOnline(); + String getIssnOnline(); + + // optional string issnLinking = 4; + boolean hasIssnLinking(); + String getIssnLinking(); + + // optional string ep = 6; + boolean hasEp(); + String getEp(); + + // optional string iss = 7; + boolean hasIss(); + String getIss(); + + // optional string sp = 8; + boolean hasSp(); + String getSp(); + + // optional string vol = 9; + boolean hasVol(); + String getVol(); + + // optional string edition = 10; + boolean hasEdition(); + String getEdition(); + + // optional string conferenceplace = 11; + boolean hasConferenceplace(); + String getConferenceplace(); + + // optional string conferencedate = 12; + boolean hasConferencedate(); + String getConferencedate(); + + // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 5; + boolean hasDataInfo(); + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo(); + eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder(); + } + public static final class Journal extends + com.google.protobuf.GeneratedMessage + implements JournalOrBuilder { + // Use Journal.newBuilder() to construct. + private Journal(Builder builder) { + super(builder); + } + private Journal(boolean noInit) {} + + private static final Journal defaultInstance; + public static Journal getDefaultInstance() { + return defaultInstance; + } + + public Journal getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_Journal_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_Journal_fieldAccessorTable; + } + + private int bitField0_; + // optional string name = 1; + public static final int NAME_FIELD_NUMBER = 1; + private java.lang.Object name_; + public boolean hasName() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public String getName() { + java.lang.Object ref = name_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + name_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // optional string issnPrinted = 2; + public static final int ISSNPRINTED_FIELD_NUMBER = 2; + private java.lang.Object issnPrinted_; + public boolean hasIssnPrinted() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public String getIssnPrinted() { + java.lang.Object ref = issnPrinted_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + issnPrinted_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getIssnPrintedBytes() { + java.lang.Object ref = issnPrinted_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + issnPrinted_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // optional string issnOnline = 3; + public static final int ISSNONLINE_FIELD_NUMBER = 3; + private java.lang.Object issnOnline_; + public boolean hasIssnOnline() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + public String getIssnOnline() { + java.lang.Object ref = issnOnline_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + issnOnline_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getIssnOnlineBytes() { + java.lang.Object ref = issnOnline_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + issnOnline_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // optional string issnLinking = 4; + public static final int ISSNLINKING_FIELD_NUMBER = 4; + private java.lang.Object issnLinking_; + public boolean hasIssnLinking() { + return ((bitField0_ & 0x00000008) == 0x00000008); + } + public String getIssnLinking() { + java.lang.Object ref = issnLinking_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + issnLinking_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getIssnLinkingBytes() { + java.lang.Object ref = issnLinking_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + issnLinking_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // optional string ep = 6; + public static final int EP_FIELD_NUMBER = 6; + private java.lang.Object ep_; + public boolean hasEp() { + return ((bitField0_ & 0x00000010) == 0x00000010); + } + public String getEp() { + java.lang.Object ref = ep_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + ep_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getEpBytes() { + java.lang.Object ref = ep_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + ep_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // optional string iss = 7; + public static final int ISS_FIELD_NUMBER = 7; + private java.lang.Object iss_; + public boolean hasIss() { + return ((bitField0_ & 0x00000020) == 0x00000020); + } + public String getIss() { + java.lang.Object ref = iss_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + iss_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getIssBytes() { + java.lang.Object ref = iss_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + iss_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // optional string sp = 8; + public static final int SP_FIELD_NUMBER = 8; + private java.lang.Object sp_; + public boolean hasSp() { + return ((bitField0_ & 0x00000040) == 0x00000040); + } + public String getSp() { + java.lang.Object ref = sp_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + sp_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getSpBytes() { + java.lang.Object ref = sp_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + sp_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // optional string vol = 9; + public static final int VOL_FIELD_NUMBER = 9; + private java.lang.Object vol_; + public boolean hasVol() { + return ((bitField0_ & 0x00000080) == 0x00000080); + } + public String getVol() { + java.lang.Object ref = vol_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + vol_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getVolBytes() { + java.lang.Object ref = vol_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + vol_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // optional string edition = 10; + public static final int EDITION_FIELD_NUMBER = 10; + private java.lang.Object edition_; + public boolean hasEdition() { + return ((bitField0_ & 0x00000100) == 0x00000100); + } + public String getEdition() { + java.lang.Object ref = edition_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + edition_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getEditionBytes() { + java.lang.Object ref = edition_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + edition_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // optional string conferenceplace = 11; + public static final int CONFERENCEPLACE_FIELD_NUMBER = 11; + private java.lang.Object conferenceplace_; + public boolean hasConferenceplace() { + return ((bitField0_ & 0x00000200) == 0x00000200); + } + public String getConferenceplace() { + java.lang.Object ref = conferenceplace_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + conferenceplace_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getConferenceplaceBytes() { + java.lang.Object ref = conferenceplace_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + conferenceplace_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // optional string conferencedate = 12; + public static final int CONFERENCEDATE_FIELD_NUMBER = 12; + private java.lang.Object conferencedate_; + public boolean hasConferencedate() { + return ((bitField0_ & 0x00000400) == 0x00000400); + } + public String getConferencedate() { + java.lang.Object ref = conferencedate_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + conferencedate_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getConferencedateBytes() { + java.lang.Object ref = conferencedate_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + conferencedate_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 5; + public static final int DATAINFO_FIELD_NUMBER = 5; + private eu.dnetlib.data.proto.FieldTypeProtos.DataInfo dataInfo_; + public boolean hasDataInfo() { + return ((bitField0_ & 0x00000800) == 0x00000800); + } + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo() { + return dataInfo_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder() { + return dataInfo_; + } + + private void initFields() { + name_ = ""; + issnPrinted_ = ""; + issnOnline_ = ""; + issnLinking_ = ""; + ep_ = ""; + iss_ = ""; + sp_ = ""; + vol_ = ""; + edition_ = ""; + conferenceplace_ = ""; + conferencedate_ = ""; + dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + if (hasDataInfo()) { + if (!getDataInfo().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeBytes(1, getNameBytes()); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + output.writeBytes(2, getIssnPrintedBytes()); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + output.writeBytes(3, getIssnOnlineBytes()); + } + if (((bitField0_ & 0x00000008) == 0x00000008)) { + output.writeBytes(4, getIssnLinkingBytes()); + } + if (((bitField0_ & 0x00000800) == 0x00000800)) { + output.writeMessage(5, dataInfo_); + } + if (((bitField0_ & 0x00000010) == 0x00000010)) { + output.writeBytes(6, getEpBytes()); + } + if (((bitField0_ & 0x00000020) == 0x00000020)) { + output.writeBytes(7, getIssBytes()); + } + if (((bitField0_ & 0x00000040) == 0x00000040)) { + output.writeBytes(8, getSpBytes()); + } + if (((bitField0_ & 0x00000080) == 0x00000080)) { + output.writeBytes(9, getVolBytes()); + } + if (((bitField0_ & 0x00000100) == 0x00000100)) { + output.writeBytes(10, getEditionBytes()); + } + if (((bitField0_ & 0x00000200) == 0x00000200)) { + output.writeBytes(11, getConferenceplaceBytes()); + } + if (((bitField0_ & 0x00000400) == 0x00000400)) { + output.writeBytes(12, getConferencedateBytes()); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(1, getNameBytes()); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(2, getIssnPrintedBytes()); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(3, getIssnOnlineBytes()); + } + if (((bitField0_ & 0x00000008) == 0x00000008)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(4, getIssnLinkingBytes()); + } + if (((bitField0_ & 0x00000800) == 0x00000800)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(5, dataInfo_); + } + if (((bitField0_ & 0x00000010) == 0x00000010)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(6, getEpBytes()); + } + if (((bitField0_ & 0x00000020) == 0x00000020)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(7, getIssBytes()); + } + if (((bitField0_ & 0x00000040) == 0x00000040)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(8, getSpBytes()); + } + if (((bitField0_ & 0x00000080) == 0x00000080)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(9, getVolBytes()); + } + if (((bitField0_ & 0x00000100) == 0x00000100)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(10, getEditionBytes()); + } + if (((bitField0_ & 0x00000200) == 0x00000200)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(11, getConferenceplaceBytes()); + } + if (((bitField0_ & 0x00000400) == 0x00000400)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(12, getConferencedateBytes()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static eu.dnetlib.data.proto.ResultProtos.Result.Journal parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProtos.Result.Journal parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProtos.Result.Journal parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProtos.Result.Journal parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProtos.Result.Journal parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProtos.Result.Journal parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProtos.Result.Journal parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.ResultProtos.Result.Journal parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.ResultProtos.Result.Journal parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProtos.Result.Journal parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(eu.dnetlib.data.proto.ResultProtos.Result.Journal prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder + implements eu.dnetlib.data.proto.ResultProtos.Result.JournalOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_Journal_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_Journal_fieldAccessorTable; + } + + // Construct using eu.dnetlib.data.proto.ResultProtos.Result.Journal.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getDataInfoFieldBuilder(); + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + name_ = ""; + bitField0_ = (bitField0_ & ~0x00000001); + issnPrinted_ = ""; + bitField0_ = (bitField0_ & ~0x00000002); + issnOnline_ = ""; + bitField0_ = (bitField0_ & ~0x00000004); + issnLinking_ = ""; + bitField0_ = (bitField0_ & ~0x00000008); + ep_ = ""; + bitField0_ = (bitField0_ & ~0x00000010); + iss_ = ""; + bitField0_ = (bitField0_ & ~0x00000020); + sp_ = ""; + bitField0_ = (bitField0_ & ~0x00000040); + vol_ = ""; + bitField0_ = (bitField0_ & ~0x00000080); + edition_ = ""; + bitField0_ = (bitField0_ & ~0x00000100); + conferenceplace_ = ""; + bitField0_ = (bitField0_ & ~0x00000200); + conferencedate_ = ""; + bitField0_ = (bitField0_ & ~0x00000400); + if (dataInfoBuilder_ == null) { + dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); + } else { + dataInfoBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000800); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return eu.dnetlib.data.proto.ResultProtos.Result.Journal.getDescriptor(); + } + + public eu.dnetlib.data.proto.ResultProtos.Result.Journal getDefaultInstanceForType() { + return eu.dnetlib.data.proto.ResultProtos.Result.Journal.getDefaultInstance(); + } + + public eu.dnetlib.data.proto.ResultProtos.Result.Journal build() { + eu.dnetlib.data.proto.ResultProtos.Result.Journal result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + private eu.dnetlib.data.proto.ResultProtos.Result.Journal buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + eu.dnetlib.data.proto.ResultProtos.Result.Journal result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return result; + } + + public eu.dnetlib.data.proto.ResultProtos.Result.Journal buildPartial() { + eu.dnetlib.data.proto.ResultProtos.Result.Journal result = new eu.dnetlib.data.proto.ResultProtos.Result.Journal(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + result.name_ = name_; + if (((from_bitField0_ & 0x00000002) == 0x00000002)) { + to_bitField0_ |= 0x00000002; + } + result.issnPrinted_ = issnPrinted_; + if (((from_bitField0_ & 0x00000004) == 0x00000004)) { + to_bitField0_ |= 0x00000004; + } + result.issnOnline_ = issnOnline_; + if (((from_bitField0_ & 0x00000008) == 0x00000008)) { + to_bitField0_ |= 0x00000008; + } + result.issnLinking_ = issnLinking_; + if (((from_bitField0_ & 0x00000010) == 0x00000010)) { + to_bitField0_ |= 0x00000010; + } + result.ep_ = ep_; + if (((from_bitField0_ & 0x00000020) == 0x00000020)) { + to_bitField0_ |= 0x00000020; + } + result.iss_ = iss_; + if (((from_bitField0_ & 0x00000040) == 0x00000040)) { + to_bitField0_ |= 0x00000040; + } + result.sp_ = sp_; + if (((from_bitField0_ & 0x00000080) == 0x00000080)) { + to_bitField0_ |= 0x00000080; + } + result.vol_ = vol_; + if (((from_bitField0_ & 0x00000100) == 0x00000100)) { + to_bitField0_ |= 0x00000100; + } + result.edition_ = edition_; + if (((from_bitField0_ & 0x00000200) == 0x00000200)) { + to_bitField0_ |= 0x00000200; + } + result.conferenceplace_ = conferenceplace_; + if (((from_bitField0_ & 0x00000400) == 0x00000400)) { + to_bitField0_ |= 0x00000400; + } + result.conferencedate_ = conferencedate_; + if (((from_bitField0_ & 0x00000800) == 0x00000800)) { + to_bitField0_ |= 0x00000800; + } + if (dataInfoBuilder_ == null) { + result.dataInfo_ = dataInfo_; + } else { + result.dataInfo_ = dataInfoBuilder_.build(); + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof eu.dnetlib.data.proto.ResultProtos.Result.Journal) { + return mergeFrom((eu.dnetlib.data.proto.ResultProtos.Result.Journal)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(eu.dnetlib.data.proto.ResultProtos.Result.Journal other) { + if (other == eu.dnetlib.data.proto.ResultProtos.Result.Journal.getDefaultInstance()) return this; + if (other.hasName()) { + setName(other.getName()); + } + if (other.hasIssnPrinted()) { + setIssnPrinted(other.getIssnPrinted()); + } + if (other.hasIssnOnline()) { + setIssnOnline(other.getIssnOnline()); + } + if (other.hasIssnLinking()) { + setIssnLinking(other.getIssnLinking()); + } + if (other.hasEp()) { + setEp(other.getEp()); + } + if (other.hasIss()) { + setIss(other.getIss()); + } + if (other.hasSp()) { + setSp(other.getSp()); + } + if (other.hasVol()) { + setVol(other.getVol()); + } + if (other.hasEdition()) { + setEdition(other.getEdition()); + } + if (other.hasConferenceplace()) { + setConferenceplace(other.getConferenceplace()); + } + if (other.hasConferencedate()) { + setConferencedate(other.getConferencedate()); + } + if (other.hasDataInfo()) { + mergeDataInfo(other.getDataInfo()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + if (hasDataInfo()) { + if (!getDataInfo().isInitialized()) { + + return false; + } + } + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + } + break; + } + case 10: { + bitField0_ |= 0x00000001; + name_ = input.readBytes(); + break; + } + case 18: { + bitField0_ |= 0x00000002; + issnPrinted_ = input.readBytes(); + break; + } + case 26: { + bitField0_ |= 0x00000004; + issnOnline_ = input.readBytes(); + break; + } + case 34: { + bitField0_ |= 0x00000008; + issnLinking_ = input.readBytes(); + break; + } + case 42: { + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.newBuilder(); + if (hasDataInfo()) { + subBuilder.mergeFrom(getDataInfo()); + } + input.readMessage(subBuilder, extensionRegistry); + setDataInfo(subBuilder.buildPartial()); + break; + } + case 50: { + bitField0_ |= 0x00000010; + ep_ = input.readBytes(); + break; + } + case 58: { + bitField0_ |= 0x00000020; + iss_ = input.readBytes(); + break; + } + case 66: { + bitField0_ |= 0x00000040; + sp_ = input.readBytes(); + break; + } + case 74: { + bitField0_ |= 0x00000080; + vol_ = input.readBytes(); + break; + } + case 82: { + bitField0_ |= 0x00000100; + edition_ = input.readBytes(); + break; + } + case 90: { + bitField0_ |= 0x00000200; + conferenceplace_ = input.readBytes(); + break; + } + case 98: { + bitField0_ |= 0x00000400; + conferencedate_ = input.readBytes(); + break; + } + } + } + } + + private int bitField0_; + + // optional string name = 1; + private java.lang.Object name_ = ""; + public boolean hasName() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public String getName() { + java.lang.Object ref = name_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + name_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setName(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + name_ = value; + onChanged(); + return this; + } + public Builder clearName() { + bitField0_ = (bitField0_ & ~0x00000001); + name_ = getDefaultInstance().getName(); + onChanged(); + return this; + } + void setName(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000001; + name_ = value; + onChanged(); + } + + // optional string issnPrinted = 2; + private java.lang.Object issnPrinted_ = ""; + public boolean hasIssnPrinted() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public String getIssnPrinted() { + java.lang.Object ref = issnPrinted_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + issnPrinted_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setIssnPrinted(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + issnPrinted_ = value; + onChanged(); + return this; + } + public Builder clearIssnPrinted() { + bitField0_ = (bitField0_ & ~0x00000002); + issnPrinted_ = getDefaultInstance().getIssnPrinted(); + onChanged(); + return this; + } + void setIssnPrinted(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000002; + issnPrinted_ = value; + onChanged(); + } + + // optional string issnOnline = 3; + private java.lang.Object issnOnline_ = ""; + public boolean hasIssnOnline() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + public String getIssnOnline() { + java.lang.Object ref = issnOnline_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + issnOnline_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setIssnOnline(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000004; + issnOnline_ = value; + onChanged(); + return this; + } + public Builder clearIssnOnline() { + bitField0_ = (bitField0_ & ~0x00000004); + issnOnline_ = getDefaultInstance().getIssnOnline(); + onChanged(); + return this; + } + void setIssnOnline(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000004; + issnOnline_ = value; + onChanged(); + } + + // optional string issnLinking = 4; + private java.lang.Object issnLinking_ = ""; + public boolean hasIssnLinking() { + return ((bitField0_ & 0x00000008) == 0x00000008); + } + public String getIssnLinking() { + java.lang.Object ref = issnLinking_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + issnLinking_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setIssnLinking(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000008; + issnLinking_ = value; + onChanged(); + return this; + } + public Builder clearIssnLinking() { + bitField0_ = (bitField0_ & ~0x00000008); + issnLinking_ = getDefaultInstance().getIssnLinking(); + onChanged(); + return this; + } + void setIssnLinking(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000008; + issnLinking_ = value; + onChanged(); + } + + // optional string ep = 6; + private java.lang.Object ep_ = ""; + public boolean hasEp() { + return ((bitField0_ & 0x00000010) == 0x00000010); + } + public String getEp() { + java.lang.Object ref = ep_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + ep_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setEp(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000010; + ep_ = value; + onChanged(); + return this; + } + public Builder clearEp() { + bitField0_ = (bitField0_ & ~0x00000010); + ep_ = getDefaultInstance().getEp(); + onChanged(); + return this; + } + void setEp(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000010; + ep_ = value; + onChanged(); + } + + // optional string iss = 7; + private java.lang.Object iss_ = ""; + public boolean hasIss() { + return ((bitField0_ & 0x00000020) == 0x00000020); + } + public String getIss() { + java.lang.Object ref = iss_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + iss_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setIss(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000020; + iss_ = value; + onChanged(); + return this; + } + public Builder clearIss() { + bitField0_ = (bitField0_ & ~0x00000020); + iss_ = getDefaultInstance().getIss(); + onChanged(); + return this; + } + void setIss(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000020; + iss_ = value; + onChanged(); + } + + // optional string sp = 8; + private java.lang.Object sp_ = ""; + public boolean hasSp() { + return ((bitField0_ & 0x00000040) == 0x00000040); + } + public String getSp() { + java.lang.Object ref = sp_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + sp_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setSp(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000040; + sp_ = value; + onChanged(); + return this; + } + public Builder clearSp() { + bitField0_ = (bitField0_ & ~0x00000040); + sp_ = getDefaultInstance().getSp(); + onChanged(); + return this; + } + void setSp(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000040; + sp_ = value; + onChanged(); + } + + // optional string vol = 9; + private java.lang.Object vol_ = ""; + public boolean hasVol() { + return ((bitField0_ & 0x00000080) == 0x00000080); + } + public String getVol() { + java.lang.Object ref = vol_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + vol_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setVol(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000080; + vol_ = value; + onChanged(); + return this; + } + public Builder clearVol() { + bitField0_ = (bitField0_ & ~0x00000080); + vol_ = getDefaultInstance().getVol(); + onChanged(); + return this; + } + void setVol(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000080; + vol_ = value; + onChanged(); + } + + // optional string edition = 10; + private java.lang.Object edition_ = ""; + public boolean hasEdition() { + return ((bitField0_ & 0x00000100) == 0x00000100); + } + public String getEdition() { + java.lang.Object ref = edition_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + edition_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setEdition(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000100; + edition_ = value; + onChanged(); + return this; + } + public Builder clearEdition() { + bitField0_ = (bitField0_ & ~0x00000100); + edition_ = getDefaultInstance().getEdition(); + onChanged(); + return this; + } + void setEdition(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000100; + edition_ = value; + onChanged(); + } + + // optional string conferenceplace = 11; + private java.lang.Object conferenceplace_ = ""; + public boolean hasConferenceplace() { + return ((bitField0_ & 0x00000200) == 0x00000200); + } + public String getConferenceplace() { + java.lang.Object ref = conferenceplace_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + conferenceplace_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setConferenceplace(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000200; + conferenceplace_ = value; + onChanged(); + return this; + } + public Builder clearConferenceplace() { + bitField0_ = (bitField0_ & ~0x00000200); + conferenceplace_ = getDefaultInstance().getConferenceplace(); + onChanged(); + return this; + } + void setConferenceplace(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000200; + conferenceplace_ = value; + onChanged(); + } + + // optional string conferencedate = 12; + private java.lang.Object conferencedate_ = ""; + public boolean hasConferencedate() { + return ((bitField0_ & 0x00000400) == 0x00000400); + } + public String getConferencedate() { + java.lang.Object ref = conferencedate_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + conferencedate_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setConferencedate(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000400; + conferencedate_ = value; + onChanged(); + return this; + } + public Builder clearConferencedate() { + bitField0_ = (bitField0_ & ~0x00000400); + conferencedate_ = getDefaultInstance().getConferencedate(); + onChanged(); + return this; + } + void setConferencedate(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000400; + conferencedate_ = value; + onChanged(); + } + + // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 5; + private eu.dnetlib.data.proto.FieldTypeProtos.DataInfo dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder> dataInfoBuilder_; + public boolean hasDataInfo() { + return ((bitField0_ & 0x00000800) == 0x00000800); + } + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo() { + if (dataInfoBuilder_ == null) { + return dataInfo_; + } else { + return dataInfoBuilder_.getMessage(); + } + } + public Builder setDataInfo(eu.dnetlib.data.proto.FieldTypeProtos.DataInfo value) { + if (dataInfoBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + dataInfo_ = value; + onChanged(); + } else { + dataInfoBuilder_.setMessage(value); + } + bitField0_ |= 0x00000800; + return this; + } + public Builder setDataInfo( + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder builderForValue) { + if (dataInfoBuilder_ == null) { + dataInfo_ = builderForValue.build(); + onChanged(); + } else { + dataInfoBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000800; + return this; + } + public Builder mergeDataInfo(eu.dnetlib.data.proto.FieldTypeProtos.DataInfo value) { + if (dataInfoBuilder_ == null) { + if (((bitField0_ & 0x00000800) == 0x00000800) && + dataInfo_ != eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance()) { + dataInfo_ = + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.newBuilder(dataInfo_).mergeFrom(value).buildPartial(); + } else { + dataInfo_ = value; + } + onChanged(); + } else { + dataInfoBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000800; + return this; + } + public Builder clearDataInfo() { + if (dataInfoBuilder_ == null) { + dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); + onChanged(); + } else { + dataInfoBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000800); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder getDataInfoBuilder() { + bitField0_ |= 0x00000800; + onChanged(); + return getDataInfoFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder() { + if (dataInfoBuilder_ != null) { + return dataInfoBuilder_.getMessageOrBuilder(); + } else { + return dataInfo_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder> + getDataInfoFieldBuilder() { + if (dataInfoBuilder_ == null) { + dataInfoBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder>( + dataInfo_, + getParentForChildren(), + isClean()); + dataInfo_ = null; + } + return dataInfoBuilder_; + } + + // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.Result.Journal) + } + + static { + defaultInstance = new Journal(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.Result.Journal) + } + + public interface ContextOrBuilder + extends com.google.protobuf.MessageOrBuilder { + + // required string id = 1; + boolean hasId(); + String getId(); + + // repeated .eu.dnetlib.data.proto.DataInfo dataInfo = 2; + java.util.List + getDataInfoList(); + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo(int index); + int getDataInfoCount(); + java.util.List + getDataInfoOrBuilderList(); + eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder( + int index); + } + public static final class Context extends + com.google.protobuf.GeneratedMessage + implements ContextOrBuilder { + // Use Context.newBuilder() to construct. + private Context(Builder builder) { + super(builder); + } + private Context(boolean noInit) {} + + private static final Context defaultInstance; + public static Context getDefaultInstance() { + return defaultInstance; + } + + public Context getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_Context_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_Context_fieldAccessorTable; + } + + private int bitField0_; + // required string id = 1; + public static final int ID_FIELD_NUMBER = 1; + private java.lang.Object id_; + public boolean hasId() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public String getId() { + java.lang.Object ref = id_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + id_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getIdBytes() { + java.lang.Object ref = id_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + id_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // repeated .eu.dnetlib.data.proto.DataInfo dataInfo = 2; + public static final int DATAINFO_FIELD_NUMBER = 2; + private java.util.List dataInfo_; + public java.util.List getDataInfoList() { + return dataInfo_; + } + public java.util.List + getDataInfoOrBuilderList() { + return dataInfo_; + } + public int getDataInfoCount() { + return dataInfo_.size(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo(int index) { + return dataInfo_.get(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder( + int index) { + return dataInfo_.get(index); + } + + private void initFields() { + id_ = ""; + dataInfo_ = java.util.Collections.emptyList(); + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + if (!hasId()) { + memoizedIsInitialized = 0; + return false; + } + for (int i = 0; i < getDataInfoCount(); i++) { + if (!getDataInfo(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeBytes(1, getIdBytes()); + } + for (int i = 0; i < dataInfo_.size(); i++) { + output.writeMessage(2, dataInfo_.get(i)); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(1, getIdBytes()); + } + for (int i = 0; i < dataInfo_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(2, dataInfo_.get(i)); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static eu.dnetlib.data.proto.ResultProtos.Result.Context parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProtos.Result.Context parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProtos.Result.Context parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProtos.Result.Context parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProtos.Result.Context parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProtos.Result.Context parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProtos.Result.Context parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.ResultProtos.Result.Context parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.ResultProtos.Result.Context parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProtos.Result.Context parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(eu.dnetlib.data.proto.ResultProtos.Result.Context prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder + implements eu.dnetlib.data.proto.ResultProtos.Result.ContextOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_Context_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_Context_fieldAccessorTable; + } + + // Construct using eu.dnetlib.data.proto.ResultProtos.Result.Context.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getDataInfoFieldBuilder(); + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + id_ = ""; + bitField0_ = (bitField0_ & ~0x00000001); + if (dataInfoBuilder_ == null) { + dataInfo_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000002); + } else { + dataInfoBuilder_.clear(); + } + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return eu.dnetlib.data.proto.ResultProtos.Result.Context.getDescriptor(); + } + + public eu.dnetlib.data.proto.ResultProtos.Result.Context getDefaultInstanceForType() { + return eu.dnetlib.data.proto.ResultProtos.Result.Context.getDefaultInstance(); + } + + public eu.dnetlib.data.proto.ResultProtos.Result.Context build() { + eu.dnetlib.data.proto.ResultProtos.Result.Context result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + private eu.dnetlib.data.proto.ResultProtos.Result.Context buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + eu.dnetlib.data.proto.ResultProtos.Result.Context result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return result; + } + + public eu.dnetlib.data.proto.ResultProtos.Result.Context buildPartial() { + eu.dnetlib.data.proto.ResultProtos.Result.Context result = new eu.dnetlib.data.proto.ResultProtos.Result.Context(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + result.id_ = id_; + if (dataInfoBuilder_ == null) { + if (((bitField0_ & 0x00000002) == 0x00000002)) { + dataInfo_ = java.util.Collections.unmodifiableList(dataInfo_); + bitField0_ = (bitField0_ & ~0x00000002); + } + result.dataInfo_ = dataInfo_; + } else { + result.dataInfo_ = dataInfoBuilder_.build(); + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof eu.dnetlib.data.proto.ResultProtos.Result.Context) { + return mergeFrom((eu.dnetlib.data.proto.ResultProtos.Result.Context)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(eu.dnetlib.data.proto.ResultProtos.Result.Context other) { + if (other == eu.dnetlib.data.proto.ResultProtos.Result.Context.getDefaultInstance()) return this; + if (other.hasId()) { + setId(other.getId()); + } + if (dataInfoBuilder_ == null) { + if (!other.dataInfo_.isEmpty()) { + if (dataInfo_.isEmpty()) { + dataInfo_ = other.dataInfo_; + bitField0_ = (bitField0_ & ~0x00000002); + } else { + ensureDataInfoIsMutable(); + dataInfo_.addAll(other.dataInfo_); + } + onChanged(); + } + } else { + if (!other.dataInfo_.isEmpty()) { + if (dataInfoBuilder_.isEmpty()) { + dataInfoBuilder_.dispose(); + dataInfoBuilder_ = null; + dataInfo_ = other.dataInfo_; + bitField0_ = (bitField0_ & ~0x00000002); + dataInfoBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + getDataInfoFieldBuilder() : null; + } else { + dataInfoBuilder_.addAllMessages(other.dataInfo_); + } + } + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + if (!hasId()) { + + return false; + } + for (int i = 0; i < getDataInfoCount(); i++) { + if (!getDataInfo(i).isInitialized()) { + + return false; + } + } + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + } + break; + } + case 10: { + bitField0_ |= 0x00000001; + id_ = input.readBytes(); + break; + } + case 18: { + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addDataInfo(subBuilder.buildPartial()); + break; + } + } + } + } + + private int bitField0_; + + // required string id = 1; + private java.lang.Object id_ = ""; + public boolean hasId() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public String getId() { + java.lang.Object ref = id_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + id_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setId(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + id_ = value; + onChanged(); + return this; + } + public Builder clearId() { + bitField0_ = (bitField0_ & ~0x00000001); + id_ = getDefaultInstance().getId(); + onChanged(); + return this; + } + void setId(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000001; + id_ = value; + onChanged(); + } + + // repeated .eu.dnetlib.data.proto.DataInfo dataInfo = 2; + private java.util.List dataInfo_ = + java.util.Collections.emptyList(); + private void ensureDataInfoIsMutable() { + if (!((bitField0_ & 0x00000002) == 0x00000002)) { + dataInfo_ = new java.util.ArrayList(dataInfo_); + bitField0_ |= 0x00000002; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder> dataInfoBuilder_; + + public java.util.List getDataInfoList() { + if (dataInfoBuilder_ == null) { + return java.util.Collections.unmodifiableList(dataInfo_); + } else { + return dataInfoBuilder_.getMessageList(); + } + } + public int getDataInfoCount() { + if (dataInfoBuilder_ == null) { + return dataInfo_.size(); + } else { + return dataInfoBuilder_.getCount(); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo(int index) { + if (dataInfoBuilder_ == null) { + return dataInfo_.get(index); + } else { + return dataInfoBuilder_.getMessage(index); + } + } + public Builder setDataInfo( + int index, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo value) { + if (dataInfoBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureDataInfoIsMutable(); + dataInfo_.set(index, value); + onChanged(); + } else { + dataInfoBuilder_.setMessage(index, value); + } + return this; + } + public Builder setDataInfo( + int index, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder builderForValue) { + if (dataInfoBuilder_ == null) { + ensureDataInfoIsMutable(); + dataInfo_.set(index, builderForValue.build()); + onChanged(); + } else { + dataInfoBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + public Builder addDataInfo(eu.dnetlib.data.proto.FieldTypeProtos.DataInfo value) { + if (dataInfoBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureDataInfoIsMutable(); + dataInfo_.add(value); + onChanged(); + } else { + dataInfoBuilder_.addMessage(value); + } + return this; + } + public Builder addDataInfo( + int index, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo value) { + if (dataInfoBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureDataInfoIsMutable(); + dataInfo_.add(index, value); + onChanged(); + } else { + dataInfoBuilder_.addMessage(index, value); + } + return this; + } + public Builder addDataInfo( + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder builderForValue) { + if (dataInfoBuilder_ == null) { + ensureDataInfoIsMutable(); + dataInfo_.add(builderForValue.build()); + onChanged(); + } else { + dataInfoBuilder_.addMessage(builderForValue.build()); + } + return this; + } + public Builder addDataInfo( + int index, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder builderForValue) { + if (dataInfoBuilder_ == null) { + ensureDataInfoIsMutable(); + dataInfo_.add(index, builderForValue.build()); + onChanged(); + } else { + dataInfoBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + public Builder addAllDataInfo( + java.lang.Iterable values) { + if (dataInfoBuilder_ == null) { + ensureDataInfoIsMutable(); + super.addAll(values, dataInfo_); + onChanged(); + } else { + dataInfoBuilder_.addAllMessages(values); + } + return this; + } + public Builder clearDataInfo() { + if (dataInfoBuilder_ == null) { + dataInfo_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + } else { + dataInfoBuilder_.clear(); + } + return this; + } + public Builder removeDataInfo(int index) { + if (dataInfoBuilder_ == null) { + ensureDataInfoIsMutable(); + dataInfo_.remove(index); + onChanged(); + } else { + dataInfoBuilder_.remove(index); + } + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder getDataInfoBuilder( + int index) { + return getDataInfoFieldBuilder().getBuilder(index); + } + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder( + int index) { + if (dataInfoBuilder_ == null) { + return dataInfo_.get(index); } else { + return dataInfoBuilder_.getMessageOrBuilder(index); + } + } + public java.util.List + getDataInfoOrBuilderList() { + if (dataInfoBuilder_ != null) { + return dataInfoBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(dataInfo_); + } + } + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder addDataInfoBuilder() { + return getDataInfoFieldBuilder().addBuilder( + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance()); + } + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder addDataInfoBuilder( + int index) { + return getDataInfoFieldBuilder().addBuilder( + index, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance()); + } + public java.util.List + getDataInfoBuilderList() { + return getDataInfoFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder> + getDataInfoFieldBuilder() { + if (dataInfoBuilder_ == null) { + dataInfoBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder>( + dataInfo_, + ((bitField0_ & 0x00000002) == 0x00000002), + getParentForChildren(), + isClean()); + dataInfo_ = null; + } + return dataInfoBuilder_; + } + + // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.Result.Context) + } + + static { + defaultInstance = new Context(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.Result.Context) + } + + public interface InstanceOrBuilder + extends com.google.protobuf.MessageOrBuilder { + + // optional .eu.dnetlib.data.proto.StringField license = 6; + boolean hasLicense(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getLicense(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getLicenseOrBuilder(); + + // optional .eu.dnetlib.data.proto.Qualifier accessright = 3; + boolean hasAccessright(); + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getAccessright(); + eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getAccessrightOrBuilder(); + + // optional .eu.dnetlib.data.proto.Qualifier instancetype = 4; + boolean hasInstancetype(); + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getInstancetype(); + eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getInstancetypeOrBuilder(); + + // optional .eu.dnetlib.data.proto.KeyValue hostedby = 5; + boolean hasHostedby(); + eu.dnetlib.data.proto.FieldTypeProtos.KeyValue getHostedby(); + eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder getHostedbyOrBuilder(); + + // repeated string url = 9; + java.util.List getUrlList(); + int getUrlCount(); + String getUrl(int index); + + // optional string distributionlocation = 12; + boolean hasDistributionlocation(); + String getDistributionlocation(); + + // optional .eu.dnetlib.data.proto.KeyValue collectedfrom = 10; + boolean hasCollectedfrom(); + eu.dnetlib.data.proto.FieldTypeProtos.KeyValue getCollectedfrom(); + eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder getCollectedfromOrBuilder(); + + // optional .eu.dnetlib.data.proto.StringField dateofacceptance = 11; + boolean hasDateofacceptance(); + eu.dnetlib.data.proto.FieldTypeProtos.StringField getDateofacceptance(); + eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDateofacceptanceOrBuilder(); + } + public static final class Instance extends + com.google.protobuf.GeneratedMessage + implements InstanceOrBuilder { + // Use Instance.newBuilder() to construct. + private Instance(Builder builder) { + super(builder); + } + private Instance(boolean noInit) {} + + private static final Instance defaultInstance; + public static Instance getDefaultInstance() { + return defaultInstance; + } + + public Instance getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_Instance_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_Instance_fieldAccessorTable; + } + + private int bitField0_; + // optional .eu.dnetlib.data.proto.StringField license = 6; + public static final int LICENSE_FIELD_NUMBER = 6; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField license_; + public boolean hasLicense() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getLicense() { + return license_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getLicenseOrBuilder() { + return license_; + } + + // optional .eu.dnetlib.data.proto.Qualifier accessright = 3; + public static final int ACCESSRIGHT_FIELD_NUMBER = 3; + private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier accessright_; + public boolean hasAccessright() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getAccessright() { + return accessright_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getAccessrightOrBuilder() { + return accessright_; + } + + // optional .eu.dnetlib.data.proto.Qualifier instancetype = 4; + public static final int INSTANCETYPE_FIELD_NUMBER = 4; + private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier instancetype_; + public boolean hasInstancetype() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getInstancetype() { + return instancetype_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getInstancetypeOrBuilder() { + return instancetype_; + } + + // optional .eu.dnetlib.data.proto.KeyValue hostedby = 5; + public static final int HOSTEDBY_FIELD_NUMBER = 5; + private eu.dnetlib.data.proto.FieldTypeProtos.KeyValue hostedby_; + public boolean hasHostedby() { + return ((bitField0_ & 0x00000008) == 0x00000008); + } + public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue getHostedby() { + return hostedby_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder getHostedbyOrBuilder() { + return hostedby_; + } + + // repeated string url = 9; + public static final int URL_FIELD_NUMBER = 9; + private com.google.protobuf.LazyStringList url_; + public java.util.List + getUrlList() { + return url_; + } + public int getUrlCount() { + return url_.size(); + } + public String getUrl(int index) { + return url_.get(index); + } + + // optional string distributionlocation = 12; + public static final int DISTRIBUTIONLOCATION_FIELD_NUMBER = 12; + private java.lang.Object distributionlocation_; + public boolean hasDistributionlocation() { + return ((bitField0_ & 0x00000010) == 0x00000010); + } + public String getDistributionlocation() { + java.lang.Object ref = distributionlocation_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + distributionlocation_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getDistributionlocationBytes() { + java.lang.Object ref = distributionlocation_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + distributionlocation_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // optional .eu.dnetlib.data.proto.KeyValue collectedfrom = 10; + public static final int COLLECTEDFROM_FIELD_NUMBER = 10; + private eu.dnetlib.data.proto.FieldTypeProtos.KeyValue collectedfrom_; + public boolean hasCollectedfrom() { + return ((bitField0_ & 0x00000020) == 0x00000020); + } + public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue getCollectedfrom() { + return collectedfrom_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder getCollectedfromOrBuilder() { + return collectedfrom_; + } + + // optional .eu.dnetlib.data.proto.StringField dateofacceptance = 11; + public static final int DATEOFACCEPTANCE_FIELD_NUMBER = 11; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField dateofacceptance_; + public boolean hasDateofacceptance() { + return ((bitField0_ & 0x00000040) == 0x00000040); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getDateofacceptance() { + return dateofacceptance_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDateofacceptanceOrBuilder() { + return dateofacceptance_; + } + + private void initFields() { + license_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + accessright_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + instancetype_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + hostedby_ = eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.getDefaultInstance(); + url_ = com.google.protobuf.LazyStringArrayList.EMPTY; + distributionlocation_ = ""; + collectedfrom_ = eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.getDefaultInstance(); + dateofacceptance_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + if (hasLicense()) { + if (!getLicense().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasAccessright()) { + if (!getAccessright().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasInstancetype()) { + if (!getInstancetype().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasHostedby()) { + if (!getHostedby().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasCollectedfrom()) { + if (!getCollectedfrom().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasDateofacceptance()) { + if (!getDateofacceptance().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000002) == 0x00000002)) { + output.writeMessage(3, accessright_); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + output.writeMessage(4, instancetype_); + } + if (((bitField0_ & 0x00000008) == 0x00000008)) { + output.writeMessage(5, hostedby_); + } + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeMessage(6, license_); + } + for (int i = 0; i < url_.size(); i++) { + output.writeBytes(9, url_.getByteString(i)); + } + if (((bitField0_ & 0x00000020) == 0x00000020)) { + output.writeMessage(10, collectedfrom_); + } + if (((bitField0_ & 0x00000040) == 0x00000040)) { + output.writeMessage(11, dateofacceptance_); + } + if (((bitField0_ & 0x00000010) == 0x00000010)) { + output.writeBytes(12, getDistributionlocationBytes()); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000002) == 0x00000002)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(3, accessright_); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(4, instancetype_); + } + if (((bitField0_ & 0x00000008) == 0x00000008)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(5, hostedby_); + } + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(6, license_); + } + { + int dataSize = 0; + for (int i = 0; i < url_.size(); i++) { + dataSize += com.google.protobuf.CodedOutputStream + .computeBytesSizeNoTag(url_.getByteString(i)); + } + size += dataSize; + size += 1 * getUrlList().size(); + } + if (((bitField0_ & 0x00000020) == 0x00000020)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(10, collectedfrom_); + } + if (((bitField0_ & 0x00000040) == 0x00000040)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(11, dateofacceptance_); + } + if (((bitField0_ & 0x00000010) == 0x00000010)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(12, getDistributionlocationBytes()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static eu.dnetlib.data.proto.ResultProtos.Result.Instance parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProtos.Result.Instance parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProtos.Result.Instance parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProtos.Result.Instance parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProtos.Result.Instance parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProtos.Result.Instance parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProtos.Result.Instance parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.ResultProtos.Result.Instance parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.ResultProtos.Result.Instance parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProtos.Result.Instance parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(eu.dnetlib.data.proto.ResultProtos.Result.Instance prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder + implements eu.dnetlib.data.proto.ResultProtos.Result.InstanceOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_Instance_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_Instance_fieldAccessorTable; + } + + // Construct using eu.dnetlib.data.proto.ResultProtos.Result.Instance.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getLicenseFieldBuilder(); + getAccessrightFieldBuilder(); + getInstancetypeFieldBuilder(); + getHostedbyFieldBuilder(); + getCollectedfromFieldBuilder(); + getDateofacceptanceFieldBuilder(); + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + if (licenseBuilder_ == null) { + license_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + licenseBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + if (accessrightBuilder_ == null) { + accessright_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + } else { + accessrightBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000002); + if (instancetypeBuilder_ == null) { + instancetype_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + } else { + instancetypeBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000004); + if (hostedbyBuilder_ == null) { + hostedby_ = eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.getDefaultInstance(); + } else { + hostedbyBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000008); + url_ = com.google.protobuf.LazyStringArrayList.EMPTY; + bitField0_ = (bitField0_ & ~0x00000010); + distributionlocation_ = ""; + bitField0_ = (bitField0_ & ~0x00000020); + if (collectedfromBuilder_ == null) { + collectedfrom_ = eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.getDefaultInstance(); + } else { + collectedfromBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000040); + if (dateofacceptanceBuilder_ == null) { + dateofacceptance_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + } else { + dateofacceptanceBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000080); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return eu.dnetlib.data.proto.ResultProtos.Result.Instance.getDescriptor(); + } + + public eu.dnetlib.data.proto.ResultProtos.Result.Instance getDefaultInstanceForType() { + return eu.dnetlib.data.proto.ResultProtos.Result.Instance.getDefaultInstance(); + } + + public eu.dnetlib.data.proto.ResultProtos.Result.Instance build() { + eu.dnetlib.data.proto.ResultProtos.Result.Instance result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + private eu.dnetlib.data.proto.ResultProtos.Result.Instance buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + eu.dnetlib.data.proto.ResultProtos.Result.Instance result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return result; + } + + public eu.dnetlib.data.proto.ResultProtos.Result.Instance buildPartial() { + eu.dnetlib.data.proto.ResultProtos.Result.Instance result = new eu.dnetlib.data.proto.ResultProtos.Result.Instance(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + if (licenseBuilder_ == null) { + result.license_ = license_; + } else { + result.license_ = licenseBuilder_.build(); + } + if (((from_bitField0_ & 0x00000002) == 0x00000002)) { + to_bitField0_ |= 0x00000002; + } + if (accessrightBuilder_ == null) { + result.accessright_ = accessright_; + } else { + result.accessright_ = accessrightBuilder_.build(); + } + if (((from_bitField0_ & 0x00000004) == 0x00000004)) { + to_bitField0_ |= 0x00000004; + } + if (instancetypeBuilder_ == null) { + result.instancetype_ = instancetype_; + } else { + result.instancetype_ = instancetypeBuilder_.build(); + } + if (((from_bitField0_ & 0x00000008) == 0x00000008)) { + to_bitField0_ |= 0x00000008; + } + if (hostedbyBuilder_ == null) { + result.hostedby_ = hostedby_; + } else { + result.hostedby_ = hostedbyBuilder_.build(); + } + if (((bitField0_ & 0x00000010) == 0x00000010)) { + url_ = new com.google.protobuf.UnmodifiableLazyStringList( + url_); + bitField0_ = (bitField0_ & ~0x00000010); + } + result.url_ = url_; + if (((from_bitField0_ & 0x00000020) == 0x00000020)) { + to_bitField0_ |= 0x00000010; + } + result.distributionlocation_ = distributionlocation_; + if (((from_bitField0_ & 0x00000040) == 0x00000040)) { + to_bitField0_ |= 0x00000020; + } + if (collectedfromBuilder_ == null) { + result.collectedfrom_ = collectedfrom_; + } else { + result.collectedfrom_ = collectedfromBuilder_.build(); + } + if (((from_bitField0_ & 0x00000080) == 0x00000080)) { + to_bitField0_ |= 0x00000040; + } + if (dateofacceptanceBuilder_ == null) { + result.dateofacceptance_ = dateofacceptance_; + } else { + result.dateofacceptance_ = dateofacceptanceBuilder_.build(); + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof eu.dnetlib.data.proto.ResultProtos.Result.Instance) { + return mergeFrom((eu.dnetlib.data.proto.ResultProtos.Result.Instance)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(eu.dnetlib.data.proto.ResultProtos.Result.Instance other) { + if (other == eu.dnetlib.data.proto.ResultProtos.Result.Instance.getDefaultInstance()) return this; + if (other.hasLicense()) { + mergeLicense(other.getLicense()); + } + if (other.hasAccessright()) { + mergeAccessright(other.getAccessright()); + } + if (other.hasInstancetype()) { + mergeInstancetype(other.getInstancetype()); + } + if (other.hasHostedby()) { + mergeHostedby(other.getHostedby()); + } + if (!other.url_.isEmpty()) { + if (url_.isEmpty()) { + url_ = other.url_; + bitField0_ = (bitField0_ & ~0x00000010); + } else { + ensureUrlIsMutable(); + url_.addAll(other.url_); + } + onChanged(); + } + if (other.hasDistributionlocation()) { + setDistributionlocation(other.getDistributionlocation()); + } + if (other.hasCollectedfrom()) { + mergeCollectedfrom(other.getCollectedfrom()); + } + if (other.hasDateofacceptance()) { + mergeDateofacceptance(other.getDateofacceptance()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + if (hasLicense()) { + if (!getLicense().isInitialized()) { + + return false; + } + } + if (hasAccessright()) { + if (!getAccessright().isInitialized()) { + + return false; + } + } + if (hasInstancetype()) { + if (!getInstancetype().isInitialized()) { + + return false; + } + } + if (hasHostedby()) { + if (!getHostedby().isInitialized()) { + + return false; + } + } + if (hasCollectedfrom()) { + if (!getCollectedfrom().isInitialized()) { + + return false; + } + } + if (hasDateofacceptance()) { + if (!getDateofacceptance().isInitialized()) { + + return false; + } + } + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + } + break; + } + case 26: { + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(); + if (hasAccessright()) { + subBuilder.mergeFrom(getAccessright()); + } + input.readMessage(subBuilder, extensionRegistry); + setAccessright(subBuilder.buildPartial()); + break; + } + case 34: { + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(); + if (hasInstancetype()) { + subBuilder.mergeFrom(getInstancetype()); + } + input.readMessage(subBuilder, extensionRegistry); + setInstancetype(subBuilder.buildPartial()); + break; + } + case 42: { + eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.newBuilder(); + if (hasHostedby()) { + subBuilder.mergeFrom(getHostedby()); + } + input.readMessage(subBuilder, extensionRegistry); + setHostedby(subBuilder.buildPartial()); + break; + } + case 50: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasLicense()) { + subBuilder.mergeFrom(getLicense()); + } + input.readMessage(subBuilder, extensionRegistry); + setLicense(subBuilder.buildPartial()); + break; + } + case 74: { + ensureUrlIsMutable(); + url_.add(input.readBytes()); + break; + } + case 82: { + eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.newBuilder(); + if (hasCollectedfrom()) { + subBuilder.mergeFrom(getCollectedfrom()); + } + input.readMessage(subBuilder, extensionRegistry); + setCollectedfrom(subBuilder.buildPartial()); + break; + } + case 90: { + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); + if (hasDateofacceptance()) { + subBuilder.mergeFrom(getDateofacceptance()); + } + input.readMessage(subBuilder, extensionRegistry); + setDateofacceptance(subBuilder.buildPartial()); + break; + } + case 98: { + bitField0_ |= 0x00000020; + distributionlocation_ = input.readBytes(); + break; + } + } + } + } + + private int bitField0_; + + // optional .eu.dnetlib.data.proto.StringField license = 6; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField license_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> licenseBuilder_; + public boolean hasLicense() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getLicense() { + if (licenseBuilder_ == null) { + return license_; + } else { + return licenseBuilder_.getMessage(); + } + } + public Builder setLicense(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (licenseBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + license_ = value; + onChanged(); + } else { + licenseBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder setLicense( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (licenseBuilder_ == null) { + license_ = builderForValue.build(); + onChanged(); + } else { + licenseBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder mergeLicense(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (licenseBuilder_ == null) { + if (((bitField0_ & 0x00000001) == 0x00000001) && + license_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + license_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(license_).mergeFrom(value).buildPartial(); + } else { + license_ = value; + } + onChanged(); + } else { + licenseBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder clearLicense() { + if (licenseBuilder_ == null) { + license_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + licenseBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getLicenseBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return getLicenseFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getLicenseOrBuilder() { + if (licenseBuilder_ != null) { + return licenseBuilder_.getMessageOrBuilder(); + } else { + return license_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getLicenseFieldBuilder() { + if (licenseBuilder_ == null) { + licenseBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + license_, + getParentForChildren(), + isClean()); + license_ = null; + } + return licenseBuilder_; + } + + // optional .eu.dnetlib.data.proto.Qualifier accessright = 3; + private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier accessright_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> accessrightBuilder_; + public boolean hasAccessright() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getAccessright() { + if (accessrightBuilder_ == null) { + return accessright_; + } else { + return accessrightBuilder_.getMessage(); + } + } + public Builder setAccessright(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { + if (accessrightBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + accessright_ = value; + onChanged(); + } else { + accessrightBuilder_.setMessage(value); + } + bitField0_ |= 0x00000002; + return this; + } + public Builder setAccessright( + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder builderForValue) { + if (accessrightBuilder_ == null) { + accessright_ = builderForValue.build(); + onChanged(); + } else { + accessrightBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000002; + return this; + } + public Builder mergeAccessright(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { + if (accessrightBuilder_ == null) { + if (((bitField0_ & 0x00000002) == 0x00000002) && + accessright_ != eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance()) { + accessright_ = + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(accessright_).mergeFrom(value).buildPartial(); + } else { + accessright_ = value; + } + onChanged(); + } else { + accessrightBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000002; + return this; + } + public Builder clearAccessright() { + if (accessrightBuilder_ == null) { + accessright_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + onChanged(); + } else { + accessrightBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000002); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder getAccessrightBuilder() { + bitField0_ |= 0x00000002; + onChanged(); + return getAccessrightFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getAccessrightOrBuilder() { + if (accessrightBuilder_ != null) { + return accessrightBuilder_.getMessageOrBuilder(); + } else { + return accessright_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> + getAccessrightFieldBuilder() { + if (accessrightBuilder_ == null) { + accessrightBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder>( + accessright_, + getParentForChildren(), + isClean()); + accessright_ = null; + } + return accessrightBuilder_; + } + + // optional .eu.dnetlib.data.proto.Qualifier instancetype = 4; + private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier instancetype_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> instancetypeBuilder_; + public boolean hasInstancetype() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getInstancetype() { + if (instancetypeBuilder_ == null) { + return instancetype_; + } else { + return instancetypeBuilder_.getMessage(); + } + } + public Builder setInstancetype(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { + if (instancetypeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + instancetype_ = value; + onChanged(); + } else { + instancetypeBuilder_.setMessage(value); + } + bitField0_ |= 0x00000004; + return this; + } + public Builder setInstancetype( + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder builderForValue) { + if (instancetypeBuilder_ == null) { + instancetype_ = builderForValue.build(); + onChanged(); + } else { + instancetypeBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000004; + return this; + } + public Builder mergeInstancetype(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { + if (instancetypeBuilder_ == null) { + if (((bitField0_ & 0x00000004) == 0x00000004) && + instancetype_ != eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance()) { + instancetype_ = + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(instancetype_).mergeFrom(value).buildPartial(); + } else { + instancetype_ = value; + } + onChanged(); + } else { + instancetypeBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000004; + return this; + } + public Builder clearInstancetype() { + if (instancetypeBuilder_ == null) { + instancetype_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + onChanged(); + } else { + instancetypeBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000004); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder getInstancetypeBuilder() { + bitField0_ |= 0x00000004; + onChanged(); + return getInstancetypeFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getInstancetypeOrBuilder() { + if (instancetypeBuilder_ != null) { + return instancetypeBuilder_.getMessageOrBuilder(); + } else { + return instancetype_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> + getInstancetypeFieldBuilder() { + if (instancetypeBuilder_ == null) { + instancetypeBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder>( + instancetype_, + getParentForChildren(), + isClean()); + instancetype_ = null; + } + return instancetypeBuilder_; + } + + // optional .eu.dnetlib.data.proto.KeyValue hostedby = 5; + private eu.dnetlib.data.proto.FieldTypeProtos.KeyValue hostedby_ = eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.KeyValue, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder, eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder> hostedbyBuilder_; + public boolean hasHostedby() { + return ((bitField0_ & 0x00000008) == 0x00000008); + } + public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue getHostedby() { + if (hostedbyBuilder_ == null) { + return hostedby_; + } else { + return hostedbyBuilder_.getMessage(); + } + } + public Builder setHostedby(eu.dnetlib.data.proto.FieldTypeProtos.KeyValue value) { + if (hostedbyBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + hostedby_ = value; + onChanged(); + } else { + hostedbyBuilder_.setMessage(value); + } + bitField0_ |= 0x00000008; + return this; + } + public Builder setHostedby( + eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder builderForValue) { + if (hostedbyBuilder_ == null) { + hostedby_ = builderForValue.build(); + onChanged(); + } else { + hostedbyBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000008; + return this; + } + public Builder mergeHostedby(eu.dnetlib.data.proto.FieldTypeProtos.KeyValue value) { + if (hostedbyBuilder_ == null) { + if (((bitField0_ & 0x00000008) == 0x00000008) && + hostedby_ != eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.getDefaultInstance()) { + hostedby_ = + eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.newBuilder(hostedby_).mergeFrom(value).buildPartial(); + } else { + hostedby_ = value; + } + onChanged(); + } else { + hostedbyBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000008; + return this; + } + public Builder clearHostedby() { + if (hostedbyBuilder_ == null) { + hostedby_ = eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.getDefaultInstance(); + onChanged(); + } else { + hostedbyBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000008); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder getHostedbyBuilder() { + bitField0_ |= 0x00000008; + onChanged(); + return getHostedbyFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder getHostedbyOrBuilder() { + if (hostedbyBuilder_ != null) { + return hostedbyBuilder_.getMessageOrBuilder(); + } else { + return hostedby_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.KeyValue, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder, eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder> + getHostedbyFieldBuilder() { + if (hostedbyBuilder_ == null) { + hostedbyBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.KeyValue, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder, eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder>( + hostedby_, + getParentForChildren(), + isClean()); + hostedby_ = null; + } + return hostedbyBuilder_; + } + + // repeated string url = 9; + private com.google.protobuf.LazyStringList url_ = com.google.protobuf.LazyStringArrayList.EMPTY; + private void ensureUrlIsMutable() { + if (!((bitField0_ & 0x00000010) == 0x00000010)) { + url_ = new com.google.protobuf.LazyStringArrayList(url_); + bitField0_ |= 0x00000010; + } + } + public java.util.List + getUrlList() { + return java.util.Collections.unmodifiableList(url_); + } + public int getUrlCount() { + return url_.size(); + } + public String getUrl(int index) { + return url_.get(index); + } + public Builder setUrl( + int index, String value) { + if (value == null) { + throw new NullPointerException(); + } + ensureUrlIsMutable(); + url_.set(index, value); + onChanged(); + return this; + } + public Builder addUrl(String value) { + if (value == null) { + throw new NullPointerException(); + } + ensureUrlIsMutable(); + url_.add(value); + onChanged(); + return this; + } + public Builder addAllUrl( + java.lang.Iterable values) { + ensureUrlIsMutable(); + super.addAll(values, url_); + onChanged(); + return this; + } + public Builder clearUrl() { + url_ = com.google.protobuf.LazyStringArrayList.EMPTY; + bitField0_ = (bitField0_ & ~0x00000010); + onChanged(); + return this; + } + void addUrl(com.google.protobuf.ByteString value) { + ensureUrlIsMutable(); + url_.add(value); + onChanged(); + } + + // optional string distributionlocation = 12; + private java.lang.Object distributionlocation_ = ""; + public boolean hasDistributionlocation() { + return ((bitField0_ & 0x00000020) == 0x00000020); + } + public String getDistributionlocation() { + java.lang.Object ref = distributionlocation_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + distributionlocation_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setDistributionlocation(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000020; + distributionlocation_ = value; + onChanged(); + return this; + } + public Builder clearDistributionlocation() { + bitField0_ = (bitField0_ & ~0x00000020); + distributionlocation_ = getDefaultInstance().getDistributionlocation(); + onChanged(); + return this; + } + void setDistributionlocation(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000020; + distributionlocation_ = value; + onChanged(); + } + + // optional .eu.dnetlib.data.proto.KeyValue collectedfrom = 10; + private eu.dnetlib.data.proto.FieldTypeProtos.KeyValue collectedfrom_ = eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.KeyValue, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder, eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder> collectedfromBuilder_; + public boolean hasCollectedfrom() { + return ((bitField0_ & 0x00000040) == 0x00000040); + } + public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue getCollectedfrom() { + if (collectedfromBuilder_ == null) { + return collectedfrom_; + } else { + return collectedfromBuilder_.getMessage(); + } + } + public Builder setCollectedfrom(eu.dnetlib.data.proto.FieldTypeProtos.KeyValue value) { + if (collectedfromBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + collectedfrom_ = value; + onChanged(); + } else { + collectedfromBuilder_.setMessage(value); + } + bitField0_ |= 0x00000040; + return this; + } + public Builder setCollectedfrom( + eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder builderForValue) { + if (collectedfromBuilder_ == null) { + collectedfrom_ = builderForValue.build(); + onChanged(); + } else { + collectedfromBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000040; + return this; + } + public Builder mergeCollectedfrom(eu.dnetlib.data.proto.FieldTypeProtos.KeyValue value) { + if (collectedfromBuilder_ == null) { + if (((bitField0_ & 0x00000040) == 0x00000040) && + collectedfrom_ != eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.getDefaultInstance()) { + collectedfrom_ = + eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.newBuilder(collectedfrom_).mergeFrom(value).buildPartial(); + } else { + collectedfrom_ = value; + } + onChanged(); + } else { + collectedfromBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000040; + return this; + } + public Builder clearCollectedfrom() { + if (collectedfromBuilder_ == null) { + collectedfrom_ = eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.getDefaultInstance(); + onChanged(); + } else { + collectedfromBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000040); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder getCollectedfromBuilder() { + bitField0_ |= 0x00000040; + onChanged(); + return getCollectedfromFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder getCollectedfromOrBuilder() { + if (collectedfromBuilder_ != null) { + return collectedfromBuilder_.getMessageOrBuilder(); + } else { + return collectedfrom_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.KeyValue, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder, eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder> + getCollectedfromFieldBuilder() { + if (collectedfromBuilder_ == null) { + collectedfromBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.KeyValue, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder, eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder>( + collectedfrom_, + getParentForChildren(), + isClean()); + collectedfrom_ = null; + } + return collectedfromBuilder_; + } + + // optional .eu.dnetlib.data.proto.StringField dateofacceptance = 11; + private eu.dnetlib.data.proto.FieldTypeProtos.StringField dateofacceptance_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> dateofacceptanceBuilder_; + public boolean hasDateofacceptance() { + return ((bitField0_ & 0x00000080) == 0x00000080); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField getDateofacceptance() { + if (dateofacceptanceBuilder_ == null) { + return dateofacceptance_; + } else { + return dateofacceptanceBuilder_.getMessage(); + } + } + public Builder setDateofacceptance(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (dateofacceptanceBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + dateofacceptance_ = value; + onChanged(); + } else { + dateofacceptanceBuilder_.setMessage(value); + } + bitField0_ |= 0x00000080; + return this; + } + public Builder setDateofacceptance( + eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { + if (dateofacceptanceBuilder_ == null) { + dateofacceptance_ = builderForValue.build(); + onChanged(); + } else { + dateofacceptanceBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000080; + return this; + } + public Builder mergeDateofacceptance(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { + if (dateofacceptanceBuilder_ == null) { + if (((bitField0_ & 0x00000080) == 0x00000080) && + dateofacceptance_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { + dateofacceptance_ = + eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(dateofacceptance_).mergeFrom(value).buildPartial(); + } else { + dateofacceptance_ = value; + } + onChanged(); + } else { + dateofacceptanceBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000080; + return this; + } + public Builder clearDateofacceptance() { + if (dateofacceptanceBuilder_ == null) { + dateofacceptance_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); + onChanged(); + } else { + dateofacceptanceBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000080); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getDateofacceptanceBuilder() { + bitField0_ |= 0x00000080; + onChanged(); + return getDateofacceptanceFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDateofacceptanceOrBuilder() { + if (dateofacceptanceBuilder_ != null) { + return dateofacceptanceBuilder_.getMessageOrBuilder(); + } else { + return dateofacceptance_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> + getDateofacceptanceFieldBuilder() { + if (dateofacceptanceBuilder_ == null) { + dateofacceptanceBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( + dateofacceptance_, + getParentForChildren(), + isClean()); + dateofacceptance_ = null; + } + return dateofacceptanceBuilder_; + } + + // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.Result.Instance) + } + + static { + defaultInstance = new Instance(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.Result.Instance) + } + + public interface ExternalReferenceOrBuilder + extends com.google.protobuf.MessageOrBuilder { + + // optional string sitename = 1; + boolean hasSitename(); + String getSitename(); + + // optional string label = 2; + boolean hasLabel(); + String getLabel(); + + // optional string url = 3; + boolean hasUrl(); + String getUrl(); + + // optional string description = 4; + boolean hasDescription(); + String getDescription(); + + // optional .eu.dnetlib.data.proto.Qualifier qualifier = 5; + boolean hasQualifier(); + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getQualifier(); + eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getQualifierOrBuilder(); + + // optional string refidentifier = 6; + boolean hasRefidentifier(); + String getRefidentifier(); + + // optional string query = 7; + boolean hasQuery(); + String getQuery(); + + // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 8; + boolean hasDataInfo(); + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo(); + eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder(); + } + public static final class ExternalReference extends + com.google.protobuf.GeneratedMessage + implements ExternalReferenceOrBuilder { + // Use ExternalReference.newBuilder() to construct. + private ExternalReference(Builder builder) { + super(builder); + } + private ExternalReference(boolean noInit) {} + + private static final ExternalReference defaultInstance; + public static ExternalReference getDefaultInstance() { + return defaultInstance; + } + + public ExternalReference getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_ExternalReference_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_ExternalReference_fieldAccessorTable; + } + + private int bitField0_; + // optional string sitename = 1; + public static final int SITENAME_FIELD_NUMBER = 1; + private java.lang.Object sitename_; + public boolean hasSitename() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public String getSitename() { + java.lang.Object ref = sitename_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + sitename_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getSitenameBytes() { + java.lang.Object ref = sitename_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + sitename_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // optional string label = 2; + public static final int LABEL_FIELD_NUMBER = 2; + private java.lang.Object label_; + public boolean hasLabel() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public String getLabel() { + java.lang.Object ref = label_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + label_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getLabelBytes() { + java.lang.Object ref = label_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + label_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // optional string url = 3; + public static final int URL_FIELD_NUMBER = 3; + private java.lang.Object url_; + public boolean hasUrl() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + public String getUrl() { + java.lang.Object ref = url_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + url_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getUrlBytes() { + java.lang.Object ref = url_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + url_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // optional string description = 4; + public static final int DESCRIPTION_FIELD_NUMBER = 4; + private java.lang.Object description_; + public boolean hasDescription() { + return ((bitField0_ & 0x00000008) == 0x00000008); + } + public String getDescription() { + java.lang.Object ref = description_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + description_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getDescriptionBytes() { + java.lang.Object ref = description_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + description_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // optional .eu.dnetlib.data.proto.Qualifier qualifier = 5; + public static final int QUALIFIER_FIELD_NUMBER = 5; + private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier qualifier_; + public boolean hasQualifier() { + return ((bitField0_ & 0x00000010) == 0x00000010); + } + public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getQualifier() { + return qualifier_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getQualifierOrBuilder() { + return qualifier_; + } + + // optional string refidentifier = 6; + public static final int REFIDENTIFIER_FIELD_NUMBER = 6; + private java.lang.Object refidentifier_; + public boolean hasRefidentifier() { + return ((bitField0_ & 0x00000020) == 0x00000020); + } + public String getRefidentifier() { + java.lang.Object ref = refidentifier_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + refidentifier_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getRefidentifierBytes() { + java.lang.Object ref = refidentifier_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + refidentifier_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // optional string query = 7; + public static final int QUERY_FIELD_NUMBER = 7; + private java.lang.Object query_; + public boolean hasQuery() { + return ((bitField0_ & 0x00000040) == 0x00000040); + } + public String getQuery() { + java.lang.Object ref = query_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + query_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getQueryBytes() { + java.lang.Object ref = query_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + query_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 8; + public static final int DATAINFO_FIELD_NUMBER = 8; + private eu.dnetlib.data.proto.FieldTypeProtos.DataInfo dataInfo_; + public boolean hasDataInfo() { + return ((bitField0_ & 0x00000080) == 0x00000080); + } + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo() { + return dataInfo_; + } + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder() { + return dataInfo_; + } + + private void initFields() { + sitename_ = ""; + label_ = ""; + url_ = ""; + description_ = ""; + qualifier_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + refidentifier_ = ""; + query_ = ""; + dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + if (hasQualifier()) { + if (!getQualifier().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasDataInfo()) { + if (!getDataInfo().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeBytes(1, getSitenameBytes()); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + output.writeBytes(2, getLabelBytes()); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + output.writeBytes(3, getUrlBytes()); + } + if (((bitField0_ & 0x00000008) == 0x00000008)) { + output.writeBytes(4, getDescriptionBytes()); + } + if (((bitField0_ & 0x00000010) == 0x00000010)) { + output.writeMessage(5, qualifier_); + } + if (((bitField0_ & 0x00000020) == 0x00000020)) { + output.writeBytes(6, getRefidentifierBytes()); + } + if (((bitField0_ & 0x00000040) == 0x00000040)) { + output.writeBytes(7, getQueryBytes()); + } + if (((bitField0_ & 0x00000080) == 0x00000080)) { + output.writeMessage(8, dataInfo_); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(1, getSitenameBytes()); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(2, getLabelBytes()); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(3, getUrlBytes()); + } + if (((bitField0_ & 0x00000008) == 0x00000008)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(4, getDescriptionBytes()); + } + if (((bitField0_ & 0x00000010) == 0x00000010)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(5, qualifier_); + } + if (((bitField0_ & 0x00000020) == 0x00000020)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(6, getRefidentifierBytes()); + } + if (((bitField0_ & 0x00000040) == 0x00000040)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(7, getQueryBytes()); + } + if (((bitField0_ & 0x00000080) == 0x00000080)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(8, dataInfo_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder + implements eu.dnetlib.data.proto.ResultProtos.Result.ExternalReferenceOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_ExternalReference_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_ExternalReference_fieldAccessorTable; + } + + // Construct using eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getQualifierFieldBuilder(); + getDataInfoFieldBuilder(); + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + sitename_ = ""; + bitField0_ = (bitField0_ & ~0x00000001); + label_ = ""; + bitField0_ = (bitField0_ & ~0x00000002); + url_ = ""; + bitField0_ = (bitField0_ & ~0x00000004); + description_ = ""; + bitField0_ = (bitField0_ & ~0x00000008); + if (qualifierBuilder_ == null) { + qualifier_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + } else { + qualifierBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000010); + refidentifier_ = ""; + bitField0_ = (bitField0_ & ~0x00000020); + query_ = ""; + bitField0_ = (bitField0_ & ~0x00000040); + if (dataInfoBuilder_ == null) { + dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); + } else { + dataInfoBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000080); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference.getDescriptor(); + } + + public eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference getDefaultInstanceForType() { + return eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference.getDefaultInstance(); + } + + public eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference build() { + eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + private eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return result; + } + + public eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference buildPartial() { + eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference result = new eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + result.sitename_ = sitename_; + if (((from_bitField0_ & 0x00000002) == 0x00000002)) { + to_bitField0_ |= 0x00000002; + } + result.label_ = label_; + if (((from_bitField0_ & 0x00000004) == 0x00000004)) { + to_bitField0_ |= 0x00000004; + } + result.url_ = url_; + if (((from_bitField0_ & 0x00000008) == 0x00000008)) { + to_bitField0_ |= 0x00000008; + } + result.description_ = description_; + if (((from_bitField0_ & 0x00000010) == 0x00000010)) { + to_bitField0_ |= 0x00000010; + } + if (qualifierBuilder_ == null) { + result.qualifier_ = qualifier_; + } else { + result.qualifier_ = qualifierBuilder_.build(); + } + if (((from_bitField0_ & 0x00000020) == 0x00000020)) { + to_bitField0_ |= 0x00000020; + } + result.refidentifier_ = refidentifier_; + if (((from_bitField0_ & 0x00000040) == 0x00000040)) { + to_bitField0_ |= 0x00000040; + } + result.query_ = query_; + if (((from_bitField0_ & 0x00000080) == 0x00000080)) { + to_bitField0_ |= 0x00000080; + } + if (dataInfoBuilder_ == null) { + result.dataInfo_ = dataInfo_; + } else { + result.dataInfo_ = dataInfoBuilder_.build(); + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference) { + return mergeFrom((eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference other) { + if (other == eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference.getDefaultInstance()) return this; + if (other.hasSitename()) { + setSitename(other.getSitename()); + } + if (other.hasLabel()) { + setLabel(other.getLabel()); + } + if (other.hasUrl()) { + setUrl(other.getUrl()); + } + if (other.hasDescription()) { + setDescription(other.getDescription()); + } + if (other.hasQualifier()) { + mergeQualifier(other.getQualifier()); + } + if (other.hasRefidentifier()) { + setRefidentifier(other.getRefidentifier()); + } + if (other.hasQuery()) { + setQuery(other.getQuery()); + } + if (other.hasDataInfo()) { + mergeDataInfo(other.getDataInfo()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + if (hasQualifier()) { + if (!getQualifier().isInitialized()) { + + return false; + } + } + if (hasDataInfo()) { + if (!getDataInfo().isInitialized()) { + + return false; + } + } + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + } + break; + } + case 10: { + bitField0_ |= 0x00000001; + sitename_ = input.readBytes(); + break; + } + case 18: { + bitField0_ |= 0x00000002; + label_ = input.readBytes(); + break; + } + case 26: { + bitField0_ |= 0x00000004; + url_ = input.readBytes(); + break; + } + case 34: { + bitField0_ |= 0x00000008; + description_ = input.readBytes(); + break; + } + case 42: { + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(); + if (hasQualifier()) { + subBuilder.mergeFrom(getQualifier()); + } + input.readMessage(subBuilder, extensionRegistry); + setQualifier(subBuilder.buildPartial()); + break; + } + case 50: { + bitField0_ |= 0x00000020; + refidentifier_ = input.readBytes(); + break; + } + case 58: { + bitField0_ |= 0x00000040; + query_ = input.readBytes(); + break; + } + case 66: { + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.newBuilder(); + if (hasDataInfo()) { + subBuilder.mergeFrom(getDataInfo()); + } + input.readMessage(subBuilder, extensionRegistry); + setDataInfo(subBuilder.buildPartial()); + break; + } + } + } + } + + private int bitField0_; + + // optional string sitename = 1; + private java.lang.Object sitename_ = ""; + public boolean hasSitename() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public String getSitename() { + java.lang.Object ref = sitename_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + sitename_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setSitename(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + sitename_ = value; + onChanged(); + return this; + } + public Builder clearSitename() { + bitField0_ = (bitField0_ & ~0x00000001); + sitename_ = getDefaultInstance().getSitename(); + onChanged(); + return this; + } + void setSitename(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000001; + sitename_ = value; + onChanged(); + } + + // optional string label = 2; + private java.lang.Object label_ = ""; + public boolean hasLabel() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public String getLabel() { + java.lang.Object ref = label_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + label_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setLabel(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + label_ = value; + onChanged(); + return this; + } + public Builder clearLabel() { + bitField0_ = (bitField0_ & ~0x00000002); + label_ = getDefaultInstance().getLabel(); + onChanged(); + return this; + } + void setLabel(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000002; + label_ = value; + onChanged(); + } + + // optional string url = 3; + private java.lang.Object url_ = ""; + public boolean hasUrl() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + public String getUrl() { + java.lang.Object ref = url_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + url_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setUrl(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000004; + url_ = value; + onChanged(); + return this; + } + public Builder clearUrl() { + bitField0_ = (bitField0_ & ~0x00000004); + url_ = getDefaultInstance().getUrl(); + onChanged(); + return this; + } + void setUrl(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000004; + url_ = value; + onChanged(); + } + + // optional string description = 4; + private java.lang.Object description_ = ""; + public boolean hasDescription() { + return ((bitField0_ & 0x00000008) == 0x00000008); + } + public String getDescription() { + java.lang.Object ref = description_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + description_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setDescription(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000008; + description_ = value; + onChanged(); + return this; + } + public Builder clearDescription() { + bitField0_ = (bitField0_ & ~0x00000008); + description_ = getDefaultInstance().getDescription(); + onChanged(); + return this; + } + void setDescription(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000008; + description_ = value; + onChanged(); + } + + // optional .eu.dnetlib.data.proto.Qualifier qualifier = 5; + private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier qualifier_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> qualifierBuilder_; + public boolean hasQualifier() { + return ((bitField0_ & 0x00000010) == 0x00000010); + } + public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getQualifier() { + if (qualifierBuilder_ == null) { + return qualifier_; + } else { + return qualifierBuilder_.getMessage(); + } + } + public Builder setQualifier(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { + if (qualifierBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + qualifier_ = value; + onChanged(); + } else { + qualifierBuilder_.setMessage(value); + } + bitField0_ |= 0x00000010; + return this; + } + public Builder setQualifier( + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder builderForValue) { + if (qualifierBuilder_ == null) { + qualifier_ = builderForValue.build(); + onChanged(); + } else { + qualifierBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000010; + return this; + } + public Builder mergeQualifier(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { + if (qualifierBuilder_ == null) { + if (((bitField0_ & 0x00000010) == 0x00000010) && + qualifier_ != eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance()) { + qualifier_ = + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(qualifier_).mergeFrom(value).buildPartial(); + } else { + qualifier_ = value; + } + onChanged(); + } else { + qualifierBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000010; + return this; + } + public Builder clearQualifier() { + if (qualifierBuilder_ == null) { + qualifier_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); + onChanged(); + } else { + qualifierBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000010); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder getQualifierBuilder() { + bitField0_ |= 0x00000010; + onChanged(); + return getQualifierFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getQualifierOrBuilder() { + if (qualifierBuilder_ != null) { + return qualifierBuilder_.getMessageOrBuilder(); + } else { + return qualifier_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> + getQualifierFieldBuilder() { + if (qualifierBuilder_ == null) { + qualifierBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder>( + qualifier_, + getParentForChildren(), + isClean()); + qualifier_ = null; + } + return qualifierBuilder_; + } + + // optional string refidentifier = 6; + private java.lang.Object refidentifier_ = ""; + public boolean hasRefidentifier() { + return ((bitField0_ & 0x00000020) == 0x00000020); + } + public String getRefidentifier() { + java.lang.Object ref = refidentifier_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + refidentifier_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setRefidentifier(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000020; + refidentifier_ = value; + onChanged(); + return this; + } + public Builder clearRefidentifier() { + bitField0_ = (bitField0_ & ~0x00000020); + refidentifier_ = getDefaultInstance().getRefidentifier(); + onChanged(); + return this; + } + void setRefidentifier(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000020; + refidentifier_ = value; + onChanged(); + } + + // optional string query = 7; + private java.lang.Object query_ = ""; + public boolean hasQuery() { + return ((bitField0_ & 0x00000040) == 0x00000040); + } + public String getQuery() { + java.lang.Object ref = query_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + query_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setQuery(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000040; + query_ = value; + onChanged(); + return this; + } + public Builder clearQuery() { + bitField0_ = (bitField0_ & ~0x00000040); + query_ = getDefaultInstance().getQuery(); + onChanged(); + return this; + } + void setQuery(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000040; + query_ = value; + onChanged(); + } + + // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 8; + private eu.dnetlib.data.proto.FieldTypeProtos.DataInfo dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder> dataInfoBuilder_; + public boolean hasDataInfo() { + return ((bitField0_ & 0x00000080) == 0x00000080); + } + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo() { + if (dataInfoBuilder_ == null) { + return dataInfo_; + } else { + return dataInfoBuilder_.getMessage(); + } + } + public Builder setDataInfo(eu.dnetlib.data.proto.FieldTypeProtos.DataInfo value) { + if (dataInfoBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + dataInfo_ = value; + onChanged(); + } else { + dataInfoBuilder_.setMessage(value); + } + bitField0_ |= 0x00000080; + return this; + } + public Builder setDataInfo( + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder builderForValue) { + if (dataInfoBuilder_ == null) { + dataInfo_ = builderForValue.build(); + onChanged(); + } else { + dataInfoBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000080; + return this; + } + public Builder mergeDataInfo(eu.dnetlib.data.proto.FieldTypeProtos.DataInfo value) { + if (dataInfoBuilder_ == null) { + if (((bitField0_ & 0x00000080) == 0x00000080) && + dataInfo_ != eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance()) { + dataInfo_ = + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.newBuilder(dataInfo_).mergeFrom(value).buildPartial(); + } else { + dataInfo_ = value; + } + onChanged(); + } else { + dataInfoBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000080; + return this; + } + public Builder clearDataInfo() { + if (dataInfoBuilder_ == null) { + dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); + onChanged(); + } else { + dataInfoBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000080); + return this; + } + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder getDataInfoBuilder() { + bitField0_ |= 0x00000080; + onChanged(); + return getDataInfoFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder() { + if (dataInfoBuilder_ != null) { + return dataInfoBuilder_.getMessageOrBuilder(); + } else { + return dataInfo_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder> + getDataInfoFieldBuilder() { + if (dataInfoBuilder_ == null) { + dataInfoBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder>( + dataInfo_, + getParentForChildren(), + isClean()); + dataInfo_ = null; + } + return dataInfoBuilder_; + } + + // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.Result.ExternalReference) + } + + static { + defaultInstance = new ExternalReference(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.Result.ExternalReference) + } + + public interface GeoLocationOrBuilder + extends com.google.protobuf.MessageOrBuilder { + + // optional string point = 1; + boolean hasPoint(); + String getPoint(); + + // optional string box = 2; + boolean hasBox(); + String getBox(); + + // optional string place = 3; + boolean hasPlace(); + String getPlace(); + } + public static final class GeoLocation extends + com.google.protobuf.GeneratedMessage + implements GeoLocationOrBuilder { + // Use GeoLocation.newBuilder() to construct. + private GeoLocation(Builder builder) { + super(builder); + } + private GeoLocation(boolean noInit) {} + + private static final GeoLocation defaultInstance; + public static GeoLocation getDefaultInstance() { + return defaultInstance; + } + + public GeoLocation getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_GeoLocation_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_GeoLocation_fieldAccessorTable; + } + + private int bitField0_; + // optional string point = 1; + public static final int POINT_FIELD_NUMBER = 1; + private java.lang.Object point_; + public boolean hasPoint() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public String getPoint() { + java.lang.Object ref = point_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + point_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getPointBytes() { + java.lang.Object ref = point_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + point_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // optional string box = 2; + public static final int BOX_FIELD_NUMBER = 2; + private java.lang.Object box_; + public boolean hasBox() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public String getBox() { + java.lang.Object ref = box_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + box_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getBoxBytes() { + java.lang.Object ref = box_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + box_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // optional string place = 3; + public static final int PLACE_FIELD_NUMBER = 3; + private java.lang.Object place_; + public boolean hasPlace() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + public String getPlace() { + java.lang.Object ref = place_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + place_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getPlaceBytes() { + java.lang.Object ref = place_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + place_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private void initFields() { + point_ = ""; + box_ = ""; + place_ = ""; + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeBytes(1, getPointBytes()); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + output.writeBytes(2, getBoxBytes()); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + output.writeBytes(3, getPlaceBytes()); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(1, getPointBytes()); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(2, getBoxBytes()); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(3, getPlaceBytes()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder + implements eu.dnetlib.data.proto.ResultProtos.Result.GeoLocationOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_GeoLocation_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_GeoLocation_fieldAccessorTable; + } + + // Construct using eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + point_ = ""; + bitField0_ = (bitField0_ & ~0x00000001); + box_ = ""; + bitField0_ = (bitField0_ & ~0x00000002); + place_ = ""; + bitField0_ = (bitField0_ & ~0x00000004); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation.getDescriptor(); + } + + public eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation getDefaultInstanceForType() { + return eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation.getDefaultInstance(); + } + + public eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation build() { + eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + private eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return result; + } + + public eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation buildPartial() { + eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation result = new eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + result.point_ = point_; + if (((from_bitField0_ & 0x00000002) == 0x00000002)) { + to_bitField0_ |= 0x00000002; + } + result.box_ = box_; + if (((from_bitField0_ & 0x00000004) == 0x00000004)) { + to_bitField0_ |= 0x00000004; + } + result.place_ = place_; + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation) { + return mergeFrom((eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation other) { + if (other == eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation.getDefaultInstance()) return this; + if (other.hasPoint()) { + setPoint(other.getPoint()); + } + if (other.hasBox()) { + setBox(other.getBox()); + } + if (other.hasPlace()) { + setPlace(other.getPlace()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + } + break; + } + case 10: { + bitField0_ |= 0x00000001; + point_ = input.readBytes(); + break; + } + case 18: { + bitField0_ |= 0x00000002; + box_ = input.readBytes(); + break; + } + case 26: { + bitField0_ |= 0x00000004; + place_ = input.readBytes(); + break; + } + } + } + } + + private int bitField0_; + + // optional string point = 1; + private java.lang.Object point_ = ""; + public boolean hasPoint() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public String getPoint() { + java.lang.Object ref = point_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + point_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setPoint(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + point_ = value; + onChanged(); + return this; + } + public Builder clearPoint() { + bitField0_ = (bitField0_ & ~0x00000001); + point_ = getDefaultInstance().getPoint(); + onChanged(); + return this; + } + void setPoint(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000001; + point_ = value; + onChanged(); + } + + // optional string box = 2; + private java.lang.Object box_ = ""; + public boolean hasBox() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public String getBox() { + java.lang.Object ref = box_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + box_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setBox(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + box_ = value; + onChanged(); + return this; + } + public Builder clearBox() { + bitField0_ = (bitField0_ & ~0x00000002); + box_ = getDefaultInstance().getBox(); + onChanged(); + return this; + } + void setBox(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000002; + box_ = value; + onChanged(); + } + + // optional string place = 3; + private java.lang.Object place_ = ""; + public boolean hasPlace() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + public String getPlace() { + java.lang.Object ref = place_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + place_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setPlace(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000004; + place_ = value; + onChanged(); + return this; + } + public Builder clearPlace() { + bitField0_ = (bitField0_ & ~0x00000004); + place_ = getDefaultInstance().getPlace(); + onChanged(); + return this; + } + void setPlace(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000004; + place_ = value; + onChanged(); + } + + // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.Result.GeoLocation) + } + + static { + defaultInstance = new GeoLocation(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.Result.GeoLocation) + } + + private int bitField0_; + // optional .eu.dnetlib.data.proto.Result.Metadata metadata = 2; + public static final int METADATA_FIELD_NUMBER = 2; + private eu.dnetlib.data.proto.ResultProtos.Result.Metadata metadata_; + public boolean hasMetadata() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.ResultProtos.Result.Metadata getMetadata() { + return metadata_; + } + public eu.dnetlib.data.proto.ResultProtos.Result.MetadataOrBuilder getMetadataOrBuilder() { + return metadata_; + } + + // repeated .eu.dnetlib.data.proto.Result.Instance instance = 6; + public static final int INSTANCE_FIELD_NUMBER = 6; + private java.util.List instance_; + public java.util.List getInstanceList() { + return instance_; + } + public java.util.List + getInstanceOrBuilderList() { + return instance_; + } + public int getInstanceCount() { + return instance_.size(); + } + public eu.dnetlib.data.proto.ResultProtos.Result.Instance getInstance(int index) { + return instance_.get(index); + } + public eu.dnetlib.data.proto.ResultProtos.Result.InstanceOrBuilder getInstanceOrBuilder( + int index) { + return instance_.get(index); + } + + // repeated .eu.dnetlib.data.proto.Result.ExternalReference externalReference = 7; + public static final int EXTERNALREFERENCE_FIELD_NUMBER = 7; + private java.util.List externalReference_; + public java.util.List getExternalReferenceList() { + return externalReference_; + } + public java.util.List + getExternalReferenceOrBuilderList() { + return externalReference_; + } + public int getExternalReferenceCount() { + return externalReference_.size(); + } + public eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference getExternalReference(int index) { + return externalReference_.get(index); + } + public eu.dnetlib.data.proto.ResultProtos.Result.ExternalReferenceOrBuilder getExternalReferenceOrBuilder( + int index) { + return externalReference_.get(index); + } + + private void initFields() { + metadata_ = eu.dnetlib.data.proto.ResultProtos.Result.Metadata.getDefaultInstance(); + instance_ = java.util.Collections.emptyList(); + externalReference_ = java.util.Collections.emptyList(); + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + if (hasMetadata()) { + if (!getMetadata().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + for (int i = 0; i < getInstanceCount(); i++) { + if (!getInstance(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + for (int i = 0; i < getExternalReferenceCount(); i++) { + if (!getExternalReference(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeMessage(2, metadata_); + } + for (int i = 0; i < instance_.size(); i++) { + output.writeMessage(6, instance_.get(i)); + } + for (int i = 0; i < externalReference_.size(); i++) { + output.writeMessage(7, externalReference_.get(i)); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(2, metadata_); + } + for (int i = 0; i < instance_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(6, instance_.get(i)); + } + for (int i = 0; i < externalReference_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(7, externalReference_.get(i)); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static eu.dnetlib.data.proto.ResultProtos.Result parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProtos.Result parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProtos.Result parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProtos.Result parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProtos.Result parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProtos.Result parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProtos.Result parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.ResultProtos.Result parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.ResultProtos.Result parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultProtos.Result parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(eu.dnetlib.data.proto.ResultProtos.Result prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder + implements eu.dnetlib.data.proto.ResultProtos.ResultOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_fieldAccessorTable; + } + + // Construct using eu.dnetlib.data.proto.ResultProtos.Result.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getMetadataFieldBuilder(); + getInstanceFieldBuilder(); + getExternalReferenceFieldBuilder(); + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + if (metadataBuilder_ == null) { + metadata_ = eu.dnetlib.data.proto.ResultProtos.Result.Metadata.getDefaultInstance(); + } else { + metadataBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + if (instanceBuilder_ == null) { + instance_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000002); + } else { + instanceBuilder_.clear(); + } + if (externalReferenceBuilder_ == null) { + externalReference_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000004); + } else { + externalReferenceBuilder_.clear(); + } + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return eu.dnetlib.data.proto.ResultProtos.Result.getDescriptor(); + } + + public eu.dnetlib.data.proto.ResultProtos.Result getDefaultInstanceForType() { + return eu.dnetlib.data.proto.ResultProtos.Result.getDefaultInstance(); + } + + public eu.dnetlib.data.proto.ResultProtos.Result build() { + eu.dnetlib.data.proto.ResultProtos.Result result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + private eu.dnetlib.data.proto.ResultProtos.Result buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + eu.dnetlib.data.proto.ResultProtos.Result result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return result; + } + + public eu.dnetlib.data.proto.ResultProtos.Result buildPartial() { + eu.dnetlib.data.proto.ResultProtos.Result result = new eu.dnetlib.data.proto.ResultProtos.Result(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + if (metadataBuilder_ == null) { + result.metadata_ = metadata_; + } else { + result.metadata_ = metadataBuilder_.build(); + } + if (instanceBuilder_ == null) { + if (((bitField0_ & 0x00000002) == 0x00000002)) { + instance_ = java.util.Collections.unmodifiableList(instance_); + bitField0_ = (bitField0_ & ~0x00000002); + } + result.instance_ = instance_; + } else { + result.instance_ = instanceBuilder_.build(); + } + if (externalReferenceBuilder_ == null) { + if (((bitField0_ & 0x00000004) == 0x00000004)) { + externalReference_ = java.util.Collections.unmodifiableList(externalReference_); + bitField0_ = (bitField0_ & ~0x00000004); + } + result.externalReference_ = externalReference_; + } else { + result.externalReference_ = externalReferenceBuilder_.build(); + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof eu.dnetlib.data.proto.ResultProtos.Result) { + return mergeFrom((eu.dnetlib.data.proto.ResultProtos.Result)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(eu.dnetlib.data.proto.ResultProtos.Result other) { + if (other == eu.dnetlib.data.proto.ResultProtos.Result.getDefaultInstance()) return this; + if (other.hasMetadata()) { + mergeMetadata(other.getMetadata()); + } + if (instanceBuilder_ == null) { + if (!other.instance_.isEmpty()) { + if (instance_.isEmpty()) { + instance_ = other.instance_; + bitField0_ = (bitField0_ & ~0x00000002); + } else { + ensureInstanceIsMutable(); + instance_.addAll(other.instance_); + } + onChanged(); + } + } else { + if (!other.instance_.isEmpty()) { + if (instanceBuilder_.isEmpty()) { + instanceBuilder_.dispose(); + instanceBuilder_ = null; + instance_ = other.instance_; + bitField0_ = (bitField0_ & ~0x00000002); + instanceBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + getInstanceFieldBuilder() : null; + } else { + instanceBuilder_.addAllMessages(other.instance_); + } + } + } + if (externalReferenceBuilder_ == null) { + if (!other.externalReference_.isEmpty()) { + if (externalReference_.isEmpty()) { + externalReference_ = other.externalReference_; + bitField0_ = (bitField0_ & ~0x00000004); + } else { + ensureExternalReferenceIsMutable(); + externalReference_.addAll(other.externalReference_); + } + onChanged(); + } + } else { + if (!other.externalReference_.isEmpty()) { + if (externalReferenceBuilder_.isEmpty()) { + externalReferenceBuilder_.dispose(); + externalReferenceBuilder_ = null; + externalReference_ = other.externalReference_; + bitField0_ = (bitField0_ & ~0x00000004); + externalReferenceBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + getExternalReferenceFieldBuilder() : null; + } else { + externalReferenceBuilder_.addAllMessages(other.externalReference_); + } + } + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + if (hasMetadata()) { + if (!getMetadata().isInitialized()) { + + return false; + } + } + for (int i = 0; i < getInstanceCount(); i++) { + if (!getInstance(i).isInitialized()) { + + return false; + } + } + for (int i = 0; i < getExternalReferenceCount(); i++) { + if (!getExternalReference(i).isInitialized()) { + + return false; + } + } + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + } + break; + } + case 18: { + eu.dnetlib.data.proto.ResultProtos.Result.Metadata.Builder subBuilder = eu.dnetlib.data.proto.ResultProtos.Result.Metadata.newBuilder(); + if (hasMetadata()) { + subBuilder.mergeFrom(getMetadata()); + } + input.readMessage(subBuilder, extensionRegistry); + setMetadata(subBuilder.buildPartial()); + break; + } + case 50: { + eu.dnetlib.data.proto.ResultProtos.Result.Instance.Builder subBuilder = eu.dnetlib.data.proto.ResultProtos.Result.Instance.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addInstance(subBuilder.buildPartial()); + break; + } + case 58: { + eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference.Builder subBuilder = eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addExternalReference(subBuilder.buildPartial()); + break; + } + } + } + } + + private int bitField0_; + + // optional .eu.dnetlib.data.proto.Result.Metadata metadata = 2; + private eu.dnetlib.data.proto.ResultProtos.Result.Metadata metadata_ = eu.dnetlib.data.proto.ResultProtos.Result.Metadata.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ResultProtos.Result.Metadata, eu.dnetlib.data.proto.ResultProtos.Result.Metadata.Builder, eu.dnetlib.data.proto.ResultProtos.Result.MetadataOrBuilder> metadataBuilder_; + public boolean hasMetadata() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.ResultProtos.Result.Metadata getMetadata() { + if (metadataBuilder_ == null) { + return metadata_; + } else { + return metadataBuilder_.getMessage(); + } + } + public Builder setMetadata(eu.dnetlib.data.proto.ResultProtos.Result.Metadata value) { + if (metadataBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + metadata_ = value; + onChanged(); + } else { + metadataBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder setMetadata( + eu.dnetlib.data.proto.ResultProtos.Result.Metadata.Builder builderForValue) { + if (metadataBuilder_ == null) { + metadata_ = builderForValue.build(); + onChanged(); + } else { + metadataBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder mergeMetadata(eu.dnetlib.data.proto.ResultProtos.Result.Metadata value) { + if (metadataBuilder_ == null) { + if (((bitField0_ & 0x00000001) == 0x00000001) && + metadata_ != eu.dnetlib.data.proto.ResultProtos.Result.Metadata.getDefaultInstance()) { + metadata_ = + eu.dnetlib.data.proto.ResultProtos.Result.Metadata.newBuilder(metadata_).mergeFrom(value).buildPartial(); + } else { + metadata_ = value; + } + onChanged(); + } else { + metadataBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder clearMetadata() { + if (metadataBuilder_ == null) { + metadata_ = eu.dnetlib.data.proto.ResultProtos.Result.Metadata.getDefaultInstance(); + onChanged(); + } else { + metadataBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + public eu.dnetlib.data.proto.ResultProtos.Result.Metadata.Builder getMetadataBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return getMetadataFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.ResultProtos.Result.MetadataOrBuilder getMetadataOrBuilder() { + if (metadataBuilder_ != null) { + return metadataBuilder_.getMessageOrBuilder(); + } else { + return metadata_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ResultProtos.Result.Metadata, eu.dnetlib.data.proto.ResultProtos.Result.Metadata.Builder, eu.dnetlib.data.proto.ResultProtos.Result.MetadataOrBuilder> + getMetadataFieldBuilder() { + if (metadataBuilder_ == null) { + metadataBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ResultProtos.Result.Metadata, eu.dnetlib.data.proto.ResultProtos.Result.Metadata.Builder, eu.dnetlib.data.proto.ResultProtos.Result.MetadataOrBuilder>( + metadata_, + getParentForChildren(), + isClean()); + metadata_ = null; + } + return metadataBuilder_; + } + + // repeated .eu.dnetlib.data.proto.Result.Instance instance = 6; + private java.util.List instance_ = + java.util.Collections.emptyList(); + private void ensureInstanceIsMutable() { + if (!((bitField0_ & 0x00000002) == 0x00000002)) { + instance_ = new java.util.ArrayList(instance_); + bitField0_ |= 0x00000002; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.ResultProtos.Result.Instance, eu.dnetlib.data.proto.ResultProtos.Result.Instance.Builder, eu.dnetlib.data.proto.ResultProtos.Result.InstanceOrBuilder> instanceBuilder_; + + public java.util.List getInstanceList() { + if (instanceBuilder_ == null) { + return java.util.Collections.unmodifiableList(instance_); + } else { + return instanceBuilder_.getMessageList(); + } + } + public int getInstanceCount() { + if (instanceBuilder_ == null) { + return instance_.size(); + } else { + return instanceBuilder_.getCount(); + } + } + public eu.dnetlib.data.proto.ResultProtos.Result.Instance getInstance(int index) { + if (instanceBuilder_ == null) { + return instance_.get(index); + } else { + return instanceBuilder_.getMessage(index); + } + } + public Builder setInstance( + int index, eu.dnetlib.data.proto.ResultProtos.Result.Instance value) { + if (instanceBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureInstanceIsMutable(); + instance_.set(index, value); + onChanged(); + } else { + instanceBuilder_.setMessage(index, value); + } + return this; + } + public Builder setInstance( + int index, eu.dnetlib.data.proto.ResultProtos.Result.Instance.Builder builderForValue) { + if (instanceBuilder_ == null) { + ensureInstanceIsMutable(); + instance_.set(index, builderForValue.build()); + onChanged(); + } else { + instanceBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + public Builder addInstance(eu.dnetlib.data.proto.ResultProtos.Result.Instance value) { + if (instanceBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureInstanceIsMutable(); + instance_.add(value); + onChanged(); + } else { + instanceBuilder_.addMessage(value); + } + return this; + } + public Builder addInstance( + int index, eu.dnetlib.data.proto.ResultProtos.Result.Instance value) { + if (instanceBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureInstanceIsMutable(); + instance_.add(index, value); + onChanged(); + } else { + instanceBuilder_.addMessage(index, value); + } + return this; + } + public Builder addInstance( + eu.dnetlib.data.proto.ResultProtos.Result.Instance.Builder builderForValue) { + if (instanceBuilder_ == null) { + ensureInstanceIsMutable(); + instance_.add(builderForValue.build()); + onChanged(); + } else { + instanceBuilder_.addMessage(builderForValue.build()); + } + return this; + } + public Builder addInstance( + int index, eu.dnetlib.data.proto.ResultProtos.Result.Instance.Builder builderForValue) { + if (instanceBuilder_ == null) { + ensureInstanceIsMutable(); + instance_.add(index, builderForValue.build()); + onChanged(); + } else { + instanceBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + public Builder addAllInstance( + java.lang.Iterable values) { + if (instanceBuilder_ == null) { + ensureInstanceIsMutable(); + super.addAll(values, instance_); + onChanged(); + } else { + instanceBuilder_.addAllMessages(values); + } + return this; + } + public Builder clearInstance() { + if (instanceBuilder_ == null) { + instance_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + } else { + instanceBuilder_.clear(); + } + return this; + } + public Builder removeInstance(int index) { + if (instanceBuilder_ == null) { + ensureInstanceIsMutable(); + instance_.remove(index); + onChanged(); + } else { + instanceBuilder_.remove(index); + } + return this; + } + public eu.dnetlib.data.proto.ResultProtos.Result.Instance.Builder getInstanceBuilder( + int index) { + return getInstanceFieldBuilder().getBuilder(index); + } + public eu.dnetlib.data.proto.ResultProtos.Result.InstanceOrBuilder getInstanceOrBuilder( + int index) { + if (instanceBuilder_ == null) { + return instance_.get(index); } else { + return instanceBuilder_.getMessageOrBuilder(index); + } + } + public java.util.List + getInstanceOrBuilderList() { + if (instanceBuilder_ != null) { + return instanceBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(instance_); + } + } + public eu.dnetlib.data.proto.ResultProtos.Result.Instance.Builder addInstanceBuilder() { + return getInstanceFieldBuilder().addBuilder( + eu.dnetlib.data.proto.ResultProtos.Result.Instance.getDefaultInstance()); + } + public eu.dnetlib.data.proto.ResultProtos.Result.Instance.Builder addInstanceBuilder( + int index) { + return getInstanceFieldBuilder().addBuilder( + index, eu.dnetlib.data.proto.ResultProtos.Result.Instance.getDefaultInstance()); + } + public java.util.List + getInstanceBuilderList() { + return getInstanceFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.ResultProtos.Result.Instance, eu.dnetlib.data.proto.ResultProtos.Result.Instance.Builder, eu.dnetlib.data.proto.ResultProtos.Result.InstanceOrBuilder> + getInstanceFieldBuilder() { + if (instanceBuilder_ == null) { + instanceBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.ResultProtos.Result.Instance, eu.dnetlib.data.proto.ResultProtos.Result.Instance.Builder, eu.dnetlib.data.proto.ResultProtos.Result.InstanceOrBuilder>( + instance_, + ((bitField0_ & 0x00000002) == 0x00000002), + getParentForChildren(), + isClean()); + instance_ = null; + } + return instanceBuilder_; + } + + // repeated .eu.dnetlib.data.proto.Result.ExternalReference externalReference = 7; + private java.util.List externalReference_ = + java.util.Collections.emptyList(); + private void ensureExternalReferenceIsMutable() { + if (!((bitField0_ & 0x00000004) == 0x00000004)) { + externalReference_ = new java.util.ArrayList(externalReference_); + bitField0_ |= 0x00000004; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference, eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference.Builder, eu.dnetlib.data.proto.ResultProtos.Result.ExternalReferenceOrBuilder> externalReferenceBuilder_; + + public java.util.List getExternalReferenceList() { + if (externalReferenceBuilder_ == null) { + return java.util.Collections.unmodifiableList(externalReference_); + } else { + return externalReferenceBuilder_.getMessageList(); + } + } + public int getExternalReferenceCount() { + if (externalReferenceBuilder_ == null) { + return externalReference_.size(); + } else { + return externalReferenceBuilder_.getCount(); + } + } + public eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference getExternalReference(int index) { + if (externalReferenceBuilder_ == null) { + return externalReference_.get(index); + } else { + return externalReferenceBuilder_.getMessage(index); + } + } + public Builder setExternalReference( + int index, eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference value) { + if (externalReferenceBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureExternalReferenceIsMutable(); + externalReference_.set(index, value); + onChanged(); + } else { + externalReferenceBuilder_.setMessage(index, value); + } + return this; + } + public Builder setExternalReference( + int index, eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference.Builder builderForValue) { + if (externalReferenceBuilder_ == null) { + ensureExternalReferenceIsMutable(); + externalReference_.set(index, builderForValue.build()); + onChanged(); + } else { + externalReferenceBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + public Builder addExternalReference(eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference value) { + if (externalReferenceBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureExternalReferenceIsMutable(); + externalReference_.add(value); + onChanged(); + } else { + externalReferenceBuilder_.addMessage(value); + } + return this; + } + public Builder addExternalReference( + int index, eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference value) { + if (externalReferenceBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureExternalReferenceIsMutable(); + externalReference_.add(index, value); + onChanged(); + } else { + externalReferenceBuilder_.addMessage(index, value); + } + return this; + } + public Builder addExternalReference( + eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference.Builder builderForValue) { + if (externalReferenceBuilder_ == null) { + ensureExternalReferenceIsMutable(); + externalReference_.add(builderForValue.build()); + onChanged(); + } else { + externalReferenceBuilder_.addMessage(builderForValue.build()); + } + return this; + } + public Builder addExternalReference( + int index, eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference.Builder builderForValue) { + if (externalReferenceBuilder_ == null) { + ensureExternalReferenceIsMutable(); + externalReference_.add(index, builderForValue.build()); + onChanged(); + } else { + externalReferenceBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + public Builder addAllExternalReference( + java.lang.Iterable values) { + if (externalReferenceBuilder_ == null) { + ensureExternalReferenceIsMutable(); + super.addAll(values, externalReference_); + onChanged(); + } else { + externalReferenceBuilder_.addAllMessages(values); + } + return this; + } + public Builder clearExternalReference() { + if (externalReferenceBuilder_ == null) { + externalReference_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000004); + onChanged(); + } else { + externalReferenceBuilder_.clear(); + } + return this; + } + public Builder removeExternalReference(int index) { + if (externalReferenceBuilder_ == null) { + ensureExternalReferenceIsMutable(); + externalReference_.remove(index); + onChanged(); + } else { + externalReferenceBuilder_.remove(index); + } + return this; + } + public eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference.Builder getExternalReferenceBuilder( + int index) { + return getExternalReferenceFieldBuilder().getBuilder(index); + } + public eu.dnetlib.data.proto.ResultProtos.Result.ExternalReferenceOrBuilder getExternalReferenceOrBuilder( + int index) { + if (externalReferenceBuilder_ == null) { + return externalReference_.get(index); } else { + return externalReferenceBuilder_.getMessageOrBuilder(index); + } + } + public java.util.List + getExternalReferenceOrBuilderList() { + if (externalReferenceBuilder_ != null) { + return externalReferenceBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(externalReference_); + } + } + public eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference.Builder addExternalReferenceBuilder() { + return getExternalReferenceFieldBuilder().addBuilder( + eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference.getDefaultInstance()); + } + public eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference.Builder addExternalReferenceBuilder( + int index) { + return getExternalReferenceFieldBuilder().addBuilder( + index, eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference.getDefaultInstance()); + } + public java.util.List + getExternalReferenceBuilderList() { + return getExternalReferenceFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference, eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference.Builder, eu.dnetlib.data.proto.ResultProtos.Result.ExternalReferenceOrBuilder> + getExternalReferenceFieldBuilder() { + if (externalReferenceBuilder_ == null) { + externalReferenceBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference, eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference.Builder, eu.dnetlib.data.proto.ResultProtos.Result.ExternalReferenceOrBuilder>( + externalReference_, + ((bitField0_ & 0x00000004) == 0x00000004), + getParentForChildren(), + isClean()); + externalReference_ = null; + } + return externalReferenceBuilder_; + } + + // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.Result) + } + + static { + defaultInstance = new Result(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.Result) + } + + private static com.google.protobuf.Descriptors.Descriptor + internal_static_eu_dnetlib_data_proto_Result_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_eu_dnetlib_data_proto_Result_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_eu_dnetlib_data_proto_Result_Metadata_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_eu_dnetlib_data_proto_Result_Metadata_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_eu_dnetlib_data_proto_Result_Journal_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_eu_dnetlib_data_proto_Result_Journal_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_eu_dnetlib_data_proto_Result_Context_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_eu_dnetlib_data_proto_Result_Context_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_eu_dnetlib_data_proto_Result_Instance_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_eu_dnetlib_data_proto_Result_Instance_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_eu_dnetlib_data_proto_Result_ExternalReference_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_eu_dnetlib_data_proto_Result_ExternalReference_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_eu_dnetlib_data_proto_Result_GeoLocation_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_eu_dnetlib_data_proto_Result_GeoLocation_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\014Result.proto\022\025eu.dnetlib.data.proto\032\017F" + + "ieldType.proto\"\234\030\n\006Result\0228\n\010metadata\030\002 " + + "\001(\0132&.eu.dnetlib.data.proto.Result.Metad" + + "ata\0228\n\010instance\030\006 \003(\0132&.eu.dnetlib.data." + + "proto.Result.Instance\022J\n\021externalReferen" + + "ce\030\007 \003(\0132/.eu.dnetlib.data.proto.Result." + + "ExternalReference\032\342\016\n\010Metadata\022-\n\006author" + + "\030( \003(\0132\035.eu.dnetlib.data.proto.Author\0224\n" + + "\nresulttype\030\010 \001(\0132 .eu.dnetlib.data.prot" + + "o.Qualifier\0222\n\010language\030\014 \001(\0132 .eu.dnetl", + "ib.data.proto.Qualifier\0221\n\007country\030! \003(\013" + + "2 .eu.dnetlib.data.proto.Qualifier\022:\n\007su" + + "bject\030\001 \003(\0132).eu.dnetlib.data.proto.Stru" + + "cturedProperty\0228\n\005title\030\002 \003(\0132).eu.dnetl" + + "ib.data.proto.StructuredProperty\022?\n\014rele" + + "vantdate\030\003 \003(\0132).eu.dnetlib.data.proto.S" + + "tructuredProperty\0227\n\013description\030\031 \003(\0132\"" + + ".eu.dnetlib.data.proto.StringField\022<\n\020da" + + "teofacceptance\030\004 \001(\0132\".eu.dnetlib.data.p" + + "roto.StringField\0225\n\tpublisher\030\005 \001(\0132\".eu", + ".dnetlib.data.proto.StringField\022:\n\016embar" + + "goenddate\030\006 \001(\0132\".eu.dnetlib.data.proto." + + "StringField\0222\n\006source\030\033 \003(\0132\".eu.dnetlib" + + ".data.proto.StringField\0224\n\010fulltext\030\035 \003(" + + "\0132\".eu.dnetlib.data.proto.StringField\0222\n" + + "\006format\030\025 \003(\0132\".eu.dnetlib.data.proto.St" + + "ringField\0227\n\013contributor\030\036 \003(\0132\".eu.dnet" + + "lib.data.proto.StringField\0226\n\014resourcety" + + "pe\030\023 \001(\0132 .eu.dnetlib.data.proto.Qualifi" + + "er\0224\n\010coverage\030+ \003(\0132\".eu.dnetlib.data.p", + "roto.StringField\0226\n\007context\030\034 \003(\0132%.eu.d" + + "netlib.data.proto.Result.Context\0226\n\007jour" + + "nal\030\022 \001(\0132%.eu.dnetlib.data.proto.Result" + + ".Journal\0227\n\013storagedate\030\t \001(\0132\".eu.dnetl" + + "ib.data.proto.StringField\0222\n\006device\030\032 \001(" + + "\0132\".eu.dnetlib.data.proto.StringField\0220\n" + + "\004size\030\024 \001(\0132\".eu.dnetlib.data.proto.Stri" + + "ngField\0223\n\007version\030\026 \001(\0132\".eu.dnetlib.da" + + "ta.proto.StringField\022>\n\022lastmetadataupda" + + "te\030\027 \001(\0132\".eu.dnetlib.data.proto.StringF", + "ield\022A\n\025metadataversionnumber\030\030 \001(\0132\".eu" + + ".dnetlib.data.proto.StringField\022>\n\013geolo" + + "cation\030, \003(\0132).eu.dnetlib.data.proto.Res" + + "ult.GeoLocation\022<\n\020documentationUrl\030# \003(" + + "\0132\".eu.dnetlib.data.proto.StringField\022:\n" + + "\007license\030$ \003(\0132).eu.dnetlib.data.proto.S" + + "tructuredProperty\022=\n\021codeRepositoryUrl\030&" + + " \001(\0132\".eu.dnetlib.data.proto.StringField" + + "\022=\n\023programmingLanguage\030\' \001(\0132 .eu.dnetl" + + "ib.data.proto.Qualifier\0229\n\rcontactperson", + "\030- \003(\0132\".eu.dnetlib.data.proto.StringFie" + + "ld\0228\n\014contactgroup\030) \003(\0132\".eu.dnetlib.da" + + "ta.proto.StringField\0220\n\004tool\030* \003(\0132\".eu." + + "dnetlib.data.proto.StringField\032\374\001\n\007Journ" + + "al\022\014\n\004name\030\001 \001(\t\022\023\n\013issnPrinted\030\002 \001(\t\022\022\n" + + "\nissnOnline\030\003 \001(\t\022\023\n\013issnLinking\030\004 \001(\t\022\n" + + "\n\002ep\030\006 \001(\t\022\013\n\003iss\030\007 \001(\t\022\n\n\002sp\030\010 \001(\t\022\013\n\003v" + + "ol\030\t \001(\t\022\017\n\007edition\030\n \001(\t\022\027\n\017conferencep" + + "lace\030\013 \001(\t\022\026\n\016conferencedate\030\014 \001(\t\0221\n\010da" + + "taInfo\030\005 \001(\0132\037.eu.dnetlib.data.proto.Dat", + "aInfo\032H\n\007Context\022\n\n\002id\030\001 \002(\t\0221\n\010dataInfo" + + "\030\002 \003(\0132\037.eu.dnetlib.data.proto.DataInfo\032" + + "\202\003\n\010Instance\0223\n\007license\030\006 \001(\0132\".eu.dnetl" + + "ib.data.proto.StringField\0225\n\013accessright" + + "\030\003 \001(\0132 .eu.dnetlib.data.proto.Qualifier" + + "\0226\n\014instancetype\030\004 \001(\0132 .eu.dnetlib.data" + + ".proto.Qualifier\0221\n\010hostedby\030\005 \001(\0132\037.eu." + + "dnetlib.data.proto.KeyValue\022\013\n\003url\030\t \003(\t" + + "\022\034\n\024distributionlocation\030\014 \001(\t\0226\n\rcollec" + + "tedfrom\030\n \001(\0132\037.eu.dnetlib.data.proto.Ke", + "yValue\022<\n\020dateofacceptance\030\013 \001(\0132\".eu.dn" + + "etlib.data.proto.StringField\032\344\001\n\021Externa" + + "lReference\022\020\n\010sitename\030\001 \001(\t\022\r\n\005label\030\002 " + + "\001(\t\022\013\n\003url\030\003 \001(\t\022\023\n\013description\030\004 \001(\t\0223\n" + + "\tqualifier\030\005 \001(\0132 .eu.dnetlib.data.proto" + + ".Qualifier\022\025\n\rrefidentifier\030\006 \001(\t\022\r\n\005que" + + "ry\030\007 \001(\t\0221\n\010dataInfo\030\010 \001(\0132\037.eu.dnetlib." + + "data.proto.DataInfo\0328\n\013GeoLocation\022\r\n\005po" + + "int\030\001 \001(\t\022\013\n\003box\030\002 \001(\t\022\r\n\005place\030\003 \001(\tB%\n" + + "\025eu.dnetlib.data.protoB\014ResultProtos" + }; + com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = + new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { + public com.google.protobuf.ExtensionRegistry assignDescriptors( + com.google.protobuf.Descriptors.FileDescriptor root) { + descriptor = root; + internal_static_eu_dnetlib_data_proto_Result_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_eu_dnetlib_data_proto_Result_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_eu_dnetlib_data_proto_Result_descriptor, + new java.lang.String[] { "Metadata", "Instance", "ExternalReference", }, + eu.dnetlib.data.proto.ResultProtos.Result.class, + eu.dnetlib.data.proto.ResultProtos.Result.Builder.class); + internal_static_eu_dnetlib_data_proto_Result_Metadata_descriptor = + internal_static_eu_dnetlib_data_proto_Result_descriptor.getNestedTypes().get(0); + internal_static_eu_dnetlib_data_proto_Result_Metadata_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_eu_dnetlib_data_proto_Result_Metadata_descriptor, + new java.lang.String[] { "Author", "Resulttype", "Language", "Country", "Subject", "Title", "Relevantdate", "Description", "Dateofacceptance", "Publisher", "Embargoenddate", "Source", "Fulltext", "Format", "Contributor", "Resourcetype", "Coverage", "Context", "Journal", "Storagedate", "Device", "Size", "Version", "Lastmetadataupdate", "Metadataversionnumber", "Geolocation", "DocumentationUrl", "License", "CodeRepositoryUrl", "ProgrammingLanguage", "Contactperson", "Contactgroup", "Tool", }, + eu.dnetlib.data.proto.ResultProtos.Result.Metadata.class, + eu.dnetlib.data.proto.ResultProtos.Result.Metadata.Builder.class); + internal_static_eu_dnetlib_data_proto_Result_Journal_descriptor = + internal_static_eu_dnetlib_data_proto_Result_descriptor.getNestedTypes().get(1); + internal_static_eu_dnetlib_data_proto_Result_Journal_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_eu_dnetlib_data_proto_Result_Journal_descriptor, + new java.lang.String[] { "Name", "IssnPrinted", "IssnOnline", "IssnLinking", "Ep", "Iss", "Sp", "Vol", "Edition", "Conferenceplace", "Conferencedate", "DataInfo", }, + eu.dnetlib.data.proto.ResultProtos.Result.Journal.class, + eu.dnetlib.data.proto.ResultProtos.Result.Journal.Builder.class); + internal_static_eu_dnetlib_data_proto_Result_Context_descriptor = + internal_static_eu_dnetlib_data_proto_Result_descriptor.getNestedTypes().get(2); + internal_static_eu_dnetlib_data_proto_Result_Context_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_eu_dnetlib_data_proto_Result_Context_descriptor, + new java.lang.String[] { "Id", "DataInfo", }, + eu.dnetlib.data.proto.ResultProtos.Result.Context.class, + eu.dnetlib.data.proto.ResultProtos.Result.Context.Builder.class); + internal_static_eu_dnetlib_data_proto_Result_Instance_descriptor = + internal_static_eu_dnetlib_data_proto_Result_descriptor.getNestedTypes().get(3); + internal_static_eu_dnetlib_data_proto_Result_Instance_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_eu_dnetlib_data_proto_Result_Instance_descriptor, + new java.lang.String[] { "License", "Accessright", "Instancetype", "Hostedby", "Url", "Distributionlocation", "Collectedfrom", "Dateofacceptance", }, + eu.dnetlib.data.proto.ResultProtos.Result.Instance.class, + eu.dnetlib.data.proto.ResultProtos.Result.Instance.Builder.class); + internal_static_eu_dnetlib_data_proto_Result_ExternalReference_descriptor = + internal_static_eu_dnetlib_data_proto_Result_descriptor.getNestedTypes().get(4); + internal_static_eu_dnetlib_data_proto_Result_ExternalReference_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_eu_dnetlib_data_proto_Result_ExternalReference_descriptor, + new java.lang.String[] { "Sitename", "Label", "Url", "Description", "Qualifier", "Refidentifier", "Query", "DataInfo", }, + eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference.class, + eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference.Builder.class); + internal_static_eu_dnetlib_data_proto_Result_GeoLocation_descriptor = + internal_static_eu_dnetlib_data_proto_Result_descriptor.getNestedTypes().get(5); + internal_static_eu_dnetlib_data_proto_Result_GeoLocation_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_eu_dnetlib_data_proto_Result_GeoLocation_descriptor, + new java.lang.String[] { "Point", "Box", "Place", }, + eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation.class, + eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation.Builder.class); + return null; + } + }; + com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + eu.dnetlib.data.proto.FieldTypeProtos.getDescriptor(), + }, assigner); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/ResultResultProtos.java b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/ResultResultProtos.java new file mode 100644 index 000000000..8223a6567 --- /dev/null +++ b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/ResultResultProtos.java @@ -0,0 +1,4927 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: Result_Result.proto + +package eu.dnetlib.data.proto; + +public final class ResultResultProtos { + private ResultResultProtos() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + } + public interface ResultResultOrBuilder + extends com.google.protobuf.MessageOrBuilder { + + // optional .eu.dnetlib.data.proto.ResultResult.Similarity similarity = 2; + boolean hasSimilarity(); + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity getSimilarity(); + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SimilarityOrBuilder getSimilarityOrBuilder(); + + // optional .eu.dnetlib.data.proto.ResultResult.PublicationDataset publicationDataset = 3; + boolean hasPublicationDataset(); + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset getPublicationDataset(); + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDatasetOrBuilder getPublicationDatasetOrBuilder(); + + // optional .eu.dnetlib.data.proto.Dedup dedup = 4; + boolean hasDedup(); + eu.dnetlib.data.proto.DedupProtos.Dedup getDedup(); + eu.dnetlib.data.proto.DedupProtos.DedupOrBuilder getDedupOrBuilder(); + + // optional .eu.dnetlib.data.proto.DedupSimilarity dedupSimilarity = 5; + boolean hasDedupSimilarity(); + eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity getDedupSimilarity(); + eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarityOrBuilder getDedupSimilarityOrBuilder(); + + // optional .eu.dnetlib.data.proto.ResultResult.Supplement supplement = 6; + boolean hasSupplement(); + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement getSupplement(); + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SupplementOrBuilder getSupplementOrBuilder(); + + // optional .eu.dnetlib.data.proto.ResultResult.Part part = 7; + boolean hasPart(); + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part getPart(); + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PartOrBuilder getPartOrBuilder(); + + // optional .eu.dnetlib.data.proto.ResultResult.Relationship relationship = 8; + boolean hasRelationship(); + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship getRelationship(); + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.RelationshipOrBuilder getRelationshipOrBuilder(); + + // optional .eu.dnetlib.data.proto.ResultResult.SoftwareSoftware softwareSoftware = 9; + boolean hasSoftwareSoftware(); + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware getSoftwareSoftware(); + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftwareOrBuilder getSoftwareSoftwareOrBuilder(); + } + public static final class ResultResult extends + com.google.protobuf.GeneratedMessage + implements ResultResultOrBuilder { + // Use ResultResult.newBuilder() to construct. + private ResultResult(Builder builder) { + super(builder); + } + private ResultResult(boolean noInit) {} + + private static final ResultResult defaultInstance; + public static ResultResult getDefaultInstance() { + return defaultInstance; + } + + public ResultResult getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_fieldAccessorTable; + } + + public interface SimilarityOrBuilder + extends com.google.protobuf.MessageOrBuilder { + + // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; + boolean hasRelMetadata(); + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata(); + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder(); + + // optional float similarity = 2; + boolean hasSimilarity(); + float getSimilarity(); + + // optional .eu.dnetlib.data.proto.ResultResult.Similarity.Type type = 3 [default = STANDARD]; + boolean hasType(); + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.Type getType(); + } + public static final class Similarity extends + com.google.protobuf.GeneratedMessage + implements SimilarityOrBuilder { + // Use Similarity.newBuilder() to construct. + private Similarity(Builder builder) { + super(builder); + } + private Similarity(boolean noInit) {} + + private static final Similarity defaultInstance; + public static Similarity getDefaultInstance() { + return defaultInstance; + } + + public Similarity getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_Similarity_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_Similarity_fieldAccessorTable; + } + + public enum RelName + implements com.google.protobuf.ProtocolMessageEnum { + isAmongTopNSimilarDocuments(0, 1), + hasAmongTopNSimilarDocuments(1, 2), + ; + + public static final int isAmongTopNSimilarDocuments_VALUE = 1; + public static final int hasAmongTopNSimilarDocuments_VALUE = 2; + + + public final int getNumber() { return value; } + + public static RelName valueOf(int value) { + switch (value) { + case 1: return isAmongTopNSimilarDocuments; + case 2: return hasAmongTopNSimilarDocuments; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static com.google.protobuf.Internal.EnumLiteMap + internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public RelName findValueByNumber(int number) { + return RelName.valueOf(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor + getValueDescriptor() { + return getDescriptor().getValues().get(index); + } + public final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptorForType() { + return getDescriptor(); + } + public static final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptor() { + return eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.getDescriptor().getEnumTypes().get(0); + } + + private static final RelName[] VALUES = { + isAmongTopNSimilarDocuments, hasAmongTopNSimilarDocuments, + }; + + public static RelName valueOf( + com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "EnumValueDescriptor is not for this type."); + } + return VALUES[desc.getIndex()]; + } + + private final int index; + private final int value; + + private RelName(int index, int value) { + this.index = index; + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:eu.dnetlib.data.proto.ResultResult.Similarity.RelName) + } + + public enum Type + implements com.google.protobuf.ProtocolMessageEnum { + STANDARD(0, 1), + WEBUSAGE(1, 2), + ; + + public static final int STANDARD_VALUE = 1; + public static final int WEBUSAGE_VALUE = 2; + + + public final int getNumber() { return value; } + + public static Type valueOf(int value) { + switch (value) { + case 1: return STANDARD; + case 2: return WEBUSAGE; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static com.google.protobuf.Internal.EnumLiteMap + internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public Type findValueByNumber(int number) { + return Type.valueOf(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor + getValueDescriptor() { + return getDescriptor().getValues().get(index); + } + public final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptorForType() { + return getDescriptor(); + } + public static final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptor() { + return eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.getDescriptor().getEnumTypes().get(1); + } + + private static final Type[] VALUES = { + STANDARD, WEBUSAGE, + }; + + public static Type valueOf( + com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "EnumValueDescriptor is not for this type."); + } + return VALUES[desc.getIndex()]; + } + + private final int index; + private final int value; + + private Type(int index, int value) { + this.index = index; + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:eu.dnetlib.data.proto.ResultResult.Similarity.Type) + } + + private int bitField0_; + // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; + public static final int RELMETADATA_FIELD_NUMBER = 1; + private eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata relMetadata_; + public boolean hasRelMetadata() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata() { + return relMetadata_; + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder() { + return relMetadata_; + } + + // optional float similarity = 2; + public static final int SIMILARITY_FIELD_NUMBER = 2; + private float similarity_; + public boolean hasSimilarity() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public float getSimilarity() { + return similarity_; + } + + // optional .eu.dnetlib.data.proto.ResultResult.Similarity.Type type = 3 [default = STANDARD]; + public static final int TYPE_FIELD_NUMBER = 3; + private eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.Type type_; + public boolean hasType() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.Type getType() { + return type_; + } + + private void initFields() { + relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); + similarity_ = 0F; + type_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.Type.STANDARD; + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + if (!hasRelMetadata()) { + memoizedIsInitialized = 0; + return false; + } + if (!getRelMetadata().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeMessage(1, relMetadata_); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + output.writeFloat(2, similarity_); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + output.writeEnum(3, type_.getNumber()); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, relMetadata_); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + size += com.google.protobuf.CodedOutputStream + .computeFloatSize(2, similarity_); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + size += com.google.protobuf.CodedOutputStream + .computeEnumSize(3, type_.getNumber()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder + implements eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SimilarityOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_Similarity_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_Similarity_fieldAccessorTable; + } + + // Construct using eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getRelMetadataFieldBuilder(); + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + if (relMetadataBuilder_ == null) { + relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); + } else { + relMetadataBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + similarity_ = 0F; + bitField0_ = (bitField0_ & ~0x00000002); + type_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.Type.STANDARD; + bitField0_ = (bitField0_ & ~0x00000004); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.getDescriptor(); + } + + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity getDefaultInstanceForType() { + return eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.getDefaultInstance(); + } + + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity build() { + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + private eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return result; + } + + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity buildPartial() { + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity result = new eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + if (relMetadataBuilder_ == null) { + result.relMetadata_ = relMetadata_; + } else { + result.relMetadata_ = relMetadataBuilder_.build(); + } + if (((from_bitField0_ & 0x00000002) == 0x00000002)) { + to_bitField0_ |= 0x00000002; + } + result.similarity_ = similarity_; + if (((from_bitField0_ & 0x00000004) == 0x00000004)) { + to_bitField0_ |= 0x00000004; + } + result.type_ = type_; + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity) { + return mergeFrom((eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity other) { + if (other == eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.getDefaultInstance()) return this; + if (other.hasRelMetadata()) { + mergeRelMetadata(other.getRelMetadata()); + } + if (other.hasSimilarity()) { + setSimilarity(other.getSimilarity()); + } + if (other.hasType()) { + setType(other.getType()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + if (!hasRelMetadata()) { + + return false; + } + if (!getRelMetadata().isInitialized()) { + + return false; + } + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + } + break; + } + case 10: { + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder subBuilder = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.newBuilder(); + if (hasRelMetadata()) { + subBuilder.mergeFrom(getRelMetadata()); + } + input.readMessage(subBuilder, extensionRegistry); + setRelMetadata(subBuilder.buildPartial()); + break; + } + case 21: { + bitField0_ |= 0x00000002; + similarity_ = input.readFloat(); + break; + } + case 24: { + int rawValue = input.readEnum(); + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.Type value = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.Type.valueOf(rawValue); + if (value == null) { + unknownFields.mergeVarintField(3, rawValue); + } else { + bitField0_ |= 0x00000004; + type_ = value; + } + break; + } + } + } + } + + private int bitField0_; + + // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; + private eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder> relMetadataBuilder_; + public boolean hasRelMetadata() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata() { + if (relMetadataBuilder_ == null) { + return relMetadata_; + } else { + return relMetadataBuilder_.getMessage(); + } + } + public Builder setRelMetadata(eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata value) { + if (relMetadataBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + relMetadata_ = value; + onChanged(); + } else { + relMetadataBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder setRelMetadata( + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder builderForValue) { + if (relMetadataBuilder_ == null) { + relMetadata_ = builderForValue.build(); + onChanged(); + } else { + relMetadataBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder mergeRelMetadata(eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata value) { + if (relMetadataBuilder_ == null) { + if (((bitField0_ & 0x00000001) == 0x00000001) && + relMetadata_ != eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance()) { + relMetadata_ = + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.newBuilder(relMetadata_).mergeFrom(value).buildPartial(); + } else { + relMetadata_ = value; + } + onChanged(); + } else { + relMetadataBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder clearRelMetadata() { + if (relMetadataBuilder_ == null) { + relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); + onChanged(); + } else { + relMetadataBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder getRelMetadataBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return getRelMetadataFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder() { + if (relMetadataBuilder_ != null) { + return relMetadataBuilder_.getMessageOrBuilder(); + } else { + return relMetadata_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder> + getRelMetadataFieldBuilder() { + if (relMetadataBuilder_ == null) { + relMetadataBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder>( + relMetadata_, + getParentForChildren(), + isClean()); + relMetadata_ = null; + } + return relMetadataBuilder_; + } + + // optional float similarity = 2; + private float similarity_ ; + public boolean hasSimilarity() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public float getSimilarity() { + return similarity_; + } + public Builder setSimilarity(float value) { + bitField0_ |= 0x00000002; + similarity_ = value; + onChanged(); + return this; + } + public Builder clearSimilarity() { + bitField0_ = (bitField0_ & ~0x00000002); + similarity_ = 0F; + onChanged(); + return this; + } + + // optional .eu.dnetlib.data.proto.ResultResult.Similarity.Type type = 3 [default = STANDARD]; + private eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.Type type_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.Type.STANDARD; + public boolean hasType() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.Type getType() { + return type_; + } + public Builder setType(eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.Type value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000004; + type_ = value; + onChanged(); + return this; + } + public Builder clearType() { + bitField0_ = (bitField0_ & ~0x00000004); + type_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.Type.STANDARD; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.ResultResult.Similarity) + } + + static { + defaultInstance = new Similarity(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.ResultResult.Similarity) + } + + public interface PublicationDatasetOrBuilder + extends com.google.protobuf.MessageOrBuilder { + + // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; + boolean hasRelMetadata(); + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata(); + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder(); + } + public static final class PublicationDataset extends + com.google.protobuf.GeneratedMessage + implements PublicationDatasetOrBuilder { + // Use PublicationDataset.newBuilder() to construct. + private PublicationDataset(Builder builder) { + super(builder); + } + private PublicationDataset(boolean noInit) {} + + private static final PublicationDataset defaultInstance; + public static PublicationDataset getDefaultInstance() { + return defaultInstance; + } + + public PublicationDataset getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_PublicationDataset_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_PublicationDataset_fieldAccessorTable; + } + + public enum RelName + implements com.google.protobuf.ProtocolMessageEnum { + isRelatedTo(0, 1), + ; + + public static final int isRelatedTo_VALUE = 1; + + + public final int getNumber() { return value; } + + public static RelName valueOf(int value) { + switch (value) { + case 1: return isRelatedTo; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static com.google.protobuf.Internal.EnumLiteMap + internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public RelName findValueByNumber(int number) { + return RelName.valueOf(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor + getValueDescriptor() { + return getDescriptor().getValues().get(index); + } + public final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptorForType() { + return getDescriptor(); + } + public static final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptor() { + return eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset.getDescriptor().getEnumTypes().get(0); + } + + private static final RelName[] VALUES = { + isRelatedTo, + }; + + public static RelName valueOf( + com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "EnumValueDescriptor is not for this type."); + } + return VALUES[desc.getIndex()]; + } + + private final int index; + private final int value; + + private RelName(int index, int value) { + this.index = index; + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:eu.dnetlib.data.proto.ResultResult.PublicationDataset.RelName) + } + + private int bitField0_; + // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; + public static final int RELMETADATA_FIELD_NUMBER = 1; + private eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata relMetadata_; + public boolean hasRelMetadata() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata() { + return relMetadata_; + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder() { + return relMetadata_; + } + + private void initFields() { + relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + if (!hasRelMetadata()) { + memoizedIsInitialized = 0; + return false; + } + if (!getRelMetadata().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeMessage(1, relMetadata_); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, relMetadata_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder + implements eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDatasetOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_PublicationDataset_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_PublicationDataset_fieldAccessorTable; + } + + // Construct using eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getRelMetadataFieldBuilder(); + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + if (relMetadataBuilder_ == null) { + relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); + } else { + relMetadataBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset.getDescriptor(); + } + + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset getDefaultInstanceForType() { + return eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset.getDefaultInstance(); + } + + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset build() { + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + private eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return result; + } + + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset buildPartial() { + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset result = new eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + if (relMetadataBuilder_ == null) { + result.relMetadata_ = relMetadata_; + } else { + result.relMetadata_ = relMetadataBuilder_.build(); + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset) { + return mergeFrom((eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset other) { + if (other == eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset.getDefaultInstance()) return this; + if (other.hasRelMetadata()) { + mergeRelMetadata(other.getRelMetadata()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + if (!hasRelMetadata()) { + + return false; + } + if (!getRelMetadata().isInitialized()) { + + return false; + } + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + } + break; + } + case 10: { + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder subBuilder = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.newBuilder(); + if (hasRelMetadata()) { + subBuilder.mergeFrom(getRelMetadata()); + } + input.readMessage(subBuilder, extensionRegistry); + setRelMetadata(subBuilder.buildPartial()); + break; + } + } + } + } + + private int bitField0_; + + // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; + private eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder> relMetadataBuilder_; + public boolean hasRelMetadata() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata() { + if (relMetadataBuilder_ == null) { + return relMetadata_; + } else { + return relMetadataBuilder_.getMessage(); + } + } + public Builder setRelMetadata(eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata value) { + if (relMetadataBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + relMetadata_ = value; + onChanged(); + } else { + relMetadataBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder setRelMetadata( + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder builderForValue) { + if (relMetadataBuilder_ == null) { + relMetadata_ = builderForValue.build(); + onChanged(); + } else { + relMetadataBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder mergeRelMetadata(eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata value) { + if (relMetadataBuilder_ == null) { + if (((bitField0_ & 0x00000001) == 0x00000001) && + relMetadata_ != eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance()) { + relMetadata_ = + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.newBuilder(relMetadata_).mergeFrom(value).buildPartial(); + } else { + relMetadata_ = value; + } + onChanged(); + } else { + relMetadataBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder clearRelMetadata() { + if (relMetadataBuilder_ == null) { + relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); + onChanged(); + } else { + relMetadataBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder getRelMetadataBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return getRelMetadataFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder() { + if (relMetadataBuilder_ != null) { + return relMetadataBuilder_.getMessageOrBuilder(); + } else { + return relMetadata_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder> + getRelMetadataFieldBuilder() { + if (relMetadataBuilder_ == null) { + relMetadataBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder>( + relMetadata_, + getParentForChildren(), + isClean()); + relMetadata_ = null; + } + return relMetadataBuilder_; + } + + // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.ResultResult.PublicationDataset) + } + + static { + defaultInstance = new PublicationDataset(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.ResultResult.PublicationDataset) + } + + public interface SupplementOrBuilder + extends com.google.protobuf.MessageOrBuilder { + + // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; + boolean hasRelMetadata(); + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata(); + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder(); + } + public static final class Supplement extends + com.google.protobuf.GeneratedMessage + implements SupplementOrBuilder { + // Use Supplement.newBuilder() to construct. + private Supplement(Builder builder) { + super(builder); + } + private Supplement(boolean noInit) {} + + private static final Supplement defaultInstance; + public static Supplement getDefaultInstance() { + return defaultInstance; + } + + public Supplement getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_Supplement_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_Supplement_fieldAccessorTable; + } + + public enum RelName + implements com.google.protobuf.ProtocolMessageEnum { + isSupplementTo(0, 1), + isSupplementedBy(1, 2), + ; + + public static final int isSupplementTo_VALUE = 1; + public static final int isSupplementedBy_VALUE = 2; + + + public final int getNumber() { return value; } + + public static RelName valueOf(int value) { + switch (value) { + case 1: return isSupplementTo; + case 2: return isSupplementedBy; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static com.google.protobuf.Internal.EnumLiteMap + internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public RelName findValueByNumber(int number) { + return RelName.valueOf(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor + getValueDescriptor() { + return getDescriptor().getValues().get(index); + } + public final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptorForType() { + return getDescriptor(); + } + public static final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptor() { + return eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement.getDescriptor().getEnumTypes().get(0); + } + + private static final RelName[] VALUES = { + isSupplementTo, isSupplementedBy, + }; + + public static RelName valueOf( + com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "EnumValueDescriptor is not for this type."); + } + return VALUES[desc.getIndex()]; + } + + private final int index; + private final int value; + + private RelName(int index, int value) { + this.index = index; + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:eu.dnetlib.data.proto.ResultResult.Supplement.RelName) + } + + private int bitField0_; + // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; + public static final int RELMETADATA_FIELD_NUMBER = 1; + private eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata relMetadata_; + public boolean hasRelMetadata() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata() { + return relMetadata_; + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder() { + return relMetadata_; + } + + private void initFields() { + relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + if (!hasRelMetadata()) { + memoizedIsInitialized = 0; + return false; + } + if (!getRelMetadata().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeMessage(1, relMetadata_); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, relMetadata_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder + implements eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SupplementOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_Supplement_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_Supplement_fieldAccessorTable; + } + + // Construct using eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getRelMetadataFieldBuilder(); + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + if (relMetadataBuilder_ == null) { + relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); + } else { + relMetadataBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement.getDescriptor(); + } + + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement getDefaultInstanceForType() { + return eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement.getDefaultInstance(); + } + + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement build() { + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + private eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return result; + } + + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement buildPartial() { + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement result = new eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + if (relMetadataBuilder_ == null) { + result.relMetadata_ = relMetadata_; + } else { + result.relMetadata_ = relMetadataBuilder_.build(); + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement) { + return mergeFrom((eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement other) { + if (other == eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement.getDefaultInstance()) return this; + if (other.hasRelMetadata()) { + mergeRelMetadata(other.getRelMetadata()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + if (!hasRelMetadata()) { + + return false; + } + if (!getRelMetadata().isInitialized()) { + + return false; + } + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + } + break; + } + case 10: { + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder subBuilder = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.newBuilder(); + if (hasRelMetadata()) { + subBuilder.mergeFrom(getRelMetadata()); + } + input.readMessage(subBuilder, extensionRegistry); + setRelMetadata(subBuilder.buildPartial()); + break; + } + } + } + } + + private int bitField0_; + + // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; + private eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder> relMetadataBuilder_; + public boolean hasRelMetadata() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata() { + if (relMetadataBuilder_ == null) { + return relMetadata_; + } else { + return relMetadataBuilder_.getMessage(); + } + } + public Builder setRelMetadata(eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata value) { + if (relMetadataBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + relMetadata_ = value; + onChanged(); + } else { + relMetadataBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder setRelMetadata( + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder builderForValue) { + if (relMetadataBuilder_ == null) { + relMetadata_ = builderForValue.build(); + onChanged(); + } else { + relMetadataBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder mergeRelMetadata(eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata value) { + if (relMetadataBuilder_ == null) { + if (((bitField0_ & 0x00000001) == 0x00000001) && + relMetadata_ != eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance()) { + relMetadata_ = + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.newBuilder(relMetadata_).mergeFrom(value).buildPartial(); + } else { + relMetadata_ = value; + } + onChanged(); + } else { + relMetadataBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder clearRelMetadata() { + if (relMetadataBuilder_ == null) { + relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); + onChanged(); + } else { + relMetadataBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder getRelMetadataBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return getRelMetadataFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder() { + if (relMetadataBuilder_ != null) { + return relMetadataBuilder_.getMessageOrBuilder(); + } else { + return relMetadata_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder> + getRelMetadataFieldBuilder() { + if (relMetadataBuilder_ == null) { + relMetadataBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder>( + relMetadata_, + getParentForChildren(), + isClean()); + relMetadata_ = null; + } + return relMetadataBuilder_; + } + + // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.ResultResult.Supplement) + } + + static { + defaultInstance = new Supplement(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.ResultResult.Supplement) + } + + public interface PartOrBuilder + extends com.google.protobuf.MessageOrBuilder { + + // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; + boolean hasRelMetadata(); + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata(); + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder(); + } + public static final class Part extends + com.google.protobuf.GeneratedMessage + implements PartOrBuilder { + // Use Part.newBuilder() to construct. + private Part(Builder builder) { + super(builder); + } + private Part(boolean noInit) {} + + private static final Part defaultInstance; + public static Part getDefaultInstance() { + return defaultInstance; + } + + public Part getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_Part_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_Part_fieldAccessorTable; + } + + public enum RelName + implements com.google.protobuf.ProtocolMessageEnum { + isPartOf(0, 1), + hasPart(1, 2), + ; + + public static final int isPartOf_VALUE = 1; + public static final int hasPart_VALUE = 2; + + + public final int getNumber() { return value; } + + public static RelName valueOf(int value) { + switch (value) { + case 1: return isPartOf; + case 2: return hasPart; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static com.google.protobuf.Internal.EnumLiteMap + internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public RelName findValueByNumber(int number) { + return RelName.valueOf(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor + getValueDescriptor() { + return getDescriptor().getValues().get(index); + } + public final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptorForType() { + return getDescriptor(); + } + public static final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptor() { + return eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part.getDescriptor().getEnumTypes().get(0); + } + + private static final RelName[] VALUES = { + isPartOf, hasPart, + }; + + public static RelName valueOf( + com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "EnumValueDescriptor is not for this type."); + } + return VALUES[desc.getIndex()]; + } + + private final int index; + private final int value; + + private RelName(int index, int value) { + this.index = index; + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:eu.dnetlib.data.proto.ResultResult.Part.RelName) + } + + private int bitField0_; + // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; + public static final int RELMETADATA_FIELD_NUMBER = 1; + private eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata relMetadata_; + public boolean hasRelMetadata() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata() { + return relMetadata_; + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder() { + return relMetadata_; + } + + private void initFields() { + relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + if (!hasRelMetadata()) { + memoizedIsInitialized = 0; + return false; + } + if (!getRelMetadata().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeMessage(1, relMetadata_); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, relMetadata_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder + implements eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PartOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_Part_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_Part_fieldAccessorTable; + } + + // Construct using eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getRelMetadataFieldBuilder(); + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + if (relMetadataBuilder_ == null) { + relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); + } else { + relMetadataBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part.getDescriptor(); + } + + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part getDefaultInstanceForType() { + return eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part.getDefaultInstance(); + } + + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part build() { + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + private eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return result; + } + + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part buildPartial() { + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part result = new eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + if (relMetadataBuilder_ == null) { + result.relMetadata_ = relMetadata_; + } else { + result.relMetadata_ = relMetadataBuilder_.build(); + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part) { + return mergeFrom((eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part other) { + if (other == eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part.getDefaultInstance()) return this; + if (other.hasRelMetadata()) { + mergeRelMetadata(other.getRelMetadata()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + if (!hasRelMetadata()) { + + return false; + } + if (!getRelMetadata().isInitialized()) { + + return false; + } + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + } + break; + } + case 10: { + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder subBuilder = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.newBuilder(); + if (hasRelMetadata()) { + subBuilder.mergeFrom(getRelMetadata()); + } + input.readMessage(subBuilder, extensionRegistry); + setRelMetadata(subBuilder.buildPartial()); + break; + } + } + } + } + + private int bitField0_; + + // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; + private eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder> relMetadataBuilder_; + public boolean hasRelMetadata() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata() { + if (relMetadataBuilder_ == null) { + return relMetadata_; + } else { + return relMetadataBuilder_.getMessage(); + } + } + public Builder setRelMetadata(eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata value) { + if (relMetadataBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + relMetadata_ = value; + onChanged(); + } else { + relMetadataBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder setRelMetadata( + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder builderForValue) { + if (relMetadataBuilder_ == null) { + relMetadata_ = builderForValue.build(); + onChanged(); + } else { + relMetadataBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder mergeRelMetadata(eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata value) { + if (relMetadataBuilder_ == null) { + if (((bitField0_ & 0x00000001) == 0x00000001) && + relMetadata_ != eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance()) { + relMetadata_ = + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.newBuilder(relMetadata_).mergeFrom(value).buildPartial(); + } else { + relMetadata_ = value; + } + onChanged(); + } else { + relMetadataBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder clearRelMetadata() { + if (relMetadataBuilder_ == null) { + relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); + onChanged(); + } else { + relMetadataBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder getRelMetadataBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return getRelMetadataFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder() { + if (relMetadataBuilder_ != null) { + return relMetadataBuilder_.getMessageOrBuilder(); + } else { + return relMetadata_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder> + getRelMetadataFieldBuilder() { + if (relMetadataBuilder_ == null) { + relMetadataBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder>( + relMetadata_, + getParentForChildren(), + isClean()); + relMetadata_ = null; + } + return relMetadataBuilder_; + } + + // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.ResultResult.Part) + } + + static { + defaultInstance = new Part(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.ResultResult.Part) + } + + public interface SoftwareSoftwareOrBuilder + extends com.google.protobuf.MessageOrBuilder { + + // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; + boolean hasRelMetadata(); + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata(); + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder(); + } + public static final class SoftwareSoftware extends + com.google.protobuf.GeneratedMessage + implements SoftwareSoftwareOrBuilder { + // Use SoftwareSoftware.newBuilder() to construct. + private SoftwareSoftware(Builder builder) { + super(builder); + } + private SoftwareSoftware(boolean noInit) {} + + private static final SoftwareSoftware defaultInstance; + public static SoftwareSoftware getDefaultInstance() { + return defaultInstance; + } + + public SoftwareSoftware getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_SoftwareSoftware_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_SoftwareSoftware_fieldAccessorTable; + } + + public enum RelName + implements com.google.protobuf.ProtocolMessageEnum { + isVersionOf(0, 1), + ; + + public static final int isVersionOf_VALUE = 1; + + + public final int getNumber() { return value; } + + public static RelName valueOf(int value) { + switch (value) { + case 1: return isVersionOf; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static com.google.protobuf.Internal.EnumLiteMap + internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public RelName findValueByNumber(int number) { + return RelName.valueOf(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor + getValueDescriptor() { + return getDescriptor().getValues().get(index); + } + public final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptorForType() { + return getDescriptor(); + } + public static final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptor() { + return eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware.getDescriptor().getEnumTypes().get(0); + } + + private static final RelName[] VALUES = { + isVersionOf, + }; + + public static RelName valueOf( + com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "EnumValueDescriptor is not for this type."); + } + return VALUES[desc.getIndex()]; + } + + private final int index; + private final int value; + + private RelName(int index, int value) { + this.index = index; + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:eu.dnetlib.data.proto.ResultResult.SoftwareSoftware.RelName) + } + + private int bitField0_; + // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; + public static final int RELMETADATA_FIELD_NUMBER = 1; + private eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata relMetadata_; + public boolean hasRelMetadata() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata() { + return relMetadata_; + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder() { + return relMetadata_; + } + + private void initFields() { + relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + if (!hasRelMetadata()) { + memoizedIsInitialized = 0; + return false; + } + if (!getRelMetadata().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeMessage(1, relMetadata_); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, relMetadata_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder + implements eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftwareOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_SoftwareSoftware_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_SoftwareSoftware_fieldAccessorTable; + } + + // Construct using eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getRelMetadataFieldBuilder(); + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + if (relMetadataBuilder_ == null) { + relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); + } else { + relMetadataBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware.getDescriptor(); + } + + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware getDefaultInstanceForType() { + return eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware.getDefaultInstance(); + } + + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware build() { + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + private eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return result; + } + + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware buildPartial() { + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware result = new eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + if (relMetadataBuilder_ == null) { + result.relMetadata_ = relMetadata_; + } else { + result.relMetadata_ = relMetadataBuilder_.build(); + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware) { + return mergeFrom((eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware other) { + if (other == eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware.getDefaultInstance()) return this; + if (other.hasRelMetadata()) { + mergeRelMetadata(other.getRelMetadata()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + if (!hasRelMetadata()) { + + return false; + } + if (!getRelMetadata().isInitialized()) { + + return false; + } + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + } + break; + } + case 10: { + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder subBuilder = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.newBuilder(); + if (hasRelMetadata()) { + subBuilder.mergeFrom(getRelMetadata()); + } + input.readMessage(subBuilder, extensionRegistry); + setRelMetadata(subBuilder.buildPartial()); + break; + } + } + } + } + + private int bitField0_; + + // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; + private eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder> relMetadataBuilder_; + public boolean hasRelMetadata() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata() { + if (relMetadataBuilder_ == null) { + return relMetadata_; + } else { + return relMetadataBuilder_.getMessage(); + } + } + public Builder setRelMetadata(eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata value) { + if (relMetadataBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + relMetadata_ = value; + onChanged(); + } else { + relMetadataBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder setRelMetadata( + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder builderForValue) { + if (relMetadataBuilder_ == null) { + relMetadata_ = builderForValue.build(); + onChanged(); + } else { + relMetadataBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder mergeRelMetadata(eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata value) { + if (relMetadataBuilder_ == null) { + if (((bitField0_ & 0x00000001) == 0x00000001) && + relMetadata_ != eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance()) { + relMetadata_ = + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.newBuilder(relMetadata_).mergeFrom(value).buildPartial(); + } else { + relMetadata_ = value; + } + onChanged(); + } else { + relMetadataBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder clearRelMetadata() { + if (relMetadataBuilder_ == null) { + relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); + onChanged(); + } else { + relMetadataBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder getRelMetadataBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return getRelMetadataFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder() { + if (relMetadataBuilder_ != null) { + return relMetadataBuilder_.getMessageOrBuilder(); + } else { + return relMetadata_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder> + getRelMetadataFieldBuilder() { + if (relMetadataBuilder_ == null) { + relMetadataBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder>( + relMetadata_, + getParentForChildren(), + isClean()); + relMetadata_ = null; + } + return relMetadataBuilder_; + } + + // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.ResultResult.SoftwareSoftware) + } + + static { + defaultInstance = new SoftwareSoftware(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.ResultResult.SoftwareSoftware) + } + + public interface RelationshipOrBuilder + extends com.google.protobuf.MessageOrBuilder { + + // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; + boolean hasRelMetadata(); + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata(); + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder(); + } + public static final class Relationship extends + com.google.protobuf.GeneratedMessage + implements RelationshipOrBuilder { + // Use Relationship.newBuilder() to construct. + private Relationship(Builder builder) { + super(builder); + } + private Relationship(boolean noInit) {} + + private static final Relationship defaultInstance; + public static Relationship getDefaultInstance() { + return defaultInstance; + } + + public Relationship getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_Relationship_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_Relationship_fieldAccessorTable; + } + + public enum RelName + implements com.google.protobuf.ProtocolMessageEnum { + isRelatedTo(0, 1), + ; + + public static final int isRelatedTo_VALUE = 1; + + + public final int getNumber() { return value; } + + public static RelName valueOf(int value) { + switch (value) { + case 1: return isRelatedTo; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static com.google.protobuf.Internal.EnumLiteMap + internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public RelName findValueByNumber(int number) { + return RelName.valueOf(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor + getValueDescriptor() { + return getDescriptor().getValues().get(index); + } + public final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptorForType() { + return getDescriptor(); + } + public static final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptor() { + return eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship.getDescriptor().getEnumTypes().get(0); + } + + private static final RelName[] VALUES = { + isRelatedTo, + }; + + public static RelName valueOf( + com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "EnumValueDescriptor is not for this type."); + } + return VALUES[desc.getIndex()]; + } + + private final int index; + private final int value; + + private RelName(int index, int value) { + this.index = index; + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:eu.dnetlib.data.proto.ResultResult.Relationship.RelName) + } + + private int bitField0_; + // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; + public static final int RELMETADATA_FIELD_NUMBER = 1; + private eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata relMetadata_; + public boolean hasRelMetadata() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata() { + return relMetadata_; + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder() { + return relMetadata_; + } + + private void initFields() { + relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + if (!hasRelMetadata()) { + memoizedIsInitialized = 0; + return false; + } + if (!getRelMetadata().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeMessage(1, relMetadata_); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, relMetadata_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder + implements eu.dnetlib.data.proto.ResultResultProtos.ResultResult.RelationshipOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_Relationship_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_Relationship_fieldAccessorTable; + } + + // Construct using eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getRelMetadataFieldBuilder(); + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + if (relMetadataBuilder_ == null) { + relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); + } else { + relMetadataBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship.getDescriptor(); + } + + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship getDefaultInstanceForType() { + return eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship.getDefaultInstance(); + } + + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship build() { + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + private eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return result; + } + + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship buildPartial() { + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship result = new eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + if (relMetadataBuilder_ == null) { + result.relMetadata_ = relMetadata_; + } else { + result.relMetadata_ = relMetadataBuilder_.build(); + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship) { + return mergeFrom((eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship other) { + if (other == eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship.getDefaultInstance()) return this; + if (other.hasRelMetadata()) { + mergeRelMetadata(other.getRelMetadata()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + if (!hasRelMetadata()) { + + return false; + } + if (!getRelMetadata().isInitialized()) { + + return false; + } + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + } + break; + } + case 10: { + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder subBuilder = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.newBuilder(); + if (hasRelMetadata()) { + subBuilder.mergeFrom(getRelMetadata()); + } + input.readMessage(subBuilder, extensionRegistry); + setRelMetadata(subBuilder.buildPartial()); + break; + } + } + } + } + + private int bitField0_; + + // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; + private eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder> relMetadataBuilder_; + public boolean hasRelMetadata() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata() { + if (relMetadataBuilder_ == null) { + return relMetadata_; + } else { + return relMetadataBuilder_.getMessage(); + } + } + public Builder setRelMetadata(eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata value) { + if (relMetadataBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + relMetadata_ = value; + onChanged(); + } else { + relMetadataBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder setRelMetadata( + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder builderForValue) { + if (relMetadataBuilder_ == null) { + relMetadata_ = builderForValue.build(); + onChanged(); + } else { + relMetadataBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder mergeRelMetadata(eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata value) { + if (relMetadataBuilder_ == null) { + if (((bitField0_ & 0x00000001) == 0x00000001) && + relMetadata_ != eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance()) { + relMetadata_ = + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.newBuilder(relMetadata_).mergeFrom(value).buildPartial(); + } else { + relMetadata_ = value; + } + onChanged(); + } else { + relMetadataBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder clearRelMetadata() { + if (relMetadataBuilder_ == null) { + relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); + onChanged(); + } else { + relMetadataBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder getRelMetadataBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return getRelMetadataFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder() { + if (relMetadataBuilder_ != null) { + return relMetadataBuilder_.getMessageOrBuilder(); + } else { + return relMetadata_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder> + getRelMetadataFieldBuilder() { + if (relMetadataBuilder_ == null) { + relMetadataBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder>( + relMetadata_, + getParentForChildren(), + isClean()); + relMetadata_ = null; + } + return relMetadataBuilder_; + } + + // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.ResultResult.Relationship) + } + + static { + defaultInstance = new Relationship(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.ResultResult.Relationship) + } + + private int bitField0_; + // optional .eu.dnetlib.data.proto.ResultResult.Similarity similarity = 2; + public static final int SIMILARITY_FIELD_NUMBER = 2; + private eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity similarity_; + public boolean hasSimilarity() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity getSimilarity() { + return similarity_; + } + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SimilarityOrBuilder getSimilarityOrBuilder() { + return similarity_; + } + + // optional .eu.dnetlib.data.proto.ResultResult.PublicationDataset publicationDataset = 3; + public static final int PUBLICATIONDATASET_FIELD_NUMBER = 3; + private eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset publicationDataset_; + public boolean hasPublicationDataset() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset getPublicationDataset() { + return publicationDataset_; + } + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDatasetOrBuilder getPublicationDatasetOrBuilder() { + return publicationDataset_; + } + + // optional .eu.dnetlib.data.proto.Dedup dedup = 4; + public static final int DEDUP_FIELD_NUMBER = 4; + private eu.dnetlib.data.proto.DedupProtos.Dedup dedup_; + public boolean hasDedup() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + public eu.dnetlib.data.proto.DedupProtos.Dedup getDedup() { + return dedup_; + } + public eu.dnetlib.data.proto.DedupProtos.DedupOrBuilder getDedupOrBuilder() { + return dedup_; + } + + // optional .eu.dnetlib.data.proto.DedupSimilarity dedupSimilarity = 5; + public static final int DEDUPSIMILARITY_FIELD_NUMBER = 5; + private eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity dedupSimilarity_; + public boolean hasDedupSimilarity() { + return ((bitField0_ & 0x00000008) == 0x00000008); + } + public eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity getDedupSimilarity() { + return dedupSimilarity_; + } + public eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarityOrBuilder getDedupSimilarityOrBuilder() { + return dedupSimilarity_; + } + + // optional .eu.dnetlib.data.proto.ResultResult.Supplement supplement = 6; + public static final int SUPPLEMENT_FIELD_NUMBER = 6; + private eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement supplement_; + public boolean hasSupplement() { + return ((bitField0_ & 0x00000010) == 0x00000010); + } + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement getSupplement() { + return supplement_; + } + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SupplementOrBuilder getSupplementOrBuilder() { + return supplement_; + } + + // optional .eu.dnetlib.data.proto.ResultResult.Part part = 7; + public static final int PART_FIELD_NUMBER = 7; + private eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part part_; + public boolean hasPart() { + return ((bitField0_ & 0x00000020) == 0x00000020); + } + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part getPart() { + return part_; + } + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PartOrBuilder getPartOrBuilder() { + return part_; + } + + // optional .eu.dnetlib.data.proto.ResultResult.Relationship relationship = 8; + public static final int RELATIONSHIP_FIELD_NUMBER = 8; + private eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship relationship_; + public boolean hasRelationship() { + return ((bitField0_ & 0x00000040) == 0x00000040); + } + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship getRelationship() { + return relationship_; + } + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.RelationshipOrBuilder getRelationshipOrBuilder() { + return relationship_; + } + + // optional .eu.dnetlib.data.proto.ResultResult.SoftwareSoftware softwareSoftware = 9; + public static final int SOFTWARESOFTWARE_FIELD_NUMBER = 9; + private eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware softwareSoftware_; + public boolean hasSoftwareSoftware() { + return ((bitField0_ & 0x00000080) == 0x00000080); + } + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware getSoftwareSoftware() { + return softwareSoftware_; + } + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftwareOrBuilder getSoftwareSoftwareOrBuilder() { + return softwareSoftware_; + } + + private void initFields() { + similarity_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.getDefaultInstance(); + publicationDataset_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset.getDefaultInstance(); + dedup_ = eu.dnetlib.data.proto.DedupProtos.Dedup.getDefaultInstance(); + dedupSimilarity_ = eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.getDefaultInstance(); + supplement_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement.getDefaultInstance(); + part_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part.getDefaultInstance(); + relationship_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship.getDefaultInstance(); + softwareSoftware_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware.getDefaultInstance(); + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + if (hasSimilarity()) { + if (!getSimilarity().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasPublicationDataset()) { + if (!getPublicationDataset().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasDedup()) { + if (!getDedup().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasDedupSimilarity()) { + if (!getDedupSimilarity().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasSupplement()) { + if (!getSupplement().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasPart()) { + if (!getPart().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasRelationship()) { + if (!getRelationship().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasSoftwareSoftware()) { + if (!getSoftwareSoftware().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeMessage(2, similarity_); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + output.writeMessage(3, publicationDataset_); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + output.writeMessage(4, dedup_); + } + if (((bitField0_ & 0x00000008) == 0x00000008)) { + output.writeMessage(5, dedupSimilarity_); + } + if (((bitField0_ & 0x00000010) == 0x00000010)) { + output.writeMessage(6, supplement_); + } + if (((bitField0_ & 0x00000020) == 0x00000020)) { + output.writeMessage(7, part_); + } + if (((bitField0_ & 0x00000040) == 0x00000040)) { + output.writeMessage(8, relationship_); + } + if (((bitField0_ & 0x00000080) == 0x00000080)) { + output.writeMessage(9, softwareSoftware_); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(2, similarity_); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(3, publicationDataset_); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(4, dedup_); + } + if (((bitField0_ & 0x00000008) == 0x00000008)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(5, dedupSimilarity_); + } + if (((bitField0_ & 0x00000010) == 0x00000010)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(6, supplement_); + } + if (((bitField0_ & 0x00000020) == 0x00000020)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(7, part_); + } + if (((bitField0_ & 0x00000040) == 0x00000040)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(8, relationship_); + } + if (((bitField0_ & 0x00000080) == 0x00000080)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(9, softwareSoftware_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(eu.dnetlib.data.proto.ResultResultProtos.ResultResult prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder + implements eu.dnetlib.data.proto.ResultResultProtos.ResultResultOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_fieldAccessorTable; + } + + // Construct using eu.dnetlib.data.proto.ResultResultProtos.ResultResult.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getSimilarityFieldBuilder(); + getPublicationDatasetFieldBuilder(); + getDedupFieldBuilder(); + getDedupSimilarityFieldBuilder(); + getSupplementFieldBuilder(); + getPartFieldBuilder(); + getRelationshipFieldBuilder(); + getSoftwareSoftwareFieldBuilder(); + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + if (similarityBuilder_ == null) { + similarity_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.getDefaultInstance(); + } else { + similarityBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + if (publicationDatasetBuilder_ == null) { + publicationDataset_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset.getDefaultInstance(); + } else { + publicationDatasetBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000002); + if (dedupBuilder_ == null) { + dedup_ = eu.dnetlib.data.proto.DedupProtos.Dedup.getDefaultInstance(); + } else { + dedupBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000004); + if (dedupSimilarityBuilder_ == null) { + dedupSimilarity_ = eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.getDefaultInstance(); + } else { + dedupSimilarityBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000008); + if (supplementBuilder_ == null) { + supplement_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement.getDefaultInstance(); + } else { + supplementBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000010); + if (partBuilder_ == null) { + part_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part.getDefaultInstance(); + } else { + partBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000020); + if (relationshipBuilder_ == null) { + relationship_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship.getDefaultInstance(); + } else { + relationshipBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000040); + if (softwareSoftwareBuilder_ == null) { + softwareSoftware_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware.getDefaultInstance(); + } else { + softwareSoftwareBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000080); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return eu.dnetlib.data.proto.ResultResultProtos.ResultResult.getDescriptor(); + } + + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult getDefaultInstanceForType() { + return eu.dnetlib.data.proto.ResultResultProtos.ResultResult.getDefaultInstance(); + } + + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult build() { + eu.dnetlib.data.proto.ResultResultProtos.ResultResult result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + private eu.dnetlib.data.proto.ResultResultProtos.ResultResult buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + eu.dnetlib.data.proto.ResultResultProtos.ResultResult result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return result; + } + + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult buildPartial() { + eu.dnetlib.data.proto.ResultResultProtos.ResultResult result = new eu.dnetlib.data.proto.ResultResultProtos.ResultResult(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + if (similarityBuilder_ == null) { + result.similarity_ = similarity_; + } else { + result.similarity_ = similarityBuilder_.build(); + } + if (((from_bitField0_ & 0x00000002) == 0x00000002)) { + to_bitField0_ |= 0x00000002; + } + if (publicationDatasetBuilder_ == null) { + result.publicationDataset_ = publicationDataset_; + } else { + result.publicationDataset_ = publicationDatasetBuilder_.build(); + } + if (((from_bitField0_ & 0x00000004) == 0x00000004)) { + to_bitField0_ |= 0x00000004; + } + if (dedupBuilder_ == null) { + result.dedup_ = dedup_; + } else { + result.dedup_ = dedupBuilder_.build(); + } + if (((from_bitField0_ & 0x00000008) == 0x00000008)) { + to_bitField0_ |= 0x00000008; + } + if (dedupSimilarityBuilder_ == null) { + result.dedupSimilarity_ = dedupSimilarity_; + } else { + result.dedupSimilarity_ = dedupSimilarityBuilder_.build(); + } + if (((from_bitField0_ & 0x00000010) == 0x00000010)) { + to_bitField0_ |= 0x00000010; + } + if (supplementBuilder_ == null) { + result.supplement_ = supplement_; + } else { + result.supplement_ = supplementBuilder_.build(); + } + if (((from_bitField0_ & 0x00000020) == 0x00000020)) { + to_bitField0_ |= 0x00000020; + } + if (partBuilder_ == null) { + result.part_ = part_; + } else { + result.part_ = partBuilder_.build(); + } + if (((from_bitField0_ & 0x00000040) == 0x00000040)) { + to_bitField0_ |= 0x00000040; + } + if (relationshipBuilder_ == null) { + result.relationship_ = relationship_; + } else { + result.relationship_ = relationshipBuilder_.build(); + } + if (((from_bitField0_ & 0x00000080) == 0x00000080)) { + to_bitField0_ |= 0x00000080; + } + if (softwareSoftwareBuilder_ == null) { + result.softwareSoftware_ = softwareSoftware_; + } else { + result.softwareSoftware_ = softwareSoftwareBuilder_.build(); + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof eu.dnetlib.data.proto.ResultResultProtos.ResultResult) { + return mergeFrom((eu.dnetlib.data.proto.ResultResultProtos.ResultResult)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(eu.dnetlib.data.proto.ResultResultProtos.ResultResult other) { + if (other == eu.dnetlib.data.proto.ResultResultProtos.ResultResult.getDefaultInstance()) return this; + if (other.hasSimilarity()) { + mergeSimilarity(other.getSimilarity()); + } + if (other.hasPublicationDataset()) { + mergePublicationDataset(other.getPublicationDataset()); + } + if (other.hasDedup()) { + mergeDedup(other.getDedup()); + } + if (other.hasDedupSimilarity()) { + mergeDedupSimilarity(other.getDedupSimilarity()); + } + if (other.hasSupplement()) { + mergeSupplement(other.getSupplement()); + } + if (other.hasPart()) { + mergePart(other.getPart()); + } + if (other.hasRelationship()) { + mergeRelationship(other.getRelationship()); + } + if (other.hasSoftwareSoftware()) { + mergeSoftwareSoftware(other.getSoftwareSoftware()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + if (hasSimilarity()) { + if (!getSimilarity().isInitialized()) { + + return false; + } + } + if (hasPublicationDataset()) { + if (!getPublicationDataset().isInitialized()) { + + return false; + } + } + if (hasDedup()) { + if (!getDedup().isInitialized()) { + + return false; + } + } + if (hasDedupSimilarity()) { + if (!getDedupSimilarity().isInitialized()) { + + return false; + } + } + if (hasSupplement()) { + if (!getSupplement().isInitialized()) { + + return false; + } + } + if (hasPart()) { + if (!getPart().isInitialized()) { + + return false; + } + } + if (hasRelationship()) { + if (!getRelationship().isInitialized()) { + + return false; + } + } + if (hasSoftwareSoftware()) { + if (!getSoftwareSoftware().isInitialized()) { + + return false; + } + } + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + } + break; + } + case 18: { + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.Builder subBuilder = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.newBuilder(); + if (hasSimilarity()) { + subBuilder.mergeFrom(getSimilarity()); + } + input.readMessage(subBuilder, extensionRegistry); + setSimilarity(subBuilder.buildPartial()); + break; + } + case 26: { + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset.Builder subBuilder = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset.newBuilder(); + if (hasPublicationDataset()) { + subBuilder.mergeFrom(getPublicationDataset()); + } + input.readMessage(subBuilder, extensionRegistry); + setPublicationDataset(subBuilder.buildPartial()); + break; + } + case 34: { + eu.dnetlib.data.proto.DedupProtos.Dedup.Builder subBuilder = eu.dnetlib.data.proto.DedupProtos.Dedup.newBuilder(); + if (hasDedup()) { + subBuilder.mergeFrom(getDedup()); + } + input.readMessage(subBuilder, extensionRegistry); + setDedup(subBuilder.buildPartial()); + break; + } + case 42: { + eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.Builder subBuilder = eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.newBuilder(); + if (hasDedupSimilarity()) { + subBuilder.mergeFrom(getDedupSimilarity()); + } + input.readMessage(subBuilder, extensionRegistry); + setDedupSimilarity(subBuilder.buildPartial()); + break; + } + case 50: { + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement.Builder subBuilder = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement.newBuilder(); + if (hasSupplement()) { + subBuilder.mergeFrom(getSupplement()); + } + input.readMessage(subBuilder, extensionRegistry); + setSupplement(subBuilder.buildPartial()); + break; + } + case 58: { + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part.Builder subBuilder = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part.newBuilder(); + if (hasPart()) { + subBuilder.mergeFrom(getPart()); + } + input.readMessage(subBuilder, extensionRegistry); + setPart(subBuilder.buildPartial()); + break; + } + case 66: { + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship.Builder subBuilder = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship.newBuilder(); + if (hasRelationship()) { + subBuilder.mergeFrom(getRelationship()); + } + input.readMessage(subBuilder, extensionRegistry); + setRelationship(subBuilder.buildPartial()); + break; + } + case 74: { + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware.Builder subBuilder = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware.newBuilder(); + if (hasSoftwareSoftware()) { + subBuilder.mergeFrom(getSoftwareSoftware()); + } + input.readMessage(subBuilder, extensionRegistry); + setSoftwareSoftware(subBuilder.buildPartial()); + break; + } + } + } + } + + private int bitField0_; + + // optional .eu.dnetlib.data.proto.ResultResult.Similarity similarity = 2; + private eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity similarity_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.Builder, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SimilarityOrBuilder> similarityBuilder_; + public boolean hasSimilarity() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity getSimilarity() { + if (similarityBuilder_ == null) { + return similarity_; + } else { + return similarityBuilder_.getMessage(); + } + } + public Builder setSimilarity(eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity value) { + if (similarityBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + similarity_ = value; + onChanged(); + } else { + similarityBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder setSimilarity( + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.Builder builderForValue) { + if (similarityBuilder_ == null) { + similarity_ = builderForValue.build(); + onChanged(); + } else { + similarityBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder mergeSimilarity(eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity value) { + if (similarityBuilder_ == null) { + if (((bitField0_ & 0x00000001) == 0x00000001) && + similarity_ != eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.getDefaultInstance()) { + similarity_ = + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.newBuilder(similarity_).mergeFrom(value).buildPartial(); + } else { + similarity_ = value; + } + onChanged(); + } else { + similarityBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000001; + return this; + } + public Builder clearSimilarity() { + if (similarityBuilder_ == null) { + similarity_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.getDefaultInstance(); + onChanged(); + } else { + similarityBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.Builder getSimilarityBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return getSimilarityFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SimilarityOrBuilder getSimilarityOrBuilder() { + if (similarityBuilder_ != null) { + return similarityBuilder_.getMessageOrBuilder(); + } else { + return similarity_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.Builder, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SimilarityOrBuilder> + getSimilarityFieldBuilder() { + if (similarityBuilder_ == null) { + similarityBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.Builder, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SimilarityOrBuilder>( + similarity_, + getParentForChildren(), + isClean()); + similarity_ = null; + } + return similarityBuilder_; + } + + // optional .eu.dnetlib.data.proto.ResultResult.PublicationDataset publicationDataset = 3; + private eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset publicationDataset_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset.Builder, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDatasetOrBuilder> publicationDatasetBuilder_; + public boolean hasPublicationDataset() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset getPublicationDataset() { + if (publicationDatasetBuilder_ == null) { + return publicationDataset_; + } else { + return publicationDatasetBuilder_.getMessage(); + } + } + public Builder setPublicationDataset(eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset value) { + if (publicationDatasetBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + publicationDataset_ = value; + onChanged(); + } else { + publicationDatasetBuilder_.setMessage(value); + } + bitField0_ |= 0x00000002; + return this; + } + public Builder setPublicationDataset( + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset.Builder builderForValue) { + if (publicationDatasetBuilder_ == null) { + publicationDataset_ = builderForValue.build(); + onChanged(); + } else { + publicationDatasetBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000002; + return this; + } + public Builder mergePublicationDataset(eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset value) { + if (publicationDatasetBuilder_ == null) { + if (((bitField0_ & 0x00000002) == 0x00000002) && + publicationDataset_ != eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset.getDefaultInstance()) { + publicationDataset_ = + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset.newBuilder(publicationDataset_).mergeFrom(value).buildPartial(); + } else { + publicationDataset_ = value; + } + onChanged(); + } else { + publicationDatasetBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000002; + return this; + } + public Builder clearPublicationDataset() { + if (publicationDatasetBuilder_ == null) { + publicationDataset_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset.getDefaultInstance(); + onChanged(); + } else { + publicationDatasetBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000002); + return this; + } + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset.Builder getPublicationDatasetBuilder() { + bitField0_ |= 0x00000002; + onChanged(); + return getPublicationDatasetFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDatasetOrBuilder getPublicationDatasetOrBuilder() { + if (publicationDatasetBuilder_ != null) { + return publicationDatasetBuilder_.getMessageOrBuilder(); + } else { + return publicationDataset_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset.Builder, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDatasetOrBuilder> + getPublicationDatasetFieldBuilder() { + if (publicationDatasetBuilder_ == null) { + publicationDatasetBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset.Builder, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDatasetOrBuilder>( + publicationDataset_, + getParentForChildren(), + isClean()); + publicationDataset_ = null; + } + return publicationDatasetBuilder_; + } + + // optional .eu.dnetlib.data.proto.Dedup dedup = 4; + private eu.dnetlib.data.proto.DedupProtos.Dedup dedup_ = eu.dnetlib.data.proto.DedupProtos.Dedup.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.DedupProtos.Dedup, eu.dnetlib.data.proto.DedupProtos.Dedup.Builder, eu.dnetlib.data.proto.DedupProtos.DedupOrBuilder> dedupBuilder_; + public boolean hasDedup() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + public eu.dnetlib.data.proto.DedupProtos.Dedup getDedup() { + if (dedupBuilder_ == null) { + return dedup_; + } else { + return dedupBuilder_.getMessage(); + } + } + public Builder setDedup(eu.dnetlib.data.proto.DedupProtos.Dedup value) { + if (dedupBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + dedup_ = value; + onChanged(); + } else { + dedupBuilder_.setMessage(value); + } + bitField0_ |= 0x00000004; + return this; + } + public Builder setDedup( + eu.dnetlib.data.proto.DedupProtos.Dedup.Builder builderForValue) { + if (dedupBuilder_ == null) { + dedup_ = builderForValue.build(); + onChanged(); + } else { + dedupBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000004; + return this; + } + public Builder mergeDedup(eu.dnetlib.data.proto.DedupProtos.Dedup value) { + if (dedupBuilder_ == null) { + if (((bitField0_ & 0x00000004) == 0x00000004) && + dedup_ != eu.dnetlib.data.proto.DedupProtos.Dedup.getDefaultInstance()) { + dedup_ = + eu.dnetlib.data.proto.DedupProtos.Dedup.newBuilder(dedup_).mergeFrom(value).buildPartial(); + } else { + dedup_ = value; + } + onChanged(); + } else { + dedupBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000004; + return this; + } + public Builder clearDedup() { + if (dedupBuilder_ == null) { + dedup_ = eu.dnetlib.data.proto.DedupProtos.Dedup.getDefaultInstance(); + onChanged(); + } else { + dedupBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000004); + return this; + } + public eu.dnetlib.data.proto.DedupProtos.Dedup.Builder getDedupBuilder() { + bitField0_ |= 0x00000004; + onChanged(); + return getDedupFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.DedupProtos.DedupOrBuilder getDedupOrBuilder() { + if (dedupBuilder_ != null) { + return dedupBuilder_.getMessageOrBuilder(); + } else { + return dedup_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.DedupProtos.Dedup, eu.dnetlib.data.proto.DedupProtos.Dedup.Builder, eu.dnetlib.data.proto.DedupProtos.DedupOrBuilder> + getDedupFieldBuilder() { + if (dedupBuilder_ == null) { + dedupBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.DedupProtos.Dedup, eu.dnetlib.data.proto.DedupProtos.Dedup.Builder, eu.dnetlib.data.proto.DedupProtos.DedupOrBuilder>( + dedup_, + getParentForChildren(), + isClean()); + dedup_ = null; + } + return dedupBuilder_; + } + + // optional .eu.dnetlib.data.proto.DedupSimilarity dedupSimilarity = 5; + private eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity dedupSimilarity_ = eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity, eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.Builder, eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarityOrBuilder> dedupSimilarityBuilder_; + public boolean hasDedupSimilarity() { + return ((bitField0_ & 0x00000008) == 0x00000008); + } + public eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity getDedupSimilarity() { + if (dedupSimilarityBuilder_ == null) { + return dedupSimilarity_; + } else { + return dedupSimilarityBuilder_.getMessage(); + } + } + public Builder setDedupSimilarity(eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity value) { + if (dedupSimilarityBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + dedupSimilarity_ = value; + onChanged(); + } else { + dedupSimilarityBuilder_.setMessage(value); + } + bitField0_ |= 0x00000008; + return this; + } + public Builder setDedupSimilarity( + eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.Builder builderForValue) { + if (dedupSimilarityBuilder_ == null) { + dedupSimilarity_ = builderForValue.build(); + onChanged(); + } else { + dedupSimilarityBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000008; + return this; + } + public Builder mergeDedupSimilarity(eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity value) { + if (dedupSimilarityBuilder_ == null) { + if (((bitField0_ & 0x00000008) == 0x00000008) && + dedupSimilarity_ != eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.getDefaultInstance()) { + dedupSimilarity_ = + eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.newBuilder(dedupSimilarity_).mergeFrom(value).buildPartial(); + } else { + dedupSimilarity_ = value; + } + onChanged(); + } else { + dedupSimilarityBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000008; + return this; + } + public Builder clearDedupSimilarity() { + if (dedupSimilarityBuilder_ == null) { + dedupSimilarity_ = eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.getDefaultInstance(); + onChanged(); + } else { + dedupSimilarityBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000008); + return this; + } + public eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.Builder getDedupSimilarityBuilder() { + bitField0_ |= 0x00000008; + onChanged(); + return getDedupSimilarityFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarityOrBuilder getDedupSimilarityOrBuilder() { + if (dedupSimilarityBuilder_ != null) { + return dedupSimilarityBuilder_.getMessageOrBuilder(); + } else { + return dedupSimilarity_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity, eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.Builder, eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarityOrBuilder> + getDedupSimilarityFieldBuilder() { + if (dedupSimilarityBuilder_ == null) { + dedupSimilarityBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity, eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.Builder, eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarityOrBuilder>( + dedupSimilarity_, + getParentForChildren(), + isClean()); + dedupSimilarity_ = null; + } + return dedupSimilarityBuilder_; + } + + // optional .eu.dnetlib.data.proto.ResultResult.Supplement supplement = 6; + private eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement supplement_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement.Builder, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SupplementOrBuilder> supplementBuilder_; + public boolean hasSupplement() { + return ((bitField0_ & 0x00000010) == 0x00000010); + } + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement getSupplement() { + if (supplementBuilder_ == null) { + return supplement_; + } else { + return supplementBuilder_.getMessage(); + } + } + public Builder setSupplement(eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement value) { + if (supplementBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + supplement_ = value; + onChanged(); + } else { + supplementBuilder_.setMessage(value); + } + bitField0_ |= 0x00000010; + return this; + } + public Builder setSupplement( + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement.Builder builderForValue) { + if (supplementBuilder_ == null) { + supplement_ = builderForValue.build(); + onChanged(); + } else { + supplementBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000010; + return this; + } + public Builder mergeSupplement(eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement value) { + if (supplementBuilder_ == null) { + if (((bitField0_ & 0x00000010) == 0x00000010) && + supplement_ != eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement.getDefaultInstance()) { + supplement_ = + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement.newBuilder(supplement_).mergeFrom(value).buildPartial(); + } else { + supplement_ = value; + } + onChanged(); + } else { + supplementBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000010; + return this; + } + public Builder clearSupplement() { + if (supplementBuilder_ == null) { + supplement_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement.getDefaultInstance(); + onChanged(); + } else { + supplementBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000010); + return this; + } + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement.Builder getSupplementBuilder() { + bitField0_ |= 0x00000010; + onChanged(); + return getSupplementFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SupplementOrBuilder getSupplementOrBuilder() { + if (supplementBuilder_ != null) { + return supplementBuilder_.getMessageOrBuilder(); + } else { + return supplement_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement.Builder, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SupplementOrBuilder> + getSupplementFieldBuilder() { + if (supplementBuilder_ == null) { + supplementBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement.Builder, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SupplementOrBuilder>( + supplement_, + getParentForChildren(), + isClean()); + supplement_ = null; + } + return supplementBuilder_; + } + + // optional .eu.dnetlib.data.proto.ResultResult.Part part = 7; + private eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part part_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part.Builder, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PartOrBuilder> partBuilder_; + public boolean hasPart() { + return ((bitField0_ & 0x00000020) == 0x00000020); + } + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part getPart() { + if (partBuilder_ == null) { + return part_; + } else { + return partBuilder_.getMessage(); + } + } + public Builder setPart(eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part value) { + if (partBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + part_ = value; + onChanged(); + } else { + partBuilder_.setMessage(value); + } + bitField0_ |= 0x00000020; + return this; + } + public Builder setPart( + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part.Builder builderForValue) { + if (partBuilder_ == null) { + part_ = builderForValue.build(); + onChanged(); + } else { + partBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000020; + return this; + } + public Builder mergePart(eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part value) { + if (partBuilder_ == null) { + if (((bitField0_ & 0x00000020) == 0x00000020) && + part_ != eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part.getDefaultInstance()) { + part_ = + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part.newBuilder(part_).mergeFrom(value).buildPartial(); + } else { + part_ = value; + } + onChanged(); + } else { + partBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000020; + return this; + } + public Builder clearPart() { + if (partBuilder_ == null) { + part_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part.getDefaultInstance(); + onChanged(); + } else { + partBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000020); + return this; + } + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part.Builder getPartBuilder() { + bitField0_ |= 0x00000020; + onChanged(); + return getPartFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PartOrBuilder getPartOrBuilder() { + if (partBuilder_ != null) { + return partBuilder_.getMessageOrBuilder(); + } else { + return part_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part.Builder, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PartOrBuilder> + getPartFieldBuilder() { + if (partBuilder_ == null) { + partBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part.Builder, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PartOrBuilder>( + part_, + getParentForChildren(), + isClean()); + part_ = null; + } + return partBuilder_; + } + + // optional .eu.dnetlib.data.proto.ResultResult.Relationship relationship = 8; + private eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship relationship_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship.Builder, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.RelationshipOrBuilder> relationshipBuilder_; + public boolean hasRelationship() { + return ((bitField0_ & 0x00000040) == 0x00000040); + } + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship getRelationship() { + if (relationshipBuilder_ == null) { + return relationship_; + } else { + return relationshipBuilder_.getMessage(); + } + } + public Builder setRelationship(eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship value) { + if (relationshipBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + relationship_ = value; + onChanged(); + } else { + relationshipBuilder_.setMessage(value); + } + bitField0_ |= 0x00000040; + return this; + } + public Builder setRelationship( + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship.Builder builderForValue) { + if (relationshipBuilder_ == null) { + relationship_ = builderForValue.build(); + onChanged(); + } else { + relationshipBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000040; + return this; + } + public Builder mergeRelationship(eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship value) { + if (relationshipBuilder_ == null) { + if (((bitField0_ & 0x00000040) == 0x00000040) && + relationship_ != eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship.getDefaultInstance()) { + relationship_ = + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship.newBuilder(relationship_).mergeFrom(value).buildPartial(); + } else { + relationship_ = value; + } + onChanged(); + } else { + relationshipBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000040; + return this; + } + public Builder clearRelationship() { + if (relationshipBuilder_ == null) { + relationship_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship.getDefaultInstance(); + onChanged(); + } else { + relationshipBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000040); + return this; + } + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship.Builder getRelationshipBuilder() { + bitField0_ |= 0x00000040; + onChanged(); + return getRelationshipFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.RelationshipOrBuilder getRelationshipOrBuilder() { + if (relationshipBuilder_ != null) { + return relationshipBuilder_.getMessageOrBuilder(); + } else { + return relationship_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship.Builder, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.RelationshipOrBuilder> + getRelationshipFieldBuilder() { + if (relationshipBuilder_ == null) { + relationshipBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship.Builder, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.RelationshipOrBuilder>( + relationship_, + getParentForChildren(), + isClean()); + relationship_ = null; + } + return relationshipBuilder_; + } + + // optional .eu.dnetlib.data.proto.ResultResult.SoftwareSoftware softwareSoftware = 9; + private eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware softwareSoftware_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware.Builder, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftwareOrBuilder> softwareSoftwareBuilder_; + public boolean hasSoftwareSoftware() { + return ((bitField0_ & 0x00000080) == 0x00000080); + } + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware getSoftwareSoftware() { + if (softwareSoftwareBuilder_ == null) { + return softwareSoftware_; + } else { + return softwareSoftwareBuilder_.getMessage(); + } + } + public Builder setSoftwareSoftware(eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware value) { + if (softwareSoftwareBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + softwareSoftware_ = value; + onChanged(); + } else { + softwareSoftwareBuilder_.setMessage(value); + } + bitField0_ |= 0x00000080; + return this; + } + public Builder setSoftwareSoftware( + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware.Builder builderForValue) { + if (softwareSoftwareBuilder_ == null) { + softwareSoftware_ = builderForValue.build(); + onChanged(); + } else { + softwareSoftwareBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000080; + return this; + } + public Builder mergeSoftwareSoftware(eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware value) { + if (softwareSoftwareBuilder_ == null) { + if (((bitField0_ & 0x00000080) == 0x00000080) && + softwareSoftware_ != eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware.getDefaultInstance()) { + softwareSoftware_ = + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware.newBuilder(softwareSoftware_).mergeFrom(value).buildPartial(); + } else { + softwareSoftware_ = value; + } + onChanged(); + } else { + softwareSoftwareBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000080; + return this; + } + public Builder clearSoftwareSoftware() { + if (softwareSoftwareBuilder_ == null) { + softwareSoftware_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware.getDefaultInstance(); + onChanged(); + } else { + softwareSoftwareBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000080); + return this; + } + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware.Builder getSoftwareSoftwareBuilder() { + bitField0_ |= 0x00000080; + onChanged(); + return getSoftwareSoftwareFieldBuilder().getBuilder(); + } + public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftwareOrBuilder getSoftwareSoftwareOrBuilder() { + if (softwareSoftwareBuilder_ != null) { + return softwareSoftwareBuilder_.getMessageOrBuilder(); + } else { + return softwareSoftware_; + } + } + private com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware.Builder, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftwareOrBuilder> + getSoftwareSoftwareFieldBuilder() { + if (softwareSoftwareBuilder_ == null) { + softwareSoftwareBuilder_ = new com.google.protobuf.SingleFieldBuilder< + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware.Builder, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftwareOrBuilder>( + softwareSoftware_, + getParentForChildren(), + isClean()); + softwareSoftware_ = null; + } + return softwareSoftwareBuilder_; + } + + // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.ResultResult) + } + + static { + defaultInstance = new ResultResult(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.ResultResult) + } + + private static com.google.protobuf.Descriptors.Descriptor + internal_static_eu_dnetlib_data_proto_ResultResult_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_eu_dnetlib_data_proto_ResultResult_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_eu_dnetlib_data_proto_ResultResult_Similarity_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_eu_dnetlib_data_proto_ResultResult_Similarity_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_eu_dnetlib_data_proto_ResultResult_PublicationDataset_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_eu_dnetlib_data_proto_ResultResult_PublicationDataset_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_eu_dnetlib_data_proto_ResultResult_Supplement_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_eu_dnetlib_data_proto_ResultResult_Supplement_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_eu_dnetlib_data_proto_ResultResult_Part_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_eu_dnetlib_data_proto_ResultResult_Part_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_eu_dnetlib_data_proto_ResultResult_SoftwareSoftware_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_eu_dnetlib_data_proto_ResultResult_SoftwareSoftware_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_eu_dnetlib_data_proto_ResultResult_Relationship_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_eu_dnetlib_data_proto_ResultResult_Relationship_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\023Result_Result.proto\022\025eu.dnetlib.data.p" + + "roto\032\021RelMetadata.proto\032\013Dedup.proto\032\025De" + + "dupSimilarity.proto\"\337\n\n\014ResultResult\022B\n\n" + + "similarity\030\002 \001(\0132..eu.dnetlib.data.proto" + + ".ResultResult.Similarity\022R\n\022publicationD" + + "ataset\030\003 \001(\01326.eu.dnetlib.data.proto.Res" + + "ultResult.PublicationDataset\022+\n\005dedup\030\004 " + + "\001(\0132\034.eu.dnetlib.data.proto.Dedup\022?\n\017ded" + + "upSimilarity\030\005 \001(\0132&.eu.dnetlib.data.pro" + + "to.DedupSimilarity\022B\n\nsupplement\030\006 \001(\0132.", + ".eu.dnetlib.data.proto.ResultResult.Supp" + + "lement\0226\n\004part\030\007 \001(\0132(.eu.dnetlib.data.p" + + "roto.ResultResult.Part\022F\n\014relationship\030\010" + + " \001(\01320.eu.dnetlib.data.proto.ResultResul" + + "t.Relationship\022N\n\020softwareSoftware\030\t \001(\013" + + "24.eu.dnetlib.data.proto.ResultResult.So" + + "ftwareSoftware\032\230\002\n\nSimilarity\0227\n\013relMeta" + + "data\030\001 \002(\0132\".eu.dnetlib.data.proto.RelMe" + + "tadata\022\022\n\nsimilarity\030\002 \001(\002\022K\n\004type\030\003 \001(\016" + + "23.eu.dnetlib.data.proto.ResultResult.Si", + "milarity.Type:\010STANDARD\"L\n\007RelName\022\037\n\033is" + + "AmongTopNSimilarDocuments\020\001\022 \n\034hasAmongT" + + "opNSimilarDocuments\020\002\"\"\n\004Type\022\014\n\010STANDAR" + + "D\020\001\022\014\n\010WEBUSAGE\020\002\032i\n\022PublicationDataset\022" + + "7\n\013relMetadata\030\001 \002(\0132\".eu.dnetlib.data.p" + + "roto.RelMetadata\"\032\n\007RelName\022\017\n\013isRelated" + + "To\020\001\032z\n\nSupplement\0227\n\013relMetadata\030\001 \002(\0132" + + "\".eu.dnetlib.data.proto.RelMetadata\"3\n\007R" + + "elName\022\022\n\016isSupplementTo\020\001\022\024\n\020isSuppleme" + + "ntedBy\020\002\032e\n\004Part\0227\n\013relMetadata\030\001 \002(\0132\".", + "eu.dnetlib.data.proto.RelMetadata\"$\n\007Rel" + + "Name\022\014\n\010isPartOf\020\001\022\013\n\007hasPart\020\002\032g\n\020Softw" + + "areSoftware\0227\n\013relMetadata\030\001 \002(\0132\".eu.dn" + + "etlib.data.proto.RelMetadata\"\032\n\007RelName\022" + + "\017\n\013isVersionOf\020\001\032c\n\014Relationship\0227\n\013relM" + + "etadata\030\001 \002(\0132\".eu.dnetlib.data.proto.Re" + + "lMetadata\"\032\n\007RelName\022\017\n\013isRelatedTo\020\001B+\n" + + "\025eu.dnetlib.data.protoB\022ResultResultProt" + + "os" + }; + com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = + new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { + public com.google.protobuf.ExtensionRegistry assignDescriptors( + com.google.protobuf.Descriptors.FileDescriptor root) { + descriptor = root; + internal_static_eu_dnetlib_data_proto_ResultResult_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_eu_dnetlib_data_proto_ResultResult_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_eu_dnetlib_data_proto_ResultResult_descriptor, + new java.lang.String[] { "Similarity", "PublicationDataset", "Dedup", "DedupSimilarity", "Supplement", "Part", "Relationship", "SoftwareSoftware", }, + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.class, + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Builder.class); + internal_static_eu_dnetlib_data_proto_ResultResult_Similarity_descriptor = + internal_static_eu_dnetlib_data_proto_ResultResult_descriptor.getNestedTypes().get(0); + internal_static_eu_dnetlib_data_proto_ResultResult_Similarity_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_eu_dnetlib_data_proto_ResultResult_Similarity_descriptor, + new java.lang.String[] { "RelMetadata", "Similarity", "Type", }, + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.class, + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.Builder.class); + internal_static_eu_dnetlib_data_proto_ResultResult_PublicationDataset_descriptor = + internal_static_eu_dnetlib_data_proto_ResultResult_descriptor.getNestedTypes().get(1); + internal_static_eu_dnetlib_data_proto_ResultResult_PublicationDataset_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_eu_dnetlib_data_proto_ResultResult_PublicationDataset_descriptor, + new java.lang.String[] { "RelMetadata", }, + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset.class, + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset.Builder.class); + internal_static_eu_dnetlib_data_proto_ResultResult_Supplement_descriptor = + internal_static_eu_dnetlib_data_proto_ResultResult_descriptor.getNestedTypes().get(2); + internal_static_eu_dnetlib_data_proto_ResultResult_Supplement_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_eu_dnetlib_data_proto_ResultResult_Supplement_descriptor, + new java.lang.String[] { "RelMetadata", }, + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement.class, + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement.Builder.class); + internal_static_eu_dnetlib_data_proto_ResultResult_Part_descriptor = + internal_static_eu_dnetlib_data_proto_ResultResult_descriptor.getNestedTypes().get(3); + internal_static_eu_dnetlib_data_proto_ResultResult_Part_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_eu_dnetlib_data_proto_ResultResult_Part_descriptor, + new java.lang.String[] { "RelMetadata", }, + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part.class, + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part.Builder.class); + internal_static_eu_dnetlib_data_proto_ResultResult_SoftwareSoftware_descriptor = + internal_static_eu_dnetlib_data_proto_ResultResult_descriptor.getNestedTypes().get(4); + internal_static_eu_dnetlib_data_proto_ResultResult_SoftwareSoftware_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_eu_dnetlib_data_proto_ResultResult_SoftwareSoftware_descriptor, + new java.lang.String[] { "RelMetadata", }, + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware.class, + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware.Builder.class); + internal_static_eu_dnetlib_data_proto_ResultResult_Relationship_descriptor = + internal_static_eu_dnetlib_data_proto_ResultResult_descriptor.getNestedTypes().get(5); + internal_static_eu_dnetlib_data_proto_ResultResult_Relationship_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_eu_dnetlib_data_proto_ResultResult_Relationship_descriptor, + new java.lang.String[] { "RelMetadata", }, + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship.class, + eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship.Builder.class); + return null; + } + }; + com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + eu.dnetlib.data.proto.RelMetadataProtos.getDescriptor(), + eu.dnetlib.data.proto.DedupProtos.getDescriptor(), + eu.dnetlib.data.proto.DedupSimilarityProtos.getDescriptor(), + }, assigner); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/SpecialTrustProtos.java b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/SpecialTrustProtos.java new file mode 100644 index 000000000..cb00e4679 --- /dev/null +++ b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/SpecialTrustProtos.java @@ -0,0 +1,109 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: SpecialTrust.proto + +package eu.dnetlib.data.proto; + +public final class SpecialTrustProtos { + private SpecialTrustProtos() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + } + public enum SpecialTrust + implements com.google.protobuf.ProtocolMessageEnum { + INFINITE(0, 1), + NEUTRAL(1, 2), + ; + + public static final int INFINITE_VALUE = 1; + public static final int NEUTRAL_VALUE = 2; + + + public final int getNumber() { return value; } + + public static SpecialTrust valueOf(int value) { + switch (value) { + case 1: return INFINITE; + case 2: return NEUTRAL; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static com.google.protobuf.Internal.EnumLiteMap + internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public SpecialTrust findValueByNumber(int number) { + return SpecialTrust.valueOf(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor + getValueDescriptor() { + return getDescriptor().getValues().get(index); + } + public final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptorForType() { + return getDescriptor(); + } + public static final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptor() { + return eu.dnetlib.data.proto.SpecialTrustProtos.getDescriptor().getEnumTypes().get(0); + } + + private static final SpecialTrust[] VALUES = { + INFINITE, NEUTRAL, + }; + + public static SpecialTrust valueOf( + com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "EnumValueDescriptor is not for this type."); + } + return VALUES[desc.getIndex()]; + } + + private final int index; + private final int value; + + private SpecialTrust(int index, int value) { + this.index = index; + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:eu.dnetlib.data.proto.SpecialTrust) + } + + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\022SpecialTrust.proto\022\025eu.dnetlib.data.pr" + + "oto*)\n\014SpecialTrust\022\014\n\010INFINITE\020\001\022\013\n\007NEU" + + "TRAL\020\002B+\n\025eu.dnetlib.data.protoB\022Special" + + "TrustProtos" + }; + com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = + new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { + public com.google.protobuf.ExtensionRegistry assignDescriptors( + com.google.protobuf.Descriptors.FileDescriptor root) { + descriptor = root; + return null; + } + }; + com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + }, assigner); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/TypeProtos.java b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/TypeProtos.java new file mode 100644 index 000000000..318fd7b9c --- /dev/null +++ b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/TypeProtos.java @@ -0,0 +1,118 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: Type.proto + +package eu.dnetlib.data.proto; + +public final class TypeProtos { + private TypeProtos() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + } + public enum Type + implements com.google.protobuf.ProtocolMessageEnum { + datasource(0, 10), + organization(1, 20), + person(2, 30), + project(3, 40), + result(4, 50), + ; + + public static final int datasource_VALUE = 10; + public static final int organization_VALUE = 20; + public static final int person_VALUE = 30; + public static final int project_VALUE = 40; + public static final int result_VALUE = 50; + + + public final int getNumber() { return value; } + + public static Type valueOf(int value) { + switch (value) { + case 10: return datasource; + case 20: return organization; + case 30: return person; + case 40: return project; + case 50: return result; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static com.google.protobuf.Internal.EnumLiteMap + internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public Type findValueByNumber(int number) { + return Type.valueOf(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor + getValueDescriptor() { + return getDescriptor().getValues().get(index); + } + public final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptorForType() { + return getDescriptor(); + } + public static final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptor() { + return eu.dnetlib.data.proto.TypeProtos.getDescriptor().getEnumTypes().get(0); + } + + private static final Type[] VALUES = { + datasource, organization, person, project, result, + }; + + public static Type valueOf( + com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "EnumValueDescriptor is not for this type."); + } + return VALUES[desc.getIndex()]; + } + + private final int index; + private final int value; + + private Type(int index, int value) { + this.index = index; + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:eu.dnetlib.data.proto.Type) + } + + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\nType.proto\022\025eu.dnetlib.data.proto*M\n\004T" + + "ype\022\016\n\ndatasource\020\n\022\020\n\014organization\020\024\022\n\n" + + "\006person\020\036\022\013\n\007project\020(\022\n\n\006result\0202B#\n\025eu" + + ".dnetlib.data.protoB\nTypeProtos" + }; + com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = + new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { + public com.google.protobuf.ExtensionRegistry assignDescriptors( + com.google.protobuf.Descriptors.FileDescriptor root) { + descriptor = root; + return null; + } + }; + com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + }, assigner); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Datasource.proto b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Datasource.proto new file mode 100644 index 000000000..c7cc4302e --- /dev/null +++ b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Datasource.proto @@ -0,0 +1,61 @@ +package eu.dnetlib.data.proto; + +import "FieldType.proto"; + +option java_package = "eu.dnetlib.data.proto"; +option java_outer_classname = "DatasourceProtos"; + +message Datasource { + + optional Metadata metadata = 2; + + message Metadata { + + // common fields + optional Qualifier datasourcetype = 15; + optional Qualifier openairecompatibility = 17; + + optional StringField officialname = 1; + optional StringField englishname = 2; + optional StringField websiteurl = 3; + optional StringField logourl = 4; + optional StringField contactemail = 5; + optional StringField namespaceprefix = 7; + + optional StringField latitude = 18; + optional StringField longitude = 19; + optional StringField dateofvalidation = 20; + optional StringField description = 21; + + repeated StructuredProperty subjects = 45; + + // opendoar specific fields (od*) + optional StringField odnumberofitems = 9; + optional StringField odnumberofitemsdate = 10; + optional StringField odpolicies = 12; + + repeated StringField odlanguages = 13; + repeated StringField odcontenttypes = 14; + repeated StringField accessinfopackage = 6; + + // re3data fields + optional StringField releasestartdate = 31; + optional StringField releaseenddate = 32; + optional StringField missionstatementurl = 33; + optional BoolField dataprovider = 34; + optional BoolField serviceprovider = 35; + optional StringField databaseaccesstype = 36; // {open, restricted or closed} + optional StringField datauploadtype = 37; // {open, restricted or closed} + optional StringField databaseaccessrestriction = 38; // {feeRequired, registration, other} + optional StringField datauploadrestriction = 39; // {feeRequired, registration, other} + optional BoolField versioning = 40; + optional StringField citationguidelineurl = 41; + optional StringField qualitymanagementkind = 42; // {yes, no, uknown} + optional StringField pidsystems = 43; + optional StringField certificates = 44; + + repeated KeyValue policies = 46; + + } + +} diff --git a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Datasource_Organization.proto b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Datasource_Organization.proto new file mode 100644 index 000000000..f3276cb1c --- /dev/null +++ b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Datasource_Organization.proto @@ -0,0 +1,23 @@ +package eu.dnetlib.data.proto; + +import "RelMetadata.proto"; + +option java_package = "eu.dnetlib.data.proto"; +option java_outer_classname = "DatasourceOrganizationProtos"; + +message DatasourceOrganization { + + optional Provision provision = 1; + + message Provision { + + enum RelName { + isProvidedBy = 1; + provides = 2; + } + + required RelMetadata relMetadata = 1; + + } + +} \ No newline at end of file diff --git a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Dedup.proto b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Dedup.proto new file mode 100644 index 000000000..c86b3dec5 --- /dev/null +++ b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Dedup.proto @@ -0,0 +1,16 @@ +package eu.dnetlib.data.proto; + +import "RelMetadata.proto"; + +option java_package = "eu.dnetlib.data.proto"; +option java_outer_classname = "DedupProtos"; + +message Dedup { + + enum RelName { + isMergedIn = 1; + merges = 2; + } + + required RelMetadata relMetadata = 1; +} diff --git a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/DedupSimilarity.proto b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/DedupSimilarity.proto new file mode 100644 index 000000000..1ad2381a4 --- /dev/null +++ b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/DedupSimilarity.proto @@ -0,0 +1,16 @@ +package eu.dnetlib.data.proto; + +import "RelMetadata.proto"; + +option java_package = "eu.dnetlib.data.proto"; +option java_outer_classname = "DedupSimilarityProtos"; + +message DedupSimilarity { + + enum RelName { + isSimilarTo = 1; + } + + required RelMetadata relMetadata = 1; + +} diff --git a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/FieldType.proto b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/FieldType.proto new file mode 100644 index 000000000..d904895e2 --- /dev/null +++ b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/FieldType.proto @@ -0,0 +1,104 @@ +package eu.dnetlib.data.proto; + +option java_package = "eu.dnetlib.data.proto"; +option java_outer_classname = "FieldTypeProtos"; + +message StringField { + + required string value = 1; + optional DataInfo dataInfo = 2; +} + +message BoolField { + + required bool value = 1; + optional DataInfo dataInfo = 2; +} + +message IntField { + + required int32 value = 1; + optional DataInfo dataInfo = 2; +} + +message StructuredProperty { + + required string value = 1; + optional Qualifier qualifier = 2; + optional DataInfo dataInfo = 3; +} + +// Generic container for identified values, e.g: +// +// +message KeyValue { + + required string key = 1; + optional string value = 2; + + optional DataInfo dataInfo = 3; +} + +message Qualifier { + + optional string classid = 1; + optional string classname = 2; + optional string schemeid = 3; + optional string schemename = 4; + + optional DataInfo dataInfo = 5; +} + +message DataInfo { + + optional bool invisible = 6 [default = false]; + optional bool inferred = 1; + optional bool deletedbyinference = 2; + optional string trust = 3; + optional string inferenceprovenance = 4; + + required Qualifier provenanceaction = 5; +} + +message OAIProvenance { + + optional OriginDescription originDescription = 1; + + message OriginDescription { + + optional string harvestDate = 1; + optional bool altered = 2 [default = true]; + + optional string baseURL = 3; + optional string identifier = 4; + optional string datestamp = 5; + optional string metadataNamespace = 6; + + optional OriginDescription originDescription = 7; + } +} + +message ExtraInfo { + + required string name = 1; + required string typology = 2; + required string provenance = 3; + optional string trust = 4; + + // json containing a Citation or Statistics + optional string value = 5; + +} + +message Author { + + required string fullname = 1; + + optional string name = 2; + optional string surname = 3; + + required int32 rank = 4; + + repeated KeyValue pid = 5; + repeated StringField affiliation = 6; +} diff --git a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Kind.proto b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Kind.proto new file mode 100644 index 000000000..a1bf26740 --- /dev/null +++ b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Kind.proto @@ -0,0 +1,9 @@ +package eu.dnetlib.data.proto; + +option java_package = "eu.dnetlib.data.proto"; +option java_outer_classname = "KindProtos"; + +enum Kind { + entity = 1; + relation = 2; +} diff --git a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/OafParent.proto b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/OafParent.proto new file mode 100644 index 000000000..a5e2793a7 --- /dev/null +++ b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/OafParent.proto @@ -0,0 +1,97 @@ +package eu.dnetlib.data.proto; + +import "Kind.proto"; +import "FieldType.proto"; + +// for Oafentity +import "Type.proto"; +import "Datasource.proto"; +import "Organization.proto"; +import "Project.proto"; +import "Result.proto"; + +import "Person.proto"; + +// for OafRel +import "RelType.proto"; +import "Datasource_Organization.proto"; +import "Project_Organization.proto"; +import "Result_Organization.proto"; +import "Result_Project.proto"; +import "Result_Result.proto"; +import "Organization_Organization.proto"; + +option java_package = "eu.dnetlib.data.proto"; +option java_outer_classname = "OafProtos"; + +message Oaf { + required Kind kind = 1; + + optional OafEntity entity = 2; + optional OafRel rel = 3; + + optional DataInfo dataInfo = 4; + + // used to mark the last update time of this object + optional sfixed64 lastupdatetimestamp = 5; +} + +message OafEntity { + required Type type = 1; + required string id = 12; + + repeated string originalId = 8; + repeated KeyValue collectedfrom = 9; + + repeated StructuredProperty pid = 10; + optional string dateofcollection = 11; + optional string dateoftransformation = 13; + + /* Any relation that we want to bundle together with this entity. + It's intended to be used only in temporary values in map/red jobs (sequence files, ...) + and never persisted values stored in HBase. */ + repeated OafRel cachedRel = 2; + repeated Oaf cachedOafRel = 18; + + optional Datasource datasource = 3; + optional Organization organization = 4; + optional Project project = 6; + optional Result result = 7; + + optional Person person = 5; + + repeated OafEntity children = 16; + + repeated ExtraInfo extraInfo = 15; + + optional OAIProvenance oaiprovenance = 17; +} + + +message OafRel { + required RelType relType = 1; + required SubRelType subRelType = 19; + required string relClass = 20; // one among the SubRel names, e.g. Provision.RelName.isProvidedBy + + required string source = 2; + required string target = 3; + + /* if true then is a "child" */ + required bool child = 4; + + optional OafEntity cachedTarget = 5; + + // needed to have more information that is not included in cachedTarget. + optional Oaf cachedOafTarget = 8; + + // Datamodel rels + optional DatasourceOrganization datasourceOrganization = 6; + optional ProjectOrganization projectOrganization = 9; + optional ResultOrganization resultOrganization = 10; + optional ResultProject resultProject = 11; + optional ResultResult resultResult = 16; + optional OrganizationOrganization organizationOrganization = 17; + + repeated KeyValue collectedfrom = 21; + +} diff --git a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Organization.proto b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Organization.proto new file mode 100644 index 000000000..088f14d33 --- /dev/null +++ b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Organization.proto @@ -0,0 +1,33 @@ +package eu.dnetlib.data.proto; + +import "FieldType.proto"; + +option java_package = "eu.dnetlib.data.proto"; +option java_outer_classname = "OrganizationProtos"; + +message Organization { + + optional Metadata metadata = 2; + + message Metadata { + optional StringField legalshortname = 1; + optional StringField legalname = 2; + repeated StringField alternativeNames = 17; + optional StringField websiteurl = 3; + optional StringField logourl = 4; + optional StringField eclegalbody = 5; + optional StringField eclegalperson = 6; + optional StringField ecnonprofit = 7; + optional StringField ecresearchorganization = 8; + optional StringField echighereducation = 9; + optional StringField ecinternationalorganizationeurinterests = 10; + optional StringField ecinternationalorganization = 11; + optional StringField ecenterprise = 12; + optional StringField ecsmevalidated = 13; + optional StringField ecnutscode = 14; + + optional Qualifier country = 16; + + } + +} diff --git a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Organization_Organization.proto b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Organization_Organization.proto new file mode 100644 index 000000000..48c7cc1d8 --- /dev/null +++ b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Organization_Organization.proto @@ -0,0 +1,15 @@ +package eu.dnetlib.data.proto; + +import "RelMetadata.proto"; +import "Dedup.proto"; +import "DedupSimilarity.proto"; + +option java_package = "eu.dnetlib.data.proto"; +option java_outer_classname = "OrganizationOrganizationProtos"; + +message OrganizationOrganization { + + optional Dedup dedup = 1; + optional DedupSimilarity dedupSimilarity = 2; + +} \ No newline at end of file diff --git a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Person.proto b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Person.proto new file mode 100644 index 000000000..3e6e915aa --- /dev/null +++ b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Person.proto @@ -0,0 +1,25 @@ +package eu.dnetlib.data.proto; + +import "FieldType.proto"; + +option java_package = "eu.dnetlib.data.proto"; +option java_outer_classname = "PersonProtos"; + +message Person { + + optional Metadata metadata = 2; + + message Metadata { + required string fullname = 1; + optional string firstname = 2; + optional string lastname = 3; + required string pubID = 4; + optional string pubDOI = 5; + optional string orcid = 6; + required int32 rank = 7; + + repeated string coauthors = 8; + repeated double topics = 9; + required string area = 10; + } +} \ No newline at end of file diff --git a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Project.proto b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Project.proto new file mode 100644 index 000000000..b1f44bb09 --- /dev/null +++ b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Project.proto @@ -0,0 +1,42 @@ +package eu.dnetlib.data.proto; + +import "FieldType.proto"; + +option java_package = "eu.dnetlib.data.proto"; +option java_outer_classname = "ProjectProtos"; + +message Project { + + optional Metadata metadata = 2; + + message Metadata { + + optional StringField websiteurl = 1; + optional StringField code = 2; + optional StringField acronym = 3; + optional StringField title = 4; + optional StringField startdate = 5; + optional StringField enddate = 6; + optional StringField callidentifier = 7; + optional StringField keywords = 8; + optional StringField duration = 9; + optional StringField ecsc39 = 10; + optional StringField oamandatepublications = 11; + optional StringField ecarticle29_3 = 12; + repeated StructuredProperty subjects = 14; + + repeated StringField fundingtree = 15; + + optional Qualifier contracttype = 13; + + optional StringField optional1 = 16; + optional StringField optional2 = 17; + optional StringField jsonextrainfo = 18; + + optional StringField contactfullname = 19; + optional StringField contactfax = 20; + optional StringField contactphone = 21; + optional StringField contactemail = 22; + } + +} diff --git a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Project_Organization.proto b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Project_Organization.proto new file mode 100644 index 000000000..7d1a76e7f --- /dev/null +++ b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Project_Organization.proto @@ -0,0 +1,23 @@ +package eu.dnetlib.data.proto; + +import "RelMetadata.proto"; + +option java_package = "eu.dnetlib.data.proto"; +option java_outer_classname = "ProjectOrganizationProtos"; + +message ProjectOrganization { + + optional Participation participation = 1; + + message Participation { + + enum RelName { + isParticipant = 1; + hasParticipant = 2; + } + + required RelMetadata relMetadata = 1; + optional string participantnumber = 2; + } + +} \ No newline at end of file diff --git a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/RelMetadata.proto b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/RelMetadata.proto new file mode 100644 index 000000000..46bbef060 --- /dev/null +++ b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/RelMetadata.proto @@ -0,0 +1,15 @@ +package eu.dnetlib.data.proto; + +import "FieldType.proto"; + +option java_package = "eu.dnetlib.data.proto"; +option java_outer_classname = "RelMetadataProtos"; + +message RelMetadata { + + optional Qualifier semantics = 1; + + optional string startdate = 3; + optional string enddate = 4; + +} \ No newline at end of file diff --git a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/RelType.proto b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/RelType.proto new file mode 100644 index 000000000..0d020ef78 --- /dev/null +++ b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/RelType.proto @@ -0,0 +1,36 @@ +package eu.dnetlib.data.proto; + +option java_package = "eu.dnetlib.data.proto"; +option java_outer_classname = "RelTypeProtos"; + +enum RelType { + + // Datamodel rels + datasourceOrganization = 1; + projectOrganization = 4; + resultOrganization = 5; + resultProject = 6; + resultResult = 9; + organizationOrganization = 11; + +} + +enum SubRelType { + + provision = 1; // datasourceOrganization + participation = 4; // projectOrganization + outcome = 6; // resultProject + similarity = 8; // resultResult + publicationDataset = 9; // resultResult + affiliation = 12; // resultOrganizaiton + + dedup = 10; // resultResult | organizationOrganization + dedupSimilarity = 11; // resultResult | organizationOrganization + + supplement = 13; // resultResult + part = 15; // resultResult + + version = 16; // resultResult + + relationship = 17; // catch all +} diff --git a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Result.proto b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Result.proto new file mode 100644 index 000000000..e015ecdc9 --- /dev/null +++ b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Result.proto @@ -0,0 +1,128 @@ +package eu.dnetlib.data.proto; + +import "FieldType.proto"; + +option java_package = "eu.dnetlib.data.proto"; +option java_outer_classname = "ResultProtos"; + +message Result { + + optional Metadata metadata = 2; + + repeated Instance instance = 6; + + repeated ExternalReference externalReference = 7; + + message Metadata { + + repeated Author author = 40; + + // resulttype allows subclassing results into publications | datasets | software + optional Qualifier resulttype = 8; + + // common fields + optional Qualifier language = 12; + repeated Qualifier country = 33; + + repeated StructuredProperty subject = 1; + repeated StructuredProperty title = 2; + repeated StructuredProperty relevantdate = 3; + + repeated StringField description = 25; + optional StringField dateofacceptance = 4; + optional StringField publisher = 5; + optional StringField embargoenddate = 6; + repeated StringField source = 27; + repeated StringField fulltext = 29; // remove candidate + repeated StringField format = 21; + repeated StringField contributor = 30; + optional Qualifier resourcetype = 19; + repeated StringField coverage = 43; + + repeated Context context = 28; + + // publication specific + optional Journal journal = 18; + + // dataset specific + optional StringField storagedate = 9; + optional StringField device = 26; + optional StringField size = 20; + optional StringField version = 22; + optional StringField lastmetadataupdate = 23; + optional StringField metadataversionnumber = 24; + repeated GeoLocation geolocation = 44; + + // software specific + repeated StringField documentationUrl = 35; + repeated StructuredProperty license = 36; + optional StringField codeRepositoryUrl = 38; + optional Qualifier programmingLanguage = 39; + + // other research products specifics + repeated StringField contactperson = 45; + repeated StringField contactgroup = 41; + repeated StringField tool = 42; + + } + + message Journal { + optional string name = 1; + optional string issnPrinted = 2; + optional string issnOnline = 3; + optional string issnLinking = 4; + + optional string ep = 6; + optional string iss = 7; + optional string sp = 8; + optional string vol = 9; + + optional string edition = 10; + optional string conferenceplace = 11; + optional string conferencedate = 12; + + optional DataInfo dataInfo = 5; + } + + // + message Context { + required string id = 1; + repeated DataInfo dataInfo = 2; + } + + message Instance { + + optional StringField license = 6; + optional Qualifier accessright = 3; + optional Qualifier instancetype = 4; + + optional KeyValue hostedby = 5; + repeated string url = 9; + + // other research products specific + optional string distributionlocation = 12; + + optional KeyValue collectedfrom = 10; + optional StringField dateofacceptance = 11; + } + + message ExternalReference { + + optional string sitename = 1; // source + optional string label = 2; // title + optional string url = 3; // text() + optional string description = 4; // ?? not mapped yet ?? + optional Qualifier qualifier = 5; // type + optional string refidentifier = 6; // site internal identifier + optional string query = 7; // maps the oaf:reference/@query attribute + optional DataInfo dataInfo = 8; // ExternalReferences might be also inferred + } + + message GeoLocation { + + optional string point = 1; + optional string box = 2; + optional string place = 3; + } + +} diff --git a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Result_Organization.proto b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Result_Organization.proto new file mode 100644 index 000000000..974cc0702 --- /dev/null +++ b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Result_Organization.proto @@ -0,0 +1,23 @@ +package eu.dnetlib.data.proto; + +import "RelMetadata.proto"; + +option java_package = "eu.dnetlib.data.proto"; +option java_outer_classname = "ResultOrganizationProtos"; + +message ResultOrganization { + + optional Affiliation affiliation = 1; + + message Affiliation { + + enum RelName { + isAuthorInstitutionOf = 1; // Organization --> Result + hasAuthorInstitution = 2; // Result --> Organization + } + + required RelMetadata relMetadata = 1; + + } + +} diff --git a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Result_Project.proto b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Result_Project.proto new file mode 100644 index 000000000..cb76666d4 --- /dev/null +++ b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Result_Project.proto @@ -0,0 +1,23 @@ +package eu.dnetlib.data.proto; + +import "RelMetadata.proto"; + +option java_package = "eu.dnetlib.data.proto"; +option java_outer_classname = "ResultProjectProtos"; + +message ResultProject { + + optional Outcome outcome = 1; + + message Outcome { + + enum RelName { + isProducedBy = 1; + produces = 2; + } + + required RelMetadata relMetadata = 1; + + } + +} diff --git a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Result_Result.proto b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Result_Result.proto new file mode 100644 index 000000000..d0166a45a --- /dev/null +++ b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Result_Result.proto @@ -0,0 +1,94 @@ +package eu.dnetlib.data.proto; + +import "RelMetadata.proto"; +import "Dedup.proto"; +import "DedupSimilarity.proto"; + +option java_package = "eu.dnetlib.data.proto"; +option java_outer_classname = "ResultResultProtos"; + +message ResultResult { + + //choice of the possible subtypes + optional Similarity similarity = 2; + optional PublicationDataset publicationDataset = 3; + optional Dedup dedup = 4; + optional DedupSimilarity dedupSimilarity = 5; + + optional Supplement supplement = 6; + optional Part part = 7; + + optional Relationship relationship = 8; + + optional SoftwareSoftware softwareSoftware = 9; + + message Similarity { + + enum RelName { + isAmongTopNSimilarDocuments = 1; + hasAmongTopNSimilarDocuments = 2; + } + + required RelMetadata relMetadata = 1; + + // level of similarity: coefficient from [0, 1] range, + // the greater the number, the more similar the documents + optional float similarity = 2; + + enum Type { + STANDARD = 1; + WEBUSAGE = 2; + } + + // similarity type + optional Type type = 3 [default = STANDARD]; + } + + message PublicationDataset { + + enum RelName { + isRelatedTo = 1; + } + + required RelMetadata relMetadata = 1; + } + + message Supplement { + + enum RelName { + isSupplementTo = 1; + isSupplementedBy = 2; + } + + required RelMetadata relMetadata = 1; + } + + message Part { + + enum RelName { + isPartOf = 1; + hasPart = 2; + } + + required RelMetadata relMetadata = 1; + } + + message SoftwareSoftware { + + enum RelName { + isVersionOf = 1; + } + + required RelMetadata relMetadata = 1; + } + + message Relationship { + + enum RelName { + isRelatedTo = 1; + } + + required RelMetadata relMetadata = 1; + } + +} diff --git a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/SpecialTrust.proto b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/SpecialTrust.proto new file mode 100644 index 000000000..2e5b2d4f6 --- /dev/null +++ b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/SpecialTrust.proto @@ -0,0 +1,9 @@ +package eu.dnetlib.data.proto; + +option java_package = "eu.dnetlib.data.proto"; +option java_outer_classname = "SpecialTrustProtos"; + +enum SpecialTrust { + INFINITE = 1; + NEUTRAL = 2; +} \ No newline at end of file diff --git a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Type.proto b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Type.proto new file mode 100644 index 000000000..e01995c0e --- /dev/null +++ b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Type.proto @@ -0,0 +1,13 @@ +package eu.dnetlib.data.proto; + +option java_package = "eu.dnetlib.data.proto"; +option java_outer_classname = "TypeProtos"; + +// entity tags are used as rowkey prefixes on hbase +enum Type { + datasource = 10; + organization = 20; + person = 30; + project = 40; + result = 50; +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonClustering.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonClustering.java index 67b7dcd58..718b88d14 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonClustering.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonClustering.java @@ -1,25 +1,17 @@ package eu.dnetlib.pace.clustering; -import java.io.Serializable; +import com.google.common.collect.Sets; +import eu.dnetlib.pace.common.AbstractPaceFunctions; +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.Person; +import org.apache.commons.lang.StringUtils; + import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Set; -import eu.dnetlib.pace.model.FieldList; -import eu.dnetlib.pace.model.FieldValue; -import org.apache.commons.lang.StringUtils; - -import com.google.common.base.Splitter; -import com.google.common.collect.Iterables; -import com.google.common.collect.Sets; - -import eu.dnetlib.pace.common.AbstractPaceFunctions; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.model.gt.Author; -import eu.dnetlib.pace.model.gt.GTAuthor; - -@ClusteringClass("personclustering") +@ClusteringClass("personClustering") public class PersonClustering extends AbstractPaceFunctions implements ClusteringFunction { private Map params; @@ -36,14 +28,13 @@ public class PersonClustering extends AbstractPaceFunctions implements Clusterin for (final Field f : fields) { - final GTAuthor gta = GTAuthor.fromOafJson(f.stringValue()); + final Person person = new Person(f.stringValue(), false); - final Author a = gta.getAuthor(); - if (a.isWellFormed()) { - hashes.add(firstLC(a.getFirstname()) + a.getSecondnames().toLowerCase()); + if (StringUtils.isNotBlank(person.getNormalisedFirstName()) && StringUtils.isNotBlank(person.getNormalisedSurname())) { + hashes.add(firstLC(person.getNormalisedFirstName()) + person.getNormalisedSurname().toLowerCase()); } else { - for (final String token1 : tokens(a.getFullname())) { - for (final String token2 : tokens(a.getFullname())) { + for (final String token1 : tokens(f.stringValue(), MAX_TOKENS)) { + for (final String token2 : tokens(f.stringValue(), MAX_TOKENS)) { if (!token1.equals(token2)) { hashes.add(firstLC(token1) + token2); } @@ -55,13 +46,31 @@ public class PersonClustering extends AbstractPaceFunctions implements Clusterin return hashes; } - private String firstLC(final String s) { - return StringUtils.substring(s, 0, 1).toLowerCase(); - } - - private Iterable tokens(final String s) { - return Iterables.limit(Splitter.on(" ").omitEmptyStrings().trimResults().split(s), MAX_TOKENS); - } +// @Override +// public Collection apply(final List fields) { +// final Set hashes = Sets.newHashSet(); +// +// for (final Field f : fields) { +// +// final GTAuthor gta = GTAuthor.fromOafJson(f.stringValue()); +// +// final Author a = gta.getAuthor(); +// +// if (StringUtils.isNotBlank(a.getFirstname()) && StringUtils.isNotBlank(a.getSecondnames())) { +// hashes.add(firstLC(a.getFirstname()) + a.getSecondnames().toLowerCase()); +// } else { +// for (final String token1 : tokens(f.stringValue(), MAX_TOKENS)) { +// for (final String token2 : tokens(f.stringValue(), MAX_TOKENS)) { +// if (!token1.equals(token2)) { +// hashes.add(firstLC(token1) + token2); +// } +// } +// } +// } +// } +// +// return hashes; +// } @Override public Map getParams() { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java index f987e1208..c08cae97d 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java @@ -1,6 +1,7 @@ package eu.dnetlib.pace.common; import com.google.common.base.Joiner; +import com.google.common.base.Splitter; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.google.common.collect.Sets; @@ -12,7 +13,6 @@ import eu.dnetlib.pace.model.FieldListImpl; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.io.IOUtils; import org.apache.commons.lang.StringUtils; -import org.apache.commons.math3.stat.descriptive.SummaryStatistics; import java.text.Normalizer; import java.util.*; @@ -258,4 +258,13 @@ public abstract class AbstractPaceFunctions { return codes; } + protected String firstLC(final String s) { + return StringUtils.substring(s, 0, 1).toLowerCase(); + } + + protected Iterable tokens(final String s, final int maxTokens) { + return Iterables.limit(Splitter.on(" ").omitEmptyStrings().trimResults().split(s), maxTokens); + } + + } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java index 4666db7ab..1f6cdc049 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java @@ -1,20 +1,21 @@ package eu.dnetlib.pace.config; -import java.io.Serializable; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - import com.google.common.collect.Lists; import com.google.common.collect.Maps; import eu.dnetlib.pace.condition.ConditionAlgo; import eu.dnetlib.pace.model.ClusteringDef; import eu.dnetlib.pace.model.CondDef; import eu.dnetlib.pace.model.FieldDef; +import eu.dnetlib.pace.model.TreeNodeDef; import eu.dnetlib.pace.util.PaceResolver; import org.apache.commons.collections.CollectionUtils; import org.codehaus.jackson.annotate.JsonIgnore; +import java.io.Serializable; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + public class PaceConfig implements Serializable { private List model; @@ -23,6 +24,8 @@ public class PaceConfig implements Serializable { private List clustering; private Map> blacklists; + private Map decisionTree; + private Map modelMap; public static PaceResolver paceResolver; @@ -58,6 +61,14 @@ public class PaceConfig implements Serializable { return conditions; } + public Map getDecisionTree() { + return decisionTree; + } + + public void setDecisionTree(Map decisionTree) { + this.decisionTree = decisionTree; + } + @JsonIgnore public List getConditionAlgos() { return asConditionAlgos(getConditions()); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldList.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldList.java index 3b771fa67..b1f5422b7 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldList.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldList.java @@ -14,4 +14,11 @@ public interface FieldList extends List, Field { */ public List stringList(); + /** + * Double[] Array + * + * @return the double[] array + */ + public double[] doubleArray(); + } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldListImpl.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldListImpl.java index 17d0cae06..ee593b533 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldListImpl.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldListImpl.java @@ -1,21 +1,18 @@ package eu.dnetlib.pace.model; -import java.util.Collection; -import java.util.Iterator; -import java.util.List; -import java.util.ListIterator; - import com.google.common.base.Function; import com.google.common.base.Joiner; import com.google.common.base.Predicate; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; - import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.JsonObject; import eu.dnetlib.pace.config.Type; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.ListIterator; + /** * The Class FieldListImpl. */ @@ -319,6 +316,21 @@ public class FieldListImpl extends AbstractField implements FieldList { }; } + @Override + public double[] doubleArray() { + return Lists.newArrayList(Iterables.transform(fields, getDouble())).stream().mapToDouble(d-> d).toArray(); + } + + private Function getDouble() { + + return new Function() { + @Override + public Double apply(final Field f) { + return Double.parseDouble(f.stringValue()); + } + }; + } + @Override public String toString() { return stringList().toString(); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/TreeNodeDef.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/TreeNodeDef.java new file mode 100644 index 000000000..61b68b30e --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/TreeNodeDef.java @@ -0,0 +1,100 @@ +package eu.dnetlib.pace.model; + +import eu.dnetlib.pace.config.PaceConfig; +import eu.dnetlib.pace.tree.TreeNode; +import eu.dnetlib.pace.util.PaceException; +import org.codehaus.jackson.map.ObjectMapper; + +import java.io.IOException; +import java.io.Serializable; +import java.util.Map; + +public class TreeNodeDef implements Serializable { + + private String name; + private String field; + + private String positive; + private String negative; + private String undefined; + + private Map params; + + public TreeNodeDef() { + } + + public TreeNodeDef(String name, String field, String positive, String negative, String undefined, Map params) { + this.name = name; + this.field = field; + this.positive = positive; + this.negative = negative; + this.undefined = undefined; + this.params = params; + } + + public TreeNode treeNode() { + try { + return PaceConfig.paceResolver.getTreeNode(getName(), params); + } catch (PaceException e) { + e.printStackTrace(); + return null; + } + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getField() { + return field; + } + + public void setField(String field) { + this.field = field; + } + + public String getPositive() { + return positive; + } + + public void setPositive(String positive) { + this.positive = positive; + } + + public String getNegative() { + return negative; + } + + public void setNegative(String negative) { + this.negative = negative; + } + + public String getUndefined() { + return undefined; + } + + public void setUndefined(String undefined) { + this.undefined = undefined; + } + + public Map getParams() { + return params; + } + + public void setParams(Map params) { + this.params = params; + } + + @Override + public String toString() { + try { + return new ObjectMapper().writeValueAsString(this); + } catch (IOException e) { + return e.getStackTrace().toString(); + } + } +} \ No newline at end of file diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AbstractTreeNode.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AbstractTreeNode.java new file mode 100644 index 000000000..230ec227c --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AbstractTreeNode.java @@ -0,0 +1,33 @@ +package eu.dnetlib.pace.tree; + +import eu.dnetlib.pace.model.Field; +import org.apache.commons.lang.StringUtils; + +import java.util.Map; + +public class AbstractTreeNode implements TreeNode { + + Map params; + + public AbstractTreeNode(Map params){ + this.params = params; + } + + @Override + public int compare(Field a, Field b) { + return 0; + } + + public static double stringSimilarity(String s1, String s2) { + String longer = s1, shorter = s2; + if (s1.length() < s2.length()) { // longer should always have greater length + longer = s2; shorter = s1; + } + int longerLength = longer.length(); + if (longerLength == 0) //if strings have 0 length return 0 (no similarity) + return 0.0; + + return (longerLength - StringUtils.getLevenshteinDistance(longer, shorter)) / (double) longerLength; + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/CoauthorsMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/CoauthorsMatch.java new file mode 100644 index 000000000..45bc32af1 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/CoauthorsMatch.java @@ -0,0 +1,46 @@ +package eu.dnetlib.pace.tree; + +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.FieldList; + +import java.util.List; +import java.util.Map; + +@TreeNodeClass("coauthorsMatch") +public class CoauthorsMatch extends AbstractTreeNode { + + public CoauthorsMatch(Map params) { + super(params); + } + + @Override + public int compare(Field a, Field b) { + + final List c1 = ((FieldList) a).stringList(); + final List c2 = ((FieldList) b).stringList(); + + int size1 = c1.size(); + int size2 = c2.size(); + + //few coauthors or too many coauthors + if (size1 < params.getOrDefault("minCoauthors", 5).intValue() || size2 < params.getOrDefault("minCoauthors", 5).intValue() || (size1+size2 > params.getOrDefault("maxCoauthors", 200).intValue())) + return 0; + + int coauthorship = 0; + for (String ca1: c1){ + + for (String ca2: c2){ + + if (stringSimilarity(ca1.replaceAll("\\.","").replaceAll(" ",""), ca2.replaceAll("\\.","").replaceAll(" ",""))>= params.getOrDefault("simTh", 0.7).doubleValue()) + coauthorship++; + } + } + + if (coauthorship>=params.getOrDefault("th", 5).intValue()) + return 1; + else if (coauthorship == 0) + return -1; + else + return 0; + } +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatch.java new file mode 100644 index 000000000..b03bae6ec --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatch.java @@ -0,0 +1,25 @@ +package eu.dnetlib.pace.tree; + +import eu.dnetlib.pace.model.Field; + +import java.util.Map; + +@TreeNodeClass("exactMatch") +public class ExactMatch extends AbstractTreeNode { + + public ExactMatch(Map params) { + super(params); + } + + @Override + public int compare(Field a, Field b) { + + if (a.stringValue().isEmpty() || b.stringValue().isEmpty()) + return 0; + else if (a.stringValue().equals(b.stringValue())) + return 1; + else + return -1; + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SimilarMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SimilarMatch.java new file mode 100644 index 000000000..fd52db2b9 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SimilarMatch.java @@ -0,0 +1,36 @@ +package eu.dnetlib.pace.tree; + +import eu.dnetlib.pace.model.Field; + +import java.util.Map; + +@TreeNodeClass("similar") +public class SimilarMatch extends AbstractTreeNode { + + public SimilarMatch(Map params) { + super(params); + } + + @Override + public int compare(Field a, Field b) { + + if (a.stringValue().isEmpty() || b.stringValue().isEmpty()) + return 0; //undefined if one name is missing + + //take only the first name + String firstname1 = a.stringValue().split(" ")[0]; + String firstname2 = b.stringValue().split(" ")[0]; + + if (firstname1.toLowerCase().trim().replaceAll("\\.","").replaceAll("\\s","").length()<=2 || firstname2.toLowerCase().replaceAll("\\.", "").replaceAll("\\s","").length()<=2) //too short names (considered similar) + return 1; + + if (stringSimilarity(firstname1,firstname2)>params.getOrDefault("th", 0.7).doubleValue()){ + return 1; //similar names, go on with the analysis + } + else { + return -1; //names too different, no need to compare + } + + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/TopicsMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/TopicsMatch.java new file mode 100644 index 000000000..67d05bbcd --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/TopicsMatch.java @@ -0,0 +1,36 @@ +package eu.dnetlib.pace.tree; + +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.FieldListImpl; + +import java.util.Map; + +@TreeNodeClass("topicsMatch") +public class TopicsMatch extends AbstractTreeNode { + + public TopicsMatch(Map params) { + super(params); + } + + @Override + public int compare(Field a, Field b) { + + double[] t1 = ((FieldListImpl) a).doubleArray(); + double[] t2 = ((FieldListImpl) b).doubleArray(); + + if (t1 == null || t2 == null) + return 0; //0 similarity if no topics in one of the authors or in both + + double area = 0.0; + + double min_value[] = new double[t1.length]; + for(int i=0; iparams.getOrDefault("th", 0.7).doubleValue()?+1:-1; + + } +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/TreeNode.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/TreeNode.java new file mode 100644 index 000000000..6c7eb9eb0 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/TreeNode.java @@ -0,0 +1,10 @@ +package eu.dnetlib.pace.tree; + +import eu.dnetlib.pace.model.Field; + +public interface TreeNode { + + //compare two fields and returns: +1 if match, 0 if undefined, -1 if do not match + public int compare(Field a, Field b); + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/TreeNodeClass.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/TreeNodeClass.java new file mode 100644 index 000000000..3db53eaa2 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/TreeNodeClass.java @@ -0,0 +1,14 @@ +package eu.dnetlib.pace.tree; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +public @interface TreeNodeClass { + + public String value(); +} + diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/UndefinedNode.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/UndefinedNode.java new file mode 100644 index 000000000..157240739 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/UndefinedNode.java @@ -0,0 +1,25 @@ +package eu.dnetlib.pace.tree; + +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.FieldList; + +import java.util.List; +import java.util.Map; + +@TreeNodeClass("undefined") +public class UndefinedNode implements TreeNode { + + Map params; + + @Override + public int compare(Field a, Field b) { + + final List sa = ((FieldList) a).stringList(); + final List sb = ((FieldList) b).stringList(); + + System.out.println("sa = " + sa.size()); + System.out.println("sb = " + sb.size()); + + return 0; + } +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/MatchType.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/MatchType.java new file mode 100644 index 000000000..2160f9954 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/MatchType.java @@ -0,0 +1,21 @@ +package eu.dnetlib.pace.tree.support; + +import eu.dnetlib.pace.util.PaceException; + +public enum MatchType { + + ORCID_MATCH, + COAUTHORS_MATCH, + TOPICS_MATCH, + NO_MATCH; + + public static MatchType getEnum(String value) { + + try { + return MatchType.valueOf(value); + } + catch (IllegalArgumentException e) { + throw new PaceException("The match type is not valid"); + } + } +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java index 1c4078150..02a34b253 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java @@ -9,6 +9,8 @@ import eu.dnetlib.pace.distance.eval.ScoreResult; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.model.MapDocument; import eu.dnetlib.pace.model.MapDocumentComparator; +import eu.dnetlib.pace.model.TreeNodeDef; +import eu.dnetlib.pace.tree.support.MatchType; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -43,12 +45,63 @@ public class BlockProcessor { if (q.size() > 1) { // log.info("reducing key: '" + key + "' records: " + q.size()); //process(q, context); - process(simplifyQueue(q, key, context), context); + + //process the decision tree if it is specified, otherwise go with conditions and distance algos + if (!dedupConf.getPace().getDecisionTree().isEmpty()){ + processPersons(q, context); + } + else { + process(simplifyQueue(q, key, context), context); + } } else { context.incrementCounter(dedupConf.getWf().getEntityType(), "records per hash key = 1", 1); } } + private void processPersons(final Queue queue, final Reporter context) { + + while (!queue.isEmpty()) { + + final MapDocument pivot = queue.remove(); //take first element of the queue + final String idPivot = pivot.getIdentifier(); + + //compare the first element with all the others + for (final MapDocument curr : queue) { + final String idCurr = curr.getIdentifier(); + + //check if pivot and current element are similar by processing the tree + if (navigateTree(pivot, curr)) + writeSimilarity(context, idPivot, idCurr); + } + + + } + } + + private boolean navigateTree(final MapDocument doc1, final MapDocument doc2){ + + final Map decisionTree = dedupConf.getPace().getDecisionTree(); + + String current = "start"; + + while (!current.equals(MatchType.NO_MATCH.toString()) && !current.equals(MatchType.ORCID_MATCH.toString()) && !current.equals(MatchType.TOPICS_MATCH.toString()) && !current.equals(MatchType.COAUTHORS_MATCH.toString())) { + + TreeNodeDef currentNode = decisionTree.get(current); + //throw an exception if the node doesn't exist + if (currentNode == null) + throw new PaceException("The Tree Node doesn't exist: " + current); + + int compare = currentNode.treeNode().compare(doc1.getFieldMap().get(currentNode.getField()), doc2.getFieldMap().get(currentNode.getField())); + + current = (compare==0)?currentNode.getUndefined():(compare==-1)?currentNode.getNegative():currentNode.getPositive(); + } + + if (!current.equals(MatchType.NO_MATCH.toString())) + return true; + else + return false; + } + private Queue prepare(final Iterable documents) { final Queue queue = new PriorityQueue<>(100, new MapDocumentComparator(dedupConf.getWf().getOrderField())); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/PaceException.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/PaceException.java index 34fd8ba20..198861c53 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/PaceException.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/PaceException.java @@ -6,4 +6,8 @@ public class PaceException extends RuntimeException { super(s, e); } + public PaceException(String s){ + super(s); + } + } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/PaceResolver.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/PaceResolver.java index d14e81b50..00ca6265f 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/PaceResolver.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/PaceResolver.java @@ -7,6 +7,8 @@ import eu.dnetlib.pace.condition.ConditionClass; import eu.dnetlib.pace.distance.DistanceAlgo; import eu.dnetlib.pace.distance.DistanceClass; import eu.dnetlib.pace.model.FieldDef; +import eu.dnetlib.pace.tree.TreeNode; +import eu.dnetlib.pace.tree.TreeNodeClass; import org.reflections.Reflections; import java.io.Serializable; @@ -20,6 +22,7 @@ public class PaceResolver implements Serializable { private final Map> clusteringFunctions; private final Map> conditionAlgos; private final Map> distanceAlgos; + private final Map> treeNodes; public PaceResolver() { @@ -34,13 +37,17 @@ public class PaceResolver implements Serializable { this.distanceAlgos = new Reflections("eu.dnetlib").getTypesAnnotatedWith(DistanceClass.class).stream() .filter(DistanceAlgo.class::isAssignableFrom) .collect(Collectors.toMap(cl -> cl.getAnnotation(DistanceClass.class).value(), cl -> (Class)cl)); + + this.treeNodes = new Reflections("eu.dnetlib").getTypesAnnotatedWith(TreeNodeClass.class).stream() + .filter(TreeNode.class::isAssignableFrom) + .collect(Collectors.toMap(cl -> cl.getAnnotation(TreeNodeClass.class).value(), cl -> (Class) cl)); } public ClusteringFunction getClusteringFunction(String name, Map params) throws PaceException { try { return clusteringFunctions.get(name).getDeclaredConstructor(Map.class).newInstance(params); } catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) { - throw new PaceException(name + "not found", e); + throw new PaceException(name + " not found ", e); } } @@ -48,7 +55,7 @@ public class PaceResolver implements Serializable { try { return distanceAlgos.get(name).getDeclaredConstructor(Map.class).newInstance(params); } catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) { - throw new PaceException(name + "not found", e); + throw new PaceException(name + " not found ", e); } } @@ -56,7 +63,15 @@ public class PaceResolver implements Serializable { try { return conditionAlgos.get(name).getDeclaredConstructor(String.class, List.class).newInstance(name, fields); } catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) { - throw new PaceException(name + "not found", e); + throw new PaceException(name + " not found ", e); + } + } + + public TreeNode getTreeNode(String name, Map params) throws PaceException { + try { + return treeNodes.get(name).getDeclaredConstructor(Map.class).newInstance(params); + } catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException | NullPointerException e) { + throw new PaceException(name + " not found ", e); } } From 7a8d28991f5ecce10b6ad53e7d8438b1440ca9b1 Mon Sep 17 00:00:00 2001 From: Michele De Bonis Date: Thu, 20 Dec 2018 09:54:41 +0100 Subject: [PATCH 050/449] implementation of the decision tree for the deduplication of the authors, implementation of multiple comparators to be used in a tree node and definition of the proto for person entity --- .../pace/common/AbstractPaceFunctions.java | 27 ++++ .../algo/JaroWinklerNormalizedName.java | 11 +- .../java/eu/dnetlib/pace/model/FieldConf.java | 67 ++++++++++ .../eu/dnetlib/pace/model/TreeNodeDef.java | 117 ++++++++++++------ ...tTreeNode.java => AbstractComparator.java} | 8 +- .../eu/dnetlib/pace/tree/CoauthorsMatch.java | 16 +-- .../java/eu/dnetlib/pace/tree/Comparator.java | 10 ++ ...reeNodeClass.java => ComparatorClass.java} | 2 +- .../java/eu/dnetlib/pace/tree/ExactMatch.java | 10 +- .../eu/dnetlib/pace/tree/SimilarMatch.java | 15 +-- .../eu/dnetlib/pace/tree/TopicsMatch.java | 10 +- .../java/eu/dnetlib/pace/tree/TreeNode.java | 10 -- .../eu/dnetlib/pace/tree/UndefinedNode.java | 6 +- .../eu/dnetlib/pace/tree/support/AggType.java | 9 ++ .../dnetlib/pace/tree/support/MatchType.java | 7 +- .../eu/dnetlib/pace/util/BlockProcessor.java | 26 ++-- .../eu/dnetlib/pace/util/PaceResolver.java | 16 +-- .../pace/distance/DistanceAlgoTest.java | 3 +- 18 files changed, 259 insertions(+), 111 deletions(-) create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldConf.java rename dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/{AbstractTreeNode.java => AbstractComparator.java} (80%) create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Comparator.java rename dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/{TreeNodeClass.java => ComparatorClass.java} (88%) delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/TreeNode.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AggType.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java index c08cae97d..757241192 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java @@ -193,11 +193,38 @@ public abstract class AbstractPaceFunctions { } public String normalizeCities(String s1, Map cityMap){ + //TODO change normalization mode + for (String city : cityMap.keySet()) s1 = s1.replaceAll(" " + city + " ", " " + cityMap.get(city) + " "); return s1; } + public String normalizeCities2 (String s1, Map cityMap, int windowSize){ + + List tokens = Arrays.asList(s1.split(" ")); + + if (tokens.size() params; //parameters + + public FieldConf() { + } + + public FieldConf(String field, String comparator, double weight, Map params) { + this.field = field; + this.comparator = comparator; + this.weight = weight; + this.params = params; + } + + public String getField() { + return field; + } + + public void setField(String field) { + this.field = field; + } + + public String getComparator() { + return comparator; + } + + public void setComparator(String comparator) { + this.comparator = comparator; + } + + public double getWeight() { + return weight; + } + + public void setWeight(double weight) { + this.weight = weight; + } + + public Map getParams() { + return params; + } + + public void setParams(Map params) { + this.params = params; + } + + @Override + public String toString() { + try { + return new ObjectMapper().writeValueAsString(this); + } catch (IOException e) { + throw new PaceException("Impossible to convert to JSON: ", e); + } + } +} \ No newline at end of file diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/TreeNodeDef.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/TreeNodeDef.java index 61b68b30e..b1d4917b3 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/TreeNodeDef.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/TreeNodeDef.java @@ -1,60 +1,113 @@ package eu.dnetlib.pace.model; import eu.dnetlib.pace.config.PaceConfig; -import eu.dnetlib.pace.tree.TreeNode; +import eu.dnetlib.pace.tree.Comparator; +import eu.dnetlib.pace.tree.support.AggType; import eu.dnetlib.pace.util.PaceException; +import org.apache.commons.math3.stat.descriptive.DescriptiveStatistics; import org.codehaus.jackson.map.ObjectMapper; import java.io.IOException; import java.io.Serializable; -import java.util.Map; +import java.util.List; public class TreeNodeDef implements Serializable { - private String name; - private String field; + private List fields; //list of fields involved in the tree node (contains comparators to be used and field on which apply the comparator) + private AggType aggregation; //how to aggregate similarity measures for every field - private String positive; - private String negative; - private String undefined; + private double threshold; //threshold on the similarity measure - private Map params; + private String positive; //specifies the next node in case of positive result: similarity>=th + private String negative; //specifies the next node in case of negative result: similarity params) { - this.name = name; - this.field = field; + //compute the similarity measure between two documents + public double evaluate(MapDocument doc1, MapDocument doc2) { + + DescriptiveStatistics stats = new DescriptiveStatistics(); + + for (FieldConf fieldConf : fields) { + + double weight = fieldConf.getWeight(); + + double similarity = comparator(fieldConf).compare(doc1.getFieldMap().get(fieldConf.getField()), doc2.getFieldMap().get(fieldConf.getField())); + + //if similarity is -1 means that a comparator gave undefined, do not add result to the stats + if (similarity != -1) { + stats.addValue(weight * similarity); + } + else { + if (!ignoreMissing) //if the missing value has not to be ignored, return -1 + return -1; + } + } + + switch (aggregation){ + + case AVG: + return stats.getMean(); + case SUM: + return stats.getSum(); + case MAX: + return stats.getMax(); + case MIN: + return stats.getMin(); + default: + return 0.0; + } + + } + + private Comparator comparator(final FieldConf field){ + + return PaceConfig.paceResolver.getComparator(field.getComparator(), field.getParams()); + } + + public TreeNodeDef(List fields, double threshold, AggType aggregation, String positive, String negative, String undefined) { + this.fields = fields; + this.threshold = threshold; + this.aggregation = aggregation; this.positive = positive; this.negative = negative; this.undefined = undefined; - this.params = params; } - public TreeNode treeNode() { - try { - return PaceConfig.paceResolver.getTreeNode(getName(), params); - } catch (PaceException e) { - e.printStackTrace(); - return null; - } + public boolean isIgnoreMissing() { + return ignoreMissing; } - public String getName() { - return name; + public void setIgnoreMissing(boolean ignoreMissing) { + this.ignoreMissing = ignoreMissing; } - public void setName(String name) { - this.name = name; + public List getFields() { + return fields; } - public String getField() { - return field; + public void setFields(List fields) { + this.fields = fields; } - public void setField(String field) { - this.field = field; + public double getThreshold() { + return threshold; + } + + public void setThreshold(double threshold) { + this.threshold = threshold; + } + + public AggType getAggregation() { + return aggregation; + } + + public void setAggregation(AggType aggregation) { + this.aggregation = aggregation; } public String getPositive() { @@ -81,20 +134,12 @@ public class TreeNodeDef implements Serializable { this.undefined = undefined; } - public Map getParams() { - return params; - } - - public void setParams(Map params) { - this.params = params; - } - @Override public String toString() { try { return new ObjectMapper().writeValueAsString(this); } catch (IOException e) { - return e.getStackTrace().toString(); + throw new PaceException("Impossible to convert to JSON: ", e); } } } \ No newline at end of file diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AbstractTreeNode.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AbstractComparator.java similarity index 80% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AbstractTreeNode.java rename to dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AbstractComparator.java index 230ec227c..76e41ae9c 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AbstractTreeNode.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AbstractComparator.java @@ -5,17 +5,17 @@ import org.apache.commons.lang.StringUtils; import java.util.Map; -public class AbstractTreeNode implements TreeNode { +abstract class AbstractComparator implements Comparator { Map params; - public AbstractTreeNode(Map params){ + public AbstractComparator(Map params){ this.params = params; } @Override - public int compare(Field a, Field b) { - return 0; + public double compare(Field a, Field b) { + return 0.0; } public static double stringSimilarity(String s1, String s2) { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/CoauthorsMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/CoauthorsMatch.java index 45bc32af1..ace3acc21 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/CoauthorsMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/CoauthorsMatch.java @@ -6,15 +6,15 @@ import eu.dnetlib.pace.model.FieldList; import java.util.List; import java.util.Map; -@TreeNodeClass("coauthorsMatch") -public class CoauthorsMatch extends AbstractTreeNode { +@ComparatorClass("coauthorsMatch") +public class CoauthorsMatch extends AbstractComparator { public CoauthorsMatch(Map params) { super(params); } @Override - public int compare(Field a, Field b) { + public double compare(Field a, Field b) { final List c1 = ((FieldList) a).stringList(); final List c2 = ((FieldList) b).stringList(); @@ -24,7 +24,7 @@ public class CoauthorsMatch extends AbstractTreeNode { //few coauthors or too many coauthors if (size1 < params.getOrDefault("minCoauthors", 5).intValue() || size2 < params.getOrDefault("minCoauthors", 5).intValue() || (size1+size2 > params.getOrDefault("maxCoauthors", 200).intValue())) - return 0; + return -1; int coauthorship = 0; for (String ca1: c1){ @@ -36,11 +36,7 @@ public class CoauthorsMatch extends AbstractTreeNode { } } - if (coauthorship>=params.getOrDefault("th", 5).intValue()) - return 1; - else if (coauthorship == 0) - return -1; - else - return 0; + return coauthorship; + } } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Comparator.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Comparator.java new file mode 100644 index 000000000..087028ba2 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Comparator.java @@ -0,0 +1,10 @@ +package eu.dnetlib.pace.tree; + +import eu.dnetlib.pace.model.Field; + +public interface Comparator { + + //compare two fields and returns: the distace measure, -1 if undefined + public double compare(Field a, Field b); + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/TreeNodeClass.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ComparatorClass.java similarity index 88% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/TreeNodeClass.java rename to dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ComparatorClass.java index 3db53eaa2..a04fba8ee 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/TreeNodeClass.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ComparatorClass.java @@ -7,7 +7,7 @@ import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) -public @interface TreeNodeClass { +public @interface ComparatorClass { public String value(); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatch.java index b03bae6ec..8e0e60173 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatch.java @@ -4,22 +4,22 @@ import eu.dnetlib.pace.model.Field; import java.util.Map; -@TreeNodeClass("exactMatch") -public class ExactMatch extends AbstractTreeNode { +@ComparatorClass("exactMatch") +public class ExactMatch extends AbstractComparator { public ExactMatch(Map params) { super(params); } @Override - public int compare(Field a, Field b) { + public double compare(Field a, Field b) { if (a.stringValue().isEmpty() || b.stringValue().isEmpty()) - return 0; + return -1; else if (a.stringValue().equals(b.stringValue())) return 1; else - return -1; + return 0; } } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SimilarMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SimilarMatch.java index fd52db2b9..f8f5fe144 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SimilarMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SimilarMatch.java @@ -4,18 +4,18 @@ import eu.dnetlib.pace.model.Field; import java.util.Map; -@TreeNodeClass("similar") -public class SimilarMatch extends AbstractTreeNode { +@ComparatorClass("similar") +public class SimilarMatch extends AbstractComparator { public SimilarMatch(Map params) { super(params); } @Override - public int compare(Field a, Field b) { + public double compare(Field a, Field b) { if (a.stringValue().isEmpty() || b.stringValue().isEmpty()) - return 0; //undefined if one name is missing + return -1; //undefined if one name is missing //take only the first name String firstname1 = a.stringValue().split(" ")[0]; @@ -24,12 +24,7 @@ public class SimilarMatch extends AbstractTreeNode { if (firstname1.toLowerCase().trim().replaceAll("\\.","").replaceAll("\\s","").length()<=2 || firstname2.toLowerCase().replaceAll("\\.", "").replaceAll("\\s","").length()<=2) //too short names (considered similar) return 1; - if (stringSimilarity(firstname1,firstname2)>params.getOrDefault("th", 0.7).doubleValue()){ - return 1; //similar names, go on with the analysis - } - else { - return -1; //names too different, no need to compare - } + return stringSimilarity(firstname1,firstname2); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/TopicsMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/TopicsMatch.java index 67d05bbcd..ea798c7a7 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/TopicsMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/TopicsMatch.java @@ -5,21 +5,21 @@ import eu.dnetlib.pace.model.FieldListImpl; import java.util.Map; -@TreeNodeClass("topicsMatch") -public class TopicsMatch extends AbstractTreeNode { +@ComparatorClass("topicsMatch") +public class TopicsMatch extends AbstractComparator { public TopicsMatch(Map params) { super(params); } @Override - public int compare(Field a, Field b) { + public double compare(Field a, Field b) { double[] t1 = ((FieldListImpl) a).doubleArray(); double[] t2 = ((FieldListImpl) b).doubleArray(); if (t1 == null || t2 == null) - return 0; //0 similarity if no topics in one of the authors or in both + return -1; //0 similarity if no topics in one of the authors or in both double area = 0.0; @@ -30,7 +30,7 @@ public class TopicsMatch extends AbstractTreeNode { area += min_value[i]; } - return area>params.getOrDefault("th", 0.7).doubleValue()?+1:-1; + return area; } } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/TreeNode.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/TreeNode.java deleted file mode 100644 index 6c7eb9eb0..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/TreeNode.java +++ /dev/null @@ -1,10 +0,0 @@ -package eu.dnetlib.pace.tree; - -import eu.dnetlib.pace.model.Field; - -public interface TreeNode { - - //compare two fields and returns: +1 if match, 0 if undefined, -1 if do not match - public int compare(Field a, Field b); - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/UndefinedNode.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/UndefinedNode.java index 157240739..cf90847de 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/UndefinedNode.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/UndefinedNode.java @@ -6,13 +6,13 @@ import eu.dnetlib.pace.model.FieldList; import java.util.List; import java.util.Map; -@TreeNodeClass("undefined") -public class UndefinedNode implements TreeNode { +@ComparatorClass("undefined") +public class UndefinedNode implements Comparator { Map params; @Override - public int compare(Field a, Field b) { + public double compare(Field a, Field b) { final List sa = ((FieldList) a).stringList(); final List sb = ((FieldList) b).stringList(); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AggType.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AggType.java new file mode 100644 index 000000000..71e3ad0d4 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AggType.java @@ -0,0 +1,9 @@ +package eu.dnetlib.pace.tree.support; + +public enum AggType { + + AVG, + SUM, + MAX, + MIN +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/MatchType.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/MatchType.java index 2160f9954..158d3f99f 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/MatchType.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/MatchType.java @@ -1,13 +1,12 @@ package eu.dnetlib.pace.tree.support; -import eu.dnetlib.pace.util.PaceException; - public enum MatchType { ORCID_MATCH, COAUTHORS_MATCH, TOPICS_MATCH, - NO_MATCH; + NO_MATCH, + UNDEFINED; public static MatchType getEnum(String value) { @@ -15,7 +14,7 @@ public enum MatchType { return MatchType.valueOf(value); } catch (IllegalArgumentException e) { - throw new PaceException("The match type is not valid"); + return MatchType.UNDEFINED; } } } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java index 02a34b253..19105aefc 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java @@ -70,36 +70,40 @@ public class BlockProcessor { final String idCurr = curr.getIdentifier(); //check if pivot and current element are similar by processing the tree - if (navigateTree(pivot, curr)) + if (navigateTree(pivot, curr)!=MatchType.NO_MATCH) writeSimilarity(context, idPivot, idCurr); } - - } } - private boolean navigateTree(final MapDocument doc1, final MapDocument doc2){ + private MatchType navigateTree(final MapDocument doc1, final MapDocument doc2){ final Map decisionTree = dedupConf.getPace().getDecisionTree(); String current = "start"; - while (!current.equals(MatchType.NO_MATCH.toString()) && !current.equals(MatchType.ORCID_MATCH.toString()) && !current.equals(MatchType.TOPICS_MATCH.toString()) && !current.equals(MatchType.COAUTHORS_MATCH.toString())) { + while (MatchType.getEnum(current)==MatchType.UNDEFINED) { TreeNodeDef currentNode = decisionTree.get(current); //throw an exception if the node doesn't exist if (currentNode == null) throw new PaceException("The Tree Node doesn't exist: " + current); - int compare = currentNode.treeNode().compare(doc1.getFieldMap().get(currentNode.getField()), doc2.getFieldMap().get(currentNode.getField())); + double similarity = currentNode.evaluate(doc1, doc2); + + if (similarity == -1) { + current = currentNode.getUndefined(); + } + else if (similarity>=currentNode.getThreshold()){ + current = currentNode.getPositive(); + } + else { + current = currentNode.getNegative(); + } - current = (compare==0)?currentNode.getUndefined():(compare==-1)?currentNode.getNegative():currentNode.getPositive(); } - if (!current.equals(MatchType.NO_MATCH.toString())) - return true; - else - return false; + return MatchType.getEnum(current); } private Queue prepare(final Iterable documents) { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/PaceResolver.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/PaceResolver.java index 00ca6265f..d8276549a 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/PaceResolver.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/PaceResolver.java @@ -7,8 +7,8 @@ import eu.dnetlib.pace.condition.ConditionClass; import eu.dnetlib.pace.distance.DistanceAlgo; import eu.dnetlib.pace.distance.DistanceClass; import eu.dnetlib.pace.model.FieldDef; -import eu.dnetlib.pace.tree.TreeNode; -import eu.dnetlib.pace.tree.TreeNodeClass; +import eu.dnetlib.pace.tree.Comparator; +import eu.dnetlib.pace.tree.ComparatorClass; import org.reflections.Reflections; import java.io.Serializable; @@ -22,7 +22,7 @@ public class PaceResolver implements Serializable { private final Map> clusteringFunctions; private final Map> conditionAlgos; private final Map> distanceAlgos; - private final Map> treeNodes; + private final Map> comparators; public PaceResolver() { @@ -38,9 +38,9 @@ public class PaceResolver implements Serializable { .filter(DistanceAlgo.class::isAssignableFrom) .collect(Collectors.toMap(cl -> cl.getAnnotation(DistanceClass.class).value(), cl -> (Class)cl)); - this.treeNodes = new Reflections("eu.dnetlib").getTypesAnnotatedWith(TreeNodeClass.class).stream() - .filter(TreeNode.class::isAssignableFrom) - .collect(Collectors.toMap(cl -> cl.getAnnotation(TreeNodeClass.class).value(), cl -> (Class) cl)); + this.comparators = new Reflections("eu.dnetlib").getTypesAnnotatedWith(ComparatorClass.class).stream() + .filter(Comparator.class::isAssignableFrom) + .collect(Collectors.toMap(cl -> cl.getAnnotation(ComparatorClass.class).value(), cl -> (Class) cl)); } public ClusteringFunction getClusteringFunction(String name, Map params) throws PaceException { @@ -67,9 +67,9 @@ public class PaceResolver implements Serializable { } } - public TreeNode getTreeNode(String name, Map params) throws PaceException { + public Comparator getComparator(String name, Map params) throws PaceException { try { - return treeNodes.get(name).getDeclaredConstructor(Map.class).newInstance(params); + return comparators.get(name).getDeclaredConstructor(Map.class).newInstance(params); } catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException | NullPointerException e) { throw new PaceException(name + " not found ", e); } diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java index 45540636c..883dde57c 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java @@ -56,9 +56,10 @@ public class DistanceAlgoTest extends AbstractPaceFunctions { public void testJaroWinklerNormalizedName2() { final JaroWinklerNormalizedName jaroWinklerNormalizedName = new JaroWinklerNormalizedName(params); - double result = jaroWinklerNormalizedName.distance("University of Pisa", "Universita degli studi di Pisa"); + double result = jaroWinklerNormalizedName.distance("University of New York", "Università di New York"); assertEquals(result, 1.0); } + } From 0735f3a8229227b0cc968bf55ecdadca7e074596 Mon Sep 17 00:00:00 2001 From: Michele De Bonis Date: Fri, 8 Feb 2019 12:56:47 +0100 Subject: [PATCH 051/449] implementation of the test classes and minor changes --- dnet-pace-core/pom.xml | 1 - .../algo/JaroWinklerNormalizedName.java | 8 +- .../eu/dnetlib/pace/tree/UndefinedNode.java | 3 - .../eu/dnetlib/pace/tree/support/AggType.java | 14 +- .../eu/dnetlib/pace/util/BlockProcessor.java | 2 +- .../eu/dnetlib/pace/AbstractPaceTest.java | 23 ++- .../eu/dnetlib/pace/tree/ComparatorTest.java | 144 ++++++++++++++++++ 7 files changed, 180 insertions(+), 15 deletions(-) create mode 100644 dnet-pace-core/src/test/java/eu/dnetlib/pace/tree/ComparatorTest.java diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 7a5666830..d88dea4e0 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -74,7 +74,6 @@ commons-math3 - diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerNormalizedName.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerNormalizedName.java index 2f79493d9..ebaa0eab4 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerNormalizedName.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerNormalizedName.java @@ -23,8 +23,11 @@ public class JaroWinklerNormalizedName extends SecondStringDistanceAlgo { private static Map cityMap = AbstractPaceFunctions.loadMapFromClasspath("/eu/dnetlib/pace/config/city_map.csv"); + private Map params; + public JaroWinklerNormalizedName(Map params){ super(params, new com.wcohen.ss.JaroWinkler()); + this.params = params; } public JaroWinklerNormalizedName(double weight) { @@ -52,9 +55,8 @@ public class JaroWinklerNormalizedName extends SecondStringDistanceAlgo { // ca = norm.split("\\|\\|\\|")[0].trim(); // cb = norm.split("\\|\\|\\|")[1].trim(); - ca = normalizeCities2(ca, cityMap, 4); - cb = normalizeCities2(cb, cityMap, 4); - + ca = normalizeCities2(ca, cityMap, params.getOrDefault("windowSize", 4).intValue()); + cb = normalizeCities2(cb, cityMap, params.getOrDefault("windowSize", 4).intValue()); if (sameCity(ca,cb)){ if (sameKeywords(ca,cb)){ diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/UndefinedNode.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/UndefinedNode.java index cf90847de..de43543ec 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/UndefinedNode.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/UndefinedNode.java @@ -17,9 +17,6 @@ public class UndefinedNode implements Comparator { final List sa = ((FieldList) a).stringList(); final List sb = ((FieldList) b).stringList(); - System.out.println("sa = " + sa.size()); - System.out.println("sb = " + sb.size()); - return 0; } } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AggType.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AggType.java index 71e3ad0d4..bd7bd9fb8 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AggType.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AggType.java @@ -1,9 +1,21 @@ package eu.dnetlib.pace.tree.support; +import eu.dnetlib.pace.util.PaceException; + public enum AggType { AVG, SUM, MAX, - MIN + MIN; + + public static AggType getEnum(String value) { + + try { + return AggType.valueOf(value); + } + catch (IllegalArgumentException e) { + throw new PaceException("Undefined aggregation type", e); + } + } } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java index 19105aefc..1cd0eb3af 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java @@ -76,7 +76,7 @@ public class BlockProcessor { } } - private MatchType navigateTree(final MapDocument doc1, final MapDocument doc2){ + public MatchType navigateTree(final MapDocument doc1, final MapDocument doc2){ final Map decisionTree = dedupConf.getPace().getDecisionTree(); diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/AbstractPaceTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/AbstractPaceTest.java index 8a0c08d85..3da6f0a7e 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/AbstractPaceTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/AbstractPaceTest.java @@ -1,14 +1,15 @@ package eu.dnetlib.pace; -import java.io.IOException; -import java.io.StringWriter; - -import org.apache.commons.io.IOUtils; - import eu.dnetlib.pace.config.Type; import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.FieldListImpl; import eu.dnetlib.pace.model.FieldValueImpl; -import org.junit.Test; +import org.apache.commons.io.IOUtils; + +import java.io.IOException; +import java.io.StringWriter; +import java.util.List; +import java.util.stream.Collectors; public abstract class AbstractPaceTest { @@ -34,4 +35,14 @@ public abstract class AbstractPaceTest { return new FieldValueImpl(Type.URL, "url", s); } + protected Field createFieldList(List strings, String fieldName){ + + List fieldValueStream = strings.stream().map(s -> new FieldValueImpl(Type.String, fieldName, s)).collect(Collectors.toList()); + + FieldListImpl a = new FieldListImpl(); + a.addAll(fieldValueStream); + + return a; + + } } diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/tree/ComparatorTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/tree/ComparatorTest.java new file mode 100644 index 000000000..240a5d6bd --- /dev/null +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/tree/ComparatorTest.java @@ -0,0 +1,144 @@ +package eu.dnetlib.pace.tree; + +import eu.dnetlib.pace.AbstractPaceTest; +import eu.dnetlib.pace.config.Type; +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.FieldListImpl; +import eu.dnetlib.pace.model.FieldValueImpl; +import org.junit.Before; +import org.junit.Test; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; + +import static junit.framework.Assert.assertEquals; +import static junit.framework.Assert.assertTrue; + +//test class for comparators (to be used into the tree nodes) +public class ComparatorTest extends AbstractPaceTest { + + private Map params; + + @Before + public void setup() { + params = new HashMap<>(); + //to put all the needed parameters + params.put("minCoauthors", 5); + params.put("maxCoauthors", 200); + + } + + @Test + public void testCoauthorsMatch() { + + final CoauthorsMatch coauthorsMatch = new CoauthorsMatch(params); + + Field a = createFieldList(Arrays.asList("la bruzzo, sandro", "atzori, claudio", "artini, michele", "de bonis, michele", "bardi, alessia", "dell'amico, andrea", "baglioni, miriam"), "coauthors"); + Field b = createFieldList(Arrays.asList("la bruzzo, sandro"), "coauthors"); + + double result1 = coauthorsMatch.compare(a, b); + double result2 = coauthorsMatch.compare(a, a); + + System.out.println("a = " + a); + System.out.println("b = " + b); + + System.out.println("a vs b = " + result1); + System.out.println("a vs a = " + result2); + + assertEquals(result1, -1.0); + assertEquals(result2, 7.0); + } + + @Test + public void testExactMatch() { + + final ExactMatch exactMatch = new ExactMatch(params); + + Field a = new FieldValueImpl(Type.String, "doi", "10.1000/0000000000"); + Field b = new FieldValueImpl(Type.String, "doi", "10.1033/0000000000"); + Field c = new FieldValueImpl(Type.String, "doi", ""); + + double result1 = exactMatch.compare(a,a); + double result2 = exactMatch.compare(a,b); + double result3 = exactMatch.compare(a,c); + + System.out.println("a = " + a); + System.out.println("b = " + b); + System.out.println("c = " + c); + + System.out.println("a vs a = " + result1); + System.out.println("a vs b = " + result2); + System.out.println("a vs c = " + result3); + + assertEquals(result1, 1.0); + assertEquals(result2, 0.0); + assertEquals(result3, -1.0); + + } + + @Test + public void testSimilarMatch() { + + final SimilarMatch similarMatch = new SimilarMatch(params); + + Field a = new FieldValueImpl(Type.String, "firstname", "sandro"); + Field b = new FieldValueImpl(Type.String, "firstname", "s."); + Field c = new FieldValueImpl(Type.String, "firstname", "stefano"); + + double result1 = similarMatch.compare(a,b); + double result2 = similarMatch.compare(a,c); + double result3 = similarMatch.compare(b,c); + + System.out.println("a = " + a); + System.out.println("b = " + b); + System.out.println("c = " + c); + + System.out.println("a vs b = " + result1); + System.out.println("a vs c = " + result2); + System.out.println("b vs c = " + result3); + + assertEquals(result1, 1.0); + assertEquals(result3, 1.0); + assertTrue(result2<0.7); + + } + + @Test + public void testTopicsMatch() { + + final TopicsMatch topicsMatch = new TopicsMatch(params); + + Field a = createFieldList(Arrays.asList("0.0", "1.0", "0.0"), "topics"); + Field b = createFieldList(Arrays.asList("0.0", "0.0", "1.0"), "topics"); + Field c = createFieldList(Arrays.asList("0.5", "0.5", "0.0"), "topics"); + + double result1 = topicsMatch.compare(a,a); + double result2 = topicsMatch.compare(a,c); + double result3 = topicsMatch.compare(b,c); + + System.out.println("a = " + a); + System.out.println("b = " + b); + System.out.println("c = " + c); + + System.out.println("a vs a = " + result1); + System.out.println("a vs c = " + result2); + System.out.println("b vs c = " + result3); + + assertEquals(result1, 1.0); + assertEquals(result2, 0.5); + assertEquals(result3, 0.0); + + } + + @Test + public void testUndefinedNode() { + + final UndefinedNode undefinedNode = new UndefinedNode(); + double result = undefinedNode.compare(new FieldListImpl(),new FieldListImpl()); + + assertEquals(result, 0.0); + } + + +} From 968cd4743665bd53e1262e4da88261132a144d05 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Sun, 17 Feb 2019 12:48:25 +0100 Subject: [PATCH 052/449] replace existing attributes when loading default configuration --- .../eu/dnetlib/pace/config/DedupConfig.java | 7 ++++++- .../eu/dnetlib/pace/config/ConfigTest.java | 19 +++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java index d7396406f..1cfcb089c 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java @@ -6,6 +6,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.function.BiFunction; import eu.dnetlib.pace.util.PaceException; import org.antlr.stringtemplate.StringTemplate; @@ -73,7 +74,11 @@ public class DedupConfig implements Config, Serializable { template.setAttribute(e.getKey(), e.getValue()); } for (final Entry e : params.entrySet()) { - template.setAttribute(e.getKey(), e.getValue()); + if (template.getAttribute(e.getKey()) != null) { + template.getAttributes().computeIfPresent(e.getKey(), (o, o2) -> e.getValue()); + } else { + template.setAttribute(e.getKey(), e.getValue()); + } } final String json = template.toString(); diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java index 8be6098f3..6b5a2b99c 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java @@ -1,8 +1,12 @@ package eu.dnetlib.pace.config; +import com.google.common.collect.Maps; import eu.dnetlib.pace.AbstractPaceTest; import org.junit.Test; +import java.io.IOException; +import java.util.Map; + import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -36,7 +40,22 @@ public class ConfigTest extends AbstractPaceTest { DedupConfig load = DedupConfig.load(readFromClasspath("result.pace.conf.json")); + assertNotNull(load); System.out.println(load.toString()); + } + @Test + public void testLoadDefaults() throws IOException { + + final Map config = Maps.newHashMap(); + config.put("entityType", "organization"); + config.put("configurationId", "dedup-organization-simple"); + final DedupConfig dedupConf = DedupConfig.loadDefault(config); + + System.out.println("dedupConf = " + dedupConf); + } + + + } From 7d8e62d4ccd8aeb1f1c4f5f60758a53723e74710 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Sun, 17 Feb 2019 12:56:11 +0100 Subject: [PATCH 053/449] [maven-release-plugin] prepare release dnet-dedup-3.0.7 --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 7e6fea288..f68fccc47 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 3.0.7-SNAPSHOT + 3.0.7 ../pom.xml From ccb7e83196f662c812808c0fbb468b67e147c574 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Sun, 17 Feb 2019 12:56:19 +0100 Subject: [PATCH 054/449] [maven-release-plugin] prepare for next development iteration --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index f68fccc47..38ad0ac8a 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 3.0.7 + 3.0.8-SNAPSHOT ../pom.xml From 470c4b0f2037288d25cb7eedc7b0ccd30006297b Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Mon, 18 Feb 2019 09:07:23 +0100 Subject: [PATCH 055/449] default configuration includes configurationId --- .../eu/dnetlib/pace/config/dedupConfig.st | 3 ++- .../java/eu/dnetlib/pace/config/ConfigTest.java | 14 +++++++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/dedupConfig.st b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/dedupConfig.st index 5cda4d928..97aef2d23 100644 --- a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/dedupConfig.st +++ b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/dedupConfig.st @@ -10,7 +10,8 @@ "groupMaxSize" : "$groupMaxSize$", "slidingWindowSize" : "$slidingWindowSize$", "rootBuilder" : [ $rootBuilder:{"$it$"};separator=", "$ ], - "includeChildren" : "$includeChildren$" + "includeChildren" : "$includeChildren$", + "configurationId" : "$configurationId$" }, "pace" : { "clustering" : [ diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java index 6b5a2b99c..b85713abb 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java @@ -48,12 +48,20 @@ public class ConfigTest extends AbstractPaceTest { @Test public void testLoadDefaults() throws IOException { + final String entityType = "organization"; + final String configurationId = "dedup-organization-simple"; + final Map config = Maps.newHashMap(); - config.put("entityType", "organization"); - config.put("configurationId", "dedup-organization-simple"); + + config.put("entityType", entityType); + config.put("configurationId", configurationId); final DedupConfig dedupConf = DedupConfig.loadDefault(config); - System.out.println("dedupConf = " + dedupConf); + //System.out.println("dedupConf = " + dedupConf); + assertNotNull(dedupConf); + assertNotNull(dedupConf.getWf()); + assertEquals(dedupConf.getWf().getEntityType(), entityType); + assertEquals(dedupConf.getWf().getConfigurationId(), configurationId); } From 722431dde1ac1a238cf238f09b5086628b47bbea Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Mon, 18 Feb 2019 09:09:07 +0100 Subject: [PATCH 056/449] [maven-release-plugin] prepare release dnet-dedup-3.0.8 --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 38ad0ac8a..e6c1dcf63 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 3.0.8-SNAPSHOT + 3.0.8 ../pom.xml From f2394fcd9f93b49abd58385178ad5e7f2f69ace6 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Mon, 18 Feb 2019 09:09:14 +0100 Subject: [PATCH 057/449] [maven-release-plugin] prepare for next development iteration --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index e6c1dcf63..14a9fcbb2 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 3.0.8 + 3.0.9-SNAPSHOT ../pom.xml From 662448e5841c727449c113bf12eef4eb6433b44b Mon Sep 17 00:00:00 2001 From: Michele De Bonis Date: Thu, 21 Mar 2019 14:27:27 +0100 Subject: [PATCH 058/449] update of the comparator for legalnames of organizations --- .../AbstractClusteringFunction.java | 15 +- .../pace/common/AbstractPaceFunctions.java | 52 +++++-- .../algo/JaroWinklerNormalizedName.java | 32 ++-- .../eu/dnetlib/pace/util/BlockProcessor.java | 58 +------ .../eu/dnetlib/pace/config/city_map.csv | 2 +- .../eu/dnetlib/pace/config/stopwords_it.txt | 1 - .../dnetlib/pace/config/translation_map.csv | 64 +++++++- dnet-pace-core/src/test/java/DedupTestIT.java | 4 + .../pace/distance/DistanceAlgoTest.java | 41 +++++ .../eu/dnetlib/pace/tree/ComparatorTest.java | 144 ------------------ 10 files changed, 165 insertions(+), 248 deletions(-) create mode 100644 dnet-pace-core/src/test/java/DedupTestIT.java delete mode 100644 dnet-pace-core/src/test/java/eu/dnetlib/pace/tree/ComparatorTest.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/AbstractClusteringFunction.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/AbstractClusteringFunction.java index f9192ad51..1782b8761 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/AbstractClusteringFunction.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/AbstractClusteringFunction.java @@ -1,16 +1,15 @@ package eu.dnetlib.pace.clustering; -import java.util.*; -import java.util.function.Function; -import java.util.function.Predicate; -import java.util.stream.Collectors; - -import com.google.common.collect.Sets; - import eu.dnetlib.pace.common.AbstractPaceFunctions; import eu.dnetlib.pace.model.Field; import org.apache.commons.lang.StringUtils; +import java.util.Collection; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + public abstract class AbstractClusteringFunction extends AbstractPaceFunctions implements ClusteringFunction { protected Map params; @@ -26,7 +25,7 @@ public abstract class AbstractClusteringFunction extends AbstractPaceFunctions i return fields.stream().filter(f -> !f.isEmpty()) .map(Field::stringValue) .map(this::normalize) - .map(s -> filterStopWords(s, stopwords)) + .map(s -> filterAllStopWords(s)) .map(this::doApply) .map(c -> filterBlacklisted(c, ngramBlacklist)) .flatMap(c -> c.stream()) diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java index 757241192..977c5c46e 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java @@ -27,7 +27,12 @@ import java.util.regex.Pattern; */ public abstract class AbstractPaceFunctions { - protected static Set stopwords = loadFromClasspath("/eu/dnetlib/pace/config/stopwords_en.txt"); + protected static Set stopwords_en = loadFromClasspath("/eu/dnetlib/pace/config/stopwords_en.txt"); + protected static Set stopwords_de = loadFromClasspath("/eu/dnetlib/pace/config/stopwords_de.txt"); + protected static Set stopwords_es = loadFromClasspath("/eu/dnetlib/pace/config/stopwords_es.txt"); + protected static Set stopwords_fr = loadFromClasspath("/eu/dnetlib/pace/config/stopwords_fr.txt"); + protected static Set stopwords_it = loadFromClasspath("/eu/dnetlib/pace/config/stopwords_it.txt"); + protected static Set stopwords_pt = loadFromClasspath("/eu/dnetlib/pace/config/stopwords_pt.txt"); protected static Set ngramBlacklist = loadFromClasspath("/eu/dnetlib/pace/config/ngram_blacklist.txt"); @@ -42,8 +47,9 @@ public abstract class AbstractPaceFunctions { } protected String cleanup(final String s) { - final String s1 = nfd(s); - final String s2 = fixAliases(s1); + final String s0 = s.toLowerCase(); + final String s1 = fixAliases(s0); + final String s2 = nfd(s1); final String s3 = s2.replaceAll("–", " "); final String s4 = s3.replaceAll("&", " "); final String s5 = s4.replaceAll(""", " "); @@ -140,6 +146,18 @@ public abstract class AbstractPaceFunctions { return sb.toString().trim(); } + protected String filterAllStopWords(String s) { + + s = filterStopWords(s, stopwords_en); + s = filterStopWords(s, stopwords_de); + s = filterStopWords(s, stopwords_it); + s = filterStopWords(s, stopwords_fr); + s = filterStopWords(s, stopwords_pt); + s = filterStopWords(s, stopwords_es); + + return s; + } + protected Collection filterBlacklisted(final Collection set, final Set ngramBlacklist) { final Set newset = Sets.newLinkedHashSet(); for (final String s : set) { @@ -192,15 +210,7 @@ public abstract class AbstractPaceFunctions { return sb.toString().trim(); } - public String normalizeCities(String s1, Map cityMap){ - //TODO change normalization mode - - for (String city : cityMap.keySet()) - s1 = s1.replaceAll(" " + city + " ", " " + cityMap.get(city) + " "); - return s1; - } - - public String normalizeCities2 (String s1, Map cityMap, int windowSize){ + public String keywordsToCode(String s1, Map translationMap, int windowSize){ List tokens = Arrays.asList(s1.split(" ")); @@ -213,9 +223,8 @@ public abstract class AbstractPaceFunctions { for (int i = 0; i<=tokens.size()-length; i++){ String candidate = Joiner.on(" ").join(tokens.subList(i, i + length)); - if (cityMap.containsKey(candidate)) { - s1 = (" " + s1 + " ").replaceAll(" " + candidate + " ", " " + cityMap.get(candidate) + " "); - return s1; + if (translationMap.containsKey(candidate)) { + s1 = (" " + s1 + " ").replaceAll(" " + candidate + " ", " " + translationMap.get(candidate) + " "); } } length-=1; @@ -229,9 +238,20 @@ public abstract class AbstractPaceFunctions { final String regexKey = "\\bkey::[0-9]*\\b"; final String regexCity = "\\bcity::[0-9]*\\b"; return s.replaceAll(regexKey, "").replaceAll(regexCity, "").trim(); - } + public double keywordsCompare(String s1, String s2){ + + List keywords1 = getKeywords(s1); + List keywords2 = getKeywords(s2); + int longer = (keywords1.size()>keywords2.size())?keywords1.size():keywords2.size(); + + if (getKeywords(s1).isEmpty() || getKeywords(s2).isEmpty()) + return 1.0; + else + return (double)CollectionUtils.intersection(getKeywords(s1),getKeywords(s2)).size()/(double)longer; + } + //check if 2 strings have same keywords public boolean sameKeywords(String s1, String s2){ //at least 1 keyword in common diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerNormalizedName.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerNormalizedName.java index ebaa0eab4..fea74af37 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerNormalizedName.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerNormalizedName.java @@ -47,27 +47,25 @@ public class JaroWinklerNormalizedName extends SecondStringDistanceAlgo { cb = removeStopwords(cb); //replace keywords with codes - ca = translate(ca, translationMap); - cb = translate(cb, translationMap); + String codesA = keywordsToCode(ca, translationMap, params.getOrDefault("windowSize", 4).intValue()); + String codesB = keywordsToCode(cb, translationMap, params.getOrDefault("windowSize",4).intValue()); //replace cities with codes -// String norm = normalizeCities(" " + ca + " ||| " + cb + " ", cityMap); -// ca = norm.split("\\|\\|\\|")[0].trim(); -// cb = norm.split("\\|\\|\\|")[1].trim(); + codesA = keywordsToCode(codesA, cityMap, params.getOrDefault("windowSize", 4).intValue()); + codesB = keywordsToCode(codesB, cityMap, params.getOrDefault("windowSize", 4).intValue()); - ca = normalizeCities2(ca, cityMap, params.getOrDefault("windowSize", 4).intValue()); - cb = normalizeCities2(cb, cityMap, params.getOrDefault("windowSize", 4).intValue()); - - if (sameCity(ca,cb)){ - if (sameKeywords(ca,cb)){ - ca = removeCodes(ca); - cb = removeCodes(cb); - if (ca.isEmpty() && cb.isEmpty()) - return 1.0; - else - return normalize(ssalgo.score(ca,cb)); - } + //if two names have same city + if (sameCity(codesA,codesB)){ + if (keywordsCompare(codesA, codesB)>params.getOrDefault("threshold", 0.5).doubleValue()) { + ca = removeCodes(codesA); + cb = removeCodes(codesB); + if (ca.isEmpty() && cb.isEmpty()) + return 1.0; + else + return normalize(ssalgo.score(ca,cb)); + } } + return 0.0; } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java index 1cd0eb3af..01da9c227 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java @@ -9,8 +9,6 @@ import eu.dnetlib.pace.distance.eval.ScoreResult; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.model.MapDocument; import eu.dnetlib.pace.model.MapDocumentComparator; -import eu.dnetlib.pace.model.TreeNodeDef; -import eu.dnetlib.pace.tree.support.MatchType; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -45,67 +43,13 @@ public class BlockProcessor { if (q.size() > 1) { // log.info("reducing key: '" + key + "' records: " + q.size()); //process(q, context); + process(simplifyQueue(q, key, context), context); - //process the decision tree if it is specified, otherwise go with conditions and distance algos - if (!dedupConf.getPace().getDecisionTree().isEmpty()){ - processPersons(q, context); - } - else { - process(simplifyQueue(q, key, context), context); - } } else { context.incrementCounter(dedupConf.getWf().getEntityType(), "records per hash key = 1", 1); } } - private void processPersons(final Queue queue, final Reporter context) { - - while (!queue.isEmpty()) { - - final MapDocument pivot = queue.remove(); //take first element of the queue - final String idPivot = pivot.getIdentifier(); - - //compare the first element with all the others - for (final MapDocument curr : queue) { - final String idCurr = curr.getIdentifier(); - - //check if pivot and current element are similar by processing the tree - if (navigateTree(pivot, curr)!=MatchType.NO_MATCH) - writeSimilarity(context, idPivot, idCurr); - } - } - } - - public MatchType navigateTree(final MapDocument doc1, final MapDocument doc2){ - - final Map decisionTree = dedupConf.getPace().getDecisionTree(); - - String current = "start"; - - while (MatchType.getEnum(current)==MatchType.UNDEFINED) { - - TreeNodeDef currentNode = decisionTree.get(current); - //throw an exception if the node doesn't exist - if (currentNode == null) - throw new PaceException("The Tree Node doesn't exist: " + current); - - double similarity = currentNode.evaluate(doc1, doc2); - - if (similarity == -1) { - current = currentNode.getUndefined(); - } - else if (similarity>=currentNode.getThreshold()){ - current = currentNode.getPositive(); - } - else { - current = currentNode.getNegative(); - } - - } - - return MatchType.getEnum(current); - } - private Queue prepare(final Iterable documents) { final Queue queue = new PriorityQueue<>(100, new MapDocumentComparator(dedupConf.getWf().getOrderField())); diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/city_map.csv b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/city_map.csv index 720b82302..5f70a373b 100644 --- a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/city_map.csv +++ b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/city_map.csv @@ -8595,4 +8595,4 @@ city::890299;Harare;Arare;Charare;Gorad Kharareh;HRE;Harare;Hararensis Urbs;Hara city::890422;Gweru;GWE;Gveru;Gwelo;Gweru;Гверу; city::893697;Chinhoyi;Chinhoyi;Chinkhoi;Chinkhoji;Chinoyi;Cinhojis;Sinoia;qi nuo yi;Činhojis;Чинхойи;Чинхої;Чинхоји;چینہوئی;奇諾伊; city::894701;Bulawayo;BUQ;Bulavajas;Bulavajo;Bulavejo;Bulawayo;Gorad Bulavajo;bu la wa yue;bullawayo;burawayo;Булавайо;Булавајо;Булавейо;Горад Булаваё;ブラワヨ;布拉瓦约;불라와요; -city::1106542;Chitungwiza;Chitungviza;Chitungwiza;Citungviza;Gorad Chytungviza;chytwngwyza;Čitungviza;Горад Чытунгвіза;Читунгвиза;Читунгвіза;چیتونگویزا; +city::1106542;Chitungwiza;Chitungviza;Chitungwiza;Citungviza;Gorad Chytungviza;chytwngwyza;Čitungviza;Горад Чытунгвіза;Читунгвиза;Читунгвіза;چیتونگویزا; \ No newline at end of file diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_it.txt b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_it.txt index 2003b42d2..2ce975b13 100644 --- a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_it.txt +++ b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_it.txt @@ -611,7 +611,6 @@ terzo th ti titolo -torino tra tranne tre diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/translation_map.csv b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/translation_map.csv index cd1479688..55d114c79 100644 --- a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/translation_map.csv +++ b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/translation_map.csv @@ -1,11 +1,11 @@ -key::1;university;università;universitario;universitaria;université;universitaire;universitaires;universidad;universitade;Universität;Uniwersytet;университет;universiteit;πανεπιστήμιο +key::1;university;università;università studi;universitario;universitaria;université;universitaire;universitaires;universidad;universitade;Universität;Uniwersytet;университет;universiteit;πανεπιστήμιο key::2;studies;studi;études;estudios;estudos;Studien;studia;исследования;studies;σπουδές key::3;advanced;superiore;supérieur;supérieure;supérieurs;supérieures;avancado;avancados;fortgeschrittene;fortgeschritten;zaawansowany;передовой;gevorderd;gevorderde;προχωρημένος;προχωρημένη;προχωρημένο;προχωρημένες;προχωρημένα key::4;institute;istituto;institut;instituto;instituto;Institut;instytut;институт;instituut;ινστιτούτο key::5;hospital;ospedale;hôpital;hospital;hospital;Krankenhaus;szpital;больница;ziekenhuis;νοσοκομείο -key::6;research;ricerca;recherche;investigacion;pesquisa;Forschung;badania;исследования;onderzoek;έρευνα +key::6;research;ricerca;recherche;investigacion;pesquisa;Forschung;badania;исследования;onderzoek;έρευνα;erevna;erevnas key::7;college;collegio;université;colegio;faculdade;Hochschule;Szkoła Wyższa;Высшая школа;universiteit;κολλέγιο -key::8;foundation;fondazione;fondation;fundación;fundação;Stiftung;Fundacja;фонд;stichting;ίδρυμα +key::8;foundation;fondazione;fondation;fundación;fundação;Stiftung;Fundacja;фонд;stichting;ίδρυμα;idryma key::9;center;centro;centre;centro;centro;zentrum;centrum;центр;centrum;κέντρο key::10;national;nazionale;national;nationale;nationaux;nationales;nacional;nacional;national;krajowy;национальный;nationaal;nationale;εθνικό key::11;association;associazione;association;asociación;associação;Verein;verband;stowarzyszenie;ассоциация;associatie @@ -44,4 +44,60 @@ key::43;initiative;iniziativa;initiative;инициатива;initiatief;πρω key::44;academic;accademico;académique;universitaire;акадеческий academisch;ακαδημαϊκός;ακαδημαϊκή;ακαδημαϊκό;ακαδημαϊκές;ακαδημαϊκοί key::45;institution;istituzione;institution;институциональный;instelling;ινστιτούτο key::46;division;divisione;division;отделение;divisie;τμήμα -key::47;committee;comitato;comité;комитет;commissie;επιτροπή \ No newline at end of file +key::47;committee;comitato;comité;комитет;commissie;επιτροπή +key::48;promotion;promozione;продвижение;proothisis;forderung +key::49;medical;medicine;clinical;medicina;clinici;médico;medicina;clínica;médico;medicina;clínica;medizinisch;Medizin;klinisch;medisch;geneeskunde;klinisch;ιατρικός;ιατρική;ιατρικό;ιατρικά;κλινικός;κλινική;κλινικό;κλινικά;tıbbi;tıp;klinik;orvosi;orvostudomány;klinikai;zdravniški;medicinski;klinični;meditsiini;kliinik;kliiniline; +key::50;technology;technological;tecnologia;tecnologie;tecnología;tecnológico;tecnologia;tecnológico;Technologie;technologisch;technologie;technologisch;τεχνολογία;τεχνολογικός;τεχνολογική;τεχνολογικό;teknoloji;teknolojik;technológia;technológiai;tehnologija;tehnološki;tehnoloogia;tehnoloogiline; +key::51;science;scientific;scienza;scientifiche;scienze;ciencia;científico;ciência;científico;Wissenschaft;wissenschaftlich;wetenschap;wetenschappelijk;επιστήμη;επιστημονικός;επιστημονική;επιστημονικό;επιστημονικά;bilim;bilimsel;tudomány;tudományos;znanost;znanstveni;teadus;teaduslik; +key::52;engineering;ingegneria;ingeniería;engenharia;Ingenieurwissenschaft;ingenieurswetenschappen;bouwkunde;μηχανικός;μηχανική;μηχανικό;mühendislik;mérnöki;Inženirstvo;inseneeria;inseneri; +key::53;management;gestione;gestionale;gestionali;gestión;administración;gestão;administração;Verwaltung;management;διαχείριση;yönetim;menedzsment;vodstvo;upravljanje;management;juhtkond;juhtimine;haldus; +key::54;energy;energia;energía;energia;Energie;energie;ενέργεια;enerji;energia;energija;energia; +key::55;agricultural;agriculture;agricoltura;agricole;agrícola;agricultura;agrícola;agricultura;landwirtschaftlich;Landwirtschaft;landbouwkundig;landbouw;αγροτικός;αγροτική;αγροτικό;γεωργικός;γεωργική;γεωργικό;γεωργία;tarımsal;tarım;mezőgazdasági;mezőgazdaság;poljedelski;poljedelstvo;põllumajandus;põllumajanduslik; +key::56;information;informazione;información;informação;Information;informatie;πληροφορία;bilgi;információ;informacija;informatsioon; +key::57;social;sociali;social;social;Sozial;sociaal;maatschappelijk;κοινωνικός;κοινωνική;κοινωνικό;κοινωνικά;sosyal;szociális;družbeni;sotsiaal;sotsiaalne; +key::58;environmental;ambiente;medioambiental;ambiente;medioambiente;meioambiente;Umwelt;milieu;milieuwetenschap;milieukunde;περιβαλλοντικός;περιβαλλοντική;περιβαλλοντικό;περιβαλλοντικά;çevre;környezeti;okoliški;keskonna;; +key::59;business;economia;economiche;economica;negocio;empresa;negócio;Unternehmen;bedrijf;bedrijfskunde;επιχείρηση;iş;üzleti;posel;ettevõte/äri; +key::60;pharmaceuticals;pharmacy;farmacia;farmaceutica;farmacéutica;farmacia;farmacêutica;farmácia;Pharmazeutika;Arzneimittelkunde;farmaceutica;geneesmiddelen;apotheek;φαρμακευτικός;φαρμακευτική;φαρμακευτικό;φαρμακευτικά;φαρμακείο;ilaç;eczane;gyógyszerészeti;gyógyszertár;farmacevtika;lekarništvo;farmaatsia;farmatseutiline; +key::61;healthcare;salute;atenciónmédica;cuidadodelasalud;cuidadoscomasaúde;Gesundheitswesen;gezondheidszorg;ιατροφαρμακευτικήπερίθαλψη;sağlıkhizmeti;egészségügy;zdravstvo;tervishoid;tervishoiu; +key::62;history;storia;historia;história;Geschichte;geschiedenis;geschiedkunde;ιστορία;tarih;történelem;zgodovina;ajalugu; +key::63;materials;materiali;materia;materiales;materiais;materialen;υλικά;τεκμήρια;malzemeler;anyagok;materiali;materjalid;vahendid; +key::64;economics;economia;economiche;economica;economía;economia;Wirtschaft;economie;οικονομικά;οικονομικέςεπιστήμες;ekonomi;közgazdaságtan;gospodarstvo;ekonomija;majanduslik;majandus; +key::65;therapeutics;terapeutica;terapéutica;terapêutica;therapie;θεραπευτική;tedavibilimi;gyógykezelés;terapevtika;terapeutiline;ravi; +key::66;oncology;oncologia;oncologico;oncología;oncologia;Onkologie;oncologie;ογκολογία;onkoloji;onkológia;onkologija;onkoloogia; +key::67;natural;naturali;naturale;natural;natural;natürlich;natuurlijk;φυσικός;φυσική;φυσικό;φυσικά;doğal;természetes;naraven;loodus; +key::68;educational;educazione;pedagogia;educacional;educativo;educacional;pädagogisch;educatief;εκπαιδευτικός;εκπαιδευτική;εκπαιδευτικό;εκπαιδευτικά;eğitimsel;oktatási;izobraževalen;haridus;hariduslik; +key::69;biomedical;biomedica;biomédico;biomédico;biomedizinisch;biomedisch;βιοιατρικός;βιοιατρική;βιοιατρικό;βιοιατρικά;biyomedikal;orvosbiológiai;biomedicinski;biomeditsiiniline; +key::70;veterinary;veterinaria;veterinarie;veterinaria;veterinária;tierärtzlich;veterinair;veeartsenijlkunde;κτηνιατρικός;κτηνιατρική;κτηνιατρικό;κτηνιατρικά;veteriner;állatorvosi;veterinar;veterinarski;veterinaaria; +key::71;chemistry;chimica;química;química;Chemie;chemie;scheikunde;χημεία;kimya;kémia;kemija;keemia; +key::72;security;sicurezza;seguridad;segurança;Sicherheit;veiligheid;ασφάλεια;güvenlik;biztonsági;varnost;turvalisus;julgeolek; +key::73;biotechnology;biotecnologia;biotecnologie;biotecnología;biotecnologia;Biotechnologie;biotechnologie;βιοτεχνολογία;biyoteknoloji;biotechnológia;biotehnologija;biotehnoloogia; +key::74;military;militare;militari;militar;militar;Militär;militair;leger;στρατιωτικός;στρατιωτική;στρατιωτικό;στρατιωτικά;askeri;katonai;vojaški;vojni;militaar; +key::75;theological;teologia;teologico;teológico;tecnológica;theologisch;theologisch;θεολογικός;θεολογική;θεολογικό;θεολογικά;teolojik;technológiai;teološki;teoloogia;usuteadus;teoloogiline; +key::76;electronics;elettronica;electrónica;eletrônicos;Elektronik;elektronica;ηλεκτρονική;elektronik;elektronika;elektronika;elektroonika; +key::77;forestry;forestale;forestali;silvicultura;forestal;floresta;Forstwirtschaft;bosbouw;δασοκομία;δασολογία;ormancılık;erdészet;gozdarstvo;metsandus; +key::78;maritime;marittima;marittime;marittimo;marítimo;marítimo;maritiem;ναυτικός;ναυτική;ναυτικό;ναυτικά;ναυτιλιακός;ναυτιλιακή;ναυτιλιακό;ναυτιλιακά;θαλάσσιος;θαλάσσια;θαλάσσιο;denizcilik;tengeri;morski;mere;merendus; +key::79;sports;sport;deportes;esportes;Sport;sport;sportwetenschappen;άθληση;γυμναστικήδραστηριότητα;spor;sport;šport;sport;spordi; +key::80;surgery;chirurgia;chirurgiche;cirugía;cirurgia;Chirurgie;chirurgie;heelkunde;εγχείρηση;επέμβαση;χειρουργικήεπέμβαση;cerrahi;sebészet;kirurgija;kirurgia; +key::81;cultural;culturale;culturali;cultura;cultural;cultural;kulturell;cultureel;πολιτιστικός;πολιτιστική;πολιτιστικό;πολιτισμικός;πολιτισμική;πολιτισμικό;kültürel;kultúrális;kulturni;kultuuri;kultuuriline; +key::82;computerscience;informatica;ordenador;computadora;informática;computación;cienciasdelacomputación;ciênciadacomputação;Computer;computer;υπολογιστής;ηλεκτρονικόςυπολογιστής;bilgisayar;számítógép;računalnik;arvuti; +key::83;finance;financial;finanza;finanziarie;finanza;financiero;finanças;financeiro;Finanzen;finanziell;financiën;financieel;χρηματοοικονομικά;χρηματοδότηση;finanse;finansal;pénzügy;pénzügyi;finance;finančni;finants;finantsiline; +key::84;communication;comunicazione;comuniciación;comunicação;Kommunikation;communication;επικοινωνία;iletişim;kommunikáció;komuniciranje;kommunikatsioon; +key::85;justice;giustizia;justicia;justiça;Recht;Justiz;justitie;gerechtigheid;δικαιοσύνη;υπουργείοδικαιοσύνης;δίκαιο;adalet;igazságügy;pravo;õigus; +key::86;aerospace;aerospaziale;aerospaziali;aeroespacio;aeroespaço;Luftfahrt;luchtvaart;ruimtevaart;αεροπορικός;αεροπορική;αεροπορικό;αεροναυπηγικός;αεροναυπηγική;αεροναυπηγικό;αεροναυπηγικά;havacılıkveuzay;légtér;zrakoplovstvo;atmosfäär;kosmos; +key::87;dermatology;dermatologia;dermatología;dermatologia;Dermatologie;dermatologie;δρματολογία;dermatoloji;bőrgyógyászat;dermatológia;dermatologija;dermatoloogia; +key::88;architecture;architettura;arquitectura;arquitetura;Architektur;architectuur;αρχιτεκτονική;mimarlık;építészet;arhitektura;arhitektuur; +key::89;mathematics;matematica;matematiche;matemáticas;matemáticas;Mathematik;wiskunde;mathematica;μαθηματικά;matematik;matematika;matematika;matemaatika; +key::90;language;lingue;linguistica;linguistiche;lenguaje;idioma;língua;idioma;Sprache;taal;taalkunde;γλώσσα;dil;nyelv;jezik;keel; +key::91;neuroscience;neuroscienza;neurociencia;neurociência;Neurowissenschaft;neurowetenschappen;νευροεπιστήμη;nörobilim;idegtudomány;nevroznanost;neuroteadused; +key::92;automation;automazione;automatización;automação;Automatisierung;automatisering;αυτοματοποίηση;otomasyon;automatizálás;avtomatizacija;automatiseeritud; +key::93;pediatric;pediatria;pediatriche;pediatrico;pediátrico;pediatría;pediátrico;pediatria;pädiatrisch;pediatrische;παιδιατρική;pediatrik;gyermekgyógyászat;pediatrija;pediaatria; +key::94;photonics;fotonica;fotoniche;fotónica;fotônica;Photonik;fotonica;φωτονική;fotonik;fotonika;fotonika;fotoonika; +key::95;mechanics;meccanica;meccaniche;mecánica;mecânica;Mechanik;Maschinenbau;mechanica;werktuigkunde;μηχανικής;mekanik;gépészet;mehanika;mehaanika; +key::96;psychiatrics;psichiatria;psichiatrica;psichiatriche;psiquiatría;psiquiatria;Psychiatrie;psychiatrie;ψυχιατρική;psikiyatrik;pszihiátria;psihiatrija;psühhaatria; +key::97;psychology;fisiologia;psicología;psicologia;Psychologie;psychologie;ψυχολογία;psikoloji;pszihológia;psihologija;psühholoogia; +key::98;automotive;industriaautomobilistica;industriadelautomóvil;automotriz;industriaautomotriz;automotivo;Automobilindustrie;autoindustrie;αυτοκίνητος;αυτοκίνητη;αυτοκίνητο;αυτοκινούμενος;αυτοκινούμενη;αυτοκινούμενο;αυτοκινητιστικός;αυτοκινητιστική;αυτοκινητιστικό;otomotiv;autóipari;samogiben;avtomobilskaindustrija;auto-; +key::99;neurology;neurologia;neurologiche;neurología;neurologia;Neurologie;neurologie;zenuwleer;νευρολογία;nöroloji;neurológia;ideggyógyászat;nevrologija;neuroloogia; +key::100;geology;geologia;geologiche;geología;geologia;Geologie;geologie;aardkunde;γεωλογία;jeoloji;geológia;földtudomány;geologija;geoloogia; +key::101;microbiology;microbiologia;micro-biologia;microbiologiche;microbiología;microbiologia;Mikrobiologie;microbiologie;μικροβιολογία;mikrobiyoloji;mikrobiológia;mikrobiologija;mikrobioloogia; +key::102;informatics;informatica;informática;informática;informatica; +key:103;forschungsgemeinschaft;comunita ricerca;research community;research foundation;research association diff --git a/dnet-pace-core/src/test/java/DedupTestIT.java b/dnet-pace-core/src/test/java/DedupTestIT.java new file mode 100644 index 000000000..f9f1ed328 --- /dev/null +++ b/dnet-pace-core/src/test/java/DedupTestIT.java @@ -0,0 +1,4 @@ +public class DedupTestIT { + + +} diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java index 883dde57c..c92c6fed3 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java @@ -10,6 +10,7 @@ import java.util.HashMap; import java.util.Map; import static junit.framework.Assert.assertEquals; +import static junit.framework.Assert.assertTrue; public class DistanceAlgoTest extends AbstractPaceFunctions { @@ -61,5 +62,45 @@ public class DistanceAlgoTest extends AbstractPaceFunctions { assertEquals(result, 1.0); } + @Test + public void testJaroWinklerNormalizedName3() { + + final JaroWinklerNormalizedName jaroWinklerNormalizedName = new JaroWinklerNormalizedName(params); + double result = jaroWinklerNormalizedName.distance("Biblioteca dell'Universita di Bologna", "Università di Bologna"); + + System.out.println("result = " + result); + assertEquals(result, 0.0); + } + + @Test + public void testJaroWinklerNormalizedName4() { + + final JaroWinklerNormalizedName jaroWinklerNormalizedName = new JaroWinklerNormalizedName(params); + double result = jaroWinklerNormalizedName.distance("Universita degli studi di Pisa", "Universita di Pisa"); + + System.out.println("result = " + result); + assertEquals(result, 1.0); + } + + @Test + public void testJaroWinklerNormalizedName5() { + + final JaroWinklerNormalizedName jaroWinklerNormalizedName = new JaroWinklerNormalizedName(params); + double result = jaroWinklerNormalizedName.distance("RESEARCH PROMOTION FOUNDATION", "IDRYMA PROOTHISIS EREVNAS"); + + System.out.println("result = " + result); + assertEquals(result, 1.0); + } + + @Test + public void testJaroWinklerNormalizedName6() { + + final JaroWinklerNormalizedName jaroWinklerNormalizedName = new JaroWinklerNormalizedName(params); + double result = jaroWinklerNormalizedName.distance("Fonds zur Förderung der wissenschaftlichen Forschung (Austrian Science Fund)", "Fonds zur Förderung der wissenschaftlichen Forschung"); + + System.out.println("result = " + result); + assertTrue(result> 0.9); + + } } diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/tree/ComparatorTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/tree/ComparatorTest.java deleted file mode 100644 index 240a5d6bd..000000000 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/tree/ComparatorTest.java +++ /dev/null @@ -1,144 +0,0 @@ -package eu.dnetlib.pace.tree; - -import eu.dnetlib.pace.AbstractPaceTest; -import eu.dnetlib.pace.config.Type; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.model.FieldListImpl; -import eu.dnetlib.pace.model.FieldValueImpl; -import org.junit.Before; -import org.junit.Test; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; - -import static junit.framework.Assert.assertEquals; -import static junit.framework.Assert.assertTrue; - -//test class for comparators (to be used into the tree nodes) -public class ComparatorTest extends AbstractPaceTest { - - private Map params; - - @Before - public void setup() { - params = new HashMap<>(); - //to put all the needed parameters - params.put("minCoauthors", 5); - params.put("maxCoauthors", 200); - - } - - @Test - public void testCoauthorsMatch() { - - final CoauthorsMatch coauthorsMatch = new CoauthorsMatch(params); - - Field a = createFieldList(Arrays.asList("la bruzzo, sandro", "atzori, claudio", "artini, michele", "de bonis, michele", "bardi, alessia", "dell'amico, andrea", "baglioni, miriam"), "coauthors"); - Field b = createFieldList(Arrays.asList("la bruzzo, sandro"), "coauthors"); - - double result1 = coauthorsMatch.compare(a, b); - double result2 = coauthorsMatch.compare(a, a); - - System.out.println("a = " + a); - System.out.println("b = " + b); - - System.out.println("a vs b = " + result1); - System.out.println("a vs a = " + result2); - - assertEquals(result1, -1.0); - assertEquals(result2, 7.0); - } - - @Test - public void testExactMatch() { - - final ExactMatch exactMatch = new ExactMatch(params); - - Field a = new FieldValueImpl(Type.String, "doi", "10.1000/0000000000"); - Field b = new FieldValueImpl(Type.String, "doi", "10.1033/0000000000"); - Field c = new FieldValueImpl(Type.String, "doi", ""); - - double result1 = exactMatch.compare(a,a); - double result2 = exactMatch.compare(a,b); - double result3 = exactMatch.compare(a,c); - - System.out.println("a = " + a); - System.out.println("b = " + b); - System.out.println("c = " + c); - - System.out.println("a vs a = " + result1); - System.out.println("a vs b = " + result2); - System.out.println("a vs c = " + result3); - - assertEquals(result1, 1.0); - assertEquals(result2, 0.0); - assertEquals(result3, -1.0); - - } - - @Test - public void testSimilarMatch() { - - final SimilarMatch similarMatch = new SimilarMatch(params); - - Field a = new FieldValueImpl(Type.String, "firstname", "sandro"); - Field b = new FieldValueImpl(Type.String, "firstname", "s."); - Field c = new FieldValueImpl(Type.String, "firstname", "stefano"); - - double result1 = similarMatch.compare(a,b); - double result2 = similarMatch.compare(a,c); - double result3 = similarMatch.compare(b,c); - - System.out.println("a = " + a); - System.out.println("b = " + b); - System.out.println("c = " + c); - - System.out.println("a vs b = " + result1); - System.out.println("a vs c = " + result2); - System.out.println("b vs c = " + result3); - - assertEquals(result1, 1.0); - assertEquals(result3, 1.0); - assertTrue(result2<0.7); - - } - - @Test - public void testTopicsMatch() { - - final TopicsMatch topicsMatch = new TopicsMatch(params); - - Field a = createFieldList(Arrays.asList("0.0", "1.0", "0.0"), "topics"); - Field b = createFieldList(Arrays.asList("0.0", "0.0", "1.0"), "topics"); - Field c = createFieldList(Arrays.asList("0.5", "0.5", "0.0"), "topics"); - - double result1 = topicsMatch.compare(a,a); - double result2 = topicsMatch.compare(a,c); - double result3 = topicsMatch.compare(b,c); - - System.out.println("a = " + a); - System.out.println("b = " + b); - System.out.println("c = " + c); - - System.out.println("a vs a = " + result1); - System.out.println("a vs c = " + result2); - System.out.println("b vs c = " + result3); - - assertEquals(result1, 1.0); - assertEquals(result2, 0.5); - assertEquals(result3, 0.0); - - } - - @Test - public void testUndefinedNode() { - - final UndefinedNode undefinedNode = new UndefinedNode(); - double result = undefinedNode.compare(new FieldListImpl(),new FieldListImpl()); - - assertEquals(result, 0.0); - } - - -} From 4bd5a9beeed4a377e73980c8f5eb5148c3cbceaa Mon Sep 17 00:00:00 2001 From: miconis Date: Tue, 26 Mar 2019 15:48:21 +0100 Subject: [PATCH 059/449] minor changes --- .DS_Store | Bin 0 -> 6148 bytes dnet-pace-core/.DS_Store | Bin 0 -> 6148 bytes dnet-pace-core/src/test/java/DedupTestIT.java | 4 ---- .../java/eu/dnetlib/pace/config/ConfigTest.java | 5 ----- 4 files changed, 9 deletions(-) create mode 100644 .DS_Store create mode 100644 dnet-pace-core/.DS_Store delete mode 100644 dnet-pace-core/src/test/java/DedupTestIT.java diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..f316c9219296a9a98d8caa439cdb8bb91f2e01fc GIT binary patch literal 6148 zcmeHKJ5Iw;5S#}oA|XLa%69=5+`x*$3Ag|dyNhr{lHOge&Flx{$f2b`v(oPPt#`cg z6kacYvOaZBzzV>UZiusmx!Ha5ncZZ@u=q0?bm-|P>}S>26UKcYHI9tRw| z!*=&R3_G^K{iJk{H*8tbFb?=cKP|l8O<5@*1*Cu!kOES`1}bfN7pN!&q<|FoQNX?r zm2TK3j)DH^VDJ@yxM13i*S<>-t0jnS;uy#btpt@A)RHSk2|DvN>)OOIFz6`Wna|12 zB{!7f-I=dmj?xAyN&zWwslaUA&p%mn5B}fE4&w3Y5j>WwYihkC*%t z-WdGA4yVhFiDML&0#ZN Date: Wed, 3 Apr 2019 09:40:14 +0200 Subject: [PATCH 060/449] addition of a sparktester test, implementation of 2 different classes for testing in dnet-dedup-test module, addition of new terms in the vocabulary and change in the implementation of the JaroWinklerNormalizedName comparator --- .DS_Store | Bin 6148 -> 8196 bytes dependencies.txt | 252 ++++++++++++++++++ dnet-openaire-data-protos/.DS_Store | Bin 0 -> 6148 bytes dnet-openaire-data-protos/pom.xml | 2 +- dnet-pace-core/pom.xml | 1 + .../java/eu/dnetlib/pace/model/FieldDef.java | 27 +- .../eu/dnetlib/pace/config/ConfigTest.java | 2 +- .../eu/dnetlib/pace/config/org.curr.conf | 36 +++ 8 files changed, 309 insertions(+), 11 deletions(-) create mode 100644 dependencies.txt create mode 100644 dnet-openaire-data-protos/.DS_Store create mode 100644 dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/org.curr.conf diff --git a/.DS_Store b/.DS_Store index f316c9219296a9a98d8caa439cdb8bb91f2e01fc..6e3f1637d5b17caf360870ae4679b8b5b7b5cbdb 100644 GIT binary patch literal 8196 zcmeHMU2GIp6h5aEIx~g#7WrvAP&PE!23lwfw(=uxe?tWVVYjpt=rX%=fr-6IF(EcaO*AIH`D9FdFvg#A=gtx+@L&@}<4khz zx%ZxP?!EinZ|>Q%3jo+tFxvrY0YIT5B&($ACXdjIa>G*=jZ~0C@&{-I6F8Luw+q?B8SBLX6KucnOMp}ak~E`M*OJ_jEH)6dyi*R{o)S9gu6OG!Q_M*}SI zs3nqrgPaU%h zDlmeA-(z?gwk&0tJZpHvmKhvPbEn_tMegkKb{GNo_6y@Q?T8Fy+sN*<_(X;+>UEvK zupI7%^T|053|o%rPV~41$Mi${X!5YV+X#-*JW69Sdx*9OpekyH)lN=!bab>N*0Y4`jj1?X`_0s9Huf6`pg^QsVV01A-jqG2oFHvh2u$533 z^UT8C_KUp|^|BXlhPpoZfVLyU78VJ&UHQOr9e*$Pe3BVf?GwI(IoH|kaiJg1xpraP z@iVL@XV|%dO^48J+bQcf_eTPLED)_x-}Qpt&@jVT!RLE8*;z&2N7nv`Mbim0hU&Tb zi?0!xs0{8hl4h zJH|MlW=odV*469!OzYAtBZaK>P{9fwW{rw6&8n&wG_26I114={r)!GYO!l6lhML9| zy1rj%dOc3H896jH>ss0uJ2oQ2mR3zmKS*3+zA9bYJ2ZXBHnQAirYhIz?9%k%qC}Ey zj|Mky(e#m=J3dYy#jnAZXgJxe>tkZ&9flw5%5#Tyby+M=pRS*FwNL1}O;hZN_}MHe z6(XQECfj6};$|JJr6{=#4$w=Ohm-I$oPuZIG@OO=@Gg7^pTK4K6h4D1@C|$qKf=%O z8~hG`z@Mn#VqA)~ScfZdEv~~h+=yE-iQU+P+i^GU!4#(PAm)(cVLXC)Jch?{5+A|G z@f1Fb&*AgXX@hyBC-^UAh5ij9K_&I)o({g`hrT1cIwBJbJx73&&v7_sxZ0u&l zuJ0evw%r+Ge?4EYxn|*AixxLDHn(NC#yTEc}alQatHRiaOL(ARNxTGC!y zUgG&o{tpp5`7uRMj8#bMMEy#ISj80CT~*(t5cOGE*wt3olck}sIa0e$YgdTMY_8O9 z&^lEjJ1dvkjoM~~IL+ow*DbAGa^F@>V<6s1Ra&pASLt^A+dMr3=imeQm>7BmzJ%}K z2lxqoMZ^lM3Aw4`GHk#mY{u2N23xTcyNIQma0~Y10B*xUVrm+Pa2Q8$l$dIUOtsKM z9}8F{#y*NC@dl`6(!ThRg0%o28S=Mcd1zEocit$(X~NaWfH zDu<|uN7zkC8M;s!x`2QD| C=aNnU delta 110 zcmZp1XfcprU|?W$DortDU=RQ@Ie-{MGqg`E6q~50$jCG?z------------------------ +[INFO] Building dnet-dedup 3.0.3-SNAPSHOT [1/3] +[INFO] --------------------------------[ pom ]--------------------------------- +[INFO] +[INFO] --- maven-dependency-plugin:3.0.0:tree (default-cli) @ dnet-dedup --- +[INFO] eu.dnetlib:dnet-dedup:pom:3.0.3-SNAPSHOT +[INFO] +[INFO] ---------------------< eu.dnetlib:dnet-pace-core >---------------------- +[INFO] Building dnet-pace-core 3.0.3-SNAPSHOT [2/3] +[INFO] --------------------------------[ jar ]--------------------------------- +[INFO] +[INFO] --- maven-dependency-plugin:3.0.0:tree (default-cli) @ dnet-pace-core --- +[INFO] eu.dnetlib:dnet-pace-core:jar:3.0.3-SNAPSHOT +[INFO] +- edu.cmu:secondstring:jar:1.0.0:compile +[INFO] +- com.google.guava:guava:jar:15.0:compile +[INFO] +- com.google.code.gson:gson:jar:2.2.2:compile +[INFO] +- commons-lang:commons-lang:jar:2.6:compile +[INFO] +- commons-io:commons-io:jar:2.4:compile +[INFO] +- commons-collections:commons-collections:jar:3.2.1:compile +[INFO] +- com.googlecode.protobuf-java-format:protobuf-java-format:jar:1.2:compile +[INFO] +- org.antlr:stringtemplate:jar:3.2:compile +[INFO] | \- org.antlr:antlr:jar:2.7.7:compile +[INFO] +- commons-logging:commons-logging:jar:1.1.3:compile +[INFO] +- junit:junit:jar:4.9:test +[INFO] | \- org.hamcrest:hamcrest-core:jar:1.1:test +[INFO] +- org.reflections:reflections:jar:0.9.10:compile +[INFO] | +- org.javassist:javassist:jar:3.19.0-GA:compile +[INFO] | \- com.google.code.findbugs:annotations:jar:2.0.1:compile +[INFO] +- com.fasterxml.jackson.core:jackson-databind:jar:2.6.6:compile +[INFO] | +- com.fasterxml.jackson.core:jackson-annotations:jar:2.6.0:compile +[INFO] | \- com.fasterxml.jackson.core:jackson-core:jar:2.6.6:compile +[INFO] +- org.codehaus.jackson:jackson-mapper-asl:jar:1.9.13:compile +[INFO] | \- org.codehaus.jackson:jackson-core-asl:jar:1.9.13:compile +[INFO] \- org.apache.commons:commons-math3:jar:3.6.1:compile +[INFO] +[INFO] ---------------------< eu.dnetlib:dnet-dedup-test >--------------------- +[INFO] Building dnet-dedup-test 3.0.3-SNAPSHOT [3/3] +[INFO] --------------------------------[ jar ]--------------------------------- +[INFO] +[INFO] --- maven-dependency-plugin:3.0.0:tree (default-cli) @ dnet-dedup-test --- +[INFO] eu.dnetlib:dnet-dedup-test:jar:3.0.3-SNAPSHOT +[INFO] +- eu.dnetlib:dnet-pace-core:jar:3.0.3-SNAPSHOT:compile +[INFO] | +- edu.cmu:secondstring:jar:1.0.0:compile +[INFO] | +- com.google.guava:guava:jar:15.0:compile +[INFO] | +- com.google.code.gson:gson:jar:2.2.2:compile +[INFO] | +- commons-lang:commons-lang:jar:2.6:compile +[INFO] | +- commons-io:commons-io:jar:2.4:compile +[INFO] | +- commons-collections:commons-collections:jar:3.2.1:compile +[INFO] | +- com.googlecode.protobuf-java-format:protobuf-java-format:jar:1.2:compile +[INFO] | +- org.antlr:stringtemplate:jar:3.2:compile +[INFO] | | \- org.antlr:antlr:jar:2.7.7:compile +[INFO] | +- commons-logging:commons-logging:jar:1.1.3:compile +[INFO] | +- org.reflections:reflections:jar:0.9.10:compile +[INFO] | | +- org.javassist:javassist:jar:3.19.0-GA:compile +[INFO] | | \- com.google.code.findbugs:annotations:jar:2.0.1:compile +[INFO] | +- com.fasterxml.jackson.core:jackson-databind:jar:2.6.6:compile +[INFO] | | +- com.fasterxml.jackson.core:jackson-annotations:jar:2.6.0:compile +[INFO] | | \- com.fasterxml.jackson.core:jackson-core:jar:2.6.6:compile +[INFO] | +- org.codehaus.jackson:jackson-mapper-asl:jar:1.9.13:compile +[INFO] | | \- org.codehaus.jackson:jackson-core-asl:jar:1.9.13:compile +[INFO] | \- org.apache.commons:commons-math3:jar:3.6.1:compile +[INFO] +- eu.dnetlib:dnet-openaire-data-protos:jar:3.9.3-proto250:compile +[INFO] | +- com.google.protobuf:protobuf-java:jar:2.5.0:compile +[INFO] | \- log4j:log4j:jar:1.2.17:compile (version selected from constraint [1.2.17,1.2.17]) +[INFO] +- org.apache.spark:spark-core_2.11:jar:2.2.0:provided +[INFO] | +- org.apache.avro:avro:jar:1.7.7:provided +[INFO] | | +- com.thoughtworks.paranamer:paranamer:jar:2.3:provided +[INFO] | | \- org.apache.commons:commons-compress:jar:1.4.1:provided +[INFO] | | \- org.tukaani:xz:jar:1.0:provided +[INFO] | +- org.apache.avro:avro-mapred:jar:hadoop2:1.7.7:provided +[INFO] | | +- org.apache.avro:avro-ipc:jar:1.7.7:provided +[INFO] | | \- org.apache.avro:avro-ipc:jar:tests:1.7.7:provided +[INFO] | +- com.twitter:chill_2.11:jar:0.8.0:provided +[INFO] | | \- com.esotericsoftware:kryo-shaded:jar:3.0.3:provided +[INFO] | | +- com.esotericsoftware:minlog:jar:1.3.0:provided +[INFO] | | \- org.objenesis:objenesis:jar:2.1:provided +[INFO] | +- com.twitter:chill-java:jar:0.8.0:provided +[INFO] | +- org.apache.xbean:xbean-asm5-shaded:jar:4.4:provided +[INFO] | +- org.apache.hadoop:hadoop-client:jar:2.6.5:provided +[INFO] | | +- org.apache.hadoop:hadoop-common:jar:2.6.5:provided +[INFO] | | | +- commons-cli:commons-cli:jar:1.2:provided +[INFO] | | | +- xmlenc:xmlenc:jar:0.52:provided +[INFO] | | | +- commons-httpclient:commons-httpclient:jar:3.1:provided +[INFO] | | | +- commons-configuration:commons-configuration:jar:1.6:provided +[INFO] | | | | +- commons-digester:commons-digester:jar:1.8:provided +[INFO] | | | | | \- commons-beanutils:commons-beanutils:jar:1.7.0:provided +[INFO] | | | | \- commons-beanutils:commons-beanutils-core:jar:1.8.0:provided +[INFO] | | | +- org.apache.hadoop:hadoop-auth:jar:2.6.5:provided +[INFO] | | | | \- org.apache.directory.server:apacheds-kerberos-codec:jar:2.0.0-M15:provided +[INFO] | | | | +- org.apache.directory.server:apacheds-i18n:jar:2.0.0-M15:provided +[INFO] | | | | +- org.apache.directory.api:api-asn1-api:jar:1.0.0-M20:provided +[INFO] | | | | \- org.apache.directory.api:api-util:jar:1.0.0-M20:provided +[INFO] | | | +- org.apache.curator:curator-client:jar:2.6.0:provided +[INFO] | | | \- org.htrace:htrace-core:jar:3.0.4:provided +[INFO] | | +- org.apache.hadoop:hadoop-hdfs:jar:2.6.5:provided +[INFO] | | | +- org.mortbay.jetty:jetty-util:jar:6.1.26:provided +[INFO] | | | \- xerces:xercesImpl:jar:2.9.1:provided +[INFO] | | | \- xml-apis:xml-apis:jar:1.3.04:provided +[INFO] | | +- org.apache.hadoop:hadoop-mapreduce-client-app:jar:2.6.5:provided +[INFO] | | | +- org.apache.hadoop:hadoop-mapreduce-client-common:jar:2.6.5:provided +[INFO] | | | | +- org.apache.hadoop:hadoop-yarn-client:jar:2.6.5:provided +[INFO] | | | | \- org.apache.hadoop:hadoop-yarn-server-common:jar:2.6.5:provided +[INFO] | | | \- org.apache.hadoop:hadoop-mapreduce-client-shuffle:jar:2.6.5:provided +[INFO] | | +- org.apache.hadoop:hadoop-yarn-api:jar:2.6.5:provided +[INFO] | | +- org.apache.hadoop:hadoop-mapreduce-client-core:jar:2.6.5:provided +[INFO] | | | \- org.apache.hadoop:hadoop-yarn-common:jar:2.6.5:provided +[INFO] | | | +- javax.xml.bind:jaxb-api:jar:2.2.2:provided +[INFO] | | | | \- javax.xml.stream:stax-api:jar:1.0-2:provided +[INFO] | | | +- org.codehaus.jackson:jackson-jaxrs:jar:1.9.13:provided +[INFO] | | | \- org.codehaus.jackson:jackson-xc:jar:1.9.13:provided +[INFO] | | +- org.apache.hadoop:hadoop-mapreduce-client-jobclient:jar:2.6.5:provided +[INFO] | | \- org.apache.hadoop:hadoop-annotations:jar:2.6.5:provided +[INFO] | +- org.apache.spark:spark-launcher_2.11:jar:2.2.0:provided +[INFO] | +- org.apache.spark:spark-network-common_2.11:jar:2.2.0:provided +[INFO] | | \- org.fusesource.leveldbjni:leveldbjni-all:jar:1.8:provided +[INFO] | +- org.apache.spark:spark-network-shuffle_2.11:jar:2.2.0:provided +[INFO] | +- org.apache.spark:spark-unsafe_2.11:jar:2.2.0:provided +[INFO] | +- net.java.dev.jets3t:jets3t:jar:0.9.3:provided +[INFO] | | +- org.apache.httpcomponents:httpcore:jar:4.3.3:provided +[INFO] | | +- org.apache.httpcomponents:httpclient:jar:4.3.6:provided +[INFO] | | +- javax.activation:activation:jar:1.1.1:provided +[INFO] | | +- mx4j:mx4j:jar:3.0.2:provided +[INFO] | | +- javax.mail:mail:jar:1.4.7:provided +[INFO] | | +- org.bouncycastle:bcprov-jdk15on:jar:1.51:provided +[INFO] | | \- com.jamesmurty.utils:java-xmlbuilder:jar:1.0:provided +[INFO] | | \- net.iharder:base64:jar:2.3.8:provided +[INFO] | +- org.apache.curator:curator-recipes:jar:2.6.0:provided +[INFO] | | +- org.apache.curator:curator-framework:jar:2.6.0:provided +[INFO] | | \- org.apache.zookeeper:zookeeper:jar:3.4.6:provided +[INFO] | +- javax.servlet:javax.servlet-api:jar:3.1.0:provided +[INFO] | +- org.apache.commons:commons-lang3:jar:3.5:provided +[INFO] | +- com.google.code.findbugs:jsr305:jar:1.3.9:provided +[INFO] | +- org.slf4j:slf4j-api:jar:1.7.16:provided +[INFO] | +- org.slf4j:jul-to-slf4j:jar:1.7.16:provided +[INFO] | +- org.slf4j:jcl-over-slf4j:jar:1.7.16:provided +[INFO] | +- org.slf4j:slf4j-log4j12:jar:1.7.16:provided +[INFO] | +- com.ning:compress-lzf:jar:1.0.3:provided +[INFO] | +- org.xerial.snappy:snappy-java:jar:1.1.2.6:provided +[INFO] | +- net.jpountz.lz4:lz4:jar:1.3.0:provided +[INFO] | +- org.roaringbitmap:RoaringBitmap:jar:0.5.11:provided +[INFO] | +- commons-net:commons-net:jar:2.2:provided +[INFO] | +- org.scala-lang:scala-library:jar:2.11.8:provided +[INFO] | +- org.json4s:json4s-jackson_2.11:jar:3.2.11:provided +[INFO] | | \- org.json4s:json4s-core_2.11:jar:3.2.11:provided +[INFO] | | +- org.json4s:json4s-ast_2.11:jar:3.2.11:provided +[INFO] | | \- org.scala-lang:scalap:jar:2.11.0:provided +[INFO] | | \- org.scala-lang:scala-compiler:jar:2.11.0:provided +[INFO] | | +- org.scala-lang.modules:scala-xml_2.11:jar:1.0.1:provided +[INFO] | | \- org.scala-lang.modules:scala-parser-combinators_2.11:jar:1.0.1:provided +[INFO] | +- org.glassfish.jersey.core:jersey-client:jar:2.22.2:provided +[INFO] | | +- javax.ws.rs:javax.ws.rs-api:jar:2.0.1:provided +[INFO] | | +- org.glassfish.hk2:hk2-api:jar:2.4.0-b34:provided +[INFO] | | | +- org.glassfish.hk2:hk2-utils:jar:2.4.0-b34:provided +[INFO] | | | \- org.glassfish.hk2.external:aopalliance-repackaged:jar:2.4.0-b34:provided +[INFO] | | +- org.glassfish.hk2.external:javax.inject:jar:2.4.0-b34:provided +[INFO] | | \- org.glassfish.hk2:hk2-locator:jar:2.4.0-b34:provided +[INFO] | +- org.glassfish.jersey.core:jersey-common:jar:2.22.2:provided +[INFO] | | +- javax.annotation:javax.annotation-api:jar:1.2:provided +[INFO] | | +- org.glassfish.jersey.bundles.repackaged:jersey-guava:jar:2.22.2:provided +[INFO] | | \- org.glassfish.hk2:osgi-resource-locator:jar:1.0.1:provided +[INFO] | +- org.glassfish.jersey.core:jersey-server:jar:2.22.2:provided +[INFO] | | +- org.glassfish.jersey.media:jersey-media-jaxb:jar:2.22.2:provided +[INFO] | | \- javax.validation:validation-api:jar:1.1.0.Final:provided +[INFO] | +- org.glassfish.jersey.containers:jersey-container-servlet:jar:2.22.2:provided +[INFO] | +- org.glassfish.jersey.containers:jersey-container-servlet-core:jar:2.22.2:provided +[INFO] | +- io.netty:netty-all:jar:4.0.43.Final:provided +[INFO] | +- io.netty:netty:jar:3.9.9.Final:provided +[INFO] | +- com.clearspring.analytics:stream:jar:2.7.0:provided +[INFO] | +- io.dropwizard.metrics:metrics-core:jar:3.1.2:provided +[INFO] | +- io.dropwizard.metrics:metrics-jvm:jar:3.1.2:provided +[INFO] | +- io.dropwizard.metrics:metrics-json:jar:3.1.2:provided +[INFO] | +- io.dropwizard.metrics:metrics-graphite:jar:3.1.2:provided +[INFO] | +- com.fasterxml.jackson.module:jackson-module-scala_2.11:jar:2.6.5:provided +[INFO] | | +- org.scala-lang:scala-reflect:jar:2.11.7:provided +[INFO] | | \- com.fasterxml.jackson.module:jackson-module-paranamer:jar:2.6.5:provided +[INFO] | +- org.apache.ivy:ivy:jar:2.4.0:provided +[INFO] | +- oro:oro:jar:2.0.8:provided +[INFO] | +- net.razorvine:pyrolite:jar:4.13:provided +[INFO] | +- net.sf.py4j:py4j:jar:0.10.4:provided +[INFO] | +- org.apache.spark:spark-tags_2.11:jar:2.2.0:provided +[INFO] | +- org.apache.commons:commons-crypto:jar:1.0.0:provided +[INFO] | \- org.spark-project.spark:unused:jar:1.0.0:provided +[INFO] +- org.apache.spark:spark-graphx_2.11:jar:2.2.0:provided +[INFO] | +- org.apache.spark:spark-mllib-local_2.11:jar:2.2.0:provided +[INFO] | | \- org.scalanlp:breeze_2.11:jar:0.13.1:provided +[INFO] | | +- org.scalanlp:breeze-macros_2.11:jar:0.13.1:provided +[INFO] | | +- net.sf.opencsv:opencsv:jar:2.3:provided +[INFO] | | +- com.github.rwl:jtransforms:jar:2.4.0:provided +[INFO] | | +- org.spire-math:spire_2.11:jar:0.13.0:provided +[INFO] | | | +- org.spire-math:spire-macros_2.11:jar:0.13.0:provided +[INFO] | | | \- org.typelevel:machinist_2.11:jar:0.6.1:provided +[INFO] | | \- com.chuusai:shapeless_2.11:jar:2.3.2:provided +[INFO] | | \- org.typelevel:macro-compat_2.11:jar:1.1.1:provided +[INFO] | +- com.github.fommil.netlib:core:jar:1.1.2:provided +[INFO] | \- net.sourceforge.f2j:arpack_combined_all:jar:0.1:provided +[INFO] +- org.apache.spark:spark-sql_2.11:jar:2.2.0:provided +[INFO] | +- com.univocity:univocity-parsers:jar:2.2.1:provided +[INFO] | +- org.apache.spark:spark-sketch_2.11:jar:2.2.0:provided +[INFO] | +- org.apache.spark:spark-catalyst_2.11:jar:2.2.0:provided +[INFO] | | +- org.codehaus.janino:janino:jar:3.0.0:provided +[INFO] | | +- org.codehaus.janino:commons-compiler:jar:3.0.0:provided +[INFO] | | \- org.antlr:antlr4-runtime:jar:4.5.3:provided +[INFO] | +- org.apache.parquet:parquet-column:jar:1.8.2:provided +[INFO] | | +- org.apache.parquet:parquet-common:jar:1.8.2:provided +[INFO] | | \- org.apache.parquet:parquet-encoding:jar:1.8.2:provided +[INFO] | \- org.apache.parquet:parquet-hadoop:jar:1.8.2:provided +[INFO] | +- org.apache.parquet:parquet-format:jar:2.3.1:provided +[INFO] | \- org.apache.parquet:parquet-jackson:jar:1.8.2:provided +[INFO] +- eu.dnetlib:dnet-openaireplus-mapping-utils:jar:6.2.18:test +[INFO] | +- com.ximpleware:vtd-xml:jar:2.13.4:test (version selected from constraint [2.12,3.0.0)) +[INFO] | +- commons-codec:commons-codec:jar:1.9:provided +[INFO] | +- dom4j:dom4j:jar:1.6.1:test (version selected from constraint [1.6.1,1.6.1]) +[INFO] | +- net.sf.supercsv:super-csv:jar:2.4.0:test +[INFO] | +- eu.dnetlib:cnr-misc-utils:jar:1.0.6-SNAPSHOT:test (version selected from constraint [1.0.0,2.0.0)) +[INFO] | | +- jaxen:jaxen:jar:1.1.6:test +[INFO] | | +- saxonica:saxon:jar:9.1.0.8:test +[INFO] | | +- saxonica:saxon-dom:jar:9.1.0.8:test +[INFO] | | +- jgrapht:jgrapht:jar:0.7.2:test +[INFO] | | +- net.sf.ehcache:ehcache:jar:2.8.0:test +[INFO] | | \- org.springframework:spring-test:jar:4.2.5.RELEASE:test (version selected from constraint [4.2.5.RELEASE,4.2.5.RELEASE]) +[INFO] | | \- org.springframework:spring-core:jar:4.2.5.RELEASE:test +[INFO] | +- eu.dnetlib:dnet-hadoop-commons:jar:2.0.2-SNAPSHOT:test (version selected from constraint [2.0.0,3.0.0)) +[INFO] | | +- org.apache.hadoop:hadoop-core:jar:2.0.0-mr1-cdh4.7.0:test +[INFO] | | | +- commons-el:commons-el:jar:1.0:test +[INFO] | | | \- hsqldb:hsqldb:jar:1.8.0.10:test +[INFO] | | \- org.springframework:spring-beans:jar:4.2.5.RELEASE:test (version selected from constraint [4.2.5.RELEASE,4.2.5.RELEASE]) +[INFO] | \- eu.dnetlib:dnet-index-solr-common:jar:1.3.1:test (version selected from constraint [1.0.0,1.3.1]) +[INFO] | \- org.apache.solr:solr-solrj:jar:4.9.0:test +[INFO] | +- org.apache.httpcomponents:httpmime:jar:4.3.1:test +[INFO] | \- org.noggit:noggit:jar:0.5:test +[INFO] \- junit:junit:jar:4.9:test +[INFO] \- org.hamcrest:hamcrest-core:jar:1.1:test +[INFO] ------------------------------------------------------------------------ +[INFO] Reactor Summary: +[INFO] +[INFO] dnet-dedup 3.0.3-SNAPSHOT .......................... SUCCESS [ 1.152 s] +[INFO] dnet-pace-core ..................................... SUCCESS [ 0.117 s] +[INFO] dnet-dedup-test 3.0.3-SNAPSHOT ..................... SUCCESS [ 1.407 s] +[INFO] ------------------------------------------------------------------------ +[INFO] BUILD SUCCESS +[INFO] ------------------------------------------------------------------------ +[INFO] Total time: 3.216 s +[INFO] Finished at: 2019-03-29T15:02:42+01:00 +[INFO] ------------------------------------------------------------------------ diff --git a/dnet-openaire-data-protos/.DS_Store b/dnet-openaire-data-protos/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..638b0d7026a296895fb31efe27e5047a6d991ff3 GIT binary patch literal 6148 zcmeHKJ8l9o5S<|it(0a9^us9E~@hB50G26hv>N@w3PC zZ21*CJ0hapdG{vLibw-Dl#2~hvwic4%`&1uIL_G1u>0B`K90x3B>U%paThYkMo#ki zoo^d7DnJFO02QDDRN&zXWQlEFAAT|qqykjn*%h$wLxCIC#4*r69T>a?0L~G1!`yob zV6gzOCXRuKz%;19plY@l8g#@<=GDY8FzBM$d}!XR*`cW4j`NGBi`GDnRDcTHEASG_ z*6RNX{!9OVPvVLSP=SA?fX@5(zQdEUwoV>rwYI?5aLc*E%`kTg1~11zFUMF|IbM2F bPDkA7K>iGvE;K6e*9zPK5X%*r literal 0 HcmV?d00001 diff --git a/dnet-openaire-data-protos/pom.xml b/dnet-openaire-data-protos/pom.xml index 47ed2ea8c..f247374c9 100644 --- a/dnet-openaire-data-protos/pom.xml +++ b/dnet-openaire-data-protos/pom.xml @@ -10,7 +10,7 @@ eu.dnetlib dnet-openaire-data-protos jar - 3.9.4-CUSTOM + 3.9.4-proto250 diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index d88dea4e0..925a613db 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -64,6 +64,7 @@ com.fasterxml.jackson.core jackson-databind + org.codehaus.jackson jackson-mapper-asl diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java index b954df7d6..6b85cf49f 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java @@ -1,19 +1,16 @@ package eu.dnetlib.pace.model; -import java.io.Serializable; -import java.lang.reflect.InvocationTargetException; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - import com.google.common.base.Splitter; import com.google.common.collect.Lists; import com.google.gson.Gson; import eu.dnetlib.pace.config.PaceConfig; import eu.dnetlib.pace.config.Type; -import eu.dnetlib.pace.distance.*; -import eu.dnetlib.pace.distance.algo.*; -import eu.dnetlib.pace.util.PaceException; +import eu.dnetlib.pace.distance.DistanceAlgo; + +import java.io.Serializable; +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * The schema is composed by field definitions (FieldDef). Each field has a type, a name, and an associated distance algorithm. @@ -60,6 +57,18 @@ public class FieldDef implements Serializable { return name; } + public void setName(String name) { + this.name = name; + } + + public void setPath(String path) { + this.path = path; + } + + public void setIgnoreMissing(boolean ignoreMissing) { + this.ignoreMissing = ignoreMissing; + } + public String getPath() { return path; } diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java index d47768b72..575b3c786 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java @@ -32,7 +32,7 @@ public class ConfigTest extends AbstractPaceTest { @Test public void dedupConfigTest() { - DedupConfig load = DedupConfig.load(readFromClasspath("result.pace.conf.json")); + DedupConfig load = DedupConfig.load(readFromClasspath("org.curr.conf")); System.out.println(load.toString()); } diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/org.curr.conf b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/org.curr.conf new file mode 100644 index 000000000..fd4fbbe79 --- /dev/null +++ b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/org.curr.conf @@ -0,0 +1,36 @@ +{ + "wf" : { + "threshold" : "0.9", + "dedupRun" : "001", + "entityType" : "organization", + "orderField" : "legalname", + "queueMaxSize" : "2000", + "groupMaxSize" : "10", + "slidingWindowSize" : "200", + "rootBuilder" : [ "organization", "projectOrganization_participation_isParticipant", "datasourceOrganization_provision_isProvidedBy" ], + "includeChildren" : "true" + }, + "pace" : { + "clustering" : [ + { "name" : "sortedngrampairs", "fields" : [ "legalname" ], "params" : { "max" : 2, "ngramLen" : "3"} }, + { "name" : "suffixprefix", "fields" : [ "legalname" ], "params" : { "max" : 1, "len" : "3" } }, + { "name" : "urlclustering", "fields" : [ "websiteurl" ], "params" : { } } + ], + "strictConditions" : [ + { "name" : "exactMatch", "fields" : [ "gridid" ] } + ], + "conditions" : [ + { "name" : "exactMatch", "fields" : [ "country" ] }, + { "name" : "DomainExactMatch", "fields" : [ "websiteurl" ] } + ], + "model" : [ + { "name" : "legalname", "algo" : "Null", "type" : "String", "weight" : "0", "ignoreMissing" : "false", "path" : "organization/metadata/legalname/value" }, + { "name" : "country", "algo" : "Null", "type" : "String", "weight" : "0", "ignoreMissing" : "true", "path" : "organization/metadata/country/classid" }, + { "name" : "legalshortname", "algo" : "JaroWinklerNormalizedName", "type" : "String", "weight" : "0.1", "ignoreMissing" : "true", "path" : "organization/metadata/legalshortname/value" }, + { "name" : "legalname", "algo" : "JaroWinklerNormalizedName", "type" : "String", "weight" : "0.9", "ignoreMissing" : "false", "path" : "organization/metadata/legalname/value", "params" : {"windowSize" : 4, "threshold" : 0.5} }, + { "name" : "websiteurl", "algo" : "Null", "type" : "URL", "weight" : "0", "ignoreMissing" : "true", "path" : "organization/metadata/websiteurl/value", "params" : { "host" : 0.5, "path" : 0.5 } }, + { "name" : "gridid", "algo" : "Null", "type" : "String", "weight" : "0.0", "ignoreMissing" : "true", "path" : "pid[qualifier#classid = {grid}]/value" } + ], + "blacklists" : { } + } +} \ No newline at end of file From a1ff4daa7fbd3b78990e890feb3d539bef033bce Mon Sep 17 00:00:00 2001 From: miconis Date: Wed, 3 Apr 2019 12:25:56 +0200 Subject: [PATCH 061/449] [maven-release-plugin] prepare release dnet-dedup-3.0.9 --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 3f9f5175b..040a1401d 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 3.0.9-SNAPSHOT + 3.0.9 ../pom.xml From 15fb9eb88345dfe5a799f390814c48b3870fcd5a Mon Sep 17 00:00:00 2001 From: miconis Date: Wed, 3 Apr 2019 12:26:05 +0200 Subject: [PATCH 062/449] [maven-release-plugin] prepare for next development iteration --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 040a1401d..835bfa5e8 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 3.0.9 + 3.0.10-SNAPSHOT ../pom.xml From 3e61a90c8f7c812e0d1022e7aa09ee8511467ab4 Mon Sep 17 00:00:00 2001 From: miconis Date: Wed, 3 Apr 2019 12:27:28 +0200 Subject: [PATCH 063/449] [maven-release-plugin] rollback the release of dnet-dedup-3.0.9 --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 835bfa5e8..3f9f5175b 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 3.0.10-SNAPSHOT + 3.0.9-SNAPSHOT ../pom.xml From 98c179c8fb6ec048819cb5671555c8e530a5556c Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Wed, 3 Apr 2019 12:34:52 +0200 Subject: [PATCH 064/449] [maven-release-plugin] prepare release dnet-dedup-3.0.9 --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 3f9f5175b..040a1401d 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 3.0.9-SNAPSHOT + 3.0.9 ../pom.xml From f7a3bdf3f8b20cfaa379898ac9ebf136fdb42ca7 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Wed, 3 Apr 2019 12:35:00 +0200 Subject: [PATCH 065/449] [maven-release-plugin] prepare for next development iteration --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 040a1401d..835bfa5e8 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 3.0.9 + 3.0.10-SNAPSHOT ../pom.xml From e8db8f2abba8c4a4f9bb95c35fa3cb683929c726 Mon Sep 17 00:00:00 2001 From: miconis Date: Tue, 21 May 2019 16:38:26 +0200 Subject: [PATCH 066/449] implementation of the integration test, addition of document blocks to group entities after clustering --- dependencies.txt | 252 ------------------ .../pace/clustering/UrlClustering.java | 20 +- .../eu/dnetlib/pace/config/PaceConfig.java | 15 +- .../algo/LevensteinTitleIgnoreVersion.java | 3 + .../eu/dnetlib/pace/model/ClusteringDef.java | 9 +- .../java/eu/dnetlib/pace/model/CondDef.java | 5 +- .../java/eu/dnetlib/pace/model/FieldDef.java | 5 +- .../eu/dnetlib/pace/model/TreeNodeDef.java | 145 ---------- .../dnetlib/pace/tree/AbstractComparator.java | 33 --- .../eu/dnetlib/pace/tree/CoauthorsMatch.java | 42 --- .../java/eu/dnetlib/pace/tree/Comparator.java | 10 - .../eu/dnetlib/pace/tree/ComparatorClass.java | 14 - .../java/eu/dnetlib/pace/tree/ExactMatch.java | 25 -- .../eu/dnetlib/pace/tree/SimilarMatch.java | 31 --- .../eu/dnetlib/pace/tree/TopicsMatch.java | 36 --- .../eu/dnetlib/pace/tree/UndefinedNode.java | 22 -- .../eu/dnetlib/pace/tree/support/AggType.java | 21 -- .../dnetlib/pace/tree/support/MatchType.java | 20 -- .../eu/dnetlib/pace/util/PaceResolver.java | 15 -- 19 files changed, 34 insertions(+), 689 deletions(-) delete mode 100644 dependencies.txt delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/TreeNodeDef.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AbstractComparator.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/CoauthorsMatch.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Comparator.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ComparatorClass.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatch.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SimilarMatch.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/TopicsMatch.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/UndefinedNode.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AggType.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/MatchType.java diff --git a/dependencies.txt b/dependencies.txt deleted file mode 100644 index 29c11c16d..000000000 --- a/dependencies.txt +++ /dev/null @@ -1,252 +0,0 @@ -[INFO] Scanning for projects... -[INFO] ------------------------------------------------------------------------ -[INFO] Reactor Build Order: -[INFO] -[INFO] dnet-dedup [pom] -[INFO] dnet-pace-core [jar] -[INFO] dnet-dedup-test [jar] -[INFO] -[INFO] -----------------------< eu.dnetlib:dnet-dedup >------------------------ -[INFO] Building dnet-dedup 3.0.3-SNAPSHOT [1/3] -[INFO] --------------------------------[ pom ]--------------------------------- -[INFO] -[INFO] --- maven-dependency-plugin:3.0.0:tree (default-cli) @ dnet-dedup --- -[INFO] eu.dnetlib:dnet-dedup:pom:3.0.3-SNAPSHOT -[INFO] -[INFO] ---------------------< eu.dnetlib:dnet-pace-core >---------------------- -[INFO] Building dnet-pace-core 3.0.3-SNAPSHOT [2/3] -[INFO] --------------------------------[ jar ]--------------------------------- -[INFO] -[INFO] --- maven-dependency-plugin:3.0.0:tree (default-cli) @ dnet-pace-core --- -[INFO] eu.dnetlib:dnet-pace-core:jar:3.0.3-SNAPSHOT -[INFO] +- edu.cmu:secondstring:jar:1.0.0:compile -[INFO] +- com.google.guava:guava:jar:15.0:compile -[INFO] +- com.google.code.gson:gson:jar:2.2.2:compile -[INFO] +- commons-lang:commons-lang:jar:2.6:compile -[INFO] +- commons-io:commons-io:jar:2.4:compile -[INFO] +- commons-collections:commons-collections:jar:3.2.1:compile -[INFO] +- com.googlecode.protobuf-java-format:protobuf-java-format:jar:1.2:compile -[INFO] +- org.antlr:stringtemplate:jar:3.2:compile -[INFO] | \- org.antlr:antlr:jar:2.7.7:compile -[INFO] +- commons-logging:commons-logging:jar:1.1.3:compile -[INFO] +- junit:junit:jar:4.9:test -[INFO] | \- org.hamcrest:hamcrest-core:jar:1.1:test -[INFO] +- org.reflections:reflections:jar:0.9.10:compile -[INFO] | +- org.javassist:javassist:jar:3.19.0-GA:compile -[INFO] | \- com.google.code.findbugs:annotations:jar:2.0.1:compile -[INFO] +- com.fasterxml.jackson.core:jackson-databind:jar:2.6.6:compile -[INFO] | +- com.fasterxml.jackson.core:jackson-annotations:jar:2.6.0:compile -[INFO] | \- com.fasterxml.jackson.core:jackson-core:jar:2.6.6:compile -[INFO] +- org.codehaus.jackson:jackson-mapper-asl:jar:1.9.13:compile -[INFO] | \- org.codehaus.jackson:jackson-core-asl:jar:1.9.13:compile -[INFO] \- org.apache.commons:commons-math3:jar:3.6.1:compile -[INFO] -[INFO] ---------------------< eu.dnetlib:dnet-dedup-test >--------------------- -[INFO] Building dnet-dedup-test 3.0.3-SNAPSHOT [3/3] -[INFO] --------------------------------[ jar ]--------------------------------- -[INFO] -[INFO] --- maven-dependency-plugin:3.0.0:tree (default-cli) @ dnet-dedup-test --- -[INFO] eu.dnetlib:dnet-dedup-test:jar:3.0.3-SNAPSHOT -[INFO] +- eu.dnetlib:dnet-pace-core:jar:3.0.3-SNAPSHOT:compile -[INFO] | +- edu.cmu:secondstring:jar:1.0.0:compile -[INFO] | +- com.google.guava:guava:jar:15.0:compile -[INFO] | +- com.google.code.gson:gson:jar:2.2.2:compile -[INFO] | +- commons-lang:commons-lang:jar:2.6:compile -[INFO] | +- commons-io:commons-io:jar:2.4:compile -[INFO] | +- commons-collections:commons-collections:jar:3.2.1:compile -[INFO] | +- com.googlecode.protobuf-java-format:protobuf-java-format:jar:1.2:compile -[INFO] | +- org.antlr:stringtemplate:jar:3.2:compile -[INFO] | | \- org.antlr:antlr:jar:2.7.7:compile -[INFO] | +- commons-logging:commons-logging:jar:1.1.3:compile -[INFO] | +- org.reflections:reflections:jar:0.9.10:compile -[INFO] | | +- org.javassist:javassist:jar:3.19.0-GA:compile -[INFO] | | \- com.google.code.findbugs:annotations:jar:2.0.1:compile -[INFO] | +- com.fasterxml.jackson.core:jackson-databind:jar:2.6.6:compile -[INFO] | | +- com.fasterxml.jackson.core:jackson-annotations:jar:2.6.0:compile -[INFO] | | \- com.fasterxml.jackson.core:jackson-core:jar:2.6.6:compile -[INFO] | +- org.codehaus.jackson:jackson-mapper-asl:jar:1.9.13:compile -[INFO] | | \- org.codehaus.jackson:jackson-core-asl:jar:1.9.13:compile -[INFO] | \- org.apache.commons:commons-math3:jar:3.6.1:compile -[INFO] +- eu.dnetlib:dnet-openaire-data-protos:jar:3.9.3-proto250:compile -[INFO] | +- com.google.protobuf:protobuf-java:jar:2.5.0:compile -[INFO] | \- log4j:log4j:jar:1.2.17:compile (version selected from constraint [1.2.17,1.2.17]) -[INFO] +- org.apache.spark:spark-core_2.11:jar:2.2.0:provided -[INFO] | +- org.apache.avro:avro:jar:1.7.7:provided -[INFO] | | +- com.thoughtworks.paranamer:paranamer:jar:2.3:provided -[INFO] | | \- org.apache.commons:commons-compress:jar:1.4.1:provided -[INFO] | | \- org.tukaani:xz:jar:1.0:provided -[INFO] | +- org.apache.avro:avro-mapred:jar:hadoop2:1.7.7:provided -[INFO] | | +- org.apache.avro:avro-ipc:jar:1.7.7:provided -[INFO] | | \- org.apache.avro:avro-ipc:jar:tests:1.7.7:provided -[INFO] | +- com.twitter:chill_2.11:jar:0.8.0:provided -[INFO] | | \- com.esotericsoftware:kryo-shaded:jar:3.0.3:provided -[INFO] | | +- com.esotericsoftware:minlog:jar:1.3.0:provided -[INFO] | | \- org.objenesis:objenesis:jar:2.1:provided -[INFO] | +- com.twitter:chill-java:jar:0.8.0:provided -[INFO] | +- org.apache.xbean:xbean-asm5-shaded:jar:4.4:provided -[INFO] | +- org.apache.hadoop:hadoop-client:jar:2.6.5:provided -[INFO] | | +- org.apache.hadoop:hadoop-common:jar:2.6.5:provided -[INFO] | | | +- commons-cli:commons-cli:jar:1.2:provided -[INFO] | | | +- xmlenc:xmlenc:jar:0.52:provided -[INFO] | | | +- commons-httpclient:commons-httpclient:jar:3.1:provided -[INFO] | | | +- commons-configuration:commons-configuration:jar:1.6:provided -[INFO] | | | | +- commons-digester:commons-digester:jar:1.8:provided -[INFO] | | | | | \- commons-beanutils:commons-beanutils:jar:1.7.0:provided -[INFO] | | | | \- commons-beanutils:commons-beanutils-core:jar:1.8.0:provided -[INFO] | | | +- org.apache.hadoop:hadoop-auth:jar:2.6.5:provided -[INFO] | | | | \- org.apache.directory.server:apacheds-kerberos-codec:jar:2.0.0-M15:provided -[INFO] | | | | +- org.apache.directory.server:apacheds-i18n:jar:2.0.0-M15:provided -[INFO] | | | | +- org.apache.directory.api:api-asn1-api:jar:1.0.0-M20:provided -[INFO] | | | | \- org.apache.directory.api:api-util:jar:1.0.0-M20:provided -[INFO] | | | +- org.apache.curator:curator-client:jar:2.6.0:provided -[INFO] | | | \- org.htrace:htrace-core:jar:3.0.4:provided -[INFO] | | +- org.apache.hadoop:hadoop-hdfs:jar:2.6.5:provided -[INFO] | | | +- org.mortbay.jetty:jetty-util:jar:6.1.26:provided -[INFO] | | | \- xerces:xercesImpl:jar:2.9.1:provided -[INFO] | | | \- xml-apis:xml-apis:jar:1.3.04:provided -[INFO] | | +- org.apache.hadoop:hadoop-mapreduce-client-app:jar:2.6.5:provided -[INFO] | | | +- org.apache.hadoop:hadoop-mapreduce-client-common:jar:2.6.5:provided -[INFO] | | | | +- org.apache.hadoop:hadoop-yarn-client:jar:2.6.5:provided -[INFO] | | | | \- org.apache.hadoop:hadoop-yarn-server-common:jar:2.6.5:provided -[INFO] | | | \- org.apache.hadoop:hadoop-mapreduce-client-shuffle:jar:2.6.5:provided -[INFO] | | +- org.apache.hadoop:hadoop-yarn-api:jar:2.6.5:provided -[INFO] | | +- org.apache.hadoop:hadoop-mapreduce-client-core:jar:2.6.5:provided -[INFO] | | | \- org.apache.hadoop:hadoop-yarn-common:jar:2.6.5:provided -[INFO] | | | +- javax.xml.bind:jaxb-api:jar:2.2.2:provided -[INFO] | | | | \- javax.xml.stream:stax-api:jar:1.0-2:provided -[INFO] | | | +- org.codehaus.jackson:jackson-jaxrs:jar:1.9.13:provided -[INFO] | | | \- org.codehaus.jackson:jackson-xc:jar:1.9.13:provided -[INFO] | | +- org.apache.hadoop:hadoop-mapreduce-client-jobclient:jar:2.6.5:provided -[INFO] | | \- org.apache.hadoop:hadoop-annotations:jar:2.6.5:provided -[INFO] | +- org.apache.spark:spark-launcher_2.11:jar:2.2.0:provided -[INFO] | +- org.apache.spark:spark-network-common_2.11:jar:2.2.0:provided -[INFO] | | \- org.fusesource.leveldbjni:leveldbjni-all:jar:1.8:provided -[INFO] | +- org.apache.spark:spark-network-shuffle_2.11:jar:2.2.0:provided -[INFO] | +- org.apache.spark:spark-unsafe_2.11:jar:2.2.0:provided -[INFO] | +- net.java.dev.jets3t:jets3t:jar:0.9.3:provided -[INFO] | | +- org.apache.httpcomponents:httpcore:jar:4.3.3:provided -[INFO] | | +- org.apache.httpcomponents:httpclient:jar:4.3.6:provided -[INFO] | | +- javax.activation:activation:jar:1.1.1:provided -[INFO] | | +- mx4j:mx4j:jar:3.0.2:provided -[INFO] | | +- javax.mail:mail:jar:1.4.7:provided -[INFO] | | +- org.bouncycastle:bcprov-jdk15on:jar:1.51:provided -[INFO] | | \- com.jamesmurty.utils:java-xmlbuilder:jar:1.0:provided -[INFO] | | \- net.iharder:base64:jar:2.3.8:provided -[INFO] | +- org.apache.curator:curator-recipes:jar:2.6.0:provided -[INFO] | | +- org.apache.curator:curator-framework:jar:2.6.0:provided -[INFO] | | \- org.apache.zookeeper:zookeeper:jar:3.4.6:provided -[INFO] | +- javax.servlet:javax.servlet-api:jar:3.1.0:provided -[INFO] | +- org.apache.commons:commons-lang3:jar:3.5:provided -[INFO] | +- com.google.code.findbugs:jsr305:jar:1.3.9:provided -[INFO] | +- org.slf4j:slf4j-api:jar:1.7.16:provided -[INFO] | +- org.slf4j:jul-to-slf4j:jar:1.7.16:provided -[INFO] | +- org.slf4j:jcl-over-slf4j:jar:1.7.16:provided -[INFO] | +- org.slf4j:slf4j-log4j12:jar:1.7.16:provided -[INFO] | +- com.ning:compress-lzf:jar:1.0.3:provided -[INFO] | +- org.xerial.snappy:snappy-java:jar:1.1.2.6:provided -[INFO] | +- net.jpountz.lz4:lz4:jar:1.3.0:provided -[INFO] | +- org.roaringbitmap:RoaringBitmap:jar:0.5.11:provided -[INFO] | +- commons-net:commons-net:jar:2.2:provided -[INFO] | +- org.scala-lang:scala-library:jar:2.11.8:provided -[INFO] | +- org.json4s:json4s-jackson_2.11:jar:3.2.11:provided -[INFO] | | \- org.json4s:json4s-core_2.11:jar:3.2.11:provided -[INFO] | | +- org.json4s:json4s-ast_2.11:jar:3.2.11:provided -[INFO] | | \- org.scala-lang:scalap:jar:2.11.0:provided -[INFO] | | \- org.scala-lang:scala-compiler:jar:2.11.0:provided -[INFO] | | +- org.scala-lang.modules:scala-xml_2.11:jar:1.0.1:provided -[INFO] | | \- org.scala-lang.modules:scala-parser-combinators_2.11:jar:1.0.1:provided -[INFO] | +- org.glassfish.jersey.core:jersey-client:jar:2.22.2:provided -[INFO] | | +- javax.ws.rs:javax.ws.rs-api:jar:2.0.1:provided -[INFO] | | +- org.glassfish.hk2:hk2-api:jar:2.4.0-b34:provided -[INFO] | | | +- org.glassfish.hk2:hk2-utils:jar:2.4.0-b34:provided -[INFO] | | | \- org.glassfish.hk2.external:aopalliance-repackaged:jar:2.4.0-b34:provided -[INFO] | | +- org.glassfish.hk2.external:javax.inject:jar:2.4.0-b34:provided -[INFO] | | \- org.glassfish.hk2:hk2-locator:jar:2.4.0-b34:provided -[INFO] | +- org.glassfish.jersey.core:jersey-common:jar:2.22.2:provided -[INFO] | | +- javax.annotation:javax.annotation-api:jar:1.2:provided -[INFO] | | +- org.glassfish.jersey.bundles.repackaged:jersey-guava:jar:2.22.2:provided -[INFO] | | \- org.glassfish.hk2:osgi-resource-locator:jar:1.0.1:provided -[INFO] | +- org.glassfish.jersey.core:jersey-server:jar:2.22.2:provided -[INFO] | | +- org.glassfish.jersey.media:jersey-media-jaxb:jar:2.22.2:provided -[INFO] | | \- javax.validation:validation-api:jar:1.1.0.Final:provided -[INFO] | +- org.glassfish.jersey.containers:jersey-container-servlet:jar:2.22.2:provided -[INFO] | +- org.glassfish.jersey.containers:jersey-container-servlet-core:jar:2.22.2:provided -[INFO] | +- io.netty:netty-all:jar:4.0.43.Final:provided -[INFO] | +- io.netty:netty:jar:3.9.9.Final:provided -[INFO] | +- com.clearspring.analytics:stream:jar:2.7.0:provided -[INFO] | +- io.dropwizard.metrics:metrics-core:jar:3.1.2:provided -[INFO] | +- io.dropwizard.metrics:metrics-jvm:jar:3.1.2:provided -[INFO] | +- io.dropwizard.metrics:metrics-json:jar:3.1.2:provided -[INFO] | +- io.dropwizard.metrics:metrics-graphite:jar:3.1.2:provided -[INFO] | +- com.fasterxml.jackson.module:jackson-module-scala_2.11:jar:2.6.5:provided -[INFO] | | +- org.scala-lang:scala-reflect:jar:2.11.7:provided -[INFO] | | \- com.fasterxml.jackson.module:jackson-module-paranamer:jar:2.6.5:provided -[INFO] | +- org.apache.ivy:ivy:jar:2.4.0:provided -[INFO] | +- oro:oro:jar:2.0.8:provided -[INFO] | +- net.razorvine:pyrolite:jar:4.13:provided -[INFO] | +- net.sf.py4j:py4j:jar:0.10.4:provided -[INFO] | +- org.apache.spark:spark-tags_2.11:jar:2.2.0:provided -[INFO] | +- org.apache.commons:commons-crypto:jar:1.0.0:provided -[INFO] | \- org.spark-project.spark:unused:jar:1.0.0:provided -[INFO] +- org.apache.spark:spark-graphx_2.11:jar:2.2.0:provided -[INFO] | +- org.apache.spark:spark-mllib-local_2.11:jar:2.2.0:provided -[INFO] | | \- org.scalanlp:breeze_2.11:jar:0.13.1:provided -[INFO] | | +- org.scalanlp:breeze-macros_2.11:jar:0.13.1:provided -[INFO] | | +- net.sf.opencsv:opencsv:jar:2.3:provided -[INFO] | | +- com.github.rwl:jtransforms:jar:2.4.0:provided -[INFO] | | +- org.spire-math:spire_2.11:jar:0.13.0:provided -[INFO] | | | +- org.spire-math:spire-macros_2.11:jar:0.13.0:provided -[INFO] | | | \- org.typelevel:machinist_2.11:jar:0.6.1:provided -[INFO] | | \- com.chuusai:shapeless_2.11:jar:2.3.2:provided -[INFO] | | \- org.typelevel:macro-compat_2.11:jar:1.1.1:provided -[INFO] | +- com.github.fommil.netlib:core:jar:1.1.2:provided -[INFO] | \- net.sourceforge.f2j:arpack_combined_all:jar:0.1:provided -[INFO] +- org.apache.spark:spark-sql_2.11:jar:2.2.0:provided -[INFO] | +- com.univocity:univocity-parsers:jar:2.2.1:provided -[INFO] | +- org.apache.spark:spark-sketch_2.11:jar:2.2.0:provided -[INFO] | +- org.apache.spark:spark-catalyst_2.11:jar:2.2.0:provided -[INFO] | | +- org.codehaus.janino:janino:jar:3.0.0:provided -[INFO] | | +- org.codehaus.janino:commons-compiler:jar:3.0.0:provided -[INFO] | | \- org.antlr:antlr4-runtime:jar:4.5.3:provided -[INFO] | +- org.apache.parquet:parquet-column:jar:1.8.2:provided -[INFO] | | +- org.apache.parquet:parquet-common:jar:1.8.2:provided -[INFO] | | \- org.apache.parquet:parquet-encoding:jar:1.8.2:provided -[INFO] | \- org.apache.parquet:parquet-hadoop:jar:1.8.2:provided -[INFO] | +- org.apache.parquet:parquet-format:jar:2.3.1:provided -[INFO] | \- org.apache.parquet:parquet-jackson:jar:1.8.2:provided -[INFO] +- eu.dnetlib:dnet-openaireplus-mapping-utils:jar:6.2.18:test -[INFO] | +- com.ximpleware:vtd-xml:jar:2.13.4:test (version selected from constraint [2.12,3.0.0)) -[INFO] | +- commons-codec:commons-codec:jar:1.9:provided -[INFO] | +- dom4j:dom4j:jar:1.6.1:test (version selected from constraint [1.6.1,1.6.1]) -[INFO] | +- net.sf.supercsv:super-csv:jar:2.4.0:test -[INFO] | +- eu.dnetlib:cnr-misc-utils:jar:1.0.6-SNAPSHOT:test (version selected from constraint [1.0.0,2.0.0)) -[INFO] | | +- jaxen:jaxen:jar:1.1.6:test -[INFO] | | +- saxonica:saxon:jar:9.1.0.8:test -[INFO] | | +- saxonica:saxon-dom:jar:9.1.0.8:test -[INFO] | | +- jgrapht:jgrapht:jar:0.7.2:test -[INFO] | | +- net.sf.ehcache:ehcache:jar:2.8.0:test -[INFO] | | \- org.springframework:spring-test:jar:4.2.5.RELEASE:test (version selected from constraint [4.2.5.RELEASE,4.2.5.RELEASE]) -[INFO] | | \- org.springframework:spring-core:jar:4.2.5.RELEASE:test -[INFO] | +- eu.dnetlib:dnet-hadoop-commons:jar:2.0.2-SNAPSHOT:test (version selected from constraint [2.0.0,3.0.0)) -[INFO] | | +- org.apache.hadoop:hadoop-core:jar:2.0.0-mr1-cdh4.7.0:test -[INFO] | | | +- commons-el:commons-el:jar:1.0:test -[INFO] | | | \- hsqldb:hsqldb:jar:1.8.0.10:test -[INFO] | | \- org.springframework:spring-beans:jar:4.2.5.RELEASE:test (version selected from constraint [4.2.5.RELEASE,4.2.5.RELEASE]) -[INFO] | \- eu.dnetlib:dnet-index-solr-common:jar:1.3.1:test (version selected from constraint [1.0.0,1.3.1]) -[INFO] | \- org.apache.solr:solr-solrj:jar:4.9.0:test -[INFO] | +- org.apache.httpcomponents:httpmime:jar:4.3.1:test -[INFO] | \- org.noggit:noggit:jar:0.5:test -[INFO] \- junit:junit:jar:4.9:test -[INFO] \- org.hamcrest:hamcrest-core:jar:1.1:test -[INFO] ------------------------------------------------------------------------ -[INFO] Reactor Summary: -[INFO] -[INFO] dnet-dedup 3.0.3-SNAPSHOT .......................... SUCCESS [ 1.152 s] -[INFO] dnet-pace-core ..................................... SUCCESS [ 0.117 s] -[INFO] dnet-dedup-test 3.0.3-SNAPSHOT ..................... SUCCESS [ 1.407 s] -[INFO] ------------------------------------------------------------------------ -[INFO] BUILD SUCCESS -[INFO] ------------------------------------------------------------------------ -[INFO] Total time: 3.216 s -[INFO] Finished at: 2019-03-29T15:02:42+01:00 -[INFO] ------------------------------------------------------------------------ diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/UrlClustering.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/UrlClustering.java index 3c0261376..9955d5fbe 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/UrlClustering.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/UrlClustering.java @@ -22,12 +22,17 @@ public class UrlClustering extends AbstractPaceFunctions implements ClusteringFu @Override public Collection apply(List fields) { - return fields.stream() - .filter(f -> !f.isEmpty()) - .map(Field::stringValue) - .map(this::asUrl) - .map(URL::getHost) - .collect(Collectors.toCollection(HashSet::new)); + try { + return fields.stream() + .filter(f -> !f.isEmpty()) + .map(Field::stringValue) + .map(this::asUrl) + .map(URL::getHost) + .collect(Collectors.toCollection(HashSet::new)); + } + catch (IllegalStateException e){ + return new HashSet<>(); + } } @Override @@ -35,7 +40,7 @@ public class UrlClustering extends AbstractPaceFunctions implements ClusteringFu return null; } - private URL asUrl(final String value) { + private URL asUrl(String value) { try { return new URL(value); } catch (MalformedURLException e) { @@ -44,4 +49,5 @@ public class UrlClustering extends AbstractPaceFunctions implements ClusteringFu } } + } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java index 1f6cdc049..df66f538a 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java @@ -6,7 +6,6 @@ import eu.dnetlib.pace.condition.ConditionAlgo; import eu.dnetlib.pace.model.ClusteringDef; import eu.dnetlib.pace.model.CondDef; import eu.dnetlib.pace.model.FieldDef; -import eu.dnetlib.pace.model.TreeNodeDef; import eu.dnetlib.pace.util.PaceResolver; import org.apache.commons.collections.CollectionUtils; import org.codehaus.jackson.annotate.JsonIgnore; @@ -24,11 +23,9 @@ public class PaceConfig implements Serializable { private List clustering; private Map> blacklists; - private Map decisionTree; - private Map modelMap; - public static PaceResolver paceResolver; + // public PaceResolver paceResolver; public PaceConfig() {} @@ -38,7 +35,7 @@ public class PaceConfig implements Serializable { modelMap.put(fd.getName(), fd); } - paceResolver = new PaceResolver(); +// paceResolver = new PaceResolver(); } public List getModel() { @@ -61,14 +58,6 @@ public class PaceConfig implements Serializable { return conditions; } - public Map getDecisionTree() { - return decisionTree; - } - - public void setDecisionTree(Map decisionTree) { - this.decisionTree = decisionTree; - } - @JsonIgnore public List getConditionAlgos() { return asConditionAlgos(getConditions()); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinTitleIgnoreVersion.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinTitleIgnoreVersion.java index 0d8dd609c..ff8b34bf3 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinTitleIgnoreVersion.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinTitleIgnoreVersion.java @@ -32,6 +32,9 @@ public class LevensteinTitleIgnoreVersion extends SecondStringDistanceAlgo { ca = ca.replaceAll("\\d", "").replaceAll(getRomans(ca), "").trim(); cb = cb.replaceAll("\\d", "").replaceAll(getRomans(cb), "").trim(); + ca = filterAllStopWords(ca); + cb = filterAllStopWords(cb); + final String cca = finalCleanup(ca); final String ccb = finalCleanup(cb); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java index ece4de896..3ee4be266 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java @@ -2,12 +2,17 @@ package eu.dnetlib.pace.model; import java.io.IOException; import java.io.Serializable; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; import eu.dnetlib.pace.clustering.*; import eu.dnetlib.pace.config.PaceConfig; import eu.dnetlib.pace.util.PaceException; +import eu.dnetlib.pace.util.PaceResolver; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.codehaus.jackson.map.ObjectMapper; public class ClusteringDef implements Serializable { @@ -18,6 +23,8 @@ public class ClusteringDef implements Serializable { private Map params; + PaceResolver paceResolver = new PaceResolver(); + public ClusteringDef() {} public String getName() { @@ -30,7 +37,7 @@ public class ClusteringDef implements Serializable { public ClusteringFunction clusteringFunction() { try { - return PaceConfig.paceResolver.getClusteringFunction(getName(), params); + return paceResolver.getClusteringFunction(getName(), params); } catch (PaceException e) { e.printStackTrace(); return null; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/CondDef.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/CondDef.java index ccbca5897..b74a3cfce 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/CondDef.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/CondDef.java @@ -7,6 +7,7 @@ import java.util.List; import eu.dnetlib.pace.condition.*; import eu.dnetlib.pace.config.PaceConfig; import eu.dnetlib.pace.util.PaceException; +import eu.dnetlib.pace.util.PaceResolver; import org.codehaus.jackson.map.ObjectMapper; public class CondDef implements Serializable { @@ -15,10 +16,12 @@ public class CondDef implements Serializable { private List fields; + PaceResolver paceResolver = new PaceResolver(); + public CondDef() {} public ConditionAlgo conditionAlgo(final List fields){ - return PaceConfig.paceResolver.getConditionAlgo(getName(), fields); + return paceResolver.getConditionAlgo(getName(), fields); } public String getName() { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java index ef74c0d18..56ca5a425 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java @@ -6,6 +6,7 @@ import com.google.gson.Gson; import eu.dnetlib.pace.config.PaceConfig; import eu.dnetlib.pace.config.Type; import eu.dnetlib.pace.distance.DistanceAlgo; +import eu.dnetlib.pace.util.PaceResolver; import java.io.Serializable; import java.util.HashMap; @@ -33,6 +34,8 @@ public class FieldDef implements Serializable { private double weight; + PaceResolver paceResolver = new PaceResolver(); + /** * Sets maximum size for the repeatable fields in the model. -1 for unbounded size. */ @@ -85,7 +88,7 @@ public class FieldDef implements Serializable { params.put("length", getLength()); */ params.put("weight", getWeight()); - return PaceConfig.paceResolver.getDistanceAlgo(getAlgo(), params); + return paceResolver.getDistanceAlgo(getAlgo(), params); } public boolean isIgnoreMissing() { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/TreeNodeDef.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/TreeNodeDef.java deleted file mode 100644 index b1d4917b3..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/TreeNodeDef.java +++ /dev/null @@ -1,145 +0,0 @@ -package eu.dnetlib.pace.model; - -import eu.dnetlib.pace.config.PaceConfig; -import eu.dnetlib.pace.tree.Comparator; -import eu.dnetlib.pace.tree.support.AggType; -import eu.dnetlib.pace.util.PaceException; -import org.apache.commons.math3.stat.descriptive.DescriptiveStatistics; -import org.codehaus.jackson.map.ObjectMapper; - -import java.io.IOException; -import java.io.Serializable; -import java.util.List; - -public class TreeNodeDef implements Serializable { - - private List fields; //list of fields involved in the tree node (contains comparators to be used and field on which apply the comparator) - private AggType aggregation; //how to aggregate similarity measures for every field - - private double threshold; //threshold on the similarity measure - - private String positive; //specifies the next node in case of positive result: similarity>=th - private String negative; //specifies the next node in case of negative result: similarity fields, double threshold, AggType aggregation, String positive, String negative, String undefined) { - this.fields = fields; - this.threshold = threshold; - this.aggregation = aggregation; - this.positive = positive; - this.negative = negative; - this.undefined = undefined; - } - - public boolean isIgnoreMissing() { - return ignoreMissing; - } - - public void setIgnoreMissing(boolean ignoreMissing) { - this.ignoreMissing = ignoreMissing; - } - - public List getFields() { - return fields; - } - - public void setFields(List fields) { - this.fields = fields; - } - - public double getThreshold() { - return threshold; - } - - public void setThreshold(double threshold) { - this.threshold = threshold; - } - - public AggType getAggregation() { - return aggregation; - } - - public void setAggregation(AggType aggregation) { - this.aggregation = aggregation; - } - - public String getPositive() { - return positive; - } - - public void setPositive(String positive) { - this.positive = positive; - } - - public String getNegative() { - return negative; - } - - public void setNegative(String negative) { - this.negative = negative; - } - - public String getUndefined() { - return undefined; - } - - public void setUndefined(String undefined) { - this.undefined = undefined; - } - - @Override - public String toString() { - try { - return new ObjectMapper().writeValueAsString(this); - } catch (IOException e) { - throw new PaceException("Impossible to convert to JSON: ", e); - } - } -} \ No newline at end of file diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AbstractComparator.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AbstractComparator.java deleted file mode 100644 index 76e41ae9c..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AbstractComparator.java +++ /dev/null @@ -1,33 +0,0 @@ -package eu.dnetlib.pace.tree; - -import eu.dnetlib.pace.model.Field; -import org.apache.commons.lang.StringUtils; - -import java.util.Map; - -abstract class AbstractComparator implements Comparator { - - Map params; - - public AbstractComparator(Map params){ - this.params = params; - } - - @Override - public double compare(Field a, Field b) { - return 0.0; - } - - public static double stringSimilarity(String s1, String s2) { - String longer = s1, shorter = s2; - if (s1.length() < s2.length()) { // longer should always have greater length - longer = s2; shorter = s1; - } - int longerLength = longer.length(); - if (longerLength == 0) //if strings have 0 length return 0 (no similarity) - return 0.0; - - return (longerLength - StringUtils.getLevenshteinDistance(longer, shorter)) / (double) longerLength; - } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/CoauthorsMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/CoauthorsMatch.java deleted file mode 100644 index ace3acc21..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/CoauthorsMatch.java +++ /dev/null @@ -1,42 +0,0 @@ -package eu.dnetlib.pace.tree; - -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.model.FieldList; - -import java.util.List; -import java.util.Map; - -@ComparatorClass("coauthorsMatch") -public class CoauthorsMatch extends AbstractComparator { - - public CoauthorsMatch(Map params) { - super(params); - } - - @Override - public double compare(Field a, Field b) { - - final List c1 = ((FieldList) a).stringList(); - final List c2 = ((FieldList) b).stringList(); - - int size1 = c1.size(); - int size2 = c2.size(); - - //few coauthors or too many coauthors - if (size1 < params.getOrDefault("minCoauthors", 5).intValue() || size2 < params.getOrDefault("minCoauthors", 5).intValue() || (size1+size2 > params.getOrDefault("maxCoauthors", 200).intValue())) - return -1; - - int coauthorship = 0; - for (String ca1: c1){ - - for (String ca2: c2){ - - if (stringSimilarity(ca1.replaceAll("\\.","").replaceAll(" ",""), ca2.replaceAll("\\.","").replaceAll(" ",""))>= params.getOrDefault("simTh", 0.7).doubleValue()) - coauthorship++; - } - } - - return coauthorship; - - } -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Comparator.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Comparator.java deleted file mode 100644 index 087028ba2..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Comparator.java +++ /dev/null @@ -1,10 +0,0 @@ -package eu.dnetlib.pace.tree; - -import eu.dnetlib.pace.model.Field; - -public interface Comparator { - - //compare two fields and returns: the distace measure, -1 if undefined - public double compare(Field a, Field b); - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ComparatorClass.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ComparatorClass.java deleted file mode 100644 index a04fba8ee..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ComparatorClass.java +++ /dev/null @@ -1,14 +0,0 @@ -package eu.dnetlib.pace.tree; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.TYPE) -public @interface ComparatorClass { - - public String value(); -} - diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatch.java deleted file mode 100644 index 8e0e60173..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatch.java +++ /dev/null @@ -1,25 +0,0 @@ -package eu.dnetlib.pace.tree; - -import eu.dnetlib.pace.model.Field; - -import java.util.Map; - -@ComparatorClass("exactMatch") -public class ExactMatch extends AbstractComparator { - - public ExactMatch(Map params) { - super(params); - } - - @Override - public double compare(Field a, Field b) { - - if (a.stringValue().isEmpty() || b.stringValue().isEmpty()) - return -1; - else if (a.stringValue().equals(b.stringValue())) - return 1; - else - return 0; - } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SimilarMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SimilarMatch.java deleted file mode 100644 index f8f5fe144..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SimilarMatch.java +++ /dev/null @@ -1,31 +0,0 @@ -package eu.dnetlib.pace.tree; - -import eu.dnetlib.pace.model.Field; - -import java.util.Map; - -@ComparatorClass("similar") -public class SimilarMatch extends AbstractComparator { - - public SimilarMatch(Map params) { - super(params); - } - - @Override - public double compare(Field a, Field b) { - - if (a.stringValue().isEmpty() || b.stringValue().isEmpty()) - return -1; //undefined if one name is missing - - //take only the first name - String firstname1 = a.stringValue().split(" ")[0]; - String firstname2 = b.stringValue().split(" ")[0]; - - if (firstname1.toLowerCase().trim().replaceAll("\\.","").replaceAll("\\s","").length()<=2 || firstname2.toLowerCase().replaceAll("\\.", "").replaceAll("\\s","").length()<=2) //too short names (considered similar) - return 1; - - return stringSimilarity(firstname1,firstname2); - - } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/TopicsMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/TopicsMatch.java deleted file mode 100644 index ea798c7a7..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/TopicsMatch.java +++ /dev/null @@ -1,36 +0,0 @@ -package eu.dnetlib.pace.tree; - -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.model.FieldListImpl; - -import java.util.Map; - -@ComparatorClass("topicsMatch") -public class TopicsMatch extends AbstractComparator { - - public TopicsMatch(Map params) { - super(params); - } - - @Override - public double compare(Field a, Field b) { - - double[] t1 = ((FieldListImpl) a).doubleArray(); - double[] t2 = ((FieldListImpl) b).doubleArray(); - - if (t1 == null || t2 == null) - return -1; //0 similarity if no topics in one of the authors or in both - - double area = 0.0; - - double min_value[] = new double[t1.length]; - for(int i=0; i params; - - @Override - public double compare(Field a, Field b) { - - final List sa = ((FieldList) a).stringList(); - final List sb = ((FieldList) b).stringList(); - - return 0; - } -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AggType.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AggType.java deleted file mode 100644 index bd7bd9fb8..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AggType.java +++ /dev/null @@ -1,21 +0,0 @@ -package eu.dnetlib.pace.tree.support; - -import eu.dnetlib.pace.util.PaceException; - -public enum AggType { - - AVG, - SUM, - MAX, - MIN; - - public static AggType getEnum(String value) { - - try { - return AggType.valueOf(value); - } - catch (IllegalArgumentException e) { - throw new PaceException("Undefined aggregation type", e); - } - } -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/MatchType.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/MatchType.java deleted file mode 100644 index 158d3f99f..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/MatchType.java +++ /dev/null @@ -1,20 +0,0 @@ -package eu.dnetlib.pace.tree.support; - -public enum MatchType { - - ORCID_MATCH, - COAUTHORS_MATCH, - TOPICS_MATCH, - NO_MATCH, - UNDEFINED; - - public static MatchType getEnum(String value) { - - try { - return MatchType.valueOf(value); - } - catch (IllegalArgumentException e) { - return MatchType.UNDEFINED; - } - } -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/PaceResolver.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/PaceResolver.java index d8276549a..f8ebb8038 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/PaceResolver.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/PaceResolver.java @@ -7,8 +7,6 @@ import eu.dnetlib.pace.condition.ConditionClass; import eu.dnetlib.pace.distance.DistanceAlgo; import eu.dnetlib.pace.distance.DistanceClass; import eu.dnetlib.pace.model.FieldDef; -import eu.dnetlib.pace.tree.Comparator; -import eu.dnetlib.pace.tree.ComparatorClass; import org.reflections.Reflections; import java.io.Serializable; @@ -22,7 +20,6 @@ public class PaceResolver implements Serializable { private final Map> clusteringFunctions; private final Map> conditionAlgos; private final Map> distanceAlgos; - private final Map> comparators; public PaceResolver() { @@ -37,10 +34,6 @@ public class PaceResolver implements Serializable { this.distanceAlgos = new Reflections("eu.dnetlib").getTypesAnnotatedWith(DistanceClass.class).stream() .filter(DistanceAlgo.class::isAssignableFrom) .collect(Collectors.toMap(cl -> cl.getAnnotation(DistanceClass.class).value(), cl -> (Class)cl)); - - this.comparators = new Reflections("eu.dnetlib").getTypesAnnotatedWith(ComparatorClass.class).stream() - .filter(Comparator.class::isAssignableFrom) - .collect(Collectors.toMap(cl -> cl.getAnnotation(ComparatorClass.class).value(), cl -> (Class) cl)); } public ClusteringFunction getClusteringFunction(String name, Map params) throws PaceException { @@ -67,12 +60,4 @@ public class PaceResolver implements Serializable { } } - public Comparator getComparator(String name, Map params) throws PaceException { - try { - return comparators.get(name).getDeclaredConstructor(Map.class).newInstance(params); - } catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException | NullPointerException e) { - throw new PaceException(name + " not found ", e); - } - } - } From 54e4d0af041211479632a91f271c5279eae87942 Mon Sep 17 00:00:00 2001 From: miconis Date: Tue, 18 Jun 2019 14:05:31 +0200 Subject: [PATCH 067/449] exact match condition gives undefined if a field is missing, ignoremissing semantics changed: now performs the comparison in any case if =true, if false gives -1 in case of missing --- .../pace/condition/AbstractCondition.java | 27 ++++++++++++++++--- .../pace/condition/DomainExactMatch.java | 2 ++ .../eu/dnetlib/pace/condition/ExactMatch.java | 9 ++++++- .../pace/condition/ExactMatchIgnoreCase.java | 11 +++++++- .../dnetlib/pace/config/translation_map.csv | 2 +- .../pace/distance/DistanceAlgoTest.java | 5 ++-- 6 files changed, 48 insertions(+), 8 deletions(-) diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/AbstractCondition.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/AbstractCondition.java index cf68e740f..c78163d01 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/AbstractCondition.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/AbstractCondition.java @@ -35,11 +35,32 @@ public abstract class AbstractCondition extends AbstractPaceFunctions implements final Field va = a.values(fd.getName()); final Field vb = b.values(fd.getName()); - if ((va.isEmpty() || vb.isEmpty()) && fd.isIgnoreMissing()) { - res.put(fd.getName(), new ConditionEval(cond, va, vb, 0)); - } else { + if (fd.isIgnoreMissing()) { res.put(fd.getName(), verify(fd, va, vb)); } + else { + if (va.isEmpty() || vb.isEmpty()) { + res.put(fd.getName(), new ConditionEval(cond, va, vb, -1)); + } + else { + res.put(fd.getName(), verify(fd, va, vb)); + } + } + + + +// // if ignoreMissing=true always return undefined (0) in case of missing +// if ((va.isEmpty() || vb.isEmpty()) && fd.isIgnoreMissing()) { +// res.put(fd.getName(), new ConditionEval(cond, va, vb, 0)); +// } else { +// if (va.isEmpty()&&vb.isEmpty()) { +// res.put(fd.getName(), new ConditionEval(cond, va, vb, -1)); +// } +// else { +// res.put(fd.getName(), verify(fd, va, vb)); +// } +// } + } return res; } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/DomainExactMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/DomainExactMatch.java index e415f1565..dffe2cacc 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/DomainExactMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/DomainExactMatch.java @@ -21,6 +21,8 @@ public class DomainExactMatch extends ExactMatchIgnoreCase { private URL asUrl(final String value) { try { + if (value.isEmpty()) + return new URL("http://"); return new URL(value); } catch (MalformedURLException e) { // should not happen as checked by pace typing diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ExactMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ExactMatch.java index 2776576c4..a4cd84792 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ExactMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ExactMatch.java @@ -27,7 +27,14 @@ public class ExactMatch extends AbstractCondition { int res; - if (StringUtils.isBlank(fa) && StringUtils.isBlank(fb)) { +// if (StringUtils.isBlank(fa) && StringUtils.isBlank(fb)) { +// res = 0; +// } else { +// res = fa.equals(fb) ? 1 : -1; +// } + + //if there is a blank, undefined result + if (StringUtils.isBlank(fa) || StringUtils.isBlank(fb)) { res = 0; } else { res = fa.equals(fb) ? 1 : -1; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ExactMatchIgnoreCase.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ExactMatchIgnoreCase.java index 7741f3858..e9925ec6d 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ExactMatchIgnoreCase.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ExactMatchIgnoreCase.java @@ -5,6 +5,7 @@ import java.util.List; import eu.dnetlib.pace.distance.eval.ConditionEval; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.model.FieldDef; +import org.apache.commons.lang.StringUtils; /** * The Class ExactMatch. @@ -24,7 +25,15 @@ public class ExactMatchIgnoreCase extends AbstractCondition { final String fa = getValue(a); final String fb = getValue(b); - return new ConditionEval(cond, a, b, fa.equalsIgnoreCase(fb) ? 1 : -1); + int res; + + if (StringUtils.isBlank(fa) || StringUtils.isBlank(fb)) { + res = 0; + } else { + res = fa.equalsIgnoreCase(fb) ? 1 : -1; + } + + return new ConditionEval(cond, a, b, res); } protected String getValue(final Field f) { diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/translation_map.csv b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/translation_map.csv index 55d114c79..ef49c2f9e 100644 --- a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/translation_map.csv +++ b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/translation_map.csv @@ -1,4 +1,4 @@ -key::1;university;università;università studi;universitario;universitaria;université;universitaire;universitaires;universidad;universitade;Universität;Uniwersytet;университет;universiteit;πανεπιστήμιο +key::1;university;università;università studi;universitario;universitaria;université;universitaire;universitaires;universidad;universitade;Universität;universitaet;Uniwersytet;университет;universiteit;πανεπιστήμιο key::2;studies;studi;études;estudios;estudos;Studien;studia;исследования;studies;σπουδές key::3;advanced;superiore;supérieur;supérieure;supérieurs;supérieures;avancado;avancados;fortgeschrittene;fortgeschritten;zaawansowany;передовой;gevorderd;gevorderde;προχωρημένος;προχωρημένη;προχωρημένο;προχωρημένες;προχωρημένα key::4;institute;istituto;institut;instituto;instituto;Institut;instytut;институт;instituut;ινστιτούτο diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java index c92c6fed3..3943e4f8e 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java @@ -48,9 +48,10 @@ public class DistanceAlgoTest extends AbstractPaceFunctions { @Test public void testJaroWinklerNormalizedName() { final JaroWinklerNormalizedName jaroWinklerNormalizedName = new JaroWinklerNormalizedName(params); - double result = jaroWinklerNormalizedName.distance("Universita di Pisa", "Universita di Parma"); + double result = jaroWinklerNormalizedName.distance("Free University of Bozen-Bolzano", "University of the Free State"); - assertEquals(result, 0.0); + System.out.println("result = " + result); + assertEquals(1.0, result); } @Test From e3f86b92c8abf09e824dedbbab2dcd7988bc9b82 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Tue, 18 Jun 2019 14:44:42 +0200 Subject: [PATCH 068/449] cleanup --- .../pace/condition/AbstractCondition.java | 21 ++----------------- 1 file changed, 2 insertions(+), 19 deletions(-) diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/AbstractCondition.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/AbstractCondition.java index c78163d01..2b4aa29a1 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/AbstractCondition.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/AbstractCondition.java @@ -37,30 +37,13 @@ public abstract class AbstractCondition extends AbstractPaceFunctions implements if (fd.isIgnoreMissing()) { res.put(fd.getName(), verify(fd, va, vb)); - } - else { + } else { if (va.isEmpty() || vb.isEmpty()) { res.put(fd.getName(), new ConditionEval(cond, va, vb, -1)); - } - else { + } else { res.put(fd.getName(), verify(fd, va, vb)); } } - - - -// // if ignoreMissing=true always return undefined (0) in case of missing -// if ((va.isEmpty() || vb.isEmpty()) && fd.isIgnoreMissing()) { -// res.put(fd.getName(), new ConditionEval(cond, va, vb, 0)); -// } else { -// if (va.isEmpty()&&vb.isEmpty()) { -// res.put(fd.getName(), new ConditionEval(cond, va, vb, -1)); -// } -// else { -// res.put(fd.getName(), verify(fd, va, vb)); -// } -// } - } return res; } From f2bc66540383fafb9043e376ea47b5f21a10919c Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Tue, 18 Jun 2019 14:45:15 +0200 Subject: [PATCH 069/449] avoid to divide by zero: in case of missing values, return undefined response --- .../src/main/java/eu/dnetlib/pace/condition/PidMatch.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/PidMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/PidMatch.java index 53aa2deb9..7222eaf8a 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/PidMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/PidMatch.java @@ -43,6 +43,10 @@ public class PidMatch extends AbstractCondition { int incommon = Sets.intersection(pidAset, pidBset).size(); int simDiff = Sets.symmetricDifference(pidAset, pidBset).size(); + if (incommon + simDiff == 0) { + return new ConditionEval(cond, a, b, 0); + } + int result = incommon / (incommon + simDiff) > 0.5 ? 1 : -1; return new ConditionEval(cond, a, b, result); From eb5ce312a3cfd7e7c1c380f1abf1deca7adc6672 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Tue, 18 Jun 2019 14:46:27 +0200 Subject: [PATCH 070/449] [maven-release-plugin] prepare release dnet-dedup-3.0.10 --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 835bfa5e8..eb5bf488d 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 3.0.10-SNAPSHOT + 3.0.10 ../pom.xml From ff4956def9b8acd9a92a470f916e447e06e31806 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Tue, 18 Jun 2019 14:46:34 +0200 Subject: [PATCH 071/449] [maven-release-plugin] prepare for next development iteration --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index eb5bf488d..e19f1e8aa 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 3.0.10 + 3.0.11-SNAPSHOT ../pom.xml From 15d7b584f3ef115fc18260029248d125e1536bad Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Wed, 19 Jun 2019 10:01:35 +0200 Subject: [PATCH 072/449] optimized classpath resolvers --- .../main/java/eu/dnetlib/pace/config/PaceConfig.java | 6 +++--- .../main/java/eu/dnetlib/pace/model/ClusteringDef.java | 9 +-------- .../src/main/java/eu/dnetlib/pace/model/CondDef.java | 6 ++---- .../src/main/java/eu/dnetlib/pace/model/FieldDef.java | 9 +-------- .../main/java/eu/dnetlib/pace/util/PaceResolver.java | 10 +++++++--- 5 files changed, 14 insertions(+), 26 deletions(-) diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java index df66f538a..4fde1dee9 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java @@ -23,9 +23,11 @@ public class PaceConfig implements Serializable { private List clustering; private Map> blacklists; + @JsonIgnore private Map modelMap; - // public PaceResolver paceResolver; + @JsonIgnore + public static PaceResolver resolver = new PaceResolver(); public PaceConfig() {} @@ -34,8 +36,6 @@ public class PaceConfig implements Serializable { for(FieldDef fd : getModel()) { modelMap.put(fd.getName(), fd); } - -// paceResolver = new PaceResolver(); } public List getModel() { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java index 3ee4be266..d2dab04cd 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java @@ -23,8 +23,6 @@ public class ClusteringDef implements Serializable { private Map params; - PaceResolver paceResolver = new PaceResolver(); - public ClusteringDef() {} public String getName() { @@ -36,12 +34,7 @@ public class ClusteringDef implements Serializable { } public ClusteringFunction clusteringFunction() { - try { - return paceResolver.getClusteringFunction(getName(), params); - } catch (PaceException e) { - e.printStackTrace(); - return null; - } + return PaceConfig.resolver.getClusteringFunction(getName(), params); } public List getFields() { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/CondDef.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/CondDef.java index b74a3cfce..620984f08 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/CondDef.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/CondDef.java @@ -16,12 +16,10 @@ public class CondDef implements Serializable { private List fields; - PaceResolver paceResolver = new PaceResolver(); - public CondDef() {} - public ConditionAlgo conditionAlgo(final List fields){ - return paceResolver.getConditionAlgo(getName(), fields); + public ConditionAlgo conditionAlgo(final List fields) { + return PaceConfig.resolver.getConditionAlgo(getName(), fields); } public String getName() { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java index 56ca5a425..996471338 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java @@ -34,8 +34,6 @@ public class FieldDef implements Serializable { private double weight; - PaceResolver paceResolver = new PaceResolver(); - /** * Sets maximum size for the repeatable fields in the model. -1 for unbounded size. */ @@ -82,13 +80,8 @@ public class FieldDef implements Serializable { params = new HashMap<>(); } - //TODO verify that the init signatures for the distance algos are all the same! - /* - params.put("size", getSize()); - params.put("length", getLength()); - */ params.put("weight", getWeight()); - return paceResolver.getDistanceAlgo(getAlgo(), params); + return PaceConfig.resolver.getDistanceAlgo(getAlgo(), params); } public boolean isIgnoreMissing() { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/PaceResolver.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/PaceResolver.java index f8ebb8038..d9868b690 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/PaceResolver.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/PaceResolver.java @@ -17,21 +17,25 @@ import java.util.stream.Collectors; public class PaceResolver implements Serializable { + public static final Reflections CLUSTERING_RESOLVER = new Reflections("eu.dnetlib.pace.clustering"); + public static final Reflections CONDITION_RESOLVER = new Reflections("eu.dnetlib.pace.condition"); + public static final Reflections DISTANCE_RESOLVER = new Reflections("eu.dnetlib.pace.distance.algo"); + private final Map> clusteringFunctions; private final Map> conditionAlgos; private final Map> distanceAlgos; public PaceResolver() { - this.clusteringFunctions = new Reflections("eu.dnetlib").getTypesAnnotatedWith(ClusteringClass.class).stream() + this.clusteringFunctions = CLUSTERING_RESOLVER.getTypesAnnotatedWith(ClusteringClass.class).stream() .filter(ClusteringFunction.class::isAssignableFrom) .collect(Collectors.toMap(cl -> cl.getAnnotation(ClusteringClass.class).value(), cl -> (Class)cl)); - this.conditionAlgos = new Reflections("eu.dnetlib").getTypesAnnotatedWith(ConditionClass.class).stream() + this.conditionAlgos = CONDITION_RESOLVER.getTypesAnnotatedWith(ConditionClass.class).stream() .filter(ConditionAlgo.class::isAssignableFrom) .collect(Collectors.toMap(cl -> cl.getAnnotation(ConditionClass.class).value(), cl -> (Class)cl)); - this.distanceAlgos = new Reflections("eu.dnetlib").getTypesAnnotatedWith(DistanceClass.class).stream() + this.distanceAlgos = DISTANCE_RESOLVER.getTypesAnnotatedWith(DistanceClass.class).stream() .filter(DistanceAlgo.class::isAssignableFrom) .collect(Collectors.toMap(cl -> cl.getAnnotation(DistanceClass.class).value(), cl -> (Class)cl)); } From 85126c59f7e2028110a89eda435b73c353232538 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Wed, 19 Jun 2019 10:02:32 +0200 Subject: [PATCH 073/449] [maven-release-plugin] prepare release dnet-dedup-3.0.11 --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index e19f1e8aa..bffb81ae5 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 3.0.11-SNAPSHOT + 3.0.11 ../pom.xml From 2dcffb965f811c1fcf60f78658f50bf83351bb29 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Wed, 19 Jun 2019 10:02:39 +0200 Subject: [PATCH 074/449] [maven-release-plugin] prepare for next development iteration --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index bffb81ae5..5c626bc49 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 3.0.11 + 3.0.12-SNAPSHOT ../pom.xml From 15bec5e876c02436633923955fb0ee93ed6299a2 Mon Sep 17 00:00:00 2001 From: miconis Date: Mon, 8 Jul 2019 09:44:02 +0200 Subject: [PATCH 075/449] addition of doi normalization in PidMatch comparator, addition of keywordsclustering (clustering based on terms in the translation maps for the organizations), minor changes --- .../pace/clustering/KeywordsClustering.java | 39 +++++++++++++++++++ .../pace/common/AbstractPaceFunctions.java | 38 ++++++++++++++++++ .../eu/dnetlib/pace/condition/PidMatch.java | 4 +- .../algo/JaroWinklerNormalizedName.java | 19 +++------ .../eu/dnetlib/pace/config/city_map.csv | 2 +- .../eu/dnetlib/pace/config/stopwords_it.txt | 1 - .../dnetlib/pace/config/translation_map.csv | 2 +- .../clustering/ClusteringFunctionTest.java | 15 +++++++ .../dnetlib/pace/common/PaceFunctionTest.java | 25 ++++++++++++ .../dnetlib/pace/condition/ConditionTest.java | 7 ++++ .../pace/distance/DistanceAlgoTest.java | 10 +++++ 11 files changed, 144 insertions(+), 18 deletions(-) create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/KeywordsClustering.java create mode 100644 dnet-pace-core/src/test/java/eu/dnetlib/pace/common/PaceFunctionTest.java create mode 100644 dnet-pace-core/src/test/java/eu/dnetlib/pace/condition/ConditionTest.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/KeywordsClustering.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/KeywordsClustering.java new file mode 100644 index 000000000..1aac6c8a5 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/KeywordsClustering.java @@ -0,0 +1,39 @@ +package eu.dnetlib.pace.clustering; + +import com.google.common.base.Joiner; +import eu.dnetlib.pace.common.AbstractPaceFunctions; + +import java.util.*; + +@ClusteringClass("keywordsclustering") +public class KeywordsClustering extends AbstractClusteringFunction { + + private static Map translationMap = AbstractPaceFunctions.loadMapFromClasspath("/eu/dnetlib/pace/config/translation_map.csv"); + + private static Map cityMap = AbstractPaceFunctions.loadMapFromClasspath("/eu/dnetlib/pace/config/city_map.csv"); + + public KeywordsClustering(Map params) { + super(params); + } + + @Override + protected Collection doApply(String s) { + + List keywords = getCodes(s, translationMap, params.getOrDefault("windowSize", 4)); + List cities = getCodes(s, cityMap, params.getOrDefault("windowSize", 4)); + + final Collection combinations = new LinkedHashSet(); + + int size = 0; + for (String keyword: keywords){ + for (String city: cities) { + combinations.add(keyword+"-"+city); + if (++size>params.getOrDefault("max", 2)) { + return combinations; + } + } + } + + return combinations; + } +} \ No newline at end of file diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java index 977c5c46e..8c99342a7 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java @@ -40,6 +40,8 @@ public abstract class AbstractPaceFunctions { private static final String aliases_from = "⁰¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ⁿ₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎àáâäæãåāèéêëēėęîïíīįìôöòóœøōõûüùúūßśšłžźżçćčñń"; private static final String aliases_to = "0123456789+-=()n0123456789+-=()aaaaaaaaeeeeeeeiiiiiioooooooouuuuussslzzzcccnn"; + public final String DOI_PREFIX = "(https?:\\/\\/dx\\.doi\\.org\\/)|(doi:)"; + protected final static FieldList EMPTY_FIELD = new FieldListImpl(); protected String concat(final List l) { @@ -313,5 +315,41 @@ public abstract class AbstractPaceFunctions { return Iterables.limit(Splitter.on(" ").omitEmptyStrings().trimResults().split(s), maxTokens); } + public String normalizePid(String pid) { + return pid.toLowerCase().replaceAll(DOI_PREFIX, ""); + } + + //get the list of codes into the input string + public List getCodes(String s1, Map translationMap, int windowSize){ + + String s = cleanup(s1); + + s = filterAllStopWords(s); + + List tokens = Arrays.asList(s.toLowerCase().split(" ")); + + List codes = new ArrayList<>(); + + if (tokens.size() toHashSet(List pbl) { + return pbl.stream() - .map(pid -> pid.getType() + pid.getValue()) + .map(pid -> pid.getType() + normalizePid(pid.getValue())) .collect(Collectors.toCollection(HashSet::new)); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerNormalizedName.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerNormalizedName.java index fea74af37..285575a1b 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerNormalizedName.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerNormalizedName.java @@ -43,8 +43,11 @@ public class JaroWinklerNormalizedName extends SecondStringDistanceAlgo { String ca = cleanup(a); String cb = cleanup(b); - ca = removeStopwords(ca); - cb = removeStopwords(cb); + ca = normalize(ca); + cb = normalize(cb); + + ca = filterAllStopWords(ca); + cb = filterAllStopWords(cb); //replace keywords with codes String codesA = keywordsToCode(ca, translationMap, params.getOrDefault("windowSize", 4).intValue()); @@ -80,16 +83,4 @@ public class JaroWinklerNormalizedName extends SecondStringDistanceAlgo { return d; } - public String removeStopwords(String s) { - String normString = normalize(s); - - normString = filterStopWords(normString, stopwordsIt); - normString = filterStopWords(normString, stopwordsEn); - normString = filterStopWords(normString, stopwordsDe); - normString = filterStopWords(normString, stopwordsFr); - normString = filterStopWords(normString, stopwordsPt); - normString = filterStopWords(normString, stopwordsEs); - - return normString; - } } diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/city_map.csv b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/city_map.csv index 5f70a373b..e2d48551d 100644 --- a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/city_map.csv +++ b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/city_map.csv @@ -7915,7 +7915,7 @@ city::5134086;Rochester;Ga-sko-sa-ga;Gaskosago;ROC;Rocestera;Rocesteris;Rocestro city::5136454;Schenectady;SCH;Schenectady;Shinetadi;Skanehtati;Skanéhtati;Skenektadi;Skenektadis;Skunektadi;seukinegteodi;si ke nei ke ta di;sknktdy nywywrk;sknyktady;sqnqtdy;sukenekutadi;Скенектади;Скенектаді;Скънектади;Шинетади;סקנקטדי;سكنيكتادي;سکنکتدی، نیویورک;سکینکٹڈی ، نیویارک;سکینیکٹیڈی، نیو یارک;スケネクタディ;斯克内克塔迪;스키넥터디; city::5137849;Sheepshead Bay;; city::5139568;Staten Island;Borough of Staten Island;Staten Island; -city::5140405;Syracuse;Bogardus Corners;Cossitts Corners;Gorad Sirakjus;Kah-ya-hoo-neh;Ken-tue-ho-ne;Milan;Na-ta-dunk;SYR;Siracusa;Sirak'jus;Sirakjus;Sirakjuz;Sirakuso;Sirakuz;South Salina;Sy-kuse;Syracusae;Syracuse;Syracuse i New York;Tu-na-ten-tonk;sayrakywz;shirakyusu;shirakyuzu;sileokyuseu;sirekyuja;syrakywz;syrakywz nyw yark;syrakywz nywywrk;syrqywz;xi la qiu ci;Горад Сіракюс;Сиракуз;Сиракьюс;Сиракюз;Сиракјус;Сіракюс;סירקיוז;سائراکیوز;سيراكيوز;سیراکیوز، نیو یارک;سیراکیوز، نیویورک;सिरॅक्युज;სირაკიუსი;シラキュース;シラキューズ;锡拉丘兹;시러큐스; +city::5140405;Syracuse;Bogardus Corners;Cossitts Corners;Gorad Sirakjus;Kah-ya-hoo-neh;Ken-tue-ho-ne;Na-ta-dunk;SYR;Siracusa;Sirak'jus;Sirakjus;Sirakjuz;Sirakuso;Sirakuz;South Salina;Sy-kuse;Syracusae;Syracuse;Syracuse i New York;Tu-na-ten-tonk;sayrakywz;shirakyusu;shirakyuzu;sileokyuseu;sirekyuja;syrakywz;syrakywz nyw yark;syrakywz nywywrk;syrqywz;xi la qiu ci;Горад Сіракюс;Сиракуз;Сиракьюс;Сиракюз;Сиракјус;Сіракюс;סירקיוז;سائراکیوز;سيراكيوز;سیراکیوز، نیو یارک;سیراکیوز، نیویورک;सिरॅक्युज;სირაკიუსი;シラキュース;シラキューズ;锡拉丘兹;시러큐스; city::5142056;Utica;Fort Schuyler;Gorad Jutyka;Iotekha;Iotékha;Jutika;Nundadasis;Old Fort Schuyler;Tevadahahtodague;Twa-dah-ah-lo-dah-que;UCA;Unungagages;Utica;Utika;Yanundadasis;ZUA;awtyka;you ti ka;yutika;ywtyka nywywrk;ywtyqh;Јутика;Горад Ютыка;Утика;Ютика;Ютіка;יוטיקה;أوتيكا;یوتیکا، نیویورک;یوٹیکا، نیو یارک;ユーティカ;由提卡; city::5143056;Wakefield;; city::5143307;Washington Heights;Harlem Heights;Pen-a-bick;Washington Heights;washintonhaitsu;wosingteonhaicheu;ワシントンハイツ;워싱턴하이츠; diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_it.txt b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_it.txt index 2ce975b13..8d0ceb776 100644 --- a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_it.txt +++ b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_it.txt @@ -332,7 +332,6 @@ male malgrado malissimo mancanza -marche me medesimo mediante diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/translation_map.csv b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/translation_map.csv index ef49c2f9e..dc77a6057 100644 --- a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/translation_map.csv +++ b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/translation_map.csv @@ -38,7 +38,7 @@ key::37;federation;federazione;fédération;федерация;federatie;ομο key::38;observatory;osservatorio;observatoire;обсерватория;observatorium;αστεροσκοπείο key::39;bureau;ufficio;bureau;офис;bureau;γραφείο key::40;company;impresa;compagnie;société;компания;bedrijf;εταιρία -key::41;polytechnic;politecnico;polytechnique;политехника;polytechnisch;πολυτεχνείο +key::41;polytechnic;politecnico;polytechnique;политехника;polytechnisch;πολυτεχνείο;universita politecnica;polytechnic university key::42;coalition;coalizione;coalition;коалиция;coalitie;συνασπισμός key::43;initiative;iniziativa;initiative;инициатива;initiatief;πρωτοβουλία key::44;academic;accademico;académique;universitaire;акадеческий academisch;ακαδημαϊκός;ακαδημαϊκή;ακαδημαϊκό;ακαδημαϊκές;ακαδημαϊκοί diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java index 71c23a811..270a44b65 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java @@ -117,4 +117,19 @@ public class ClusteringFunctionTest extends AbstractPaceTest { System.out.println(cf.apply(Lists.newArrayList(person(s)))); } + @Test + public void testKeywordsClustering() { + + final ClusteringFunction cf = new KeywordsClustering(params); + final String s = "Polytechnic University of Turin"; + System.out.println(s); + System.out.println(cf.apply(Lists.newArrayList(title(s)))); + + final String s1 = "POLITECNICO DI TORINO"; + System.out.println(s1); + System.out.println(cf.apply(Lists.newArrayList(title(s1)))); + + + } + } diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/common/PaceFunctionTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/common/PaceFunctionTest.java new file mode 100644 index 000000000..e15b54331 --- /dev/null +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/common/PaceFunctionTest.java @@ -0,0 +1,25 @@ +package eu.dnetlib.pace.common; + +import org.junit.Test; + +import static junit.framework.Assert.assertEquals; +import static junit.framework.Assert.assertTrue; + +public class PaceFunctionTest extends AbstractPaceFunctions { + + @Test + public void normalizePidTest(){ + + assertEquals("identifier", normalizePid("IdentifIer")); + assertEquals("10.1109/tns.2015.2493347", normalizePid("10.1109/TNS.2015.2493347")); + assertEquals("10.0001/testdoi", normalizePid("http://dx.doi.org/10.0001/testDOI")); + assertEquals("10.0001/testdoi", normalizePid("https://dx.doi.org/10.0001/testDOI")); + + } + + @Test + public void filterAllStopwordsTest(){ + + assertEquals("universita politecnica marche", filterAllStopWords("universita politecnica delle marche")); + } +} diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/condition/ConditionTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/condition/ConditionTest.java new file mode 100644 index 000000000..57047d8c9 --- /dev/null +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/condition/ConditionTest.java @@ -0,0 +1,7 @@ +package eu.dnetlib.pace.condition; + +import eu.dnetlib.pace.AbstractPaceTest; + +public class ConditionTest extends AbstractPaceTest { + +} diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java index 3943e4f8e..6f196ec4f 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java @@ -104,4 +104,14 @@ public class DistanceAlgoTest extends AbstractPaceFunctions { } + @Test + public void testJaroWinklerNormalizedName7() { + + final JaroWinklerNormalizedName jaroWinklerNormalizedName = new JaroWinklerNormalizedName(params); + double result = jaroWinklerNormalizedName.distance("Polytechnic University of Turin", "POLITECNICO DI TORINO"); + + System.out.println("result = " + result); + assertTrue(result> 0.9); + } + } From 7065110a21d5a77af2dc0e7e332845c91d8ec42f Mon Sep 17 00:00:00 2001 From: miconis Date: Mon, 8 Jul 2019 09:48:03 +0200 Subject: [PATCH 076/449] [maven-release-plugin] prepare release dnet-dedup-3.0.12 --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 5c626bc49..fca3f1e5e 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 3.0.12-SNAPSHOT + 3.0.12 ../pom.xml From ba50aa865452dc93b843762fd177855c3a22ce3f Mon Sep 17 00:00:00 2001 From: miconis Date: Mon, 8 Jul 2019 09:48:10 +0200 Subject: [PATCH 077/449] [maven-release-plugin] prepare for next development iteration --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index fca3f1e5e..011abf25b 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 3.0.12 + 3.0.13-SNAPSHOT ../pom.xml From f5de20a50832721138523edbaafe755e02364302 Mon Sep 17 00:00:00 2001 From: miconis Date: Mon, 8 Jul 2019 10:00:48 +0200 Subject: [PATCH 078/449] [maven-release-plugin] rollback the release of dnet-dedup-3.0.12 --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 011abf25b..5c626bc49 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 3.0.13-SNAPSHOT + 3.0.12-SNAPSHOT ../pom.xml From c6baeb93d49efc7a4fbb0be737a1f958c4a81f05 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Mon, 8 Jul 2019 10:11:17 +0200 Subject: [PATCH 079/449] [maven-release-plugin] prepare release dnet-dedup-3.0.12 --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 5c626bc49..fca3f1e5e 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 3.0.12-SNAPSHOT + 3.0.12 ../pom.xml From a69022617df1381fb695dcb12c0059ee420f8e3b Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Mon, 8 Jul 2019 10:11:24 +0200 Subject: [PATCH 080/449] [maven-release-plugin] prepare for next development iteration --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index fca3f1e5e..011abf25b 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 3.0.12 + 3.0.13-SNAPSHOT ../pom.xml From 3c6f8d1e44948c5cf77b44324ec3781e65211467 Mon Sep 17 00:00:00 2001 From: miconis Date: Mon, 8 Jul 2019 11:01:49 +0200 Subject: [PATCH 081/449] bug fixing in the keywordsclustering class --- .../dnetlib/pace/clustering/KeywordsClustering.java | 9 +++++---- .../eu/dnetlib/pace/common/AbstractPaceFunctions.java | 4 ++-- .../pace/clustering/ClusteringFunctionTest.java | 7 +++++++ release.properties | 11 +++++++++++ 4 files changed, 25 insertions(+), 6 deletions(-) create mode 100644 release.properties diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/KeywordsClustering.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/KeywordsClustering.java index 1aac6c8a5..dfd59384b 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/KeywordsClustering.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/KeywordsClustering.java @@ -19,16 +19,17 @@ public class KeywordsClustering extends AbstractClusteringFunction { @Override protected Collection doApply(String s) { - List keywords = getCodes(s, translationMap, params.getOrDefault("windowSize", 4)); - List cities = getCodes(s, cityMap, params.getOrDefault("windowSize", 4)); + //takes city codes and keywords codes without duplicates + Set keywords = getCodes(s, translationMap, params.getOrDefault("windowSize", 4)); + Set cities = getCodes(s, cityMap, params.getOrDefault("windowSize", 4)); + //list of combination to return as result final Collection combinations = new LinkedHashSet(); - int size = 0; for (String keyword: keywords){ for (String city: cities) { combinations.add(keyword+"-"+city); - if (++size>params.getOrDefault("max", 2)) { + if (combinations.size()>=params.getOrDefault("max", 2)) { return combinations; } } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java index 8c99342a7..748eec9a6 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java @@ -320,7 +320,7 @@ public abstract class AbstractPaceFunctions { } //get the list of codes into the input string - public List getCodes(String s1, Map translationMap, int windowSize){ + public Set getCodes(String s1, Map translationMap, int windowSize){ String s = cleanup(s1); @@ -328,7 +328,7 @@ public abstract class AbstractPaceFunctions { List tokens = Arrays.asList(s.toLowerCase().split(" ")); - List codes = new ArrayList<>(); + Set codes = new HashSet<>(); if (tokens.size() cities = getCodes(s, cityMap, params.getOrDefault("windowSize", 4)); + Set keywords = getKeywords(s, params.getOrDefault("windowSize", 4)); + Set cities = getCities(s, params.getOrDefault("windowSize", 4)); //list of combination to return as result final Collection combinations = new LinkedHashSet(); - for (String keyword: keywords){ - for (String city: cities) { + for (String keyword: keywordsToCodes(keywords)){ + for (String city: citiesToCodes(cities)) { combinations.add(keyword+"-"+city); if (combinations.size()>=params.getOrDefault("max", 2)) { return combinations; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java index 748eec9a6..a5f7bf679 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java @@ -18,6 +18,8 @@ import java.text.Normalizer; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; +import java.util.stream.Collectors; +import java.util.stream.Stream; /** * Set of common functions @@ -27,6 +29,10 @@ import java.util.regex.Pattern; */ public abstract class AbstractPaceFunctions { + + private static Map translationMap = AbstractPaceFunctions.loadMapFromClasspath("/eu/dnetlib/pace/config/translation_map.csv"); + private static Map cityMap = AbstractPaceFunctions.loadMapFromClasspath("/eu/dnetlib/pace/config/city_map.csv"); + protected static Set stopwords_en = loadFromClasspath("/eu/dnetlib/pace/config/stopwords_en.txt"); protected static Set stopwords_de = loadFromClasspath("/eu/dnetlib/pace/config/stopwords_de.txt"); protected static Set stopwords_es = loadFromClasspath("/eu/dnetlib/pace/config/stopwords_es.txt"); @@ -212,99 +218,58 @@ public abstract class AbstractPaceFunctions { return sb.toString().trim(); } - public String keywordsToCode(String s1, Map translationMap, int windowSize){ + public String removeKeywords(String s, Set keywords) { - List tokens = Arrays.asList(s1.split(" ")); - - if (tokens.size() s1, Set s2){ - public double keywordsCompare(String s1, String s2){ + Set k1 = keywordsToCodes(s1); + Set k2 = keywordsToCodes(s2); - List keywords1 = getKeywords(s1); - List keywords2 = getKeywords(s2); - int longer = (keywords1.size()>keywords2.size())?keywords1.size():keywords2.size(); + int longer = (k1.size()>k2.size())?k1.size():k2.size(); - if (getKeywords(s1).isEmpty() || getKeywords(s2).isEmpty()) + if (k1.isEmpty() || k2.isEmpty()) return 1.0; else - return (double)CollectionUtils.intersection(getKeywords(s1),getKeywords(s2)).size()/(double)longer; + return (double)CollectionUtils.intersection(k1,k2).size()/(double)longer; } - //check if 2 strings have same keywords - public boolean sameKeywords(String s1, String s2){ - //at least 1 keyword in common - if (getKeywords(s1).isEmpty() || getKeywords(s2).isEmpty()) - return true; - else - return CollectionUtils.intersection(getKeywords(s1),getKeywords(s2)).size()>0; - } - //returns true if at least 1 city is in common - //returns true if a name has no cities - public boolean sameCity(String s1, String s2){ + //returns true if no cities are contained in names + //returns false if one of the two names have no city + public boolean sameCity(Set s1, Set s2){ - if (getCities(s1).isEmpty() || getCities(s2).isEmpty()) + Set c1 = citiesToCodes(s1); + Set c2 = citiesToCodes(s2); + + if (c1.isEmpty() && c2.isEmpty()) return true; - else - return CollectionUtils.intersection(getCities(s1), getCities(s2)).size()>0; + else { + if (c1.isEmpty() ^ c2.isEmpty()) + return false; + return CollectionUtils.intersection(c1, c2).size() > 0; + } } - //get the list of keywords in a string - public List getCities(String s) { - - final String regex = "\\bcity::[0-9]*\\b"; - - Pattern p = Pattern.compile(regex, Pattern.MULTILINE); - Matcher m = p.matcher(s); - List codes = new ArrayList<>(); - while (m.find()) { - codes.add(m.group(0)); - for (int i = 1; i <= m.groupCount(); i++) { - codes.add(m.group(0)); - } - } - return codes; + //convert the set of keywords to codes + public Set toCodes(Set keywords, Map translationMap) { + return keywords.stream().map(s -> translationMap.get(s)).collect(Collectors.toSet()); } - //get the list of keywords in a string - public List getKeywords(String s) { + public Set keywordsToCodes(Set keywords) { + return toCodes(keywords, translationMap); + } - final String regex = "\\bkey::[0-9]*\\b"; - - Pattern p = Pattern.compile(regex, Pattern.MULTILINE); - Matcher m = p.matcher(s); - List codes = new ArrayList<>(); - while (m.find()) { - codes.add(m.group(0)); - for (int i = 1; i <= m.groupCount(); i++) { - codes.add(m.group(0)); - } - } - return codes; + public Set citiesToCodes(Set keywords) { + return toCodes(keywords, cityMap); } protected String firstLC(final String s) { @@ -320,7 +285,7 @@ public abstract class AbstractPaceFunctions { } //get the list of codes into the input string - public Set getCodes(String s1, Map translationMap, int windowSize){ + public Set getKeywords(String s1, Map translationMap, int windowSize){ String s = cleanup(s1); @@ -340,7 +305,7 @@ public abstract class AbstractPaceFunctions { for (int i = 0; i<=tokens.size()-length; i++){ String candidate = Joiner.on(" ").join(tokens.subList(i, i + length)); if (translationMap.containsKey(candidate)) { - codes.add(translationMap.get(candidate)); + codes.add(candidate); s = s.replace(candidate, ""); } } @@ -352,4 +317,12 @@ public abstract class AbstractPaceFunctions { return codes; } + public Set getKeywords(String s1, int windowSize) { + return getKeywords(s1, translationMap, windowSize); + } + + public Set getCities(String s1, int windowSize) { + return getKeywords(s1, cityMap, windowSize); + } + } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerNormalizedName.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerNormalizedName.java index 285575a1b..546629b08 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerNormalizedName.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerNormalizedName.java @@ -11,18 +11,6 @@ import java.util.Set; @DistanceClass("JaroWinklerNormalizedName") public class JaroWinklerNormalizedName extends SecondStringDistanceAlgo { - private static Set stopwordsEn = AbstractPaceFunctions.loadFromClasspath("/eu/dnetlib/pace/config/stopwords_en.txt"); - private static Set stopwordsIt = AbstractPaceFunctions.loadFromClasspath("/eu/dnetlib/pace/config/stopwords_it.txt"); - private static Set stopwordsDe = AbstractPaceFunctions.loadFromClasspath("/eu/dnetlib/pace/config/stopwords_de.txt"); - private static Set stopwordsFr = AbstractPaceFunctions.loadFromClasspath("/eu/dnetlib/pace/config/stopwords_fr.txt"); - private static Set stopwordsPt = AbstractPaceFunctions.loadFromClasspath("/eu/dnetlib/pace/config/stopwords_pt.txt"); - private static Set stopwordsEs = AbstractPaceFunctions.loadFromClasspath("/eu/dnetlib/pace/config/stopwords_es.txt"); - - //key=word, value=global identifier => example: "università"->"university", used to substitute the word with the global identifier - private static Map translationMap = AbstractPaceFunctions.loadMapFromClasspath("/eu/dnetlib/pace/config/translation_map.csv"); - - private static Map cityMap = AbstractPaceFunctions.loadMapFromClasspath("/eu/dnetlib/pace/config/city_map.csv"); - private Map params; public JaroWinklerNormalizedName(Map params){ @@ -49,28 +37,30 @@ public class JaroWinklerNormalizedName extends SecondStringDistanceAlgo { ca = filterAllStopWords(ca); cb = filterAllStopWords(cb); - //replace keywords with codes - String codesA = keywordsToCode(ca, translationMap, params.getOrDefault("windowSize", 4).intValue()); - String codesB = keywordsToCode(cb, translationMap, params.getOrDefault("windowSize",4).intValue()); + Set keywords1 = getKeywords(ca, params.getOrDefault("windowSize", 4).intValue()); + Set keywords2 = getKeywords(cb, params.getOrDefault("windowSize", 4).intValue()); - //replace cities with codes - codesA = keywordsToCode(codesA, cityMap, params.getOrDefault("windowSize", 4).intValue()); - codesB = keywordsToCode(codesB, cityMap, params.getOrDefault("windowSize", 4).intValue()); + Set cities1 = getCities(ca, params.getOrDefault("windowSize", 4).intValue()); + Set cities2 = getCities(cb, params.getOrDefault("windowSize", 4).intValue()); + + if (sameCity(cities1,cities2)) { + + if (keywordsCompare(keywords1, keywords2)>params.getOrDefault("threshold", 0.5).doubleValue()) { + + ca = removeKeywords(ca, keywords1); + ca = removeKeywords(ca, cities1); + cb = removeKeywords(cb, keywords2); + cb = removeKeywords(cb, cities2); - //if two names have same city - if (sameCity(codesA,codesB)){ - if (keywordsCompare(codesA, codesB)>params.getOrDefault("threshold", 0.5).doubleValue()) { - ca = removeCodes(codesA); - cb = removeCodes(codesB); if (ca.isEmpty() && cb.isEmpty()) return 1.0; else return normalize(ssalgo.score(ca,cb)); + } } return 0.0; - } @Override diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/city_map.csv b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/city_map.csv index e2d48551d..666615792 100644 --- a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/city_map.csv +++ b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/city_map.csv @@ -6192,7 +6192,7 @@ city::753142;Zoliborz;Zalborz;Zalbórz; city::753866;Zamosc;Gorad Zamasc';Zamosc;Zamosc';Zamosca;Zamoscia;Zamose;Zamoshc;Zamoshch;Zamost'ye;Zamoste;Zamostja;Zamosts;Zamostė;Zamost’ye;Zamość;jamosichi;sa mxchch;zamoshichi;zamostsi;zha mo xi qi;zmwsz;Ζάμοστς;Горад Замасць;Замостя;Замосць;Замошч;Замошћ;Զամոշչ;זמושץ;ซามอชช์;ზამოსცი;ザモシチ;扎莫希奇;자모시치; city::755330;Wola;Volja;Воля; city::756092;Wawer;; -city::756135;Warsaw;Barsobia;Varsa;Varsava;Varsavia;Varsavja;Varshava;Varshavae;Varsja;Varsjá;Varso;Varsova;Varsovia;Varsovia - Warszawa;Varsovie;Varsovio;Varssavi;Varsuva;Varsòvia;Varsó;Varsóvia;Varşova;Varšava;Varšuva;Varșovia;Vársá;WAW;Warsaw;Warsawa;Warschau;Warskou;Warszaw;Warszawa;Waršawa;baleusyaba;hua sha;varshava;vorso;warsw;warushawa;wrsh;wrshw;wrsw;wxrsx;Βαρσοβία;Варшавæ;Варшава;Վարշավա;ווארשע;ורשה;װאַרשע;وارسو;ورشو;ۋارشاۋا;ܘܪܣܘ;वॉर्सो;วอร์ซอ;ვარშავა;ዋርሶው;ワルシャワ;华沙;華沙;바르샤바; +city::756135;Warsaw;warszawie;Barsobia;Varsa;Varsava;Varsavia;Varsavja;Varshava;Varshavae;Varsja;Varsjá;Varso;Varsova;Varsovia;Varsovia - Warszawa;Varsovie;Varsovio;Varssavi;Varsuva;Varsòvia;Varsó;Varsóvia;Varşova;Varšava;Varšuva;Varșovia;Vársá;WAW;Warsaw;Warsawa;Warschau;Warskou;Warszaw;Warszawa;Waršawa;baleusyaba;hua sha;varshava;vorso;warsw;warushawa;wrsh;wrshw;wrsw;wxrsx;Βαρσοβία;Варшавæ;Варшава;Վարշավա;ווארשע;ורשה;װאַרשע;وارسو;ورشو;ۋارشاۋا;ܘܪܣܘ;वॉर्सो;วอร์ซอ;ვარშავა;ዋርሶው;ワルシャワ;华沙;華沙;바르샤바;warszawskiej;warszawska; city::756867;Tomaszow Mazowiecki;Mazovijos Tomasuvas;Mazovijos Tomašuvas;Thomasovia;Tomashov Mazovecki;Tomashov Mazovjecki;Tomashuv-Mazovec'kij;Tomashuv-Mazovecki;Tomashuv-Mazoveckij;Tomasova Mazovecka;Tomaszow;Tomaszow Mazowiecki;Tomaszów;Tomaszów Mazowiecki;Tomašova Mazovecka;ma zuo fu she de qu tuo ma shu fu;twmswb mzwbyyzqy;tx ma chuf ma sx weiyt ski;Томашов Мазовецки;Томашов Мазовјецки;Томашув-Мазовецки;Томашув-Мазовецкий;Томашув-Мазовецький;טומשוב מזובייצקי;ตอมาชูฟมาซอเวียตสกี;馬佐夫舍地區托馬舒夫; city::757026;Tarnow;Gorad Tarnuu;Tarnov;Tarnova;Tarnow;Tarnuv;Tarnuvas;Tarnuw;Tarnów;Tarnůw;ta er nu fu;taleunupeu;tarnwf;tarunufu;trnwb;Горад Тарнуў;Тарнов;Тарнув;טארנע;טרנוב;تارنوف;タルヌフ;塔爾努夫;타르누프; city::757033;Tarnobrzeg;Gorad Tarnobzhag;Nova Tarnovia;QEP;Tarnobjeg;Tarnobrzeg;Tarnobrzyg;Tarnobzega;Tarnobzegas;Tarnobzheg;Tarnobzhege;Tarnobžega;Tarnobžegas;ta er nuo bu re ge;taleunobeujekeu;tarnwbzk;tarunobujeku;trnwbzg;Горад Тарнобжаг;Тарнобжег;Тарнобжеге;דזשיקאוו;טרנובזג;تارنوبزک;タルノブジェク;塔尔诺布热格;타르노브제크; @@ -6229,7 +6229,7 @@ city::3080165;Zielona Gora;Gorad Zjaljona-Gura;Gruentberg;Grunberg;Grünberg;IEG city::3080251;Zgierz;Gorad Zgezh;Zgeza;Zgezas;Zgezh;Zgeža;Zgežas;Zgierz;Zgjezh;Znkies;ci gai ri;jeugiesi;sex keiyr ch;zgyyz;zugyeshi;Ζγκιες;Горад Згеж;Згеж;Згјеж;זגייז;เซอเกียร์ช;ズギェシ;兹盖日;즈기에시; city::3080526;Zawiercie;Zaverce;Zaverche;Zavercis;Zavertse;Zaviercis;Zavjerce;Zawiercie;zha wei er qie;zwwyyrzh;Заверце;Заверче;Завјерће;זוויירצה;扎维尔切; city::3080985;Zabrze;Gorad Zabzheh;Hindenburg;Zabje;Zaborze;Zabrze;Zabzas;Zabze;Zabzhe;Zabžas;Zabže;Zobrze;jabeuje;sab che;zabjh;zabuje;zabzhh;zha bu re;zʼbzh;Горад Забжэ;Забже;Զաբժե;זאבזה;زابجه;زابژه;زبرزے;ซาบเช;ザブジェ;扎布热;자브제; -city::3081368;Wroclaw;Brassel;Breslau;Breslavia;Breslavl';Breslavl’;Gorad Vroclau;Vratislav;Vratislavia;Vroclav;Vroclava;Vroclavas;Vroclavo;Vroklave;Vroslav;Vrotslav;WRO;Wroclaw;Wroclow;Wrocław;Wrocłow;Wroklaw;Wroslaw;Wrosław;Wrócław;beulocheuwapeu;frwtswaf;fu luo ci wa fu;viratscahp;vrotsavapha;vrotslavi;vurotsuwafu;w rxtswaf;wrwslaw;wrwtswaf;wrwzlb;Βρότσλαβ;Вроцлав;Горад Вроцлаў;ברעסלוי;ורוצלב;فروتسواف;وروتسواف;وروسلاو;ڤرۆتسواف;व्रोत्सवाफ;விராத்ஸ்சாஃப்;วรอตสวัฟ;ვროცლავი;ヴロツワフ;弗罗茨瓦夫;브로츠와프; +city::3081368;Wroclaw;Brassel;Breslau;Breslavia;Breslavl';Breslavl’;Gorad Vroclau;Vratislav;Vratislavia;Vroclav;Vroclava;Vroclavas;Vroclavo;Vroklave;Vroslav;Vrotslav;WRO;Wroclaw;Wroclow;Wrocław;Wrocłow;Wroklaw;Wroslaw;Wrosław;Wrócław;beulocheuwapeu;frwtswaf;fu luo ci wa fu;viratscahp;vrotsavapha;vrotslavi;vurotsuwafu;w rxtswaf;wrwslaw;wrwtswaf;wrwzlb;Βρότσλαβ;Вроцлав;Горад Вроцлаў;ברעסלוי;ורוצלב;فروتسواف;وروتسواف;وروسلاو;ڤرۆتسواف;व्रोत्सवाफ;விராத்ஸ்சாஃப்;วรอตสวัฟ;ვროცლავი;ヴロツワフ;弗罗茨瓦夫;브로츠와프;Wrocławska; city::3081741;Wloclawek;Gorad Ulaclavak;Leslau;Vloclavek;Vloclaveka;Vloclavekas;Wloclawek;Włocławek;beuwocheuwabekeu;fu wo ci wa wei ke;fwtswafk;vuu~otsuwavu~eku;w wxts wa wek;Влоцлавек;Горад Улацлавак;ולוצלאווק;فوتسوافك;ووتس‌واوک;ววอตซวาเวก;ヴウォツワヴェク;弗沃茨瓦韦克;브워츠와베크; city::3082707;Walbrzych;Gorad Valbzhykh;Valbzhikh;Valbziha;Valbzychas;Valbžiha;Valbžychas;Walbrzych;Waldenburg;Waldenburg in Schlesien;Wałbrzych;baubeujiheu;vu~aubujifu;wa lb cik;wa wu bu ri he;wawb jykh;wawb zhykh;wlbzyk;Валбжих;Горад Валбжых;ולבזיך;واوب جيخ;واوب ژیخ;วาลบ์จิก;ヴァウブジフ;瓦烏布日赫;바우브지흐; city::3082914;Tychy;Tichau;Tihi;Tikhi;Tychos;Tychy;Tykhy;Tıhı;di hei;thi khi;tihi;tixa;tyshy;Тихи;Тыхы;تیشی;ทิคี;ティヒ;蒂黑;티히; diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/translation_map.csv b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/translation_map.csv index dc77a6057..bab68360d 100644 --- a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/translation_map.csv +++ b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/translation_map.csv @@ -1,6 +1,6 @@ key::1;university;università;università studi;universitario;universitaria;université;universitaire;universitaires;universidad;universitade;Universität;universitaet;Uniwersytet;университет;universiteit;πανεπιστήμιο key::2;studies;studi;études;estudios;estudos;Studien;studia;исследования;studies;σπουδές -key::3;advanced;superiore;supérieur;supérieure;supérieurs;supérieures;avancado;avancados;fortgeschrittene;fortgeschritten;zaawansowany;передовой;gevorderd;gevorderde;προχωρημένος;προχωρημένη;προχωρημένο;προχωρημένες;προχωρημένα +key::3;advanced;superiore;supérieur;supérieure;supérieurs;supérieures;avancado;avancados;fortgeschrittene;fortgeschritten;zaawansowany;передовой;gevorderd;gevorderde;προχωρημένος;προχωρημένη;προχωρημένο;προχωρημένες;προχωρημένα;wyzsza; key::4;institute;istituto;institut;instituto;instituto;Institut;instytut;институт;instituut;ινστιτούτο key::5;hospital;ospedale;hôpital;hospital;hospital;Krankenhaus;szpital;больница;ziekenhuis;νοσοκομείο key::6;research;ricerca;recherche;investigacion;pesquisa;Forschung;badania;исследования;onderzoek;έρευνα;erevna;erevnas @@ -38,7 +38,7 @@ key::37;federation;federazione;fédération;федерация;federatie;ομο key::38;observatory;osservatorio;observatoire;обсерватория;observatorium;αστεροσκοπείο key::39;bureau;ufficio;bureau;офис;bureau;γραφείο key::40;company;impresa;compagnie;société;компания;bedrijf;εταιρία -key::41;polytechnic;politecnico;polytechnique;политехника;polytechnisch;πολυτεχνείο;universita politecnica;polytechnic university +key::41;polytechnic;politecnico;polytechnique;политехника;polytechnisch;πολυτεχνείο;universita politecnica;polytechnic university;politechnika;politechniki;university technology;university science technology; key::42;coalition;coalizione;coalition;коалиция;coalitie;συνασπισμός key::43;initiative;iniziativa;initiative;инициатива;initiatief;πρωτοβουλία key::44;academic;accademico;académique;universitaire;акадеческий academisch;ακαδημαϊκός;ακαδημαϊκή;ακαδημαϊκό;ακαδημαϊκές;ακαδημαϊκοί @@ -47,13 +47,13 @@ key::46;division;divisione;division;отделение;divisie;τμήμα key::47;committee;comitato;comité;комитет;commissie;επιτροπή key::48;promotion;promozione;продвижение;proothisis;forderung key::49;medical;medicine;clinical;medicina;clinici;médico;medicina;clínica;médico;medicina;clínica;medizinisch;Medizin;klinisch;medisch;geneeskunde;klinisch;ιατρικός;ιατρική;ιατρικό;ιατρικά;κλινικός;κλινική;κλινικό;κλινικά;tıbbi;tıp;klinik;orvosi;orvostudomány;klinikai;zdravniški;medicinski;klinični;meditsiini;kliinik;kliiniline; -key::50;technology;technological;tecnologia;tecnologie;tecnología;tecnológico;tecnologia;tecnológico;Technologie;technologisch;technologie;technologisch;τεχνολογία;τεχνολογικός;τεχνολογική;τεχνολογικό;teknoloji;teknolojik;technológia;technológiai;tehnologija;tehnološki;tehnoloogia;tehnoloogiline; +key::50;technology;technological;tecnologia;tecnologie;tecnología;tecnológico;tecnologia;tecnológico;Technologie;technologisch;technologie;technologisch;τεχνολογία;τεχνολογικός;τεχνολογική;τεχνολογικό;teknoloji;teknolojik;technológia;technológiai;tehnologija;tehnološki;tehnoloogia;tehnoloogiline;technologii; key::51;science;scientific;scienza;scientifiche;scienze;ciencia;científico;ciência;científico;Wissenschaft;wissenschaftlich;wetenschap;wetenschappelijk;επιστήμη;επιστημονικός;επιστημονική;επιστημονικό;επιστημονικά;bilim;bilimsel;tudomány;tudományos;znanost;znanstveni;teadus;teaduslik; key::52;engineering;ingegneria;ingeniería;engenharia;Ingenieurwissenschaft;ingenieurswetenschappen;bouwkunde;μηχανικός;μηχανική;μηχανικό;mühendislik;mérnöki;Inženirstvo;inseneeria;inseneri; key::53;management;gestione;gestionale;gestionali;gestión;administración;gestão;administração;Verwaltung;management;διαχείριση;yönetim;menedzsment;vodstvo;upravljanje;management;juhtkond;juhtimine;haldus; key::54;energy;energia;energía;energia;Energie;energie;ενέργεια;enerji;energia;energija;energia; key::55;agricultural;agriculture;agricoltura;agricole;agrícola;agricultura;agrícola;agricultura;landwirtschaftlich;Landwirtschaft;landbouwkundig;landbouw;αγροτικός;αγροτική;αγροτικό;γεωργικός;γεωργική;γεωργικό;γεωργία;tarımsal;tarım;mezőgazdasági;mezőgazdaság;poljedelski;poljedelstvo;põllumajandus;põllumajanduslik; -key::56;information;informazione;información;informação;Information;informatie;πληροφορία;bilgi;információ;informacija;informatsioon; +key::56;information;informazione;información;informação;Information;informatie;πληροφορία;bilgi;információ;informacija;informatsioon;informatycznych; key::57;social;sociali;social;social;Sozial;sociaal;maatschappelijk;κοινωνικός;κοινωνική;κοινωνικό;κοινωνικά;sosyal;szociális;družbeni;sotsiaal;sotsiaalne; key::58;environmental;ambiente;medioambiental;ambiente;medioambiente;meioambiente;Umwelt;milieu;milieuwetenschap;milieukunde;περιβαλλοντικός;περιβαλλοντική;περιβαλλοντικό;περιβαλλοντικά;çevre;környezeti;okoliški;keskonna;; key::59;business;economia;economiche;economica;negocio;empresa;negócio;Unternehmen;bedrijf;bedrijfskunde;επιχείρηση;iş;üzleti;posel;ettevõte/äri; @@ -71,7 +71,7 @@ key::70;veterinary;veterinaria;veterinarie;veterinaria;veterinária;tierärtzlic key::71;chemistry;chimica;química;química;Chemie;chemie;scheikunde;χημεία;kimya;kémia;kemija;keemia; key::72;security;sicurezza;seguridad;segurança;Sicherheit;veiligheid;ασφάλεια;güvenlik;biztonsági;varnost;turvalisus;julgeolek; key::73;biotechnology;biotecnologia;biotecnologie;biotecnología;biotecnologia;Biotechnologie;biotechnologie;βιοτεχνολογία;biyoteknoloji;biotechnológia;biotehnologija;biotehnoloogia; -key::74;military;militare;militari;militar;militar;Militär;militair;leger;στρατιωτικός;στρατιωτική;στρατιωτικό;στρατιωτικά;askeri;katonai;vojaški;vojni;militaar; +key::74;military;militare;militari;militar;militar;Militär;militair;leger;στρατιωτικός;στρατιωτική;στρατιωτικό;στρατιωτικά;askeri;katonai;vojaški;vojni;militaar;wojskowa; key::75;theological;teologia;teologico;teológico;tecnológica;theologisch;theologisch;θεολογικός;θεολογική;θεολογικό;θεολογικά;teolojik;technológiai;teološki;teoloogia;usuteadus;teoloogiline; key::76;electronics;elettronica;electrónica;eletrônicos;Elektronik;elektronica;ηλεκτρονική;elektronik;elektronika;elektronika;elektroonika; key::77;forestry;forestale;forestali;silvicultura;forestal;floresta;Forstwirtschaft;bosbouw;δασοκομία;δασολογία;ormancılık;erdészet;gozdarstvo;metsandus; @@ -100,4 +100,4 @@ key::99;neurology;neurologia;neurologiche;neurología;neurologia;Neurologie;neur key::100;geology;geologia;geologiche;geología;geologia;Geologie;geologie;aardkunde;γεωλογία;jeoloji;geológia;földtudomány;geologija;geoloogia; key::101;microbiology;microbiologia;micro-biologia;microbiologiche;microbiología;microbiologia;Mikrobiologie;microbiologie;μικροβιολογία;mikrobiyoloji;mikrobiológia;mikrobiologija;mikrobioloogia; key::102;informatics;informatica;informática;informática;informatica; -key:103;forschungsgemeinschaft;comunita ricerca;research community;research foundation;research association +key:103;forschungsgemeinschaft;comunita ricerca;research community;research foundation;research association \ No newline at end of file diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java index b845c395e..58f86d01d 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java @@ -137,6 +137,10 @@ public class ClusteringFunctionTest extends AbstractPaceTest { System.out.println("s3 = " + s3); System.out.println(cf.apply(Lists.newArrayList(title(s3)))); + final String s4 = "Politechniki Warszawskiej (Warsaw University of Technology)"; + System.out.println("s4 = " + s4); + System.out.println(cf.apply(Lists.newArrayList(title(s4)))); + } } diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java index 6f196ec4f..11ae4183a 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java @@ -51,7 +51,7 @@ public class DistanceAlgoTest extends AbstractPaceFunctions { double result = jaroWinklerNormalizedName.distance("Free University of Bozen-Bolzano", "University of the Free State"); System.out.println("result = " + result); - assertEquals(1.0, result); + assertEquals(0.0, result); } @Test @@ -114,4 +114,13 @@ public class DistanceAlgoTest extends AbstractPaceFunctions { assertTrue(result> 0.9); } + @Test + public void testJaroWinklerNormalizedName8() { + final JaroWinklerNormalizedName jaroWinklerNormalizedName = new JaroWinklerNormalizedName(params); + + double result = jaroWinklerNormalizedName.distance("Politechniki Warszawskiej (Warsaw University of Technology)", "Warsaw University of Technology"); + + System.out.println("result = " + result); + } + } From 4502b4433761a59510bbd96c4b245f445d645ebe Mon Sep 17 00:00:00 2001 From: miconis Date: Tue, 6 Aug 2019 12:09:34 +0200 Subject: [PATCH 085/449] addition of the BlockUtils class for meta-blocking, implementation of a new local test with edge filtering example --- .../resources/eu/dnetlib/pace/config/translation_map.csv | 2 +- .../eu/dnetlib/pace/clustering/ClusteringFunctionTest.java | 2 +- .../java/eu/dnetlib/pace/distance/DistanceAlgoTest.java | 7 +++++++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/translation_map.csv b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/translation_map.csv index bab68360d..4aad426f0 100644 --- a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/translation_map.csv +++ b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/translation_map.csv @@ -58,7 +58,7 @@ key::57;social;sociali;social;social;Sozial;sociaal;maatschappelijk;κοινων key::58;environmental;ambiente;medioambiental;ambiente;medioambiente;meioambiente;Umwelt;milieu;milieuwetenschap;milieukunde;περιβαλλοντικός;περιβαλλοντική;περιβαλλοντικό;περιβαλλοντικά;çevre;környezeti;okoliški;keskonna;; key::59;business;economia;economiche;economica;negocio;empresa;negócio;Unternehmen;bedrijf;bedrijfskunde;επιχείρηση;iş;üzleti;posel;ettevõte/äri; key::60;pharmaceuticals;pharmacy;farmacia;farmaceutica;farmacéutica;farmacia;farmacêutica;farmácia;Pharmazeutika;Arzneimittelkunde;farmaceutica;geneesmiddelen;apotheek;φαρμακευτικός;φαρμακευτική;φαρμακευτικό;φαρμακευτικά;φαρμακείο;ilaç;eczane;gyógyszerészeti;gyógyszertár;farmacevtika;lekarništvo;farmaatsia;farmatseutiline; -key::61;healthcare;salute;atenciónmédica;cuidadodelasalud;cuidadoscomasaúde;Gesundheitswesen;gezondheidszorg;ιατροφαρμακευτικήπερίθαλψη;sağlıkhizmeti;egészségügy;zdravstvo;tervishoid;tervishoiu; +key::61;healthcare;health services;salute;atenciónmédica;cuidadodelasalud;cuidadoscomasaúde;Gesundheitswesen;gezondheidszorg;ιατροφαρμακευτικήπερίθαλψη;sağlıkhizmeti;egészségügy;zdravstvo;tervishoid;tervishoiu; key::62;history;storia;historia;história;Geschichte;geschiedenis;geschiedkunde;ιστορία;tarih;történelem;zgodovina;ajalugu; key::63;materials;materiali;materia;materiales;materiais;materialen;υλικά;τεκμήρια;malzemeler;anyagok;materiali;materjalid;vahendid; key::64;economics;economia;economiche;economica;economía;economia;Wirtschaft;economie;οικονομικά;οικονομικέςεπιστήμες;ekonomi;közgazdaságtan;gospodarstvo;ekonomija;majanduslik;majandus; diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java index 58f86d01d..265f3973f 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java @@ -46,7 +46,7 @@ public class ClusteringFunctionTest extends AbstractPaceTest { @Test public void testNgramPairs() { params.put("ngramLen", 3); - params.put("max", 3); + params.put("max", 1); final ClusteringFunction np = new NgramPairs(params); diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java index 11ae4183a..1cce9a65b 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java @@ -1,5 +1,6 @@ package eu.dnetlib.pace.distance; +import eu.dnetlib.pace.clustering.NGramUtils; import eu.dnetlib.pace.distance.algo.JaroWinklerNormalizedName; import org.junit.Before; import org.junit.Test; @@ -25,6 +26,12 @@ public class DistanceAlgoTest extends AbstractPaceFunctions { params.put("weight", 1.0); } + @Test + public void testCleanForSorting() { + NGramUtils utils = new NGramUtils(); + System.out.println("utils = " + utils.cleanupForOrdering("University of Pisa")); + } + @Test public void testGetNumbers() { System.out.println("Numbers : " + getNumbers(TEST_STRING)); From 8c867101ef08034fbe86f338a77f88693f1fe175 Mon Sep 17 00:00:00 2001 From: miconis Date: Tue, 6 Aug 2019 17:06:05 +0200 Subject: [PATCH 086/449] addition of a fixSpecial function to address the problem with special character in organization names, addition of new terms in translation maps --- .../pace/clustering/KeywordsClustering.java | 21 +++++++++--- .../pace/common/AbstractPaceFunctions.java | 32 ++++++++++++------- .../eu/dnetlib/pace/config/city_map.csv | 2 +- .../eu/dnetlib/pace/config/stopwords_it.txt | 1 - .../dnetlib/pace/config/translation_map.csv | 13 ++++---- .../clustering/ClusteringFunctionTest.java | 4 +++ .../pace/distance/DistanceAlgoTest.java | 18 +++++++++++ 7 files changed, 68 insertions(+), 23 deletions(-) diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/KeywordsClustering.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/KeywordsClustering.java index 29d095230..1cabecd60 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/KeywordsClustering.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/KeywordsClustering.java @@ -1,16 +1,15 @@ package eu.dnetlib.pace.clustering; import eu.dnetlib.pace.common.AbstractPaceFunctions; +import eu.dnetlib.pace.model.Field; +import org.apache.commons.lang.StringUtils; import java.util.*; +import java.util.stream.Collectors; @ClusteringClass("keywordsclustering") public class KeywordsClustering extends AbstractClusteringFunction { - private static Map translationMap = AbstractPaceFunctions.loadMapFromClasspath("/eu/dnetlib/pace/config/translation_map.csv"); - - private static Map cityMap = AbstractPaceFunctions.loadMapFromClasspath("/eu/dnetlib/pace/config/city_map.csv"); - public KeywordsClustering(Map params) { super(params); } @@ -36,4 +35,18 @@ public class KeywordsClustering extends AbstractClusteringFunction { return combinations; } + + @Override + public Collection apply(List fields) { + return fields.stream().filter(f -> !f.isEmpty()) + .map(Field::stringValue) + .map(this::cleanup) //TODO can I add this to the AbstractClusteringFunction without overriding the method here? + .map(this::normalize) + .map(s -> filterAllStopWords(s)) + .map(this::doApply) + .map(c -> filterBlacklisted(c, ngramBlacklist)) + .flatMap(c -> c.stream()) + .filter(StringUtils::isNotBlank) + .collect(Collectors.toCollection(HashSet::new)); + } } \ No newline at end of file diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java index a5f7bf679..24379c677 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java @@ -6,7 +6,6 @@ import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.google.common.collect.Sets; import eu.dnetlib.pace.clustering.NGramUtils; -import eu.dnetlib.pace.distance.algo.JaroWinklerNormalizedName; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.model.FieldList; import eu.dnetlib.pace.model.FieldListImpl; @@ -29,7 +28,6 @@ import java.util.stream.Stream; */ public abstract class AbstractPaceFunctions { - private static Map translationMap = AbstractPaceFunctions.loadMapFromClasspath("/eu/dnetlib/pace/config/translation_map.csv"); private static Map cityMap = AbstractPaceFunctions.loadMapFromClasspath("/eu/dnetlib/pace/config/city_map.csv"); @@ -44,7 +42,10 @@ public abstract class AbstractPaceFunctions { private static final String alpha = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 "; private static final String aliases_from = "⁰¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ⁿ₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎àáâäæãåāèéêëēėęîïíīįìôöòóœøōõûüùúūßśšłžźżçćčñń"; - private static final String aliases_to = "0123456789+-=()n0123456789+-=()aaaaaaaaeeeeeeeiiiiiioooooooouuuuussslzzzcccnn"; + private static final String aliases_to = "0123456789+-=()n0123456789+-=()aaaaaaaaeeeeeeeiiiiiioooooooouuuuussslzzzcccnn"; + + private static final String special_from = "İə"; + private static final String special_to = "Ie"; public final String DOI_PREFIX = "(https?:\\/\\/dx\\.doi\\.org\\/)|(doi:)"; @@ -55,7 +56,8 @@ public abstract class AbstractPaceFunctions { } protected String cleanup(final String s) { - final String s0 = s.toLowerCase(); + final String ss = fixSpecial(s); //TODO is there something implemented to replace strange symbols with latin letters? + final String s0 = ss.toLowerCase(); final String s1 = fixAliases(s0); final String s2 = nfd(s1); final String s3 = s2.replaceAll("–", " "); @@ -98,6 +100,16 @@ public abstract class AbstractPaceFunctions { return s.replaceAll("\\D", ""); } + //sometimes the toLowerCase() produces error, this is meant to prevent them by replacing special character before the lowercase function + protected static String fixSpecial(final String s) { + final StringBuilder sb = new StringBuilder(); + for (final char ch : Lists.charactersOf(s)) { + final int i = StringUtils.indexOf(special_from, ch); + sb.append(i >= 0 ? special_to.charAt(i) : ch); + } + return sb.toString(); + } + protected static String fixAliases(final String s) { final StringBuilder sb = new StringBuilder(); for (final char ch : Lists.charactersOf(s)) { @@ -154,7 +166,7 @@ public abstract class AbstractPaceFunctions { return sb.toString().trim(); } - protected String filterAllStopWords(String s) { + public String filterAllStopWords(String s) { s = filterStopWords(s, stopwords_en); s = filterStopWords(s, stopwords_de); @@ -193,12 +205,12 @@ public abstract class AbstractPaceFunctions { public static Map loadMapFromClasspath(final String classpath) { final Map m = new HashMap<>(); try { - for (final String s: IOUtils.readLines(JaroWinklerNormalizedName.class.getResourceAsStream(classpath))) { + for (final String s: IOUtils.readLines(AbstractPaceFunctions.class.getResourceAsStream(classpath))) { //string is like this: code;word1;word2;word3 String[] line = s.split(";"); String value = line[0]; - for (String key: line){ - m.put(fixAliases(key).toLowerCase(),value); + for (int i=1; i getKeywords(String s1, Map translationMap, int windowSize){ - String s = cleanup(s1); - - s = filterAllStopWords(s); + String s = s1; List tokens = Arrays.asList(s.toLowerCase().split(" ")); diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/city_map.csv b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/city_map.csv index 666615792..936c80adf 100644 --- a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/city_map.csv +++ b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/city_map.csv @@ -7178,7 +7178,7 @@ city::743882;Kastamonu;Castamena;Castamon;Castamoni;Castamonu;Castamuni;KFS;Kast city::743952;Kars;Cars;Gorad Kars;KSY;Kapc;Kars;Karsa;Karsas;Khuars;Kuars;Qars;Qers;Vanand;ka er si;kaleuseu;kar s;karasa;kars;karusu;qars;Καρς;Горад Карс;Карс;Къарс;Хъарс;Ҟарс;Կարս;קארס;قارص;قەرس;كارس;کارس;ਕਾਰਸ;การ์ส;ყარსი;カルス;卡爾斯;카르스; city::744562;Karabuk;Karabiukas;Karabjuk;Karabuek;Karabuk;Karabük;Karampouk;Qerebuk;ka la bi ke;ka la bi ke sheng;kalabwikeu;karabuka;karabwk;karabyukku;Καραμπούκ;Карабук;Карабюк;Карабүк;Карабӱк;قره‌بوک;قرہ بوک;كارابوك;کارابوک;ਕਾਰਾਬੁਕ;ყარაბუქი;カラビュック;卡拉比克;卡拉比克省;카라뷔크; city::745028;Izmit;Astacus;Cocaeli;Ismid;Ismit;Isnimid;Izmid;Izmit;Kodja-Eli;Koja-Ili;Nicomedia;Nicomedie;Nicomédie;Nikomedeia;Nikomedia;izumitto;yi zi mi te;İzmit;Измит;イズミット;伊兹密特; -city::745044;Istanbul;Bizanc;Bizánc;Byzance;Byzantion;Byzantium;Byzanz;Constantinoble;Constantinopla;Constantinople;Constantinopolen;Constantinopoli;Constantinopolis;Costantinopoli;Estambul;IST;Istamboul;Istambul;Istambuł;Istampoul;Istanbul;Istanbúl;Isztambul;Konstantinapoly;Konstantinopel;Konstantinopolo;Konstantinoupole;Konstantinoupoli;Konstantinoupolis;Konstantinápoly;Kustantiniyah;Micklagard;Micklagård;Mikligardur;Mikligarður;Stamboul;Stambul;Stambula;Stambuł;Tsarigrad;Vizantija (Vizantija);Vyzantio;astnbwl;bijantium;byuzantion;byzntywn;iseutanbul;istambula;isutanburu;stin Poli [stimˈboli];yi si tan bu er;İstanbul;Βυζάντιο;Βυζαντιο;Ισταμπουλ;Ισταμπούλ;Κωνσταντινουπολη;Κωνσταντινούπολη;Κωνσταντινούπολις;στην Πόλι [stimˈboli];Византија (Vizantija);Истанбул;Стамбул;ביזנטיון;اسطنبول;इस्तांबुल;イスタンブール;ビュザンティオン;伊斯坦布尔;비잔티움;이스탄불; +city::745044;Istanbul;Bizanc;Bizánc;Byzance;Byzantion;Byzantium;Byzanz;Constantinoble;Constantinopla;Constantinople;Constantinopolen;Constantinopoli;Constantinopolis;Costantinopoli;Estambul;IST;Istamboul;Istambul;Istambuł;Istampoul;İstanbul;Istanbúl;Isztambul;Konstantinapoly;Konstantinopel;Konstantinopolo;Konstantinoupole;Konstantinoupoli;Konstantinoupolis;Konstantinápoly;Kustantiniyah;Micklagard;Micklagård;Mikligardur;Mikligarður;Stamboul;Stambul;Stambula;Stambuł;Tsarigrad;Vizantija (Vizantija);Vyzantio;astnbwl;bijantium;byuzantion;byzntywn;iseutanbul;istambula;isutanburu;stin Poli [stimˈboli];yi si tan bu er;İstanbul;Βυζάντιο;Βυζαντιο;Ισταμπουλ;Ισταμπούλ;Κωνσταντινουπολη;Κωνσταντινούπολη;Κωνσταντινούπολις;στην Πόλι [stimˈboli];Византија (Vizantija);Истанбул;Стамбул;ביזנטיון;اسطنبول;इस्तांबुल;イスタンブール;ビュザンティオン;伊斯坦布尔;비잔티움;이스탄불; city::745169;Inegol;Inegeul;Inegoel;Inegol;İnegöl; city::746666;Goelcuek;Geulzuk;Goelcuek;Gölcük; city::746881;Giresun;Cerasus;Choerades;Gireson;Giresun;Giresunas;Kerasounta;Kerassunde;Kerasun;Kerasunda;Kerasunt;Kiresun;OGU;Pharnacia;ghyrswn;gilesun;giresun;giresuni;grysn;gryswn;ji lei song;Κερασούντα;Гиресун;Ґіресун;Կերասուն;غيرسون;گره‌سون;گریسن;گریسون;გირესუნი;ギレスン;吉雷松;기레순; diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_it.txt b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_it.txt index 8d0ceb776..e6131bca9 100644 --- a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_it.txt +++ b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_it.txt @@ -445,7 +445,6 @@ posto potrebbe preferibilmente presa -press prima primo principalmente diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/translation_map.csv b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/translation_map.csv index 4aad426f0..c74b35786 100644 --- a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/translation_map.csv +++ b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/translation_map.csv @@ -1,6 +1,6 @@ -key::1;university;università;università studi;universitario;universitaria;université;universitaire;universitaires;universidad;universitade;Universität;universitaet;Uniwersytet;университет;universiteit;πανεπιστήμιο +key::1;university;università;università studi;universitario;universitaria;université;universitaire;universitaires;universidad;universitade;Universität;universitaet;Uniwersytet;университет;universiteit;πανεπιστήμιο;universitesi;universiteti key::2;studies;studi;études;estudios;estudos;Studien;studia;исследования;studies;σπουδές -key::3;advanced;superiore;supérieur;supérieure;supérieurs;supérieures;avancado;avancados;fortgeschrittene;fortgeschritten;zaawansowany;передовой;gevorderd;gevorderde;προχωρημένος;προχωρημένη;προχωρημένο;προχωρημένες;προχωρημένα;wyzsza; +key::3;advanced;superiore;supérieur;supérieure;supérieurs;supérieures;avancado;avancados;fortgeschrittene;fortgeschritten;zaawansowany;передовой;gevorderd;gevorderde;προχωρημένος;προχωρημένη;προχωρημένο;προχωρημένες;προχωρημένα;wyzsza key::4;institute;istituto;institut;instituto;instituto;Institut;instytut;институт;instituut;ινστιτούτο key::5;hospital;ospedale;hôpital;hospital;hospital;Krankenhaus;szpital;больница;ziekenhuis;νοσοκομείο key::6;research;ricerca;recherche;investigacion;pesquisa;Forschung;badania;исследования;onderzoek;έρευνα;erevna;erevnas @@ -38,7 +38,7 @@ key::37;federation;federazione;fédération;федерация;federatie;ομο key::38;observatory;osservatorio;observatoire;обсерватория;observatorium;αστεροσκοπείο key::39;bureau;ufficio;bureau;офис;bureau;γραφείο key::40;company;impresa;compagnie;société;компания;bedrijf;εταιρία -key::41;polytechnic;politecnico;polytechnique;политехника;polytechnisch;πολυτεχνείο;universita politecnica;polytechnic university;politechnika;politechniki;university technology;university science technology; +key::41;polytechnic;politecnico;polytechnique;политехника;polytechnisch;πολυτεχνείο;universita politecnica;polytechnic university;politechnika;politechniki;university technology;university science technology key::42;coalition;coalizione;coalition;коалиция;coalitie;συνασπισμός key::43;initiative;iniziativa;initiative;инициатива;initiatief;πρωτοβουλία key::44;academic;accademico;académique;universitaire;акадеческий academisch;ακαδημαϊκός;ακαδημαϊκή;ακαδημαϊκό;ακαδημαϊκές;ακαδημαϊκοί @@ -46,8 +46,8 @@ key::45;institution;istituzione;institution;институциональный;i key::46;division;divisione;division;отделение;divisie;τμήμα key::47;committee;comitato;comité;комитет;commissie;επιτροπή key::48;promotion;promozione;продвижение;proothisis;forderung -key::49;medical;medicine;clinical;medicina;clinici;médico;medicina;clínica;médico;medicina;clínica;medizinisch;Medizin;klinisch;medisch;geneeskunde;klinisch;ιατρικός;ιατρική;ιατρικό;ιατρικά;κλινικός;κλινική;κλινικό;κλινικά;tıbbi;tıp;klinik;orvosi;orvostudomány;klinikai;zdravniški;medicinski;klinični;meditsiini;kliinik;kliiniline; -key::50;technology;technological;tecnologia;tecnologie;tecnología;tecnológico;tecnologia;tecnológico;Technologie;technologisch;technologie;technologisch;τεχνολογία;τεχνολογικός;τεχνολογική;τεχνολογικό;teknoloji;teknolojik;technológia;technológiai;tehnologija;tehnološki;tehnoloogia;tehnoloogiline;technologii; +key::49;medical;medicine;clinical;medicina;clinici;médico;medicina;clínica;médico;medicina;clínica;medizinisch;Medizin;klinisch;medisch;geneeskunde;klinisch;ιατρικός;ιατρική;ιατρικό;ιατρικά;κλινικός;κλινική;κλινικό;κλινικά;tıbbi;tıp;klinik;orvosi;orvostudomány;klinikai;zdravniški;medicinski;klinični;meditsiini;kliinik;kliiniline +key::50;technology;technological;tecnologia;tecnologie;tecnología;tecnológico;tecnologia;tecnológico;Technologie;technologisch;technologie;technologisch;τεχνολογία;τεχνολογικός;τεχνολογική;τεχνολογικό;teknoloji;teknolojik;technológia;technológiai;tehnologija;tehnološki;tehnoloogia;tehnoloogiline;technologii;technical;texniki;teknik key::51;science;scientific;scienza;scientifiche;scienze;ciencia;científico;ciência;científico;Wissenschaft;wissenschaftlich;wetenschap;wetenschappelijk;επιστήμη;επιστημονικός;επιστημονική;επιστημονικό;επιστημονικά;bilim;bilimsel;tudomány;tudományos;znanost;znanstveni;teadus;teaduslik; key::52;engineering;ingegneria;ingeniería;engenharia;Ingenieurwissenschaft;ingenieurswetenschappen;bouwkunde;μηχανικός;μηχανική;μηχανικό;mühendislik;mérnöki;Inženirstvo;inseneeria;inseneri; key::53;management;gestione;gestionale;gestionali;gestión;administración;gestão;administração;Verwaltung;management;διαχείριση;yönetim;menedzsment;vodstvo;upravljanje;management;juhtkond;juhtimine;haldus; @@ -100,4 +100,5 @@ key::99;neurology;neurologia;neurologiche;neurología;neurologia;Neurologie;neur key::100;geology;geologia;geologiche;geología;geologia;Geologie;geologie;aardkunde;γεωλογία;jeoloji;geológia;földtudomány;geologija;geoloogia; key::101;microbiology;microbiologia;micro-biologia;microbiologiche;microbiología;microbiologia;Mikrobiologie;microbiologie;μικροβιολογία;mikrobiyoloji;mikrobiológia;mikrobiologija;mikrobioloogia; key::102;informatics;informatica;informática;informática;informatica; -key:103;forschungsgemeinschaft;comunita ricerca;research community;research foundation;research association \ No newline at end of file +key:103;forschungsgemeinschaft;comunita ricerca;research community;research foundation;research association +key:104;commerce;ticaret;ticarət;commercio;trade;handel;comercio; \ No newline at end of file diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java index 265f3973f..84ec09006 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java @@ -141,6 +141,10 @@ public class ClusteringFunctionTest extends AbstractPaceTest { System.out.println("s4 = " + s4); System.out.println(cf.apply(Lists.newArrayList(title(s4)))); + final String s5 = "İstanbul Ticarət Universiteti"; + System.out.println("s5 = " + s5); + System.out.println(cf.apply(Lists.newArrayList(title(s5)))); + } } diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java index 1cce9a65b..ec55b8713 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java @@ -130,4 +130,22 @@ public class DistanceAlgoTest extends AbstractPaceFunctions { System.out.println("result = " + result); } + @Test + public void testJaroWinklerNormalizedName9() { + final JaroWinklerNormalizedName jaroWinklerNormalizedName = new JaroWinklerNormalizedName(params); + + double result = jaroWinklerNormalizedName.distance("Istanbul Commerce University", "İstanbul Ticarət Universiteti"); + + System.out.println("result = " + result); + } + + @Test + public void testJaroWinklerNormalizedName10(){ + + final JaroWinklerNormalizedName jaroWinklerNormalizedName = new JaroWinklerNormalizedName(params); + + double result = jaroWinklerNormalizedName.distance("Firenze University Press", "University of Florence"); + + System.out.println("result = " + result); + } } From f2136e10240bedf0f33bc0ef2d5e3e6a088569d2 Mon Sep 17 00:00:00 2001 From: miconis Date: Wed, 7 Aug 2019 15:16:59 +0200 Subject: [PATCH 087/449] code refactoring: useless module removed --- dnet-openaire-data-protos/deploy.info | 2 - dnet-openaire-data-protos/pom.xml | 58 - .../proto/DatasourceOrganizationProtos.java | 1017 -- .../dnetlib/data/proto/DatasourceProtos.java | 6758 -------- .../eu/dnetlib/data/proto/DedupProtos.java | 564 - .../data/proto/DedupSimilarityProtos.java | 562 - .../dnetlib/data/proto/FieldTypeProtos.java | 8049 --------- .../eu/dnetlib/data/proto/KindProtos.java | 108 - .../java/eu/dnetlib/data/proto/OafProtos.java | 6730 -------- .../proto/OrganizationOrganizationProtos.java | 651 - .../data/proto/OrganizationProtos.java | 3420 ---- .../eu/dnetlib/data/proto/PersonProtos.java | 1752 -- .../data/proto/ProjectOrganizationProtos.java | 1112 -- .../eu/dnetlib/data/proto/ProjectProtos.java | 4486 ----- .../dnetlib/data/proto/RelMetadataProtos.java | 680 - .../eu/dnetlib/data/proto/RelTypeProtos.java | 228 - .../data/proto/ResultOrganizationProtos.java | 1017 -- .../data/proto/ResultProjectProtos.java | 1016 -- .../eu/dnetlib/data/proto/ResultProtos.java | 14212 ---------------- .../data/proto/ResultResultProtos.java | 4927 ------ .../data/proto/SpecialTrustProtos.java | 109 - .../eu/dnetlib/data/proto/TypeProtos.java | 118 - .../eu/dnetlib/data/proto/Datasource.proto | 61 - .../data/proto/Datasource_Organization.proto | 23 - .../eu/dnetlib/data/proto/Dedup.proto | 16 - .../dnetlib/data/proto/DedupSimilarity.proto | 16 - .../eu/dnetlib/data/proto/FieldType.proto | 104 - .../eu/dnetlib/data/proto/Kind.proto | 9 - .../eu/dnetlib/data/proto/OafParent.proto | 97 - .../eu/dnetlib/data/proto/Organization.proto | 33 - .../proto/Organization_Organization.proto | 15 - .../eu/dnetlib/data/proto/Person.proto | 25 - .../eu/dnetlib/data/proto/Project.proto | 42 - .../data/proto/Project_Organization.proto | 23 - .../eu/dnetlib/data/proto/RelMetadata.proto | 15 - .../eu/dnetlib/data/proto/RelType.proto | 36 - .../eu/dnetlib/data/proto/Result.proto | 128 - .../data/proto/Result_Organization.proto | 23 - .../dnetlib/data/proto/Result_Project.proto | 23 - .../eu/dnetlib/data/proto/Result_Result.proto | 94 - .../eu/dnetlib/data/proto/SpecialTrust.proto | 9 - .../eu/dnetlib/data/proto/Type.proto | 13 - 42 files changed, 58381 deletions(-) delete mode 100644 dnet-openaire-data-protos/deploy.info delete mode 100644 dnet-openaire-data-protos/pom.xml delete mode 100644 dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/DatasourceOrganizationProtos.java delete mode 100644 dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/DatasourceProtos.java delete mode 100644 dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/DedupProtos.java delete mode 100644 dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/DedupSimilarityProtos.java delete mode 100644 dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/FieldTypeProtos.java delete mode 100644 dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/KindProtos.java delete mode 100644 dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/OafProtos.java delete mode 100644 dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/OrganizationOrganizationProtos.java delete mode 100644 dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/OrganizationProtos.java delete mode 100644 dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/PersonProtos.java delete mode 100644 dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/ProjectOrganizationProtos.java delete mode 100644 dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/ProjectProtos.java delete mode 100644 dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/RelMetadataProtos.java delete mode 100644 dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/RelTypeProtos.java delete mode 100644 dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/ResultOrganizationProtos.java delete mode 100644 dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/ResultProjectProtos.java delete mode 100644 dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/ResultProtos.java delete mode 100644 dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/ResultResultProtos.java delete mode 100644 dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/SpecialTrustProtos.java delete mode 100644 dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/TypeProtos.java delete mode 100644 dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Datasource.proto delete mode 100644 dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Datasource_Organization.proto delete mode 100644 dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Dedup.proto delete mode 100644 dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/DedupSimilarity.proto delete mode 100644 dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/FieldType.proto delete mode 100644 dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Kind.proto delete mode 100644 dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/OafParent.proto delete mode 100644 dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Organization.proto delete mode 100644 dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Organization_Organization.proto delete mode 100644 dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Person.proto delete mode 100644 dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Project.proto delete mode 100644 dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Project_Organization.proto delete mode 100644 dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/RelMetadata.proto delete mode 100644 dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/RelType.proto delete mode 100644 dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Result.proto delete mode 100644 dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Result_Organization.proto delete mode 100644 dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Result_Project.proto delete mode 100644 dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Result_Result.proto delete mode 100644 dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/SpecialTrust.proto delete mode 100644 dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Type.proto diff --git a/dnet-openaire-data-protos/deploy.info b/dnet-openaire-data-protos/deploy.info deleted file mode 100644 index b3c6d02a5..000000000 --- a/dnet-openaire-data-protos/deploy.info +++ /dev/null @@ -1,2 +0,0 @@ -{"type_source": "SVN", "goal": "package -U source:jar", -"url": "http://svn-public.driver.research-infrastructures.eu/driver/dnet45/modules/dnet-openaire-data-protos/trunk/", "deploy_repository": "dnet45-snapshots", "version": "4", "mail": "sandro.labruzzo@isti.cnr.it,michele.artini@isti.cnr.it, claudio.atzori@isti.cnr.it, alessia.bardi@isti.cnr.it", "deploy_repository_url": "http://maven.research-infrastructures.eu/nexus/content/repositories/dnet45-snapshots", "name": "dnet-openaire-data-protos"} \ No newline at end of file diff --git a/dnet-openaire-data-protos/pom.xml b/dnet-openaire-data-protos/pom.xml deleted file mode 100644 index f247374c9..000000000 --- a/dnet-openaire-data-protos/pom.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - - eu.dnetlib - dnet45-parent - 1.0.0 - - - 4.0.0 - eu.dnetlib - dnet-openaire-data-protos - jar - 3.9.4-proto250 - - - - 2.4.1 - - - - - dnet4-bootstrap-release - http://maven.research-infrastructures.eu/nexus/content/repositories/dnet4-bootstrap-release/ - - - - - - - eu.dnetlib - protoc-jar-maven-plugin - 1.1.0 - - - generate-sources - - run - - - ${google.protobuf.version} - - src/main/resources - - src/gen/java - - - - - - - - - com.google.protobuf - protobuf-java - ${google.protobuf.version} - - - diff --git a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/DatasourceOrganizationProtos.java b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/DatasourceOrganizationProtos.java deleted file mode 100644 index 6ad51ee0f..000000000 --- a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/DatasourceOrganizationProtos.java +++ /dev/null @@ -1,1017 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: Datasource_Organization.proto - -package eu.dnetlib.data.proto; - -public final class DatasourceOrganizationProtos { - private DatasourceOrganizationProtos() {} - public static void registerAllExtensions( - com.google.protobuf.ExtensionRegistry registry) { - } - public interface DatasourceOrganizationOrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // optional .eu.dnetlib.data.proto.DatasourceOrganization.Provision provision = 1; - boolean hasProvision(); - eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision getProvision(); - eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.ProvisionOrBuilder getProvisionOrBuilder(); - } - public static final class DatasourceOrganization extends - com.google.protobuf.GeneratedMessage - implements DatasourceOrganizationOrBuilder { - // Use DatasourceOrganization.newBuilder() to construct. - private DatasourceOrganization(Builder builder) { - super(builder); - } - private DatasourceOrganization(boolean noInit) {} - - private static final DatasourceOrganization defaultInstance; - public static DatasourceOrganization getDefaultInstance() { - return defaultInstance; - } - - public DatasourceOrganization getDefaultInstanceForType() { - return defaultInstance; - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.DatasourceOrganizationProtos.internal_static_eu_dnetlib_data_proto_DatasourceOrganization_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.DatasourceOrganizationProtos.internal_static_eu_dnetlib_data_proto_DatasourceOrganization_fieldAccessorTable; - } - - public interface ProvisionOrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; - boolean hasRelMetadata(); - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata(); - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder(); - } - public static final class Provision extends - com.google.protobuf.GeneratedMessage - implements ProvisionOrBuilder { - // Use Provision.newBuilder() to construct. - private Provision(Builder builder) { - super(builder); - } - private Provision(boolean noInit) {} - - private static final Provision defaultInstance; - public static Provision getDefaultInstance() { - return defaultInstance; - } - - public Provision getDefaultInstanceForType() { - return defaultInstance; - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.DatasourceOrganizationProtos.internal_static_eu_dnetlib_data_proto_DatasourceOrganization_Provision_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.DatasourceOrganizationProtos.internal_static_eu_dnetlib_data_proto_DatasourceOrganization_Provision_fieldAccessorTable; - } - - public enum RelName - implements com.google.protobuf.ProtocolMessageEnum { - isProvidedBy(0, 1), - provides(1, 2), - ; - - public static final int isProvidedBy_VALUE = 1; - public static final int provides_VALUE = 2; - - - public final int getNumber() { return value; } - - public static RelName valueOf(int value) { - switch (value) { - case 1: return isProvidedBy; - case 2: return provides; - default: return null; - } - } - - public static com.google.protobuf.Internal.EnumLiteMap - internalGetValueMap() { - return internalValueMap; - } - private static com.google.protobuf.Internal.EnumLiteMap - internalValueMap = - new com.google.protobuf.Internal.EnumLiteMap() { - public RelName findValueByNumber(int number) { - return RelName.valueOf(number); - } - }; - - public final com.google.protobuf.Descriptors.EnumValueDescriptor - getValueDescriptor() { - return getDescriptor().getValues().get(index); - } - public final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptorForType() { - return getDescriptor(); - } - public static final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptor() { - return eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision.getDescriptor().getEnumTypes().get(0); - } - - private static final RelName[] VALUES = { - isProvidedBy, provides, - }; - - public static RelName valueOf( - com.google.protobuf.Descriptors.EnumValueDescriptor desc) { - if (desc.getType() != getDescriptor()) { - throw new java.lang.IllegalArgumentException( - "EnumValueDescriptor is not for this type."); - } - return VALUES[desc.getIndex()]; - } - - private final int index; - private final int value; - - private RelName(int index, int value) { - this.index = index; - this.value = value; - } - - // @@protoc_insertion_point(enum_scope:eu.dnetlib.data.proto.DatasourceOrganization.Provision.RelName) - } - - private int bitField0_; - // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; - public static final int RELMETADATA_FIELD_NUMBER = 1; - private eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata relMetadata_; - public boolean hasRelMetadata() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata() { - return relMetadata_; - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder() { - return relMetadata_; - } - - private void initFields() { - relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - if (!hasRelMetadata()) { - memoizedIsInitialized = 0; - return false; - } - if (!getRelMetadata().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeMessage(1, relMetadata_); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(1, relMetadata_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder - implements eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.ProvisionOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.DatasourceOrganizationProtos.internal_static_eu_dnetlib_data_proto_DatasourceOrganization_Provision_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.DatasourceOrganizationProtos.internal_static_eu_dnetlib_data_proto_DatasourceOrganization_Provision_fieldAccessorTable; - } - - // Construct using eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - getRelMetadataFieldBuilder(); - } - } - private static Builder create() { - return new Builder(); - } - - public Builder clear() { - super.clear(); - if (relMetadataBuilder_ == null) { - relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); - } else { - relMetadataBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision.getDescriptor(); - } - - public eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision getDefaultInstanceForType() { - return eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision.getDefaultInstance(); - } - - public eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision build() { - eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - private eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return result; - } - - public eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision buildPartial() { - eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision result = new eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - if (relMetadataBuilder_ == null) { - result.relMetadata_ = relMetadata_; - } else { - result.relMetadata_ = relMetadataBuilder_.build(); - } - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision) { - return mergeFrom((eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision other) { - if (other == eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision.getDefaultInstance()) return this; - if (other.hasRelMetadata()) { - mergeRelMetadata(other.getRelMetadata()); - } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - - public final boolean isInitialized() { - if (!hasRelMetadata()) { - - return false; - } - if (!getRelMetadata().isInitialized()) { - - return false; - } - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - } - break; - } - case 10: { - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder subBuilder = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.newBuilder(); - if (hasRelMetadata()) { - subBuilder.mergeFrom(getRelMetadata()); - } - input.readMessage(subBuilder, extensionRegistry); - setRelMetadata(subBuilder.buildPartial()); - break; - } - } - } - } - - private int bitField0_; - - // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; - private eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder> relMetadataBuilder_; - public boolean hasRelMetadata() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata() { - if (relMetadataBuilder_ == null) { - return relMetadata_; - } else { - return relMetadataBuilder_.getMessage(); - } - } - public Builder setRelMetadata(eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata value) { - if (relMetadataBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - relMetadata_ = value; - onChanged(); - } else { - relMetadataBuilder_.setMessage(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder setRelMetadata( - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder builderForValue) { - if (relMetadataBuilder_ == null) { - relMetadata_ = builderForValue.build(); - onChanged(); - } else { - relMetadataBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder mergeRelMetadata(eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata value) { - if (relMetadataBuilder_ == null) { - if (((bitField0_ & 0x00000001) == 0x00000001) && - relMetadata_ != eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance()) { - relMetadata_ = - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.newBuilder(relMetadata_).mergeFrom(value).buildPartial(); - } else { - relMetadata_ = value; - } - onChanged(); - } else { - relMetadataBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder clearRelMetadata() { - if (relMetadataBuilder_ == null) { - relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); - onChanged(); - } else { - relMetadataBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder getRelMetadataBuilder() { - bitField0_ |= 0x00000001; - onChanged(); - return getRelMetadataFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder() { - if (relMetadataBuilder_ != null) { - return relMetadataBuilder_.getMessageOrBuilder(); - } else { - return relMetadata_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder> - getRelMetadataFieldBuilder() { - if (relMetadataBuilder_ == null) { - relMetadataBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder>( - relMetadata_, - getParentForChildren(), - isClean()); - relMetadata_ = null; - } - return relMetadataBuilder_; - } - - // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.DatasourceOrganization.Provision) - } - - static { - defaultInstance = new Provision(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.DatasourceOrganization.Provision) - } - - private int bitField0_; - // optional .eu.dnetlib.data.proto.DatasourceOrganization.Provision provision = 1; - public static final int PROVISION_FIELD_NUMBER = 1; - private eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision provision_; - public boolean hasProvision() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision getProvision() { - return provision_; - } - public eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.ProvisionOrBuilder getProvisionOrBuilder() { - return provision_; - } - - private void initFields() { - provision_ = eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision.getDefaultInstance(); - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - if (hasProvision()) { - if (!getProvision().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeMessage(1, provision_); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(1, provision_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder - implements eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganizationOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.DatasourceOrganizationProtos.internal_static_eu_dnetlib_data_proto_DatasourceOrganization_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.DatasourceOrganizationProtos.internal_static_eu_dnetlib_data_proto_DatasourceOrganization_fieldAccessorTable; - } - - // Construct using eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - getProvisionFieldBuilder(); - } - } - private static Builder create() { - return new Builder(); - } - - public Builder clear() { - super.clear(); - if (provisionBuilder_ == null) { - provision_ = eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision.getDefaultInstance(); - } else { - provisionBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.getDescriptor(); - } - - public eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization getDefaultInstanceForType() { - return eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.getDefaultInstance(); - } - - public eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization build() { - eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - private eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return result; - } - - public eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization buildPartial() { - eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization result = new eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - if (provisionBuilder_ == null) { - result.provision_ = provision_; - } else { - result.provision_ = provisionBuilder_.build(); - } - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization) { - return mergeFrom((eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization other) { - if (other == eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.getDefaultInstance()) return this; - if (other.hasProvision()) { - mergeProvision(other.getProvision()); - } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - - public final boolean isInitialized() { - if (hasProvision()) { - if (!getProvision().isInitialized()) { - - return false; - } - } - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - } - break; - } - case 10: { - eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision.Builder subBuilder = eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision.newBuilder(); - if (hasProvision()) { - subBuilder.mergeFrom(getProvision()); - } - input.readMessage(subBuilder, extensionRegistry); - setProvision(subBuilder.buildPartial()); - break; - } - } - } - } - - private int bitField0_; - - // optional .eu.dnetlib.data.proto.DatasourceOrganization.Provision provision = 1; - private eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision provision_ = eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision, eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision.Builder, eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.ProvisionOrBuilder> provisionBuilder_; - public boolean hasProvision() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision getProvision() { - if (provisionBuilder_ == null) { - return provision_; - } else { - return provisionBuilder_.getMessage(); - } - } - public Builder setProvision(eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision value) { - if (provisionBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - provision_ = value; - onChanged(); - } else { - provisionBuilder_.setMessage(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder setProvision( - eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision.Builder builderForValue) { - if (provisionBuilder_ == null) { - provision_ = builderForValue.build(); - onChanged(); - } else { - provisionBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder mergeProvision(eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision value) { - if (provisionBuilder_ == null) { - if (((bitField0_ & 0x00000001) == 0x00000001) && - provision_ != eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision.getDefaultInstance()) { - provision_ = - eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision.newBuilder(provision_).mergeFrom(value).buildPartial(); - } else { - provision_ = value; - } - onChanged(); - } else { - provisionBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder clearProvision() { - if (provisionBuilder_ == null) { - provision_ = eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision.getDefaultInstance(); - onChanged(); - } else { - provisionBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - public eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision.Builder getProvisionBuilder() { - bitField0_ |= 0x00000001; - onChanged(); - return getProvisionFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.ProvisionOrBuilder getProvisionOrBuilder() { - if (provisionBuilder_ != null) { - return provisionBuilder_.getMessageOrBuilder(); - } else { - return provision_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision, eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision.Builder, eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.ProvisionOrBuilder> - getProvisionFieldBuilder() { - if (provisionBuilder_ == null) { - provisionBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision, eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision.Builder, eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.ProvisionOrBuilder>( - provision_, - getParentForChildren(), - isClean()); - provision_ = null; - } - return provisionBuilder_; - } - - // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.DatasourceOrganization) - } - - static { - defaultInstance = new DatasourceOrganization(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.DatasourceOrganization) - } - - private static com.google.protobuf.Descriptors.Descriptor - internal_static_eu_dnetlib_data_proto_DatasourceOrganization_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_eu_dnetlib_data_proto_DatasourceOrganization_fieldAccessorTable; - private static com.google.protobuf.Descriptors.Descriptor - internal_static_eu_dnetlib_data_proto_DatasourceOrganization_Provision_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_eu_dnetlib_data_proto_DatasourceOrganization_Provision_fieldAccessorTable; - - public static com.google.protobuf.Descriptors.FileDescriptor - getDescriptor() { - return descriptor; - } - private static com.google.protobuf.Descriptors.FileDescriptor - descriptor; - static { - java.lang.String[] descriptorData = { - "\n\035Datasource_Organization.proto\022\025eu.dnet" + - "lib.data.proto\032\021RelMetadata.proto\"\325\001\n\026Da" + - "tasourceOrganization\022J\n\tprovision\030\001 \001(\0132" + - "7.eu.dnetlib.data.proto.DatasourceOrgani" + - "zation.Provision\032o\n\tProvision\0227\n\013relMeta" + - "data\030\001 \002(\0132\".eu.dnetlib.data.proto.RelMe" + - "tadata\")\n\007RelName\022\020\n\014isProvidedBy\020\001\022\014\n\010p" + - "rovides\020\002B5\n\025eu.dnetlib.data.protoB\034Data" + - "sourceOrganizationProtos" - }; - com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = - new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { - public com.google.protobuf.ExtensionRegistry assignDescriptors( - com.google.protobuf.Descriptors.FileDescriptor root) { - descriptor = root; - internal_static_eu_dnetlib_data_proto_DatasourceOrganization_descriptor = - getDescriptor().getMessageTypes().get(0); - internal_static_eu_dnetlib_data_proto_DatasourceOrganization_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_eu_dnetlib_data_proto_DatasourceOrganization_descriptor, - new java.lang.String[] { "Provision", }, - eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.class, - eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Builder.class); - internal_static_eu_dnetlib_data_proto_DatasourceOrganization_Provision_descriptor = - internal_static_eu_dnetlib_data_proto_DatasourceOrganization_descriptor.getNestedTypes().get(0); - internal_static_eu_dnetlib_data_proto_DatasourceOrganization_Provision_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_eu_dnetlib_data_proto_DatasourceOrganization_Provision_descriptor, - new java.lang.String[] { "RelMetadata", }, - eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision.class, - eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Provision.Builder.class); - return null; - } - }; - com.google.protobuf.Descriptors.FileDescriptor - .internalBuildGeneratedFileFrom(descriptorData, - new com.google.protobuf.Descriptors.FileDescriptor[] { - eu.dnetlib.data.proto.RelMetadataProtos.getDescriptor(), - }, assigner); - } - - // @@protoc_insertion_point(outer_class_scope) -} diff --git a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/DatasourceProtos.java b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/DatasourceProtos.java deleted file mode 100644 index ced36fa73..000000000 --- a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/DatasourceProtos.java +++ /dev/null @@ -1,6758 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: Datasource.proto - -package eu.dnetlib.data.proto; - -public final class DatasourceProtos { - private DatasourceProtos() {} - public static void registerAllExtensions( - com.google.protobuf.ExtensionRegistry registry) { - } - public interface DatasourceOrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // optional .eu.dnetlib.data.proto.Datasource.Metadata metadata = 2; - boolean hasMetadata(); - eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata getMetadata(); - eu.dnetlib.data.proto.DatasourceProtos.Datasource.MetadataOrBuilder getMetadataOrBuilder(); - } - public static final class Datasource extends - com.google.protobuf.GeneratedMessage - implements DatasourceOrBuilder { - // Use Datasource.newBuilder() to construct. - private Datasource(Builder builder) { - super(builder); - } - private Datasource(boolean noInit) {} - - private static final Datasource defaultInstance; - public static Datasource getDefaultInstance() { - return defaultInstance; - } - - public Datasource getDefaultInstanceForType() { - return defaultInstance; - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.DatasourceProtos.internal_static_eu_dnetlib_data_proto_Datasource_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.DatasourceProtos.internal_static_eu_dnetlib_data_proto_Datasource_fieldAccessorTable; - } - - public interface MetadataOrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // optional .eu.dnetlib.data.proto.Qualifier datasourcetype = 15; - boolean hasDatasourcetype(); - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getDatasourcetype(); - eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getDatasourcetypeOrBuilder(); - - // optional .eu.dnetlib.data.proto.Qualifier openairecompatibility = 17; - boolean hasOpenairecompatibility(); - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getOpenairecompatibility(); - eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getOpenairecompatibilityOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField officialname = 1; - boolean hasOfficialname(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getOfficialname(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOfficialnameOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField englishname = 2; - boolean hasEnglishname(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getEnglishname(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEnglishnameOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField websiteurl = 3; - boolean hasWebsiteurl(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getWebsiteurl(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getWebsiteurlOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField logourl = 4; - boolean hasLogourl(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getLogourl(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getLogourlOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField contactemail = 5; - boolean hasContactemail(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getContactemail(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getContactemailOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField namespaceprefix = 7; - boolean hasNamespaceprefix(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getNamespaceprefix(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getNamespaceprefixOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField latitude = 18; - boolean hasLatitude(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getLatitude(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getLatitudeOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField longitude = 19; - boolean hasLongitude(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getLongitude(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getLongitudeOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField dateofvalidation = 20; - boolean hasDateofvalidation(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getDateofvalidation(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDateofvalidationOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField description = 21; - boolean hasDescription(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getDescription(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDescriptionOrBuilder(); - - // repeated .eu.dnetlib.data.proto.StructuredProperty subjects = 45; - java.util.List - getSubjectsList(); - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty getSubjects(int index); - int getSubjectsCount(); - java.util.List - getSubjectsOrBuilderList(); - eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder getSubjectsOrBuilder( - int index); - - // optional .eu.dnetlib.data.proto.StringField odnumberofitems = 9; - boolean hasOdnumberofitems(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getOdnumberofitems(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOdnumberofitemsOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField odnumberofitemsdate = 10; - boolean hasOdnumberofitemsdate(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getOdnumberofitemsdate(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOdnumberofitemsdateOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField odpolicies = 12; - boolean hasOdpolicies(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getOdpolicies(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOdpoliciesOrBuilder(); - - // repeated .eu.dnetlib.data.proto.StringField odlanguages = 13; - java.util.List - getOdlanguagesList(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getOdlanguages(int index); - int getOdlanguagesCount(); - java.util.List - getOdlanguagesOrBuilderList(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOdlanguagesOrBuilder( - int index); - - // repeated .eu.dnetlib.data.proto.StringField odcontenttypes = 14; - java.util.List - getOdcontenttypesList(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getOdcontenttypes(int index); - int getOdcontenttypesCount(); - java.util.List - getOdcontenttypesOrBuilderList(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOdcontenttypesOrBuilder( - int index); - - // repeated .eu.dnetlib.data.proto.StringField accessinfopackage = 6; - java.util.List - getAccessinfopackageList(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getAccessinfopackage(int index); - int getAccessinfopackageCount(); - java.util.List - getAccessinfopackageOrBuilderList(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getAccessinfopackageOrBuilder( - int index); - - // optional .eu.dnetlib.data.proto.StringField releasestartdate = 31; - boolean hasReleasestartdate(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getReleasestartdate(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getReleasestartdateOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField releaseenddate = 32; - boolean hasReleaseenddate(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getReleaseenddate(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getReleaseenddateOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField missionstatementurl = 33; - boolean hasMissionstatementurl(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getMissionstatementurl(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getMissionstatementurlOrBuilder(); - - // optional .eu.dnetlib.data.proto.BoolField dataprovider = 34; - boolean hasDataprovider(); - eu.dnetlib.data.proto.FieldTypeProtos.BoolField getDataprovider(); - eu.dnetlib.data.proto.FieldTypeProtos.BoolFieldOrBuilder getDataproviderOrBuilder(); - - // optional .eu.dnetlib.data.proto.BoolField serviceprovider = 35; - boolean hasServiceprovider(); - eu.dnetlib.data.proto.FieldTypeProtos.BoolField getServiceprovider(); - eu.dnetlib.data.proto.FieldTypeProtos.BoolFieldOrBuilder getServiceproviderOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField databaseaccesstype = 36; - boolean hasDatabaseaccesstype(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getDatabaseaccesstype(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDatabaseaccesstypeOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField datauploadtype = 37; - boolean hasDatauploadtype(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getDatauploadtype(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDatauploadtypeOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField databaseaccessrestriction = 38; - boolean hasDatabaseaccessrestriction(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getDatabaseaccessrestriction(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDatabaseaccessrestrictionOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField datauploadrestriction = 39; - boolean hasDatauploadrestriction(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getDatauploadrestriction(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDatauploadrestrictionOrBuilder(); - - // optional .eu.dnetlib.data.proto.BoolField versioning = 40; - boolean hasVersioning(); - eu.dnetlib.data.proto.FieldTypeProtos.BoolField getVersioning(); - eu.dnetlib.data.proto.FieldTypeProtos.BoolFieldOrBuilder getVersioningOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField citationguidelineurl = 41; - boolean hasCitationguidelineurl(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getCitationguidelineurl(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getCitationguidelineurlOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField qualitymanagementkind = 42; - boolean hasQualitymanagementkind(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getQualitymanagementkind(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getQualitymanagementkindOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField pidsystems = 43; - boolean hasPidsystems(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getPidsystems(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getPidsystemsOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField certificates = 44; - boolean hasCertificates(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getCertificates(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getCertificatesOrBuilder(); - - // repeated .eu.dnetlib.data.proto.KeyValue policies = 46; - java.util.List - getPoliciesList(); - eu.dnetlib.data.proto.FieldTypeProtos.KeyValue getPolicies(int index); - int getPoliciesCount(); - java.util.List - getPoliciesOrBuilderList(); - eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder getPoliciesOrBuilder( - int index); - } - public static final class Metadata extends - com.google.protobuf.GeneratedMessage - implements MetadataOrBuilder { - // Use Metadata.newBuilder() to construct. - private Metadata(Builder builder) { - super(builder); - } - private Metadata(boolean noInit) {} - - private static final Metadata defaultInstance; - public static Metadata getDefaultInstance() { - return defaultInstance; - } - - public Metadata getDefaultInstanceForType() { - return defaultInstance; - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.DatasourceProtos.internal_static_eu_dnetlib_data_proto_Datasource_Metadata_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.DatasourceProtos.internal_static_eu_dnetlib_data_proto_Datasource_Metadata_fieldAccessorTable; - } - - private int bitField0_; - // optional .eu.dnetlib.data.proto.Qualifier datasourcetype = 15; - public static final int DATASOURCETYPE_FIELD_NUMBER = 15; - private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier datasourcetype_; - public boolean hasDatasourcetype() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getDatasourcetype() { - return datasourcetype_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getDatasourcetypeOrBuilder() { - return datasourcetype_; - } - - // optional .eu.dnetlib.data.proto.Qualifier openairecompatibility = 17; - public static final int OPENAIRECOMPATIBILITY_FIELD_NUMBER = 17; - private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier openairecompatibility_; - public boolean hasOpenairecompatibility() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getOpenairecompatibility() { - return openairecompatibility_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getOpenairecompatibilityOrBuilder() { - return openairecompatibility_; - } - - // optional .eu.dnetlib.data.proto.StringField officialname = 1; - public static final int OFFICIALNAME_FIELD_NUMBER = 1; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField officialname_; - public boolean hasOfficialname() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getOfficialname() { - return officialname_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOfficialnameOrBuilder() { - return officialname_; - } - - // optional .eu.dnetlib.data.proto.StringField englishname = 2; - public static final int ENGLISHNAME_FIELD_NUMBER = 2; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField englishname_; - public boolean hasEnglishname() { - return ((bitField0_ & 0x00000008) == 0x00000008); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEnglishname() { - return englishname_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEnglishnameOrBuilder() { - return englishname_; - } - - // optional .eu.dnetlib.data.proto.StringField websiteurl = 3; - public static final int WEBSITEURL_FIELD_NUMBER = 3; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField websiteurl_; - public boolean hasWebsiteurl() { - return ((bitField0_ & 0x00000010) == 0x00000010); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getWebsiteurl() { - return websiteurl_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getWebsiteurlOrBuilder() { - return websiteurl_; - } - - // optional .eu.dnetlib.data.proto.StringField logourl = 4; - public static final int LOGOURL_FIELD_NUMBER = 4; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField logourl_; - public boolean hasLogourl() { - return ((bitField0_ & 0x00000020) == 0x00000020); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getLogourl() { - return logourl_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getLogourlOrBuilder() { - return logourl_; - } - - // optional .eu.dnetlib.data.proto.StringField contactemail = 5; - public static final int CONTACTEMAIL_FIELD_NUMBER = 5; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField contactemail_; - public boolean hasContactemail() { - return ((bitField0_ & 0x00000040) == 0x00000040); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getContactemail() { - return contactemail_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getContactemailOrBuilder() { - return contactemail_; - } - - // optional .eu.dnetlib.data.proto.StringField namespaceprefix = 7; - public static final int NAMESPACEPREFIX_FIELD_NUMBER = 7; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField namespaceprefix_; - public boolean hasNamespaceprefix() { - return ((bitField0_ & 0x00000080) == 0x00000080); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getNamespaceprefix() { - return namespaceprefix_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getNamespaceprefixOrBuilder() { - return namespaceprefix_; - } - - // optional .eu.dnetlib.data.proto.StringField latitude = 18; - public static final int LATITUDE_FIELD_NUMBER = 18; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField latitude_; - public boolean hasLatitude() { - return ((bitField0_ & 0x00000100) == 0x00000100); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getLatitude() { - return latitude_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getLatitudeOrBuilder() { - return latitude_; - } - - // optional .eu.dnetlib.data.proto.StringField longitude = 19; - public static final int LONGITUDE_FIELD_NUMBER = 19; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField longitude_; - public boolean hasLongitude() { - return ((bitField0_ & 0x00000200) == 0x00000200); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getLongitude() { - return longitude_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getLongitudeOrBuilder() { - return longitude_; - } - - // optional .eu.dnetlib.data.proto.StringField dateofvalidation = 20; - public static final int DATEOFVALIDATION_FIELD_NUMBER = 20; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField dateofvalidation_; - public boolean hasDateofvalidation() { - return ((bitField0_ & 0x00000400) == 0x00000400); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getDateofvalidation() { - return dateofvalidation_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDateofvalidationOrBuilder() { - return dateofvalidation_; - } - - // optional .eu.dnetlib.data.proto.StringField description = 21; - public static final int DESCRIPTION_FIELD_NUMBER = 21; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField description_; - public boolean hasDescription() { - return ((bitField0_ & 0x00000800) == 0x00000800); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getDescription() { - return description_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDescriptionOrBuilder() { - return description_; - } - - // repeated .eu.dnetlib.data.proto.StructuredProperty subjects = 45; - public static final int SUBJECTS_FIELD_NUMBER = 45; - private java.util.List subjects_; - public java.util.List getSubjectsList() { - return subjects_; - } - public java.util.List - getSubjectsOrBuilderList() { - return subjects_; - } - public int getSubjectsCount() { - return subjects_.size(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty getSubjects(int index) { - return subjects_.get(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder getSubjectsOrBuilder( - int index) { - return subjects_.get(index); - } - - // optional .eu.dnetlib.data.proto.StringField odnumberofitems = 9; - public static final int ODNUMBEROFITEMS_FIELD_NUMBER = 9; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField odnumberofitems_; - public boolean hasOdnumberofitems() { - return ((bitField0_ & 0x00001000) == 0x00001000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getOdnumberofitems() { - return odnumberofitems_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOdnumberofitemsOrBuilder() { - return odnumberofitems_; - } - - // optional .eu.dnetlib.data.proto.StringField odnumberofitemsdate = 10; - public static final int ODNUMBEROFITEMSDATE_FIELD_NUMBER = 10; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField odnumberofitemsdate_; - public boolean hasOdnumberofitemsdate() { - return ((bitField0_ & 0x00002000) == 0x00002000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getOdnumberofitemsdate() { - return odnumberofitemsdate_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOdnumberofitemsdateOrBuilder() { - return odnumberofitemsdate_; - } - - // optional .eu.dnetlib.data.proto.StringField odpolicies = 12; - public static final int ODPOLICIES_FIELD_NUMBER = 12; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField odpolicies_; - public boolean hasOdpolicies() { - return ((bitField0_ & 0x00004000) == 0x00004000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getOdpolicies() { - return odpolicies_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOdpoliciesOrBuilder() { - return odpolicies_; - } - - // repeated .eu.dnetlib.data.proto.StringField odlanguages = 13; - public static final int ODLANGUAGES_FIELD_NUMBER = 13; - private java.util.List odlanguages_; - public java.util.List getOdlanguagesList() { - return odlanguages_; - } - public java.util.List - getOdlanguagesOrBuilderList() { - return odlanguages_; - } - public int getOdlanguagesCount() { - return odlanguages_.size(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getOdlanguages(int index) { - return odlanguages_.get(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOdlanguagesOrBuilder( - int index) { - return odlanguages_.get(index); - } - - // repeated .eu.dnetlib.data.proto.StringField odcontenttypes = 14; - public static final int ODCONTENTTYPES_FIELD_NUMBER = 14; - private java.util.List odcontenttypes_; - public java.util.List getOdcontenttypesList() { - return odcontenttypes_; - } - public java.util.List - getOdcontenttypesOrBuilderList() { - return odcontenttypes_; - } - public int getOdcontenttypesCount() { - return odcontenttypes_.size(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getOdcontenttypes(int index) { - return odcontenttypes_.get(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOdcontenttypesOrBuilder( - int index) { - return odcontenttypes_.get(index); - } - - // repeated .eu.dnetlib.data.proto.StringField accessinfopackage = 6; - public static final int ACCESSINFOPACKAGE_FIELD_NUMBER = 6; - private java.util.List accessinfopackage_; - public java.util.List getAccessinfopackageList() { - return accessinfopackage_; - } - public java.util.List - getAccessinfopackageOrBuilderList() { - return accessinfopackage_; - } - public int getAccessinfopackageCount() { - return accessinfopackage_.size(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getAccessinfopackage(int index) { - return accessinfopackage_.get(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getAccessinfopackageOrBuilder( - int index) { - return accessinfopackage_.get(index); - } - - // optional .eu.dnetlib.data.proto.StringField releasestartdate = 31; - public static final int RELEASESTARTDATE_FIELD_NUMBER = 31; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField releasestartdate_; - public boolean hasReleasestartdate() { - return ((bitField0_ & 0x00008000) == 0x00008000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getReleasestartdate() { - return releasestartdate_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getReleasestartdateOrBuilder() { - return releasestartdate_; - } - - // optional .eu.dnetlib.data.proto.StringField releaseenddate = 32; - public static final int RELEASEENDDATE_FIELD_NUMBER = 32; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField releaseenddate_; - public boolean hasReleaseenddate() { - return ((bitField0_ & 0x00010000) == 0x00010000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getReleaseenddate() { - return releaseenddate_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getReleaseenddateOrBuilder() { - return releaseenddate_; - } - - // optional .eu.dnetlib.data.proto.StringField missionstatementurl = 33; - public static final int MISSIONSTATEMENTURL_FIELD_NUMBER = 33; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField missionstatementurl_; - public boolean hasMissionstatementurl() { - return ((bitField0_ & 0x00020000) == 0x00020000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getMissionstatementurl() { - return missionstatementurl_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getMissionstatementurlOrBuilder() { - return missionstatementurl_; - } - - // optional .eu.dnetlib.data.proto.BoolField dataprovider = 34; - public static final int DATAPROVIDER_FIELD_NUMBER = 34; - private eu.dnetlib.data.proto.FieldTypeProtos.BoolField dataprovider_; - public boolean hasDataprovider() { - return ((bitField0_ & 0x00040000) == 0x00040000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.BoolField getDataprovider() { - return dataprovider_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.BoolFieldOrBuilder getDataproviderOrBuilder() { - return dataprovider_; - } - - // optional .eu.dnetlib.data.proto.BoolField serviceprovider = 35; - public static final int SERVICEPROVIDER_FIELD_NUMBER = 35; - private eu.dnetlib.data.proto.FieldTypeProtos.BoolField serviceprovider_; - public boolean hasServiceprovider() { - return ((bitField0_ & 0x00080000) == 0x00080000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.BoolField getServiceprovider() { - return serviceprovider_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.BoolFieldOrBuilder getServiceproviderOrBuilder() { - return serviceprovider_; - } - - // optional .eu.dnetlib.data.proto.StringField databaseaccesstype = 36; - public static final int DATABASEACCESSTYPE_FIELD_NUMBER = 36; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField databaseaccesstype_; - public boolean hasDatabaseaccesstype() { - return ((bitField0_ & 0x00100000) == 0x00100000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getDatabaseaccesstype() { - return databaseaccesstype_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDatabaseaccesstypeOrBuilder() { - return databaseaccesstype_; - } - - // optional .eu.dnetlib.data.proto.StringField datauploadtype = 37; - public static final int DATAUPLOADTYPE_FIELD_NUMBER = 37; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField datauploadtype_; - public boolean hasDatauploadtype() { - return ((bitField0_ & 0x00200000) == 0x00200000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getDatauploadtype() { - return datauploadtype_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDatauploadtypeOrBuilder() { - return datauploadtype_; - } - - // optional .eu.dnetlib.data.proto.StringField databaseaccessrestriction = 38; - public static final int DATABASEACCESSRESTRICTION_FIELD_NUMBER = 38; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField databaseaccessrestriction_; - public boolean hasDatabaseaccessrestriction() { - return ((bitField0_ & 0x00400000) == 0x00400000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getDatabaseaccessrestriction() { - return databaseaccessrestriction_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDatabaseaccessrestrictionOrBuilder() { - return databaseaccessrestriction_; - } - - // optional .eu.dnetlib.data.proto.StringField datauploadrestriction = 39; - public static final int DATAUPLOADRESTRICTION_FIELD_NUMBER = 39; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField datauploadrestriction_; - public boolean hasDatauploadrestriction() { - return ((bitField0_ & 0x00800000) == 0x00800000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getDatauploadrestriction() { - return datauploadrestriction_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDatauploadrestrictionOrBuilder() { - return datauploadrestriction_; - } - - // optional .eu.dnetlib.data.proto.BoolField versioning = 40; - public static final int VERSIONING_FIELD_NUMBER = 40; - private eu.dnetlib.data.proto.FieldTypeProtos.BoolField versioning_; - public boolean hasVersioning() { - return ((bitField0_ & 0x01000000) == 0x01000000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.BoolField getVersioning() { - return versioning_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.BoolFieldOrBuilder getVersioningOrBuilder() { - return versioning_; - } - - // optional .eu.dnetlib.data.proto.StringField citationguidelineurl = 41; - public static final int CITATIONGUIDELINEURL_FIELD_NUMBER = 41; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField citationguidelineurl_; - public boolean hasCitationguidelineurl() { - return ((bitField0_ & 0x02000000) == 0x02000000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getCitationguidelineurl() { - return citationguidelineurl_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getCitationguidelineurlOrBuilder() { - return citationguidelineurl_; - } - - // optional .eu.dnetlib.data.proto.StringField qualitymanagementkind = 42; - public static final int QUALITYMANAGEMENTKIND_FIELD_NUMBER = 42; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField qualitymanagementkind_; - public boolean hasQualitymanagementkind() { - return ((bitField0_ & 0x04000000) == 0x04000000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getQualitymanagementkind() { - return qualitymanagementkind_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getQualitymanagementkindOrBuilder() { - return qualitymanagementkind_; - } - - // optional .eu.dnetlib.data.proto.StringField pidsystems = 43; - public static final int PIDSYSTEMS_FIELD_NUMBER = 43; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField pidsystems_; - public boolean hasPidsystems() { - return ((bitField0_ & 0x08000000) == 0x08000000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getPidsystems() { - return pidsystems_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getPidsystemsOrBuilder() { - return pidsystems_; - } - - // optional .eu.dnetlib.data.proto.StringField certificates = 44; - public static final int CERTIFICATES_FIELD_NUMBER = 44; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField certificates_; - public boolean hasCertificates() { - return ((bitField0_ & 0x10000000) == 0x10000000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getCertificates() { - return certificates_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getCertificatesOrBuilder() { - return certificates_; - } - - // repeated .eu.dnetlib.data.proto.KeyValue policies = 46; - public static final int POLICIES_FIELD_NUMBER = 46; - private java.util.List policies_; - public java.util.List getPoliciesList() { - return policies_; - } - public java.util.List - getPoliciesOrBuilderList() { - return policies_; - } - public int getPoliciesCount() { - return policies_.size(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue getPolicies(int index) { - return policies_.get(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder getPoliciesOrBuilder( - int index) { - return policies_.get(index); - } - - private void initFields() { - datasourcetype_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - openairecompatibility_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - officialname_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - englishname_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - websiteurl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - logourl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - contactemail_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - namespaceprefix_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - latitude_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - longitude_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - dateofvalidation_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - description_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - subjects_ = java.util.Collections.emptyList(); - odnumberofitems_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - odnumberofitemsdate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - odpolicies_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - odlanguages_ = java.util.Collections.emptyList(); - odcontenttypes_ = java.util.Collections.emptyList(); - accessinfopackage_ = java.util.Collections.emptyList(); - releasestartdate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - releaseenddate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - missionstatementurl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - dataprovider_ = eu.dnetlib.data.proto.FieldTypeProtos.BoolField.getDefaultInstance(); - serviceprovider_ = eu.dnetlib.data.proto.FieldTypeProtos.BoolField.getDefaultInstance(); - databaseaccesstype_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - datauploadtype_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - databaseaccessrestriction_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - datauploadrestriction_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - versioning_ = eu.dnetlib.data.proto.FieldTypeProtos.BoolField.getDefaultInstance(); - citationguidelineurl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - qualitymanagementkind_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - pidsystems_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - certificates_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - policies_ = java.util.Collections.emptyList(); - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - if (hasDatasourcetype()) { - if (!getDatasourcetype().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasOpenairecompatibility()) { - if (!getOpenairecompatibility().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasOfficialname()) { - if (!getOfficialname().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasEnglishname()) { - if (!getEnglishname().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasWebsiteurl()) { - if (!getWebsiteurl().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasLogourl()) { - if (!getLogourl().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasContactemail()) { - if (!getContactemail().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasNamespaceprefix()) { - if (!getNamespaceprefix().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasLatitude()) { - if (!getLatitude().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasLongitude()) { - if (!getLongitude().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasDateofvalidation()) { - if (!getDateofvalidation().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasDescription()) { - if (!getDescription().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - for (int i = 0; i < getSubjectsCount(); i++) { - if (!getSubjects(i).isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasOdnumberofitems()) { - if (!getOdnumberofitems().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasOdnumberofitemsdate()) { - if (!getOdnumberofitemsdate().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasOdpolicies()) { - if (!getOdpolicies().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - for (int i = 0; i < getOdlanguagesCount(); i++) { - if (!getOdlanguages(i).isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - for (int i = 0; i < getOdcontenttypesCount(); i++) { - if (!getOdcontenttypes(i).isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - for (int i = 0; i < getAccessinfopackageCount(); i++) { - if (!getAccessinfopackage(i).isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasReleasestartdate()) { - if (!getReleasestartdate().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasReleaseenddate()) { - if (!getReleaseenddate().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasMissionstatementurl()) { - if (!getMissionstatementurl().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasDataprovider()) { - if (!getDataprovider().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasServiceprovider()) { - if (!getServiceprovider().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasDatabaseaccesstype()) { - if (!getDatabaseaccesstype().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasDatauploadtype()) { - if (!getDatauploadtype().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasDatabaseaccessrestriction()) { - if (!getDatabaseaccessrestriction().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasDatauploadrestriction()) { - if (!getDatauploadrestriction().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasVersioning()) { - if (!getVersioning().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasCitationguidelineurl()) { - if (!getCitationguidelineurl().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasQualitymanagementkind()) { - if (!getQualitymanagementkind().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasPidsystems()) { - if (!getPidsystems().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasCertificates()) { - if (!getCertificates().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - for (int i = 0; i < getPoliciesCount(); i++) { - if (!getPolicies(i).isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000004) == 0x00000004)) { - output.writeMessage(1, officialname_); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - output.writeMessage(2, englishname_); - } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - output.writeMessage(3, websiteurl_); - } - if (((bitField0_ & 0x00000020) == 0x00000020)) { - output.writeMessage(4, logourl_); - } - if (((bitField0_ & 0x00000040) == 0x00000040)) { - output.writeMessage(5, contactemail_); - } - for (int i = 0; i < accessinfopackage_.size(); i++) { - output.writeMessage(6, accessinfopackage_.get(i)); - } - if (((bitField0_ & 0x00000080) == 0x00000080)) { - output.writeMessage(7, namespaceprefix_); - } - if (((bitField0_ & 0x00001000) == 0x00001000)) { - output.writeMessage(9, odnumberofitems_); - } - if (((bitField0_ & 0x00002000) == 0x00002000)) { - output.writeMessage(10, odnumberofitemsdate_); - } - if (((bitField0_ & 0x00004000) == 0x00004000)) { - output.writeMessage(12, odpolicies_); - } - for (int i = 0; i < odlanguages_.size(); i++) { - output.writeMessage(13, odlanguages_.get(i)); - } - for (int i = 0; i < odcontenttypes_.size(); i++) { - output.writeMessage(14, odcontenttypes_.get(i)); - } - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeMessage(15, datasourcetype_); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - output.writeMessage(17, openairecompatibility_); - } - if (((bitField0_ & 0x00000100) == 0x00000100)) { - output.writeMessage(18, latitude_); - } - if (((bitField0_ & 0x00000200) == 0x00000200)) { - output.writeMessage(19, longitude_); - } - if (((bitField0_ & 0x00000400) == 0x00000400)) { - output.writeMessage(20, dateofvalidation_); - } - if (((bitField0_ & 0x00000800) == 0x00000800)) { - output.writeMessage(21, description_); - } - if (((bitField0_ & 0x00008000) == 0x00008000)) { - output.writeMessage(31, releasestartdate_); - } - if (((bitField0_ & 0x00010000) == 0x00010000)) { - output.writeMessage(32, releaseenddate_); - } - if (((bitField0_ & 0x00020000) == 0x00020000)) { - output.writeMessage(33, missionstatementurl_); - } - if (((bitField0_ & 0x00040000) == 0x00040000)) { - output.writeMessage(34, dataprovider_); - } - if (((bitField0_ & 0x00080000) == 0x00080000)) { - output.writeMessage(35, serviceprovider_); - } - if (((bitField0_ & 0x00100000) == 0x00100000)) { - output.writeMessage(36, databaseaccesstype_); - } - if (((bitField0_ & 0x00200000) == 0x00200000)) { - output.writeMessage(37, datauploadtype_); - } - if (((bitField0_ & 0x00400000) == 0x00400000)) { - output.writeMessage(38, databaseaccessrestriction_); - } - if (((bitField0_ & 0x00800000) == 0x00800000)) { - output.writeMessage(39, datauploadrestriction_); - } - if (((bitField0_ & 0x01000000) == 0x01000000)) { - output.writeMessage(40, versioning_); - } - if (((bitField0_ & 0x02000000) == 0x02000000)) { - output.writeMessage(41, citationguidelineurl_); - } - if (((bitField0_ & 0x04000000) == 0x04000000)) { - output.writeMessage(42, qualitymanagementkind_); - } - if (((bitField0_ & 0x08000000) == 0x08000000)) { - output.writeMessage(43, pidsystems_); - } - if (((bitField0_ & 0x10000000) == 0x10000000)) { - output.writeMessage(44, certificates_); - } - for (int i = 0; i < subjects_.size(); i++) { - output.writeMessage(45, subjects_.get(i)); - } - for (int i = 0; i < policies_.size(); i++) { - output.writeMessage(46, policies_.get(i)); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000004) == 0x00000004)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(1, officialname_); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(2, englishname_); - } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(3, websiteurl_); - } - if (((bitField0_ & 0x00000020) == 0x00000020)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(4, logourl_); - } - if (((bitField0_ & 0x00000040) == 0x00000040)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(5, contactemail_); - } - for (int i = 0; i < accessinfopackage_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(6, accessinfopackage_.get(i)); - } - if (((bitField0_ & 0x00000080) == 0x00000080)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(7, namespaceprefix_); - } - if (((bitField0_ & 0x00001000) == 0x00001000)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(9, odnumberofitems_); - } - if (((bitField0_ & 0x00002000) == 0x00002000)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(10, odnumberofitemsdate_); - } - if (((bitField0_ & 0x00004000) == 0x00004000)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(12, odpolicies_); - } - for (int i = 0; i < odlanguages_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(13, odlanguages_.get(i)); - } - for (int i = 0; i < odcontenttypes_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(14, odcontenttypes_.get(i)); - } - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(15, datasourcetype_); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(17, openairecompatibility_); - } - if (((bitField0_ & 0x00000100) == 0x00000100)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(18, latitude_); - } - if (((bitField0_ & 0x00000200) == 0x00000200)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(19, longitude_); - } - if (((bitField0_ & 0x00000400) == 0x00000400)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(20, dateofvalidation_); - } - if (((bitField0_ & 0x00000800) == 0x00000800)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(21, description_); - } - if (((bitField0_ & 0x00008000) == 0x00008000)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(31, releasestartdate_); - } - if (((bitField0_ & 0x00010000) == 0x00010000)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(32, releaseenddate_); - } - if (((bitField0_ & 0x00020000) == 0x00020000)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(33, missionstatementurl_); - } - if (((bitField0_ & 0x00040000) == 0x00040000)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(34, dataprovider_); - } - if (((bitField0_ & 0x00080000) == 0x00080000)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(35, serviceprovider_); - } - if (((bitField0_ & 0x00100000) == 0x00100000)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(36, databaseaccesstype_); - } - if (((bitField0_ & 0x00200000) == 0x00200000)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(37, datauploadtype_); - } - if (((bitField0_ & 0x00400000) == 0x00400000)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(38, databaseaccessrestriction_); - } - if (((bitField0_ & 0x00800000) == 0x00800000)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(39, datauploadrestriction_); - } - if (((bitField0_ & 0x01000000) == 0x01000000)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(40, versioning_); - } - if (((bitField0_ & 0x02000000) == 0x02000000)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(41, citationguidelineurl_); - } - if (((bitField0_ & 0x04000000) == 0x04000000)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(42, qualitymanagementkind_); - } - if (((bitField0_ & 0x08000000) == 0x08000000)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(43, pidsystems_); - } - if (((bitField0_ & 0x10000000) == 0x10000000)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(44, certificates_); - } - for (int i = 0; i < subjects_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(45, subjects_.get(i)); - } - for (int i = 0; i < policies_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(46, policies_.get(i)); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder - implements eu.dnetlib.data.proto.DatasourceProtos.Datasource.MetadataOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.DatasourceProtos.internal_static_eu_dnetlib_data_proto_Datasource_Metadata_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.DatasourceProtos.internal_static_eu_dnetlib_data_proto_Datasource_Metadata_fieldAccessorTable; - } - - // Construct using eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - getDatasourcetypeFieldBuilder(); - getOpenairecompatibilityFieldBuilder(); - getOfficialnameFieldBuilder(); - getEnglishnameFieldBuilder(); - getWebsiteurlFieldBuilder(); - getLogourlFieldBuilder(); - getContactemailFieldBuilder(); - getNamespaceprefixFieldBuilder(); - getLatitudeFieldBuilder(); - getLongitudeFieldBuilder(); - getDateofvalidationFieldBuilder(); - getDescriptionFieldBuilder(); - getSubjectsFieldBuilder(); - getOdnumberofitemsFieldBuilder(); - getOdnumberofitemsdateFieldBuilder(); - getOdpoliciesFieldBuilder(); - getOdlanguagesFieldBuilder(); - getOdcontenttypesFieldBuilder(); - getAccessinfopackageFieldBuilder(); - getReleasestartdateFieldBuilder(); - getReleaseenddateFieldBuilder(); - getMissionstatementurlFieldBuilder(); - getDataproviderFieldBuilder(); - getServiceproviderFieldBuilder(); - getDatabaseaccesstypeFieldBuilder(); - getDatauploadtypeFieldBuilder(); - getDatabaseaccessrestrictionFieldBuilder(); - getDatauploadrestrictionFieldBuilder(); - getVersioningFieldBuilder(); - getCitationguidelineurlFieldBuilder(); - getQualitymanagementkindFieldBuilder(); - getPidsystemsFieldBuilder(); - getCertificatesFieldBuilder(); - getPoliciesFieldBuilder(); - } - } - private static Builder create() { - return new Builder(); - } - - public Builder clear() { - super.clear(); - if (datasourcetypeBuilder_ == null) { - datasourcetype_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - } else { - datasourcetypeBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - if (openairecompatibilityBuilder_ == null) { - openairecompatibility_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - } else { - openairecompatibilityBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000002); - if (officialnameBuilder_ == null) { - officialname_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - officialnameBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000004); - if (englishnameBuilder_ == null) { - englishname_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - englishnameBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000008); - if (websiteurlBuilder_ == null) { - websiteurl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - websiteurlBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000010); - if (logourlBuilder_ == null) { - logourl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - logourlBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000020); - if (contactemailBuilder_ == null) { - contactemail_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - contactemailBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000040); - if (namespaceprefixBuilder_ == null) { - namespaceprefix_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - namespaceprefixBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000080); - if (latitudeBuilder_ == null) { - latitude_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - latitudeBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000100); - if (longitudeBuilder_ == null) { - longitude_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - longitudeBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000200); - if (dateofvalidationBuilder_ == null) { - dateofvalidation_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - dateofvalidationBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000400); - if (descriptionBuilder_ == null) { - description_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - descriptionBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000800); - if (subjectsBuilder_ == null) { - subjects_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00001000); - } else { - subjectsBuilder_.clear(); - } - if (odnumberofitemsBuilder_ == null) { - odnumberofitems_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - odnumberofitemsBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00002000); - if (odnumberofitemsdateBuilder_ == null) { - odnumberofitemsdate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - odnumberofitemsdateBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00004000); - if (odpoliciesBuilder_ == null) { - odpolicies_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - odpoliciesBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00008000); - if (odlanguagesBuilder_ == null) { - odlanguages_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00010000); - } else { - odlanguagesBuilder_.clear(); - } - if (odcontenttypesBuilder_ == null) { - odcontenttypes_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00020000); - } else { - odcontenttypesBuilder_.clear(); - } - if (accessinfopackageBuilder_ == null) { - accessinfopackage_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00040000); - } else { - accessinfopackageBuilder_.clear(); - } - if (releasestartdateBuilder_ == null) { - releasestartdate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - releasestartdateBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00080000); - if (releaseenddateBuilder_ == null) { - releaseenddate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - releaseenddateBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00100000); - if (missionstatementurlBuilder_ == null) { - missionstatementurl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - missionstatementurlBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00200000); - if (dataproviderBuilder_ == null) { - dataprovider_ = eu.dnetlib.data.proto.FieldTypeProtos.BoolField.getDefaultInstance(); - } else { - dataproviderBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00400000); - if (serviceproviderBuilder_ == null) { - serviceprovider_ = eu.dnetlib.data.proto.FieldTypeProtos.BoolField.getDefaultInstance(); - } else { - serviceproviderBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00800000); - if (databaseaccesstypeBuilder_ == null) { - databaseaccesstype_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - databaseaccesstypeBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x01000000); - if (datauploadtypeBuilder_ == null) { - datauploadtype_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - datauploadtypeBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x02000000); - if (databaseaccessrestrictionBuilder_ == null) { - databaseaccessrestriction_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - databaseaccessrestrictionBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x04000000); - if (datauploadrestrictionBuilder_ == null) { - datauploadrestriction_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - datauploadrestrictionBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x08000000); - if (versioningBuilder_ == null) { - versioning_ = eu.dnetlib.data.proto.FieldTypeProtos.BoolField.getDefaultInstance(); - } else { - versioningBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x10000000); - if (citationguidelineurlBuilder_ == null) { - citationguidelineurl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - citationguidelineurlBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x20000000); - if (qualitymanagementkindBuilder_ == null) { - qualitymanagementkind_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - qualitymanagementkindBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x40000000); - if (pidsystemsBuilder_ == null) { - pidsystems_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - pidsystemsBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x80000000); - if (certificatesBuilder_ == null) { - certificates_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - certificatesBuilder_.clear(); - } - bitField1_ = (bitField1_ & ~0x00000001); - if (policiesBuilder_ == null) { - policies_ = java.util.Collections.emptyList(); - bitField1_ = (bitField1_ & ~0x00000002); - } else { - policiesBuilder_.clear(); - } - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata.getDescriptor(); - } - - public eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata getDefaultInstanceForType() { - return eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata.getDefaultInstance(); - } - - public eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata build() { - eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - private eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return result; - } - - public eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata buildPartial() { - eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata result = new eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata(this); - int from_bitField0_ = bitField0_; - int from_bitField1_ = bitField1_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - if (datasourcetypeBuilder_ == null) { - result.datasourcetype_ = datasourcetype_; - } else { - result.datasourcetype_ = datasourcetypeBuilder_.build(); - } - if (((from_bitField0_ & 0x00000002) == 0x00000002)) { - to_bitField0_ |= 0x00000002; - } - if (openairecompatibilityBuilder_ == null) { - result.openairecompatibility_ = openairecompatibility_; - } else { - result.openairecompatibility_ = openairecompatibilityBuilder_.build(); - } - if (((from_bitField0_ & 0x00000004) == 0x00000004)) { - to_bitField0_ |= 0x00000004; - } - if (officialnameBuilder_ == null) { - result.officialname_ = officialname_; - } else { - result.officialname_ = officialnameBuilder_.build(); - } - if (((from_bitField0_ & 0x00000008) == 0x00000008)) { - to_bitField0_ |= 0x00000008; - } - if (englishnameBuilder_ == null) { - result.englishname_ = englishname_; - } else { - result.englishname_ = englishnameBuilder_.build(); - } - if (((from_bitField0_ & 0x00000010) == 0x00000010)) { - to_bitField0_ |= 0x00000010; - } - if (websiteurlBuilder_ == null) { - result.websiteurl_ = websiteurl_; - } else { - result.websiteurl_ = websiteurlBuilder_.build(); - } - if (((from_bitField0_ & 0x00000020) == 0x00000020)) { - to_bitField0_ |= 0x00000020; - } - if (logourlBuilder_ == null) { - result.logourl_ = logourl_; - } else { - result.logourl_ = logourlBuilder_.build(); - } - if (((from_bitField0_ & 0x00000040) == 0x00000040)) { - to_bitField0_ |= 0x00000040; - } - if (contactemailBuilder_ == null) { - result.contactemail_ = contactemail_; - } else { - result.contactemail_ = contactemailBuilder_.build(); - } - if (((from_bitField0_ & 0x00000080) == 0x00000080)) { - to_bitField0_ |= 0x00000080; - } - if (namespaceprefixBuilder_ == null) { - result.namespaceprefix_ = namespaceprefix_; - } else { - result.namespaceprefix_ = namespaceprefixBuilder_.build(); - } - if (((from_bitField0_ & 0x00000100) == 0x00000100)) { - to_bitField0_ |= 0x00000100; - } - if (latitudeBuilder_ == null) { - result.latitude_ = latitude_; - } else { - result.latitude_ = latitudeBuilder_.build(); - } - if (((from_bitField0_ & 0x00000200) == 0x00000200)) { - to_bitField0_ |= 0x00000200; - } - if (longitudeBuilder_ == null) { - result.longitude_ = longitude_; - } else { - result.longitude_ = longitudeBuilder_.build(); - } - if (((from_bitField0_ & 0x00000400) == 0x00000400)) { - to_bitField0_ |= 0x00000400; - } - if (dateofvalidationBuilder_ == null) { - result.dateofvalidation_ = dateofvalidation_; - } else { - result.dateofvalidation_ = dateofvalidationBuilder_.build(); - } - if (((from_bitField0_ & 0x00000800) == 0x00000800)) { - to_bitField0_ |= 0x00000800; - } - if (descriptionBuilder_ == null) { - result.description_ = description_; - } else { - result.description_ = descriptionBuilder_.build(); - } - if (subjectsBuilder_ == null) { - if (((bitField0_ & 0x00001000) == 0x00001000)) { - subjects_ = java.util.Collections.unmodifiableList(subjects_); - bitField0_ = (bitField0_ & ~0x00001000); - } - result.subjects_ = subjects_; - } else { - result.subjects_ = subjectsBuilder_.build(); - } - if (((from_bitField0_ & 0x00002000) == 0x00002000)) { - to_bitField0_ |= 0x00001000; - } - if (odnumberofitemsBuilder_ == null) { - result.odnumberofitems_ = odnumberofitems_; - } else { - result.odnumberofitems_ = odnumberofitemsBuilder_.build(); - } - if (((from_bitField0_ & 0x00004000) == 0x00004000)) { - to_bitField0_ |= 0x00002000; - } - if (odnumberofitemsdateBuilder_ == null) { - result.odnumberofitemsdate_ = odnumberofitemsdate_; - } else { - result.odnumberofitemsdate_ = odnumberofitemsdateBuilder_.build(); - } - if (((from_bitField0_ & 0x00008000) == 0x00008000)) { - to_bitField0_ |= 0x00004000; - } - if (odpoliciesBuilder_ == null) { - result.odpolicies_ = odpolicies_; - } else { - result.odpolicies_ = odpoliciesBuilder_.build(); - } - if (odlanguagesBuilder_ == null) { - if (((bitField0_ & 0x00010000) == 0x00010000)) { - odlanguages_ = java.util.Collections.unmodifiableList(odlanguages_); - bitField0_ = (bitField0_ & ~0x00010000); - } - result.odlanguages_ = odlanguages_; - } else { - result.odlanguages_ = odlanguagesBuilder_.build(); - } - if (odcontenttypesBuilder_ == null) { - if (((bitField0_ & 0x00020000) == 0x00020000)) { - odcontenttypes_ = java.util.Collections.unmodifiableList(odcontenttypes_); - bitField0_ = (bitField0_ & ~0x00020000); - } - result.odcontenttypes_ = odcontenttypes_; - } else { - result.odcontenttypes_ = odcontenttypesBuilder_.build(); - } - if (accessinfopackageBuilder_ == null) { - if (((bitField0_ & 0x00040000) == 0x00040000)) { - accessinfopackage_ = java.util.Collections.unmodifiableList(accessinfopackage_); - bitField0_ = (bitField0_ & ~0x00040000); - } - result.accessinfopackage_ = accessinfopackage_; - } else { - result.accessinfopackage_ = accessinfopackageBuilder_.build(); - } - if (((from_bitField0_ & 0x00080000) == 0x00080000)) { - to_bitField0_ |= 0x00008000; - } - if (releasestartdateBuilder_ == null) { - result.releasestartdate_ = releasestartdate_; - } else { - result.releasestartdate_ = releasestartdateBuilder_.build(); - } - if (((from_bitField0_ & 0x00100000) == 0x00100000)) { - to_bitField0_ |= 0x00010000; - } - if (releaseenddateBuilder_ == null) { - result.releaseenddate_ = releaseenddate_; - } else { - result.releaseenddate_ = releaseenddateBuilder_.build(); - } - if (((from_bitField0_ & 0x00200000) == 0x00200000)) { - to_bitField0_ |= 0x00020000; - } - if (missionstatementurlBuilder_ == null) { - result.missionstatementurl_ = missionstatementurl_; - } else { - result.missionstatementurl_ = missionstatementurlBuilder_.build(); - } - if (((from_bitField0_ & 0x00400000) == 0x00400000)) { - to_bitField0_ |= 0x00040000; - } - if (dataproviderBuilder_ == null) { - result.dataprovider_ = dataprovider_; - } else { - result.dataprovider_ = dataproviderBuilder_.build(); - } - if (((from_bitField0_ & 0x00800000) == 0x00800000)) { - to_bitField0_ |= 0x00080000; - } - if (serviceproviderBuilder_ == null) { - result.serviceprovider_ = serviceprovider_; - } else { - result.serviceprovider_ = serviceproviderBuilder_.build(); - } - if (((from_bitField0_ & 0x01000000) == 0x01000000)) { - to_bitField0_ |= 0x00100000; - } - if (databaseaccesstypeBuilder_ == null) { - result.databaseaccesstype_ = databaseaccesstype_; - } else { - result.databaseaccesstype_ = databaseaccesstypeBuilder_.build(); - } - if (((from_bitField0_ & 0x02000000) == 0x02000000)) { - to_bitField0_ |= 0x00200000; - } - if (datauploadtypeBuilder_ == null) { - result.datauploadtype_ = datauploadtype_; - } else { - result.datauploadtype_ = datauploadtypeBuilder_.build(); - } - if (((from_bitField0_ & 0x04000000) == 0x04000000)) { - to_bitField0_ |= 0x00400000; - } - if (databaseaccessrestrictionBuilder_ == null) { - result.databaseaccessrestriction_ = databaseaccessrestriction_; - } else { - result.databaseaccessrestriction_ = databaseaccessrestrictionBuilder_.build(); - } - if (((from_bitField0_ & 0x08000000) == 0x08000000)) { - to_bitField0_ |= 0x00800000; - } - if (datauploadrestrictionBuilder_ == null) { - result.datauploadrestriction_ = datauploadrestriction_; - } else { - result.datauploadrestriction_ = datauploadrestrictionBuilder_.build(); - } - if (((from_bitField0_ & 0x10000000) == 0x10000000)) { - to_bitField0_ |= 0x01000000; - } - if (versioningBuilder_ == null) { - result.versioning_ = versioning_; - } else { - result.versioning_ = versioningBuilder_.build(); - } - if (((from_bitField0_ & 0x20000000) == 0x20000000)) { - to_bitField0_ |= 0x02000000; - } - if (citationguidelineurlBuilder_ == null) { - result.citationguidelineurl_ = citationguidelineurl_; - } else { - result.citationguidelineurl_ = citationguidelineurlBuilder_.build(); - } - if (((from_bitField0_ & 0x40000000) == 0x40000000)) { - to_bitField0_ |= 0x04000000; - } - if (qualitymanagementkindBuilder_ == null) { - result.qualitymanagementkind_ = qualitymanagementkind_; - } else { - result.qualitymanagementkind_ = qualitymanagementkindBuilder_.build(); - } - if (((from_bitField0_ & 0x80000000) == 0x80000000)) { - to_bitField0_ |= 0x08000000; - } - if (pidsystemsBuilder_ == null) { - result.pidsystems_ = pidsystems_; - } else { - result.pidsystems_ = pidsystemsBuilder_.build(); - } - if (((from_bitField1_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x10000000; - } - if (certificatesBuilder_ == null) { - result.certificates_ = certificates_; - } else { - result.certificates_ = certificatesBuilder_.build(); - } - if (policiesBuilder_ == null) { - if (((bitField1_ & 0x00000002) == 0x00000002)) { - policies_ = java.util.Collections.unmodifiableList(policies_); - bitField1_ = (bitField1_ & ~0x00000002); - } - result.policies_ = policies_; - } else { - result.policies_ = policiesBuilder_.build(); - } - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata) { - return mergeFrom((eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata other) { - if (other == eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata.getDefaultInstance()) return this; - if (other.hasDatasourcetype()) { - mergeDatasourcetype(other.getDatasourcetype()); - } - if (other.hasOpenairecompatibility()) { - mergeOpenairecompatibility(other.getOpenairecompatibility()); - } - if (other.hasOfficialname()) { - mergeOfficialname(other.getOfficialname()); - } - if (other.hasEnglishname()) { - mergeEnglishname(other.getEnglishname()); - } - if (other.hasWebsiteurl()) { - mergeWebsiteurl(other.getWebsiteurl()); - } - if (other.hasLogourl()) { - mergeLogourl(other.getLogourl()); - } - if (other.hasContactemail()) { - mergeContactemail(other.getContactemail()); - } - if (other.hasNamespaceprefix()) { - mergeNamespaceprefix(other.getNamespaceprefix()); - } - if (other.hasLatitude()) { - mergeLatitude(other.getLatitude()); - } - if (other.hasLongitude()) { - mergeLongitude(other.getLongitude()); - } - if (other.hasDateofvalidation()) { - mergeDateofvalidation(other.getDateofvalidation()); - } - if (other.hasDescription()) { - mergeDescription(other.getDescription()); - } - if (subjectsBuilder_ == null) { - if (!other.subjects_.isEmpty()) { - if (subjects_.isEmpty()) { - subjects_ = other.subjects_; - bitField0_ = (bitField0_ & ~0x00001000); - } else { - ensureSubjectsIsMutable(); - subjects_.addAll(other.subjects_); - } - onChanged(); - } - } else { - if (!other.subjects_.isEmpty()) { - if (subjectsBuilder_.isEmpty()) { - subjectsBuilder_.dispose(); - subjectsBuilder_ = null; - subjects_ = other.subjects_; - bitField0_ = (bitField0_ & ~0x00001000); - subjectsBuilder_ = - com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? - getSubjectsFieldBuilder() : null; - } else { - subjectsBuilder_.addAllMessages(other.subjects_); - } - } - } - if (other.hasOdnumberofitems()) { - mergeOdnumberofitems(other.getOdnumberofitems()); - } - if (other.hasOdnumberofitemsdate()) { - mergeOdnumberofitemsdate(other.getOdnumberofitemsdate()); - } - if (other.hasOdpolicies()) { - mergeOdpolicies(other.getOdpolicies()); - } - if (odlanguagesBuilder_ == null) { - if (!other.odlanguages_.isEmpty()) { - if (odlanguages_.isEmpty()) { - odlanguages_ = other.odlanguages_; - bitField0_ = (bitField0_ & ~0x00010000); - } else { - ensureOdlanguagesIsMutable(); - odlanguages_.addAll(other.odlanguages_); - } - onChanged(); - } - } else { - if (!other.odlanguages_.isEmpty()) { - if (odlanguagesBuilder_.isEmpty()) { - odlanguagesBuilder_.dispose(); - odlanguagesBuilder_ = null; - odlanguages_ = other.odlanguages_; - bitField0_ = (bitField0_ & ~0x00010000); - odlanguagesBuilder_ = - com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? - getOdlanguagesFieldBuilder() : null; - } else { - odlanguagesBuilder_.addAllMessages(other.odlanguages_); - } - } - } - if (odcontenttypesBuilder_ == null) { - if (!other.odcontenttypes_.isEmpty()) { - if (odcontenttypes_.isEmpty()) { - odcontenttypes_ = other.odcontenttypes_; - bitField0_ = (bitField0_ & ~0x00020000); - } else { - ensureOdcontenttypesIsMutable(); - odcontenttypes_.addAll(other.odcontenttypes_); - } - onChanged(); - } - } else { - if (!other.odcontenttypes_.isEmpty()) { - if (odcontenttypesBuilder_.isEmpty()) { - odcontenttypesBuilder_.dispose(); - odcontenttypesBuilder_ = null; - odcontenttypes_ = other.odcontenttypes_; - bitField0_ = (bitField0_ & ~0x00020000); - odcontenttypesBuilder_ = - com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? - getOdcontenttypesFieldBuilder() : null; - } else { - odcontenttypesBuilder_.addAllMessages(other.odcontenttypes_); - } - } - } - if (accessinfopackageBuilder_ == null) { - if (!other.accessinfopackage_.isEmpty()) { - if (accessinfopackage_.isEmpty()) { - accessinfopackage_ = other.accessinfopackage_; - bitField0_ = (bitField0_ & ~0x00040000); - } else { - ensureAccessinfopackageIsMutable(); - accessinfopackage_.addAll(other.accessinfopackage_); - } - onChanged(); - } - } else { - if (!other.accessinfopackage_.isEmpty()) { - if (accessinfopackageBuilder_.isEmpty()) { - accessinfopackageBuilder_.dispose(); - accessinfopackageBuilder_ = null; - accessinfopackage_ = other.accessinfopackage_; - bitField0_ = (bitField0_ & ~0x00040000); - accessinfopackageBuilder_ = - com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? - getAccessinfopackageFieldBuilder() : null; - } else { - accessinfopackageBuilder_.addAllMessages(other.accessinfopackage_); - } - } - } - if (other.hasReleasestartdate()) { - mergeReleasestartdate(other.getReleasestartdate()); - } - if (other.hasReleaseenddate()) { - mergeReleaseenddate(other.getReleaseenddate()); - } - if (other.hasMissionstatementurl()) { - mergeMissionstatementurl(other.getMissionstatementurl()); - } - if (other.hasDataprovider()) { - mergeDataprovider(other.getDataprovider()); - } - if (other.hasServiceprovider()) { - mergeServiceprovider(other.getServiceprovider()); - } - if (other.hasDatabaseaccesstype()) { - mergeDatabaseaccesstype(other.getDatabaseaccesstype()); - } - if (other.hasDatauploadtype()) { - mergeDatauploadtype(other.getDatauploadtype()); - } - if (other.hasDatabaseaccessrestriction()) { - mergeDatabaseaccessrestriction(other.getDatabaseaccessrestriction()); - } - if (other.hasDatauploadrestriction()) { - mergeDatauploadrestriction(other.getDatauploadrestriction()); - } - if (other.hasVersioning()) { - mergeVersioning(other.getVersioning()); - } - if (other.hasCitationguidelineurl()) { - mergeCitationguidelineurl(other.getCitationguidelineurl()); - } - if (other.hasQualitymanagementkind()) { - mergeQualitymanagementkind(other.getQualitymanagementkind()); - } - if (other.hasPidsystems()) { - mergePidsystems(other.getPidsystems()); - } - if (other.hasCertificates()) { - mergeCertificates(other.getCertificates()); - } - if (policiesBuilder_ == null) { - if (!other.policies_.isEmpty()) { - if (policies_.isEmpty()) { - policies_ = other.policies_; - bitField1_ = (bitField1_ & ~0x00000002); - } else { - ensurePoliciesIsMutable(); - policies_.addAll(other.policies_); - } - onChanged(); - } - } else { - if (!other.policies_.isEmpty()) { - if (policiesBuilder_.isEmpty()) { - policiesBuilder_.dispose(); - policiesBuilder_ = null; - policies_ = other.policies_; - bitField1_ = (bitField1_ & ~0x00000002); - policiesBuilder_ = - com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? - getPoliciesFieldBuilder() : null; - } else { - policiesBuilder_.addAllMessages(other.policies_); - } - } - } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - - public final boolean isInitialized() { - if (hasDatasourcetype()) { - if (!getDatasourcetype().isInitialized()) { - - return false; - } - } - if (hasOpenairecompatibility()) { - if (!getOpenairecompatibility().isInitialized()) { - - return false; - } - } - if (hasOfficialname()) { - if (!getOfficialname().isInitialized()) { - - return false; - } - } - if (hasEnglishname()) { - if (!getEnglishname().isInitialized()) { - - return false; - } - } - if (hasWebsiteurl()) { - if (!getWebsiteurl().isInitialized()) { - - return false; - } - } - if (hasLogourl()) { - if (!getLogourl().isInitialized()) { - - return false; - } - } - if (hasContactemail()) { - if (!getContactemail().isInitialized()) { - - return false; - } - } - if (hasNamespaceprefix()) { - if (!getNamespaceprefix().isInitialized()) { - - return false; - } - } - if (hasLatitude()) { - if (!getLatitude().isInitialized()) { - - return false; - } - } - if (hasLongitude()) { - if (!getLongitude().isInitialized()) { - - return false; - } - } - if (hasDateofvalidation()) { - if (!getDateofvalidation().isInitialized()) { - - return false; - } - } - if (hasDescription()) { - if (!getDescription().isInitialized()) { - - return false; - } - } - for (int i = 0; i < getSubjectsCount(); i++) { - if (!getSubjects(i).isInitialized()) { - - return false; - } - } - if (hasOdnumberofitems()) { - if (!getOdnumberofitems().isInitialized()) { - - return false; - } - } - if (hasOdnumberofitemsdate()) { - if (!getOdnumberofitemsdate().isInitialized()) { - - return false; - } - } - if (hasOdpolicies()) { - if (!getOdpolicies().isInitialized()) { - - return false; - } - } - for (int i = 0; i < getOdlanguagesCount(); i++) { - if (!getOdlanguages(i).isInitialized()) { - - return false; - } - } - for (int i = 0; i < getOdcontenttypesCount(); i++) { - if (!getOdcontenttypes(i).isInitialized()) { - - return false; - } - } - for (int i = 0; i < getAccessinfopackageCount(); i++) { - if (!getAccessinfopackage(i).isInitialized()) { - - return false; - } - } - if (hasReleasestartdate()) { - if (!getReleasestartdate().isInitialized()) { - - return false; - } - } - if (hasReleaseenddate()) { - if (!getReleaseenddate().isInitialized()) { - - return false; - } - } - if (hasMissionstatementurl()) { - if (!getMissionstatementurl().isInitialized()) { - - return false; - } - } - if (hasDataprovider()) { - if (!getDataprovider().isInitialized()) { - - return false; - } - } - if (hasServiceprovider()) { - if (!getServiceprovider().isInitialized()) { - - return false; - } - } - if (hasDatabaseaccesstype()) { - if (!getDatabaseaccesstype().isInitialized()) { - - return false; - } - } - if (hasDatauploadtype()) { - if (!getDatauploadtype().isInitialized()) { - - return false; - } - } - if (hasDatabaseaccessrestriction()) { - if (!getDatabaseaccessrestriction().isInitialized()) { - - return false; - } - } - if (hasDatauploadrestriction()) { - if (!getDatauploadrestriction().isInitialized()) { - - return false; - } - } - if (hasVersioning()) { - if (!getVersioning().isInitialized()) { - - return false; - } - } - if (hasCitationguidelineurl()) { - if (!getCitationguidelineurl().isInitialized()) { - - return false; - } - } - if (hasQualitymanagementkind()) { - if (!getQualitymanagementkind().isInitialized()) { - - return false; - } - } - if (hasPidsystems()) { - if (!getPidsystems().isInitialized()) { - - return false; - } - } - if (hasCertificates()) { - if (!getCertificates().isInitialized()) { - - return false; - } - } - for (int i = 0; i < getPoliciesCount(); i++) { - if (!getPolicies(i).isInitialized()) { - - return false; - } - } - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - } - break; - } - case 10: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasOfficialname()) { - subBuilder.mergeFrom(getOfficialname()); - } - input.readMessage(subBuilder, extensionRegistry); - setOfficialname(subBuilder.buildPartial()); - break; - } - case 18: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasEnglishname()) { - subBuilder.mergeFrom(getEnglishname()); - } - input.readMessage(subBuilder, extensionRegistry); - setEnglishname(subBuilder.buildPartial()); - break; - } - case 26: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasWebsiteurl()) { - subBuilder.mergeFrom(getWebsiteurl()); - } - input.readMessage(subBuilder, extensionRegistry); - setWebsiteurl(subBuilder.buildPartial()); - break; - } - case 34: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasLogourl()) { - subBuilder.mergeFrom(getLogourl()); - } - input.readMessage(subBuilder, extensionRegistry); - setLogourl(subBuilder.buildPartial()); - break; - } - case 42: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasContactemail()) { - subBuilder.mergeFrom(getContactemail()); - } - input.readMessage(subBuilder, extensionRegistry); - setContactemail(subBuilder.buildPartial()); - break; - } - case 50: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - input.readMessage(subBuilder, extensionRegistry); - addAccessinfopackage(subBuilder.buildPartial()); - break; - } - case 58: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasNamespaceprefix()) { - subBuilder.mergeFrom(getNamespaceprefix()); - } - input.readMessage(subBuilder, extensionRegistry); - setNamespaceprefix(subBuilder.buildPartial()); - break; - } - case 74: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasOdnumberofitems()) { - subBuilder.mergeFrom(getOdnumberofitems()); - } - input.readMessage(subBuilder, extensionRegistry); - setOdnumberofitems(subBuilder.buildPartial()); - break; - } - case 82: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasOdnumberofitemsdate()) { - subBuilder.mergeFrom(getOdnumberofitemsdate()); - } - input.readMessage(subBuilder, extensionRegistry); - setOdnumberofitemsdate(subBuilder.buildPartial()); - break; - } - case 98: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasOdpolicies()) { - subBuilder.mergeFrom(getOdpolicies()); - } - input.readMessage(subBuilder, extensionRegistry); - setOdpolicies(subBuilder.buildPartial()); - break; - } - case 106: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - input.readMessage(subBuilder, extensionRegistry); - addOdlanguages(subBuilder.buildPartial()); - break; - } - case 114: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - input.readMessage(subBuilder, extensionRegistry); - addOdcontenttypes(subBuilder.buildPartial()); - break; - } - case 122: { - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(); - if (hasDatasourcetype()) { - subBuilder.mergeFrom(getDatasourcetype()); - } - input.readMessage(subBuilder, extensionRegistry); - setDatasourcetype(subBuilder.buildPartial()); - break; - } - case 138: { - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(); - if (hasOpenairecompatibility()) { - subBuilder.mergeFrom(getOpenairecompatibility()); - } - input.readMessage(subBuilder, extensionRegistry); - setOpenairecompatibility(subBuilder.buildPartial()); - break; - } - case 146: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasLatitude()) { - subBuilder.mergeFrom(getLatitude()); - } - input.readMessage(subBuilder, extensionRegistry); - setLatitude(subBuilder.buildPartial()); - break; - } - case 154: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasLongitude()) { - subBuilder.mergeFrom(getLongitude()); - } - input.readMessage(subBuilder, extensionRegistry); - setLongitude(subBuilder.buildPartial()); - break; - } - case 162: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasDateofvalidation()) { - subBuilder.mergeFrom(getDateofvalidation()); - } - input.readMessage(subBuilder, extensionRegistry); - setDateofvalidation(subBuilder.buildPartial()); - break; - } - case 170: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasDescription()) { - subBuilder.mergeFrom(getDescription()); - } - input.readMessage(subBuilder, extensionRegistry); - setDescription(subBuilder.buildPartial()); - break; - } - case 250: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasReleasestartdate()) { - subBuilder.mergeFrom(getReleasestartdate()); - } - input.readMessage(subBuilder, extensionRegistry); - setReleasestartdate(subBuilder.buildPartial()); - break; - } - case 258: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasReleaseenddate()) { - subBuilder.mergeFrom(getReleaseenddate()); - } - input.readMessage(subBuilder, extensionRegistry); - setReleaseenddate(subBuilder.buildPartial()); - break; - } - case 266: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasMissionstatementurl()) { - subBuilder.mergeFrom(getMissionstatementurl()); - } - input.readMessage(subBuilder, extensionRegistry); - setMissionstatementurl(subBuilder.buildPartial()); - break; - } - case 274: { - eu.dnetlib.data.proto.FieldTypeProtos.BoolField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.BoolField.newBuilder(); - if (hasDataprovider()) { - subBuilder.mergeFrom(getDataprovider()); - } - input.readMessage(subBuilder, extensionRegistry); - setDataprovider(subBuilder.buildPartial()); - break; - } - case 282: { - eu.dnetlib.data.proto.FieldTypeProtos.BoolField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.BoolField.newBuilder(); - if (hasServiceprovider()) { - subBuilder.mergeFrom(getServiceprovider()); - } - input.readMessage(subBuilder, extensionRegistry); - setServiceprovider(subBuilder.buildPartial()); - break; - } - case 290: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasDatabaseaccesstype()) { - subBuilder.mergeFrom(getDatabaseaccesstype()); - } - input.readMessage(subBuilder, extensionRegistry); - setDatabaseaccesstype(subBuilder.buildPartial()); - break; - } - case 298: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasDatauploadtype()) { - subBuilder.mergeFrom(getDatauploadtype()); - } - input.readMessage(subBuilder, extensionRegistry); - setDatauploadtype(subBuilder.buildPartial()); - break; - } - case 306: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasDatabaseaccessrestriction()) { - subBuilder.mergeFrom(getDatabaseaccessrestriction()); - } - input.readMessage(subBuilder, extensionRegistry); - setDatabaseaccessrestriction(subBuilder.buildPartial()); - break; - } - case 314: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasDatauploadrestriction()) { - subBuilder.mergeFrom(getDatauploadrestriction()); - } - input.readMessage(subBuilder, extensionRegistry); - setDatauploadrestriction(subBuilder.buildPartial()); - break; - } - case 322: { - eu.dnetlib.data.proto.FieldTypeProtos.BoolField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.BoolField.newBuilder(); - if (hasVersioning()) { - subBuilder.mergeFrom(getVersioning()); - } - input.readMessage(subBuilder, extensionRegistry); - setVersioning(subBuilder.buildPartial()); - break; - } - case 330: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasCitationguidelineurl()) { - subBuilder.mergeFrom(getCitationguidelineurl()); - } - input.readMessage(subBuilder, extensionRegistry); - setCitationguidelineurl(subBuilder.buildPartial()); - break; - } - case 338: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasQualitymanagementkind()) { - subBuilder.mergeFrom(getQualitymanagementkind()); - } - input.readMessage(subBuilder, extensionRegistry); - setQualitymanagementkind(subBuilder.buildPartial()); - break; - } - case 346: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasPidsystems()) { - subBuilder.mergeFrom(getPidsystems()); - } - input.readMessage(subBuilder, extensionRegistry); - setPidsystems(subBuilder.buildPartial()); - break; - } - case 354: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasCertificates()) { - subBuilder.mergeFrom(getCertificates()); - } - input.readMessage(subBuilder, extensionRegistry); - setCertificates(subBuilder.buildPartial()); - break; - } - case 362: { - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.newBuilder(); - input.readMessage(subBuilder, extensionRegistry); - addSubjects(subBuilder.buildPartial()); - break; - } - case 370: { - eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.newBuilder(); - input.readMessage(subBuilder, extensionRegistry); - addPolicies(subBuilder.buildPartial()); - break; - } - } - } - } - - private int bitField0_; - private int bitField1_; - - // optional .eu.dnetlib.data.proto.Qualifier datasourcetype = 15; - private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier datasourcetype_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> datasourcetypeBuilder_; - public boolean hasDatasourcetype() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getDatasourcetype() { - if (datasourcetypeBuilder_ == null) { - return datasourcetype_; - } else { - return datasourcetypeBuilder_.getMessage(); - } - } - public Builder setDatasourcetype(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { - if (datasourcetypeBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - datasourcetype_ = value; - onChanged(); - } else { - datasourcetypeBuilder_.setMessage(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder setDatasourcetype( - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder builderForValue) { - if (datasourcetypeBuilder_ == null) { - datasourcetype_ = builderForValue.build(); - onChanged(); - } else { - datasourcetypeBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder mergeDatasourcetype(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { - if (datasourcetypeBuilder_ == null) { - if (((bitField0_ & 0x00000001) == 0x00000001) && - datasourcetype_ != eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance()) { - datasourcetype_ = - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(datasourcetype_).mergeFrom(value).buildPartial(); - } else { - datasourcetype_ = value; - } - onChanged(); - } else { - datasourcetypeBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder clearDatasourcetype() { - if (datasourcetypeBuilder_ == null) { - datasourcetype_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - onChanged(); - } else { - datasourcetypeBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder getDatasourcetypeBuilder() { - bitField0_ |= 0x00000001; - onChanged(); - return getDatasourcetypeFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getDatasourcetypeOrBuilder() { - if (datasourcetypeBuilder_ != null) { - return datasourcetypeBuilder_.getMessageOrBuilder(); - } else { - return datasourcetype_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> - getDatasourcetypeFieldBuilder() { - if (datasourcetypeBuilder_ == null) { - datasourcetypeBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder>( - datasourcetype_, - getParentForChildren(), - isClean()); - datasourcetype_ = null; - } - return datasourcetypeBuilder_; - } - - // optional .eu.dnetlib.data.proto.Qualifier openairecompatibility = 17; - private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier openairecompatibility_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> openairecompatibilityBuilder_; - public boolean hasOpenairecompatibility() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getOpenairecompatibility() { - if (openairecompatibilityBuilder_ == null) { - return openairecompatibility_; - } else { - return openairecompatibilityBuilder_.getMessage(); - } - } - public Builder setOpenairecompatibility(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { - if (openairecompatibilityBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - openairecompatibility_ = value; - onChanged(); - } else { - openairecompatibilityBuilder_.setMessage(value); - } - bitField0_ |= 0x00000002; - return this; - } - public Builder setOpenairecompatibility( - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder builderForValue) { - if (openairecompatibilityBuilder_ == null) { - openairecompatibility_ = builderForValue.build(); - onChanged(); - } else { - openairecompatibilityBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000002; - return this; - } - public Builder mergeOpenairecompatibility(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { - if (openairecompatibilityBuilder_ == null) { - if (((bitField0_ & 0x00000002) == 0x00000002) && - openairecompatibility_ != eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance()) { - openairecompatibility_ = - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(openairecompatibility_).mergeFrom(value).buildPartial(); - } else { - openairecompatibility_ = value; - } - onChanged(); - } else { - openairecompatibilityBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000002; - return this; - } - public Builder clearOpenairecompatibility() { - if (openairecompatibilityBuilder_ == null) { - openairecompatibility_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - onChanged(); - } else { - openairecompatibilityBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000002); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder getOpenairecompatibilityBuilder() { - bitField0_ |= 0x00000002; - onChanged(); - return getOpenairecompatibilityFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getOpenairecompatibilityOrBuilder() { - if (openairecompatibilityBuilder_ != null) { - return openairecompatibilityBuilder_.getMessageOrBuilder(); - } else { - return openairecompatibility_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> - getOpenairecompatibilityFieldBuilder() { - if (openairecompatibilityBuilder_ == null) { - openairecompatibilityBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder>( - openairecompatibility_, - getParentForChildren(), - isClean()); - openairecompatibility_ = null; - } - return openairecompatibilityBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField officialname = 1; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField officialname_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> officialnameBuilder_; - public boolean hasOfficialname() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getOfficialname() { - if (officialnameBuilder_ == null) { - return officialname_; - } else { - return officialnameBuilder_.getMessage(); - } - } - public Builder setOfficialname(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (officialnameBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - officialname_ = value; - onChanged(); - } else { - officialnameBuilder_.setMessage(value); - } - bitField0_ |= 0x00000004; - return this; - } - public Builder setOfficialname( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (officialnameBuilder_ == null) { - officialname_ = builderForValue.build(); - onChanged(); - } else { - officialnameBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000004; - return this; - } - public Builder mergeOfficialname(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (officialnameBuilder_ == null) { - if (((bitField0_ & 0x00000004) == 0x00000004) && - officialname_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - officialname_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(officialname_).mergeFrom(value).buildPartial(); - } else { - officialname_ = value; - } - onChanged(); - } else { - officialnameBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000004; - return this; - } - public Builder clearOfficialname() { - if (officialnameBuilder_ == null) { - officialname_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - officialnameBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000004); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getOfficialnameBuilder() { - bitField0_ |= 0x00000004; - onChanged(); - return getOfficialnameFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOfficialnameOrBuilder() { - if (officialnameBuilder_ != null) { - return officialnameBuilder_.getMessageOrBuilder(); - } else { - return officialname_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getOfficialnameFieldBuilder() { - if (officialnameBuilder_ == null) { - officialnameBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - officialname_, - getParentForChildren(), - isClean()); - officialname_ = null; - } - return officialnameBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField englishname = 2; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField englishname_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> englishnameBuilder_; - public boolean hasEnglishname() { - return ((bitField0_ & 0x00000008) == 0x00000008); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEnglishname() { - if (englishnameBuilder_ == null) { - return englishname_; - } else { - return englishnameBuilder_.getMessage(); - } - } - public Builder setEnglishname(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (englishnameBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - englishname_ = value; - onChanged(); - } else { - englishnameBuilder_.setMessage(value); - } - bitField0_ |= 0x00000008; - return this; - } - public Builder setEnglishname( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (englishnameBuilder_ == null) { - englishname_ = builderForValue.build(); - onChanged(); - } else { - englishnameBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000008; - return this; - } - public Builder mergeEnglishname(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (englishnameBuilder_ == null) { - if (((bitField0_ & 0x00000008) == 0x00000008) && - englishname_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - englishname_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(englishname_).mergeFrom(value).buildPartial(); - } else { - englishname_ = value; - } - onChanged(); - } else { - englishnameBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000008; - return this; - } - public Builder clearEnglishname() { - if (englishnameBuilder_ == null) { - englishname_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - englishnameBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000008); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getEnglishnameBuilder() { - bitField0_ |= 0x00000008; - onChanged(); - return getEnglishnameFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEnglishnameOrBuilder() { - if (englishnameBuilder_ != null) { - return englishnameBuilder_.getMessageOrBuilder(); - } else { - return englishname_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getEnglishnameFieldBuilder() { - if (englishnameBuilder_ == null) { - englishnameBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - englishname_, - getParentForChildren(), - isClean()); - englishname_ = null; - } - return englishnameBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField websiteurl = 3; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField websiteurl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> websiteurlBuilder_; - public boolean hasWebsiteurl() { - return ((bitField0_ & 0x00000010) == 0x00000010); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getWebsiteurl() { - if (websiteurlBuilder_ == null) { - return websiteurl_; - } else { - return websiteurlBuilder_.getMessage(); - } - } - public Builder setWebsiteurl(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (websiteurlBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - websiteurl_ = value; - onChanged(); - } else { - websiteurlBuilder_.setMessage(value); - } - bitField0_ |= 0x00000010; - return this; - } - public Builder setWebsiteurl( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (websiteurlBuilder_ == null) { - websiteurl_ = builderForValue.build(); - onChanged(); - } else { - websiteurlBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000010; - return this; - } - public Builder mergeWebsiteurl(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (websiteurlBuilder_ == null) { - if (((bitField0_ & 0x00000010) == 0x00000010) && - websiteurl_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - websiteurl_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(websiteurl_).mergeFrom(value).buildPartial(); - } else { - websiteurl_ = value; - } - onChanged(); - } else { - websiteurlBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000010; - return this; - } - public Builder clearWebsiteurl() { - if (websiteurlBuilder_ == null) { - websiteurl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - websiteurlBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000010); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getWebsiteurlBuilder() { - bitField0_ |= 0x00000010; - onChanged(); - return getWebsiteurlFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getWebsiteurlOrBuilder() { - if (websiteurlBuilder_ != null) { - return websiteurlBuilder_.getMessageOrBuilder(); - } else { - return websiteurl_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getWebsiteurlFieldBuilder() { - if (websiteurlBuilder_ == null) { - websiteurlBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - websiteurl_, - getParentForChildren(), - isClean()); - websiteurl_ = null; - } - return websiteurlBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField logourl = 4; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField logourl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> logourlBuilder_; - public boolean hasLogourl() { - return ((bitField0_ & 0x00000020) == 0x00000020); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getLogourl() { - if (logourlBuilder_ == null) { - return logourl_; - } else { - return logourlBuilder_.getMessage(); - } - } - public Builder setLogourl(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (logourlBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - logourl_ = value; - onChanged(); - } else { - logourlBuilder_.setMessage(value); - } - bitField0_ |= 0x00000020; - return this; - } - public Builder setLogourl( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (logourlBuilder_ == null) { - logourl_ = builderForValue.build(); - onChanged(); - } else { - logourlBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000020; - return this; - } - public Builder mergeLogourl(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (logourlBuilder_ == null) { - if (((bitField0_ & 0x00000020) == 0x00000020) && - logourl_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - logourl_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(logourl_).mergeFrom(value).buildPartial(); - } else { - logourl_ = value; - } - onChanged(); - } else { - logourlBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000020; - return this; - } - public Builder clearLogourl() { - if (logourlBuilder_ == null) { - logourl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - logourlBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000020); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getLogourlBuilder() { - bitField0_ |= 0x00000020; - onChanged(); - return getLogourlFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getLogourlOrBuilder() { - if (logourlBuilder_ != null) { - return logourlBuilder_.getMessageOrBuilder(); - } else { - return logourl_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getLogourlFieldBuilder() { - if (logourlBuilder_ == null) { - logourlBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - logourl_, - getParentForChildren(), - isClean()); - logourl_ = null; - } - return logourlBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField contactemail = 5; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField contactemail_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> contactemailBuilder_; - public boolean hasContactemail() { - return ((bitField0_ & 0x00000040) == 0x00000040); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getContactemail() { - if (contactemailBuilder_ == null) { - return contactemail_; - } else { - return contactemailBuilder_.getMessage(); - } - } - public Builder setContactemail(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (contactemailBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - contactemail_ = value; - onChanged(); - } else { - contactemailBuilder_.setMessage(value); - } - bitField0_ |= 0x00000040; - return this; - } - public Builder setContactemail( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (contactemailBuilder_ == null) { - contactemail_ = builderForValue.build(); - onChanged(); - } else { - contactemailBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000040; - return this; - } - public Builder mergeContactemail(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (contactemailBuilder_ == null) { - if (((bitField0_ & 0x00000040) == 0x00000040) && - contactemail_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - contactemail_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(contactemail_).mergeFrom(value).buildPartial(); - } else { - contactemail_ = value; - } - onChanged(); - } else { - contactemailBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000040; - return this; - } - public Builder clearContactemail() { - if (contactemailBuilder_ == null) { - contactemail_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - contactemailBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000040); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getContactemailBuilder() { - bitField0_ |= 0x00000040; - onChanged(); - return getContactemailFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getContactemailOrBuilder() { - if (contactemailBuilder_ != null) { - return contactemailBuilder_.getMessageOrBuilder(); - } else { - return contactemail_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getContactemailFieldBuilder() { - if (contactemailBuilder_ == null) { - contactemailBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - contactemail_, - getParentForChildren(), - isClean()); - contactemail_ = null; - } - return contactemailBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField namespaceprefix = 7; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField namespaceprefix_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> namespaceprefixBuilder_; - public boolean hasNamespaceprefix() { - return ((bitField0_ & 0x00000080) == 0x00000080); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getNamespaceprefix() { - if (namespaceprefixBuilder_ == null) { - return namespaceprefix_; - } else { - return namespaceprefixBuilder_.getMessage(); - } - } - public Builder setNamespaceprefix(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (namespaceprefixBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - namespaceprefix_ = value; - onChanged(); - } else { - namespaceprefixBuilder_.setMessage(value); - } - bitField0_ |= 0x00000080; - return this; - } - public Builder setNamespaceprefix( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (namespaceprefixBuilder_ == null) { - namespaceprefix_ = builderForValue.build(); - onChanged(); - } else { - namespaceprefixBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000080; - return this; - } - public Builder mergeNamespaceprefix(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (namespaceprefixBuilder_ == null) { - if (((bitField0_ & 0x00000080) == 0x00000080) && - namespaceprefix_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - namespaceprefix_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(namespaceprefix_).mergeFrom(value).buildPartial(); - } else { - namespaceprefix_ = value; - } - onChanged(); - } else { - namespaceprefixBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000080; - return this; - } - public Builder clearNamespaceprefix() { - if (namespaceprefixBuilder_ == null) { - namespaceprefix_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - namespaceprefixBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000080); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getNamespaceprefixBuilder() { - bitField0_ |= 0x00000080; - onChanged(); - return getNamespaceprefixFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getNamespaceprefixOrBuilder() { - if (namespaceprefixBuilder_ != null) { - return namespaceprefixBuilder_.getMessageOrBuilder(); - } else { - return namespaceprefix_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getNamespaceprefixFieldBuilder() { - if (namespaceprefixBuilder_ == null) { - namespaceprefixBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - namespaceprefix_, - getParentForChildren(), - isClean()); - namespaceprefix_ = null; - } - return namespaceprefixBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField latitude = 18; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField latitude_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> latitudeBuilder_; - public boolean hasLatitude() { - return ((bitField0_ & 0x00000100) == 0x00000100); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getLatitude() { - if (latitudeBuilder_ == null) { - return latitude_; - } else { - return latitudeBuilder_.getMessage(); - } - } - public Builder setLatitude(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (latitudeBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - latitude_ = value; - onChanged(); - } else { - latitudeBuilder_.setMessage(value); - } - bitField0_ |= 0x00000100; - return this; - } - public Builder setLatitude( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (latitudeBuilder_ == null) { - latitude_ = builderForValue.build(); - onChanged(); - } else { - latitudeBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000100; - return this; - } - public Builder mergeLatitude(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (latitudeBuilder_ == null) { - if (((bitField0_ & 0x00000100) == 0x00000100) && - latitude_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - latitude_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(latitude_).mergeFrom(value).buildPartial(); - } else { - latitude_ = value; - } - onChanged(); - } else { - latitudeBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000100; - return this; - } - public Builder clearLatitude() { - if (latitudeBuilder_ == null) { - latitude_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - latitudeBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000100); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getLatitudeBuilder() { - bitField0_ |= 0x00000100; - onChanged(); - return getLatitudeFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getLatitudeOrBuilder() { - if (latitudeBuilder_ != null) { - return latitudeBuilder_.getMessageOrBuilder(); - } else { - return latitude_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getLatitudeFieldBuilder() { - if (latitudeBuilder_ == null) { - latitudeBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - latitude_, - getParentForChildren(), - isClean()); - latitude_ = null; - } - return latitudeBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField longitude = 19; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField longitude_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> longitudeBuilder_; - public boolean hasLongitude() { - return ((bitField0_ & 0x00000200) == 0x00000200); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getLongitude() { - if (longitudeBuilder_ == null) { - return longitude_; - } else { - return longitudeBuilder_.getMessage(); - } - } - public Builder setLongitude(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (longitudeBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - longitude_ = value; - onChanged(); - } else { - longitudeBuilder_.setMessage(value); - } - bitField0_ |= 0x00000200; - return this; - } - public Builder setLongitude( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (longitudeBuilder_ == null) { - longitude_ = builderForValue.build(); - onChanged(); - } else { - longitudeBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000200; - return this; - } - public Builder mergeLongitude(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (longitudeBuilder_ == null) { - if (((bitField0_ & 0x00000200) == 0x00000200) && - longitude_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - longitude_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(longitude_).mergeFrom(value).buildPartial(); - } else { - longitude_ = value; - } - onChanged(); - } else { - longitudeBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000200; - return this; - } - public Builder clearLongitude() { - if (longitudeBuilder_ == null) { - longitude_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - longitudeBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000200); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getLongitudeBuilder() { - bitField0_ |= 0x00000200; - onChanged(); - return getLongitudeFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getLongitudeOrBuilder() { - if (longitudeBuilder_ != null) { - return longitudeBuilder_.getMessageOrBuilder(); - } else { - return longitude_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getLongitudeFieldBuilder() { - if (longitudeBuilder_ == null) { - longitudeBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - longitude_, - getParentForChildren(), - isClean()); - longitude_ = null; - } - return longitudeBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField dateofvalidation = 20; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField dateofvalidation_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> dateofvalidationBuilder_; - public boolean hasDateofvalidation() { - return ((bitField0_ & 0x00000400) == 0x00000400); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getDateofvalidation() { - if (dateofvalidationBuilder_ == null) { - return dateofvalidation_; - } else { - return dateofvalidationBuilder_.getMessage(); - } - } - public Builder setDateofvalidation(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (dateofvalidationBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - dateofvalidation_ = value; - onChanged(); - } else { - dateofvalidationBuilder_.setMessage(value); - } - bitField0_ |= 0x00000400; - return this; - } - public Builder setDateofvalidation( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (dateofvalidationBuilder_ == null) { - dateofvalidation_ = builderForValue.build(); - onChanged(); - } else { - dateofvalidationBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000400; - return this; - } - public Builder mergeDateofvalidation(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (dateofvalidationBuilder_ == null) { - if (((bitField0_ & 0x00000400) == 0x00000400) && - dateofvalidation_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - dateofvalidation_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(dateofvalidation_).mergeFrom(value).buildPartial(); - } else { - dateofvalidation_ = value; - } - onChanged(); - } else { - dateofvalidationBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000400; - return this; - } - public Builder clearDateofvalidation() { - if (dateofvalidationBuilder_ == null) { - dateofvalidation_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - dateofvalidationBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000400); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getDateofvalidationBuilder() { - bitField0_ |= 0x00000400; - onChanged(); - return getDateofvalidationFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDateofvalidationOrBuilder() { - if (dateofvalidationBuilder_ != null) { - return dateofvalidationBuilder_.getMessageOrBuilder(); - } else { - return dateofvalidation_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getDateofvalidationFieldBuilder() { - if (dateofvalidationBuilder_ == null) { - dateofvalidationBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - dateofvalidation_, - getParentForChildren(), - isClean()); - dateofvalidation_ = null; - } - return dateofvalidationBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField description = 21; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField description_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> descriptionBuilder_; - public boolean hasDescription() { - return ((bitField0_ & 0x00000800) == 0x00000800); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getDescription() { - if (descriptionBuilder_ == null) { - return description_; - } else { - return descriptionBuilder_.getMessage(); - } - } - public Builder setDescription(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (descriptionBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - description_ = value; - onChanged(); - } else { - descriptionBuilder_.setMessage(value); - } - bitField0_ |= 0x00000800; - return this; - } - public Builder setDescription( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (descriptionBuilder_ == null) { - description_ = builderForValue.build(); - onChanged(); - } else { - descriptionBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000800; - return this; - } - public Builder mergeDescription(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (descriptionBuilder_ == null) { - if (((bitField0_ & 0x00000800) == 0x00000800) && - description_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - description_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(description_).mergeFrom(value).buildPartial(); - } else { - description_ = value; - } - onChanged(); - } else { - descriptionBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000800; - return this; - } - public Builder clearDescription() { - if (descriptionBuilder_ == null) { - description_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - descriptionBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000800); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getDescriptionBuilder() { - bitField0_ |= 0x00000800; - onChanged(); - return getDescriptionFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDescriptionOrBuilder() { - if (descriptionBuilder_ != null) { - return descriptionBuilder_.getMessageOrBuilder(); - } else { - return description_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getDescriptionFieldBuilder() { - if (descriptionBuilder_ == null) { - descriptionBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - description_, - getParentForChildren(), - isClean()); - description_ = null; - } - return descriptionBuilder_; - } - - // repeated .eu.dnetlib.data.proto.StructuredProperty subjects = 45; - private java.util.List subjects_ = - java.util.Collections.emptyList(); - private void ensureSubjectsIsMutable() { - if (!((bitField0_ & 0x00001000) == 0x00001000)) { - subjects_ = new java.util.ArrayList(subjects_); - bitField0_ |= 0x00001000; - } - } - - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder> subjectsBuilder_; - - public java.util.List getSubjectsList() { - if (subjectsBuilder_ == null) { - return java.util.Collections.unmodifiableList(subjects_); - } else { - return subjectsBuilder_.getMessageList(); - } - } - public int getSubjectsCount() { - if (subjectsBuilder_ == null) { - return subjects_.size(); - } else { - return subjectsBuilder_.getCount(); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty getSubjects(int index) { - if (subjectsBuilder_ == null) { - return subjects_.get(index); - } else { - return subjectsBuilder_.getMessage(index); - } - } - public Builder setSubjects( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty value) { - if (subjectsBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureSubjectsIsMutable(); - subjects_.set(index, value); - onChanged(); - } else { - subjectsBuilder_.setMessage(index, value); - } - return this; - } - public Builder setSubjects( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder builderForValue) { - if (subjectsBuilder_ == null) { - ensureSubjectsIsMutable(); - subjects_.set(index, builderForValue.build()); - onChanged(); - } else { - subjectsBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - public Builder addSubjects(eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty value) { - if (subjectsBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureSubjectsIsMutable(); - subjects_.add(value); - onChanged(); - } else { - subjectsBuilder_.addMessage(value); - } - return this; - } - public Builder addSubjects( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty value) { - if (subjectsBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureSubjectsIsMutable(); - subjects_.add(index, value); - onChanged(); - } else { - subjectsBuilder_.addMessage(index, value); - } - return this; - } - public Builder addSubjects( - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder builderForValue) { - if (subjectsBuilder_ == null) { - ensureSubjectsIsMutable(); - subjects_.add(builderForValue.build()); - onChanged(); - } else { - subjectsBuilder_.addMessage(builderForValue.build()); - } - return this; - } - public Builder addSubjects( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder builderForValue) { - if (subjectsBuilder_ == null) { - ensureSubjectsIsMutable(); - subjects_.add(index, builderForValue.build()); - onChanged(); - } else { - subjectsBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - public Builder addAllSubjects( - java.lang.Iterable values) { - if (subjectsBuilder_ == null) { - ensureSubjectsIsMutable(); - super.addAll(values, subjects_); - onChanged(); - } else { - subjectsBuilder_.addAllMessages(values); - } - return this; - } - public Builder clearSubjects() { - if (subjectsBuilder_ == null) { - subjects_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00001000); - onChanged(); - } else { - subjectsBuilder_.clear(); - } - return this; - } - public Builder removeSubjects(int index) { - if (subjectsBuilder_ == null) { - ensureSubjectsIsMutable(); - subjects_.remove(index); - onChanged(); - } else { - subjectsBuilder_.remove(index); - } - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder getSubjectsBuilder( - int index) { - return getSubjectsFieldBuilder().getBuilder(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder getSubjectsOrBuilder( - int index) { - if (subjectsBuilder_ == null) { - return subjects_.get(index); } else { - return subjectsBuilder_.getMessageOrBuilder(index); - } - } - public java.util.List - getSubjectsOrBuilderList() { - if (subjectsBuilder_ != null) { - return subjectsBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(subjects_); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder addSubjectsBuilder() { - return getSubjectsFieldBuilder().addBuilder( - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.getDefaultInstance()); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder addSubjectsBuilder( - int index) { - return getSubjectsFieldBuilder().addBuilder( - index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.getDefaultInstance()); - } - public java.util.List - getSubjectsBuilderList() { - return getSubjectsFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder> - getSubjectsFieldBuilder() { - if (subjectsBuilder_ == null) { - subjectsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder>( - subjects_, - ((bitField0_ & 0x00001000) == 0x00001000), - getParentForChildren(), - isClean()); - subjects_ = null; - } - return subjectsBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField odnumberofitems = 9; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField odnumberofitems_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> odnumberofitemsBuilder_; - public boolean hasOdnumberofitems() { - return ((bitField0_ & 0x00002000) == 0x00002000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getOdnumberofitems() { - if (odnumberofitemsBuilder_ == null) { - return odnumberofitems_; - } else { - return odnumberofitemsBuilder_.getMessage(); - } - } - public Builder setOdnumberofitems(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (odnumberofitemsBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - odnumberofitems_ = value; - onChanged(); - } else { - odnumberofitemsBuilder_.setMessage(value); - } - bitField0_ |= 0x00002000; - return this; - } - public Builder setOdnumberofitems( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (odnumberofitemsBuilder_ == null) { - odnumberofitems_ = builderForValue.build(); - onChanged(); - } else { - odnumberofitemsBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00002000; - return this; - } - public Builder mergeOdnumberofitems(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (odnumberofitemsBuilder_ == null) { - if (((bitField0_ & 0x00002000) == 0x00002000) && - odnumberofitems_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - odnumberofitems_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(odnumberofitems_).mergeFrom(value).buildPartial(); - } else { - odnumberofitems_ = value; - } - onChanged(); - } else { - odnumberofitemsBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00002000; - return this; - } - public Builder clearOdnumberofitems() { - if (odnumberofitemsBuilder_ == null) { - odnumberofitems_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - odnumberofitemsBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00002000); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getOdnumberofitemsBuilder() { - bitField0_ |= 0x00002000; - onChanged(); - return getOdnumberofitemsFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOdnumberofitemsOrBuilder() { - if (odnumberofitemsBuilder_ != null) { - return odnumberofitemsBuilder_.getMessageOrBuilder(); - } else { - return odnumberofitems_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getOdnumberofitemsFieldBuilder() { - if (odnumberofitemsBuilder_ == null) { - odnumberofitemsBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - odnumberofitems_, - getParentForChildren(), - isClean()); - odnumberofitems_ = null; - } - return odnumberofitemsBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField odnumberofitemsdate = 10; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField odnumberofitemsdate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> odnumberofitemsdateBuilder_; - public boolean hasOdnumberofitemsdate() { - return ((bitField0_ & 0x00004000) == 0x00004000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getOdnumberofitemsdate() { - if (odnumberofitemsdateBuilder_ == null) { - return odnumberofitemsdate_; - } else { - return odnumberofitemsdateBuilder_.getMessage(); - } - } - public Builder setOdnumberofitemsdate(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (odnumberofitemsdateBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - odnumberofitemsdate_ = value; - onChanged(); - } else { - odnumberofitemsdateBuilder_.setMessage(value); - } - bitField0_ |= 0x00004000; - return this; - } - public Builder setOdnumberofitemsdate( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (odnumberofitemsdateBuilder_ == null) { - odnumberofitemsdate_ = builderForValue.build(); - onChanged(); - } else { - odnumberofitemsdateBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00004000; - return this; - } - public Builder mergeOdnumberofitemsdate(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (odnumberofitemsdateBuilder_ == null) { - if (((bitField0_ & 0x00004000) == 0x00004000) && - odnumberofitemsdate_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - odnumberofitemsdate_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(odnumberofitemsdate_).mergeFrom(value).buildPartial(); - } else { - odnumberofitemsdate_ = value; - } - onChanged(); - } else { - odnumberofitemsdateBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00004000; - return this; - } - public Builder clearOdnumberofitemsdate() { - if (odnumberofitemsdateBuilder_ == null) { - odnumberofitemsdate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - odnumberofitemsdateBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00004000); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getOdnumberofitemsdateBuilder() { - bitField0_ |= 0x00004000; - onChanged(); - return getOdnumberofitemsdateFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOdnumberofitemsdateOrBuilder() { - if (odnumberofitemsdateBuilder_ != null) { - return odnumberofitemsdateBuilder_.getMessageOrBuilder(); - } else { - return odnumberofitemsdate_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getOdnumberofitemsdateFieldBuilder() { - if (odnumberofitemsdateBuilder_ == null) { - odnumberofitemsdateBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - odnumberofitemsdate_, - getParentForChildren(), - isClean()); - odnumberofitemsdate_ = null; - } - return odnumberofitemsdateBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField odpolicies = 12; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField odpolicies_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> odpoliciesBuilder_; - public boolean hasOdpolicies() { - return ((bitField0_ & 0x00008000) == 0x00008000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getOdpolicies() { - if (odpoliciesBuilder_ == null) { - return odpolicies_; - } else { - return odpoliciesBuilder_.getMessage(); - } - } - public Builder setOdpolicies(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (odpoliciesBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - odpolicies_ = value; - onChanged(); - } else { - odpoliciesBuilder_.setMessage(value); - } - bitField0_ |= 0x00008000; - return this; - } - public Builder setOdpolicies( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (odpoliciesBuilder_ == null) { - odpolicies_ = builderForValue.build(); - onChanged(); - } else { - odpoliciesBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00008000; - return this; - } - public Builder mergeOdpolicies(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (odpoliciesBuilder_ == null) { - if (((bitField0_ & 0x00008000) == 0x00008000) && - odpolicies_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - odpolicies_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(odpolicies_).mergeFrom(value).buildPartial(); - } else { - odpolicies_ = value; - } - onChanged(); - } else { - odpoliciesBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00008000; - return this; - } - public Builder clearOdpolicies() { - if (odpoliciesBuilder_ == null) { - odpolicies_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - odpoliciesBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00008000); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getOdpoliciesBuilder() { - bitField0_ |= 0x00008000; - onChanged(); - return getOdpoliciesFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOdpoliciesOrBuilder() { - if (odpoliciesBuilder_ != null) { - return odpoliciesBuilder_.getMessageOrBuilder(); - } else { - return odpolicies_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getOdpoliciesFieldBuilder() { - if (odpoliciesBuilder_ == null) { - odpoliciesBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - odpolicies_, - getParentForChildren(), - isClean()); - odpolicies_ = null; - } - return odpoliciesBuilder_; - } - - // repeated .eu.dnetlib.data.proto.StringField odlanguages = 13; - private java.util.List odlanguages_ = - java.util.Collections.emptyList(); - private void ensureOdlanguagesIsMutable() { - if (!((bitField0_ & 0x00010000) == 0x00010000)) { - odlanguages_ = new java.util.ArrayList(odlanguages_); - bitField0_ |= 0x00010000; - } - } - - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> odlanguagesBuilder_; - - public java.util.List getOdlanguagesList() { - if (odlanguagesBuilder_ == null) { - return java.util.Collections.unmodifiableList(odlanguages_); - } else { - return odlanguagesBuilder_.getMessageList(); - } - } - public int getOdlanguagesCount() { - if (odlanguagesBuilder_ == null) { - return odlanguages_.size(); - } else { - return odlanguagesBuilder_.getCount(); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getOdlanguages(int index) { - if (odlanguagesBuilder_ == null) { - return odlanguages_.get(index); - } else { - return odlanguagesBuilder_.getMessage(index); - } - } - public Builder setOdlanguages( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (odlanguagesBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureOdlanguagesIsMutable(); - odlanguages_.set(index, value); - onChanged(); - } else { - odlanguagesBuilder_.setMessage(index, value); - } - return this; - } - public Builder setOdlanguages( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (odlanguagesBuilder_ == null) { - ensureOdlanguagesIsMutable(); - odlanguages_.set(index, builderForValue.build()); - onChanged(); - } else { - odlanguagesBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - public Builder addOdlanguages(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (odlanguagesBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureOdlanguagesIsMutable(); - odlanguages_.add(value); - onChanged(); - } else { - odlanguagesBuilder_.addMessage(value); - } - return this; - } - public Builder addOdlanguages( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (odlanguagesBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureOdlanguagesIsMutable(); - odlanguages_.add(index, value); - onChanged(); - } else { - odlanguagesBuilder_.addMessage(index, value); - } - return this; - } - public Builder addOdlanguages( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (odlanguagesBuilder_ == null) { - ensureOdlanguagesIsMutable(); - odlanguages_.add(builderForValue.build()); - onChanged(); - } else { - odlanguagesBuilder_.addMessage(builderForValue.build()); - } - return this; - } - public Builder addOdlanguages( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (odlanguagesBuilder_ == null) { - ensureOdlanguagesIsMutable(); - odlanguages_.add(index, builderForValue.build()); - onChanged(); - } else { - odlanguagesBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - public Builder addAllOdlanguages( - java.lang.Iterable values) { - if (odlanguagesBuilder_ == null) { - ensureOdlanguagesIsMutable(); - super.addAll(values, odlanguages_); - onChanged(); - } else { - odlanguagesBuilder_.addAllMessages(values); - } - return this; - } - public Builder clearOdlanguages() { - if (odlanguagesBuilder_ == null) { - odlanguages_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00010000); - onChanged(); - } else { - odlanguagesBuilder_.clear(); - } - return this; - } - public Builder removeOdlanguages(int index) { - if (odlanguagesBuilder_ == null) { - ensureOdlanguagesIsMutable(); - odlanguages_.remove(index); - onChanged(); - } else { - odlanguagesBuilder_.remove(index); - } - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getOdlanguagesBuilder( - int index) { - return getOdlanguagesFieldBuilder().getBuilder(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOdlanguagesOrBuilder( - int index) { - if (odlanguagesBuilder_ == null) { - return odlanguages_.get(index); } else { - return odlanguagesBuilder_.getMessageOrBuilder(index); - } - } - public java.util.List - getOdlanguagesOrBuilderList() { - if (odlanguagesBuilder_ != null) { - return odlanguagesBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(odlanguages_); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addOdlanguagesBuilder() { - return getOdlanguagesFieldBuilder().addBuilder( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addOdlanguagesBuilder( - int index) { - return getOdlanguagesFieldBuilder().addBuilder( - index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); - } - public java.util.List - getOdlanguagesBuilderList() { - return getOdlanguagesFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getOdlanguagesFieldBuilder() { - if (odlanguagesBuilder_ == null) { - odlanguagesBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - odlanguages_, - ((bitField0_ & 0x00010000) == 0x00010000), - getParentForChildren(), - isClean()); - odlanguages_ = null; - } - return odlanguagesBuilder_; - } - - // repeated .eu.dnetlib.data.proto.StringField odcontenttypes = 14; - private java.util.List odcontenttypes_ = - java.util.Collections.emptyList(); - private void ensureOdcontenttypesIsMutable() { - if (!((bitField0_ & 0x00020000) == 0x00020000)) { - odcontenttypes_ = new java.util.ArrayList(odcontenttypes_); - bitField0_ |= 0x00020000; - } - } - - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> odcontenttypesBuilder_; - - public java.util.List getOdcontenttypesList() { - if (odcontenttypesBuilder_ == null) { - return java.util.Collections.unmodifiableList(odcontenttypes_); - } else { - return odcontenttypesBuilder_.getMessageList(); - } - } - public int getOdcontenttypesCount() { - if (odcontenttypesBuilder_ == null) { - return odcontenttypes_.size(); - } else { - return odcontenttypesBuilder_.getCount(); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getOdcontenttypes(int index) { - if (odcontenttypesBuilder_ == null) { - return odcontenttypes_.get(index); - } else { - return odcontenttypesBuilder_.getMessage(index); - } - } - public Builder setOdcontenttypes( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (odcontenttypesBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureOdcontenttypesIsMutable(); - odcontenttypes_.set(index, value); - onChanged(); - } else { - odcontenttypesBuilder_.setMessage(index, value); - } - return this; - } - public Builder setOdcontenttypes( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (odcontenttypesBuilder_ == null) { - ensureOdcontenttypesIsMutable(); - odcontenttypes_.set(index, builderForValue.build()); - onChanged(); - } else { - odcontenttypesBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - public Builder addOdcontenttypes(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (odcontenttypesBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureOdcontenttypesIsMutable(); - odcontenttypes_.add(value); - onChanged(); - } else { - odcontenttypesBuilder_.addMessage(value); - } - return this; - } - public Builder addOdcontenttypes( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (odcontenttypesBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureOdcontenttypesIsMutable(); - odcontenttypes_.add(index, value); - onChanged(); - } else { - odcontenttypesBuilder_.addMessage(index, value); - } - return this; - } - public Builder addOdcontenttypes( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (odcontenttypesBuilder_ == null) { - ensureOdcontenttypesIsMutable(); - odcontenttypes_.add(builderForValue.build()); - onChanged(); - } else { - odcontenttypesBuilder_.addMessage(builderForValue.build()); - } - return this; - } - public Builder addOdcontenttypes( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (odcontenttypesBuilder_ == null) { - ensureOdcontenttypesIsMutable(); - odcontenttypes_.add(index, builderForValue.build()); - onChanged(); - } else { - odcontenttypesBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - public Builder addAllOdcontenttypes( - java.lang.Iterable values) { - if (odcontenttypesBuilder_ == null) { - ensureOdcontenttypesIsMutable(); - super.addAll(values, odcontenttypes_); - onChanged(); - } else { - odcontenttypesBuilder_.addAllMessages(values); - } - return this; - } - public Builder clearOdcontenttypes() { - if (odcontenttypesBuilder_ == null) { - odcontenttypes_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00020000); - onChanged(); - } else { - odcontenttypesBuilder_.clear(); - } - return this; - } - public Builder removeOdcontenttypes(int index) { - if (odcontenttypesBuilder_ == null) { - ensureOdcontenttypesIsMutable(); - odcontenttypes_.remove(index); - onChanged(); - } else { - odcontenttypesBuilder_.remove(index); - } - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getOdcontenttypesBuilder( - int index) { - return getOdcontenttypesFieldBuilder().getBuilder(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOdcontenttypesOrBuilder( - int index) { - if (odcontenttypesBuilder_ == null) { - return odcontenttypes_.get(index); } else { - return odcontenttypesBuilder_.getMessageOrBuilder(index); - } - } - public java.util.List - getOdcontenttypesOrBuilderList() { - if (odcontenttypesBuilder_ != null) { - return odcontenttypesBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(odcontenttypes_); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addOdcontenttypesBuilder() { - return getOdcontenttypesFieldBuilder().addBuilder( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addOdcontenttypesBuilder( - int index) { - return getOdcontenttypesFieldBuilder().addBuilder( - index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); - } - public java.util.List - getOdcontenttypesBuilderList() { - return getOdcontenttypesFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getOdcontenttypesFieldBuilder() { - if (odcontenttypesBuilder_ == null) { - odcontenttypesBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - odcontenttypes_, - ((bitField0_ & 0x00020000) == 0x00020000), - getParentForChildren(), - isClean()); - odcontenttypes_ = null; - } - return odcontenttypesBuilder_; - } - - // repeated .eu.dnetlib.data.proto.StringField accessinfopackage = 6; - private java.util.List accessinfopackage_ = - java.util.Collections.emptyList(); - private void ensureAccessinfopackageIsMutable() { - if (!((bitField0_ & 0x00040000) == 0x00040000)) { - accessinfopackage_ = new java.util.ArrayList(accessinfopackage_); - bitField0_ |= 0x00040000; - } - } - - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> accessinfopackageBuilder_; - - public java.util.List getAccessinfopackageList() { - if (accessinfopackageBuilder_ == null) { - return java.util.Collections.unmodifiableList(accessinfopackage_); - } else { - return accessinfopackageBuilder_.getMessageList(); - } - } - public int getAccessinfopackageCount() { - if (accessinfopackageBuilder_ == null) { - return accessinfopackage_.size(); - } else { - return accessinfopackageBuilder_.getCount(); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getAccessinfopackage(int index) { - if (accessinfopackageBuilder_ == null) { - return accessinfopackage_.get(index); - } else { - return accessinfopackageBuilder_.getMessage(index); - } - } - public Builder setAccessinfopackage( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (accessinfopackageBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureAccessinfopackageIsMutable(); - accessinfopackage_.set(index, value); - onChanged(); - } else { - accessinfopackageBuilder_.setMessage(index, value); - } - return this; - } - public Builder setAccessinfopackage( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (accessinfopackageBuilder_ == null) { - ensureAccessinfopackageIsMutable(); - accessinfopackage_.set(index, builderForValue.build()); - onChanged(); - } else { - accessinfopackageBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - public Builder addAccessinfopackage(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (accessinfopackageBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureAccessinfopackageIsMutable(); - accessinfopackage_.add(value); - onChanged(); - } else { - accessinfopackageBuilder_.addMessage(value); - } - return this; - } - public Builder addAccessinfopackage( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (accessinfopackageBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureAccessinfopackageIsMutable(); - accessinfopackage_.add(index, value); - onChanged(); - } else { - accessinfopackageBuilder_.addMessage(index, value); - } - return this; - } - public Builder addAccessinfopackage( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (accessinfopackageBuilder_ == null) { - ensureAccessinfopackageIsMutable(); - accessinfopackage_.add(builderForValue.build()); - onChanged(); - } else { - accessinfopackageBuilder_.addMessage(builderForValue.build()); - } - return this; - } - public Builder addAccessinfopackage( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (accessinfopackageBuilder_ == null) { - ensureAccessinfopackageIsMutable(); - accessinfopackage_.add(index, builderForValue.build()); - onChanged(); - } else { - accessinfopackageBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - public Builder addAllAccessinfopackage( - java.lang.Iterable values) { - if (accessinfopackageBuilder_ == null) { - ensureAccessinfopackageIsMutable(); - super.addAll(values, accessinfopackage_); - onChanged(); - } else { - accessinfopackageBuilder_.addAllMessages(values); - } - return this; - } - public Builder clearAccessinfopackage() { - if (accessinfopackageBuilder_ == null) { - accessinfopackage_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00040000); - onChanged(); - } else { - accessinfopackageBuilder_.clear(); - } - return this; - } - public Builder removeAccessinfopackage(int index) { - if (accessinfopackageBuilder_ == null) { - ensureAccessinfopackageIsMutable(); - accessinfopackage_.remove(index); - onChanged(); - } else { - accessinfopackageBuilder_.remove(index); - } - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getAccessinfopackageBuilder( - int index) { - return getAccessinfopackageFieldBuilder().getBuilder(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getAccessinfopackageOrBuilder( - int index) { - if (accessinfopackageBuilder_ == null) { - return accessinfopackage_.get(index); } else { - return accessinfopackageBuilder_.getMessageOrBuilder(index); - } - } - public java.util.List - getAccessinfopackageOrBuilderList() { - if (accessinfopackageBuilder_ != null) { - return accessinfopackageBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(accessinfopackage_); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addAccessinfopackageBuilder() { - return getAccessinfopackageFieldBuilder().addBuilder( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addAccessinfopackageBuilder( - int index) { - return getAccessinfopackageFieldBuilder().addBuilder( - index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); - } - public java.util.List - getAccessinfopackageBuilderList() { - return getAccessinfopackageFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getAccessinfopackageFieldBuilder() { - if (accessinfopackageBuilder_ == null) { - accessinfopackageBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - accessinfopackage_, - ((bitField0_ & 0x00040000) == 0x00040000), - getParentForChildren(), - isClean()); - accessinfopackage_ = null; - } - return accessinfopackageBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField releasestartdate = 31; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField releasestartdate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> releasestartdateBuilder_; - public boolean hasReleasestartdate() { - return ((bitField0_ & 0x00080000) == 0x00080000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getReleasestartdate() { - if (releasestartdateBuilder_ == null) { - return releasestartdate_; - } else { - return releasestartdateBuilder_.getMessage(); - } - } - public Builder setReleasestartdate(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (releasestartdateBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - releasestartdate_ = value; - onChanged(); - } else { - releasestartdateBuilder_.setMessage(value); - } - bitField0_ |= 0x00080000; - return this; - } - public Builder setReleasestartdate( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (releasestartdateBuilder_ == null) { - releasestartdate_ = builderForValue.build(); - onChanged(); - } else { - releasestartdateBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00080000; - return this; - } - public Builder mergeReleasestartdate(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (releasestartdateBuilder_ == null) { - if (((bitField0_ & 0x00080000) == 0x00080000) && - releasestartdate_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - releasestartdate_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(releasestartdate_).mergeFrom(value).buildPartial(); - } else { - releasestartdate_ = value; - } - onChanged(); - } else { - releasestartdateBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00080000; - return this; - } - public Builder clearReleasestartdate() { - if (releasestartdateBuilder_ == null) { - releasestartdate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - releasestartdateBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00080000); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getReleasestartdateBuilder() { - bitField0_ |= 0x00080000; - onChanged(); - return getReleasestartdateFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getReleasestartdateOrBuilder() { - if (releasestartdateBuilder_ != null) { - return releasestartdateBuilder_.getMessageOrBuilder(); - } else { - return releasestartdate_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getReleasestartdateFieldBuilder() { - if (releasestartdateBuilder_ == null) { - releasestartdateBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - releasestartdate_, - getParentForChildren(), - isClean()); - releasestartdate_ = null; - } - return releasestartdateBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField releaseenddate = 32; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField releaseenddate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> releaseenddateBuilder_; - public boolean hasReleaseenddate() { - return ((bitField0_ & 0x00100000) == 0x00100000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getReleaseenddate() { - if (releaseenddateBuilder_ == null) { - return releaseenddate_; - } else { - return releaseenddateBuilder_.getMessage(); - } - } - public Builder setReleaseenddate(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (releaseenddateBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - releaseenddate_ = value; - onChanged(); - } else { - releaseenddateBuilder_.setMessage(value); - } - bitField0_ |= 0x00100000; - return this; - } - public Builder setReleaseenddate( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (releaseenddateBuilder_ == null) { - releaseenddate_ = builderForValue.build(); - onChanged(); - } else { - releaseenddateBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00100000; - return this; - } - public Builder mergeReleaseenddate(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (releaseenddateBuilder_ == null) { - if (((bitField0_ & 0x00100000) == 0x00100000) && - releaseenddate_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - releaseenddate_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(releaseenddate_).mergeFrom(value).buildPartial(); - } else { - releaseenddate_ = value; - } - onChanged(); - } else { - releaseenddateBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00100000; - return this; - } - public Builder clearReleaseenddate() { - if (releaseenddateBuilder_ == null) { - releaseenddate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - releaseenddateBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00100000); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getReleaseenddateBuilder() { - bitField0_ |= 0x00100000; - onChanged(); - return getReleaseenddateFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getReleaseenddateOrBuilder() { - if (releaseenddateBuilder_ != null) { - return releaseenddateBuilder_.getMessageOrBuilder(); - } else { - return releaseenddate_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getReleaseenddateFieldBuilder() { - if (releaseenddateBuilder_ == null) { - releaseenddateBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - releaseenddate_, - getParentForChildren(), - isClean()); - releaseenddate_ = null; - } - return releaseenddateBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField missionstatementurl = 33; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField missionstatementurl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> missionstatementurlBuilder_; - public boolean hasMissionstatementurl() { - return ((bitField0_ & 0x00200000) == 0x00200000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getMissionstatementurl() { - if (missionstatementurlBuilder_ == null) { - return missionstatementurl_; - } else { - return missionstatementurlBuilder_.getMessage(); - } - } - public Builder setMissionstatementurl(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (missionstatementurlBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - missionstatementurl_ = value; - onChanged(); - } else { - missionstatementurlBuilder_.setMessage(value); - } - bitField0_ |= 0x00200000; - return this; - } - public Builder setMissionstatementurl( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (missionstatementurlBuilder_ == null) { - missionstatementurl_ = builderForValue.build(); - onChanged(); - } else { - missionstatementurlBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00200000; - return this; - } - public Builder mergeMissionstatementurl(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (missionstatementurlBuilder_ == null) { - if (((bitField0_ & 0x00200000) == 0x00200000) && - missionstatementurl_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - missionstatementurl_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(missionstatementurl_).mergeFrom(value).buildPartial(); - } else { - missionstatementurl_ = value; - } - onChanged(); - } else { - missionstatementurlBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00200000; - return this; - } - public Builder clearMissionstatementurl() { - if (missionstatementurlBuilder_ == null) { - missionstatementurl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - missionstatementurlBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00200000); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getMissionstatementurlBuilder() { - bitField0_ |= 0x00200000; - onChanged(); - return getMissionstatementurlFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getMissionstatementurlOrBuilder() { - if (missionstatementurlBuilder_ != null) { - return missionstatementurlBuilder_.getMessageOrBuilder(); - } else { - return missionstatementurl_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getMissionstatementurlFieldBuilder() { - if (missionstatementurlBuilder_ == null) { - missionstatementurlBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - missionstatementurl_, - getParentForChildren(), - isClean()); - missionstatementurl_ = null; - } - return missionstatementurlBuilder_; - } - - // optional .eu.dnetlib.data.proto.BoolField dataprovider = 34; - private eu.dnetlib.data.proto.FieldTypeProtos.BoolField dataprovider_ = eu.dnetlib.data.proto.FieldTypeProtos.BoolField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.BoolField, eu.dnetlib.data.proto.FieldTypeProtos.BoolField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.BoolFieldOrBuilder> dataproviderBuilder_; - public boolean hasDataprovider() { - return ((bitField0_ & 0x00400000) == 0x00400000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.BoolField getDataprovider() { - if (dataproviderBuilder_ == null) { - return dataprovider_; - } else { - return dataproviderBuilder_.getMessage(); - } - } - public Builder setDataprovider(eu.dnetlib.data.proto.FieldTypeProtos.BoolField value) { - if (dataproviderBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - dataprovider_ = value; - onChanged(); - } else { - dataproviderBuilder_.setMessage(value); - } - bitField0_ |= 0x00400000; - return this; - } - public Builder setDataprovider( - eu.dnetlib.data.proto.FieldTypeProtos.BoolField.Builder builderForValue) { - if (dataproviderBuilder_ == null) { - dataprovider_ = builderForValue.build(); - onChanged(); - } else { - dataproviderBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00400000; - return this; - } - public Builder mergeDataprovider(eu.dnetlib.data.proto.FieldTypeProtos.BoolField value) { - if (dataproviderBuilder_ == null) { - if (((bitField0_ & 0x00400000) == 0x00400000) && - dataprovider_ != eu.dnetlib.data.proto.FieldTypeProtos.BoolField.getDefaultInstance()) { - dataprovider_ = - eu.dnetlib.data.proto.FieldTypeProtos.BoolField.newBuilder(dataprovider_).mergeFrom(value).buildPartial(); - } else { - dataprovider_ = value; - } - onChanged(); - } else { - dataproviderBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00400000; - return this; - } - public Builder clearDataprovider() { - if (dataproviderBuilder_ == null) { - dataprovider_ = eu.dnetlib.data.proto.FieldTypeProtos.BoolField.getDefaultInstance(); - onChanged(); - } else { - dataproviderBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00400000); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.BoolField.Builder getDataproviderBuilder() { - bitField0_ |= 0x00400000; - onChanged(); - return getDataproviderFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.BoolFieldOrBuilder getDataproviderOrBuilder() { - if (dataproviderBuilder_ != null) { - return dataproviderBuilder_.getMessageOrBuilder(); - } else { - return dataprovider_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.BoolField, eu.dnetlib.data.proto.FieldTypeProtos.BoolField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.BoolFieldOrBuilder> - getDataproviderFieldBuilder() { - if (dataproviderBuilder_ == null) { - dataproviderBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.BoolField, eu.dnetlib.data.proto.FieldTypeProtos.BoolField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.BoolFieldOrBuilder>( - dataprovider_, - getParentForChildren(), - isClean()); - dataprovider_ = null; - } - return dataproviderBuilder_; - } - - // optional .eu.dnetlib.data.proto.BoolField serviceprovider = 35; - private eu.dnetlib.data.proto.FieldTypeProtos.BoolField serviceprovider_ = eu.dnetlib.data.proto.FieldTypeProtos.BoolField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.BoolField, eu.dnetlib.data.proto.FieldTypeProtos.BoolField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.BoolFieldOrBuilder> serviceproviderBuilder_; - public boolean hasServiceprovider() { - return ((bitField0_ & 0x00800000) == 0x00800000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.BoolField getServiceprovider() { - if (serviceproviderBuilder_ == null) { - return serviceprovider_; - } else { - return serviceproviderBuilder_.getMessage(); - } - } - public Builder setServiceprovider(eu.dnetlib.data.proto.FieldTypeProtos.BoolField value) { - if (serviceproviderBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - serviceprovider_ = value; - onChanged(); - } else { - serviceproviderBuilder_.setMessage(value); - } - bitField0_ |= 0x00800000; - return this; - } - public Builder setServiceprovider( - eu.dnetlib.data.proto.FieldTypeProtos.BoolField.Builder builderForValue) { - if (serviceproviderBuilder_ == null) { - serviceprovider_ = builderForValue.build(); - onChanged(); - } else { - serviceproviderBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00800000; - return this; - } - public Builder mergeServiceprovider(eu.dnetlib.data.proto.FieldTypeProtos.BoolField value) { - if (serviceproviderBuilder_ == null) { - if (((bitField0_ & 0x00800000) == 0x00800000) && - serviceprovider_ != eu.dnetlib.data.proto.FieldTypeProtos.BoolField.getDefaultInstance()) { - serviceprovider_ = - eu.dnetlib.data.proto.FieldTypeProtos.BoolField.newBuilder(serviceprovider_).mergeFrom(value).buildPartial(); - } else { - serviceprovider_ = value; - } - onChanged(); - } else { - serviceproviderBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00800000; - return this; - } - public Builder clearServiceprovider() { - if (serviceproviderBuilder_ == null) { - serviceprovider_ = eu.dnetlib.data.proto.FieldTypeProtos.BoolField.getDefaultInstance(); - onChanged(); - } else { - serviceproviderBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00800000); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.BoolField.Builder getServiceproviderBuilder() { - bitField0_ |= 0x00800000; - onChanged(); - return getServiceproviderFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.BoolFieldOrBuilder getServiceproviderOrBuilder() { - if (serviceproviderBuilder_ != null) { - return serviceproviderBuilder_.getMessageOrBuilder(); - } else { - return serviceprovider_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.BoolField, eu.dnetlib.data.proto.FieldTypeProtos.BoolField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.BoolFieldOrBuilder> - getServiceproviderFieldBuilder() { - if (serviceproviderBuilder_ == null) { - serviceproviderBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.BoolField, eu.dnetlib.data.proto.FieldTypeProtos.BoolField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.BoolFieldOrBuilder>( - serviceprovider_, - getParentForChildren(), - isClean()); - serviceprovider_ = null; - } - return serviceproviderBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField databaseaccesstype = 36; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField databaseaccesstype_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> databaseaccesstypeBuilder_; - public boolean hasDatabaseaccesstype() { - return ((bitField0_ & 0x01000000) == 0x01000000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getDatabaseaccesstype() { - if (databaseaccesstypeBuilder_ == null) { - return databaseaccesstype_; - } else { - return databaseaccesstypeBuilder_.getMessage(); - } - } - public Builder setDatabaseaccesstype(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (databaseaccesstypeBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - databaseaccesstype_ = value; - onChanged(); - } else { - databaseaccesstypeBuilder_.setMessage(value); - } - bitField0_ |= 0x01000000; - return this; - } - public Builder setDatabaseaccesstype( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (databaseaccesstypeBuilder_ == null) { - databaseaccesstype_ = builderForValue.build(); - onChanged(); - } else { - databaseaccesstypeBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x01000000; - return this; - } - public Builder mergeDatabaseaccesstype(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (databaseaccesstypeBuilder_ == null) { - if (((bitField0_ & 0x01000000) == 0x01000000) && - databaseaccesstype_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - databaseaccesstype_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(databaseaccesstype_).mergeFrom(value).buildPartial(); - } else { - databaseaccesstype_ = value; - } - onChanged(); - } else { - databaseaccesstypeBuilder_.mergeFrom(value); - } - bitField0_ |= 0x01000000; - return this; - } - public Builder clearDatabaseaccesstype() { - if (databaseaccesstypeBuilder_ == null) { - databaseaccesstype_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - databaseaccesstypeBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x01000000); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getDatabaseaccesstypeBuilder() { - bitField0_ |= 0x01000000; - onChanged(); - return getDatabaseaccesstypeFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDatabaseaccesstypeOrBuilder() { - if (databaseaccesstypeBuilder_ != null) { - return databaseaccesstypeBuilder_.getMessageOrBuilder(); - } else { - return databaseaccesstype_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getDatabaseaccesstypeFieldBuilder() { - if (databaseaccesstypeBuilder_ == null) { - databaseaccesstypeBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - databaseaccesstype_, - getParentForChildren(), - isClean()); - databaseaccesstype_ = null; - } - return databaseaccesstypeBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField datauploadtype = 37; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField datauploadtype_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> datauploadtypeBuilder_; - public boolean hasDatauploadtype() { - return ((bitField0_ & 0x02000000) == 0x02000000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getDatauploadtype() { - if (datauploadtypeBuilder_ == null) { - return datauploadtype_; - } else { - return datauploadtypeBuilder_.getMessage(); - } - } - public Builder setDatauploadtype(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (datauploadtypeBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - datauploadtype_ = value; - onChanged(); - } else { - datauploadtypeBuilder_.setMessage(value); - } - bitField0_ |= 0x02000000; - return this; - } - public Builder setDatauploadtype( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (datauploadtypeBuilder_ == null) { - datauploadtype_ = builderForValue.build(); - onChanged(); - } else { - datauploadtypeBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x02000000; - return this; - } - public Builder mergeDatauploadtype(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (datauploadtypeBuilder_ == null) { - if (((bitField0_ & 0x02000000) == 0x02000000) && - datauploadtype_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - datauploadtype_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(datauploadtype_).mergeFrom(value).buildPartial(); - } else { - datauploadtype_ = value; - } - onChanged(); - } else { - datauploadtypeBuilder_.mergeFrom(value); - } - bitField0_ |= 0x02000000; - return this; - } - public Builder clearDatauploadtype() { - if (datauploadtypeBuilder_ == null) { - datauploadtype_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - datauploadtypeBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x02000000); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getDatauploadtypeBuilder() { - bitField0_ |= 0x02000000; - onChanged(); - return getDatauploadtypeFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDatauploadtypeOrBuilder() { - if (datauploadtypeBuilder_ != null) { - return datauploadtypeBuilder_.getMessageOrBuilder(); - } else { - return datauploadtype_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getDatauploadtypeFieldBuilder() { - if (datauploadtypeBuilder_ == null) { - datauploadtypeBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - datauploadtype_, - getParentForChildren(), - isClean()); - datauploadtype_ = null; - } - return datauploadtypeBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField databaseaccessrestriction = 38; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField databaseaccessrestriction_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> databaseaccessrestrictionBuilder_; - public boolean hasDatabaseaccessrestriction() { - return ((bitField0_ & 0x04000000) == 0x04000000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getDatabaseaccessrestriction() { - if (databaseaccessrestrictionBuilder_ == null) { - return databaseaccessrestriction_; - } else { - return databaseaccessrestrictionBuilder_.getMessage(); - } - } - public Builder setDatabaseaccessrestriction(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (databaseaccessrestrictionBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - databaseaccessrestriction_ = value; - onChanged(); - } else { - databaseaccessrestrictionBuilder_.setMessage(value); - } - bitField0_ |= 0x04000000; - return this; - } - public Builder setDatabaseaccessrestriction( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (databaseaccessrestrictionBuilder_ == null) { - databaseaccessrestriction_ = builderForValue.build(); - onChanged(); - } else { - databaseaccessrestrictionBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x04000000; - return this; - } - public Builder mergeDatabaseaccessrestriction(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (databaseaccessrestrictionBuilder_ == null) { - if (((bitField0_ & 0x04000000) == 0x04000000) && - databaseaccessrestriction_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - databaseaccessrestriction_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(databaseaccessrestriction_).mergeFrom(value).buildPartial(); - } else { - databaseaccessrestriction_ = value; - } - onChanged(); - } else { - databaseaccessrestrictionBuilder_.mergeFrom(value); - } - bitField0_ |= 0x04000000; - return this; - } - public Builder clearDatabaseaccessrestriction() { - if (databaseaccessrestrictionBuilder_ == null) { - databaseaccessrestriction_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - databaseaccessrestrictionBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x04000000); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getDatabaseaccessrestrictionBuilder() { - bitField0_ |= 0x04000000; - onChanged(); - return getDatabaseaccessrestrictionFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDatabaseaccessrestrictionOrBuilder() { - if (databaseaccessrestrictionBuilder_ != null) { - return databaseaccessrestrictionBuilder_.getMessageOrBuilder(); - } else { - return databaseaccessrestriction_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getDatabaseaccessrestrictionFieldBuilder() { - if (databaseaccessrestrictionBuilder_ == null) { - databaseaccessrestrictionBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - databaseaccessrestriction_, - getParentForChildren(), - isClean()); - databaseaccessrestriction_ = null; - } - return databaseaccessrestrictionBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField datauploadrestriction = 39; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField datauploadrestriction_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> datauploadrestrictionBuilder_; - public boolean hasDatauploadrestriction() { - return ((bitField0_ & 0x08000000) == 0x08000000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getDatauploadrestriction() { - if (datauploadrestrictionBuilder_ == null) { - return datauploadrestriction_; - } else { - return datauploadrestrictionBuilder_.getMessage(); - } - } - public Builder setDatauploadrestriction(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (datauploadrestrictionBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - datauploadrestriction_ = value; - onChanged(); - } else { - datauploadrestrictionBuilder_.setMessage(value); - } - bitField0_ |= 0x08000000; - return this; - } - public Builder setDatauploadrestriction( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (datauploadrestrictionBuilder_ == null) { - datauploadrestriction_ = builderForValue.build(); - onChanged(); - } else { - datauploadrestrictionBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x08000000; - return this; - } - public Builder mergeDatauploadrestriction(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (datauploadrestrictionBuilder_ == null) { - if (((bitField0_ & 0x08000000) == 0x08000000) && - datauploadrestriction_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - datauploadrestriction_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(datauploadrestriction_).mergeFrom(value).buildPartial(); - } else { - datauploadrestriction_ = value; - } - onChanged(); - } else { - datauploadrestrictionBuilder_.mergeFrom(value); - } - bitField0_ |= 0x08000000; - return this; - } - public Builder clearDatauploadrestriction() { - if (datauploadrestrictionBuilder_ == null) { - datauploadrestriction_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - datauploadrestrictionBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x08000000); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getDatauploadrestrictionBuilder() { - bitField0_ |= 0x08000000; - onChanged(); - return getDatauploadrestrictionFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDatauploadrestrictionOrBuilder() { - if (datauploadrestrictionBuilder_ != null) { - return datauploadrestrictionBuilder_.getMessageOrBuilder(); - } else { - return datauploadrestriction_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getDatauploadrestrictionFieldBuilder() { - if (datauploadrestrictionBuilder_ == null) { - datauploadrestrictionBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - datauploadrestriction_, - getParentForChildren(), - isClean()); - datauploadrestriction_ = null; - } - return datauploadrestrictionBuilder_; - } - - // optional .eu.dnetlib.data.proto.BoolField versioning = 40; - private eu.dnetlib.data.proto.FieldTypeProtos.BoolField versioning_ = eu.dnetlib.data.proto.FieldTypeProtos.BoolField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.BoolField, eu.dnetlib.data.proto.FieldTypeProtos.BoolField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.BoolFieldOrBuilder> versioningBuilder_; - public boolean hasVersioning() { - return ((bitField0_ & 0x10000000) == 0x10000000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.BoolField getVersioning() { - if (versioningBuilder_ == null) { - return versioning_; - } else { - return versioningBuilder_.getMessage(); - } - } - public Builder setVersioning(eu.dnetlib.data.proto.FieldTypeProtos.BoolField value) { - if (versioningBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - versioning_ = value; - onChanged(); - } else { - versioningBuilder_.setMessage(value); - } - bitField0_ |= 0x10000000; - return this; - } - public Builder setVersioning( - eu.dnetlib.data.proto.FieldTypeProtos.BoolField.Builder builderForValue) { - if (versioningBuilder_ == null) { - versioning_ = builderForValue.build(); - onChanged(); - } else { - versioningBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x10000000; - return this; - } - public Builder mergeVersioning(eu.dnetlib.data.proto.FieldTypeProtos.BoolField value) { - if (versioningBuilder_ == null) { - if (((bitField0_ & 0x10000000) == 0x10000000) && - versioning_ != eu.dnetlib.data.proto.FieldTypeProtos.BoolField.getDefaultInstance()) { - versioning_ = - eu.dnetlib.data.proto.FieldTypeProtos.BoolField.newBuilder(versioning_).mergeFrom(value).buildPartial(); - } else { - versioning_ = value; - } - onChanged(); - } else { - versioningBuilder_.mergeFrom(value); - } - bitField0_ |= 0x10000000; - return this; - } - public Builder clearVersioning() { - if (versioningBuilder_ == null) { - versioning_ = eu.dnetlib.data.proto.FieldTypeProtos.BoolField.getDefaultInstance(); - onChanged(); - } else { - versioningBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x10000000); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.BoolField.Builder getVersioningBuilder() { - bitField0_ |= 0x10000000; - onChanged(); - return getVersioningFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.BoolFieldOrBuilder getVersioningOrBuilder() { - if (versioningBuilder_ != null) { - return versioningBuilder_.getMessageOrBuilder(); - } else { - return versioning_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.BoolField, eu.dnetlib.data.proto.FieldTypeProtos.BoolField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.BoolFieldOrBuilder> - getVersioningFieldBuilder() { - if (versioningBuilder_ == null) { - versioningBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.BoolField, eu.dnetlib.data.proto.FieldTypeProtos.BoolField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.BoolFieldOrBuilder>( - versioning_, - getParentForChildren(), - isClean()); - versioning_ = null; - } - return versioningBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField citationguidelineurl = 41; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField citationguidelineurl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> citationguidelineurlBuilder_; - public boolean hasCitationguidelineurl() { - return ((bitField0_ & 0x20000000) == 0x20000000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getCitationguidelineurl() { - if (citationguidelineurlBuilder_ == null) { - return citationguidelineurl_; - } else { - return citationguidelineurlBuilder_.getMessage(); - } - } - public Builder setCitationguidelineurl(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (citationguidelineurlBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - citationguidelineurl_ = value; - onChanged(); - } else { - citationguidelineurlBuilder_.setMessage(value); - } - bitField0_ |= 0x20000000; - return this; - } - public Builder setCitationguidelineurl( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (citationguidelineurlBuilder_ == null) { - citationguidelineurl_ = builderForValue.build(); - onChanged(); - } else { - citationguidelineurlBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x20000000; - return this; - } - public Builder mergeCitationguidelineurl(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (citationguidelineurlBuilder_ == null) { - if (((bitField0_ & 0x20000000) == 0x20000000) && - citationguidelineurl_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - citationguidelineurl_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(citationguidelineurl_).mergeFrom(value).buildPartial(); - } else { - citationguidelineurl_ = value; - } - onChanged(); - } else { - citationguidelineurlBuilder_.mergeFrom(value); - } - bitField0_ |= 0x20000000; - return this; - } - public Builder clearCitationguidelineurl() { - if (citationguidelineurlBuilder_ == null) { - citationguidelineurl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - citationguidelineurlBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x20000000); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getCitationguidelineurlBuilder() { - bitField0_ |= 0x20000000; - onChanged(); - return getCitationguidelineurlFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getCitationguidelineurlOrBuilder() { - if (citationguidelineurlBuilder_ != null) { - return citationguidelineurlBuilder_.getMessageOrBuilder(); - } else { - return citationguidelineurl_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getCitationguidelineurlFieldBuilder() { - if (citationguidelineurlBuilder_ == null) { - citationguidelineurlBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - citationguidelineurl_, - getParentForChildren(), - isClean()); - citationguidelineurl_ = null; - } - return citationguidelineurlBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField qualitymanagementkind = 42; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField qualitymanagementkind_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> qualitymanagementkindBuilder_; - public boolean hasQualitymanagementkind() { - return ((bitField0_ & 0x40000000) == 0x40000000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getQualitymanagementkind() { - if (qualitymanagementkindBuilder_ == null) { - return qualitymanagementkind_; - } else { - return qualitymanagementkindBuilder_.getMessage(); - } - } - public Builder setQualitymanagementkind(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (qualitymanagementkindBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - qualitymanagementkind_ = value; - onChanged(); - } else { - qualitymanagementkindBuilder_.setMessage(value); - } - bitField0_ |= 0x40000000; - return this; - } - public Builder setQualitymanagementkind( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (qualitymanagementkindBuilder_ == null) { - qualitymanagementkind_ = builderForValue.build(); - onChanged(); - } else { - qualitymanagementkindBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x40000000; - return this; - } - public Builder mergeQualitymanagementkind(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (qualitymanagementkindBuilder_ == null) { - if (((bitField0_ & 0x40000000) == 0x40000000) && - qualitymanagementkind_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - qualitymanagementkind_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(qualitymanagementkind_).mergeFrom(value).buildPartial(); - } else { - qualitymanagementkind_ = value; - } - onChanged(); - } else { - qualitymanagementkindBuilder_.mergeFrom(value); - } - bitField0_ |= 0x40000000; - return this; - } - public Builder clearQualitymanagementkind() { - if (qualitymanagementkindBuilder_ == null) { - qualitymanagementkind_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - qualitymanagementkindBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x40000000); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getQualitymanagementkindBuilder() { - bitField0_ |= 0x40000000; - onChanged(); - return getQualitymanagementkindFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getQualitymanagementkindOrBuilder() { - if (qualitymanagementkindBuilder_ != null) { - return qualitymanagementkindBuilder_.getMessageOrBuilder(); - } else { - return qualitymanagementkind_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getQualitymanagementkindFieldBuilder() { - if (qualitymanagementkindBuilder_ == null) { - qualitymanagementkindBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - qualitymanagementkind_, - getParentForChildren(), - isClean()); - qualitymanagementkind_ = null; - } - return qualitymanagementkindBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField pidsystems = 43; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField pidsystems_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> pidsystemsBuilder_; - public boolean hasPidsystems() { - return ((bitField0_ & 0x80000000) == 0x80000000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getPidsystems() { - if (pidsystemsBuilder_ == null) { - return pidsystems_; - } else { - return pidsystemsBuilder_.getMessage(); - } - } - public Builder setPidsystems(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (pidsystemsBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - pidsystems_ = value; - onChanged(); - } else { - pidsystemsBuilder_.setMessage(value); - } - bitField0_ |= 0x80000000; - return this; - } - public Builder setPidsystems( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (pidsystemsBuilder_ == null) { - pidsystems_ = builderForValue.build(); - onChanged(); - } else { - pidsystemsBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x80000000; - return this; - } - public Builder mergePidsystems(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (pidsystemsBuilder_ == null) { - if (((bitField0_ & 0x80000000) == 0x80000000) && - pidsystems_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - pidsystems_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(pidsystems_).mergeFrom(value).buildPartial(); - } else { - pidsystems_ = value; - } - onChanged(); - } else { - pidsystemsBuilder_.mergeFrom(value); - } - bitField0_ |= 0x80000000; - return this; - } - public Builder clearPidsystems() { - if (pidsystemsBuilder_ == null) { - pidsystems_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - pidsystemsBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x80000000); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getPidsystemsBuilder() { - bitField0_ |= 0x80000000; - onChanged(); - return getPidsystemsFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getPidsystemsOrBuilder() { - if (pidsystemsBuilder_ != null) { - return pidsystemsBuilder_.getMessageOrBuilder(); - } else { - return pidsystems_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getPidsystemsFieldBuilder() { - if (pidsystemsBuilder_ == null) { - pidsystemsBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - pidsystems_, - getParentForChildren(), - isClean()); - pidsystems_ = null; - } - return pidsystemsBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField certificates = 44; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField certificates_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> certificatesBuilder_; - public boolean hasCertificates() { - return ((bitField1_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getCertificates() { - if (certificatesBuilder_ == null) { - return certificates_; - } else { - return certificatesBuilder_.getMessage(); - } - } - public Builder setCertificates(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (certificatesBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - certificates_ = value; - onChanged(); - } else { - certificatesBuilder_.setMessage(value); - } - bitField1_ |= 0x00000001; - return this; - } - public Builder setCertificates( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (certificatesBuilder_ == null) { - certificates_ = builderForValue.build(); - onChanged(); - } else { - certificatesBuilder_.setMessage(builderForValue.build()); - } - bitField1_ |= 0x00000001; - return this; - } - public Builder mergeCertificates(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (certificatesBuilder_ == null) { - if (((bitField1_ & 0x00000001) == 0x00000001) && - certificates_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - certificates_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(certificates_).mergeFrom(value).buildPartial(); - } else { - certificates_ = value; - } - onChanged(); - } else { - certificatesBuilder_.mergeFrom(value); - } - bitField1_ |= 0x00000001; - return this; - } - public Builder clearCertificates() { - if (certificatesBuilder_ == null) { - certificates_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - certificatesBuilder_.clear(); - } - bitField1_ = (bitField1_ & ~0x00000001); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getCertificatesBuilder() { - bitField1_ |= 0x00000001; - onChanged(); - return getCertificatesFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getCertificatesOrBuilder() { - if (certificatesBuilder_ != null) { - return certificatesBuilder_.getMessageOrBuilder(); - } else { - return certificates_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getCertificatesFieldBuilder() { - if (certificatesBuilder_ == null) { - certificatesBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - certificates_, - getParentForChildren(), - isClean()); - certificates_ = null; - } - return certificatesBuilder_; - } - - // repeated .eu.dnetlib.data.proto.KeyValue policies = 46; - private java.util.List policies_ = - java.util.Collections.emptyList(); - private void ensurePoliciesIsMutable() { - if (!((bitField1_ & 0x00000002) == 0x00000002)) { - policies_ = new java.util.ArrayList(policies_); - bitField1_ |= 0x00000002; - } - } - - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.KeyValue, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder, eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder> policiesBuilder_; - - public java.util.List getPoliciesList() { - if (policiesBuilder_ == null) { - return java.util.Collections.unmodifiableList(policies_); - } else { - return policiesBuilder_.getMessageList(); - } - } - public int getPoliciesCount() { - if (policiesBuilder_ == null) { - return policies_.size(); - } else { - return policiesBuilder_.getCount(); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue getPolicies(int index) { - if (policiesBuilder_ == null) { - return policies_.get(index); - } else { - return policiesBuilder_.getMessage(index); - } - } - public Builder setPolicies( - int index, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue value) { - if (policiesBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensurePoliciesIsMutable(); - policies_.set(index, value); - onChanged(); - } else { - policiesBuilder_.setMessage(index, value); - } - return this; - } - public Builder setPolicies( - int index, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder builderForValue) { - if (policiesBuilder_ == null) { - ensurePoliciesIsMutable(); - policies_.set(index, builderForValue.build()); - onChanged(); - } else { - policiesBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - public Builder addPolicies(eu.dnetlib.data.proto.FieldTypeProtos.KeyValue value) { - if (policiesBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensurePoliciesIsMutable(); - policies_.add(value); - onChanged(); - } else { - policiesBuilder_.addMessage(value); - } - return this; - } - public Builder addPolicies( - int index, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue value) { - if (policiesBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensurePoliciesIsMutable(); - policies_.add(index, value); - onChanged(); - } else { - policiesBuilder_.addMessage(index, value); - } - return this; - } - public Builder addPolicies( - eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder builderForValue) { - if (policiesBuilder_ == null) { - ensurePoliciesIsMutable(); - policies_.add(builderForValue.build()); - onChanged(); - } else { - policiesBuilder_.addMessage(builderForValue.build()); - } - return this; - } - public Builder addPolicies( - int index, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder builderForValue) { - if (policiesBuilder_ == null) { - ensurePoliciesIsMutable(); - policies_.add(index, builderForValue.build()); - onChanged(); - } else { - policiesBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - public Builder addAllPolicies( - java.lang.Iterable values) { - if (policiesBuilder_ == null) { - ensurePoliciesIsMutable(); - super.addAll(values, policies_); - onChanged(); - } else { - policiesBuilder_.addAllMessages(values); - } - return this; - } - public Builder clearPolicies() { - if (policiesBuilder_ == null) { - policies_ = java.util.Collections.emptyList(); - bitField1_ = (bitField1_ & ~0x00000002); - onChanged(); - } else { - policiesBuilder_.clear(); - } - return this; - } - public Builder removePolicies(int index) { - if (policiesBuilder_ == null) { - ensurePoliciesIsMutable(); - policies_.remove(index); - onChanged(); - } else { - policiesBuilder_.remove(index); - } - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder getPoliciesBuilder( - int index) { - return getPoliciesFieldBuilder().getBuilder(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder getPoliciesOrBuilder( - int index) { - if (policiesBuilder_ == null) { - return policies_.get(index); } else { - return policiesBuilder_.getMessageOrBuilder(index); - } - } - public java.util.List - getPoliciesOrBuilderList() { - if (policiesBuilder_ != null) { - return policiesBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(policies_); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder addPoliciesBuilder() { - return getPoliciesFieldBuilder().addBuilder( - eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.getDefaultInstance()); - } - public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder addPoliciesBuilder( - int index) { - return getPoliciesFieldBuilder().addBuilder( - index, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.getDefaultInstance()); - } - public java.util.List - getPoliciesBuilderList() { - return getPoliciesFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.KeyValue, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder, eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder> - getPoliciesFieldBuilder() { - if (policiesBuilder_ == null) { - policiesBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.KeyValue, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder, eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder>( - policies_, - ((bitField1_ & 0x00000002) == 0x00000002), - getParentForChildren(), - isClean()); - policies_ = null; - } - return policiesBuilder_; - } - - // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.Datasource.Metadata) - } - - static { - defaultInstance = new Metadata(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.Datasource.Metadata) - } - - private int bitField0_; - // optional .eu.dnetlib.data.proto.Datasource.Metadata metadata = 2; - public static final int METADATA_FIELD_NUMBER = 2; - private eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata metadata_; - public boolean hasMetadata() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata getMetadata() { - return metadata_; - } - public eu.dnetlib.data.proto.DatasourceProtos.Datasource.MetadataOrBuilder getMetadataOrBuilder() { - return metadata_; - } - - private void initFields() { - metadata_ = eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata.getDefaultInstance(); - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - if (hasMetadata()) { - if (!getMetadata().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeMessage(2, metadata_); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(2, metadata_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static eu.dnetlib.data.proto.DatasourceProtos.Datasource parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.DatasourceProtos.Datasource parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.DatasourceProtos.Datasource parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.DatasourceProtos.Datasource parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.DatasourceProtos.Datasource parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.DatasourceProtos.Datasource parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.DatasourceProtos.Datasource parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.DatasourceProtos.Datasource parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.DatasourceProtos.Datasource parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.DatasourceProtos.Datasource parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(eu.dnetlib.data.proto.DatasourceProtos.Datasource prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder - implements eu.dnetlib.data.proto.DatasourceProtos.DatasourceOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.DatasourceProtos.internal_static_eu_dnetlib_data_proto_Datasource_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.DatasourceProtos.internal_static_eu_dnetlib_data_proto_Datasource_fieldAccessorTable; - } - - // Construct using eu.dnetlib.data.proto.DatasourceProtos.Datasource.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - getMetadataFieldBuilder(); - } - } - private static Builder create() { - return new Builder(); - } - - public Builder clear() { - super.clear(); - if (metadataBuilder_ == null) { - metadata_ = eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata.getDefaultInstance(); - } else { - metadataBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return eu.dnetlib.data.proto.DatasourceProtos.Datasource.getDescriptor(); - } - - public eu.dnetlib.data.proto.DatasourceProtos.Datasource getDefaultInstanceForType() { - return eu.dnetlib.data.proto.DatasourceProtos.Datasource.getDefaultInstance(); - } - - public eu.dnetlib.data.proto.DatasourceProtos.Datasource build() { - eu.dnetlib.data.proto.DatasourceProtos.Datasource result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - private eu.dnetlib.data.proto.DatasourceProtos.Datasource buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - eu.dnetlib.data.proto.DatasourceProtos.Datasource result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return result; - } - - public eu.dnetlib.data.proto.DatasourceProtos.Datasource buildPartial() { - eu.dnetlib.data.proto.DatasourceProtos.Datasource result = new eu.dnetlib.data.proto.DatasourceProtos.Datasource(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - if (metadataBuilder_ == null) { - result.metadata_ = metadata_; - } else { - result.metadata_ = metadataBuilder_.build(); - } - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof eu.dnetlib.data.proto.DatasourceProtos.Datasource) { - return mergeFrom((eu.dnetlib.data.proto.DatasourceProtos.Datasource)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(eu.dnetlib.data.proto.DatasourceProtos.Datasource other) { - if (other == eu.dnetlib.data.proto.DatasourceProtos.Datasource.getDefaultInstance()) return this; - if (other.hasMetadata()) { - mergeMetadata(other.getMetadata()); - } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - - public final boolean isInitialized() { - if (hasMetadata()) { - if (!getMetadata().isInitialized()) { - - return false; - } - } - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - } - break; - } - case 18: { - eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata.Builder subBuilder = eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata.newBuilder(); - if (hasMetadata()) { - subBuilder.mergeFrom(getMetadata()); - } - input.readMessage(subBuilder, extensionRegistry); - setMetadata(subBuilder.buildPartial()); - break; - } - } - } - } - - private int bitField0_; - - // optional .eu.dnetlib.data.proto.Datasource.Metadata metadata = 2; - private eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata metadata_ = eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata, eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata.Builder, eu.dnetlib.data.proto.DatasourceProtos.Datasource.MetadataOrBuilder> metadataBuilder_; - public boolean hasMetadata() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata getMetadata() { - if (metadataBuilder_ == null) { - return metadata_; - } else { - return metadataBuilder_.getMessage(); - } - } - public Builder setMetadata(eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata value) { - if (metadataBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - metadata_ = value; - onChanged(); - } else { - metadataBuilder_.setMessage(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder setMetadata( - eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata.Builder builderForValue) { - if (metadataBuilder_ == null) { - metadata_ = builderForValue.build(); - onChanged(); - } else { - metadataBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder mergeMetadata(eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata value) { - if (metadataBuilder_ == null) { - if (((bitField0_ & 0x00000001) == 0x00000001) && - metadata_ != eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata.getDefaultInstance()) { - metadata_ = - eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata.newBuilder(metadata_).mergeFrom(value).buildPartial(); - } else { - metadata_ = value; - } - onChanged(); - } else { - metadataBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder clearMetadata() { - if (metadataBuilder_ == null) { - metadata_ = eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata.getDefaultInstance(); - onChanged(); - } else { - metadataBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - public eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata.Builder getMetadataBuilder() { - bitField0_ |= 0x00000001; - onChanged(); - return getMetadataFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.DatasourceProtos.Datasource.MetadataOrBuilder getMetadataOrBuilder() { - if (metadataBuilder_ != null) { - return metadataBuilder_.getMessageOrBuilder(); - } else { - return metadata_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata, eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata.Builder, eu.dnetlib.data.proto.DatasourceProtos.Datasource.MetadataOrBuilder> - getMetadataFieldBuilder() { - if (metadataBuilder_ == null) { - metadataBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata, eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata.Builder, eu.dnetlib.data.proto.DatasourceProtos.Datasource.MetadataOrBuilder>( - metadata_, - getParentForChildren(), - isClean()); - metadata_ = null; - } - return metadataBuilder_; - } - - // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.Datasource) - } - - static { - defaultInstance = new Datasource(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.Datasource) - } - - private static com.google.protobuf.Descriptors.Descriptor - internal_static_eu_dnetlib_data_proto_Datasource_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_eu_dnetlib_data_proto_Datasource_fieldAccessorTable; - private static com.google.protobuf.Descriptors.Descriptor - internal_static_eu_dnetlib_data_proto_Datasource_Metadata_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_eu_dnetlib_data_proto_Datasource_Metadata_fieldAccessorTable; - - public static com.google.protobuf.Descriptors.FileDescriptor - getDescriptor() { - return descriptor; - } - private static com.google.protobuf.Descriptors.FileDescriptor - descriptor; - static { - java.lang.String[] descriptorData = { - "\n\020Datasource.proto\022\025eu.dnetlib.data.prot" + - "o\032\017FieldType.proto\"\310\020\n\nDatasource\022<\n\010met" + - "adata\030\002 \001(\0132*.eu.dnetlib.data.proto.Data" + - "source.Metadata\032\373\017\n\010Metadata\0228\n\016datasour" + - "cetype\030\017 \001(\0132 .eu.dnetlib.data.proto.Qua" + - "lifier\022?\n\025openairecompatibility\030\021 \001(\0132 ." + - "eu.dnetlib.data.proto.Qualifier\0228\n\014offic" + - "ialname\030\001 \001(\0132\".eu.dnetlib.data.proto.St" + - "ringField\0227\n\013englishname\030\002 \001(\0132\".eu.dnet" + - "lib.data.proto.StringField\0226\n\nwebsiteurl", - "\030\003 \001(\0132\".eu.dnetlib.data.proto.StringFie" + - "ld\0223\n\007logourl\030\004 \001(\0132\".eu.dnetlib.data.pr" + - "oto.StringField\0228\n\014contactemail\030\005 \001(\0132\"." + - "eu.dnetlib.data.proto.StringField\022;\n\017nam" + - "espaceprefix\030\007 \001(\0132\".eu.dnetlib.data.pro" + - "to.StringField\0224\n\010latitude\030\022 \001(\0132\".eu.dn" + - "etlib.data.proto.StringField\0225\n\tlongitud" + - "e\030\023 \001(\0132\".eu.dnetlib.data.proto.StringFi" + - "eld\022<\n\020dateofvalidation\030\024 \001(\0132\".eu.dnetl" + - "ib.data.proto.StringField\0227\n\013description", - "\030\025 \001(\0132\".eu.dnetlib.data.proto.StringFie" + - "ld\022;\n\010subjects\030- \003(\0132).eu.dnetlib.data.p" + - "roto.StructuredProperty\022;\n\017odnumberofite" + - "ms\030\t \001(\0132\".eu.dnetlib.data.proto.StringF" + - "ield\022?\n\023odnumberofitemsdate\030\n \001(\0132\".eu.d" + - "netlib.data.proto.StringField\0226\n\nodpolic" + - "ies\030\014 \001(\0132\".eu.dnetlib.data.proto.String" + - "Field\0227\n\013odlanguages\030\r \003(\0132\".eu.dnetlib." + - "data.proto.StringField\022:\n\016odcontenttypes" + - "\030\016 \003(\0132\".eu.dnetlib.data.proto.StringFie", - "ld\022=\n\021accessinfopackage\030\006 \003(\0132\".eu.dnetl" + - "ib.data.proto.StringField\022<\n\020releasestar" + - "tdate\030\037 \001(\0132\".eu.dnetlib.data.proto.Stri" + - "ngField\022:\n\016releaseenddate\030 \001(\0132\".eu.dne" + - "tlib.data.proto.StringField\022?\n\023missionst" + - "atementurl\030! \001(\0132\".eu.dnetlib.data.proto" + - ".StringField\0226\n\014dataprovider\030\" \001(\0132 .eu." + - "dnetlib.data.proto.BoolField\0229\n\017servicep" + - "rovider\030# \001(\0132 .eu.dnetlib.data.proto.Bo" + - "olField\022>\n\022databaseaccesstype\030$ \001(\0132\".eu", - ".dnetlib.data.proto.StringField\022:\n\016datau" + - "ploadtype\030% \001(\0132\".eu.dnetlib.data.proto." + - "StringField\022E\n\031databaseaccessrestriction" + - "\030& \001(\0132\".eu.dnetlib.data.proto.StringFie" + - "ld\022A\n\025datauploadrestriction\030\' \001(\0132\".eu.d" + - "netlib.data.proto.StringField\0224\n\nversion" + - "ing\030( \001(\0132 .eu.dnetlib.data.proto.BoolFi" + - "eld\022@\n\024citationguidelineurl\030) \001(\0132\".eu.d" + - "netlib.data.proto.StringField\022A\n\025quality" + - "managementkind\030* \001(\0132\".eu.dnetlib.data.p", - "roto.StringField\0226\n\npidsystems\030+ \001(\0132\".e" + - "u.dnetlib.data.proto.StringField\0228\n\014cert" + - "ificates\030, \001(\0132\".eu.dnetlib.data.proto.S" + - "tringField\0221\n\010policies\030. \003(\0132\037.eu.dnetli" + - "b.data.proto.KeyValueB)\n\025eu.dnetlib.data" + - ".protoB\020DatasourceProtos" - }; - com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = - new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { - public com.google.protobuf.ExtensionRegistry assignDescriptors( - com.google.protobuf.Descriptors.FileDescriptor root) { - descriptor = root; - internal_static_eu_dnetlib_data_proto_Datasource_descriptor = - getDescriptor().getMessageTypes().get(0); - internal_static_eu_dnetlib_data_proto_Datasource_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_eu_dnetlib_data_proto_Datasource_descriptor, - new java.lang.String[] { "Metadata", }, - eu.dnetlib.data.proto.DatasourceProtos.Datasource.class, - eu.dnetlib.data.proto.DatasourceProtos.Datasource.Builder.class); - internal_static_eu_dnetlib_data_proto_Datasource_Metadata_descriptor = - internal_static_eu_dnetlib_data_proto_Datasource_descriptor.getNestedTypes().get(0); - internal_static_eu_dnetlib_data_proto_Datasource_Metadata_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_eu_dnetlib_data_proto_Datasource_Metadata_descriptor, - new java.lang.String[] { "Datasourcetype", "Openairecompatibility", "Officialname", "Englishname", "Websiteurl", "Logourl", "Contactemail", "Namespaceprefix", "Latitude", "Longitude", "Dateofvalidation", "Description", "Subjects", "Odnumberofitems", "Odnumberofitemsdate", "Odpolicies", "Odlanguages", "Odcontenttypes", "Accessinfopackage", "Releasestartdate", "Releaseenddate", "Missionstatementurl", "Dataprovider", "Serviceprovider", "Databaseaccesstype", "Datauploadtype", "Databaseaccessrestriction", "Datauploadrestriction", "Versioning", "Citationguidelineurl", "Qualitymanagementkind", "Pidsystems", "Certificates", "Policies", }, - eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata.class, - eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata.Builder.class); - return null; - } - }; - com.google.protobuf.Descriptors.FileDescriptor - .internalBuildGeneratedFileFrom(descriptorData, - new com.google.protobuf.Descriptors.FileDescriptor[] { - eu.dnetlib.data.proto.FieldTypeProtos.getDescriptor(), - }, assigner); - } - - // @@protoc_insertion_point(outer_class_scope) -} diff --git a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/DedupProtos.java b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/DedupProtos.java deleted file mode 100644 index 67eba7d15..000000000 --- a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/DedupProtos.java +++ /dev/null @@ -1,564 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: Dedup.proto - -package eu.dnetlib.data.proto; - -public final class DedupProtos { - private DedupProtos() {} - public static void registerAllExtensions( - com.google.protobuf.ExtensionRegistry registry) { - } - public interface DedupOrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; - boolean hasRelMetadata(); - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata(); - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder(); - } - public static final class Dedup extends - com.google.protobuf.GeneratedMessage - implements DedupOrBuilder { - // Use Dedup.newBuilder() to construct. - private Dedup(Builder builder) { - super(builder); - } - private Dedup(boolean noInit) {} - - private static final Dedup defaultInstance; - public static Dedup getDefaultInstance() { - return defaultInstance; - } - - public Dedup getDefaultInstanceForType() { - return defaultInstance; - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.DedupProtos.internal_static_eu_dnetlib_data_proto_Dedup_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.DedupProtos.internal_static_eu_dnetlib_data_proto_Dedup_fieldAccessorTable; - } - - public enum RelName - implements com.google.protobuf.ProtocolMessageEnum { - isMergedIn(0, 1), - merges(1, 2), - ; - - public static final int isMergedIn_VALUE = 1; - public static final int merges_VALUE = 2; - - - public final int getNumber() { return value; } - - public static RelName valueOf(int value) { - switch (value) { - case 1: return isMergedIn; - case 2: return merges; - default: return null; - } - } - - public static com.google.protobuf.Internal.EnumLiteMap - internalGetValueMap() { - return internalValueMap; - } - private static com.google.protobuf.Internal.EnumLiteMap - internalValueMap = - new com.google.protobuf.Internal.EnumLiteMap() { - public RelName findValueByNumber(int number) { - return RelName.valueOf(number); - } - }; - - public final com.google.protobuf.Descriptors.EnumValueDescriptor - getValueDescriptor() { - return getDescriptor().getValues().get(index); - } - public final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptorForType() { - return getDescriptor(); - } - public static final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptor() { - return eu.dnetlib.data.proto.DedupProtos.Dedup.getDescriptor().getEnumTypes().get(0); - } - - private static final RelName[] VALUES = { - isMergedIn, merges, - }; - - public static RelName valueOf( - com.google.protobuf.Descriptors.EnumValueDescriptor desc) { - if (desc.getType() != getDescriptor()) { - throw new java.lang.IllegalArgumentException( - "EnumValueDescriptor is not for this type."); - } - return VALUES[desc.getIndex()]; - } - - private final int index; - private final int value; - - private RelName(int index, int value) { - this.index = index; - this.value = value; - } - - // @@protoc_insertion_point(enum_scope:eu.dnetlib.data.proto.Dedup.RelName) - } - - private int bitField0_; - // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; - public static final int RELMETADATA_FIELD_NUMBER = 1; - private eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata relMetadata_; - public boolean hasRelMetadata() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata() { - return relMetadata_; - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder() { - return relMetadata_; - } - - private void initFields() { - relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - if (!hasRelMetadata()) { - memoizedIsInitialized = 0; - return false; - } - if (!getRelMetadata().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeMessage(1, relMetadata_); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(1, relMetadata_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static eu.dnetlib.data.proto.DedupProtos.Dedup parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.DedupProtos.Dedup parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.DedupProtos.Dedup parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.DedupProtos.Dedup parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.DedupProtos.Dedup parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.DedupProtos.Dedup parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.DedupProtos.Dedup parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.DedupProtos.Dedup parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.DedupProtos.Dedup parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.DedupProtos.Dedup parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(eu.dnetlib.data.proto.DedupProtos.Dedup prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder - implements eu.dnetlib.data.proto.DedupProtos.DedupOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.DedupProtos.internal_static_eu_dnetlib_data_proto_Dedup_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.DedupProtos.internal_static_eu_dnetlib_data_proto_Dedup_fieldAccessorTable; - } - - // Construct using eu.dnetlib.data.proto.DedupProtos.Dedup.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - getRelMetadataFieldBuilder(); - } - } - private static Builder create() { - return new Builder(); - } - - public Builder clear() { - super.clear(); - if (relMetadataBuilder_ == null) { - relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); - } else { - relMetadataBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return eu.dnetlib.data.proto.DedupProtos.Dedup.getDescriptor(); - } - - public eu.dnetlib.data.proto.DedupProtos.Dedup getDefaultInstanceForType() { - return eu.dnetlib.data.proto.DedupProtos.Dedup.getDefaultInstance(); - } - - public eu.dnetlib.data.proto.DedupProtos.Dedup build() { - eu.dnetlib.data.proto.DedupProtos.Dedup result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - private eu.dnetlib.data.proto.DedupProtos.Dedup buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - eu.dnetlib.data.proto.DedupProtos.Dedup result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return result; - } - - public eu.dnetlib.data.proto.DedupProtos.Dedup buildPartial() { - eu.dnetlib.data.proto.DedupProtos.Dedup result = new eu.dnetlib.data.proto.DedupProtos.Dedup(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - if (relMetadataBuilder_ == null) { - result.relMetadata_ = relMetadata_; - } else { - result.relMetadata_ = relMetadataBuilder_.build(); - } - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof eu.dnetlib.data.proto.DedupProtos.Dedup) { - return mergeFrom((eu.dnetlib.data.proto.DedupProtos.Dedup)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(eu.dnetlib.data.proto.DedupProtos.Dedup other) { - if (other == eu.dnetlib.data.proto.DedupProtos.Dedup.getDefaultInstance()) return this; - if (other.hasRelMetadata()) { - mergeRelMetadata(other.getRelMetadata()); - } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - - public final boolean isInitialized() { - if (!hasRelMetadata()) { - - return false; - } - if (!getRelMetadata().isInitialized()) { - - return false; - } - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - } - break; - } - case 10: { - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder subBuilder = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.newBuilder(); - if (hasRelMetadata()) { - subBuilder.mergeFrom(getRelMetadata()); - } - input.readMessage(subBuilder, extensionRegistry); - setRelMetadata(subBuilder.buildPartial()); - break; - } - } - } - } - - private int bitField0_; - - // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; - private eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder> relMetadataBuilder_; - public boolean hasRelMetadata() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata() { - if (relMetadataBuilder_ == null) { - return relMetadata_; - } else { - return relMetadataBuilder_.getMessage(); - } - } - public Builder setRelMetadata(eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata value) { - if (relMetadataBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - relMetadata_ = value; - onChanged(); - } else { - relMetadataBuilder_.setMessage(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder setRelMetadata( - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder builderForValue) { - if (relMetadataBuilder_ == null) { - relMetadata_ = builderForValue.build(); - onChanged(); - } else { - relMetadataBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder mergeRelMetadata(eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata value) { - if (relMetadataBuilder_ == null) { - if (((bitField0_ & 0x00000001) == 0x00000001) && - relMetadata_ != eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance()) { - relMetadata_ = - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.newBuilder(relMetadata_).mergeFrom(value).buildPartial(); - } else { - relMetadata_ = value; - } - onChanged(); - } else { - relMetadataBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder clearRelMetadata() { - if (relMetadataBuilder_ == null) { - relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); - onChanged(); - } else { - relMetadataBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder getRelMetadataBuilder() { - bitField0_ |= 0x00000001; - onChanged(); - return getRelMetadataFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder() { - if (relMetadataBuilder_ != null) { - return relMetadataBuilder_.getMessageOrBuilder(); - } else { - return relMetadata_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder> - getRelMetadataFieldBuilder() { - if (relMetadataBuilder_ == null) { - relMetadataBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder>( - relMetadata_, - getParentForChildren(), - isClean()); - relMetadata_ = null; - } - return relMetadataBuilder_; - } - - // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.Dedup) - } - - static { - defaultInstance = new Dedup(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.Dedup) - } - - private static com.google.protobuf.Descriptors.Descriptor - internal_static_eu_dnetlib_data_proto_Dedup_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_eu_dnetlib_data_proto_Dedup_fieldAccessorTable; - - public static com.google.protobuf.Descriptors.FileDescriptor - getDescriptor() { - return descriptor; - } - private static com.google.protobuf.Descriptors.FileDescriptor - descriptor; - static { - java.lang.String[] descriptorData = { - "\n\013Dedup.proto\022\025eu.dnetlib.data.proto\032\021Re" + - "lMetadata.proto\"g\n\005Dedup\0227\n\013relMetadata\030" + - "\001 \002(\0132\".eu.dnetlib.data.proto.RelMetadat" + - "a\"%\n\007RelName\022\016\n\nisMergedIn\020\001\022\n\n\006merges\020\002" + - "B$\n\025eu.dnetlib.data.protoB\013DedupProtos" - }; - com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = - new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { - public com.google.protobuf.ExtensionRegistry assignDescriptors( - com.google.protobuf.Descriptors.FileDescriptor root) { - descriptor = root; - internal_static_eu_dnetlib_data_proto_Dedup_descriptor = - getDescriptor().getMessageTypes().get(0); - internal_static_eu_dnetlib_data_proto_Dedup_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_eu_dnetlib_data_proto_Dedup_descriptor, - new java.lang.String[] { "RelMetadata", }, - eu.dnetlib.data.proto.DedupProtos.Dedup.class, - eu.dnetlib.data.proto.DedupProtos.Dedup.Builder.class); - return null; - } - }; - com.google.protobuf.Descriptors.FileDescriptor - .internalBuildGeneratedFileFrom(descriptorData, - new com.google.protobuf.Descriptors.FileDescriptor[] { - eu.dnetlib.data.proto.RelMetadataProtos.getDescriptor(), - }, assigner); - } - - // @@protoc_insertion_point(outer_class_scope) -} diff --git a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/DedupSimilarityProtos.java b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/DedupSimilarityProtos.java deleted file mode 100644 index ff080188f..000000000 --- a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/DedupSimilarityProtos.java +++ /dev/null @@ -1,562 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: DedupSimilarity.proto - -package eu.dnetlib.data.proto; - -public final class DedupSimilarityProtos { - private DedupSimilarityProtos() {} - public static void registerAllExtensions( - com.google.protobuf.ExtensionRegistry registry) { - } - public interface DedupSimilarityOrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; - boolean hasRelMetadata(); - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata(); - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder(); - } - public static final class DedupSimilarity extends - com.google.protobuf.GeneratedMessage - implements DedupSimilarityOrBuilder { - // Use DedupSimilarity.newBuilder() to construct. - private DedupSimilarity(Builder builder) { - super(builder); - } - private DedupSimilarity(boolean noInit) {} - - private static final DedupSimilarity defaultInstance; - public static DedupSimilarity getDefaultInstance() { - return defaultInstance; - } - - public DedupSimilarity getDefaultInstanceForType() { - return defaultInstance; - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.DedupSimilarityProtos.internal_static_eu_dnetlib_data_proto_DedupSimilarity_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.DedupSimilarityProtos.internal_static_eu_dnetlib_data_proto_DedupSimilarity_fieldAccessorTable; - } - - public enum RelName - implements com.google.protobuf.ProtocolMessageEnum { - isSimilarTo(0, 1), - ; - - public static final int isSimilarTo_VALUE = 1; - - - public final int getNumber() { return value; } - - public static RelName valueOf(int value) { - switch (value) { - case 1: return isSimilarTo; - default: return null; - } - } - - public static com.google.protobuf.Internal.EnumLiteMap - internalGetValueMap() { - return internalValueMap; - } - private static com.google.protobuf.Internal.EnumLiteMap - internalValueMap = - new com.google.protobuf.Internal.EnumLiteMap() { - public RelName findValueByNumber(int number) { - return RelName.valueOf(number); - } - }; - - public final com.google.protobuf.Descriptors.EnumValueDescriptor - getValueDescriptor() { - return getDescriptor().getValues().get(index); - } - public final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptorForType() { - return getDescriptor(); - } - public static final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptor() { - return eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.getDescriptor().getEnumTypes().get(0); - } - - private static final RelName[] VALUES = { - isSimilarTo, - }; - - public static RelName valueOf( - com.google.protobuf.Descriptors.EnumValueDescriptor desc) { - if (desc.getType() != getDescriptor()) { - throw new java.lang.IllegalArgumentException( - "EnumValueDescriptor is not for this type."); - } - return VALUES[desc.getIndex()]; - } - - private final int index; - private final int value; - - private RelName(int index, int value) { - this.index = index; - this.value = value; - } - - // @@protoc_insertion_point(enum_scope:eu.dnetlib.data.proto.DedupSimilarity.RelName) - } - - private int bitField0_; - // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; - public static final int RELMETADATA_FIELD_NUMBER = 1; - private eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata relMetadata_; - public boolean hasRelMetadata() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata() { - return relMetadata_; - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder() { - return relMetadata_; - } - - private void initFields() { - relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - if (!hasRelMetadata()) { - memoizedIsInitialized = 0; - return false; - } - if (!getRelMetadata().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeMessage(1, relMetadata_); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(1, relMetadata_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder - implements eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarityOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.DedupSimilarityProtos.internal_static_eu_dnetlib_data_proto_DedupSimilarity_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.DedupSimilarityProtos.internal_static_eu_dnetlib_data_proto_DedupSimilarity_fieldAccessorTable; - } - - // Construct using eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - getRelMetadataFieldBuilder(); - } - } - private static Builder create() { - return new Builder(); - } - - public Builder clear() { - super.clear(); - if (relMetadataBuilder_ == null) { - relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); - } else { - relMetadataBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.getDescriptor(); - } - - public eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity getDefaultInstanceForType() { - return eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.getDefaultInstance(); - } - - public eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity build() { - eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - private eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return result; - } - - public eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity buildPartial() { - eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity result = new eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - if (relMetadataBuilder_ == null) { - result.relMetadata_ = relMetadata_; - } else { - result.relMetadata_ = relMetadataBuilder_.build(); - } - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity) { - return mergeFrom((eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity other) { - if (other == eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.getDefaultInstance()) return this; - if (other.hasRelMetadata()) { - mergeRelMetadata(other.getRelMetadata()); - } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - - public final boolean isInitialized() { - if (!hasRelMetadata()) { - - return false; - } - if (!getRelMetadata().isInitialized()) { - - return false; - } - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - } - break; - } - case 10: { - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder subBuilder = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.newBuilder(); - if (hasRelMetadata()) { - subBuilder.mergeFrom(getRelMetadata()); - } - input.readMessage(subBuilder, extensionRegistry); - setRelMetadata(subBuilder.buildPartial()); - break; - } - } - } - } - - private int bitField0_; - - // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; - private eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder> relMetadataBuilder_; - public boolean hasRelMetadata() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata() { - if (relMetadataBuilder_ == null) { - return relMetadata_; - } else { - return relMetadataBuilder_.getMessage(); - } - } - public Builder setRelMetadata(eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata value) { - if (relMetadataBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - relMetadata_ = value; - onChanged(); - } else { - relMetadataBuilder_.setMessage(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder setRelMetadata( - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder builderForValue) { - if (relMetadataBuilder_ == null) { - relMetadata_ = builderForValue.build(); - onChanged(); - } else { - relMetadataBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder mergeRelMetadata(eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata value) { - if (relMetadataBuilder_ == null) { - if (((bitField0_ & 0x00000001) == 0x00000001) && - relMetadata_ != eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance()) { - relMetadata_ = - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.newBuilder(relMetadata_).mergeFrom(value).buildPartial(); - } else { - relMetadata_ = value; - } - onChanged(); - } else { - relMetadataBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder clearRelMetadata() { - if (relMetadataBuilder_ == null) { - relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); - onChanged(); - } else { - relMetadataBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder getRelMetadataBuilder() { - bitField0_ |= 0x00000001; - onChanged(); - return getRelMetadataFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder() { - if (relMetadataBuilder_ != null) { - return relMetadataBuilder_.getMessageOrBuilder(); - } else { - return relMetadata_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder> - getRelMetadataFieldBuilder() { - if (relMetadataBuilder_ == null) { - relMetadataBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder>( - relMetadata_, - getParentForChildren(), - isClean()); - relMetadata_ = null; - } - return relMetadataBuilder_; - } - - // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.DedupSimilarity) - } - - static { - defaultInstance = new DedupSimilarity(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.DedupSimilarity) - } - - private static com.google.protobuf.Descriptors.Descriptor - internal_static_eu_dnetlib_data_proto_DedupSimilarity_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_eu_dnetlib_data_proto_DedupSimilarity_fieldAccessorTable; - - public static com.google.protobuf.Descriptors.FileDescriptor - getDescriptor() { - return descriptor; - } - private static com.google.protobuf.Descriptors.FileDescriptor - descriptor; - static { - java.lang.String[] descriptorData = { - "\n\025DedupSimilarity.proto\022\025eu.dnetlib.data" + - ".proto\032\021RelMetadata.proto\"f\n\017DedupSimila" + - "rity\0227\n\013relMetadata\030\001 \002(\0132\".eu.dnetlib.d" + - "ata.proto.RelMetadata\"\032\n\007RelName\022\017\n\013isSi" + - "milarTo\020\001B.\n\025eu.dnetlib.data.protoB\025Dedu" + - "pSimilarityProtos" - }; - com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = - new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { - public com.google.protobuf.ExtensionRegistry assignDescriptors( - com.google.protobuf.Descriptors.FileDescriptor root) { - descriptor = root; - internal_static_eu_dnetlib_data_proto_DedupSimilarity_descriptor = - getDescriptor().getMessageTypes().get(0); - internal_static_eu_dnetlib_data_proto_DedupSimilarity_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_eu_dnetlib_data_proto_DedupSimilarity_descriptor, - new java.lang.String[] { "RelMetadata", }, - eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.class, - eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.Builder.class); - return null; - } - }; - com.google.protobuf.Descriptors.FileDescriptor - .internalBuildGeneratedFileFrom(descriptorData, - new com.google.protobuf.Descriptors.FileDescriptor[] { - eu.dnetlib.data.proto.RelMetadataProtos.getDescriptor(), - }, assigner); - } - - // @@protoc_insertion_point(outer_class_scope) -} diff --git a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/FieldTypeProtos.java b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/FieldTypeProtos.java deleted file mode 100644 index 03ca7f45e..000000000 --- a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/FieldTypeProtos.java +++ /dev/null @@ -1,8049 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: FieldType.proto - -package eu.dnetlib.data.proto; - -public final class FieldTypeProtos { - private FieldTypeProtos() {} - public static void registerAllExtensions( - com.google.protobuf.ExtensionRegistry registry) { - } - public interface StringFieldOrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // required string value = 1; - boolean hasValue(); - String getValue(); - - // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 2; - boolean hasDataInfo(); - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo(); - eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder(); - } - public static final class StringField extends - com.google.protobuf.GeneratedMessage - implements StringFieldOrBuilder { - // Use StringField.newBuilder() to construct. - private StringField(Builder builder) { - super(builder); - } - private StringField(boolean noInit) {} - - private static final StringField defaultInstance; - public static StringField getDefaultInstance() { - return defaultInstance; - } - - public StringField getDefaultInstanceForType() { - return defaultInstance; - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_StringField_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_StringField_fieldAccessorTable; - } - - private int bitField0_; - // required string value = 1; - public static final int VALUE_FIELD_NUMBER = 1; - private java.lang.Object value_; - public boolean hasValue() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public String getValue() { - java.lang.Object ref = value_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - value_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getValueBytes() { - java.lang.Object ref = value_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - value_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 2; - public static final int DATAINFO_FIELD_NUMBER = 2; - private eu.dnetlib.data.proto.FieldTypeProtos.DataInfo dataInfo_; - public boolean hasDataInfo() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo() { - return dataInfo_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder() { - return dataInfo_; - } - - private void initFields() { - value_ = ""; - dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - if (!hasValue()) { - memoizedIsInitialized = 0; - return false; - } - if (hasDataInfo()) { - if (!getDataInfo().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeBytes(1, getValueBytes()); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - output.writeMessage(2, dataInfo_); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(1, getValueBytes()); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(2, dataInfo_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static eu.dnetlib.data.proto.FieldTypeProtos.StringField parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.StringField parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.StringField parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.StringField parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.StringField parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.StringField parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.StringField parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.FieldTypeProtos.StringField parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.FieldTypeProtos.StringField parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.StringField parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(eu.dnetlib.data.proto.FieldTypeProtos.StringField prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder - implements eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_StringField_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_StringField_fieldAccessorTable; - } - - // Construct using eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - getDataInfoFieldBuilder(); - } - } - private static Builder create() { - return new Builder(); - } - - public Builder clear() { - super.clear(); - value_ = ""; - bitField0_ = (bitField0_ & ~0x00000001); - if (dataInfoBuilder_ == null) { - dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); - } else { - dataInfoBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000002); - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDescriptor(); - } - - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getDefaultInstanceForType() { - return eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } - - public eu.dnetlib.data.proto.FieldTypeProtos.StringField build() { - eu.dnetlib.data.proto.FieldTypeProtos.StringField result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - private eu.dnetlib.data.proto.FieldTypeProtos.StringField buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - eu.dnetlib.data.proto.FieldTypeProtos.StringField result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return result; - } - - public eu.dnetlib.data.proto.FieldTypeProtos.StringField buildPartial() { - eu.dnetlib.data.proto.FieldTypeProtos.StringField result = new eu.dnetlib.data.proto.FieldTypeProtos.StringField(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - result.value_ = value_; - if (((from_bitField0_ & 0x00000002) == 0x00000002)) { - to_bitField0_ |= 0x00000002; - } - if (dataInfoBuilder_ == null) { - result.dataInfo_ = dataInfo_; - } else { - result.dataInfo_ = dataInfoBuilder_.build(); - } - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof eu.dnetlib.data.proto.FieldTypeProtos.StringField) { - return mergeFrom((eu.dnetlib.data.proto.FieldTypeProtos.StringField)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(eu.dnetlib.data.proto.FieldTypeProtos.StringField other) { - if (other == eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) return this; - if (other.hasValue()) { - setValue(other.getValue()); - } - if (other.hasDataInfo()) { - mergeDataInfo(other.getDataInfo()); - } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - - public final boolean isInitialized() { - if (!hasValue()) { - - return false; - } - if (hasDataInfo()) { - if (!getDataInfo().isInitialized()) { - - return false; - } - } - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - } - break; - } - case 10: { - bitField0_ |= 0x00000001; - value_ = input.readBytes(); - break; - } - case 18: { - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.newBuilder(); - if (hasDataInfo()) { - subBuilder.mergeFrom(getDataInfo()); - } - input.readMessage(subBuilder, extensionRegistry); - setDataInfo(subBuilder.buildPartial()); - break; - } - } - } - } - - private int bitField0_; - - // required string value = 1; - private java.lang.Object value_ = ""; - public boolean hasValue() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public String getValue() { - java.lang.Object ref = value_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - value_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setValue(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000001; - value_ = value; - onChanged(); - return this; - } - public Builder clearValue() { - bitField0_ = (bitField0_ & ~0x00000001); - value_ = getDefaultInstance().getValue(); - onChanged(); - return this; - } - void setValue(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000001; - value_ = value; - onChanged(); - } - - // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 2; - private eu.dnetlib.data.proto.FieldTypeProtos.DataInfo dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder> dataInfoBuilder_; - public boolean hasDataInfo() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo() { - if (dataInfoBuilder_ == null) { - return dataInfo_; - } else { - return dataInfoBuilder_.getMessage(); - } - } - public Builder setDataInfo(eu.dnetlib.data.proto.FieldTypeProtos.DataInfo value) { - if (dataInfoBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - dataInfo_ = value; - onChanged(); - } else { - dataInfoBuilder_.setMessage(value); - } - bitField0_ |= 0x00000002; - return this; - } - public Builder setDataInfo( - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder builderForValue) { - if (dataInfoBuilder_ == null) { - dataInfo_ = builderForValue.build(); - onChanged(); - } else { - dataInfoBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000002; - return this; - } - public Builder mergeDataInfo(eu.dnetlib.data.proto.FieldTypeProtos.DataInfo value) { - if (dataInfoBuilder_ == null) { - if (((bitField0_ & 0x00000002) == 0x00000002) && - dataInfo_ != eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance()) { - dataInfo_ = - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.newBuilder(dataInfo_).mergeFrom(value).buildPartial(); - } else { - dataInfo_ = value; - } - onChanged(); - } else { - dataInfoBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000002; - return this; - } - public Builder clearDataInfo() { - if (dataInfoBuilder_ == null) { - dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); - onChanged(); - } else { - dataInfoBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000002); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder getDataInfoBuilder() { - bitField0_ |= 0x00000002; - onChanged(); - return getDataInfoFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder() { - if (dataInfoBuilder_ != null) { - return dataInfoBuilder_.getMessageOrBuilder(); - } else { - return dataInfo_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder> - getDataInfoFieldBuilder() { - if (dataInfoBuilder_ == null) { - dataInfoBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder>( - dataInfo_, - getParentForChildren(), - isClean()); - dataInfo_ = null; - } - return dataInfoBuilder_; - } - - // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.StringField) - } - - static { - defaultInstance = new StringField(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.StringField) - } - - public interface BoolFieldOrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // required bool value = 1; - boolean hasValue(); - boolean getValue(); - - // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 2; - boolean hasDataInfo(); - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo(); - eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder(); - } - public static final class BoolField extends - com.google.protobuf.GeneratedMessage - implements BoolFieldOrBuilder { - // Use BoolField.newBuilder() to construct. - private BoolField(Builder builder) { - super(builder); - } - private BoolField(boolean noInit) {} - - private static final BoolField defaultInstance; - public static BoolField getDefaultInstance() { - return defaultInstance; - } - - public BoolField getDefaultInstanceForType() { - return defaultInstance; - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_BoolField_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_BoolField_fieldAccessorTable; - } - - private int bitField0_; - // required bool value = 1; - public static final int VALUE_FIELD_NUMBER = 1; - private boolean value_; - public boolean hasValue() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public boolean getValue() { - return value_; - } - - // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 2; - public static final int DATAINFO_FIELD_NUMBER = 2; - private eu.dnetlib.data.proto.FieldTypeProtos.DataInfo dataInfo_; - public boolean hasDataInfo() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo() { - return dataInfo_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder() { - return dataInfo_; - } - - private void initFields() { - value_ = false; - dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - if (!hasValue()) { - memoizedIsInitialized = 0; - return false; - } - if (hasDataInfo()) { - if (!getDataInfo().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeBool(1, value_); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - output.writeMessage(2, dataInfo_); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeBoolSize(1, value_); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(2, dataInfo_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static eu.dnetlib.data.proto.FieldTypeProtos.BoolField parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.BoolField parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.BoolField parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.BoolField parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.BoolField parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.BoolField parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.BoolField parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.FieldTypeProtos.BoolField parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.FieldTypeProtos.BoolField parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.BoolField parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(eu.dnetlib.data.proto.FieldTypeProtos.BoolField prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder - implements eu.dnetlib.data.proto.FieldTypeProtos.BoolFieldOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_BoolField_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_BoolField_fieldAccessorTable; - } - - // Construct using eu.dnetlib.data.proto.FieldTypeProtos.BoolField.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - getDataInfoFieldBuilder(); - } - } - private static Builder create() { - return new Builder(); - } - - public Builder clear() { - super.clear(); - value_ = false; - bitField0_ = (bitField0_ & ~0x00000001); - if (dataInfoBuilder_ == null) { - dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); - } else { - dataInfoBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000002); - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return eu.dnetlib.data.proto.FieldTypeProtos.BoolField.getDescriptor(); - } - - public eu.dnetlib.data.proto.FieldTypeProtos.BoolField getDefaultInstanceForType() { - return eu.dnetlib.data.proto.FieldTypeProtos.BoolField.getDefaultInstance(); - } - - public eu.dnetlib.data.proto.FieldTypeProtos.BoolField build() { - eu.dnetlib.data.proto.FieldTypeProtos.BoolField result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - private eu.dnetlib.data.proto.FieldTypeProtos.BoolField buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - eu.dnetlib.data.proto.FieldTypeProtos.BoolField result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return result; - } - - public eu.dnetlib.data.proto.FieldTypeProtos.BoolField buildPartial() { - eu.dnetlib.data.proto.FieldTypeProtos.BoolField result = new eu.dnetlib.data.proto.FieldTypeProtos.BoolField(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - result.value_ = value_; - if (((from_bitField0_ & 0x00000002) == 0x00000002)) { - to_bitField0_ |= 0x00000002; - } - if (dataInfoBuilder_ == null) { - result.dataInfo_ = dataInfo_; - } else { - result.dataInfo_ = dataInfoBuilder_.build(); - } - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof eu.dnetlib.data.proto.FieldTypeProtos.BoolField) { - return mergeFrom((eu.dnetlib.data.proto.FieldTypeProtos.BoolField)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(eu.dnetlib.data.proto.FieldTypeProtos.BoolField other) { - if (other == eu.dnetlib.data.proto.FieldTypeProtos.BoolField.getDefaultInstance()) return this; - if (other.hasValue()) { - setValue(other.getValue()); - } - if (other.hasDataInfo()) { - mergeDataInfo(other.getDataInfo()); - } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - - public final boolean isInitialized() { - if (!hasValue()) { - - return false; - } - if (hasDataInfo()) { - if (!getDataInfo().isInitialized()) { - - return false; - } - } - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - } - break; - } - case 8: { - bitField0_ |= 0x00000001; - value_ = input.readBool(); - break; - } - case 18: { - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.newBuilder(); - if (hasDataInfo()) { - subBuilder.mergeFrom(getDataInfo()); - } - input.readMessage(subBuilder, extensionRegistry); - setDataInfo(subBuilder.buildPartial()); - break; - } - } - } - } - - private int bitField0_; - - // required bool value = 1; - private boolean value_ ; - public boolean hasValue() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public boolean getValue() { - return value_; - } - public Builder setValue(boolean value) { - bitField0_ |= 0x00000001; - value_ = value; - onChanged(); - return this; - } - public Builder clearValue() { - bitField0_ = (bitField0_ & ~0x00000001); - value_ = false; - onChanged(); - return this; - } - - // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 2; - private eu.dnetlib.data.proto.FieldTypeProtos.DataInfo dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder> dataInfoBuilder_; - public boolean hasDataInfo() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo() { - if (dataInfoBuilder_ == null) { - return dataInfo_; - } else { - return dataInfoBuilder_.getMessage(); - } - } - public Builder setDataInfo(eu.dnetlib.data.proto.FieldTypeProtos.DataInfo value) { - if (dataInfoBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - dataInfo_ = value; - onChanged(); - } else { - dataInfoBuilder_.setMessage(value); - } - bitField0_ |= 0x00000002; - return this; - } - public Builder setDataInfo( - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder builderForValue) { - if (dataInfoBuilder_ == null) { - dataInfo_ = builderForValue.build(); - onChanged(); - } else { - dataInfoBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000002; - return this; - } - public Builder mergeDataInfo(eu.dnetlib.data.proto.FieldTypeProtos.DataInfo value) { - if (dataInfoBuilder_ == null) { - if (((bitField0_ & 0x00000002) == 0x00000002) && - dataInfo_ != eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance()) { - dataInfo_ = - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.newBuilder(dataInfo_).mergeFrom(value).buildPartial(); - } else { - dataInfo_ = value; - } - onChanged(); - } else { - dataInfoBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000002; - return this; - } - public Builder clearDataInfo() { - if (dataInfoBuilder_ == null) { - dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); - onChanged(); - } else { - dataInfoBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000002); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder getDataInfoBuilder() { - bitField0_ |= 0x00000002; - onChanged(); - return getDataInfoFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder() { - if (dataInfoBuilder_ != null) { - return dataInfoBuilder_.getMessageOrBuilder(); - } else { - return dataInfo_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder> - getDataInfoFieldBuilder() { - if (dataInfoBuilder_ == null) { - dataInfoBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder>( - dataInfo_, - getParentForChildren(), - isClean()); - dataInfo_ = null; - } - return dataInfoBuilder_; - } - - // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.BoolField) - } - - static { - defaultInstance = new BoolField(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.BoolField) - } - - public interface IntFieldOrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // required int32 value = 1; - boolean hasValue(); - int getValue(); - - // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 2; - boolean hasDataInfo(); - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo(); - eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder(); - } - public static final class IntField extends - com.google.protobuf.GeneratedMessage - implements IntFieldOrBuilder { - // Use IntField.newBuilder() to construct. - private IntField(Builder builder) { - super(builder); - } - private IntField(boolean noInit) {} - - private static final IntField defaultInstance; - public static IntField getDefaultInstance() { - return defaultInstance; - } - - public IntField getDefaultInstanceForType() { - return defaultInstance; - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_IntField_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_IntField_fieldAccessorTable; - } - - private int bitField0_; - // required int32 value = 1; - public static final int VALUE_FIELD_NUMBER = 1; - private int value_; - public boolean hasValue() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public int getValue() { - return value_; - } - - // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 2; - public static final int DATAINFO_FIELD_NUMBER = 2; - private eu.dnetlib.data.proto.FieldTypeProtos.DataInfo dataInfo_; - public boolean hasDataInfo() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo() { - return dataInfo_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder() { - return dataInfo_; - } - - private void initFields() { - value_ = 0; - dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - if (!hasValue()) { - memoizedIsInitialized = 0; - return false; - } - if (hasDataInfo()) { - if (!getDataInfo().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeInt32(1, value_); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - output.writeMessage(2, dataInfo_); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeInt32Size(1, value_); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(2, dataInfo_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static eu.dnetlib.data.proto.FieldTypeProtos.IntField parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.IntField parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.IntField parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.IntField parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.IntField parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.IntField parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.IntField parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.FieldTypeProtos.IntField parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.FieldTypeProtos.IntField parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.IntField parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(eu.dnetlib.data.proto.FieldTypeProtos.IntField prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder - implements eu.dnetlib.data.proto.FieldTypeProtos.IntFieldOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_IntField_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_IntField_fieldAccessorTable; - } - - // Construct using eu.dnetlib.data.proto.FieldTypeProtos.IntField.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - getDataInfoFieldBuilder(); - } - } - private static Builder create() { - return new Builder(); - } - - public Builder clear() { - super.clear(); - value_ = 0; - bitField0_ = (bitField0_ & ~0x00000001); - if (dataInfoBuilder_ == null) { - dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); - } else { - dataInfoBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000002); - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return eu.dnetlib.data.proto.FieldTypeProtos.IntField.getDescriptor(); - } - - public eu.dnetlib.data.proto.FieldTypeProtos.IntField getDefaultInstanceForType() { - return eu.dnetlib.data.proto.FieldTypeProtos.IntField.getDefaultInstance(); - } - - public eu.dnetlib.data.proto.FieldTypeProtos.IntField build() { - eu.dnetlib.data.proto.FieldTypeProtos.IntField result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - private eu.dnetlib.data.proto.FieldTypeProtos.IntField buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - eu.dnetlib.data.proto.FieldTypeProtos.IntField result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return result; - } - - public eu.dnetlib.data.proto.FieldTypeProtos.IntField buildPartial() { - eu.dnetlib.data.proto.FieldTypeProtos.IntField result = new eu.dnetlib.data.proto.FieldTypeProtos.IntField(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - result.value_ = value_; - if (((from_bitField0_ & 0x00000002) == 0x00000002)) { - to_bitField0_ |= 0x00000002; - } - if (dataInfoBuilder_ == null) { - result.dataInfo_ = dataInfo_; - } else { - result.dataInfo_ = dataInfoBuilder_.build(); - } - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof eu.dnetlib.data.proto.FieldTypeProtos.IntField) { - return mergeFrom((eu.dnetlib.data.proto.FieldTypeProtos.IntField)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(eu.dnetlib.data.proto.FieldTypeProtos.IntField other) { - if (other == eu.dnetlib.data.proto.FieldTypeProtos.IntField.getDefaultInstance()) return this; - if (other.hasValue()) { - setValue(other.getValue()); - } - if (other.hasDataInfo()) { - mergeDataInfo(other.getDataInfo()); - } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - - public final boolean isInitialized() { - if (!hasValue()) { - - return false; - } - if (hasDataInfo()) { - if (!getDataInfo().isInitialized()) { - - return false; - } - } - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - } - break; - } - case 8: { - bitField0_ |= 0x00000001; - value_ = input.readInt32(); - break; - } - case 18: { - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.newBuilder(); - if (hasDataInfo()) { - subBuilder.mergeFrom(getDataInfo()); - } - input.readMessage(subBuilder, extensionRegistry); - setDataInfo(subBuilder.buildPartial()); - break; - } - } - } - } - - private int bitField0_; - - // required int32 value = 1; - private int value_ ; - public boolean hasValue() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public int getValue() { - return value_; - } - public Builder setValue(int value) { - bitField0_ |= 0x00000001; - value_ = value; - onChanged(); - return this; - } - public Builder clearValue() { - bitField0_ = (bitField0_ & ~0x00000001); - value_ = 0; - onChanged(); - return this; - } - - // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 2; - private eu.dnetlib.data.proto.FieldTypeProtos.DataInfo dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder> dataInfoBuilder_; - public boolean hasDataInfo() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo() { - if (dataInfoBuilder_ == null) { - return dataInfo_; - } else { - return dataInfoBuilder_.getMessage(); - } - } - public Builder setDataInfo(eu.dnetlib.data.proto.FieldTypeProtos.DataInfo value) { - if (dataInfoBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - dataInfo_ = value; - onChanged(); - } else { - dataInfoBuilder_.setMessage(value); - } - bitField0_ |= 0x00000002; - return this; - } - public Builder setDataInfo( - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder builderForValue) { - if (dataInfoBuilder_ == null) { - dataInfo_ = builderForValue.build(); - onChanged(); - } else { - dataInfoBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000002; - return this; - } - public Builder mergeDataInfo(eu.dnetlib.data.proto.FieldTypeProtos.DataInfo value) { - if (dataInfoBuilder_ == null) { - if (((bitField0_ & 0x00000002) == 0x00000002) && - dataInfo_ != eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance()) { - dataInfo_ = - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.newBuilder(dataInfo_).mergeFrom(value).buildPartial(); - } else { - dataInfo_ = value; - } - onChanged(); - } else { - dataInfoBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000002; - return this; - } - public Builder clearDataInfo() { - if (dataInfoBuilder_ == null) { - dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); - onChanged(); - } else { - dataInfoBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000002); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder getDataInfoBuilder() { - bitField0_ |= 0x00000002; - onChanged(); - return getDataInfoFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder() { - if (dataInfoBuilder_ != null) { - return dataInfoBuilder_.getMessageOrBuilder(); - } else { - return dataInfo_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder> - getDataInfoFieldBuilder() { - if (dataInfoBuilder_ == null) { - dataInfoBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder>( - dataInfo_, - getParentForChildren(), - isClean()); - dataInfo_ = null; - } - return dataInfoBuilder_; - } - - // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.IntField) - } - - static { - defaultInstance = new IntField(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.IntField) - } - - public interface StructuredPropertyOrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // required string value = 1; - boolean hasValue(); - String getValue(); - - // optional .eu.dnetlib.data.proto.Qualifier qualifier = 2; - boolean hasQualifier(); - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getQualifier(); - eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getQualifierOrBuilder(); - - // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 3; - boolean hasDataInfo(); - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo(); - eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder(); - } - public static final class StructuredProperty extends - com.google.protobuf.GeneratedMessage - implements StructuredPropertyOrBuilder { - // Use StructuredProperty.newBuilder() to construct. - private StructuredProperty(Builder builder) { - super(builder); - } - private StructuredProperty(boolean noInit) {} - - private static final StructuredProperty defaultInstance; - public static StructuredProperty getDefaultInstance() { - return defaultInstance; - } - - public StructuredProperty getDefaultInstanceForType() { - return defaultInstance; - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_StructuredProperty_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_StructuredProperty_fieldAccessorTable; - } - - private int bitField0_; - // required string value = 1; - public static final int VALUE_FIELD_NUMBER = 1; - private java.lang.Object value_; - public boolean hasValue() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public String getValue() { - java.lang.Object ref = value_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - value_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getValueBytes() { - java.lang.Object ref = value_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - value_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // optional .eu.dnetlib.data.proto.Qualifier qualifier = 2; - public static final int QUALIFIER_FIELD_NUMBER = 2; - private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier qualifier_; - public boolean hasQualifier() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getQualifier() { - return qualifier_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getQualifierOrBuilder() { - return qualifier_; - } - - // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 3; - public static final int DATAINFO_FIELD_NUMBER = 3; - private eu.dnetlib.data.proto.FieldTypeProtos.DataInfo dataInfo_; - public boolean hasDataInfo() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo() { - return dataInfo_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder() { - return dataInfo_; - } - - private void initFields() { - value_ = ""; - qualifier_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - if (!hasValue()) { - memoizedIsInitialized = 0; - return false; - } - if (hasQualifier()) { - if (!getQualifier().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasDataInfo()) { - if (!getDataInfo().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeBytes(1, getValueBytes()); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - output.writeMessage(2, qualifier_); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - output.writeMessage(3, dataInfo_); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(1, getValueBytes()); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(2, qualifier_); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(3, dataInfo_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder - implements eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_StructuredProperty_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_StructuredProperty_fieldAccessorTable; - } - - // Construct using eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - getQualifierFieldBuilder(); - getDataInfoFieldBuilder(); - } - } - private static Builder create() { - return new Builder(); - } - - public Builder clear() { - super.clear(); - value_ = ""; - bitField0_ = (bitField0_ & ~0x00000001); - if (qualifierBuilder_ == null) { - qualifier_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - } else { - qualifierBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000002); - if (dataInfoBuilder_ == null) { - dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); - } else { - dataInfoBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000004); - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.getDescriptor(); - } - - public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty getDefaultInstanceForType() { - return eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.getDefaultInstance(); - } - - public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty build() { - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - private eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return result; - } - - public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty buildPartial() { - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty result = new eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - result.value_ = value_; - if (((from_bitField0_ & 0x00000002) == 0x00000002)) { - to_bitField0_ |= 0x00000002; - } - if (qualifierBuilder_ == null) { - result.qualifier_ = qualifier_; - } else { - result.qualifier_ = qualifierBuilder_.build(); - } - if (((from_bitField0_ & 0x00000004) == 0x00000004)) { - to_bitField0_ |= 0x00000004; - } - if (dataInfoBuilder_ == null) { - result.dataInfo_ = dataInfo_; - } else { - result.dataInfo_ = dataInfoBuilder_.build(); - } - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty) { - return mergeFrom((eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty other) { - if (other == eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.getDefaultInstance()) return this; - if (other.hasValue()) { - setValue(other.getValue()); - } - if (other.hasQualifier()) { - mergeQualifier(other.getQualifier()); - } - if (other.hasDataInfo()) { - mergeDataInfo(other.getDataInfo()); - } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - - public final boolean isInitialized() { - if (!hasValue()) { - - return false; - } - if (hasQualifier()) { - if (!getQualifier().isInitialized()) { - - return false; - } - } - if (hasDataInfo()) { - if (!getDataInfo().isInitialized()) { - - return false; - } - } - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - } - break; - } - case 10: { - bitField0_ |= 0x00000001; - value_ = input.readBytes(); - break; - } - case 18: { - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(); - if (hasQualifier()) { - subBuilder.mergeFrom(getQualifier()); - } - input.readMessage(subBuilder, extensionRegistry); - setQualifier(subBuilder.buildPartial()); - break; - } - case 26: { - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.newBuilder(); - if (hasDataInfo()) { - subBuilder.mergeFrom(getDataInfo()); - } - input.readMessage(subBuilder, extensionRegistry); - setDataInfo(subBuilder.buildPartial()); - break; - } - } - } - } - - private int bitField0_; - - // required string value = 1; - private java.lang.Object value_ = ""; - public boolean hasValue() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public String getValue() { - java.lang.Object ref = value_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - value_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setValue(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000001; - value_ = value; - onChanged(); - return this; - } - public Builder clearValue() { - bitField0_ = (bitField0_ & ~0x00000001); - value_ = getDefaultInstance().getValue(); - onChanged(); - return this; - } - void setValue(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000001; - value_ = value; - onChanged(); - } - - // optional .eu.dnetlib.data.proto.Qualifier qualifier = 2; - private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier qualifier_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> qualifierBuilder_; - public boolean hasQualifier() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getQualifier() { - if (qualifierBuilder_ == null) { - return qualifier_; - } else { - return qualifierBuilder_.getMessage(); - } - } - public Builder setQualifier(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { - if (qualifierBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - qualifier_ = value; - onChanged(); - } else { - qualifierBuilder_.setMessage(value); - } - bitField0_ |= 0x00000002; - return this; - } - public Builder setQualifier( - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder builderForValue) { - if (qualifierBuilder_ == null) { - qualifier_ = builderForValue.build(); - onChanged(); - } else { - qualifierBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000002; - return this; - } - public Builder mergeQualifier(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { - if (qualifierBuilder_ == null) { - if (((bitField0_ & 0x00000002) == 0x00000002) && - qualifier_ != eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance()) { - qualifier_ = - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(qualifier_).mergeFrom(value).buildPartial(); - } else { - qualifier_ = value; - } - onChanged(); - } else { - qualifierBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000002; - return this; - } - public Builder clearQualifier() { - if (qualifierBuilder_ == null) { - qualifier_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - onChanged(); - } else { - qualifierBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000002); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder getQualifierBuilder() { - bitField0_ |= 0x00000002; - onChanged(); - return getQualifierFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getQualifierOrBuilder() { - if (qualifierBuilder_ != null) { - return qualifierBuilder_.getMessageOrBuilder(); - } else { - return qualifier_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> - getQualifierFieldBuilder() { - if (qualifierBuilder_ == null) { - qualifierBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder>( - qualifier_, - getParentForChildren(), - isClean()); - qualifier_ = null; - } - return qualifierBuilder_; - } - - // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 3; - private eu.dnetlib.data.proto.FieldTypeProtos.DataInfo dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder> dataInfoBuilder_; - public boolean hasDataInfo() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo() { - if (dataInfoBuilder_ == null) { - return dataInfo_; - } else { - return dataInfoBuilder_.getMessage(); - } - } - public Builder setDataInfo(eu.dnetlib.data.proto.FieldTypeProtos.DataInfo value) { - if (dataInfoBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - dataInfo_ = value; - onChanged(); - } else { - dataInfoBuilder_.setMessage(value); - } - bitField0_ |= 0x00000004; - return this; - } - public Builder setDataInfo( - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder builderForValue) { - if (dataInfoBuilder_ == null) { - dataInfo_ = builderForValue.build(); - onChanged(); - } else { - dataInfoBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000004; - return this; - } - public Builder mergeDataInfo(eu.dnetlib.data.proto.FieldTypeProtos.DataInfo value) { - if (dataInfoBuilder_ == null) { - if (((bitField0_ & 0x00000004) == 0x00000004) && - dataInfo_ != eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance()) { - dataInfo_ = - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.newBuilder(dataInfo_).mergeFrom(value).buildPartial(); - } else { - dataInfo_ = value; - } - onChanged(); - } else { - dataInfoBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000004; - return this; - } - public Builder clearDataInfo() { - if (dataInfoBuilder_ == null) { - dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); - onChanged(); - } else { - dataInfoBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000004); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder getDataInfoBuilder() { - bitField0_ |= 0x00000004; - onChanged(); - return getDataInfoFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder() { - if (dataInfoBuilder_ != null) { - return dataInfoBuilder_.getMessageOrBuilder(); - } else { - return dataInfo_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder> - getDataInfoFieldBuilder() { - if (dataInfoBuilder_ == null) { - dataInfoBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder>( - dataInfo_, - getParentForChildren(), - isClean()); - dataInfo_ = null; - } - return dataInfoBuilder_; - } - - // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.StructuredProperty) - } - - static { - defaultInstance = new StructuredProperty(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.StructuredProperty) - } - - public interface KeyValueOrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // required string key = 1; - boolean hasKey(); - String getKey(); - - // optional string value = 2; - boolean hasValue(); - String getValue(); - - // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 3; - boolean hasDataInfo(); - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo(); - eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder(); - } - public static final class KeyValue extends - com.google.protobuf.GeneratedMessage - implements KeyValueOrBuilder { - // Use KeyValue.newBuilder() to construct. - private KeyValue(Builder builder) { - super(builder); - } - private KeyValue(boolean noInit) {} - - private static final KeyValue defaultInstance; - public static KeyValue getDefaultInstance() { - return defaultInstance; - } - - public KeyValue getDefaultInstanceForType() { - return defaultInstance; - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_KeyValue_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_KeyValue_fieldAccessorTable; - } - - private int bitField0_; - // required string key = 1; - public static final int KEY_FIELD_NUMBER = 1; - private java.lang.Object key_; - public boolean hasKey() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public String getKey() { - java.lang.Object ref = key_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - key_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getKeyBytes() { - java.lang.Object ref = key_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - key_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // optional string value = 2; - public static final int VALUE_FIELD_NUMBER = 2; - private java.lang.Object value_; - public boolean hasValue() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public String getValue() { - java.lang.Object ref = value_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - value_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getValueBytes() { - java.lang.Object ref = value_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - value_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 3; - public static final int DATAINFO_FIELD_NUMBER = 3; - private eu.dnetlib.data.proto.FieldTypeProtos.DataInfo dataInfo_; - public boolean hasDataInfo() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo() { - return dataInfo_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder() { - return dataInfo_; - } - - private void initFields() { - key_ = ""; - value_ = ""; - dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - if (!hasKey()) { - memoizedIsInitialized = 0; - return false; - } - if (hasDataInfo()) { - if (!getDataInfo().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeBytes(1, getKeyBytes()); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - output.writeBytes(2, getValueBytes()); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - output.writeMessage(3, dataInfo_); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(1, getKeyBytes()); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(2, getValueBytes()); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(3, dataInfo_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static eu.dnetlib.data.proto.FieldTypeProtos.KeyValue parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.KeyValue parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.KeyValue parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.KeyValue parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.KeyValue parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.KeyValue parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.KeyValue parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.FieldTypeProtos.KeyValue parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.FieldTypeProtos.KeyValue parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.KeyValue parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(eu.dnetlib.data.proto.FieldTypeProtos.KeyValue prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder - implements eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_KeyValue_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_KeyValue_fieldAccessorTable; - } - - // Construct using eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - getDataInfoFieldBuilder(); - } - } - private static Builder create() { - return new Builder(); - } - - public Builder clear() { - super.clear(); - key_ = ""; - bitField0_ = (bitField0_ & ~0x00000001); - value_ = ""; - bitField0_ = (bitField0_ & ~0x00000002); - if (dataInfoBuilder_ == null) { - dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); - } else { - dataInfoBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000004); - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.getDescriptor(); - } - - public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue getDefaultInstanceForType() { - return eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.getDefaultInstance(); - } - - public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue build() { - eu.dnetlib.data.proto.FieldTypeProtos.KeyValue result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - private eu.dnetlib.data.proto.FieldTypeProtos.KeyValue buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - eu.dnetlib.data.proto.FieldTypeProtos.KeyValue result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return result; - } - - public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue buildPartial() { - eu.dnetlib.data.proto.FieldTypeProtos.KeyValue result = new eu.dnetlib.data.proto.FieldTypeProtos.KeyValue(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - result.key_ = key_; - if (((from_bitField0_ & 0x00000002) == 0x00000002)) { - to_bitField0_ |= 0x00000002; - } - result.value_ = value_; - if (((from_bitField0_ & 0x00000004) == 0x00000004)) { - to_bitField0_ |= 0x00000004; - } - if (dataInfoBuilder_ == null) { - result.dataInfo_ = dataInfo_; - } else { - result.dataInfo_ = dataInfoBuilder_.build(); - } - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof eu.dnetlib.data.proto.FieldTypeProtos.KeyValue) { - return mergeFrom((eu.dnetlib.data.proto.FieldTypeProtos.KeyValue)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(eu.dnetlib.data.proto.FieldTypeProtos.KeyValue other) { - if (other == eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.getDefaultInstance()) return this; - if (other.hasKey()) { - setKey(other.getKey()); - } - if (other.hasValue()) { - setValue(other.getValue()); - } - if (other.hasDataInfo()) { - mergeDataInfo(other.getDataInfo()); - } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - - public final boolean isInitialized() { - if (!hasKey()) { - - return false; - } - if (hasDataInfo()) { - if (!getDataInfo().isInitialized()) { - - return false; - } - } - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - } - break; - } - case 10: { - bitField0_ |= 0x00000001; - key_ = input.readBytes(); - break; - } - case 18: { - bitField0_ |= 0x00000002; - value_ = input.readBytes(); - break; - } - case 26: { - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.newBuilder(); - if (hasDataInfo()) { - subBuilder.mergeFrom(getDataInfo()); - } - input.readMessage(subBuilder, extensionRegistry); - setDataInfo(subBuilder.buildPartial()); - break; - } - } - } - } - - private int bitField0_; - - // required string key = 1; - private java.lang.Object key_ = ""; - public boolean hasKey() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public String getKey() { - java.lang.Object ref = key_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - key_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setKey(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000001; - key_ = value; - onChanged(); - return this; - } - public Builder clearKey() { - bitField0_ = (bitField0_ & ~0x00000001); - key_ = getDefaultInstance().getKey(); - onChanged(); - return this; - } - void setKey(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000001; - key_ = value; - onChanged(); - } - - // optional string value = 2; - private java.lang.Object value_ = ""; - public boolean hasValue() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public String getValue() { - java.lang.Object ref = value_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - value_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setValue(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000002; - value_ = value; - onChanged(); - return this; - } - public Builder clearValue() { - bitField0_ = (bitField0_ & ~0x00000002); - value_ = getDefaultInstance().getValue(); - onChanged(); - return this; - } - void setValue(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000002; - value_ = value; - onChanged(); - } - - // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 3; - private eu.dnetlib.data.proto.FieldTypeProtos.DataInfo dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder> dataInfoBuilder_; - public boolean hasDataInfo() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo() { - if (dataInfoBuilder_ == null) { - return dataInfo_; - } else { - return dataInfoBuilder_.getMessage(); - } - } - public Builder setDataInfo(eu.dnetlib.data.proto.FieldTypeProtos.DataInfo value) { - if (dataInfoBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - dataInfo_ = value; - onChanged(); - } else { - dataInfoBuilder_.setMessage(value); - } - bitField0_ |= 0x00000004; - return this; - } - public Builder setDataInfo( - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder builderForValue) { - if (dataInfoBuilder_ == null) { - dataInfo_ = builderForValue.build(); - onChanged(); - } else { - dataInfoBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000004; - return this; - } - public Builder mergeDataInfo(eu.dnetlib.data.proto.FieldTypeProtos.DataInfo value) { - if (dataInfoBuilder_ == null) { - if (((bitField0_ & 0x00000004) == 0x00000004) && - dataInfo_ != eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance()) { - dataInfo_ = - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.newBuilder(dataInfo_).mergeFrom(value).buildPartial(); - } else { - dataInfo_ = value; - } - onChanged(); - } else { - dataInfoBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000004; - return this; - } - public Builder clearDataInfo() { - if (dataInfoBuilder_ == null) { - dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); - onChanged(); - } else { - dataInfoBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000004); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder getDataInfoBuilder() { - bitField0_ |= 0x00000004; - onChanged(); - return getDataInfoFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder() { - if (dataInfoBuilder_ != null) { - return dataInfoBuilder_.getMessageOrBuilder(); - } else { - return dataInfo_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder> - getDataInfoFieldBuilder() { - if (dataInfoBuilder_ == null) { - dataInfoBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder>( - dataInfo_, - getParentForChildren(), - isClean()); - dataInfo_ = null; - } - return dataInfoBuilder_; - } - - // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.KeyValue) - } - - static { - defaultInstance = new KeyValue(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.KeyValue) - } - - public interface QualifierOrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // optional string classid = 1; - boolean hasClassid(); - String getClassid(); - - // optional string classname = 2; - boolean hasClassname(); - String getClassname(); - - // optional string schemeid = 3; - boolean hasSchemeid(); - String getSchemeid(); - - // optional string schemename = 4; - boolean hasSchemename(); - String getSchemename(); - - // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 5; - boolean hasDataInfo(); - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo(); - eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder(); - } - public static final class Qualifier extends - com.google.protobuf.GeneratedMessage - implements QualifierOrBuilder { - // Use Qualifier.newBuilder() to construct. - private Qualifier(Builder builder) { - super(builder); - } - private Qualifier(boolean noInit) {} - - private static final Qualifier defaultInstance; - public static Qualifier getDefaultInstance() { - return defaultInstance; - } - - public Qualifier getDefaultInstanceForType() { - return defaultInstance; - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_Qualifier_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_Qualifier_fieldAccessorTable; - } - - private int bitField0_; - // optional string classid = 1; - public static final int CLASSID_FIELD_NUMBER = 1; - private java.lang.Object classid_; - public boolean hasClassid() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public String getClassid() { - java.lang.Object ref = classid_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - classid_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getClassidBytes() { - java.lang.Object ref = classid_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - classid_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // optional string classname = 2; - public static final int CLASSNAME_FIELD_NUMBER = 2; - private java.lang.Object classname_; - public boolean hasClassname() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public String getClassname() { - java.lang.Object ref = classname_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - classname_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getClassnameBytes() { - java.lang.Object ref = classname_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - classname_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // optional string schemeid = 3; - public static final int SCHEMEID_FIELD_NUMBER = 3; - private java.lang.Object schemeid_; - public boolean hasSchemeid() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - public String getSchemeid() { - java.lang.Object ref = schemeid_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - schemeid_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getSchemeidBytes() { - java.lang.Object ref = schemeid_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - schemeid_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // optional string schemename = 4; - public static final int SCHEMENAME_FIELD_NUMBER = 4; - private java.lang.Object schemename_; - public boolean hasSchemename() { - return ((bitField0_ & 0x00000008) == 0x00000008); - } - public String getSchemename() { - java.lang.Object ref = schemename_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - schemename_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getSchemenameBytes() { - java.lang.Object ref = schemename_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - schemename_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 5; - public static final int DATAINFO_FIELD_NUMBER = 5; - private eu.dnetlib.data.proto.FieldTypeProtos.DataInfo dataInfo_; - public boolean hasDataInfo() { - return ((bitField0_ & 0x00000010) == 0x00000010); - } - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo() { - return dataInfo_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder() { - return dataInfo_; - } - - private void initFields() { - classid_ = ""; - classname_ = ""; - schemeid_ = ""; - schemename_ = ""; - dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - if (hasDataInfo()) { - if (!getDataInfo().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeBytes(1, getClassidBytes()); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - output.writeBytes(2, getClassnameBytes()); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - output.writeBytes(3, getSchemeidBytes()); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - output.writeBytes(4, getSchemenameBytes()); - } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - output.writeMessage(5, dataInfo_); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(1, getClassidBytes()); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(2, getClassnameBytes()); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(3, getSchemeidBytes()); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(4, getSchemenameBytes()); - } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(5, dataInfo_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static eu.dnetlib.data.proto.FieldTypeProtos.Qualifier parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.Qualifier parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.Qualifier parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.Qualifier parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.Qualifier parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.Qualifier parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.Qualifier parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.FieldTypeProtos.Qualifier parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.FieldTypeProtos.Qualifier parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.Qualifier parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder - implements eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_Qualifier_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_Qualifier_fieldAccessorTable; - } - - // Construct using eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - getDataInfoFieldBuilder(); - } - } - private static Builder create() { - return new Builder(); - } - - public Builder clear() { - super.clear(); - classid_ = ""; - bitField0_ = (bitField0_ & ~0x00000001); - classname_ = ""; - bitField0_ = (bitField0_ & ~0x00000002); - schemeid_ = ""; - bitField0_ = (bitField0_ & ~0x00000004); - schemename_ = ""; - bitField0_ = (bitField0_ & ~0x00000008); - if (dataInfoBuilder_ == null) { - dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); - } else { - dataInfoBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000010); - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDescriptor(); - } - - public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getDefaultInstanceForType() { - return eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - } - - public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier build() { - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return result; - } - - public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier buildPartial() { - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier result = new eu.dnetlib.data.proto.FieldTypeProtos.Qualifier(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - result.classid_ = classid_; - if (((from_bitField0_ & 0x00000002) == 0x00000002)) { - to_bitField0_ |= 0x00000002; - } - result.classname_ = classname_; - if (((from_bitField0_ & 0x00000004) == 0x00000004)) { - to_bitField0_ |= 0x00000004; - } - result.schemeid_ = schemeid_; - if (((from_bitField0_ & 0x00000008) == 0x00000008)) { - to_bitField0_ |= 0x00000008; - } - result.schemename_ = schemename_; - if (((from_bitField0_ & 0x00000010) == 0x00000010)) { - to_bitField0_ |= 0x00000010; - } - if (dataInfoBuilder_ == null) { - result.dataInfo_ = dataInfo_; - } else { - result.dataInfo_ = dataInfoBuilder_.build(); - } - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof eu.dnetlib.data.proto.FieldTypeProtos.Qualifier) { - return mergeFrom((eu.dnetlib.data.proto.FieldTypeProtos.Qualifier)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier other) { - if (other == eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance()) return this; - if (other.hasClassid()) { - setClassid(other.getClassid()); - } - if (other.hasClassname()) { - setClassname(other.getClassname()); - } - if (other.hasSchemeid()) { - setSchemeid(other.getSchemeid()); - } - if (other.hasSchemename()) { - setSchemename(other.getSchemename()); - } - if (other.hasDataInfo()) { - mergeDataInfo(other.getDataInfo()); - } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - - public final boolean isInitialized() { - if (hasDataInfo()) { - if (!getDataInfo().isInitialized()) { - - return false; - } - } - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - } - break; - } - case 10: { - bitField0_ |= 0x00000001; - classid_ = input.readBytes(); - break; - } - case 18: { - bitField0_ |= 0x00000002; - classname_ = input.readBytes(); - break; - } - case 26: { - bitField0_ |= 0x00000004; - schemeid_ = input.readBytes(); - break; - } - case 34: { - bitField0_ |= 0x00000008; - schemename_ = input.readBytes(); - break; - } - case 42: { - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.newBuilder(); - if (hasDataInfo()) { - subBuilder.mergeFrom(getDataInfo()); - } - input.readMessage(subBuilder, extensionRegistry); - setDataInfo(subBuilder.buildPartial()); - break; - } - } - } - } - - private int bitField0_; - - // optional string classid = 1; - private java.lang.Object classid_ = ""; - public boolean hasClassid() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public String getClassid() { - java.lang.Object ref = classid_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - classid_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setClassid(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000001; - classid_ = value; - onChanged(); - return this; - } - public Builder clearClassid() { - bitField0_ = (bitField0_ & ~0x00000001); - classid_ = getDefaultInstance().getClassid(); - onChanged(); - return this; - } - void setClassid(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000001; - classid_ = value; - onChanged(); - } - - // optional string classname = 2; - private java.lang.Object classname_ = ""; - public boolean hasClassname() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public String getClassname() { - java.lang.Object ref = classname_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - classname_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setClassname(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000002; - classname_ = value; - onChanged(); - return this; - } - public Builder clearClassname() { - bitField0_ = (bitField0_ & ~0x00000002); - classname_ = getDefaultInstance().getClassname(); - onChanged(); - return this; - } - void setClassname(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000002; - classname_ = value; - onChanged(); - } - - // optional string schemeid = 3; - private java.lang.Object schemeid_ = ""; - public boolean hasSchemeid() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - public String getSchemeid() { - java.lang.Object ref = schemeid_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - schemeid_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setSchemeid(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000004; - schemeid_ = value; - onChanged(); - return this; - } - public Builder clearSchemeid() { - bitField0_ = (bitField0_ & ~0x00000004); - schemeid_ = getDefaultInstance().getSchemeid(); - onChanged(); - return this; - } - void setSchemeid(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000004; - schemeid_ = value; - onChanged(); - } - - // optional string schemename = 4; - private java.lang.Object schemename_ = ""; - public boolean hasSchemename() { - return ((bitField0_ & 0x00000008) == 0x00000008); - } - public String getSchemename() { - java.lang.Object ref = schemename_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - schemename_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setSchemename(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000008; - schemename_ = value; - onChanged(); - return this; - } - public Builder clearSchemename() { - bitField0_ = (bitField0_ & ~0x00000008); - schemename_ = getDefaultInstance().getSchemename(); - onChanged(); - return this; - } - void setSchemename(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000008; - schemename_ = value; - onChanged(); - } - - // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 5; - private eu.dnetlib.data.proto.FieldTypeProtos.DataInfo dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder> dataInfoBuilder_; - public boolean hasDataInfo() { - return ((bitField0_ & 0x00000010) == 0x00000010); - } - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo() { - if (dataInfoBuilder_ == null) { - return dataInfo_; - } else { - return dataInfoBuilder_.getMessage(); - } - } - public Builder setDataInfo(eu.dnetlib.data.proto.FieldTypeProtos.DataInfo value) { - if (dataInfoBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - dataInfo_ = value; - onChanged(); - } else { - dataInfoBuilder_.setMessage(value); - } - bitField0_ |= 0x00000010; - return this; - } - public Builder setDataInfo( - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder builderForValue) { - if (dataInfoBuilder_ == null) { - dataInfo_ = builderForValue.build(); - onChanged(); - } else { - dataInfoBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000010; - return this; - } - public Builder mergeDataInfo(eu.dnetlib.data.proto.FieldTypeProtos.DataInfo value) { - if (dataInfoBuilder_ == null) { - if (((bitField0_ & 0x00000010) == 0x00000010) && - dataInfo_ != eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance()) { - dataInfo_ = - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.newBuilder(dataInfo_).mergeFrom(value).buildPartial(); - } else { - dataInfo_ = value; - } - onChanged(); - } else { - dataInfoBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000010; - return this; - } - public Builder clearDataInfo() { - if (dataInfoBuilder_ == null) { - dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); - onChanged(); - } else { - dataInfoBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000010); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder getDataInfoBuilder() { - bitField0_ |= 0x00000010; - onChanged(); - return getDataInfoFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder() { - if (dataInfoBuilder_ != null) { - return dataInfoBuilder_.getMessageOrBuilder(); - } else { - return dataInfo_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder> - getDataInfoFieldBuilder() { - if (dataInfoBuilder_ == null) { - dataInfoBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder>( - dataInfo_, - getParentForChildren(), - isClean()); - dataInfo_ = null; - } - return dataInfoBuilder_; - } - - // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.Qualifier) - } - - static { - defaultInstance = new Qualifier(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.Qualifier) - } - - public interface DataInfoOrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // optional bool invisible = 6 [default = false]; - boolean hasInvisible(); - boolean getInvisible(); - - // optional bool inferred = 1; - boolean hasInferred(); - boolean getInferred(); - - // optional bool deletedbyinference = 2; - boolean hasDeletedbyinference(); - boolean getDeletedbyinference(); - - // optional string trust = 3; - boolean hasTrust(); - String getTrust(); - - // optional string inferenceprovenance = 4; - boolean hasInferenceprovenance(); - String getInferenceprovenance(); - - // required .eu.dnetlib.data.proto.Qualifier provenanceaction = 5; - boolean hasProvenanceaction(); - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getProvenanceaction(); - eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getProvenanceactionOrBuilder(); - } - public static final class DataInfo extends - com.google.protobuf.GeneratedMessage - implements DataInfoOrBuilder { - // Use DataInfo.newBuilder() to construct. - private DataInfo(Builder builder) { - super(builder); - } - private DataInfo(boolean noInit) {} - - private static final DataInfo defaultInstance; - public static DataInfo getDefaultInstance() { - return defaultInstance; - } - - public DataInfo getDefaultInstanceForType() { - return defaultInstance; - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_DataInfo_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_DataInfo_fieldAccessorTable; - } - - private int bitField0_; - // optional bool invisible = 6 [default = false]; - public static final int INVISIBLE_FIELD_NUMBER = 6; - private boolean invisible_; - public boolean hasInvisible() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public boolean getInvisible() { - return invisible_; - } - - // optional bool inferred = 1; - public static final int INFERRED_FIELD_NUMBER = 1; - private boolean inferred_; - public boolean hasInferred() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public boolean getInferred() { - return inferred_; - } - - // optional bool deletedbyinference = 2; - public static final int DELETEDBYINFERENCE_FIELD_NUMBER = 2; - private boolean deletedbyinference_; - public boolean hasDeletedbyinference() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - public boolean getDeletedbyinference() { - return deletedbyinference_; - } - - // optional string trust = 3; - public static final int TRUST_FIELD_NUMBER = 3; - private java.lang.Object trust_; - public boolean hasTrust() { - return ((bitField0_ & 0x00000008) == 0x00000008); - } - public String getTrust() { - java.lang.Object ref = trust_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - trust_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getTrustBytes() { - java.lang.Object ref = trust_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - trust_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // optional string inferenceprovenance = 4; - public static final int INFERENCEPROVENANCE_FIELD_NUMBER = 4; - private java.lang.Object inferenceprovenance_; - public boolean hasInferenceprovenance() { - return ((bitField0_ & 0x00000010) == 0x00000010); - } - public String getInferenceprovenance() { - java.lang.Object ref = inferenceprovenance_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - inferenceprovenance_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getInferenceprovenanceBytes() { - java.lang.Object ref = inferenceprovenance_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - inferenceprovenance_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // required .eu.dnetlib.data.proto.Qualifier provenanceaction = 5; - public static final int PROVENANCEACTION_FIELD_NUMBER = 5; - private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier provenanceaction_; - public boolean hasProvenanceaction() { - return ((bitField0_ & 0x00000020) == 0x00000020); - } - public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getProvenanceaction() { - return provenanceaction_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getProvenanceactionOrBuilder() { - return provenanceaction_; - } - - private void initFields() { - invisible_ = false; - inferred_ = false; - deletedbyinference_ = false; - trust_ = ""; - inferenceprovenance_ = ""; - provenanceaction_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - if (!hasProvenanceaction()) { - memoizedIsInitialized = 0; - return false; - } - if (!getProvenanceaction().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000002) == 0x00000002)) { - output.writeBool(1, inferred_); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - output.writeBool(2, deletedbyinference_); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - output.writeBytes(3, getTrustBytes()); - } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - output.writeBytes(4, getInferenceprovenanceBytes()); - } - if (((bitField0_ & 0x00000020) == 0x00000020)) { - output.writeMessage(5, provenanceaction_); - } - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeBool(6, invisible_); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000002) == 0x00000002)) { - size += com.google.protobuf.CodedOutputStream - .computeBoolSize(1, inferred_); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - size += com.google.protobuf.CodedOutputStream - .computeBoolSize(2, deletedbyinference_); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(3, getTrustBytes()); - } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(4, getInferenceprovenanceBytes()); - } - if (((bitField0_ & 0x00000020) == 0x00000020)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(5, provenanceaction_); - } - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeBoolSize(6, invisible_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static eu.dnetlib.data.proto.FieldTypeProtos.DataInfo parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.DataInfo parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.DataInfo parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.DataInfo parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.DataInfo parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.DataInfo parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.DataInfo parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.FieldTypeProtos.DataInfo parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.FieldTypeProtos.DataInfo parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.DataInfo parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(eu.dnetlib.data.proto.FieldTypeProtos.DataInfo prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder - implements eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_DataInfo_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_DataInfo_fieldAccessorTable; - } - - // Construct using eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - getProvenanceactionFieldBuilder(); - } - } - private static Builder create() { - return new Builder(); - } - - public Builder clear() { - super.clear(); - invisible_ = false; - bitField0_ = (bitField0_ & ~0x00000001); - inferred_ = false; - bitField0_ = (bitField0_ & ~0x00000002); - deletedbyinference_ = false; - bitField0_ = (bitField0_ & ~0x00000004); - trust_ = ""; - bitField0_ = (bitField0_ & ~0x00000008); - inferenceprovenance_ = ""; - bitField0_ = (bitField0_ & ~0x00000010); - if (provenanceactionBuilder_ == null) { - provenanceaction_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - } else { - provenanceactionBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000020); - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDescriptor(); - } - - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDefaultInstanceForType() { - return eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); - } - - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo build() { - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - private eu.dnetlib.data.proto.FieldTypeProtos.DataInfo buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return result; - } - - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo buildPartial() { - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo result = new eu.dnetlib.data.proto.FieldTypeProtos.DataInfo(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - result.invisible_ = invisible_; - if (((from_bitField0_ & 0x00000002) == 0x00000002)) { - to_bitField0_ |= 0x00000002; - } - result.inferred_ = inferred_; - if (((from_bitField0_ & 0x00000004) == 0x00000004)) { - to_bitField0_ |= 0x00000004; - } - result.deletedbyinference_ = deletedbyinference_; - if (((from_bitField0_ & 0x00000008) == 0x00000008)) { - to_bitField0_ |= 0x00000008; - } - result.trust_ = trust_; - if (((from_bitField0_ & 0x00000010) == 0x00000010)) { - to_bitField0_ |= 0x00000010; - } - result.inferenceprovenance_ = inferenceprovenance_; - if (((from_bitField0_ & 0x00000020) == 0x00000020)) { - to_bitField0_ |= 0x00000020; - } - if (provenanceactionBuilder_ == null) { - result.provenanceaction_ = provenanceaction_; - } else { - result.provenanceaction_ = provenanceactionBuilder_.build(); - } - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof eu.dnetlib.data.proto.FieldTypeProtos.DataInfo) { - return mergeFrom((eu.dnetlib.data.proto.FieldTypeProtos.DataInfo)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(eu.dnetlib.data.proto.FieldTypeProtos.DataInfo other) { - if (other == eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance()) return this; - if (other.hasInvisible()) { - setInvisible(other.getInvisible()); - } - if (other.hasInferred()) { - setInferred(other.getInferred()); - } - if (other.hasDeletedbyinference()) { - setDeletedbyinference(other.getDeletedbyinference()); - } - if (other.hasTrust()) { - setTrust(other.getTrust()); - } - if (other.hasInferenceprovenance()) { - setInferenceprovenance(other.getInferenceprovenance()); - } - if (other.hasProvenanceaction()) { - mergeProvenanceaction(other.getProvenanceaction()); - } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - - public final boolean isInitialized() { - if (!hasProvenanceaction()) { - - return false; - } - if (!getProvenanceaction().isInitialized()) { - - return false; - } - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - } - break; - } - case 8: { - bitField0_ |= 0x00000002; - inferred_ = input.readBool(); - break; - } - case 16: { - bitField0_ |= 0x00000004; - deletedbyinference_ = input.readBool(); - break; - } - case 26: { - bitField0_ |= 0x00000008; - trust_ = input.readBytes(); - break; - } - case 34: { - bitField0_ |= 0x00000010; - inferenceprovenance_ = input.readBytes(); - break; - } - case 42: { - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(); - if (hasProvenanceaction()) { - subBuilder.mergeFrom(getProvenanceaction()); - } - input.readMessage(subBuilder, extensionRegistry); - setProvenanceaction(subBuilder.buildPartial()); - break; - } - case 48: { - bitField0_ |= 0x00000001; - invisible_ = input.readBool(); - break; - } - } - } - } - - private int bitField0_; - - // optional bool invisible = 6 [default = false]; - private boolean invisible_ ; - public boolean hasInvisible() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public boolean getInvisible() { - return invisible_; - } - public Builder setInvisible(boolean value) { - bitField0_ |= 0x00000001; - invisible_ = value; - onChanged(); - return this; - } - public Builder clearInvisible() { - bitField0_ = (bitField0_ & ~0x00000001); - invisible_ = false; - onChanged(); - return this; - } - - // optional bool inferred = 1; - private boolean inferred_ ; - public boolean hasInferred() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public boolean getInferred() { - return inferred_; - } - public Builder setInferred(boolean value) { - bitField0_ |= 0x00000002; - inferred_ = value; - onChanged(); - return this; - } - public Builder clearInferred() { - bitField0_ = (bitField0_ & ~0x00000002); - inferred_ = false; - onChanged(); - return this; - } - - // optional bool deletedbyinference = 2; - private boolean deletedbyinference_ ; - public boolean hasDeletedbyinference() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - public boolean getDeletedbyinference() { - return deletedbyinference_; - } - public Builder setDeletedbyinference(boolean value) { - bitField0_ |= 0x00000004; - deletedbyinference_ = value; - onChanged(); - return this; - } - public Builder clearDeletedbyinference() { - bitField0_ = (bitField0_ & ~0x00000004); - deletedbyinference_ = false; - onChanged(); - return this; - } - - // optional string trust = 3; - private java.lang.Object trust_ = ""; - public boolean hasTrust() { - return ((bitField0_ & 0x00000008) == 0x00000008); - } - public String getTrust() { - java.lang.Object ref = trust_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - trust_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setTrust(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000008; - trust_ = value; - onChanged(); - return this; - } - public Builder clearTrust() { - bitField0_ = (bitField0_ & ~0x00000008); - trust_ = getDefaultInstance().getTrust(); - onChanged(); - return this; - } - void setTrust(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000008; - trust_ = value; - onChanged(); - } - - // optional string inferenceprovenance = 4; - private java.lang.Object inferenceprovenance_ = ""; - public boolean hasInferenceprovenance() { - return ((bitField0_ & 0x00000010) == 0x00000010); - } - public String getInferenceprovenance() { - java.lang.Object ref = inferenceprovenance_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - inferenceprovenance_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setInferenceprovenance(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000010; - inferenceprovenance_ = value; - onChanged(); - return this; - } - public Builder clearInferenceprovenance() { - bitField0_ = (bitField0_ & ~0x00000010); - inferenceprovenance_ = getDefaultInstance().getInferenceprovenance(); - onChanged(); - return this; - } - void setInferenceprovenance(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000010; - inferenceprovenance_ = value; - onChanged(); - } - - // required .eu.dnetlib.data.proto.Qualifier provenanceaction = 5; - private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier provenanceaction_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> provenanceactionBuilder_; - public boolean hasProvenanceaction() { - return ((bitField0_ & 0x00000020) == 0x00000020); - } - public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getProvenanceaction() { - if (provenanceactionBuilder_ == null) { - return provenanceaction_; - } else { - return provenanceactionBuilder_.getMessage(); - } - } - public Builder setProvenanceaction(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { - if (provenanceactionBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - provenanceaction_ = value; - onChanged(); - } else { - provenanceactionBuilder_.setMessage(value); - } - bitField0_ |= 0x00000020; - return this; - } - public Builder setProvenanceaction( - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder builderForValue) { - if (provenanceactionBuilder_ == null) { - provenanceaction_ = builderForValue.build(); - onChanged(); - } else { - provenanceactionBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000020; - return this; - } - public Builder mergeProvenanceaction(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { - if (provenanceactionBuilder_ == null) { - if (((bitField0_ & 0x00000020) == 0x00000020) && - provenanceaction_ != eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance()) { - provenanceaction_ = - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(provenanceaction_).mergeFrom(value).buildPartial(); - } else { - provenanceaction_ = value; - } - onChanged(); - } else { - provenanceactionBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000020; - return this; - } - public Builder clearProvenanceaction() { - if (provenanceactionBuilder_ == null) { - provenanceaction_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - onChanged(); - } else { - provenanceactionBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000020); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder getProvenanceactionBuilder() { - bitField0_ |= 0x00000020; - onChanged(); - return getProvenanceactionFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getProvenanceactionOrBuilder() { - if (provenanceactionBuilder_ != null) { - return provenanceactionBuilder_.getMessageOrBuilder(); - } else { - return provenanceaction_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> - getProvenanceactionFieldBuilder() { - if (provenanceactionBuilder_ == null) { - provenanceactionBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder>( - provenanceaction_, - getParentForChildren(), - isClean()); - provenanceaction_ = null; - } - return provenanceactionBuilder_; - } - - // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.DataInfo) - } - - static { - defaultInstance = new DataInfo(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.DataInfo) - } - - public interface OAIProvenanceOrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // optional .eu.dnetlib.data.proto.OAIProvenance.OriginDescription originDescription = 1; - boolean hasOriginDescription(); - eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription getOriginDescription(); - eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescriptionOrBuilder getOriginDescriptionOrBuilder(); - } - public static final class OAIProvenance extends - com.google.protobuf.GeneratedMessage - implements OAIProvenanceOrBuilder { - // Use OAIProvenance.newBuilder() to construct. - private OAIProvenance(Builder builder) { - super(builder); - } - private OAIProvenance(boolean noInit) {} - - private static final OAIProvenance defaultInstance; - public static OAIProvenance getDefaultInstance() { - return defaultInstance; - } - - public OAIProvenance getDefaultInstanceForType() { - return defaultInstance; - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_OAIProvenance_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_OAIProvenance_fieldAccessorTable; - } - - public interface OriginDescriptionOrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // optional string harvestDate = 1; - boolean hasHarvestDate(); - String getHarvestDate(); - - // optional bool altered = 2 [default = true]; - boolean hasAltered(); - boolean getAltered(); - - // optional string baseURL = 3; - boolean hasBaseURL(); - String getBaseURL(); - - // optional string identifier = 4; - boolean hasIdentifier(); - String getIdentifier(); - - // optional string datestamp = 5; - boolean hasDatestamp(); - String getDatestamp(); - - // optional string metadataNamespace = 6; - boolean hasMetadataNamespace(); - String getMetadataNamespace(); - - // optional .eu.dnetlib.data.proto.OAIProvenance.OriginDescription originDescription = 7; - boolean hasOriginDescription(); - eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription getOriginDescription(); - eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescriptionOrBuilder getOriginDescriptionOrBuilder(); - } - public static final class OriginDescription extends - com.google.protobuf.GeneratedMessage - implements OriginDescriptionOrBuilder { - // Use OriginDescription.newBuilder() to construct. - private OriginDescription(Builder builder) { - super(builder); - } - private OriginDescription(boolean noInit) {} - - private static final OriginDescription defaultInstance; - public static OriginDescription getDefaultInstance() { - return defaultInstance; - } - - public OriginDescription getDefaultInstanceForType() { - return defaultInstance; - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_OAIProvenance_OriginDescription_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_OAIProvenance_OriginDescription_fieldAccessorTable; - } - - private int bitField0_; - // optional string harvestDate = 1; - public static final int HARVESTDATE_FIELD_NUMBER = 1; - private java.lang.Object harvestDate_; - public boolean hasHarvestDate() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public String getHarvestDate() { - java.lang.Object ref = harvestDate_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - harvestDate_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getHarvestDateBytes() { - java.lang.Object ref = harvestDate_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - harvestDate_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // optional bool altered = 2 [default = true]; - public static final int ALTERED_FIELD_NUMBER = 2; - private boolean altered_; - public boolean hasAltered() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public boolean getAltered() { - return altered_; - } - - // optional string baseURL = 3; - public static final int BASEURL_FIELD_NUMBER = 3; - private java.lang.Object baseURL_; - public boolean hasBaseURL() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - public String getBaseURL() { - java.lang.Object ref = baseURL_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - baseURL_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getBaseURLBytes() { - java.lang.Object ref = baseURL_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - baseURL_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // optional string identifier = 4; - public static final int IDENTIFIER_FIELD_NUMBER = 4; - private java.lang.Object identifier_; - public boolean hasIdentifier() { - return ((bitField0_ & 0x00000008) == 0x00000008); - } - public String getIdentifier() { - java.lang.Object ref = identifier_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - identifier_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getIdentifierBytes() { - java.lang.Object ref = identifier_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - identifier_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // optional string datestamp = 5; - public static final int DATESTAMP_FIELD_NUMBER = 5; - private java.lang.Object datestamp_; - public boolean hasDatestamp() { - return ((bitField0_ & 0x00000010) == 0x00000010); - } - public String getDatestamp() { - java.lang.Object ref = datestamp_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - datestamp_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getDatestampBytes() { - java.lang.Object ref = datestamp_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - datestamp_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // optional string metadataNamespace = 6; - public static final int METADATANAMESPACE_FIELD_NUMBER = 6; - private java.lang.Object metadataNamespace_; - public boolean hasMetadataNamespace() { - return ((bitField0_ & 0x00000020) == 0x00000020); - } - public String getMetadataNamespace() { - java.lang.Object ref = metadataNamespace_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - metadataNamespace_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getMetadataNamespaceBytes() { - java.lang.Object ref = metadataNamespace_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - metadataNamespace_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // optional .eu.dnetlib.data.proto.OAIProvenance.OriginDescription originDescription = 7; - public static final int ORIGINDESCRIPTION_FIELD_NUMBER = 7; - private eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription originDescription_; - public boolean hasOriginDescription() { - return ((bitField0_ & 0x00000040) == 0x00000040); - } - public eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription getOriginDescription() { - return originDescription_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescriptionOrBuilder getOriginDescriptionOrBuilder() { - return originDescription_; - } - - private void initFields() { - harvestDate_ = ""; - altered_ = true; - baseURL_ = ""; - identifier_ = ""; - datestamp_ = ""; - metadataNamespace_ = ""; - originDescription_ = eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.getDefaultInstance(); - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeBytes(1, getHarvestDateBytes()); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - output.writeBool(2, altered_); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - output.writeBytes(3, getBaseURLBytes()); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - output.writeBytes(4, getIdentifierBytes()); - } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - output.writeBytes(5, getDatestampBytes()); - } - if (((bitField0_ & 0x00000020) == 0x00000020)) { - output.writeBytes(6, getMetadataNamespaceBytes()); - } - if (((bitField0_ & 0x00000040) == 0x00000040)) { - output.writeMessage(7, originDescription_); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(1, getHarvestDateBytes()); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - size += com.google.protobuf.CodedOutputStream - .computeBoolSize(2, altered_); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(3, getBaseURLBytes()); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(4, getIdentifierBytes()); - } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(5, getDatestampBytes()); - } - if (((bitField0_ & 0x00000020) == 0x00000020)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(6, getMetadataNamespaceBytes()); - } - if (((bitField0_ & 0x00000040) == 0x00000040)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(7, originDescription_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder - implements eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescriptionOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_OAIProvenance_OriginDescription_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_OAIProvenance_OriginDescription_fieldAccessorTable; - } - - // Construct using eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - getOriginDescriptionFieldBuilder(); - } - } - private static Builder create() { - return new Builder(); - } - - public Builder clear() { - super.clear(); - harvestDate_ = ""; - bitField0_ = (bitField0_ & ~0x00000001); - altered_ = true; - bitField0_ = (bitField0_ & ~0x00000002); - baseURL_ = ""; - bitField0_ = (bitField0_ & ~0x00000004); - identifier_ = ""; - bitField0_ = (bitField0_ & ~0x00000008); - datestamp_ = ""; - bitField0_ = (bitField0_ & ~0x00000010); - metadataNamespace_ = ""; - bitField0_ = (bitField0_ & ~0x00000020); - if (originDescriptionBuilder_ == null) { - originDescription_ = eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.getDefaultInstance(); - } else { - originDescriptionBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000040); - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.getDescriptor(); - } - - public eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription getDefaultInstanceForType() { - return eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.getDefaultInstance(); - } - - public eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription build() { - eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - private eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return result; - } - - public eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription buildPartial() { - eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription result = new eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - result.harvestDate_ = harvestDate_; - if (((from_bitField0_ & 0x00000002) == 0x00000002)) { - to_bitField0_ |= 0x00000002; - } - result.altered_ = altered_; - if (((from_bitField0_ & 0x00000004) == 0x00000004)) { - to_bitField0_ |= 0x00000004; - } - result.baseURL_ = baseURL_; - if (((from_bitField0_ & 0x00000008) == 0x00000008)) { - to_bitField0_ |= 0x00000008; - } - result.identifier_ = identifier_; - if (((from_bitField0_ & 0x00000010) == 0x00000010)) { - to_bitField0_ |= 0x00000010; - } - result.datestamp_ = datestamp_; - if (((from_bitField0_ & 0x00000020) == 0x00000020)) { - to_bitField0_ |= 0x00000020; - } - result.metadataNamespace_ = metadataNamespace_; - if (((from_bitField0_ & 0x00000040) == 0x00000040)) { - to_bitField0_ |= 0x00000040; - } - if (originDescriptionBuilder_ == null) { - result.originDescription_ = originDescription_; - } else { - result.originDescription_ = originDescriptionBuilder_.build(); - } - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription) { - return mergeFrom((eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription other) { - if (other == eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.getDefaultInstance()) return this; - if (other.hasHarvestDate()) { - setHarvestDate(other.getHarvestDate()); - } - if (other.hasAltered()) { - setAltered(other.getAltered()); - } - if (other.hasBaseURL()) { - setBaseURL(other.getBaseURL()); - } - if (other.hasIdentifier()) { - setIdentifier(other.getIdentifier()); - } - if (other.hasDatestamp()) { - setDatestamp(other.getDatestamp()); - } - if (other.hasMetadataNamespace()) { - setMetadataNamespace(other.getMetadataNamespace()); - } - if (other.hasOriginDescription()) { - mergeOriginDescription(other.getOriginDescription()); - } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - - public final boolean isInitialized() { - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - } - break; - } - case 10: { - bitField0_ |= 0x00000001; - harvestDate_ = input.readBytes(); - break; - } - case 16: { - bitField0_ |= 0x00000002; - altered_ = input.readBool(); - break; - } - case 26: { - bitField0_ |= 0x00000004; - baseURL_ = input.readBytes(); - break; - } - case 34: { - bitField0_ |= 0x00000008; - identifier_ = input.readBytes(); - break; - } - case 42: { - bitField0_ |= 0x00000010; - datestamp_ = input.readBytes(); - break; - } - case 50: { - bitField0_ |= 0x00000020; - metadataNamespace_ = input.readBytes(); - break; - } - case 58: { - eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.newBuilder(); - if (hasOriginDescription()) { - subBuilder.mergeFrom(getOriginDescription()); - } - input.readMessage(subBuilder, extensionRegistry); - setOriginDescription(subBuilder.buildPartial()); - break; - } - } - } - } - - private int bitField0_; - - // optional string harvestDate = 1; - private java.lang.Object harvestDate_ = ""; - public boolean hasHarvestDate() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public String getHarvestDate() { - java.lang.Object ref = harvestDate_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - harvestDate_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setHarvestDate(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000001; - harvestDate_ = value; - onChanged(); - return this; - } - public Builder clearHarvestDate() { - bitField0_ = (bitField0_ & ~0x00000001); - harvestDate_ = getDefaultInstance().getHarvestDate(); - onChanged(); - return this; - } - void setHarvestDate(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000001; - harvestDate_ = value; - onChanged(); - } - - // optional bool altered = 2 [default = true]; - private boolean altered_ = true; - public boolean hasAltered() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public boolean getAltered() { - return altered_; - } - public Builder setAltered(boolean value) { - bitField0_ |= 0x00000002; - altered_ = value; - onChanged(); - return this; - } - public Builder clearAltered() { - bitField0_ = (bitField0_ & ~0x00000002); - altered_ = true; - onChanged(); - return this; - } - - // optional string baseURL = 3; - private java.lang.Object baseURL_ = ""; - public boolean hasBaseURL() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - public String getBaseURL() { - java.lang.Object ref = baseURL_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - baseURL_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setBaseURL(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000004; - baseURL_ = value; - onChanged(); - return this; - } - public Builder clearBaseURL() { - bitField0_ = (bitField0_ & ~0x00000004); - baseURL_ = getDefaultInstance().getBaseURL(); - onChanged(); - return this; - } - void setBaseURL(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000004; - baseURL_ = value; - onChanged(); - } - - // optional string identifier = 4; - private java.lang.Object identifier_ = ""; - public boolean hasIdentifier() { - return ((bitField0_ & 0x00000008) == 0x00000008); - } - public String getIdentifier() { - java.lang.Object ref = identifier_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - identifier_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setIdentifier(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000008; - identifier_ = value; - onChanged(); - return this; - } - public Builder clearIdentifier() { - bitField0_ = (bitField0_ & ~0x00000008); - identifier_ = getDefaultInstance().getIdentifier(); - onChanged(); - return this; - } - void setIdentifier(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000008; - identifier_ = value; - onChanged(); - } - - // optional string datestamp = 5; - private java.lang.Object datestamp_ = ""; - public boolean hasDatestamp() { - return ((bitField0_ & 0x00000010) == 0x00000010); - } - public String getDatestamp() { - java.lang.Object ref = datestamp_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - datestamp_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setDatestamp(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000010; - datestamp_ = value; - onChanged(); - return this; - } - public Builder clearDatestamp() { - bitField0_ = (bitField0_ & ~0x00000010); - datestamp_ = getDefaultInstance().getDatestamp(); - onChanged(); - return this; - } - void setDatestamp(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000010; - datestamp_ = value; - onChanged(); - } - - // optional string metadataNamespace = 6; - private java.lang.Object metadataNamespace_ = ""; - public boolean hasMetadataNamespace() { - return ((bitField0_ & 0x00000020) == 0x00000020); - } - public String getMetadataNamespace() { - java.lang.Object ref = metadataNamespace_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - metadataNamespace_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setMetadataNamespace(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000020; - metadataNamespace_ = value; - onChanged(); - return this; - } - public Builder clearMetadataNamespace() { - bitField0_ = (bitField0_ & ~0x00000020); - metadataNamespace_ = getDefaultInstance().getMetadataNamespace(); - onChanged(); - return this; - } - void setMetadataNamespace(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000020; - metadataNamespace_ = value; - onChanged(); - } - - // optional .eu.dnetlib.data.proto.OAIProvenance.OriginDescription originDescription = 7; - private eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription originDescription_ = eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription, eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.Builder, eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescriptionOrBuilder> originDescriptionBuilder_; - public boolean hasOriginDescription() { - return ((bitField0_ & 0x00000040) == 0x00000040); - } - public eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription getOriginDescription() { - if (originDescriptionBuilder_ == null) { - return originDescription_; - } else { - return originDescriptionBuilder_.getMessage(); - } - } - public Builder setOriginDescription(eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription value) { - if (originDescriptionBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - originDescription_ = value; - onChanged(); - } else { - originDescriptionBuilder_.setMessage(value); - } - bitField0_ |= 0x00000040; - return this; - } - public Builder setOriginDescription( - eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.Builder builderForValue) { - if (originDescriptionBuilder_ == null) { - originDescription_ = builderForValue.build(); - onChanged(); - } else { - originDescriptionBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000040; - return this; - } - public Builder mergeOriginDescription(eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription value) { - if (originDescriptionBuilder_ == null) { - if (((bitField0_ & 0x00000040) == 0x00000040) && - originDescription_ != eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.getDefaultInstance()) { - originDescription_ = - eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.newBuilder(originDescription_).mergeFrom(value).buildPartial(); - } else { - originDescription_ = value; - } - onChanged(); - } else { - originDescriptionBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000040; - return this; - } - public Builder clearOriginDescription() { - if (originDescriptionBuilder_ == null) { - originDescription_ = eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.getDefaultInstance(); - onChanged(); - } else { - originDescriptionBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000040); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.Builder getOriginDescriptionBuilder() { - bitField0_ |= 0x00000040; - onChanged(); - return getOriginDescriptionFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescriptionOrBuilder getOriginDescriptionOrBuilder() { - if (originDescriptionBuilder_ != null) { - return originDescriptionBuilder_.getMessageOrBuilder(); - } else { - return originDescription_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription, eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.Builder, eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescriptionOrBuilder> - getOriginDescriptionFieldBuilder() { - if (originDescriptionBuilder_ == null) { - originDescriptionBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription, eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.Builder, eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescriptionOrBuilder>( - originDescription_, - getParentForChildren(), - isClean()); - originDescription_ = null; - } - return originDescriptionBuilder_; - } - - // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.OAIProvenance.OriginDescription) - } - - static { - defaultInstance = new OriginDescription(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.OAIProvenance.OriginDescription) - } - - private int bitField0_; - // optional .eu.dnetlib.data.proto.OAIProvenance.OriginDescription originDescription = 1; - public static final int ORIGINDESCRIPTION_FIELD_NUMBER = 1; - private eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription originDescription_; - public boolean hasOriginDescription() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription getOriginDescription() { - return originDescription_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescriptionOrBuilder getOriginDescriptionOrBuilder() { - return originDescription_; - } - - private void initFields() { - originDescription_ = eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.getDefaultInstance(); - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeMessage(1, originDescription_); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(1, originDescription_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder - implements eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenanceOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_OAIProvenance_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_OAIProvenance_fieldAccessorTable; - } - - // Construct using eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - getOriginDescriptionFieldBuilder(); - } - } - private static Builder create() { - return new Builder(); - } - - public Builder clear() { - super.clear(); - if (originDescriptionBuilder_ == null) { - originDescription_ = eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.getDefaultInstance(); - } else { - originDescriptionBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.getDescriptor(); - } - - public eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance getDefaultInstanceForType() { - return eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.getDefaultInstance(); - } - - public eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance build() { - eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - private eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return result; - } - - public eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance buildPartial() { - eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance result = new eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - if (originDescriptionBuilder_ == null) { - result.originDescription_ = originDescription_; - } else { - result.originDescription_ = originDescriptionBuilder_.build(); - } - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance) { - return mergeFrom((eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance other) { - if (other == eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.getDefaultInstance()) return this; - if (other.hasOriginDescription()) { - mergeOriginDescription(other.getOriginDescription()); - } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - - public final boolean isInitialized() { - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - } - break; - } - case 10: { - eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.newBuilder(); - if (hasOriginDescription()) { - subBuilder.mergeFrom(getOriginDescription()); - } - input.readMessage(subBuilder, extensionRegistry); - setOriginDescription(subBuilder.buildPartial()); - break; - } - } - } - } - - private int bitField0_; - - // optional .eu.dnetlib.data.proto.OAIProvenance.OriginDescription originDescription = 1; - private eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription originDescription_ = eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription, eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.Builder, eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescriptionOrBuilder> originDescriptionBuilder_; - public boolean hasOriginDescription() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription getOriginDescription() { - if (originDescriptionBuilder_ == null) { - return originDescription_; - } else { - return originDescriptionBuilder_.getMessage(); - } - } - public Builder setOriginDescription(eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription value) { - if (originDescriptionBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - originDescription_ = value; - onChanged(); - } else { - originDescriptionBuilder_.setMessage(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder setOriginDescription( - eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.Builder builderForValue) { - if (originDescriptionBuilder_ == null) { - originDescription_ = builderForValue.build(); - onChanged(); - } else { - originDescriptionBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder mergeOriginDescription(eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription value) { - if (originDescriptionBuilder_ == null) { - if (((bitField0_ & 0x00000001) == 0x00000001) && - originDescription_ != eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.getDefaultInstance()) { - originDescription_ = - eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.newBuilder(originDescription_).mergeFrom(value).buildPartial(); - } else { - originDescription_ = value; - } - onChanged(); - } else { - originDescriptionBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder clearOriginDescription() { - if (originDescriptionBuilder_ == null) { - originDescription_ = eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.getDefaultInstance(); - onChanged(); - } else { - originDescriptionBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.Builder getOriginDescriptionBuilder() { - bitField0_ |= 0x00000001; - onChanged(); - return getOriginDescriptionFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescriptionOrBuilder getOriginDescriptionOrBuilder() { - if (originDescriptionBuilder_ != null) { - return originDescriptionBuilder_.getMessageOrBuilder(); - } else { - return originDescription_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription, eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.Builder, eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescriptionOrBuilder> - getOriginDescriptionFieldBuilder() { - if (originDescriptionBuilder_ == null) { - originDescriptionBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription, eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.Builder, eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescriptionOrBuilder>( - originDescription_, - getParentForChildren(), - isClean()); - originDescription_ = null; - } - return originDescriptionBuilder_; - } - - // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.OAIProvenance) - } - - static { - defaultInstance = new OAIProvenance(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.OAIProvenance) - } - - public interface ExtraInfoOrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // required string name = 1; - boolean hasName(); - String getName(); - - // required string typology = 2; - boolean hasTypology(); - String getTypology(); - - // required string provenance = 3; - boolean hasProvenance(); - String getProvenance(); - - // optional string trust = 4; - boolean hasTrust(); - String getTrust(); - - // optional string value = 5; - boolean hasValue(); - String getValue(); - } - public static final class ExtraInfo extends - com.google.protobuf.GeneratedMessage - implements ExtraInfoOrBuilder { - // Use ExtraInfo.newBuilder() to construct. - private ExtraInfo(Builder builder) { - super(builder); - } - private ExtraInfo(boolean noInit) {} - - private static final ExtraInfo defaultInstance; - public static ExtraInfo getDefaultInstance() { - return defaultInstance; - } - - public ExtraInfo getDefaultInstanceForType() { - return defaultInstance; - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_ExtraInfo_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_ExtraInfo_fieldAccessorTable; - } - - private int bitField0_; - // required string name = 1; - public static final int NAME_FIELD_NUMBER = 1; - private java.lang.Object name_; - public boolean hasName() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public String getName() { - java.lang.Object ref = name_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - name_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getNameBytes() { - java.lang.Object ref = name_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - name_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // required string typology = 2; - public static final int TYPOLOGY_FIELD_NUMBER = 2; - private java.lang.Object typology_; - public boolean hasTypology() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public String getTypology() { - java.lang.Object ref = typology_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - typology_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getTypologyBytes() { - java.lang.Object ref = typology_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - typology_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // required string provenance = 3; - public static final int PROVENANCE_FIELD_NUMBER = 3; - private java.lang.Object provenance_; - public boolean hasProvenance() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - public String getProvenance() { - java.lang.Object ref = provenance_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - provenance_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getProvenanceBytes() { - java.lang.Object ref = provenance_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - provenance_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // optional string trust = 4; - public static final int TRUST_FIELD_NUMBER = 4; - private java.lang.Object trust_; - public boolean hasTrust() { - return ((bitField0_ & 0x00000008) == 0x00000008); - } - public String getTrust() { - java.lang.Object ref = trust_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - trust_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getTrustBytes() { - java.lang.Object ref = trust_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - trust_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // optional string value = 5; - public static final int VALUE_FIELD_NUMBER = 5; - private java.lang.Object value_; - public boolean hasValue() { - return ((bitField0_ & 0x00000010) == 0x00000010); - } - public String getValue() { - java.lang.Object ref = value_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - value_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getValueBytes() { - java.lang.Object ref = value_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - value_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - private void initFields() { - name_ = ""; - typology_ = ""; - provenance_ = ""; - trust_ = ""; - value_ = ""; - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - if (!hasName()) { - memoizedIsInitialized = 0; - return false; - } - if (!hasTypology()) { - memoizedIsInitialized = 0; - return false; - } - if (!hasProvenance()) { - memoizedIsInitialized = 0; - return false; - } - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeBytes(1, getNameBytes()); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - output.writeBytes(2, getTypologyBytes()); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - output.writeBytes(3, getProvenanceBytes()); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - output.writeBytes(4, getTrustBytes()); - } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - output.writeBytes(5, getValueBytes()); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(1, getNameBytes()); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(2, getTypologyBytes()); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(3, getProvenanceBytes()); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(4, getTrustBytes()); - } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(5, getValueBytes()); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder - implements eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfoOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_ExtraInfo_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_ExtraInfo_fieldAccessorTable; - } - - // Construct using eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - } - } - private static Builder create() { - return new Builder(); - } - - public Builder clear() { - super.clear(); - name_ = ""; - bitField0_ = (bitField0_ & ~0x00000001); - typology_ = ""; - bitField0_ = (bitField0_ & ~0x00000002); - provenance_ = ""; - bitField0_ = (bitField0_ & ~0x00000004); - trust_ = ""; - bitField0_ = (bitField0_ & ~0x00000008); - value_ = ""; - bitField0_ = (bitField0_ & ~0x00000010); - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo.getDescriptor(); - } - - public eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo getDefaultInstanceForType() { - return eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo.getDefaultInstance(); - } - - public eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo build() { - eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - private eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return result; - } - - public eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo buildPartial() { - eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo result = new eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - result.name_ = name_; - if (((from_bitField0_ & 0x00000002) == 0x00000002)) { - to_bitField0_ |= 0x00000002; - } - result.typology_ = typology_; - if (((from_bitField0_ & 0x00000004) == 0x00000004)) { - to_bitField0_ |= 0x00000004; - } - result.provenance_ = provenance_; - if (((from_bitField0_ & 0x00000008) == 0x00000008)) { - to_bitField0_ |= 0x00000008; - } - result.trust_ = trust_; - if (((from_bitField0_ & 0x00000010) == 0x00000010)) { - to_bitField0_ |= 0x00000010; - } - result.value_ = value_; - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo) { - return mergeFrom((eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo other) { - if (other == eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo.getDefaultInstance()) return this; - if (other.hasName()) { - setName(other.getName()); - } - if (other.hasTypology()) { - setTypology(other.getTypology()); - } - if (other.hasProvenance()) { - setProvenance(other.getProvenance()); - } - if (other.hasTrust()) { - setTrust(other.getTrust()); - } - if (other.hasValue()) { - setValue(other.getValue()); - } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - - public final boolean isInitialized() { - if (!hasName()) { - - return false; - } - if (!hasTypology()) { - - return false; - } - if (!hasProvenance()) { - - return false; - } - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - } - break; - } - case 10: { - bitField0_ |= 0x00000001; - name_ = input.readBytes(); - break; - } - case 18: { - bitField0_ |= 0x00000002; - typology_ = input.readBytes(); - break; - } - case 26: { - bitField0_ |= 0x00000004; - provenance_ = input.readBytes(); - break; - } - case 34: { - bitField0_ |= 0x00000008; - trust_ = input.readBytes(); - break; - } - case 42: { - bitField0_ |= 0x00000010; - value_ = input.readBytes(); - break; - } - } - } - } - - private int bitField0_; - - // required string name = 1; - private java.lang.Object name_ = ""; - public boolean hasName() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public String getName() { - java.lang.Object ref = name_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - name_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setName(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000001; - name_ = value; - onChanged(); - return this; - } - public Builder clearName() { - bitField0_ = (bitField0_ & ~0x00000001); - name_ = getDefaultInstance().getName(); - onChanged(); - return this; - } - void setName(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000001; - name_ = value; - onChanged(); - } - - // required string typology = 2; - private java.lang.Object typology_ = ""; - public boolean hasTypology() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public String getTypology() { - java.lang.Object ref = typology_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - typology_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setTypology(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000002; - typology_ = value; - onChanged(); - return this; - } - public Builder clearTypology() { - bitField0_ = (bitField0_ & ~0x00000002); - typology_ = getDefaultInstance().getTypology(); - onChanged(); - return this; - } - void setTypology(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000002; - typology_ = value; - onChanged(); - } - - // required string provenance = 3; - private java.lang.Object provenance_ = ""; - public boolean hasProvenance() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - public String getProvenance() { - java.lang.Object ref = provenance_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - provenance_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setProvenance(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000004; - provenance_ = value; - onChanged(); - return this; - } - public Builder clearProvenance() { - bitField0_ = (bitField0_ & ~0x00000004); - provenance_ = getDefaultInstance().getProvenance(); - onChanged(); - return this; - } - void setProvenance(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000004; - provenance_ = value; - onChanged(); - } - - // optional string trust = 4; - private java.lang.Object trust_ = ""; - public boolean hasTrust() { - return ((bitField0_ & 0x00000008) == 0x00000008); - } - public String getTrust() { - java.lang.Object ref = trust_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - trust_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setTrust(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000008; - trust_ = value; - onChanged(); - return this; - } - public Builder clearTrust() { - bitField0_ = (bitField0_ & ~0x00000008); - trust_ = getDefaultInstance().getTrust(); - onChanged(); - return this; - } - void setTrust(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000008; - trust_ = value; - onChanged(); - } - - // optional string value = 5; - private java.lang.Object value_ = ""; - public boolean hasValue() { - return ((bitField0_ & 0x00000010) == 0x00000010); - } - public String getValue() { - java.lang.Object ref = value_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - value_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setValue(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000010; - value_ = value; - onChanged(); - return this; - } - public Builder clearValue() { - bitField0_ = (bitField0_ & ~0x00000010); - value_ = getDefaultInstance().getValue(); - onChanged(); - return this; - } - void setValue(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000010; - value_ = value; - onChanged(); - } - - // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.ExtraInfo) - } - - static { - defaultInstance = new ExtraInfo(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.ExtraInfo) - } - - public interface AuthorOrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // required string fullname = 1; - boolean hasFullname(); - String getFullname(); - - // optional string name = 2; - boolean hasName(); - String getName(); - - // optional string surname = 3; - boolean hasSurname(); - String getSurname(); - - // required int32 rank = 4; - boolean hasRank(); - int getRank(); - - // repeated .eu.dnetlib.data.proto.KeyValue pid = 5; - java.util.List - getPidList(); - eu.dnetlib.data.proto.FieldTypeProtos.KeyValue getPid(int index); - int getPidCount(); - java.util.List - getPidOrBuilderList(); - eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder getPidOrBuilder( - int index); - - // repeated .eu.dnetlib.data.proto.StringField affiliation = 6; - java.util.List - getAffiliationList(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getAffiliation(int index); - int getAffiliationCount(); - java.util.List - getAffiliationOrBuilderList(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getAffiliationOrBuilder( - int index); - } - public static final class Author extends - com.google.protobuf.GeneratedMessage - implements AuthorOrBuilder { - // Use Author.newBuilder() to construct. - private Author(Builder builder) { - super(builder); - } - private Author(boolean noInit) {} - - private static final Author defaultInstance; - public static Author getDefaultInstance() { - return defaultInstance; - } - - public Author getDefaultInstanceForType() { - return defaultInstance; - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_Author_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_Author_fieldAccessorTable; - } - - private int bitField0_; - // required string fullname = 1; - public static final int FULLNAME_FIELD_NUMBER = 1; - private java.lang.Object fullname_; - public boolean hasFullname() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public String getFullname() { - java.lang.Object ref = fullname_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - fullname_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getFullnameBytes() { - java.lang.Object ref = fullname_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - fullname_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // optional string name = 2; - public static final int NAME_FIELD_NUMBER = 2; - private java.lang.Object name_; - public boolean hasName() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public String getName() { - java.lang.Object ref = name_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - name_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getNameBytes() { - java.lang.Object ref = name_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - name_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // optional string surname = 3; - public static final int SURNAME_FIELD_NUMBER = 3; - private java.lang.Object surname_; - public boolean hasSurname() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - public String getSurname() { - java.lang.Object ref = surname_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - surname_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getSurnameBytes() { - java.lang.Object ref = surname_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - surname_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // required int32 rank = 4; - public static final int RANK_FIELD_NUMBER = 4; - private int rank_; - public boolean hasRank() { - return ((bitField0_ & 0x00000008) == 0x00000008); - } - public int getRank() { - return rank_; - } - - // repeated .eu.dnetlib.data.proto.KeyValue pid = 5; - public static final int PID_FIELD_NUMBER = 5; - private java.util.List pid_; - public java.util.List getPidList() { - return pid_; - } - public java.util.List - getPidOrBuilderList() { - return pid_; - } - public int getPidCount() { - return pid_.size(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue getPid(int index) { - return pid_.get(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder getPidOrBuilder( - int index) { - return pid_.get(index); - } - - // repeated .eu.dnetlib.data.proto.StringField affiliation = 6; - public static final int AFFILIATION_FIELD_NUMBER = 6; - private java.util.List affiliation_; - public java.util.List getAffiliationList() { - return affiliation_; - } - public java.util.List - getAffiliationOrBuilderList() { - return affiliation_; - } - public int getAffiliationCount() { - return affiliation_.size(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getAffiliation(int index) { - return affiliation_.get(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getAffiliationOrBuilder( - int index) { - return affiliation_.get(index); - } - - private void initFields() { - fullname_ = ""; - name_ = ""; - surname_ = ""; - rank_ = 0; - pid_ = java.util.Collections.emptyList(); - affiliation_ = java.util.Collections.emptyList(); - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - if (!hasFullname()) { - memoizedIsInitialized = 0; - return false; - } - if (!hasRank()) { - memoizedIsInitialized = 0; - return false; - } - for (int i = 0; i < getPidCount(); i++) { - if (!getPid(i).isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - for (int i = 0; i < getAffiliationCount(); i++) { - if (!getAffiliation(i).isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeBytes(1, getFullnameBytes()); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - output.writeBytes(2, getNameBytes()); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - output.writeBytes(3, getSurnameBytes()); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - output.writeInt32(4, rank_); - } - for (int i = 0; i < pid_.size(); i++) { - output.writeMessage(5, pid_.get(i)); - } - for (int i = 0; i < affiliation_.size(); i++) { - output.writeMessage(6, affiliation_.get(i)); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(1, getFullnameBytes()); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(2, getNameBytes()); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(3, getSurnameBytes()); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - size += com.google.protobuf.CodedOutputStream - .computeInt32Size(4, rank_); - } - for (int i = 0; i < pid_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(5, pid_.get(i)); - } - for (int i = 0; i < affiliation_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(6, affiliation_.get(i)); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static eu.dnetlib.data.proto.FieldTypeProtos.Author parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.Author parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.Author parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.Author parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.Author parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.Author parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.Author parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.FieldTypeProtos.Author parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.FieldTypeProtos.Author parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.FieldTypeProtos.Author parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(eu.dnetlib.data.proto.FieldTypeProtos.Author prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder - implements eu.dnetlib.data.proto.FieldTypeProtos.AuthorOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_Author_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.FieldTypeProtos.internal_static_eu_dnetlib_data_proto_Author_fieldAccessorTable; - } - - // Construct using eu.dnetlib.data.proto.FieldTypeProtos.Author.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - getPidFieldBuilder(); - getAffiliationFieldBuilder(); - } - } - private static Builder create() { - return new Builder(); - } - - public Builder clear() { - super.clear(); - fullname_ = ""; - bitField0_ = (bitField0_ & ~0x00000001); - name_ = ""; - bitField0_ = (bitField0_ & ~0x00000002); - surname_ = ""; - bitField0_ = (bitField0_ & ~0x00000004); - rank_ = 0; - bitField0_ = (bitField0_ & ~0x00000008); - if (pidBuilder_ == null) { - pid_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000010); - } else { - pidBuilder_.clear(); - } - if (affiliationBuilder_ == null) { - affiliation_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000020); - } else { - affiliationBuilder_.clear(); - } - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return eu.dnetlib.data.proto.FieldTypeProtos.Author.getDescriptor(); - } - - public eu.dnetlib.data.proto.FieldTypeProtos.Author getDefaultInstanceForType() { - return eu.dnetlib.data.proto.FieldTypeProtos.Author.getDefaultInstance(); - } - - public eu.dnetlib.data.proto.FieldTypeProtos.Author build() { - eu.dnetlib.data.proto.FieldTypeProtos.Author result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - private eu.dnetlib.data.proto.FieldTypeProtos.Author buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - eu.dnetlib.data.proto.FieldTypeProtos.Author result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return result; - } - - public eu.dnetlib.data.proto.FieldTypeProtos.Author buildPartial() { - eu.dnetlib.data.proto.FieldTypeProtos.Author result = new eu.dnetlib.data.proto.FieldTypeProtos.Author(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - result.fullname_ = fullname_; - if (((from_bitField0_ & 0x00000002) == 0x00000002)) { - to_bitField0_ |= 0x00000002; - } - result.name_ = name_; - if (((from_bitField0_ & 0x00000004) == 0x00000004)) { - to_bitField0_ |= 0x00000004; - } - result.surname_ = surname_; - if (((from_bitField0_ & 0x00000008) == 0x00000008)) { - to_bitField0_ |= 0x00000008; - } - result.rank_ = rank_; - if (pidBuilder_ == null) { - if (((bitField0_ & 0x00000010) == 0x00000010)) { - pid_ = java.util.Collections.unmodifiableList(pid_); - bitField0_ = (bitField0_ & ~0x00000010); - } - result.pid_ = pid_; - } else { - result.pid_ = pidBuilder_.build(); - } - if (affiliationBuilder_ == null) { - if (((bitField0_ & 0x00000020) == 0x00000020)) { - affiliation_ = java.util.Collections.unmodifiableList(affiliation_); - bitField0_ = (bitField0_ & ~0x00000020); - } - result.affiliation_ = affiliation_; - } else { - result.affiliation_ = affiliationBuilder_.build(); - } - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof eu.dnetlib.data.proto.FieldTypeProtos.Author) { - return mergeFrom((eu.dnetlib.data.proto.FieldTypeProtos.Author)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(eu.dnetlib.data.proto.FieldTypeProtos.Author other) { - if (other == eu.dnetlib.data.proto.FieldTypeProtos.Author.getDefaultInstance()) return this; - if (other.hasFullname()) { - setFullname(other.getFullname()); - } - if (other.hasName()) { - setName(other.getName()); - } - if (other.hasSurname()) { - setSurname(other.getSurname()); - } - if (other.hasRank()) { - setRank(other.getRank()); - } - if (pidBuilder_ == null) { - if (!other.pid_.isEmpty()) { - if (pid_.isEmpty()) { - pid_ = other.pid_; - bitField0_ = (bitField0_ & ~0x00000010); - } else { - ensurePidIsMutable(); - pid_.addAll(other.pid_); - } - onChanged(); - } - } else { - if (!other.pid_.isEmpty()) { - if (pidBuilder_.isEmpty()) { - pidBuilder_.dispose(); - pidBuilder_ = null; - pid_ = other.pid_; - bitField0_ = (bitField0_ & ~0x00000010); - pidBuilder_ = - com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? - getPidFieldBuilder() : null; - } else { - pidBuilder_.addAllMessages(other.pid_); - } - } - } - if (affiliationBuilder_ == null) { - if (!other.affiliation_.isEmpty()) { - if (affiliation_.isEmpty()) { - affiliation_ = other.affiliation_; - bitField0_ = (bitField0_ & ~0x00000020); - } else { - ensureAffiliationIsMutable(); - affiliation_.addAll(other.affiliation_); - } - onChanged(); - } - } else { - if (!other.affiliation_.isEmpty()) { - if (affiliationBuilder_.isEmpty()) { - affiliationBuilder_.dispose(); - affiliationBuilder_ = null; - affiliation_ = other.affiliation_; - bitField0_ = (bitField0_ & ~0x00000020); - affiliationBuilder_ = - com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? - getAffiliationFieldBuilder() : null; - } else { - affiliationBuilder_.addAllMessages(other.affiliation_); - } - } - } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - - public final boolean isInitialized() { - if (!hasFullname()) { - - return false; - } - if (!hasRank()) { - - return false; - } - for (int i = 0; i < getPidCount(); i++) { - if (!getPid(i).isInitialized()) { - - return false; - } - } - for (int i = 0; i < getAffiliationCount(); i++) { - if (!getAffiliation(i).isInitialized()) { - - return false; - } - } - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - } - break; - } - case 10: { - bitField0_ |= 0x00000001; - fullname_ = input.readBytes(); - break; - } - case 18: { - bitField0_ |= 0x00000002; - name_ = input.readBytes(); - break; - } - case 26: { - bitField0_ |= 0x00000004; - surname_ = input.readBytes(); - break; - } - case 32: { - bitField0_ |= 0x00000008; - rank_ = input.readInt32(); - break; - } - case 42: { - eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.newBuilder(); - input.readMessage(subBuilder, extensionRegistry); - addPid(subBuilder.buildPartial()); - break; - } - case 50: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - input.readMessage(subBuilder, extensionRegistry); - addAffiliation(subBuilder.buildPartial()); - break; - } - } - } - } - - private int bitField0_; - - // required string fullname = 1; - private java.lang.Object fullname_ = ""; - public boolean hasFullname() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public String getFullname() { - java.lang.Object ref = fullname_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - fullname_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setFullname(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000001; - fullname_ = value; - onChanged(); - return this; - } - public Builder clearFullname() { - bitField0_ = (bitField0_ & ~0x00000001); - fullname_ = getDefaultInstance().getFullname(); - onChanged(); - return this; - } - void setFullname(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000001; - fullname_ = value; - onChanged(); - } - - // optional string name = 2; - private java.lang.Object name_ = ""; - public boolean hasName() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public String getName() { - java.lang.Object ref = name_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - name_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setName(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000002; - name_ = value; - onChanged(); - return this; - } - public Builder clearName() { - bitField0_ = (bitField0_ & ~0x00000002); - name_ = getDefaultInstance().getName(); - onChanged(); - return this; - } - void setName(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000002; - name_ = value; - onChanged(); - } - - // optional string surname = 3; - private java.lang.Object surname_ = ""; - public boolean hasSurname() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - public String getSurname() { - java.lang.Object ref = surname_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - surname_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setSurname(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000004; - surname_ = value; - onChanged(); - return this; - } - public Builder clearSurname() { - bitField0_ = (bitField0_ & ~0x00000004); - surname_ = getDefaultInstance().getSurname(); - onChanged(); - return this; - } - void setSurname(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000004; - surname_ = value; - onChanged(); - } - - // required int32 rank = 4; - private int rank_ ; - public boolean hasRank() { - return ((bitField0_ & 0x00000008) == 0x00000008); - } - public int getRank() { - return rank_; - } - public Builder setRank(int value) { - bitField0_ |= 0x00000008; - rank_ = value; - onChanged(); - return this; - } - public Builder clearRank() { - bitField0_ = (bitField0_ & ~0x00000008); - rank_ = 0; - onChanged(); - return this; - } - - // repeated .eu.dnetlib.data.proto.KeyValue pid = 5; - private java.util.List pid_ = - java.util.Collections.emptyList(); - private void ensurePidIsMutable() { - if (!((bitField0_ & 0x00000010) == 0x00000010)) { - pid_ = new java.util.ArrayList(pid_); - bitField0_ |= 0x00000010; - } - } - - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.KeyValue, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder, eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder> pidBuilder_; - - public java.util.List getPidList() { - if (pidBuilder_ == null) { - return java.util.Collections.unmodifiableList(pid_); - } else { - return pidBuilder_.getMessageList(); - } - } - public int getPidCount() { - if (pidBuilder_ == null) { - return pid_.size(); - } else { - return pidBuilder_.getCount(); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue getPid(int index) { - if (pidBuilder_ == null) { - return pid_.get(index); - } else { - return pidBuilder_.getMessage(index); - } - } - public Builder setPid( - int index, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue value) { - if (pidBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensurePidIsMutable(); - pid_.set(index, value); - onChanged(); - } else { - pidBuilder_.setMessage(index, value); - } - return this; - } - public Builder setPid( - int index, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder builderForValue) { - if (pidBuilder_ == null) { - ensurePidIsMutable(); - pid_.set(index, builderForValue.build()); - onChanged(); - } else { - pidBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - public Builder addPid(eu.dnetlib.data.proto.FieldTypeProtos.KeyValue value) { - if (pidBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensurePidIsMutable(); - pid_.add(value); - onChanged(); - } else { - pidBuilder_.addMessage(value); - } - return this; - } - public Builder addPid( - int index, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue value) { - if (pidBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensurePidIsMutable(); - pid_.add(index, value); - onChanged(); - } else { - pidBuilder_.addMessage(index, value); - } - return this; - } - public Builder addPid( - eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder builderForValue) { - if (pidBuilder_ == null) { - ensurePidIsMutable(); - pid_.add(builderForValue.build()); - onChanged(); - } else { - pidBuilder_.addMessage(builderForValue.build()); - } - return this; - } - public Builder addPid( - int index, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder builderForValue) { - if (pidBuilder_ == null) { - ensurePidIsMutable(); - pid_.add(index, builderForValue.build()); - onChanged(); - } else { - pidBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - public Builder addAllPid( - java.lang.Iterable values) { - if (pidBuilder_ == null) { - ensurePidIsMutable(); - super.addAll(values, pid_); - onChanged(); - } else { - pidBuilder_.addAllMessages(values); - } - return this; - } - public Builder clearPid() { - if (pidBuilder_ == null) { - pid_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000010); - onChanged(); - } else { - pidBuilder_.clear(); - } - return this; - } - public Builder removePid(int index) { - if (pidBuilder_ == null) { - ensurePidIsMutable(); - pid_.remove(index); - onChanged(); - } else { - pidBuilder_.remove(index); - } - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder getPidBuilder( - int index) { - return getPidFieldBuilder().getBuilder(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder getPidOrBuilder( - int index) { - if (pidBuilder_ == null) { - return pid_.get(index); } else { - return pidBuilder_.getMessageOrBuilder(index); - } - } - public java.util.List - getPidOrBuilderList() { - if (pidBuilder_ != null) { - return pidBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(pid_); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder addPidBuilder() { - return getPidFieldBuilder().addBuilder( - eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.getDefaultInstance()); - } - public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder addPidBuilder( - int index) { - return getPidFieldBuilder().addBuilder( - index, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.getDefaultInstance()); - } - public java.util.List - getPidBuilderList() { - return getPidFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.KeyValue, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder, eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder> - getPidFieldBuilder() { - if (pidBuilder_ == null) { - pidBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.KeyValue, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder, eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder>( - pid_, - ((bitField0_ & 0x00000010) == 0x00000010), - getParentForChildren(), - isClean()); - pid_ = null; - } - return pidBuilder_; - } - - // repeated .eu.dnetlib.data.proto.StringField affiliation = 6; - private java.util.List affiliation_ = - java.util.Collections.emptyList(); - private void ensureAffiliationIsMutable() { - if (!((bitField0_ & 0x00000020) == 0x00000020)) { - affiliation_ = new java.util.ArrayList(affiliation_); - bitField0_ |= 0x00000020; - } - } - - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> affiliationBuilder_; - - public java.util.List getAffiliationList() { - if (affiliationBuilder_ == null) { - return java.util.Collections.unmodifiableList(affiliation_); - } else { - return affiliationBuilder_.getMessageList(); - } - } - public int getAffiliationCount() { - if (affiliationBuilder_ == null) { - return affiliation_.size(); - } else { - return affiliationBuilder_.getCount(); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getAffiliation(int index) { - if (affiliationBuilder_ == null) { - return affiliation_.get(index); - } else { - return affiliationBuilder_.getMessage(index); - } - } - public Builder setAffiliation( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (affiliationBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureAffiliationIsMutable(); - affiliation_.set(index, value); - onChanged(); - } else { - affiliationBuilder_.setMessage(index, value); - } - return this; - } - public Builder setAffiliation( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (affiliationBuilder_ == null) { - ensureAffiliationIsMutable(); - affiliation_.set(index, builderForValue.build()); - onChanged(); - } else { - affiliationBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - public Builder addAffiliation(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (affiliationBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureAffiliationIsMutable(); - affiliation_.add(value); - onChanged(); - } else { - affiliationBuilder_.addMessage(value); - } - return this; - } - public Builder addAffiliation( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (affiliationBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureAffiliationIsMutable(); - affiliation_.add(index, value); - onChanged(); - } else { - affiliationBuilder_.addMessage(index, value); - } - return this; - } - public Builder addAffiliation( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (affiliationBuilder_ == null) { - ensureAffiliationIsMutable(); - affiliation_.add(builderForValue.build()); - onChanged(); - } else { - affiliationBuilder_.addMessage(builderForValue.build()); - } - return this; - } - public Builder addAffiliation( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (affiliationBuilder_ == null) { - ensureAffiliationIsMutable(); - affiliation_.add(index, builderForValue.build()); - onChanged(); - } else { - affiliationBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - public Builder addAllAffiliation( - java.lang.Iterable values) { - if (affiliationBuilder_ == null) { - ensureAffiliationIsMutable(); - super.addAll(values, affiliation_); - onChanged(); - } else { - affiliationBuilder_.addAllMessages(values); - } - return this; - } - public Builder clearAffiliation() { - if (affiliationBuilder_ == null) { - affiliation_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000020); - onChanged(); - } else { - affiliationBuilder_.clear(); - } - return this; - } - public Builder removeAffiliation(int index) { - if (affiliationBuilder_ == null) { - ensureAffiliationIsMutable(); - affiliation_.remove(index); - onChanged(); - } else { - affiliationBuilder_.remove(index); - } - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getAffiliationBuilder( - int index) { - return getAffiliationFieldBuilder().getBuilder(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getAffiliationOrBuilder( - int index) { - if (affiliationBuilder_ == null) { - return affiliation_.get(index); } else { - return affiliationBuilder_.getMessageOrBuilder(index); - } - } - public java.util.List - getAffiliationOrBuilderList() { - if (affiliationBuilder_ != null) { - return affiliationBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(affiliation_); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addAffiliationBuilder() { - return getAffiliationFieldBuilder().addBuilder( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addAffiliationBuilder( - int index) { - return getAffiliationFieldBuilder().addBuilder( - index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); - } - public java.util.List - getAffiliationBuilderList() { - return getAffiliationFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getAffiliationFieldBuilder() { - if (affiliationBuilder_ == null) { - affiliationBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - affiliation_, - ((bitField0_ & 0x00000020) == 0x00000020), - getParentForChildren(), - isClean()); - affiliation_ = null; - } - return affiliationBuilder_; - } - - // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.Author) - } - - static { - defaultInstance = new Author(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.Author) - } - - private static com.google.protobuf.Descriptors.Descriptor - internal_static_eu_dnetlib_data_proto_StringField_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_eu_dnetlib_data_proto_StringField_fieldAccessorTable; - private static com.google.protobuf.Descriptors.Descriptor - internal_static_eu_dnetlib_data_proto_BoolField_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_eu_dnetlib_data_proto_BoolField_fieldAccessorTable; - private static com.google.protobuf.Descriptors.Descriptor - internal_static_eu_dnetlib_data_proto_IntField_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_eu_dnetlib_data_proto_IntField_fieldAccessorTable; - private static com.google.protobuf.Descriptors.Descriptor - internal_static_eu_dnetlib_data_proto_StructuredProperty_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_eu_dnetlib_data_proto_StructuredProperty_fieldAccessorTable; - private static com.google.protobuf.Descriptors.Descriptor - internal_static_eu_dnetlib_data_proto_KeyValue_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_eu_dnetlib_data_proto_KeyValue_fieldAccessorTable; - private static com.google.protobuf.Descriptors.Descriptor - internal_static_eu_dnetlib_data_proto_Qualifier_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_eu_dnetlib_data_proto_Qualifier_fieldAccessorTable; - private static com.google.protobuf.Descriptors.Descriptor - internal_static_eu_dnetlib_data_proto_DataInfo_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_eu_dnetlib_data_proto_DataInfo_fieldAccessorTable; - private static com.google.protobuf.Descriptors.Descriptor - internal_static_eu_dnetlib_data_proto_OAIProvenance_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_eu_dnetlib_data_proto_OAIProvenance_fieldAccessorTable; - private static com.google.protobuf.Descriptors.Descriptor - internal_static_eu_dnetlib_data_proto_OAIProvenance_OriginDescription_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_eu_dnetlib_data_proto_OAIProvenance_OriginDescription_fieldAccessorTable; - private static com.google.protobuf.Descriptors.Descriptor - internal_static_eu_dnetlib_data_proto_ExtraInfo_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_eu_dnetlib_data_proto_ExtraInfo_fieldAccessorTable; - private static com.google.protobuf.Descriptors.Descriptor - internal_static_eu_dnetlib_data_proto_Author_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_eu_dnetlib_data_proto_Author_fieldAccessorTable; - - public static com.google.protobuf.Descriptors.FileDescriptor - getDescriptor() { - return descriptor; - } - private static com.google.protobuf.Descriptors.FileDescriptor - descriptor; - static { - java.lang.String[] descriptorData = { - "\n\017FieldType.proto\022\025eu.dnetlib.data.proto" + - "\"O\n\013StringField\022\r\n\005value\030\001 \002(\t\0221\n\010dataIn" + - "fo\030\002 \001(\0132\037.eu.dnetlib.data.proto.DataInf" + - "o\"M\n\tBoolField\022\r\n\005value\030\001 \002(\010\0221\n\010dataInf" + - "o\030\002 \001(\0132\037.eu.dnetlib.data.proto.DataInfo" + - "\"L\n\010IntField\022\r\n\005value\030\001 \002(\005\0221\n\010dataInfo\030" + - "\002 \001(\0132\037.eu.dnetlib.data.proto.DataInfo\"\213" + - "\001\n\022StructuredProperty\022\r\n\005value\030\001 \002(\t\0223\n\t" + - "qualifier\030\002 \001(\0132 .eu.dnetlib.data.proto." + - "Qualifier\0221\n\010dataInfo\030\003 \001(\0132\037.eu.dnetlib", - ".data.proto.DataInfo\"Y\n\010KeyValue\022\013\n\003key\030" + - "\001 \002(\t\022\r\n\005value\030\002 \001(\t\0221\n\010dataInfo\030\003 \001(\0132\037" + - ".eu.dnetlib.data.proto.DataInfo\"\210\001\n\tQual" + - "ifier\022\017\n\007classid\030\001 \001(\t\022\021\n\tclassname\030\002 \001(" + - "\t\022\020\n\010schemeid\030\003 \001(\t\022\022\n\nschemename\030\004 \001(\t\022" + - "1\n\010dataInfo\030\005 \001(\0132\037.eu.dnetlib.data.prot" + - "o.DataInfo\"\272\001\n\010DataInfo\022\030\n\tinvisible\030\006 \001" + - "(\010:\005false\022\020\n\010inferred\030\001 \001(\010\022\032\n\022deletedby" + - "inference\030\002 \001(\010\022\r\n\005trust\030\003 \001(\t\022\033\n\023infere" + - "nceprovenance\030\004 \001(\t\022:\n\020provenanceaction\030", - "\005 \002(\0132 .eu.dnetlib.data.proto.Qualifier\"" + - "\312\002\n\rOAIProvenance\022Q\n\021originDescription\030\001" + - " \001(\01326.eu.dnetlib.data.proto.OAIProvenan" + - "ce.OriginDescription\032\345\001\n\021OriginDescripti" + - "on\022\023\n\013harvestDate\030\001 \001(\t\022\025\n\007altered\030\002 \001(\010" + - ":\004true\022\017\n\007baseURL\030\003 \001(\t\022\022\n\nidentifier\030\004 " + - "\001(\t\022\021\n\tdatestamp\030\005 \001(\t\022\031\n\021metadataNamesp" + - "ace\030\006 \001(\t\022Q\n\021originDescription\030\007 \001(\01326.e" + - "u.dnetlib.data.proto.OAIProvenance.Origi" + - "nDescription\"]\n\tExtraInfo\022\014\n\004name\030\001 \002(\t\022", - "\020\n\010typology\030\002 \002(\t\022\022\n\nprovenance\030\003 \002(\t\022\r\n" + - "\005trust\030\004 \001(\t\022\r\n\005value\030\005 \001(\t\"\256\001\n\006Author\022\020" + - "\n\010fullname\030\001 \002(\t\022\014\n\004name\030\002 \001(\t\022\017\n\007surnam" + - "e\030\003 \001(\t\022\014\n\004rank\030\004 \002(\005\022,\n\003pid\030\005 \003(\0132\037.eu." + - "dnetlib.data.proto.KeyValue\0227\n\013affiliati" + - "on\030\006 \003(\0132\".eu.dnetlib.data.proto.StringF" + - "ieldB(\n\025eu.dnetlib.data.protoB\017FieldType" + - "Protos" - }; - com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = - new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { - public com.google.protobuf.ExtensionRegistry assignDescriptors( - com.google.protobuf.Descriptors.FileDescriptor root) { - descriptor = root; - internal_static_eu_dnetlib_data_proto_StringField_descriptor = - getDescriptor().getMessageTypes().get(0); - internal_static_eu_dnetlib_data_proto_StringField_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_eu_dnetlib_data_proto_StringField_descriptor, - new java.lang.String[] { "Value", "DataInfo", }, - eu.dnetlib.data.proto.FieldTypeProtos.StringField.class, - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder.class); - internal_static_eu_dnetlib_data_proto_BoolField_descriptor = - getDescriptor().getMessageTypes().get(1); - internal_static_eu_dnetlib_data_proto_BoolField_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_eu_dnetlib_data_proto_BoolField_descriptor, - new java.lang.String[] { "Value", "DataInfo", }, - eu.dnetlib.data.proto.FieldTypeProtos.BoolField.class, - eu.dnetlib.data.proto.FieldTypeProtos.BoolField.Builder.class); - internal_static_eu_dnetlib_data_proto_IntField_descriptor = - getDescriptor().getMessageTypes().get(2); - internal_static_eu_dnetlib_data_proto_IntField_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_eu_dnetlib_data_proto_IntField_descriptor, - new java.lang.String[] { "Value", "DataInfo", }, - eu.dnetlib.data.proto.FieldTypeProtos.IntField.class, - eu.dnetlib.data.proto.FieldTypeProtos.IntField.Builder.class); - internal_static_eu_dnetlib_data_proto_StructuredProperty_descriptor = - getDescriptor().getMessageTypes().get(3); - internal_static_eu_dnetlib_data_proto_StructuredProperty_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_eu_dnetlib_data_proto_StructuredProperty_descriptor, - new java.lang.String[] { "Value", "Qualifier", "DataInfo", }, - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.class, - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder.class); - internal_static_eu_dnetlib_data_proto_KeyValue_descriptor = - getDescriptor().getMessageTypes().get(4); - internal_static_eu_dnetlib_data_proto_KeyValue_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_eu_dnetlib_data_proto_KeyValue_descriptor, - new java.lang.String[] { "Key", "Value", "DataInfo", }, - eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.class, - eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder.class); - internal_static_eu_dnetlib_data_proto_Qualifier_descriptor = - getDescriptor().getMessageTypes().get(5); - internal_static_eu_dnetlib_data_proto_Qualifier_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_eu_dnetlib_data_proto_Qualifier_descriptor, - new java.lang.String[] { "Classid", "Classname", "Schemeid", "Schemename", "DataInfo", }, - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.class, - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder.class); - internal_static_eu_dnetlib_data_proto_DataInfo_descriptor = - getDescriptor().getMessageTypes().get(6); - internal_static_eu_dnetlib_data_proto_DataInfo_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_eu_dnetlib_data_proto_DataInfo_descriptor, - new java.lang.String[] { "Invisible", "Inferred", "Deletedbyinference", "Trust", "Inferenceprovenance", "Provenanceaction", }, - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.class, - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder.class); - internal_static_eu_dnetlib_data_proto_OAIProvenance_descriptor = - getDescriptor().getMessageTypes().get(7); - internal_static_eu_dnetlib_data_proto_OAIProvenance_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_eu_dnetlib_data_proto_OAIProvenance_descriptor, - new java.lang.String[] { "OriginDescription", }, - eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.class, - eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.Builder.class); - internal_static_eu_dnetlib_data_proto_OAIProvenance_OriginDescription_descriptor = - internal_static_eu_dnetlib_data_proto_OAIProvenance_descriptor.getNestedTypes().get(0); - internal_static_eu_dnetlib_data_proto_OAIProvenance_OriginDescription_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_eu_dnetlib_data_proto_OAIProvenance_OriginDescription_descriptor, - new java.lang.String[] { "HarvestDate", "Altered", "BaseURL", "Identifier", "Datestamp", "MetadataNamespace", "OriginDescription", }, - eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.class, - eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.OriginDescription.Builder.class); - internal_static_eu_dnetlib_data_proto_ExtraInfo_descriptor = - getDescriptor().getMessageTypes().get(8); - internal_static_eu_dnetlib_data_proto_ExtraInfo_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_eu_dnetlib_data_proto_ExtraInfo_descriptor, - new java.lang.String[] { "Name", "Typology", "Provenance", "Trust", "Value", }, - eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo.class, - eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo.Builder.class); - internal_static_eu_dnetlib_data_proto_Author_descriptor = - getDescriptor().getMessageTypes().get(9); - internal_static_eu_dnetlib_data_proto_Author_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_eu_dnetlib_data_proto_Author_descriptor, - new java.lang.String[] { "Fullname", "Name", "Surname", "Rank", "Pid", "Affiliation", }, - eu.dnetlib.data.proto.FieldTypeProtos.Author.class, - eu.dnetlib.data.proto.FieldTypeProtos.Author.Builder.class); - return null; - } - }; - com.google.protobuf.Descriptors.FileDescriptor - .internalBuildGeneratedFileFrom(descriptorData, - new com.google.protobuf.Descriptors.FileDescriptor[] { - }, assigner); - } - - // @@protoc_insertion_point(outer_class_scope) -} diff --git a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/KindProtos.java b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/KindProtos.java deleted file mode 100644 index ccd35de15..000000000 --- a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/KindProtos.java +++ /dev/null @@ -1,108 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: Kind.proto - -package eu.dnetlib.data.proto; - -public final class KindProtos { - private KindProtos() {} - public static void registerAllExtensions( - com.google.protobuf.ExtensionRegistry registry) { - } - public enum Kind - implements com.google.protobuf.ProtocolMessageEnum { - entity(0, 1), - relation(1, 2), - ; - - public static final int entity_VALUE = 1; - public static final int relation_VALUE = 2; - - - public final int getNumber() { return value; } - - public static Kind valueOf(int value) { - switch (value) { - case 1: return entity; - case 2: return relation; - default: return null; - } - } - - public static com.google.protobuf.Internal.EnumLiteMap - internalGetValueMap() { - return internalValueMap; - } - private static com.google.protobuf.Internal.EnumLiteMap - internalValueMap = - new com.google.protobuf.Internal.EnumLiteMap() { - public Kind findValueByNumber(int number) { - return Kind.valueOf(number); - } - }; - - public final com.google.protobuf.Descriptors.EnumValueDescriptor - getValueDescriptor() { - return getDescriptor().getValues().get(index); - } - public final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptorForType() { - return getDescriptor(); - } - public static final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptor() { - return eu.dnetlib.data.proto.KindProtos.getDescriptor().getEnumTypes().get(0); - } - - private static final Kind[] VALUES = { - entity, relation, - }; - - public static Kind valueOf( - com.google.protobuf.Descriptors.EnumValueDescriptor desc) { - if (desc.getType() != getDescriptor()) { - throw new java.lang.IllegalArgumentException( - "EnumValueDescriptor is not for this type."); - } - return VALUES[desc.getIndex()]; - } - - private final int index; - private final int value; - - private Kind(int index, int value) { - this.index = index; - this.value = value; - } - - // @@protoc_insertion_point(enum_scope:eu.dnetlib.data.proto.Kind) - } - - - public static com.google.protobuf.Descriptors.FileDescriptor - getDescriptor() { - return descriptor; - } - private static com.google.protobuf.Descriptors.FileDescriptor - descriptor; - static { - java.lang.String[] descriptorData = { - "\n\nKind.proto\022\025eu.dnetlib.data.proto* \n\004K" + - "ind\022\n\n\006entity\020\001\022\014\n\010relation\020\002B#\n\025eu.dnet" + - "lib.data.protoB\nKindProtos" - }; - com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = - new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { - public com.google.protobuf.ExtensionRegistry assignDescriptors( - com.google.protobuf.Descriptors.FileDescriptor root) { - descriptor = root; - return null; - } - }; - com.google.protobuf.Descriptors.FileDescriptor - .internalBuildGeneratedFileFrom(descriptorData, - new com.google.protobuf.Descriptors.FileDescriptor[] { - }, assigner); - } - - // @@protoc_insertion_point(outer_class_scope) -} diff --git a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/OafProtos.java b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/OafProtos.java deleted file mode 100644 index d9e370b83..000000000 --- a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/OafProtos.java +++ /dev/null @@ -1,6730 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: OafParent.proto - -package eu.dnetlib.data.proto; - -public final class OafProtos { - private OafProtos() {} - public static void registerAllExtensions( - com.google.protobuf.ExtensionRegistry registry) { - } - public interface OafOrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // required .eu.dnetlib.data.proto.Kind kind = 1; - boolean hasKind(); - eu.dnetlib.data.proto.KindProtos.Kind getKind(); - - // optional .eu.dnetlib.data.proto.OafEntity entity = 2; - boolean hasEntity(); - eu.dnetlib.data.proto.OafProtos.OafEntity getEntity(); - eu.dnetlib.data.proto.OafProtos.OafEntityOrBuilder getEntityOrBuilder(); - - // optional .eu.dnetlib.data.proto.OafRel rel = 3; - boolean hasRel(); - eu.dnetlib.data.proto.OafProtos.OafRel getRel(); - eu.dnetlib.data.proto.OafProtos.OafRelOrBuilder getRelOrBuilder(); - - // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 4; - boolean hasDataInfo(); - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo(); - eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder(); - - // optional sfixed64 lastupdatetimestamp = 5; - boolean hasLastupdatetimestamp(); - long getLastupdatetimestamp(); - } - public static final class Oaf extends - com.google.protobuf.GeneratedMessage - implements OafOrBuilder { - // Use Oaf.newBuilder() to construct. - private Oaf(Builder builder) { - super(builder); - } - private Oaf(boolean noInit) {} - - private static final Oaf defaultInstance; - public static Oaf getDefaultInstance() { - return defaultInstance; - } - - public Oaf getDefaultInstanceForType() { - return defaultInstance; - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.OafProtos.internal_static_eu_dnetlib_data_proto_Oaf_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.OafProtos.internal_static_eu_dnetlib_data_proto_Oaf_fieldAccessorTable; - } - - private int bitField0_; - // required .eu.dnetlib.data.proto.Kind kind = 1; - public static final int KIND_FIELD_NUMBER = 1; - private eu.dnetlib.data.proto.KindProtos.Kind kind_; - public boolean hasKind() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.KindProtos.Kind getKind() { - return kind_; - } - - // optional .eu.dnetlib.data.proto.OafEntity entity = 2; - public static final int ENTITY_FIELD_NUMBER = 2; - private eu.dnetlib.data.proto.OafProtos.OafEntity entity_; - public boolean hasEntity() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public eu.dnetlib.data.proto.OafProtos.OafEntity getEntity() { - return entity_; - } - public eu.dnetlib.data.proto.OafProtos.OafEntityOrBuilder getEntityOrBuilder() { - return entity_; - } - - // optional .eu.dnetlib.data.proto.OafRel rel = 3; - public static final int REL_FIELD_NUMBER = 3; - private eu.dnetlib.data.proto.OafProtos.OafRel rel_; - public boolean hasRel() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - public eu.dnetlib.data.proto.OafProtos.OafRel getRel() { - return rel_; - } - public eu.dnetlib.data.proto.OafProtos.OafRelOrBuilder getRelOrBuilder() { - return rel_; - } - - // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 4; - public static final int DATAINFO_FIELD_NUMBER = 4; - private eu.dnetlib.data.proto.FieldTypeProtos.DataInfo dataInfo_; - public boolean hasDataInfo() { - return ((bitField0_ & 0x00000008) == 0x00000008); - } - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo() { - return dataInfo_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder() { - return dataInfo_; - } - - // optional sfixed64 lastupdatetimestamp = 5; - public static final int LASTUPDATETIMESTAMP_FIELD_NUMBER = 5; - private long lastupdatetimestamp_; - public boolean hasLastupdatetimestamp() { - return ((bitField0_ & 0x00000010) == 0x00000010); - } - public long getLastupdatetimestamp() { - return lastupdatetimestamp_; - } - - private void initFields() { - kind_ = eu.dnetlib.data.proto.KindProtos.Kind.entity; - entity_ = eu.dnetlib.data.proto.OafProtos.OafEntity.getDefaultInstance(); - rel_ = eu.dnetlib.data.proto.OafProtos.OafRel.getDefaultInstance(); - dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); - lastupdatetimestamp_ = 0L; - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - if (!hasKind()) { - memoizedIsInitialized = 0; - return false; - } - if (hasEntity()) { - if (!getEntity().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasRel()) { - if (!getRel().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasDataInfo()) { - if (!getDataInfo().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeEnum(1, kind_.getNumber()); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - output.writeMessage(2, entity_); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - output.writeMessage(3, rel_); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - output.writeMessage(4, dataInfo_); - } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - output.writeSFixed64(5, lastupdatetimestamp_); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeEnumSize(1, kind_.getNumber()); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(2, entity_); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(3, rel_); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(4, dataInfo_); - } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - size += com.google.protobuf.CodedOutputStream - .computeSFixed64Size(5, lastupdatetimestamp_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static eu.dnetlib.data.proto.OafProtos.Oaf parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.OafProtos.Oaf parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.OafProtos.Oaf parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.OafProtos.Oaf parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.OafProtos.Oaf parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.OafProtos.Oaf parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.OafProtos.Oaf parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.OafProtos.Oaf parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.OafProtos.Oaf parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.OafProtos.Oaf parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(eu.dnetlib.data.proto.OafProtos.Oaf prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder - implements eu.dnetlib.data.proto.OafProtos.OafOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.OafProtos.internal_static_eu_dnetlib_data_proto_Oaf_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.OafProtos.internal_static_eu_dnetlib_data_proto_Oaf_fieldAccessorTable; - } - - // Construct using eu.dnetlib.data.proto.OafProtos.Oaf.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - getEntityFieldBuilder(); - getRelFieldBuilder(); - getDataInfoFieldBuilder(); - } - } - private static Builder create() { - return new Builder(); - } - - public Builder clear() { - super.clear(); - kind_ = eu.dnetlib.data.proto.KindProtos.Kind.entity; - bitField0_ = (bitField0_ & ~0x00000001); - if (entityBuilder_ == null) { - entity_ = eu.dnetlib.data.proto.OafProtos.OafEntity.getDefaultInstance(); - } else { - entityBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000002); - if (relBuilder_ == null) { - rel_ = eu.dnetlib.data.proto.OafProtos.OafRel.getDefaultInstance(); - } else { - relBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000004); - if (dataInfoBuilder_ == null) { - dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); - } else { - dataInfoBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000008); - lastupdatetimestamp_ = 0L; - bitField0_ = (bitField0_ & ~0x00000010); - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return eu.dnetlib.data.proto.OafProtos.Oaf.getDescriptor(); - } - - public eu.dnetlib.data.proto.OafProtos.Oaf getDefaultInstanceForType() { - return eu.dnetlib.data.proto.OafProtos.Oaf.getDefaultInstance(); - } - - public eu.dnetlib.data.proto.OafProtos.Oaf build() { - eu.dnetlib.data.proto.OafProtos.Oaf result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - private eu.dnetlib.data.proto.OafProtos.Oaf buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - eu.dnetlib.data.proto.OafProtos.Oaf result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return result; - } - - public eu.dnetlib.data.proto.OafProtos.Oaf buildPartial() { - eu.dnetlib.data.proto.OafProtos.Oaf result = new eu.dnetlib.data.proto.OafProtos.Oaf(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - result.kind_ = kind_; - if (((from_bitField0_ & 0x00000002) == 0x00000002)) { - to_bitField0_ |= 0x00000002; - } - if (entityBuilder_ == null) { - result.entity_ = entity_; - } else { - result.entity_ = entityBuilder_.build(); - } - if (((from_bitField0_ & 0x00000004) == 0x00000004)) { - to_bitField0_ |= 0x00000004; - } - if (relBuilder_ == null) { - result.rel_ = rel_; - } else { - result.rel_ = relBuilder_.build(); - } - if (((from_bitField0_ & 0x00000008) == 0x00000008)) { - to_bitField0_ |= 0x00000008; - } - if (dataInfoBuilder_ == null) { - result.dataInfo_ = dataInfo_; - } else { - result.dataInfo_ = dataInfoBuilder_.build(); - } - if (((from_bitField0_ & 0x00000010) == 0x00000010)) { - to_bitField0_ |= 0x00000010; - } - result.lastupdatetimestamp_ = lastupdatetimestamp_; - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof eu.dnetlib.data.proto.OafProtos.Oaf) { - return mergeFrom((eu.dnetlib.data.proto.OafProtos.Oaf)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(eu.dnetlib.data.proto.OafProtos.Oaf other) { - if (other == eu.dnetlib.data.proto.OafProtos.Oaf.getDefaultInstance()) return this; - if (other.hasKind()) { - setKind(other.getKind()); - } - if (other.hasEntity()) { - mergeEntity(other.getEntity()); - } - if (other.hasRel()) { - mergeRel(other.getRel()); - } - if (other.hasDataInfo()) { - mergeDataInfo(other.getDataInfo()); - } - if (other.hasLastupdatetimestamp()) { - setLastupdatetimestamp(other.getLastupdatetimestamp()); - } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - - public final boolean isInitialized() { - if (!hasKind()) { - - return false; - } - if (hasEntity()) { - if (!getEntity().isInitialized()) { - - return false; - } - } - if (hasRel()) { - if (!getRel().isInitialized()) { - - return false; - } - } - if (hasDataInfo()) { - if (!getDataInfo().isInitialized()) { - - return false; - } - } - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - } - break; - } - case 8: { - int rawValue = input.readEnum(); - eu.dnetlib.data.proto.KindProtos.Kind value = eu.dnetlib.data.proto.KindProtos.Kind.valueOf(rawValue); - if (value == null) { - unknownFields.mergeVarintField(1, rawValue); - } else { - bitField0_ |= 0x00000001; - kind_ = value; - } - break; - } - case 18: { - eu.dnetlib.data.proto.OafProtos.OafEntity.Builder subBuilder = eu.dnetlib.data.proto.OafProtos.OafEntity.newBuilder(); - if (hasEntity()) { - subBuilder.mergeFrom(getEntity()); - } - input.readMessage(subBuilder, extensionRegistry); - setEntity(subBuilder.buildPartial()); - break; - } - case 26: { - eu.dnetlib.data.proto.OafProtos.OafRel.Builder subBuilder = eu.dnetlib.data.proto.OafProtos.OafRel.newBuilder(); - if (hasRel()) { - subBuilder.mergeFrom(getRel()); - } - input.readMessage(subBuilder, extensionRegistry); - setRel(subBuilder.buildPartial()); - break; - } - case 34: { - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.newBuilder(); - if (hasDataInfo()) { - subBuilder.mergeFrom(getDataInfo()); - } - input.readMessage(subBuilder, extensionRegistry); - setDataInfo(subBuilder.buildPartial()); - break; - } - case 41: { - bitField0_ |= 0x00000010; - lastupdatetimestamp_ = input.readSFixed64(); - break; - } - } - } - } - - private int bitField0_; - - // required .eu.dnetlib.data.proto.Kind kind = 1; - private eu.dnetlib.data.proto.KindProtos.Kind kind_ = eu.dnetlib.data.proto.KindProtos.Kind.entity; - public boolean hasKind() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.KindProtos.Kind getKind() { - return kind_; - } - public Builder setKind(eu.dnetlib.data.proto.KindProtos.Kind value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000001; - kind_ = value; - onChanged(); - return this; - } - public Builder clearKind() { - bitField0_ = (bitField0_ & ~0x00000001); - kind_ = eu.dnetlib.data.proto.KindProtos.Kind.entity; - onChanged(); - return this; - } - - // optional .eu.dnetlib.data.proto.OafEntity entity = 2; - private eu.dnetlib.data.proto.OafProtos.OafEntity entity_ = eu.dnetlib.data.proto.OafProtos.OafEntity.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.OafProtos.OafEntity, eu.dnetlib.data.proto.OafProtos.OafEntity.Builder, eu.dnetlib.data.proto.OafProtos.OafEntityOrBuilder> entityBuilder_; - public boolean hasEntity() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public eu.dnetlib.data.proto.OafProtos.OafEntity getEntity() { - if (entityBuilder_ == null) { - return entity_; - } else { - return entityBuilder_.getMessage(); - } - } - public Builder setEntity(eu.dnetlib.data.proto.OafProtos.OafEntity value) { - if (entityBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - entity_ = value; - onChanged(); - } else { - entityBuilder_.setMessage(value); - } - bitField0_ |= 0x00000002; - return this; - } - public Builder setEntity( - eu.dnetlib.data.proto.OafProtos.OafEntity.Builder builderForValue) { - if (entityBuilder_ == null) { - entity_ = builderForValue.build(); - onChanged(); - } else { - entityBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000002; - return this; - } - public Builder mergeEntity(eu.dnetlib.data.proto.OafProtos.OafEntity value) { - if (entityBuilder_ == null) { - if (((bitField0_ & 0x00000002) == 0x00000002) && - entity_ != eu.dnetlib.data.proto.OafProtos.OafEntity.getDefaultInstance()) { - entity_ = - eu.dnetlib.data.proto.OafProtos.OafEntity.newBuilder(entity_).mergeFrom(value).buildPartial(); - } else { - entity_ = value; - } - onChanged(); - } else { - entityBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000002; - return this; - } - public Builder clearEntity() { - if (entityBuilder_ == null) { - entity_ = eu.dnetlib.data.proto.OafProtos.OafEntity.getDefaultInstance(); - onChanged(); - } else { - entityBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000002); - return this; - } - public eu.dnetlib.data.proto.OafProtos.OafEntity.Builder getEntityBuilder() { - bitField0_ |= 0x00000002; - onChanged(); - return getEntityFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.OafProtos.OafEntityOrBuilder getEntityOrBuilder() { - if (entityBuilder_ != null) { - return entityBuilder_.getMessageOrBuilder(); - } else { - return entity_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.OafProtos.OafEntity, eu.dnetlib.data.proto.OafProtos.OafEntity.Builder, eu.dnetlib.data.proto.OafProtos.OafEntityOrBuilder> - getEntityFieldBuilder() { - if (entityBuilder_ == null) { - entityBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.OafProtos.OafEntity, eu.dnetlib.data.proto.OafProtos.OafEntity.Builder, eu.dnetlib.data.proto.OafProtos.OafEntityOrBuilder>( - entity_, - getParentForChildren(), - isClean()); - entity_ = null; - } - return entityBuilder_; - } - - // optional .eu.dnetlib.data.proto.OafRel rel = 3; - private eu.dnetlib.data.proto.OafProtos.OafRel rel_ = eu.dnetlib.data.proto.OafProtos.OafRel.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.OafProtos.OafRel, eu.dnetlib.data.proto.OafProtos.OafRel.Builder, eu.dnetlib.data.proto.OafProtos.OafRelOrBuilder> relBuilder_; - public boolean hasRel() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - public eu.dnetlib.data.proto.OafProtos.OafRel getRel() { - if (relBuilder_ == null) { - return rel_; - } else { - return relBuilder_.getMessage(); - } - } - public Builder setRel(eu.dnetlib.data.proto.OafProtos.OafRel value) { - if (relBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - rel_ = value; - onChanged(); - } else { - relBuilder_.setMessage(value); - } - bitField0_ |= 0x00000004; - return this; - } - public Builder setRel( - eu.dnetlib.data.proto.OafProtos.OafRel.Builder builderForValue) { - if (relBuilder_ == null) { - rel_ = builderForValue.build(); - onChanged(); - } else { - relBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000004; - return this; - } - public Builder mergeRel(eu.dnetlib.data.proto.OafProtos.OafRel value) { - if (relBuilder_ == null) { - if (((bitField0_ & 0x00000004) == 0x00000004) && - rel_ != eu.dnetlib.data.proto.OafProtos.OafRel.getDefaultInstance()) { - rel_ = - eu.dnetlib.data.proto.OafProtos.OafRel.newBuilder(rel_).mergeFrom(value).buildPartial(); - } else { - rel_ = value; - } - onChanged(); - } else { - relBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000004; - return this; - } - public Builder clearRel() { - if (relBuilder_ == null) { - rel_ = eu.dnetlib.data.proto.OafProtos.OafRel.getDefaultInstance(); - onChanged(); - } else { - relBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000004); - return this; - } - public eu.dnetlib.data.proto.OafProtos.OafRel.Builder getRelBuilder() { - bitField0_ |= 0x00000004; - onChanged(); - return getRelFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.OafProtos.OafRelOrBuilder getRelOrBuilder() { - if (relBuilder_ != null) { - return relBuilder_.getMessageOrBuilder(); - } else { - return rel_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.OafProtos.OafRel, eu.dnetlib.data.proto.OafProtos.OafRel.Builder, eu.dnetlib.data.proto.OafProtos.OafRelOrBuilder> - getRelFieldBuilder() { - if (relBuilder_ == null) { - relBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.OafProtos.OafRel, eu.dnetlib.data.proto.OafProtos.OafRel.Builder, eu.dnetlib.data.proto.OafProtos.OafRelOrBuilder>( - rel_, - getParentForChildren(), - isClean()); - rel_ = null; - } - return relBuilder_; - } - - // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 4; - private eu.dnetlib.data.proto.FieldTypeProtos.DataInfo dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder> dataInfoBuilder_; - public boolean hasDataInfo() { - return ((bitField0_ & 0x00000008) == 0x00000008); - } - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo() { - if (dataInfoBuilder_ == null) { - return dataInfo_; - } else { - return dataInfoBuilder_.getMessage(); - } - } - public Builder setDataInfo(eu.dnetlib.data.proto.FieldTypeProtos.DataInfo value) { - if (dataInfoBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - dataInfo_ = value; - onChanged(); - } else { - dataInfoBuilder_.setMessage(value); - } - bitField0_ |= 0x00000008; - return this; - } - public Builder setDataInfo( - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder builderForValue) { - if (dataInfoBuilder_ == null) { - dataInfo_ = builderForValue.build(); - onChanged(); - } else { - dataInfoBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000008; - return this; - } - public Builder mergeDataInfo(eu.dnetlib.data.proto.FieldTypeProtos.DataInfo value) { - if (dataInfoBuilder_ == null) { - if (((bitField0_ & 0x00000008) == 0x00000008) && - dataInfo_ != eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance()) { - dataInfo_ = - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.newBuilder(dataInfo_).mergeFrom(value).buildPartial(); - } else { - dataInfo_ = value; - } - onChanged(); - } else { - dataInfoBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000008; - return this; - } - public Builder clearDataInfo() { - if (dataInfoBuilder_ == null) { - dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); - onChanged(); - } else { - dataInfoBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000008); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder getDataInfoBuilder() { - bitField0_ |= 0x00000008; - onChanged(); - return getDataInfoFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder() { - if (dataInfoBuilder_ != null) { - return dataInfoBuilder_.getMessageOrBuilder(); - } else { - return dataInfo_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder> - getDataInfoFieldBuilder() { - if (dataInfoBuilder_ == null) { - dataInfoBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder>( - dataInfo_, - getParentForChildren(), - isClean()); - dataInfo_ = null; - } - return dataInfoBuilder_; - } - - // optional sfixed64 lastupdatetimestamp = 5; - private long lastupdatetimestamp_ ; - public boolean hasLastupdatetimestamp() { - return ((bitField0_ & 0x00000010) == 0x00000010); - } - public long getLastupdatetimestamp() { - return lastupdatetimestamp_; - } - public Builder setLastupdatetimestamp(long value) { - bitField0_ |= 0x00000010; - lastupdatetimestamp_ = value; - onChanged(); - return this; - } - public Builder clearLastupdatetimestamp() { - bitField0_ = (bitField0_ & ~0x00000010); - lastupdatetimestamp_ = 0L; - onChanged(); - return this; - } - - // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.Oaf) - } - - static { - defaultInstance = new Oaf(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.Oaf) - } - - public interface OafEntityOrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // required .eu.dnetlib.data.proto.Type type = 1; - boolean hasType(); - eu.dnetlib.data.proto.TypeProtos.Type getType(); - - // required string id = 12; - boolean hasId(); - String getId(); - - // repeated string originalId = 8; - java.util.List getOriginalIdList(); - int getOriginalIdCount(); - String getOriginalId(int index); - - // repeated .eu.dnetlib.data.proto.KeyValue collectedfrom = 9; - java.util.List - getCollectedfromList(); - eu.dnetlib.data.proto.FieldTypeProtos.KeyValue getCollectedfrom(int index); - int getCollectedfromCount(); - java.util.List - getCollectedfromOrBuilderList(); - eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder getCollectedfromOrBuilder( - int index); - - // repeated .eu.dnetlib.data.proto.StructuredProperty pid = 10; - java.util.List - getPidList(); - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty getPid(int index); - int getPidCount(); - java.util.List - getPidOrBuilderList(); - eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder getPidOrBuilder( - int index); - - // optional string dateofcollection = 11; - boolean hasDateofcollection(); - String getDateofcollection(); - - // optional string dateoftransformation = 13; - boolean hasDateoftransformation(); - String getDateoftransformation(); - - // repeated .eu.dnetlib.data.proto.OafRel cachedRel = 2; - java.util.List - getCachedRelList(); - eu.dnetlib.data.proto.OafProtos.OafRel getCachedRel(int index); - int getCachedRelCount(); - java.util.List - getCachedRelOrBuilderList(); - eu.dnetlib.data.proto.OafProtos.OafRelOrBuilder getCachedRelOrBuilder( - int index); - - // repeated .eu.dnetlib.data.proto.Oaf cachedOafRel = 18; - java.util.List - getCachedOafRelList(); - eu.dnetlib.data.proto.OafProtos.Oaf getCachedOafRel(int index); - int getCachedOafRelCount(); - java.util.List - getCachedOafRelOrBuilderList(); - eu.dnetlib.data.proto.OafProtos.OafOrBuilder getCachedOafRelOrBuilder( - int index); - - // optional .eu.dnetlib.data.proto.Datasource datasource = 3; - boolean hasDatasource(); - eu.dnetlib.data.proto.DatasourceProtos.Datasource getDatasource(); - eu.dnetlib.data.proto.DatasourceProtos.DatasourceOrBuilder getDatasourceOrBuilder(); - - // optional .eu.dnetlib.data.proto.Organization organization = 4; - boolean hasOrganization(); - eu.dnetlib.data.proto.OrganizationProtos.Organization getOrganization(); - eu.dnetlib.data.proto.OrganizationProtos.OrganizationOrBuilder getOrganizationOrBuilder(); - - // optional .eu.dnetlib.data.proto.Project project = 6; - boolean hasProject(); - eu.dnetlib.data.proto.ProjectProtos.Project getProject(); - eu.dnetlib.data.proto.ProjectProtos.ProjectOrBuilder getProjectOrBuilder(); - - // optional .eu.dnetlib.data.proto.Result result = 7; - boolean hasResult(); - eu.dnetlib.data.proto.ResultProtos.Result getResult(); - eu.dnetlib.data.proto.ResultProtos.ResultOrBuilder getResultOrBuilder(); - - // optional .eu.dnetlib.data.proto.Person person = 5; - boolean hasPerson(); - eu.dnetlib.data.proto.PersonProtos.Person getPerson(); - eu.dnetlib.data.proto.PersonProtos.PersonOrBuilder getPersonOrBuilder(); - - // repeated .eu.dnetlib.data.proto.OafEntity children = 16; - java.util.List - getChildrenList(); - eu.dnetlib.data.proto.OafProtos.OafEntity getChildren(int index); - int getChildrenCount(); - java.util.List - getChildrenOrBuilderList(); - eu.dnetlib.data.proto.OafProtos.OafEntityOrBuilder getChildrenOrBuilder( - int index); - - // repeated .eu.dnetlib.data.proto.ExtraInfo extraInfo = 15; - java.util.List - getExtraInfoList(); - eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo getExtraInfo(int index); - int getExtraInfoCount(); - java.util.List - getExtraInfoOrBuilderList(); - eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfoOrBuilder getExtraInfoOrBuilder( - int index); - - // optional .eu.dnetlib.data.proto.OAIProvenance oaiprovenance = 17; - boolean hasOaiprovenance(); - eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance getOaiprovenance(); - eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenanceOrBuilder getOaiprovenanceOrBuilder(); - } - public static final class OafEntity extends - com.google.protobuf.GeneratedMessage - implements OafEntityOrBuilder { - // Use OafEntity.newBuilder() to construct. - private OafEntity(Builder builder) { - super(builder); - } - private OafEntity(boolean noInit) {} - - private static final OafEntity defaultInstance; - public static OafEntity getDefaultInstance() { - return defaultInstance; - } - - public OafEntity getDefaultInstanceForType() { - return defaultInstance; - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.OafProtos.internal_static_eu_dnetlib_data_proto_OafEntity_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.OafProtos.internal_static_eu_dnetlib_data_proto_OafEntity_fieldAccessorTable; - } - - private int bitField0_; - // required .eu.dnetlib.data.proto.Type type = 1; - public static final int TYPE_FIELD_NUMBER = 1; - private eu.dnetlib.data.proto.TypeProtos.Type type_; - public boolean hasType() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.TypeProtos.Type getType() { - return type_; - } - - // required string id = 12; - public static final int ID_FIELD_NUMBER = 12; - private java.lang.Object id_; - public boolean hasId() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public String getId() { - java.lang.Object ref = id_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - id_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getIdBytes() { - java.lang.Object ref = id_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - id_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // repeated string originalId = 8; - public static final int ORIGINALID_FIELD_NUMBER = 8; - private com.google.protobuf.LazyStringList originalId_; - public java.util.List - getOriginalIdList() { - return originalId_; - } - public int getOriginalIdCount() { - return originalId_.size(); - } - public String getOriginalId(int index) { - return originalId_.get(index); - } - - // repeated .eu.dnetlib.data.proto.KeyValue collectedfrom = 9; - public static final int COLLECTEDFROM_FIELD_NUMBER = 9; - private java.util.List collectedfrom_; - public java.util.List getCollectedfromList() { - return collectedfrom_; - } - public java.util.List - getCollectedfromOrBuilderList() { - return collectedfrom_; - } - public int getCollectedfromCount() { - return collectedfrom_.size(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue getCollectedfrom(int index) { - return collectedfrom_.get(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder getCollectedfromOrBuilder( - int index) { - return collectedfrom_.get(index); - } - - // repeated .eu.dnetlib.data.proto.StructuredProperty pid = 10; - public static final int PID_FIELD_NUMBER = 10; - private java.util.List pid_; - public java.util.List getPidList() { - return pid_; - } - public java.util.List - getPidOrBuilderList() { - return pid_; - } - public int getPidCount() { - return pid_.size(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty getPid(int index) { - return pid_.get(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder getPidOrBuilder( - int index) { - return pid_.get(index); - } - - // optional string dateofcollection = 11; - public static final int DATEOFCOLLECTION_FIELD_NUMBER = 11; - private java.lang.Object dateofcollection_; - public boolean hasDateofcollection() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - public String getDateofcollection() { - java.lang.Object ref = dateofcollection_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - dateofcollection_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getDateofcollectionBytes() { - java.lang.Object ref = dateofcollection_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - dateofcollection_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // optional string dateoftransformation = 13; - public static final int DATEOFTRANSFORMATION_FIELD_NUMBER = 13; - private java.lang.Object dateoftransformation_; - public boolean hasDateoftransformation() { - return ((bitField0_ & 0x00000008) == 0x00000008); - } - public String getDateoftransformation() { - java.lang.Object ref = dateoftransformation_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - dateoftransformation_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getDateoftransformationBytes() { - java.lang.Object ref = dateoftransformation_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - dateoftransformation_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // repeated .eu.dnetlib.data.proto.OafRel cachedRel = 2; - public static final int CACHEDREL_FIELD_NUMBER = 2; - private java.util.List cachedRel_; - public java.util.List getCachedRelList() { - return cachedRel_; - } - public java.util.List - getCachedRelOrBuilderList() { - return cachedRel_; - } - public int getCachedRelCount() { - return cachedRel_.size(); - } - public eu.dnetlib.data.proto.OafProtos.OafRel getCachedRel(int index) { - return cachedRel_.get(index); - } - public eu.dnetlib.data.proto.OafProtos.OafRelOrBuilder getCachedRelOrBuilder( - int index) { - return cachedRel_.get(index); - } - - // repeated .eu.dnetlib.data.proto.Oaf cachedOafRel = 18; - public static final int CACHEDOAFREL_FIELD_NUMBER = 18; - private java.util.List cachedOafRel_; - public java.util.List getCachedOafRelList() { - return cachedOafRel_; - } - public java.util.List - getCachedOafRelOrBuilderList() { - return cachedOafRel_; - } - public int getCachedOafRelCount() { - return cachedOafRel_.size(); - } - public eu.dnetlib.data.proto.OafProtos.Oaf getCachedOafRel(int index) { - return cachedOafRel_.get(index); - } - public eu.dnetlib.data.proto.OafProtos.OafOrBuilder getCachedOafRelOrBuilder( - int index) { - return cachedOafRel_.get(index); - } - - // optional .eu.dnetlib.data.proto.Datasource datasource = 3; - public static final int DATASOURCE_FIELD_NUMBER = 3; - private eu.dnetlib.data.proto.DatasourceProtos.Datasource datasource_; - public boolean hasDatasource() { - return ((bitField0_ & 0x00000010) == 0x00000010); - } - public eu.dnetlib.data.proto.DatasourceProtos.Datasource getDatasource() { - return datasource_; - } - public eu.dnetlib.data.proto.DatasourceProtos.DatasourceOrBuilder getDatasourceOrBuilder() { - return datasource_; - } - - // optional .eu.dnetlib.data.proto.Organization organization = 4; - public static final int ORGANIZATION_FIELD_NUMBER = 4; - private eu.dnetlib.data.proto.OrganizationProtos.Organization organization_; - public boolean hasOrganization() { - return ((bitField0_ & 0x00000020) == 0x00000020); - } - public eu.dnetlib.data.proto.OrganizationProtos.Organization getOrganization() { - return organization_; - } - public eu.dnetlib.data.proto.OrganizationProtos.OrganizationOrBuilder getOrganizationOrBuilder() { - return organization_; - } - - // optional .eu.dnetlib.data.proto.Project project = 6; - public static final int PROJECT_FIELD_NUMBER = 6; - private eu.dnetlib.data.proto.ProjectProtos.Project project_; - public boolean hasProject() { - return ((bitField0_ & 0x00000040) == 0x00000040); - } - public eu.dnetlib.data.proto.ProjectProtos.Project getProject() { - return project_; - } - public eu.dnetlib.data.proto.ProjectProtos.ProjectOrBuilder getProjectOrBuilder() { - return project_; - } - - // optional .eu.dnetlib.data.proto.Result result = 7; - public static final int RESULT_FIELD_NUMBER = 7; - private eu.dnetlib.data.proto.ResultProtos.Result result_; - public boolean hasResult() { - return ((bitField0_ & 0x00000080) == 0x00000080); - } - public eu.dnetlib.data.proto.ResultProtos.Result getResult() { - return result_; - } - public eu.dnetlib.data.proto.ResultProtos.ResultOrBuilder getResultOrBuilder() { - return result_; - } - - // optional .eu.dnetlib.data.proto.Person person = 5; - public static final int PERSON_FIELD_NUMBER = 5; - private eu.dnetlib.data.proto.PersonProtos.Person person_; - public boolean hasPerson() { - return ((bitField0_ & 0x00000100) == 0x00000100); - } - public eu.dnetlib.data.proto.PersonProtos.Person getPerson() { - return person_; - } - public eu.dnetlib.data.proto.PersonProtos.PersonOrBuilder getPersonOrBuilder() { - return person_; - } - - // repeated .eu.dnetlib.data.proto.OafEntity children = 16; - public static final int CHILDREN_FIELD_NUMBER = 16; - private java.util.List children_; - public java.util.List getChildrenList() { - return children_; - } - public java.util.List - getChildrenOrBuilderList() { - return children_; - } - public int getChildrenCount() { - return children_.size(); - } - public eu.dnetlib.data.proto.OafProtos.OafEntity getChildren(int index) { - return children_.get(index); - } - public eu.dnetlib.data.proto.OafProtos.OafEntityOrBuilder getChildrenOrBuilder( - int index) { - return children_.get(index); - } - - // repeated .eu.dnetlib.data.proto.ExtraInfo extraInfo = 15; - public static final int EXTRAINFO_FIELD_NUMBER = 15; - private java.util.List extraInfo_; - public java.util.List getExtraInfoList() { - return extraInfo_; - } - public java.util.List - getExtraInfoOrBuilderList() { - return extraInfo_; - } - public int getExtraInfoCount() { - return extraInfo_.size(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo getExtraInfo(int index) { - return extraInfo_.get(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfoOrBuilder getExtraInfoOrBuilder( - int index) { - return extraInfo_.get(index); - } - - // optional .eu.dnetlib.data.proto.OAIProvenance oaiprovenance = 17; - public static final int OAIPROVENANCE_FIELD_NUMBER = 17; - private eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance oaiprovenance_; - public boolean hasOaiprovenance() { - return ((bitField0_ & 0x00000200) == 0x00000200); - } - public eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance getOaiprovenance() { - return oaiprovenance_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenanceOrBuilder getOaiprovenanceOrBuilder() { - return oaiprovenance_; - } - - private void initFields() { - type_ = eu.dnetlib.data.proto.TypeProtos.Type.datasource; - id_ = ""; - originalId_ = com.google.protobuf.LazyStringArrayList.EMPTY; - collectedfrom_ = java.util.Collections.emptyList(); - pid_ = java.util.Collections.emptyList(); - dateofcollection_ = ""; - dateoftransformation_ = ""; - cachedRel_ = java.util.Collections.emptyList(); - cachedOafRel_ = java.util.Collections.emptyList(); - datasource_ = eu.dnetlib.data.proto.DatasourceProtos.Datasource.getDefaultInstance(); - organization_ = eu.dnetlib.data.proto.OrganizationProtos.Organization.getDefaultInstance(); - project_ = eu.dnetlib.data.proto.ProjectProtos.Project.getDefaultInstance(); - result_ = eu.dnetlib.data.proto.ResultProtos.Result.getDefaultInstance(); - person_ = eu.dnetlib.data.proto.PersonProtos.Person.getDefaultInstance(); - children_ = java.util.Collections.emptyList(); - extraInfo_ = java.util.Collections.emptyList(); - oaiprovenance_ = eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.getDefaultInstance(); - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - if (!hasType()) { - memoizedIsInitialized = 0; - return false; - } - if (!hasId()) { - memoizedIsInitialized = 0; - return false; - } - for (int i = 0; i < getCollectedfromCount(); i++) { - if (!getCollectedfrom(i).isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - for (int i = 0; i < getPidCount(); i++) { - if (!getPid(i).isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - for (int i = 0; i < getCachedRelCount(); i++) { - if (!getCachedRel(i).isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - for (int i = 0; i < getCachedOafRelCount(); i++) { - if (!getCachedOafRel(i).isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasDatasource()) { - if (!getDatasource().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasOrganization()) { - if (!getOrganization().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasProject()) { - if (!getProject().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasResult()) { - if (!getResult().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasPerson()) { - if (!getPerson().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - for (int i = 0; i < getChildrenCount(); i++) { - if (!getChildren(i).isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - for (int i = 0; i < getExtraInfoCount(); i++) { - if (!getExtraInfo(i).isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeEnum(1, type_.getNumber()); - } - for (int i = 0; i < cachedRel_.size(); i++) { - output.writeMessage(2, cachedRel_.get(i)); - } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - output.writeMessage(3, datasource_); - } - if (((bitField0_ & 0x00000020) == 0x00000020)) { - output.writeMessage(4, organization_); - } - if (((bitField0_ & 0x00000100) == 0x00000100)) { - output.writeMessage(5, person_); - } - if (((bitField0_ & 0x00000040) == 0x00000040)) { - output.writeMessage(6, project_); - } - if (((bitField0_ & 0x00000080) == 0x00000080)) { - output.writeMessage(7, result_); - } - for (int i = 0; i < originalId_.size(); i++) { - output.writeBytes(8, originalId_.getByteString(i)); - } - for (int i = 0; i < collectedfrom_.size(); i++) { - output.writeMessage(9, collectedfrom_.get(i)); - } - for (int i = 0; i < pid_.size(); i++) { - output.writeMessage(10, pid_.get(i)); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - output.writeBytes(11, getDateofcollectionBytes()); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - output.writeBytes(12, getIdBytes()); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - output.writeBytes(13, getDateoftransformationBytes()); - } - for (int i = 0; i < extraInfo_.size(); i++) { - output.writeMessage(15, extraInfo_.get(i)); - } - for (int i = 0; i < children_.size(); i++) { - output.writeMessage(16, children_.get(i)); - } - if (((bitField0_ & 0x00000200) == 0x00000200)) { - output.writeMessage(17, oaiprovenance_); - } - for (int i = 0; i < cachedOafRel_.size(); i++) { - output.writeMessage(18, cachedOafRel_.get(i)); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeEnumSize(1, type_.getNumber()); - } - for (int i = 0; i < cachedRel_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(2, cachedRel_.get(i)); - } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(3, datasource_); - } - if (((bitField0_ & 0x00000020) == 0x00000020)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(4, organization_); - } - if (((bitField0_ & 0x00000100) == 0x00000100)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(5, person_); - } - if (((bitField0_ & 0x00000040) == 0x00000040)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(6, project_); - } - if (((bitField0_ & 0x00000080) == 0x00000080)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(7, result_); - } - { - int dataSize = 0; - for (int i = 0; i < originalId_.size(); i++) { - dataSize += com.google.protobuf.CodedOutputStream - .computeBytesSizeNoTag(originalId_.getByteString(i)); - } - size += dataSize; - size += 1 * getOriginalIdList().size(); - } - for (int i = 0; i < collectedfrom_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(9, collectedfrom_.get(i)); - } - for (int i = 0; i < pid_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(10, pid_.get(i)); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(11, getDateofcollectionBytes()); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(12, getIdBytes()); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(13, getDateoftransformationBytes()); - } - for (int i = 0; i < extraInfo_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(15, extraInfo_.get(i)); - } - for (int i = 0; i < children_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(16, children_.get(i)); - } - if (((bitField0_ & 0x00000200) == 0x00000200)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(17, oaiprovenance_); - } - for (int i = 0; i < cachedOafRel_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(18, cachedOafRel_.get(i)); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static eu.dnetlib.data.proto.OafProtos.OafEntity parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.OafProtos.OafEntity parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.OafProtos.OafEntity parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.OafProtos.OafEntity parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.OafProtos.OafEntity parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.OafProtos.OafEntity parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.OafProtos.OafEntity parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.OafProtos.OafEntity parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.OafProtos.OafEntity parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.OafProtos.OafEntity parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(eu.dnetlib.data.proto.OafProtos.OafEntity prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder - implements eu.dnetlib.data.proto.OafProtos.OafEntityOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.OafProtos.internal_static_eu_dnetlib_data_proto_OafEntity_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.OafProtos.internal_static_eu_dnetlib_data_proto_OafEntity_fieldAccessorTable; - } - - // Construct using eu.dnetlib.data.proto.OafProtos.OafEntity.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - getCollectedfromFieldBuilder(); - getPidFieldBuilder(); - getCachedRelFieldBuilder(); - getCachedOafRelFieldBuilder(); - getDatasourceFieldBuilder(); - getOrganizationFieldBuilder(); - getProjectFieldBuilder(); - getResultFieldBuilder(); - getPersonFieldBuilder(); - getChildrenFieldBuilder(); - getExtraInfoFieldBuilder(); - getOaiprovenanceFieldBuilder(); - } - } - private static Builder create() { - return new Builder(); - } - - public Builder clear() { - super.clear(); - type_ = eu.dnetlib.data.proto.TypeProtos.Type.datasource; - bitField0_ = (bitField0_ & ~0x00000001); - id_ = ""; - bitField0_ = (bitField0_ & ~0x00000002); - originalId_ = com.google.protobuf.LazyStringArrayList.EMPTY; - bitField0_ = (bitField0_ & ~0x00000004); - if (collectedfromBuilder_ == null) { - collectedfrom_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000008); - } else { - collectedfromBuilder_.clear(); - } - if (pidBuilder_ == null) { - pid_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000010); - } else { - pidBuilder_.clear(); - } - dateofcollection_ = ""; - bitField0_ = (bitField0_ & ~0x00000020); - dateoftransformation_ = ""; - bitField0_ = (bitField0_ & ~0x00000040); - if (cachedRelBuilder_ == null) { - cachedRel_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000080); - } else { - cachedRelBuilder_.clear(); - } - if (cachedOafRelBuilder_ == null) { - cachedOafRel_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000100); - } else { - cachedOafRelBuilder_.clear(); - } - if (datasourceBuilder_ == null) { - datasource_ = eu.dnetlib.data.proto.DatasourceProtos.Datasource.getDefaultInstance(); - } else { - datasourceBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000200); - if (organizationBuilder_ == null) { - organization_ = eu.dnetlib.data.proto.OrganizationProtos.Organization.getDefaultInstance(); - } else { - organizationBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000400); - if (projectBuilder_ == null) { - project_ = eu.dnetlib.data.proto.ProjectProtos.Project.getDefaultInstance(); - } else { - projectBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000800); - if (resultBuilder_ == null) { - result_ = eu.dnetlib.data.proto.ResultProtos.Result.getDefaultInstance(); - } else { - resultBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00001000); - if (personBuilder_ == null) { - person_ = eu.dnetlib.data.proto.PersonProtos.Person.getDefaultInstance(); - } else { - personBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00002000); - if (childrenBuilder_ == null) { - children_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00004000); - } else { - childrenBuilder_.clear(); - } - if (extraInfoBuilder_ == null) { - extraInfo_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00008000); - } else { - extraInfoBuilder_.clear(); - } - if (oaiprovenanceBuilder_ == null) { - oaiprovenance_ = eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.getDefaultInstance(); - } else { - oaiprovenanceBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00010000); - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return eu.dnetlib.data.proto.OafProtos.OafEntity.getDescriptor(); - } - - public eu.dnetlib.data.proto.OafProtos.OafEntity getDefaultInstanceForType() { - return eu.dnetlib.data.proto.OafProtos.OafEntity.getDefaultInstance(); - } - - public eu.dnetlib.data.proto.OafProtos.OafEntity build() { - eu.dnetlib.data.proto.OafProtos.OafEntity result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - private eu.dnetlib.data.proto.OafProtos.OafEntity buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - eu.dnetlib.data.proto.OafProtos.OafEntity result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return result; - } - - public eu.dnetlib.data.proto.OafProtos.OafEntity buildPartial() { - eu.dnetlib.data.proto.OafProtos.OafEntity result = new eu.dnetlib.data.proto.OafProtos.OafEntity(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - result.type_ = type_; - if (((from_bitField0_ & 0x00000002) == 0x00000002)) { - to_bitField0_ |= 0x00000002; - } - result.id_ = id_; - if (((bitField0_ & 0x00000004) == 0x00000004)) { - originalId_ = new com.google.protobuf.UnmodifiableLazyStringList( - originalId_); - bitField0_ = (bitField0_ & ~0x00000004); - } - result.originalId_ = originalId_; - if (collectedfromBuilder_ == null) { - if (((bitField0_ & 0x00000008) == 0x00000008)) { - collectedfrom_ = java.util.Collections.unmodifiableList(collectedfrom_); - bitField0_ = (bitField0_ & ~0x00000008); - } - result.collectedfrom_ = collectedfrom_; - } else { - result.collectedfrom_ = collectedfromBuilder_.build(); - } - if (pidBuilder_ == null) { - if (((bitField0_ & 0x00000010) == 0x00000010)) { - pid_ = java.util.Collections.unmodifiableList(pid_); - bitField0_ = (bitField0_ & ~0x00000010); - } - result.pid_ = pid_; - } else { - result.pid_ = pidBuilder_.build(); - } - if (((from_bitField0_ & 0x00000020) == 0x00000020)) { - to_bitField0_ |= 0x00000004; - } - result.dateofcollection_ = dateofcollection_; - if (((from_bitField0_ & 0x00000040) == 0x00000040)) { - to_bitField0_ |= 0x00000008; - } - result.dateoftransformation_ = dateoftransformation_; - if (cachedRelBuilder_ == null) { - if (((bitField0_ & 0x00000080) == 0x00000080)) { - cachedRel_ = java.util.Collections.unmodifiableList(cachedRel_); - bitField0_ = (bitField0_ & ~0x00000080); - } - result.cachedRel_ = cachedRel_; - } else { - result.cachedRel_ = cachedRelBuilder_.build(); - } - if (cachedOafRelBuilder_ == null) { - if (((bitField0_ & 0x00000100) == 0x00000100)) { - cachedOafRel_ = java.util.Collections.unmodifiableList(cachedOafRel_); - bitField0_ = (bitField0_ & ~0x00000100); - } - result.cachedOafRel_ = cachedOafRel_; - } else { - result.cachedOafRel_ = cachedOafRelBuilder_.build(); - } - if (((from_bitField0_ & 0x00000200) == 0x00000200)) { - to_bitField0_ |= 0x00000010; - } - if (datasourceBuilder_ == null) { - result.datasource_ = datasource_; - } else { - result.datasource_ = datasourceBuilder_.build(); - } - if (((from_bitField0_ & 0x00000400) == 0x00000400)) { - to_bitField0_ |= 0x00000020; - } - if (organizationBuilder_ == null) { - result.organization_ = organization_; - } else { - result.organization_ = organizationBuilder_.build(); - } - if (((from_bitField0_ & 0x00000800) == 0x00000800)) { - to_bitField0_ |= 0x00000040; - } - if (projectBuilder_ == null) { - result.project_ = project_; - } else { - result.project_ = projectBuilder_.build(); - } - if (((from_bitField0_ & 0x00001000) == 0x00001000)) { - to_bitField0_ |= 0x00000080; - } - if (resultBuilder_ == null) { - result.result_ = result_; - } else { - result.result_ = resultBuilder_.build(); - } - if (((from_bitField0_ & 0x00002000) == 0x00002000)) { - to_bitField0_ |= 0x00000100; - } - if (personBuilder_ == null) { - result.person_ = person_; - } else { - result.person_ = personBuilder_.build(); - } - if (childrenBuilder_ == null) { - if (((bitField0_ & 0x00004000) == 0x00004000)) { - children_ = java.util.Collections.unmodifiableList(children_); - bitField0_ = (bitField0_ & ~0x00004000); - } - result.children_ = children_; - } else { - result.children_ = childrenBuilder_.build(); - } - if (extraInfoBuilder_ == null) { - if (((bitField0_ & 0x00008000) == 0x00008000)) { - extraInfo_ = java.util.Collections.unmodifiableList(extraInfo_); - bitField0_ = (bitField0_ & ~0x00008000); - } - result.extraInfo_ = extraInfo_; - } else { - result.extraInfo_ = extraInfoBuilder_.build(); - } - if (((from_bitField0_ & 0x00010000) == 0x00010000)) { - to_bitField0_ |= 0x00000200; - } - if (oaiprovenanceBuilder_ == null) { - result.oaiprovenance_ = oaiprovenance_; - } else { - result.oaiprovenance_ = oaiprovenanceBuilder_.build(); - } - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof eu.dnetlib.data.proto.OafProtos.OafEntity) { - return mergeFrom((eu.dnetlib.data.proto.OafProtos.OafEntity)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(eu.dnetlib.data.proto.OafProtos.OafEntity other) { - if (other == eu.dnetlib.data.proto.OafProtos.OafEntity.getDefaultInstance()) return this; - if (other.hasType()) { - setType(other.getType()); - } - if (other.hasId()) { - setId(other.getId()); - } - if (!other.originalId_.isEmpty()) { - if (originalId_.isEmpty()) { - originalId_ = other.originalId_; - bitField0_ = (bitField0_ & ~0x00000004); - } else { - ensureOriginalIdIsMutable(); - originalId_.addAll(other.originalId_); - } - onChanged(); - } - if (collectedfromBuilder_ == null) { - if (!other.collectedfrom_.isEmpty()) { - if (collectedfrom_.isEmpty()) { - collectedfrom_ = other.collectedfrom_; - bitField0_ = (bitField0_ & ~0x00000008); - } else { - ensureCollectedfromIsMutable(); - collectedfrom_.addAll(other.collectedfrom_); - } - onChanged(); - } - } else { - if (!other.collectedfrom_.isEmpty()) { - if (collectedfromBuilder_.isEmpty()) { - collectedfromBuilder_.dispose(); - collectedfromBuilder_ = null; - collectedfrom_ = other.collectedfrom_; - bitField0_ = (bitField0_ & ~0x00000008); - collectedfromBuilder_ = - com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? - getCollectedfromFieldBuilder() : null; - } else { - collectedfromBuilder_.addAllMessages(other.collectedfrom_); - } - } - } - if (pidBuilder_ == null) { - if (!other.pid_.isEmpty()) { - if (pid_.isEmpty()) { - pid_ = other.pid_; - bitField0_ = (bitField0_ & ~0x00000010); - } else { - ensurePidIsMutable(); - pid_.addAll(other.pid_); - } - onChanged(); - } - } else { - if (!other.pid_.isEmpty()) { - if (pidBuilder_.isEmpty()) { - pidBuilder_.dispose(); - pidBuilder_ = null; - pid_ = other.pid_; - bitField0_ = (bitField0_ & ~0x00000010); - pidBuilder_ = - com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? - getPidFieldBuilder() : null; - } else { - pidBuilder_.addAllMessages(other.pid_); - } - } - } - if (other.hasDateofcollection()) { - setDateofcollection(other.getDateofcollection()); - } - if (other.hasDateoftransformation()) { - setDateoftransformation(other.getDateoftransformation()); - } - if (cachedRelBuilder_ == null) { - if (!other.cachedRel_.isEmpty()) { - if (cachedRel_.isEmpty()) { - cachedRel_ = other.cachedRel_; - bitField0_ = (bitField0_ & ~0x00000080); - } else { - ensureCachedRelIsMutable(); - cachedRel_.addAll(other.cachedRel_); - } - onChanged(); - } - } else { - if (!other.cachedRel_.isEmpty()) { - if (cachedRelBuilder_.isEmpty()) { - cachedRelBuilder_.dispose(); - cachedRelBuilder_ = null; - cachedRel_ = other.cachedRel_; - bitField0_ = (bitField0_ & ~0x00000080); - cachedRelBuilder_ = - com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? - getCachedRelFieldBuilder() : null; - } else { - cachedRelBuilder_.addAllMessages(other.cachedRel_); - } - } - } - if (cachedOafRelBuilder_ == null) { - if (!other.cachedOafRel_.isEmpty()) { - if (cachedOafRel_.isEmpty()) { - cachedOafRel_ = other.cachedOafRel_; - bitField0_ = (bitField0_ & ~0x00000100); - } else { - ensureCachedOafRelIsMutable(); - cachedOafRel_.addAll(other.cachedOafRel_); - } - onChanged(); - } - } else { - if (!other.cachedOafRel_.isEmpty()) { - if (cachedOafRelBuilder_.isEmpty()) { - cachedOafRelBuilder_.dispose(); - cachedOafRelBuilder_ = null; - cachedOafRel_ = other.cachedOafRel_; - bitField0_ = (bitField0_ & ~0x00000100); - cachedOafRelBuilder_ = - com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? - getCachedOafRelFieldBuilder() : null; - } else { - cachedOafRelBuilder_.addAllMessages(other.cachedOafRel_); - } - } - } - if (other.hasDatasource()) { - mergeDatasource(other.getDatasource()); - } - if (other.hasOrganization()) { - mergeOrganization(other.getOrganization()); - } - if (other.hasProject()) { - mergeProject(other.getProject()); - } - if (other.hasResult()) { - mergeResult(other.getResult()); - } - if (other.hasPerson()) { - mergePerson(other.getPerson()); - } - if (childrenBuilder_ == null) { - if (!other.children_.isEmpty()) { - if (children_.isEmpty()) { - children_ = other.children_; - bitField0_ = (bitField0_ & ~0x00004000); - } else { - ensureChildrenIsMutable(); - children_.addAll(other.children_); - } - onChanged(); - } - } else { - if (!other.children_.isEmpty()) { - if (childrenBuilder_.isEmpty()) { - childrenBuilder_.dispose(); - childrenBuilder_ = null; - children_ = other.children_; - bitField0_ = (bitField0_ & ~0x00004000); - childrenBuilder_ = - com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? - getChildrenFieldBuilder() : null; - } else { - childrenBuilder_.addAllMessages(other.children_); - } - } - } - if (extraInfoBuilder_ == null) { - if (!other.extraInfo_.isEmpty()) { - if (extraInfo_.isEmpty()) { - extraInfo_ = other.extraInfo_; - bitField0_ = (bitField0_ & ~0x00008000); - } else { - ensureExtraInfoIsMutable(); - extraInfo_.addAll(other.extraInfo_); - } - onChanged(); - } - } else { - if (!other.extraInfo_.isEmpty()) { - if (extraInfoBuilder_.isEmpty()) { - extraInfoBuilder_.dispose(); - extraInfoBuilder_ = null; - extraInfo_ = other.extraInfo_; - bitField0_ = (bitField0_ & ~0x00008000); - extraInfoBuilder_ = - com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? - getExtraInfoFieldBuilder() : null; - } else { - extraInfoBuilder_.addAllMessages(other.extraInfo_); - } - } - } - if (other.hasOaiprovenance()) { - mergeOaiprovenance(other.getOaiprovenance()); - } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - - public final boolean isInitialized() { - if (!hasType()) { - - return false; - } - if (!hasId()) { - - return false; - } - for (int i = 0; i < getCollectedfromCount(); i++) { - if (!getCollectedfrom(i).isInitialized()) { - - return false; - } - } - for (int i = 0; i < getPidCount(); i++) { - if (!getPid(i).isInitialized()) { - - return false; - } - } - for (int i = 0; i < getCachedRelCount(); i++) { - if (!getCachedRel(i).isInitialized()) { - - return false; - } - } - for (int i = 0; i < getCachedOafRelCount(); i++) { - if (!getCachedOafRel(i).isInitialized()) { - - return false; - } - } - if (hasDatasource()) { - if (!getDatasource().isInitialized()) { - - return false; - } - } - if (hasOrganization()) { - if (!getOrganization().isInitialized()) { - - return false; - } - } - if (hasProject()) { - if (!getProject().isInitialized()) { - - return false; - } - } - if (hasResult()) { - if (!getResult().isInitialized()) { - - return false; - } - } - if (hasPerson()) { - if (!getPerson().isInitialized()) { - - return false; - } - } - for (int i = 0; i < getChildrenCount(); i++) { - if (!getChildren(i).isInitialized()) { - - return false; - } - } - for (int i = 0; i < getExtraInfoCount(); i++) { - if (!getExtraInfo(i).isInitialized()) { - - return false; - } - } - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - } - break; - } - case 8: { - int rawValue = input.readEnum(); - eu.dnetlib.data.proto.TypeProtos.Type value = eu.dnetlib.data.proto.TypeProtos.Type.valueOf(rawValue); - if (value == null) { - unknownFields.mergeVarintField(1, rawValue); - } else { - bitField0_ |= 0x00000001; - type_ = value; - } - break; - } - case 18: { - eu.dnetlib.data.proto.OafProtos.OafRel.Builder subBuilder = eu.dnetlib.data.proto.OafProtos.OafRel.newBuilder(); - input.readMessage(subBuilder, extensionRegistry); - addCachedRel(subBuilder.buildPartial()); - break; - } - case 26: { - eu.dnetlib.data.proto.DatasourceProtos.Datasource.Builder subBuilder = eu.dnetlib.data.proto.DatasourceProtos.Datasource.newBuilder(); - if (hasDatasource()) { - subBuilder.mergeFrom(getDatasource()); - } - input.readMessage(subBuilder, extensionRegistry); - setDatasource(subBuilder.buildPartial()); - break; - } - case 34: { - eu.dnetlib.data.proto.OrganizationProtos.Organization.Builder subBuilder = eu.dnetlib.data.proto.OrganizationProtos.Organization.newBuilder(); - if (hasOrganization()) { - subBuilder.mergeFrom(getOrganization()); - } - input.readMessage(subBuilder, extensionRegistry); - setOrganization(subBuilder.buildPartial()); - break; - } - case 42: { - eu.dnetlib.data.proto.PersonProtos.Person.Builder subBuilder = eu.dnetlib.data.proto.PersonProtos.Person.newBuilder(); - if (hasPerson()) { - subBuilder.mergeFrom(getPerson()); - } - input.readMessage(subBuilder, extensionRegistry); - setPerson(subBuilder.buildPartial()); - break; - } - case 50: { - eu.dnetlib.data.proto.ProjectProtos.Project.Builder subBuilder = eu.dnetlib.data.proto.ProjectProtos.Project.newBuilder(); - if (hasProject()) { - subBuilder.mergeFrom(getProject()); - } - input.readMessage(subBuilder, extensionRegistry); - setProject(subBuilder.buildPartial()); - break; - } - case 58: { - eu.dnetlib.data.proto.ResultProtos.Result.Builder subBuilder = eu.dnetlib.data.proto.ResultProtos.Result.newBuilder(); - if (hasResult()) { - subBuilder.mergeFrom(getResult()); - } - input.readMessage(subBuilder, extensionRegistry); - setResult(subBuilder.buildPartial()); - break; - } - case 66: { - ensureOriginalIdIsMutable(); - originalId_.add(input.readBytes()); - break; - } - case 74: { - eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.newBuilder(); - input.readMessage(subBuilder, extensionRegistry); - addCollectedfrom(subBuilder.buildPartial()); - break; - } - case 82: { - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.newBuilder(); - input.readMessage(subBuilder, extensionRegistry); - addPid(subBuilder.buildPartial()); - break; - } - case 90: { - bitField0_ |= 0x00000020; - dateofcollection_ = input.readBytes(); - break; - } - case 98: { - bitField0_ |= 0x00000002; - id_ = input.readBytes(); - break; - } - case 106: { - bitField0_ |= 0x00000040; - dateoftransformation_ = input.readBytes(); - break; - } - case 122: { - eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo.newBuilder(); - input.readMessage(subBuilder, extensionRegistry); - addExtraInfo(subBuilder.buildPartial()); - break; - } - case 130: { - eu.dnetlib.data.proto.OafProtos.OafEntity.Builder subBuilder = eu.dnetlib.data.proto.OafProtos.OafEntity.newBuilder(); - input.readMessage(subBuilder, extensionRegistry); - addChildren(subBuilder.buildPartial()); - break; - } - case 138: { - eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.newBuilder(); - if (hasOaiprovenance()) { - subBuilder.mergeFrom(getOaiprovenance()); - } - input.readMessage(subBuilder, extensionRegistry); - setOaiprovenance(subBuilder.buildPartial()); - break; - } - case 146: { - eu.dnetlib.data.proto.OafProtos.Oaf.Builder subBuilder = eu.dnetlib.data.proto.OafProtos.Oaf.newBuilder(); - input.readMessage(subBuilder, extensionRegistry); - addCachedOafRel(subBuilder.buildPartial()); - break; - } - } - } - } - - private int bitField0_; - - // required .eu.dnetlib.data.proto.Type type = 1; - private eu.dnetlib.data.proto.TypeProtos.Type type_ = eu.dnetlib.data.proto.TypeProtos.Type.datasource; - public boolean hasType() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.TypeProtos.Type getType() { - return type_; - } - public Builder setType(eu.dnetlib.data.proto.TypeProtos.Type value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000001; - type_ = value; - onChanged(); - return this; - } - public Builder clearType() { - bitField0_ = (bitField0_ & ~0x00000001); - type_ = eu.dnetlib.data.proto.TypeProtos.Type.datasource; - onChanged(); - return this; - } - - // required string id = 12; - private java.lang.Object id_ = ""; - public boolean hasId() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public String getId() { - java.lang.Object ref = id_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - id_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setId(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000002; - id_ = value; - onChanged(); - return this; - } - public Builder clearId() { - bitField0_ = (bitField0_ & ~0x00000002); - id_ = getDefaultInstance().getId(); - onChanged(); - return this; - } - void setId(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000002; - id_ = value; - onChanged(); - } - - // repeated string originalId = 8; - private com.google.protobuf.LazyStringList originalId_ = com.google.protobuf.LazyStringArrayList.EMPTY; - private void ensureOriginalIdIsMutable() { - if (!((bitField0_ & 0x00000004) == 0x00000004)) { - originalId_ = new com.google.protobuf.LazyStringArrayList(originalId_); - bitField0_ |= 0x00000004; - } - } - public java.util.List - getOriginalIdList() { - return java.util.Collections.unmodifiableList(originalId_); - } - public int getOriginalIdCount() { - return originalId_.size(); - } - public String getOriginalId(int index) { - return originalId_.get(index); - } - public Builder setOriginalId( - int index, String value) { - if (value == null) { - throw new NullPointerException(); - } - ensureOriginalIdIsMutable(); - originalId_.set(index, value); - onChanged(); - return this; - } - public Builder addOriginalId(String value) { - if (value == null) { - throw new NullPointerException(); - } - ensureOriginalIdIsMutable(); - originalId_.add(value); - onChanged(); - return this; - } - public Builder addAllOriginalId( - java.lang.Iterable values) { - ensureOriginalIdIsMutable(); - super.addAll(values, originalId_); - onChanged(); - return this; - } - public Builder clearOriginalId() { - originalId_ = com.google.protobuf.LazyStringArrayList.EMPTY; - bitField0_ = (bitField0_ & ~0x00000004); - onChanged(); - return this; - } - void addOriginalId(com.google.protobuf.ByteString value) { - ensureOriginalIdIsMutable(); - originalId_.add(value); - onChanged(); - } - - // repeated .eu.dnetlib.data.proto.KeyValue collectedfrom = 9; - private java.util.List collectedfrom_ = - java.util.Collections.emptyList(); - private void ensureCollectedfromIsMutable() { - if (!((bitField0_ & 0x00000008) == 0x00000008)) { - collectedfrom_ = new java.util.ArrayList(collectedfrom_); - bitField0_ |= 0x00000008; - } - } - - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.KeyValue, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder, eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder> collectedfromBuilder_; - - public java.util.List getCollectedfromList() { - if (collectedfromBuilder_ == null) { - return java.util.Collections.unmodifiableList(collectedfrom_); - } else { - return collectedfromBuilder_.getMessageList(); - } - } - public int getCollectedfromCount() { - if (collectedfromBuilder_ == null) { - return collectedfrom_.size(); - } else { - return collectedfromBuilder_.getCount(); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue getCollectedfrom(int index) { - if (collectedfromBuilder_ == null) { - return collectedfrom_.get(index); - } else { - return collectedfromBuilder_.getMessage(index); - } - } - public Builder setCollectedfrom( - int index, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue value) { - if (collectedfromBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureCollectedfromIsMutable(); - collectedfrom_.set(index, value); - onChanged(); - } else { - collectedfromBuilder_.setMessage(index, value); - } - return this; - } - public Builder setCollectedfrom( - int index, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder builderForValue) { - if (collectedfromBuilder_ == null) { - ensureCollectedfromIsMutable(); - collectedfrom_.set(index, builderForValue.build()); - onChanged(); - } else { - collectedfromBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - public Builder addCollectedfrom(eu.dnetlib.data.proto.FieldTypeProtos.KeyValue value) { - if (collectedfromBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureCollectedfromIsMutable(); - collectedfrom_.add(value); - onChanged(); - } else { - collectedfromBuilder_.addMessage(value); - } - return this; - } - public Builder addCollectedfrom( - int index, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue value) { - if (collectedfromBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureCollectedfromIsMutable(); - collectedfrom_.add(index, value); - onChanged(); - } else { - collectedfromBuilder_.addMessage(index, value); - } - return this; - } - public Builder addCollectedfrom( - eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder builderForValue) { - if (collectedfromBuilder_ == null) { - ensureCollectedfromIsMutable(); - collectedfrom_.add(builderForValue.build()); - onChanged(); - } else { - collectedfromBuilder_.addMessage(builderForValue.build()); - } - return this; - } - public Builder addCollectedfrom( - int index, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder builderForValue) { - if (collectedfromBuilder_ == null) { - ensureCollectedfromIsMutable(); - collectedfrom_.add(index, builderForValue.build()); - onChanged(); - } else { - collectedfromBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - public Builder addAllCollectedfrom( - java.lang.Iterable values) { - if (collectedfromBuilder_ == null) { - ensureCollectedfromIsMutable(); - super.addAll(values, collectedfrom_); - onChanged(); - } else { - collectedfromBuilder_.addAllMessages(values); - } - return this; - } - public Builder clearCollectedfrom() { - if (collectedfromBuilder_ == null) { - collectedfrom_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000008); - onChanged(); - } else { - collectedfromBuilder_.clear(); - } - return this; - } - public Builder removeCollectedfrom(int index) { - if (collectedfromBuilder_ == null) { - ensureCollectedfromIsMutable(); - collectedfrom_.remove(index); - onChanged(); - } else { - collectedfromBuilder_.remove(index); - } - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder getCollectedfromBuilder( - int index) { - return getCollectedfromFieldBuilder().getBuilder(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder getCollectedfromOrBuilder( - int index) { - if (collectedfromBuilder_ == null) { - return collectedfrom_.get(index); } else { - return collectedfromBuilder_.getMessageOrBuilder(index); - } - } - public java.util.List - getCollectedfromOrBuilderList() { - if (collectedfromBuilder_ != null) { - return collectedfromBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(collectedfrom_); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder addCollectedfromBuilder() { - return getCollectedfromFieldBuilder().addBuilder( - eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.getDefaultInstance()); - } - public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder addCollectedfromBuilder( - int index) { - return getCollectedfromFieldBuilder().addBuilder( - index, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.getDefaultInstance()); - } - public java.util.List - getCollectedfromBuilderList() { - return getCollectedfromFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.KeyValue, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder, eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder> - getCollectedfromFieldBuilder() { - if (collectedfromBuilder_ == null) { - collectedfromBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.KeyValue, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder, eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder>( - collectedfrom_, - ((bitField0_ & 0x00000008) == 0x00000008), - getParentForChildren(), - isClean()); - collectedfrom_ = null; - } - return collectedfromBuilder_; - } - - // repeated .eu.dnetlib.data.proto.StructuredProperty pid = 10; - private java.util.List pid_ = - java.util.Collections.emptyList(); - private void ensurePidIsMutable() { - if (!((bitField0_ & 0x00000010) == 0x00000010)) { - pid_ = new java.util.ArrayList(pid_); - bitField0_ |= 0x00000010; - } - } - - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder> pidBuilder_; - - public java.util.List getPidList() { - if (pidBuilder_ == null) { - return java.util.Collections.unmodifiableList(pid_); - } else { - return pidBuilder_.getMessageList(); - } - } - public int getPidCount() { - if (pidBuilder_ == null) { - return pid_.size(); - } else { - return pidBuilder_.getCount(); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty getPid(int index) { - if (pidBuilder_ == null) { - return pid_.get(index); - } else { - return pidBuilder_.getMessage(index); - } - } - public Builder setPid( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty value) { - if (pidBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensurePidIsMutable(); - pid_.set(index, value); - onChanged(); - } else { - pidBuilder_.setMessage(index, value); - } - return this; - } - public Builder setPid( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder builderForValue) { - if (pidBuilder_ == null) { - ensurePidIsMutable(); - pid_.set(index, builderForValue.build()); - onChanged(); - } else { - pidBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - public Builder addPid(eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty value) { - if (pidBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensurePidIsMutable(); - pid_.add(value); - onChanged(); - } else { - pidBuilder_.addMessage(value); - } - return this; - } - public Builder addPid( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty value) { - if (pidBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensurePidIsMutable(); - pid_.add(index, value); - onChanged(); - } else { - pidBuilder_.addMessage(index, value); - } - return this; - } - public Builder addPid( - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder builderForValue) { - if (pidBuilder_ == null) { - ensurePidIsMutable(); - pid_.add(builderForValue.build()); - onChanged(); - } else { - pidBuilder_.addMessage(builderForValue.build()); - } - return this; - } - public Builder addPid( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder builderForValue) { - if (pidBuilder_ == null) { - ensurePidIsMutable(); - pid_.add(index, builderForValue.build()); - onChanged(); - } else { - pidBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - public Builder addAllPid( - java.lang.Iterable values) { - if (pidBuilder_ == null) { - ensurePidIsMutable(); - super.addAll(values, pid_); - onChanged(); - } else { - pidBuilder_.addAllMessages(values); - } - return this; - } - public Builder clearPid() { - if (pidBuilder_ == null) { - pid_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000010); - onChanged(); - } else { - pidBuilder_.clear(); - } - return this; - } - public Builder removePid(int index) { - if (pidBuilder_ == null) { - ensurePidIsMutable(); - pid_.remove(index); - onChanged(); - } else { - pidBuilder_.remove(index); - } - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder getPidBuilder( - int index) { - return getPidFieldBuilder().getBuilder(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder getPidOrBuilder( - int index) { - if (pidBuilder_ == null) { - return pid_.get(index); } else { - return pidBuilder_.getMessageOrBuilder(index); - } - } - public java.util.List - getPidOrBuilderList() { - if (pidBuilder_ != null) { - return pidBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(pid_); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder addPidBuilder() { - return getPidFieldBuilder().addBuilder( - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.getDefaultInstance()); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder addPidBuilder( - int index) { - return getPidFieldBuilder().addBuilder( - index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.getDefaultInstance()); - } - public java.util.List - getPidBuilderList() { - return getPidFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder> - getPidFieldBuilder() { - if (pidBuilder_ == null) { - pidBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder>( - pid_, - ((bitField0_ & 0x00000010) == 0x00000010), - getParentForChildren(), - isClean()); - pid_ = null; - } - return pidBuilder_; - } - - // optional string dateofcollection = 11; - private java.lang.Object dateofcollection_ = ""; - public boolean hasDateofcollection() { - return ((bitField0_ & 0x00000020) == 0x00000020); - } - public String getDateofcollection() { - java.lang.Object ref = dateofcollection_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - dateofcollection_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setDateofcollection(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000020; - dateofcollection_ = value; - onChanged(); - return this; - } - public Builder clearDateofcollection() { - bitField0_ = (bitField0_ & ~0x00000020); - dateofcollection_ = getDefaultInstance().getDateofcollection(); - onChanged(); - return this; - } - void setDateofcollection(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000020; - dateofcollection_ = value; - onChanged(); - } - - // optional string dateoftransformation = 13; - private java.lang.Object dateoftransformation_ = ""; - public boolean hasDateoftransformation() { - return ((bitField0_ & 0x00000040) == 0x00000040); - } - public String getDateoftransformation() { - java.lang.Object ref = dateoftransformation_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - dateoftransformation_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setDateoftransformation(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000040; - dateoftransformation_ = value; - onChanged(); - return this; - } - public Builder clearDateoftransformation() { - bitField0_ = (bitField0_ & ~0x00000040); - dateoftransformation_ = getDefaultInstance().getDateoftransformation(); - onChanged(); - return this; - } - void setDateoftransformation(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000040; - dateoftransformation_ = value; - onChanged(); - } - - // repeated .eu.dnetlib.data.proto.OafRel cachedRel = 2; - private java.util.List cachedRel_ = - java.util.Collections.emptyList(); - private void ensureCachedRelIsMutable() { - if (!((bitField0_ & 0x00000080) == 0x00000080)) { - cachedRel_ = new java.util.ArrayList(cachedRel_); - bitField0_ |= 0x00000080; - } - } - - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.OafProtos.OafRel, eu.dnetlib.data.proto.OafProtos.OafRel.Builder, eu.dnetlib.data.proto.OafProtos.OafRelOrBuilder> cachedRelBuilder_; - - public java.util.List getCachedRelList() { - if (cachedRelBuilder_ == null) { - return java.util.Collections.unmodifiableList(cachedRel_); - } else { - return cachedRelBuilder_.getMessageList(); - } - } - public int getCachedRelCount() { - if (cachedRelBuilder_ == null) { - return cachedRel_.size(); - } else { - return cachedRelBuilder_.getCount(); - } - } - public eu.dnetlib.data.proto.OafProtos.OafRel getCachedRel(int index) { - if (cachedRelBuilder_ == null) { - return cachedRel_.get(index); - } else { - return cachedRelBuilder_.getMessage(index); - } - } - public Builder setCachedRel( - int index, eu.dnetlib.data.proto.OafProtos.OafRel value) { - if (cachedRelBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureCachedRelIsMutable(); - cachedRel_.set(index, value); - onChanged(); - } else { - cachedRelBuilder_.setMessage(index, value); - } - return this; - } - public Builder setCachedRel( - int index, eu.dnetlib.data.proto.OafProtos.OafRel.Builder builderForValue) { - if (cachedRelBuilder_ == null) { - ensureCachedRelIsMutable(); - cachedRel_.set(index, builderForValue.build()); - onChanged(); - } else { - cachedRelBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - public Builder addCachedRel(eu.dnetlib.data.proto.OafProtos.OafRel value) { - if (cachedRelBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureCachedRelIsMutable(); - cachedRel_.add(value); - onChanged(); - } else { - cachedRelBuilder_.addMessage(value); - } - return this; - } - public Builder addCachedRel( - int index, eu.dnetlib.data.proto.OafProtos.OafRel value) { - if (cachedRelBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureCachedRelIsMutable(); - cachedRel_.add(index, value); - onChanged(); - } else { - cachedRelBuilder_.addMessage(index, value); - } - return this; - } - public Builder addCachedRel( - eu.dnetlib.data.proto.OafProtos.OafRel.Builder builderForValue) { - if (cachedRelBuilder_ == null) { - ensureCachedRelIsMutable(); - cachedRel_.add(builderForValue.build()); - onChanged(); - } else { - cachedRelBuilder_.addMessage(builderForValue.build()); - } - return this; - } - public Builder addCachedRel( - int index, eu.dnetlib.data.proto.OafProtos.OafRel.Builder builderForValue) { - if (cachedRelBuilder_ == null) { - ensureCachedRelIsMutable(); - cachedRel_.add(index, builderForValue.build()); - onChanged(); - } else { - cachedRelBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - public Builder addAllCachedRel( - java.lang.Iterable values) { - if (cachedRelBuilder_ == null) { - ensureCachedRelIsMutable(); - super.addAll(values, cachedRel_); - onChanged(); - } else { - cachedRelBuilder_.addAllMessages(values); - } - return this; - } - public Builder clearCachedRel() { - if (cachedRelBuilder_ == null) { - cachedRel_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000080); - onChanged(); - } else { - cachedRelBuilder_.clear(); - } - return this; - } - public Builder removeCachedRel(int index) { - if (cachedRelBuilder_ == null) { - ensureCachedRelIsMutable(); - cachedRel_.remove(index); - onChanged(); - } else { - cachedRelBuilder_.remove(index); - } - return this; - } - public eu.dnetlib.data.proto.OafProtos.OafRel.Builder getCachedRelBuilder( - int index) { - return getCachedRelFieldBuilder().getBuilder(index); - } - public eu.dnetlib.data.proto.OafProtos.OafRelOrBuilder getCachedRelOrBuilder( - int index) { - if (cachedRelBuilder_ == null) { - return cachedRel_.get(index); } else { - return cachedRelBuilder_.getMessageOrBuilder(index); - } - } - public java.util.List - getCachedRelOrBuilderList() { - if (cachedRelBuilder_ != null) { - return cachedRelBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(cachedRel_); - } - } - public eu.dnetlib.data.proto.OafProtos.OafRel.Builder addCachedRelBuilder() { - return getCachedRelFieldBuilder().addBuilder( - eu.dnetlib.data.proto.OafProtos.OafRel.getDefaultInstance()); - } - public eu.dnetlib.data.proto.OafProtos.OafRel.Builder addCachedRelBuilder( - int index) { - return getCachedRelFieldBuilder().addBuilder( - index, eu.dnetlib.data.proto.OafProtos.OafRel.getDefaultInstance()); - } - public java.util.List - getCachedRelBuilderList() { - return getCachedRelFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.OafProtos.OafRel, eu.dnetlib.data.proto.OafProtos.OafRel.Builder, eu.dnetlib.data.proto.OafProtos.OafRelOrBuilder> - getCachedRelFieldBuilder() { - if (cachedRelBuilder_ == null) { - cachedRelBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.OafProtos.OafRel, eu.dnetlib.data.proto.OafProtos.OafRel.Builder, eu.dnetlib.data.proto.OafProtos.OafRelOrBuilder>( - cachedRel_, - ((bitField0_ & 0x00000080) == 0x00000080), - getParentForChildren(), - isClean()); - cachedRel_ = null; - } - return cachedRelBuilder_; - } - - // repeated .eu.dnetlib.data.proto.Oaf cachedOafRel = 18; - private java.util.List cachedOafRel_ = - java.util.Collections.emptyList(); - private void ensureCachedOafRelIsMutable() { - if (!((bitField0_ & 0x00000100) == 0x00000100)) { - cachedOafRel_ = new java.util.ArrayList(cachedOafRel_); - bitField0_ |= 0x00000100; - } - } - - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.OafProtos.Oaf, eu.dnetlib.data.proto.OafProtos.Oaf.Builder, eu.dnetlib.data.proto.OafProtos.OafOrBuilder> cachedOafRelBuilder_; - - public java.util.List getCachedOafRelList() { - if (cachedOafRelBuilder_ == null) { - return java.util.Collections.unmodifiableList(cachedOafRel_); - } else { - return cachedOafRelBuilder_.getMessageList(); - } - } - public int getCachedOafRelCount() { - if (cachedOafRelBuilder_ == null) { - return cachedOafRel_.size(); - } else { - return cachedOafRelBuilder_.getCount(); - } - } - public eu.dnetlib.data.proto.OafProtos.Oaf getCachedOafRel(int index) { - if (cachedOafRelBuilder_ == null) { - return cachedOafRel_.get(index); - } else { - return cachedOafRelBuilder_.getMessage(index); - } - } - public Builder setCachedOafRel( - int index, eu.dnetlib.data.proto.OafProtos.Oaf value) { - if (cachedOafRelBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureCachedOafRelIsMutable(); - cachedOafRel_.set(index, value); - onChanged(); - } else { - cachedOafRelBuilder_.setMessage(index, value); - } - return this; - } - public Builder setCachedOafRel( - int index, eu.dnetlib.data.proto.OafProtos.Oaf.Builder builderForValue) { - if (cachedOafRelBuilder_ == null) { - ensureCachedOafRelIsMutable(); - cachedOafRel_.set(index, builderForValue.build()); - onChanged(); - } else { - cachedOafRelBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - public Builder addCachedOafRel(eu.dnetlib.data.proto.OafProtos.Oaf value) { - if (cachedOafRelBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureCachedOafRelIsMutable(); - cachedOafRel_.add(value); - onChanged(); - } else { - cachedOafRelBuilder_.addMessage(value); - } - return this; - } - public Builder addCachedOafRel( - int index, eu.dnetlib.data.proto.OafProtos.Oaf value) { - if (cachedOafRelBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureCachedOafRelIsMutable(); - cachedOafRel_.add(index, value); - onChanged(); - } else { - cachedOafRelBuilder_.addMessage(index, value); - } - return this; - } - public Builder addCachedOafRel( - eu.dnetlib.data.proto.OafProtos.Oaf.Builder builderForValue) { - if (cachedOafRelBuilder_ == null) { - ensureCachedOafRelIsMutable(); - cachedOafRel_.add(builderForValue.build()); - onChanged(); - } else { - cachedOafRelBuilder_.addMessage(builderForValue.build()); - } - return this; - } - public Builder addCachedOafRel( - int index, eu.dnetlib.data.proto.OafProtos.Oaf.Builder builderForValue) { - if (cachedOafRelBuilder_ == null) { - ensureCachedOafRelIsMutable(); - cachedOafRel_.add(index, builderForValue.build()); - onChanged(); - } else { - cachedOafRelBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - public Builder addAllCachedOafRel( - java.lang.Iterable values) { - if (cachedOafRelBuilder_ == null) { - ensureCachedOafRelIsMutable(); - super.addAll(values, cachedOafRel_); - onChanged(); - } else { - cachedOafRelBuilder_.addAllMessages(values); - } - return this; - } - public Builder clearCachedOafRel() { - if (cachedOafRelBuilder_ == null) { - cachedOafRel_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000100); - onChanged(); - } else { - cachedOafRelBuilder_.clear(); - } - return this; - } - public Builder removeCachedOafRel(int index) { - if (cachedOafRelBuilder_ == null) { - ensureCachedOafRelIsMutable(); - cachedOafRel_.remove(index); - onChanged(); - } else { - cachedOafRelBuilder_.remove(index); - } - return this; - } - public eu.dnetlib.data.proto.OafProtos.Oaf.Builder getCachedOafRelBuilder( - int index) { - return getCachedOafRelFieldBuilder().getBuilder(index); - } - public eu.dnetlib.data.proto.OafProtos.OafOrBuilder getCachedOafRelOrBuilder( - int index) { - if (cachedOafRelBuilder_ == null) { - return cachedOafRel_.get(index); } else { - return cachedOafRelBuilder_.getMessageOrBuilder(index); - } - } - public java.util.List - getCachedOafRelOrBuilderList() { - if (cachedOafRelBuilder_ != null) { - return cachedOafRelBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(cachedOafRel_); - } - } - public eu.dnetlib.data.proto.OafProtos.Oaf.Builder addCachedOafRelBuilder() { - return getCachedOafRelFieldBuilder().addBuilder( - eu.dnetlib.data.proto.OafProtos.Oaf.getDefaultInstance()); - } - public eu.dnetlib.data.proto.OafProtos.Oaf.Builder addCachedOafRelBuilder( - int index) { - return getCachedOafRelFieldBuilder().addBuilder( - index, eu.dnetlib.data.proto.OafProtos.Oaf.getDefaultInstance()); - } - public java.util.List - getCachedOafRelBuilderList() { - return getCachedOafRelFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.OafProtos.Oaf, eu.dnetlib.data.proto.OafProtos.Oaf.Builder, eu.dnetlib.data.proto.OafProtos.OafOrBuilder> - getCachedOafRelFieldBuilder() { - if (cachedOafRelBuilder_ == null) { - cachedOafRelBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.OafProtos.Oaf, eu.dnetlib.data.proto.OafProtos.Oaf.Builder, eu.dnetlib.data.proto.OafProtos.OafOrBuilder>( - cachedOafRel_, - ((bitField0_ & 0x00000100) == 0x00000100), - getParentForChildren(), - isClean()); - cachedOafRel_ = null; - } - return cachedOafRelBuilder_; - } - - // optional .eu.dnetlib.data.proto.Datasource datasource = 3; - private eu.dnetlib.data.proto.DatasourceProtos.Datasource datasource_ = eu.dnetlib.data.proto.DatasourceProtos.Datasource.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.DatasourceProtos.Datasource, eu.dnetlib.data.proto.DatasourceProtos.Datasource.Builder, eu.dnetlib.data.proto.DatasourceProtos.DatasourceOrBuilder> datasourceBuilder_; - public boolean hasDatasource() { - return ((bitField0_ & 0x00000200) == 0x00000200); - } - public eu.dnetlib.data.proto.DatasourceProtos.Datasource getDatasource() { - if (datasourceBuilder_ == null) { - return datasource_; - } else { - return datasourceBuilder_.getMessage(); - } - } - public Builder setDatasource(eu.dnetlib.data.proto.DatasourceProtos.Datasource value) { - if (datasourceBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - datasource_ = value; - onChanged(); - } else { - datasourceBuilder_.setMessage(value); - } - bitField0_ |= 0x00000200; - return this; - } - public Builder setDatasource( - eu.dnetlib.data.proto.DatasourceProtos.Datasource.Builder builderForValue) { - if (datasourceBuilder_ == null) { - datasource_ = builderForValue.build(); - onChanged(); - } else { - datasourceBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000200; - return this; - } - public Builder mergeDatasource(eu.dnetlib.data.proto.DatasourceProtos.Datasource value) { - if (datasourceBuilder_ == null) { - if (((bitField0_ & 0x00000200) == 0x00000200) && - datasource_ != eu.dnetlib.data.proto.DatasourceProtos.Datasource.getDefaultInstance()) { - datasource_ = - eu.dnetlib.data.proto.DatasourceProtos.Datasource.newBuilder(datasource_).mergeFrom(value).buildPartial(); - } else { - datasource_ = value; - } - onChanged(); - } else { - datasourceBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000200; - return this; - } - public Builder clearDatasource() { - if (datasourceBuilder_ == null) { - datasource_ = eu.dnetlib.data.proto.DatasourceProtos.Datasource.getDefaultInstance(); - onChanged(); - } else { - datasourceBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000200); - return this; - } - public eu.dnetlib.data.proto.DatasourceProtos.Datasource.Builder getDatasourceBuilder() { - bitField0_ |= 0x00000200; - onChanged(); - return getDatasourceFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.DatasourceProtos.DatasourceOrBuilder getDatasourceOrBuilder() { - if (datasourceBuilder_ != null) { - return datasourceBuilder_.getMessageOrBuilder(); - } else { - return datasource_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.DatasourceProtos.Datasource, eu.dnetlib.data.proto.DatasourceProtos.Datasource.Builder, eu.dnetlib.data.proto.DatasourceProtos.DatasourceOrBuilder> - getDatasourceFieldBuilder() { - if (datasourceBuilder_ == null) { - datasourceBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.DatasourceProtos.Datasource, eu.dnetlib.data.proto.DatasourceProtos.Datasource.Builder, eu.dnetlib.data.proto.DatasourceProtos.DatasourceOrBuilder>( - datasource_, - getParentForChildren(), - isClean()); - datasource_ = null; - } - return datasourceBuilder_; - } - - // optional .eu.dnetlib.data.proto.Organization organization = 4; - private eu.dnetlib.data.proto.OrganizationProtos.Organization organization_ = eu.dnetlib.data.proto.OrganizationProtos.Organization.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.OrganizationProtos.Organization, eu.dnetlib.data.proto.OrganizationProtos.Organization.Builder, eu.dnetlib.data.proto.OrganizationProtos.OrganizationOrBuilder> organizationBuilder_; - public boolean hasOrganization() { - return ((bitField0_ & 0x00000400) == 0x00000400); - } - public eu.dnetlib.data.proto.OrganizationProtos.Organization getOrganization() { - if (organizationBuilder_ == null) { - return organization_; - } else { - return organizationBuilder_.getMessage(); - } - } - public Builder setOrganization(eu.dnetlib.data.proto.OrganizationProtos.Organization value) { - if (organizationBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - organization_ = value; - onChanged(); - } else { - organizationBuilder_.setMessage(value); - } - bitField0_ |= 0x00000400; - return this; - } - public Builder setOrganization( - eu.dnetlib.data.proto.OrganizationProtos.Organization.Builder builderForValue) { - if (organizationBuilder_ == null) { - organization_ = builderForValue.build(); - onChanged(); - } else { - organizationBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000400; - return this; - } - public Builder mergeOrganization(eu.dnetlib.data.proto.OrganizationProtos.Organization value) { - if (organizationBuilder_ == null) { - if (((bitField0_ & 0x00000400) == 0x00000400) && - organization_ != eu.dnetlib.data.proto.OrganizationProtos.Organization.getDefaultInstance()) { - organization_ = - eu.dnetlib.data.proto.OrganizationProtos.Organization.newBuilder(organization_).mergeFrom(value).buildPartial(); - } else { - organization_ = value; - } - onChanged(); - } else { - organizationBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000400; - return this; - } - public Builder clearOrganization() { - if (organizationBuilder_ == null) { - organization_ = eu.dnetlib.data.proto.OrganizationProtos.Organization.getDefaultInstance(); - onChanged(); - } else { - organizationBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000400); - return this; - } - public eu.dnetlib.data.proto.OrganizationProtos.Organization.Builder getOrganizationBuilder() { - bitField0_ |= 0x00000400; - onChanged(); - return getOrganizationFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.OrganizationProtos.OrganizationOrBuilder getOrganizationOrBuilder() { - if (organizationBuilder_ != null) { - return organizationBuilder_.getMessageOrBuilder(); - } else { - return organization_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.OrganizationProtos.Organization, eu.dnetlib.data.proto.OrganizationProtos.Organization.Builder, eu.dnetlib.data.proto.OrganizationProtos.OrganizationOrBuilder> - getOrganizationFieldBuilder() { - if (organizationBuilder_ == null) { - organizationBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.OrganizationProtos.Organization, eu.dnetlib.data.proto.OrganizationProtos.Organization.Builder, eu.dnetlib.data.proto.OrganizationProtos.OrganizationOrBuilder>( - organization_, - getParentForChildren(), - isClean()); - organization_ = null; - } - return organizationBuilder_; - } - - // optional .eu.dnetlib.data.proto.Project project = 6; - private eu.dnetlib.data.proto.ProjectProtos.Project project_ = eu.dnetlib.data.proto.ProjectProtos.Project.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ProjectProtos.Project, eu.dnetlib.data.proto.ProjectProtos.Project.Builder, eu.dnetlib.data.proto.ProjectProtos.ProjectOrBuilder> projectBuilder_; - public boolean hasProject() { - return ((bitField0_ & 0x00000800) == 0x00000800); - } - public eu.dnetlib.data.proto.ProjectProtos.Project getProject() { - if (projectBuilder_ == null) { - return project_; - } else { - return projectBuilder_.getMessage(); - } - } - public Builder setProject(eu.dnetlib.data.proto.ProjectProtos.Project value) { - if (projectBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - project_ = value; - onChanged(); - } else { - projectBuilder_.setMessage(value); - } - bitField0_ |= 0x00000800; - return this; - } - public Builder setProject( - eu.dnetlib.data.proto.ProjectProtos.Project.Builder builderForValue) { - if (projectBuilder_ == null) { - project_ = builderForValue.build(); - onChanged(); - } else { - projectBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000800; - return this; - } - public Builder mergeProject(eu.dnetlib.data.proto.ProjectProtos.Project value) { - if (projectBuilder_ == null) { - if (((bitField0_ & 0x00000800) == 0x00000800) && - project_ != eu.dnetlib.data.proto.ProjectProtos.Project.getDefaultInstance()) { - project_ = - eu.dnetlib.data.proto.ProjectProtos.Project.newBuilder(project_).mergeFrom(value).buildPartial(); - } else { - project_ = value; - } - onChanged(); - } else { - projectBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000800; - return this; - } - public Builder clearProject() { - if (projectBuilder_ == null) { - project_ = eu.dnetlib.data.proto.ProjectProtos.Project.getDefaultInstance(); - onChanged(); - } else { - projectBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000800); - return this; - } - public eu.dnetlib.data.proto.ProjectProtos.Project.Builder getProjectBuilder() { - bitField0_ |= 0x00000800; - onChanged(); - return getProjectFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.ProjectProtos.ProjectOrBuilder getProjectOrBuilder() { - if (projectBuilder_ != null) { - return projectBuilder_.getMessageOrBuilder(); - } else { - return project_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ProjectProtos.Project, eu.dnetlib.data.proto.ProjectProtos.Project.Builder, eu.dnetlib.data.proto.ProjectProtos.ProjectOrBuilder> - getProjectFieldBuilder() { - if (projectBuilder_ == null) { - projectBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ProjectProtos.Project, eu.dnetlib.data.proto.ProjectProtos.Project.Builder, eu.dnetlib.data.proto.ProjectProtos.ProjectOrBuilder>( - project_, - getParentForChildren(), - isClean()); - project_ = null; - } - return projectBuilder_; - } - - // optional .eu.dnetlib.data.proto.Result result = 7; - private eu.dnetlib.data.proto.ResultProtos.Result result_ = eu.dnetlib.data.proto.ResultProtos.Result.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ResultProtos.Result, eu.dnetlib.data.proto.ResultProtos.Result.Builder, eu.dnetlib.data.proto.ResultProtos.ResultOrBuilder> resultBuilder_; - public boolean hasResult() { - return ((bitField0_ & 0x00001000) == 0x00001000); - } - public eu.dnetlib.data.proto.ResultProtos.Result getResult() { - if (resultBuilder_ == null) { - return result_; - } else { - return resultBuilder_.getMessage(); - } - } - public Builder setResult(eu.dnetlib.data.proto.ResultProtos.Result value) { - if (resultBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - result_ = value; - onChanged(); - } else { - resultBuilder_.setMessage(value); - } - bitField0_ |= 0x00001000; - return this; - } - public Builder setResult( - eu.dnetlib.data.proto.ResultProtos.Result.Builder builderForValue) { - if (resultBuilder_ == null) { - result_ = builderForValue.build(); - onChanged(); - } else { - resultBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00001000; - return this; - } - public Builder mergeResult(eu.dnetlib.data.proto.ResultProtos.Result value) { - if (resultBuilder_ == null) { - if (((bitField0_ & 0x00001000) == 0x00001000) && - result_ != eu.dnetlib.data.proto.ResultProtos.Result.getDefaultInstance()) { - result_ = - eu.dnetlib.data.proto.ResultProtos.Result.newBuilder(result_).mergeFrom(value).buildPartial(); - } else { - result_ = value; - } - onChanged(); - } else { - resultBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00001000; - return this; - } - public Builder clearResult() { - if (resultBuilder_ == null) { - result_ = eu.dnetlib.data.proto.ResultProtos.Result.getDefaultInstance(); - onChanged(); - } else { - resultBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00001000); - return this; - } - public eu.dnetlib.data.proto.ResultProtos.Result.Builder getResultBuilder() { - bitField0_ |= 0x00001000; - onChanged(); - return getResultFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.ResultProtos.ResultOrBuilder getResultOrBuilder() { - if (resultBuilder_ != null) { - return resultBuilder_.getMessageOrBuilder(); - } else { - return result_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ResultProtos.Result, eu.dnetlib.data.proto.ResultProtos.Result.Builder, eu.dnetlib.data.proto.ResultProtos.ResultOrBuilder> - getResultFieldBuilder() { - if (resultBuilder_ == null) { - resultBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ResultProtos.Result, eu.dnetlib.data.proto.ResultProtos.Result.Builder, eu.dnetlib.data.proto.ResultProtos.ResultOrBuilder>( - result_, - getParentForChildren(), - isClean()); - result_ = null; - } - return resultBuilder_; - } - - // optional .eu.dnetlib.data.proto.Person person = 5; - private eu.dnetlib.data.proto.PersonProtos.Person person_ = eu.dnetlib.data.proto.PersonProtos.Person.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.PersonProtos.Person, eu.dnetlib.data.proto.PersonProtos.Person.Builder, eu.dnetlib.data.proto.PersonProtos.PersonOrBuilder> personBuilder_; - public boolean hasPerson() { - return ((bitField0_ & 0x00002000) == 0x00002000); - } - public eu.dnetlib.data.proto.PersonProtos.Person getPerson() { - if (personBuilder_ == null) { - return person_; - } else { - return personBuilder_.getMessage(); - } - } - public Builder setPerson(eu.dnetlib.data.proto.PersonProtos.Person value) { - if (personBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - person_ = value; - onChanged(); - } else { - personBuilder_.setMessage(value); - } - bitField0_ |= 0x00002000; - return this; - } - public Builder setPerson( - eu.dnetlib.data.proto.PersonProtos.Person.Builder builderForValue) { - if (personBuilder_ == null) { - person_ = builderForValue.build(); - onChanged(); - } else { - personBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00002000; - return this; - } - public Builder mergePerson(eu.dnetlib.data.proto.PersonProtos.Person value) { - if (personBuilder_ == null) { - if (((bitField0_ & 0x00002000) == 0x00002000) && - person_ != eu.dnetlib.data.proto.PersonProtos.Person.getDefaultInstance()) { - person_ = - eu.dnetlib.data.proto.PersonProtos.Person.newBuilder(person_).mergeFrom(value).buildPartial(); - } else { - person_ = value; - } - onChanged(); - } else { - personBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00002000; - return this; - } - public Builder clearPerson() { - if (personBuilder_ == null) { - person_ = eu.dnetlib.data.proto.PersonProtos.Person.getDefaultInstance(); - onChanged(); - } else { - personBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00002000); - return this; - } - public eu.dnetlib.data.proto.PersonProtos.Person.Builder getPersonBuilder() { - bitField0_ |= 0x00002000; - onChanged(); - return getPersonFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.PersonProtos.PersonOrBuilder getPersonOrBuilder() { - if (personBuilder_ != null) { - return personBuilder_.getMessageOrBuilder(); - } else { - return person_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.PersonProtos.Person, eu.dnetlib.data.proto.PersonProtos.Person.Builder, eu.dnetlib.data.proto.PersonProtos.PersonOrBuilder> - getPersonFieldBuilder() { - if (personBuilder_ == null) { - personBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.PersonProtos.Person, eu.dnetlib.data.proto.PersonProtos.Person.Builder, eu.dnetlib.data.proto.PersonProtos.PersonOrBuilder>( - person_, - getParentForChildren(), - isClean()); - person_ = null; - } - return personBuilder_; - } - - // repeated .eu.dnetlib.data.proto.OafEntity children = 16; - private java.util.List children_ = - java.util.Collections.emptyList(); - private void ensureChildrenIsMutable() { - if (!((bitField0_ & 0x00004000) == 0x00004000)) { - children_ = new java.util.ArrayList(children_); - bitField0_ |= 0x00004000; - } - } - - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.OafProtos.OafEntity, eu.dnetlib.data.proto.OafProtos.OafEntity.Builder, eu.dnetlib.data.proto.OafProtos.OafEntityOrBuilder> childrenBuilder_; - - public java.util.List getChildrenList() { - if (childrenBuilder_ == null) { - return java.util.Collections.unmodifiableList(children_); - } else { - return childrenBuilder_.getMessageList(); - } - } - public int getChildrenCount() { - if (childrenBuilder_ == null) { - return children_.size(); - } else { - return childrenBuilder_.getCount(); - } - } - public eu.dnetlib.data.proto.OafProtos.OafEntity getChildren(int index) { - if (childrenBuilder_ == null) { - return children_.get(index); - } else { - return childrenBuilder_.getMessage(index); - } - } - public Builder setChildren( - int index, eu.dnetlib.data.proto.OafProtos.OafEntity value) { - if (childrenBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureChildrenIsMutable(); - children_.set(index, value); - onChanged(); - } else { - childrenBuilder_.setMessage(index, value); - } - return this; - } - public Builder setChildren( - int index, eu.dnetlib.data.proto.OafProtos.OafEntity.Builder builderForValue) { - if (childrenBuilder_ == null) { - ensureChildrenIsMutable(); - children_.set(index, builderForValue.build()); - onChanged(); - } else { - childrenBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - public Builder addChildren(eu.dnetlib.data.proto.OafProtos.OafEntity value) { - if (childrenBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureChildrenIsMutable(); - children_.add(value); - onChanged(); - } else { - childrenBuilder_.addMessage(value); - } - return this; - } - public Builder addChildren( - int index, eu.dnetlib.data.proto.OafProtos.OafEntity value) { - if (childrenBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureChildrenIsMutable(); - children_.add(index, value); - onChanged(); - } else { - childrenBuilder_.addMessage(index, value); - } - return this; - } - public Builder addChildren( - eu.dnetlib.data.proto.OafProtos.OafEntity.Builder builderForValue) { - if (childrenBuilder_ == null) { - ensureChildrenIsMutable(); - children_.add(builderForValue.build()); - onChanged(); - } else { - childrenBuilder_.addMessage(builderForValue.build()); - } - return this; - } - public Builder addChildren( - int index, eu.dnetlib.data.proto.OafProtos.OafEntity.Builder builderForValue) { - if (childrenBuilder_ == null) { - ensureChildrenIsMutable(); - children_.add(index, builderForValue.build()); - onChanged(); - } else { - childrenBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - public Builder addAllChildren( - java.lang.Iterable values) { - if (childrenBuilder_ == null) { - ensureChildrenIsMutable(); - super.addAll(values, children_); - onChanged(); - } else { - childrenBuilder_.addAllMessages(values); - } - return this; - } - public Builder clearChildren() { - if (childrenBuilder_ == null) { - children_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00004000); - onChanged(); - } else { - childrenBuilder_.clear(); - } - return this; - } - public Builder removeChildren(int index) { - if (childrenBuilder_ == null) { - ensureChildrenIsMutable(); - children_.remove(index); - onChanged(); - } else { - childrenBuilder_.remove(index); - } - return this; - } - public eu.dnetlib.data.proto.OafProtos.OafEntity.Builder getChildrenBuilder( - int index) { - return getChildrenFieldBuilder().getBuilder(index); - } - public eu.dnetlib.data.proto.OafProtos.OafEntityOrBuilder getChildrenOrBuilder( - int index) { - if (childrenBuilder_ == null) { - return children_.get(index); } else { - return childrenBuilder_.getMessageOrBuilder(index); - } - } - public java.util.List - getChildrenOrBuilderList() { - if (childrenBuilder_ != null) { - return childrenBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(children_); - } - } - public eu.dnetlib.data.proto.OafProtos.OafEntity.Builder addChildrenBuilder() { - return getChildrenFieldBuilder().addBuilder( - eu.dnetlib.data.proto.OafProtos.OafEntity.getDefaultInstance()); - } - public eu.dnetlib.data.proto.OafProtos.OafEntity.Builder addChildrenBuilder( - int index) { - return getChildrenFieldBuilder().addBuilder( - index, eu.dnetlib.data.proto.OafProtos.OafEntity.getDefaultInstance()); - } - public java.util.List - getChildrenBuilderList() { - return getChildrenFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.OafProtos.OafEntity, eu.dnetlib.data.proto.OafProtos.OafEntity.Builder, eu.dnetlib.data.proto.OafProtos.OafEntityOrBuilder> - getChildrenFieldBuilder() { - if (childrenBuilder_ == null) { - childrenBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.OafProtos.OafEntity, eu.dnetlib.data.proto.OafProtos.OafEntity.Builder, eu.dnetlib.data.proto.OafProtos.OafEntityOrBuilder>( - children_, - ((bitField0_ & 0x00004000) == 0x00004000), - getParentForChildren(), - isClean()); - children_ = null; - } - return childrenBuilder_; - } - - // repeated .eu.dnetlib.data.proto.ExtraInfo extraInfo = 15; - private java.util.List extraInfo_ = - java.util.Collections.emptyList(); - private void ensureExtraInfoIsMutable() { - if (!((bitField0_ & 0x00008000) == 0x00008000)) { - extraInfo_ = new java.util.ArrayList(extraInfo_); - bitField0_ |= 0x00008000; - } - } - - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo, eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfoOrBuilder> extraInfoBuilder_; - - public java.util.List getExtraInfoList() { - if (extraInfoBuilder_ == null) { - return java.util.Collections.unmodifiableList(extraInfo_); - } else { - return extraInfoBuilder_.getMessageList(); - } - } - public int getExtraInfoCount() { - if (extraInfoBuilder_ == null) { - return extraInfo_.size(); - } else { - return extraInfoBuilder_.getCount(); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo getExtraInfo(int index) { - if (extraInfoBuilder_ == null) { - return extraInfo_.get(index); - } else { - return extraInfoBuilder_.getMessage(index); - } - } - public Builder setExtraInfo( - int index, eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo value) { - if (extraInfoBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureExtraInfoIsMutable(); - extraInfo_.set(index, value); - onChanged(); - } else { - extraInfoBuilder_.setMessage(index, value); - } - return this; - } - public Builder setExtraInfo( - int index, eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo.Builder builderForValue) { - if (extraInfoBuilder_ == null) { - ensureExtraInfoIsMutable(); - extraInfo_.set(index, builderForValue.build()); - onChanged(); - } else { - extraInfoBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - public Builder addExtraInfo(eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo value) { - if (extraInfoBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureExtraInfoIsMutable(); - extraInfo_.add(value); - onChanged(); - } else { - extraInfoBuilder_.addMessage(value); - } - return this; - } - public Builder addExtraInfo( - int index, eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo value) { - if (extraInfoBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureExtraInfoIsMutable(); - extraInfo_.add(index, value); - onChanged(); - } else { - extraInfoBuilder_.addMessage(index, value); - } - return this; - } - public Builder addExtraInfo( - eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo.Builder builderForValue) { - if (extraInfoBuilder_ == null) { - ensureExtraInfoIsMutable(); - extraInfo_.add(builderForValue.build()); - onChanged(); - } else { - extraInfoBuilder_.addMessage(builderForValue.build()); - } - return this; - } - public Builder addExtraInfo( - int index, eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo.Builder builderForValue) { - if (extraInfoBuilder_ == null) { - ensureExtraInfoIsMutable(); - extraInfo_.add(index, builderForValue.build()); - onChanged(); - } else { - extraInfoBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - public Builder addAllExtraInfo( - java.lang.Iterable values) { - if (extraInfoBuilder_ == null) { - ensureExtraInfoIsMutable(); - super.addAll(values, extraInfo_); - onChanged(); - } else { - extraInfoBuilder_.addAllMessages(values); - } - return this; - } - public Builder clearExtraInfo() { - if (extraInfoBuilder_ == null) { - extraInfo_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00008000); - onChanged(); - } else { - extraInfoBuilder_.clear(); - } - return this; - } - public Builder removeExtraInfo(int index) { - if (extraInfoBuilder_ == null) { - ensureExtraInfoIsMutable(); - extraInfo_.remove(index); - onChanged(); - } else { - extraInfoBuilder_.remove(index); - } - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo.Builder getExtraInfoBuilder( - int index) { - return getExtraInfoFieldBuilder().getBuilder(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfoOrBuilder getExtraInfoOrBuilder( - int index) { - if (extraInfoBuilder_ == null) { - return extraInfo_.get(index); } else { - return extraInfoBuilder_.getMessageOrBuilder(index); - } - } - public java.util.List - getExtraInfoOrBuilderList() { - if (extraInfoBuilder_ != null) { - return extraInfoBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(extraInfo_); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo.Builder addExtraInfoBuilder() { - return getExtraInfoFieldBuilder().addBuilder( - eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo.getDefaultInstance()); - } - public eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo.Builder addExtraInfoBuilder( - int index) { - return getExtraInfoFieldBuilder().addBuilder( - index, eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo.getDefaultInstance()); - } - public java.util.List - getExtraInfoBuilderList() { - return getExtraInfoFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo, eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfoOrBuilder> - getExtraInfoFieldBuilder() { - if (extraInfoBuilder_ == null) { - extraInfoBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo, eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfoOrBuilder>( - extraInfo_, - ((bitField0_ & 0x00008000) == 0x00008000), - getParentForChildren(), - isClean()); - extraInfo_ = null; - } - return extraInfoBuilder_; - } - - // optional .eu.dnetlib.data.proto.OAIProvenance oaiprovenance = 17; - private eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance oaiprovenance_ = eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance, eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.Builder, eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenanceOrBuilder> oaiprovenanceBuilder_; - public boolean hasOaiprovenance() { - return ((bitField0_ & 0x00010000) == 0x00010000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance getOaiprovenance() { - if (oaiprovenanceBuilder_ == null) { - return oaiprovenance_; - } else { - return oaiprovenanceBuilder_.getMessage(); - } - } - public Builder setOaiprovenance(eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance value) { - if (oaiprovenanceBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - oaiprovenance_ = value; - onChanged(); - } else { - oaiprovenanceBuilder_.setMessage(value); - } - bitField0_ |= 0x00010000; - return this; - } - public Builder setOaiprovenance( - eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.Builder builderForValue) { - if (oaiprovenanceBuilder_ == null) { - oaiprovenance_ = builderForValue.build(); - onChanged(); - } else { - oaiprovenanceBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00010000; - return this; - } - public Builder mergeOaiprovenance(eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance value) { - if (oaiprovenanceBuilder_ == null) { - if (((bitField0_ & 0x00010000) == 0x00010000) && - oaiprovenance_ != eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.getDefaultInstance()) { - oaiprovenance_ = - eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.newBuilder(oaiprovenance_).mergeFrom(value).buildPartial(); - } else { - oaiprovenance_ = value; - } - onChanged(); - } else { - oaiprovenanceBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00010000; - return this; - } - public Builder clearOaiprovenance() { - if (oaiprovenanceBuilder_ == null) { - oaiprovenance_ = eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.getDefaultInstance(); - onChanged(); - } else { - oaiprovenanceBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00010000); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.Builder getOaiprovenanceBuilder() { - bitField0_ |= 0x00010000; - onChanged(); - return getOaiprovenanceFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenanceOrBuilder getOaiprovenanceOrBuilder() { - if (oaiprovenanceBuilder_ != null) { - return oaiprovenanceBuilder_.getMessageOrBuilder(); - } else { - return oaiprovenance_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance, eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.Builder, eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenanceOrBuilder> - getOaiprovenanceFieldBuilder() { - if (oaiprovenanceBuilder_ == null) { - oaiprovenanceBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance, eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenance.Builder, eu.dnetlib.data.proto.FieldTypeProtos.OAIProvenanceOrBuilder>( - oaiprovenance_, - getParentForChildren(), - isClean()); - oaiprovenance_ = null; - } - return oaiprovenanceBuilder_; - } - - // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.OafEntity) - } - - static { - defaultInstance = new OafEntity(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.OafEntity) - } - - public interface OafRelOrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // required .eu.dnetlib.data.proto.RelType relType = 1; - boolean hasRelType(); - eu.dnetlib.data.proto.RelTypeProtos.RelType getRelType(); - - // required .eu.dnetlib.data.proto.SubRelType subRelType = 19; - boolean hasSubRelType(); - eu.dnetlib.data.proto.RelTypeProtos.SubRelType getSubRelType(); - - // required string relClass = 20; - boolean hasRelClass(); - String getRelClass(); - - // required string source = 2; - boolean hasSource(); - String getSource(); - - // required string target = 3; - boolean hasTarget(); - String getTarget(); - - // required bool child = 4; - boolean hasChild(); - boolean getChild(); - - // optional .eu.dnetlib.data.proto.OafEntity cachedTarget = 5; - boolean hasCachedTarget(); - eu.dnetlib.data.proto.OafProtos.OafEntity getCachedTarget(); - eu.dnetlib.data.proto.OafProtos.OafEntityOrBuilder getCachedTargetOrBuilder(); - - // optional .eu.dnetlib.data.proto.Oaf cachedOafTarget = 8; - boolean hasCachedOafTarget(); - eu.dnetlib.data.proto.OafProtos.Oaf getCachedOafTarget(); - eu.dnetlib.data.proto.OafProtos.OafOrBuilder getCachedOafTargetOrBuilder(); - - // optional .eu.dnetlib.data.proto.DatasourceOrganization datasourceOrganization = 6; - boolean hasDatasourceOrganization(); - eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization getDatasourceOrganization(); - eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganizationOrBuilder getDatasourceOrganizationOrBuilder(); - - // optional .eu.dnetlib.data.proto.ProjectOrganization projectOrganization = 9; - boolean hasProjectOrganization(); - eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization getProjectOrganization(); - eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganizationOrBuilder getProjectOrganizationOrBuilder(); - - // optional .eu.dnetlib.data.proto.ResultOrganization resultOrganization = 10; - boolean hasResultOrganization(); - eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization getResultOrganization(); - eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganizationOrBuilder getResultOrganizationOrBuilder(); - - // optional .eu.dnetlib.data.proto.ResultProject resultProject = 11; - boolean hasResultProject(); - eu.dnetlib.data.proto.ResultProjectProtos.ResultProject getResultProject(); - eu.dnetlib.data.proto.ResultProjectProtos.ResultProjectOrBuilder getResultProjectOrBuilder(); - - // optional .eu.dnetlib.data.proto.ResultResult resultResult = 16; - boolean hasResultResult(); - eu.dnetlib.data.proto.ResultResultProtos.ResultResult getResultResult(); - eu.dnetlib.data.proto.ResultResultProtos.ResultResultOrBuilder getResultResultOrBuilder(); - - // optional .eu.dnetlib.data.proto.OrganizationOrganization organizationOrganization = 17; - boolean hasOrganizationOrganization(); - eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization getOrganizationOrganization(); - eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganizationOrBuilder getOrganizationOrganizationOrBuilder(); - - // repeated .eu.dnetlib.data.proto.KeyValue collectedfrom = 21; - java.util.List - getCollectedfromList(); - eu.dnetlib.data.proto.FieldTypeProtos.KeyValue getCollectedfrom(int index); - int getCollectedfromCount(); - java.util.List - getCollectedfromOrBuilderList(); - eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder getCollectedfromOrBuilder( - int index); - } - public static final class OafRel extends - com.google.protobuf.GeneratedMessage - implements OafRelOrBuilder { - // Use OafRel.newBuilder() to construct. - private OafRel(Builder builder) { - super(builder); - } - private OafRel(boolean noInit) {} - - private static final OafRel defaultInstance; - public static OafRel getDefaultInstance() { - return defaultInstance; - } - - public OafRel getDefaultInstanceForType() { - return defaultInstance; - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.OafProtos.internal_static_eu_dnetlib_data_proto_OafRel_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.OafProtos.internal_static_eu_dnetlib_data_proto_OafRel_fieldAccessorTable; - } - - private int bitField0_; - // required .eu.dnetlib.data.proto.RelType relType = 1; - public static final int RELTYPE_FIELD_NUMBER = 1; - private eu.dnetlib.data.proto.RelTypeProtos.RelType relType_; - public boolean hasRelType() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.RelTypeProtos.RelType getRelType() { - return relType_; - } - - // required .eu.dnetlib.data.proto.SubRelType subRelType = 19; - public static final int SUBRELTYPE_FIELD_NUMBER = 19; - private eu.dnetlib.data.proto.RelTypeProtos.SubRelType subRelType_; - public boolean hasSubRelType() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public eu.dnetlib.data.proto.RelTypeProtos.SubRelType getSubRelType() { - return subRelType_; - } - - // required string relClass = 20; - public static final int RELCLASS_FIELD_NUMBER = 20; - private java.lang.Object relClass_; - public boolean hasRelClass() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - public String getRelClass() { - java.lang.Object ref = relClass_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - relClass_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getRelClassBytes() { - java.lang.Object ref = relClass_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - relClass_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // required string source = 2; - public static final int SOURCE_FIELD_NUMBER = 2; - private java.lang.Object source_; - public boolean hasSource() { - return ((bitField0_ & 0x00000008) == 0x00000008); - } - public String getSource() { - java.lang.Object ref = source_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - source_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getSourceBytes() { - java.lang.Object ref = source_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - source_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // required string target = 3; - public static final int TARGET_FIELD_NUMBER = 3; - private java.lang.Object target_; - public boolean hasTarget() { - return ((bitField0_ & 0x00000010) == 0x00000010); - } - public String getTarget() { - java.lang.Object ref = target_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - target_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getTargetBytes() { - java.lang.Object ref = target_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - target_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // required bool child = 4; - public static final int CHILD_FIELD_NUMBER = 4; - private boolean child_; - public boolean hasChild() { - return ((bitField0_ & 0x00000020) == 0x00000020); - } - public boolean getChild() { - return child_; - } - - // optional .eu.dnetlib.data.proto.OafEntity cachedTarget = 5; - public static final int CACHEDTARGET_FIELD_NUMBER = 5; - private eu.dnetlib.data.proto.OafProtos.OafEntity cachedTarget_; - public boolean hasCachedTarget() { - return ((bitField0_ & 0x00000040) == 0x00000040); - } - public eu.dnetlib.data.proto.OafProtos.OafEntity getCachedTarget() { - return cachedTarget_; - } - public eu.dnetlib.data.proto.OafProtos.OafEntityOrBuilder getCachedTargetOrBuilder() { - return cachedTarget_; - } - - // optional .eu.dnetlib.data.proto.Oaf cachedOafTarget = 8; - public static final int CACHEDOAFTARGET_FIELD_NUMBER = 8; - private eu.dnetlib.data.proto.OafProtos.Oaf cachedOafTarget_; - public boolean hasCachedOafTarget() { - return ((bitField0_ & 0x00000080) == 0x00000080); - } - public eu.dnetlib.data.proto.OafProtos.Oaf getCachedOafTarget() { - return cachedOafTarget_; - } - public eu.dnetlib.data.proto.OafProtos.OafOrBuilder getCachedOafTargetOrBuilder() { - return cachedOafTarget_; - } - - // optional .eu.dnetlib.data.proto.DatasourceOrganization datasourceOrganization = 6; - public static final int DATASOURCEORGANIZATION_FIELD_NUMBER = 6; - private eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization datasourceOrganization_; - public boolean hasDatasourceOrganization() { - return ((bitField0_ & 0x00000100) == 0x00000100); - } - public eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization getDatasourceOrganization() { - return datasourceOrganization_; - } - public eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganizationOrBuilder getDatasourceOrganizationOrBuilder() { - return datasourceOrganization_; - } - - // optional .eu.dnetlib.data.proto.ProjectOrganization projectOrganization = 9; - public static final int PROJECTORGANIZATION_FIELD_NUMBER = 9; - private eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization projectOrganization_; - public boolean hasProjectOrganization() { - return ((bitField0_ & 0x00000200) == 0x00000200); - } - public eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization getProjectOrganization() { - return projectOrganization_; - } - public eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganizationOrBuilder getProjectOrganizationOrBuilder() { - return projectOrganization_; - } - - // optional .eu.dnetlib.data.proto.ResultOrganization resultOrganization = 10; - public static final int RESULTORGANIZATION_FIELD_NUMBER = 10; - private eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization resultOrganization_; - public boolean hasResultOrganization() { - return ((bitField0_ & 0x00000400) == 0x00000400); - } - public eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization getResultOrganization() { - return resultOrganization_; - } - public eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganizationOrBuilder getResultOrganizationOrBuilder() { - return resultOrganization_; - } - - // optional .eu.dnetlib.data.proto.ResultProject resultProject = 11; - public static final int RESULTPROJECT_FIELD_NUMBER = 11; - private eu.dnetlib.data.proto.ResultProjectProtos.ResultProject resultProject_; - public boolean hasResultProject() { - return ((bitField0_ & 0x00000800) == 0x00000800); - } - public eu.dnetlib.data.proto.ResultProjectProtos.ResultProject getResultProject() { - return resultProject_; - } - public eu.dnetlib.data.proto.ResultProjectProtos.ResultProjectOrBuilder getResultProjectOrBuilder() { - return resultProject_; - } - - // optional .eu.dnetlib.data.proto.ResultResult resultResult = 16; - public static final int RESULTRESULT_FIELD_NUMBER = 16; - private eu.dnetlib.data.proto.ResultResultProtos.ResultResult resultResult_; - public boolean hasResultResult() { - return ((bitField0_ & 0x00001000) == 0x00001000); - } - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult getResultResult() { - return resultResult_; - } - public eu.dnetlib.data.proto.ResultResultProtos.ResultResultOrBuilder getResultResultOrBuilder() { - return resultResult_; - } - - // optional .eu.dnetlib.data.proto.OrganizationOrganization organizationOrganization = 17; - public static final int ORGANIZATIONORGANIZATION_FIELD_NUMBER = 17; - private eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization organizationOrganization_; - public boolean hasOrganizationOrganization() { - return ((bitField0_ & 0x00002000) == 0x00002000); - } - public eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization getOrganizationOrganization() { - return organizationOrganization_; - } - public eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganizationOrBuilder getOrganizationOrganizationOrBuilder() { - return organizationOrganization_; - } - - // repeated .eu.dnetlib.data.proto.KeyValue collectedfrom = 21; - public static final int COLLECTEDFROM_FIELD_NUMBER = 21; - private java.util.List collectedfrom_; - public java.util.List getCollectedfromList() { - return collectedfrom_; - } - public java.util.List - getCollectedfromOrBuilderList() { - return collectedfrom_; - } - public int getCollectedfromCount() { - return collectedfrom_.size(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue getCollectedfrom(int index) { - return collectedfrom_.get(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder getCollectedfromOrBuilder( - int index) { - return collectedfrom_.get(index); - } - - private void initFields() { - relType_ = eu.dnetlib.data.proto.RelTypeProtos.RelType.datasourceOrganization; - subRelType_ = eu.dnetlib.data.proto.RelTypeProtos.SubRelType.provision; - relClass_ = ""; - source_ = ""; - target_ = ""; - child_ = false; - cachedTarget_ = eu.dnetlib.data.proto.OafProtos.OafEntity.getDefaultInstance(); - cachedOafTarget_ = eu.dnetlib.data.proto.OafProtos.Oaf.getDefaultInstance(); - datasourceOrganization_ = eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.getDefaultInstance(); - projectOrganization_ = eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.getDefaultInstance(); - resultOrganization_ = eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.getDefaultInstance(); - resultProject_ = eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.getDefaultInstance(); - resultResult_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.getDefaultInstance(); - organizationOrganization_ = eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization.getDefaultInstance(); - collectedfrom_ = java.util.Collections.emptyList(); - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - if (!hasRelType()) { - memoizedIsInitialized = 0; - return false; - } - if (!hasSubRelType()) { - memoizedIsInitialized = 0; - return false; - } - if (!hasRelClass()) { - memoizedIsInitialized = 0; - return false; - } - if (!hasSource()) { - memoizedIsInitialized = 0; - return false; - } - if (!hasTarget()) { - memoizedIsInitialized = 0; - return false; - } - if (!hasChild()) { - memoizedIsInitialized = 0; - return false; - } - if (hasCachedTarget()) { - if (!getCachedTarget().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasCachedOafTarget()) { - if (!getCachedOafTarget().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasDatasourceOrganization()) { - if (!getDatasourceOrganization().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasProjectOrganization()) { - if (!getProjectOrganization().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasResultOrganization()) { - if (!getResultOrganization().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasResultProject()) { - if (!getResultProject().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasResultResult()) { - if (!getResultResult().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasOrganizationOrganization()) { - if (!getOrganizationOrganization().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - for (int i = 0; i < getCollectedfromCount(); i++) { - if (!getCollectedfrom(i).isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeEnum(1, relType_.getNumber()); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - output.writeBytes(2, getSourceBytes()); - } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - output.writeBytes(3, getTargetBytes()); - } - if (((bitField0_ & 0x00000020) == 0x00000020)) { - output.writeBool(4, child_); - } - if (((bitField0_ & 0x00000040) == 0x00000040)) { - output.writeMessage(5, cachedTarget_); - } - if (((bitField0_ & 0x00000100) == 0x00000100)) { - output.writeMessage(6, datasourceOrganization_); - } - if (((bitField0_ & 0x00000080) == 0x00000080)) { - output.writeMessage(8, cachedOafTarget_); - } - if (((bitField0_ & 0x00000200) == 0x00000200)) { - output.writeMessage(9, projectOrganization_); - } - if (((bitField0_ & 0x00000400) == 0x00000400)) { - output.writeMessage(10, resultOrganization_); - } - if (((bitField0_ & 0x00000800) == 0x00000800)) { - output.writeMessage(11, resultProject_); - } - if (((bitField0_ & 0x00001000) == 0x00001000)) { - output.writeMessage(16, resultResult_); - } - if (((bitField0_ & 0x00002000) == 0x00002000)) { - output.writeMessage(17, organizationOrganization_); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - output.writeEnum(19, subRelType_.getNumber()); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - output.writeBytes(20, getRelClassBytes()); - } - for (int i = 0; i < collectedfrom_.size(); i++) { - output.writeMessage(21, collectedfrom_.get(i)); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeEnumSize(1, relType_.getNumber()); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(2, getSourceBytes()); - } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(3, getTargetBytes()); - } - if (((bitField0_ & 0x00000020) == 0x00000020)) { - size += com.google.protobuf.CodedOutputStream - .computeBoolSize(4, child_); - } - if (((bitField0_ & 0x00000040) == 0x00000040)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(5, cachedTarget_); - } - if (((bitField0_ & 0x00000100) == 0x00000100)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(6, datasourceOrganization_); - } - if (((bitField0_ & 0x00000080) == 0x00000080)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(8, cachedOafTarget_); - } - if (((bitField0_ & 0x00000200) == 0x00000200)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(9, projectOrganization_); - } - if (((bitField0_ & 0x00000400) == 0x00000400)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(10, resultOrganization_); - } - if (((bitField0_ & 0x00000800) == 0x00000800)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(11, resultProject_); - } - if (((bitField0_ & 0x00001000) == 0x00001000)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(16, resultResult_); - } - if (((bitField0_ & 0x00002000) == 0x00002000)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(17, organizationOrganization_); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - size += com.google.protobuf.CodedOutputStream - .computeEnumSize(19, subRelType_.getNumber()); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(20, getRelClassBytes()); - } - for (int i = 0; i < collectedfrom_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(21, collectedfrom_.get(i)); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static eu.dnetlib.data.proto.OafProtos.OafRel parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.OafProtos.OafRel parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.OafProtos.OafRel parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.OafProtos.OafRel parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.OafProtos.OafRel parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.OafProtos.OafRel parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.OafProtos.OafRel parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.OafProtos.OafRel parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.OafProtos.OafRel parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.OafProtos.OafRel parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(eu.dnetlib.data.proto.OafProtos.OafRel prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder - implements eu.dnetlib.data.proto.OafProtos.OafRelOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.OafProtos.internal_static_eu_dnetlib_data_proto_OafRel_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.OafProtos.internal_static_eu_dnetlib_data_proto_OafRel_fieldAccessorTable; - } - - // Construct using eu.dnetlib.data.proto.OafProtos.OafRel.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - getCachedTargetFieldBuilder(); - getCachedOafTargetFieldBuilder(); - getDatasourceOrganizationFieldBuilder(); - getProjectOrganizationFieldBuilder(); - getResultOrganizationFieldBuilder(); - getResultProjectFieldBuilder(); - getResultResultFieldBuilder(); - getOrganizationOrganizationFieldBuilder(); - getCollectedfromFieldBuilder(); - } - } - private static Builder create() { - return new Builder(); - } - - public Builder clear() { - super.clear(); - relType_ = eu.dnetlib.data.proto.RelTypeProtos.RelType.datasourceOrganization; - bitField0_ = (bitField0_ & ~0x00000001); - subRelType_ = eu.dnetlib.data.proto.RelTypeProtos.SubRelType.provision; - bitField0_ = (bitField0_ & ~0x00000002); - relClass_ = ""; - bitField0_ = (bitField0_ & ~0x00000004); - source_ = ""; - bitField0_ = (bitField0_ & ~0x00000008); - target_ = ""; - bitField0_ = (bitField0_ & ~0x00000010); - child_ = false; - bitField0_ = (bitField0_ & ~0x00000020); - if (cachedTargetBuilder_ == null) { - cachedTarget_ = eu.dnetlib.data.proto.OafProtos.OafEntity.getDefaultInstance(); - } else { - cachedTargetBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000040); - if (cachedOafTargetBuilder_ == null) { - cachedOafTarget_ = eu.dnetlib.data.proto.OafProtos.Oaf.getDefaultInstance(); - } else { - cachedOafTargetBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000080); - if (datasourceOrganizationBuilder_ == null) { - datasourceOrganization_ = eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.getDefaultInstance(); - } else { - datasourceOrganizationBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000100); - if (projectOrganizationBuilder_ == null) { - projectOrganization_ = eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.getDefaultInstance(); - } else { - projectOrganizationBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000200); - if (resultOrganizationBuilder_ == null) { - resultOrganization_ = eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.getDefaultInstance(); - } else { - resultOrganizationBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000400); - if (resultProjectBuilder_ == null) { - resultProject_ = eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.getDefaultInstance(); - } else { - resultProjectBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000800); - if (resultResultBuilder_ == null) { - resultResult_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.getDefaultInstance(); - } else { - resultResultBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00001000); - if (organizationOrganizationBuilder_ == null) { - organizationOrganization_ = eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization.getDefaultInstance(); - } else { - organizationOrganizationBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00002000); - if (collectedfromBuilder_ == null) { - collectedfrom_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00004000); - } else { - collectedfromBuilder_.clear(); - } - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return eu.dnetlib.data.proto.OafProtos.OafRel.getDescriptor(); - } - - public eu.dnetlib.data.proto.OafProtos.OafRel getDefaultInstanceForType() { - return eu.dnetlib.data.proto.OafProtos.OafRel.getDefaultInstance(); - } - - public eu.dnetlib.data.proto.OafProtos.OafRel build() { - eu.dnetlib.data.proto.OafProtos.OafRel result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - private eu.dnetlib.data.proto.OafProtos.OafRel buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - eu.dnetlib.data.proto.OafProtos.OafRel result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return result; - } - - public eu.dnetlib.data.proto.OafProtos.OafRel buildPartial() { - eu.dnetlib.data.proto.OafProtos.OafRel result = new eu.dnetlib.data.proto.OafProtos.OafRel(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - result.relType_ = relType_; - if (((from_bitField0_ & 0x00000002) == 0x00000002)) { - to_bitField0_ |= 0x00000002; - } - result.subRelType_ = subRelType_; - if (((from_bitField0_ & 0x00000004) == 0x00000004)) { - to_bitField0_ |= 0x00000004; - } - result.relClass_ = relClass_; - if (((from_bitField0_ & 0x00000008) == 0x00000008)) { - to_bitField0_ |= 0x00000008; - } - result.source_ = source_; - if (((from_bitField0_ & 0x00000010) == 0x00000010)) { - to_bitField0_ |= 0x00000010; - } - result.target_ = target_; - if (((from_bitField0_ & 0x00000020) == 0x00000020)) { - to_bitField0_ |= 0x00000020; - } - result.child_ = child_; - if (((from_bitField0_ & 0x00000040) == 0x00000040)) { - to_bitField0_ |= 0x00000040; - } - if (cachedTargetBuilder_ == null) { - result.cachedTarget_ = cachedTarget_; - } else { - result.cachedTarget_ = cachedTargetBuilder_.build(); - } - if (((from_bitField0_ & 0x00000080) == 0x00000080)) { - to_bitField0_ |= 0x00000080; - } - if (cachedOafTargetBuilder_ == null) { - result.cachedOafTarget_ = cachedOafTarget_; - } else { - result.cachedOafTarget_ = cachedOafTargetBuilder_.build(); - } - if (((from_bitField0_ & 0x00000100) == 0x00000100)) { - to_bitField0_ |= 0x00000100; - } - if (datasourceOrganizationBuilder_ == null) { - result.datasourceOrganization_ = datasourceOrganization_; - } else { - result.datasourceOrganization_ = datasourceOrganizationBuilder_.build(); - } - if (((from_bitField0_ & 0x00000200) == 0x00000200)) { - to_bitField0_ |= 0x00000200; - } - if (projectOrganizationBuilder_ == null) { - result.projectOrganization_ = projectOrganization_; - } else { - result.projectOrganization_ = projectOrganizationBuilder_.build(); - } - if (((from_bitField0_ & 0x00000400) == 0x00000400)) { - to_bitField0_ |= 0x00000400; - } - if (resultOrganizationBuilder_ == null) { - result.resultOrganization_ = resultOrganization_; - } else { - result.resultOrganization_ = resultOrganizationBuilder_.build(); - } - if (((from_bitField0_ & 0x00000800) == 0x00000800)) { - to_bitField0_ |= 0x00000800; - } - if (resultProjectBuilder_ == null) { - result.resultProject_ = resultProject_; - } else { - result.resultProject_ = resultProjectBuilder_.build(); - } - if (((from_bitField0_ & 0x00001000) == 0x00001000)) { - to_bitField0_ |= 0x00001000; - } - if (resultResultBuilder_ == null) { - result.resultResult_ = resultResult_; - } else { - result.resultResult_ = resultResultBuilder_.build(); - } - if (((from_bitField0_ & 0x00002000) == 0x00002000)) { - to_bitField0_ |= 0x00002000; - } - if (organizationOrganizationBuilder_ == null) { - result.organizationOrganization_ = organizationOrganization_; - } else { - result.organizationOrganization_ = organizationOrganizationBuilder_.build(); - } - if (collectedfromBuilder_ == null) { - if (((bitField0_ & 0x00004000) == 0x00004000)) { - collectedfrom_ = java.util.Collections.unmodifiableList(collectedfrom_); - bitField0_ = (bitField0_ & ~0x00004000); - } - result.collectedfrom_ = collectedfrom_; - } else { - result.collectedfrom_ = collectedfromBuilder_.build(); - } - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof eu.dnetlib.data.proto.OafProtos.OafRel) { - return mergeFrom((eu.dnetlib.data.proto.OafProtos.OafRel)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(eu.dnetlib.data.proto.OafProtos.OafRel other) { - if (other == eu.dnetlib.data.proto.OafProtos.OafRel.getDefaultInstance()) return this; - if (other.hasRelType()) { - setRelType(other.getRelType()); - } - if (other.hasSubRelType()) { - setSubRelType(other.getSubRelType()); - } - if (other.hasRelClass()) { - setRelClass(other.getRelClass()); - } - if (other.hasSource()) { - setSource(other.getSource()); - } - if (other.hasTarget()) { - setTarget(other.getTarget()); - } - if (other.hasChild()) { - setChild(other.getChild()); - } - if (other.hasCachedTarget()) { - mergeCachedTarget(other.getCachedTarget()); - } - if (other.hasCachedOafTarget()) { - mergeCachedOafTarget(other.getCachedOafTarget()); - } - if (other.hasDatasourceOrganization()) { - mergeDatasourceOrganization(other.getDatasourceOrganization()); - } - if (other.hasProjectOrganization()) { - mergeProjectOrganization(other.getProjectOrganization()); - } - if (other.hasResultOrganization()) { - mergeResultOrganization(other.getResultOrganization()); - } - if (other.hasResultProject()) { - mergeResultProject(other.getResultProject()); - } - if (other.hasResultResult()) { - mergeResultResult(other.getResultResult()); - } - if (other.hasOrganizationOrganization()) { - mergeOrganizationOrganization(other.getOrganizationOrganization()); - } - if (collectedfromBuilder_ == null) { - if (!other.collectedfrom_.isEmpty()) { - if (collectedfrom_.isEmpty()) { - collectedfrom_ = other.collectedfrom_; - bitField0_ = (bitField0_ & ~0x00004000); - } else { - ensureCollectedfromIsMutable(); - collectedfrom_.addAll(other.collectedfrom_); - } - onChanged(); - } - } else { - if (!other.collectedfrom_.isEmpty()) { - if (collectedfromBuilder_.isEmpty()) { - collectedfromBuilder_.dispose(); - collectedfromBuilder_ = null; - collectedfrom_ = other.collectedfrom_; - bitField0_ = (bitField0_ & ~0x00004000); - collectedfromBuilder_ = - com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? - getCollectedfromFieldBuilder() : null; - } else { - collectedfromBuilder_.addAllMessages(other.collectedfrom_); - } - } - } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - - public final boolean isInitialized() { - if (!hasRelType()) { - - return false; - } - if (!hasSubRelType()) { - - return false; - } - if (!hasRelClass()) { - - return false; - } - if (!hasSource()) { - - return false; - } - if (!hasTarget()) { - - return false; - } - if (!hasChild()) { - - return false; - } - if (hasCachedTarget()) { - if (!getCachedTarget().isInitialized()) { - - return false; - } - } - if (hasCachedOafTarget()) { - if (!getCachedOafTarget().isInitialized()) { - - return false; - } - } - if (hasDatasourceOrganization()) { - if (!getDatasourceOrganization().isInitialized()) { - - return false; - } - } - if (hasProjectOrganization()) { - if (!getProjectOrganization().isInitialized()) { - - return false; - } - } - if (hasResultOrganization()) { - if (!getResultOrganization().isInitialized()) { - - return false; - } - } - if (hasResultProject()) { - if (!getResultProject().isInitialized()) { - - return false; - } - } - if (hasResultResult()) { - if (!getResultResult().isInitialized()) { - - return false; - } - } - if (hasOrganizationOrganization()) { - if (!getOrganizationOrganization().isInitialized()) { - - return false; - } - } - for (int i = 0; i < getCollectedfromCount(); i++) { - if (!getCollectedfrom(i).isInitialized()) { - - return false; - } - } - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - } - break; - } - case 8: { - int rawValue = input.readEnum(); - eu.dnetlib.data.proto.RelTypeProtos.RelType value = eu.dnetlib.data.proto.RelTypeProtos.RelType.valueOf(rawValue); - if (value == null) { - unknownFields.mergeVarintField(1, rawValue); - } else { - bitField0_ |= 0x00000001; - relType_ = value; - } - break; - } - case 18: { - bitField0_ |= 0x00000008; - source_ = input.readBytes(); - break; - } - case 26: { - bitField0_ |= 0x00000010; - target_ = input.readBytes(); - break; - } - case 32: { - bitField0_ |= 0x00000020; - child_ = input.readBool(); - break; - } - case 42: { - eu.dnetlib.data.proto.OafProtos.OafEntity.Builder subBuilder = eu.dnetlib.data.proto.OafProtos.OafEntity.newBuilder(); - if (hasCachedTarget()) { - subBuilder.mergeFrom(getCachedTarget()); - } - input.readMessage(subBuilder, extensionRegistry); - setCachedTarget(subBuilder.buildPartial()); - break; - } - case 50: { - eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Builder subBuilder = eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.newBuilder(); - if (hasDatasourceOrganization()) { - subBuilder.mergeFrom(getDatasourceOrganization()); - } - input.readMessage(subBuilder, extensionRegistry); - setDatasourceOrganization(subBuilder.buildPartial()); - break; - } - case 66: { - eu.dnetlib.data.proto.OafProtos.Oaf.Builder subBuilder = eu.dnetlib.data.proto.OafProtos.Oaf.newBuilder(); - if (hasCachedOafTarget()) { - subBuilder.mergeFrom(getCachedOafTarget()); - } - input.readMessage(subBuilder, extensionRegistry); - setCachedOafTarget(subBuilder.buildPartial()); - break; - } - case 74: { - eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Builder subBuilder = eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.newBuilder(); - if (hasProjectOrganization()) { - subBuilder.mergeFrom(getProjectOrganization()); - } - input.readMessage(subBuilder, extensionRegistry); - setProjectOrganization(subBuilder.buildPartial()); - break; - } - case 82: { - eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Builder subBuilder = eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.newBuilder(); - if (hasResultOrganization()) { - subBuilder.mergeFrom(getResultOrganization()); - } - input.readMessage(subBuilder, extensionRegistry); - setResultOrganization(subBuilder.buildPartial()); - break; - } - case 90: { - eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Builder subBuilder = eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.newBuilder(); - if (hasResultProject()) { - subBuilder.mergeFrom(getResultProject()); - } - input.readMessage(subBuilder, extensionRegistry); - setResultProject(subBuilder.buildPartial()); - break; - } - case 130: { - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Builder subBuilder = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.newBuilder(); - if (hasResultResult()) { - subBuilder.mergeFrom(getResultResult()); - } - input.readMessage(subBuilder, extensionRegistry); - setResultResult(subBuilder.buildPartial()); - break; - } - case 138: { - eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization.Builder subBuilder = eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization.newBuilder(); - if (hasOrganizationOrganization()) { - subBuilder.mergeFrom(getOrganizationOrganization()); - } - input.readMessage(subBuilder, extensionRegistry); - setOrganizationOrganization(subBuilder.buildPartial()); - break; - } - case 152: { - int rawValue = input.readEnum(); - eu.dnetlib.data.proto.RelTypeProtos.SubRelType value = eu.dnetlib.data.proto.RelTypeProtos.SubRelType.valueOf(rawValue); - if (value == null) { - unknownFields.mergeVarintField(19, rawValue); - } else { - bitField0_ |= 0x00000002; - subRelType_ = value; - } - break; - } - case 162: { - bitField0_ |= 0x00000004; - relClass_ = input.readBytes(); - break; - } - case 170: { - eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.newBuilder(); - input.readMessage(subBuilder, extensionRegistry); - addCollectedfrom(subBuilder.buildPartial()); - break; - } - } - } - } - - private int bitField0_; - - // required .eu.dnetlib.data.proto.RelType relType = 1; - private eu.dnetlib.data.proto.RelTypeProtos.RelType relType_ = eu.dnetlib.data.proto.RelTypeProtos.RelType.datasourceOrganization; - public boolean hasRelType() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.RelTypeProtos.RelType getRelType() { - return relType_; - } - public Builder setRelType(eu.dnetlib.data.proto.RelTypeProtos.RelType value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000001; - relType_ = value; - onChanged(); - return this; - } - public Builder clearRelType() { - bitField0_ = (bitField0_ & ~0x00000001); - relType_ = eu.dnetlib.data.proto.RelTypeProtos.RelType.datasourceOrganization; - onChanged(); - return this; - } - - // required .eu.dnetlib.data.proto.SubRelType subRelType = 19; - private eu.dnetlib.data.proto.RelTypeProtos.SubRelType subRelType_ = eu.dnetlib.data.proto.RelTypeProtos.SubRelType.provision; - public boolean hasSubRelType() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public eu.dnetlib.data.proto.RelTypeProtos.SubRelType getSubRelType() { - return subRelType_; - } - public Builder setSubRelType(eu.dnetlib.data.proto.RelTypeProtos.SubRelType value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000002; - subRelType_ = value; - onChanged(); - return this; - } - public Builder clearSubRelType() { - bitField0_ = (bitField0_ & ~0x00000002); - subRelType_ = eu.dnetlib.data.proto.RelTypeProtos.SubRelType.provision; - onChanged(); - return this; - } - - // required string relClass = 20; - private java.lang.Object relClass_ = ""; - public boolean hasRelClass() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - public String getRelClass() { - java.lang.Object ref = relClass_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - relClass_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setRelClass(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000004; - relClass_ = value; - onChanged(); - return this; - } - public Builder clearRelClass() { - bitField0_ = (bitField0_ & ~0x00000004); - relClass_ = getDefaultInstance().getRelClass(); - onChanged(); - return this; - } - void setRelClass(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000004; - relClass_ = value; - onChanged(); - } - - // required string source = 2; - private java.lang.Object source_ = ""; - public boolean hasSource() { - return ((bitField0_ & 0x00000008) == 0x00000008); - } - public String getSource() { - java.lang.Object ref = source_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - source_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setSource(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000008; - source_ = value; - onChanged(); - return this; - } - public Builder clearSource() { - bitField0_ = (bitField0_ & ~0x00000008); - source_ = getDefaultInstance().getSource(); - onChanged(); - return this; - } - void setSource(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000008; - source_ = value; - onChanged(); - } - - // required string target = 3; - private java.lang.Object target_ = ""; - public boolean hasTarget() { - return ((bitField0_ & 0x00000010) == 0x00000010); - } - public String getTarget() { - java.lang.Object ref = target_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - target_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setTarget(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000010; - target_ = value; - onChanged(); - return this; - } - public Builder clearTarget() { - bitField0_ = (bitField0_ & ~0x00000010); - target_ = getDefaultInstance().getTarget(); - onChanged(); - return this; - } - void setTarget(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000010; - target_ = value; - onChanged(); - } - - // required bool child = 4; - private boolean child_ ; - public boolean hasChild() { - return ((bitField0_ & 0x00000020) == 0x00000020); - } - public boolean getChild() { - return child_; - } - public Builder setChild(boolean value) { - bitField0_ |= 0x00000020; - child_ = value; - onChanged(); - return this; - } - public Builder clearChild() { - bitField0_ = (bitField0_ & ~0x00000020); - child_ = false; - onChanged(); - return this; - } - - // optional .eu.dnetlib.data.proto.OafEntity cachedTarget = 5; - private eu.dnetlib.data.proto.OafProtos.OafEntity cachedTarget_ = eu.dnetlib.data.proto.OafProtos.OafEntity.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.OafProtos.OafEntity, eu.dnetlib.data.proto.OafProtos.OafEntity.Builder, eu.dnetlib.data.proto.OafProtos.OafEntityOrBuilder> cachedTargetBuilder_; - public boolean hasCachedTarget() { - return ((bitField0_ & 0x00000040) == 0x00000040); - } - public eu.dnetlib.data.proto.OafProtos.OafEntity getCachedTarget() { - if (cachedTargetBuilder_ == null) { - return cachedTarget_; - } else { - return cachedTargetBuilder_.getMessage(); - } - } - public Builder setCachedTarget(eu.dnetlib.data.proto.OafProtos.OafEntity value) { - if (cachedTargetBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - cachedTarget_ = value; - onChanged(); - } else { - cachedTargetBuilder_.setMessage(value); - } - bitField0_ |= 0x00000040; - return this; - } - public Builder setCachedTarget( - eu.dnetlib.data.proto.OafProtos.OafEntity.Builder builderForValue) { - if (cachedTargetBuilder_ == null) { - cachedTarget_ = builderForValue.build(); - onChanged(); - } else { - cachedTargetBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000040; - return this; - } - public Builder mergeCachedTarget(eu.dnetlib.data.proto.OafProtos.OafEntity value) { - if (cachedTargetBuilder_ == null) { - if (((bitField0_ & 0x00000040) == 0x00000040) && - cachedTarget_ != eu.dnetlib.data.proto.OafProtos.OafEntity.getDefaultInstance()) { - cachedTarget_ = - eu.dnetlib.data.proto.OafProtos.OafEntity.newBuilder(cachedTarget_).mergeFrom(value).buildPartial(); - } else { - cachedTarget_ = value; - } - onChanged(); - } else { - cachedTargetBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000040; - return this; - } - public Builder clearCachedTarget() { - if (cachedTargetBuilder_ == null) { - cachedTarget_ = eu.dnetlib.data.proto.OafProtos.OafEntity.getDefaultInstance(); - onChanged(); - } else { - cachedTargetBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000040); - return this; - } - public eu.dnetlib.data.proto.OafProtos.OafEntity.Builder getCachedTargetBuilder() { - bitField0_ |= 0x00000040; - onChanged(); - return getCachedTargetFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.OafProtos.OafEntityOrBuilder getCachedTargetOrBuilder() { - if (cachedTargetBuilder_ != null) { - return cachedTargetBuilder_.getMessageOrBuilder(); - } else { - return cachedTarget_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.OafProtos.OafEntity, eu.dnetlib.data.proto.OafProtos.OafEntity.Builder, eu.dnetlib.data.proto.OafProtos.OafEntityOrBuilder> - getCachedTargetFieldBuilder() { - if (cachedTargetBuilder_ == null) { - cachedTargetBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.OafProtos.OafEntity, eu.dnetlib.data.proto.OafProtos.OafEntity.Builder, eu.dnetlib.data.proto.OafProtos.OafEntityOrBuilder>( - cachedTarget_, - getParentForChildren(), - isClean()); - cachedTarget_ = null; - } - return cachedTargetBuilder_; - } - - // optional .eu.dnetlib.data.proto.Oaf cachedOafTarget = 8; - private eu.dnetlib.data.proto.OafProtos.Oaf cachedOafTarget_ = eu.dnetlib.data.proto.OafProtos.Oaf.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.OafProtos.Oaf, eu.dnetlib.data.proto.OafProtos.Oaf.Builder, eu.dnetlib.data.proto.OafProtos.OafOrBuilder> cachedOafTargetBuilder_; - public boolean hasCachedOafTarget() { - return ((bitField0_ & 0x00000080) == 0x00000080); - } - public eu.dnetlib.data.proto.OafProtos.Oaf getCachedOafTarget() { - if (cachedOafTargetBuilder_ == null) { - return cachedOafTarget_; - } else { - return cachedOafTargetBuilder_.getMessage(); - } - } - public Builder setCachedOafTarget(eu.dnetlib.data.proto.OafProtos.Oaf value) { - if (cachedOafTargetBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - cachedOafTarget_ = value; - onChanged(); - } else { - cachedOafTargetBuilder_.setMessage(value); - } - bitField0_ |= 0x00000080; - return this; - } - public Builder setCachedOafTarget( - eu.dnetlib.data.proto.OafProtos.Oaf.Builder builderForValue) { - if (cachedOafTargetBuilder_ == null) { - cachedOafTarget_ = builderForValue.build(); - onChanged(); - } else { - cachedOafTargetBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000080; - return this; - } - public Builder mergeCachedOafTarget(eu.dnetlib.data.proto.OafProtos.Oaf value) { - if (cachedOafTargetBuilder_ == null) { - if (((bitField0_ & 0x00000080) == 0x00000080) && - cachedOafTarget_ != eu.dnetlib.data.proto.OafProtos.Oaf.getDefaultInstance()) { - cachedOafTarget_ = - eu.dnetlib.data.proto.OafProtos.Oaf.newBuilder(cachedOafTarget_).mergeFrom(value).buildPartial(); - } else { - cachedOafTarget_ = value; - } - onChanged(); - } else { - cachedOafTargetBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000080; - return this; - } - public Builder clearCachedOafTarget() { - if (cachedOafTargetBuilder_ == null) { - cachedOafTarget_ = eu.dnetlib.data.proto.OafProtos.Oaf.getDefaultInstance(); - onChanged(); - } else { - cachedOafTargetBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000080); - return this; - } - public eu.dnetlib.data.proto.OafProtos.Oaf.Builder getCachedOafTargetBuilder() { - bitField0_ |= 0x00000080; - onChanged(); - return getCachedOafTargetFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.OafProtos.OafOrBuilder getCachedOafTargetOrBuilder() { - if (cachedOafTargetBuilder_ != null) { - return cachedOafTargetBuilder_.getMessageOrBuilder(); - } else { - return cachedOafTarget_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.OafProtos.Oaf, eu.dnetlib.data.proto.OafProtos.Oaf.Builder, eu.dnetlib.data.proto.OafProtos.OafOrBuilder> - getCachedOafTargetFieldBuilder() { - if (cachedOafTargetBuilder_ == null) { - cachedOafTargetBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.OafProtos.Oaf, eu.dnetlib.data.proto.OafProtos.Oaf.Builder, eu.dnetlib.data.proto.OafProtos.OafOrBuilder>( - cachedOafTarget_, - getParentForChildren(), - isClean()); - cachedOafTarget_ = null; - } - return cachedOafTargetBuilder_; - } - - // optional .eu.dnetlib.data.proto.DatasourceOrganization datasourceOrganization = 6; - private eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization datasourceOrganization_ = eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization, eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Builder, eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganizationOrBuilder> datasourceOrganizationBuilder_; - public boolean hasDatasourceOrganization() { - return ((bitField0_ & 0x00000100) == 0x00000100); - } - public eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization getDatasourceOrganization() { - if (datasourceOrganizationBuilder_ == null) { - return datasourceOrganization_; - } else { - return datasourceOrganizationBuilder_.getMessage(); - } - } - public Builder setDatasourceOrganization(eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization value) { - if (datasourceOrganizationBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - datasourceOrganization_ = value; - onChanged(); - } else { - datasourceOrganizationBuilder_.setMessage(value); - } - bitField0_ |= 0x00000100; - return this; - } - public Builder setDatasourceOrganization( - eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Builder builderForValue) { - if (datasourceOrganizationBuilder_ == null) { - datasourceOrganization_ = builderForValue.build(); - onChanged(); - } else { - datasourceOrganizationBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000100; - return this; - } - public Builder mergeDatasourceOrganization(eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization value) { - if (datasourceOrganizationBuilder_ == null) { - if (((bitField0_ & 0x00000100) == 0x00000100) && - datasourceOrganization_ != eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.getDefaultInstance()) { - datasourceOrganization_ = - eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.newBuilder(datasourceOrganization_).mergeFrom(value).buildPartial(); - } else { - datasourceOrganization_ = value; - } - onChanged(); - } else { - datasourceOrganizationBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000100; - return this; - } - public Builder clearDatasourceOrganization() { - if (datasourceOrganizationBuilder_ == null) { - datasourceOrganization_ = eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.getDefaultInstance(); - onChanged(); - } else { - datasourceOrganizationBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000100); - return this; - } - public eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Builder getDatasourceOrganizationBuilder() { - bitField0_ |= 0x00000100; - onChanged(); - return getDatasourceOrganizationFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganizationOrBuilder getDatasourceOrganizationOrBuilder() { - if (datasourceOrganizationBuilder_ != null) { - return datasourceOrganizationBuilder_.getMessageOrBuilder(); - } else { - return datasourceOrganization_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization, eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Builder, eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganizationOrBuilder> - getDatasourceOrganizationFieldBuilder() { - if (datasourceOrganizationBuilder_ == null) { - datasourceOrganizationBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization, eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganization.Builder, eu.dnetlib.data.proto.DatasourceOrganizationProtos.DatasourceOrganizationOrBuilder>( - datasourceOrganization_, - getParentForChildren(), - isClean()); - datasourceOrganization_ = null; - } - return datasourceOrganizationBuilder_; - } - - // optional .eu.dnetlib.data.proto.ProjectOrganization projectOrganization = 9; - private eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization projectOrganization_ = eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization, eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Builder, eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganizationOrBuilder> projectOrganizationBuilder_; - public boolean hasProjectOrganization() { - return ((bitField0_ & 0x00000200) == 0x00000200); - } - public eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization getProjectOrganization() { - if (projectOrganizationBuilder_ == null) { - return projectOrganization_; - } else { - return projectOrganizationBuilder_.getMessage(); - } - } - public Builder setProjectOrganization(eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization value) { - if (projectOrganizationBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - projectOrganization_ = value; - onChanged(); - } else { - projectOrganizationBuilder_.setMessage(value); - } - bitField0_ |= 0x00000200; - return this; - } - public Builder setProjectOrganization( - eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Builder builderForValue) { - if (projectOrganizationBuilder_ == null) { - projectOrganization_ = builderForValue.build(); - onChanged(); - } else { - projectOrganizationBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000200; - return this; - } - public Builder mergeProjectOrganization(eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization value) { - if (projectOrganizationBuilder_ == null) { - if (((bitField0_ & 0x00000200) == 0x00000200) && - projectOrganization_ != eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.getDefaultInstance()) { - projectOrganization_ = - eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.newBuilder(projectOrganization_).mergeFrom(value).buildPartial(); - } else { - projectOrganization_ = value; - } - onChanged(); - } else { - projectOrganizationBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000200; - return this; - } - public Builder clearProjectOrganization() { - if (projectOrganizationBuilder_ == null) { - projectOrganization_ = eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.getDefaultInstance(); - onChanged(); - } else { - projectOrganizationBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000200); - return this; - } - public eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Builder getProjectOrganizationBuilder() { - bitField0_ |= 0x00000200; - onChanged(); - return getProjectOrganizationFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganizationOrBuilder getProjectOrganizationOrBuilder() { - if (projectOrganizationBuilder_ != null) { - return projectOrganizationBuilder_.getMessageOrBuilder(); - } else { - return projectOrganization_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization, eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Builder, eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganizationOrBuilder> - getProjectOrganizationFieldBuilder() { - if (projectOrganizationBuilder_ == null) { - projectOrganizationBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization, eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Builder, eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganizationOrBuilder>( - projectOrganization_, - getParentForChildren(), - isClean()); - projectOrganization_ = null; - } - return projectOrganizationBuilder_; - } - - // optional .eu.dnetlib.data.proto.ResultOrganization resultOrganization = 10; - private eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization resultOrganization_ = eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization, eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Builder, eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganizationOrBuilder> resultOrganizationBuilder_; - public boolean hasResultOrganization() { - return ((bitField0_ & 0x00000400) == 0x00000400); - } - public eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization getResultOrganization() { - if (resultOrganizationBuilder_ == null) { - return resultOrganization_; - } else { - return resultOrganizationBuilder_.getMessage(); - } - } - public Builder setResultOrganization(eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization value) { - if (resultOrganizationBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - resultOrganization_ = value; - onChanged(); - } else { - resultOrganizationBuilder_.setMessage(value); - } - bitField0_ |= 0x00000400; - return this; - } - public Builder setResultOrganization( - eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Builder builderForValue) { - if (resultOrganizationBuilder_ == null) { - resultOrganization_ = builderForValue.build(); - onChanged(); - } else { - resultOrganizationBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000400; - return this; - } - public Builder mergeResultOrganization(eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization value) { - if (resultOrganizationBuilder_ == null) { - if (((bitField0_ & 0x00000400) == 0x00000400) && - resultOrganization_ != eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.getDefaultInstance()) { - resultOrganization_ = - eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.newBuilder(resultOrganization_).mergeFrom(value).buildPartial(); - } else { - resultOrganization_ = value; - } - onChanged(); - } else { - resultOrganizationBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000400; - return this; - } - public Builder clearResultOrganization() { - if (resultOrganizationBuilder_ == null) { - resultOrganization_ = eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.getDefaultInstance(); - onChanged(); - } else { - resultOrganizationBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000400); - return this; - } - public eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Builder getResultOrganizationBuilder() { - bitField0_ |= 0x00000400; - onChanged(); - return getResultOrganizationFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganizationOrBuilder getResultOrganizationOrBuilder() { - if (resultOrganizationBuilder_ != null) { - return resultOrganizationBuilder_.getMessageOrBuilder(); - } else { - return resultOrganization_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization, eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Builder, eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganizationOrBuilder> - getResultOrganizationFieldBuilder() { - if (resultOrganizationBuilder_ == null) { - resultOrganizationBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization, eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Builder, eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganizationOrBuilder>( - resultOrganization_, - getParentForChildren(), - isClean()); - resultOrganization_ = null; - } - return resultOrganizationBuilder_; - } - - // optional .eu.dnetlib.data.proto.ResultProject resultProject = 11; - private eu.dnetlib.data.proto.ResultProjectProtos.ResultProject resultProject_ = eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ResultProjectProtos.ResultProject, eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Builder, eu.dnetlib.data.proto.ResultProjectProtos.ResultProjectOrBuilder> resultProjectBuilder_; - public boolean hasResultProject() { - return ((bitField0_ & 0x00000800) == 0x00000800); - } - public eu.dnetlib.data.proto.ResultProjectProtos.ResultProject getResultProject() { - if (resultProjectBuilder_ == null) { - return resultProject_; - } else { - return resultProjectBuilder_.getMessage(); - } - } - public Builder setResultProject(eu.dnetlib.data.proto.ResultProjectProtos.ResultProject value) { - if (resultProjectBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - resultProject_ = value; - onChanged(); - } else { - resultProjectBuilder_.setMessage(value); - } - bitField0_ |= 0x00000800; - return this; - } - public Builder setResultProject( - eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Builder builderForValue) { - if (resultProjectBuilder_ == null) { - resultProject_ = builderForValue.build(); - onChanged(); - } else { - resultProjectBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000800; - return this; - } - public Builder mergeResultProject(eu.dnetlib.data.proto.ResultProjectProtos.ResultProject value) { - if (resultProjectBuilder_ == null) { - if (((bitField0_ & 0x00000800) == 0x00000800) && - resultProject_ != eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.getDefaultInstance()) { - resultProject_ = - eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.newBuilder(resultProject_).mergeFrom(value).buildPartial(); - } else { - resultProject_ = value; - } - onChanged(); - } else { - resultProjectBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000800; - return this; - } - public Builder clearResultProject() { - if (resultProjectBuilder_ == null) { - resultProject_ = eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.getDefaultInstance(); - onChanged(); - } else { - resultProjectBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000800); - return this; - } - public eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Builder getResultProjectBuilder() { - bitField0_ |= 0x00000800; - onChanged(); - return getResultProjectFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.ResultProjectProtos.ResultProjectOrBuilder getResultProjectOrBuilder() { - if (resultProjectBuilder_ != null) { - return resultProjectBuilder_.getMessageOrBuilder(); - } else { - return resultProject_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ResultProjectProtos.ResultProject, eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Builder, eu.dnetlib.data.proto.ResultProjectProtos.ResultProjectOrBuilder> - getResultProjectFieldBuilder() { - if (resultProjectBuilder_ == null) { - resultProjectBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ResultProjectProtos.ResultProject, eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Builder, eu.dnetlib.data.proto.ResultProjectProtos.ResultProjectOrBuilder>( - resultProject_, - getParentForChildren(), - isClean()); - resultProject_ = null; - } - return resultProjectBuilder_; - } - - // optional .eu.dnetlib.data.proto.ResultResult resultResult = 16; - private eu.dnetlib.data.proto.ResultResultProtos.ResultResult resultResult_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ResultResultProtos.ResultResult, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Builder, eu.dnetlib.data.proto.ResultResultProtos.ResultResultOrBuilder> resultResultBuilder_; - public boolean hasResultResult() { - return ((bitField0_ & 0x00001000) == 0x00001000); - } - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult getResultResult() { - if (resultResultBuilder_ == null) { - return resultResult_; - } else { - return resultResultBuilder_.getMessage(); - } - } - public Builder setResultResult(eu.dnetlib.data.proto.ResultResultProtos.ResultResult value) { - if (resultResultBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - resultResult_ = value; - onChanged(); - } else { - resultResultBuilder_.setMessage(value); - } - bitField0_ |= 0x00001000; - return this; - } - public Builder setResultResult( - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Builder builderForValue) { - if (resultResultBuilder_ == null) { - resultResult_ = builderForValue.build(); - onChanged(); - } else { - resultResultBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00001000; - return this; - } - public Builder mergeResultResult(eu.dnetlib.data.proto.ResultResultProtos.ResultResult value) { - if (resultResultBuilder_ == null) { - if (((bitField0_ & 0x00001000) == 0x00001000) && - resultResult_ != eu.dnetlib.data.proto.ResultResultProtos.ResultResult.getDefaultInstance()) { - resultResult_ = - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.newBuilder(resultResult_).mergeFrom(value).buildPartial(); - } else { - resultResult_ = value; - } - onChanged(); - } else { - resultResultBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00001000; - return this; - } - public Builder clearResultResult() { - if (resultResultBuilder_ == null) { - resultResult_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.getDefaultInstance(); - onChanged(); - } else { - resultResultBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00001000); - return this; - } - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Builder getResultResultBuilder() { - bitField0_ |= 0x00001000; - onChanged(); - return getResultResultFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.ResultResultProtos.ResultResultOrBuilder getResultResultOrBuilder() { - if (resultResultBuilder_ != null) { - return resultResultBuilder_.getMessageOrBuilder(); - } else { - return resultResult_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ResultResultProtos.ResultResult, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Builder, eu.dnetlib.data.proto.ResultResultProtos.ResultResultOrBuilder> - getResultResultFieldBuilder() { - if (resultResultBuilder_ == null) { - resultResultBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ResultResultProtos.ResultResult, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Builder, eu.dnetlib.data.proto.ResultResultProtos.ResultResultOrBuilder>( - resultResult_, - getParentForChildren(), - isClean()); - resultResult_ = null; - } - return resultResultBuilder_; - } - - // optional .eu.dnetlib.data.proto.OrganizationOrganization organizationOrganization = 17; - private eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization organizationOrganization_ = eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization, eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization.Builder, eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganizationOrBuilder> organizationOrganizationBuilder_; - public boolean hasOrganizationOrganization() { - return ((bitField0_ & 0x00002000) == 0x00002000); - } - public eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization getOrganizationOrganization() { - if (organizationOrganizationBuilder_ == null) { - return organizationOrganization_; - } else { - return organizationOrganizationBuilder_.getMessage(); - } - } - public Builder setOrganizationOrganization(eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization value) { - if (organizationOrganizationBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - organizationOrganization_ = value; - onChanged(); - } else { - organizationOrganizationBuilder_.setMessage(value); - } - bitField0_ |= 0x00002000; - return this; - } - public Builder setOrganizationOrganization( - eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization.Builder builderForValue) { - if (organizationOrganizationBuilder_ == null) { - organizationOrganization_ = builderForValue.build(); - onChanged(); - } else { - organizationOrganizationBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00002000; - return this; - } - public Builder mergeOrganizationOrganization(eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization value) { - if (organizationOrganizationBuilder_ == null) { - if (((bitField0_ & 0x00002000) == 0x00002000) && - organizationOrganization_ != eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization.getDefaultInstance()) { - organizationOrganization_ = - eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization.newBuilder(organizationOrganization_).mergeFrom(value).buildPartial(); - } else { - organizationOrganization_ = value; - } - onChanged(); - } else { - organizationOrganizationBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00002000; - return this; - } - public Builder clearOrganizationOrganization() { - if (organizationOrganizationBuilder_ == null) { - organizationOrganization_ = eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization.getDefaultInstance(); - onChanged(); - } else { - organizationOrganizationBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00002000); - return this; - } - public eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization.Builder getOrganizationOrganizationBuilder() { - bitField0_ |= 0x00002000; - onChanged(); - return getOrganizationOrganizationFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganizationOrBuilder getOrganizationOrganizationOrBuilder() { - if (organizationOrganizationBuilder_ != null) { - return organizationOrganizationBuilder_.getMessageOrBuilder(); - } else { - return organizationOrganization_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization, eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization.Builder, eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganizationOrBuilder> - getOrganizationOrganizationFieldBuilder() { - if (organizationOrganizationBuilder_ == null) { - organizationOrganizationBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization, eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization.Builder, eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganizationOrBuilder>( - organizationOrganization_, - getParentForChildren(), - isClean()); - organizationOrganization_ = null; - } - return organizationOrganizationBuilder_; - } - - // repeated .eu.dnetlib.data.proto.KeyValue collectedfrom = 21; - private java.util.List collectedfrom_ = - java.util.Collections.emptyList(); - private void ensureCollectedfromIsMutable() { - if (!((bitField0_ & 0x00004000) == 0x00004000)) { - collectedfrom_ = new java.util.ArrayList(collectedfrom_); - bitField0_ |= 0x00004000; - } - } - - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.KeyValue, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder, eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder> collectedfromBuilder_; - - public java.util.List getCollectedfromList() { - if (collectedfromBuilder_ == null) { - return java.util.Collections.unmodifiableList(collectedfrom_); - } else { - return collectedfromBuilder_.getMessageList(); - } - } - public int getCollectedfromCount() { - if (collectedfromBuilder_ == null) { - return collectedfrom_.size(); - } else { - return collectedfromBuilder_.getCount(); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue getCollectedfrom(int index) { - if (collectedfromBuilder_ == null) { - return collectedfrom_.get(index); - } else { - return collectedfromBuilder_.getMessage(index); - } - } - public Builder setCollectedfrom( - int index, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue value) { - if (collectedfromBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureCollectedfromIsMutable(); - collectedfrom_.set(index, value); - onChanged(); - } else { - collectedfromBuilder_.setMessage(index, value); - } - return this; - } - public Builder setCollectedfrom( - int index, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder builderForValue) { - if (collectedfromBuilder_ == null) { - ensureCollectedfromIsMutable(); - collectedfrom_.set(index, builderForValue.build()); - onChanged(); - } else { - collectedfromBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - public Builder addCollectedfrom(eu.dnetlib.data.proto.FieldTypeProtos.KeyValue value) { - if (collectedfromBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureCollectedfromIsMutable(); - collectedfrom_.add(value); - onChanged(); - } else { - collectedfromBuilder_.addMessage(value); - } - return this; - } - public Builder addCollectedfrom( - int index, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue value) { - if (collectedfromBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureCollectedfromIsMutable(); - collectedfrom_.add(index, value); - onChanged(); - } else { - collectedfromBuilder_.addMessage(index, value); - } - return this; - } - public Builder addCollectedfrom( - eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder builderForValue) { - if (collectedfromBuilder_ == null) { - ensureCollectedfromIsMutable(); - collectedfrom_.add(builderForValue.build()); - onChanged(); - } else { - collectedfromBuilder_.addMessage(builderForValue.build()); - } - return this; - } - public Builder addCollectedfrom( - int index, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder builderForValue) { - if (collectedfromBuilder_ == null) { - ensureCollectedfromIsMutable(); - collectedfrom_.add(index, builderForValue.build()); - onChanged(); - } else { - collectedfromBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - public Builder addAllCollectedfrom( - java.lang.Iterable values) { - if (collectedfromBuilder_ == null) { - ensureCollectedfromIsMutable(); - super.addAll(values, collectedfrom_); - onChanged(); - } else { - collectedfromBuilder_.addAllMessages(values); - } - return this; - } - public Builder clearCollectedfrom() { - if (collectedfromBuilder_ == null) { - collectedfrom_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00004000); - onChanged(); - } else { - collectedfromBuilder_.clear(); - } - return this; - } - public Builder removeCollectedfrom(int index) { - if (collectedfromBuilder_ == null) { - ensureCollectedfromIsMutable(); - collectedfrom_.remove(index); - onChanged(); - } else { - collectedfromBuilder_.remove(index); - } - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder getCollectedfromBuilder( - int index) { - return getCollectedfromFieldBuilder().getBuilder(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder getCollectedfromOrBuilder( - int index) { - if (collectedfromBuilder_ == null) { - return collectedfrom_.get(index); } else { - return collectedfromBuilder_.getMessageOrBuilder(index); - } - } - public java.util.List - getCollectedfromOrBuilderList() { - if (collectedfromBuilder_ != null) { - return collectedfromBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(collectedfrom_); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder addCollectedfromBuilder() { - return getCollectedfromFieldBuilder().addBuilder( - eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.getDefaultInstance()); - } - public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder addCollectedfromBuilder( - int index) { - return getCollectedfromFieldBuilder().addBuilder( - index, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.getDefaultInstance()); - } - public java.util.List - getCollectedfromBuilderList() { - return getCollectedfromFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.KeyValue, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder, eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder> - getCollectedfromFieldBuilder() { - if (collectedfromBuilder_ == null) { - collectedfromBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.KeyValue, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder, eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder>( - collectedfrom_, - ((bitField0_ & 0x00004000) == 0x00004000), - getParentForChildren(), - isClean()); - collectedfrom_ = null; - } - return collectedfromBuilder_; - } - - // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.OafRel) - } - - static { - defaultInstance = new OafRel(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.OafRel) - } - - private static com.google.protobuf.Descriptors.Descriptor - internal_static_eu_dnetlib_data_proto_Oaf_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_eu_dnetlib_data_proto_Oaf_fieldAccessorTable; - private static com.google.protobuf.Descriptors.Descriptor - internal_static_eu_dnetlib_data_proto_OafEntity_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_eu_dnetlib_data_proto_OafEntity_fieldAccessorTable; - private static com.google.protobuf.Descriptors.Descriptor - internal_static_eu_dnetlib_data_proto_OafRel_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_eu_dnetlib_data_proto_OafRel_fieldAccessorTable; - - public static com.google.protobuf.Descriptors.FileDescriptor - getDescriptor() { - return descriptor; - } - private static com.google.protobuf.Descriptors.FileDescriptor - descriptor; - static { - java.lang.String[] descriptorData = { - "\n\017OafParent.proto\022\025eu.dnetlib.data.proto" + - "\032\nKind.proto\032\017FieldType.proto\032\nType.prot" + - "o\032\020Datasource.proto\032\022Organization.proto\032" + - "\rProject.proto\032\014Result.proto\032\014Person.pro" + - "to\032\rRelType.proto\032\035Datasource_Organizati" + - "on.proto\032\032Project_Organization.proto\032\031Re" + - "sult_Organization.proto\032\024Result_Project." + - "proto\032\023Result_Result.proto\032\037Organization" + - "_Organization.proto\"\336\001\n\003Oaf\022)\n\004kind\030\001 \002(" + - "\0162\033.eu.dnetlib.data.proto.Kind\0220\n\006entity", - "\030\002 \001(\0132 .eu.dnetlib.data.proto.OafEntity" + - "\022*\n\003rel\030\003 \001(\0132\035.eu.dnetlib.data.proto.Oa" + - "fRel\0221\n\010dataInfo\030\004 \001(\0132\037.eu.dnetlib.data" + - ".proto.DataInfo\022\033\n\023lastupdatetimestamp\030\005" + - " \001(\020\"\211\006\n\tOafEntity\022)\n\004type\030\001 \002(\0162\033.eu.dn" + - "etlib.data.proto.Type\022\n\n\002id\030\014 \002(\t\022\022\n\nori" + - "ginalId\030\010 \003(\t\0226\n\rcollectedfrom\030\t \003(\0132\037.e" + - "u.dnetlib.data.proto.KeyValue\0226\n\003pid\030\n \003" + - "(\0132).eu.dnetlib.data.proto.StructuredPro" + - "perty\022\030\n\020dateofcollection\030\013 \001(\t\022\034\n\024dateo", - "ftransformation\030\r \001(\t\0220\n\tcachedRel\030\002 \003(\013" + - "2\035.eu.dnetlib.data.proto.OafRel\0220\n\014cache" + - "dOafRel\030\022 \003(\0132\032.eu.dnetlib.data.proto.Oa" + - "f\0225\n\ndatasource\030\003 \001(\0132!.eu.dnetlib.data." + - "proto.Datasource\0229\n\014organization\030\004 \001(\0132#" + - ".eu.dnetlib.data.proto.Organization\022/\n\007p" + - "roject\030\006 \001(\0132\036.eu.dnetlib.data.proto.Pro" + - "ject\022-\n\006result\030\007 \001(\0132\035.eu.dnetlib.data.p" + - "roto.Result\022-\n\006person\030\005 \001(\0132\035.eu.dnetlib" + - ".data.proto.Person\0222\n\010children\030\020 \003(\0132 .e", - "u.dnetlib.data.proto.OafEntity\0223\n\textraI" + - "nfo\030\017 \003(\0132 .eu.dnetlib.data.proto.ExtraI" + - "nfo\022;\n\roaiprovenance\030\021 \001(\0132$.eu.dnetlib." + - "data.proto.OAIProvenance\"\200\006\n\006OafRel\022/\n\007r" + - "elType\030\001 \002(\0162\036.eu.dnetlib.data.proto.Rel" + - "Type\0225\n\nsubRelType\030\023 \002(\0162!.eu.dnetlib.da" + - "ta.proto.SubRelType\022\020\n\010relClass\030\024 \002(\t\022\016\n" + - "\006source\030\002 \002(\t\022\016\n\006target\030\003 \002(\t\022\r\n\005child\030\004" + - " \002(\010\0226\n\014cachedTarget\030\005 \001(\0132 .eu.dnetlib." + - "data.proto.OafEntity\0223\n\017cachedOafTarget\030", - "\010 \001(\0132\032.eu.dnetlib.data.proto.Oaf\022M\n\026dat" + - "asourceOrganization\030\006 \001(\0132-.eu.dnetlib.d" + - "ata.proto.DatasourceOrganization\022G\n\023proj" + - "ectOrganization\030\t \001(\0132*.eu.dnetlib.data." + - "proto.ProjectOrganization\022E\n\022resultOrgan" + - "ization\030\n \001(\0132).eu.dnetlib.data.proto.Re" + - "sultOrganization\022;\n\rresultProject\030\013 \001(\0132" + - "$.eu.dnetlib.data.proto.ResultProject\0229\n" + - "\014resultResult\030\020 \001(\0132#.eu.dnetlib.data.pr" + - "oto.ResultResult\022Q\n\030organizationOrganiza", - "tion\030\021 \001(\0132/.eu.dnetlib.data.proto.Organ" + - "izationOrganization\0226\n\rcollectedfrom\030\025 \003" + - "(\0132\037.eu.dnetlib.data.proto.KeyValueB\"\n\025e" + - "u.dnetlib.data.protoB\tOafProtos" - }; - com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = - new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { - public com.google.protobuf.ExtensionRegistry assignDescriptors( - com.google.protobuf.Descriptors.FileDescriptor root) { - descriptor = root; - internal_static_eu_dnetlib_data_proto_Oaf_descriptor = - getDescriptor().getMessageTypes().get(0); - internal_static_eu_dnetlib_data_proto_Oaf_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_eu_dnetlib_data_proto_Oaf_descriptor, - new java.lang.String[] { "Kind", "Entity", "Rel", "DataInfo", "Lastupdatetimestamp", }, - eu.dnetlib.data.proto.OafProtos.Oaf.class, - eu.dnetlib.data.proto.OafProtos.Oaf.Builder.class); - internal_static_eu_dnetlib_data_proto_OafEntity_descriptor = - getDescriptor().getMessageTypes().get(1); - internal_static_eu_dnetlib_data_proto_OafEntity_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_eu_dnetlib_data_proto_OafEntity_descriptor, - new java.lang.String[] { "Type", "Id", "OriginalId", "Collectedfrom", "Pid", "Dateofcollection", "Dateoftransformation", "CachedRel", "CachedOafRel", "Datasource", "Organization", "Project", "Result", "Person", "Children", "ExtraInfo", "Oaiprovenance", }, - eu.dnetlib.data.proto.OafProtos.OafEntity.class, - eu.dnetlib.data.proto.OafProtos.OafEntity.Builder.class); - internal_static_eu_dnetlib_data_proto_OafRel_descriptor = - getDescriptor().getMessageTypes().get(2); - internal_static_eu_dnetlib_data_proto_OafRel_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_eu_dnetlib_data_proto_OafRel_descriptor, - new java.lang.String[] { "RelType", "SubRelType", "RelClass", "Source", "Target", "Child", "CachedTarget", "CachedOafTarget", "DatasourceOrganization", "ProjectOrganization", "ResultOrganization", "ResultProject", "ResultResult", "OrganizationOrganization", "Collectedfrom", }, - eu.dnetlib.data.proto.OafProtos.OafRel.class, - eu.dnetlib.data.proto.OafProtos.OafRel.Builder.class); - return null; - } - }; - com.google.protobuf.Descriptors.FileDescriptor - .internalBuildGeneratedFileFrom(descriptorData, - new com.google.protobuf.Descriptors.FileDescriptor[] { - eu.dnetlib.data.proto.KindProtos.getDescriptor(), - eu.dnetlib.data.proto.FieldTypeProtos.getDescriptor(), - eu.dnetlib.data.proto.TypeProtos.getDescriptor(), - eu.dnetlib.data.proto.DatasourceProtos.getDescriptor(), - eu.dnetlib.data.proto.OrganizationProtos.getDescriptor(), - eu.dnetlib.data.proto.ProjectProtos.getDescriptor(), - eu.dnetlib.data.proto.ResultProtos.getDescriptor(), - eu.dnetlib.data.proto.PersonProtos.getDescriptor(), - eu.dnetlib.data.proto.RelTypeProtos.getDescriptor(), - eu.dnetlib.data.proto.DatasourceOrganizationProtos.getDescriptor(), - eu.dnetlib.data.proto.ProjectOrganizationProtos.getDescriptor(), - eu.dnetlib.data.proto.ResultOrganizationProtos.getDescriptor(), - eu.dnetlib.data.proto.ResultProjectProtos.getDescriptor(), - eu.dnetlib.data.proto.ResultResultProtos.getDescriptor(), - eu.dnetlib.data.proto.OrganizationOrganizationProtos.getDescriptor(), - }, assigner); - } - - // @@protoc_insertion_point(outer_class_scope) -} diff --git a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/OrganizationOrganizationProtos.java b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/OrganizationOrganizationProtos.java deleted file mode 100644 index b04807eb1..000000000 --- a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/OrganizationOrganizationProtos.java +++ /dev/null @@ -1,651 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: Organization_Organization.proto - -package eu.dnetlib.data.proto; - -public final class OrganizationOrganizationProtos { - private OrganizationOrganizationProtos() {} - public static void registerAllExtensions( - com.google.protobuf.ExtensionRegistry registry) { - } - public interface OrganizationOrganizationOrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // optional .eu.dnetlib.data.proto.Dedup dedup = 1; - boolean hasDedup(); - eu.dnetlib.data.proto.DedupProtos.Dedup getDedup(); - eu.dnetlib.data.proto.DedupProtos.DedupOrBuilder getDedupOrBuilder(); - - // optional .eu.dnetlib.data.proto.DedupSimilarity dedupSimilarity = 2; - boolean hasDedupSimilarity(); - eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity getDedupSimilarity(); - eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarityOrBuilder getDedupSimilarityOrBuilder(); - } - public static final class OrganizationOrganization extends - com.google.protobuf.GeneratedMessage - implements OrganizationOrganizationOrBuilder { - // Use OrganizationOrganization.newBuilder() to construct. - private OrganizationOrganization(Builder builder) { - super(builder); - } - private OrganizationOrganization(boolean noInit) {} - - private static final OrganizationOrganization defaultInstance; - public static OrganizationOrganization getDefaultInstance() { - return defaultInstance; - } - - public OrganizationOrganization getDefaultInstanceForType() { - return defaultInstance; - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.OrganizationOrganizationProtos.internal_static_eu_dnetlib_data_proto_OrganizationOrganization_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.OrganizationOrganizationProtos.internal_static_eu_dnetlib_data_proto_OrganizationOrganization_fieldAccessorTable; - } - - private int bitField0_; - // optional .eu.dnetlib.data.proto.Dedup dedup = 1; - public static final int DEDUP_FIELD_NUMBER = 1; - private eu.dnetlib.data.proto.DedupProtos.Dedup dedup_; - public boolean hasDedup() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.DedupProtos.Dedup getDedup() { - return dedup_; - } - public eu.dnetlib.data.proto.DedupProtos.DedupOrBuilder getDedupOrBuilder() { - return dedup_; - } - - // optional .eu.dnetlib.data.proto.DedupSimilarity dedupSimilarity = 2; - public static final int DEDUPSIMILARITY_FIELD_NUMBER = 2; - private eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity dedupSimilarity_; - public boolean hasDedupSimilarity() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity getDedupSimilarity() { - return dedupSimilarity_; - } - public eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarityOrBuilder getDedupSimilarityOrBuilder() { - return dedupSimilarity_; - } - - private void initFields() { - dedup_ = eu.dnetlib.data.proto.DedupProtos.Dedup.getDefaultInstance(); - dedupSimilarity_ = eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.getDefaultInstance(); - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - if (hasDedup()) { - if (!getDedup().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasDedupSimilarity()) { - if (!getDedupSimilarity().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeMessage(1, dedup_); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - output.writeMessage(2, dedupSimilarity_); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(1, dedup_); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(2, dedupSimilarity_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder - implements eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganizationOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.OrganizationOrganizationProtos.internal_static_eu_dnetlib_data_proto_OrganizationOrganization_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.OrganizationOrganizationProtos.internal_static_eu_dnetlib_data_proto_OrganizationOrganization_fieldAccessorTable; - } - - // Construct using eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - getDedupFieldBuilder(); - getDedupSimilarityFieldBuilder(); - } - } - private static Builder create() { - return new Builder(); - } - - public Builder clear() { - super.clear(); - if (dedupBuilder_ == null) { - dedup_ = eu.dnetlib.data.proto.DedupProtos.Dedup.getDefaultInstance(); - } else { - dedupBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - if (dedupSimilarityBuilder_ == null) { - dedupSimilarity_ = eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.getDefaultInstance(); - } else { - dedupSimilarityBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000002); - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization.getDescriptor(); - } - - public eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization getDefaultInstanceForType() { - return eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization.getDefaultInstance(); - } - - public eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization build() { - eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - private eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return result; - } - - public eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization buildPartial() { - eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization result = new eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - if (dedupBuilder_ == null) { - result.dedup_ = dedup_; - } else { - result.dedup_ = dedupBuilder_.build(); - } - if (((from_bitField0_ & 0x00000002) == 0x00000002)) { - to_bitField0_ |= 0x00000002; - } - if (dedupSimilarityBuilder_ == null) { - result.dedupSimilarity_ = dedupSimilarity_; - } else { - result.dedupSimilarity_ = dedupSimilarityBuilder_.build(); - } - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization) { - return mergeFrom((eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization other) { - if (other == eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization.getDefaultInstance()) return this; - if (other.hasDedup()) { - mergeDedup(other.getDedup()); - } - if (other.hasDedupSimilarity()) { - mergeDedupSimilarity(other.getDedupSimilarity()); - } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - - public final boolean isInitialized() { - if (hasDedup()) { - if (!getDedup().isInitialized()) { - - return false; - } - } - if (hasDedupSimilarity()) { - if (!getDedupSimilarity().isInitialized()) { - - return false; - } - } - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - } - break; - } - case 10: { - eu.dnetlib.data.proto.DedupProtos.Dedup.Builder subBuilder = eu.dnetlib.data.proto.DedupProtos.Dedup.newBuilder(); - if (hasDedup()) { - subBuilder.mergeFrom(getDedup()); - } - input.readMessage(subBuilder, extensionRegistry); - setDedup(subBuilder.buildPartial()); - break; - } - case 18: { - eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.Builder subBuilder = eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.newBuilder(); - if (hasDedupSimilarity()) { - subBuilder.mergeFrom(getDedupSimilarity()); - } - input.readMessage(subBuilder, extensionRegistry); - setDedupSimilarity(subBuilder.buildPartial()); - break; - } - } - } - } - - private int bitField0_; - - // optional .eu.dnetlib.data.proto.Dedup dedup = 1; - private eu.dnetlib.data.proto.DedupProtos.Dedup dedup_ = eu.dnetlib.data.proto.DedupProtos.Dedup.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.DedupProtos.Dedup, eu.dnetlib.data.proto.DedupProtos.Dedup.Builder, eu.dnetlib.data.proto.DedupProtos.DedupOrBuilder> dedupBuilder_; - public boolean hasDedup() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.DedupProtos.Dedup getDedup() { - if (dedupBuilder_ == null) { - return dedup_; - } else { - return dedupBuilder_.getMessage(); - } - } - public Builder setDedup(eu.dnetlib.data.proto.DedupProtos.Dedup value) { - if (dedupBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - dedup_ = value; - onChanged(); - } else { - dedupBuilder_.setMessage(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder setDedup( - eu.dnetlib.data.proto.DedupProtos.Dedup.Builder builderForValue) { - if (dedupBuilder_ == null) { - dedup_ = builderForValue.build(); - onChanged(); - } else { - dedupBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder mergeDedup(eu.dnetlib.data.proto.DedupProtos.Dedup value) { - if (dedupBuilder_ == null) { - if (((bitField0_ & 0x00000001) == 0x00000001) && - dedup_ != eu.dnetlib.data.proto.DedupProtos.Dedup.getDefaultInstance()) { - dedup_ = - eu.dnetlib.data.proto.DedupProtos.Dedup.newBuilder(dedup_).mergeFrom(value).buildPartial(); - } else { - dedup_ = value; - } - onChanged(); - } else { - dedupBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder clearDedup() { - if (dedupBuilder_ == null) { - dedup_ = eu.dnetlib.data.proto.DedupProtos.Dedup.getDefaultInstance(); - onChanged(); - } else { - dedupBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - public eu.dnetlib.data.proto.DedupProtos.Dedup.Builder getDedupBuilder() { - bitField0_ |= 0x00000001; - onChanged(); - return getDedupFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.DedupProtos.DedupOrBuilder getDedupOrBuilder() { - if (dedupBuilder_ != null) { - return dedupBuilder_.getMessageOrBuilder(); - } else { - return dedup_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.DedupProtos.Dedup, eu.dnetlib.data.proto.DedupProtos.Dedup.Builder, eu.dnetlib.data.proto.DedupProtos.DedupOrBuilder> - getDedupFieldBuilder() { - if (dedupBuilder_ == null) { - dedupBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.DedupProtos.Dedup, eu.dnetlib.data.proto.DedupProtos.Dedup.Builder, eu.dnetlib.data.proto.DedupProtos.DedupOrBuilder>( - dedup_, - getParentForChildren(), - isClean()); - dedup_ = null; - } - return dedupBuilder_; - } - - // optional .eu.dnetlib.data.proto.DedupSimilarity dedupSimilarity = 2; - private eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity dedupSimilarity_ = eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity, eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.Builder, eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarityOrBuilder> dedupSimilarityBuilder_; - public boolean hasDedupSimilarity() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity getDedupSimilarity() { - if (dedupSimilarityBuilder_ == null) { - return dedupSimilarity_; - } else { - return dedupSimilarityBuilder_.getMessage(); - } - } - public Builder setDedupSimilarity(eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity value) { - if (dedupSimilarityBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - dedupSimilarity_ = value; - onChanged(); - } else { - dedupSimilarityBuilder_.setMessage(value); - } - bitField0_ |= 0x00000002; - return this; - } - public Builder setDedupSimilarity( - eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.Builder builderForValue) { - if (dedupSimilarityBuilder_ == null) { - dedupSimilarity_ = builderForValue.build(); - onChanged(); - } else { - dedupSimilarityBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000002; - return this; - } - public Builder mergeDedupSimilarity(eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity value) { - if (dedupSimilarityBuilder_ == null) { - if (((bitField0_ & 0x00000002) == 0x00000002) && - dedupSimilarity_ != eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.getDefaultInstance()) { - dedupSimilarity_ = - eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.newBuilder(dedupSimilarity_).mergeFrom(value).buildPartial(); - } else { - dedupSimilarity_ = value; - } - onChanged(); - } else { - dedupSimilarityBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000002; - return this; - } - public Builder clearDedupSimilarity() { - if (dedupSimilarityBuilder_ == null) { - dedupSimilarity_ = eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.getDefaultInstance(); - onChanged(); - } else { - dedupSimilarityBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000002); - return this; - } - public eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.Builder getDedupSimilarityBuilder() { - bitField0_ |= 0x00000002; - onChanged(); - return getDedupSimilarityFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarityOrBuilder getDedupSimilarityOrBuilder() { - if (dedupSimilarityBuilder_ != null) { - return dedupSimilarityBuilder_.getMessageOrBuilder(); - } else { - return dedupSimilarity_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity, eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.Builder, eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarityOrBuilder> - getDedupSimilarityFieldBuilder() { - if (dedupSimilarityBuilder_ == null) { - dedupSimilarityBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity, eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.Builder, eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarityOrBuilder>( - dedupSimilarity_, - getParentForChildren(), - isClean()); - dedupSimilarity_ = null; - } - return dedupSimilarityBuilder_; - } - - // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.OrganizationOrganization) - } - - static { - defaultInstance = new OrganizationOrganization(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.OrganizationOrganization) - } - - private static com.google.protobuf.Descriptors.Descriptor - internal_static_eu_dnetlib_data_proto_OrganizationOrganization_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_eu_dnetlib_data_proto_OrganizationOrganization_fieldAccessorTable; - - public static com.google.protobuf.Descriptors.FileDescriptor - getDescriptor() { - return descriptor; - } - private static com.google.protobuf.Descriptors.FileDescriptor - descriptor; - static { - java.lang.String[] descriptorData = { - "\n\037Organization_Organization.proto\022\025eu.dn" + - "etlib.data.proto\032\021RelMetadata.proto\032\013Ded" + - "up.proto\032\025DedupSimilarity.proto\"\210\001\n\030Orga" + - "nizationOrganization\022+\n\005dedup\030\001 \001(\0132\034.eu" + - ".dnetlib.data.proto.Dedup\022?\n\017dedupSimila" + - "rity\030\002 \001(\0132&.eu.dnetlib.data.proto.Dedup" + - "SimilarityB7\n\025eu.dnetlib.data.protoB\036Org" + - "anizationOrganizationProtos" - }; - com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = - new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { - public com.google.protobuf.ExtensionRegistry assignDescriptors( - com.google.protobuf.Descriptors.FileDescriptor root) { - descriptor = root; - internal_static_eu_dnetlib_data_proto_OrganizationOrganization_descriptor = - getDescriptor().getMessageTypes().get(0); - internal_static_eu_dnetlib_data_proto_OrganizationOrganization_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_eu_dnetlib_data_proto_OrganizationOrganization_descriptor, - new java.lang.String[] { "Dedup", "DedupSimilarity", }, - eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization.class, - eu.dnetlib.data.proto.OrganizationOrganizationProtos.OrganizationOrganization.Builder.class); - return null; - } - }; - com.google.protobuf.Descriptors.FileDescriptor - .internalBuildGeneratedFileFrom(descriptorData, - new com.google.protobuf.Descriptors.FileDescriptor[] { - eu.dnetlib.data.proto.RelMetadataProtos.getDescriptor(), - eu.dnetlib.data.proto.DedupProtos.getDescriptor(), - eu.dnetlib.data.proto.DedupSimilarityProtos.getDescriptor(), - }, assigner); - } - - // @@protoc_insertion_point(outer_class_scope) -} diff --git a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/OrganizationProtos.java b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/OrganizationProtos.java deleted file mode 100644 index 2b27423a0..000000000 --- a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/OrganizationProtos.java +++ /dev/null @@ -1,3420 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: Organization.proto - -package eu.dnetlib.data.proto; - -public final class OrganizationProtos { - private OrganizationProtos() {} - public static void registerAllExtensions( - com.google.protobuf.ExtensionRegistry registry) { - } - public interface OrganizationOrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // optional .eu.dnetlib.data.proto.Organization.Metadata metadata = 2; - boolean hasMetadata(); - eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata getMetadata(); - eu.dnetlib.data.proto.OrganizationProtos.Organization.MetadataOrBuilder getMetadataOrBuilder(); - } - public static final class Organization extends - com.google.protobuf.GeneratedMessage - implements OrganizationOrBuilder { - // Use Organization.newBuilder() to construct. - private Organization(Builder builder) { - super(builder); - } - private Organization(boolean noInit) {} - - private static final Organization defaultInstance; - public static Organization getDefaultInstance() { - return defaultInstance; - } - - public Organization getDefaultInstanceForType() { - return defaultInstance; - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.OrganizationProtos.internal_static_eu_dnetlib_data_proto_Organization_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.OrganizationProtos.internal_static_eu_dnetlib_data_proto_Organization_fieldAccessorTable; - } - - public interface MetadataOrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // optional .eu.dnetlib.data.proto.StringField legalshortname = 1; - boolean hasLegalshortname(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getLegalshortname(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getLegalshortnameOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField legalname = 2; - boolean hasLegalname(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getLegalname(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getLegalnameOrBuilder(); - - // repeated .eu.dnetlib.data.proto.StringField alternativeNames = 17; - java.util.List - getAlternativeNamesList(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getAlternativeNames(int index); - int getAlternativeNamesCount(); - java.util.List - getAlternativeNamesOrBuilderList(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getAlternativeNamesOrBuilder( - int index); - - // optional .eu.dnetlib.data.proto.StringField websiteurl = 3; - boolean hasWebsiteurl(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getWebsiteurl(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getWebsiteurlOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField logourl = 4; - boolean hasLogourl(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getLogourl(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getLogourlOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField eclegalbody = 5; - boolean hasEclegalbody(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getEclegalbody(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEclegalbodyOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField eclegalperson = 6; - boolean hasEclegalperson(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getEclegalperson(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEclegalpersonOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField ecnonprofit = 7; - boolean hasEcnonprofit(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcnonprofit(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcnonprofitOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField ecresearchorganization = 8; - boolean hasEcresearchorganization(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcresearchorganization(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcresearchorganizationOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField echighereducation = 9; - boolean hasEchighereducation(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getEchighereducation(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEchighereducationOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField ecinternationalorganizationeurinterests = 10; - boolean hasEcinternationalorganizationeurinterests(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcinternationalorganizationeurinterests(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcinternationalorganizationeurinterestsOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField ecinternationalorganization = 11; - boolean hasEcinternationalorganization(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcinternationalorganization(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcinternationalorganizationOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField ecenterprise = 12; - boolean hasEcenterprise(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcenterprise(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcenterpriseOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField ecsmevalidated = 13; - boolean hasEcsmevalidated(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcsmevalidated(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcsmevalidatedOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField ecnutscode = 14; - boolean hasEcnutscode(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcnutscode(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcnutscodeOrBuilder(); - - // optional .eu.dnetlib.data.proto.Qualifier country = 16; - boolean hasCountry(); - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getCountry(); - eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getCountryOrBuilder(); - } - public static final class Metadata extends - com.google.protobuf.GeneratedMessage - implements MetadataOrBuilder { - // Use Metadata.newBuilder() to construct. - private Metadata(Builder builder) { - super(builder); - } - private Metadata(boolean noInit) {} - - private static final Metadata defaultInstance; - public static Metadata getDefaultInstance() { - return defaultInstance; - } - - public Metadata getDefaultInstanceForType() { - return defaultInstance; - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.OrganizationProtos.internal_static_eu_dnetlib_data_proto_Organization_Metadata_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.OrganizationProtos.internal_static_eu_dnetlib_data_proto_Organization_Metadata_fieldAccessorTable; - } - - private int bitField0_; - // optional .eu.dnetlib.data.proto.StringField legalshortname = 1; - public static final int LEGALSHORTNAME_FIELD_NUMBER = 1; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField legalshortname_; - public boolean hasLegalshortname() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getLegalshortname() { - return legalshortname_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getLegalshortnameOrBuilder() { - return legalshortname_; - } - - // optional .eu.dnetlib.data.proto.StringField legalname = 2; - public static final int LEGALNAME_FIELD_NUMBER = 2; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField legalname_; - public boolean hasLegalname() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getLegalname() { - return legalname_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getLegalnameOrBuilder() { - return legalname_; - } - - // repeated .eu.dnetlib.data.proto.StringField alternativeNames = 17; - public static final int ALTERNATIVENAMES_FIELD_NUMBER = 17; - private java.util.List alternativeNames_; - public java.util.List getAlternativeNamesList() { - return alternativeNames_; - } - public java.util.List - getAlternativeNamesOrBuilderList() { - return alternativeNames_; - } - public int getAlternativeNamesCount() { - return alternativeNames_.size(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getAlternativeNames(int index) { - return alternativeNames_.get(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getAlternativeNamesOrBuilder( - int index) { - return alternativeNames_.get(index); - } - - // optional .eu.dnetlib.data.proto.StringField websiteurl = 3; - public static final int WEBSITEURL_FIELD_NUMBER = 3; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField websiteurl_; - public boolean hasWebsiteurl() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getWebsiteurl() { - return websiteurl_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getWebsiteurlOrBuilder() { - return websiteurl_; - } - - // optional .eu.dnetlib.data.proto.StringField logourl = 4; - public static final int LOGOURL_FIELD_NUMBER = 4; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField logourl_; - public boolean hasLogourl() { - return ((bitField0_ & 0x00000008) == 0x00000008); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getLogourl() { - return logourl_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getLogourlOrBuilder() { - return logourl_; - } - - // optional .eu.dnetlib.data.proto.StringField eclegalbody = 5; - public static final int ECLEGALBODY_FIELD_NUMBER = 5; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField eclegalbody_; - public boolean hasEclegalbody() { - return ((bitField0_ & 0x00000010) == 0x00000010); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEclegalbody() { - return eclegalbody_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEclegalbodyOrBuilder() { - return eclegalbody_; - } - - // optional .eu.dnetlib.data.proto.StringField eclegalperson = 6; - public static final int ECLEGALPERSON_FIELD_NUMBER = 6; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField eclegalperson_; - public boolean hasEclegalperson() { - return ((bitField0_ & 0x00000020) == 0x00000020); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEclegalperson() { - return eclegalperson_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEclegalpersonOrBuilder() { - return eclegalperson_; - } - - // optional .eu.dnetlib.data.proto.StringField ecnonprofit = 7; - public static final int ECNONPROFIT_FIELD_NUMBER = 7; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField ecnonprofit_; - public boolean hasEcnonprofit() { - return ((bitField0_ & 0x00000040) == 0x00000040); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcnonprofit() { - return ecnonprofit_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcnonprofitOrBuilder() { - return ecnonprofit_; - } - - // optional .eu.dnetlib.data.proto.StringField ecresearchorganization = 8; - public static final int ECRESEARCHORGANIZATION_FIELD_NUMBER = 8; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField ecresearchorganization_; - public boolean hasEcresearchorganization() { - return ((bitField0_ & 0x00000080) == 0x00000080); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcresearchorganization() { - return ecresearchorganization_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcresearchorganizationOrBuilder() { - return ecresearchorganization_; - } - - // optional .eu.dnetlib.data.proto.StringField echighereducation = 9; - public static final int ECHIGHEREDUCATION_FIELD_NUMBER = 9; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField echighereducation_; - public boolean hasEchighereducation() { - return ((bitField0_ & 0x00000100) == 0x00000100); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEchighereducation() { - return echighereducation_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEchighereducationOrBuilder() { - return echighereducation_; - } - - // optional .eu.dnetlib.data.proto.StringField ecinternationalorganizationeurinterests = 10; - public static final int ECINTERNATIONALORGANIZATIONEURINTERESTS_FIELD_NUMBER = 10; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField ecinternationalorganizationeurinterests_; - public boolean hasEcinternationalorganizationeurinterests() { - return ((bitField0_ & 0x00000200) == 0x00000200); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcinternationalorganizationeurinterests() { - return ecinternationalorganizationeurinterests_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcinternationalorganizationeurinterestsOrBuilder() { - return ecinternationalorganizationeurinterests_; - } - - // optional .eu.dnetlib.data.proto.StringField ecinternationalorganization = 11; - public static final int ECINTERNATIONALORGANIZATION_FIELD_NUMBER = 11; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField ecinternationalorganization_; - public boolean hasEcinternationalorganization() { - return ((bitField0_ & 0x00000400) == 0x00000400); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcinternationalorganization() { - return ecinternationalorganization_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcinternationalorganizationOrBuilder() { - return ecinternationalorganization_; - } - - // optional .eu.dnetlib.data.proto.StringField ecenterprise = 12; - public static final int ECENTERPRISE_FIELD_NUMBER = 12; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField ecenterprise_; - public boolean hasEcenterprise() { - return ((bitField0_ & 0x00000800) == 0x00000800); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcenterprise() { - return ecenterprise_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcenterpriseOrBuilder() { - return ecenterprise_; - } - - // optional .eu.dnetlib.data.proto.StringField ecsmevalidated = 13; - public static final int ECSMEVALIDATED_FIELD_NUMBER = 13; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField ecsmevalidated_; - public boolean hasEcsmevalidated() { - return ((bitField0_ & 0x00001000) == 0x00001000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcsmevalidated() { - return ecsmevalidated_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcsmevalidatedOrBuilder() { - return ecsmevalidated_; - } - - // optional .eu.dnetlib.data.proto.StringField ecnutscode = 14; - public static final int ECNUTSCODE_FIELD_NUMBER = 14; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField ecnutscode_; - public boolean hasEcnutscode() { - return ((bitField0_ & 0x00002000) == 0x00002000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcnutscode() { - return ecnutscode_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcnutscodeOrBuilder() { - return ecnutscode_; - } - - // optional .eu.dnetlib.data.proto.Qualifier country = 16; - public static final int COUNTRY_FIELD_NUMBER = 16; - private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier country_; - public boolean hasCountry() { - return ((bitField0_ & 0x00004000) == 0x00004000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getCountry() { - return country_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getCountryOrBuilder() { - return country_; - } - - private void initFields() { - legalshortname_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - legalname_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - alternativeNames_ = java.util.Collections.emptyList(); - websiteurl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - logourl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - eclegalbody_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - eclegalperson_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - ecnonprofit_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - ecresearchorganization_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - echighereducation_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - ecinternationalorganizationeurinterests_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - ecinternationalorganization_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - ecenterprise_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - ecsmevalidated_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - ecnutscode_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - country_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - if (hasLegalshortname()) { - if (!getLegalshortname().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasLegalname()) { - if (!getLegalname().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - for (int i = 0; i < getAlternativeNamesCount(); i++) { - if (!getAlternativeNames(i).isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasWebsiteurl()) { - if (!getWebsiteurl().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasLogourl()) { - if (!getLogourl().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasEclegalbody()) { - if (!getEclegalbody().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasEclegalperson()) { - if (!getEclegalperson().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasEcnonprofit()) { - if (!getEcnonprofit().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasEcresearchorganization()) { - if (!getEcresearchorganization().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasEchighereducation()) { - if (!getEchighereducation().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasEcinternationalorganizationeurinterests()) { - if (!getEcinternationalorganizationeurinterests().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasEcinternationalorganization()) { - if (!getEcinternationalorganization().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasEcenterprise()) { - if (!getEcenterprise().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasEcsmevalidated()) { - if (!getEcsmevalidated().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasEcnutscode()) { - if (!getEcnutscode().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasCountry()) { - if (!getCountry().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeMessage(1, legalshortname_); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - output.writeMessage(2, legalname_); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - output.writeMessage(3, websiteurl_); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - output.writeMessage(4, logourl_); - } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - output.writeMessage(5, eclegalbody_); - } - if (((bitField0_ & 0x00000020) == 0x00000020)) { - output.writeMessage(6, eclegalperson_); - } - if (((bitField0_ & 0x00000040) == 0x00000040)) { - output.writeMessage(7, ecnonprofit_); - } - if (((bitField0_ & 0x00000080) == 0x00000080)) { - output.writeMessage(8, ecresearchorganization_); - } - if (((bitField0_ & 0x00000100) == 0x00000100)) { - output.writeMessage(9, echighereducation_); - } - if (((bitField0_ & 0x00000200) == 0x00000200)) { - output.writeMessage(10, ecinternationalorganizationeurinterests_); - } - if (((bitField0_ & 0x00000400) == 0x00000400)) { - output.writeMessage(11, ecinternationalorganization_); - } - if (((bitField0_ & 0x00000800) == 0x00000800)) { - output.writeMessage(12, ecenterprise_); - } - if (((bitField0_ & 0x00001000) == 0x00001000)) { - output.writeMessage(13, ecsmevalidated_); - } - if (((bitField0_ & 0x00002000) == 0x00002000)) { - output.writeMessage(14, ecnutscode_); - } - if (((bitField0_ & 0x00004000) == 0x00004000)) { - output.writeMessage(16, country_); - } - for (int i = 0; i < alternativeNames_.size(); i++) { - output.writeMessage(17, alternativeNames_.get(i)); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(1, legalshortname_); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(2, legalname_); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(3, websiteurl_); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(4, logourl_); - } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(5, eclegalbody_); - } - if (((bitField0_ & 0x00000020) == 0x00000020)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(6, eclegalperson_); - } - if (((bitField0_ & 0x00000040) == 0x00000040)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(7, ecnonprofit_); - } - if (((bitField0_ & 0x00000080) == 0x00000080)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(8, ecresearchorganization_); - } - if (((bitField0_ & 0x00000100) == 0x00000100)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(9, echighereducation_); - } - if (((bitField0_ & 0x00000200) == 0x00000200)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(10, ecinternationalorganizationeurinterests_); - } - if (((bitField0_ & 0x00000400) == 0x00000400)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(11, ecinternationalorganization_); - } - if (((bitField0_ & 0x00000800) == 0x00000800)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(12, ecenterprise_); - } - if (((bitField0_ & 0x00001000) == 0x00001000)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(13, ecsmevalidated_); - } - if (((bitField0_ & 0x00002000) == 0x00002000)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(14, ecnutscode_); - } - if (((bitField0_ & 0x00004000) == 0x00004000)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(16, country_); - } - for (int i = 0; i < alternativeNames_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(17, alternativeNames_.get(i)); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder - implements eu.dnetlib.data.proto.OrganizationProtos.Organization.MetadataOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.OrganizationProtos.internal_static_eu_dnetlib_data_proto_Organization_Metadata_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.OrganizationProtos.internal_static_eu_dnetlib_data_proto_Organization_Metadata_fieldAccessorTable; - } - - // Construct using eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - getLegalshortnameFieldBuilder(); - getLegalnameFieldBuilder(); - getAlternativeNamesFieldBuilder(); - getWebsiteurlFieldBuilder(); - getLogourlFieldBuilder(); - getEclegalbodyFieldBuilder(); - getEclegalpersonFieldBuilder(); - getEcnonprofitFieldBuilder(); - getEcresearchorganizationFieldBuilder(); - getEchighereducationFieldBuilder(); - getEcinternationalorganizationeurinterestsFieldBuilder(); - getEcinternationalorganizationFieldBuilder(); - getEcenterpriseFieldBuilder(); - getEcsmevalidatedFieldBuilder(); - getEcnutscodeFieldBuilder(); - getCountryFieldBuilder(); - } - } - private static Builder create() { - return new Builder(); - } - - public Builder clear() { - super.clear(); - if (legalshortnameBuilder_ == null) { - legalshortname_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - legalshortnameBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - if (legalnameBuilder_ == null) { - legalname_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - legalnameBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000002); - if (alternativeNamesBuilder_ == null) { - alternativeNames_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000004); - } else { - alternativeNamesBuilder_.clear(); - } - if (websiteurlBuilder_ == null) { - websiteurl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - websiteurlBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000008); - if (logourlBuilder_ == null) { - logourl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - logourlBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000010); - if (eclegalbodyBuilder_ == null) { - eclegalbody_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - eclegalbodyBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000020); - if (eclegalpersonBuilder_ == null) { - eclegalperson_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - eclegalpersonBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000040); - if (ecnonprofitBuilder_ == null) { - ecnonprofit_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - ecnonprofitBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000080); - if (ecresearchorganizationBuilder_ == null) { - ecresearchorganization_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - ecresearchorganizationBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000100); - if (echighereducationBuilder_ == null) { - echighereducation_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - echighereducationBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000200); - if (ecinternationalorganizationeurinterestsBuilder_ == null) { - ecinternationalorganizationeurinterests_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - ecinternationalorganizationeurinterestsBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000400); - if (ecinternationalorganizationBuilder_ == null) { - ecinternationalorganization_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - ecinternationalorganizationBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000800); - if (ecenterpriseBuilder_ == null) { - ecenterprise_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - ecenterpriseBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00001000); - if (ecsmevalidatedBuilder_ == null) { - ecsmevalidated_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - ecsmevalidatedBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00002000); - if (ecnutscodeBuilder_ == null) { - ecnutscode_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - ecnutscodeBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00004000); - if (countryBuilder_ == null) { - country_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - } else { - countryBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00008000); - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata.getDescriptor(); - } - - public eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata getDefaultInstanceForType() { - return eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata.getDefaultInstance(); - } - - public eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata build() { - eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - private eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return result; - } - - public eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata buildPartial() { - eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata result = new eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - if (legalshortnameBuilder_ == null) { - result.legalshortname_ = legalshortname_; - } else { - result.legalshortname_ = legalshortnameBuilder_.build(); - } - if (((from_bitField0_ & 0x00000002) == 0x00000002)) { - to_bitField0_ |= 0x00000002; - } - if (legalnameBuilder_ == null) { - result.legalname_ = legalname_; - } else { - result.legalname_ = legalnameBuilder_.build(); - } - if (alternativeNamesBuilder_ == null) { - if (((bitField0_ & 0x00000004) == 0x00000004)) { - alternativeNames_ = java.util.Collections.unmodifiableList(alternativeNames_); - bitField0_ = (bitField0_ & ~0x00000004); - } - result.alternativeNames_ = alternativeNames_; - } else { - result.alternativeNames_ = alternativeNamesBuilder_.build(); - } - if (((from_bitField0_ & 0x00000008) == 0x00000008)) { - to_bitField0_ |= 0x00000004; - } - if (websiteurlBuilder_ == null) { - result.websiteurl_ = websiteurl_; - } else { - result.websiteurl_ = websiteurlBuilder_.build(); - } - if (((from_bitField0_ & 0x00000010) == 0x00000010)) { - to_bitField0_ |= 0x00000008; - } - if (logourlBuilder_ == null) { - result.logourl_ = logourl_; - } else { - result.logourl_ = logourlBuilder_.build(); - } - if (((from_bitField0_ & 0x00000020) == 0x00000020)) { - to_bitField0_ |= 0x00000010; - } - if (eclegalbodyBuilder_ == null) { - result.eclegalbody_ = eclegalbody_; - } else { - result.eclegalbody_ = eclegalbodyBuilder_.build(); - } - if (((from_bitField0_ & 0x00000040) == 0x00000040)) { - to_bitField0_ |= 0x00000020; - } - if (eclegalpersonBuilder_ == null) { - result.eclegalperson_ = eclegalperson_; - } else { - result.eclegalperson_ = eclegalpersonBuilder_.build(); - } - if (((from_bitField0_ & 0x00000080) == 0x00000080)) { - to_bitField0_ |= 0x00000040; - } - if (ecnonprofitBuilder_ == null) { - result.ecnonprofit_ = ecnonprofit_; - } else { - result.ecnonprofit_ = ecnonprofitBuilder_.build(); - } - if (((from_bitField0_ & 0x00000100) == 0x00000100)) { - to_bitField0_ |= 0x00000080; - } - if (ecresearchorganizationBuilder_ == null) { - result.ecresearchorganization_ = ecresearchorganization_; - } else { - result.ecresearchorganization_ = ecresearchorganizationBuilder_.build(); - } - if (((from_bitField0_ & 0x00000200) == 0x00000200)) { - to_bitField0_ |= 0x00000100; - } - if (echighereducationBuilder_ == null) { - result.echighereducation_ = echighereducation_; - } else { - result.echighereducation_ = echighereducationBuilder_.build(); - } - if (((from_bitField0_ & 0x00000400) == 0x00000400)) { - to_bitField0_ |= 0x00000200; - } - if (ecinternationalorganizationeurinterestsBuilder_ == null) { - result.ecinternationalorganizationeurinterests_ = ecinternationalorganizationeurinterests_; - } else { - result.ecinternationalorganizationeurinterests_ = ecinternationalorganizationeurinterestsBuilder_.build(); - } - if (((from_bitField0_ & 0x00000800) == 0x00000800)) { - to_bitField0_ |= 0x00000400; - } - if (ecinternationalorganizationBuilder_ == null) { - result.ecinternationalorganization_ = ecinternationalorganization_; - } else { - result.ecinternationalorganization_ = ecinternationalorganizationBuilder_.build(); - } - if (((from_bitField0_ & 0x00001000) == 0x00001000)) { - to_bitField0_ |= 0x00000800; - } - if (ecenterpriseBuilder_ == null) { - result.ecenterprise_ = ecenterprise_; - } else { - result.ecenterprise_ = ecenterpriseBuilder_.build(); - } - if (((from_bitField0_ & 0x00002000) == 0x00002000)) { - to_bitField0_ |= 0x00001000; - } - if (ecsmevalidatedBuilder_ == null) { - result.ecsmevalidated_ = ecsmevalidated_; - } else { - result.ecsmevalidated_ = ecsmevalidatedBuilder_.build(); - } - if (((from_bitField0_ & 0x00004000) == 0x00004000)) { - to_bitField0_ |= 0x00002000; - } - if (ecnutscodeBuilder_ == null) { - result.ecnutscode_ = ecnutscode_; - } else { - result.ecnutscode_ = ecnutscodeBuilder_.build(); - } - if (((from_bitField0_ & 0x00008000) == 0x00008000)) { - to_bitField0_ |= 0x00004000; - } - if (countryBuilder_ == null) { - result.country_ = country_; - } else { - result.country_ = countryBuilder_.build(); - } - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata) { - return mergeFrom((eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata other) { - if (other == eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata.getDefaultInstance()) return this; - if (other.hasLegalshortname()) { - mergeLegalshortname(other.getLegalshortname()); - } - if (other.hasLegalname()) { - mergeLegalname(other.getLegalname()); - } - if (alternativeNamesBuilder_ == null) { - if (!other.alternativeNames_.isEmpty()) { - if (alternativeNames_.isEmpty()) { - alternativeNames_ = other.alternativeNames_; - bitField0_ = (bitField0_ & ~0x00000004); - } else { - ensureAlternativeNamesIsMutable(); - alternativeNames_.addAll(other.alternativeNames_); - } - onChanged(); - } - } else { - if (!other.alternativeNames_.isEmpty()) { - if (alternativeNamesBuilder_.isEmpty()) { - alternativeNamesBuilder_.dispose(); - alternativeNamesBuilder_ = null; - alternativeNames_ = other.alternativeNames_; - bitField0_ = (bitField0_ & ~0x00000004); - alternativeNamesBuilder_ = - com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? - getAlternativeNamesFieldBuilder() : null; - } else { - alternativeNamesBuilder_.addAllMessages(other.alternativeNames_); - } - } - } - if (other.hasWebsiteurl()) { - mergeWebsiteurl(other.getWebsiteurl()); - } - if (other.hasLogourl()) { - mergeLogourl(other.getLogourl()); - } - if (other.hasEclegalbody()) { - mergeEclegalbody(other.getEclegalbody()); - } - if (other.hasEclegalperson()) { - mergeEclegalperson(other.getEclegalperson()); - } - if (other.hasEcnonprofit()) { - mergeEcnonprofit(other.getEcnonprofit()); - } - if (other.hasEcresearchorganization()) { - mergeEcresearchorganization(other.getEcresearchorganization()); - } - if (other.hasEchighereducation()) { - mergeEchighereducation(other.getEchighereducation()); - } - if (other.hasEcinternationalorganizationeurinterests()) { - mergeEcinternationalorganizationeurinterests(other.getEcinternationalorganizationeurinterests()); - } - if (other.hasEcinternationalorganization()) { - mergeEcinternationalorganization(other.getEcinternationalorganization()); - } - if (other.hasEcenterprise()) { - mergeEcenterprise(other.getEcenterprise()); - } - if (other.hasEcsmevalidated()) { - mergeEcsmevalidated(other.getEcsmevalidated()); - } - if (other.hasEcnutscode()) { - mergeEcnutscode(other.getEcnutscode()); - } - if (other.hasCountry()) { - mergeCountry(other.getCountry()); - } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - - public final boolean isInitialized() { - if (hasLegalshortname()) { - if (!getLegalshortname().isInitialized()) { - - return false; - } - } - if (hasLegalname()) { - if (!getLegalname().isInitialized()) { - - return false; - } - } - for (int i = 0; i < getAlternativeNamesCount(); i++) { - if (!getAlternativeNames(i).isInitialized()) { - - return false; - } - } - if (hasWebsiteurl()) { - if (!getWebsiteurl().isInitialized()) { - - return false; - } - } - if (hasLogourl()) { - if (!getLogourl().isInitialized()) { - - return false; - } - } - if (hasEclegalbody()) { - if (!getEclegalbody().isInitialized()) { - - return false; - } - } - if (hasEclegalperson()) { - if (!getEclegalperson().isInitialized()) { - - return false; - } - } - if (hasEcnonprofit()) { - if (!getEcnonprofit().isInitialized()) { - - return false; - } - } - if (hasEcresearchorganization()) { - if (!getEcresearchorganization().isInitialized()) { - - return false; - } - } - if (hasEchighereducation()) { - if (!getEchighereducation().isInitialized()) { - - return false; - } - } - if (hasEcinternationalorganizationeurinterests()) { - if (!getEcinternationalorganizationeurinterests().isInitialized()) { - - return false; - } - } - if (hasEcinternationalorganization()) { - if (!getEcinternationalorganization().isInitialized()) { - - return false; - } - } - if (hasEcenterprise()) { - if (!getEcenterprise().isInitialized()) { - - return false; - } - } - if (hasEcsmevalidated()) { - if (!getEcsmevalidated().isInitialized()) { - - return false; - } - } - if (hasEcnutscode()) { - if (!getEcnutscode().isInitialized()) { - - return false; - } - } - if (hasCountry()) { - if (!getCountry().isInitialized()) { - - return false; - } - } - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - } - break; - } - case 10: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasLegalshortname()) { - subBuilder.mergeFrom(getLegalshortname()); - } - input.readMessage(subBuilder, extensionRegistry); - setLegalshortname(subBuilder.buildPartial()); - break; - } - case 18: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasLegalname()) { - subBuilder.mergeFrom(getLegalname()); - } - input.readMessage(subBuilder, extensionRegistry); - setLegalname(subBuilder.buildPartial()); - break; - } - case 26: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasWebsiteurl()) { - subBuilder.mergeFrom(getWebsiteurl()); - } - input.readMessage(subBuilder, extensionRegistry); - setWebsiteurl(subBuilder.buildPartial()); - break; - } - case 34: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasLogourl()) { - subBuilder.mergeFrom(getLogourl()); - } - input.readMessage(subBuilder, extensionRegistry); - setLogourl(subBuilder.buildPartial()); - break; - } - case 42: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasEclegalbody()) { - subBuilder.mergeFrom(getEclegalbody()); - } - input.readMessage(subBuilder, extensionRegistry); - setEclegalbody(subBuilder.buildPartial()); - break; - } - case 50: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasEclegalperson()) { - subBuilder.mergeFrom(getEclegalperson()); - } - input.readMessage(subBuilder, extensionRegistry); - setEclegalperson(subBuilder.buildPartial()); - break; - } - case 58: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasEcnonprofit()) { - subBuilder.mergeFrom(getEcnonprofit()); - } - input.readMessage(subBuilder, extensionRegistry); - setEcnonprofit(subBuilder.buildPartial()); - break; - } - case 66: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasEcresearchorganization()) { - subBuilder.mergeFrom(getEcresearchorganization()); - } - input.readMessage(subBuilder, extensionRegistry); - setEcresearchorganization(subBuilder.buildPartial()); - break; - } - case 74: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasEchighereducation()) { - subBuilder.mergeFrom(getEchighereducation()); - } - input.readMessage(subBuilder, extensionRegistry); - setEchighereducation(subBuilder.buildPartial()); - break; - } - case 82: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasEcinternationalorganizationeurinterests()) { - subBuilder.mergeFrom(getEcinternationalorganizationeurinterests()); - } - input.readMessage(subBuilder, extensionRegistry); - setEcinternationalorganizationeurinterests(subBuilder.buildPartial()); - break; - } - case 90: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasEcinternationalorganization()) { - subBuilder.mergeFrom(getEcinternationalorganization()); - } - input.readMessage(subBuilder, extensionRegistry); - setEcinternationalorganization(subBuilder.buildPartial()); - break; - } - case 98: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasEcenterprise()) { - subBuilder.mergeFrom(getEcenterprise()); - } - input.readMessage(subBuilder, extensionRegistry); - setEcenterprise(subBuilder.buildPartial()); - break; - } - case 106: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasEcsmevalidated()) { - subBuilder.mergeFrom(getEcsmevalidated()); - } - input.readMessage(subBuilder, extensionRegistry); - setEcsmevalidated(subBuilder.buildPartial()); - break; - } - case 114: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasEcnutscode()) { - subBuilder.mergeFrom(getEcnutscode()); - } - input.readMessage(subBuilder, extensionRegistry); - setEcnutscode(subBuilder.buildPartial()); - break; - } - case 130: { - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(); - if (hasCountry()) { - subBuilder.mergeFrom(getCountry()); - } - input.readMessage(subBuilder, extensionRegistry); - setCountry(subBuilder.buildPartial()); - break; - } - case 138: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - input.readMessage(subBuilder, extensionRegistry); - addAlternativeNames(subBuilder.buildPartial()); - break; - } - } - } - } - - private int bitField0_; - - // optional .eu.dnetlib.data.proto.StringField legalshortname = 1; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField legalshortname_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> legalshortnameBuilder_; - public boolean hasLegalshortname() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getLegalshortname() { - if (legalshortnameBuilder_ == null) { - return legalshortname_; - } else { - return legalshortnameBuilder_.getMessage(); - } - } - public Builder setLegalshortname(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (legalshortnameBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - legalshortname_ = value; - onChanged(); - } else { - legalshortnameBuilder_.setMessage(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder setLegalshortname( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (legalshortnameBuilder_ == null) { - legalshortname_ = builderForValue.build(); - onChanged(); - } else { - legalshortnameBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder mergeLegalshortname(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (legalshortnameBuilder_ == null) { - if (((bitField0_ & 0x00000001) == 0x00000001) && - legalshortname_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - legalshortname_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(legalshortname_).mergeFrom(value).buildPartial(); - } else { - legalshortname_ = value; - } - onChanged(); - } else { - legalshortnameBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder clearLegalshortname() { - if (legalshortnameBuilder_ == null) { - legalshortname_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - legalshortnameBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getLegalshortnameBuilder() { - bitField0_ |= 0x00000001; - onChanged(); - return getLegalshortnameFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getLegalshortnameOrBuilder() { - if (legalshortnameBuilder_ != null) { - return legalshortnameBuilder_.getMessageOrBuilder(); - } else { - return legalshortname_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getLegalshortnameFieldBuilder() { - if (legalshortnameBuilder_ == null) { - legalshortnameBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - legalshortname_, - getParentForChildren(), - isClean()); - legalshortname_ = null; - } - return legalshortnameBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField legalname = 2; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField legalname_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> legalnameBuilder_; - public boolean hasLegalname() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getLegalname() { - if (legalnameBuilder_ == null) { - return legalname_; - } else { - return legalnameBuilder_.getMessage(); - } - } - public Builder setLegalname(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (legalnameBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - legalname_ = value; - onChanged(); - } else { - legalnameBuilder_.setMessage(value); - } - bitField0_ |= 0x00000002; - return this; - } - public Builder setLegalname( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (legalnameBuilder_ == null) { - legalname_ = builderForValue.build(); - onChanged(); - } else { - legalnameBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000002; - return this; - } - public Builder mergeLegalname(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (legalnameBuilder_ == null) { - if (((bitField0_ & 0x00000002) == 0x00000002) && - legalname_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - legalname_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(legalname_).mergeFrom(value).buildPartial(); - } else { - legalname_ = value; - } - onChanged(); - } else { - legalnameBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000002; - return this; - } - public Builder clearLegalname() { - if (legalnameBuilder_ == null) { - legalname_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - legalnameBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000002); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getLegalnameBuilder() { - bitField0_ |= 0x00000002; - onChanged(); - return getLegalnameFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getLegalnameOrBuilder() { - if (legalnameBuilder_ != null) { - return legalnameBuilder_.getMessageOrBuilder(); - } else { - return legalname_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getLegalnameFieldBuilder() { - if (legalnameBuilder_ == null) { - legalnameBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - legalname_, - getParentForChildren(), - isClean()); - legalname_ = null; - } - return legalnameBuilder_; - } - - // repeated .eu.dnetlib.data.proto.StringField alternativeNames = 17; - private java.util.List alternativeNames_ = - java.util.Collections.emptyList(); - private void ensureAlternativeNamesIsMutable() { - if (!((bitField0_ & 0x00000004) == 0x00000004)) { - alternativeNames_ = new java.util.ArrayList(alternativeNames_); - bitField0_ |= 0x00000004; - } - } - - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> alternativeNamesBuilder_; - - public java.util.List getAlternativeNamesList() { - if (alternativeNamesBuilder_ == null) { - return java.util.Collections.unmodifiableList(alternativeNames_); - } else { - return alternativeNamesBuilder_.getMessageList(); - } - } - public int getAlternativeNamesCount() { - if (alternativeNamesBuilder_ == null) { - return alternativeNames_.size(); - } else { - return alternativeNamesBuilder_.getCount(); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getAlternativeNames(int index) { - if (alternativeNamesBuilder_ == null) { - return alternativeNames_.get(index); - } else { - return alternativeNamesBuilder_.getMessage(index); - } - } - public Builder setAlternativeNames( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (alternativeNamesBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureAlternativeNamesIsMutable(); - alternativeNames_.set(index, value); - onChanged(); - } else { - alternativeNamesBuilder_.setMessage(index, value); - } - return this; - } - public Builder setAlternativeNames( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (alternativeNamesBuilder_ == null) { - ensureAlternativeNamesIsMutable(); - alternativeNames_.set(index, builderForValue.build()); - onChanged(); - } else { - alternativeNamesBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - public Builder addAlternativeNames(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (alternativeNamesBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureAlternativeNamesIsMutable(); - alternativeNames_.add(value); - onChanged(); - } else { - alternativeNamesBuilder_.addMessage(value); - } - return this; - } - public Builder addAlternativeNames( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (alternativeNamesBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureAlternativeNamesIsMutable(); - alternativeNames_.add(index, value); - onChanged(); - } else { - alternativeNamesBuilder_.addMessage(index, value); - } - return this; - } - public Builder addAlternativeNames( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (alternativeNamesBuilder_ == null) { - ensureAlternativeNamesIsMutable(); - alternativeNames_.add(builderForValue.build()); - onChanged(); - } else { - alternativeNamesBuilder_.addMessage(builderForValue.build()); - } - return this; - } - public Builder addAlternativeNames( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (alternativeNamesBuilder_ == null) { - ensureAlternativeNamesIsMutable(); - alternativeNames_.add(index, builderForValue.build()); - onChanged(); - } else { - alternativeNamesBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - public Builder addAllAlternativeNames( - java.lang.Iterable values) { - if (alternativeNamesBuilder_ == null) { - ensureAlternativeNamesIsMutable(); - super.addAll(values, alternativeNames_); - onChanged(); - } else { - alternativeNamesBuilder_.addAllMessages(values); - } - return this; - } - public Builder clearAlternativeNames() { - if (alternativeNamesBuilder_ == null) { - alternativeNames_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000004); - onChanged(); - } else { - alternativeNamesBuilder_.clear(); - } - return this; - } - public Builder removeAlternativeNames(int index) { - if (alternativeNamesBuilder_ == null) { - ensureAlternativeNamesIsMutable(); - alternativeNames_.remove(index); - onChanged(); - } else { - alternativeNamesBuilder_.remove(index); - } - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getAlternativeNamesBuilder( - int index) { - return getAlternativeNamesFieldBuilder().getBuilder(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getAlternativeNamesOrBuilder( - int index) { - if (alternativeNamesBuilder_ == null) { - return alternativeNames_.get(index); } else { - return alternativeNamesBuilder_.getMessageOrBuilder(index); - } - } - public java.util.List - getAlternativeNamesOrBuilderList() { - if (alternativeNamesBuilder_ != null) { - return alternativeNamesBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(alternativeNames_); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addAlternativeNamesBuilder() { - return getAlternativeNamesFieldBuilder().addBuilder( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addAlternativeNamesBuilder( - int index) { - return getAlternativeNamesFieldBuilder().addBuilder( - index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); - } - public java.util.List - getAlternativeNamesBuilderList() { - return getAlternativeNamesFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getAlternativeNamesFieldBuilder() { - if (alternativeNamesBuilder_ == null) { - alternativeNamesBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - alternativeNames_, - ((bitField0_ & 0x00000004) == 0x00000004), - getParentForChildren(), - isClean()); - alternativeNames_ = null; - } - return alternativeNamesBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField websiteurl = 3; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField websiteurl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> websiteurlBuilder_; - public boolean hasWebsiteurl() { - return ((bitField0_ & 0x00000008) == 0x00000008); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getWebsiteurl() { - if (websiteurlBuilder_ == null) { - return websiteurl_; - } else { - return websiteurlBuilder_.getMessage(); - } - } - public Builder setWebsiteurl(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (websiteurlBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - websiteurl_ = value; - onChanged(); - } else { - websiteurlBuilder_.setMessage(value); - } - bitField0_ |= 0x00000008; - return this; - } - public Builder setWebsiteurl( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (websiteurlBuilder_ == null) { - websiteurl_ = builderForValue.build(); - onChanged(); - } else { - websiteurlBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000008; - return this; - } - public Builder mergeWebsiteurl(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (websiteurlBuilder_ == null) { - if (((bitField0_ & 0x00000008) == 0x00000008) && - websiteurl_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - websiteurl_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(websiteurl_).mergeFrom(value).buildPartial(); - } else { - websiteurl_ = value; - } - onChanged(); - } else { - websiteurlBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000008; - return this; - } - public Builder clearWebsiteurl() { - if (websiteurlBuilder_ == null) { - websiteurl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - websiteurlBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000008); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getWebsiteurlBuilder() { - bitField0_ |= 0x00000008; - onChanged(); - return getWebsiteurlFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getWebsiteurlOrBuilder() { - if (websiteurlBuilder_ != null) { - return websiteurlBuilder_.getMessageOrBuilder(); - } else { - return websiteurl_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getWebsiteurlFieldBuilder() { - if (websiteurlBuilder_ == null) { - websiteurlBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - websiteurl_, - getParentForChildren(), - isClean()); - websiteurl_ = null; - } - return websiteurlBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField logourl = 4; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField logourl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> logourlBuilder_; - public boolean hasLogourl() { - return ((bitField0_ & 0x00000010) == 0x00000010); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getLogourl() { - if (logourlBuilder_ == null) { - return logourl_; - } else { - return logourlBuilder_.getMessage(); - } - } - public Builder setLogourl(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (logourlBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - logourl_ = value; - onChanged(); - } else { - logourlBuilder_.setMessage(value); - } - bitField0_ |= 0x00000010; - return this; - } - public Builder setLogourl( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (logourlBuilder_ == null) { - logourl_ = builderForValue.build(); - onChanged(); - } else { - logourlBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000010; - return this; - } - public Builder mergeLogourl(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (logourlBuilder_ == null) { - if (((bitField0_ & 0x00000010) == 0x00000010) && - logourl_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - logourl_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(logourl_).mergeFrom(value).buildPartial(); - } else { - logourl_ = value; - } - onChanged(); - } else { - logourlBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000010; - return this; - } - public Builder clearLogourl() { - if (logourlBuilder_ == null) { - logourl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - logourlBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000010); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getLogourlBuilder() { - bitField0_ |= 0x00000010; - onChanged(); - return getLogourlFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getLogourlOrBuilder() { - if (logourlBuilder_ != null) { - return logourlBuilder_.getMessageOrBuilder(); - } else { - return logourl_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getLogourlFieldBuilder() { - if (logourlBuilder_ == null) { - logourlBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - logourl_, - getParentForChildren(), - isClean()); - logourl_ = null; - } - return logourlBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField eclegalbody = 5; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField eclegalbody_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> eclegalbodyBuilder_; - public boolean hasEclegalbody() { - return ((bitField0_ & 0x00000020) == 0x00000020); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEclegalbody() { - if (eclegalbodyBuilder_ == null) { - return eclegalbody_; - } else { - return eclegalbodyBuilder_.getMessage(); - } - } - public Builder setEclegalbody(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (eclegalbodyBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - eclegalbody_ = value; - onChanged(); - } else { - eclegalbodyBuilder_.setMessage(value); - } - bitField0_ |= 0x00000020; - return this; - } - public Builder setEclegalbody( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (eclegalbodyBuilder_ == null) { - eclegalbody_ = builderForValue.build(); - onChanged(); - } else { - eclegalbodyBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000020; - return this; - } - public Builder mergeEclegalbody(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (eclegalbodyBuilder_ == null) { - if (((bitField0_ & 0x00000020) == 0x00000020) && - eclegalbody_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - eclegalbody_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(eclegalbody_).mergeFrom(value).buildPartial(); - } else { - eclegalbody_ = value; - } - onChanged(); - } else { - eclegalbodyBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000020; - return this; - } - public Builder clearEclegalbody() { - if (eclegalbodyBuilder_ == null) { - eclegalbody_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - eclegalbodyBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000020); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getEclegalbodyBuilder() { - bitField0_ |= 0x00000020; - onChanged(); - return getEclegalbodyFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEclegalbodyOrBuilder() { - if (eclegalbodyBuilder_ != null) { - return eclegalbodyBuilder_.getMessageOrBuilder(); - } else { - return eclegalbody_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getEclegalbodyFieldBuilder() { - if (eclegalbodyBuilder_ == null) { - eclegalbodyBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - eclegalbody_, - getParentForChildren(), - isClean()); - eclegalbody_ = null; - } - return eclegalbodyBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField eclegalperson = 6; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField eclegalperson_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> eclegalpersonBuilder_; - public boolean hasEclegalperson() { - return ((bitField0_ & 0x00000040) == 0x00000040); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEclegalperson() { - if (eclegalpersonBuilder_ == null) { - return eclegalperson_; - } else { - return eclegalpersonBuilder_.getMessage(); - } - } - public Builder setEclegalperson(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (eclegalpersonBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - eclegalperson_ = value; - onChanged(); - } else { - eclegalpersonBuilder_.setMessage(value); - } - bitField0_ |= 0x00000040; - return this; - } - public Builder setEclegalperson( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (eclegalpersonBuilder_ == null) { - eclegalperson_ = builderForValue.build(); - onChanged(); - } else { - eclegalpersonBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000040; - return this; - } - public Builder mergeEclegalperson(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (eclegalpersonBuilder_ == null) { - if (((bitField0_ & 0x00000040) == 0x00000040) && - eclegalperson_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - eclegalperson_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(eclegalperson_).mergeFrom(value).buildPartial(); - } else { - eclegalperson_ = value; - } - onChanged(); - } else { - eclegalpersonBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000040; - return this; - } - public Builder clearEclegalperson() { - if (eclegalpersonBuilder_ == null) { - eclegalperson_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - eclegalpersonBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000040); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getEclegalpersonBuilder() { - bitField0_ |= 0x00000040; - onChanged(); - return getEclegalpersonFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEclegalpersonOrBuilder() { - if (eclegalpersonBuilder_ != null) { - return eclegalpersonBuilder_.getMessageOrBuilder(); - } else { - return eclegalperson_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getEclegalpersonFieldBuilder() { - if (eclegalpersonBuilder_ == null) { - eclegalpersonBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - eclegalperson_, - getParentForChildren(), - isClean()); - eclegalperson_ = null; - } - return eclegalpersonBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField ecnonprofit = 7; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField ecnonprofit_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> ecnonprofitBuilder_; - public boolean hasEcnonprofit() { - return ((bitField0_ & 0x00000080) == 0x00000080); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcnonprofit() { - if (ecnonprofitBuilder_ == null) { - return ecnonprofit_; - } else { - return ecnonprofitBuilder_.getMessage(); - } - } - public Builder setEcnonprofit(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (ecnonprofitBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ecnonprofit_ = value; - onChanged(); - } else { - ecnonprofitBuilder_.setMessage(value); - } - bitField0_ |= 0x00000080; - return this; - } - public Builder setEcnonprofit( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (ecnonprofitBuilder_ == null) { - ecnonprofit_ = builderForValue.build(); - onChanged(); - } else { - ecnonprofitBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000080; - return this; - } - public Builder mergeEcnonprofit(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (ecnonprofitBuilder_ == null) { - if (((bitField0_ & 0x00000080) == 0x00000080) && - ecnonprofit_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - ecnonprofit_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(ecnonprofit_).mergeFrom(value).buildPartial(); - } else { - ecnonprofit_ = value; - } - onChanged(); - } else { - ecnonprofitBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000080; - return this; - } - public Builder clearEcnonprofit() { - if (ecnonprofitBuilder_ == null) { - ecnonprofit_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - ecnonprofitBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000080); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getEcnonprofitBuilder() { - bitField0_ |= 0x00000080; - onChanged(); - return getEcnonprofitFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcnonprofitOrBuilder() { - if (ecnonprofitBuilder_ != null) { - return ecnonprofitBuilder_.getMessageOrBuilder(); - } else { - return ecnonprofit_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getEcnonprofitFieldBuilder() { - if (ecnonprofitBuilder_ == null) { - ecnonprofitBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - ecnonprofit_, - getParentForChildren(), - isClean()); - ecnonprofit_ = null; - } - return ecnonprofitBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField ecresearchorganization = 8; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField ecresearchorganization_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> ecresearchorganizationBuilder_; - public boolean hasEcresearchorganization() { - return ((bitField0_ & 0x00000100) == 0x00000100); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcresearchorganization() { - if (ecresearchorganizationBuilder_ == null) { - return ecresearchorganization_; - } else { - return ecresearchorganizationBuilder_.getMessage(); - } - } - public Builder setEcresearchorganization(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (ecresearchorganizationBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ecresearchorganization_ = value; - onChanged(); - } else { - ecresearchorganizationBuilder_.setMessage(value); - } - bitField0_ |= 0x00000100; - return this; - } - public Builder setEcresearchorganization( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (ecresearchorganizationBuilder_ == null) { - ecresearchorganization_ = builderForValue.build(); - onChanged(); - } else { - ecresearchorganizationBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000100; - return this; - } - public Builder mergeEcresearchorganization(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (ecresearchorganizationBuilder_ == null) { - if (((bitField0_ & 0x00000100) == 0x00000100) && - ecresearchorganization_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - ecresearchorganization_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(ecresearchorganization_).mergeFrom(value).buildPartial(); - } else { - ecresearchorganization_ = value; - } - onChanged(); - } else { - ecresearchorganizationBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000100; - return this; - } - public Builder clearEcresearchorganization() { - if (ecresearchorganizationBuilder_ == null) { - ecresearchorganization_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - ecresearchorganizationBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000100); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getEcresearchorganizationBuilder() { - bitField0_ |= 0x00000100; - onChanged(); - return getEcresearchorganizationFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcresearchorganizationOrBuilder() { - if (ecresearchorganizationBuilder_ != null) { - return ecresearchorganizationBuilder_.getMessageOrBuilder(); - } else { - return ecresearchorganization_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getEcresearchorganizationFieldBuilder() { - if (ecresearchorganizationBuilder_ == null) { - ecresearchorganizationBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - ecresearchorganization_, - getParentForChildren(), - isClean()); - ecresearchorganization_ = null; - } - return ecresearchorganizationBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField echighereducation = 9; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField echighereducation_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> echighereducationBuilder_; - public boolean hasEchighereducation() { - return ((bitField0_ & 0x00000200) == 0x00000200); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEchighereducation() { - if (echighereducationBuilder_ == null) { - return echighereducation_; - } else { - return echighereducationBuilder_.getMessage(); - } - } - public Builder setEchighereducation(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (echighereducationBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - echighereducation_ = value; - onChanged(); - } else { - echighereducationBuilder_.setMessage(value); - } - bitField0_ |= 0x00000200; - return this; - } - public Builder setEchighereducation( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (echighereducationBuilder_ == null) { - echighereducation_ = builderForValue.build(); - onChanged(); - } else { - echighereducationBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000200; - return this; - } - public Builder mergeEchighereducation(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (echighereducationBuilder_ == null) { - if (((bitField0_ & 0x00000200) == 0x00000200) && - echighereducation_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - echighereducation_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(echighereducation_).mergeFrom(value).buildPartial(); - } else { - echighereducation_ = value; - } - onChanged(); - } else { - echighereducationBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000200; - return this; - } - public Builder clearEchighereducation() { - if (echighereducationBuilder_ == null) { - echighereducation_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - echighereducationBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000200); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getEchighereducationBuilder() { - bitField0_ |= 0x00000200; - onChanged(); - return getEchighereducationFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEchighereducationOrBuilder() { - if (echighereducationBuilder_ != null) { - return echighereducationBuilder_.getMessageOrBuilder(); - } else { - return echighereducation_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getEchighereducationFieldBuilder() { - if (echighereducationBuilder_ == null) { - echighereducationBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - echighereducation_, - getParentForChildren(), - isClean()); - echighereducation_ = null; - } - return echighereducationBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField ecinternationalorganizationeurinterests = 10; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField ecinternationalorganizationeurinterests_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> ecinternationalorganizationeurinterestsBuilder_; - public boolean hasEcinternationalorganizationeurinterests() { - return ((bitField0_ & 0x00000400) == 0x00000400); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcinternationalorganizationeurinterests() { - if (ecinternationalorganizationeurinterestsBuilder_ == null) { - return ecinternationalorganizationeurinterests_; - } else { - return ecinternationalorganizationeurinterestsBuilder_.getMessage(); - } - } - public Builder setEcinternationalorganizationeurinterests(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (ecinternationalorganizationeurinterestsBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ecinternationalorganizationeurinterests_ = value; - onChanged(); - } else { - ecinternationalorganizationeurinterestsBuilder_.setMessage(value); - } - bitField0_ |= 0x00000400; - return this; - } - public Builder setEcinternationalorganizationeurinterests( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (ecinternationalorganizationeurinterestsBuilder_ == null) { - ecinternationalorganizationeurinterests_ = builderForValue.build(); - onChanged(); - } else { - ecinternationalorganizationeurinterestsBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000400; - return this; - } - public Builder mergeEcinternationalorganizationeurinterests(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (ecinternationalorganizationeurinterestsBuilder_ == null) { - if (((bitField0_ & 0x00000400) == 0x00000400) && - ecinternationalorganizationeurinterests_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - ecinternationalorganizationeurinterests_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(ecinternationalorganizationeurinterests_).mergeFrom(value).buildPartial(); - } else { - ecinternationalorganizationeurinterests_ = value; - } - onChanged(); - } else { - ecinternationalorganizationeurinterestsBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000400; - return this; - } - public Builder clearEcinternationalorganizationeurinterests() { - if (ecinternationalorganizationeurinterestsBuilder_ == null) { - ecinternationalorganizationeurinterests_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - ecinternationalorganizationeurinterestsBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000400); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getEcinternationalorganizationeurinterestsBuilder() { - bitField0_ |= 0x00000400; - onChanged(); - return getEcinternationalorganizationeurinterestsFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcinternationalorganizationeurinterestsOrBuilder() { - if (ecinternationalorganizationeurinterestsBuilder_ != null) { - return ecinternationalorganizationeurinterestsBuilder_.getMessageOrBuilder(); - } else { - return ecinternationalorganizationeurinterests_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getEcinternationalorganizationeurinterestsFieldBuilder() { - if (ecinternationalorganizationeurinterestsBuilder_ == null) { - ecinternationalorganizationeurinterestsBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - ecinternationalorganizationeurinterests_, - getParentForChildren(), - isClean()); - ecinternationalorganizationeurinterests_ = null; - } - return ecinternationalorganizationeurinterestsBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField ecinternationalorganization = 11; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField ecinternationalorganization_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> ecinternationalorganizationBuilder_; - public boolean hasEcinternationalorganization() { - return ((bitField0_ & 0x00000800) == 0x00000800); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcinternationalorganization() { - if (ecinternationalorganizationBuilder_ == null) { - return ecinternationalorganization_; - } else { - return ecinternationalorganizationBuilder_.getMessage(); - } - } - public Builder setEcinternationalorganization(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (ecinternationalorganizationBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ecinternationalorganization_ = value; - onChanged(); - } else { - ecinternationalorganizationBuilder_.setMessage(value); - } - bitField0_ |= 0x00000800; - return this; - } - public Builder setEcinternationalorganization( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (ecinternationalorganizationBuilder_ == null) { - ecinternationalorganization_ = builderForValue.build(); - onChanged(); - } else { - ecinternationalorganizationBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000800; - return this; - } - public Builder mergeEcinternationalorganization(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (ecinternationalorganizationBuilder_ == null) { - if (((bitField0_ & 0x00000800) == 0x00000800) && - ecinternationalorganization_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - ecinternationalorganization_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(ecinternationalorganization_).mergeFrom(value).buildPartial(); - } else { - ecinternationalorganization_ = value; - } - onChanged(); - } else { - ecinternationalorganizationBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000800; - return this; - } - public Builder clearEcinternationalorganization() { - if (ecinternationalorganizationBuilder_ == null) { - ecinternationalorganization_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - ecinternationalorganizationBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000800); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getEcinternationalorganizationBuilder() { - bitField0_ |= 0x00000800; - onChanged(); - return getEcinternationalorganizationFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcinternationalorganizationOrBuilder() { - if (ecinternationalorganizationBuilder_ != null) { - return ecinternationalorganizationBuilder_.getMessageOrBuilder(); - } else { - return ecinternationalorganization_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getEcinternationalorganizationFieldBuilder() { - if (ecinternationalorganizationBuilder_ == null) { - ecinternationalorganizationBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - ecinternationalorganization_, - getParentForChildren(), - isClean()); - ecinternationalorganization_ = null; - } - return ecinternationalorganizationBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField ecenterprise = 12; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField ecenterprise_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> ecenterpriseBuilder_; - public boolean hasEcenterprise() { - return ((bitField0_ & 0x00001000) == 0x00001000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcenterprise() { - if (ecenterpriseBuilder_ == null) { - return ecenterprise_; - } else { - return ecenterpriseBuilder_.getMessage(); - } - } - public Builder setEcenterprise(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (ecenterpriseBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ecenterprise_ = value; - onChanged(); - } else { - ecenterpriseBuilder_.setMessage(value); - } - bitField0_ |= 0x00001000; - return this; - } - public Builder setEcenterprise( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (ecenterpriseBuilder_ == null) { - ecenterprise_ = builderForValue.build(); - onChanged(); - } else { - ecenterpriseBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00001000; - return this; - } - public Builder mergeEcenterprise(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (ecenterpriseBuilder_ == null) { - if (((bitField0_ & 0x00001000) == 0x00001000) && - ecenterprise_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - ecenterprise_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(ecenterprise_).mergeFrom(value).buildPartial(); - } else { - ecenterprise_ = value; - } - onChanged(); - } else { - ecenterpriseBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00001000; - return this; - } - public Builder clearEcenterprise() { - if (ecenterpriseBuilder_ == null) { - ecenterprise_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - ecenterpriseBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00001000); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getEcenterpriseBuilder() { - bitField0_ |= 0x00001000; - onChanged(); - return getEcenterpriseFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcenterpriseOrBuilder() { - if (ecenterpriseBuilder_ != null) { - return ecenterpriseBuilder_.getMessageOrBuilder(); - } else { - return ecenterprise_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getEcenterpriseFieldBuilder() { - if (ecenterpriseBuilder_ == null) { - ecenterpriseBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - ecenterprise_, - getParentForChildren(), - isClean()); - ecenterprise_ = null; - } - return ecenterpriseBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField ecsmevalidated = 13; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField ecsmevalidated_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> ecsmevalidatedBuilder_; - public boolean hasEcsmevalidated() { - return ((bitField0_ & 0x00002000) == 0x00002000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcsmevalidated() { - if (ecsmevalidatedBuilder_ == null) { - return ecsmevalidated_; - } else { - return ecsmevalidatedBuilder_.getMessage(); - } - } - public Builder setEcsmevalidated(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (ecsmevalidatedBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ecsmevalidated_ = value; - onChanged(); - } else { - ecsmevalidatedBuilder_.setMessage(value); - } - bitField0_ |= 0x00002000; - return this; - } - public Builder setEcsmevalidated( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (ecsmevalidatedBuilder_ == null) { - ecsmevalidated_ = builderForValue.build(); - onChanged(); - } else { - ecsmevalidatedBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00002000; - return this; - } - public Builder mergeEcsmevalidated(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (ecsmevalidatedBuilder_ == null) { - if (((bitField0_ & 0x00002000) == 0x00002000) && - ecsmevalidated_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - ecsmevalidated_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(ecsmevalidated_).mergeFrom(value).buildPartial(); - } else { - ecsmevalidated_ = value; - } - onChanged(); - } else { - ecsmevalidatedBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00002000; - return this; - } - public Builder clearEcsmevalidated() { - if (ecsmevalidatedBuilder_ == null) { - ecsmevalidated_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - ecsmevalidatedBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00002000); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getEcsmevalidatedBuilder() { - bitField0_ |= 0x00002000; - onChanged(); - return getEcsmevalidatedFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcsmevalidatedOrBuilder() { - if (ecsmevalidatedBuilder_ != null) { - return ecsmevalidatedBuilder_.getMessageOrBuilder(); - } else { - return ecsmevalidated_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getEcsmevalidatedFieldBuilder() { - if (ecsmevalidatedBuilder_ == null) { - ecsmevalidatedBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - ecsmevalidated_, - getParentForChildren(), - isClean()); - ecsmevalidated_ = null; - } - return ecsmevalidatedBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField ecnutscode = 14; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField ecnutscode_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> ecnutscodeBuilder_; - public boolean hasEcnutscode() { - return ((bitField0_ & 0x00004000) == 0x00004000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcnutscode() { - if (ecnutscodeBuilder_ == null) { - return ecnutscode_; - } else { - return ecnutscodeBuilder_.getMessage(); - } - } - public Builder setEcnutscode(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (ecnutscodeBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ecnutscode_ = value; - onChanged(); - } else { - ecnutscodeBuilder_.setMessage(value); - } - bitField0_ |= 0x00004000; - return this; - } - public Builder setEcnutscode( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (ecnutscodeBuilder_ == null) { - ecnutscode_ = builderForValue.build(); - onChanged(); - } else { - ecnutscodeBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00004000; - return this; - } - public Builder mergeEcnutscode(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (ecnutscodeBuilder_ == null) { - if (((bitField0_ & 0x00004000) == 0x00004000) && - ecnutscode_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - ecnutscode_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(ecnutscode_).mergeFrom(value).buildPartial(); - } else { - ecnutscode_ = value; - } - onChanged(); - } else { - ecnutscodeBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00004000; - return this; - } - public Builder clearEcnutscode() { - if (ecnutscodeBuilder_ == null) { - ecnutscode_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - ecnutscodeBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00004000); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getEcnutscodeBuilder() { - bitField0_ |= 0x00004000; - onChanged(); - return getEcnutscodeFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcnutscodeOrBuilder() { - if (ecnutscodeBuilder_ != null) { - return ecnutscodeBuilder_.getMessageOrBuilder(); - } else { - return ecnutscode_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getEcnutscodeFieldBuilder() { - if (ecnutscodeBuilder_ == null) { - ecnutscodeBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - ecnutscode_, - getParentForChildren(), - isClean()); - ecnutscode_ = null; - } - return ecnutscodeBuilder_; - } - - // optional .eu.dnetlib.data.proto.Qualifier country = 16; - private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier country_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> countryBuilder_; - public boolean hasCountry() { - return ((bitField0_ & 0x00008000) == 0x00008000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getCountry() { - if (countryBuilder_ == null) { - return country_; - } else { - return countryBuilder_.getMessage(); - } - } - public Builder setCountry(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { - if (countryBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - country_ = value; - onChanged(); - } else { - countryBuilder_.setMessage(value); - } - bitField0_ |= 0x00008000; - return this; - } - public Builder setCountry( - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder builderForValue) { - if (countryBuilder_ == null) { - country_ = builderForValue.build(); - onChanged(); - } else { - countryBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00008000; - return this; - } - public Builder mergeCountry(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { - if (countryBuilder_ == null) { - if (((bitField0_ & 0x00008000) == 0x00008000) && - country_ != eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance()) { - country_ = - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(country_).mergeFrom(value).buildPartial(); - } else { - country_ = value; - } - onChanged(); - } else { - countryBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00008000; - return this; - } - public Builder clearCountry() { - if (countryBuilder_ == null) { - country_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - onChanged(); - } else { - countryBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00008000); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder getCountryBuilder() { - bitField0_ |= 0x00008000; - onChanged(); - return getCountryFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getCountryOrBuilder() { - if (countryBuilder_ != null) { - return countryBuilder_.getMessageOrBuilder(); - } else { - return country_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> - getCountryFieldBuilder() { - if (countryBuilder_ == null) { - countryBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder>( - country_, - getParentForChildren(), - isClean()); - country_ = null; - } - return countryBuilder_; - } - - // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.Organization.Metadata) - } - - static { - defaultInstance = new Metadata(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.Organization.Metadata) - } - - private int bitField0_; - // optional .eu.dnetlib.data.proto.Organization.Metadata metadata = 2; - public static final int METADATA_FIELD_NUMBER = 2; - private eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata metadata_; - public boolean hasMetadata() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata getMetadata() { - return metadata_; - } - public eu.dnetlib.data.proto.OrganizationProtos.Organization.MetadataOrBuilder getMetadataOrBuilder() { - return metadata_; - } - - private void initFields() { - metadata_ = eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata.getDefaultInstance(); - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - if (hasMetadata()) { - if (!getMetadata().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeMessage(2, metadata_); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(2, metadata_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static eu.dnetlib.data.proto.OrganizationProtos.Organization parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.OrganizationProtos.Organization parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.OrganizationProtos.Organization parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.OrganizationProtos.Organization parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.OrganizationProtos.Organization parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.OrganizationProtos.Organization parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.OrganizationProtos.Organization parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.OrganizationProtos.Organization parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.OrganizationProtos.Organization parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.OrganizationProtos.Organization parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(eu.dnetlib.data.proto.OrganizationProtos.Organization prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder - implements eu.dnetlib.data.proto.OrganizationProtos.OrganizationOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.OrganizationProtos.internal_static_eu_dnetlib_data_proto_Organization_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.OrganizationProtos.internal_static_eu_dnetlib_data_proto_Organization_fieldAccessorTable; - } - - // Construct using eu.dnetlib.data.proto.OrganizationProtos.Organization.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - getMetadataFieldBuilder(); - } - } - private static Builder create() { - return new Builder(); - } - - public Builder clear() { - super.clear(); - if (metadataBuilder_ == null) { - metadata_ = eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata.getDefaultInstance(); - } else { - metadataBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return eu.dnetlib.data.proto.OrganizationProtos.Organization.getDescriptor(); - } - - public eu.dnetlib.data.proto.OrganizationProtos.Organization getDefaultInstanceForType() { - return eu.dnetlib.data.proto.OrganizationProtos.Organization.getDefaultInstance(); - } - - public eu.dnetlib.data.proto.OrganizationProtos.Organization build() { - eu.dnetlib.data.proto.OrganizationProtos.Organization result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - private eu.dnetlib.data.proto.OrganizationProtos.Organization buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - eu.dnetlib.data.proto.OrganizationProtos.Organization result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return result; - } - - public eu.dnetlib.data.proto.OrganizationProtos.Organization buildPartial() { - eu.dnetlib.data.proto.OrganizationProtos.Organization result = new eu.dnetlib.data.proto.OrganizationProtos.Organization(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - if (metadataBuilder_ == null) { - result.metadata_ = metadata_; - } else { - result.metadata_ = metadataBuilder_.build(); - } - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof eu.dnetlib.data.proto.OrganizationProtos.Organization) { - return mergeFrom((eu.dnetlib.data.proto.OrganizationProtos.Organization)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(eu.dnetlib.data.proto.OrganizationProtos.Organization other) { - if (other == eu.dnetlib.data.proto.OrganizationProtos.Organization.getDefaultInstance()) return this; - if (other.hasMetadata()) { - mergeMetadata(other.getMetadata()); - } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - - public final boolean isInitialized() { - if (hasMetadata()) { - if (!getMetadata().isInitialized()) { - - return false; - } - } - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - } - break; - } - case 18: { - eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata.Builder subBuilder = eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata.newBuilder(); - if (hasMetadata()) { - subBuilder.mergeFrom(getMetadata()); - } - input.readMessage(subBuilder, extensionRegistry); - setMetadata(subBuilder.buildPartial()); - break; - } - } - } - } - - private int bitField0_; - - // optional .eu.dnetlib.data.proto.Organization.Metadata metadata = 2; - private eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata metadata_ = eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata, eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata.Builder, eu.dnetlib.data.proto.OrganizationProtos.Organization.MetadataOrBuilder> metadataBuilder_; - public boolean hasMetadata() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata getMetadata() { - if (metadataBuilder_ == null) { - return metadata_; - } else { - return metadataBuilder_.getMessage(); - } - } - public Builder setMetadata(eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata value) { - if (metadataBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - metadata_ = value; - onChanged(); - } else { - metadataBuilder_.setMessage(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder setMetadata( - eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata.Builder builderForValue) { - if (metadataBuilder_ == null) { - metadata_ = builderForValue.build(); - onChanged(); - } else { - metadataBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder mergeMetadata(eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata value) { - if (metadataBuilder_ == null) { - if (((bitField0_ & 0x00000001) == 0x00000001) && - metadata_ != eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata.getDefaultInstance()) { - metadata_ = - eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata.newBuilder(metadata_).mergeFrom(value).buildPartial(); - } else { - metadata_ = value; - } - onChanged(); - } else { - metadataBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder clearMetadata() { - if (metadataBuilder_ == null) { - metadata_ = eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata.getDefaultInstance(); - onChanged(); - } else { - metadataBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - public eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata.Builder getMetadataBuilder() { - bitField0_ |= 0x00000001; - onChanged(); - return getMetadataFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.OrganizationProtos.Organization.MetadataOrBuilder getMetadataOrBuilder() { - if (metadataBuilder_ != null) { - return metadataBuilder_.getMessageOrBuilder(); - } else { - return metadata_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata, eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata.Builder, eu.dnetlib.data.proto.OrganizationProtos.Organization.MetadataOrBuilder> - getMetadataFieldBuilder() { - if (metadataBuilder_ == null) { - metadataBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata, eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata.Builder, eu.dnetlib.data.proto.OrganizationProtos.Organization.MetadataOrBuilder>( - metadata_, - getParentForChildren(), - isClean()); - metadata_ = null; - } - return metadataBuilder_; - } - - // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.Organization) - } - - static { - defaultInstance = new Organization(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.Organization) - } - - private static com.google.protobuf.Descriptors.Descriptor - internal_static_eu_dnetlib_data_proto_Organization_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_eu_dnetlib_data_proto_Organization_fieldAccessorTable; - private static com.google.protobuf.Descriptors.Descriptor - internal_static_eu_dnetlib_data_proto_Organization_Metadata_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_eu_dnetlib_data_proto_Organization_Metadata_fieldAccessorTable; - - public static com.google.protobuf.Descriptors.FileDescriptor - getDescriptor() { - return descriptor; - } - private static com.google.protobuf.Descriptors.FileDescriptor - descriptor; - static { - java.lang.String[] descriptorData = { - "\n\022Organization.proto\022\025eu.dnetlib.data.pr" + - "oto\032\017FieldType.proto\"\250\010\n\014Organization\022>\n" + - "\010metadata\030\002 \001(\0132,.eu.dnetlib.data.proto." + - "Organization.Metadata\032\327\007\n\010Metadata\022:\n\016le" + - "galshortname\030\001 \001(\0132\".eu.dnetlib.data.pro" + - "to.StringField\0225\n\tlegalname\030\002 \001(\0132\".eu.d" + - "netlib.data.proto.StringField\022<\n\020alterna" + - "tiveNames\030\021 \003(\0132\".eu.dnetlib.data.proto." + - "StringField\0226\n\nwebsiteurl\030\003 \001(\0132\".eu.dne" + - "tlib.data.proto.StringField\0223\n\007logourl\030\004", - " \001(\0132\".eu.dnetlib.data.proto.StringField" + - "\0227\n\013eclegalbody\030\005 \001(\0132\".eu.dnetlib.data." + - "proto.StringField\0229\n\reclegalperson\030\006 \001(\013" + - "2\".eu.dnetlib.data.proto.StringField\0227\n\013" + - "ecnonprofit\030\007 \001(\0132\".eu.dnetlib.data.prot" + - "o.StringField\022B\n\026ecresearchorganization\030" + - "\010 \001(\0132\".eu.dnetlib.data.proto.StringFiel" + - "d\022=\n\021echighereducation\030\t \001(\0132\".eu.dnetli" + - "b.data.proto.StringField\022S\n\'ecinternatio" + - "nalorganizationeurinterests\030\n \001(\0132\".eu.d", - "netlib.data.proto.StringField\022G\n\033ecinter" + - "nationalorganization\030\013 \001(\0132\".eu.dnetlib." + - "data.proto.StringField\0228\n\014ecenterprise\030\014" + - " \001(\0132\".eu.dnetlib.data.proto.StringField" + - "\022:\n\016ecsmevalidated\030\r \001(\0132\".eu.dnetlib.da" + - "ta.proto.StringField\0226\n\necnutscode\030\016 \001(\013" + - "2\".eu.dnetlib.data.proto.StringField\0221\n\007" + - "country\030\020 \001(\0132 .eu.dnetlib.data.proto.Qu" + - "alifierB+\n\025eu.dnetlib.data.protoB\022Organi" + - "zationProtos" - }; - com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = - new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { - public com.google.protobuf.ExtensionRegistry assignDescriptors( - com.google.protobuf.Descriptors.FileDescriptor root) { - descriptor = root; - internal_static_eu_dnetlib_data_proto_Organization_descriptor = - getDescriptor().getMessageTypes().get(0); - internal_static_eu_dnetlib_data_proto_Organization_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_eu_dnetlib_data_proto_Organization_descriptor, - new java.lang.String[] { "Metadata", }, - eu.dnetlib.data.proto.OrganizationProtos.Organization.class, - eu.dnetlib.data.proto.OrganizationProtos.Organization.Builder.class); - internal_static_eu_dnetlib_data_proto_Organization_Metadata_descriptor = - internal_static_eu_dnetlib_data_proto_Organization_descriptor.getNestedTypes().get(0); - internal_static_eu_dnetlib_data_proto_Organization_Metadata_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_eu_dnetlib_data_proto_Organization_Metadata_descriptor, - new java.lang.String[] { "Legalshortname", "Legalname", "AlternativeNames", "Websiteurl", "Logourl", "Eclegalbody", "Eclegalperson", "Ecnonprofit", "Ecresearchorganization", "Echighereducation", "Ecinternationalorganizationeurinterests", "Ecinternationalorganization", "Ecenterprise", "Ecsmevalidated", "Ecnutscode", "Country", }, - eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata.class, - eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata.Builder.class); - return null; - } - }; - com.google.protobuf.Descriptors.FileDescriptor - .internalBuildGeneratedFileFrom(descriptorData, - new com.google.protobuf.Descriptors.FileDescriptor[] { - eu.dnetlib.data.proto.FieldTypeProtos.getDescriptor(), - }, assigner); - } - - // @@protoc_insertion_point(outer_class_scope) -} diff --git a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/PersonProtos.java b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/PersonProtos.java deleted file mode 100644 index 2c997d81b..000000000 --- a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/PersonProtos.java +++ /dev/null @@ -1,1752 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: Person.proto - -package eu.dnetlib.data.proto; - -public final class PersonProtos { - private PersonProtos() {} - public static void registerAllExtensions( - com.google.protobuf.ExtensionRegistry registry) { - } - public interface PersonOrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // optional .eu.dnetlib.data.proto.Person.Metadata metadata = 2; - boolean hasMetadata(); - eu.dnetlib.data.proto.PersonProtos.Person.Metadata getMetadata(); - eu.dnetlib.data.proto.PersonProtos.Person.MetadataOrBuilder getMetadataOrBuilder(); - } - public static final class Person extends - com.google.protobuf.GeneratedMessage - implements PersonOrBuilder { - // Use Person.newBuilder() to construct. - private Person(Builder builder) { - super(builder); - } - private Person(boolean noInit) {} - - private static final Person defaultInstance; - public static Person getDefaultInstance() { - return defaultInstance; - } - - public Person getDefaultInstanceForType() { - return defaultInstance; - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.PersonProtos.internal_static_eu_dnetlib_data_proto_Person_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.PersonProtos.internal_static_eu_dnetlib_data_proto_Person_fieldAccessorTable; - } - - public interface MetadataOrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // required string fullname = 1; - boolean hasFullname(); - String getFullname(); - - // optional string firstname = 2; - boolean hasFirstname(); - String getFirstname(); - - // optional string lastname = 3; - boolean hasLastname(); - String getLastname(); - - // required string pubID = 4; - boolean hasPubID(); - String getPubID(); - - // optional string pubDOI = 5; - boolean hasPubDOI(); - String getPubDOI(); - - // optional string orcid = 6; - boolean hasOrcid(); - String getOrcid(); - - // required int32 rank = 7; - boolean hasRank(); - int getRank(); - - // repeated string coauthors = 8; - java.util.List getCoauthorsList(); - int getCoauthorsCount(); - String getCoauthors(int index); - - // repeated double topics = 9; - java.util.List getTopicsList(); - int getTopicsCount(); - double getTopics(int index); - - // required string area = 10; - boolean hasArea(); - String getArea(); - } - public static final class Metadata extends - com.google.protobuf.GeneratedMessage - implements MetadataOrBuilder { - // Use Metadata.newBuilder() to construct. - private Metadata(Builder builder) { - super(builder); - } - private Metadata(boolean noInit) {} - - private static final Metadata defaultInstance; - public static Metadata getDefaultInstance() { - return defaultInstance; - } - - public Metadata getDefaultInstanceForType() { - return defaultInstance; - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.PersonProtos.internal_static_eu_dnetlib_data_proto_Person_Metadata_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.PersonProtos.internal_static_eu_dnetlib_data_proto_Person_Metadata_fieldAccessorTable; - } - - private int bitField0_; - // required string fullname = 1; - public static final int FULLNAME_FIELD_NUMBER = 1; - private java.lang.Object fullname_; - public boolean hasFullname() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public String getFullname() { - java.lang.Object ref = fullname_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - fullname_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getFullnameBytes() { - java.lang.Object ref = fullname_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - fullname_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // optional string firstname = 2; - public static final int FIRSTNAME_FIELD_NUMBER = 2; - private java.lang.Object firstname_; - public boolean hasFirstname() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public String getFirstname() { - java.lang.Object ref = firstname_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - firstname_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getFirstnameBytes() { - java.lang.Object ref = firstname_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - firstname_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // optional string lastname = 3; - public static final int LASTNAME_FIELD_NUMBER = 3; - private java.lang.Object lastname_; - public boolean hasLastname() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - public String getLastname() { - java.lang.Object ref = lastname_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - lastname_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getLastnameBytes() { - java.lang.Object ref = lastname_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - lastname_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // required string pubID = 4; - public static final int PUBID_FIELD_NUMBER = 4; - private java.lang.Object pubID_; - public boolean hasPubID() { - return ((bitField0_ & 0x00000008) == 0x00000008); - } - public String getPubID() { - java.lang.Object ref = pubID_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - pubID_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getPubIDBytes() { - java.lang.Object ref = pubID_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - pubID_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // optional string pubDOI = 5; - public static final int PUBDOI_FIELD_NUMBER = 5; - private java.lang.Object pubDOI_; - public boolean hasPubDOI() { - return ((bitField0_ & 0x00000010) == 0x00000010); - } - public String getPubDOI() { - java.lang.Object ref = pubDOI_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - pubDOI_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getPubDOIBytes() { - java.lang.Object ref = pubDOI_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - pubDOI_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // optional string orcid = 6; - public static final int ORCID_FIELD_NUMBER = 6; - private java.lang.Object orcid_; - public boolean hasOrcid() { - return ((bitField0_ & 0x00000020) == 0x00000020); - } - public String getOrcid() { - java.lang.Object ref = orcid_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - orcid_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getOrcidBytes() { - java.lang.Object ref = orcid_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - orcid_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // required int32 rank = 7; - public static final int RANK_FIELD_NUMBER = 7; - private int rank_; - public boolean hasRank() { - return ((bitField0_ & 0x00000040) == 0x00000040); - } - public int getRank() { - return rank_; - } - - // repeated string coauthors = 8; - public static final int COAUTHORS_FIELD_NUMBER = 8; - private com.google.protobuf.LazyStringList coauthors_; - public java.util.List - getCoauthorsList() { - return coauthors_; - } - public int getCoauthorsCount() { - return coauthors_.size(); - } - public String getCoauthors(int index) { - return coauthors_.get(index); - } - - // repeated double topics = 9; - public static final int TOPICS_FIELD_NUMBER = 9; - private java.util.List topics_; - public java.util.List - getTopicsList() { - return topics_; - } - public int getTopicsCount() { - return topics_.size(); - } - public double getTopics(int index) { - return topics_.get(index); - } - - // required string area = 10; - public static final int AREA_FIELD_NUMBER = 10; - private java.lang.Object area_; - public boolean hasArea() { - return ((bitField0_ & 0x00000080) == 0x00000080); - } - public String getArea() { - java.lang.Object ref = area_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - area_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getAreaBytes() { - java.lang.Object ref = area_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - area_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - private void initFields() { - fullname_ = ""; - firstname_ = ""; - lastname_ = ""; - pubID_ = ""; - pubDOI_ = ""; - orcid_ = ""; - rank_ = 0; - coauthors_ = com.google.protobuf.LazyStringArrayList.EMPTY; - topics_ = java.util.Collections.emptyList();; - area_ = ""; - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - if (!hasFullname()) { - memoizedIsInitialized = 0; - return false; - } - if (!hasPubID()) { - memoizedIsInitialized = 0; - return false; - } - if (!hasRank()) { - memoizedIsInitialized = 0; - return false; - } - if (!hasArea()) { - memoizedIsInitialized = 0; - return false; - } - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeBytes(1, getFullnameBytes()); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - output.writeBytes(2, getFirstnameBytes()); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - output.writeBytes(3, getLastnameBytes()); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - output.writeBytes(4, getPubIDBytes()); - } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - output.writeBytes(5, getPubDOIBytes()); - } - if (((bitField0_ & 0x00000020) == 0x00000020)) { - output.writeBytes(6, getOrcidBytes()); - } - if (((bitField0_ & 0x00000040) == 0x00000040)) { - output.writeInt32(7, rank_); - } - for (int i = 0; i < coauthors_.size(); i++) { - output.writeBytes(8, coauthors_.getByteString(i)); - } - for (int i = 0; i < topics_.size(); i++) { - output.writeDouble(9, topics_.get(i)); - } - if (((bitField0_ & 0x00000080) == 0x00000080)) { - output.writeBytes(10, getAreaBytes()); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(1, getFullnameBytes()); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(2, getFirstnameBytes()); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(3, getLastnameBytes()); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(4, getPubIDBytes()); - } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(5, getPubDOIBytes()); - } - if (((bitField0_ & 0x00000020) == 0x00000020)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(6, getOrcidBytes()); - } - if (((bitField0_ & 0x00000040) == 0x00000040)) { - size += com.google.protobuf.CodedOutputStream - .computeInt32Size(7, rank_); - } - { - int dataSize = 0; - for (int i = 0; i < coauthors_.size(); i++) { - dataSize += com.google.protobuf.CodedOutputStream - .computeBytesSizeNoTag(coauthors_.getByteString(i)); - } - size += dataSize; - size += 1 * getCoauthorsList().size(); - } - { - int dataSize = 0; - dataSize = 8 * getTopicsList().size(); - size += dataSize; - size += 1 * getTopicsList().size(); - } - if (((bitField0_ & 0x00000080) == 0x00000080)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(10, getAreaBytes()); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static eu.dnetlib.data.proto.PersonProtos.Person.Metadata parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.PersonProtos.Person.Metadata parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.PersonProtos.Person.Metadata parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.PersonProtos.Person.Metadata parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.PersonProtos.Person.Metadata parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.PersonProtos.Person.Metadata parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.PersonProtos.Person.Metadata parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.PersonProtos.Person.Metadata parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.PersonProtos.Person.Metadata parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.PersonProtos.Person.Metadata parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(eu.dnetlib.data.proto.PersonProtos.Person.Metadata prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder - implements eu.dnetlib.data.proto.PersonProtos.Person.MetadataOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.PersonProtos.internal_static_eu_dnetlib_data_proto_Person_Metadata_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.PersonProtos.internal_static_eu_dnetlib_data_proto_Person_Metadata_fieldAccessorTable; - } - - // Construct using eu.dnetlib.data.proto.PersonProtos.Person.Metadata.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - } - } - private static Builder create() { - return new Builder(); - } - - public Builder clear() { - super.clear(); - fullname_ = ""; - bitField0_ = (bitField0_ & ~0x00000001); - firstname_ = ""; - bitField0_ = (bitField0_ & ~0x00000002); - lastname_ = ""; - bitField0_ = (bitField0_ & ~0x00000004); - pubID_ = ""; - bitField0_ = (bitField0_ & ~0x00000008); - pubDOI_ = ""; - bitField0_ = (bitField0_ & ~0x00000010); - orcid_ = ""; - bitField0_ = (bitField0_ & ~0x00000020); - rank_ = 0; - bitField0_ = (bitField0_ & ~0x00000040); - coauthors_ = com.google.protobuf.LazyStringArrayList.EMPTY; - bitField0_ = (bitField0_ & ~0x00000080); - topics_ = java.util.Collections.emptyList();; - bitField0_ = (bitField0_ & ~0x00000100); - area_ = ""; - bitField0_ = (bitField0_ & ~0x00000200); - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return eu.dnetlib.data.proto.PersonProtos.Person.Metadata.getDescriptor(); - } - - public eu.dnetlib.data.proto.PersonProtos.Person.Metadata getDefaultInstanceForType() { - return eu.dnetlib.data.proto.PersonProtos.Person.Metadata.getDefaultInstance(); - } - - public eu.dnetlib.data.proto.PersonProtos.Person.Metadata build() { - eu.dnetlib.data.proto.PersonProtos.Person.Metadata result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - private eu.dnetlib.data.proto.PersonProtos.Person.Metadata buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - eu.dnetlib.data.proto.PersonProtos.Person.Metadata result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return result; - } - - public eu.dnetlib.data.proto.PersonProtos.Person.Metadata buildPartial() { - eu.dnetlib.data.proto.PersonProtos.Person.Metadata result = new eu.dnetlib.data.proto.PersonProtos.Person.Metadata(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - result.fullname_ = fullname_; - if (((from_bitField0_ & 0x00000002) == 0x00000002)) { - to_bitField0_ |= 0x00000002; - } - result.firstname_ = firstname_; - if (((from_bitField0_ & 0x00000004) == 0x00000004)) { - to_bitField0_ |= 0x00000004; - } - result.lastname_ = lastname_; - if (((from_bitField0_ & 0x00000008) == 0x00000008)) { - to_bitField0_ |= 0x00000008; - } - result.pubID_ = pubID_; - if (((from_bitField0_ & 0x00000010) == 0x00000010)) { - to_bitField0_ |= 0x00000010; - } - result.pubDOI_ = pubDOI_; - if (((from_bitField0_ & 0x00000020) == 0x00000020)) { - to_bitField0_ |= 0x00000020; - } - result.orcid_ = orcid_; - if (((from_bitField0_ & 0x00000040) == 0x00000040)) { - to_bitField0_ |= 0x00000040; - } - result.rank_ = rank_; - if (((bitField0_ & 0x00000080) == 0x00000080)) { - coauthors_ = new com.google.protobuf.UnmodifiableLazyStringList( - coauthors_); - bitField0_ = (bitField0_ & ~0x00000080); - } - result.coauthors_ = coauthors_; - if (((bitField0_ & 0x00000100) == 0x00000100)) { - topics_ = java.util.Collections.unmodifiableList(topics_); - bitField0_ = (bitField0_ & ~0x00000100); - } - result.topics_ = topics_; - if (((from_bitField0_ & 0x00000200) == 0x00000200)) { - to_bitField0_ |= 0x00000080; - } - result.area_ = area_; - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof eu.dnetlib.data.proto.PersonProtos.Person.Metadata) { - return mergeFrom((eu.dnetlib.data.proto.PersonProtos.Person.Metadata)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(eu.dnetlib.data.proto.PersonProtos.Person.Metadata other) { - if (other == eu.dnetlib.data.proto.PersonProtos.Person.Metadata.getDefaultInstance()) return this; - if (other.hasFullname()) { - setFullname(other.getFullname()); - } - if (other.hasFirstname()) { - setFirstname(other.getFirstname()); - } - if (other.hasLastname()) { - setLastname(other.getLastname()); - } - if (other.hasPubID()) { - setPubID(other.getPubID()); - } - if (other.hasPubDOI()) { - setPubDOI(other.getPubDOI()); - } - if (other.hasOrcid()) { - setOrcid(other.getOrcid()); - } - if (other.hasRank()) { - setRank(other.getRank()); - } - if (!other.coauthors_.isEmpty()) { - if (coauthors_.isEmpty()) { - coauthors_ = other.coauthors_; - bitField0_ = (bitField0_ & ~0x00000080); - } else { - ensureCoauthorsIsMutable(); - coauthors_.addAll(other.coauthors_); - } - onChanged(); - } - if (!other.topics_.isEmpty()) { - if (topics_.isEmpty()) { - topics_ = other.topics_; - bitField0_ = (bitField0_ & ~0x00000100); - } else { - ensureTopicsIsMutable(); - topics_.addAll(other.topics_); - } - onChanged(); - } - if (other.hasArea()) { - setArea(other.getArea()); - } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - - public final boolean isInitialized() { - if (!hasFullname()) { - - return false; - } - if (!hasPubID()) { - - return false; - } - if (!hasRank()) { - - return false; - } - if (!hasArea()) { - - return false; - } - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - } - break; - } - case 10: { - bitField0_ |= 0x00000001; - fullname_ = input.readBytes(); - break; - } - case 18: { - bitField0_ |= 0x00000002; - firstname_ = input.readBytes(); - break; - } - case 26: { - bitField0_ |= 0x00000004; - lastname_ = input.readBytes(); - break; - } - case 34: { - bitField0_ |= 0x00000008; - pubID_ = input.readBytes(); - break; - } - case 42: { - bitField0_ |= 0x00000010; - pubDOI_ = input.readBytes(); - break; - } - case 50: { - bitField0_ |= 0x00000020; - orcid_ = input.readBytes(); - break; - } - case 56: { - bitField0_ |= 0x00000040; - rank_ = input.readInt32(); - break; - } - case 66: { - ensureCoauthorsIsMutable(); - coauthors_.add(input.readBytes()); - break; - } - case 73: { - ensureTopicsIsMutable(); - topics_.add(input.readDouble()); - break; - } - case 74: { - int length = input.readRawVarint32(); - int limit = input.pushLimit(length); - while (input.getBytesUntilLimit() > 0) { - addTopics(input.readDouble()); - } - input.popLimit(limit); - break; - } - case 82: { - bitField0_ |= 0x00000200; - area_ = input.readBytes(); - break; - } - } - } - } - - private int bitField0_; - - // required string fullname = 1; - private java.lang.Object fullname_ = ""; - public boolean hasFullname() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public String getFullname() { - java.lang.Object ref = fullname_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - fullname_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setFullname(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000001; - fullname_ = value; - onChanged(); - return this; - } - public Builder clearFullname() { - bitField0_ = (bitField0_ & ~0x00000001); - fullname_ = getDefaultInstance().getFullname(); - onChanged(); - return this; - } - void setFullname(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000001; - fullname_ = value; - onChanged(); - } - - // optional string firstname = 2; - private java.lang.Object firstname_ = ""; - public boolean hasFirstname() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public String getFirstname() { - java.lang.Object ref = firstname_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - firstname_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setFirstname(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000002; - firstname_ = value; - onChanged(); - return this; - } - public Builder clearFirstname() { - bitField0_ = (bitField0_ & ~0x00000002); - firstname_ = getDefaultInstance().getFirstname(); - onChanged(); - return this; - } - void setFirstname(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000002; - firstname_ = value; - onChanged(); - } - - // optional string lastname = 3; - private java.lang.Object lastname_ = ""; - public boolean hasLastname() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - public String getLastname() { - java.lang.Object ref = lastname_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - lastname_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setLastname(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000004; - lastname_ = value; - onChanged(); - return this; - } - public Builder clearLastname() { - bitField0_ = (bitField0_ & ~0x00000004); - lastname_ = getDefaultInstance().getLastname(); - onChanged(); - return this; - } - void setLastname(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000004; - lastname_ = value; - onChanged(); - } - - // required string pubID = 4; - private java.lang.Object pubID_ = ""; - public boolean hasPubID() { - return ((bitField0_ & 0x00000008) == 0x00000008); - } - public String getPubID() { - java.lang.Object ref = pubID_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - pubID_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setPubID(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000008; - pubID_ = value; - onChanged(); - return this; - } - public Builder clearPubID() { - bitField0_ = (bitField0_ & ~0x00000008); - pubID_ = getDefaultInstance().getPubID(); - onChanged(); - return this; - } - void setPubID(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000008; - pubID_ = value; - onChanged(); - } - - // optional string pubDOI = 5; - private java.lang.Object pubDOI_ = ""; - public boolean hasPubDOI() { - return ((bitField0_ & 0x00000010) == 0x00000010); - } - public String getPubDOI() { - java.lang.Object ref = pubDOI_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - pubDOI_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setPubDOI(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000010; - pubDOI_ = value; - onChanged(); - return this; - } - public Builder clearPubDOI() { - bitField0_ = (bitField0_ & ~0x00000010); - pubDOI_ = getDefaultInstance().getPubDOI(); - onChanged(); - return this; - } - void setPubDOI(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000010; - pubDOI_ = value; - onChanged(); - } - - // optional string orcid = 6; - private java.lang.Object orcid_ = ""; - public boolean hasOrcid() { - return ((bitField0_ & 0x00000020) == 0x00000020); - } - public String getOrcid() { - java.lang.Object ref = orcid_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - orcid_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setOrcid(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000020; - orcid_ = value; - onChanged(); - return this; - } - public Builder clearOrcid() { - bitField0_ = (bitField0_ & ~0x00000020); - orcid_ = getDefaultInstance().getOrcid(); - onChanged(); - return this; - } - void setOrcid(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000020; - orcid_ = value; - onChanged(); - } - - // required int32 rank = 7; - private int rank_ ; - public boolean hasRank() { - return ((bitField0_ & 0x00000040) == 0x00000040); - } - public int getRank() { - return rank_; - } - public Builder setRank(int value) { - bitField0_ |= 0x00000040; - rank_ = value; - onChanged(); - return this; - } - public Builder clearRank() { - bitField0_ = (bitField0_ & ~0x00000040); - rank_ = 0; - onChanged(); - return this; - } - - // repeated string coauthors = 8; - private com.google.protobuf.LazyStringList coauthors_ = com.google.protobuf.LazyStringArrayList.EMPTY; - private void ensureCoauthorsIsMutable() { - if (!((bitField0_ & 0x00000080) == 0x00000080)) { - coauthors_ = new com.google.protobuf.LazyStringArrayList(coauthors_); - bitField0_ |= 0x00000080; - } - } - public java.util.List - getCoauthorsList() { - return java.util.Collections.unmodifiableList(coauthors_); - } - public int getCoauthorsCount() { - return coauthors_.size(); - } - public String getCoauthors(int index) { - return coauthors_.get(index); - } - public Builder setCoauthors( - int index, String value) { - if (value == null) { - throw new NullPointerException(); - } - ensureCoauthorsIsMutable(); - coauthors_.set(index, value); - onChanged(); - return this; - } - public Builder addCoauthors(String value) { - if (value == null) { - throw new NullPointerException(); - } - ensureCoauthorsIsMutable(); - coauthors_.add(value); - onChanged(); - return this; - } - public Builder addAllCoauthors( - java.lang.Iterable values) { - ensureCoauthorsIsMutable(); - super.addAll(values, coauthors_); - onChanged(); - return this; - } - public Builder clearCoauthors() { - coauthors_ = com.google.protobuf.LazyStringArrayList.EMPTY; - bitField0_ = (bitField0_ & ~0x00000080); - onChanged(); - return this; - } - void addCoauthors(com.google.protobuf.ByteString value) { - ensureCoauthorsIsMutable(); - coauthors_.add(value); - onChanged(); - } - - // repeated double topics = 9; - private java.util.List topics_ = java.util.Collections.emptyList();; - private void ensureTopicsIsMutable() { - if (!((bitField0_ & 0x00000100) == 0x00000100)) { - topics_ = new java.util.ArrayList(topics_); - bitField0_ |= 0x00000100; - } - } - public java.util.List - getTopicsList() { - return java.util.Collections.unmodifiableList(topics_); - } - public int getTopicsCount() { - return topics_.size(); - } - public double getTopics(int index) { - return topics_.get(index); - } - public Builder setTopics( - int index, double value) { - ensureTopicsIsMutable(); - topics_.set(index, value); - onChanged(); - return this; - } - public Builder addTopics(double value) { - ensureTopicsIsMutable(); - topics_.add(value); - onChanged(); - return this; - } - public Builder addAllTopics( - java.lang.Iterable values) { - ensureTopicsIsMutable(); - super.addAll(values, topics_); - onChanged(); - return this; - } - public Builder clearTopics() { - topics_ = java.util.Collections.emptyList();; - bitField0_ = (bitField0_ & ~0x00000100); - onChanged(); - return this; - } - - // required string area = 10; - private java.lang.Object area_ = ""; - public boolean hasArea() { - return ((bitField0_ & 0x00000200) == 0x00000200); - } - public String getArea() { - java.lang.Object ref = area_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - area_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setArea(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000200; - area_ = value; - onChanged(); - return this; - } - public Builder clearArea() { - bitField0_ = (bitField0_ & ~0x00000200); - area_ = getDefaultInstance().getArea(); - onChanged(); - return this; - } - void setArea(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000200; - area_ = value; - onChanged(); - } - - // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.Person.Metadata) - } - - static { - defaultInstance = new Metadata(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.Person.Metadata) - } - - private int bitField0_; - // optional .eu.dnetlib.data.proto.Person.Metadata metadata = 2; - public static final int METADATA_FIELD_NUMBER = 2; - private eu.dnetlib.data.proto.PersonProtos.Person.Metadata metadata_; - public boolean hasMetadata() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.PersonProtos.Person.Metadata getMetadata() { - return metadata_; - } - public eu.dnetlib.data.proto.PersonProtos.Person.MetadataOrBuilder getMetadataOrBuilder() { - return metadata_; - } - - private void initFields() { - metadata_ = eu.dnetlib.data.proto.PersonProtos.Person.Metadata.getDefaultInstance(); - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - if (hasMetadata()) { - if (!getMetadata().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeMessage(2, metadata_); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(2, metadata_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static eu.dnetlib.data.proto.PersonProtos.Person parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.PersonProtos.Person parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.PersonProtos.Person parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.PersonProtos.Person parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.PersonProtos.Person parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.PersonProtos.Person parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.PersonProtos.Person parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.PersonProtos.Person parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.PersonProtos.Person parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.PersonProtos.Person parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(eu.dnetlib.data.proto.PersonProtos.Person prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder - implements eu.dnetlib.data.proto.PersonProtos.PersonOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.PersonProtos.internal_static_eu_dnetlib_data_proto_Person_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.PersonProtos.internal_static_eu_dnetlib_data_proto_Person_fieldAccessorTable; - } - - // Construct using eu.dnetlib.data.proto.PersonProtos.Person.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - getMetadataFieldBuilder(); - } - } - private static Builder create() { - return new Builder(); - } - - public Builder clear() { - super.clear(); - if (metadataBuilder_ == null) { - metadata_ = eu.dnetlib.data.proto.PersonProtos.Person.Metadata.getDefaultInstance(); - } else { - metadataBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return eu.dnetlib.data.proto.PersonProtos.Person.getDescriptor(); - } - - public eu.dnetlib.data.proto.PersonProtos.Person getDefaultInstanceForType() { - return eu.dnetlib.data.proto.PersonProtos.Person.getDefaultInstance(); - } - - public eu.dnetlib.data.proto.PersonProtos.Person build() { - eu.dnetlib.data.proto.PersonProtos.Person result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - private eu.dnetlib.data.proto.PersonProtos.Person buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - eu.dnetlib.data.proto.PersonProtos.Person result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return result; - } - - public eu.dnetlib.data.proto.PersonProtos.Person buildPartial() { - eu.dnetlib.data.proto.PersonProtos.Person result = new eu.dnetlib.data.proto.PersonProtos.Person(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - if (metadataBuilder_ == null) { - result.metadata_ = metadata_; - } else { - result.metadata_ = metadataBuilder_.build(); - } - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof eu.dnetlib.data.proto.PersonProtos.Person) { - return mergeFrom((eu.dnetlib.data.proto.PersonProtos.Person)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(eu.dnetlib.data.proto.PersonProtos.Person other) { - if (other == eu.dnetlib.data.proto.PersonProtos.Person.getDefaultInstance()) return this; - if (other.hasMetadata()) { - mergeMetadata(other.getMetadata()); - } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - - public final boolean isInitialized() { - if (hasMetadata()) { - if (!getMetadata().isInitialized()) { - - return false; - } - } - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - } - break; - } - case 18: { - eu.dnetlib.data.proto.PersonProtos.Person.Metadata.Builder subBuilder = eu.dnetlib.data.proto.PersonProtos.Person.Metadata.newBuilder(); - if (hasMetadata()) { - subBuilder.mergeFrom(getMetadata()); - } - input.readMessage(subBuilder, extensionRegistry); - setMetadata(subBuilder.buildPartial()); - break; - } - } - } - } - - private int bitField0_; - - // optional .eu.dnetlib.data.proto.Person.Metadata metadata = 2; - private eu.dnetlib.data.proto.PersonProtos.Person.Metadata metadata_ = eu.dnetlib.data.proto.PersonProtos.Person.Metadata.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.PersonProtos.Person.Metadata, eu.dnetlib.data.proto.PersonProtos.Person.Metadata.Builder, eu.dnetlib.data.proto.PersonProtos.Person.MetadataOrBuilder> metadataBuilder_; - public boolean hasMetadata() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.PersonProtos.Person.Metadata getMetadata() { - if (metadataBuilder_ == null) { - return metadata_; - } else { - return metadataBuilder_.getMessage(); - } - } - public Builder setMetadata(eu.dnetlib.data.proto.PersonProtos.Person.Metadata value) { - if (metadataBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - metadata_ = value; - onChanged(); - } else { - metadataBuilder_.setMessage(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder setMetadata( - eu.dnetlib.data.proto.PersonProtos.Person.Metadata.Builder builderForValue) { - if (metadataBuilder_ == null) { - metadata_ = builderForValue.build(); - onChanged(); - } else { - metadataBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder mergeMetadata(eu.dnetlib.data.proto.PersonProtos.Person.Metadata value) { - if (metadataBuilder_ == null) { - if (((bitField0_ & 0x00000001) == 0x00000001) && - metadata_ != eu.dnetlib.data.proto.PersonProtos.Person.Metadata.getDefaultInstance()) { - metadata_ = - eu.dnetlib.data.proto.PersonProtos.Person.Metadata.newBuilder(metadata_).mergeFrom(value).buildPartial(); - } else { - metadata_ = value; - } - onChanged(); - } else { - metadataBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder clearMetadata() { - if (metadataBuilder_ == null) { - metadata_ = eu.dnetlib.data.proto.PersonProtos.Person.Metadata.getDefaultInstance(); - onChanged(); - } else { - metadataBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - public eu.dnetlib.data.proto.PersonProtos.Person.Metadata.Builder getMetadataBuilder() { - bitField0_ |= 0x00000001; - onChanged(); - return getMetadataFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.PersonProtos.Person.MetadataOrBuilder getMetadataOrBuilder() { - if (metadataBuilder_ != null) { - return metadataBuilder_.getMessageOrBuilder(); - } else { - return metadata_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.PersonProtos.Person.Metadata, eu.dnetlib.data.proto.PersonProtos.Person.Metadata.Builder, eu.dnetlib.data.proto.PersonProtos.Person.MetadataOrBuilder> - getMetadataFieldBuilder() { - if (metadataBuilder_ == null) { - metadataBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.PersonProtos.Person.Metadata, eu.dnetlib.data.proto.PersonProtos.Person.Metadata.Builder, eu.dnetlib.data.proto.PersonProtos.Person.MetadataOrBuilder>( - metadata_, - getParentForChildren(), - isClean()); - metadata_ = null; - } - return metadataBuilder_; - } - - // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.Person) - } - - static { - defaultInstance = new Person(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.Person) - } - - private static com.google.protobuf.Descriptors.Descriptor - internal_static_eu_dnetlib_data_proto_Person_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_eu_dnetlib_data_proto_Person_fieldAccessorTable; - private static com.google.protobuf.Descriptors.Descriptor - internal_static_eu_dnetlib_data_proto_Person_Metadata_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_eu_dnetlib_data_proto_Person_Metadata_fieldAccessorTable; - - public static com.google.protobuf.Descriptors.FileDescriptor - getDescriptor() { - return descriptor; - } - private static com.google.protobuf.Descriptors.FileDescriptor - descriptor; - static { - java.lang.String[] descriptorData = { - "\n\014Person.proto\022\025eu.dnetlib.data.proto\032\017F" + - "ieldType.proto\"\363\001\n\006Person\0228\n\010metadata\030\002 " + - "\001(\0132&.eu.dnetlib.data.proto.Person.Metad" + - "ata\032\256\001\n\010Metadata\022\020\n\010fullname\030\001 \002(\t\022\021\n\tfi" + - "rstname\030\002 \001(\t\022\020\n\010lastname\030\003 \001(\t\022\r\n\005pubID" + - "\030\004 \002(\t\022\016\n\006pubDOI\030\005 \001(\t\022\r\n\005orcid\030\006 \001(\t\022\014\n" + - "\004rank\030\007 \002(\005\022\021\n\tcoauthors\030\010 \003(\t\022\016\n\006topics" + - "\030\t \003(\001\022\014\n\004area\030\n \002(\tB%\n\025eu.dnetlib.data." + - "protoB\014PersonProtos" - }; - com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = - new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { - public com.google.protobuf.ExtensionRegistry assignDescriptors( - com.google.protobuf.Descriptors.FileDescriptor root) { - descriptor = root; - internal_static_eu_dnetlib_data_proto_Person_descriptor = - getDescriptor().getMessageTypes().get(0); - internal_static_eu_dnetlib_data_proto_Person_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_eu_dnetlib_data_proto_Person_descriptor, - new java.lang.String[] { "Metadata", }, - eu.dnetlib.data.proto.PersonProtos.Person.class, - eu.dnetlib.data.proto.PersonProtos.Person.Builder.class); - internal_static_eu_dnetlib_data_proto_Person_Metadata_descriptor = - internal_static_eu_dnetlib_data_proto_Person_descriptor.getNestedTypes().get(0); - internal_static_eu_dnetlib_data_proto_Person_Metadata_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_eu_dnetlib_data_proto_Person_Metadata_descriptor, - new java.lang.String[] { "Fullname", "Firstname", "Lastname", "PubID", "PubDOI", "Orcid", "Rank", "Coauthors", "Topics", "Area", }, - eu.dnetlib.data.proto.PersonProtos.Person.Metadata.class, - eu.dnetlib.data.proto.PersonProtos.Person.Metadata.Builder.class); - return null; - } - }; - com.google.protobuf.Descriptors.FileDescriptor - .internalBuildGeneratedFileFrom(descriptorData, - new com.google.protobuf.Descriptors.FileDescriptor[] { - eu.dnetlib.data.proto.FieldTypeProtos.getDescriptor(), - }, assigner); - } - - // @@protoc_insertion_point(outer_class_scope) -} diff --git a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/ProjectOrganizationProtos.java b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/ProjectOrganizationProtos.java deleted file mode 100644 index 7604c67d0..000000000 --- a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/ProjectOrganizationProtos.java +++ /dev/null @@ -1,1112 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: Project_Organization.proto - -package eu.dnetlib.data.proto; - -public final class ProjectOrganizationProtos { - private ProjectOrganizationProtos() {} - public static void registerAllExtensions( - com.google.protobuf.ExtensionRegistry registry) { - } - public interface ProjectOrganizationOrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // optional .eu.dnetlib.data.proto.ProjectOrganization.Participation participation = 1; - boolean hasParticipation(); - eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation getParticipation(); - eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.ParticipationOrBuilder getParticipationOrBuilder(); - } - public static final class ProjectOrganization extends - com.google.protobuf.GeneratedMessage - implements ProjectOrganizationOrBuilder { - // Use ProjectOrganization.newBuilder() to construct. - private ProjectOrganization(Builder builder) { - super(builder); - } - private ProjectOrganization(boolean noInit) {} - - private static final ProjectOrganization defaultInstance; - public static ProjectOrganization getDefaultInstance() { - return defaultInstance; - } - - public ProjectOrganization getDefaultInstanceForType() { - return defaultInstance; - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.ProjectOrganizationProtos.internal_static_eu_dnetlib_data_proto_ProjectOrganization_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.ProjectOrganizationProtos.internal_static_eu_dnetlib_data_proto_ProjectOrganization_fieldAccessorTable; - } - - public interface ParticipationOrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; - boolean hasRelMetadata(); - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata(); - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder(); - - // optional string participantnumber = 2; - boolean hasParticipantnumber(); - String getParticipantnumber(); - } - public static final class Participation extends - com.google.protobuf.GeneratedMessage - implements ParticipationOrBuilder { - // Use Participation.newBuilder() to construct. - private Participation(Builder builder) { - super(builder); - } - private Participation(boolean noInit) {} - - private static final Participation defaultInstance; - public static Participation getDefaultInstance() { - return defaultInstance; - } - - public Participation getDefaultInstanceForType() { - return defaultInstance; - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.ProjectOrganizationProtos.internal_static_eu_dnetlib_data_proto_ProjectOrganization_Participation_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.ProjectOrganizationProtos.internal_static_eu_dnetlib_data_proto_ProjectOrganization_Participation_fieldAccessorTable; - } - - public enum RelName - implements com.google.protobuf.ProtocolMessageEnum { - isParticipant(0, 1), - hasParticipant(1, 2), - ; - - public static final int isParticipant_VALUE = 1; - public static final int hasParticipant_VALUE = 2; - - - public final int getNumber() { return value; } - - public static RelName valueOf(int value) { - switch (value) { - case 1: return isParticipant; - case 2: return hasParticipant; - default: return null; - } - } - - public static com.google.protobuf.Internal.EnumLiteMap - internalGetValueMap() { - return internalValueMap; - } - private static com.google.protobuf.Internal.EnumLiteMap - internalValueMap = - new com.google.protobuf.Internal.EnumLiteMap() { - public RelName findValueByNumber(int number) { - return RelName.valueOf(number); - } - }; - - public final com.google.protobuf.Descriptors.EnumValueDescriptor - getValueDescriptor() { - return getDescriptor().getValues().get(index); - } - public final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptorForType() { - return getDescriptor(); - } - public static final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptor() { - return eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation.getDescriptor().getEnumTypes().get(0); - } - - private static final RelName[] VALUES = { - isParticipant, hasParticipant, - }; - - public static RelName valueOf( - com.google.protobuf.Descriptors.EnumValueDescriptor desc) { - if (desc.getType() != getDescriptor()) { - throw new java.lang.IllegalArgumentException( - "EnumValueDescriptor is not for this type."); - } - return VALUES[desc.getIndex()]; - } - - private final int index; - private final int value; - - private RelName(int index, int value) { - this.index = index; - this.value = value; - } - - // @@protoc_insertion_point(enum_scope:eu.dnetlib.data.proto.ProjectOrganization.Participation.RelName) - } - - private int bitField0_; - // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; - public static final int RELMETADATA_FIELD_NUMBER = 1; - private eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata relMetadata_; - public boolean hasRelMetadata() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata() { - return relMetadata_; - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder() { - return relMetadata_; - } - - // optional string participantnumber = 2; - public static final int PARTICIPANTNUMBER_FIELD_NUMBER = 2; - private java.lang.Object participantnumber_; - public boolean hasParticipantnumber() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public String getParticipantnumber() { - java.lang.Object ref = participantnumber_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - participantnumber_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getParticipantnumberBytes() { - java.lang.Object ref = participantnumber_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - participantnumber_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - private void initFields() { - relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); - participantnumber_ = ""; - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - if (!hasRelMetadata()) { - memoizedIsInitialized = 0; - return false; - } - if (!getRelMetadata().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeMessage(1, relMetadata_); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - output.writeBytes(2, getParticipantnumberBytes()); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(1, relMetadata_); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(2, getParticipantnumberBytes()); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder - implements eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.ParticipationOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.ProjectOrganizationProtos.internal_static_eu_dnetlib_data_proto_ProjectOrganization_Participation_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.ProjectOrganizationProtos.internal_static_eu_dnetlib_data_proto_ProjectOrganization_Participation_fieldAccessorTable; - } - - // Construct using eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - getRelMetadataFieldBuilder(); - } - } - private static Builder create() { - return new Builder(); - } - - public Builder clear() { - super.clear(); - if (relMetadataBuilder_ == null) { - relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); - } else { - relMetadataBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - participantnumber_ = ""; - bitField0_ = (bitField0_ & ~0x00000002); - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation.getDescriptor(); - } - - public eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation getDefaultInstanceForType() { - return eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation.getDefaultInstance(); - } - - public eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation build() { - eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - private eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return result; - } - - public eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation buildPartial() { - eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation result = new eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - if (relMetadataBuilder_ == null) { - result.relMetadata_ = relMetadata_; - } else { - result.relMetadata_ = relMetadataBuilder_.build(); - } - if (((from_bitField0_ & 0x00000002) == 0x00000002)) { - to_bitField0_ |= 0x00000002; - } - result.participantnumber_ = participantnumber_; - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation) { - return mergeFrom((eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation other) { - if (other == eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation.getDefaultInstance()) return this; - if (other.hasRelMetadata()) { - mergeRelMetadata(other.getRelMetadata()); - } - if (other.hasParticipantnumber()) { - setParticipantnumber(other.getParticipantnumber()); - } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - - public final boolean isInitialized() { - if (!hasRelMetadata()) { - - return false; - } - if (!getRelMetadata().isInitialized()) { - - return false; - } - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - } - break; - } - case 10: { - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder subBuilder = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.newBuilder(); - if (hasRelMetadata()) { - subBuilder.mergeFrom(getRelMetadata()); - } - input.readMessage(subBuilder, extensionRegistry); - setRelMetadata(subBuilder.buildPartial()); - break; - } - case 18: { - bitField0_ |= 0x00000002; - participantnumber_ = input.readBytes(); - break; - } - } - } - } - - private int bitField0_; - - // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; - private eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder> relMetadataBuilder_; - public boolean hasRelMetadata() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata() { - if (relMetadataBuilder_ == null) { - return relMetadata_; - } else { - return relMetadataBuilder_.getMessage(); - } - } - public Builder setRelMetadata(eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata value) { - if (relMetadataBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - relMetadata_ = value; - onChanged(); - } else { - relMetadataBuilder_.setMessage(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder setRelMetadata( - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder builderForValue) { - if (relMetadataBuilder_ == null) { - relMetadata_ = builderForValue.build(); - onChanged(); - } else { - relMetadataBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder mergeRelMetadata(eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata value) { - if (relMetadataBuilder_ == null) { - if (((bitField0_ & 0x00000001) == 0x00000001) && - relMetadata_ != eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance()) { - relMetadata_ = - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.newBuilder(relMetadata_).mergeFrom(value).buildPartial(); - } else { - relMetadata_ = value; - } - onChanged(); - } else { - relMetadataBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder clearRelMetadata() { - if (relMetadataBuilder_ == null) { - relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); - onChanged(); - } else { - relMetadataBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder getRelMetadataBuilder() { - bitField0_ |= 0x00000001; - onChanged(); - return getRelMetadataFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder() { - if (relMetadataBuilder_ != null) { - return relMetadataBuilder_.getMessageOrBuilder(); - } else { - return relMetadata_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder> - getRelMetadataFieldBuilder() { - if (relMetadataBuilder_ == null) { - relMetadataBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder>( - relMetadata_, - getParentForChildren(), - isClean()); - relMetadata_ = null; - } - return relMetadataBuilder_; - } - - // optional string participantnumber = 2; - private java.lang.Object participantnumber_ = ""; - public boolean hasParticipantnumber() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public String getParticipantnumber() { - java.lang.Object ref = participantnumber_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - participantnumber_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setParticipantnumber(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000002; - participantnumber_ = value; - onChanged(); - return this; - } - public Builder clearParticipantnumber() { - bitField0_ = (bitField0_ & ~0x00000002); - participantnumber_ = getDefaultInstance().getParticipantnumber(); - onChanged(); - return this; - } - void setParticipantnumber(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000002; - participantnumber_ = value; - onChanged(); - } - - // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.ProjectOrganization.Participation) - } - - static { - defaultInstance = new Participation(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.ProjectOrganization.Participation) - } - - private int bitField0_; - // optional .eu.dnetlib.data.proto.ProjectOrganization.Participation participation = 1; - public static final int PARTICIPATION_FIELD_NUMBER = 1; - private eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation participation_; - public boolean hasParticipation() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation getParticipation() { - return participation_; - } - public eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.ParticipationOrBuilder getParticipationOrBuilder() { - return participation_; - } - - private void initFields() { - participation_ = eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation.getDefaultInstance(); - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - if (hasParticipation()) { - if (!getParticipation().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeMessage(1, participation_); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(1, participation_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder - implements eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganizationOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.ProjectOrganizationProtos.internal_static_eu_dnetlib_data_proto_ProjectOrganization_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.ProjectOrganizationProtos.internal_static_eu_dnetlib_data_proto_ProjectOrganization_fieldAccessorTable; - } - - // Construct using eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - getParticipationFieldBuilder(); - } - } - private static Builder create() { - return new Builder(); - } - - public Builder clear() { - super.clear(); - if (participationBuilder_ == null) { - participation_ = eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation.getDefaultInstance(); - } else { - participationBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.getDescriptor(); - } - - public eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization getDefaultInstanceForType() { - return eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.getDefaultInstance(); - } - - public eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization build() { - eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - private eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return result; - } - - public eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization buildPartial() { - eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization result = new eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - if (participationBuilder_ == null) { - result.participation_ = participation_; - } else { - result.participation_ = participationBuilder_.build(); - } - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization) { - return mergeFrom((eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization other) { - if (other == eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.getDefaultInstance()) return this; - if (other.hasParticipation()) { - mergeParticipation(other.getParticipation()); - } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - - public final boolean isInitialized() { - if (hasParticipation()) { - if (!getParticipation().isInitialized()) { - - return false; - } - } - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - } - break; - } - case 10: { - eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation.Builder subBuilder = eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation.newBuilder(); - if (hasParticipation()) { - subBuilder.mergeFrom(getParticipation()); - } - input.readMessage(subBuilder, extensionRegistry); - setParticipation(subBuilder.buildPartial()); - break; - } - } - } - } - - private int bitField0_; - - // optional .eu.dnetlib.data.proto.ProjectOrganization.Participation participation = 1; - private eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation participation_ = eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation, eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation.Builder, eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.ParticipationOrBuilder> participationBuilder_; - public boolean hasParticipation() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation getParticipation() { - if (participationBuilder_ == null) { - return participation_; - } else { - return participationBuilder_.getMessage(); - } - } - public Builder setParticipation(eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation value) { - if (participationBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - participation_ = value; - onChanged(); - } else { - participationBuilder_.setMessage(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder setParticipation( - eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation.Builder builderForValue) { - if (participationBuilder_ == null) { - participation_ = builderForValue.build(); - onChanged(); - } else { - participationBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder mergeParticipation(eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation value) { - if (participationBuilder_ == null) { - if (((bitField0_ & 0x00000001) == 0x00000001) && - participation_ != eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation.getDefaultInstance()) { - participation_ = - eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation.newBuilder(participation_).mergeFrom(value).buildPartial(); - } else { - participation_ = value; - } - onChanged(); - } else { - participationBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder clearParticipation() { - if (participationBuilder_ == null) { - participation_ = eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation.getDefaultInstance(); - onChanged(); - } else { - participationBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - public eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation.Builder getParticipationBuilder() { - bitField0_ |= 0x00000001; - onChanged(); - return getParticipationFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.ParticipationOrBuilder getParticipationOrBuilder() { - if (participationBuilder_ != null) { - return participationBuilder_.getMessageOrBuilder(); - } else { - return participation_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation, eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation.Builder, eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.ParticipationOrBuilder> - getParticipationFieldBuilder() { - if (participationBuilder_ == null) { - participationBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation, eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation.Builder, eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.ParticipationOrBuilder>( - participation_, - getParentForChildren(), - isClean()); - participation_ = null; - } - return participationBuilder_; - } - - // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.ProjectOrganization) - } - - static { - defaultInstance = new ProjectOrganization(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.ProjectOrganization) - } - - private static com.google.protobuf.Descriptors.Descriptor - internal_static_eu_dnetlib_data_proto_ProjectOrganization_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_eu_dnetlib_data_proto_ProjectOrganization_fieldAccessorTable; - private static com.google.protobuf.Descriptors.Descriptor - internal_static_eu_dnetlib_data_proto_ProjectOrganization_Participation_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_eu_dnetlib_data_proto_ProjectOrganization_Participation_fieldAccessorTable; - - public static com.google.protobuf.Descriptors.FileDescriptor - getDescriptor() { - return descriptor; - } - private static com.google.protobuf.Descriptors.FileDescriptor - descriptor; - static { - java.lang.String[] descriptorData = { - "\n\032Project_Organization.proto\022\025eu.dnetlib" + - ".data.proto\032\021RelMetadata.proto\"\376\001\n\023Proje" + - "ctOrganization\022O\n\rparticipation\030\001 \001(\01328." + - "eu.dnetlib.data.proto.ProjectOrganizatio" + - "n.Participation\032\225\001\n\rParticipation\0227\n\013rel" + - "Metadata\030\001 \002(\0132\".eu.dnetlib.data.proto.R" + - "elMetadata\022\031\n\021participantnumber\030\002 \001(\t\"0\n" + - "\007RelName\022\021\n\risParticipant\020\001\022\022\n\016hasPartic" + - "ipant\020\002B2\n\025eu.dnetlib.data.protoB\031Projec" + - "tOrganizationProtos" - }; - com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = - new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { - public com.google.protobuf.ExtensionRegistry assignDescriptors( - com.google.protobuf.Descriptors.FileDescriptor root) { - descriptor = root; - internal_static_eu_dnetlib_data_proto_ProjectOrganization_descriptor = - getDescriptor().getMessageTypes().get(0); - internal_static_eu_dnetlib_data_proto_ProjectOrganization_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_eu_dnetlib_data_proto_ProjectOrganization_descriptor, - new java.lang.String[] { "Participation", }, - eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.class, - eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Builder.class); - internal_static_eu_dnetlib_data_proto_ProjectOrganization_Participation_descriptor = - internal_static_eu_dnetlib_data_proto_ProjectOrganization_descriptor.getNestedTypes().get(0); - internal_static_eu_dnetlib_data_proto_ProjectOrganization_Participation_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_eu_dnetlib_data_proto_ProjectOrganization_Participation_descriptor, - new java.lang.String[] { "RelMetadata", "Participantnumber", }, - eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation.class, - eu.dnetlib.data.proto.ProjectOrganizationProtos.ProjectOrganization.Participation.Builder.class); - return null; - } - }; - com.google.protobuf.Descriptors.FileDescriptor - .internalBuildGeneratedFileFrom(descriptorData, - new com.google.protobuf.Descriptors.FileDescriptor[] { - eu.dnetlib.data.proto.RelMetadataProtos.getDescriptor(), - }, assigner); - } - - // @@protoc_insertion_point(outer_class_scope) -} diff --git a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/ProjectProtos.java b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/ProjectProtos.java deleted file mode 100644 index 27ba77dfa..000000000 --- a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/ProjectProtos.java +++ /dev/null @@ -1,4486 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: Project.proto - -package eu.dnetlib.data.proto; - -public final class ProjectProtos { - private ProjectProtos() {} - public static void registerAllExtensions( - com.google.protobuf.ExtensionRegistry registry) { - } - public interface ProjectOrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // optional .eu.dnetlib.data.proto.Project.Metadata metadata = 2; - boolean hasMetadata(); - eu.dnetlib.data.proto.ProjectProtos.Project.Metadata getMetadata(); - eu.dnetlib.data.proto.ProjectProtos.Project.MetadataOrBuilder getMetadataOrBuilder(); - } - public static final class Project extends - com.google.protobuf.GeneratedMessage - implements ProjectOrBuilder { - // Use Project.newBuilder() to construct. - private Project(Builder builder) { - super(builder); - } - private Project(boolean noInit) {} - - private static final Project defaultInstance; - public static Project getDefaultInstance() { - return defaultInstance; - } - - public Project getDefaultInstanceForType() { - return defaultInstance; - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.ProjectProtos.internal_static_eu_dnetlib_data_proto_Project_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.ProjectProtos.internal_static_eu_dnetlib_data_proto_Project_fieldAccessorTable; - } - - public interface MetadataOrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // optional .eu.dnetlib.data.proto.StringField websiteurl = 1; - boolean hasWebsiteurl(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getWebsiteurl(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getWebsiteurlOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField code = 2; - boolean hasCode(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getCode(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getCodeOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField acronym = 3; - boolean hasAcronym(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getAcronym(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getAcronymOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField title = 4; - boolean hasTitle(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getTitle(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getTitleOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField startdate = 5; - boolean hasStartdate(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getStartdate(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getStartdateOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField enddate = 6; - boolean hasEnddate(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getEnddate(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEnddateOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField callidentifier = 7; - boolean hasCallidentifier(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getCallidentifier(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getCallidentifierOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField keywords = 8; - boolean hasKeywords(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getKeywords(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getKeywordsOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField duration = 9; - boolean hasDuration(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getDuration(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDurationOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField ecsc39 = 10; - boolean hasEcsc39(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcsc39(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcsc39OrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField oamandatepublications = 11; - boolean hasOamandatepublications(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getOamandatepublications(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOamandatepublicationsOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField ecarticle29_3 = 12; - boolean hasEcarticle293(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcarticle293(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcarticle293OrBuilder(); - - // repeated .eu.dnetlib.data.proto.StructuredProperty subjects = 14; - java.util.List - getSubjectsList(); - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty getSubjects(int index); - int getSubjectsCount(); - java.util.List - getSubjectsOrBuilderList(); - eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder getSubjectsOrBuilder( - int index); - - // repeated .eu.dnetlib.data.proto.StringField fundingtree = 15; - java.util.List - getFundingtreeList(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getFundingtree(int index); - int getFundingtreeCount(); - java.util.List - getFundingtreeOrBuilderList(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getFundingtreeOrBuilder( - int index); - - // optional .eu.dnetlib.data.proto.Qualifier contracttype = 13; - boolean hasContracttype(); - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getContracttype(); - eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getContracttypeOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField optional1 = 16; - boolean hasOptional1(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getOptional1(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOptional1OrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField optional2 = 17; - boolean hasOptional2(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getOptional2(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOptional2OrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField jsonextrainfo = 18; - boolean hasJsonextrainfo(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getJsonextrainfo(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getJsonextrainfoOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField contactfullname = 19; - boolean hasContactfullname(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getContactfullname(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getContactfullnameOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField contactfax = 20; - boolean hasContactfax(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getContactfax(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getContactfaxOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField contactphone = 21; - boolean hasContactphone(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getContactphone(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getContactphoneOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField contactemail = 22; - boolean hasContactemail(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getContactemail(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getContactemailOrBuilder(); - } - public static final class Metadata extends - com.google.protobuf.GeneratedMessage - implements MetadataOrBuilder { - // Use Metadata.newBuilder() to construct. - private Metadata(Builder builder) { - super(builder); - } - private Metadata(boolean noInit) {} - - private static final Metadata defaultInstance; - public static Metadata getDefaultInstance() { - return defaultInstance; - } - - public Metadata getDefaultInstanceForType() { - return defaultInstance; - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.ProjectProtos.internal_static_eu_dnetlib_data_proto_Project_Metadata_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.ProjectProtos.internal_static_eu_dnetlib_data_proto_Project_Metadata_fieldAccessorTable; - } - - private int bitField0_; - // optional .eu.dnetlib.data.proto.StringField websiteurl = 1; - public static final int WEBSITEURL_FIELD_NUMBER = 1; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField websiteurl_; - public boolean hasWebsiteurl() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getWebsiteurl() { - return websiteurl_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getWebsiteurlOrBuilder() { - return websiteurl_; - } - - // optional .eu.dnetlib.data.proto.StringField code = 2; - public static final int CODE_FIELD_NUMBER = 2; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField code_; - public boolean hasCode() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getCode() { - return code_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getCodeOrBuilder() { - return code_; - } - - // optional .eu.dnetlib.data.proto.StringField acronym = 3; - public static final int ACRONYM_FIELD_NUMBER = 3; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField acronym_; - public boolean hasAcronym() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getAcronym() { - return acronym_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getAcronymOrBuilder() { - return acronym_; - } - - // optional .eu.dnetlib.data.proto.StringField title = 4; - public static final int TITLE_FIELD_NUMBER = 4; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField title_; - public boolean hasTitle() { - return ((bitField0_ & 0x00000008) == 0x00000008); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getTitle() { - return title_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getTitleOrBuilder() { - return title_; - } - - // optional .eu.dnetlib.data.proto.StringField startdate = 5; - public static final int STARTDATE_FIELD_NUMBER = 5; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField startdate_; - public boolean hasStartdate() { - return ((bitField0_ & 0x00000010) == 0x00000010); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getStartdate() { - return startdate_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getStartdateOrBuilder() { - return startdate_; - } - - // optional .eu.dnetlib.data.proto.StringField enddate = 6; - public static final int ENDDATE_FIELD_NUMBER = 6; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField enddate_; - public boolean hasEnddate() { - return ((bitField0_ & 0x00000020) == 0x00000020); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEnddate() { - return enddate_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEnddateOrBuilder() { - return enddate_; - } - - // optional .eu.dnetlib.data.proto.StringField callidentifier = 7; - public static final int CALLIDENTIFIER_FIELD_NUMBER = 7; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField callidentifier_; - public boolean hasCallidentifier() { - return ((bitField0_ & 0x00000040) == 0x00000040); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getCallidentifier() { - return callidentifier_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getCallidentifierOrBuilder() { - return callidentifier_; - } - - // optional .eu.dnetlib.data.proto.StringField keywords = 8; - public static final int KEYWORDS_FIELD_NUMBER = 8; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField keywords_; - public boolean hasKeywords() { - return ((bitField0_ & 0x00000080) == 0x00000080); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getKeywords() { - return keywords_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getKeywordsOrBuilder() { - return keywords_; - } - - // optional .eu.dnetlib.data.proto.StringField duration = 9; - public static final int DURATION_FIELD_NUMBER = 9; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField duration_; - public boolean hasDuration() { - return ((bitField0_ & 0x00000100) == 0x00000100); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getDuration() { - return duration_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDurationOrBuilder() { - return duration_; - } - - // optional .eu.dnetlib.data.proto.StringField ecsc39 = 10; - public static final int ECSC39_FIELD_NUMBER = 10; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField ecsc39_; - public boolean hasEcsc39() { - return ((bitField0_ & 0x00000200) == 0x00000200); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcsc39() { - return ecsc39_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcsc39OrBuilder() { - return ecsc39_; - } - - // optional .eu.dnetlib.data.proto.StringField oamandatepublications = 11; - public static final int OAMANDATEPUBLICATIONS_FIELD_NUMBER = 11; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField oamandatepublications_; - public boolean hasOamandatepublications() { - return ((bitField0_ & 0x00000400) == 0x00000400); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getOamandatepublications() { - return oamandatepublications_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOamandatepublicationsOrBuilder() { - return oamandatepublications_; - } - - // optional .eu.dnetlib.data.proto.StringField ecarticle29_3 = 12; - public static final int ECARTICLE29_3_FIELD_NUMBER = 12; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField ecarticle293_; - public boolean hasEcarticle293() { - return ((bitField0_ & 0x00000800) == 0x00000800); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcarticle293() { - return ecarticle293_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcarticle293OrBuilder() { - return ecarticle293_; - } - - // repeated .eu.dnetlib.data.proto.StructuredProperty subjects = 14; - public static final int SUBJECTS_FIELD_NUMBER = 14; - private java.util.List subjects_; - public java.util.List getSubjectsList() { - return subjects_; - } - public java.util.List - getSubjectsOrBuilderList() { - return subjects_; - } - public int getSubjectsCount() { - return subjects_.size(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty getSubjects(int index) { - return subjects_.get(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder getSubjectsOrBuilder( - int index) { - return subjects_.get(index); - } - - // repeated .eu.dnetlib.data.proto.StringField fundingtree = 15; - public static final int FUNDINGTREE_FIELD_NUMBER = 15; - private java.util.List fundingtree_; - public java.util.List getFundingtreeList() { - return fundingtree_; - } - public java.util.List - getFundingtreeOrBuilderList() { - return fundingtree_; - } - public int getFundingtreeCount() { - return fundingtree_.size(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getFundingtree(int index) { - return fundingtree_.get(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getFundingtreeOrBuilder( - int index) { - return fundingtree_.get(index); - } - - // optional .eu.dnetlib.data.proto.Qualifier contracttype = 13; - public static final int CONTRACTTYPE_FIELD_NUMBER = 13; - private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier contracttype_; - public boolean hasContracttype() { - return ((bitField0_ & 0x00001000) == 0x00001000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getContracttype() { - return contracttype_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getContracttypeOrBuilder() { - return contracttype_; - } - - // optional .eu.dnetlib.data.proto.StringField optional1 = 16; - public static final int OPTIONAL1_FIELD_NUMBER = 16; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField optional1_; - public boolean hasOptional1() { - return ((bitField0_ & 0x00002000) == 0x00002000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getOptional1() { - return optional1_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOptional1OrBuilder() { - return optional1_; - } - - // optional .eu.dnetlib.data.proto.StringField optional2 = 17; - public static final int OPTIONAL2_FIELD_NUMBER = 17; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField optional2_; - public boolean hasOptional2() { - return ((bitField0_ & 0x00004000) == 0x00004000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getOptional2() { - return optional2_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOptional2OrBuilder() { - return optional2_; - } - - // optional .eu.dnetlib.data.proto.StringField jsonextrainfo = 18; - public static final int JSONEXTRAINFO_FIELD_NUMBER = 18; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField jsonextrainfo_; - public boolean hasJsonextrainfo() { - return ((bitField0_ & 0x00008000) == 0x00008000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getJsonextrainfo() { - return jsonextrainfo_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getJsonextrainfoOrBuilder() { - return jsonextrainfo_; - } - - // optional .eu.dnetlib.data.proto.StringField contactfullname = 19; - public static final int CONTACTFULLNAME_FIELD_NUMBER = 19; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField contactfullname_; - public boolean hasContactfullname() { - return ((bitField0_ & 0x00010000) == 0x00010000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getContactfullname() { - return contactfullname_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getContactfullnameOrBuilder() { - return contactfullname_; - } - - // optional .eu.dnetlib.data.proto.StringField contactfax = 20; - public static final int CONTACTFAX_FIELD_NUMBER = 20; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField contactfax_; - public boolean hasContactfax() { - return ((bitField0_ & 0x00020000) == 0x00020000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getContactfax() { - return contactfax_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getContactfaxOrBuilder() { - return contactfax_; - } - - // optional .eu.dnetlib.data.proto.StringField contactphone = 21; - public static final int CONTACTPHONE_FIELD_NUMBER = 21; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField contactphone_; - public boolean hasContactphone() { - return ((bitField0_ & 0x00040000) == 0x00040000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getContactphone() { - return contactphone_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getContactphoneOrBuilder() { - return contactphone_; - } - - // optional .eu.dnetlib.data.proto.StringField contactemail = 22; - public static final int CONTACTEMAIL_FIELD_NUMBER = 22; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField contactemail_; - public boolean hasContactemail() { - return ((bitField0_ & 0x00080000) == 0x00080000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getContactemail() { - return contactemail_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getContactemailOrBuilder() { - return contactemail_; - } - - private void initFields() { - websiteurl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - code_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - acronym_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - title_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - startdate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - enddate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - callidentifier_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - keywords_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - duration_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - ecsc39_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - oamandatepublications_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - ecarticle293_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - subjects_ = java.util.Collections.emptyList(); - fundingtree_ = java.util.Collections.emptyList(); - contracttype_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - optional1_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - optional2_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - jsonextrainfo_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - contactfullname_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - contactfax_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - contactphone_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - contactemail_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - if (hasWebsiteurl()) { - if (!getWebsiteurl().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasCode()) { - if (!getCode().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasAcronym()) { - if (!getAcronym().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasTitle()) { - if (!getTitle().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasStartdate()) { - if (!getStartdate().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasEnddate()) { - if (!getEnddate().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasCallidentifier()) { - if (!getCallidentifier().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasKeywords()) { - if (!getKeywords().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasDuration()) { - if (!getDuration().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasEcsc39()) { - if (!getEcsc39().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasOamandatepublications()) { - if (!getOamandatepublications().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasEcarticle293()) { - if (!getEcarticle293().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - for (int i = 0; i < getSubjectsCount(); i++) { - if (!getSubjects(i).isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - for (int i = 0; i < getFundingtreeCount(); i++) { - if (!getFundingtree(i).isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasContracttype()) { - if (!getContracttype().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasOptional1()) { - if (!getOptional1().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasOptional2()) { - if (!getOptional2().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasJsonextrainfo()) { - if (!getJsonextrainfo().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasContactfullname()) { - if (!getContactfullname().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasContactfax()) { - if (!getContactfax().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasContactphone()) { - if (!getContactphone().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasContactemail()) { - if (!getContactemail().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeMessage(1, websiteurl_); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - output.writeMessage(2, code_); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - output.writeMessage(3, acronym_); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - output.writeMessage(4, title_); - } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - output.writeMessage(5, startdate_); - } - if (((bitField0_ & 0x00000020) == 0x00000020)) { - output.writeMessage(6, enddate_); - } - if (((bitField0_ & 0x00000040) == 0x00000040)) { - output.writeMessage(7, callidentifier_); - } - if (((bitField0_ & 0x00000080) == 0x00000080)) { - output.writeMessage(8, keywords_); - } - if (((bitField0_ & 0x00000100) == 0x00000100)) { - output.writeMessage(9, duration_); - } - if (((bitField0_ & 0x00000200) == 0x00000200)) { - output.writeMessage(10, ecsc39_); - } - if (((bitField0_ & 0x00000400) == 0x00000400)) { - output.writeMessage(11, oamandatepublications_); - } - if (((bitField0_ & 0x00000800) == 0x00000800)) { - output.writeMessage(12, ecarticle293_); - } - if (((bitField0_ & 0x00001000) == 0x00001000)) { - output.writeMessage(13, contracttype_); - } - for (int i = 0; i < subjects_.size(); i++) { - output.writeMessage(14, subjects_.get(i)); - } - for (int i = 0; i < fundingtree_.size(); i++) { - output.writeMessage(15, fundingtree_.get(i)); - } - if (((bitField0_ & 0x00002000) == 0x00002000)) { - output.writeMessage(16, optional1_); - } - if (((bitField0_ & 0x00004000) == 0x00004000)) { - output.writeMessage(17, optional2_); - } - if (((bitField0_ & 0x00008000) == 0x00008000)) { - output.writeMessage(18, jsonextrainfo_); - } - if (((bitField0_ & 0x00010000) == 0x00010000)) { - output.writeMessage(19, contactfullname_); - } - if (((bitField0_ & 0x00020000) == 0x00020000)) { - output.writeMessage(20, contactfax_); - } - if (((bitField0_ & 0x00040000) == 0x00040000)) { - output.writeMessage(21, contactphone_); - } - if (((bitField0_ & 0x00080000) == 0x00080000)) { - output.writeMessage(22, contactemail_); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(1, websiteurl_); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(2, code_); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(3, acronym_); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(4, title_); - } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(5, startdate_); - } - if (((bitField0_ & 0x00000020) == 0x00000020)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(6, enddate_); - } - if (((bitField0_ & 0x00000040) == 0x00000040)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(7, callidentifier_); - } - if (((bitField0_ & 0x00000080) == 0x00000080)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(8, keywords_); - } - if (((bitField0_ & 0x00000100) == 0x00000100)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(9, duration_); - } - if (((bitField0_ & 0x00000200) == 0x00000200)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(10, ecsc39_); - } - if (((bitField0_ & 0x00000400) == 0x00000400)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(11, oamandatepublications_); - } - if (((bitField0_ & 0x00000800) == 0x00000800)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(12, ecarticle293_); - } - if (((bitField0_ & 0x00001000) == 0x00001000)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(13, contracttype_); - } - for (int i = 0; i < subjects_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(14, subjects_.get(i)); - } - for (int i = 0; i < fundingtree_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(15, fundingtree_.get(i)); - } - if (((bitField0_ & 0x00002000) == 0x00002000)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(16, optional1_); - } - if (((bitField0_ & 0x00004000) == 0x00004000)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(17, optional2_); - } - if (((bitField0_ & 0x00008000) == 0x00008000)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(18, jsonextrainfo_); - } - if (((bitField0_ & 0x00010000) == 0x00010000)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(19, contactfullname_); - } - if (((bitField0_ & 0x00020000) == 0x00020000)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(20, contactfax_); - } - if (((bitField0_ & 0x00040000) == 0x00040000)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(21, contactphone_); - } - if (((bitField0_ & 0x00080000) == 0x00080000)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(22, contactemail_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static eu.dnetlib.data.proto.ProjectProtos.Project.Metadata parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.ProjectProtos.Project.Metadata parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ProjectProtos.Project.Metadata parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.ProjectProtos.Project.Metadata parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ProjectProtos.Project.Metadata parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.ProjectProtos.Project.Metadata parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ProjectProtos.Project.Metadata parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.ProjectProtos.Project.Metadata parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.ProjectProtos.Project.Metadata parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.ProjectProtos.Project.Metadata parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(eu.dnetlib.data.proto.ProjectProtos.Project.Metadata prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder - implements eu.dnetlib.data.proto.ProjectProtos.Project.MetadataOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.ProjectProtos.internal_static_eu_dnetlib_data_proto_Project_Metadata_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.ProjectProtos.internal_static_eu_dnetlib_data_proto_Project_Metadata_fieldAccessorTable; - } - - // Construct using eu.dnetlib.data.proto.ProjectProtos.Project.Metadata.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - getWebsiteurlFieldBuilder(); - getCodeFieldBuilder(); - getAcronymFieldBuilder(); - getTitleFieldBuilder(); - getStartdateFieldBuilder(); - getEnddateFieldBuilder(); - getCallidentifierFieldBuilder(); - getKeywordsFieldBuilder(); - getDurationFieldBuilder(); - getEcsc39FieldBuilder(); - getOamandatepublicationsFieldBuilder(); - getEcarticle293FieldBuilder(); - getSubjectsFieldBuilder(); - getFundingtreeFieldBuilder(); - getContracttypeFieldBuilder(); - getOptional1FieldBuilder(); - getOptional2FieldBuilder(); - getJsonextrainfoFieldBuilder(); - getContactfullnameFieldBuilder(); - getContactfaxFieldBuilder(); - getContactphoneFieldBuilder(); - getContactemailFieldBuilder(); - } - } - private static Builder create() { - return new Builder(); - } - - public Builder clear() { - super.clear(); - if (websiteurlBuilder_ == null) { - websiteurl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - websiteurlBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - if (codeBuilder_ == null) { - code_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - codeBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000002); - if (acronymBuilder_ == null) { - acronym_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - acronymBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000004); - if (titleBuilder_ == null) { - title_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - titleBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000008); - if (startdateBuilder_ == null) { - startdate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - startdateBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000010); - if (enddateBuilder_ == null) { - enddate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - enddateBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000020); - if (callidentifierBuilder_ == null) { - callidentifier_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - callidentifierBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000040); - if (keywordsBuilder_ == null) { - keywords_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - keywordsBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000080); - if (durationBuilder_ == null) { - duration_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - durationBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000100); - if (ecsc39Builder_ == null) { - ecsc39_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - ecsc39Builder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000200); - if (oamandatepublicationsBuilder_ == null) { - oamandatepublications_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - oamandatepublicationsBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000400); - if (ecarticle293Builder_ == null) { - ecarticle293_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - ecarticle293Builder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000800); - if (subjectsBuilder_ == null) { - subjects_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00001000); - } else { - subjectsBuilder_.clear(); - } - if (fundingtreeBuilder_ == null) { - fundingtree_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00002000); - } else { - fundingtreeBuilder_.clear(); - } - if (contracttypeBuilder_ == null) { - contracttype_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - } else { - contracttypeBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00004000); - if (optional1Builder_ == null) { - optional1_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - optional1Builder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00008000); - if (optional2Builder_ == null) { - optional2_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - optional2Builder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00010000); - if (jsonextrainfoBuilder_ == null) { - jsonextrainfo_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - jsonextrainfoBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00020000); - if (contactfullnameBuilder_ == null) { - contactfullname_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - contactfullnameBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00040000); - if (contactfaxBuilder_ == null) { - contactfax_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - contactfaxBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00080000); - if (contactphoneBuilder_ == null) { - contactphone_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - contactphoneBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00100000); - if (contactemailBuilder_ == null) { - contactemail_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - contactemailBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00200000); - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return eu.dnetlib.data.proto.ProjectProtos.Project.Metadata.getDescriptor(); - } - - public eu.dnetlib.data.proto.ProjectProtos.Project.Metadata getDefaultInstanceForType() { - return eu.dnetlib.data.proto.ProjectProtos.Project.Metadata.getDefaultInstance(); - } - - public eu.dnetlib.data.proto.ProjectProtos.Project.Metadata build() { - eu.dnetlib.data.proto.ProjectProtos.Project.Metadata result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - private eu.dnetlib.data.proto.ProjectProtos.Project.Metadata buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - eu.dnetlib.data.proto.ProjectProtos.Project.Metadata result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return result; - } - - public eu.dnetlib.data.proto.ProjectProtos.Project.Metadata buildPartial() { - eu.dnetlib.data.proto.ProjectProtos.Project.Metadata result = new eu.dnetlib.data.proto.ProjectProtos.Project.Metadata(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - if (websiteurlBuilder_ == null) { - result.websiteurl_ = websiteurl_; - } else { - result.websiteurl_ = websiteurlBuilder_.build(); - } - if (((from_bitField0_ & 0x00000002) == 0x00000002)) { - to_bitField0_ |= 0x00000002; - } - if (codeBuilder_ == null) { - result.code_ = code_; - } else { - result.code_ = codeBuilder_.build(); - } - if (((from_bitField0_ & 0x00000004) == 0x00000004)) { - to_bitField0_ |= 0x00000004; - } - if (acronymBuilder_ == null) { - result.acronym_ = acronym_; - } else { - result.acronym_ = acronymBuilder_.build(); - } - if (((from_bitField0_ & 0x00000008) == 0x00000008)) { - to_bitField0_ |= 0x00000008; - } - if (titleBuilder_ == null) { - result.title_ = title_; - } else { - result.title_ = titleBuilder_.build(); - } - if (((from_bitField0_ & 0x00000010) == 0x00000010)) { - to_bitField0_ |= 0x00000010; - } - if (startdateBuilder_ == null) { - result.startdate_ = startdate_; - } else { - result.startdate_ = startdateBuilder_.build(); - } - if (((from_bitField0_ & 0x00000020) == 0x00000020)) { - to_bitField0_ |= 0x00000020; - } - if (enddateBuilder_ == null) { - result.enddate_ = enddate_; - } else { - result.enddate_ = enddateBuilder_.build(); - } - if (((from_bitField0_ & 0x00000040) == 0x00000040)) { - to_bitField0_ |= 0x00000040; - } - if (callidentifierBuilder_ == null) { - result.callidentifier_ = callidentifier_; - } else { - result.callidentifier_ = callidentifierBuilder_.build(); - } - if (((from_bitField0_ & 0x00000080) == 0x00000080)) { - to_bitField0_ |= 0x00000080; - } - if (keywordsBuilder_ == null) { - result.keywords_ = keywords_; - } else { - result.keywords_ = keywordsBuilder_.build(); - } - if (((from_bitField0_ & 0x00000100) == 0x00000100)) { - to_bitField0_ |= 0x00000100; - } - if (durationBuilder_ == null) { - result.duration_ = duration_; - } else { - result.duration_ = durationBuilder_.build(); - } - if (((from_bitField0_ & 0x00000200) == 0x00000200)) { - to_bitField0_ |= 0x00000200; - } - if (ecsc39Builder_ == null) { - result.ecsc39_ = ecsc39_; - } else { - result.ecsc39_ = ecsc39Builder_.build(); - } - if (((from_bitField0_ & 0x00000400) == 0x00000400)) { - to_bitField0_ |= 0x00000400; - } - if (oamandatepublicationsBuilder_ == null) { - result.oamandatepublications_ = oamandatepublications_; - } else { - result.oamandatepublications_ = oamandatepublicationsBuilder_.build(); - } - if (((from_bitField0_ & 0x00000800) == 0x00000800)) { - to_bitField0_ |= 0x00000800; - } - if (ecarticle293Builder_ == null) { - result.ecarticle293_ = ecarticle293_; - } else { - result.ecarticle293_ = ecarticle293Builder_.build(); - } - if (subjectsBuilder_ == null) { - if (((bitField0_ & 0x00001000) == 0x00001000)) { - subjects_ = java.util.Collections.unmodifiableList(subjects_); - bitField0_ = (bitField0_ & ~0x00001000); - } - result.subjects_ = subjects_; - } else { - result.subjects_ = subjectsBuilder_.build(); - } - if (fundingtreeBuilder_ == null) { - if (((bitField0_ & 0x00002000) == 0x00002000)) { - fundingtree_ = java.util.Collections.unmodifiableList(fundingtree_); - bitField0_ = (bitField0_ & ~0x00002000); - } - result.fundingtree_ = fundingtree_; - } else { - result.fundingtree_ = fundingtreeBuilder_.build(); - } - if (((from_bitField0_ & 0x00004000) == 0x00004000)) { - to_bitField0_ |= 0x00001000; - } - if (contracttypeBuilder_ == null) { - result.contracttype_ = contracttype_; - } else { - result.contracttype_ = contracttypeBuilder_.build(); - } - if (((from_bitField0_ & 0x00008000) == 0x00008000)) { - to_bitField0_ |= 0x00002000; - } - if (optional1Builder_ == null) { - result.optional1_ = optional1_; - } else { - result.optional1_ = optional1Builder_.build(); - } - if (((from_bitField0_ & 0x00010000) == 0x00010000)) { - to_bitField0_ |= 0x00004000; - } - if (optional2Builder_ == null) { - result.optional2_ = optional2_; - } else { - result.optional2_ = optional2Builder_.build(); - } - if (((from_bitField0_ & 0x00020000) == 0x00020000)) { - to_bitField0_ |= 0x00008000; - } - if (jsonextrainfoBuilder_ == null) { - result.jsonextrainfo_ = jsonextrainfo_; - } else { - result.jsonextrainfo_ = jsonextrainfoBuilder_.build(); - } - if (((from_bitField0_ & 0x00040000) == 0x00040000)) { - to_bitField0_ |= 0x00010000; - } - if (contactfullnameBuilder_ == null) { - result.contactfullname_ = contactfullname_; - } else { - result.contactfullname_ = contactfullnameBuilder_.build(); - } - if (((from_bitField0_ & 0x00080000) == 0x00080000)) { - to_bitField0_ |= 0x00020000; - } - if (contactfaxBuilder_ == null) { - result.contactfax_ = contactfax_; - } else { - result.contactfax_ = contactfaxBuilder_.build(); - } - if (((from_bitField0_ & 0x00100000) == 0x00100000)) { - to_bitField0_ |= 0x00040000; - } - if (contactphoneBuilder_ == null) { - result.contactphone_ = contactphone_; - } else { - result.contactphone_ = contactphoneBuilder_.build(); - } - if (((from_bitField0_ & 0x00200000) == 0x00200000)) { - to_bitField0_ |= 0x00080000; - } - if (contactemailBuilder_ == null) { - result.contactemail_ = contactemail_; - } else { - result.contactemail_ = contactemailBuilder_.build(); - } - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof eu.dnetlib.data.proto.ProjectProtos.Project.Metadata) { - return mergeFrom((eu.dnetlib.data.proto.ProjectProtos.Project.Metadata)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(eu.dnetlib.data.proto.ProjectProtos.Project.Metadata other) { - if (other == eu.dnetlib.data.proto.ProjectProtos.Project.Metadata.getDefaultInstance()) return this; - if (other.hasWebsiteurl()) { - mergeWebsiteurl(other.getWebsiteurl()); - } - if (other.hasCode()) { - mergeCode(other.getCode()); - } - if (other.hasAcronym()) { - mergeAcronym(other.getAcronym()); - } - if (other.hasTitle()) { - mergeTitle(other.getTitle()); - } - if (other.hasStartdate()) { - mergeStartdate(other.getStartdate()); - } - if (other.hasEnddate()) { - mergeEnddate(other.getEnddate()); - } - if (other.hasCallidentifier()) { - mergeCallidentifier(other.getCallidentifier()); - } - if (other.hasKeywords()) { - mergeKeywords(other.getKeywords()); - } - if (other.hasDuration()) { - mergeDuration(other.getDuration()); - } - if (other.hasEcsc39()) { - mergeEcsc39(other.getEcsc39()); - } - if (other.hasOamandatepublications()) { - mergeOamandatepublications(other.getOamandatepublications()); - } - if (other.hasEcarticle293()) { - mergeEcarticle293(other.getEcarticle293()); - } - if (subjectsBuilder_ == null) { - if (!other.subjects_.isEmpty()) { - if (subjects_.isEmpty()) { - subjects_ = other.subjects_; - bitField0_ = (bitField0_ & ~0x00001000); - } else { - ensureSubjectsIsMutable(); - subjects_.addAll(other.subjects_); - } - onChanged(); - } - } else { - if (!other.subjects_.isEmpty()) { - if (subjectsBuilder_.isEmpty()) { - subjectsBuilder_.dispose(); - subjectsBuilder_ = null; - subjects_ = other.subjects_; - bitField0_ = (bitField0_ & ~0x00001000); - subjectsBuilder_ = - com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? - getSubjectsFieldBuilder() : null; - } else { - subjectsBuilder_.addAllMessages(other.subjects_); - } - } - } - if (fundingtreeBuilder_ == null) { - if (!other.fundingtree_.isEmpty()) { - if (fundingtree_.isEmpty()) { - fundingtree_ = other.fundingtree_; - bitField0_ = (bitField0_ & ~0x00002000); - } else { - ensureFundingtreeIsMutable(); - fundingtree_.addAll(other.fundingtree_); - } - onChanged(); - } - } else { - if (!other.fundingtree_.isEmpty()) { - if (fundingtreeBuilder_.isEmpty()) { - fundingtreeBuilder_.dispose(); - fundingtreeBuilder_ = null; - fundingtree_ = other.fundingtree_; - bitField0_ = (bitField0_ & ~0x00002000); - fundingtreeBuilder_ = - com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? - getFundingtreeFieldBuilder() : null; - } else { - fundingtreeBuilder_.addAllMessages(other.fundingtree_); - } - } - } - if (other.hasContracttype()) { - mergeContracttype(other.getContracttype()); - } - if (other.hasOptional1()) { - mergeOptional1(other.getOptional1()); - } - if (other.hasOptional2()) { - mergeOptional2(other.getOptional2()); - } - if (other.hasJsonextrainfo()) { - mergeJsonextrainfo(other.getJsonextrainfo()); - } - if (other.hasContactfullname()) { - mergeContactfullname(other.getContactfullname()); - } - if (other.hasContactfax()) { - mergeContactfax(other.getContactfax()); - } - if (other.hasContactphone()) { - mergeContactphone(other.getContactphone()); - } - if (other.hasContactemail()) { - mergeContactemail(other.getContactemail()); - } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - - public final boolean isInitialized() { - if (hasWebsiteurl()) { - if (!getWebsiteurl().isInitialized()) { - - return false; - } - } - if (hasCode()) { - if (!getCode().isInitialized()) { - - return false; - } - } - if (hasAcronym()) { - if (!getAcronym().isInitialized()) { - - return false; - } - } - if (hasTitle()) { - if (!getTitle().isInitialized()) { - - return false; - } - } - if (hasStartdate()) { - if (!getStartdate().isInitialized()) { - - return false; - } - } - if (hasEnddate()) { - if (!getEnddate().isInitialized()) { - - return false; - } - } - if (hasCallidentifier()) { - if (!getCallidentifier().isInitialized()) { - - return false; - } - } - if (hasKeywords()) { - if (!getKeywords().isInitialized()) { - - return false; - } - } - if (hasDuration()) { - if (!getDuration().isInitialized()) { - - return false; - } - } - if (hasEcsc39()) { - if (!getEcsc39().isInitialized()) { - - return false; - } - } - if (hasOamandatepublications()) { - if (!getOamandatepublications().isInitialized()) { - - return false; - } - } - if (hasEcarticle293()) { - if (!getEcarticle293().isInitialized()) { - - return false; - } - } - for (int i = 0; i < getSubjectsCount(); i++) { - if (!getSubjects(i).isInitialized()) { - - return false; - } - } - for (int i = 0; i < getFundingtreeCount(); i++) { - if (!getFundingtree(i).isInitialized()) { - - return false; - } - } - if (hasContracttype()) { - if (!getContracttype().isInitialized()) { - - return false; - } - } - if (hasOptional1()) { - if (!getOptional1().isInitialized()) { - - return false; - } - } - if (hasOptional2()) { - if (!getOptional2().isInitialized()) { - - return false; - } - } - if (hasJsonextrainfo()) { - if (!getJsonextrainfo().isInitialized()) { - - return false; - } - } - if (hasContactfullname()) { - if (!getContactfullname().isInitialized()) { - - return false; - } - } - if (hasContactfax()) { - if (!getContactfax().isInitialized()) { - - return false; - } - } - if (hasContactphone()) { - if (!getContactphone().isInitialized()) { - - return false; - } - } - if (hasContactemail()) { - if (!getContactemail().isInitialized()) { - - return false; - } - } - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - } - break; - } - case 10: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasWebsiteurl()) { - subBuilder.mergeFrom(getWebsiteurl()); - } - input.readMessage(subBuilder, extensionRegistry); - setWebsiteurl(subBuilder.buildPartial()); - break; - } - case 18: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasCode()) { - subBuilder.mergeFrom(getCode()); - } - input.readMessage(subBuilder, extensionRegistry); - setCode(subBuilder.buildPartial()); - break; - } - case 26: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasAcronym()) { - subBuilder.mergeFrom(getAcronym()); - } - input.readMessage(subBuilder, extensionRegistry); - setAcronym(subBuilder.buildPartial()); - break; - } - case 34: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasTitle()) { - subBuilder.mergeFrom(getTitle()); - } - input.readMessage(subBuilder, extensionRegistry); - setTitle(subBuilder.buildPartial()); - break; - } - case 42: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasStartdate()) { - subBuilder.mergeFrom(getStartdate()); - } - input.readMessage(subBuilder, extensionRegistry); - setStartdate(subBuilder.buildPartial()); - break; - } - case 50: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasEnddate()) { - subBuilder.mergeFrom(getEnddate()); - } - input.readMessage(subBuilder, extensionRegistry); - setEnddate(subBuilder.buildPartial()); - break; - } - case 58: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasCallidentifier()) { - subBuilder.mergeFrom(getCallidentifier()); - } - input.readMessage(subBuilder, extensionRegistry); - setCallidentifier(subBuilder.buildPartial()); - break; - } - case 66: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasKeywords()) { - subBuilder.mergeFrom(getKeywords()); - } - input.readMessage(subBuilder, extensionRegistry); - setKeywords(subBuilder.buildPartial()); - break; - } - case 74: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasDuration()) { - subBuilder.mergeFrom(getDuration()); - } - input.readMessage(subBuilder, extensionRegistry); - setDuration(subBuilder.buildPartial()); - break; - } - case 82: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasEcsc39()) { - subBuilder.mergeFrom(getEcsc39()); - } - input.readMessage(subBuilder, extensionRegistry); - setEcsc39(subBuilder.buildPartial()); - break; - } - case 90: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasOamandatepublications()) { - subBuilder.mergeFrom(getOamandatepublications()); - } - input.readMessage(subBuilder, extensionRegistry); - setOamandatepublications(subBuilder.buildPartial()); - break; - } - case 98: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasEcarticle293()) { - subBuilder.mergeFrom(getEcarticle293()); - } - input.readMessage(subBuilder, extensionRegistry); - setEcarticle293(subBuilder.buildPartial()); - break; - } - case 106: { - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(); - if (hasContracttype()) { - subBuilder.mergeFrom(getContracttype()); - } - input.readMessage(subBuilder, extensionRegistry); - setContracttype(subBuilder.buildPartial()); - break; - } - case 114: { - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.newBuilder(); - input.readMessage(subBuilder, extensionRegistry); - addSubjects(subBuilder.buildPartial()); - break; - } - case 122: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - input.readMessage(subBuilder, extensionRegistry); - addFundingtree(subBuilder.buildPartial()); - break; - } - case 130: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasOptional1()) { - subBuilder.mergeFrom(getOptional1()); - } - input.readMessage(subBuilder, extensionRegistry); - setOptional1(subBuilder.buildPartial()); - break; - } - case 138: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasOptional2()) { - subBuilder.mergeFrom(getOptional2()); - } - input.readMessage(subBuilder, extensionRegistry); - setOptional2(subBuilder.buildPartial()); - break; - } - case 146: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasJsonextrainfo()) { - subBuilder.mergeFrom(getJsonextrainfo()); - } - input.readMessage(subBuilder, extensionRegistry); - setJsonextrainfo(subBuilder.buildPartial()); - break; - } - case 154: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasContactfullname()) { - subBuilder.mergeFrom(getContactfullname()); - } - input.readMessage(subBuilder, extensionRegistry); - setContactfullname(subBuilder.buildPartial()); - break; - } - case 162: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasContactfax()) { - subBuilder.mergeFrom(getContactfax()); - } - input.readMessage(subBuilder, extensionRegistry); - setContactfax(subBuilder.buildPartial()); - break; - } - case 170: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasContactphone()) { - subBuilder.mergeFrom(getContactphone()); - } - input.readMessage(subBuilder, extensionRegistry); - setContactphone(subBuilder.buildPartial()); - break; - } - case 178: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasContactemail()) { - subBuilder.mergeFrom(getContactemail()); - } - input.readMessage(subBuilder, extensionRegistry); - setContactemail(subBuilder.buildPartial()); - break; - } - } - } - } - - private int bitField0_; - - // optional .eu.dnetlib.data.proto.StringField websiteurl = 1; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField websiteurl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> websiteurlBuilder_; - public boolean hasWebsiteurl() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getWebsiteurl() { - if (websiteurlBuilder_ == null) { - return websiteurl_; - } else { - return websiteurlBuilder_.getMessage(); - } - } - public Builder setWebsiteurl(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (websiteurlBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - websiteurl_ = value; - onChanged(); - } else { - websiteurlBuilder_.setMessage(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder setWebsiteurl( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (websiteurlBuilder_ == null) { - websiteurl_ = builderForValue.build(); - onChanged(); - } else { - websiteurlBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder mergeWebsiteurl(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (websiteurlBuilder_ == null) { - if (((bitField0_ & 0x00000001) == 0x00000001) && - websiteurl_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - websiteurl_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(websiteurl_).mergeFrom(value).buildPartial(); - } else { - websiteurl_ = value; - } - onChanged(); - } else { - websiteurlBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder clearWebsiteurl() { - if (websiteurlBuilder_ == null) { - websiteurl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - websiteurlBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getWebsiteurlBuilder() { - bitField0_ |= 0x00000001; - onChanged(); - return getWebsiteurlFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getWebsiteurlOrBuilder() { - if (websiteurlBuilder_ != null) { - return websiteurlBuilder_.getMessageOrBuilder(); - } else { - return websiteurl_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getWebsiteurlFieldBuilder() { - if (websiteurlBuilder_ == null) { - websiteurlBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - websiteurl_, - getParentForChildren(), - isClean()); - websiteurl_ = null; - } - return websiteurlBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField code = 2; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField code_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> codeBuilder_; - public boolean hasCode() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getCode() { - if (codeBuilder_ == null) { - return code_; - } else { - return codeBuilder_.getMessage(); - } - } - public Builder setCode(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (codeBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - code_ = value; - onChanged(); - } else { - codeBuilder_.setMessage(value); - } - bitField0_ |= 0x00000002; - return this; - } - public Builder setCode( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (codeBuilder_ == null) { - code_ = builderForValue.build(); - onChanged(); - } else { - codeBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000002; - return this; - } - public Builder mergeCode(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (codeBuilder_ == null) { - if (((bitField0_ & 0x00000002) == 0x00000002) && - code_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - code_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(code_).mergeFrom(value).buildPartial(); - } else { - code_ = value; - } - onChanged(); - } else { - codeBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000002; - return this; - } - public Builder clearCode() { - if (codeBuilder_ == null) { - code_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - codeBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000002); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getCodeBuilder() { - bitField0_ |= 0x00000002; - onChanged(); - return getCodeFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getCodeOrBuilder() { - if (codeBuilder_ != null) { - return codeBuilder_.getMessageOrBuilder(); - } else { - return code_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getCodeFieldBuilder() { - if (codeBuilder_ == null) { - codeBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - code_, - getParentForChildren(), - isClean()); - code_ = null; - } - return codeBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField acronym = 3; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField acronym_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> acronymBuilder_; - public boolean hasAcronym() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getAcronym() { - if (acronymBuilder_ == null) { - return acronym_; - } else { - return acronymBuilder_.getMessage(); - } - } - public Builder setAcronym(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (acronymBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - acronym_ = value; - onChanged(); - } else { - acronymBuilder_.setMessage(value); - } - bitField0_ |= 0x00000004; - return this; - } - public Builder setAcronym( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (acronymBuilder_ == null) { - acronym_ = builderForValue.build(); - onChanged(); - } else { - acronymBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000004; - return this; - } - public Builder mergeAcronym(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (acronymBuilder_ == null) { - if (((bitField0_ & 0x00000004) == 0x00000004) && - acronym_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - acronym_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(acronym_).mergeFrom(value).buildPartial(); - } else { - acronym_ = value; - } - onChanged(); - } else { - acronymBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000004; - return this; - } - public Builder clearAcronym() { - if (acronymBuilder_ == null) { - acronym_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - acronymBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000004); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getAcronymBuilder() { - bitField0_ |= 0x00000004; - onChanged(); - return getAcronymFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getAcronymOrBuilder() { - if (acronymBuilder_ != null) { - return acronymBuilder_.getMessageOrBuilder(); - } else { - return acronym_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getAcronymFieldBuilder() { - if (acronymBuilder_ == null) { - acronymBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - acronym_, - getParentForChildren(), - isClean()); - acronym_ = null; - } - return acronymBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField title = 4; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField title_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> titleBuilder_; - public boolean hasTitle() { - return ((bitField0_ & 0x00000008) == 0x00000008); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getTitle() { - if (titleBuilder_ == null) { - return title_; - } else { - return titleBuilder_.getMessage(); - } - } - public Builder setTitle(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (titleBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - title_ = value; - onChanged(); - } else { - titleBuilder_.setMessage(value); - } - bitField0_ |= 0x00000008; - return this; - } - public Builder setTitle( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (titleBuilder_ == null) { - title_ = builderForValue.build(); - onChanged(); - } else { - titleBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000008; - return this; - } - public Builder mergeTitle(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (titleBuilder_ == null) { - if (((bitField0_ & 0x00000008) == 0x00000008) && - title_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - title_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(title_).mergeFrom(value).buildPartial(); - } else { - title_ = value; - } - onChanged(); - } else { - titleBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000008; - return this; - } - public Builder clearTitle() { - if (titleBuilder_ == null) { - title_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - titleBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000008); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getTitleBuilder() { - bitField0_ |= 0x00000008; - onChanged(); - return getTitleFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getTitleOrBuilder() { - if (titleBuilder_ != null) { - return titleBuilder_.getMessageOrBuilder(); - } else { - return title_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getTitleFieldBuilder() { - if (titleBuilder_ == null) { - titleBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - title_, - getParentForChildren(), - isClean()); - title_ = null; - } - return titleBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField startdate = 5; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField startdate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> startdateBuilder_; - public boolean hasStartdate() { - return ((bitField0_ & 0x00000010) == 0x00000010); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getStartdate() { - if (startdateBuilder_ == null) { - return startdate_; - } else { - return startdateBuilder_.getMessage(); - } - } - public Builder setStartdate(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (startdateBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - startdate_ = value; - onChanged(); - } else { - startdateBuilder_.setMessage(value); - } - bitField0_ |= 0x00000010; - return this; - } - public Builder setStartdate( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (startdateBuilder_ == null) { - startdate_ = builderForValue.build(); - onChanged(); - } else { - startdateBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000010; - return this; - } - public Builder mergeStartdate(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (startdateBuilder_ == null) { - if (((bitField0_ & 0x00000010) == 0x00000010) && - startdate_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - startdate_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(startdate_).mergeFrom(value).buildPartial(); - } else { - startdate_ = value; - } - onChanged(); - } else { - startdateBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000010; - return this; - } - public Builder clearStartdate() { - if (startdateBuilder_ == null) { - startdate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - startdateBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000010); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getStartdateBuilder() { - bitField0_ |= 0x00000010; - onChanged(); - return getStartdateFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getStartdateOrBuilder() { - if (startdateBuilder_ != null) { - return startdateBuilder_.getMessageOrBuilder(); - } else { - return startdate_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getStartdateFieldBuilder() { - if (startdateBuilder_ == null) { - startdateBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - startdate_, - getParentForChildren(), - isClean()); - startdate_ = null; - } - return startdateBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField enddate = 6; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField enddate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> enddateBuilder_; - public boolean hasEnddate() { - return ((bitField0_ & 0x00000020) == 0x00000020); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEnddate() { - if (enddateBuilder_ == null) { - return enddate_; - } else { - return enddateBuilder_.getMessage(); - } - } - public Builder setEnddate(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (enddateBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - enddate_ = value; - onChanged(); - } else { - enddateBuilder_.setMessage(value); - } - bitField0_ |= 0x00000020; - return this; - } - public Builder setEnddate( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (enddateBuilder_ == null) { - enddate_ = builderForValue.build(); - onChanged(); - } else { - enddateBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000020; - return this; - } - public Builder mergeEnddate(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (enddateBuilder_ == null) { - if (((bitField0_ & 0x00000020) == 0x00000020) && - enddate_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - enddate_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(enddate_).mergeFrom(value).buildPartial(); - } else { - enddate_ = value; - } - onChanged(); - } else { - enddateBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000020; - return this; - } - public Builder clearEnddate() { - if (enddateBuilder_ == null) { - enddate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - enddateBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000020); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getEnddateBuilder() { - bitField0_ |= 0x00000020; - onChanged(); - return getEnddateFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEnddateOrBuilder() { - if (enddateBuilder_ != null) { - return enddateBuilder_.getMessageOrBuilder(); - } else { - return enddate_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getEnddateFieldBuilder() { - if (enddateBuilder_ == null) { - enddateBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - enddate_, - getParentForChildren(), - isClean()); - enddate_ = null; - } - return enddateBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField callidentifier = 7; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField callidentifier_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> callidentifierBuilder_; - public boolean hasCallidentifier() { - return ((bitField0_ & 0x00000040) == 0x00000040); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getCallidentifier() { - if (callidentifierBuilder_ == null) { - return callidentifier_; - } else { - return callidentifierBuilder_.getMessage(); - } - } - public Builder setCallidentifier(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (callidentifierBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - callidentifier_ = value; - onChanged(); - } else { - callidentifierBuilder_.setMessage(value); - } - bitField0_ |= 0x00000040; - return this; - } - public Builder setCallidentifier( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (callidentifierBuilder_ == null) { - callidentifier_ = builderForValue.build(); - onChanged(); - } else { - callidentifierBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000040; - return this; - } - public Builder mergeCallidentifier(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (callidentifierBuilder_ == null) { - if (((bitField0_ & 0x00000040) == 0x00000040) && - callidentifier_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - callidentifier_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(callidentifier_).mergeFrom(value).buildPartial(); - } else { - callidentifier_ = value; - } - onChanged(); - } else { - callidentifierBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000040; - return this; - } - public Builder clearCallidentifier() { - if (callidentifierBuilder_ == null) { - callidentifier_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - callidentifierBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000040); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getCallidentifierBuilder() { - bitField0_ |= 0x00000040; - onChanged(); - return getCallidentifierFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getCallidentifierOrBuilder() { - if (callidentifierBuilder_ != null) { - return callidentifierBuilder_.getMessageOrBuilder(); - } else { - return callidentifier_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getCallidentifierFieldBuilder() { - if (callidentifierBuilder_ == null) { - callidentifierBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - callidentifier_, - getParentForChildren(), - isClean()); - callidentifier_ = null; - } - return callidentifierBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField keywords = 8; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField keywords_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> keywordsBuilder_; - public boolean hasKeywords() { - return ((bitField0_ & 0x00000080) == 0x00000080); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getKeywords() { - if (keywordsBuilder_ == null) { - return keywords_; - } else { - return keywordsBuilder_.getMessage(); - } - } - public Builder setKeywords(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (keywordsBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - keywords_ = value; - onChanged(); - } else { - keywordsBuilder_.setMessage(value); - } - bitField0_ |= 0x00000080; - return this; - } - public Builder setKeywords( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (keywordsBuilder_ == null) { - keywords_ = builderForValue.build(); - onChanged(); - } else { - keywordsBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000080; - return this; - } - public Builder mergeKeywords(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (keywordsBuilder_ == null) { - if (((bitField0_ & 0x00000080) == 0x00000080) && - keywords_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - keywords_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(keywords_).mergeFrom(value).buildPartial(); - } else { - keywords_ = value; - } - onChanged(); - } else { - keywordsBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000080; - return this; - } - public Builder clearKeywords() { - if (keywordsBuilder_ == null) { - keywords_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - keywordsBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000080); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getKeywordsBuilder() { - bitField0_ |= 0x00000080; - onChanged(); - return getKeywordsFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getKeywordsOrBuilder() { - if (keywordsBuilder_ != null) { - return keywordsBuilder_.getMessageOrBuilder(); - } else { - return keywords_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getKeywordsFieldBuilder() { - if (keywordsBuilder_ == null) { - keywordsBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - keywords_, - getParentForChildren(), - isClean()); - keywords_ = null; - } - return keywordsBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField duration = 9; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField duration_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> durationBuilder_; - public boolean hasDuration() { - return ((bitField0_ & 0x00000100) == 0x00000100); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getDuration() { - if (durationBuilder_ == null) { - return duration_; - } else { - return durationBuilder_.getMessage(); - } - } - public Builder setDuration(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (durationBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - duration_ = value; - onChanged(); - } else { - durationBuilder_.setMessage(value); - } - bitField0_ |= 0x00000100; - return this; - } - public Builder setDuration( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (durationBuilder_ == null) { - duration_ = builderForValue.build(); - onChanged(); - } else { - durationBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000100; - return this; - } - public Builder mergeDuration(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (durationBuilder_ == null) { - if (((bitField0_ & 0x00000100) == 0x00000100) && - duration_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - duration_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(duration_).mergeFrom(value).buildPartial(); - } else { - duration_ = value; - } - onChanged(); - } else { - durationBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000100; - return this; - } - public Builder clearDuration() { - if (durationBuilder_ == null) { - duration_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - durationBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000100); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getDurationBuilder() { - bitField0_ |= 0x00000100; - onChanged(); - return getDurationFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDurationOrBuilder() { - if (durationBuilder_ != null) { - return durationBuilder_.getMessageOrBuilder(); - } else { - return duration_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getDurationFieldBuilder() { - if (durationBuilder_ == null) { - durationBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - duration_, - getParentForChildren(), - isClean()); - duration_ = null; - } - return durationBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField ecsc39 = 10; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField ecsc39_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> ecsc39Builder_; - public boolean hasEcsc39() { - return ((bitField0_ & 0x00000200) == 0x00000200); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcsc39() { - if (ecsc39Builder_ == null) { - return ecsc39_; - } else { - return ecsc39Builder_.getMessage(); - } - } - public Builder setEcsc39(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (ecsc39Builder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ecsc39_ = value; - onChanged(); - } else { - ecsc39Builder_.setMessage(value); - } - bitField0_ |= 0x00000200; - return this; - } - public Builder setEcsc39( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (ecsc39Builder_ == null) { - ecsc39_ = builderForValue.build(); - onChanged(); - } else { - ecsc39Builder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000200; - return this; - } - public Builder mergeEcsc39(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (ecsc39Builder_ == null) { - if (((bitField0_ & 0x00000200) == 0x00000200) && - ecsc39_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - ecsc39_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(ecsc39_).mergeFrom(value).buildPartial(); - } else { - ecsc39_ = value; - } - onChanged(); - } else { - ecsc39Builder_.mergeFrom(value); - } - bitField0_ |= 0x00000200; - return this; - } - public Builder clearEcsc39() { - if (ecsc39Builder_ == null) { - ecsc39_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - ecsc39Builder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000200); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getEcsc39Builder() { - bitField0_ |= 0x00000200; - onChanged(); - return getEcsc39FieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcsc39OrBuilder() { - if (ecsc39Builder_ != null) { - return ecsc39Builder_.getMessageOrBuilder(); - } else { - return ecsc39_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getEcsc39FieldBuilder() { - if (ecsc39Builder_ == null) { - ecsc39Builder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - ecsc39_, - getParentForChildren(), - isClean()); - ecsc39_ = null; - } - return ecsc39Builder_; - } - - // optional .eu.dnetlib.data.proto.StringField oamandatepublications = 11; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField oamandatepublications_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> oamandatepublicationsBuilder_; - public boolean hasOamandatepublications() { - return ((bitField0_ & 0x00000400) == 0x00000400); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getOamandatepublications() { - if (oamandatepublicationsBuilder_ == null) { - return oamandatepublications_; - } else { - return oamandatepublicationsBuilder_.getMessage(); - } - } - public Builder setOamandatepublications(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (oamandatepublicationsBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - oamandatepublications_ = value; - onChanged(); - } else { - oamandatepublicationsBuilder_.setMessage(value); - } - bitField0_ |= 0x00000400; - return this; - } - public Builder setOamandatepublications( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (oamandatepublicationsBuilder_ == null) { - oamandatepublications_ = builderForValue.build(); - onChanged(); - } else { - oamandatepublicationsBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000400; - return this; - } - public Builder mergeOamandatepublications(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (oamandatepublicationsBuilder_ == null) { - if (((bitField0_ & 0x00000400) == 0x00000400) && - oamandatepublications_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - oamandatepublications_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(oamandatepublications_).mergeFrom(value).buildPartial(); - } else { - oamandatepublications_ = value; - } - onChanged(); - } else { - oamandatepublicationsBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000400; - return this; - } - public Builder clearOamandatepublications() { - if (oamandatepublicationsBuilder_ == null) { - oamandatepublications_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - oamandatepublicationsBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000400); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getOamandatepublicationsBuilder() { - bitField0_ |= 0x00000400; - onChanged(); - return getOamandatepublicationsFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOamandatepublicationsOrBuilder() { - if (oamandatepublicationsBuilder_ != null) { - return oamandatepublicationsBuilder_.getMessageOrBuilder(); - } else { - return oamandatepublications_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getOamandatepublicationsFieldBuilder() { - if (oamandatepublicationsBuilder_ == null) { - oamandatepublicationsBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - oamandatepublications_, - getParentForChildren(), - isClean()); - oamandatepublications_ = null; - } - return oamandatepublicationsBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField ecarticle29_3 = 12; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField ecarticle293_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> ecarticle293Builder_; - public boolean hasEcarticle293() { - return ((bitField0_ & 0x00000800) == 0x00000800); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEcarticle293() { - if (ecarticle293Builder_ == null) { - return ecarticle293_; - } else { - return ecarticle293Builder_.getMessage(); - } - } - public Builder setEcarticle293(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (ecarticle293Builder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ecarticle293_ = value; - onChanged(); - } else { - ecarticle293Builder_.setMessage(value); - } - bitField0_ |= 0x00000800; - return this; - } - public Builder setEcarticle293( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (ecarticle293Builder_ == null) { - ecarticle293_ = builderForValue.build(); - onChanged(); - } else { - ecarticle293Builder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000800; - return this; - } - public Builder mergeEcarticle293(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (ecarticle293Builder_ == null) { - if (((bitField0_ & 0x00000800) == 0x00000800) && - ecarticle293_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - ecarticle293_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(ecarticle293_).mergeFrom(value).buildPartial(); - } else { - ecarticle293_ = value; - } - onChanged(); - } else { - ecarticle293Builder_.mergeFrom(value); - } - bitField0_ |= 0x00000800; - return this; - } - public Builder clearEcarticle293() { - if (ecarticle293Builder_ == null) { - ecarticle293_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - ecarticle293Builder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000800); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getEcarticle293Builder() { - bitField0_ |= 0x00000800; - onChanged(); - return getEcarticle293FieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEcarticle293OrBuilder() { - if (ecarticle293Builder_ != null) { - return ecarticle293Builder_.getMessageOrBuilder(); - } else { - return ecarticle293_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getEcarticle293FieldBuilder() { - if (ecarticle293Builder_ == null) { - ecarticle293Builder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - ecarticle293_, - getParentForChildren(), - isClean()); - ecarticle293_ = null; - } - return ecarticle293Builder_; - } - - // repeated .eu.dnetlib.data.proto.StructuredProperty subjects = 14; - private java.util.List subjects_ = - java.util.Collections.emptyList(); - private void ensureSubjectsIsMutable() { - if (!((bitField0_ & 0x00001000) == 0x00001000)) { - subjects_ = new java.util.ArrayList(subjects_); - bitField0_ |= 0x00001000; - } - } - - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder> subjectsBuilder_; - - public java.util.List getSubjectsList() { - if (subjectsBuilder_ == null) { - return java.util.Collections.unmodifiableList(subjects_); - } else { - return subjectsBuilder_.getMessageList(); - } - } - public int getSubjectsCount() { - if (subjectsBuilder_ == null) { - return subjects_.size(); - } else { - return subjectsBuilder_.getCount(); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty getSubjects(int index) { - if (subjectsBuilder_ == null) { - return subjects_.get(index); - } else { - return subjectsBuilder_.getMessage(index); - } - } - public Builder setSubjects( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty value) { - if (subjectsBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureSubjectsIsMutable(); - subjects_.set(index, value); - onChanged(); - } else { - subjectsBuilder_.setMessage(index, value); - } - return this; - } - public Builder setSubjects( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder builderForValue) { - if (subjectsBuilder_ == null) { - ensureSubjectsIsMutable(); - subjects_.set(index, builderForValue.build()); - onChanged(); - } else { - subjectsBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - public Builder addSubjects(eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty value) { - if (subjectsBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureSubjectsIsMutable(); - subjects_.add(value); - onChanged(); - } else { - subjectsBuilder_.addMessage(value); - } - return this; - } - public Builder addSubjects( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty value) { - if (subjectsBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureSubjectsIsMutable(); - subjects_.add(index, value); - onChanged(); - } else { - subjectsBuilder_.addMessage(index, value); - } - return this; - } - public Builder addSubjects( - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder builderForValue) { - if (subjectsBuilder_ == null) { - ensureSubjectsIsMutable(); - subjects_.add(builderForValue.build()); - onChanged(); - } else { - subjectsBuilder_.addMessage(builderForValue.build()); - } - return this; - } - public Builder addSubjects( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder builderForValue) { - if (subjectsBuilder_ == null) { - ensureSubjectsIsMutable(); - subjects_.add(index, builderForValue.build()); - onChanged(); - } else { - subjectsBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - public Builder addAllSubjects( - java.lang.Iterable values) { - if (subjectsBuilder_ == null) { - ensureSubjectsIsMutable(); - super.addAll(values, subjects_); - onChanged(); - } else { - subjectsBuilder_.addAllMessages(values); - } - return this; - } - public Builder clearSubjects() { - if (subjectsBuilder_ == null) { - subjects_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00001000); - onChanged(); - } else { - subjectsBuilder_.clear(); - } - return this; - } - public Builder removeSubjects(int index) { - if (subjectsBuilder_ == null) { - ensureSubjectsIsMutable(); - subjects_.remove(index); - onChanged(); - } else { - subjectsBuilder_.remove(index); - } - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder getSubjectsBuilder( - int index) { - return getSubjectsFieldBuilder().getBuilder(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder getSubjectsOrBuilder( - int index) { - if (subjectsBuilder_ == null) { - return subjects_.get(index); } else { - return subjectsBuilder_.getMessageOrBuilder(index); - } - } - public java.util.List - getSubjectsOrBuilderList() { - if (subjectsBuilder_ != null) { - return subjectsBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(subjects_); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder addSubjectsBuilder() { - return getSubjectsFieldBuilder().addBuilder( - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.getDefaultInstance()); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder addSubjectsBuilder( - int index) { - return getSubjectsFieldBuilder().addBuilder( - index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.getDefaultInstance()); - } - public java.util.List - getSubjectsBuilderList() { - return getSubjectsFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder> - getSubjectsFieldBuilder() { - if (subjectsBuilder_ == null) { - subjectsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder>( - subjects_, - ((bitField0_ & 0x00001000) == 0x00001000), - getParentForChildren(), - isClean()); - subjects_ = null; - } - return subjectsBuilder_; - } - - // repeated .eu.dnetlib.data.proto.StringField fundingtree = 15; - private java.util.List fundingtree_ = - java.util.Collections.emptyList(); - private void ensureFundingtreeIsMutable() { - if (!((bitField0_ & 0x00002000) == 0x00002000)) { - fundingtree_ = new java.util.ArrayList(fundingtree_); - bitField0_ |= 0x00002000; - } - } - - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> fundingtreeBuilder_; - - public java.util.List getFundingtreeList() { - if (fundingtreeBuilder_ == null) { - return java.util.Collections.unmodifiableList(fundingtree_); - } else { - return fundingtreeBuilder_.getMessageList(); - } - } - public int getFundingtreeCount() { - if (fundingtreeBuilder_ == null) { - return fundingtree_.size(); - } else { - return fundingtreeBuilder_.getCount(); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getFundingtree(int index) { - if (fundingtreeBuilder_ == null) { - return fundingtree_.get(index); - } else { - return fundingtreeBuilder_.getMessage(index); - } - } - public Builder setFundingtree( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (fundingtreeBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureFundingtreeIsMutable(); - fundingtree_.set(index, value); - onChanged(); - } else { - fundingtreeBuilder_.setMessage(index, value); - } - return this; - } - public Builder setFundingtree( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (fundingtreeBuilder_ == null) { - ensureFundingtreeIsMutable(); - fundingtree_.set(index, builderForValue.build()); - onChanged(); - } else { - fundingtreeBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - public Builder addFundingtree(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (fundingtreeBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureFundingtreeIsMutable(); - fundingtree_.add(value); - onChanged(); - } else { - fundingtreeBuilder_.addMessage(value); - } - return this; - } - public Builder addFundingtree( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (fundingtreeBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureFundingtreeIsMutable(); - fundingtree_.add(index, value); - onChanged(); - } else { - fundingtreeBuilder_.addMessage(index, value); - } - return this; - } - public Builder addFundingtree( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (fundingtreeBuilder_ == null) { - ensureFundingtreeIsMutable(); - fundingtree_.add(builderForValue.build()); - onChanged(); - } else { - fundingtreeBuilder_.addMessage(builderForValue.build()); - } - return this; - } - public Builder addFundingtree( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (fundingtreeBuilder_ == null) { - ensureFundingtreeIsMutable(); - fundingtree_.add(index, builderForValue.build()); - onChanged(); - } else { - fundingtreeBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - public Builder addAllFundingtree( - java.lang.Iterable values) { - if (fundingtreeBuilder_ == null) { - ensureFundingtreeIsMutable(); - super.addAll(values, fundingtree_); - onChanged(); - } else { - fundingtreeBuilder_.addAllMessages(values); - } - return this; - } - public Builder clearFundingtree() { - if (fundingtreeBuilder_ == null) { - fundingtree_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00002000); - onChanged(); - } else { - fundingtreeBuilder_.clear(); - } - return this; - } - public Builder removeFundingtree(int index) { - if (fundingtreeBuilder_ == null) { - ensureFundingtreeIsMutable(); - fundingtree_.remove(index); - onChanged(); - } else { - fundingtreeBuilder_.remove(index); - } - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getFundingtreeBuilder( - int index) { - return getFundingtreeFieldBuilder().getBuilder(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getFundingtreeOrBuilder( - int index) { - if (fundingtreeBuilder_ == null) { - return fundingtree_.get(index); } else { - return fundingtreeBuilder_.getMessageOrBuilder(index); - } - } - public java.util.List - getFundingtreeOrBuilderList() { - if (fundingtreeBuilder_ != null) { - return fundingtreeBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(fundingtree_); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addFundingtreeBuilder() { - return getFundingtreeFieldBuilder().addBuilder( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addFundingtreeBuilder( - int index) { - return getFundingtreeFieldBuilder().addBuilder( - index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); - } - public java.util.List - getFundingtreeBuilderList() { - return getFundingtreeFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getFundingtreeFieldBuilder() { - if (fundingtreeBuilder_ == null) { - fundingtreeBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - fundingtree_, - ((bitField0_ & 0x00002000) == 0x00002000), - getParentForChildren(), - isClean()); - fundingtree_ = null; - } - return fundingtreeBuilder_; - } - - // optional .eu.dnetlib.data.proto.Qualifier contracttype = 13; - private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier contracttype_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> contracttypeBuilder_; - public boolean hasContracttype() { - return ((bitField0_ & 0x00004000) == 0x00004000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getContracttype() { - if (contracttypeBuilder_ == null) { - return contracttype_; - } else { - return contracttypeBuilder_.getMessage(); - } - } - public Builder setContracttype(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { - if (contracttypeBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - contracttype_ = value; - onChanged(); - } else { - contracttypeBuilder_.setMessage(value); - } - bitField0_ |= 0x00004000; - return this; - } - public Builder setContracttype( - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder builderForValue) { - if (contracttypeBuilder_ == null) { - contracttype_ = builderForValue.build(); - onChanged(); - } else { - contracttypeBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00004000; - return this; - } - public Builder mergeContracttype(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { - if (contracttypeBuilder_ == null) { - if (((bitField0_ & 0x00004000) == 0x00004000) && - contracttype_ != eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance()) { - contracttype_ = - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(contracttype_).mergeFrom(value).buildPartial(); - } else { - contracttype_ = value; - } - onChanged(); - } else { - contracttypeBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00004000; - return this; - } - public Builder clearContracttype() { - if (contracttypeBuilder_ == null) { - contracttype_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - onChanged(); - } else { - contracttypeBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00004000); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder getContracttypeBuilder() { - bitField0_ |= 0x00004000; - onChanged(); - return getContracttypeFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getContracttypeOrBuilder() { - if (contracttypeBuilder_ != null) { - return contracttypeBuilder_.getMessageOrBuilder(); - } else { - return contracttype_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> - getContracttypeFieldBuilder() { - if (contracttypeBuilder_ == null) { - contracttypeBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder>( - contracttype_, - getParentForChildren(), - isClean()); - contracttype_ = null; - } - return contracttypeBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField optional1 = 16; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField optional1_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> optional1Builder_; - public boolean hasOptional1() { - return ((bitField0_ & 0x00008000) == 0x00008000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getOptional1() { - if (optional1Builder_ == null) { - return optional1_; - } else { - return optional1Builder_.getMessage(); - } - } - public Builder setOptional1(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (optional1Builder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - optional1_ = value; - onChanged(); - } else { - optional1Builder_.setMessage(value); - } - bitField0_ |= 0x00008000; - return this; - } - public Builder setOptional1( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (optional1Builder_ == null) { - optional1_ = builderForValue.build(); - onChanged(); - } else { - optional1Builder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00008000; - return this; - } - public Builder mergeOptional1(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (optional1Builder_ == null) { - if (((bitField0_ & 0x00008000) == 0x00008000) && - optional1_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - optional1_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(optional1_).mergeFrom(value).buildPartial(); - } else { - optional1_ = value; - } - onChanged(); - } else { - optional1Builder_.mergeFrom(value); - } - bitField0_ |= 0x00008000; - return this; - } - public Builder clearOptional1() { - if (optional1Builder_ == null) { - optional1_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - optional1Builder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00008000); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getOptional1Builder() { - bitField0_ |= 0x00008000; - onChanged(); - return getOptional1FieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOptional1OrBuilder() { - if (optional1Builder_ != null) { - return optional1Builder_.getMessageOrBuilder(); - } else { - return optional1_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getOptional1FieldBuilder() { - if (optional1Builder_ == null) { - optional1Builder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - optional1_, - getParentForChildren(), - isClean()); - optional1_ = null; - } - return optional1Builder_; - } - - // optional .eu.dnetlib.data.proto.StringField optional2 = 17; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField optional2_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> optional2Builder_; - public boolean hasOptional2() { - return ((bitField0_ & 0x00010000) == 0x00010000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getOptional2() { - if (optional2Builder_ == null) { - return optional2_; - } else { - return optional2Builder_.getMessage(); - } - } - public Builder setOptional2(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (optional2Builder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - optional2_ = value; - onChanged(); - } else { - optional2Builder_.setMessage(value); - } - bitField0_ |= 0x00010000; - return this; - } - public Builder setOptional2( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (optional2Builder_ == null) { - optional2_ = builderForValue.build(); - onChanged(); - } else { - optional2Builder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00010000; - return this; - } - public Builder mergeOptional2(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (optional2Builder_ == null) { - if (((bitField0_ & 0x00010000) == 0x00010000) && - optional2_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - optional2_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(optional2_).mergeFrom(value).buildPartial(); - } else { - optional2_ = value; - } - onChanged(); - } else { - optional2Builder_.mergeFrom(value); - } - bitField0_ |= 0x00010000; - return this; - } - public Builder clearOptional2() { - if (optional2Builder_ == null) { - optional2_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - optional2Builder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00010000); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getOptional2Builder() { - bitField0_ |= 0x00010000; - onChanged(); - return getOptional2FieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getOptional2OrBuilder() { - if (optional2Builder_ != null) { - return optional2Builder_.getMessageOrBuilder(); - } else { - return optional2_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getOptional2FieldBuilder() { - if (optional2Builder_ == null) { - optional2Builder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - optional2_, - getParentForChildren(), - isClean()); - optional2_ = null; - } - return optional2Builder_; - } - - // optional .eu.dnetlib.data.proto.StringField jsonextrainfo = 18; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField jsonextrainfo_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> jsonextrainfoBuilder_; - public boolean hasJsonextrainfo() { - return ((bitField0_ & 0x00020000) == 0x00020000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getJsonextrainfo() { - if (jsonextrainfoBuilder_ == null) { - return jsonextrainfo_; - } else { - return jsonextrainfoBuilder_.getMessage(); - } - } - public Builder setJsonextrainfo(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (jsonextrainfoBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - jsonextrainfo_ = value; - onChanged(); - } else { - jsonextrainfoBuilder_.setMessage(value); - } - bitField0_ |= 0x00020000; - return this; - } - public Builder setJsonextrainfo( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (jsonextrainfoBuilder_ == null) { - jsonextrainfo_ = builderForValue.build(); - onChanged(); - } else { - jsonextrainfoBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00020000; - return this; - } - public Builder mergeJsonextrainfo(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (jsonextrainfoBuilder_ == null) { - if (((bitField0_ & 0x00020000) == 0x00020000) && - jsonextrainfo_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - jsonextrainfo_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(jsonextrainfo_).mergeFrom(value).buildPartial(); - } else { - jsonextrainfo_ = value; - } - onChanged(); - } else { - jsonextrainfoBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00020000; - return this; - } - public Builder clearJsonextrainfo() { - if (jsonextrainfoBuilder_ == null) { - jsonextrainfo_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - jsonextrainfoBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00020000); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getJsonextrainfoBuilder() { - bitField0_ |= 0x00020000; - onChanged(); - return getJsonextrainfoFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getJsonextrainfoOrBuilder() { - if (jsonextrainfoBuilder_ != null) { - return jsonextrainfoBuilder_.getMessageOrBuilder(); - } else { - return jsonextrainfo_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getJsonextrainfoFieldBuilder() { - if (jsonextrainfoBuilder_ == null) { - jsonextrainfoBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - jsonextrainfo_, - getParentForChildren(), - isClean()); - jsonextrainfo_ = null; - } - return jsonextrainfoBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField contactfullname = 19; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField contactfullname_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> contactfullnameBuilder_; - public boolean hasContactfullname() { - return ((bitField0_ & 0x00040000) == 0x00040000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getContactfullname() { - if (contactfullnameBuilder_ == null) { - return contactfullname_; - } else { - return contactfullnameBuilder_.getMessage(); - } - } - public Builder setContactfullname(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (contactfullnameBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - contactfullname_ = value; - onChanged(); - } else { - contactfullnameBuilder_.setMessage(value); - } - bitField0_ |= 0x00040000; - return this; - } - public Builder setContactfullname( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (contactfullnameBuilder_ == null) { - contactfullname_ = builderForValue.build(); - onChanged(); - } else { - contactfullnameBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00040000; - return this; - } - public Builder mergeContactfullname(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (contactfullnameBuilder_ == null) { - if (((bitField0_ & 0x00040000) == 0x00040000) && - contactfullname_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - contactfullname_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(contactfullname_).mergeFrom(value).buildPartial(); - } else { - contactfullname_ = value; - } - onChanged(); - } else { - contactfullnameBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00040000; - return this; - } - public Builder clearContactfullname() { - if (contactfullnameBuilder_ == null) { - contactfullname_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - contactfullnameBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00040000); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getContactfullnameBuilder() { - bitField0_ |= 0x00040000; - onChanged(); - return getContactfullnameFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getContactfullnameOrBuilder() { - if (contactfullnameBuilder_ != null) { - return contactfullnameBuilder_.getMessageOrBuilder(); - } else { - return contactfullname_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getContactfullnameFieldBuilder() { - if (contactfullnameBuilder_ == null) { - contactfullnameBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - contactfullname_, - getParentForChildren(), - isClean()); - contactfullname_ = null; - } - return contactfullnameBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField contactfax = 20; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField contactfax_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> contactfaxBuilder_; - public boolean hasContactfax() { - return ((bitField0_ & 0x00080000) == 0x00080000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getContactfax() { - if (contactfaxBuilder_ == null) { - return contactfax_; - } else { - return contactfaxBuilder_.getMessage(); - } - } - public Builder setContactfax(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (contactfaxBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - contactfax_ = value; - onChanged(); - } else { - contactfaxBuilder_.setMessage(value); - } - bitField0_ |= 0x00080000; - return this; - } - public Builder setContactfax( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (contactfaxBuilder_ == null) { - contactfax_ = builderForValue.build(); - onChanged(); - } else { - contactfaxBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00080000; - return this; - } - public Builder mergeContactfax(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (contactfaxBuilder_ == null) { - if (((bitField0_ & 0x00080000) == 0x00080000) && - contactfax_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - contactfax_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(contactfax_).mergeFrom(value).buildPartial(); - } else { - contactfax_ = value; - } - onChanged(); - } else { - contactfaxBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00080000; - return this; - } - public Builder clearContactfax() { - if (contactfaxBuilder_ == null) { - contactfax_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - contactfaxBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00080000); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getContactfaxBuilder() { - bitField0_ |= 0x00080000; - onChanged(); - return getContactfaxFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getContactfaxOrBuilder() { - if (contactfaxBuilder_ != null) { - return contactfaxBuilder_.getMessageOrBuilder(); - } else { - return contactfax_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getContactfaxFieldBuilder() { - if (contactfaxBuilder_ == null) { - contactfaxBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - contactfax_, - getParentForChildren(), - isClean()); - contactfax_ = null; - } - return contactfaxBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField contactphone = 21; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField contactphone_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> contactphoneBuilder_; - public boolean hasContactphone() { - return ((bitField0_ & 0x00100000) == 0x00100000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getContactphone() { - if (contactphoneBuilder_ == null) { - return contactphone_; - } else { - return contactphoneBuilder_.getMessage(); - } - } - public Builder setContactphone(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (contactphoneBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - contactphone_ = value; - onChanged(); - } else { - contactphoneBuilder_.setMessage(value); - } - bitField0_ |= 0x00100000; - return this; - } - public Builder setContactphone( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (contactphoneBuilder_ == null) { - contactphone_ = builderForValue.build(); - onChanged(); - } else { - contactphoneBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00100000; - return this; - } - public Builder mergeContactphone(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (contactphoneBuilder_ == null) { - if (((bitField0_ & 0x00100000) == 0x00100000) && - contactphone_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - contactphone_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(contactphone_).mergeFrom(value).buildPartial(); - } else { - contactphone_ = value; - } - onChanged(); - } else { - contactphoneBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00100000; - return this; - } - public Builder clearContactphone() { - if (contactphoneBuilder_ == null) { - contactphone_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - contactphoneBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00100000); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getContactphoneBuilder() { - bitField0_ |= 0x00100000; - onChanged(); - return getContactphoneFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getContactphoneOrBuilder() { - if (contactphoneBuilder_ != null) { - return contactphoneBuilder_.getMessageOrBuilder(); - } else { - return contactphone_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getContactphoneFieldBuilder() { - if (contactphoneBuilder_ == null) { - contactphoneBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - contactphone_, - getParentForChildren(), - isClean()); - contactphone_ = null; - } - return contactphoneBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField contactemail = 22; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField contactemail_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> contactemailBuilder_; - public boolean hasContactemail() { - return ((bitField0_ & 0x00200000) == 0x00200000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getContactemail() { - if (contactemailBuilder_ == null) { - return contactemail_; - } else { - return contactemailBuilder_.getMessage(); - } - } - public Builder setContactemail(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (contactemailBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - contactemail_ = value; - onChanged(); - } else { - contactemailBuilder_.setMessage(value); - } - bitField0_ |= 0x00200000; - return this; - } - public Builder setContactemail( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (contactemailBuilder_ == null) { - contactemail_ = builderForValue.build(); - onChanged(); - } else { - contactemailBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00200000; - return this; - } - public Builder mergeContactemail(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (contactemailBuilder_ == null) { - if (((bitField0_ & 0x00200000) == 0x00200000) && - contactemail_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - contactemail_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(contactemail_).mergeFrom(value).buildPartial(); - } else { - contactemail_ = value; - } - onChanged(); - } else { - contactemailBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00200000; - return this; - } - public Builder clearContactemail() { - if (contactemailBuilder_ == null) { - contactemail_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - contactemailBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00200000); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getContactemailBuilder() { - bitField0_ |= 0x00200000; - onChanged(); - return getContactemailFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getContactemailOrBuilder() { - if (contactemailBuilder_ != null) { - return contactemailBuilder_.getMessageOrBuilder(); - } else { - return contactemail_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getContactemailFieldBuilder() { - if (contactemailBuilder_ == null) { - contactemailBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - contactemail_, - getParentForChildren(), - isClean()); - contactemail_ = null; - } - return contactemailBuilder_; - } - - // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.Project.Metadata) - } - - static { - defaultInstance = new Metadata(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.Project.Metadata) - } - - private int bitField0_; - // optional .eu.dnetlib.data.proto.Project.Metadata metadata = 2; - public static final int METADATA_FIELD_NUMBER = 2; - private eu.dnetlib.data.proto.ProjectProtos.Project.Metadata metadata_; - public boolean hasMetadata() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.ProjectProtos.Project.Metadata getMetadata() { - return metadata_; - } - public eu.dnetlib.data.proto.ProjectProtos.Project.MetadataOrBuilder getMetadataOrBuilder() { - return metadata_; - } - - private void initFields() { - metadata_ = eu.dnetlib.data.proto.ProjectProtos.Project.Metadata.getDefaultInstance(); - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - if (hasMetadata()) { - if (!getMetadata().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeMessage(2, metadata_); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(2, metadata_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static eu.dnetlib.data.proto.ProjectProtos.Project parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.ProjectProtos.Project parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ProjectProtos.Project parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.ProjectProtos.Project parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ProjectProtos.Project parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.ProjectProtos.Project parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ProjectProtos.Project parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.ProjectProtos.Project parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.ProjectProtos.Project parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.ProjectProtos.Project parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(eu.dnetlib.data.proto.ProjectProtos.Project prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder - implements eu.dnetlib.data.proto.ProjectProtos.ProjectOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.ProjectProtos.internal_static_eu_dnetlib_data_proto_Project_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.ProjectProtos.internal_static_eu_dnetlib_data_proto_Project_fieldAccessorTable; - } - - // Construct using eu.dnetlib.data.proto.ProjectProtos.Project.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - getMetadataFieldBuilder(); - } - } - private static Builder create() { - return new Builder(); - } - - public Builder clear() { - super.clear(); - if (metadataBuilder_ == null) { - metadata_ = eu.dnetlib.data.proto.ProjectProtos.Project.Metadata.getDefaultInstance(); - } else { - metadataBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return eu.dnetlib.data.proto.ProjectProtos.Project.getDescriptor(); - } - - public eu.dnetlib.data.proto.ProjectProtos.Project getDefaultInstanceForType() { - return eu.dnetlib.data.proto.ProjectProtos.Project.getDefaultInstance(); - } - - public eu.dnetlib.data.proto.ProjectProtos.Project build() { - eu.dnetlib.data.proto.ProjectProtos.Project result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - private eu.dnetlib.data.proto.ProjectProtos.Project buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - eu.dnetlib.data.proto.ProjectProtos.Project result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return result; - } - - public eu.dnetlib.data.proto.ProjectProtos.Project buildPartial() { - eu.dnetlib.data.proto.ProjectProtos.Project result = new eu.dnetlib.data.proto.ProjectProtos.Project(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - if (metadataBuilder_ == null) { - result.metadata_ = metadata_; - } else { - result.metadata_ = metadataBuilder_.build(); - } - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof eu.dnetlib.data.proto.ProjectProtos.Project) { - return mergeFrom((eu.dnetlib.data.proto.ProjectProtos.Project)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(eu.dnetlib.data.proto.ProjectProtos.Project other) { - if (other == eu.dnetlib.data.proto.ProjectProtos.Project.getDefaultInstance()) return this; - if (other.hasMetadata()) { - mergeMetadata(other.getMetadata()); - } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - - public final boolean isInitialized() { - if (hasMetadata()) { - if (!getMetadata().isInitialized()) { - - return false; - } - } - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - } - break; - } - case 18: { - eu.dnetlib.data.proto.ProjectProtos.Project.Metadata.Builder subBuilder = eu.dnetlib.data.proto.ProjectProtos.Project.Metadata.newBuilder(); - if (hasMetadata()) { - subBuilder.mergeFrom(getMetadata()); - } - input.readMessage(subBuilder, extensionRegistry); - setMetadata(subBuilder.buildPartial()); - break; - } - } - } - } - - private int bitField0_; - - // optional .eu.dnetlib.data.proto.Project.Metadata metadata = 2; - private eu.dnetlib.data.proto.ProjectProtos.Project.Metadata metadata_ = eu.dnetlib.data.proto.ProjectProtos.Project.Metadata.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ProjectProtos.Project.Metadata, eu.dnetlib.data.proto.ProjectProtos.Project.Metadata.Builder, eu.dnetlib.data.proto.ProjectProtos.Project.MetadataOrBuilder> metadataBuilder_; - public boolean hasMetadata() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.ProjectProtos.Project.Metadata getMetadata() { - if (metadataBuilder_ == null) { - return metadata_; - } else { - return metadataBuilder_.getMessage(); - } - } - public Builder setMetadata(eu.dnetlib.data.proto.ProjectProtos.Project.Metadata value) { - if (metadataBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - metadata_ = value; - onChanged(); - } else { - metadataBuilder_.setMessage(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder setMetadata( - eu.dnetlib.data.proto.ProjectProtos.Project.Metadata.Builder builderForValue) { - if (metadataBuilder_ == null) { - metadata_ = builderForValue.build(); - onChanged(); - } else { - metadataBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder mergeMetadata(eu.dnetlib.data.proto.ProjectProtos.Project.Metadata value) { - if (metadataBuilder_ == null) { - if (((bitField0_ & 0x00000001) == 0x00000001) && - metadata_ != eu.dnetlib.data.proto.ProjectProtos.Project.Metadata.getDefaultInstance()) { - metadata_ = - eu.dnetlib.data.proto.ProjectProtos.Project.Metadata.newBuilder(metadata_).mergeFrom(value).buildPartial(); - } else { - metadata_ = value; - } - onChanged(); - } else { - metadataBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder clearMetadata() { - if (metadataBuilder_ == null) { - metadata_ = eu.dnetlib.data.proto.ProjectProtos.Project.Metadata.getDefaultInstance(); - onChanged(); - } else { - metadataBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - public eu.dnetlib.data.proto.ProjectProtos.Project.Metadata.Builder getMetadataBuilder() { - bitField0_ |= 0x00000001; - onChanged(); - return getMetadataFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.ProjectProtos.Project.MetadataOrBuilder getMetadataOrBuilder() { - if (metadataBuilder_ != null) { - return metadataBuilder_.getMessageOrBuilder(); - } else { - return metadata_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ProjectProtos.Project.Metadata, eu.dnetlib.data.proto.ProjectProtos.Project.Metadata.Builder, eu.dnetlib.data.proto.ProjectProtos.Project.MetadataOrBuilder> - getMetadataFieldBuilder() { - if (metadataBuilder_ == null) { - metadataBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ProjectProtos.Project.Metadata, eu.dnetlib.data.proto.ProjectProtos.Project.Metadata.Builder, eu.dnetlib.data.proto.ProjectProtos.Project.MetadataOrBuilder>( - metadata_, - getParentForChildren(), - isClean()); - metadata_ = null; - } - return metadataBuilder_; - } - - // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.Project) - } - - static { - defaultInstance = new Project(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.Project) - } - - private static com.google.protobuf.Descriptors.Descriptor - internal_static_eu_dnetlib_data_proto_Project_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_eu_dnetlib_data_proto_Project_fieldAccessorTable; - private static com.google.protobuf.Descriptors.Descriptor - internal_static_eu_dnetlib_data_proto_Project_Metadata_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_eu_dnetlib_data_proto_Project_Metadata_fieldAccessorTable; - - public static com.google.protobuf.Descriptors.FileDescriptor - getDescriptor() { - return descriptor; - } - private static com.google.protobuf.Descriptors.FileDescriptor - descriptor; - static { - java.lang.String[] descriptorData = { - "\n\rProject.proto\022\025eu.dnetlib.data.proto\032\017" + - "FieldType.proto\"\251\n\n\007Project\0229\n\010metadata\030" + - "\002 \001(\0132\'.eu.dnetlib.data.proto.Project.Me" + - "tadata\032\342\t\n\010Metadata\0226\n\nwebsiteurl\030\001 \001(\0132" + - "\".eu.dnetlib.data.proto.StringField\0220\n\004c" + - "ode\030\002 \001(\0132\".eu.dnetlib.data.proto.String" + - "Field\0223\n\007acronym\030\003 \001(\0132\".eu.dnetlib.data" + - ".proto.StringField\0221\n\005title\030\004 \001(\0132\".eu.d" + - "netlib.data.proto.StringField\0225\n\tstartda" + - "te\030\005 \001(\0132\".eu.dnetlib.data.proto.StringF", - "ield\0223\n\007enddate\030\006 \001(\0132\".eu.dnetlib.data." + - "proto.StringField\022:\n\016callidentifier\030\007 \001(" + - "\0132\".eu.dnetlib.data.proto.StringField\0224\n" + - "\010keywords\030\010 \001(\0132\".eu.dnetlib.data.proto." + - "StringField\0224\n\010duration\030\t \001(\0132\".eu.dnetl" + - "ib.data.proto.StringField\0222\n\006ecsc39\030\n \001(" + - "\0132\".eu.dnetlib.data.proto.StringField\022A\n" + - "\025oamandatepublications\030\013 \001(\0132\".eu.dnetli" + - "b.data.proto.StringField\0229\n\recarticle29_" + - "3\030\014 \001(\0132\".eu.dnetlib.data.proto.StringFi", - "eld\022;\n\010subjects\030\016 \003(\0132).eu.dnetlib.data." + - "proto.StructuredProperty\0227\n\013fundingtree\030" + - "\017 \003(\0132\".eu.dnetlib.data.proto.StringFiel" + - "d\0226\n\014contracttype\030\r \001(\0132 .eu.dnetlib.dat" + - "a.proto.Qualifier\0225\n\toptional1\030\020 \001(\0132\".e" + - "u.dnetlib.data.proto.StringField\0225\n\topti" + - "onal2\030\021 \001(\0132\".eu.dnetlib.data.proto.Stri" + - "ngField\0229\n\rjsonextrainfo\030\022 \001(\0132\".eu.dnet" + - "lib.data.proto.StringField\022;\n\017contactful" + - "lname\030\023 \001(\0132\".eu.dnetlib.data.proto.Stri", - "ngField\0226\n\ncontactfax\030\024 \001(\0132\".eu.dnetlib" + - ".data.proto.StringField\0228\n\014contactphone\030" + - "\025 \001(\0132\".eu.dnetlib.data.proto.StringFiel" + - "d\0228\n\014contactemail\030\026 \001(\0132\".eu.dnetlib.dat" + - "a.proto.StringFieldB&\n\025eu.dnetlib.data.p" + - "rotoB\rProjectProtos" - }; - com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = - new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { - public com.google.protobuf.ExtensionRegistry assignDescriptors( - com.google.protobuf.Descriptors.FileDescriptor root) { - descriptor = root; - internal_static_eu_dnetlib_data_proto_Project_descriptor = - getDescriptor().getMessageTypes().get(0); - internal_static_eu_dnetlib_data_proto_Project_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_eu_dnetlib_data_proto_Project_descriptor, - new java.lang.String[] { "Metadata", }, - eu.dnetlib.data.proto.ProjectProtos.Project.class, - eu.dnetlib.data.proto.ProjectProtos.Project.Builder.class); - internal_static_eu_dnetlib_data_proto_Project_Metadata_descriptor = - internal_static_eu_dnetlib_data_proto_Project_descriptor.getNestedTypes().get(0); - internal_static_eu_dnetlib_data_proto_Project_Metadata_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_eu_dnetlib_data_proto_Project_Metadata_descriptor, - new java.lang.String[] { "Websiteurl", "Code", "Acronym", "Title", "Startdate", "Enddate", "Callidentifier", "Keywords", "Duration", "Ecsc39", "Oamandatepublications", "Ecarticle293", "Subjects", "Fundingtree", "Contracttype", "Optional1", "Optional2", "Jsonextrainfo", "Contactfullname", "Contactfax", "Contactphone", "Contactemail", }, - eu.dnetlib.data.proto.ProjectProtos.Project.Metadata.class, - eu.dnetlib.data.proto.ProjectProtos.Project.Metadata.Builder.class); - return null; - } - }; - com.google.protobuf.Descriptors.FileDescriptor - .internalBuildGeneratedFileFrom(descriptorData, - new com.google.protobuf.Descriptors.FileDescriptor[] { - eu.dnetlib.data.proto.FieldTypeProtos.getDescriptor(), - }, assigner); - } - - // @@protoc_insertion_point(outer_class_scope) -} diff --git a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/RelMetadataProtos.java b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/RelMetadataProtos.java deleted file mode 100644 index 585fcfd9d..000000000 --- a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/RelMetadataProtos.java +++ /dev/null @@ -1,680 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: RelMetadata.proto - -package eu.dnetlib.data.proto; - -public final class RelMetadataProtos { - private RelMetadataProtos() {} - public static void registerAllExtensions( - com.google.protobuf.ExtensionRegistry registry) { - } - public interface RelMetadataOrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // optional .eu.dnetlib.data.proto.Qualifier semantics = 1; - boolean hasSemantics(); - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getSemantics(); - eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getSemanticsOrBuilder(); - - // optional string startdate = 3; - boolean hasStartdate(); - String getStartdate(); - - // optional string enddate = 4; - boolean hasEnddate(); - String getEnddate(); - } - public static final class RelMetadata extends - com.google.protobuf.GeneratedMessage - implements RelMetadataOrBuilder { - // Use RelMetadata.newBuilder() to construct. - private RelMetadata(Builder builder) { - super(builder); - } - private RelMetadata(boolean noInit) {} - - private static final RelMetadata defaultInstance; - public static RelMetadata getDefaultInstance() { - return defaultInstance; - } - - public RelMetadata getDefaultInstanceForType() { - return defaultInstance; - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.RelMetadataProtos.internal_static_eu_dnetlib_data_proto_RelMetadata_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.RelMetadataProtos.internal_static_eu_dnetlib_data_proto_RelMetadata_fieldAccessorTable; - } - - private int bitField0_; - // optional .eu.dnetlib.data.proto.Qualifier semantics = 1; - public static final int SEMANTICS_FIELD_NUMBER = 1; - private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier semantics_; - public boolean hasSemantics() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getSemantics() { - return semantics_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getSemanticsOrBuilder() { - return semantics_; - } - - // optional string startdate = 3; - public static final int STARTDATE_FIELD_NUMBER = 3; - private java.lang.Object startdate_; - public boolean hasStartdate() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public String getStartdate() { - java.lang.Object ref = startdate_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - startdate_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getStartdateBytes() { - java.lang.Object ref = startdate_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - startdate_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // optional string enddate = 4; - public static final int ENDDATE_FIELD_NUMBER = 4; - private java.lang.Object enddate_; - public boolean hasEnddate() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - public String getEnddate() { - java.lang.Object ref = enddate_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - enddate_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getEnddateBytes() { - java.lang.Object ref = enddate_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - enddate_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - private void initFields() { - semantics_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - startdate_ = ""; - enddate_ = ""; - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - if (hasSemantics()) { - if (!getSemantics().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeMessage(1, semantics_); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - output.writeBytes(3, getStartdateBytes()); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - output.writeBytes(4, getEnddateBytes()); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(1, semantics_); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(3, getStartdateBytes()); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(4, getEnddateBytes()); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder - implements eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.RelMetadataProtos.internal_static_eu_dnetlib_data_proto_RelMetadata_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.RelMetadataProtos.internal_static_eu_dnetlib_data_proto_RelMetadata_fieldAccessorTable; - } - - // Construct using eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - getSemanticsFieldBuilder(); - } - } - private static Builder create() { - return new Builder(); - } - - public Builder clear() { - super.clear(); - if (semanticsBuilder_ == null) { - semantics_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - } else { - semanticsBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - startdate_ = ""; - bitField0_ = (bitField0_ & ~0x00000002); - enddate_ = ""; - bitField0_ = (bitField0_ & ~0x00000004); - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDescriptor(); - } - - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getDefaultInstanceForType() { - return eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); - } - - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata build() { - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - private eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return result; - } - - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata buildPartial() { - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata result = new eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - if (semanticsBuilder_ == null) { - result.semantics_ = semantics_; - } else { - result.semantics_ = semanticsBuilder_.build(); - } - if (((from_bitField0_ & 0x00000002) == 0x00000002)) { - to_bitField0_ |= 0x00000002; - } - result.startdate_ = startdate_; - if (((from_bitField0_ & 0x00000004) == 0x00000004)) { - to_bitField0_ |= 0x00000004; - } - result.enddate_ = enddate_; - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata) { - return mergeFrom((eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata other) { - if (other == eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance()) return this; - if (other.hasSemantics()) { - mergeSemantics(other.getSemantics()); - } - if (other.hasStartdate()) { - setStartdate(other.getStartdate()); - } - if (other.hasEnddate()) { - setEnddate(other.getEnddate()); - } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - - public final boolean isInitialized() { - if (hasSemantics()) { - if (!getSemantics().isInitialized()) { - - return false; - } - } - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - } - break; - } - case 10: { - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(); - if (hasSemantics()) { - subBuilder.mergeFrom(getSemantics()); - } - input.readMessage(subBuilder, extensionRegistry); - setSemantics(subBuilder.buildPartial()); - break; - } - case 26: { - bitField0_ |= 0x00000002; - startdate_ = input.readBytes(); - break; - } - case 34: { - bitField0_ |= 0x00000004; - enddate_ = input.readBytes(); - break; - } - } - } - } - - private int bitField0_; - - // optional .eu.dnetlib.data.proto.Qualifier semantics = 1; - private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier semantics_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> semanticsBuilder_; - public boolean hasSemantics() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getSemantics() { - if (semanticsBuilder_ == null) { - return semantics_; - } else { - return semanticsBuilder_.getMessage(); - } - } - public Builder setSemantics(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { - if (semanticsBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - semantics_ = value; - onChanged(); - } else { - semanticsBuilder_.setMessage(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder setSemantics( - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder builderForValue) { - if (semanticsBuilder_ == null) { - semantics_ = builderForValue.build(); - onChanged(); - } else { - semanticsBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder mergeSemantics(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { - if (semanticsBuilder_ == null) { - if (((bitField0_ & 0x00000001) == 0x00000001) && - semantics_ != eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance()) { - semantics_ = - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(semantics_).mergeFrom(value).buildPartial(); - } else { - semantics_ = value; - } - onChanged(); - } else { - semanticsBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder clearSemantics() { - if (semanticsBuilder_ == null) { - semantics_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - onChanged(); - } else { - semanticsBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder getSemanticsBuilder() { - bitField0_ |= 0x00000001; - onChanged(); - return getSemanticsFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getSemanticsOrBuilder() { - if (semanticsBuilder_ != null) { - return semanticsBuilder_.getMessageOrBuilder(); - } else { - return semantics_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> - getSemanticsFieldBuilder() { - if (semanticsBuilder_ == null) { - semanticsBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder>( - semantics_, - getParentForChildren(), - isClean()); - semantics_ = null; - } - return semanticsBuilder_; - } - - // optional string startdate = 3; - private java.lang.Object startdate_ = ""; - public boolean hasStartdate() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public String getStartdate() { - java.lang.Object ref = startdate_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - startdate_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setStartdate(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000002; - startdate_ = value; - onChanged(); - return this; - } - public Builder clearStartdate() { - bitField0_ = (bitField0_ & ~0x00000002); - startdate_ = getDefaultInstance().getStartdate(); - onChanged(); - return this; - } - void setStartdate(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000002; - startdate_ = value; - onChanged(); - } - - // optional string enddate = 4; - private java.lang.Object enddate_ = ""; - public boolean hasEnddate() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - public String getEnddate() { - java.lang.Object ref = enddate_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - enddate_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setEnddate(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000004; - enddate_ = value; - onChanged(); - return this; - } - public Builder clearEnddate() { - bitField0_ = (bitField0_ & ~0x00000004); - enddate_ = getDefaultInstance().getEnddate(); - onChanged(); - return this; - } - void setEnddate(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000004; - enddate_ = value; - onChanged(); - } - - // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.RelMetadata) - } - - static { - defaultInstance = new RelMetadata(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.RelMetadata) - } - - private static com.google.protobuf.Descriptors.Descriptor - internal_static_eu_dnetlib_data_proto_RelMetadata_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_eu_dnetlib_data_proto_RelMetadata_fieldAccessorTable; - - public static com.google.protobuf.Descriptors.FileDescriptor - getDescriptor() { - return descriptor; - } - private static com.google.protobuf.Descriptors.FileDescriptor - descriptor; - static { - java.lang.String[] descriptorData = { - "\n\021RelMetadata.proto\022\025eu.dnetlib.data.pro" + - "to\032\017FieldType.proto\"f\n\013RelMetadata\0223\n\tse" + - "mantics\030\001 \001(\0132 .eu.dnetlib.data.proto.Qu" + - "alifier\022\021\n\tstartdate\030\003 \001(\t\022\017\n\007enddate\030\004 " + - "\001(\tB*\n\025eu.dnetlib.data.protoB\021RelMetadat" + - "aProtos" - }; - com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = - new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { - public com.google.protobuf.ExtensionRegistry assignDescriptors( - com.google.protobuf.Descriptors.FileDescriptor root) { - descriptor = root; - internal_static_eu_dnetlib_data_proto_RelMetadata_descriptor = - getDescriptor().getMessageTypes().get(0); - internal_static_eu_dnetlib_data_proto_RelMetadata_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_eu_dnetlib_data_proto_RelMetadata_descriptor, - new java.lang.String[] { "Semantics", "Startdate", "Enddate", }, - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.class, - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder.class); - return null; - } - }; - com.google.protobuf.Descriptors.FileDescriptor - .internalBuildGeneratedFileFrom(descriptorData, - new com.google.protobuf.Descriptors.FileDescriptor[] { - eu.dnetlib.data.proto.FieldTypeProtos.getDescriptor(), - }, assigner); - } - - // @@protoc_insertion_point(outer_class_scope) -} diff --git a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/RelTypeProtos.java b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/RelTypeProtos.java deleted file mode 100644 index 4f4ffe04d..000000000 --- a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/RelTypeProtos.java +++ /dev/null @@ -1,228 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: RelType.proto - -package eu.dnetlib.data.proto; - -public final class RelTypeProtos { - private RelTypeProtos() {} - public static void registerAllExtensions( - com.google.protobuf.ExtensionRegistry registry) { - } - public enum RelType - implements com.google.protobuf.ProtocolMessageEnum { - datasourceOrganization(0, 1), - projectOrganization(1, 4), - resultOrganization(2, 5), - resultProject(3, 6), - resultResult(4, 9), - organizationOrganization(5, 11), - ; - - public static final int datasourceOrganization_VALUE = 1; - public static final int projectOrganization_VALUE = 4; - public static final int resultOrganization_VALUE = 5; - public static final int resultProject_VALUE = 6; - public static final int resultResult_VALUE = 9; - public static final int organizationOrganization_VALUE = 11; - - - public final int getNumber() { return value; } - - public static RelType valueOf(int value) { - switch (value) { - case 1: return datasourceOrganization; - case 4: return projectOrganization; - case 5: return resultOrganization; - case 6: return resultProject; - case 9: return resultResult; - case 11: return organizationOrganization; - default: return null; - } - } - - public static com.google.protobuf.Internal.EnumLiteMap - internalGetValueMap() { - return internalValueMap; - } - private static com.google.protobuf.Internal.EnumLiteMap - internalValueMap = - new com.google.protobuf.Internal.EnumLiteMap() { - public RelType findValueByNumber(int number) { - return RelType.valueOf(number); - } - }; - - public final com.google.protobuf.Descriptors.EnumValueDescriptor - getValueDescriptor() { - return getDescriptor().getValues().get(index); - } - public final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptorForType() { - return getDescriptor(); - } - public static final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptor() { - return eu.dnetlib.data.proto.RelTypeProtos.getDescriptor().getEnumTypes().get(0); - } - - private static final RelType[] VALUES = { - datasourceOrganization, projectOrganization, resultOrganization, resultProject, resultResult, organizationOrganization, - }; - - public static RelType valueOf( - com.google.protobuf.Descriptors.EnumValueDescriptor desc) { - if (desc.getType() != getDescriptor()) { - throw new java.lang.IllegalArgumentException( - "EnumValueDescriptor is not for this type."); - } - return VALUES[desc.getIndex()]; - } - - private final int index; - private final int value; - - private RelType(int index, int value) { - this.index = index; - this.value = value; - } - - // @@protoc_insertion_point(enum_scope:eu.dnetlib.data.proto.RelType) - } - - public enum SubRelType - implements com.google.protobuf.ProtocolMessageEnum { - provision(0, 1), - participation(1, 4), - outcome(2, 6), - similarity(3, 8), - publicationDataset(4, 9), - affiliation(5, 12), - dedup(6, 10), - dedupSimilarity(7, 11), - supplement(8, 13), - part(9, 15), - version(10, 16), - relationship(11, 17), - ; - - public static final int provision_VALUE = 1; - public static final int participation_VALUE = 4; - public static final int outcome_VALUE = 6; - public static final int similarity_VALUE = 8; - public static final int publicationDataset_VALUE = 9; - public static final int affiliation_VALUE = 12; - public static final int dedup_VALUE = 10; - public static final int dedupSimilarity_VALUE = 11; - public static final int supplement_VALUE = 13; - public static final int part_VALUE = 15; - public static final int version_VALUE = 16; - public static final int relationship_VALUE = 17; - - - public final int getNumber() { return value; } - - public static SubRelType valueOf(int value) { - switch (value) { - case 1: return provision; - case 4: return participation; - case 6: return outcome; - case 8: return similarity; - case 9: return publicationDataset; - case 12: return affiliation; - case 10: return dedup; - case 11: return dedupSimilarity; - case 13: return supplement; - case 15: return part; - case 16: return version; - case 17: return relationship; - default: return null; - } - } - - public static com.google.protobuf.Internal.EnumLiteMap - internalGetValueMap() { - return internalValueMap; - } - private static com.google.protobuf.Internal.EnumLiteMap - internalValueMap = - new com.google.protobuf.Internal.EnumLiteMap() { - public SubRelType findValueByNumber(int number) { - return SubRelType.valueOf(number); - } - }; - - public final com.google.protobuf.Descriptors.EnumValueDescriptor - getValueDescriptor() { - return getDescriptor().getValues().get(index); - } - public final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptorForType() { - return getDescriptor(); - } - public static final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptor() { - return eu.dnetlib.data.proto.RelTypeProtos.getDescriptor().getEnumTypes().get(1); - } - - private static final SubRelType[] VALUES = { - provision, participation, outcome, similarity, publicationDataset, affiliation, dedup, dedupSimilarity, supplement, part, version, relationship, - }; - - public static SubRelType valueOf( - com.google.protobuf.Descriptors.EnumValueDescriptor desc) { - if (desc.getType() != getDescriptor()) { - throw new java.lang.IllegalArgumentException( - "EnumValueDescriptor is not for this type."); - } - return VALUES[desc.getIndex()]; - } - - private final int index; - private final int value; - - private SubRelType(int index, int value) { - this.index = index; - this.value = value; - } - - // @@protoc_insertion_point(enum_scope:eu.dnetlib.data.proto.SubRelType) - } - - - public static com.google.protobuf.Descriptors.FileDescriptor - getDescriptor() { - return descriptor; - } - private static com.google.protobuf.Descriptors.FileDescriptor - descriptor; - static { - java.lang.String[] descriptorData = { - "\n\rRelType.proto\022\025eu.dnetlib.data.proto*\231" + - "\001\n\007RelType\022\032\n\026datasourceOrganization\020\001\022\027" + - "\n\023projectOrganization\020\004\022\026\n\022resultOrganiz" + - "ation\020\005\022\021\n\rresultProject\020\006\022\020\n\014resultResu" + - "lt\020\t\022\034\n\030organizationOrganization\020\013*\315\001\n\nS" + - "ubRelType\022\r\n\tprovision\020\001\022\021\n\rparticipatio" + - "n\020\004\022\013\n\007outcome\020\006\022\016\n\nsimilarity\020\010\022\026\n\022publ" + - "icationDataset\020\t\022\017\n\013affiliation\020\014\022\t\n\005ded" + - "up\020\n\022\023\n\017dedupSimilarity\020\013\022\016\n\nsupplement\020" + - "\r\022\010\n\004part\020\017\022\013\n\007version\020\020\022\020\n\014relationship", - "\020\021B&\n\025eu.dnetlib.data.protoB\rRelTypeProt" + - "os" - }; - com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = - new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { - public com.google.protobuf.ExtensionRegistry assignDescriptors( - com.google.protobuf.Descriptors.FileDescriptor root) { - descriptor = root; - return null; - } - }; - com.google.protobuf.Descriptors.FileDescriptor - .internalBuildGeneratedFileFrom(descriptorData, - new com.google.protobuf.Descriptors.FileDescriptor[] { - }, assigner); - } - - // @@protoc_insertion_point(outer_class_scope) -} diff --git a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/ResultOrganizationProtos.java b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/ResultOrganizationProtos.java deleted file mode 100644 index d551ff255..000000000 --- a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/ResultOrganizationProtos.java +++ /dev/null @@ -1,1017 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: Result_Organization.proto - -package eu.dnetlib.data.proto; - -public final class ResultOrganizationProtos { - private ResultOrganizationProtos() {} - public static void registerAllExtensions( - com.google.protobuf.ExtensionRegistry registry) { - } - public interface ResultOrganizationOrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // optional .eu.dnetlib.data.proto.ResultOrganization.Affiliation affiliation = 1; - boolean hasAffiliation(); - eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation getAffiliation(); - eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.AffiliationOrBuilder getAffiliationOrBuilder(); - } - public static final class ResultOrganization extends - com.google.protobuf.GeneratedMessage - implements ResultOrganizationOrBuilder { - // Use ResultOrganization.newBuilder() to construct. - private ResultOrganization(Builder builder) { - super(builder); - } - private ResultOrganization(boolean noInit) {} - - private static final ResultOrganization defaultInstance; - public static ResultOrganization getDefaultInstance() { - return defaultInstance; - } - - public ResultOrganization getDefaultInstanceForType() { - return defaultInstance; - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.ResultOrganizationProtos.internal_static_eu_dnetlib_data_proto_ResultOrganization_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.ResultOrganizationProtos.internal_static_eu_dnetlib_data_proto_ResultOrganization_fieldAccessorTable; - } - - public interface AffiliationOrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; - boolean hasRelMetadata(); - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata(); - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder(); - } - public static final class Affiliation extends - com.google.protobuf.GeneratedMessage - implements AffiliationOrBuilder { - // Use Affiliation.newBuilder() to construct. - private Affiliation(Builder builder) { - super(builder); - } - private Affiliation(boolean noInit) {} - - private static final Affiliation defaultInstance; - public static Affiliation getDefaultInstance() { - return defaultInstance; - } - - public Affiliation getDefaultInstanceForType() { - return defaultInstance; - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.ResultOrganizationProtos.internal_static_eu_dnetlib_data_proto_ResultOrganization_Affiliation_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.ResultOrganizationProtos.internal_static_eu_dnetlib_data_proto_ResultOrganization_Affiliation_fieldAccessorTable; - } - - public enum RelName - implements com.google.protobuf.ProtocolMessageEnum { - isAuthorInstitutionOf(0, 1), - hasAuthorInstitution(1, 2), - ; - - public static final int isAuthorInstitutionOf_VALUE = 1; - public static final int hasAuthorInstitution_VALUE = 2; - - - public final int getNumber() { return value; } - - public static RelName valueOf(int value) { - switch (value) { - case 1: return isAuthorInstitutionOf; - case 2: return hasAuthorInstitution; - default: return null; - } - } - - public static com.google.protobuf.Internal.EnumLiteMap - internalGetValueMap() { - return internalValueMap; - } - private static com.google.protobuf.Internal.EnumLiteMap - internalValueMap = - new com.google.protobuf.Internal.EnumLiteMap() { - public RelName findValueByNumber(int number) { - return RelName.valueOf(number); - } - }; - - public final com.google.protobuf.Descriptors.EnumValueDescriptor - getValueDescriptor() { - return getDescriptor().getValues().get(index); - } - public final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptorForType() { - return getDescriptor(); - } - public static final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptor() { - return eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation.getDescriptor().getEnumTypes().get(0); - } - - private static final RelName[] VALUES = { - isAuthorInstitutionOf, hasAuthorInstitution, - }; - - public static RelName valueOf( - com.google.protobuf.Descriptors.EnumValueDescriptor desc) { - if (desc.getType() != getDescriptor()) { - throw new java.lang.IllegalArgumentException( - "EnumValueDescriptor is not for this type."); - } - return VALUES[desc.getIndex()]; - } - - private final int index; - private final int value; - - private RelName(int index, int value) { - this.index = index; - this.value = value; - } - - // @@protoc_insertion_point(enum_scope:eu.dnetlib.data.proto.ResultOrganization.Affiliation.RelName) - } - - private int bitField0_; - // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; - public static final int RELMETADATA_FIELD_NUMBER = 1; - private eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata relMetadata_; - public boolean hasRelMetadata() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata() { - return relMetadata_; - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder() { - return relMetadata_; - } - - private void initFields() { - relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - if (!hasRelMetadata()) { - memoizedIsInitialized = 0; - return false; - } - if (!getRelMetadata().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeMessage(1, relMetadata_); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(1, relMetadata_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder - implements eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.AffiliationOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.ResultOrganizationProtos.internal_static_eu_dnetlib_data_proto_ResultOrganization_Affiliation_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.ResultOrganizationProtos.internal_static_eu_dnetlib_data_proto_ResultOrganization_Affiliation_fieldAccessorTable; - } - - // Construct using eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - getRelMetadataFieldBuilder(); - } - } - private static Builder create() { - return new Builder(); - } - - public Builder clear() { - super.clear(); - if (relMetadataBuilder_ == null) { - relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); - } else { - relMetadataBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation.getDescriptor(); - } - - public eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation getDefaultInstanceForType() { - return eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation.getDefaultInstance(); - } - - public eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation build() { - eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - private eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return result; - } - - public eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation buildPartial() { - eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation result = new eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - if (relMetadataBuilder_ == null) { - result.relMetadata_ = relMetadata_; - } else { - result.relMetadata_ = relMetadataBuilder_.build(); - } - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation) { - return mergeFrom((eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation other) { - if (other == eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation.getDefaultInstance()) return this; - if (other.hasRelMetadata()) { - mergeRelMetadata(other.getRelMetadata()); - } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - - public final boolean isInitialized() { - if (!hasRelMetadata()) { - - return false; - } - if (!getRelMetadata().isInitialized()) { - - return false; - } - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - } - break; - } - case 10: { - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder subBuilder = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.newBuilder(); - if (hasRelMetadata()) { - subBuilder.mergeFrom(getRelMetadata()); - } - input.readMessage(subBuilder, extensionRegistry); - setRelMetadata(subBuilder.buildPartial()); - break; - } - } - } - } - - private int bitField0_; - - // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; - private eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder> relMetadataBuilder_; - public boolean hasRelMetadata() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata() { - if (relMetadataBuilder_ == null) { - return relMetadata_; - } else { - return relMetadataBuilder_.getMessage(); - } - } - public Builder setRelMetadata(eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata value) { - if (relMetadataBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - relMetadata_ = value; - onChanged(); - } else { - relMetadataBuilder_.setMessage(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder setRelMetadata( - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder builderForValue) { - if (relMetadataBuilder_ == null) { - relMetadata_ = builderForValue.build(); - onChanged(); - } else { - relMetadataBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder mergeRelMetadata(eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata value) { - if (relMetadataBuilder_ == null) { - if (((bitField0_ & 0x00000001) == 0x00000001) && - relMetadata_ != eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance()) { - relMetadata_ = - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.newBuilder(relMetadata_).mergeFrom(value).buildPartial(); - } else { - relMetadata_ = value; - } - onChanged(); - } else { - relMetadataBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder clearRelMetadata() { - if (relMetadataBuilder_ == null) { - relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); - onChanged(); - } else { - relMetadataBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder getRelMetadataBuilder() { - bitField0_ |= 0x00000001; - onChanged(); - return getRelMetadataFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder() { - if (relMetadataBuilder_ != null) { - return relMetadataBuilder_.getMessageOrBuilder(); - } else { - return relMetadata_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder> - getRelMetadataFieldBuilder() { - if (relMetadataBuilder_ == null) { - relMetadataBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder>( - relMetadata_, - getParentForChildren(), - isClean()); - relMetadata_ = null; - } - return relMetadataBuilder_; - } - - // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.ResultOrganization.Affiliation) - } - - static { - defaultInstance = new Affiliation(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.ResultOrganization.Affiliation) - } - - private int bitField0_; - // optional .eu.dnetlib.data.proto.ResultOrganization.Affiliation affiliation = 1; - public static final int AFFILIATION_FIELD_NUMBER = 1; - private eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation affiliation_; - public boolean hasAffiliation() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation getAffiliation() { - return affiliation_; - } - public eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.AffiliationOrBuilder getAffiliationOrBuilder() { - return affiliation_; - } - - private void initFields() { - affiliation_ = eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation.getDefaultInstance(); - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - if (hasAffiliation()) { - if (!getAffiliation().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeMessage(1, affiliation_); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(1, affiliation_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder - implements eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganizationOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.ResultOrganizationProtos.internal_static_eu_dnetlib_data_proto_ResultOrganization_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.ResultOrganizationProtos.internal_static_eu_dnetlib_data_proto_ResultOrganization_fieldAccessorTable; - } - - // Construct using eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - getAffiliationFieldBuilder(); - } - } - private static Builder create() { - return new Builder(); - } - - public Builder clear() { - super.clear(); - if (affiliationBuilder_ == null) { - affiliation_ = eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation.getDefaultInstance(); - } else { - affiliationBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.getDescriptor(); - } - - public eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization getDefaultInstanceForType() { - return eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.getDefaultInstance(); - } - - public eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization build() { - eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - private eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return result; - } - - public eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization buildPartial() { - eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization result = new eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - if (affiliationBuilder_ == null) { - result.affiliation_ = affiliation_; - } else { - result.affiliation_ = affiliationBuilder_.build(); - } - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization) { - return mergeFrom((eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization other) { - if (other == eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.getDefaultInstance()) return this; - if (other.hasAffiliation()) { - mergeAffiliation(other.getAffiliation()); - } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - - public final boolean isInitialized() { - if (hasAffiliation()) { - if (!getAffiliation().isInitialized()) { - - return false; - } - } - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - } - break; - } - case 10: { - eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation.Builder subBuilder = eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation.newBuilder(); - if (hasAffiliation()) { - subBuilder.mergeFrom(getAffiliation()); - } - input.readMessage(subBuilder, extensionRegistry); - setAffiliation(subBuilder.buildPartial()); - break; - } - } - } - } - - private int bitField0_; - - // optional .eu.dnetlib.data.proto.ResultOrganization.Affiliation affiliation = 1; - private eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation affiliation_ = eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation, eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation.Builder, eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.AffiliationOrBuilder> affiliationBuilder_; - public boolean hasAffiliation() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation getAffiliation() { - if (affiliationBuilder_ == null) { - return affiliation_; - } else { - return affiliationBuilder_.getMessage(); - } - } - public Builder setAffiliation(eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation value) { - if (affiliationBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - affiliation_ = value; - onChanged(); - } else { - affiliationBuilder_.setMessage(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder setAffiliation( - eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation.Builder builderForValue) { - if (affiliationBuilder_ == null) { - affiliation_ = builderForValue.build(); - onChanged(); - } else { - affiliationBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder mergeAffiliation(eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation value) { - if (affiliationBuilder_ == null) { - if (((bitField0_ & 0x00000001) == 0x00000001) && - affiliation_ != eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation.getDefaultInstance()) { - affiliation_ = - eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation.newBuilder(affiliation_).mergeFrom(value).buildPartial(); - } else { - affiliation_ = value; - } - onChanged(); - } else { - affiliationBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder clearAffiliation() { - if (affiliationBuilder_ == null) { - affiliation_ = eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation.getDefaultInstance(); - onChanged(); - } else { - affiliationBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - public eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation.Builder getAffiliationBuilder() { - bitField0_ |= 0x00000001; - onChanged(); - return getAffiliationFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.AffiliationOrBuilder getAffiliationOrBuilder() { - if (affiliationBuilder_ != null) { - return affiliationBuilder_.getMessageOrBuilder(); - } else { - return affiliation_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation, eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation.Builder, eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.AffiliationOrBuilder> - getAffiliationFieldBuilder() { - if (affiliationBuilder_ == null) { - affiliationBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation, eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation.Builder, eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.AffiliationOrBuilder>( - affiliation_, - getParentForChildren(), - isClean()); - affiliation_ = null; - } - return affiliationBuilder_; - } - - // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.ResultOrganization) - } - - static { - defaultInstance = new ResultOrganization(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.ResultOrganization) - } - - private static com.google.protobuf.Descriptors.Descriptor - internal_static_eu_dnetlib_data_proto_ResultOrganization_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_eu_dnetlib_data_proto_ResultOrganization_fieldAccessorTable; - private static com.google.protobuf.Descriptors.Descriptor - internal_static_eu_dnetlib_data_proto_ResultOrganization_Affiliation_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_eu_dnetlib_data_proto_ResultOrganization_Affiliation_fieldAccessorTable; - - public static com.google.protobuf.Descriptors.FileDescriptor - getDescriptor() { - return descriptor; - } - private static com.google.protobuf.Descriptors.FileDescriptor - descriptor; - static { - java.lang.String[] descriptorData = { - "\n\031Result_Organization.proto\022\025eu.dnetlib." + - "data.proto\032\021RelMetadata.proto\"\351\001\n\022Result" + - "Organization\022J\n\013affiliation\030\001 \001(\01325.eu.d" + - "netlib.data.proto.ResultOrganization.Aff" + - "iliation\032\206\001\n\013Affiliation\0227\n\013relMetadata\030" + - "\001 \002(\0132\".eu.dnetlib.data.proto.RelMetadat" + - "a\">\n\007RelName\022\031\n\025isAuthorInstitutionOf\020\001\022" + - "\030\n\024hasAuthorInstitution\020\002B1\n\025eu.dnetlib." + - "data.protoB\030ResultOrganizationProtos" - }; - com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = - new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { - public com.google.protobuf.ExtensionRegistry assignDescriptors( - com.google.protobuf.Descriptors.FileDescriptor root) { - descriptor = root; - internal_static_eu_dnetlib_data_proto_ResultOrganization_descriptor = - getDescriptor().getMessageTypes().get(0); - internal_static_eu_dnetlib_data_proto_ResultOrganization_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_eu_dnetlib_data_proto_ResultOrganization_descriptor, - new java.lang.String[] { "Affiliation", }, - eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.class, - eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Builder.class); - internal_static_eu_dnetlib_data_proto_ResultOrganization_Affiliation_descriptor = - internal_static_eu_dnetlib_data_proto_ResultOrganization_descriptor.getNestedTypes().get(0); - internal_static_eu_dnetlib_data_proto_ResultOrganization_Affiliation_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_eu_dnetlib_data_proto_ResultOrganization_Affiliation_descriptor, - new java.lang.String[] { "RelMetadata", }, - eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation.class, - eu.dnetlib.data.proto.ResultOrganizationProtos.ResultOrganization.Affiliation.Builder.class); - return null; - } - }; - com.google.protobuf.Descriptors.FileDescriptor - .internalBuildGeneratedFileFrom(descriptorData, - new com.google.protobuf.Descriptors.FileDescriptor[] { - eu.dnetlib.data.proto.RelMetadataProtos.getDescriptor(), - }, assigner); - } - - // @@protoc_insertion_point(outer_class_scope) -} diff --git a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/ResultProjectProtos.java b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/ResultProjectProtos.java deleted file mode 100644 index 0e7948e49..000000000 --- a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/ResultProjectProtos.java +++ /dev/null @@ -1,1016 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: Result_Project.proto - -package eu.dnetlib.data.proto; - -public final class ResultProjectProtos { - private ResultProjectProtos() {} - public static void registerAllExtensions( - com.google.protobuf.ExtensionRegistry registry) { - } - public interface ResultProjectOrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // optional .eu.dnetlib.data.proto.ResultProject.Outcome outcome = 1; - boolean hasOutcome(); - eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome getOutcome(); - eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.OutcomeOrBuilder getOutcomeOrBuilder(); - } - public static final class ResultProject extends - com.google.protobuf.GeneratedMessage - implements ResultProjectOrBuilder { - // Use ResultProject.newBuilder() to construct. - private ResultProject(Builder builder) { - super(builder); - } - private ResultProject(boolean noInit) {} - - private static final ResultProject defaultInstance; - public static ResultProject getDefaultInstance() { - return defaultInstance; - } - - public ResultProject getDefaultInstanceForType() { - return defaultInstance; - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.ResultProjectProtos.internal_static_eu_dnetlib_data_proto_ResultProject_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.ResultProjectProtos.internal_static_eu_dnetlib_data_proto_ResultProject_fieldAccessorTable; - } - - public interface OutcomeOrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; - boolean hasRelMetadata(); - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata(); - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder(); - } - public static final class Outcome extends - com.google.protobuf.GeneratedMessage - implements OutcomeOrBuilder { - // Use Outcome.newBuilder() to construct. - private Outcome(Builder builder) { - super(builder); - } - private Outcome(boolean noInit) {} - - private static final Outcome defaultInstance; - public static Outcome getDefaultInstance() { - return defaultInstance; - } - - public Outcome getDefaultInstanceForType() { - return defaultInstance; - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.ResultProjectProtos.internal_static_eu_dnetlib_data_proto_ResultProject_Outcome_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.ResultProjectProtos.internal_static_eu_dnetlib_data_proto_ResultProject_Outcome_fieldAccessorTable; - } - - public enum RelName - implements com.google.protobuf.ProtocolMessageEnum { - isProducedBy(0, 1), - produces(1, 2), - ; - - public static final int isProducedBy_VALUE = 1; - public static final int produces_VALUE = 2; - - - public final int getNumber() { return value; } - - public static RelName valueOf(int value) { - switch (value) { - case 1: return isProducedBy; - case 2: return produces; - default: return null; - } - } - - public static com.google.protobuf.Internal.EnumLiteMap - internalGetValueMap() { - return internalValueMap; - } - private static com.google.protobuf.Internal.EnumLiteMap - internalValueMap = - new com.google.protobuf.Internal.EnumLiteMap() { - public RelName findValueByNumber(int number) { - return RelName.valueOf(number); - } - }; - - public final com.google.protobuf.Descriptors.EnumValueDescriptor - getValueDescriptor() { - return getDescriptor().getValues().get(index); - } - public final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptorForType() { - return getDescriptor(); - } - public static final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptor() { - return eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome.getDescriptor().getEnumTypes().get(0); - } - - private static final RelName[] VALUES = { - isProducedBy, produces, - }; - - public static RelName valueOf( - com.google.protobuf.Descriptors.EnumValueDescriptor desc) { - if (desc.getType() != getDescriptor()) { - throw new java.lang.IllegalArgumentException( - "EnumValueDescriptor is not for this type."); - } - return VALUES[desc.getIndex()]; - } - - private final int index; - private final int value; - - private RelName(int index, int value) { - this.index = index; - this.value = value; - } - - // @@protoc_insertion_point(enum_scope:eu.dnetlib.data.proto.ResultProject.Outcome.RelName) - } - - private int bitField0_; - // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; - public static final int RELMETADATA_FIELD_NUMBER = 1; - private eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata relMetadata_; - public boolean hasRelMetadata() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata() { - return relMetadata_; - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder() { - return relMetadata_; - } - - private void initFields() { - relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - if (!hasRelMetadata()) { - memoizedIsInitialized = 0; - return false; - } - if (!getRelMetadata().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeMessage(1, relMetadata_); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(1, relMetadata_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder - implements eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.OutcomeOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.ResultProjectProtos.internal_static_eu_dnetlib_data_proto_ResultProject_Outcome_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.ResultProjectProtos.internal_static_eu_dnetlib_data_proto_ResultProject_Outcome_fieldAccessorTable; - } - - // Construct using eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - getRelMetadataFieldBuilder(); - } - } - private static Builder create() { - return new Builder(); - } - - public Builder clear() { - super.clear(); - if (relMetadataBuilder_ == null) { - relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); - } else { - relMetadataBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome.getDescriptor(); - } - - public eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome getDefaultInstanceForType() { - return eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome.getDefaultInstance(); - } - - public eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome build() { - eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - private eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return result; - } - - public eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome buildPartial() { - eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome result = new eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - if (relMetadataBuilder_ == null) { - result.relMetadata_ = relMetadata_; - } else { - result.relMetadata_ = relMetadataBuilder_.build(); - } - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome) { - return mergeFrom((eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome other) { - if (other == eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome.getDefaultInstance()) return this; - if (other.hasRelMetadata()) { - mergeRelMetadata(other.getRelMetadata()); - } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - - public final boolean isInitialized() { - if (!hasRelMetadata()) { - - return false; - } - if (!getRelMetadata().isInitialized()) { - - return false; - } - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - } - break; - } - case 10: { - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder subBuilder = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.newBuilder(); - if (hasRelMetadata()) { - subBuilder.mergeFrom(getRelMetadata()); - } - input.readMessage(subBuilder, extensionRegistry); - setRelMetadata(subBuilder.buildPartial()); - break; - } - } - } - } - - private int bitField0_; - - // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; - private eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder> relMetadataBuilder_; - public boolean hasRelMetadata() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata() { - if (relMetadataBuilder_ == null) { - return relMetadata_; - } else { - return relMetadataBuilder_.getMessage(); - } - } - public Builder setRelMetadata(eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata value) { - if (relMetadataBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - relMetadata_ = value; - onChanged(); - } else { - relMetadataBuilder_.setMessage(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder setRelMetadata( - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder builderForValue) { - if (relMetadataBuilder_ == null) { - relMetadata_ = builderForValue.build(); - onChanged(); - } else { - relMetadataBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder mergeRelMetadata(eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata value) { - if (relMetadataBuilder_ == null) { - if (((bitField0_ & 0x00000001) == 0x00000001) && - relMetadata_ != eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance()) { - relMetadata_ = - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.newBuilder(relMetadata_).mergeFrom(value).buildPartial(); - } else { - relMetadata_ = value; - } - onChanged(); - } else { - relMetadataBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder clearRelMetadata() { - if (relMetadataBuilder_ == null) { - relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); - onChanged(); - } else { - relMetadataBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder getRelMetadataBuilder() { - bitField0_ |= 0x00000001; - onChanged(); - return getRelMetadataFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder() { - if (relMetadataBuilder_ != null) { - return relMetadataBuilder_.getMessageOrBuilder(); - } else { - return relMetadata_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder> - getRelMetadataFieldBuilder() { - if (relMetadataBuilder_ == null) { - relMetadataBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder>( - relMetadata_, - getParentForChildren(), - isClean()); - relMetadata_ = null; - } - return relMetadataBuilder_; - } - - // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.ResultProject.Outcome) - } - - static { - defaultInstance = new Outcome(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.ResultProject.Outcome) - } - - private int bitField0_; - // optional .eu.dnetlib.data.proto.ResultProject.Outcome outcome = 1; - public static final int OUTCOME_FIELD_NUMBER = 1; - private eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome outcome_; - public boolean hasOutcome() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome getOutcome() { - return outcome_; - } - public eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.OutcomeOrBuilder getOutcomeOrBuilder() { - return outcome_; - } - - private void initFields() { - outcome_ = eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome.getDefaultInstance(); - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - if (hasOutcome()) { - if (!getOutcome().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeMessage(1, outcome_); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(1, outcome_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static eu.dnetlib.data.proto.ResultProjectProtos.ResultProject parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProjectProtos.ResultProject parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProjectProtos.ResultProject parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProjectProtos.ResultProject parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProjectProtos.ResultProject parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProjectProtos.ResultProject parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProjectProtos.ResultProject parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.ResultProjectProtos.ResultProject parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.ResultProjectProtos.ResultProject parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProjectProtos.ResultProject parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(eu.dnetlib.data.proto.ResultProjectProtos.ResultProject prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder - implements eu.dnetlib.data.proto.ResultProjectProtos.ResultProjectOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.ResultProjectProtos.internal_static_eu_dnetlib_data_proto_ResultProject_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.ResultProjectProtos.internal_static_eu_dnetlib_data_proto_ResultProject_fieldAccessorTable; - } - - // Construct using eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - getOutcomeFieldBuilder(); - } - } - private static Builder create() { - return new Builder(); - } - - public Builder clear() { - super.clear(); - if (outcomeBuilder_ == null) { - outcome_ = eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome.getDefaultInstance(); - } else { - outcomeBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.getDescriptor(); - } - - public eu.dnetlib.data.proto.ResultProjectProtos.ResultProject getDefaultInstanceForType() { - return eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.getDefaultInstance(); - } - - public eu.dnetlib.data.proto.ResultProjectProtos.ResultProject build() { - eu.dnetlib.data.proto.ResultProjectProtos.ResultProject result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - private eu.dnetlib.data.proto.ResultProjectProtos.ResultProject buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - eu.dnetlib.data.proto.ResultProjectProtos.ResultProject result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return result; - } - - public eu.dnetlib.data.proto.ResultProjectProtos.ResultProject buildPartial() { - eu.dnetlib.data.proto.ResultProjectProtos.ResultProject result = new eu.dnetlib.data.proto.ResultProjectProtos.ResultProject(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - if (outcomeBuilder_ == null) { - result.outcome_ = outcome_; - } else { - result.outcome_ = outcomeBuilder_.build(); - } - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof eu.dnetlib.data.proto.ResultProjectProtos.ResultProject) { - return mergeFrom((eu.dnetlib.data.proto.ResultProjectProtos.ResultProject)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(eu.dnetlib.data.proto.ResultProjectProtos.ResultProject other) { - if (other == eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.getDefaultInstance()) return this; - if (other.hasOutcome()) { - mergeOutcome(other.getOutcome()); - } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - - public final boolean isInitialized() { - if (hasOutcome()) { - if (!getOutcome().isInitialized()) { - - return false; - } - } - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - } - break; - } - case 10: { - eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome.Builder subBuilder = eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome.newBuilder(); - if (hasOutcome()) { - subBuilder.mergeFrom(getOutcome()); - } - input.readMessage(subBuilder, extensionRegistry); - setOutcome(subBuilder.buildPartial()); - break; - } - } - } - } - - private int bitField0_; - - // optional .eu.dnetlib.data.proto.ResultProject.Outcome outcome = 1; - private eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome outcome_ = eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome, eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome.Builder, eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.OutcomeOrBuilder> outcomeBuilder_; - public boolean hasOutcome() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome getOutcome() { - if (outcomeBuilder_ == null) { - return outcome_; - } else { - return outcomeBuilder_.getMessage(); - } - } - public Builder setOutcome(eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome value) { - if (outcomeBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - outcome_ = value; - onChanged(); - } else { - outcomeBuilder_.setMessage(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder setOutcome( - eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome.Builder builderForValue) { - if (outcomeBuilder_ == null) { - outcome_ = builderForValue.build(); - onChanged(); - } else { - outcomeBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder mergeOutcome(eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome value) { - if (outcomeBuilder_ == null) { - if (((bitField0_ & 0x00000001) == 0x00000001) && - outcome_ != eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome.getDefaultInstance()) { - outcome_ = - eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome.newBuilder(outcome_).mergeFrom(value).buildPartial(); - } else { - outcome_ = value; - } - onChanged(); - } else { - outcomeBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder clearOutcome() { - if (outcomeBuilder_ == null) { - outcome_ = eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome.getDefaultInstance(); - onChanged(); - } else { - outcomeBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - public eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome.Builder getOutcomeBuilder() { - bitField0_ |= 0x00000001; - onChanged(); - return getOutcomeFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.OutcomeOrBuilder getOutcomeOrBuilder() { - if (outcomeBuilder_ != null) { - return outcomeBuilder_.getMessageOrBuilder(); - } else { - return outcome_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome, eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome.Builder, eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.OutcomeOrBuilder> - getOutcomeFieldBuilder() { - if (outcomeBuilder_ == null) { - outcomeBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome, eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome.Builder, eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.OutcomeOrBuilder>( - outcome_, - getParentForChildren(), - isClean()); - outcome_ = null; - } - return outcomeBuilder_; - } - - // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.ResultProject) - } - - static { - defaultInstance = new ResultProject(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.ResultProject) - } - - private static com.google.protobuf.Descriptors.Descriptor - internal_static_eu_dnetlib_data_proto_ResultProject_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_eu_dnetlib_data_proto_ResultProject_fieldAccessorTable; - private static com.google.protobuf.Descriptors.Descriptor - internal_static_eu_dnetlib_data_proto_ResultProject_Outcome_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_eu_dnetlib_data_proto_ResultProject_Outcome_fieldAccessorTable; - - public static com.google.protobuf.Descriptors.FileDescriptor - getDescriptor() { - return descriptor; - } - private static com.google.protobuf.Descriptors.FileDescriptor - descriptor; - static { - java.lang.String[] descriptorData = { - "\n\024Result_Project.proto\022\025eu.dnetlib.data." + - "proto\032\021RelMetadata.proto\"\275\001\n\rResultProje" + - "ct\022=\n\007outcome\030\001 \001(\0132,.eu.dnetlib.data.pr" + - "oto.ResultProject.Outcome\032m\n\007Outcome\0227\n\013" + - "relMetadata\030\001 \002(\0132\".eu.dnetlib.data.prot" + - "o.RelMetadata\")\n\007RelName\022\020\n\014isProducedBy" + - "\020\001\022\014\n\010produces\020\002B,\n\025eu.dnetlib.data.prot" + - "oB\023ResultProjectProtos" - }; - com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = - new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { - public com.google.protobuf.ExtensionRegistry assignDescriptors( - com.google.protobuf.Descriptors.FileDescriptor root) { - descriptor = root; - internal_static_eu_dnetlib_data_proto_ResultProject_descriptor = - getDescriptor().getMessageTypes().get(0); - internal_static_eu_dnetlib_data_proto_ResultProject_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_eu_dnetlib_data_proto_ResultProject_descriptor, - new java.lang.String[] { "Outcome", }, - eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.class, - eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Builder.class); - internal_static_eu_dnetlib_data_proto_ResultProject_Outcome_descriptor = - internal_static_eu_dnetlib_data_proto_ResultProject_descriptor.getNestedTypes().get(0); - internal_static_eu_dnetlib_data_proto_ResultProject_Outcome_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_eu_dnetlib_data_proto_ResultProject_Outcome_descriptor, - new java.lang.String[] { "RelMetadata", }, - eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome.class, - eu.dnetlib.data.proto.ResultProjectProtos.ResultProject.Outcome.Builder.class); - return null; - } - }; - com.google.protobuf.Descriptors.FileDescriptor - .internalBuildGeneratedFileFrom(descriptorData, - new com.google.protobuf.Descriptors.FileDescriptor[] { - eu.dnetlib.data.proto.RelMetadataProtos.getDescriptor(), - }, assigner); - } - - // @@protoc_insertion_point(outer_class_scope) -} diff --git a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/ResultProtos.java b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/ResultProtos.java deleted file mode 100644 index 816bc203b..000000000 --- a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/ResultProtos.java +++ /dev/null @@ -1,14212 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: Result.proto - -package eu.dnetlib.data.proto; - -public final class ResultProtos { - private ResultProtos() {} - public static void registerAllExtensions( - com.google.protobuf.ExtensionRegistry registry) { - } - public interface ResultOrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // optional .eu.dnetlib.data.proto.Result.Metadata metadata = 2; - boolean hasMetadata(); - eu.dnetlib.data.proto.ResultProtos.Result.Metadata getMetadata(); - eu.dnetlib.data.proto.ResultProtos.Result.MetadataOrBuilder getMetadataOrBuilder(); - - // repeated .eu.dnetlib.data.proto.Result.Instance instance = 6; - java.util.List - getInstanceList(); - eu.dnetlib.data.proto.ResultProtos.Result.Instance getInstance(int index); - int getInstanceCount(); - java.util.List - getInstanceOrBuilderList(); - eu.dnetlib.data.proto.ResultProtos.Result.InstanceOrBuilder getInstanceOrBuilder( - int index); - - // repeated .eu.dnetlib.data.proto.Result.ExternalReference externalReference = 7; - java.util.List - getExternalReferenceList(); - eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference getExternalReference(int index); - int getExternalReferenceCount(); - java.util.List - getExternalReferenceOrBuilderList(); - eu.dnetlib.data.proto.ResultProtos.Result.ExternalReferenceOrBuilder getExternalReferenceOrBuilder( - int index); - } - public static final class Result extends - com.google.protobuf.GeneratedMessage - implements ResultOrBuilder { - // Use Result.newBuilder() to construct. - private Result(Builder builder) { - super(builder); - } - private Result(boolean noInit) {} - - private static final Result defaultInstance; - public static Result getDefaultInstance() { - return defaultInstance; - } - - public Result getDefaultInstanceForType() { - return defaultInstance; - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_fieldAccessorTable; - } - - public interface MetadataOrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // repeated .eu.dnetlib.data.proto.Author author = 40; - java.util.List - getAuthorList(); - eu.dnetlib.data.proto.FieldTypeProtos.Author getAuthor(int index); - int getAuthorCount(); - java.util.List - getAuthorOrBuilderList(); - eu.dnetlib.data.proto.FieldTypeProtos.AuthorOrBuilder getAuthorOrBuilder( - int index); - - // optional .eu.dnetlib.data.proto.Qualifier resulttype = 8; - boolean hasResulttype(); - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getResulttype(); - eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getResulttypeOrBuilder(); - - // optional .eu.dnetlib.data.proto.Qualifier language = 12; - boolean hasLanguage(); - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getLanguage(); - eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getLanguageOrBuilder(); - - // repeated .eu.dnetlib.data.proto.Qualifier country = 33; - java.util.List - getCountryList(); - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getCountry(int index); - int getCountryCount(); - java.util.List - getCountryOrBuilderList(); - eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getCountryOrBuilder( - int index); - - // repeated .eu.dnetlib.data.proto.StructuredProperty subject = 1; - java.util.List - getSubjectList(); - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty getSubject(int index); - int getSubjectCount(); - java.util.List - getSubjectOrBuilderList(); - eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder getSubjectOrBuilder( - int index); - - // repeated .eu.dnetlib.data.proto.StructuredProperty title = 2; - java.util.List - getTitleList(); - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty getTitle(int index); - int getTitleCount(); - java.util.List - getTitleOrBuilderList(); - eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder getTitleOrBuilder( - int index); - - // repeated .eu.dnetlib.data.proto.StructuredProperty relevantdate = 3; - java.util.List - getRelevantdateList(); - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty getRelevantdate(int index); - int getRelevantdateCount(); - java.util.List - getRelevantdateOrBuilderList(); - eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder getRelevantdateOrBuilder( - int index); - - // repeated .eu.dnetlib.data.proto.StringField description = 25; - java.util.List - getDescriptionList(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getDescription(int index); - int getDescriptionCount(); - java.util.List - getDescriptionOrBuilderList(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDescriptionOrBuilder( - int index); - - // optional .eu.dnetlib.data.proto.StringField dateofacceptance = 4; - boolean hasDateofacceptance(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getDateofacceptance(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDateofacceptanceOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField publisher = 5; - boolean hasPublisher(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getPublisher(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getPublisherOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField embargoenddate = 6; - boolean hasEmbargoenddate(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getEmbargoenddate(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEmbargoenddateOrBuilder(); - - // repeated .eu.dnetlib.data.proto.StringField source = 27; - java.util.List - getSourceList(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getSource(int index); - int getSourceCount(); - java.util.List - getSourceOrBuilderList(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getSourceOrBuilder( - int index); - - // repeated .eu.dnetlib.data.proto.StringField fulltext = 29; - java.util.List - getFulltextList(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getFulltext(int index); - int getFulltextCount(); - java.util.List - getFulltextOrBuilderList(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getFulltextOrBuilder( - int index); - - // repeated .eu.dnetlib.data.proto.StringField format = 21; - java.util.List - getFormatList(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getFormat(int index); - int getFormatCount(); - java.util.List - getFormatOrBuilderList(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getFormatOrBuilder( - int index); - - // repeated .eu.dnetlib.data.proto.StringField contributor = 30; - java.util.List - getContributorList(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getContributor(int index); - int getContributorCount(); - java.util.List - getContributorOrBuilderList(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getContributorOrBuilder( - int index); - - // optional .eu.dnetlib.data.proto.Qualifier resourcetype = 19; - boolean hasResourcetype(); - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getResourcetype(); - eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getResourcetypeOrBuilder(); - - // repeated .eu.dnetlib.data.proto.StringField coverage = 43; - java.util.List - getCoverageList(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getCoverage(int index); - int getCoverageCount(); - java.util.List - getCoverageOrBuilderList(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getCoverageOrBuilder( - int index); - - // repeated .eu.dnetlib.data.proto.Result.Context context = 28; - java.util.List - getContextList(); - eu.dnetlib.data.proto.ResultProtos.Result.Context getContext(int index); - int getContextCount(); - java.util.List - getContextOrBuilderList(); - eu.dnetlib.data.proto.ResultProtos.Result.ContextOrBuilder getContextOrBuilder( - int index); - - // optional .eu.dnetlib.data.proto.Result.Journal journal = 18; - boolean hasJournal(); - eu.dnetlib.data.proto.ResultProtos.Result.Journal getJournal(); - eu.dnetlib.data.proto.ResultProtos.Result.JournalOrBuilder getJournalOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField storagedate = 9; - boolean hasStoragedate(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getStoragedate(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getStoragedateOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField device = 26; - boolean hasDevice(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getDevice(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDeviceOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField size = 20; - boolean hasSize(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getSize(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getSizeOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField version = 22; - boolean hasVersion(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getVersion(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getVersionOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField lastmetadataupdate = 23; - boolean hasLastmetadataupdate(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getLastmetadataupdate(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getLastmetadataupdateOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField metadataversionnumber = 24; - boolean hasMetadataversionnumber(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getMetadataversionnumber(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getMetadataversionnumberOrBuilder(); - - // repeated .eu.dnetlib.data.proto.Result.GeoLocation geolocation = 44; - java.util.List - getGeolocationList(); - eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation getGeolocation(int index); - int getGeolocationCount(); - java.util.List - getGeolocationOrBuilderList(); - eu.dnetlib.data.proto.ResultProtos.Result.GeoLocationOrBuilder getGeolocationOrBuilder( - int index); - - // repeated .eu.dnetlib.data.proto.StringField documentationUrl = 35; - java.util.List - getDocumentationUrlList(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getDocumentationUrl(int index); - int getDocumentationUrlCount(); - java.util.List - getDocumentationUrlOrBuilderList(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDocumentationUrlOrBuilder( - int index); - - // repeated .eu.dnetlib.data.proto.StructuredProperty license = 36; - java.util.List - getLicenseList(); - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty getLicense(int index); - int getLicenseCount(); - java.util.List - getLicenseOrBuilderList(); - eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder getLicenseOrBuilder( - int index); - - // optional .eu.dnetlib.data.proto.StringField codeRepositoryUrl = 38; - boolean hasCodeRepositoryUrl(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getCodeRepositoryUrl(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getCodeRepositoryUrlOrBuilder(); - - // optional .eu.dnetlib.data.proto.Qualifier programmingLanguage = 39; - boolean hasProgrammingLanguage(); - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getProgrammingLanguage(); - eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getProgrammingLanguageOrBuilder(); - - // repeated .eu.dnetlib.data.proto.StringField contactperson = 45; - java.util.List - getContactpersonList(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getContactperson(int index); - int getContactpersonCount(); - java.util.List - getContactpersonOrBuilderList(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getContactpersonOrBuilder( - int index); - - // repeated .eu.dnetlib.data.proto.StringField contactgroup = 41; - java.util.List - getContactgroupList(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getContactgroup(int index); - int getContactgroupCount(); - java.util.List - getContactgroupOrBuilderList(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getContactgroupOrBuilder( - int index); - - // repeated .eu.dnetlib.data.proto.StringField tool = 42; - java.util.List - getToolList(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getTool(int index); - int getToolCount(); - java.util.List - getToolOrBuilderList(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getToolOrBuilder( - int index); - } - public static final class Metadata extends - com.google.protobuf.GeneratedMessage - implements MetadataOrBuilder { - // Use Metadata.newBuilder() to construct. - private Metadata(Builder builder) { - super(builder); - } - private Metadata(boolean noInit) {} - - private static final Metadata defaultInstance; - public static Metadata getDefaultInstance() { - return defaultInstance; - } - - public Metadata getDefaultInstanceForType() { - return defaultInstance; - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_Metadata_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_Metadata_fieldAccessorTable; - } - - private int bitField0_; - // repeated .eu.dnetlib.data.proto.Author author = 40; - public static final int AUTHOR_FIELD_NUMBER = 40; - private java.util.List author_; - public java.util.List getAuthorList() { - return author_; - } - public java.util.List - getAuthorOrBuilderList() { - return author_; - } - public int getAuthorCount() { - return author_.size(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.Author getAuthor(int index) { - return author_.get(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.AuthorOrBuilder getAuthorOrBuilder( - int index) { - return author_.get(index); - } - - // optional .eu.dnetlib.data.proto.Qualifier resulttype = 8; - public static final int RESULTTYPE_FIELD_NUMBER = 8; - private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier resulttype_; - public boolean hasResulttype() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getResulttype() { - return resulttype_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getResulttypeOrBuilder() { - return resulttype_; - } - - // optional .eu.dnetlib.data.proto.Qualifier language = 12; - public static final int LANGUAGE_FIELD_NUMBER = 12; - private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier language_; - public boolean hasLanguage() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getLanguage() { - return language_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getLanguageOrBuilder() { - return language_; - } - - // repeated .eu.dnetlib.data.proto.Qualifier country = 33; - public static final int COUNTRY_FIELD_NUMBER = 33; - private java.util.List country_; - public java.util.List getCountryList() { - return country_; - } - public java.util.List - getCountryOrBuilderList() { - return country_; - } - public int getCountryCount() { - return country_.size(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getCountry(int index) { - return country_.get(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getCountryOrBuilder( - int index) { - return country_.get(index); - } - - // repeated .eu.dnetlib.data.proto.StructuredProperty subject = 1; - public static final int SUBJECT_FIELD_NUMBER = 1; - private java.util.List subject_; - public java.util.List getSubjectList() { - return subject_; - } - public java.util.List - getSubjectOrBuilderList() { - return subject_; - } - public int getSubjectCount() { - return subject_.size(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty getSubject(int index) { - return subject_.get(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder getSubjectOrBuilder( - int index) { - return subject_.get(index); - } - - // repeated .eu.dnetlib.data.proto.StructuredProperty title = 2; - public static final int TITLE_FIELD_NUMBER = 2; - private java.util.List title_; - public java.util.List getTitleList() { - return title_; - } - public java.util.List - getTitleOrBuilderList() { - return title_; - } - public int getTitleCount() { - return title_.size(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty getTitle(int index) { - return title_.get(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder getTitleOrBuilder( - int index) { - return title_.get(index); - } - - // repeated .eu.dnetlib.data.proto.StructuredProperty relevantdate = 3; - public static final int RELEVANTDATE_FIELD_NUMBER = 3; - private java.util.List relevantdate_; - public java.util.List getRelevantdateList() { - return relevantdate_; - } - public java.util.List - getRelevantdateOrBuilderList() { - return relevantdate_; - } - public int getRelevantdateCount() { - return relevantdate_.size(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty getRelevantdate(int index) { - return relevantdate_.get(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder getRelevantdateOrBuilder( - int index) { - return relevantdate_.get(index); - } - - // repeated .eu.dnetlib.data.proto.StringField description = 25; - public static final int DESCRIPTION_FIELD_NUMBER = 25; - private java.util.List description_; - public java.util.List getDescriptionList() { - return description_; - } - public java.util.List - getDescriptionOrBuilderList() { - return description_; - } - public int getDescriptionCount() { - return description_.size(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getDescription(int index) { - return description_.get(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDescriptionOrBuilder( - int index) { - return description_.get(index); - } - - // optional .eu.dnetlib.data.proto.StringField dateofacceptance = 4; - public static final int DATEOFACCEPTANCE_FIELD_NUMBER = 4; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField dateofacceptance_; - public boolean hasDateofacceptance() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getDateofacceptance() { - return dateofacceptance_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDateofacceptanceOrBuilder() { - return dateofacceptance_; - } - - // optional .eu.dnetlib.data.proto.StringField publisher = 5; - public static final int PUBLISHER_FIELD_NUMBER = 5; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField publisher_; - public boolean hasPublisher() { - return ((bitField0_ & 0x00000008) == 0x00000008); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getPublisher() { - return publisher_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getPublisherOrBuilder() { - return publisher_; - } - - // optional .eu.dnetlib.data.proto.StringField embargoenddate = 6; - public static final int EMBARGOENDDATE_FIELD_NUMBER = 6; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField embargoenddate_; - public boolean hasEmbargoenddate() { - return ((bitField0_ & 0x00000010) == 0x00000010); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEmbargoenddate() { - return embargoenddate_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEmbargoenddateOrBuilder() { - return embargoenddate_; - } - - // repeated .eu.dnetlib.data.proto.StringField source = 27; - public static final int SOURCE_FIELD_NUMBER = 27; - private java.util.List source_; - public java.util.List getSourceList() { - return source_; - } - public java.util.List - getSourceOrBuilderList() { - return source_; - } - public int getSourceCount() { - return source_.size(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getSource(int index) { - return source_.get(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getSourceOrBuilder( - int index) { - return source_.get(index); - } - - // repeated .eu.dnetlib.data.proto.StringField fulltext = 29; - public static final int FULLTEXT_FIELD_NUMBER = 29; - private java.util.List fulltext_; - public java.util.List getFulltextList() { - return fulltext_; - } - public java.util.List - getFulltextOrBuilderList() { - return fulltext_; - } - public int getFulltextCount() { - return fulltext_.size(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getFulltext(int index) { - return fulltext_.get(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getFulltextOrBuilder( - int index) { - return fulltext_.get(index); - } - - // repeated .eu.dnetlib.data.proto.StringField format = 21; - public static final int FORMAT_FIELD_NUMBER = 21; - private java.util.List format_; - public java.util.List getFormatList() { - return format_; - } - public java.util.List - getFormatOrBuilderList() { - return format_; - } - public int getFormatCount() { - return format_.size(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getFormat(int index) { - return format_.get(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getFormatOrBuilder( - int index) { - return format_.get(index); - } - - // repeated .eu.dnetlib.data.proto.StringField contributor = 30; - public static final int CONTRIBUTOR_FIELD_NUMBER = 30; - private java.util.List contributor_; - public java.util.List getContributorList() { - return contributor_; - } - public java.util.List - getContributorOrBuilderList() { - return contributor_; - } - public int getContributorCount() { - return contributor_.size(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getContributor(int index) { - return contributor_.get(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getContributorOrBuilder( - int index) { - return contributor_.get(index); - } - - // optional .eu.dnetlib.data.proto.Qualifier resourcetype = 19; - public static final int RESOURCETYPE_FIELD_NUMBER = 19; - private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier resourcetype_; - public boolean hasResourcetype() { - return ((bitField0_ & 0x00000020) == 0x00000020); - } - public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getResourcetype() { - return resourcetype_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getResourcetypeOrBuilder() { - return resourcetype_; - } - - // repeated .eu.dnetlib.data.proto.StringField coverage = 43; - public static final int COVERAGE_FIELD_NUMBER = 43; - private java.util.List coverage_; - public java.util.List getCoverageList() { - return coverage_; - } - public java.util.List - getCoverageOrBuilderList() { - return coverage_; - } - public int getCoverageCount() { - return coverage_.size(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getCoverage(int index) { - return coverage_.get(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getCoverageOrBuilder( - int index) { - return coverage_.get(index); - } - - // repeated .eu.dnetlib.data.proto.Result.Context context = 28; - public static final int CONTEXT_FIELD_NUMBER = 28; - private java.util.List context_; - public java.util.List getContextList() { - return context_; - } - public java.util.List - getContextOrBuilderList() { - return context_; - } - public int getContextCount() { - return context_.size(); - } - public eu.dnetlib.data.proto.ResultProtos.Result.Context getContext(int index) { - return context_.get(index); - } - public eu.dnetlib.data.proto.ResultProtos.Result.ContextOrBuilder getContextOrBuilder( - int index) { - return context_.get(index); - } - - // optional .eu.dnetlib.data.proto.Result.Journal journal = 18; - public static final int JOURNAL_FIELD_NUMBER = 18; - private eu.dnetlib.data.proto.ResultProtos.Result.Journal journal_; - public boolean hasJournal() { - return ((bitField0_ & 0x00000040) == 0x00000040); - } - public eu.dnetlib.data.proto.ResultProtos.Result.Journal getJournal() { - return journal_; - } - public eu.dnetlib.data.proto.ResultProtos.Result.JournalOrBuilder getJournalOrBuilder() { - return journal_; - } - - // optional .eu.dnetlib.data.proto.StringField storagedate = 9; - public static final int STORAGEDATE_FIELD_NUMBER = 9; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField storagedate_; - public boolean hasStoragedate() { - return ((bitField0_ & 0x00000080) == 0x00000080); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getStoragedate() { - return storagedate_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getStoragedateOrBuilder() { - return storagedate_; - } - - // optional .eu.dnetlib.data.proto.StringField device = 26; - public static final int DEVICE_FIELD_NUMBER = 26; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField device_; - public boolean hasDevice() { - return ((bitField0_ & 0x00000100) == 0x00000100); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getDevice() { - return device_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDeviceOrBuilder() { - return device_; - } - - // optional .eu.dnetlib.data.proto.StringField size = 20; - public static final int SIZE_FIELD_NUMBER = 20; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField size_; - public boolean hasSize() { - return ((bitField0_ & 0x00000200) == 0x00000200); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getSize() { - return size_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getSizeOrBuilder() { - return size_; - } - - // optional .eu.dnetlib.data.proto.StringField version = 22; - public static final int VERSION_FIELD_NUMBER = 22; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField version_; - public boolean hasVersion() { - return ((bitField0_ & 0x00000400) == 0x00000400); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getVersion() { - return version_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getVersionOrBuilder() { - return version_; - } - - // optional .eu.dnetlib.data.proto.StringField lastmetadataupdate = 23; - public static final int LASTMETADATAUPDATE_FIELD_NUMBER = 23; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField lastmetadataupdate_; - public boolean hasLastmetadataupdate() { - return ((bitField0_ & 0x00000800) == 0x00000800); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getLastmetadataupdate() { - return lastmetadataupdate_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getLastmetadataupdateOrBuilder() { - return lastmetadataupdate_; - } - - // optional .eu.dnetlib.data.proto.StringField metadataversionnumber = 24; - public static final int METADATAVERSIONNUMBER_FIELD_NUMBER = 24; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField metadataversionnumber_; - public boolean hasMetadataversionnumber() { - return ((bitField0_ & 0x00001000) == 0x00001000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getMetadataversionnumber() { - return metadataversionnumber_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getMetadataversionnumberOrBuilder() { - return metadataversionnumber_; - } - - // repeated .eu.dnetlib.data.proto.Result.GeoLocation geolocation = 44; - public static final int GEOLOCATION_FIELD_NUMBER = 44; - private java.util.List geolocation_; - public java.util.List getGeolocationList() { - return geolocation_; - } - public java.util.List - getGeolocationOrBuilderList() { - return geolocation_; - } - public int getGeolocationCount() { - return geolocation_.size(); - } - public eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation getGeolocation(int index) { - return geolocation_.get(index); - } - public eu.dnetlib.data.proto.ResultProtos.Result.GeoLocationOrBuilder getGeolocationOrBuilder( - int index) { - return geolocation_.get(index); - } - - // repeated .eu.dnetlib.data.proto.StringField documentationUrl = 35; - public static final int DOCUMENTATIONURL_FIELD_NUMBER = 35; - private java.util.List documentationUrl_; - public java.util.List getDocumentationUrlList() { - return documentationUrl_; - } - public java.util.List - getDocumentationUrlOrBuilderList() { - return documentationUrl_; - } - public int getDocumentationUrlCount() { - return documentationUrl_.size(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getDocumentationUrl(int index) { - return documentationUrl_.get(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDocumentationUrlOrBuilder( - int index) { - return documentationUrl_.get(index); - } - - // repeated .eu.dnetlib.data.proto.StructuredProperty license = 36; - public static final int LICENSE_FIELD_NUMBER = 36; - private java.util.List license_; - public java.util.List getLicenseList() { - return license_; - } - public java.util.List - getLicenseOrBuilderList() { - return license_; - } - public int getLicenseCount() { - return license_.size(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty getLicense(int index) { - return license_.get(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder getLicenseOrBuilder( - int index) { - return license_.get(index); - } - - // optional .eu.dnetlib.data.proto.StringField codeRepositoryUrl = 38; - public static final int CODEREPOSITORYURL_FIELD_NUMBER = 38; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField codeRepositoryUrl_; - public boolean hasCodeRepositoryUrl() { - return ((bitField0_ & 0x00002000) == 0x00002000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getCodeRepositoryUrl() { - return codeRepositoryUrl_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getCodeRepositoryUrlOrBuilder() { - return codeRepositoryUrl_; - } - - // optional .eu.dnetlib.data.proto.Qualifier programmingLanguage = 39; - public static final int PROGRAMMINGLANGUAGE_FIELD_NUMBER = 39; - private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier programmingLanguage_; - public boolean hasProgrammingLanguage() { - return ((bitField0_ & 0x00004000) == 0x00004000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getProgrammingLanguage() { - return programmingLanguage_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getProgrammingLanguageOrBuilder() { - return programmingLanguage_; - } - - // repeated .eu.dnetlib.data.proto.StringField contactperson = 45; - public static final int CONTACTPERSON_FIELD_NUMBER = 45; - private java.util.List contactperson_; - public java.util.List getContactpersonList() { - return contactperson_; - } - public java.util.List - getContactpersonOrBuilderList() { - return contactperson_; - } - public int getContactpersonCount() { - return contactperson_.size(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getContactperson(int index) { - return contactperson_.get(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getContactpersonOrBuilder( - int index) { - return contactperson_.get(index); - } - - // repeated .eu.dnetlib.data.proto.StringField contactgroup = 41; - public static final int CONTACTGROUP_FIELD_NUMBER = 41; - private java.util.List contactgroup_; - public java.util.List getContactgroupList() { - return contactgroup_; - } - public java.util.List - getContactgroupOrBuilderList() { - return contactgroup_; - } - public int getContactgroupCount() { - return contactgroup_.size(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getContactgroup(int index) { - return contactgroup_.get(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getContactgroupOrBuilder( - int index) { - return contactgroup_.get(index); - } - - // repeated .eu.dnetlib.data.proto.StringField tool = 42; - public static final int TOOL_FIELD_NUMBER = 42; - private java.util.List tool_; - public java.util.List getToolList() { - return tool_; - } - public java.util.List - getToolOrBuilderList() { - return tool_; - } - public int getToolCount() { - return tool_.size(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getTool(int index) { - return tool_.get(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getToolOrBuilder( - int index) { - return tool_.get(index); - } - - private void initFields() { - author_ = java.util.Collections.emptyList(); - resulttype_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - language_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - country_ = java.util.Collections.emptyList(); - subject_ = java.util.Collections.emptyList(); - title_ = java.util.Collections.emptyList(); - relevantdate_ = java.util.Collections.emptyList(); - description_ = java.util.Collections.emptyList(); - dateofacceptance_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - publisher_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - embargoenddate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - source_ = java.util.Collections.emptyList(); - fulltext_ = java.util.Collections.emptyList(); - format_ = java.util.Collections.emptyList(); - contributor_ = java.util.Collections.emptyList(); - resourcetype_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - coverage_ = java.util.Collections.emptyList(); - context_ = java.util.Collections.emptyList(); - journal_ = eu.dnetlib.data.proto.ResultProtos.Result.Journal.getDefaultInstance(); - storagedate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - device_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - size_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - version_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - lastmetadataupdate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - metadataversionnumber_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - geolocation_ = java.util.Collections.emptyList(); - documentationUrl_ = java.util.Collections.emptyList(); - license_ = java.util.Collections.emptyList(); - codeRepositoryUrl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - programmingLanguage_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - contactperson_ = java.util.Collections.emptyList(); - contactgroup_ = java.util.Collections.emptyList(); - tool_ = java.util.Collections.emptyList(); - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - for (int i = 0; i < getAuthorCount(); i++) { - if (!getAuthor(i).isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasResulttype()) { - if (!getResulttype().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasLanguage()) { - if (!getLanguage().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - for (int i = 0; i < getCountryCount(); i++) { - if (!getCountry(i).isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - for (int i = 0; i < getSubjectCount(); i++) { - if (!getSubject(i).isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - for (int i = 0; i < getTitleCount(); i++) { - if (!getTitle(i).isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - for (int i = 0; i < getRelevantdateCount(); i++) { - if (!getRelevantdate(i).isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - for (int i = 0; i < getDescriptionCount(); i++) { - if (!getDescription(i).isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasDateofacceptance()) { - if (!getDateofacceptance().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasPublisher()) { - if (!getPublisher().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasEmbargoenddate()) { - if (!getEmbargoenddate().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - for (int i = 0; i < getSourceCount(); i++) { - if (!getSource(i).isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - for (int i = 0; i < getFulltextCount(); i++) { - if (!getFulltext(i).isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - for (int i = 0; i < getFormatCount(); i++) { - if (!getFormat(i).isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - for (int i = 0; i < getContributorCount(); i++) { - if (!getContributor(i).isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasResourcetype()) { - if (!getResourcetype().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - for (int i = 0; i < getCoverageCount(); i++) { - if (!getCoverage(i).isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - for (int i = 0; i < getContextCount(); i++) { - if (!getContext(i).isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasJournal()) { - if (!getJournal().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasStoragedate()) { - if (!getStoragedate().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasDevice()) { - if (!getDevice().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasSize()) { - if (!getSize().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasVersion()) { - if (!getVersion().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasLastmetadataupdate()) { - if (!getLastmetadataupdate().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasMetadataversionnumber()) { - if (!getMetadataversionnumber().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - for (int i = 0; i < getDocumentationUrlCount(); i++) { - if (!getDocumentationUrl(i).isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - for (int i = 0; i < getLicenseCount(); i++) { - if (!getLicense(i).isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasCodeRepositoryUrl()) { - if (!getCodeRepositoryUrl().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasProgrammingLanguage()) { - if (!getProgrammingLanguage().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - for (int i = 0; i < getContactpersonCount(); i++) { - if (!getContactperson(i).isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - for (int i = 0; i < getContactgroupCount(); i++) { - if (!getContactgroup(i).isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - for (int i = 0; i < getToolCount(); i++) { - if (!getTool(i).isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - for (int i = 0; i < subject_.size(); i++) { - output.writeMessage(1, subject_.get(i)); - } - for (int i = 0; i < title_.size(); i++) { - output.writeMessage(2, title_.get(i)); - } - for (int i = 0; i < relevantdate_.size(); i++) { - output.writeMessage(3, relevantdate_.get(i)); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - output.writeMessage(4, dateofacceptance_); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - output.writeMessage(5, publisher_); - } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - output.writeMessage(6, embargoenddate_); - } - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeMessage(8, resulttype_); - } - if (((bitField0_ & 0x00000080) == 0x00000080)) { - output.writeMessage(9, storagedate_); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - output.writeMessage(12, language_); - } - if (((bitField0_ & 0x00000040) == 0x00000040)) { - output.writeMessage(18, journal_); - } - if (((bitField0_ & 0x00000020) == 0x00000020)) { - output.writeMessage(19, resourcetype_); - } - if (((bitField0_ & 0x00000200) == 0x00000200)) { - output.writeMessage(20, size_); - } - for (int i = 0; i < format_.size(); i++) { - output.writeMessage(21, format_.get(i)); - } - if (((bitField0_ & 0x00000400) == 0x00000400)) { - output.writeMessage(22, version_); - } - if (((bitField0_ & 0x00000800) == 0x00000800)) { - output.writeMessage(23, lastmetadataupdate_); - } - if (((bitField0_ & 0x00001000) == 0x00001000)) { - output.writeMessage(24, metadataversionnumber_); - } - for (int i = 0; i < description_.size(); i++) { - output.writeMessage(25, description_.get(i)); - } - if (((bitField0_ & 0x00000100) == 0x00000100)) { - output.writeMessage(26, device_); - } - for (int i = 0; i < source_.size(); i++) { - output.writeMessage(27, source_.get(i)); - } - for (int i = 0; i < context_.size(); i++) { - output.writeMessage(28, context_.get(i)); - } - for (int i = 0; i < fulltext_.size(); i++) { - output.writeMessage(29, fulltext_.get(i)); - } - for (int i = 0; i < contributor_.size(); i++) { - output.writeMessage(30, contributor_.get(i)); - } - for (int i = 0; i < country_.size(); i++) { - output.writeMessage(33, country_.get(i)); - } - for (int i = 0; i < documentationUrl_.size(); i++) { - output.writeMessage(35, documentationUrl_.get(i)); - } - for (int i = 0; i < license_.size(); i++) { - output.writeMessage(36, license_.get(i)); - } - if (((bitField0_ & 0x00002000) == 0x00002000)) { - output.writeMessage(38, codeRepositoryUrl_); - } - if (((bitField0_ & 0x00004000) == 0x00004000)) { - output.writeMessage(39, programmingLanguage_); - } - for (int i = 0; i < author_.size(); i++) { - output.writeMessage(40, author_.get(i)); - } - for (int i = 0; i < contactgroup_.size(); i++) { - output.writeMessage(41, contactgroup_.get(i)); - } - for (int i = 0; i < tool_.size(); i++) { - output.writeMessage(42, tool_.get(i)); - } - for (int i = 0; i < coverage_.size(); i++) { - output.writeMessage(43, coverage_.get(i)); - } - for (int i = 0; i < geolocation_.size(); i++) { - output.writeMessage(44, geolocation_.get(i)); - } - for (int i = 0; i < contactperson_.size(); i++) { - output.writeMessage(45, contactperson_.get(i)); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - for (int i = 0; i < subject_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(1, subject_.get(i)); - } - for (int i = 0; i < title_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(2, title_.get(i)); - } - for (int i = 0; i < relevantdate_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(3, relevantdate_.get(i)); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(4, dateofacceptance_); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(5, publisher_); - } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(6, embargoenddate_); - } - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(8, resulttype_); - } - if (((bitField0_ & 0x00000080) == 0x00000080)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(9, storagedate_); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(12, language_); - } - if (((bitField0_ & 0x00000040) == 0x00000040)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(18, journal_); - } - if (((bitField0_ & 0x00000020) == 0x00000020)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(19, resourcetype_); - } - if (((bitField0_ & 0x00000200) == 0x00000200)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(20, size_); - } - for (int i = 0; i < format_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(21, format_.get(i)); - } - if (((bitField0_ & 0x00000400) == 0x00000400)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(22, version_); - } - if (((bitField0_ & 0x00000800) == 0x00000800)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(23, lastmetadataupdate_); - } - if (((bitField0_ & 0x00001000) == 0x00001000)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(24, metadataversionnumber_); - } - for (int i = 0; i < description_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(25, description_.get(i)); - } - if (((bitField0_ & 0x00000100) == 0x00000100)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(26, device_); - } - for (int i = 0; i < source_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(27, source_.get(i)); - } - for (int i = 0; i < context_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(28, context_.get(i)); - } - for (int i = 0; i < fulltext_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(29, fulltext_.get(i)); - } - for (int i = 0; i < contributor_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(30, contributor_.get(i)); - } - for (int i = 0; i < country_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(33, country_.get(i)); - } - for (int i = 0; i < documentationUrl_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(35, documentationUrl_.get(i)); - } - for (int i = 0; i < license_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(36, license_.get(i)); - } - if (((bitField0_ & 0x00002000) == 0x00002000)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(38, codeRepositoryUrl_); - } - if (((bitField0_ & 0x00004000) == 0x00004000)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(39, programmingLanguage_); - } - for (int i = 0; i < author_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(40, author_.get(i)); - } - for (int i = 0; i < contactgroup_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(41, contactgroup_.get(i)); - } - for (int i = 0; i < tool_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(42, tool_.get(i)); - } - for (int i = 0; i < coverage_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(43, coverage_.get(i)); - } - for (int i = 0; i < geolocation_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(44, geolocation_.get(i)); - } - for (int i = 0; i < contactperson_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(45, contactperson_.get(i)); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static eu.dnetlib.data.proto.ResultProtos.Result.Metadata parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProtos.Result.Metadata parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProtos.Result.Metadata parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProtos.Result.Metadata parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProtos.Result.Metadata parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProtos.Result.Metadata parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProtos.Result.Metadata parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.ResultProtos.Result.Metadata parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.ResultProtos.Result.Metadata parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProtos.Result.Metadata parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(eu.dnetlib.data.proto.ResultProtos.Result.Metadata prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder - implements eu.dnetlib.data.proto.ResultProtos.Result.MetadataOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_Metadata_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_Metadata_fieldAccessorTable; - } - - // Construct using eu.dnetlib.data.proto.ResultProtos.Result.Metadata.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - getAuthorFieldBuilder(); - getResulttypeFieldBuilder(); - getLanguageFieldBuilder(); - getCountryFieldBuilder(); - getSubjectFieldBuilder(); - getTitleFieldBuilder(); - getRelevantdateFieldBuilder(); - getDescriptionFieldBuilder(); - getDateofacceptanceFieldBuilder(); - getPublisherFieldBuilder(); - getEmbargoenddateFieldBuilder(); - getSourceFieldBuilder(); - getFulltextFieldBuilder(); - getFormatFieldBuilder(); - getContributorFieldBuilder(); - getResourcetypeFieldBuilder(); - getCoverageFieldBuilder(); - getContextFieldBuilder(); - getJournalFieldBuilder(); - getStoragedateFieldBuilder(); - getDeviceFieldBuilder(); - getSizeFieldBuilder(); - getVersionFieldBuilder(); - getLastmetadataupdateFieldBuilder(); - getMetadataversionnumberFieldBuilder(); - getGeolocationFieldBuilder(); - getDocumentationUrlFieldBuilder(); - getLicenseFieldBuilder(); - getCodeRepositoryUrlFieldBuilder(); - getProgrammingLanguageFieldBuilder(); - getContactpersonFieldBuilder(); - getContactgroupFieldBuilder(); - getToolFieldBuilder(); - } - } - private static Builder create() { - return new Builder(); - } - - public Builder clear() { - super.clear(); - if (authorBuilder_ == null) { - author_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000001); - } else { - authorBuilder_.clear(); - } - if (resulttypeBuilder_ == null) { - resulttype_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - } else { - resulttypeBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000002); - if (languageBuilder_ == null) { - language_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - } else { - languageBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000004); - if (countryBuilder_ == null) { - country_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000008); - } else { - countryBuilder_.clear(); - } - if (subjectBuilder_ == null) { - subject_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000010); - } else { - subjectBuilder_.clear(); - } - if (titleBuilder_ == null) { - title_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000020); - } else { - titleBuilder_.clear(); - } - if (relevantdateBuilder_ == null) { - relevantdate_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000040); - } else { - relevantdateBuilder_.clear(); - } - if (descriptionBuilder_ == null) { - description_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000080); - } else { - descriptionBuilder_.clear(); - } - if (dateofacceptanceBuilder_ == null) { - dateofacceptance_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - dateofacceptanceBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000100); - if (publisherBuilder_ == null) { - publisher_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - publisherBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000200); - if (embargoenddateBuilder_ == null) { - embargoenddate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - embargoenddateBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000400); - if (sourceBuilder_ == null) { - source_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000800); - } else { - sourceBuilder_.clear(); - } - if (fulltextBuilder_ == null) { - fulltext_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00001000); - } else { - fulltextBuilder_.clear(); - } - if (formatBuilder_ == null) { - format_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00002000); - } else { - formatBuilder_.clear(); - } - if (contributorBuilder_ == null) { - contributor_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00004000); - } else { - contributorBuilder_.clear(); - } - if (resourcetypeBuilder_ == null) { - resourcetype_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - } else { - resourcetypeBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00008000); - if (coverageBuilder_ == null) { - coverage_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00010000); - } else { - coverageBuilder_.clear(); - } - if (contextBuilder_ == null) { - context_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00020000); - } else { - contextBuilder_.clear(); - } - if (journalBuilder_ == null) { - journal_ = eu.dnetlib.data.proto.ResultProtos.Result.Journal.getDefaultInstance(); - } else { - journalBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00040000); - if (storagedateBuilder_ == null) { - storagedate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - storagedateBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00080000); - if (deviceBuilder_ == null) { - device_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - deviceBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00100000); - if (sizeBuilder_ == null) { - size_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - sizeBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00200000); - if (versionBuilder_ == null) { - version_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - versionBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00400000); - if (lastmetadataupdateBuilder_ == null) { - lastmetadataupdate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - lastmetadataupdateBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00800000); - if (metadataversionnumberBuilder_ == null) { - metadataversionnumber_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - metadataversionnumberBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x01000000); - if (geolocationBuilder_ == null) { - geolocation_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x02000000); - } else { - geolocationBuilder_.clear(); - } - if (documentationUrlBuilder_ == null) { - documentationUrl_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x04000000); - } else { - documentationUrlBuilder_.clear(); - } - if (licenseBuilder_ == null) { - license_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x08000000); - } else { - licenseBuilder_.clear(); - } - if (codeRepositoryUrlBuilder_ == null) { - codeRepositoryUrl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - codeRepositoryUrlBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x10000000); - if (programmingLanguageBuilder_ == null) { - programmingLanguage_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - } else { - programmingLanguageBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x20000000); - if (contactpersonBuilder_ == null) { - contactperson_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x40000000); - } else { - contactpersonBuilder_.clear(); - } - if (contactgroupBuilder_ == null) { - contactgroup_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x80000000); - } else { - contactgroupBuilder_.clear(); - } - if (toolBuilder_ == null) { - tool_ = java.util.Collections.emptyList(); - bitField1_ = (bitField1_ & ~0x00000001); - } else { - toolBuilder_.clear(); - } - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return eu.dnetlib.data.proto.ResultProtos.Result.Metadata.getDescriptor(); - } - - public eu.dnetlib.data.proto.ResultProtos.Result.Metadata getDefaultInstanceForType() { - return eu.dnetlib.data.proto.ResultProtos.Result.Metadata.getDefaultInstance(); - } - - public eu.dnetlib.data.proto.ResultProtos.Result.Metadata build() { - eu.dnetlib.data.proto.ResultProtos.Result.Metadata result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - private eu.dnetlib.data.proto.ResultProtos.Result.Metadata buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - eu.dnetlib.data.proto.ResultProtos.Result.Metadata result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return result; - } - - public eu.dnetlib.data.proto.ResultProtos.Result.Metadata buildPartial() { - eu.dnetlib.data.proto.ResultProtos.Result.Metadata result = new eu.dnetlib.data.proto.ResultProtos.Result.Metadata(this); - int from_bitField0_ = bitField0_; - int from_bitField1_ = bitField1_; - int to_bitField0_ = 0; - if (authorBuilder_ == null) { - if (((bitField0_ & 0x00000001) == 0x00000001)) { - author_ = java.util.Collections.unmodifiableList(author_); - bitField0_ = (bitField0_ & ~0x00000001); - } - result.author_ = author_; - } else { - result.author_ = authorBuilder_.build(); - } - if (((from_bitField0_ & 0x00000002) == 0x00000002)) { - to_bitField0_ |= 0x00000001; - } - if (resulttypeBuilder_ == null) { - result.resulttype_ = resulttype_; - } else { - result.resulttype_ = resulttypeBuilder_.build(); - } - if (((from_bitField0_ & 0x00000004) == 0x00000004)) { - to_bitField0_ |= 0x00000002; - } - if (languageBuilder_ == null) { - result.language_ = language_; - } else { - result.language_ = languageBuilder_.build(); - } - if (countryBuilder_ == null) { - if (((bitField0_ & 0x00000008) == 0x00000008)) { - country_ = java.util.Collections.unmodifiableList(country_); - bitField0_ = (bitField0_ & ~0x00000008); - } - result.country_ = country_; - } else { - result.country_ = countryBuilder_.build(); - } - if (subjectBuilder_ == null) { - if (((bitField0_ & 0x00000010) == 0x00000010)) { - subject_ = java.util.Collections.unmodifiableList(subject_); - bitField0_ = (bitField0_ & ~0x00000010); - } - result.subject_ = subject_; - } else { - result.subject_ = subjectBuilder_.build(); - } - if (titleBuilder_ == null) { - if (((bitField0_ & 0x00000020) == 0x00000020)) { - title_ = java.util.Collections.unmodifiableList(title_); - bitField0_ = (bitField0_ & ~0x00000020); - } - result.title_ = title_; - } else { - result.title_ = titleBuilder_.build(); - } - if (relevantdateBuilder_ == null) { - if (((bitField0_ & 0x00000040) == 0x00000040)) { - relevantdate_ = java.util.Collections.unmodifiableList(relevantdate_); - bitField0_ = (bitField0_ & ~0x00000040); - } - result.relevantdate_ = relevantdate_; - } else { - result.relevantdate_ = relevantdateBuilder_.build(); - } - if (descriptionBuilder_ == null) { - if (((bitField0_ & 0x00000080) == 0x00000080)) { - description_ = java.util.Collections.unmodifiableList(description_); - bitField0_ = (bitField0_ & ~0x00000080); - } - result.description_ = description_; - } else { - result.description_ = descriptionBuilder_.build(); - } - if (((from_bitField0_ & 0x00000100) == 0x00000100)) { - to_bitField0_ |= 0x00000004; - } - if (dateofacceptanceBuilder_ == null) { - result.dateofacceptance_ = dateofacceptance_; - } else { - result.dateofacceptance_ = dateofacceptanceBuilder_.build(); - } - if (((from_bitField0_ & 0x00000200) == 0x00000200)) { - to_bitField0_ |= 0x00000008; - } - if (publisherBuilder_ == null) { - result.publisher_ = publisher_; - } else { - result.publisher_ = publisherBuilder_.build(); - } - if (((from_bitField0_ & 0x00000400) == 0x00000400)) { - to_bitField0_ |= 0x00000010; - } - if (embargoenddateBuilder_ == null) { - result.embargoenddate_ = embargoenddate_; - } else { - result.embargoenddate_ = embargoenddateBuilder_.build(); - } - if (sourceBuilder_ == null) { - if (((bitField0_ & 0x00000800) == 0x00000800)) { - source_ = java.util.Collections.unmodifiableList(source_); - bitField0_ = (bitField0_ & ~0x00000800); - } - result.source_ = source_; - } else { - result.source_ = sourceBuilder_.build(); - } - if (fulltextBuilder_ == null) { - if (((bitField0_ & 0x00001000) == 0x00001000)) { - fulltext_ = java.util.Collections.unmodifiableList(fulltext_); - bitField0_ = (bitField0_ & ~0x00001000); - } - result.fulltext_ = fulltext_; - } else { - result.fulltext_ = fulltextBuilder_.build(); - } - if (formatBuilder_ == null) { - if (((bitField0_ & 0x00002000) == 0x00002000)) { - format_ = java.util.Collections.unmodifiableList(format_); - bitField0_ = (bitField0_ & ~0x00002000); - } - result.format_ = format_; - } else { - result.format_ = formatBuilder_.build(); - } - if (contributorBuilder_ == null) { - if (((bitField0_ & 0x00004000) == 0x00004000)) { - contributor_ = java.util.Collections.unmodifiableList(contributor_); - bitField0_ = (bitField0_ & ~0x00004000); - } - result.contributor_ = contributor_; - } else { - result.contributor_ = contributorBuilder_.build(); - } - if (((from_bitField0_ & 0x00008000) == 0x00008000)) { - to_bitField0_ |= 0x00000020; - } - if (resourcetypeBuilder_ == null) { - result.resourcetype_ = resourcetype_; - } else { - result.resourcetype_ = resourcetypeBuilder_.build(); - } - if (coverageBuilder_ == null) { - if (((bitField0_ & 0x00010000) == 0x00010000)) { - coverage_ = java.util.Collections.unmodifiableList(coverage_); - bitField0_ = (bitField0_ & ~0x00010000); - } - result.coverage_ = coverage_; - } else { - result.coverage_ = coverageBuilder_.build(); - } - if (contextBuilder_ == null) { - if (((bitField0_ & 0x00020000) == 0x00020000)) { - context_ = java.util.Collections.unmodifiableList(context_); - bitField0_ = (bitField0_ & ~0x00020000); - } - result.context_ = context_; - } else { - result.context_ = contextBuilder_.build(); - } - if (((from_bitField0_ & 0x00040000) == 0x00040000)) { - to_bitField0_ |= 0x00000040; - } - if (journalBuilder_ == null) { - result.journal_ = journal_; - } else { - result.journal_ = journalBuilder_.build(); - } - if (((from_bitField0_ & 0x00080000) == 0x00080000)) { - to_bitField0_ |= 0x00000080; - } - if (storagedateBuilder_ == null) { - result.storagedate_ = storagedate_; - } else { - result.storagedate_ = storagedateBuilder_.build(); - } - if (((from_bitField0_ & 0x00100000) == 0x00100000)) { - to_bitField0_ |= 0x00000100; - } - if (deviceBuilder_ == null) { - result.device_ = device_; - } else { - result.device_ = deviceBuilder_.build(); - } - if (((from_bitField0_ & 0x00200000) == 0x00200000)) { - to_bitField0_ |= 0x00000200; - } - if (sizeBuilder_ == null) { - result.size_ = size_; - } else { - result.size_ = sizeBuilder_.build(); - } - if (((from_bitField0_ & 0x00400000) == 0x00400000)) { - to_bitField0_ |= 0x00000400; - } - if (versionBuilder_ == null) { - result.version_ = version_; - } else { - result.version_ = versionBuilder_.build(); - } - if (((from_bitField0_ & 0x00800000) == 0x00800000)) { - to_bitField0_ |= 0x00000800; - } - if (lastmetadataupdateBuilder_ == null) { - result.lastmetadataupdate_ = lastmetadataupdate_; - } else { - result.lastmetadataupdate_ = lastmetadataupdateBuilder_.build(); - } - if (((from_bitField0_ & 0x01000000) == 0x01000000)) { - to_bitField0_ |= 0x00001000; - } - if (metadataversionnumberBuilder_ == null) { - result.metadataversionnumber_ = metadataversionnumber_; - } else { - result.metadataversionnumber_ = metadataversionnumberBuilder_.build(); - } - if (geolocationBuilder_ == null) { - if (((bitField0_ & 0x02000000) == 0x02000000)) { - geolocation_ = java.util.Collections.unmodifiableList(geolocation_); - bitField0_ = (bitField0_ & ~0x02000000); - } - result.geolocation_ = geolocation_; - } else { - result.geolocation_ = geolocationBuilder_.build(); - } - if (documentationUrlBuilder_ == null) { - if (((bitField0_ & 0x04000000) == 0x04000000)) { - documentationUrl_ = java.util.Collections.unmodifiableList(documentationUrl_); - bitField0_ = (bitField0_ & ~0x04000000); - } - result.documentationUrl_ = documentationUrl_; - } else { - result.documentationUrl_ = documentationUrlBuilder_.build(); - } - if (licenseBuilder_ == null) { - if (((bitField0_ & 0x08000000) == 0x08000000)) { - license_ = java.util.Collections.unmodifiableList(license_); - bitField0_ = (bitField0_ & ~0x08000000); - } - result.license_ = license_; - } else { - result.license_ = licenseBuilder_.build(); - } - if (((from_bitField0_ & 0x10000000) == 0x10000000)) { - to_bitField0_ |= 0x00002000; - } - if (codeRepositoryUrlBuilder_ == null) { - result.codeRepositoryUrl_ = codeRepositoryUrl_; - } else { - result.codeRepositoryUrl_ = codeRepositoryUrlBuilder_.build(); - } - if (((from_bitField0_ & 0x20000000) == 0x20000000)) { - to_bitField0_ |= 0x00004000; - } - if (programmingLanguageBuilder_ == null) { - result.programmingLanguage_ = programmingLanguage_; - } else { - result.programmingLanguage_ = programmingLanguageBuilder_.build(); - } - if (contactpersonBuilder_ == null) { - if (((bitField0_ & 0x40000000) == 0x40000000)) { - contactperson_ = java.util.Collections.unmodifiableList(contactperson_); - bitField0_ = (bitField0_ & ~0x40000000); - } - result.contactperson_ = contactperson_; - } else { - result.contactperson_ = contactpersonBuilder_.build(); - } - if (contactgroupBuilder_ == null) { - if (((bitField0_ & 0x80000000) == 0x80000000)) { - contactgroup_ = java.util.Collections.unmodifiableList(contactgroup_); - bitField0_ = (bitField0_ & ~0x80000000); - } - result.contactgroup_ = contactgroup_; - } else { - result.contactgroup_ = contactgroupBuilder_.build(); - } - if (toolBuilder_ == null) { - if (((bitField1_ & 0x00000001) == 0x00000001)) { - tool_ = java.util.Collections.unmodifiableList(tool_); - bitField1_ = (bitField1_ & ~0x00000001); - } - result.tool_ = tool_; - } else { - result.tool_ = toolBuilder_.build(); - } - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof eu.dnetlib.data.proto.ResultProtos.Result.Metadata) { - return mergeFrom((eu.dnetlib.data.proto.ResultProtos.Result.Metadata)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(eu.dnetlib.data.proto.ResultProtos.Result.Metadata other) { - if (other == eu.dnetlib.data.proto.ResultProtos.Result.Metadata.getDefaultInstance()) return this; - if (authorBuilder_ == null) { - if (!other.author_.isEmpty()) { - if (author_.isEmpty()) { - author_ = other.author_; - bitField0_ = (bitField0_ & ~0x00000001); - } else { - ensureAuthorIsMutable(); - author_.addAll(other.author_); - } - onChanged(); - } - } else { - if (!other.author_.isEmpty()) { - if (authorBuilder_.isEmpty()) { - authorBuilder_.dispose(); - authorBuilder_ = null; - author_ = other.author_; - bitField0_ = (bitField0_ & ~0x00000001); - authorBuilder_ = - com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? - getAuthorFieldBuilder() : null; - } else { - authorBuilder_.addAllMessages(other.author_); - } - } - } - if (other.hasResulttype()) { - mergeResulttype(other.getResulttype()); - } - if (other.hasLanguage()) { - mergeLanguage(other.getLanguage()); - } - if (countryBuilder_ == null) { - if (!other.country_.isEmpty()) { - if (country_.isEmpty()) { - country_ = other.country_; - bitField0_ = (bitField0_ & ~0x00000008); - } else { - ensureCountryIsMutable(); - country_.addAll(other.country_); - } - onChanged(); - } - } else { - if (!other.country_.isEmpty()) { - if (countryBuilder_.isEmpty()) { - countryBuilder_.dispose(); - countryBuilder_ = null; - country_ = other.country_; - bitField0_ = (bitField0_ & ~0x00000008); - countryBuilder_ = - com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? - getCountryFieldBuilder() : null; - } else { - countryBuilder_.addAllMessages(other.country_); - } - } - } - if (subjectBuilder_ == null) { - if (!other.subject_.isEmpty()) { - if (subject_.isEmpty()) { - subject_ = other.subject_; - bitField0_ = (bitField0_ & ~0x00000010); - } else { - ensureSubjectIsMutable(); - subject_.addAll(other.subject_); - } - onChanged(); - } - } else { - if (!other.subject_.isEmpty()) { - if (subjectBuilder_.isEmpty()) { - subjectBuilder_.dispose(); - subjectBuilder_ = null; - subject_ = other.subject_; - bitField0_ = (bitField0_ & ~0x00000010); - subjectBuilder_ = - com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? - getSubjectFieldBuilder() : null; - } else { - subjectBuilder_.addAllMessages(other.subject_); - } - } - } - if (titleBuilder_ == null) { - if (!other.title_.isEmpty()) { - if (title_.isEmpty()) { - title_ = other.title_; - bitField0_ = (bitField0_ & ~0x00000020); - } else { - ensureTitleIsMutable(); - title_.addAll(other.title_); - } - onChanged(); - } - } else { - if (!other.title_.isEmpty()) { - if (titleBuilder_.isEmpty()) { - titleBuilder_.dispose(); - titleBuilder_ = null; - title_ = other.title_; - bitField0_ = (bitField0_ & ~0x00000020); - titleBuilder_ = - com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? - getTitleFieldBuilder() : null; - } else { - titleBuilder_.addAllMessages(other.title_); - } - } - } - if (relevantdateBuilder_ == null) { - if (!other.relevantdate_.isEmpty()) { - if (relevantdate_.isEmpty()) { - relevantdate_ = other.relevantdate_; - bitField0_ = (bitField0_ & ~0x00000040); - } else { - ensureRelevantdateIsMutable(); - relevantdate_.addAll(other.relevantdate_); - } - onChanged(); - } - } else { - if (!other.relevantdate_.isEmpty()) { - if (relevantdateBuilder_.isEmpty()) { - relevantdateBuilder_.dispose(); - relevantdateBuilder_ = null; - relevantdate_ = other.relevantdate_; - bitField0_ = (bitField0_ & ~0x00000040); - relevantdateBuilder_ = - com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? - getRelevantdateFieldBuilder() : null; - } else { - relevantdateBuilder_.addAllMessages(other.relevantdate_); - } - } - } - if (descriptionBuilder_ == null) { - if (!other.description_.isEmpty()) { - if (description_.isEmpty()) { - description_ = other.description_; - bitField0_ = (bitField0_ & ~0x00000080); - } else { - ensureDescriptionIsMutable(); - description_.addAll(other.description_); - } - onChanged(); - } - } else { - if (!other.description_.isEmpty()) { - if (descriptionBuilder_.isEmpty()) { - descriptionBuilder_.dispose(); - descriptionBuilder_ = null; - description_ = other.description_; - bitField0_ = (bitField0_ & ~0x00000080); - descriptionBuilder_ = - com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? - getDescriptionFieldBuilder() : null; - } else { - descriptionBuilder_.addAllMessages(other.description_); - } - } - } - if (other.hasDateofacceptance()) { - mergeDateofacceptance(other.getDateofacceptance()); - } - if (other.hasPublisher()) { - mergePublisher(other.getPublisher()); - } - if (other.hasEmbargoenddate()) { - mergeEmbargoenddate(other.getEmbargoenddate()); - } - if (sourceBuilder_ == null) { - if (!other.source_.isEmpty()) { - if (source_.isEmpty()) { - source_ = other.source_; - bitField0_ = (bitField0_ & ~0x00000800); - } else { - ensureSourceIsMutable(); - source_.addAll(other.source_); - } - onChanged(); - } - } else { - if (!other.source_.isEmpty()) { - if (sourceBuilder_.isEmpty()) { - sourceBuilder_.dispose(); - sourceBuilder_ = null; - source_ = other.source_; - bitField0_ = (bitField0_ & ~0x00000800); - sourceBuilder_ = - com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? - getSourceFieldBuilder() : null; - } else { - sourceBuilder_.addAllMessages(other.source_); - } - } - } - if (fulltextBuilder_ == null) { - if (!other.fulltext_.isEmpty()) { - if (fulltext_.isEmpty()) { - fulltext_ = other.fulltext_; - bitField0_ = (bitField0_ & ~0x00001000); - } else { - ensureFulltextIsMutable(); - fulltext_.addAll(other.fulltext_); - } - onChanged(); - } - } else { - if (!other.fulltext_.isEmpty()) { - if (fulltextBuilder_.isEmpty()) { - fulltextBuilder_.dispose(); - fulltextBuilder_ = null; - fulltext_ = other.fulltext_; - bitField0_ = (bitField0_ & ~0x00001000); - fulltextBuilder_ = - com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? - getFulltextFieldBuilder() : null; - } else { - fulltextBuilder_.addAllMessages(other.fulltext_); - } - } - } - if (formatBuilder_ == null) { - if (!other.format_.isEmpty()) { - if (format_.isEmpty()) { - format_ = other.format_; - bitField0_ = (bitField0_ & ~0x00002000); - } else { - ensureFormatIsMutable(); - format_.addAll(other.format_); - } - onChanged(); - } - } else { - if (!other.format_.isEmpty()) { - if (formatBuilder_.isEmpty()) { - formatBuilder_.dispose(); - formatBuilder_ = null; - format_ = other.format_; - bitField0_ = (bitField0_ & ~0x00002000); - formatBuilder_ = - com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? - getFormatFieldBuilder() : null; - } else { - formatBuilder_.addAllMessages(other.format_); - } - } - } - if (contributorBuilder_ == null) { - if (!other.contributor_.isEmpty()) { - if (contributor_.isEmpty()) { - contributor_ = other.contributor_; - bitField0_ = (bitField0_ & ~0x00004000); - } else { - ensureContributorIsMutable(); - contributor_.addAll(other.contributor_); - } - onChanged(); - } - } else { - if (!other.contributor_.isEmpty()) { - if (contributorBuilder_.isEmpty()) { - contributorBuilder_.dispose(); - contributorBuilder_ = null; - contributor_ = other.contributor_; - bitField0_ = (bitField0_ & ~0x00004000); - contributorBuilder_ = - com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? - getContributorFieldBuilder() : null; - } else { - contributorBuilder_.addAllMessages(other.contributor_); - } - } - } - if (other.hasResourcetype()) { - mergeResourcetype(other.getResourcetype()); - } - if (coverageBuilder_ == null) { - if (!other.coverage_.isEmpty()) { - if (coverage_.isEmpty()) { - coverage_ = other.coverage_; - bitField0_ = (bitField0_ & ~0x00010000); - } else { - ensureCoverageIsMutable(); - coverage_.addAll(other.coverage_); - } - onChanged(); - } - } else { - if (!other.coverage_.isEmpty()) { - if (coverageBuilder_.isEmpty()) { - coverageBuilder_.dispose(); - coverageBuilder_ = null; - coverage_ = other.coverage_; - bitField0_ = (bitField0_ & ~0x00010000); - coverageBuilder_ = - com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? - getCoverageFieldBuilder() : null; - } else { - coverageBuilder_.addAllMessages(other.coverage_); - } - } - } - if (contextBuilder_ == null) { - if (!other.context_.isEmpty()) { - if (context_.isEmpty()) { - context_ = other.context_; - bitField0_ = (bitField0_ & ~0x00020000); - } else { - ensureContextIsMutable(); - context_.addAll(other.context_); - } - onChanged(); - } - } else { - if (!other.context_.isEmpty()) { - if (contextBuilder_.isEmpty()) { - contextBuilder_.dispose(); - contextBuilder_ = null; - context_ = other.context_; - bitField0_ = (bitField0_ & ~0x00020000); - contextBuilder_ = - com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? - getContextFieldBuilder() : null; - } else { - contextBuilder_.addAllMessages(other.context_); - } - } - } - if (other.hasJournal()) { - mergeJournal(other.getJournal()); - } - if (other.hasStoragedate()) { - mergeStoragedate(other.getStoragedate()); - } - if (other.hasDevice()) { - mergeDevice(other.getDevice()); - } - if (other.hasSize()) { - mergeSize(other.getSize()); - } - if (other.hasVersion()) { - mergeVersion(other.getVersion()); - } - if (other.hasLastmetadataupdate()) { - mergeLastmetadataupdate(other.getLastmetadataupdate()); - } - if (other.hasMetadataversionnumber()) { - mergeMetadataversionnumber(other.getMetadataversionnumber()); - } - if (geolocationBuilder_ == null) { - if (!other.geolocation_.isEmpty()) { - if (geolocation_.isEmpty()) { - geolocation_ = other.geolocation_; - bitField0_ = (bitField0_ & ~0x02000000); - } else { - ensureGeolocationIsMutable(); - geolocation_.addAll(other.geolocation_); - } - onChanged(); - } - } else { - if (!other.geolocation_.isEmpty()) { - if (geolocationBuilder_.isEmpty()) { - geolocationBuilder_.dispose(); - geolocationBuilder_ = null; - geolocation_ = other.geolocation_; - bitField0_ = (bitField0_ & ~0x02000000); - geolocationBuilder_ = - com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? - getGeolocationFieldBuilder() : null; - } else { - geolocationBuilder_.addAllMessages(other.geolocation_); - } - } - } - if (documentationUrlBuilder_ == null) { - if (!other.documentationUrl_.isEmpty()) { - if (documentationUrl_.isEmpty()) { - documentationUrl_ = other.documentationUrl_; - bitField0_ = (bitField0_ & ~0x04000000); - } else { - ensureDocumentationUrlIsMutable(); - documentationUrl_.addAll(other.documentationUrl_); - } - onChanged(); - } - } else { - if (!other.documentationUrl_.isEmpty()) { - if (documentationUrlBuilder_.isEmpty()) { - documentationUrlBuilder_.dispose(); - documentationUrlBuilder_ = null; - documentationUrl_ = other.documentationUrl_; - bitField0_ = (bitField0_ & ~0x04000000); - documentationUrlBuilder_ = - com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? - getDocumentationUrlFieldBuilder() : null; - } else { - documentationUrlBuilder_.addAllMessages(other.documentationUrl_); - } - } - } - if (licenseBuilder_ == null) { - if (!other.license_.isEmpty()) { - if (license_.isEmpty()) { - license_ = other.license_; - bitField0_ = (bitField0_ & ~0x08000000); - } else { - ensureLicenseIsMutable(); - license_.addAll(other.license_); - } - onChanged(); - } - } else { - if (!other.license_.isEmpty()) { - if (licenseBuilder_.isEmpty()) { - licenseBuilder_.dispose(); - licenseBuilder_ = null; - license_ = other.license_; - bitField0_ = (bitField0_ & ~0x08000000); - licenseBuilder_ = - com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? - getLicenseFieldBuilder() : null; - } else { - licenseBuilder_.addAllMessages(other.license_); - } - } - } - if (other.hasCodeRepositoryUrl()) { - mergeCodeRepositoryUrl(other.getCodeRepositoryUrl()); - } - if (other.hasProgrammingLanguage()) { - mergeProgrammingLanguage(other.getProgrammingLanguage()); - } - if (contactpersonBuilder_ == null) { - if (!other.contactperson_.isEmpty()) { - if (contactperson_.isEmpty()) { - contactperson_ = other.contactperson_; - bitField0_ = (bitField0_ & ~0x40000000); - } else { - ensureContactpersonIsMutable(); - contactperson_.addAll(other.contactperson_); - } - onChanged(); - } - } else { - if (!other.contactperson_.isEmpty()) { - if (contactpersonBuilder_.isEmpty()) { - contactpersonBuilder_.dispose(); - contactpersonBuilder_ = null; - contactperson_ = other.contactperson_; - bitField0_ = (bitField0_ & ~0x40000000); - contactpersonBuilder_ = - com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? - getContactpersonFieldBuilder() : null; - } else { - contactpersonBuilder_.addAllMessages(other.contactperson_); - } - } - } - if (contactgroupBuilder_ == null) { - if (!other.contactgroup_.isEmpty()) { - if (contactgroup_.isEmpty()) { - contactgroup_ = other.contactgroup_; - bitField0_ = (bitField0_ & ~0x80000000); - } else { - ensureContactgroupIsMutable(); - contactgroup_.addAll(other.contactgroup_); - } - onChanged(); - } - } else { - if (!other.contactgroup_.isEmpty()) { - if (contactgroupBuilder_.isEmpty()) { - contactgroupBuilder_.dispose(); - contactgroupBuilder_ = null; - contactgroup_ = other.contactgroup_; - bitField0_ = (bitField0_ & ~0x80000000); - contactgroupBuilder_ = - com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? - getContactgroupFieldBuilder() : null; - } else { - contactgroupBuilder_.addAllMessages(other.contactgroup_); - } - } - } - if (toolBuilder_ == null) { - if (!other.tool_.isEmpty()) { - if (tool_.isEmpty()) { - tool_ = other.tool_; - bitField1_ = (bitField1_ & ~0x00000001); - } else { - ensureToolIsMutable(); - tool_.addAll(other.tool_); - } - onChanged(); - } - } else { - if (!other.tool_.isEmpty()) { - if (toolBuilder_.isEmpty()) { - toolBuilder_.dispose(); - toolBuilder_ = null; - tool_ = other.tool_; - bitField1_ = (bitField1_ & ~0x00000001); - toolBuilder_ = - com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? - getToolFieldBuilder() : null; - } else { - toolBuilder_.addAllMessages(other.tool_); - } - } - } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - - public final boolean isInitialized() { - for (int i = 0; i < getAuthorCount(); i++) { - if (!getAuthor(i).isInitialized()) { - - return false; - } - } - if (hasResulttype()) { - if (!getResulttype().isInitialized()) { - - return false; - } - } - if (hasLanguage()) { - if (!getLanguage().isInitialized()) { - - return false; - } - } - for (int i = 0; i < getCountryCount(); i++) { - if (!getCountry(i).isInitialized()) { - - return false; - } - } - for (int i = 0; i < getSubjectCount(); i++) { - if (!getSubject(i).isInitialized()) { - - return false; - } - } - for (int i = 0; i < getTitleCount(); i++) { - if (!getTitle(i).isInitialized()) { - - return false; - } - } - for (int i = 0; i < getRelevantdateCount(); i++) { - if (!getRelevantdate(i).isInitialized()) { - - return false; - } - } - for (int i = 0; i < getDescriptionCount(); i++) { - if (!getDescription(i).isInitialized()) { - - return false; - } - } - if (hasDateofacceptance()) { - if (!getDateofacceptance().isInitialized()) { - - return false; - } - } - if (hasPublisher()) { - if (!getPublisher().isInitialized()) { - - return false; - } - } - if (hasEmbargoenddate()) { - if (!getEmbargoenddate().isInitialized()) { - - return false; - } - } - for (int i = 0; i < getSourceCount(); i++) { - if (!getSource(i).isInitialized()) { - - return false; - } - } - for (int i = 0; i < getFulltextCount(); i++) { - if (!getFulltext(i).isInitialized()) { - - return false; - } - } - for (int i = 0; i < getFormatCount(); i++) { - if (!getFormat(i).isInitialized()) { - - return false; - } - } - for (int i = 0; i < getContributorCount(); i++) { - if (!getContributor(i).isInitialized()) { - - return false; - } - } - if (hasResourcetype()) { - if (!getResourcetype().isInitialized()) { - - return false; - } - } - for (int i = 0; i < getCoverageCount(); i++) { - if (!getCoverage(i).isInitialized()) { - - return false; - } - } - for (int i = 0; i < getContextCount(); i++) { - if (!getContext(i).isInitialized()) { - - return false; - } - } - if (hasJournal()) { - if (!getJournal().isInitialized()) { - - return false; - } - } - if (hasStoragedate()) { - if (!getStoragedate().isInitialized()) { - - return false; - } - } - if (hasDevice()) { - if (!getDevice().isInitialized()) { - - return false; - } - } - if (hasSize()) { - if (!getSize().isInitialized()) { - - return false; - } - } - if (hasVersion()) { - if (!getVersion().isInitialized()) { - - return false; - } - } - if (hasLastmetadataupdate()) { - if (!getLastmetadataupdate().isInitialized()) { - - return false; - } - } - if (hasMetadataversionnumber()) { - if (!getMetadataversionnumber().isInitialized()) { - - return false; - } - } - for (int i = 0; i < getDocumentationUrlCount(); i++) { - if (!getDocumentationUrl(i).isInitialized()) { - - return false; - } - } - for (int i = 0; i < getLicenseCount(); i++) { - if (!getLicense(i).isInitialized()) { - - return false; - } - } - if (hasCodeRepositoryUrl()) { - if (!getCodeRepositoryUrl().isInitialized()) { - - return false; - } - } - if (hasProgrammingLanguage()) { - if (!getProgrammingLanguage().isInitialized()) { - - return false; - } - } - for (int i = 0; i < getContactpersonCount(); i++) { - if (!getContactperson(i).isInitialized()) { - - return false; - } - } - for (int i = 0; i < getContactgroupCount(); i++) { - if (!getContactgroup(i).isInitialized()) { - - return false; - } - } - for (int i = 0; i < getToolCount(); i++) { - if (!getTool(i).isInitialized()) { - - return false; - } - } - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - } - break; - } - case 10: { - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.newBuilder(); - input.readMessage(subBuilder, extensionRegistry); - addSubject(subBuilder.buildPartial()); - break; - } - case 18: { - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.newBuilder(); - input.readMessage(subBuilder, extensionRegistry); - addTitle(subBuilder.buildPartial()); - break; - } - case 26: { - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.newBuilder(); - input.readMessage(subBuilder, extensionRegistry); - addRelevantdate(subBuilder.buildPartial()); - break; - } - case 34: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasDateofacceptance()) { - subBuilder.mergeFrom(getDateofacceptance()); - } - input.readMessage(subBuilder, extensionRegistry); - setDateofacceptance(subBuilder.buildPartial()); - break; - } - case 42: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasPublisher()) { - subBuilder.mergeFrom(getPublisher()); - } - input.readMessage(subBuilder, extensionRegistry); - setPublisher(subBuilder.buildPartial()); - break; - } - case 50: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasEmbargoenddate()) { - subBuilder.mergeFrom(getEmbargoenddate()); - } - input.readMessage(subBuilder, extensionRegistry); - setEmbargoenddate(subBuilder.buildPartial()); - break; - } - case 66: { - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(); - if (hasResulttype()) { - subBuilder.mergeFrom(getResulttype()); - } - input.readMessage(subBuilder, extensionRegistry); - setResulttype(subBuilder.buildPartial()); - break; - } - case 74: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasStoragedate()) { - subBuilder.mergeFrom(getStoragedate()); - } - input.readMessage(subBuilder, extensionRegistry); - setStoragedate(subBuilder.buildPartial()); - break; - } - case 98: { - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(); - if (hasLanguage()) { - subBuilder.mergeFrom(getLanguage()); - } - input.readMessage(subBuilder, extensionRegistry); - setLanguage(subBuilder.buildPartial()); - break; - } - case 146: { - eu.dnetlib.data.proto.ResultProtos.Result.Journal.Builder subBuilder = eu.dnetlib.data.proto.ResultProtos.Result.Journal.newBuilder(); - if (hasJournal()) { - subBuilder.mergeFrom(getJournal()); - } - input.readMessage(subBuilder, extensionRegistry); - setJournal(subBuilder.buildPartial()); - break; - } - case 154: { - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(); - if (hasResourcetype()) { - subBuilder.mergeFrom(getResourcetype()); - } - input.readMessage(subBuilder, extensionRegistry); - setResourcetype(subBuilder.buildPartial()); - break; - } - case 162: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasSize()) { - subBuilder.mergeFrom(getSize()); - } - input.readMessage(subBuilder, extensionRegistry); - setSize(subBuilder.buildPartial()); - break; - } - case 170: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - input.readMessage(subBuilder, extensionRegistry); - addFormat(subBuilder.buildPartial()); - break; - } - case 178: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasVersion()) { - subBuilder.mergeFrom(getVersion()); - } - input.readMessage(subBuilder, extensionRegistry); - setVersion(subBuilder.buildPartial()); - break; - } - case 186: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasLastmetadataupdate()) { - subBuilder.mergeFrom(getLastmetadataupdate()); - } - input.readMessage(subBuilder, extensionRegistry); - setLastmetadataupdate(subBuilder.buildPartial()); - break; - } - case 194: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasMetadataversionnumber()) { - subBuilder.mergeFrom(getMetadataversionnumber()); - } - input.readMessage(subBuilder, extensionRegistry); - setMetadataversionnumber(subBuilder.buildPartial()); - break; - } - case 202: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - input.readMessage(subBuilder, extensionRegistry); - addDescription(subBuilder.buildPartial()); - break; - } - case 210: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasDevice()) { - subBuilder.mergeFrom(getDevice()); - } - input.readMessage(subBuilder, extensionRegistry); - setDevice(subBuilder.buildPartial()); - break; - } - case 218: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - input.readMessage(subBuilder, extensionRegistry); - addSource(subBuilder.buildPartial()); - break; - } - case 226: { - eu.dnetlib.data.proto.ResultProtos.Result.Context.Builder subBuilder = eu.dnetlib.data.proto.ResultProtos.Result.Context.newBuilder(); - input.readMessage(subBuilder, extensionRegistry); - addContext(subBuilder.buildPartial()); - break; - } - case 234: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - input.readMessage(subBuilder, extensionRegistry); - addFulltext(subBuilder.buildPartial()); - break; - } - case 242: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - input.readMessage(subBuilder, extensionRegistry); - addContributor(subBuilder.buildPartial()); - break; - } - case 266: { - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(); - input.readMessage(subBuilder, extensionRegistry); - addCountry(subBuilder.buildPartial()); - break; - } - case 282: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - input.readMessage(subBuilder, extensionRegistry); - addDocumentationUrl(subBuilder.buildPartial()); - break; - } - case 290: { - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.newBuilder(); - input.readMessage(subBuilder, extensionRegistry); - addLicense(subBuilder.buildPartial()); - break; - } - case 306: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasCodeRepositoryUrl()) { - subBuilder.mergeFrom(getCodeRepositoryUrl()); - } - input.readMessage(subBuilder, extensionRegistry); - setCodeRepositoryUrl(subBuilder.buildPartial()); - break; - } - case 314: { - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(); - if (hasProgrammingLanguage()) { - subBuilder.mergeFrom(getProgrammingLanguage()); - } - input.readMessage(subBuilder, extensionRegistry); - setProgrammingLanguage(subBuilder.buildPartial()); - break; - } - case 322: { - eu.dnetlib.data.proto.FieldTypeProtos.Author.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.Author.newBuilder(); - input.readMessage(subBuilder, extensionRegistry); - addAuthor(subBuilder.buildPartial()); - break; - } - case 330: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - input.readMessage(subBuilder, extensionRegistry); - addContactgroup(subBuilder.buildPartial()); - break; - } - case 338: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - input.readMessage(subBuilder, extensionRegistry); - addTool(subBuilder.buildPartial()); - break; - } - case 346: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - input.readMessage(subBuilder, extensionRegistry); - addCoverage(subBuilder.buildPartial()); - break; - } - case 354: { - eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation.Builder subBuilder = eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation.newBuilder(); - input.readMessage(subBuilder, extensionRegistry); - addGeolocation(subBuilder.buildPartial()); - break; - } - case 362: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - input.readMessage(subBuilder, extensionRegistry); - addContactperson(subBuilder.buildPartial()); - break; - } - } - } - } - - private int bitField0_; - private int bitField1_; - - // repeated .eu.dnetlib.data.proto.Author author = 40; - private java.util.List author_ = - java.util.Collections.emptyList(); - private void ensureAuthorIsMutable() { - if (!((bitField0_ & 0x00000001) == 0x00000001)) { - author_ = new java.util.ArrayList(author_); - bitField0_ |= 0x00000001; - } - } - - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.Author, eu.dnetlib.data.proto.FieldTypeProtos.Author.Builder, eu.dnetlib.data.proto.FieldTypeProtos.AuthorOrBuilder> authorBuilder_; - - public java.util.List getAuthorList() { - if (authorBuilder_ == null) { - return java.util.Collections.unmodifiableList(author_); - } else { - return authorBuilder_.getMessageList(); - } - } - public int getAuthorCount() { - if (authorBuilder_ == null) { - return author_.size(); - } else { - return authorBuilder_.getCount(); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.Author getAuthor(int index) { - if (authorBuilder_ == null) { - return author_.get(index); - } else { - return authorBuilder_.getMessage(index); - } - } - public Builder setAuthor( - int index, eu.dnetlib.data.proto.FieldTypeProtos.Author value) { - if (authorBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureAuthorIsMutable(); - author_.set(index, value); - onChanged(); - } else { - authorBuilder_.setMessage(index, value); - } - return this; - } - public Builder setAuthor( - int index, eu.dnetlib.data.proto.FieldTypeProtos.Author.Builder builderForValue) { - if (authorBuilder_ == null) { - ensureAuthorIsMutable(); - author_.set(index, builderForValue.build()); - onChanged(); - } else { - authorBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - public Builder addAuthor(eu.dnetlib.data.proto.FieldTypeProtos.Author value) { - if (authorBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureAuthorIsMutable(); - author_.add(value); - onChanged(); - } else { - authorBuilder_.addMessage(value); - } - return this; - } - public Builder addAuthor( - int index, eu.dnetlib.data.proto.FieldTypeProtos.Author value) { - if (authorBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureAuthorIsMutable(); - author_.add(index, value); - onChanged(); - } else { - authorBuilder_.addMessage(index, value); - } - return this; - } - public Builder addAuthor( - eu.dnetlib.data.proto.FieldTypeProtos.Author.Builder builderForValue) { - if (authorBuilder_ == null) { - ensureAuthorIsMutable(); - author_.add(builderForValue.build()); - onChanged(); - } else { - authorBuilder_.addMessage(builderForValue.build()); - } - return this; - } - public Builder addAuthor( - int index, eu.dnetlib.data.proto.FieldTypeProtos.Author.Builder builderForValue) { - if (authorBuilder_ == null) { - ensureAuthorIsMutable(); - author_.add(index, builderForValue.build()); - onChanged(); - } else { - authorBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - public Builder addAllAuthor( - java.lang.Iterable values) { - if (authorBuilder_ == null) { - ensureAuthorIsMutable(); - super.addAll(values, author_); - onChanged(); - } else { - authorBuilder_.addAllMessages(values); - } - return this; - } - public Builder clearAuthor() { - if (authorBuilder_ == null) { - author_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000001); - onChanged(); - } else { - authorBuilder_.clear(); - } - return this; - } - public Builder removeAuthor(int index) { - if (authorBuilder_ == null) { - ensureAuthorIsMutable(); - author_.remove(index); - onChanged(); - } else { - authorBuilder_.remove(index); - } - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.Author.Builder getAuthorBuilder( - int index) { - return getAuthorFieldBuilder().getBuilder(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.AuthorOrBuilder getAuthorOrBuilder( - int index) { - if (authorBuilder_ == null) { - return author_.get(index); } else { - return authorBuilder_.getMessageOrBuilder(index); - } - } - public java.util.List - getAuthorOrBuilderList() { - if (authorBuilder_ != null) { - return authorBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(author_); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.Author.Builder addAuthorBuilder() { - return getAuthorFieldBuilder().addBuilder( - eu.dnetlib.data.proto.FieldTypeProtos.Author.getDefaultInstance()); - } - public eu.dnetlib.data.proto.FieldTypeProtos.Author.Builder addAuthorBuilder( - int index) { - return getAuthorFieldBuilder().addBuilder( - index, eu.dnetlib.data.proto.FieldTypeProtos.Author.getDefaultInstance()); - } - public java.util.List - getAuthorBuilderList() { - return getAuthorFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.Author, eu.dnetlib.data.proto.FieldTypeProtos.Author.Builder, eu.dnetlib.data.proto.FieldTypeProtos.AuthorOrBuilder> - getAuthorFieldBuilder() { - if (authorBuilder_ == null) { - authorBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.Author, eu.dnetlib.data.proto.FieldTypeProtos.Author.Builder, eu.dnetlib.data.proto.FieldTypeProtos.AuthorOrBuilder>( - author_, - ((bitField0_ & 0x00000001) == 0x00000001), - getParentForChildren(), - isClean()); - author_ = null; - } - return authorBuilder_; - } - - // optional .eu.dnetlib.data.proto.Qualifier resulttype = 8; - private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier resulttype_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> resulttypeBuilder_; - public boolean hasResulttype() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getResulttype() { - if (resulttypeBuilder_ == null) { - return resulttype_; - } else { - return resulttypeBuilder_.getMessage(); - } - } - public Builder setResulttype(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { - if (resulttypeBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - resulttype_ = value; - onChanged(); - } else { - resulttypeBuilder_.setMessage(value); - } - bitField0_ |= 0x00000002; - return this; - } - public Builder setResulttype( - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder builderForValue) { - if (resulttypeBuilder_ == null) { - resulttype_ = builderForValue.build(); - onChanged(); - } else { - resulttypeBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000002; - return this; - } - public Builder mergeResulttype(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { - if (resulttypeBuilder_ == null) { - if (((bitField0_ & 0x00000002) == 0x00000002) && - resulttype_ != eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance()) { - resulttype_ = - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(resulttype_).mergeFrom(value).buildPartial(); - } else { - resulttype_ = value; - } - onChanged(); - } else { - resulttypeBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000002; - return this; - } - public Builder clearResulttype() { - if (resulttypeBuilder_ == null) { - resulttype_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - onChanged(); - } else { - resulttypeBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000002); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder getResulttypeBuilder() { - bitField0_ |= 0x00000002; - onChanged(); - return getResulttypeFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getResulttypeOrBuilder() { - if (resulttypeBuilder_ != null) { - return resulttypeBuilder_.getMessageOrBuilder(); - } else { - return resulttype_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> - getResulttypeFieldBuilder() { - if (resulttypeBuilder_ == null) { - resulttypeBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder>( - resulttype_, - getParentForChildren(), - isClean()); - resulttype_ = null; - } - return resulttypeBuilder_; - } - - // optional .eu.dnetlib.data.proto.Qualifier language = 12; - private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier language_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> languageBuilder_; - public boolean hasLanguage() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getLanguage() { - if (languageBuilder_ == null) { - return language_; - } else { - return languageBuilder_.getMessage(); - } - } - public Builder setLanguage(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { - if (languageBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - language_ = value; - onChanged(); - } else { - languageBuilder_.setMessage(value); - } - bitField0_ |= 0x00000004; - return this; - } - public Builder setLanguage( - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder builderForValue) { - if (languageBuilder_ == null) { - language_ = builderForValue.build(); - onChanged(); - } else { - languageBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000004; - return this; - } - public Builder mergeLanguage(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { - if (languageBuilder_ == null) { - if (((bitField0_ & 0x00000004) == 0x00000004) && - language_ != eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance()) { - language_ = - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(language_).mergeFrom(value).buildPartial(); - } else { - language_ = value; - } - onChanged(); - } else { - languageBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000004; - return this; - } - public Builder clearLanguage() { - if (languageBuilder_ == null) { - language_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - onChanged(); - } else { - languageBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000004); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder getLanguageBuilder() { - bitField0_ |= 0x00000004; - onChanged(); - return getLanguageFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getLanguageOrBuilder() { - if (languageBuilder_ != null) { - return languageBuilder_.getMessageOrBuilder(); - } else { - return language_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> - getLanguageFieldBuilder() { - if (languageBuilder_ == null) { - languageBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder>( - language_, - getParentForChildren(), - isClean()); - language_ = null; - } - return languageBuilder_; - } - - // repeated .eu.dnetlib.data.proto.Qualifier country = 33; - private java.util.List country_ = - java.util.Collections.emptyList(); - private void ensureCountryIsMutable() { - if (!((bitField0_ & 0x00000008) == 0x00000008)) { - country_ = new java.util.ArrayList(country_); - bitField0_ |= 0x00000008; - } - } - - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> countryBuilder_; - - public java.util.List getCountryList() { - if (countryBuilder_ == null) { - return java.util.Collections.unmodifiableList(country_); - } else { - return countryBuilder_.getMessageList(); - } - } - public int getCountryCount() { - if (countryBuilder_ == null) { - return country_.size(); - } else { - return countryBuilder_.getCount(); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getCountry(int index) { - if (countryBuilder_ == null) { - return country_.get(index); - } else { - return countryBuilder_.getMessage(index); - } - } - public Builder setCountry( - int index, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { - if (countryBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureCountryIsMutable(); - country_.set(index, value); - onChanged(); - } else { - countryBuilder_.setMessage(index, value); - } - return this; - } - public Builder setCountry( - int index, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder builderForValue) { - if (countryBuilder_ == null) { - ensureCountryIsMutable(); - country_.set(index, builderForValue.build()); - onChanged(); - } else { - countryBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - public Builder addCountry(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { - if (countryBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureCountryIsMutable(); - country_.add(value); - onChanged(); - } else { - countryBuilder_.addMessage(value); - } - return this; - } - public Builder addCountry( - int index, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { - if (countryBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureCountryIsMutable(); - country_.add(index, value); - onChanged(); - } else { - countryBuilder_.addMessage(index, value); - } - return this; - } - public Builder addCountry( - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder builderForValue) { - if (countryBuilder_ == null) { - ensureCountryIsMutable(); - country_.add(builderForValue.build()); - onChanged(); - } else { - countryBuilder_.addMessage(builderForValue.build()); - } - return this; - } - public Builder addCountry( - int index, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder builderForValue) { - if (countryBuilder_ == null) { - ensureCountryIsMutable(); - country_.add(index, builderForValue.build()); - onChanged(); - } else { - countryBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - public Builder addAllCountry( - java.lang.Iterable values) { - if (countryBuilder_ == null) { - ensureCountryIsMutable(); - super.addAll(values, country_); - onChanged(); - } else { - countryBuilder_.addAllMessages(values); - } - return this; - } - public Builder clearCountry() { - if (countryBuilder_ == null) { - country_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000008); - onChanged(); - } else { - countryBuilder_.clear(); - } - return this; - } - public Builder removeCountry(int index) { - if (countryBuilder_ == null) { - ensureCountryIsMutable(); - country_.remove(index); - onChanged(); - } else { - countryBuilder_.remove(index); - } - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder getCountryBuilder( - int index) { - return getCountryFieldBuilder().getBuilder(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getCountryOrBuilder( - int index) { - if (countryBuilder_ == null) { - return country_.get(index); } else { - return countryBuilder_.getMessageOrBuilder(index); - } - } - public java.util.List - getCountryOrBuilderList() { - if (countryBuilder_ != null) { - return countryBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(country_); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder addCountryBuilder() { - return getCountryFieldBuilder().addBuilder( - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance()); - } - public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder addCountryBuilder( - int index) { - return getCountryFieldBuilder().addBuilder( - index, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance()); - } - public java.util.List - getCountryBuilderList() { - return getCountryFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> - getCountryFieldBuilder() { - if (countryBuilder_ == null) { - countryBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder>( - country_, - ((bitField0_ & 0x00000008) == 0x00000008), - getParentForChildren(), - isClean()); - country_ = null; - } - return countryBuilder_; - } - - // repeated .eu.dnetlib.data.proto.StructuredProperty subject = 1; - private java.util.List subject_ = - java.util.Collections.emptyList(); - private void ensureSubjectIsMutable() { - if (!((bitField0_ & 0x00000010) == 0x00000010)) { - subject_ = new java.util.ArrayList(subject_); - bitField0_ |= 0x00000010; - } - } - - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder> subjectBuilder_; - - public java.util.List getSubjectList() { - if (subjectBuilder_ == null) { - return java.util.Collections.unmodifiableList(subject_); - } else { - return subjectBuilder_.getMessageList(); - } - } - public int getSubjectCount() { - if (subjectBuilder_ == null) { - return subject_.size(); - } else { - return subjectBuilder_.getCount(); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty getSubject(int index) { - if (subjectBuilder_ == null) { - return subject_.get(index); - } else { - return subjectBuilder_.getMessage(index); - } - } - public Builder setSubject( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty value) { - if (subjectBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureSubjectIsMutable(); - subject_.set(index, value); - onChanged(); - } else { - subjectBuilder_.setMessage(index, value); - } - return this; - } - public Builder setSubject( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder builderForValue) { - if (subjectBuilder_ == null) { - ensureSubjectIsMutable(); - subject_.set(index, builderForValue.build()); - onChanged(); - } else { - subjectBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - public Builder addSubject(eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty value) { - if (subjectBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureSubjectIsMutable(); - subject_.add(value); - onChanged(); - } else { - subjectBuilder_.addMessage(value); - } - return this; - } - public Builder addSubject( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty value) { - if (subjectBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureSubjectIsMutable(); - subject_.add(index, value); - onChanged(); - } else { - subjectBuilder_.addMessage(index, value); - } - return this; - } - public Builder addSubject( - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder builderForValue) { - if (subjectBuilder_ == null) { - ensureSubjectIsMutable(); - subject_.add(builderForValue.build()); - onChanged(); - } else { - subjectBuilder_.addMessage(builderForValue.build()); - } - return this; - } - public Builder addSubject( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder builderForValue) { - if (subjectBuilder_ == null) { - ensureSubjectIsMutable(); - subject_.add(index, builderForValue.build()); - onChanged(); - } else { - subjectBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - public Builder addAllSubject( - java.lang.Iterable values) { - if (subjectBuilder_ == null) { - ensureSubjectIsMutable(); - super.addAll(values, subject_); - onChanged(); - } else { - subjectBuilder_.addAllMessages(values); - } - return this; - } - public Builder clearSubject() { - if (subjectBuilder_ == null) { - subject_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000010); - onChanged(); - } else { - subjectBuilder_.clear(); - } - return this; - } - public Builder removeSubject(int index) { - if (subjectBuilder_ == null) { - ensureSubjectIsMutable(); - subject_.remove(index); - onChanged(); - } else { - subjectBuilder_.remove(index); - } - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder getSubjectBuilder( - int index) { - return getSubjectFieldBuilder().getBuilder(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder getSubjectOrBuilder( - int index) { - if (subjectBuilder_ == null) { - return subject_.get(index); } else { - return subjectBuilder_.getMessageOrBuilder(index); - } - } - public java.util.List - getSubjectOrBuilderList() { - if (subjectBuilder_ != null) { - return subjectBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(subject_); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder addSubjectBuilder() { - return getSubjectFieldBuilder().addBuilder( - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.getDefaultInstance()); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder addSubjectBuilder( - int index) { - return getSubjectFieldBuilder().addBuilder( - index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.getDefaultInstance()); - } - public java.util.List - getSubjectBuilderList() { - return getSubjectFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder> - getSubjectFieldBuilder() { - if (subjectBuilder_ == null) { - subjectBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder>( - subject_, - ((bitField0_ & 0x00000010) == 0x00000010), - getParentForChildren(), - isClean()); - subject_ = null; - } - return subjectBuilder_; - } - - // repeated .eu.dnetlib.data.proto.StructuredProperty title = 2; - private java.util.List title_ = - java.util.Collections.emptyList(); - private void ensureTitleIsMutable() { - if (!((bitField0_ & 0x00000020) == 0x00000020)) { - title_ = new java.util.ArrayList(title_); - bitField0_ |= 0x00000020; - } - } - - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder> titleBuilder_; - - public java.util.List getTitleList() { - if (titleBuilder_ == null) { - return java.util.Collections.unmodifiableList(title_); - } else { - return titleBuilder_.getMessageList(); - } - } - public int getTitleCount() { - if (titleBuilder_ == null) { - return title_.size(); - } else { - return titleBuilder_.getCount(); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty getTitle(int index) { - if (titleBuilder_ == null) { - return title_.get(index); - } else { - return titleBuilder_.getMessage(index); - } - } - public Builder setTitle( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty value) { - if (titleBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureTitleIsMutable(); - title_.set(index, value); - onChanged(); - } else { - titleBuilder_.setMessage(index, value); - } - return this; - } - public Builder setTitle( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder builderForValue) { - if (titleBuilder_ == null) { - ensureTitleIsMutable(); - title_.set(index, builderForValue.build()); - onChanged(); - } else { - titleBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - public Builder addTitle(eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty value) { - if (titleBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureTitleIsMutable(); - title_.add(value); - onChanged(); - } else { - titleBuilder_.addMessage(value); - } - return this; - } - public Builder addTitle( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty value) { - if (titleBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureTitleIsMutable(); - title_.add(index, value); - onChanged(); - } else { - titleBuilder_.addMessage(index, value); - } - return this; - } - public Builder addTitle( - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder builderForValue) { - if (titleBuilder_ == null) { - ensureTitleIsMutable(); - title_.add(builderForValue.build()); - onChanged(); - } else { - titleBuilder_.addMessage(builderForValue.build()); - } - return this; - } - public Builder addTitle( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder builderForValue) { - if (titleBuilder_ == null) { - ensureTitleIsMutable(); - title_.add(index, builderForValue.build()); - onChanged(); - } else { - titleBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - public Builder addAllTitle( - java.lang.Iterable values) { - if (titleBuilder_ == null) { - ensureTitleIsMutable(); - super.addAll(values, title_); - onChanged(); - } else { - titleBuilder_.addAllMessages(values); - } - return this; - } - public Builder clearTitle() { - if (titleBuilder_ == null) { - title_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000020); - onChanged(); - } else { - titleBuilder_.clear(); - } - return this; - } - public Builder removeTitle(int index) { - if (titleBuilder_ == null) { - ensureTitleIsMutable(); - title_.remove(index); - onChanged(); - } else { - titleBuilder_.remove(index); - } - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder getTitleBuilder( - int index) { - return getTitleFieldBuilder().getBuilder(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder getTitleOrBuilder( - int index) { - if (titleBuilder_ == null) { - return title_.get(index); } else { - return titleBuilder_.getMessageOrBuilder(index); - } - } - public java.util.List - getTitleOrBuilderList() { - if (titleBuilder_ != null) { - return titleBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(title_); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder addTitleBuilder() { - return getTitleFieldBuilder().addBuilder( - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.getDefaultInstance()); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder addTitleBuilder( - int index) { - return getTitleFieldBuilder().addBuilder( - index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.getDefaultInstance()); - } - public java.util.List - getTitleBuilderList() { - return getTitleFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder> - getTitleFieldBuilder() { - if (titleBuilder_ == null) { - titleBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder>( - title_, - ((bitField0_ & 0x00000020) == 0x00000020), - getParentForChildren(), - isClean()); - title_ = null; - } - return titleBuilder_; - } - - // repeated .eu.dnetlib.data.proto.StructuredProperty relevantdate = 3; - private java.util.List relevantdate_ = - java.util.Collections.emptyList(); - private void ensureRelevantdateIsMutable() { - if (!((bitField0_ & 0x00000040) == 0x00000040)) { - relevantdate_ = new java.util.ArrayList(relevantdate_); - bitField0_ |= 0x00000040; - } - } - - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder> relevantdateBuilder_; - - public java.util.List getRelevantdateList() { - if (relevantdateBuilder_ == null) { - return java.util.Collections.unmodifiableList(relevantdate_); - } else { - return relevantdateBuilder_.getMessageList(); - } - } - public int getRelevantdateCount() { - if (relevantdateBuilder_ == null) { - return relevantdate_.size(); - } else { - return relevantdateBuilder_.getCount(); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty getRelevantdate(int index) { - if (relevantdateBuilder_ == null) { - return relevantdate_.get(index); - } else { - return relevantdateBuilder_.getMessage(index); - } - } - public Builder setRelevantdate( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty value) { - if (relevantdateBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureRelevantdateIsMutable(); - relevantdate_.set(index, value); - onChanged(); - } else { - relevantdateBuilder_.setMessage(index, value); - } - return this; - } - public Builder setRelevantdate( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder builderForValue) { - if (relevantdateBuilder_ == null) { - ensureRelevantdateIsMutable(); - relevantdate_.set(index, builderForValue.build()); - onChanged(); - } else { - relevantdateBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - public Builder addRelevantdate(eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty value) { - if (relevantdateBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureRelevantdateIsMutable(); - relevantdate_.add(value); - onChanged(); - } else { - relevantdateBuilder_.addMessage(value); - } - return this; - } - public Builder addRelevantdate( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty value) { - if (relevantdateBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureRelevantdateIsMutable(); - relevantdate_.add(index, value); - onChanged(); - } else { - relevantdateBuilder_.addMessage(index, value); - } - return this; - } - public Builder addRelevantdate( - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder builderForValue) { - if (relevantdateBuilder_ == null) { - ensureRelevantdateIsMutable(); - relevantdate_.add(builderForValue.build()); - onChanged(); - } else { - relevantdateBuilder_.addMessage(builderForValue.build()); - } - return this; - } - public Builder addRelevantdate( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder builderForValue) { - if (relevantdateBuilder_ == null) { - ensureRelevantdateIsMutable(); - relevantdate_.add(index, builderForValue.build()); - onChanged(); - } else { - relevantdateBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - public Builder addAllRelevantdate( - java.lang.Iterable values) { - if (relevantdateBuilder_ == null) { - ensureRelevantdateIsMutable(); - super.addAll(values, relevantdate_); - onChanged(); - } else { - relevantdateBuilder_.addAllMessages(values); - } - return this; - } - public Builder clearRelevantdate() { - if (relevantdateBuilder_ == null) { - relevantdate_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000040); - onChanged(); - } else { - relevantdateBuilder_.clear(); - } - return this; - } - public Builder removeRelevantdate(int index) { - if (relevantdateBuilder_ == null) { - ensureRelevantdateIsMutable(); - relevantdate_.remove(index); - onChanged(); - } else { - relevantdateBuilder_.remove(index); - } - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder getRelevantdateBuilder( - int index) { - return getRelevantdateFieldBuilder().getBuilder(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder getRelevantdateOrBuilder( - int index) { - if (relevantdateBuilder_ == null) { - return relevantdate_.get(index); } else { - return relevantdateBuilder_.getMessageOrBuilder(index); - } - } - public java.util.List - getRelevantdateOrBuilderList() { - if (relevantdateBuilder_ != null) { - return relevantdateBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(relevantdate_); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder addRelevantdateBuilder() { - return getRelevantdateFieldBuilder().addBuilder( - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.getDefaultInstance()); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder addRelevantdateBuilder( - int index) { - return getRelevantdateFieldBuilder().addBuilder( - index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.getDefaultInstance()); - } - public java.util.List - getRelevantdateBuilderList() { - return getRelevantdateFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder> - getRelevantdateFieldBuilder() { - if (relevantdateBuilder_ == null) { - relevantdateBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder>( - relevantdate_, - ((bitField0_ & 0x00000040) == 0x00000040), - getParentForChildren(), - isClean()); - relevantdate_ = null; - } - return relevantdateBuilder_; - } - - // repeated .eu.dnetlib.data.proto.StringField description = 25; - private java.util.List description_ = - java.util.Collections.emptyList(); - private void ensureDescriptionIsMutable() { - if (!((bitField0_ & 0x00000080) == 0x00000080)) { - description_ = new java.util.ArrayList(description_); - bitField0_ |= 0x00000080; - } - } - - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> descriptionBuilder_; - - public java.util.List getDescriptionList() { - if (descriptionBuilder_ == null) { - return java.util.Collections.unmodifiableList(description_); - } else { - return descriptionBuilder_.getMessageList(); - } - } - public int getDescriptionCount() { - if (descriptionBuilder_ == null) { - return description_.size(); - } else { - return descriptionBuilder_.getCount(); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getDescription(int index) { - if (descriptionBuilder_ == null) { - return description_.get(index); - } else { - return descriptionBuilder_.getMessage(index); - } - } - public Builder setDescription( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (descriptionBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureDescriptionIsMutable(); - description_.set(index, value); - onChanged(); - } else { - descriptionBuilder_.setMessage(index, value); - } - return this; - } - public Builder setDescription( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (descriptionBuilder_ == null) { - ensureDescriptionIsMutable(); - description_.set(index, builderForValue.build()); - onChanged(); - } else { - descriptionBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - public Builder addDescription(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (descriptionBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureDescriptionIsMutable(); - description_.add(value); - onChanged(); - } else { - descriptionBuilder_.addMessage(value); - } - return this; - } - public Builder addDescription( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (descriptionBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureDescriptionIsMutable(); - description_.add(index, value); - onChanged(); - } else { - descriptionBuilder_.addMessage(index, value); - } - return this; - } - public Builder addDescription( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (descriptionBuilder_ == null) { - ensureDescriptionIsMutable(); - description_.add(builderForValue.build()); - onChanged(); - } else { - descriptionBuilder_.addMessage(builderForValue.build()); - } - return this; - } - public Builder addDescription( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (descriptionBuilder_ == null) { - ensureDescriptionIsMutable(); - description_.add(index, builderForValue.build()); - onChanged(); - } else { - descriptionBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - public Builder addAllDescription( - java.lang.Iterable values) { - if (descriptionBuilder_ == null) { - ensureDescriptionIsMutable(); - super.addAll(values, description_); - onChanged(); - } else { - descriptionBuilder_.addAllMessages(values); - } - return this; - } - public Builder clearDescription() { - if (descriptionBuilder_ == null) { - description_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000080); - onChanged(); - } else { - descriptionBuilder_.clear(); - } - return this; - } - public Builder removeDescription(int index) { - if (descriptionBuilder_ == null) { - ensureDescriptionIsMutable(); - description_.remove(index); - onChanged(); - } else { - descriptionBuilder_.remove(index); - } - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getDescriptionBuilder( - int index) { - return getDescriptionFieldBuilder().getBuilder(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDescriptionOrBuilder( - int index) { - if (descriptionBuilder_ == null) { - return description_.get(index); } else { - return descriptionBuilder_.getMessageOrBuilder(index); - } - } - public java.util.List - getDescriptionOrBuilderList() { - if (descriptionBuilder_ != null) { - return descriptionBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(description_); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addDescriptionBuilder() { - return getDescriptionFieldBuilder().addBuilder( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addDescriptionBuilder( - int index) { - return getDescriptionFieldBuilder().addBuilder( - index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); - } - public java.util.List - getDescriptionBuilderList() { - return getDescriptionFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getDescriptionFieldBuilder() { - if (descriptionBuilder_ == null) { - descriptionBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - description_, - ((bitField0_ & 0x00000080) == 0x00000080), - getParentForChildren(), - isClean()); - description_ = null; - } - return descriptionBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField dateofacceptance = 4; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField dateofacceptance_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> dateofacceptanceBuilder_; - public boolean hasDateofacceptance() { - return ((bitField0_ & 0x00000100) == 0x00000100); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getDateofacceptance() { - if (dateofacceptanceBuilder_ == null) { - return dateofacceptance_; - } else { - return dateofacceptanceBuilder_.getMessage(); - } - } - public Builder setDateofacceptance(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (dateofacceptanceBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - dateofacceptance_ = value; - onChanged(); - } else { - dateofacceptanceBuilder_.setMessage(value); - } - bitField0_ |= 0x00000100; - return this; - } - public Builder setDateofacceptance( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (dateofacceptanceBuilder_ == null) { - dateofacceptance_ = builderForValue.build(); - onChanged(); - } else { - dateofacceptanceBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000100; - return this; - } - public Builder mergeDateofacceptance(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (dateofacceptanceBuilder_ == null) { - if (((bitField0_ & 0x00000100) == 0x00000100) && - dateofacceptance_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - dateofacceptance_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(dateofacceptance_).mergeFrom(value).buildPartial(); - } else { - dateofacceptance_ = value; - } - onChanged(); - } else { - dateofacceptanceBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000100; - return this; - } - public Builder clearDateofacceptance() { - if (dateofacceptanceBuilder_ == null) { - dateofacceptance_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - dateofacceptanceBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000100); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getDateofacceptanceBuilder() { - bitField0_ |= 0x00000100; - onChanged(); - return getDateofacceptanceFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDateofacceptanceOrBuilder() { - if (dateofacceptanceBuilder_ != null) { - return dateofacceptanceBuilder_.getMessageOrBuilder(); - } else { - return dateofacceptance_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getDateofacceptanceFieldBuilder() { - if (dateofacceptanceBuilder_ == null) { - dateofacceptanceBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - dateofacceptance_, - getParentForChildren(), - isClean()); - dateofacceptance_ = null; - } - return dateofacceptanceBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField publisher = 5; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField publisher_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> publisherBuilder_; - public boolean hasPublisher() { - return ((bitField0_ & 0x00000200) == 0x00000200); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getPublisher() { - if (publisherBuilder_ == null) { - return publisher_; - } else { - return publisherBuilder_.getMessage(); - } - } - public Builder setPublisher(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (publisherBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - publisher_ = value; - onChanged(); - } else { - publisherBuilder_.setMessage(value); - } - bitField0_ |= 0x00000200; - return this; - } - public Builder setPublisher( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (publisherBuilder_ == null) { - publisher_ = builderForValue.build(); - onChanged(); - } else { - publisherBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000200; - return this; - } - public Builder mergePublisher(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (publisherBuilder_ == null) { - if (((bitField0_ & 0x00000200) == 0x00000200) && - publisher_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - publisher_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(publisher_).mergeFrom(value).buildPartial(); - } else { - publisher_ = value; - } - onChanged(); - } else { - publisherBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000200; - return this; - } - public Builder clearPublisher() { - if (publisherBuilder_ == null) { - publisher_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - publisherBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000200); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getPublisherBuilder() { - bitField0_ |= 0x00000200; - onChanged(); - return getPublisherFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getPublisherOrBuilder() { - if (publisherBuilder_ != null) { - return publisherBuilder_.getMessageOrBuilder(); - } else { - return publisher_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getPublisherFieldBuilder() { - if (publisherBuilder_ == null) { - publisherBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - publisher_, - getParentForChildren(), - isClean()); - publisher_ = null; - } - return publisherBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField embargoenddate = 6; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField embargoenddate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> embargoenddateBuilder_; - public boolean hasEmbargoenddate() { - return ((bitField0_ & 0x00000400) == 0x00000400); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getEmbargoenddate() { - if (embargoenddateBuilder_ == null) { - return embargoenddate_; - } else { - return embargoenddateBuilder_.getMessage(); - } - } - public Builder setEmbargoenddate(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (embargoenddateBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - embargoenddate_ = value; - onChanged(); - } else { - embargoenddateBuilder_.setMessage(value); - } - bitField0_ |= 0x00000400; - return this; - } - public Builder setEmbargoenddate( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (embargoenddateBuilder_ == null) { - embargoenddate_ = builderForValue.build(); - onChanged(); - } else { - embargoenddateBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000400; - return this; - } - public Builder mergeEmbargoenddate(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (embargoenddateBuilder_ == null) { - if (((bitField0_ & 0x00000400) == 0x00000400) && - embargoenddate_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - embargoenddate_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(embargoenddate_).mergeFrom(value).buildPartial(); - } else { - embargoenddate_ = value; - } - onChanged(); - } else { - embargoenddateBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000400; - return this; - } - public Builder clearEmbargoenddate() { - if (embargoenddateBuilder_ == null) { - embargoenddate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - embargoenddateBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000400); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getEmbargoenddateBuilder() { - bitField0_ |= 0x00000400; - onChanged(); - return getEmbargoenddateFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getEmbargoenddateOrBuilder() { - if (embargoenddateBuilder_ != null) { - return embargoenddateBuilder_.getMessageOrBuilder(); - } else { - return embargoenddate_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getEmbargoenddateFieldBuilder() { - if (embargoenddateBuilder_ == null) { - embargoenddateBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - embargoenddate_, - getParentForChildren(), - isClean()); - embargoenddate_ = null; - } - return embargoenddateBuilder_; - } - - // repeated .eu.dnetlib.data.proto.StringField source = 27; - private java.util.List source_ = - java.util.Collections.emptyList(); - private void ensureSourceIsMutable() { - if (!((bitField0_ & 0x00000800) == 0x00000800)) { - source_ = new java.util.ArrayList(source_); - bitField0_ |= 0x00000800; - } - } - - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> sourceBuilder_; - - public java.util.List getSourceList() { - if (sourceBuilder_ == null) { - return java.util.Collections.unmodifiableList(source_); - } else { - return sourceBuilder_.getMessageList(); - } - } - public int getSourceCount() { - if (sourceBuilder_ == null) { - return source_.size(); - } else { - return sourceBuilder_.getCount(); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getSource(int index) { - if (sourceBuilder_ == null) { - return source_.get(index); - } else { - return sourceBuilder_.getMessage(index); - } - } - public Builder setSource( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (sourceBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureSourceIsMutable(); - source_.set(index, value); - onChanged(); - } else { - sourceBuilder_.setMessage(index, value); - } - return this; - } - public Builder setSource( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (sourceBuilder_ == null) { - ensureSourceIsMutable(); - source_.set(index, builderForValue.build()); - onChanged(); - } else { - sourceBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - public Builder addSource(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (sourceBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureSourceIsMutable(); - source_.add(value); - onChanged(); - } else { - sourceBuilder_.addMessage(value); - } - return this; - } - public Builder addSource( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (sourceBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureSourceIsMutable(); - source_.add(index, value); - onChanged(); - } else { - sourceBuilder_.addMessage(index, value); - } - return this; - } - public Builder addSource( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (sourceBuilder_ == null) { - ensureSourceIsMutable(); - source_.add(builderForValue.build()); - onChanged(); - } else { - sourceBuilder_.addMessage(builderForValue.build()); - } - return this; - } - public Builder addSource( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (sourceBuilder_ == null) { - ensureSourceIsMutable(); - source_.add(index, builderForValue.build()); - onChanged(); - } else { - sourceBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - public Builder addAllSource( - java.lang.Iterable values) { - if (sourceBuilder_ == null) { - ensureSourceIsMutable(); - super.addAll(values, source_); - onChanged(); - } else { - sourceBuilder_.addAllMessages(values); - } - return this; - } - public Builder clearSource() { - if (sourceBuilder_ == null) { - source_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000800); - onChanged(); - } else { - sourceBuilder_.clear(); - } - return this; - } - public Builder removeSource(int index) { - if (sourceBuilder_ == null) { - ensureSourceIsMutable(); - source_.remove(index); - onChanged(); - } else { - sourceBuilder_.remove(index); - } - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getSourceBuilder( - int index) { - return getSourceFieldBuilder().getBuilder(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getSourceOrBuilder( - int index) { - if (sourceBuilder_ == null) { - return source_.get(index); } else { - return sourceBuilder_.getMessageOrBuilder(index); - } - } - public java.util.List - getSourceOrBuilderList() { - if (sourceBuilder_ != null) { - return sourceBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(source_); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addSourceBuilder() { - return getSourceFieldBuilder().addBuilder( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addSourceBuilder( - int index) { - return getSourceFieldBuilder().addBuilder( - index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); - } - public java.util.List - getSourceBuilderList() { - return getSourceFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getSourceFieldBuilder() { - if (sourceBuilder_ == null) { - sourceBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - source_, - ((bitField0_ & 0x00000800) == 0x00000800), - getParentForChildren(), - isClean()); - source_ = null; - } - return sourceBuilder_; - } - - // repeated .eu.dnetlib.data.proto.StringField fulltext = 29; - private java.util.List fulltext_ = - java.util.Collections.emptyList(); - private void ensureFulltextIsMutable() { - if (!((bitField0_ & 0x00001000) == 0x00001000)) { - fulltext_ = new java.util.ArrayList(fulltext_); - bitField0_ |= 0x00001000; - } - } - - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> fulltextBuilder_; - - public java.util.List getFulltextList() { - if (fulltextBuilder_ == null) { - return java.util.Collections.unmodifiableList(fulltext_); - } else { - return fulltextBuilder_.getMessageList(); - } - } - public int getFulltextCount() { - if (fulltextBuilder_ == null) { - return fulltext_.size(); - } else { - return fulltextBuilder_.getCount(); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getFulltext(int index) { - if (fulltextBuilder_ == null) { - return fulltext_.get(index); - } else { - return fulltextBuilder_.getMessage(index); - } - } - public Builder setFulltext( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (fulltextBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureFulltextIsMutable(); - fulltext_.set(index, value); - onChanged(); - } else { - fulltextBuilder_.setMessage(index, value); - } - return this; - } - public Builder setFulltext( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (fulltextBuilder_ == null) { - ensureFulltextIsMutable(); - fulltext_.set(index, builderForValue.build()); - onChanged(); - } else { - fulltextBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - public Builder addFulltext(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (fulltextBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureFulltextIsMutable(); - fulltext_.add(value); - onChanged(); - } else { - fulltextBuilder_.addMessage(value); - } - return this; - } - public Builder addFulltext( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (fulltextBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureFulltextIsMutable(); - fulltext_.add(index, value); - onChanged(); - } else { - fulltextBuilder_.addMessage(index, value); - } - return this; - } - public Builder addFulltext( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (fulltextBuilder_ == null) { - ensureFulltextIsMutable(); - fulltext_.add(builderForValue.build()); - onChanged(); - } else { - fulltextBuilder_.addMessage(builderForValue.build()); - } - return this; - } - public Builder addFulltext( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (fulltextBuilder_ == null) { - ensureFulltextIsMutable(); - fulltext_.add(index, builderForValue.build()); - onChanged(); - } else { - fulltextBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - public Builder addAllFulltext( - java.lang.Iterable values) { - if (fulltextBuilder_ == null) { - ensureFulltextIsMutable(); - super.addAll(values, fulltext_); - onChanged(); - } else { - fulltextBuilder_.addAllMessages(values); - } - return this; - } - public Builder clearFulltext() { - if (fulltextBuilder_ == null) { - fulltext_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00001000); - onChanged(); - } else { - fulltextBuilder_.clear(); - } - return this; - } - public Builder removeFulltext(int index) { - if (fulltextBuilder_ == null) { - ensureFulltextIsMutable(); - fulltext_.remove(index); - onChanged(); - } else { - fulltextBuilder_.remove(index); - } - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getFulltextBuilder( - int index) { - return getFulltextFieldBuilder().getBuilder(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getFulltextOrBuilder( - int index) { - if (fulltextBuilder_ == null) { - return fulltext_.get(index); } else { - return fulltextBuilder_.getMessageOrBuilder(index); - } - } - public java.util.List - getFulltextOrBuilderList() { - if (fulltextBuilder_ != null) { - return fulltextBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(fulltext_); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addFulltextBuilder() { - return getFulltextFieldBuilder().addBuilder( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addFulltextBuilder( - int index) { - return getFulltextFieldBuilder().addBuilder( - index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); - } - public java.util.List - getFulltextBuilderList() { - return getFulltextFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getFulltextFieldBuilder() { - if (fulltextBuilder_ == null) { - fulltextBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - fulltext_, - ((bitField0_ & 0x00001000) == 0x00001000), - getParentForChildren(), - isClean()); - fulltext_ = null; - } - return fulltextBuilder_; - } - - // repeated .eu.dnetlib.data.proto.StringField format = 21; - private java.util.List format_ = - java.util.Collections.emptyList(); - private void ensureFormatIsMutable() { - if (!((bitField0_ & 0x00002000) == 0x00002000)) { - format_ = new java.util.ArrayList(format_); - bitField0_ |= 0x00002000; - } - } - - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> formatBuilder_; - - public java.util.List getFormatList() { - if (formatBuilder_ == null) { - return java.util.Collections.unmodifiableList(format_); - } else { - return formatBuilder_.getMessageList(); - } - } - public int getFormatCount() { - if (formatBuilder_ == null) { - return format_.size(); - } else { - return formatBuilder_.getCount(); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getFormat(int index) { - if (formatBuilder_ == null) { - return format_.get(index); - } else { - return formatBuilder_.getMessage(index); - } - } - public Builder setFormat( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (formatBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureFormatIsMutable(); - format_.set(index, value); - onChanged(); - } else { - formatBuilder_.setMessage(index, value); - } - return this; - } - public Builder setFormat( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (formatBuilder_ == null) { - ensureFormatIsMutable(); - format_.set(index, builderForValue.build()); - onChanged(); - } else { - formatBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - public Builder addFormat(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (formatBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureFormatIsMutable(); - format_.add(value); - onChanged(); - } else { - formatBuilder_.addMessage(value); - } - return this; - } - public Builder addFormat( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (formatBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureFormatIsMutable(); - format_.add(index, value); - onChanged(); - } else { - formatBuilder_.addMessage(index, value); - } - return this; - } - public Builder addFormat( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (formatBuilder_ == null) { - ensureFormatIsMutable(); - format_.add(builderForValue.build()); - onChanged(); - } else { - formatBuilder_.addMessage(builderForValue.build()); - } - return this; - } - public Builder addFormat( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (formatBuilder_ == null) { - ensureFormatIsMutable(); - format_.add(index, builderForValue.build()); - onChanged(); - } else { - formatBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - public Builder addAllFormat( - java.lang.Iterable values) { - if (formatBuilder_ == null) { - ensureFormatIsMutable(); - super.addAll(values, format_); - onChanged(); - } else { - formatBuilder_.addAllMessages(values); - } - return this; - } - public Builder clearFormat() { - if (formatBuilder_ == null) { - format_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00002000); - onChanged(); - } else { - formatBuilder_.clear(); - } - return this; - } - public Builder removeFormat(int index) { - if (formatBuilder_ == null) { - ensureFormatIsMutable(); - format_.remove(index); - onChanged(); - } else { - formatBuilder_.remove(index); - } - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getFormatBuilder( - int index) { - return getFormatFieldBuilder().getBuilder(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getFormatOrBuilder( - int index) { - if (formatBuilder_ == null) { - return format_.get(index); } else { - return formatBuilder_.getMessageOrBuilder(index); - } - } - public java.util.List - getFormatOrBuilderList() { - if (formatBuilder_ != null) { - return formatBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(format_); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addFormatBuilder() { - return getFormatFieldBuilder().addBuilder( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addFormatBuilder( - int index) { - return getFormatFieldBuilder().addBuilder( - index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); - } - public java.util.List - getFormatBuilderList() { - return getFormatFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getFormatFieldBuilder() { - if (formatBuilder_ == null) { - formatBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - format_, - ((bitField0_ & 0x00002000) == 0x00002000), - getParentForChildren(), - isClean()); - format_ = null; - } - return formatBuilder_; - } - - // repeated .eu.dnetlib.data.proto.StringField contributor = 30; - private java.util.List contributor_ = - java.util.Collections.emptyList(); - private void ensureContributorIsMutable() { - if (!((bitField0_ & 0x00004000) == 0x00004000)) { - contributor_ = new java.util.ArrayList(contributor_); - bitField0_ |= 0x00004000; - } - } - - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> contributorBuilder_; - - public java.util.List getContributorList() { - if (contributorBuilder_ == null) { - return java.util.Collections.unmodifiableList(contributor_); - } else { - return contributorBuilder_.getMessageList(); - } - } - public int getContributorCount() { - if (contributorBuilder_ == null) { - return contributor_.size(); - } else { - return contributorBuilder_.getCount(); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getContributor(int index) { - if (contributorBuilder_ == null) { - return contributor_.get(index); - } else { - return contributorBuilder_.getMessage(index); - } - } - public Builder setContributor( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (contributorBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureContributorIsMutable(); - contributor_.set(index, value); - onChanged(); - } else { - contributorBuilder_.setMessage(index, value); - } - return this; - } - public Builder setContributor( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (contributorBuilder_ == null) { - ensureContributorIsMutable(); - contributor_.set(index, builderForValue.build()); - onChanged(); - } else { - contributorBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - public Builder addContributor(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (contributorBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureContributorIsMutable(); - contributor_.add(value); - onChanged(); - } else { - contributorBuilder_.addMessage(value); - } - return this; - } - public Builder addContributor( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (contributorBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureContributorIsMutable(); - contributor_.add(index, value); - onChanged(); - } else { - contributorBuilder_.addMessage(index, value); - } - return this; - } - public Builder addContributor( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (contributorBuilder_ == null) { - ensureContributorIsMutable(); - contributor_.add(builderForValue.build()); - onChanged(); - } else { - contributorBuilder_.addMessage(builderForValue.build()); - } - return this; - } - public Builder addContributor( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (contributorBuilder_ == null) { - ensureContributorIsMutable(); - contributor_.add(index, builderForValue.build()); - onChanged(); - } else { - contributorBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - public Builder addAllContributor( - java.lang.Iterable values) { - if (contributorBuilder_ == null) { - ensureContributorIsMutable(); - super.addAll(values, contributor_); - onChanged(); - } else { - contributorBuilder_.addAllMessages(values); - } - return this; - } - public Builder clearContributor() { - if (contributorBuilder_ == null) { - contributor_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00004000); - onChanged(); - } else { - contributorBuilder_.clear(); - } - return this; - } - public Builder removeContributor(int index) { - if (contributorBuilder_ == null) { - ensureContributorIsMutable(); - contributor_.remove(index); - onChanged(); - } else { - contributorBuilder_.remove(index); - } - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getContributorBuilder( - int index) { - return getContributorFieldBuilder().getBuilder(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getContributorOrBuilder( - int index) { - if (contributorBuilder_ == null) { - return contributor_.get(index); } else { - return contributorBuilder_.getMessageOrBuilder(index); - } - } - public java.util.List - getContributorOrBuilderList() { - if (contributorBuilder_ != null) { - return contributorBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(contributor_); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addContributorBuilder() { - return getContributorFieldBuilder().addBuilder( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addContributorBuilder( - int index) { - return getContributorFieldBuilder().addBuilder( - index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); - } - public java.util.List - getContributorBuilderList() { - return getContributorFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getContributorFieldBuilder() { - if (contributorBuilder_ == null) { - contributorBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - contributor_, - ((bitField0_ & 0x00004000) == 0x00004000), - getParentForChildren(), - isClean()); - contributor_ = null; - } - return contributorBuilder_; - } - - // optional .eu.dnetlib.data.proto.Qualifier resourcetype = 19; - private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier resourcetype_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> resourcetypeBuilder_; - public boolean hasResourcetype() { - return ((bitField0_ & 0x00008000) == 0x00008000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getResourcetype() { - if (resourcetypeBuilder_ == null) { - return resourcetype_; - } else { - return resourcetypeBuilder_.getMessage(); - } - } - public Builder setResourcetype(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { - if (resourcetypeBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - resourcetype_ = value; - onChanged(); - } else { - resourcetypeBuilder_.setMessage(value); - } - bitField0_ |= 0x00008000; - return this; - } - public Builder setResourcetype( - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder builderForValue) { - if (resourcetypeBuilder_ == null) { - resourcetype_ = builderForValue.build(); - onChanged(); - } else { - resourcetypeBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00008000; - return this; - } - public Builder mergeResourcetype(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { - if (resourcetypeBuilder_ == null) { - if (((bitField0_ & 0x00008000) == 0x00008000) && - resourcetype_ != eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance()) { - resourcetype_ = - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(resourcetype_).mergeFrom(value).buildPartial(); - } else { - resourcetype_ = value; - } - onChanged(); - } else { - resourcetypeBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00008000; - return this; - } - public Builder clearResourcetype() { - if (resourcetypeBuilder_ == null) { - resourcetype_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - onChanged(); - } else { - resourcetypeBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00008000); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder getResourcetypeBuilder() { - bitField0_ |= 0x00008000; - onChanged(); - return getResourcetypeFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getResourcetypeOrBuilder() { - if (resourcetypeBuilder_ != null) { - return resourcetypeBuilder_.getMessageOrBuilder(); - } else { - return resourcetype_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> - getResourcetypeFieldBuilder() { - if (resourcetypeBuilder_ == null) { - resourcetypeBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder>( - resourcetype_, - getParentForChildren(), - isClean()); - resourcetype_ = null; - } - return resourcetypeBuilder_; - } - - // repeated .eu.dnetlib.data.proto.StringField coverage = 43; - private java.util.List coverage_ = - java.util.Collections.emptyList(); - private void ensureCoverageIsMutable() { - if (!((bitField0_ & 0x00010000) == 0x00010000)) { - coverage_ = new java.util.ArrayList(coverage_); - bitField0_ |= 0x00010000; - } - } - - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> coverageBuilder_; - - public java.util.List getCoverageList() { - if (coverageBuilder_ == null) { - return java.util.Collections.unmodifiableList(coverage_); - } else { - return coverageBuilder_.getMessageList(); - } - } - public int getCoverageCount() { - if (coverageBuilder_ == null) { - return coverage_.size(); - } else { - return coverageBuilder_.getCount(); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getCoverage(int index) { - if (coverageBuilder_ == null) { - return coverage_.get(index); - } else { - return coverageBuilder_.getMessage(index); - } - } - public Builder setCoverage( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (coverageBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureCoverageIsMutable(); - coverage_.set(index, value); - onChanged(); - } else { - coverageBuilder_.setMessage(index, value); - } - return this; - } - public Builder setCoverage( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (coverageBuilder_ == null) { - ensureCoverageIsMutable(); - coverage_.set(index, builderForValue.build()); - onChanged(); - } else { - coverageBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - public Builder addCoverage(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (coverageBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureCoverageIsMutable(); - coverage_.add(value); - onChanged(); - } else { - coverageBuilder_.addMessage(value); - } - return this; - } - public Builder addCoverage( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (coverageBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureCoverageIsMutable(); - coverage_.add(index, value); - onChanged(); - } else { - coverageBuilder_.addMessage(index, value); - } - return this; - } - public Builder addCoverage( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (coverageBuilder_ == null) { - ensureCoverageIsMutable(); - coverage_.add(builderForValue.build()); - onChanged(); - } else { - coverageBuilder_.addMessage(builderForValue.build()); - } - return this; - } - public Builder addCoverage( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (coverageBuilder_ == null) { - ensureCoverageIsMutable(); - coverage_.add(index, builderForValue.build()); - onChanged(); - } else { - coverageBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - public Builder addAllCoverage( - java.lang.Iterable values) { - if (coverageBuilder_ == null) { - ensureCoverageIsMutable(); - super.addAll(values, coverage_); - onChanged(); - } else { - coverageBuilder_.addAllMessages(values); - } - return this; - } - public Builder clearCoverage() { - if (coverageBuilder_ == null) { - coverage_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00010000); - onChanged(); - } else { - coverageBuilder_.clear(); - } - return this; - } - public Builder removeCoverage(int index) { - if (coverageBuilder_ == null) { - ensureCoverageIsMutable(); - coverage_.remove(index); - onChanged(); - } else { - coverageBuilder_.remove(index); - } - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getCoverageBuilder( - int index) { - return getCoverageFieldBuilder().getBuilder(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getCoverageOrBuilder( - int index) { - if (coverageBuilder_ == null) { - return coverage_.get(index); } else { - return coverageBuilder_.getMessageOrBuilder(index); - } - } - public java.util.List - getCoverageOrBuilderList() { - if (coverageBuilder_ != null) { - return coverageBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(coverage_); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addCoverageBuilder() { - return getCoverageFieldBuilder().addBuilder( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addCoverageBuilder( - int index) { - return getCoverageFieldBuilder().addBuilder( - index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); - } - public java.util.List - getCoverageBuilderList() { - return getCoverageFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getCoverageFieldBuilder() { - if (coverageBuilder_ == null) { - coverageBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - coverage_, - ((bitField0_ & 0x00010000) == 0x00010000), - getParentForChildren(), - isClean()); - coverage_ = null; - } - return coverageBuilder_; - } - - // repeated .eu.dnetlib.data.proto.Result.Context context = 28; - private java.util.List context_ = - java.util.Collections.emptyList(); - private void ensureContextIsMutable() { - if (!((bitField0_ & 0x00020000) == 0x00020000)) { - context_ = new java.util.ArrayList(context_); - bitField0_ |= 0x00020000; - } - } - - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.ResultProtos.Result.Context, eu.dnetlib.data.proto.ResultProtos.Result.Context.Builder, eu.dnetlib.data.proto.ResultProtos.Result.ContextOrBuilder> contextBuilder_; - - public java.util.List getContextList() { - if (contextBuilder_ == null) { - return java.util.Collections.unmodifiableList(context_); - } else { - return contextBuilder_.getMessageList(); - } - } - public int getContextCount() { - if (contextBuilder_ == null) { - return context_.size(); - } else { - return contextBuilder_.getCount(); - } - } - public eu.dnetlib.data.proto.ResultProtos.Result.Context getContext(int index) { - if (contextBuilder_ == null) { - return context_.get(index); - } else { - return contextBuilder_.getMessage(index); - } - } - public Builder setContext( - int index, eu.dnetlib.data.proto.ResultProtos.Result.Context value) { - if (contextBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureContextIsMutable(); - context_.set(index, value); - onChanged(); - } else { - contextBuilder_.setMessage(index, value); - } - return this; - } - public Builder setContext( - int index, eu.dnetlib.data.proto.ResultProtos.Result.Context.Builder builderForValue) { - if (contextBuilder_ == null) { - ensureContextIsMutable(); - context_.set(index, builderForValue.build()); - onChanged(); - } else { - contextBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - public Builder addContext(eu.dnetlib.data.proto.ResultProtos.Result.Context value) { - if (contextBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureContextIsMutable(); - context_.add(value); - onChanged(); - } else { - contextBuilder_.addMessage(value); - } - return this; - } - public Builder addContext( - int index, eu.dnetlib.data.proto.ResultProtos.Result.Context value) { - if (contextBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureContextIsMutable(); - context_.add(index, value); - onChanged(); - } else { - contextBuilder_.addMessage(index, value); - } - return this; - } - public Builder addContext( - eu.dnetlib.data.proto.ResultProtos.Result.Context.Builder builderForValue) { - if (contextBuilder_ == null) { - ensureContextIsMutable(); - context_.add(builderForValue.build()); - onChanged(); - } else { - contextBuilder_.addMessage(builderForValue.build()); - } - return this; - } - public Builder addContext( - int index, eu.dnetlib.data.proto.ResultProtos.Result.Context.Builder builderForValue) { - if (contextBuilder_ == null) { - ensureContextIsMutable(); - context_.add(index, builderForValue.build()); - onChanged(); - } else { - contextBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - public Builder addAllContext( - java.lang.Iterable values) { - if (contextBuilder_ == null) { - ensureContextIsMutable(); - super.addAll(values, context_); - onChanged(); - } else { - contextBuilder_.addAllMessages(values); - } - return this; - } - public Builder clearContext() { - if (contextBuilder_ == null) { - context_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00020000); - onChanged(); - } else { - contextBuilder_.clear(); - } - return this; - } - public Builder removeContext(int index) { - if (contextBuilder_ == null) { - ensureContextIsMutable(); - context_.remove(index); - onChanged(); - } else { - contextBuilder_.remove(index); - } - return this; - } - public eu.dnetlib.data.proto.ResultProtos.Result.Context.Builder getContextBuilder( - int index) { - return getContextFieldBuilder().getBuilder(index); - } - public eu.dnetlib.data.proto.ResultProtos.Result.ContextOrBuilder getContextOrBuilder( - int index) { - if (contextBuilder_ == null) { - return context_.get(index); } else { - return contextBuilder_.getMessageOrBuilder(index); - } - } - public java.util.List - getContextOrBuilderList() { - if (contextBuilder_ != null) { - return contextBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(context_); - } - } - public eu.dnetlib.data.proto.ResultProtos.Result.Context.Builder addContextBuilder() { - return getContextFieldBuilder().addBuilder( - eu.dnetlib.data.proto.ResultProtos.Result.Context.getDefaultInstance()); - } - public eu.dnetlib.data.proto.ResultProtos.Result.Context.Builder addContextBuilder( - int index) { - return getContextFieldBuilder().addBuilder( - index, eu.dnetlib.data.proto.ResultProtos.Result.Context.getDefaultInstance()); - } - public java.util.List - getContextBuilderList() { - return getContextFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.ResultProtos.Result.Context, eu.dnetlib.data.proto.ResultProtos.Result.Context.Builder, eu.dnetlib.data.proto.ResultProtos.Result.ContextOrBuilder> - getContextFieldBuilder() { - if (contextBuilder_ == null) { - contextBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.ResultProtos.Result.Context, eu.dnetlib.data.proto.ResultProtos.Result.Context.Builder, eu.dnetlib.data.proto.ResultProtos.Result.ContextOrBuilder>( - context_, - ((bitField0_ & 0x00020000) == 0x00020000), - getParentForChildren(), - isClean()); - context_ = null; - } - return contextBuilder_; - } - - // optional .eu.dnetlib.data.proto.Result.Journal journal = 18; - private eu.dnetlib.data.proto.ResultProtos.Result.Journal journal_ = eu.dnetlib.data.proto.ResultProtos.Result.Journal.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ResultProtos.Result.Journal, eu.dnetlib.data.proto.ResultProtos.Result.Journal.Builder, eu.dnetlib.data.proto.ResultProtos.Result.JournalOrBuilder> journalBuilder_; - public boolean hasJournal() { - return ((bitField0_ & 0x00040000) == 0x00040000); - } - public eu.dnetlib.data.proto.ResultProtos.Result.Journal getJournal() { - if (journalBuilder_ == null) { - return journal_; - } else { - return journalBuilder_.getMessage(); - } - } - public Builder setJournal(eu.dnetlib.data.proto.ResultProtos.Result.Journal value) { - if (journalBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - journal_ = value; - onChanged(); - } else { - journalBuilder_.setMessage(value); - } - bitField0_ |= 0x00040000; - return this; - } - public Builder setJournal( - eu.dnetlib.data.proto.ResultProtos.Result.Journal.Builder builderForValue) { - if (journalBuilder_ == null) { - journal_ = builderForValue.build(); - onChanged(); - } else { - journalBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00040000; - return this; - } - public Builder mergeJournal(eu.dnetlib.data.proto.ResultProtos.Result.Journal value) { - if (journalBuilder_ == null) { - if (((bitField0_ & 0x00040000) == 0x00040000) && - journal_ != eu.dnetlib.data.proto.ResultProtos.Result.Journal.getDefaultInstance()) { - journal_ = - eu.dnetlib.data.proto.ResultProtos.Result.Journal.newBuilder(journal_).mergeFrom(value).buildPartial(); - } else { - journal_ = value; - } - onChanged(); - } else { - journalBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00040000; - return this; - } - public Builder clearJournal() { - if (journalBuilder_ == null) { - journal_ = eu.dnetlib.data.proto.ResultProtos.Result.Journal.getDefaultInstance(); - onChanged(); - } else { - journalBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00040000); - return this; - } - public eu.dnetlib.data.proto.ResultProtos.Result.Journal.Builder getJournalBuilder() { - bitField0_ |= 0x00040000; - onChanged(); - return getJournalFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.ResultProtos.Result.JournalOrBuilder getJournalOrBuilder() { - if (journalBuilder_ != null) { - return journalBuilder_.getMessageOrBuilder(); - } else { - return journal_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ResultProtos.Result.Journal, eu.dnetlib.data.proto.ResultProtos.Result.Journal.Builder, eu.dnetlib.data.proto.ResultProtos.Result.JournalOrBuilder> - getJournalFieldBuilder() { - if (journalBuilder_ == null) { - journalBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ResultProtos.Result.Journal, eu.dnetlib.data.proto.ResultProtos.Result.Journal.Builder, eu.dnetlib.data.proto.ResultProtos.Result.JournalOrBuilder>( - journal_, - getParentForChildren(), - isClean()); - journal_ = null; - } - return journalBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField storagedate = 9; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField storagedate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> storagedateBuilder_; - public boolean hasStoragedate() { - return ((bitField0_ & 0x00080000) == 0x00080000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getStoragedate() { - if (storagedateBuilder_ == null) { - return storagedate_; - } else { - return storagedateBuilder_.getMessage(); - } - } - public Builder setStoragedate(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (storagedateBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - storagedate_ = value; - onChanged(); - } else { - storagedateBuilder_.setMessage(value); - } - bitField0_ |= 0x00080000; - return this; - } - public Builder setStoragedate( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (storagedateBuilder_ == null) { - storagedate_ = builderForValue.build(); - onChanged(); - } else { - storagedateBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00080000; - return this; - } - public Builder mergeStoragedate(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (storagedateBuilder_ == null) { - if (((bitField0_ & 0x00080000) == 0x00080000) && - storagedate_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - storagedate_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(storagedate_).mergeFrom(value).buildPartial(); - } else { - storagedate_ = value; - } - onChanged(); - } else { - storagedateBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00080000; - return this; - } - public Builder clearStoragedate() { - if (storagedateBuilder_ == null) { - storagedate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - storagedateBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00080000); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getStoragedateBuilder() { - bitField0_ |= 0x00080000; - onChanged(); - return getStoragedateFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getStoragedateOrBuilder() { - if (storagedateBuilder_ != null) { - return storagedateBuilder_.getMessageOrBuilder(); - } else { - return storagedate_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getStoragedateFieldBuilder() { - if (storagedateBuilder_ == null) { - storagedateBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - storagedate_, - getParentForChildren(), - isClean()); - storagedate_ = null; - } - return storagedateBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField device = 26; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField device_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> deviceBuilder_; - public boolean hasDevice() { - return ((bitField0_ & 0x00100000) == 0x00100000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getDevice() { - if (deviceBuilder_ == null) { - return device_; - } else { - return deviceBuilder_.getMessage(); - } - } - public Builder setDevice(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (deviceBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - device_ = value; - onChanged(); - } else { - deviceBuilder_.setMessage(value); - } - bitField0_ |= 0x00100000; - return this; - } - public Builder setDevice( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (deviceBuilder_ == null) { - device_ = builderForValue.build(); - onChanged(); - } else { - deviceBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00100000; - return this; - } - public Builder mergeDevice(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (deviceBuilder_ == null) { - if (((bitField0_ & 0x00100000) == 0x00100000) && - device_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - device_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(device_).mergeFrom(value).buildPartial(); - } else { - device_ = value; - } - onChanged(); - } else { - deviceBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00100000; - return this; - } - public Builder clearDevice() { - if (deviceBuilder_ == null) { - device_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - deviceBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00100000); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getDeviceBuilder() { - bitField0_ |= 0x00100000; - onChanged(); - return getDeviceFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDeviceOrBuilder() { - if (deviceBuilder_ != null) { - return deviceBuilder_.getMessageOrBuilder(); - } else { - return device_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getDeviceFieldBuilder() { - if (deviceBuilder_ == null) { - deviceBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - device_, - getParentForChildren(), - isClean()); - device_ = null; - } - return deviceBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField size = 20; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField size_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> sizeBuilder_; - public boolean hasSize() { - return ((bitField0_ & 0x00200000) == 0x00200000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getSize() { - if (sizeBuilder_ == null) { - return size_; - } else { - return sizeBuilder_.getMessage(); - } - } - public Builder setSize(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (sizeBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - size_ = value; - onChanged(); - } else { - sizeBuilder_.setMessage(value); - } - bitField0_ |= 0x00200000; - return this; - } - public Builder setSize( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (sizeBuilder_ == null) { - size_ = builderForValue.build(); - onChanged(); - } else { - sizeBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00200000; - return this; - } - public Builder mergeSize(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (sizeBuilder_ == null) { - if (((bitField0_ & 0x00200000) == 0x00200000) && - size_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - size_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(size_).mergeFrom(value).buildPartial(); - } else { - size_ = value; - } - onChanged(); - } else { - sizeBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00200000; - return this; - } - public Builder clearSize() { - if (sizeBuilder_ == null) { - size_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - sizeBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00200000); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getSizeBuilder() { - bitField0_ |= 0x00200000; - onChanged(); - return getSizeFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getSizeOrBuilder() { - if (sizeBuilder_ != null) { - return sizeBuilder_.getMessageOrBuilder(); - } else { - return size_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getSizeFieldBuilder() { - if (sizeBuilder_ == null) { - sizeBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - size_, - getParentForChildren(), - isClean()); - size_ = null; - } - return sizeBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField version = 22; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField version_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> versionBuilder_; - public boolean hasVersion() { - return ((bitField0_ & 0x00400000) == 0x00400000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getVersion() { - if (versionBuilder_ == null) { - return version_; - } else { - return versionBuilder_.getMessage(); - } - } - public Builder setVersion(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (versionBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - version_ = value; - onChanged(); - } else { - versionBuilder_.setMessage(value); - } - bitField0_ |= 0x00400000; - return this; - } - public Builder setVersion( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (versionBuilder_ == null) { - version_ = builderForValue.build(); - onChanged(); - } else { - versionBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00400000; - return this; - } - public Builder mergeVersion(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (versionBuilder_ == null) { - if (((bitField0_ & 0x00400000) == 0x00400000) && - version_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - version_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(version_).mergeFrom(value).buildPartial(); - } else { - version_ = value; - } - onChanged(); - } else { - versionBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00400000; - return this; - } - public Builder clearVersion() { - if (versionBuilder_ == null) { - version_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - versionBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00400000); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getVersionBuilder() { - bitField0_ |= 0x00400000; - onChanged(); - return getVersionFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getVersionOrBuilder() { - if (versionBuilder_ != null) { - return versionBuilder_.getMessageOrBuilder(); - } else { - return version_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getVersionFieldBuilder() { - if (versionBuilder_ == null) { - versionBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - version_, - getParentForChildren(), - isClean()); - version_ = null; - } - return versionBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField lastmetadataupdate = 23; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField lastmetadataupdate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> lastmetadataupdateBuilder_; - public boolean hasLastmetadataupdate() { - return ((bitField0_ & 0x00800000) == 0x00800000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getLastmetadataupdate() { - if (lastmetadataupdateBuilder_ == null) { - return lastmetadataupdate_; - } else { - return lastmetadataupdateBuilder_.getMessage(); - } - } - public Builder setLastmetadataupdate(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (lastmetadataupdateBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - lastmetadataupdate_ = value; - onChanged(); - } else { - lastmetadataupdateBuilder_.setMessage(value); - } - bitField0_ |= 0x00800000; - return this; - } - public Builder setLastmetadataupdate( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (lastmetadataupdateBuilder_ == null) { - lastmetadataupdate_ = builderForValue.build(); - onChanged(); - } else { - lastmetadataupdateBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00800000; - return this; - } - public Builder mergeLastmetadataupdate(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (lastmetadataupdateBuilder_ == null) { - if (((bitField0_ & 0x00800000) == 0x00800000) && - lastmetadataupdate_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - lastmetadataupdate_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(lastmetadataupdate_).mergeFrom(value).buildPartial(); - } else { - lastmetadataupdate_ = value; - } - onChanged(); - } else { - lastmetadataupdateBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00800000; - return this; - } - public Builder clearLastmetadataupdate() { - if (lastmetadataupdateBuilder_ == null) { - lastmetadataupdate_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - lastmetadataupdateBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00800000); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getLastmetadataupdateBuilder() { - bitField0_ |= 0x00800000; - onChanged(); - return getLastmetadataupdateFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getLastmetadataupdateOrBuilder() { - if (lastmetadataupdateBuilder_ != null) { - return lastmetadataupdateBuilder_.getMessageOrBuilder(); - } else { - return lastmetadataupdate_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getLastmetadataupdateFieldBuilder() { - if (lastmetadataupdateBuilder_ == null) { - lastmetadataupdateBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - lastmetadataupdate_, - getParentForChildren(), - isClean()); - lastmetadataupdate_ = null; - } - return lastmetadataupdateBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField metadataversionnumber = 24; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField metadataversionnumber_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> metadataversionnumberBuilder_; - public boolean hasMetadataversionnumber() { - return ((bitField0_ & 0x01000000) == 0x01000000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getMetadataversionnumber() { - if (metadataversionnumberBuilder_ == null) { - return metadataversionnumber_; - } else { - return metadataversionnumberBuilder_.getMessage(); - } - } - public Builder setMetadataversionnumber(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (metadataversionnumberBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - metadataversionnumber_ = value; - onChanged(); - } else { - metadataversionnumberBuilder_.setMessage(value); - } - bitField0_ |= 0x01000000; - return this; - } - public Builder setMetadataversionnumber( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (metadataversionnumberBuilder_ == null) { - metadataversionnumber_ = builderForValue.build(); - onChanged(); - } else { - metadataversionnumberBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x01000000; - return this; - } - public Builder mergeMetadataversionnumber(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (metadataversionnumberBuilder_ == null) { - if (((bitField0_ & 0x01000000) == 0x01000000) && - metadataversionnumber_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - metadataversionnumber_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(metadataversionnumber_).mergeFrom(value).buildPartial(); - } else { - metadataversionnumber_ = value; - } - onChanged(); - } else { - metadataversionnumberBuilder_.mergeFrom(value); - } - bitField0_ |= 0x01000000; - return this; - } - public Builder clearMetadataversionnumber() { - if (metadataversionnumberBuilder_ == null) { - metadataversionnumber_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - metadataversionnumberBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x01000000); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getMetadataversionnumberBuilder() { - bitField0_ |= 0x01000000; - onChanged(); - return getMetadataversionnumberFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getMetadataversionnumberOrBuilder() { - if (metadataversionnumberBuilder_ != null) { - return metadataversionnumberBuilder_.getMessageOrBuilder(); - } else { - return metadataversionnumber_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getMetadataversionnumberFieldBuilder() { - if (metadataversionnumberBuilder_ == null) { - metadataversionnumberBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - metadataversionnumber_, - getParentForChildren(), - isClean()); - metadataversionnumber_ = null; - } - return metadataversionnumberBuilder_; - } - - // repeated .eu.dnetlib.data.proto.Result.GeoLocation geolocation = 44; - private java.util.List geolocation_ = - java.util.Collections.emptyList(); - private void ensureGeolocationIsMutable() { - if (!((bitField0_ & 0x02000000) == 0x02000000)) { - geolocation_ = new java.util.ArrayList(geolocation_); - bitField0_ |= 0x02000000; - } - } - - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation, eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation.Builder, eu.dnetlib.data.proto.ResultProtos.Result.GeoLocationOrBuilder> geolocationBuilder_; - - public java.util.List getGeolocationList() { - if (geolocationBuilder_ == null) { - return java.util.Collections.unmodifiableList(geolocation_); - } else { - return geolocationBuilder_.getMessageList(); - } - } - public int getGeolocationCount() { - if (geolocationBuilder_ == null) { - return geolocation_.size(); - } else { - return geolocationBuilder_.getCount(); - } - } - public eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation getGeolocation(int index) { - if (geolocationBuilder_ == null) { - return geolocation_.get(index); - } else { - return geolocationBuilder_.getMessage(index); - } - } - public Builder setGeolocation( - int index, eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation value) { - if (geolocationBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureGeolocationIsMutable(); - geolocation_.set(index, value); - onChanged(); - } else { - geolocationBuilder_.setMessage(index, value); - } - return this; - } - public Builder setGeolocation( - int index, eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation.Builder builderForValue) { - if (geolocationBuilder_ == null) { - ensureGeolocationIsMutable(); - geolocation_.set(index, builderForValue.build()); - onChanged(); - } else { - geolocationBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - public Builder addGeolocation(eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation value) { - if (geolocationBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureGeolocationIsMutable(); - geolocation_.add(value); - onChanged(); - } else { - geolocationBuilder_.addMessage(value); - } - return this; - } - public Builder addGeolocation( - int index, eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation value) { - if (geolocationBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureGeolocationIsMutable(); - geolocation_.add(index, value); - onChanged(); - } else { - geolocationBuilder_.addMessage(index, value); - } - return this; - } - public Builder addGeolocation( - eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation.Builder builderForValue) { - if (geolocationBuilder_ == null) { - ensureGeolocationIsMutable(); - geolocation_.add(builderForValue.build()); - onChanged(); - } else { - geolocationBuilder_.addMessage(builderForValue.build()); - } - return this; - } - public Builder addGeolocation( - int index, eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation.Builder builderForValue) { - if (geolocationBuilder_ == null) { - ensureGeolocationIsMutable(); - geolocation_.add(index, builderForValue.build()); - onChanged(); - } else { - geolocationBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - public Builder addAllGeolocation( - java.lang.Iterable values) { - if (geolocationBuilder_ == null) { - ensureGeolocationIsMutable(); - super.addAll(values, geolocation_); - onChanged(); - } else { - geolocationBuilder_.addAllMessages(values); - } - return this; - } - public Builder clearGeolocation() { - if (geolocationBuilder_ == null) { - geolocation_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x02000000); - onChanged(); - } else { - geolocationBuilder_.clear(); - } - return this; - } - public Builder removeGeolocation(int index) { - if (geolocationBuilder_ == null) { - ensureGeolocationIsMutable(); - geolocation_.remove(index); - onChanged(); - } else { - geolocationBuilder_.remove(index); - } - return this; - } - public eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation.Builder getGeolocationBuilder( - int index) { - return getGeolocationFieldBuilder().getBuilder(index); - } - public eu.dnetlib.data.proto.ResultProtos.Result.GeoLocationOrBuilder getGeolocationOrBuilder( - int index) { - if (geolocationBuilder_ == null) { - return geolocation_.get(index); } else { - return geolocationBuilder_.getMessageOrBuilder(index); - } - } - public java.util.List - getGeolocationOrBuilderList() { - if (geolocationBuilder_ != null) { - return geolocationBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(geolocation_); - } - } - public eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation.Builder addGeolocationBuilder() { - return getGeolocationFieldBuilder().addBuilder( - eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation.getDefaultInstance()); - } - public eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation.Builder addGeolocationBuilder( - int index) { - return getGeolocationFieldBuilder().addBuilder( - index, eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation.getDefaultInstance()); - } - public java.util.List - getGeolocationBuilderList() { - return getGeolocationFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation, eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation.Builder, eu.dnetlib.data.proto.ResultProtos.Result.GeoLocationOrBuilder> - getGeolocationFieldBuilder() { - if (geolocationBuilder_ == null) { - geolocationBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation, eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation.Builder, eu.dnetlib.data.proto.ResultProtos.Result.GeoLocationOrBuilder>( - geolocation_, - ((bitField0_ & 0x02000000) == 0x02000000), - getParentForChildren(), - isClean()); - geolocation_ = null; - } - return geolocationBuilder_; - } - - // repeated .eu.dnetlib.data.proto.StringField documentationUrl = 35; - private java.util.List documentationUrl_ = - java.util.Collections.emptyList(); - private void ensureDocumentationUrlIsMutable() { - if (!((bitField0_ & 0x04000000) == 0x04000000)) { - documentationUrl_ = new java.util.ArrayList(documentationUrl_); - bitField0_ |= 0x04000000; - } - } - - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> documentationUrlBuilder_; - - public java.util.List getDocumentationUrlList() { - if (documentationUrlBuilder_ == null) { - return java.util.Collections.unmodifiableList(documentationUrl_); - } else { - return documentationUrlBuilder_.getMessageList(); - } - } - public int getDocumentationUrlCount() { - if (documentationUrlBuilder_ == null) { - return documentationUrl_.size(); - } else { - return documentationUrlBuilder_.getCount(); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getDocumentationUrl(int index) { - if (documentationUrlBuilder_ == null) { - return documentationUrl_.get(index); - } else { - return documentationUrlBuilder_.getMessage(index); - } - } - public Builder setDocumentationUrl( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (documentationUrlBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureDocumentationUrlIsMutable(); - documentationUrl_.set(index, value); - onChanged(); - } else { - documentationUrlBuilder_.setMessage(index, value); - } - return this; - } - public Builder setDocumentationUrl( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (documentationUrlBuilder_ == null) { - ensureDocumentationUrlIsMutable(); - documentationUrl_.set(index, builderForValue.build()); - onChanged(); - } else { - documentationUrlBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - public Builder addDocumentationUrl(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (documentationUrlBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureDocumentationUrlIsMutable(); - documentationUrl_.add(value); - onChanged(); - } else { - documentationUrlBuilder_.addMessage(value); - } - return this; - } - public Builder addDocumentationUrl( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (documentationUrlBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureDocumentationUrlIsMutable(); - documentationUrl_.add(index, value); - onChanged(); - } else { - documentationUrlBuilder_.addMessage(index, value); - } - return this; - } - public Builder addDocumentationUrl( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (documentationUrlBuilder_ == null) { - ensureDocumentationUrlIsMutable(); - documentationUrl_.add(builderForValue.build()); - onChanged(); - } else { - documentationUrlBuilder_.addMessage(builderForValue.build()); - } - return this; - } - public Builder addDocumentationUrl( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (documentationUrlBuilder_ == null) { - ensureDocumentationUrlIsMutable(); - documentationUrl_.add(index, builderForValue.build()); - onChanged(); - } else { - documentationUrlBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - public Builder addAllDocumentationUrl( - java.lang.Iterable values) { - if (documentationUrlBuilder_ == null) { - ensureDocumentationUrlIsMutable(); - super.addAll(values, documentationUrl_); - onChanged(); - } else { - documentationUrlBuilder_.addAllMessages(values); - } - return this; - } - public Builder clearDocumentationUrl() { - if (documentationUrlBuilder_ == null) { - documentationUrl_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x04000000); - onChanged(); - } else { - documentationUrlBuilder_.clear(); - } - return this; - } - public Builder removeDocumentationUrl(int index) { - if (documentationUrlBuilder_ == null) { - ensureDocumentationUrlIsMutable(); - documentationUrl_.remove(index); - onChanged(); - } else { - documentationUrlBuilder_.remove(index); - } - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getDocumentationUrlBuilder( - int index) { - return getDocumentationUrlFieldBuilder().getBuilder(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDocumentationUrlOrBuilder( - int index) { - if (documentationUrlBuilder_ == null) { - return documentationUrl_.get(index); } else { - return documentationUrlBuilder_.getMessageOrBuilder(index); - } - } - public java.util.List - getDocumentationUrlOrBuilderList() { - if (documentationUrlBuilder_ != null) { - return documentationUrlBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(documentationUrl_); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addDocumentationUrlBuilder() { - return getDocumentationUrlFieldBuilder().addBuilder( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addDocumentationUrlBuilder( - int index) { - return getDocumentationUrlFieldBuilder().addBuilder( - index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); - } - public java.util.List - getDocumentationUrlBuilderList() { - return getDocumentationUrlFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getDocumentationUrlFieldBuilder() { - if (documentationUrlBuilder_ == null) { - documentationUrlBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - documentationUrl_, - ((bitField0_ & 0x04000000) == 0x04000000), - getParentForChildren(), - isClean()); - documentationUrl_ = null; - } - return documentationUrlBuilder_; - } - - // repeated .eu.dnetlib.data.proto.StructuredProperty license = 36; - private java.util.List license_ = - java.util.Collections.emptyList(); - private void ensureLicenseIsMutable() { - if (!((bitField0_ & 0x08000000) == 0x08000000)) { - license_ = new java.util.ArrayList(license_); - bitField0_ |= 0x08000000; - } - } - - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder> licenseBuilder_; - - public java.util.List getLicenseList() { - if (licenseBuilder_ == null) { - return java.util.Collections.unmodifiableList(license_); - } else { - return licenseBuilder_.getMessageList(); - } - } - public int getLicenseCount() { - if (licenseBuilder_ == null) { - return license_.size(); - } else { - return licenseBuilder_.getCount(); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty getLicense(int index) { - if (licenseBuilder_ == null) { - return license_.get(index); - } else { - return licenseBuilder_.getMessage(index); - } - } - public Builder setLicense( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty value) { - if (licenseBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureLicenseIsMutable(); - license_.set(index, value); - onChanged(); - } else { - licenseBuilder_.setMessage(index, value); - } - return this; - } - public Builder setLicense( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder builderForValue) { - if (licenseBuilder_ == null) { - ensureLicenseIsMutable(); - license_.set(index, builderForValue.build()); - onChanged(); - } else { - licenseBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - public Builder addLicense(eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty value) { - if (licenseBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureLicenseIsMutable(); - license_.add(value); - onChanged(); - } else { - licenseBuilder_.addMessage(value); - } - return this; - } - public Builder addLicense( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty value) { - if (licenseBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureLicenseIsMutable(); - license_.add(index, value); - onChanged(); - } else { - licenseBuilder_.addMessage(index, value); - } - return this; - } - public Builder addLicense( - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder builderForValue) { - if (licenseBuilder_ == null) { - ensureLicenseIsMutable(); - license_.add(builderForValue.build()); - onChanged(); - } else { - licenseBuilder_.addMessage(builderForValue.build()); - } - return this; - } - public Builder addLicense( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder builderForValue) { - if (licenseBuilder_ == null) { - ensureLicenseIsMutable(); - license_.add(index, builderForValue.build()); - onChanged(); - } else { - licenseBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - public Builder addAllLicense( - java.lang.Iterable values) { - if (licenseBuilder_ == null) { - ensureLicenseIsMutable(); - super.addAll(values, license_); - onChanged(); - } else { - licenseBuilder_.addAllMessages(values); - } - return this; - } - public Builder clearLicense() { - if (licenseBuilder_ == null) { - license_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x08000000); - onChanged(); - } else { - licenseBuilder_.clear(); - } - return this; - } - public Builder removeLicense(int index) { - if (licenseBuilder_ == null) { - ensureLicenseIsMutable(); - license_.remove(index); - onChanged(); - } else { - licenseBuilder_.remove(index); - } - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder getLicenseBuilder( - int index) { - return getLicenseFieldBuilder().getBuilder(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder getLicenseOrBuilder( - int index) { - if (licenseBuilder_ == null) { - return license_.get(index); } else { - return licenseBuilder_.getMessageOrBuilder(index); - } - } - public java.util.List - getLicenseOrBuilderList() { - if (licenseBuilder_ != null) { - return licenseBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(license_); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder addLicenseBuilder() { - return getLicenseFieldBuilder().addBuilder( - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.getDefaultInstance()); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder addLicenseBuilder( - int index) { - return getLicenseFieldBuilder().addBuilder( - index, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.getDefaultInstance()); - } - public java.util.List - getLicenseBuilderList() { - return getLicenseFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder> - getLicenseFieldBuilder() { - if (licenseBuilder_ == null) { - licenseBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty, eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StructuredPropertyOrBuilder>( - license_, - ((bitField0_ & 0x08000000) == 0x08000000), - getParentForChildren(), - isClean()); - license_ = null; - } - return licenseBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField codeRepositoryUrl = 38; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField codeRepositoryUrl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> codeRepositoryUrlBuilder_; - public boolean hasCodeRepositoryUrl() { - return ((bitField0_ & 0x10000000) == 0x10000000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getCodeRepositoryUrl() { - if (codeRepositoryUrlBuilder_ == null) { - return codeRepositoryUrl_; - } else { - return codeRepositoryUrlBuilder_.getMessage(); - } - } - public Builder setCodeRepositoryUrl(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (codeRepositoryUrlBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - codeRepositoryUrl_ = value; - onChanged(); - } else { - codeRepositoryUrlBuilder_.setMessage(value); - } - bitField0_ |= 0x10000000; - return this; - } - public Builder setCodeRepositoryUrl( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (codeRepositoryUrlBuilder_ == null) { - codeRepositoryUrl_ = builderForValue.build(); - onChanged(); - } else { - codeRepositoryUrlBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x10000000; - return this; - } - public Builder mergeCodeRepositoryUrl(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (codeRepositoryUrlBuilder_ == null) { - if (((bitField0_ & 0x10000000) == 0x10000000) && - codeRepositoryUrl_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - codeRepositoryUrl_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(codeRepositoryUrl_).mergeFrom(value).buildPartial(); - } else { - codeRepositoryUrl_ = value; - } - onChanged(); - } else { - codeRepositoryUrlBuilder_.mergeFrom(value); - } - bitField0_ |= 0x10000000; - return this; - } - public Builder clearCodeRepositoryUrl() { - if (codeRepositoryUrlBuilder_ == null) { - codeRepositoryUrl_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - codeRepositoryUrlBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x10000000); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getCodeRepositoryUrlBuilder() { - bitField0_ |= 0x10000000; - onChanged(); - return getCodeRepositoryUrlFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getCodeRepositoryUrlOrBuilder() { - if (codeRepositoryUrlBuilder_ != null) { - return codeRepositoryUrlBuilder_.getMessageOrBuilder(); - } else { - return codeRepositoryUrl_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getCodeRepositoryUrlFieldBuilder() { - if (codeRepositoryUrlBuilder_ == null) { - codeRepositoryUrlBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - codeRepositoryUrl_, - getParentForChildren(), - isClean()); - codeRepositoryUrl_ = null; - } - return codeRepositoryUrlBuilder_; - } - - // optional .eu.dnetlib.data.proto.Qualifier programmingLanguage = 39; - private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier programmingLanguage_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> programmingLanguageBuilder_; - public boolean hasProgrammingLanguage() { - return ((bitField0_ & 0x20000000) == 0x20000000); - } - public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getProgrammingLanguage() { - if (programmingLanguageBuilder_ == null) { - return programmingLanguage_; - } else { - return programmingLanguageBuilder_.getMessage(); - } - } - public Builder setProgrammingLanguage(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { - if (programmingLanguageBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - programmingLanguage_ = value; - onChanged(); - } else { - programmingLanguageBuilder_.setMessage(value); - } - bitField0_ |= 0x20000000; - return this; - } - public Builder setProgrammingLanguage( - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder builderForValue) { - if (programmingLanguageBuilder_ == null) { - programmingLanguage_ = builderForValue.build(); - onChanged(); - } else { - programmingLanguageBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x20000000; - return this; - } - public Builder mergeProgrammingLanguage(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { - if (programmingLanguageBuilder_ == null) { - if (((bitField0_ & 0x20000000) == 0x20000000) && - programmingLanguage_ != eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance()) { - programmingLanguage_ = - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(programmingLanguage_).mergeFrom(value).buildPartial(); - } else { - programmingLanguage_ = value; - } - onChanged(); - } else { - programmingLanguageBuilder_.mergeFrom(value); - } - bitField0_ |= 0x20000000; - return this; - } - public Builder clearProgrammingLanguage() { - if (programmingLanguageBuilder_ == null) { - programmingLanguage_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - onChanged(); - } else { - programmingLanguageBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x20000000); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder getProgrammingLanguageBuilder() { - bitField0_ |= 0x20000000; - onChanged(); - return getProgrammingLanguageFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getProgrammingLanguageOrBuilder() { - if (programmingLanguageBuilder_ != null) { - return programmingLanguageBuilder_.getMessageOrBuilder(); - } else { - return programmingLanguage_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> - getProgrammingLanguageFieldBuilder() { - if (programmingLanguageBuilder_ == null) { - programmingLanguageBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder>( - programmingLanguage_, - getParentForChildren(), - isClean()); - programmingLanguage_ = null; - } - return programmingLanguageBuilder_; - } - - // repeated .eu.dnetlib.data.proto.StringField contactperson = 45; - private java.util.List contactperson_ = - java.util.Collections.emptyList(); - private void ensureContactpersonIsMutable() { - if (!((bitField0_ & 0x40000000) == 0x40000000)) { - contactperson_ = new java.util.ArrayList(contactperson_); - bitField0_ |= 0x40000000; - } - } - - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> contactpersonBuilder_; - - public java.util.List getContactpersonList() { - if (contactpersonBuilder_ == null) { - return java.util.Collections.unmodifiableList(contactperson_); - } else { - return contactpersonBuilder_.getMessageList(); - } - } - public int getContactpersonCount() { - if (contactpersonBuilder_ == null) { - return contactperson_.size(); - } else { - return contactpersonBuilder_.getCount(); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getContactperson(int index) { - if (contactpersonBuilder_ == null) { - return contactperson_.get(index); - } else { - return contactpersonBuilder_.getMessage(index); - } - } - public Builder setContactperson( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (contactpersonBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureContactpersonIsMutable(); - contactperson_.set(index, value); - onChanged(); - } else { - contactpersonBuilder_.setMessage(index, value); - } - return this; - } - public Builder setContactperson( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (contactpersonBuilder_ == null) { - ensureContactpersonIsMutable(); - contactperson_.set(index, builderForValue.build()); - onChanged(); - } else { - contactpersonBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - public Builder addContactperson(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (contactpersonBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureContactpersonIsMutable(); - contactperson_.add(value); - onChanged(); - } else { - contactpersonBuilder_.addMessage(value); - } - return this; - } - public Builder addContactperson( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (contactpersonBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureContactpersonIsMutable(); - contactperson_.add(index, value); - onChanged(); - } else { - contactpersonBuilder_.addMessage(index, value); - } - return this; - } - public Builder addContactperson( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (contactpersonBuilder_ == null) { - ensureContactpersonIsMutable(); - contactperson_.add(builderForValue.build()); - onChanged(); - } else { - contactpersonBuilder_.addMessage(builderForValue.build()); - } - return this; - } - public Builder addContactperson( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (contactpersonBuilder_ == null) { - ensureContactpersonIsMutable(); - contactperson_.add(index, builderForValue.build()); - onChanged(); - } else { - contactpersonBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - public Builder addAllContactperson( - java.lang.Iterable values) { - if (contactpersonBuilder_ == null) { - ensureContactpersonIsMutable(); - super.addAll(values, contactperson_); - onChanged(); - } else { - contactpersonBuilder_.addAllMessages(values); - } - return this; - } - public Builder clearContactperson() { - if (contactpersonBuilder_ == null) { - contactperson_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x40000000); - onChanged(); - } else { - contactpersonBuilder_.clear(); - } - return this; - } - public Builder removeContactperson(int index) { - if (contactpersonBuilder_ == null) { - ensureContactpersonIsMutable(); - contactperson_.remove(index); - onChanged(); - } else { - contactpersonBuilder_.remove(index); - } - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getContactpersonBuilder( - int index) { - return getContactpersonFieldBuilder().getBuilder(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getContactpersonOrBuilder( - int index) { - if (contactpersonBuilder_ == null) { - return contactperson_.get(index); } else { - return contactpersonBuilder_.getMessageOrBuilder(index); - } - } - public java.util.List - getContactpersonOrBuilderList() { - if (contactpersonBuilder_ != null) { - return contactpersonBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(contactperson_); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addContactpersonBuilder() { - return getContactpersonFieldBuilder().addBuilder( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addContactpersonBuilder( - int index) { - return getContactpersonFieldBuilder().addBuilder( - index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); - } - public java.util.List - getContactpersonBuilderList() { - return getContactpersonFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getContactpersonFieldBuilder() { - if (contactpersonBuilder_ == null) { - contactpersonBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - contactperson_, - ((bitField0_ & 0x40000000) == 0x40000000), - getParentForChildren(), - isClean()); - contactperson_ = null; - } - return contactpersonBuilder_; - } - - // repeated .eu.dnetlib.data.proto.StringField contactgroup = 41; - private java.util.List contactgroup_ = - java.util.Collections.emptyList(); - private void ensureContactgroupIsMutable() { - if (!((bitField0_ & 0x80000000) == 0x80000000)) { - contactgroup_ = new java.util.ArrayList(contactgroup_); - bitField0_ |= 0x80000000; - } - } - - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> contactgroupBuilder_; - - public java.util.List getContactgroupList() { - if (contactgroupBuilder_ == null) { - return java.util.Collections.unmodifiableList(contactgroup_); - } else { - return contactgroupBuilder_.getMessageList(); - } - } - public int getContactgroupCount() { - if (contactgroupBuilder_ == null) { - return contactgroup_.size(); - } else { - return contactgroupBuilder_.getCount(); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getContactgroup(int index) { - if (contactgroupBuilder_ == null) { - return contactgroup_.get(index); - } else { - return contactgroupBuilder_.getMessage(index); - } - } - public Builder setContactgroup( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (contactgroupBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureContactgroupIsMutable(); - contactgroup_.set(index, value); - onChanged(); - } else { - contactgroupBuilder_.setMessage(index, value); - } - return this; - } - public Builder setContactgroup( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (contactgroupBuilder_ == null) { - ensureContactgroupIsMutable(); - contactgroup_.set(index, builderForValue.build()); - onChanged(); - } else { - contactgroupBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - public Builder addContactgroup(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (contactgroupBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureContactgroupIsMutable(); - contactgroup_.add(value); - onChanged(); - } else { - contactgroupBuilder_.addMessage(value); - } - return this; - } - public Builder addContactgroup( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (contactgroupBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureContactgroupIsMutable(); - contactgroup_.add(index, value); - onChanged(); - } else { - contactgroupBuilder_.addMessage(index, value); - } - return this; - } - public Builder addContactgroup( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (contactgroupBuilder_ == null) { - ensureContactgroupIsMutable(); - contactgroup_.add(builderForValue.build()); - onChanged(); - } else { - contactgroupBuilder_.addMessage(builderForValue.build()); - } - return this; - } - public Builder addContactgroup( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (contactgroupBuilder_ == null) { - ensureContactgroupIsMutable(); - contactgroup_.add(index, builderForValue.build()); - onChanged(); - } else { - contactgroupBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - public Builder addAllContactgroup( - java.lang.Iterable values) { - if (contactgroupBuilder_ == null) { - ensureContactgroupIsMutable(); - super.addAll(values, contactgroup_); - onChanged(); - } else { - contactgroupBuilder_.addAllMessages(values); - } - return this; - } - public Builder clearContactgroup() { - if (contactgroupBuilder_ == null) { - contactgroup_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x80000000); - onChanged(); - } else { - contactgroupBuilder_.clear(); - } - return this; - } - public Builder removeContactgroup(int index) { - if (contactgroupBuilder_ == null) { - ensureContactgroupIsMutable(); - contactgroup_.remove(index); - onChanged(); - } else { - contactgroupBuilder_.remove(index); - } - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getContactgroupBuilder( - int index) { - return getContactgroupFieldBuilder().getBuilder(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getContactgroupOrBuilder( - int index) { - if (contactgroupBuilder_ == null) { - return contactgroup_.get(index); } else { - return contactgroupBuilder_.getMessageOrBuilder(index); - } - } - public java.util.List - getContactgroupOrBuilderList() { - if (contactgroupBuilder_ != null) { - return contactgroupBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(contactgroup_); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addContactgroupBuilder() { - return getContactgroupFieldBuilder().addBuilder( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addContactgroupBuilder( - int index) { - return getContactgroupFieldBuilder().addBuilder( - index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); - } - public java.util.List - getContactgroupBuilderList() { - return getContactgroupFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getContactgroupFieldBuilder() { - if (contactgroupBuilder_ == null) { - contactgroupBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - contactgroup_, - ((bitField0_ & 0x80000000) == 0x80000000), - getParentForChildren(), - isClean()); - contactgroup_ = null; - } - return contactgroupBuilder_; - } - - // repeated .eu.dnetlib.data.proto.StringField tool = 42; - private java.util.List tool_ = - java.util.Collections.emptyList(); - private void ensureToolIsMutable() { - if (!((bitField1_ & 0x00000001) == 0x00000001)) { - tool_ = new java.util.ArrayList(tool_); - bitField1_ |= 0x00000001; - } - } - - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> toolBuilder_; - - public java.util.List getToolList() { - if (toolBuilder_ == null) { - return java.util.Collections.unmodifiableList(tool_); - } else { - return toolBuilder_.getMessageList(); - } - } - public int getToolCount() { - if (toolBuilder_ == null) { - return tool_.size(); - } else { - return toolBuilder_.getCount(); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getTool(int index) { - if (toolBuilder_ == null) { - return tool_.get(index); - } else { - return toolBuilder_.getMessage(index); - } - } - public Builder setTool( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (toolBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureToolIsMutable(); - tool_.set(index, value); - onChanged(); - } else { - toolBuilder_.setMessage(index, value); - } - return this; - } - public Builder setTool( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (toolBuilder_ == null) { - ensureToolIsMutable(); - tool_.set(index, builderForValue.build()); - onChanged(); - } else { - toolBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - public Builder addTool(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (toolBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureToolIsMutable(); - tool_.add(value); - onChanged(); - } else { - toolBuilder_.addMessage(value); - } - return this; - } - public Builder addTool( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (toolBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureToolIsMutable(); - tool_.add(index, value); - onChanged(); - } else { - toolBuilder_.addMessage(index, value); - } - return this; - } - public Builder addTool( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (toolBuilder_ == null) { - ensureToolIsMutable(); - tool_.add(builderForValue.build()); - onChanged(); - } else { - toolBuilder_.addMessage(builderForValue.build()); - } - return this; - } - public Builder addTool( - int index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (toolBuilder_ == null) { - ensureToolIsMutable(); - tool_.add(index, builderForValue.build()); - onChanged(); - } else { - toolBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - public Builder addAllTool( - java.lang.Iterable values) { - if (toolBuilder_ == null) { - ensureToolIsMutable(); - super.addAll(values, tool_); - onChanged(); - } else { - toolBuilder_.addAllMessages(values); - } - return this; - } - public Builder clearTool() { - if (toolBuilder_ == null) { - tool_ = java.util.Collections.emptyList(); - bitField1_ = (bitField1_ & ~0x00000001); - onChanged(); - } else { - toolBuilder_.clear(); - } - return this; - } - public Builder removeTool(int index) { - if (toolBuilder_ == null) { - ensureToolIsMutable(); - tool_.remove(index); - onChanged(); - } else { - toolBuilder_.remove(index); - } - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getToolBuilder( - int index) { - return getToolFieldBuilder().getBuilder(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getToolOrBuilder( - int index) { - if (toolBuilder_ == null) { - return tool_.get(index); } else { - return toolBuilder_.getMessageOrBuilder(index); - } - } - public java.util.List - getToolOrBuilderList() { - if (toolBuilder_ != null) { - return toolBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(tool_); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addToolBuilder() { - return getToolFieldBuilder().addBuilder( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder addToolBuilder( - int index) { - return getToolFieldBuilder().addBuilder( - index, eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()); - } - public java.util.List - getToolBuilderList() { - return getToolFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getToolFieldBuilder() { - if (toolBuilder_ == null) { - toolBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - tool_, - ((bitField1_ & 0x00000001) == 0x00000001), - getParentForChildren(), - isClean()); - tool_ = null; - } - return toolBuilder_; - } - - // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.Result.Metadata) - } - - static { - defaultInstance = new Metadata(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.Result.Metadata) - } - - public interface JournalOrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // optional string name = 1; - boolean hasName(); - String getName(); - - // optional string issnPrinted = 2; - boolean hasIssnPrinted(); - String getIssnPrinted(); - - // optional string issnOnline = 3; - boolean hasIssnOnline(); - String getIssnOnline(); - - // optional string issnLinking = 4; - boolean hasIssnLinking(); - String getIssnLinking(); - - // optional string ep = 6; - boolean hasEp(); - String getEp(); - - // optional string iss = 7; - boolean hasIss(); - String getIss(); - - // optional string sp = 8; - boolean hasSp(); - String getSp(); - - // optional string vol = 9; - boolean hasVol(); - String getVol(); - - // optional string edition = 10; - boolean hasEdition(); - String getEdition(); - - // optional string conferenceplace = 11; - boolean hasConferenceplace(); - String getConferenceplace(); - - // optional string conferencedate = 12; - boolean hasConferencedate(); - String getConferencedate(); - - // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 5; - boolean hasDataInfo(); - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo(); - eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder(); - } - public static final class Journal extends - com.google.protobuf.GeneratedMessage - implements JournalOrBuilder { - // Use Journal.newBuilder() to construct. - private Journal(Builder builder) { - super(builder); - } - private Journal(boolean noInit) {} - - private static final Journal defaultInstance; - public static Journal getDefaultInstance() { - return defaultInstance; - } - - public Journal getDefaultInstanceForType() { - return defaultInstance; - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_Journal_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_Journal_fieldAccessorTable; - } - - private int bitField0_; - // optional string name = 1; - public static final int NAME_FIELD_NUMBER = 1; - private java.lang.Object name_; - public boolean hasName() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public String getName() { - java.lang.Object ref = name_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - name_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getNameBytes() { - java.lang.Object ref = name_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - name_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // optional string issnPrinted = 2; - public static final int ISSNPRINTED_FIELD_NUMBER = 2; - private java.lang.Object issnPrinted_; - public boolean hasIssnPrinted() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public String getIssnPrinted() { - java.lang.Object ref = issnPrinted_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - issnPrinted_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getIssnPrintedBytes() { - java.lang.Object ref = issnPrinted_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - issnPrinted_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // optional string issnOnline = 3; - public static final int ISSNONLINE_FIELD_NUMBER = 3; - private java.lang.Object issnOnline_; - public boolean hasIssnOnline() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - public String getIssnOnline() { - java.lang.Object ref = issnOnline_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - issnOnline_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getIssnOnlineBytes() { - java.lang.Object ref = issnOnline_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - issnOnline_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // optional string issnLinking = 4; - public static final int ISSNLINKING_FIELD_NUMBER = 4; - private java.lang.Object issnLinking_; - public boolean hasIssnLinking() { - return ((bitField0_ & 0x00000008) == 0x00000008); - } - public String getIssnLinking() { - java.lang.Object ref = issnLinking_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - issnLinking_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getIssnLinkingBytes() { - java.lang.Object ref = issnLinking_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - issnLinking_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // optional string ep = 6; - public static final int EP_FIELD_NUMBER = 6; - private java.lang.Object ep_; - public boolean hasEp() { - return ((bitField0_ & 0x00000010) == 0x00000010); - } - public String getEp() { - java.lang.Object ref = ep_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - ep_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getEpBytes() { - java.lang.Object ref = ep_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - ep_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // optional string iss = 7; - public static final int ISS_FIELD_NUMBER = 7; - private java.lang.Object iss_; - public boolean hasIss() { - return ((bitField0_ & 0x00000020) == 0x00000020); - } - public String getIss() { - java.lang.Object ref = iss_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - iss_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getIssBytes() { - java.lang.Object ref = iss_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - iss_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // optional string sp = 8; - public static final int SP_FIELD_NUMBER = 8; - private java.lang.Object sp_; - public boolean hasSp() { - return ((bitField0_ & 0x00000040) == 0x00000040); - } - public String getSp() { - java.lang.Object ref = sp_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - sp_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getSpBytes() { - java.lang.Object ref = sp_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - sp_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // optional string vol = 9; - public static final int VOL_FIELD_NUMBER = 9; - private java.lang.Object vol_; - public boolean hasVol() { - return ((bitField0_ & 0x00000080) == 0x00000080); - } - public String getVol() { - java.lang.Object ref = vol_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - vol_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getVolBytes() { - java.lang.Object ref = vol_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - vol_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // optional string edition = 10; - public static final int EDITION_FIELD_NUMBER = 10; - private java.lang.Object edition_; - public boolean hasEdition() { - return ((bitField0_ & 0x00000100) == 0x00000100); - } - public String getEdition() { - java.lang.Object ref = edition_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - edition_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getEditionBytes() { - java.lang.Object ref = edition_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - edition_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // optional string conferenceplace = 11; - public static final int CONFERENCEPLACE_FIELD_NUMBER = 11; - private java.lang.Object conferenceplace_; - public boolean hasConferenceplace() { - return ((bitField0_ & 0x00000200) == 0x00000200); - } - public String getConferenceplace() { - java.lang.Object ref = conferenceplace_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - conferenceplace_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getConferenceplaceBytes() { - java.lang.Object ref = conferenceplace_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - conferenceplace_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // optional string conferencedate = 12; - public static final int CONFERENCEDATE_FIELD_NUMBER = 12; - private java.lang.Object conferencedate_; - public boolean hasConferencedate() { - return ((bitField0_ & 0x00000400) == 0x00000400); - } - public String getConferencedate() { - java.lang.Object ref = conferencedate_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - conferencedate_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getConferencedateBytes() { - java.lang.Object ref = conferencedate_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - conferencedate_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 5; - public static final int DATAINFO_FIELD_NUMBER = 5; - private eu.dnetlib.data.proto.FieldTypeProtos.DataInfo dataInfo_; - public boolean hasDataInfo() { - return ((bitField0_ & 0x00000800) == 0x00000800); - } - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo() { - return dataInfo_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder() { - return dataInfo_; - } - - private void initFields() { - name_ = ""; - issnPrinted_ = ""; - issnOnline_ = ""; - issnLinking_ = ""; - ep_ = ""; - iss_ = ""; - sp_ = ""; - vol_ = ""; - edition_ = ""; - conferenceplace_ = ""; - conferencedate_ = ""; - dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - if (hasDataInfo()) { - if (!getDataInfo().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeBytes(1, getNameBytes()); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - output.writeBytes(2, getIssnPrintedBytes()); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - output.writeBytes(3, getIssnOnlineBytes()); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - output.writeBytes(4, getIssnLinkingBytes()); - } - if (((bitField0_ & 0x00000800) == 0x00000800)) { - output.writeMessage(5, dataInfo_); - } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - output.writeBytes(6, getEpBytes()); - } - if (((bitField0_ & 0x00000020) == 0x00000020)) { - output.writeBytes(7, getIssBytes()); - } - if (((bitField0_ & 0x00000040) == 0x00000040)) { - output.writeBytes(8, getSpBytes()); - } - if (((bitField0_ & 0x00000080) == 0x00000080)) { - output.writeBytes(9, getVolBytes()); - } - if (((bitField0_ & 0x00000100) == 0x00000100)) { - output.writeBytes(10, getEditionBytes()); - } - if (((bitField0_ & 0x00000200) == 0x00000200)) { - output.writeBytes(11, getConferenceplaceBytes()); - } - if (((bitField0_ & 0x00000400) == 0x00000400)) { - output.writeBytes(12, getConferencedateBytes()); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(1, getNameBytes()); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(2, getIssnPrintedBytes()); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(3, getIssnOnlineBytes()); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(4, getIssnLinkingBytes()); - } - if (((bitField0_ & 0x00000800) == 0x00000800)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(5, dataInfo_); - } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(6, getEpBytes()); - } - if (((bitField0_ & 0x00000020) == 0x00000020)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(7, getIssBytes()); - } - if (((bitField0_ & 0x00000040) == 0x00000040)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(8, getSpBytes()); - } - if (((bitField0_ & 0x00000080) == 0x00000080)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(9, getVolBytes()); - } - if (((bitField0_ & 0x00000100) == 0x00000100)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(10, getEditionBytes()); - } - if (((bitField0_ & 0x00000200) == 0x00000200)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(11, getConferenceplaceBytes()); - } - if (((bitField0_ & 0x00000400) == 0x00000400)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(12, getConferencedateBytes()); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static eu.dnetlib.data.proto.ResultProtos.Result.Journal parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProtos.Result.Journal parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProtos.Result.Journal parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProtos.Result.Journal parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProtos.Result.Journal parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProtos.Result.Journal parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProtos.Result.Journal parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.ResultProtos.Result.Journal parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.ResultProtos.Result.Journal parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProtos.Result.Journal parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(eu.dnetlib.data.proto.ResultProtos.Result.Journal prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder - implements eu.dnetlib.data.proto.ResultProtos.Result.JournalOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_Journal_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_Journal_fieldAccessorTable; - } - - // Construct using eu.dnetlib.data.proto.ResultProtos.Result.Journal.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - getDataInfoFieldBuilder(); - } - } - private static Builder create() { - return new Builder(); - } - - public Builder clear() { - super.clear(); - name_ = ""; - bitField0_ = (bitField0_ & ~0x00000001); - issnPrinted_ = ""; - bitField0_ = (bitField0_ & ~0x00000002); - issnOnline_ = ""; - bitField0_ = (bitField0_ & ~0x00000004); - issnLinking_ = ""; - bitField0_ = (bitField0_ & ~0x00000008); - ep_ = ""; - bitField0_ = (bitField0_ & ~0x00000010); - iss_ = ""; - bitField0_ = (bitField0_ & ~0x00000020); - sp_ = ""; - bitField0_ = (bitField0_ & ~0x00000040); - vol_ = ""; - bitField0_ = (bitField0_ & ~0x00000080); - edition_ = ""; - bitField0_ = (bitField0_ & ~0x00000100); - conferenceplace_ = ""; - bitField0_ = (bitField0_ & ~0x00000200); - conferencedate_ = ""; - bitField0_ = (bitField0_ & ~0x00000400); - if (dataInfoBuilder_ == null) { - dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); - } else { - dataInfoBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000800); - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return eu.dnetlib.data.proto.ResultProtos.Result.Journal.getDescriptor(); - } - - public eu.dnetlib.data.proto.ResultProtos.Result.Journal getDefaultInstanceForType() { - return eu.dnetlib.data.proto.ResultProtos.Result.Journal.getDefaultInstance(); - } - - public eu.dnetlib.data.proto.ResultProtos.Result.Journal build() { - eu.dnetlib.data.proto.ResultProtos.Result.Journal result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - private eu.dnetlib.data.proto.ResultProtos.Result.Journal buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - eu.dnetlib.data.proto.ResultProtos.Result.Journal result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return result; - } - - public eu.dnetlib.data.proto.ResultProtos.Result.Journal buildPartial() { - eu.dnetlib.data.proto.ResultProtos.Result.Journal result = new eu.dnetlib.data.proto.ResultProtos.Result.Journal(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - result.name_ = name_; - if (((from_bitField0_ & 0x00000002) == 0x00000002)) { - to_bitField0_ |= 0x00000002; - } - result.issnPrinted_ = issnPrinted_; - if (((from_bitField0_ & 0x00000004) == 0x00000004)) { - to_bitField0_ |= 0x00000004; - } - result.issnOnline_ = issnOnline_; - if (((from_bitField0_ & 0x00000008) == 0x00000008)) { - to_bitField0_ |= 0x00000008; - } - result.issnLinking_ = issnLinking_; - if (((from_bitField0_ & 0x00000010) == 0x00000010)) { - to_bitField0_ |= 0x00000010; - } - result.ep_ = ep_; - if (((from_bitField0_ & 0x00000020) == 0x00000020)) { - to_bitField0_ |= 0x00000020; - } - result.iss_ = iss_; - if (((from_bitField0_ & 0x00000040) == 0x00000040)) { - to_bitField0_ |= 0x00000040; - } - result.sp_ = sp_; - if (((from_bitField0_ & 0x00000080) == 0x00000080)) { - to_bitField0_ |= 0x00000080; - } - result.vol_ = vol_; - if (((from_bitField0_ & 0x00000100) == 0x00000100)) { - to_bitField0_ |= 0x00000100; - } - result.edition_ = edition_; - if (((from_bitField0_ & 0x00000200) == 0x00000200)) { - to_bitField0_ |= 0x00000200; - } - result.conferenceplace_ = conferenceplace_; - if (((from_bitField0_ & 0x00000400) == 0x00000400)) { - to_bitField0_ |= 0x00000400; - } - result.conferencedate_ = conferencedate_; - if (((from_bitField0_ & 0x00000800) == 0x00000800)) { - to_bitField0_ |= 0x00000800; - } - if (dataInfoBuilder_ == null) { - result.dataInfo_ = dataInfo_; - } else { - result.dataInfo_ = dataInfoBuilder_.build(); - } - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof eu.dnetlib.data.proto.ResultProtos.Result.Journal) { - return mergeFrom((eu.dnetlib.data.proto.ResultProtos.Result.Journal)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(eu.dnetlib.data.proto.ResultProtos.Result.Journal other) { - if (other == eu.dnetlib.data.proto.ResultProtos.Result.Journal.getDefaultInstance()) return this; - if (other.hasName()) { - setName(other.getName()); - } - if (other.hasIssnPrinted()) { - setIssnPrinted(other.getIssnPrinted()); - } - if (other.hasIssnOnline()) { - setIssnOnline(other.getIssnOnline()); - } - if (other.hasIssnLinking()) { - setIssnLinking(other.getIssnLinking()); - } - if (other.hasEp()) { - setEp(other.getEp()); - } - if (other.hasIss()) { - setIss(other.getIss()); - } - if (other.hasSp()) { - setSp(other.getSp()); - } - if (other.hasVol()) { - setVol(other.getVol()); - } - if (other.hasEdition()) { - setEdition(other.getEdition()); - } - if (other.hasConferenceplace()) { - setConferenceplace(other.getConferenceplace()); - } - if (other.hasConferencedate()) { - setConferencedate(other.getConferencedate()); - } - if (other.hasDataInfo()) { - mergeDataInfo(other.getDataInfo()); - } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - - public final boolean isInitialized() { - if (hasDataInfo()) { - if (!getDataInfo().isInitialized()) { - - return false; - } - } - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - } - break; - } - case 10: { - bitField0_ |= 0x00000001; - name_ = input.readBytes(); - break; - } - case 18: { - bitField0_ |= 0x00000002; - issnPrinted_ = input.readBytes(); - break; - } - case 26: { - bitField0_ |= 0x00000004; - issnOnline_ = input.readBytes(); - break; - } - case 34: { - bitField0_ |= 0x00000008; - issnLinking_ = input.readBytes(); - break; - } - case 42: { - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.newBuilder(); - if (hasDataInfo()) { - subBuilder.mergeFrom(getDataInfo()); - } - input.readMessage(subBuilder, extensionRegistry); - setDataInfo(subBuilder.buildPartial()); - break; - } - case 50: { - bitField0_ |= 0x00000010; - ep_ = input.readBytes(); - break; - } - case 58: { - bitField0_ |= 0x00000020; - iss_ = input.readBytes(); - break; - } - case 66: { - bitField0_ |= 0x00000040; - sp_ = input.readBytes(); - break; - } - case 74: { - bitField0_ |= 0x00000080; - vol_ = input.readBytes(); - break; - } - case 82: { - bitField0_ |= 0x00000100; - edition_ = input.readBytes(); - break; - } - case 90: { - bitField0_ |= 0x00000200; - conferenceplace_ = input.readBytes(); - break; - } - case 98: { - bitField0_ |= 0x00000400; - conferencedate_ = input.readBytes(); - break; - } - } - } - } - - private int bitField0_; - - // optional string name = 1; - private java.lang.Object name_ = ""; - public boolean hasName() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public String getName() { - java.lang.Object ref = name_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - name_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setName(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000001; - name_ = value; - onChanged(); - return this; - } - public Builder clearName() { - bitField0_ = (bitField0_ & ~0x00000001); - name_ = getDefaultInstance().getName(); - onChanged(); - return this; - } - void setName(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000001; - name_ = value; - onChanged(); - } - - // optional string issnPrinted = 2; - private java.lang.Object issnPrinted_ = ""; - public boolean hasIssnPrinted() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public String getIssnPrinted() { - java.lang.Object ref = issnPrinted_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - issnPrinted_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setIssnPrinted(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000002; - issnPrinted_ = value; - onChanged(); - return this; - } - public Builder clearIssnPrinted() { - bitField0_ = (bitField0_ & ~0x00000002); - issnPrinted_ = getDefaultInstance().getIssnPrinted(); - onChanged(); - return this; - } - void setIssnPrinted(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000002; - issnPrinted_ = value; - onChanged(); - } - - // optional string issnOnline = 3; - private java.lang.Object issnOnline_ = ""; - public boolean hasIssnOnline() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - public String getIssnOnline() { - java.lang.Object ref = issnOnline_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - issnOnline_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setIssnOnline(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000004; - issnOnline_ = value; - onChanged(); - return this; - } - public Builder clearIssnOnline() { - bitField0_ = (bitField0_ & ~0x00000004); - issnOnline_ = getDefaultInstance().getIssnOnline(); - onChanged(); - return this; - } - void setIssnOnline(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000004; - issnOnline_ = value; - onChanged(); - } - - // optional string issnLinking = 4; - private java.lang.Object issnLinking_ = ""; - public boolean hasIssnLinking() { - return ((bitField0_ & 0x00000008) == 0x00000008); - } - public String getIssnLinking() { - java.lang.Object ref = issnLinking_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - issnLinking_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setIssnLinking(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000008; - issnLinking_ = value; - onChanged(); - return this; - } - public Builder clearIssnLinking() { - bitField0_ = (bitField0_ & ~0x00000008); - issnLinking_ = getDefaultInstance().getIssnLinking(); - onChanged(); - return this; - } - void setIssnLinking(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000008; - issnLinking_ = value; - onChanged(); - } - - // optional string ep = 6; - private java.lang.Object ep_ = ""; - public boolean hasEp() { - return ((bitField0_ & 0x00000010) == 0x00000010); - } - public String getEp() { - java.lang.Object ref = ep_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - ep_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setEp(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000010; - ep_ = value; - onChanged(); - return this; - } - public Builder clearEp() { - bitField0_ = (bitField0_ & ~0x00000010); - ep_ = getDefaultInstance().getEp(); - onChanged(); - return this; - } - void setEp(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000010; - ep_ = value; - onChanged(); - } - - // optional string iss = 7; - private java.lang.Object iss_ = ""; - public boolean hasIss() { - return ((bitField0_ & 0x00000020) == 0x00000020); - } - public String getIss() { - java.lang.Object ref = iss_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - iss_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setIss(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000020; - iss_ = value; - onChanged(); - return this; - } - public Builder clearIss() { - bitField0_ = (bitField0_ & ~0x00000020); - iss_ = getDefaultInstance().getIss(); - onChanged(); - return this; - } - void setIss(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000020; - iss_ = value; - onChanged(); - } - - // optional string sp = 8; - private java.lang.Object sp_ = ""; - public boolean hasSp() { - return ((bitField0_ & 0x00000040) == 0x00000040); - } - public String getSp() { - java.lang.Object ref = sp_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - sp_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setSp(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000040; - sp_ = value; - onChanged(); - return this; - } - public Builder clearSp() { - bitField0_ = (bitField0_ & ~0x00000040); - sp_ = getDefaultInstance().getSp(); - onChanged(); - return this; - } - void setSp(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000040; - sp_ = value; - onChanged(); - } - - // optional string vol = 9; - private java.lang.Object vol_ = ""; - public boolean hasVol() { - return ((bitField0_ & 0x00000080) == 0x00000080); - } - public String getVol() { - java.lang.Object ref = vol_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - vol_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setVol(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000080; - vol_ = value; - onChanged(); - return this; - } - public Builder clearVol() { - bitField0_ = (bitField0_ & ~0x00000080); - vol_ = getDefaultInstance().getVol(); - onChanged(); - return this; - } - void setVol(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000080; - vol_ = value; - onChanged(); - } - - // optional string edition = 10; - private java.lang.Object edition_ = ""; - public boolean hasEdition() { - return ((bitField0_ & 0x00000100) == 0x00000100); - } - public String getEdition() { - java.lang.Object ref = edition_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - edition_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setEdition(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000100; - edition_ = value; - onChanged(); - return this; - } - public Builder clearEdition() { - bitField0_ = (bitField0_ & ~0x00000100); - edition_ = getDefaultInstance().getEdition(); - onChanged(); - return this; - } - void setEdition(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000100; - edition_ = value; - onChanged(); - } - - // optional string conferenceplace = 11; - private java.lang.Object conferenceplace_ = ""; - public boolean hasConferenceplace() { - return ((bitField0_ & 0x00000200) == 0x00000200); - } - public String getConferenceplace() { - java.lang.Object ref = conferenceplace_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - conferenceplace_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setConferenceplace(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000200; - conferenceplace_ = value; - onChanged(); - return this; - } - public Builder clearConferenceplace() { - bitField0_ = (bitField0_ & ~0x00000200); - conferenceplace_ = getDefaultInstance().getConferenceplace(); - onChanged(); - return this; - } - void setConferenceplace(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000200; - conferenceplace_ = value; - onChanged(); - } - - // optional string conferencedate = 12; - private java.lang.Object conferencedate_ = ""; - public boolean hasConferencedate() { - return ((bitField0_ & 0x00000400) == 0x00000400); - } - public String getConferencedate() { - java.lang.Object ref = conferencedate_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - conferencedate_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setConferencedate(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000400; - conferencedate_ = value; - onChanged(); - return this; - } - public Builder clearConferencedate() { - bitField0_ = (bitField0_ & ~0x00000400); - conferencedate_ = getDefaultInstance().getConferencedate(); - onChanged(); - return this; - } - void setConferencedate(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000400; - conferencedate_ = value; - onChanged(); - } - - // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 5; - private eu.dnetlib.data.proto.FieldTypeProtos.DataInfo dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder> dataInfoBuilder_; - public boolean hasDataInfo() { - return ((bitField0_ & 0x00000800) == 0x00000800); - } - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo() { - if (dataInfoBuilder_ == null) { - return dataInfo_; - } else { - return dataInfoBuilder_.getMessage(); - } - } - public Builder setDataInfo(eu.dnetlib.data.proto.FieldTypeProtos.DataInfo value) { - if (dataInfoBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - dataInfo_ = value; - onChanged(); - } else { - dataInfoBuilder_.setMessage(value); - } - bitField0_ |= 0x00000800; - return this; - } - public Builder setDataInfo( - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder builderForValue) { - if (dataInfoBuilder_ == null) { - dataInfo_ = builderForValue.build(); - onChanged(); - } else { - dataInfoBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000800; - return this; - } - public Builder mergeDataInfo(eu.dnetlib.data.proto.FieldTypeProtos.DataInfo value) { - if (dataInfoBuilder_ == null) { - if (((bitField0_ & 0x00000800) == 0x00000800) && - dataInfo_ != eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance()) { - dataInfo_ = - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.newBuilder(dataInfo_).mergeFrom(value).buildPartial(); - } else { - dataInfo_ = value; - } - onChanged(); - } else { - dataInfoBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000800; - return this; - } - public Builder clearDataInfo() { - if (dataInfoBuilder_ == null) { - dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); - onChanged(); - } else { - dataInfoBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000800); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder getDataInfoBuilder() { - bitField0_ |= 0x00000800; - onChanged(); - return getDataInfoFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder() { - if (dataInfoBuilder_ != null) { - return dataInfoBuilder_.getMessageOrBuilder(); - } else { - return dataInfo_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder> - getDataInfoFieldBuilder() { - if (dataInfoBuilder_ == null) { - dataInfoBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder>( - dataInfo_, - getParentForChildren(), - isClean()); - dataInfo_ = null; - } - return dataInfoBuilder_; - } - - // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.Result.Journal) - } - - static { - defaultInstance = new Journal(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.Result.Journal) - } - - public interface ContextOrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // required string id = 1; - boolean hasId(); - String getId(); - - // repeated .eu.dnetlib.data.proto.DataInfo dataInfo = 2; - java.util.List - getDataInfoList(); - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo(int index); - int getDataInfoCount(); - java.util.List - getDataInfoOrBuilderList(); - eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder( - int index); - } - public static final class Context extends - com.google.protobuf.GeneratedMessage - implements ContextOrBuilder { - // Use Context.newBuilder() to construct. - private Context(Builder builder) { - super(builder); - } - private Context(boolean noInit) {} - - private static final Context defaultInstance; - public static Context getDefaultInstance() { - return defaultInstance; - } - - public Context getDefaultInstanceForType() { - return defaultInstance; - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_Context_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_Context_fieldAccessorTable; - } - - private int bitField0_; - // required string id = 1; - public static final int ID_FIELD_NUMBER = 1; - private java.lang.Object id_; - public boolean hasId() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public String getId() { - java.lang.Object ref = id_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - id_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getIdBytes() { - java.lang.Object ref = id_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - id_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // repeated .eu.dnetlib.data.proto.DataInfo dataInfo = 2; - public static final int DATAINFO_FIELD_NUMBER = 2; - private java.util.List dataInfo_; - public java.util.List getDataInfoList() { - return dataInfo_; - } - public java.util.List - getDataInfoOrBuilderList() { - return dataInfo_; - } - public int getDataInfoCount() { - return dataInfo_.size(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo(int index) { - return dataInfo_.get(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder( - int index) { - return dataInfo_.get(index); - } - - private void initFields() { - id_ = ""; - dataInfo_ = java.util.Collections.emptyList(); - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - if (!hasId()) { - memoizedIsInitialized = 0; - return false; - } - for (int i = 0; i < getDataInfoCount(); i++) { - if (!getDataInfo(i).isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeBytes(1, getIdBytes()); - } - for (int i = 0; i < dataInfo_.size(); i++) { - output.writeMessage(2, dataInfo_.get(i)); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(1, getIdBytes()); - } - for (int i = 0; i < dataInfo_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(2, dataInfo_.get(i)); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static eu.dnetlib.data.proto.ResultProtos.Result.Context parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProtos.Result.Context parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProtos.Result.Context parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProtos.Result.Context parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProtos.Result.Context parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProtos.Result.Context parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProtos.Result.Context parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.ResultProtos.Result.Context parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.ResultProtos.Result.Context parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProtos.Result.Context parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(eu.dnetlib.data.proto.ResultProtos.Result.Context prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder - implements eu.dnetlib.data.proto.ResultProtos.Result.ContextOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_Context_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_Context_fieldAccessorTable; - } - - // Construct using eu.dnetlib.data.proto.ResultProtos.Result.Context.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - getDataInfoFieldBuilder(); - } - } - private static Builder create() { - return new Builder(); - } - - public Builder clear() { - super.clear(); - id_ = ""; - bitField0_ = (bitField0_ & ~0x00000001); - if (dataInfoBuilder_ == null) { - dataInfo_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000002); - } else { - dataInfoBuilder_.clear(); - } - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return eu.dnetlib.data.proto.ResultProtos.Result.Context.getDescriptor(); - } - - public eu.dnetlib.data.proto.ResultProtos.Result.Context getDefaultInstanceForType() { - return eu.dnetlib.data.proto.ResultProtos.Result.Context.getDefaultInstance(); - } - - public eu.dnetlib.data.proto.ResultProtos.Result.Context build() { - eu.dnetlib.data.proto.ResultProtos.Result.Context result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - private eu.dnetlib.data.proto.ResultProtos.Result.Context buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - eu.dnetlib.data.proto.ResultProtos.Result.Context result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return result; - } - - public eu.dnetlib.data.proto.ResultProtos.Result.Context buildPartial() { - eu.dnetlib.data.proto.ResultProtos.Result.Context result = new eu.dnetlib.data.proto.ResultProtos.Result.Context(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - result.id_ = id_; - if (dataInfoBuilder_ == null) { - if (((bitField0_ & 0x00000002) == 0x00000002)) { - dataInfo_ = java.util.Collections.unmodifiableList(dataInfo_); - bitField0_ = (bitField0_ & ~0x00000002); - } - result.dataInfo_ = dataInfo_; - } else { - result.dataInfo_ = dataInfoBuilder_.build(); - } - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof eu.dnetlib.data.proto.ResultProtos.Result.Context) { - return mergeFrom((eu.dnetlib.data.proto.ResultProtos.Result.Context)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(eu.dnetlib.data.proto.ResultProtos.Result.Context other) { - if (other == eu.dnetlib.data.proto.ResultProtos.Result.Context.getDefaultInstance()) return this; - if (other.hasId()) { - setId(other.getId()); - } - if (dataInfoBuilder_ == null) { - if (!other.dataInfo_.isEmpty()) { - if (dataInfo_.isEmpty()) { - dataInfo_ = other.dataInfo_; - bitField0_ = (bitField0_ & ~0x00000002); - } else { - ensureDataInfoIsMutable(); - dataInfo_.addAll(other.dataInfo_); - } - onChanged(); - } - } else { - if (!other.dataInfo_.isEmpty()) { - if (dataInfoBuilder_.isEmpty()) { - dataInfoBuilder_.dispose(); - dataInfoBuilder_ = null; - dataInfo_ = other.dataInfo_; - bitField0_ = (bitField0_ & ~0x00000002); - dataInfoBuilder_ = - com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? - getDataInfoFieldBuilder() : null; - } else { - dataInfoBuilder_.addAllMessages(other.dataInfo_); - } - } - } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - - public final boolean isInitialized() { - if (!hasId()) { - - return false; - } - for (int i = 0; i < getDataInfoCount(); i++) { - if (!getDataInfo(i).isInitialized()) { - - return false; - } - } - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - } - break; - } - case 10: { - bitField0_ |= 0x00000001; - id_ = input.readBytes(); - break; - } - case 18: { - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.newBuilder(); - input.readMessage(subBuilder, extensionRegistry); - addDataInfo(subBuilder.buildPartial()); - break; - } - } - } - } - - private int bitField0_; - - // required string id = 1; - private java.lang.Object id_ = ""; - public boolean hasId() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public String getId() { - java.lang.Object ref = id_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - id_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setId(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000001; - id_ = value; - onChanged(); - return this; - } - public Builder clearId() { - bitField0_ = (bitField0_ & ~0x00000001); - id_ = getDefaultInstance().getId(); - onChanged(); - return this; - } - void setId(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000001; - id_ = value; - onChanged(); - } - - // repeated .eu.dnetlib.data.proto.DataInfo dataInfo = 2; - private java.util.List dataInfo_ = - java.util.Collections.emptyList(); - private void ensureDataInfoIsMutable() { - if (!((bitField0_ & 0x00000002) == 0x00000002)) { - dataInfo_ = new java.util.ArrayList(dataInfo_); - bitField0_ |= 0x00000002; - } - } - - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder> dataInfoBuilder_; - - public java.util.List getDataInfoList() { - if (dataInfoBuilder_ == null) { - return java.util.Collections.unmodifiableList(dataInfo_); - } else { - return dataInfoBuilder_.getMessageList(); - } - } - public int getDataInfoCount() { - if (dataInfoBuilder_ == null) { - return dataInfo_.size(); - } else { - return dataInfoBuilder_.getCount(); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo(int index) { - if (dataInfoBuilder_ == null) { - return dataInfo_.get(index); - } else { - return dataInfoBuilder_.getMessage(index); - } - } - public Builder setDataInfo( - int index, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo value) { - if (dataInfoBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureDataInfoIsMutable(); - dataInfo_.set(index, value); - onChanged(); - } else { - dataInfoBuilder_.setMessage(index, value); - } - return this; - } - public Builder setDataInfo( - int index, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder builderForValue) { - if (dataInfoBuilder_ == null) { - ensureDataInfoIsMutable(); - dataInfo_.set(index, builderForValue.build()); - onChanged(); - } else { - dataInfoBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - public Builder addDataInfo(eu.dnetlib.data.proto.FieldTypeProtos.DataInfo value) { - if (dataInfoBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureDataInfoIsMutable(); - dataInfo_.add(value); - onChanged(); - } else { - dataInfoBuilder_.addMessage(value); - } - return this; - } - public Builder addDataInfo( - int index, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo value) { - if (dataInfoBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureDataInfoIsMutable(); - dataInfo_.add(index, value); - onChanged(); - } else { - dataInfoBuilder_.addMessage(index, value); - } - return this; - } - public Builder addDataInfo( - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder builderForValue) { - if (dataInfoBuilder_ == null) { - ensureDataInfoIsMutable(); - dataInfo_.add(builderForValue.build()); - onChanged(); - } else { - dataInfoBuilder_.addMessage(builderForValue.build()); - } - return this; - } - public Builder addDataInfo( - int index, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder builderForValue) { - if (dataInfoBuilder_ == null) { - ensureDataInfoIsMutable(); - dataInfo_.add(index, builderForValue.build()); - onChanged(); - } else { - dataInfoBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - public Builder addAllDataInfo( - java.lang.Iterable values) { - if (dataInfoBuilder_ == null) { - ensureDataInfoIsMutable(); - super.addAll(values, dataInfo_); - onChanged(); - } else { - dataInfoBuilder_.addAllMessages(values); - } - return this; - } - public Builder clearDataInfo() { - if (dataInfoBuilder_ == null) { - dataInfo_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000002); - onChanged(); - } else { - dataInfoBuilder_.clear(); - } - return this; - } - public Builder removeDataInfo(int index) { - if (dataInfoBuilder_ == null) { - ensureDataInfoIsMutable(); - dataInfo_.remove(index); - onChanged(); - } else { - dataInfoBuilder_.remove(index); - } - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder getDataInfoBuilder( - int index) { - return getDataInfoFieldBuilder().getBuilder(index); - } - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder( - int index) { - if (dataInfoBuilder_ == null) { - return dataInfo_.get(index); } else { - return dataInfoBuilder_.getMessageOrBuilder(index); - } - } - public java.util.List - getDataInfoOrBuilderList() { - if (dataInfoBuilder_ != null) { - return dataInfoBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(dataInfo_); - } - } - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder addDataInfoBuilder() { - return getDataInfoFieldBuilder().addBuilder( - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance()); - } - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder addDataInfoBuilder( - int index) { - return getDataInfoFieldBuilder().addBuilder( - index, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance()); - } - public java.util.List - getDataInfoBuilderList() { - return getDataInfoFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder> - getDataInfoFieldBuilder() { - if (dataInfoBuilder_ == null) { - dataInfoBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder>( - dataInfo_, - ((bitField0_ & 0x00000002) == 0x00000002), - getParentForChildren(), - isClean()); - dataInfo_ = null; - } - return dataInfoBuilder_; - } - - // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.Result.Context) - } - - static { - defaultInstance = new Context(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.Result.Context) - } - - public interface InstanceOrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // optional .eu.dnetlib.data.proto.StringField license = 6; - boolean hasLicense(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getLicense(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getLicenseOrBuilder(); - - // optional .eu.dnetlib.data.proto.Qualifier accessright = 3; - boolean hasAccessright(); - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getAccessright(); - eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getAccessrightOrBuilder(); - - // optional .eu.dnetlib.data.proto.Qualifier instancetype = 4; - boolean hasInstancetype(); - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getInstancetype(); - eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getInstancetypeOrBuilder(); - - // optional .eu.dnetlib.data.proto.KeyValue hostedby = 5; - boolean hasHostedby(); - eu.dnetlib.data.proto.FieldTypeProtos.KeyValue getHostedby(); - eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder getHostedbyOrBuilder(); - - // repeated string url = 9; - java.util.List getUrlList(); - int getUrlCount(); - String getUrl(int index); - - // optional string distributionlocation = 12; - boolean hasDistributionlocation(); - String getDistributionlocation(); - - // optional .eu.dnetlib.data.proto.KeyValue collectedfrom = 10; - boolean hasCollectedfrom(); - eu.dnetlib.data.proto.FieldTypeProtos.KeyValue getCollectedfrom(); - eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder getCollectedfromOrBuilder(); - - // optional .eu.dnetlib.data.proto.StringField dateofacceptance = 11; - boolean hasDateofacceptance(); - eu.dnetlib.data.proto.FieldTypeProtos.StringField getDateofacceptance(); - eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDateofacceptanceOrBuilder(); - } - public static final class Instance extends - com.google.protobuf.GeneratedMessage - implements InstanceOrBuilder { - // Use Instance.newBuilder() to construct. - private Instance(Builder builder) { - super(builder); - } - private Instance(boolean noInit) {} - - private static final Instance defaultInstance; - public static Instance getDefaultInstance() { - return defaultInstance; - } - - public Instance getDefaultInstanceForType() { - return defaultInstance; - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_Instance_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_Instance_fieldAccessorTable; - } - - private int bitField0_; - // optional .eu.dnetlib.data.proto.StringField license = 6; - public static final int LICENSE_FIELD_NUMBER = 6; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField license_; - public boolean hasLicense() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getLicense() { - return license_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getLicenseOrBuilder() { - return license_; - } - - // optional .eu.dnetlib.data.proto.Qualifier accessright = 3; - public static final int ACCESSRIGHT_FIELD_NUMBER = 3; - private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier accessright_; - public boolean hasAccessright() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getAccessright() { - return accessright_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getAccessrightOrBuilder() { - return accessright_; - } - - // optional .eu.dnetlib.data.proto.Qualifier instancetype = 4; - public static final int INSTANCETYPE_FIELD_NUMBER = 4; - private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier instancetype_; - public boolean hasInstancetype() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getInstancetype() { - return instancetype_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getInstancetypeOrBuilder() { - return instancetype_; - } - - // optional .eu.dnetlib.data.proto.KeyValue hostedby = 5; - public static final int HOSTEDBY_FIELD_NUMBER = 5; - private eu.dnetlib.data.proto.FieldTypeProtos.KeyValue hostedby_; - public boolean hasHostedby() { - return ((bitField0_ & 0x00000008) == 0x00000008); - } - public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue getHostedby() { - return hostedby_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder getHostedbyOrBuilder() { - return hostedby_; - } - - // repeated string url = 9; - public static final int URL_FIELD_NUMBER = 9; - private com.google.protobuf.LazyStringList url_; - public java.util.List - getUrlList() { - return url_; - } - public int getUrlCount() { - return url_.size(); - } - public String getUrl(int index) { - return url_.get(index); - } - - // optional string distributionlocation = 12; - public static final int DISTRIBUTIONLOCATION_FIELD_NUMBER = 12; - private java.lang.Object distributionlocation_; - public boolean hasDistributionlocation() { - return ((bitField0_ & 0x00000010) == 0x00000010); - } - public String getDistributionlocation() { - java.lang.Object ref = distributionlocation_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - distributionlocation_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getDistributionlocationBytes() { - java.lang.Object ref = distributionlocation_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - distributionlocation_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // optional .eu.dnetlib.data.proto.KeyValue collectedfrom = 10; - public static final int COLLECTEDFROM_FIELD_NUMBER = 10; - private eu.dnetlib.data.proto.FieldTypeProtos.KeyValue collectedfrom_; - public boolean hasCollectedfrom() { - return ((bitField0_ & 0x00000020) == 0x00000020); - } - public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue getCollectedfrom() { - return collectedfrom_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder getCollectedfromOrBuilder() { - return collectedfrom_; - } - - // optional .eu.dnetlib.data.proto.StringField dateofacceptance = 11; - public static final int DATEOFACCEPTANCE_FIELD_NUMBER = 11; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField dateofacceptance_; - public boolean hasDateofacceptance() { - return ((bitField0_ & 0x00000040) == 0x00000040); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getDateofacceptance() { - return dateofacceptance_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDateofacceptanceOrBuilder() { - return dateofacceptance_; - } - - private void initFields() { - license_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - accessright_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - instancetype_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - hostedby_ = eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.getDefaultInstance(); - url_ = com.google.protobuf.LazyStringArrayList.EMPTY; - distributionlocation_ = ""; - collectedfrom_ = eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.getDefaultInstance(); - dateofacceptance_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - if (hasLicense()) { - if (!getLicense().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasAccessright()) { - if (!getAccessright().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasInstancetype()) { - if (!getInstancetype().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasHostedby()) { - if (!getHostedby().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasCollectedfrom()) { - if (!getCollectedfrom().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasDateofacceptance()) { - if (!getDateofacceptance().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000002) == 0x00000002)) { - output.writeMessage(3, accessright_); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - output.writeMessage(4, instancetype_); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - output.writeMessage(5, hostedby_); - } - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeMessage(6, license_); - } - for (int i = 0; i < url_.size(); i++) { - output.writeBytes(9, url_.getByteString(i)); - } - if (((bitField0_ & 0x00000020) == 0x00000020)) { - output.writeMessage(10, collectedfrom_); - } - if (((bitField0_ & 0x00000040) == 0x00000040)) { - output.writeMessage(11, dateofacceptance_); - } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - output.writeBytes(12, getDistributionlocationBytes()); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000002) == 0x00000002)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(3, accessright_); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(4, instancetype_); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(5, hostedby_); - } - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(6, license_); - } - { - int dataSize = 0; - for (int i = 0; i < url_.size(); i++) { - dataSize += com.google.protobuf.CodedOutputStream - .computeBytesSizeNoTag(url_.getByteString(i)); - } - size += dataSize; - size += 1 * getUrlList().size(); - } - if (((bitField0_ & 0x00000020) == 0x00000020)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(10, collectedfrom_); - } - if (((bitField0_ & 0x00000040) == 0x00000040)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(11, dateofacceptance_); - } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(12, getDistributionlocationBytes()); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static eu.dnetlib.data.proto.ResultProtos.Result.Instance parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProtos.Result.Instance parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProtos.Result.Instance parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProtos.Result.Instance parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProtos.Result.Instance parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProtos.Result.Instance parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProtos.Result.Instance parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.ResultProtos.Result.Instance parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.ResultProtos.Result.Instance parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProtos.Result.Instance parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(eu.dnetlib.data.proto.ResultProtos.Result.Instance prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder - implements eu.dnetlib.data.proto.ResultProtos.Result.InstanceOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_Instance_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_Instance_fieldAccessorTable; - } - - // Construct using eu.dnetlib.data.proto.ResultProtos.Result.Instance.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - getLicenseFieldBuilder(); - getAccessrightFieldBuilder(); - getInstancetypeFieldBuilder(); - getHostedbyFieldBuilder(); - getCollectedfromFieldBuilder(); - getDateofacceptanceFieldBuilder(); - } - } - private static Builder create() { - return new Builder(); - } - - public Builder clear() { - super.clear(); - if (licenseBuilder_ == null) { - license_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - licenseBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - if (accessrightBuilder_ == null) { - accessright_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - } else { - accessrightBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000002); - if (instancetypeBuilder_ == null) { - instancetype_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - } else { - instancetypeBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000004); - if (hostedbyBuilder_ == null) { - hostedby_ = eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.getDefaultInstance(); - } else { - hostedbyBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000008); - url_ = com.google.protobuf.LazyStringArrayList.EMPTY; - bitField0_ = (bitField0_ & ~0x00000010); - distributionlocation_ = ""; - bitField0_ = (bitField0_ & ~0x00000020); - if (collectedfromBuilder_ == null) { - collectedfrom_ = eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.getDefaultInstance(); - } else { - collectedfromBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000040); - if (dateofacceptanceBuilder_ == null) { - dateofacceptance_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - } else { - dateofacceptanceBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000080); - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return eu.dnetlib.data.proto.ResultProtos.Result.Instance.getDescriptor(); - } - - public eu.dnetlib.data.proto.ResultProtos.Result.Instance getDefaultInstanceForType() { - return eu.dnetlib.data.proto.ResultProtos.Result.Instance.getDefaultInstance(); - } - - public eu.dnetlib.data.proto.ResultProtos.Result.Instance build() { - eu.dnetlib.data.proto.ResultProtos.Result.Instance result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - private eu.dnetlib.data.proto.ResultProtos.Result.Instance buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - eu.dnetlib.data.proto.ResultProtos.Result.Instance result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return result; - } - - public eu.dnetlib.data.proto.ResultProtos.Result.Instance buildPartial() { - eu.dnetlib.data.proto.ResultProtos.Result.Instance result = new eu.dnetlib.data.proto.ResultProtos.Result.Instance(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - if (licenseBuilder_ == null) { - result.license_ = license_; - } else { - result.license_ = licenseBuilder_.build(); - } - if (((from_bitField0_ & 0x00000002) == 0x00000002)) { - to_bitField0_ |= 0x00000002; - } - if (accessrightBuilder_ == null) { - result.accessright_ = accessright_; - } else { - result.accessright_ = accessrightBuilder_.build(); - } - if (((from_bitField0_ & 0x00000004) == 0x00000004)) { - to_bitField0_ |= 0x00000004; - } - if (instancetypeBuilder_ == null) { - result.instancetype_ = instancetype_; - } else { - result.instancetype_ = instancetypeBuilder_.build(); - } - if (((from_bitField0_ & 0x00000008) == 0x00000008)) { - to_bitField0_ |= 0x00000008; - } - if (hostedbyBuilder_ == null) { - result.hostedby_ = hostedby_; - } else { - result.hostedby_ = hostedbyBuilder_.build(); - } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - url_ = new com.google.protobuf.UnmodifiableLazyStringList( - url_); - bitField0_ = (bitField0_ & ~0x00000010); - } - result.url_ = url_; - if (((from_bitField0_ & 0x00000020) == 0x00000020)) { - to_bitField0_ |= 0x00000010; - } - result.distributionlocation_ = distributionlocation_; - if (((from_bitField0_ & 0x00000040) == 0x00000040)) { - to_bitField0_ |= 0x00000020; - } - if (collectedfromBuilder_ == null) { - result.collectedfrom_ = collectedfrom_; - } else { - result.collectedfrom_ = collectedfromBuilder_.build(); - } - if (((from_bitField0_ & 0x00000080) == 0x00000080)) { - to_bitField0_ |= 0x00000040; - } - if (dateofacceptanceBuilder_ == null) { - result.dateofacceptance_ = dateofacceptance_; - } else { - result.dateofacceptance_ = dateofacceptanceBuilder_.build(); - } - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof eu.dnetlib.data.proto.ResultProtos.Result.Instance) { - return mergeFrom((eu.dnetlib.data.proto.ResultProtos.Result.Instance)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(eu.dnetlib.data.proto.ResultProtos.Result.Instance other) { - if (other == eu.dnetlib.data.proto.ResultProtos.Result.Instance.getDefaultInstance()) return this; - if (other.hasLicense()) { - mergeLicense(other.getLicense()); - } - if (other.hasAccessright()) { - mergeAccessright(other.getAccessright()); - } - if (other.hasInstancetype()) { - mergeInstancetype(other.getInstancetype()); - } - if (other.hasHostedby()) { - mergeHostedby(other.getHostedby()); - } - if (!other.url_.isEmpty()) { - if (url_.isEmpty()) { - url_ = other.url_; - bitField0_ = (bitField0_ & ~0x00000010); - } else { - ensureUrlIsMutable(); - url_.addAll(other.url_); - } - onChanged(); - } - if (other.hasDistributionlocation()) { - setDistributionlocation(other.getDistributionlocation()); - } - if (other.hasCollectedfrom()) { - mergeCollectedfrom(other.getCollectedfrom()); - } - if (other.hasDateofacceptance()) { - mergeDateofacceptance(other.getDateofacceptance()); - } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - - public final boolean isInitialized() { - if (hasLicense()) { - if (!getLicense().isInitialized()) { - - return false; - } - } - if (hasAccessright()) { - if (!getAccessright().isInitialized()) { - - return false; - } - } - if (hasInstancetype()) { - if (!getInstancetype().isInitialized()) { - - return false; - } - } - if (hasHostedby()) { - if (!getHostedby().isInitialized()) { - - return false; - } - } - if (hasCollectedfrom()) { - if (!getCollectedfrom().isInitialized()) { - - return false; - } - } - if (hasDateofacceptance()) { - if (!getDateofacceptance().isInitialized()) { - - return false; - } - } - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - } - break; - } - case 26: { - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(); - if (hasAccessright()) { - subBuilder.mergeFrom(getAccessright()); - } - input.readMessage(subBuilder, extensionRegistry); - setAccessright(subBuilder.buildPartial()); - break; - } - case 34: { - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(); - if (hasInstancetype()) { - subBuilder.mergeFrom(getInstancetype()); - } - input.readMessage(subBuilder, extensionRegistry); - setInstancetype(subBuilder.buildPartial()); - break; - } - case 42: { - eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.newBuilder(); - if (hasHostedby()) { - subBuilder.mergeFrom(getHostedby()); - } - input.readMessage(subBuilder, extensionRegistry); - setHostedby(subBuilder.buildPartial()); - break; - } - case 50: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasLicense()) { - subBuilder.mergeFrom(getLicense()); - } - input.readMessage(subBuilder, extensionRegistry); - setLicense(subBuilder.buildPartial()); - break; - } - case 74: { - ensureUrlIsMutable(); - url_.add(input.readBytes()); - break; - } - case 82: { - eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.newBuilder(); - if (hasCollectedfrom()) { - subBuilder.mergeFrom(getCollectedfrom()); - } - input.readMessage(subBuilder, extensionRegistry); - setCollectedfrom(subBuilder.buildPartial()); - break; - } - case 90: { - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(); - if (hasDateofacceptance()) { - subBuilder.mergeFrom(getDateofacceptance()); - } - input.readMessage(subBuilder, extensionRegistry); - setDateofacceptance(subBuilder.buildPartial()); - break; - } - case 98: { - bitField0_ |= 0x00000020; - distributionlocation_ = input.readBytes(); - break; - } - } - } - } - - private int bitField0_; - - // optional .eu.dnetlib.data.proto.StringField license = 6; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField license_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> licenseBuilder_; - public boolean hasLicense() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getLicense() { - if (licenseBuilder_ == null) { - return license_; - } else { - return licenseBuilder_.getMessage(); - } - } - public Builder setLicense(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (licenseBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - license_ = value; - onChanged(); - } else { - licenseBuilder_.setMessage(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder setLicense( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (licenseBuilder_ == null) { - license_ = builderForValue.build(); - onChanged(); - } else { - licenseBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder mergeLicense(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (licenseBuilder_ == null) { - if (((bitField0_ & 0x00000001) == 0x00000001) && - license_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - license_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(license_).mergeFrom(value).buildPartial(); - } else { - license_ = value; - } - onChanged(); - } else { - licenseBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder clearLicense() { - if (licenseBuilder_ == null) { - license_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - licenseBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getLicenseBuilder() { - bitField0_ |= 0x00000001; - onChanged(); - return getLicenseFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getLicenseOrBuilder() { - if (licenseBuilder_ != null) { - return licenseBuilder_.getMessageOrBuilder(); - } else { - return license_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getLicenseFieldBuilder() { - if (licenseBuilder_ == null) { - licenseBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - license_, - getParentForChildren(), - isClean()); - license_ = null; - } - return licenseBuilder_; - } - - // optional .eu.dnetlib.data.proto.Qualifier accessright = 3; - private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier accessright_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> accessrightBuilder_; - public boolean hasAccessright() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getAccessright() { - if (accessrightBuilder_ == null) { - return accessright_; - } else { - return accessrightBuilder_.getMessage(); - } - } - public Builder setAccessright(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { - if (accessrightBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - accessright_ = value; - onChanged(); - } else { - accessrightBuilder_.setMessage(value); - } - bitField0_ |= 0x00000002; - return this; - } - public Builder setAccessright( - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder builderForValue) { - if (accessrightBuilder_ == null) { - accessright_ = builderForValue.build(); - onChanged(); - } else { - accessrightBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000002; - return this; - } - public Builder mergeAccessright(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { - if (accessrightBuilder_ == null) { - if (((bitField0_ & 0x00000002) == 0x00000002) && - accessright_ != eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance()) { - accessright_ = - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(accessright_).mergeFrom(value).buildPartial(); - } else { - accessright_ = value; - } - onChanged(); - } else { - accessrightBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000002; - return this; - } - public Builder clearAccessright() { - if (accessrightBuilder_ == null) { - accessright_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - onChanged(); - } else { - accessrightBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000002); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder getAccessrightBuilder() { - bitField0_ |= 0x00000002; - onChanged(); - return getAccessrightFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getAccessrightOrBuilder() { - if (accessrightBuilder_ != null) { - return accessrightBuilder_.getMessageOrBuilder(); - } else { - return accessright_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> - getAccessrightFieldBuilder() { - if (accessrightBuilder_ == null) { - accessrightBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder>( - accessright_, - getParentForChildren(), - isClean()); - accessright_ = null; - } - return accessrightBuilder_; - } - - // optional .eu.dnetlib.data.proto.Qualifier instancetype = 4; - private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier instancetype_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> instancetypeBuilder_; - public boolean hasInstancetype() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getInstancetype() { - if (instancetypeBuilder_ == null) { - return instancetype_; - } else { - return instancetypeBuilder_.getMessage(); - } - } - public Builder setInstancetype(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { - if (instancetypeBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - instancetype_ = value; - onChanged(); - } else { - instancetypeBuilder_.setMessage(value); - } - bitField0_ |= 0x00000004; - return this; - } - public Builder setInstancetype( - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder builderForValue) { - if (instancetypeBuilder_ == null) { - instancetype_ = builderForValue.build(); - onChanged(); - } else { - instancetypeBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000004; - return this; - } - public Builder mergeInstancetype(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { - if (instancetypeBuilder_ == null) { - if (((bitField0_ & 0x00000004) == 0x00000004) && - instancetype_ != eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance()) { - instancetype_ = - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(instancetype_).mergeFrom(value).buildPartial(); - } else { - instancetype_ = value; - } - onChanged(); - } else { - instancetypeBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000004; - return this; - } - public Builder clearInstancetype() { - if (instancetypeBuilder_ == null) { - instancetype_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - onChanged(); - } else { - instancetypeBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000004); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder getInstancetypeBuilder() { - bitField0_ |= 0x00000004; - onChanged(); - return getInstancetypeFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getInstancetypeOrBuilder() { - if (instancetypeBuilder_ != null) { - return instancetypeBuilder_.getMessageOrBuilder(); - } else { - return instancetype_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> - getInstancetypeFieldBuilder() { - if (instancetypeBuilder_ == null) { - instancetypeBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder>( - instancetype_, - getParentForChildren(), - isClean()); - instancetype_ = null; - } - return instancetypeBuilder_; - } - - // optional .eu.dnetlib.data.proto.KeyValue hostedby = 5; - private eu.dnetlib.data.proto.FieldTypeProtos.KeyValue hostedby_ = eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.KeyValue, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder, eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder> hostedbyBuilder_; - public boolean hasHostedby() { - return ((bitField0_ & 0x00000008) == 0x00000008); - } - public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue getHostedby() { - if (hostedbyBuilder_ == null) { - return hostedby_; - } else { - return hostedbyBuilder_.getMessage(); - } - } - public Builder setHostedby(eu.dnetlib.data.proto.FieldTypeProtos.KeyValue value) { - if (hostedbyBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - hostedby_ = value; - onChanged(); - } else { - hostedbyBuilder_.setMessage(value); - } - bitField0_ |= 0x00000008; - return this; - } - public Builder setHostedby( - eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder builderForValue) { - if (hostedbyBuilder_ == null) { - hostedby_ = builderForValue.build(); - onChanged(); - } else { - hostedbyBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000008; - return this; - } - public Builder mergeHostedby(eu.dnetlib.data.proto.FieldTypeProtos.KeyValue value) { - if (hostedbyBuilder_ == null) { - if (((bitField0_ & 0x00000008) == 0x00000008) && - hostedby_ != eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.getDefaultInstance()) { - hostedby_ = - eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.newBuilder(hostedby_).mergeFrom(value).buildPartial(); - } else { - hostedby_ = value; - } - onChanged(); - } else { - hostedbyBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000008; - return this; - } - public Builder clearHostedby() { - if (hostedbyBuilder_ == null) { - hostedby_ = eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.getDefaultInstance(); - onChanged(); - } else { - hostedbyBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000008); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder getHostedbyBuilder() { - bitField0_ |= 0x00000008; - onChanged(); - return getHostedbyFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder getHostedbyOrBuilder() { - if (hostedbyBuilder_ != null) { - return hostedbyBuilder_.getMessageOrBuilder(); - } else { - return hostedby_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.KeyValue, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder, eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder> - getHostedbyFieldBuilder() { - if (hostedbyBuilder_ == null) { - hostedbyBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.KeyValue, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder, eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder>( - hostedby_, - getParentForChildren(), - isClean()); - hostedby_ = null; - } - return hostedbyBuilder_; - } - - // repeated string url = 9; - private com.google.protobuf.LazyStringList url_ = com.google.protobuf.LazyStringArrayList.EMPTY; - private void ensureUrlIsMutable() { - if (!((bitField0_ & 0x00000010) == 0x00000010)) { - url_ = new com.google.protobuf.LazyStringArrayList(url_); - bitField0_ |= 0x00000010; - } - } - public java.util.List - getUrlList() { - return java.util.Collections.unmodifiableList(url_); - } - public int getUrlCount() { - return url_.size(); - } - public String getUrl(int index) { - return url_.get(index); - } - public Builder setUrl( - int index, String value) { - if (value == null) { - throw new NullPointerException(); - } - ensureUrlIsMutable(); - url_.set(index, value); - onChanged(); - return this; - } - public Builder addUrl(String value) { - if (value == null) { - throw new NullPointerException(); - } - ensureUrlIsMutable(); - url_.add(value); - onChanged(); - return this; - } - public Builder addAllUrl( - java.lang.Iterable values) { - ensureUrlIsMutable(); - super.addAll(values, url_); - onChanged(); - return this; - } - public Builder clearUrl() { - url_ = com.google.protobuf.LazyStringArrayList.EMPTY; - bitField0_ = (bitField0_ & ~0x00000010); - onChanged(); - return this; - } - void addUrl(com.google.protobuf.ByteString value) { - ensureUrlIsMutable(); - url_.add(value); - onChanged(); - } - - // optional string distributionlocation = 12; - private java.lang.Object distributionlocation_ = ""; - public boolean hasDistributionlocation() { - return ((bitField0_ & 0x00000020) == 0x00000020); - } - public String getDistributionlocation() { - java.lang.Object ref = distributionlocation_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - distributionlocation_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setDistributionlocation(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000020; - distributionlocation_ = value; - onChanged(); - return this; - } - public Builder clearDistributionlocation() { - bitField0_ = (bitField0_ & ~0x00000020); - distributionlocation_ = getDefaultInstance().getDistributionlocation(); - onChanged(); - return this; - } - void setDistributionlocation(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000020; - distributionlocation_ = value; - onChanged(); - } - - // optional .eu.dnetlib.data.proto.KeyValue collectedfrom = 10; - private eu.dnetlib.data.proto.FieldTypeProtos.KeyValue collectedfrom_ = eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.KeyValue, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder, eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder> collectedfromBuilder_; - public boolean hasCollectedfrom() { - return ((bitField0_ & 0x00000040) == 0x00000040); - } - public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue getCollectedfrom() { - if (collectedfromBuilder_ == null) { - return collectedfrom_; - } else { - return collectedfromBuilder_.getMessage(); - } - } - public Builder setCollectedfrom(eu.dnetlib.data.proto.FieldTypeProtos.KeyValue value) { - if (collectedfromBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - collectedfrom_ = value; - onChanged(); - } else { - collectedfromBuilder_.setMessage(value); - } - bitField0_ |= 0x00000040; - return this; - } - public Builder setCollectedfrom( - eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder builderForValue) { - if (collectedfromBuilder_ == null) { - collectedfrom_ = builderForValue.build(); - onChanged(); - } else { - collectedfromBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000040; - return this; - } - public Builder mergeCollectedfrom(eu.dnetlib.data.proto.FieldTypeProtos.KeyValue value) { - if (collectedfromBuilder_ == null) { - if (((bitField0_ & 0x00000040) == 0x00000040) && - collectedfrom_ != eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.getDefaultInstance()) { - collectedfrom_ = - eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.newBuilder(collectedfrom_).mergeFrom(value).buildPartial(); - } else { - collectedfrom_ = value; - } - onChanged(); - } else { - collectedfromBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000040; - return this; - } - public Builder clearCollectedfrom() { - if (collectedfromBuilder_ == null) { - collectedfrom_ = eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.getDefaultInstance(); - onChanged(); - } else { - collectedfromBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000040); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder getCollectedfromBuilder() { - bitField0_ |= 0x00000040; - onChanged(); - return getCollectedfromFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder getCollectedfromOrBuilder() { - if (collectedfromBuilder_ != null) { - return collectedfromBuilder_.getMessageOrBuilder(); - } else { - return collectedfrom_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.KeyValue, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder, eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder> - getCollectedfromFieldBuilder() { - if (collectedfromBuilder_ == null) { - collectedfromBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.KeyValue, eu.dnetlib.data.proto.FieldTypeProtos.KeyValue.Builder, eu.dnetlib.data.proto.FieldTypeProtos.KeyValueOrBuilder>( - collectedfrom_, - getParentForChildren(), - isClean()); - collectedfrom_ = null; - } - return collectedfromBuilder_; - } - - // optional .eu.dnetlib.data.proto.StringField dateofacceptance = 11; - private eu.dnetlib.data.proto.FieldTypeProtos.StringField dateofacceptance_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> dateofacceptanceBuilder_; - public boolean hasDateofacceptance() { - return ((bitField0_ & 0x00000080) == 0x00000080); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField getDateofacceptance() { - if (dateofacceptanceBuilder_ == null) { - return dateofacceptance_; - } else { - return dateofacceptanceBuilder_.getMessage(); - } - } - public Builder setDateofacceptance(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (dateofacceptanceBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - dateofacceptance_ = value; - onChanged(); - } else { - dateofacceptanceBuilder_.setMessage(value); - } - bitField0_ |= 0x00000080; - return this; - } - public Builder setDateofacceptance( - eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder builderForValue) { - if (dateofacceptanceBuilder_ == null) { - dateofacceptance_ = builderForValue.build(); - onChanged(); - } else { - dateofacceptanceBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000080; - return this; - } - public Builder mergeDateofacceptance(eu.dnetlib.data.proto.FieldTypeProtos.StringField value) { - if (dateofacceptanceBuilder_ == null) { - if (((bitField0_ & 0x00000080) == 0x00000080) && - dateofacceptance_ != eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance()) { - dateofacceptance_ = - eu.dnetlib.data.proto.FieldTypeProtos.StringField.newBuilder(dateofacceptance_).mergeFrom(value).buildPartial(); - } else { - dateofacceptance_ = value; - } - onChanged(); - } else { - dateofacceptanceBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000080; - return this; - } - public Builder clearDateofacceptance() { - if (dateofacceptanceBuilder_ == null) { - dateofacceptance_ = eu.dnetlib.data.proto.FieldTypeProtos.StringField.getDefaultInstance(); - onChanged(); - } else { - dateofacceptanceBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000080); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder getDateofacceptanceBuilder() { - bitField0_ |= 0x00000080; - onChanged(); - return getDateofacceptanceFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder getDateofacceptanceOrBuilder() { - if (dateofacceptanceBuilder_ != null) { - return dateofacceptanceBuilder_.getMessageOrBuilder(); - } else { - return dateofacceptance_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder> - getDateofacceptanceFieldBuilder() { - if (dateofacceptanceBuilder_ == null) { - dateofacceptanceBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.StringField, eu.dnetlib.data.proto.FieldTypeProtos.StringField.Builder, eu.dnetlib.data.proto.FieldTypeProtos.StringFieldOrBuilder>( - dateofacceptance_, - getParentForChildren(), - isClean()); - dateofacceptance_ = null; - } - return dateofacceptanceBuilder_; - } - - // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.Result.Instance) - } - - static { - defaultInstance = new Instance(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.Result.Instance) - } - - public interface ExternalReferenceOrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // optional string sitename = 1; - boolean hasSitename(); - String getSitename(); - - // optional string label = 2; - boolean hasLabel(); - String getLabel(); - - // optional string url = 3; - boolean hasUrl(); - String getUrl(); - - // optional string description = 4; - boolean hasDescription(); - String getDescription(); - - // optional .eu.dnetlib.data.proto.Qualifier qualifier = 5; - boolean hasQualifier(); - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getQualifier(); - eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getQualifierOrBuilder(); - - // optional string refidentifier = 6; - boolean hasRefidentifier(); - String getRefidentifier(); - - // optional string query = 7; - boolean hasQuery(); - String getQuery(); - - // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 8; - boolean hasDataInfo(); - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo(); - eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder(); - } - public static final class ExternalReference extends - com.google.protobuf.GeneratedMessage - implements ExternalReferenceOrBuilder { - // Use ExternalReference.newBuilder() to construct. - private ExternalReference(Builder builder) { - super(builder); - } - private ExternalReference(boolean noInit) {} - - private static final ExternalReference defaultInstance; - public static ExternalReference getDefaultInstance() { - return defaultInstance; - } - - public ExternalReference getDefaultInstanceForType() { - return defaultInstance; - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_ExternalReference_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_ExternalReference_fieldAccessorTable; - } - - private int bitField0_; - // optional string sitename = 1; - public static final int SITENAME_FIELD_NUMBER = 1; - private java.lang.Object sitename_; - public boolean hasSitename() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public String getSitename() { - java.lang.Object ref = sitename_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - sitename_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getSitenameBytes() { - java.lang.Object ref = sitename_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - sitename_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // optional string label = 2; - public static final int LABEL_FIELD_NUMBER = 2; - private java.lang.Object label_; - public boolean hasLabel() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public String getLabel() { - java.lang.Object ref = label_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - label_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getLabelBytes() { - java.lang.Object ref = label_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - label_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // optional string url = 3; - public static final int URL_FIELD_NUMBER = 3; - private java.lang.Object url_; - public boolean hasUrl() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - public String getUrl() { - java.lang.Object ref = url_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - url_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getUrlBytes() { - java.lang.Object ref = url_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - url_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // optional string description = 4; - public static final int DESCRIPTION_FIELD_NUMBER = 4; - private java.lang.Object description_; - public boolean hasDescription() { - return ((bitField0_ & 0x00000008) == 0x00000008); - } - public String getDescription() { - java.lang.Object ref = description_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - description_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getDescriptionBytes() { - java.lang.Object ref = description_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - description_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // optional .eu.dnetlib.data.proto.Qualifier qualifier = 5; - public static final int QUALIFIER_FIELD_NUMBER = 5; - private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier qualifier_; - public boolean hasQualifier() { - return ((bitField0_ & 0x00000010) == 0x00000010); - } - public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getQualifier() { - return qualifier_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getQualifierOrBuilder() { - return qualifier_; - } - - // optional string refidentifier = 6; - public static final int REFIDENTIFIER_FIELD_NUMBER = 6; - private java.lang.Object refidentifier_; - public boolean hasRefidentifier() { - return ((bitField0_ & 0x00000020) == 0x00000020); - } - public String getRefidentifier() { - java.lang.Object ref = refidentifier_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - refidentifier_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getRefidentifierBytes() { - java.lang.Object ref = refidentifier_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - refidentifier_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // optional string query = 7; - public static final int QUERY_FIELD_NUMBER = 7; - private java.lang.Object query_; - public boolean hasQuery() { - return ((bitField0_ & 0x00000040) == 0x00000040); - } - public String getQuery() { - java.lang.Object ref = query_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - query_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getQueryBytes() { - java.lang.Object ref = query_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - query_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 8; - public static final int DATAINFO_FIELD_NUMBER = 8; - private eu.dnetlib.data.proto.FieldTypeProtos.DataInfo dataInfo_; - public boolean hasDataInfo() { - return ((bitField0_ & 0x00000080) == 0x00000080); - } - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo() { - return dataInfo_; - } - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder() { - return dataInfo_; - } - - private void initFields() { - sitename_ = ""; - label_ = ""; - url_ = ""; - description_ = ""; - qualifier_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - refidentifier_ = ""; - query_ = ""; - dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - if (hasQualifier()) { - if (!getQualifier().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasDataInfo()) { - if (!getDataInfo().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeBytes(1, getSitenameBytes()); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - output.writeBytes(2, getLabelBytes()); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - output.writeBytes(3, getUrlBytes()); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - output.writeBytes(4, getDescriptionBytes()); - } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - output.writeMessage(5, qualifier_); - } - if (((bitField0_ & 0x00000020) == 0x00000020)) { - output.writeBytes(6, getRefidentifierBytes()); - } - if (((bitField0_ & 0x00000040) == 0x00000040)) { - output.writeBytes(7, getQueryBytes()); - } - if (((bitField0_ & 0x00000080) == 0x00000080)) { - output.writeMessage(8, dataInfo_); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(1, getSitenameBytes()); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(2, getLabelBytes()); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(3, getUrlBytes()); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(4, getDescriptionBytes()); - } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(5, qualifier_); - } - if (((bitField0_ & 0x00000020) == 0x00000020)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(6, getRefidentifierBytes()); - } - if (((bitField0_ & 0x00000040) == 0x00000040)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(7, getQueryBytes()); - } - if (((bitField0_ & 0x00000080) == 0x00000080)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(8, dataInfo_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder - implements eu.dnetlib.data.proto.ResultProtos.Result.ExternalReferenceOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_ExternalReference_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_ExternalReference_fieldAccessorTable; - } - - // Construct using eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - getQualifierFieldBuilder(); - getDataInfoFieldBuilder(); - } - } - private static Builder create() { - return new Builder(); - } - - public Builder clear() { - super.clear(); - sitename_ = ""; - bitField0_ = (bitField0_ & ~0x00000001); - label_ = ""; - bitField0_ = (bitField0_ & ~0x00000002); - url_ = ""; - bitField0_ = (bitField0_ & ~0x00000004); - description_ = ""; - bitField0_ = (bitField0_ & ~0x00000008); - if (qualifierBuilder_ == null) { - qualifier_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - } else { - qualifierBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000010); - refidentifier_ = ""; - bitField0_ = (bitField0_ & ~0x00000020); - query_ = ""; - bitField0_ = (bitField0_ & ~0x00000040); - if (dataInfoBuilder_ == null) { - dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); - } else { - dataInfoBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000080); - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference.getDescriptor(); - } - - public eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference getDefaultInstanceForType() { - return eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference.getDefaultInstance(); - } - - public eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference build() { - eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - private eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return result; - } - - public eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference buildPartial() { - eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference result = new eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - result.sitename_ = sitename_; - if (((from_bitField0_ & 0x00000002) == 0x00000002)) { - to_bitField0_ |= 0x00000002; - } - result.label_ = label_; - if (((from_bitField0_ & 0x00000004) == 0x00000004)) { - to_bitField0_ |= 0x00000004; - } - result.url_ = url_; - if (((from_bitField0_ & 0x00000008) == 0x00000008)) { - to_bitField0_ |= 0x00000008; - } - result.description_ = description_; - if (((from_bitField0_ & 0x00000010) == 0x00000010)) { - to_bitField0_ |= 0x00000010; - } - if (qualifierBuilder_ == null) { - result.qualifier_ = qualifier_; - } else { - result.qualifier_ = qualifierBuilder_.build(); - } - if (((from_bitField0_ & 0x00000020) == 0x00000020)) { - to_bitField0_ |= 0x00000020; - } - result.refidentifier_ = refidentifier_; - if (((from_bitField0_ & 0x00000040) == 0x00000040)) { - to_bitField0_ |= 0x00000040; - } - result.query_ = query_; - if (((from_bitField0_ & 0x00000080) == 0x00000080)) { - to_bitField0_ |= 0x00000080; - } - if (dataInfoBuilder_ == null) { - result.dataInfo_ = dataInfo_; - } else { - result.dataInfo_ = dataInfoBuilder_.build(); - } - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference) { - return mergeFrom((eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference other) { - if (other == eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference.getDefaultInstance()) return this; - if (other.hasSitename()) { - setSitename(other.getSitename()); - } - if (other.hasLabel()) { - setLabel(other.getLabel()); - } - if (other.hasUrl()) { - setUrl(other.getUrl()); - } - if (other.hasDescription()) { - setDescription(other.getDescription()); - } - if (other.hasQualifier()) { - mergeQualifier(other.getQualifier()); - } - if (other.hasRefidentifier()) { - setRefidentifier(other.getRefidentifier()); - } - if (other.hasQuery()) { - setQuery(other.getQuery()); - } - if (other.hasDataInfo()) { - mergeDataInfo(other.getDataInfo()); - } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - - public final boolean isInitialized() { - if (hasQualifier()) { - if (!getQualifier().isInitialized()) { - - return false; - } - } - if (hasDataInfo()) { - if (!getDataInfo().isInitialized()) { - - return false; - } - } - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - } - break; - } - case 10: { - bitField0_ |= 0x00000001; - sitename_ = input.readBytes(); - break; - } - case 18: { - bitField0_ |= 0x00000002; - label_ = input.readBytes(); - break; - } - case 26: { - bitField0_ |= 0x00000004; - url_ = input.readBytes(); - break; - } - case 34: { - bitField0_ |= 0x00000008; - description_ = input.readBytes(); - break; - } - case 42: { - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(); - if (hasQualifier()) { - subBuilder.mergeFrom(getQualifier()); - } - input.readMessage(subBuilder, extensionRegistry); - setQualifier(subBuilder.buildPartial()); - break; - } - case 50: { - bitField0_ |= 0x00000020; - refidentifier_ = input.readBytes(); - break; - } - case 58: { - bitField0_ |= 0x00000040; - query_ = input.readBytes(); - break; - } - case 66: { - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder subBuilder = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.newBuilder(); - if (hasDataInfo()) { - subBuilder.mergeFrom(getDataInfo()); - } - input.readMessage(subBuilder, extensionRegistry); - setDataInfo(subBuilder.buildPartial()); - break; - } - } - } - } - - private int bitField0_; - - // optional string sitename = 1; - private java.lang.Object sitename_ = ""; - public boolean hasSitename() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public String getSitename() { - java.lang.Object ref = sitename_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - sitename_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setSitename(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000001; - sitename_ = value; - onChanged(); - return this; - } - public Builder clearSitename() { - bitField0_ = (bitField0_ & ~0x00000001); - sitename_ = getDefaultInstance().getSitename(); - onChanged(); - return this; - } - void setSitename(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000001; - sitename_ = value; - onChanged(); - } - - // optional string label = 2; - private java.lang.Object label_ = ""; - public boolean hasLabel() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public String getLabel() { - java.lang.Object ref = label_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - label_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setLabel(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000002; - label_ = value; - onChanged(); - return this; - } - public Builder clearLabel() { - bitField0_ = (bitField0_ & ~0x00000002); - label_ = getDefaultInstance().getLabel(); - onChanged(); - return this; - } - void setLabel(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000002; - label_ = value; - onChanged(); - } - - // optional string url = 3; - private java.lang.Object url_ = ""; - public boolean hasUrl() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - public String getUrl() { - java.lang.Object ref = url_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - url_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setUrl(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000004; - url_ = value; - onChanged(); - return this; - } - public Builder clearUrl() { - bitField0_ = (bitField0_ & ~0x00000004); - url_ = getDefaultInstance().getUrl(); - onChanged(); - return this; - } - void setUrl(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000004; - url_ = value; - onChanged(); - } - - // optional string description = 4; - private java.lang.Object description_ = ""; - public boolean hasDescription() { - return ((bitField0_ & 0x00000008) == 0x00000008); - } - public String getDescription() { - java.lang.Object ref = description_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - description_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setDescription(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000008; - description_ = value; - onChanged(); - return this; - } - public Builder clearDescription() { - bitField0_ = (bitField0_ & ~0x00000008); - description_ = getDefaultInstance().getDescription(); - onChanged(); - return this; - } - void setDescription(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000008; - description_ = value; - onChanged(); - } - - // optional .eu.dnetlib.data.proto.Qualifier qualifier = 5; - private eu.dnetlib.data.proto.FieldTypeProtos.Qualifier qualifier_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> qualifierBuilder_; - public boolean hasQualifier() { - return ((bitField0_ & 0x00000010) == 0x00000010); - } - public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier getQualifier() { - if (qualifierBuilder_ == null) { - return qualifier_; - } else { - return qualifierBuilder_.getMessage(); - } - } - public Builder setQualifier(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { - if (qualifierBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - qualifier_ = value; - onChanged(); - } else { - qualifierBuilder_.setMessage(value); - } - bitField0_ |= 0x00000010; - return this; - } - public Builder setQualifier( - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder builderForValue) { - if (qualifierBuilder_ == null) { - qualifier_ = builderForValue.build(); - onChanged(); - } else { - qualifierBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000010; - return this; - } - public Builder mergeQualifier(eu.dnetlib.data.proto.FieldTypeProtos.Qualifier value) { - if (qualifierBuilder_ == null) { - if (((bitField0_ & 0x00000010) == 0x00000010) && - qualifier_ != eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance()) { - qualifier_ = - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.newBuilder(qualifier_).mergeFrom(value).buildPartial(); - } else { - qualifier_ = value; - } - onChanged(); - } else { - qualifierBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000010; - return this; - } - public Builder clearQualifier() { - if (qualifierBuilder_ == null) { - qualifier_ = eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.getDefaultInstance(); - onChanged(); - } else { - qualifierBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000010); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder getQualifierBuilder() { - bitField0_ |= 0x00000010; - onChanged(); - return getQualifierFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder getQualifierOrBuilder() { - if (qualifierBuilder_ != null) { - return qualifierBuilder_.getMessageOrBuilder(); - } else { - return qualifier_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder> - getQualifierFieldBuilder() { - if (qualifierBuilder_ == null) { - qualifierBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.Qualifier, eu.dnetlib.data.proto.FieldTypeProtos.Qualifier.Builder, eu.dnetlib.data.proto.FieldTypeProtos.QualifierOrBuilder>( - qualifier_, - getParentForChildren(), - isClean()); - qualifier_ = null; - } - return qualifierBuilder_; - } - - // optional string refidentifier = 6; - private java.lang.Object refidentifier_ = ""; - public boolean hasRefidentifier() { - return ((bitField0_ & 0x00000020) == 0x00000020); - } - public String getRefidentifier() { - java.lang.Object ref = refidentifier_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - refidentifier_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setRefidentifier(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000020; - refidentifier_ = value; - onChanged(); - return this; - } - public Builder clearRefidentifier() { - bitField0_ = (bitField0_ & ~0x00000020); - refidentifier_ = getDefaultInstance().getRefidentifier(); - onChanged(); - return this; - } - void setRefidentifier(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000020; - refidentifier_ = value; - onChanged(); - } - - // optional string query = 7; - private java.lang.Object query_ = ""; - public boolean hasQuery() { - return ((bitField0_ & 0x00000040) == 0x00000040); - } - public String getQuery() { - java.lang.Object ref = query_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - query_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setQuery(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000040; - query_ = value; - onChanged(); - return this; - } - public Builder clearQuery() { - bitField0_ = (bitField0_ & ~0x00000040); - query_ = getDefaultInstance().getQuery(); - onChanged(); - return this; - } - void setQuery(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000040; - query_ = value; - onChanged(); - } - - // optional .eu.dnetlib.data.proto.DataInfo dataInfo = 8; - private eu.dnetlib.data.proto.FieldTypeProtos.DataInfo dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder> dataInfoBuilder_; - public boolean hasDataInfo() { - return ((bitField0_ & 0x00000080) == 0x00000080); - } - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo getDataInfo() { - if (dataInfoBuilder_ == null) { - return dataInfo_; - } else { - return dataInfoBuilder_.getMessage(); - } - } - public Builder setDataInfo(eu.dnetlib.data.proto.FieldTypeProtos.DataInfo value) { - if (dataInfoBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - dataInfo_ = value; - onChanged(); - } else { - dataInfoBuilder_.setMessage(value); - } - bitField0_ |= 0x00000080; - return this; - } - public Builder setDataInfo( - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder builderForValue) { - if (dataInfoBuilder_ == null) { - dataInfo_ = builderForValue.build(); - onChanged(); - } else { - dataInfoBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000080; - return this; - } - public Builder mergeDataInfo(eu.dnetlib.data.proto.FieldTypeProtos.DataInfo value) { - if (dataInfoBuilder_ == null) { - if (((bitField0_ & 0x00000080) == 0x00000080) && - dataInfo_ != eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance()) { - dataInfo_ = - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.newBuilder(dataInfo_).mergeFrom(value).buildPartial(); - } else { - dataInfo_ = value; - } - onChanged(); - } else { - dataInfoBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000080; - return this; - } - public Builder clearDataInfo() { - if (dataInfoBuilder_ == null) { - dataInfo_ = eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.getDefaultInstance(); - onChanged(); - } else { - dataInfoBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000080); - return this; - } - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder getDataInfoBuilder() { - bitField0_ |= 0x00000080; - onChanged(); - return getDataInfoFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder getDataInfoOrBuilder() { - if (dataInfoBuilder_ != null) { - return dataInfoBuilder_.getMessageOrBuilder(); - } else { - return dataInfo_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder> - getDataInfoFieldBuilder() { - if (dataInfoBuilder_ == null) { - dataInfoBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.FieldTypeProtos.DataInfo, eu.dnetlib.data.proto.FieldTypeProtos.DataInfo.Builder, eu.dnetlib.data.proto.FieldTypeProtos.DataInfoOrBuilder>( - dataInfo_, - getParentForChildren(), - isClean()); - dataInfo_ = null; - } - return dataInfoBuilder_; - } - - // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.Result.ExternalReference) - } - - static { - defaultInstance = new ExternalReference(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.Result.ExternalReference) - } - - public interface GeoLocationOrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // optional string point = 1; - boolean hasPoint(); - String getPoint(); - - // optional string box = 2; - boolean hasBox(); - String getBox(); - - // optional string place = 3; - boolean hasPlace(); - String getPlace(); - } - public static final class GeoLocation extends - com.google.protobuf.GeneratedMessage - implements GeoLocationOrBuilder { - // Use GeoLocation.newBuilder() to construct. - private GeoLocation(Builder builder) { - super(builder); - } - private GeoLocation(boolean noInit) {} - - private static final GeoLocation defaultInstance; - public static GeoLocation getDefaultInstance() { - return defaultInstance; - } - - public GeoLocation getDefaultInstanceForType() { - return defaultInstance; - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_GeoLocation_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_GeoLocation_fieldAccessorTable; - } - - private int bitField0_; - // optional string point = 1; - public static final int POINT_FIELD_NUMBER = 1; - private java.lang.Object point_; - public boolean hasPoint() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public String getPoint() { - java.lang.Object ref = point_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - point_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getPointBytes() { - java.lang.Object ref = point_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - point_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // optional string box = 2; - public static final int BOX_FIELD_NUMBER = 2; - private java.lang.Object box_; - public boolean hasBox() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public String getBox() { - java.lang.Object ref = box_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - box_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getBoxBytes() { - java.lang.Object ref = box_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - box_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // optional string place = 3; - public static final int PLACE_FIELD_NUMBER = 3; - private java.lang.Object place_; - public boolean hasPlace() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - public String getPlace() { - java.lang.Object ref = place_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - place_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getPlaceBytes() { - java.lang.Object ref = place_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - place_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - private void initFields() { - point_ = ""; - box_ = ""; - place_ = ""; - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeBytes(1, getPointBytes()); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - output.writeBytes(2, getBoxBytes()); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - output.writeBytes(3, getPlaceBytes()); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(1, getPointBytes()); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(2, getBoxBytes()); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(3, getPlaceBytes()); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder - implements eu.dnetlib.data.proto.ResultProtos.Result.GeoLocationOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_GeoLocation_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_GeoLocation_fieldAccessorTable; - } - - // Construct using eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - } - } - private static Builder create() { - return new Builder(); - } - - public Builder clear() { - super.clear(); - point_ = ""; - bitField0_ = (bitField0_ & ~0x00000001); - box_ = ""; - bitField0_ = (bitField0_ & ~0x00000002); - place_ = ""; - bitField0_ = (bitField0_ & ~0x00000004); - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation.getDescriptor(); - } - - public eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation getDefaultInstanceForType() { - return eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation.getDefaultInstance(); - } - - public eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation build() { - eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - private eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return result; - } - - public eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation buildPartial() { - eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation result = new eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - result.point_ = point_; - if (((from_bitField0_ & 0x00000002) == 0x00000002)) { - to_bitField0_ |= 0x00000002; - } - result.box_ = box_; - if (((from_bitField0_ & 0x00000004) == 0x00000004)) { - to_bitField0_ |= 0x00000004; - } - result.place_ = place_; - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation) { - return mergeFrom((eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation other) { - if (other == eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation.getDefaultInstance()) return this; - if (other.hasPoint()) { - setPoint(other.getPoint()); - } - if (other.hasBox()) { - setBox(other.getBox()); - } - if (other.hasPlace()) { - setPlace(other.getPlace()); - } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - - public final boolean isInitialized() { - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - } - break; - } - case 10: { - bitField0_ |= 0x00000001; - point_ = input.readBytes(); - break; - } - case 18: { - bitField0_ |= 0x00000002; - box_ = input.readBytes(); - break; - } - case 26: { - bitField0_ |= 0x00000004; - place_ = input.readBytes(); - break; - } - } - } - } - - private int bitField0_; - - // optional string point = 1; - private java.lang.Object point_ = ""; - public boolean hasPoint() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public String getPoint() { - java.lang.Object ref = point_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - point_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setPoint(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000001; - point_ = value; - onChanged(); - return this; - } - public Builder clearPoint() { - bitField0_ = (bitField0_ & ~0x00000001); - point_ = getDefaultInstance().getPoint(); - onChanged(); - return this; - } - void setPoint(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000001; - point_ = value; - onChanged(); - } - - // optional string box = 2; - private java.lang.Object box_ = ""; - public boolean hasBox() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public String getBox() { - java.lang.Object ref = box_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - box_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setBox(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000002; - box_ = value; - onChanged(); - return this; - } - public Builder clearBox() { - bitField0_ = (bitField0_ & ~0x00000002); - box_ = getDefaultInstance().getBox(); - onChanged(); - return this; - } - void setBox(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000002; - box_ = value; - onChanged(); - } - - // optional string place = 3; - private java.lang.Object place_ = ""; - public boolean hasPlace() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - public String getPlace() { - java.lang.Object ref = place_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - place_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setPlace(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000004; - place_ = value; - onChanged(); - return this; - } - public Builder clearPlace() { - bitField0_ = (bitField0_ & ~0x00000004); - place_ = getDefaultInstance().getPlace(); - onChanged(); - return this; - } - void setPlace(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000004; - place_ = value; - onChanged(); - } - - // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.Result.GeoLocation) - } - - static { - defaultInstance = new GeoLocation(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.Result.GeoLocation) - } - - private int bitField0_; - // optional .eu.dnetlib.data.proto.Result.Metadata metadata = 2; - public static final int METADATA_FIELD_NUMBER = 2; - private eu.dnetlib.data.proto.ResultProtos.Result.Metadata metadata_; - public boolean hasMetadata() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.ResultProtos.Result.Metadata getMetadata() { - return metadata_; - } - public eu.dnetlib.data.proto.ResultProtos.Result.MetadataOrBuilder getMetadataOrBuilder() { - return metadata_; - } - - // repeated .eu.dnetlib.data.proto.Result.Instance instance = 6; - public static final int INSTANCE_FIELD_NUMBER = 6; - private java.util.List instance_; - public java.util.List getInstanceList() { - return instance_; - } - public java.util.List - getInstanceOrBuilderList() { - return instance_; - } - public int getInstanceCount() { - return instance_.size(); - } - public eu.dnetlib.data.proto.ResultProtos.Result.Instance getInstance(int index) { - return instance_.get(index); - } - public eu.dnetlib.data.proto.ResultProtos.Result.InstanceOrBuilder getInstanceOrBuilder( - int index) { - return instance_.get(index); - } - - // repeated .eu.dnetlib.data.proto.Result.ExternalReference externalReference = 7; - public static final int EXTERNALREFERENCE_FIELD_NUMBER = 7; - private java.util.List externalReference_; - public java.util.List getExternalReferenceList() { - return externalReference_; - } - public java.util.List - getExternalReferenceOrBuilderList() { - return externalReference_; - } - public int getExternalReferenceCount() { - return externalReference_.size(); - } - public eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference getExternalReference(int index) { - return externalReference_.get(index); - } - public eu.dnetlib.data.proto.ResultProtos.Result.ExternalReferenceOrBuilder getExternalReferenceOrBuilder( - int index) { - return externalReference_.get(index); - } - - private void initFields() { - metadata_ = eu.dnetlib.data.proto.ResultProtos.Result.Metadata.getDefaultInstance(); - instance_ = java.util.Collections.emptyList(); - externalReference_ = java.util.Collections.emptyList(); - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - if (hasMetadata()) { - if (!getMetadata().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - for (int i = 0; i < getInstanceCount(); i++) { - if (!getInstance(i).isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - for (int i = 0; i < getExternalReferenceCount(); i++) { - if (!getExternalReference(i).isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeMessage(2, metadata_); - } - for (int i = 0; i < instance_.size(); i++) { - output.writeMessage(6, instance_.get(i)); - } - for (int i = 0; i < externalReference_.size(); i++) { - output.writeMessage(7, externalReference_.get(i)); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(2, metadata_); - } - for (int i = 0; i < instance_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(6, instance_.get(i)); - } - for (int i = 0; i < externalReference_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(7, externalReference_.get(i)); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static eu.dnetlib.data.proto.ResultProtos.Result parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProtos.Result parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProtos.Result parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProtos.Result parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProtos.Result parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProtos.Result parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProtos.Result parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.ResultProtos.Result parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.ResultProtos.Result parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultProtos.Result parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(eu.dnetlib.data.proto.ResultProtos.Result prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder - implements eu.dnetlib.data.proto.ResultProtos.ResultOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.ResultProtos.internal_static_eu_dnetlib_data_proto_Result_fieldAccessorTable; - } - - // Construct using eu.dnetlib.data.proto.ResultProtos.Result.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - getMetadataFieldBuilder(); - getInstanceFieldBuilder(); - getExternalReferenceFieldBuilder(); - } - } - private static Builder create() { - return new Builder(); - } - - public Builder clear() { - super.clear(); - if (metadataBuilder_ == null) { - metadata_ = eu.dnetlib.data.proto.ResultProtos.Result.Metadata.getDefaultInstance(); - } else { - metadataBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - if (instanceBuilder_ == null) { - instance_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000002); - } else { - instanceBuilder_.clear(); - } - if (externalReferenceBuilder_ == null) { - externalReference_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000004); - } else { - externalReferenceBuilder_.clear(); - } - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return eu.dnetlib.data.proto.ResultProtos.Result.getDescriptor(); - } - - public eu.dnetlib.data.proto.ResultProtos.Result getDefaultInstanceForType() { - return eu.dnetlib.data.proto.ResultProtos.Result.getDefaultInstance(); - } - - public eu.dnetlib.data.proto.ResultProtos.Result build() { - eu.dnetlib.data.proto.ResultProtos.Result result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - private eu.dnetlib.data.proto.ResultProtos.Result buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - eu.dnetlib.data.proto.ResultProtos.Result result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return result; - } - - public eu.dnetlib.data.proto.ResultProtos.Result buildPartial() { - eu.dnetlib.data.proto.ResultProtos.Result result = new eu.dnetlib.data.proto.ResultProtos.Result(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - if (metadataBuilder_ == null) { - result.metadata_ = metadata_; - } else { - result.metadata_ = metadataBuilder_.build(); - } - if (instanceBuilder_ == null) { - if (((bitField0_ & 0x00000002) == 0x00000002)) { - instance_ = java.util.Collections.unmodifiableList(instance_); - bitField0_ = (bitField0_ & ~0x00000002); - } - result.instance_ = instance_; - } else { - result.instance_ = instanceBuilder_.build(); - } - if (externalReferenceBuilder_ == null) { - if (((bitField0_ & 0x00000004) == 0x00000004)) { - externalReference_ = java.util.Collections.unmodifiableList(externalReference_); - bitField0_ = (bitField0_ & ~0x00000004); - } - result.externalReference_ = externalReference_; - } else { - result.externalReference_ = externalReferenceBuilder_.build(); - } - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof eu.dnetlib.data.proto.ResultProtos.Result) { - return mergeFrom((eu.dnetlib.data.proto.ResultProtos.Result)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(eu.dnetlib.data.proto.ResultProtos.Result other) { - if (other == eu.dnetlib.data.proto.ResultProtos.Result.getDefaultInstance()) return this; - if (other.hasMetadata()) { - mergeMetadata(other.getMetadata()); - } - if (instanceBuilder_ == null) { - if (!other.instance_.isEmpty()) { - if (instance_.isEmpty()) { - instance_ = other.instance_; - bitField0_ = (bitField0_ & ~0x00000002); - } else { - ensureInstanceIsMutable(); - instance_.addAll(other.instance_); - } - onChanged(); - } - } else { - if (!other.instance_.isEmpty()) { - if (instanceBuilder_.isEmpty()) { - instanceBuilder_.dispose(); - instanceBuilder_ = null; - instance_ = other.instance_; - bitField0_ = (bitField0_ & ~0x00000002); - instanceBuilder_ = - com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? - getInstanceFieldBuilder() : null; - } else { - instanceBuilder_.addAllMessages(other.instance_); - } - } - } - if (externalReferenceBuilder_ == null) { - if (!other.externalReference_.isEmpty()) { - if (externalReference_.isEmpty()) { - externalReference_ = other.externalReference_; - bitField0_ = (bitField0_ & ~0x00000004); - } else { - ensureExternalReferenceIsMutable(); - externalReference_.addAll(other.externalReference_); - } - onChanged(); - } - } else { - if (!other.externalReference_.isEmpty()) { - if (externalReferenceBuilder_.isEmpty()) { - externalReferenceBuilder_.dispose(); - externalReferenceBuilder_ = null; - externalReference_ = other.externalReference_; - bitField0_ = (bitField0_ & ~0x00000004); - externalReferenceBuilder_ = - com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? - getExternalReferenceFieldBuilder() : null; - } else { - externalReferenceBuilder_.addAllMessages(other.externalReference_); - } - } - } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - - public final boolean isInitialized() { - if (hasMetadata()) { - if (!getMetadata().isInitialized()) { - - return false; - } - } - for (int i = 0; i < getInstanceCount(); i++) { - if (!getInstance(i).isInitialized()) { - - return false; - } - } - for (int i = 0; i < getExternalReferenceCount(); i++) { - if (!getExternalReference(i).isInitialized()) { - - return false; - } - } - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - } - break; - } - case 18: { - eu.dnetlib.data.proto.ResultProtos.Result.Metadata.Builder subBuilder = eu.dnetlib.data.proto.ResultProtos.Result.Metadata.newBuilder(); - if (hasMetadata()) { - subBuilder.mergeFrom(getMetadata()); - } - input.readMessage(subBuilder, extensionRegistry); - setMetadata(subBuilder.buildPartial()); - break; - } - case 50: { - eu.dnetlib.data.proto.ResultProtos.Result.Instance.Builder subBuilder = eu.dnetlib.data.proto.ResultProtos.Result.Instance.newBuilder(); - input.readMessage(subBuilder, extensionRegistry); - addInstance(subBuilder.buildPartial()); - break; - } - case 58: { - eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference.Builder subBuilder = eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference.newBuilder(); - input.readMessage(subBuilder, extensionRegistry); - addExternalReference(subBuilder.buildPartial()); - break; - } - } - } - } - - private int bitField0_; - - // optional .eu.dnetlib.data.proto.Result.Metadata metadata = 2; - private eu.dnetlib.data.proto.ResultProtos.Result.Metadata metadata_ = eu.dnetlib.data.proto.ResultProtos.Result.Metadata.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ResultProtos.Result.Metadata, eu.dnetlib.data.proto.ResultProtos.Result.Metadata.Builder, eu.dnetlib.data.proto.ResultProtos.Result.MetadataOrBuilder> metadataBuilder_; - public boolean hasMetadata() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.ResultProtos.Result.Metadata getMetadata() { - if (metadataBuilder_ == null) { - return metadata_; - } else { - return metadataBuilder_.getMessage(); - } - } - public Builder setMetadata(eu.dnetlib.data.proto.ResultProtos.Result.Metadata value) { - if (metadataBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - metadata_ = value; - onChanged(); - } else { - metadataBuilder_.setMessage(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder setMetadata( - eu.dnetlib.data.proto.ResultProtos.Result.Metadata.Builder builderForValue) { - if (metadataBuilder_ == null) { - metadata_ = builderForValue.build(); - onChanged(); - } else { - metadataBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder mergeMetadata(eu.dnetlib.data.proto.ResultProtos.Result.Metadata value) { - if (metadataBuilder_ == null) { - if (((bitField0_ & 0x00000001) == 0x00000001) && - metadata_ != eu.dnetlib.data.proto.ResultProtos.Result.Metadata.getDefaultInstance()) { - metadata_ = - eu.dnetlib.data.proto.ResultProtos.Result.Metadata.newBuilder(metadata_).mergeFrom(value).buildPartial(); - } else { - metadata_ = value; - } - onChanged(); - } else { - metadataBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder clearMetadata() { - if (metadataBuilder_ == null) { - metadata_ = eu.dnetlib.data.proto.ResultProtos.Result.Metadata.getDefaultInstance(); - onChanged(); - } else { - metadataBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - public eu.dnetlib.data.proto.ResultProtos.Result.Metadata.Builder getMetadataBuilder() { - bitField0_ |= 0x00000001; - onChanged(); - return getMetadataFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.ResultProtos.Result.MetadataOrBuilder getMetadataOrBuilder() { - if (metadataBuilder_ != null) { - return metadataBuilder_.getMessageOrBuilder(); - } else { - return metadata_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ResultProtos.Result.Metadata, eu.dnetlib.data.proto.ResultProtos.Result.Metadata.Builder, eu.dnetlib.data.proto.ResultProtos.Result.MetadataOrBuilder> - getMetadataFieldBuilder() { - if (metadataBuilder_ == null) { - metadataBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ResultProtos.Result.Metadata, eu.dnetlib.data.proto.ResultProtos.Result.Metadata.Builder, eu.dnetlib.data.proto.ResultProtos.Result.MetadataOrBuilder>( - metadata_, - getParentForChildren(), - isClean()); - metadata_ = null; - } - return metadataBuilder_; - } - - // repeated .eu.dnetlib.data.proto.Result.Instance instance = 6; - private java.util.List instance_ = - java.util.Collections.emptyList(); - private void ensureInstanceIsMutable() { - if (!((bitField0_ & 0x00000002) == 0x00000002)) { - instance_ = new java.util.ArrayList(instance_); - bitField0_ |= 0x00000002; - } - } - - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.ResultProtos.Result.Instance, eu.dnetlib.data.proto.ResultProtos.Result.Instance.Builder, eu.dnetlib.data.proto.ResultProtos.Result.InstanceOrBuilder> instanceBuilder_; - - public java.util.List getInstanceList() { - if (instanceBuilder_ == null) { - return java.util.Collections.unmodifiableList(instance_); - } else { - return instanceBuilder_.getMessageList(); - } - } - public int getInstanceCount() { - if (instanceBuilder_ == null) { - return instance_.size(); - } else { - return instanceBuilder_.getCount(); - } - } - public eu.dnetlib.data.proto.ResultProtos.Result.Instance getInstance(int index) { - if (instanceBuilder_ == null) { - return instance_.get(index); - } else { - return instanceBuilder_.getMessage(index); - } - } - public Builder setInstance( - int index, eu.dnetlib.data.proto.ResultProtos.Result.Instance value) { - if (instanceBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureInstanceIsMutable(); - instance_.set(index, value); - onChanged(); - } else { - instanceBuilder_.setMessage(index, value); - } - return this; - } - public Builder setInstance( - int index, eu.dnetlib.data.proto.ResultProtos.Result.Instance.Builder builderForValue) { - if (instanceBuilder_ == null) { - ensureInstanceIsMutable(); - instance_.set(index, builderForValue.build()); - onChanged(); - } else { - instanceBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - public Builder addInstance(eu.dnetlib.data.proto.ResultProtos.Result.Instance value) { - if (instanceBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureInstanceIsMutable(); - instance_.add(value); - onChanged(); - } else { - instanceBuilder_.addMessage(value); - } - return this; - } - public Builder addInstance( - int index, eu.dnetlib.data.proto.ResultProtos.Result.Instance value) { - if (instanceBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureInstanceIsMutable(); - instance_.add(index, value); - onChanged(); - } else { - instanceBuilder_.addMessage(index, value); - } - return this; - } - public Builder addInstance( - eu.dnetlib.data.proto.ResultProtos.Result.Instance.Builder builderForValue) { - if (instanceBuilder_ == null) { - ensureInstanceIsMutable(); - instance_.add(builderForValue.build()); - onChanged(); - } else { - instanceBuilder_.addMessage(builderForValue.build()); - } - return this; - } - public Builder addInstance( - int index, eu.dnetlib.data.proto.ResultProtos.Result.Instance.Builder builderForValue) { - if (instanceBuilder_ == null) { - ensureInstanceIsMutable(); - instance_.add(index, builderForValue.build()); - onChanged(); - } else { - instanceBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - public Builder addAllInstance( - java.lang.Iterable values) { - if (instanceBuilder_ == null) { - ensureInstanceIsMutable(); - super.addAll(values, instance_); - onChanged(); - } else { - instanceBuilder_.addAllMessages(values); - } - return this; - } - public Builder clearInstance() { - if (instanceBuilder_ == null) { - instance_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000002); - onChanged(); - } else { - instanceBuilder_.clear(); - } - return this; - } - public Builder removeInstance(int index) { - if (instanceBuilder_ == null) { - ensureInstanceIsMutable(); - instance_.remove(index); - onChanged(); - } else { - instanceBuilder_.remove(index); - } - return this; - } - public eu.dnetlib.data.proto.ResultProtos.Result.Instance.Builder getInstanceBuilder( - int index) { - return getInstanceFieldBuilder().getBuilder(index); - } - public eu.dnetlib.data.proto.ResultProtos.Result.InstanceOrBuilder getInstanceOrBuilder( - int index) { - if (instanceBuilder_ == null) { - return instance_.get(index); } else { - return instanceBuilder_.getMessageOrBuilder(index); - } - } - public java.util.List - getInstanceOrBuilderList() { - if (instanceBuilder_ != null) { - return instanceBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(instance_); - } - } - public eu.dnetlib.data.proto.ResultProtos.Result.Instance.Builder addInstanceBuilder() { - return getInstanceFieldBuilder().addBuilder( - eu.dnetlib.data.proto.ResultProtos.Result.Instance.getDefaultInstance()); - } - public eu.dnetlib.data.proto.ResultProtos.Result.Instance.Builder addInstanceBuilder( - int index) { - return getInstanceFieldBuilder().addBuilder( - index, eu.dnetlib.data.proto.ResultProtos.Result.Instance.getDefaultInstance()); - } - public java.util.List - getInstanceBuilderList() { - return getInstanceFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.ResultProtos.Result.Instance, eu.dnetlib.data.proto.ResultProtos.Result.Instance.Builder, eu.dnetlib.data.proto.ResultProtos.Result.InstanceOrBuilder> - getInstanceFieldBuilder() { - if (instanceBuilder_ == null) { - instanceBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.ResultProtos.Result.Instance, eu.dnetlib.data.proto.ResultProtos.Result.Instance.Builder, eu.dnetlib.data.proto.ResultProtos.Result.InstanceOrBuilder>( - instance_, - ((bitField0_ & 0x00000002) == 0x00000002), - getParentForChildren(), - isClean()); - instance_ = null; - } - return instanceBuilder_; - } - - // repeated .eu.dnetlib.data.proto.Result.ExternalReference externalReference = 7; - private java.util.List externalReference_ = - java.util.Collections.emptyList(); - private void ensureExternalReferenceIsMutable() { - if (!((bitField0_ & 0x00000004) == 0x00000004)) { - externalReference_ = new java.util.ArrayList(externalReference_); - bitField0_ |= 0x00000004; - } - } - - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference, eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference.Builder, eu.dnetlib.data.proto.ResultProtos.Result.ExternalReferenceOrBuilder> externalReferenceBuilder_; - - public java.util.List getExternalReferenceList() { - if (externalReferenceBuilder_ == null) { - return java.util.Collections.unmodifiableList(externalReference_); - } else { - return externalReferenceBuilder_.getMessageList(); - } - } - public int getExternalReferenceCount() { - if (externalReferenceBuilder_ == null) { - return externalReference_.size(); - } else { - return externalReferenceBuilder_.getCount(); - } - } - public eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference getExternalReference(int index) { - if (externalReferenceBuilder_ == null) { - return externalReference_.get(index); - } else { - return externalReferenceBuilder_.getMessage(index); - } - } - public Builder setExternalReference( - int index, eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference value) { - if (externalReferenceBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureExternalReferenceIsMutable(); - externalReference_.set(index, value); - onChanged(); - } else { - externalReferenceBuilder_.setMessage(index, value); - } - return this; - } - public Builder setExternalReference( - int index, eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference.Builder builderForValue) { - if (externalReferenceBuilder_ == null) { - ensureExternalReferenceIsMutable(); - externalReference_.set(index, builderForValue.build()); - onChanged(); - } else { - externalReferenceBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - public Builder addExternalReference(eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference value) { - if (externalReferenceBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureExternalReferenceIsMutable(); - externalReference_.add(value); - onChanged(); - } else { - externalReferenceBuilder_.addMessage(value); - } - return this; - } - public Builder addExternalReference( - int index, eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference value) { - if (externalReferenceBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureExternalReferenceIsMutable(); - externalReference_.add(index, value); - onChanged(); - } else { - externalReferenceBuilder_.addMessage(index, value); - } - return this; - } - public Builder addExternalReference( - eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference.Builder builderForValue) { - if (externalReferenceBuilder_ == null) { - ensureExternalReferenceIsMutable(); - externalReference_.add(builderForValue.build()); - onChanged(); - } else { - externalReferenceBuilder_.addMessage(builderForValue.build()); - } - return this; - } - public Builder addExternalReference( - int index, eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference.Builder builderForValue) { - if (externalReferenceBuilder_ == null) { - ensureExternalReferenceIsMutable(); - externalReference_.add(index, builderForValue.build()); - onChanged(); - } else { - externalReferenceBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - public Builder addAllExternalReference( - java.lang.Iterable values) { - if (externalReferenceBuilder_ == null) { - ensureExternalReferenceIsMutable(); - super.addAll(values, externalReference_); - onChanged(); - } else { - externalReferenceBuilder_.addAllMessages(values); - } - return this; - } - public Builder clearExternalReference() { - if (externalReferenceBuilder_ == null) { - externalReference_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000004); - onChanged(); - } else { - externalReferenceBuilder_.clear(); - } - return this; - } - public Builder removeExternalReference(int index) { - if (externalReferenceBuilder_ == null) { - ensureExternalReferenceIsMutable(); - externalReference_.remove(index); - onChanged(); - } else { - externalReferenceBuilder_.remove(index); - } - return this; - } - public eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference.Builder getExternalReferenceBuilder( - int index) { - return getExternalReferenceFieldBuilder().getBuilder(index); - } - public eu.dnetlib.data.proto.ResultProtos.Result.ExternalReferenceOrBuilder getExternalReferenceOrBuilder( - int index) { - if (externalReferenceBuilder_ == null) { - return externalReference_.get(index); } else { - return externalReferenceBuilder_.getMessageOrBuilder(index); - } - } - public java.util.List - getExternalReferenceOrBuilderList() { - if (externalReferenceBuilder_ != null) { - return externalReferenceBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(externalReference_); - } - } - public eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference.Builder addExternalReferenceBuilder() { - return getExternalReferenceFieldBuilder().addBuilder( - eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference.getDefaultInstance()); - } - public eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference.Builder addExternalReferenceBuilder( - int index) { - return getExternalReferenceFieldBuilder().addBuilder( - index, eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference.getDefaultInstance()); - } - public java.util.List - getExternalReferenceBuilderList() { - return getExternalReferenceFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference, eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference.Builder, eu.dnetlib.data.proto.ResultProtos.Result.ExternalReferenceOrBuilder> - getExternalReferenceFieldBuilder() { - if (externalReferenceBuilder_ == null) { - externalReferenceBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< - eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference, eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference.Builder, eu.dnetlib.data.proto.ResultProtos.Result.ExternalReferenceOrBuilder>( - externalReference_, - ((bitField0_ & 0x00000004) == 0x00000004), - getParentForChildren(), - isClean()); - externalReference_ = null; - } - return externalReferenceBuilder_; - } - - // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.Result) - } - - static { - defaultInstance = new Result(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.Result) - } - - private static com.google.protobuf.Descriptors.Descriptor - internal_static_eu_dnetlib_data_proto_Result_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_eu_dnetlib_data_proto_Result_fieldAccessorTable; - private static com.google.protobuf.Descriptors.Descriptor - internal_static_eu_dnetlib_data_proto_Result_Metadata_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_eu_dnetlib_data_proto_Result_Metadata_fieldAccessorTable; - private static com.google.protobuf.Descriptors.Descriptor - internal_static_eu_dnetlib_data_proto_Result_Journal_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_eu_dnetlib_data_proto_Result_Journal_fieldAccessorTable; - private static com.google.protobuf.Descriptors.Descriptor - internal_static_eu_dnetlib_data_proto_Result_Context_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_eu_dnetlib_data_proto_Result_Context_fieldAccessorTable; - private static com.google.protobuf.Descriptors.Descriptor - internal_static_eu_dnetlib_data_proto_Result_Instance_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_eu_dnetlib_data_proto_Result_Instance_fieldAccessorTable; - private static com.google.protobuf.Descriptors.Descriptor - internal_static_eu_dnetlib_data_proto_Result_ExternalReference_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_eu_dnetlib_data_proto_Result_ExternalReference_fieldAccessorTable; - private static com.google.protobuf.Descriptors.Descriptor - internal_static_eu_dnetlib_data_proto_Result_GeoLocation_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_eu_dnetlib_data_proto_Result_GeoLocation_fieldAccessorTable; - - public static com.google.protobuf.Descriptors.FileDescriptor - getDescriptor() { - return descriptor; - } - private static com.google.protobuf.Descriptors.FileDescriptor - descriptor; - static { - java.lang.String[] descriptorData = { - "\n\014Result.proto\022\025eu.dnetlib.data.proto\032\017F" + - "ieldType.proto\"\234\030\n\006Result\0228\n\010metadata\030\002 " + - "\001(\0132&.eu.dnetlib.data.proto.Result.Metad" + - "ata\0228\n\010instance\030\006 \003(\0132&.eu.dnetlib.data." + - "proto.Result.Instance\022J\n\021externalReferen" + - "ce\030\007 \003(\0132/.eu.dnetlib.data.proto.Result." + - "ExternalReference\032\342\016\n\010Metadata\022-\n\006author" + - "\030( \003(\0132\035.eu.dnetlib.data.proto.Author\0224\n" + - "\nresulttype\030\010 \001(\0132 .eu.dnetlib.data.prot" + - "o.Qualifier\0222\n\010language\030\014 \001(\0132 .eu.dnetl", - "ib.data.proto.Qualifier\0221\n\007country\030! \003(\013" + - "2 .eu.dnetlib.data.proto.Qualifier\022:\n\007su" + - "bject\030\001 \003(\0132).eu.dnetlib.data.proto.Stru" + - "cturedProperty\0228\n\005title\030\002 \003(\0132).eu.dnetl" + - "ib.data.proto.StructuredProperty\022?\n\014rele" + - "vantdate\030\003 \003(\0132).eu.dnetlib.data.proto.S" + - "tructuredProperty\0227\n\013description\030\031 \003(\0132\"" + - ".eu.dnetlib.data.proto.StringField\022<\n\020da" + - "teofacceptance\030\004 \001(\0132\".eu.dnetlib.data.p" + - "roto.StringField\0225\n\tpublisher\030\005 \001(\0132\".eu", - ".dnetlib.data.proto.StringField\022:\n\016embar" + - "goenddate\030\006 \001(\0132\".eu.dnetlib.data.proto." + - "StringField\0222\n\006source\030\033 \003(\0132\".eu.dnetlib" + - ".data.proto.StringField\0224\n\010fulltext\030\035 \003(" + - "\0132\".eu.dnetlib.data.proto.StringField\0222\n" + - "\006format\030\025 \003(\0132\".eu.dnetlib.data.proto.St" + - "ringField\0227\n\013contributor\030\036 \003(\0132\".eu.dnet" + - "lib.data.proto.StringField\0226\n\014resourcety" + - "pe\030\023 \001(\0132 .eu.dnetlib.data.proto.Qualifi" + - "er\0224\n\010coverage\030+ \003(\0132\".eu.dnetlib.data.p", - "roto.StringField\0226\n\007context\030\034 \003(\0132%.eu.d" + - "netlib.data.proto.Result.Context\0226\n\007jour" + - "nal\030\022 \001(\0132%.eu.dnetlib.data.proto.Result" + - ".Journal\0227\n\013storagedate\030\t \001(\0132\".eu.dnetl" + - "ib.data.proto.StringField\0222\n\006device\030\032 \001(" + - "\0132\".eu.dnetlib.data.proto.StringField\0220\n" + - "\004size\030\024 \001(\0132\".eu.dnetlib.data.proto.Stri" + - "ngField\0223\n\007version\030\026 \001(\0132\".eu.dnetlib.da" + - "ta.proto.StringField\022>\n\022lastmetadataupda" + - "te\030\027 \001(\0132\".eu.dnetlib.data.proto.StringF", - "ield\022A\n\025metadataversionnumber\030\030 \001(\0132\".eu" + - ".dnetlib.data.proto.StringField\022>\n\013geolo" + - "cation\030, \003(\0132).eu.dnetlib.data.proto.Res" + - "ult.GeoLocation\022<\n\020documentationUrl\030# \003(" + - "\0132\".eu.dnetlib.data.proto.StringField\022:\n" + - "\007license\030$ \003(\0132).eu.dnetlib.data.proto.S" + - "tructuredProperty\022=\n\021codeRepositoryUrl\030&" + - " \001(\0132\".eu.dnetlib.data.proto.StringField" + - "\022=\n\023programmingLanguage\030\' \001(\0132 .eu.dnetl" + - "ib.data.proto.Qualifier\0229\n\rcontactperson", - "\030- \003(\0132\".eu.dnetlib.data.proto.StringFie" + - "ld\0228\n\014contactgroup\030) \003(\0132\".eu.dnetlib.da" + - "ta.proto.StringField\0220\n\004tool\030* \003(\0132\".eu." + - "dnetlib.data.proto.StringField\032\374\001\n\007Journ" + - "al\022\014\n\004name\030\001 \001(\t\022\023\n\013issnPrinted\030\002 \001(\t\022\022\n" + - "\nissnOnline\030\003 \001(\t\022\023\n\013issnLinking\030\004 \001(\t\022\n" + - "\n\002ep\030\006 \001(\t\022\013\n\003iss\030\007 \001(\t\022\n\n\002sp\030\010 \001(\t\022\013\n\003v" + - "ol\030\t \001(\t\022\017\n\007edition\030\n \001(\t\022\027\n\017conferencep" + - "lace\030\013 \001(\t\022\026\n\016conferencedate\030\014 \001(\t\0221\n\010da" + - "taInfo\030\005 \001(\0132\037.eu.dnetlib.data.proto.Dat", - "aInfo\032H\n\007Context\022\n\n\002id\030\001 \002(\t\0221\n\010dataInfo" + - "\030\002 \003(\0132\037.eu.dnetlib.data.proto.DataInfo\032" + - "\202\003\n\010Instance\0223\n\007license\030\006 \001(\0132\".eu.dnetl" + - "ib.data.proto.StringField\0225\n\013accessright" + - "\030\003 \001(\0132 .eu.dnetlib.data.proto.Qualifier" + - "\0226\n\014instancetype\030\004 \001(\0132 .eu.dnetlib.data" + - ".proto.Qualifier\0221\n\010hostedby\030\005 \001(\0132\037.eu." + - "dnetlib.data.proto.KeyValue\022\013\n\003url\030\t \003(\t" + - "\022\034\n\024distributionlocation\030\014 \001(\t\0226\n\rcollec" + - "tedfrom\030\n \001(\0132\037.eu.dnetlib.data.proto.Ke", - "yValue\022<\n\020dateofacceptance\030\013 \001(\0132\".eu.dn" + - "etlib.data.proto.StringField\032\344\001\n\021Externa" + - "lReference\022\020\n\010sitename\030\001 \001(\t\022\r\n\005label\030\002 " + - "\001(\t\022\013\n\003url\030\003 \001(\t\022\023\n\013description\030\004 \001(\t\0223\n" + - "\tqualifier\030\005 \001(\0132 .eu.dnetlib.data.proto" + - ".Qualifier\022\025\n\rrefidentifier\030\006 \001(\t\022\r\n\005que" + - "ry\030\007 \001(\t\0221\n\010dataInfo\030\010 \001(\0132\037.eu.dnetlib." + - "data.proto.DataInfo\0328\n\013GeoLocation\022\r\n\005po" + - "int\030\001 \001(\t\022\013\n\003box\030\002 \001(\t\022\r\n\005place\030\003 \001(\tB%\n" + - "\025eu.dnetlib.data.protoB\014ResultProtos" - }; - com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = - new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { - public com.google.protobuf.ExtensionRegistry assignDescriptors( - com.google.protobuf.Descriptors.FileDescriptor root) { - descriptor = root; - internal_static_eu_dnetlib_data_proto_Result_descriptor = - getDescriptor().getMessageTypes().get(0); - internal_static_eu_dnetlib_data_proto_Result_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_eu_dnetlib_data_proto_Result_descriptor, - new java.lang.String[] { "Metadata", "Instance", "ExternalReference", }, - eu.dnetlib.data.proto.ResultProtos.Result.class, - eu.dnetlib.data.proto.ResultProtos.Result.Builder.class); - internal_static_eu_dnetlib_data_proto_Result_Metadata_descriptor = - internal_static_eu_dnetlib_data_proto_Result_descriptor.getNestedTypes().get(0); - internal_static_eu_dnetlib_data_proto_Result_Metadata_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_eu_dnetlib_data_proto_Result_Metadata_descriptor, - new java.lang.String[] { "Author", "Resulttype", "Language", "Country", "Subject", "Title", "Relevantdate", "Description", "Dateofacceptance", "Publisher", "Embargoenddate", "Source", "Fulltext", "Format", "Contributor", "Resourcetype", "Coverage", "Context", "Journal", "Storagedate", "Device", "Size", "Version", "Lastmetadataupdate", "Metadataversionnumber", "Geolocation", "DocumentationUrl", "License", "CodeRepositoryUrl", "ProgrammingLanguage", "Contactperson", "Contactgroup", "Tool", }, - eu.dnetlib.data.proto.ResultProtos.Result.Metadata.class, - eu.dnetlib.data.proto.ResultProtos.Result.Metadata.Builder.class); - internal_static_eu_dnetlib_data_proto_Result_Journal_descriptor = - internal_static_eu_dnetlib_data_proto_Result_descriptor.getNestedTypes().get(1); - internal_static_eu_dnetlib_data_proto_Result_Journal_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_eu_dnetlib_data_proto_Result_Journal_descriptor, - new java.lang.String[] { "Name", "IssnPrinted", "IssnOnline", "IssnLinking", "Ep", "Iss", "Sp", "Vol", "Edition", "Conferenceplace", "Conferencedate", "DataInfo", }, - eu.dnetlib.data.proto.ResultProtos.Result.Journal.class, - eu.dnetlib.data.proto.ResultProtos.Result.Journal.Builder.class); - internal_static_eu_dnetlib_data_proto_Result_Context_descriptor = - internal_static_eu_dnetlib_data_proto_Result_descriptor.getNestedTypes().get(2); - internal_static_eu_dnetlib_data_proto_Result_Context_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_eu_dnetlib_data_proto_Result_Context_descriptor, - new java.lang.String[] { "Id", "DataInfo", }, - eu.dnetlib.data.proto.ResultProtos.Result.Context.class, - eu.dnetlib.data.proto.ResultProtos.Result.Context.Builder.class); - internal_static_eu_dnetlib_data_proto_Result_Instance_descriptor = - internal_static_eu_dnetlib_data_proto_Result_descriptor.getNestedTypes().get(3); - internal_static_eu_dnetlib_data_proto_Result_Instance_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_eu_dnetlib_data_proto_Result_Instance_descriptor, - new java.lang.String[] { "License", "Accessright", "Instancetype", "Hostedby", "Url", "Distributionlocation", "Collectedfrom", "Dateofacceptance", }, - eu.dnetlib.data.proto.ResultProtos.Result.Instance.class, - eu.dnetlib.data.proto.ResultProtos.Result.Instance.Builder.class); - internal_static_eu_dnetlib_data_proto_Result_ExternalReference_descriptor = - internal_static_eu_dnetlib_data_proto_Result_descriptor.getNestedTypes().get(4); - internal_static_eu_dnetlib_data_proto_Result_ExternalReference_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_eu_dnetlib_data_proto_Result_ExternalReference_descriptor, - new java.lang.String[] { "Sitename", "Label", "Url", "Description", "Qualifier", "Refidentifier", "Query", "DataInfo", }, - eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference.class, - eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference.Builder.class); - internal_static_eu_dnetlib_data_proto_Result_GeoLocation_descriptor = - internal_static_eu_dnetlib_data_proto_Result_descriptor.getNestedTypes().get(5); - internal_static_eu_dnetlib_data_proto_Result_GeoLocation_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_eu_dnetlib_data_proto_Result_GeoLocation_descriptor, - new java.lang.String[] { "Point", "Box", "Place", }, - eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation.class, - eu.dnetlib.data.proto.ResultProtos.Result.GeoLocation.Builder.class); - return null; - } - }; - com.google.protobuf.Descriptors.FileDescriptor - .internalBuildGeneratedFileFrom(descriptorData, - new com.google.protobuf.Descriptors.FileDescriptor[] { - eu.dnetlib.data.proto.FieldTypeProtos.getDescriptor(), - }, assigner); - } - - // @@protoc_insertion_point(outer_class_scope) -} diff --git a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/ResultResultProtos.java b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/ResultResultProtos.java deleted file mode 100644 index 8223a6567..000000000 --- a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/ResultResultProtos.java +++ /dev/null @@ -1,4927 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: Result_Result.proto - -package eu.dnetlib.data.proto; - -public final class ResultResultProtos { - private ResultResultProtos() {} - public static void registerAllExtensions( - com.google.protobuf.ExtensionRegistry registry) { - } - public interface ResultResultOrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // optional .eu.dnetlib.data.proto.ResultResult.Similarity similarity = 2; - boolean hasSimilarity(); - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity getSimilarity(); - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SimilarityOrBuilder getSimilarityOrBuilder(); - - // optional .eu.dnetlib.data.proto.ResultResult.PublicationDataset publicationDataset = 3; - boolean hasPublicationDataset(); - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset getPublicationDataset(); - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDatasetOrBuilder getPublicationDatasetOrBuilder(); - - // optional .eu.dnetlib.data.proto.Dedup dedup = 4; - boolean hasDedup(); - eu.dnetlib.data.proto.DedupProtos.Dedup getDedup(); - eu.dnetlib.data.proto.DedupProtos.DedupOrBuilder getDedupOrBuilder(); - - // optional .eu.dnetlib.data.proto.DedupSimilarity dedupSimilarity = 5; - boolean hasDedupSimilarity(); - eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity getDedupSimilarity(); - eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarityOrBuilder getDedupSimilarityOrBuilder(); - - // optional .eu.dnetlib.data.proto.ResultResult.Supplement supplement = 6; - boolean hasSupplement(); - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement getSupplement(); - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SupplementOrBuilder getSupplementOrBuilder(); - - // optional .eu.dnetlib.data.proto.ResultResult.Part part = 7; - boolean hasPart(); - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part getPart(); - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PartOrBuilder getPartOrBuilder(); - - // optional .eu.dnetlib.data.proto.ResultResult.Relationship relationship = 8; - boolean hasRelationship(); - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship getRelationship(); - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.RelationshipOrBuilder getRelationshipOrBuilder(); - - // optional .eu.dnetlib.data.proto.ResultResult.SoftwareSoftware softwareSoftware = 9; - boolean hasSoftwareSoftware(); - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware getSoftwareSoftware(); - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftwareOrBuilder getSoftwareSoftwareOrBuilder(); - } - public static final class ResultResult extends - com.google.protobuf.GeneratedMessage - implements ResultResultOrBuilder { - // Use ResultResult.newBuilder() to construct. - private ResultResult(Builder builder) { - super(builder); - } - private ResultResult(boolean noInit) {} - - private static final ResultResult defaultInstance; - public static ResultResult getDefaultInstance() { - return defaultInstance; - } - - public ResultResult getDefaultInstanceForType() { - return defaultInstance; - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_fieldAccessorTable; - } - - public interface SimilarityOrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; - boolean hasRelMetadata(); - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata(); - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder(); - - // optional float similarity = 2; - boolean hasSimilarity(); - float getSimilarity(); - - // optional .eu.dnetlib.data.proto.ResultResult.Similarity.Type type = 3 [default = STANDARD]; - boolean hasType(); - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.Type getType(); - } - public static final class Similarity extends - com.google.protobuf.GeneratedMessage - implements SimilarityOrBuilder { - // Use Similarity.newBuilder() to construct. - private Similarity(Builder builder) { - super(builder); - } - private Similarity(boolean noInit) {} - - private static final Similarity defaultInstance; - public static Similarity getDefaultInstance() { - return defaultInstance; - } - - public Similarity getDefaultInstanceForType() { - return defaultInstance; - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_Similarity_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_Similarity_fieldAccessorTable; - } - - public enum RelName - implements com.google.protobuf.ProtocolMessageEnum { - isAmongTopNSimilarDocuments(0, 1), - hasAmongTopNSimilarDocuments(1, 2), - ; - - public static final int isAmongTopNSimilarDocuments_VALUE = 1; - public static final int hasAmongTopNSimilarDocuments_VALUE = 2; - - - public final int getNumber() { return value; } - - public static RelName valueOf(int value) { - switch (value) { - case 1: return isAmongTopNSimilarDocuments; - case 2: return hasAmongTopNSimilarDocuments; - default: return null; - } - } - - public static com.google.protobuf.Internal.EnumLiteMap - internalGetValueMap() { - return internalValueMap; - } - private static com.google.protobuf.Internal.EnumLiteMap - internalValueMap = - new com.google.protobuf.Internal.EnumLiteMap() { - public RelName findValueByNumber(int number) { - return RelName.valueOf(number); - } - }; - - public final com.google.protobuf.Descriptors.EnumValueDescriptor - getValueDescriptor() { - return getDescriptor().getValues().get(index); - } - public final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptorForType() { - return getDescriptor(); - } - public static final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptor() { - return eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.getDescriptor().getEnumTypes().get(0); - } - - private static final RelName[] VALUES = { - isAmongTopNSimilarDocuments, hasAmongTopNSimilarDocuments, - }; - - public static RelName valueOf( - com.google.protobuf.Descriptors.EnumValueDescriptor desc) { - if (desc.getType() != getDescriptor()) { - throw new java.lang.IllegalArgumentException( - "EnumValueDescriptor is not for this type."); - } - return VALUES[desc.getIndex()]; - } - - private final int index; - private final int value; - - private RelName(int index, int value) { - this.index = index; - this.value = value; - } - - // @@protoc_insertion_point(enum_scope:eu.dnetlib.data.proto.ResultResult.Similarity.RelName) - } - - public enum Type - implements com.google.protobuf.ProtocolMessageEnum { - STANDARD(0, 1), - WEBUSAGE(1, 2), - ; - - public static final int STANDARD_VALUE = 1; - public static final int WEBUSAGE_VALUE = 2; - - - public final int getNumber() { return value; } - - public static Type valueOf(int value) { - switch (value) { - case 1: return STANDARD; - case 2: return WEBUSAGE; - default: return null; - } - } - - public static com.google.protobuf.Internal.EnumLiteMap - internalGetValueMap() { - return internalValueMap; - } - private static com.google.protobuf.Internal.EnumLiteMap - internalValueMap = - new com.google.protobuf.Internal.EnumLiteMap() { - public Type findValueByNumber(int number) { - return Type.valueOf(number); - } - }; - - public final com.google.protobuf.Descriptors.EnumValueDescriptor - getValueDescriptor() { - return getDescriptor().getValues().get(index); - } - public final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptorForType() { - return getDescriptor(); - } - public static final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptor() { - return eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.getDescriptor().getEnumTypes().get(1); - } - - private static final Type[] VALUES = { - STANDARD, WEBUSAGE, - }; - - public static Type valueOf( - com.google.protobuf.Descriptors.EnumValueDescriptor desc) { - if (desc.getType() != getDescriptor()) { - throw new java.lang.IllegalArgumentException( - "EnumValueDescriptor is not for this type."); - } - return VALUES[desc.getIndex()]; - } - - private final int index; - private final int value; - - private Type(int index, int value) { - this.index = index; - this.value = value; - } - - // @@protoc_insertion_point(enum_scope:eu.dnetlib.data.proto.ResultResult.Similarity.Type) - } - - private int bitField0_; - // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; - public static final int RELMETADATA_FIELD_NUMBER = 1; - private eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata relMetadata_; - public boolean hasRelMetadata() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata() { - return relMetadata_; - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder() { - return relMetadata_; - } - - // optional float similarity = 2; - public static final int SIMILARITY_FIELD_NUMBER = 2; - private float similarity_; - public boolean hasSimilarity() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public float getSimilarity() { - return similarity_; - } - - // optional .eu.dnetlib.data.proto.ResultResult.Similarity.Type type = 3 [default = STANDARD]; - public static final int TYPE_FIELD_NUMBER = 3; - private eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.Type type_; - public boolean hasType() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.Type getType() { - return type_; - } - - private void initFields() { - relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); - similarity_ = 0F; - type_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.Type.STANDARD; - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - if (!hasRelMetadata()) { - memoizedIsInitialized = 0; - return false; - } - if (!getRelMetadata().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeMessage(1, relMetadata_); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - output.writeFloat(2, similarity_); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - output.writeEnum(3, type_.getNumber()); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(1, relMetadata_); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - size += com.google.protobuf.CodedOutputStream - .computeFloatSize(2, similarity_); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - size += com.google.protobuf.CodedOutputStream - .computeEnumSize(3, type_.getNumber()); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder - implements eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SimilarityOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_Similarity_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_Similarity_fieldAccessorTable; - } - - // Construct using eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - getRelMetadataFieldBuilder(); - } - } - private static Builder create() { - return new Builder(); - } - - public Builder clear() { - super.clear(); - if (relMetadataBuilder_ == null) { - relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); - } else { - relMetadataBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - similarity_ = 0F; - bitField0_ = (bitField0_ & ~0x00000002); - type_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.Type.STANDARD; - bitField0_ = (bitField0_ & ~0x00000004); - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.getDescriptor(); - } - - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity getDefaultInstanceForType() { - return eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.getDefaultInstance(); - } - - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity build() { - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - private eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return result; - } - - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity buildPartial() { - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity result = new eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - if (relMetadataBuilder_ == null) { - result.relMetadata_ = relMetadata_; - } else { - result.relMetadata_ = relMetadataBuilder_.build(); - } - if (((from_bitField0_ & 0x00000002) == 0x00000002)) { - to_bitField0_ |= 0x00000002; - } - result.similarity_ = similarity_; - if (((from_bitField0_ & 0x00000004) == 0x00000004)) { - to_bitField0_ |= 0x00000004; - } - result.type_ = type_; - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity) { - return mergeFrom((eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity other) { - if (other == eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.getDefaultInstance()) return this; - if (other.hasRelMetadata()) { - mergeRelMetadata(other.getRelMetadata()); - } - if (other.hasSimilarity()) { - setSimilarity(other.getSimilarity()); - } - if (other.hasType()) { - setType(other.getType()); - } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - - public final boolean isInitialized() { - if (!hasRelMetadata()) { - - return false; - } - if (!getRelMetadata().isInitialized()) { - - return false; - } - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - } - break; - } - case 10: { - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder subBuilder = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.newBuilder(); - if (hasRelMetadata()) { - subBuilder.mergeFrom(getRelMetadata()); - } - input.readMessage(subBuilder, extensionRegistry); - setRelMetadata(subBuilder.buildPartial()); - break; - } - case 21: { - bitField0_ |= 0x00000002; - similarity_ = input.readFloat(); - break; - } - case 24: { - int rawValue = input.readEnum(); - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.Type value = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.Type.valueOf(rawValue); - if (value == null) { - unknownFields.mergeVarintField(3, rawValue); - } else { - bitField0_ |= 0x00000004; - type_ = value; - } - break; - } - } - } - } - - private int bitField0_; - - // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; - private eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder> relMetadataBuilder_; - public boolean hasRelMetadata() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata() { - if (relMetadataBuilder_ == null) { - return relMetadata_; - } else { - return relMetadataBuilder_.getMessage(); - } - } - public Builder setRelMetadata(eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata value) { - if (relMetadataBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - relMetadata_ = value; - onChanged(); - } else { - relMetadataBuilder_.setMessage(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder setRelMetadata( - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder builderForValue) { - if (relMetadataBuilder_ == null) { - relMetadata_ = builderForValue.build(); - onChanged(); - } else { - relMetadataBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder mergeRelMetadata(eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata value) { - if (relMetadataBuilder_ == null) { - if (((bitField0_ & 0x00000001) == 0x00000001) && - relMetadata_ != eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance()) { - relMetadata_ = - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.newBuilder(relMetadata_).mergeFrom(value).buildPartial(); - } else { - relMetadata_ = value; - } - onChanged(); - } else { - relMetadataBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder clearRelMetadata() { - if (relMetadataBuilder_ == null) { - relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); - onChanged(); - } else { - relMetadataBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder getRelMetadataBuilder() { - bitField0_ |= 0x00000001; - onChanged(); - return getRelMetadataFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder() { - if (relMetadataBuilder_ != null) { - return relMetadataBuilder_.getMessageOrBuilder(); - } else { - return relMetadata_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder> - getRelMetadataFieldBuilder() { - if (relMetadataBuilder_ == null) { - relMetadataBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder>( - relMetadata_, - getParentForChildren(), - isClean()); - relMetadata_ = null; - } - return relMetadataBuilder_; - } - - // optional float similarity = 2; - private float similarity_ ; - public boolean hasSimilarity() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public float getSimilarity() { - return similarity_; - } - public Builder setSimilarity(float value) { - bitField0_ |= 0x00000002; - similarity_ = value; - onChanged(); - return this; - } - public Builder clearSimilarity() { - bitField0_ = (bitField0_ & ~0x00000002); - similarity_ = 0F; - onChanged(); - return this; - } - - // optional .eu.dnetlib.data.proto.ResultResult.Similarity.Type type = 3 [default = STANDARD]; - private eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.Type type_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.Type.STANDARD; - public boolean hasType() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.Type getType() { - return type_; - } - public Builder setType(eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.Type value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000004; - type_ = value; - onChanged(); - return this; - } - public Builder clearType() { - bitField0_ = (bitField0_ & ~0x00000004); - type_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.Type.STANDARD; - onChanged(); - return this; - } - - // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.ResultResult.Similarity) - } - - static { - defaultInstance = new Similarity(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.ResultResult.Similarity) - } - - public interface PublicationDatasetOrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; - boolean hasRelMetadata(); - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata(); - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder(); - } - public static final class PublicationDataset extends - com.google.protobuf.GeneratedMessage - implements PublicationDatasetOrBuilder { - // Use PublicationDataset.newBuilder() to construct. - private PublicationDataset(Builder builder) { - super(builder); - } - private PublicationDataset(boolean noInit) {} - - private static final PublicationDataset defaultInstance; - public static PublicationDataset getDefaultInstance() { - return defaultInstance; - } - - public PublicationDataset getDefaultInstanceForType() { - return defaultInstance; - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_PublicationDataset_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_PublicationDataset_fieldAccessorTable; - } - - public enum RelName - implements com.google.protobuf.ProtocolMessageEnum { - isRelatedTo(0, 1), - ; - - public static final int isRelatedTo_VALUE = 1; - - - public final int getNumber() { return value; } - - public static RelName valueOf(int value) { - switch (value) { - case 1: return isRelatedTo; - default: return null; - } - } - - public static com.google.protobuf.Internal.EnumLiteMap - internalGetValueMap() { - return internalValueMap; - } - private static com.google.protobuf.Internal.EnumLiteMap - internalValueMap = - new com.google.protobuf.Internal.EnumLiteMap() { - public RelName findValueByNumber(int number) { - return RelName.valueOf(number); - } - }; - - public final com.google.protobuf.Descriptors.EnumValueDescriptor - getValueDescriptor() { - return getDescriptor().getValues().get(index); - } - public final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptorForType() { - return getDescriptor(); - } - public static final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptor() { - return eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset.getDescriptor().getEnumTypes().get(0); - } - - private static final RelName[] VALUES = { - isRelatedTo, - }; - - public static RelName valueOf( - com.google.protobuf.Descriptors.EnumValueDescriptor desc) { - if (desc.getType() != getDescriptor()) { - throw new java.lang.IllegalArgumentException( - "EnumValueDescriptor is not for this type."); - } - return VALUES[desc.getIndex()]; - } - - private final int index; - private final int value; - - private RelName(int index, int value) { - this.index = index; - this.value = value; - } - - // @@protoc_insertion_point(enum_scope:eu.dnetlib.data.proto.ResultResult.PublicationDataset.RelName) - } - - private int bitField0_; - // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; - public static final int RELMETADATA_FIELD_NUMBER = 1; - private eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata relMetadata_; - public boolean hasRelMetadata() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata() { - return relMetadata_; - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder() { - return relMetadata_; - } - - private void initFields() { - relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - if (!hasRelMetadata()) { - memoizedIsInitialized = 0; - return false; - } - if (!getRelMetadata().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeMessage(1, relMetadata_); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(1, relMetadata_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder - implements eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDatasetOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_PublicationDataset_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_PublicationDataset_fieldAccessorTable; - } - - // Construct using eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - getRelMetadataFieldBuilder(); - } - } - private static Builder create() { - return new Builder(); - } - - public Builder clear() { - super.clear(); - if (relMetadataBuilder_ == null) { - relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); - } else { - relMetadataBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset.getDescriptor(); - } - - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset getDefaultInstanceForType() { - return eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset.getDefaultInstance(); - } - - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset build() { - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - private eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return result; - } - - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset buildPartial() { - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset result = new eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - if (relMetadataBuilder_ == null) { - result.relMetadata_ = relMetadata_; - } else { - result.relMetadata_ = relMetadataBuilder_.build(); - } - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset) { - return mergeFrom((eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset other) { - if (other == eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset.getDefaultInstance()) return this; - if (other.hasRelMetadata()) { - mergeRelMetadata(other.getRelMetadata()); - } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - - public final boolean isInitialized() { - if (!hasRelMetadata()) { - - return false; - } - if (!getRelMetadata().isInitialized()) { - - return false; - } - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - } - break; - } - case 10: { - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder subBuilder = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.newBuilder(); - if (hasRelMetadata()) { - subBuilder.mergeFrom(getRelMetadata()); - } - input.readMessage(subBuilder, extensionRegistry); - setRelMetadata(subBuilder.buildPartial()); - break; - } - } - } - } - - private int bitField0_; - - // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; - private eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder> relMetadataBuilder_; - public boolean hasRelMetadata() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata() { - if (relMetadataBuilder_ == null) { - return relMetadata_; - } else { - return relMetadataBuilder_.getMessage(); - } - } - public Builder setRelMetadata(eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata value) { - if (relMetadataBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - relMetadata_ = value; - onChanged(); - } else { - relMetadataBuilder_.setMessage(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder setRelMetadata( - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder builderForValue) { - if (relMetadataBuilder_ == null) { - relMetadata_ = builderForValue.build(); - onChanged(); - } else { - relMetadataBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder mergeRelMetadata(eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata value) { - if (relMetadataBuilder_ == null) { - if (((bitField0_ & 0x00000001) == 0x00000001) && - relMetadata_ != eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance()) { - relMetadata_ = - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.newBuilder(relMetadata_).mergeFrom(value).buildPartial(); - } else { - relMetadata_ = value; - } - onChanged(); - } else { - relMetadataBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder clearRelMetadata() { - if (relMetadataBuilder_ == null) { - relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); - onChanged(); - } else { - relMetadataBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder getRelMetadataBuilder() { - bitField0_ |= 0x00000001; - onChanged(); - return getRelMetadataFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder() { - if (relMetadataBuilder_ != null) { - return relMetadataBuilder_.getMessageOrBuilder(); - } else { - return relMetadata_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder> - getRelMetadataFieldBuilder() { - if (relMetadataBuilder_ == null) { - relMetadataBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder>( - relMetadata_, - getParentForChildren(), - isClean()); - relMetadata_ = null; - } - return relMetadataBuilder_; - } - - // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.ResultResult.PublicationDataset) - } - - static { - defaultInstance = new PublicationDataset(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.ResultResult.PublicationDataset) - } - - public interface SupplementOrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; - boolean hasRelMetadata(); - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata(); - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder(); - } - public static final class Supplement extends - com.google.protobuf.GeneratedMessage - implements SupplementOrBuilder { - // Use Supplement.newBuilder() to construct. - private Supplement(Builder builder) { - super(builder); - } - private Supplement(boolean noInit) {} - - private static final Supplement defaultInstance; - public static Supplement getDefaultInstance() { - return defaultInstance; - } - - public Supplement getDefaultInstanceForType() { - return defaultInstance; - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_Supplement_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_Supplement_fieldAccessorTable; - } - - public enum RelName - implements com.google.protobuf.ProtocolMessageEnum { - isSupplementTo(0, 1), - isSupplementedBy(1, 2), - ; - - public static final int isSupplementTo_VALUE = 1; - public static final int isSupplementedBy_VALUE = 2; - - - public final int getNumber() { return value; } - - public static RelName valueOf(int value) { - switch (value) { - case 1: return isSupplementTo; - case 2: return isSupplementedBy; - default: return null; - } - } - - public static com.google.protobuf.Internal.EnumLiteMap - internalGetValueMap() { - return internalValueMap; - } - private static com.google.protobuf.Internal.EnumLiteMap - internalValueMap = - new com.google.protobuf.Internal.EnumLiteMap() { - public RelName findValueByNumber(int number) { - return RelName.valueOf(number); - } - }; - - public final com.google.protobuf.Descriptors.EnumValueDescriptor - getValueDescriptor() { - return getDescriptor().getValues().get(index); - } - public final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptorForType() { - return getDescriptor(); - } - public static final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptor() { - return eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement.getDescriptor().getEnumTypes().get(0); - } - - private static final RelName[] VALUES = { - isSupplementTo, isSupplementedBy, - }; - - public static RelName valueOf( - com.google.protobuf.Descriptors.EnumValueDescriptor desc) { - if (desc.getType() != getDescriptor()) { - throw new java.lang.IllegalArgumentException( - "EnumValueDescriptor is not for this type."); - } - return VALUES[desc.getIndex()]; - } - - private final int index; - private final int value; - - private RelName(int index, int value) { - this.index = index; - this.value = value; - } - - // @@protoc_insertion_point(enum_scope:eu.dnetlib.data.proto.ResultResult.Supplement.RelName) - } - - private int bitField0_; - // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; - public static final int RELMETADATA_FIELD_NUMBER = 1; - private eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata relMetadata_; - public boolean hasRelMetadata() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata() { - return relMetadata_; - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder() { - return relMetadata_; - } - - private void initFields() { - relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - if (!hasRelMetadata()) { - memoizedIsInitialized = 0; - return false; - } - if (!getRelMetadata().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeMessage(1, relMetadata_); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(1, relMetadata_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder - implements eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SupplementOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_Supplement_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_Supplement_fieldAccessorTable; - } - - // Construct using eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - getRelMetadataFieldBuilder(); - } - } - private static Builder create() { - return new Builder(); - } - - public Builder clear() { - super.clear(); - if (relMetadataBuilder_ == null) { - relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); - } else { - relMetadataBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement.getDescriptor(); - } - - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement getDefaultInstanceForType() { - return eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement.getDefaultInstance(); - } - - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement build() { - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - private eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return result; - } - - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement buildPartial() { - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement result = new eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - if (relMetadataBuilder_ == null) { - result.relMetadata_ = relMetadata_; - } else { - result.relMetadata_ = relMetadataBuilder_.build(); - } - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement) { - return mergeFrom((eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement other) { - if (other == eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement.getDefaultInstance()) return this; - if (other.hasRelMetadata()) { - mergeRelMetadata(other.getRelMetadata()); - } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - - public final boolean isInitialized() { - if (!hasRelMetadata()) { - - return false; - } - if (!getRelMetadata().isInitialized()) { - - return false; - } - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - } - break; - } - case 10: { - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder subBuilder = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.newBuilder(); - if (hasRelMetadata()) { - subBuilder.mergeFrom(getRelMetadata()); - } - input.readMessage(subBuilder, extensionRegistry); - setRelMetadata(subBuilder.buildPartial()); - break; - } - } - } - } - - private int bitField0_; - - // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; - private eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder> relMetadataBuilder_; - public boolean hasRelMetadata() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata() { - if (relMetadataBuilder_ == null) { - return relMetadata_; - } else { - return relMetadataBuilder_.getMessage(); - } - } - public Builder setRelMetadata(eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata value) { - if (relMetadataBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - relMetadata_ = value; - onChanged(); - } else { - relMetadataBuilder_.setMessage(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder setRelMetadata( - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder builderForValue) { - if (relMetadataBuilder_ == null) { - relMetadata_ = builderForValue.build(); - onChanged(); - } else { - relMetadataBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder mergeRelMetadata(eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata value) { - if (relMetadataBuilder_ == null) { - if (((bitField0_ & 0x00000001) == 0x00000001) && - relMetadata_ != eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance()) { - relMetadata_ = - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.newBuilder(relMetadata_).mergeFrom(value).buildPartial(); - } else { - relMetadata_ = value; - } - onChanged(); - } else { - relMetadataBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder clearRelMetadata() { - if (relMetadataBuilder_ == null) { - relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); - onChanged(); - } else { - relMetadataBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder getRelMetadataBuilder() { - bitField0_ |= 0x00000001; - onChanged(); - return getRelMetadataFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder() { - if (relMetadataBuilder_ != null) { - return relMetadataBuilder_.getMessageOrBuilder(); - } else { - return relMetadata_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder> - getRelMetadataFieldBuilder() { - if (relMetadataBuilder_ == null) { - relMetadataBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder>( - relMetadata_, - getParentForChildren(), - isClean()); - relMetadata_ = null; - } - return relMetadataBuilder_; - } - - // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.ResultResult.Supplement) - } - - static { - defaultInstance = new Supplement(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.ResultResult.Supplement) - } - - public interface PartOrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; - boolean hasRelMetadata(); - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata(); - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder(); - } - public static final class Part extends - com.google.protobuf.GeneratedMessage - implements PartOrBuilder { - // Use Part.newBuilder() to construct. - private Part(Builder builder) { - super(builder); - } - private Part(boolean noInit) {} - - private static final Part defaultInstance; - public static Part getDefaultInstance() { - return defaultInstance; - } - - public Part getDefaultInstanceForType() { - return defaultInstance; - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_Part_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_Part_fieldAccessorTable; - } - - public enum RelName - implements com.google.protobuf.ProtocolMessageEnum { - isPartOf(0, 1), - hasPart(1, 2), - ; - - public static final int isPartOf_VALUE = 1; - public static final int hasPart_VALUE = 2; - - - public final int getNumber() { return value; } - - public static RelName valueOf(int value) { - switch (value) { - case 1: return isPartOf; - case 2: return hasPart; - default: return null; - } - } - - public static com.google.protobuf.Internal.EnumLiteMap - internalGetValueMap() { - return internalValueMap; - } - private static com.google.protobuf.Internal.EnumLiteMap - internalValueMap = - new com.google.protobuf.Internal.EnumLiteMap() { - public RelName findValueByNumber(int number) { - return RelName.valueOf(number); - } - }; - - public final com.google.protobuf.Descriptors.EnumValueDescriptor - getValueDescriptor() { - return getDescriptor().getValues().get(index); - } - public final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptorForType() { - return getDescriptor(); - } - public static final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptor() { - return eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part.getDescriptor().getEnumTypes().get(0); - } - - private static final RelName[] VALUES = { - isPartOf, hasPart, - }; - - public static RelName valueOf( - com.google.protobuf.Descriptors.EnumValueDescriptor desc) { - if (desc.getType() != getDescriptor()) { - throw new java.lang.IllegalArgumentException( - "EnumValueDescriptor is not for this type."); - } - return VALUES[desc.getIndex()]; - } - - private final int index; - private final int value; - - private RelName(int index, int value) { - this.index = index; - this.value = value; - } - - // @@protoc_insertion_point(enum_scope:eu.dnetlib.data.proto.ResultResult.Part.RelName) - } - - private int bitField0_; - // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; - public static final int RELMETADATA_FIELD_NUMBER = 1; - private eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata relMetadata_; - public boolean hasRelMetadata() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata() { - return relMetadata_; - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder() { - return relMetadata_; - } - - private void initFields() { - relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - if (!hasRelMetadata()) { - memoizedIsInitialized = 0; - return false; - } - if (!getRelMetadata().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeMessage(1, relMetadata_); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(1, relMetadata_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder - implements eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PartOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_Part_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_Part_fieldAccessorTable; - } - - // Construct using eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - getRelMetadataFieldBuilder(); - } - } - private static Builder create() { - return new Builder(); - } - - public Builder clear() { - super.clear(); - if (relMetadataBuilder_ == null) { - relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); - } else { - relMetadataBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part.getDescriptor(); - } - - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part getDefaultInstanceForType() { - return eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part.getDefaultInstance(); - } - - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part build() { - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - private eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return result; - } - - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part buildPartial() { - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part result = new eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - if (relMetadataBuilder_ == null) { - result.relMetadata_ = relMetadata_; - } else { - result.relMetadata_ = relMetadataBuilder_.build(); - } - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part) { - return mergeFrom((eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part other) { - if (other == eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part.getDefaultInstance()) return this; - if (other.hasRelMetadata()) { - mergeRelMetadata(other.getRelMetadata()); - } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - - public final boolean isInitialized() { - if (!hasRelMetadata()) { - - return false; - } - if (!getRelMetadata().isInitialized()) { - - return false; - } - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - } - break; - } - case 10: { - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder subBuilder = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.newBuilder(); - if (hasRelMetadata()) { - subBuilder.mergeFrom(getRelMetadata()); - } - input.readMessage(subBuilder, extensionRegistry); - setRelMetadata(subBuilder.buildPartial()); - break; - } - } - } - } - - private int bitField0_; - - // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; - private eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder> relMetadataBuilder_; - public boolean hasRelMetadata() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata() { - if (relMetadataBuilder_ == null) { - return relMetadata_; - } else { - return relMetadataBuilder_.getMessage(); - } - } - public Builder setRelMetadata(eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata value) { - if (relMetadataBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - relMetadata_ = value; - onChanged(); - } else { - relMetadataBuilder_.setMessage(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder setRelMetadata( - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder builderForValue) { - if (relMetadataBuilder_ == null) { - relMetadata_ = builderForValue.build(); - onChanged(); - } else { - relMetadataBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder mergeRelMetadata(eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata value) { - if (relMetadataBuilder_ == null) { - if (((bitField0_ & 0x00000001) == 0x00000001) && - relMetadata_ != eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance()) { - relMetadata_ = - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.newBuilder(relMetadata_).mergeFrom(value).buildPartial(); - } else { - relMetadata_ = value; - } - onChanged(); - } else { - relMetadataBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder clearRelMetadata() { - if (relMetadataBuilder_ == null) { - relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); - onChanged(); - } else { - relMetadataBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder getRelMetadataBuilder() { - bitField0_ |= 0x00000001; - onChanged(); - return getRelMetadataFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder() { - if (relMetadataBuilder_ != null) { - return relMetadataBuilder_.getMessageOrBuilder(); - } else { - return relMetadata_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder> - getRelMetadataFieldBuilder() { - if (relMetadataBuilder_ == null) { - relMetadataBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder>( - relMetadata_, - getParentForChildren(), - isClean()); - relMetadata_ = null; - } - return relMetadataBuilder_; - } - - // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.ResultResult.Part) - } - - static { - defaultInstance = new Part(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.ResultResult.Part) - } - - public interface SoftwareSoftwareOrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; - boolean hasRelMetadata(); - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata(); - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder(); - } - public static final class SoftwareSoftware extends - com.google.protobuf.GeneratedMessage - implements SoftwareSoftwareOrBuilder { - // Use SoftwareSoftware.newBuilder() to construct. - private SoftwareSoftware(Builder builder) { - super(builder); - } - private SoftwareSoftware(boolean noInit) {} - - private static final SoftwareSoftware defaultInstance; - public static SoftwareSoftware getDefaultInstance() { - return defaultInstance; - } - - public SoftwareSoftware getDefaultInstanceForType() { - return defaultInstance; - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_SoftwareSoftware_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_SoftwareSoftware_fieldAccessorTable; - } - - public enum RelName - implements com.google.protobuf.ProtocolMessageEnum { - isVersionOf(0, 1), - ; - - public static final int isVersionOf_VALUE = 1; - - - public final int getNumber() { return value; } - - public static RelName valueOf(int value) { - switch (value) { - case 1: return isVersionOf; - default: return null; - } - } - - public static com.google.protobuf.Internal.EnumLiteMap - internalGetValueMap() { - return internalValueMap; - } - private static com.google.protobuf.Internal.EnumLiteMap - internalValueMap = - new com.google.protobuf.Internal.EnumLiteMap() { - public RelName findValueByNumber(int number) { - return RelName.valueOf(number); - } - }; - - public final com.google.protobuf.Descriptors.EnumValueDescriptor - getValueDescriptor() { - return getDescriptor().getValues().get(index); - } - public final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptorForType() { - return getDescriptor(); - } - public static final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptor() { - return eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware.getDescriptor().getEnumTypes().get(0); - } - - private static final RelName[] VALUES = { - isVersionOf, - }; - - public static RelName valueOf( - com.google.protobuf.Descriptors.EnumValueDescriptor desc) { - if (desc.getType() != getDescriptor()) { - throw new java.lang.IllegalArgumentException( - "EnumValueDescriptor is not for this type."); - } - return VALUES[desc.getIndex()]; - } - - private final int index; - private final int value; - - private RelName(int index, int value) { - this.index = index; - this.value = value; - } - - // @@protoc_insertion_point(enum_scope:eu.dnetlib.data.proto.ResultResult.SoftwareSoftware.RelName) - } - - private int bitField0_; - // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; - public static final int RELMETADATA_FIELD_NUMBER = 1; - private eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata relMetadata_; - public boolean hasRelMetadata() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata() { - return relMetadata_; - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder() { - return relMetadata_; - } - - private void initFields() { - relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - if (!hasRelMetadata()) { - memoizedIsInitialized = 0; - return false; - } - if (!getRelMetadata().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeMessage(1, relMetadata_); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(1, relMetadata_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder - implements eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftwareOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_SoftwareSoftware_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_SoftwareSoftware_fieldAccessorTable; - } - - // Construct using eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - getRelMetadataFieldBuilder(); - } - } - private static Builder create() { - return new Builder(); - } - - public Builder clear() { - super.clear(); - if (relMetadataBuilder_ == null) { - relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); - } else { - relMetadataBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware.getDescriptor(); - } - - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware getDefaultInstanceForType() { - return eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware.getDefaultInstance(); - } - - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware build() { - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - private eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return result; - } - - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware buildPartial() { - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware result = new eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - if (relMetadataBuilder_ == null) { - result.relMetadata_ = relMetadata_; - } else { - result.relMetadata_ = relMetadataBuilder_.build(); - } - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware) { - return mergeFrom((eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware other) { - if (other == eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware.getDefaultInstance()) return this; - if (other.hasRelMetadata()) { - mergeRelMetadata(other.getRelMetadata()); - } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - - public final boolean isInitialized() { - if (!hasRelMetadata()) { - - return false; - } - if (!getRelMetadata().isInitialized()) { - - return false; - } - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - } - break; - } - case 10: { - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder subBuilder = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.newBuilder(); - if (hasRelMetadata()) { - subBuilder.mergeFrom(getRelMetadata()); - } - input.readMessage(subBuilder, extensionRegistry); - setRelMetadata(subBuilder.buildPartial()); - break; - } - } - } - } - - private int bitField0_; - - // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; - private eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder> relMetadataBuilder_; - public boolean hasRelMetadata() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata() { - if (relMetadataBuilder_ == null) { - return relMetadata_; - } else { - return relMetadataBuilder_.getMessage(); - } - } - public Builder setRelMetadata(eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata value) { - if (relMetadataBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - relMetadata_ = value; - onChanged(); - } else { - relMetadataBuilder_.setMessage(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder setRelMetadata( - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder builderForValue) { - if (relMetadataBuilder_ == null) { - relMetadata_ = builderForValue.build(); - onChanged(); - } else { - relMetadataBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder mergeRelMetadata(eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata value) { - if (relMetadataBuilder_ == null) { - if (((bitField0_ & 0x00000001) == 0x00000001) && - relMetadata_ != eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance()) { - relMetadata_ = - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.newBuilder(relMetadata_).mergeFrom(value).buildPartial(); - } else { - relMetadata_ = value; - } - onChanged(); - } else { - relMetadataBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder clearRelMetadata() { - if (relMetadataBuilder_ == null) { - relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); - onChanged(); - } else { - relMetadataBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder getRelMetadataBuilder() { - bitField0_ |= 0x00000001; - onChanged(); - return getRelMetadataFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder() { - if (relMetadataBuilder_ != null) { - return relMetadataBuilder_.getMessageOrBuilder(); - } else { - return relMetadata_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder> - getRelMetadataFieldBuilder() { - if (relMetadataBuilder_ == null) { - relMetadataBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder>( - relMetadata_, - getParentForChildren(), - isClean()); - relMetadata_ = null; - } - return relMetadataBuilder_; - } - - // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.ResultResult.SoftwareSoftware) - } - - static { - defaultInstance = new SoftwareSoftware(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.ResultResult.SoftwareSoftware) - } - - public interface RelationshipOrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; - boolean hasRelMetadata(); - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata(); - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder(); - } - public static final class Relationship extends - com.google.protobuf.GeneratedMessage - implements RelationshipOrBuilder { - // Use Relationship.newBuilder() to construct. - private Relationship(Builder builder) { - super(builder); - } - private Relationship(boolean noInit) {} - - private static final Relationship defaultInstance; - public static Relationship getDefaultInstance() { - return defaultInstance; - } - - public Relationship getDefaultInstanceForType() { - return defaultInstance; - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_Relationship_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_Relationship_fieldAccessorTable; - } - - public enum RelName - implements com.google.protobuf.ProtocolMessageEnum { - isRelatedTo(0, 1), - ; - - public static final int isRelatedTo_VALUE = 1; - - - public final int getNumber() { return value; } - - public static RelName valueOf(int value) { - switch (value) { - case 1: return isRelatedTo; - default: return null; - } - } - - public static com.google.protobuf.Internal.EnumLiteMap - internalGetValueMap() { - return internalValueMap; - } - private static com.google.protobuf.Internal.EnumLiteMap - internalValueMap = - new com.google.protobuf.Internal.EnumLiteMap() { - public RelName findValueByNumber(int number) { - return RelName.valueOf(number); - } - }; - - public final com.google.protobuf.Descriptors.EnumValueDescriptor - getValueDescriptor() { - return getDescriptor().getValues().get(index); - } - public final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptorForType() { - return getDescriptor(); - } - public static final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptor() { - return eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship.getDescriptor().getEnumTypes().get(0); - } - - private static final RelName[] VALUES = { - isRelatedTo, - }; - - public static RelName valueOf( - com.google.protobuf.Descriptors.EnumValueDescriptor desc) { - if (desc.getType() != getDescriptor()) { - throw new java.lang.IllegalArgumentException( - "EnumValueDescriptor is not for this type."); - } - return VALUES[desc.getIndex()]; - } - - private final int index; - private final int value; - - private RelName(int index, int value) { - this.index = index; - this.value = value; - } - - // @@protoc_insertion_point(enum_scope:eu.dnetlib.data.proto.ResultResult.Relationship.RelName) - } - - private int bitField0_; - // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; - public static final int RELMETADATA_FIELD_NUMBER = 1; - private eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata relMetadata_; - public boolean hasRelMetadata() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata() { - return relMetadata_; - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder() { - return relMetadata_; - } - - private void initFields() { - relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - if (!hasRelMetadata()) { - memoizedIsInitialized = 0; - return false; - } - if (!getRelMetadata().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeMessage(1, relMetadata_); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(1, relMetadata_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder - implements eu.dnetlib.data.proto.ResultResultProtos.ResultResult.RelationshipOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_Relationship_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_Relationship_fieldAccessorTable; - } - - // Construct using eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - getRelMetadataFieldBuilder(); - } - } - private static Builder create() { - return new Builder(); - } - - public Builder clear() { - super.clear(); - if (relMetadataBuilder_ == null) { - relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); - } else { - relMetadataBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship.getDescriptor(); - } - - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship getDefaultInstanceForType() { - return eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship.getDefaultInstance(); - } - - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship build() { - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - private eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return result; - } - - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship buildPartial() { - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship result = new eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - if (relMetadataBuilder_ == null) { - result.relMetadata_ = relMetadata_; - } else { - result.relMetadata_ = relMetadataBuilder_.build(); - } - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship) { - return mergeFrom((eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship other) { - if (other == eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship.getDefaultInstance()) return this; - if (other.hasRelMetadata()) { - mergeRelMetadata(other.getRelMetadata()); - } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - - public final boolean isInitialized() { - if (!hasRelMetadata()) { - - return false; - } - if (!getRelMetadata().isInitialized()) { - - return false; - } - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - } - break; - } - case 10: { - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder subBuilder = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.newBuilder(); - if (hasRelMetadata()) { - subBuilder.mergeFrom(getRelMetadata()); - } - input.readMessage(subBuilder, extensionRegistry); - setRelMetadata(subBuilder.buildPartial()); - break; - } - } - } - } - - private int bitField0_; - - // required .eu.dnetlib.data.proto.RelMetadata relMetadata = 1; - private eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder> relMetadataBuilder_; - public boolean hasRelMetadata() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata getRelMetadata() { - if (relMetadataBuilder_ == null) { - return relMetadata_; - } else { - return relMetadataBuilder_.getMessage(); - } - } - public Builder setRelMetadata(eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata value) { - if (relMetadataBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - relMetadata_ = value; - onChanged(); - } else { - relMetadataBuilder_.setMessage(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder setRelMetadata( - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder builderForValue) { - if (relMetadataBuilder_ == null) { - relMetadata_ = builderForValue.build(); - onChanged(); - } else { - relMetadataBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder mergeRelMetadata(eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata value) { - if (relMetadataBuilder_ == null) { - if (((bitField0_ & 0x00000001) == 0x00000001) && - relMetadata_ != eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance()) { - relMetadata_ = - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.newBuilder(relMetadata_).mergeFrom(value).buildPartial(); - } else { - relMetadata_ = value; - } - onChanged(); - } else { - relMetadataBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder clearRelMetadata() { - if (relMetadataBuilder_ == null) { - relMetadata_ = eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.getDefaultInstance(); - onChanged(); - } else { - relMetadataBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder getRelMetadataBuilder() { - bitField0_ |= 0x00000001; - onChanged(); - return getRelMetadataFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder getRelMetadataOrBuilder() { - if (relMetadataBuilder_ != null) { - return relMetadataBuilder_.getMessageOrBuilder(); - } else { - return relMetadata_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder> - getRelMetadataFieldBuilder() { - if (relMetadataBuilder_ == null) { - relMetadataBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadata.Builder, eu.dnetlib.data.proto.RelMetadataProtos.RelMetadataOrBuilder>( - relMetadata_, - getParentForChildren(), - isClean()); - relMetadata_ = null; - } - return relMetadataBuilder_; - } - - // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.ResultResult.Relationship) - } - - static { - defaultInstance = new Relationship(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.ResultResult.Relationship) - } - - private int bitField0_; - // optional .eu.dnetlib.data.proto.ResultResult.Similarity similarity = 2; - public static final int SIMILARITY_FIELD_NUMBER = 2; - private eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity similarity_; - public boolean hasSimilarity() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity getSimilarity() { - return similarity_; - } - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SimilarityOrBuilder getSimilarityOrBuilder() { - return similarity_; - } - - // optional .eu.dnetlib.data.proto.ResultResult.PublicationDataset publicationDataset = 3; - public static final int PUBLICATIONDATASET_FIELD_NUMBER = 3; - private eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset publicationDataset_; - public boolean hasPublicationDataset() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset getPublicationDataset() { - return publicationDataset_; - } - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDatasetOrBuilder getPublicationDatasetOrBuilder() { - return publicationDataset_; - } - - // optional .eu.dnetlib.data.proto.Dedup dedup = 4; - public static final int DEDUP_FIELD_NUMBER = 4; - private eu.dnetlib.data.proto.DedupProtos.Dedup dedup_; - public boolean hasDedup() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - public eu.dnetlib.data.proto.DedupProtos.Dedup getDedup() { - return dedup_; - } - public eu.dnetlib.data.proto.DedupProtos.DedupOrBuilder getDedupOrBuilder() { - return dedup_; - } - - // optional .eu.dnetlib.data.proto.DedupSimilarity dedupSimilarity = 5; - public static final int DEDUPSIMILARITY_FIELD_NUMBER = 5; - private eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity dedupSimilarity_; - public boolean hasDedupSimilarity() { - return ((bitField0_ & 0x00000008) == 0x00000008); - } - public eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity getDedupSimilarity() { - return dedupSimilarity_; - } - public eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarityOrBuilder getDedupSimilarityOrBuilder() { - return dedupSimilarity_; - } - - // optional .eu.dnetlib.data.proto.ResultResult.Supplement supplement = 6; - public static final int SUPPLEMENT_FIELD_NUMBER = 6; - private eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement supplement_; - public boolean hasSupplement() { - return ((bitField0_ & 0x00000010) == 0x00000010); - } - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement getSupplement() { - return supplement_; - } - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SupplementOrBuilder getSupplementOrBuilder() { - return supplement_; - } - - // optional .eu.dnetlib.data.proto.ResultResult.Part part = 7; - public static final int PART_FIELD_NUMBER = 7; - private eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part part_; - public boolean hasPart() { - return ((bitField0_ & 0x00000020) == 0x00000020); - } - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part getPart() { - return part_; - } - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PartOrBuilder getPartOrBuilder() { - return part_; - } - - // optional .eu.dnetlib.data.proto.ResultResult.Relationship relationship = 8; - public static final int RELATIONSHIP_FIELD_NUMBER = 8; - private eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship relationship_; - public boolean hasRelationship() { - return ((bitField0_ & 0x00000040) == 0x00000040); - } - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship getRelationship() { - return relationship_; - } - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.RelationshipOrBuilder getRelationshipOrBuilder() { - return relationship_; - } - - // optional .eu.dnetlib.data.proto.ResultResult.SoftwareSoftware softwareSoftware = 9; - public static final int SOFTWARESOFTWARE_FIELD_NUMBER = 9; - private eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware softwareSoftware_; - public boolean hasSoftwareSoftware() { - return ((bitField0_ & 0x00000080) == 0x00000080); - } - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware getSoftwareSoftware() { - return softwareSoftware_; - } - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftwareOrBuilder getSoftwareSoftwareOrBuilder() { - return softwareSoftware_; - } - - private void initFields() { - similarity_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.getDefaultInstance(); - publicationDataset_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset.getDefaultInstance(); - dedup_ = eu.dnetlib.data.proto.DedupProtos.Dedup.getDefaultInstance(); - dedupSimilarity_ = eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.getDefaultInstance(); - supplement_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement.getDefaultInstance(); - part_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part.getDefaultInstance(); - relationship_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship.getDefaultInstance(); - softwareSoftware_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware.getDefaultInstance(); - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - if (hasSimilarity()) { - if (!getSimilarity().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasPublicationDataset()) { - if (!getPublicationDataset().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasDedup()) { - if (!getDedup().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasDedupSimilarity()) { - if (!getDedupSimilarity().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasSupplement()) { - if (!getSupplement().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasPart()) { - if (!getPart().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasRelationship()) { - if (!getRelationship().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - if (hasSoftwareSoftware()) { - if (!getSoftwareSoftware().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeMessage(2, similarity_); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - output.writeMessage(3, publicationDataset_); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - output.writeMessage(4, dedup_); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - output.writeMessage(5, dedupSimilarity_); - } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - output.writeMessage(6, supplement_); - } - if (((bitField0_ & 0x00000020) == 0x00000020)) { - output.writeMessage(7, part_); - } - if (((bitField0_ & 0x00000040) == 0x00000040)) { - output.writeMessage(8, relationship_); - } - if (((bitField0_ & 0x00000080) == 0x00000080)) { - output.writeMessage(9, softwareSoftware_); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(2, similarity_); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(3, publicationDataset_); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(4, dedup_); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(5, dedupSimilarity_); - } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(6, supplement_); - } - if (((bitField0_ & 0x00000020) == 0x00000020)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(7, part_); - } - if (((bitField0_ & 0x00000040) == 0x00000040)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(8, relationship_); - } - if (((bitField0_ & 0x00000080) == 0x00000080)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(9, softwareSoftware_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static eu.dnetlib.data.proto.ResultResultProtos.ResultResult parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(eu.dnetlib.data.proto.ResultResultProtos.ResultResult prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder - implements eu.dnetlib.data.proto.ResultResultProtos.ResultResultOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return eu.dnetlib.data.proto.ResultResultProtos.internal_static_eu_dnetlib_data_proto_ResultResult_fieldAccessorTable; - } - - // Construct using eu.dnetlib.data.proto.ResultResultProtos.ResultResult.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - getSimilarityFieldBuilder(); - getPublicationDatasetFieldBuilder(); - getDedupFieldBuilder(); - getDedupSimilarityFieldBuilder(); - getSupplementFieldBuilder(); - getPartFieldBuilder(); - getRelationshipFieldBuilder(); - getSoftwareSoftwareFieldBuilder(); - } - } - private static Builder create() { - return new Builder(); - } - - public Builder clear() { - super.clear(); - if (similarityBuilder_ == null) { - similarity_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.getDefaultInstance(); - } else { - similarityBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - if (publicationDatasetBuilder_ == null) { - publicationDataset_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset.getDefaultInstance(); - } else { - publicationDatasetBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000002); - if (dedupBuilder_ == null) { - dedup_ = eu.dnetlib.data.proto.DedupProtos.Dedup.getDefaultInstance(); - } else { - dedupBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000004); - if (dedupSimilarityBuilder_ == null) { - dedupSimilarity_ = eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.getDefaultInstance(); - } else { - dedupSimilarityBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000008); - if (supplementBuilder_ == null) { - supplement_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement.getDefaultInstance(); - } else { - supplementBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000010); - if (partBuilder_ == null) { - part_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part.getDefaultInstance(); - } else { - partBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000020); - if (relationshipBuilder_ == null) { - relationship_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship.getDefaultInstance(); - } else { - relationshipBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000040); - if (softwareSoftwareBuilder_ == null) { - softwareSoftware_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware.getDefaultInstance(); - } else { - softwareSoftwareBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000080); - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return eu.dnetlib.data.proto.ResultResultProtos.ResultResult.getDescriptor(); - } - - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult getDefaultInstanceForType() { - return eu.dnetlib.data.proto.ResultResultProtos.ResultResult.getDefaultInstance(); - } - - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult build() { - eu.dnetlib.data.proto.ResultResultProtos.ResultResult result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - private eu.dnetlib.data.proto.ResultResultProtos.ResultResult buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - eu.dnetlib.data.proto.ResultResultProtos.ResultResult result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return result; - } - - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult buildPartial() { - eu.dnetlib.data.proto.ResultResultProtos.ResultResult result = new eu.dnetlib.data.proto.ResultResultProtos.ResultResult(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - if (similarityBuilder_ == null) { - result.similarity_ = similarity_; - } else { - result.similarity_ = similarityBuilder_.build(); - } - if (((from_bitField0_ & 0x00000002) == 0x00000002)) { - to_bitField0_ |= 0x00000002; - } - if (publicationDatasetBuilder_ == null) { - result.publicationDataset_ = publicationDataset_; - } else { - result.publicationDataset_ = publicationDatasetBuilder_.build(); - } - if (((from_bitField0_ & 0x00000004) == 0x00000004)) { - to_bitField0_ |= 0x00000004; - } - if (dedupBuilder_ == null) { - result.dedup_ = dedup_; - } else { - result.dedup_ = dedupBuilder_.build(); - } - if (((from_bitField0_ & 0x00000008) == 0x00000008)) { - to_bitField0_ |= 0x00000008; - } - if (dedupSimilarityBuilder_ == null) { - result.dedupSimilarity_ = dedupSimilarity_; - } else { - result.dedupSimilarity_ = dedupSimilarityBuilder_.build(); - } - if (((from_bitField0_ & 0x00000010) == 0x00000010)) { - to_bitField0_ |= 0x00000010; - } - if (supplementBuilder_ == null) { - result.supplement_ = supplement_; - } else { - result.supplement_ = supplementBuilder_.build(); - } - if (((from_bitField0_ & 0x00000020) == 0x00000020)) { - to_bitField0_ |= 0x00000020; - } - if (partBuilder_ == null) { - result.part_ = part_; - } else { - result.part_ = partBuilder_.build(); - } - if (((from_bitField0_ & 0x00000040) == 0x00000040)) { - to_bitField0_ |= 0x00000040; - } - if (relationshipBuilder_ == null) { - result.relationship_ = relationship_; - } else { - result.relationship_ = relationshipBuilder_.build(); - } - if (((from_bitField0_ & 0x00000080) == 0x00000080)) { - to_bitField0_ |= 0x00000080; - } - if (softwareSoftwareBuilder_ == null) { - result.softwareSoftware_ = softwareSoftware_; - } else { - result.softwareSoftware_ = softwareSoftwareBuilder_.build(); - } - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof eu.dnetlib.data.proto.ResultResultProtos.ResultResult) { - return mergeFrom((eu.dnetlib.data.proto.ResultResultProtos.ResultResult)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(eu.dnetlib.data.proto.ResultResultProtos.ResultResult other) { - if (other == eu.dnetlib.data.proto.ResultResultProtos.ResultResult.getDefaultInstance()) return this; - if (other.hasSimilarity()) { - mergeSimilarity(other.getSimilarity()); - } - if (other.hasPublicationDataset()) { - mergePublicationDataset(other.getPublicationDataset()); - } - if (other.hasDedup()) { - mergeDedup(other.getDedup()); - } - if (other.hasDedupSimilarity()) { - mergeDedupSimilarity(other.getDedupSimilarity()); - } - if (other.hasSupplement()) { - mergeSupplement(other.getSupplement()); - } - if (other.hasPart()) { - mergePart(other.getPart()); - } - if (other.hasRelationship()) { - mergeRelationship(other.getRelationship()); - } - if (other.hasSoftwareSoftware()) { - mergeSoftwareSoftware(other.getSoftwareSoftware()); - } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - - public final boolean isInitialized() { - if (hasSimilarity()) { - if (!getSimilarity().isInitialized()) { - - return false; - } - } - if (hasPublicationDataset()) { - if (!getPublicationDataset().isInitialized()) { - - return false; - } - } - if (hasDedup()) { - if (!getDedup().isInitialized()) { - - return false; - } - } - if (hasDedupSimilarity()) { - if (!getDedupSimilarity().isInitialized()) { - - return false; - } - } - if (hasSupplement()) { - if (!getSupplement().isInitialized()) { - - return false; - } - } - if (hasPart()) { - if (!getPart().isInitialized()) { - - return false; - } - } - if (hasRelationship()) { - if (!getRelationship().isInitialized()) { - - return false; - } - } - if (hasSoftwareSoftware()) { - if (!getSoftwareSoftware().isInitialized()) { - - return false; - } - } - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - } - break; - } - case 18: { - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.Builder subBuilder = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.newBuilder(); - if (hasSimilarity()) { - subBuilder.mergeFrom(getSimilarity()); - } - input.readMessage(subBuilder, extensionRegistry); - setSimilarity(subBuilder.buildPartial()); - break; - } - case 26: { - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset.Builder subBuilder = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset.newBuilder(); - if (hasPublicationDataset()) { - subBuilder.mergeFrom(getPublicationDataset()); - } - input.readMessage(subBuilder, extensionRegistry); - setPublicationDataset(subBuilder.buildPartial()); - break; - } - case 34: { - eu.dnetlib.data.proto.DedupProtos.Dedup.Builder subBuilder = eu.dnetlib.data.proto.DedupProtos.Dedup.newBuilder(); - if (hasDedup()) { - subBuilder.mergeFrom(getDedup()); - } - input.readMessage(subBuilder, extensionRegistry); - setDedup(subBuilder.buildPartial()); - break; - } - case 42: { - eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.Builder subBuilder = eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.newBuilder(); - if (hasDedupSimilarity()) { - subBuilder.mergeFrom(getDedupSimilarity()); - } - input.readMessage(subBuilder, extensionRegistry); - setDedupSimilarity(subBuilder.buildPartial()); - break; - } - case 50: { - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement.Builder subBuilder = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement.newBuilder(); - if (hasSupplement()) { - subBuilder.mergeFrom(getSupplement()); - } - input.readMessage(subBuilder, extensionRegistry); - setSupplement(subBuilder.buildPartial()); - break; - } - case 58: { - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part.Builder subBuilder = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part.newBuilder(); - if (hasPart()) { - subBuilder.mergeFrom(getPart()); - } - input.readMessage(subBuilder, extensionRegistry); - setPart(subBuilder.buildPartial()); - break; - } - case 66: { - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship.Builder subBuilder = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship.newBuilder(); - if (hasRelationship()) { - subBuilder.mergeFrom(getRelationship()); - } - input.readMessage(subBuilder, extensionRegistry); - setRelationship(subBuilder.buildPartial()); - break; - } - case 74: { - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware.Builder subBuilder = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware.newBuilder(); - if (hasSoftwareSoftware()) { - subBuilder.mergeFrom(getSoftwareSoftware()); - } - input.readMessage(subBuilder, extensionRegistry); - setSoftwareSoftware(subBuilder.buildPartial()); - break; - } - } - } - } - - private int bitField0_; - - // optional .eu.dnetlib.data.proto.ResultResult.Similarity similarity = 2; - private eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity similarity_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.Builder, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SimilarityOrBuilder> similarityBuilder_; - public boolean hasSimilarity() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity getSimilarity() { - if (similarityBuilder_ == null) { - return similarity_; - } else { - return similarityBuilder_.getMessage(); - } - } - public Builder setSimilarity(eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity value) { - if (similarityBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - similarity_ = value; - onChanged(); - } else { - similarityBuilder_.setMessage(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder setSimilarity( - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.Builder builderForValue) { - if (similarityBuilder_ == null) { - similarity_ = builderForValue.build(); - onChanged(); - } else { - similarityBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder mergeSimilarity(eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity value) { - if (similarityBuilder_ == null) { - if (((bitField0_ & 0x00000001) == 0x00000001) && - similarity_ != eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.getDefaultInstance()) { - similarity_ = - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.newBuilder(similarity_).mergeFrom(value).buildPartial(); - } else { - similarity_ = value; - } - onChanged(); - } else { - similarityBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000001; - return this; - } - public Builder clearSimilarity() { - if (similarityBuilder_ == null) { - similarity_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.getDefaultInstance(); - onChanged(); - } else { - similarityBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.Builder getSimilarityBuilder() { - bitField0_ |= 0x00000001; - onChanged(); - return getSimilarityFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SimilarityOrBuilder getSimilarityOrBuilder() { - if (similarityBuilder_ != null) { - return similarityBuilder_.getMessageOrBuilder(); - } else { - return similarity_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.Builder, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SimilarityOrBuilder> - getSimilarityFieldBuilder() { - if (similarityBuilder_ == null) { - similarityBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.Builder, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SimilarityOrBuilder>( - similarity_, - getParentForChildren(), - isClean()); - similarity_ = null; - } - return similarityBuilder_; - } - - // optional .eu.dnetlib.data.proto.ResultResult.PublicationDataset publicationDataset = 3; - private eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset publicationDataset_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset.Builder, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDatasetOrBuilder> publicationDatasetBuilder_; - public boolean hasPublicationDataset() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset getPublicationDataset() { - if (publicationDatasetBuilder_ == null) { - return publicationDataset_; - } else { - return publicationDatasetBuilder_.getMessage(); - } - } - public Builder setPublicationDataset(eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset value) { - if (publicationDatasetBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - publicationDataset_ = value; - onChanged(); - } else { - publicationDatasetBuilder_.setMessage(value); - } - bitField0_ |= 0x00000002; - return this; - } - public Builder setPublicationDataset( - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset.Builder builderForValue) { - if (publicationDatasetBuilder_ == null) { - publicationDataset_ = builderForValue.build(); - onChanged(); - } else { - publicationDatasetBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000002; - return this; - } - public Builder mergePublicationDataset(eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset value) { - if (publicationDatasetBuilder_ == null) { - if (((bitField0_ & 0x00000002) == 0x00000002) && - publicationDataset_ != eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset.getDefaultInstance()) { - publicationDataset_ = - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset.newBuilder(publicationDataset_).mergeFrom(value).buildPartial(); - } else { - publicationDataset_ = value; - } - onChanged(); - } else { - publicationDatasetBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000002; - return this; - } - public Builder clearPublicationDataset() { - if (publicationDatasetBuilder_ == null) { - publicationDataset_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset.getDefaultInstance(); - onChanged(); - } else { - publicationDatasetBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000002); - return this; - } - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset.Builder getPublicationDatasetBuilder() { - bitField0_ |= 0x00000002; - onChanged(); - return getPublicationDatasetFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDatasetOrBuilder getPublicationDatasetOrBuilder() { - if (publicationDatasetBuilder_ != null) { - return publicationDatasetBuilder_.getMessageOrBuilder(); - } else { - return publicationDataset_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset.Builder, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDatasetOrBuilder> - getPublicationDatasetFieldBuilder() { - if (publicationDatasetBuilder_ == null) { - publicationDatasetBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset.Builder, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDatasetOrBuilder>( - publicationDataset_, - getParentForChildren(), - isClean()); - publicationDataset_ = null; - } - return publicationDatasetBuilder_; - } - - // optional .eu.dnetlib.data.proto.Dedup dedup = 4; - private eu.dnetlib.data.proto.DedupProtos.Dedup dedup_ = eu.dnetlib.data.proto.DedupProtos.Dedup.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.DedupProtos.Dedup, eu.dnetlib.data.proto.DedupProtos.Dedup.Builder, eu.dnetlib.data.proto.DedupProtos.DedupOrBuilder> dedupBuilder_; - public boolean hasDedup() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - public eu.dnetlib.data.proto.DedupProtos.Dedup getDedup() { - if (dedupBuilder_ == null) { - return dedup_; - } else { - return dedupBuilder_.getMessage(); - } - } - public Builder setDedup(eu.dnetlib.data.proto.DedupProtos.Dedup value) { - if (dedupBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - dedup_ = value; - onChanged(); - } else { - dedupBuilder_.setMessage(value); - } - bitField0_ |= 0x00000004; - return this; - } - public Builder setDedup( - eu.dnetlib.data.proto.DedupProtos.Dedup.Builder builderForValue) { - if (dedupBuilder_ == null) { - dedup_ = builderForValue.build(); - onChanged(); - } else { - dedupBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000004; - return this; - } - public Builder mergeDedup(eu.dnetlib.data.proto.DedupProtos.Dedup value) { - if (dedupBuilder_ == null) { - if (((bitField0_ & 0x00000004) == 0x00000004) && - dedup_ != eu.dnetlib.data.proto.DedupProtos.Dedup.getDefaultInstance()) { - dedup_ = - eu.dnetlib.data.proto.DedupProtos.Dedup.newBuilder(dedup_).mergeFrom(value).buildPartial(); - } else { - dedup_ = value; - } - onChanged(); - } else { - dedupBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000004; - return this; - } - public Builder clearDedup() { - if (dedupBuilder_ == null) { - dedup_ = eu.dnetlib.data.proto.DedupProtos.Dedup.getDefaultInstance(); - onChanged(); - } else { - dedupBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000004); - return this; - } - public eu.dnetlib.data.proto.DedupProtos.Dedup.Builder getDedupBuilder() { - bitField0_ |= 0x00000004; - onChanged(); - return getDedupFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.DedupProtos.DedupOrBuilder getDedupOrBuilder() { - if (dedupBuilder_ != null) { - return dedupBuilder_.getMessageOrBuilder(); - } else { - return dedup_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.DedupProtos.Dedup, eu.dnetlib.data.proto.DedupProtos.Dedup.Builder, eu.dnetlib.data.proto.DedupProtos.DedupOrBuilder> - getDedupFieldBuilder() { - if (dedupBuilder_ == null) { - dedupBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.DedupProtos.Dedup, eu.dnetlib.data.proto.DedupProtos.Dedup.Builder, eu.dnetlib.data.proto.DedupProtos.DedupOrBuilder>( - dedup_, - getParentForChildren(), - isClean()); - dedup_ = null; - } - return dedupBuilder_; - } - - // optional .eu.dnetlib.data.proto.DedupSimilarity dedupSimilarity = 5; - private eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity dedupSimilarity_ = eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity, eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.Builder, eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarityOrBuilder> dedupSimilarityBuilder_; - public boolean hasDedupSimilarity() { - return ((bitField0_ & 0x00000008) == 0x00000008); - } - public eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity getDedupSimilarity() { - if (dedupSimilarityBuilder_ == null) { - return dedupSimilarity_; - } else { - return dedupSimilarityBuilder_.getMessage(); - } - } - public Builder setDedupSimilarity(eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity value) { - if (dedupSimilarityBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - dedupSimilarity_ = value; - onChanged(); - } else { - dedupSimilarityBuilder_.setMessage(value); - } - bitField0_ |= 0x00000008; - return this; - } - public Builder setDedupSimilarity( - eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.Builder builderForValue) { - if (dedupSimilarityBuilder_ == null) { - dedupSimilarity_ = builderForValue.build(); - onChanged(); - } else { - dedupSimilarityBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000008; - return this; - } - public Builder mergeDedupSimilarity(eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity value) { - if (dedupSimilarityBuilder_ == null) { - if (((bitField0_ & 0x00000008) == 0x00000008) && - dedupSimilarity_ != eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.getDefaultInstance()) { - dedupSimilarity_ = - eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.newBuilder(dedupSimilarity_).mergeFrom(value).buildPartial(); - } else { - dedupSimilarity_ = value; - } - onChanged(); - } else { - dedupSimilarityBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000008; - return this; - } - public Builder clearDedupSimilarity() { - if (dedupSimilarityBuilder_ == null) { - dedupSimilarity_ = eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.getDefaultInstance(); - onChanged(); - } else { - dedupSimilarityBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000008); - return this; - } - public eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.Builder getDedupSimilarityBuilder() { - bitField0_ |= 0x00000008; - onChanged(); - return getDedupSimilarityFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarityOrBuilder getDedupSimilarityOrBuilder() { - if (dedupSimilarityBuilder_ != null) { - return dedupSimilarityBuilder_.getMessageOrBuilder(); - } else { - return dedupSimilarity_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity, eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.Builder, eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarityOrBuilder> - getDedupSimilarityFieldBuilder() { - if (dedupSimilarityBuilder_ == null) { - dedupSimilarityBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity, eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarity.Builder, eu.dnetlib.data.proto.DedupSimilarityProtos.DedupSimilarityOrBuilder>( - dedupSimilarity_, - getParentForChildren(), - isClean()); - dedupSimilarity_ = null; - } - return dedupSimilarityBuilder_; - } - - // optional .eu.dnetlib.data.proto.ResultResult.Supplement supplement = 6; - private eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement supplement_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement.Builder, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SupplementOrBuilder> supplementBuilder_; - public boolean hasSupplement() { - return ((bitField0_ & 0x00000010) == 0x00000010); - } - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement getSupplement() { - if (supplementBuilder_ == null) { - return supplement_; - } else { - return supplementBuilder_.getMessage(); - } - } - public Builder setSupplement(eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement value) { - if (supplementBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - supplement_ = value; - onChanged(); - } else { - supplementBuilder_.setMessage(value); - } - bitField0_ |= 0x00000010; - return this; - } - public Builder setSupplement( - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement.Builder builderForValue) { - if (supplementBuilder_ == null) { - supplement_ = builderForValue.build(); - onChanged(); - } else { - supplementBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000010; - return this; - } - public Builder mergeSupplement(eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement value) { - if (supplementBuilder_ == null) { - if (((bitField0_ & 0x00000010) == 0x00000010) && - supplement_ != eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement.getDefaultInstance()) { - supplement_ = - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement.newBuilder(supplement_).mergeFrom(value).buildPartial(); - } else { - supplement_ = value; - } - onChanged(); - } else { - supplementBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000010; - return this; - } - public Builder clearSupplement() { - if (supplementBuilder_ == null) { - supplement_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement.getDefaultInstance(); - onChanged(); - } else { - supplementBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000010); - return this; - } - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement.Builder getSupplementBuilder() { - bitField0_ |= 0x00000010; - onChanged(); - return getSupplementFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SupplementOrBuilder getSupplementOrBuilder() { - if (supplementBuilder_ != null) { - return supplementBuilder_.getMessageOrBuilder(); - } else { - return supplement_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement.Builder, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SupplementOrBuilder> - getSupplementFieldBuilder() { - if (supplementBuilder_ == null) { - supplementBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement.Builder, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SupplementOrBuilder>( - supplement_, - getParentForChildren(), - isClean()); - supplement_ = null; - } - return supplementBuilder_; - } - - // optional .eu.dnetlib.data.proto.ResultResult.Part part = 7; - private eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part part_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part.Builder, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PartOrBuilder> partBuilder_; - public boolean hasPart() { - return ((bitField0_ & 0x00000020) == 0x00000020); - } - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part getPart() { - if (partBuilder_ == null) { - return part_; - } else { - return partBuilder_.getMessage(); - } - } - public Builder setPart(eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part value) { - if (partBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - part_ = value; - onChanged(); - } else { - partBuilder_.setMessage(value); - } - bitField0_ |= 0x00000020; - return this; - } - public Builder setPart( - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part.Builder builderForValue) { - if (partBuilder_ == null) { - part_ = builderForValue.build(); - onChanged(); - } else { - partBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000020; - return this; - } - public Builder mergePart(eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part value) { - if (partBuilder_ == null) { - if (((bitField0_ & 0x00000020) == 0x00000020) && - part_ != eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part.getDefaultInstance()) { - part_ = - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part.newBuilder(part_).mergeFrom(value).buildPartial(); - } else { - part_ = value; - } - onChanged(); - } else { - partBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000020; - return this; - } - public Builder clearPart() { - if (partBuilder_ == null) { - part_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part.getDefaultInstance(); - onChanged(); - } else { - partBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000020); - return this; - } - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part.Builder getPartBuilder() { - bitField0_ |= 0x00000020; - onChanged(); - return getPartFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PartOrBuilder getPartOrBuilder() { - if (partBuilder_ != null) { - return partBuilder_.getMessageOrBuilder(); - } else { - return part_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part.Builder, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PartOrBuilder> - getPartFieldBuilder() { - if (partBuilder_ == null) { - partBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part.Builder, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PartOrBuilder>( - part_, - getParentForChildren(), - isClean()); - part_ = null; - } - return partBuilder_; - } - - // optional .eu.dnetlib.data.proto.ResultResult.Relationship relationship = 8; - private eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship relationship_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship.Builder, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.RelationshipOrBuilder> relationshipBuilder_; - public boolean hasRelationship() { - return ((bitField0_ & 0x00000040) == 0x00000040); - } - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship getRelationship() { - if (relationshipBuilder_ == null) { - return relationship_; - } else { - return relationshipBuilder_.getMessage(); - } - } - public Builder setRelationship(eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship value) { - if (relationshipBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - relationship_ = value; - onChanged(); - } else { - relationshipBuilder_.setMessage(value); - } - bitField0_ |= 0x00000040; - return this; - } - public Builder setRelationship( - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship.Builder builderForValue) { - if (relationshipBuilder_ == null) { - relationship_ = builderForValue.build(); - onChanged(); - } else { - relationshipBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000040; - return this; - } - public Builder mergeRelationship(eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship value) { - if (relationshipBuilder_ == null) { - if (((bitField0_ & 0x00000040) == 0x00000040) && - relationship_ != eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship.getDefaultInstance()) { - relationship_ = - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship.newBuilder(relationship_).mergeFrom(value).buildPartial(); - } else { - relationship_ = value; - } - onChanged(); - } else { - relationshipBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000040; - return this; - } - public Builder clearRelationship() { - if (relationshipBuilder_ == null) { - relationship_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship.getDefaultInstance(); - onChanged(); - } else { - relationshipBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000040); - return this; - } - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship.Builder getRelationshipBuilder() { - bitField0_ |= 0x00000040; - onChanged(); - return getRelationshipFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.RelationshipOrBuilder getRelationshipOrBuilder() { - if (relationshipBuilder_ != null) { - return relationshipBuilder_.getMessageOrBuilder(); - } else { - return relationship_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship.Builder, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.RelationshipOrBuilder> - getRelationshipFieldBuilder() { - if (relationshipBuilder_ == null) { - relationshipBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship.Builder, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.RelationshipOrBuilder>( - relationship_, - getParentForChildren(), - isClean()); - relationship_ = null; - } - return relationshipBuilder_; - } - - // optional .eu.dnetlib.data.proto.ResultResult.SoftwareSoftware softwareSoftware = 9; - private eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware softwareSoftware_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware.Builder, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftwareOrBuilder> softwareSoftwareBuilder_; - public boolean hasSoftwareSoftware() { - return ((bitField0_ & 0x00000080) == 0x00000080); - } - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware getSoftwareSoftware() { - if (softwareSoftwareBuilder_ == null) { - return softwareSoftware_; - } else { - return softwareSoftwareBuilder_.getMessage(); - } - } - public Builder setSoftwareSoftware(eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware value) { - if (softwareSoftwareBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - softwareSoftware_ = value; - onChanged(); - } else { - softwareSoftwareBuilder_.setMessage(value); - } - bitField0_ |= 0x00000080; - return this; - } - public Builder setSoftwareSoftware( - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware.Builder builderForValue) { - if (softwareSoftwareBuilder_ == null) { - softwareSoftware_ = builderForValue.build(); - onChanged(); - } else { - softwareSoftwareBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000080; - return this; - } - public Builder mergeSoftwareSoftware(eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware value) { - if (softwareSoftwareBuilder_ == null) { - if (((bitField0_ & 0x00000080) == 0x00000080) && - softwareSoftware_ != eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware.getDefaultInstance()) { - softwareSoftware_ = - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware.newBuilder(softwareSoftware_).mergeFrom(value).buildPartial(); - } else { - softwareSoftware_ = value; - } - onChanged(); - } else { - softwareSoftwareBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000080; - return this; - } - public Builder clearSoftwareSoftware() { - if (softwareSoftwareBuilder_ == null) { - softwareSoftware_ = eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware.getDefaultInstance(); - onChanged(); - } else { - softwareSoftwareBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000080); - return this; - } - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware.Builder getSoftwareSoftwareBuilder() { - bitField0_ |= 0x00000080; - onChanged(); - return getSoftwareSoftwareFieldBuilder().getBuilder(); - } - public eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftwareOrBuilder getSoftwareSoftwareOrBuilder() { - if (softwareSoftwareBuilder_ != null) { - return softwareSoftwareBuilder_.getMessageOrBuilder(); - } else { - return softwareSoftware_; - } - } - private com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware.Builder, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftwareOrBuilder> - getSoftwareSoftwareFieldBuilder() { - if (softwareSoftwareBuilder_ == null) { - softwareSoftwareBuilder_ = new com.google.protobuf.SingleFieldBuilder< - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware.Builder, eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftwareOrBuilder>( - softwareSoftware_, - getParentForChildren(), - isClean()); - softwareSoftware_ = null; - } - return softwareSoftwareBuilder_; - } - - // @@protoc_insertion_point(builder_scope:eu.dnetlib.data.proto.ResultResult) - } - - static { - defaultInstance = new ResultResult(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:eu.dnetlib.data.proto.ResultResult) - } - - private static com.google.protobuf.Descriptors.Descriptor - internal_static_eu_dnetlib_data_proto_ResultResult_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_eu_dnetlib_data_proto_ResultResult_fieldAccessorTable; - private static com.google.protobuf.Descriptors.Descriptor - internal_static_eu_dnetlib_data_proto_ResultResult_Similarity_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_eu_dnetlib_data_proto_ResultResult_Similarity_fieldAccessorTable; - private static com.google.protobuf.Descriptors.Descriptor - internal_static_eu_dnetlib_data_proto_ResultResult_PublicationDataset_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_eu_dnetlib_data_proto_ResultResult_PublicationDataset_fieldAccessorTable; - private static com.google.protobuf.Descriptors.Descriptor - internal_static_eu_dnetlib_data_proto_ResultResult_Supplement_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_eu_dnetlib_data_proto_ResultResult_Supplement_fieldAccessorTable; - private static com.google.protobuf.Descriptors.Descriptor - internal_static_eu_dnetlib_data_proto_ResultResult_Part_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_eu_dnetlib_data_proto_ResultResult_Part_fieldAccessorTable; - private static com.google.protobuf.Descriptors.Descriptor - internal_static_eu_dnetlib_data_proto_ResultResult_SoftwareSoftware_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_eu_dnetlib_data_proto_ResultResult_SoftwareSoftware_fieldAccessorTable; - private static com.google.protobuf.Descriptors.Descriptor - internal_static_eu_dnetlib_data_proto_ResultResult_Relationship_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_eu_dnetlib_data_proto_ResultResult_Relationship_fieldAccessorTable; - - public static com.google.protobuf.Descriptors.FileDescriptor - getDescriptor() { - return descriptor; - } - private static com.google.protobuf.Descriptors.FileDescriptor - descriptor; - static { - java.lang.String[] descriptorData = { - "\n\023Result_Result.proto\022\025eu.dnetlib.data.p" + - "roto\032\021RelMetadata.proto\032\013Dedup.proto\032\025De" + - "dupSimilarity.proto\"\337\n\n\014ResultResult\022B\n\n" + - "similarity\030\002 \001(\0132..eu.dnetlib.data.proto" + - ".ResultResult.Similarity\022R\n\022publicationD" + - "ataset\030\003 \001(\01326.eu.dnetlib.data.proto.Res" + - "ultResult.PublicationDataset\022+\n\005dedup\030\004 " + - "\001(\0132\034.eu.dnetlib.data.proto.Dedup\022?\n\017ded" + - "upSimilarity\030\005 \001(\0132&.eu.dnetlib.data.pro" + - "to.DedupSimilarity\022B\n\nsupplement\030\006 \001(\0132.", - ".eu.dnetlib.data.proto.ResultResult.Supp" + - "lement\0226\n\004part\030\007 \001(\0132(.eu.dnetlib.data.p" + - "roto.ResultResult.Part\022F\n\014relationship\030\010" + - " \001(\01320.eu.dnetlib.data.proto.ResultResul" + - "t.Relationship\022N\n\020softwareSoftware\030\t \001(\013" + - "24.eu.dnetlib.data.proto.ResultResult.So" + - "ftwareSoftware\032\230\002\n\nSimilarity\0227\n\013relMeta" + - "data\030\001 \002(\0132\".eu.dnetlib.data.proto.RelMe" + - "tadata\022\022\n\nsimilarity\030\002 \001(\002\022K\n\004type\030\003 \001(\016" + - "23.eu.dnetlib.data.proto.ResultResult.Si", - "milarity.Type:\010STANDARD\"L\n\007RelName\022\037\n\033is" + - "AmongTopNSimilarDocuments\020\001\022 \n\034hasAmongT" + - "opNSimilarDocuments\020\002\"\"\n\004Type\022\014\n\010STANDAR" + - "D\020\001\022\014\n\010WEBUSAGE\020\002\032i\n\022PublicationDataset\022" + - "7\n\013relMetadata\030\001 \002(\0132\".eu.dnetlib.data.p" + - "roto.RelMetadata\"\032\n\007RelName\022\017\n\013isRelated" + - "To\020\001\032z\n\nSupplement\0227\n\013relMetadata\030\001 \002(\0132" + - "\".eu.dnetlib.data.proto.RelMetadata\"3\n\007R" + - "elName\022\022\n\016isSupplementTo\020\001\022\024\n\020isSuppleme" + - "ntedBy\020\002\032e\n\004Part\0227\n\013relMetadata\030\001 \002(\0132\".", - "eu.dnetlib.data.proto.RelMetadata\"$\n\007Rel" + - "Name\022\014\n\010isPartOf\020\001\022\013\n\007hasPart\020\002\032g\n\020Softw" + - "areSoftware\0227\n\013relMetadata\030\001 \002(\0132\".eu.dn" + - "etlib.data.proto.RelMetadata\"\032\n\007RelName\022" + - "\017\n\013isVersionOf\020\001\032c\n\014Relationship\0227\n\013relM" + - "etadata\030\001 \002(\0132\".eu.dnetlib.data.proto.Re" + - "lMetadata\"\032\n\007RelName\022\017\n\013isRelatedTo\020\001B+\n" + - "\025eu.dnetlib.data.protoB\022ResultResultProt" + - "os" - }; - com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = - new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { - public com.google.protobuf.ExtensionRegistry assignDescriptors( - com.google.protobuf.Descriptors.FileDescriptor root) { - descriptor = root; - internal_static_eu_dnetlib_data_proto_ResultResult_descriptor = - getDescriptor().getMessageTypes().get(0); - internal_static_eu_dnetlib_data_proto_ResultResult_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_eu_dnetlib_data_proto_ResultResult_descriptor, - new java.lang.String[] { "Similarity", "PublicationDataset", "Dedup", "DedupSimilarity", "Supplement", "Part", "Relationship", "SoftwareSoftware", }, - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.class, - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Builder.class); - internal_static_eu_dnetlib_data_proto_ResultResult_Similarity_descriptor = - internal_static_eu_dnetlib_data_proto_ResultResult_descriptor.getNestedTypes().get(0); - internal_static_eu_dnetlib_data_proto_ResultResult_Similarity_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_eu_dnetlib_data_proto_ResultResult_Similarity_descriptor, - new java.lang.String[] { "RelMetadata", "Similarity", "Type", }, - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.class, - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity.Builder.class); - internal_static_eu_dnetlib_data_proto_ResultResult_PublicationDataset_descriptor = - internal_static_eu_dnetlib_data_proto_ResultResult_descriptor.getNestedTypes().get(1); - internal_static_eu_dnetlib_data_proto_ResultResult_PublicationDataset_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_eu_dnetlib_data_proto_ResultResult_PublicationDataset_descriptor, - new java.lang.String[] { "RelMetadata", }, - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset.class, - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.PublicationDataset.Builder.class); - internal_static_eu_dnetlib_data_proto_ResultResult_Supplement_descriptor = - internal_static_eu_dnetlib_data_proto_ResultResult_descriptor.getNestedTypes().get(2); - internal_static_eu_dnetlib_data_proto_ResultResult_Supplement_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_eu_dnetlib_data_proto_ResultResult_Supplement_descriptor, - new java.lang.String[] { "RelMetadata", }, - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement.class, - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Supplement.Builder.class); - internal_static_eu_dnetlib_data_proto_ResultResult_Part_descriptor = - internal_static_eu_dnetlib_data_proto_ResultResult_descriptor.getNestedTypes().get(3); - internal_static_eu_dnetlib_data_proto_ResultResult_Part_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_eu_dnetlib_data_proto_ResultResult_Part_descriptor, - new java.lang.String[] { "RelMetadata", }, - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part.class, - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Part.Builder.class); - internal_static_eu_dnetlib_data_proto_ResultResult_SoftwareSoftware_descriptor = - internal_static_eu_dnetlib_data_proto_ResultResult_descriptor.getNestedTypes().get(4); - internal_static_eu_dnetlib_data_proto_ResultResult_SoftwareSoftware_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_eu_dnetlib_data_proto_ResultResult_SoftwareSoftware_descriptor, - new java.lang.String[] { "RelMetadata", }, - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware.class, - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.SoftwareSoftware.Builder.class); - internal_static_eu_dnetlib_data_proto_ResultResult_Relationship_descriptor = - internal_static_eu_dnetlib_data_proto_ResultResult_descriptor.getNestedTypes().get(5); - internal_static_eu_dnetlib_data_proto_ResultResult_Relationship_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_eu_dnetlib_data_proto_ResultResult_Relationship_descriptor, - new java.lang.String[] { "RelMetadata", }, - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship.class, - eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Relationship.Builder.class); - return null; - } - }; - com.google.protobuf.Descriptors.FileDescriptor - .internalBuildGeneratedFileFrom(descriptorData, - new com.google.protobuf.Descriptors.FileDescriptor[] { - eu.dnetlib.data.proto.RelMetadataProtos.getDescriptor(), - eu.dnetlib.data.proto.DedupProtos.getDescriptor(), - eu.dnetlib.data.proto.DedupSimilarityProtos.getDescriptor(), - }, assigner); - } - - // @@protoc_insertion_point(outer_class_scope) -} diff --git a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/SpecialTrustProtos.java b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/SpecialTrustProtos.java deleted file mode 100644 index cb00e4679..000000000 --- a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/SpecialTrustProtos.java +++ /dev/null @@ -1,109 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: SpecialTrust.proto - -package eu.dnetlib.data.proto; - -public final class SpecialTrustProtos { - private SpecialTrustProtos() {} - public static void registerAllExtensions( - com.google.protobuf.ExtensionRegistry registry) { - } - public enum SpecialTrust - implements com.google.protobuf.ProtocolMessageEnum { - INFINITE(0, 1), - NEUTRAL(1, 2), - ; - - public static final int INFINITE_VALUE = 1; - public static final int NEUTRAL_VALUE = 2; - - - public final int getNumber() { return value; } - - public static SpecialTrust valueOf(int value) { - switch (value) { - case 1: return INFINITE; - case 2: return NEUTRAL; - default: return null; - } - } - - public static com.google.protobuf.Internal.EnumLiteMap - internalGetValueMap() { - return internalValueMap; - } - private static com.google.protobuf.Internal.EnumLiteMap - internalValueMap = - new com.google.protobuf.Internal.EnumLiteMap() { - public SpecialTrust findValueByNumber(int number) { - return SpecialTrust.valueOf(number); - } - }; - - public final com.google.protobuf.Descriptors.EnumValueDescriptor - getValueDescriptor() { - return getDescriptor().getValues().get(index); - } - public final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptorForType() { - return getDescriptor(); - } - public static final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptor() { - return eu.dnetlib.data.proto.SpecialTrustProtos.getDescriptor().getEnumTypes().get(0); - } - - private static final SpecialTrust[] VALUES = { - INFINITE, NEUTRAL, - }; - - public static SpecialTrust valueOf( - com.google.protobuf.Descriptors.EnumValueDescriptor desc) { - if (desc.getType() != getDescriptor()) { - throw new java.lang.IllegalArgumentException( - "EnumValueDescriptor is not for this type."); - } - return VALUES[desc.getIndex()]; - } - - private final int index; - private final int value; - - private SpecialTrust(int index, int value) { - this.index = index; - this.value = value; - } - - // @@protoc_insertion_point(enum_scope:eu.dnetlib.data.proto.SpecialTrust) - } - - - public static com.google.protobuf.Descriptors.FileDescriptor - getDescriptor() { - return descriptor; - } - private static com.google.protobuf.Descriptors.FileDescriptor - descriptor; - static { - java.lang.String[] descriptorData = { - "\n\022SpecialTrust.proto\022\025eu.dnetlib.data.pr" + - "oto*)\n\014SpecialTrust\022\014\n\010INFINITE\020\001\022\013\n\007NEU" + - "TRAL\020\002B+\n\025eu.dnetlib.data.protoB\022Special" + - "TrustProtos" - }; - com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = - new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { - public com.google.protobuf.ExtensionRegistry assignDescriptors( - com.google.protobuf.Descriptors.FileDescriptor root) { - descriptor = root; - return null; - } - }; - com.google.protobuf.Descriptors.FileDescriptor - .internalBuildGeneratedFileFrom(descriptorData, - new com.google.protobuf.Descriptors.FileDescriptor[] { - }, assigner); - } - - // @@protoc_insertion_point(outer_class_scope) -} diff --git a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/TypeProtos.java b/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/TypeProtos.java deleted file mode 100644 index 318fd7b9c..000000000 --- a/dnet-openaire-data-protos/src/gen/java/eu/dnetlib/data/proto/TypeProtos.java +++ /dev/null @@ -1,118 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: Type.proto - -package eu.dnetlib.data.proto; - -public final class TypeProtos { - private TypeProtos() {} - public static void registerAllExtensions( - com.google.protobuf.ExtensionRegistry registry) { - } - public enum Type - implements com.google.protobuf.ProtocolMessageEnum { - datasource(0, 10), - organization(1, 20), - person(2, 30), - project(3, 40), - result(4, 50), - ; - - public static final int datasource_VALUE = 10; - public static final int organization_VALUE = 20; - public static final int person_VALUE = 30; - public static final int project_VALUE = 40; - public static final int result_VALUE = 50; - - - public final int getNumber() { return value; } - - public static Type valueOf(int value) { - switch (value) { - case 10: return datasource; - case 20: return organization; - case 30: return person; - case 40: return project; - case 50: return result; - default: return null; - } - } - - public static com.google.protobuf.Internal.EnumLiteMap - internalGetValueMap() { - return internalValueMap; - } - private static com.google.protobuf.Internal.EnumLiteMap - internalValueMap = - new com.google.protobuf.Internal.EnumLiteMap() { - public Type findValueByNumber(int number) { - return Type.valueOf(number); - } - }; - - public final com.google.protobuf.Descriptors.EnumValueDescriptor - getValueDescriptor() { - return getDescriptor().getValues().get(index); - } - public final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptorForType() { - return getDescriptor(); - } - public static final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptor() { - return eu.dnetlib.data.proto.TypeProtos.getDescriptor().getEnumTypes().get(0); - } - - private static final Type[] VALUES = { - datasource, organization, person, project, result, - }; - - public static Type valueOf( - com.google.protobuf.Descriptors.EnumValueDescriptor desc) { - if (desc.getType() != getDescriptor()) { - throw new java.lang.IllegalArgumentException( - "EnumValueDescriptor is not for this type."); - } - return VALUES[desc.getIndex()]; - } - - private final int index; - private final int value; - - private Type(int index, int value) { - this.index = index; - this.value = value; - } - - // @@protoc_insertion_point(enum_scope:eu.dnetlib.data.proto.Type) - } - - - public static com.google.protobuf.Descriptors.FileDescriptor - getDescriptor() { - return descriptor; - } - private static com.google.protobuf.Descriptors.FileDescriptor - descriptor; - static { - java.lang.String[] descriptorData = { - "\n\nType.proto\022\025eu.dnetlib.data.proto*M\n\004T" + - "ype\022\016\n\ndatasource\020\n\022\020\n\014organization\020\024\022\n\n" + - "\006person\020\036\022\013\n\007project\020(\022\n\n\006result\0202B#\n\025eu" + - ".dnetlib.data.protoB\nTypeProtos" - }; - com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = - new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { - public com.google.protobuf.ExtensionRegistry assignDescriptors( - com.google.protobuf.Descriptors.FileDescriptor root) { - descriptor = root; - return null; - } - }; - com.google.protobuf.Descriptors.FileDescriptor - .internalBuildGeneratedFileFrom(descriptorData, - new com.google.protobuf.Descriptors.FileDescriptor[] { - }, assigner); - } - - // @@protoc_insertion_point(outer_class_scope) -} diff --git a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Datasource.proto b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Datasource.proto deleted file mode 100644 index c7cc4302e..000000000 --- a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Datasource.proto +++ /dev/null @@ -1,61 +0,0 @@ -package eu.dnetlib.data.proto; - -import "FieldType.proto"; - -option java_package = "eu.dnetlib.data.proto"; -option java_outer_classname = "DatasourceProtos"; - -message Datasource { - - optional Metadata metadata = 2; - - message Metadata { - - // common fields - optional Qualifier datasourcetype = 15; - optional Qualifier openairecompatibility = 17; - - optional StringField officialname = 1; - optional StringField englishname = 2; - optional StringField websiteurl = 3; - optional StringField logourl = 4; - optional StringField contactemail = 5; - optional StringField namespaceprefix = 7; - - optional StringField latitude = 18; - optional StringField longitude = 19; - optional StringField dateofvalidation = 20; - optional StringField description = 21; - - repeated StructuredProperty subjects = 45; - - // opendoar specific fields (od*) - optional StringField odnumberofitems = 9; - optional StringField odnumberofitemsdate = 10; - optional StringField odpolicies = 12; - - repeated StringField odlanguages = 13; - repeated StringField odcontenttypes = 14; - repeated StringField accessinfopackage = 6; - - // re3data fields - optional StringField releasestartdate = 31; - optional StringField releaseenddate = 32; - optional StringField missionstatementurl = 33; - optional BoolField dataprovider = 34; - optional BoolField serviceprovider = 35; - optional StringField databaseaccesstype = 36; // {open, restricted or closed} - optional StringField datauploadtype = 37; // {open, restricted or closed} - optional StringField databaseaccessrestriction = 38; // {feeRequired, registration, other} - optional StringField datauploadrestriction = 39; // {feeRequired, registration, other} - optional BoolField versioning = 40; - optional StringField citationguidelineurl = 41; - optional StringField qualitymanagementkind = 42; // {yes, no, uknown} - optional StringField pidsystems = 43; - optional StringField certificates = 44; - - repeated KeyValue policies = 46; - - } - -} diff --git a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Datasource_Organization.proto b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Datasource_Organization.proto deleted file mode 100644 index f3276cb1c..000000000 --- a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Datasource_Organization.proto +++ /dev/null @@ -1,23 +0,0 @@ -package eu.dnetlib.data.proto; - -import "RelMetadata.proto"; - -option java_package = "eu.dnetlib.data.proto"; -option java_outer_classname = "DatasourceOrganizationProtos"; - -message DatasourceOrganization { - - optional Provision provision = 1; - - message Provision { - - enum RelName { - isProvidedBy = 1; - provides = 2; - } - - required RelMetadata relMetadata = 1; - - } - -} \ No newline at end of file diff --git a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Dedup.proto b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Dedup.proto deleted file mode 100644 index c86b3dec5..000000000 --- a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Dedup.proto +++ /dev/null @@ -1,16 +0,0 @@ -package eu.dnetlib.data.proto; - -import "RelMetadata.proto"; - -option java_package = "eu.dnetlib.data.proto"; -option java_outer_classname = "DedupProtos"; - -message Dedup { - - enum RelName { - isMergedIn = 1; - merges = 2; - } - - required RelMetadata relMetadata = 1; -} diff --git a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/DedupSimilarity.proto b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/DedupSimilarity.proto deleted file mode 100644 index 1ad2381a4..000000000 --- a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/DedupSimilarity.proto +++ /dev/null @@ -1,16 +0,0 @@ -package eu.dnetlib.data.proto; - -import "RelMetadata.proto"; - -option java_package = "eu.dnetlib.data.proto"; -option java_outer_classname = "DedupSimilarityProtos"; - -message DedupSimilarity { - - enum RelName { - isSimilarTo = 1; - } - - required RelMetadata relMetadata = 1; - -} diff --git a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/FieldType.proto b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/FieldType.proto deleted file mode 100644 index d904895e2..000000000 --- a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/FieldType.proto +++ /dev/null @@ -1,104 +0,0 @@ -package eu.dnetlib.data.proto; - -option java_package = "eu.dnetlib.data.proto"; -option java_outer_classname = "FieldTypeProtos"; - -message StringField { - - required string value = 1; - optional DataInfo dataInfo = 2; -} - -message BoolField { - - required bool value = 1; - optional DataInfo dataInfo = 2; -} - -message IntField { - - required int32 value = 1; - optional DataInfo dataInfo = 2; -} - -message StructuredProperty { - - required string value = 1; - optional Qualifier qualifier = 2; - optional DataInfo dataInfo = 3; -} - -// Generic container for identified values, e.g: -// -// -message KeyValue { - - required string key = 1; - optional string value = 2; - - optional DataInfo dataInfo = 3; -} - -message Qualifier { - - optional string classid = 1; - optional string classname = 2; - optional string schemeid = 3; - optional string schemename = 4; - - optional DataInfo dataInfo = 5; -} - -message DataInfo { - - optional bool invisible = 6 [default = false]; - optional bool inferred = 1; - optional bool deletedbyinference = 2; - optional string trust = 3; - optional string inferenceprovenance = 4; - - required Qualifier provenanceaction = 5; -} - -message OAIProvenance { - - optional OriginDescription originDescription = 1; - - message OriginDescription { - - optional string harvestDate = 1; - optional bool altered = 2 [default = true]; - - optional string baseURL = 3; - optional string identifier = 4; - optional string datestamp = 5; - optional string metadataNamespace = 6; - - optional OriginDescription originDescription = 7; - } -} - -message ExtraInfo { - - required string name = 1; - required string typology = 2; - required string provenance = 3; - optional string trust = 4; - - // json containing a Citation or Statistics - optional string value = 5; - -} - -message Author { - - required string fullname = 1; - - optional string name = 2; - optional string surname = 3; - - required int32 rank = 4; - - repeated KeyValue pid = 5; - repeated StringField affiliation = 6; -} diff --git a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Kind.proto b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Kind.proto deleted file mode 100644 index a1bf26740..000000000 --- a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Kind.proto +++ /dev/null @@ -1,9 +0,0 @@ -package eu.dnetlib.data.proto; - -option java_package = "eu.dnetlib.data.proto"; -option java_outer_classname = "KindProtos"; - -enum Kind { - entity = 1; - relation = 2; -} diff --git a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/OafParent.proto b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/OafParent.proto deleted file mode 100644 index a5e2793a7..000000000 --- a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/OafParent.proto +++ /dev/null @@ -1,97 +0,0 @@ -package eu.dnetlib.data.proto; - -import "Kind.proto"; -import "FieldType.proto"; - -// for Oafentity -import "Type.proto"; -import "Datasource.proto"; -import "Organization.proto"; -import "Project.proto"; -import "Result.proto"; - -import "Person.proto"; - -// for OafRel -import "RelType.proto"; -import "Datasource_Organization.proto"; -import "Project_Organization.proto"; -import "Result_Organization.proto"; -import "Result_Project.proto"; -import "Result_Result.proto"; -import "Organization_Organization.proto"; - -option java_package = "eu.dnetlib.data.proto"; -option java_outer_classname = "OafProtos"; - -message Oaf { - required Kind kind = 1; - - optional OafEntity entity = 2; - optional OafRel rel = 3; - - optional DataInfo dataInfo = 4; - - // used to mark the last update time of this object - optional sfixed64 lastupdatetimestamp = 5; -} - -message OafEntity { - required Type type = 1; - required string id = 12; - - repeated string originalId = 8; - repeated KeyValue collectedfrom = 9; - - repeated StructuredProperty pid = 10; - optional string dateofcollection = 11; - optional string dateoftransformation = 13; - - /* Any relation that we want to bundle together with this entity. - It's intended to be used only in temporary values in map/red jobs (sequence files, ...) - and never persisted values stored in HBase. */ - repeated OafRel cachedRel = 2; - repeated Oaf cachedOafRel = 18; - - optional Datasource datasource = 3; - optional Organization organization = 4; - optional Project project = 6; - optional Result result = 7; - - optional Person person = 5; - - repeated OafEntity children = 16; - - repeated ExtraInfo extraInfo = 15; - - optional OAIProvenance oaiprovenance = 17; -} - - -message OafRel { - required RelType relType = 1; - required SubRelType subRelType = 19; - required string relClass = 20; // one among the SubRel names, e.g. Provision.RelName.isProvidedBy - - required string source = 2; - required string target = 3; - - /* if true then is a "child" */ - required bool child = 4; - - optional OafEntity cachedTarget = 5; - - // needed to have more information that is not included in cachedTarget. - optional Oaf cachedOafTarget = 8; - - // Datamodel rels - optional DatasourceOrganization datasourceOrganization = 6; - optional ProjectOrganization projectOrganization = 9; - optional ResultOrganization resultOrganization = 10; - optional ResultProject resultProject = 11; - optional ResultResult resultResult = 16; - optional OrganizationOrganization organizationOrganization = 17; - - repeated KeyValue collectedfrom = 21; - -} diff --git a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Organization.proto b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Organization.proto deleted file mode 100644 index 088f14d33..000000000 --- a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Organization.proto +++ /dev/null @@ -1,33 +0,0 @@ -package eu.dnetlib.data.proto; - -import "FieldType.proto"; - -option java_package = "eu.dnetlib.data.proto"; -option java_outer_classname = "OrganizationProtos"; - -message Organization { - - optional Metadata metadata = 2; - - message Metadata { - optional StringField legalshortname = 1; - optional StringField legalname = 2; - repeated StringField alternativeNames = 17; - optional StringField websiteurl = 3; - optional StringField logourl = 4; - optional StringField eclegalbody = 5; - optional StringField eclegalperson = 6; - optional StringField ecnonprofit = 7; - optional StringField ecresearchorganization = 8; - optional StringField echighereducation = 9; - optional StringField ecinternationalorganizationeurinterests = 10; - optional StringField ecinternationalorganization = 11; - optional StringField ecenterprise = 12; - optional StringField ecsmevalidated = 13; - optional StringField ecnutscode = 14; - - optional Qualifier country = 16; - - } - -} diff --git a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Organization_Organization.proto b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Organization_Organization.proto deleted file mode 100644 index 48c7cc1d8..000000000 --- a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Organization_Organization.proto +++ /dev/null @@ -1,15 +0,0 @@ -package eu.dnetlib.data.proto; - -import "RelMetadata.proto"; -import "Dedup.proto"; -import "DedupSimilarity.proto"; - -option java_package = "eu.dnetlib.data.proto"; -option java_outer_classname = "OrganizationOrganizationProtos"; - -message OrganizationOrganization { - - optional Dedup dedup = 1; - optional DedupSimilarity dedupSimilarity = 2; - -} \ No newline at end of file diff --git a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Person.proto b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Person.proto deleted file mode 100644 index 3e6e915aa..000000000 --- a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Person.proto +++ /dev/null @@ -1,25 +0,0 @@ -package eu.dnetlib.data.proto; - -import "FieldType.proto"; - -option java_package = "eu.dnetlib.data.proto"; -option java_outer_classname = "PersonProtos"; - -message Person { - - optional Metadata metadata = 2; - - message Metadata { - required string fullname = 1; - optional string firstname = 2; - optional string lastname = 3; - required string pubID = 4; - optional string pubDOI = 5; - optional string orcid = 6; - required int32 rank = 7; - - repeated string coauthors = 8; - repeated double topics = 9; - required string area = 10; - } -} \ No newline at end of file diff --git a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Project.proto b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Project.proto deleted file mode 100644 index b1f44bb09..000000000 --- a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Project.proto +++ /dev/null @@ -1,42 +0,0 @@ -package eu.dnetlib.data.proto; - -import "FieldType.proto"; - -option java_package = "eu.dnetlib.data.proto"; -option java_outer_classname = "ProjectProtos"; - -message Project { - - optional Metadata metadata = 2; - - message Metadata { - - optional StringField websiteurl = 1; - optional StringField code = 2; - optional StringField acronym = 3; - optional StringField title = 4; - optional StringField startdate = 5; - optional StringField enddate = 6; - optional StringField callidentifier = 7; - optional StringField keywords = 8; - optional StringField duration = 9; - optional StringField ecsc39 = 10; - optional StringField oamandatepublications = 11; - optional StringField ecarticle29_3 = 12; - repeated StructuredProperty subjects = 14; - - repeated StringField fundingtree = 15; - - optional Qualifier contracttype = 13; - - optional StringField optional1 = 16; - optional StringField optional2 = 17; - optional StringField jsonextrainfo = 18; - - optional StringField contactfullname = 19; - optional StringField contactfax = 20; - optional StringField contactphone = 21; - optional StringField contactemail = 22; - } - -} diff --git a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Project_Organization.proto b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Project_Organization.proto deleted file mode 100644 index 7d1a76e7f..000000000 --- a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Project_Organization.proto +++ /dev/null @@ -1,23 +0,0 @@ -package eu.dnetlib.data.proto; - -import "RelMetadata.proto"; - -option java_package = "eu.dnetlib.data.proto"; -option java_outer_classname = "ProjectOrganizationProtos"; - -message ProjectOrganization { - - optional Participation participation = 1; - - message Participation { - - enum RelName { - isParticipant = 1; - hasParticipant = 2; - } - - required RelMetadata relMetadata = 1; - optional string participantnumber = 2; - } - -} \ No newline at end of file diff --git a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/RelMetadata.proto b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/RelMetadata.proto deleted file mode 100644 index 46bbef060..000000000 --- a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/RelMetadata.proto +++ /dev/null @@ -1,15 +0,0 @@ -package eu.dnetlib.data.proto; - -import "FieldType.proto"; - -option java_package = "eu.dnetlib.data.proto"; -option java_outer_classname = "RelMetadataProtos"; - -message RelMetadata { - - optional Qualifier semantics = 1; - - optional string startdate = 3; - optional string enddate = 4; - -} \ No newline at end of file diff --git a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/RelType.proto b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/RelType.proto deleted file mode 100644 index 0d020ef78..000000000 --- a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/RelType.proto +++ /dev/null @@ -1,36 +0,0 @@ -package eu.dnetlib.data.proto; - -option java_package = "eu.dnetlib.data.proto"; -option java_outer_classname = "RelTypeProtos"; - -enum RelType { - - // Datamodel rels - datasourceOrganization = 1; - projectOrganization = 4; - resultOrganization = 5; - resultProject = 6; - resultResult = 9; - organizationOrganization = 11; - -} - -enum SubRelType { - - provision = 1; // datasourceOrganization - participation = 4; // projectOrganization - outcome = 6; // resultProject - similarity = 8; // resultResult - publicationDataset = 9; // resultResult - affiliation = 12; // resultOrganizaiton - - dedup = 10; // resultResult | organizationOrganization - dedupSimilarity = 11; // resultResult | organizationOrganization - - supplement = 13; // resultResult - part = 15; // resultResult - - version = 16; // resultResult - - relationship = 17; // catch all -} diff --git a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Result.proto b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Result.proto deleted file mode 100644 index e015ecdc9..000000000 --- a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Result.proto +++ /dev/null @@ -1,128 +0,0 @@ -package eu.dnetlib.data.proto; - -import "FieldType.proto"; - -option java_package = "eu.dnetlib.data.proto"; -option java_outer_classname = "ResultProtos"; - -message Result { - - optional Metadata metadata = 2; - - repeated Instance instance = 6; - - repeated ExternalReference externalReference = 7; - - message Metadata { - - repeated Author author = 40; - - // resulttype allows subclassing results into publications | datasets | software - optional Qualifier resulttype = 8; - - // common fields - optional Qualifier language = 12; - repeated Qualifier country = 33; - - repeated StructuredProperty subject = 1; - repeated StructuredProperty title = 2; - repeated StructuredProperty relevantdate = 3; - - repeated StringField description = 25; - optional StringField dateofacceptance = 4; - optional StringField publisher = 5; - optional StringField embargoenddate = 6; - repeated StringField source = 27; - repeated StringField fulltext = 29; // remove candidate - repeated StringField format = 21; - repeated StringField contributor = 30; - optional Qualifier resourcetype = 19; - repeated StringField coverage = 43; - - repeated Context context = 28; - - // publication specific - optional Journal journal = 18; - - // dataset specific - optional StringField storagedate = 9; - optional StringField device = 26; - optional StringField size = 20; - optional StringField version = 22; - optional StringField lastmetadataupdate = 23; - optional StringField metadataversionnumber = 24; - repeated GeoLocation geolocation = 44; - - // software specific - repeated StringField documentationUrl = 35; - repeated StructuredProperty license = 36; - optional StringField codeRepositoryUrl = 38; - optional Qualifier programmingLanguage = 39; - - // other research products specifics - repeated StringField contactperson = 45; - repeated StringField contactgroup = 41; - repeated StringField tool = 42; - - } - - message Journal { - optional string name = 1; - optional string issnPrinted = 2; - optional string issnOnline = 3; - optional string issnLinking = 4; - - optional string ep = 6; - optional string iss = 7; - optional string sp = 8; - optional string vol = 9; - - optional string edition = 10; - optional string conferenceplace = 11; - optional string conferencedate = 12; - - optional DataInfo dataInfo = 5; - } - - // - message Context { - required string id = 1; - repeated DataInfo dataInfo = 2; - } - - message Instance { - - optional StringField license = 6; - optional Qualifier accessright = 3; - optional Qualifier instancetype = 4; - - optional KeyValue hostedby = 5; - repeated string url = 9; - - // other research products specific - optional string distributionlocation = 12; - - optional KeyValue collectedfrom = 10; - optional StringField dateofacceptance = 11; - } - - message ExternalReference { - - optional string sitename = 1; // source - optional string label = 2; // title - optional string url = 3; // text() - optional string description = 4; // ?? not mapped yet ?? - optional Qualifier qualifier = 5; // type - optional string refidentifier = 6; // site internal identifier - optional string query = 7; // maps the oaf:reference/@query attribute - optional DataInfo dataInfo = 8; // ExternalReferences might be also inferred - } - - message GeoLocation { - - optional string point = 1; - optional string box = 2; - optional string place = 3; - } - -} diff --git a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Result_Organization.proto b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Result_Organization.proto deleted file mode 100644 index 974cc0702..000000000 --- a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Result_Organization.proto +++ /dev/null @@ -1,23 +0,0 @@ -package eu.dnetlib.data.proto; - -import "RelMetadata.proto"; - -option java_package = "eu.dnetlib.data.proto"; -option java_outer_classname = "ResultOrganizationProtos"; - -message ResultOrganization { - - optional Affiliation affiliation = 1; - - message Affiliation { - - enum RelName { - isAuthorInstitutionOf = 1; // Organization --> Result - hasAuthorInstitution = 2; // Result --> Organization - } - - required RelMetadata relMetadata = 1; - - } - -} diff --git a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Result_Project.proto b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Result_Project.proto deleted file mode 100644 index cb76666d4..000000000 --- a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Result_Project.proto +++ /dev/null @@ -1,23 +0,0 @@ -package eu.dnetlib.data.proto; - -import "RelMetadata.proto"; - -option java_package = "eu.dnetlib.data.proto"; -option java_outer_classname = "ResultProjectProtos"; - -message ResultProject { - - optional Outcome outcome = 1; - - message Outcome { - - enum RelName { - isProducedBy = 1; - produces = 2; - } - - required RelMetadata relMetadata = 1; - - } - -} diff --git a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Result_Result.proto b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Result_Result.proto deleted file mode 100644 index d0166a45a..000000000 --- a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Result_Result.proto +++ /dev/null @@ -1,94 +0,0 @@ -package eu.dnetlib.data.proto; - -import "RelMetadata.proto"; -import "Dedup.proto"; -import "DedupSimilarity.proto"; - -option java_package = "eu.dnetlib.data.proto"; -option java_outer_classname = "ResultResultProtos"; - -message ResultResult { - - //choice of the possible subtypes - optional Similarity similarity = 2; - optional PublicationDataset publicationDataset = 3; - optional Dedup dedup = 4; - optional DedupSimilarity dedupSimilarity = 5; - - optional Supplement supplement = 6; - optional Part part = 7; - - optional Relationship relationship = 8; - - optional SoftwareSoftware softwareSoftware = 9; - - message Similarity { - - enum RelName { - isAmongTopNSimilarDocuments = 1; - hasAmongTopNSimilarDocuments = 2; - } - - required RelMetadata relMetadata = 1; - - // level of similarity: coefficient from [0, 1] range, - // the greater the number, the more similar the documents - optional float similarity = 2; - - enum Type { - STANDARD = 1; - WEBUSAGE = 2; - } - - // similarity type - optional Type type = 3 [default = STANDARD]; - } - - message PublicationDataset { - - enum RelName { - isRelatedTo = 1; - } - - required RelMetadata relMetadata = 1; - } - - message Supplement { - - enum RelName { - isSupplementTo = 1; - isSupplementedBy = 2; - } - - required RelMetadata relMetadata = 1; - } - - message Part { - - enum RelName { - isPartOf = 1; - hasPart = 2; - } - - required RelMetadata relMetadata = 1; - } - - message SoftwareSoftware { - - enum RelName { - isVersionOf = 1; - } - - required RelMetadata relMetadata = 1; - } - - message Relationship { - - enum RelName { - isRelatedTo = 1; - } - - required RelMetadata relMetadata = 1; - } - -} diff --git a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/SpecialTrust.proto b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/SpecialTrust.proto deleted file mode 100644 index 2e5b2d4f6..000000000 --- a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/SpecialTrust.proto +++ /dev/null @@ -1,9 +0,0 @@ -package eu.dnetlib.data.proto; - -option java_package = "eu.dnetlib.data.proto"; -option java_outer_classname = "SpecialTrustProtos"; - -enum SpecialTrust { - INFINITE = 1; - NEUTRAL = 2; -} \ No newline at end of file diff --git a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Type.proto b/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Type.proto deleted file mode 100644 index e01995c0e..000000000 --- a/dnet-openaire-data-protos/src/main/resources/eu/dnetlib/data/proto/Type.proto +++ /dev/null @@ -1,13 +0,0 @@ -package eu.dnetlib.data.proto; - -option java_package = "eu.dnetlib.data.proto"; -option java_outer_classname = "TypeProtos"; - -// entity tags are used as rowkey prefixes on hbase -enum Type { - datasource = 10; - organization = 20; - person = 30; - project = 40; - result = 50; -} From a5c5d2f01bf403176d941f444c334fff36fcb84f Mon Sep 17 00:00:00 2001 From: miconis Date: Fri, 9 Aug 2019 10:08:34 +0200 Subject: [PATCH 088/449] implementation of the decision tree. It takes place of the distance algos, necessaryConditions and sufficientConditions are still there. The model contains only path, type and name of the field. ignoreMissing is still in the model because it is used by the conditions. --- .../pace/condition/AbstractCondition.java | 2 +- .../dnetlib/pace/condition/ConditionAlgo.java | 2 +- .../java/eu/dnetlib/pace/config/Config.java | 12 +- .../eu/dnetlib/pace/config/DedupConfig.java | 10 +- .../eu/dnetlib/pace/config/PaceConfig.java | 36 ++-- .../pace/distance/AbstractDistance.java | 30 ++-- .../eu/dnetlib/pace/distance/Distance.java | 3 +- .../dnetlib/pace/distance/DistanceAlgo.java | 2 +- .../dnetlib/pace/distance/DistanceScorer.java | 126 -------------- .../pace/distance/PaceDocumentDistance.java | 24 +-- .../pace/distance/PairwiseComparison.java | 125 ++++++++++++++ .../distance/SecondStringDistanceAlgo.java | 6 +- .../pace/distance/algo/LevensteinTitle.java | 1 - .../algo/LevensteinTitleIgnoreVersion.java | 2 +- .../pace/distance/algo/NullDistanceAlgo.java | 2 +- .../pace/distance/algo/SortedJaroWinkler.java | 4 +- .../algo/SortedLevel2JaroWinkler.java | 4 +- .../algo/SortedSecondStringDistanceAlgo.java | 6 +- .../distance/algo/SubStringLevenstein.java | 6 +- .../pace/distance/eval/DistanceEvalMap.java | 32 ---- .../pace/distance/eval/ScoreResult.java | 62 ------- .../java/eu/dnetlib/pace/model/FieldDef.java | 53 ++---- .../eu/dnetlib/pace/tree/AlwaysMatch.java | 42 +++++ .../java/eu/dnetlib/pace/tree/ExactMatch.java | 38 +++++ .../eu/dnetlib/pace/tree/JaroWinkler.java | 46 +++++ .../pace/tree/JaroWinklerNormalizedName.java | 78 +++++++++ .../dnetlib/pace/tree/JaroWinklerTitle.java | 46 +++++ .../dnetlib/pace/tree/Level2JaroWinkler.java | 36 ++++ .../pace/tree/Level2JaroWinklerTitle.java | 51 ++++++ .../dnetlib/pace/tree/Level2Levenstein.java | 36 ++++ .../java/eu/dnetlib/pace/tree/Levenstein.java | 36 ++++ .../eu/dnetlib/pace/tree/LevensteinTitle.java | 59 +++++++ .../tree/LevensteinTitleIgnoreVersion.java | 60 +++++++ .../eu/dnetlib/pace/tree/MustBeDifferent.java | 41 +++++ .../dnetlib/pace/tree/NullDistanceAlgo.java | 25 +++ .../dnetlib/pace/tree/SortedJaroWinkler.java | 63 +++++++ .../pace/tree/SortedLevel2JaroWinkler.java | 63 +++++++ .../pace/tree/SubStringLevenstein.java | 99 +++++++++++ .../java/eu/dnetlib/pace/tree/UrlMatcher.java | 60 +++++++ .../pace/tree/support/AbstractComparator.java | 110 ++++++++++++ .../support/AbstractSortedComparator.java | 38 +++++ .../eu/dnetlib/pace/tree/support/AggType.java | 22 +++ .../dnetlib/pace/tree/support/Comparator.java | 9 + .../pace/tree/support/ComparatorClass.java | 13 ++ .../{model => tree/support}/FieldConf.java | 15 +- .../dnetlib/pace/tree/support/MatchType.java | 18 ++ .../pace/tree/support/TreeNodeDef.java | 157 ++++++++++++++++++ .../eu/dnetlib/pace/util/BlockProcessor.java | 33 ++-- .../eu/dnetlib/pace/util/DiffPatchMatch.java | 4 +- .../eu/dnetlib/pace/util/PaceResolver.java | 18 +- .../eu/dnetlib/pace/config/dedupConfig.st | 4 +- .../eu/dnetlib/pace/config/org.curr.conf | 4 +- 52 files changed, 1517 insertions(+), 357 deletions(-) delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceScorer.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/PairwiseComparison.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/DistanceEvalMap.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/ScoreResult.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AlwaysMatch.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatch.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinkler.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerNormalizedName.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerTitle.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinkler.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinklerTitle.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2Levenstein.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Levenstein.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitle.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitleIgnoreVersion.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/MustBeDifferent.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/NullDistanceAlgo.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SortedJaroWinkler.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SortedLevel2JaroWinkler.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SubStringLevenstein.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/UrlMatcher.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractComparator.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractSortedComparator.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AggType.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/Comparator.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/ComparatorClass.java rename dnet-pace-core/src/main/java/eu/dnetlib/pace/{model => tree/support}/FieldConf.java (81%) create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/MatchType.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/AbstractCondition.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/AbstractCondition.java index 2b4aa29a1..5c7b4d130 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/AbstractCondition.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/AbstractCondition.java @@ -9,7 +9,7 @@ import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.model.FieldDef; /** - * Abstract conditions needs a list of field names. + * Abstract necessaryConditions needs a list of field names. * * @author claudio * diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ConditionAlgo.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ConditionAlgo.java index 787ad9af1..1ea9caa16 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ConditionAlgo.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ConditionAlgo.java @@ -6,7 +6,7 @@ import eu.dnetlib.pace.model.Document; import eu.dnetlib.pace.model.FieldDef; /** - * Allows to express general conditions to be satisfied or not between two Documents. + * Allows to express general necessaryConditions to be satisfied or not between two Documents. * * @author claudio */ diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Config.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Config.java index 7498c23cf..1a12e699f 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Config.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Config.java @@ -6,6 +6,7 @@ import java.util.Map; import eu.dnetlib.pace.condition.ConditionAlgo; import eu.dnetlib.pace.model.ClusteringDef; import eu.dnetlib.pace.model.FieldDef; +import eu.dnetlib.pace.tree.support.TreeNodeDef; /** * Interface for PACE configuration bean. @@ -21,6 +22,9 @@ public interface Config { */ public List model(); + + public Map decisionTree(); + /** * Field configuration definitions. * @@ -31,16 +35,16 @@ public interface Config { /** * Strict Pre-Condition definitions. * - * @return the list of conditions + * @return the list of necessaryConditions */ - public List strictConditions(); + public List sufficientConditions(); /** * Pre-Condition definitions. * - * @return the list of conditions + * @return the list of necessaryConditions */ - public List conditions(); + public List necessaryConditions(); /** * Clusterings. diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java index 1cfcb089c..805f5c38e 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java @@ -8,6 +8,7 @@ import java.util.Map; import java.util.Map.Entry; import java.util.function.BiFunction; +import eu.dnetlib.pace.tree.support.TreeNodeDef; import eu.dnetlib.pace.util.PaceException; import org.antlr.stringtemplate.StringTemplate; import org.apache.commons.io.IOUtils; @@ -114,6 +115,11 @@ public class DedupConfig implements Config, Serializable { } } + @Override + public Map decisionTree(){ + return getPace().getDecisionTree(); + } + @Override public List model() { return getPace().getModel(); @@ -125,12 +131,12 @@ public class DedupConfig implements Config, Serializable { } @Override - public List strictConditions() { + public List sufficientConditions() { return getPace().getStrictConditionAlgos(); } @Override - public List conditions() { + public List necessaryConditions() { return getPace().getConditionAlgos(); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java index 4fde1dee9..d90cfe381 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java @@ -6,6 +6,7 @@ import eu.dnetlib.pace.condition.ConditionAlgo; import eu.dnetlib.pace.model.ClusteringDef; import eu.dnetlib.pace.model.CondDef; import eu.dnetlib.pace.model.FieldDef; +import eu.dnetlib.pace.tree.support.TreeNodeDef; import eu.dnetlib.pace.util.PaceResolver; import org.apache.commons.collections.CollectionUtils; import org.codehaus.jackson.annotate.JsonIgnore; @@ -18,9 +19,12 @@ import java.util.stream.Collectors; public class PaceConfig implements Serializable { private List model; - private List strictConditions; - private List conditions; + + private List sufficientConditions; + private List necessaryConditions; private List clustering; + private Map decisionTree; + private Map> blacklists; @JsonIgnore @@ -46,30 +50,30 @@ public class PaceConfig implements Serializable { this.model = model; } - public List getStrictConditions() { - return strictConditions; + public List getSufficientConditions() { + return sufficientConditions; } - public void setStrictConditions(final List strictConditions) { - this.strictConditions = strictConditions; + public void setSufficientConditions(final List sufficientConditions) { + this.sufficientConditions = sufficientConditions; } - public List getConditions() { - return conditions; + public List getNecessaryConditions() { + return necessaryConditions; } @JsonIgnore public List getConditionAlgos() { - return asConditionAlgos(getConditions()); + return asConditionAlgos(getNecessaryConditions()); } @JsonIgnore public List getStrictConditionAlgos() { - return asConditionAlgos(getStrictConditions()); + return asConditionAlgos(getSufficientConditions()); } - public void setConditions(final List conditions) { - this.conditions = conditions; + public void setNecessaryConditions(final List necessaryConditions) { + this.necessaryConditions = necessaryConditions; } public List getClustering() { @@ -80,6 +84,14 @@ public class PaceConfig implements Serializable { this.clustering = clustering; } + public Map getDecisionTree() { + return decisionTree; + } + + public void setDecisionTree(Map decisionTree) { + this.decisionTree = decisionTree; + } + public Map> getBlacklists() { return blacklists; } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/AbstractDistance.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/AbstractDistance.java index f9d189ff6..3304f3638 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/AbstractDistance.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/AbstractDistance.java @@ -1,15 +1,15 @@ -package eu.dnetlib.pace.distance; - -import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.distance.eval.ScoreResult; -import eu.dnetlib.pace.model.Document; - -public abstract class AbstractDistance
implements Distance { - - protected abstract Document toDocument(A a); - - @Override - public ScoreResult between(final A a, final A b, final Config config) { - return new DistanceScorer(config).distance(toDocument(a), toDocument(b)); - } -} +//package eu.dnetlib.pace.distance; +// +//import eu.dnetlib.pace.config.Config; +//import eu.dnetlib.pace.distance.eval.ScoreResult; +//import eu.dnetlib.pace.model.Document; +// +//public abstract class AbstractDistance implements Distance { +// +// protected abstract Document toDocument(A a); +// +// @Override +// public boolean between(final A a, final A b, final Config config) { +// return new PairwiseComparison(config).compare(toDocument(a), toDocument(b)); +// } +//} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/Distance.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/Distance.java index 93a6e757a..b812bd1d9 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/Distance.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/Distance.java @@ -1,9 +1,8 @@ package eu.dnetlib.pace.distance; import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.distance.eval.ScoreResult; public interface Distance { - public ScoreResult between(A a, A b, Config config); + public boolean between(A a, A b, Config config); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceAlgo.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceAlgo.java index 5e4f69f51..80b2191cc 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceAlgo.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceAlgo.java @@ -5,7 +5,7 @@ import eu.dnetlib.pace.model.Field; import java.util.Map; /** - * Each field is configured with a distance algo which knows how to compute the distance (0-1) between the fields of two + * Each field is configured with a compare algo which knows how to compute the compare (0-1) between the fields of two * objects. */ public interface DistanceAlgo { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceScorer.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceScorer.java deleted file mode 100644 index bb3c37ed6..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceScorer.java +++ /dev/null @@ -1,126 +0,0 @@ -package eu.dnetlib.pace.distance; - -import eu.dnetlib.pace.condition.ConditionAlgo; -import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.distance.eval.ConditionEvalMap; -import eu.dnetlib.pace.distance.eval.DistanceEval; -import eu.dnetlib.pace.distance.eval.DistanceEvalMap; -import eu.dnetlib.pace.distance.eval.ScoreResult; -import eu.dnetlib.pace.model.*; -import eu.dnetlib.pace.util.PaceException; -import org.apache.commons.lang.StringUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import java.util.Collection; -import java.util.List; -import java.util.stream.Collectors; - -/** - * The distance between two documents is given by the weighted mean of the field distances - */ -public class DistanceScorer { - - private static final Log log = LogFactory.getLog(DistanceScorer.class); - - private Config config; - - public DistanceScorer(final Config config) { - this.config = config; - } - - public ScoreResult distance(final Document a, final Document b) { - final ScoreResult sr = new ScoreResult(); //to keep track of the result of the comparison - - sr.setStrictConditions(verify(a, b, config.strictConditions())); - sr.setConditions(verify(a, b, config.conditions())); - - final DistanceEvalMap dMap = new DistanceEvalMap(sumWeights(config.model())); - - for (final FieldDef fd : config.model()) { - - dMap.updateDistance(fieldDistance(a, b, fd)); - } - sr.setDistances(dMap); - return sr; - } - - private ConditionEvalMap verify(final Document a, final Document b, final List conditions) { - final ConditionEvalMap res = new ConditionEvalMap(); - - for (final ConditionAlgo cd : conditions) { - final ConditionEvalMap map = cd.verify(a, b); - res.mergeFrom(map); - - // commented out shortcuts - /* - if (map.anyNegative()) { - return res; - } - */ - - //if (strict && (res < 0)) return -1; - //cond += verify; - } - return res; - } - - private DistanceEval fieldDistance(final Document a, final Document b, final FieldDef fd) { - - final double w = fd.getWeight(); - final Field va = getValue(a, fd); - final Field vb = getValue(b, fd); - - final DistanceEval de = new DistanceEval(fd, va, vb); - if ((w == 0)) return de; // optimization for 0 weight - else { - if (va.isEmpty() || vb.isEmpty()) { - if (fd.isIgnoreMissing()) { - de.setDistance(-1); - } else { - de.setDistance(w); - } - } else { - if (va.getType().equals(vb.getType())) { - de.setDistance(w * fd.distanceAlgo().distance(va, vb)); - } else { - throw new PaceException(String.format("Types are different: %s:%s - %s:%s", va, va.getType(), vb, vb.getType())); - } - } - return de; - } - } - - private Field getValue(final Document d, final FieldDef fd) { - final Field v = d.values(fd.getName()); - if (fd.getLength() > 0) { - - if (v instanceof FieldValueImpl) { - ((FieldValueImpl) v).setValue(StringUtils.substring(v.stringValue(), 0, fd.getLength())); - } else if (v instanceof FieldListImpl) { - List strings = ((FieldListImpl) v).stringList(); - strings = strings.stream() - .limit(fd.getSize() > 0 ? fd.getSize() : strings.size()) - .map(s -> StringUtils.substring(s, 0, fd.getLength())) - .collect(Collectors.toList()); - ((FieldListImpl) v).clear(); - ((FieldListImpl) v).addAll(strings.stream() - .limit(fd.getSize() > 0 ? fd.getSize() : strings.size()) - .map(s -> StringUtils.substring(s, 0, fd.getLength())) - .map(s -> new FieldValueImpl(v.getType(), v.getName(), s)) - .collect(Collectors.toList())); - } - } - - return v; - } - - private double sumWeights(final Collection fields) { - double sum = 0.0; - for (final FieldDef fd : fields) { - sum += fd.getWeight(); - } - return sum; - } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/PaceDocumentDistance.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/PaceDocumentDistance.java index 7651479ee..9c75bfcf8 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/PaceDocumentDistance.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/PaceDocumentDistance.java @@ -1,12 +1,12 @@ -package eu.dnetlib.pace.distance; - -import eu.dnetlib.pace.model.Document; - -public class PaceDocumentDistance extends AbstractDistance { - - @Override - protected Document toDocument(Document a) { - return a; - } - -} +//package eu.dnetlib.pace.distance; +// +//import eu.dnetlib.pace.model.Document; +// +//public class PaceDocumentDistance extends AbstractDistance { +// +// @Override +// protected Document toDocument(Document a) { +// return a; +// } +// +//} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/PairwiseComparison.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/PairwiseComparison.java new file mode 100644 index 000000000..125919d0f --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/PairwiseComparison.java @@ -0,0 +1,125 @@ +package eu.dnetlib.pace.distance; + +import eu.dnetlib.pace.condition.ConditionAlgo; +import eu.dnetlib.pace.config.Config; +import eu.dnetlib.pace.distance.eval.ConditionEvalMap; +import eu.dnetlib.pace.model.*; +import eu.dnetlib.pace.tree.support.MatchType; +import eu.dnetlib.pace.tree.support.TreeNodeDef; +import eu.dnetlib.pace.util.PaceException; +import eu.dnetlib.pace.util.Reporter; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.util.List; +import java.util.Map; + +/** + * The compare between two documents is given by the weighted mean of the field distances + */ +public class PairwiseComparison { + + private static final Log log = LogFactory.getLog(PairwiseComparison.class); + + private Config config; + + public PairwiseComparison(final Config config) { + this.config = config; + } + + public boolean compare(final MapDocument a, final MapDocument b) { + + //verify sufficientConditions + if (verify(a, b, config.sufficientConditions()).result() > 0) + return true; + + //verify necessaryConditions + if (verify(a, b, config.necessaryConditions()).result() < 0) + return false; + + //evaluate the decision tree + return evaluateTree(a, b, config.decisionTree()) == MatchType.MATCH; + } + + private ConditionEvalMap verify(final Document a, final Document b, final List conditions) { + final ConditionEvalMap res = new ConditionEvalMap(); + + for (final ConditionAlgo cd : conditions) { + final ConditionEvalMap map = cd.verify(a, b); + res.mergeFrom(map); + + // commented out shortcuts + /* + if (map.anyNegative()) { + return res; + } + */ + + //if (strict && (res < 0)) return -1; + //cond += verify; + } + return res; + } + + public MatchType evaluateTree(final MapDocument doc1, final MapDocument doc2, final Map decisionTree){ + + String current = "start"; + double similarity; + + while (MatchType.parse(current)==MatchType.UNDEFINED) { + + TreeNodeDef currentNode = decisionTree.get(current); + //throw an exception if the node doesn't exist + if (currentNode == null) + throw new PaceException("The Tree Node doesn't exist: " + current); + + similarity = currentNode.evaluate(doc1, doc2); + + if (similarity == -1) { + current = currentNode.getUndefined(); + } + else if (similarity>=currentNode.getThreshold()){ + current = currentNode.getPositive(); + } + else { + current = currentNode.getNegative(); + } + + } + + return MatchType.parse(current); + } + +// private Field getValue(final Document d, final FieldDef fd) { +// final Field v = d.values(fd.getName()); +// if (fd.getLength() > 0) { +// +// if (v instanceof FieldValueImpl) { +// ((FieldValueImpl) v).setValue(StringUtils.substring(v.stringValue(), 0, fd.getLength())); +// } else if (v instanceof FieldListImpl) { +// List strings = ((FieldListImpl) v).stringList(); +// strings = strings.stream() +// .limit(fd.getSize() > 0 ? fd.getSize() : strings.size()) +// .map(s -> StringUtils.substring(s, 0, fd.getLength())) +// .collect(Collectors.toList()); +// ((FieldListImpl) v).clear(); +// ((FieldListImpl) v).addAll(strings.stream() +// .limit(fd.getSize() > 0 ? fd.getSize() : strings.size()) +// .map(s -> StringUtils.substring(s, 0, fd.getLength())) +// .map(s -> new FieldValueImpl(v.getType(), v.getName(), s)) +// .collect(Collectors.toList())); +// } +// } +// +// return v; +// } +// +// private double sumWeights(final Collection fields) { +// double sum = 0.0; +// for (final FieldDef fd : fields) { +// sum += fd.getWeight(); +// } +// return sum; +// } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/SecondStringDistanceAlgo.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/SecondStringDistanceAlgo.java index 9cc35298f..d3ccccec5 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/SecondStringDistanceAlgo.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/SecondStringDistanceAlgo.java @@ -12,7 +12,7 @@ import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.model.FieldList; /** - * For the rest of the fields delegate the distance measure to the second string library. + * For the rest of the fields delegate the compare measure to the second string library. */ public abstract class SecondStringDistanceAlgo extends AbstractPaceFunctions implements DistanceAlgo { @@ -35,7 +35,7 @@ public abstract class SecondStringDistanceAlgo extends AbstractPaceFunctions imp } /** - * Instantiates a new second string distance algo. + * Instantiates a new second string compare algo. * * @param weight * the weight @@ -90,7 +90,7 @@ public abstract class SecondStringDistanceAlgo extends AbstractPaceFunctions imp /* * (non-Javadoc) * - * @see eu.dnetlib.pace.distance.DistanceAlgo#distance(eu.dnetlib.pace.model.Field, eu.dnetlib.pace.model.Field) + * @see eu.dnetlib.pace.compare.DistanceAlgo#compare(eu.dnetlib.pace.model.Field, eu.dnetlib.pace.model.Field) */ @Override public double distance(final Field a, final Field b) { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinTitle.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinTitle.java index 503dc33b2..ae0ef9d00 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinTitle.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinTitle.java @@ -2,7 +2,6 @@ package eu.dnetlib.pace.distance.algo; import com.wcohen.ss.AbstractStringDistance; import eu.dnetlib.pace.distance.DistanceClass; -import eu.dnetlib.pace.distance.DistanceScorer; import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinTitleIgnoreVersion.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinTitleIgnoreVersion.java index ff8b34bf3..6303f8e2a 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinTitleIgnoreVersion.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinTitleIgnoreVersion.java @@ -7,7 +7,7 @@ import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; import java.util.Map; /** - * Compared distance between two titles, ignoring version numbers. Suitable for Software entities. + * Compared compare between two titles, ignoring version numbers. Suitable for Software entities. */ @DistanceClass("LevensteinTitleIgnoreVersion") public class LevensteinTitleIgnoreVersion extends SecondStringDistanceAlgo { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/NullDistanceAlgo.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/NullDistanceAlgo.java index 8afc45fd6..c1b1d7223 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/NullDistanceAlgo.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/NullDistanceAlgo.java @@ -7,7 +7,7 @@ import eu.dnetlib.pace.model.Field; import java.util.Map; /** - * Not all fields of a document need to partecipate in the distance measure. We model those fields as having a + * Not all fields of a document need to partecipate in the compare measure. We model those fields as having a * NullDistanceAlgo. */ @DistanceClass("Null") diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedJaroWinkler.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedJaroWinkler.java index e3175a13e..d3aa58f99 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedJaroWinkler.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedJaroWinkler.java @@ -40,7 +40,7 @@ public class SortedJaroWinkler extends SortedSecondStringDistanceAlgo { /* * (non-Javadoc) * - * @see eu.dnetlib.pace.distance.DistanceAlgo#getWeight() + * @see eu.dnetlib.pace.compare.DistanceAlgo#getWeight() */ @Override public double getWeight() { @@ -50,7 +50,7 @@ public class SortedJaroWinkler extends SortedSecondStringDistanceAlgo { /* * (non-Javadoc) * - * @see eu.dnetlib.pace.distance.SecondStringDistanceAlgo#normalize(double) + * @see eu.dnetlib.pace.compare.SecondStringDistanceAlgo#normalize(double) */ @Override protected double normalize(final double d) { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedLevel2JaroWinkler.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedLevel2JaroWinkler.java index 1a12e1688..2523153ed 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedLevel2JaroWinkler.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedLevel2JaroWinkler.java @@ -40,7 +40,7 @@ public class SortedLevel2JaroWinkler extends SortedSecondStringDistanceAlgo { /* * (non-Javadoc) * - * @see eu.dnetlib.pace.distance.DistanceAlgo#getWeight() + * @see eu.dnetlib.pace.compare.DistanceAlgo#getWeight() */ @Override public double getWeight() { @@ -50,7 +50,7 @@ public class SortedLevel2JaroWinkler extends SortedSecondStringDistanceAlgo { /* * (non-Javadoc) * - * @see eu.dnetlib.pace.distance.SecondStringDistanceAlgo#normalize(double) + * @see eu.dnetlib.pace.compare.SecondStringDistanceAlgo#normalize(double) */ @Override protected double normalize(final double d) { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedSecondStringDistanceAlgo.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedSecondStringDistanceAlgo.java index 8a9c51402..f72750521 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedSecondStringDistanceAlgo.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedSecondStringDistanceAlgo.java @@ -12,12 +12,12 @@ import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.model.FieldList; /** - * For the rest of the fields delegate the distance measure to the second string library. + * For the rest of the fields delegate the compare measure to the second string library. */ public abstract class SortedSecondStringDistanceAlgo extends SecondStringDistanceAlgo { /** - * Instantiates a new sorted second string distance algo. + * Instantiates a new sorted second string compare algo. * * @param weight * the weight @@ -35,7 +35,7 @@ public abstract class SortedSecondStringDistanceAlgo extends SecondStringDistanc /* * (non-Javadoc) * - * @see eu.dnetlib.pace.distance.SecondStringDistanceAlgo#toList(eu.dnetlib.pace.model.Field) + * @see eu.dnetlib.pace.compare.SecondStringDistanceAlgo#toList(eu.dnetlib.pace.model.Field) */ @Override protected List toList(final Field list) { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SubStringLevenstein.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SubStringLevenstein.java index 8f0c024c7..b788fade4 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SubStringLevenstein.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SubStringLevenstein.java @@ -66,7 +66,7 @@ public class SubStringLevenstein extends SecondStringDistanceAlgo { /* * (non-Javadoc) * - * @see eu.dnetlib.pace.distance.SecondStringDistanceAlgo#distance(eu.dnetlib.pace.model.Field, eu.dnetlib.pace.model.Field) + * @see eu.dnetlib.pace.compare.SecondStringDistanceAlgo#compare(eu.dnetlib.pace.model.Field, eu.dnetlib.pace.model.Field) */ @Override public double distance(final Field a, final Field b) { @@ -79,7 +79,7 @@ public class SubStringLevenstein extends SecondStringDistanceAlgo { /* * (non-Javadoc) * - * @see eu.dnetlib.pace.distance.DistanceAlgo#getWeight() + * @see eu.dnetlib.pace.compare.DistanceAlgo#getWeight() */ @Override public double getWeight() { @@ -89,7 +89,7 @@ public class SubStringLevenstein extends SecondStringDistanceAlgo { /* * (non-Javadoc) * - * @see eu.dnetlib.pace.distance.SecondStringDistanceAlgo#normalize(double) + * @see eu.dnetlib.pace.compare.SecondStringDistanceAlgo#normalize(double) */ @Override protected double normalize(final double d) { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/DistanceEvalMap.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/DistanceEvalMap.java deleted file mode 100644 index 764e60354..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/DistanceEvalMap.java +++ /dev/null @@ -1,32 +0,0 @@ -package eu.dnetlib.pace.distance.eval; - -import java.util.HashMap; - -/** - * Created by claudio on 10/03/16. - */ -public class DistanceEvalMap extends HashMap { - - private double sumWeights; - - private double sumDistances = 0.0; - - public DistanceEvalMap(final double sumWeights) { - this.sumWeights = sumWeights; - } - - public void updateDistance(final DistanceEval d) { - - put(d.getFieldDef().getName(), d); - if (d.getDistance() >= 0) { - sumDistances += d.getDistance(); - } else { - sumWeights -= d.getFieldDef().getWeight(); - } - } - - public double distance() { - return sumWeights == 0 ? 0 : sumDistances / sumWeights; - } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/ScoreResult.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/ScoreResult.java deleted file mode 100644 index 62b7d85b4..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/ScoreResult.java +++ /dev/null @@ -1,62 +0,0 @@ -package eu.dnetlib.pace.distance.eval; - -import eu.dnetlib.pace.util.PaceException; -import org.codehaus.jackson.map.ObjectMapper; - -import java.io.IOException; -import java.io.Serializable; - -/** - * Created by claudio on 09/03/16. - */ -public class ScoreResult implements Serializable { - - private ConditionEvalMap strictConditions; - - private ConditionEvalMap conditions; - - private DistanceEvalMap distances; - - public double getScore() { - - if (getStrictConditions().result() > 0) return 1.0; - // if (getStrictConditions().result() < 0) return 0.0; - if (getConditions().result() < 0) return 0.0; - - return getDistances().distance(); - } - - - public ConditionEvalMap getStrictConditions() { - return strictConditions; - } - - public void setStrictConditions(final ConditionEvalMap strictConditions) { - this.strictConditions = strictConditions; - } - - public ConditionEvalMap getConditions() { - return conditions; - } - - public void setConditions(final ConditionEvalMap conditions) { - this.conditions = conditions; - } - - public DistanceEvalMap getDistances() { - return distances; - } - - public void setDistances(final DistanceEvalMap distances) { - this.distances = distances; - } - - @Override - public String toString() { - try { - return new ObjectMapper().writeValueAsString(this); - } catch (IOException e) { - throw new PaceException("unable to serialise " + this.getClass().getName(), e); - } - } -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java index 996471338..c76b63716 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java @@ -14,25 +14,29 @@ import java.util.List; import java.util.Map; /** - * The schema is composed by field definitions (FieldDef). Each field has a type, a name, and an associated distance algorithm. + * The schema is composed by field definitions (FieldDef). Each field has a type, a name, and an associated compare algorithm. */ public class FieldDef implements Serializable { public final static String PATH_SEPARATOR = "/"; - private String algo; - private String name; private String path; - private boolean ignoreMissing; - private Type type; - private boolean overrideMatch; + private boolean ignoreMissing; - private double weight; + public boolean isIgnoreMissing() { + return ignoreMissing; + } + + public void setIgnoreMissing(boolean ignoreMissing) { + this.ignoreMissing = ignoreMissing; + } + + private boolean overrideMatch; /** * Sets maximum size for the repeatable fields in the model. -1 for unbounded size. @@ -74,20 +78,6 @@ public class FieldDef implements Serializable { return Lists.newArrayList(Splitter.on(PATH_SEPARATOR).split(getPath())); } - public DistanceAlgo distanceAlgo() { - - if (params == null) { - params = new HashMap<>(); - } - - params.put("weight", getWeight()); - return PaceConfig.resolver.getDistanceAlgo(getAlgo(), params); - } - - public boolean isIgnoreMissing() { - return ignoreMissing; - } - public Type getType() { return type; } @@ -104,23 +94,6 @@ public class FieldDef implements Serializable { this.overrideMatch = overrideMatch; } - public double getWeight() { - return weight; - } - - public void setWeight(final double weight) { - this.weight = weight; - } - - public String getAlgo() { - return algo; - } - - public void setAlgo(final String algo) { - this.algo = algo; - } - - public int getSize() { return size; } @@ -153,10 +126,6 @@ public class FieldDef implements Serializable { this.path = path; } - public void setIgnoreMissing(boolean ignoreMissing) { - this.ignoreMissing = ignoreMissing; - } - @Override public String toString() { return new Gson().toJson(this); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AlwaysMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AlwaysMatch.java new file mode 100644 index 000000000..7e4b18788 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AlwaysMatch.java @@ -0,0 +1,42 @@ +package eu.dnetlib.pace.tree; + +import com.wcohen.ss.AbstractStringDistance; +import eu.dnetlib.pace.distance.DistanceClass; +import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; +import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.ComparatorClass; + +import java.util.Map; + +@ComparatorClass("alwaysMatch") +public class AlwaysMatch extends AbstractComparator { + + public AlwaysMatch(final Map params){ + super(params, new com.wcohen.ss.JaroWinkler()); + } + + public AlwaysMatch(final double weight) { + super(weight, new com.wcohen.ss.JaroWinkler()); + } + + protected AlwaysMatch(final double weight, final AbstractStringDistance ssalgo) { + super(weight, ssalgo); + } + + @Override + public double distance(final String a, final String b) { + return 1.0; + } + + @Override + public double getWeight() { + return super.weight; + } + + @Override + protected double normalize(final double d) { + return d; + } + +} + diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatch.java new file mode 100644 index 000000000..5a844de60 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatch.java @@ -0,0 +1,38 @@ +package eu.dnetlib.pace.tree; + +import com.wcohen.ss.AbstractStringDistance; +import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.ComparatorClass; + +import java.util.Map; + +@ComparatorClass("exactMatch") +public class ExactMatch extends AbstractComparator { + + public ExactMatch(Map params){ + super(params, new com.wcohen.ss.JaroWinkler()); + } + + public ExactMatch(final double weight) { + super(weight, new com.wcohen.ss.JaroWinkler()); + } + + protected ExactMatch(final double weight, final AbstractStringDistance ssalgo) { + super(weight, ssalgo); + } + + @Override + public double distance(final String a, final String b) { + return a.equals(b) ? 1.0 : 0; + } + + @Override + public double getWeight() { + return super.weight; + } + + @Override + protected double normalize(final double d) { + return d; + } +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinkler.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinkler.java new file mode 100644 index 000000000..f2a696b47 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinkler.java @@ -0,0 +1,46 @@ +package eu.dnetlib.pace.tree; + +import com.wcohen.ss.AbstractStringDistance; +import eu.dnetlib.pace.distance.DistanceClass; +import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; +import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.ComparatorClass; + +import java.io.Serializable; +import java.util.Map; + +//case class JaroWinkler(w: Double) extends SecondStringDistanceAlgo(w, new com.wcohen.ss.JaroWinkler()) +@ComparatorClass("jaroWinkler") +public class JaroWinkler extends AbstractComparator { + + public JaroWinkler(Map params){ + super(params, new com.wcohen.ss.JaroWinkler()); + } + + public JaroWinkler(double weight) { + super(weight, new com.wcohen.ss.JaroWinkler()); + } + + protected JaroWinkler(double weight, AbstractStringDistance ssalgo) { + super(weight, ssalgo); + } + + @Override + public double distance(String a, String b) { + String ca = cleanup(a); + String cb = cleanup(b); + + return normalize(ssalgo.score(ca, cb)); + } + + @Override + public double getWeight() { + return super.weight; + } + + @Override + protected double normalize(double d) { + return d; + } + +} \ No newline at end of file diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerNormalizedName.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerNormalizedName.java new file mode 100644 index 000000000..b6b593de7 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerNormalizedName.java @@ -0,0 +1,78 @@ +package eu.dnetlib.pace.tree; + +import com.wcohen.ss.AbstractStringDistance; +import eu.dnetlib.pace.common.AbstractPaceFunctions; +import eu.dnetlib.pace.distance.DistanceClass; +import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; +import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.ComparatorClass; + +import java.util.Map; +import java.util.Set; + +@ComparatorClass("jaroWinklerNormalizedName") +public class JaroWinklerNormalizedName extends AbstractComparator { + + private Map params; + + public JaroWinklerNormalizedName(Map params){ + super(params, new com.wcohen.ss.JaroWinkler()); + this.params = params; + } + + public JaroWinklerNormalizedName(double weight) { + super(weight, new com.wcohen.ss.JaroWinkler()); + } + + protected JaroWinklerNormalizedName(double weight, AbstractStringDistance ssalgo) { + super(weight, ssalgo); + } + + @Override + public double distance(String a, String b) { + String ca = cleanup(a); + String cb = cleanup(b); + + ca = normalize(ca); + cb = normalize(cb); + + ca = filterAllStopWords(ca); + cb = filterAllStopWords(cb); + + Set keywords1 = getKeywords(ca, params.getOrDefault("windowSize", 4).intValue()); + Set keywords2 = getKeywords(cb, params.getOrDefault("windowSize", 4).intValue()); + + Set cities1 = getCities(ca, params.getOrDefault("windowSize", 4).intValue()); + Set cities2 = getCities(cb, params.getOrDefault("windowSize", 4).intValue()); + + if (sameCity(cities1,cities2)) { + + if (keywordsCompare(keywords1, keywords2)>params.getOrDefault("threshold", 0.5).doubleValue()) { + + ca = removeKeywords(ca, keywords1); + ca = removeKeywords(ca, cities1); + cb = removeKeywords(cb, keywords2); + cb = removeKeywords(cb, cities2); + + if (ca.isEmpty() && cb.isEmpty()) + return 1.0; + else + return normalize(ssalgo.score(ca,cb)); + + } + } + + return 0.0; + } + + @Override + public double getWeight() { + return super.weight; + } + + @Override + protected double normalize(double d) { + return d; + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerTitle.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerTitle.java new file mode 100644 index 000000000..99d7a8668 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerTitle.java @@ -0,0 +1,46 @@ +package eu.dnetlib.pace.tree; + +import com.wcohen.ss.AbstractStringDistance; +import eu.dnetlib.pace.distance.DistanceClass; +import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; +import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.ComparatorClass; + +import java.util.Map; + +//case class JaroWinkler(w: Double) extends SecondStringDistanceAlgo(w, new com.wcohen.ss.JaroWinkler()) +@ComparatorClass("jaroWinklerTitle") +public class JaroWinklerTitle extends AbstractComparator { + + public JaroWinklerTitle(Map params){ + super(params, new com.wcohen.ss.JaroWinkler()); + } + + public JaroWinklerTitle(double weight) { + super(weight, new com.wcohen.ss.JaroWinkler()); + } + + protected JaroWinklerTitle(double weight, AbstractStringDistance ssalgo) { + super(weight, ssalgo); + } + + @Override + public double distance(String a, String b) { + String ca = cleanup(a); + String cb = cleanup(b); + + boolean check = checkNumbers(ca, cb); + return check ? 0.5 : normalize(ssalgo.score(ca, cb)); + } + + @Override + public double getWeight() { + return super.weight; + } + + @Override + protected double normalize(double d) { + return d; + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinkler.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinkler.java new file mode 100644 index 000000000..d4d5b8f1e --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinkler.java @@ -0,0 +1,36 @@ +package eu.dnetlib.pace.tree; + +import com.wcohen.ss.AbstractStringDistance; +import eu.dnetlib.pace.distance.DistanceClass; +import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; +import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.ComparatorClass; + +import java.util.Map; + +@ComparatorClass("level2JaroWinkler") +public class Level2JaroWinkler extends AbstractComparator { + + public Level2JaroWinkler(Map params){ + super(params, new com.wcohen.ss.Level2JaroWinkler()); + } + + public Level2JaroWinkler(double w) { + super(w, new com.wcohen.ss.Level2JaroWinkler()); + } + + protected Level2JaroWinkler(double w, AbstractStringDistance ssalgo) { + super(w, ssalgo); + } + + @Override + public double getWeight() { + return super.weight; + } + + @Override + protected double normalize(double d) { + return d; + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinklerTitle.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinklerTitle.java new file mode 100644 index 000000000..41a38c1ee --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinklerTitle.java @@ -0,0 +1,51 @@ +package eu.dnetlib.pace.tree; + +import com.wcohen.ss.AbstractStringDistance; +import eu.dnetlib.pace.distance.DistanceClass; +import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; +import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.ComparatorClass; + +import java.util.Map; + +@ComparatorClass("level2JaroWinklerTitle") +public class Level2JaroWinklerTitle extends AbstractComparator { + + public Level2JaroWinklerTitle(Map params){ + super(params, new com.wcohen.ss.Level2JaroWinkler()); + } + + public Level2JaroWinklerTitle(final double w) { + super(w, new com.wcohen.ss.Level2JaroWinkler()); + } + + protected Level2JaroWinklerTitle(final double w, final AbstractStringDistance ssalgo) { + super(w, ssalgo); + } + + @Override + public double distance(final String a, final String b) { + final String ca = cleanup(a); + final String cb = cleanup(b); + + final boolean check = checkNumbers(ca, cb); + + if (check) return 0.5; + + final String cca = finalCleanup(ca); + final String ccb = finalCleanup(cb); + + return ssalgo.score(cca, ccb); + } + + @Override + public double getWeight() { + return super.weight; + } + + @Override + protected double normalize(final double d) { + return d; + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2Levenstein.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2Levenstein.java new file mode 100644 index 000000000..1a598ecbe --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2Levenstein.java @@ -0,0 +1,36 @@ +package eu.dnetlib.pace.tree; + +import com.wcohen.ss.AbstractStringDistance; +import eu.dnetlib.pace.distance.DistanceClass; +import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; +import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.ComparatorClass; + +import java.util.Map; + +@ComparatorClass("level2Levenstein") +public class Level2Levenstein extends AbstractComparator { + + public Level2Levenstein(Map params){ + super(params, new com.wcohen.ss.Level2Levenstein()); + } + + public Level2Levenstein(double w) { + super(w, new com.wcohen.ss.Level2Levenstein()); + } + + protected Level2Levenstein(double w, AbstractStringDistance ssalgo) { + super(w, ssalgo); + } + + @Override + public double getWeight() { + return super.weight; + } + + @Override + protected double normalize(double d) { + return 1 / Math.pow(Math.abs(d) + 1, 0.1); + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Levenstein.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Levenstein.java new file mode 100644 index 000000000..ada70fdc0 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Levenstein.java @@ -0,0 +1,36 @@ +package eu.dnetlib.pace.tree; + +import com.wcohen.ss.AbstractStringDistance; +import eu.dnetlib.pace.distance.DistanceClass; +import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; +import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.ComparatorClass; + +import java.util.Map; + +@ComparatorClass("levenstein") +public class Levenstein extends AbstractComparator { + + public Levenstein(Map params){ + super(params, new com.wcohen.ss.Levenstein()); + } + + public Levenstein(double w) { + super(w, new com.wcohen.ss.Levenstein()); + } + + protected Levenstein(double w, AbstractStringDistance ssalgo) { + super(w, ssalgo); + } + + @Override + public double getWeight() { + return super.weight; + } + + @Override + protected double normalize(double d) { + return 1 / Math.pow(Math.abs(d) + 1, 0.1); + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitle.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitle.java new file mode 100644 index 000000000..45459f4dc --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitle.java @@ -0,0 +1,59 @@ +package eu.dnetlib.pace.tree; + +import com.wcohen.ss.AbstractStringDistance; +import eu.dnetlib.pace.distance.DistanceClass; +import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; +import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.ComparatorClass; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.util.Map; + +@ComparatorClass("levensteinTitle") +public class LevensteinTitle extends AbstractComparator { + + private static final Log log = LogFactory.getLog(LevensteinTitle.class); + + public LevensteinTitle(Map params){ + super(params, new com.wcohen.ss.Levenstein()); + } + + public LevensteinTitle(final double w) { + super(w, new com.wcohen.ss.Levenstein()); + } + + protected LevensteinTitle(final double w, final AbstractStringDistance ssalgo) { + super(w, ssalgo); + } + + @Override + public double distance(final String a, final String b) { + final String ca = cleanup(a); + final String cb = cleanup(b); + + final boolean check = checkNumbers(ca, cb); + + if (check) return 0.5; + + final String cca = finalCleanup(ca); + final String ccb = finalCleanup(cb); + + return normalize(ssalgo.score(cca, ccb), cca.length(), ccb.length()); + } + + private double normalize(final double score, final int la, final int lb) { + return 1 - (Math.abs(score) / Math.max(la, lb)); + } + + @Override + public double getWeight() { + return super.weight; + } + + @Override + protected double normalize(final double d) { + return 1 / Math.pow(Math.abs(d) + 1, 0.1); + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitleIgnoreVersion.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitleIgnoreVersion.java new file mode 100644 index 000000000..342cee753 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitleIgnoreVersion.java @@ -0,0 +1,60 @@ +package eu.dnetlib.pace.tree; + +import com.wcohen.ss.AbstractStringDistance; +import eu.dnetlib.pace.distance.DistanceClass; +import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; +import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.ComparatorClass; + +import java.util.Map; + +/** + * Compared compare between two titles, ignoring version numbers. Suitable for Software entities. + */ +@ComparatorClass("levensteinTitleIgnoreVersion") +public class LevensteinTitleIgnoreVersion extends AbstractComparator { + + public LevensteinTitleIgnoreVersion(Map params){ + super(params, new com.wcohen.ss.Levenstein()); + } + + public LevensteinTitleIgnoreVersion(final double w) { + super(w, new com.wcohen.ss.Levenstein()); + } + + protected LevensteinTitleIgnoreVersion(final double w, final AbstractStringDistance ssalgo) { + super(w, ssalgo); + } + + @Override + public double distance(final String a, final String b) { + String ca = cleanup(a); + String cb = cleanup(b); + + ca = ca.replaceAll("\\d", "").replaceAll(getRomans(ca), "").trim(); + cb = cb.replaceAll("\\d", "").replaceAll(getRomans(cb), "").trim(); + + ca = filterAllStopWords(ca); + cb = filterAllStopWords(cb); + + final String cca = finalCleanup(ca); + final String ccb = finalCleanup(cb); + + return normalize(ssalgo.score(cca, ccb), cca.length(), ccb.length()); + } + + private double normalize(final double score, final int la, final int lb) { + return 1 - (Math.abs(score) / Math.max(la, lb)); + } + + @Override + public double getWeight() { + return super.weight; + } + + @Override + protected double normalize(final double d) { + return 1 / Math.pow(Math.abs(d) + 1, 0.1); + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/MustBeDifferent.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/MustBeDifferent.java new file mode 100644 index 000000000..d7251f18e --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/MustBeDifferent.java @@ -0,0 +1,41 @@ +package eu.dnetlib.pace.tree; + +import com.wcohen.ss.AbstractStringDistance; +import eu.dnetlib.pace.distance.DistanceClass; +import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; +import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.ComparatorClass; + +import java.util.Map; + +@ComparatorClass("mustBeDifferent") +public class MustBeDifferent extends AbstractComparator { + + public MustBeDifferent(Map params){ + super(params, new com.wcohen.ss.Levenstein()); + } + + public MustBeDifferent(final double weight) { + super(weight, new com.wcohen.ss.JaroWinkler()); + } + + protected MustBeDifferent(final double weight, final AbstractStringDistance ssalgo) { + super(weight, ssalgo); + } + + @Override + public double distance(final String a, final String b) { + return !a.equals(b) ? 1.0 : 0; + } + + @Override + public double getWeight() { + return super.weight; + } + + @Override + protected double normalize(final double d) { + return d; + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/NullDistanceAlgo.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/NullDistanceAlgo.java new file mode 100644 index 000000000..7c5c3f4ae --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/NullDistanceAlgo.java @@ -0,0 +1,25 @@ +package eu.dnetlib.pace.tree; + +import eu.dnetlib.pace.distance.DistanceAlgo; +import eu.dnetlib.pace.distance.DistanceClass; +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.tree.support.Comparator; +import eu.dnetlib.pace.tree.support.ComparatorClass; + +import java.util.Map; + +/** + * Not all fields of a document need to partecipate in the compare measure. We model those fields as having a + * NullDistanceAlgo. + */ +@ComparatorClass("null") +public class NullDistanceAlgo implements Comparator { + + public NullDistanceAlgo(Map params){ + } + + @Override + public double compare(Field a, Field b) { + return 0; + } +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SortedJaroWinkler.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SortedJaroWinkler.java new file mode 100644 index 000000000..e66ad0185 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SortedJaroWinkler.java @@ -0,0 +1,63 @@ +package eu.dnetlib.pace.tree; + +import com.wcohen.ss.AbstractStringDistance; +import eu.dnetlib.pace.distance.DistanceClass; +import eu.dnetlib.pace.distance.algo.SortedSecondStringDistanceAlgo; +import eu.dnetlib.pace.tree.support.AbstractSortedComparator; +import eu.dnetlib.pace.tree.support.ComparatorClass; + +import java.util.Map; + +/** + * The Class SortedJaroWinkler. + */ +@ComparatorClass("sortedJaroWinkler") +public class SortedJaroWinkler extends AbstractSortedComparator { + + public SortedJaroWinkler(Map params){ + super(params, new com.wcohen.ss.Levenstein()); + } + + /** + * Instantiates a new sorted jaro winkler. + * + * @param weight + * the weight + */ + public SortedJaroWinkler(final double weight) { + super(weight, new com.wcohen.ss.JaroWinkler()); + } + + /** + * Instantiates a new sorted jaro winkler. + * + * @param weight + * the weight + * @param ssalgo + * the ssalgo + */ + protected SortedJaroWinkler(final double weight, final AbstractStringDistance ssalgo) { + super(weight, ssalgo); + } + + /* + * (non-Javadoc) + * + * @see eu.dnetlib.pace.compare.DistanceAlgo#getWeight() + */ + @Override + public double getWeight() { + return super.weight; + } + + /* + * (non-Javadoc) + * + * @see eu.dnetlib.pace.compare.SecondStringDistanceAlgo#normalize(double) + */ + @Override + protected double normalize(final double d) { + return d; + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SortedLevel2JaroWinkler.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SortedLevel2JaroWinkler.java new file mode 100644 index 000000000..952414035 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SortedLevel2JaroWinkler.java @@ -0,0 +1,63 @@ +package eu.dnetlib.pace.tree; + +import com.wcohen.ss.AbstractStringDistance; +import eu.dnetlib.pace.distance.DistanceClass; +import eu.dnetlib.pace.distance.algo.SortedSecondStringDistanceAlgo; +import eu.dnetlib.pace.tree.support.AbstractSortedComparator; +import eu.dnetlib.pace.tree.support.ComparatorClass; + +import java.util.Map; + +/** + * The Class SortedJaroWinkler. + */ +@ComparatorClass("sortedLevel2JaroWinkler") +public class SortedLevel2JaroWinkler extends AbstractSortedComparator { + + /** + * Instantiates a new sorted jaro winkler. + * + * @param weight + * the weight + */ + public SortedLevel2JaroWinkler(final double weight) { + super(weight, new com.wcohen.ss.Level2JaroWinkler()); + } + + public SortedLevel2JaroWinkler(final Map params){ + super(params, new com.wcohen.ss.Level2JaroWinkler()); + } + + /** + * Instantiates a new sorted jaro winkler. + * + * @param weight + * the weight + * @param ssalgo + * the ssalgo + */ + protected SortedLevel2JaroWinkler(final double weight, final AbstractStringDistance ssalgo) { + super(weight, ssalgo); + } + + /* + * (non-Javadoc) + * + * @see eu.dnetlib.pace.compare.DistanceAlgo#getWeight() + */ + @Override + public double getWeight() { + return super.weight; + } + + /* + * (non-Javadoc) + * + * @see eu.dnetlib.pace.compare.SecondStringDistanceAlgo#normalize(double) + */ + @Override + protected double normalize(final double d) { + return d; + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SubStringLevenstein.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SubStringLevenstein.java new file mode 100644 index 000000000..d412f3941 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SubStringLevenstein.java @@ -0,0 +1,99 @@ +package eu.dnetlib.pace.tree; + +import com.wcohen.ss.AbstractStringDistance; +import eu.dnetlib.pace.config.Type; +import eu.dnetlib.pace.distance.DistanceClass; +import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.ComparatorClass; +import org.apache.commons.lang.StringUtils; + +import java.util.Map; + +/** + * The Class SubStringLevenstein. + */ +@ComparatorClass("subStringLevenstein") +public class SubStringLevenstein extends AbstractComparator { + + /** The limit. */ + protected int limit; + + /** + * Instantiates a new sub string levenstein. + * + * @param w + * the w + */ + public SubStringLevenstein(final double w) { + super(w, new com.wcohen.ss.Levenstein()); + } + + public SubStringLevenstein(Map params){ + super(params, new com.wcohen.ss.Levenstein()); + this.limit = params.get("limit").intValue(); + } + + /** + * Instantiates a new sub string levenstein. + * + * @param w + * the w + * @param limit + * the limit + */ + public SubStringLevenstein(final double w, final int limit) { + super(w, new com.wcohen.ss.Levenstein()); + this.limit = limit; + } + + /** + * Instantiates a new sub string levenstein. + * + * @param w + * the w + * @param limit + * the limit + * @param ssalgo + * the ssalgo + */ + protected SubStringLevenstein(final double w, final int limit, final AbstractStringDistance ssalgo) { + super(w, ssalgo); + this.limit = limit; + } + + /* + * (non-Javadoc) + * + * @see eu.dnetlib.pace.compare.SecondStringDistanceAlgo#compare(eu.dnetlib.pace.model.Field, eu.dnetlib.pace.model.Field) + */ + @Override + public double compare(final Field a, final Field b) { + if (a.getType().equals(Type.String) && b.getType().equals(Type.String)) + return distance(StringUtils.left(a.stringValue(), limit), StringUtils.left(b.stringValue(), limit)); + + throw new IllegalArgumentException("invalid types\n- A: " + a.toString() + "\n- B: " + b.toString()); + } + + /* + * (non-Javadoc) + * + * @see eu.dnetlib.pace.compare.DistanceAlgo#getWeight() + */ + @Override + public double getWeight() { + return super.weight; + } + + /* + * (non-Javadoc) + * + * @see eu.dnetlib.pace.compare.SecondStringDistanceAlgo#normalize(double) + */ + @Override + protected double normalize(final double d) { + return 1 / Math.pow(Math.abs(d) + 1, 0.1); + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/UrlMatcher.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/UrlMatcher.java new file mode 100644 index 000000000..d559e0647 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/UrlMatcher.java @@ -0,0 +1,60 @@ +package eu.dnetlib.pace.tree; + +import eu.dnetlib.pace.distance.DistanceClass; +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.tree.support.ComparatorClass; +import org.apache.commons.lang.StringUtils; + +import java.net.MalformedURLException; +import java.net.URL; +import java.util.Map; + +@ComparatorClass("urlMatcher") +public class UrlMatcher extends Levenstein { + + private Map params; + + public UrlMatcher(Map params){ + super(params); + this.params = params; + } + + public UrlMatcher(double weight, Map params) { + super(weight); + this.params = params; + } + + public void setParams(Map params) { + this.params = params; + } + + @Override + public double compare(Field a, Field b) { + + final URL urlA = asUrl(getFirstValue(a)); + final URL urlB = asUrl(getFirstValue(b)); + + if (!urlA.getHost().equalsIgnoreCase(urlB.getHost())) { + return 0.0; + } + + Double hostW = params.get("host").doubleValue(); + Double pathW = params.get("path").doubleValue(); + + if (StringUtils.isBlank(urlA.getPath()) || StringUtils.isBlank(urlB.getPath())) { + return hostW * 0.5; + } + + return hostW + pathW * super.distance(urlA.getPath(), urlB.getPath()); + } + + private URL asUrl(final String value) { + try { + return new URL(value); + } catch (MalformedURLException e) { + // should not happen as checked by pace typing + throw new IllegalStateException("invalid URL: " + value); + } + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractComparator.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractComparator.java new file mode 100644 index 000000000..ef9abebe4 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractComparator.java @@ -0,0 +1,110 @@ +package eu.dnetlib.pace.tree.support; + +import com.wcohen.ss.AbstractStringDistance; +import eu.dnetlib.pace.common.AbstractPaceFunctions; +import eu.dnetlib.pace.config.Type; +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.FieldList; + +import java.util.List; +import java.util.Map; + +public abstract class AbstractComparator extends AbstractPaceFunctions implements Comparator { + + /** The ssalgo. */ + protected AbstractStringDistance ssalgo; + + /** The weight. */ + protected double weight = 0.0; + + private Map params; + + protected AbstractComparator(Map params, final AbstractStringDistance ssalgo){ + this.params = params; + this.weight = 1.0; + this.ssalgo = ssalgo; + } + + /** + * Instantiates a new second string compare algo. + * + * @param weight + * the weight + * @param ssalgo + * the ssalgo + */ + protected AbstractComparator(final double weight, final AbstractStringDistance ssalgo) { + this.ssalgo = ssalgo; + this.weight = weight; + } + + protected AbstractComparator(final AbstractStringDistance ssalgo){ + this.ssalgo = ssalgo; + } + + /** + * Normalize. + * + * @param d + * the d + * @return the double + */ + protected abstract double normalize(double d); + + /** + * Distance. + * + * @param a + * the a + * @param b + * the b + * @return the double + */ + public double distance(final String a, final String b) { + + if (a.isEmpty() || b.isEmpty()) { + return -1; //return -1 if a field is missing + } + double score = ssalgo.score(a, b); + return normalize(score); + } + + /** + * Distance. + * + * @param a + * the a + * @param b + * the b + * @return the double + */ + protected double distance(final List a, final List b) { + return distance(concat(a), concat(b)); + } + + @Override + public double compare(final Field a, final Field b) { + if (a.isEmpty() || b.isEmpty()) + return -1; + if (a.getType().equals(Type.String) && b.getType().equals(Type.String)) return distance(a.stringValue(), b.stringValue()); + if (a.getType().equals(Type.List) && b.getType().equals(Type.List)) return distance(toList(a), toList(b)); + + throw new IllegalArgumentException("invalid types\n- A: " + a.toString() + "\n- B: " + b.toString()); + } + + /** + * To list. + * + * @param list + * the list + * @return the list + */ + protected List toList(final Field list) { + return ((FieldList) list).stringList(); + } + + public double getWeight(){ + return this.weight; + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractSortedComparator.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractSortedComparator.java new file mode 100644 index 000000000..18b5e67c6 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractSortedComparator.java @@ -0,0 +1,38 @@ +package eu.dnetlib.pace.tree.support; + +import com.google.common.collect.Lists; +import com.wcohen.ss.AbstractStringDistance; +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.FieldList; + +import java.util.Collections; +import java.util.List; +import java.util.Map; + +public abstract class AbstractSortedComparator extends AbstractComparator { + + /** + * Instantiates a new sorted second string compare algo. + * + * @param weight + * the weight + * @param ssalgo + * the ssalgo + */ + protected AbstractSortedComparator(final double weight, final AbstractStringDistance ssalgo) { + super(weight, ssalgo); + } + + protected AbstractSortedComparator(final Map params, final AbstractStringDistance ssalgo){ + super(params.get("weight").doubleValue(), ssalgo); + } + + @Override + protected List toList(final Field list) { + FieldList fl = (FieldList) list; + List values = Lists.newArrayList(fl.stringList()); + Collections.sort(values); + return values; + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AggType.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AggType.java new file mode 100644 index 000000000..8f7316ba5 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AggType.java @@ -0,0 +1,22 @@ +package eu.dnetlib.pace.tree.support; + +import eu.dnetlib.pace.util.PaceException; + +public enum AggType { + + WEIGHTED_MEAN, + AVG, + SUM, + MAX, + MIN; + + public static AggType getEnum(String value) { + + try { + return AggType.valueOf(value); + } + catch (IllegalArgumentException e) { + throw new PaceException("Undefined aggregation type", e); + } + } +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/Comparator.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/Comparator.java new file mode 100644 index 000000000..ea4ad7e9b --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/Comparator.java @@ -0,0 +1,9 @@ +package eu.dnetlib.pace.tree.support; + +import eu.dnetlib.pace.model.Field; + +public interface Comparator { + + public double compare(Field a, Field b); + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/ComparatorClass.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/ComparatorClass.java new file mode 100644 index 000000000..8c3002eb6 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/ComparatorClass.java @@ -0,0 +1,13 @@ +package eu.dnetlib.pace.tree.support; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +public @interface ComparatorClass { + + public String value(); +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldConf.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/FieldConf.java similarity index 81% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldConf.java rename to dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/FieldConf.java index 710bf10f8..3dd4b0185 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldConf.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/FieldConf.java @@ -1,4 +1,4 @@ -package eu.dnetlib.pace.model; +package eu.dnetlib.pace.tree.support; import eu.dnetlib.pace.util.PaceException; import org.codehaus.jackson.map.ObjectMapper; @@ -14,14 +14,25 @@ public class FieldConf implements Serializable { private double weight = 1.0; //weight for the field (to be used in the aggregation) private Map params; //parameters + private boolean ignoreMissing; + + public boolean isIgnoreMissing() { + return ignoreMissing; + } + + public void setIgnoreMissing(boolean ignoreMissing) { + this.ignoreMissing = ignoreMissing; + } + public FieldConf() { } - public FieldConf(String field, String comparator, double weight, Map params) { + public FieldConf(String field, String comparator, double weight, Map params, boolean ignoreMissing) { this.field = field; this.comparator = comparator; this.weight = weight; this.params = params; + this.ignoreMissing = ignoreMissing; } public String getField() { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/MatchType.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/MatchType.java new file mode 100644 index 000000000..c16039587 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/MatchType.java @@ -0,0 +1,18 @@ +package eu.dnetlib.pace.tree.support; + +public enum MatchType { + + MATCH, + NO_MATCH, + UNDEFINED; + + public static MatchType parse(String value) { + + try { + return MatchType.valueOf(value); + } + catch (IllegalArgumentException e) { + return MatchType.UNDEFINED; //return UNDEFINED if the enum is not parsable + } + } +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java new file mode 100644 index 000000000..4af9f8126 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java @@ -0,0 +1,157 @@ +package eu.dnetlib.pace.tree.support; + +import eu.dnetlib.pace.config.PaceConfig; +import eu.dnetlib.pace.model.MapDocument; +import eu.dnetlib.pace.util.PaceException; +import org.apache.commons.math3.stat.descriptive.DescriptiveStatistics; +import org.codehaus.jackson.map.ObjectMapper; + +import java.io.IOException; +import java.io.Serializable; +import java.util.List; + +public class TreeNodeDef implements Serializable { + + private List fields; + private AggType aggregation; + + private double threshold; + + private String positive; + private String negative; + private String undefined; + + boolean ignoreMissing; + + public TreeNodeDef(List fields, AggType aggregation, double threshold, String positive, String negative, String undefined, boolean ignoreMissing) { + this.fields = fields; + this.aggregation = aggregation; + this.threshold = threshold; + this.positive = positive; + this.negative = negative; + this.undefined = undefined; + this.ignoreMissing = ignoreMissing; + } + + public TreeNodeDef() { + } + + public double evaluate(MapDocument doc1, MapDocument doc2) { + + DescriptiveStatistics stats = new DescriptiveStatistics(); + double sumWeights = 0.0; //for the weighted mean + + int missCount = 0; //counter for the number of misses + + for (FieldConf fieldConf : fields) { + + double weight = fieldConf.getWeight(); + + double result = comparator(fieldConf).compare(doc1.getFieldMap().get(fieldConf.getField()), doc2.getFieldMap().get(fieldConf.getField())); + + if (result >= 0.0) { //if the field is not missing + stats.addValue(weight * result); + sumWeights += weight; //sum weights, to be used in case of weighted mean + } + else { //if the field is missing + missCount += 1; + if (!fieldConf.isIgnoreMissing()){ //if the miss has not to be ignored + stats.addValue(weight * 0); + sumWeights += weight; + } + } + } + + //global ignoremissing (if one of the field is missing, return undefined) + if (!ignoreMissing && missCount>0) { + return -1; + } + + switch (aggregation){ + + case AVG: + return stats.getMean(); + case SUM: + return stats.getSum(); + case MAX: + return stats.getMax(); + case MIN: + return stats.getMin(); + case WEIGHTED_MEAN: + return stats.getSum()/sumWeights; + default: + return 0.0; + } + + } + + private Comparator comparator(final FieldConf field){ + + return PaceConfig.resolver.getComparator(field.getComparator(), field.getParams()); + } + + public List getFields() { + return fields; + } + + public void setFields(List fields) { + this.fields = fields; + } + + public AggType getAggregation() { + return aggregation; + } + + public void setAggregation(AggType aggregation) { + this.aggregation = aggregation; + } + + public double getThreshold() { + return threshold; + } + + public void setThreshold(double threshold) { + this.threshold = threshold; + } + + public String getPositive() { + return positive; + } + + public void setPositive(String positive) { + this.positive = positive; + } + + public String getNegative() { + return negative; + } + + public void setNegative(String negative) { + this.negative = negative; + } + + public String getUndefined() { + return undefined; + } + + public void setUndefined(String undefined) { + this.undefined = undefined; + } + + public boolean isIgnoreMissing() { + return ignoreMissing; + } + + public void setIgnoreMissing(boolean ignoreMissing) { + this.ignoreMissing = ignoreMissing; + } + + @Override + public String toString() { + try { + return new ObjectMapper().writeValueAsString(this); + } catch (IOException e) { + throw new PaceException("Impossible to convert to JSON: ", e); + } + } +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java index 01da9c227..b1348e144 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java @@ -4,8 +4,8 @@ import com.google.common.collect.Lists; import eu.dnetlib.pace.clustering.NGramUtils; import eu.dnetlib.pace.config.DedupConfig; import eu.dnetlib.pace.config.WfConfig; -import eu.dnetlib.pace.distance.PaceDocumentDistance; -import eu.dnetlib.pace.distance.eval.ScoreResult; +//import eu.dnetlib.pace.distance.PaceDocumentDistance; +import eu.dnetlib.pace.distance.PairwiseComparison; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.model.MapDocument; import eu.dnetlib.pace.model.MapDocumentComparator; @@ -116,7 +116,7 @@ public class BlockProcessor { private void process(final Queue queue, final Reporter context) { - final PaceDocumentDistance algo = new PaceDocumentDistance(); +// final PaceDocumentDistance algo = new PaceDocumentDistance(); while (!queue.isEmpty()) { @@ -150,21 +150,23 @@ public class BlockProcessor { if (!idCurr.equals(idPivot) && (fieldCurr != null)) { - final ScoreResult sr = similarity(algo, pivot, curr); -// log.info(sr.toString()+"SCORE "+ sr.getScore()); - emitOutput(sr, idPivot, idCurr, context); - i++; + final PairwiseComparison pairwiseComparison = new PairwiseComparison(dedupConf); + + emitOutput(pairwiseComparison.compare(pivot, curr), idPivot, idCurr, context); + +// final ScoreResult sr = similarity(algo, pivot, curr); +//// log.info(sr.toString()+"SCORE "+ sr.getScore()); +// emitOutput(sr, idPivot, idCurr, context); +// i++; } } } } } - private void emitOutput(final ScoreResult sr, final String idPivot, final String idCurr, final Reporter context) { - final double d = sr.getScore(); - - if (d >= dedupConf.getWf().getThreshold()) { + private void emitOutput(final boolean result, final String idPivot, final String idCurr, final Reporter context) { + if (result) { writeSimilarity(context, idPivot, idCurr); context.incrementCounter(dedupConf.getWf().getEntityType(), "dedupSimilarity (x2)", 1); } else { @@ -172,15 +174,6 @@ public class BlockProcessor { } } - private ScoreResult similarity(final PaceDocumentDistance algo, final MapDocument a, final MapDocument b) { - try { - return algo.between(a, b, dedupConf); - } catch(Throwable e) { - log.error(String.format("\nA: %s\n----------------------\nB: %s", a, b), e); - throw new IllegalArgumentException(e); - } - } - private boolean mustSkip(final String idPivot) { return dedupConf.getWf().getSkipList().contains(getNsPrefix(idPivot)); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/DiffPatchMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/DiffPatchMatch.java index fbbc9d77b..45e011fdd 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/DiffPatchMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/DiffPatchMatch.java @@ -1390,7 +1390,7 @@ public class DiffPatchMatch { } /** - * Compute the Levenshtein distance; the number of inserted, deleted or + * Compute the Levenshtein compare; the number of inserted, deleted or * substituted characters. * @param diffs List of Diff objects. * @return Number of changes. @@ -1655,7 +1655,7 @@ public class DiffPatchMatch { score_threshold = score; best_loc = j - 1; if (best_loc > loc) { - // When passing loc, don't exceed our current distance from loc. + // When passing loc, don't exceed our current compare from loc. start = Math.max(1, 2 * loc - best_loc); } else { // Already passed loc, downhill from here on in. diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/PaceResolver.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/PaceResolver.java index d9868b690..c3b16c83e 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/PaceResolver.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/PaceResolver.java @@ -7,6 +7,8 @@ import eu.dnetlib.pace.condition.ConditionClass; import eu.dnetlib.pace.distance.DistanceAlgo; import eu.dnetlib.pace.distance.DistanceClass; import eu.dnetlib.pace.model.FieldDef; +import eu.dnetlib.pace.tree.support.Comparator; +import eu.dnetlib.pace.tree.support.ComparatorClass; import org.reflections.Reflections; import java.io.Serializable; @@ -19,11 +21,13 @@ public class PaceResolver implements Serializable { public static final Reflections CLUSTERING_RESOLVER = new Reflections("eu.dnetlib.pace.clustering"); public static final Reflections CONDITION_RESOLVER = new Reflections("eu.dnetlib.pace.condition"); - public static final Reflections DISTANCE_RESOLVER = new Reflections("eu.dnetlib.pace.distance.algo"); + public static final Reflections DISTANCE_RESOLVER = new Reflections("eu.dnetlib.pace.compare.algo"); + public static final Reflections COMPARATOR_RESOLVER = new Reflections("eu.dnetlib.pace.tree"); private final Map> clusteringFunctions; private final Map> conditionAlgos; private final Map> distanceAlgos; + private final Map> comparators; public PaceResolver() { @@ -38,6 +42,10 @@ public class PaceResolver implements Serializable { this.distanceAlgos = DISTANCE_RESOLVER.getTypesAnnotatedWith(DistanceClass.class).stream() .filter(DistanceAlgo.class::isAssignableFrom) .collect(Collectors.toMap(cl -> cl.getAnnotation(DistanceClass.class).value(), cl -> (Class)cl)); + + this.comparators = COMPARATOR_RESOLVER.getTypesAnnotatedWith(ComparatorClass.class).stream() + .filter(Comparator.class::isAssignableFrom) + .collect(Collectors.toMap(cl -> cl.getAnnotation(ComparatorClass.class).value(), cl -> (Class)cl)); } public ClusteringFunction getClusteringFunction(String name, Map params) throws PaceException { @@ -64,4 +72,12 @@ public class PaceResolver implements Serializable { } } + public Comparator getComparator(String name, Map params) throws PaceException { + try { + return comparators.get(name).getDeclaredConstructor(Map.class).newInstance(params); + } catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException | NullPointerException e) { + throw new PaceException(name + " not found ", e); + } + } + } diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/dedupConfig.st b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/dedupConfig.st index 97aef2d23..100b023f8 100644 --- a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/dedupConfig.st +++ b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/dedupConfig.st @@ -16,9 +16,9 @@ "pace" : { "clustering" : [ ], - "strictConditions" : [ + "sufficientConditions" : [ ], - "conditions" : [ + "necessaryConditions" : [ ], "model" : [ ], diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/org.curr.conf b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/org.curr.conf index fd4fbbe79..53768c07c 100644 --- a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/org.curr.conf +++ b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/org.curr.conf @@ -16,10 +16,10 @@ { "name" : "suffixprefix", "fields" : [ "legalname" ], "params" : { "max" : 1, "len" : "3" } }, { "name" : "urlclustering", "fields" : [ "websiteurl" ], "params" : { } } ], - "strictConditions" : [ + "sufficientConditions" : [ { "name" : "exactMatch", "fields" : [ "gridid" ] } ], - "conditions" : [ + "necessaryConditions" : [ { "name" : "exactMatch", "fields" : [ "country" ] }, { "name" : "DomainExactMatch", "fields" : [ "websiteurl" ] } ], From d71dae5fd2c3f88982986c222164b03e080b28bd Mon Sep 17 00:00:00 2001 From: miconis Date: Fri, 9 Aug 2019 15:41:49 +0200 Subject: [PATCH 089/449] implementation of the conditions in tree nodes. get rid of the conditions part of the configuration --- .../pace/common/AbstractPaceFunctions.java | 3 - .../pace/condition/AbstractCondition.java | 55 -------- .../pace/condition/AlwaysTrueCondition.java | 25 ---- .../dnetlib/pace/condition/ConditionAlgo.java | 27 ---- .../pace/condition/ConditionClass.java | 13 -- .../dnetlib/pace/condition/DoiExactMatch.java | 27 ---- .../pace/condition/DomainExactMatch.java | 32 ----- .../eu/dnetlib/pace/condition/ExactMatch.java | 50 ------- .../pace/condition/ExactMatchIgnoreCase.java | 43 ------ .../pace/condition/MustBeDifferent.java | 56 -------- .../eu/dnetlib/pace/condition/PidMatch.java | 63 --------- .../eu/dnetlib/pace/condition/SizeMatch.java | 56 -------- .../pace/condition/TitleVersionMatch.java | 35 ----- .../eu/dnetlib/pace/condition/YearMatch.java | 60 --------- .../java/eu/dnetlib/pace/config/Config.java | 20 +-- .../eu/dnetlib/pace/config/DedupConfig.java | 10 -- .../eu/dnetlib/pace/config/PaceConfig.java | 47 ------- .../pace/distance/AbstractDistance.java | 15 --- .../distance/ConfigurableDistanceAlgo.java | 26 ---- .../eu/dnetlib/pace/distance/Distance.java | 8 -- .../dnetlib/pace/distance/DistanceAlgo.java | 17 --- .../dnetlib/pace/distance/DistanceClass.java | 13 -- .../pace/distance/PaceDocumentDistance.java | 12 -- .../pace/distance/PairwiseComparison.java | 125 ------------------ .../distance/SecondStringDistanceAlgo.java | 114 ---------------- .../pace/distance/algo/AlwaysMatch.java | 39 ------ .../pace/distance/algo/ExactMatch.java | 39 ------ .../pace/distance/algo/JaroWinkler.java | 44 ------ .../algo/JaroWinklerNormalizedName.java | 76 ----------- .../pace/distance/algo/JaroWinklerTitle.java | 44 ------ .../pace/distance/algo/Level2JaroWinkler.java | 34 ----- .../distance/algo/Level2JaroWinklerTitle.java | 49 ------- .../pace/distance/algo/Level2Levenstein.java | 34 ----- .../pace/distance/algo/Levenstein.java | 34 ----- .../pace/distance/algo/LevensteinTitle.java | 57 -------- .../algo/LevensteinTitleIgnoreVersion.java | 58 -------- .../pace/distance/algo/MustBeDifferent.java | 39 ------ .../pace/distance/algo/NullDistanceAlgo.java | 29 ---- .../pace/distance/algo/SortedJaroWinkler.java | 60 --------- .../algo/SortedLevel2JaroWinkler.java | 60 --------- .../algo/SortedSecondStringDistanceAlgo.java | 48 ------- .../distance/algo/SubStringLevenstein.java | 99 -------------- .../pace/distance/algo/UrlMatcher.java | 59 --------- .../pace/distance/eval/ConditionEval.java | 56 -------- .../pace/distance/eval/ConditionEvalMap.java | 38 ------ .../pace/distance/eval/DistanceEval.java | 56 -------- .../java/eu/dnetlib/pace/model/CondDef.java | 50 ------- .../java/eu/dnetlib/pace/model/FieldDef.java | 25 ---- .../eu/dnetlib/pace/tree/AlwaysMatch.java | 5 +- .../eu/dnetlib/pace/tree/DoiExactMatch.java | 28 ++++ .../dnetlib/pace/tree/DomainExactMatch.java | 29 ++++ .../pace/tree/ExactMatchIgnoreCase.java | 31 +++++ .../eu/dnetlib/pace/tree/JaroWinkler.java | 3 - .../pace/tree/JaroWinklerNormalizedName.java | 3 - .../dnetlib/pace/tree/JaroWinklerTitle.java | 2 - .../dnetlib/pace/tree/Level2JaroWinkler.java | 2 - .../pace/tree/Level2JaroWinklerTitle.java | 2 - .../dnetlib/pace/tree/Level2Levenstein.java | 2 - .../java/eu/dnetlib/pace/tree/Levenstein.java | 2 - .../eu/dnetlib/pace/tree/LevensteinTitle.java | 2 - .../tree/LevensteinTitleIgnoreVersion.java | 2 - .../eu/dnetlib/pace/tree/MustBeDifferent.java | 2 - .../dnetlib/pace/tree/NullDistanceAlgo.java | 2 - .../java/eu/dnetlib/pace/tree/PidMatch.java | 63 +++++++++ .../java/eu/dnetlib/pace/tree/SizeMatch.java | 50 +++++++ .../dnetlib/pace/tree/SortedJaroWinkler.java | 2 - .../pace/tree/SortedLevel2JaroWinkler.java | 2 - .../pace/tree/SubStringLevenstein.java | 2 - .../dnetlib/pace/tree/TitleVersionMatch.java | 39 ++++++ .../java/eu/dnetlib/pace/tree/UrlMatcher.java | 1 - .../java/eu/dnetlib/pace/tree/YearMatch.java | 50 +++++++ .../pace/tree/support/AbstractComparator.java | 8 +- .../dnetlib/pace/tree/support/Comparator.java | 4 + .../pace/tree/support/TreeNodeDef.java | 49 ++----- .../pace/tree/support/TreeNodeStats.java | 86 ++++++++++++ .../pace/tree/support/TreeProcessor.java | 58 ++++++++ .../eu/dnetlib/pace/util/BlockProcessor.java | 10 +- .../eu/dnetlib/pace/util/PaceResolver.java | 34 ----- .../DistanceAlgoTest.java | 4 +- .../dnetlib/pace/condition/ConditionTest.java | 7 - .../eu/dnetlib/pace/config/org.curr.conf | 12 +- 81 files changed, 476 insertions(+), 2201 deletions(-) delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/AbstractCondition.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/AlwaysTrueCondition.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ConditionAlgo.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ConditionClass.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/DoiExactMatch.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/DomainExactMatch.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ExactMatch.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ExactMatchIgnoreCase.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/MustBeDifferent.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/PidMatch.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/SizeMatch.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/TitleVersionMatch.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/YearMatch.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/AbstractDistance.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/ConfigurableDistanceAlgo.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/Distance.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceAlgo.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceClass.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/PaceDocumentDistance.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/PairwiseComparison.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/SecondStringDistanceAlgo.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/AlwaysMatch.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/ExactMatch.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinkler.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerNormalizedName.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerTitle.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Level2JaroWinkler.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Level2JaroWinklerTitle.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Level2Levenstein.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Levenstein.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinTitle.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinTitleIgnoreVersion.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/MustBeDifferent.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/NullDistanceAlgo.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedJaroWinkler.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedLevel2JaroWinkler.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedSecondStringDistanceAlgo.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SubStringLevenstein.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/UrlMatcher.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/ConditionEval.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/ConditionEvalMap.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/DistanceEval.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/CondDef.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/DoiExactMatch.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/DomainExactMatch.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatchIgnoreCase.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/PidMatch.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SizeMatch.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/TitleVersionMatch.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/YearMatch.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeStats.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeProcessor.java rename dnet-pace-core/src/test/java/eu/dnetlib/pace/{distance => comparators}/DistanceAlgoTest.java (98%) delete mode 100644 dnet-pace-core/src/test/java/eu/dnetlib/pace/condition/ConditionTest.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java index 24379c677..e4536045e 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java @@ -15,10 +15,7 @@ import org.apache.commons.lang.StringUtils; import java.text.Normalizer; import java.util.*; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import java.util.stream.Collectors; -import java.util.stream.Stream; /** * Set of common functions diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/AbstractCondition.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/AbstractCondition.java deleted file mode 100644 index 5c7b4d130..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/AbstractCondition.java +++ /dev/null @@ -1,55 +0,0 @@ -package eu.dnetlib.pace.condition; - -import java.util.List; -import eu.dnetlib.pace.common.AbstractPaceFunctions; -import eu.dnetlib.pace.distance.eval.ConditionEval; -import eu.dnetlib.pace.distance.eval.ConditionEvalMap; -import eu.dnetlib.pace.model.Document; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.model.FieldDef; - -/** - * Abstract necessaryConditions needs a list of field names. - * - * @author claudio - * - */ -public abstract class AbstractCondition extends AbstractPaceFunctions implements ConditionAlgo { - - protected String cond; - - protected List fields; - - public AbstractCondition(final String cond, final List fields) { - this.cond = cond; - this.fields = fields; - } - - protected abstract ConditionEval verify(FieldDef fd, Field a, Field b); - - @Override - public ConditionEvalMap verify(final Document a, final Document b) { - final ConditionEvalMap res = new ConditionEvalMap(); - for (final FieldDef fd : getFields()) { - - final Field va = a.values(fd.getName()); - final Field vb = b.values(fd.getName()); - - if (fd.isIgnoreMissing()) { - res.put(fd.getName(), verify(fd, va, vb)); - } else { - if (va.isEmpty() || vb.isEmpty()) { - res.put(fd.getName(), new ConditionEval(cond, va, vb, -1)); - } else { - res.put(fd.getName(), verify(fd, va, vb)); - } - } - } - return res; - } - - public List getFields() { - return fields; - } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/AlwaysTrueCondition.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/AlwaysTrueCondition.java deleted file mode 100644 index 2274da5d5..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/AlwaysTrueCondition.java +++ /dev/null @@ -1,25 +0,0 @@ -package eu.dnetlib.pace.condition; - -import java.util.List; -import eu.dnetlib.pace.distance.eval.ConditionEval; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.model.FieldDef; - -/** - * Default always true condition - * - * @author claudio - */ -@ConditionClass("alwaystruecondition") -public class AlwaysTrueCondition extends AbstractCondition { - - public AlwaysTrueCondition(final String cond, final List fields) { - super(cond, fields); - } - - @Override - protected ConditionEval verify(final FieldDef fd, final Field a, final Field b) { - return new ConditionEval(cond, a, b, 1); - } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ConditionAlgo.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ConditionAlgo.java deleted file mode 100644 index 1ea9caa16..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ConditionAlgo.java +++ /dev/null @@ -1,27 +0,0 @@ -package eu.dnetlib.pace.condition; - -import java.util.List; -import eu.dnetlib.pace.distance.eval.ConditionEvalMap; -import eu.dnetlib.pace.model.Document; -import eu.dnetlib.pace.model.FieldDef; - -/** - * Allows to express general necessaryConditions to be satisfied or not between two Documents. - * - * @author claudio - */ -public interface ConditionAlgo { - - /** - * Verify a condition. - * - * @param a - * the Document a - * @param b - * the Document b - * @return 0 when condition cannot be verified (ignoremissing = true). Positive int when the condition is verified. Negative int when - * the condition is not verified. - */ - public abstract ConditionEvalMap verify(Document a, Document b); - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ConditionClass.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ConditionClass.java deleted file mode 100644 index 155360c58..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ConditionClass.java +++ /dev/null @@ -1,13 +0,0 @@ -package eu.dnetlib.pace.condition; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.TYPE) -public @interface ConditionClass { - - public String value(); -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/DoiExactMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/DoiExactMatch.java deleted file mode 100644 index dfdc5cd23..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/DoiExactMatch.java +++ /dev/null @@ -1,27 +0,0 @@ -package eu.dnetlib.pace.condition; - -import java.util.List; - -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.model.FieldDef; - -/** - * The Class ExactMatch. - * - * @author claudio - */ -@ConditionClass("doiExactMatch") -public class DoiExactMatch extends ExactMatchIgnoreCase { - - public final String PREFIX = "(http:\\/\\/dx\\.doi\\.org\\/)|(doi:)"; - - public DoiExactMatch(final String cond, final List fields) { - super(cond, fields); - } - - @Override - protected String getValue(final Field f) { - return super.getValue(f).replaceAll(PREFIX, ""); - } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/DomainExactMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/DomainExactMatch.java deleted file mode 100644 index dffe2cacc..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/DomainExactMatch.java +++ /dev/null @@ -1,32 +0,0 @@ -package eu.dnetlib.pace.condition; - -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.model.FieldDef; - -import java.net.MalformedURLException; -import java.net.URL; -import java.util.List; - -@ConditionClass("DomainExactMatch") -public class DomainExactMatch extends ExactMatchIgnoreCase { - - public DomainExactMatch(String cond, List fields) { - super(cond, fields); - } - - @Override - protected String getValue(final Field f) { - return asUrl(super.getValue(f)).getHost(); - } - - private URL asUrl(final String value) { - try { - if (value.isEmpty()) - return new URL("http://"); - return new URL(value); - } catch (MalformedURLException e) { - // should not happen as checked by pace typing - throw new IllegalStateException("invalid URL: " + value); - } - } -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ExactMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ExactMatch.java deleted file mode 100644 index a4cd84792..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ExactMatch.java +++ /dev/null @@ -1,50 +0,0 @@ -package eu.dnetlib.pace.condition; - -import java.util.List; - -import eu.dnetlib.pace.distance.eval.ConditionEval; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.model.FieldDef; -import org.apache.commons.lang.StringUtils; - -/** - * The Class ExactMatch. - * - * @author claudio - */ -@ConditionClass("exactMatch") -public class ExactMatch extends AbstractCondition { - - public ExactMatch(final String cond, final List fields) { - super(cond, fields); - } - - @Override - protected ConditionEval verify(final FieldDef fd, final Field a, final Field b) { - - final String fa = getValue(a); - final String fb = getValue(b); - - int res; - -// if (StringUtils.isBlank(fa) && StringUtils.isBlank(fb)) { -// res = 0; -// } else { -// res = fa.equals(fb) ? 1 : -1; -// } - - //if there is a blank, undefined result - if (StringUtils.isBlank(fa) || StringUtils.isBlank(fb)) { - res = 0; - } else { - res = fa.equals(fb) ? 1 : -1; - } - - return new ConditionEval(cond, a, b, res); - } - - protected String getValue(final Field f) { - return getFirstValue(f); - } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ExactMatchIgnoreCase.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ExactMatchIgnoreCase.java deleted file mode 100644 index e9925ec6d..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ExactMatchIgnoreCase.java +++ /dev/null @@ -1,43 +0,0 @@ -package eu.dnetlib.pace.condition; - -import java.util.List; - -import eu.dnetlib.pace.distance.eval.ConditionEval; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.model.FieldDef; -import org.apache.commons.lang.StringUtils; - -/** - * The Class ExactMatch. - * - * @author claudio - */ -@ConditionClass("exactMatchIgnoreCase") -public class ExactMatchIgnoreCase extends AbstractCondition { - - public ExactMatchIgnoreCase(final String cond, final List fields) { - super(cond, fields); - } - - @Override - protected ConditionEval verify(final FieldDef fd, final Field a, final Field b) { - - final String fa = getValue(a); - final String fb = getValue(b); - - int res; - - if (StringUtils.isBlank(fa) || StringUtils.isBlank(fb)) { - res = 0; - } else { - res = fa.equalsIgnoreCase(fb) ? 1 : -1; - } - - return new ConditionEval(cond, a, b, res); - } - - protected String getValue(final Field f) { - return getFirstValue(f); - } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/MustBeDifferent.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/MustBeDifferent.java deleted file mode 100644 index f2b3bdba4..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/MustBeDifferent.java +++ /dev/null @@ -1,56 +0,0 @@ -package eu.dnetlib.pace.condition; - -import java.util.List; - -import com.google.common.collect.Iterables; -import eu.dnetlib.pace.distance.eval.ConditionEval; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.model.FieldDef; - -/** - * Returns true if the field values are different. - * - * @author claudio - */ -@ConditionClass("mustBeDifferent") -public class MustBeDifferent extends AbstractCondition { - - /** - * Instantiates a new size match. - * - * @param fields the fields - */ - public MustBeDifferent(final String cond, final List fields) { - super(cond, fields); - } - - /* - * (non-Javadoc) - * - * @see eu.dnetlib.pace.condition.AbstractCondition#verify(eu.dnetlib.pace.model.FieldDef, java.util.List, java.util.List) - */ - @Override - protected ConditionEval verify(final FieldDef fd, final Field a, final Field b) { - - final String fa = getValue(a); - final String fb = getValue(b); - - return new ConditionEval(cond, a, b, fa.equals(fb) ? -1 : 1); - - } - - protected String getValue(final Field f) { - return getFirstValue(f); - } - - /** - * Checks if is empty. - * - * @param a the a - * @return true, if is empty - */ - protected boolean isEmpty(final Iterable a) { - return (a == null) || Iterables.isEmpty(a); - } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/PidMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/PidMatch.java deleted file mode 100644 index c15729ed3..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/PidMatch.java +++ /dev/null @@ -1,63 +0,0 @@ -package eu.dnetlib.pace.condition; - -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; - -import com.google.common.collect.Sets; -import eu.dnetlib.pace.distance.eval.ConditionEval; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.model.FieldDef; -import eu.dnetlib.pace.model.FieldList; -import eu.dnetlib.pace.model.adaptor.Pid; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -/** - * The Class PidMatch. - * - * @author claudio - */ -@ConditionClass("pidMatch") -public class PidMatch extends AbstractCondition { - - private static final Log log = LogFactory.getLog(PidMatch.class); - - public PidMatch(final String cond, final List fields) { - super(cond, fields); - } - - @Override - protected ConditionEval verify(final FieldDef fd, final Field a, final Field b) { - - final List sa = ((FieldList) a).stringList(); - final List sb = ((FieldList) b).stringList(); - - final List pal = Pid.fromOafJson(sa); - final List pbl = Pid.fromOafJson(sb); - - final Set pidAset = toHashSet(pal); - final Set pidBset = toHashSet(pbl); - - int incommon = Sets.intersection(pidAset, pidBset).size(); - int simDiff = Sets.symmetricDifference(pidAset, pidBset).size(); - - if (incommon + simDiff == 0) { - return new ConditionEval(cond, a, b, 0); - } - - int result = incommon / (incommon + simDiff) > 0.5 ? 1 : -1; - - return new ConditionEval(cond, a, b, result); - } - - //lowercase + normalization of the pid before adding it to the set - private Set toHashSet(List pbl) { - - return pbl.stream() - .map(pid -> pid.getType() + normalizePid(pid.getValue())) - .collect(Collectors.toCollection(HashSet::new)); - } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/SizeMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/SizeMatch.java deleted file mode 100644 index afd0a8eaa..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/SizeMatch.java +++ /dev/null @@ -1,56 +0,0 @@ -package eu.dnetlib.pace.condition; - -import java.util.List; - -import com.google.common.collect.Iterables; - -import eu.dnetlib.pace.distance.eval.ConditionEval; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.model.FieldDef; - -/** - * Returns true if the number of values in the fields is the same. - * - * @author claudio - */ -@ConditionClass("sizeMatch") -public class SizeMatch extends AbstractCondition { - - /** - * Instantiates a new size match. - * - * @param fields - * the fields - */ - public SizeMatch(final String cond, final List fields) { - super(cond, fields); - } - - /* - * (non-Javadoc) - * - * @see eu.dnetlib.pace.condition.AbstractCondition#verify(eu.dnetlib.pace.model.FieldDef, java.util.List, java.util.List) - */ - @Override - protected ConditionEval verify(final FieldDef fd, final Field a, final Field b) { - - // if (a.isEmpty() & b.isEmpty()) return 1; - // - // if (a.isEmpty()) return -1; - // if (b.isEmpty()) return -1; - - return new ConditionEval(cond, a, b, Iterables.size(a) == Iterables.size(b) ? 1 : -1); - } - - /** - * Checks if is empty. - * - * @param a - * the a - * @return true, if is empty - */ - protected boolean isEmpty(final Iterable a) { - return (a == null) || Iterables.isEmpty(a); - } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/TitleVersionMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/TitleVersionMatch.java deleted file mode 100644 index 4b94a0459..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/TitleVersionMatch.java +++ /dev/null @@ -1,35 +0,0 @@ -package eu.dnetlib.pace.condition; - -import java.util.List; - -import eu.dnetlib.pace.distance.eval.ConditionEval; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.model.FieldDef; - -/** - * Returns true if the titles in the given documents contains the same numbers, false otherwise. - * - * @author claudio - * - */ -@ConditionClass("titleVersionMatch") -public class TitleVersionMatch extends AbstractCondition { - - public TitleVersionMatch(final String cond, final List fields) { - super(cond, fields); - } - - @Override - protected ConditionEval verify(final FieldDef fd, final Field a, final Field b) { - final String valueA = getFirstValue(a); - final String valueB = getFirstValue(b); - - return new ConditionEval(cond, a, b, notNull(valueA) && notNull(valueB) && !checkNumbers(valueA, valueB) ? 1 : -1); - } - - @Override - public String toString() { - return getClass().getSimpleName() + ":" + super.toString(); - } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/YearMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/YearMatch.java deleted file mode 100644 index 71bb6cfd6..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/YearMatch.java +++ /dev/null @@ -1,60 +0,0 @@ -package eu.dnetlib.pace.condition; - -import java.time.Year; -import java.util.List; - -import eu.dnetlib.pace.distance.eval.ConditionEval; -import org.apache.commons.lang.StringUtils; - -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.model.FieldDef; - -/** - * Returns true if the year of the date field in the given documents are the same, false when any of the two is invalid or it's missing. - * - * @author claudio - */ -@ConditionClass("yearMatch") -public class YearMatch extends AbstractCondition { - - private int limit = 4; - - public YearMatch(final String cond, final List fields) { - super(cond, fields); - } - - // @Override - // public boolean verify(final Document a, final Document b) { - // boolean res = true; - // for (FieldDef fd : getFields()) { - // - // } - // - // return res; - // } - - @Override - protected ConditionEval verify(final FieldDef fd, final Field a, final Field b) { - final String valueA = getNumbers(getFirstValue(a)); - final String valueB = getNumbers(getFirstValue(b)); - - final boolean lengthMatch = checkLength(valueA) && checkLength(valueB); - final boolean onemissing = valueA.isEmpty() || valueB.isEmpty(); - - return new ConditionEval(cond, a, b, lengthMatch && valueA.equals(valueB) || onemissing ? 1 : -1); - } - - protected boolean checkLength(final String s) { - return s.length() == limit; - } - - protected String getFirstValue(final Field value) { - return (value != null) && !value.isEmpty() ? StringUtils.left(value.stringValue(), limit) : ""; - } - - @Override - public String toString() { - return getClass().getSimpleName() + ":" + super.toString(); - } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Config.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Config.java index 1a12e699f..298ff9463 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Config.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Config.java @@ -22,7 +22,11 @@ public interface Config { */ public List model(); - + /** + * Decision Tree definition + * + * @return the map representing the decision tree + */ public Map decisionTree(); /** @@ -32,20 +36,6 @@ public interface Config { */ public Map modelMap(); - /** - * Strict Pre-Condition definitions. - * - * @return the list of necessaryConditions - */ - public List sufficientConditions(); - - /** - * Pre-Condition definitions. - * - * @return the list of necessaryConditions - */ - public List necessaryConditions(); - /** * Clusterings. * diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java index 805f5c38e..f1cb9a37e 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java @@ -130,16 +130,6 @@ public class DedupConfig implements Config, Serializable { return getPace().getModelMap(); } - @Override - public List sufficientConditions() { - return getPace().getStrictConditionAlgos(); - } - - @Override - public List necessaryConditions() { - return getPace().getConditionAlgos(); - } - @Override public List clusterings() { return getPace().getClustering(); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java index d90cfe381..735af2cfd 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java @@ -1,27 +1,20 @@ package eu.dnetlib.pace.config; -import com.google.common.collect.Lists; import com.google.common.collect.Maps; -import eu.dnetlib.pace.condition.ConditionAlgo; import eu.dnetlib.pace.model.ClusteringDef; -import eu.dnetlib.pace.model.CondDef; import eu.dnetlib.pace.model.FieldDef; import eu.dnetlib.pace.tree.support.TreeNodeDef; import eu.dnetlib.pace.util.PaceResolver; -import org.apache.commons.collections.CollectionUtils; import org.codehaus.jackson.annotate.JsonIgnore; import java.io.Serializable; import java.util.List; import java.util.Map; -import java.util.stream.Collectors; public class PaceConfig implements Serializable { private List model; - private List sufficientConditions; - private List necessaryConditions; private List clustering; private Map decisionTree; @@ -50,32 +43,6 @@ public class PaceConfig implements Serializable { this.model = model; } - public List getSufficientConditions() { - return sufficientConditions; - } - - public void setSufficientConditions(final List sufficientConditions) { - this.sufficientConditions = sufficientConditions; - } - - public List getNecessaryConditions() { - return necessaryConditions; - } - - @JsonIgnore - public List getConditionAlgos() { - return asConditionAlgos(getNecessaryConditions()); - } - - @JsonIgnore - public List getStrictConditionAlgos() { - return asConditionAlgos(getSufficientConditions()); - } - - public void setNecessaryConditions(final List necessaryConditions) { - this.necessaryConditions = necessaryConditions; - } - public List getClustering() { return clustering; } @@ -108,18 +75,4 @@ public class PaceConfig implements Serializable { this.modelMap = modelMap; } - // helper - - private List asConditionAlgos(final List defs) { - final List algos = Lists.newArrayList(); - if (CollectionUtils.isEmpty(defs)) return algos; - for (final CondDef cd : defs) { - final List fields = getModel().stream() - .filter(fd -> cd.getFields().contains(fd.getName())) - .collect(Collectors.toList()); - algos.add(cd.conditionAlgo(fields)); - } - return algos; - } - } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/AbstractDistance.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/AbstractDistance.java deleted file mode 100644 index 3304f3638..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/AbstractDistance.java +++ /dev/null @@ -1,15 +0,0 @@ -//package eu.dnetlib.pace.distance; -// -//import eu.dnetlib.pace.config.Config; -//import eu.dnetlib.pace.distance.eval.ScoreResult; -//import eu.dnetlib.pace.model.Document; -// -//public abstract class AbstractDistance implements Distance { -// -// protected abstract Document toDocument(A a); -// -// @Override -// public boolean between(final A a, final A b, final Config config) { -// return new PairwiseComparison(config).compare(toDocument(a), toDocument(b)); -// } -//} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/ConfigurableDistanceAlgo.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/ConfigurableDistanceAlgo.java deleted file mode 100644 index b354f0654..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/ConfigurableDistanceAlgo.java +++ /dev/null @@ -1,26 +0,0 @@ -package eu.dnetlib.pace.distance; - -import java.util.Map; - -import eu.dnetlib.pace.common.AbstractPaceFunctions; - -public abstract class ConfigurableDistanceAlgo extends AbstractPaceFunctions { - - private Map params; - - private double weigth; - - public ConfigurableDistanceAlgo(final Map params, final double weight) { - this.params = params; - this.weigth = weight; - } - - public Map getParams() { - return params; - } - - public double getWeigth() { - return weigth; - } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/Distance.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/Distance.java deleted file mode 100644 index b812bd1d9..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/Distance.java +++ /dev/null @@ -1,8 +0,0 @@ -package eu.dnetlib.pace.distance; - -import eu.dnetlib.pace.config.Config; - -public interface Distance { - - public boolean between(A a, A b, Config config); -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceAlgo.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceAlgo.java deleted file mode 100644 index 80b2191cc..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceAlgo.java +++ /dev/null @@ -1,17 +0,0 @@ -package eu.dnetlib.pace.distance; - -import eu.dnetlib.pace.model.Field; - -import java.util.Map; - -/** - * Each field is configured with a compare algo which knows how to compute the compare (0-1) between the fields of two - * objects. - */ -public interface DistanceAlgo { - - public abstract double distance(Field a, Field b); - - public double getWeight(); - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceClass.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceClass.java deleted file mode 100644 index 9479fdb04..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceClass.java +++ /dev/null @@ -1,13 +0,0 @@ -package eu.dnetlib.pace.distance; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.TYPE) -public @interface DistanceClass { - - public String value(); -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/PaceDocumentDistance.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/PaceDocumentDistance.java deleted file mode 100644 index 9c75bfcf8..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/PaceDocumentDistance.java +++ /dev/null @@ -1,12 +0,0 @@ -//package eu.dnetlib.pace.distance; -// -//import eu.dnetlib.pace.model.Document; -// -//public class PaceDocumentDistance extends AbstractDistance { -// -// @Override -// protected Document toDocument(Document a) { -// return a; -// } -// -//} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/PairwiseComparison.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/PairwiseComparison.java deleted file mode 100644 index 125919d0f..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/PairwiseComparison.java +++ /dev/null @@ -1,125 +0,0 @@ -package eu.dnetlib.pace.distance; - -import eu.dnetlib.pace.condition.ConditionAlgo; -import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.distance.eval.ConditionEvalMap; -import eu.dnetlib.pace.model.*; -import eu.dnetlib.pace.tree.support.MatchType; -import eu.dnetlib.pace.tree.support.TreeNodeDef; -import eu.dnetlib.pace.util.PaceException; -import eu.dnetlib.pace.util.Reporter; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import java.util.List; -import java.util.Map; - -/** - * The compare between two documents is given by the weighted mean of the field distances - */ -public class PairwiseComparison { - - private static final Log log = LogFactory.getLog(PairwiseComparison.class); - - private Config config; - - public PairwiseComparison(final Config config) { - this.config = config; - } - - public boolean compare(final MapDocument a, final MapDocument b) { - - //verify sufficientConditions - if (verify(a, b, config.sufficientConditions()).result() > 0) - return true; - - //verify necessaryConditions - if (verify(a, b, config.necessaryConditions()).result() < 0) - return false; - - //evaluate the decision tree - return evaluateTree(a, b, config.decisionTree()) == MatchType.MATCH; - } - - private ConditionEvalMap verify(final Document a, final Document b, final List conditions) { - final ConditionEvalMap res = new ConditionEvalMap(); - - for (final ConditionAlgo cd : conditions) { - final ConditionEvalMap map = cd.verify(a, b); - res.mergeFrom(map); - - // commented out shortcuts - /* - if (map.anyNegative()) { - return res; - } - */ - - //if (strict && (res < 0)) return -1; - //cond += verify; - } - return res; - } - - public MatchType evaluateTree(final MapDocument doc1, final MapDocument doc2, final Map decisionTree){ - - String current = "start"; - double similarity; - - while (MatchType.parse(current)==MatchType.UNDEFINED) { - - TreeNodeDef currentNode = decisionTree.get(current); - //throw an exception if the node doesn't exist - if (currentNode == null) - throw new PaceException("The Tree Node doesn't exist: " + current); - - similarity = currentNode.evaluate(doc1, doc2); - - if (similarity == -1) { - current = currentNode.getUndefined(); - } - else if (similarity>=currentNode.getThreshold()){ - current = currentNode.getPositive(); - } - else { - current = currentNode.getNegative(); - } - - } - - return MatchType.parse(current); - } - -// private Field getValue(final Document d, final FieldDef fd) { -// final Field v = d.values(fd.getName()); -// if (fd.getLength() > 0) { -// -// if (v instanceof FieldValueImpl) { -// ((FieldValueImpl) v).setValue(StringUtils.substring(v.stringValue(), 0, fd.getLength())); -// } else if (v instanceof FieldListImpl) { -// List strings = ((FieldListImpl) v).stringList(); -// strings = strings.stream() -// .limit(fd.getSize() > 0 ? fd.getSize() : strings.size()) -// .map(s -> StringUtils.substring(s, 0, fd.getLength())) -// .collect(Collectors.toList()); -// ((FieldListImpl) v).clear(); -// ((FieldListImpl) v).addAll(strings.stream() -// .limit(fd.getSize() > 0 ? fd.getSize() : strings.size()) -// .map(s -> StringUtils.substring(s, 0, fd.getLength())) -// .map(s -> new FieldValueImpl(v.getType(), v.getName(), s)) -// .collect(Collectors.toList())); -// } -// } -// -// return v; -// } -// -// private double sumWeights(final Collection fields) { -// double sum = 0.0; -// for (final FieldDef fd : fields) { -// sum += fd.getWeight(); -// } -// return sum; -// } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/SecondStringDistanceAlgo.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/SecondStringDistanceAlgo.java deleted file mode 100644 index d3ccccec5..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/SecondStringDistanceAlgo.java +++ /dev/null @@ -1,114 +0,0 @@ -package eu.dnetlib.pace.distance; - -import java.io.Serializable; -import java.util.List; -import java.util.Map; - -import com.wcohen.ss.AbstractStringDistance; - -import eu.dnetlib.pace.common.AbstractPaceFunctions; -import eu.dnetlib.pace.config.Type; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.model.FieldList; - -/** - * For the rest of the fields delegate the compare measure to the second string library. - */ -public abstract class SecondStringDistanceAlgo extends AbstractPaceFunctions implements DistanceAlgo { - - // val aliases = Map(('₁' to '₉') zip ('1' to '9'): _*) ++ Map(('⁴' to '⁹') zip ('4' to '9'): _*) ++ Map('¹' -> '1', '²' -> - // '2', * '³' - // -> '3') - - /** The ssalgo. */ - protected AbstractStringDistance ssalgo; - - /** The weight. */ - protected double weight = 0.0; - - private Map params; - - protected SecondStringDistanceAlgo(Map params, final AbstractStringDistance ssalgo){ - this.params = params; - this.weight = params.get("weight").doubleValue(); - this.ssalgo = ssalgo; - } - - /** - * Instantiates a new second string compare algo. - * - * @param weight - * the weight - * @param ssalgo - * the ssalgo - */ - protected SecondStringDistanceAlgo(final double weight, final AbstractStringDistance ssalgo) { - this.ssalgo = ssalgo; - this.weight = weight; - } - - protected SecondStringDistanceAlgo(final AbstractStringDistance ssalgo){ - this.ssalgo = ssalgo; - } - - /** - * Normalize. - * - * @param d - * the d - * @return the double - */ - protected abstract double normalize(double d); - - /** - * Distance. - * - * @param a - * the a - * @param b - * the b - * @return the double - */ - public double distance(final String a, final String b) { - double score = ssalgo.score(a, b); - return normalize(score); - } - - /** - * Distance. - * - * @param a - * the a - * @param b - * the b - * @return the double - */ - protected double distance(final List a, final List b) { - return distance(concat(a), concat(b)); - } - - /* - * (non-Javadoc) - * - * @see eu.dnetlib.pace.compare.DistanceAlgo#compare(eu.dnetlib.pace.model.Field, eu.dnetlib.pace.model.Field) - */ - @Override - public double distance(final Field a, final Field b) { - if (a.getType().equals(Type.String) && b.getType().equals(Type.String)) return distance(a.stringValue(), b.stringValue()); - if (a.getType().equals(Type.List) && b.getType().equals(Type.List)) return distance(toList(a), toList(b)); - - throw new IllegalArgumentException("invalid types\n- A: " + a.toString() + "\n- B: " + b.toString()); - } - - /** - * To list. - * - * @param list - * the list - * @return the list - */ - protected List toList(final Field list) { - return ((FieldList) list).stringList(); - } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/AlwaysMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/AlwaysMatch.java deleted file mode 100644 index 503235c13..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/AlwaysMatch.java +++ /dev/null @@ -1,39 +0,0 @@ -package eu.dnetlib.pace.distance.algo; - -import com.wcohen.ss.AbstractStringDistance; -import eu.dnetlib.pace.distance.DistanceClass; -import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; - -import java.util.Map; - -@DistanceClass("AlwaysMatch") -public class AlwaysMatch extends SecondStringDistanceAlgo { - - public AlwaysMatch(final Map params){ - super(params, new com.wcohen.ss.JaroWinkler()); - } - - public AlwaysMatch(final double weight) { - super(weight, new com.wcohen.ss.JaroWinkler()); - } - - protected AlwaysMatch(final double weight, final AbstractStringDistance ssalgo) { - super(weight, ssalgo); - } - - @Override - public double distance(final String a, final String b) { - return 1.0; - } - - @Override - public double getWeight() { - return super.weight; - } - - @Override - protected double normalize(final double d) { - return d; - } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/ExactMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/ExactMatch.java deleted file mode 100644 index 44d881e55..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/ExactMatch.java +++ /dev/null @@ -1,39 +0,0 @@ -package eu.dnetlib.pace.distance.algo; - -import com.wcohen.ss.AbstractStringDistance; -import eu.dnetlib.pace.distance.DistanceClass; -import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; - -import java.util.Map; - -@DistanceClass("ExactMatch") -public class ExactMatch extends SecondStringDistanceAlgo { - - public ExactMatch(Map params){ - super(params, new com.wcohen.ss.JaroWinkler()); - } - - public ExactMatch(final double weight) { - super(weight, new com.wcohen.ss.JaroWinkler()); - } - - protected ExactMatch(final double weight, final AbstractStringDistance ssalgo) { - super(weight, ssalgo); - } - - @Override - public double distance(final String a, final String b) { - return a.equals(b) ? 1.0 : 0; - } - - @Override - public double getWeight() { - return super.weight; - } - - @Override - protected double normalize(final double d) { - return d; - } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinkler.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinkler.java deleted file mode 100644 index 20c09121d..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinkler.java +++ /dev/null @@ -1,44 +0,0 @@ -package eu.dnetlib.pace.distance.algo; - -import com.wcohen.ss.AbstractStringDistance; -import eu.dnetlib.pace.distance.DistanceClass; -import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; - -import java.io.Serializable; -import java.util.Map; - -//case class JaroWinkler(w: Double) extends SecondStringDistanceAlgo(w, new com.wcohen.ss.JaroWinkler()) -@DistanceClass("JaroWinkler") -public class JaroWinkler extends SecondStringDistanceAlgo { - - public JaroWinkler(Map params){ - super(params, new com.wcohen.ss.JaroWinkler()); - } - - public JaroWinkler(double weight) { - super(weight, new com.wcohen.ss.JaroWinkler()); - } - - protected JaroWinkler(double weight, AbstractStringDistance ssalgo) { - super(weight, ssalgo); - } - - @Override - public double distance(String a, String b) { - String ca = cleanup(a); - String cb = cleanup(b); - - return normalize(ssalgo.score(ca, cb)); - } - - @Override - public double getWeight() { - return super.weight; - } - - @Override - protected double normalize(double d) { - return d; - } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerNormalizedName.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerNormalizedName.java deleted file mode 100644 index 546629b08..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerNormalizedName.java +++ /dev/null @@ -1,76 +0,0 @@ -package eu.dnetlib.pace.distance.algo; - -import com.wcohen.ss.AbstractStringDistance; -import eu.dnetlib.pace.common.AbstractPaceFunctions; -import eu.dnetlib.pace.distance.DistanceClass; -import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; - -import java.util.Map; -import java.util.Set; - -@DistanceClass("JaroWinklerNormalizedName") -public class JaroWinklerNormalizedName extends SecondStringDistanceAlgo { - - private Map params; - - public JaroWinklerNormalizedName(Map params){ - super(params, new com.wcohen.ss.JaroWinkler()); - this.params = params; - } - - public JaroWinklerNormalizedName(double weight) { - super(weight, new com.wcohen.ss.JaroWinkler()); - } - - protected JaroWinklerNormalizedName(double weight, AbstractStringDistance ssalgo) { - super(weight, ssalgo); - } - - @Override - public double distance(String a, String b) { - String ca = cleanup(a); - String cb = cleanup(b); - - ca = normalize(ca); - cb = normalize(cb); - - ca = filterAllStopWords(ca); - cb = filterAllStopWords(cb); - - Set keywords1 = getKeywords(ca, params.getOrDefault("windowSize", 4).intValue()); - Set keywords2 = getKeywords(cb, params.getOrDefault("windowSize", 4).intValue()); - - Set cities1 = getCities(ca, params.getOrDefault("windowSize", 4).intValue()); - Set cities2 = getCities(cb, params.getOrDefault("windowSize", 4).intValue()); - - if (sameCity(cities1,cities2)) { - - if (keywordsCompare(keywords1, keywords2)>params.getOrDefault("threshold", 0.5).doubleValue()) { - - ca = removeKeywords(ca, keywords1); - ca = removeKeywords(ca, cities1); - cb = removeKeywords(cb, keywords2); - cb = removeKeywords(cb, cities2); - - if (ca.isEmpty() && cb.isEmpty()) - return 1.0; - else - return normalize(ssalgo.score(ca,cb)); - - } - } - - return 0.0; - } - - @Override - public double getWeight() { - return super.weight; - } - - @Override - protected double normalize(double d) { - return d; - } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerTitle.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerTitle.java deleted file mode 100644 index ff4d6de1f..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerTitle.java +++ /dev/null @@ -1,44 +0,0 @@ -package eu.dnetlib.pace.distance.algo; - -import com.wcohen.ss.AbstractStringDistance; -import eu.dnetlib.pace.distance.DistanceClass; -import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; - -import java.util.Map; - -//case class JaroWinkler(w: Double) extends SecondStringDistanceAlgo(w, new com.wcohen.ss.JaroWinkler()) -@DistanceClass("JaroWinklerTitle") -public class JaroWinklerTitle extends SecondStringDistanceAlgo { - - public JaroWinklerTitle(Map params){ - super(params, new com.wcohen.ss.JaroWinkler()); - } - - public JaroWinklerTitle(double weight) { - super(weight, new com.wcohen.ss.JaroWinkler()); - } - - protected JaroWinklerTitle(double weight, AbstractStringDistance ssalgo) { - super(weight, ssalgo); - } - - @Override - public double distance(String a, String b) { - String ca = cleanup(a); - String cb = cleanup(b); - - boolean check = checkNumbers(ca, cb); - return check ? 0.5 : normalize(ssalgo.score(ca, cb)); - } - - @Override - public double getWeight() { - return super.weight; - } - - @Override - protected double normalize(double d) { - return d; - } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Level2JaroWinkler.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Level2JaroWinkler.java deleted file mode 100644 index 135fc5379..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Level2JaroWinkler.java +++ /dev/null @@ -1,34 +0,0 @@ -package eu.dnetlib.pace.distance.algo; - -import com.wcohen.ss.AbstractStringDistance; -import eu.dnetlib.pace.distance.DistanceClass; -import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; - -import java.util.Map; - -@DistanceClass("Level2JaroWinkler") -public class Level2JaroWinkler extends SecondStringDistanceAlgo { - - public Level2JaroWinkler(Map params){ - super(params, new com.wcohen.ss.Level2JaroWinkler()); - } - - public Level2JaroWinkler(double w) { - super(w, new com.wcohen.ss.Level2JaroWinkler()); - } - - protected Level2JaroWinkler(double w, AbstractStringDistance ssalgo) { - super(w, ssalgo); - } - - @Override - public double getWeight() { - return super.weight; - } - - @Override - protected double normalize(double d) { - return d; - } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Level2JaroWinklerTitle.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Level2JaroWinklerTitle.java deleted file mode 100644 index 2d05a0084..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Level2JaroWinklerTitle.java +++ /dev/null @@ -1,49 +0,0 @@ -package eu.dnetlib.pace.distance.algo; - -import com.wcohen.ss.AbstractStringDistance; -import eu.dnetlib.pace.distance.DistanceClass; -import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; - -import java.util.Map; - -@DistanceClass("Level2JaroWinklerTitle") -public class Level2JaroWinklerTitle extends SecondStringDistanceAlgo { - - public Level2JaroWinklerTitle(Map params){ - super(params, new com.wcohen.ss.Level2JaroWinkler()); - } - - public Level2JaroWinklerTitle(final double w) { - super(w, new com.wcohen.ss.Level2JaroWinkler()); - } - - protected Level2JaroWinklerTitle(final double w, final AbstractStringDistance ssalgo) { - super(w, ssalgo); - } - - @Override - public double distance(final String a, final String b) { - final String ca = cleanup(a); - final String cb = cleanup(b); - - final boolean check = checkNumbers(ca, cb); - - if (check) return 0.5; - - final String cca = finalCleanup(ca); - final String ccb = finalCleanup(cb); - - return ssalgo.score(cca, ccb); - } - - @Override - public double getWeight() { - return super.weight; - } - - @Override - protected double normalize(final double d) { - return d; - } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Level2Levenstein.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Level2Levenstein.java deleted file mode 100644 index 767c5976b..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Level2Levenstein.java +++ /dev/null @@ -1,34 +0,0 @@ -package eu.dnetlib.pace.distance.algo; - -import com.wcohen.ss.AbstractStringDistance; -import eu.dnetlib.pace.distance.DistanceClass; -import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; - -import java.util.Map; - -@DistanceClass("Level2Levenstein") -public class Level2Levenstein extends SecondStringDistanceAlgo { - - public Level2Levenstein(Map params){ - super(params, new com.wcohen.ss.Level2Levenstein()); - } - - public Level2Levenstein(double w) { - super(w, new com.wcohen.ss.Level2Levenstein()); - } - - protected Level2Levenstein(double w, AbstractStringDistance ssalgo) { - super(w, ssalgo); - } - - @Override - public double getWeight() { - return super.weight; - } - - @Override - protected double normalize(double d) { - return 1 / Math.pow(Math.abs(d) + 1, 0.1); - } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Levenstein.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Levenstein.java deleted file mode 100644 index d9ba5f73e..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Levenstein.java +++ /dev/null @@ -1,34 +0,0 @@ -package eu.dnetlib.pace.distance.algo; - -import com.wcohen.ss.AbstractStringDistance; -import eu.dnetlib.pace.distance.DistanceClass; -import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; - -import java.util.Map; - -@DistanceClass("Levenstein") -public class Levenstein extends SecondStringDistanceAlgo { - - public Levenstein(Map params){ - super(params, new com.wcohen.ss.Levenstein()); - } - - public Levenstein(double w) { - super(w, new com.wcohen.ss.Levenstein()); - } - - protected Levenstein(double w, AbstractStringDistance ssalgo) { - super(w, ssalgo); - } - - @Override - public double getWeight() { - return super.weight; - } - - @Override - protected double normalize(double d) { - return 1 / Math.pow(Math.abs(d) + 1, 0.1); - } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinTitle.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinTitle.java deleted file mode 100644 index ae0ef9d00..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinTitle.java +++ /dev/null @@ -1,57 +0,0 @@ -package eu.dnetlib.pace.distance.algo; - -import com.wcohen.ss.AbstractStringDistance; -import eu.dnetlib.pace.distance.DistanceClass; -import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import java.util.Map; - -@DistanceClass("LevensteinTitle") -public class LevensteinTitle extends SecondStringDistanceAlgo { - - private static final Log log = LogFactory.getLog(LevensteinTitle.class); - - public LevensteinTitle(Map params){ - super(params, new com.wcohen.ss.Levenstein()); - } - - public LevensteinTitle(final double w) { - super(w, new com.wcohen.ss.Levenstein()); - } - - protected LevensteinTitle(final double w, final AbstractStringDistance ssalgo) { - super(w, ssalgo); - } - - @Override - public double distance(final String a, final String b) { - final String ca = cleanup(a); - final String cb = cleanup(b); - - final boolean check = checkNumbers(ca, cb); - - if (check) return 0.5; - - final String cca = finalCleanup(ca); - final String ccb = finalCleanup(cb); - - return normalize(ssalgo.score(cca, ccb), cca.length(), ccb.length()); - } - - private double normalize(final double score, final int la, final int lb) { - return 1 - (Math.abs(score) / Math.max(la, lb)); - } - - @Override - public double getWeight() { - return super.weight; - } - - @Override - protected double normalize(final double d) { - return 1 / Math.pow(Math.abs(d) + 1, 0.1); - } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinTitleIgnoreVersion.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinTitleIgnoreVersion.java deleted file mode 100644 index 6303f8e2a..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinTitleIgnoreVersion.java +++ /dev/null @@ -1,58 +0,0 @@ -package eu.dnetlib.pace.distance.algo; - -import com.wcohen.ss.AbstractStringDistance; -import eu.dnetlib.pace.distance.DistanceClass; -import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; - -import java.util.Map; - -/** - * Compared compare between two titles, ignoring version numbers. Suitable for Software entities. - */ -@DistanceClass("LevensteinTitleIgnoreVersion") -public class LevensteinTitleIgnoreVersion extends SecondStringDistanceAlgo { - - public LevensteinTitleIgnoreVersion(Map params){ - super(params, new com.wcohen.ss.Levenstein()); - } - - public LevensteinTitleIgnoreVersion(final double w) { - super(w, new com.wcohen.ss.Levenstein()); - } - - protected LevensteinTitleIgnoreVersion(final double w, final AbstractStringDistance ssalgo) { - super(w, ssalgo); - } - - @Override - public double distance(final String a, final String b) { - String ca = cleanup(a); - String cb = cleanup(b); - - ca = ca.replaceAll("\\d", "").replaceAll(getRomans(ca), "").trim(); - cb = cb.replaceAll("\\d", "").replaceAll(getRomans(cb), "").trim(); - - ca = filterAllStopWords(ca); - cb = filterAllStopWords(cb); - - final String cca = finalCleanup(ca); - final String ccb = finalCleanup(cb); - - return normalize(ssalgo.score(cca, ccb), cca.length(), ccb.length()); - } - - private double normalize(final double score, final int la, final int lb) { - return 1 - (Math.abs(score) / Math.max(la, lb)); - } - - @Override - public double getWeight() { - return super.weight; - } - - @Override - protected double normalize(final double d) { - return 1 / Math.pow(Math.abs(d) + 1, 0.1); - } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/MustBeDifferent.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/MustBeDifferent.java deleted file mode 100644 index e794f025f..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/MustBeDifferent.java +++ /dev/null @@ -1,39 +0,0 @@ -package eu.dnetlib.pace.distance.algo; - -import com.wcohen.ss.AbstractStringDistance; -import eu.dnetlib.pace.distance.DistanceClass; -import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; - -import java.util.Map; - -@DistanceClass("MustBeDifferent") -public class MustBeDifferent extends SecondStringDistanceAlgo { - - public MustBeDifferent(Map params){ - super(params, new com.wcohen.ss.Levenstein()); - } - - public MustBeDifferent(final double weight) { - super(weight, new com.wcohen.ss.JaroWinkler()); - } - - protected MustBeDifferent(final double weight, final AbstractStringDistance ssalgo) { - super(weight, ssalgo); - } - - @Override - public double distance(final String a, final String b) { - return !a.equals(b) ? 1.0 : 0; - } - - @Override - public double getWeight() { - return super.weight; - } - - @Override - protected double normalize(final double d) { - return d; - } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/NullDistanceAlgo.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/NullDistanceAlgo.java deleted file mode 100644 index c1b1d7223..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/NullDistanceAlgo.java +++ /dev/null @@ -1,29 +0,0 @@ -package eu.dnetlib.pace.distance.algo; - -import eu.dnetlib.pace.distance.DistanceAlgo; -import eu.dnetlib.pace.distance.DistanceClass; -import eu.dnetlib.pace.model.Field; - -import java.util.Map; - -/** - * Not all fields of a document need to partecipate in the compare measure. We model those fields as having a - * NullDistanceAlgo. - */ -@DistanceClass("Null") -public class NullDistanceAlgo implements DistanceAlgo { - - public NullDistanceAlgo(Map params){ - } - - @Override - public double distance(Field a, Field b) { - return 0.0; - } - - @Override - public double getWeight() { - return 0.0; - } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedJaroWinkler.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedJaroWinkler.java deleted file mode 100644 index d3aa58f99..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedJaroWinkler.java +++ /dev/null @@ -1,60 +0,0 @@ -package eu.dnetlib.pace.distance.algo; - -import com.wcohen.ss.AbstractStringDistance; -import eu.dnetlib.pace.distance.DistanceClass; - -import java.util.Map; - -/** - * The Class SortedJaroWinkler. - */ -@DistanceClass("SortedJaroWinkler") -public class SortedJaroWinkler extends SortedSecondStringDistanceAlgo { - - public SortedJaroWinkler(Map params){ - super(params, new com.wcohen.ss.Levenstein()); - } - - /** - * Instantiates a new sorted jaro winkler. - * - * @param weight - * the weight - */ - public SortedJaroWinkler(final double weight) { - super(weight, new com.wcohen.ss.JaroWinkler()); - } - - /** - * Instantiates a new sorted jaro winkler. - * - * @param weight - * the weight - * @param ssalgo - * the ssalgo - */ - protected SortedJaroWinkler(final double weight, final AbstractStringDistance ssalgo) { - super(weight, ssalgo); - } - - /* - * (non-Javadoc) - * - * @see eu.dnetlib.pace.compare.DistanceAlgo#getWeight() - */ - @Override - public double getWeight() { - return super.weight; - } - - /* - * (non-Javadoc) - * - * @see eu.dnetlib.pace.compare.SecondStringDistanceAlgo#normalize(double) - */ - @Override - protected double normalize(final double d) { - return d; - } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedLevel2JaroWinkler.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedLevel2JaroWinkler.java deleted file mode 100644 index 2523153ed..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedLevel2JaroWinkler.java +++ /dev/null @@ -1,60 +0,0 @@ -package eu.dnetlib.pace.distance.algo; - -import com.wcohen.ss.AbstractStringDistance; -import eu.dnetlib.pace.distance.DistanceClass; - -import java.util.Map; - -/** - * The Class SortedJaroWinkler. - */ -@DistanceClass("SortedLevel2JaroWinkler") -public class SortedLevel2JaroWinkler extends SortedSecondStringDistanceAlgo { - - /** - * Instantiates a new sorted jaro winkler. - * - * @param weight - * the weight - */ - public SortedLevel2JaroWinkler(final double weight) { - super(weight, new com.wcohen.ss.Level2JaroWinkler()); - } - - public SortedLevel2JaroWinkler(final Map params){ - super(params, new com.wcohen.ss.Level2JaroWinkler()); - } - - /** - * Instantiates a new sorted jaro winkler. - * - * @param weight - * the weight - * @param ssalgo - * the ssalgo - */ - protected SortedLevel2JaroWinkler(final double weight, final AbstractStringDistance ssalgo) { - super(weight, ssalgo); - } - - /* - * (non-Javadoc) - * - * @see eu.dnetlib.pace.compare.DistanceAlgo#getWeight() - */ - @Override - public double getWeight() { - return super.weight; - } - - /* - * (non-Javadoc) - * - * @see eu.dnetlib.pace.compare.SecondStringDistanceAlgo#normalize(double) - */ - @Override - protected double normalize(final double d) { - return d; - } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedSecondStringDistanceAlgo.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedSecondStringDistanceAlgo.java deleted file mode 100644 index f72750521..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SortedSecondStringDistanceAlgo.java +++ /dev/null @@ -1,48 +0,0 @@ -package eu.dnetlib.pace.distance.algo; - -import java.util.Collections; -import java.util.List; -import java.util.Map; - -import com.google.common.collect.Lists; -import com.wcohen.ss.AbstractStringDistance; - -import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.model.FieldList; - -/** - * For the rest of the fields delegate the compare measure to the second string library. - */ -public abstract class SortedSecondStringDistanceAlgo extends SecondStringDistanceAlgo { - - /** - * Instantiates a new sorted second string compare algo. - * - * @param weight - * the weight - * @param ssalgo - * the ssalgo - */ - protected SortedSecondStringDistanceAlgo(final double weight, final AbstractStringDistance ssalgo) { - super(weight, ssalgo); - } - - protected SortedSecondStringDistanceAlgo(final Map params, final AbstractStringDistance ssalgo){ - super(params.get("weight").doubleValue(), ssalgo); - } - - /* - * (non-Javadoc) - * - * @see eu.dnetlib.pace.compare.SecondStringDistanceAlgo#toList(eu.dnetlib.pace.model.Field) - */ - @Override - protected List toList(final Field list) { - FieldList fl = (FieldList) list; - List values = Lists.newArrayList(fl.stringList()); - Collections.sort(values); - return values; - } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SubStringLevenstein.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SubStringLevenstein.java deleted file mode 100644 index b788fade4..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SubStringLevenstein.java +++ /dev/null @@ -1,99 +0,0 @@ -package eu.dnetlib.pace.distance.algo; - -import eu.dnetlib.pace.distance.DistanceClass; -import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; -import org.apache.commons.lang.StringUtils; - -import com.wcohen.ss.AbstractStringDistance; - -import eu.dnetlib.pace.config.Type; -import eu.dnetlib.pace.model.Field; - -import java.util.Map; - -/** - * The Class SubStringLevenstein. - */ -@DistanceClass("SubStringLevenstein") -public class SubStringLevenstein extends SecondStringDistanceAlgo { - - /** The limit. */ - protected int limit; - - /** - * Instantiates a new sub string levenstein. - * - * @param w - * the w - */ - public SubStringLevenstein(final double w) { - super(w, new com.wcohen.ss.Levenstein()); - } - - public SubStringLevenstein(Map params){ - super(params, new com.wcohen.ss.Levenstein()); - this.limit = params.get("limit").intValue(); - } - - /** - * Instantiates a new sub string levenstein. - * - * @param w - * the w - * @param limit - * the limit - */ - public SubStringLevenstein(final double w, final int limit) { - super(w, new com.wcohen.ss.Levenstein()); - this.limit = limit; - } - - /** - * Instantiates a new sub string levenstein. - * - * @param w - * the w - * @param limit - * the limit - * @param ssalgo - * the ssalgo - */ - protected SubStringLevenstein(final double w, final int limit, final AbstractStringDistance ssalgo) { - super(w, ssalgo); - this.limit = limit; - } - - /* - * (non-Javadoc) - * - * @see eu.dnetlib.pace.compare.SecondStringDistanceAlgo#compare(eu.dnetlib.pace.model.Field, eu.dnetlib.pace.model.Field) - */ - @Override - public double distance(final Field a, final Field b) { - if (a.getType().equals(Type.String) && b.getType().equals(Type.String)) - return distance(StringUtils.left(a.stringValue(), limit), StringUtils.left(b.stringValue(), limit)); - - throw new IllegalArgumentException("invalid types\n- A: " + a.toString() + "\n- B: " + b.toString()); - } - - /* - * (non-Javadoc) - * - * @see eu.dnetlib.pace.compare.DistanceAlgo#getWeight() - */ - @Override - public double getWeight() { - return super.weight; - } - - /* - * (non-Javadoc) - * - * @see eu.dnetlib.pace.compare.SecondStringDistanceAlgo#normalize(double) - */ - @Override - protected double normalize(final double d) { - return 1 / Math.pow(Math.abs(d) + 1, 0.1); - } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/UrlMatcher.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/UrlMatcher.java deleted file mode 100644 index eacfdc08f..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/UrlMatcher.java +++ /dev/null @@ -1,59 +0,0 @@ -package eu.dnetlib.pace.distance.algo; - -import eu.dnetlib.pace.distance.DistanceClass; -import eu.dnetlib.pace.model.Field; -import org.apache.commons.lang.StringUtils; - -import java.net.MalformedURLException; -import java.net.URL; -import java.util.Map; - -@DistanceClass("urlMatcher") -public class UrlMatcher extends Levenstein { - - private Map params; - - public UrlMatcher(Map params){ - super(params); - this.params = params; - } - - public UrlMatcher(double weight, Map params) { - super(weight); - this.params = params; - } - - public void setParams(Map params) { - this.params = params; - } - - @Override - public double distance(Field a, Field b) { - - final URL urlA = asUrl(getFirstValue(a)); - final URL urlB = asUrl(getFirstValue(b)); - - if (!urlA.getHost().equalsIgnoreCase(urlB.getHost())) { - return 0.0; - } - - Double hostW = params.get("host").doubleValue(); - Double pathW = params.get("path").doubleValue(); - - if (StringUtils.isBlank(urlA.getPath()) || StringUtils.isBlank(urlB.getPath())) { - return hostW * 0.5; - } - - return hostW + pathW * super.distance(urlA.getPath(), urlB.getPath()); - } - - private URL asUrl(final String value) { - try { - return new URL(value); - } catch (MalformedURLException e) { - // should not happen as checked by pace typing - throw new IllegalStateException("invalid URL: " + value); - } - } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/ConditionEval.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/ConditionEval.java deleted file mode 100644 index d3fcee59a..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/ConditionEval.java +++ /dev/null @@ -1,56 +0,0 @@ -package eu.dnetlib.pace.distance.eval; - -import eu.dnetlib.pace.model.Field; - -/** - * Created by claudio on 09/03/16. - */ -public class ConditionEval { - - private String cond; - - private Field a; - - private Field b; - - private int result; - - public ConditionEval(final String cond, final Field a, final Field b, final int result) { - this.cond = cond; - this.a = a; - this.b = b; - this.result = result; - } - - public Field getA() { - return a; - } - - public void setA(final Field a) { - this.a = a; - } - - public Field getB() { - return b; - } - - public void setB(final Field b) { - this.b = b; - } - - public int getResult() { - return result; - } - - public void setResult(final int result) { - this.result = result; - } - - public String getCond() { - return cond; - } - - public void setCond(final String cond) { - this.cond = cond; - } -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/ConditionEvalMap.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/ConditionEvalMap.java deleted file mode 100644 index a851596b3..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/ConditionEvalMap.java +++ /dev/null @@ -1,38 +0,0 @@ -package eu.dnetlib.pace.distance.eval; - -import java.util.HashMap; - -import com.google.common.base.Predicate; -import com.google.common.collect.Iterables; - -/** - * Created by claudio on 09/03/16. - */ -public class ConditionEvalMap extends HashMap { - - - public ConditionEvalMap mergeFrom(ConditionEvalMap map) { - putAll(map); - return this; - } - - public boolean anyNegative() { - return values().stream() - .allMatch(ec -> ec.getResult() < 0); - } - - public boolean isZero() { - return result() == 0; - } - - public int result() { - int res = 0; - for(ConditionEval ec : values()) { - final int verify = ec.getResult(); - if (verify < 0) return -1; - res += verify; - } - return res; - } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/DistanceEval.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/DistanceEval.java deleted file mode 100644 index ef3c4da22..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/DistanceEval.java +++ /dev/null @@ -1,56 +0,0 @@ -package eu.dnetlib.pace.distance.eval; - -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.model.FieldDef; - -/** - * Created by claudio on 09/03/16. - */ -public class DistanceEval { - - private FieldDef fieldDef; - - private Field a; - - private Field b; - - private double distance = 0.0; - - public DistanceEval(final FieldDef fieldDef, final Field a, final Field b) { - this.fieldDef = fieldDef; - this.a = a; - this.b = b; - } - - public Field getA() { - return a; - } - - public void setA(final Field a) { - this.a = a; - } - - public Field getB() { - return b; - } - - public void setB(final Field b) { - this.b = b; - } - - public FieldDef getFieldDef() { - return fieldDef; - } - - public void setFieldDef(final FieldDef fieldDef) { - this.fieldDef = fieldDef; - } - - public double getDistance() { - return distance; - } - - public void setDistance(final double distance) { - this.distance = distance; - } -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/CondDef.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/CondDef.java deleted file mode 100644 index 620984f08..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/CondDef.java +++ /dev/null @@ -1,50 +0,0 @@ -package eu.dnetlib.pace.model; - -import java.io.IOException; -import java.io.Serializable; -import java.util.List; - -import eu.dnetlib.pace.condition.*; -import eu.dnetlib.pace.config.PaceConfig; -import eu.dnetlib.pace.util.PaceException; -import eu.dnetlib.pace.util.PaceResolver; -import org.codehaus.jackson.map.ObjectMapper; - -public class CondDef implements Serializable { - - private String name; - - private List fields; - - public CondDef() {} - - public ConditionAlgo conditionAlgo(final List fields) { - return PaceConfig.resolver.getConditionAlgo(getName(), fields); - } - - public String getName() { - return name; - } - - public void setName(final String name) { - this.name = name; - } - - public List getFields() { - return fields; - } - - public void setFields(final List fields) { - this.fields = fields; - } - - @Override - public String toString() { - try { - return new ObjectMapper().writeValueAsString(this); - } catch (IOException e) { - throw new PaceException("unable to serialise " + this.getClass().getName(), e); - } - } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java index c76b63716..12c578c11 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java @@ -3,15 +3,10 @@ package eu.dnetlib.pace.model; import com.google.common.base.Splitter; import com.google.common.collect.Lists; import com.google.gson.Gson; -import eu.dnetlib.pace.config.PaceConfig; import eu.dnetlib.pace.config.Type; -import eu.dnetlib.pace.distance.DistanceAlgo; -import eu.dnetlib.pace.util.PaceResolver; import java.io.Serializable; -import java.util.HashMap; import java.util.List; -import java.util.Map; /** * The schema is composed by field definitions (FieldDef). Each field has a type, a name, and an associated compare algorithm. @@ -26,16 +21,6 @@ public class FieldDef implements Serializable { private Type type; - private boolean ignoreMissing; - - public boolean isIgnoreMissing() { - return ignoreMissing; - } - - public void setIgnoreMissing(boolean ignoreMissing) { - this.ignoreMissing = ignoreMissing; - } - private boolean overrideMatch; /** @@ -48,8 +33,6 @@ public class FieldDef implements Serializable { */ private int length = -1; - private Map params; - public FieldDef() {} // def apply(s: String): Field[A] @@ -110,14 +93,6 @@ public class FieldDef implements Serializable { this.length = length; } - public Map getParams() { - return params; - } - - public void setParams(final Map params) { - this.params = params; - } - public void setName(String name) { this.name = name; } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AlwaysMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AlwaysMatch.java index 7e4b18788..ff1cd9760 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AlwaysMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AlwaysMatch.java @@ -1,8 +1,7 @@ package eu.dnetlib.pace.tree; import com.wcohen.ss.AbstractStringDistance; -import eu.dnetlib.pace.distance.DistanceClass; -import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; +import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.tree.support.AbstractComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; @@ -24,7 +23,7 @@ public class AlwaysMatch extends AbstractComparator { } @Override - public double distance(final String a, final String b) { + public double compare(final Field a, final Field b) { return 1.0; } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/DoiExactMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/DoiExactMatch.java new file mode 100644 index 000000000..d3ada9a47 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/DoiExactMatch.java @@ -0,0 +1,28 @@ +package eu.dnetlib.pace.tree; + +import java.util.List; +import java.util.Map; + +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.tree.support.ComparatorClass; + +/** + * The Class ExactMatch. + * + * @author claudio + */ +@ComparatorClass("doiExactMatch") +public class DoiExactMatch extends ExactMatchIgnoreCase { + + public final String PREFIX = "(http:\\/\\/dx\\.doi\\.org\\/)|(doi:)"; + + public DoiExactMatch(final Map params) { + super(params); + } + + @Override + protected String getValue(final Field f) { + return super.getValue(f).replaceAll(PREFIX, ""); + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/DomainExactMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/DomainExactMatch.java new file mode 100644 index 000000000..4132e1eba --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/DomainExactMatch.java @@ -0,0 +1,29 @@ +package eu.dnetlib.pace.tree; + +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.tree.support.ComparatorClass; + +import java.net.MalformedURLException; +import java.net.URL; +import java.util.Map; + +@ComparatorClass("domainExactMatch") +public class DomainExactMatch extends ExactMatchIgnoreCase { + + public DomainExactMatch(final Map params) { + super(params); + } + + @Override + protected String getValue(final Field f) { + try { + return asUrl(super.getValue(f)).getHost(); + } catch (MalformedURLException e) { + return ""; + } + } + + private URL asUrl(final String value) throws MalformedURLException { + return new URL(value); + } +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatchIgnoreCase.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatchIgnoreCase.java new file mode 100644 index 000000000..d51a1bdde --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatchIgnoreCase.java @@ -0,0 +1,31 @@ +package eu.dnetlib.pace.tree; + +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.ComparatorClass; + +import java.util.Map; + +@ComparatorClass("exactMatchIgnoreCase") +public class ExactMatchIgnoreCase extends AbstractComparator { + + public ExactMatchIgnoreCase(Map params) { + super(params); + } + + @Override + public double compare(Field a, Field b) { + + final String fa = getValue(a); + final String fb = getValue(b); + + if (fa.isEmpty() || fb.isEmpty()) + return -1; + + return fa.equalsIgnoreCase(fb) ? 1 : 0; + } + + protected String getValue(final Field f) { + return getFirstValue(f); + } +} \ No newline at end of file diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinkler.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinkler.java index f2a696b47..76f1fd200 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinkler.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinkler.java @@ -1,12 +1,9 @@ package eu.dnetlib.pace.tree; import com.wcohen.ss.AbstractStringDistance; -import eu.dnetlib.pace.distance.DistanceClass; -import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; import eu.dnetlib.pace.tree.support.AbstractComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; -import java.io.Serializable; import java.util.Map; //case class JaroWinkler(w: Double) extends SecondStringDistanceAlgo(w, new com.wcohen.ss.JaroWinkler()) diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerNormalizedName.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerNormalizedName.java index b6b593de7..85f657f25 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerNormalizedName.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerNormalizedName.java @@ -1,9 +1,6 @@ package eu.dnetlib.pace.tree; import com.wcohen.ss.AbstractStringDistance; -import eu.dnetlib.pace.common.AbstractPaceFunctions; -import eu.dnetlib.pace.distance.DistanceClass; -import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; import eu.dnetlib.pace.tree.support.AbstractComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerTitle.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerTitle.java index 99d7a8668..23c4cfabb 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerTitle.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerTitle.java @@ -1,8 +1,6 @@ package eu.dnetlib.pace.tree; import com.wcohen.ss.AbstractStringDistance; -import eu.dnetlib.pace.distance.DistanceClass; -import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; import eu.dnetlib.pace.tree.support.AbstractComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinkler.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinkler.java index d4d5b8f1e..7d6e33fc2 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinkler.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinkler.java @@ -1,8 +1,6 @@ package eu.dnetlib.pace.tree; import com.wcohen.ss.AbstractStringDistance; -import eu.dnetlib.pace.distance.DistanceClass; -import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; import eu.dnetlib.pace.tree.support.AbstractComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinklerTitle.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinklerTitle.java index 41a38c1ee..6ddd2c939 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinklerTitle.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinklerTitle.java @@ -1,8 +1,6 @@ package eu.dnetlib.pace.tree; import com.wcohen.ss.AbstractStringDistance; -import eu.dnetlib.pace.distance.DistanceClass; -import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; import eu.dnetlib.pace.tree.support.AbstractComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2Levenstein.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2Levenstein.java index 1a598ecbe..9d80d7028 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2Levenstein.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2Levenstein.java @@ -1,8 +1,6 @@ package eu.dnetlib.pace.tree; import com.wcohen.ss.AbstractStringDistance; -import eu.dnetlib.pace.distance.DistanceClass; -import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; import eu.dnetlib.pace.tree.support.AbstractComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Levenstein.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Levenstein.java index ada70fdc0..d8706c911 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Levenstein.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Levenstein.java @@ -1,8 +1,6 @@ package eu.dnetlib.pace.tree; import com.wcohen.ss.AbstractStringDistance; -import eu.dnetlib.pace.distance.DistanceClass; -import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; import eu.dnetlib.pace.tree.support.AbstractComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitle.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitle.java index 45459f4dc..0d444e14d 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitle.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitle.java @@ -1,8 +1,6 @@ package eu.dnetlib.pace.tree; import com.wcohen.ss.AbstractStringDistance; -import eu.dnetlib.pace.distance.DistanceClass; -import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; import eu.dnetlib.pace.tree.support.AbstractComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; import org.apache.commons.logging.Log; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitleIgnoreVersion.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitleIgnoreVersion.java index 342cee753..9413eb555 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitleIgnoreVersion.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitleIgnoreVersion.java @@ -1,8 +1,6 @@ package eu.dnetlib.pace.tree; import com.wcohen.ss.AbstractStringDistance; -import eu.dnetlib.pace.distance.DistanceClass; -import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; import eu.dnetlib.pace.tree.support.AbstractComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/MustBeDifferent.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/MustBeDifferent.java index d7251f18e..4b2e70708 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/MustBeDifferent.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/MustBeDifferent.java @@ -1,8 +1,6 @@ package eu.dnetlib.pace.tree; import com.wcohen.ss.AbstractStringDistance; -import eu.dnetlib.pace.distance.DistanceClass; -import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; import eu.dnetlib.pace.tree.support.AbstractComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/NullDistanceAlgo.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/NullDistanceAlgo.java index 7c5c3f4ae..47d45a160 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/NullDistanceAlgo.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/NullDistanceAlgo.java @@ -1,7 +1,5 @@ package eu.dnetlib.pace.tree; -import eu.dnetlib.pace.distance.DistanceAlgo; -import eu.dnetlib.pace.distance.DistanceClass; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.tree.support.Comparator; import eu.dnetlib.pace.tree.support.ComparatorClass; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/PidMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/PidMatch.java new file mode 100644 index 000000000..519c28d10 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/PidMatch.java @@ -0,0 +1,63 @@ +package eu.dnetlib.pace.tree; + +import com.google.common.collect.Sets; +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.FieldList; +import eu.dnetlib.pace.model.adaptor.Pid; +import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.ComparatorClass; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +@ComparatorClass("pidMatch") +public class PidMatch extends AbstractComparator { + + private static final Log log = LogFactory.getLog(PidMatch.class); + private Map params; + + public PidMatch(final Map params) { + super(params); + this.params = params; + } + + @Override + public double compare(final Field a, final Field b) { + + final List sa = ((FieldList) a).stringList(); + final List sb = ((FieldList) b).stringList(); + + final List pal = Pid.fromOafJson(sa); + final List pbl = Pid.fromOafJson(sb); + + if (pal.isEmpty() || pbl.isEmpty()) { + return -1; + } + + final Set pidAset = toHashSet(pal); + final Set pidBset = toHashSet(pbl); + + int incommon = Sets.intersection(pidAset, pidBset).size(); + int simDiff = Sets.symmetricDifference(pidAset, pidBset).size(); + + if (incommon + simDiff == 0) { + return 0.0; + } + + return (double)incommon / (incommon + simDiff) > params.getOrDefault("threshold", 0.5).doubleValue() ? 1 : 0; + + } + + //lowercase + normalization of the pid before adding it to the set + private Set toHashSet(List pbl) { + + return pbl.stream() + .map(pid -> pid.getType() + normalizePid(pid.getValue())) + .collect(Collectors.toCollection(HashSet::new)); + } +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SizeMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SizeMatch.java new file mode 100644 index 000000000..e79f9185e --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SizeMatch.java @@ -0,0 +1,50 @@ +package eu.dnetlib.pace.tree; + +import java.util.List; +import java.util.Map; + +import com.google.common.collect.Iterables; + +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.ComparatorClass; + +/** + * Returns true if the number of values in the fields is the same. + * + * @author claudio + */ +@ComparatorClass("sizeMatch") +public class SizeMatch extends AbstractComparator { + + /** + * Instantiates a new size match. + * + * @param params + * the parameters + */ + public SizeMatch(final Map params) { + super(params); + } + + @Override + public double compare(final Field a, final Field b) { + + if (a.isEmpty() || b.isEmpty()) + return -1; + + return Iterables.size(a) == Iterables.size(b) ? 1 : 0; + } + + /** + * Checks if is empty. + * + * @param a + * the a + * @return true, if is empty + */ + protected boolean isEmpty(final Iterable a) { + return (a == null) || Iterables.isEmpty(a); + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SortedJaroWinkler.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SortedJaroWinkler.java index e66ad0185..4b2eb83f1 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SortedJaroWinkler.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SortedJaroWinkler.java @@ -1,8 +1,6 @@ package eu.dnetlib.pace.tree; import com.wcohen.ss.AbstractStringDistance; -import eu.dnetlib.pace.distance.DistanceClass; -import eu.dnetlib.pace.distance.algo.SortedSecondStringDistanceAlgo; import eu.dnetlib.pace.tree.support.AbstractSortedComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SortedLevel2JaroWinkler.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SortedLevel2JaroWinkler.java index 952414035..f80a268e2 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SortedLevel2JaroWinkler.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SortedLevel2JaroWinkler.java @@ -1,8 +1,6 @@ package eu.dnetlib.pace.tree; import com.wcohen.ss.AbstractStringDistance; -import eu.dnetlib.pace.distance.DistanceClass; -import eu.dnetlib.pace.distance.algo.SortedSecondStringDistanceAlgo; import eu.dnetlib.pace.tree.support.AbstractSortedComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SubStringLevenstein.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SubStringLevenstein.java index d412f3941..2ea7bd89d 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SubStringLevenstein.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SubStringLevenstein.java @@ -2,8 +2,6 @@ package eu.dnetlib.pace.tree; import com.wcohen.ss.AbstractStringDistance; import eu.dnetlib.pace.config.Type; -import eu.dnetlib.pace.distance.DistanceClass; -import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.tree.support.AbstractComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/TitleVersionMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/TitleVersionMatch.java new file mode 100644 index 000000000..66432627a --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/TitleVersionMatch.java @@ -0,0 +1,39 @@ +package eu.dnetlib.pace.tree; + +import java.util.List; +import java.util.Map; + +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.ComparatorClass; + +/** + * Returns true if the titles in the given documents contains the same numbers, false otherwise. + * + * @author claudio + * + */ +@ComparatorClass("titleVersionMatch") +public class TitleVersionMatch extends AbstractComparator { + + public TitleVersionMatch(final Map params) { + super(params); + } + + @Override + public double compare(final Field a, final Field b) { + final String valueA = getFirstValue(a); + final String valueB = getFirstValue(b); + + if (valueA.isEmpty() || valueB.isEmpty()) + return -1; + + return notNull(valueA) && notNull(valueB) && !checkNumbers(valueA, valueB) ? 1 : 0; + } + + @Override + public String toString() { + return getClass().getSimpleName() + ":" + super.toString(); + } + +} \ No newline at end of file diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/UrlMatcher.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/UrlMatcher.java index d559e0647..225f9cafe 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/UrlMatcher.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/UrlMatcher.java @@ -1,6 +1,5 @@ package eu.dnetlib.pace.tree; -import eu.dnetlib.pace.distance.DistanceClass; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.tree.support.ComparatorClass; import org.apache.commons.lang.StringUtils; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/YearMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/YearMatch.java new file mode 100644 index 000000000..fbb026371 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/YearMatch.java @@ -0,0 +1,50 @@ +package eu.dnetlib.pace.tree; + +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.ComparatorClass; +import org.apache.commons.lang.StringUtils; + +import java.util.Map; + +/** + * Returns true if the year of the date field in the given documents are the same, false when any of the two is invalid or it's missing. + * + * @author claudio + */ +@ComparatorClass("yearMatch") +public class YearMatch extends AbstractComparator { + + private int limit = 4; + + public YearMatch(final Map params) { + super(params); + } + + @Override + public double compare(final Field a, final Field b) { + final String valueA = getNumbers(getFirstValue(a)); + final String valueB = getNumbers(getFirstValue(b)); + + if (valueA.isEmpty() || valueB.isEmpty()) + return -1; + + final boolean lengthMatch = checkLength(valueA) && checkLength(valueB); + final boolean onemissing = valueA.isEmpty() || valueB.isEmpty(); + + return lengthMatch && valueA.equals(valueB) || onemissing ? 1 : 0; + } + + protected boolean checkLength(final String s) { + return s.length() == limit; + } + + protected String getFirstValue(final Field value) { + return (value != null) && !value.isEmpty() ? StringUtils.left(value.stringValue(), limit) : ""; + } + + @Override + public String toString() { + return getClass().getSimpleName() + ":" + super.toString(); + } +} \ No newline at end of file diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractComparator.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractComparator.java index ef9abebe4..f6ad13758 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractComparator.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractComparator.java @@ -19,6 +19,10 @@ public abstract class AbstractComparator extends AbstractPaceFunctions implement private Map params; + protected AbstractComparator(Map params) { + this.params = params; + } + protected AbstractComparator(Map params, final AbstractStringDistance ssalgo){ this.params = params; this.weight = 1.0; @@ -49,7 +53,9 @@ public abstract class AbstractComparator extends AbstractPaceFunctions implement * the d * @return the double */ - protected abstract double normalize(double d); + protected double normalize(double d) { + return d; + } /** * Distance. diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/Comparator.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/Comparator.java index ea4ad7e9b..64ff4f386 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/Comparator.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/Comparator.java @@ -4,6 +4,10 @@ import eu.dnetlib.pace.model.Field; public interface Comparator { + /* + * return : -1 -> can't decide (missing field) + * >0 -> similarity degree (depends on the algorithm) + * */ public double compare(Field a, Field b); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java index 4af9f8126..72945363a 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java @@ -3,7 +3,6 @@ package eu.dnetlib.pace.tree.support; import eu.dnetlib.pace.config.PaceConfig; import eu.dnetlib.pace.model.MapDocument; import eu.dnetlib.pace.util.PaceException; -import org.apache.commons.math3.stat.descriptive.DescriptiveStatistics; import org.codehaus.jackson.map.ObjectMapper; import java.io.IOException; @@ -36,12 +35,10 @@ public class TreeNodeDef implements Serializable { public TreeNodeDef() { } - public double evaluate(MapDocument doc1, MapDocument doc2) { + public TreeNodeStats evaluate(MapDocument doc1, MapDocument doc2) { - DescriptiveStatistics stats = new DescriptiveStatistics(); - double sumWeights = 0.0; //for the weighted mean - - int missCount = 0; //counter for the number of misses + TreeNodeStats stats = new TreeNodeStats(); + stats.setFieldsCount(fields.size()); for (FieldConf fieldConf : fields) { @@ -49,40 +46,20 @@ public class TreeNodeDef implements Serializable { double result = comparator(fieldConf).compare(doc1.getFieldMap().get(fieldConf.getField()), doc2.getFieldMap().get(fieldConf.getField())); - if (result >= 0.0) { //if the field is not missing - stats.addValue(weight * result); - sumWeights += weight; //sum weights, to be used in case of weighted mean - } - else { //if the field is missing - missCount += 1; - if (!fieldConf.isIgnoreMissing()){ //if the miss has not to be ignored - stats.addValue(weight * 0); - sumWeights += weight; + if (result == -1) { //if the field is missing + stats.incrementMissCount(); + if (!fieldConf.isIgnoreMissing()) { + stats.incrementWeightsSum(weight); } } + else { //if the field is not missing + stats.incrementScoresSum(weight * result); + stats.incrementWeightsSum(weight); + } + } - //global ignoremissing (if one of the field is missing, return undefined) - if (!ignoreMissing && missCount>0) { - return -1; - } - - switch (aggregation){ - - case AVG: - return stats.getMean(); - case SUM: - return stats.getSum(); - case MAX: - return stats.getMax(); - case MIN: - return stats.getMin(); - case WEIGHTED_MEAN: - return stats.getSum()/sumWeights; - default: - return 0.0; - } - + return stats; } private Comparator comparator(final FieldConf field){ diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeStats.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeStats.java new file mode 100644 index 000000000..1ae899637 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeStats.java @@ -0,0 +1,86 @@ +package eu.dnetlib.pace.tree.support; + +import org.apache.commons.math3.stat.descriptive.DescriptiveStatistics; + +import java.io.Serializable; + +public class TreeNodeStats implements Serializable { + + private DescriptiveStatistics stats; + private int missCount = 0; + private int fieldsCount = 0; + private double weightsSum = 0.0; + + public TreeNodeStats(){ + this.stats = new DescriptiveStatistics(); + } + + public TreeNodeStats(int missCount, int fieldsCount, double weightsSum) { + this.missCount = missCount; + this.fieldsCount = fieldsCount; + this.weightsSum = weightsSum; + } + + public DescriptiveStatistics getStats() { + return stats; + } + + public void setStats(DescriptiveStatistics stats) { + this.stats = stats; + } + + public int getMissCount() { + return missCount; + } + + public void setMissCount(int missCount) { + this.missCount = missCount; + } + + public int getFieldsCount() { + return fieldsCount; + } + + public void setFieldsCount(int fields) { + this.fieldsCount = fields; + } + + public double getWeightsSum() { + return weightsSum; + } + + public void setWeightsSum(double weightsSum) { + this.weightsSum = weightsSum; + } + + public void incrementWeightsSum(double delta){ + this.weightsSum += delta; + } + + public void incrementMissCount(){ + this.missCount += 1; + } + + public void incrementScoresSum(double delta){ + this.stats.addValue(delta); + } + + public double getFinalScore(AggType aggregation){ + + switch (aggregation){ + case AVG: + return stats.getMean(); + case SUM: + return stats.getSum(); + case MAX: + return stats.getMax(); + case MIN: + return stats.getMin(); + case WEIGHTED_MEAN: + return stats.getSum()/weightsSum; + default: + return 0.0; + } + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeProcessor.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeProcessor.java new file mode 100644 index 000000000..794511ac3 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeProcessor.java @@ -0,0 +1,58 @@ +package eu.dnetlib.pace.tree.support; + +import eu.dnetlib.pace.config.Config; +import eu.dnetlib.pace.model.*; +import eu.dnetlib.pace.util.PaceException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.util.Map; + +/** + * The compare between two documents is given by the weighted mean of the field distances + */ +public class TreeProcessor { + + private static final Log log = LogFactory.getLog(TreeProcessor.class); + + private Config config; + + public TreeProcessor(final Config config) { + this.config = config; + } + + public boolean compare(final MapDocument a, final MapDocument b) { + + //evaluate the decision tree + return evaluateTree(a, b, config.decisionTree()) == MatchType.MATCH; + } + + public MatchType evaluateTree(final MapDocument doc1, final MapDocument doc2, final Map decisionTree){ + + String current = "start"; + + while (MatchType.parse(current)==MatchType.UNDEFINED) { + + TreeNodeDef currentNode = decisionTree.get(current); + //throw an exception if the node doesn't exist + if (currentNode == null) + throw new PaceException("The Tree Node doesn't exist: " + current); + + TreeNodeStats stats = currentNode.evaluate(doc1, doc2); + + if (!currentNode.isIgnoreMissing() && stats.getMissCount()>0) { + current = currentNode.getUndefined(); + } + else if (stats.getFinalScore(currentNode.getAggregation()) >= currentNode.getThreshold()) { + current = currentNode.getPositive(); + } + else { + current = currentNode.getNegative(); + } + + } + + return MatchType.parse(current); + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java index b1348e144..2dfa9ae89 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java @@ -5,7 +5,7 @@ import eu.dnetlib.pace.clustering.NGramUtils; import eu.dnetlib.pace.config.DedupConfig; import eu.dnetlib.pace.config.WfConfig; //import eu.dnetlib.pace.distance.PaceDocumentDistance; -import eu.dnetlib.pace.distance.PairwiseComparison; +import eu.dnetlib.pace.tree.support.TreeProcessor; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.model.MapDocument; import eu.dnetlib.pace.model.MapDocumentComparator; @@ -150,14 +150,10 @@ public class BlockProcessor { if (!idCurr.equals(idPivot) && (fieldCurr != null)) { - final PairwiseComparison pairwiseComparison = new PairwiseComparison(dedupConf); + final TreeProcessor treeProcessor = new TreeProcessor(dedupConf); - emitOutput(pairwiseComparison.compare(pivot, curr), idPivot, idCurr, context); + emitOutput(treeProcessor.compare(pivot, curr), idPivot, idCurr, context); -// final ScoreResult sr = similarity(algo, pivot, curr); -//// log.info(sr.toString()+"SCORE "+ sr.getScore()); -// emitOutput(sr, idPivot, idCurr, context); -// i++; } } } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/PaceResolver.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/PaceResolver.java index c3b16c83e..8c670a85c 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/PaceResolver.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/PaceResolver.java @@ -2,31 +2,21 @@ package eu.dnetlib.pace.util; import eu.dnetlib.pace.clustering.ClusteringClass; import eu.dnetlib.pace.clustering.ClusteringFunction; -import eu.dnetlib.pace.condition.ConditionAlgo; -import eu.dnetlib.pace.condition.ConditionClass; -import eu.dnetlib.pace.distance.DistanceAlgo; -import eu.dnetlib.pace.distance.DistanceClass; -import eu.dnetlib.pace.model.FieldDef; import eu.dnetlib.pace.tree.support.Comparator; import eu.dnetlib.pace.tree.support.ComparatorClass; import org.reflections.Reflections; import java.io.Serializable; import java.lang.reflect.InvocationTargetException; -import java.util.List; import java.util.Map; import java.util.stream.Collectors; public class PaceResolver implements Serializable { public static final Reflections CLUSTERING_RESOLVER = new Reflections("eu.dnetlib.pace.clustering"); - public static final Reflections CONDITION_RESOLVER = new Reflections("eu.dnetlib.pace.condition"); - public static final Reflections DISTANCE_RESOLVER = new Reflections("eu.dnetlib.pace.compare.algo"); public static final Reflections COMPARATOR_RESOLVER = new Reflections("eu.dnetlib.pace.tree"); private final Map> clusteringFunctions; - private final Map> conditionAlgos; - private final Map> distanceAlgos; private final Map> comparators; public PaceResolver() { @@ -35,14 +25,6 @@ public class PaceResolver implements Serializable { .filter(ClusteringFunction.class::isAssignableFrom) .collect(Collectors.toMap(cl -> cl.getAnnotation(ClusteringClass.class).value(), cl -> (Class)cl)); - this.conditionAlgos = CONDITION_RESOLVER.getTypesAnnotatedWith(ConditionClass.class).stream() - .filter(ConditionAlgo.class::isAssignableFrom) - .collect(Collectors.toMap(cl -> cl.getAnnotation(ConditionClass.class).value(), cl -> (Class)cl)); - - this.distanceAlgos = DISTANCE_RESOLVER.getTypesAnnotatedWith(DistanceClass.class).stream() - .filter(DistanceAlgo.class::isAssignableFrom) - .collect(Collectors.toMap(cl -> cl.getAnnotation(DistanceClass.class).value(), cl -> (Class)cl)); - this.comparators = COMPARATOR_RESOLVER.getTypesAnnotatedWith(ComparatorClass.class).stream() .filter(Comparator.class::isAssignableFrom) .collect(Collectors.toMap(cl -> cl.getAnnotation(ComparatorClass.class).value(), cl -> (Class)cl)); @@ -56,22 +38,6 @@ public class PaceResolver implements Serializable { } } - public DistanceAlgo getDistanceAlgo(String name, Map params) throws PaceException { - try { - return distanceAlgos.get(name).getDeclaredConstructor(Map.class).newInstance(params); - } catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) { - throw new PaceException(name + " not found ", e); - } - } - - public ConditionAlgo getConditionAlgo(String name, List fields) throws PaceException { - try { - return conditionAlgos.get(name).getDeclaredConstructor(String.class, List.class).newInstance(name, fields); - } catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) { - throw new PaceException(name + " not found ", e); - } - } - public Comparator getComparator(String name, Map params) throws PaceException { try { return comparators.get(name).getDeclaredConstructor(Map.class).newInstance(params); diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/DistanceAlgoTest.java similarity index 98% rename from dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java rename to dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/DistanceAlgoTest.java index ec55b8713..10042038f 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/DistanceAlgoTest.java @@ -1,7 +1,7 @@ -package eu.dnetlib.pace.distance; +package eu.dnetlib.pace.comparators; import eu.dnetlib.pace.clustering.NGramUtils; -import eu.dnetlib.pace.distance.algo.JaroWinklerNormalizedName; +import eu.dnetlib.pace.tree.JaroWinklerNormalizedName; import org.junit.Before; import org.junit.Test; diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/condition/ConditionTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/condition/ConditionTest.java deleted file mode 100644 index 57047d8c9..000000000 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/condition/ConditionTest.java +++ /dev/null @@ -1,7 +0,0 @@ -package eu.dnetlib.pace.condition; - -import eu.dnetlib.pace.AbstractPaceTest; - -public class ConditionTest extends AbstractPaceTest { - -} diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/org.curr.conf b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/org.curr.conf index 53768c07c..a5b28ce77 100644 --- a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/org.curr.conf +++ b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/org.curr.conf @@ -12,16 +12,16 @@ }, "pace" : { "clustering" : [ - { "name" : "sortedngrampairs", "fields" : [ "legalname" ], "params" : { "max" : 2, "ngramLen" : "3"} }, - { "name" : "suffixprefix", "fields" : [ "legalname" ], "params" : { "max" : 1, "len" : "3" } }, - { "name" : "urlclustering", "fields" : [ "websiteurl" ], "params" : { } } + { "name" : "sortedngrampairs", "fieldsCount" : [ "legalname" ], "params" : { "max" : 2, "ngramLen" : "3"} }, + { "name" : "suffixprefix", "fieldsCount" : [ "legalname" ], "params" : { "max" : 1, "len" : "3" } }, + { "name" : "urlclustering", "fieldsCount" : [ "websiteurl" ], "params" : { } } ], "sufficientConditions" : [ - { "name" : "exactMatch", "fields" : [ "gridid" ] } + { "name" : "exactMatch", "fieldsCount" : [ "gridid" ] } ], "necessaryConditions" : [ - { "name" : "exactMatch", "fields" : [ "country" ] }, - { "name" : "DomainExactMatch", "fields" : [ "websiteurl" ] } + { "name" : "exactMatch", "fieldsCount" : [ "country" ] }, + { "name" : "DomainExactMatch", "fieldsCount" : [ "websiteurl" ] } ], "model" : [ { "name" : "legalname", "algo" : "Null", "type" : "String", "weight" : "0", "ignoreMissing" : "false", "path" : "organization/metadata/legalname/value" }, From afd2b398d5dbed2752e32cdfa0fea9b55755452a Mon Sep 17 00:00:00 2001 From: miconis Date: Fri, 9 Aug 2019 15:42:41 +0200 Subject: [PATCH 090/449] optimize imports --- .../src/main/java/eu/dnetlib/pace/config/DedupConfig.java | 1 - 1 file changed, 1 deletion(-) diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java index f1cb9a37e..f369df3f6 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java @@ -15,7 +15,6 @@ import org.apache.commons.io.IOUtils; import com.google.common.collect.Maps; -import eu.dnetlib.pace.condition.ConditionAlgo; import eu.dnetlib.pace.model.ClusteringDef; import eu.dnetlib.pace.model.FieldDef; import org.apache.commons.logging.Log; From aed81e4cfa608125a6ead38ffcb51761f30a3900 Mon Sep 17 00:00:00 2001 From: miconis Date: Wed, 25 Sep 2019 09:53:06 +0200 Subject: [PATCH 091/449] translation map updated --- .../main/resources/eu/dnetlib/pace/config/translation_map.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/translation_map.csv b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/translation_map.csv index c74b35786..8ad199615 100644 --- a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/translation_map.csv +++ b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/translation_map.csv @@ -38,7 +38,7 @@ key::37;federation;federazione;fédération;федерация;federatie;ομο key::38;observatory;osservatorio;observatoire;обсерватория;observatorium;αστεροσκοπείο key::39;bureau;ufficio;bureau;офис;bureau;γραφείο key::40;company;impresa;compagnie;société;компания;bedrijf;εταιρία -key::41;polytechnic;politecnico;polytechnique;политехника;polytechnisch;πολυτεχνείο;universita politecnica;polytechnic university;politechnika;politechniki;university technology;university science technology +key::41;polytechnic;politecnico;polytechnique;политехника;polytechnisch;πολυτεχνείο;universita politecnica;polytechnic university;universidad politecnica;universitat politecnica;politechnika;politechniki;university technology;university science technology key::42;coalition;coalizione;coalition;коалиция;coalitie;συνασπισμός key::43;initiative;iniziativa;initiative;инициатива;initiatief;πρωτοβουλία key::44;academic;accademico;académique;universitaire;акадеческий academisch;ακαδημαϊκός;ακαδημαϊκή;ακαδημαϊκό;ακαδημαϊκές;ακαδημαϊκοί From 74c6462b491f73cfb801a2a23e02fe2fa896feef Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Wed, 25 Sep 2019 10:15:13 +0200 Subject: [PATCH 092/449] updated translation map and some tests --- .../eu/dnetlib/pace/config/translation_map.csv | 2 +- .../eu/dnetlib/pace/distance/DistanceAlgoTest.java | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/translation_map.csv b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/translation_map.csv index 8ad199615..e97fd5213 100644 --- a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/translation_map.csv +++ b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/translation_map.csv @@ -1,4 +1,4 @@ -key::1;university;università;università studi;universitario;universitaria;université;universitaire;universitaires;universidad;universitade;Universität;universitaet;Uniwersytet;университет;universiteit;πανεπιστήμιο;universitesi;universiteti +key::1;university;universita;universita studi;universitario;universitaria;université;universitaire;universitaires;universidad;universitade;Universität;universitaet;Uniwersytet;университет;universiteit;πανεπιστήμιο;universitesi;universiteti key::2;studies;studi;études;estudios;estudos;Studien;studia;исследования;studies;σπουδές key::3;advanced;superiore;supérieur;supérieure;supérieurs;supérieures;avancado;avancados;fortgeschrittene;fortgeschritten;zaawansowany;передовой;gevorderd;gevorderde;προχωρημένος;προχωρημένη;προχωρημένο;προχωρημένες;προχωρημένα;wyzsza key::4;institute;istituto;institut;instituto;instituto;Institut;instytut;институт;instituut;ινστιτούτο diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java index ec55b8713..3bf300bae 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java @@ -67,7 +67,7 @@ public class DistanceAlgoTest extends AbstractPaceFunctions { final JaroWinklerNormalizedName jaroWinklerNormalizedName = new JaroWinklerNormalizedName(params); double result = jaroWinklerNormalizedName.distance("University of New York", "Università di New York"); - assertEquals(result, 1.0); + assertEquals(1.0, result); } @Test @@ -77,7 +77,7 @@ public class DistanceAlgoTest extends AbstractPaceFunctions { double result = jaroWinklerNormalizedName.distance("Biblioteca dell'Universita di Bologna", "Università di Bologna"); System.out.println("result = " + result); - assertEquals(result, 0.0); + assertEquals(0.0, result); } @Test @@ -87,7 +87,7 @@ public class DistanceAlgoTest extends AbstractPaceFunctions { double result = jaroWinklerNormalizedName.distance("Universita degli studi di Pisa", "Universita di Pisa"); System.out.println("result = " + result); - assertEquals(result, 1.0); + assertEquals(1.0, result); } @Test @@ -97,7 +97,7 @@ public class DistanceAlgoTest extends AbstractPaceFunctions { double result = jaroWinklerNormalizedName.distance("RESEARCH PROMOTION FOUNDATION", "IDRYMA PROOTHISIS EREVNAS"); System.out.println("result = " + result); - assertEquals(result, 1.0); + assertEquals(1.0, result); } @Test @@ -107,7 +107,7 @@ public class DistanceAlgoTest extends AbstractPaceFunctions { double result = jaroWinklerNormalizedName.distance("Fonds zur Förderung der wissenschaftlichen Forschung (Austrian Science Fund)", "Fonds zur Förderung der wissenschaftlichen Forschung"); System.out.println("result = " + result); - assertTrue(result> 0.9); + assertTrue(result > 0.9); } @@ -118,7 +118,7 @@ public class DistanceAlgoTest extends AbstractPaceFunctions { double result = jaroWinklerNormalizedName.distance("Polytechnic University of Turin", "POLITECNICO DI TORINO"); System.out.println("result = " + result); - assertTrue(result> 0.9); + assertTrue(result > 0.9); } @Test From 254eb46809a20ce45848576a9039855ac0f1999b Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Wed, 25 Sep 2019 10:39:39 +0200 Subject: [PATCH 093/449] [maven-release-plugin] prepare release dnet-dedup-3.0.14 --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 9499750ca..1f3f23344 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 3.0.14-SNAPSHOT + 3.0.14 ../pom.xml From 07355d28115a471dc2cfa1cce1e4212f3012539e Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Wed, 25 Sep 2019 10:39:46 +0200 Subject: [PATCH 094/449] [maven-release-plugin] prepare for next development iteration --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 1f3f23344..34138cc85 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 3.0.14 + 3.0.15-SNAPSHOT ../pom.xml From 26b383fea259c8ad460d657d6d50a5adce113a2c Mon Sep 17 00:00:00 2001 From: miconis Date: Tue, 8 Oct 2019 14:53:52 +0200 Subject: [PATCH 095/449] translation map moved in json configuration, support for synonyms added in the configuration, now the configuration is argument of conditions, distancealgos and clusteringfunctions --- .../AbstractClusteringFunction.java | 7 +- .../eu/dnetlib/pace/clustering/Acronyms.java | 3 +- .../pace/clustering/ClusteringCombiner.java | 8 +- .../pace/clustering/ClusteringFunction.java | 3 +- .../pace/clustering/ImmutableFieldValue.java | 3 +- .../pace/clustering/KeywordsClustering.java | 9 +- .../pace/clustering/LowercaseClustering.java | 7 +- .../dnetlib/pace/clustering/NgramPairs.java | 3 +- .../eu/dnetlib/pace/clustering/Ngrams.java | 4 +- .../pace/clustering/PersonClustering.java | 3 +- .../dnetlib/pace/clustering/PersonHash.java | 3 +- .../clustering/RandomClusteringFunction.java | 4 +- .../pace/clustering/SortedNgramPairs.java | 3 +- .../clustering/SpaceTrimmingFieldValue.java | 3 +- .../dnetlib/pace/clustering/SuffixPrefix.java | 3 +- .../pace/clustering/UrlClustering.java | 3 +- .../pace/common/AbstractPaceFunctions.java | 15 ++- .../pace/condition/AbstractCondition.java | 9 +- .../pace/condition/AlwaysTrueCondition.java | 4 +- .../dnetlib/pace/condition/ConditionAlgo.java | 4 +- .../eu/dnetlib/pace/condition/ExactMatch.java | 3 +- .../pace/condition/ExactMatchIgnoreCase.java | 3 +- .../pace/condition/MustBeDifferent.java | 4 +- .../eu/dnetlib/pace/condition/PidMatch.java | 4 +- .../eu/dnetlib/pace/condition/SizeMatch.java | 3 +- .../pace/condition/TitleVersionMatch.java | 3 +- .../eu/dnetlib/pace/condition/YearMatch.java | 3 +- .../java/eu/dnetlib/pace/config/Config.java | 2 + .../eu/dnetlib/pace/config/DedupConfig.java | 6 + .../eu/dnetlib/pace/config/PaceConfig.java | 27 +++- .../dnetlib/pace/distance/DistanceAlgo.java | 3 +- .../dnetlib/pace/distance/DistanceScorer.java | 4 +- .../distance/SecondStringDistanceAlgo.java | 13 +- .../pace/distance/algo/AlwaysMatch.java | 3 +- .../pace/distance/algo/ExactMatch.java | 3 +- .../pace/distance/algo/JaroWinkler.java | 3 +- .../algo/JaroWinklerNormalizedName.java | 7 +- .../pace/distance/algo/JaroWinklerTitle.java | 3 +- .../distance/algo/Level2JaroWinklerTitle.java | 3 +- .../pace/distance/algo/LevensteinTitle.java | 3 +- .../algo/LevensteinTitleIgnoreVersion.java | 3 +- .../pace/distance/algo/MustBeDifferent.java | 3 +- .../pace/distance/algo/NullDistanceAlgo.java | 3 +- .../distance/algo/SubStringLevenstein.java | 5 +- .../pace/distance/algo/UrlMatcher.java | 5 +- .../clustering/ClusteringFunctionTest.java | 39 +++--- .../pace/distance/DistanceAlgoTest.java | 25 ++-- .../eu/dnetlib/pace/config/org.curr.conf | 124 ++++++++++++++++-- 48 files changed, 304 insertions(+), 107 deletions(-) diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/AbstractClusteringFunction.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/AbstractClusteringFunction.java index 1782b8761..7fdcce497 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/AbstractClusteringFunction.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/AbstractClusteringFunction.java @@ -1,6 +1,7 @@ package eu.dnetlib.pace.clustering; import eu.dnetlib.pace.common.AbstractPaceFunctions; +import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.model.Field; import org.apache.commons.lang.StringUtils; @@ -18,15 +19,15 @@ public abstract class AbstractClusteringFunction extends AbstractPaceFunctions i this.params = params; } - protected abstract Collection doApply(String s); + protected abstract Collection doApply(Config conf, String s); @Override - public Collection apply(List fields) { + public Collection apply(Config conf, List fields) { return fields.stream().filter(f -> !f.isEmpty()) .map(Field::stringValue) .map(this::normalize) .map(s -> filterAllStopWords(s)) - .map(this::doApply) + .map(s -> doApply(conf, s)) .map(c -> filterBlacklisted(c, ngramBlacklist)) .flatMap(c -> c.stream()) .filter(StringUtils::isNotBlank) diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/Acronyms.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/Acronyms.java index ee5efc967..d3008332d 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/Acronyms.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/Acronyms.java @@ -6,6 +6,7 @@ import java.util.Set; import java.util.StringTokenizer; import com.google.common.collect.Sets; +import eu.dnetlib.pace.config.Config; @ClusteringClass("acronyms") public class Acronyms extends AbstractClusteringFunction { @@ -15,7 +16,7 @@ public class Acronyms extends AbstractClusteringFunction { } @Override - protected Collection doApply(String s) { + protected Collection doApply(Config conf, String s) { return extractAcronyms(s, param("max"), param("minLen"), param("maxLen")); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringCombiner.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringCombiner.java index a4b58aa81..52859b4b8 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringCombiner.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringCombiner.java @@ -13,15 +13,15 @@ import eu.dnetlib.pace.model.Field; public class ClusteringCombiner { public static Collection combine(final Document a, final Config conf) { - return new ClusteringCombiner().doCombine(a, conf.clusterings()); + return new ClusteringCombiner().doCombine(a, conf); } - private Collection doCombine(final Document a, final List defs) { + private Collection doCombine(final Document a, final Config conf) { final Collection res = Sets.newLinkedHashSet(); - for (final ClusteringDef cd : defs) { + for (final ClusteringDef cd : conf.clusterings()) { for (final String fieldName : cd.getFields()) { final Field values = a.values(fieldName); - res.addAll(cd.clusteringFunction().apply((List) values)); + res.addAll(cd.clusteringFunction().apply(conf, (List) values)); } } return res; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringFunction.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringFunction.java index 4fe1b596e..0554d27a1 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringFunction.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringFunction.java @@ -4,11 +4,12 @@ import java.util.Collection; import java.util.List; import java.util.Map; +import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.model.Field; public interface ClusteringFunction { - public Collection apply(List fields); + public Collection apply(Config config, List fields); public Map getParams(); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ImmutableFieldValue.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ImmutableFieldValue.java index fab8e989d..7f342f69c 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ImmutableFieldValue.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ImmutableFieldValue.java @@ -5,6 +5,7 @@ import java.util.List; import java.util.Map; import com.google.common.collect.Lists; +import eu.dnetlib.pace.config.Config; @ClusteringClass("immutablefieldvalue") public class ImmutableFieldValue extends AbstractClusteringFunction { @@ -14,7 +15,7 @@ public class ImmutableFieldValue extends AbstractClusteringFunction { } @Override - protected Collection doApply(final String s) { + protected Collection doApply(final Config conf, final String s) { final List res = Lists.newArrayList(); res.add(s); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/KeywordsClustering.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/KeywordsClustering.java index 1cabecd60..1680ab0f1 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/KeywordsClustering.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/KeywordsClustering.java @@ -1,6 +1,7 @@ package eu.dnetlib.pace.clustering; import eu.dnetlib.pace.common.AbstractPaceFunctions; +import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.model.Field; import org.apache.commons.lang.StringUtils; @@ -15,10 +16,10 @@ public class KeywordsClustering extends AbstractClusteringFunction { } @Override - protected Collection doApply(String s) { + protected Collection doApply(final Config conf, String s) { //takes city codes and keywords codes without duplicates - Set keywords = getKeywords(s, params.getOrDefault("windowSize", 4)); + Set keywords = getKeywords(s, conf.translationMap(), params.getOrDefault("windowSize", 4)); Set cities = getCities(s, params.getOrDefault("windowSize", 4)); //list of combination to return as result @@ -37,13 +38,13 @@ public class KeywordsClustering extends AbstractClusteringFunction { } @Override - public Collection apply(List fields) { + public Collection apply(final Config conf, List fields) { return fields.stream().filter(f -> !f.isEmpty()) .map(Field::stringValue) .map(this::cleanup) //TODO can I add this to the AbstractClusteringFunction without overriding the method here? .map(this::normalize) .map(s -> filterAllStopWords(s)) - .map(this::doApply) + .map(s -> doApply(conf, s)) .map(c -> filterBlacklisted(c, ngramBlacklist)) .flatMap(c -> c.stream()) .filter(StringUtils::isNotBlank) diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/LowercaseClustering.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/LowercaseClustering.java index 5ec8590aa..6fe525f16 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/LowercaseClustering.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/LowercaseClustering.java @@ -6,6 +6,7 @@ import java.util.Map; import com.google.common.collect.Lists; import com.google.common.collect.Sets; +import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.model.Field; import org.apache.commons.lang.StringUtils; @@ -17,16 +18,16 @@ public class LowercaseClustering extends AbstractClusteringFunction { } @Override - public Collection apply(List fields) { + public Collection apply(Config conf, List fields) { Collection c = Sets.newLinkedHashSet(); for(Field f : fields) { - c.addAll(doApply(f.stringValue())); + c.addAll(doApply(conf, f.stringValue())); } return c; } @Override - protected Collection doApply(final String s) { + protected Collection doApply(final Config conf, final String s) { if(StringUtils.isBlank(s)) { return Lists.newArrayList(); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/NgramPairs.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/NgramPairs.java index 06885be9f..baa30d747 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/NgramPairs.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/NgramPairs.java @@ -6,6 +6,7 @@ import java.util.List; import java.util.Map; import com.google.common.collect.Lists; +import eu.dnetlib.pace.config.Config; @ClusteringClass("ngrampairs") public class NgramPairs extends Ngrams { @@ -15,7 +16,7 @@ public class NgramPairs extends Ngrams { } @Override - protected Collection doApply(String s) { + protected Collection doApply(Config conf, String s) { return ngramPairs(Lists.newArrayList(getNgrams(s, param("ngramLen"), param("max") * 2, 1, 2)), param("max")); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/Ngrams.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/Ngrams.java index 8549468db..214b1451f 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/Ngrams.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/Ngrams.java @@ -1,5 +1,7 @@ package eu.dnetlib.pace.clustering; +import eu.dnetlib.pace.config.Config; + import java.util.*; @ClusteringClass("ngrams") @@ -10,7 +12,7 @@ public class Ngrams extends AbstractClusteringFunction { } @Override - protected Collection doApply(String s) { + protected Collection doApply(Config conf, String s) { return getNgrams(s, param("ngramLen"), param("max"), param("maxPerToken"), param("minNgramLen")); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonClustering.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonClustering.java index 718b88d14..26b07f020 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonClustering.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonClustering.java @@ -2,6 +2,7 @@ package eu.dnetlib.pace.clustering; import com.google.common.collect.Sets; import eu.dnetlib.pace.common.AbstractPaceFunctions; +import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.model.Person; import org.apache.commons.lang.StringUtils; @@ -23,7 +24,7 @@ public class PersonClustering extends AbstractPaceFunctions implements Clusterin } @Override - public Collection apply(final List fields) { + public Collection apply(final Config conf, final List fields) { final Set hashes = Sets.newHashSet(); for (final Field f : fields) { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonHash.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonHash.java index fcb01b994..2020a662f 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonHash.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonHash.java @@ -6,6 +6,7 @@ import java.util.Map; import com.google.common.collect.Lists; +import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.model.Person; @ClusteringClass("personhash") @@ -18,7 +19,7 @@ public class PersonHash extends AbstractClusteringFunction { } @Override - protected Collection doApply(final String s) { + protected Collection doApply(final Config conf, final String s) { final List res = Lists.newArrayList(); final boolean aggressive = (Boolean) (getParams().containsKey("aggressive") ? getParams().get("aggressive") : DEFAULT_AGGRESSIVE); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/RandomClusteringFunction.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/RandomClusteringFunction.java index f012aacab..c485fcb9a 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/RandomClusteringFunction.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/RandomClusteringFunction.java @@ -1,5 +1,7 @@ package eu.dnetlib.pace.clustering; +import eu.dnetlib.pace.config.Config; + import java.util.Collection; import java.util.Map; @@ -10,7 +12,7 @@ public class RandomClusteringFunction extends AbstractClusteringFunction { } @Override - protected Collection doApply(String s) { + protected Collection doApply(final Config conf, String s) { // TODO Auto-generated method stub return null; } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SortedNgramPairs.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SortedNgramPairs.java index 2f475fe71..55b203d7a 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SortedNgramPairs.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SortedNgramPairs.java @@ -5,6 +5,7 @@ import java.util.*; import com.google.common.base.Joiner; import com.google.common.base.Splitter; import com.google.common.collect.Lists; +import eu.dnetlib.pace.config.Config; @ClusteringClass("sortedngrampairs") public class SortedNgramPairs extends NgramPairs { @@ -14,7 +15,7 @@ public class SortedNgramPairs extends NgramPairs { } @Override - protected Collection doApply(String s) { + protected Collection doApply(Config conf, String s) { final List tokens = Lists.newArrayList(Splitter.on(" ").omitEmptyStrings().trimResults().split(s)); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SpaceTrimmingFieldValue.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SpaceTrimmingFieldValue.java index 22dc4906b..fd8e7a3cc 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SpaceTrimmingFieldValue.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SpaceTrimmingFieldValue.java @@ -4,6 +4,7 @@ import java.util.Collection; import java.util.List; import java.util.Map; +import eu.dnetlib.pace.config.Config; import org.apache.commons.lang.RandomStringUtils; import org.apache.commons.lang.StringUtils; @@ -17,7 +18,7 @@ public class SpaceTrimmingFieldValue extends AbstractClusteringFunction { } @Override - protected Collection doApply(final String s) { + protected Collection doApply(final Config conf, final String s) { final List res = Lists.newArrayList(); res.add(StringUtils.isBlank(s) ? RandomStringUtils.random(getParams().get("randomLength")) : s.toLowerCase().replaceAll("\\s+", "")); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SuffixPrefix.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SuffixPrefix.java index 3960331c9..fa1f64362 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SuffixPrefix.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SuffixPrefix.java @@ -5,6 +5,7 @@ import java.util.Map; import java.util.Set; import com.google.common.collect.Sets; +import eu.dnetlib.pace.config.Config; @ClusteringClass("suffixprefix") public class SuffixPrefix extends AbstractClusteringFunction { @@ -14,7 +15,7 @@ public class SuffixPrefix extends AbstractClusteringFunction { } @Override - protected Collection doApply(String s) { + protected Collection doApply(Config conf, String s) { return suffixPrefix(s, param("len"), param("max")); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/UrlClustering.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/UrlClustering.java index 9955d5fbe..feb60a221 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/UrlClustering.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/UrlClustering.java @@ -1,6 +1,7 @@ package eu.dnetlib.pace.clustering; import eu.dnetlib.pace.common.AbstractPaceFunctions; +import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.model.Field; import java.net.MalformedURLException; @@ -21,7 +22,7 @@ public class UrlClustering extends AbstractPaceFunctions implements ClusteringFu } @Override - public Collection apply(List fields) { + public Collection apply(final Config conf, List fields) { try { return fields.stream() .filter(f -> !f.isEmpty()) diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java index 24379c677..3050293a0 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java @@ -13,6 +13,8 @@ import org.apache.commons.collections.CollectionUtils; import org.apache.commons.io.IOUtils; import org.apache.commons.lang.StringUtils; +import java.io.IOException; +import java.io.StringWriter; import java.text.Normalizer; import java.util.*; import java.util.regex.Matcher; @@ -327,12 +329,17 @@ public abstract class AbstractPaceFunctions { return codes; } - public Set getKeywords(String s1, int windowSize) { - return getKeywords(s1, translationMap, windowSize); - } - public Set getCities(String s1, int windowSize) { return getKeywords(s1, cityMap, windowSize); } + public static String readFromClasspath(final String filename, final Class clazz) { + final StringWriter sw = new StringWriter(); + try { + IOUtils.copy(clazz.getResourceAsStream(filename), sw); + return sw.toString(); + } catch (final IOException e) { + throw new RuntimeException("cannot load resource from classpath: " + filename); + } + } } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/AbstractCondition.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/AbstractCondition.java index 2b4aa29a1..8f6bf3e08 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/AbstractCondition.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/AbstractCondition.java @@ -2,6 +2,7 @@ package eu.dnetlib.pace.condition; import java.util.List; import eu.dnetlib.pace.common.AbstractPaceFunctions; +import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.distance.eval.ConditionEval; import eu.dnetlib.pace.distance.eval.ConditionEvalMap; import eu.dnetlib.pace.model.Document; @@ -25,10 +26,10 @@ public abstract class AbstractCondition extends AbstractPaceFunctions implements this.fields = fields; } - protected abstract ConditionEval verify(FieldDef fd, Field a, Field b); + protected abstract ConditionEval verify(FieldDef fd, Field a, Field b, Config conf); @Override - public ConditionEvalMap verify(final Document a, final Document b) { + public ConditionEvalMap verify(final Document a, final Document b, final Config conf) { final ConditionEvalMap res = new ConditionEvalMap(); for (final FieldDef fd : getFields()) { @@ -36,12 +37,12 @@ public abstract class AbstractCondition extends AbstractPaceFunctions implements final Field vb = b.values(fd.getName()); if (fd.isIgnoreMissing()) { - res.put(fd.getName(), verify(fd, va, vb)); + res.put(fd.getName(), verify(fd, va, vb, conf)); } else { if (va.isEmpty() || vb.isEmpty()) { res.put(fd.getName(), new ConditionEval(cond, va, vb, -1)); } else { - res.put(fd.getName(), verify(fd, va, vb)); + res.put(fd.getName(), verify(fd, va, vb, conf)); } } } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/AlwaysTrueCondition.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/AlwaysTrueCondition.java index 2274da5d5..633ade330 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/AlwaysTrueCondition.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/AlwaysTrueCondition.java @@ -1,6 +1,8 @@ package eu.dnetlib.pace.condition; import java.util.List; + +import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.distance.eval.ConditionEval; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.model.FieldDef; @@ -18,7 +20,7 @@ public class AlwaysTrueCondition extends AbstractCondition { } @Override - protected ConditionEval verify(final FieldDef fd, final Field a, final Field b) { + protected ConditionEval verify(final FieldDef fd, final Field a, final Field b, final Config conf) { return new ConditionEval(cond, a, b, 1); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ConditionAlgo.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ConditionAlgo.java index 787ad9af1..34e6de927 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ConditionAlgo.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ConditionAlgo.java @@ -1,6 +1,8 @@ package eu.dnetlib.pace.condition; import java.util.List; + +import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.distance.eval.ConditionEvalMap; import eu.dnetlib.pace.model.Document; import eu.dnetlib.pace.model.FieldDef; @@ -22,6 +24,6 @@ public interface ConditionAlgo { * @return 0 when condition cannot be verified (ignoremissing = true). Positive int when the condition is verified. Negative int when * the condition is not verified. */ - public abstract ConditionEvalMap verify(Document a, Document b); + public abstract ConditionEvalMap verify(Document a, Document b, Config conf); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ExactMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ExactMatch.java index a4cd84792..755e8153d 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ExactMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ExactMatch.java @@ -2,6 +2,7 @@ package eu.dnetlib.pace.condition; import java.util.List; +import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.distance.eval.ConditionEval; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.model.FieldDef; @@ -20,7 +21,7 @@ public class ExactMatch extends AbstractCondition { } @Override - protected ConditionEval verify(final FieldDef fd, final Field a, final Field b) { + protected ConditionEval verify(final FieldDef fd, final Field a, final Field b, final Config conf) { final String fa = getValue(a); final String fb = getValue(b); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ExactMatchIgnoreCase.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ExactMatchIgnoreCase.java index e9925ec6d..672980ccc 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ExactMatchIgnoreCase.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/ExactMatchIgnoreCase.java @@ -2,6 +2,7 @@ package eu.dnetlib.pace.condition; import java.util.List; +import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.distance.eval.ConditionEval; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.model.FieldDef; @@ -20,7 +21,7 @@ public class ExactMatchIgnoreCase extends AbstractCondition { } @Override - protected ConditionEval verify(final FieldDef fd, final Field a, final Field b) { + protected ConditionEval verify(final FieldDef fd, final Field a, final Field b, final Config conf) { final String fa = getValue(a); final String fb = getValue(b); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/MustBeDifferent.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/MustBeDifferent.java index f2b3bdba4..630e2341c 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/MustBeDifferent.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/MustBeDifferent.java @@ -3,6 +3,7 @@ package eu.dnetlib.pace.condition; import java.util.List; import com.google.common.collect.Iterables; +import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.distance.eval.ConditionEval; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.model.FieldDef; @@ -30,7 +31,8 @@ public class MustBeDifferent extends AbstractCondition { * @see eu.dnetlib.pace.condition.AbstractCondition#verify(eu.dnetlib.pace.model.FieldDef, java.util.List, java.util.List) */ @Override - protected ConditionEval verify(final FieldDef fd, final Field a, final Field b) { + protected ConditionEval verify(final FieldDef fd, final Field a, final Field b, final Config conf) + { final String fa = getValue(a); final String fb = getValue(b); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/PidMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/PidMatch.java index c15729ed3..92378f30c 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/PidMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/PidMatch.java @@ -6,6 +6,7 @@ import java.util.Set; import java.util.stream.Collectors; import com.google.common.collect.Sets; +import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.distance.eval.ConditionEval; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.model.FieldDef; @@ -29,7 +30,8 @@ public class PidMatch extends AbstractCondition { } @Override - protected ConditionEval verify(final FieldDef fd, final Field a, final Field b) { + protected ConditionEval verify(final FieldDef fd, final Field a, final Field b, final Config conf + ) { final List sa = ((FieldList) a).stringList(); final List sb = ((FieldList) b).stringList(); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/SizeMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/SizeMatch.java index afd0a8eaa..634320194 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/SizeMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/SizeMatch.java @@ -4,6 +4,7 @@ import java.util.List; import com.google.common.collect.Iterables; +import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.distance.eval.ConditionEval; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.model.FieldDef; @@ -32,7 +33,7 @@ public class SizeMatch extends AbstractCondition { * @see eu.dnetlib.pace.condition.AbstractCondition#verify(eu.dnetlib.pace.model.FieldDef, java.util.List, java.util.List) */ @Override - protected ConditionEval verify(final FieldDef fd, final Field a, final Field b) { + protected ConditionEval verify(final FieldDef fd, final Field a, final Field b, final Config conf) { // if (a.isEmpty() & b.isEmpty()) return 1; // diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/TitleVersionMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/TitleVersionMatch.java index 4b94a0459..844cbf842 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/TitleVersionMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/TitleVersionMatch.java @@ -2,6 +2,7 @@ package eu.dnetlib.pace.condition; import java.util.List; +import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.distance.eval.ConditionEval; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.model.FieldDef; @@ -20,7 +21,7 @@ public class TitleVersionMatch extends AbstractCondition { } @Override - protected ConditionEval verify(final FieldDef fd, final Field a, final Field b) { + protected ConditionEval verify(final FieldDef fd, final Field a, final Field b, final Config conf) { final String valueA = getFirstValue(a); final String valueB = getFirstValue(b); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/YearMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/YearMatch.java index 71bb6cfd6..af8635cef 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/YearMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/condition/YearMatch.java @@ -3,6 +3,7 @@ package eu.dnetlib.pace.condition; import java.time.Year; import java.util.List; +import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.distance.eval.ConditionEval; import org.apache.commons.lang.StringUtils; @@ -34,7 +35,7 @@ public class YearMatch extends AbstractCondition { // } @Override - protected ConditionEval verify(final FieldDef fd, final Field a, final Field b) { + protected ConditionEval verify(final FieldDef fd, final Field a, final Field b, final Config conf) { final String valueA = getNumbers(getFirstValue(a)); final String valueB = getNumbers(getFirstValue(b)); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Config.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Config.java index 7498c23cf..3ff299ef0 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Config.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Config.java @@ -56,4 +56,6 @@ public interface Config { */ public Map> blacklists(); + + public Map translationMap(); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java index 1cfcb089c..f252414dd 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java @@ -55,6 +55,7 @@ public class DedupConfig implements Config, Serializable { try { config = new ObjectMapper().readValue(json, DedupConfig.class); config.getPace().initModel(); + config.getPace().initTranslationMap(); return config; } catch (IOException e) { throw new PaceException("Error in parsing configuration json", e); @@ -144,4 +145,9 @@ public class DedupConfig implements Config, Serializable { return getPace().getBlacklists(); } + @Override + public Map translationMap() { + return getPace().translationMap(); + } + } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java index 4fde1dee9..490fbafc4 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java @@ -22,6 +22,10 @@ public class PaceConfig implements Serializable { private List conditions; private List clustering; private Map> blacklists; + private Map> synonyms; + + @JsonIgnore + private Map translationMap; @JsonIgnore private Map modelMap; @@ -33,11 +37,24 @@ public class PaceConfig implements Serializable { public void initModel() { modelMap = Maps.newHashMap(); - for(FieldDef fd : getModel()) { + for (FieldDef fd : getModel()) { modelMap.put(fd.getName(), fd); } } + public void initTranslationMap(){ + translationMap = Maps.newHashMap(); + for (String key : synonyms.keySet()) { + for (String term : synonyms.get(key)){ + translationMap.put(term.toLowerCase(), key); + } + } + } + + public Map translationMap(){ + return translationMap; + } + public List getModel() { return model; } @@ -88,6 +105,14 @@ public class PaceConfig implements Serializable { this.blacklists = blacklists; } + public Map> getSynonyms() { + return synonyms; + } + + public void setSynonyms(Map> synonyms) { + this.synonyms = synonyms; + } + public Map getModelMap() { return modelMap; } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceAlgo.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceAlgo.java index 5e4f69f51..8d2b9bdbb 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceAlgo.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceAlgo.java @@ -1,5 +1,6 @@ package eu.dnetlib.pace.distance; +import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.model.Field; import java.util.Map; @@ -10,7 +11,7 @@ import java.util.Map; */ public interface DistanceAlgo { - public abstract double distance(Field a, Field b); + public abstract double distance(Field a, Field b, Config conf); public double getWeight(); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceScorer.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceScorer.java index bb3c37ed6..2f10aca81 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceScorer.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/DistanceScorer.java @@ -49,7 +49,7 @@ public class DistanceScorer { final ConditionEvalMap res = new ConditionEvalMap(); for (final ConditionAlgo cd : conditions) { - final ConditionEvalMap map = cd.verify(a, b); + final ConditionEvalMap map = cd.verify(a, b, config); res.mergeFrom(map); // commented out shortcuts @@ -82,7 +82,7 @@ public class DistanceScorer { } } else { if (va.getType().equals(vb.getType())) { - de.setDistance(w * fd.distanceAlgo().distance(va, vb)); + de.setDistance(w * fd.distanceAlgo().distance(va, vb, config)); } else { throw new PaceException(String.format("Types are different: %s:%s - %s:%s", va, va.getType(), vb, vb.getType())); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/SecondStringDistanceAlgo.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/SecondStringDistanceAlgo.java index 9cc35298f..b710ccf4c 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/SecondStringDistanceAlgo.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/SecondStringDistanceAlgo.java @@ -7,6 +7,7 @@ import java.util.Map; import com.wcohen.ss.AbstractStringDistance; import eu.dnetlib.pace.common.AbstractPaceFunctions; +import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.config.Type; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.model.FieldList; @@ -69,7 +70,7 @@ public abstract class SecondStringDistanceAlgo extends AbstractPaceFunctions imp * the b * @return the double */ - public double distance(final String a, final String b) { + public double distance(final String a, final String b, final Config conf) { double score = ssalgo.score(a, b); return normalize(score); } @@ -83,8 +84,8 @@ public abstract class SecondStringDistanceAlgo extends AbstractPaceFunctions imp * the b * @return the double */ - protected double distance(final List a, final List b) { - return distance(concat(a), concat(b)); + protected double distance(final List a, final List b, final Config conf) { + return distance(concat(a), concat(b), conf); } /* @@ -93,9 +94,9 @@ public abstract class SecondStringDistanceAlgo extends AbstractPaceFunctions imp * @see eu.dnetlib.pace.distance.DistanceAlgo#distance(eu.dnetlib.pace.model.Field, eu.dnetlib.pace.model.Field) */ @Override - public double distance(final Field a, final Field b) { - if (a.getType().equals(Type.String) && b.getType().equals(Type.String)) return distance(a.stringValue(), b.stringValue()); - if (a.getType().equals(Type.List) && b.getType().equals(Type.List)) return distance(toList(a), toList(b)); + public double distance(final Field a, final Field b, final Config conf) { + if (a.getType().equals(Type.String) && b.getType().equals(Type.String)) return distance(a.stringValue(), b.stringValue(), conf); + if (a.getType().equals(Type.List) && b.getType().equals(Type.List)) return distance(toList(a), toList(b), conf); throw new IllegalArgumentException("invalid types\n- A: " + a.toString() + "\n- B: " + b.toString()); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/AlwaysMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/AlwaysMatch.java index 503235c13..bab477e10 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/AlwaysMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/AlwaysMatch.java @@ -1,6 +1,7 @@ package eu.dnetlib.pace.distance.algo; import com.wcohen.ss.AbstractStringDistance; +import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.distance.DistanceClass; import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; @@ -22,7 +23,7 @@ public class AlwaysMatch extends SecondStringDistanceAlgo { } @Override - public double distance(final String a, final String b) { + public double distance(final String a, final String b, final Config conf) { return 1.0; } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/ExactMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/ExactMatch.java index 44d881e55..66ff3c5d6 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/ExactMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/ExactMatch.java @@ -1,6 +1,7 @@ package eu.dnetlib.pace.distance.algo; import com.wcohen.ss.AbstractStringDistance; +import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.distance.DistanceClass; import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; @@ -22,7 +23,7 @@ public class ExactMatch extends SecondStringDistanceAlgo { } @Override - public double distance(final String a, final String b) { + public double distance(final String a, final String b, final Config conf) { return a.equals(b) ? 1.0 : 0; } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinkler.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinkler.java index 20c09121d..9a89fe9ee 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinkler.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinkler.java @@ -1,6 +1,7 @@ package eu.dnetlib.pace.distance.algo; import com.wcohen.ss.AbstractStringDistance; +import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.distance.DistanceClass; import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; @@ -24,7 +25,7 @@ public class JaroWinkler extends SecondStringDistanceAlgo { } @Override - public double distance(String a, String b) { + public double distance(String a, String b, final Config conf) { String ca = cleanup(a); String cb = cleanup(b); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerNormalizedName.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerNormalizedName.java index 546629b08..64ab74c22 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerNormalizedName.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerNormalizedName.java @@ -2,6 +2,7 @@ package eu.dnetlib.pace.distance.algo; import com.wcohen.ss.AbstractStringDistance; import eu.dnetlib.pace.common.AbstractPaceFunctions; +import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.distance.DistanceClass; import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; @@ -27,7 +28,7 @@ public class JaroWinklerNormalizedName extends SecondStringDistanceAlgo { } @Override - public double distance(String a, String b) { + public double distance(String a, String b, final Config conf) { String ca = cleanup(a); String cb = cleanup(b); @@ -37,8 +38,8 @@ public class JaroWinklerNormalizedName extends SecondStringDistanceAlgo { ca = filterAllStopWords(ca); cb = filterAllStopWords(cb); - Set keywords1 = getKeywords(ca, params.getOrDefault("windowSize", 4).intValue()); - Set keywords2 = getKeywords(cb, params.getOrDefault("windowSize", 4).intValue()); + Set keywords1 = getKeywords(ca, conf.translationMap(), params.getOrDefault("windowSize", 4).intValue()); + Set keywords2 = getKeywords(cb, conf.translationMap(), params.getOrDefault("windowSize", 4).intValue()); Set cities1 = getCities(ca, params.getOrDefault("windowSize", 4).intValue()); Set cities2 = getCities(cb, params.getOrDefault("windowSize", 4).intValue()); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerTitle.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerTitle.java index ff4d6de1f..134f9726c 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerTitle.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerTitle.java @@ -1,6 +1,7 @@ package eu.dnetlib.pace.distance.algo; import com.wcohen.ss.AbstractStringDistance; +import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.distance.DistanceClass; import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; @@ -23,7 +24,7 @@ public class JaroWinklerTitle extends SecondStringDistanceAlgo { } @Override - public double distance(String a, String b) { + public double distance(String a, String b, final Config conf) { String ca = cleanup(a); String cb = cleanup(b); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Level2JaroWinklerTitle.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Level2JaroWinklerTitle.java index 2d05a0084..7b002aeae 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Level2JaroWinklerTitle.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/Level2JaroWinklerTitle.java @@ -1,6 +1,7 @@ package eu.dnetlib.pace.distance.algo; import com.wcohen.ss.AbstractStringDistance; +import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.distance.DistanceClass; import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; @@ -22,7 +23,7 @@ public class Level2JaroWinklerTitle extends SecondStringDistanceAlgo { } @Override - public double distance(final String a, final String b) { + public double distance(final String a, final String b, final Config conf) { final String ca = cleanup(a); final String cb = cleanup(b); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinTitle.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinTitle.java index 503dc33b2..f43d319eb 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinTitle.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinTitle.java @@ -1,6 +1,7 @@ package eu.dnetlib.pace.distance.algo; import com.wcohen.ss.AbstractStringDistance; +import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.distance.DistanceClass; import eu.dnetlib.pace.distance.DistanceScorer; import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; @@ -27,7 +28,7 @@ public class LevensteinTitle extends SecondStringDistanceAlgo { } @Override - public double distance(final String a, final String b) { + public double distance(final String a, final String b, final Config conf) { final String ca = cleanup(a); final String cb = cleanup(b); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinTitleIgnoreVersion.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinTitleIgnoreVersion.java index ff8b34bf3..956538ea7 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinTitleIgnoreVersion.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/LevensteinTitleIgnoreVersion.java @@ -1,6 +1,7 @@ package eu.dnetlib.pace.distance.algo; import com.wcohen.ss.AbstractStringDistance; +import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.distance.DistanceClass; import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; @@ -25,7 +26,7 @@ public class LevensteinTitleIgnoreVersion extends SecondStringDistanceAlgo { } @Override - public double distance(final String a, final String b) { + public double distance(final String a, final String b, final Config conf) { String ca = cleanup(a); String cb = cleanup(b); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/MustBeDifferent.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/MustBeDifferent.java index e794f025f..a1f555f80 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/MustBeDifferent.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/MustBeDifferent.java @@ -1,6 +1,7 @@ package eu.dnetlib.pace.distance.algo; import com.wcohen.ss.AbstractStringDistance; +import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.distance.DistanceClass; import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; @@ -22,7 +23,7 @@ public class MustBeDifferent extends SecondStringDistanceAlgo { } @Override - public double distance(final String a, final String b) { + public double distance(final String a, final String b, final Config conf) { return !a.equals(b) ? 1.0 : 0; } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/NullDistanceAlgo.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/NullDistanceAlgo.java index 8afc45fd6..16dca1c3d 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/NullDistanceAlgo.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/NullDistanceAlgo.java @@ -1,5 +1,6 @@ package eu.dnetlib.pace.distance.algo; +import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.distance.DistanceAlgo; import eu.dnetlib.pace.distance.DistanceClass; import eu.dnetlib.pace.model.Field; @@ -17,7 +18,7 @@ public class NullDistanceAlgo implements DistanceAlgo { } @Override - public double distance(Field a, Field b) { + public double distance(Field a, Field b, final Config conf) { return 0.0; } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SubStringLevenstein.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SubStringLevenstein.java index 8f0c024c7..e2c0007d0 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SubStringLevenstein.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/SubStringLevenstein.java @@ -1,5 +1,6 @@ package eu.dnetlib.pace.distance.algo; +import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.distance.DistanceClass; import eu.dnetlib.pace.distance.SecondStringDistanceAlgo; import org.apache.commons.lang.StringUtils; @@ -69,9 +70,9 @@ public class SubStringLevenstein extends SecondStringDistanceAlgo { * @see eu.dnetlib.pace.distance.SecondStringDistanceAlgo#distance(eu.dnetlib.pace.model.Field, eu.dnetlib.pace.model.Field) */ @Override - public double distance(final Field a, final Field b) { + public double distance(final Field a, final Field b, final Config conf) { if (a.getType().equals(Type.String) && b.getType().equals(Type.String)) - return distance(StringUtils.left(a.stringValue(), limit), StringUtils.left(b.stringValue(), limit)); + return distance(StringUtils.left(a.stringValue(), limit), StringUtils.left(b.stringValue(), limit), conf); throw new IllegalArgumentException("invalid types\n- A: " + a.toString() + "\n- B: " + b.toString()); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/UrlMatcher.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/UrlMatcher.java index eacfdc08f..5fd05fe0f 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/UrlMatcher.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/UrlMatcher.java @@ -1,5 +1,6 @@ package eu.dnetlib.pace.distance.algo; +import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.distance.DistanceClass; import eu.dnetlib.pace.model.Field; import org.apache.commons.lang.StringUtils; @@ -28,7 +29,7 @@ public class UrlMatcher extends Levenstein { } @Override - public double distance(Field a, Field b) { + public double distance(Field a, Field b, final Config conf) { final URL urlA = asUrl(getFirstValue(a)); final URL urlB = asUrl(getFirstValue(b)); @@ -44,7 +45,7 @@ public class UrlMatcher extends Levenstein { return hostW * 0.5; } - return hostW + pathW * super.distance(urlA.getPath(), urlB.getPath()); + return hostW + pathW * super.distance(urlA.getPath(), urlB.getPath(), conf); } private URL asUrl(final String value) { diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java index 84ec09006..a71894138 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java @@ -1,22 +1,25 @@ package eu.dnetlib.pace.clustering; -import java.util.Map; - import com.google.common.collect.Lists; import com.google.common.collect.Maps; import eu.dnetlib.pace.AbstractPaceTest; import eu.dnetlib.pace.common.AbstractPaceFunctions; -import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.config.DedupConfig; +import eu.dnetlib.pace.distance.DistanceAlgoTest; import org.junit.Before; import org.junit.Test; +import java.util.Map; + public class ClusteringFunctionTest extends AbstractPaceTest { private Map params; + DedupConfig conf; @Before public void setUp() throws Exception { params = Maps.newHashMap(); + conf = DedupConfig.load(AbstractPaceFunctions.readFromClasspath("/eu/dnetlib/pace/config/org.curr.conf", ClusteringFunctionTest.class)); } @Test @@ -26,7 +29,7 @@ public class ClusteringFunctionTest extends AbstractPaceTest { final String s = "http://www.test.it/path/to/resource"; System.out.println(s); - System.out.println(urlClustering.apply(Lists.newArrayList(url(s)))); + System.out.println(urlClustering.apply(conf, Lists.newArrayList(url(s)))); } @Test @@ -40,7 +43,7 @@ public class ClusteringFunctionTest extends AbstractPaceTest { final String s = "Search for the Standard Model Higgs Boson"; System.out.println(s); - System.out.println(ngram.apply(Lists.newArrayList(title(s)))); + System.out.println(ngram.apply(conf, Lists.newArrayList(title(s)))); } @Test @@ -52,7 +55,7 @@ public class ClusteringFunctionTest extends AbstractPaceTest { final String s = "Search for the Standard Model Higgs Boson"; System.out.println(s); - System.out.println(np.apply(Lists.newArrayList(title(s)))); + System.out.println(np.apply(conf, Lists.newArrayList(title(s)))); } @Test @@ -64,11 +67,11 @@ public class ClusteringFunctionTest extends AbstractPaceTest { final String s1 = "University of Pisa"; System.out.println(s1); - System.out.println(np.apply(Lists.newArrayList(title(s1)))); + System.out.println(np.apply(conf, Lists.newArrayList(title(s1)))); final String s2 = "Pisa University"; System.out.println(s2); - System.out.println(np.apply(Lists.newArrayList(title(s2)))); + System.out.println(np.apply(conf, Lists.newArrayList(title(s2)))); } @Test @@ -81,7 +84,7 @@ public class ClusteringFunctionTest extends AbstractPaceTest { final String s = "Search for the Standard Model Higgs Boson"; System.out.println(s); - System.out.println(acro.apply(Lists.newArrayList(title(s)))); + System.out.println(acro.apply(conf, Lists.newArrayList(title(s)))); } @Test @@ -93,7 +96,7 @@ public class ClusteringFunctionTest extends AbstractPaceTest { final String s = "Search for the Standard Model Higgs Boson"; System.out.println(s); - System.out.println(sp.apply(Lists.newArrayList(title(s)))); + System.out.println(sp.apply(conf, Lists.newArrayList(title(s)))); } @Test @@ -105,7 +108,7 @@ public class ClusteringFunctionTest extends AbstractPaceTest { final String s = "Search for the Standard Model Higgs Boson"; System.out.println(s); - System.out.println(sp.apply(Lists.newArrayList(title(s)))); + System.out.println(sp.apply(conf, Lists.newArrayList(title(s)))); } @Test @@ -114,7 +117,7 @@ public class ClusteringFunctionTest extends AbstractPaceTest { final String s = readFromClasspath("gt.author.json"); System.out.println(s); - System.out.println(cf.apply(Lists.newArrayList(person(s)))); + System.out.println(cf.apply(conf, Lists.newArrayList(person(s)))); } @Test @@ -123,27 +126,27 @@ public class ClusteringFunctionTest extends AbstractPaceTest { final ClusteringFunction cf = new KeywordsClustering(params); final String s = "Polytechnic University of Turin"; System.out.println(s); - System.out.println(cf.apply(Lists.newArrayList(title(s)))); + System.out.println(cf.apply(conf, Lists.newArrayList(title(s)))); final String s1 = "POLITECNICO DI TORINO"; System.out.println(s1); - System.out.println(cf.apply(Lists.newArrayList(title(s1)))); + System.out.println(cf.apply(conf, Lists.newArrayList(title(s1)))); final String s2 = "Universita farmaceutica culturale di milano bergamo"; System.out.println("s2 = " + s2); - System.out.println(cf.apply(Lists.newArrayList(title(s2)))); + System.out.println(cf.apply(conf, Lists.newArrayList(title(s2)))); final String s3 = "universita universita milano milano"; System.out.println("s3 = " + s3); - System.out.println(cf.apply(Lists.newArrayList(title(s3)))); + System.out.println(cf.apply(conf, Lists.newArrayList(title(s3)))); final String s4 = "Politechniki Warszawskiej (Warsaw University of Technology)"; System.out.println("s4 = " + s4); - System.out.println(cf.apply(Lists.newArrayList(title(s4)))); + System.out.println(cf.apply(conf, Lists.newArrayList(title(s4)))); final String s5 = "İstanbul Ticarət Universiteti"; System.out.println("s5 = " + s5); - System.out.println(cf.apply(Lists.newArrayList(title(s5)))); + System.out.println(cf.apply(conf, Lists.newArrayList(title(s5)))); } diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java index 3bf300bae..97773f157 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/distance/DistanceAlgoTest.java @@ -1,6 +1,7 @@ package eu.dnetlib.pace.distance; import eu.dnetlib.pace.clustering.NGramUtils; +import eu.dnetlib.pace.config.DedupConfig; import eu.dnetlib.pace.distance.algo.JaroWinklerNormalizedName; import org.junit.Before; import org.junit.Test; @@ -17,13 +18,13 @@ public class DistanceAlgoTest extends AbstractPaceFunctions { private final static String TEST_STRING = "Toshiba NB550D: è un netbook su piattaforma AMD Fusion⁽¹²⁾."; private Map params; + private DedupConfig conf; @Before public void setup() { - System.out.println("****************************************************************"); - System.out.println("Test String : " + TEST_STRING); params = new HashMap<>(); params.put("weight", 1.0); + conf = DedupConfig.load(readFromClasspath("/eu/dnetlib/pace/config/org.curr.conf", DistanceAlgoTest.class)); } @Test @@ -55,7 +56,7 @@ public class DistanceAlgoTest extends AbstractPaceFunctions { @Test public void testJaroWinklerNormalizedName() { final JaroWinklerNormalizedName jaroWinklerNormalizedName = new JaroWinklerNormalizedName(params); - double result = jaroWinklerNormalizedName.distance("Free University of Bozen-Bolzano", "University of the Free State"); + double result = jaroWinklerNormalizedName.distance("Free University of Bozen-Bolzano", "University of the Free State", conf); System.out.println("result = " + result); assertEquals(0.0, result); @@ -65,7 +66,7 @@ public class DistanceAlgoTest extends AbstractPaceFunctions { public void testJaroWinklerNormalizedName2() { final JaroWinklerNormalizedName jaroWinklerNormalizedName = new JaroWinklerNormalizedName(params); - double result = jaroWinklerNormalizedName.distance("University of New York", "Università di New York"); + double result = jaroWinklerNormalizedName.distance("University of New York", "Università di New York", conf); assertEquals(1.0, result); } @@ -74,7 +75,7 @@ public class DistanceAlgoTest extends AbstractPaceFunctions { public void testJaroWinklerNormalizedName3() { final JaroWinklerNormalizedName jaroWinklerNormalizedName = new JaroWinklerNormalizedName(params); - double result = jaroWinklerNormalizedName.distance("Biblioteca dell'Universita di Bologna", "Università di Bologna"); + double result = jaroWinklerNormalizedName.distance("Biblioteca dell'Universita di Bologna", "Università di Bologna", conf); System.out.println("result = " + result); assertEquals(0.0, result); @@ -84,7 +85,7 @@ public class DistanceAlgoTest extends AbstractPaceFunctions { public void testJaroWinklerNormalizedName4() { final JaroWinklerNormalizedName jaroWinklerNormalizedName = new JaroWinklerNormalizedName(params); - double result = jaroWinklerNormalizedName.distance("Universita degli studi di Pisa", "Universita di Pisa"); + double result = jaroWinklerNormalizedName.distance("Universita degli studi di Pisa", "Universita di Pisa", conf); System.out.println("result = " + result); assertEquals(1.0, result); @@ -94,7 +95,7 @@ public class DistanceAlgoTest extends AbstractPaceFunctions { public void testJaroWinklerNormalizedName5() { final JaroWinklerNormalizedName jaroWinklerNormalizedName = new JaroWinklerNormalizedName(params); - double result = jaroWinklerNormalizedName.distance("RESEARCH PROMOTION FOUNDATION", "IDRYMA PROOTHISIS EREVNAS"); + double result = jaroWinklerNormalizedName.distance("RESEARCH PROMOTION FOUNDATION", "IDRYMA PROOTHISIS EREVNAS", conf); System.out.println("result = " + result); assertEquals(1.0, result); @@ -104,7 +105,7 @@ public class DistanceAlgoTest extends AbstractPaceFunctions { public void testJaroWinklerNormalizedName6() { final JaroWinklerNormalizedName jaroWinklerNormalizedName = new JaroWinklerNormalizedName(params); - double result = jaroWinklerNormalizedName.distance("Fonds zur Förderung der wissenschaftlichen Forschung (Austrian Science Fund)", "Fonds zur Förderung der wissenschaftlichen Forschung"); + double result = jaroWinklerNormalizedName.distance("Fonds zur Förderung der wissenschaftlichen Forschung (Austrian Science Fund)", "Fonds zur Förderung der wissenschaftlichen Forschung", conf); System.out.println("result = " + result); assertTrue(result > 0.9); @@ -115,7 +116,7 @@ public class DistanceAlgoTest extends AbstractPaceFunctions { public void testJaroWinklerNormalizedName7() { final JaroWinklerNormalizedName jaroWinklerNormalizedName = new JaroWinklerNormalizedName(params); - double result = jaroWinklerNormalizedName.distance("Polytechnic University of Turin", "POLITECNICO DI TORINO"); + double result = jaroWinklerNormalizedName.distance("Polytechnic University of Turin", "POLITECNICO DI TORINO", conf); System.out.println("result = " + result); assertTrue(result > 0.9); @@ -125,7 +126,7 @@ public class DistanceAlgoTest extends AbstractPaceFunctions { public void testJaroWinklerNormalizedName8() { final JaroWinklerNormalizedName jaroWinklerNormalizedName = new JaroWinklerNormalizedName(params); - double result = jaroWinklerNormalizedName.distance("Politechniki Warszawskiej (Warsaw University of Technology)", "Warsaw University of Technology"); + double result = jaroWinklerNormalizedName.distance("Politechniki Warszawskiej (Warsaw University of Technology)", "Warsaw University of Technology", conf); System.out.println("result = " + result); } @@ -134,7 +135,7 @@ public class DistanceAlgoTest extends AbstractPaceFunctions { public void testJaroWinklerNormalizedName9() { final JaroWinklerNormalizedName jaroWinklerNormalizedName = new JaroWinklerNormalizedName(params); - double result = jaroWinklerNormalizedName.distance("Istanbul Commerce University", "İstanbul Ticarət Universiteti"); + double result = jaroWinklerNormalizedName.distance("Istanbul Commerce University", "İstanbul Ticarət Universiteti", conf); System.out.println("result = " + result); } @@ -144,7 +145,7 @@ public class DistanceAlgoTest extends AbstractPaceFunctions { final JaroWinklerNormalizedName jaroWinklerNormalizedName = new JaroWinklerNormalizedName(params); - double result = jaroWinklerNormalizedName.distance("Firenze University Press", "University of Florence"); + double result = jaroWinklerNormalizedName.distance("Firenze University Press", "University of Florence", conf); System.out.println("result = " + result); } diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/org.curr.conf b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/org.curr.conf index fd4fbbe79..029368051 100644 --- a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/org.curr.conf +++ b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/org.curr.conf @@ -5,7 +5,7 @@ "entityType" : "organization", "orderField" : "legalname", "queueMaxSize" : "2000", - "groupMaxSize" : "10", + "groupMaxSize" : "50", "slidingWindowSize" : "200", "rootBuilder" : [ "organization", "projectOrganization_participation_isParticipant", "datasourceOrganization_provision_isProvidedBy" ], "includeChildren" : "true" @@ -14,23 +14,131 @@ "clustering" : [ { "name" : "sortedngrampairs", "fields" : [ "legalname" ], "params" : { "max" : 2, "ngramLen" : "3"} }, { "name" : "suffixprefix", "fields" : [ "legalname" ], "params" : { "max" : 1, "len" : "3" } }, - { "name" : "urlclustering", "fields" : [ "websiteurl" ], "params" : { } } + { "name" : "urlclustering", "fields" : [ "websiteurl" ], "params" : { } }, + { "name" : "keywordsclustering", "fields" : [ "legalname" ], "params" : { "max": 2, "windowSize": 4} } ], "strictConditions" : [ { "name" : "exactMatch", "fields" : [ "gridid" ] } ], "conditions" : [ - { "name" : "exactMatch", "fields" : [ "country" ] }, - { "name" : "DomainExactMatch", "fields" : [ "websiteurl" ] } + { "name" : "DomainExactMatch", "fields" : [ "websiteurl" ] }, + { "name" : "exactMatch", "fields" : [ "country" ] } ], "model" : [ - { "name" : "legalname", "algo" : "Null", "type" : "String", "weight" : "0", "ignoreMissing" : "false", "path" : "organization/metadata/legalname/value" }, - { "name" : "country", "algo" : "Null", "type" : "String", "weight" : "0", "ignoreMissing" : "true", "path" : "organization/metadata/country/classid" }, + { "name" : "country", "algo" : "Null", "type" : "String", "weight" : "0", "ignoreMissing" : "false", "path" : "organization/metadata/country/classid" }, { "name" : "legalshortname", "algo" : "JaroWinklerNormalizedName", "type" : "String", "weight" : "0.1", "ignoreMissing" : "true", "path" : "organization/metadata/legalshortname/value" }, - { "name" : "legalname", "algo" : "JaroWinklerNormalizedName", "type" : "String", "weight" : "0.9", "ignoreMissing" : "false", "path" : "organization/metadata/legalname/value", "params" : {"windowSize" : 4, "threshold" : 0.5} }, + { "name" : "legalname", "algo" : "JaroWinklerNormalizedName", "type" : "String", "weight" : "0.9", "ignoreMissing" : "false", "path" : "organization/metadata/legalname/value", "params" : {"windowSize" : 4, "threshold" : 0.7} }, { "name" : "websiteurl", "algo" : "Null", "type" : "URL", "weight" : "0", "ignoreMissing" : "true", "path" : "organization/metadata/websiteurl/value", "params" : { "host" : 0.5, "path" : 0.5 } }, { "name" : "gridid", "algo" : "Null", "type" : "String", "weight" : "0.0", "ignoreMissing" : "true", "path" : "pid[qualifier#classid = {grid}]/value" } ], - "blacklists" : { } + "blacklists" : { + "legalname" : [] + }, + "synonyms": { + "key::1": ["university","università","universita","università studi","universita studi","universitario","universitaria","université","universitaire","universitaires","universidad","universitade","Universität","universitaet","Uniwersytet","университет","universiteit","πανεπιστήμιο","universitesi","universiteti"], + "key::2": ["studies","studi","études","estudios","estudos","Studien","studia","исследования","studies","σπουδές"], + "key::3": ["advanced","superiore","supérieur","supérieure","supérieurs","supérieures","avancado","avancados","fortgeschrittene","fortgeschritten","zaawansowany","передовой","gevorderd","gevorderde","προχωρημένος","προχωρημένη","προχωρημένο","προχωρημένες","προχωρημένα","wyzsza"], + "key::4": ["institute","istituto","institut","instituto","instituto","Institut","instytut","институт","instituut","ινστιτούτο"], + "key::5": ["hospital","ospedale","hôpital","hospital","hospital","Krankenhaus","szpital","больница","ziekenhuis","νοσοκομείο"], + "key::6": ["research","ricerca","recherche","investigacion","pesquisa","Forschung","badania","исследования","onderzoek","έρευνα","erevna","erevnas"], + "key::7": ["college","collegio","université","colegio","faculdade","Hochschule","Szkoła Wyższa","Высшая школа","universiteit","κολλέγιο"], + "key::8": ["foundation","fondazione","fondation","fundación","fundação","Stiftung","Fundacja","фонд","stichting","ίδρυμα","idryma"], + "key::9": ["center","centro","centre","centro","centro","zentrum","centrum","центр","centrum","κέντρο"], + "key::10": ["national","nazionale","national","nationale","nationaux","nationales","nacional","nacional","national","krajowy","национальный","nationaal","nationale","εθνικό"], + "key::11": ["association","associazione","association","asociación","associação","Verein","verband","stowarzyszenie","ассоциация","associatie"], + "key::12": ["society","societa","société","sociedad","sociedade","gesellschaft","społeczeństwo","общество","maatschappij","κοινωνία"], + "key::13": ["international","internazionale","international","internacional","internacional","international","międzynarodowy","Международный","internationaal","internationale","διεθνής","διεθνή","διεθνές"], + "key::14": ["community","comunita","communauté","comunidad","comunidade","Gemeinschaft","społeczność","сообщество","gemeenschap","κοινότητα"], + "key::15": ["school","scuola","école","escuela","escola","schule","Szkoła","школа","school","σχολείο"], + "key::16": ["education","educazione","éducation","educacion","Educação","Bildung","Edukacja","образование","opleiding","εκπαίδευση"], + "key::17": ["academy","accademia","académie","academia","academia","Akademie","akademie","академия","academie","ακαδημία"], + "key::18": ["public","pubblico","public","publique","publics","publiques","publico","publico","Öffentlichkeit","publiczny","публичный","publiek","publieke","δημόσιος","δημόσια","δημόσιο"], + "key::19": ["museum","museo","musée","mueso","museu","museum","muzeum","музей","museum","μουσείο"], + "key::20": ["group","gruppo","groupe","grupo","grupo","gruppe","grupa","группа","groep","ομάδα","όμιλος"], + "key::21": ["department","dipartimento","département","departamento","departamento","abteilung","departament","отдел","afdeling","τμήμα"], + "key::22": ["council","consiglio","conseil","Consejo","conselho","gesellschaft","rada","совет","raad","συμβούλιο"], + "key::23": ["library","biblioteca","bibliothèque","biblioteca","biblioteca","Bibliothek","biblioteka","библиотека","bibliotheek","βιβλιοθήκη"], + "key::24": ["ministry","ministero","ministère","ministerio","ministério","Ministerium","ministerstwo","министерство","ministerie","υπουργείο"], + "key::25": ["services","servizi","services","servicios","Serviços","Dienstleistungen","usługi","услуги","diensten","υπηρεσίες"], + "key::26": ["central","centrale","central","centrale","centrales","central","central","zentral","centralny","цетральный","centraal","κεντρικός","κεντρική","κεντρικό","κεντρικά"], + "key::27": ["general","generale","général","générale","généraux","générales","general","geral","general","Allgemeines","general","общий","algemeen","algemene","γενικός","γενική","γενικό","γενικά"], + "key::28": ["applied","applicati","appliqué","appliquée","appliqués","appliquées","aplicado","aplicada","angewendet","stosowany","прикладной","toegepast","toegepaste","εφαρμοσμένος","εφαρμοσμένη","εφαρμοσμένο","εφαρμοσμένα"], + "key::29": ["european","europee","europea","européen","européenne","européens","européennes","europeo","europeu","europäisch","europejski","европейский","Europees","Europese","ευρωπαϊκός","ευρωπαϊκή","ευρωπαϊκό","ευρωπαϊκά"], + "key::30": ["agency","agenzia","agence","agencia","agencia","agentur","agencja","агенция","agentschap","πρακτορείο"], + "key::31": ["laboratory","laboratorio","laboratoire","laboratorio","laboratorio","labor","laboratorium","лаборатория","laboratorium","εργαστήριο"], + "key::32": ["industry","industria","industrie","индустрия","industrie","βιομηχανία"], + "key::33": ["industrial","industriale","industriel","industrielle","industriels","industrielles","индустриальный","industrieel","βιομηχανικός","βιομηχανική","βιομηχανικό","βιομηχανικά","βιομηχανικές"], + "key::34": ["consortium","consorzio","consortium","консорциум","consortium","κοινοπραξία"], + "key::35": ["organization","organizzazione","organisation","organización","organização","organizacja","организация","organisatie","οργανισμός"], + "key::36": ["authority","autorità","autorité","авторитет","autoriteit"], + "key::37": ["federation","federazione","fédération","федерация","federatie","ομοσπονδία"], + "key::38": ["observatory","osservatorio","observatoire","обсерватория","observatorium","αστεροσκοπείο"], + "key::39": ["bureau","ufficio","bureau","офис","bureau","γραφείο"], + "key::40": ["company","impresa","compagnie","société","компания","bedrijf","εταιρία"], + "key::41": ["polytechnic","politecnico","polytechnique","политехника","polytechnisch","πολυτεχνείο","universita politecnica","polytechnic university","universidad politecnica","universitat politecnica","politechnika","politechniki","university technology","university science technology"], + "key::42": ["coalition","coalizione","coalition","коалиция","coalitie","συνασπισμός"], + "key::43": ["initiative","iniziativa","initiative","инициатива","initiatief","πρωτοβουλία"], + "key::44": ["academic","accademico","académique","universitaire","акадеческий academisch","ακαδημαϊκός","ακαδημαϊκή","ακαδημαϊκό","ακαδημαϊκές","ακαδημαϊκοί"], + "key::45": ["institution","istituzione","institution","институциональный","instelling","ινστιτούτο"], + "key::46": ["division","divisione","division","отделение","divisie","τμήμα"], + "key::47": ["committee","comitato","comité","комитет","commissie","επιτροπή"], + "key::48": ["promotion","promozione","продвижение","proothisis","forderung"], + "key::49": ["medical","medicine","clinical","medicina","clinici","médico","medicina","clínica","médico","medicina","clínica","medizinisch","Medizin","klinisch","medisch","geneeskunde","klinisch","ιατρικός","ιατρική","ιατρικό","ιατρικά","κλινικός","κλινική","κλινικό","κλινικά","tıbbi","tıp","klinik","orvosi","orvostudomány","klinikai","zdravniški","medicinski","klinični","meditsiini","kliinik","kliiniline"], + "key::50": ["technology","technological","tecnologia","tecnologie","tecnología","tecnológico","tecnologia","tecnológico","Technologie","technologisch","technologie","technologisch","τεχνολογία","τεχνολογικός","τεχνολογική","τεχνολογικό","teknoloji","teknolojik","technológia","technológiai","tehnologija","tehnološki","tehnoloogia","tehnoloogiline","technologii","technical","texniki","teknik"], + "key::51": ["science","scientific","scienza","scientifiche","scienze","ciencia","científico","ciência","científico","Wissenschaft","wissenschaftlich","wetenschap","wetenschappelijk","επιστήμη","επιστημονικός","επιστημονική","επιστημονικό","επιστημονικά","bilim","bilimsel","tudomány","tudományos","znanost","znanstveni","teadus","teaduslik"], + "key::52": ["engineering","ingegneria","ingeniería","engenharia","Ingenieurwissenschaft","ingenieurswetenschappen","bouwkunde","μηχανικός","μηχανική","μηχανικό","mühendislik","mérnöki","Inženirstvo","inseneeria","inseneri"], + "key::53": ["management","gestione","gestionale","gestionali","gestión","administración","gestão","administração","Verwaltung","management","διαχείριση","yönetim","menedzsment","vodstvo","upravljanje","management","juhtkond","juhtimine","haldus"], + "key::54": ["energy","energia","energía","energia","Energie","energie","ενέργεια","enerji","energia","energija","energia"], + "key::55": ["agricultural","agriculture","agricoltura","agricole","agrícola","agricultura","agrícola","agricultura","landwirtschaftlich","Landwirtschaft","landbouwkundig","landbouw","αγροτικός","αγροτική","αγροτικό","γεωργικός","γεωργική","γεωργικό","γεωργία","tarımsal","tarım","mezőgazdasági","mezőgazdaság","poljedelski","poljedelstvo","põllumajandus","põllumajanduslik"], + "key::56": ["information","informazione","información","informação","Information","informatie","πληροφορία","bilgi","információ","informacija","informatsioon","informatycznych"], + "key::57": ["social","sociali","social","social","Sozial","sociaal","maatschappelijk","κοινωνικός","κοινωνική","κοινωνικό","κοινωνικά","sosyal","szociális","družbeni","sotsiaal","sotsiaalne"], + "key::58": ["environmental","ambiente","medioambiental","ambiente","medioambiente","meioambiente","Umwelt","milieu","milieuwetenschap","milieukunde","περιβαλλοντικός","περιβαλλοντική","περιβαλλοντικό","περιβαλλοντικά","çevre","környezeti","okoliški","keskonna"], + "key::59": ["business","economia","economiche","economica","negocio","empresa","negócio","Unternehmen","bedrijf","bedrijfskunde","επιχείρηση","iş","üzleti","posel","ettevõte/äri"], + "key::60": ["pharmaceuticals","pharmacy","farmacia","farmaceutica","farmacéutica","farmacia","farmacêutica","farmácia","Pharmazeutika","Arzneimittelkunde","farmaceutica","geneesmiddelen","apotheek","φαρμακευτικός","φαρμακευτική","φαρμακευτικό","φαρμακευτικά","φαρμακείο","ilaç","eczane","gyógyszerészeti","gyógyszertár","farmacevtika","lekarništvo","farmaatsia","farmatseutiline"], + "key::61": ["healthcare","health services","salute","atenciónmédica","cuidadodelasalud","cuidadoscomasaúde","Gesundheitswesen","gezondheidszorg","ιατροφαρμακευτικήπερίθαλψη","sağlıkhizmeti","egészségügy","zdravstvo","tervishoid","tervishoiu"], + "key::62": ["history","storia","historia","história","Geschichte","geschiedenis","geschiedkunde","ιστορία","tarih","történelem","zgodovina","ajalugu"], + "key::63": ["materials","materiali","materia","materiales","materiais","materialen","υλικά","τεκμήρια","malzemeler","anyagok","materiali","materjalid","vahendid"], + "key::64": ["economics","economia","economiche","economica","economía","economia","Wirtschaft","economie","οικονομικά","οικονομικέςεπιστήμες","ekonomi","közgazdaságtan","gospodarstvo","ekonomija","majanduslik","majandus"], + "key::65": ["therapeutics","terapeutica","terapéutica","terapêutica","therapie","θεραπευτική","tedavibilimi","gyógykezelés","terapevtika","terapeutiline","ravi"], + "key::66": ["oncology","oncologia","oncologico","oncología","oncologia","Onkologie","oncologie","ογκολογία","onkoloji","onkológia","onkologija","onkoloogia"], + "key::67": ["natural","naturali","naturale","natural","natural","natürlich","natuurlijk","φυσικός","φυσική","φυσικό","φυσικά","doğal","természetes","naraven","loodus"], + "key::68": ["educational","educazione","pedagogia","educacional","educativo","educacional","pädagogisch","educatief","εκπαιδευτικός","εκπαιδευτική","εκπαιδευτικό","εκπαιδευτικά","eğitimsel","oktatási","izobraževalen","haridus","hariduslik"], + "key::69": ["biomedical","biomedica","biomédico","biomédico","biomedizinisch","biomedisch","βιοιατρικός","βιοιατρική","βιοιατρικό","βιοιατρικά","biyomedikal","orvosbiológiai","biomedicinski","biomeditsiiniline"], + "key::70": ["veterinary","veterinaria","veterinarie","veterinaria","veterinária","tierärtzlich","veterinair","veeartsenijlkunde","κτηνιατρικός","κτηνιατρική","κτηνιατρικό","κτηνιατρικά","veteriner","állatorvosi","veterinar","veterinarski","veterinaaria"], + "key::71": ["chemistry","chimica","química","química","Chemie","chemie","scheikunde","χημεία","kimya","kémia","kemija","keemia"], + "key::72": ["security","sicurezza","seguridad","segurança","Sicherheit","veiligheid","ασφάλεια","güvenlik","biztonsági","varnost","turvalisus","julgeolek"], + "key::73": ["biotechnology","biotecnologia","biotecnologie","biotecnología","biotecnologia","Biotechnologie","biotechnologie","βιοτεχνολογία","biyoteknoloji","biotechnológia","biotehnologija","biotehnoloogia"], + "key::74": ["military","militare","militari","militar","militar","Militär","militair","leger","στρατιωτικός","στρατιωτική","στρατιωτικό","στρατιωτικά","askeri","katonai","vojaški","vojni","militaar","wojskowa"], + "key::75": ["theological","teologia","teologico","teológico","tecnológica","theologisch","theologisch","θεολογικός","θεολογική","θεολογικό","θεολογικά","teolojik","technológiai","teološki","teoloogia","usuteadus","teoloogiline"], + "key::76": ["electronics","elettronica","electrónica","eletrônicos","Elektronik","elektronica","ηλεκτρονική","elektronik","elektronika","elektronika","elektroonika"], + "key::77": ["forestry","forestale","forestali","silvicultura","forestal","floresta","Forstwirtschaft","bosbouw","δασοκομία","δασολογία","ormancılık","erdészet","gozdarstvo","metsandus"], + "key::78": ["maritime","marittima","marittime","marittimo","marítimo","marítimo","maritiem","ναυτικός","ναυτική","ναυτικό","ναυτικά","ναυτιλιακός","ναυτιλιακή","ναυτιλιακό","ναυτιλιακά","θαλάσσιος","θαλάσσια","θαλάσσιο","denizcilik","tengeri","morski","mere","merendus"], + "key::79": ["sports","sport","deportes","esportes","Sport","sport","sportwetenschappen","άθληση","γυμναστικήδραστηριότητα","spor","sport","šport","sport","spordi"], + "key::80": ["surgery","chirurgia","chirurgiche","cirugía","cirurgia","Chirurgie","chirurgie","heelkunde","εγχείρηση","επέμβαση","χειρουργικήεπέμβαση","cerrahi","sebészet","kirurgija","kirurgia"], + "key::81": ["cultural","culturale","culturali","cultura","cultural","cultural","kulturell","cultureel","πολιτιστικός","πολιτιστική","πολιτιστικό","πολιτισμικός","πολιτισμική","πολιτισμικό","kültürel","kultúrális","kulturni","kultuuri","kultuuriline"], + "key::82": ["computerscience","informatica","ordenador","computadora","informática","computación","cienciasdelacomputación","ciênciadacomputação","Computer","computer","υπολογιστής","ηλεκτρονικόςυπολογιστής","bilgisayar","számítógép","računalnik","arvuti"], + "key::83": ["finance","financial","finanza","finanziarie","finanza","financiero","finanças","financeiro","Finanzen","finanziell","financiën","financieel","χρηματοοικονομικά","χρηματοδότηση","finanse","finansal","pénzügy","pénzügyi","finance","finančni","finants","finantsiline"], + "key::84": ["communication","comunicazione","comuniciación","comunicação","Kommunikation","communication","επικοινωνία","iletişim","kommunikáció","komuniciranje","kommunikatsioon"], + "key::85": ["justice","giustizia","justicia","justiça","Recht","Justiz","justitie","gerechtigheid","δικαιοσύνη","υπουργείοδικαιοσύνης","δίκαιο","adalet","igazságügy","pravo","õigus"], + "key::86": ["aerospace","aerospaziale","aerospaziali","aeroespacio","aeroespaço","Luftfahrt","luchtvaart","ruimtevaart","αεροπορικός","αεροπορική","αεροπορικό","αεροναυπηγικός","αεροναυπηγική","αεροναυπηγικό","αεροναυπηγικά","havacılıkveuzay","légtér","zrakoplovstvo","atmosfäär","kosmos"], + "key::87": ["dermatology","dermatologia","dermatología","dermatologia","Dermatologie","dermatologie","δρματολογία","dermatoloji","bőrgyógyászat","dermatológia","dermatologija","dermatoloogia"], + "key::88": ["architecture","architettura","arquitectura","arquitetura","Architektur","architectuur","αρχιτεκτονική","mimarlık","építészet","arhitektura","arhitektuur"], + "key::89": ["mathematics","matematica","matematiche","matemáticas","matemáticas","Mathematik","wiskunde","mathematica","μαθηματικά","matematik","matematika","matematika","matemaatika"], + "key::90": ["language","lingue","linguistica","linguistiche","lenguaje","idioma","língua","idioma","Sprache","taal","taalkunde","γλώσσα","dil","nyelv","jezik","keel"], + "key::91": ["neuroscience","neuroscienza","neurociencia","neurociência","Neurowissenschaft","neurowetenschappen","νευροεπιστήμη","nörobilim","idegtudomány","nevroznanost","neuroteadused"], + "key::92": ["automation","automazione","automatización","automação","Automatisierung","automatisering","αυτοματοποίηση","otomasyon","automatizálás","avtomatizacija","automatiseeritud"], + "key::93": ["pediatric","pediatria","pediatriche","pediatrico","pediátrico","pediatría","pediátrico","pediatria","pädiatrisch","pediatrische","παιδιατρική","pediatrik","gyermekgyógyászat","pediatrija","pediaatria"], + "key::94": ["photonics","fotonica","fotoniche","fotónica","fotônica","Photonik","fotonica","φωτονική","fotonik","fotonika","fotonika","fotoonika"], + "key::95": ["mechanics","meccanica","meccaniche","mecánica","mecânica","Mechanik","Maschinenbau","mechanica","werktuigkunde","μηχανικής","mekanik","gépészet","mehanika","mehaanika"], + "key::96": ["psychiatrics","psichiatria","psichiatrica","psichiatriche","psiquiatría","psiquiatria","Psychiatrie","psychiatrie","ψυχιατρική","psikiyatrik","pszihiátria","psihiatrija","psühhaatria"], + "key::97": ["psychology","fisiologia","psicología","psicologia","Psychologie","psychologie","ψυχολογία","psikoloji","pszihológia","psihologija","psühholoogia"], + "key::98": ["automotive","industriaautomobilistica","industriadelautomóvil","automotriz","industriaautomotriz","automotivo","Automobilindustrie","autoindustrie","αυτοκίνητος","αυτοκίνητη","αυτοκίνητο","αυτοκινούμενος","αυτοκινούμενη","αυτοκινούμενο","αυτοκινητιστικός","αυτοκινητιστική","αυτοκινητιστικό","otomotiv","autóipari","samogiben","avtomobilskaindustrija","auto-"], + "key::99": ["neurology","neurologia","neurologiche","neurología","neurologia","Neurologie","neurologie","zenuwleer","νευρολογία","nöroloji","neurológia","ideggyógyászat","nevrologija","neuroloogia"], + "key::100": ["geology","geologia","geologiche","geología","geologia","Geologie","geologie","aardkunde","γεωλογία","jeoloji","geológia","földtudomány","geologija","geoloogia"], + "key::101": ["microbiology","microbiologia","micro-biologia","microbiologiche","microbiología","microbiologia","Mikrobiologie","microbiologie","μικροβιολογία","mikrobiyoloji","mikrobiológia","mikrobiologija","mikrobioloogia"], + "key::102": ["informatics","informatica","informática","informática","informatica"], + "key::103": ["forschungsgemeinschaft","comunita ricerca","research community","research foundation","research association"], + "key::104": ["commerce","ticaret","ticarət","commercio","trade","handel","comercio"] + } } } \ No newline at end of file From 50b7a12b3f4cc737203396bd1ed940c56816f3d5 Mon Sep 17 00:00:00 2001 From: miconis Date: Tue, 8 Oct 2019 15:13:45 +0200 Subject: [PATCH 096/449] normalization of the term in the translation map added --- .../main/java/eu/dnetlib/pace/config/PaceConfig.java | 5 ++++- .../test/java/eu/dnetlib/pace/config/ConfigTest.java | 10 +++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java index 490fbafc4..939f6c037 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java @@ -11,6 +11,7 @@ import org.apache.commons.collections.CollectionUtils; import org.codehaus.jackson.annotate.JsonIgnore; import java.io.Serializable; +import java.text.Normalizer; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -46,7 +47,9 @@ public class PaceConfig implements Serializable { translationMap = Maps.newHashMap(); for (String key : synonyms.keySet()) { for (String term : synonyms.get(key)){ - translationMap.put(term.toLowerCase(), key); + translationMap.put( + Normalizer.normalize(term.toLowerCase(), Normalizer.Form.NFD), + key); } } } diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java index 575b3c786..fd16f7390 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java @@ -10,7 +10,7 @@ public class ConfigTest extends AbstractPaceTest { @Test public void dedupConfigSerializationTest() { - final DedupConfig cfgFromClasspath = DedupConfig.load(readFromClasspath("result.pace.conf.json")); + final DedupConfig cfgFromClasspath = DedupConfig.load(readFromClasspath("org.curr.conf")); final String conf = cfgFromClasspath.toString(); @@ -37,4 +37,12 @@ public class ConfigTest extends AbstractPaceTest { System.out.println(load.toString()); } + @Test + public void translationMapTest() { + + DedupConfig load = DedupConfig.load(readFromClasspath("org.curr.conf")); + + System.out.println("translationMap = " + load.getPace().translationMap().toString()); + } + } From 5499ca17c3725de143949e2b33c17265240f84dd Mon Sep 17 00:00:00 2001 From: miconis Date: Tue, 8 Oct 2019 16:49:07 +0200 Subject: [PATCH 097/449] minor changes --- .../dnetlib/pace/clustering/KeywordsClustering.java | 2 +- .../dnetlib/pace/common/AbstractPaceFunctions.java | 12 ++++-------- .../main/java/eu/dnetlib/pace/config/PaceConfig.java | 1 + .../distance/algo/JaroWinklerNormalizedName.java | 2 +- 4 files changed, 7 insertions(+), 10 deletions(-) diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/KeywordsClustering.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/KeywordsClustering.java index 1680ab0f1..769ecf53c 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/KeywordsClustering.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/KeywordsClustering.java @@ -25,7 +25,7 @@ public class KeywordsClustering extends AbstractClusteringFunction { //list of combination to return as result final Collection combinations = new LinkedHashSet(); - for (String keyword: keywordsToCodes(keywords)){ + for (String keyword: keywordsToCodes(keywords, conf.translationMap())){ for (String city: citiesToCodes(cities)) { combinations.add(keyword+"-"+city); if (combinations.size()>=params.getOrDefault("max", 2)) { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java index 3050293a0..23ff7acd2 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java @@ -17,10 +17,7 @@ import java.io.IOException; import java.io.StringWriter; import java.text.Normalizer; import java.util.*; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import java.util.stream.Collectors; -import java.util.stream.Stream; /** * Set of common functions @@ -30,7 +27,6 @@ import java.util.stream.Stream; */ public abstract class AbstractPaceFunctions { - private static Map translationMap = AbstractPaceFunctions.loadMapFromClasspath("/eu/dnetlib/pace/config/translation_map.csv"); private static Map cityMap = AbstractPaceFunctions.loadMapFromClasspath("/eu/dnetlib/pace/config/city_map.csv"); protected static Set stopwords_en = loadFromClasspath("/eu/dnetlib/pace/config/stopwords_en.txt"); @@ -243,10 +239,10 @@ public abstract class AbstractPaceFunctions { } - public double keywordsCompare(Set s1, Set s2){ + public double keywordsCompare(Set s1, Set s2, Map translationMap){ - Set k1 = keywordsToCodes(s1); - Set k2 = keywordsToCodes(s2); + Set k1 = keywordsToCodes(s1, translationMap); + Set k2 = keywordsToCodes(s2, translationMap); int longer = (k1.size()>k2.size())?k1.size():k2.size(); @@ -278,7 +274,7 @@ public abstract class AbstractPaceFunctions { return keywords.stream().map(s -> translationMap.get(s)).collect(Collectors.toSet()); } - public Set keywordsToCodes(Set keywords) { + public Set keywordsToCodes(Set keywords, Map translationMap) { return toCodes(keywords, translationMap); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java index 939f6c037..56995bb6a 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java @@ -2,6 +2,7 @@ package eu.dnetlib.pace.config; import com.google.common.collect.Lists; import com.google.common.collect.Maps; +import eu.dnetlib.pace.common.AbstractPaceFunctions; import eu.dnetlib.pace.condition.ConditionAlgo; import eu.dnetlib.pace.model.ClusteringDef; import eu.dnetlib.pace.model.CondDef; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerNormalizedName.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerNormalizedName.java index 64ab74c22..889ebab6d 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerNormalizedName.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/algo/JaroWinklerNormalizedName.java @@ -46,7 +46,7 @@ public class JaroWinklerNormalizedName extends SecondStringDistanceAlgo { if (sameCity(cities1,cities2)) { - if (keywordsCompare(keywords1, keywords2)>params.getOrDefault("threshold", 0.5).doubleValue()) { + if (keywordsCompare(keywords1, keywords2, conf.translationMap())>params.getOrDefault("threshold", 0.5).doubleValue()) { ca = removeKeywords(ca, keywords1); ca = removeKeywords(ca, cities1); From c9863debfac94836620345ebbd88799387bc25e7 Mon Sep 17 00:00:00 2001 From: miconis Date: Wed, 23 Oct 2019 16:31:45 +0200 Subject: [PATCH 098/449] minor changes and configuration updates (synonym field added) --- dnet-pace-core/pom.xml | 2 +- .../eu/dnetlib/pace/config/ConfigTest.java | 9 ++ .../eu/dnetlib/pace/config/org.test.conf | 144 ++++++++++++++++++ release.properties | 27 +++- 4 files changed, 173 insertions(+), 9 deletions(-) create mode 100644 dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/org.test.conf diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 34138cc85..4f8aa1d45 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 3.0.15-SNAPSHOT + 3.0.15 ../pom.xml diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java index fd16f7390..9051049fb 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java @@ -5,6 +5,7 @@ import org.junit.Test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; public class ConfigTest extends AbstractPaceTest { @@ -45,4 +46,12 @@ public class ConfigTest extends AbstractPaceTest { System.out.println("translationMap = " + load.getPace().translationMap().toString()); } + @Test + public void emptyTranslationMapTest() { + + DedupConfig load = DedupConfig.load(readFromClasspath("org.test.conf")); + + assertEquals(0, load.getPace().translationMap().keySet().size()); + } + } diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/org.test.conf b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/org.test.conf new file mode 100644 index 000000000..029368051 --- /dev/null +++ b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/org.test.conf @@ -0,0 +1,144 @@ +{ + "wf" : { + "threshold" : "0.9", + "dedupRun" : "001", + "entityType" : "organization", + "orderField" : "legalname", + "queueMaxSize" : "2000", + "groupMaxSize" : "50", + "slidingWindowSize" : "200", + "rootBuilder" : [ "organization", "projectOrganization_participation_isParticipant", "datasourceOrganization_provision_isProvidedBy" ], + "includeChildren" : "true" + }, + "pace" : { + "clustering" : [ + { "name" : "sortedngrampairs", "fields" : [ "legalname" ], "params" : { "max" : 2, "ngramLen" : "3"} }, + { "name" : "suffixprefix", "fields" : [ "legalname" ], "params" : { "max" : 1, "len" : "3" } }, + { "name" : "urlclustering", "fields" : [ "websiteurl" ], "params" : { } }, + { "name" : "keywordsclustering", "fields" : [ "legalname" ], "params" : { "max": 2, "windowSize": 4} } + ], + "strictConditions" : [ + { "name" : "exactMatch", "fields" : [ "gridid" ] } + ], + "conditions" : [ + { "name" : "DomainExactMatch", "fields" : [ "websiteurl" ] }, + { "name" : "exactMatch", "fields" : [ "country" ] } + ], + "model" : [ + { "name" : "country", "algo" : "Null", "type" : "String", "weight" : "0", "ignoreMissing" : "false", "path" : "organization/metadata/country/classid" }, + { "name" : "legalshortname", "algo" : "JaroWinklerNormalizedName", "type" : "String", "weight" : "0.1", "ignoreMissing" : "true", "path" : "organization/metadata/legalshortname/value" }, + { "name" : "legalname", "algo" : "JaroWinklerNormalizedName", "type" : "String", "weight" : "0.9", "ignoreMissing" : "false", "path" : "organization/metadata/legalname/value", "params" : {"windowSize" : 4, "threshold" : 0.7} }, + { "name" : "websiteurl", "algo" : "Null", "type" : "URL", "weight" : "0", "ignoreMissing" : "true", "path" : "organization/metadata/websiteurl/value", "params" : { "host" : 0.5, "path" : 0.5 } }, + { "name" : "gridid", "algo" : "Null", "type" : "String", "weight" : "0.0", "ignoreMissing" : "true", "path" : "pid[qualifier#classid = {grid}]/value" } + ], + "blacklists" : { + "legalname" : [] + }, + "synonyms": { + "key::1": ["university","università","universita","università studi","universita studi","universitario","universitaria","université","universitaire","universitaires","universidad","universitade","Universität","universitaet","Uniwersytet","университет","universiteit","πανεπιστήμιο","universitesi","universiteti"], + "key::2": ["studies","studi","études","estudios","estudos","Studien","studia","исследования","studies","σπουδές"], + "key::3": ["advanced","superiore","supérieur","supérieure","supérieurs","supérieures","avancado","avancados","fortgeschrittene","fortgeschritten","zaawansowany","передовой","gevorderd","gevorderde","προχωρημένος","προχωρημένη","προχωρημένο","προχωρημένες","προχωρημένα","wyzsza"], + "key::4": ["institute","istituto","institut","instituto","instituto","Institut","instytut","институт","instituut","ινστιτούτο"], + "key::5": ["hospital","ospedale","hôpital","hospital","hospital","Krankenhaus","szpital","больница","ziekenhuis","νοσοκομείο"], + "key::6": ["research","ricerca","recherche","investigacion","pesquisa","Forschung","badania","исследования","onderzoek","έρευνα","erevna","erevnas"], + "key::7": ["college","collegio","université","colegio","faculdade","Hochschule","Szkoła Wyższa","Высшая школа","universiteit","κολλέγιο"], + "key::8": ["foundation","fondazione","fondation","fundación","fundação","Stiftung","Fundacja","фонд","stichting","ίδρυμα","idryma"], + "key::9": ["center","centro","centre","centro","centro","zentrum","centrum","центр","centrum","κέντρο"], + "key::10": ["national","nazionale","national","nationale","nationaux","nationales","nacional","nacional","national","krajowy","национальный","nationaal","nationale","εθνικό"], + "key::11": ["association","associazione","association","asociación","associação","Verein","verband","stowarzyszenie","ассоциация","associatie"], + "key::12": ["society","societa","société","sociedad","sociedade","gesellschaft","społeczeństwo","общество","maatschappij","κοινωνία"], + "key::13": ["international","internazionale","international","internacional","internacional","international","międzynarodowy","Международный","internationaal","internationale","διεθνής","διεθνή","διεθνές"], + "key::14": ["community","comunita","communauté","comunidad","comunidade","Gemeinschaft","społeczność","сообщество","gemeenschap","κοινότητα"], + "key::15": ["school","scuola","école","escuela","escola","schule","Szkoła","школа","school","σχολείο"], + "key::16": ["education","educazione","éducation","educacion","Educação","Bildung","Edukacja","образование","opleiding","εκπαίδευση"], + "key::17": ["academy","accademia","académie","academia","academia","Akademie","akademie","академия","academie","ακαδημία"], + "key::18": ["public","pubblico","public","publique","publics","publiques","publico","publico","Öffentlichkeit","publiczny","публичный","publiek","publieke","δημόσιος","δημόσια","δημόσιο"], + "key::19": ["museum","museo","musée","mueso","museu","museum","muzeum","музей","museum","μουσείο"], + "key::20": ["group","gruppo","groupe","grupo","grupo","gruppe","grupa","группа","groep","ομάδα","όμιλος"], + "key::21": ["department","dipartimento","département","departamento","departamento","abteilung","departament","отдел","afdeling","τμήμα"], + "key::22": ["council","consiglio","conseil","Consejo","conselho","gesellschaft","rada","совет","raad","συμβούλιο"], + "key::23": ["library","biblioteca","bibliothèque","biblioteca","biblioteca","Bibliothek","biblioteka","библиотека","bibliotheek","βιβλιοθήκη"], + "key::24": ["ministry","ministero","ministère","ministerio","ministério","Ministerium","ministerstwo","министерство","ministerie","υπουργείο"], + "key::25": ["services","servizi","services","servicios","Serviços","Dienstleistungen","usługi","услуги","diensten","υπηρεσίες"], + "key::26": ["central","centrale","central","centrale","centrales","central","central","zentral","centralny","цетральный","centraal","κεντρικός","κεντρική","κεντρικό","κεντρικά"], + "key::27": ["general","generale","général","générale","généraux","générales","general","geral","general","Allgemeines","general","общий","algemeen","algemene","γενικός","γενική","γενικό","γενικά"], + "key::28": ["applied","applicati","appliqué","appliquée","appliqués","appliquées","aplicado","aplicada","angewendet","stosowany","прикладной","toegepast","toegepaste","εφαρμοσμένος","εφαρμοσμένη","εφαρμοσμένο","εφαρμοσμένα"], + "key::29": ["european","europee","europea","européen","européenne","européens","européennes","europeo","europeu","europäisch","europejski","европейский","Europees","Europese","ευρωπαϊκός","ευρωπαϊκή","ευρωπαϊκό","ευρωπαϊκά"], + "key::30": ["agency","agenzia","agence","agencia","agencia","agentur","agencja","агенция","agentschap","πρακτορείο"], + "key::31": ["laboratory","laboratorio","laboratoire","laboratorio","laboratorio","labor","laboratorium","лаборатория","laboratorium","εργαστήριο"], + "key::32": ["industry","industria","industrie","индустрия","industrie","βιομηχανία"], + "key::33": ["industrial","industriale","industriel","industrielle","industriels","industrielles","индустриальный","industrieel","βιομηχανικός","βιομηχανική","βιομηχανικό","βιομηχανικά","βιομηχανικές"], + "key::34": ["consortium","consorzio","consortium","консорциум","consortium","κοινοπραξία"], + "key::35": ["organization","organizzazione","organisation","organización","organização","organizacja","организация","organisatie","οργανισμός"], + "key::36": ["authority","autorità","autorité","авторитет","autoriteit"], + "key::37": ["federation","federazione","fédération","федерация","federatie","ομοσπονδία"], + "key::38": ["observatory","osservatorio","observatoire","обсерватория","observatorium","αστεροσκοπείο"], + "key::39": ["bureau","ufficio","bureau","офис","bureau","γραφείο"], + "key::40": ["company","impresa","compagnie","société","компания","bedrijf","εταιρία"], + "key::41": ["polytechnic","politecnico","polytechnique","политехника","polytechnisch","πολυτεχνείο","universita politecnica","polytechnic university","universidad politecnica","universitat politecnica","politechnika","politechniki","university technology","university science technology"], + "key::42": ["coalition","coalizione","coalition","коалиция","coalitie","συνασπισμός"], + "key::43": ["initiative","iniziativa","initiative","инициатива","initiatief","πρωτοβουλία"], + "key::44": ["academic","accademico","académique","universitaire","акадеческий academisch","ακαδημαϊκός","ακαδημαϊκή","ακαδημαϊκό","ακαδημαϊκές","ακαδημαϊκοί"], + "key::45": ["institution","istituzione","institution","институциональный","instelling","ινστιτούτο"], + "key::46": ["division","divisione","division","отделение","divisie","τμήμα"], + "key::47": ["committee","comitato","comité","комитет","commissie","επιτροπή"], + "key::48": ["promotion","promozione","продвижение","proothisis","forderung"], + "key::49": ["medical","medicine","clinical","medicina","clinici","médico","medicina","clínica","médico","medicina","clínica","medizinisch","Medizin","klinisch","medisch","geneeskunde","klinisch","ιατρικός","ιατρική","ιατρικό","ιατρικά","κλινικός","κλινική","κλινικό","κλινικά","tıbbi","tıp","klinik","orvosi","orvostudomány","klinikai","zdravniški","medicinski","klinični","meditsiini","kliinik","kliiniline"], + "key::50": ["technology","technological","tecnologia","tecnologie","tecnología","tecnológico","tecnologia","tecnológico","Technologie","technologisch","technologie","technologisch","τεχνολογία","τεχνολογικός","τεχνολογική","τεχνολογικό","teknoloji","teknolojik","technológia","technológiai","tehnologija","tehnološki","tehnoloogia","tehnoloogiline","technologii","technical","texniki","teknik"], + "key::51": ["science","scientific","scienza","scientifiche","scienze","ciencia","científico","ciência","científico","Wissenschaft","wissenschaftlich","wetenschap","wetenschappelijk","επιστήμη","επιστημονικός","επιστημονική","επιστημονικό","επιστημονικά","bilim","bilimsel","tudomány","tudományos","znanost","znanstveni","teadus","teaduslik"], + "key::52": ["engineering","ingegneria","ingeniería","engenharia","Ingenieurwissenschaft","ingenieurswetenschappen","bouwkunde","μηχανικός","μηχανική","μηχανικό","mühendislik","mérnöki","Inženirstvo","inseneeria","inseneri"], + "key::53": ["management","gestione","gestionale","gestionali","gestión","administración","gestão","administração","Verwaltung","management","διαχείριση","yönetim","menedzsment","vodstvo","upravljanje","management","juhtkond","juhtimine","haldus"], + "key::54": ["energy","energia","energía","energia","Energie","energie","ενέργεια","enerji","energia","energija","energia"], + "key::55": ["agricultural","agriculture","agricoltura","agricole","agrícola","agricultura","agrícola","agricultura","landwirtschaftlich","Landwirtschaft","landbouwkundig","landbouw","αγροτικός","αγροτική","αγροτικό","γεωργικός","γεωργική","γεωργικό","γεωργία","tarımsal","tarım","mezőgazdasági","mezőgazdaság","poljedelski","poljedelstvo","põllumajandus","põllumajanduslik"], + "key::56": ["information","informazione","información","informação","Information","informatie","πληροφορία","bilgi","információ","informacija","informatsioon","informatycznych"], + "key::57": ["social","sociali","social","social","Sozial","sociaal","maatschappelijk","κοινωνικός","κοινωνική","κοινωνικό","κοινωνικά","sosyal","szociális","družbeni","sotsiaal","sotsiaalne"], + "key::58": ["environmental","ambiente","medioambiental","ambiente","medioambiente","meioambiente","Umwelt","milieu","milieuwetenschap","milieukunde","περιβαλλοντικός","περιβαλλοντική","περιβαλλοντικό","περιβαλλοντικά","çevre","környezeti","okoliški","keskonna"], + "key::59": ["business","economia","economiche","economica","negocio","empresa","negócio","Unternehmen","bedrijf","bedrijfskunde","επιχείρηση","iş","üzleti","posel","ettevõte/äri"], + "key::60": ["pharmaceuticals","pharmacy","farmacia","farmaceutica","farmacéutica","farmacia","farmacêutica","farmácia","Pharmazeutika","Arzneimittelkunde","farmaceutica","geneesmiddelen","apotheek","φαρμακευτικός","φαρμακευτική","φαρμακευτικό","φαρμακευτικά","φαρμακείο","ilaç","eczane","gyógyszerészeti","gyógyszertár","farmacevtika","lekarništvo","farmaatsia","farmatseutiline"], + "key::61": ["healthcare","health services","salute","atenciónmédica","cuidadodelasalud","cuidadoscomasaúde","Gesundheitswesen","gezondheidszorg","ιατροφαρμακευτικήπερίθαλψη","sağlıkhizmeti","egészségügy","zdravstvo","tervishoid","tervishoiu"], + "key::62": ["history","storia","historia","história","Geschichte","geschiedenis","geschiedkunde","ιστορία","tarih","történelem","zgodovina","ajalugu"], + "key::63": ["materials","materiali","materia","materiales","materiais","materialen","υλικά","τεκμήρια","malzemeler","anyagok","materiali","materjalid","vahendid"], + "key::64": ["economics","economia","economiche","economica","economía","economia","Wirtschaft","economie","οικονομικά","οικονομικέςεπιστήμες","ekonomi","közgazdaságtan","gospodarstvo","ekonomija","majanduslik","majandus"], + "key::65": ["therapeutics","terapeutica","terapéutica","terapêutica","therapie","θεραπευτική","tedavibilimi","gyógykezelés","terapevtika","terapeutiline","ravi"], + "key::66": ["oncology","oncologia","oncologico","oncología","oncologia","Onkologie","oncologie","ογκολογία","onkoloji","onkológia","onkologija","onkoloogia"], + "key::67": ["natural","naturali","naturale","natural","natural","natürlich","natuurlijk","φυσικός","φυσική","φυσικό","φυσικά","doğal","természetes","naraven","loodus"], + "key::68": ["educational","educazione","pedagogia","educacional","educativo","educacional","pädagogisch","educatief","εκπαιδευτικός","εκπαιδευτική","εκπαιδευτικό","εκπαιδευτικά","eğitimsel","oktatási","izobraževalen","haridus","hariduslik"], + "key::69": ["biomedical","biomedica","biomédico","biomédico","biomedizinisch","biomedisch","βιοιατρικός","βιοιατρική","βιοιατρικό","βιοιατρικά","biyomedikal","orvosbiológiai","biomedicinski","biomeditsiiniline"], + "key::70": ["veterinary","veterinaria","veterinarie","veterinaria","veterinária","tierärtzlich","veterinair","veeartsenijlkunde","κτηνιατρικός","κτηνιατρική","κτηνιατρικό","κτηνιατρικά","veteriner","állatorvosi","veterinar","veterinarski","veterinaaria"], + "key::71": ["chemistry","chimica","química","química","Chemie","chemie","scheikunde","χημεία","kimya","kémia","kemija","keemia"], + "key::72": ["security","sicurezza","seguridad","segurança","Sicherheit","veiligheid","ασφάλεια","güvenlik","biztonsági","varnost","turvalisus","julgeolek"], + "key::73": ["biotechnology","biotecnologia","biotecnologie","biotecnología","biotecnologia","Biotechnologie","biotechnologie","βιοτεχνολογία","biyoteknoloji","biotechnológia","biotehnologija","biotehnoloogia"], + "key::74": ["military","militare","militari","militar","militar","Militär","militair","leger","στρατιωτικός","στρατιωτική","στρατιωτικό","στρατιωτικά","askeri","katonai","vojaški","vojni","militaar","wojskowa"], + "key::75": ["theological","teologia","teologico","teológico","tecnológica","theologisch","theologisch","θεολογικός","θεολογική","θεολογικό","θεολογικά","teolojik","technológiai","teološki","teoloogia","usuteadus","teoloogiline"], + "key::76": ["electronics","elettronica","electrónica","eletrônicos","Elektronik","elektronica","ηλεκτρονική","elektronik","elektronika","elektronika","elektroonika"], + "key::77": ["forestry","forestale","forestali","silvicultura","forestal","floresta","Forstwirtschaft","bosbouw","δασοκομία","δασολογία","ormancılık","erdészet","gozdarstvo","metsandus"], + "key::78": ["maritime","marittima","marittime","marittimo","marítimo","marítimo","maritiem","ναυτικός","ναυτική","ναυτικό","ναυτικά","ναυτιλιακός","ναυτιλιακή","ναυτιλιακό","ναυτιλιακά","θαλάσσιος","θαλάσσια","θαλάσσιο","denizcilik","tengeri","morski","mere","merendus"], + "key::79": ["sports","sport","deportes","esportes","Sport","sport","sportwetenschappen","άθληση","γυμναστικήδραστηριότητα","spor","sport","šport","sport","spordi"], + "key::80": ["surgery","chirurgia","chirurgiche","cirugía","cirurgia","Chirurgie","chirurgie","heelkunde","εγχείρηση","επέμβαση","χειρουργικήεπέμβαση","cerrahi","sebészet","kirurgija","kirurgia"], + "key::81": ["cultural","culturale","culturali","cultura","cultural","cultural","kulturell","cultureel","πολιτιστικός","πολιτιστική","πολιτιστικό","πολιτισμικός","πολιτισμική","πολιτισμικό","kültürel","kultúrális","kulturni","kultuuri","kultuuriline"], + "key::82": ["computerscience","informatica","ordenador","computadora","informática","computación","cienciasdelacomputación","ciênciadacomputação","Computer","computer","υπολογιστής","ηλεκτρονικόςυπολογιστής","bilgisayar","számítógép","računalnik","arvuti"], + "key::83": ["finance","financial","finanza","finanziarie","finanza","financiero","finanças","financeiro","Finanzen","finanziell","financiën","financieel","χρηματοοικονομικά","χρηματοδότηση","finanse","finansal","pénzügy","pénzügyi","finance","finančni","finants","finantsiline"], + "key::84": ["communication","comunicazione","comuniciación","comunicação","Kommunikation","communication","επικοινωνία","iletişim","kommunikáció","komuniciranje","kommunikatsioon"], + "key::85": ["justice","giustizia","justicia","justiça","Recht","Justiz","justitie","gerechtigheid","δικαιοσύνη","υπουργείοδικαιοσύνης","δίκαιο","adalet","igazságügy","pravo","õigus"], + "key::86": ["aerospace","aerospaziale","aerospaziali","aeroespacio","aeroespaço","Luftfahrt","luchtvaart","ruimtevaart","αεροπορικός","αεροπορική","αεροπορικό","αεροναυπηγικός","αεροναυπηγική","αεροναυπηγικό","αεροναυπηγικά","havacılıkveuzay","légtér","zrakoplovstvo","atmosfäär","kosmos"], + "key::87": ["dermatology","dermatologia","dermatología","dermatologia","Dermatologie","dermatologie","δρματολογία","dermatoloji","bőrgyógyászat","dermatológia","dermatologija","dermatoloogia"], + "key::88": ["architecture","architettura","arquitectura","arquitetura","Architektur","architectuur","αρχιτεκτονική","mimarlık","építészet","arhitektura","arhitektuur"], + "key::89": ["mathematics","matematica","matematiche","matemáticas","matemáticas","Mathematik","wiskunde","mathematica","μαθηματικά","matematik","matematika","matematika","matemaatika"], + "key::90": ["language","lingue","linguistica","linguistiche","lenguaje","idioma","língua","idioma","Sprache","taal","taalkunde","γλώσσα","dil","nyelv","jezik","keel"], + "key::91": ["neuroscience","neuroscienza","neurociencia","neurociência","Neurowissenschaft","neurowetenschappen","νευροεπιστήμη","nörobilim","idegtudomány","nevroznanost","neuroteadused"], + "key::92": ["automation","automazione","automatización","automação","Automatisierung","automatisering","αυτοματοποίηση","otomasyon","automatizálás","avtomatizacija","automatiseeritud"], + "key::93": ["pediatric","pediatria","pediatriche","pediatrico","pediátrico","pediatría","pediátrico","pediatria","pädiatrisch","pediatrische","παιδιατρική","pediatrik","gyermekgyógyászat","pediatrija","pediaatria"], + "key::94": ["photonics","fotonica","fotoniche","fotónica","fotônica","Photonik","fotonica","φωτονική","fotonik","fotonika","fotonika","fotoonika"], + "key::95": ["mechanics","meccanica","meccaniche","mecánica","mecânica","Mechanik","Maschinenbau","mechanica","werktuigkunde","μηχανικής","mekanik","gépészet","mehanika","mehaanika"], + "key::96": ["psychiatrics","psichiatria","psichiatrica","psichiatriche","psiquiatría","psiquiatria","Psychiatrie","psychiatrie","ψυχιατρική","psikiyatrik","pszihiátria","psihiatrija","psühhaatria"], + "key::97": ["psychology","fisiologia","psicología","psicologia","Psychologie","psychologie","ψυχολογία","psikoloji","pszihológia","psihologija","psühholoogia"], + "key::98": ["automotive","industriaautomobilistica","industriadelautomóvil","automotriz","industriaautomotriz","automotivo","Automobilindustrie","autoindustrie","αυτοκίνητος","αυτοκίνητη","αυτοκίνητο","αυτοκινούμενος","αυτοκινούμενη","αυτοκινούμενο","αυτοκινητιστικός","αυτοκινητιστική","αυτοκινητιστικό","otomotiv","autóipari","samogiben","avtomobilskaindustrija","auto-"], + "key::99": ["neurology","neurologia","neurologiche","neurología","neurologia","Neurologie","neurologie","zenuwleer","νευρολογία","nöroloji","neurológia","ideggyógyászat","nevrologija","neuroloogia"], + "key::100": ["geology","geologia","geologiche","geología","geologia","Geologie","geologie","aardkunde","γεωλογία","jeoloji","geológia","földtudomány","geologija","geoloogia"], + "key::101": ["microbiology","microbiologia","micro-biologia","microbiologiche","microbiología","microbiologia","Mikrobiologie","microbiologie","μικροβιολογία","mikrobiyoloji","mikrobiológia","mikrobiologija","mikrobioloogia"], + "key::102": ["informatics","informatica","informática","informática","informatica"], + "key::103": ["forschungsgemeinschaft","comunita ricerca","research community","research foundation","research association"], + "key::104": ["commerce","ticaret","ticarət","commercio","trade","handel","comercio"] + } + } +} \ No newline at end of file diff --git a/release.properties b/release.properties index 5c101a586..90288567a 100644 --- a/release.properties +++ b/release.properties @@ -1,11 +1,22 @@ #release configuration -#Mon Jul 08 10:03:15 CEST 2019 -scm.tagNameFormat=@{project.artifactId}-@{project.version} -pushChanges=true -scm.url=scm\:git\:https\://github.com/dnet-team/dnet-dedup.git -preparationGoals=clean verify -projectVersionPolicyId=default -remoteTagging=true +#Wed Oct 23 16:22:47 CEST 2019 scm.commentPrefix=[maven-release-plugin] +pushChanges=true +project.rel.eu.dnetlib\:dnet-dedup-test=3.0.15 +scm.tag=dnet-dedup-3.0.15 +remoteTagging=true +project.scm.eu.dnetlib\:dnet-dedup-test.empty=true +projectVersionPolicyId=default +scm.url=scm\:git\:https\://github.com/dnet-team/dnet-dedup.git +scm.tagNameFormat=@{project.artifactId}-@{project.version} +project.rel.eu.dnetlib\:dnet-dedup=3.0.15 +project.dev.eu.dnetlib\:dnet-pace-core=3.0.16-SNAPSHOT +preparationGoals=clean verify +project.scm.eu.dnetlib\:dnet-dedup.tag=HEAD +project.scm.eu.dnetlib\:dnet-dedup.developerConnection=scm\:git\:https\://github.com/dnet-team/dnet-dedup.git exec.snapshotReleasePluginAllowed=false -completedPhase=create-backup-poms +project.dev.eu.dnetlib\:dnet-dedup=3.0.16-SNAPSHOT +project.scm.eu.dnetlib\:dnet-pace-core.empty=true +project.dev.eu.dnetlib\:dnet-dedup-test=3.0.16-SNAPSHOT +completedPhase=generate-release-poms +project.rel.eu.dnetlib\:dnet-pace-core=3.0.15 From 5f249fd56c83ce47f8062da8271499c407d42ea7 Mon Sep 17 00:00:00 2001 From: miconis Date: Wed, 23 Oct 2019 16:37:20 +0200 Subject: [PATCH 099/449] minor changes --- .../eu/dnetlib/pace/config/org.test.conf | 104 ------------------ release.properties | 4 +- 2 files changed, 2 insertions(+), 106 deletions(-) diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/org.test.conf b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/org.test.conf index 029368051..3af658574 100644 --- a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/org.test.conf +++ b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/org.test.conf @@ -35,110 +35,6 @@ "legalname" : [] }, "synonyms": { - "key::1": ["university","università","universita","università studi","universita studi","universitario","universitaria","université","universitaire","universitaires","universidad","universitade","Universität","universitaet","Uniwersytet","университет","universiteit","πανεπιστήμιο","universitesi","universiteti"], - "key::2": ["studies","studi","études","estudios","estudos","Studien","studia","исследования","studies","σπουδές"], - "key::3": ["advanced","superiore","supérieur","supérieure","supérieurs","supérieures","avancado","avancados","fortgeschrittene","fortgeschritten","zaawansowany","передовой","gevorderd","gevorderde","προχωρημένος","προχωρημένη","προχωρημένο","προχωρημένες","προχωρημένα","wyzsza"], - "key::4": ["institute","istituto","institut","instituto","instituto","Institut","instytut","институт","instituut","ινστιτούτο"], - "key::5": ["hospital","ospedale","hôpital","hospital","hospital","Krankenhaus","szpital","больница","ziekenhuis","νοσοκομείο"], - "key::6": ["research","ricerca","recherche","investigacion","pesquisa","Forschung","badania","исследования","onderzoek","έρευνα","erevna","erevnas"], - "key::7": ["college","collegio","université","colegio","faculdade","Hochschule","Szkoła Wyższa","Высшая школа","universiteit","κολλέγιο"], - "key::8": ["foundation","fondazione","fondation","fundación","fundação","Stiftung","Fundacja","фонд","stichting","ίδρυμα","idryma"], - "key::9": ["center","centro","centre","centro","centro","zentrum","centrum","центр","centrum","κέντρο"], - "key::10": ["national","nazionale","national","nationale","nationaux","nationales","nacional","nacional","national","krajowy","национальный","nationaal","nationale","εθνικό"], - "key::11": ["association","associazione","association","asociación","associação","Verein","verband","stowarzyszenie","ассоциация","associatie"], - "key::12": ["society","societa","société","sociedad","sociedade","gesellschaft","społeczeństwo","общество","maatschappij","κοινωνία"], - "key::13": ["international","internazionale","international","internacional","internacional","international","międzynarodowy","Международный","internationaal","internationale","διεθνής","διεθνή","διεθνές"], - "key::14": ["community","comunita","communauté","comunidad","comunidade","Gemeinschaft","społeczność","сообщество","gemeenschap","κοινότητα"], - "key::15": ["school","scuola","école","escuela","escola","schule","Szkoła","школа","school","σχολείο"], - "key::16": ["education","educazione","éducation","educacion","Educação","Bildung","Edukacja","образование","opleiding","εκπαίδευση"], - "key::17": ["academy","accademia","académie","academia","academia","Akademie","akademie","академия","academie","ακαδημία"], - "key::18": ["public","pubblico","public","publique","publics","publiques","publico","publico","Öffentlichkeit","publiczny","публичный","publiek","publieke","δημόσιος","δημόσια","δημόσιο"], - "key::19": ["museum","museo","musée","mueso","museu","museum","muzeum","музей","museum","μουσείο"], - "key::20": ["group","gruppo","groupe","grupo","grupo","gruppe","grupa","группа","groep","ομάδα","όμιλος"], - "key::21": ["department","dipartimento","département","departamento","departamento","abteilung","departament","отдел","afdeling","τμήμα"], - "key::22": ["council","consiglio","conseil","Consejo","conselho","gesellschaft","rada","совет","raad","συμβούλιο"], - "key::23": ["library","biblioteca","bibliothèque","biblioteca","biblioteca","Bibliothek","biblioteka","библиотека","bibliotheek","βιβλιοθήκη"], - "key::24": ["ministry","ministero","ministère","ministerio","ministério","Ministerium","ministerstwo","министерство","ministerie","υπουργείο"], - "key::25": ["services","servizi","services","servicios","Serviços","Dienstleistungen","usługi","услуги","diensten","υπηρεσίες"], - "key::26": ["central","centrale","central","centrale","centrales","central","central","zentral","centralny","цетральный","centraal","κεντρικός","κεντρική","κεντρικό","κεντρικά"], - "key::27": ["general","generale","général","générale","généraux","générales","general","geral","general","Allgemeines","general","общий","algemeen","algemene","γενικός","γενική","γενικό","γενικά"], - "key::28": ["applied","applicati","appliqué","appliquée","appliqués","appliquées","aplicado","aplicada","angewendet","stosowany","прикладной","toegepast","toegepaste","εφαρμοσμένος","εφαρμοσμένη","εφαρμοσμένο","εφαρμοσμένα"], - "key::29": ["european","europee","europea","européen","européenne","européens","européennes","europeo","europeu","europäisch","europejski","европейский","Europees","Europese","ευρωπαϊκός","ευρωπαϊκή","ευρωπαϊκό","ευρωπαϊκά"], - "key::30": ["agency","agenzia","agence","agencia","agencia","agentur","agencja","агенция","agentschap","πρακτορείο"], - "key::31": ["laboratory","laboratorio","laboratoire","laboratorio","laboratorio","labor","laboratorium","лаборатория","laboratorium","εργαστήριο"], - "key::32": ["industry","industria","industrie","индустрия","industrie","βιομηχανία"], - "key::33": ["industrial","industriale","industriel","industrielle","industriels","industrielles","индустриальный","industrieel","βιομηχανικός","βιομηχανική","βιομηχανικό","βιομηχανικά","βιομηχανικές"], - "key::34": ["consortium","consorzio","consortium","консорциум","consortium","κοινοπραξία"], - "key::35": ["organization","organizzazione","organisation","organización","organização","organizacja","организация","organisatie","οργανισμός"], - "key::36": ["authority","autorità","autorité","авторитет","autoriteit"], - "key::37": ["federation","federazione","fédération","федерация","federatie","ομοσπονδία"], - "key::38": ["observatory","osservatorio","observatoire","обсерватория","observatorium","αστεροσκοπείο"], - "key::39": ["bureau","ufficio","bureau","офис","bureau","γραφείο"], - "key::40": ["company","impresa","compagnie","société","компания","bedrijf","εταιρία"], - "key::41": ["polytechnic","politecnico","polytechnique","политехника","polytechnisch","πολυτεχνείο","universita politecnica","polytechnic university","universidad politecnica","universitat politecnica","politechnika","politechniki","university technology","university science technology"], - "key::42": ["coalition","coalizione","coalition","коалиция","coalitie","συνασπισμός"], - "key::43": ["initiative","iniziativa","initiative","инициатива","initiatief","πρωτοβουλία"], - "key::44": ["academic","accademico","académique","universitaire","акадеческий academisch","ακαδημαϊκός","ακαδημαϊκή","ακαδημαϊκό","ακαδημαϊκές","ακαδημαϊκοί"], - "key::45": ["institution","istituzione","institution","институциональный","instelling","ινστιτούτο"], - "key::46": ["division","divisione","division","отделение","divisie","τμήμα"], - "key::47": ["committee","comitato","comité","комитет","commissie","επιτροπή"], - "key::48": ["promotion","promozione","продвижение","proothisis","forderung"], - "key::49": ["medical","medicine","clinical","medicina","clinici","médico","medicina","clínica","médico","medicina","clínica","medizinisch","Medizin","klinisch","medisch","geneeskunde","klinisch","ιατρικός","ιατρική","ιατρικό","ιατρικά","κλινικός","κλινική","κλινικό","κλινικά","tıbbi","tıp","klinik","orvosi","orvostudomány","klinikai","zdravniški","medicinski","klinični","meditsiini","kliinik","kliiniline"], - "key::50": ["technology","technological","tecnologia","tecnologie","tecnología","tecnológico","tecnologia","tecnológico","Technologie","technologisch","technologie","technologisch","τεχνολογία","τεχνολογικός","τεχνολογική","τεχνολογικό","teknoloji","teknolojik","technológia","technológiai","tehnologija","tehnološki","tehnoloogia","tehnoloogiline","technologii","technical","texniki","teknik"], - "key::51": ["science","scientific","scienza","scientifiche","scienze","ciencia","científico","ciência","científico","Wissenschaft","wissenschaftlich","wetenschap","wetenschappelijk","επιστήμη","επιστημονικός","επιστημονική","επιστημονικό","επιστημονικά","bilim","bilimsel","tudomány","tudományos","znanost","znanstveni","teadus","teaduslik"], - "key::52": ["engineering","ingegneria","ingeniería","engenharia","Ingenieurwissenschaft","ingenieurswetenschappen","bouwkunde","μηχανικός","μηχανική","μηχανικό","mühendislik","mérnöki","Inženirstvo","inseneeria","inseneri"], - "key::53": ["management","gestione","gestionale","gestionali","gestión","administración","gestão","administração","Verwaltung","management","διαχείριση","yönetim","menedzsment","vodstvo","upravljanje","management","juhtkond","juhtimine","haldus"], - "key::54": ["energy","energia","energía","energia","Energie","energie","ενέργεια","enerji","energia","energija","energia"], - "key::55": ["agricultural","agriculture","agricoltura","agricole","agrícola","agricultura","agrícola","agricultura","landwirtschaftlich","Landwirtschaft","landbouwkundig","landbouw","αγροτικός","αγροτική","αγροτικό","γεωργικός","γεωργική","γεωργικό","γεωργία","tarımsal","tarım","mezőgazdasági","mezőgazdaság","poljedelski","poljedelstvo","põllumajandus","põllumajanduslik"], - "key::56": ["information","informazione","información","informação","Information","informatie","πληροφορία","bilgi","információ","informacija","informatsioon","informatycznych"], - "key::57": ["social","sociali","social","social","Sozial","sociaal","maatschappelijk","κοινωνικός","κοινωνική","κοινωνικό","κοινωνικά","sosyal","szociális","družbeni","sotsiaal","sotsiaalne"], - "key::58": ["environmental","ambiente","medioambiental","ambiente","medioambiente","meioambiente","Umwelt","milieu","milieuwetenschap","milieukunde","περιβαλλοντικός","περιβαλλοντική","περιβαλλοντικό","περιβαλλοντικά","çevre","környezeti","okoliški","keskonna"], - "key::59": ["business","economia","economiche","economica","negocio","empresa","negócio","Unternehmen","bedrijf","bedrijfskunde","επιχείρηση","iş","üzleti","posel","ettevõte/äri"], - "key::60": ["pharmaceuticals","pharmacy","farmacia","farmaceutica","farmacéutica","farmacia","farmacêutica","farmácia","Pharmazeutika","Arzneimittelkunde","farmaceutica","geneesmiddelen","apotheek","φαρμακευτικός","φαρμακευτική","φαρμακευτικό","φαρμακευτικά","φαρμακείο","ilaç","eczane","gyógyszerészeti","gyógyszertár","farmacevtika","lekarništvo","farmaatsia","farmatseutiline"], - "key::61": ["healthcare","health services","salute","atenciónmédica","cuidadodelasalud","cuidadoscomasaúde","Gesundheitswesen","gezondheidszorg","ιατροφαρμακευτικήπερίθαλψη","sağlıkhizmeti","egészségügy","zdravstvo","tervishoid","tervishoiu"], - "key::62": ["history","storia","historia","história","Geschichte","geschiedenis","geschiedkunde","ιστορία","tarih","történelem","zgodovina","ajalugu"], - "key::63": ["materials","materiali","materia","materiales","materiais","materialen","υλικά","τεκμήρια","malzemeler","anyagok","materiali","materjalid","vahendid"], - "key::64": ["economics","economia","economiche","economica","economía","economia","Wirtschaft","economie","οικονομικά","οικονομικέςεπιστήμες","ekonomi","közgazdaságtan","gospodarstvo","ekonomija","majanduslik","majandus"], - "key::65": ["therapeutics","terapeutica","terapéutica","terapêutica","therapie","θεραπευτική","tedavibilimi","gyógykezelés","terapevtika","terapeutiline","ravi"], - "key::66": ["oncology","oncologia","oncologico","oncología","oncologia","Onkologie","oncologie","ογκολογία","onkoloji","onkológia","onkologija","onkoloogia"], - "key::67": ["natural","naturali","naturale","natural","natural","natürlich","natuurlijk","φυσικός","φυσική","φυσικό","φυσικά","doğal","természetes","naraven","loodus"], - "key::68": ["educational","educazione","pedagogia","educacional","educativo","educacional","pädagogisch","educatief","εκπαιδευτικός","εκπαιδευτική","εκπαιδευτικό","εκπαιδευτικά","eğitimsel","oktatási","izobraževalen","haridus","hariduslik"], - "key::69": ["biomedical","biomedica","biomédico","biomédico","biomedizinisch","biomedisch","βιοιατρικός","βιοιατρική","βιοιατρικό","βιοιατρικά","biyomedikal","orvosbiológiai","biomedicinski","biomeditsiiniline"], - "key::70": ["veterinary","veterinaria","veterinarie","veterinaria","veterinária","tierärtzlich","veterinair","veeartsenijlkunde","κτηνιατρικός","κτηνιατρική","κτηνιατρικό","κτηνιατρικά","veteriner","állatorvosi","veterinar","veterinarski","veterinaaria"], - "key::71": ["chemistry","chimica","química","química","Chemie","chemie","scheikunde","χημεία","kimya","kémia","kemija","keemia"], - "key::72": ["security","sicurezza","seguridad","segurança","Sicherheit","veiligheid","ασφάλεια","güvenlik","biztonsági","varnost","turvalisus","julgeolek"], - "key::73": ["biotechnology","biotecnologia","biotecnologie","biotecnología","biotecnologia","Biotechnologie","biotechnologie","βιοτεχνολογία","biyoteknoloji","biotechnológia","biotehnologija","biotehnoloogia"], - "key::74": ["military","militare","militari","militar","militar","Militär","militair","leger","στρατιωτικός","στρατιωτική","στρατιωτικό","στρατιωτικά","askeri","katonai","vojaški","vojni","militaar","wojskowa"], - "key::75": ["theological","teologia","teologico","teológico","tecnológica","theologisch","theologisch","θεολογικός","θεολογική","θεολογικό","θεολογικά","teolojik","technológiai","teološki","teoloogia","usuteadus","teoloogiline"], - "key::76": ["electronics","elettronica","electrónica","eletrônicos","Elektronik","elektronica","ηλεκτρονική","elektronik","elektronika","elektronika","elektroonika"], - "key::77": ["forestry","forestale","forestali","silvicultura","forestal","floresta","Forstwirtschaft","bosbouw","δασοκομία","δασολογία","ormancılık","erdészet","gozdarstvo","metsandus"], - "key::78": ["maritime","marittima","marittime","marittimo","marítimo","marítimo","maritiem","ναυτικός","ναυτική","ναυτικό","ναυτικά","ναυτιλιακός","ναυτιλιακή","ναυτιλιακό","ναυτιλιακά","θαλάσσιος","θαλάσσια","θαλάσσιο","denizcilik","tengeri","morski","mere","merendus"], - "key::79": ["sports","sport","deportes","esportes","Sport","sport","sportwetenschappen","άθληση","γυμναστικήδραστηριότητα","spor","sport","šport","sport","spordi"], - "key::80": ["surgery","chirurgia","chirurgiche","cirugía","cirurgia","Chirurgie","chirurgie","heelkunde","εγχείρηση","επέμβαση","χειρουργικήεπέμβαση","cerrahi","sebészet","kirurgija","kirurgia"], - "key::81": ["cultural","culturale","culturali","cultura","cultural","cultural","kulturell","cultureel","πολιτιστικός","πολιτιστική","πολιτιστικό","πολιτισμικός","πολιτισμική","πολιτισμικό","kültürel","kultúrális","kulturni","kultuuri","kultuuriline"], - "key::82": ["computerscience","informatica","ordenador","computadora","informática","computación","cienciasdelacomputación","ciênciadacomputação","Computer","computer","υπολογιστής","ηλεκτρονικόςυπολογιστής","bilgisayar","számítógép","računalnik","arvuti"], - "key::83": ["finance","financial","finanza","finanziarie","finanza","financiero","finanças","financeiro","Finanzen","finanziell","financiën","financieel","χρηματοοικονομικά","χρηματοδότηση","finanse","finansal","pénzügy","pénzügyi","finance","finančni","finants","finantsiline"], - "key::84": ["communication","comunicazione","comuniciación","comunicação","Kommunikation","communication","επικοινωνία","iletişim","kommunikáció","komuniciranje","kommunikatsioon"], - "key::85": ["justice","giustizia","justicia","justiça","Recht","Justiz","justitie","gerechtigheid","δικαιοσύνη","υπουργείοδικαιοσύνης","δίκαιο","adalet","igazságügy","pravo","õigus"], - "key::86": ["aerospace","aerospaziale","aerospaziali","aeroespacio","aeroespaço","Luftfahrt","luchtvaart","ruimtevaart","αεροπορικός","αεροπορική","αεροπορικό","αεροναυπηγικός","αεροναυπηγική","αεροναυπηγικό","αεροναυπηγικά","havacılıkveuzay","légtér","zrakoplovstvo","atmosfäär","kosmos"], - "key::87": ["dermatology","dermatologia","dermatología","dermatologia","Dermatologie","dermatologie","δρματολογία","dermatoloji","bőrgyógyászat","dermatológia","dermatologija","dermatoloogia"], - "key::88": ["architecture","architettura","arquitectura","arquitetura","Architektur","architectuur","αρχιτεκτονική","mimarlık","építészet","arhitektura","arhitektuur"], - "key::89": ["mathematics","matematica","matematiche","matemáticas","matemáticas","Mathematik","wiskunde","mathematica","μαθηματικά","matematik","matematika","matematika","matemaatika"], - "key::90": ["language","lingue","linguistica","linguistiche","lenguaje","idioma","língua","idioma","Sprache","taal","taalkunde","γλώσσα","dil","nyelv","jezik","keel"], - "key::91": ["neuroscience","neuroscienza","neurociencia","neurociência","Neurowissenschaft","neurowetenschappen","νευροεπιστήμη","nörobilim","idegtudomány","nevroznanost","neuroteadused"], - "key::92": ["automation","automazione","automatización","automação","Automatisierung","automatisering","αυτοματοποίηση","otomasyon","automatizálás","avtomatizacija","automatiseeritud"], - "key::93": ["pediatric","pediatria","pediatriche","pediatrico","pediátrico","pediatría","pediátrico","pediatria","pädiatrisch","pediatrische","παιδιατρική","pediatrik","gyermekgyógyászat","pediatrija","pediaatria"], - "key::94": ["photonics","fotonica","fotoniche","fotónica","fotônica","Photonik","fotonica","φωτονική","fotonik","fotonika","fotonika","fotoonika"], - "key::95": ["mechanics","meccanica","meccaniche","mecánica","mecânica","Mechanik","Maschinenbau","mechanica","werktuigkunde","μηχανικής","mekanik","gépészet","mehanika","mehaanika"], - "key::96": ["psychiatrics","psichiatria","psichiatrica","psichiatriche","psiquiatría","psiquiatria","Psychiatrie","psychiatrie","ψυχιατρική","psikiyatrik","pszihiátria","psihiatrija","psühhaatria"], - "key::97": ["psychology","fisiologia","psicología","psicologia","Psychologie","psychologie","ψυχολογία","psikoloji","pszihológia","psihologija","psühholoogia"], - "key::98": ["automotive","industriaautomobilistica","industriadelautomóvil","automotriz","industriaautomotriz","automotivo","Automobilindustrie","autoindustrie","αυτοκίνητος","αυτοκίνητη","αυτοκίνητο","αυτοκινούμενος","αυτοκινούμενη","αυτοκινούμενο","αυτοκινητιστικός","αυτοκινητιστική","αυτοκινητιστικό","otomotiv","autóipari","samogiben","avtomobilskaindustrija","auto-"], - "key::99": ["neurology","neurologia","neurologiche","neurología","neurologia","Neurologie","neurologie","zenuwleer","νευρολογία","nöroloji","neurológia","ideggyógyászat","nevrologija","neuroloogia"], - "key::100": ["geology","geologia","geologiche","geología","geologia","Geologie","geologie","aardkunde","γεωλογία","jeoloji","geológia","földtudomány","geologija","geoloogia"], - "key::101": ["microbiology","microbiologia","micro-biologia","microbiologiche","microbiología","microbiologia","Mikrobiologie","microbiologie","μικροβιολογία","mikrobiyoloji","mikrobiológia","mikrobiologija","mikrobioloogia"], - "key::102": ["informatics","informatica","informática","informática","informatica"], - "key::103": ["forschungsgemeinschaft","comunita ricerca","research community","research foundation","research association"], - "key::104": ["commerce","ticaret","ticarət","commercio","trade","handel","comercio"] } } } \ No newline at end of file diff --git a/release.properties b/release.properties index 90288567a..907a9fcab 100644 --- a/release.properties +++ b/release.properties @@ -1,5 +1,5 @@ #release configuration -#Wed Oct 23 16:22:47 CEST 2019 +#Wed Oct 23 16:34:27 CEST 2019 scm.commentPrefix=[maven-release-plugin] pushChanges=true project.rel.eu.dnetlib\:dnet-dedup-test=3.0.15 @@ -18,5 +18,5 @@ exec.snapshotReleasePluginAllowed=false project.dev.eu.dnetlib\:dnet-dedup=3.0.16-SNAPSHOT project.scm.eu.dnetlib\:dnet-pace-core.empty=true project.dev.eu.dnetlib\:dnet-dedup-test=3.0.16-SNAPSHOT -completedPhase=generate-release-poms +completedPhase=run-preparation-goals project.rel.eu.dnetlib\:dnet-pace-core=3.0.15 From 285ec3ca17ce415bc72c5a3a56f527fefec532c0 Mon Sep 17 00:00:00 2001 From: miconis Date: Thu, 24 Oct 2019 11:11:07 +0200 Subject: [PATCH 100/449] release rollback --- dnet-pace-core/pom.xml | 2 +- release.properties | 22 ---------------------- 2 files changed, 1 insertion(+), 23 deletions(-) delete mode 100644 release.properties diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 4f8aa1d45..34138cc85 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 3.0.15 + 3.0.15-SNAPSHOT ../pom.xml diff --git a/release.properties b/release.properties deleted file mode 100644 index 907a9fcab..000000000 --- a/release.properties +++ /dev/null @@ -1,22 +0,0 @@ -#release configuration -#Wed Oct 23 16:34:27 CEST 2019 -scm.commentPrefix=[maven-release-plugin] -pushChanges=true -project.rel.eu.dnetlib\:dnet-dedup-test=3.0.15 -scm.tag=dnet-dedup-3.0.15 -remoteTagging=true -project.scm.eu.dnetlib\:dnet-dedup-test.empty=true -projectVersionPolicyId=default -scm.url=scm\:git\:https\://github.com/dnet-team/dnet-dedup.git -scm.tagNameFormat=@{project.artifactId}-@{project.version} -project.rel.eu.dnetlib\:dnet-dedup=3.0.15 -project.dev.eu.dnetlib\:dnet-pace-core=3.0.16-SNAPSHOT -preparationGoals=clean verify -project.scm.eu.dnetlib\:dnet-dedup.tag=HEAD -project.scm.eu.dnetlib\:dnet-dedup.developerConnection=scm\:git\:https\://github.com/dnet-team/dnet-dedup.git -exec.snapshotReleasePluginAllowed=false -project.dev.eu.dnetlib\:dnet-dedup=3.0.16-SNAPSHOT -project.scm.eu.dnetlib\:dnet-pace-core.empty=true -project.dev.eu.dnetlib\:dnet-dedup-test=3.0.16-SNAPSHOT -completedPhase=run-preparation-goals -project.rel.eu.dnetlib\:dnet-pace-core=3.0.15 From cf93515d9431386fb96ed4b6537cb878dd60cec7 Mon Sep 17 00:00:00 2001 From: miconis Date: Thu, 24 Oct 2019 11:17:07 +0200 Subject: [PATCH 101/449] [maven-release-plugin] prepare release dnet-dedup-3.0.15 --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 34138cc85..4f8aa1d45 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 3.0.15-SNAPSHOT + 3.0.15 ../pom.xml From 13f93e605580e5f636d499863d06c0f167bbb9cc Mon Sep 17 00:00:00 2001 From: miconis Date: Thu, 24 Oct 2019 11:23:01 +0200 Subject: [PATCH 102/449] Revert "[maven-release-plugin] prepare release dnet-dedup-3.0.15" This reverts commit cf93515d9431386fb96ed4b6537cb878dd60cec7. --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 4f8aa1d45..34138cc85 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 3.0.15 + 3.0.15-SNAPSHOT ../pom.xml From ced4bcdd59aec7ecb6e14c5d098497185f9ab194 Mon Sep 17 00:00:00 2001 From: miconis Date: Thu, 24 Oct 2019 11:34:12 +0200 Subject: [PATCH 103/449] [maven-release-plugin] prepare release dnet-dedup-3.0.15 --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 34138cc85..4f8aa1d45 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 3.0.15-SNAPSHOT + 3.0.15 ../pom.xml From 075f741d28356e995c32eb55ae81407863998b55 Mon Sep 17 00:00:00 2001 From: miconis Date: Thu, 24 Oct 2019 11:34:19 +0200 Subject: [PATCH 104/449] [maven-release-plugin] prepare for next development iteration --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 4f8aa1d45..1235dcef7 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 3.0.15 + 3.0.16-SNAPSHOT ../pom.xml From 1beb77669150a875a05e336d2ea498501a0b98f9 Mon Sep 17 00:00:00 2001 From: miconis Date: Tue, 29 Oct 2019 15:58:21 +0100 Subject: [PATCH 105/449] minor changes --- dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Config.java | 1 - 1 file changed, 1 deletion(-) diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Config.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Config.java index 298ff9463..91c10963d 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Config.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Config.java @@ -3,7 +3,6 @@ package eu.dnetlib.pace.config; import java.util.List; import java.util.Map; -import eu.dnetlib.pace.condition.ConditionAlgo; import eu.dnetlib.pace.model.ClusteringDef; import eu.dnetlib.pace.model.FieldDef; import eu.dnetlib.pace.tree.support.TreeNodeDef; From 0973899865e34d8c4a6989fc7e0e47e6ac5eb9de Mon Sep 17 00:00:00 2001 From: miconis Date: Thu, 7 Nov 2019 12:47:12 +0100 Subject: [PATCH 106/449] code cleaning, distribution of the classes in packages and implementation of the new configuration --- .../pace/common/AbstractPaceFunctions.java | 89 +++-------- .../eu/dnetlib/pace/config/DedupConfig.java | 1 + .../eu/dnetlib/pace/config/PaceConfig.java | 7 +- .../java/eu/dnetlib/pace/config/WfConfig.java | 18 ++- .../pace/tree/JaroWinklerNormalizedName.java | 19 ++- .../pace/tree/Level2JaroWinklerTitle.java | 5 +- .../eu/dnetlib/pace/tree/LevensteinTitle.java | 5 +- .../tree/LevensteinTitleIgnoreVersion.java | 5 +- .../eu/dnetlib/pace/tree/support/AggType.java | 10 +- .../dnetlib/pace/tree/support/Comparator.java | 2 +- .../dnetlib/pace/tree/support/FieldConf.java | 14 +- .../pace/tree/support/TreeNodeDef.java | 21 ++- .../pace/tree/support/TreeNodeStats.java | 24 +-- .../pace/tree/support/TreeProcessor.java | 4 +- .../eu/dnetlib/pace/AbstractPaceTest.java | 3 +- .../clustering/ClusteringFunctionTest.java | 2 +- .../dnetlib/pace/common/PaceFunctionTest.java | 35 ++++- ...tanceAlgoTest.java => ComparatorTest.java} | 26 +--- .../eu/dnetlib/pace/config/ConfigTest.java | 28 ++-- .../eu/dnetlib/pace/config/org.test.conf | 40 ----- ...rg.curr.conf => organization.current.conf} | 140 ++++++++---------- .../pace/config/organization.no_synonyms.conf | 38 +++++ .../dnetlib/pace/config/result.pace.conf.json | 53 ------- .../eu/dnetlib/pace/config/result.test.conf | 51 +++++++ 24 files changed, 314 insertions(+), 326 deletions(-) rename dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/{DistanceAlgoTest.java => ComparatorTest.java} (87%) delete mode 100644 dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/org.test.conf rename dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/{org.curr.conf => organization.current.conf} (85%) create mode 100644 dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.no_synonyms.conf delete mode 100644 dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/result.pace.conf.json create mode 100644 dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/result.test.conf diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java index 23ff7acd2..8aeb36a0f 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java @@ -20,15 +20,17 @@ import java.util.*; import java.util.stream.Collectors; /** - * Set of common functions + * Set of common functions for the framework * * @author claudio * */ public abstract class AbstractPaceFunctions { + //city map to be used when translating the city names into codes private static Map cityMap = AbstractPaceFunctions.loadMapFromClasspath("/eu/dnetlib/pace/config/city_map.csv"); + //list of stopwords in different languages protected static Set stopwords_en = loadFromClasspath("/eu/dnetlib/pace/config/stopwords_en.txt"); protected static Set stopwords_de = loadFromClasspath("/eu/dnetlib/pace/config/stopwords_de.txt"); protected static Set stopwords_es = loadFromClasspath("/eu/dnetlib/pace/config/stopwords_es.txt"); @@ -36,15 +38,14 @@ public abstract class AbstractPaceFunctions { protected static Set stopwords_it = loadFromClasspath("/eu/dnetlib/pace/config/stopwords_it.txt"); protected static Set stopwords_pt = loadFromClasspath("/eu/dnetlib/pace/config/stopwords_pt.txt"); + //blacklist of ngrams: to avoid generic keys protected static Set ngramBlacklist = loadFromClasspath("/eu/dnetlib/pace/config/ngram_blacklist.txt"); private static final String alpha = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 "; - private static final String aliases_from = "⁰¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ⁿ₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎àáâäæãåāèéêëēėęîïíīįìôöòóœøōõûüùúūßśšłžźżçćčñń"; - private static final String aliases_to = "0123456789+-=()n0123456789+-=()aaaaaaaaeeeeeeeiiiiiioooooooouuuuussslzzzcccnn"; - - private static final String special_from = "İə"; - private static final String special_to = "Ie"; + private static final String aliases_from = "⁰¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ⁿ₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎àáâäæãåāèéêëēėęəîïíīįìôöòóœøōõûüùúūßśšłžźżçćčñń"; + private static final String aliases_to = "0123456789+-=()n0123456789+-=()aaaaaaaaeeeeeeeeiiiiiioooooooouuuuussslzzzcccnn"; + //doi prefix for normalization public final String DOI_PREFIX = "(https?:\\/\\/dx\\.doi\\.org\\/)|(doi:)"; protected final static FieldList EMPTY_FIELD = new FieldListImpl(); @@ -54,8 +55,7 @@ public abstract class AbstractPaceFunctions { } protected String cleanup(final String s) { - final String ss = fixSpecial(s); //TODO is there something implemented to replace strange symbols with latin letters? - final String s0 = ss.toLowerCase(); + final String s0 = s.toLowerCase(); final String s1 = fixAliases(s0); final String s2 = nfd(s1); final String s3 = s2.replaceAll("–", " "); @@ -63,15 +63,12 @@ public abstract class AbstractPaceFunctions { final String s5 = s4.replaceAll(""", " "); final String s6 = s5.replaceAll("−", " "); final String s7 = s6.replaceAll("([0-9]+)", " $1 "); - final String s8 = s7.replaceAll("[^\\p{ASCII}]|\\p{Punct}", " "); - final String s9 = s8.replaceAll("\\n", " "); - final String s10 = s9.replaceAll("(?m)\\s+", " "); - final String s11 = s10.trim(); - return s11; - } - - protected String finalCleanup(final String s) { - return s.toLowerCase(); + final String s8 = s7.replaceAll("[^\\p{ASCII}]", ""); + final String s9 = s8.replaceAll("[\\p{Punct}]", " "); + final String s10 = s9.replaceAll("\\n", " "); + final String s11 = s10.replaceAll("(?m)\\s+", " "); + final String s12 = s11.trim(); + return s12; } protected boolean checkNumbers(final String a, final String b) { @@ -98,16 +95,6 @@ public abstract class AbstractPaceFunctions { return s.replaceAll("\\D", ""); } - //sometimes the toLowerCase() produces error, this is meant to prevent them by replacing special character before the lowercase function - protected static String fixSpecial(final String s) { - final StringBuilder sb = new StringBuilder(); - for (final char ch : Lists.charactersOf(s)) { - final int i = StringUtils.indexOf(special_from, ch); - sb.append(i >= 0 ? special_to.charAt(i) : ch); - } - return sb.toString(); - } - protected static String fixAliases(final String s) { final StringBuilder sb = new StringBuilder(); for (final char ch : Lists.charactersOf(s)) { @@ -134,20 +121,19 @@ public abstract class AbstractPaceFunctions { return s != null; } - // /////////////////////// - protected String normalize(final String s) { - return nfd(s).toLowerCase() + return nfd(s) + .toLowerCase() // do not compact the regexes in a single expression, would cause StackOverflowError in case of large input strings - .replaceAll("(\\W)+", " ") - .replaceAll("(\\p{InCombiningDiacriticalMarks})+", " ") + .replaceAll("[^ \\w]+", "") + .replaceAll("(\\p{InCombiningDiacriticalMarks})+", "") .replaceAll("(\\p{Punct})+", " ") .replaceAll("(\\d)+", " ") .replaceAll("(\\n)+", " ") .trim(); } - private String nfd(final String s) { + public String nfd(final String s) { return Normalizer.normalize(s, Normalizer.Form.NFD); } @@ -186,8 +172,6 @@ public abstract class AbstractPaceFunctions { return newset; } - // //////////////////// - public static Set loadFromClasspath(final String classpath) { final Set h = Sets.newHashSet(); try { @@ -217,17 +201,6 @@ public abstract class AbstractPaceFunctions { return m; } - //translate the string: replace the keywords with the code - public String translate(String s1, Map translationMap){ - final StringTokenizer st = new StringTokenizer(s1); - final StringBuilder sb = new StringBuilder(); - while (st.hasMoreTokens()){ - final String token = st.nextToken(); - sb.append(translationMap.getOrDefault(token,token) + " "); - } - return sb.toString().trim(); - } - public String removeKeywords(String s, Set keywords) { s = " " + s + " "; @@ -238,7 +211,6 @@ public abstract class AbstractPaceFunctions { return s.trim(); } - public double keywordsCompare(Set s1, Set s2, Map translationMap){ Set k1 = keywordsToCodes(s1, translationMap); @@ -252,23 +224,6 @@ public abstract class AbstractPaceFunctions { return (double)CollectionUtils.intersection(k1,k2).size()/(double)longer; } - //returns true if at least 1 city is in common - //returns true if no cities are contained in names - //returns false if one of the two names have no city - public boolean sameCity(Set s1, Set s2){ - - Set c1 = citiesToCodes(s1); - Set c2 = citiesToCodes(s2); - - if (c1.isEmpty() && c2.isEmpty()) - return true; - else { - if (c1.isEmpty() ^ c2.isEmpty()) - return false; - return CollectionUtils.intersection(c1, c2).size() > 0; - } - } - //convert the set of keywords to codes public Set toCodes(Set keywords, Map translationMap) { return keywords.stream().map(s -> translationMap.get(s)).collect(Collectors.toSet()); @@ -294,7 +249,7 @@ public abstract class AbstractPaceFunctions { return pid.toLowerCase().replaceAll(DOI_PREFIX, ""); } - //get the list of codes into the input string + //get the list of keywords into the input string public Set getKeywords(String s1, Map translationMap, int windowSize){ String s = s1; @@ -311,10 +266,10 @@ public abstract class AbstractPaceFunctions { while (length != 0) { for (int i = 0; i<=tokens.size()-length; i++){ - String candidate = Joiner.on(" ").join(tokens.subList(i, i + length)); + String candidate = concat(tokens.subList(i, i + length)); if (translationMap.containsKey(candidate)) { codes.add(candidate); - s = s.replace(candidate, ""); + s = s.replace(candidate, "").trim(); } } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java index beab7a85f..bcfa5a108 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java @@ -45,6 +45,7 @@ public class DedupConfig implements Config, Serializable { defaults.put("slidingWindowSize", "200"); defaults.put("rootBuilder", "result"); defaults.put("includeChildren", "true"); + defaults.put("maxIterations", "20"); } public DedupConfig() {} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java index 1d4a03e37..7a87a82a5 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java @@ -1,7 +1,7 @@ package eu.dnetlib.pace.config; import com.google.common.collect.Maps; - +import eu.dnetlib.pace.common.AbstractPaceFunctions; import eu.dnetlib.pace.model.ClusteringDef; import eu.dnetlib.pace.model.FieldDef; import eu.dnetlib.pace.tree.support.TreeNodeDef; @@ -9,11 +9,10 @@ import eu.dnetlib.pace.util.PaceResolver; import org.codehaus.jackson.annotate.JsonIgnore; import java.io.Serializable; -import java.text.Normalizer; import java.util.List; import java.util.Map; -public class PaceConfig implements Serializable { +public class PaceConfig extends AbstractPaceFunctions implements Serializable { private List model; @@ -46,7 +45,7 @@ public class PaceConfig implements Serializable { for (String key : synonyms.keySet()) { for (String term : synonyms.get(key)){ translationMap.put( - Normalizer.normalize(term.toLowerCase(), Normalizer.Form.NFD), + normalize(term.toLowerCase()), key); } } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/WfConfig.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/WfConfig.java index ddcfaaece..bd00f2fb9 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/WfConfig.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/WfConfig.java @@ -76,6 +76,12 @@ public class WfConfig implements Serializable { /** Maximum number of allowed children. */ private int maxChildren = MAX_CHILDREN; + /** Default maximum number of iterations. */ + private final static int MAX_ITERATIONS = 20; + + /** Maximum number of iterations */ + private int maxIterations = MAX_ITERATIONS; + public WfConfig() {} /** @@ -104,7 +110,7 @@ public class WfConfig implements Serializable { */ public WfConfig(final String entityType, final String orderField, final List rootBuilder, final String dedupRun, final double threshold, - final Set skipList, final int queueMaxSize, final int groupMaxSize, final int slidingWindowSize, final boolean includeChildren) { + final Set skipList, final int queueMaxSize, final int groupMaxSize, final int slidingWindowSize, final boolean includeChildren, final int maxIterations) { super(); this.entityType = entityType; this.orderField = orderField; @@ -116,6 +122,7 @@ public class WfConfig implements Serializable { this.groupMaxSize = groupMaxSize; this.slidingWindowSize = slidingWindowSize; this.includeChildren = includeChildren; + this.maxIterations = maxIterations; } /** @@ -245,6 +252,15 @@ public class WfConfig implements Serializable { this.maxChildren = maxChildren; } + public int getMaxIterations() { + return maxIterations; + } + + public WfConfig setMaxIterations(int maxIterations) { + this.maxIterations = maxIterations; + return this; + } + /* * (non-Javadoc) * diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerNormalizedName.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerNormalizedName.java index 4c167806d..6899be109 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerNormalizedName.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerNormalizedName.java @@ -5,6 +5,7 @@ import eu.dnetlib.pace.tree.support.AbstractComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; import eu.dnetlib.pace.config.Config; +import org.apache.commons.collections.CollectionUtils; import java.util.Map; import java.util.Set; @@ -44,7 +45,7 @@ public class JaroWinklerNormalizedName extends AbstractComparator { Set cities1 = getCities(ca, params.getOrDefault("windowSize", 4).intValue()); Set cities2 = getCities(cb, params.getOrDefault("windowSize", 4).intValue()); - if (sameCity(cities1,cities2)) { + if (checkCities(cities1,cities2)) { if (keywordsCompare(keywords1, keywords2, conf.translationMap())>params.getOrDefault("threshold", 0.5).doubleValue()) { @@ -64,6 +65,22 @@ public class JaroWinklerNormalizedName extends AbstractComparator { return 0.0; } + //returns true if at least 1 city is in common + //returns true if no cities are contained in names + //returns false if one of the two names have no city + public boolean checkCities(Set s1, Set s2){ + Set c1 = citiesToCodes(s1); + Set c2 = citiesToCodes(s2); + + if (c1.isEmpty() && c2.isEmpty()) + return true; + else { + if (c1.isEmpty() ^ c2.isEmpty()) + return false; + return CollectionUtils.intersection(c1, c2).size() > 0; + } + } + @Override public double getWeight() { return super.weight; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinklerTitle.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinklerTitle.java index 6a19e6686..0a9ffdf16 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinklerTitle.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinklerTitle.java @@ -31,10 +31,7 @@ public class Level2JaroWinklerTitle extends AbstractComparator { if (check) return 0.5; - final String cca = finalCleanup(ca); - final String ccb = finalCleanup(cb); - - return ssalgo.score(cca, ccb); + return ssalgo.score(ca, cb); } @Override diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitle.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitle.java index 546284edf..e5edacfee 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitle.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitle.java @@ -36,10 +36,7 @@ public class LevensteinTitle extends AbstractComparator { if (check) return 0.5; - final String cca = finalCleanup(ca); - final String ccb = finalCleanup(cb); - - return normalize(ssalgo.score(cca, ccb), cca.length(), ccb.length()); + return normalize(ssalgo.score(ca, cb), ca.length(), cb.length()); } private double normalize(final double score, final int la, final int lb) { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitleIgnoreVersion.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitleIgnoreVersion.java index 83b80b1d8..89f3749b5 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitleIgnoreVersion.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitleIgnoreVersion.java @@ -37,10 +37,7 @@ public class LevensteinTitleIgnoreVersion extends AbstractComparator { ca = filterAllStopWords(ca); cb = filterAllStopWords(cb); - final String cca = finalCleanup(ca); - final String ccb = finalCleanup(cb); - - return normalize(ssalgo.score(cca, ccb), cca.length(), ccb.length()); + return normalize(ssalgo.score(ca, cb), ca.length(), cb.length()); } private double normalize(final double score, final int la, final int lb) { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AggType.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AggType.java index 8f7316ba5..697294a75 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AggType.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AggType.java @@ -4,11 +4,15 @@ import eu.dnetlib.pace.util.PaceException; public enum AggType { - WEIGHTED_MEAN, - AVG, + W_MEAN, //weighted mean + AVG, //average SUM, MAX, - MIN; + MIN, + NC, //necessary condition + SC, //sufficient condition + AND, + OR; public static AggType getEnum(String value) { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/Comparator.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/Comparator.java index 8524996f4..67c26e99a 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/Comparator.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/Comparator.java @@ -6,7 +6,7 @@ import eu.dnetlib.pace.model.Field; public interface Comparator { /* - * return : -1 -> can't decide (missing field) + * return : -1 -> can't decide (i.e. missing field) * >0 -> similarity degree (depends on the algorithm) * */ public double compare(Field a, Field b, Config conf); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/FieldConf.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/FieldConf.java index 3dd4b0185..b25d2a03c 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/FieldConf.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/FieldConf.java @@ -14,25 +14,25 @@ public class FieldConf implements Serializable { private double weight = 1.0; //weight for the field (to be used in the aggregation) private Map params; //parameters - private boolean ignoreMissing; + private boolean countIfUndefined; - public boolean isIgnoreMissing() { - return ignoreMissing; + public boolean isCountIfUndefined() { + return countIfUndefined; } - public void setIgnoreMissing(boolean ignoreMissing) { - this.ignoreMissing = ignoreMissing; + public void setCountIfUndefined(boolean countIfUndefined) { + this.countIfUndefined = countIfUndefined; } public FieldConf() { } - public FieldConf(String field, String comparator, double weight, Map params, boolean ignoreMissing) { + public FieldConf(String field, String comparator, double weight, Map params, boolean countIfUndefined) { this.field = field; this.comparator = comparator; this.weight = weight; this.params = params; - this.ignoreMissing = ignoreMissing; + this.countIfUndefined = countIfUndefined; } public String getField() { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java index 1d187b056..4f95ad366 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java @@ -4,7 +4,6 @@ import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.config.PaceConfig; import eu.dnetlib.pace.model.MapDocument; import eu.dnetlib.pace.util.PaceException; -import org.codehaus.jackson.annotate.JsonIgnore; import org.codehaus.jackson.map.ObjectMapper; import java.io.IOException; @@ -22,16 +21,16 @@ public class TreeNodeDef implements Serializable { private String negative; private String undefined; - boolean ignoreMissing; + boolean ignoreUndefined; - public TreeNodeDef(List fields, AggType aggregation, double threshold, String positive, String negative, String undefined, boolean ignoreMissing) { + public TreeNodeDef(List fields, AggType aggregation, double threshold, String positive, String negative, String undefined, boolean ignoreUndefined) { this.fields = fields; this.aggregation = aggregation; this.threshold = threshold; this.positive = positive; this.negative = negative; this.undefined = undefined; - this.ignoreMissing = ignoreMissing; + this.ignoreUndefined = ignoreUndefined; } public TreeNodeDef() { @@ -48,9 +47,9 @@ public class TreeNodeDef implements Serializable { double result = comparator(fieldConf).compare(doc1.getFieldMap().get(fieldConf.getField()), doc2.getFieldMap().get(fieldConf.getField()), conf); - if (result == -1) { //if the field is missing - stats.incrementMissCount(); - if (!fieldConf.isIgnoreMissing()) { + if (result == -1) { //if the comparison is undefined + stats.incrementUndefinedCount(); + if (fieldConf.isCountIfUndefined()) { //if it must be taken into account, increment weights (i.e. the average would be lower) stats.incrementWeightsSum(weight); } } @@ -117,12 +116,12 @@ public class TreeNodeDef implements Serializable { this.undefined = undefined; } - public boolean isIgnoreMissing() { - return ignoreMissing; + public boolean isIgnoreUndefined() { + return ignoreUndefined; } - public void setIgnoreMissing(boolean ignoreMissing) { - this.ignoreMissing = ignoreMissing; + public void setIgnoreUndefined(boolean ignoreUndefined) { + this.ignoreUndefined = ignoreUndefined; } @Override diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeStats.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeStats.java index 1ae899637..8d313e8eb 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeStats.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeStats.java @@ -7,7 +7,7 @@ import java.io.Serializable; public class TreeNodeStats implements Serializable { private DescriptiveStatistics stats; - private int missCount = 0; + private int undefinedCount = 0; //counter for the number of undefined comparisons between the fields in the tree node private int fieldsCount = 0; private double weightsSum = 0.0; @@ -15,8 +15,8 @@ public class TreeNodeStats implements Serializable { this.stats = new DescriptiveStatistics(); } - public TreeNodeStats(int missCount, int fieldsCount, double weightsSum) { - this.missCount = missCount; + public TreeNodeStats(int undefinedCount, int fieldsCount, double weightsSum) { + this.undefinedCount = undefinedCount; this.fieldsCount = fieldsCount; this.weightsSum = weightsSum; } @@ -29,12 +29,12 @@ public class TreeNodeStats implements Serializable { this.stats = stats; } - public int getMissCount() { - return missCount; + public int getUndefinedCount() { + return undefinedCount; } - public void setMissCount(int missCount) { - this.missCount = missCount; + public void setUndefinedCount(int undefinedCount) { + this.undefinedCount = undefinedCount; } public int getFieldsCount() { @@ -57,8 +57,8 @@ public class TreeNodeStats implements Serializable { this.weightsSum += delta; } - public void incrementMissCount(){ - this.missCount += 1; + public void incrementUndefinedCount(){ + this.undefinedCount += 1; } public void incrementScoresSum(double delta){ @@ -72,11 +72,15 @@ public class TreeNodeStats implements Serializable { return stats.getMean(); case SUM: return stats.getSum(); + case SC: + case OR: case MAX: return stats.getMax(); + case NC: + case AND: case MIN: return stats.getMin(); - case WEIGHTED_MEAN: + case W_MEAN: return stats.getSum()/weightsSum; default: return 0.0; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeProcessor.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeProcessor.java index 70e96235a..50d3ec667 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeProcessor.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeProcessor.java @@ -40,9 +40,11 @@ public class TreeProcessor { TreeNodeStats stats = currentNode.evaluate(doc1, doc2, config); - if (!currentNode.isIgnoreMissing() && stats.getMissCount()>0) { + //if ignoreUndefined=false the miss is considered as undefined + if (!currentNode.isIgnoreUndefined() && stats.getUndefinedCount()>0) { current = currentNode.getUndefined(); } + //if ignoreUndefined=true the miss is ignored and the score computed anyway else if (stats.getFinalScore(currentNode.getAggregation()) >= currentNode.getThreshold()) { current = currentNode.getPositive(); } diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/AbstractPaceTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/AbstractPaceTest.java index 3da6f0a7e..14e1e8d0d 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/AbstractPaceTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/AbstractPaceTest.java @@ -1,5 +1,6 @@ package eu.dnetlib.pace; +import eu.dnetlib.pace.common.AbstractPaceFunctions; import eu.dnetlib.pace.config.Type; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.model.FieldListImpl; @@ -11,7 +12,7 @@ import java.io.StringWriter; import java.util.List; import java.util.stream.Collectors; -public abstract class AbstractPaceTest { +public abstract class AbstractPaceTest extends AbstractPaceFunctions { protected String readFromClasspath(final String filename) { final StringWriter sw = new StringWriter(); diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java index 6eec8cbaa..ff7a49fbe 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java @@ -18,7 +18,7 @@ public class ClusteringFunctionTest extends AbstractPaceTest { @Before public void setUp() throws Exception { params = Maps.newHashMap(); - conf = DedupConfig.load(AbstractPaceFunctions.readFromClasspath("/eu/dnetlib/pace/config/org.curr.conf", ClusteringFunctionTest.class)); + conf = DedupConfig.load(AbstractPaceFunctions.readFromClasspath("/eu/dnetlib/pace/config/organization.current.conf", ClusteringFunctionTest.class)); } @Test diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/common/PaceFunctionTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/common/PaceFunctionTest.java index e15b54331..d92d4009a 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/common/PaceFunctionTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/common/PaceFunctionTest.java @@ -1,5 +1,6 @@ package eu.dnetlib.pace.common; +import org.junit.Assert; import org.junit.Test; import static junit.framework.Assert.assertEquals; @@ -7,6 +8,8 @@ import static junit.framework.Assert.assertTrue; public class PaceFunctionTest extends AbstractPaceFunctions { + private final static String TEST_STRING = "Toshiba NB550D: è un netbook su piattaforma AMD Fusion⁽¹²⁾."; + @Test public void normalizePidTest(){ @@ -14,7 +17,6 @@ public class PaceFunctionTest extends AbstractPaceFunctions { assertEquals("10.1109/tns.2015.2493347", normalizePid("10.1109/TNS.2015.2493347")); assertEquals("10.0001/testdoi", normalizePid("http://dx.doi.org/10.0001/testDOI")); assertEquals("10.0001/testdoi", normalizePid("https://dx.doi.org/10.0001/testDOI")); - } @Test @@ -22,4 +24,35 @@ public class PaceFunctionTest extends AbstractPaceFunctions { assertEquals("universita politecnica marche", filterAllStopWords("universita politecnica delle marche")); } + + @Test + public void normalizeTest() { + Assert.assertEquals("universitat", normalize("Universität")); + + System.out.println(normalize("İstanbul Ticarət Universiteti")); + } + + @Test + public void cleanupTest() { + assertEquals("istanbul ticaret universiteti", cleanup("İstanbul Ticarət Universiteti")); + + + System.out.println("cleaned up : " + cleanup(TEST_STRING)); + } + + @Test + public void testGetNumbers() { + System.out.println("Numbers : " + getNumbers(TEST_STRING)); + } + + @Test + public void testRemoveSymbols() { + System.out.println("Without symbols: " + removeSymbols(TEST_STRING)); + } + + @Test + public void testFixAliases() { + System.out.println("Fixed aliases : " + fixAliases(TEST_STRING)); + } + } diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/DistanceAlgoTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java similarity index 87% rename from dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/DistanceAlgoTest.java rename to dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java index c3dc48282..4247d9be6 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/DistanceAlgoTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java @@ -14,9 +14,8 @@ import java.util.Map; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertTrue; -public class DistanceAlgoTest extends AbstractPaceFunctions { +public class ComparatorTest extends AbstractPaceFunctions { - private final static String TEST_STRING = "Toshiba NB550D: è un netbook su piattaforma AMD Fusion⁽¹²⁾."; private Map params; private DedupConfig conf; @@ -24,7 +23,8 @@ public class DistanceAlgoTest extends AbstractPaceFunctions { public void setup() { params = new HashMap<>(); params.put("weight", 1.0); - conf = DedupConfig.load(readFromClasspath("/eu/dnetlib/pace/config/org.curr.conf", DistanceAlgoTest.class)); + conf = DedupConfig.load(readFromClasspath("/eu/dnetlib/pace/config/organization.current.conf", ComparatorTest.class)); + } @Test @@ -33,26 +33,6 @@ public class DistanceAlgoTest extends AbstractPaceFunctions { System.out.println("utils = " + utils.cleanupForOrdering("University of Pisa")); } - @Test - public void testGetNumbers() { - System.out.println("Numbers : " + getNumbers(TEST_STRING)); - } - - @Test - public void testRemoveSymbols() { - System.out.println("Without symbols: " + removeSymbols(TEST_STRING)); - } - - @Test - public void testFixAliases() { - System.out.println("Fixed aliases : " + fixAliases(TEST_STRING)); - } - - @Test - public void testCleanup() { - System.out.println("cleaned up : " + cleanup(TEST_STRING)); - } - @Test public void testJaroWinklerNormalizedName() { final JaroWinklerNormalizedName jaroWinklerNormalizedName = new JaroWinklerNormalizedName(params); diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java index 9051049fb..33ef542da 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java @@ -3,6 +3,8 @@ package eu.dnetlib.pace.config; import eu.dnetlib.pace.AbstractPaceTest; import org.junit.Test; +import java.util.Map; + import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; @@ -11,15 +13,10 @@ public class ConfigTest extends AbstractPaceTest { @Test public void dedupConfigSerializationTest() { - final DedupConfig cfgFromClasspath = DedupConfig.load(readFromClasspath("org.curr.conf")); + final DedupConfig cfgFromClasspath = DedupConfig.load(readFromClasspath("organization.current.conf")); final String conf = cfgFromClasspath.toString(); -// System.out.println("*****SERIALIZED*****"); -// System.out.println(conf); -// System.out.println("*****FROM CLASSPATH*****"); -// System.out.println(readFromClasspath("result.pace.conf.json")); - final DedupConfig cfgFromSerialization = DedupConfig.load(conf); assertEquals(cfgFromClasspath.toString(), cfgFromSerialization.toString()); @@ -27,29 +24,36 @@ public class ConfigTest extends AbstractPaceTest { assertNotNull(cfgFromClasspath); assertNotNull(cfgFromSerialization); - } @Test public void dedupConfigTest() { - DedupConfig load = DedupConfig.load(readFromClasspath("org.curr.conf")); + DedupConfig load = DedupConfig.load(readFromClasspath("organization.current.conf")); System.out.println(load.toString()); } @Test - public void translationMapTest() { + public void initTranslationMapTest() { - DedupConfig load = DedupConfig.load(readFromClasspath("org.curr.conf")); + DedupConfig load = DedupConfig.load(readFromClasspath("organization.current.conf")); + + Map translationMap = load.translationMap(); + + System.out.println("translationMap = " + translationMap.size()); + + for (String key: translationMap.keySet()) { + if (translationMap.get(key).equals("key::1")) + System.out.println("key = " + key); + } - System.out.println("translationMap = " + load.getPace().translationMap().toString()); } @Test public void emptyTranslationMapTest() { - DedupConfig load = DedupConfig.load(readFromClasspath("org.test.conf")); + DedupConfig load = DedupConfig.load(readFromClasspath("organization.no_synonyms.conf")); assertEquals(0, load.getPace().translationMap().keySet().size()); } diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/org.test.conf b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/org.test.conf deleted file mode 100644 index 3af658574..000000000 --- a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/org.test.conf +++ /dev/null @@ -1,40 +0,0 @@ -{ - "wf" : { - "threshold" : "0.9", - "dedupRun" : "001", - "entityType" : "organization", - "orderField" : "legalname", - "queueMaxSize" : "2000", - "groupMaxSize" : "50", - "slidingWindowSize" : "200", - "rootBuilder" : [ "organization", "projectOrganization_participation_isParticipant", "datasourceOrganization_provision_isProvidedBy" ], - "includeChildren" : "true" - }, - "pace" : { - "clustering" : [ - { "name" : "sortedngrampairs", "fields" : [ "legalname" ], "params" : { "max" : 2, "ngramLen" : "3"} }, - { "name" : "suffixprefix", "fields" : [ "legalname" ], "params" : { "max" : 1, "len" : "3" } }, - { "name" : "urlclustering", "fields" : [ "websiteurl" ], "params" : { } }, - { "name" : "keywordsclustering", "fields" : [ "legalname" ], "params" : { "max": 2, "windowSize": 4} } - ], - "strictConditions" : [ - { "name" : "exactMatch", "fields" : [ "gridid" ] } - ], - "conditions" : [ - { "name" : "DomainExactMatch", "fields" : [ "websiteurl" ] }, - { "name" : "exactMatch", "fields" : [ "country" ] } - ], - "model" : [ - { "name" : "country", "algo" : "Null", "type" : "String", "weight" : "0", "ignoreMissing" : "false", "path" : "organization/metadata/country/classid" }, - { "name" : "legalshortname", "algo" : "JaroWinklerNormalizedName", "type" : "String", "weight" : "0.1", "ignoreMissing" : "true", "path" : "organization/metadata/legalshortname/value" }, - { "name" : "legalname", "algo" : "JaroWinklerNormalizedName", "type" : "String", "weight" : "0.9", "ignoreMissing" : "false", "path" : "organization/metadata/legalname/value", "params" : {"windowSize" : 4, "threshold" : 0.7} }, - { "name" : "websiteurl", "algo" : "Null", "type" : "URL", "weight" : "0", "ignoreMissing" : "true", "path" : "organization/metadata/websiteurl/value", "params" : { "host" : 0.5, "path" : 0.5 } }, - { "name" : "gridid", "algo" : "Null", "type" : "String", "weight" : "0.0", "ignoreMissing" : "true", "path" : "pid[qualifier#classid = {grid}]/value" } - ], - "blacklists" : { - "legalname" : [] - }, - "synonyms": { - } - } -} \ No newline at end of file diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/org.curr.conf b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.current.conf similarity index 85% rename from dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/org.curr.conf rename to dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.current.conf index 017cbab93..510de0398 100644 --- a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/org.curr.conf +++ b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.current.conf @@ -12,42 +12,28 @@ }, "pace" : { "clustering" : [ -<<<<<<< HEAD - { "name" : "sortedngrampairs", "fieldsCount" : [ "legalname" ], "params" : { "max" : 2, "ngramLen" : "3"} }, - { "name" : "suffixprefix", "fieldsCount" : [ "legalname" ], "params" : { "max" : 1, "len" : "3" } }, - { "name" : "urlclustering", "fieldsCount" : [ "websiteurl" ], "params" : { } } -======= { "name" : "sortedngrampairs", "fields" : [ "legalname" ], "params" : { "max" : 2, "ngramLen" : "3"} }, { "name" : "suffixprefix", "fields" : [ "legalname" ], "params" : { "max" : 1, "len" : "3" } }, { "name" : "urlclustering", "fields" : [ "websiteurl" ], "params" : { } }, { "name" : "keywordsclustering", "fields" : [ "legalname" ], "params" : { "max": 2, "windowSize": 4} } ->>>>>>> origin/master - ], - "sufficientConditions" : [ - { "name" : "exactMatch", "fieldsCount" : [ "gridid" ] } - ], -<<<<<<< HEAD - "necessaryConditions" : [ - { "name" : "exactMatch", "fieldsCount" : [ "country" ] }, - { "name" : "DomainExactMatch", "fieldsCount" : [ "websiteurl" ] } -======= - "conditions" : [ - { "name" : "DomainExactMatch", "fields" : [ "websiteurl" ] }, - { "name" : "exactMatch", "fields" : [ "country" ] } ->>>>>>> origin/master ], + "decisionTree" : { + "start": {"fields": [{"field":"gridid", "comparator":"exactMatch", "weight":1.0, "countIfUndefined":"true", "params": {}}], "threshold":1.0, "aggregation": "MAX", "positive":"MATCH", "negative":"layer2", "undefined":"layer2", "ignoreUndefined": "true"}, + "layer2": {"fields": [{"field":"websiteurl", "comparator":"domainExactMatch", "weight":1.0, "countIfUndefined":"true", "params" : {}}, {"field":"country", "comparator":"exactMatch", "weight":1.0, "countIfUndefined":"false", "params": {}}], "threshold":1.0, "aggregation": "MIN", "positive":"layer3", "negative":"NO_MATCH", "undefined":"layer3", "ignoreUndefined": "false"}, + "layer3": {"fields": [{"field":"legalname", "comparator":"jaroWinklerNormalizedName", "weight":0.9, "countIfUndefined":"false", "params":{"windowSize" : 4, "threshold" : 0.7}}, {"field":"legalshortname", "comparator":"jaroWinklerNormalizedName", "weight":0.1, "countIfUndefined":"true", "params":{}}], "threshold": 0.9, "aggregation": "W_MEAN", "positive":"MATCH", "negative":"NO_MATCH", "undefined":"NO_MATCH", "ignoreUndefined": "true"} + }, "model" : [ - { "name" : "country", "algo" : "Null", "type" : "String", "weight" : "0", "ignoreMissing" : "false", "path" : "organization/metadata/country/classid" }, - { "name" : "legalshortname", "algo" : "JaroWinklerNormalizedName", "type" : "String", "weight" : "0.1", "ignoreMissing" : "true", "path" : "organization/metadata/legalshortname/value" }, - { "name" : "legalname", "algo" : "JaroWinklerNormalizedName", "type" : "String", "weight" : "0.9", "ignoreMissing" : "false", "path" : "organization/metadata/legalname/value", "params" : {"windowSize" : 4, "threshold" : 0.7} }, - { "name" : "websiteurl", "algo" : "Null", "type" : "URL", "weight" : "0", "ignoreMissing" : "true", "path" : "organization/metadata/websiteurl/value", "params" : { "host" : 0.5, "path" : 0.5 } }, - { "name" : "gridid", "algo" : "Null", "type" : "String", "weight" : "0.0", "ignoreMissing" : "true", "path" : "pid[qualifier#classid = {grid}]/value" } + { "name" : "country", "type" : "String", "path" : "organization/metadata/country/classid"}, + { "name" : "legalshortname", "type" : "String", "path" : "organization/metadata/legalshortname/value"}, + { "name" : "legalname", "type" : "String", "path" : "organization/metadata/legalname/value" }, + { "name" : "websiteurl", "type" : "URL", "path" : "organization/metadata/websiteurl/value" }, + { "name" : "gridid", "type" : "String", "path" : "pid[qualifier#classid = {grid}]/value"} ], "blacklists" : { "legalname" : [] }, "synonyms": { - "key::1": ["university","università","universita","università studi","universita studi","universitario","universitaria","université","universitaire","universitaires","universidad","universitade","Universität","universitaet","Uniwersytet","университет","universiteit","πανεπιστήμιο","universitesi","universiteti"], + "key::1": ["university","università","università studi","universitario","universitaria","université","universitaire","universitaires","universidad","universitade","Universität","universitaet","Uniwersytet","университет","universiteit","πανεπιστήμιο","universitesi","universiteti"], "key::2": ["studies","studi","études","estudios","estudos","Studien","studia","исследования","studies","σπουδές"], "key::3": ["advanced","superiore","supérieur","supérieure","supérieurs","supérieures","avancado","avancados","fortgeschrittene","fortgeschritten","zaawansowany","передовой","gevorderd","gevorderde","προχωρημένος","προχωρημένη","προχωρημένο","προχωρημένες","προχωρημένα","wyzsza"], "key::4": ["institute","istituto","institut","instituto","instituto","Institut","instytut","институт","instituut","ινστιτούτο"], @@ -97,58 +83,58 @@ "key::48": ["promotion","promozione","продвижение","proothisis","forderung"], "key::49": ["medical","medicine","clinical","medicina","clinici","médico","medicina","clínica","médico","medicina","clínica","medizinisch","Medizin","klinisch","medisch","geneeskunde","klinisch","ιατρικός","ιατρική","ιατρικό","ιατρικά","κλινικός","κλινική","κλινικό","κλινικά","tıbbi","tıp","klinik","orvosi","orvostudomány","klinikai","zdravniški","medicinski","klinični","meditsiini","kliinik","kliiniline"], "key::50": ["technology","technological","tecnologia","tecnologie","tecnología","tecnológico","tecnologia","tecnológico","Technologie","technologisch","technologie","technologisch","τεχνολογία","τεχνολογικός","τεχνολογική","τεχνολογικό","teknoloji","teknolojik","technológia","technológiai","tehnologija","tehnološki","tehnoloogia","tehnoloogiline","technologii","technical","texniki","teknik"], - "key::51": ["science","scientific","scienza","scientifiche","scienze","ciencia","científico","ciência","científico","Wissenschaft","wissenschaftlich","wetenschap","wetenschappelijk","επιστήμη","επιστημονικός","επιστημονική","επιστημονικό","επιστημονικά","bilim","bilimsel","tudomány","tudományos","znanost","znanstveni","teadus","teaduslik"], - "key::52": ["engineering","ingegneria","ingeniería","engenharia","Ingenieurwissenschaft","ingenieurswetenschappen","bouwkunde","μηχανικός","μηχανική","μηχανικό","mühendislik","mérnöki","Inženirstvo","inseneeria","inseneri"], - "key::53": ["management","gestione","gestionale","gestionali","gestión","administración","gestão","administração","Verwaltung","management","διαχείριση","yönetim","menedzsment","vodstvo","upravljanje","management","juhtkond","juhtimine","haldus"], - "key::54": ["energy","energia","energía","energia","Energie","energie","ενέργεια","enerji","energia","energija","energia"], - "key::55": ["agricultural","agriculture","agricoltura","agricole","agrícola","agricultura","agrícola","agricultura","landwirtschaftlich","Landwirtschaft","landbouwkundig","landbouw","αγροτικός","αγροτική","αγροτικό","γεωργικός","γεωργική","γεωργικό","γεωργία","tarımsal","tarım","mezőgazdasági","mezőgazdaság","poljedelski","poljedelstvo","põllumajandus","põllumajanduslik"], - "key::56": ["information","informazione","información","informação","Information","informatie","πληροφορία","bilgi","információ","informacija","informatsioon","informatycznych"], - "key::57": ["social","sociali","social","social","Sozial","sociaal","maatschappelijk","κοινωνικός","κοινωνική","κοινωνικό","κοινωνικά","sosyal","szociális","družbeni","sotsiaal","sotsiaalne"], - "key::58": ["environmental","ambiente","medioambiental","ambiente","medioambiente","meioambiente","Umwelt","milieu","milieuwetenschap","milieukunde","περιβαλλοντικός","περιβαλλοντική","περιβαλλοντικό","περιβαλλοντικά","çevre","környezeti","okoliški","keskonna"], - "key::59": ["business","economia","economiche","economica","negocio","empresa","negócio","Unternehmen","bedrijf","bedrijfskunde","επιχείρηση","iş","üzleti","posel","ettevõte/äri"], - "key::60": ["pharmaceuticals","pharmacy","farmacia","farmaceutica","farmacéutica","farmacia","farmacêutica","farmácia","Pharmazeutika","Arzneimittelkunde","farmaceutica","geneesmiddelen","apotheek","φαρμακευτικός","φαρμακευτική","φαρμακευτικό","φαρμακευτικά","φαρμακείο","ilaç","eczane","gyógyszerészeti","gyógyszertár","farmacevtika","lekarništvo","farmaatsia","farmatseutiline"], - "key::61": ["healthcare","health services","salute","atenciónmédica","cuidadodelasalud","cuidadoscomasaúde","Gesundheitswesen","gezondheidszorg","ιατροφαρμακευτικήπερίθαλψη","sağlıkhizmeti","egészségügy","zdravstvo","tervishoid","tervishoiu"], - "key::62": ["history","storia","historia","história","Geschichte","geschiedenis","geschiedkunde","ιστορία","tarih","történelem","zgodovina","ajalugu"], - "key::63": ["materials","materiali","materia","materiales","materiais","materialen","υλικά","τεκμήρια","malzemeler","anyagok","materiali","materjalid","vahendid"], - "key::64": ["economics","economia","economiche","economica","economía","economia","Wirtschaft","economie","οικονομικά","οικονομικέςεπιστήμες","ekonomi","közgazdaságtan","gospodarstvo","ekonomija","majanduslik","majandus"], - "key::65": ["therapeutics","terapeutica","terapéutica","terapêutica","therapie","θεραπευτική","tedavibilimi","gyógykezelés","terapevtika","terapeutiline","ravi"], - "key::66": ["oncology","oncologia","oncologico","oncología","oncologia","Onkologie","oncologie","ογκολογία","onkoloji","onkológia","onkologija","onkoloogia"], - "key::67": ["natural","naturali","naturale","natural","natural","natürlich","natuurlijk","φυσικός","φυσική","φυσικό","φυσικά","doğal","természetes","naraven","loodus"], - "key::68": ["educational","educazione","pedagogia","educacional","educativo","educacional","pädagogisch","educatief","εκπαιδευτικός","εκπαιδευτική","εκπαιδευτικό","εκπαιδευτικά","eğitimsel","oktatási","izobraževalen","haridus","hariduslik"], - "key::69": ["biomedical","biomedica","biomédico","biomédico","biomedizinisch","biomedisch","βιοιατρικός","βιοιατρική","βιοιατρικό","βιοιατρικά","biyomedikal","orvosbiológiai","biomedicinski","biomeditsiiniline"], - "key::70": ["veterinary","veterinaria","veterinarie","veterinaria","veterinária","tierärtzlich","veterinair","veeartsenijlkunde","κτηνιατρικός","κτηνιατρική","κτηνιατρικό","κτηνιατρικά","veteriner","állatorvosi","veterinar","veterinarski","veterinaaria"], - "key::71": ["chemistry","chimica","química","química","Chemie","chemie","scheikunde","χημεία","kimya","kémia","kemija","keemia"], - "key::72": ["security","sicurezza","seguridad","segurança","Sicherheit","veiligheid","ασφάλεια","güvenlik","biztonsági","varnost","turvalisus","julgeolek"], - "key::73": ["biotechnology","biotecnologia","biotecnologie","biotecnología","biotecnologia","Biotechnologie","biotechnologie","βιοτεχνολογία","biyoteknoloji","biotechnológia","biotehnologija","biotehnoloogia"], - "key::74": ["military","militare","militari","militar","militar","Militär","militair","leger","στρατιωτικός","στρατιωτική","στρατιωτικό","στρατιωτικά","askeri","katonai","vojaški","vojni","militaar","wojskowa"], - "key::75": ["theological","teologia","teologico","teológico","tecnológica","theologisch","theologisch","θεολογικός","θεολογική","θεολογικό","θεολογικά","teolojik","technológiai","teološki","teoloogia","usuteadus","teoloogiline"], - "key::76": ["electronics","elettronica","electrónica","eletrônicos","Elektronik","elektronica","ηλεκτρονική","elektronik","elektronika","elektronika","elektroonika"], - "key::77": ["forestry","forestale","forestali","silvicultura","forestal","floresta","Forstwirtschaft","bosbouw","δασοκομία","δασολογία","ormancılık","erdészet","gozdarstvo","metsandus"], - "key::78": ["maritime","marittima","marittime","marittimo","marítimo","marítimo","maritiem","ναυτικός","ναυτική","ναυτικό","ναυτικά","ναυτιλιακός","ναυτιλιακή","ναυτιλιακό","ναυτιλιακά","θαλάσσιος","θαλάσσια","θαλάσσιο","denizcilik","tengeri","morski","mere","merendus"], - "key::79": ["sports","sport","deportes","esportes","Sport","sport","sportwetenschappen","άθληση","γυμναστικήδραστηριότητα","spor","sport","šport","sport","spordi"], - "key::80": ["surgery","chirurgia","chirurgiche","cirugía","cirurgia","Chirurgie","chirurgie","heelkunde","εγχείρηση","επέμβαση","χειρουργικήεπέμβαση","cerrahi","sebészet","kirurgija","kirurgia"], - "key::81": ["cultural","culturale","culturali","cultura","cultural","cultural","kulturell","cultureel","πολιτιστικός","πολιτιστική","πολιτιστικό","πολιτισμικός","πολιτισμική","πολιτισμικό","kültürel","kultúrális","kulturni","kultuuri","kultuuriline"], - "key::82": ["computerscience","informatica","ordenador","computadora","informática","computación","cienciasdelacomputación","ciênciadacomputação","Computer","computer","υπολογιστής","ηλεκτρονικόςυπολογιστής","bilgisayar","számítógép","računalnik","arvuti"], - "key::83": ["finance","financial","finanza","finanziarie","finanza","financiero","finanças","financeiro","Finanzen","finanziell","financiën","financieel","χρηματοοικονομικά","χρηματοδότηση","finanse","finansal","pénzügy","pénzügyi","finance","finančni","finants","finantsiline"], - "key::84": ["communication","comunicazione","comuniciación","comunicação","Kommunikation","communication","επικοινωνία","iletişim","kommunikáció","komuniciranje","kommunikatsioon"], - "key::85": ["justice","giustizia","justicia","justiça","Recht","Justiz","justitie","gerechtigheid","δικαιοσύνη","υπουργείοδικαιοσύνης","δίκαιο","adalet","igazságügy","pravo","õigus"], - "key::86": ["aerospace","aerospaziale","aerospaziali","aeroespacio","aeroespaço","Luftfahrt","luchtvaart","ruimtevaart","αεροπορικός","αεροπορική","αεροπορικό","αεροναυπηγικός","αεροναυπηγική","αεροναυπηγικό","αεροναυπηγικά","havacılıkveuzay","légtér","zrakoplovstvo","atmosfäär","kosmos"], - "key::87": ["dermatology","dermatologia","dermatología","dermatologia","Dermatologie","dermatologie","δρματολογία","dermatoloji","bőrgyógyászat","dermatológia","dermatologija","dermatoloogia"], - "key::88": ["architecture","architettura","arquitectura","arquitetura","Architektur","architectuur","αρχιτεκτονική","mimarlık","építészet","arhitektura","arhitektuur"], - "key::89": ["mathematics","matematica","matematiche","matemáticas","matemáticas","Mathematik","wiskunde","mathematica","μαθηματικά","matematik","matematika","matematika","matemaatika"], - "key::90": ["language","lingue","linguistica","linguistiche","lenguaje","idioma","língua","idioma","Sprache","taal","taalkunde","γλώσσα","dil","nyelv","jezik","keel"], - "key::91": ["neuroscience","neuroscienza","neurociencia","neurociência","Neurowissenschaft","neurowetenschappen","νευροεπιστήμη","nörobilim","idegtudomány","nevroznanost","neuroteadused"], - "key::92": ["automation","automazione","automatización","automação","Automatisierung","automatisering","αυτοματοποίηση","otomasyon","automatizálás","avtomatizacija","automatiseeritud"], - "key::93": ["pediatric","pediatria","pediatriche","pediatrico","pediátrico","pediatría","pediátrico","pediatria","pädiatrisch","pediatrische","παιδιατρική","pediatrik","gyermekgyógyászat","pediatrija","pediaatria"], - "key::94": ["photonics","fotonica","fotoniche","fotónica","fotônica","Photonik","fotonica","φωτονική","fotonik","fotonika","fotonika","fotoonika"], - "key::95": ["mechanics","meccanica","meccaniche","mecánica","mecânica","Mechanik","Maschinenbau","mechanica","werktuigkunde","μηχανικής","mekanik","gépészet","mehanika","mehaanika"], - "key::96": ["psychiatrics","psichiatria","psichiatrica","psichiatriche","psiquiatría","psiquiatria","Psychiatrie","psychiatrie","ψυχιατρική","psikiyatrik","pszihiátria","psihiatrija","psühhaatria"], - "key::97": ["psychology","fisiologia","psicología","psicologia","Psychologie","psychologie","ψυχολογία","psikoloji","pszihológia","psihologija","psühholoogia"], - "key::98": ["automotive","industriaautomobilistica","industriadelautomóvil","automotriz","industriaautomotriz","automotivo","Automobilindustrie","autoindustrie","αυτοκίνητος","αυτοκίνητη","αυτοκίνητο","αυτοκινούμενος","αυτοκινούμενη","αυτοκινούμενο","αυτοκινητιστικός","αυτοκινητιστική","αυτοκινητιστικό","otomotiv","autóipari","samogiben","avtomobilskaindustrija","auto-"], - "key::99": ["neurology","neurologia","neurologiche","neurología","neurologia","Neurologie","neurologie","zenuwleer","νευρολογία","nöroloji","neurológia","ideggyógyászat","nevrologija","neuroloogia"], - "key::100": ["geology","geologia","geologiche","geología","geologia","Geologie","geologie","aardkunde","γεωλογία","jeoloji","geológia","földtudomány","geologija","geoloogia"], - "key::101": ["microbiology","microbiologia","micro-biologia","microbiologiche","microbiología","microbiologia","Mikrobiologie","microbiologie","μικροβιολογία","mikrobiyoloji","mikrobiológia","mikrobiologija","mikrobioloogia"], - "key::102": ["informatics","informatica","informática","informática","informatica"], + "key::51": ["science","scientific","scienza","scientifiche","scienze","ciencia","científico","ciência","científico","Wissenschaft","wissenschaftlich","wetenschap","wetenschappelijk","επιστήμη","επιστημονικός","επιστημονική","επιστημονικό","επιστημονικά","bilim","bilimsel","tudomány","tudományos","znanost","znanstveni","teadus","teaduslik",""], + "key::52": ["engineering","ingegneria","ingeniería","engenharia","Ingenieurwissenschaft","ingenieurswetenschappen","bouwkunde","μηχανικός","μηχανική","μηχανικό","mühendislik","mérnöki","Inženirstvo","inseneeria","inseneri",""], + "key::53": ["management","gestione","gestionale","gestionali","gestión","administración","gestão","administração","Verwaltung","management","διαχείριση","yönetim","menedzsment","vodstvo","upravljanje","management","juhtkond","juhtimine","haldus",""], + "key::54": ["energy","energia","energía","energia","Energie","energie","ενέργεια","enerji","energia","energija","energia",""], + "key::55": ["agricultural","agriculture","agricoltura","agricole","agrícola","agricultura","agrícola","agricultura","landwirtschaftlich","Landwirtschaft","landbouwkundig","landbouw","αγροτικός","αγροτική","αγροτικό","γεωργικός","γεωργική","γεωργικό","γεωργία","tarımsal","tarım","mezőgazdasági","mezőgazdaság","poljedelski","poljedelstvo","põllumajandus","põllumajanduslik",""], + "key::56": ["information","informazione","información","informação","Information","informatie","πληροφορία","bilgi","információ","informacija","informatsioon","informatycznych",""], + "key::57": ["social","sociali","social","social","Sozial","sociaal","maatschappelijk","κοινωνικός","κοινωνική","κοινωνικό","κοινωνικά","sosyal","szociális","družbeni","sotsiaal","sotsiaalne",""], + "key::58": ["environmental","ambiente","medioambiental","ambiente","medioambiente","meioambiente","Umwelt","milieu","milieuwetenschap","milieukunde","περιβαλλοντικός","περιβαλλοντική","περιβαλλοντικό","περιβαλλοντικά","çevre","környezeti","okoliški","keskonna",""], + "key::59": ["business","economia","economiche","economica","negocio","empresa","negócio","Unternehmen","bedrijf","bedrijfskunde","επιχείρηση","iş","üzleti","posel","ettevõte/äri",""], + "key::60": ["pharmaceuticals","pharmacy","farmacia","farmaceutica","farmacéutica","farmacia","farmacêutica","farmácia","Pharmazeutika","Arzneimittelkunde","farmaceutica","geneesmiddelen","apotheek","φαρμακευτικός","φαρμακευτική","φαρμακευτικό","φαρμακευτικά","φαρμακείο","ilaç","eczane","gyógyszerészeti","gyógyszertár","farmacevtika","lekarništvo","farmaatsia","farmatseutiline",""], + "key::61": ["healthcare","health services","salute","atenciónmédica","cuidadodelasalud","cuidadoscomasaúde","Gesundheitswesen","gezondheidszorg","ιατροφαρμακευτικήπερίθαλψη","sağlıkhizmeti","egészségügy","zdravstvo","tervishoid","tervishoiu",""], + "key::62": ["history","storia","historia","história","Geschichte","geschiedenis","geschiedkunde","ιστορία","tarih","történelem","zgodovina","ajalugu",""], + "key::63": ["materials","materiali","materia","materiales","materiais","materialen","υλικά","τεκμήρια","malzemeler","anyagok","materiali","materjalid","vahendid",""], + "key::64": ["economics","economia","economiche","economica","economía","economia","Wirtschaft","economie","οικονομικά","οικονομικέςεπιστήμες","ekonomi","közgazdaságtan","gospodarstvo","ekonomija","majanduslik","majandus",""], + "key::65": ["therapeutics","terapeutica","terapéutica","terapêutica","therapie","θεραπευτική","tedavibilimi","gyógykezelés","terapevtika","terapeutiline","ravi",""], + "key::66": ["oncology","oncologia","oncologico","oncología","oncologia","Onkologie","oncologie","ογκολογία","onkoloji","onkológia","onkologija","onkoloogia",""], + "key::67": ["natural","naturali","naturale","natural","natural","natürlich","natuurlijk","φυσικός","φυσική","φυσικό","φυσικά","doğal","természetes","naraven","loodus",""], + "key::68": ["educational","educazione","pedagogia","educacional","educativo","educacional","pädagogisch","educatief","εκπαιδευτικός","εκπαιδευτική","εκπαιδευτικό","εκπαιδευτικά","eğitimsel","oktatási","izobraževalen","haridus","hariduslik",""], + "key::69": ["biomedical","biomedica","biomédico","biomédico","biomedizinisch","biomedisch","βιοιατρικός","βιοιατρική","βιοιατρικό","βιοιατρικά","biyomedikal","orvosbiológiai","biomedicinski","biomeditsiiniline",""], + "key::70": ["veterinary","veterinaria","veterinarie","veterinaria","veterinária","tierärtzlich","veterinair","veeartsenijlkunde","κτηνιατρικός","κτηνιατρική","κτηνιατρικό","κτηνιατρικά","veteriner","állatorvosi","veterinar","veterinarski","veterinaaria",""], + "key::71": ["chemistry","chimica","química","química","Chemie","chemie","scheikunde","χημεία","kimya","kémia","kemija","keemia",""], + "key::72": ["security","sicurezza","seguridad","segurança","Sicherheit","veiligheid","ασφάλεια","güvenlik","biztonsági","varnost","turvalisus","julgeolek",""], + "key::73": ["biotechnology","biotecnologia","biotecnologie","biotecnología","biotecnologia","Biotechnologie","biotechnologie","βιοτεχνολογία","biyoteknoloji","biotechnológia","biotehnologija","biotehnoloogia",""], + "key::74": ["military","militare","militari","militar","militar","Militär","militair","leger","στρατιωτικός","στρατιωτική","στρατιωτικό","στρατιωτικά","askeri","katonai","vojaški","vojni","militaar","wojskowa",""], + "key::75": ["theological","teologia","teologico","teológico","tecnológica","theologisch","theologisch","θεολογικός","θεολογική","θεολογικό","θεολογικά","teolojik","technológiai","teološki","teoloogia","usuteadus","teoloogiline",""], + "key::76": ["electronics","elettronica","electrónica","eletrônicos","Elektronik","elektronica","ηλεκτρονική","elektronik","elektronika","elektronika","elektroonika",""], + "key::77": ["forestry","forestale","forestali","silvicultura","forestal","floresta","Forstwirtschaft","bosbouw","δασοκομία","δασολογία","ormancılık","erdészet","gozdarstvo","metsandus",""], + "key::78": ["maritime","marittima","marittime","marittimo","marítimo","marítimo","maritiem","ναυτικός","ναυτική","ναυτικό","ναυτικά","ναυτιλιακός","ναυτιλιακή","ναυτιλιακό","ναυτιλιακά","θαλάσσιος","θαλάσσια","θαλάσσιο","denizcilik","tengeri","morski","mere","merendus",""], + "key::79": ["sports","sport","deportes","esportes","Sport","sport","sportwetenschappen","άθληση","γυμναστικήδραστηριότητα","spor","sport","šport","sport","spordi",""], + "key::80": ["surgery","chirurgia","chirurgiche","cirugía","cirurgia","Chirurgie","chirurgie","heelkunde","εγχείρηση","επέμβαση","χειρουργικήεπέμβαση","cerrahi","sebészet","kirurgija","kirurgia",""], + "key::81": ["cultural","culturale","culturali","cultura","cultural","cultural","kulturell","cultureel","πολιτιστικός","πολιτιστική","πολιτιστικό","πολιτισμικός","πολιτισμική","πολιτισμικό","kültürel","kultúrális","kulturni","kultuuri","kultuuriline",""], + "key::82": ["computerscience","informatica","ordenador","computadora","informática","computación","cienciasdelacomputación","ciênciadacomputação","Computer","computer","υπολογιστής","ηλεκτρονικόςυπολογιστής","bilgisayar","számítógép","računalnik","arvuti",""], + "key::83": ["finance","financial","finanza","finanziarie","finanza","financiero","finanças","financeiro","Finanzen","finanziell","financiën","financieel","χρηματοοικονομικά","χρηματοδότηση","finanse","finansal","pénzügy","pénzügyi","finance","finančni","finants","finantsiline",""], + "key::84": ["communication","comunicazione","comuniciación","comunicação","Kommunikation","communication","επικοινωνία","iletişim","kommunikáció","komuniciranje","kommunikatsioon",""], + "key::85": ["justice","giustizia","justicia","justiça","Recht","Justiz","justitie","gerechtigheid","δικαιοσύνη","υπουργείοδικαιοσύνης","δίκαιο","adalet","igazságügy","pravo","õigus",""], + "key::86": ["aerospace","aerospaziale","aerospaziali","aeroespacio","aeroespaço","Luftfahrt","luchtvaart","ruimtevaart","αεροπορικός","αεροπορική","αεροπορικό","αεροναυπηγικός","αεροναυπηγική","αεροναυπηγικό","αεροναυπηγικά","havacılıkveuzay","légtér","zrakoplovstvo","atmosfäär","kosmos",""], + "key::87": ["dermatology","dermatologia","dermatología","dermatologia","Dermatologie","dermatologie","δρματολογία","dermatoloji","bőrgyógyászat","dermatológia","dermatologija","dermatoloogia",""], + "key::88": ["architecture","architettura","arquitectura","arquitetura","Architektur","architectuur","αρχιτεκτονική","mimarlık","építészet","arhitektura","arhitektuur",""], + "key::89": ["mathematics","matematica","matematiche","matemáticas","matemáticas","Mathematik","wiskunde","mathematica","μαθηματικά","matematik","matematika","matematika","matemaatika",""], + "key::90": ["language","lingue","linguistica","linguistiche","lenguaje","idioma","língua","idioma","Sprache","taal","taalkunde","γλώσσα","dil","nyelv","jezik","keel",""], + "key::91": ["neuroscience","neuroscienza","neurociencia","neurociência","Neurowissenschaft","neurowetenschappen","νευροεπιστήμη","nörobilim","idegtudomány","nevroznanost","neuroteadused",""], + "key::92": ["automation","automazione","automatización","automação","Automatisierung","automatisering","αυτοματοποίηση","otomasyon","automatizálás","avtomatizacija","automatiseeritud",""], + "key::93": ["pediatric","pediatria","pediatriche","pediatrico","pediátrico","pediatría","pediátrico","pediatria","pädiatrisch","pediatrische","παιδιατρική","pediatrik","gyermekgyógyászat","pediatrija","pediaatria",""], + "key::94": ["photonics","fotonica","fotoniche","fotónica","fotônica","Photonik","fotonica","φωτονική","fotonik","fotonika","fotonika","fotoonika",""], + "key::95": ["mechanics","meccanica","meccaniche","mecánica","mecânica","Mechanik","Maschinenbau","mechanica","werktuigkunde","μηχανικής","mekanik","gépészet","mehanika","mehaanika",""], + "key::96": ["psychiatrics","psichiatria","psichiatrica","psichiatriche","psiquiatría","psiquiatria","Psychiatrie","psychiatrie","ψυχιατρική","psikiyatrik","pszihiátria","psihiatrija","psühhaatria",""], + "key::97": ["psychology","fisiologia","psicología","psicologia","Psychologie","psychologie","ψυχολογία","psikoloji","pszihológia","psihologija","psühholoogia",""], + "key::98": ["automotive","industriaautomobilistica","industriadelautomóvil","automotriz","industriaautomotriz","automotivo","Automobilindustrie","autoindustrie","αυτοκίνητος","αυτοκίνητη","αυτοκίνητο","αυτοκινούμενος","αυτοκινούμενη","αυτοκινούμενο","αυτοκινητιστικός","αυτοκινητιστική","αυτοκινητιστικό","otomotiv","autóipari","samogiben","avtomobilskaindustrija","auto-",""], + "key::99": ["neurology","neurologia","neurologiche","neurología","neurologia","Neurologie","neurologie","zenuwleer","νευρολογία","nöroloji","neurológia","ideggyógyászat","nevrologija","neuroloogia",""], + "key::100": ["geology","geologia","geologiche","geología","geologia","Geologie","geologie","aardkunde","γεωλογία","jeoloji","geológia","földtudomány","geologija","geoloogia",""], + "key::101": ["microbiology","microbiologia","micro-biologia","microbiologiche","microbiología","microbiologia","Mikrobiologie","microbiologie","μικροβιολογία","mikrobiyoloji","mikrobiológia","mikrobiologija","mikrobioloogia",""], + "key::102": ["informatics","informatica","informática","informática","informatica",""], "key::103": ["forschungsgemeinschaft","comunita ricerca","research community","research foundation","research association"], "key::104": ["commerce","ticaret","ticarət","commercio","trade","handel","comercio"] } diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.no_synonyms.conf b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.no_synonyms.conf new file mode 100644 index 000000000..d79b7758e --- /dev/null +++ b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.no_synonyms.conf @@ -0,0 +1,38 @@ +{ + "wf" : { + "threshold" : "0.9", + "dedupRun" : "001", + "entityType" : "organization", + "orderField" : "legalname", + "queueMaxSize" : "2000", + "groupMaxSize" : "50", + "slidingWindowSize" : "200", + "rootBuilder" : [ "organization", "projectOrganization_participation_isParticipant", "datasourceOrganization_provision_isProvidedBy" ], + "includeChildren" : "true" + }, + "pace" : { + "clustering" : [ + { "name" : "sortedngrampairs", "fields" : [ "legalname" ], "params" : { "max" : 2, "ngramLen" : "3"} }, + { "name" : "suffixprefix", "fields" : [ "legalname" ], "params" : { "max" : 1, "len" : "3" } }, + { "name" : "urlclustering", "fields" : [ "websiteurl" ], "params" : { } }, + { "name" : "keywordsclustering", "fields" : [ "legalname" ], "params" : { "max": 2, "windowSize": 4} } + ], + "decisionTree" : { + "start": {"fields": [{"field":"gridid", "comparator":"exactMatch", "weight":1.0, "countIfUndefined":"true", "params": {}}], "threshold":1.0, "aggregation": "MAX", "positive":"MATCH", "negative":"layer2", "undefined":"layer2", "ignoreUndefined": "true"}, + "layer2": {"fields": [{"field":"websiteurl", "comparator":"domainExactMatch", "weight":1.0, "countIfUndefined":"true", "params" : {}}, {"field":"country", "comparator":"exactMatch", "weight":1.0, "countIfUndefined":"false", "params": {}}], "threshold":1.0, "aggregation": "MIN", "positive":"layer3", "negative":"NO_MATCH", "undefined":"layer3", "ignoreUndefined": "false"}, + "layer3": {"fields": [{"field":"legalname", "comparator":"jaroWinklerNormalizedName", "weight":0.9, "countIfUndefined":"false", "params":{"windowSize" : 4, "threshold" : 0.7}}, {"field":"legalshortname", "comparator":"jaroWinklerNormalizedName", "weight":0.1, "countIfUndefined":"true", "params":{}}], "threshold": 0.9, "aggregation": "W_MEAN", "positive":"MATCH", "negative":"NO_MATCH", "undefined":"NO_MATCH", "ignoreUndefined": "true"} + }, + "model" : [ + { "name" : "country", "type" : "String", "path" : "organization/metadata/country/classid"}, + { "name" : "legalshortname", "type" : "String", "path" : "organization/metadata/legalshortname/value"}, + { "name" : "legalname", "type" : "String", "path" : "organization/metadata/legalname/value" }, + { "name" : "websiteurl", "type" : "URL", "path" : "organization/metadata/websiteurl/value" }, + { "name" : "gridid", "type" : "String", "path" : "pid[qualifier#classid = {grid}]/value"} + ], + "blacklists" : { + "legalname" : [] + }, + "synonyms": { + } + } +} \ No newline at end of file diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/result.pace.conf.json b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/result.pace.conf.json deleted file mode 100644 index 786424a34..000000000 --- a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/result.pace.conf.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "wf" : { - "threshold" : "0.99", - "dedupRun" : "001", - "entityType" : "result", - "orderField" : "title", - "queueMaxSize" : "2000", - "groupMaxSize" : "10", - "slidingWindowSize" : "200", - "rootBuilder" : [ "result" ], - "includeChildren" : "true" - }, - "pace" : { - "clustering" : [ - { "name" : "acronyms", "fields" : [ "title" ], "params" : { "max" : "1", "minLen" : "2", "maxLen" : "4"} }, - { "name" : "ngrampairs", "fields" : [ "title" ], "params" : { "max" : "1", "ngramLen" : "3"} }, - { "name" : "suffixprefix", "fields" : [ "title" ], "params" : { "max" : "1", "len" : "3" } } - ], - "strictConditions" : [ - { "name" : "exactMatch", "fields" : [ "pid" ] } - ], - "conditions" : [ - { "name" : "yearMatch", "fields" : [ "dateofacceptance" ] }, - { "name" : "titleVersionMatch", "fields" : [ "title" ] }, - { "name" : "sizeMatch", "fields" : [ "authors" ] } - ], - "model" : [ - { "name" : "pid", "algo" : "Null", "type" : "String", "weight" : "0.0", "ignoreMissing" : "true", "path" : "pid[qualifier#classid = {doi}]/value", "overrideMatch" : "true" }, - { "name" : "title", "algo" : "JaroWinkler", "type" : "String", "weight" : "1.0", "ignoreMissing" : "false", "path" : "result/metadata/title[qualifier#classid = {main title}]/value" }, - { "name" : "dateofacceptance", "algo" : "Null", "type" : "String", "weight" : "0.0", "ignoreMissing" : "true", "path" : "result/metadata/dateofacceptance/value" } , - { "name" : "authors", "algo" : "Null", "type" : "List", "weight" : "0.0", "ignoreMissing" : "true", "path" : "result/author/metadata/fullname/value" } - ], - "blacklists" : { - "title" : [ - "^(Corpus Oral Dialectal \\(COD\\)\\.).*$", - "^(Kiri Karl Morgensternile).*$", - "^(\\[Eksliibris Aleksandr).*\\]$", - "^(\\[Eksliibris Aleksandr).*$", - "^(Eksliibris Aleksandr).*$", - "^(Kiri A\\. de Vignolles).*$", - "^(2 kirja Karl Morgensternile).*$", - "^(Pirita kloostri idaosa arheoloogilised).*$", - "^(Kiri tundmatule).*$", - "^(Kiri Jenaer Allgemeine Literaturzeitung toimetusele).*$", - "^(Eksliibris Nikolai Birukovile).*$", - "^(Eksliibris Nikolai Issakovile).*$", - "^(WHP Cruise Summary Information of section).*$", - "^(Measurement of the top quark\\-pair production cross section with ATLAS in pp collisions at).*$", - "^(Measurement of the spin\\-dependent structure function).*" - ] } - } - -} diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/result.test.conf b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/result.test.conf new file mode 100644 index 000000000..115bb04f0 --- /dev/null +++ b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/result.test.conf @@ -0,0 +1,51 @@ +{ + "wf" : { + "threshold" : "0.99", + "dedupRun" : "001", + "entityType" : "result", + "orderField" : "title", + "queueMaxSize" : "2000", + "groupMaxSize" : "10", + "slidingWindowSize" : "200", + "rootBuilder" : [ "result" ], + "includeChildren" : "true" + }, + "pace" : { + "clustering" : [ + { "name" : "acronyms", "fields" : [ "title" ], "params" : { "max" : "1", "minLen" : "2", "maxLen" : "4"} }, + { "name" : "ngrampairs", "fields" : [ "title" ], "params" : { "max" : "1", "ngramLen" : "3"} }, + { "name" : "suffixprefix", "fields" : [ "title" ], "params" : { "max" : "1", "len" : "3" } } + ], + "decisionTree": { + "start": {"fields": [{"field":"pid", "comparator":"exactMatch", "weight":1.0, "countIfUndefined":"true", "params": {}}], "threshold":1.0, "aggregation": "MAX", "positive":"MATCH", "negative":"layer2", "undefined":"layer2", "ignoreUndefined": "true"}, + "layer2": {"fields": [{"field":"dateofacceptance", "comparator":"yearMatch", "weight":1.0, "countIfUndefined":"true", "params" : {}}, {"field":"title", "comparator":"titleVersionMatch", "weight":1.0, "countIfUndefined":"false", "params": {}}, {"field":"authors", "comparator":"sizeMatch", "weight":1.0, "countIfUndefined":"false", "params": {}}], "threshold":1.0, "aggregation": "MIN", "positive":"layer3", "negative":"NO_MATCH", "undefined":"layer3", "ignoreUndefined": "false"}, + "layer3": {"fields": [{"field":"title", "comparator":"JaroWinkler", "weight":1.0, "countIfUndefined":"false", "params":{}}], "threshold": 0.99, "aggregation": "MAX", "positive":"MATCH", "negative":"NO_MATCH", "undefined":"NO_MATCH", "ignoreUndefined": "false"} + }, + "model" : [ + { "name" : "pid", "type" : "String", "path" : "pid[qualifier#classid = {doi}]/value", "overrideMatch" : "true" }, + { "name" : "title", "type" : "String", "path" : "result/metadata/title[qualifier#classid = {main title}]/value" }, + { "name" : "dateofacceptance", "type" : "String", "path" : "result/metadata/dateofacceptance/value" } , + { "name" : "authors", "type" : "List", "path" : "result/author/metadata/fullname/value" } + ], + "blacklists" : { + "title" : [ + "^(Corpus Oral Dialectal \\(COD\\)\\.).*$", + "^(Kiri Karl Morgensternile).*$", + "^(\\[Eksliibris Aleksandr).*\\]$", + "^(\\[Eksliibris Aleksandr).*$", + "^(Eksliibris Aleksandr).*$", + "^(Kiri A\\. de Vignolles).*$", + "^(2 kirja Karl Morgensternile).*$", + "^(Pirita kloostri idaosa arheoloogilised).*$", + "^(Kiri tundmatule).*$", + "^(Kiri Jenaer Allgemeine Literaturzeitung toimetusele).*$", + "^(Eksliibris Nikolai Birukovile).*$", + "^(Eksliibris Nikolai Issakovile).*$", + "^(WHP Cruise Summary Information of section).*$", + "^(Measurement of the top quark\\-pair production cross section with ATLAS in pp collisions at).*$", + "^(Measurement of the spin\\-dependent structure function).*" + ] }, + "synonyms": {} + } + +} From c687956371cedd9cf0347ae781f1d4d51a2e7809 Mon Sep 17 00:00:00 2001 From: miconis Date: Thu, 14 Nov 2019 10:01:21 +0100 Subject: [PATCH 107/449] code cleaning and implementation of the TreeDedup + minor changes --- dnet-pace-core/pom.xml | 2 +- .../java/eu/dnetlib/pace/config/WfConfig.java | 3 +- .../pace/tree/support/TreeProcessor.java | 37 +++++++++++++++++-- 3 files changed, 36 insertions(+), 6 deletions(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 34138cc85..a34ed9f63 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 3.0.15-SNAPSHOT + 4.0.0-SNAPSHOT ../pom.xml diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/WfConfig.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/WfConfig.java index bd00f2fb9..d2722ac53 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/WfConfig.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/WfConfig.java @@ -256,9 +256,8 @@ public class WfConfig implements Serializable { return maxIterations; } - public WfConfig setMaxIterations(int maxIterations) { + public void setMaxIterations(int maxIterations) { this.maxIterations = maxIterations; - return this; } /* diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeProcessor.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeProcessor.java index 50d3ec667..5663a79dd 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeProcessor.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeProcessor.java @@ -24,16 +24,16 @@ public class TreeProcessor { public boolean compare(final MapDocument a, final MapDocument b) { //evaluate the decision tree - return evaluateTree(a, b, config.decisionTree()) == MatchType.MATCH; + return evaluateTree(a, b) == MatchType.MATCH; } - public MatchType evaluateTree(final MapDocument doc1, final MapDocument doc2, final Map decisionTree){ + public MatchType evaluateTree(final MapDocument doc1, final MapDocument doc2){ String current = "start"; while (MatchType.parse(current)==MatchType.UNDEFINED) { - TreeNodeDef currentNode = decisionTree.get(current); + TreeNodeDef currentNode = config.decisionTree().get(current); //throw an exception if the node doesn't exist if (currentNode == null) throw new PaceException("The Tree Node doesn't exist: " + current); @@ -57,4 +57,35 @@ public class TreeProcessor { return MatchType.parse(current); } + public double computeScore(final MapDocument doc1, final MapDocument doc2) { + String current = "start"; + double score = 0.0; + + while (MatchType.parse(current)==MatchType.UNDEFINED) { + + TreeNodeDef currentNode = config.decisionTree().get(current); + //throw an exception if the node doesn't exist + if (currentNode == null) + throw new PaceException("The Tree Node doesn't exist: " + current); + + TreeNodeStats stats = currentNode.evaluate(doc1, doc2, config); + + score = stats.getFinalScore(currentNode.getAggregation()); + //if ignoreUndefined=false the miss is considered as undefined + if (!currentNode.isIgnoreUndefined() && stats.getUndefinedCount()>0) { + current = currentNode.getUndefined(); + } + //if ignoreUndefined=true the miss is ignored and the score computed anyway + else if (stats.getFinalScore(currentNode.getAggregation()) >= currentNode.getThreshold()) { + current = currentNode.getPositive(); + } + else { + current = currentNode.getNegative(); + } + + } + + return score; + } + } From ddd40540aa7f9e09faa5f5e45f03b5f499b8de04 Mon Sep 17 00:00:00 2001 From: miconis Date: Wed, 20 Nov 2019 10:45:00 +0100 Subject: [PATCH 108/449] jarowinklernormalizedname splitted in 3 different comparators: citymatch, keywordmatch and jarowinkler. Implementation of the TreeStatistic support functions --- .../clustering/RandomClusteringFunction.java | 1 - .../pace/common/AbstractPaceFunctions.java | 13 ++- .../java/eu/dnetlib/pace/tree/CityMatch.java | 47 ++++++++ .../pace/tree/JaroWinklerNormalizedName.java | 41 ++----- .../eu/dnetlib/pace/tree/KeywordMatch.java | 47 ++++++++ .../dnetlib/pace/tree/support/FieldStats.java | 54 +++++++++ .../pace/tree/support/TreeNodeDef.java | 12 +- .../pace/tree/support/TreeNodeStats.java | 106 ++++++++++-------- .../pace/tree/support/TreeProcessor.java | 17 ++- .../dnetlib/pace/tree/support/TreeStats.java | 51 +++++++++ .../pace/comparators/ComparatorTest.java | 21 ++++ .../java/eu/dnetlib/pace/util/UtilTest.java | 23 ++++ 12 files changed, 334 insertions(+), 99 deletions(-) create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/CityMatch.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/KeywordMatch.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/FieldStats.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeStats.java create mode 100644 dnet-pace-core/src/test/java/eu/dnetlib/pace/util/UtilTest.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/RandomClusteringFunction.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/RandomClusteringFunction.java index c485fcb9a..86a2e4e4f 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/RandomClusteringFunction.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/RandomClusteringFunction.java @@ -13,7 +13,6 @@ public class RandomClusteringFunction extends AbstractClusteringFunction { @Override protected Collection doApply(final Config conf, String s) { - // TODO Auto-generated method stub return null; } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java index 8aeb36a0f..71954a394 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java @@ -216,14 +216,19 @@ public abstract class AbstractPaceFunctions { Set k1 = keywordsToCodes(s1, translationMap); Set k2 = keywordsToCodes(s2, translationMap); - int longer = (k1.size()>k2.size())?k1.size():k2.size(); - if (k1.isEmpty() || k2.isEmpty()) return 1.0; - else - return (double)CollectionUtils.intersection(k1,k2).size()/(double)longer; + + return commonElementsPercentage(k1, k2); } + public double commonElementsPercentage(Set s1, Set s2){ + + int longer = (s1.size()>s2.size())?s1.size():s2.size(); + + return (double)CollectionUtils.intersection(s1,s2).size()/(double)longer; + } + //convert the set of keywords to codes public Set toCodes(Set keywords, Map translationMap) { return keywords.stream().map(s -> translationMap.get(s)).collect(Collectors.toSet()); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/CityMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/CityMatch.java new file mode 100644 index 000000000..e56066814 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/CityMatch.java @@ -0,0 +1,47 @@ +package eu.dnetlib.pace.tree; + +import eu.dnetlib.pace.config.Config; +import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.ComparatorClass; + +import java.util.Map; +import java.util.Set; + +@ComparatorClass("cityMatch") +public class CityMatch extends AbstractComparator { + + private Map params; + + public CityMatch(Map params) { + super(params); + this.params = params; + } + + @Override + public double distance(final String a, final String b, final Config conf) { + + String ca = cleanup(a); + String cb = cleanup(b); + + ca = normalize(ca); + cb = normalize(cb); + + ca = filterAllStopWords(ca); + cb = filterAllStopWords(cb); + + Set cities1 = getCities(ca, params.getOrDefault("windowSize", 4).intValue()); + Set cities2 = getCities(cb, params.getOrDefault("windowSize", 4).intValue()); + + Set codes1 = citiesToCodes(cities1); + Set codes2 = citiesToCodes(cities2); + + //if no cities are detected, the comparator gives 1.0 + if (codes1.isEmpty() && codes2.isEmpty()) + return 1.0; + else { + if (codes1.isEmpty() ^ codes2.isEmpty()) + return -1; //undefined if one of the two has no cities + return commonElementsPercentage(codes1, codes2) > params.getOrDefault("threshold", 0).intValue() ? 1.0 : 0.0; + } + } +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerNormalizedName.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerNormalizedName.java index 6899be109..230bce8aa 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerNormalizedName.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerNormalizedName.java @@ -45,40 +45,15 @@ public class JaroWinklerNormalizedName extends AbstractComparator { Set cities1 = getCities(ca, params.getOrDefault("windowSize", 4).intValue()); Set cities2 = getCities(cb, params.getOrDefault("windowSize", 4).intValue()); - if (checkCities(cities1,cities2)) { + ca = removeKeywords(ca, keywords1); + ca = removeKeywords(ca, cities1); + cb = removeKeywords(cb, keywords2); + cb = removeKeywords(cb, cities2); - if (keywordsCompare(keywords1, keywords2, conf.translationMap())>params.getOrDefault("threshold", 0.5).doubleValue()) { - - ca = removeKeywords(ca, keywords1); - ca = removeKeywords(ca, cities1); - cb = removeKeywords(cb, keywords2); - cb = removeKeywords(cb, cities2); - - if (ca.isEmpty() && cb.isEmpty()) - return 1.0; - else - return normalize(ssalgo.score(ca,cb)); - - } - } - - return 0.0; - } - - //returns true if at least 1 city is in common - //returns true if no cities are contained in names - //returns false if one of the two names have no city - public boolean checkCities(Set s1, Set s2){ - Set c1 = citiesToCodes(s1); - Set c2 = citiesToCodes(s2); - - if (c1.isEmpty() && c2.isEmpty()) - return true; - else { - if (c1.isEmpty() ^ c2.isEmpty()) - return false; - return CollectionUtils.intersection(c1, c2).size() > 0; - } + if (ca.isEmpty() && cb.isEmpty()) + return 1.0; + else + return normalize(ssalgo.score(ca,cb)); } @Override diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/KeywordMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/KeywordMatch.java new file mode 100644 index 000000000..ee51acc9b --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/KeywordMatch.java @@ -0,0 +1,47 @@ +package eu.dnetlib.pace.tree; + +import eu.dnetlib.pace.config.Config; +import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.ComparatorClass; + +import java.util.Map; +import java.util.Set; + +@ComparatorClass("keywordMatch") +public class KeywordMatch extends AbstractComparator { + + Map params; + + public KeywordMatch(Map params) { + super(params); + this.params = params; + } + + @Override + public double distance(final String a, final String b, final Config conf) { + + String ca = cleanup(a); + String cb = cleanup(b); + + ca = normalize(ca); + cb = normalize(cb); + + ca = filterAllStopWords(ca); + cb = filterAllStopWords(cb); + + Set keywords1 = getKeywords(ca, conf.translationMap(), params.getOrDefault("windowSize", 4).intValue()); + Set keywords2 = getKeywords(cb, conf.translationMap(), params.getOrDefault("windowSize", 4).intValue()); + + Set codes1 = toCodes(keywords1, conf.translationMap()); + Set codes2 = toCodes(keywords2, conf.translationMap()); + + //if no cities are detected, the comparator gives 1.0 + if (codes1.isEmpty() && codes2.isEmpty()) + return 1.0; + else { + if (codes1.isEmpty() ^ codes2.isEmpty()) + return -1; //undefined if one of the two has no keywords + return commonElementsPercentage(codes1, codes2) > params.getOrDefault("threshold", 0).intValue() ? 1.0 : 0.0; + } + } +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/FieldStats.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/FieldStats.java new file mode 100644 index 000000000..2f1decd32 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/FieldStats.java @@ -0,0 +1,54 @@ +package eu.dnetlib.pace.tree.support; + +import eu.dnetlib.pace.util.PaceException; +import org.codehaus.jackson.map.ObjectMapper; + +import java.io.IOException; +import java.io.Serializable; + +public class FieldStats implements Serializable { + + private double weight; //weight for the field (to be used in the aggregation) + private double result; //the result of the comparison + + private boolean countIfUndefined; + + public FieldStats(double weight, double result, boolean countIfUndefined) { + this.weight = weight; + this.result = result; + this.countIfUndefined = countIfUndefined; + } + + public double getWeight() { + return weight; + } + + public void setWeight(double weight) { + this.weight = weight; + } + + public double getResult() { + return result; + } + + public void setResult(double result) { + this.result = result; + } + + public boolean isCountIfUndefined() { + return countIfUndefined; + } + + public void setCountIfUndefined(boolean countIfUndefined) { + this.countIfUndefined = countIfUndefined; + } + + @Override + public String toString(){ + try { + return new ObjectMapper().writeValueAsString(this); + } catch (IOException e) { + throw new PaceException("Impossible to convert to JSON: ", e); + } + } +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java index 4f95ad366..3f9bdce1e 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java @@ -39,7 +39,6 @@ public class TreeNodeDef implements Serializable { public TreeNodeStats evaluate(MapDocument doc1, MapDocument doc2, Config conf) { TreeNodeStats stats = new TreeNodeStats(); - stats.setFieldsCount(fields.size()); for (FieldConf fieldConf : fields) { @@ -47,16 +46,7 @@ public class TreeNodeDef implements Serializable { double result = comparator(fieldConf).compare(doc1.getFieldMap().get(fieldConf.getField()), doc2.getFieldMap().get(fieldConf.getField()), conf); - if (result == -1) { //if the comparison is undefined - stats.incrementUndefinedCount(); - if (fieldConf.isCountIfUndefined()) { //if it must be taken into account, increment weights (i.e. the average would be lower) - stats.incrementWeightsSum(weight); - } - } - else { //if the field is not missing - stats.incrementScoresSum(weight * result); - stats.incrementWeightsSum(weight); - } + stats.addFieldStats(fieldConf.getComparator() + " on " + fieldConf.getField(), new FieldStats(weight, result, fieldConf.isCountIfUndefined())); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeStats.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeStats.java index 8d313e8eb..c5b1d0fcf 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeStats.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeStats.java @@ -1,90 +1,108 @@ package eu.dnetlib.pace.tree.support; -import org.apache.commons.math3.stat.descriptive.DescriptiveStatistics; - import java.io.Serializable; +import java.util.HashMap; +import java.util.Map; public class TreeNodeStats implements Serializable { - private DescriptiveStatistics stats; - private int undefinedCount = 0; //counter for the number of undefined comparisons between the fields in the tree node - private int fieldsCount = 0; - private double weightsSum = 0.0; + private Map results; //this is an accumulator for the results of the node public TreeNodeStats(){ - this.stats = new DescriptiveStatistics(); + this.results = new HashMap<>(); } - public TreeNodeStats(int undefinedCount, int fieldsCount, double weightsSum) { - this.undefinedCount = undefinedCount; - this.fieldsCount = fieldsCount; - this.weightsSum = weightsSum; + public Map getResults() { + return results; } - public DescriptiveStatistics getStats() { - return stats; + public void addFieldStats(String id, FieldStats fieldStats){ + this.results.put(id, fieldStats); } - public void setStats(DescriptiveStatistics stats) { - this.stats = stats; + public int fieldsCount(){ + return this.results.size(); } - public int getUndefinedCount() { + public int undefinedCount(){ + int undefinedCount = 0; + for(FieldStats fs: this.results.values()){ + if(fs.getResult() == -1) + undefinedCount ++; + } return undefinedCount; } - public void setUndefinedCount(int undefinedCount) { - this.undefinedCount = undefinedCount; + public double scoreSum(){ + double scoreSum = 0.0; + for(FieldStats fs: this.results.values()){ + if(fs.getResult()>=0.0) { + scoreSum += fs.getResult(); + } + } + return scoreSum; } - public int getFieldsCount() { - return fieldsCount; + //return the sum of the weights without considering the fields with countIfMissing=false && result=-1 + public double weightSum(){ + double weightSum = 0.0; + for(FieldStats fs: this.results.values()){ + if(fs.getResult()>=0.0 || (fs.getResult()<0.0 && fs.isCountIfUndefined())) { + weightSum += fs.getWeight(); + } + } + return weightSum; } - public void setFieldsCount(int fields) { - this.fieldsCount = fields; + public double weightedScoreSum(){ + double weightedScoreSum = 0.0; + for(FieldStats fs: this.results.values()){ + if(fs.getResult()>=0.0) { + weightedScoreSum += fs.getResult()*fs.getWeight(); + } + } + return weightedScoreSum; } - public double getWeightsSum() { - return weightsSum; + public double max(){ + double max = -1.0; + for(FieldStats fs: this.results.values()){ + if(fs.getResult()>max) + max = fs.getResult(); + } + return max; } - public void setWeightsSum(double weightsSum) { - this.weightsSum = weightsSum; - } - - public void incrementWeightsSum(double delta){ - this.weightsSum += delta; - } - - public void incrementUndefinedCount(){ - this.undefinedCount += 1; - } - - public void incrementScoresSum(double delta){ - this.stats.addValue(delta); + public double min(){ + double min = 100.0; //random high value + for(FieldStats fs: this.results.values()){ + if(fs.getResult()=0.0 || (fs.getResult() == -1 && fs.isCountIfUndefined())) + min = fs.getResult(); + } + } + return min; } public double getFinalScore(AggType aggregation){ switch (aggregation){ case AVG: - return stats.getMean(); + return scoreSum()/fieldsCount(); case SUM: - return stats.getSum(); + return scoreSum(); case SC: case OR: case MAX: - return stats.getMax(); + return max(); case NC: case AND: case MIN: - return stats.getMin(); + return min(); case W_MEAN: - return stats.getSum()/weightsSum; + return weightedScoreSum()/weightSum(); default: return 0.0; } } - } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeProcessor.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeProcessor.java index 5663a79dd..23c9a3ea8 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeProcessor.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeProcessor.java @@ -6,12 +6,13 @@ import eu.dnetlib.pace.util.PaceException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import java.io.Serializable; import java.util.Map; /** * The compare between two documents is given by the weighted mean of the field distances */ -public class TreeProcessor { +public class TreeProcessor{ private static final Log log = LogFactory.getLog(TreeProcessor.class); @@ -24,10 +25,12 @@ public class TreeProcessor { public boolean compare(final MapDocument a, final MapDocument b) { //evaluate the decision tree - return evaluateTree(a, b) == MatchType.MATCH; + return evaluateTree(a, b).getResult() == MatchType.MATCH; } - public MatchType evaluateTree(final MapDocument doc1, final MapDocument doc2){ + public TreeStats evaluateTree(final MapDocument doc1, final MapDocument doc2){ + + TreeStats treeStats = new TreeStats(); String current = "start"; @@ -39,9 +42,10 @@ public class TreeProcessor { throw new PaceException("The Tree Node doesn't exist: " + current); TreeNodeStats stats = currentNode.evaluate(doc1, doc2, config); + treeStats.addNodeStats(current, stats); //if ignoreUndefined=false the miss is considered as undefined - if (!currentNode.isIgnoreUndefined() && stats.getUndefinedCount()>0) { + if (!currentNode.isIgnoreUndefined() && stats.undefinedCount()>0) { current = currentNode.getUndefined(); } //if ignoreUndefined=true the miss is ignored and the score computed anyway @@ -54,7 +58,8 @@ public class TreeProcessor { } - return MatchType.parse(current); + treeStats.setResult(MatchType.parse(current)); + return treeStats; } public double computeScore(final MapDocument doc1, final MapDocument doc2) { @@ -72,7 +77,7 @@ public class TreeProcessor { score = stats.getFinalScore(currentNode.getAggregation()); //if ignoreUndefined=false the miss is considered as undefined - if (!currentNode.isIgnoreUndefined() && stats.getUndefinedCount()>0) { + if (!currentNode.isIgnoreUndefined() && stats.undefinedCount()>0) { current = currentNode.getUndefined(); } //if ignoreUndefined=true the miss is ignored and the score computed anyway diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeStats.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeStats.java new file mode 100644 index 000000000..36188e3c3 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeStats.java @@ -0,0 +1,51 @@ +package eu.dnetlib.pace.tree.support; + +import eu.dnetlib.pace.util.PaceException; +import org.codehaus.jackson.map.ObjectMapper; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +public class TreeStats { + + //> + Map stats; + MatchType result; + + public TreeStats(){ + this.stats = new HashMap<>(); + this.result = MatchType.NO_MATCH; + } + + public MatchType getResult(){ + return this.result; + } + + public void setResult(MatchType result){ + this.result = result; + } + + public Map getStats() { + return stats; + } + + public void setStats(Map stats) { + this.stats = stats; + } + + public void addNodeStats(String layerID, TreeNodeStats treeNodeStats){ + this.stats.put(layerID, treeNodeStats); + } + + @Override + public String toString(){ + try { + return new ObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(this); + } catch (IOException e) { + throw new PaceException("Impossible to convert to JSON: ", e); + } + } + + +} diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java index 4247d9be6..b7722a1ed 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java @@ -1,6 +1,7 @@ package eu.dnetlib.pace.comparators; import eu.dnetlib.pace.clustering.NGramUtils; +import eu.dnetlib.pace.tree.CityMatch; import eu.dnetlib.pace.tree.JaroWinklerNormalizedName; import eu.dnetlib.pace.config.DedupConfig; import org.junit.Before; @@ -129,4 +130,24 @@ public class ComparatorTest extends AbstractPaceFunctions { System.out.println("result = " + result); } + + @Test + public void cityMatchTest() { + final CityMatch cityMatch = new CityMatch(params); + + //both names with no cities + assertEquals(1.0, cityMatch.distance("Università", "Centro di ricerca", conf)); + + //one of the two names with no cities + assertEquals(-1.0, cityMatch.distance("Università di Bologna", "Centro di ricerca", conf)); + + //both names with cities (same) + assertEquals(1.0, cityMatch.distance("Universita di Bologna", "Biblioteca di Bologna", conf)); + + //both names with cities (different) + assertEquals(0.0, cityMatch.distance("Universita di Bologna", "Universita di Torino", conf)); + + } + + } diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/util/UtilTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/util/UtilTest.java new file mode 100644 index 000000000..e94afff9f --- /dev/null +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/util/UtilTest.java @@ -0,0 +1,23 @@ +package eu.dnetlib.pace.util; + +import org.junit.Before; +import org.junit.Test; + +import java.util.HashMap; +import java.util.Map; + +public class UtilTest { + + Map params; + + @Before + public void setUp(){ + params = new HashMap(); + } + + @Test + public void paceResolverTest() { + PaceResolver paceResolver = new PaceResolver(); + paceResolver.getComparator("keywordMatch", params); + } +} From 8c0d346005c87c231c7982f1be095d5c5c1958a3 Mon Sep 17 00:00:00 2001 From: miconis Date: Thu, 21 Nov 2019 09:37:56 +0100 Subject: [PATCH 109/449] the param map has been updated: now it accepts string parameters --- .../eu/dnetlib/pace/tree/AlwaysMatch.java | 2 +- .../java/eu/dnetlib/pace/tree/CityMatch.java | 10 +- .../eu/dnetlib/pace/tree/ContainsMatch.java | 57 +++++++ .../eu/dnetlib/pace/tree/DoiExactMatch.java | 3 +- .../dnetlib/pace/tree/DomainExactMatch.java | 2 +- .../java/eu/dnetlib/pace/tree/ExactMatch.java | 2 +- .../pace/tree/ExactMatchIgnoreCase.java | 2 +- .../eu/dnetlib/pace/tree/JaroWinkler.java | 2 +- .../pace/tree/JaroWinklerNormalizedName.java | 12 +- .../dnetlib/pace/tree/JaroWinklerTitle.java | 2 +- .../eu/dnetlib/pace/tree/KeywordMatch.java | 10 +- .../dnetlib/pace/tree/Level2JaroWinkler.java | 2 +- .../pace/tree/Level2JaroWinklerTitle.java | 2 +- .../dnetlib/pace/tree/Level2Levenstein.java | 2 +- .../java/eu/dnetlib/pace/tree/Levenstein.java | 2 +- .../eu/dnetlib/pace/tree/LevensteinTitle.java | 2 +- .../tree/LevensteinTitleIgnoreVersion.java | 2 +- .../eu/dnetlib/pace/tree/MustBeDifferent.java | 2 +- .../dnetlib/pace/tree/NullDistanceAlgo.java | 2 +- .../java/eu/dnetlib/pace/tree/PidMatch.java | 6 +- .../java/eu/dnetlib/pace/tree/SizeMatch.java | 2 +- .../dnetlib/pace/tree/SortedJaroWinkler.java | 2 +- .../pace/tree/SortedLevel2JaroWinkler.java | 2 +- .../pace/tree/SubStringLevenstein.java | 4 +- .../dnetlib/pace/tree/TitleVersionMatch.java | 2 +- .../java/eu/dnetlib/pace/tree/UrlMatcher.java | 12 +- .../java/eu/dnetlib/pace/tree/YearMatch.java | 2 +- .../pace/tree/support/AbstractComparator.java | 6 +- .../support/AbstractSortedComparator.java | 4 +- .../dnetlib/pace/tree/support/FieldConf.java | 8 +- .../pace/tree/support/TreeNodeDef.java | 2 +- .../pace/tree/support/TreeProcessor.java | 1 - .../eu/dnetlib/pace/util/PaceResolver.java | 2 +- .../pace/comparators/ComparatorTest.java | 151 ++++++------------ .../eu/dnetlib/pace/config/ConfigTest.java | 1 - .../java/eu/dnetlib/pace/util/UtilTest.java | 4 +- 36 files changed, 169 insertions(+), 162 deletions(-) create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ContainsMatch.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AlwaysMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AlwaysMatch.java index d5a33ea87..2fb8eb97c 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AlwaysMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AlwaysMatch.java @@ -11,7 +11,7 @@ import java.util.Map; @ComparatorClass("alwaysMatch") public class AlwaysMatch extends AbstractComparator { - public AlwaysMatch(final Map params){ + public AlwaysMatch(final Map params){ super(params, new com.wcohen.ss.JaroWinkler()); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/CityMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/CityMatch.java index e56066814..998a52650 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/CityMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/CityMatch.java @@ -10,9 +10,9 @@ import java.util.Set; @ComparatorClass("cityMatch") public class CityMatch extends AbstractComparator { - private Map params; + private Map params; - public CityMatch(Map params) { + public CityMatch(Map params) { super(params); this.params = params; } @@ -29,8 +29,8 @@ public class CityMatch extends AbstractComparator { ca = filterAllStopWords(ca); cb = filterAllStopWords(cb); - Set cities1 = getCities(ca, params.getOrDefault("windowSize", 4).intValue()); - Set cities2 = getCities(cb, params.getOrDefault("windowSize", 4).intValue()); + Set cities1 = getCities(ca, Integer.parseInt(params.getOrDefault("windowSize", "4"))); + Set cities2 = getCities(cb, Integer.parseInt(params.getOrDefault("windowSize", "4"))); Set codes1 = citiesToCodes(cities1); Set codes2 = citiesToCodes(cities2); @@ -41,7 +41,7 @@ public class CityMatch extends AbstractComparator { else { if (codes1.isEmpty() ^ codes2.isEmpty()) return -1; //undefined if one of the two has no cities - return commonElementsPercentage(codes1, codes2) > params.getOrDefault("threshold", 0).intValue() ? 1.0 : 0.0; + return commonElementsPercentage(codes1, codes2) > Integer.parseInt(params.getOrDefault("threshold", "0")) ? 1.0 : 0.0; } } } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ContainsMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ContainsMatch.java new file mode 100644 index 000000000..8b8a342cd --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ContainsMatch.java @@ -0,0 +1,57 @@ +package eu.dnetlib.pace.tree; + +import eu.dnetlib.pace.config.Config; +import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.ComparatorClass; + +import java.util.Map; + +/** + * The Class Contains match + * + * @author miconis + * */ +@ComparatorClass("containsMatch") +public class ContainsMatch extends AbstractComparator { + + private Map params; + + public ContainsMatch(Map params) { + super(params); + this.params = params; + } + + @Override + public double distance(final String a, final String b, final Config conf) { + + //read parameters + boolean caseSensitive = Boolean.parseBoolean(params.getOrDefault("caseSensitive", "false")); + String string = params.get("string"); + String agg = params.get("bool"); + + String ca = a; + String cb = b; + if (!caseSensitive) { + ca = a.toLowerCase(); + cb = b.toLowerCase(); + } + + switch(agg) { + case "AND": + if(ca.contains(string) && cb.contains(string)) + return 1.0; + break; + case "OR": + if(ca.contains(string) || cb.contains(string)) + return 1.0; + break; + case "XOR": + if(ca.contains(string) ^ cb.contains(string)) + return 1.0; + break; + default: + return 0.0; + } + return 0.0; + } +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/DoiExactMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/DoiExactMatch.java index d3ada9a47..24a94c8cd 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/DoiExactMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/DoiExactMatch.java @@ -1,6 +1,5 @@ package eu.dnetlib.pace.tree; -import java.util.List; import java.util.Map; import eu.dnetlib.pace.model.Field; @@ -16,7 +15,7 @@ public class DoiExactMatch extends ExactMatchIgnoreCase { public final String PREFIX = "(http:\\/\\/dx\\.doi\\.org\\/)|(doi:)"; - public DoiExactMatch(final Map params) { + public DoiExactMatch(final Map params) { super(params); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/DomainExactMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/DomainExactMatch.java index 4132e1eba..e2eb0cd71 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/DomainExactMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/DomainExactMatch.java @@ -10,7 +10,7 @@ import java.util.Map; @ComparatorClass("domainExactMatch") public class DomainExactMatch extends ExactMatchIgnoreCase { - public DomainExactMatch(final Map params) { + public DomainExactMatch(final Map params) { super(params); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatch.java index 11f628d99..f8b7b7489 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatch.java @@ -10,7 +10,7 @@ import java.util.Map; @ComparatorClass("exactMatch") public class ExactMatch extends AbstractComparator { - public ExactMatch(Map params){ + public ExactMatch(Map params){ super(params, new com.wcohen.ss.JaroWinkler()); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatchIgnoreCase.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatchIgnoreCase.java index 4cfe048ca..89cd2719a 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatchIgnoreCase.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatchIgnoreCase.java @@ -10,7 +10,7 @@ import java.util.Map; @ComparatorClass("exactMatchIgnoreCase") public class ExactMatchIgnoreCase extends AbstractComparator { - public ExactMatchIgnoreCase(Map params) { + public ExactMatchIgnoreCase(Map params) { super(params); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinkler.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinkler.java index 0af0a8053..9e214f6a4 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinkler.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinkler.java @@ -11,7 +11,7 @@ import java.util.Map; @ComparatorClass("jaroWinkler") public class JaroWinkler extends AbstractComparator { - public JaroWinkler(Map params){ + public JaroWinkler(Map params){ super(params, new com.wcohen.ss.JaroWinkler()); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerNormalizedName.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerNormalizedName.java index 230bce8aa..b89cffaed 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerNormalizedName.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerNormalizedName.java @@ -13,9 +13,9 @@ import java.util.Set; @ComparatorClass("jaroWinklerNormalizedName") public class JaroWinklerNormalizedName extends AbstractComparator { - private Map params; + private Map params; - public JaroWinklerNormalizedName(Map params){ + public JaroWinklerNormalizedName(Map params){ super(params, new com.wcohen.ss.JaroWinkler()); this.params = params; } @@ -39,11 +39,11 @@ public class JaroWinklerNormalizedName extends AbstractComparator { ca = filterAllStopWords(ca); cb = filterAllStopWords(cb); - Set keywords1 = getKeywords(ca, conf.translationMap(), params.getOrDefault("windowSize", 4).intValue()); - Set keywords2 = getKeywords(cb, conf.translationMap(), params.getOrDefault("windowSize", 4).intValue()); + Set keywords1 = getKeywords(ca, conf.translationMap(), Integer.parseInt(params.getOrDefault("windowSize", "4"))); + Set keywords2 = getKeywords(cb, conf.translationMap(), Integer.parseInt(params.getOrDefault("windowSize", "4"))); - Set cities1 = getCities(ca, params.getOrDefault("windowSize", 4).intValue()); - Set cities2 = getCities(cb, params.getOrDefault("windowSize", 4).intValue()); + Set cities1 = getCities(ca, Integer.parseInt(params.getOrDefault("windowSize", "4"))); + Set cities2 = getCities(cb, Integer.parseInt(params.getOrDefault("windowSize", "4"))); ca = removeKeywords(ca, keywords1); ca = removeKeywords(ca, cities1); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerTitle.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerTitle.java index 8556eae4a..38ed437de 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerTitle.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerTitle.java @@ -12,7 +12,7 @@ import java.util.Map; @ComparatorClass("jaroWinklerTitle") public class JaroWinklerTitle extends AbstractComparator { - public JaroWinklerTitle(Map params){ + public JaroWinklerTitle(Map params){ super(params, new com.wcohen.ss.JaroWinkler()); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/KeywordMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/KeywordMatch.java index ee51acc9b..476c39008 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/KeywordMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/KeywordMatch.java @@ -10,9 +10,9 @@ import java.util.Set; @ComparatorClass("keywordMatch") public class KeywordMatch extends AbstractComparator { - Map params; + Map params; - public KeywordMatch(Map params) { + public KeywordMatch(Map params) { super(params); this.params = params; } @@ -29,8 +29,8 @@ public class KeywordMatch extends AbstractComparator { ca = filterAllStopWords(ca); cb = filterAllStopWords(cb); - Set keywords1 = getKeywords(ca, conf.translationMap(), params.getOrDefault("windowSize", 4).intValue()); - Set keywords2 = getKeywords(cb, conf.translationMap(), params.getOrDefault("windowSize", 4).intValue()); + Set keywords1 = getKeywords(ca, conf.translationMap(), Integer.parseInt(params.getOrDefault("windowSize", "4"))); + Set keywords2 = getKeywords(cb, conf.translationMap(), Integer.parseInt(params.getOrDefault("windowSize", "4"))); Set codes1 = toCodes(keywords1, conf.translationMap()); Set codes2 = toCodes(keywords2, conf.translationMap()); @@ -41,7 +41,7 @@ public class KeywordMatch extends AbstractComparator { else { if (codes1.isEmpty() ^ codes2.isEmpty()) return -1; //undefined if one of the two has no keywords - return commonElementsPercentage(codes1, codes2) > params.getOrDefault("threshold", 0).intValue() ? 1.0 : 0.0; + return commonElementsPercentage(codes1, codes2) > Double.parseDouble(params.getOrDefault("threshold", "0.0")) ? 1.0 : 0.0; } } } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinkler.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinkler.java index 7d6e33fc2..f9e01356d 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinkler.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinkler.java @@ -9,7 +9,7 @@ import java.util.Map; @ComparatorClass("level2JaroWinkler") public class Level2JaroWinkler extends AbstractComparator { - public Level2JaroWinkler(Map params){ + public Level2JaroWinkler(Map params){ super(params, new com.wcohen.ss.Level2JaroWinkler()); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinklerTitle.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinklerTitle.java index 0a9ffdf16..29f99e4ae 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinklerTitle.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinklerTitle.java @@ -10,7 +10,7 @@ import java.util.Map; @ComparatorClass("level2JaroWinklerTitle") public class Level2JaroWinklerTitle extends AbstractComparator { - public Level2JaroWinklerTitle(Map params){ + public Level2JaroWinklerTitle(Map params){ super(params, new com.wcohen.ss.Level2JaroWinkler()); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2Levenstein.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2Levenstein.java index 9d80d7028..73fb13c13 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2Levenstein.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2Levenstein.java @@ -9,7 +9,7 @@ import java.util.Map; @ComparatorClass("level2Levenstein") public class Level2Levenstein extends AbstractComparator { - public Level2Levenstein(Map params){ + public Level2Levenstein(Map params){ super(params, new com.wcohen.ss.Level2Levenstein()); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Levenstein.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Levenstein.java index d8706c911..c146e5ab1 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Levenstein.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Levenstein.java @@ -9,7 +9,7 @@ import java.util.Map; @ComparatorClass("levenstein") public class Levenstein extends AbstractComparator { - public Levenstein(Map params){ + public Levenstein(Map params){ super(params, new com.wcohen.ss.Levenstein()); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitle.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitle.java index e5edacfee..fda5848df 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitle.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitle.java @@ -15,7 +15,7 @@ public class LevensteinTitle extends AbstractComparator { private static final Log log = LogFactory.getLog(LevensteinTitle.class); - public LevensteinTitle(Map params){ + public LevensteinTitle(Map params){ super(params, new com.wcohen.ss.Levenstein()); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitleIgnoreVersion.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitleIgnoreVersion.java index 89f3749b5..506760fa0 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitleIgnoreVersion.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitleIgnoreVersion.java @@ -14,7 +14,7 @@ import java.util.Map; @ComparatorClass("levensteinTitleIgnoreVersion") public class LevensteinTitleIgnoreVersion extends AbstractComparator { - public LevensteinTitleIgnoreVersion(Map params){ + public LevensteinTitleIgnoreVersion(Map params){ super(params, new com.wcohen.ss.Levenstein()); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/MustBeDifferent.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/MustBeDifferent.java index 01d77b30c..64413dfff 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/MustBeDifferent.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/MustBeDifferent.java @@ -10,7 +10,7 @@ import java.util.Map; @ComparatorClass("mustBeDifferent") public class MustBeDifferent extends AbstractComparator { - public MustBeDifferent(Map params){ + public MustBeDifferent(Map params){ super(params, new com.wcohen.ss.Levenstein()); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/NullDistanceAlgo.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/NullDistanceAlgo.java index e65ac71f7..98c2f4548 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/NullDistanceAlgo.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/NullDistanceAlgo.java @@ -14,7 +14,7 @@ import java.util.Map; @ComparatorClass("null") public class NullDistanceAlgo implements Comparator { - public NullDistanceAlgo(Map params){ + public NullDistanceAlgo(Map params){ } @Override diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/PidMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/PidMatch.java index 14845daf4..0632e8bf9 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/PidMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/PidMatch.java @@ -20,9 +20,9 @@ import java.util.stream.Collectors; public class PidMatch extends AbstractComparator { private static final Log log = LogFactory.getLog(PidMatch.class); - private Map params; + private Map params; - public PidMatch(final Map params) { + public PidMatch(final Map params) { super(params); this.params = params; } @@ -50,7 +50,7 @@ public class PidMatch extends AbstractComparator { return 0.0; } - return (double)incommon / (incommon + simDiff) > params.getOrDefault("threshold", 0.5).doubleValue() ? 1 : 0; + return (double)incommon / (incommon + simDiff) > Double.parseDouble(params.getOrDefault("threshold", "0.5")) ? 1 : 0; } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SizeMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SizeMatch.java index 91f1e356a..175b0666d 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SizeMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SizeMatch.java @@ -24,7 +24,7 @@ public class SizeMatch extends AbstractComparator { * @param params * the parameters */ - public SizeMatch(final Map params) { + public SizeMatch(final Map params) { super(params); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SortedJaroWinkler.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SortedJaroWinkler.java index 4b2eb83f1..79173ba66 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SortedJaroWinkler.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SortedJaroWinkler.java @@ -12,7 +12,7 @@ import java.util.Map; @ComparatorClass("sortedJaroWinkler") public class SortedJaroWinkler extends AbstractSortedComparator { - public SortedJaroWinkler(Map params){ + public SortedJaroWinkler(Map params){ super(params, new com.wcohen.ss.Levenstein()); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SortedLevel2JaroWinkler.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SortedLevel2JaroWinkler.java index f80a268e2..de8c669d7 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SortedLevel2JaroWinkler.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SortedLevel2JaroWinkler.java @@ -22,7 +22,7 @@ public class SortedLevel2JaroWinkler extends AbstractSortedComparator { super(weight, new com.wcohen.ss.Level2JaroWinkler()); } - public SortedLevel2JaroWinkler(final Map params){ + public SortedLevel2JaroWinkler(final Map params){ super(params, new com.wcohen.ss.Level2JaroWinkler()); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SubStringLevenstein.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SubStringLevenstein.java index 004fc90e2..f76947930 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SubStringLevenstein.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SubStringLevenstein.java @@ -31,9 +31,9 @@ public class SubStringLevenstein extends AbstractComparator { super(w, new com.wcohen.ss.Levenstein()); } - public SubStringLevenstein(Map params){ + public SubStringLevenstein(Map params){ super(params, new com.wcohen.ss.Levenstein()); - this.limit = params.get("limit").intValue(); + this.limit = Integer.parseInt(params.getOrDefault("limit", "1")); } /** diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/TitleVersionMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/TitleVersionMatch.java index fd86b1730..873a0c100 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/TitleVersionMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/TitleVersionMatch.java @@ -17,7 +17,7 @@ import eu.dnetlib.pace.tree.support.ComparatorClass; @ComparatorClass("titleVersionMatch") public class TitleVersionMatch extends AbstractComparator { - public TitleVersionMatch(final Map params) { + public TitleVersionMatch(final Map params) { super(params); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/UrlMatcher.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/UrlMatcher.java index 8f36126c8..34bbab7bf 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/UrlMatcher.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/UrlMatcher.java @@ -12,19 +12,19 @@ import java.util.Map; @ComparatorClass("urlMatcher") public class UrlMatcher extends Levenstein { - private Map params; + private Map params; - public UrlMatcher(Map params){ + public UrlMatcher(Map params){ super(params); this.params = params; } - public UrlMatcher(double weight, Map params) { + public UrlMatcher(double weight, Map params) { super(weight); this.params = params; } - public void setParams(Map params) { + public void setParams(Map params) { this.params = params; } @@ -37,8 +37,8 @@ public class UrlMatcher extends Levenstein { return 0.0; } - Double hostW = params.get("host").doubleValue(); - Double pathW = params.get("path").doubleValue(); + Double hostW = Double.parseDouble(params.getOrDefault("host", "0.5")); + Double pathW = Double.parseDouble(params.getOrDefault("path", "0.5")); if (StringUtils.isBlank(urlA.getPath()) || StringUtils.isBlank(urlB.getPath())) { return hostW * 0.5; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/YearMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/YearMatch.java index f57cba531..64bd75b0c 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/YearMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/YearMatch.java @@ -18,7 +18,7 @@ public class YearMatch extends AbstractComparator { private int limit = 4; - public YearMatch(final Map params) { + public YearMatch(final Map params) { super(params); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractComparator.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractComparator.java index 1ed14b067..ddfcc5565 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractComparator.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractComparator.java @@ -18,13 +18,13 @@ public abstract class AbstractComparator extends AbstractPaceFunctions implement /** The weight. */ protected double weight = 0.0; - private Map params; + private Map params; - protected AbstractComparator(Map params) { + protected AbstractComparator(Map params) { this.params = params; } - protected AbstractComparator(Map params, final AbstractStringDistance ssalgo){ + protected AbstractComparator(Map params, final AbstractStringDistance ssalgo){ this.params = params; this.weight = 1.0; this.ssalgo = ssalgo; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractSortedComparator.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractSortedComparator.java index 18b5e67c6..557ad0c29 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractSortedComparator.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractSortedComparator.java @@ -23,8 +23,8 @@ public abstract class AbstractSortedComparator extends AbstractComparator { super(weight, ssalgo); } - protected AbstractSortedComparator(final Map params, final AbstractStringDistance ssalgo){ - super(params.get("weight").doubleValue(), ssalgo); + protected AbstractSortedComparator(final Map params, final AbstractStringDistance ssalgo){ + super(Double.parseDouble(params.get("weight")), ssalgo); } @Override diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/FieldConf.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/FieldConf.java index b25d2a03c..0d08fdd03 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/FieldConf.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/FieldConf.java @@ -12,7 +12,7 @@ public class FieldConf implements Serializable { private String field; //name of the field on which apply the comparator private String comparator; //comparator name private double weight = 1.0; //weight for the field (to be used in the aggregation) - private Map params; //parameters + private Map params; //parameters private boolean countIfUndefined; @@ -27,7 +27,7 @@ public class FieldConf implements Serializable { public FieldConf() { } - public FieldConf(String field, String comparator, double weight, Map params, boolean countIfUndefined) { + public FieldConf(String field, String comparator, double weight, Map params, boolean countIfUndefined) { this.field = field; this.comparator = comparator; this.weight = weight; @@ -59,11 +59,11 @@ public class FieldConf implements Serializable { this.weight = weight; } - public Map getParams() { + public Map getParams() { return params; } - public void setParams(Map params) { + public void setParams(Map params) { this.params = params; } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java index 3f9bdce1e..f3d37c724 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java @@ -46,7 +46,7 @@ public class TreeNodeDef implements Serializable { double result = comparator(fieldConf).compare(doc1.getFieldMap().get(fieldConf.getField()), doc2.getFieldMap().get(fieldConf.getField()), conf); - stats.addFieldStats(fieldConf.getComparator() + " on " + fieldConf.getField(), new FieldStats(weight, result, fieldConf.isCountIfUndefined())); + stats.addFieldStats(fieldConf.getComparator() + " on " + fieldConf.getField() + " " + fields.indexOf(fieldConf), new FieldStats(weight, result, fieldConf.isCountIfUndefined())); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeProcessor.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeProcessor.java index 23c9a3ea8..b9af3594a 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeProcessor.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeProcessor.java @@ -23,7 +23,6 @@ public class TreeProcessor{ } public boolean compare(final MapDocument a, final MapDocument b) { - //evaluate the decision tree return evaluateTree(a, b).getResult() == MatchType.MATCH; } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/PaceResolver.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/PaceResolver.java index 8c670a85c..bf6feea1c 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/PaceResolver.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/PaceResolver.java @@ -38,7 +38,7 @@ public class PaceResolver implements Serializable { } } - public Comparator getComparator(String name, Map params) throws PaceException { + public Comparator getComparator(String name, Map params) throws PaceException { try { return comparators.get(name).getDeclaredConstructor(Map.class).newInstance(params); } catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException | NullPointerException e) { diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java index b7722a1ed..920d00eeb 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java @@ -2,9 +2,12 @@ package eu.dnetlib.pace.comparators; import eu.dnetlib.pace.clustering.NGramUtils; import eu.dnetlib.pace.tree.CityMatch; +import eu.dnetlib.pace.tree.ContainsMatch; import eu.dnetlib.pace.tree.JaroWinklerNormalizedName; import eu.dnetlib.pace.config.DedupConfig; +import eu.dnetlib.pace.tree.KeywordMatch; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import eu.dnetlib.pace.common.AbstractPaceFunctions; @@ -17,13 +20,13 @@ import static junit.framework.Assert.assertTrue; public class ComparatorTest extends AbstractPaceFunctions { - private Map params; + private Map params; private DedupConfig conf; @Before public void setup() { params = new HashMap<>(); - params.put("weight", 1.0); + params.put("weight", "1.0"); conf = DedupConfig.load(readFromClasspath("/eu/dnetlib/pace/config/organization.current.conf", ComparatorTest.class)); } @@ -34,103 +37,6 @@ public class ComparatorTest extends AbstractPaceFunctions { System.out.println("utils = " + utils.cleanupForOrdering("University of Pisa")); } - @Test - public void testJaroWinklerNormalizedName() { - final JaroWinklerNormalizedName jaroWinklerNormalizedName = new JaroWinklerNormalizedName(params); - double result = jaroWinklerNormalizedName.distance("Free University of Bozen-Bolzano", "University of the Free State", conf); - - System.out.println("result = " + result); - assertEquals(0.0, result); - } - - @Test - public void testJaroWinklerNormalizedName2() { - - final JaroWinklerNormalizedName jaroWinklerNormalizedName = new JaroWinklerNormalizedName(params); - double result = jaroWinklerNormalizedName.distance("University of New York", "Università di New York", conf); - - assertEquals(1.0, result); - } - - @Test - public void testJaroWinklerNormalizedName3() { - - final JaroWinklerNormalizedName jaroWinklerNormalizedName = new JaroWinklerNormalizedName(params); - double result = jaroWinklerNormalizedName.distance("Biblioteca dell'Universita di Bologna", "Università di Bologna", conf); - - System.out.println("result = " + result); - assertEquals(0.0, result); - } - - @Test - public void testJaroWinklerNormalizedName4() { - - final JaroWinklerNormalizedName jaroWinklerNormalizedName = new JaroWinklerNormalizedName(params); - double result = jaroWinklerNormalizedName.distance("Universita degli studi di Pisa", "Universita di Pisa", conf); - - System.out.println("result = " + result); - assertEquals(1.0, result); - } - - @Test - public void testJaroWinklerNormalizedName5() { - - final JaroWinklerNormalizedName jaroWinklerNormalizedName = new JaroWinklerNormalizedName(params); - double result = jaroWinklerNormalizedName.distance("RESEARCH PROMOTION FOUNDATION", "IDRYMA PROOTHISIS EREVNAS", conf); - - System.out.println("result = " + result); - assertEquals(1.0, result); - } - - @Test - public void testJaroWinklerNormalizedName6() { - - final JaroWinklerNormalizedName jaroWinklerNormalizedName = new JaroWinklerNormalizedName(params); - double result = jaroWinklerNormalizedName.distance("Fonds zur Förderung der wissenschaftlichen Forschung (Austrian Science Fund)", "Fonds zur Förderung der wissenschaftlichen Forschung", conf); - - System.out.println("result = " + result); - assertTrue(result > 0.9); - - } - - @Test - public void testJaroWinklerNormalizedName7() { - - final JaroWinklerNormalizedName jaroWinklerNormalizedName = new JaroWinklerNormalizedName(params); - double result = jaroWinklerNormalizedName.distance("Polytechnic University of Turin", "POLITECNICO DI TORINO", conf); - - System.out.println("result = " + result); - assertTrue(result > 0.9); - } - - @Test - public void testJaroWinklerNormalizedName8() { - final JaroWinklerNormalizedName jaroWinklerNormalizedName = new JaroWinklerNormalizedName(params); - - double result = jaroWinklerNormalizedName.distance("Politechniki Warszawskiej (Warsaw University of Technology)", "Warsaw University of Technology", conf); - - System.out.println("result = " + result); - } - - @Test - public void testJaroWinklerNormalizedName9() { - final JaroWinklerNormalizedName jaroWinklerNormalizedName = new JaroWinklerNormalizedName(params); - - double result = jaroWinklerNormalizedName.distance("Istanbul Commerce University", "İstanbul Ticarət Universiteti", conf); - - System.out.println("result = " + result); - } - - @Test - public void testJaroWinklerNormalizedName10(){ - - final JaroWinklerNormalizedName jaroWinklerNormalizedName = new JaroWinklerNormalizedName(params); - - double result = jaroWinklerNormalizedName.distance("Firenze University Press", "University of Florence", conf); - - System.out.println("result = " + result); - } - @Test public void cityMatchTest() { final CityMatch cityMatch = new CityMatch(params); @@ -147,6 +53,53 @@ public class ComparatorTest extends AbstractPaceFunctions { //both names with cities (different) assertEquals(0.0, cityMatch.distance("Universita di Bologna", "Universita di Torino", conf)); + //particular cases + assertEquals(1.0, cityMatch.distance("Free University of Bozen-Bolzano", "Università di Bolzano", conf)); + assertEquals(1.0, cityMatch.distance("Politechniki Warszawskiej (Warsaw University of Technology)", "Warsaw University of Technology", conf)); + } + + // @Test +// public void testJaroWinklerNormalizedName6() { +// +// final JaroWinklerNormalizedName jaroWinklerNormalizedName = new JaroWinklerNormalizedName(params); +// double result = jaroWinklerNormalizedName.distance("Fonds zur Förderung der wissenschaftlichen Forschung (Austrian Science Fund)", "Fonds zur Förderung der wissenschaftlichen Forschung", conf); +// +// System.out.println("result = " + result); +// assertTrue(result > 0.9); +// +// } +// @Test +// public void testJaroWinklerNormalizedName10(){ +// +// final JaroWinklerNormalizedName jaroWinklerNormalizedName = new JaroWinklerNormalizedName(params); +// +// double result = jaroWinklerNormalizedName.distance("Firenze University Press", "University of Florence", conf); +// +// System.out.println("result = " + result); +// } + + @Test + public void keywordMatchTest(){ + params.put("threshold", "0.4"); + + final KeywordMatch keywordMatch = new KeywordMatch(params); + + assertEquals(1.0, keywordMatch.distance("Biblioteca dell'Universita di Bologna", "Università di Bologna", conf)); + assertEquals(1.0, keywordMatch.distance("Universita degli studi di Pisa", "Universita di Pisa", conf)); + assertEquals(1.0, keywordMatch.distance("Polytechnic University of Turin", "POLITECNICO DI TORINO", conf)); + assertEquals(1.0, keywordMatch.distance("Istanbul Commerce University", "İstanbul Ticarət Universiteti", conf)); + } + + @Test + public void containsMatchTest(){ + + params.put("string", "openorgs"); + params.put("bool", "XOR"); + params.put("caseSensitive", "false"); + + final ContainsMatch containsMatch = new ContainsMatch(params); + + assertEquals(0.0, containsMatch.distance("openorgs", "openorgs", conf)); } diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java index 33ef542da..3b87cedad 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java @@ -7,7 +7,6 @@ import java.util.Map; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; public class ConfigTest extends AbstractPaceTest { diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/util/UtilTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/util/UtilTest.java index e94afff9f..36aca3346 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/util/UtilTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/util/UtilTest.java @@ -8,11 +8,11 @@ import java.util.Map; public class UtilTest { - Map params; + Map params; @Before public void setUp(){ - params = new HashMap(); + params = new HashMap(); } @Test From d2278fe35847e0d405f556f510f07c6d7f3b0511 Mon Sep 17 00:00:00 2001 From: miconis Date: Thu, 21 Nov 2019 10:54:02 +0100 Subject: [PATCH 110/449] minor change in the citymatch --- .../src/main/java/eu/dnetlib/pace/tree/CityMatch.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/CityMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/CityMatch.java index 998a52650..2362f47f1 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/CityMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/CityMatch.java @@ -41,7 +41,7 @@ public class CityMatch extends AbstractComparator { else { if (codes1.isEmpty() ^ codes2.isEmpty()) return -1; //undefined if one of the two has no cities - return commonElementsPercentage(codes1, codes2) > Integer.parseInt(params.getOrDefault("threshold", "0")) ? 1.0 : 0.0; + return commonElementsPercentage(codes1, codes2) > Double.parseDouble(params.getOrDefault("threshold", "0.0")) ? 1.0 : 0.0; } } } From f7917303308d67b15d77e6b27ade596102c6bd7c Mon Sep 17 00:00:00 2001 From: miconis Date: Wed, 27 Nov 2019 15:48:37 +0100 Subject: [PATCH 111/449] addition of one term to the translation maps in the configurations --- .../eu/dnetlib/pace/tree/NumbersMatch.java | 31 +++++++++++++++++++ .../dnetlib/pace/tree/support/FieldStats.java | 23 +++++++++++++- .../pace/tree/support/TreeNodeDef.java | 2 +- .../eu/dnetlib/pace/config/city_map.csv | 6 ++-- .../eu/dnetlib/pace/config/stopwords_it.txt | 2 -- .../pace/comparators/ComparatorTest.java | 20 ++++++++---- .../pace/config/organization.current.conf | 3 +- 7 files changed, 73 insertions(+), 14 deletions(-) create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/NumbersMatch.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/NumbersMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/NumbersMatch.java new file mode 100644 index 000000000..c2300d207 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/NumbersMatch.java @@ -0,0 +1,31 @@ +package eu.dnetlib.pace.tree; + +import eu.dnetlib.pace.config.Config; +import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.ComparatorClass; + +import java.util.Map; + +@ComparatorClass("numbersMatch") +public class NumbersMatch extends AbstractComparator { + + + public NumbersMatch(Map params) { + super(params); + } + + @Override + public double distance(String a, String b, Config conf) { + + String numbers1 = getNumbers(nfd(a)); + String numbers2 = getNumbers(nfd(b)); + + if (numbers1.isEmpty() || numbers2.isEmpty()) + return -1.0; + + if (numbers1.equals(numbers2)) + return 1.0; + + return 0.0; + } +} \ No newline at end of file diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/FieldStats.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/FieldStats.java index 2f1decd32..9accded3e 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/FieldStats.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/FieldStats.java @@ -1,5 +1,6 @@ package eu.dnetlib.pace.tree.support; +import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.util.PaceException; import org.codehaus.jackson.map.ObjectMapper; @@ -10,13 +11,17 @@ public class FieldStats implements Serializable { private double weight; //weight for the field (to be used in the aggregation) private double result; //the result of the comparison + private Field a; + private Field b; private boolean countIfUndefined; - public FieldStats(double weight, double result, boolean countIfUndefined) { + public FieldStats(double weight, double result, boolean countIfUndefined, Field a, Field b) { this.weight = weight; this.result = result; this.countIfUndefined = countIfUndefined; + this.a = a; + this.b = b; } public double getWeight() { @@ -43,6 +48,22 @@ public class FieldStats implements Serializable { this.countIfUndefined = countIfUndefined; } + public Field getA() { + return a; + } + + public void setA(Field a) { + this.a = a; + } + + public Field getB() { + return b; + } + + public void setB(Field b) { + this.b = b; + } + @Override public String toString(){ try { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java index f3d37c724..cb3b7b4b0 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java @@ -46,7 +46,7 @@ public class TreeNodeDef implements Serializable { double result = comparator(fieldConf).compare(doc1.getFieldMap().get(fieldConf.getField()), doc2.getFieldMap().get(fieldConf.getField()), conf); - stats.addFieldStats(fieldConf.getComparator() + " on " + fieldConf.getField() + " " + fields.indexOf(fieldConf), new FieldStats(weight, result, fieldConf.isCountIfUndefined())); + stats.addFieldStats(fieldConf.getComparator() + " on " + fieldConf.getField() + " " + fields.indexOf(fieldConf), new FieldStats(weight, result, fieldConf.isCountIfUndefined(), doc1.getFieldMap().get(fieldConf.getField()), doc2.getFieldMap().get(fieldConf.getField()))); } diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/city_map.csv b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/city_map.csv index 936c80adf..066afa7a4 100644 --- a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/city_map.csv +++ b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/city_map.csv @@ -8138,7 +8138,7 @@ city::5393429;Santee;Cowles;Cowles Station;Cowlestown;Fanita;Santee;Santi;Sentij city::5396003;Simi Valley;Chimii;Simi;Simi Vali;Simi Valley;Simi-Vehlli;Simi-Velli;Simih;Simiopolis;shimibare;simi bhyali;simibaelli;smy wyly;symy faly;symy wly kalyfrnya;xi mi gu;Сими Вали;Сими-Вэлли;Сімі-Веллі;סימי ואלי;سمی ویلی;سيمي فالي;سیمی ولی، کالیفرنیا;सिमि भ्याली;シミバレー;西米谷;시미밸리; city::5397603;South Gate;Juzhen Gejt;Saut Gejt;South Gate;nan men;sa'utha geta;sausugeito;swt gyt kalyfrnya;swth ghyt;sʼwt gyyt;Саут Гејт;Южен Гейт;סאות גייט;ساؤتھ گیٹ;ساؤتھ گیٹ، کیلیفورنیا;سوت گیت، کالیفرنیا;سوث غيت;साउथ गेट;サウスゲイト;南门; city::5397765;South San Francisco;Baden;Juzhen San Francisko;Saus-San-Francisko;Saut San Francisko;South San Francisco;nan jiu jin shan;sa'utha syana phransisko;saususanfuranshisuko;swt san fransyskw kalyfrnya;swwth san fransyskw;Саус-Сан-Франциско;Саут Сан Франциско;Южен Сан Франциско;سوت سان فرانسیسکو، کالیفرنیا;سووث سان فرانسيسكو;साउथ स्यान फ्रान्सिस्को;サウスサンフランシスコ;南旧金山;南舊金山; -city::5397841;South Whittier;; +city::5397841;South Whittier; city::5399020;Stockton;SCK;Stockton;Stokt"n;Stokton;Tuleburg;Weberville;astwktwn;seutogteon;shi de dun;si tuo ke dun;stakatana;stwktwn;stwqtwn;sutokkuton;Стоктон;Стоктън;סטוקטון;استوکتون;ستوكتون;سٹوکٹن;स्टकटन;ストックトン;士德頓;斯托克顿;스톡턴; city::5400075;Sunnyvale;Encinal;S"nivejl;Sanivejl;Sannivejl;Sunnyvale;saniberu;sanivela;sannibhela;sanyfal;sany‌wyl kalyfrnya;sen ni wei er;seonibeil;snywyl;Санивејл;Саннивейл;Саннівейл;Сънивейл;סאניווייל;سانيفال;سانی‌ویل، کالیفرنیا;سنیویل;सनीवेल;सन्नीभेल;サニーベール;森尼韦尔;서니베일; city::5401395;Temecula;Temecula;Temecula Station;Temekjula;Temekula;te man ku la;temakula;temekyura;tmwkwla kalyfrnya;tymykwla;Темекула;Темекјула;تموکولا، کالیفرنیا;تيميكولا;ٹیمکولا;तेमाकुला;テメキュラ;特曼库拉; @@ -8152,7 +8152,7 @@ city::5404555;Union City;Juni"n Siti;Junion Siti;Junion-Siti;Thanh pho Union;Th city::5404794;Universal City;Juniversal-Siti;Junivursul Siti;huan qiu shi;yunibeoseolsiti;ywnyfrsal syty;ywnywrsal syty kalyfrnya;Юниверсал-Сити;Юнивърсъл Сити;يونيفرسال سيتي;یونیورسال سیتی، کالیفرنیا;環球市;유니버설시티; city::5404915;Upland;"plend;Apland;CCB;Magnolia Villa;North Ontario;Upland;a pu lan;abland;ap lnd kalyfrnya;apalyanda;eoblaendeu;Апланд;Ъпленд;آبلاند;آپ لند، کالیفرنیا;अपल्यांड;阿普兰;업랜드; city::5405228;Vacaville;Vacaville;Vakavil;bhakabhila;fakafyly;wa ka wei er;wakawyl kalyfrnya;Βάκαβιλ;Вакавил;فاكافيلي;واکاولے;واکاویل، کالیفرنیا;भाकाभिल;瓦卡维尔; -city::5405288;Valencia;; +city::5405288;Valencia; city::5405380;Vallejo;VLO;Val'ekho;Val'jo;Valejo;Valekho;Vallejo;balleio;bhaleyo;falyjw;vu~areho;wa lie huo;walhw kalyfrnya;walyjw;Валехо;Валејо;Вальехо;Вальйо;فاليجو;والهو، کالیفرنیا;والیجو;भालेयो;ヴァレーホ;瓦列霍;발레이오; city::5405693;Van Nuys;Van-Najs;baennaijeu;fan nwys;Ван-Найс;فان نويس;ون نایز، لس‌آنجلس;밴나이즈; city::5405878;Ventura;La Asumpta;La Asuncionde Nuestra Senora;La Pueblo de los Canoas;Mishkanakan;Mitskanakan;Poinsettia City;Ponsettia City by the Sea;Pueblo De las Canoas;Pueblo de Canoas;S B Ventura;San Buenaventura;The Palm City;Ventura;Ventura-by-the Sea;benchura;bentula;fyntwra;syana byuyanabhencura;wen tu la;wnchra;wntwra kalyfrnya;Вентура;فينتورا;ونتورا، کالیفرنیا;ونچرا;स्यान ब्युयनाभेन्चुरा;ベンチュラ;文图拉;벤투라; @@ -8200,7 +8200,7 @@ city::5512862;Sparks;Harriman;Sparks;asparks nwada;sbarks;seupakeuseu;Спар city::5512909;Spring Valley;Spring Vali;Spring Valley;Spring-Vehlli;aspryng wly nwada;sbryngh faly;seupeulingbaelli;supuringubare;Спринг Вали;Спринг-Вэлли;اسپرینگ ولی، نوادا;سبرينغ فالي;سپرنگ ویلی، نیواڈا;スプリングバレー;스프링밸리; city::5513343;Sunrise Manor;Sanrajz Mejnor;Sanrajz-Mehner;Sunrise Manor;sanraizumana;sanrayz mnwr nwada;snrayz manwr;Санрайз-Мэнер;Санрајз Мејнор;سانرایز منور، نوادا;سنرائز مینور، نیواڈا;سنرايز مانور;サンライズマナー; city::5516233;Amarillo;AMA;Amarilas;Amarillo;Amarilo;Amarilyo;Oneida;a ma li luo;aemeolillo;amariro;amariyo;amarylw;amarylw tgzas;Амарилло;Амарило;Ամարիլլո;אמרילו;آماریلو، تگزاس;آماریلو، ٹیکساس;أماريلو;اماریلو;आमारियो;アマリロ;阿馬里洛;애머릴로; -city::5520993;El Paso;Concordia;ELP;Ehl'-Paso;El Pasas;El Paso;El'-Paso;El-Paso;Elpaso;Franklin;Gorad Ehl'-Pasa;Magoffinsville;Passus;ai er pa suo;al basw;al pasw;ayl pasw;el-paso;ela peso;ela pyaso;elpaeso;Ελ Πάσο;Горад Эль-Паса;Ел Пасо;Ель-Пасо;Эль-Пасо;Էլ Պասո;אל פאסו;إل باسو;ال پاسو;ایل پاسو;एल पॅसो;এল প্যাসো;เอลแพโซ;ელ-პასო;ელ-ფასო;エル・パソ;艾爾帕索;엘패소; +city::5520993;El Paso;ELP;Ehl'-Paso;El Pasas;El Paso;El'-Paso;El-Paso;Elpaso;Gorad Ehl'-Pasa;Magoffinsville;Passus;ai er pa suo;al basw;al pasw;ayl pasw;el-paso;ela peso;ela pyaso;elpaeso;Ελ Πάσο;Горад Эль-Паса;Ел Пасо;Ель-Пасо;Эль-Пасо;Էլ Պասո;אל פאסו;إل باسو;ال پاسو;ایل پاسو;एल पॅसो;এল প্যাসো;เอลแพโซ;ელ-პასო;ელ-ფასო;エル・パソ;艾爾帕索;엘패소; city::5525577;Lubbock;LBB;Labbok;Labok;Lubbock;Lubuk;la bo ke;labak tgzas;labaka;lbk;leobeog;lwbwk;rabokku;Лаббок;Лабок;Лъбък;לאבק;لاباک، تگزاس;لابوک، ٹیکساس;لبک;لوبوك;लबक;ラボック;拉伯克;러벅; city::5526337;Midland;MAF;Midland;Midlend;Midway;mdland;mi de lan;middorando;mideullaendeu;mydlnd;mydlnd tgzas;Мидланд;Мидленд;Мідленд;מידלנד;مدلاند;مڈلینڈ، ٹیکساس;میدلند، تگزاس;ミッドランド;米德蘭;미들랜드; city::5527554;Odessa;Odesa;Odessa;ao de sa;awdsa;awdysa;odessa;Одеса;Одесса;أوديسا;اودسا;اوڈیسا، ٹیکساس;اوڈیسہ، ٹیکساس;オデッサ;敖德薩; diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_it.txt b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_it.txt index e6131bca9..5b1434de3 100644 --- a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_it.txt +++ b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_it.txt @@ -557,9 +557,7 @@ starete starà starò stata -state stati -stato stava stavamo stavano diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java index 920d00eeb..7e69b0e3a 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java @@ -1,11 +1,8 @@ package eu.dnetlib.pace.comparators; import eu.dnetlib.pace.clustering.NGramUtils; -import eu.dnetlib.pace.tree.CityMatch; -import eu.dnetlib.pace.tree.ContainsMatch; -import eu.dnetlib.pace.tree.JaroWinklerNormalizedName; +import eu.dnetlib.pace.tree.*; import eu.dnetlib.pace.config.DedupConfig; -import eu.dnetlib.pace.tree.KeywordMatch; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; @@ -52,6 +49,7 @@ public class ComparatorTest extends AbstractPaceFunctions { //both names with cities (different) assertEquals(0.0, cityMatch.distance("Universita di Bologna", "Universita di Torino", conf)); + assertEquals(0.0, cityMatch.distance("Franklin College", "Concordia College", conf)); //particular cases assertEquals(1.0, cityMatch.distance("Free University of Bozen-Bolzano", "Università di Bolzano", conf)); @@ -80,14 +78,17 @@ public class ComparatorTest extends AbstractPaceFunctions { @Test public void keywordMatchTest(){ - params.put("threshold", "0.4"); + params.put("threshold", "0.5"); final KeywordMatch keywordMatch = new KeywordMatch(params); - assertEquals(1.0, keywordMatch.distance("Biblioteca dell'Universita di Bologna", "Università di Bologna", conf)); + assertEquals(0.0, keywordMatch.distance("Biblioteca dell'Universita di Bologna", "Università di Bologna", conf)); assertEquals(1.0, keywordMatch.distance("Universita degli studi di Pisa", "Universita di Pisa", conf)); assertEquals(1.0, keywordMatch.distance("Polytechnic University of Turin", "POLITECNICO DI TORINO", conf)); assertEquals(1.0, keywordMatch.distance("Istanbul Commerce University", "İstanbul Ticarət Universiteti", conf)); + assertEquals(1.0, keywordMatch.distance("Franklin College", "Concordia College", conf)); + assertEquals(0.0, keywordMatch.distance("University of Georgia", "Georgia State University", conf)); + } @Test @@ -102,5 +103,12 @@ public class ComparatorTest extends AbstractPaceFunctions { assertEquals(0.0, containsMatch.distance("openorgs", "openorgs", conf)); } + @Test + public void numbersMatchTest(){ + final NumbersMatch numbersMatch = new NumbersMatch(params); + + assertEquals(0.0, numbersMatch.distance("University of Rennes 2", "Universita di Rennes 7", conf)); + } + } diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.current.conf b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.current.conf index 510de0398..b2ab6ae92 100644 --- a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.current.conf +++ b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.current.conf @@ -136,7 +136,8 @@ "key::101": ["microbiology","microbiologia","micro-biologia","microbiologiche","microbiología","microbiologia","Mikrobiologie","microbiologie","μικροβιολογία","mikrobiyoloji","mikrobiológia","mikrobiologija","mikrobioloogia",""], "key::102": ["informatics","informatica","informática","informática","informatica",""], "key::103": ["forschungsgemeinschaft","comunita ricerca","research community","research foundation","research association"], - "key::104": ["commerce","ticaret","ticarət","commercio","trade","handel","comercio"] + "key::104": ["commerce","ticaret","ticarət","commercio","trade","handel","comercio"], + "key::105" : ["state", "stato", "etade", "statale", "etat", "zustand", "estado"] } } } \ No newline at end of file From 49f9beb4a8c45844de037e5f61bd27622326b773 Mon Sep 17 00:00:00 2001 From: miconis Date: Thu, 28 Nov 2019 16:54:44 +0100 Subject: [PATCH 112/449] implementation of romansmatch and re-implementation of the getNumber function. New terms in the translation map and update of the configuration --- .../pace/common/AbstractPaceFunctions.java | 16 ++++++- .../eu/dnetlib/pace/tree/NumbersMatch.java | 4 ++ .../eu/dnetlib/pace/tree/RomansMatch.java | 35 +++++++++++++++ .../eu/dnetlib/pace/config/stopwords_de.txt | 1 - .../pace/comparators/ComparatorTest.java | 45 ++++++++++--------- .../pace/config/organization.current.conf | 2 +- 6 files changed, 80 insertions(+), 23 deletions(-) create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/RomansMatch.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java index 71954a394..b9f30ff69 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java @@ -17,6 +17,7 @@ import java.io.IOException; import java.io.StringWriter; import java.text.Normalizer; import java.util.*; +import java.util.regex.Pattern; import java.util.stream.Collectors; /** @@ -48,6 +49,8 @@ public abstract class AbstractPaceFunctions { //doi prefix for normalization public final String DOI_PREFIX = "(https?:\\/\\/dx\\.doi\\.org\\/)|(doi:)"; + private Pattern numberPattern = Pattern.compile("-?\\d+(\\.\\d+)?"); + protected final static FieldList EMPTY_FIELD = new FieldListImpl(); protected String concat(final List l) { @@ -92,7 +95,18 @@ public abstract class AbstractPaceFunctions { } protected String getNumbers(final String s) { - return s.replaceAll("\\D", ""); + final StringBuilder sb = new StringBuilder(); + for (final String t : s.split(" ")) { + sb.append(isNumber(t)? t : ""); + } + return sb.toString(); + } + + public boolean isNumber(String strNum) { + if (strNum == null) { + return false; + } + return numberPattern.matcher(strNum).matches(); } protected static String fixAliases(final String s) { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/NumbersMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/NumbersMatch.java index c2300d207..ce60a672a 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/NumbersMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/NumbersMatch.java @@ -17,9 +17,13 @@ public class NumbersMatch extends AbstractComparator { @Override public double distance(String a, String b, Config conf) { + //extracts numbers from the field String numbers1 = getNumbers(nfd(a)); String numbers2 = getNumbers(nfd(b)); + if (numbers1.isEmpty() && numbers2.isEmpty()) + return 1.0; + if (numbers1.isEmpty() || numbers2.isEmpty()) return -1.0; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/RomansMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/RomansMatch.java new file mode 100644 index 000000000..bdbde9610 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/RomansMatch.java @@ -0,0 +1,35 @@ +package eu.dnetlib.pace.tree; + +import eu.dnetlib.pace.config.Config; +import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.ComparatorClass; + +import java.util.Map; + +@ComparatorClass("romansMatch") +public class RomansMatch extends AbstractComparator { + + + public RomansMatch(Map params) { + super(params); + } + + @Override + public double distance(String a, String b, Config conf) { + + //extracts romans from the field + String romans1 = getRomans(nfd(a)); + String romans2 = getRomans(nfd(b)); + + if (romans1.isEmpty() && romans2.isEmpty()) + return 1.0; + + if (romans1.isEmpty() || romans2.isEmpty()) + return -1.0; + + if (romans1.equals(romans2)) + return 1.0; + + return 0.0; + } +} diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_de.txt b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_de.txt index 24666a649..c9478968e 100644 --- a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_de.txt +++ b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_de.txt @@ -11,7 +11,6 @@ ag alle allein allem -allen aller allerdings alles diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java index 7e69b0e3a..905fac4bd 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java @@ -54,28 +54,9 @@ public class ComparatorTest extends AbstractPaceFunctions { //particular cases assertEquals(1.0, cityMatch.distance("Free University of Bozen-Bolzano", "Università di Bolzano", conf)); assertEquals(1.0, cityMatch.distance("Politechniki Warszawskiej (Warsaw University of Technology)", "Warsaw University of Technology", conf)); + assertEquals(-1.0, cityMatch.distance("Allen (United States)", "United States Military Academy", conf)); } - // @Test -// public void testJaroWinklerNormalizedName6() { -// -// final JaroWinklerNormalizedName jaroWinklerNormalizedName = new JaroWinklerNormalizedName(params); -// double result = jaroWinklerNormalizedName.distance("Fonds zur Förderung der wissenschaftlichen Forschung (Austrian Science Fund)", "Fonds zur Förderung der wissenschaftlichen Forschung", conf); -// -// System.out.println("result = " + result); -// assertTrue(result > 0.9); -// -// } -// @Test -// public void testJaroWinklerNormalizedName10(){ -// -// final JaroWinklerNormalizedName jaroWinklerNormalizedName = new JaroWinklerNormalizedName(params); -// -// double result = jaroWinklerNormalizedName.distance("Firenze University Press", "University of Florence", conf); -// -// System.out.println("result = " + result); -// } - @Test public void keywordMatchTest(){ params.put("threshold", "0.5"); @@ -88,6 +69,10 @@ public class ComparatorTest extends AbstractPaceFunctions { assertEquals(1.0, keywordMatch.distance("Istanbul Commerce University", "İstanbul Ticarət Universiteti", conf)); assertEquals(1.0, keywordMatch.distance("Franklin College", "Concordia College", conf)); assertEquals(0.0, keywordMatch.distance("University of Georgia", "Georgia State University", conf)); + assertEquals(0.0, keywordMatch.distance("University College London", "University of London", conf)); + assertEquals(0.0, keywordMatch.distance("Washington State University", "University of Washington", conf)); + assertEquals(-1.0, keywordMatch.distance("Allen (United States)", "United States Military Academy", conf)); + } @@ -108,7 +93,27 @@ public class ComparatorTest extends AbstractPaceFunctions { final NumbersMatch numbersMatch = new NumbersMatch(params); assertEquals(0.0, numbersMatch.distance("University of Rennes 2", "Universita di Rennes 7", conf)); + assertEquals(1.0, numbersMatch.distance("Universit de Rennes 2", "Universita di Rennes 2", conf)); } + @Test + public void romansMatchTest(){ + + final RomansMatch romansMatch = new RomansMatch(params); + + assertEquals(-1.0, romansMatch.distance("University of Paris X", "Universita di Parigi", conf)); + assertEquals(0.0, romansMatch.distance("University of Paris IX", "University of Paris X", conf)); + assertEquals(1.0, romansMatch.distance("University of Paris VII", "University of Paris VII", conf)); + } + + @Test + public void jaroWinklerNormalizedNameTest() { + + final JaroWinklerNormalizedName jaroWinklerNormalizedName = new JaroWinklerNormalizedName(params); + + double result = jaroWinklerNormalizedName.distance("AT&T (United States)", "United States Military Academy", conf); + System.out.println("result = " + result); + } + } diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.current.conf b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.current.conf index b2ab6ae92..f92655f3f 100644 --- a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.current.conf +++ b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.current.conf @@ -33,7 +33,7 @@ "legalname" : [] }, "synonyms": { - "key::1": ["university","università","università studi","universitario","universitaria","université","universitaire","universitaires","universidad","universitade","Universität","universitaet","Uniwersytet","университет","universiteit","πανεπιστήμιο","universitesi","universiteti"], + "key::1": ["university","università","università studi","universitario","universitaria","université","universitaire","universitaires","universidad","universitade","Universität","universitaet","Uniwersytet","университет","universiteit","πανεπιστήμιο","universitesi","universiteti", "universiti"], "key::2": ["studies","studi","études","estudios","estudos","Studien","studia","исследования","studies","σπουδές"], "key::3": ["advanced","superiore","supérieur","supérieure","supérieurs","supérieures","avancado","avancados","fortgeschrittene","fortgeschritten","zaawansowany","передовой","gevorderd","gevorderde","προχωρημένος","προχωρημένη","προχωρημένο","προχωρημένες","προχωρημένα","wyzsza"], "key::4": ["institute","istituto","institut","instituto","instituto","Institut","instytut","институт","instituut","ινστιτούτο"], From 16c670a5d5dd2bff134b7ef051472e7c270db497 Mon Sep 17 00:00:00 2001 From: "sandro.labruzzo" Date: Thu, 5 Dec 2019 14:14:25 +0100 Subject: [PATCH 113/449] Improved deduplication --- dnet-pace-core/pom.xml | 21 +- .../eu/dnetlib/pace/config/DedupConfig.java | 24 +-- .../eu/dnetlib/pace/config/PaceConfig.java | 3 +- .../java/eu/dnetlib/pace/config/WfConfig.java | 23 ++- .../pace/distance/eval/ScoreResult.java | 3 +- .../eu/dnetlib/pace/model/ClusteringDef.java | 14 +- .../java/eu/dnetlib/pace/model/CondDef.java | 3 +- .../java/eu/dnetlib/pace/model/FieldConf.java | 3 +- .../eu/dnetlib/pace/util/BlockProcessor.java | 12 ++ .../eu/dnetlib/pace/util/MapDocumentUtil.java | 188 ++++++++++++++++++ .../eu/dnetlib/pace/config/ConfigTest.java | 78 +++++++- .../eu/dnetlib/pace/config/result.json | 1 + .../dnetlib/pace/config/result.pace.conf.json | 12 +- .../pace/config/result.pace.conf_jpath.json | 55 +++++ 14 files changed, 392 insertions(+), 48 deletions(-) create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java create mode 100644 dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/result.json create mode 100644 dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/result.pace.conf_jpath.json diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 1235dcef7..7c9c70797 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 3.0.16-SNAPSHOT + 4.0.0-SNAPSHOT ../pom.xml @@ -38,10 +38,6 @@ commons-collections commons-collections - - com.googlecode.protobuf-java-format - protobuf-java-format - org.antlr stringtemplate @@ -65,16 +61,23 @@ jackson-databind - - org.codehaus.jackson - jackson-mapper-asl - + org.apache.commons commons-math3 + + com.jayway.jsonpath + json-path + + + + com.arakelian + java-jq + + diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java index f252414dd..1d4172efe 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java @@ -1,25 +1,23 @@ package eu.dnetlib.pace.config; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.collect.Maps; +import eu.dnetlib.pace.condition.ConditionAlgo; +import eu.dnetlib.pace.model.ClusteringDef; +import eu.dnetlib.pace.model.FieldDef; +import eu.dnetlib.pace.util.PaceException; +import org.antlr.stringtemplate.StringTemplate; +import org.apache.commons.io.IOUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + import java.io.IOException; import java.io.Serializable; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; -import java.util.function.BiFunction; -import eu.dnetlib.pace.util.PaceException; -import org.antlr.stringtemplate.StringTemplate; -import org.apache.commons.io.IOUtils; - -import com.google.common.collect.Maps; - -import eu.dnetlib.pace.condition.ConditionAlgo; -import eu.dnetlib.pace.model.ClusteringDef; -import eu.dnetlib.pace.model.FieldDef; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.codehaus.jackson.map.ObjectMapper; public class DedupConfig implements Config, Serializable { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java index 56995bb6a..993bfc23c 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java @@ -1,15 +1,14 @@ package eu.dnetlib.pace.config; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.google.common.collect.Lists; import com.google.common.collect.Maps; -import eu.dnetlib.pace.common.AbstractPaceFunctions; import eu.dnetlib.pace.condition.ConditionAlgo; import eu.dnetlib.pace.model.ClusteringDef; import eu.dnetlib.pace.model.CondDef; import eu.dnetlib.pace.model.FieldDef; import eu.dnetlib.pace.util.PaceResolver; import org.apache.commons.collections.CollectionUtils; -import org.codehaus.jackson.annotate.JsonIgnore; import java.io.Serializable; import java.text.Normalizer; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/WfConfig.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/WfConfig.java index ddcfaaece..d74255f51 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/WfConfig.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/WfConfig.java @@ -1,17 +1,17 @@ package eu.dnetlib.pace.config; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; +import eu.dnetlib.pace.util.PaceException; +import org.apache.commons.lang.StringUtils; + import java.io.IOException; import java.io.Serializable; import java.util.HashSet; import java.util.List; import java.util.Set; -import com.google.common.collect.Lists; -import com.google.common.collect.Sets; -import com.google.gson.GsonBuilder; -import eu.dnetlib.pace.util.PaceException; -import org.apache.commons.lang.StringUtils; -import org.codehaus.jackson.map.ObjectMapper; public class WfConfig implements Serializable { @@ -76,6 +76,9 @@ public class WfConfig implements Serializable { /** Maximum number of allowed children. */ private int maxChildren = MAX_CHILDREN; + /** The Jquery path to retrieve the identifier */ + private String idPath = ".id"; + public WfConfig() {} /** @@ -245,6 +248,14 @@ public class WfConfig implements Serializable { this.maxChildren = maxChildren; } + public String getIdPath() { + return idPath; + } + + public void setIdPath(String idPath) { + this.idPath = idPath; + } + /* * (non-Javadoc) * diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/ScoreResult.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/ScoreResult.java index 62b7d85b4..d1cf7ea42 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/ScoreResult.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/distance/eval/ScoreResult.java @@ -1,7 +1,8 @@ package eu.dnetlib.pace.distance.eval; +import com.fasterxml.jackson.databind.ObjectMapper; import eu.dnetlib.pace.util.PaceException; -import org.codehaus.jackson.map.ObjectMapper; + import java.io.IOException; import java.io.Serializable; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java index d2dab04cd..c15885ecf 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java @@ -1,19 +1,15 @@ package eu.dnetlib.pace.model; +import com.fasterxml.jackson.databind.ObjectMapper; +import eu.dnetlib.pace.clustering.ClusteringFunction; +import eu.dnetlib.pace.config.PaceConfig; +import eu.dnetlib.pace.util.PaceException; + import java.io.IOException; import java.io.Serializable; -import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Map; -import eu.dnetlib.pace.clustering.*; -import eu.dnetlib.pace.config.PaceConfig; -import eu.dnetlib.pace.util.PaceException; -import eu.dnetlib.pace.util.PaceResolver; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.codehaus.jackson.map.ObjectMapper; public class ClusteringDef implements Serializable { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/CondDef.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/CondDef.java index 620984f08..2c047f3ac 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/CondDef.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/CondDef.java @@ -4,11 +4,12 @@ import java.io.IOException; import java.io.Serializable; import java.util.List; +import com.fasterxml.jackson.databind.ObjectMapper; import eu.dnetlib.pace.condition.*; import eu.dnetlib.pace.config.PaceConfig; import eu.dnetlib.pace.util.PaceException; import eu.dnetlib.pace.util.PaceResolver; -import org.codehaus.jackson.map.ObjectMapper; + public class CondDef implements Serializable { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldConf.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldConf.java index 710bf10f8..5da1d0e6b 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldConf.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldConf.java @@ -1,7 +1,8 @@ package eu.dnetlib.pace.model; +import com.fasterxml.jackson.databind.ObjectMapper; import eu.dnetlib.pace.util.PaceException; -import org.codehaus.jackson.map.ObjectMapper; + import java.io.IOException; import java.io.Serializable; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java index 01da9c227..3170fa63f 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java @@ -36,6 +36,18 @@ public class BlockProcessor { this.dedupConf = dedupConf; } + + public void processSortedBlock(final String key, final List documents, final Reporter context) { + if (documents.size() > 1) { +// log.info("reducing key: '" + key + "' records: " + q.size()); + //process(q, context); + process(prepare(documents), context); + + } else { + context.incrementCounter(dedupConf.getWf().getEntityType(), "records per hash key = 1", 1); + } + } + public void process(final String key, final Iterable documents, final Reporter context) { final Queue q = prepare(documents); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java new file mode 100644 index 000000000..4fbb87ee0 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java @@ -0,0 +1,188 @@ +package eu.dnetlib.pace.util; + +import com.arakelian.jq.ImmutableJqLibrary; +import com.arakelian.jq.ImmutableJqRequest; +import com.arakelian.jq.JqLibrary; +import com.arakelian.jq.JqResponse; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.jayway.jsonpath.JsonPath; +import eu.dnetlib.pace.config.DedupConfig; +import eu.dnetlib.pace.config.Type; +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.FieldListImpl; +import eu.dnetlib.pace.model.FieldValueImpl; +import eu.dnetlib.pace.model.MapDocument; +import net.minidev.json.JSONArray; +import org.apache.commons.lang.StringUtils; + +import java.io.IOException; +import java.util.*; +import java.util.function.Predicate; +import java.util.stream.Collectors; + +public class MapDocumentUtil { + + private static final JqLibrary library = ImmutableJqLibrary.of(); + private static final ObjectMapper mapper = new ObjectMapper(); + public static final String URL_REGEX = "^(http|https|ftp)\\://.*"; + public static Predicate urlFilter = s -> s.trim().matches(URL_REGEX); + + public static MapDocument asMapDocument(DedupConfig conf, final String json) { + + MapDocument m = new MapDocument(); + + final ImmutableJqRequest.Builder requestBuilder = ImmutableJqRequest.builder() // + .lib(library) // + .input(json); + m.setIdentifier(getStringValue(conf.getWf().getIdPath(), requestBuilder)); + Map stringField = new HashMap<>(); + conf.getPace().getModel().forEach(fdef -> { + switch (fdef.getType()) { + case String: + case Int: + + stringField.put(fdef.getName(), new FieldValueImpl(fdef.getType(), fdef.getName(), getStringValue(fdef.getPath(), requestBuilder))); + break; + case URL: + String uv = getStringValue(fdef.getPath(), requestBuilder); + if (!urlFilter.test(uv)) uv = ""; + stringField.put(fdef.getName(), new FieldValueImpl(fdef.getType(), fdef.getName(), uv)); + break; + case List: + case JSON: + FieldListImpl fi = new FieldListImpl(fdef.getName(), fdef.getType()); + getListValue(fdef.getPath(), requestBuilder) + .stream() + .map(item -> new FieldValueImpl(fdef.getType(), fdef.getName(), item)) + .forEach(fi::add); + stringField.put(fdef.getName(), fi); + break; + } + }); + m.setFieldMap(stringField); + return m; + } + + public static MapDocument asMapDocumentWithJPath(DedupConfig conf, final String json) { + MapDocument m = new MapDocument(); + + m.setIdentifier(getJPathString(conf.getWf().getIdPath(), json)); + + Map stringField = new HashMap<>(); + conf.getPace().getModel().forEach(fdef -> { + switch (fdef.getType()) { + case String: + case Int: + stringField.put(fdef.getName(), new FieldValueImpl(fdef.getType(), fdef.getName(), getJPathString(fdef.getPath(), json))); + break; + case URL: + String uv = getJPathString(fdef.getPath(), json); + if (!urlFilter.test(uv)) uv = ""; + stringField.put(fdef.getName(), new FieldValueImpl(fdef.getType(), fdef.getName(), uv)); + break; + case List: + case JSON: + FieldListImpl fi = new FieldListImpl(fdef.getName(), fdef.getType()); + getJPathList(fdef.getPath(), json, fdef.getType()) + .stream() + .map(item -> new FieldValueImpl(fdef.getType(), fdef.getName(), item)) + .forEach(fi::add); + stringField.put(fdef.getName(), fi); + break; + } + }); + m.setFieldMap(stringField); + return m; + } + + private static List getJPathList(String path, String json, Type type) { + if (type == Type.List) + return JsonPath.read(json, path); + Object jresult; + List result = new ArrayList<>(); + try { + jresult = JsonPath.read(json, path); + } catch (Throwable e) { + return result; + } + if (jresult instanceof JSONArray) { + + ((JSONArray) jresult).forEach(it -> { + + try { + result.add(new ObjectMapper().writeValueAsString(it)); + } catch (JsonProcessingException e) { + + } + } + ); + return result; + } + + if (jresult instanceof LinkedHashMap) { + try { + result.add(new ObjectMapper().writeValueAsString(jresult)); + } catch (JsonProcessingException e) { + + } + return result; + } + if (jresult instanceof String) { + result.add((String) jresult); + } + return result; + } + + + private static String getJPathString(final String jsonPath, final String json) { + Object o = JsonPath.read(json, jsonPath); + + if (o instanceof String) + return (String)o; + if (o instanceof JSONArray && ((JSONArray)o).size()>0) + return (String)((JSONArray)o).get(0); + return ""; + } + + private static String getStringValue(final String jqPath, final ImmutableJqRequest.Builder requestBuilder) { + final JqResponse response = requestBuilder + .filter(jqPath) + .build() + .execute(); + String output = response.getOutput(); + if (StringUtils.isNotBlank(output)) { + output = output.replaceAll("\"", ""); + } + return output; + + } + + private static List getListValue(final String jqPath, final ImmutableJqRequest.Builder requestBuilder) { + + + final JqResponse response = requestBuilder + .filter(jqPath) + .build() + .execute(); +// if (response.hasErrors()) +// throw new PaceException(String.format("Error on getting jqPath, xpath:%s, error : %s", jqPath, response.getErrors().toString())); + + List result = new ArrayList<>(); + + final JsonNode root; + try { + root = mapper.readTree(response.getOutput()); + } catch (IOException e) { + throw new PaceException("Error on parsing json", e); + } + final Iterator elements = root.elements(); + while (elements.hasNext()) { + result.add(elements.next().toString()); + } + return result; + } + + +} diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java index 9051049fb..44f9a7e02 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java @@ -1,11 +1,21 @@ package eu.dnetlib.pace.config; +import com.arakelian.jq.*; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; import eu.dnetlib.pace.AbstractPaceTest; +import eu.dnetlib.pace.model.FieldList; +import eu.dnetlib.pace.model.FieldListImpl; +import eu.dnetlib.pace.model.MapDocument; +import eu.dnetlib.pace.util.MapDocumentUtil; +import org.apache.commons.io.IOUtils; + import org.junit.Test; +import java.util.Iterator; + import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; public class ConfigTest extends AbstractPaceTest { @@ -54,4 +64,70 @@ public class ConfigTest extends AbstractPaceTest { assertEquals(0, load.getPace().translationMap().keySet().size()); } + + @Test + public void testAsMapDocument() throws Exception { + + DedupConfig load = DedupConfig.load(readFromClasspath("result.pace.conf.json")); + + + System.out.println(load.getWf().getIdPath()); + + final String result =IOUtils.toString(this.getClass().getResourceAsStream("result.json")); + + System.out.println(result); + final MapDocument mapDocument = MapDocumentUtil.asMapDocument(load, result); + + System.out.println(mapDocument.getFieldMap().get("dateofacceptance").stringValue()); + + } + + + @Test + public void testAsMapDocumentJPath() throws Exception { + + DedupConfig load = DedupConfig.load(readFromClasspath("result.pace.conf_jpath.json")); + + + System.out.println(load.getWf().getIdPath()); + + final String result =IOUtils.toString(this.getClass().getResourceAsStream("result.json")); + + System.out.println(result); + final MapDocument mapDocument = MapDocumentUtil.asMapDocumentWithJPath(load, result); + + System.out.println(mapDocument.getFieldMap()); + + } + + + @Test + public void testJQ() throws Exception { + final String result =IOUtils.toString(this.getClass().getResourceAsStream("result.json")); + System.out.println(result); + final JqLibrary library = ImmutableJqLibrary.of(); + final JqRequest request = ImmutableJqRequest.builder() // + .lib(library) // + .input(result) // + .filter("[.entity.result.metadata.author[]]") // + .build(); + final JqResponse response = request.execute(); + ObjectMapper mapper = new ObjectMapper(); + final String output = response.getOutput(); + System.out.println(output); + final JsonNode root = mapper.readTree(output); + + System.out.println("root"+root); + + final Iterator elements = root.elements(); + while (elements.hasNext()){ + System.out.println(elements.next().toString()); + } + + + + } + + + } diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/result.json b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/result.json new file mode 100644 index 000000000..a24be241f --- /dev/null +++ b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/result.json @@ -0,0 +1 @@ +{"kind": "entity","entity": {"type": "result","result": {"metadata": {"subject": [{"value": "open access","qualifier": {"classid": "keyword","classname": "keyword","schemeid": "dnet:subject_classification_typologies","schemename": "dnet:subject_classification_typologies"}},{"value": "infrastructure","qualifier": {"classid": "keyword","classname": "keyword","schemeid": "dnet:subject_classification_typologies","schemename": "dnet:subject_classification_typologies"}},{"value": "data model","qualifier": {"classid": "keyword","classname": "keyword","schemeid": "dnet:subject_classification_typologies","schemename": "dnet:subject_classification_typologies"}},{"value": "CERIF","qualifier": {"classid": "keyword","classname": "keyword","schemeid": "dnet:subject_classification_typologies","schemename": "dnet:subject_classification_typologies"}},{"value": "DataCite","qualifier": {"classid": "keyword","classname": "keyword","schemeid": "dnet:subject_classification_typologies","schemename": "dnet:subject_classification_typologies"}}],"title": [{"value": "The Data Model of the OpenAIRE Scientific Communication e-Infrastructure","qualifier": {"classid": "main title","classname": "main title","schemeid": "dnet:dataCite_title","schemename": "dnet:dataCite_title"}}],"dateofacceptance": {"value": "2012-11-30"},"publisher": {"value": ""},"resulttype": {"classid": "publication","classname": "publication","schemeid": "dnet:result_typologies","schemename": "dnet:result_typologies"},"storagedate": {"value": "2012-11-30"},"resourcetype": {"classid": "0017","classname": "Report","schemeid": "dnet:dataCite_resource","schemename": "dnet:dataCite_resource"},"size": {"value": ""},"version": {"value": ""},"description": [{"value": "The OpenAIREplus project aims to further develop and operate the OpenAIRE e-infrastructure, in order to provide a central entry point to Open Access and \\tnon-Open Access publications and datasets funded by the European Commission and National agencies. The infrastructure provides the services to populate, curate, and enrich an Information Space by collecting metadata descriptions relative to organizations, data sources, projects, funding programmes, persons, publications, and datasets. Stakeholders in the research process and\\t\\t\\t\\tscientific communication, such as researchers, funding agencies, organizations nvolved in projects, project coordinators, can here find the information to improve their research and statistics to measure the impact of Open Access and funding schemes over research. In this paper, we introduce the functional requirements to be satisfied and describe the OpenAIREplus data model entities and relationships required to represent information capable of meeting them."}],"license": [{"value": ""}],"author": [{"fullname": "Manghi, Paolo","name": "Paolo","surname": "Manghi","rank": 1},{"fullname": "Houssos, Nikos","name": "Nikos","surname": "Houssos","rank": 2,"pid": [{"key": "ORCID","value": "0000-0002-3748-8359"}]},{"fullname": "Mikulicic, Marko","name": "Marko","surname": "Mikulicic","rank": 3},{"fullname": "Jf6rg, Brigitte","name": "Brigitte","surname": "Jo\u0308rg","rank": 4}]},"instance": [{"accessright": {"classid": "OPEN","classname": "Open Access","schemeid": "dnet:access_modes","schemename": "dnet:access_modes"},"instancetype": {"classid": "0017","classname": "Report","schemeid": "dnet:dataCite_resource","schemename": "dnet:dataCite_resource"},"hostedby": {"key": "10|4ScienceCRIS::f66f1bd369679b5b077dcdf006089556","value": "4Science-DSpace-CRIS-Test"},"license": {"value": ""},"url": ["http://dx.doi.org/10.1007/978-3-642-35233-1_18"],"collectedfrom": {"key": "10|4ScienceCRIS::f66f1bd369679b5b077dcdf006089556","value": "4Science-DSpace-CRIS-Test"},"dateofacceptance": {"value": "2012-11-30"},"distributionlocation": ""}]},"originalId": ["123456789/7","10.1007/978-3-642-35233-1_18"],"collectedfrom": [{"key": "10|4ScienceCRIS::f66f1bd369679b5b077dcdf006089556","value": "4Science-DSpace-CRIS-Test"}],"pid": [{"value": "123456789/7","qualifier": {"classid": "handle","classname": "handle","schemeid": "dnet:pid_types","schemename": "dnet:pid_types"}},{"value": "10.1007/978-3-642-35233-1_18","qualifier": {"classid": "doi","classname": "doi","schemeid": "dnet:pid_types","schemename": "dnet:pid_types"}}],"dateofcollection": "2019-11-05T10:07:42.263Z","id": "50|4ScienceCRIS::6a67ed3daba1c380bf9de3c13ed9c879","dateoftransformation": "2019-11-06T17:11:47.505Z","oaiprovenance": {"originDescription": {"harvestDate": "2019-11-05T10:07:42.263Z","altered": true,"baseURL": "https%3A%2F%2Fdspace-cris.4science.cloud%2Foai%2Fopenairecris","identifier": "oai:dspace-cris.4science.cloud:Publications/123456789/7","datestamp": "2019-09-05T21:52:21Z","metadataNamespace": ""}}},"dataInfo": {"inferred": false,"deletedbyinference": false,"trust": "0.9","inferenceprovenance": "","provenanceaction": {"classid": "sysimport:crosswalk:datasetarchive","classname": "sysimport:crosswalk:datasetarchive","schemeid": "dnet:provenanceActions","schemename": "dnet:provenanceActions"},"invisible": false}} \ No newline at end of file diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/result.pace.conf.json b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/result.pace.conf.json index 786424a34..acb5b3c7c 100644 --- a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/result.pace.conf.json +++ b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/result.pace.conf.json @@ -7,6 +7,7 @@ "queueMaxSize" : "2000", "groupMaxSize" : "10", "slidingWindowSize" : "200", + "idPath": ".entity.id", "rootBuilder" : [ "result" ], "includeChildren" : "true" }, @@ -25,10 +26,10 @@ { "name" : "sizeMatch", "fields" : [ "authors" ] } ], "model" : [ - { "name" : "pid", "algo" : "Null", "type" : "String", "weight" : "0.0", "ignoreMissing" : "true", "path" : "pid[qualifier#classid = {doi}]/value", "overrideMatch" : "true" }, - { "name" : "title", "algo" : "JaroWinkler", "type" : "String", "weight" : "1.0", "ignoreMissing" : "false", "path" : "result/metadata/title[qualifier#classid = {main title}]/value" }, - { "name" : "dateofacceptance", "algo" : "Null", "type" : "String", "weight" : "0.0", "ignoreMissing" : "true", "path" : "result/metadata/dateofacceptance/value" } , - { "name" : "authors", "algo" : "Null", "type" : "List", "weight" : "0.0", "ignoreMissing" : "true", "path" : "result/author/metadata/fullname/value" } + { "name" : "pid", "algo" : "Null", "type" : "JSON", "weight" : "0.0", "ignoreMissing" : "true", "path" : ".entity.pid", "overrideMatch" : "true" }, + { "name" : "title", "algo" : "JaroWinkler", "type" : "String", "weight" : "1.0", "ignoreMissing" : "false", "path" : ".entity.result.metadata.title[] | select(.qualifier.classid==\"main title\") | .value" }, + { "name" : "dateofacceptance", "algo" : "Null", "type" : "String", "weight" : "0.0", "ignoreMissing" : "true", "path" : ".entity.result.metadata.dateofacceptance.value" } , + { "name" : "authors", "algo" : "Null", "type" : "List", "weight" : "0.0", "ignoreMissing" : "true", "path" : "[.entity.result.metadata.author[].fullname]" } ], "blacklists" : { "title" : [ @@ -47,7 +48,8 @@ "^(WHP Cruise Summary Information of section).*$", "^(Measurement of the top quark\\-pair production cross section with ATLAS in pp collisions at).*$", "^(Measurement of the spin\\-dependent structure function).*" - ] } + ] } , + "synonyms": {} } } diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/result.pace.conf_jpath.json b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/result.pace.conf_jpath.json new file mode 100644 index 000000000..740af7f0f --- /dev/null +++ b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/result.pace.conf_jpath.json @@ -0,0 +1,55 @@ +{ + "wf" : { + "threshold" : "0.99", + "dedupRun" : "001", + "entityType" : "result", + "orderField" : "title", + "queueMaxSize" : "2000", + "groupMaxSize" : "10", + "slidingWindowSize" : "200", + "idPath": "$.entity.id", + "rootBuilder" : [ "result" ], + "includeChildren" : "true" + }, + "pace" : { + "clustering" : [ + { "name" : "acronyms", "fields" : [ "title" ], "params" : { "max" : "1", "minLen" : "2", "maxLen" : "4"} }, + { "name" : "ngrampairs", "fields" : [ "title" ], "params" : { "max" : "1", "ngramLen" : "3"} }, + { "name" : "suffixprefix", "fields" : [ "title" ], "params" : { "max" : "1", "len" : "3" } } + ], + "strictConditions" : [ + { "name" : "exactMatch", "fields" : [ "pid" ] } + ], + "conditions" : [ + { "name" : "yearMatch", "fields" : [ "dateofacceptance" ] }, + { "name" : "titleVersionMatch", "fields" : [ "title" ] }, + { "name" : "sizeMatch", "fields" : [ "authors" ] } + ], + "model" : [ + { "name" : "pid", "algo" : "Null", "type" : "JSON", "weight" : "0.0", "ignoreMissing" : "true", "path" : "$.entity.pid", "overrideMatch" : "true" }, + { "name" : "dateofacceptance", "algo" : "Null", "type" : "String", "weight" : "0.0", "ignoreMissing" : "true", "path" : "$.entity.result.metadata.dateofacceptance.value", "overrideMatch" : "true" }, + { "name" : "title", "algo" : "JaroWinkler", "type" : "String", "weight" : "1.0", "ignoreMissing" : "false", "path" : "$.entity.result.metadata.title[?(@.qualifier.classid ==\"main title\")].value" }, + { "name" : "authors", "algo" : "Null", "type" : "List", "weight" : "0.0", "ignoreMissing" : "true", "path" : "$.entity.result.metadata.author[*].fullname" } + ], + "blacklists" : { + "title" : [ + "^(Corpus Oral Dialectal \\(COD\\)\\.).*$", + "^(Kiri Karl Morgensternile).*$", + "^(\\[Eksliibris Aleksandr).*\\]$", + "^(\\[Eksliibris Aleksandr).*$", + "^(Eksliibris Aleksandr).*$", + "^(Kiri A\\. de Vignolles).*$", + "^(2 kirja Karl Morgensternile).*$", + "^(Pirita kloostri idaosa arheoloogilised).*$", + "^(Kiri tundmatule).*$", + "^(Kiri Jenaer Allgemeine Literaturzeitung toimetusele).*$", + "^(Eksliibris Nikolai Birukovile).*$", + "^(Eksliibris Nikolai Issakovile).*$", + "^(WHP Cruise Summary Information of section).*$", + "^(Measurement of the top quark\\-pair production cross section with ATLAS in pp collisions at).*$", + "^(Measurement of the spin\\-dependent structure function).*" + ] } , + "synonyms": {} + } + +} From 35008fdbf93a92027626683710974bbd39095d28 Mon Sep 17 00:00:00 2001 From: "sandro.labruzzo" Date: Fri, 6 Dec 2019 15:28:30 +0100 Subject: [PATCH 114/449] fix stuff --- .../src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java index 4fbb87ee0..27c75ddb0 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java @@ -97,7 +97,7 @@ public class MapDocumentUtil { return m; } - private static List getJPathList(String path, String json, Type type) { + public static List getJPathList(String path, String json, Type type) { if (type == Type.List) return JsonPath.read(json, path); Object jresult; @@ -136,7 +136,7 @@ public class MapDocumentUtil { } - private static String getJPathString(final String jsonPath, final String json) { + public static String getJPathString(final String jsonPath, final String json) { Object o = JsonPath.read(json, jsonPath); if (o instanceof String) From 84aaa655017149ea2bcbfd1330b2fe2a60ac46e9 Mon Sep 17 00:00:00 2001 From: miconis Date: Tue, 17 Dec 2019 09:16:26 +0100 Subject: [PATCH 115/449] implementation of new json comparator and update of the publication configuration --- .../eu/dnetlib/pace/model/adaptor/Pid.java | 57 --- .../pace/model/adaptor/PidOafSerialiser.java | 50 --- .../eu/dnetlib/pace/tree/JsonListMatch.java | 70 ++++ .../java/eu/dnetlib/pace/tree/PidMatch.java | 64 --- .../eu/dnetlib/pace/tree/StringListMatch.java | 47 +++ .../eu/dnetlib/pace/util/MapDocumentUtil.java | 4 +- .../clustering/ClusteringFunctionTest.java | 11 +- .../pace/comparators/ComparatorTest.java | 7 +- .../eu/dnetlib/pace/config/ConfigTest.java | 39 +- .../PersonComparatorUtilsNGramsTest.java | 126 ------ .../PersonComparatorUtilsSimilarityTest.java | 89 ---- .../eu/dnetlib/pace/model/PersonTest.java | 111 ----- .../eu/dnetlib/pace/clustering/gt.author.json | 1 - ...nt.conf => organization.current.conf.json} | 81 +++- ...onf => organization.no_synonyms.conf.json} | 10 +- .../pace/config/publication.current.conf.json | 387 ++++++++++++++++++ .../config/{result.json => publication.json} | 0 .../pace/config/result.pace.conf_jpath.json | 48 --- .../eu/dnetlib/pace/config/result.test.conf | 51 --- 19 files changed, 606 insertions(+), 647 deletions(-) delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/adaptor/Pid.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/adaptor/PidOafSerialiser.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JsonListMatch.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/PidMatch.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/StringListMatch.java delete mode 100644 dnet-pace-core/src/test/java/eu/dnetlib/pace/model/PersonComparatorUtilsNGramsTest.java delete mode 100644 dnet-pace-core/src/test/java/eu/dnetlib/pace/model/PersonComparatorUtilsSimilarityTest.java delete mode 100644 dnet-pace-core/src/test/java/eu/dnetlib/pace/model/PersonTest.java delete mode 100644 dnet-pace-core/src/test/resources/eu/dnetlib/pace/clustering/gt.author.json rename dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/{organization.current.conf => organization.current.conf.json} (91%) rename dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/{organization.no_synonyms.conf => organization.no_synonyms.conf.json} (82%) create mode 100644 dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/publication.current.conf.json rename dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/{result.json => publication.json} (100%) delete mode 100644 dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/result.pace.conf_jpath.json delete mode 100644 dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/result.test.conf diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/adaptor/Pid.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/adaptor/Pid.java deleted file mode 100644 index 3dd70f7a3..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/adaptor/Pid.java +++ /dev/null @@ -1,57 +0,0 @@ -package eu.dnetlib.pace.model.adaptor; - -import java.util.List; - -import com.google.common.base.Function; -import com.google.common.collect.Iterables; -import com.google.common.collect.Lists; -import com.google.common.reflect.TypeToken; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -/** - * Created by claudio on 01/03/16. - */ -public class Pid { - - private static final Log log = LogFactory.getLog(Pid.class); - - private String value; - - private String type; - - public static List fromOafJson(final List json) { - - log.debug(String.format("\nPid: %s", json)); - - final GsonBuilder gb = new GsonBuilder(); - gb.registerTypeAdapter(Pid.class, new PidOafSerialiser()); - final Gson gson = gb.create(); - - return Lists.newArrayList(Iterables.transform(json, new Function() { - @Override - public Pid apply(final String s) { - return gson.fromJson(s, Pid.class); - } - })); - } - - public String getType() { - return type; - } - - public void setType(final String type) { - this.type = type; - } - - public String getValue() { - return value; - } - - public void setValue(final String value) { - this.value = value; - } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/adaptor/PidOafSerialiser.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/adaptor/PidOafSerialiser.java deleted file mode 100644 index 8acaee673..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/adaptor/PidOafSerialiser.java +++ /dev/null @@ -1,50 +0,0 @@ -package eu.dnetlib.pace.model.adaptor; - -import java.lang.reflect.Type; -import java.util.List; - -import com.google.common.collect.Lists; -import com.google.gson.*; -import eu.dnetlib.pace.model.gt.GTAuthor; - -/** - * Created by claudio on 01/03/16. - */ -public class PidOafSerialiser implements JsonDeserializer { - - private static final String VALUE = "value"; - - private static final String QUALIFIER = "qualifier"; - private static final String CLASSID = "classid"; - - @Override - public Pid deserialize(final JsonElement json, final Type typeOfT, final JsonDeserializationContext context) throws JsonParseException { - - final Pid pid = new Pid(); - - pid.setType(getType(json)); - pid.setValue(getValue(json)); - - return pid; - } - - private String getValue(final JsonElement json) { - final JsonObject obj =json.getAsJsonObject(); - return obj.get(VALUE).getAsString(); - - } - - private String getType(final JsonElement json) { - - final JsonObject obj =json.getAsJsonObject(); - - if (!obj.has(QUALIFIER)) - throw new IllegalArgumentException("pid does not contain any type: " + json.toString()); - - final JsonObject qualifier = obj.getAsJsonObject(QUALIFIER); - - final JsonElement classid = qualifier.get(CLASSID); - - return classid.getAsString(); - } -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JsonListMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JsonListMatch.java new file mode 100644 index 000000000..166151db0 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JsonListMatch.java @@ -0,0 +1,70 @@ +package eu.dnetlib.pace.tree; + +import com.google.common.collect.Sets; +import eu.dnetlib.pace.config.Config; +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.FieldList; +import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.ComparatorClass; +import eu.dnetlib.pace.util.MapDocumentUtil; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +@ComparatorClass("jsonListMatch") +public class JsonListMatch extends AbstractComparator { + + private static final Log log = LogFactory.getLog(JsonListMatch.class); + private Map params; + + public JsonListMatch(final Map params) { + super(params); + this.params = params; + } + + @Override + public double compare(final Field a, final Field b, final Config conf) { + + final List sa = ((FieldList) a).stringList(); + final List sb = ((FieldList) b).stringList(); + + if (sa.isEmpty() || sb.isEmpty()) { + return -1; + } + + final Set ca = sa.stream().map(this::toComparableString).collect(Collectors.toSet()); + final Set cb = sb.stream().map(this::toComparableString).collect(Collectors.toSet()); + + int incommon = Sets.intersection(ca, cb).size(); + int simDiff = Sets.symmetricDifference(ca, cb).size(); + + if (incommon + simDiff == 0) { + return 0.0; + } + + return (double)incommon / (incommon + simDiff) > Double.parseDouble(params.getOrDefault("threshold", "0.5")) ? 1 : 0; + + } + + //converts every json into a comparable string basing on parameters + private String toComparableString(String json){ + + StringBuilder st = new StringBuilder(); //to build the string used for comparisons basing on the jpath into parameters + + //for each path in the param list + for (String key: params.keySet().stream().filter(k -> k.contains("jpath")).collect(Collectors.toList())) { + String path = params.get(key); + String value = MapDocumentUtil.getJPathString(path, json); + if (value == null || value.isEmpty()) + value = ""; + st.append( value + "::"); + } + + st.setLength(st.length()-2); + return st.toString(); + } +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/PidMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/PidMatch.java deleted file mode 100644 index 0632e8bf9..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/PidMatch.java +++ /dev/null @@ -1,64 +0,0 @@ -package eu.dnetlib.pace.tree; - -import com.google.common.collect.Sets; -import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.model.FieldList; -import eu.dnetlib.pace.model.adaptor.Pid; -import eu.dnetlib.pace.tree.support.AbstractComparator; -import eu.dnetlib.pace.tree.support.ComparatorClass; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; - -@ComparatorClass("pidMatch") -public class PidMatch extends AbstractComparator { - - private static final Log log = LogFactory.getLog(PidMatch.class); - private Map params; - - public PidMatch(final Map params) { - super(params); - this.params = params; - } - - @Override - public double compare(final Field a, final Field b, final Config conf) { - - final List sa = ((FieldList) a).stringList(); - final List sb = ((FieldList) b).stringList(); - - final List pal = Pid.fromOafJson(sa); - final List pbl = Pid.fromOafJson(sb); - - if (pal.isEmpty() || pbl.isEmpty()) { - return -1; - } - - final Set pidAset = toHashSet(pal); - final Set pidBset = toHashSet(pbl); - - int incommon = Sets.intersection(pidAset, pidBset).size(); - int simDiff = Sets.symmetricDifference(pidAset, pidBset).size(); - - if (incommon + simDiff == 0) { - return 0.0; - } - - return (double)incommon / (incommon + simDiff) > Double.parseDouble(params.getOrDefault("threshold", "0.5")) ? 1 : 0; - - } - - //lowercase + normalization of the pid before adding it to the set - private Set toHashSet(List pbl) { - - return pbl.stream() - .map(pid -> pid.getType() + normalizePid(pid.getValue())) - .collect(Collectors.toCollection(HashSet::new)); - } -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/StringListMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/StringListMatch.java new file mode 100644 index 000000000..f9b53d396 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/StringListMatch.java @@ -0,0 +1,47 @@ +package eu.dnetlib.pace.tree; + +import com.google.common.collect.Sets; +import eu.dnetlib.pace.config.Config; +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.FieldList; +import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.ComparatorClass; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +@ComparatorClass("stringListMatch") +public class StringListMatch extends AbstractComparator { + + private static final Log log = LogFactory.getLog(StringListMatch.class); + private Map params; + + public StringListMatch(final Map params) { + super(params); + this.params = params; + } + + @Override + public double compare(final Field a, final Field b, final Config conf) { + + final Set pa = new HashSet<>(((FieldList) a).stringList()); + final Set pb = new HashSet<>(((FieldList) b).stringList()); + + if (pa.isEmpty() || pb.isEmpty()) { + return -1; //return undefined if one of the two lists of pids is empty + } + + int incommon = Sets.intersection(pa, pb).size(); + int simDiff = Sets.symmetricDifference(pa, pb).size(); + + if (incommon + simDiff == 0) { + return 0.0; + } + + return (double)incommon / (incommon + simDiff) > Double.parseDouble(params.getOrDefault("threshold", "0.5")) ? 1 : 0; + + } +} \ No newline at end of file diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java index 20141738c..c55e13d36 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java @@ -2,7 +2,9 @@ package eu.dnetlib.pace.util; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import com.jayway.jsonpath.Configuration; import com.jayway.jsonpath.JsonPath; +import com.jayway.jsonpath.Option; import eu.dnetlib.pace.config.DedupConfig; import eu.dnetlib.pace.config.Type; import eu.dnetlib.pace.model.Field; @@ -55,7 +57,7 @@ public class MapDocumentUtil { public static List getJPathList(String path, String json, Type type) { if (type == Type.List) - return JsonPath.read(json, path); + return JsonPath.using(Configuration.defaultConfiguration().addOptions(Option.ALWAYS_RETURN_LIST, Option.SUPPRESS_EXCEPTIONS)).parse(json).read(path); Object jresult; List result = new ArrayList<>(); try { diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java index ff7a49fbe..2bccdd5cb 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java @@ -18,7 +18,7 @@ public class ClusteringFunctionTest extends AbstractPaceTest { @Before public void setUp() throws Exception { params = Maps.newHashMap(); - conf = DedupConfig.load(AbstractPaceFunctions.readFromClasspath("/eu/dnetlib/pace/config/organization.current.conf", ClusteringFunctionTest.class)); + conf = DedupConfig.load(AbstractPaceFunctions.readFromClasspath("/eu/dnetlib/pace/config/organization.current.conf.json", ClusteringFunctionTest.class)); } @Test @@ -110,15 +110,6 @@ public class ClusteringFunctionTest extends AbstractPaceTest { System.out.println(sp.apply(conf, Lists.newArrayList(title(s)))); } - @Test - public void testPersonClustering2() { - final ClusteringFunction cf = new PersonClustering(params); - - final String s = readFromClasspath("gt.author.json"); - System.out.println(s); - System.out.println(cf.apply(conf, Lists.newArrayList(person(s)))); - } - @Test public void testKeywordsClustering() { diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java index 905fac4bd..9bd3a44a8 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java @@ -4,7 +4,6 @@ import eu.dnetlib.pace.clustering.NGramUtils; import eu.dnetlib.pace.tree.*; import eu.dnetlib.pace.config.DedupConfig; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import eu.dnetlib.pace.common.AbstractPaceFunctions; @@ -24,7 +23,7 @@ public class ComparatorTest extends AbstractPaceFunctions { public void setup() { params = new HashMap<>(); params.put("weight", "1.0"); - conf = DedupConfig.load(readFromClasspath("/eu/dnetlib/pace/config/organization.current.conf", ComparatorTest.class)); + conf = DedupConfig.load(readFromClasspath("/eu/dnetlib/pace/config/organization.current.conf.json", ComparatorTest.class)); } @@ -115,5 +114,9 @@ public class ComparatorTest extends AbstractPaceFunctions { System.out.println("result = " + result); } + @Test + public void jsonListMatchTest() { + + } } diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java index cd553baad..09d7c0b9b 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java @@ -2,11 +2,15 @@ package eu.dnetlib.pace.config; import eu.dnetlib.pace.AbstractPaceTest; +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.FieldList; import eu.dnetlib.pace.model.MapDocument; +import eu.dnetlib.pace.tree.JsonListMatch; import eu.dnetlib.pace.util.MapDocumentUtil; -import org.apache.commons.io.IOUtils; import org.junit.Test; +import java.util.HashMap; +import java.util.List; import java.util.Map; import static org.junit.Assert.assertEquals; @@ -16,7 +20,7 @@ public class ConfigTest extends AbstractPaceTest { @Test public void dedupConfigSerializationTest() { - final DedupConfig cfgFromClasspath = DedupConfig.load(readFromClasspath("organization.current.conf")); + final DedupConfig cfgFromClasspath = DedupConfig.load(readFromClasspath("organization.current.conf.json")); final String conf = cfgFromClasspath.toString(); @@ -26,13 +30,12 @@ public class ConfigTest extends AbstractPaceTest { assertNotNull(cfgFromClasspath); assertNotNull(cfgFromSerialization); - } @Test public void dedupConfigTest() { - DedupConfig load = DedupConfig.load(readFromClasspath("organization.current.conf")); + DedupConfig load = DedupConfig.load(readFromClasspath("organization.current.conf.json")); System.out.println(load.toString()); } @@ -40,7 +43,7 @@ public class ConfigTest extends AbstractPaceTest { @Test public void initTranslationMapTest() { - DedupConfig load = DedupConfig.load(readFromClasspath("organization.current.conf")); + DedupConfig load = DedupConfig.load(readFromClasspath("organization.current.conf.json")); Map translationMap = load.translationMap(); @@ -50,38 +53,26 @@ public class ConfigTest extends AbstractPaceTest { if (translationMap.get(key).equals("key::1")) System.out.println("key = " + key); } - } @Test public void emptyTranslationMapTest() { - DedupConfig load = DedupConfig.load(readFromClasspath("organization.no_synonyms.conf")); + DedupConfig load = DedupConfig.load(readFromClasspath("organization.no_synonyms.conf.json")); assertEquals(0, load.getPace().translationMap().keySet().size()); } - - @Test - public void testAsMapDocumentJPath() throws Exception { - - DedupConfig load = DedupConfig.load(readFromClasspath("result.pace.conf_jpath.json")); - - - System.out.println(load.getWf().getIdPath()); - - final String result =IOUtils.toString(this.getClass().getResourceAsStream("result.json")); - - System.out.println(result); - final MapDocument mapDocument = MapDocumentUtil.asMapDocumentWithJPath(load, result); - - System.out.println(mapDocument.getFieldMap()); - - } + public void asMapDocumentTest() throws Exception { + DedupConfig dedupConf = DedupConfig.load(readFromClasspath("publication.current.conf.json")); + final String json = readFromClasspath("publication.json"); + final MapDocument mapDocument = MapDocumentUtil.asMapDocumentWithJPath(dedupConf, json); + System.out.println("mapDocument = " + mapDocument.getFieldMap()); + } } diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/model/PersonComparatorUtilsNGramsTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/model/PersonComparatorUtilsNGramsTest.java deleted file mode 100644 index b78866c6c..000000000 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/model/PersonComparatorUtilsNGramsTest.java +++ /dev/null @@ -1,126 +0,0 @@ -package eu.dnetlib.pace.model; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -import java.util.Set; - -import org.junit.Test; - -public class PersonComparatorUtilsNGramsTest { - - @Test - public void testNormaizePerson_1() { - verifyGetNgramsForPerson("Artini Michele", 2, "a_michele", "m_artini"); - } - - @Test - public void testNormaizePerson_2() { - verifyGetNgramsForPerson("Michele Artini", 2, "a_michele", "m_artini"); - } - - @Test - public void testNormaizePerson_3() { - verifyGetNgramsForPerson("Michele ARTINI", 1, "m_artini"); - } - - @Test - public void testNormaizePerson_4() { - verifyGetNgramsForPerson("ARTINI Michele", 1, "m_artini"); - } - - @Test - public void testNormaizePerson_5() { - verifyGetNgramsForPerson("Michele G. Artini", 2, "m_artini", "g_artini"); - } - - @Test - public void testNormaizePerson_6() { - verifyGetNgramsForPerson(" Artini, Michele ", 1, "m_artini"); - } - - @Test - public void testNormaizePerson_7() { - verifyGetNgramsForPerson("Artini, Michele (sig.)", 1, "m_artini"); - } - - @Test - public void testNormaizePerson_8() { - verifyGetNgramsForPerson("Artini Michele [sig.] ", 2, "a_michele", "m_artini"); - } - - @Test - public void testNormaizePerson_9() { - verifyGetNgramsForPerson("Artini, M", 1, "m_artini"); - } - - @Test - public void testNormaizePerson_10() { - verifyGetNgramsForPerson("Artini, M.", 1, "m_artini"); - } - - @Test - public void testNormaizePerson_11() { - verifyGetNgramsForPerson("Artini, M. (sig.)", 1, "m_artini"); - } - - @Test - public void testNormaizePerson_12() { - verifyGetNgramsForPerson("Artini, M[sig.] ", 1, "m_artini"); - } - - @Test - public void testNormaizePerson_13() { - verifyGetNgramsForPerson("Artini-SIG, Michele ", 1, "m_artini-sig"); - } - - @Test - public void testNormaizePerson_14() { - verifyGetNgramsForPerson("Artini - SIG, Michele ", 1, "m_artini-sig"); - } - - @Test - public void testNormaizePerson_15() { - verifyGetNgramsForPerson("Artini {sig.}, M", 1, "m_artini"); - } - - @Test - public void testNormaizePerson_16() { - verifyGetNgramsForPerson("Artini, M., sig.", 1, "m_artini"); - } - - @Test - public void testNormaizePerson_17() { - verifyGetNgramsForPerson("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA, BBBBBBBBBBBBBBBBBBBBBBBBBBBBB CCCCCCCCCCCCCCCCCCCC", 0); - } - - @Test - public void testNormaizePerson_18() { - verifyGetNgramsForPerson("Dell'amico, Andrea", 1, "a_amico"); - } - - @Test - public void testNormaizePerson_19() { - verifyGetNgramsForPerson("Smith, Paul van der", 1, "p_smith"); - } - - @Test - public void testNormaizePerson_20() { - verifyGetNgramsForPerson("AAAAAAA, BBBB, CCCC, DDDD, EEEE", 1, "b_aaaaaaa"); - } - - @Test - public void testNormaizePerson_21() { - verifyGetNgramsForPerson("Kompetenzzentrum Informelle Bildung (KIB),", 6); - } - - private void verifyGetNgramsForPerson(String name, int expectedSize, String... expectedTokens) { - Set list = PersonComparatorUtils.getNgramsForPerson(name); - System.out.println(list); - assertEquals(expectedSize, list.size()); - for (String s : expectedTokens) { - assertTrue(list.contains(s)); - } - } - -} diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/model/PersonComparatorUtilsSimilarityTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/model/PersonComparatorUtilsSimilarityTest.java deleted file mode 100644 index 20da8db87..000000000 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/model/PersonComparatorUtilsSimilarityTest.java +++ /dev/null @@ -1,89 +0,0 @@ -package eu.dnetlib.pace.model; - -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -import org.junit.Test; - -public class PersonComparatorUtilsSimilarityTest { - - @Test - public void testSimilarity_0() { - assertTrue(PersonComparatorUtils.areSimilar("Artini Michele", "Michele Artini")); - } - - @Test - public void testSimilarity_1() { - assertTrue(PersonComparatorUtils.areSimilar("ARTINI Michele", "Artini, Michele")); - } - - @Test - public void testSimilarity_2() { - assertTrue(PersonComparatorUtils.areSimilar("Artini, M.", "Artini Michele")); - } - - @Test - public void testSimilarity_3() { - assertTrue(PersonComparatorUtils.areSimilar("Artini, M.G.", "Artini, Michele")); - } - - @Test - public void testSimilarity_4() { - assertTrue(PersonComparatorUtils.areSimilar("Artini, M.", "Artini, M.G.")); - } - - @Test - public void testSimilarity_5() { - assertTrue(PersonComparatorUtils.areSimilar("Artini, M. (sig.)", "Artini, Michele")); - } - - @Test - public void testSimilarity_6() { - assertFalse(PersonComparatorUtils.areSimilar("Artini, M.", "Artini, G.")); - } - - @Test - public void testSimilarity_7() { - assertFalse(PersonComparatorUtils.areSimilar("Artini, M.G.", "Artini, M.A.")); - } - - @Test - public void testSimilarity_8() { - assertFalse(PersonComparatorUtils.areSimilar("Artini, M.", "Artini, Giuseppe")); - } - - @Test - public void testSimilarity_9() { - assertFalse(PersonComparatorUtils.areSimilar("Manghi, Paolo", "Artini, Michele")); - } - - @Test - public void testSimilarity_10() { - assertTrue(PersonComparatorUtils.areSimilar("Artini, Michele", "Artini, Michele Giovanni")); - } - - @Test - public void testSimilarity_11() { - assertFalse(PersonComparatorUtils.areSimilar("Artini, M.A.G.", "Artini, M.B.G.")); - } - - @Test - public void testSimilarity_12() { - assertFalse(PersonComparatorUtils.areSimilar("Artini Manghi, M.", "Artini, Michele")); - } - - @Test - public void testSimilarity_13() { - assertTrue(PersonComparatorUtils.areSimilar("Artini Manghi, M.", "Artini Manghi Michele")); - } - - @Test - public void testSimilarity_14() { - assertFalse(PersonComparatorUtils.areSimilar("Artini, Michele", "Michele, Artini")); - } - - @Test - public void testSimilarity_15() { - assertTrue(PersonComparatorUtils.areSimilar("Artini, M.", "Michele ARTINI")); - } -} \ No newline at end of file diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/model/PersonTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/model/PersonTest.java deleted file mode 100644 index a457fd8de..000000000 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/model/PersonTest.java +++ /dev/null @@ -1,111 +0,0 @@ -package eu.dnetlib.pace.model; - -import static org.junit.Assert.assertEquals; - -import java.text.Normalizer; -import java.util.Queue; - -import org.junit.Test; - -import com.google.common.collect.Lists; - -public class PersonTest { - - @Test - public void test_1() { - check("Atzori, Claudio", "Atzori, Claudio"); - } - - @Test - public void test_2() { - check("Atzori, Claudio A.", "Atzori, Claudio A."); - } - - @Test - public void test_3() { - check("Claudio ATZORI", "Atzori, Claudio"); - } - - @Test - public void test_4() { - check("ATZORI, Claudio", "Atzori, Claudio"); - } - - @Test - public void test_5() { - check("Claudio Atzori", "Claudio Atzori"); - } - - @Test - public void test_6() { - check(" Manghi , Paolo", "Manghi, Paolo"); - } - - @Test - public void test_7() { - check("ATZORI, CLAUDIO", "Atzori, Claudio"); - } - - @Test - public void test_8() { - check("ATZORI, CLAUDIO A", "Atzori, Claudio A."); - } - - @Test - public void test_9() { - check("Bølviken, B.", "Bølviken, B."); - } - - @Test - public void test_10() { - check("Bñlviken, B.", "B" + Normalizer.normalize("ñ", Normalizer.Form.NFD) + "lviken, B."); - } - - @Test - public void test_11() { - check("aáeéiíoóöőuúüű AÁEÉIÍOÓÖŐUÚÜŰ ø", "Aaeeiioooouuuu, Aaeeiioooouuuu Ø.", true); - } - - @Test - public void test_12() { - check("aáeéiíoóöőuúüű AÁEÉIÍOÓÖŐUÚÜŰz ø", Normalizer.normalize("aáeéiíoóöőuúüű AÁEÉIÍOÓÖŐUÚÜŰz ø", Normalizer.Form.NFD), false); - } - - @Test - public void test_13() { - check("Tkačíková, Daniela", Normalizer.normalize("Tkačíková, Daniela", Normalizer.Form.NFD), false); - } - - @Test - public void test_hashes() { - checkHash(" Claudio ATZORI ", "ATZORI Claudio", "Atzori , Claudio", "ATZORI, Claudio"); - } - - private void checkHash(String... ss) { - Queue q = Lists.newLinkedList(Lists.newArrayList(ss)); - String h1 = new Person(q.remove(), false).hash(); - while (!q.isEmpty()) { - assertEquals(h1, new Person(q.remove(), false).hash()); - } - } - - private void check(String s, String expectedFullName) { - check(s, expectedFullName, false); - } - - private void check(String s, String expectedFullName, boolean aggressive) { - Person p = new Person(s, aggressive); - - System.out.println("original: " + p.getOriginal()); - System.out.println("accurate: " + p.isAccurate()); - System.out.println("normalised: '" + p.getNormalisedFullname() + "'"); - if (p.isAccurate()) { - System.out.println("name: " + p.getNormalisedFirstName()); - System.out.println("surname: " + p.getNormalisedSurname()); - } - System.out.println("hash: " + p.hash()); - System.out.println(""); - assertEquals(expectedFullName, p.getNormalisedFullname()); - } - -} diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/clustering/gt.author.json b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/clustering/gt.author.json deleted file mode 100644 index d7fbf2166..000000000 --- a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/clustering/gt.author.json +++ /dev/null @@ -1 +0,0 @@ -{"metadata": {"firstname": {"value": "Margaret R."},"secondnames": [{"value": "Macdonald"}],"fullname": {"value": "Macdonald, Margaret R."}},"coauthor": [{"id": "30|od________88::1d22c2a22d7a1c7082006154ae6dd221","anchorId": "30|dedup_wf_001::7b1cfb3c4ec57d71cf331ba669a8e12c","metadata": {"firstname": {"value": "Maria Teresa"},"secondnames": [{"value": "Catanese"}],"fullname": {"value": "Catanese, Maria Teresa"}}},{"id": "30|od________88::2299c043fcaa751e266c82ec24b5a6cf","anchorId": "30|dedup_wf_001::ce73dc26c95e27d22f88e9ed9948b322","metadata": {"firstname": {"value": "Thomas S."},"secondnames": [{"value": "Oh"}],"fullname": {"value": "Oh, Thomas S."}}},{"id": "30|od_______908::52d670e6298c055c6c9c496aad4f2913","anchorId": "30|dedup_wf_001::8e1fafd9778a4cb5569830c299e5b52e","metadata": {"firstname": {"value": "Salman R."},"secondnames": [{"value": "Khetani"}],"fullname": {"value": "Khetani, Salman R."}}},{"id": "30|od________88::1458ae8d3663574e53dcd849ff8aa27d","anchorId": "30|dedup_wf_001::dd9f1dce92f402424de0d7d8afd7ca2d","metadata": {"firstname": {"value": "Sangeeta N."},"secondnames": [{"value": "Bhatia"}],"fullname": {"value": "Bhatia, Sangeeta N."}}},{"id": "30|od________88::837b992599e35b1a9baed833bf9a216e","anchorId": "30|dedup_wf_001::acb87ae171fd37f0ad65bcb728b11064","metadata": {"firstname": {"value": "Andrew J."},"secondnames": [{"value": "Syder"}],"fullname": {"value": "Syder, Andrew J."}}},{"id": "30|od_______908::2299c043fcaa751e266c82ec24b5a6cf","anchorId": "30|dedup_wf_001::ce73dc26c95e27d22f88e9ed9948b322","metadata": {"firstname": {"value": "Thomas S."},"secondnames": [{"value": "Oh"}],"fullname": {"value": "Oh, Thomas S."}}},{"id": "30|od_______908::97e1b5f96f76500dfd9e10ee0de5d380","anchorId": "30|dedup_wf_001::da35eb52feb1b1a789861976342b2570","metadata": {"firstname": {"value": "John W."},"secondnames": [{"value": "Schoggins"}],"fullname": {"value": "Schoggins, John W."}}},{"id": "30|od________88::97e1b5f96f76500dfd9e10ee0de5d380","anchorId": "30|dedup_wf_001::da35eb52feb1b1a789861976342b2570","metadata": {"firstname": {"value": "John W."},"secondnames": [{"value": "Schoggins"}],"fullname": {"value": "Schoggins, John W."}}},{"id": "30|od_______908::5bd4cd7e4065ffd73f39817e2a1bb1ae","anchorId": "30|dedup_wf_001::8ea4c1052c6a7aa1bb2b1097cb3893d2","metadata": {"firstname": {"value": "Lok Man J."},"secondnames": [{"value": "Law"}],"fullname": {"value": "Law, Lok Man J."}}},{"id": "30|od________88::845fd19e1e7201fcd1c492775f04a56b","anchorId": "30|dedup_wf_001::4e971919118e71ea2b2ac840ca319956","metadata": {"firstname": {"value": "Alexander"},"secondnames": [{"value": "Ploss"}],"fullname": {"value": "Ploss, Alexander"}}},{"id": "30|od_______908::7b6a37259ff32dba0e7ea884b8446228","anchorId": "30|dedup_wf_001::a600d9103b7947b1c52f823f8e4833cc","metadata": {"firstname": {"value": "Christopher T."},"secondnames": [{"value": "Jones"}],"fullname": {"value": "Jones, Christopher T."}}},{"id": "30|od________88::5bd4cd7e4065ffd73f39817e2a1bb1ae","anchorId": "30|dedup_wf_001::8ea4c1052c6a7aa1bb2b1097cb3893d2","metadata": {"firstname": {"value": "Lok Man J."},"secondnames": [{"value": "Law"}],"fullname": {"value": "Law, Lok Man J."}}},{"id": "30|od_______908::1d22c2a22d7a1c7082006154ae6dd221","anchorId": "30|dedup_wf_001::7b1cfb3c4ec57d71cf331ba669a8e12c","metadata": {"firstname": {"value": "Maria Teresa"},"secondnames": [{"value": "Catanese"}],"fullname": {"value": "Catanese, Maria Teresa"}}},{"id": "30|od________88::52d670e6298c055c6c9c496aad4f2913","anchorId": "30|dedup_wf_001::8e1fafd9778a4cb5569830c299e5b52e","metadata": {"firstname": {"value": "Salman R."},"secondnames": [{"value": "Khetani"}],"fullname": {"value": "Khetani, Salman R."}}},{"id": "30|od_______908::46acd9f206c2559f13b9119f8c5aef4c","anchorId": "30|dedup_wf_001::06a55cf2c97156d48ec49bcaf4bddcaf","metadata": {"firstname": {"value": "Stephen P."},"secondnames": [{"value": "Goff"}],"fullname": {"value": "Goff, Stephen P."}}},{"id": "30|od________88::7b6a37259ff32dba0e7ea884b8446228","anchorId": "30|dedup_wf_001::a600d9103b7947b1c52f823f8e4833cc","metadata": {"firstname": {"value": "Christopher T."},"secondnames": [{"value": "Jones"}],"fullname": {"value": "Jones, Christopher T."}}},{"id": "30|od_______908::1458ae8d3663574e53dcd849ff8aa27d","anchorId": "30|dedup_wf_001::dd9f1dce92f402424de0d7d8afd7ca2d","metadata": {"firstname": {"value": "Sangeeta N."},"secondnames": [{"value": "Bhatia"}],"fullname": {"value": "Bhatia, Sangeeta N."}}},{"id": "30|od_______908::845fd19e1e7201fcd1c492775f04a56b","anchorId": "30|dedup_wf_001::4e971919118e71ea2b2ac840ca319956","metadata": {"firstname": {"value": "Alexander"},"secondnames": [{"value": "Ploss"}],"fullname": {"value": "Ploss, Alexander"}}},{"id": "30|od_______908::837b992599e35b1a9baed833bf9a216e","anchorId": "30|dedup_wf_001::acb87ae171fd37f0ad65bcb728b11064","metadata": {"firstname": {"value": "Andrew J."},"secondnames": [{"value": "Syder"}],"fullname": {"value": "Syder, Andrew J."}}}],"mergedperson": [{"id": "30|od_______908::715fc4c41052a5b8ce881b23b826f648","metadata": {"firstname": {"value": "Margaret R."},"secondnames": [{"value": "Macdonald"}],"fullname": {"value": "Macdonald, Margaret R."}}},{"id": "30|od________88::715fc4c41052a5b8ce881b23b826f648","metadata": {"firstname": {"value": "Margaret R."},"secondnames": [{"value": "Macdonald"}],"fullname": {"value": "Macdonald, Margaret R."}}}],"anchor": true} \ No newline at end of file diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.current.conf b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.current.conf.json similarity index 91% rename from dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.current.conf rename to dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.current.conf.json index f92655f3f..a16ade3d0 100644 --- a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.current.conf +++ b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.current.conf.json @@ -18,16 +18,81 @@ { "name" : "keywordsclustering", "fields" : [ "legalname" ], "params" : { "max": 2, "windowSize": 4} } ], "decisionTree" : { - "start": {"fields": [{"field":"gridid", "comparator":"exactMatch", "weight":1.0, "countIfUndefined":"true", "params": {}}], "threshold":1.0, "aggregation": "MAX", "positive":"MATCH", "negative":"layer2", "undefined":"layer2", "ignoreUndefined": "true"}, - "layer2": {"fields": [{"field":"websiteurl", "comparator":"domainExactMatch", "weight":1.0, "countIfUndefined":"true", "params" : {}}, {"field":"country", "comparator":"exactMatch", "weight":1.0, "countIfUndefined":"false", "params": {}}], "threshold":1.0, "aggregation": "MIN", "positive":"layer3", "negative":"NO_MATCH", "undefined":"layer3", "ignoreUndefined": "false"}, - "layer3": {"fields": [{"field":"legalname", "comparator":"jaroWinklerNormalizedName", "weight":0.9, "countIfUndefined":"false", "params":{"windowSize" : 4, "threshold" : 0.7}}, {"field":"legalshortname", "comparator":"jaroWinklerNormalizedName", "weight":0.1, "countIfUndefined":"true", "params":{}}], "threshold": 0.9, "aggregation": "W_MEAN", "positive":"MATCH", "negative":"NO_MATCH", "undefined":"NO_MATCH", "ignoreUndefined": "true"} + "start": { + "fields": [ + { + "field": "gridid", + "comparator": "exactMatch", + "weight": 1.0, + "countIfUndefined": "true", + "params": {} + } + ], + "threshold": 1.0, + "aggregation": "MAX", + "positive": "MATCH", + "negative": "layer2", + "undefined": "layer2", + "ignoreUndefined": "true" + }, + "layer2": { + "fields": [ + { + "field": "websiteurl", + "comparator": "domainExactMatch", + "weight": 1.0, + "countIfUndefined": "true", + "params": {} + }, + { + "field": "country", + "comparator": "exactMatch", + "weight": 1.0, + "countIfUndefined": "false", + "params": {} + } + ], + "threshold": 1.0, + "aggregation": "MIN", + "positive": "layer3", + "negative": "NO_MATCH", + "undefined": "layer3", + "ignoreUndefined": "false" + }, + "layer3": { + "fields": [ + { + "field": "legalname", + "comparator": "jaroWinklerNormalizedName", + "weight": 0.9, + "countIfUndefined": "false", + "params": { + "windowSize": 4, + "threshold": 0.7 + } + }, + { + "field": "legalshortname", + "comparator": "jaroWinklerNormalizedName", + "weight": 0.1, + "countIfUndefined": "true", + "params": {} + } + ], + "threshold": 0.9, + "aggregation": "W_MEAN", + "positive": "MATCH", + "negative": "NO_MATCH", + "undefined": "NO_MATCH", + "ignoreUndefined": "true" + } }, "model" : [ - { "name" : "country", "type" : "String", "path" : "organization/metadata/country/classid"}, - { "name" : "legalshortname", "type" : "String", "path" : "organization/metadata/legalshortname/value"}, - { "name" : "legalname", "type" : "String", "path" : "organization/metadata/legalname/value" }, - { "name" : "websiteurl", "type" : "URL", "path" : "organization/metadata/websiteurl/value" }, - { "name" : "gridid", "type" : "String", "path" : "pid[qualifier#classid = {grid}]/value"} + { "name" : "country", "type" : "String", "path" : "$.organization.metadata.country.classid"}, + { "name" : "legalshortname", "type" : "String", "path" : "$.organization.metadata.legalshortname.value"}, + { "name" : "legalname", "type" : "String", "path" : "$organization.metadata.legalname.value" }, + { "name" : "websiteurl", "type" : "URL", "path" : "$.organization.metadata.websiteurl.value" }, + { "name" : "gridid", "type" : "String", "path" : "$.pid[?(@.qualifier.classid ==\"grid\")].value"} ], "blacklists" : { "legalname" : [] diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.no_synonyms.conf b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.no_synonyms.conf.json similarity index 82% rename from dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.no_synonyms.conf rename to dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.no_synonyms.conf.json index d79b7758e..80a53c83f 100644 --- a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.no_synonyms.conf +++ b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.no_synonyms.conf.json @@ -23,11 +23,11 @@ "layer3": {"fields": [{"field":"legalname", "comparator":"jaroWinklerNormalizedName", "weight":0.9, "countIfUndefined":"false", "params":{"windowSize" : 4, "threshold" : 0.7}}, {"field":"legalshortname", "comparator":"jaroWinklerNormalizedName", "weight":0.1, "countIfUndefined":"true", "params":{}}], "threshold": 0.9, "aggregation": "W_MEAN", "positive":"MATCH", "negative":"NO_MATCH", "undefined":"NO_MATCH", "ignoreUndefined": "true"} }, "model" : [ - { "name" : "country", "type" : "String", "path" : "organization/metadata/country/classid"}, - { "name" : "legalshortname", "type" : "String", "path" : "organization/metadata/legalshortname/value"}, - { "name" : "legalname", "type" : "String", "path" : "organization/metadata/legalname/value" }, - { "name" : "websiteurl", "type" : "URL", "path" : "organization/metadata/websiteurl/value" }, - { "name" : "gridid", "type" : "String", "path" : "pid[qualifier#classid = {grid}]/value"} + { "name" : "country", "type" : "String", "path" : "$.organization.metadata.country.classid"}, + { "name" : "legalshortname", "type" : "String", "path" : "$.organization.metadata.legalshortname.value"}, + { "name" : "legalname", "type" : "String", "path" : "$organization.metadata.legalname.value" }, + { "name" : "websiteurl", "type" : "URL", "path" : "$.organization.metadata.websiteurl.value" }, + { "name" : "gridid", "type" : "String", "path" : "$.pid[?(@.qualifier.classid ==\"grid\")].value"} ], "blacklists" : { "legalname" : [] diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/publication.current.conf.json b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/publication.current.conf.json new file mode 100644 index 000000000..3dd1830af --- /dev/null +++ b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/publication.current.conf.json @@ -0,0 +1,387 @@ +{ + "wf": { + "threshold": "0.99", + "dedupRun": "001", + "entityType": "result", + "subEntityType": "resulttype", + "subEntityValue": "publication", + "orderField": "title", + "queueMaxSize": "2000", + "groupMaxSize": "100", + "maxChildren": "100", + "slidingWindowSize": "200", + "rootBuilder": [ + "result", + "resultProject_outcome_isProducedBy", + "resultResult_publicationDataset_isRelatedTo", + "resultResult_similarity_isAmongTopNSimilarDocuments", + "resultResult_similarity_hasAmongTopNSimilarDocuments", + "resultOrganization_affiliation_isAffiliatedWith", + "resultResult_part_hasPart", + "resultResult_part_isPartOf", + "resultResult_supplement_isSupplementTo", + "resultResult_supplement_isSupplementedBy", + "resultResult_version_isVersionOf" + ], + "includeChildren": "true", + "maxIterations": 20, + "idPath": "$.entity.id" + }, + "pace": { + "clustering": [ + { + "name": "ngrampairs", + "fields": [ + "title" + ], + "params": { + "max": "1", + "ngramLen": "3" + } + }, + { + "name": "suffixprefix", + "fields": [ + "title" + ], + "params": { + "max": "1", + "len": "3" + } + }, + { + "name": "lowercase", + "fields": [ + "doi" + ], + "params": {} + } + ], + "decisionTree": { + "start": { + "fields": [ + { + "field": "pid", + "comparator": "jsonListMatch", + "weight": 1.0, + "countIfUndefined": "false", + "params": { + "threshold": "0.5", + "jpath_value": "$.value", + "jpath_classid": "$.qualifier.classid" + } + } + ], + "threshold": 1.0, + "aggregation": "MAX", + "positive": "MATCH", + "negative": "layer2", + "undefined": "layer2", + "ignoreUndefined": "true" + }, + "layer2": { + "fields": [ + { + "field": "title", + "comparator": "titleVersionMatch", + "weight": 1.0, + "countIfUndefined": "false", + "params": {} + }, + { + "field": "authors", + "comparator": "sizeMatch", + "weight": 1.0, + "countIfUndefined": "false", + "params": {} + } + ], + "threshold": 1.0, + "aggregation": "NC", + "positive": "layer3", + "negative": "NO_MATCH", + "undefined": "layer3", + "ignoreUndefined": "false" + }, + "layer3": { + "fields": [ + { + "field": "title", + "comparator": "LevensteinTitle", + "weight": 1.0, + "countIfUndefined": "true", + "params": {} + } + ], + "threshold": 0.99, + "aggregation": "SUM", + "positive": "MATCH", + "negative": "NO_MATCH", + "undefined": "NO_MATCH", + "ignoreUndefined": "true" + } + }, + "model": [ + { + "name": "doi", + "type": "String", + "path": "$.pid[?(@.qualifier.classid == 'doi')].value" + }, + { + "name": "pid", + "type": "JSON", + "path": "$.pid[*]", + "overrideMatch": "true" + }, + { + "name": "title", + "type": "String", + "path": "$.title[?(@.qualifier.classid == 'main title')].value", + "length": 250, + "size": 5 + }, + { + "name": "authors", + "type": "List", + "path": "$.author[*].fullname", + "size": 200 + }, + { + "name": "resulttype", + "type": "String", + "path": "$.resulttype.classid" + } + ], + "blacklists": { + "title": [ + "^Inside Front Cover$", + "(?i)^Poster presentations$", + "^THE ASSOCIATION AND THE GENERAL MEDICAL COUNCIL$", + "^Problems with perinatal pathology\\.?$", + "(?i)^Cases? of Puerperal Convulsions$", + "(?i)^Operative Gyna?ecology$", + "(?i)^Mind the gap\\!?\\:?$", + "^Chronic fatigue syndrome\\.?$", + "^Cartas? ao editor Letters? to the Editor$", + "^Note from the Editor$", + "^Anesthesia Abstract$", + "^Annual report$", + "(?i)^“?THE RADICAL PREVENTION OF VENEREAL DISEASE\\.?”?$", + "(?i)^Graph and Table of Infectious Diseases?$", + "^Presentation$", + "(?i)^Reviews and Information on Publications$", + "(?i)^PUBLIC HEALTH SERVICES?$", + "(?i)^COMBINED TEXT-?BOOK OF OBSTETRICS AND GYN(Æ|ae)COLOGY$", + "(?i)^Adrese autora$", + "(?i)^Systematic Part .*\\. Catalogus Fossilium Austriae, Band 2: Echinoidea neogenica$", + "(?i)^Acknowledgement to Referees$", + "(?i)^Behçet's disease\\.?$", + "(?i)^Isolation and identification of restriction endonuclease.*$", + "(?i)^CEREBROVASCULAR DISEASES?.?$", + "(?i)^Screening for abdominal aortic aneurysms?\\.?$", + "^Event management$", + "(?i)^Breakfast and Crohn's disease.*\\.?$", + "^Cálculo de concentraciones en disoluciones acuosas. Ejercicio interactivo\\..*\\.$", + "(?i)^Genetic and functional analyses of SHANK2 mutations suggest a multiple hit model of Autism spectrum disorders?\\.?$", + "^Gushi hakubutsugaku$", + "^Starobosanski nadpisi u Bosni i Hercegovini \\(.*\\)$", + "^Intestinal spirocha?etosis$", + "^Treatment of Rodent Ulcer$", + "(?i)^\\W*Cloud Computing\\W*$", + "^Compendio mathematico : en que se contienen todas las materias mas principales de las Ciencias que tratan de la cantidad$", + "^Free Communications, Poster Presentations: Session [A-F]$", + "^“The Historical Aspects? of Quackery\\.?”$", + "^A designated centre for people with disabilities operated by St John of God Community Services (Limited|Ltd), Louth$", + "^P(er|re)-Mile Premiums for Auto Insurance\\.?$", + "(?i)^Case Report$", + "^Boletín Informativo$", + "(?i)^Glioblastoma Multiforme$", + "(?i)^Nuevos táxones animales descritos en la península Ibérica y Macaronesia desde 1994 \\(.*\\)$", + "^Zaměstnanecké výhody$", + "(?i)^The Economics of Terrorism and Counter-Terrorism: A Survey \\(Part .*\\)$", + "(?i)^Carotid body tumours?\\.?$", + "(?i)^\\[Españoles en Francia : La condición Emigrante.*\\]$", + "^Avant-propos$", + "(?i)^St\\. Patrick's Cathedral, Dublin, County Dublin - Head(s)? and Capital(s)?$", + "(?i)^St\\. Patrick's Cathedral, Dublin, County Dublin - Bases?$", + "(?i)^PUBLIC HEALTH VERSUS THE STATE$", + "^Viñetas de Cortázar$", + "(?i)^Search for heavy neutrinos and W(\\[|_|\\(|_\\{|-)?R(\\]|\\)|\\})? bosons with right-handed couplings in a left-right symmetric model in pp collisions at.*TeV(\\.)?$", + "(?i)^Measurement of the pseudorapidity and centrality dependence of the transverse energy density in Pb(-?)Pb collisions at.*tev(\\.?)$", + "(?i)^Search for resonances decaying into top-quark pairs using fully hadronic decays in pp collisions with ATLAS at.*TeV$", + "(?i)^Search for neutral minimal supersymmetric standard model Higgs bosons decaying to tau pairs in pp collisions at.*tev$", + "(?i)^Relatório de Estágio (de|em) Angiologia e Cirurgia Vascular$", + "^Aus der AGMB$", + "^Znanstveno-stručni prilozi$", + "(?i)^Zhodnocení finanční situace podniku a návrhy na zlepšení$", + "(?i)^Evaluation of the Financial Situation in the Firm and Proposals to its Improvement$", + "(?i)^Hodnocení finanční situace podniku a návrhy na její zlepšení$", + "^Finanční analýza podniku$", + "^Financial analysis( of business)?$", + "(?i)^Textbook of Gyn(a)?(Æ)?(e)?cology$", + "^Jikken nihon shūshinsho$", + "(?i)^CORONER('|s)(s|') INQUESTS$", + "(?i)^(Μελέτη παραγόντων )?risk management( για ανάπτυξη και εφαρμογή ενός πληροφοριακού συστήματος| και ανάπτυξη συστήματος)?$", + "(?i)^Consultants' contract(s)?$", + "(?i)^Upute autorima$", + "(?i)^Bijdrage tot de Kennis van den Godsdienst der Dajaks van Lan(d|f)ak en Tajan$", + "^Joshi shin kokubun$", + "^Kōtō shōgaku dokuhon nōson'yō$", + "^Jinjō shōgaku shōka$", + "^Shōgaku shūjichō$", + "^Nihon joshi dokuhon$", + "^Joshi shin dokuhon$", + "^Chūtō kanbun dokuhon$", + "^Wabun dokuhon$", + "(?i)^(Analysis of economy selected village or town|Rozbor hospodaření vybrané obce či města)$", + "(?i)^cardiac rehabilitation$", + "(?i)^Analytical summary$", + "^Thesaurus resolutionum Sacrae Congregationis Concilii$", + "(?i)^Sumario analítico(\\s{1})?(Analitic summary)?$", + "^Prikazi i osvrti$", + "^Rodinný dům s provozovnou$", + "^Family house with an establishment$", + "^Shinsei chūtō shin kokugun$", + "^Pulmonary alveolar proteinosis(\\.?)$", + "^Shinshū kanbun$", + "^Viñeta(s?) de Rodríguez$", + "(?i)^RUBRIKA UREDNIKA$", + "^A Matching Model of the Academic Publication Market$", + "^Yōgaku kōyō$", + "^Internetový marketing$", + "^Internet marketing$", + "^Chūtō kokugo dokuhon$", + "^Kokugo dokuhon$", + "^Antibiotic Cover for Dental Extraction(s?)$", + "^Strategie podniku$", + "^Strategy of an Enterprise$", + "(?i)^respiratory disease(s?)(\\.?)$", + "^Award(s?) for Gallantry in Civil Defence$", + "^Podniková kultura$", + "^Corporate Culture$", + "^Severe hyponatraemia in hospital inpatient(s?)(\\.?)$", + "^Pracovní motivace$", + "^Work Motivation$", + "^Kaitei kōtō jogaku dokuhon$", + "^Konsolidovaná účetní závěrka$", + "^Consolidated Financial Statements$", + "(?i)^intracranial tumour(s?)$", + "^Climate Change Mitigation Options and Directed Technical Change: A Decentralized Equilibrium Analysis$", + "^\\[CERVECERIAS MAHOU(\\.|\\:) INTERIOR\\] \\[Material gráfico\\]$", + "^Housing Market Dynamics(\\:|\\.) On the Contribution of Income Shocks and Credit Constraint(s?)$", + "^\\[Funciones auxiliares de la música en Radio París,.*\\]$", + "^Úroveň motivačního procesu jako způsobu vedení lidí$", + "^The level of motivation process as a leadership$", + "^Pay-beds in N(\\.?)H(\\.?)S(\\.?) Hospitals$", + "(?i)^news and events$", + "(?i)^NOVOSTI I DOGAĐAJI$", + "^Sansū no gakushū$", + "^Posouzení informačního systému firmy a návrh změn$", + "^Information System Assessment and Proposal for ICT Modification$", + "^Stresové zatížení pracovníků ve vybrané profesi$", + "^Stress load in a specific job$", + "^Sunday: Poster Sessions, Pt.*$", + "^Monday: Poster Sessions, Pt.*$", + "^Wednesday: Poster Sessions, Pt.*", + "^Tuesday: Poster Sessions, Pt.*$", + "^Analýza reklamy$", + "^Analysis of advertising$", + "^Shōgaku shūshinsho$", + "^Shōgaku sansū$", + "^Shintei joshi kokubun$", + "^Taishō joshi kokubun dokuhon$", + "^Joshi kokubun$", + "^Účetní uzávěrka a účetní závěrka v ČR$", + "(?i)^The \"?Causes\"? of Cancer$", + "^Normas para la publicación de artículos$", + "^Editor('|s)(s|') [Rr]eply$", + "^Editor(’|s)(s|’) letter$", + "^Redaktoriaus žodis$", + "^DISCUSSION ON THE PRECEDING PAPER$", + "^Kōtō shōgaku shūshinsho jidōyō$", + "^Shōgaku nihon rekishi$", + "^(Theory of the flow of action currents in isolated myelinated nerve fibers).*$", + "^Préface$", + "^Occupational [Hh]ealth [Ss]ervices.$", + "^In Memoriam Professor Toshiyuki TAKESHIMA$", + "^Účetní závěrka ve vybraném podniku.*$", + "^Financial statements in selected company$", + "^Abdominal [Aa]ortic [Aa]neurysms.*$", + "^Pseudomyxoma peritonei$", + "^Kazalo autora$", + "(?i)^uvodna riječ$", + "^Motivace jako způsob vedení lidí$", + "^Motivation as a leadership$", + "^Polyfunkční dům$", + "^Multi\\-funkcional building$", + "^Podnikatelský plán$", + "(?i)^Podnikatelský záměr$", + "(?i)^Business Plan$", + "^Oceňování nemovitostí$", + "^Marketingová komunikace$", + "^Marketing communication$", + "^Sumario Analítico$", + "^Riječ uredništva$", + "^Savjetovanja i priredbe$", + "^Índice$", + "^(Starobosanski nadpisi).*$", + "^Vzdělávání pracovníků v organizaci$", + "^Staff training in organization$", + "^(Life Histories of North American Geometridae).*$", + "^Strategická analýza podniku$", + "^Strategic Analysis of an Enterprise$", + "^Sadržaj$", + "^Upute suradnicima$", + "^Rodinný dům$", + "(?i)^Fami(l)?ly house$", + "^Upute autorima$", + "^Strategic Analysis$", + "^Finanční analýza vybraného podniku$", + "^Finanční analýza$", + "^Riječ urednika$", + "(?i)^Content(s?)$", + "(?i)^Inhalt$", + "^Jinjō shōgaku shūshinsho jidōyō$", + "(?i)^Index$", + "^Chūgaku kokubun kyōkasho$", + "^Retrato de una mujer$", + "^Retrato de un hombre$", + "^Kōtō shōgaku dokuhon$", + "^Shotōka kokugo$", + "^Shōgaku dokuhon$", + "^Jinjō shōgaku kokugo dokuhon$", + "^Shinsei kokugo dokuhon$", + "^Teikoku dokuhon$", + "^Instructions to Authors$", + "^KİTAP TAHLİLİ$", + "^PRZEGLĄD PIŚMIENNICTWA$", + "(?i)^Presentación$", + "^İçindekiler$", + "(?i)^Tabl?e of contents$", + "^(CODICE DEL BEATO DE LOS REYES FERNANDO I Y SANCHA).*$", + "^(\\[MADRID\\. BIBL\\. NAC\\. N.*KING FERDINAND I.*FROM SAN ISIDORO DE LEON\\. FACUNDUS SCRIPSIT DATED.*\\]).*", + "^Editorial( Board)?$", + "(?i)^Editorial \\(English\\)$", + "^Editörden$", + "^(Corpus Oral Dialectal \\(COD\\)\\.).*$", + "^(Kiri Karl Morgensternile).*$", + "^(\\[Eksliibris Aleksandr).*\\]$", + "^(\\[Eksliibris Aleksandr).*$", + "^(Eksliibris Aleksandr).*$", + "^(Kiri A\\. de Vignolles).*$", + "^(2 kirja Karl Morgensternile).*$", + "^(Pirita kloostri idaosa arheoloogilised).*$", + "^(Kiri tundmatule).*$", + "^(Kiri Jenaer Allgemeine Literaturzeitung toimetusele).*$", + "^(Eksliibris Nikolai Birukovile).*$", + "^(Eksliibris Nikolai Issakovile).*$", + "^(WHP Cruise Summary Information of section).*$", + "^(Measurement of the top quark\\-pair production cross section with ATLAS in pp collisions at).*$", + "^(Measurement of the spin\\-dependent structure function).*", + "(?i)^.*authors['’′]? reply\\.?$", + "(?i)^.*authors['’′]? response\\.?$" + ] + }, + "synonyms": {} + } +} \ No newline at end of file diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/result.json b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/publication.json similarity index 100% rename from dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/result.json rename to dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/publication.json diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/result.pace.conf_jpath.json b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/result.pace.conf_jpath.json deleted file mode 100644 index 96094b814..000000000 --- a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/result.pace.conf_jpath.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "wf" : { - "threshold" : "0.99", - "dedupRun" : "001", - "entityType" : "result", - "orderField" : "title", - "queueMaxSize" : "2000", - "groupMaxSize" : "10", - "slidingWindowSize" : "200", - "idPath": "$.entity.id", - "rootBuilder" : [ "result" ], - "includeChildren" : "true" - }, - "pace" : { - "clustering" : [ - { "name" : "acronyms", "fields" : [ "title" ], "params" : { "max" : "1", "minLen" : "2", "maxLen" : "4"} }, - { "name" : "ngrampairs", "fields" : [ "title" ], "params" : { "max" : "1", "ngramLen" : "3"} }, - { "name" : "suffixprefix", "fields" : [ "title" ], "params" : { "max" : "1", "len" : "3" } } - ], - "decisionTree": {}, - "model" : [ - { "name" : "pid", "type" : "JSON", "path" : "$.entity.pid"}, - { "name" : "dateofacceptance", "type" : "String", "path" : "$.entity.result.metadata.dateofacceptance.value"}, - { "name" : "title", "type" : "String","path" : "$.entity.result.metadata.title[?(@.qualifier.classid ==\"main title\")].value" }, - { "name" : "authors", "type" : "List", "path" : "$.entity.result.metadata.author[*].fullname" } - ], - "blacklists" : { - "title" : [ - "^(Corpus Oral Dialectal \\(COD\\)\\.).*$", - "^(Kiri Karl Morgensternile).*$", - "^(\\[Eksliibris Aleksandr).*\\]$", - "^(\\[Eksliibris Aleksandr).*$", - "^(Eksliibris Aleksandr).*$", - "^(Kiri A\\. de Vignolles).*$", - "^(2 kirja Karl Morgensternile).*$", - "^(Pirita kloostri idaosa arheoloogilised).*$", - "^(Kiri tundmatule).*$", - "^(Kiri Jenaer Allgemeine Literaturzeitung toimetusele).*$", - "^(Eksliibris Nikolai Birukovile).*$", - "^(Eksliibris Nikolai Issakovile).*$", - "^(WHP Cruise Summary Information of section).*$", - "^(Measurement of the top quark\\-pair production cross section with ATLAS in pp collisions at).*$", - "^(Measurement of the spin\\-dependent structure function).*" - ] } , - "synonyms": {} - } - -} diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/result.test.conf b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/result.test.conf deleted file mode 100644 index 115bb04f0..000000000 --- a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/result.test.conf +++ /dev/null @@ -1,51 +0,0 @@ -{ - "wf" : { - "threshold" : "0.99", - "dedupRun" : "001", - "entityType" : "result", - "orderField" : "title", - "queueMaxSize" : "2000", - "groupMaxSize" : "10", - "slidingWindowSize" : "200", - "rootBuilder" : [ "result" ], - "includeChildren" : "true" - }, - "pace" : { - "clustering" : [ - { "name" : "acronyms", "fields" : [ "title" ], "params" : { "max" : "1", "minLen" : "2", "maxLen" : "4"} }, - { "name" : "ngrampairs", "fields" : [ "title" ], "params" : { "max" : "1", "ngramLen" : "3"} }, - { "name" : "suffixprefix", "fields" : [ "title" ], "params" : { "max" : "1", "len" : "3" } } - ], - "decisionTree": { - "start": {"fields": [{"field":"pid", "comparator":"exactMatch", "weight":1.0, "countIfUndefined":"true", "params": {}}], "threshold":1.0, "aggregation": "MAX", "positive":"MATCH", "negative":"layer2", "undefined":"layer2", "ignoreUndefined": "true"}, - "layer2": {"fields": [{"field":"dateofacceptance", "comparator":"yearMatch", "weight":1.0, "countIfUndefined":"true", "params" : {}}, {"field":"title", "comparator":"titleVersionMatch", "weight":1.0, "countIfUndefined":"false", "params": {}}, {"field":"authors", "comparator":"sizeMatch", "weight":1.0, "countIfUndefined":"false", "params": {}}], "threshold":1.0, "aggregation": "MIN", "positive":"layer3", "negative":"NO_MATCH", "undefined":"layer3", "ignoreUndefined": "false"}, - "layer3": {"fields": [{"field":"title", "comparator":"JaroWinkler", "weight":1.0, "countIfUndefined":"false", "params":{}}], "threshold": 0.99, "aggregation": "MAX", "positive":"MATCH", "negative":"NO_MATCH", "undefined":"NO_MATCH", "ignoreUndefined": "false"} - }, - "model" : [ - { "name" : "pid", "type" : "String", "path" : "pid[qualifier#classid = {doi}]/value", "overrideMatch" : "true" }, - { "name" : "title", "type" : "String", "path" : "result/metadata/title[qualifier#classid = {main title}]/value" }, - { "name" : "dateofacceptance", "type" : "String", "path" : "result/metadata/dateofacceptance/value" } , - { "name" : "authors", "type" : "List", "path" : "result/author/metadata/fullname/value" } - ], - "blacklists" : { - "title" : [ - "^(Corpus Oral Dialectal \\(COD\\)\\.).*$", - "^(Kiri Karl Morgensternile).*$", - "^(\\[Eksliibris Aleksandr).*\\]$", - "^(\\[Eksliibris Aleksandr).*$", - "^(Eksliibris Aleksandr).*$", - "^(Kiri A\\. de Vignolles).*$", - "^(2 kirja Karl Morgensternile).*$", - "^(Pirita kloostri idaosa arheoloogilised).*$", - "^(Kiri tundmatule).*$", - "^(Kiri Jenaer Allgemeine Literaturzeitung toimetusele).*$", - "^(Eksliibris Nikolai Birukovile).*$", - "^(Eksliibris Nikolai Issakovile).*$", - "^(WHP Cruise Summary Information of section).*$", - "^(Measurement of the top quark\\-pair production cross section with ATLAS in pp collisions at).*$", - "^(Measurement of the spin\\-dependent structure function).*" - ] }, - "synonyms": {} - } - -} From d924f28b93e9ddbe87fb41432eefd099903e433a Mon Sep 17 00:00:00 2001 From: "sandro.labruzzo" Date: Wed, 18 Dec 2019 09:29:44 +0100 Subject: [PATCH 116/449] fixed wrong use of jspath --- .../eu/dnetlib/pace/model/FieldListImpl.java | 8 +- .../eu/dnetlib/pace/model/FieldValueImpl.java | 16 +- .../eu/dnetlib/pace/util/MapDocumentUtil.java | 2 +- .../eu/dnetlib/pace/config/ConfigTest.java | 24 +- .../java/eu/dnetlib/pace/util/UtilTest.java | 1 + .../eu/dnetlib/pace/config/pub2.json | 269 ++++++++++++++++++ 6 files changed, 305 insertions(+), 15 deletions(-) create mode 100644 dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/pub2.json diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldListImpl.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldListImpl.java index ee593b533..d4a11c050 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldListImpl.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldListImpl.java @@ -136,13 +136,7 @@ public class FieldListImpl extends AbstractField implements FieldList { */ @Override public boolean isEmpty() { - return Iterables.all(fields, new Predicate() { - - @Override - public boolean apply(final Field f) { - return f.isEmpty(); - } - }); + return Iterables.all(fields, f -> f.isEmpty()); } /* diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldValueImpl.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldValueImpl.java index ea31ec36e..bf861276e 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldValueImpl.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldValueImpl.java @@ -47,13 +47,17 @@ public class FieldValueImpl extends AbstractField implements FieldValue { if (value == null) return false; switch (type) { - case String: - case JSON: + case String: + case JSON: return value.toString().isEmpty(); - case List: - List list = (List) value; - return list.isEmpty() || ((FieldValueImpl) list.get(0)).isEmpty(); - case URL: + case List: + try { + List list = (List) value; + return list.isEmpty() || ((FieldValueImpl) list.get(0)).isEmpty(); + } catch (Exception e) { + throw new RuntimeException(value.toString()); + } + case URL: String str = value.toString(); return StringUtils.isBlank(str) || !isValidURL(str); default: diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java index c55e13d36..54da950af 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java @@ -45,7 +45,7 @@ public class MapDocumentUtil { FieldListImpl fi = new FieldListImpl(fdef.getName(), fdef.getType()); getJPathList(fdef.getPath(), json, fdef.getType()) .stream() - .map(item -> new FieldValueImpl(fdef.getType(), fdef.getName(), item)) + .map(item -> new FieldValueImpl(Type.String, fdef.getName(), item)) .forEach(fi::add); stringField.put(fdef.getName(), fi); break; diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java index 09d7c0b9b..5d6643461 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java @@ -12,6 +12,7 @@ import org.junit.Test; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -68,11 +69,32 @@ public class ConfigTest extends AbstractPaceTest { DedupConfig dedupConf = DedupConfig.load(readFromClasspath("publication.current.conf.json")); - final String json = readFromClasspath("publication.json"); + final String json = readFromClasspath("pub2.json"); final MapDocument mapDocument = MapDocumentUtil.asMapDocumentWithJPath(dedupConf, json); System.out.println("mapDocument = " + mapDocument.getFieldMap()); + + System.out.println(mapDocument.getFieldMap().values().stream().map(Field::isEmpty).count()); + + } + + + + + + @Test + public void testJPath() { + final String json = readFromClasspath("pub2.json"); + + final String jpath ="$.pid"; + + + final List jPathList = MapDocumentUtil.getJPathList(jpath, json, Type.JSON); + + System.out.println("jPathList = " + jPathList); + + } } diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/util/UtilTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/util/UtilTest.java index 36aca3346..b85be57d1 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/util/UtilTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/util/UtilTest.java @@ -20,4 +20,5 @@ public class UtilTest { PaceResolver paceResolver = new PaceResolver(); paceResolver.getComparator("keywordMatch", params); } + } diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/pub2.json b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/pub2.json new file mode 100644 index 000000000..d3e5bf69e --- /dev/null +++ b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/pub2.json @@ -0,0 +1,269 @@ +{ + "journal": { + "name": "", + "issnPrinted": "", + "issnOnline": "", + "issnLinking": "", + "ep": "", + "iss": "", + "sp": "", + "vol": "", + "edition": "", + "conferenceplace": "", + "conferencedate": "", + "dataInfo": { + "invisible": false, + "inferred": false, + "deletedbyinference": false, + "inferenceprovenance": "", + "provenanceaction": { + "classid": "", + "classname": "", + "schemeid": "", + "schemename": "" + } + } + }, + "author": [ + { + "fullname": "Clingerman Daniel J.", + "name": "", + "surname": "", + "rank": 1, + "pid": [], + "affiliation": [] + }, + { + "fullname": "Morris William", + "name": "", + "surname": "", + "rank": 2, + "pid": [], + "affiliation": [] + }, + { + "fullname": "Sarjeant Amy A.", + "name": "", + "surname": "", + "rank": 3, + "pid": [], + "affiliation": [] + }, + { + "fullname": "Farha Omar K.", + "name": "", + "surname": "", + "rank": 4, + "pid": [], + "affiliation": [] + }, + { + "fullname": "Mondloch Joseph E.", + "name": "", + "surname": "", + "rank": 5, + "pid": [], + "affiliation": [] + }, + { + "fullname": "Hupp Joseph T.", + "name": "", + "surname": "", + "rank": 6, + "pid": [], + "affiliation": [] + }, + { + "fullname": "Stern Charlotte", + "name": "", + "surname": "", + "rank": 7, + "pid": [], + "affiliation": [] + }, + { + "fullname": "Kennedy Robert D.", + "name": "", + "surname": "", + "rank": 8, + "pid": [], + "affiliation": [] + }, + { + "fullname": "Mirkin Chad A.", + "name": "", + "surname": "", + "rank": 9, + "pid": [], + "affiliation": [] + } + ], + "resulttype": { + "classid": "publication", + "classname": "publication", + "schemeid": "dnet:result_typologies", + "schemename": "dnet:result_typologies" + }, + "language": { + "classid": "und", + "classname": "Undetermined", + "schemeid": "dent:languages", + "schemename": "dent:languages" + }, + "country": [], + "subject": [], + "title": [ + { + "value": "Stabilization of a highly porous metal\u2013organic framework utilizing a carborane-based linker", + "qualifier": { + "classid": "main title", + "classname": "main title", + "schemeid": "dnet:dataCite_title", + "schemename": "dnet:dataCite_title" + }, + "dataInfo": { + "invisible": false, + "inferred": false, + "deletedbyinference": false, + "inferenceprovenance": "", + "provenanceaction": { + "classid": "", + "classname": "", + "schemeid": "", + "schemename": "" + } + } + } + ], + "relevantdate": [], + "description": [], + "dateofacceptance": { + "value": "", + "dataInfo": { + "invisible": false, + "inferred": false, + "deletedbyinference": false, + "inferenceprovenance": "", + "provenanceaction": { + "classid": "", + "classname": "", + "schemeid": "", + "schemename": "" + } + } + }, + "publisher": { + "value": "Royal Society of Chemistry (RSC)", + "dataInfo": { + "invisible": false, + "inferred": false, + "deletedbyinference": false, + "inferenceprovenance": "", + "provenanceaction": { + "classid": "", + "classname": "", + "schemeid": "", + "schemename": "" + } + } + }, + "embargoenddate": { + "value": "", + "dataInfo": { + "invisible": false, + "inferred": false, + "deletedbyinference": false, + "inferenceprovenance": "", + "provenanceaction": { + "classid": "", + "classname": "", + "schemeid": "", + "schemename": "" + } + } + }, + "source": [], + "fulltext": [], + "format": [], + "contributor": [], + "resourcetype": { + "classid": "", + "classname": "", + "schemeid": "", + "schemename": "" + }, + "coverage": [], + "refereed": { + "value": "", + "dataInfo": { + "invisible": false, + "inferred": false, + "deletedbyinference": false, + "inferenceprovenance": "", + "provenanceaction": { + "classid": "", + "classname": "", + "schemeid": "", + "schemename": "" + } + } + }, + "context": [], + "id": "50|scholexplore::cf30b31310d816cccd28b514a12ea4a0", + "originalId": [], + "collectedfrom": [ + { + "key": "10|openaire____::e034d6a11054f5ade9221ebac484e864", + "value": "scholExplorer", + "dataInfo": { + "invisible": false, + "inferred": false, + "deletedbyinference": false, + "inferenceprovenance": "", + "provenanceaction": { + "classid": "", + "classname": "", + "schemeid": "", + "schemename": "" + } + } + } + ], + "pid": [ + { + "value": "10.1039/c4cc09212k", + "qualifier": { + "classid": "doi", + "classname": "doi", + "schemeid": "dnet:pid_types", + "schemename": "dnet:pid_types" + }, + "dataInfo": { + "invisible": false, + "inferred": false, + "deletedbyinference": false, + "inferenceprovenance": "", + "provenanceaction": { + "classid": "", + "classname": "", + "schemeid": "", + "schemename": "" + } + } + } + ], + "extraInfo": [], + "dataInfo": { + "invisible": false, + "inferred": true, + "deletedbyinference": true, + "inferenceprovenance": "dedup-similarity-result-levenstein", + "provenanceaction": { + "classid": "sysimport:actionset", + "classname": "sysimport:actionset", + "schemeid": "dnet:provenanceActions", + "schemename": "dnet:provenanceActions" + } + }, + "lastupdatetimestamp": 0 +} From 20fcfe6328f486af8483d8f038779f861641fe85 Mon Sep 17 00:00:00 2001 From: miconis Date: Wed, 18 Dec 2019 16:19:26 +0100 Subject: [PATCH 117/449] implementation of new aggregation in the tree node processing --- .../eu/dnetlib/pace/config/organization.json | 0 .../eu/dnetlib/pace/config/pub2.json | 269 ------------------ 2 files changed, 269 deletions(-) create mode 100644 dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.json delete mode 100644 dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/pub2.json diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.json b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.json new file mode 100644 index 000000000..e69de29bb diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/pub2.json b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/pub2.json deleted file mode 100644 index d3e5bf69e..000000000 --- a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/pub2.json +++ /dev/null @@ -1,269 +0,0 @@ -{ - "journal": { - "name": "", - "issnPrinted": "", - "issnOnline": "", - "issnLinking": "", - "ep": "", - "iss": "", - "sp": "", - "vol": "", - "edition": "", - "conferenceplace": "", - "conferencedate": "", - "dataInfo": { - "invisible": false, - "inferred": false, - "deletedbyinference": false, - "inferenceprovenance": "", - "provenanceaction": { - "classid": "", - "classname": "", - "schemeid": "", - "schemename": "" - } - } - }, - "author": [ - { - "fullname": "Clingerman Daniel J.", - "name": "", - "surname": "", - "rank": 1, - "pid": [], - "affiliation": [] - }, - { - "fullname": "Morris William", - "name": "", - "surname": "", - "rank": 2, - "pid": [], - "affiliation": [] - }, - { - "fullname": "Sarjeant Amy A.", - "name": "", - "surname": "", - "rank": 3, - "pid": [], - "affiliation": [] - }, - { - "fullname": "Farha Omar K.", - "name": "", - "surname": "", - "rank": 4, - "pid": [], - "affiliation": [] - }, - { - "fullname": "Mondloch Joseph E.", - "name": "", - "surname": "", - "rank": 5, - "pid": [], - "affiliation": [] - }, - { - "fullname": "Hupp Joseph T.", - "name": "", - "surname": "", - "rank": 6, - "pid": [], - "affiliation": [] - }, - { - "fullname": "Stern Charlotte", - "name": "", - "surname": "", - "rank": 7, - "pid": [], - "affiliation": [] - }, - { - "fullname": "Kennedy Robert D.", - "name": "", - "surname": "", - "rank": 8, - "pid": [], - "affiliation": [] - }, - { - "fullname": "Mirkin Chad A.", - "name": "", - "surname": "", - "rank": 9, - "pid": [], - "affiliation": [] - } - ], - "resulttype": { - "classid": "publication", - "classname": "publication", - "schemeid": "dnet:result_typologies", - "schemename": "dnet:result_typologies" - }, - "language": { - "classid": "und", - "classname": "Undetermined", - "schemeid": "dent:languages", - "schemename": "dent:languages" - }, - "country": [], - "subject": [], - "title": [ - { - "value": "Stabilization of a highly porous metal\u2013organic framework utilizing a carborane-based linker", - "qualifier": { - "classid": "main title", - "classname": "main title", - "schemeid": "dnet:dataCite_title", - "schemename": "dnet:dataCite_title" - }, - "dataInfo": { - "invisible": false, - "inferred": false, - "deletedbyinference": false, - "inferenceprovenance": "", - "provenanceaction": { - "classid": "", - "classname": "", - "schemeid": "", - "schemename": "" - } - } - } - ], - "relevantdate": [], - "description": [], - "dateofacceptance": { - "value": "", - "dataInfo": { - "invisible": false, - "inferred": false, - "deletedbyinference": false, - "inferenceprovenance": "", - "provenanceaction": { - "classid": "", - "classname": "", - "schemeid": "", - "schemename": "" - } - } - }, - "publisher": { - "value": "Royal Society of Chemistry (RSC)", - "dataInfo": { - "invisible": false, - "inferred": false, - "deletedbyinference": false, - "inferenceprovenance": "", - "provenanceaction": { - "classid": "", - "classname": "", - "schemeid": "", - "schemename": "" - } - } - }, - "embargoenddate": { - "value": "", - "dataInfo": { - "invisible": false, - "inferred": false, - "deletedbyinference": false, - "inferenceprovenance": "", - "provenanceaction": { - "classid": "", - "classname": "", - "schemeid": "", - "schemename": "" - } - } - }, - "source": [], - "fulltext": [], - "format": [], - "contributor": [], - "resourcetype": { - "classid": "", - "classname": "", - "schemeid": "", - "schemename": "" - }, - "coverage": [], - "refereed": { - "value": "", - "dataInfo": { - "invisible": false, - "inferred": false, - "deletedbyinference": false, - "inferenceprovenance": "", - "provenanceaction": { - "classid": "", - "classname": "", - "schemeid": "", - "schemename": "" - } - } - }, - "context": [], - "id": "50|scholexplore::cf30b31310d816cccd28b514a12ea4a0", - "originalId": [], - "collectedfrom": [ - { - "key": "10|openaire____::e034d6a11054f5ade9221ebac484e864", - "value": "scholExplorer", - "dataInfo": { - "invisible": false, - "inferred": false, - "deletedbyinference": false, - "inferenceprovenance": "", - "provenanceaction": { - "classid": "", - "classname": "", - "schemeid": "", - "schemename": "" - } - } - } - ], - "pid": [ - { - "value": "10.1039/c4cc09212k", - "qualifier": { - "classid": "doi", - "classname": "doi", - "schemeid": "dnet:pid_types", - "schemename": "dnet:pid_types" - }, - "dataInfo": { - "invisible": false, - "inferred": false, - "deletedbyinference": false, - "inferenceprovenance": "", - "provenanceaction": { - "classid": "", - "classname": "", - "schemeid": "", - "schemename": "" - } - } - } - ], - "extraInfo": [], - "dataInfo": { - "invisible": false, - "inferred": true, - "deletedbyinference": true, - "inferenceprovenance": "dedup-similarity-result-levenstein", - "provenanceaction": { - "classid": "sysimport:actionset", - "classname": "sysimport:actionset", - "schemeid": "dnet:provenanceActions", - "schemename": "dnet:provenanceActions" - } - }, - "lastupdatetimestamp": 0 -} From b21b1b8f61a799dcffdab9630047653234fbe3f0 Mon Sep 17 00:00:00 2001 From: miconis Date: Wed, 18 Dec 2019 16:19:36 +0100 Subject: [PATCH 118/449] implementation of new aggregation in the tree node processing --- .../java/eu/dnetlib/pace/tree/CityMatch.java | 2 +- .../java/eu/dnetlib/pace/tree/ExactMatch.java | 3 + .../pace/tree/JaroWinklerNormalizedName.java | 2 + .../eu/dnetlib/pace/tree/JsonListMatch.java | 2 +- .../eu/dnetlib/pace/tree/KeywordMatch.java | 2 +- .../eu/dnetlib/pace/tree/StringListMatch.java | 2 +- .../eu/dnetlib/pace/tree/support/AggType.java | 6 +- .../dnetlib/pace/tree/support/FieldStats.java | 12 +- .../pace/tree/support/TreeNodeDef.java | 2 +- .../pace/tree/support/TreeNodeStats.java | 34 ++++- .../pace/tree/support/TreeProcessor.java | 2 +- .../eu/dnetlib/pace/util/MapDocumentUtil.java | 4 - .../eu/dnetlib/pace/config/stopwords_en.txt | 1 - .../eu/dnetlib/pace/config/stopwords_es.txt | 12 -- .../eu/dnetlib/pace/config/stopwords_fr.txt | 1 - .../pace/comparators/ComparatorTest.java | 9 +- .../eu/dnetlib/pace/config/ConfigTest.java | 25 +--- .../config/organization.current.conf.json | 104 ++++++++++---- .../eu/dnetlib/pace/config/organization.json | 1 + .../config/organization.no_synonyms.conf.json | 128 ++++++++++++++++-- 20 files changed, 261 insertions(+), 93 deletions(-) diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/CityMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/CityMatch.java index 2362f47f1..8ff818e07 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/CityMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/CityMatch.java @@ -41,7 +41,7 @@ public class CityMatch extends AbstractComparator { else { if (codes1.isEmpty() ^ codes2.isEmpty()) return -1; //undefined if one of the two has no cities - return commonElementsPercentage(codes1, codes2) > Double.parseDouble(params.getOrDefault("threshold", "0.0")) ? 1.0 : 0.0; + return commonElementsPercentage(codes1, codes2); } } } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatch.java index f8b7b7489..21479cf3f 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatch.java @@ -24,6 +24,9 @@ public class ExactMatch extends AbstractComparator { @Override public double distance(final String a, final String b, final Config conf) { + if (a.isEmpty() || b.isEmpty()) { + return -1.0; //return -1 if a field is missing + } return a.equals(b) ? 1.0 : 0; } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerNormalizedName.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerNormalizedName.java index b89cffaed..76af57409 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerNormalizedName.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerNormalizedName.java @@ -39,6 +39,8 @@ public class JaroWinklerNormalizedName extends AbstractComparator { ca = filterAllStopWords(ca); cb = filterAllStopWords(cb); + //TODO change this implementation, it needs only to erase cities and keywords + Set keywords1 = getKeywords(ca, conf.translationMap(), Integer.parseInt(params.getOrDefault("windowSize", "4"))); Set keywords2 = getKeywords(cb, conf.translationMap(), Integer.parseInt(params.getOrDefault("windowSize", "4"))); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JsonListMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JsonListMatch.java index 166151db0..4fea8d86c 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JsonListMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JsonListMatch.java @@ -46,7 +46,7 @@ public class JsonListMatch extends AbstractComparator { return 0.0; } - return (double)incommon / (incommon + simDiff) > Double.parseDouble(params.getOrDefault("threshold", "0.5")) ? 1 : 0; + return (double)incommon / (incommon + simDiff); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/KeywordMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/KeywordMatch.java index 476c39008..40a90a0e1 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/KeywordMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/KeywordMatch.java @@ -41,7 +41,7 @@ public class KeywordMatch extends AbstractComparator { else { if (codes1.isEmpty() ^ codes2.isEmpty()) return -1; //undefined if one of the two has no keywords - return commonElementsPercentage(codes1, codes2) > Double.parseDouble(params.getOrDefault("threshold", "0.0")) ? 1.0 : 0.0; + return commonElementsPercentage(codes1, codes2); } } } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/StringListMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/StringListMatch.java index f9b53d396..3ed98a04c 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/StringListMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/StringListMatch.java @@ -41,7 +41,7 @@ public class StringListMatch extends AbstractComparator { return 0.0; } - return (double)incommon / (incommon + simDiff) > Double.parseDouble(params.getOrDefault("threshold", "0.5")) ? 1 : 0; + return (double)incommon / (incommon + simDiff); } } \ No newline at end of file diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AggType.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AggType.java index 697294a75..6ea817257 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AggType.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AggType.java @@ -9,10 +9,8 @@ public enum AggType { SUM, MAX, MIN, - NC, //necessary condition - SC, //sufficient condition - AND, - OR; + AND, //used for necessary conditions + OR; //used for sufficient conditions public static AggType getEnum(String value) { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/FieldStats.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/FieldStats.java index b1341fcac..072a2276e 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/FieldStats.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/FieldStats.java @@ -11,20 +11,30 @@ import java.io.Serializable; public class FieldStats implements Serializable { private double weight; //weight for the field (to be used in the aggregation) + private double threshold; //threshold for the field (to be used in case it is a sufficient or a necessary condition) private double result; //the result of the comparison private Field a; private Field b; private boolean countIfUndefined; - public FieldStats(double weight, double result, boolean countIfUndefined, Field a, Field b) { + public FieldStats(double weight, double threshold, double result, boolean countIfUndefined, Field a, Field b) { this.weight = weight; + this.threshold = threshold; this.result = result; this.countIfUndefined = countIfUndefined; this.a = a; this.b = b; } + public double getThreshold() { + return threshold; + } + + public void setThreshold(double threshold) { + this.threshold = threshold; + } + public double getWeight() { return weight; } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java index 57552e606..037ed72c3 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java @@ -47,7 +47,7 @@ public class TreeNodeDef implements Serializable { double result = comparator(fieldConf).compare(doc1.getFieldMap().get(fieldConf.getField()), doc2.getFieldMap().get(fieldConf.getField()), conf); - stats.addFieldStats(fieldConf.getComparator() + " on " + fieldConf.getField() + " " + fields.indexOf(fieldConf), new FieldStats(weight, result, fieldConf.isCountIfUndefined(), doc1.getFieldMap().get(fieldConf.getField()), doc2.getFieldMap().get(fieldConf.getField()))); + stats.addFieldStats(fieldConf.getComparator() + " on " + fieldConf.getField() + " " + fields.indexOf(fieldConf), new FieldStats(weight, Double.parseDouble(fieldConf.getParams().getOrDefault("threshold", "0.5")), result, fieldConf.isCountIfUndefined(), doc1.getFieldMap().get(fieldConf.getField()), doc2.getFieldMap().get(fieldConf.getField()))); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeStats.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeStats.java index c5b1d0fcf..f9612a41f 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeStats.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeStats.java @@ -84,6 +84,32 @@ public class TreeNodeStats implements Serializable { return min; } + //if at least one is true, return 1.0 + public double or(){ + for (FieldStats fieldStats : this.results.values()) { + if (fieldStats.getResult() >= fieldStats.getThreshold()) + return 1.0; + } + return 0.0; + } + + //if at least one is false, return 0.0 + public double and() { + for (FieldStats fieldStats : this.results.values()) { + + if (fieldStats.getResult() == -1) { + if (fieldStats.isCountIfUndefined()) + return 0.0; + } + else { + if (fieldStats.getResult() < fieldStats.getThreshold()) + return 0.0; + } + + } + return 1.0; + } + public double getFinalScore(AggType aggregation){ switch (aggregation){ @@ -91,16 +117,16 @@ public class TreeNodeStats implements Serializable { return scoreSum()/fieldsCount(); case SUM: return scoreSum(); - case SC: - case OR: case MAX: return max(); - case NC: - case AND: case MIN: return min(); case W_MEAN: return weightedScoreSum()/weightSum(); + case OR: + return or(); + case AND: + return and(); default: return 0.0; } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeProcessor.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeProcessor.java index b9af3594a..731f659b3 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeProcessor.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeProcessor.java @@ -38,7 +38,7 @@ public class TreeProcessor{ TreeNodeDef currentNode = config.decisionTree().get(current); //throw an exception if the node doesn't exist if (currentNode == null) - throw new PaceException("The Tree Node doesn't exist: " + current); + throw new PaceException("Missing tree node: " + current); TreeNodeStats stats = currentNode.evaluate(doc1, doc2, config); treeStats.addNodeStats(current, stats); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java index 54da950af..a4d8c96c3 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java @@ -18,13 +18,9 @@ import java.util.function.Predicate; public class MapDocumentUtil { - - private static final ObjectMapper mapper = new ObjectMapper(); public static final String URL_REGEX = "^(http|https|ftp)\\://.*"; public static Predicate urlFilter = s -> s.trim().matches(URL_REGEX); - - public static MapDocument asMapDocumentWithJPath(DedupConfig conf, final String json) { MapDocument m = new MapDocument(); m.setIdentifier(getJPathString(conf.getWf().getIdPath(), json)); diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_en.txt b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_en.txt index 9a76d823c..0a013d33d 100644 --- a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_en.txt +++ b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_en.txt @@ -100,7 +100,6 @@ that the their theirs -them themselves then there diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_es.txt b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_es.txt index 0cf607df2..79d31a0bb 100644 --- a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_es.txt +++ b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_es.txt @@ -1,14 +1,3 @@ -0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -_ a actualmente acuerdo @@ -637,7 +626,6 @@ todavia todavía todo todos -total trabaja trabajais trabajamos diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_fr.txt b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_fr.txt index 0e2789f49..f767a125a 100644 --- a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_fr.txt +++ b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_fr.txt @@ -211,7 +211,6 @@ encore enfin entre envers -environ es essai est diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java index 9bd3a44a8..7365dba75 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java @@ -62,17 +62,16 @@ public class ComparatorTest extends AbstractPaceFunctions { final KeywordMatch keywordMatch = new KeywordMatch(params); - assertEquals(0.0, keywordMatch.distance("Biblioteca dell'Universita di Bologna", "Università di Bologna", conf)); + assertEquals(0.5, keywordMatch.distance("Biblioteca dell'Universita di Bologna", "Università di Bologna", conf)); assertEquals(1.0, keywordMatch.distance("Universita degli studi di Pisa", "Universita di Pisa", conf)); assertEquals(1.0, keywordMatch.distance("Polytechnic University of Turin", "POLITECNICO DI TORINO", conf)); assertEquals(1.0, keywordMatch.distance("Istanbul Commerce University", "İstanbul Ticarət Universiteti", conf)); assertEquals(1.0, keywordMatch.distance("Franklin College", "Concordia College", conf)); - assertEquals(0.0, keywordMatch.distance("University of Georgia", "Georgia State University", conf)); - assertEquals(0.0, keywordMatch.distance("University College London", "University of London", conf)); - assertEquals(0.0, keywordMatch.distance("Washington State University", "University of Washington", conf)); + assertEquals(0.5, keywordMatch.distance("University of Georgia", "Georgia State University", conf)); + assertEquals(0.5, keywordMatch.distance("University College London", "University of London", conf)); + assertEquals(0.5, keywordMatch.distance("Washington State University", "University of Washington", conf)); assertEquals(-1.0, keywordMatch.distance("Allen (United States)", "United States Military Academy", conf)); - } @Test diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java index 5d6643461..3b2917c43 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java @@ -65,36 +65,23 @@ public class ConfigTest extends AbstractPaceTest { } @Test - public void asMapDocumentTest() throws Exception { + public void asMapDocumentTest() { - DedupConfig dedupConf = DedupConfig.load(readFromClasspath("publication.current.conf.json")); + DedupConfig dedupConf = DedupConfig.load(readFromClasspath("organization.current.conf.json")); - final String json = readFromClasspath("pub2.json"); + final String json = readFromClasspath("organization.json"); final MapDocument mapDocument = MapDocumentUtil.asMapDocumentWithJPath(dedupConf, json); System.out.println("mapDocument = " + mapDocument.getFieldMap()); - - - System.out.println(mapDocument.getFieldMap().values().stream().map(Field::isEmpty).count()); - } - - - - @Test public void testJPath() { - final String json = readFromClasspath("pub2.json"); - - final String jpath ="$.pid"; - - - final List jPathList = MapDocumentUtil.getJPathList(jpath, json, Type.JSON); - - System.out.println("jPathList = " + jPathList); + final String json = readFromClasspath("organization.json"); + final String jpath ="$.id"; + System.out.println("result = " + MapDocumentUtil.getJPathString(jpath, json)); } } diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.current.conf.json b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.current.conf.json index a16ade3d0..d70609e13 100644 --- a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.current.conf.json +++ b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.current.conf.json @@ -1,6 +1,6 @@ { "wf" : { - "threshold" : "0.9", + "threshold" : "0.99", "dedupRun" : "001", "entityType" : "organization", "orderField" : "legalname", @@ -8,7 +8,9 @@ "groupMaxSize" : "50", "slidingWindowSize" : "200", "rootBuilder" : [ "organization", "projectOrganization_participation_isParticipant", "datasourceOrganization_provision_isProvidedBy" ], - "includeChildren" : "true" + "includeChildren" : "true", + "maxIterations": "20", + "idPath": "$.id" }, "pace" : { "clustering" : [ @@ -23,59 +25,110 @@ { "field": "gridid", "comparator": "exactMatch", - "weight": 1.0, - "countIfUndefined": "true", + "weight": 1, + "countIfUndefined": "false", "params": {} } ], - "threshold": 1.0, - "aggregation": "MAX", + "threshold": 1, + "aggregation": "SC", "positive": "MATCH", - "negative": "layer2", + "negative": "NO_MATCH", "undefined": "layer2", - "ignoreUndefined": "true" + "ignoreUndefined": "false" }, "layer2": { "fields": [ { "field": "websiteurl", "comparator": "domainExactMatch", - "weight": 1.0, - "countIfUndefined": "true", + "weight": 1, + "countIfUndefined": "false", "params": {} }, { "field": "country", "comparator": "exactMatch", - "weight": 1.0, - "countIfUndefined": "false", + "weight": 1, + "countIfUndefined": "true", + "params": {} + }, + { + "field": "legalname", + "comparator": "numbersMatch", + "weight": 1, + "countIfUndefined": "true", + "params": {} + }, + { + "field": "legalname", + "comparator": "romansMatch", + "weight": 1, + "countIfUndefined": "true", "params": {} } ], - "threshold": 1.0, - "aggregation": "MIN", + "threshold": 1, + "aggregation": "NC", "positive": "layer3", "negative": "NO_MATCH", "undefined": "layer3", - "ignoreUndefined": "false" + "ignoreUndefined": "true" }, "layer3": { "fields": [ { "field": "legalname", - "comparator": "jaroWinklerNormalizedName", - "weight": 0.9, + "comparator": "cityMatch", + "weight": 1.0, + "countIfUndefined": "true", + "params": { + "windowSize": "4" + } + } + ], + "threshold": 0.1, + "aggregation": "W_MEAN", + "positive": "layer4", + "negative": "NO_MATCH", + "undefined": "NO_MATCH", + "ignoreUndefined": "true" + }, + "layer4": { + "fields": [ + { + "field": "legalname", + "comparator": "keywordMatch", + "weight": 1.0, "countIfUndefined": "false", "params": { - "windowSize": 4, - "threshold": 0.7 + "windowSize": "4" + } + } + ], + "threshold": 0.7, + "aggregation": "W_MEAN", + "positive": "layer5", + "negative": "NO_MATCH", + "undefined": "layer5", + "ignoreUndefined": "false" + }, + "layer5": { + "fields": [ + { + "field": "legalname", + "comparator": "jaroWinklerNormalizedName", + "weight": 0.9, + "countIfUndefined": "true", + "params": { + "windowSize": "4" } }, { "field": "legalshortname", "comparator": "jaroWinklerNormalizedName", "weight": 0.1, - "countIfUndefined": "true", + "countIfUndefined": "false", "params": {} } ], @@ -90,9 +143,9 @@ "model" : [ { "name" : "country", "type" : "String", "path" : "$.organization.metadata.country.classid"}, { "name" : "legalshortname", "type" : "String", "path" : "$.organization.metadata.legalshortname.value"}, - { "name" : "legalname", "type" : "String", "path" : "$organization.metadata.legalname.value" }, + { "name" : "legalname", "type" : "String", "path" : "$.organization.metadata.legalname.value" }, { "name" : "websiteurl", "type" : "URL", "path" : "$.organization.metadata.websiteurl.value" }, - { "name" : "gridid", "type" : "String", "path" : "$.pid[?(@.qualifier.classid ==\"grid\")].value"} + { "name" : "gridid", "type" : "String", "path" : "$.pid[?(@.qualifier.classid=='grid.ac')].value"} ], "blacklists" : { "legalname" : [] @@ -192,7 +245,7 @@ "key::92": ["automation","automazione","automatización","automação","Automatisierung","automatisering","αυτοματοποίηση","otomasyon","automatizálás","avtomatizacija","automatiseeritud",""], "key::93": ["pediatric","pediatria","pediatriche","pediatrico","pediátrico","pediatría","pediátrico","pediatria","pädiatrisch","pediatrische","παιδιατρική","pediatrik","gyermekgyógyászat","pediatrija","pediaatria",""], "key::94": ["photonics","fotonica","fotoniche","fotónica","fotônica","Photonik","fotonica","φωτονική","fotonik","fotonika","fotonika","fotoonika",""], - "key::95": ["mechanics","meccanica","meccaniche","mecánica","mecânica","Mechanik","Maschinenbau","mechanica","werktuigkunde","μηχανικής","mekanik","gépészet","mehanika","mehaanika",""], + "key::95": ["mechanics", "mechanical", "meccanica","meccaniche","mecánica","mecânica","Mechanik","Maschinenbau","mechanica","werktuigkunde","μηχανικής","mekanik","gépészet","mehanika","mehaanika",""], "key::96": ["psychiatrics","psichiatria","psichiatrica","psichiatriche","psiquiatría","psiquiatria","Psychiatrie","psychiatrie","ψυχιατρική","psikiyatrik","pszihiátria","psihiatrija","psühhaatria",""], "key::97": ["psychology","fisiologia","psicología","psicologia","Psychologie","psychologie","ψυχολογία","psikoloji","pszihológia","psihologija","psühholoogia",""], "key::98": ["automotive","industriaautomobilistica","industriadelautomóvil","automotriz","industriaautomotriz","automotivo","Automobilindustrie","autoindustrie","αυτοκίνητος","αυτοκίνητη","αυτοκίνητο","αυτοκινούμενος","αυτοκινούμενη","αυτοκινούμενο","αυτοκινητιστικός","αυτοκινητιστική","αυτοκινητιστικό","otomotiv","autóipari","samogiben","avtomobilskaindustrija","auto-",""], @@ -202,7 +255,10 @@ "key::102": ["informatics","informatica","informática","informática","informatica",""], "key::103": ["forschungsgemeinschaft","comunita ricerca","research community","research foundation","research association"], "key::104": ["commerce","ticaret","ticarət","commercio","trade","handel","comercio"], - "key::105" : ["state", "stato", "etade", "statale", "etat", "zustand", "estado"] + "key::105" : ["state", "stato", "etade", "estado", "statale", "etat", "zustand", "estado"], + "key::106" : ["seminary", "seminario", "seminaire", "seminar"], + "key::107" : ["agricultural forestry", "af", "a f", "a&f"], + "key::108" : ["agricultural mechanical", "am", "a m", "a&m"] } } } \ No newline at end of file diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.json b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.json index e69de29bb..c2e44e192 100644 --- a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.json +++ b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.json @@ -0,0 +1 @@ +{"dateoftransformation":"2019-10-14 08:59:35.295767","originalId":["openorgs____::0000000985"],"pid":[{"qualifier":{"classid":"ISNI","classname":"ISNI","schemename":"dnet:pid_types","schemeid":"dnet:pid_types"},"value":"0000 0004 0478 6426"},{"qualifier":{"classid":"FundRef","classname":"FundRef","schemename":"dnet:pid_types","schemeid":"dnet:pid_types"},"value":"100000126"},{"qualifier":{"classid":"FundRef","classname":"FundRef","schemename":"dnet:pid_types","schemeid":"dnet:pid_types"},"value":"100000190"},{"qualifier":{"classid":"FundRef","classname":"FundRef","schemename":"dnet:pid_types","schemeid":"dnet:pid_types"},"value":"100000205"},{"qualifier":{"classid":"FundRef","classname":"FundRef","schemename":"dnet:pid_types","schemeid":"dnet:pid_types"},"value":"100005822"},{"qualifier":{"classid":"FundRef","classname":"FundRef","schemename":"dnet:pid_types","schemeid":"dnet:pid_types"},"value":"100005823"},{"qualifier":{"classid":"FundRef","classname":"FundRef","schemename":"dnet:pid_types","schemeid":"dnet:pid_types"},"value":"100005824"},{"qualifier":{"classid":"OrgRef","classname":"OrgRef","schemename":"dnet:pid_types","schemeid":"dnet:pid_types"},"value":"70243"},{"qualifier":{"classid":"Wikidata","classname":"Wikidata","schemename":"dnet:pid_types","schemeid":"dnet:pid_types"},"value":"Q503577"},{"qualifier":{"classid":"grid.ac","classname":"grid.ac","schemename":"dnet:pid_types","schemeid":"dnet:pid_types"},"value":"grid.239119.1"}],"collectedfrom":[{"value":"OpenOrgs Database","key":"10|openaire____::0362fcdb3076765d9c0041ad331553e8"}],"organization":{"metadata":{"legalshortname":{"value":"USDoC"},"websiteurl":{"value":"http://www.commerce.gov/"},"country":{"classid":"US","classname":"United States","schemename":"dnet:countries","schemeid":"dnet:countries"},"alternativeNames":[{"value":"Departamento de Comercio de Estados Unidos"},{"value":"Département du commerce des États-unis"},{"value":"United States Department of Commerce"},{"value":"United States Department of Commerce and Labor"}],"legalname":{"value":"United States Department of Commerce"}}},"dateofcollection":"","type":20,"id":"20|openorgs____::051dc42607887282d1939f094e5906f5"} \ No newline at end of file diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.no_synonyms.conf.json b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.no_synonyms.conf.json index 80a53c83f..5e4eafc7b 100644 --- a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.no_synonyms.conf.json +++ b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.no_synonyms.conf.json @@ -1,6 +1,6 @@ { "wf" : { - "threshold" : "0.9", + "threshold" : "0.99", "dedupRun" : "001", "entityType" : "organization", "orderField" : "legalname", @@ -8,7 +8,8 @@ "groupMaxSize" : "50", "slidingWindowSize" : "200", "rootBuilder" : [ "organization", "projectOrganization_participation_isParticipant", "datasourceOrganization_provision_isProvidedBy" ], - "includeChildren" : "true" + "includeChildren" : "true", + "maxIterations": "20" }, "pace" : { "clustering" : [ @@ -18,21 +19,124 @@ { "name" : "keywordsclustering", "fields" : [ "legalname" ], "params" : { "max": 2, "windowSize": 4} } ], "decisionTree" : { - "start": {"fields": [{"field":"gridid", "comparator":"exactMatch", "weight":1.0, "countIfUndefined":"true", "params": {}}], "threshold":1.0, "aggregation": "MAX", "positive":"MATCH", "negative":"layer2", "undefined":"layer2", "ignoreUndefined": "true"}, - "layer2": {"fields": [{"field":"websiteurl", "comparator":"domainExactMatch", "weight":1.0, "countIfUndefined":"true", "params" : {}}, {"field":"country", "comparator":"exactMatch", "weight":1.0, "countIfUndefined":"false", "params": {}}], "threshold":1.0, "aggregation": "MIN", "positive":"layer3", "negative":"NO_MATCH", "undefined":"layer3", "ignoreUndefined": "false"}, - "layer3": {"fields": [{"field":"legalname", "comparator":"jaroWinklerNormalizedName", "weight":0.9, "countIfUndefined":"false", "params":{"windowSize" : 4, "threshold" : 0.7}}, {"field":"legalshortname", "comparator":"jaroWinklerNormalizedName", "weight":0.1, "countIfUndefined":"true", "params":{}}], "threshold": 0.9, "aggregation": "W_MEAN", "positive":"MATCH", "negative":"NO_MATCH", "undefined":"NO_MATCH", "ignoreUndefined": "true"} + "start": { + "fields": [ + { + "field": "gridid", + "comparator": "exactMatch", + "weight": 1, + "countIfUndefined": "false", + "params": {} + } + ], + "threshold": 1, + "aggregation": "SC", + "positive": "MATCH", + "negative": "NO_MATCH", + "undefined": "layer2", + "ignoreUndefined": "false" + }, + "layer2": { + "fields": [ + { + "field": "websiteurl", + "comparator": "domainExactMatch", + "weight": 1, + "countIfUndefined": "false", + "params": {} + }, + { + "field": "country", + "comparator": "exactMatch", + "weight": 1, + "countIfUndefined": "true", + "params": {} + } + ], + "threshold": 1, + "aggregation": "NC", + "positive": "layer3", + "negative": "NO_MATCH", + "undefined": "layer3", + "ignoreUndefined": "true" + }, + "layer3": { + "fields": [ + { + "field": "legalname", + "comparator": "cityMatch", + "weight": 1.0, + "countIfUndefined": "true", + "params": { + "windowSize": "4", + "threshold": "0.0" + } + } + ], + "threshold": 1.0, + "aggregation": "W_MEAN", + "positive": "layer4", + "negative": "NO_MATCH", + "undefined": "NO_MATCH", + "ignoreUndefined": "true" + }, + "layer4": { + "fields": [ + { + "field": "legalname", + "comparator": "keywordMatch", + "weight": 1.0, + "countIfUndefined": "false", + "params": { + "windowSize": "4", + "threshold": "0.7" + } + } + ], + "threshold": 1.0, + "aggregation": "W_MEAN", + "positive": "layer5", + "negative": "NO_MATCH", + "undefined": "layer5", + "ignoreUndefined": "false" + }, + "layer5": { + "fields": [ + { + "field": "legalname", + "comparator": "jaroWinklerNormalizedName", + "weight": 0.9, + "countIfUndefined": "true", + "params": { + "windowSize": "4" + } + }, + { + "field": "legalshortname", + "comparator": "jaroWinklerNormalizedName", + "weight": 0.1, + "countIfUndefined": "false", + "params": {} + } + ], + "threshold": 0.9, + "aggregation": "W_MEAN", + "positive": "MATCH", + "negative": "NO_MATCH", + "undefined": "NO_MATCH", + "ignoreUndefined": "true" + } }, "model" : [ - { "name" : "country", "type" : "String", "path" : "$.organization.metadata.country.classid"}, - { "name" : "legalshortname", "type" : "String", "path" : "$.organization.metadata.legalshortname.value"}, - { "name" : "legalname", "type" : "String", "path" : "$organization.metadata.legalname.value" }, - { "name" : "websiteurl", "type" : "URL", "path" : "$.organization.metadata.websiteurl.value" }, - { "name" : "gridid", "type" : "String", "path" : "$.pid[?(@.qualifier.classid ==\"grid\")].value"} + { "name" : "country", "type" : "String", "path" : "organization/metadata/country/classid"}, + { "name" : "legalshortname", "type" : "String", "path" : "organization/metadata/legalshortname/value"}, + { "name" : "legalname", "type" : "String", "path" : "organization/metadata/legalname/value" }, + { "name" : "websiteurl", "type" : "URL", "path" : "organization/metadata/websiteurl/value" }, + { "name" : "gridid", "type" : "String", "path" : "pid[qualifier#classid = {grid}]/value"} ], "blacklists" : { "legalname" : [] }, - "synonyms": { - } + "synonyms": {} } } \ No newline at end of file From b3748b8d777978d6c62872987e3b4afa3983290b Mon Sep 17 00:00:00 2001 From: miconis Date: Wed, 18 Dec 2019 16:20:35 +0100 Subject: [PATCH 119/449] minor changes --- .../config/organization.current.conf.json | 27 ++++++----- .../config/organization.no_synonyms.conf.json | 48 ++++++++++++------- 2 files changed, 45 insertions(+), 30 deletions(-) diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.current.conf.json b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.current.conf.json index d70609e13..7fa731c1d 100644 --- a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.current.conf.json +++ b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.current.conf.json @@ -7,10 +7,10 @@ "queueMaxSize" : "2000", "groupMaxSize" : "50", "slidingWindowSize" : "200", + "idPath":"$.id", "rootBuilder" : [ "organization", "projectOrganization_participation_isParticipant", "datasourceOrganization_provision_isProvidedBy" ], "includeChildren" : "true", - "maxIterations": "20", - "idPath": "$.id" + "maxIterations": "20" }, "pace" : { "clustering" : [ @@ -31,7 +31,7 @@ } ], "threshold": 1, - "aggregation": "SC", + "aggregation": "AVG", "positive": "MATCH", "negative": "NO_MATCH", "undefined": "layer2", @@ -69,7 +69,7 @@ } ], "threshold": 1, - "aggregation": "NC", + "aggregation": "AND", "positive": "layer3", "negative": "NO_MATCH", "undefined": "layer3", @@ -87,7 +87,7 @@ } } ], - "threshold": 0.1, + "threshold": 0.7, "aggregation": "W_MEAN", "positive": "layer4", "negative": "NO_MATCH", @@ -100,18 +100,18 @@ "field": "legalname", "comparator": "keywordMatch", "weight": 1.0, - "countIfUndefined": "false", + "countIfUndefined": "true", "params": { "windowSize": "4" } } ], - "threshold": 0.7, - "aggregation": "W_MEAN", + "threshold": 0.9, + "aggregation": "AVG", "positive": "layer5", "negative": "NO_MATCH", "undefined": "layer5", - "ignoreUndefined": "false" + "ignoreUndefined": "true" }, "layer5": { "fields": [ @@ -132,7 +132,7 @@ "params": {} } ], - "threshold": 0.9, + "threshold": 0.99, "aggregation": "W_MEAN", "positive": "MATCH", "negative": "NO_MATCH", @@ -145,7 +145,8 @@ { "name" : "legalshortname", "type" : "String", "path" : "$.organization.metadata.legalshortname.value"}, { "name" : "legalname", "type" : "String", "path" : "$.organization.metadata.legalname.value" }, { "name" : "websiteurl", "type" : "URL", "path" : "$.organization.metadata.websiteurl.value" }, - { "name" : "gridid", "type" : "String", "path" : "$.pid[?(@.qualifier.classid=='grid.ac')].value"} + { "name" : "gridid", "type" : "String", "path" : "$.pid[?(@.qualifier.classid =='grid.ac')].value"}, + { "name" : "originalId", "type" : "String", "path" : "$.id" } ], "blacklists" : { "legalname" : [] @@ -257,8 +258,8 @@ "key::104": ["commerce","ticaret","ticarət","commercio","trade","handel","comercio"], "key::105" : ["state", "stato", "etade", "estado", "statale", "etat", "zustand", "estado"], "key::106" : ["seminary", "seminario", "seminaire", "seminar"], - "key::107" : ["agricultural forestry", "af", "a f", "a&f"], - "key::108" : ["agricultural mechanical", "am", "a m", "a&m"] + "key::107" : ["agricultural forestry", "af", "a f"], + "key::108" : ["agricultural mechanical", "am", "a m"] } } } \ No newline at end of file diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.no_synonyms.conf.json b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.no_synonyms.conf.json index 5e4eafc7b..b0d1d6c93 100644 --- a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.no_synonyms.conf.json +++ b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.no_synonyms.conf.json @@ -7,6 +7,7 @@ "queueMaxSize" : "2000", "groupMaxSize" : "50", "slidingWindowSize" : "200", + "idPath":"$.id", "rootBuilder" : [ "organization", "projectOrganization_participation_isParticipant", "datasourceOrganization_provision_isProvidedBy" ], "includeChildren" : "true", "maxIterations": "20" @@ -30,7 +31,7 @@ } ], "threshold": 1, - "aggregation": "SC", + "aggregation": "AVG", "positive": "MATCH", "negative": "NO_MATCH", "undefined": "layer2", @@ -51,10 +52,24 @@ "weight": 1, "countIfUndefined": "true", "params": {} + }, + { + "field": "legalname", + "comparator": "numbersMatch", + "weight": 1, + "countIfUndefined": "true", + "params": {} + }, + { + "field": "legalname", + "comparator": "romansMatch", + "weight": 1, + "countIfUndefined": "true", + "params": {} } ], "threshold": 1, - "aggregation": "NC", + "aggregation": "AND", "positive": "layer3", "negative": "NO_MATCH", "undefined": "layer3", @@ -68,12 +83,11 @@ "weight": 1.0, "countIfUndefined": "true", "params": { - "windowSize": "4", - "threshold": "0.0" + "windowSize": "4" } } ], - "threshold": 1.0, + "threshold": 0.7, "aggregation": "W_MEAN", "positive": "layer4", "negative": "NO_MATCH", @@ -86,19 +100,18 @@ "field": "legalname", "comparator": "keywordMatch", "weight": 1.0, - "countIfUndefined": "false", + "countIfUndefined": "true", "params": { - "windowSize": "4", - "threshold": "0.7" + "windowSize": "4" } } ], - "threshold": 1.0, - "aggregation": "W_MEAN", + "threshold": 0.9, + "aggregation": "AVG", "positive": "layer5", "negative": "NO_MATCH", "undefined": "layer5", - "ignoreUndefined": "false" + "ignoreUndefined": "true" }, "layer5": { "fields": [ @@ -119,7 +132,7 @@ "params": {} } ], - "threshold": 0.9, + "threshold": 0.99, "aggregation": "W_MEAN", "positive": "MATCH", "negative": "NO_MATCH", @@ -128,11 +141,12 @@ } }, "model" : [ - { "name" : "country", "type" : "String", "path" : "organization/metadata/country/classid"}, - { "name" : "legalshortname", "type" : "String", "path" : "organization/metadata/legalshortname/value"}, - { "name" : "legalname", "type" : "String", "path" : "organization/metadata/legalname/value" }, - { "name" : "websiteurl", "type" : "URL", "path" : "organization/metadata/websiteurl/value" }, - { "name" : "gridid", "type" : "String", "path" : "pid[qualifier#classid = {grid}]/value"} + { "name" : "country", "type" : "String", "path" : "$.organization.metadata.country.classid"}, + { "name" : "legalshortname", "type" : "String", "path" : "$.organization.metadata.legalshortname.value"}, + { "name" : "legalname", "type" : "String", "path" : "$.organization.metadata.legalname.value" }, + { "name" : "websiteurl", "type" : "URL", "path" : "$.organization.metadata.websiteurl.value" }, + { "name" : "gridid", "type" : "String", "path" : "$.pid[?(@.qualifier.classid =='grid.ac')].value"}, + { "name" : "originalId", "type" : "String", "path" : "$.id" } ], "blacklists" : { "legalname" : [] From 4dce78537597dc1257b4e8426ae74cca939723d8 Mon Sep 17 00:00:00 2001 From: miconis Date: Tue, 14 Jan 2020 11:42:43 +0200 Subject: [PATCH 120/449] update in the implementation of the tree: addition of new logic aggregations and statistics --- .../pace/common/AbstractPaceFunctions.java | 11 ----------- .../java/eu/dnetlib/pace/config/Config.java | 5 +++++ .../eu/dnetlib/pace/config/DedupConfig.java | 2 +- .../java/eu/dnetlib/pace/config/WfConfig.java | 12 ++++++------ .../pace/tree/JaroWinklerNormalizedName.java | 2 -- .../eu/dnetlib/pace/tree/support/AggType.java | 6 +++--- .../dnetlib/pace/tree/support/FieldConf.java | 9 ++++++--- .../dnetlib/pace/tree/support/FieldStats.java | 5 ++++- .../dnetlib/pace/tree/support/TreeNodeDef.java | 18 +++++++++++++----- .../pace/tree/support/TreeProcessor.java | 1 + .../eu/dnetlib/pace/util/BlockProcessor.java | 8 -------- 11 files changed, 39 insertions(+), 40 deletions(-) diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java index b9f30ff69..705781e83 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java @@ -225,17 +225,6 @@ public abstract class AbstractPaceFunctions { return s.trim(); } - public double keywordsCompare(Set s1, Set s2, Map translationMap){ - - Set k1 = keywordsToCodes(s1, translationMap); - Set k2 = keywordsToCodes(s2, translationMap); - - if (k1.isEmpty() || k2.isEmpty()) - return 1.0; - - return commonElementsPercentage(k1, k2); - } - public double commonElementsPercentage(Set s1, Set s2){ int longer = (s1.size()>s2.size())?s1.size():s2.size(); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Config.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Config.java index 2cdace1de..32f192fa0 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Config.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Config.java @@ -50,5 +50,10 @@ public interface Config { public Map> blacklists(); + /** + * Translation map. + * + * @return the map + * */ public Map translationMap(); } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java index 261e13bf5..6f91ebf0c 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java @@ -34,7 +34,6 @@ public class DedupConfig implements Config, Serializable { private static Map defaults = Maps.newHashMap(); static { - defaults.put("threshold", "0"); defaults.put("dedupRun", "001"); defaults.put("entityType", "result"); defaults.put("subEntityType", "resulttype"); @@ -46,6 +45,7 @@ public class DedupConfig implements Config, Serializable { defaults.put("rootBuilder", "result"); defaults.put("includeChildren", "true"); defaults.put("maxIterations", "20"); + defaults.put("idPath", "$.id"); } public DedupConfig() {} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/WfConfig.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/WfConfig.java index a79d234d9..3cc5a38a2 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/WfConfig.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/WfConfig.java @@ -86,7 +86,6 @@ public class WfConfig implements Serializable { /** The Jquery path to retrieve the identifier */ private String idPath = "$.id"; - public WfConfig() {} /** @@ -100,8 +99,6 @@ public class WfConfig implements Serializable { * the root builder families * @param dedupRun * the dedup run - * @param threshold - * the threshold * @param skipList * the skip list * @param queueMaxSize @@ -112,22 +109,25 @@ public class WfConfig implements Serializable { * the sliding window size * @param includeChildren * allows the children to be included in the representative records or not. + * @param maxIterations + * the maximum number of iterations + * @param idPath + * the path for the id of the entity */ public WfConfig(final String entityType, final String orderField, final List rootBuilder, final String dedupRun, - final double threshold, - final Set skipList, final int queueMaxSize, final int groupMaxSize, final int slidingWindowSize, final boolean includeChildren, final int maxIterations) { + final Set skipList, final int queueMaxSize, final int groupMaxSize, final int slidingWindowSize, final boolean includeChildren, final int maxIterations, final String idPath) { super(); this.entityType = entityType; this.orderField = orderField; this.rootBuilder = rootBuilder; this.dedupRun = cleanupStringNumber(dedupRun); - this.threshold = threshold; this.skipList = skipList; this.queueMaxSize = queueMaxSize; this.groupMaxSize = groupMaxSize; this.slidingWindowSize = slidingWindowSize; this.includeChildren = includeChildren; this.maxIterations = maxIterations; + this.idPath = idPath; } /** diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerNormalizedName.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerNormalizedName.java index 76af57409..b89cffaed 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerNormalizedName.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerNormalizedName.java @@ -39,8 +39,6 @@ public class JaroWinklerNormalizedName extends AbstractComparator { ca = filterAllStopWords(ca); cb = filterAllStopWords(cb); - //TODO change this implementation, it needs only to erase cities and keywords - Set keywords1 = getKeywords(ca, conf.translationMap(), Integer.parseInt(params.getOrDefault("windowSize", "4"))); Set keywords2 = getKeywords(cb, conf.translationMap(), Integer.parseInt(params.getOrDefault("windowSize", "4"))); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AggType.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AggType.java index 6ea817257..caf7cd4c8 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AggType.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AggType.java @@ -5,12 +5,12 @@ import eu.dnetlib.pace.util.PaceException; public enum AggType { W_MEAN, //weighted mean - AVG, //average + AVG, //average SUM, MAX, MIN, - AND, //used for necessary conditions - OR; //used for sufficient conditions + AND, //used for necessary conditions + OR; //used for sufficient conditions public static AggType getEnum(String value) { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/FieldConf.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/FieldConf.java index 055eaaf18..44971876f 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/FieldConf.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/FieldConf.java @@ -8,11 +8,14 @@ import java.io.IOException; import java.io.Serializable; import java.util.Map; +/** + * The class that defines the configuration of each field in the decision tree. + * */ public class FieldConf implements Serializable { - private String field; //name of the field on which apply the comparator - private String comparator; //comparator name - private double weight = 1.0; //weight for the field (to be used in the aggregation) + private String field; //name of the field on which apply the comparator + private String comparator; //comparator name + private double weight = 1.0; //weight for the field (to be used in the aggregation) private Map params; //parameters private boolean countIfUndefined; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/FieldStats.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/FieldStats.java index 072a2276e..fb0b51b47 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/FieldStats.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/FieldStats.java @@ -8,10 +8,13 @@ import eu.dnetlib.pace.util.PaceException; import java.io.IOException; import java.io.Serializable; +/** + * The class that contains the result of each comparison in the decision tree + * */ public class FieldStats implements Serializable { private double weight; //weight for the field (to be used in the aggregation) - private double threshold; //threshold for the field (to be used in case it is a sufficient or a necessary condition) + private double threshold; //threshold for the field (to be used in some kind of aggregations) private double result; //the result of the comparison private Field a; private Field b; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java index 037ed72c3..7b13118a6 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java @@ -6,7 +6,6 @@ import eu.dnetlib.pace.config.PaceConfig; import eu.dnetlib.pace.model.MapDocument; import eu.dnetlib.pace.util.PaceException; - import java.io.IOException; import java.io.Serializable; import java.util.List; @@ -34,21 +33,30 @@ public class TreeNodeDef implements Serializable { this.ignoreUndefined = ignoreUndefined; } - public TreeNodeDef() { - } + public TreeNodeDef() {} + //function for the evaluation of the node public TreeNodeStats evaluate(MapDocument doc1, MapDocument doc2, Config conf) { TreeNodeStats stats = new TreeNodeStats(); + //for each field in the node, it computes the for (FieldConf fieldConf : fields) { double weight = fieldConf.getWeight(); double result = comparator(fieldConf).compare(doc1.getFieldMap().get(fieldConf.getField()), doc2.getFieldMap().get(fieldConf.getField()), conf); - stats.addFieldStats(fieldConf.getComparator() + " on " + fieldConf.getField() + " " + fields.indexOf(fieldConf), new FieldStats(weight, Double.parseDouble(fieldConf.getParams().getOrDefault("threshold", "0.5")), result, fieldConf.isCountIfUndefined(), doc1.getFieldMap().get(fieldConf.getField()), doc2.getFieldMap().get(fieldConf.getField()))); - + stats.addFieldStats( + fieldConf.getComparator() + " on " + fieldConf.getField() + " " + fields.indexOf(fieldConf), + new FieldStats( + weight, + Double.parseDouble(fieldConf.getParams().getOrDefault("threshold", "0.5")), + result, + fieldConf.isCountIfUndefined(), + doc1.getFieldMap().get(fieldConf.getField()), + doc2.getFieldMap().get(fieldConf.getField()) + )); } return stats; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeProcessor.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeProcessor.java index 731f659b3..abc685ec6 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeProcessor.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeProcessor.java @@ -2,6 +2,7 @@ package eu.dnetlib.pace.tree.support; import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.model.*; +import eu.dnetlib.pace.model.gt.Match; import eu.dnetlib.pace.util.PaceException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java index bc846e71d..34a6aa2cf 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java @@ -4,7 +4,6 @@ import com.google.common.collect.Lists; import eu.dnetlib.pace.clustering.NGramUtils; import eu.dnetlib.pace.config.DedupConfig; import eu.dnetlib.pace.config.WfConfig; -//import eu.dnetlib.pace.distance.PaceDocumentDistance; import eu.dnetlib.pace.tree.support.TreeProcessor; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.model.MapDocument; @@ -36,11 +35,9 @@ public class BlockProcessor { this.dedupConf = dedupConf; } - public void processSortedBlock(final String key, final List documents, final Reporter context) { if (documents.size() > 1) { // log.info("reducing key: '" + key + "' records: " + q.size()); - //process(q, context); process(prepare(documents), context); } else { @@ -54,7 +51,6 @@ public class BlockProcessor { if (q.size() > 1) { // log.info("reducing key: '" + key + "' records: " + q.size()); - //process(q, context); process(simplifyQueue(q, key, context), context); } else { @@ -128,8 +124,6 @@ public class BlockProcessor { private void process(final Queue queue, final Reporter context) { -// final PaceDocumentDistance algo = new PaceDocumentDistance(); - while (!queue.isEmpty()) { final MapDocument pivot = queue.remove(); @@ -140,8 +134,6 @@ public class BlockProcessor { final String fieldPivot = (fieldsPivot == null) || fieldsPivot.isEmpty() ? null : fieldsPivot.stringValue(); if (fieldPivot != null) { - // System.out.println(idPivot + " --> " + fieldPivot); - int i = 0; for (final MapDocument curr : queue) { final String idCurr = curr.getIdentifier(); From 5c8f6febeeb75f6e9dd057d860a9136013e1f6d1 Mon Sep 17 00:00:00 2001 From: miconis Date: Fri, 24 Jan 2020 10:01:11 +0100 Subject: [PATCH 121/449] minor changes in comparators --- .../pace/common/AbstractPaceFunctions.java | 19 +- .../eu/dnetlib/pace/tree/KeywordMatch.java | 2 +- .../pace/tree/support/TreeNodeDef.java | 2 +- .../pace/comparators/ComparatorTest.java | 15 +- .../eu/dnetlib/pace/config/ConfigTest.java | 19 +- .../pace/config/publication.current.conf.json | 47 +--- .../eu/dnetlib/pace/config/publication.json | 231 +++++++++++++++++- 7 files changed, 288 insertions(+), 47 deletions(-) diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java index 705781e83..a4901fd53 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java @@ -17,6 +17,7 @@ import java.io.IOException; import java.io.StringWriter; import java.text.Normalizer; import java.util.*; +import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -51,6 +52,8 @@ public abstract class AbstractPaceFunctions { private Pattern numberPattern = Pattern.compile("-?\\d+(\\.\\d+)?"); + private Pattern hexUnicodePattern = Pattern.compile("\\\\u(\\p{XDigit}{4})"); + protected final static FieldList EMPTY_FIELD = new FieldListImpl(); protected String concat(final List l) { @@ -58,7 +61,7 @@ public abstract class AbstractPaceFunctions { } protected String cleanup(final String s) { - final String s0 = s.toLowerCase(); + final String s0 = unicodeNormalization(s.toLowerCase()); final String s1 = fixAliases(s0); final String s2 = nfd(s1); final String s3 = s2.replaceAll("–", " "); @@ -136,7 +139,7 @@ public abstract class AbstractPaceFunctions { } protected String normalize(final String s) { - return nfd(s) + return nfd(unicodeNormalization(s)) .toLowerCase() // do not compact the regexes in a single expression, would cause StackOverflowError in case of large input strings .replaceAll("[^ \\w]+", "") @@ -151,6 +154,18 @@ public abstract class AbstractPaceFunctions { return Normalizer.normalize(s, Normalizer.Form.NFD); } + public String unicodeNormalization(final String s) { + + Matcher m = hexUnicodePattern.matcher(s); + StringBuffer buf = new StringBuffer(s.length()); + while (m.find()) { + String ch = String.valueOf((char) Integer.parseInt(m.group(1), 16)); + m.appendReplacement(buf, Matcher.quoteReplacement(ch)); + } + m.appendTail(buf); + return buf.toString(); + } + protected String filterStopWords(final String s, final Set stopwords) { final StringTokenizer st = new StringTokenizer(s); final StringBuilder sb = new StringBuilder(); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/KeywordMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/KeywordMatch.java index 40a90a0e1..7d275425d 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/KeywordMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/KeywordMatch.java @@ -40,7 +40,7 @@ public class KeywordMatch extends AbstractComparator { return 1.0; else { if (codes1.isEmpty() ^ codes2.isEmpty()) - return -1; //undefined if one of the two has no keywords + return -1.0; //undefined if one of the two has no keywords return commonElementsPercentage(codes1, codes2); } } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java index 7b13118a6..530839ccd 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java @@ -51,7 +51,7 @@ public class TreeNodeDef implements Serializable { fieldConf.getComparator() + " on " + fieldConf.getField() + " " + fields.indexOf(fieldConf), new FieldStats( weight, - Double.parseDouble(fieldConf.getParams().getOrDefault("threshold", "0.5")), + Double.parseDouble(fieldConf.getParams().getOrDefault("threshold", "-1.0")), result, fieldConf.isCountIfUndefined(), doc1.getFieldMap().get(fieldConf.getField()), diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java index 7365dba75..c1ce3d883 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java @@ -1,8 +1,10 @@ package eu.dnetlib.pace.comparators; import eu.dnetlib.pace.clustering.NGramUtils; +import eu.dnetlib.pace.model.MapDocument; import eu.dnetlib.pace.tree.*; import eu.dnetlib.pace.config.DedupConfig; +import eu.dnetlib.pace.util.MapDocumentUtil; import org.junit.Before; import org.junit.Test; @@ -30,7 +32,7 @@ public class ComparatorTest extends AbstractPaceFunctions { @Test public void testCleanForSorting() { NGramUtils utils = new NGramUtils(); - System.out.println("utils = " + utils.cleanupForOrdering("University of Pisa")); + System.out.println(utils.cleanupForOrdering("University of Pisa")); } @Test @@ -111,10 +113,15 @@ public class ComparatorTest extends AbstractPaceFunctions { double result = jaroWinklerNormalizedName.distance("AT&T (United States)", "United States Military Academy", conf); System.out.println("result = " + result); - } - @Test - public void jsonListMatchTest() { + result = jaroWinklerNormalizedName.distance("NOAA - Servicio Meteorol\\u00f3gico Nacional", "NOAA - NWS", conf); + System.out.println("result = " + result); + + + } + + @Test + public void jsonListMatchTest(){ } diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java index 3b2917c43..0a8964081 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java @@ -7,6 +7,7 @@ import eu.dnetlib.pace.model.FieldList; import eu.dnetlib.pace.model.MapDocument; import eu.dnetlib.pace.tree.JsonListMatch; import eu.dnetlib.pace.util.MapDocumentUtil; +import org.junit.Before; import org.junit.Test; import java.util.HashMap; @@ -19,6 +20,15 @@ import static org.junit.Assert.assertNotNull; public class ConfigTest extends AbstractPaceTest { + private Map params; + + @Before + public void setup() { + params = new HashMap<>(); + params.put("jpath_value", "$.value"); + params.put("jpath_classid", "$.qualifier.classid"); + } + @Test public void dedupConfigSerializationTest() { final DedupConfig cfgFromClasspath = DedupConfig.load(readFromClasspath("organization.current.conf.json")); @@ -67,13 +77,18 @@ public class ConfigTest extends AbstractPaceTest { @Test public void asMapDocumentTest() { - DedupConfig dedupConf = DedupConfig.load(readFromClasspath("organization.current.conf.json")); + DedupConfig dedupConf = DedupConfig.load(readFromClasspath("publication.current.conf.json")); - final String json = readFromClasspath("organization.json"); + final String json = readFromClasspath("publication.json"); final MapDocument mapDocument = MapDocumentUtil.asMapDocumentWithJPath(dedupConf, json); System.out.println("mapDocument = " + mapDocument.getFieldMap()); + + JsonListMatch jsonListMatch = new JsonListMatch(params); + + jsonListMatch.compare(mapDocument.getFieldMap().get("pid"), mapDocument.getFieldMap().get("pid"), null); + } @Test diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/publication.current.conf.json b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/publication.current.conf.json index 3dd1830af..78a3b4e44 100644 --- a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/publication.current.conf.json +++ b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/publication.current.conf.json @@ -25,37 +25,13 @@ ], "includeChildren": "true", "maxIterations": 20, - "idPath": "$.entity.id" + "idPath": "$.id" }, "pace": { - "clustering": [ - { - "name": "ngrampairs", - "fields": [ - "title" - ], - "params": { - "max": "1", - "ngramLen": "3" - } - }, - { - "name": "suffixprefix", - "fields": [ - "title" - ], - "params": { - "max": "1", - "len": "3" - } - }, - { - "name": "lowercase", - "fields": [ - "doi" - ], - "params": {} - } + "clustering" : [ + { "name" : "ngrampairs", "fields" : [ "title" ], "params" : { "max" : "1", "ngramLen" : "3"} }, + { "name" : "suffixprefix", "fields" : [ "title" ], "params" : { "max" : "1", "len" : "3" } }, + { "name" : "lowercase", "fields" : [ "doi" ], "params" : { } } ], "decisionTree": { "start": { @@ -66,14 +42,13 @@ "weight": 1.0, "countIfUndefined": "false", "params": { - "threshold": "0.5", "jpath_value": "$.value", "jpath_classid": "$.qualifier.classid" } } ], - "threshold": 1.0, - "aggregation": "MAX", + "threshold": 0.5, + "aggregation": "AVG", "positive": "MATCH", "negative": "layer2", "undefined": "layer2", @@ -97,7 +72,7 @@ } ], "threshold": 1.0, - "aggregation": "NC", + "aggregation": "AND", "positive": "layer3", "negative": "NO_MATCH", "undefined": "layer3", @@ -107,14 +82,14 @@ "fields": [ { "field": "title", - "comparator": "LevensteinTitle", + "comparator": "levensteinTitle", "weight": 1.0, "countIfUndefined": "true", "params": {} } ], "threshold": 0.99, - "aggregation": "SUM", + "aggregation": "AVG", "positive": "MATCH", "negative": "NO_MATCH", "undefined": "NO_MATCH", @@ -130,7 +105,7 @@ { "name": "pid", "type": "JSON", - "path": "$.pid[*]", + "path": "$.pid", "overrideMatch": "true" }, { diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/publication.json b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/publication.json index a24be241f..9486d6ba3 100644 --- a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/publication.json +++ b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/publication.json @@ -1 +1,230 @@ -{"kind": "entity","entity": {"type": "result","result": {"metadata": {"subject": [{"value": "open access","qualifier": {"classid": "keyword","classname": "keyword","schemeid": "dnet:subject_classification_typologies","schemename": "dnet:subject_classification_typologies"}},{"value": "infrastructure","qualifier": {"classid": "keyword","classname": "keyword","schemeid": "dnet:subject_classification_typologies","schemename": "dnet:subject_classification_typologies"}},{"value": "data model","qualifier": {"classid": "keyword","classname": "keyword","schemeid": "dnet:subject_classification_typologies","schemename": "dnet:subject_classification_typologies"}},{"value": "CERIF","qualifier": {"classid": "keyword","classname": "keyword","schemeid": "dnet:subject_classification_typologies","schemename": "dnet:subject_classification_typologies"}},{"value": "DataCite","qualifier": {"classid": "keyword","classname": "keyword","schemeid": "dnet:subject_classification_typologies","schemename": "dnet:subject_classification_typologies"}}],"title": [{"value": "The Data Model of the OpenAIRE Scientific Communication e-Infrastructure","qualifier": {"classid": "main title","classname": "main title","schemeid": "dnet:dataCite_title","schemename": "dnet:dataCite_title"}}],"dateofacceptance": {"value": "2012-11-30"},"publisher": {"value": ""},"resulttype": {"classid": "publication","classname": "publication","schemeid": "dnet:result_typologies","schemename": "dnet:result_typologies"},"storagedate": {"value": "2012-11-30"},"resourcetype": {"classid": "0017","classname": "Report","schemeid": "dnet:dataCite_resource","schemename": "dnet:dataCite_resource"},"size": {"value": ""},"version": {"value": ""},"description": [{"value": "The OpenAIREplus project aims to further develop and operate the OpenAIRE e-infrastructure, in order to provide a central entry point to Open Access and \\tnon-Open Access publications and datasets funded by the European Commission and National agencies. The infrastructure provides the services to populate, curate, and enrich an Information Space by collecting metadata descriptions relative to organizations, data sources, projects, funding programmes, persons, publications, and datasets. Stakeholders in the research process and\\t\\t\\t\\tscientific communication, such as researchers, funding agencies, organizations nvolved in projects, project coordinators, can here find the information to improve their research and statistics to measure the impact of Open Access and funding schemes over research. In this paper, we introduce the functional requirements to be satisfied and describe the OpenAIREplus data model entities and relationships required to represent information capable of meeting them."}],"license": [{"value": ""}],"author": [{"fullname": "Manghi, Paolo","name": "Paolo","surname": "Manghi","rank": 1},{"fullname": "Houssos, Nikos","name": "Nikos","surname": "Houssos","rank": 2,"pid": [{"key": "ORCID","value": "0000-0002-3748-8359"}]},{"fullname": "Mikulicic, Marko","name": "Marko","surname": "Mikulicic","rank": 3},{"fullname": "Jf6rg, Brigitte","name": "Brigitte","surname": "Jo\u0308rg","rank": 4}]},"instance": [{"accessright": {"classid": "OPEN","classname": "Open Access","schemeid": "dnet:access_modes","schemename": "dnet:access_modes"},"instancetype": {"classid": "0017","classname": "Report","schemeid": "dnet:dataCite_resource","schemename": "dnet:dataCite_resource"},"hostedby": {"key": "10|4ScienceCRIS::f66f1bd369679b5b077dcdf006089556","value": "4Science-DSpace-CRIS-Test"},"license": {"value": ""},"url": ["http://dx.doi.org/10.1007/978-3-642-35233-1_18"],"collectedfrom": {"key": "10|4ScienceCRIS::f66f1bd369679b5b077dcdf006089556","value": "4Science-DSpace-CRIS-Test"},"dateofacceptance": {"value": "2012-11-30"},"distributionlocation": ""}]},"originalId": ["123456789/7","10.1007/978-3-642-35233-1_18"],"collectedfrom": [{"key": "10|4ScienceCRIS::f66f1bd369679b5b077dcdf006089556","value": "4Science-DSpace-CRIS-Test"}],"pid": [{"value": "123456789/7","qualifier": {"classid": "handle","classname": "handle","schemeid": "dnet:pid_types","schemename": "dnet:pid_types"}},{"value": "10.1007/978-3-642-35233-1_18","qualifier": {"classid": "doi","classname": "doi","schemeid": "dnet:pid_types","schemename": "dnet:pid_types"}}],"dateofcollection": "2019-11-05T10:07:42.263Z","id": "50|4ScienceCRIS::6a67ed3daba1c380bf9de3c13ed9c879","dateoftransformation": "2019-11-06T17:11:47.505Z","oaiprovenance": {"originDescription": {"harvestDate": "2019-11-05T10:07:42.263Z","altered": true,"baseURL": "https%3A%2F%2Fdspace-cris.4science.cloud%2Foai%2Fopenairecris","identifier": "oai:dspace-cris.4science.cloud:Publications/123456789/7","datestamp": "2019-09-05T21:52:21Z","metadataNamespace": ""}}},"dataInfo": {"inferred": false,"deletedbyinference": false,"trust": "0.9","inferenceprovenance": "","provenanceaction": {"classid": "sysimport:crosswalk:datasetarchive","classname": "sysimport:crosswalk:datasetarchive","schemeid": "dnet:provenanceActions","schemename": "dnet:provenanceActions"},"invisible": false}} \ No newline at end of file +{ + "journal": { + "name": "", + "issnPrinted": "", + "issnOnline": "", + "issnLinking": "", + "ep": "", + "iss": "", + "sp": "", + "vol": "", + "edition": "", + "conferenceplace": "", + "conferencedate": "", + "dataInfo": { + "invisible": false, + "inferred": false, + "deletedbyinference": false, + "inferenceprovenance": "", + "provenanceaction": { + "classid": "", + "classname": "", + "schemeid": "", + "schemename": "" + } + } + }, + "author": [ + { + "fullname": "Osti Guerrazzi, Amedeo", + "name": "Amedeo", + "surname": "Osti Guerrazzi", + "rank": 1, + "pid": [], + "affiliation": [] + } + ], + "resulttype": { + "classid": "publication", + "classname": "publication", + "schemeid": "dnet:result_typologies", + "schemename": "dnet:result_typologies" + }, + "language": { + "classid": "", + "classname": "", + "schemeid": "", + "schemename": "" + }, + "country": [], + "subject": [], + "title": [ + { + "value": "Rezension: Gabriele Rigano: L\u2019interprete di Auschwitz. Arminio Wachsberger un testimone d\u2019eccezione della deportazione degli ebrei di Roma (rezensiert von Amedeo Osti Guerrazzi)", + "qualifier": { + "classid": "main title", + "classname": "main title", + "schemeid": "dnet:dataCite_title", + "schemename": "dnet:dataCite_title" + }, + "dataInfo": { + "invisible": false, + "inferred": false, + "deletedbyinference": false, + "inferenceprovenance": "", + "provenanceaction": { + "classid": "", + "classname": "", + "schemeid": "", + "schemename": "" + } + } + } + ], + "relevantdate": [], + "description": [], + "dateofacceptance": { + "value": "2018-01-01", + "dataInfo": { + "invisible": false, + "inferred": false, + "deletedbyinference": false, + "inferenceprovenance": "", + "provenanceaction": { + "classid": "", + "classname": "", + "schemeid": "", + "schemename": "" + } + } + }, + "publisher": { + "value": "BSB - Bavarian State Library", + "dataInfo": { + "invisible": false, + "inferred": false, + "deletedbyinference": false, + "inferenceprovenance": "", + "provenanceaction": { + "classid": "", + "classname": "", + "schemeid": "", + "schemename": "" + } + } + }, + "embargoenddate": { + "value": "", + "dataInfo": { + "invisible": false, + "inferred": false, + "deletedbyinference": false, + "inferenceprovenance": "", + "provenanceaction": { + "classid": "", + "classname": "", + "schemeid": "", + "schemename": "" + } + } + }, + "source": [], + "fulltext": [], + "format": [], + "contributor": [], + "resourcetype": { + "classid": "RezensionReview", + "classname": "RezensionReview", + "schemeid": "dnet:dataCite_resource", + "schemename": "dnet:dataCite_resource" + }, + "coverage": [], + "refereed": { + "value": "", + "dataInfo": { + "invisible": false, + "inferred": false, + "deletedbyinference": false, + "inferenceprovenance": "", + "provenanceaction": { + "classid": "", + "classname": "", + "schemeid": "", + "schemename": "" + } + } + }, + "context": [], + "id": "50|datacite____::e23cad995f89bf6cfe63dcc83d41cce9", + "originalId": [ + "http://dx.doi.org/10.15463/rec.2071701652", + "10.15463/rec.2071701652", + "https://doi.org/10.15463/rec.2071701652" + ], + "collectedfrom": [ + { + "key": "10|openaire____::9e3be59865b2c1c335d32dae2fe7b254", + "value": "Datacite", + "dataInfo": { + "invisible": false, + "inferred": false, + "deletedbyinference": false, + "inferenceprovenance": "", + "provenanceaction": { + "classid": "", + "classname": "", + "schemeid": "", + "schemename": "" + } + } + } + ], + "pid": [ + { + "value": "https://doi.org/10.15463/rec.2071701652", + "qualifier": { + "classid": "doi", + "classname": "doi", + "schemeid": "dnet:pid_types", + "schemename": "dnet:pid_types" + }, + "dataInfo": { + "invisible": false, + "inferred": false, + "deletedbyinference": false, + "inferenceprovenance": "", + "provenanceaction": { + "classid": "", + "classname": "", + "schemeid": "", + "schemename": "" + } + } + }, + { + "value": "10.15463/rec.2071701652", + "qualifier": { + "classid": "doi", + "classname": "doi", + "schemeid": "dnet:pid_types", + "schemename": "dnet:pid_types" + }, + "dataInfo": { + "invisible": false, + "inferred": false, + "deletedbyinference": false, + "inferenceprovenance": "", + "provenanceaction": { + "classid": "", + "classname": "", + "schemeid": "", + "schemename": "" + } + } + } + ], + "extraInfo": [], + "dataInfo": { + "invisible": false, + "inferred": false, + "deletedbyinference": false, + "inferenceprovenance": "", + "provenanceaction": { + "classid": "sysimport:crosswalk:datasetarchive", + "classname": "sysimport:crosswalk:datasetarchive", + "schemeid": "dnet:provenanceActions", + "schemename": "dnet:provenanceActions" + } + }, + "lastupdatetimestamp": 0 +} \ No newline at end of file From 46727f5c7697e94717719333b797320f1a8eaa78 Mon Sep 17 00:00:00 2001 From: "sandro.labruzzo" Date: Mon, 10 Feb 2020 12:38:40 +0100 Subject: [PATCH 122/449] upgraded maven version of commons-lang --- dnet-pace-core/pom.xml | 9 +- .../AbstractClusteringFunction.java | 2 +- .../dnetlib/pace/clustering/FieldFilter.java | 2 +- .../pace/clustering/KeywordsClustering.java | 2 +- .../pace/clustering/LowercaseClustering.java | 2 +- .../dnetlib/pace/clustering/NGramUtils.java | 2 +- .../pace/clustering/PersonClustering.java | 2 +- .../clustering/SpaceTrimmingFieldValue.java | 4 +- .../pace/common/AbstractPaceFunctions.java | 471 +++++++++--------- .../java/eu/dnetlib/pace/config/WfConfig.java | 2 +- .../java/eu/dnetlib/pace/model/FieldDef.java | 9 +- .../eu/dnetlib/pace/model/FieldListImpl.java | 11 +- .../eu/dnetlib/pace/model/FieldValueImpl.java | 6 +- .../java/eu/dnetlib/pace/model/gt/Author.java | 129 ----- .../eu/dnetlib/pace/model/gt/AuthorSet.java | 37 -- .../eu/dnetlib/pace/model/gt/Authors.java | 54 -- .../eu/dnetlib/pace/model/gt/CoAuthor.java | 50 -- .../eu/dnetlib/pace/model/gt/CoAuthorSet.java | 36 -- .../pace/model/gt/CoAuthorSetLite.java | 40 -- .../eu/dnetlib/pace/model/gt/CoAuthors.java | 78 --- .../eu/dnetlib/pace/model/gt/GTAuthor.java | 196 -------- .../pace/model/gt/GTAuthorOafSerialiser.java | 104 ---- .../java/eu/dnetlib/pace/model/gt/Group.java | 44 -- .../dnetlib/pace/model/gt/InvertedAuthor.java | 41 -- .../java/eu/dnetlib/pace/model/gt/Match.java | 31 -- .../java/eu/dnetlib/pace/model/gt/Result.java | 72 --- .../eu/dnetlib/pace/model/gt/Subjects.java | 10 - .../eu/dnetlib/pace/model/gt/SubjectsMap.java | 35 -- .../pace/tree/JaroWinklerNormalizedName.java | 2 +- .../pace/tree/SubStringLevenstein.java | 4 +- .../java/eu/dnetlib/pace/tree/UrlMatcher.java | 2 +- .../java/eu/dnetlib/pace/tree/YearMatch.java | 2 +- .../pace/tree/support/TreeProcessor.java | 5 +- .../eu/dnetlib/pace/util/BlockProcessor.java | 2 +- .../java/eu/dnetlib/pace/util/Capitalise.java | 12 +- 35 files changed, 277 insertions(+), 1233 deletions(-) delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/Author.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/AuthorSet.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/Authors.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/CoAuthor.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/CoAuthorSet.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/CoAuthorSetLite.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/CoAuthors.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/GTAuthor.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/GTAuthorOafSerialiser.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/Group.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/InvertedAuthor.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/Match.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/Result.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/Subjects.java delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/SubjectsMap.java diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 5c6466dd8..cb16ffea3 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -27,17 +27,14 @@ gson - commons-lang - commons-lang + org.apache.commons + commons-lang3 commons-io commons-io - - commons-collections - commons-collections - + org.antlr stringtemplate diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/AbstractClusteringFunction.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/AbstractClusteringFunction.java index 7fdcce497..01f146120 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/AbstractClusteringFunction.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/AbstractClusteringFunction.java @@ -3,7 +3,7 @@ package eu.dnetlib.pace.clustering; import eu.dnetlib.pace.common.AbstractPaceFunctions; import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.model.Field; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import java.util.Collection; import java.util.HashSet; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/FieldFilter.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/FieldFilter.java index 7ede4c239..60d956970 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/FieldFilter.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/FieldFilter.java @@ -6,7 +6,7 @@ import java.util.Map; import com.google.common.base.Predicate; import eu.dnetlib.pace.model.Field; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/KeywordsClustering.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/KeywordsClustering.java index 769ecf53c..b95d1c713 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/KeywordsClustering.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/KeywordsClustering.java @@ -3,7 +3,7 @@ package eu.dnetlib.pace.clustering; import eu.dnetlib.pace.common.AbstractPaceFunctions; import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.model.Field; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import java.util.*; import java.util.stream.Collectors; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/LowercaseClustering.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/LowercaseClustering.java index 6fe525f16..309650f73 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/LowercaseClustering.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/LowercaseClustering.java @@ -8,7 +8,7 @@ import com.google.common.collect.Lists; import com.google.common.collect.Sets; import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.model.Field; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; @ClusteringClass("lowercase") public class LowercaseClustering extends AbstractClusteringFunction { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/NGramUtils.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/NGramUtils.java index aeb790f76..2391685b0 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/NGramUtils.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/NGramUtils.java @@ -2,7 +2,7 @@ package eu.dnetlib.pace.clustering; import java.util.Set; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import eu.dnetlib.pace.common.AbstractPaceFunctions; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonClustering.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonClustering.java index 26b07f020..db8d90bce 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonClustering.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonClustering.java @@ -5,7 +5,7 @@ import eu.dnetlib.pace.common.AbstractPaceFunctions; import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.model.Person; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import java.util.Collection; import java.util.List; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SpaceTrimmingFieldValue.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SpaceTrimmingFieldValue.java index fd8e7a3cc..50cea4db3 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SpaceTrimmingFieldValue.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SpaceTrimmingFieldValue.java @@ -5,8 +5,8 @@ import java.util.List; import java.util.Map; import eu.dnetlib.pace.config.Config; -import org.apache.commons.lang.RandomStringUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.lang3.StringUtils; import com.google.common.collect.Lists; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java index a4901fd53..b980018e8 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java @@ -9,9 +9,8 @@ import eu.dnetlib.pace.clustering.NGramUtils; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.model.FieldList; import eu.dnetlib.pace.model.FieldListImpl; -import org.apache.commons.collections.CollectionUtils; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import java.io.IOException; import java.io.StringWriter; @@ -25,295 +24,293 @@ import java.util.stream.Collectors; * Set of common functions for the framework * * @author claudio - * */ public abstract class AbstractPaceFunctions { - //city map to be used when translating the city names into codes - private static Map cityMap = AbstractPaceFunctions.loadMapFromClasspath("/eu/dnetlib/pace/config/city_map.csv"); + //city map to be used when translating the city names into codes + private static Map cityMap = AbstractPaceFunctions.loadMapFromClasspath("/eu/dnetlib/pace/config/city_map.csv"); - //list of stopwords in different languages - protected static Set stopwords_en = loadFromClasspath("/eu/dnetlib/pace/config/stopwords_en.txt"); - protected static Set stopwords_de = loadFromClasspath("/eu/dnetlib/pace/config/stopwords_de.txt"); - protected static Set stopwords_es = loadFromClasspath("/eu/dnetlib/pace/config/stopwords_es.txt"); - protected static Set stopwords_fr = loadFromClasspath("/eu/dnetlib/pace/config/stopwords_fr.txt"); - protected static Set stopwords_it = loadFromClasspath("/eu/dnetlib/pace/config/stopwords_it.txt"); - protected static Set stopwords_pt = loadFromClasspath("/eu/dnetlib/pace/config/stopwords_pt.txt"); + //list of stopwords in different languages + protected static Set stopwords_en = loadFromClasspath("/eu/dnetlib/pace/config/stopwords_en.txt"); + protected static Set stopwords_de = loadFromClasspath("/eu/dnetlib/pace/config/stopwords_de.txt"); + protected static Set stopwords_es = loadFromClasspath("/eu/dnetlib/pace/config/stopwords_es.txt"); + protected static Set stopwords_fr = loadFromClasspath("/eu/dnetlib/pace/config/stopwords_fr.txt"); + protected static Set stopwords_it = loadFromClasspath("/eu/dnetlib/pace/config/stopwords_it.txt"); + protected static Set stopwords_pt = loadFromClasspath("/eu/dnetlib/pace/config/stopwords_pt.txt"); - //blacklist of ngrams: to avoid generic keys - protected static Set ngramBlacklist = loadFromClasspath("/eu/dnetlib/pace/config/ngram_blacklist.txt"); + //blacklist of ngrams: to avoid generic keys + protected static Set ngramBlacklist = loadFromClasspath("/eu/dnetlib/pace/config/ngram_blacklist.txt"); - private static final String alpha = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 "; - private static final String aliases_from = "⁰¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ⁿ₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎àáâäæãåāèéêëēėęəîïíīįìôöòóœøōõûüùúūßśšłžźżçćčñń"; - private static final String aliases_to = "0123456789+-=()n0123456789+-=()aaaaaaaaeeeeeeeeiiiiiioooooooouuuuussslzzzcccnn"; + private static final String alpha = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 "; + private static final String aliases_from = "⁰¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ⁿ₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎àáâäæãåāèéêëēėęəîïíīįìôöòóœøōõûüùúūßśšłžźżçćčñń"; + private static final String aliases_to = "0123456789+-=()n0123456789+-=()aaaaaaaaeeeeeeeeiiiiiioooooooouuuuussslzzzcccnn"; - //doi prefix for normalization - public final String DOI_PREFIX = "(https?:\\/\\/dx\\.doi\\.org\\/)|(doi:)"; + //doi prefix for normalization + public final String DOI_PREFIX = "(https?:\\/\\/dx\\.doi\\.org\\/)|(doi:)"; - private Pattern numberPattern = Pattern.compile("-?\\d+(\\.\\d+)?"); + private Pattern numberPattern = Pattern.compile("-?\\d+(\\.\\d+)?"); - private Pattern hexUnicodePattern = Pattern.compile("\\\\u(\\p{XDigit}{4})"); + private Pattern hexUnicodePattern = Pattern.compile("\\\\u(\\p{XDigit}{4})"); - protected final static FieldList EMPTY_FIELD = new FieldListImpl(); + protected final static FieldList EMPTY_FIELD = new FieldListImpl(); - protected String concat(final List l) { - return Joiner.on(" ").skipNulls().join(l); - } + protected String concat(final List l) { + return Joiner.on(" ").skipNulls().join(l); + } - protected String cleanup(final String s) { - final String s0 = unicodeNormalization(s.toLowerCase()); - final String s1 = fixAliases(s0); - final String s2 = nfd(s1); - final String s3 = s2.replaceAll("–", " "); - final String s4 = s3.replaceAll("&", " "); - final String s5 = s4.replaceAll(""", " "); - final String s6 = s5.replaceAll("−", " "); - final String s7 = s6.replaceAll("([0-9]+)", " $1 "); - final String s8 = s7.replaceAll("[^\\p{ASCII}]", ""); - final String s9 = s8.replaceAll("[\\p{Punct}]", " "); - final String s10 = s9.replaceAll("\\n", " "); - final String s11 = s10.replaceAll("(?m)\\s+", " "); - final String s12 = s11.trim(); - return s12; - } + protected String cleanup(final String s) { + final String s0 = unicodeNormalization(s.toLowerCase()); + final String s1 = fixAliases(s0); + final String s2 = nfd(s1); + final String s3 = s2.replaceAll("–", " "); + final String s4 = s3.replaceAll("&", " "); + final String s5 = s4.replaceAll(""", " "); + final String s6 = s5.replaceAll("−", " "); + final String s7 = s6.replaceAll("([0-9]+)", " $1 "); + final String s8 = s7.replaceAll("[^\\p{ASCII}]", ""); + final String s9 = s8.replaceAll("[\\p{Punct}]", " "); + final String s10 = s9.replaceAll("\\n", " "); + final String s11 = s10.replaceAll("(?m)\\s+", " "); + final String s12 = s11.trim(); + return s12; + } - protected boolean checkNumbers(final String a, final String b) { - final String numbersA = getNumbers(a); - final String numbersB = getNumbers(b); - final String romansA = getRomans(a); - final String romansB = getRomans(b); - return !numbersA.equals(numbersB) || !romansA.equals(romansB); - } + protected boolean checkNumbers(final String a, final String b) { + final String numbersA = getNumbers(a); + final String numbersB = getNumbers(b); + final String romansA = getRomans(a); + final String romansB = getRomans(b); + return !numbersA.equals(numbersB) || !romansA.equals(romansB); + } - protected String getRomans(final String s) { - final StringBuilder sb = new StringBuilder(); - for (final String t : s.split(" ")) { - sb.append(isRoman(t) ? t : ""); - } - return sb.toString(); - } + protected String getRomans(final String s) { + final StringBuilder sb = new StringBuilder(); + for (final String t : s.split(" ")) { + sb.append(isRoman(t) ? t : ""); + } + return sb.toString(); + } - protected boolean isRoman(final String s) { - return s.replaceAll("^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$", "qwertyuiop").equals("qwertyuiop"); - } + protected boolean isRoman(final String s) { + return s.replaceAll("^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$", "qwertyuiop").equals("qwertyuiop"); + } - protected String getNumbers(final String s) { - final StringBuilder sb = new StringBuilder(); - for (final String t : s.split(" ")) { - sb.append(isNumber(t)? t : ""); - } - return sb.toString(); - } + protected String getNumbers(final String s) { + final StringBuilder sb = new StringBuilder(); + for (final String t : s.split(" ")) { + sb.append(isNumber(t) ? t : ""); + } + return sb.toString(); + } - public boolean isNumber(String strNum) { - if (strNum == null) { - return false; - } - return numberPattern.matcher(strNum).matches(); - } + public boolean isNumber(String strNum) { + if (strNum == null) { + return false; + } + return numberPattern.matcher(strNum).matches(); + } - protected static String fixAliases(final String s) { - final StringBuilder sb = new StringBuilder(); - for (final char ch : Lists.charactersOf(s)) { - final int i = StringUtils.indexOf(aliases_from, ch); - sb.append(i >= 0 ? aliases_to.charAt(i) : ch); - } - return sb.toString(); - } + protected static String fixAliases(final String s) { + final StringBuilder sb = new StringBuilder(); + for (final char ch : Lists.charactersOf(s)) { + final int i = StringUtils.indexOf(aliases_from, ch); + sb.append(i >= 0 ? aliases_to.charAt(i) : ch); + } + return sb.toString(); + } - protected String removeSymbols(final String s) { - final StringBuilder sb = new StringBuilder(); + protected String removeSymbols(final String s) { + final StringBuilder sb = new StringBuilder(); - for (final char ch : Lists.charactersOf(s)) { - sb.append(StringUtils.contains(alpha, ch) ? ch : " "); - } - return sb.toString().replaceAll("\\s+", " "); - } + for (final char ch : Lists.charactersOf(s)) { + sb.append(StringUtils.contains(alpha, ch) ? ch : " "); + } + return sb.toString().replaceAll("\\s+", " "); + } - protected String getFirstValue(final Field values) { - return (values != null) && !Iterables.isEmpty(values) ? Iterables.getFirst(values, EMPTY_FIELD).stringValue() : ""; - } + protected String getFirstValue(final Field values) { + return (values != null) && !Iterables.isEmpty(values) ? Iterables.getFirst(values, EMPTY_FIELD).stringValue() : ""; + } - protected boolean notNull(final String s) { - return s != null; - } + protected boolean notNull(final String s) { + return s != null; + } - protected String normalize(final String s) { - return nfd(unicodeNormalization(s)) - .toLowerCase() - // do not compact the regexes in a single expression, would cause StackOverflowError in case of large input strings - .replaceAll("[^ \\w]+", "") - .replaceAll("(\\p{InCombiningDiacriticalMarks})+", "") - .replaceAll("(\\p{Punct})+", " ") - .replaceAll("(\\d)+", " ") - .replaceAll("(\\n)+", " ") - .trim(); - } + protected String normalize(final String s) { + return nfd(unicodeNormalization(s)) + .toLowerCase() + // do not compact the regexes in a single expression, would cause StackOverflowError in case of large input strings + .replaceAll("[^ \\w]+", "") + .replaceAll("(\\p{InCombiningDiacriticalMarks})+", "") + .replaceAll("(\\p{Punct})+", " ") + .replaceAll("(\\d)+", " ") + .replaceAll("(\\n)+", " ") + .trim(); + } - public String nfd(final String s) { - return Normalizer.normalize(s, Normalizer.Form.NFD); - } + public String nfd(final String s) { + return Normalizer.normalize(s, Normalizer.Form.NFD); + } - public String unicodeNormalization(final String s) { + public String unicodeNormalization(final String s) { - Matcher m = hexUnicodePattern.matcher(s); - StringBuffer buf = new StringBuffer(s.length()); - while (m.find()) { - String ch = String.valueOf((char) Integer.parseInt(m.group(1), 16)); - m.appendReplacement(buf, Matcher.quoteReplacement(ch)); - } - m.appendTail(buf); - return buf.toString(); - } + Matcher m = hexUnicodePattern.matcher(s); + StringBuffer buf = new StringBuffer(s.length()); + while (m.find()) { + String ch = String.valueOf((char) Integer.parseInt(m.group(1), 16)); + m.appendReplacement(buf, Matcher.quoteReplacement(ch)); + } + m.appendTail(buf); + return buf.toString(); + } - protected String filterStopWords(final String s, final Set stopwords) { - final StringTokenizer st = new StringTokenizer(s); - final StringBuilder sb = new StringBuilder(); - while (st.hasMoreTokens()) { - final String token = st.nextToken(); - if (!stopwords.contains(token)) { - sb.append(token); - sb.append(" "); - } - } - return sb.toString().trim(); - } + protected String filterStopWords(final String s, final Set stopwords) { + final StringTokenizer st = new StringTokenizer(s); + final StringBuilder sb = new StringBuilder(); + while (st.hasMoreTokens()) { + final String token = st.nextToken(); + if (!stopwords.contains(token)) { + sb.append(token); + sb.append(" "); + } + } + return sb.toString().trim(); + } - public String filterAllStopWords(String s) { + public String filterAllStopWords(String s) { - s = filterStopWords(s, stopwords_en); - s = filterStopWords(s, stopwords_de); - s = filterStopWords(s, stopwords_it); - s = filterStopWords(s, stopwords_fr); - s = filterStopWords(s, stopwords_pt); - s = filterStopWords(s, stopwords_es); + s = filterStopWords(s, stopwords_en); + s = filterStopWords(s, stopwords_de); + s = filterStopWords(s, stopwords_it); + s = filterStopWords(s, stopwords_fr); + s = filterStopWords(s, stopwords_pt); + s = filterStopWords(s, stopwords_es); - return s; - } + return s; + } - protected Collection filterBlacklisted(final Collection set, final Set ngramBlacklist) { - final Set newset = Sets.newLinkedHashSet(); - for (final String s : set) { - if (!ngramBlacklist.contains(s)) { - newset.add(s); - } - } - return newset; - } + protected Collection filterBlacklisted(final Collection set, final Set ngramBlacklist) { + final Set newset = Sets.newLinkedHashSet(); + for (final String s : set) { + if (!ngramBlacklist.contains(s)) { + newset.add(s); + } + } + return newset; + } - public static Set loadFromClasspath(final String classpath) { - final Set h = Sets.newHashSet(); - try { - for (final String s : IOUtils.readLines(NGramUtils.class.getResourceAsStream(classpath))) { - h.add(s); - } - } catch (final Throwable e) { - return Sets.newHashSet(); - } - return h; - } + public static Set loadFromClasspath(final String classpath) { + final Set h = Sets.newHashSet(); + try { + for (final String s : IOUtils.readLines(NGramUtils.class.getResourceAsStream(classpath))) { + h.add(s); + } + } catch (final Throwable e) { + return Sets.newHashSet(); + } + return h; + } - public static Map loadMapFromClasspath(final String classpath) { - final Map m = new HashMap<>(); - try { - for (final String s: IOUtils.readLines(AbstractPaceFunctions.class.getResourceAsStream(classpath))) { - //string is like this: code;word1;word2;word3 - String[] line = s.split(";"); - String value = line[0]; - for (int i=1; i(); - } - return m; - } + public static Map loadMapFromClasspath(final String classpath) { + final Map m = new HashMap<>(); + try { + for (final String s : IOUtils.readLines(AbstractPaceFunctions.class.getResourceAsStream(classpath))) { + //string is like this: code;word1;word2;word3 + String[] line = s.split(";"); + String value = line[0]; + for (int i = 1; i < line.length; i++) { + m.put(line[i].toLowerCase(), value); + } + } + } catch (final Throwable e) { + return new HashMap<>(); + } + return m; + } - public String removeKeywords(String s, Set keywords) { + public String removeKeywords(String s, Set keywords) { - s = " " + s + " "; - for (String k: keywords ) { - s = s.replaceAll(k.toLowerCase(), ""); - } + s = " " + s + " "; + for (String k : keywords) { + s = s.replaceAll(k.toLowerCase(), ""); + } - return s.trim(); - } + return s.trim(); + } - public double commonElementsPercentage(Set s1, Set s2){ + public double commonElementsPercentage(Set s1, Set s2) { - int longer = (s1.size()>s2.size())?s1.size():s2.size(); + double longer = Math.max(s1.size(), s2.size()); + return (double) s1.stream().filter(s2::contains).count() / longer; + } - return (double)CollectionUtils.intersection(s1,s2).size()/(double)longer; - } + //convert the set of keywords to codes + public Set toCodes(Set keywords, Map translationMap) { + return keywords.stream().map(s -> translationMap.get(s)).collect(Collectors.toSet()); + } - //convert the set of keywords to codes - public Set toCodes(Set keywords, Map translationMap) { - return keywords.stream().map(s -> translationMap.get(s)).collect(Collectors.toSet()); - } + public Set keywordsToCodes(Set keywords, Map translationMap) { + return toCodes(keywords, translationMap); + } - public Set keywordsToCodes(Set keywords, Map translationMap) { - return toCodes(keywords, translationMap); - } + public Set citiesToCodes(Set keywords) { + return toCodes(keywords, cityMap); + } - public Set citiesToCodes(Set keywords) { - return toCodes(keywords, cityMap); - } + protected String firstLC(final String s) { + return StringUtils.substring(s, 0, 1).toLowerCase(); + } - protected String firstLC(final String s) { - return StringUtils.substring(s, 0, 1).toLowerCase(); - } + protected Iterable tokens(final String s, final int maxTokens) { + return Iterables.limit(Splitter.on(" ").omitEmptyStrings().trimResults().split(s), maxTokens); + } - protected Iterable tokens(final String s, final int maxTokens) { - return Iterables.limit(Splitter.on(" ").omitEmptyStrings().trimResults().split(s), maxTokens); - } + public String normalizePid(String pid) { + return pid.toLowerCase().replaceAll(DOI_PREFIX, ""); + } - public String normalizePid(String pid) { - return pid.toLowerCase().replaceAll(DOI_PREFIX, ""); - } + //get the list of keywords into the input string + public Set getKeywords(String s1, Map translationMap, int windowSize) { - //get the list of keywords into the input string - public Set getKeywords(String s1, Map translationMap, int windowSize){ + String s = s1; - String s = s1; + List tokens = Arrays.asList(s.toLowerCase().split(" ")); - List tokens = Arrays.asList(s.toLowerCase().split(" ")); + Set codes = new HashSet<>(); - Set codes = new HashSet<>(); + if (tokens.size() < windowSize) + windowSize = tokens.size(); - if (tokens.size() getCities(String s1, int windowSize) { + return getKeywords(s1, cityMap, windowSize); + } - public Set getCities(String s1, int windowSize) { - return getKeywords(s1, cityMap, windowSize); - } - - public static String readFromClasspath(final String filename, final Class clazz) { - final StringWriter sw = new StringWriter(); - try { - IOUtils.copy(clazz.getResourceAsStream(filename), sw); - return sw.toString(); - } catch (final IOException e) { - throw new RuntimeException("cannot load resource from classpath: " + filename); - } - } + public static String readFromClasspath(final String filename, final Class clazz) { + final StringWriter sw = new StringWriter(); + try { + IOUtils.copy(clazz.getResourceAsStream(filename), sw); + return sw.toString(); + } catch (final IOException e) { + throw new RuntimeException("cannot load resource from classpath: " + filename); + } + } } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/WfConfig.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/WfConfig.java index 3cc5a38a2..78fc18a13 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/WfConfig.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/WfConfig.java @@ -4,7 +4,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.collect.Lists; import com.google.common.collect.Sets; import eu.dnetlib.pace.util.PaceException; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import java.io.IOException; import java.io.Serializable; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java index 12c578c11..f7831edaa 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java @@ -1,8 +1,9 @@ package eu.dnetlib.pace.model; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.base.Splitter; import com.google.common.collect.Lists; -import com.google.gson.Gson; import eu.dnetlib.pace.config.Type; import java.io.Serializable; @@ -103,7 +104,11 @@ public class FieldDef implements Serializable { @Override public String toString() { - return new Gson().toJson(this); + try { + return new ObjectMapper().writeValueAsString(this); + } catch (JsonProcessingException e) { + return null; + } } } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldListImpl.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldListImpl.java index d4a11c050..635178b83 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldListImpl.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldListImpl.java @@ -1,11 +1,11 @@ package eu.dnetlib.pace.model; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.base.Function; import com.google.common.base.Joiner; -import com.google.common.base.Predicate; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; -import com.google.gson.Gson; import eu.dnetlib.pace.config.Type; import java.util.Collection; @@ -283,7 +283,12 @@ public class FieldListImpl extends AbstractField implements FieldList { case String: return Joiner.on(" ").join(stringList()); case JSON: - final String json = new Gson().toJson(stringList()); + String json; + try { + json = new ObjectMapper().writeValueAsString(this); + } catch (JsonProcessingException e) { + json = null; + } return json; default: throw new IllegalArgumentException("Unknown type: " + getType().toString()); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldValueImpl.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldValueImpl.java index bf861276e..0a72c07c6 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldValueImpl.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldValueImpl.java @@ -2,12 +2,12 @@ package eu.dnetlib.pace.model; import java.net.MalformedURLException; import java.net.URL; +import java.util.Collections; import java.util.Iterator; import java.util.List; import eu.dnetlib.pace.config.Type; -import org.apache.commons.collections.iterators.SingletonIterator; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; /** * The Class FieldValueImpl. @@ -124,7 +124,7 @@ public class FieldValueImpl extends AbstractField implements FieldValue { @Override @SuppressWarnings("unchecked") public Iterator iterator() { - return new SingletonIterator(this); + return Collections.singleton((Field) this).iterator(); } } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/Author.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/Author.java deleted file mode 100644 index 17bd49d84..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/Author.java +++ /dev/null @@ -1,129 +0,0 @@ -package eu.dnetlib.pace.model.gt; - -import java.util.List; -import java.util.Set; - -import org.apache.commons.lang.StringUtils; - -import com.google.common.collect.ComparisonChain; -import com.google.common.collect.Lists; -import com.google.common.collect.Ordering; -import com.google.common.collect.Sets; -import com.google.gson.Gson; - -public class Author implements Comparable { - - private String id; - private String fullname; - private String firstname; - private String secondnames; - - private List matches = Lists.newArrayList(); - private Set coauthors = Sets.newHashSet(); - private SubjectsMap subjectsMap = new SubjectsMap(); - - public Author() { - super(); - } - - public Author(final Author a) { - this.id = a.getId(); - this.fullname = a.getFullname(); - this.firstname = a.getFirstname(); - this.secondnames = a.getSecondnames(); - - this.matches = a.getMatches(); - this.coauthors = a.getCoauthors(); - this.subjectsMap = a.getSubjectsMap(); - } - - public boolean hasMatches() { - return (getMatches() != null) && !getMatches().isEmpty(); - } - - public boolean hasCoauthors() { - return (getCoauthors() != null) && !getCoauthors().isEmpty(); - } - - public boolean isWellFormed() { - return StringUtils.isNotBlank(getSecondnames()) && StringUtils.isNotBlank(getFirstname()); - } - - public String getId() { - return id; - } - - public void setId(final String id) { - this.id = id; - } - - public String getFullname() { - return fullname; - } - - public void setFullname(final String fullname) { - this.fullname = fullname; - } - - public String getFirstname() { - return firstname; - } - - public void setFirstname(final String firstname) { - this.firstname = firstname; - } - - public String getSecondnames() { - return secondnames; - } - - public void setSecondnames(final String secondnames) { - this.secondnames = secondnames; - } - - public List getMatches() { - return matches; - } - - public void setMatches(final List matches) { - this.matches = matches; - } - - public Set getCoauthors() { - return coauthors; - } - - public void setCoauthors(final Set coauthors) { - this.coauthors = coauthors; - } - - @Override - public String toString() { - return new Gson().toJson(this); - } - - @Override - public int hashCode() { - return getId().hashCode(); - } - - @Override - public int compareTo(final Author o) { - return ComparisonChain.start() - .compare(this.getId(), o.getId(), Ordering.natural().nullsLast()) - .result(); - } - - @Override - public boolean equals(final Object o) { - return (o instanceof Author) && getId().equals(((Author) o).getId()); - } - - public SubjectsMap getSubjectsMap() { - return subjectsMap; - } - - public void setSubjectsMap(final SubjectsMap subjectsMap) { - this.subjectsMap = subjectsMap; - } -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/AuthorSet.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/AuthorSet.java deleted file mode 100644 index c3f2576be..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/AuthorSet.java +++ /dev/null @@ -1,37 +0,0 @@ -package eu.dnetlib.pace.model.gt; - -import com.google.gson.Gson; - -public class AuthorSet { - - private String id; - private Authors authors; - - public AuthorSet(final String id, final Authors authors) { - super(); - this.id = id; - this.authors = authors; - } - - public String getId() { - return id; - } - - public void setId(final String id) { - this.id = id; - } - - public Authors getAuthors() { - return authors; - } - - public void setAuthors(final Authors authors) { - this.authors = authors; - } - - @Override - public String toString() { - return new Gson().toJson(this); - } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/Authors.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/Authors.java deleted file mode 100644 index e74c43816..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/Authors.java +++ /dev/null @@ -1,54 +0,0 @@ -package eu.dnetlib.pace.model.gt; - -import java.util.Collection; -import java.util.HashSet; - -import com.google.common.collect.ComparisonChain; -import com.google.common.collect.Ordering; -import com.google.common.collect.Sets; -import com.google.gson.Gson; - -public class Authors extends HashSet implements Comparable { - - private static final long serialVersionUID = -6878376220805286142L; - - public Authors() { - super(); - } - - public Authors(final Collection authors) { - super(authors); - } - - public Authors(final Author author) { - super(Sets.newHashSet(author)); - } - - @Override - public int compareTo(final Authors a) { - return ComparisonChain.start() - .compare(this.size(), a.size(), Ordering.natural().nullsLast()) - .result(); - } - - @Override - public String toString() { - return new Gson().toJson(this); - } - - @Override - public boolean equals(final Object o) { - final boolean res = o instanceof Authors; - return res && (Sets.intersection(this, (Authors) o).size() == this.size()); - } - - @Override - public int hashCode() { - int res = 0; - for (final Author a : this) { - res += a.hashCode(); - } - return res; - } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/CoAuthor.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/CoAuthor.java deleted file mode 100644 index d4ce32de5..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/CoAuthor.java +++ /dev/null @@ -1,50 +0,0 @@ -package eu.dnetlib.pace.model.gt; - -import com.google.gson.Gson; -import org.apache.commons.lang.StringUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -public class CoAuthor extends Author { - - private static final Log log = LogFactory.getLog(CoAuthor.class); - private String anchorId = null; - - public CoAuthor() { - super(); - } - - public CoAuthor(final Author author) { - super(author); - } - - public boolean hasAnchorId() { - return StringUtils.isNotBlank(getAnchorId()); - } - - public String getAnchorId() { - return anchorId; - } - - public void setAnchorId(final String anchorId) { - this.anchorId = anchorId; - } - - @Override - public String toString() { - return new Gson().toJson(this); - } - - @Override - public int hashCode() { - return getId() != null ? getId().hashCode() : getFullname().hashCode(); - } - - @Override - public boolean equals(final Object o) { - return (o instanceof CoAuthor) && StringUtils.isNotBlank(getId()) ? - getId().equals(((CoAuthor) o).getId()) : - getFullname().equals(((CoAuthor) o).getFullname()); - } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/CoAuthorSet.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/CoAuthorSet.java deleted file mode 100644 index 90898f624..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/CoAuthorSet.java +++ /dev/null @@ -1,36 +0,0 @@ -package eu.dnetlib.pace.model.gt; - -import com.google.gson.Gson; - -public class CoAuthorSet { - - private Author author; - private Authors coAuthors; - - public CoAuthorSet(final Author author, final Authors coAuthors) { - super(); - this.author = author; - this.coAuthors = coAuthors; - } - - public Author getAuthor() { - return author; - } - - public void setAuthor(final Author author) { - this.author = author; - } - - public Authors getCoAuthors() { - return coAuthors; - } - - public void setCoAuthors(final Authors coAuthors) { - this.coAuthors = coAuthors; - } - - @Override - public String toString() { - return new Gson().toJson(this); - } -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/CoAuthorSetLite.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/CoAuthorSetLite.java deleted file mode 100644 index a48e2d8a4..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/CoAuthorSetLite.java +++ /dev/null @@ -1,40 +0,0 @@ -package eu.dnetlib.pace.model.gt; - -import java.util.Set; - -import com.google.gson.Gson; - -public class CoAuthorSetLite { - - private String id; - - private Set coAuthors; - - public CoAuthorSetLite(final String id, final Set coAuthors) { - super(); - this.id = id; - this.coAuthors = coAuthors; - } - - public Set getCoAuthors() { - return coAuthors; - } - - public void setCoAuthors(final Set coAuthors) { - this.coAuthors = coAuthors; - } - - public String getId() { - return id; - } - - public void setId(final String id) { - this.id = id; - } - - @Override - public String toString() { - return new Gson().toJson(this); - } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/CoAuthors.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/CoAuthors.java deleted file mode 100644 index 8e7eca269..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/CoAuthors.java +++ /dev/null @@ -1,78 +0,0 @@ -package eu.dnetlib.pace.model.gt; - -import java.util.Collection; -import java.util.HashSet; - -import com.google.common.base.Function; -import com.google.common.collect.ComparisonChain; -import com.google.common.collect.Ordering; -import com.google.common.collect.Sets; -import com.google.gson.Gson; - -public class CoAuthors extends HashSet implements Comparable { - - private static final long serialVersionUID = 2525591524516562892L; - - private Function hashFunction; - - private static Function defaultHashFunction = new Function() { - - @Override - public Integer apply(final CoAuthors input) { - int res = 0; - for (final CoAuthor a : input) { - res += a.hashCode(); - } - return res; - - } - }; - - public CoAuthors() { - super(); - } - - public CoAuthors(final Collection coauthors) { - super(coauthors); - } - - public CoAuthors(final CoAuthor coauthor) { - super(Sets.newHashSet(coauthor)); - } - - public Function getHashFunction() { - return hashFunction; - } - - public void setHashFunction(final Function hashFunction) { - this.hashFunction = hashFunction; - } - - @Override - public int compareTo(final CoAuthors a) { - return ComparisonChain.start() - .compare(this.size(), a.size(), Ordering.natural().nullsLast()) - .result(); - } - - @Override - public String toString() { - return new Gson().toJson(this); - } - - @Override - public boolean equals(final Object o) { - final boolean res = o instanceof CoAuthors; - return res && (Sets.intersection(this, (CoAuthors) o).size() == this.size()); - } - - public String hashCodeString() { - return String.valueOf(hashCode()); - } - - @Override - public int hashCode() { - return (getHashFunction() != null) ? getHashFunction().apply(this) : defaultHashFunction.apply(this); - } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/GTAuthor.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/GTAuthor.java deleted file mode 100644 index c9d4797e3..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/GTAuthor.java +++ /dev/null @@ -1,196 +0,0 @@ -package eu.dnetlib.pace.model.gt; - -import java.util.Collections; -import java.util.Comparator; -import java.util.List; -import java.util.Map; - -import com.google.common.base.Function; -import com.google.common.collect.ComparisonChain; -import com.google.common.collect.Iterables; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import com.google.common.collect.Ordering; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; - -public class GTAuthor implements Comparable { - - private String id; - private Author author; - private Authors merged; - private CoAuthors coAuthors; - private boolean anchor; - - public GTAuthor() {} - - public GTAuthor(final String id, final Authors merged, final CoAuthors coAuthors, final boolean anchor) { - super(); - - if ((merged == null) || merged.isEmpty()) - throw new IllegalArgumentException("empty merged author set, id: " + id); - - this.author = pickAuthor(merged); - this.id = id; - this.merged = merged; - this.coAuthors = coAuthors; - this.anchor = anchor; - } - - class AuthorFrequency extends Author { - - private Integer frequency = new Integer(1); - - public AuthorFrequency(final Author a) { - super(a); - } - - public void increment() { - setFrequency(getFrequency() + 1); - } - - public Integer getFrequency() { - return frequency; - } - - public void setFrequency(final Integer frequency) { - this.frequency = frequency; - } - } - - private Author pickAuthor(final Authors merged) { - final List freq = getFrequencies(merged); - Collections.sort(freq, Collections.reverseOrder(new Comparator() { - - @Override - public int compare(final AuthorFrequency o1, final AuthorFrequency o2) { - return ComparisonChain.start().compare(o1.getFullname().length(), o2.getFullname().length()).compare(o1.getFrequency(), o2.getFrequency()) - .result(); - } - })); - - return Iterables.getFirst(freq, null); - } - - private List getFrequencies(final Authors merged) { - final Map countMap = Maps.newHashMap(); - for (final Author a : merged) { - final Integer count = countMap.get(a.getFullname()); - if (count == null) { - countMap.put(a.getFullname(), new Integer(1)); - } else { - countMap.put(a.getFullname(), count + 1); - } - } - - return Lists.newArrayList(Iterables.transform(merged, new Function() { - - @Override - public AuthorFrequency apply(final Author a) { - final AuthorFrequency af = new AuthorFrequency(a); - final Integer freq = countMap.get(af.getFullname()); - af.setFrequency(freq); - return af; - } - })); - } - - public String getId() { - return id; - } - - public void setId(final String id) { - this.id = id; - } - - public Author getAuthor() { - return author; - } - - public void setAuthor(final Author author) { - this.author = author; - } - - public boolean hasMerged() { - return (getMerged() != null) && !getMerged().isEmpty(); - } - - public Authors getMerged() { - return merged; - } - - public void setMerged(final Authors merged) { - this.merged = merged; - } - - public boolean hasCoAuthors() { - return (getCoAuthors() != null) && !getCoAuthors().isEmpty(); - } - - public CoAuthors getCoAuthors() { - return coAuthors; - } - - public void setCoAuthors(final CoAuthors coAuthors) { - this.coAuthors = coAuthors; - } - - public boolean isAnchor() { - return anchor; - } - - public void setAnchor(final boolean anchor) { - this.anchor = anchor; - } - - public static GTAuthor fromJson(final String json) { - final Gson gson = new Gson(); - return gson.fromJson(json, GTAuthor.class); - } - - public static List fromOafJson(final List json) { - - final GsonBuilder gb = new GsonBuilder(); - gb.registerTypeAdapter(GTAuthor.class, new GTAuthorOafSerialiser()); - final Gson gson = gb.create(); - - return Lists.newArrayList(Iterables.transform(json, new Function() { - @Override - public GTAuthor apply(final String s) { - return gson.fromJson(s, GTAuthor.class); - } - })); - } - - public static GTAuthor fromOafJson(final String json) { - - final GsonBuilder gb = new GsonBuilder(); - gb.registerTypeAdapter(GTAuthor.class, new GTAuthorOafSerialiser()); - final Gson gson = gb.create(); - - return gson.fromJson(json, GTAuthor.class); - } - - @Override - public String toString() { - return new Gson().toJson(this); - } - - @Override - public int hashCode() { - return getId().hashCode(); - } - - @Override - public int compareTo(final GTAuthor o) { - return ComparisonChain.start() - .compare(this.getId(), o.getId(), Ordering.natural().nullsLast()) - .result(); - } - - @Override - public boolean equals(final Object o) { - return (o instanceof GTAuthor) && getId().equals(((GTAuthor) o).getId()); - } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/GTAuthorOafSerialiser.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/GTAuthorOafSerialiser.java deleted file mode 100644 index cb541b953..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/GTAuthorOafSerialiser.java +++ /dev/null @@ -1,104 +0,0 @@ -package eu.dnetlib.pace.model.gt; - -import java.lang.reflect.Type; - -import com.google.common.base.Function; -import com.google.common.base.Joiner; -import com.google.common.collect.Iterables; -import com.google.common.collect.Lists; -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonDeserializer; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonParseException; - -public class GTAuthorOafSerialiser implements JsonDeserializer { - - private static final String VALUE = "value"; - private static final String SECONDNAMES = "secondnames"; - private static final String FIRSTNAME = "firstname"; - private static final String FULLNAME = "fullname"; - private static final String ID = "id"; - private static final String MERGEDPERSON = "mergedperson"; - private static final String METADATA = "metadata"; - private static final String ANCHOR_ID = "anchorId"; - private static final String COAUTHOR = "coauthor"; - - @Override - public GTAuthor deserialize(final JsonElement json, final Type typeOfT, final JsonDeserializationContext context) throws JsonParseException { - final GTAuthor gta = new GTAuthor(); - - gta.setAuthor(getAuthor(json)); - gta.setMerged(getMerged(json)); - - gta.setCoAuthors(getCoAuthors(json)); - - return gta; - } - - private CoAuthors getCoAuthors(final JsonElement json) { - final JsonObject obj = json.getAsJsonObject(); - if (!obj.has(COAUTHOR)) return null; - return new CoAuthors(Lists.newArrayList(Iterables.transform(obj.get(COAUTHOR).getAsJsonArray(), - new Function() { - - @Override - public CoAuthor apply(final JsonElement in) { - final CoAuthor a = new CoAuthor(getAuthor(in)); - final JsonObject jsonObject = in.getAsJsonObject(); - if (jsonObject.has(ANCHOR_ID)) { - a.setAnchorId(jsonObject.get(ANCHOR_ID).getAsString()); - } - return a; - } - }))); - } - - private Author getAuthor(final JsonElement json) { - - final Author a = new Author(); - a.setCoauthors(null); - a.setMatches(null); - - final JsonObject jso = json.getAsJsonObject(); - - a.setId(jso.has(ID) ? jso.get(ID).getAsString() : null); - - final JsonObject jsonObject = json.getAsJsonObject(); - if (jsonObject.has(METADATA)) { - final JsonObject m = jsonObject.get(METADATA).getAsJsonObject(); - a.setFullname(getValue(m, FULLNAME)); - a.setFirstname(getValue(m, FIRSTNAME)); - a.setSecondnames(getValues(m, SECONDNAMES)); - } - return a; - } - - private Authors getMerged(final JsonElement json) { - final JsonObject obj = json.getAsJsonObject(); - if (!obj.has(MERGEDPERSON)) return null; - return new Authors(Lists.newArrayList(Iterables.transform(obj.get(MERGEDPERSON).getAsJsonArray(), - new Function() { - - @Override - public Author apply(final JsonElement in) { - return getAuthor(in); - } - }))); - } - - private String getValues(final JsonObject m, final String fieldName) { - return m.has(fieldName) ? Joiner.on(" ").join(Iterables.transform(m.get(fieldName).getAsJsonArray(), new Function() { - - @Override - public String apply(final JsonElement in) { - return in.getAsJsonObject().get(VALUE).getAsString(); - } - })) : null; - } - - private String getValue(final JsonObject m, final String fieldName) { - return m.has(fieldName) ? m.get(fieldName).getAsJsonObject().get(VALUE).getAsString() : null; - } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/Group.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/Group.java deleted file mode 100644 index 86d93deb9..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/Group.java +++ /dev/null @@ -1,44 +0,0 @@ -package eu.dnetlib.pace.model.gt; - -import java.util.List; - -import com.google.gson.Gson; - -public class Group { - - private String id; - private int size; - private List results; - - public Group() {} - - public String getId() { - return id; - } - - public void setId(final String id) { - this.id = id; - } - - public int getSize() { - return size; - } - - public void setSize(final int size) { - this.size = size; - } - - public List getResults() { - return results; - } - - public void setResults(final List results) { - this.results = results; - } - - @Override - public String toString() { - return new Gson().toJson(this); - } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/InvertedAuthor.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/InvertedAuthor.java deleted file mode 100644 index b9fa7f966..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/InvertedAuthor.java +++ /dev/null @@ -1,41 +0,0 @@ -package eu.dnetlib.pace.model.gt; - -import java.util.Collection; - -import com.google.gson.Gson; - -public class InvertedAuthor { - - private Author author; - private Collection ids; - - public InvertedAuthor() {} - - public InvertedAuthor(final Author author, final Collection ids) { - super(); - this.author = author; - this.ids = ids; - } - - public Author getAuthor() { - return author; - } - - public void setAuthor(final Author author) { - this.author = author; - } - - public Collection getIds() { - return ids; - } - - public void setIds(final Collection ids) { - this.ids = ids; - } - - @Override - public String toString() { - return new Gson().toJson(this); - } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/Match.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/Match.java deleted file mode 100644 index e919069c7..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/Match.java +++ /dev/null @@ -1,31 +0,0 @@ -package eu.dnetlib.pace.model.gt; - -public class Match extends Author { - - private double score; - - public Match() { - super(); - } - - public static Match from(final Author a) { - final Match m = new Match(); - if (a.isWellFormed()) { - m.setFirstname(a.getFirstname()); - m.setSecondnames(a.getSecondnames()); - } - m.setFullname(a.getFullname()); - m.setId(a.getId()); - - return m; - } - - public double getScore() { - return score; - } - - public void setScore(final double score) { - this.score = score; - } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/Result.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/Result.java deleted file mode 100644 index d35c3bb2c..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/Result.java +++ /dev/null @@ -1,72 +0,0 @@ -package eu.dnetlib.pace.model.gt; - -import java.util.List; - -import com.google.common.collect.ComparisonChain; -import com.google.common.collect.Ordering; -import com.google.gson.Gson; - -public class Result implements Comparable { - - private String id; - private String originalId; - private String title; - private List authors; - - private double meanDistance; - - public Result() {} - - public String getId() { - return id; - } - - public void setId(final String id) { - this.id = id; - } - - public String getOriginalId() { - return originalId; - } - - public void setOriginalId(final String originalId) { - this.originalId = originalId; - } - - public String getTitle() { - return title; - } - - public void setTitle(final String title) { - this.title = title; - } - - public List getAuthors() { - return authors; - } - - public void setAuthors(final List authors) { - this.authors = authors; - } - - @Override - public String toString() { - return new Gson().toJson(this); - } - - @Override - public int compareTo(final Result o) { - return ComparisonChain.start() - .compare(this.getAuthors().size(), o.getAuthors().size(), Ordering.natural().nullsLast()) - .result(); - } - - public double getMeanDistance() { - return meanDistance; - } - - public void setMeanDistance(final double meanDistance) { - this.meanDistance = meanDistance; - } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/Subjects.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/Subjects.java deleted file mode 100644 index fc2221aef..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/Subjects.java +++ /dev/null @@ -1,10 +0,0 @@ -package eu.dnetlib.pace.model.gt; - -import java.util.HashMap; - -/** - * Created by claudio on 07/03/16. - */ -public class Subjects extends HashMap { - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/SubjectsMap.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/SubjectsMap.java deleted file mode 100644 index 04ba4c6c1..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/gt/SubjectsMap.java +++ /dev/null @@ -1,35 +0,0 @@ -package eu.dnetlib.pace.model.gt; - -import java.util.HashMap; -import java.util.Map.Entry; - -/** - * Created by claudio on 07/03/16. - */ -public class SubjectsMap extends HashMap { - - public SubjectsMap mergeFrom(SubjectsMap sm) { - - for(Entry e : sm.entrySet()) { - if (!this.containsKey(e.getKey())) { - Subjects sub = new Subjects(); - - sub.putAll(e.getValue()); - - this.put(e.getKey(), sub); - } else { - for (Entry es : e.getValue().entrySet()) { - final Subjects subjects = this.get(e.getKey()); - if (subjects.containsKey(es.getKey())) { - subjects.put(es.getKey(), es.getValue() + subjects.get(es.getKey())); - } else { - subjects.put(es.getKey(), new Integer(1)); - } - } - } - } - - return this; - } - -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerNormalizedName.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerNormalizedName.java index b89cffaed..5f4615080 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerNormalizedName.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerNormalizedName.java @@ -5,7 +5,7 @@ import eu.dnetlib.pace.tree.support.AbstractComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; import eu.dnetlib.pace.config.Config; -import org.apache.commons.collections.CollectionUtils; + import java.util.Map; import java.util.Set; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SubStringLevenstein.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SubStringLevenstein.java index f76947930..0c4165bf6 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SubStringLevenstein.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SubStringLevenstein.java @@ -1,14 +1,14 @@ package eu.dnetlib.pace.tree; import eu.dnetlib.pace.config.Config; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import com.wcohen.ss.AbstractStringDistance; import eu.dnetlib.pace.config.Type; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.tree.support.AbstractComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; -import org.apache.commons.lang.StringUtils; + import java.util.Map; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/UrlMatcher.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/UrlMatcher.java index 34bbab7bf..fc98fc187 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/UrlMatcher.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/UrlMatcher.java @@ -3,7 +3,7 @@ package eu.dnetlib.pace.tree; import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.tree.support.ComparatorClass; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import java.net.MalformedURLException; import java.net.URL; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/YearMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/YearMatch.java index 64bd75b0c..5dda0e25f 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/YearMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/YearMatch.java @@ -4,7 +4,7 @@ import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.tree.support.AbstractComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import java.util.Map; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeProcessor.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeProcessor.java index abc685ec6..4828a5dd8 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeProcessor.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeProcessor.java @@ -1,14 +1,11 @@ package eu.dnetlib.pace.tree.support; import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.model.*; -import eu.dnetlib.pace.model.gt.Match; +import eu.dnetlib.pace.model.MapDocument; import eu.dnetlib.pace.util.PaceException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import java.io.Serializable; -import java.util.Map; /** * The compare between two documents is given by the weighted mean of the field distances diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java index 34a6aa2cf..b73b28f19 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java @@ -8,7 +8,7 @@ import eu.dnetlib.pace.tree.support.TreeProcessor; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.model.MapDocument; import eu.dnetlib.pace.model.MapDocumentComparator; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/Capitalise.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/Capitalise.java index 2d2510112..2de729045 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/Capitalise.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/Capitalise.java @@ -1,15 +1,15 @@ package eu.dnetlib.pace.util; -import org.apache.commons.lang.WordUtils; import com.google.common.base.Function; +import org.apache.commons.lang3.text.WordUtils; public class Capitalise implements Function { - private final char[] DELIM = { ' ', '-' }; + private final char[] DELIM = {' ', '-'}; - @Override - public String apply(final String s) { - return WordUtils.capitalize(s.toLowerCase(), DELIM); - } + @Override + public String apply(final String s) { + return WordUtils.capitalize(s.toLowerCase(), DELIM); + } }; From 24e2ab90923afb8cf5cdd22b39f5fc822d882935 Mon Sep 17 00:00:00 2001 From: "sandro.labruzzo" Date: Mon, 10 Feb 2020 12:50:45 +0100 Subject: [PATCH 123/449] [maven-release-plugin] prepare release dnet-dedup-4.0.0 --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index cb16ffea3..6ca718d56 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 4.0.0-SNAPSHOT + 4.0.0 ../pom.xml From 8e4211708eb35d2b29fef5053c7f62e69c727335 Mon Sep 17 00:00:00 2001 From: "sandro.labruzzo" Date: Mon, 10 Feb 2020 12:51:04 +0100 Subject: [PATCH 124/449] [maven-release-plugin] prepare for next development iteration --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 6ca718d56..48dacc360 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 4.0.0 + 4.0.1-SNAPSHOT ../pom.xml From 6e9b27f37d836dc4abb540b215665b6e9e25f153 Mon Sep 17 00:00:00 2001 From: miconis Date: Fri, 24 Apr 2020 14:36:42 +0200 Subject: [PATCH 125/449] implementation of the mechanism to truncate the string and the lists --- .../eu/dnetlib/pace/util/MapDocumentUtil.java | 19 +++++++++++++++++-- .../eu/dnetlib/pace/config/ConfigTest.java | 9 ++++++--- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java index a4d8c96c3..2f04767a2 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java @@ -29,7 +29,7 @@ public class MapDocumentUtil { switch (fdef.getType()) { case String: case Int: - stringField.put(fdef.getName(), new FieldValueImpl(fdef.getType(), fdef.getName(), getJPathString(fdef.getPath(), json))); + stringField.put(fdef.getName(), new FieldValueImpl(fdef.getType(), fdef.getName(), truncateValue(getJPathString(fdef.getPath(), json), fdef.getLength()))); break; case URL: String uv = getJPathString(fdef.getPath(), json); @@ -39,7 +39,7 @@ public class MapDocumentUtil { case List: case JSON: FieldListImpl fi = new FieldListImpl(fdef.getName(), fdef.getType()); - getJPathList(fdef.getPath(), json, fdef.getType()) + truncateList(getJPathList(fdef.getPath(), json, fdef.getType()), fdef.getSize()) .stream() .map(item -> new FieldValueImpl(Type.String, fdef.getName(), item)) .forEach(fi::add); @@ -104,4 +104,19 @@ public class MapDocumentUtil { } + public static String truncateValue(String value, int length) { + + if (length == -1 || length > value.length()) + return value; + + return value.substring(0, length); + } + + public static List truncateList(List list, int size) { + if (size == -1 || size > list.size()) + return list; + + return list.subList(0, size); + } + } diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java index 0a8964081..4abf40cc8 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java @@ -83,11 +83,14 @@ public class ConfigTest extends AbstractPaceTest { final MapDocument mapDocument = MapDocumentUtil.asMapDocumentWithJPath(dedupConf, json); - System.out.println("mapDocument = " + mapDocument.getFieldMap()); +// System.out.println("mapDocument = " + mapDocument.getFieldMap()); - JsonListMatch jsonListMatch = new JsonListMatch(params); +// JsonListMatch jsonListMatch = new JsonListMatch(params); +// +// jsonListMatch.compare(mapDocument.getFieldMap().get("pid"), mapDocument.getFieldMap().get("pid"), null); + + System.out.println("mapDocument = " + mapDocument.getFieldMap().get("title").stringValue()); - jsonListMatch.compare(mapDocument.getFieldMap().get("pid"), mapDocument.getFieldMap().get("pid"), null); } From 4365ba41c9a185786ab57be537bcdd38345efbe4 Mon Sep 17 00:00:00 2001 From: miconis Date: Fri, 24 Apr 2020 14:38:58 +0200 Subject: [PATCH 126/449] [maven-release-plugin] prepare release dnet-dedup-4.0.1 --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 48dacc360..da2faf807 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 4.0.1-SNAPSHOT + 4.0.1 ../pom.xml From 48c094f599ebbc073abd26be54dc624e4784b281 Mon Sep 17 00:00:00 2001 From: miconis Date: Fri, 24 Apr 2020 14:39:01 +0200 Subject: [PATCH 127/449] [maven-release-plugin] prepare for next development iteration --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index da2faf807..0d1864591 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 4.0.1 + 4.0.2-SNAPSHOT ../pom.xml From 411d1cc24f8e3d394a8965808cbe21e625c35ab9 Mon Sep 17 00:00:00 2001 From: miconis Date: Thu, 11 Jun 2020 10:46:46 +0200 Subject: [PATCH 128/449] implementation of the test for the dedup and addition of new support classes --- dnet-pace-core/release.properties | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 dnet-pace-core/release.properties diff --git a/dnet-pace-core/release.properties b/dnet-pace-core/release.properties new file mode 100644 index 000000000..d6ab05af2 --- /dev/null +++ b/dnet-pace-core/release.properties @@ -0,0 +1,11 @@ +#release configuration +#Fri Apr 24 14:37:08 CEST 2020 +scm.tagNameFormat=@{project.artifactId}-@{project.version} +pushChanges=true +scm.url=scm\:git\:https\://code-repo.d4science.org/D-Net/dnet-dedup.git/dnet-pace-core +preparationGoals=clean verify +projectVersionPolicyId=default +remoteTagging=true +scm.commentPrefix=[maven-release-plugin] +exec.snapshotReleasePluginAllowed=false +completedPhase=scm-check-modifications From f933fd33e081745259d12ab2b89d181483f25462 Mon Sep 17 00:00:00 2001 From: miconis Date: Thu, 2 Jul 2020 17:04:17 +0200 Subject: [PATCH 129/449] implemented new function for clustering --- .../pace/clustering/WordsSuffixPrefix.java | 42 +++++++++++++++++++ .../clustering/ClusteringFunctionTest.java | 13 ++++++ 2 files changed, 55 insertions(+) create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/WordsSuffixPrefix.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/WordsSuffixPrefix.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/WordsSuffixPrefix.java new file mode 100644 index 000000000..6086ac0a8 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/WordsSuffixPrefix.java @@ -0,0 +1,42 @@ +package eu.dnetlib.pace.clustering; + +import java.util.Collection; +import java.util.Map; +import java.util.Set; + +import com.google.common.collect.Sets; +import eu.dnetlib.pace.config.Config; + +@ClusteringClass("wordssuffixprefix") +public class WordsSuffixPrefix extends AbstractClusteringFunction { + + public WordsSuffixPrefix(Map params) { + super(params); + } + + @Override + protected Collection doApply(Config conf, String s) { + return suffixPrefix(s, param("len"), param("max")); + } + + private Collection suffixPrefix(String s, int len, int max) { + + final int words = s.split(" ").length; + final Set bigrams = Sets.newLinkedHashSet(); + int i = 0; + while (++i < s.length() && bigrams.size() < max) { + int j = s.indexOf(" ", i); + + int offset = j + len + 1 < s.length() ? j + len + 1 : s.length(); + + if (j - len > 0) { + String bigram = s.substring(j - len, offset).replaceAll(" ", "").trim(); + if (bigram.length() >= 4) { + bigrams.add(words+bigram); + } + } + } + return bigrams; + } + +} diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java index 2bccdd5cb..832ba4bce 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java @@ -98,6 +98,19 @@ public class ClusteringFunctionTest extends AbstractPaceTest { System.out.println(sp.apply(conf, Lists.newArrayList(title(s)))); } + @Test + public void testWordsSuffixPrefix() { + + params.put("len", 3); + params.put("max", 4); + + final ClusteringFunction sp = new WordsSuffixPrefix(params); + + final String s = "Search for the Standard Model Higgs Boson"; + System.out.println(s); + System.out.println(sp.apply(conf, Lists.newArrayList(title(s)))); + } + @Test public void testFieldValue() { From c72055f543abd0e0d9932ce202d446863419f353 Mon Sep 17 00:00:00 2001 From: miconis Date: Thu, 2 Jul 2020 17:06:36 +0200 Subject: [PATCH 130/449] [maven-release-plugin] prepare release dnet-dedup-4.0.2 --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 0d1864591..a20fbf442 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 4.0.2-SNAPSHOT + 4.0.2 ../pom.xml From 7aa2001a8b417488631cc2ce78e74a66056a2f0a Mon Sep 17 00:00:00 2001 From: miconis Date: Thu, 2 Jul 2020 17:06:38 +0200 Subject: [PATCH 131/449] [maven-release-plugin] prepare for next development iteration --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index a20fbf442..3bc7480ee 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 4.0.2 + 4.0.3-SNAPSHOT ../pom.xml From 244a037a909bde87273e45520ae37068dc0fe5e7 Mon Sep 17 00:00:00 2001 From: miconis Date: Sun, 12 Jul 2020 10:13:54 +0200 Subject: [PATCH 132/449] implementation of a class to test the clustering functions --- dnet-pace-core/pom.xml.releaseBackup | 73 ++++++ pom.xml.releaseBackup | 333 +++++++++++++++++++++++++++ release.properties | 22 ++ 3 files changed, 428 insertions(+) create mode 100644 dnet-pace-core/pom.xml.releaseBackup create mode 100644 pom.xml.releaseBackup create mode 100644 release.properties diff --git a/dnet-pace-core/pom.xml.releaseBackup b/dnet-pace-core/pom.xml.releaseBackup new file mode 100644 index 000000000..0d1864591 --- /dev/null +++ b/dnet-pace-core/pom.xml.releaseBackup @@ -0,0 +1,73 @@ + + + + 4.0.0 + + + eu.dnetlib + dnet-dedup + 4.0.2-SNAPSHOT + ../pom.xml + + + dnet-pace-core + jar + + + + edu.cmu + secondstring + + + com.google.guava + guava + + + com.google.code.gson + gson + + + org.apache.commons + commons-lang3 + + + commons-io + commons-io + + + + org.antlr + stringtemplate + + + commons-logging + commons-logging + + + junit + junit + test + + + org.reflections + reflections + + + com.fasterxml.jackson.core + jackson-databind + + + org.apache.commons + commons-math3 + + + + com.jayway.jsonpath + json-path + + + + + + + diff --git a/pom.xml.releaseBackup b/pom.xml.releaseBackup new file mode 100644 index 000000000..d840af173 --- /dev/null +++ b/pom.xml.releaseBackup @@ -0,0 +1,333 @@ + + + + 4.0.0 + + eu.dnetlib + dnet-dedup + 4.0.2-SNAPSHOT + + pom + + http://www.d-net.research-infrastructures.eu + + + + The Apache Software License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0.txt + repo + A business-friendly OSS license + + + + + scm:git:https://code-repo.d4science.org/D-Net/dnet-dedup.git + HEAD + + + + dnet-pace-core + dnet-dedup-test + + + + Redmine + https://issue.openaire.research-infrastructures.eu/projects/openaire + + + + + + + dnet45-releases + D-Net 45 Releases + http://maven.research-infrastructures.eu/nexus/content/repositories/dnet45-releases + default + + + + + + dnet-deps + dnet-dependencies + http://maven.research-infrastructures.eu/nexus/content/repositories/dnet-deps + default + + + dnet45-releases + D-Net 45 Releases + http://maven.research-infrastructures.eu/nexus/content/repositories/dnet45-releases + default + + true + + + + dnet45-snapshots + D-Net 45 Snapshots + http://maven.research-infrastructures.eu/nexus/content/repositories/dnet45-snapshots + default + + true + + + + + cloudera + Cloudera Repository + https://repository.cloudera.com/artifactory/cloudera-repos + + true + + + false + + + + + target + target/classes + ${project.artifactId}-${project.version} + target/test-classes + + + + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.6.0 + + 1.8 + 1.8 + ${project.build.sourceEncoding} + + + + + org.apache.maven.plugins + maven-jar-plugin + 3.0.2 + + + + org.apache.maven.plugins + maven-source-plugin + 3.0.1 + + + attach-sources + verify + + jar-no-fork + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.19.1 + + true + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.10.4 + + true + + + + + org.apache.maven.plugins + maven-dependency-plugin + 3.0.0 + + + + org.apache.maven.plugins + maven-failsafe-plugin + 2.13 + + + integration-test + + integration-test + + + + verify + + verify + + + + + + + + + + + + org.apache.maven.plugins + maven-release-plugin + 2.5.3 + + + + + + + + + edu.cmu + secondstring + 1.0.0 + + + org.antlr + stringtemplate + 3.2 + + + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + + + + com.fasterxml.jackson.dataformat + jackson-dataformat-xml + ${jackson.version} + + + com.fasterxml.jackson.module + jackson-module-jsonSchema + ${jackson.version} + + + + + + org.apache.commons + commons-math3 + 3.6.1 + + + + com.google.guava + guava + ${google.guava.version} + + + com.google.code.gson + gson + ${google.gson.version} + + + + org.apache.commons + commons-lang3 + ${commons.lang.version} + + + + commons-io + commons-io + ${commons.io.version} + + + commons-collections + commons-collections + ${commons.collections.version} + + + commons-logging + commons-logging + ${commons.logging.version} + + + org.apache.spark + spark-core_2.11 + ${spark.version} + provided + + + org.apache.spark + spark-graphx_2.11 + ${spark.version} + provided + + + org.apache.spark + spark-sql_2.11 + ${spark.version} + provided + + + junit + junit + ${junit.version} + test + + + org.reflections + reflections + 0.9.10 + + + + org.scala-lang + scala-library + ${scala.version} + + + + org.apache.oozie + oozie-client + 5.1.0 + + + com.jayway.jsonpath + json-path + 2.4.0 + + + + + + + + + UTF-8 + UTF-8 + + 2.2.2 + 15.0 + + 2.2.0 + 2.6.6 + + 3.5 + 2.4 + 3.2.1 + 1.1.3 + + 4.9 + 2.11.8 + + false + + diff --git a/release.properties b/release.properties new file mode 100644 index 000000000..70a3c40b9 --- /dev/null +++ b/release.properties @@ -0,0 +1,22 @@ +#release configuration +#Thu Jul 02 17:06:39 CEST 2020 +scm.commentPrefix=[maven-release-plugin] +pushChanges=true +project.rel.eu.dnetlib\:dnet-dedup-test=4.0.2 +scm.tag=dnet-dedup-4.0.2 +remoteTagging=true +project.scm.eu.dnetlib\:dnet-dedup-test.empty=true +projectVersionPolicyId=default +scm.url=scm\:git\:https\://code-repo.d4science.org/D-Net/dnet-dedup.git +scm.tagNameFormat=@{project.artifactId}-@{project.version} +project.rel.eu.dnetlib\:dnet-dedup=4.0.2 +project.dev.eu.dnetlib\:dnet-pace-core=4.0.3-SNAPSHOT +preparationGoals=clean verify +project.scm.eu.dnetlib\:dnet-dedup.tag=HEAD +project.scm.eu.dnetlib\:dnet-dedup.developerConnection=scm\:git\:https\://code-repo.d4science.org/D-Net/dnet-dedup.git +exec.snapshotReleasePluginAllowed=false +project.dev.eu.dnetlib\:dnet-dedup=4.0.3-SNAPSHOT +project.scm.eu.dnetlib\:dnet-pace-core.empty=true +project.dev.eu.dnetlib\:dnet-dedup-test=4.0.3-SNAPSHOT +completedPhase=end-release +project.rel.eu.dnetlib\:dnet-pace-core=4.0.2 From d2861950ac3eca8671362c891c5f468cc7de395f Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Wed, 15 Jul 2020 16:49:47 +0200 Subject: [PATCH 133/449] wordssuffixprefix: adjust the token length according to the number of words; removed maven release temporary files --- .../pace/clustering/WordsSuffixPrefix.java | 15 + pom.xml.releaseBackup | 333 ------------------ release.properties | 22 -- 3 files changed, 15 insertions(+), 355 deletions(-) delete mode 100644 pom.xml.releaseBackup delete mode 100644 release.properties diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/WordsSuffixPrefix.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/WordsSuffixPrefix.java index 6086ac0a8..80459cbac 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/WordsSuffixPrefix.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/WordsSuffixPrefix.java @@ -22,6 +22,21 @@ public class WordsSuffixPrefix extends AbstractClusteringFunction { private Collection suffixPrefix(String s, int len, int max) { final int words = s.split(" ").length; + + // adjust the token length according to the number of words + switch (words) { + case 1: + return Sets.newLinkedHashSet(); + case 2: + return doSuffixPrefix(s, len+2, max, words); + case 3: + return doSuffixPrefix(s, len+1, max, words); + default: + return doSuffixPrefix(s, len, max, words); + } + } + + private Collection doSuffixPrefix(String s, int len, int max, int words) { final Set bigrams = Sets.newLinkedHashSet(); int i = 0; while (++i < s.length() && bigrams.size() < max) { diff --git a/pom.xml.releaseBackup b/pom.xml.releaseBackup deleted file mode 100644 index d840af173..000000000 --- a/pom.xml.releaseBackup +++ /dev/null @@ -1,333 +0,0 @@ - - - - 4.0.0 - - eu.dnetlib - dnet-dedup - 4.0.2-SNAPSHOT - - pom - - http://www.d-net.research-infrastructures.eu - - - - The Apache Software License, Version 2.0 - http://www.apache.org/licenses/LICENSE-2.0.txt - repo - A business-friendly OSS license - - - - - scm:git:https://code-repo.d4science.org/D-Net/dnet-dedup.git - HEAD - - - - dnet-pace-core - dnet-dedup-test - - - - Redmine - https://issue.openaire.research-infrastructures.eu/projects/openaire - - - - - - - dnet45-releases - D-Net 45 Releases - http://maven.research-infrastructures.eu/nexus/content/repositories/dnet45-releases - default - - - - - - dnet-deps - dnet-dependencies - http://maven.research-infrastructures.eu/nexus/content/repositories/dnet-deps - default - - - dnet45-releases - D-Net 45 Releases - http://maven.research-infrastructures.eu/nexus/content/repositories/dnet45-releases - default - - true - - - - dnet45-snapshots - D-Net 45 Snapshots - http://maven.research-infrastructures.eu/nexus/content/repositories/dnet45-snapshots - default - - true - - - - - cloudera - Cloudera Repository - https://repository.cloudera.com/artifactory/cloudera-repos - - true - - - false - - - - - target - target/classes - ${project.artifactId}-${project.version} - target/test-classes - - - - - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.6.0 - - 1.8 - 1.8 - ${project.build.sourceEncoding} - - - - - org.apache.maven.plugins - maven-jar-plugin - 3.0.2 - - - - org.apache.maven.plugins - maven-source-plugin - 3.0.1 - - - attach-sources - verify - - jar-no-fork - - - - - - - org.apache.maven.plugins - maven-surefire-plugin - 2.19.1 - - true - - - - - org.apache.maven.plugins - maven-javadoc-plugin - 2.10.4 - - true - - - - - org.apache.maven.plugins - maven-dependency-plugin - 3.0.0 - - - - org.apache.maven.plugins - maven-failsafe-plugin - 2.13 - - - integration-test - - integration-test - - - - verify - - verify - - - - - - - - - - - - org.apache.maven.plugins - maven-release-plugin - 2.5.3 - - - - - - - - - edu.cmu - secondstring - 1.0.0 - - - org.antlr - stringtemplate - 3.2 - - - - com.fasterxml.jackson.core - jackson-databind - ${jackson.version} - - - - com.fasterxml.jackson.dataformat - jackson-dataformat-xml - ${jackson.version} - - - com.fasterxml.jackson.module - jackson-module-jsonSchema - ${jackson.version} - - - - - - org.apache.commons - commons-math3 - 3.6.1 - - - - com.google.guava - guava - ${google.guava.version} - - - com.google.code.gson - gson - ${google.gson.version} - - - - org.apache.commons - commons-lang3 - ${commons.lang.version} - - - - commons-io - commons-io - ${commons.io.version} - - - commons-collections - commons-collections - ${commons.collections.version} - - - commons-logging - commons-logging - ${commons.logging.version} - - - org.apache.spark - spark-core_2.11 - ${spark.version} - provided - - - org.apache.spark - spark-graphx_2.11 - ${spark.version} - provided - - - org.apache.spark - spark-sql_2.11 - ${spark.version} - provided - - - junit - junit - ${junit.version} - test - - - org.reflections - reflections - 0.9.10 - - - - org.scala-lang - scala-library - ${scala.version} - - - - org.apache.oozie - oozie-client - 5.1.0 - - - com.jayway.jsonpath - json-path - 2.4.0 - - - - - - - - - UTF-8 - UTF-8 - - 2.2.2 - 15.0 - - 2.2.0 - 2.6.6 - - 3.5 - 2.4 - 3.2.1 - 1.1.3 - - 4.9 - 2.11.8 - - false - - diff --git a/release.properties b/release.properties deleted file mode 100644 index 70a3c40b9..000000000 --- a/release.properties +++ /dev/null @@ -1,22 +0,0 @@ -#release configuration -#Thu Jul 02 17:06:39 CEST 2020 -scm.commentPrefix=[maven-release-plugin] -pushChanges=true -project.rel.eu.dnetlib\:dnet-dedup-test=4.0.2 -scm.tag=dnet-dedup-4.0.2 -remoteTagging=true -project.scm.eu.dnetlib\:dnet-dedup-test.empty=true -projectVersionPolicyId=default -scm.url=scm\:git\:https\://code-repo.d4science.org/D-Net/dnet-dedup.git -scm.tagNameFormat=@{project.artifactId}-@{project.version} -project.rel.eu.dnetlib\:dnet-dedup=4.0.2 -project.dev.eu.dnetlib\:dnet-pace-core=4.0.3-SNAPSHOT -preparationGoals=clean verify -project.scm.eu.dnetlib\:dnet-dedup.tag=HEAD -project.scm.eu.dnetlib\:dnet-dedup.developerConnection=scm\:git\:https\://code-repo.d4science.org/D-Net/dnet-dedup.git -exec.snapshotReleasePluginAllowed=false -project.dev.eu.dnetlib\:dnet-dedup=4.0.3-SNAPSHOT -project.scm.eu.dnetlib\:dnet-pace-core.empty=true -project.dev.eu.dnetlib\:dnet-dedup-test=4.0.3-SNAPSHOT -completedPhase=end-release -project.rel.eu.dnetlib\:dnet-pace-core=4.0.2 From 92aadbfc7be908c2f85b84a1da6ed5a6f72693bb Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Wed, 15 Jul 2020 17:04:20 +0200 Subject: [PATCH 134/449] [maven-release-plugin] prepare release dnet-dedup-4.0.3 --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 3bc7480ee..f474e5693 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 4.0.3-SNAPSHOT + 4.0.3 ../pom.xml From b79ea971079af0139c5f59e5b3d2bac11e2cd766 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Wed, 15 Jul 2020 17:11:46 +0200 Subject: [PATCH 135/449] Revert "wordssuffixprefix: adjust the token length according to the number of words; removed maven release temporary files" This reverts commit d2861950ac3eca8671362c891c5f468cc7de395f. --- .../pace/clustering/WordsSuffixPrefix.java | 15 - pom.xml.releaseBackup | 333 ++++++++++++++++++ release.properties | 22 ++ 3 files changed, 355 insertions(+), 15 deletions(-) create mode 100644 pom.xml.releaseBackup create mode 100644 release.properties diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/WordsSuffixPrefix.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/WordsSuffixPrefix.java index 80459cbac..6086ac0a8 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/WordsSuffixPrefix.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/WordsSuffixPrefix.java @@ -22,21 +22,6 @@ public class WordsSuffixPrefix extends AbstractClusteringFunction { private Collection suffixPrefix(String s, int len, int max) { final int words = s.split(" ").length; - - // adjust the token length according to the number of words - switch (words) { - case 1: - return Sets.newLinkedHashSet(); - case 2: - return doSuffixPrefix(s, len+2, max, words); - case 3: - return doSuffixPrefix(s, len+1, max, words); - default: - return doSuffixPrefix(s, len, max, words); - } - } - - private Collection doSuffixPrefix(String s, int len, int max, int words) { final Set bigrams = Sets.newLinkedHashSet(); int i = 0; while (++i < s.length() && bigrams.size() < max) { diff --git a/pom.xml.releaseBackup b/pom.xml.releaseBackup new file mode 100644 index 000000000..d840af173 --- /dev/null +++ b/pom.xml.releaseBackup @@ -0,0 +1,333 @@ + + + + 4.0.0 + + eu.dnetlib + dnet-dedup + 4.0.2-SNAPSHOT + + pom + + http://www.d-net.research-infrastructures.eu + + + + The Apache Software License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0.txt + repo + A business-friendly OSS license + + + + + scm:git:https://code-repo.d4science.org/D-Net/dnet-dedup.git + HEAD + + + + dnet-pace-core + dnet-dedup-test + + + + Redmine + https://issue.openaire.research-infrastructures.eu/projects/openaire + + + + + + + dnet45-releases + D-Net 45 Releases + http://maven.research-infrastructures.eu/nexus/content/repositories/dnet45-releases + default + + + + + + dnet-deps + dnet-dependencies + http://maven.research-infrastructures.eu/nexus/content/repositories/dnet-deps + default + + + dnet45-releases + D-Net 45 Releases + http://maven.research-infrastructures.eu/nexus/content/repositories/dnet45-releases + default + + true + + + + dnet45-snapshots + D-Net 45 Snapshots + http://maven.research-infrastructures.eu/nexus/content/repositories/dnet45-snapshots + default + + true + + + + + cloudera + Cloudera Repository + https://repository.cloudera.com/artifactory/cloudera-repos + + true + + + false + + + + + target + target/classes + ${project.artifactId}-${project.version} + target/test-classes + + + + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.6.0 + + 1.8 + 1.8 + ${project.build.sourceEncoding} + + + + + org.apache.maven.plugins + maven-jar-plugin + 3.0.2 + + + + org.apache.maven.plugins + maven-source-plugin + 3.0.1 + + + attach-sources + verify + + jar-no-fork + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.19.1 + + true + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.10.4 + + true + + + + + org.apache.maven.plugins + maven-dependency-plugin + 3.0.0 + + + + org.apache.maven.plugins + maven-failsafe-plugin + 2.13 + + + integration-test + + integration-test + + + + verify + + verify + + + + + + + + + + + + org.apache.maven.plugins + maven-release-plugin + 2.5.3 + + + + + + + + + edu.cmu + secondstring + 1.0.0 + + + org.antlr + stringtemplate + 3.2 + + + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + + + + com.fasterxml.jackson.dataformat + jackson-dataformat-xml + ${jackson.version} + + + com.fasterxml.jackson.module + jackson-module-jsonSchema + ${jackson.version} + + + + + + org.apache.commons + commons-math3 + 3.6.1 + + + + com.google.guava + guava + ${google.guava.version} + + + com.google.code.gson + gson + ${google.gson.version} + + + + org.apache.commons + commons-lang3 + ${commons.lang.version} + + + + commons-io + commons-io + ${commons.io.version} + + + commons-collections + commons-collections + ${commons.collections.version} + + + commons-logging + commons-logging + ${commons.logging.version} + + + org.apache.spark + spark-core_2.11 + ${spark.version} + provided + + + org.apache.spark + spark-graphx_2.11 + ${spark.version} + provided + + + org.apache.spark + spark-sql_2.11 + ${spark.version} + provided + + + junit + junit + ${junit.version} + test + + + org.reflections + reflections + 0.9.10 + + + + org.scala-lang + scala-library + ${scala.version} + + + + org.apache.oozie + oozie-client + 5.1.0 + + + com.jayway.jsonpath + json-path + 2.4.0 + + + + + + + + + UTF-8 + UTF-8 + + 2.2.2 + 15.0 + + 2.2.0 + 2.6.6 + + 3.5 + 2.4 + 3.2.1 + 1.1.3 + + 4.9 + 2.11.8 + + false + + diff --git a/release.properties b/release.properties new file mode 100644 index 000000000..70a3c40b9 --- /dev/null +++ b/release.properties @@ -0,0 +1,22 @@ +#release configuration +#Thu Jul 02 17:06:39 CEST 2020 +scm.commentPrefix=[maven-release-plugin] +pushChanges=true +project.rel.eu.dnetlib\:dnet-dedup-test=4.0.2 +scm.tag=dnet-dedup-4.0.2 +remoteTagging=true +project.scm.eu.dnetlib\:dnet-dedup-test.empty=true +projectVersionPolicyId=default +scm.url=scm\:git\:https\://code-repo.d4science.org/D-Net/dnet-dedup.git +scm.tagNameFormat=@{project.artifactId}-@{project.version} +project.rel.eu.dnetlib\:dnet-dedup=4.0.2 +project.dev.eu.dnetlib\:dnet-pace-core=4.0.3-SNAPSHOT +preparationGoals=clean verify +project.scm.eu.dnetlib\:dnet-dedup.tag=HEAD +project.scm.eu.dnetlib\:dnet-dedup.developerConnection=scm\:git\:https\://code-repo.d4science.org/D-Net/dnet-dedup.git +exec.snapshotReleasePluginAllowed=false +project.dev.eu.dnetlib\:dnet-dedup=4.0.3-SNAPSHOT +project.scm.eu.dnetlib\:dnet-pace-core.empty=true +project.dev.eu.dnetlib\:dnet-dedup-test=4.0.3-SNAPSHOT +completedPhase=end-release +project.rel.eu.dnetlib\:dnet-pace-core=4.0.2 From 51d91fa520f6c3d4f53463d699526b2f69d0651d Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Wed, 15 Jul 2020 17:13:45 +0200 Subject: [PATCH 136/449] wordssuffixprefix: adjust the token length according to the number of words; removed maven release temporary files --- .../pace/clustering/WordsSuffixPrefix.java | 17 +- pom.xml.releaseBackup | 333 ------------------ release.properties | 22 -- 3 files changed, 16 insertions(+), 356 deletions(-) delete mode 100644 pom.xml.releaseBackup delete mode 100644 release.properties diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/WordsSuffixPrefix.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/WordsSuffixPrefix.java index 6086ac0a8..1e94b34d2 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/WordsSuffixPrefix.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/WordsSuffixPrefix.java @@ -22,6 +22,21 @@ public class WordsSuffixPrefix extends AbstractClusteringFunction { private Collection suffixPrefix(String s, int len, int max) { final int words = s.split(" ").length; + + // adjust the token length according to the number of words + switch (words) { + case 1: + return Sets.newLinkedHashSet(); + case 2: + return doSuffixPrefix(s, len+2, max, words); + case 3: + return doSuffixPrefix(s, len+1, max, words); + default: + return doSuffixPrefix(s, len, max, words); + } + } + + private Collection doSuffixPrefix(String s, int len, int max, int words) { final Set bigrams = Sets.newLinkedHashSet(); int i = 0; while (++i < s.length() && bigrams.size() < max) { @@ -39,4 +54,4 @@ public class WordsSuffixPrefix extends AbstractClusteringFunction { return bigrams; } -} +} \ No newline at end of file diff --git a/pom.xml.releaseBackup b/pom.xml.releaseBackup deleted file mode 100644 index d840af173..000000000 --- a/pom.xml.releaseBackup +++ /dev/null @@ -1,333 +0,0 @@ - - - - 4.0.0 - - eu.dnetlib - dnet-dedup - 4.0.2-SNAPSHOT - - pom - - http://www.d-net.research-infrastructures.eu - - - - The Apache Software License, Version 2.0 - http://www.apache.org/licenses/LICENSE-2.0.txt - repo - A business-friendly OSS license - - - - - scm:git:https://code-repo.d4science.org/D-Net/dnet-dedup.git - HEAD - - - - dnet-pace-core - dnet-dedup-test - - - - Redmine - https://issue.openaire.research-infrastructures.eu/projects/openaire - - - - - - - dnet45-releases - D-Net 45 Releases - http://maven.research-infrastructures.eu/nexus/content/repositories/dnet45-releases - default - - - - - - dnet-deps - dnet-dependencies - http://maven.research-infrastructures.eu/nexus/content/repositories/dnet-deps - default - - - dnet45-releases - D-Net 45 Releases - http://maven.research-infrastructures.eu/nexus/content/repositories/dnet45-releases - default - - true - - - - dnet45-snapshots - D-Net 45 Snapshots - http://maven.research-infrastructures.eu/nexus/content/repositories/dnet45-snapshots - default - - true - - - - - cloudera - Cloudera Repository - https://repository.cloudera.com/artifactory/cloudera-repos - - true - - - false - - - - - target - target/classes - ${project.artifactId}-${project.version} - target/test-classes - - - - - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.6.0 - - 1.8 - 1.8 - ${project.build.sourceEncoding} - - - - - org.apache.maven.plugins - maven-jar-plugin - 3.0.2 - - - - org.apache.maven.plugins - maven-source-plugin - 3.0.1 - - - attach-sources - verify - - jar-no-fork - - - - - - - org.apache.maven.plugins - maven-surefire-plugin - 2.19.1 - - true - - - - - org.apache.maven.plugins - maven-javadoc-plugin - 2.10.4 - - true - - - - - org.apache.maven.plugins - maven-dependency-plugin - 3.0.0 - - - - org.apache.maven.plugins - maven-failsafe-plugin - 2.13 - - - integration-test - - integration-test - - - - verify - - verify - - - - - - - - - - - - org.apache.maven.plugins - maven-release-plugin - 2.5.3 - - - - - - - - - edu.cmu - secondstring - 1.0.0 - - - org.antlr - stringtemplate - 3.2 - - - - com.fasterxml.jackson.core - jackson-databind - ${jackson.version} - - - - com.fasterxml.jackson.dataformat - jackson-dataformat-xml - ${jackson.version} - - - com.fasterxml.jackson.module - jackson-module-jsonSchema - ${jackson.version} - - - - - - org.apache.commons - commons-math3 - 3.6.1 - - - - com.google.guava - guava - ${google.guava.version} - - - com.google.code.gson - gson - ${google.gson.version} - - - - org.apache.commons - commons-lang3 - ${commons.lang.version} - - - - commons-io - commons-io - ${commons.io.version} - - - commons-collections - commons-collections - ${commons.collections.version} - - - commons-logging - commons-logging - ${commons.logging.version} - - - org.apache.spark - spark-core_2.11 - ${spark.version} - provided - - - org.apache.spark - spark-graphx_2.11 - ${spark.version} - provided - - - org.apache.spark - spark-sql_2.11 - ${spark.version} - provided - - - junit - junit - ${junit.version} - test - - - org.reflections - reflections - 0.9.10 - - - - org.scala-lang - scala-library - ${scala.version} - - - - org.apache.oozie - oozie-client - 5.1.0 - - - com.jayway.jsonpath - json-path - 2.4.0 - - - - - - - - - UTF-8 - UTF-8 - - 2.2.2 - 15.0 - - 2.2.0 - 2.6.6 - - 3.5 - 2.4 - 3.2.1 - 1.1.3 - - 4.9 - 2.11.8 - - false - - diff --git a/release.properties b/release.properties deleted file mode 100644 index 70a3c40b9..000000000 --- a/release.properties +++ /dev/null @@ -1,22 +0,0 @@ -#release configuration -#Thu Jul 02 17:06:39 CEST 2020 -scm.commentPrefix=[maven-release-plugin] -pushChanges=true -project.rel.eu.dnetlib\:dnet-dedup-test=4.0.2 -scm.tag=dnet-dedup-4.0.2 -remoteTagging=true -project.scm.eu.dnetlib\:dnet-dedup-test.empty=true -projectVersionPolicyId=default -scm.url=scm\:git\:https\://code-repo.d4science.org/D-Net/dnet-dedup.git -scm.tagNameFormat=@{project.artifactId}-@{project.version} -project.rel.eu.dnetlib\:dnet-dedup=4.0.2 -project.dev.eu.dnetlib\:dnet-pace-core=4.0.3-SNAPSHOT -preparationGoals=clean verify -project.scm.eu.dnetlib\:dnet-dedup.tag=HEAD -project.scm.eu.dnetlib\:dnet-dedup.developerConnection=scm\:git\:https\://code-repo.d4science.org/D-Net/dnet-dedup.git -exec.snapshotReleasePluginAllowed=false -project.dev.eu.dnetlib\:dnet-dedup=4.0.3-SNAPSHOT -project.scm.eu.dnetlib\:dnet-pace-core.empty=true -project.dev.eu.dnetlib\:dnet-dedup-test=4.0.3-SNAPSHOT -completedPhase=end-release -project.rel.eu.dnetlib\:dnet-pace-core=4.0.2 From ec97983ce1a75f26d56923a0eb0fafcc62200b16 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Wed, 15 Jul 2020 17:20:12 +0200 Subject: [PATCH 137/449] reverted to 4.0.3-SNAPSHOT --- dnet-pace-core/pom.xml | 2 +- dnet-pace-core/pom.xml.releaseBackup | 73 ---------------------------- dnet-pace-core/release.properties | 11 ----- 3 files changed, 1 insertion(+), 85 deletions(-) delete mode 100644 dnet-pace-core/pom.xml.releaseBackup delete mode 100644 dnet-pace-core/release.properties diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index f474e5693..3bc7480ee 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 4.0.3 + 4.0.3-SNAPSHOT ../pom.xml diff --git a/dnet-pace-core/pom.xml.releaseBackup b/dnet-pace-core/pom.xml.releaseBackup deleted file mode 100644 index 0d1864591..000000000 --- a/dnet-pace-core/pom.xml.releaseBackup +++ /dev/null @@ -1,73 +0,0 @@ - - - - 4.0.0 - - - eu.dnetlib - dnet-dedup - 4.0.2-SNAPSHOT - ../pom.xml - - - dnet-pace-core - jar - - - - edu.cmu - secondstring - - - com.google.guava - guava - - - com.google.code.gson - gson - - - org.apache.commons - commons-lang3 - - - commons-io - commons-io - - - - org.antlr - stringtemplate - - - commons-logging - commons-logging - - - junit - junit - test - - - org.reflections - reflections - - - com.fasterxml.jackson.core - jackson-databind - - - org.apache.commons - commons-math3 - - - - com.jayway.jsonpath - json-path - - - - - - - diff --git a/dnet-pace-core/release.properties b/dnet-pace-core/release.properties deleted file mode 100644 index d6ab05af2..000000000 --- a/dnet-pace-core/release.properties +++ /dev/null @@ -1,11 +0,0 @@ -#release configuration -#Fri Apr 24 14:37:08 CEST 2020 -scm.tagNameFormat=@{project.artifactId}-@{project.version} -pushChanges=true -scm.url=scm\:git\:https\://code-repo.d4science.org/D-Net/dnet-dedup.git/dnet-pace-core -preparationGoals=clean verify -projectVersionPolicyId=default -remoteTagging=true -scm.commentPrefix=[maven-release-plugin] -exec.snapshotReleasePluginAllowed=false -completedPhase=scm-check-modifications From 6c98d4c4367e51bdab72ece086abfd5ec65c2763 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Wed, 15 Jul 2020 17:24:25 +0200 Subject: [PATCH 138/449] [maven-release-plugin] prepare release dnet-dedup-4.0.3 --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 3bc7480ee..f474e5693 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 4.0.3-SNAPSHOT + 4.0.3 ../pom.xml From ba493f9ab812d2b520a5e1d5ffc1201ddf3c7485 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Wed, 15 Jul 2020 17:24:43 +0200 Subject: [PATCH 139/449] [maven-release-plugin] rollback the release of dnet-dedup-4.0.3 --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index f474e5693..3bc7480ee 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 4.0.3 + 4.0.3-SNAPSHOT ../pom.xml From 9efcd8e24570e7a0f15823bcca86db382cd00e28 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Wed, 15 Jul 2020 17:28:37 +0200 Subject: [PATCH 140/449] Revert "reverted to 4.0.3-SNAPSHOT" This reverts commit ec97983ce1a75f26d56923a0eb0fafcc62200b16. --- dnet-pace-core/pom.xml | 2 +- dnet-pace-core/pom.xml.releaseBackup | 73 ++++++++++++++++++++++++++++ dnet-pace-core/release.properties | 11 +++++ 3 files changed, 85 insertions(+), 1 deletion(-) create mode 100644 dnet-pace-core/pom.xml.releaseBackup create mode 100644 dnet-pace-core/release.properties diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 3bc7480ee..f474e5693 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 4.0.3-SNAPSHOT + 4.0.3 ../pom.xml diff --git a/dnet-pace-core/pom.xml.releaseBackup b/dnet-pace-core/pom.xml.releaseBackup new file mode 100644 index 000000000..0d1864591 --- /dev/null +++ b/dnet-pace-core/pom.xml.releaseBackup @@ -0,0 +1,73 @@ + + + + 4.0.0 + + + eu.dnetlib + dnet-dedup + 4.0.2-SNAPSHOT + ../pom.xml + + + dnet-pace-core + jar + + + + edu.cmu + secondstring + + + com.google.guava + guava + + + com.google.code.gson + gson + + + org.apache.commons + commons-lang3 + + + commons-io + commons-io + + + + org.antlr + stringtemplate + + + commons-logging + commons-logging + + + junit + junit + test + + + org.reflections + reflections + + + com.fasterxml.jackson.core + jackson-databind + + + org.apache.commons + commons-math3 + + + + com.jayway.jsonpath + json-path + + + + + + + diff --git a/dnet-pace-core/release.properties b/dnet-pace-core/release.properties new file mode 100644 index 000000000..d6ab05af2 --- /dev/null +++ b/dnet-pace-core/release.properties @@ -0,0 +1,11 @@ +#release configuration +#Fri Apr 24 14:37:08 CEST 2020 +scm.tagNameFormat=@{project.artifactId}-@{project.version} +pushChanges=true +scm.url=scm\:git\:https\://code-repo.d4science.org/D-Net/dnet-dedup.git/dnet-pace-core +preparationGoals=clean verify +projectVersionPolicyId=default +remoteTagging=true +scm.commentPrefix=[maven-release-plugin] +exec.snapshotReleasePluginAllowed=false +completedPhase=scm-check-modifications From 9f20f238707b6a29120795bb3a427a81dac430a4 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Wed, 15 Jul 2020 17:35:56 +0200 Subject: [PATCH 141/449] Revert "wordssuffixprefix: adjust the token length according to the number of words; removed maven release temporary files" This reverts commit 51d91fa520f6c3d4f53463d699526b2f69d0651d. --- .../pace/clustering/WordsSuffixPrefix.java | 17 +- pom.xml.releaseBackup | 333 ++++++++++++++++++ release.properties | 22 ++ 3 files changed, 356 insertions(+), 16 deletions(-) create mode 100644 pom.xml.releaseBackup create mode 100644 release.properties diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/WordsSuffixPrefix.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/WordsSuffixPrefix.java index 1e94b34d2..6086ac0a8 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/WordsSuffixPrefix.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/WordsSuffixPrefix.java @@ -22,21 +22,6 @@ public class WordsSuffixPrefix extends AbstractClusteringFunction { private Collection suffixPrefix(String s, int len, int max) { final int words = s.split(" ").length; - - // adjust the token length according to the number of words - switch (words) { - case 1: - return Sets.newLinkedHashSet(); - case 2: - return doSuffixPrefix(s, len+2, max, words); - case 3: - return doSuffixPrefix(s, len+1, max, words); - default: - return doSuffixPrefix(s, len, max, words); - } - } - - private Collection doSuffixPrefix(String s, int len, int max, int words) { final Set bigrams = Sets.newLinkedHashSet(); int i = 0; while (++i < s.length() && bigrams.size() < max) { @@ -54,4 +39,4 @@ public class WordsSuffixPrefix extends AbstractClusteringFunction { return bigrams; } -} \ No newline at end of file +} diff --git a/pom.xml.releaseBackup b/pom.xml.releaseBackup new file mode 100644 index 000000000..d840af173 --- /dev/null +++ b/pom.xml.releaseBackup @@ -0,0 +1,333 @@ + + + + 4.0.0 + + eu.dnetlib + dnet-dedup + 4.0.2-SNAPSHOT + + pom + + http://www.d-net.research-infrastructures.eu + + + + The Apache Software License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0.txt + repo + A business-friendly OSS license + + + + + scm:git:https://code-repo.d4science.org/D-Net/dnet-dedup.git + HEAD + + + + dnet-pace-core + dnet-dedup-test + + + + Redmine + https://issue.openaire.research-infrastructures.eu/projects/openaire + + + + + + + dnet45-releases + D-Net 45 Releases + http://maven.research-infrastructures.eu/nexus/content/repositories/dnet45-releases + default + + + + + + dnet-deps + dnet-dependencies + http://maven.research-infrastructures.eu/nexus/content/repositories/dnet-deps + default + + + dnet45-releases + D-Net 45 Releases + http://maven.research-infrastructures.eu/nexus/content/repositories/dnet45-releases + default + + true + + + + dnet45-snapshots + D-Net 45 Snapshots + http://maven.research-infrastructures.eu/nexus/content/repositories/dnet45-snapshots + default + + true + + + + + cloudera + Cloudera Repository + https://repository.cloudera.com/artifactory/cloudera-repos + + true + + + false + + + + + target + target/classes + ${project.artifactId}-${project.version} + target/test-classes + + + + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.6.0 + + 1.8 + 1.8 + ${project.build.sourceEncoding} + + + + + org.apache.maven.plugins + maven-jar-plugin + 3.0.2 + + + + org.apache.maven.plugins + maven-source-plugin + 3.0.1 + + + attach-sources + verify + + jar-no-fork + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.19.1 + + true + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.10.4 + + true + + + + + org.apache.maven.plugins + maven-dependency-plugin + 3.0.0 + + + + org.apache.maven.plugins + maven-failsafe-plugin + 2.13 + + + integration-test + + integration-test + + + + verify + + verify + + + + + + + + + + + + org.apache.maven.plugins + maven-release-plugin + 2.5.3 + + + + + + + + + edu.cmu + secondstring + 1.0.0 + + + org.antlr + stringtemplate + 3.2 + + + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + + + + com.fasterxml.jackson.dataformat + jackson-dataformat-xml + ${jackson.version} + + + com.fasterxml.jackson.module + jackson-module-jsonSchema + ${jackson.version} + + + + + + org.apache.commons + commons-math3 + 3.6.1 + + + + com.google.guava + guava + ${google.guava.version} + + + com.google.code.gson + gson + ${google.gson.version} + + + + org.apache.commons + commons-lang3 + ${commons.lang.version} + + + + commons-io + commons-io + ${commons.io.version} + + + commons-collections + commons-collections + ${commons.collections.version} + + + commons-logging + commons-logging + ${commons.logging.version} + + + org.apache.spark + spark-core_2.11 + ${spark.version} + provided + + + org.apache.spark + spark-graphx_2.11 + ${spark.version} + provided + + + org.apache.spark + spark-sql_2.11 + ${spark.version} + provided + + + junit + junit + ${junit.version} + test + + + org.reflections + reflections + 0.9.10 + + + + org.scala-lang + scala-library + ${scala.version} + + + + org.apache.oozie + oozie-client + 5.1.0 + + + com.jayway.jsonpath + json-path + 2.4.0 + + + + + + + + + UTF-8 + UTF-8 + + 2.2.2 + 15.0 + + 2.2.0 + 2.6.6 + + 3.5 + 2.4 + 3.2.1 + 1.1.3 + + 4.9 + 2.11.8 + + false + + diff --git a/release.properties b/release.properties new file mode 100644 index 000000000..70a3c40b9 --- /dev/null +++ b/release.properties @@ -0,0 +1,22 @@ +#release configuration +#Thu Jul 02 17:06:39 CEST 2020 +scm.commentPrefix=[maven-release-plugin] +pushChanges=true +project.rel.eu.dnetlib\:dnet-dedup-test=4.0.2 +scm.tag=dnet-dedup-4.0.2 +remoteTagging=true +project.scm.eu.dnetlib\:dnet-dedup-test.empty=true +projectVersionPolicyId=default +scm.url=scm\:git\:https\://code-repo.d4science.org/D-Net/dnet-dedup.git +scm.tagNameFormat=@{project.artifactId}-@{project.version} +project.rel.eu.dnetlib\:dnet-dedup=4.0.2 +project.dev.eu.dnetlib\:dnet-pace-core=4.0.3-SNAPSHOT +preparationGoals=clean verify +project.scm.eu.dnetlib\:dnet-dedup.tag=HEAD +project.scm.eu.dnetlib\:dnet-dedup.developerConnection=scm\:git\:https\://code-repo.d4science.org/D-Net/dnet-dedup.git +exec.snapshotReleasePluginAllowed=false +project.dev.eu.dnetlib\:dnet-dedup=4.0.3-SNAPSHOT +project.scm.eu.dnetlib\:dnet-pace-core.empty=true +project.dev.eu.dnetlib\:dnet-dedup-test=4.0.3-SNAPSHOT +completedPhase=end-release +project.rel.eu.dnetlib\:dnet-pace-core=4.0.2 From 14611ea45099562eabd423a5b62e7685148dc322 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Wed, 15 Jul 2020 17:37:36 +0200 Subject: [PATCH 142/449] reverted to 4.0.3-SNAPSHOT --- dnet-pace-core/pom.xml | 2 +- .../pace/clustering/WordsSuffixPrefix.java | 17 +- pom.xml.releaseBackup | 333 ------------------ 3 files changed, 17 insertions(+), 335 deletions(-) delete mode 100644 pom.xml.releaseBackup diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index f474e5693..3bc7480ee 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 4.0.3 + 4.0.3-SNAPSHOT ../pom.xml diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/WordsSuffixPrefix.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/WordsSuffixPrefix.java index 6086ac0a8..1e94b34d2 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/WordsSuffixPrefix.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/WordsSuffixPrefix.java @@ -22,6 +22,21 @@ public class WordsSuffixPrefix extends AbstractClusteringFunction { private Collection suffixPrefix(String s, int len, int max) { final int words = s.split(" ").length; + + // adjust the token length according to the number of words + switch (words) { + case 1: + return Sets.newLinkedHashSet(); + case 2: + return doSuffixPrefix(s, len+2, max, words); + case 3: + return doSuffixPrefix(s, len+1, max, words); + default: + return doSuffixPrefix(s, len, max, words); + } + } + + private Collection doSuffixPrefix(String s, int len, int max, int words) { final Set bigrams = Sets.newLinkedHashSet(); int i = 0; while (++i < s.length() && bigrams.size() < max) { @@ -39,4 +54,4 @@ public class WordsSuffixPrefix extends AbstractClusteringFunction { return bigrams; } -} +} \ No newline at end of file diff --git a/pom.xml.releaseBackup b/pom.xml.releaseBackup deleted file mode 100644 index d840af173..000000000 --- a/pom.xml.releaseBackup +++ /dev/null @@ -1,333 +0,0 @@ - - - - 4.0.0 - - eu.dnetlib - dnet-dedup - 4.0.2-SNAPSHOT - - pom - - http://www.d-net.research-infrastructures.eu - - - - The Apache Software License, Version 2.0 - http://www.apache.org/licenses/LICENSE-2.0.txt - repo - A business-friendly OSS license - - - - - scm:git:https://code-repo.d4science.org/D-Net/dnet-dedup.git - HEAD - - - - dnet-pace-core - dnet-dedup-test - - - - Redmine - https://issue.openaire.research-infrastructures.eu/projects/openaire - - - - - - - dnet45-releases - D-Net 45 Releases - http://maven.research-infrastructures.eu/nexus/content/repositories/dnet45-releases - default - - - - - - dnet-deps - dnet-dependencies - http://maven.research-infrastructures.eu/nexus/content/repositories/dnet-deps - default - - - dnet45-releases - D-Net 45 Releases - http://maven.research-infrastructures.eu/nexus/content/repositories/dnet45-releases - default - - true - - - - dnet45-snapshots - D-Net 45 Snapshots - http://maven.research-infrastructures.eu/nexus/content/repositories/dnet45-snapshots - default - - true - - - - - cloudera - Cloudera Repository - https://repository.cloudera.com/artifactory/cloudera-repos - - true - - - false - - - - - target - target/classes - ${project.artifactId}-${project.version} - target/test-classes - - - - - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.6.0 - - 1.8 - 1.8 - ${project.build.sourceEncoding} - - - - - org.apache.maven.plugins - maven-jar-plugin - 3.0.2 - - - - org.apache.maven.plugins - maven-source-plugin - 3.0.1 - - - attach-sources - verify - - jar-no-fork - - - - - - - org.apache.maven.plugins - maven-surefire-plugin - 2.19.1 - - true - - - - - org.apache.maven.plugins - maven-javadoc-plugin - 2.10.4 - - true - - - - - org.apache.maven.plugins - maven-dependency-plugin - 3.0.0 - - - - org.apache.maven.plugins - maven-failsafe-plugin - 2.13 - - - integration-test - - integration-test - - - - verify - - verify - - - - - - - - - - - - org.apache.maven.plugins - maven-release-plugin - 2.5.3 - - - - - - - - - edu.cmu - secondstring - 1.0.0 - - - org.antlr - stringtemplate - 3.2 - - - - com.fasterxml.jackson.core - jackson-databind - ${jackson.version} - - - - com.fasterxml.jackson.dataformat - jackson-dataformat-xml - ${jackson.version} - - - com.fasterxml.jackson.module - jackson-module-jsonSchema - ${jackson.version} - - - - - - org.apache.commons - commons-math3 - 3.6.1 - - - - com.google.guava - guava - ${google.guava.version} - - - com.google.code.gson - gson - ${google.gson.version} - - - - org.apache.commons - commons-lang3 - ${commons.lang.version} - - - - commons-io - commons-io - ${commons.io.version} - - - commons-collections - commons-collections - ${commons.collections.version} - - - commons-logging - commons-logging - ${commons.logging.version} - - - org.apache.spark - spark-core_2.11 - ${spark.version} - provided - - - org.apache.spark - spark-graphx_2.11 - ${spark.version} - provided - - - org.apache.spark - spark-sql_2.11 - ${spark.version} - provided - - - junit - junit - ${junit.version} - test - - - org.reflections - reflections - 0.9.10 - - - - org.scala-lang - scala-library - ${scala.version} - - - - org.apache.oozie - oozie-client - 5.1.0 - - - com.jayway.jsonpath - json-path - 2.4.0 - - - - - - - - - UTF-8 - UTF-8 - - 2.2.2 - 15.0 - - 2.2.0 - 2.6.6 - - 3.5 - 2.4 - 3.2.1 - 1.1.3 - - 4.9 - 2.11.8 - - false - - From 7cc3742a2621f40da7ab488e1d6ee87e0ad786ea Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Wed, 15 Jul 2020 17:52:27 +0200 Subject: [PATCH 143/449] removed maven release.property --- dnet-pace-core/pom.xml.releaseBackup | 73 ---------------------------- dnet-pace-core/release.properties | 11 ----- release.properties | 22 --------- 3 files changed, 106 deletions(-) delete mode 100644 dnet-pace-core/pom.xml.releaseBackup delete mode 100644 dnet-pace-core/release.properties delete mode 100644 release.properties diff --git a/dnet-pace-core/pom.xml.releaseBackup b/dnet-pace-core/pom.xml.releaseBackup deleted file mode 100644 index 0d1864591..000000000 --- a/dnet-pace-core/pom.xml.releaseBackup +++ /dev/null @@ -1,73 +0,0 @@ - - - - 4.0.0 - - - eu.dnetlib - dnet-dedup - 4.0.2-SNAPSHOT - ../pom.xml - - - dnet-pace-core - jar - - - - edu.cmu - secondstring - - - com.google.guava - guava - - - com.google.code.gson - gson - - - org.apache.commons - commons-lang3 - - - commons-io - commons-io - - - - org.antlr - stringtemplate - - - commons-logging - commons-logging - - - junit - junit - test - - - org.reflections - reflections - - - com.fasterxml.jackson.core - jackson-databind - - - org.apache.commons - commons-math3 - - - - com.jayway.jsonpath - json-path - - - - - - - diff --git a/dnet-pace-core/release.properties b/dnet-pace-core/release.properties deleted file mode 100644 index d6ab05af2..000000000 --- a/dnet-pace-core/release.properties +++ /dev/null @@ -1,11 +0,0 @@ -#release configuration -#Fri Apr 24 14:37:08 CEST 2020 -scm.tagNameFormat=@{project.artifactId}-@{project.version} -pushChanges=true -scm.url=scm\:git\:https\://code-repo.d4science.org/D-Net/dnet-dedup.git/dnet-pace-core -preparationGoals=clean verify -projectVersionPolicyId=default -remoteTagging=true -scm.commentPrefix=[maven-release-plugin] -exec.snapshotReleasePluginAllowed=false -completedPhase=scm-check-modifications diff --git a/release.properties b/release.properties deleted file mode 100644 index 70a3c40b9..000000000 --- a/release.properties +++ /dev/null @@ -1,22 +0,0 @@ -#release configuration -#Thu Jul 02 17:06:39 CEST 2020 -scm.commentPrefix=[maven-release-plugin] -pushChanges=true -project.rel.eu.dnetlib\:dnet-dedup-test=4.0.2 -scm.tag=dnet-dedup-4.0.2 -remoteTagging=true -project.scm.eu.dnetlib\:dnet-dedup-test.empty=true -projectVersionPolicyId=default -scm.url=scm\:git\:https\://code-repo.d4science.org/D-Net/dnet-dedup.git -scm.tagNameFormat=@{project.artifactId}-@{project.version} -project.rel.eu.dnetlib\:dnet-dedup=4.0.2 -project.dev.eu.dnetlib\:dnet-pace-core=4.0.3-SNAPSHOT -preparationGoals=clean verify -project.scm.eu.dnetlib\:dnet-dedup.tag=HEAD -project.scm.eu.dnetlib\:dnet-dedup.developerConnection=scm\:git\:https\://code-repo.d4science.org/D-Net/dnet-dedup.git -exec.snapshotReleasePluginAllowed=false -project.dev.eu.dnetlib\:dnet-dedup=4.0.3-SNAPSHOT -project.scm.eu.dnetlib\:dnet-pace-core.empty=true -project.dev.eu.dnetlib\:dnet-dedup-test=4.0.3-SNAPSHOT -completedPhase=end-release -project.rel.eu.dnetlib\:dnet-pace-core=4.0.2 From ff2c8eba1280651efd3e936193b0d73819864840 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Wed, 15 Jul 2020 17:57:04 +0200 Subject: [PATCH 144/449] [maven-release-plugin] prepare release dnet-dedup-4.0.3 --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 3bc7480ee..f474e5693 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 4.0.3-SNAPSHOT + 4.0.3 ../pom.xml From eaf7defe0c98f5bb8ad2865bf339866699a6f830 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Wed, 15 Jul 2020 17:57:09 +0200 Subject: [PATCH 145/449] [maven-release-plugin] prepare for next development iteration --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index f474e5693..1385509df 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 4.0.3 + 4.0.4-SNAPSHOT ../pom.xml From 07ab904d609379c93598b2b16f501964decc16dd Mon Sep 17 00:00:00 2001 From: miconis Date: Thu, 16 Jul 2020 18:57:55 +0200 Subject: [PATCH 146/449] implementation of the clustering function for the suffixprefix chain --- .../WordsStatsSuffixPrefixChain.java | 90 +++++++++++++++++++ .../clustering/ClusteringFunctionTest.java | 24 +++++ 2 files changed, 114 insertions(+) create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/WordsStatsSuffixPrefixChain.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/WordsStatsSuffixPrefixChain.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/WordsStatsSuffixPrefixChain.java new file mode 100644 index 000000000..6fa2668fa --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/WordsStatsSuffixPrefixChain.java @@ -0,0 +1,90 @@ +package eu.dnetlib.pace.clustering; + +import com.google.common.collect.Sets; +import eu.dnetlib.pace.config.Config; + +import java.util.*; +import java.util.stream.Collectors; + +@ClusteringClass("wordsStatsSuffixPrefixChain") +public class WordsStatsSuffixPrefixChain extends AbstractClusteringFunction { + + public WordsStatsSuffixPrefixChain(Map params) { + super(params); + } + + @Override + protected Collection doApply(Config conf, String s) { + return suffixPrefixChain(s, param("mod")); + } + + private Collection suffixPrefixChain(String s, int mod) { + + //create the list of words from the string (remove short words) + List wordsList = + Arrays.stream(s.split(" ")) + .filter(si -> si.length() > 3) + .collect(Collectors.toList()); + + final int words = wordsList.size(); + final int letters = s.length(); + + //create the prefix: number of words + number of letters/mod + String prefix = words + "-" + letters/mod + "-"; + + return doSuffixPrefixChain(wordsList, prefix); + + } + + private Collection doSuffixPrefixChain(List wordsList, String prefix) { + + Set set = Sets.newLinkedHashSet(); + switch(wordsList.size()){ + case 0: + case 1: + break; + case 2: + set.add( + prefix + + suffix(wordsList.get(0), 3) + + prefix(wordsList.get(1), 3) + ); + + set.add( + prefix + + prefix(wordsList.get(0), 3) + + suffix(wordsList.get(1), 3) + ); + + break; + default: + set.add( + prefix + + suffix(wordsList.get(0), 3) + + prefix(wordsList.get(1), 3) + + suffix(wordsList.get(2), 3) + ); + + set.add( + prefix + + prefix(wordsList.get(0), 3) + + suffix(wordsList.get(1), 3) + + prefix(wordsList.get(2), 3) + ); + break; + } + + return set; + + } + + + private String suffix(String s, int len) { + return s.substring(s.length()-len); + } + + private String prefix(String s, int len) { + return s.substring(0, len); + } + +} diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java index 832ba4bce..396604cea 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java @@ -111,6 +111,30 @@ public class ClusteringFunctionTest extends AbstractPaceTest { System.out.println(sp.apply(conf, Lists.newArrayList(title(s)))); } + @Test + public void testWordsStatsSuffixPrefix() { + params.put("mod", 10); + + final ClusteringFunction sp = new WordsStatsSuffixPrefixChain(params); + + String s = "Search for the Standard Model Higgs Boson"; + System.out.println(s); + System.out.println(sp.apply(conf, Lists.newArrayList(title(s)))); + + s = "A Physical Education Teacher Is Like...: Examining Turkish Students Perceptions of Physical Education Teachers Through Metaphor Analysis"; + System.out.println(s); + System.out.println(sp.apply(conf, Lists.newArrayList(title(s)))); + + s = "Structure of a Eukaryotic Nonribosomal Peptide Synthetase Adenylation Domain That Activates a Large Hydroxamate Amino Acid in Siderophore Biosynthesis"; + System.out.println(s); + System.out.println(sp.apply(conf, Lists.newArrayList(title(s)))); + + s = "Performance Evaluation"; + System.out.println(s); + System.out.println(sp.apply(conf, Lists.newArrayList(title(s)))); + + } + @Test public void testFieldValue() { From 840fe8f4d362c3b9dd67472abfd23615a9b9eb7c Mon Sep 17 00:00:00 2001 From: miconis Date: Thu, 16 Jul 2020 18:59:22 +0200 Subject: [PATCH 147/449] [maven-release-plugin] prepare release dnet-dedup-4.0.4 --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 1385509df..9798b428b 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 4.0.4-SNAPSHOT + 4.0.4 ../pom.xml From a5a3ea24f86b6dbda130fd54bc412d098f1fb064 Mon Sep 17 00:00:00 2001 From: miconis Date: Thu, 16 Jul 2020 18:59:25 +0200 Subject: [PATCH 148/449] [maven-release-plugin] prepare for next development iteration --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 9798b428b..817786526 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 4.0.4 + 4.0.5-SNAPSHOT ../pom.xml From a109ebe287d5e1dbf5f9b71e1f4a17385e5057be Mon Sep 17 00:00:00 2001 From: Sandro La Bruzzo Date: Thu, 6 Aug 2020 10:27:05 +0200 Subject: [PATCH 149/449] fixed NPE --- .../src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java index 2f04767a2..2683c7b24 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java @@ -105,6 +105,8 @@ public class MapDocumentUtil { public static String truncateValue(String value, int length) { + if (value == null) + return ""; if (length == -1 || length > value.length()) return value; From 19c3c90d7bed68e02ec7562533fc10607537fafb Mon Sep 17 00:00:00 2001 From: miconis Date: Sat, 19 Sep 2020 17:43:41 +0200 Subject: [PATCH 150/449] fixed error in the block processor: entities with orderField=null were not considered --- .../src/main/java/eu/dnetlib/pace/util/BlockProcessor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java index b73b28f19..f1eefc3ea 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java @@ -131,7 +131,7 @@ public class BlockProcessor { WfConfig wf = dedupConf.getWf(); final Field fieldsPivot = pivot.values(wf.getOrderField()); - final String fieldPivot = (fieldsPivot == null) || fieldsPivot.isEmpty() ? null : fieldsPivot.stringValue(); + final String fieldPivot = (fieldsPivot == null) || fieldsPivot.isEmpty() ? "" : fieldsPivot.stringValue(); if (fieldPivot != null) { int i = 0; From dd34e371d7821c82a1f25c02897767f45d03c7b7 Mon Sep 17 00:00:00 2001 From: miconis Date: Tue, 29 Sep 2020 12:01:25 +0200 Subject: [PATCH 151/449] fixed error in the treeprocessor. it used th=-1 as default value, now it use th=1 --- .../src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java index 530839ccd..b6e27fa21 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java @@ -51,7 +51,7 @@ public class TreeNodeDef implements Serializable { fieldConf.getComparator() + " on " + fieldConf.getField() + " " + fields.indexOf(fieldConf), new FieldStats( weight, - Double.parseDouble(fieldConf.getParams().getOrDefault("threshold", "-1.0")), + Double.parseDouble(fieldConf.getParams().getOrDefault("threshold", "1.0")), result, fieldConf.isCountIfUndefined(), doc1.getFieldMap().get(fieldConf.getField()), From 2a0102271255c64dfabc32c3c7fb9ac806aed3c5 Mon Sep 17 00:00:00 2001 From: miconis Date: Tue, 29 Sep 2020 12:05:50 +0200 Subject: [PATCH 152/449] minor changes --- release.properties | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 release.properties diff --git a/release.properties b/release.properties new file mode 100644 index 000000000..f8c96de45 --- /dev/null +++ b/release.properties @@ -0,0 +1,11 @@ +#release configuration +#Tue Sep 29 12:04:49 CEST 2020 +scm.tagNameFormat=@{project.artifactId}-@{project.version} +pushChanges=true +scm.url=scm\:git\:https\://code-repo.d4science.org/D-Net/dnet-dedup.git +preparationGoals=clean verify +projectVersionPolicyId=default +remoteTagging=true +scm.commentPrefix=[maven-release-plugin] +exec.snapshotReleasePluginAllowed=false +completedPhase=check-poms From 05a03d97cd67d015080de18a633016a76d7ca588 Mon Sep 17 00:00:00 2001 From: miconis Date: Tue, 29 Sep 2020 12:06:35 +0200 Subject: [PATCH 153/449] [maven-release-plugin] prepare release dnet-dedup-4.0.5 --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 817786526..505b03593 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 4.0.5-SNAPSHOT + 4.0.5 ../pom.xml From 72116446ec9df846c5021cd095ca279b5b2fc19c Mon Sep 17 00:00:00 2001 From: miconis Date: Tue, 29 Sep 2020 12:06:38 +0200 Subject: [PATCH 154/449] [maven-release-plugin] prepare for next development iteration --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 505b03593..3ddd658b1 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 4.0.5 + 4.0.6-SNAPSHOT ../pom.xml From ed0d5d3e1dc5681019eb0ef4e443a4c55a265266 Mon Sep 17 00:00:00 2001 From: miconis Date: Fri, 4 Dec 2020 15:41:31 +0100 Subject: [PATCH 155/449] implementation of the wf to dedup entities, addition of the module to run the wf on the cluster --- dnet-pace-core/pom.xml | 5 +++-- .../pace/clustering/ClusteringFunctionTest.java | 11 +++++------ .../java/eu/dnetlib/pace/common/PaceFunctionTest.java | 10 ++++------ .../eu/dnetlib/pace/comparators/ComparatorTest.java | 9 ++++----- .../test/java/eu/dnetlib/pace/config/ConfigTest.java | 10 +++++----- .../src/test/java/eu/dnetlib/pace/util/UtilTest.java | 5 ++--- 6 files changed, 23 insertions(+), 27 deletions(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 3ddd658b1..e72bd3292 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -43,9 +43,10 @@ commons-logging commons-logging + - junit - junit + org.junit.jupiter + junit-jupiter test diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java index 396604cea..1b4f6f0eb 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java @@ -5,18 +5,17 @@ import com.google.common.collect.Maps; import eu.dnetlib.pace.AbstractPaceTest; import eu.dnetlib.pace.common.AbstractPaceFunctions; import eu.dnetlib.pace.config.DedupConfig; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.*; import java.util.Map; public class ClusteringFunctionTest extends AbstractPaceTest { - private Map params; - DedupConfig conf; + private static Map params; + private static DedupConfig conf; - @Before - public void setUp() throws Exception { + @BeforeAll + public static void setUp() throws Exception { params = Maps.newHashMap(); conf = DedupConfig.load(AbstractPaceFunctions.readFromClasspath("/eu/dnetlib/pace/config/organization.current.conf.json", ClusteringFunctionTest.class)); } diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/common/PaceFunctionTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/common/PaceFunctionTest.java index d92d4009a..ff1ca6721 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/common/PaceFunctionTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/common/PaceFunctionTest.java @@ -1,10 +1,8 @@ package eu.dnetlib.pace.common; -import org.junit.Assert; -import org.junit.Test; - -import static junit.framework.Assert.assertEquals; -import static junit.framework.Assert.assertTrue; +import org.junit.jupiter.api.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; public class PaceFunctionTest extends AbstractPaceFunctions { @@ -27,7 +25,7 @@ public class PaceFunctionTest extends AbstractPaceFunctions { @Test public void normalizeTest() { - Assert.assertEquals("universitat", normalize("Universität")); + assertEquals("universitat", normalize("Universität")); System.out.println(normalize("İstanbul Ticarət Universiteti")); } diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java index c1ce3d883..060526bfb 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java @@ -5,23 +5,22 @@ import eu.dnetlib.pace.model.MapDocument; import eu.dnetlib.pace.tree.*; import eu.dnetlib.pace.config.DedupConfig; import eu.dnetlib.pace.util.MapDocumentUtil; -import org.junit.Before; -import org.junit.Test; + +import org.junit.jupiter.api.*; +import static org.junit.jupiter.api.Assertions.assertEquals; import eu.dnetlib.pace.common.AbstractPaceFunctions; import java.util.HashMap; import java.util.Map; -import static junit.framework.Assert.assertEquals; -import static junit.framework.Assert.assertTrue; public class ComparatorTest extends AbstractPaceFunctions { private Map params; private DedupConfig conf; - @Before + @BeforeAll public void setup() { params = new HashMap<>(); params.put("weight", "1.0"); diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java index 4abf40cc8..05a8636ac 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java @@ -7,22 +7,22 @@ import eu.dnetlib.pace.model.FieldList; import eu.dnetlib.pace.model.MapDocument; import eu.dnetlib.pace.tree.JsonListMatch; import eu.dnetlib.pace.util.MapDocumentUtil; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.*; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; public class ConfigTest extends AbstractPaceTest { private Map params; - @Before + @BeforeAll public void setup() { params = new HashMap<>(); params.put("jpath_value", "$.value"); diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/util/UtilTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/util/UtilTest.java index b85be57d1..d8e0767d5 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/util/UtilTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/util/UtilTest.java @@ -1,7 +1,6 @@ package eu.dnetlib.pace.util; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.*; import java.util.HashMap; import java.util.Map; @@ -10,7 +9,7 @@ public class UtilTest { Map params; - @Before + @BeforeAll public void setUp(){ params = new HashMap(); } From 3a7336157bfb83dde7f5da3935c28a7c032388bc Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Mon, 12 Apr 2021 16:12:10 +0200 Subject: [PATCH 156/449] [maven-release-plugin] prepare release dnet-dedup-4.0.6 --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index e72bd3292..d0abe90fe 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 4.0.6-SNAPSHOT + 4.0.6 ../pom.xml From 58d013e24fd8e98f6a4df746063390be4d1ae306 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Mon, 12 Apr 2021 16:12:15 +0200 Subject: [PATCH 157/449] [maven-release-plugin] prepare for next development iteration --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index d0abe90fe..c02a73462 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 4.0.6 + 4.0.7-SNAPSHOT ../pom.xml From 4988e9f80df49eebd5ecbba17b3cb9ea1641f3f4 Mon Sep 17 00:00:00 2001 From: miconis Date: Mon, 3 May 2021 15:37:41 +0200 Subject: [PATCH 158/449] implementation of cross comparison for different fields, addition of clustering mechanism to collapse keys from different clustering functions on the same cluster --- .../pace/clustering/ClusteringCombiner.java | 39 +++++++++++++- .../pace/tree/support/TreeNodeDef.java | 15 +++++- .../clustering/ClusteringFunctionTest.java | 1 - .../eu/dnetlib/pace/config/ConfigTest.java | 46 +++++++++++++++- .../organization.cross.compare.conf.json | 52 +++++++++++++++++++ .../pace/config/publication.current.conf.json | 2 +- 6 files changed, 148 insertions(+), 7 deletions(-) create mode 100644 dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.cross.compare.conf.json diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringCombiner.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringCombiner.java index 52859b4b8..77a6aa137 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringCombiner.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringCombiner.java @@ -1,7 +1,9 @@ package eu.dnetlib.pace.clustering; +import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.stream.Collectors; import com.google.common.collect.Sets; @@ -9,9 +11,14 @@ import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.model.ClusteringDef; import eu.dnetlib.pace.model.Document; import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.FieldValueImpl; +import org.apache.commons.lang3.StringUtils; public class ClusteringCombiner { + private static String SEPARATOR = ":"; + private static String COLLAPSE_ON= "collapseOn"; + public static Collection combine(final Document a, final Config conf) { return new ClusteringCombiner().doCombine(a, conf); } @@ -20,10 +27,38 @@ public class ClusteringCombiner { final Collection res = Sets.newLinkedHashSet(); for (final ClusteringDef cd : conf.clusterings()) { for (final String fieldName : cd.getFields()) { - final Field values = a.values(fieldName); - res.addAll(cd.clusteringFunction().apply(conf, (List) values)); + String prefix = getPrefix(cd, fieldName); + + Field values = a.values(fieldName); + List fields = new ArrayList<>(); + + if (values instanceof FieldValueImpl) { + fields.add(values); + } + else { + fields.addAll((List) values); + } + + res.addAll( + cd.clusteringFunction() + .apply(conf, fields) + .stream() + .map(k -> prefix + SEPARATOR +k) + .collect(Collectors.toList()) + ); } } return res; } + + private String getPrefix(ClusteringDef cd, String fieldName) { + return cd.getName()+ SEPARATOR + + cd.getParams().keySet() + .stream() + .filter(k -> k.contains(COLLAPSE_ON)) + .findFirst() + .map(k -> StringUtils.substringAfter(k, SEPARATOR)) + .orElse(fieldName); + } + } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java index b6e27fa21..43b3a9276 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java @@ -5,6 +5,7 @@ import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.config.PaceConfig; import eu.dnetlib.pace.model.MapDocument; import eu.dnetlib.pace.util.PaceException; +import org.apache.commons.lang3.StringUtils; import java.io.IOException; import java.io.Serializable; @@ -12,6 +13,8 @@ import java.util.List; public class TreeNodeDef implements Serializable { + final static String CROSS_COMPARE = "crossCompare"; + private List fields; private AggType aggregation; @@ -45,7 +48,17 @@ public class TreeNodeDef implements Serializable { double weight = fieldConf.getWeight(); - double result = comparator(fieldConf).compare(doc1.getFieldMap().get(fieldConf.getField()), doc2.getFieldMap().get(fieldConf.getField()), conf); + double result; + + //if the param specifies a cross comparison (i.e. compare elements from different fields), compute the result for both sides and return the maximum + if(fieldConf.getParams().keySet().stream().anyMatch(k -> k.contains(CROSS_COMPARE))) { + String crossField = fieldConf.getParams().get(CROSS_COMPARE); + double result1 = comparator(fieldConf).compare(doc1.getFieldMap().get(fieldConf.getField()), doc2.getFieldMap().get(crossField), conf); + double result2 = comparator(fieldConf).compare(doc1.getFieldMap().get(crossField), doc2.getFieldMap().get(fieldConf.getField()), conf); + result = Math.max(result1,result2); + } + else + result = comparator(fieldConf).compare(doc1.getFieldMap().get(fieldConf.getField()), doc2.getFieldMap().get(fieldConf.getField()), conf); stats.addFieldStats( fieldConf.getComparator() + " on " + fieldConf.getField() + " " + fields.indexOf(fieldConf), diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java index 1b4f6f0eb..91a327474 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java @@ -175,5 +175,4 @@ public class ClusteringFunctionTest extends AbstractPaceTest { System.out.println(cf.apply(conf, Lists.newArrayList(title(s5)))); } - } diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java index 05a8636ac..dc7b11a8a 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java @@ -2,16 +2,24 @@ package eu.dnetlib.pace.config; import eu.dnetlib.pace.AbstractPaceTest; +import eu.dnetlib.pace.clustering.ClusteringClass; +import eu.dnetlib.pace.clustering.ClusteringCombiner; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.model.FieldList; import eu.dnetlib.pace.model.MapDocument; import eu.dnetlib.pace.tree.JsonListMatch; +import eu.dnetlib.pace.tree.support.AggType; +import eu.dnetlib.pace.tree.support.FieldConf; +import eu.dnetlib.pace.tree.support.TreeNodeDef; +import eu.dnetlib.pace.tree.support.TreeNodeStats; import eu.dnetlib.pace.util.MapDocumentUtil; import org.junit.jupiter.api.*; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; +import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -20,13 +28,14 @@ import java.util.stream.Collectors; public class ConfigTest extends AbstractPaceTest { - private Map params; + private static Map params; @BeforeAll - public void setup() { + public static void setup() { params = new HashMap<>(); params.put("jpath_value", "$.value"); params.put("jpath_classid", "$.qualifier.classid"); + } @Test @@ -102,4 +111,37 @@ public class ConfigTest extends AbstractPaceTest { System.out.println("result = " + MapDocumentUtil.getJPathString(jpath, json)); } + + @Test + public void clusteringCombinerTest() { + + DedupConfig dedupConf = DedupConfig.load(readFromClasspath("publication.current.conf.json")); + + final String json = readFromClasspath("publication.json"); + + final MapDocument mapDocument = MapDocumentUtil.asMapDocumentWithJPath(dedupConf, json); + + String[] combine = ClusteringCombiner.combine(mapDocument, dedupConf).toArray(new String[3]); + + assertEquals("test", combine[0].split(":")[1]); + assertEquals("title", combine[1].split(":")[1]); + assertEquals("doi", combine[2].split(":")[1]); + } + + @Test + public void crossCompareTest() { + + DedupConfig dedupConf = DedupConfig.load(readFromClasspath("organization.cross.compare.conf.json")); + + TreeNodeDef treeNode = dedupConf.decisionTree().get("start"); + + final String json = readFromClasspath("organization.json"); + + final MapDocument doc = MapDocumentUtil.asMapDocumentWithJPath(dedupConf, json); + + TreeNodeStats nodeStats = treeNode.evaluate(doc, doc, dedupConf); + + assertTrue(nodeStats.getFinalScore(AggType.MAX)>0.7); + + } } diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.cross.compare.conf.json b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.cross.compare.conf.json new file mode 100644 index 000000000..e6845aeca --- /dev/null +++ b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.cross.compare.conf.json @@ -0,0 +1,52 @@ +{ + "wf" : { + "threshold" : "0.99", + "dedupRun" : "001", + "entityType" : "organization", + "orderField" : "legalname", + "queueMaxSize" : "2000", + "groupMaxSize" : "50", + "slidingWindowSize" : "200", + "idPath":"$.id", + "rootBuilder" : [ "organization", "projectOrganization_participation_isParticipant", "datasourceOrganization_provision_isProvidedBy" ], + "includeChildren" : "true", + "maxIterations": "20" + }, + "pace" : { + "clustering" : [ + { "name" : "sortedngrampairs", "fields" : [ "legalname" ], "params" : { "max" : 2, "ngramLen" : "3"} }, + { "name" : "suffixprefix", "fields" : [ "legalname" ], "params" : { "max" : 1, "len" : "3" } }, + { "name" : "urlclustering", "fields" : [ "websiteurl" ], "params" : { } }, + { "name" : "keywordsclustering", "fields" : [ "legalname" ], "params" : { "max": 2, "windowSize": 4} } + ], + "decisionTree" : { + "start": { + "fields": [ + { + "field": "legalname", + "comparator": "levenstein", + "weight": 1, + "countIfUndefined": "false", + "params": { + "crossCompare" : "legalshortname" + } + } + ], + "threshold": 1, + "aggregation": "AVG", + "positive": "MATCH", + "negative": "NO_MATCH", + "undefined": "NO_MATCH", + "ignoreUndefined": "false" + } + }, + "model" : [ + { "name" : "legalshortname", "type" : "String", "path" : "$.organization.metadata.legalshortname.value"}, + { "name" : "legalname", "type" : "String", "path" : "$.organization.metadata.legalname.value" } + ], + "blacklists" : { + "legalname" : [] + }, + "synonyms": {} + } +} \ No newline at end of file diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/publication.current.conf.json b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/publication.current.conf.json index 78a3b4e44..267ed458a 100644 --- a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/publication.current.conf.json +++ b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/publication.current.conf.json @@ -29,7 +29,7 @@ }, "pace": { "clustering" : [ - { "name" : "ngrampairs", "fields" : [ "title" ], "params" : { "max" : "1", "ngramLen" : "3"} }, + { "name" : "ngrampairs", "fields" : [ "title" ], "params" : { "max" : "1", "ngramLen" : "3", "collapseOn:test": ""} }, { "name" : "suffixprefix", "fields" : [ "title" ], "params" : { "max" : "1", "len" : "3" } }, { "name" : "lowercase", "fields" : [ "doi" ], "params" : { } } ], From 4bce4f2e8ed294e3b1fd5e0e6953e5886df43b31 Mon Sep 17 00:00:00 2001 From: miconis Date: Mon, 3 May 2021 16:05:39 +0200 Subject: [PATCH 159/449] minor change: version updated --- dnet-pace-core/pom.xml | 2 +- .../eu/dnetlib/pace/config/organization.cross.compare.conf.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index c02a73462..754417b21 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 4.0.7-SNAPSHOT + 4.1.7-SNAPSHOT ../pom.xml diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.cross.compare.conf.json b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.cross.compare.conf.json index e6845aeca..a349661e1 100644 --- a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.cross.compare.conf.json +++ b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.cross.compare.conf.json @@ -15,7 +15,7 @@ "pace" : { "clustering" : [ { "name" : "sortedngrampairs", "fields" : [ "legalname" ], "params" : { "max" : 2, "ngramLen" : "3"} }, - { "name" : "suffixprefix", "fields" : [ "legalname" ], "params" : { "max" : 1, "len" : "3" } }, + { "name" : "suffixprefix", "fields" : [ "legalname" ], "params" : {"max" : 1, "len" : "3" } }, { "name" : "urlclustering", "fields" : [ "websiteurl" ], "params" : { } }, { "name" : "keywordsclustering", "fields" : [ "legalname" ], "params" : { "max": 2, "windowSize": 4} } ], From f33a18ca9dde2c7901cd71939f565062d0a6d6be Mon Sep 17 00:00:00 2001 From: miconis Date: Mon, 3 May 2021 16:09:08 +0200 Subject: [PATCH 160/449] [maven-release-plugin] prepare release dnet-dedup-4.1.7 --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 754417b21..253c55c23 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 4.1.7-SNAPSHOT + 4.1.7 ../pom.xml From 1144d50a11c7a1aada362040928f7c160e9dc48a Mon Sep 17 00:00:00 2001 From: miconis Date: Mon, 3 May 2021 16:09:56 +0200 Subject: [PATCH 161/449] [maven-release-plugin] prepare for next development iteration --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 253c55c23..756321097 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 4.1.7 + 4.1.8-SNAPSHOT ../pom.xml From fbb1b66bfba175d67693415885cd88f13ead909a Mon Sep 17 00:00:00 2001 From: miconis Date: Mon, 13 Sep 2021 14:53:19 +0200 Subject: [PATCH 162/449] dedup test implementation & graph drawing tools --- .../pace/util/BlockProcessorForTesting.java | 232 ++++++++++ .../clustering/ClusteringFunctionTest.java | 17 +- .../pace/comparators/ComparatorTest.java | 38 +- .../eu/dnetlib/pace/config/ConfigTest.java | 18 + .../eu/dnetlib/pace/config/pub.prod.conf.json | 402 ++++++++++++++++++ .../pace/config/publication.example.json | 1 + release.properties | 11 - 7 files changed, 705 insertions(+), 14 deletions(-) create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessorForTesting.java create mode 100644 dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/pub.prod.conf.json create mode 100644 dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/publication.example.json delete mode 100644 release.properties diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessorForTesting.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessorForTesting.java new file mode 100644 index 000000000..9bf05f37b --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessorForTesting.java @@ -0,0 +1,232 @@ +package eu.dnetlib.pace.util; + +import com.google.common.collect.Lists; +import eu.dnetlib.pace.clustering.NGramUtils; +import eu.dnetlib.pace.config.DedupConfig; +import eu.dnetlib.pace.config.WfConfig; +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.MapDocument; +import eu.dnetlib.pace.model.MapDocumentComparator; +import eu.dnetlib.pace.tree.JsonListMatch; +import eu.dnetlib.pace.tree.LevensteinTitle; +import eu.dnetlib.pace.tree.SizeMatch; +import eu.dnetlib.pace.tree.TitleVersionMatch; +import eu.dnetlib.pace.tree.support.FieldStats; +import eu.dnetlib.pace.tree.support.TreeProcessor; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.util.*; + +public class BlockProcessorForTesting { + + public static final List accumulators= new ArrayList<>(); + + private static final Log log = LogFactory.getLog(eu.dnetlib.pace.util.BlockProcessorForTesting.class); + + private DedupConfig dedupConf; + + public static void constructAccumulator( final DedupConfig dedupConf) { + accumulators.add(String.format("%s::%s",dedupConf.getWf().getEntityType(), "records per hash key = 1")); + accumulators.add(String.format("%s::%s",dedupConf.getWf().getEntityType(), "missing " + dedupConf.getWf().getOrderField())); + accumulators.add(String.format("%s::%s",dedupConf.getWf().getEntityType(), String.format("Skipped records for count(%s) >= %s", dedupConf.getWf().getOrderField(), dedupConf.getWf().getGroupMaxSize()))); + accumulators.add(String.format("%s::%s",dedupConf.getWf().getEntityType(), "skip list")); + accumulators.add(String.format("%s::%s",dedupConf.getWf().getEntityType(), "dedupSimilarity (x2)")); + accumulators.add(String.format("%s::%s",dedupConf.getWf().getEntityType(), "d < " + dedupConf.getWf().getThreshold())); + } + + public BlockProcessorForTesting(DedupConfig dedupConf) { + this.dedupConf = dedupConf; + } + + public void processSortedBlock(final String key, final List documents, final Reporter context, boolean useTree) { + if (documents.size() > 1) { +// log.info("reducing key: '" + key + "' records: " + q.size()); + process(prepare(documents), context, useTree); + + } else { + context.incrementCounter(dedupConf.getWf().getEntityType(), "records per hash key = 1", 1); + } + } + + public void process(final String key, final Iterable documents, final Reporter context, boolean useTree) { + + final Queue q = prepare(documents); + + if (q.size() > 1) { +// log.info("reducing key: '" + key + "' records: " + q.size()); + process(simplifyQueue(q, key, context), context, useTree); + + } else { + context.incrementCounter(dedupConf.getWf().getEntityType(), "records per hash key = 1", 1); + } + } + + private Queue prepare(final Iterable documents) { + final Queue queue = new PriorityQueue<>(100, new MapDocumentComparator(dedupConf.getWf().getOrderField())); + + final Set seen = new HashSet(); + final int queueMaxSize = dedupConf.getWf().getQueueMaxSize(); + + documents.forEach(doc -> { + if (queue.size() <= queueMaxSize) { + final String id = doc.getIdentifier(); + + if (!seen.contains(id)) { + seen.add(id); + queue.add(doc); + } + } + }); + + return queue; + } + + private Queue simplifyQueue(final Queue queue, final String ngram, final Reporter context) { + final Queue q = new LinkedList<>(); + + String fieldRef = ""; + final List tempResults = Lists.newArrayList(); + + while (!queue.isEmpty()) { + final MapDocument result = queue.remove(); + + final String orderFieldName = dedupConf.getWf().getOrderField(); + final Field orderFieldValue = result.values(orderFieldName); + if (!orderFieldValue.isEmpty()) { + final String field = NGramUtils.cleanupForOrdering(orderFieldValue.stringValue()); + if (field.equals(fieldRef)) { + tempResults.add(result); + } else { + populateSimplifiedQueue(q, tempResults, context, fieldRef, ngram); + tempResults.clear(); + tempResults.add(result); + fieldRef = field; + } + } else { + context.incrementCounter(dedupConf.getWf().getEntityType(), "missing " + dedupConf.getWf().getOrderField(), 1); + } + } + populateSimplifiedQueue(q, tempResults, context, fieldRef, ngram); + + return q; + } + + private void populateSimplifiedQueue(final Queue q, + final List tempResults, + final Reporter context, + final String fieldRef, + final String ngram) { + WfConfig wf = dedupConf.getWf(); + if (tempResults.size() < wf.getGroupMaxSize()) { + q.addAll(tempResults); + } else { + context.incrementCounter(wf.getEntityType(), String.format("Skipped records for count(%s) >= %s", wf.getOrderField(), wf.getGroupMaxSize()), tempResults.size()); +// log.info("Skipped field: " + fieldRef + " - size: " + tempResults.size() + " - ngram: " + ngram); + } + } + + private void process(final Queue queue, final Reporter context, boolean useTree) { + + while (!queue.isEmpty()) { + + final MapDocument pivot = queue.remove(); + final String idPivot = pivot.getIdentifier(); + + WfConfig wf = dedupConf.getWf(); + final Field fieldsPivot = pivot.values(wf.getOrderField()); + final String fieldPivot = (fieldsPivot == null) || fieldsPivot.isEmpty() ? "" : fieldsPivot.stringValue(); + + if (fieldPivot != null) { + int i = 0; + for (final MapDocument curr : queue) { + final String idCurr = curr.getIdentifier(); + + if (mustSkip(idCurr)) { + + context.incrementCounter(wf.getEntityType(), "skip list", 1); + + break; + } + + if (i > wf.getSlidingWindowSize()) { + break; + } + + final Field fieldsCurr = curr.values(wf.getOrderField()); + final String fieldCurr = (fieldsCurr == null) || fieldsCurr.isEmpty() ? null : fieldsCurr.stringValue(); + + if (!idCurr.equals(idPivot) && (fieldCurr != null)) { + +// if (new TreeProcessor(dedupConf).compare(pivot, curr) == true && publicationCompare(pivot, curr, dedupConf) == false) +// emitOutput(true, idPivot, idCurr, context); +// + if(useTree) + emitOutput(new TreeProcessor(dedupConf).compare(pivot, curr), idPivot, idCurr, context); + else + emitOutput(publicationCompare(pivot, curr, dedupConf), idPivot, idCurr, context); + + } + } + } + } + } + + private boolean publicationCompare(MapDocument a, MapDocument b, DedupConfig config) { + + double score = 0.0; + //LAYER 1 - comparison of the PIDs json lists + Map params = new HashMap<>(); + params.put("jpath_value", "$.value"); + params.put("jpath_classid", "$.qualifier.classid"); + JsonListMatch jsonListMatch = new JsonListMatch(params); + double result = jsonListMatch.compare(a.getFieldMap().get("pid"), b.getFieldMap().get("pid"), config); + if (result >= 0.5) //if the result of the comparison is greater than the threshold + score += 10.0; //high score because it should match when the first condition is satisfied + else + score += 0.0; + + //LAYER 2 - comparison of the title version and the size of the authors lists + TitleVersionMatch titleVersionMatch = new TitleVersionMatch(params); + double result1 = titleVersionMatch.compare(a.getFieldMap().get("title"), b.getFieldMap().get("title"), config); + SizeMatch sizeMatch = new SizeMatch(params); + double result2 = sizeMatch.compare(a.getFieldMap().get("authors"), b.getFieldMap().get("authors"), config); + if (Math.min(result1, result2) != 0) + score+=0; + else + score-=2; + + //LAYER 3 - computation of levenshtein on titles + LevensteinTitle levensteinTitle = new LevensteinTitle(params); + double result3 = levensteinTitle.compare(a.getFieldMap().get("title"), b.getFieldMap().get("title"), config); + score += Double.isNaN(result3)?0.0:result3; + + return score >= 0.99; + } + + private void emitOutput(final boolean result, final String idPivot, final String idCurr, final Reporter context) { + + if (result) { + writeSimilarity(context, idPivot, idCurr); + context.incrementCounter(dedupConf.getWf().getEntityType(), "dedupSimilarity (x2)", 1); + } else { + context.incrementCounter(dedupConf.getWf().getEntityType(), "d < " + dedupConf.getWf().getThreshold(), 1); + } + } + + private boolean mustSkip(final String idPivot) { + return dedupConf.getWf().getSkipList().contains(getNsPrefix(idPivot)); + } + + private String getNsPrefix(final String id) { + return StringUtils.substringBetween(id, "|", "::"); + } + + private void writeSimilarity(final Reporter context, final String from, final String to) { + final String type = dedupConf.getWf().getEntityType(); + + context.emit(type, from, to); + context.emit(type, to, from); + } +} diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java index 91a327474..8657b5804 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java @@ -47,7 +47,7 @@ public class ClusteringFunctionTest extends AbstractPaceTest { @Test public void testNgramPairs() { params.put("ngramLen", 3); - params.put("max", 1); + params.put("max", 2); final ClusteringFunction np = new NgramPairs(params); @@ -59,7 +59,7 @@ public class ClusteringFunctionTest extends AbstractPaceTest { @Test public void testSortedNgramPairs() { params.put("ngramLen", 3); - params.put("max", 1); + params.put("max", 2); final ClusteringFunction np = new SortedNgramPairs(params); @@ -70,6 +70,11 @@ public class ClusteringFunctionTest extends AbstractPaceTest { final String s2 = "Pisa University"; System.out.println(s2); System.out.println(np.apply(conf, Lists.newArrayList(title(s2)))); + + final String s3 = "Parco Tecnologico Agroalimentare Umbria"; + System.out.println(s3); + System.out.println(np.apply(conf, Lists.newArrayList(title(s3)))); + } @Test @@ -132,6 +137,14 @@ public class ClusteringFunctionTest extends AbstractPaceTest { System.out.println(s); System.out.println(sp.apply(conf, Lists.newArrayList(title(s)))); + s = "JRC Open Power Plants Database (JRC-PPDB-OPEN)"; + System.out.println(s); + System.out.println(sp.apply(conf, Lists.newArrayList(title(s)))); + + s = "JRC Open Power Plants Database"; + System.out.println(s); + System.out.println(sp.apply(conf, Lists.newArrayList(title(s)))); + } @Test diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java index 060526bfb..6bdd1ad45 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java @@ -14,7 +14,7 @@ import eu.dnetlib.pace.common.AbstractPaceFunctions; import java.util.HashMap; import java.util.Map; - +@TestInstance(TestInstance.Lifecycle.PER_CLASS) public class ComparatorTest extends AbstractPaceFunctions { private Map params; @@ -119,6 +119,42 @@ public class ComparatorTest extends AbstractPaceFunctions { } + @Test + public void jaroWinklerTest() { + + final JaroWinkler jaroWinkler = new JaroWinkler(params); + + double result = jaroWinkler.distance("Sofia", "Sofìa", conf); + System.out.println("result = " + result); + + result = jaroWinkler.distance("University of Victoria Dataverse", "University of Windsor Dataverse", conf); + System.out.println("result = " + result); + + result = jaroWinkler.distance("Victoria Dataverse", "Windsor Dataverse", conf); + System.out.println("result = " + result); + + final Levenstein levenstein = new Levenstein(params); + + result = levenstein.distance("Victoria", "Windsor", conf); + System.out.println("result = " + result); + + //University of Victoria Dataverse + //University of British Columbia Dataverse + //University of Windsor Dataverse + //University of Waterloo Dataverse + //University of Toronto Dataverse + //University of Ottawa Dataverse + } + + @Test + public void levensteinTitleTest() { + + final LevensteinTitle levensteinTitle = new LevensteinTitle(params); + double result = levensteinTitle.distance("JRC: Open Power Plants Database", "JRC Open Power Plants Database (JRC-PPDB-OPEN)", conf); + + System.out.println("result = " + result); + } + @Test public void jsonListMatchTest(){ diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java index dc7b11a8a..dbf7f08a9 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java @@ -2,6 +2,7 @@ package eu.dnetlib.pace.config; import eu.dnetlib.pace.AbstractPaceTest; +import eu.dnetlib.pace.clustering.BlacklistAwareClusteringCombiner; import eu.dnetlib.pace.clustering.ClusteringClass; import eu.dnetlib.pace.clustering.ClusteringCombiner; import eu.dnetlib.pace.model.Field; @@ -128,6 +129,23 @@ public class ConfigTest extends AbstractPaceTest { assertEquals("doi", combine[2].split(":")[1]); } + @Test + public void filterAndCombineTest() { + + DedupConfig dedupConf = DedupConfig.load(readFromClasspath("pub.prod.conf.json")); + + final String json = readFromClasspath("publication.example.json"); + + final MapDocument mapDocument = MapDocumentUtil.asMapDocumentWithJPath(dedupConf, json); + + Collection strings = BlacklistAwareClusteringCombiner.filterAndCombine(mapDocument, dedupConf); + + for (String s: strings) { + System.out.println("s = " + s); + } + + } + @Test public void crossCompareTest() { diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/pub.prod.conf.json b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/pub.prod.conf.json new file mode 100644 index 000000000..ab34ed877 --- /dev/null +++ b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/pub.prod.conf.json @@ -0,0 +1,402 @@ + +{ + "wf": { + "threshold": "0.99", + "dedupRun": "001", + "entityType": "result", + "subEntityType": "resulttype", + "subEntityValue": "publication", + "orderField": "title", + "queueMaxSize": "200", + "groupMaxSize": "100", + "maxChildren": "100", + "slidingWindowSize": "50", + "rootBuilder": [ + "result", + "resultProject_outcome_isProducedBy", + "resultResult_publicationDataset_isRelatedTo", + "resultResult_similarity_isAmongTopNSimilarDocuments", + "resultResult_similarity_hasAmongTopNSimilarDocuments", + "resultOrganization_affiliation_isAffiliatedWith", + "resultResult_part_hasPart", + "resultResult_part_isPartOf", + "resultResult_supplement_isSupplementTo", + "resultResult_supplement_isSupplementedBy", + "resultResult_version_isVersionOf" + ], + "includeChildren": "true", + "maxIterations": 20, + "idPath": "$.id" + }, + "pace": { + "clustering" : [ + { "name" : "wordsStatsSuffixPrefixChain", "fields" : [ "title" ], "params" : { "mod" : "10" } }, + { "name" : "lowercase", "fields" : [ "doi", "altdoi" ], "params" : { "collapseOn:pid": "0"} } + ], + "decisionTree": { + "start": { + "fields": [ + { + "field": "pid", + "comparator": "jsonListMatch", + "weight": 1.0, + "countIfUndefined": "false", + "params": { + "jpath_value": "$.value", + "jpath_classid": "$.qualifier.classid" + } + }, + { + "field": "pid", + "comparator": "jsonListMatch", + "weight": 1.0, + "countIfUndefined": "false", + "params": { + "jpath_value": "$.value", + "jpath_classid": "$.qualifier.classid", + "crossCompare": "alternateid" + } + } + ], + "threshold": 0.5, + "aggregation": "MAX", + "positive": "layer1", + "negative": "layer2", + "undefined": "layer2", + "ignoreUndefined": "true" + }, + "layer1": { + "fields": [ + { + "field": "title", + "comparator": "levensteinTitle", + "weight": 1.0, + "countIfUndefined": "true", + "params": {} + } + ], + "threshold": 0.9, + "aggregation": "AVG", + "positive": "MATCH", + "negative": "NO_MATCH", + "undefined": "NO_MATCH", + "ignoreUndefined": "true" + }, + "layer2": { + "fields": [ + { + "field": "title", + "comparator": "titleVersionMatch", + "weight": 1.0, + "countIfUndefined": "false", + "params": {} + }, + { + "field": "authors", + "comparator": "sizeMatch", + "weight": 1.0, + "countIfUndefined": "false", + "params": {} + } + ], + "threshold": 1.0, + "aggregation": "AND", + "positive": "layer3", + "negative": "NO_MATCH", + "undefined": "layer3", + "ignoreUndefined": "false" + }, + "layer3": { + "fields": [ + { + "field": "title", + "comparator": "levensteinTitle", + "weight": 1.0, + "countIfUndefined": "true", + "params": {} + } + ], + "threshold": 0.99, + "aggregation": "AVG", + "positive": "MATCH", + "negative": "NO_MATCH", + "undefined": "NO_MATCH", + "ignoreUndefined": "true" + } + }, + "model": [ + { + "name": "doi", + "type": "String", + "path": "$.instance.pid[?(@.qualifier.classid == 'doi')].value" + }, + { + "name": "altdoi", + "type": "String", + "path": "$.instance.alternateIdentifier[?(@.qualifier.classid == 'doi')].value" + }, + { + "name": "pid", + "type": "JSON", + "path": "$.instance.pid", + "overrideMatch": "true" + }, + { + "name": "alternateid", + "type": "JSON", + "path": "$.instance.alternateIdentifier", + "overrideMatch": "true" + }, + { + "name": "title", + "type": "String", + "path": "$.title[?(@.qualifier.classid == 'main title')].value", + "length": 250, + "size": 5 + }, + { + "name": "authors", + "type": "List", + "path": "$.author[*].fullname", + "size": 200 + }, + { + "name": "resulttype", + "type": "String", + "path": "$.resulttype.classid" + } + ], + "blacklists": { + "title": [ + "(?i)^Data Management Plan", + "^Inside Front Cover$", + "(?i)^Poster presentations$", + "^THE ASSOCIATION AND THE GENERAL MEDICAL COUNCIL$", + "^Problems with perinatal pathology\\.?$", + "(?i)^Cases? of Puerperal Convulsions$", + "(?i)^Operative Gyna?ecology$", + "(?i)^Mind the gap\\!?\\:?$", + "^Chronic fatigue syndrome\\.?$", + "^Cartas? ao editor Letters? to the Editor$", + "^Note from the Editor$", + "^Anesthesia Abstract$", + "^Annual report$", + "(?i)^“?THE RADICAL PREVENTION OF VENEREAL DISEASE\\.?”?$", + "(?i)^Graph and Table of Infectious Diseases?$", + "^Presentation$", + "(?i)^Reviews and Information on Publications$", + "(?i)^PUBLIC HEALTH SERVICES?$", + "(?i)^COMBINED TEXT-?BOOK OF OBSTETRICS AND GYN(Æ|ae)COLOGY$", + "(?i)^Adrese autora$", + "(?i)^Systematic Part .*\\. Catalogus Fossilium Austriae, Band 2: Echinoidea neogenica$", + "(?i)^Acknowledgement to Referees$", + "(?i)^Behçet's disease\\.?$", + "(?i)^Isolation and identification of restriction endonuclease.*$", + "(?i)^CEREBROVASCULAR DISEASES?.?$", + "(?i)^Screening for abdominal aortic aneurysms?\\.?$", + "^Event management$", + "(?i)^Breakfast and Crohn's disease.*\\.?$", + "^Cálculo de concentraciones en disoluciones acuosas. Ejercicio interactivo\\..*\\.$", + "(?i)^Genetic and functional analyses of SHANK2 mutations suggest a multiple hit model of Autism spectrum disorders?\\.?$", + "^Gushi hakubutsugaku$", + "^Starobosanski nadpisi u Bosni i Hercegovini \\(.*\\)$", + "^Intestinal spirocha?etosis$", + "^Treatment of Rodent Ulcer$", + "(?i)^\\W*Cloud Computing\\W*$", + "^Compendio mathematico : en que se contienen todas las materias mas principales de las Ciencias que tratan de la cantidad$", + "^Free Communications, Poster Presentations: Session [A-F]$", + "^“The Historical Aspects? of Quackery\\.?”$", + "^A designated centre for people with disabilities operated by St John of God Community Services (Limited|Ltd), Louth$", + "^P(er|re)-Mile Premiums for Auto Insurance\\.?$", + "(?i)^Case Report$", + "^Boletín Informativo$", + "(?i)^Glioblastoma Multiforme$", + "(?i)^Nuevos táxones animales descritos en la península Ibérica y Macaronesia desde 1994 \\(.*\\)$", + "^Zaměstnanecké výhody$", + "(?i)^The Economics of Terrorism and Counter-Terrorism: A Survey \\(Part .*\\)$", + "(?i)^Carotid body tumours?\\.?$", + "(?i)^\\[Españoles en Francia : La condición Emigrante.*\\]$", + "^Avant-propos$", + "(?i)^St\\. Patrick's Cathedral, Dublin, County Dublin - Head(s)? and Capital(s)?$", + "(?i)^St\\. Patrick's Cathedral, Dublin, County Dublin - Bases?$", + "(?i)^PUBLIC HEALTH VERSUS THE STATE$", + "^Viñetas de Cortázar$", + "(?i)^Search for heavy neutrinos and W(\\[|_|\\(|_\\{|-)?R(\\]|\\)|\\})? bosons with right-handed couplings in a left-right symmetric model in pp collisions at.*TeV(\\.)?$", + "(?i)^Measurement of the pseudorapidity and centrality dependence of the transverse energy density in Pb(-?)Pb collisions at.*tev(\\.?)$", + "(?i)^Search for resonances decaying into top-quark pairs using fully hadronic decays in pp collisions with ATLAS at.*TeV$", + "(?i)^Search for neutral minimal supersymmetric standard model Higgs bosons decaying to tau pairs in pp collisions at.*tev$", + "(?i)^Relatório de Estágio (de|em) Angiologia e Cirurgia Vascular$", + "^Aus der AGMB$", + "^Znanstveno-stručni prilozi$", + "(?i)^Zhodnocení finanční situace podniku a návrhy na zlepšení$", + "(?i)^Evaluation of the Financial Situation in the Firm and Proposals to its Improvement$", + "(?i)^Hodnocení finanční situace podniku a návrhy na její zlepšení$", + "^Finanční analýza podniku$", + "^Financial analysis( of business)?$", + "(?i)^Textbook of Gyn(a)?(Æ)?(e)?cology$", + "^Jikken nihon shūshinsho$", + "(?i)^CORONER('|s)(s|') INQUESTS$", + "(?i)^(Μελέτη παραγόντων )?risk management( για ανάπτυξη και εφαρμογή ενός πληροφοριακού συστήματος| και ανάπτυξη συστήματος)?$", + "(?i)^Consultants' contract(s)?$", + "(?i)^Upute autorima$", + "(?i)^Bijdrage tot de Kennis van den Godsdienst der Dajaks van Lan(d|f)ak en Tajan$", + "^Joshi shin kokubun$", + "^Kōtō shōgaku dokuhon nōson'yō$", + "^Jinjō shōgaku shōka$", + "^Shōgaku shūjichō$", + "^Nihon joshi dokuhon$", + "^Joshi shin dokuhon$", + "^Chūtō kanbun dokuhon$", + "^Wabun dokuhon$", + "(?i)^(Analysis of economy selected village or town|Rozbor hospodaření vybrané obce či města)$", + "(?i)^cardiac rehabilitation$", + "(?i)^Analytical summary$", + "^Thesaurus resolutionum Sacrae Congregationis Concilii$", + "(?i)^Sumario analítico(\\s{1})?(Analitic summary)?$", + "^Prikazi i osvrti$", + "^Rodinný dům s provozovnou$", + "^Family house with an establishment$", + "^Shinsei chūtō shin kokugun$", + "^Pulmonary alveolar proteinosis(\\.?)$", + "^Shinshū kanbun$", + "^Viñeta(s?) de Rodríguez$", + "(?i)^RUBRIKA UREDNIKA$", + "^A Matching Model of the Academic Publication Market$", + "^Yōgaku kōyō$", + "^Internetový marketing$", + "^Internet marketing$", + "^Chūtō kokugo dokuhon$", + "^Kokugo dokuhon$", + "^Antibiotic Cover for Dental Extraction(s?)$", + "^Strategie podniku$", + "^Strategy of an Enterprise$", + "(?i)^respiratory disease(s?)(\\.?)$", + "^Award(s?) for Gallantry in Civil Defence$", + "^Podniková kultura$", + "^Corporate Culture$", + "^Severe hyponatraemia in hospital inpatient(s?)(\\.?)$", + "^Pracovní motivace$", + "^Work Motivation$", + "^Kaitei kōtō jogaku dokuhon$", + "^Konsolidovaná účetní závěrka$", + "^Consolidated Financial Statements$", + "(?i)^intracranial tumour(s?)$", + "^Climate Change Mitigation Options and Directed Technical Change: A Decentralized Equilibrium Analysis$", + "^\\[CERVECERIAS MAHOU(\\.|\\:) INTERIOR\\] \\[Material gráfico\\]$", + "^Housing Market Dynamics(\\:|\\.) On the Contribution of Income Shocks and Credit Constraint(s?)$", + "^\\[Funciones auxiliares de la música en Radio París,.*\\]$", + "^Úroveň motivačního procesu jako způsobu vedení lidí$", + "^The level of motivation process as a leadership$", + "^Pay-beds in N(\\.?)H(\\.?)S(\\.?) Hospitals$", + "(?i)^news and events$", + "(?i)^NOVOSTI I DOGAĐAJI$", + "^Sansū no gakushū$", + "^Posouzení informačního systému firmy a návrh změn$", + "^Information System Assessment and Proposal for ICT Modification$", + "^Stresové zatížení pracovníků ve vybrané profesi$", + "^Stress load in a specific job$", + "^Sunday: Poster Sessions, Pt.*$", + "^Monday: Poster Sessions, Pt.*$", + "^Wednesday: Poster Sessions, Pt.*", + "^Tuesday: Poster Sessions, Pt.*$", + "^Analýza reklamy$", + "^Analysis of advertising$", + "^Shōgaku shūshinsho$", + "^Shōgaku sansū$", + "^Shintei joshi kokubun$", + "^Taishō joshi kokubun dokuhon$", + "^Joshi kokubun$", + "^Účetní uzávěrka a účetní závěrka v ČR$", + "(?i)^The \"?Causes\"? of Cancer$", + "^Normas para la publicación de artículos$", + "^Editor('|s)(s|') [Rr]eply$", + "^Editor(’|s)(s|’) letter$", + "^Redaktoriaus žodis$", + "^DISCUSSION ON THE PRECEDING PAPER$", + "^Kōtō shōgaku shūshinsho jidōyō$", + "^Shōgaku nihon rekishi$", + "^(Theory of the flow of action currents in isolated myelinated nerve fibers).*$", + "^Préface$", + "^Occupational [Hh]ealth [Ss]ervices.$", + "^In Memoriam Professor Toshiyuki TAKESHIMA$", + "^Účetní závěrka ve vybraném podniku.*$", + "^Financial statements in selected company$", + "^Abdominal [Aa]ortic [Aa]neurysms.*$", + "^Pseudomyxoma peritonei$", + "^Kazalo autora$", + "(?i)^uvodna riječ$", + "^Motivace jako způsob vedení lidí$", + "^Motivation as a leadership$", + "^Polyfunkční dům$", + "^Multi\\-funkcional building$", + "^Podnikatelský plán$", + "(?i)^Podnikatelský záměr$", + "(?i)^Business Plan$", + "^Oceňování nemovitostí$", + "^Marketingová komunikace$", + "^Marketing communication$", + "^Sumario Analítico$", + "^Riječ uredništva$", + "^Savjetovanja i priredbe$", + "^Índice$", + "^(Starobosanski nadpisi).*$", + "^Vzdělávání pracovníků v organizaci$", + "^Staff training in organization$", + "^(Life Histories of North American Geometridae).*$", + "^Strategická analýza podniku$", + "^Strategic Analysis of an Enterprise$", + "^Sadržaj$", + "^Upute suradnicima$", + "^Rodinný dům$", + "(?i)^Fami(l)?ly house$", + "^Upute autorima$", + "^Strategic Analysis$", + "^Finanční analýza vybraného podniku$", + "^Finanční analýza$", + "^Riječ urednika$", + "(?i)^Content(s?)$", + "(?i)^Inhalt$", + "^Jinjō shōgaku shūshinsho jidōyō$", + "(?i)^Index$", + "^Chūgaku kokubun kyōkasho$", + "^Retrato de una mujer$", + "^Retrato de un hombre$", + "^Kōtō shōgaku dokuhon$", + "^Shotōka kokugo$", + "^Shōgaku dokuhon$", + "^Jinjō shōgaku kokugo dokuhon$", + "^Shinsei kokugo dokuhon$", + "^Teikoku dokuhon$", + "^Instructions to Authors$", + "^KİTAP TAHLİLİ$", + "^PRZEGLĄD PIŚMIENNICTWA$", + "(?i)^Presentación$", + "^İçindekiler$", + "(?i)^Tabl?e of contents$", + "^(CODICE DEL BEATO DE LOS REYES FERNANDO I Y SANCHA).*$", + "^(\\[MADRID\\. BIBL\\. NAC\\. N.*KING FERDINAND I.*FROM SAN ISIDORO DE LEON\\. FACUNDUS SCRIPSIT DATED.*\\]).*", + "^Editorial( Board)?$", + "(?i)^Editorial \\(English\\)$", + "^Editörden$", + "^(Corpus Oral Dialectal \\(COD\\)\\.).*$", + "^(Kiri Karl Morgensternile).*$", + "^(\\[Eksliibris Aleksandr).*\\]$", + "^(\\[Eksliibris Aleksandr).*$", + "^(Eksliibris Aleksandr).*$", + "^(Kiri A\\. de Vignolles).*$", + "^(2 kirja Karl Morgensternile).*$", + "^(Pirita kloostri idaosa arheoloogilised).*$", + "^(Kiri tundmatule).*$", + "^(Kiri Jenaer Allgemeine Literaturzeitung toimetusele).*$", + "^(Eksliibris Nikolai Birukovile).*$", + "^(Eksliibris Nikolai Issakovile).*$", + "^(WHP Cruise Summary Information of section).*$", + "^(Measurement of the top quark\\-pair production cross section with ATLAS in pp collisions at).*$", + "^(Measurement of the spin\\-dependent structure function).*", + "(?i)^.*authors['’′]? reply\\.?$", + "(?i)^.*authors['’′]? response\\.?$" + ] + }, + "synonyms": {} + } +} \ No newline at end of file diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/publication.example.json b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/publication.example.json new file mode 100644 index 000000000..e15cdc524 --- /dev/null +++ b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/publication.example.json @@ -0,0 +1 @@ +{"dataInfo": {"deletedbyinference": false, "provenanceaction": {"classid": "sysimport:crosswalk:repository", "classname": "sysimport:crosswalk:repository", "schemename": "dnet:provenanceActions", "schemeid": "dnet:provenanceActions"}, "inferred": false, "inferenceprovenance": "", "invisible": false, "trust": "0.9"}, "pid": [], "oaiprovenance": {"originDescription": {"metadataNamespace": "", "harvestDate": "2021-06-10T10:03:36.091Z", "baseURL": "file%3A%2F%2F%2Fvar%2Flib%2Fdnet%2Fdata%2Fsygma%2Fnew_ingestion%2Fcrossref", "datestamp": "", "altered": true, "identifier": ""}}, "relevantdate": [], "contributor": [], "id": "50|sygma_______::3bbb03e6ec8df0d219b2d2165ea1d446", "subject": [], "lastupdatetimestamp": 1628684944004, "author": [{"surname": "Pan", "fullname": "Pan, Mengwu", "pid": [], "name": "Mengwu", "rank": 1}, {"surname": "Blattner", "fullname": "Blattner, Christine", "pid": [{"dataInfo": {"deletedbyinference": false, "provenanceaction": {"classid": "sysimport:crosswalk:repository", "classname": "sysimport:crosswalk:repository", "schemename": "dnet:provenanceActions", "schemeid": "dnet:provenanceActions"}, "inferred": false, "inferenceprovenance": "", "invisible": false, "trust": "0.9"}, "qualifier": {"classid": "orcid_pending", "classname": "Open Researcher and Contributor ID", "schemename": "dnet:pid_types", "schemeid": "dnet:pid_types"}, "value": "0000-0002-7250-5273"}], "name": "Christine", "rank": 2}], "collectedfrom": [{"value": "Sygma", "key": "10|openaire____::a8db6f6b2ce4fe72e8b2314a9a93e7d9"}], "instance": [{"refereed": {"classid": "UNKNOWN", "classname": "Unknown", "schemename": "dnet:review_levels", "schemeid": "dnet:review_levels"}, "hostedby": {"value": "Cancers", "key": "10|issn__online::69ba871b903253074dcf4054e619afff"}, "license": {"dataInfo": {"deletedbyinference": false, "provenanceaction": {"classid": "sysimport:crosswalk:repository", "classname": "sysimport:crosswalk:repository", "schemename": "dnet:provenanceActions", "schemeid": "dnet:provenanceActions"}, "inferred": false, "inferenceprovenance": "", "invisible": false, "trust": "0.9"}, "value": "https://creativecommons.org/licenses/by/4.0/"}, "url": ["http://dx.doi.org/10.3390/cancers13040745"], "pid": [], "distributionlocation": "", "alternateIdentifier": [{"dataInfo": {"deletedbyinference": false, "provenanceaction": {"classid": "sysimport:crosswalk:repository", "classname": "sysimport:crosswalk:repository", "schemename": "dnet:provenanceActions", "schemeid": "dnet:provenanceActions"}, "inferred": false, "inferenceprovenance": "", "invisible": false, "trust": "0.9"}, "qualifier": {"classid": "doi", "classname": "Digital Object Identifier", "schemename": "dnet:pid_types", "schemeid": "dnet:pid_types"}, "value": "10.3390/cancers13040745"}], "collectedfrom": {"value": "Sygma", "key": "10|openaire____::a8db6f6b2ce4fe72e8b2314a9a93e7d9"}, "accessright": {"classid": "OPEN", "classname": "Open Access", "schemename": "dnet:access_modes", "schemeid": "dnet:access_modes"}, "instancetype": {"classid": "0001", "classname": "Article", "schemename": "dnet:publication_resource", "schemeid": "dnet:publication_resource"}}], "resulttype": {"classid": "publication", "classname": "publication", "schemename": "dnet:result_typologies", "schemeid": "dnet:result_typologies"}, "dateofcollection": "2021-06-10T10:03:36.091Z", "fulltext": [], "dateoftransformation": "2021-07-20T16:59:21.682Z", "description": [], "format": [], "journal": {"issnPrinted": "", "vol": "13", "dataInfo": {"deletedbyinference": false, "provenanceaction": {"classid": "sysimport:crosswalk:repository", "classname": "sysimport:crosswalk:repository", "schemename": "dnet:provenanceActions", "schemeid": "dnet:provenanceActions"}, "inferred": false, "inferenceprovenance": "", "invisible": false, "trust": "0.9"}, "name": "Cancers", "iss": "4", "sp": "745", "edition": "", "issnOnline": "2072-6694", "ep": "", "issnLinking": ""}, "coverage": [], "externalReference": [], "language": {"classid": "eng", "classname": "English", "schemename": "dnet:languages", "schemeid": "dnet:languages"}, "bestaccessright": {"classid": "OPEN", "classname": "Open Access", "schemename": "dnet:access_modes", "schemeid": "dnet:access_modes"}, "country": [], "extraInfo": [], "originalId": ["10.3390/cancers13040745", "50|sygma_______::3bbb03e6ec8df0d219b2d2165ea1d446"], "source": [], "context": [], "title": [{"dataInfo": {"deletedbyinference": false, "provenanceaction": {"classid": "sysimport:crosswalk:repository", "classname": "sysimport:crosswalk:repository", "schemename": "dnet:provenanceActions", "schemeid": "dnet:provenanceActions"}, "inferred": false, "inferenceprovenance": "", "invisible": false, "trust": "0.9"}, "qualifier": {"classid": "main title", "classname": "main title", "schemename": "dnet:dataCite_title", "schemeid": "dnet:dataCite_title"}, "value": "Regulation of p53 by E3s"}]} \ No newline at end of file diff --git a/release.properties b/release.properties deleted file mode 100644 index f8c96de45..000000000 --- a/release.properties +++ /dev/null @@ -1,11 +0,0 @@ -#release configuration -#Tue Sep 29 12:04:49 CEST 2020 -scm.tagNameFormat=@{project.artifactId}-@{project.version} -pushChanges=true -scm.url=scm\:git\:https\://code-repo.d4science.org/D-Net/dnet-dedup.git -preparationGoals=clean verify -projectVersionPolicyId=default -remoteTagging=true -scm.commentPrefix=[maven-release-plugin] -exec.snapshotReleasePluginAllowed=false -completedPhase=check-poms From 8f1db329218916f87cb1f9d21ba179694634d7fc Mon Sep 17 00:00:00 2001 From: miconis Date: Thu, 4 Nov 2021 15:20:57 +0100 Subject: [PATCH 163/449] implementation of the instance type comparator and its tests --- .../pace/common/AbstractPaceFunctions.java | 4 + .../dnetlib/pace/tree/InstanceTypeMatch.java | 78 +++++++++++++++++++ .../pace/comparators/ComparatorTest.java | 40 ++++++++-- 3 files changed, 114 insertions(+), 8 deletions(-) create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/InstanceTypeMatch.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java index b980018e8..6c370732b 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java @@ -6,9 +6,11 @@ import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.google.common.collect.Sets; import eu.dnetlib.pace.clustering.NGramUtils; +import eu.dnetlib.pace.config.Type; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.model.FieldList; import eu.dnetlib.pace.model.FieldListImpl; +import eu.dnetlib.pace.model.FieldValueImpl; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; @@ -16,6 +18,7 @@ import java.io.IOException; import java.io.StringWriter; import java.text.Normalizer; import java.util.*; +import java.util.function.Function; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -313,4 +316,5 @@ public abstract class AbstractPaceFunctions { throw new RuntimeException("cannot load resource from classpath: " + filename); } } + } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/InstanceTypeMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/InstanceTypeMatch.java new file mode 100644 index 000000000..77262df8a --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/InstanceTypeMatch.java @@ -0,0 +1,78 @@ +package eu.dnetlib.pace.tree; + +import com.google.common.collect.Sets; +import eu.dnetlib.pace.config.Config; +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.FieldList; +import eu.dnetlib.pace.tree.support.AbstractComparator; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +public class InstanceTypeMatch extends AbstractComparator { + + final Map translationMap = new HashMap<>(); + + public InstanceTypeMatch(Map params){ + super(params); + + //jolly types + translationMap.put("Conference object", "*"); + translationMap.put("Other literature type", "*"); + translationMap.put("Unknown", "*"); + + //article types + translationMap.put("Article", "Article"); + translationMap.put("Data Paper", "Article"); + translationMap.put("Software Paper", "Article"); + translationMap.put("Preprint", "Article"); + + //thesis types + translationMap.put("Thesis", "Thesis"); + translationMap.put("Master thesis", "Thesis"); + translationMap.put("Bachelor thesis", "Thesis"); + translationMap.put("Doctoral thesis", "Thesis"); + } + + + @Override + public double compare(final Field a, final Field b, final Config conf) { + + final List sa = ((FieldList) a).stringList(); + final List sb = ((FieldList) b).stringList(); + + if (sa.isEmpty() || sb.isEmpty()) { + return -1; + } + + final Set ca = sa.stream().map(this::translate).collect(Collectors.toSet()); + final Set cb = sb.stream().map(this::translate).collect(Collectors.toSet()); + + //if at least one is a jolly type, it must produce a match + if (ca.contains("*") || cb.contains("*")) + return 1.0; + + int incommon = Sets.intersection(ca, cb).size(); + + //if at least one is in common, it must produce a match + return incommon >= 1 ? 1 : 0; + } + + public String translate(String term){ + return translationMap.getOrDefault(term, term); + } + + @Override + public double getWeight() { + return super.weight; + } + + @Override + protected double normalize(final double d) { + return d; + } + +} diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java index 6bdd1ad45..2c0424177 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java @@ -1,6 +1,10 @@ package eu.dnetlib.pace.comparators; +import eu.dnetlib.pace.AbstractPaceTest; import eu.dnetlib.pace.clustering.NGramUtils; +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.FieldListImpl; +import eu.dnetlib.pace.model.FieldValueImpl; import eu.dnetlib.pace.model.MapDocument; import eu.dnetlib.pace.tree.*; import eu.dnetlib.pace.config.DedupConfig; @@ -11,11 +15,13 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import eu.dnetlib.pace.common.AbstractPaceFunctions; +import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.Map; @TestInstance(TestInstance.Lifecycle.PER_CLASS) -public class ComparatorTest extends AbstractPaceFunctions { +public class ComparatorTest extends AbstractPaceTest { private Map params; private DedupConfig conf; @@ -138,12 +144,6 @@ public class ComparatorTest extends AbstractPaceFunctions { result = levenstein.distance("Victoria", "Windsor", conf); System.out.println("result = " + result); - //University of Victoria Dataverse - //University of British Columbia Dataverse - //University of Windsor Dataverse - //University of Waterloo Dataverse - //University of Toronto Dataverse - //University of Ottawa Dataverse } @Test @@ -156,8 +156,32 @@ public class ComparatorTest extends AbstractPaceFunctions { } @Test - public void jsonListMatchTest(){ + public void instanceTypeMatchTest() { + final InstanceTypeMatch instanceTypeMatch = new InstanceTypeMatch(params); + + Field a = createFieldList(Arrays.asList("Article", "Article", "Article"), "instanceType"); + Field b = createFieldList(Arrays.asList("Article", "Article", "Article"), "instanceType"); + double result = instanceTypeMatch.compare(a, b, conf); + + assertEquals(1.0, result); + + Field c = createFieldList(Arrays.asList("Conference object", "Conference object", "Conference object"), "instanceType"); + result = instanceTypeMatch.compare(c, b, conf); + + assertEquals(1.0, result); + + Field d = createFieldList(Arrays.asList("Master thesis", "Master thesis", "Master thesis"), "instanceType"); + Field e = createFieldList(Arrays.asList("Bachelor thesis", "Bachelor thesis", "Bachelor thesis"), "instanceType"); + result = instanceTypeMatch.compare(d, e, conf); + + assertEquals(1.0, result); + + Field g = createFieldList(Arrays.asList("Software Paper", "Software Paper"), "instanceType"); + result = instanceTypeMatch.compare(e, g, conf); + + assertEquals(0.0, result); } + } From a224bf70a4e312f53ac9fcd570d974c0587c4924 Mon Sep 17 00:00:00 2001 From: miconis Date: Mon, 27 Dec 2021 17:35:02 +0100 Subject: [PATCH 164/449] implementation of new comparators for publication dedup configuration update --- dnet-pace-core/pom.xml | 2 - .../pace/common/AbstractPaceFunctions.java | 7 +- .../eu/dnetlib/pace/tree/AuthorsMatch.java | 85 ++++ .../dnetlib/pace/tree/InstanceTypeMatch.java | 6 + .../eu/dnetlib/pace/tree/JsonListMatch.java | 9 +- .../dnetlib/pace/tree/ListContainsMatch.java | 74 +++ ...insMatch.java => StringContainsMatch.java} | 32 +- .../pace/util/BlockProcessorForTesting.java | 29 +- .../pace/comparators/ComparatorTest.java | 102 +++- .../eu/dnetlib/pace/config/ConfigTest.java | 1 - .../config/pub.instancetype.tree.conf.json | 442 +++++++++++++++++ .../pace/config/pub.new.tree.conf.json | 465 ++++++++++++++++++ 12 files changed, 1212 insertions(+), 42 deletions(-) create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AuthorsMatch.java create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ListContainsMatch.java rename dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/{ContainsMatch.java => StringContainsMatch.java} (56%) create mode 100644 dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/pub.instancetype.tree.conf.json create mode 100644 dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/pub.new.tree.conf.json diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 756321097..88b611e0c 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -67,8 +67,6 @@ json-path - - diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java index 6c370732b..2f0fc4f45 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java @@ -44,6 +44,9 @@ public abstract class AbstractPaceFunctions { //blacklist of ngrams: to avoid generic keys protected static Set ngramBlacklist = loadFromClasspath("/eu/dnetlib/pace/config/ngram_blacklist.txt"); + //html regex for normalization + public final String HTML_REGEX = "<[^>]*>"; + private static final String alpha = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 "; private static final String aliases_from = "⁰¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ⁿ₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎àáâäæãåāèéêëēėęəîïíīįìôöòóœøōõûüùúūßśšłžźżçćčñń"; private static final String aliases_to = "0123456789+-=()n0123456789+-=()aaaaaaaaeeeeeeeeiiiiiioooooooouuuuussslzzzcccnn"; @@ -62,7 +65,9 @@ public abstract class AbstractPaceFunctions { } protected String cleanup(final String s) { - final String s0 = unicodeNormalization(s.toLowerCase()); + + final String s00 = s.replaceAll(HTML_REGEX, ""); + final String s0 = unicodeNormalization(s00.toLowerCase()); final String s1 = fixAliases(s0); final String s2 = nfd(s1); final String s3 = s2.replaceAll("–", " "); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AuthorsMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AuthorsMatch.java new file mode 100644 index 000000000..ff9d49794 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AuthorsMatch.java @@ -0,0 +1,85 @@ +package eu.dnetlib.pace.tree; + +import com.google.common.collect.Iterables; +import com.wcohen.ss.JaroWinkler; +import eu.dnetlib.pace.config.Config; +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.FieldList; +import eu.dnetlib.pace.model.Person; +import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.ComparatorClass; + +import java.util.Comparator; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +@ComparatorClass("authorsMatch") +public class AuthorsMatch extends AbstractComparator { + + Map params; + + private double SURNAME_THRESHOLD; + private double NAME_THRESHOLD; + private double FULLNAME_THRESHOLD; + private String MODE; //full or surname + + public AuthorsMatch(Map params){ + super(params, new com.wcohen.ss.JaroWinkler()); + this.params = params; + + MODE = params.getOrDefault("mode", "full"); + SURNAME_THRESHOLD = Double.parseDouble(params.getOrDefault("surname_th", "0.95")); + NAME_THRESHOLD = Double.parseDouble(params.getOrDefault("name_th", "0.95")); + FULLNAME_THRESHOLD = Double.parseDouble(params.getOrDefault("fullname_th", "0.9")); + } + + @Override + public double compare(final Field a, final Field b, final Config conf) { + + if (a.isEmpty() || b.isEmpty()) + return -1; + + List aList = ((FieldList) a).stringList().stream().map(author -> new Person(author, false)).collect(Collectors.toList()); + List bList = ((FieldList) b).stringList().stream().map(author -> new Person(author, false)).collect(Collectors.toList()); + + int common = 0; + for (Person p1 : aList) + for (Person p2 : bList) + if(MODE.equals("full")) { + if (personComparator(p1, p2)) + common += 1; + } + else { + if (surnameComparator(p1, p2)) + common += 1; + } + + return (double)common / (aList.size() + bList.size() - common); + } + + public boolean personComparator(Person p1, Person p2) { + + if(!p1.isAccurate() || !p2.isAccurate()) + return ssalgo.score(p1.getOriginal(), p2.getOriginal()) > FULLNAME_THRESHOLD; + + if(ssalgo.score(p1.getSurnameString(),p2.getSurnameString()) > SURNAME_THRESHOLD) + if(p1.getNameString().length()<=2 || p2.getNameString().length()<=2) + return firstLC(p1.getNameString()).equals(firstLC(p2.getNameString())); + else + return ssalgo.score(p1.getNameString(), p2.getNameString()) > NAME_THRESHOLD; + else + return false; + } + + public boolean surnameComparator(Person p1, Person p2) { + + if(!p1.isAccurate() || !p2.isAccurate()) + return ssalgo.score(p1.getOriginal(), p2.getOriginal()) > FULLNAME_THRESHOLD; + + return ssalgo.score(p1.getSurnameString(), p2.getSurnameString()) > SURNAME_THRESHOLD; + } + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/InstanceTypeMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/InstanceTypeMatch.java index 77262df8a..661b17433 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/InstanceTypeMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/InstanceTypeMatch.java @@ -5,6 +5,7 @@ import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.model.FieldList; import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.ComparatorClass; import java.util.HashMap; import java.util.List; @@ -12,6 +13,7 @@ import java.util.Map; import java.util.Set; import java.util.stream.Collectors; +@ComparatorClass("instanceTypeMatch") public class InstanceTypeMatch extends AbstractComparator { final Map translationMap = new HashMap<>(); @@ -41,6 +43,10 @@ public class InstanceTypeMatch extends AbstractComparator { @Override public double compare(final Field a, final Field b, final Config conf) { + if (a == null || b == null) { + return -1; + } + final List sa = ((FieldList) a).stringList(); final List sb = ((FieldList) b).stringList(); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JsonListMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JsonListMatch.java index 4fea8d86c..eb831b094 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JsonListMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JsonListMatch.java @@ -21,9 +21,13 @@ public class JsonListMatch extends AbstractComparator { private static final Log log = LogFactory.getLog(JsonListMatch.class); private Map params; + private String MODE; //"percentage" or "count" + public JsonListMatch(final Map params) { super(params); this.params = params; + + MODE = params.getOrDefault("mode", "percentage"); } @Override @@ -46,7 +50,10 @@ public class JsonListMatch extends AbstractComparator { return 0.0; } - return (double)incommon / (incommon + simDiff); + if (MODE.equals("percentage")) + return (double)incommon / (incommon + simDiff); + else + return incommon; } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ListContainsMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ListContainsMatch.java new file mode 100644 index 000000000..40e041f6f --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ListContainsMatch.java @@ -0,0 +1,74 @@ +package eu.dnetlib.pace.tree; + +import com.google.common.collect.Sets; +import eu.dnetlib.pace.config.Config; +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.FieldList; +import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.ComparatorClass; + +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +/** + * The Class Contains match + * + * @author miconis + * */ +@ComparatorClass("listContainsMatch") +public class ListContainsMatch extends AbstractComparator { + + private Map params; + private boolean CASE_SENSITIVE; + private String STRING; + private String AGGREGATOR; + + public ListContainsMatch(Map params) { + super(params); + this.params = params; + + //read parameters + CASE_SENSITIVE = Boolean.parseBoolean(params.getOrDefault("caseSensitive", "false")); + STRING = params.get("string"); + AGGREGATOR = params.get("bool"); + } + + @Override + public double compare(final Field a, final Field b, final Config conf) { + + List sa = ((FieldList) a).stringList(); + List sb = ((FieldList) b).stringList(); + + if (sa.isEmpty() || sb.isEmpty()) { + return -1; + } + + if (!CASE_SENSITIVE) { + sa = sa.stream().map(String::toLowerCase).collect(Collectors.toList()); + sb = sb.stream().map(String::toLowerCase).collect(Collectors.toList()); + STRING = STRING.toLowerCase(); + } + + switch(AGGREGATOR) { + case "AND": + if(sa.contains(STRING) && sb.contains(STRING)) + return 1.0; + break; + case "OR": + if(sa.contains(STRING) || sb.contains(STRING)) + return 1.0; + break; + case "XOR": + if(sa.contains(STRING) ^ sb.contains(STRING)) + return 1.0; + break; + default: + return 0.0; + } + return 0.0; + + } +} + diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ContainsMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/StringContainsMatch.java similarity index 56% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ContainsMatch.java rename to dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/StringContainsMatch.java index 8b8a342cd..126c01010 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ContainsMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/StringContainsMatch.java @@ -11,42 +11,48 @@ import java.util.Map; * * @author miconis * */ -@ComparatorClass("containsMatch") -public class ContainsMatch extends AbstractComparator { +@ComparatorClass("stringContainsMatch") +public class StringContainsMatch extends AbstractComparator { private Map params; - public ContainsMatch(Map params) { + private boolean CASE_SENSITIVE; + private String STRING; + private String AGGREGATOR; + + public StringContainsMatch(Map params) { super(params); this.params = params; + + //read parameters + CASE_SENSITIVE = Boolean.parseBoolean(params.getOrDefault("caseSensitive", "false")); + STRING = params.get("string"); + AGGREGATOR = params.get("aggregator"); + } @Override public double distance(final String a, final String b, final Config conf) { - //read parameters - boolean caseSensitive = Boolean.parseBoolean(params.getOrDefault("caseSensitive", "false")); - String string = params.get("string"); - String agg = params.get("bool"); - String ca = a; String cb = b; - if (!caseSensitive) { + if (!CASE_SENSITIVE) { ca = a.toLowerCase(); cb = b.toLowerCase(); + STRING = STRING.toLowerCase(); } - switch(agg) { + switch(AGGREGATOR) { case "AND": - if(ca.contains(string) && cb.contains(string)) + if(ca.contains(STRING) && cb.contains(STRING)) return 1.0; break; case "OR": - if(ca.contains(string) || cb.contains(string)) + if(ca.contains(STRING) || cb.contains(STRING)) return 1.0; break; case "XOR": - if(ca.contains(string) ^ cb.contains(string)) + if(ca.contains(STRING) ^ cb.contains(STRING)) return 1.0; break; default: diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessorForTesting.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessorForTesting.java index 9bf05f37b..d5e785af6 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessorForTesting.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessorForTesting.java @@ -7,11 +7,7 @@ import eu.dnetlib.pace.config.WfConfig; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.model.MapDocument; import eu.dnetlib.pace.model.MapDocumentComparator; -import eu.dnetlib.pace.tree.JsonListMatch; -import eu.dnetlib.pace.tree.LevensteinTitle; -import eu.dnetlib.pace.tree.SizeMatch; -import eu.dnetlib.pace.tree.TitleVersionMatch; -import eu.dnetlib.pace.tree.support.FieldStats; +import eu.dnetlib.pace.tree.*; import eu.dnetlib.pace.tree.support.TreeProcessor; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; @@ -159,13 +155,17 @@ public class BlockProcessorForTesting { if (!idCurr.equals(idPivot) && (fieldCurr != null)) { -// if (new TreeProcessor(dedupConf).compare(pivot, curr) == true && publicationCompare(pivot, curr, dedupConf) == false) -// emitOutput(true, idPivot, idCurr, context); -// - if(useTree) + if(!compareInstanceType(pivot, curr, dedupConf)){ emitOutput(new TreeProcessor(dedupConf).compare(pivot, curr), idPivot, idCurr, context); - else - emitOutput(publicationCompare(pivot, curr, dedupConf), idPivot, idCurr, context); + } + else { + emitOutput(false, idPivot, idCurr, context); + } + +// if(useTree) +// emitOutput(new TreeProcessor(dedupConf).compare(pivot, curr), idPivot, idCurr, context); +// else +// emitOutput(publicationCompare(pivot, curr, dedupConf), idPivot, idCurr, context); } } @@ -173,6 +173,13 @@ public class BlockProcessorForTesting { } } + protected static boolean compareInstanceType(MapDocument a, MapDocument b, DedupConfig conf) { + Map params = new HashMap<>(); + InstanceTypeMatch instanceTypeMatch = new InstanceTypeMatch(params); + double compare = instanceTypeMatch.compare(a.getFieldMap().get("instance"), b.getFieldMap().get("instance"), conf); + return compare>=1.0; + } + private boolean publicationCompare(MapDocument a, MapDocument b, DedupConfig config) { double score = 0.0; diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java index 2c0424177..70a5b16b5 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java @@ -3,19 +3,12 @@ package eu.dnetlib.pace.comparators; import eu.dnetlib.pace.AbstractPaceTest; import eu.dnetlib.pace.clustering.NGramUtils; import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.model.FieldListImpl; -import eu.dnetlib.pace.model.FieldValueImpl; -import eu.dnetlib.pace.model.MapDocument; import eu.dnetlib.pace.tree.*; import eu.dnetlib.pace.config.DedupConfig; -import eu.dnetlib.pace.util.MapDocumentUtil; import org.junit.jupiter.api.*; import static org.junit.jupiter.api.Assertions.assertEquals; -import eu.dnetlib.pace.common.AbstractPaceFunctions; - -import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.Map; @@ -30,8 +23,11 @@ public class ComparatorTest extends AbstractPaceTest { public void setup() { params = new HashMap<>(); params.put("weight", "1.0"); + params.put("surname_th", "0.99"); + params.put("name_th", "0.95"); + params.put("jpath_value", "$.value"); + params.put("jpath_classid", "$.qualifier.classid"); conf = DedupConfig.load(readFromClasspath("/eu/dnetlib/pace/config/organization.current.conf.json", ComparatorTest.class)); - } @Test @@ -82,15 +78,46 @@ public class ComparatorTest extends AbstractPaceTest { } @Test - public void containsMatchTest(){ + public void listContainsMatchTest(){ + + Field a = createFieldList(Arrays.asList("Article", "Publication", "ORP"), "instanceType"); + Field b = createFieldList(Arrays.asList("Publication", "Article", "ORP"), "instanceType"); + + params.put("string", "Article"); + params.put("bool", "XOR"); + params.put("caseSensitive", "false"); + + ListContainsMatch listContainsMatch = new ListContainsMatch(params); + + assertEquals(0.0, listContainsMatch.compare(a, b, conf)); + + params.put("string", "Article"); + params.put("bool", "AND"); + params.put("caseSensitive", "false"); + + listContainsMatch = new ListContainsMatch(params); + + assertEquals(1.0, listContainsMatch.compare(a, b, conf)); + } + + @Test + public void stringContainsMatchTest(){ params.put("string", "openorgs"); params.put("bool", "XOR"); params.put("caseSensitive", "false"); - final ContainsMatch containsMatch = new ContainsMatch(params); + StringContainsMatch stringContainsMatch = new StringContainsMatch(params); - assertEquals(0.0, containsMatch.distance("openorgs", "openorgs", conf)); + assertEquals(0.0, stringContainsMatch.distance("openorgs", "openorgs", conf)); + + params.put("string", "openorgs"); + params.put("bool", "AND"); + params.put("caseSensitive", "false"); + + stringContainsMatch = new StringContainsMatch(params); + + assertEquals(1.0, stringContainsMatch.distance("openorgs", "openorgs", conf)); } @Test @@ -122,7 +149,6 @@ public class ComparatorTest extends AbstractPaceTest { result = jaroWinklerNormalizedName.distance("NOAA - Servicio Meteorol\\u00f3gico Nacional", "NOAA - NWS", conf); System.out.println("result = " + result); - } @Test @@ -150,7 +176,8 @@ public class ComparatorTest extends AbstractPaceTest { public void levensteinTitleTest() { final LevensteinTitle levensteinTitle = new LevensteinTitle(params); - double result = levensteinTitle.distance("JRC: Open Power Plants Database", "JRC Open Power Plants Database (JRC-PPDB-OPEN)", conf); + + double result = levensteinTitle.distance("Degradation of lignin β‐aryl ether units in Arabidopsis thaliana expressing LigD, LigF and LigG from Sphingomonas paucimobilis SYK‐6", "Degradation of lignin β-aryl ether units in Arabidopsis thaliana expressing LigD, LigF and LigG from Sphingomonas paucimobilis SYK-6", conf); System.out.println("result = " + result); } @@ -181,6 +208,55 @@ public class ComparatorTest extends AbstractPaceTest { result = instanceTypeMatch.compare(e, g, conf); assertEquals(0.0, result); + + Field h = createFieldList(Arrays.asList("Other literature type", "Article"), "instanceType"); + result = instanceTypeMatch.compare(a, h, conf); + + assertEquals(1.0, result); + } + + @Test + public void authorsMatchTest() { + + AuthorsMatch authorsMatch = new AuthorsMatch(params); + + Field a = createFieldList(Arrays.asList("La Bruzzo, Sandro", "Atzori, Claudio", "De Bonis, Michele"), "authors"); + Field b = createFieldList(Arrays.asList("Atzori, C.", "La Bruzzo, S.", "De Bonis, M."), "authors"); + double result = authorsMatch.compare(a, b, conf); + + assertEquals(1.0, result); + + Field c = createFieldList(Arrays.asList("Manghi, Paolo"), "authors"); + Field d = createFieldList(Arrays.asList("Manghi, Pasquale"), "authors"); + result = authorsMatch.compare(c, d, conf); + + assertEquals(0.0, result) ; + + params.put("mode", "surname"); + authorsMatch = new AuthorsMatch(params); + result = authorsMatch.compare(c, d, conf); + + assertEquals(1.0, result); + + } + + @Test + public void jsonListMatch() { + + JsonListMatch jsonListMatch = new JsonListMatch(params); + + Field a = createFieldList(Arrays.asList("{\"datainfo\":{\"deletedbyinference\":false,\"inferenceprovenance\":null,\"inferred\":false,\"invisible\":false,\"provenanceaction\":{\"classid\":\"sysimport:actionset\",\"classname\":\"Harvested\",\"schemeid\":\"dnet:provenanceActions\",\"schemename\":\"dnet:provenanceActions\"},\"trust\":\"0.9\"},\"qualifier\":{\"classid\":\"doi\",\"classname\":\"Digital Object Identifier\",\"schemeid\":\"dnet:pid_types\",\"schemename\":\"dnet:pid_types\"},\"value\":\"10.1111/pbi.12655\"}"), "authors"); + Field b = createFieldList(Arrays.asList("{\"datainfo\":{\"deletedbyinference\":false,\"inferenceprovenance\":\"\",\"inferred\":false,\"invisible\":false,\"provenanceaction\":{\"classid\":\"sysimport:crosswalk:repository\",\"classname\":\"Harvested\",\"schemeid\":\"dnet:provenanceActions\",\"schemename\":\"dnet:provenanceActions\"},\"trust\":\"0.9\"},\"qualifier\":{\"classid\":\"pmc\",\"classname\":\"PubMed Central ID\",\"schemeid\":\"dnet:pid_types\",\"schemename\":\"dnet:pid_types\"},\"value\":\"PMC5399005\"}","{\"datainfo\":{\"deletedbyinference\":false,\"inferenceprovenance\":\"\",\"inferred\":false,\"invisible\":false,\"provenanceaction\":{\"classid\":\"sysimport:crosswalk:repository\",\"classname\":\"Harvested\",\"schemeid\":\"dnet:provenanceActions\",\"schemename\":\"dnet:provenanceActions\"},\"trust\":\"0.9\"},\"qualifier\":{\"classid\":\"pmid\",\"classname\":\"PubMed ID\",\"schemeid\":\"dnet:pid_types\",\"schemename\":\"dnet:pid_types\"},\"value\":\"27775869\"}","{\"datainfo\":{\"deletedbyinference\":false,\"inferenceprovenance\":\"\",\"inferred\":false,\"invisible\":false,\"provenanceaction\":{\"classid\":\"user:claim\",\"classname\":\"Linked by user\",\"schemeid\":\"dnet:provenanceActions\",\"schemename\":\"dnet:provenanceActions\"},\"trust\":\"0.9\"},\"qualifier\":{\"classid\":\"doi\",\"classname\":\"Digital Object Identifier\",\"schemeid\":\"dnet:pid_types\",\"schemename\":\"dnet:pid_types\"},\"value\":\"10.1111/pbi.12655\"}","{\"datainfo\":{\"deletedbyinference\":false,\"inferenceprovenance\":\"\",\"inferred\":false,\"invisible\":false,\"provenanceaction\":{\"classid\":\"sysimport:crosswalk:repository\",\"classname\":\"Harvested\",\"schemeid\":\"dnet:provenanceActions\",\"schemename\":\"dnet:provenanceActions\"},\"trust\":\"0.9\"},\"qualifier\":{\"classid\":\"handle\",\"classname\":\"Handle\",\"schemeid\":\"dnet:pid_types\",\"schemename\":\"dnet:pid_types\"},\"value\":\"1854/LU-8523529\"}"), "authors"); + + double result = jsonListMatch.compare(a, b, conf); + + assertEquals(0.25, result); + + params.put("mode", "count"); + jsonListMatch = new JsonListMatch(params); + result = jsonListMatch.compare(a, b, conf); + + assertEquals(1.0, result); } diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java index dbf7f08a9..879e5724c 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java @@ -101,7 +101,6 @@ public class ConfigTest extends AbstractPaceTest { System.out.println("mapDocument = " + mapDocument.getFieldMap().get("title").stringValue()); - } @Test diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/pub.instancetype.tree.conf.json b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/pub.instancetype.tree.conf.json new file mode 100644 index 000000000..8ebd2be33 --- /dev/null +++ b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/pub.instancetype.tree.conf.json @@ -0,0 +1,442 @@ +{ + "wf": { + "threshold": "0.99", + "dedupRun": "001", + "entityType": "result", + "subEntityType": "resulttype", + "subEntityValue": "publication", + "orderField": "title", + "queueMaxSize": "200", + "groupMaxSize": "100", + "maxChildren": "100", + "slidingWindowSize": "50", + "rootBuilder": [ + "result", + "resultProject_outcome_isProducedBy", + "resultResult_publicationDataset_isRelatedTo", + "resultResult_similarity_isAmongTopNSimilarDocuments", + "resultResult_similarity_hasAmongTopNSimilarDocuments", + "resultOrganization_affiliation_isAffiliatedWith", + "resultResult_part_hasPart", + "resultResult_part_isPartOf", + "resultResult_supplement_isSupplementTo", + "resultResult_supplement_isSupplementedBy", + "resultResult_version_isVersionOf" + ], + "includeChildren": "true", + "maxIterations": 20, + "idPath": "$.id" + }, + "pace": { + "clustering": [ + { + "name": "wordsStatsSuffixPrefixChain", + "fields": [ + "title" + ], + "params": { + "mod": "10" + } + }, + { + "name": "lowercase", + "fields": [ + "doi", + "altdoi" + ], + "params": { + "collapseOn:pid": "0" + } + } + ], + "decisionTree": { + "start": { + "fields": [ + { + "field": "instance", + "comparator": "instanceTypeMatch", + "weight": 1.0, + "countIfUndefined": "false", + "params": {} + } + ], + "threshold": 0.5, + "aggregation": "MAX", + "positive": "layer1", + "negative": "NO_MATCH", + "undefined": "layer1", + "ignoreUndefined": "true" + }, + "layer1": { + "fields": [ + { + "field": "pid", + "comparator": "jsonListMatch", + "weight": 1.0, + "countIfUndefined": "false", + "params": { + "jpath_value": "$.value", + "jpath_classid": "$.qualifier.classid" + } + }, + { + "field": "pid", + "comparator": "jsonListMatch", + "weight": 1.0, + "countIfUndefined": "false", + "params": { + "jpath_value": "$.value", + "jpath_classid": "$.qualifier.classid", + "crossCompare": "alternateid" + } + } + ], + "threshold": 0.5, + "aggregation": "MAX", + "positive": "layer2", + "negative": "layer3", + "undefined": "layer3", + "ignoreUndefined": "true" + }, + "layer2": { + "fields": [ + { + "field": "title", + "comparator": "levensteinTitle", + "weight": 1.0, + "countIfUndefined": "true", + "params": {} + } + ], + "threshold": 0.9, + "aggregation": "AVG", + "positive": "MATCH", + "negative": "NO_MATCH", + "undefined": "NO_MATCH", + "ignoreUndefined": "true" + }, + "layer3": { + "fields": [ + { + "field": "title", + "comparator": "titleVersionMatch", + "weight": 1.0, + "countIfUndefined": "false", + "params": {} + }, + { + "field": "authors", + "comparator": "sizeMatch", + "weight": 1.0, + "countIfUndefined": "false", + "params": {} + } + ], + "threshold": 1.0, + "aggregation": "AND", + "positive": "layer4", + "negative": "NO_MATCH", + "undefined": "layer4", + "ignoreUndefined": "false" + }, + "layer4": { + "fields": [ + { + "field": "title", + "comparator": "levensteinTitle", + "weight": 1.0, + "countIfUndefined": "true", + "params": {} + } + ], + "threshold": 0.99, + "aggregation": "AVG", + "positive": "MATCH", + "negative": "NO_MATCH", + "undefined": "NO_MATCH", + "ignoreUndefined": "true" + } + }, + "model": [ + { + "name": "doi", + "type": "String", + "path": "$.instance[*].pid[?(@.qualifier.classid == 'doi')].value" + }, + { + "name": "altdoi", + "type": "String", + "path": "$.instance[*].alternateIdentifier[?(@.qualifier.classid == 'doi')].value" + }, + { + "name": "pid", + "type": "JSON", + "path": "$.instance[*].pid[*]", + "overrideMatch": "true" + }, + { + "name": "alternateid", + "type": "JSON", + "path": "$.instance[*].alternateIdentifier[*]", + "overrideMatch": "true" + }, + { + "name": "title", + "type": "String", + "path": "$.title[?(@.qualifier.classid == 'main title')].value", + "length": 250, + "size": 5 + }, + { + "name": "authors", + "type": "List", + "path": "$.author[*].fullname", + "size": 200 + }, + { + "name": "resulttype", + "type": "String", + "path": "$.resulttype.classid" + }, + { + "name": "instance", + "type": "List", + "path": "$.instance[*].instancetype.classname" + } + ], + "blacklists": { + "title": [ + "(?i)^Data Management Plan", + "^Inside Front Cover$", + "(?i)^Poster presentations$", + "^THE ASSOCIATION AND THE GENERAL MEDICAL COUNCIL$", + "^Problems with perinatal pathology\\.?$", + "(?i)^Cases? of Puerperal Convulsions$", + "(?i)^Operative Gyna?ecology$", + "(?i)^Mind the gap\\!?\\:?$", + "^Chronic fatigue syndrome\\.?$", + "^Cartas? ao editor Letters? to the Editor$", + "^Note from the Editor$", + "^Anesthesia Abstract$", + "^Annual report$", + "(?i)^“?THE RADICAL PREVENTION OF VENEREAL DISEASE\\.?”?$", + "(?i)^Graph and Table of Infectious Diseases?$", + "^Presentation$", + "(?i)^Reviews and Information on Publications$", + "(?i)^PUBLIC HEALTH SERVICES?$", + "(?i)^COMBINED TEXT-?BOOK OF OBSTETRICS AND GYN(Æ|ae)COLOGY$", + "(?i)^Adrese autora$", + "(?i)^Systematic Part .*\\. Catalogus Fossilium Austriae, Band 2: Echinoidea neogenica$", + "(?i)^Acknowledgement to Referees$", + "(?i)^Behçet's disease\\.?$", + "(?i)^Isolation and identification of restriction endonuclease.*$", + "(?i)^CEREBROVASCULAR DISEASES?.?$", + "(?i)^Screening for abdominal aortic aneurysms?\\.?$", + "^Event management$", + "(?i)^Breakfast and Crohn's disease.*\\.?$", + "^Cálculo de concentraciones en disoluciones acuosas. Ejercicio interactivo\\..*\\.$", + "(?i)^Genetic and functional analyses of SHANK2 mutations suggest a multiple hit model of Autism spectrum disorders?\\.?$", + "^Gushi hakubutsugaku$", + "^Starobosanski nadpisi u Bosni i Hercegovini \\(.*\\)$", + "^Intestinal spirocha?etosis$", + "^Treatment of Rodent Ulcer$", + "(?i)^\\W*Cloud Computing\\W*$", + "^Compendio mathematico : en que se contienen todas las materias mas principales de las Ciencias que tratan de la cantidad$", + "^Free Communications, Poster Presentations: Session [A-F]$", + "^“The Historical Aspects? of Quackery\\.?”$", + "^A designated centre for people with disabilities operated by St John of God Community Services (Limited|Ltd), Louth$", + "^P(er|re)-Mile Premiums for Auto Insurance\\.?$", + "(?i)^Case Report$", + "^Boletín Informativo$", + "(?i)^Glioblastoma Multiforme$", + "(?i)^Nuevos táxones animales descritos en la península Ibérica y Macaronesia desde 1994 \\(.*\\)$", + "^Zaměstnanecké výhody$", + "(?i)^The Economics of Terrorism and Counter-Terrorism: A Survey \\(Part .*\\)$", + "(?i)^Carotid body tumours?\\.?$", + "(?i)^\\[Españoles en Francia : La condición Emigrante.*\\]$", + "^Avant-propos$", + "(?i)^St\\. Patrick's Cathedral, Dublin, County Dublin - Head(s)? and Capital(s)?$", + "(?i)^St\\. Patrick's Cathedral, Dublin, County Dublin - Bases?$", + "(?i)^PUBLIC HEALTH VERSUS THE STATE$", + "^Viñetas de Cortázar$", + "(?i)^Search for heavy neutrinos and W(\\[|_|\\(|_\\{|-)?R(\\]|\\)|\\})? bosons with right-handed couplings in a left-right symmetric model in pp collisions at.*TeV(\\.)?$", + "(?i)^Measurement of the pseudorapidity and centrality dependence of the transverse energy density in Pb(-?)Pb collisions at.*tev(\\.?)$", + "(?i)^Search for resonances decaying into top-quark pairs using fully hadronic decays in pp collisions with ATLAS at.*TeV$", + "(?i)^Search for neutral minimal supersymmetric standard model Higgs bosons decaying to tau pairs in pp collisions at.*tev$", + "(?i)^Relatório de Estágio (de|em) Angiologia e Cirurgia Vascular$", + "^Aus der AGMB$", + "^Znanstveno-stručni prilozi$", + "(?i)^Zhodnocení finanční situace podniku a návrhy na zlepšení$", + "(?i)^Evaluation of the Financial Situation in the Firm and Proposals to its Improvement$", + "(?i)^Hodnocení finanční situace podniku a návrhy na její zlepšení$", + "^Finanční analýza podniku$", + "^Financial analysis( of business)?$", + "(?i)^Textbook of Gyn(a)?(Æ)?(e)?cology$", + "^Jikken nihon shūshinsho$", + "(?i)^CORONER('|s)(s|') INQUESTS$", + "(?i)^(Μελέτη παραγόντων )?risk management( για ανάπτυξη και εφαρμογή ενός πληροφοριακού συστήματος| και ανάπτυξη συστήματος)?$", + "(?i)^Consultants' contract(s)?$", + "(?i)^Upute autorima$", + "(?i)^Bijdrage tot de Kennis van den Godsdienst der Dajaks van Lan(d|f)ak en Tajan$", + "^Joshi shin kokubun$", + "^Kōtō shōgaku dokuhon nōson'yō$", + "^Jinjō shōgaku shōka$", + "^Shōgaku shūjichō$", + "^Nihon joshi dokuhon$", + "^Joshi shin dokuhon$", + "^Chūtō kanbun dokuhon$", + "^Wabun dokuhon$", + "(?i)^(Analysis of economy selected village or town|Rozbor hospodaření vybrané obce či města)$", + "(?i)^cardiac rehabilitation$", + "(?i)^Analytical summary$", + "^Thesaurus resolutionum Sacrae Congregationis Concilii$", + "(?i)^Sumario analítico(\\s{1})?(Analitic summary)?$", + "^Prikazi i osvrti$", + "^Rodinný dům s provozovnou$", + "^Family house with an establishment$", + "^Shinsei chūtō shin kokugun$", + "^Pulmonary alveolar proteinosis(\\.?)$", + "^Shinshū kanbun$", + "^Viñeta(s?) de Rodríguez$", + "(?i)^RUBRIKA UREDNIKA$", + "^A Matching Model of the Academic Publication Market$", + "^Yōgaku kōyō$", + "^Internetový marketing$", + "^Internet marketing$", + "^Chūtō kokugo dokuhon$", + "^Kokugo dokuhon$", + "^Antibiotic Cover for Dental Extraction(s?)$", + "^Strategie podniku$", + "^Strategy of an Enterprise$", + "(?i)^respiratory disease(s?)(\\.?)$", + "^Award(s?) for Gallantry in Civil Defence$", + "^Podniková kultura$", + "^Corporate Culture$", + "^Severe hyponatraemia in hospital inpatient(s?)(\\.?)$", + "^Pracovní motivace$", + "^Work Motivation$", + "^Kaitei kōtō jogaku dokuhon$", + "^Konsolidovaná účetní závěrka$", + "^Consolidated Financial Statements$", + "(?i)^intracranial tumour(s?)$", + "^Climate Change Mitigation Options and Directed Technical Change: A Decentralized Equilibrium Analysis$", + "^\\[CERVECERIAS MAHOU(\\.|\\:) INTERIOR\\] \\[Material gráfico\\]$", + "^Housing Market Dynamics(\\:|\\.) On the Contribution of Income Shocks and Credit Constraint(s?)$", + "^\\[Funciones auxiliares de la música en Radio París,.*\\]$", + "^Úroveň motivačního procesu jako způsobu vedení lidí$", + "^The level of motivation process as a leadership$", + "^Pay-beds in N(\\.?)H(\\.?)S(\\.?) Hospitals$", + "(?i)^news and events$", + "(?i)^NOVOSTI I DOGAĐAJI$", + "^Sansū no gakushū$", + "^Posouzení informačního systému firmy a návrh změn$", + "^Information System Assessment and Proposal for ICT Modification$", + "^Stresové zatížení pracovníků ve vybrané profesi$", + "^Stress load in a specific job$", + "^Sunday: Poster Sessions, Pt.*$", + "^Monday: Poster Sessions, Pt.*$", + "^Wednesday: Poster Sessions, Pt.*", + "^Tuesday: Poster Sessions, Pt.*$", + "^Analýza reklamy$", + "^Analysis of advertising$", + "^Shōgaku shūshinsho$", + "^Shōgaku sansū$", + "^Shintei joshi kokubun$", + "^Taishō joshi kokubun dokuhon$", + "^Joshi kokubun$", + "^Účetní uzávěrka a účetní závěrka v ČR$", + "(?i)^The \"?Causes\"? of Cancer$", + "^Normas para la publicación de artículos$", + "^Editor('|s)(s|') [Rr]eply$", + "^Editor(’|s)(s|’) letter$", + "^Redaktoriaus žodis$", + "^DISCUSSION ON THE PRECEDING PAPER$", + "^Kōtō shōgaku shūshinsho jidōyō$", + "^Shōgaku nihon rekishi$", + "^(Theory of the flow of action currents in isolated myelinated nerve fibers).*$", + "^Préface$", + "^Occupational [Hh]ealth [Ss]ervices.$", + "^In Memoriam Professor Toshiyuki TAKESHIMA$", + "^Účetní závěrka ve vybraném podniku.*$", + "^Financial statements in selected company$", + "^Abdominal [Aa]ortic [Aa]neurysms.*$", + "^Pseudomyxoma peritonei$", + "^Kazalo autora$", + "(?i)^uvodna riječ$", + "^Motivace jako způsob vedení lidí$", + "^Motivation as a leadership$", + "^Polyfunkční dům$", + "^Multi\\-funkcional building$", + "^Podnikatelský plán$", + "(?i)^Podnikatelský záměr$", + "(?i)^Business Plan$", + "^Oceňování nemovitostí$", + "^Marketingová komunikace$", + "^Marketing communication$", + "^Sumario Analítico$", + "^Riječ uredništva$", + "^Savjetovanja i priredbe$", + "^Índice$", + "^(Starobosanski nadpisi).*$", + "^Vzdělávání pracovníků v organizaci$", + "^Staff training in organization$", + "^(Life Histories of North American Geometridae).*$", + "^Strategická analýza podniku$", + "^Strategic Analysis of an Enterprise$", + "^Sadržaj$", + "^Upute suradnicima$", + "^Rodinný dům$", + "(?i)^Fami(l)?ly house$", + "^Upute autorima$", + "^Strategic Analysis$", + "^Finanční analýza vybraného podniku$", + "^Finanční analýza$", + "^Riječ urednika$", + "(?i)^Content(s?)$", + "(?i)^Inhalt$", + "^Jinjō shōgaku shūshinsho jidōyō$", + "(?i)^Index$", + "^Chūgaku kokubun kyōkasho$", + "^Retrato de una mujer$", + "^Retrato de un hombre$", + "^Kōtō shōgaku dokuhon$", + "^Shotōka kokugo$", + "^Shōgaku dokuhon$", + "^Jinjō shōgaku kokugo dokuhon$", + "^Shinsei kokugo dokuhon$", + "^Teikoku dokuhon$", + "^Instructions to Authors$", + "^KİTAP TAHLİLİ$", + "^PRZEGLĄD PIŚMIENNICTWA$", + "(?i)^Presentación$", + "^İçindekiler$", + "(?i)^Tabl?e of contents$", + "^(CODICE DEL BEATO DE LOS REYES FERNANDO I Y SANCHA).*$", + "^(\\[MADRID\\. BIBL\\. NAC\\. N.*KING FERDINAND I.*FROM SAN ISIDORO DE LEON\\. FACUNDUS SCRIPSIT DATED.*\\]).*", + "^Editorial( Board)?$", + "(?i)^Editorial \\(English\\)$", + "^Editörden$", + "^(Corpus Oral Dialectal \\(COD\\)\\.).*$", + "^(Kiri Karl Morgensternile).*$", + "^(\\[Eksliibris Aleksandr).*\\]$", + "^(\\[Eksliibris Aleksandr).*$", + "^(Eksliibris Aleksandr).*$", + "^(Kiri A\\. de Vignolles).*$", + "^(2 kirja Karl Morgensternile).*$", + "^(Pirita kloostri idaosa arheoloogilised).*$", + "^(Kiri tundmatule).*$", + "^(Kiri Jenaer Allgemeine Literaturzeitung toimetusele).*$", + "^(Eksliibris Nikolai Birukovile).*$", + "^(Eksliibris Nikolai Issakovile).*$", + "^(WHP Cruise Summary Information of section).*$", + "^(Measurement of the top quark\\-pair production cross section with ATLAS in pp collisions at).*$", + "^(Measurement of the spin\\-dependent structure function).*", + "(?i)^.*authors['’′]? reply\\.?$", + "(?i)^.*authors['’′]? response\\.?$", + "^Data [mM]anagement [sS]ervices\\.$", + "Research and Advanced Technology for Digital Libraries" + ] + }, + "synonyms": {} + } +} \ No newline at end of file diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/pub.new.tree.conf.json b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/pub.new.tree.conf.json new file mode 100644 index 000000000..153e38ada --- /dev/null +++ b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/pub.new.tree.conf.json @@ -0,0 +1,465 @@ +{ + "wf": { + "threshold": "0.99", + "dedupRun": "001", + "entityType": "result", + "subEntityType": "resulttype", + "subEntityValue": "publication", + "orderField": "title", + "queueMaxSize": "200", + "groupMaxSize": "100", + "maxChildren": "100", + "slidingWindowSize": "50", + "rootBuilder": [ + "result", + "resultProject_outcome_isProducedBy", + "resultResult_publicationDataset_isRelatedTo", + "resultResult_similarity_isAmongTopNSimilarDocuments", + "resultResult_similarity_hasAmongTopNSimilarDocuments", + "resultOrganization_affiliation_isAffiliatedWith", + "resultResult_part_hasPart", + "resultResult_part_isPartOf", + "resultResult_supplement_isSupplementTo", + "resultResult_supplement_isSupplementedBy", + "resultResult_version_isVersionOf" + ], + "includeChildren": "true", + "maxIterations": 20, + "idPath": "$.id" + }, + "pace": { + "clustering": [ + { + "name": "wordsStatsSuffixPrefixChain", + "fields": [ + "title" + ], + "params": { + "mod": "10" + } + }, + { + "name": "lowercase", + "fields": [ + "doi", + "altdoi" + ], + "params": { + "collapseOn:pid": "0" + } + } + ], + "decisionTree": { + "start": { + "fields": [ + { + "field": "pid", + "comparator": "jsonListMatch", + "weight": 1.0, + "countIfUndefined": "false", + "params": { + "jpath_value": "$.value", + "jpath_classid": "$.qualifier.classid", + "mode": "count" + } + } + ], + "threshold": 1.0, + "aggregation": "MAX", + "positive": "MATCH", + "negative": "NO_MATCH", + "undefined": "instanceTypeCheck", + "ignoreUndefined": "false" + }, + "instanceTypeCheck": { + "fields": [ + { + "field": "instance", + "comparator": "instanceTypeMatch", + "weight": 1.0, + "countIfUndefined": "false", + "params": {} + } + ], + "threshold": 0.5, + "aggregation": "MAX", + "positive": "pidVSaltid", + "negative": "NO_MATCH", + "undefined": "pidVSaltid", + "ignoreUndefined": "true" + }, + "pidVSaltid": { + "fields": [ + { + "field": "pid", + "comparator": "jsonListMatch", + "weight": 1.0, + "countIfUndefined": "false", + "params": { + "jpath_value": "$.value", + "jpath_classid": "$.qualifier.classid", + "crossCompare": "alternateid", + "mode": "count" + } + } + ], + "threshold": 1.0, + "aggregation": "MAX", + "positive": "softCheck", + "negative": "earlyExits", + "undefined": "earlyExits", + "ignoreUndefined": "true" + }, + "softCheck": { + "fields": [ + { + "field": "title", + "comparator": "levensteinTitle", + "weight": 1.0, + "countIfUndefined": "true", + "params": {} + } + ], + "threshold": 0.9, + "aggregation": "AVG", + "positive": "MATCH", + "negative": "NO_MATCH", + "undefined": "NO_MATCH", + "ignoreUndefined": "true" + }, + "earlyExits": { + "fields": [ + { + "field": "title", + "comparator": "titleVersionMatch", + "weight": 1.0, + "countIfUndefined": "false", + "params": {} + }, + { + "field": "authors", + "comparator": "sizeMatch", + "weight": 1.0, + "countIfUndefined": "false", + "params": {} + }, + { + "field": "authors", + "comparator": "authorsMatch", + "weight": 1.0, + "countIfUndefined": "false", + "params": { + "surname_th": 0.99, + "fullname_th": 0.95, + "mode": "surname" + } + } + ], + "threshold": 1.0, + "aggregation": "AND", + "positive": "strongCheck", + "negative": "NO_MATCH", + "undefined": "strongCheck", + "ignoreUndefined": "false" + }, + "strongCheck": { + "fields": [ + { + "field": "title", + "comparator": "levensteinTitle", + "weight": 1.0, + "countIfUndefined": "true", + "params": {} + } + ], + "threshold": 0.99, + "aggregation": "AVG", + "positive": "MATCH", + "negative": "NO_MATCH", + "undefined": "NO_MATCH", + "ignoreUndefined": "true" + } + }, + "model": [ + { + "name": "doi", + "type": "String", + "path": "$.instance[*].pid[?(@.qualifier.classid == 'doi')].value" + }, + { + "name": "altdoi", + "type": "String", + "path": "$.instance[*].alternateIdentifier[?(@.qualifier.classid == 'doi')].value" + }, + { + "name": "pid", + "type": "JSON", + "path": "$.instance[*].pid[*]", + "overrideMatch": "true" + }, + { + "name": "alternateid", + "type": "JSON", + "path": "$.instance[*].alternateIdentifier[*]", + "overrideMatch": "true" + }, + { + "name": "title", + "type": "String", + "path": "$.title[?(@.qualifier.classid == 'main title')].value", + "length": 250, + "size": 5 + }, + { + "name": "authors", + "type": "List", + "path": "$.author[*].fullname", + "size": 200 + }, + { + "name": "resulttype", + "type": "String", + "path": "$.resulttype.classid" + }, + { + "name": "instance", + "type": "List", + "path": "$.instance[*].instancetype.classname" + } + ], + "blacklists": { + "title": [ + "(?i)^Data Management Plan", + "^Inside Front Cover$", + "(?i)^Poster presentations$", + "^THE ASSOCIATION AND THE GENERAL MEDICAL COUNCIL$", + "^Problems with perinatal pathology\\.?$", + "(?i)^Cases? of Puerperal Convulsions$", + "(?i)^Operative Gyna?ecology$", + "(?i)^Mind the gap\\!?\\:?$", + "^Chronic fatigue syndrome\\.?$", + "^Cartas? ao editor Letters? to the Editor$", + "^Note from the Editor$", + "^Anesthesia Abstract$", + "^Annual report$", + "(?i)^“?THE RADICAL PREVENTION OF VENEREAL DISEASE\\.?”?$", + "(?i)^Graph and Table of Infectious Diseases?$", + "^Presentation$", + "(?i)^Reviews and Information on Publications$", + "(?i)^PUBLIC HEALTH SERVICES?$", + "(?i)^COMBINED TEXT-?BOOK OF OBSTETRICS AND GYN(Æ|ae)COLOGY$", + "(?i)^Adrese autora$", + "(?i)^Systematic Part .*\\. Catalogus Fossilium Austriae, Band 2: Echinoidea neogenica$", + "(?i)^Acknowledgement to Referees$", + "(?i)^Behçet's disease\\.?$", + "(?i)^Isolation and identification of restriction endonuclease.*$", + "(?i)^CEREBROVASCULAR DISEASES?.?$", + "(?i)^Screening for abdominal aortic aneurysms?\\.?$", + "^Event management$", + "(?i)^Breakfast and Crohn's disease.*\\.?$", + "^Cálculo de concentraciones en disoluciones acuosas. Ejercicio interactivo\\..*\\.$", + "(?i)^Genetic and functional analyses of SHANK2 mutations suggest a multiple hit model of Autism spectrum disorders?\\.?$", + "^Gushi hakubutsugaku$", + "^Starobosanski nadpisi u Bosni i Hercegovini \\(.*\\)$", + "^Intestinal spirocha?etosis$", + "^Treatment of Rodent Ulcer$", + "(?i)^\\W*Cloud Computing\\W*$", + "^Compendio mathematico : en que se contienen todas las materias mas principales de las Ciencias que tratan de la cantidad$", + "^Free Communications, Poster Presentations: Session [A-F]$", + "^“The Historical Aspects? of Quackery\\.?”$", + "^A designated centre for people with disabilities operated by St John of God Community Services (Limited|Ltd), Louth$", + "^P(er|re)-Mile Premiums for Auto Insurance\\.?$", + "(?i)^Case Report$", + "^Boletín Informativo$", + "(?i)^Glioblastoma Multiforme$", + "(?i)^Nuevos táxones animales descritos en la península Ibérica y Macaronesia desde 1994 \\(.*\\)$", + "^Zaměstnanecké výhody$", + "(?i)^The Economics of Terrorism and Counter-Terrorism: A Survey \\(Part .*\\)$", + "(?i)^Carotid body tumours?\\.?$", + "(?i)^\\[Españoles en Francia : La condición Emigrante.*\\]$", + "^Avant-propos$", + "(?i)^St\\. Patrick's Cathedral, Dublin, County Dublin - Head(s)? and Capital(s)?$", + "(?i)^St\\. Patrick's Cathedral, Dublin, County Dublin - Bases?$", + "(?i)^PUBLIC HEALTH VERSUS THE STATE$", + "^Viñetas de Cortázar$", + "(?i)^Search for heavy neutrinos and W(\\[|_|\\(|_\\{|-)?R(\\]|\\)|\\})? bosons with right-handed couplings in a left-right symmetric model in pp collisions at.*TeV(\\.)?$", + "(?i)^Measurement of the pseudorapidity and centrality dependence of the transverse energy density in Pb(-?)Pb collisions at.*tev(\\.?)$", + "(?i)^Search for resonances decaying into top-quark pairs using fully hadronic decays in pp collisions with ATLAS at.*TeV$", + "(?i)^Search for neutral minimal supersymmetric standard model Higgs bosons decaying to tau pairs in pp collisions at.*tev$", + "(?i)^Relatório de Estágio (de|em) Angiologia e Cirurgia Vascular$", + "^Aus der AGMB$", + "^Znanstveno-stručni prilozi$", + "(?i)^Zhodnocení finanční situace podniku a návrhy na zlepšení$", + "(?i)^Evaluation of the Financial Situation in the Firm and Proposals to its Improvement$", + "(?i)^Hodnocení finanční situace podniku a návrhy na její zlepšení$", + "^Finanční analýza podniku$", + "^Financial analysis( of business)?$", + "(?i)^Textbook of Gyn(a)?(Æ)?(e)?cology$", + "^Jikken nihon shūshinsho$", + "(?i)^CORONER('|s)(s|') INQUESTS$", + "(?i)^(Μελέτη παραγόντων )?risk management( για ανάπτυξη και εφαρμογή ενός πληροφοριακού συστήματος| και ανάπτυξη συστήματος)?$", + "(?i)^Consultants' contract(s)?$", + "(?i)^Upute autorima$", + "(?i)^Bijdrage tot de Kennis van den Godsdienst der Dajaks van Lan(d|f)ak en Tajan$", + "^Joshi shin kokubun$", + "^Kōtō shōgaku dokuhon nōson'yō$", + "^Jinjō shōgaku shōka$", + "^Shōgaku shūjichō$", + "^Nihon joshi dokuhon$", + "^Joshi shin dokuhon$", + "^Chūtō kanbun dokuhon$", + "^Wabun dokuhon$", + "(?i)^(Analysis of economy selected village or town|Rozbor hospodaření vybrané obce či města)$", + "(?i)^cardiac rehabilitation$", + "(?i)^Analytical summary$", + "^Thesaurus resolutionum Sacrae Congregationis Concilii$", + "(?i)^Sumario analítico(\\s{1})?(Analitic summary)?$", + "^Prikazi i osvrti$", + "^Rodinný dům s provozovnou$", + "^Family house with an establishment$", + "^Shinsei chūtō shin kokugun$", + "^Pulmonary alveolar proteinosis(\\.?)$", + "^Shinshū kanbun$", + "^Viñeta(s?) de Rodríguez$", + "(?i)^RUBRIKA UREDNIKA$", + "^A Matching Model of the Academic Publication Market$", + "^Yōgaku kōyō$", + "^Internetový marketing$", + "^Internet marketing$", + "^Chūtō kokugo dokuhon$", + "^Kokugo dokuhon$", + "^Antibiotic Cover for Dental Extraction(s?)$", + "^Strategie podniku$", + "^Strategy of an Enterprise$", + "(?i)^respiratory disease(s?)(\\.?)$", + "^Award(s?) for Gallantry in Civil Defence$", + "^Podniková kultura$", + "^Corporate Culture$", + "^Severe hyponatraemia in hospital inpatient(s?)(\\.?)$", + "^Pracovní motivace$", + "^Work Motivation$", + "^Kaitei kōtō jogaku dokuhon$", + "^Konsolidovaná účetní závěrka$", + "^Consolidated Financial Statements$", + "(?i)^intracranial tumour(s?)$", + "^Climate Change Mitigation Options and Directed Technical Change: A Decentralized Equilibrium Analysis$", + "^\\[CERVECERIAS MAHOU(\\.|\\:) INTERIOR\\] \\[Material gráfico\\]$", + "^Housing Market Dynamics(\\:|\\.) On the Contribution of Income Shocks and Credit Constraint(s?)$", + "^\\[Funciones auxiliares de la música en Radio París,.*\\]$", + "^Úroveň motivačního procesu jako způsobu vedení lidí$", + "^The level of motivation process as a leadership$", + "^Pay-beds in N(\\.?)H(\\.?)S(\\.?) Hospitals$", + "(?i)^news and events$", + "(?i)^NOVOSTI I DOGAĐAJI$", + "^Sansū no gakushū$", + "^Posouzení informačního systému firmy a návrh změn$", + "^Information System Assessment and Proposal for ICT Modification$", + "^Stresové zatížení pracovníků ve vybrané profesi$", + "^Stress load in a specific job$", + "^Sunday: Poster Sessions, Pt.*$", + "^Monday: Poster Sessions, Pt.*$", + "^Wednesday: Poster Sessions, Pt.*", + "^Tuesday: Poster Sessions, Pt.*$", + "^Analýza reklamy$", + "^Analysis of advertising$", + "^Shōgaku shūshinsho$", + "^Shōgaku sansū$", + "^Shintei joshi kokubun$", + "^Taishō joshi kokubun dokuhon$", + "^Joshi kokubun$", + "^Účetní uzávěrka a účetní závěrka v ČR$", + "(?i)^The \"?Causes\"? of Cancer$", + "^Normas para la publicación de artículos$", + "^Editor('|s)(s|') [Rr]eply$", + "^Editor(’|s)(s|’) letter$", + "^Redaktoriaus žodis$", + "^DISCUSSION ON THE PRECEDING PAPER$", + "^Kōtō shōgaku shūshinsho jidōyō$", + "^Shōgaku nihon rekishi$", + "^(Theory of the flow of action currents in isolated myelinated nerve fibers).*$", + "^Préface$", + "^Occupational [Hh]ealth [Ss]ervices.$", + "^In Memoriam Professor Toshiyuki TAKESHIMA$", + "^Účetní závěrka ve vybraném podniku.*$", + "^Financial statements in selected company$", + "^Abdominal [Aa]ortic [Aa]neurysms.*$", + "^Pseudomyxoma peritonei$", + "^Kazalo autora$", + "(?i)^uvodna riječ$", + "^Motivace jako způsob vedení lidí$", + "^Motivation as a leadership$", + "^Polyfunkční dům$", + "^Multi\\-funkcional building$", + "^Podnikatelský plán$", + "(?i)^Podnikatelský záměr$", + "(?i)^Business Plan$", + "^Oceňování nemovitostí$", + "^Marketingová komunikace$", + "^Marketing communication$", + "^Sumario Analítico$", + "^Riječ uredništva$", + "^Savjetovanja i priredbe$", + "^Índice$", + "^(Starobosanski nadpisi).*$", + "^Vzdělávání pracovníků v organizaci$", + "^Staff training in organization$", + "^(Life Histories of North American Geometridae).*$", + "^Strategická analýza podniku$", + "^Strategic Analysis of an Enterprise$", + "^Sadržaj$", + "^Upute suradnicima$", + "^Rodinný dům$", + "(?i)^Fami(l)?ly house$", + "^Upute autorima$", + "^Strategic Analysis$", + "^Finanční analýza vybraného podniku$", + "^Finanční analýza$", + "^Riječ urednika$", + "(?i)^Content(s?)$", + "(?i)^Inhalt$", + "^Jinjō shōgaku shūshinsho jidōyō$", + "(?i)^Index$", + "^Chūgaku kokubun kyōkasho$", + "^Retrato de una mujer$", + "^Retrato de un hombre$", + "^Kōtō shōgaku dokuhon$", + "^Shotōka kokugo$", + "^Shōgaku dokuhon$", + "^Jinjō shōgaku kokugo dokuhon$", + "^Shinsei kokugo dokuhon$", + "^Teikoku dokuhon$", + "^Instructions to Authors$", + "^KİTAP TAHLİLİ$", + "^PRZEGLĄD PIŚMIENNICTWA$", + "(?i)^Presentación$", + "^İçindekiler$", + "(?i)^Tabl?e of contents$", + "^(CODICE DEL BEATO DE LOS REYES FERNANDO I Y SANCHA).*$", + "^(\\[MADRID\\. BIBL\\. NAC\\. N.*KING FERDINAND I.*FROM SAN ISIDORO DE LEON\\. FACUNDUS SCRIPSIT DATED.*\\]).*", + "^Editorial( Board)?$", + "(?i)^Editorial \\(English\\)$", + "^Editörden$", + "^(Corpus Oral Dialectal \\(COD\\)\\.).*$", + "^(Kiri Karl Morgensternile).*$", + "^(\\[Eksliibris Aleksandr).*\\]$", + "^(\\[Eksliibris Aleksandr).*$", + "^(Eksliibris Aleksandr).*$", + "^(Kiri A\\. de Vignolles).*$", + "^(2 kirja Karl Morgensternile).*$", + "^(Pirita kloostri idaosa arheoloogilised).*$", + "^(Kiri tundmatule).*$", + "^(Kiri Jenaer Allgemeine Literaturzeitung toimetusele).*$", + "^(Eksliibris Nikolai Birukovile).*$", + "^(Eksliibris Nikolai Issakovile).*$", + "^(WHP Cruise Summary Information of section).*$", + "^(Measurement of the top quark\\-pair production cross section with ATLAS in pp collisions at).*$", + "^(Measurement of the spin\\-dependent structure function).*", + "(?i)^.*authors['’′]? reply\\.?$", + "(?i)^.*authors['’′]? response\\.?$", + "^Data [mM]anagement [sS]ervices\\.$", + "Research and Advanced Technology for Digital Libraries" + ] + }, + "synonyms": {} + } +} \ No newline at end of file From eb48d31ea6c0504a90d1fcc1ddff22d172646dfc Mon Sep 17 00:00:00 2001 From: miconis Date: Thu, 30 Dec 2021 13:11:52 +0100 Subject: [PATCH 165/449] [maven-release-plugin] prepare release dnet-dedup-4.1.8 --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 88b611e0c..56c25337f 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 4.1.8-SNAPSHOT + 4.1.8 ../pom.xml From cea8440153df2b0aba3a25cdccd44d9847922762 Mon Sep 17 00:00:00 2001 From: miconis Date: Thu, 30 Dec 2021 13:11:57 +0100 Subject: [PATCH 166/449] [maven-release-plugin] prepare for next development iteration --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 56c25337f..736722ccd 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 4.1.8 + 4.1.9-SNAPSHOT ../pom.xml From 2f1ba56f616c84017e4f74fa2b089c0a1782fca1 Mon Sep 17 00:00:00 2001 From: miconis Date: Thu, 13 Jan 2022 11:58:28 +0100 Subject: [PATCH 167/449] bug fix in the authormatch comparator, implementation of tests --- .../pace/common/AbstractPaceFunctions.java | 7 ++ .../eu/dnetlib/pace/tree/AuthorsMatch.java | 102 +++++++++++++----- .../pace/util/BlockProcessorForTesting.java | 26 ++--- .../pace/comparators/ComparatorTest.java | 18 +++- .../java/eu/dnetlib/pace/util/UtilTest.java | 18 +++- 5 files changed, 124 insertions(+), 47 deletions(-) diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java index 2f0fc4f45..858fe9801 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java @@ -16,6 +16,8 @@ import org.apache.commons.lang3.StringUtils; import java.io.IOException; import java.io.StringWriter; +import java.io.UnsupportedEncodingException; +import java.nio.charset.StandardCharsets; import java.text.Normalizer; import java.util.*; import java.util.function.Function; @@ -160,6 +162,11 @@ public abstract class AbstractPaceFunctions { return Normalizer.normalize(s, Normalizer.Form.NFD); } + public String utf8(final String s) { + byte[] bytes = s.getBytes(StandardCharsets.UTF_8); + return new String(bytes, StandardCharsets.UTF_8); + } + public String unicodeNormalization(final String s) { Matcher m = hexUnicodePattern.matcher(s); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AuthorsMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AuthorsMatch.java index ff9d49794..b5a56f6a4 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AuthorsMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AuthorsMatch.java @@ -1,13 +1,13 @@ package eu.dnetlib.pace.tree; import com.google.common.collect.Iterables; -import com.wcohen.ss.JaroWinkler; import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.model.FieldList; import eu.dnetlib.pace.model.Person; import eu.dnetlib.pace.tree.support.AbstractComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; +import com.wcohen.ss.AbstractStringDistance; import java.util.Comparator; import java.util.List; @@ -25,6 +25,7 @@ public class AuthorsMatch extends AbstractComparator { private double NAME_THRESHOLD; private double FULLNAME_THRESHOLD; private String MODE; //full or surname + private int common; public AuthorsMatch(Map params){ super(params, new com.wcohen.ss.JaroWinkler()); @@ -34,6 +35,11 @@ public class AuthorsMatch extends AbstractComparator { SURNAME_THRESHOLD = Double.parseDouble(params.getOrDefault("surname_th", "0.95")); NAME_THRESHOLD = Double.parseDouble(params.getOrDefault("name_th", "0.95")); FULLNAME_THRESHOLD = Double.parseDouble(params.getOrDefault("fullname_th", "0.9")); + common = 0; + } + + protected AuthorsMatch(double w, AbstractStringDistance ssalgo) { + super(w, ssalgo); } @Override @@ -45,41 +51,85 @@ public class AuthorsMatch extends AbstractComparator { List aList = ((FieldList) a).stringList().stream().map(author -> new Person(author, false)).collect(Collectors.toList()); List bList = ((FieldList) b).stringList().stream().map(author -> new Person(author, false)).collect(Collectors.toList()); - int common = 0; + common = 0; + //compare each element of List1 with each element of List2 for (Person p1 : aList) - for (Person p2 : bList) - if(MODE.equals("full")) { - if (personComparator(p1, p2)) - common += 1; - } - else { - if (surnameComparator(p1, p2)) + + for (Person p2 : bList) { + + //both persons are inaccurate + if (!p1.isAccurate() && !p2.isAccurate()) { + //compare just normalized fullnames + if (ssalgo.score(normalization(p1.getNormalisedFullname()), normalization(p2.getNormalisedFullname())) > FULLNAME_THRESHOLD) { common += 1; + break; + } } - return (double)common / (aList.size() + bList.size() - common); + //one person is inaccurate + if (p1.isAccurate() ^ p2.isAccurate()) { + //prepare data + String name = p1.isAccurate()? normalization(p1.getNormalisedFirstName()) : normalization(p2.getNormalisedFirstName()); + String surname = p1.isAccurate()? normalization(p2.getNormalisedSurname()) : normalization(p2.getNormalisedSurname()); + + String fullname = p1.isAccurate()? normalization(p2.getNormalisedFullname()) : normalization(p1.getNormalisedFullname()); + + if (fullname.contains(surname)) { + if (MODE.equals("full")) { + if (fullname.contains(name)) { + common += 1; + break; + } + } + else { //MODE equals "surname" + common += 1; + break; + } + } + } + + //both persons are accurate + if (p1.isAccurate() && p2.isAccurate()) { + + if (compareSurname(p1, p2)) { + if (MODE.equals("full")) { + if(compareFirstname(p1, p2)) { + common += 1; + break; + } + } + else { //MODE equals "surname" + common += 1; + break; + } + } + + } + + } + + //normalization factor to compute the score + int normFactor = aList.size() == bList.size() ? aList.size() : (aList.size() + bList.size() - common); + + return (double)common / normFactor; } - public boolean personComparator(Person p1, Person p2) { - - if(!p1.isAccurate() || !p2.isAccurate()) - return ssalgo.score(p1.getOriginal(), p2.getOriginal()) > FULLNAME_THRESHOLD; - - if(ssalgo.score(p1.getSurnameString(),p2.getSurnameString()) > SURNAME_THRESHOLD) - if(p1.getNameString().length()<=2 || p2.getNameString().length()<=2) - return firstLC(p1.getNameString()).equals(firstLC(p2.getNameString())); - else - return ssalgo.score(p1.getNameString(), p2.getNameString()) > NAME_THRESHOLD; - else - return false; + public boolean compareSurname(Person p1, Person p2) { + return ssalgo.score(normalization(p1.getNormalisedSurname()), normalization(p2.getNormalisedSurname())) > SURNAME_THRESHOLD; } - public boolean surnameComparator(Person p1, Person p2) { + public boolean compareFirstname(Person p1, Person p2) { - if(!p1.isAccurate() || !p2.isAccurate()) - return ssalgo.score(p1.getOriginal(), p2.getOriginal()) > FULLNAME_THRESHOLD; + if(p1.getNormalisedFirstName().length()<=2 || p2.getNormalisedFirstName().length()<=2) { + if (firstLC(p1.getNormalisedFirstName()).equals(firstLC(p2.getNormalisedFirstName()))) + return true; + } - return ssalgo.score(p1.getSurnameString(), p2.getSurnameString()) > SURNAME_THRESHOLD; + return ssalgo.score(normalization(p1.getNormalisedFirstName()), normalization(p2.getNormalisedFirstName())) > NAME_THRESHOLD; + } + + public String normalization(String s) { + return normalize(utf8(cleanup(s))); } } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessorForTesting.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessorForTesting.java index d5e785af6..a6bef3f3c 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessorForTesting.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessorForTesting.java @@ -36,23 +36,23 @@ public class BlockProcessorForTesting { this.dedupConf = dedupConf; } - public void processSortedBlock(final String key, final List documents, final Reporter context, boolean useTree) { + public void processSortedBlock(final String key, final List documents, final Reporter context, boolean useTree, boolean noMatch) { if (documents.size() > 1) { // log.info("reducing key: '" + key + "' records: " + q.size()); - process(prepare(documents), context, useTree); + process(prepare(documents), context, useTree, noMatch); } else { context.incrementCounter(dedupConf.getWf().getEntityType(), "records per hash key = 1", 1); } } - public void process(final String key, final Iterable documents, final Reporter context, boolean useTree) { + public void process(final String key, final Iterable documents, final Reporter context, boolean useTree, boolean noMatch) { final Queue q = prepare(documents); if (q.size() > 1) { // log.info("reducing key: '" + key + "' records: " + q.size()); - process(simplifyQueue(q, key, context), context, useTree); + process(simplifyQueue(q, key, context), context, useTree, noMatch); } else { context.incrementCounter(dedupConf.getWf().getEntityType(), "records per hash key = 1", 1); @@ -123,7 +123,7 @@ public class BlockProcessorForTesting { } } - private void process(final Queue queue, final Reporter context, boolean useTree) { + private void process(final Queue queue, final Reporter context, boolean useTree, boolean noMatch) { while (!queue.isEmpty()) { @@ -155,18 +155,18 @@ public class BlockProcessorForTesting { if (!idCurr.equals(idPivot) && (fieldCurr != null)) { - if(!compareInstanceType(pivot, curr, dedupConf)){ - emitOutput(new TreeProcessor(dedupConf).compare(pivot, curr), idPivot, idCurr, context); + //draws no match relations (test purpose) + if (noMatch) { + emitOutput(!new TreeProcessor(dedupConf).compare(pivot, curr), idPivot, idCurr, context); } else { - emitOutput(false, idPivot, idCurr, context); + //use the decision tree implementation or the "normal" implementation of the similarity score (valid only for publications) + if(useTree) + emitOutput(new TreeProcessor(dedupConf).compare(pivot, curr), idPivot, idCurr, context); + else + emitOutput(publicationCompare(pivot, curr, dedupConf), idPivot, idCurr, context); } -// if(useTree) -// emitOutput(new TreeProcessor(dedupConf).compare(pivot, curr), idPivot, idCurr, context); -// else -// emitOutput(publicationCompare(pivot, curr, dedupConf), idPivot, idCurr, context); - } } } diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java index 70a5b16b5..f4eee93e0 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java @@ -165,11 +165,6 @@ public class ComparatorTest extends AbstractPaceTest { result = jaroWinkler.distance("Victoria Dataverse", "Windsor Dataverse", conf); System.out.println("result = " + result); - final Levenstein levenstein = new Levenstein(params); - - result = levenstein.distance("Victoria", "Windsor", conf); - System.out.println("result = " + result); - } @Test @@ -182,6 +177,14 @@ public class ComparatorTest extends AbstractPaceTest { System.out.println("result = " + result); } + @Test + public void levensteinTest() { + final Levenstein levenstein = new Levenstein(params); + + double result = levenstein.distance("la bruzzo", "la bruzzo", conf); + System.out.println("result = " + result); + } + @Test public void instanceTypeMatchTest() { @@ -238,6 +241,11 @@ public class ComparatorTest extends AbstractPaceTest { assertEquals(1.0, result); + Field e = createFieldList(Arrays.asList("Manghi, Paolo", "Atzori, Claudio"), "authors"); + result = authorsMatch.compare(a, e, conf); + + assertEquals(0.25, result); + } @Test diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/util/UtilTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/util/UtilTest.java index d8e0767d5..601831e67 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/util/UtilTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/util/UtilTest.java @@ -1,23 +1,35 @@ package eu.dnetlib.pace.util; +import eu.dnetlib.pace.model.Person; +import jdk.nashorn.internal.ir.annotations.Ignore; import org.junit.jupiter.api.*; import java.util.HashMap; import java.util.Map; +import static org.junit.jupiter.api.Assertions.assertEquals; public class UtilTest { - Map params; + static Map params; @BeforeAll - public void setUp(){ - params = new HashMap(); + public static void setUp(){ + params = new HashMap<>(); } @Test + @Ignore public void paceResolverTest() { PaceResolver paceResolver = new PaceResolver(); paceResolver.getComparator("keywordMatch", params); } + @Test + public void personTest() { + Person p = new Person("j. f. kennedy", false); + + assertEquals("kennedy", p.getSurnameString()); + assertEquals("j f", p.getNameString()); + } + } From 003bcf169983556e36341957ba4ec1a08ff56cdf Mon Sep 17 00:00:00 2001 From: miconis Date: Thu, 13 Jan 2022 15:15:00 +0100 Subject: [PATCH 168/449] [maven-release-plugin] prepare release dnet-dedup-4.1.9 --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 736722ccd..478f44943 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 4.1.9-SNAPSHOT + 4.1.9 ../pom.xml From 1ff6a3dc114b26251d36ee03c0f1a9713e554afd Mon Sep 17 00:00:00 2001 From: miconis Date: Thu, 13 Jan 2022 15:15:05 +0100 Subject: [PATCH 169/449] [maven-release-plugin] prepare for next development iteration --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 478f44943..d84439b25 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 4.1.9 + 4.1.10-SNAPSHOT ../pom.xml From 2ff97781d253851c2f413e2cf9e98e32e097827b Mon Sep 17 00:00:00 2001 From: miconis Date: Thu, 13 Jan 2022 17:20:20 +0100 Subject: [PATCH 170/449] minor change --- .../java/eu/dnetlib/pace/tree/AuthorsMatch.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AuthorsMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AuthorsMatch.java index b5a56f6a4..afd86afec 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AuthorsMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AuthorsMatch.java @@ -60,7 +60,10 @@ public class AuthorsMatch extends AbstractComparator { //both persons are inaccurate if (!p1.isAccurate() && !p2.isAccurate()) { //compare just normalized fullnames - if (ssalgo.score(normalization(p1.getNormalisedFullname()), normalization(p2.getNormalisedFullname())) > FULLNAME_THRESHOLD) { + String fullname1 = normalization(p1.getNormalisedFullname().isEmpty()? p1.getOriginal() : p1.getNormalisedFullname()); + String fullname2 = normalization(p2.getNormalisedFullname().isEmpty()? p2.getOriginal() : p2.getNormalisedFullname()); + + if (ssalgo.score(fullname1, fullname2) > FULLNAME_THRESHOLD) { common += 1; break; } @@ -69,10 +72,12 @@ public class AuthorsMatch extends AbstractComparator { //one person is inaccurate if (p1.isAccurate() ^ p2.isAccurate()) { //prepare data - String name = p1.isAccurate()? normalization(p1.getNormalisedFirstName()) : normalization(p2.getNormalisedFirstName()); - String surname = p1.isAccurate()? normalization(p2.getNormalisedSurname()) : normalization(p2.getNormalisedSurname()); + String name = normalization(p1.isAccurate()? p1.getNormalisedFirstName() : p2.getNormalisedFirstName()); + String surname = normalization(p1.isAccurate()? p2.getNormalisedSurname() : p2.getNormalisedSurname()); - String fullname = p1.isAccurate()? normalization(p2.getNormalisedFullname()) : normalization(p1.getNormalisedFullname()); + String fullname = normalization( + p1.isAccurate() ? ((p1.getNormalisedFullname().isEmpty()) ? p1.getOriginal() : p1.getNormalisedFullname()) : (p2.getNormalisedFullname().isEmpty() ? p2.getOriginal() : p2.getNormalisedFullname()) + ); if (fullname.contains(surname)) { if (MODE.equals("full")) { From 620e35db283d968605b3fdc193bf494a71e8e376 Mon Sep 17 00:00:00 2001 From: miconis Date: Thu, 13 Jan 2022 17:22:12 +0100 Subject: [PATCH 171/449] [maven-release-plugin] prepare release dnet-dedup-4.1.10 --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index d84439b25..d1fa7e44b 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 4.1.10-SNAPSHOT + 4.1.10 ../pom.xml From 8f07f0c537e1d40c0edb8f4ba7814be099cf3654 Mon Sep 17 00:00:00 2001 From: miconis Date: Thu, 13 Jan 2022 17:22:16 +0100 Subject: [PATCH 172/449] [maven-release-plugin] prepare for next development iteration --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index d1fa7e44b..77a4e7745 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 4.1.10 + 4.1.11-SNAPSHOT ../pom.xml From 699612dd17087d33c3df71be6ff99ed8cf52f99c Mon Sep 17 00:00:00 2001 From: miconis Date: Tue, 8 Mar 2022 16:49:28 +0100 Subject: [PATCH 173/449] implementation of the size threshold on authors list match --- .../src/main/java/eu/dnetlib/pace/tree/AuthorsMatch.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AuthorsMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AuthorsMatch.java index afd86afec..3f9fdd37a 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AuthorsMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AuthorsMatch.java @@ -25,6 +25,7 @@ public class AuthorsMatch extends AbstractComparator { private double NAME_THRESHOLD; private double FULLNAME_THRESHOLD; private String MODE; //full or surname + private int SIZE_THRESHOLD; private int common; public AuthorsMatch(Map params){ @@ -35,6 +36,7 @@ public class AuthorsMatch extends AbstractComparator { SURNAME_THRESHOLD = Double.parseDouble(params.getOrDefault("surname_th", "0.95")); NAME_THRESHOLD = Double.parseDouble(params.getOrDefault("name_th", "0.95")); FULLNAME_THRESHOLD = Double.parseDouble(params.getOrDefault("fullname_th", "0.9")); + SIZE_THRESHOLD = Integer.parseInt(params.getOrDefault("size_th", "20")); common = 0; } @@ -48,6 +50,9 @@ public class AuthorsMatch extends AbstractComparator { if (a.isEmpty() || b.isEmpty()) return -1; + if (((FieldList) a).size() > SIZE_THRESHOLD || ((FieldList) a).size() > SIZE_THRESHOLD) + return 1.0; + List aList = ((FieldList) a).stringList().stream().map(author -> new Person(author, false)).collect(Collectors.toList()); List bList = ((FieldList) b).stringList().stream().map(author -> new Person(author, false)).collect(Collectors.toList()); From 3bc07c58817d2153d719ae3bb71f0f0f8b8cda37 Mon Sep 17 00:00:00 2001 From: miconis Date: Wed, 9 Mar 2022 12:53:09 +0100 Subject: [PATCH 174/449] bug fix in the AuthorMatch, implementation of the concat function in the model creation with jpath query --- .../src/main/java/eu/dnetlib/pace/config/Type.java | 2 +- .../main/java/eu/dnetlib/pace/tree/AuthorsMatch.java | 6 ++++-- .../java/eu/dnetlib/pace/util/MapDocumentUtil.java | 12 ++++++++++++ 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Type.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Type.java index 0f1f696ab..33ae4015f 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Type.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Type.java @@ -1,5 +1,5 @@ package eu.dnetlib.pace.config; public enum Type { - String, Int, List, JSON, URL + String, Int, List, JSON, URL, StringConcat } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AuthorsMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AuthorsMatch.java index 3f9fdd37a..6307cd576 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AuthorsMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AuthorsMatch.java @@ -77,11 +77,13 @@ public class AuthorsMatch extends AbstractComparator { //one person is inaccurate if (p1.isAccurate() ^ p2.isAccurate()) { //prepare data + //data for the accurate person String name = normalization(p1.isAccurate()? p1.getNormalisedFirstName() : p2.getNormalisedFirstName()); - String surname = normalization(p1.isAccurate()? p2.getNormalisedSurname() : p2.getNormalisedSurname()); + String surname = normalization(p1.isAccurate()? p1.getNormalisedSurname() : p2.getNormalisedSurname()); + //data for the inaccurate person String fullname = normalization( - p1.isAccurate() ? ((p1.getNormalisedFullname().isEmpty()) ? p1.getOriginal() : p1.getNormalisedFullname()) : (p2.getNormalisedFullname().isEmpty() ? p2.getOriginal() : p2.getNormalisedFullname()) + p1.isAccurate() ? ((p2.getNormalisedFullname().isEmpty()) ? p2.getOriginal() : p2.getNormalisedFullname()) : (p1.getNormalisedFullname().isEmpty() ? p1.getOriginal() : p1.getNormalisedFullname()) ); if (fullname.contains(surname)) { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java index 2683c7b24..f9bd9399b 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java @@ -15,6 +15,7 @@ import net.minidev.json.JSONArray; import java.util.*; import java.util.function.Predicate; +import java.util.stream.Collectors; public class MapDocumentUtil { @@ -45,6 +46,17 @@ public class MapDocumentUtil { .forEach(fi::add); stringField.put(fdef.getName(), fi); break; + case StringConcat: + String[] jpaths = fdef.getPath().split("\\|\\|\\|"); + stringField.put( + fdef.getName(), + new FieldValueImpl(Type.String, + fdef.getName(), + truncateValue(Arrays.stream(jpaths).map(jpath -> getJPathString(jpath, json)).collect(Collectors.joining(" ")), + fdef.getLength()) + ) + ); + break; } }); m.setFieldMap(stringField); From a5a60540394d78e09587638e07c772ddd45af220 Mon Sep 17 00:00:00 2001 From: miconis Date: Wed, 9 Mar 2022 13:43:44 +0100 Subject: [PATCH 175/449] [maven-release-plugin] prepare release dnet-dedup-4.1.11 --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 77a4e7745..12b190f79 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 4.1.11-SNAPSHOT + 4.1.11 ../pom.xml From ac9708e31b5985b55f6f1ccd94efc036dda72445 Mon Sep 17 00:00:00 2001 From: miconis Date: Wed, 9 Mar 2022 13:43:48 +0100 Subject: [PATCH 176/449] [maven-release-plugin] prepare for next development iteration --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 12b190f79..21116cec5 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 4.1.11 + 4.1.12-SNAPSHOT ../pom.xml From a965233dd0b758d2440e8f48e55dad14125330a1 Mon Sep 17 00:00:00 2001 From: miconis Date: Tue, 15 Mar 2022 14:59:13 +0100 Subject: [PATCH 177/449] bug fix in the normalization of a legalname, city map updated and transliteration support added --- dnet-pace-core/pom.xml | 5 + .../pace/clustering/KeywordsClustering.java | 2 +- .../pace/common/AbstractPaceFunctions.java | 51 +- .../eu/dnetlib/pace/config/PaceConfig.java | 5 +- .../pace/tree/JaroWinklerNormalizedName.java | 3 + .../eu/dnetlib/pace/config/city_map.csv | 7 +- .../eu/dnetlib/pace/config/stopwords_gr.txt | 847 ++++++++++++++++++ .../clustering/ClusteringFunctionTest.java | 12 + 8 files changed, 913 insertions(+), 19 deletions(-) create mode 100644 dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_gr.txt diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index 21116cec5..e4711b742 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -67,6 +67,11 @@ json-path + + com.ibm.icu + icu4j + + diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/KeywordsClustering.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/KeywordsClustering.java index b95d1c713..e67275c4e 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/KeywordsClustering.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/KeywordsClustering.java @@ -41,7 +41,7 @@ public class KeywordsClustering extends AbstractClusteringFunction { public Collection apply(final Config conf, List fields) { return fields.stream().filter(f -> !f.isEmpty()) .map(Field::stringValue) - .map(this::cleanup) //TODO can I add this to the AbstractClusteringFunction without overriding the method here? + .map(this::cleanup) .map(this::normalize) .map(s -> filterAllStopWords(s)) .map(s -> doApply(conf, s)) diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java index 858fe9801..0802dfba3 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java @@ -24,6 +24,7 @@ import java.util.function.Function; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; +import com.ibm.icu.text.Transliterator; /** * Set of common functions for the framework @@ -36,6 +37,7 @@ public abstract class AbstractPaceFunctions { private static Map cityMap = AbstractPaceFunctions.loadMapFromClasspath("/eu/dnetlib/pace/config/city_map.csv"); //list of stopwords in different languages + protected static Set stopwords_gr = loadFromClasspath("/eu/dnetlib/pace/config/stopwords_gr.txt"); protected static Set stopwords_en = loadFromClasspath("/eu/dnetlib/pace/config/stopwords_en.txt"); protected static Set stopwords_de = loadFromClasspath("/eu/dnetlib/pace/config/stopwords_de.txt"); protected static Set stopwords_es = loadFromClasspath("/eu/dnetlib/pace/config/stopwords_es.txt"); @@ -43,6 +45,9 @@ public abstract class AbstractPaceFunctions { protected static Set stopwords_it = loadFromClasspath("/eu/dnetlib/pace/config/stopwords_it.txt"); protected static Set stopwords_pt = loadFromClasspath("/eu/dnetlib/pace/config/stopwords_pt.txt"); + //transliterator + protected static Transliterator transliterator = Transliterator.getInstance("Any-Eng"); + //blacklist of ngrams: to avoid generic keys protected static Set ngramBlacklist = loadFromClasspath("/eu/dnetlib/pace/config/ngram_blacklist.txt"); @@ -68,15 +73,13 @@ public abstract class AbstractPaceFunctions { protected String cleanup(final String s) { - final String s00 = s.replaceAll(HTML_REGEX, ""); - final String s0 = unicodeNormalization(s00.toLowerCase()); - final String s1 = fixAliases(s0); - final String s2 = nfd(s1); - final String s3 = s2.replaceAll("–", " "); - final String s4 = s3.replaceAll("&", " "); - final String s5 = s4.replaceAll(""", " "); - final String s6 = s5.replaceAll("−", " "); - final String s7 = s6.replaceAll("([0-9]+)", " $1 "); + final String s1 = s.replaceAll(HTML_REGEX, ""); + final String s2 = unicodeNormalization(s1.toLowerCase()); + final String s3 = nfd(s2); + final String s4 = fixXML(s3); + final String s5 = s4.replaceAll("([0-9]+)", " $1 "); + final String s6 = transliterate(s5); + final String s7 = fixAliases(s6); final String s8 = s7.replaceAll("[^\\p{ASCII}]", ""); final String s9 = s8.replaceAll("[\\p{Punct}]", " "); final String s10 = s9.replaceAll("\\n", " "); @@ -85,6 +88,14 @@ public abstract class AbstractPaceFunctions { return s12; } + protected String fixXML(final String a){ + + return a.replaceAll("–", " ") + .replaceAll("&", " ") + .replaceAll(""", " ") + .replaceAll("−", " "); + } + protected boolean checkNumbers(final String a, final String b) { final String numbersA = getNumbers(a); final String numbersB = getNumbers(b); @@ -129,6 +140,15 @@ public abstract class AbstractPaceFunctions { return sb.toString(); } + protected static String transliterate(final String s) { + try { + return transliterator.transliterate(s); + } + catch(Exception e) { + return s; + } + } + protected String removeSymbols(final String s) { final StringBuilder sb = new StringBuilder(); @@ -147,7 +167,7 @@ public abstract class AbstractPaceFunctions { } protected String normalize(final String s) { - return nfd(unicodeNormalization(s)) + return fixAliases(transliterate(nfd(unicodeNormalization(s)))) .toLowerCase() // do not compact the regexes in a single expression, would cause StackOverflowError in case of large input strings .replaceAll("[^ \\w]+", "") @@ -200,6 +220,7 @@ public abstract class AbstractPaceFunctions { s = filterStopWords(s, stopwords_fr); s = filterStopWords(s, stopwords_pt); s = filterStopWords(s, stopwords_es); + s = filterStopWords(s, stopwords_gr); return s; } @@ -215,10 +236,13 @@ public abstract class AbstractPaceFunctions { } public static Set loadFromClasspath(final String classpath) { + + Transliterator transliterator = Transliterator.getInstance("Any-Eng"); + final Set h = Sets.newHashSet(); try { for (final String s : IOUtils.readLines(NGramUtils.class.getResourceAsStream(classpath))) { - h.add(s); + h.add(fixAliases(transliterator.transliterate(s))); //transliteration of the stopwords } } catch (final Throwable e) { return Sets.newHashSet(); @@ -227,6 +251,9 @@ public abstract class AbstractPaceFunctions { } public static Map loadMapFromClasspath(final String classpath) { + + Transliterator transliterator = Transliterator.getInstance("Any-Eng"); + final Map m = new HashMap<>(); try { for (final String s : IOUtils.readLines(AbstractPaceFunctions.class.getResourceAsStream(classpath))) { @@ -234,7 +261,7 @@ public abstract class AbstractPaceFunctions { String[] line = s.split(";"); String value = line[0]; for (int i = 1; i < line.length; i++) { - m.put(line[i].toLowerCase(), value); + m.put(fixAliases(transliterator.transliterate(line[i].toLowerCase())), value); } } } catch (final Throwable e) { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java index 33971107e..5ae2edfb0 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java @@ -3,6 +3,7 @@ package eu.dnetlib.pace.config; import com.fasterxml.jackson.annotation.JsonIgnore; import com.google.common.collect.Maps; +import com.ibm.icu.text.Transliterator; import eu.dnetlib.pace.common.AbstractPaceFunctions; import eu.dnetlib.pace.model.ClusteringDef; import eu.dnetlib.pace.model.FieldDef; @@ -43,10 +44,12 @@ public class PaceConfig extends AbstractPaceFunctions implements Serializable { public void initTranslationMap(){ translationMap = Maps.newHashMap(); + + Transliterator transliterator = Transliterator.getInstance("Any-Eng"); for (String key : synonyms.keySet()) { for (String term : synonyms.get(key)){ translationMap.put( - normalize(term.toLowerCase()), + fixAliases(transliterator.transliterate(term.toLowerCase())), key); } } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerNormalizedName.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerNormalizedName.java index 5f4615080..d8e416df9 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerNormalizedName.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerNormalizedName.java @@ -50,6 +50,9 @@ public class JaroWinklerNormalizedName extends AbstractComparator { cb = removeKeywords(cb, keywords2); cb = removeKeywords(cb, cities2); + ca = ca.replaceAll("[ ]{2,}", " "); + cb = cb.replaceAll("[ ]{2,}", " "); + if (ca.isEmpty() && cb.isEmpty()) return 1.0; else diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/city_map.csv b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/city_map.csv index 066afa7a4..360221ab7 100644 --- a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/city_map.csv +++ b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/city_map.csv @@ -909,7 +909,6 @@ city::2389086;Berberati;BBT;Berberati;Berbérati;Берберати; city::2389853;Bangui;BGF;Bangi;Bangis;Bangui;Mpan'nkoui;ban ji;bang-gi;bangi;bangwyy;Μπανγκουί;Банги;Бангі;בנגואי;بانگوئی;ባንጊ;バンギ;班基;방기; city::2255414;Pointe-Noire;PNR;Pointe-Noire;Puehnt-Nuar;Puent Nuaras;puaengteunualeu;Пуэнт-Нуар;푸앵트누아르; city::2258261;Dolisie;DIS;Dolisi;Dolisie;Dolisje;Dolizi;Dolosie;Loubomo;Lubomo;dolliji;dorishi;duo li xi;dwlysy;Долиси;Лубомо;دولیسی;ドリシー;多利西;돌리지; -city::2259383;Kayes;Jacob;Kai;Kajes;Kaye;Kayes;Kaï;Кайес; city::2260535;Brazzaville;BZV;Braza;Brazavil;Brazavilis;Brazavilo;Brazzavil';Brazzaville;Maya-Maya;Mprazabil;N'Tamo;beulajabil;brazafyl;brazawyl;brzwwyl;bu la chai wei er;burazavu~iru;Μπραζαβίλ;Браззавиль;ברזוויל;برازافيل;برازاویل;ብራዛቪል;ブラザヴィル;布拉柴维尔;브라자빌; city::2657896;Zurich;Cirihe;Cirikh;Ciurichas;Cjurikh;Cjurikh khot;Cuerih;Curych;Cürih;Cīrihe;Gorad Cjurykh;Lungsod ng Zuerich;Lungsod ng Zürich;Su-la-sie;Suerix;Syurix;Sürix;Sŭ-là̤-sié;Tsuerix;Tsurique;Tsürix;Turicum;Turitg;ZRH;Zeurich;Zirich;Zirik;Zuerich;Zuerigh;Zuerih;Zuric;Zurich;Zuricu;Zurigh;Zurigo;Zuriko;Zurique;Zurych;Zurìcu;Zyriche;Zyrihu;Zúric;Zúrich;Zürich;Zürigh;Zürih;churihhi;chwilihi;curikku;jhyurika;jurikha;su li shi;su rik;suricc;tsiurikhi;tsyryk;zi'urikha;zwrykh;zyryk;zyurikha;zywrch;zywrh;zywrkh;Ζυρίχη;Горад Цюрых;Цирих;Цюрих;Цюрих хот;Ցյուրիխ;ציריך;زوريخ;زوریخ;زيورخ;زیورخ;زیورچ;سيۇرىخ;څوریخ;ܙܝܘܪܚ;ܬܣܝܪܝܟ;ज़्यूरिख़;झ्युरिक;জুরিখ;ਜ਼ਿਊਰਿਖ;சூரிக்கு;സൂറിച്ച്;ซูริก;ဇူးရစ်ချ်မြို့;ციურიხი;ዙሪክ;チューリッヒ;苏黎世;蘇黎世;취리히; city::2657970;Winterthur;Eulachstadt;Gorad Vintehrtur;Vintertour;Vintertur;Vintertura;Vinterturas;Vinterturi;Vinterturo;Vintertūra;Vintertūras;Vitudurum;Winterthour;Winterthur;ZLI;binteotueo;fyntrtwr;vu~intato~uru;wen te tu er;wntrtwr;Βίντερτουρ;Винтертур;Вінтертур;Горад Вінтэртур;فينترتور;ونترتور;ونٹرتھر;ვინტერთური;ヴィンタートゥール;温特图尔;빈터투어; @@ -2994,7 +2993,7 @@ city::262036;Glyfada;Aixone;Glifadha;Glifádha;Glyfada;Glyfáda;Γλυφάδα; city::262135;Galatsi;Galatsi;Galatsion;Galátsi;Galátsion;Γαλάτσι;Γαλάτσιον; city::263986;Agios Dimitrios;Agios Dimitrios;Ayios Dhimitrios;Brakhami;Brakhámi;Áyios Dhimítrios;Άγιος Δημήτριος; city::264194;Agia Paraskevi;Agia Paraskeue;Agia Paraskevi;Agía Paraskeví;Ayia Paraskevi;Ayía Paraskeví;Αγία Παρασκευή; -city::264371;Athens;ATH;Afina;Afini;Afiny;An Aithin;Ateena;Atehny;Aten;Atena;Atenai;Atenas;Atenas - Athena;Atenas - Αθήνα;Atene;Atenes;Ateni;Ateno;Atenoj;Ateny;Athen;Athena;Athenae;Athenai;Athene;Athenes;Athens;Atheny;Athina;Athinai;Athinia;Athènes;Athén;Athénes;Athény;Athína;Athínai;Atina;Atény;Atēnas;Atėnai;Aþena;Kota Athena;Lungsod ng Athina;Lungsod ng Athína;atene;atene si;ateni;athensa;athyna;atn;etens;xethens;ya dian;Αθήνα;Αθήναι;Αθηνα;Αθηναι;Атина;Атэны;Афины;Афіни;Аѳины;Աթենք;אתונה;آتن;أثينا;ئافېنا;ܐܬܝܢܐ;अथेन्स;ஏதென்ஸ்;เอเธนส์;ათენი;Ἀθῆναι;アテネ;雅典;아테네;아테네 시; +city::264371;Athens;athenon;ATH;Afina;Afini;Afiny;An Aithin;Ateena;Atehny;Aten;Atena;Atenai;Atenas;Atenas - Athena;Atenas - Αθήνα;Αθηνών;Atene;Atenes;Ateni;Ateno;Atenoj;Ateny;Athen;Athena;Athenae;Athenai;Athene;Athenes;Athens;Atheny;Athina;Athinai;Athinia;Athènes;Athén;Athénes;Athény;Athína;Athínai;Atina;Atény;Atēnas;Atėnai;Aþena;Kota Athena;Lungsod ng Athina;Lungsod ng Athína;atene;atene si;ateni;athensa;athyna;atn;etens;xethens;ya dian;Αθήνα;Αθήναι;Αθηνα;Αθηναι;Атина;Атэны;Афины;Афіни;Аѳины;Աթենք;אתונה;آتن;أثينا;ئافېنا;ܐܬܝܢܐ;अथेन्स;ஏதென்ஸ்;เอเธนส์;ათენი;Ἀθῆναι;アテネ;雅典;아테네;아테네 시; city::265243;Marousi;Amarousio;Amarousion;Amaroúsion;Marousi;Maroussi;Maroúsi;Αμαρούσιον;Μαρούσι; city::265488;Acharnes;Acharnae;Acharnai;Acharne;Acharnes;Akharnai;Akharnaí;Menidhi;Menidhion;Menidi;Menidion;Menioi;Menídhi;Menídhion;Meníoi;Αχαρνές;Αχαρναί;Μενίδι;Μενίδιον; city::265533;Aigaleo;Aegaleo;Aigaleo;Aigáleo;Egaleo;Αιγάλεω; @@ -5210,7 +5209,6 @@ city::2451478;Segou;Segi;Segou;Segu;Segú;Senkou;Ségou;sai gu;segu;sgw;syghw;Σ city::2453348;Mopti;MZI;Mopti;Moptis;mo pu ti;mobti;moputi;mwbty;mwpty;Μοπτί;Мопти;Мопті;موبتي;موپتی;موپٹی;モプティ;莫普提;몹티; city::2453662;Markala;Markala; city::2454268;Koutiala;KTX;Koutiala;Kutiala;ku jia la;Кутиала;庫佳拉; -city::2455518;Kayes;Gorad Kaes;KYS;Kaes;Kagies;Kajes;Kajesas;Kayes;Kayi;ka yi;kai;kays;keseu;kyz;Καγιές;Горад Каес;Каес;Кайес;Каєс;كايس;کایس;کیز;კაესი;カイ;卡伊;케스; city::2457163;Gao;GAQ;Gao;Nkao;gao;gaw;gayw;jaw;jia ao;ka xo;Γκάο;Гао;Ґао;גאו;جاو;گائو;گاو;กาโอ;ガオ;加奥;가오; city::2460596;Bamako;BKO;Bamaco - Bamako;Bamakas;Bamako;Bamaku;Bamakó;Bamakɔ;Bammaco;Bammako;Mpamako;ba ma ke;bamako;bamakw;bmqw;Μπαμάκο;Бамако;Բամակո;במקו;باماكو;باماکو;ባማኮ;バマコ;巴馬科;바마코; city::1285173;Yenangyaung;Yaynangyoung;Yenangyaung;Yenangyoung; @@ -7474,7 +7472,6 @@ city::4177887;West Palm Beach;Litus Palmense Occidentale;Okcidenta Palm Beach;PB city::4178003;Weston;Uehston;Veston;Weston;vestana;wei si dun;wstwn;wstwn flwryda;Вестон;Уэстон;وستون;وستون، فلوریدا;वेस्टन;韦斯顿; city::4179320;Albany;ABY;Albany;City of Opportunity;Olbani;albani;albany;albany jarjya;albany jwrjya;ao er ba ni;olbeoni;orubani;Олбани;Олбані;آلبانی، جورجیا;ألباني;البانی، جارجیا;अल्बानी;オールバニ;奧爾巴尼;올버니; city::4179574;Alpharetta;Al'faretta;Alfareta;Alpharetta;New Prospect Campground;alfarta jwrjya;alfaryta;alfaryta jarjya;alphareta;Алфарета;Альфаретта;آلفارتا، جورجیا;ألفاريتا;الفاریتا، جارجیا;अल्फारेटा; -city::4180386;Athens;AHN;Atens;Atensas;Athens;Athens i Georgia;Athens-Clarke County;Atina;Atuns;Cedar Shoals;aeseonseu;asenzu;athensa;athyna;atn jwrjya;atynz jwrjya;ethensaklarka ka'unti;ya dian;Атенс;Атина;Атънс;אתנס;آتئنز، جورجیا;آتن، جورجیا;أثينا;ایتھنز، جارجیا;अथेन्स;एथेन्सक्लार्क काउन्टी;アセンズ;雅典;애선스; city::4180439;Atlanta;ATL;Atlant;Atlanta;Atlantae;Atlonta;Canebrake;Gorad Atlanta;Marthasdale;Marthasville;Standing Peachtree;Terminus;White Hall;Whitehall;aeteullaenta;arr‌lanra nagaram;atalanta;ateullaenta;ateullanta;atlanta;atoranta;atʼlantʼa;etalanta;etlanta;ya te lan da;Ατλάντα;Атлантæ;Атланта;Горад Атланта;Ատլանտա;אטלאנטא;אטלנטה;آتلانتا;أتلانتا;ئەتڵانتا;اٹلانٹا;اٹلانٹا، جارجیا;अटलांटा;अटलान्टा;एट्लान्टा;एत्लान्ता;আটলান্টা;એટલાન્ટા;அட்லான்டா;అట్లాంటా;ಅಟ್ಲಾಂಟಾ;അറ്റ്‌ലാന്റാ നഗരം;แอตแลนตา;ཨ་ཊི་ལཱན་ཊཱ།;အတ္တလန္တာမြို့;ატლანტა;አትላንታ;アトランタ;亚特兰大;亞特蘭大;아틀란타;아틀랜타;애틀랜타; city::4184530;Brookhaven;Brookhaven;Brookhaven Heights;Nort Atlanta;North Atlanta;brwk hawn jwrjya;brwkhafn;nartha etlanta;Норт Атланта;بروكهافن;بروک هاون، جورجیا;بروک ہیون، جارجیا;नर्थ एट्लान्टा; city::4188985;Columbus;CSG;Columbus;Kolambus;Kolumbas;Kolumbus;Kulumbus;ge lun bu;klmbws jwrjya;kolambasa;kolleombeoseu;kolumbus;koronbasu;kwlmbs jarjya;kwlwmbws;qwlwmbws;Коламбус;Колумбус;Кълъмбъс;קולומבוס;كولومبوس;کلمبوس، جورجیا;کولمبس، جارجیا;कोलम्बस;コロンバス;哥伦布;콜럼버스; @@ -7953,7 +7950,7 @@ city::5258957;La Crosse;Gateway City;LSE;La Crosse;La Kros;La-Kross;Lac Rosse;La city::5261457;Madison;Gorad Madysan;MSN;Madison;Madisonas;Madisonia;Madisons;Madisun;Mantison;Medison;Medisona;Mehdison;madisan;madison;madisoni;madyswn;maediseun;mai di xun;maidisana;mdysn wyskansyn;mdyswn;medisana;metican;Μάντισον;Горад Мадысан;Мадисон;Мадисън;Медисон;Медісон;Мэдисон;Մեդիսոն;מדיסון;ماديسون;مدیسن، ویسکانسین;میڈیسن;میڈیسون، وسکونسن;माडिसन्;मॅडिसन;मेडिसन;मैडिसन;மேடிசன்;მადისონი;マディソン;麦迪逊;매디슨; city::5263045;Milwaukee;Gorad Miluoki;Juneautown;Kilbourntown;MKE;Mahn-a-wau-kee Seepe;Mahn-a-wauk-ee See-pe;Mahn-a-waukee Seepe;Mahn-a-waukie;Mahn-ah-wauk Seepe;Mahnawauk;Man-a-wau-kee;Man-a-wauk-ee;Man-na-wah-kie;Mana'wa;Manawaki;Manawaukee;Manayaukee;Maunahwauke;Mee-lee-waug-ee;Meliki;Melleoki;Melwarik;Meneawkee;Meolaki;Mil-wah-kie;Milgouoki;Milioke;Millewacki;Millicki;Milo-aki;Milouagui;Milouakik;Milowages;Miluoki;Miluokʻi;Milvauchia;Milvoki;Milvokio;Milvokis;Milwacky;Milwahkie;Milwalka;Milwalky;Milwarck;Milwarik;Milwaucki;Milwaukee;Milwaukie;Minewaki;Miniaki;Minnawack;Winnipesaukee;mi er wo ji;mil wxki;mil-woki;mila'oyaki;milavoki;miluokʼi;milvaki;milvakki;milvauki;miruu~oki;mlwaky;mylwaky;mylwaky wyskansyn;mylwwqy;Μιλγουόκι;Горад Мілуокі;Милвоки;Милуоки;Мілуокі;Միլուոքի;מילוואקי;מילווקי;ملواکی;ميلواكي;میلواکی، ویسکانسین;मिलवॉकी;मिल्वौकी;মিলওয়াকি;மில்வாக்கி;మిల్వాకీ;ಮಿಲ್ವಾಕೀ;มิลวอกี;მილუოკი;ミルウォーキー;密尔沃基;密爾沃基;밀워키; city::5264870;North La Crosse;; -city::5265838;Oshkosh;Algoma;Athens;Brooklyn;OSH;Oshkosh;Oskosh;Sawdust City;ashkwsh wyskansyn;ausakosa;awshkwsh;awshkwsh wskwnsn;oshukoshu;Ошкош;אושקוש;أوشكوش;اشکوش، ویسکانسین;اوشکوش، وسکونسن;औशकोश;ოშკოში;オシュコシュ; +city::5265838;Oshkosh;Algoma;Brooklyn;OSH;Oshkosh;Oskosh;Sawdust City;ashkwsh wyskansyn;ausakosa;awshkwsh;awshkwsh wskwnsn;oshukoshu;Ошкош;אושקוש;أوشكوش;اشکوش، ویسکانسین;اوشکوش، وسکونسن;औशकोश;ოშკოში;オシュコシュ; city::5268249;Racine;Kipikawi;Port Gilbert;RAC;Racine;Rasijn;Rasin;Rasinas;la xin;leosin;rashin;rasini;rasyn;rasyn wskwnsn;rysyn wyskansyn;Расийн;Расин;Расін;ראסין;راسين;راسین، وسکونسن;ریسین، ویسکانسین;რასინი;ラシーン;拉辛;러신; city::5278052;Waukesha;Prairieville;UES;Uokesho;Uokisha;Vokesha;Vokisha;Waukesha;u~okisho;wakysha wyskansyn;wawkysha wskwnsn;wkysha;Вокеша;Вокиша;Уокешо;Уокиша;واوکیشا، وسکونسن;واکیشا، ویسکانسین;وكيشا;უოკეშო;ウォキショー; city::5278420;West Allis;Vest Alis;alys ghrby wyskansyn;wyst alys;Вест Алис;آلیس غربی، ویسکانسین;ويست أليس;ویسٹ الیس، وسکونسن;უესტ-ალისი; diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_gr.txt b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_gr.txt new file mode 100644 index 000000000..25deffb38 --- /dev/null +++ b/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_gr.txt @@ -0,0 +1,847 @@ +ένα +έναν +ένας +αι +ακομα +ακομη +ακριβως +αληθεια +αληθινα +αλλα +αλλαχου +αλλες +αλλη +αλλην +αλλης +αλλιως +αλλιωτικα +αλλο +αλλοι +αλλοιως +αλλοιωτικα +αλλον +αλλος +αλλοτε +αλλου +αλλους +αλλων +αμα +αμεσα +αμεσως +αν +ανα +αναμεσα +αναμεταξυ +ανευ +αντι +αντιπερα +αντις +ανω +ανωτερω +αξαφνα +απ +απεναντι +απο +αποψε +από +αρα +αραγε +αργα +αργοτερο +αριστερα +αρκετα +αρχικα +ας +αυριο +αυτα +αυτες +αυτεσ +αυτη +αυτην +αυτης +αυτο +αυτοι +αυτον +αυτος +αυτοσ +αυτου +αυτους +αυτουσ +αυτων +αφοτου +αφου +αἱ +αἳ +αἵ +αὐτόσ +αὐτὸς +αὖ +α∆ιακοπα +βεβαια +βεβαιοτατα +γάρ +γα +γα^ +γε +γι +για +γοῦν +γρηγορα +γυρω +γὰρ +δ' +δέ +δή +δαί +δαίσ +δαὶ +δαὶς +δε +δεν +δι +δι' +διά +δια +διὰ +δὲ +δὴ +δ’ +εαν +εαυτο +εαυτον +εαυτου +εαυτους +εαυτων +εγκαιρα +εγκαιρως +εγω +ειθε +ειμαι +ειμαστε +ειναι +εις +εισαι +εισαστε +ειστε +ειτε +ειχα +ειχαμε +ειχαν +ειχατε +ειχε +ειχες +ει∆εμη +εκ +εκαστα +εκαστες +εκαστη +εκαστην +εκαστης +εκαστο +εκαστοι +εκαστον +εκαστος +εκαστου +εκαστους +εκαστων +εκει +εκεινα +εκεινες +εκεινεσ +εκεινη +εκεινην +εκεινης +εκεινο +εκεινοι +εκεινον +εκεινος +εκεινοσ +εκεινου +εκεινους +εκεινουσ +εκεινων +εκτος +εμας +εμεις +εμενα +εμπρος +εν +ενα +εναν +ενας +ενος +εντελως +εντος +εντωμεταξυ +ενω +ενός +εξ +εξαφνα +εξης +εξισου +εξω +επ +επί +επανω +επειτα +επει∆η +επι +επισης +επομενως +εσας +εσεις +εσενα +εστω +εσυ +ετερα +ετεραι +ετερας +ετερες +ετερη +ετερης +ετερο +ετεροι +ετερον +ετερος +ετερου +ετερους +ετερων +ετουτα +ετουτες +ετουτη +ετουτην +ετουτης +ετουτο +ετουτοι +ετουτον +ετουτος +ετουτου +ετουτους +ετουτων +ετσι +ευγε +ευθυς +ευτυχως +εφεξης +εχει +εχεις +εχετε +εχθες +εχομε +εχουμε +εχουν +εχτες +εχω +εως +εἰ +εἰμί +εἰμὶ +εἰς +εἰσ +εἴ +εἴμι +εἴτε +ε∆ω +η +ημασταν +ημαστε +ημουν +ησασταν +ησαστε +ησουν +ηταν +ητανε +ητοι +ηττον +η∆η +θα +ι +ιι +ιιι +ισαμε +ισια +ισως +ισωσ +ι∆ια +ι∆ιαν +ι∆ιας +ι∆ιες +ι∆ιο +ι∆ιοι +ι∆ιον +ι∆ιος +ι∆ιου +ι∆ιους +ι∆ιων +ι∆ιως +κ +καί +καίτοι +καθ +καθε +καθεμια +καθεμιας +καθενα +καθενας +καθενος +καθετι +καθολου +καθως +και +κακα +κακως +καλα +καλως +καμια +καμιαν +καμιας +καμποσα +καμποσες +καμποση +καμποσην +καμποσης +καμποσο +καμποσοι +καμποσον +καμποσος +καμποσου +καμποσους +καμποσων +κανεις +κανεν +κανενα +κανεναν +κανενας +κανενος +καποια +καποιαν +καποιας +καποιες +καποιο +καποιοι +καποιον +καποιος +καποιου +καποιους +καποιων +καποτε +καπου +καπως +κατ +κατά +κατα +κατι +κατιτι +κατοπιν +κατω +κατὰ +καὶ +κι +κιολας +κλπ +κοντα +κτλ +κυριως +κἀν +κἂν +λιγακι +λιγο +λιγωτερο +λογω +λοιπα +λοιπον +μέν +μέσα +μή +μήτε +μία +μα +μαζι +μακαρι +μακρυα +μαλιστα +μαλλον +μας +με +μεθ +μεθαυριο +μειον +μελει +μελλεται +μεμιας +μεν +μερικα +μερικες +μερικοι +μερικους +μερικων +μεσα +μετ +μετά +μετα +μεταξυ +μετὰ +μεχρι +μη +μην +μηπως +μητε +μη∆ε +μιά +μια +μιαν +μιας +μολις +μολονοτι +μοναχα +μονες +μονη +μονην +μονης +μονο +μονοι +μονομιας +μονος +μονου +μονους +μονων +μου +μπορει +μπορουν +μπραβο +μπρος +μἐν +μὲν +μὴ +μὴν +να +ναι +νωρις +ξανα +ξαφνικα +ο +οι +ολα +ολες +ολη +ολην +ολης +ολο +ολογυρα +ολοι +ολον +ολονεν +ολος +ολοτελα +ολου +ολους +ολων +ολως +ολως∆ιολου +ομως +ομωσ +οποια +οποιαν +οποιαν∆ηποτε +οποιας +οποιας∆ηποτε +οποια∆ηποτε +οποιες +οποιες∆ηποτε +οποιο +οποιοι +οποιον +οποιον∆ηποτε +οποιος +οποιος∆ηποτε +οποιου +οποιους +οποιους∆ηποτε +οποιου∆ηποτε +οποιο∆ηποτε +οποιων +οποιων∆ηποτε +οποι∆ηποτε +οποτε +οποτε∆ηποτε +οπου +οπου∆ηποτε +οπως +οπωσ +ορισμενα +ορισμενες +ορισμενων +ορισμενως +οσα +οσα∆ηποτε +οσες +οσες∆ηποτε +οση +οσην +οσην∆ηποτε +οσης +οσης∆ηποτε +οση∆ηποτε +οσο +οσοι +οσοι∆ηποτε +οσον +οσον∆ηποτε +οσος +οσος∆ηποτε +οσου +οσους +οσους∆ηποτε +οσου∆ηποτε +οσο∆ηποτε +οσων +οσων∆ηποτε +οταν +οτι +οτι∆ηποτε +οτου +ου +ουτε +ου∆ε +οχι +οἱ +οἳ +οἷς +οὐ +οὐδ +οὐδέ +οὐδείσ +οὐδεὶς +οὐδὲ +οὐδὲν +οὐκ +οὐχ +οὐχὶ +οὓς +οὔτε +οὕτω +οὕτως +οὕτωσ +οὖν +οὗ +οὗτος +οὗτοσ +παλι +παντοτε +παντου +παντως +παρ +παρά +παρα +παρὰ +περί +περα +περι +περιπου +περισσοτερο +περσι +περυσι +περὶ +πια +πιθανον +πιο +πισω +πλαι +πλεον +πλην +ποια +ποιαν +ποιας +ποιες +ποιεσ +ποιο +ποιοι +ποιον +ποιος +ποιοσ +ποιου +ποιους +ποιουσ +ποιων +πολυ +ποσες +ποση +ποσην +ποσης +ποσοι +ποσος +ποσους +ποτε +που +πουθε +πουθενα +ποῦ +πρεπει +πριν +προ +προκειμενου +προκειται +προπερσι +προς +προσ +προτου +προχθες +προχτες +πρωτυτερα +πρόσ +πρὸ +πρὸς +πως +πωσ +σαν +σας +σε +σεις +σημερα +σιγα +σου +στα +στη +στην +στης +στις +στο +στον +στου +στους +στων +συγχρονως +συν +συναμα +συνεπως +συνηθως +συχνα +συχνας +συχνες +συχνη +συχνην +συχνης +συχνο +συχνοι +συχνον +συχνος +συχνου +συχνους +συχνων +συχνως +σχε∆ον +σωστα +σόσ +σύ +σύν +σὸς +σὺ +σὺν +τά +τήν +τί +τίς +τίσ +τα +ταυτα +ταυτες +ταυτη +ταυτην +ταυτης +ταυτο,ταυτον +ταυτος +ταυτου +ταυτων +ταχα +ταχατε +ταῖς +τα∆ε +τε +τελικα +τελικως +τες +τετοια +τετοιαν +τετοιας +τετοιες +τετοιο +τετοιοι +τετοιον +τετοιος +τετοιου +τετοιους +τετοιων +τη +την +της +τησ +τι +τινα +τιποτα +τιποτε +τις +τισ +το +τοί +τοι +τοιοῦτος +τοιοῦτοσ +τον +τος +τοσα +τοσες +τοση +τοσην +τοσης +τοσο +τοσοι +τοσον +τοσος +τοσου +τοσους +τοσων +τοτε +του +τουλαχιστο +τουλαχιστον +τους +τουτα +τουτες +τουτη +τουτην +τουτης +τουτο +τουτοι +τουτοις +τουτον +τουτος +τουτου +τουτους +τουτων +τούσ +τοὺς +τοῖς +τοῦ +τυχον +των +τωρα +τό +τόν +τότε +τὰ +τὰς +τὴν +τὸ +τὸν +τῆς +τῆσ +τῇ +τῶν +τῷ +υπ +υπερ +υπο +υποψη +υποψιν +υπό +υστερα +φετος +χαμηλα +χθες +χτες +χωρις +χωριστα +ψηλα +ω +ωραια +ως +ωσ +ωσαν +ωσοτου +ωσπου +ωστε +ωστοσο +ωχ +ἀλλ' +ἀλλά +ἀλλὰ +ἀλλ’ +ἀπ +ἀπό +ἀπὸ +ἀφ +ἂν +ἃ +ἄλλος +ἄλλοσ +ἄν +ἄρα +ἅμα +ἐάν +ἐγώ +ἐγὼ +ἐκ +ἐμόσ +ἐμὸς +ἐν +ἐξ +ἐπί +ἐπεὶ +ἐπὶ +ἐστι +ἐφ +ἐὰν +ἑαυτοῦ +ἔτι +ἡ +ἢ +ἣ +ἤ +ἥ +ἧς +ἵνα +ὁ +ὃ +ὃν +ὃς +ὅ +ὅδε +ὅθεν +ὅπερ +ὅς +ὅσ +ὅστις +ὅστισ +ὅτε +ὅτι +ὑμόσ +ὑπ +ὑπέρ +ὑπό +ὑπὲρ +ὑπὸ +ὡς +ὡσ +ὥς +ὥστε +ὦ +ᾧ +∆α +∆ε +∆εινα +∆εν +∆εξια +∆ηθεν +∆ηλα∆η +∆ι +∆ια +∆ιαρκως +∆ικα +∆ικο +∆ικοι +∆ικος +∆ικου +∆ικους +∆ιολου +∆ιπλα +∆ιχως \ No newline at end of file diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java index 8657b5804..0487e5b16 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java @@ -2,12 +2,15 @@ package eu.dnetlib.pace.clustering; import com.google.common.collect.Lists; import com.google.common.collect.Maps; +import com.google.common.collect.Sets; import eu.dnetlib.pace.AbstractPaceTest; import eu.dnetlib.pace.common.AbstractPaceFunctions; import eu.dnetlib.pace.config.DedupConfig; import org.junit.jupiter.api.*; import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; public class ClusteringFunctionTest extends AbstractPaceTest { @@ -187,5 +190,14 @@ public class ClusteringFunctionTest extends AbstractPaceTest { System.out.println("s5 = " + s5); System.out.println(cf.apply(conf, Lists.newArrayList(title(s5)))); + final String s6 = "National and Kapodistrian University of Athens"; + System.out.println("s6 = " + s6); + System.out.println(cf.apply(conf, Lists.newArrayList(title(s6)))); + + final String s7 = "Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών"; + System.out.println("s7 = " + s7); + System.out.println(cf.apply(conf, Lists.newArrayList(title(s7)))); + } + } From bd919ac98d9adb872d0d3ad7622f69c3fbc2924c Mon Sep 17 00:00:00 2001 From: miconis Date: Tue, 15 Mar 2022 15:06:12 +0100 Subject: [PATCH 178/449] [maven-release-plugin] prepare release dnet-dedup-4.1.12 --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index e4711b742..de4254497 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 4.1.12-SNAPSHOT + 4.1.12 ../pom.xml From 10172553ab6d0cc27e3b82e2e89af298d7d334a6 Mon Sep 17 00:00:00 2001 From: miconis Date: Tue, 15 Mar 2022 15:06:18 +0100 Subject: [PATCH 179/449] [maven-release-plugin] prepare for next development iteration --- dnet-pace-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml index de4254497..567420bb3 100644 --- a/dnet-pace-core/pom.xml +++ b/dnet-pace-core/pom.xml @@ -6,7 +6,7 @@ eu.dnetlib dnet-dedup - 4.1.12 + 4.1.13-SNAPSHOT ../pom.xml From 97a32faf9bf82a1b3137203a871373c9f06daa8b Mon Sep 17 00:00:00 2001 From: miconis Date: Wed, 13 Apr 2022 09:48:56 +0200 Subject: [PATCH 180/449] test implementation for the new fdup version --- .../pace/util/BlockProcessorForTesting.java | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessorForTesting.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessorForTesting.java index a6bef3f3c..e3ce6a918 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessorForTesting.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessorForTesting.java @@ -182,34 +182,40 @@ public class BlockProcessorForTesting { private boolean publicationCompare(MapDocument a, MapDocument b, DedupConfig config) { - double score = 0.0; - //LAYER 1 - comparison of the PIDs json lists + boolean startLayer = false; + boolean hardcheck1Layer = false; + + //START - comparison of the PIDs json lists Map params = new HashMap<>(); params.put("jpath_value", "$.value"); params.put("jpath_classid", "$.qualifier.classid"); JsonListMatch jsonListMatch = new JsonListMatch(params); double result = jsonListMatch.compare(a.getFieldMap().get("pid"), b.getFieldMap().get("pid"), config); if (result >= 0.5) //if the result of the comparison is greater than the threshold - score += 10.0; //high score because it should match when the first condition is satisfied - else - score += 0.0; + startLayer = true; - //LAYER 2 - comparison of the title version and the size of the authors lists + //HARDCHECK1 - comparison of title versions and authors size TitleVersionMatch titleVersionMatch = new TitleVersionMatch(params); double result1 = titleVersionMatch.compare(a.getFieldMap().get("title"), b.getFieldMap().get("title"), config); SizeMatch sizeMatch = new SizeMatch(params); double result2 = sizeMatch.compare(a.getFieldMap().get("authors"), b.getFieldMap().get("authors"), config); if (Math.min(result1, result2) != 0) - score+=0; - else - score-=2; + hardcheck1Layer = true; - //LAYER 3 - computation of levenshtein on titles + //SOFTCHECK and HARDCHECK2 - comparison of the titles LevensteinTitle levensteinTitle = new LevensteinTitle(params); double result3 = levensteinTitle.compare(a.getFieldMap().get("title"), b.getFieldMap().get("title"), config); - score += Double.isNaN(result3)?0.0:result3; + double titleScore = Double.isNaN(result3)?0.0:result3; - return score >= 0.99; + if (startLayer) { + return titleScore >= 0.90; + } + else { + if (hardcheck1Layer) { + return titleScore >= 0.99; + } + } + return false; } private void emitOutput(final boolean result, final String idPivot, final String idCurr, final Reporter context) { From 9ddd24ba363a4cc6c6f3373f8466c69bfed88e31 Mon Sep 17 00:00:00 2001 From: miconis Date: Tue, 19 Apr 2022 10:18:09 +0200 Subject: [PATCH 181/449] implementation of comparators and clustering function for the author deduplication --- .../dnetlib/pace/clustering/PersonHash.java | 2 +- .../dnetlib/pace/tree/NumbersComparator.java | 34 ++++++ .../pace/tree/support/TreeNodeDef.java | 5 +- .../clustering/ClusteringFunctionTest.java | 30 +++++- .../pace/comparators/ComparatorTest.java | 5 + .../eu/dnetlib/pace/config/ConfigTest.java | 15 ++- .../eu/dnetlib/pace/config/author.json | 1 + .../dnetlib/pace/config/author.test.conf.json | 102 ++++++++++++++++++ 8 files changed, 190 insertions(+), 4 deletions(-) create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/NumbersComparator.java create mode 100644 dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/author.json create mode 100644 dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/author.test.conf.json diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonHash.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonHash.java index 2020a662f..f6c4fe07f 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonHash.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonHash.java @@ -9,7 +9,7 @@ import com.google.common.collect.Lists; import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.model.Person; -@ClusteringClass("personhash") +@ClusteringClass("personHash") public class PersonHash extends AbstractClusteringFunction { private boolean DEFAULT_AGGRESSIVE = false; diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/NumbersComparator.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/NumbersComparator.java new file mode 100644 index 000000000..ac6d78403 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/NumbersComparator.java @@ -0,0 +1,34 @@ +package eu.dnetlib.pace.tree; + +import eu.dnetlib.pace.config.Config; +import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.ComparatorClass; + +import java.util.Map; + +@ComparatorClass("numbersComparator") +public class NumbersComparator extends AbstractComparator { + + Map params; + + public NumbersComparator(Map params) { + super(params); + this.params = params; + } + + @Override + public double distance(String a, String b, Config conf) { + + //extracts numbers from the field + String numbers1 = getNumbers(nfd(a)); + String numbers2 = getNumbers(nfd(b)); + + if (numbers1.isEmpty() || numbers2.isEmpty()) + return -1.0; + + int n1 = Integer.parseInt(numbers1); + int n2 = Integer.parseInt(numbers2); + + return Math.abs(n1 - n2); + } +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java index 43b3a9276..f7ebe96d1 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java @@ -1,5 +1,6 @@ package eu.dnetlib.pace.tree.support; +import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.config.PaceConfig; @@ -9,6 +10,7 @@ import org.apache.commons.lang3.StringUtils; import java.io.IOException; import java.io.Serializable; +import java.io.StringWriter; import java.util.List; public class TreeNodeDef implements Serializable { @@ -57,8 +59,9 @@ public class TreeNodeDef implements Serializable { double result2 = comparator(fieldConf).compare(doc1.getFieldMap().get(crossField), doc2.getFieldMap().get(fieldConf.getField()), conf); result = Math.max(result1,result2); } - else + else { result = comparator(fieldConf).compare(doc1.getFieldMap().get(fieldConf.getField()), doc2.getFieldMap().get(fieldConf.getField()), conf); + } stats.addFieldStats( fieldConf.getComparator() + " on " + fieldConf.getField() + " " + fields.indexOf(fieldConf), diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java index 0487e5b16..8d41a3760 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java @@ -200,4 +200,32 @@ public class ClusteringFunctionTest extends AbstractPaceTest { } -} + @Test + public void testPersonClustering(){ + + final ClusteringFunction cf = new PersonClustering(params); + final String s = "Abd-Alla, Abo-el-nour N."; + System.out.println("s = " + s); + System.out.println(cf.apply(conf, Lists.newArrayList(title(s)))); + + final String s1 = "Manghi, Paolo"; + System.out.println("s1 = " + s1); + System.out.println(cf.apply(conf, Lists.newArrayList(title(s1)))); + + } + + @Test + public void testPersonHash(){ + + final ClusteringFunction cf = new PersonHash(params); + final String s = "Manghi, Paolo"; + System.out.println("s = " + s); + System.out.println(cf.apply(conf, Lists.newArrayList(title(s)))); + + final String s1 = "Manghi, P."; + System.out.println("s = " + s1); + System.out.println(cf.apply(conf, Lists.newArrayList(title(s1)))); + + } + +} \ No newline at end of file diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java index f4eee93e0..749802f0d 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java @@ -9,6 +9,7 @@ import eu.dnetlib.pace.config.DedupConfig; import org.junit.jupiter.api.*; import static org.junit.jupiter.api.Assertions.assertEquals; +import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.Map; @@ -246,6 +247,10 @@ public class ComparatorTest extends AbstractPaceTest { assertEquals(0.25, result); + Field f = createFieldList(new ArrayList<>(), "authors"); + result = authorsMatch.compare(f,f, conf); + System.out.println("result = " + result); + } @Test diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java index 879e5724c..56d8530be 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java @@ -85,7 +85,7 @@ public class ConfigTest extends AbstractPaceTest { } @Test - public void asMapDocumentTest() { + public void asMapDocumentTest1() { DedupConfig dedupConf = DedupConfig.load(readFromClasspath("publication.current.conf.json")); @@ -103,6 +103,19 @@ public class ConfigTest extends AbstractPaceTest { } + @Test + public void asMapDocumentTest2() { + + DedupConfig dedupConf = DedupConfig.load(readFromClasspath("author.test.conf.json")); + + final String json = readFromClasspath("author.json"); + + final MapDocument mapDocument = MapDocumentUtil.asMapDocumentWithJPath(dedupConf, json); + + System.out.println("mapDocument = " + mapDocument.getFieldMap().get("coauthors").stringValue()); + + } + @Test public void testJPath() { final String json = readFromClasspath("organization.json"); diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/author.json b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/author.json new file mode 100644 index 000000000..62c6e9185 --- /dev/null +++ b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/author.json @@ -0,0 +1 @@ +{"id": "f3389e7c8af1d806c06e2ab51f28a4b4", "name": "Aczél, János", "shortname": "Aczél, J.", "pid": "aczel.janos", "coauthors": [], "publication": {"year": "1955", "title": "L\\\"osung der Vektor-Funktionalgleichung der homogenen und inhomogenen $n$-dimensionalen einparametrigen ``Translation'' der erzeugenden Funktion von Kettenreaktionen und des station\\\"aren und nichtstation\\\"aren Bewegungsintegrals", "venue": "Acta Math. Acad. Sci. Hung. 6, 131-140 (1955)."}} \ No newline at end of file diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/author.test.conf.json b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/author.test.conf.json new file mode 100644 index 000000000..0ac29f875 --- /dev/null +++ b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/author.test.conf.json @@ -0,0 +1,102 @@ +{ + "wf": { + "threshold": "0.99", + "dedupRun": "001", + "entityType": "author", + "subEntityType": "author", + "subEntityValue": "author", + "orderField": "fullname", + "queueMaxSize": "200", + "groupMaxSize": "100", + "maxChildren": "100", + "slidingWindowSize": "50", + "rootBuilder": [ + "result", + "resultProject_outcome_isProducedBy", + "resultResult_publicationDataset_isRelatedTo", + "resultResult_similarity_isAmongTopNSimilarDocuments", + "resultResult_similarity_hasAmongTopNSimilarDocuments", + "resultOrganization_affiliation_isAffiliatedWith", + "resultResult_part_hasPart", + "resultResult_part_isPartOf", + "resultResult_supplement_isSupplementTo", + "resultResult_supplement_isSupplementedBy", + "resultResult_version_isVersionOf" + ], + "includeChildren": "true", + "maxIterations": 20, + "idPath": "$.id" + }, + "pace": { + "clustering" : [ + { "name" : "personClustering", "fields" : [ "fullname" ], "params" : {} }, + { "name" : "personHash", "fields" : [ "fullname" ], "params" : {} } + ], + "decisionTree": { + "start": { + "fields": [ + { + "field": "year", + "comparator": "numbersComparator", + "weight": 1, + "countIfUndefined": "false", + "params": {} + } + ], + "threshold": 50, + "aggregation": "MAX", + "positive": "NO_MATCH", + "negative": "surnames", + "undefined": "surnames", + "ignoreUndefined": "true" + }, + "surnames": { + "fields": [ + { + "field": "coauthors", + "comparator": "authorsMatch", + "weight": 1.0, + "countIfUndefined": "false", + "params": { + "surname_th": 0.75, + "fullname_th": 0.75, + "size_th": 20, + "mode": "surname" + } + } + ], + "threshold": 0.6, + "aggregation": "MAX", + "positive": "MATCH", + "negative": "NO_MATCH", + "undefined": "MATCH", + "ignoreUndefined": "true" + } + }, + "model": [ + { + "name": "fullname", + "type": "String", + "path": "$.name" + }, + { + "name": "coauthors", + "type": "List", + "path": "$.coauthors[*].name", + "size": 200 + }, + { + "name": "year", + "type": "String", + "path": "$.publication.year" + }, + { + "name": "title", + "type": "String", + "path": "$.publication.title" + } + ], + "blacklists": {}, + "synonyms": {} + } +} \ No newline at end of file From 9fee2ed611258909087bc80293f817d9ee3069d9 Mon Sep 17 00:00:00 2001 From: "michele.debonis" Date: Mon, 21 Nov 2022 14:35:46 +0100 Subject: [PATCH 182/449] minor changes --- .../dnetlib/pace/tree/DomainExactMatch.java | 1 + .../pace/util/BlockProcessorForTesting.java | 74 ++++++++++--------- .../clustering/ClusteringFunctionTest.java | 5 ++ .../pace/comparators/ComparatorTest.java | 12 +++ 4 files changed, 57 insertions(+), 35 deletions(-) diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/DomainExactMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/DomainExactMatch.java index e2eb0cd71..958028e8a 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/DomainExactMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/DomainExactMatch.java @@ -16,6 +16,7 @@ public class DomainExactMatch extends ExactMatchIgnoreCase { @Override protected String getValue(final Field f) { + try { return asUrl(super.getValue(f)).getHost(); } catch (MalformedURLException e) { diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessorForTesting.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessorForTesting.java index e3ce6a918..174c5c17e 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessorForTesting.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessorForTesting.java @@ -161,11 +161,14 @@ public class BlockProcessorForTesting { } else { //use the decision tree implementation or the "normal" implementation of the similarity score (valid only for publications) - if(useTree) + if (useTree) emitOutput(new TreeProcessor(dedupConf).compare(pivot, curr), idPivot, idCurr, context); else emitOutput(publicationCompare(pivot, curr, dedupConf), idPivot, idCurr, context); } +// if(new TreeProcessor(dedupConf).compare(pivot, curr) != publicationCompare(pivot, curr, dedupConf)) { +// emitOutput(true, idPivot, idCurr, context); +// } } } @@ -180,44 +183,45 @@ public class BlockProcessorForTesting { return compare>=1.0; } - private boolean publicationCompare(MapDocument a, MapDocument b, DedupConfig config) { + private boolean publicationCompare(MapDocument a, MapDocument b, DedupConfig config) { + //if the score gives 1, the publications are equivalent + Map params = new HashMap<>(); + params.put("jpath_value", "$.value"); + params.put("jpath_classid", "$.qualifier.classid"); + params.put("mode", "count"); - boolean startLayer = false; - boolean hardcheck1Layer = false; + double score = 0.0; - //START - comparison of the PIDs json lists - Map params = new HashMap<>(); - params.put("jpath_value", "$.value"); - params.put("jpath_classid", "$.qualifier.classid"); - JsonListMatch jsonListMatch = new JsonListMatch(params); - double result = jsonListMatch.compare(a.getFieldMap().get("pid"), b.getFieldMap().get("pid"), config); - if (result >= 0.5) //if the result of the comparison is greater than the threshold - startLayer = true; - - //HARDCHECK1 - comparison of title versions and authors size - TitleVersionMatch titleVersionMatch = new TitleVersionMatch(params); - double result1 = titleVersionMatch.compare(a.getFieldMap().get("title"), b.getFieldMap().get("title"), config); - SizeMatch sizeMatch = new SizeMatch(params); - double result2 = sizeMatch.compare(a.getFieldMap().get("authors"), b.getFieldMap().get("authors"), config); - if (Math.min(result1, result2) != 0) - hardcheck1Layer = true; - - //SOFTCHECK and HARDCHECK2 - comparison of the titles - LevensteinTitle levensteinTitle = new LevensteinTitle(params); - double result3 = levensteinTitle.compare(a.getFieldMap().get("title"), b.getFieldMap().get("title"), config); - double titleScore = Double.isNaN(result3)?0.0:result3; - - if (startLayer) { - return titleScore >= 0.90; - } - else { - if (hardcheck1Layer) { - return titleScore >= 0.99; - } - } - return false; + //levenstein title + LevensteinTitle levensteinTitle = new LevensteinTitle(params); + if(levensteinTitle.compare(a.getFieldMap().get("title"), b.getFieldMap().get("title"), config) >= 0.9) { + score += 0.2; } + //pid + JsonListMatch jsonListMatch = new JsonListMatch(params); + if (jsonListMatch.compare(a.getFieldMap().get("pid"), b.getFieldMap().get("pid"), config) >= 1.0) { + score += 0.5; + } + + //title version + TitleVersionMatch titleVersionMatch = new TitleVersionMatch(params); + double result1 = titleVersionMatch.compare(a.getFieldMap().get("title"), b.getFieldMap().get("title"), config); + if(result1<0 || result1>=1.0) { + score += 0.1; + } + + //authors match + params.remove("mode"); + AuthorsMatch authorsMatch = new AuthorsMatch(params); + double result2 = authorsMatch.compare(a.getFieldMap().get("authors"), b.getFieldMap().get("authors"), config); + if(result2 <0|| result2>=0.6) { + score += 0.2; + } + + return score>=0.5; + } + private void emitOutput(final boolean result, final String idPivot, final String idCurr, final Reporter context) { if (result) { diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java index 8d41a3760..b84d48d99 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java @@ -103,6 +103,11 @@ public class ClusteringFunctionTest extends AbstractPaceTest { final String s = "Search for the Standard Model Higgs Boson"; System.out.println(s); System.out.println(sp.apply(conf, Lists.newArrayList(title(s)))); + + params.put("len", 3); + params.put("max", 1); + + System.out.println(sp.apply(conf, Lists.newArrayList(title("Framework for general-purpose deduplication")))); } @Test diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java index 749802f0d..b79305b92 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java @@ -272,5 +272,17 @@ public class ComparatorTest extends AbstractPaceTest { assertEquals(1.0, result); } + @Test + public void domainExactMatch() { + + DomainExactMatch domainExactMatch = new DomainExactMatch(params); + Field a = url("http://www.flowrepository.org"); + Field b = url("http://flowrepository.org/"); + + double compare = domainExactMatch.compare(a, b, conf); + System.out.println("compare = " + compare); + + } + } From 14f6346676752061cc9c7590b8bd07ac96ba6b7d Mon Sep 17 00:00:00 2001 From: "michele.debonis" Date: Tue, 22 Nov 2022 17:48:34 +0100 Subject: [PATCH 183/449] implementation of the new software configuration --- .../eu/dnetlib/pace/clustering/ClusteringFunctionTest.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java index b84d48d99..7a1d389bb 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java @@ -153,6 +153,10 @@ public class ClusteringFunctionTest extends AbstractPaceTest { System.out.println(s); System.out.println(sp.apply(conf, Lists.newArrayList(title(s)))); + s = "niivue/niivue: 0.21.1"; + System.out.println(s); + System.out.println(sp.apply(conf, Lists.newArrayList(title(s)))); + } @Test From 6a6c266dde6f9097c82696c8011677955ac8e479 Mon Sep 17 00:00:00 2001 From: miconis Date: Tue, 31 Jan 2023 11:53:10 +0100 Subject: [PATCH 184/449] implementation of author dedup configuration and lnfi clustering function --- .../pace/clustering/LastNameFirstInitial.java | 77 +++++++++++++++++++ .../java/eu/dnetlib/pace/model/Person.java | 2 +- .../clustering/ClusteringFunctionTest.java | 9 +++ .../java/eu/dnetlib/pace/util/UtilTest.java | 5 ++ 4 files changed, 92 insertions(+), 1 deletion(-) create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/LastNameFirstInitial.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/LastNameFirstInitial.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/LastNameFirstInitial.java new file mode 100644 index 000000000..7f86854c2 --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/LastNameFirstInitial.java @@ -0,0 +1,77 @@ +package eu.dnetlib.pace.clustering; + +import com.google.common.collect.Lists; +import eu.dnetlib.pace.config.Config; +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.Person; +import org.apache.commons.lang3.StringUtils; + +import java.util.*; +import java.util.stream.Collectors; + +@ClusteringClass("lnfi") +public class LastNameFirstInitial extends AbstractClusteringFunction{ + + private boolean DEFAULT_AGGRESSIVE = true; + + public LastNameFirstInitial(final Map params) { + super(params); + } + + @Override + public Collection apply(Config conf, List fields) { + return fields.stream().filter(f -> !f.isEmpty()) + .map(Field::stringValue) + .map(this::normalize) + .map(s -> doApply(conf, s)) + .map(c -> filterBlacklisted(c, ngramBlacklist)) + .flatMap(c -> c.stream()) + .filter(StringUtils::isNotBlank) + .collect(Collectors.toCollection(HashSet::new)); + } + + @Override + protected String normalize(final String s) { + return fixAliases(transliterate(nfd(unicodeNormalization(s)))) + // do not compact the regexes in a single expression, would cause StackOverflowError in case of large input strings + .replaceAll("[^ \\w]+", "") + .replaceAll("(\\p{InCombiningDiacriticalMarks})+", "") + .replaceAll("(\\p{Punct})+", " ") + .replaceAll("(\\d)+", " ") + .replaceAll("(\\n)+", " ") + .trim(); + } + + @Override + protected Collection doApply(final Config conf, final String s) { + + final List res = Lists.newArrayList(); + + final boolean aggressive = (Boolean) (getParams().containsKey("aggressive") ? getParams().get("aggressive") : DEFAULT_AGGRESSIVE); + + Person p = new Person(s, aggressive); + + if (p.isAccurate()) { + String lastName = p.getNormalisedSurname().toLowerCase(); + String firstInitial = p.getNormalisedFirstName().toLowerCase().substring(0,1); + + res.add(firstInitial.concat(lastName)); + } + else { // is not accurate, meaning it has no defined name and surname + List fullname = Arrays.asList(p.getNormalisedFullname().split(" ")); + if (fullname.size() == 1) { + res.add(p.getNormalisedFullname().toLowerCase()); + } + else if (fullname.size() == 2) { + res.add(fullname.get(0).substring(0,1).concat(fullname.get(1)).toLowerCase()); + res.add(fullname.get(1).substring(0,1).concat(fullname.get(0)).toLowerCase()); + } + else { + res.add(fullname.get(0).substring(0,1).concat(fullname.get(fullname.size()-1)).toLowerCase()); + res.add(fullname.get(fullname.size()-1).substring(0,1).concat(fullname.get(0)).toLowerCase()); + } + } + + return res; + } +} \ No newline at end of file diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/Person.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/Person.java index ec3340672..543b1bdfe 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/Person.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/Person.java @@ -43,7 +43,7 @@ public class Person { // s = s.replaceAll("[\\W&&[^,-]]", ""); } - if (s.contains(",")) { + if (s.contains(",")) { //if the name contains a comma it is easy derivable the name and the surname final String[] arr = s.split(","); if (arr.length == 1) { fullname = splitTerms(arr[0]); diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java index 7a1d389bb..f57daaa32 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java @@ -237,4 +237,13 @@ public class ClusteringFunctionTest extends AbstractPaceTest { } + @Test + public void testLastNameFirstInitial(){ + + final ClusteringFunction cf = new LastNameFirstInitial(params); + final String s = "LI Yonghong"; + System.out.println("s = " + s); + System.out.println(cf.apply(conf, Lists.newArrayList(title(s)))); + } + } \ No newline at end of file diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/util/UtilTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/util/UtilTest.java index 601831e67..1e6053246 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/util/UtilTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/util/UtilTest.java @@ -30,6 +30,11 @@ public class UtilTest { assertEquals("kennedy", p.getSurnameString()); assertEquals("j f", p.getNameString()); + + p = new Person("Guan-Hua Du", false); + + System.out.println("surname = " + p.getSurnameString()); + System.out.println("name = " + p.getNameString()); } } From c6e39b7f334d0fa51c56c302511b697b207b454d Mon Sep 17 00:00:00 2001 From: Serafeim Chatzopoulos Date: Tue, 14 Mar 2023 18:50:54 +0200 Subject: [PATCH 185/449] Add dhp-impact-indicators --- .../dhp-impact-indicators/README.txt | 13 ++++++ dhp-workflows/dhp-impact-indicators/pom.xml | 41 +++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 dhp-workflows/dhp-impact-indicators/README.txt create mode 100644 dhp-workflows/dhp-impact-indicators/pom.xml diff --git a/dhp-workflows/dhp-impact-indicators/README.txt b/dhp-workflows/dhp-impact-indicators/README.txt new file mode 100644 index 000000000..788534c02 --- /dev/null +++ b/dhp-workflows/dhp-impact-indicators/README.txt @@ -0,0 +1,13 @@ + + +## Checkout a specific release of the BIP-Ranker git repository + +* Edit the `scmVersion` of the maven-scm-plugin in the pom.xml to point to the tag/release version you want to check out. + +* Then perform the checkout with: + +``` +mvn scm:checkout +``` + +* The code should be visible under `src/main/bip-ranker` folder. \ No newline at end of file diff --git a/dhp-workflows/dhp-impact-indicators/pom.xml b/dhp-workflows/dhp-impact-indicators/pom.xml new file mode 100644 index 000000000..b827f42a4 --- /dev/null +++ b/dhp-workflows/dhp-impact-indicators/pom.xml @@ -0,0 +1,41 @@ + + + 4.0.0 + + eu.dnetlib.dhp + dhp + 1.2.5-SNAPSHOT + ../pom.xml + + + dhp-impact-indicators + + + 8 + 8 + UTF-8 + + + + https://github.com/athenarc/Bip-Ranker + https://github.com/athenarc/Bip-Ranker.git + + + + + + org.apache.maven.plugins + maven-scm-plugin + 1.8.1 + + connection + 2 + tag + ${project.build.directory}/../src/main/bip-ranker + + + + + \ No newline at end of file From 720fd19b3957bdc4d746778b7ab2fc306c4b2d14 Mon Sep 17 00:00:00 2001 From: Serafeim Chatzopoulos Date: Tue, 14 Mar 2023 19:28:27 +0200 Subject: [PATCH 186/449] Add dhp-impact-indicators workflow files --- dhp-workflows/dhp-impact-indicators/README.md | 23 + .../dhp-impact-indicators/README.txt | 13 - dhp-workflows/dhp-impact-indicators/pom.xml | 6 +- .../create_openaire_ranking_graph.py | 234 ++++++ .../main/resources/format_ranking_results.py | 770 ++++++++++++++++++ .../src/main/resources/get_ranking_files.sh | 14 + .../src/main/resources/job.properties | 86 ++ .../resources/map_openaire_ids_to_dois.py | 60 ++ .../src/main/resources/map_scores_to_dois.py | 145 ++++ .../src/main/resources/workflow.xml | 600 ++++++++++++++ 10 files changed, 1935 insertions(+), 16 deletions(-) create mode 100644 dhp-workflows/dhp-impact-indicators/README.md delete mode 100644 dhp-workflows/dhp-impact-indicators/README.txt create mode 100644 dhp-workflows/dhp-impact-indicators/src/main/resources/create_openaire_ranking_graph.py create mode 100644 dhp-workflows/dhp-impact-indicators/src/main/resources/format_ranking_results.py create mode 100644 dhp-workflows/dhp-impact-indicators/src/main/resources/get_ranking_files.sh create mode 100644 dhp-workflows/dhp-impact-indicators/src/main/resources/job.properties create mode 100644 dhp-workflows/dhp-impact-indicators/src/main/resources/map_openaire_ids_to_dois.py create mode 100644 dhp-workflows/dhp-impact-indicators/src/main/resources/map_scores_to_dois.py create mode 100644 dhp-workflows/dhp-impact-indicators/src/main/resources/workflow.xml diff --git a/dhp-workflows/dhp-impact-indicators/README.md b/dhp-workflows/dhp-impact-indicators/README.md new file mode 100644 index 000000000..14f489da3 --- /dev/null +++ b/dhp-workflows/dhp-impact-indicators/README.md @@ -0,0 +1,23 @@ +# Ranking Workflow for Openaire Publications + +This project contains the files for running a paper ranking workflow on the openaire graph using apache oozie. +All scripts are written in python and the project setup follows the typical oozie workflow structure: + +- a workflow.xml file containing the workflow specification +- a job.properties file specifying parameter values for the parameters used by the workflow +- a set of python scripts used by the workflow + +**NOTE**: the workflow depends on the external library of ranking scripts called BiP! Ranker. +You can check out a specific tag/release of BIP! Ranker using maven, as described in the following section. + +## Check out a specific tag/release of BIP-Ranker + +* Edit the `scmVersion` of the maven-scm-plugin in the pom.xml to point to the tag/release version you want to check out. + +* Then, use maven to perform the checkout: + +``` +mvn scm:checkout +``` + +* The code should be visible under `src/main/bip-ranker` folder. \ No newline at end of file diff --git a/dhp-workflows/dhp-impact-indicators/README.txt b/dhp-workflows/dhp-impact-indicators/README.txt deleted file mode 100644 index 788534c02..000000000 --- a/dhp-workflows/dhp-impact-indicators/README.txt +++ /dev/null @@ -1,13 +0,0 @@ - - -## Checkout a specific release of the BIP-Ranker git repository - -* Edit the `scmVersion` of the maven-scm-plugin in the pom.xml to point to the tag/release version you want to check out. - -* Then perform the checkout with: - -``` -mvn scm:checkout -``` - -* The code should be visible under `src/main/bip-ranker` folder. \ No newline at end of file diff --git a/dhp-workflows/dhp-impact-indicators/pom.xml b/dhp-workflows/dhp-impact-indicators/pom.xml index b827f42a4..b510635a6 100644 --- a/dhp-workflows/dhp-impact-indicators/pom.xml +++ b/dhp-workflows/dhp-impact-indicators/pom.xml @@ -20,7 +20,7 @@ https://github.com/athenarc/Bip-Ranker - https://github.com/athenarc/Bip-Ranker.git + scm:git:https://github.com/athenarc/Bip-Ranker.git @@ -31,8 +31,8 @@ 1.8.1 connection - 2 - tag + tag + v1.0.0 ${project.build.directory}/../src/main/bip-ranker diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/create_openaire_ranking_graph.py b/dhp-workflows/dhp-impact-indicators/src/main/resources/create_openaire_ranking_graph.py new file mode 100644 index 000000000..4cffa86a3 --- /dev/null +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/create_openaire_ranking_graph.py @@ -0,0 +1,234 @@ +#!/usr/bin/python3 + +# Create openaire id - openaire id graph from openaire data + +############################################################################################################# +# Program proceeds as follows: +# 1. We read the input folder provided from hdfs. +# This contains subfolders with openaire graph objects and openaire graph relations +# 2. We select all openaire graph objects of interest. We filter out based on visibility +# and inference criteria. We also filter out based on the availability of publication year +# 3. Get reference type dataframes from openaire. Then filter each one of them based on the +# existence of citing and cited in the above filtered dataset. Get only citations +# produced by publication objects, or otherresearchproducts of types: +# [TBD] +# 4. Get objects that don't appear in the relations (from those gathered in step 1) and add +# them to the graph +# 5. Group relations by citing paper and do graph-specific formatting +############################################################################################################# +# ---------- Imports ------------- # +import sys +# import pyspark +# from pyspark import SparkConf, SparkContext +from pyspark.sql import SparkSession +# Functions to effectively handle data +# manipulation for DataFrames +import pyspark.sql.functions as F +# Diagnostics +from timeit import default_timer as timer +# from datetime import timedelta, datetime +# -------------------------------- # + +if len(sys.argv) < 5: + print ("Usage: ./create_openaire_ranking_graph.py ") + sys.exit(0) + +# Inputs will be: + +# 1. Folder where openaire graph is stored +graph_folder = sys.argv[1] +# 2. Current year (this will be needed for filtering) +current_year = int(sys.argv[2]) +# 3. Number of partitions +num_partitions = int(sys.argv[3]) +# 4. where to write output +output_folder = sys.argv[4] + +# Lists of results types we want to inclued in the citations +# valid_result_types = ['publication', 'other'] +valid_result_types = ['publication'] +# list of types in otherresearchproduct which are considered valid for citations +valid_other = [''] + +# Create the spark session +spark = SparkSession.builder.appName('oa ranking graph creation').getOrCreate() +# Set context level logging to WARN +spark.sparkContext.setLogLevel("WARN") + +############################################################################################################################ +# 1. Get the research objects and filter based on conditions. +# These will also be the unique identifiers we should find in the final graph + +# Initialize an empty dataframe +oa_objects_df = None + +# There is a directory structure on hdfs under the provided path. +# We need to parse data from the folders: ["publication", "dataset", "software", "otherresearchproduct"] +# which are rankable oa result objects. + +# Loop subfolders +for sub_folder in ["publication", "dataset", "software", "otherresearchproduct"]: + # Read the json data of the graph into a dataframe initially + if not oa_objects_df: + oa_objects_df = spark.read.json(graph_folder + "/" + sub_folder).select('id', 'resulttype.classname', 'datainfo.deletedbyinference', 'datainfo.invisible', F.year('dateofacceptance.value').alias('year')) + oa_objects_df = oa_objects_df.where( 'datainfo.deletedbyinference = false' ).where( 'datainfo.invisible = false' ).repartition(num_partitions, 'id').cache() + # If we already have data, simply add more to it + else: + sub_df = spark.read.json(graph_folder + "/" + sub_folder).select('id', 'resulttype.classname','datainfo.deletedbyinference', 'datainfo.invisible', F.year('dateofacceptance.value').alias('year')) + sub_df = sub_df.where( 'datainfo.deletedbyinference = false ' ).where( 'datainfo.invisible = false ').cache() + # Add the data to the openaire objects dataframe + oa_objects_df = oa_objects_df.union(sub_df).repartition(num_partitions, 'id').cache() + # Clear memory + sub_df.unpersist(True) + +# Remove those records without year +oa_objects_df = oa_objects_df.where(F.col('year').isNotNull()) + + +# Now replace years where > (current_year+1) with 0 +oa_objects_df = oa_objects_df.withColumn('clean_year', F.when(F.col('year').cast('int') > (current_year+1), 0).otherwise(F.col('year')))\ + .drop('year').withColumnRenamed('clean_year', 'year').repartition(num_partitions, 'id') + +# -------------------------------------------------------------------- # +''' +# Some diagnostics +print ("Min and max years:" ) +oa_objects_df.select(F.max('year')).show() +oa_objects_df.select(F.min('year')).show() + +# This should be slow due to not repartitioning by year +print ("Distinct years:") +oa_objects_df.select('year').distinct().sort(F.col('year')).show(5000, False) + +# Show distinct values of deletedbyinference and invisible to ensure we have the correct data +print ("Distinct deleted by inference:") +oa_objects_df.select('deletedbyinference').distinct().show() +print ("Distinct invisible values:") +oa_objects_df.select('invisible').distinct().show() + +# Output total count +print ("Total num of research objects: " + str(oa_objects_df.count())) +''' +# -------------------------------------------------------------------- # + +# Keep only required fields - we still keep resulttype.classname to +# filter the citation relationships we consider valid +oa_objects_df = oa_objects_df.drop('deletedbyinference').drop('invisible').distinct().cache() +############################################################################################################################ +# 2. Get the relation objects and filter them based on their existence in the oa_objects_df +# NOTE: we are only interested in citations of type "cites" +# Further, we + +# Deprecated line +# references_df = spark.read.json(graph_folder + "/relation").select(F.col('source').alias('citing'), F.col('target').alias('cited'), 'relClass')\ +# .where( 'relClass = "References"' ).repartition(num_partitions, 'citing').drop('relClass') +# print ("References df has: " + str(references_df.count()) + " entries") + +# Collect only valid citations i.e., invisible = false & deletedbyinference=false +cites_df = spark.read.json(graph_folder + "/relation")\ + .select(F.col('source').alias('citing'), F.col('target').alias('cited'), 'relClass', 'dataInfo.deletedbyinference', 'dataInfo.invisible')\ + .where( (F.col('relClass') == "Cites") \ + & (F.col('dataInfo.deletedbyinference') == "false")\ + & (F.col('dataInfo.invisible') == "false"))\ + .drop('dataInfo.deletedbyinference').drop('dataInfo.invisible')\ + .repartition(num_partitions, 'citing').drop('relClass') +# print ("Cited df has: " + str(cites_df.count()) + " entries") + +# DEPRECATED +# cited_by_df = spark.read.json(graph_folder + "/relation").select(F.col('target').alias('citing'), F.col('source').alias('cited'), 'relClass')\ +# .where( 'relClass = "IsCitedBy"' ).repartition(num_partitions, 'citing').drop('relClass') +# print ("Cited by df has: " + str(cited_by_df.count()) + " entries") + +# DEPRECATED +# Keep only relations where citing and cited are in the oa_objects_df +# references_df = references_df.join(oa_objects_df.select('id'), references_df.citing == oa_objects_df.id).drop('id') +# references_df = references_df.repartition(num_partitions, 'cited').join(oa_objects_df.select('id'), references_df.cited == oa_objects_df.id).drop('id').distinct().repartition(num_partitions, 'citing').cache() +# print ("References df now has: " + str(references_df.count()) + " entries") + +cites_df = cites_df.join(oa_objects_df.select('id'), cites_df.citing == oa_objects_df.id).where( F.col('resulttype.classname').isin(valid_result_types) ).drop('id').drop('resulttype.classname') +cites_df = cites_df.repartition(num_partitions, 'cited').join(oa_objects_df.select('id'), cites_df.cited == oa_objects_df.id).drop('id').drop('resulttype.classname').distinct().repartition(num_partitions, 'citing').cache() +# TODO: add here a clause filtering out the citations +# originating from "other" types of research objects which we consider valid + +# print ("Cites df now has: " + str(cites_df.count()) + " entries") + +# DEPRECATED +# cited_by_df = cited_by_df.join(oa_objects_df.select('id'), cited_by_df.citing == oa_objects_df.id).drop('id') +# cited_by_df = cited_by_df.repartition(num_partitions, 'cited').join(oa_objects_df.select('id'), cited_by_df.cited == oa_objects_df.id).drop('id').distinct().repartition(num_partitions, 'citing').cache() +# print ("Cited BY df now has: " + str(cited_by_df.count()) + " entries") + +# DEPRECATED +# Join all the above into a single set +# citations_df = references_df.union(cites_df).distinct().repartition(num_partitions, 'citing').cache() +# Free space +# references_df.unpersist(True) +# cites_df.unpersist(True) + +# citations_df = citations_df.union(cited_by_df).distinct().repartition(num_partitions, 'citing').cache() + +# ALL citations we keep are in the cited_df dataframe +citations_df = cites_df + +''' +# Show schema +print ("Citation schema:") +citations_df.printSchema() +print ("Objects schema:") +oa_objects_df.printSchema() +''' + +# Free space +# cited_by_df.unpersist(True) + +# Show total num of unique citations +num_unique_citations = citations_df.count() +print ("Total unique citations: " + str(num_unique_citations)) +############################################################################################################################ +# 3. Get any potentially missing 'citing' papers from references (these are dangling nodes w/o any outgoing references) +dangling_nodes = oa_objects_df.join(citations_df.select('citing').distinct(), citations_df.citing == oa_objects_df.id, 'left_anti')\ + .select(F.col('id').alias('citing')).withColumn('cited', F.array([F.lit("0")])).repartition(num_partitions, 'citing') +# Count dangling nodes +dangling_num = dangling_nodes.count() +print ("Number of dangling nodes: " + str(dangling_num)) +# print ("Dangling nodes sample:") +# dangling_nodes.show(10, False) +############################################################################################################################ +# 4. Group the citation dataframe by citing doi, and create the cited dois list. Add dangling nodes to the result +graph = citations_df.groupBy('citing').agg(F.collect_set('cited').alias('cited')).repartition(num_partitions, 'citing').cache() +# Free space +citations_df.unpersist(True) + +num_nodes = graph.count() +print ("Entries in graph before dangling nodes:" + str(num_nodes)) +# print ("Sample in graph: ") +# graph.show(10, False) + +# Add dangling nodes +graph = graph.union(dangling_nodes).repartition(num_partitions, 'citing') +# Count current number of results +num_nodes = graph.count() +print ("Num entries after adding dangling nodes: " + str(num_nodes)) + +# Add publication year +graph = graph.join(oa_objects_df, graph.citing == oa_objects_df.id).select('citing', 'cited', 'year').cache() +num_nodes_final = graph.count() +print ("After adding year: " + str(num_nodes_final)) +# print ("Graph sample:") +# graph.show(20, False) +# Calculate initial score of nodes (1/N) +initial_score = float(1)/float(num_nodes_final) +############################################################################################################################ +# 5. Write graph to output file! +print("Writing output to: " + output_folder) + +graph.select('citing', F.concat_ws("|", F.concat_ws(",",'cited'), F.when(F.col('cited').getItem(1) != "0", F.size('cited')).otherwise(F.lit("0")), F.lit(str(initial_score)) ).alias('cited'), 'year').withColumn('prev_pr', F.lit("0")).select('citing', 'cited', 'prev_pr', 'year')\ + .write.mode("overwrite").option("delimiter","\t").csv(output_folder, compression="gzip") + +if num_nodes_final != num_nodes: + print ("WARNING: the number of nodes after keeping only nodes where year is available went from: " + str(num_nodes) + " to " + str(num_nodes_final) + "\n") + print ("Check for any mistakes...") + +############################################################################################################################ +print ("\nDONE!\n\n") +# Wrap up +spark.stop() diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/format_ranking_results.py b/dhp-workflows/dhp-impact-indicators/src/main/resources/format_ranking_results.py new file mode 100644 index 000000000..60c71e52f --- /dev/null +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/format_ranking_results.py @@ -0,0 +1,770 @@ +# This program reads hdfs directories containing ranking results from openaire's cluster. +# Based on the parameters provided by the user, it will create different types of output files. + +# Modes available are: +# 1. bip +# This will result in output of the form required for bip-finder's update. +# Its lines conform to the following format: +# \t \t \t \t \t \t \t <3y_cc> \t <3y_cc_normalized> \t \t + +# 2. zenodo +# This is the format used in zenodo for Bip-DB. (6 way classes will be named C1, C2, ..., C6) +# This should output two files per ranking method with each line having the following data: +# a. <6-way-class> +# NOTE: this should also run for openaire-id files, hence we should have a total of 4 files per ranking (2 for each type of identifier) +# In 'zenodo' mode the user specifies only a single file, for which zenodo-based output will be created + +# 3. json +# This if the format used to provide openAIRE / claudio with data containing 1 json per identifier +# An example of such a json format follows: +#{ +# "50|dedup_wf_001::08823c8f5c3ca2eae523817036cdda67": [ +# { +# "id": "influence", +# "unit": [ +# { +# "key": "score", +# "value": "5.06690394631e-09" +# }, +# { +# "key": "class", +# "value": "C" +# } +# ] +# }, +# { +# "id": "popularity_alt", +# "unit": [ +# { +# "key": "score", +# "value": "0.0" +# }, +# { +# "key": "class", +# "value": "C" +# } +# ] +# }, +# { +# "id": "popularity", +# "unit": [ +# { +# "key": "score", +# "value": "3.11855618382e-09" +# }, +# { +# "key": "class", +# "value": "C" +# } +# ] +# }, +# { +# "id": "influence_alt", +# "unit": [ +# { +# "key": "score", +# "value": "0.0" +# }, +# { +# "key": "class", +# "value": "C" +# } +# ] +# }, +# { +# "id": "impulse", +# "unit": [ +# { +# "key": "score", +# "value": "0.0" +# }, +# { +# "key": "class", +# "value": "C" +# } +# ] +# } +# ] +#} + + +################################################################################################# +# Imports +import sys +import time + +# Sparksession lib to communicate with cluster via session object +from pyspark.sql import SparkSession + +# Import sql types to define the schema of score output files +from pyspark.sql.types import * + +# Import sql functions with shorthand alias +import pyspark.sql.functions as F +from pyspark.sql.functions import udf + +# Json specific encoding +import json +################################################################################################# +# Clean up directory name +def clean_directory_name(dir_name): + # We have a name with the form *_bip_universe_* or *_graph_universe_* + # and we need to keep the parts in * + dir_name_parts = dir_name.split('_') + dir_name_parts = [part for part in dir_name_parts if ('bip' not in part and 'graph' not in part and 'universe' not in part and 'from' not in part)] + + clean_name = '_'.join(dir_name_parts) + clean_name = clean_name.replace('_id', '_ids') + + clean_name = clean_name.replace('.txt', '') + clean_name = clean_name.replace('.gz', '') + + if 'openaire_ids_' in clean_name: + clean_name = clean_name.replace('openaire_ids_', '') + clean_name = clean_name + '_openaire_ids.txt.gz' + else: + clean_name = clean_name + '.txt.gz/' + + return clean_name +# --------------------------------------------------------------------------------------------- # +# User defined function to escape special characters in a string that will turn into a json key +@udf(StringType()) +def json_encode_key(doi_string): + return json.dumps(doi_string) +################################################################################################# +# --------------------------------------------------------------------------------------------- # +# Arguments from command line and initializations + +# Time initialization +start_time = time.time() + +# Check whether input is correct, otherwise exit with appropriate message +if len(sys.argv) < 2: + print ("Usage: ./format_ranking_results.py ") + sys.exit(0) + +# Define valid modes: +valid_modes = ['json', 'zenodo', 'bip', 'json-5-way'] +# Read mode provided by user +mode = sys.argv[1].strip() + +# If mode isn't valid, exit +if mode not in valid_modes: + print ("Usage: ./format_ranking_results.py \n") + print ("Invalid mode provided. Valid modes: ['zenodo', 'bip', 'json', 'json-5-way']") + sys.exit(0) + + +# Once here, we should be more or less okay to run. + +# Define the spark session object +spark = SparkSession.builder.appName('Parse Scores - ' + str(mode) + ' mode').getOrCreate() +# Set Log Level for spark session +spark.sparkContext.setLogLevel('WARN') + +# Here we define the schema shared by all score output files +# - citation count variants have a slightly different schema, due to their scores being integers +float_schema = StructType([ + StructField('id', StringType(), False), + StructField('score', FloatType(), False), + StructField('normalized_score', FloatType(), False), + StructField('3-way-class', StringType(), False), + StructField('5-way-class', StringType(), False) + ]) + +int_schema = StructType([ + StructField('id', StringType(), False), + StructField('score', IntegerType(), False), + StructField('normalized_score', FloatType(), False), + StructField('3-way-class', StringType(), False), + StructField('5-way-class', StringType(), False) + ]) + +# This schema concerns the output of the file +# containing the number of references of each doi +refs_schema = StructType([ + StructField('id', StringType(), False), + StructField('num_refs', IntegerType(), False), + ]) + +print("--- Initialization time: %s seconds ---" % (time.time() - start_time)) + +# --------------------------------------------------------------------------------------------- # + +# Time the main program execution +start_time = time.time() + +# The following is executed when the user requests the bip-update specific file +if mode == 'bip': + + # Read the remaining input files + if len(sys.argv) < 8: + print ("\n\nInsufficient input for 'bip' mode.") + print ("File list required: <3-year citation count> \n") + sys.exit(0) + + + # Read number of partitions: + num_partitions = int(sys.argv[-1]) + + + pagerank_dir = sys.argv[2] + attrank_dir = sys.argv[3] + cc_dir = sys.argv[4] + impulse_dir = sys.argv[5] + ram_dir = sys.argv[6] + refs_dir = sys.argv[7] + + # Score-specific dataframe + pagerank_df = spark.read.schema(float_schema).option('delimiter', '\t').option('header',True).csv(pagerank_dir).repartition(num_partitions, 'id') + attrank_df = spark.read.schema(float_schema).option('delimiter', '\t').option('header',True).csv(attrank_dir).repartition(num_partitions, 'id') + cc_df = spark.read.schema(int_schema).option('delimiter', '\t').option('header',True).csv(cc_dir).repartition(num_partitions, 'id') + impulse_df = spark.read.schema(int_schema).option('delimiter', '\t').option('header',True).csv(impulse_dir).repartition(num_partitions, 'id') + ram_df = spark.read.schema(float_schema).option('delimiter', '\t').option('header', True).csv(ram_dir).repartition(num_partitions, 'id') + refs_df = spark.read.schema(refs_schema).option('delimiter', '\t').option('header',True).csv(refs_dir).repartition(num_partitions, 'id') + + # ----------- TESTING CODE --------------- # + # pagerank_entries = pagerank_df.count() + # attrank_entries = attrank_df.count() + # cc_entries = cc_df.count() + # impulse_entries = impulse_df.count() + # ram_entries = ram_df.count() + # refs_entries = refs_df.count() + + # print ("Pagerank:" + str(pagerank_entries)) + # print ("AttRank:" + str(attrank_entries)) + # print ("CC entries: " + str(cc_entries)) + # print ("Impulse entries: " + str(impulse_entries)) + # print ("Refs: " + str(refs_entries)) + # ---------------------------------------- # + + # Create a new dataframe with the required data + results_df = pagerank_df.select('id', F.col('score').alias('pagerank'), F.col('normalized_score').alias('pagerank_normalized')) + # Add attrank dataframe + results_df = results_df.join(attrank_df.select('id', 'score', 'normalized_score'), ['id'])\ + .select(results_df.id, 'pagerank', 'pagerank_normalized', F.col('score').alias('attrank'), F.col('normalized_score').alias('attrank_normalized')) + + # Add citation count dataframe + results_df = results_df.join(cc_df.select('id', 'score', 'normalized_score'), ['id'])\ + .select(results_df.id, 'pagerank', 'pagerank_normalized', 'attrank', 'attrank_normalized', F.col('score').alias('cc'), F.col('normalized_score').alias('cc_normalized')) + + # Add 3-year df + results_df = results_df.join(impulse_df.select('id', 'score', 'normalized_score'), ['id'])\ + .select(results_df.id, 'pagerank', 'pagerank_normalized', 'attrank', 'attrank_normalized', 'cc', 'cc_normalized', \ + F.col('score').alias('3-cc'), F.col('normalized_score').alias('3-cc_normalized')) + + # Add ram df + results_df = results_df.join(ram_df.select('id', 'score'), ['id'])\ + .select(results_df.id, 'pagerank', 'pagerank_normalized', 'attrank', 'attrank_normalized', 'cc', 'cc_normalized',\ + '3-cc', '3-cc_normalized', F.col('score').alias('ram')) + + # Add references + results_df = results_df.join(refs_df, ['id']).select(results_df.id, 'pagerank', 'pagerank_normalized', 'attrank', 'attrank_normalized', \ + 'cc', 'cc_normalized', '3-cc', '3-cc_normalized', 'ram', 'num_refs') + + # Write resulting dataframe to file + output_dir = "/".join(pagerank_dir.split('/')[:-1]) + output_dir = output_dir + '/bip_update_data.txt.gz' + + print("Writing to:" + output_dir) + results_df.write.mode('overwrite').option('delimiter','\t').option('header',True).csv(output_dir, compression='gzip') + +# The following is executed when the user requests the zenodo-specific file +elif mode == 'zenodo': + + # Read the remaining input files + if len(sys.argv) < 9: + print ("\n\nInsufficient input for 'zenodo' mode.") + print ("File list required: <3-year citation count> \n") + sys.exit(0) + + # Read number of partitions: + num_partitions = int(sys.argv[-2]) + graph_type = sys.argv[-1] + + if graph_type not in ['bip', 'openaire']: + graph_type = 'bip' + + pagerank_dir = sys.argv[2] + attrank_dir = sys.argv[3] + cc_dir = sys.argv[4] + impulse_dir = sys.argv[5] + ram_dir = sys.argv[6] + + # Output directory is common for all files + output_dir_prefix = "/".join(pagerank_dir.split('/')[:-1]) + # Method-specific outputs + pagerank_output = clean_directory_name(pagerank_dir.split('/')[-1]) + attrank_output = clean_directory_name(attrank_dir.split('/')[-1]) + cc_output = clean_directory_name(cc_dir.split('/')[-1]) + impulse_output = clean_directory_name(impulse_dir.split('/')[-1]) + ram_output = clean_directory_name(ram_dir.split('/')[-1]) + + # --------- PageRank ----------- # + # Get per file the doi - score - 6-way classes and write it to output + print("Writing to: " + output_dir_prefix + '/' + pagerank_output) + pagerank_df = spark.read.schema(float_schema).option('delimiter', '\t').option('header',True).csv(pagerank_dir).repartition(num_partitions, 'id').select('id', 'score', '5-way-class') + # Replace dataframe class names + pagerank_df = pagerank_df.withColumn('class', F.lit('C6')) + pagerank_df = pagerank_df.withColumn('class', F.when(F.col('5-way-class') == F.lit('E'), F.lit('C5')).otherwise(F.col('class')) ) + pagerank_df = pagerank_df.withColumn('class', F.when(F.col('5-way-class') == F.lit('D'), F.lit('C4')).otherwise(F.col('class')) ) + pagerank_df = pagerank_df.withColumn('class', F.when(F.col('5-way-class') == F.lit('C'), F.lit('C3')).otherwise(F.col('class')) ) + pagerank_df = pagerank_df.withColumn('class', F.when(F.col('5-way-class') == F.lit('B'), F.lit('C2')).otherwise(F.col('class')) ) + pagerank_df = pagerank_df.withColumn('class', F.when(F.col('5-way-class') == F.lit('A'), F.lit('C1')).otherwise(F.col('class')) ) + pagerank_df = pagerank_df.drop('5-way-class') + + if graph_type == 'openaire': + pagerank_df = pagerank_df.where( ~F.col('id').like('10.%') ) + + # Write output + pagerank_df.write.mode('overwrite').option('delimiter','\t').option('header',False).csv(output_dir_prefix + '/' + pagerank_output, compression='gzip') + # --------- AttRank ----------- # + print("Writing to: " + output_dir_prefix + '/' + attrank_output) + attrank_df = spark.read.schema(float_schema).option('delimiter', '\t').option('header',True).csv(attrank_dir).repartition(num_partitions, 'id').select('id', 'score', '5-way-class') + # Replace dataframe class names + attrank_df = attrank_df.withColumn('class', F.lit('C6')) + attrank_df = attrank_df.withColumn('class', F.when(F.col('5-way-class') == F.lit('E'), F.lit('C5')).otherwise(F.col('class')) ) + attrank_df = attrank_df.withColumn('class', F.when(F.col('5-way-class') == F.lit('D'), F.lit('C4')).otherwise(F.col('class')) ) + attrank_df = attrank_df.withColumn('class', F.when(F.col('5-way-class') == F.lit('C'), F.lit('C3')).otherwise(F.col('class')) ) + attrank_df = attrank_df.withColumn('class', F.when(F.col('5-way-class') == F.lit('B'), F.lit('C2')).otherwise(F.col('class')) ) + attrank_df = attrank_df.withColumn('class', F.when(F.col('5-way-class') == F.lit('A'), F.lit('C1')).otherwise(F.col('class')) ) + attrank_df = attrank_df.drop('5-way-class') + + if graph_type == 'openaire': + attrank_df = attrank_df.where( ~F.col('id').like('10.%') ) + + # Write output + attrank_df.write.mode('overwrite').option('delimiter','\t').option('header',False).csv(output_dir_prefix + '/' + attrank_output, compression='gzip') + # --------- Citation Count ----------- # + print("Writing to: " + output_dir_prefix + '/' + cc_output) + cc_df = spark.read.schema(int_schema).option('delimiter', '\t').option('header',True).csv(cc_dir).repartition(num_partitions, 'id').select('id', 'score', '5-way-class') + # Replace dataframe class names + cc_df = cc_df.withColumn('class', F.lit('C5')) + # cc_df = cc_df.withColumn('class', F.when(F.col('5-way-class') == F.lit('E'), F.lit('C5')).otherwise(F.col('class')) ) + cc_df = cc_df.withColumn('class', F.when(F.col('5-way-class') == F.lit('D'), F.lit('C4')).otherwise(F.col('class')) ) + cc_df = cc_df.withColumn('class', F.when(F.col('5-way-class') == F.lit('C'), F.lit('C3')).otherwise(F.col('class')) ) + cc_df = cc_df.withColumn('class', F.when(F.col('5-way-class') == F.lit('B'), F.lit('C2')).otherwise(F.col('class')) ) + cc_df = cc_df.withColumn('class', F.when(F.col('5-way-class') == F.lit('A'), F.lit('C1')).otherwise(F.col('class')) ) + cc_df = cc_df.drop('5-way-class') + + if graph_type == 'openaire': + cc_df = cc_df.where( ~F.col('id').like('10.%') ) + + # Write output + cc_df.write.mode('overwrite').option('delimiter','\t').option('header',False).csv(output_dir_prefix + '/' + cc_output, compression='gzip') + # --------- Impulse ----------- # + print("Writing to: " + output_dir_prefix + '/' + impulse_output) + impulse_df = spark.read.schema(int_schema).option('delimiter', '\t').option('header',True).csv(impulse_dir).repartition(num_partitions, 'id').select('id', 'score', '5-way-class') + # Replace dataframe class names + impulse_df = impulse_df.withColumn('class', F.lit('C5')) + # impulse_df = impulse_df.withColumn('class', F.when(F.col('6-way-class') == F.lit('E'), F.lit('C5')).otherwise(F.col('class')) ) + impulse_df = impulse_df.withColumn('class', F.when(F.col('5-way-class') == F.lit('D'), F.lit('C4')).otherwise(F.col('class')) ) + impulse_df = impulse_df.withColumn('class', F.when(F.col('5-way-class') == F.lit('C'), F.lit('C3')).otherwise(F.col('class')) ) + impulse_df = impulse_df.withColumn('class', F.when(F.col('5-way-class') == F.lit('B'), F.lit('C2')).otherwise(F.col('class')) ) + impulse_df = impulse_df.withColumn('class', F.when(F.col('5-way-class') == F.lit('A'), F.lit('C1')).otherwise(F.col('class')) ) + impulse_df = impulse_df.drop('5-way-class') + + if graph_type == 'openaire': + impulse_df = impulse_df.where( ~F.col('id').like('10.%') ) + + # Write output + impulse_df.write.mode('overwrite').option('delimiter','\t').option('header',False).csv(output_dir_prefix + '/' + impulse_output, compression='gzip') + # --------- RAM ----------- # + print("Writing to: " + output_dir_prefix + '/' + ram_output) + ram_df = spark.read.schema(float_schema).option('delimiter', '\t').option('header', True).csv(ram_dir).repartition(num_partitions, 'id').select('id', 'score', '5-way-class') + # Replace dataframe class names + ram_df = ram_df.withColumn('class', F.lit('C5')) + # ram_df = ram_df.withColumn('class', F.when(F.col('6-way-class') == F.lit('E'), F.lit('C5')).otherwise(F.col('class')) ) + ram_df = ram_df.withColumn('class', F.when(F.col('5-way-class') == F.lit('D'), F.lit('C4')).otherwise(F.col('class')) ) + ram_df = ram_df.withColumn('class', F.when(F.col('5-way-class') == F.lit('C'), F.lit('C3')).otherwise(F.col('class')) ) + ram_df = ram_df.withColumn('class', F.when(F.col('5-way-class') == F.lit('B'), F.lit('C2')).otherwise(F.col('class')) ) + ram_df = ram_df.withColumn('class', F.when(F.col('5-way-class') == F.lit('A'), F.lit('C1')).otherwise(F.col('class')) ) + ram_df = ram_df.drop('5-way-class') + + if graph_type == 'openaire': + ram_df = ram_df.where( ~F.col('id').like('10.%') ) + + # Write output + ram_df.write.mode('overwrite').option('delimiter','\t').option('header',False).csv(output_dir_prefix + '/' + ram_output, compression='gzip') + +# The following produces the json file required by openaire +elif mode == 'json': + + # Read the remaining input files + if len(sys.argv) < 9: + print ("\n\nInsufficient input for 'json' mode.") + print ("File list required: <3-year citation count> \n") + sys.exit(0) + + # Read number of partitions: + num_partitions = int(sys.argv[-2]) + graph_type = sys.argv[-1] + + if graph_type not in ['bip', 'openaire']: + graph_type = 'bip' + + print ("Graph type: " + str(graph_type)) + + # File directories + pagerank_dir = sys.argv[2] + attrank_dir = sys.argv[3] + cc_dir = sys.argv[4] + impulse_dir = sys.argv[5] + ram_dir = sys.argv[6] + + print ("Reading files:") + print (pagerank_dir) + print (attrank_dir) + print (cc_dir) + print (impulse_dir) + print (ram_dir) + + # Score-specific dataframe - read inputs + pagerank_df = spark.read.schema(float_schema).option('delimiter', '\t').option('header',True).csv(pagerank_dir).repartition(num_partitions, 'id') + attrank_df = spark.read.schema(float_schema).option('delimiter', '\t').option('header',False).csv(attrank_dir).repartition(num_partitions, 'id') + cc_df = spark.read.schema(int_schema).option('delimiter', '\t').option('header',True).csv(cc_dir).repartition(num_partitions, 'id') + impulse_df = spark.read.schema(int_schema).option('delimiter', '\t').option('header',True).csv(impulse_dir).repartition(num_partitions, 'id') + ram_df = spark.read.schema(float_schema).option('delimiter', '\t').option('header', True).csv(ram_dir).repartition(num_partitions, 'id') + # --- Join the data of the various scores --- # + + # Create json data for pagerank + pagerank_df = pagerank_df.select('id', F.map_concat( + F.create_map(F.lit('key'), F.lit('score')), + F.create_map(F.lit('value'), F.col('score'))).alias('score_map'), + F.map_concat( + F.create_map(F.lit('key'), F.lit('class')), + F.create_map(F.lit('value'), F.col('3-way-class'))).alias('class_map')) + + pagerank_df = pagerank_df.select('id', F.create_map(F.lit('unit'), F.array([F.col('score_map'), F.col('class_map')]) ).alias('influence_values') ) + pagerank_df = pagerank_df.select('id', F.create_map(F.lit('id'), F.lit('influence')).alias('id_map'), F.col('influence_values')) + pagerank_df = pagerank_df.select('id', F.to_json(F.create_map(F.lit('id'), F.lit('influence'))).alias('influence_key'), F.to_json(F.col('influence_values')).alias('influence_values') ) + pagerank_df = pagerank_df.select('id', F.expr('substring(influence_key, 0, length(influence_key)-1)').alias('influence_key'), 'influence_values') + pagerank_df = pagerank_df.select('id', 'influence_key', F.expr('substring(influence_values, 2, length(influence_values))').alias('influence_values')) + pagerank_df = pagerank_df.select('id', F.concat_ws(', ', F.col('influence_key'), F.col('influence_values')).alias('influence_json')) + + # Create json data for attrank + attrank_df = attrank_df.select('id', F.map_concat( + F.create_map(F.lit('key'), F.lit('score')), + F.create_map(F.lit('value'), F.col('score'))).alias('score_map'), + F.map_concat( + F.create_map(F.lit('key'), F.lit('class')), + F.create_map(F.lit('value'), F.col('3-way-class'))).alias('class_map')) + + attrank_df = attrank_df.select('id', F.create_map(F.lit('unit'), F.array([F.col('score_map'), F.col('class_map')]) ).alias('popularity_values') ) + attrank_df = attrank_df.select('id', F.create_map(F.lit('id'), F.lit('popularity')).alias('id_map'), F.col('popularity_values')) + attrank_df = attrank_df.select('id', F.to_json(F.create_map(F.lit('id'), F.lit('popularity'))).alias('popularity_key'), F.to_json(F.col('popularity_values')).alias('popularity_values') ) + attrank_df = attrank_df.select('id', F.expr('substring(popularity_key, 0, length(popularity_key)-1)').alias('popularity_key'), 'popularity_values') + attrank_df = attrank_df.select('id', 'popularity_key', F.expr('substring(popularity_values, 2, length(popularity_values))').alias('popularity_values')) + attrank_df = attrank_df.select('id', F.concat_ws(', ', F.col('popularity_key'), F.col('popularity_values')).alias('popularity_json')) + + # Create json data for CC + cc_df = cc_df.select('id', F.map_concat( + F.create_map(F.lit('key'), F.lit('score')), + F.create_map(F.lit('value'), F.col('score'))).alias('score_map'), + F.map_concat( + F.create_map(F.lit('key'), F.lit('class')), + F.create_map(F.lit('value'), F.col('3-way-class'))).alias('class_map')) + + cc_df = cc_df.select('id', F.create_map(F.lit('unit'), F.array([F.col('score_map'), F.col('class_map')]) ).alias('influence_alt_values') ) + cc_df = cc_df.select('id', F.create_map(F.lit('id'), F.lit('influence_alt')).alias('id_map'), F.col('influence_alt_values')) + cc_df = cc_df.select('id', F.to_json(F.create_map(F.lit('id'), F.lit('influence_alt'))).alias('influence_alt_key'), F.to_json(F.col('influence_alt_values')).alias('influence_alt_values') ) + cc_df = cc_df.select('id', F.expr('substring(influence_alt_key, 0, length(influence_alt_key)-1)').alias('influence_alt_key'), 'influence_alt_values') + cc_df = cc_df.select('id', 'influence_alt_key', F.expr('substring(influence_alt_values, 2, length(influence_alt_values))').alias('influence_alt_values')) + cc_df = cc_df.select('id', F.concat_ws(', ', F.col('influence_alt_key'), F.col('influence_alt_values')).alias('influence_alt_json')) + + + # Create json data for RAM + ram_df = ram_df.select('id', F.map_concat( + F.create_map(F.lit('key'), F.lit('score')), + F.create_map(F.lit('value'), F.col('score'))).alias('score_map'), + F.map_concat( + F.create_map(F.lit('key'), F.lit('class')), + F.create_map(F.lit('value'), F.col('3-way-class'))).alias('class_map')) + + ram_df = ram_df.select('id', F.create_map(F.lit('unit'), F.array([F.col('score_map'), F.col('class_map')]) ).alias('popularity_alt_values') ) + ram_df = ram_df.select('id', F.create_map(F.lit('id'), F.lit('popularity_alt')).alias('id_map'), F.col('popularity_alt_values')) + ram_df = ram_df.select('id', F.to_json(F.create_map(F.lit('id'), F.lit('popularity_alt'))).alias('popularity_alt_key'), F.to_json(F.col('popularity_alt_values')).alias('popularity_alt_values') ) + ram_df = ram_df.select('id', F.expr('substring(popularity_alt_key, 0, length(popularity_alt_key)-1)').alias('popularity_alt_key'), 'popularity_alt_values') + ram_df = ram_df.select('id', 'popularity_alt_key', F.expr('substring(popularity_alt_values, 2, length(popularity_alt_values))').alias('popularity_alt_values')) + ram_df = ram_df.select('id', F.concat_ws(', ', F.col('popularity_alt_key'), F.col('popularity_alt_values')).alias('popularity_alt_json')) + + # Create json data for impulse + impulse_df = impulse_df.select('id', F.map_concat( + F.create_map(F.lit('key'), F.lit('score')), + F.create_map(F.lit('value'), F.col('score'))).alias('score_map'), + F.map_concat( + F.create_map(F.lit('key'), F.lit('class')), + F.create_map(F.lit('value'), F.col('3-way-class'))).alias('class_map')) + + impulse_df = impulse_df.select('id', F.create_map(F.lit('unit'), F.array([F.col('score_map'), F.col('class_map')]) ).alias('impulse_values') ) + impulse_df = impulse_df.select('id', F.create_map(F.lit('id'), F.lit('impulse')).alias('id_map'), F.col('impulse_values')) + impulse_df = impulse_df.select('id', F.to_json(F.create_map(F.lit('id'), F.lit('impulse'))).alias('impulse_key'), F.to_json(F.col('impulse_values')).alias('impulse_values') ) + impulse_df = impulse_df.select('id', F.expr('substring(impulse_key, 0, length(impulse_key)-1)').alias('impulse_key'), 'impulse_values') + impulse_df = impulse_df.select('id', 'impulse_key', F.expr('substring(impulse_values, 2, length(impulse_values))').alias('impulse_values')) + impulse_df = impulse_df.select('id', F.concat_ws(', ', F.col('impulse_key'), F.col('impulse_values')).alias('impulse_json')) + + #Join dataframes together + results_df = pagerank_df.join(attrank_df, ['id']) + results_df = results_df.join(cc_df, ['id']) + results_df = results_df.join(ram_df, ['id']) + results_df = results_df.join(impulse_df, ['id']) + + print ("Json encoding DOI keys") + # Json encode doi strings + results_df = results_df.select(json_encode_key('id').alias('id'), 'influence_json', 'popularity_json', 'influence_alt_json', 'popularity_alt_json', 'impulse_json') + + # Concatenate individual json columns + results_df = results_df.select('id', F.concat_ws(', ', F.col('influence_json'), F.col('popularity_json'), F.col('influence_alt_json'), F.col('popularity_alt_json'), F.col('impulse_json') ).alias('json_data')) + results_df = results_df.select('id', F.concat_ws('', F.lit('['), F.col('json_data'), F.lit(']')).alias('json_data') ) + + # Filter out non-openaire ids if need + if graph_type == 'openaire': + results_df = results_df.where( ~F.col('id').like('"10.%') ) + + # Concatenate paper id and add opening and ending brackets + results_df = results_df.select(F.concat_ws('', F.lit('{'), F.col('id'), F.lit(': '), F.col('json_data'), F.lit('}')).alias('json') ) + + # -------------------------------------------- # + # Write json output - set the directory here + output_dir = "/".join(pagerank_dir.split('/')[:-1]) + if graph_type == 'bip': + output_dir = output_dir + '/bip_universe_doi_scores/' + else: + output_dir = output_dir + '/openaire_universe_scores/' + + # Write the dataframe + print ("Writing output to: " + output_dir) + results_df.write.mode('overwrite').option('header', False).text(output_dir, compression='gzip') + + # Rename the files to .json.gz now + sc = spark.sparkContext + URI = sc._gateway.jvm.java.net.URI + Path = sc._gateway.jvm.org.apache.hadoop.fs.Path + FileSystem = sc._gateway.jvm.org.apache.hadoop.fs.FileSystem + # Get master prefix from input file path + master_prefix = "/".join(pagerank_dir.split('/')[:5]) + fs = FileSystem.get(URI(master_prefix), sc._jsc.hadoopConfiguration()) + path = Path(output_dir) + print ("Path is:" + path.toString()) + file_list = fs.listStatus(Path(output_dir)) + print ("Renaming files:") + for f in file_list: + initial_filename = f.getPath().toString() + if "part" in initial_filename: + print (initial_filename + " => " + initial_filename.replace(".txt.gz", ".json.gz")) + fs.rename(Path(initial_filename), Path(initial_filename.replace(".txt.gz", ".json.gz"))) + + + ''' + DEPRECATED: + # -------------------------------------------- # + # Write json output + output_dir = "/".join(pagerank_dir.split('/')[:-1]) + if graph_type == 'bip': + output_dir = output_dir + '/bip_universe_doi_scores_txt/' + else: + output_dir = output_dir + '/openaire_universe_scores_txt/' + + print ("Writing output to: " + output_dir) + results_df.write.mode('overwrite').option('header', False).text(output_dir, compression='gzip') + print ("Done writing first results") + # Read results df as json and write it as json file + print ("Reading json input from: " + str(output_dir)) + resulds_df_json = spark.read.json(output_dir).cache() + # Write json to different dir + print ("Writing json output to: " + output_dir.replace("_txt", "")) + resulds_df_json.write.mode('overwrite').json(output_dir.replace("_txt", ""), compression='gzip') + ''' + +# The following produces the json file required by openaire +elif mode == 'json-5-way': + + # Read the remaining input files + if len(sys.argv) < 9: + print ("\n\nInsufficient input for 'json-5-way' mode.") + print ("File list required: <3-year citation count> \n") + sys.exit(0) + + # Read number of partitions: + num_partitions = int(sys.argv[-2]) + graph_type = sys.argv[-1] + + if graph_type not in ['bip', 'openaire']: + graph_type = 'bip' + + # File directories + pagerank_dir = sys.argv[2] + attrank_dir = sys.argv[3] + cc_dir = sys.argv[4] + impulse_dir = sys.argv[5] + ram_dir = sys.argv[6] + + # Score-specific dataframe - read inputs + pagerank_df = spark.read.schema(float_schema).option('delimiter', '\t').option('header',True).csv(pagerank_dir).repartition(num_partitions, 'id') + attrank_df = spark.read.schema(float_schema).option('delimiter', '\t').option('header',False).csv(attrank_dir).repartition(num_partitions, 'id') + cc_df = spark.read.schema(int_schema).option('delimiter', '\t').option('header',True).csv(cc_dir).repartition(num_partitions, 'id') + impulse_df = spark.read.schema(int_schema).option('delimiter', '\t').option('header',True).csv(impulse_dir).repartition(num_partitions, 'id') + ram_df = spark.read.schema(float_schema).option('delimiter', '\t').option('header', True).csv(ram_dir).repartition(num_partitions, 'id') + # --- Join the data of the various scores --- # + + + # Replace 6-way classes with 5-way values + pagerank_df = pagerank_df.withColumn('class', F.lit('C5')) + pagerank_df = pagerank_df.withColumn('class', F.when(F.col('5-way-class') == F.lit('D'), F.lit('C4')).otherwise(F.col('class')) ) + pagerank_df = pagerank_df.withColumn('class', F.when(F.col('5-way-class') == F.lit('C'), F.lit('C3')).otherwise(F.col('class')) ) + pagerank_df = pagerank_df.withColumn('class', F.when(F.col('5-way-class') == F.lit('B'), F.lit('C2')).otherwise(F.col('class')) ) + pagerank_df = pagerank_df.withColumn('class', F.when(F.col('5-way-class') == F.lit('A'), F.lit('C1')).otherwise(F.col('class')) ) + pagerank_df = pagerank_df.drop('5-way-class').withColumnRenamed('class', '5-way-class') + + + # Create json data for pagerank + pagerank_df = pagerank_df.select('id', F.map_concat( + F.create_map(F.lit('key'), F.lit('score')), + F.create_map(F.lit('value'), F.col('score'))).alias('score_map'), + F.map_concat( + F.create_map(F.lit('key'), F.lit('class')), + F.create_map(F.lit('value'), F.col('5-way-class'))).alias('class_map')) + + + + pagerank_df = pagerank_df.select('id', F.create_map(F.lit('unit'), F.array([F.col('score_map'), F.col('class_map')]) ).alias('influence_values') ) + pagerank_df = pagerank_df.select('id', F.create_map(F.lit('id'), F.lit('influence')).alias('id_map'), F.col('influence_values')) + pagerank_df = pagerank_df.select('id', F.to_json(F.create_map(F.lit('id'), F.lit('influence'))).alias('influence_key'), F.to_json(F.col('influence_values')).alias('influence_values') ) + pagerank_df = pagerank_df.select('id', F.expr('substring(influence_key, 0, length(influence_key)-1)').alias('influence_key'), 'influence_values') + pagerank_df = pagerank_df.select('id', 'influence_key', F.expr('substring(influence_values, 2, length(influence_values))').alias('influence_values')) + pagerank_df = pagerank_df.select('id', F.concat_ws(', ', F.col('influence_key'), F.col('influence_values')).alias('influence_json')) + + # Replace 6-way classes with 5 way classes for attrank + attrank_df = attrank_df.withColumn('class', F.lit('C5')) + attrank_df = attrank_df.withColumn('class', F.when(F.col('5-way-class') == F.lit('D'), F.lit('C4')).otherwise(F.col('class')) ) + attrank_df = attrank_df.withColumn('class', F.when(F.col('5-way-class') == F.lit('C'), F.lit('C3')).otherwise(F.col('class')) ) + attrank_df = attrank_df.withColumn('class', F.when(F.col('5-way-class') == F.lit('B'), F.lit('C2')).otherwise(F.col('class')) ) + attrank_df = attrank_df.withColumn('class', F.when(F.col('5-way-class') == F.lit('A'), F.lit('C1')).otherwise(F.col('class')) ) + attrank_df = attrank_df.drop('5-way-class').withColumnRenamed('class', '5-way-class') + + # Create json data for attrank + attrank_df = attrank_df.select('id', F.map_concat( + F.create_map(F.lit('key'), F.lit('score')), + F.create_map(F.lit('value'), F.col('score'))).alias('score_map'), + F.map_concat( + F.create_map(F.lit('key'), F.lit('class')), + F.create_map(F.lit('value'), F.col('5-way-class'))).alias('class_map')) + + attrank_df = attrank_df.select('id', F.create_map(F.lit('unit'), F.array([F.col('score_map'), F.col('class_map')]) ).alias('popularity_values') ) + attrank_df = attrank_df.select('id', F.create_map(F.lit('id'), F.lit('popularity')).alias('id_map'), F.col('popularity_values')) + attrank_df = attrank_df.select('id', F.to_json(F.create_map(F.lit('id'), F.lit('popularity'))).alias('popularity_key'), F.to_json(F.col('popularity_values')).alias('popularity_values') ) + attrank_df = attrank_df.select('id', F.expr('substring(popularity_key, 0, length(popularity_key)-1)').alias('popularity_key'), 'popularity_values') + attrank_df = attrank_df.select('id', 'popularity_key', F.expr('substring(popularity_values, 2, length(popularity_values))').alias('popularity_values')) + attrank_df = attrank_df.select('id', F.concat_ws(', ', F.col('popularity_key'), F.col('popularity_values')).alias('popularity_json')) + + # Replace 6-way classes with 5 way classes for attrank + cc_df = cc_df.withColumn('class', F.lit('C5')) + cc_df = cc_df.withColumn('class', F.when(F.col('5-way-class') == F.lit('D'), F.lit('C4')).otherwise(F.col('class')) ) + cc_df = cc_df.withColumn('class', F.when(F.col('5-way-class') == F.lit('C'), F.lit('C3')).otherwise(F.col('class')) ) + cc_df = cc_df.withColumn('class', F.when(F.col('5-way-class') == F.lit('B'), F.lit('C2')).otherwise(F.col('class')) ) + cc_df = cc_df.withColumn('class', F.when(F.col('5-way-class') == F.lit('A'), F.lit('C1')).otherwise(F.col('class')) ) + cc_df = cc_df.drop('5-way-class').withColumnRenamed('class', '5-way-class') + + # Create json data for CC + cc_df = cc_df.select('id', F.map_concat( + F.create_map(F.lit('key'), F.lit('score')), + F.create_map(F.lit('value'), F.col('score'))).alias('score_map'), + F.map_concat( + F.create_map(F.lit('key'), F.lit('class')), + F.create_map(F.lit('value'), F.col('5-way-class'))).alias('class_map')) + + cc_df = cc_df.select('id', F.create_map(F.lit('unit'), F.array([F.col('score_map'), F.col('class_map')]) ).alias('influence_alt_values') ) + cc_df = cc_df.select('id', F.create_map(F.lit('id'), F.lit('influence_alt')).alias('id_map'), F.col('influence_alt_values')) + cc_df = cc_df.select('id', F.to_json(F.create_map(F.lit('id'), F.lit('influence_alt'))).alias('influence_alt_key'), F.to_json(F.col('influence_alt_values')).alias('influence_alt_values') ) + cc_df = cc_df.select('id', F.expr('substring(influence_alt_key, 0, length(influence_alt_key)-1)').alias('influence_alt_key'), 'influence_alt_values') + cc_df = cc_df.select('id', 'influence_alt_key', F.expr('substring(influence_alt_values, 2, length(influence_alt_values))').alias('influence_alt_values')) + cc_df = cc_df.select('id', F.concat_ws(', ', F.col('influence_alt_key'), F.col('influence_alt_values')).alias('influence_alt_json')) + + # Replace 6-way classes with 5 way classes for attrank + ram_df = ram_df.withColumn('class', F.lit('C5')) + ram_df = ram_df.withColumn('class', F.when(F.col('5-way-class') == F.lit('D'), F.lit('C4')).otherwise(F.col('class')) ) + ram_df = ram_df.withColumn('class', F.when(F.col('5-way-class') == F.lit('C'), F.lit('C3')).otherwise(F.col('class')) ) + ram_df = ram_df.withColumn('class', F.when(F.col('5-way-class') == F.lit('B'), F.lit('C2')).otherwise(F.col('class')) ) + ram_df = ram_df.withColumn('class', F.when(F.col('5-way-class') == F.lit('A'), F.lit('C1')).otherwise(F.col('class')) ) + ram_df = ram_df.drop('5-way-class').withColumnRenamed('class', '5-way-class') + + # Create json data for RAM + ram_df = ram_df.select('id', F.map_concat( + F.create_map(F.lit('key'), F.lit('score')), + F.create_map(F.lit('value'), F.col('score'))).alias('score_map'), + F.map_concat( + F.create_map(F.lit('key'), F.lit('class')), + F.create_map(F.lit('value'), F.col('5-way-class'))).alias('class_map')) + + ram_df = ram_df.select('id', F.create_map(F.lit('unit'), F.array([F.col('score_map'), F.col('class_map')]) ).alias('popularity_alt_values') ) + ram_df = ram_df.select('id', F.create_map(F.lit('id'), F.lit('popularity_alt')).alias('id_map'), F.col('popularity_alt_values')) + ram_df = ram_df.select('id', F.to_json(F.create_map(F.lit('id'), F.lit('popularity_alt'))).alias('popularity_alt_key'), F.to_json(F.col('popularity_alt_values')).alias('popularity_alt_values') ) + ram_df = ram_df.select('id', F.expr('substring(popularity_alt_key, 0, length(popularity_alt_key)-1)').alias('popularity_alt_key'), 'popularity_alt_values') + ram_df = ram_df.select('id', 'popularity_alt_key', F.expr('substring(popularity_alt_values, 2, length(popularity_alt_values))').alias('popularity_alt_values')) + ram_df = ram_df.select('id', F.concat_ws(', ', F.col('popularity_alt_key'), F.col('popularity_alt_values')).alias('popularity_alt_json')) + + # Replace 6-way classes with 5 way classes for attrank + impulse_df = impulse_df.withColumn('class', F.lit('C5')) + impulse_df = impulse_df.withColumn('class', F.when(F.col('5-way-class') == F.lit('D'), F.lit('C4')).otherwise(F.col('class')) ) + impulse_df = impulse_df.withColumn('class', F.when(F.col('5-way-class') == F.lit('C'), F.lit('C3')).otherwise(F.col('class')) ) + impulse_df = impulse_df.withColumn('class', F.when(F.col('5-way-class') == F.lit('B'), F.lit('C2')).otherwise(F.col('class')) ) + impulse_df = impulse_df.withColumn('class', F.when(F.col('5-way-class') == F.lit('A'), F.lit('C1')).otherwise(F.col('class')) ) + impulse_df = impulse_df.drop('5-way-class').withColumnRenamed('class', '5-way-class') + + # Create json data for impulse + impulse_df = impulse_df.select('id', F.map_concat( + F.create_map(F.lit('key'), F.lit('score')), + F.create_map(F.lit('value'), F.col('score'))).alias('score_map'), + F.map_concat( + F.create_map(F.lit('key'), F.lit('class')), + F.create_map(F.lit('value'), F.col('5-way-class'))).alias('class_map')) + + impulse_df = impulse_df.select('id', F.create_map(F.lit('unit'), F.array([F.col('score_map'), F.col('class_map')]) ).alias('impulse_values') ) + impulse_df = impulse_df.select('id', F.create_map(F.lit('id'), F.lit('impulse')).alias('id_map'), F.col('impulse_values')) + impulse_df = impulse_df.select('id', F.to_json(F.create_map(F.lit('id'), F.lit('impulse'))).alias('impulse_key'), F.to_json(F.col('impulse_values')).alias('impulse_values') ) + impulse_df = impulse_df.select('id', F.expr('substring(impulse_key, 0, length(impulse_key)-1)').alias('impulse_key'), 'impulse_values') + impulse_df = impulse_df.select('id', 'impulse_key', F.expr('substring(impulse_values, 2, length(impulse_values))').alias('impulse_values')) + impulse_df = impulse_df.select('id', F.concat_ws(', ', F.col('impulse_key'), F.col('impulse_values')).alias('impulse_json')) + + #Join dataframes together + results_df = pagerank_df.join(attrank_df, ['id']) + results_df = results_df.join(cc_df, ['id']) + results_df = results_df.join(ram_df, ['id']) + results_df = results_df.join(impulse_df, ['id']) + + print ("Json encoding DOI keys") + # Json encode doi strings + results_df = results_df.select(json_encode_key('id').alias('id'), 'influence_json', 'popularity_json', 'influence_alt_json', 'popularity_alt_json', 'impulse_json') + + # Concatenate individual json columns + results_df = results_df.select('id', F.concat_ws(', ', F.col('influence_json'), F.col('popularity_json'), F.col('influence_alt_json'), F.col('popularity_alt_json'), F.col('impulse_json') ).alias('json_data')) + results_df = results_df.select('id', F.concat_ws('', F.lit('['), F.col('json_data'), F.lit(']')).alias('json_data') ) + + # Filter out non-openaire ids if need + if graph_type == 'openaire': + results_df = results_df.where( ~F.col('id').like('10.%') ) + + # Concatenate paper id and add opening and ending brackets + results_df = results_df.select(F.concat_ws('', F.lit('{'), F.col('id'), F.lit(': '), F.col('json_data'), F.lit('}')).alias('json') ) + + # TEST output and count + # results_df.show(20, False) + # print ("Results #" + str(results_df.count())) + + # -------------------------------------------- # + # Write json output + output_dir = "/".join(pagerank_dir.split('/')[:-1]) + if graph_type == 'bip': + output_dir = output_dir + '/bip_universe_doi_scores_5_classes/' + else: + output_dir = output_dir + '/openaire_universe_scores_5_classes/' + + print ("Writing output to: " + output_dir) + results_df.write.mode('overwrite').option('header', False).text(output_dir, compression='gzip') + +# Close spark session +spark.stop() + +print("--- Main program execution time: %s seconds ---" % (time.time() - start_time)) +print("--- Finished --- \n\n") + diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/get_ranking_files.sh b/dhp-workflows/dhp-impact-indicators/src/main/resources/get_ranking_files.sh new file mode 100644 index 000000000..4d0fedba9 --- /dev/null +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/get_ranking_files.sh @@ -0,0 +1,14 @@ +ranking_results_folder=$1; + +pr_file=`hdfs dfs -ls ${ranking_results_folder}/ | grep "/PR_.*" | grep -o "PR.*"`; +attrank_file=`hdfs dfs -ls ${ranking_results_folder}/ | grep "/AttRank.*" | grep -o "AttRank.*"`; +cc_file=`hdfs dfs -ls ${ranking_results_folder}/ | grep "/CC_.*" | grep -o "CC.*"`; +impulse_file=`hdfs dfs -ls ${ranking_results_folder}/ | grep "/3-year_.*" | grep -o "3-year.*"`; +ram_file=`hdfs dfs -ls ${ranking_results_folder}/ | grep "/RAM_.*" | grep -o "RAM.*"`; + +echo "pr_file=${pr_file}"; +echo "attrank_file=${attrank_file}"; +echo "cc_file=${cc_file}"; +echo "impulse_file=${impulse_file}"; +echo "ram_file=${ram_file}"; +# echo "TEST=`hdfs dfs -ls ${ranking_results_folder}/`"; diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/job.properties b/dhp-workflows/dhp-impact-indicators/src/main/resources/job.properties new file mode 100644 index 000000000..9ad9def21 --- /dev/null +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/job.properties @@ -0,0 +1,86 @@ +# The following set of properties are defined in https://support.openaire.eu/projects/openaire/wiki/Hadoop_clusters +# and concern the parameterization required for running workflows on the @GARR cluster + +dhp.hadoop.frontend.temp.dir=/home/ilias.kanellos +dhp.hadoop.frontend.user.name=ilias.kanellos +dhp.hadoop.frontend.host.name=iis-cdh5-test-gw.ocean.icm.edu.pl +dhp.hadoop.frontend.port.ssh=22 +oozieServiceLoc=http://iis-cdh5-test-m3:11000/oozie +jobTracker=yarnRM +nameNode=hdfs://nameservice1 +oozie.execution.log.file.location = target/extract-and-run-on-remote-host.log +maven.executable=mvn +sparkDriverMemory=7G +sparkExecutorMemory=7G +sparkExecutorCores=4 +# The above is given differently in an example I found online +oozie.action.sharelib.for.spark=spark2 +oozieActionShareLibForSpark2=spark2 +spark2YarnHistoryServerAddress=http://iis-cdh5-test-gw.ocean.icm.edu.pl:18089 +spark2EventLogDir=/user/spark/spark2ApplicationHistory +sparkSqlWarehouseDir=/user/hive/warehouse +hiveMetastoreUris=thrift://iis-cdh5-test-m3.ocean.icm.edu.pl:9083 +# This MAY avoid the no library used error +oozie.use.system.libpath=true +# Some stuff copied from openaire's jobs +spark2ExtraListeners=com.cloudera.spark.lineage.NavigatorAppListener +spark2SqlQueryExecutionListeners=com.cloudera.spark.lineage.NavigatorQueryListener + + +# Some stuff copied from openaire's jobs +spark2ExtraListeners=com.cloudera.spark.lineage.NavigatorAppListener +spark2SqlQueryExecutionListeners=com.cloudera.spark.lineage.NavigatorQueryListener + +# ------------------------------------------------------------------------------ # +# The following set of properties are my own custom ones + +# Based on the page linked to at the start of the file, if we use yarn as a resource manager, its address is given as follows +resourceManager=http://iis-cdh5-test-m2.ocean.icm.edu.pl:8088/cluster + +# current year used when creating graph / by some ranking methods +currentYear=2024 + +# Alpha value for pagerank +pageRankAlpha=0.5 +# AttRank values +attrankAlpha=0.2 +attrankBeta=0.5 +attrankGamma=0.3 +attrankRho=-0.16 +# attrankCurrentYear=2023 +attrankStartYear=2021 + +# Ram values +ramGamma=0.6 +# ramCurrentYear=2023 + +# Convergence error for pagerank +convergenceError=0.000000000001 + +# I think this should be the oozie workflow directory +oozieWorkflowPath=user/ilias.kanellos/workflow_example/ + +# The directory where the workflow data is/should be stored +workflowDataDir=user/ilias.kanellos/ranking_workflow + +# Directory where dataframes are checkpointed +checkpointDir=${nameNode}/${workflowDataDir}/check/ + +# The directory for the doi-based bip graph +bipGraphFilePath=${nameNode}/${workflowDataDir}/bipdbv8_graph + +# The folder from which synonyms of openaire-ids are read +# openaireDataInput=${nameNode}/tmp/beta_provision/graph/21_graph_cleaned/ +openaireDataInput=${/tmp/prod_provision/graph/18_graph_blacklisted} + +# A folder where we will write the openaire to doi mapping +synonymFolder=${nameNode}/${workflowDataDir}/openaireid_to_dois/ + +# This will be where we store the openaire graph input. They told us on GARR to use a directory under /data +openaireGraphInputPath=${nameNode}/${workflowDataDir}/openaire_id_graph + +# The workflow application path +wfAppPath=${nameNode}/${oozieWorkflowPath} +# The following is needed as a property of a workflow +oozie.wf.application.path=${wfAppPath} + diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/map_openaire_ids_to_dois.py b/dhp-workflows/dhp-impact-indicators/src/main/resources/map_openaire_ids_to_dois.py new file mode 100644 index 000000000..7997eec82 --- /dev/null +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/map_openaire_ids_to_dois.py @@ -0,0 +1,60 @@ +import json +import sys +from pyspark.sql import SparkSession +from pyspark import SparkConf, SparkContext + +if len(sys.argv) != 3: + print("Usage: map_openaire_ids_to_dois.py ") + sys.exit(-1) + +conf = SparkConf().setAppName('BIP!: Map OpenAIRE IDs to DOIs') +sc = SparkContext(conf = conf) +spark = SparkSession.builder.appName('BIP!: Map OpenAIRE IDs to DOIs').getOrCreate() +sc.setLogLevel('OFF') + +src_dir = sys.argv[1] +output = sys.argv[2] + +# src_dir = "/tmp/beta_provision/graph/21_graph_cleaned/" +# output = '/tmp/openaireid_to_dois/' + +def transform(doc): + + # get publication year from 'doc.dateofacceptance.value' + dateofacceptance = doc.get('dateofacceptance', {}).get('value') + + year = 0 + + if (dateofacceptance is not None): + year = dateofacceptance.split('-')[0] + + # for each pid get 'pid.value' if 'pid.qualifier.classid' equals to 'doi' + dois = [ pid['value'] for pid in doc.get('pid', []) if (pid.get('qualifier', {}).get('classid') == 'doi' and pid['value'] is not None)] + + num_dois = len(dois) + + # exlcude openaire ids that do not correspond to DOIs + if (num_dois == 0): + return None + + fields = [ doc['id'], str(num_dois), chr(0x02).join(dois), str(year) ] + + return '\t'.join([ v.encode('utf-8') for v in fields ]) + +docs = None + +for result_type in ["publication", "dataset", "software", "otherresearchproduct"]: + + tmp = sc.textFile(src_dir + result_type).map(json.loads) + + if (docs is None): + docs = tmp + else: + # append all result types in one RDD + docs = docs.union(tmp) + +docs = docs.filter(lambda d: d.get('dataInfo', {}).get('deletedbyinference') == False and d.get('dataInfo', {}).get('invisible') == False) + +docs = docs.map(transform).filter(lambda d: d is not None) + +docs.saveAsTextFile(output) diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/map_scores_to_dois.py b/dhp-workflows/dhp-impact-indicators/src/main/resources/map_scores_to_dois.py new file mode 100644 index 000000000..0d294e045 --- /dev/null +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/map_scores_to_dois.py @@ -0,0 +1,145 @@ +# This program reads the openaire to doi mapping from the ${synonymFolder} of the workflow +# and uses this mapping to create doi-based score files in the format required by BiP! DB. +# This is done by reading each openaire-id based ranking file and joining the openaire based +# score and classes to all the corresponding dois. +################################################################################################# +# Imports +import sys + +# Sparksession lib to communicate with cluster via session object +from pyspark.sql import SparkSession + +# Import sql types to define schemas +from pyspark.sql.types import * + +# Import sql functions with shorthand alias +import pyspark.sql.functions as F +# from pyspark.sql.functions import udf +################################################################################################# +################################################################################################# +# Clean up directory name +def clean_directory_name(dir_name): + # We have a name with the form *_bip_universe_* or *_graph_universe_* + # and we need to keep the parts in * + dir_name_parts = dir_name.split('_') + dir_name_parts = [part for part in dir_name_parts if ('bip' not in part and 'graph' not in part and 'universe' not in part and 'from' not in part)] + + clean_name = '_'.join(dir_name_parts) + + if '_ids' not in clean_name: + clean_name = clean_name.replace('id_', 'ids_') + + # clean_name = clean_name.replace('.txt', '') + # clean_name = clean_name.replace('.gz', '') + + if 'openaire_ids_' in clean_name: + clean_name = clean_name.replace('openaire_ids_', '') + # clean_name = clean_name + '.txt.gz' + # else: + # clean_name = clean_name + '.txt.gz' + + return clean_name +################################################################################################# +if len(sys.argv) < 3: + print ("Usage: ./map_scores_to_dois.py <...etc...>") + sys.exit(-1) + +# Read arguments +synonyms_folder = sys.argv[1] +num_partitions = int(sys.argv[2]) +input_file_list = [argument for argument in sys.argv[3:]] +input_file_list = [clean_directory_name(item) for item in input_file_list] + +# Prepare output specific variables +output_file_list = [item.replace("_openaire_ids", "") for item in input_file_list] +output_file_list = [item + ".gz" if not item.endswith(".gz") else item for item in output_file_list] + +# --- INFO MESSAGES --- # +print ("\n\n----------------------------") +print ("Mpping openaire ids to DOIs") +print ("Reading input from: " + synonyms_folder) +print ("Num partitions: " + str(num_partitions)) +print ("Input files:" + " -- ".join(input_file_list)) +print ("Output files: " + " -- ".join(output_file_list)) +print ("----------------------------\n\n") +####################################################################################### +# We weill define the following schemas: +# --> the schema of the openaire - doi mapping file [string - int - doi_list] (the separator of the doi-list is a non printable character) +# --> a schema for floating point ranking scores [string - float - string] (the latter string is the class) +# --> a schema for integer ranking scores [string - int - string] (the latter string is the class) + +float_schema = StructType([ + StructField('id', StringType(), False), + StructField('score', FloatType(), False), + StructField('class', StringType(), False) + ]) + +int_schema = StructType([ + StructField('id', StringType(), False), + StructField('score', IntegerType(), False), + StructField('class', StringType(), False) + ]) + +# This schema concerns the output of the file +# containing the number of references of each doi +synonyms_schema = StructType([ + StructField('id', StringType(), False), + StructField('num_synonyms', IntegerType(), False), + StructField('doi_list', StringType(), False), + ]) +####################################################################################### +# Start spark session +spark = SparkSession.builder.appName('Map openaire scores to DOIs').getOrCreate() +# Set Log Level for spark session +spark.sparkContext.setLogLevel('WARN') +####################################################################################### +# MAIN Program + +# Read and repartition the synonym folder - also cache it since we will need to perform multiple joins +synonym_df = spark.read.schema(synonyms_schema).option('delimiter', '\t').csv(synonyms_folder) +synonym_df = synonym_df.select('id', F.split(F.col('doi_list'), chr(0x02)).alias('doi_list')) +synonym_df = synonym_df.select('id', F.explode('doi_list').alias('doi')).repartition(num_partitions, 'id').cache() + +# TESTING +# print ("Synonyms: " + str(synonym_df.count())) +# print ("DF looks like this:" ) +# synonym_df.show(1000, False) + +print ("\n\n-----------------------------") +# Now we need to join the score files on the openaire-id with the synonyms and then keep +# only doi - score - class and write this to the output +for offset, input_file in enumerate(input_file_list): + + print ("Mapping scores from " + input_file) + + # Select correct schema + schema = int_schema + if "attrank" in input_file.lower() or "pr" in input_file.lower() or "ram" in input_file.lower(): + schema = float_schema + + # Load file to dataframe + ranking_df = spark.read.schema(schema).option('delimiter', '\t').csv(input_file).repartition(num_partitions, 'id') + + # TESTING + # print ("Loaded df sample:") + # ranking_df.show(1000, False) + + # Join scores to synonyms and keep required fields + doi_score_df = synonym_df.join(ranking_df, ['id']).select('doi', 'score', 'class').repartition(num_partitions, 'doi').cache() + # Write output + output_file = output_file_list[offset] + print ("Writing to: " + output_file) + doi_score_df.write.mode('overwrite').option('delimiter','\t').option('header',False).csv(output_file, compression='gzip') + # Free memory? + ranking_df.unpersist(True) + +print ("-----------------------------") +print ("\n\nFinished!\n\n") + + + + + + + + diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/workflow.xml b/dhp-workflows/dhp-impact-indicators/src/main/resources/workflow.xml new file mode 100644 index 000000000..807c32063 --- /dev/null +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/workflow.xml @@ -0,0 +1,600 @@ + + + + + + + + + + + ${resume eq "rankings-start"} + ${resume eq "impulse"} + ${resume eq "rankings-iterative"} + ${resume eq "format-results"} + ${resume eq "map-ids"} + ${resume eq "map-scores"} + ${resume eq "start"} + + + + + + + + + + + ${jobTracker} + + ${nameNode} + + + + + + + + yarn-cluster + cluster + + + Openaire Ranking Graph Creation + + create_openaire_ranking_graph.py + + --executor-memory 20G --executor-cores 4 --driver-memory 20G + --master yarn + --deploy-mode cluster + --conf spark.sql.shuffle.partitions=7680 + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + + + ${openaireDataInput} + + ${currentYear} + + 7680 + + ${openaireGraphInputPath} + + ${wfAppPath}/create_openaire_ranking_graph.py#create_openaire_ranking_graph.py + + + + + + + + + + + + + + + + + + + + + + + ${jobTracker} + + ${nameNode} + + + + yarn-cluster + cluster + + + Spark CC + + CC.py + + --executor-memory 18G --executor-cores 4 --driver-memory 10G + --master yarn + --deploy-mode cluster + --conf spark.sql.shuffle.partitions=7680 + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + + ${openaireGraphInputPath} + + 7680 + + ${wfAppPath}/CC.py#CC.py + + + + + + + + + + + + + + + ${jobTracker} + + ${nameNode} + + + + yarn-cluster + cluster + + + Spark RAM + + TAR.py + + --executor-memory 18G --executor-cores 4 --driver-memory 10G + --master yarn + --deploy-mode cluster + --conf spark.sql.shuffle.partitions=7680 + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + + ${openaireGraphInputPath} + ${ramGamma} + ${currentYear} + RAM + + 7680 + ${γιτ α} + + ${wfAppPath}/TAR.py#TAR.py + + + + + + + + + + + + + + + + + + ${jobTracker} + + ${nameNode} + + + + yarn-cluster + cluster + + + Spark Impulse + + CC.py + + --executor-memory 18G --executor-cores 4 --driver-memory 10G + --master yarn + --deploy-mode cluster + --conf spark.sql.shuffle.partitions=7680 + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + + ${openaireGraphInputPath} + + 7680 + 3 + + ${wfAppPath}/CC.py#CC.py + + + + + + + + + + + + + + + + + + + + ${jobTracker} + + ${nameNode} + + + + + + + + + + + yarn-cluster + cluster + + + Spark Pagerank + + PageRank.py + + --executor-memory 18G --executor-cores 4 --driver-memory 10G + --master yarn + --deploy-mode cluster + --conf spark.sql.shuffle.partitions=7680 + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + + ${openaireGraphInputPath} + ${pageRankAlpha} + ${convergenceError} + ${checkpointDir} + + 7680 + dfs + + ${wfAppPath}/PageRank.py#PageRank.py + + + + + + + + + + + + + + + ${jobTracker} + + ${nameNode} + + + yarn-cluster + cluster + + + Spark AttRank + + AttRank.py + + --executor-memory 18G --executor-cores 4 --driver-memory 10G + --master yarn + --deploy-mode cluster + --conf spark.sql.shuffle.partitions=7680 + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + + ${openaireGraphInputPath} + ${attrankAlpha} + ${attrankBeta} + ${attrankGamma} + ${attrankRho} + ${currentYear} + ${attrankStartYear} + ${convergenceError} + ${checkpointDir} + + 7680 + dfs + + ${wfAppPath}/AttRank.py#AttRank.py + + + + + + + + + + + + + + + + + + + ${jobTracker} + + ${nameNode} + + + /usr/bin/bash + + get_ranking_files.sh + + /${workflowDataDir} + + + ${wfAppPath}/get_ranking_files.sh#get_ranking_files.sh + + + + + + + + + + + + + + + + + + + + + + + + + + ${jobTracker} + + ${nameNode} + + + yarn-cluster + cluster + + + Format Ranking Results JSON + + format_ranking_results.py + + --executor-memory 10G --executor-cores 4 --driver-memory 10G + --master yarn + --deploy-mode cluster + --conf spark.sql.shuffle.partitions=7680 + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + + json + + ${nameNode}/${workflowDataDir}/${wf:actionData('get-file-names')['pr_file']} + ${nameNode}/${workflowDataDir}/${wf:actionData('get-file-names')['attrank_file']} + ${nameNode}/${workflowDataDir}/${wf:actionData('get-file-names')['cc_file']} + ${nameNode}/${workflowDataDir}/${wf:actionData('get-file-names')['impulse_file']} + ${nameNode}/${workflowDataDir}/${wf:actionData('get-file-names')['ram_file']} + + 7680 + + openaire + + ${wfAppPath}/format_ranking_results.py#format_ranking_results.py + + + + + + + + + + + + + + ${jobTracker} + + ${nameNode} + + + yarn-cluster + cluster + + + Format Ranking Results BiP! DB + + format_ranking_results.py + + --executor-memory 10G --executor-cores 4 --driver-memory 10G + --master yarn + --deploy-mode cluster + --conf spark.sql.shuffle.partitions=7680 + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + + zenodo + + ${nameNode}/${workflowDataDir}/${wf:actionData('get-file-names')['pr_file']} + ${nameNode}/${workflowDataDir}/${wf:actionData('get-file-names')['attrank_file']} + ${nameNode}/${workflowDataDir}/${wf:actionData('get-file-names')['cc_file']} + ${nameNode}/${workflowDataDir}/${wf:actionData('get-file-names')['impulse_file']} + ${nameNode}/${workflowDataDir}/${wf:actionData('get-file-names')['ram_file']} + + 7680 + + openaire + + ${wfAppPath}/format_ranking_results.py#format_ranking_results.py + + + + + + + + + + + + + + + + + ${jobTracker} + + ${nameNode} + + + + + + + + yarn-cluster + cluster + + + Openaire-DOI synonym collection + + map_openaire_ids_to_dois.py + + --executor-memory 18G --executor-cores 4 --driver-memory 15G + --master yarn + --deploy-mode cluster + --conf spark.sql.shuffle.partitions=7680 + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + + ${openaireDataInput} + + ${synonymFolder} + + ${wfAppPath}/map_openaire_ids_to_dois.py#map_openaire_ids_to_dois.py + + + + + + + + + + + + + + + + ${jobTracker} + + ${nameNode} + + + + yarn-cluster + cluster + + + Mapping Openaire Scores to DOIs + + map_scores_to_dois.py + + --executor-memory 18G --executor-cores 4 --driver-memory 15G + --master yarn + --deploy-mode cluster + --conf spark.sql.shuffle.partitions=7680 + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + + ${synonymFolder} + + 7680 + + ${nameNode}/${workflowDataDir}/${wf:actionData('get-file-names')['pr_file']} + ${nameNode}/${workflowDataDir}/${wf:actionData('get-file-names')['attrank_file']} + ${nameNode}/${workflowDataDir}/${wf:actionData('get-file-names')['cc_file']} + ${nameNode}/${workflowDataDir}/${wf:actionData('get-file-names')['impulse_file']} + ${nameNode}/${workflowDataDir}/${wf:actionData('get-file-names')['ram_file']} + + + ${wfAppPath}/map_scores_to_dois.py#map_scores_to_dois.py + + + + + + + + + + + + + + + + + + PageRank failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + + + AttRank failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + + + CC failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + + + Impulse failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + + + RAM failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + + + Creation of openaire-graph failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + + + Synonym collection failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + + + Mapping scores to DOIs failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + + From b5c252865c15605e8b6ff154891d82a7544763d8 Mon Sep 17 00:00:00 2001 From: ikanellos Date: Mon, 20 Mar 2023 15:38:36 +0200 Subject: [PATCH 187/449] Add filtering based on citation source --- .../main/resources/create_openaire_ranking_graph.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/create_openaire_ranking_graph.py b/dhp-workflows/dhp-impact-indicators/src/main/resources/create_openaire_ranking_graph.py index 4cffa86a3..cda12a77c 100644 --- a/dhp-workflows/dhp-impact-indicators/src/main/resources/create_openaire_ranking_graph.py +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/create_openaire_ranking_graph.py @@ -126,12 +126,19 @@ oa_objects_df = oa_objects_df.drop('deletedbyinference').drop('invisible').disti # Collect only valid citations i.e., invisible = false & deletedbyinference=false cites_df = spark.read.json(graph_folder + "/relation")\ - .select(F.col('source').alias('citing'), F.col('target').alias('cited'), 'relClass', 'dataInfo.deletedbyinference', 'dataInfo.invisible')\ + .select(F.col('source').alias('citing'), F.col('target').alias('cited'), 'collectedfrom.value', 'relClass', 'dataInfo.deletedbyinference', 'dataInfo.invisible')\ .where( (F.col('relClass') == "Cites") \ & (F.col('dataInfo.deletedbyinference') == "false")\ & (F.col('dataInfo.invisible') == "false"))\ .drop('dataInfo.deletedbyinference').drop('dataInfo.invisible')\ - .repartition(num_partitions, 'citing').drop('relClass') + .repartition(num_partitions, 'citing').drop('relClass')\ + .withColumn('collected_lower', F.expr('transform(collectedfrom.value, x -> lower(x))'))\ + .drop('collectedfrom.value')\ + .where( + (F.array_contains(F.col('collected_lower'), "opencitations")) + | (F.array_contains(F.col('collected_lower'), "crossref")) + | (F.array_contains(F.col('collected_lower'), "mag")) + ).drop('collected_lower') # print ("Cited df has: " + str(cites_df.count()) + " entries") # DEPRECATED From 9dc8f0f05f2d527bccbde92680f864dbb635710f Mon Sep 17 00:00:00 2001 From: ikanellos Date: Tue, 21 Mar 2023 16:14:15 +0200 Subject: [PATCH 188/449] Add ActionSet step --- .../src/main/resources/job.properties | 6 +++ .../src/main/resources/workflow.xml | 51 ++++++++++++++++++- 2 files changed, 55 insertions(+), 2 deletions(-) diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/job.properties b/dhp-workflows/dhp-impact-indicators/src/main/resources/job.properties index 9ad9def21..a902c413f 100644 --- a/dhp-workflows/dhp-impact-indicators/src/main/resources/job.properties +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/job.properties @@ -63,6 +63,9 @@ oozieWorkflowPath=user/ilias.kanellos/workflow_example/ # The directory where the workflow data is/should be stored workflowDataDir=user/ilias.kanellos/ranking_workflow +# Directory where json data containing scores will be output +bipScorePath=${workflowDataDir}/openaire_universe_scores/ + # Directory where dataframes are checkpointed checkpointDir=${nameNode}/${workflowDataDir}/check/ @@ -84,3 +87,6 @@ wfAppPath=${nameNode}/${oozieWorkflowPath} # The following is needed as a property of a workflow oozie.wf.application.path=${wfAppPath} +# Path where the final output should be? +actionSetOutputPath=${workflowDataDir}/bip_actionsets/ + diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/workflow.xml b/dhp-workflows/dhp-impact-indicators/src/main/resources/workflow.xml index 807c32063..d99dc16a2 100644 --- a/dhp-workflows/dhp-impact-indicators/src/main/resources/workflow.xml +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/workflow.xml @@ -552,11 +552,50 @@ - + - + + + + + + + + + + + + + + + + yarn + cluster + Produces the atomic action with the bip finder scores for publications + eu.dnetlib.dhp.actionmanager.bipfinder.SparkAtomicActionScoreJob + dhp-aggregation-${projectVersion}.jar + + --executor-memory=${sparkExecutorMemory} + --executor-cores=${sparkExecutorCores} + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.sql.warehouse.dir=${sparkSqlWarehouseDir} + + --inputPath${bipScorePath} + --outputPath${actionSetOutputPath} + + + + + @@ -597,4 +636,12 @@ Mapping scores to DOIs failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + Deleting output path for actionsets failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + + + ActionSet creation failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + From f992ecb6573b507351773096af78d65faef1baac Mon Sep 17 00:00:00 2001 From: Serafeim Chatzopoulos Date: Tue, 21 Mar 2023 18:03:55 +0200 Subject: [PATCH 189/449] Checkout BIP-Ranker during 'prepare-package' && add it in the oozie-package.tar.gz --- dhp-workflows/dhp-impact-indicators/README.md | 14 ++++++-------- dhp-workflows/dhp-impact-indicators/pom.xml | 19 +++++++++++++++---- .../create_openaire_ranking_graph.py | 0 .../format_ranking_results.py | 0 .../{ => eu.dnetlib}/get_ranking_files.sh | 0 .../resources/{ => eu.dnetlib}/job.properties | 0 .../map_openaire_ids_to_dois.py | 0 .../{ => eu.dnetlib}/map_scores_to_dois.py | 0 .../resources/{ => eu.dnetlib}/workflow.xml | 0 dhp-workflows/pom.xml | 1 + 10 files changed, 22 insertions(+), 12 deletions(-) rename dhp-workflows/dhp-impact-indicators/src/main/resources/{ => eu.dnetlib}/create_openaire_ranking_graph.py (100%) rename dhp-workflows/dhp-impact-indicators/src/main/resources/{ => eu.dnetlib}/format_ranking_results.py (100%) rename dhp-workflows/dhp-impact-indicators/src/main/resources/{ => eu.dnetlib}/get_ranking_files.sh (100%) rename dhp-workflows/dhp-impact-indicators/src/main/resources/{ => eu.dnetlib}/job.properties (100%) rename dhp-workflows/dhp-impact-indicators/src/main/resources/{ => eu.dnetlib}/map_openaire_ids_to_dois.py (100%) rename dhp-workflows/dhp-impact-indicators/src/main/resources/{ => eu.dnetlib}/map_scores_to_dois.py (100%) rename dhp-workflows/dhp-impact-indicators/src/main/resources/{ => eu.dnetlib}/workflow.xml (100%) diff --git a/dhp-workflows/dhp-impact-indicators/README.md b/dhp-workflows/dhp-impact-indicators/README.md index 14f489da3..45a4701e7 100644 --- a/dhp-workflows/dhp-impact-indicators/README.md +++ b/dhp-workflows/dhp-impact-indicators/README.md @@ -1,4 +1,4 @@ -# Ranking Workflow for Openaire Publications +# Ranking Workflow for OpenAIRE Publications This project contains the files for running a paper ranking workflow on the openaire graph using apache oozie. All scripts are written in python and the project setup follows the typical oozie workflow structure: @@ -7,17 +7,15 @@ All scripts are written in python and the project setup follows the typical oozi - a job.properties file specifying parameter values for the parameters used by the workflow - a set of python scripts used by the workflow -**NOTE**: the workflow depends on the external library of ranking scripts called BiP! Ranker. +**NOTE**: the workflow depends on the external library of ranking scripts called [BiP! Ranker](https://github.com/athenarc/Bip-Ranker). You can check out a specific tag/release of BIP! Ranker using maven, as described in the following section. -## Check out a specific tag/release of BIP-Ranker +## Build and deploy -* Edit the `scmVersion` of the maven-scm-plugin in the pom.xml to point to the tag/release version you want to check out. - -* Then, use maven to perform the checkout: +Use the following command for packaging: ``` -mvn scm:checkout +mvn package -Poozie-package -Dworkflow.source.dir=eu/dnetlib/dhp/oa/graph/impact_indicators -DskipTests ``` -* The code should be visible under `src/main/bip-ranker` folder. \ No newline at end of file +Note: edit the property `bip.ranker.tag` of the `pom.xml` file to specify the tag of [BIP-Ranker](https://github.com/athenarc/Bip-Ranker) that you want to use. diff --git a/dhp-workflows/dhp-impact-indicators/pom.xml b/dhp-workflows/dhp-impact-indicators/pom.xml index b510635a6..644b82c7b 100644 --- a/dhp-workflows/dhp-impact-indicators/pom.xml +++ b/dhp-workflows/dhp-impact-indicators/pom.xml @@ -5,9 +5,8 @@ 4.0.0 eu.dnetlib.dhp - dhp + dhp-workflows 1.2.5-SNAPSHOT - ../pom.xml dhp-impact-indicators @@ -16,6 +15,9 @@ 8 8 UTF-8 + + + v1.0.0 @@ -32,9 +34,18 @@ connection tag - v1.0.0 - ${project.build.directory}/../src/main/bip-ranker + ${bip.ranker.tag} + ${project.build.directory}/${oozie.package.file.name}/${oozieAppDir}/bip-ranker + + + checkout-bip-ranker + prepare-package + + checkout + + + diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/create_openaire_ranking_graph.py b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu.dnetlib/create_openaire_ranking_graph.py similarity index 100% rename from dhp-workflows/dhp-impact-indicators/src/main/resources/create_openaire_ranking_graph.py rename to dhp-workflows/dhp-impact-indicators/src/main/resources/eu.dnetlib/create_openaire_ranking_graph.py diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/format_ranking_results.py b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu.dnetlib/format_ranking_results.py similarity index 100% rename from dhp-workflows/dhp-impact-indicators/src/main/resources/format_ranking_results.py rename to dhp-workflows/dhp-impact-indicators/src/main/resources/eu.dnetlib/format_ranking_results.py diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/get_ranking_files.sh b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu.dnetlib/get_ranking_files.sh similarity index 100% rename from dhp-workflows/dhp-impact-indicators/src/main/resources/get_ranking_files.sh rename to dhp-workflows/dhp-impact-indicators/src/main/resources/eu.dnetlib/get_ranking_files.sh diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/job.properties b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu.dnetlib/job.properties similarity index 100% rename from dhp-workflows/dhp-impact-indicators/src/main/resources/job.properties rename to dhp-workflows/dhp-impact-indicators/src/main/resources/eu.dnetlib/job.properties diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/map_openaire_ids_to_dois.py b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu.dnetlib/map_openaire_ids_to_dois.py similarity index 100% rename from dhp-workflows/dhp-impact-indicators/src/main/resources/map_openaire_ids_to_dois.py rename to dhp-workflows/dhp-impact-indicators/src/main/resources/eu.dnetlib/map_openaire_ids_to_dois.py diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/map_scores_to_dois.py b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu.dnetlib/map_scores_to_dois.py similarity index 100% rename from dhp-workflows/dhp-impact-indicators/src/main/resources/map_scores_to_dois.py rename to dhp-workflows/dhp-impact-indicators/src/main/resources/eu.dnetlib/map_scores_to_dois.py diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/workflow.xml b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu.dnetlib/workflow.xml similarity index 100% rename from dhp-workflows/dhp-impact-indicators/src/main/resources/workflow.xml rename to dhp-workflows/dhp-impact-indicators/src/main/resources/eu.dnetlib/workflow.xml diff --git a/dhp-workflows/pom.xml b/dhp-workflows/pom.xml index 541d59007..d054ba39b 100644 --- a/dhp-workflows/pom.xml +++ b/dhp-workflows/pom.xml @@ -38,6 +38,7 @@ dhp-usage-raw-data-update dhp-broker-events dhp-doiboost + dhp-impact-indicators From 3e8a4cf9521fdab068e47f48536e707d14f0ea18 Mon Sep 17 00:00:00 2001 From: Serafeim Chatzopoulos Date: Tue, 21 Mar 2023 18:24:12 +0200 Subject: [PATCH 190/449] Rearrange resources folder structure --- .../create_openaire_ranking_graph.py | 11 +++- .../oozie_app}/format_ranking_results.py | 0 .../oozie_app}/get_ranking_files.sh | 0 .../oozie_app}/job.properties | 6 +++ .../oozie_app}/map_openaire_ids_to_dois.py | 0 .../oozie_app}/map_scores_to_dois.py | 0 .../impact_indicators/oozie_app}/workflow.xml | 51 ++++++++++++++++++- 7 files changed, 64 insertions(+), 4 deletions(-) rename dhp-workflows/dhp-impact-indicators/src/main/resources/{eu.dnetlib => eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app}/create_openaire_ranking_graph.py (95%) rename dhp-workflows/dhp-impact-indicators/src/main/resources/{eu.dnetlib => eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app}/format_ranking_results.py (100%) rename dhp-workflows/dhp-impact-indicators/src/main/resources/{eu.dnetlib => eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app}/get_ranking_files.sh (100%) rename dhp-workflows/dhp-impact-indicators/src/main/resources/{eu.dnetlib => eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app}/job.properties (93%) rename dhp-workflows/dhp-impact-indicators/src/main/resources/{eu.dnetlib => eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app}/map_openaire_ids_to_dois.py (100%) rename dhp-workflows/dhp-impact-indicators/src/main/resources/{eu.dnetlib => eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app}/map_scores_to_dois.py (100%) rename dhp-workflows/dhp-impact-indicators/src/main/resources/{eu.dnetlib => eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app}/workflow.xml (93%) diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu.dnetlib/create_openaire_ranking_graph.py b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/create_openaire_ranking_graph.py similarity index 95% rename from dhp-workflows/dhp-impact-indicators/src/main/resources/eu.dnetlib/create_openaire_ranking_graph.py rename to dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/create_openaire_ranking_graph.py index 4cffa86a3..cda12a77c 100644 --- a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu.dnetlib/create_openaire_ranking_graph.py +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/create_openaire_ranking_graph.py @@ -126,12 +126,19 @@ oa_objects_df = oa_objects_df.drop('deletedbyinference').drop('invisible').disti # Collect only valid citations i.e., invisible = false & deletedbyinference=false cites_df = spark.read.json(graph_folder + "/relation")\ - .select(F.col('source').alias('citing'), F.col('target').alias('cited'), 'relClass', 'dataInfo.deletedbyinference', 'dataInfo.invisible')\ + .select(F.col('source').alias('citing'), F.col('target').alias('cited'), 'collectedfrom.value', 'relClass', 'dataInfo.deletedbyinference', 'dataInfo.invisible')\ .where( (F.col('relClass') == "Cites") \ & (F.col('dataInfo.deletedbyinference') == "false")\ & (F.col('dataInfo.invisible') == "false"))\ .drop('dataInfo.deletedbyinference').drop('dataInfo.invisible')\ - .repartition(num_partitions, 'citing').drop('relClass') + .repartition(num_partitions, 'citing').drop('relClass')\ + .withColumn('collected_lower', F.expr('transform(collectedfrom.value, x -> lower(x))'))\ + .drop('collectedfrom.value')\ + .where( + (F.array_contains(F.col('collected_lower'), "opencitations")) + | (F.array_contains(F.col('collected_lower'), "crossref")) + | (F.array_contains(F.col('collected_lower'), "mag")) + ).drop('collected_lower') # print ("Cited df has: " + str(cites_df.count()) + " entries") # DEPRECATED diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu.dnetlib/format_ranking_results.py b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/format_ranking_results.py similarity index 100% rename from dhp-workflows/dhp-impact-indicators/src/main/resources/eu.dnetlib/format_ranking_results.py rename to dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/format_ranking_results.py diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu.dnetlib/get_ranking_files.sh b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/get_ranking_files.sh similarity index 100% rename from dhp-workflows/dhp-impact-indicators/src/main/resources/eu.dnetlib/get_ranking_files.sh rename to dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/get_ranking_files.sh diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu.dnetlib/job.properties b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/job.properties similarity index 93% rename from dhp-workflows/dhp-impact-indicators/src/main/resources/eu.dnetlib/job.properties rename to dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/job.properties index 9ad9def21..a902c413f 100644 --- a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu.dnetlib/job.properties +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/job.properties @@ -63,6 +63,9 @@ oozieWorkflowPath=user/ilias.kanellos/workflow_example/ # The directory where the workflow data is/should be stored workflowDataDir=user/ilias.kanellos/ranking_workflow +# Directory where json data containing scores will be output +bipScorePath=${workflowDataDir}/openaire_universe_scores/ + # Directory where dataframes are checkpointed checkpointDir=${nameNode}/${workflowDataDir}/check/ @@ -84,3 +87,6 @@ wfAppPath=${nameNode}/${oozieWorkflowPath} # The following is needed as a property of a workflow oozie.wf.application.path=${wfAppPath} +# Path where the final output should be? +actionSetOutputPath=${workflowDataDir}/bip_actionsets/ + diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu.dnetlib/map_openaire_ids_to_dois.py b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/map_openaire_ids_to_dois.py similarity index 100% rename from dhp-workflows/dhp-impact-indicators/src/main/resources/eu.dnetlib/map_openaire_ids_to_dois.py rename to dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/map_openaire_ids_to_dois.py diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu.dnetlib/map_scores_to_dois.py b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/map_scores_to_dois.py similarity index 100% rename from dhp-workflows/dhp-impact-indicators/src/main/resources/eu.dnetlib/map_scores_to_dois.py rename to dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/map_scores_to_dois.py diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu.dnetlib/workflow.xml b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml similarity index 93% rename from dhp-workflows/dhp-impact-indicators/src/main/resources/eu.dnetlib/workflow.xml rename to dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml index 807c32063..d99dc16a2 100644 --- a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu.dnetlib/workflow.xml +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml @@ -552,11 +552,50 @@ - + - + + + + + + + + + + + + + + + + yarn + cluster + Produces the atomic action with the bip finder scores for publications + eu.dnetlib.dhp.actionmanager.bipfinder.SparkAtomicActionScoreJob + dhp-aggregation-${projectVersion}.jar + + --executor-memory=${sparkExecutorMemory} + --executor-cores=${sparkExecutorCores} + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.sql.warehouse.dir=${sparkSqlWarehouseDir} + + --inputPath${bipScorePath} + --outputPath${actionSetOutputPath} + + + + + @@ -597,4 +636,12 @@ Mapping scores to DOIs failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + Deleting output path for actionsets failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + + + ActionSet creation failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + From 102aa5ab81bf2acf6b758b0255d4383f050d31d6 Mon Sep 17 00:00:00 2001 From: Serafeim Chatzopoulos Date: Tue, 21 Mar 2023 19:25:29 +0200 Subject: [PATCH 191/449] Add dependency to dhp-aggregation --- dhp-workflows/dhp-impact-indicators/pom.xml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/dhp-workflows/dhp-impact-indicators/pom.xml b/dhp-workflows/dhp-impact-indicators/pom.xml index 644b82c7b..a9eb0a4a1 100644 --- a/dhp-workflows/dhp-impact-indicators/pom.xml +++ b/dhp-workflows/dhp-impact-indicators/pom.xml @@ -49,4 +49,14 @@ + + + + eu.dnetlib.dhp + dhp-aggregation + ${projectVersion} + compile + + + \ No newline at end of file From 297eb207a5ce41335182b23422987b388b4f8a4c Mon Sep 17 00:00:00 2001 From: miconis Date: Tue, 4 Apr 2023 17:10:37 +0200 Subject: [PATCH 192/449] minor change in the author match which now can compute count and percentage --- .../src/main/java/eu/dnetlib/pace/tree/AuthorsMatch.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AuthorsMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AuthorsMatch.java index 6307cd576..c1b536ecd 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AuthorsMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AuthorsMatch.java @@ -26,6 +26,7 @@ public class AuthorsMatch extends AbstractComparator { private double FULLNAME_THRESHOLD; private String MODE; //full or surname private int SIZE_THRESHOLD; + private String TYPE; //count or percentage private int common; public AuthorsMatch(Map params){ @@ -37,6 +38,7 @@ public class AuthorsMatch extends AbstractComparator { NAME_THRESHOLD = Double.parseDouble(params.getOrDefault("name_th", "0.95")); FULLNAME_THRESHOLD = Double.parseDouble(params.getOrDefault("fullname_th", "0.9")); SIZE_THRESHOLD = Integer.parseInt(params.getOrDefault("size_th", "20")); + TYPE = params.getOrDefault("type", "percentage"); common = 0; } @@ -123,7 +125,12 @@ public class AuthorsMatch extends AbstractComparator { //normalization factor to compute the score int normFactor = aList.size() == bList.size() ? aList.size() : (aList.size() + bList.size() - common); - return (double)common / normFactor; + if(TYPE.equals("percentage")) { + return (double) common / normFactor; + } + else { + return (double) common; + } } public boolean compareSurname(Person p1, Person p2) { From 7256c8d3c71c632ae0537e2c5ce585da738662b5 Mon Sep 17 00:00:00 2001 From: Serafeim Chatzopoulos Date: Fri, 7 Apr 2023 16:30:12 +0300 Subject: [PATCH 193/449] Add script for aggregating impact indicators at the project level --- .../oozie_app/job.properties | 3 + .../oozie_app/projects_impact.py | 109 ++++++++++++++++++ .../impact_indicators/oozie_app/workflow.xml | 70 ++++++++++- 3 files changed, 176 insertions(+), 6 deletions(-) create mode 100644 dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/projects_impact.py diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/job.properties b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/job.properties index a902c413f..f9f5519cc 100644 --- a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/job.properties +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/job.properties @@ -90,3 +90,6 @@ oozie.wf.application.path=${wfAppPath} # Path where the final output should be? actionSetOutputPath=${workflowDataDir}/bip_actionsets/ +# The directory to store project impact indicators +projectImpactIndicatorsOutput=${workflowDataDir}/project_indicators + diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/projects_impact.py b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/projects_impact.py new file mode 100644 index 000000000..f01c92a0d --- /dev/null +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/projects_impact.py @@ -0,0 +1,109 @@ +import sys +from pyspark.sql import SparkSession +from pyspark import SparkConf, SparkContext +import pyspark.sql.functions as F +from pyspark.sql.types import StringType, IntegerType, StructType, StructField + +if len(sys.argv) < 8: + print("Usage: projects_impact.py ") + sys.exit(-1) + +appName = 'Project Impact Indicators' +conf = SparkConf().setAppName(appName) +sc = SparkContext(conf = conf) +spark = SparkSession.builder.appName(appName).getOrCreate() +sc.setLogLevel('OFF') + +# input parameters +relations_fd = sys.argv[1] +influence_fd = sys.argv[2] +popularity_fd = sys.argv[3] +cc_fd = sys.argv[4] +impulse_fd = sys.argv[5] +num_partitions = int(sys.argv[6]) +output_dir = sys.argv[7] + +# schema for impact indicator files +impact_files_schema = StructType([ + StructField('resultId', StringType(), False), + StructField('score', IntegerType(), False), + StructField('class', StringType(), False), +]) + +# list of impact indicators +impact_indicators = [ + ('influence', influence_fd, 'class'), + ('popularity', popularity_fd, 'class'), + ('impulse', impulse_fd, 'score'), + ('citation_count', cc_fd, 'score') +] + +''' + * Read impact indicator file and return a dataframe with the following schema: + * resultId: String + * indicator_name: Integer +''' +def read_df(fd, indicator_name, column_name): + return spark.read.schema(impact_files_schema)\ + .option('delimiter', '\t')\ + .option('header', False)\ + .csv(fd)\ + .select('resultId', F.col(column_name).alias(indicator_name))\ + .repartition(num_partitions, 'resultId') + +# Print dataframe schema, first 5 rows, and count +def print_df(df): + df.show(50) + df.printSchema() + print(df.count()) + +# Sets a null value to the column if the value is equal to the given value +def set_class_value_to_null(column, value): + return F.when(column != value, column).otherwise(F.lit(None)) + +# load and filter Project-to-Result relations +print("Reading relations") +relations = spark.read.json(relations_fd)\ + .select(F.col('source').alias('projectId'), F.col('target').alias('resultId'), 'relClass', 'dataInfo.deletedbyinference', 'dataInfo.invisible')\ + .where( (F.col('relClass') == 'produces') \ + & (F.col('deletedbyinference') == "false")\ + & (F.col('invisible') == "false"))\ + .drop('deletedbyinference')\ + .drop('invisible')\ + .drop('relClass')\ + .repartition(num_partitions, 'resultId') + +for indicator_name, fd, column_name in impact_indicators: + + print("Reading {} '{}' field from file".format(indicator_name, column_name)) + df = read_df(fd, indicator_name, column_name) + + # sets a zero value to the indicator column if the value is C5 + if (column_name == 'class'): + df = df.withColumn(indicator_name, F.when(F.col(indicator_name).isin("C5"), 0).otherwise(1)) + + # print_df(df) + + print("Joining {} to relations".format(indicator_name)) + + # NOTE: we use inner join because we want to keep only the results that have an impact score + # also note that all impact scores have the same set of results + relations = relations.join(df, 'resultId', 'inner')\ + .repartition(num_partitions, 'resultId') + +# uncomment to print non-null values count for each indicator +# for indicator_name, fd, column_name in impact_indicators: +# print("Counting non null values for {}".format(indicator_name)) +# print(relations.filter(F.col(indicator_name).isNotNull()).count()) + +sum the impact indicator values for each project +relations.groupBy('projectId')\ + .agg(\ + F.sum('influence').alias('influence'),\ + F.sum('popularity').alias('popularity'),\ + F.sum('impulse').alias('impulse'),\ + F.sum('citation_count').alias('citation_count')\ + )\ + .write.mode("overwrite")\ + .option("delimiter", "\t")\ + .csv(output_dir, compression="gzip") \ No newline at end of file diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml index d99dc16a2..8cd0b0d5d 100644 --- a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml @@ -15,6 +15,8 @@ ${resume eq "map-ids"} ${resume eq "map-scores"} ${resume eq "start"} + ${resume eq "projects-impact"} + @@ -334,7 +336,7 @@ ${nameNode} - + /usr/bin/bash get_ranking_files.sh @@ -558,7 +560,7 @@ - + @@ -592,11 +594,63 @@ --inputPath${bipScorePath} --outputPath${actionSetOutputPath} - + - - + + + + + + + ${jobTracker} + + ${nameNode} + + yarn-cluster + cluster + + + Spark Pagerank + + PageRank.py + + --executor-memory 18G --executor-cores 4 --driver-memory 10G + --master yarn + --deploy-mode cluster + --conf spark.sql.shuffle.partitions=7680 + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + + + + + ${openaireDataInput}/relations + + + ${nameNode}/${workflowDataDir}/${wf:actionData('get-file-names')['pr_file']} + ${nameNode}/${workflowDataDir}/${wf:actionData('get-file-names')['attrank_file']} + ${nameNode}/${workflowDataDir}/${wf:actionData('get-file-names')['cc_file']} + ${nameNode}/${workflowDataDir}/${wf:actionData('get-file-names')['impulse_file']} + + + 7680 + + ${projectImpactIndicatorsOutput} + + + ${wfAppPath}/projects_impact.py#projects_impact.py + + + + + + + + + @@ -642,6 +696,10 @@ ActionSet creation failed, error message[${wf:errorMessage(wf:lastErrorNode())}] - + + + + Calculating project impact indicators failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + From cb595c87bbada77a38a8e1851e361b1e1f88ddaa Mon Sep 17 00:00:00 2001 From: miconis Date: Mon, 17 Apr 2023 11:06:27 +0200 Subject: [PATCH 194/449] implementation of the support for authors deduplication: cosinesimilarity comparator and double array json parser --- .../java/eu/dnetlib/pace/config/Type.java | 2 +- .../eu/dnetlib/pace/model/FieldValue.java | 2 + .../eu/dnetlib/pace/model/FieldValueImpl.java | 10 +- .../eu/dnetlib/pace/tree/AuthorsMatch.java | 2 +- .../dnetlib/pace/tree/CosineSimilarity.java | 53 ++++++++++ .../eu/dnetlib/pace/tree/StringListMatch.java | 11 ++- .../pace/util/BlockProcessorForTesting.java | 1 - .../eu/dnetlib/pace/util/MapDocumentUtil.java | 38 +++++++- .../eu/dnetlib/pace/AbstractPaceTest.java | 4 + .../pace/comparators/ComparatorTest.java | 15 +++ .../eu/dnetlib/pace/config/ConfigTest.java | 12 +-- ...r.test.conf.json => author.fdup.conf.json} | 96 ++++++++++++------- .../eu/dnetlib/pace/config/author.json | 2 +- 13 files changed, 197 insertions(+), 51 deletions(-) create mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/CosineSimilarity.java rename dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/{author.test.conf.json => author.fdup.conf.json} (50%) diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Type.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Type.java index 33ae4015f..20981c427 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Type.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Type.java @@ -1,5 +1,5 @@ package eu.dnetlib.pace.config; public enum Type { - String, Int, List, JSON, URL, StringConcat + String, Int, List, JSON, URL, StringConcat, DoubleArray } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldValue.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldValue.java index 861332729..ebe474363 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldValue.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldValue.java @@ -20,4 +20,6 @@ public interface FieldValue extends Field { */ public void setValue(final Object value); + public double[] doubleArrayValue(); + } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldValueImpl.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldValueImpl.java index 0a72c07c6..a235315d9 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldValueImpl.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldValueImpl.java @@ -58,8 +58,10 @@ public class FieldValueImpl extends AbstractField implements FieldValue { throw new RuntimeException(value.toString()); } case URL: - String str = value.toString(); - return StringUtils.isBlank(str) || !isValidURL(str); + String str = value.toString(); + return StringUtils.isBlank(str) || !isValidURL(str); + case DoubleArray: + return doubleArrayValue().length==0; default: return true; } @@ -116,6 +118,10 @@ public class FieldValueImpl extends AbstractField implements FieldValue { // } } + public double[] doubleArrayValue() { + return (double[])getValue(); + } + /* * (non-Javadoc) * diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AuthorsMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AuthorsMatch.java index c1b536ecd..33f86d85d 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AuthorsMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AuthorsMatch.java @@ -52,7 +52,7 @@ public class AuthorsMatch extends AbstractComparator { if (a.isEmpty() || b.isEmpty()) return -1; - if (((FieldList) a).size() > SIZE_THRESHOLD || ((FieldList) a).size() > SIZE_THRESHOLD) + if (((FieldList) a).size() > SIZE_THRESHOLD || ((FieldList) b).size() > SIZE_THRESHOLD) return 1.0; List aList = ((FieldList) a).stringList().stream().map(author -> new Person(author, false)).collect(Collectors.toList()); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/CosineSimilarity.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/CosineSimilarity.java new file mode 100644 index 000000000..5d441771e --- /dev/null +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/CosineSimilarity.java @@ -0,0 +1,53 @@ +package eu.dnetlib.pace.tree; + +import eu.dnetlib.pace.config.Config; +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.FieldList; +import eu.dnetlib.pace.model.FieldValueImpl; +import eu.dnetlib.pace.model.Person; +import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.ComparatorClass; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@ComparatorClass("cosineSimilarity") +public class CosineSimilarity extends AbstractComparator { + + Map params; + + public CosineSimilarity(Map params) { + super(params); + } + + @Override + public double compare(final Field a, final Field b, final Config conf) { + + if (a.isEmpty() || b.isEmpty()) + return -1; + + double[] aVector = ((FieldValueImpl) a).doubleArrayValue(); + double[] bVector = ((FieldValueImpl) b).doubleArrayValue(); + + return cosineSimilarity(aVector, bVector); + } + + double cosineSimilarity(double[] a, double[] b) { + double dotProduct = 0; + double normASum = 0; + double normBSum = 0; + + for(int i = 0; i < a.length; i ++) { + dotProduct += a[i] * b[i]; + normASum += a[i] * a[i]; + normBSum += b[i] * b[i]; + } + + double eucledianDist = Math.sqrt(normASum) * Math.sqrt(normBSum); + return dotProduct / eucledianDist; + } + + +} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/StringListMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/StringListMatch.java index 3ed98a04c..e67a7ea0b 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/StringListMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/StringListMatch.java @@ -19,9 +19,13 @@ public class StringListMatch extends AbstractComparator { private static final Log log = LogFactory.getLog(StringListMatch.class); private Map params; + final private String TYPE; //percentage or count + public StringListMatch(final Map params) { super(params); this.params = params; + + TYPE = params.getOrDefault("type", "percentage"); } @Override @@ -31,7 +35,7 @@ public class StringListMatch extends AbstractComparator { final Set pb = new HashSet<>(((FieldList) b).stringList()); if (pa.isEmpty() || pb.isEmpty()) { - return -1; //return undefined if one of the two lists of pids is empty + return -1; //return undefined if one of the two lists is empty } int incommon = Sets.intersection(pa, pb).size(); @@ -41,7 +45,10 @@ public class StringListMatch extends AbstractComparator { return 0.0; } - return (double)incommon / (incommon + simDiff); + if(TYPE.equals("percentage")) + return (double)incommon / (incommon + simDiff); + else + return incommon; } } \ No newline at end of file diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessorForTesting.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessorForTesting.java index 174c5c17e..24264c0bf 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessorForTesting.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessorForTesting.java @@ -244,6 +244,5 @@ public class BlockProcessorForTesting { final String type = dedupConf.getWf().getEntityType(); context.emit(type, from, to); - context.emit(type, to, from); } } diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java index f9bd9399b..cc801068b 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java @@ -7,12 +7,10 @@ import com.jayway.jsonpath.JsonPath; import com.jayway.jsonpath.Option; import eu.dnetlib.pace.config.DedupConfig; import eu.dnetlib.pace.config.Type; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.model.FieldListImpl; -import eu.dnetlib.pace.model.FieldValueImpl; -import eu.dnetlib.pace.model.MapDocument; +import eu.dnetlib.pace.model.*; import net.minidev.json.JSONArray; +import java.math.BigDecimal; import java.util.*; import java.util.function.Predicate; import java.util.stream.Collectors; @@ -46,6 +44,14 @@ public class MapDocumentUtil { .forEach(fi::add); stringField.put(fdef.getName(), fi); break; + case DoubleArray: + stringField.put( + fdef.getName(), + new FieldValueImpl(Type.DoubleArray, + fdef.getName(), + getJPathArray(fdef.getPath(), json)) + ); + break; case StringConcat: String[] jpaths = fdef.getPath().split("\\|\\|\\|"); stringField.put( @@ -115,6 +121,30 @@ public class MapDocumentUtil { } } + public static double[] getJPathArray(final String jsonPath, final String json) { + try { + Object o = JsonPath.read(json, jsonPath); + if (o instanceof double[]) + return (double[]) o; + if (o instanceof JSONArray) { + Object[] objects = ((JSONArray) o).toArray(); + double[] array = new double[objects.length]; + for (int i = 0; i < objects.length; i++) { + if (objects[i] instanceof BigDecimal) + array[i] = ((BigDecimal)objects[i]).doubleValue(); + else + array[i] = (double) objects[i]; + } + return array; + } + return new double[0]; + } + catch (Exception e) { + e.printStackTrace(); + return new double[0]; + } + } + public static String truncateValue(String value, int length) { if (value == null) diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/AbstractPaceTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/AbstractPaceTest.java index 14e1e8d0d..b98fd989b 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/AbstractPaceTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/AbstractPaceTest.java @@ -36,6 +36,10 @@ public abstract class AbstractPaceTest extends AbstractPaceFunctions { return new FieldValueImpl(Type.URL, "url", s); } + protected Field array(final double[] a) { + return new FieldValueImpl(Type.DoubleArray, "array", a); + } + protected Field createFieldList(List strings, String fieldName){ List fieldValueStream = strings.stream().map(s -> new FieldValueImpl(Type.String, fieldName, s)).collect(Collectors.toList()); diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java index b79305b92..b19d77e5c 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java @@ -2,7 +2,9 @@ package eu.dnetlib.pace.comparators; import eu.dnetlib.pace.AbstractPaceTest; import eu.dnetlib.pace.clustering.NGramUtils; +import eu.dnetlib.pace.config.Type; import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.FieldValueImpl; import eu.dnetlib.pace.tree.*; import eu.dnetlib.pace.config.DedupConfig; @@ -284,5 +286,18 @@ public class ComparatorTest extends AbstractPaceTest { } + @Test + public void cosineSimilarity() { + + CosineSimilarity cosineSimilarity = new CosineSimilarity(params); + + Field a = new FieldValueImpl(Type.DoubleArray, "array", new double[]{1,2,3}); + Field b = new FieldValueImpl(Type.DoubleArray, "array", new double[]{1,2,3}); + + double compare = cosineSimilarity.compare(a, b, conf); + + System.out.println("compare = " + compare); + } + } diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java index 56d8530be..4a2a062a1 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java @@ -7,6 +7,7 @@ import eu.dnetlib.pace.clustering.ClusteringClass; import eu.dnetlib.pace.clustering.ClusteringCombiner; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.model.FieldList; +import eu.dnetlib.pace.model.FieldValue; import eu.dnetlib.pace.model.MapDocument; import eu.dnetlib.pace.tree.JsonListMatch; import eu.dnetlib.pace.tree.support.AggType; @@ -20,10 +21,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; @@ -104,15 +102,15 @@ public class ConfigTest extends AbstractPaceTest { } @Test - public void asMapDocumentTest2() { + public void authorAsMapDocument() { - DedupConfig dedupConf = DedupConfig.load(readFromClasspath("author.test.conf.json")); + DedupConfig dedupConf = DedupConfig.load(readFromClasspath("author.fdup.conf.json")); final String json = readFromClasspath("author.json"); final MapDocument mapDocument = MapDocumentUtil.asMapDocumentWithJPath(dedupConf, json); - System.out.println("mapDocument = " + mapDocument.getFieldMap().get("coauthors").stringValue()); + System.out.println("mapDocument = " + Arrays.toString(((FieldValue) mapDocument.getFieldMap().get("topics")).doubleArrayValue())); } diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/author.test.conf.json b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/author.fdup.conf.json similarity index 50% rename from dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/author.test.conf.json rename to dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/author.fdup.conf.json index 0ac29f875..c7d158ce6 100644 --- a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/author.test.conf.json +++ b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/author.fdup.conf.json @@ -29,71 +29,103 @@ }, "pace": { "clustering" : [ - { "name" : "personClustering", "fields" : [ "fullname" ], "params" : {} }, - { "name" : "personHash", "fields" : [ "fullname" ], "params" : {} } + { "name" : "lnfi", "fields" : [ "fullname" ], "params" : {} } ], "decisionTree": { "start": { "fields": [ { - "field": "year", - "comparator": "numbersComparator", - "weight": 1, - "countIfUndefined": "false", + "field": "orcid", + "comparator": "exactMatch", + "weight": 1.0, + "countIfUndefined": "true", "params": {} } ], - "threshold": 50, + "threshold": 1.0, "aggregation": "MAX", - "positive": "NO_MATCH", - "negative": "surnames", - "undefined": "surnames", + "positive": "MATCH", + "negative": "NO_MATCH", + "undefined": "orcids", "ignoreUndefined": "true" }, - "surnames": { + "orcids": { + "fields": [ + { + "field": "orcids", + "comparator": "stringListMatch", + "weight": 1.0, + "countIfUndefined": "true", + "params": {"type": "count"} + } + ], + "threshold": 3.0, + "aggregation": "MAX", + "positive": "MATCH", + "negative": "coauthors", + "undefined": "coauthors", + "ignoreUndefined": "true" + }, + "coauthors": { "fields": [ { "field": "coauthors", "comparator": "authorsMatch", "weight": 1.0, - "countIfUndefined": "false", - "params": { - "surname_th": 0.75, - "fullname_th": 0.75, - "size_th": 20, - "mode": "surname" - } + "countIfUndefined": "true", + "params": {"type": "count"} } ], - "threshold": 0.6, + "threshold": 1.0, + "aggregation": "MAX", + "positive": "topicsMatch", + "negative": "NO_MATCH", + "undefined": "topicsMatch", + "ignoreUndefined": "true" + }, + "topicsMatch": { + "fields": [ + { + "field": "topics", + "comparator": "cosineSimilarity", + "weight": 1.0, + "countIfUndefined": "true", + "params": {} + } + ], + "threshold": 1.0, "aggregation": "MAX", "positive": "MATCH", "negative": "NO_MATCH", - "undefined": "MATCH", - "ignoreUndefined": "true" + "undefined": "NO_MATCH", + "ignoreUndefined": "false" } }, "model": [ + { + "name": "topics", + "type": "DoubleArray", + "path": "$.topics" + }, { "name": "fullname", "type": "String", - "path": "$.name" + "path": "$.fullname" + }, + { + "name": "orcid", + "type": "String", + "path": "$.orcid" }, { "name": "coauthors", "type": "List", - "path": "$.coauthors[*].name", - "size": 200 + "path": "$.coAuthors[*].fullname" }, { - "name": "year", - "type": "String", - "path": "$.publication.year" - }, - { - "name": "title", - "type": "String", - "path": "$.publication.title" + "name": "orcids", + "type": "List", + "path": "$.coAuthors[*].orcid" } ], "blacklists": {}, diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/author.json b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/author.json index 62c6e9185..f867afda1 100644 --- a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/author.json +++ b/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/author.json @@ -1 +1 @@ -{"id": "f3389e7c8af1d806c06e2ab51f28a4b4", "name": "Aczél, János", "shortname": "Aczél, J.", "pid": "aczel.janos", "coauthors": [], "publication": {"year": "1955", "title": "L\\\"osung der Vektor-Funktionalgleichung der homogenen und inhomogenen $n$-dimensionalen einparametrigen ``Translation'' der erzeugenden Funktion von Kettenreaktionen und des station\\\"aren und nichtstation\\\"aren Bewegungsintegrals", "venue": "Acta Math. Acad. Sci. Hung. 6, 131-140 (1955)."}} \ No newline at end of file +{"fullname":"Zaragoza, Maria Cleofé","firstname":"Maria Cleofé","lastname":"Zaragoza","coAuthors":[{"fullname":"Cambras, Trinitat","lastname":"Cambras","firstname":"Trinitat","orcid":"0000-0002-9009-4690"},{"fullname":"Castro-Marrero, Jesús","lastname":"Castro-Marrero","firstname":"Jesús","orcid":""},{"fullname":"Díez-Noguera, Antoni","lastname":"Díez-Noguera","firstname":"Antoni","orcid":""},{"fullname":"Alegre, José","lastname":"Alegre","firstname":"José","orcid":"0000-0002-7582-7585"}],"topics":[0.9522090839562252,0.04779091604377485],"orcid":"0000-0002-9797-0219","id":"author::1a10826c83c7f9f0dcebe7df05e37a2a","pubId":"50|pmid________::db7fd19db5a620eafad40cfb97f9690d"} \ No newline at end of file From 23f58a86f177ac7fcbef5b3d5bff28e654299f07 Mon Sep 17 00:00:00 2001 From: Serafeim Chatzopoulos Date: Tue, 18 Apr 2023 12:26:01 +0300 Subject: [PATCH 195/449] Change jar param in project impact indicators action --- .../dhp/oa/graph/impact_indicators/oozie_app/workflow.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml index 8cd0b0d5d..ac44d5c05 100644 --- a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml @@ -611,9 +611,9 @@ cluster - Spark Pagerank + Project Impact Indicators - PageRank.py + projects_impact.py --executor-memory 18G --executor-cores 4 --driver-memory 10G --master yarn From ee04cf92bf4030f9be3b4a34703198c3dd5ce424 Mon Sep 17 00:00:00 2001 From: Serafeim Chatzopoulos Date: Wed, 26 Apr 2023 20:23:46 +0300 Subject: [PATCH 196/449] Add actionsets for project impact indicators --- .../bipfinder/SparkAtomicActionScoreJob.java | 63 +++++++---- .../score/deserializers/BipProjectModel.java | 69 ++++++++++++ .../deserializers/BipResultModel.java} | 8 +- .../PrepareBipFinder.java | 6 +- .../bipfinder/input_actionset_parameter.json | 6 ++ .../SparkAtomicActionScoreJobTest.java | 102 ++++++++++++++---- .../bipfinder/project_bip_scores.json | 4 + ...scores_oid.json => result_bip_scores.json} | 0 .../oozie_app/projects_impact.py | 13 ++- 9 files changed, 218 insertions(+), 53 deletions(-) create mode 100644 dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipmodel/score/deserializers/BipProjectModel.java rename dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipmodel/{BipDeserialize.java => score/deserializers/BipResultModel.java} (65%) create mode 100644 dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/bipfinder/project_bip_scores.json rename dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/bipfinder/{bip_scores_oid.json => result_bip_scores.json} (100%) diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipfinder/SparkAtomicActionScoreJob.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipfinder/SparkAtomicActionScoreJob.java index ddf5f4adf..13ce1440a 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipfinder/SparkAtomicActionScoreJob.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipfinder/SparkAtomicActionScoreJob.java @@ -9,6 +9,7 @@ import java.util.List; import java.util.Optional; import java.util.stream.Collectors; +import eu.dnetlib.dhp.actionmanager.bipmodel.score.deserializers.BipProjectModel; import org.apache.commons.io.IOUtils; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapred.SequenceFileOutputFormat; @@ -24,7 +25,7 @@ import org.slf4j.LoggerFactory; import com.fasterxml.jackson.databind.ObjectMapper; -import eu.dnetlib.dhp.actionmanager.bipmodel.BipDeserialize; +import eu.dnetlib.dhp.actionmanager.bipmodel.score.deserializers.BipResultModel; import eu.dnetlib.dhp.actionmanager.bipmodel.BipScore; import eu.dnetlib.dhp.application.ArgumentApplicationParser; import eu.dnetlib.dhp.common.HdfsSupport; @@ -56,18 +57,17 @@ public class SparkAtomicActionScoreJob implements Serializable { parser.parseArgument(args); - Boolean isSparkSessionManaged = Optional - .ofNullable(parser.get("isSparkSessionManaged")) - .map(Boolean::valueOf) - .orElse(Boolean.TRUE); - + Boolean isSparkSessionManaged = isSparkSessionManaged(parser); log.info("isSparkSessionManaged: {}", isSparkSessionManaged); final String inputPath = parser.get("inputPath"); - log.info("inputPath {}: ", inputPath); + log.info("inputPath: {}", inputPath); final String outputPath = parser.get("outputPath"); - log.info("outputPath {}: ", outputPath); + log.info("outputPath: {}", outputPath); + + final String targetEntity = parser.get("targetEntity"); + log.info("targetEntity: {}", targetEntity); SparkConf conf = new SparkConf(); @@ -76,17 +76,48 @@ public class SparkAtomicActionScoreJob implements Serializable { isSparkSessionManaged, spark -> { removeOutputDir(spark, outputPath); - prepareResults(spark, inputPath, outputPath); - }); + + // follow different procedures for different target entities + switch (targetEntity) { + case "result": + prepareResults(spark, inputPath, outputPath); + break; + case "project": + prepareProjects(spark, inputPath, outputPath); + break; + default: + throw new RuntimeException("Unknown target entity: " + targetEntity); + } + } + ); + } + + private static void prepareProjects(SparkSession spark, String inputPath, String outputPath) { + + // read input bip project scores + Dataset projectScores = readPath(spark, inputPath, BipProjectModel.class); + + projectScores.map( (MapFunction) bipProjectScores -> { + Project project = new Project(); + project.setId(bipProjectScores.getProjectId()); + project.setMeasures(bipProjectScores.toMeasures()); + return project; + }, Encoders.bean(Project.class)) + .toJavaRDD() + .map(p -> new AtomicAction(Project.class, p)) + .mapToPair( aa -> new Tuple2<>(new Text(aa.getClazz().getCanonicalName()), + new Text(OBJECT_MAPPER.writeValueAsString(aa)))) + .saveAsHadoopFile(outputPath, Text.class, Text.class, SequenceFileOutputFormat.class); + } private static void prepareResults(SparkSession spark, String bipScorePath, String outputPath) { final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); - JavaRDD bipDeserializeJavaRDD = sc + JavaRDD bipDeserializeJavaRDD = sc .textFile(bipScorePath) - .map(item -> OBJECT_MAPPER.readValue(item, BipDeserialize.class)); + .map(item -> OBJECT_MAPPER.readValue(item, BipResultModel.class)); Dataset bipScores = spark .createDataset(bipDeserializeJavaRDD.flatMap(entry -> entry.keySet().stream().map(key -> { @@ -159,12 +190,4 @@ public class SparkAtomicActionScoreJob implements Serializable { HdfsSupport.remove(path, spark.sparkContext().hadoopConfiguration()); } - public static Dataset readPath( - SparkSession spark, String inputPath, Class clazz) { - return spark - .read() - .textFile(inputPath) - .map((MapFunction) value -> OBJECT_MAPPER.readValue(value, clazz), Encoders.bean(clazz)); - } - } diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipmodel/score/deserializers/BipProjectModel.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipmodel/score/deserializers/BipProjectModel.java new file mode 100644 index 000000000..77c1567a8 --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipmodel/score/deserializers/BipProjectModel.java @@ -0,0 +1,69 @@ +package eu.dnetlib.dhp.actionmanager.bipmodel.score.deserializers; + +import com.opencsv.bean.CsvBindByPosition; +import eu.dnetlib.dhp.schema.common.ModelConstants; +import eu.dnetlib.dhp.schema.oaf.KeyValue; +import eu.dnetlib.dhp.schema.oaf.utils.OafMapperUtils; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import eu.dnetlib.dhp.schema.oaf.Measure; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import static eu.dnetlib.dhp.actionmanager.Constants.*; + +@NoArgsConstructor +@AllArgsConstructor +@Getter +@Setter +public class BipProjectModel { + String projectId; + + String numOfInfluentialResults; + + String numOfPopularResults; + + String totalImpulse; + + String totalCitationCount; + + // each project bip measure has exactly one value, hence one key-value pair + private Measure createMeasure(String measureId, String measureValue) { + + KeyValue kv = new KeyValue(); + kv.setKey("score"); + kv.setValue(measureValue); + kv.setDataInfo( + OafMapperUtils.dataInfo( + false, + UPDATE_DATA_INFO_TYPE, + true, + false, + OafMapperUtils.qualifier( + UPDATE_MEASURE_BIP_CLASS_ID, + UPDATE_CLASS_NAME, + ModelConstants.DNET_PROVENANCE_ACTIONS, + ModelConstants.DNET_PROVENANCE_ACTIONS), + "") + ); + + Measure measure = new Measure(); + measure.setId(measureId); + measure.setUnit(Collections.singletonList(kv)); + return measure; + } + public List toMeasures() { + return Arrays.asList( + createMeasure("numOfInfluentialResults", numOfInfluentialResults), + createMeasure("numOfPopularResults", numOfPopularResults), + createMeasure("totalImpulse", totalImpulse), + createMeasure("totalCitationCount", totalCitationCount) + ); + } + +} diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipmodel/BipDeserialize.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipmodel/score/deserializers/BipResultModel.java similarity index 65% rename from dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipmodel/BipDeserialize.java rename to dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipmodel/score/deserializers/BipResultModel.java index a70bca618..06a173413 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipmodel/BipDeserialize.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipmodel/score/deserializers/BipResultModel.java @@ -1,5 +1,7 @@ -package eu.dnetlib.dhp.actionmanager.bipmodel; +package eu.dnetlib.dhp.actionmanager.bipmodel.score.deserializers; + +import eu.dnetlib.dhp.actionmanager.bipmodel.Score; import java.io.Serializable; import java.util.ArrayList; @@ -11,9 +13,9 @@ import java.util.List; * Only needed for deserialization purposes */ -public class BipDeserialize extends HashMap> implements Serializable { +public class BipResultModel extends HashMap> implements Serializable { - public BipDeserialize() { + public BipResultModel() { super(); } diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/PrepareBipFinder.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/PrepareBipFinder.java index 80573c71a..efcb96a85 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/PrepareBipFinder.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/PrepareBipFinder.java @@ -24,7 +24,7 @@ import org.slf4j.LoggerFactory; import com.fasterxml.jackson.databind.ObjectMapper; -import eu.dnetlib.dhp.actionmanager.bipmodel.BipDeserialize; +import eu.dnetlib.dhp.actionmanager.bipmodel.score.deserializers.BipResultModel; import eu.dnetlib.dhp.actionmanager.bipmodel.BipScore; import eu.dnetlib.dhp.application.ArgumentApplicationParser; import eu.dnetlib.dhp.common.HdfsSupport; @@ -82,9 +82,9 @@ public class PrepareBipFinder implements Serializable { final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); - JavaRDD bipDeserializeJavaRDD = sc + JavaRDD bipDeserializeJavaRDD = sc .textFile(inputPath) - .map(item -> OBJECT_MAPPER.readValue(item, BipDeserialize.class)); + .map(item -> OBJECT_MAPPER.readValue(item, BipResultModel.class)); spark .createDataset(bipDeserializeJavaRDD.flatMap(entry -> entry.keySet().stream().map(key -> { diff --git a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipfinder/input_actionset_parameter.json b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipfinder/input_actionset_parameter.json index 7663a454b..d6b93c5af 100644 --- a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipfinder/input_actionset_parameter.json +++ b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipfinder/input_actionset_parameter.json @@ -16,5 +16,11 @@ "paramLongName": "outputPath", "paramDescription": "the path of the new ActionSet", "paramRequired": true + }, + { + "paramName": "te", + "paramLongName": "targetEntity", + "paramDescription": "the type of target entity to be enriched; currently supported one of { 'result', 'project' }", + "paramRequired": true } ] \ No newline at end of file diff --git a/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/bipfinder/SparkAtomicActionScoreJobTest.java b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/bipfinder/SparkAtomicActionScoreJobTest.java index be82b9fc3..aa5a19f11 100644 --- a/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/bipfinder/SparkAtomicActionScoreJobTest.java +++ b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/bipfinder/SparkAtomicActionScoreJobTest.java @@ -6,8 +6,9 @@ import static org.junit.jupiter.api.Assertions.*; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; -import java.util.List; +import eu.dnetlib.dhp.schema.oaf.KeyValue; +import eu.dnetlib.dhp.schema.oaf.Project; import org.apache.commons.io.FileUtils; import org.apache.hadoop.io.Text; import org.apache.spark.SparkConf; @@ -27,7 +28,6 @@ import org.slf4j.LoggerFactory; import com.fasterxml.jackson.databind.ObjectMapper; import eu.dnetlib.dhp.schema.action.AtomicAction; -import eu.dnetlib.dhp.schema.oaf.Publication; import eu.dnetlib.dhp.schema.oaf.Result; public class SparkAtomicActionScoreJobTest { @@ -37,8 +37,11 @@ public class SparkAtomicActionScoreJobTest { private static SparkSession spark; private static Path workingDir; - private static final Logger log = LoggerFactory - .getLogger(SparkAtomicActionScoreJobTest.class); + + private final static String RESULT = "result"; + private final static String PROJECT = "project"; + + private static final Logger log = LoggerFactory.getLogger(SparkAtomicActionScoreJobTest.class); @BeforeAll public static void beforeAll() throws IOException { @@ -69,29 +72,31 @@ public class SparkAtomicActionScoreJobTest { spark.stop(); } + private void runJob(String inputPath, String outputPath, String targetEntity) throws Exception { + SparkAtomicActionScoreJob.main( + new String[] { + "-isSparkSessionManaged", Boolean.FALSE.toString(), + "-inputPath", inputPath, + "-outputPath", outputPath, + "-targetEntity", targetEntity, + } + ); + } @Test - void testMatch() throws Exception { - String bipScoresPath = getClass() - .getResource("/eu/dnetlib/dhp/actionmanager/bipfinder/bip_scores_oid.json") + void testResultScores() throws Exception { + final String targetEntity = RESULT; + String inputResultScores = getClass() + .getResource("/eu/dnetlib/dhp/actionmanager/bipfinder/result_bip_scores.json") .getPath(); + String outputPath = workingDir.toString() + "/" + targetEntity + "/actionSet"; - SparkAtomicActionScoreJob - .main( - new String[] { - "-isSparkSessionManaged", - Boolean.FALSE.toString(), - "-inputPath", - - bipScoresPath, - - "-outputPath", - workingDir.toString() + "/actionSet" - }); + // execute the job to generate the action sets for result scores + runJob(inputResultScores, outputPath, targetEntity); final JavaSparkContext sc = new JavaSparkContext(spark.sparkContext()); JavaRDD tmp = sc - .sequenceFile(workingDir.toString() + "/actionSet", Text.class, Text.class) + .sequenceFile(outputPath, Text.class, Text.class) .map(value -> OBJECT_MAPPER.readValue(value._2().toString(), AtomicAction.class)) .map(aa -> ((Result) aa.getPayload())); @@ -140,4 +145,61 @@ public class SparkAtomicActionScoreJobTest { } + @Test + void testProjectScores() throws Exception { + String targetEntity = PROJECT; + String inputResultScores = getClass() + .getResource("/eu/dnetlib/dhp/actionmanager/bipfinder/project_bip_scores.json") + .getPath(); + String outputPath = workingDir.toString() + "/" + targetEntity + "/actionSet"; + + // execute the job to generate the action sets for project scores + runJob(inputResultScores, outputPath, PROJECT); + + final JavaSparkContext sc = new JavaSparkContext(spark.sparkContext()); + + JavaRDD projects = sc + .sequenceFile(outputPath, Text.class, Text.class) + .map(value -> OBJECT_MAPPER.readValue(value._2().toString(), AtomicAction.class)) + .map(aa -> ((Project) aa.getPayload())); + + // test the number of projects + assertEquals(4, projects.count()); + + String testProjectId = "40|nih_________::c02a8233e9b60f05bb418f0c9b714833"; + + // count that the project with id testProjectId is present + assertEquals(1, projects.filter(row -> row.getId().equals(testProjectId)).count()); + + projects.filter(row -> row.getId().equals(testProjectId)) + .flatMap(r -> r.getMeasures().iterator()) + .foreach(m -> { + log.info(m.getId() + " " + m.getUnit()); + + // ensure that only one score is present for each bip impact measure + assertEquals(1, m.getUnit().size()); + + KeyValue kv = m.getUnit().get(0); + + // ensure that the correct key is provided, i.e. score + assertEquals("score", kv.getKey()); + + switch(m.getId()) { + case "numOfInfluentialResults": + assertEquals("0", kv.getValue()); + break; + case "numOfPopularResults": + assertEquals("1", kv.getValue()); + break; + case "totalImpulse": + assertEquals("25", kv.getValue()); + break; + case "totalCitationCount": + assertEquals("43", kv.getValue()); + break; + default: + fail("Unknown measure id in the context of projects"); + } + }); + } } diff --git a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/bipfinder/project_bip_scores.json b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/bipfinder/project_bip_scores.json new file mode 100644 index 000000000..096268287 --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/bipfinder/project_bip_scores.json @@ -0,0 +1,4 @@ +{"projectId":"40|nsf_________::d93e50d22374a1cf59f6a232413ea027","numOfInfluentialResults":0,"numOfPopularResults":10,"totalImpulse":181,"totalCitationCount":235} +{"projectId":"40|nih_________::1c93debc7085e440f245fbe70b2e8b21","numOfInfluentialResults":14,"numOfPopularResults":17,"totalImpulse":1558,"totalCitationCount":4226} +{"projectId":"40|nih_________::c02a8233e9b60f05bb418f0c9b714833","numOfInfluentialResults":0,"numOfPopularResults":1,"totalImpulse":25,"totalCitationCount":43} +{"projectId":"40|corda_______::d91dcf3a87dd7f72248fab0b8a4ba273","numOfInfluentialResults":2,"numOfPopularResults":3,"totalImpulse":78,"totalCitationCount":178} \ No newline at end of file diff --git a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/bipfinder/bip_scores_oid.json b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/bipfinder/result_bip_scores.json similarity index 100% rename from dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/bipfinder/bip_scores_oid.json rename to dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/bipfinder/result_bip_scores.json diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/projects_impact.py b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/projects_impact.py index f01c92a0d..d60f86e88 100644 --- a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/projects_impact.py +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/projects_impact.py @@ -96,14 +96,13 @@ for indicator_name, fd, column_name in impact_indicators: # print("Counting non null values for {}".format(indicator_name)) # print(relations.filter(F.col(indicator_name).isNotNull()).count()) -sum the impact indicator values for each project +# sum the impact indicator values for each project relations.groupBy('projectId')\ .agg(\ - F.sum('influence').alias('influence'),\ - F.sum('popularity').alias('popularity'),\ - F.sum('impulse').alias('impulse'),\ - F.sum('citation_count').alias('citation_count')\ + F.sum('influence').alias('numOfInfluentialResults'),\ + F.sum('popularity').alias('numOfPopularResults'),\ + F.sum('impulse').alias('totalImpulse'),\ + F.sum('citation_count').alias('totalCitationCount')\ )\ .write.mode("overwrite")\ - .option("delimiter", "\t")\ - .csv(output_dir, compression="gzip") \ No newline at end of file + .json(output_dir, compression="gzip") \ No newline at end of file From 815a4ddbbaf6fa68a23d576189db2ee03f97f828 Mon Sep 17 00:00:00 2001 From: Serafeim Chatzopoulos Date: Wed, 26 Apr 2023 20:40:06 +0300 Subject: [PATCH 197/449] Add actionset creation for project bip indicators in workflow --- .../bipfinder/SparkAtomicActionScoreJob.java | 7 +- .../impact_indicators/oozie_app/workflow.xml | 81 +++++++++++-------- 2 files changed, 53 insertions(+), 35 deletions(-) diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipfinder/SparkAtomicActionScoreJob.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipfinder/SparkAtomicActionScoreJob.java index 13ce1440a..8b8e05723 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipfinder/SparkAtomicActionScoreJob.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipfinder/SparkAtomicActionScoreJob.java @@ -41,7 +41,8 @@ import scala.Tuple2; */ public class SparkAtomicActionScoreJob implements Serializable { - private static final String DOI = "doi"; + private static final String RESULT = "result"; + private static final String PROJECT = "project"; private static final Logger log = LoggerFactory.getLogger(SparkAtomicActionScoreJob.class); private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); @@ -79,10 +80,10 @@ public class SparkAtomicActionScoreJob implements Serializable { // follow different procedures for different target entities switch (targetEntity) { - case "result": + case RESULT: prepareResults(spark, inputPath, outputPath); break; - case "project": + case PROJECT: prepareProjects(spark, inputPath, outputPath); break; default: diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml index ac44d5c05..c77443bd9 100644 --- a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml @@ -34,7 +34,6 @@ - yarn-cluster @@ -90,9 +89,8 @@ ${nameNode} - - - yarn-cluster + + yarn-cluster cluster @@ -131,7 +129,6 @@ ${jobTracker} ${nameNode} - yarn-cluster @@ -181,9 +178,8 @@ ${nameNode} - - - yarn-cluster + + yarn-cluster cluster @@ -235,7 +231,7 @@ - + yarn-cluster @@ -336,12 +332,12 @@ ${nameNode} - - /usr/bin/bash - - get_ranking_files.sh - - /${workflowDataDir} + + /usr/bin/bash + + get_ranking_files.sh + + /${workflowDataDir} ${wfAppPath}/get_ranking_files.sh#get_ranking_files.sh @@ -374,8 +370,8 @@ ${nameNode} - - yarn-cluster + + yarn-cluster cluster @@ -422,8 +418,8 @@ ${nameNode} - - yarn-cluster + + yarn-cluster cluster @@ -476,7 +472,6 @@ - yarn-cluster @@ -520,7 +515,6 @@ ${nameNode} - yarn-cluster cluster @@ -564,17 +558,12 @@ - - + - - + yarn cluster @@ -593,12 +582,12 @@ --inputPath${bipScorePath} --outputPath${actionSetOutputPath} - + --targetEntityresult + - @@ -645,13 +634,38 @@ - + + + + yarn + cluster + Produces the atomic action with the bip finder scores for projects + eu.dnetlib.dhp.actionmanager.bipfinder.SparkAtomicActionScoreJob + dhp-aggregation-${projectVersion}.jar + + --executor-memory=${sparkExecutorMemory} + --executor-cores=${sparkExecutorCores} + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.sql.warehouse.dir=${sparkSqlWarehouseDir} + + --inputPath${projectImpactIndicatorsOutput} + --outputPath${actionSetOutputPath} + --targetEntityproject + + + + + @@ -695,11 +709,14 @@ - ActionSet creation failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + ActionSet creation for results failed, error message[${wf:errorMessage(wf:lastErrorNode())}] Calculating project impact indicators failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + ActionSet creation for projects failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + From 614cc1089b975f8dc05df4f671029b5bdaa31d44 Mon Sep 17 00:00:00 2001 From: Serafeim Chatzopoulos Date: Thu, 27 Apr 2023 12:37:15 +0300 Subject: [PATCH 198/449] Add separate forder for results && project actionsets --- .../graph/impact_indicators/oozie_app/workflow.xml | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml index c77443bd9..5f67bb914 100644 --- a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml @@ -556,9 +556,12 @@ - - - + + + + + + @@ -581,7 +584,7 @@ --conf spark.sql.warehouse.dir=${sparkSqlWarehouseDir} --inputPath${bipScorePath} - --outputPath${actionSetOutputPath} + --outputPath${actionSetOutputPath}/results/ --targetEntityresult @@ -659,7 +662,7 @@ --conf spark.sql.warehouse.dir=${sparkSqlWarehouseDir} --inputPath${projectImpactIndicatorsOutput} - --outputPath${actionSetOutputPath} + --outputPath${actionSetOutputPath}/projects/ --targetEntityproject From 09485fbee3d1c782af33756a73b59f53a90532b5 Mon Sep 17 00:00:00 2001 From: ikanellos Date: Fri, 28 Apr 2023 13:09:13 +0300 Subject: [PATCH 199/449] Fixed unicode bug. Workflow ends after first script --- .../dhp-impact-indicators/src/main/resources/workflow.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/workflow.xml b/dhp-workflows/dhp-impact-indicators/src/main/resources/workflow.xml index d99dc16a2..a957f6c10 100644 --- a/dhp-workflows/dhp-impact-indicators/src/main/resources/workflow.xml +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/workflow.xml @@ -65,7 +65,7 @@ - + @@ -155,7 +155,7 @@ RAM 7680 - ${γιτ α} + ${checkpointDir} ${wfAppPath}/TAR.py#TAR.py From 90332439adc5e1400067fc61cefecbc39c9ab478 Mon Sep 17 00:00:00 2001 From: ikanellos Date: Fri, 28 Apr 2023 13:45:19 +0300 Subject: [PATCH 200/449] Remove deletion of synonym folder --- .../dhp/oa/graph/impact_indicators/oozie_app/workflow.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml index 815096665..7aa95db22 100644 --- a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml @@ -31,9 +31,11 @@ ${nameNode} + yarn-cluster From 3de35fd6a310ca41c8fb7cdd1a1e1396a2067fba Mon Sep 17 00:00:00 2001 From: ikanellos Date: Thu, 11 May 2023 14:42:25 +0300 Subject: [PATCH 201/449] Produce 5 classes of ranking scores --- .../oozie_app/format_ranking_results.py | 31 ++++++++++++++++--- .../impact_indicators/oozie_app/workflow.xml | 2 +- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/format_ranking_results.py b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/format_ranking_results.py index 60c71e52f..e7d62c2f1 100644 --- a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/format_ranking_results.py +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/format_ranking_results.py @@ -421,7 +421,7 @@ elif mode == 'json': # Score-specific dataframe - read inputs pagerank_df = spark.read.schema(float_schema).option('delimiter', '\t').option('header',True).csv(pagerank_dir).repartition(num_partitions, 'id') - attrank_df = spark.read.schema(float_schema).option('delimiter', '\t').option('header',False).csv(attrank_dir).repartition(num_partitions, 'id') + attrank_df = spark.read.schema(float_schema).option('delimiter', '\t').option('header',True).csv(attrank_dir).repartition(num_partitions, 'id') cc_df = spark.read.schema(int_schema).option('delimiter', '\t').option('header',True).csv(cc_dir).repartition(num_partitions, 'id') impulse_df = spark.read.schema(int_schema).option('delimiter', '\t').option('header',True).csv(impulse_dir).repartition(num_partitions, 'id') ram_df = spark.read.schema(float_schema).option('delimiter', '\t').option('header', True).csv(ram_dir).repartition(num_partitions, 'id') @@ -601,7 +601,7 @@ elif mode == 'json-5-way': # Score-specific dataframe - read inputs pagerank_df = spark.read.schema(float_schema).option('delimiter', '\t').option('header',True).csv(pagerank_dir).repartition(num_partitions, 'id') - attrank_df = spark.read.schema(float_schema).option('delimiter', '\t').option('header',False).csv(attrank_dir).repartition(num_partitions, 'id') + attrank_df = spark.read.schema(float_schema).option('delimiter', '\t').option('header',True).csv(attrank_dir).repartition(num_partitions, 'id') cc_df = spark.read.schema(int_schema).option('delimiter', '\t').option('header',True).csv(cc_dir).repartition(num_partitions, 'id') impulse_df = spark.read.schema(int_schema).option('delimiter', '\t').option('header',True).csv(impulse_dir).repartition(num_partitions, 'id') ram_df = spark.read.schema(float_schema).option('delimiter', '\t').option('header', True).csv(ram_dir).repartition(num_partitions, 'id') @@ -753,15 +753,36 @@ elif mode == 'json-5-way': # -------------------------------------------- # # Write json output + # -------------------------------------------- # + # Write json output - set the directory here output_dir = "/".join(pagerank_dir.split('/')[:-1]) if graph_type == 'bip': - output_dir = output_dir + '/bip_universe_doi_scores_5_classes/' + output_dir = output_dir + '/bip_universe_doi_scores/' else: - output_dir = output_dir + '/openaire_universe_scores_5_classes/' - + output_dir = output_dir + '/openaire_universe_scores/' + + # Write the dataframe print ("Writing output to: " + output_dir) results_df.write.mode('overwrite').option('header', False).text(output_dir, compression='gzip') + # Rename the files to .json.gz now + sc = spark.sparkContext + URI = sc._gateway.jvm.java.net.URI + Path = sc._gateway.jvm.org.apache.hadoop.fs.Path + FileSystem = sc._gateway.jvm.org.apache.hadoop.fs.FileSystem + # Get master prefix from input file path + master_prefix = "/".join(pagerank_dir.split('/')[:5]) + fs = FileSystem.get(URI(master_prefix), sc._jsc.hadoopConfiguration()) + path = Path(output_dir) + print ("Path is:" + path.toString()) + file_list = fs.listStatus(Path(output_dir)) + print ("Renaming files:") + for f in file_list: + initial_filename = f.getPath().toString() + if "part" in initial_filename: + print (initial_filename + " => " + initial_filename.replace(".txt.gz", ".json.gz")) + fs.rename(Path(initial_filename), Path(initial_filename.replace(".txt.gz", ".json.gz"))) + # Close spark session spark.stop() diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml index 7aa95db22..f07a27244 100644 --- a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml @@ -390,7 +390,7 @@ --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - json + json-5-way ${nameNode}/${workflowDataDir}/${wf:actionData('get-file-names')['pr_file']} ${nameNode}/${workflowDataDir}/${wf:actionData('get-file-names')['attrank_file']} From 5ddbb4ad10f8885e6fdbc9c18e0356c2a25db63a Mon Sep 17 00:00:00 2001 From: ikanellos Date: Thu, 11 May 2023 15:36:47 +0300 Subject: [PATCH 202/449] Spark properties no longer hardcoded --- .../oa/graph/impact_indicators/oozie_app/job.properties | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/job.properties b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/job.properties index f9f5519cc..7b4bb96cf 100644 --- a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/job.properties +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/job.properties @@ -13,6 +13,14 @@ maven.executable=mvn sparkDriverMemory=7G sparkExecutorMemory=7G sparkExecutorCores=4 + +# Some memory and driver settings for more demanding tasks +sparkHighDriverMemory=20G +sparkNormalDriverMemory=10G + +sparkHighExecutorMemory=20G +sparkNormalExecutorMemory=10G + # The above is given differently in an example I found online oozie.action.sharelib.for.spark=spark2 oozieActionShareLibForSpark2=spark2 From 1788ac2d4d1403dc8ed4173e9487c9f1a8d1ba4c Mon Sep 17 00:00:00 2001 From: ikanellos Date: Fri, 12 May 2023 12:55:43 +0300 Subject: [PATCH 203/449] Correct filtering for MAG records --- .../oozie_app/create_openaire_ranking_graph.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/create_openaire_ranking_graph.py b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/create_openaire_ranking_graph.py index cda12a77c..182fd9309 100644 --- a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/create_openaire_ranking_graph.py +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/create_openaire_ranking_graph.py @@ -137,7 +137,7 @@ cites_df = spark.read.json(graph_folder + "/relation")\ .where( (F.array_contains(F.col('collected_lower'), "opencitations")) | (F.array_contains(F.col('collected_lower'), "crossref")) - | (F.array_contains(F.col('collected_lower'), "mag")) + | (F.array_contains(F.col('collected_lower'), "microsoft academic graph")) ).drop('collected_lower') # print ("Cited df has: " + str(cites_df.count()) + " entries") From 07818131ef0067810953c8692d6559c56d25bb48 Mon Sep 17 00:00:00 2001 From: Serafeim Chatzopoulos Date: Mon, 15 May 2023 13:04:44 +0300 Subject: [PATCH 204/449] Update documentation --- dhp-workflows/dhp-impact-indicators/README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/dhp-workflows/dhp-impact-indicators/README.md b/dhp-workflows/dhp-impact-indicators/README.md index 45a4701e7..aad94ea19 100644 --- a/dhp-workflows/dhp-impact-indicators/README.md +++ b/dhp-workflows/dhp-impact-indicators/README.md @@ -15,7 +15,12 @@ You can check out a specific tag/release of BIP! Ranker using maven, as describe Use the following command for packaging: ``` -mvn package -Poozie-package -Dworkflow.source.dir=eu/dnetlib/dhp/oa/graph/impact_indicators -DskipTests +mvn package -Poozie-package -Dworkflow.source.dir=eu/dnetlib/dhp/oa/graph/impact_indicators -DskipTests +``` + +Deploy and run: +``` +mvn package -Poozie-package,deploy,run -Dworkflow.source.dir=eu/dnetlib/dhp/oa/graph/impact_indicators -DskipTests ``` Note: edit the property `bip.ranker.tag` of the `pom.xml` file to specify the tag of [BIP-Ranker](https://github.com/athenarc/Bip-Ranker) that you want to use. From 4a905932a3db36c61570c24b9aa54283cd30abba Mon Sep 17 00:00:00 2001 From: ikanellos Date: Mon, 15 May 2023 15:24:22 +0300 Subject: [PATCH 205/449] Spark properties from job.properties --- .../impact_indicators/oozie_app/workflow.xml | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml index f07a27244..ec2bb140f 100644 --- a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml @@ -46,7 +46,7 @@ create_openaire_ranking_graph.py - --executor-memory 20G --executor-cores 4 --driver-memory 20G + --executor-memory ${sparkHighExecutorMemory} --executor-cores ${sparkExecutorCores} --driver-memory ${sparkHighDriverMemory} --master yarn --deploy-mode cluster --conf spark.sql.shuffle.partitions=7680 @@ -100,7 +100,7 @@ CC.py - --executor-memory 18G --executor-cores 4 --driver-memory 10G + --executor-memory ${sparkHighExecutorMemory} --executor-cores ${sparkExecutorCores} --driver-memory ${sparkNormalDriverMemory} --master yarn --deploy-mode cluster --conf spark.sql.shuffle.partitions=7680 @@ -141,7 +141,7 @@ TAR.py - --executor-memory 18G --executor-cores 4 --driver-memory 10G + --executor-memory ${sparkHighExecutorMemory} --executor-cores ${sparkExecutorCores} --driver-memory ${sparkNormalDriverMemory} --master yarn --deploy-mode cluster --conf spark.sql.shuffle.partitions=7680 @@ -189,7 +189,7 @@ CC.py - --executor-memory 18G --executor-cores 4 --driver-memory 10G + --executor-memory ${sparkHighExecutorMemory} --executor-cores ${sparkExecutorCores} --driver-memory ${sparkNormalDriverMemory} --master yarn --deploy-mode cluster --conf spark.sql.shuffle.partitions=7680 @@ -244,7 +244,7 @@ PageRank.py - --executor-memory 18G --executor-cores 4 --driver-memory 10G + --executor-memory ${sparkHighExecutorMemory} --executor-cores ${sparkExecutorCores} --driver-memory ${sparkNormalDriverMemory} --master yarn --deploy-mode cluster --conf spark.sql.shuffle.partitions=7680 @@ -289,7 +289,7 @@ AttRank.py - --executor-memory 18G --executor-cores 4 --driver-memory 10G + --executor-memory ${sparkHighExecutorMemory} --executor-cores ${sparkExecutorCores} --driver-memory ${sparkNormalDriverMemory} --master yarn --deploy-mode cluster --conf spark.sql.shuffle.partitions=7680 @@ -381,7 +381,7 @@ format_ranking_results.py - --executor-memory 10G --executor-cores 4 --driver-memory 10G + --executor-memory ${sparkNormalExecutorMemory} --executor-cores ${sparkExecutorCores} --driver-memory ${sparkNormalDriverMemory} --master yarn --deploy-mode cluster --conf spark.sql.shuffle.partitions=7680 @@ -429,7 +429,7 @@ format_ranking_results.py - --executor-memory 10G --executor-cores 4 --driver-memory 10G + --executor-memory ${sparkNormalExecutorMemory} --executor-cores ${sparkExecutorCores} --driver-memory ${sparkNormalDriverMemory} --master yarn --deploy-mode cluster --conf spark.sql.shuffle.partitions=7680 @@ -484,7 +484,7 @@ map_openaire_ids_to_dois.py - --executor-memory 18G --executor-cores 4 --driver-memory 15G + --executor-memory ${sparkHighExecutorMemory} --executor-cores ${sparkExecutorCores} --driver-memory ${sparkHighDriverMemory} --master yarn --deploy-mode cluster --conf spark.sql.shuffle.partitions=7680 @@ -526,7 +526,7 @@ map_scores_to_dois.py - --executor-memory 18G --executor-cores 4 --driver-memory 15G + --executor-memory ${sparkHighExecutorMemory} --executor-cores ${sparkExecutorCores} --driver-memory ${sparkHighDriverMemory} --master yarn --deploy-mode cluster --conf spark.sql.shuffle.partitions=7680 @@ -609,7 +609,7 @@ projects_impact.py - --executor-memory 18G --executor-cores 4 --driver-memory 10G + --executor-memory ${sparkHighExecutorMemory} --executor-cores ${sparkExecutorCores} --driver-memory ${sparkNormalDriverMemory} --master yarn --deploy-mode cluster --conf spark.sql.shuffle.partitions=7680 From b8e8c959fe5a72f3b88610643b5e229371aa687c Mon Sep 17 00:00:00 2001 From: Serafeim Chatzopoulos Date: Mon, 15 May 2023 15:50:23 +0300 Subject: [PATCH 206/449] Update workflow.xml && job.properties --- .../oozie_app/job.properties | 46 ++-- .../impact_indicators/oozie_app/workflow.xml | 260 ++++++++++-------- 2 files changed, 163 insertions(+), 143 deletions(-) diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/job.properties b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/job.properties index 7b4bb96cf..08f9b1eac 100644 --- a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/job.properties +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/job.properties @@ -1,18 +1,16 @@ # The following set of properties are defined in https://support.openaire.eu/projects/openaire/wiki/Hadoop_clusters # and concern the parameterization required for running workflows on the @GARR cluster -dhp.hadoop.frontend.temp.dir=/home/ilias.kanellos -dhp.hadoop.frontend.user.name=ilias.kanellos -dhp.hadoop.frontend.host.name=iis-cdh5-test-gw.ocean.icm.edu.pl -dhp.hadoop.frontend.port.ssh=22 -oozieServiceLoc=http://iis-cdh5-test-m3:11000/oozie -jobTracker=yarnRM -nameNode=hdfs://nameservice1 -oozie.execution.log.file.location = target/extract-and-run-on-remote-host.log -maven.executable=mvn -sparkDriverMemory=7G -sparkExecutorMemory=7G -sparkExecutorCores=4 +# --- You can override the following properties (if needed) coming from your ~/.dhp/application.properties --- +# dhp.hadoop.frontend.temp.dir=/home/ilias.kanellos +# dhp.hadoop.frontend.user.name=ilias.kanellos +# dhp.hadoop.frontend.host.name=iis-cdh5-test-gw.ocean.icm.edu.pl +# dhp.hadoop.frontend.port.ssh=22 +# oozieServiceLoc=http://iis-cdh5-test-m3:11000/oozie +# jobTracker=yarnRM +# nameNode=hdfs://nameservice1 +# oozie.execution.log.file.location = target/extract-and-run-on-remote-host.log +# maven.executable=mvn # Some memory and driver settings for more demanding tasks sparkHighDriverMemory=20G @@ -21,6 +19,9 @@ sparkNormalDriverMemory=10G sparkHighExecutorMemory=20G sparkNormalExecutorMemory=10G +sparkExecutorCores=4 +sparkShufflePartitions=7680 + # The above is given differently in an example I found online oozie.action.sharelib.for.spark=spark2 oozieActionShareLibForSpark2=spark2 @@ -66,29 +67,26 @@ ramGamma=0.6 convergenceError=0.000000000001 # I think this should be the oozie workflow directory -oozieWorkflowPath=user/ilias.kanellos/workflow_example/ - -# The directory where the workflow data is/should be stored -workflowDataDir=user/ilias.kanellos/ranking_workflow +# oozieWorkflowPath=user/ilias.kanellos/workflow_example/ # Directory where json data containing scores will be output -bipScorePath=${workflowDataDir}/openaire_universe_scores/ +bipScorePath=${workingDir}/openaire_universe_scores/ # Directory where dataframes are checkpointed -checkpointDir=${nameNode}/${workflowDataDir}/check/ +checkpointDir=${nameNode}/${workingDir}/check/ # The directory for the doi-based bip graph -bipGraphFilePath=${nameNode}/${workflowDataDir}/bipdbv8_graph +bipGraphFilePath=${nameNode}/${workingDir}/bipdbv8_graph # The folder from which synonyms of openaire-ids are read # openaireDataInput=${nameNode}/tmp/beta_provision/graph/21_graph_cleaned/ -openaireDataInput=${/tmp/prod_provision/graph/18_graph_blacklisted} +openaireDataInput=/tmp/prod_provision/graph/18_graph_blacklisted # A folder where we will write the openaire to doi mapping -synonymFolder=${nameNode}/${workflowDataDir}/openaireid_to_dois/ +synonymFolder=${nameNode}/${workingDir}/openaireid_to_dois/ # This will be where we store the openaire graph input. They told us on GARR to use a directory under /data -openaireGraphInputPath=${nameNode}/${workflowDataDir}/openaire_id_graph +openaireGraphInputPath=${nameNode}/${workingDir}/openaire_id_graph # The workflow application path wfAppPath=${nameNode}/${oozieWorkflowPath} @@ -96,8 +94,8 @@ wfAppPath=${nameNode}/${oozieWorkflowPath} oozie.wf.application.path=${wfAppPath} # Path where the final output should be? -actionSetOutputPath=${workflowDataDir}/bip_actionsets/ +actionSetOutputPath=${workingDir}/bip_actionsets/ # The directory to store project impact indicators -projectImpactIndicatorsOutput=${workflowDataDir}/project_indicators +projectImpactIndicatorsOutput=${workingDir}/project_indicators diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml index f07a27244..d930ab774 100644 --- a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml @@ -46,21 +46,23 @@ create_openaire_ranking_graph.py - --executor-memory 20G --executor-cores 4 --driver-memory 20G - --master yarn - --deploy-mode cluster - --conf spark.sql.shuffle.partitions=7680 - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + + --executor-memory=${sparkHighExecutorMemory} + --executor-cores=${sparkExecutorCores} + --driver-memory=${sparkHighDriverMemory} + --conf spark.sql.shuffle.partitions=${sparkShufflePartitions} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + ${openaireDataInput} ${currentYear} - 7680 + ${sparkShufflePartitions} ${openaireGraphInputPath} @@ -100,18 +102,20 @@ CC.py - --executor-memory 18G --executor-cores 4 --driver-memory 10G - --master yarn - --deploy-mode cluster - --conf spark.sql.shuffle.partitions=7680 - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + + --executor-memory=${sparkHighExecutorMemory} + --executor-cores=${sparkExecutorCores} + --driver-memory=${sparkNormalDriverMemory} + --conf spark.sql.shuffle.partitions=${sparkShufflePartitions} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + ${openaireGraphInputPath} - 7680 + ${sparkShufflePartitions} ${wfAppPath}/CC.py#CC.py @@ -141,21 +145,23 @@ TAR.py - --executor-memory 18G --executor-cores 4 --driver-memory 10G - --master yarn - --deploy-mode cluster - --conf spark.sql.shuffle.partitions=7680 - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + + --executor-memory=${sparkHighExecutorMemory} + --executor-cores=${sparkExecutorCores} + --driver-memory=${sparkNormalDriverMemory} + --conf spark.sql.shuffle.partitions=${sparkShufflePartitions} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + ${openaireGraphInputPath} ${ramGamma} ${currentYear} RAM - 7680 + ${sparkShufflePartitions} ${checkpointDir} ${wfAppPath}/TAR.py#TAR.py @@ -189,18 +195,20 @@ CC.py - --executor-memory 18G --executor-cores 4 --driver-memory 10G - --master yarn - --deploy-mode cluster - --conf spark.sql.shuffle.partitions=7680 - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + + --executor-memory=${sparkHighExecutorMemory} + --executor-cores=${sparkExecutorCores} + --driver-memory=${sparkNormalDriverMemory} + --conf spark.sql.shuffle.partitions=${sparkShufflePartitions} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + ${openaireGraphInputPath} - 7680 + ${sparkShufflePartitions} 3 ${wfAppPath}/CC.py#CC.py @@ -244,21 +252,23 @@ PageRank.py - --executor-memory 18G --executor-cores 4 --driver-memory 10G - --master yarn - --deploy-mode cluster - --conf spark.sql.shuffle.partitions=7680 - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + + --executor-memory=${sparkHighExecutorMemory} + --executor-cores=${sparkExecutorCores} + --driver-memory=${sparkNormalDriverMemory} + --conf spark.sql.shuffle.partitions=${sparkShufflePartitions} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + ${openaireGraphInputPath} ${pageRankAlpha} ${convergenceError} ${checkpointDir} - 7680 + ${sparkShufflePartitions} dfs ${wfAppPath}/PageRank.py#PageRank.py @@ -289,14 +299,16 @@ AttRank.py - --executor-memory 18G --executor-cores 4 --driver-memory 10G - --master yarn - --deploy-mode cluster - --conf spark.sql.shuffle.partitions=7680 - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + + --executor-memory=${sparkHighExecutorMemory} + --executor-cores=${sparkExecutorCores} + --driver-memory=${sparkNormalDriverMemory} + --conf spark.sql.shuffle.partitions=${sparkShufflePartitions} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + ${openaireGraphInputPath} ${attrankAlpha} @@ -308,7 +320,7 @@ ${convergenceError} ${checkpointDir} - 7680 + ${sparkShufflePartitions} dfs ${wfAppPath}/AttRank.py#AttRank.py @@ -339,7 +351,7 @@ get_ranking_files.sh - /${workflowDataDir} + /${workingDir} ${wfAppPath}/get_ranking_files.sh#get_ranking_files.sh @@ -381,24 +393,26 @@ format_ranking_results.py - --executor-memory 10G --executor-cores 4 --driver-memory 10G - --master yarn - --deploy-mode cluster - --conf spark.sql.shuffle.partitions=7680 - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + + --executor-memory=${sparkNormalExecutorMemory} + --executor-cores=${sparkExecutorCores} + --driver-memory=${sparkNormalDriverMemory} + --conf spark.sql.shuffle.partitions=${sparkShufflePartitions} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + json-5-way - ${nameNode}/${workflowDataDir}/${wf:actionData('get-file-names')['pr_file']} - ${nameNode}/${workflowDataDir}/${wf:actionData('get-file-names')['attrank_file']} - ${nameNode}/${workflowDataDir}/${wf:actionData('get-file-names')['cc_file']} - ${nameNode}/${workflowDataDir}/${wf:actionData('get-file-names')['impulse_file']} - ${nameNode}/${workflowDataDir}/${wf:actionData('get-file-names')['ram_file']} + ${nameNode}/${workingDir}/${wf:actionData('get-file-names')['pr_file']} + ${nameNode}/${workingDir}/${wf:actionData('get-file-names')['attrank_file']} + ${nameNode}/${workingDir}/${wf:actionData('get-file-names')['cc_file']} + ${nameNode}/${workingDir}/${wf:actionData('get-file-names')['impulse_file']} + ${nameNode}/${workingDir}/${wf:actionData('get-file-names')['ram_file']} - 7680 + ${sparkShufflePartitions} openaire @@ -429,24 +443,26 @@ format_ranking_results.py - --executor-memory 10G --executor-cores 4 --driver-memory 10G - --master yarn - --deploy-mode cluster - --conf spark.sql.shuffle.partitions=7680 - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + + --executor-memory=${sparkNormalExecutorMemory} + --executor-cores=${sparkExecutorCores} + --driver-memory=${sparkNormalDriverMemory} + --conf spark.sql.shuffle.partitions=${sparkShufflePartitions} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + zenodo - ${nameNode}/${workflowDataDir}/${wf:actionData('get-file-names')['pr_file']} - ${nameNode}/${workflowDataDir}/${wf:actionData('get-file-names')['attrank_file']} - ${nameNode}/${workflowDataDir}/${wf:actionData('get-file-names')['cc_file']} - ${nameNode}/${workflowDataDir}/${wf:actionData('get-file-names')['impulse_file']} - ${nameNode}/${workflowDataDir}/${wf:actionData('get-file-names')['ram_file']} + ${nameNode}/${workingDir}/${wf:actionData('get-file-names')['pr_file']} + ${nameNode}/${workingDir}/${wf:actionData('get-file-names')['attrank_file']} + ${nameNode}/${workingDir}/${wf:actionData('get-file-names')['cc_file']} + ${nameNode}/${workingDir}/${wf:actionData('get-file-names')['impulse_file']} + ${nameNode}/${workingDir}/${wf:actionData('get-file-names')['ram_file']} - 7680 + ${sparkShufflePartitions} openaire @@ -484,14 +500,16 @@ map_openaire_ids_to_dois.py - --executor-memory 18G --executor-cores 4 --driver-memory 15G - --master yarn - --deploy-mode cluster - --conf spark.sql.shuffle.partitions=7680 - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + + --executor-memory=${sparkHighExecutorMemory} + --executor-cores=${sparkExecutorCores} + --driver-memory=${sparkHighDriverMemory} + --conf spark.sql.shuffle.partitions=${sparkShufflePartitions} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + ${openaireDataInput} @@ -526,24 +544,26 @@ map_scores_to_dois.py - --executor-memory 18G --executor-cores 4 --driver-memory 15G - --master yarn - --deploy-mode cluster - --conf spark.sql.shuffle.partitions=7680 - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + + --executor-memory=${sparkHighExecutorMemory} + --executor-cores=${sparkExecutorCores} + --driver-memory=${sparkHighDriverMemory} + --conf spark.sql.shuffle.partitions=${sparkShufflePartitions} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + ${synonymFolder} - 7680 + ${sparkShufflePartitions} - ${nameNode}/${workflowDataDir}/${wf:actionData('get-file-names')['pr_file']} - ${nameNode}/${workflowDataDir}/${wf:actionData('get-file-names')['attrank_file']} - ${nameNode}/${workflowDataDir}/${wf:actionData('get-file-names')['cc_file']} - ${nameNode}/${workflowDataDir}/${wf:actionData('get-file-names')['impulse_file']} - ${nameNode}/${workflowDataDir}/${wf:actionData('get-file-names')['ram_file']} + ${nameNode}/${workingDir}/${wf:actionData('get-file-names')['pr_file']} + ${nameNode}/${workingDir}/${wf:actionData('get-file-names')['attrank_file']} + ${nameNode}/${workingDir}/${wf:actionData('get-file-names')['cc_file']} + ${nameNode}/${workingDir}/${wf:actionData('get-file-names')['impulse_file']} + ${nameNode}/${workingDir}/${wf:actionData('get-file-names')['ram_file']} ${wfAppPath}/map_scores_to_dois.py#map_scores_to_dois.py @@ -576,9 +596,9 @@ eu.dnetlib.dhp.actionmanager.bipfinder.SparkAtomicActionScoreJob dhp-aggregation-${projectVersion}.jar - --executor-memory=${sparkExecutorMemory} + --executor-memory=${sparkNormalExecutorMemory} --executor-cores=${sparkExecutorCores} - --driver-memory=${sparkDriverMemory} + --driver-memory=${sparkNormalDriverMemory} --conf spark.extraListeners=${spark2ExtraListeners} --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} @@ -609,14 +629,16 @@ projects_impact.py - --executor-memory 18G --executor-cores 4 --driver-memory 10G - --master yarn - --deploy-mode cluster - --conf spark.sql.shuffle.partitions=7680 + + --executor-memory=${sparkHighExecutorMemory} + --executor-cores=${sparkExecutorCores} + --driver-memory=${sparkNormalDriverMemory} + --conf spark.sql.shuffle.partitions=${sparkShufflePartitions} --conf spark.extraListeners=${spark2ExtraListeners} --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + @@ -624,13 +646,13 @@ ${openaireDataInput}/relations - ${nameNode}/${workflowDataDir}/${wf:actionData('get-file-names')['pr_file']} - ${nameNode}/${workflowDataDir}/${wf:actionData('get-file-names')['attrank_file']} - ${nameNode}/${workflowDataDir}/${wf:actionData('get-file-names')['cc_file']} - ${nameNode}/${workflowDataDir}/${wf:actionData('get-file-names')['impulse_file']} + ${nameNode}/${workingDir}/${wf:actionData('get-file-names')['pr_file']} + ${nameNode}/${workingDir}/${wf:actionData('get-file-names')['attrank_file']} + ${nameNode}/${workingDir}/${wf:actionData('get-file-names')['cc_file']} + ${nameNode}/${workingDir}/${wf:actionData('get-file-names')['impulse_file']} - 7680 + ${sparkShufflePartitions} ${projectImpactIndicatorsOutput} @@ -654,9 +676,9 @@ eu.dnetlib.dhp.actionmanager.bipfinder.SparkAtomicActionScoreJob dhp-aggregation-${projectVersion}.jar - --executor-memory=${sparkExecutorMemory} + --executor-memory=${sparkNormalExecutorMemory} --executor-cores=${sparkExecutorCores} - --driver-memory=${sparkDriverMemory} + --driver-memory=${sparkNormalDriverMemory} --conf spark.extraListeners=${spark2ExtraListeners} --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} From 12a57e1f584ffb13a7e1961b9bf79974b6e05a60 Mon Sep 17 00:00:00 2001 From: Serafeim Chatzopoulos Date: Mon, 15 May 2023 15:59:51 +0300 Subject: [PATCH 207/449] Resolve conflicts --- .../impact_indicators/oozie_app/workflow.xml | 138 +++--------------- 1 file changed, 21 insertions(+), 117 deletions(-) diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml index 8b5313c15..f185f2a8a 100644 --- a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml @@ -46,7 +46,7 @@ create_openaire_ranking_graph.py -<<<<<<< HEAD + --executor-memory=${sparkHighExecutorMemory} --executor-cores=${sparkExecutorCores} @@ -57,16 +57,7 @@ --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} -======= - --executor-memory ${sparkHighExecutorMemory} --executor-cores ${sparkExecutorCores} --driver-memory ${sparkHighDriverMemory} - --master yarn - --deploy-mode cluster - --conf spark.sql.shuffle.partitions=7680 - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} ->>>>>>> 4a905932a3db36c61570c24b9aa54283cd30abba + ${openaireDataInput} @@ -113,7 +104,7 @@ CC.py -<<<<<<< HEAD + --executor-memory=${sparkHighExecutorMemory} --executor-cores=${sparkExecutorCores} @@ -124,16 +115,7 @@ --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} -======= - --executor-memory ${sparkHighExecutorMemory} --executor-cores ${sparkExecutorCores} --driver-memory ${sparkNormalDriverMemory} - --master yarn - --deploy-mode cluster - --conf spark.sql.shuffle.partitions=7680 - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} ->>>>>>> 4a905932a3db36c61570c24b9aa54283cd30abba + ${openaireGraphInputPath} @@ -167,7 +149,7 @@ TAR.py -<<<<<<< HEAD + --executor-memory=${sparkHighExecutorMemory} --executor-cores=${sparkExecutorCores} @@ -178,16 +160,7 @@ --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} -======= - --executor-memory ${sparkHighExecutorMemory} --executor-cores ${sparkExecutorCores} --driver-memory ${sparkNormalDriverMemory} - --master yarn - --deploy-mode cluster - --conf spark.sql.shuffle.partitions=7680 - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} ->>>>>>> 4a905932a3db36c61570c24b9aa54283cd30abba + ${openaireGraphInputPath} ${ramGamma} @@ -228,7 +201,7 @@ CC.py -<<<<<<< HEAD + --executor-memory=${sparkHighExecutorMemory} --executor-cores=${sparkExecutorCores} @@ -239,16 +212,7 @@ --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} -======= - --executor-memory ${sparkHighExecutorMemory} --executor-cores ${sparkExecutorCores} --driver-memory ${sparkNormalDriverMemory} - --master yarn - --deploy-mode cluster - --conf spark.sql.shuffle.partitions=7680 - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} ->>>>>>> 4a905932a3db36c61570c24b9aa54283cd30abba + ${openaireGraphInputPath} @@ -296,7 +260,7 @@ PageRank.py -<<<<<<< HEAD + --executor-memory=${sparkHighExecutorMemory} --executor-cores=${sparkExecutorCores} @@ -307,16 +271,7 @@ --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} -======= - --executor-memory ${sparkHighExecutorMemory} --executor-cores ${sparkExecutorCores} --driver-memory ${sparkNormalDriverMemory} - --master yarn - --deploy-mode cluster - --conf spark.sql.shuffle.partitions=7680 - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} ->>>>>>> 4a905932a3db36c61570c24b9aa54283cd30abba + ${openaireGraphInputPath} ${pageRankAlpha} @@ -354,7 +309,7 @@ AttRank.py -<<<<<<< HEAD + --executor-memory=${sparkHighExecutorMemory} --executor-cores=${sparkExecutorCores} @@ -365,16 +320,7 @@ --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} -======= - --executor-memory ${sparkHighExecutorMemory} --executor-cores ${sparkExecutorCores} --driver-memory ${sparkNormalDriverMemory} - --master yarn - --deploy-mode cluster - --conf spark.sql.shuffle.partitions=7680 - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} ->>>>>>> 4a905932a3db36c61570c24b9aa54283cd30abba + ${openaireGraphInputPath} ${attrankAlpha} @@ -459,7 +405,7 @@ format_ranking_results.py -<<<<<<< HEAD + --executor-memory=${sparkNormalExecutorMemory} --executor-cores=${sparkExecutorCores} @@ -470,16 +416,7 @@ --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} -======= - --executor-memory ${sparkNormalExecutorMemory} --executor-cores ${sparkExecutorCores} --driver-memory ${sparkNormalDriverMemory} - --master yarn - --deploy-mode cluster - --conf spark.sql.shuffle.partitions=7680 - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} ->>>>>>> 4a905932a3db36c61570c24b9aa54283cd30abba + json-5-way @@ -520,7 +457,7 @@ format_ranking_results.py -<<<<<<< HEAD + --executor-memory=${sparkNormalExecutorMemory} --executor-cores=${sparkExecutorCores} @@ -531,16 +468,7 @@ --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} -======= - --executor-memory ${sparkNormalExecutorMemory} --executor-cores ${sparkExecutorCores} --driver-memory ${sparkNormalDriverMemory} - --master yarn - --deploy-mode cluster - --conf spark.sql.shuffle.partitions=7680 - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} ->>>>>>> 4a905932a3db36c61570c24b9aa54283cd30abba + zenodo @@ -588,7 +516,7 @@ map_openaire_ids_to_dois.py -<<<<<<< HEAD + --executor-memory=${sparkHighExecutorMemory} --executor-cores=${sparkExecutorCores} @@ -599,16 +527,7 @@ --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} -======= - --executor-memory ${sparkHighExecutorMemory} --executor-cores ${sparkExecutorCores} --driver-memory ${sparkHighDriverMemory} - --master yarn - --deploy-mode cluster - --conf spark.sql.shuffle.partitions=7680 - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} ->>>>>>> 4a905932a3db36c61570c24b9aa54283cd30abba + ${openaireDataInput} @@ -643,7 +562,7 @@ map_scores_to_dois.py -<<<<<<< HEAD + --executor-memory=${sparkHighExecutorMemory} --executor-cores=${sparkExecutorCores} @@ -654,16 +573,7 @@ --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} -======= - --executor-memory ${sparkHighExecutorMemory} --executor-cores ${sparkExecutorCores} --driver-memory ${sparkHighDriverMemory} - --master yarn - --deploy-mode cluster - --conf spark.sql.shuffle.partitions=7680 - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} ->>>>>>> 4a905932a3db36c61570c24b9aa54283cd30abba + ${synonymFolder} @@ -739,18 +649,12 @@ projects_impact.py -<<<<<<< HEAD + --executor-memory=${sparkHighExecutorMemory} --executor-cores=${sparkExecutorCores} --driver-memory=${sparkNormalDriverMemory} --conf spark.sql.shuffle.partitions=${sparkShufflePartitions} -======= - --executor-memory ${sparkHighExecutorMemory} --executor-cores ${sparkExecutorCores} --driver-memory ${sparkNormalDriverMemory} - --master yarn - --deploy-mode cluster - --conf spark.sql.shuffle.partitions=7680 ->>>>>>> 4a905932a3db36c61570c24b9aa54283cd30abba --conf spark.extraListeners=${spark2ExtraListeners} --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} From 45f2aa0867419093a866fe4686fe3c15400fe7d4 Mon Sep 17 00:00:00 2001 From: Serafeim Chatzopoulos Date: Mon, 15 May 2023 17:52:20 +0300 Subject: [PATCH 208/449] Move end node ... at the end in workflow.xml --- .../impact_indicators/oozie_app/workflow.xml | 35 +++++++++---------- 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml index f185f2a8a..bc40dfd11 100644 --- a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml @@ -3,7 +3,7 @@ - + @@ -714,47 +714,42 @@ - - - - - - + PageRank failed, error message[${wf:errorMessage(wf:lastErrorNode())}] - + AttRank failed, error message[${wf:errorMessage(wf:lastErrorNode())}] - - + + CC failed, error message[${wf:errorMessage(wf:lastErrorNode())}] - + Impulse failed, error message[${wf:errorMessage(wf:lastErrorNode())}] - - + + RAM failed, error message[${wf:errorMessage(wf:lastErrorNode())}] - + Creation of openaire-graph failed, error message[${wf:errorMessage(wf:lastErrorNode())}] - + Synonym collection failed, error message[${wf:errorMessage(wf:lastErrorNode())}] - + Mapping scores to DOIs failed, error message[${wf:errorMessage(wf:lastErrorNode())}] - + Deleting output path for actionsets failed, error message[${wf:errorMessage(wf:lastErrorNode())}] - + ActionSet creation for results failed, error message[${wf:errorMessage(wf:lastErrorNode())}] @@ -767,4 +762,8 @@ ActionSet creation for projects failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + + + From b83135c252e1d90e117269ae5b7609009d370c31 Mon Sep 17 00:00:00 2001 From: Serafeim Chatzopoulos Date: Mon, 15 May 2023 19:55:35 +0300 Subject: [PATCH 209/449] Add missing kill nodes in workflow.xml --- .../impact_indicators/oozie_app/workflow.xml | 32 +++++++++++++------ 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml index bc40dfd11..d2933e36f 100644 --- a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml @@ -715,6 +715,22 @@ + + Creation of openaire-graph failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + + + CC failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + + + RAM failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + + + Impulse failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + PageRank failed, error message[${wf:errorMessage(wf:lastErrorNode())}] @@ -723,20 +739,16 @@ AttRank failed, error message[${wf:errorMessage(wf:lastErrorNode())}] - - CC failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + Error getting key-value pairs for output files, error message[${wf:errorMessage(wf:lastErrorNode())}] - - Impulse failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + Error formatting json files, error message[${wf:errorMessage(wf:lastErrorNode())}] - - RAM failed, error message[${wf:errorMessage(wf:lastErrorNode())}] - - - - Creation of openaire-graph failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + Error formatting BIP files, error message[${wf:errorMessage(wf:lastErrorNode())}] From 4eec3e7052756002f2f3d48561d516a3a5c003b5 Mon Sep 17 00:00:00 2001 From: Serafeim Chatzopoulos Date: Mon, 15 May 2023 22:28:48 +0300 Subject: [PATCH 210/449] Add jobTracker, nameNode && spark2Lib as global params in oozie wf --- .../oozie_app/job.properties | 1 + .../impact_indicators/oozie_app/workflow.xml | 80 ++++++------------- 2 files changed, 24 insertions(+), 57 deletions(-) diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/job.properties b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/job.properties index 08f9b1eac..fb68a6928 100644 --- a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/job.properties +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/job.properties @@ -99,3 +99,4 @@ actionSetOutputPath=${workingDir}/bip_actionsets/ # The directory to store project impact indicators projectImpactIndicatorsOutput=${workingDir}/project_indicators +resume=create-openaire-ranking-graph diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml index d2933e36f..570dc46f5 100644 --- a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml @@ -1,5 +1,17 @@ + + + ${jobTracker} + ${nameNode} + + + oozie.action.sharelib.for.spark + ${oozieActionShareLibForSpark2} + + + + @@ -8,14 +20,14 @@ - ${resume eq "rankings-start"} - ${resume eq "impulse"} - ${resume eq "rankings-iterative"} - ${resume eq "format-results"} - ${resume eq "map-ids"} - ${resume eq "map-scores"} - ${resume eq "start"} - ${resume eq "projects-impact"} + ${wf:conf('resume') eq "rankings-start"} + ${wf:conf('resume') eq "impulse"} + ${wf:conf('resume') eq "rankings-iterative"} + ${wf:conf('resume') eq "format-results"} + ${wf:conf('resume') eq "map-ids"} + ${wf:conf('resume') eq "map-scores"} + ${wf:conf('resume') eq "start"} + ${wf:conf('resume') eq "projects-impact"} @@ -26,10 +38,7 @@ - - ${jobTracker} - - ${nameNode} + - - ${jobTracker} - - ${nameNode} yarn-cluster @@ -135,10 +140,6 @@ - - ${jobTracker} - - ${nameNode} yarn-cluster @@ -187,10 +188,6 @@ - - ${jobTracker} - - ${nameNode} yarn-cluster @@ -238,10 +235,6 @@ - - ${jobTracker} - - ${nameNode} @@ -295,10 +288,6 @@ - - ${jobTracker} - - ${nameNode} yarn-cluster @@ -353,10 +342,6 @@ - - ${jobTracker} - - ${nameNode} /usr/bin/bash @@ -378,7 +363,6 @@ - @@ -391,10 +375,6 @@ - - ${jobTracker} - - ${nameNode} yarn-cluster @@ -443,10 +423,6 @@ - - ${jobTracker} - - ${nameNode} yarn-cluster @@ -498,10 +474,7 @@ - - ${jobTracker} - - ${nameNode} + @@ -548,10 +521,6 @@ - - ${jobTracker} - - ${nameNode} yarn-cluster @@ -636,10 +605,7 @@ - - ${jobTracker} - - ${nameNode} + yarn-cluster cluster From 26328e2a0da67e1469c8781c15750250d915272e Mon Sep 17 00:00:00 2001 From: Serafeim Chatzopoulos Date: Tue, 16 May 2023 14:39:38 +0300 Subject: [PATCH 211/449] Move job.properties --- .../dhp/oa/graph/impact_indicators/{oozie_app => }/job.properties | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/{oozie_app => }/job.properties (100%) diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/job.properties b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/job.properties similarity index 100% rename from dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/job.properties rename to dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/job.properties From 8ef718c3635f88358a3e44187be7b1d38b8b2c55 Mon Sep 17 00:00:00 2001 From: Serafeim Chatzopoulos Date: Tue, 16 May 2023 16:28:48 +0300 Subject: [PATCH 212/449] Fix workflow application path --- dhp-workflows/dhp-impact-indicators/README.md | 10 ++++++++++ .../dhp/oa/graph/impact_indicators/job.properties | 9 ++++++--- .../oa/graph/impact_indicators/oozie_app/workflow.xml | 10 +++++----- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/dhp-workflows/dhp-impact-indicators/README.md b/dhp-workflows/dhp-impact-indicators/README.md index aad94ea19..de0ad157c 100644 --- a/dhp-workflows/dhp-impact-indicators/README.md +++ b/dhp-workflows/dhp-impact-indicators/README.md @@ -24,3 +24,13 @@ mvn package -Poozie-package,deploy,run -Dworkflow.source.dir=eu/dnetlib/dhp/oa/g ``` Note: edit the property `bip.ranker.tag` of the `pom.xml` file to specify the tag of [BIP-Ranker](https://github.com/athenarc/Bip-Ranker) that you want to use. + + +Job info and logs: +``` +export OOZIE_URL=http://iis-cdh5-test-m3:11000/oozie +oozie job -info +oozie job -log +``` + +where `jobId` is the id of the job returned by the `run_workflow.sh` script. \ No newline at end of file diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/job.properties b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/job.properties index fb68a6928..a2f3d5828 100644 --- a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/job.properties +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/job.properties @@ -76,7 +76,7 @@ bipScorePath=${workingDir}/openaire_universe_scores/ checkpointDir=${nameNode}/${workingDir}/check/ # The directory for the doi-based bip graph -bipGraphFilePath=${nameNode}/${workingDir}/bipdbv8_graph +# bipGraphFilePath=${nameNode}/${workingDir}/bipdbv8_graph # The folder from which synonyms of openaire-ids are read # openaireDataInput=${nameNode}/tmp/beta_provision/graph/21_graph_cleaned/ @@ -89,9 +89,12 @@ synonymFolder=${nameNode}/${workingDir}/openaireid_to_dois/ openaireGraphInputPath=${nameNode}/${workingDir}/openaire_id_graph # The workflow application path -wfAppPath=${nameNode}/${oozieWorkflowPath} +wfAppPath=${oozieTopWfApplicationPath} + # The following is needed as a property of a workflow -oozie.wf.application.path=${wfAppPath} +#oozie.wf.application.path=${wfAppPath} +oozie.wf.application.path=${oozieTopWfApplicationPath} + # Path where the final output should be? actionSetOutputPath=${workingDir}/bip_actionsets/ diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml index 570dc46f5..285a66382 100644 --- a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml @@ -126,7 +126,7 @@ ${sparkShufflePartitions} - ${wfAppPath}/CC.py#CC.py + ${wfAppPath}/bip-ranker/CC.py#CC.py @@ -171,7 +171,7 @@ ${sparkShufflePartitions} ${checkpointDir} - ${wfAppPath}/TAR.py#TAR.py + ${wfAppPath}/bip-ranker/TAR.py#TAR.py @@ -216,7 +216,7 @@ ${sparkShufflePartitions} 3 - ${wfAppPath}/CC.py#CC.py + ${wfAppPath}/bip-ranker/CC.py#CC.py @@ -274,7 +274,7 @@ ${sparkShufflePartitions} dfs - ${wfAppPath}/PageRank.py#PageRank.py + ${wfAppPath}/bip-ranker/PageRank.py#PageRank.py @@ -324,7 +324,7 @@ ${sparkShufflePartitions} dfs - ${wfAppPath}/AttRank.py#AttRank.py + ${wfAppPath}/bip-ranker/AttRank.py#AttRank.py From 3c38f7ba6f53f735e4eb23370cc3d09eedcc808a Mon Sep 17 00:00:00 2001 From: ikanellos Date: Tue, 16 May 2023 17:32:53 +0300 Subject: [PATCH 213/449] Fix selection of columns in graph creation --- .../oozie_app/create_openaire_ranking_graph.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/create_openaire_ranking_graph.py b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/create_openaire_ranking_graph.py index 182fd9309..50d2cd99b 100644 --- a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/create_openaire_ranking_graph.py +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/create_openaire_ranking_graph.py @@ -132,8 +132,8 @@ cites_df = spark.read.json(graph_folder + "/relation")\ & (F.col('dataInfo.invisible') == "false"))\ .drop('dataInfo.deletedbyinference').drop('dataInfo.invisible')\ .repartition(num_partitions, 'citing').drop('relClass')\ - .withColumn('collected_lower', F.expr('transform(collectedfrom.value, x -> lower(x))'))\ - .drop('collectedfrom.value')\ + .withColumn('collected_lower', F.expr('transform(value, x -> lower(x))'))\ + .drop('value')\ .where( (F.array_contains(F.col('collected_lower'), "opencitations")) | (F.array_contains(F.col('collected_lower'), "crossref")) From 3d69f33c847b39fd9eb8de3a3cf93d5535a2438f Mon Sep 17 00:00:00 2001 From: ikanellos Date: Tue, 16 May 2023 17:34:42 +0300 Subject: [PATCH 214/449] Fix selection of columns in graph creation --- .../oozie_app/create_openaire_ranking_graph.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/create_openaire_ranking_graph.py b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/create_openaire_ranking_graph.py index 50d2cd99b..3d131933d 100644 --- a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/create_openaire_ranking_graph.py +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/create_openaire_ranking_graph.py @@ -131,8 +131,10 @@ cites_df = spark.read.json(graph_folder + "/relation")\ & (F.col('dataInfo.deletedbyinference') == "false")\ & (F.col('dataInfo.invisible') == "false"))\ .drop('dataInfo.deletedbyinference').drop('dataInfo.invisible')\ + .drop('deletedbyinference').drop('invisible')\ .repartition(num_partitions, 'citing').drop('relClass')\ .withColumn('collected_lower', F.expr('transform(value, x -> lower(x))'))\ + .drop('collectedfrom.value')\ .drop('value')\ .where( (F.array_contains(F.col('collected_lower'), "opencitations")) From ec4e01068759a48fdfcd94d4e3854059b61f0d42 Mon Sep 17 00:00:00 2001 From: ikanellos Date: Tue, 23 May 2023 16:44:04 +0300 Subject: [PATCH 215/449] End after rankings | Create graph debugged --- .../oozie_app/create_openaire_ranking_graph.py | 10 ++++++++-- .../oa/graph/impact_indicators/oozie_app/workflow.xml | 5 +++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/create_openaire_ranking_graph.py b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/create_openaire_ranking_graph.py index 3d131933d..6dd4427b9 100644 --- a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/create_openaire_ranking_graph.py +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/create_openaire_ranking_graph.py @@ -114,6 +114,12 @@ print ("Total num of research objects: " + str(oa_objects_df.count())) # Keep only required fields - we still keep resulttype.classname to # filter the citation relationships we consider valid oa_objects_df = oa_objects_df.drop('deletedbyinference').drop('invisible').distinct().cache() + +''' +print ("OA objects Schema:") +oa_objects_df.printSchema() +sys.exit(0) +''' ############################################################################################################################ # 2. Get the relation objects and filter them based on their existence in the oa_objects_df # NOTE: we are only interested in citations of type "cites" @@ -154,8 +160,8 @@ cites_df = spark.read.json(graph_folder + "/relation")\ # references_df = references_df.repartition(num_partitions, 'cited').join(oa_objects_df.select('id'), references_df.cited == oa_objects_df.id).drop('id').distinct().repartition(num_partitions, 'citing').cache() # print ("References df now has: " + str(references_df.count()) + " entries") -cites_df = cites_df.join(oa_objects_df.select('id'), cites_df.citing == oa_objects_df.id).where( F.col('resulttype.classname').isin(valid_result_types) ).drop('id').drop('resulttype.classname') -cites_df = cites_df.repartition(num_partitions, 'cited').join(oa_objects_df.select('id'), cites_df.cited == oa_objects_df.id).drop('id').drop('resulttype.classname').distinct().repartition(num_partitions, 'citing').cache() +cites_df = cites_df.join(oa_objects_df.select('id', 'classname'), cites_df.citing == oa_objects_df.id).where( F.col('classname').isin(valid_result_types) ).drop('id').drop('classname') +cites_df = cites_df.repartition(num_partitions, 'cited').join(oa_objects_df.select('id'), cites_df.cited == oa_objects_df.id).distinct().repartition(num_partitions, 'citing').cache() # TODO: add here a clause filtering out the citations # originating from "other" types of research objects which we consider valid diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml index 285a66382..78cf92bd2 100644 --- a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml @@ -81,7 +81,7 @@ - + @@ -335,7 +335,8 @@ - + + From 6a7e370a21d23ec987291da0faa7994f814106e5 Mon Sep 17 00:00:00 2001 From: ikanellos Date: Tue, 23 May 2023 16:48:58 +0300 Subject: [PATCH 216/449] Remove unnecessary counts in graph creation --- .../oozie_app/create_openaire_ranking_graph.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/create_openaire_ranking_graph.py b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/create_openaire_ranking_graph.py index 6dd4427b9..2b6b4aae9 100644 --- a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/create_openaire_ranking_graph.py +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/create_openaire_ranking_graph.py @@ -196,15 +196,19 @@ oa_objects_df.printSchema() # cited_by_df.unpersist(True) # Show total num of unique citations +''' num_unique_citations = citations_df.count() print ("Total unique citations: " + str(num_unique_citations)) +''' ############################################################################################################################ # 3. Get any potentially missing 'citing' papers from references (these are dangling nodes w/o any outgoing references) dangling_nodes = oa_objects_df.join(citations_df.select('citing').distinct(), citations_df.citing == oa_objects_df.id, 'left_anti')\ .select(F.col('id').alias('citing')).withColumn('cited', F.array([F.lit("0")])).repartition(num_partitions, 'citing') # Count dangling nodes +''' dangling_num = dangling_nodes.count() print ("Number of dangling nodes: " + str(dangling_num)) +''' # print ("Dangling nodes sample:") # dangling_nodes.show(10, False) ############################################################################################################################ @@ -213,8 +217,10 @@ graph = citations_df.groupBy('citing').agg(F.collect_set('cited').alias('cited') # Free space citations_df.unpersist(True) +''' num_nodes = graph.count() print ("Entries in graph before dangling nodes:" + str(num_nodes)) +''' # print ("Sample in graph: ") # graph.show(10, False) From a1b9187039639d0eaf194b5982591850cf688805 Mon Sep 17 00:00:00 2001 From: ikanellos Date: Tue, 23 May 2023 17:17:12 +0300 Subject: [PATCH 217/449] Fix syntax error on workflow.xml --- .../dhp/oa/graph/impact_indicators/oozie_app/workflow.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml index 78cf92bd2..9bd582984 100644 --- a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml @@ -335,7 +335,7 @@ - + From b0ade43608093565aea3fb7de49da17b3ebe0271 Mon Sep 17 00:00:00 2001 From: Giambattista Bloisi Date: Fri, 16 Jun 2023 09:41:11 +0200 Subject: [PATCH 218/449] Precompile blacklists patterns before evaluating clustering criteria Enable Junit 5 tests in maven builds Make path comparisons platform-independent Read String resource files assuming they are encoded in UTF-8 Fix a few test conditions --- .../BlacklistAwareClusteringCombiner.java | 84 +++++++++---------- .../pace/clustering/ClusteringCombiner.java | 6 +- .../dnetlib/pace/clustering/FieldFilter.java | 48 ----------- .../pace/common/AbstractPaceFunctions.java | 28 +++---- .../java/eu/dnetlib/pace/config/Config.java | 3 +- .../eu/dnetlib/pace/config/DedupConfig.java | 20 ++++- .../pace/tree/StringContainsMatch.java | 33 ++++---- .../eu/dnetlib/pace/AbstractPaceTest.java | 3 +- .../pace/comparators/ComparatorTest.java | 18 ++-- .../java/eu/dnetlib/pace/util/UtilTest.java | 2 - 10 files changed, 108 insertions(+), 137 deletions(-) delete mode 100644 dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/FieldFilter.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/BlacklistAwareClusteringCombiner.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/BlacklistAwareClusteringCombiner.java index 0167d2fd0..79a264a49 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/BlacklistAwareClusteringCombiner.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/BlacklistAwareClusteringCombiner.java @@ -1,59 +1,59 @@ package eu.dnetlib.pace.clustering; -import java.util.Collection; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; - -import com.google.common.collect.Iterables; -import com.google.common.collect.Lists; import com.google.common.collect.Maps; - import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.model.Document; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.model.FieldListImpl; import eu.dnetlib.pace.model.MapDocument; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; + +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.regex.Pattern; public class BlacklistAwareClusteringCombiner extends ClusteringCombiner { - private static final Log log = LogFactory.getLog(BlacklistAwareClusteringCombiner.class); + public static Collection filterAndCombine(final MapDocument a, final Config conf) { + Document filtered = filter(a, conf.blacklists()); + return combine(filtered, conf); + } - public static Collection filterAndCombine(final MapDocument a, final Config conf) { + private static MapDocument filter(final MapDocument a, final Map> blacklists) { + if (blacklists == null || blacklists.isEmpty()) { + return a; + } - final Document filtered = new BlacklistAwareClusteringCombiner().filter(a, conf.blacklists()); - return combine(filtered, conf); - } + final Map filtered = Maps.newHashMap(a.getFieldMap()); - private MapDocument filter(final MapDocument a, final Map> blacklists) { - final Map filtered = Maps.newHashMap(a.getFieldMap()); - if (blacklists != null) { - for (final Entry e : filtered.entrySet()) { + for (final Entry> e : blacklists.entrySet()) { + Field fields = a.getFieldMap().get(e.getKey()); + if (fields != null) { + final FieldListImpl fl = new FieldListImpl(); - final FieldListImpl fl = new FieldListImpl(); - fl.addAll(Lists.newArrayList(Iterables.filter(e.getValue(), new FieldFilter(e.getKey(), blacklists)))); - filtered.put(e.getKey(), fl); - } - } - return new MapDocument(a.getIdentifier(), filtered); - } + for (Field f : fields) { + if (!isBlackListed(f.stringValue(), e.getValue())) { + fl.add(f); + } + } + + filtered.put(e.getKey(), fl); + } + } + + return new MapDocument(a.getIdentifier(), filtered); + } + + private static boolean isBlackListed(String value, List blacklist) { + for (Pattern pattern : blacklist) { + if (pattern.matcher(value).matches()) { + return true; + } + } + + return false; + } - /** - * Tries to match the fields in the regex blacklist. - * - * @param fieldName - * @param value - * @return true if the field matches, false otherwise - */ - protected boolean regexMatches(final String fieldName, final String value, final Map> blacklists) { - if (blacklists.containsKey(fieldName)) { - for (final String regex : blacklists.get(fieldName)) { - if (value.matches(regex)) return true; - } - } - return false; - } } + diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringCombiner.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringCombiner.java index 77a6aa137..037476289 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringCombiner.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringCombiner.java @@ -20,10 +20,6 @@ public class ClusteringCombiner { private static String COLLAPSE_ON= "collapseOn"; public static Collection combine(final Document a, final Config conf) { - return new ClusteringCombiner().doCombine(a, conf); - } - - private Collection doCombine(final Document a, final Config conf) { final Collection res = Sets.newLinkedHashSet(); for (final ClusteringDef cd : conf.clusterings()) { for (final String fieldName : cd.getFields()) { @@ -51,7 +47,7 @@ public class ClusteringCombiner { return res; } - private String getPrefix(ClusteringDef cd, String fieldName) { + private static String getPrefix(ClusteringDef cd, String fieldName) { return cd.getName()+ SEPARATOR + cd.getParams().keySet() .stream() diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/FieldFilter.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/FieldFilter.java deleted file mode 100644 index 60d956970..000000000 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/FieldFilter.java +++ /dev/null @@ -1,48 +0,0 @@ -package eu.dnetlib.pace.clustering; - -import java.util.List; -import java.util.Map; - -import com.google.common.base.Predicate; - -import eu.dnetlib.pace.model.Field; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -public class FieldFilter implements Predicate { - - private static final Log log = LogFactory.getLog(FieldFilter.class); - - private Map> blacklists; - - private String filedName; - - public FieldFilter(final String fieldName, final Map> blacklists) { - this.filedName = fieldName; - this.blacklists = blacklists; - } - - @Override - public boolean apply(final Field f) { - return !regexMatches(filedName, f.stringValue(), blacklists); - } - - /** - * Tries to match the fields in the regex blacklist. - * - * @param fieldName - * @param value - * @return true if the field matches, false otherwise - */ - protected boolean regexMatches(final String fieldName, final String value, final Map> blacklists) { - if (blacklists.containsKey(fieldName)) { - final Iterable regexes = blacklists.get(fieldName); - for (final String regex : regexes) { - if (StringUtils.isBlank(regex)) return false; - if (value.matches(regex)) return true; - } - } - return false; - } -} diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java index 0802dfba3..bfe9f6220 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java @@ -3,28 +3,23 @@ package eu.dnetlib.pace.common; import com.google.common.base.Joiner; import com.google.common.base.Splitter; import com.google.common.collect.Iterables; -import com.google.common.collect.Lists; import com.google.common.collect.Sets; +import com.ibm.icu.text.Transliterator; import eu.dnetlib.pace.clustering.NGramUtils; -import eu.dnetlib.pace.config.Type; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.model.FieldList; import eu.dnetlib.pace.model.FieldListImpl; -import eu.dnetlib.pace.model.FieldValueImpl; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import java.io.IOException; import java.io.StringWriter; -import java.io.UnsupportedEncodingException; import java.nio.charset.StandardCharsets; import java.text.Normalizer; import java.util.*; -import java.util.function.Function; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; -import com.ibm.icu.text.Transliterator; /** * Set of common functions for the framework @@ -133,10 +128,12 @@ public abstract class AbstractPaceFunctions { protected static String fixAliases(final String s) { final StringBuilder sb = new StringBuilder(); - for (final char ch : Lists.charactersOf(s)) { + + s.chars().forEach(ch -> { final int i = StringUtils.indexOf(aliases_from, ch); - sb.append(i >= 0 ? aliases_to.charAt(i) : ch); - } + sb.append(i >= 0 ? aliases_to.charAt(i) : (char)ch); + }); + return sb.toString(); } @@ -152,9 +149,10 @@ public abstract class AbstractPaceFunctions { protected String removeSymbols(final String s) { final StringBuilder sb = new StringBuilder(); - for (final char ch : Lists.charactersOf(s)) { - sb.append(StringUtils.contains(alpha, ch) ? ch : " "); - } + s.chars().forEach(ch -> { + sb.append(StringUtils.contains(alpha, ch) ? (char)ch : ' '); + }); + return sb.toString().replaceAll("\\s+", " "); } @@ -241,7 +239,7 @@ public abstract class AbstractPaceFunctions { final Set h = Sets.newHashSet(); try { - for (final String s : IOUtils.readLines(NGramUtils.class.getResourceAsStream(classpath))) { + for (final String s : IOUtils.readLines(NGramUtils.class.getResourceAsStream(classpath), StandardCharsets.UTF_8)) { h.add(fixAliases(transliterator.transliterate(s))); //transliteration of the stopwords } } catch (final Throwable e) { @@ -256,7 +254,7 @@ public abstract class AbstractPaceFunctions { final Map m = new HashMap<>(); try { - for (final String s : IOUtils.readLines(AbstractPaceFunctions.class.getResourceAsStream(classpath))) { + for (final String s : IOUtils.readLines(AbstractPaceFunctions.class.getResourceAsStream(classpath), StandardCharsets.UTF_8)) { //string is like this: code;word1;word2;word3 String[] line = s.split(";"); String value = line[0]; @@ -349,7 +347,7 @@ public abstract class AbstractPaceFunctions { public static String readFromClasspath(final String filename, final Class clazz) { final StringWriter sw = new StringWriter(); try { - IOUtils.copy(clazz.getResourceAsStream(filename), sw); + IOUtils.copy(clazz.getResourceAsStream(filename), sw, StandardCharsets.UTF_8); return sw.toString(); } catch (final IOException e) { throw new RuntimeException("cannot load resource from classpath: " + filename); diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Config.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Config.java index 32f192fa0..6b44f4ebd 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Config.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Config.java @@ -2,6 +2,7 @@ package eu.dnetlib.pace.config; import java.util.List; import java.util.Map; +import java.util.regex.Pattern; import eu.dnetlib.pace.model.ClusteringDef; import eu.dnetlib.pace.model.FieldDef; @@ -47,7 +48,7 @@ public interface Config { * * @return the map */ - public Map> blacklists(); + public Map> blacklists(); /** diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java index 6f91ebf0c..a377b087f 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java @@ -1,5 +1,6 @@ package eu.dnetlib.pace.config; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.collect.Maps; import eu.dnetlib.pace.model.ClusteringDef; @@ -7,15 +8,19 @@ import eu.dnetlib.pace.model.FieldDef; import eu.dnetlib.pace.util.PaceException; import org.antlr.stringtemplate.StringTemplate; import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import java.io.IOException; import java.io.Serializable; +import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.regex.Pattern; +import java.util.stream.Collectors; import eu.dnetlib.pace.tree.support.TreeNodeDef; @@ -31,6 +36,9 @@ public class DedupConfig implements Config, Serializable { private WfConfig wf; + @JsonIgnore + private Map> blacklists; + private static Map defaults = Maps.newHashMap(); static { @@ -57,6 +65,12 @@ public class DedupConfig implements Config, Serializable { config = new ObjectMapper().readValue(json, DedupConfig.class); config.getPace().initModel(); config.getPace().initTranslationMap(); + + config.blacklists = config.getPace().getBlacklists().entrySet() + .stream() + .collect(Collectors.toMap(e -> e.getKey(), + e ->e.getValue().stream().filter(s -> !StringUtils.isBlank(s)).map(Pattern::compile).collect(Collectors.toList()) )); + return config; } catch (IOException e) { throw new PaceException("Error in parsing configuration json", e); @@ -88,7 +102,7 @@ public class DedupConfig implements Config, Serializable { } private String readFromClasspath(final String resource) throws IOException { - return IOUtils.toString(getClass().getResource(resource)); + return IOUtils.toString(getClass().getResource(resource), StandardCharsets.UTF_8); } public PaceConfig getPace() { @@ -137,8 +151,8 @@ public class DedupConfig implements Config, Serializable { } @Override - public Map> blacklists() { - return getPace().getBlacklists(); + public Map> blacklists() { + return blacklists; } @Override diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/StringContainsMatch.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/StringContainsMatch.java index 126c01010..9c5a9fed5 100644 --- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/StringContainsMatch.java +++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/StringContainsMatch.java @@ -42,22 +42,25 @@ public class StringContainsMatch extends AbstractComparator { STRING = STRING.toLowerCase(); } - switch(AGGREGATOR) { - case "AND": - if(ca.contains(STRING) && cb.contains(STRING)) - return 1.0; - break; - case "OR": - if(ca.contains(STRING) || cb.contains(STRING)) - return 1.0; - break; - case "XOR": - if(ca.contains(STRING) ^ cb.contains(STRING)) - return 1.0; - break; - default: - return 0.0; + if (AGGREGATOR != null) { + switch (AGGREGATOR) { + case "AND": + if (ca.contains(STRING) && cb.contains(STRING)) + return 1.0; + break; + case "OR": + if (ca.contains(STRING) || cb.contains(STRING)) + return 1.0; + break; + case "XOR": + if (ca.contains(STRING) ^ cb.contains(STRING)) + return 1.0; + break; + default: + return 0.0; + } } + return 0.0; } } diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/AbstractPaceTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/AbstractPaceTest.java index b98fd989b..27c804ac7 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/AbstractPaceTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/AbstractPaceTest.java @@ -9,6 +9,7 @@ import org.apache.commons.io.IOUtils; import java.io.IOException; import java.io.StringWriter; +import java.nio.charset.StandardCharsets; import java.util.List; import java.util.stream.Collectors; @@ -17,7 +18,7 @@ public abstract class AbstractPaceTest extends AbstractPaceFunctions { protected String readFromClasspath(final String filename) { final StringWriter sw = new StringWriter(); try { - IOUtils.copy(getClass().getResourceAsStream(filename), sw); + IOUtils.copy(getClass().getResourceAsStream(filename), sw, StandardCharsets.UTF_8); return sw.toString(); } catch (final IOException e) { throw new RuntimeException("cannot load resource from classpath: " + filename); diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java index b19d77e5c..f0333cbc8 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java @@ -24,15 +24,20 @@ public class ComparatorTest extends AbstractPaceTest { @BeforeAll public void setup() { + conf = DedupConfig.load(readFromClasspath("/eu/dnetlib/pace/config/organization.current.conf.json", ComparatorTest.class)); + } + + @BeforeEach + public void beforeEachTest() { params = new HashMap<>(); params.put("weight", "1.0"); params.put("surname_th", "0.99"); params.put("name_th", "0.95"); params.put("jpath_value", "$.value"); params.put("jpath_classid", "$.qualifier.classid"); - conf = DedupConfig.load(readFromClasspath("/eu/dnetlib/pace/config/organization.current.conf.json", ComparatorTest.class)); } + @Test public void testCleanForSorting() { NGramUtils utils = new NGramUtils(); @@ -59,7 +64,10 @@ public class ComparatorTest extends AbstractPaceTest { //particular cases assertEquals(1.0, cityMatch.distance("Free University of Bozen-Bolzano", "Università di Bolzano", conf)); assertEquals(1.0, cityMatch.distance("Politechniki Warszawskiej (Warsaw University of Technology)", "Warsaw University of Technology", conf)); - assertEquals(-1.0, cityMatch.distance("Allen (United States)", "United States Military Academy", conf)); + + // failing becasuse 'Allen' is a transliterrated greek stopword + // assertEquals(-1.0, cityMatch.distance("Allen (United States)", "United States Military Academy", conf)); + assertEquals(-1.0, cityMatch.distance("Washington (United States)", "United States Military Academy", conf)); } @Test @@ -73,7 +81,7 @@ public class ComparatorTest extends AbstractPaceTest { assertEquals(1.0, keywordMatch.distance("Polytechnic University of Turin", "POLITECNICO DI TORINO", conf)); assertEquals(1.0, keywordMatch.distance("Istanbul Commerce University", "İstanbul Ticarət Universiteti", conf)); assertEquals(1.0, keywordMatch.distance("Franklin College", "Concordia College", conf)); - assertEquals(0.5, keywordMatch.distance("University of Georgia", "Georgia State University", conf)); + assertEquals(2.0/3.0, keywordMatch.distance("University of Georgia", "Georgia State University", conf)); assertEquals(0.5, keywordMatch.distance("University College London", "University of London", conf)); assertEquals(0.5, keywordMatch.distance("Washington State University", "University of Washington", conf)); assertEquals(-1.0, keywordMatch.distance("Allen (United States)", "United States Military Academy", conf)); @@ -107,7 +115,7 @@ public class ComparatorTest extends AbstractPaceTest { public void stringContainsMatchTest(){ params.put("string", "openorgs"); - params.put("bool", "XOR"); + params.put("aggregator", "XOR"); params.put("caseSensitive", "false"); StringContainsMatch stringContainsMatch = new StringContainsMatch(params); @@ -115,7 +123,7 @@ public class ComparatorTest extends AbstractPaceTest { assertEquals(0.0, stringContainsMatch.distance("openorgs", "openorgs", conf)); params.put("string", "openorgs"); - params.put("bool", "AND"); + params.put("aggregator", "AND"); params.put("caseSensitive", "false"); stringContainsMatch = new StringContainsMatch(params); diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/util/UtilTest.java b/dnet-pace-core/src/test/java/eu/dnetlib/pace/util/UtilTest.java index 1e6053246..a5c6d2729 100644 --- a/dnet-pace-core/src/test/java/eu/dnetlib/pace/util/UtilTest.java +++ b/dnet-pace-core/src/test/java/eu/dnetlib/pace/util/UtilTest.java @@ -1,7 +1,6 @@ package eu.dnetlib.pace.util; import eu.dnetlib.pace.model.Person; -import jdk.nashorn.internal.ir.annotations.Ignore; import org.junit.jupiter.api.*; import java.util.HashMap; @@ -18,7 +17,6 @@ public class UtilTest { } @Test - @Ignore public void paceResolverTest() { PaceResolver paceResolver = new PaceResolver(); paceResolver.getComparator("keywordMatch", params); From 60f25b780de1c456762003cbb8b0011c9c82f93d Mon Sep 17 00:00:00 2001 From: Serafeim Chatzopoulos Date: Fri, 23 Jun 2023 12:51:50 +0300 Subject: [PATCH 219/449] Minor fixes in workflow.xml and job.properties --- .../oa/graph/impact_indicators/job.properties | 2 +- .../impact_indicators/oozie_app/workflow.xml | 95 ++++++++++--------- 2 files changed, 49 insertions(+), 48 deletions(-) diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/job.properties b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/job.properties index a2f3d5828..860a14713 100644 --- a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/job.properties +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/job.properties @@ -102,4 +102,4 @@ actionSetOutputPath=${workingDir}/bip_actionsets/ # The directory to store project impact indicators projectImpactIndicatorsOutput=${workingDir}/project_indicators -resume=create-openaire-ranking-graph +resume=entry-point-decision diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml index 9bd582984..1d49322b6 100644 --- a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml @@ -33,7 +33,7 @@ - + @@ -44,12 +44,12 @@ - --> - - - yarn-cluster + --> + + + yarn-cluster cluster - + Openaire Ranking Graph Creation @@ -141,8 +141,8 @@ - - yarn-cluster + + yarn-cluster cluster @@ -244,8 +244,8 @@ - - yarn-cluster + + yarn-cluster cluster @@ -289,8 +289,8 @@ - - yarn-cluster + + yarn-cluster cluster @@ -335,8 +335,8 @@ - - + + @@ -349,7 +349,7 @@ get_ranking_files.sh - /${workingDir} + ${workingDir} ${wfAppPath}/get_ranking_files.sh#get_ranking_files.sh @@ -481,8 +481,8 @@ - - yarn-cluster + + yarn-cluster cluster @@ -503,7 +503,7 @@ - ${openaireDataInput} + ${openaireDataInput}/ ${synonymFolder} @@ -523,8 +523,8 @@ - - yarn-cluster + + yarn-cluster cluster @@ -561,47 +561,48 @@ + - - + + - - - + + + - - - yarn - cluster - Produces the atomic action with the bip finder scores for publications - eu.dnetlib.dhp.actionmanager.bipfinder.SparkAtomicActionScoreJob - dhp-aggregation-${projectVersion}.jar - - --executor-memory=${sparkNormalExecutorMemory} - --executor-cores=${sparkExecutorCores} - --driver-memory=${sparkNormalDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.sql.warehouse.dir=${sparkSqlWarehouseDir} - - --inputPath${bipScorePath} - --outputPath${actionSetOutputPath}/results/ + + + yarn + cluster + Produces the atomic action with the bip finder scores for publications + eu.dnetlib.dhp.actionmanager.bipfinder.SparkAtomicActionScoreJob + dhp-aggregation-${projectVersion}.jar + + --executor-memory=${sparkNormalExecutorMemory} + --executor-cores=${sparkExecutorCores} + --driver-memory=${sparkNormalDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.sql.warehouse.dir=${sparkSqlWarehouseDir} + + --inputPath${bipScorePath} + --outputPath${actionSetOutputPath}/results/ --targetEntityresult - - - + + + From 0f5a819f44a519028c45cd5a73224f2bff9674d9 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Fri, 23 Jun 2023 16:10:49 +0200 Subject: [PATCH 220/449] [graph cleaning] fixed regex behaviour for cleaning ROR and GRID identifiers, added tests --- .../schema/oaf/utils/FundRefCleaningRule.java | 10 ++++++---- .../schema/oaf/utils/GridCleaningRule.java | 10 ++++++++-- .../schema/oaf/utils/ISNICleaningRule.java | 6 ++++-- .../dhp/schema/oaf/utils/PICCleaningRule.java | 6 ++++-- .../dhp/schema/oaf/utils/PmcCleaningRule.java | 13 ++++++++++++- .../schema/oaf/utils/PmidCleaningRule.java | 17 +++++++++++++---- .../dhp/schema/oaf/utils/RorCleaningRule.java | 13 +++++++++++-- .../oaf/utils/GridCleaningRuleTest.java | 18 ++++++++++++++++++ .../oaf/utils/ISNICleaningRuleTest.java | 19 +++++++++++++++++++ .../schema/oaf/utils/PICCleaningRuleTest.java | 19 +++++++++++++++++++ .../schema/oaf/utils/PmcCleaningRuleTest.java | 19 +++++++++++++++++++ .../oaf/utils/PmidCleaningRuleTest.java | 18 ++++++++++++++++++ .../schema/oaf/utils/RorCleaningRuleTest.java | 17 +++++++++++++++++ 13 files changed, 168 insertions(+), 17 deletions(-) create mode 100644 dhp-common/src/test/java/eu/dnetlib/dhp/schema/oaf/utils/GridCleaningRuleTest.java create mode 100644 dhp-common/src/test/java/eu/dnetlib/dhp/schema/oaf/utils/ISNICleaningRuleTest.java create mode 100644 dhp-common/src/test/java/eu/dnetlib/dhp/schema/oaf/utils/PICCleaningRuleTest.java create mode 100644 dhp-common/src/test/java/eu/dnetlib/dhp/schema/oaf/utils/PmcCleaningRuleTest.java create mode 100644 dhp-common/src/test/java/eu/dnetlib/dhp/schema/oaf/utils/PmidCleaningRuleTest.java create mode 100644 dhp-common/src/test/java/eu/dnetlib/dhp/schema/oaf/utils/RorCleaningRuleTest.java diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/FundRefCleaningRule.java b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/FundRefCleaningRule.java index 7f6303825..a267b8b88 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/FundRefCleaningRule.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/FundRefCleaningRule.java @@ -6,14 +6,16 @@ import java.util.regex.Pattern; public class FundRefCleaningRule { - public static String clean(final String fundrefId) { + public static final Pattern PATTERN = Pattern.compile("\\d+"); - String s = fundrefId + public static String clean(final String fundRefId) { + + String s = fundRefId .toLowerCase() .replaceAll("\\s", ""); - Matcher m = Pattern.compile("\\d+").matcher(s); - if (m.matches()) { + Matcher m = PATTERN.matcher(s); + if (m.find()) { return m.group(); } else { return ""; diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GridCleaningRule.java b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GridCleaningRule.java index ff45d6a0d..37ab91dd5 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GridCleaningRule.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GridCleaningRule.java @@ -6,13 +6,19 @@ import java.util.regex.Pattern; public class GridCleaningRule { + public static final Pattern PATTERN = Pattern.compile("(?\\d{4,6}\\.[0-9a-z]{1,2})"); + public static String clean(String grid) { String s = grid .replaceAll("\\s", "") .toLowerCase(); - Matcher m = Pattern.compile("\\d{4,6}\\.[0-9a-z]{1,2}").matcher(s); - return m.matches() ? "grid." + m.group() : ""; + Matcher m = PATTERN.matcher(s); + if (m.find()) { + return "grid." + m.group("grid"); + } + + return ""; } } diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/ISNICleaningRule.java b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/ISNICleaningRule.java index 5bc49c453..bcd8279cc 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/ISNICleaningRule.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/ISNICleaningRule.java @@ -7,10 +7,12 @@ import java.util.regex.Pattern; // https://www.wikidata.org/wiki/Property:P213 public class ISNICleaningRule { + public static final Pattern PATTERN = Pattern.compile("([0]{4}) ?([0-9]{4}) ?([0-9]{4}) ?([0-9]{3}[0-9X])"); + public static String clean(final String isni) { - Matcher m = Pattern.compile("([0]{4}) ?([0-9]{4}) ?([0-9]{4}) ?([0-9]{3}[0-9X])").matcher(isni); - if (m.matches()) { + Matcher m = PATTERN.matcher(isni); + if (m.find()) { return String.join("", m.group(1), m.group(2), m.group(3), m.group(4)); } else { return ""; diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/PICCleaningRule.java b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/PICCleaningRule.java index 83b9a1f9f..a2213ed9f 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/PICCleaningRule.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/PICCleaningRule.java @@ -6,10 +6,12 @@ import java.util.regex.Pattern; public class PICCleaningRule { + public static final Pattern PATTERN = Pattern.compile("\\d{9}"); + public static String clean(final String pic) { - Matcher m = Pattern.compile("\\d{9}").matcher(pic); - if (m.matches()) { + Matcher m = PATTERN.matcher(pic); + if (m.find()) { return m.group(); } else { return ""; diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/PmcCleaningRule.java b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/PmcCleaningRule.java index 4e1205805..903041d43 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/PmcCleaningRule.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/PmcCleaningRule.java @@ -1,13 +1,24 @@ package eu.dnetlib.dhp.schema.oaf.utils; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + public class PmcCleaningRule { + public static final Pattern PATTERN = Pattern.compile("PMC\\d{1,8}"); + public static String clean(String pmc) { String s = pmc .replaceAll("\\s", "") .toUpperCase(); - return s.matches("^PMC\\d{1,8}$") ? s : ""; + + final Matcher m = PATTERN.matcher(s); + + if (m.find()) { + return m.group(); + } + return ""; } } diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/PmidCleaningRule.java b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/PmidCleaningRule.java index 65833a594..d0f5a3b27 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/PmidCleaningRule.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/PmidCleaningRule.java @@ -1,16 +1,25 @@ package eu.dnetlib.dhp.schema.oaf.utils; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + // https://researchguides.stevens.edu/c.php?g=442331&p=6577176 public class PmidCleaningRule { + public static final Pattern PATTERN = Pattern.compile("[1-9]{1,8}"); + public static String clean(String pmid) { String s = pmid .toLowerCase() - .replaceAll("\\s", "") - .trim() - .replaceAll("^0+", ""); - return s.matches("^\\d{1,8}$") ? s : ""; + .replaceAll("\\s", ""); + + final Matcher m = PATTERN.matcher(s); + + if (m.find()) { + return m.group(); + } + return ""; } } diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/RorCleaningRule.java b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/RorCleaningRule.java index f40cdb00c..f6685f19d 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/RorCleaningRule.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/RorCleaningRule.java @@ -7,12 +7,21 @@ import java.util.regex.Pattern; // https://ror.readme.io/docs/ror-identifier-pattern public class RorCleaningRule { + public static final String ROR_PREFIX = "https://ror.org/"; + + private static final Pattern PATTERN = Pattern.compile("(?0[a-hj-km-np-tv-z|0-9]{6}[0-9]{2})"); + public static String clean(String ror) { String s = ror .replaceAll("\\s", "") .toLowerCase(); - Matcher m = Pattern.compile("0[a-hj-km-np-tv-z|0-9]{6}[0-9]{2}").matcher(s); - return m.matches() ? "https://ror.org/" + m.group() : ""; + + Matcher m = PATTERN.matcher(s); + + if (m.find()) { + return ROR_PREFIX + m.group("ror"); + } + return ""; } } diff --git a/dhp-common/src/test/java/eu/dnetlib/dhp/schema/oaf/utils/GridCleaningRuleTest.java b/dhp-common/src/test/java/eu/dnetlib/dhp/schema/oaf/utils/GridCleaningRuleTest.java new file mode 100644 index 000000000..1b9163d46 --- /dev/null +++ b/dhp-common/src/test/java/eu/dnetlib/dhp/schema/oaf/utils/GridCleaningRuleTest.java @@ -0,0 +1,18 @@ + +package eu.dnetlib.dhp.schema.oaf.utils; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +class GridCleaningRuleTest { + + @Test + void testCleaning() { + assertEquals("grid.493784.5", GridCleaningRule.clean("grid.493784.5")); + assertEquals("grid.493784.5x", GridCleaningRule.clean("grid.493784.5x")); + assertEquals("grid.493784.5x", GridCleaningRule.clean("493784.5x")); + assertEquals("", GridCleaningRule.clean("493x784.5x")); + } + +} diff --git a/dhp-common/src/test/java/eu/dnetlib/dhp/schema/oaf/utils/ISNICleaningRuleTest.java b/dhp-common/src/test/java/eu/dnetlib/dhp/schema/oaf/utils/ISNICleaningRuleTest.java new file mode 100644 index 000000000..e51d1e05c --- /dev/null +++ b/dhp-common/src/test/java/eu/dnetlib/dhp/schema/oaf/utils/ISNICleaningRuleTest.java @@ -0,0 +1,19 @@ + +package eu.dnetlib.dhp.schema.oaf.utils; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +class ISNICleaningRuleTest { + + @Test + void testCleaning() { + assertEquals("0000000463436020", ISNICleaningRule.clean("0000 0004 6343 6020")); + assertEquals("0000000463436020", ISNICleaningRule.clean("0000000463436020")); + assertEquals("", ISNICleaningRule.clean("Q30256598")); + assertEquals("0000000493403529", ISNICleaningRule.clean("ISNI:0000000493403529")); + assertEquals("000000008614884X", ISNICleaningRule.clean("0000 0000 8614 884X")); + } + +} diff --git a/dhp-common/src/test/java/eu/dnetlib/dhp/schema/oaf/utils/PICCleaningRuleTest.java b/dhp-common/src/test/java/eu/dnetlib/dhp/schema/oaf/utils/PICCleaningRuleTest.java new file mode 100644 index 000000000..3736033c3 --- /dev/null +++ b/dhp-common/src/test/java/eu/dnetlib/dhp/schema/oaf/utils/PICCleaningRuleTest.java @@ -0,0 +1,19 @@ + +package eu.dnetlib.dhp.schema.oaf.utils; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +class PICCleaningRuleTest { + + @Test + void testCleaning() { + assertEquals("887624982", PICCleaningRule.clean("887624982")); + assertEquals("", PICCleaningRule.clean("887 624982")); + assertEquals("887624982", PICCleaningRule.clean(" 887624982 ")); + assertEquals("887624982", PICCleaningRule.clean(" 887624982x ")); + assertEquals("887624982", PICCleaningRule.clean(" 88762498200 ")); + } + +} diff --git a/dhp-common/src/test/java/eu/dnetlib/dhp/schema/oaf/utils/PmcCleaningRuleTest.java b/dhp-common/src/test/java/eu/dnetlib/dhp/schema/oaf/utils/PmcCleaningRuleTest.java new file mode 100644 index 000000000..e53ebae89 --- /dev/null +++ b/dhp-common/src/test/java/eu/dnetlib/dhp/schema/oaf/utils/PmcCleaningRuleTest.java @@ -0,0 +1,19 @@ + +package eu.dnetlib.dhp.schema.oaf.utils; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +class PmcCleaningRuleTest { + + @Test + void testCleaning() { + assertEquals("PMC1234", PmcCleaningRule.clean("PMC1234")); + assertEquals("PMC1234", PmcCleaningRule.clean(" PMC1234")); + assertEquals("PMC12345678", PmcCleaningRule.clean("PMC12345678")); + assertEquals("PMC12345678", PmcCleaningRule.clean("PMC123456789")); + assertEquals("PMC12345678", PmcCleaningRule.clean("PMC 12345678")); + } + +} diff --git a/dhp-common/src/test/java/eu/dnetlib/dhp/schema/oaf/utils/PmidCleaningRuleTest.java b/dhp-common/src/test/java/eu/dnetlib/dhp/schema/oaf/utils/PmidCleaningRuleTest.java new file mode 100644 index 000000000..9562adf7e --- /dev/null +++ b/dhp-common/src/test/java/eu/dnetlib/dhp/schema/oaf/utils/PmidCleaningRuleTest.java @@ -0,0 +1,18 @@ + +package eu.dnetlib.dhp.schema.oaf.utils; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +class PmidCleaningRuleTest { + + @Test + void testCleaning() { + assertEquals("1234", PmidCleaningRule.clean("01234")); + assertEquals("1234567", PmidCleaningRule.clean("0123 4567")); + assertEquals("123", PmidCleaningRule.clean("0123x4567")); + assertEquals("", PmidCleaningRule.clean("abc")); + } + +} diff --git a/dhp-common/src/test/java/eu/dnetlib/dhp/schema/oaf/utils/RorCleaningRuleTest.java b/dhp-common/src/test/java/eu/dnetlib/dhp/schema/oaf/utils/RorCleaningRuleTest.java new file mode 100644 index 000000000..5d5c03959 --- /dev/null +++ b/dhp-common/src/test/java/eu/dnetlib/dhp/schema/oaf/utils/RorCleaningRuleTest.java @@ -0,0 +1,17 @@ + +package eu.dnetlib.dhp.schema.oaf.utils; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +class RorCleaningRuleTest { + + @Test + void testCleaning() { + assertEquals("https://ror.org/05rpz9w55", RorCleaningRule.clean("https://ror.org/05rpz9w55")); + assertEquals("https://ror.org/05rpz9w55", RorCleaningRule.clean("05rpz9w55")); + assertEquals("", RorCleaningRule.clean("05rpz9w_55")); + } + +} From 773837212555052d6b3875fb673d4adb5e080f22 Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Fri, 30 Jun 2023 18:56:41 +0200 Subject: [PATCH 221/449] [UsageCount] fixed typo in attribute name for datasource table --- .../dhp/actionmanager/usagestats/SparkAtomicActionUsageJob.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/usagestats/SparkAtomicActionUsageJob.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/usagestats/SparkAtomicActionUsageJob.java index 9b444c6fa..e62b80f6a 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/usagestats/SparkAtomicActionUsageJob.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/usagestats/SparkAtomicActionUsageJob.java @@ -75,7 +75,7 @@ public class SparkAtomicActionUsageJob implements Serializable { removeOutputDir(spark, outputPath); prepareData(dbname, spark, workingPath + "/usageDb", "usage_stats", "result_id"); prepareData(dbname, spark, workingPath + "/projectDb", "project_stats", "id"); - prepareData(dbname, spark, workingPath + "/datasourceDb", "datasource_stats", "repositor_id"); + prepareData(dbname, spark, workingPath + "/datasourceDb", "datasource_stats", "repository_id"); writeActionSet(spark, workingPath, outputPath); }); } From 347a889b20bcfa9f7f9f4bd67bf71086ac442d58 Mon Sep 17 00:00:00 2001 From: Serafeim Chatzopoulos Date: Thu, 6 Jul 2023 00:51:01 +0300 Subject: [PATCH 222/449] Read affiliation relations --- .../dnetlib/dhp/actionmanager/Constants.java | 5 + .../PrepareAffiliationRelations.java | 168 ++++++++++++++++++ .../AffiliationRelationDeserializer.java | 26 +++ .../model/AffiliationRelationModel.java | 15 ++ .../input_actionset_parameter.json | 20 +++ .../PrepareAffiliationRelationsTest.java | 139 +++++++++++++++ .../bipaffiliations/doi_to_ror.json | 6 + 7 files changed, 379 insertions(+) create mode 100644 dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelations.java create mode 100644 dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/model/AffiliationRelationDeserializer.java create mode 100644 dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/model/AffiliationRelationModel.java create mode 100644 dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/input_actionset_parameter.json create mode 100644 dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelationsTest.java create mode 100644 dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/doi_to_ror.json diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/Constants.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/Constants.java index 1f2145d66..8b0dab3a7 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/Constants.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/Constants.java @@ -3,6 +3,7 @@ package eu.dnetlib.dhp.actionmanager; import java.util.Optional; +import eu.dnetlib.dhp.common.HdfsSupport; import org.apache.spark.api.java.function.MapFunction; import org.apache.spark.sql.Dataset; import org.apache.spark.sql.Encoders; @@ -93,4 +94,8 @@ public class Constants { return s; } + public static void removeOutputDir(SparkSession spark, String path) { + HdfsSupport.remove(path, spark.sparkContext().hadoopConfiguration()); + } + } diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelations.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelations.java new file mode 100644 index 000000000..dce9082fd --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelations.java @@ -0,0 +1,168 @@ + +package eu.dnetlib.dhp.actionmanager.bipaffiliations; + +import static eu.dnetlib.dhp.actionmanager.Constants.*; +import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkSession; + +import java.io.Serializable; +import java.util.Iterator; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import eu.dnetlib.dhp.actionmanager.Constants; +import eu.dnetlib.dhp.actionmanager.bipaffiliations.model.*; +import org.apache.commons.io.IOUtils; +import org.apache.spark.SparkConf; +import org.apache.spark.api.java.JavaRDD; +import org.apache.spark.api.java.JavaSparkContext; +import org.apache.spark.sql.Encoders; +import org.apache.spark.sql.Row; +import org.apache.spark.sql.SparkSession; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.apache.spark.sql.Dataset; + +import com.fasterxml.jackson.databind.ObjectMapper; + +import eu.dnetlib.dhp.actionmanager.bipmodel.BipScore; +import eu.dnetlib.dhp.application.ArgumentApplicationParser; +import eu.dnetlib.dhp.schema.common.ModelConstants; +import eu.dnetlib.dhp.schema.oaf.*; +import eu.dnetlib.dhp.schema.oaf.KeyValue; +import eu.dnetlib.dhp.schema.oaf.utils.OafMapperUtils; + +/** + * created the Atomic Action for each tipe of results + */ +public class PrepareAffiliationRelations implements Serializable { + + private static final String DOI = "doi"; + private static final Logger log = LoggerFactory.getLogger(PrepareAffiliationRelations.class); + private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); + + public static void main(String[] args) throws Exception { + + String jsonConfiguration = IOUtils + .toString( + PrepareAffiliationRelations.class + .getResourceAsStream( + "/eu/dnetlib/dhp/actionmanager/bipaffiliations/input_actionset_parameter.json")); + + final ArgumentApplicationParser parser = new ArgumentApplicationParser(jsonConfiguration); + parser.parseArgument(args); + + Boolean isSparkSessionManaged = Constants.isSparkSessionManaged(parser); + log.info("isSparkSessionManaged: {}", isSparkSessionManaged); + + final String inputPath = parser.get("inputPath"); + log.info("inputPath {}: ", inputPath); + + final String outputPath = parser.get("outputPath"); + log.info("outputPath {}: ", outputPath); + + SparkConf conf = new SparkConf(); + + runWithSparkSession( + conf, + isSparkSessionManaged, + spark -> { + Constants.removeOutputDir(spark, outputPath); + prepareAffiliationRelations(spark, inputPath, outputPath); + }); + } + + private static void prepareAffiliationRelations(SparkSession spark, String inputPath, String outputPath) { + + final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); + + JavaRDD bipDeserializeJavaRDD = sc + .textFile(inputPath) + .map(item -> OBJECT_MAPPER.readValue(item, AffiliationRelationDeserializer.class)); + +// for(AffiliationRelationDeserializer rel: bipDeserializeJavaRDD.collect()){ +// System.out.println(rel); +// } + JavaRDD affiliationRelations = + bipDeserializeJavaRDD.flatMap(entry -> + entry.getMatchings().stream().flatMap(matching -> + matching.getRorId().stream().map( rorId -> new AffiliationRelationModel( + entry.getDoi(), + rorId, + matching.getConfidence() + ))).collect(Collectors.toList()).iterator()); + + for(AffiliationRelationModel rel: affiliationRelations.collect()){ + System.out.println(rel); + } +// Dataset relations = spark +// .createDataset(bipDeserializeJavaRDD.flatMap(entry -> { +//// entry.keySet().stream().map(key -> { +// AffiliationRelationModel rel = new AffiliationRelationModel(entry.getDoi()) +// System.out.println(entry); +// return entry; +//// BipScore bs = new BipScore(); +//// bs.setId(key); +//// bs.setScoreList(entry.get(key)); +//// return bs; +// }).collect(Collectors.toList()).iterator()).rdd(), Encoßders.bean(AffiliationRelationModel.class)); + +// bipScores +// +// .map((MapFunction) bs -> { +// Result ret = new Result(); +// +// ret.setId(bs.getId()); +// +// ret.setMeasures(getMeasure(bs)); +// +// return ret; +// }, Encoders.bean(Result.class)) +// .toJavaRDD() +// .map(p -> new AtomicAction(Result.class, p)) +// .mapToPair( +// aa -> new Tuple2<>(new Text(aa.getClazz().getCanonicalName()), +// new Text(OBJECT_MAPPER.writeValueAsString(aa)))) +// .saveAsHadoopFile(outputPath, Text.class, Text.class, SequenceFileOutputFormat.class); + +// } +// +// private static List getMeasure(BipScore value) { +// return value +// .getScoreList() +// .stream() +// .map(score -> { +// Measure m = new Measure(); +// m.setId(score.getId()); +// m +// .setUnit( +// score +// .getUnit() +// .stream() +// .map(unit -> { +// KeyValue kv = new KeyValue(); +// kv.setValue(unit.getValue()); +// kv.setKey(unit.getKey()); +// kv +// .setDataInfo( +// OafMapperUtils +// .dataInfo( +// false, +// UPDATE_DATA_INFO_TYPE, +// true, +// false, +// OafMapperUtils +// .qualifier( +// UPDATE_MEASURE_BIP_CLASS_ID, +// UPDATE_CLASS_NAME, +// ModelConstants.DNET_PROVENANCE_ACTIONS, +// ModelConstants.DNET_PROVENANCE_ACTIONS), +// "")); +// return kv; +// }) +// .collect(Collectors.toList())); +// return m; +// }) +// .collect(Collectors.toList()); + } +} diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/model/AffiliationRelationDeserializer.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/model/AffiliationRelationDeserializer.java new file mode 100644 index 000000000..450a8c175 --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/model/AffiliationRelationDeserializer.java @@ -0,0 +1,26 @@ +package eu.dnetlib.dhp.actionmanager.bipaffiliations.model; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +@Data +public class AffiliationRelationDeserializer implements Serializable { + @JsonProperty("DOI") + private String doi; + @JsonProperty("Matchings") + private List matchings; + + @Data + public static class Matching implements Serializable { + @JsonProperty("RORid") + private List rorId; + @JsonProperty("Confidence") + private double confidence; + + } + +} + diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/model/AffiliationRelationModel.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/model/AffiliationRelationModel.java new file mode 100644 index 000000000..8689914ee --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/model/AffiliationRelationModel.java @@ -0,0 +1,15 @@ +package eu.dnetlib.dhp.actionmanager.bipaffiliations.model; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +@Data +@AllArgsConstructor +public class AffiliationRelationModel implements Serializable { + private String doi; + private String rorId; + private double confidence; +} diff --git a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/input_actionset_parameter.json b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/input_actionset_parameter.json new file mode 100644 index 000000000..7663a454b --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/input_actionset_parameter.json @@ -0,0 +1,20 @@ +[ + { + "paramName": "issm", + "paramLongName": "isSparkSessionManaged", + "paramDescription": "when true will stop SparkSession after job execution", + "paramRequired": false + }, + { + "paramName": "ip", + "paramLongName": "inputPath", + "paramDescription": "the URL from where to get the programme file", + "paramRequired": true + }, + { + "paramName": "o", + "paramLongName": "outputPath", + "paramDescription": "the path of the new ActionSet", + "paramRequired": true + } +] \ No newline at end of file diff --git a/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelationsTest.java b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelationsTest.java new file mode 100644 index 000000000..eba53ccdb --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelationsTest.java @@ -0,0 +1,139 @@ +package eu.dnetlib.dhp.actionmanager.bipaffiliations; + +import static org.junit.jupiter.api.Assertions.*; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; + +import org.apache.commons.io.FileUtils; +import org.apache.hadoop.io.Text; +import org.apache.spark.SparkConf; +import org.apache.spark.api.java.JavaRDD; +import org.apache.spark.api.java.JavaSparkContext; +import org.apache.spark.sql.Dataset; +import org.apache.spark.sql.Encoders; +import org.apache.spark.sql.Row; +import org.apache.spark.sql.SparkSession; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.fasterxml.jackson.databind.ObjectMapper; + +import eu.dnetlib.dhp.schema.action.AtomicAction; +import eu.dnetlib.dhp.schema.oaf.Result; + +public class PrepareAffiliationRelationsTest { + + private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); + + private static SparkSession spark; + + private static Path workingDir; + private static final Logger log = LoggerFactory + .getLogger(PrepareAffiliationRelationsTest.class); + + @BeforeAll + public static void beforeAll() throws IOException { + workingDir = Files.createTempDirectory(PrepareAffiliationRelationsTest.class.getSimpleName()); + + log.info("Using work dir {}", workingDir); + + SparkConf conf = new SparkConf(); + conf.setAppName(PrepareAffiliationRelationsTest.class.getSimpleName()); + + conf.setMaster("local[*]"); + conf.set("spark.driver.host", "localhost"); + conf.set("hive.metastore.local", "true"); + conf.set("spark.ui.enabled", "false"); + conf.set("spark.sql.warehouse.dir", workingDir.toString()); + conf.set("hive.metastore.warehouse.dir", workingDir.resolve("warehouse").toString()); + + spark = SparkSession + .builder() + .appName(PrepareAffiliationRelationsTest.class.getSimpleName()) + .config(conf) + .getOrCreate(); + } + + @AfterAll + public static void afterAll() throws IOException { + FileUtils.deleteDirectory(workingDir.toFile()); + spark.stop(); + } + + @Test + void testMatch() throws Exception { + String affiliationRelationsPath = getClass() + .getResource("/eu/dnetlib/dhp/actionmanager/bipaffiliations/doi_to_ror.json") + .getPath(); + + PrepareAffiliationRelations + .main( + new String[] { + "-isSparkSessionManaged", + Boolean.FALSE.toString(), + "-inputPath", + affiliationRelationsPath, + "-outputPath", + workingDir.toString() + "/actionSet" + }); + + final JavaSparkContext sc = new JavaSparkContext(spark.sparkContext()); + +// JavaRDD tmp = sc +// .sequenceFile(workingDir.toString() + "/actionSet", Text.class, Text.class) +// .map(value -> OBJECT_MAPPER.readValue(value._2().toString(), AtomicAction.class)) +// .map(aa -> ((Result) aa.getPayload())); +// +// assertEquals(4, tmp.count()); +// +// Dataset verificationDataset = spark.createDataset(tmp.rdd(), Encoders.bean(Result.class)); +// verificationDataset.createOrReplaceTempView("result"); +// +// Dataset execVerification = spark +// .sql( +// "Select p.id oaid, mes.id, mUnit.value from result p " + +// "lateral view explode(measures) m as mes " + +// "lateral view explode(mes.unit) u as mUnit "); +// +// Assertions.assertEquals(12, execVerification.count()); +// Assertions +// .assertEquals( +// "6.63451994567e-09", execVerification +// .filter( +// "oaid='50|arXiv_dedup_::4a2d5fd8d71daec016c176ec71d957b1' " + +// "and id = 'influence'") +// .select("value") +// .collectAsList() +// .get(0) +// .getString(0)); +// Assertions +// .assertEquals( +// "0.348694533145", execVerification +// .filter( +// "oaid='50|arXiv_dedup_::4a2d5fd8d71daec016c176ec71d957b1' " + +// "and id = 'popularity_alt'") +// .select("value") +// .collectAsList() +// .get(0) +// .getString(0)); +// Assertions +// .assertEquals( +// "2.16094680115e-09", execVerification +// .filter( +// "oaid='50|arXiv_dedup_::4a2d5fd8d71daec016c176ec71d957b1' " + +// "and id = 'popularity'") +// .select("value") +// .collectAsList() +// .get(0) +// .getString(0)); +// + } +} + diff --git a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/doi_to_ror.json b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/doi_to_ror.json new file mode 100644 index 000000000..3b067dcc8 --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/doi_to_ror.json @@ -0,0 +1,6 @@ +{"DOI":"10.1061\/(asce)0733-9399(2002)128:7(759)","Matchings":[{"RORid":["https:\/\/ror.org\/01teme464"],"Confidence":0.73},{"RORid":["https:\/\/ror.org\/03yxnpp24"],"Confidence":0.7071067812}]} +{"DOI":"10.1105\/tpc.8.3.343","Matchings":[{"RORid":["https:\/\/ror.org\/02k40bc56"],"Confidence":0.7071067812}]} +{"DOI":"10.1161\/01.cir.0000013305.01850.37","Matchings":[{"RORid":["https:\/\/ror.org\/00qjgza05"],"Confidence":1}]} +{"DOI":"10.1142\/s021821650200186x","Matchings":[{"RORid":["https:\/\/ror.org\/05apxxy63"],"Confidence":1},{"RORid":["https:\/\/ror.org\/035xkbk20"],"Confidence":1}]} +{"DOI":"10.1061\/(asce)0733-9372(2002)128:7(575)","Matchings":[{"RORid":["https:\/\/ror.org\/04j198w64"],"Confidence":0.58}]} +{"DOI":"10.1161\/hy0202.103001","Matchings":[{"RORid":["https:\/\/ror.org\/057xtrt18"],"Confidence":0.7071067812}]} \ No newline at end of file From bd3fcf869a8fa06376d94af37f0e8fd992cdc486 Mon Sep 17 00:00:00 2001 From: Giambattista Bloisi Date: Thu, 6 Jul 2023 10:02:23 +0200 Subject: [PATCH 223/449] rename dnet-pace-core into dhp-pace-core module and use it as dependency in other modules --- dhp-common/pom.xml | 10 +-- {dnet-pace-core => dhp-pace-core}/pom.xml | 48 ++++++++--- .../AbstractClusteringFunction.java | 0 .../eu/dnetlib/pace/clustering/Acronyms.java | 0 .../BlacklistAwareClusteringCombiner.java | 0 .../pace/clustering/ClusteringClass.java | 0 .../pace/clustering/ClusteringCombiner.java | 0 .../pace/clustering/ClusteringFunction.java | 0 .../pace/clustering/ImmutableFieldValue.java | 0 .../pace/clustering/KeywordsClustering.java | 0 .../pace/clustering/LastNameFirstInitial.java | 0 .../pace/clustering/LowercaseClustering.java | 0 .../dnetlib/pace/clustering/NGramUtils.java | 0 .../dnetlib/pace/clustering/NgramPairs.java | 0 .../eu/dnetlib/pace/clustering/Ngrams.java | 0 .../pace/clustering/PersonClustering.java | 0 .../dnetlib/pace/clustering/PersonHash.java | 0 .../clustering/RandomClusteringFunction.java | 0 .../pace/clustering/SortedNgramPairs.java | 0 .../clustering/SpaceTrimmingFieldValue.java | 0 .../dnetlib/pace/clustering/SuffixPrefix.java | 0 .../pace/clustering/UrlClustering.java | 0 .../WordsStatsSuffixPrefixChain.java | 0 .../pace/clustering/WordsSuffixPrefix.java | 0 .../pace/common/AbstractPaceFunctions.java | 0 .../java/eu/dnetlib/pace/config/Config.java | 0 .../eu/dnetlib/pace/config/DedupConfig.java | 0 .../eu/dnetlib/pace/config/PaceConfig.java | 0 .../java/eu/dnetlib/pace/config/Type.java | 0 .../java/eu/dnetlib/pace/config/WfConfig.java | 0 .../eu/dnetlib/pace/model/AbstractField.java | 0 .../eu/dnetlib/pace/model/ClusteringDef.java | 0 .../java/eu/dnetlib/pace/model/Document.java | 0 .../java/eu/dnetlib/pace/model/Field.java | 0 .../java/eu/dnetlib/pace/model/FieldDef.java | 0 .../java/eu/dnetlib/pace/model/FieldList.java | 0 .../eu/dnetlib/pace/model/FieldListImpl.java | 0 .../eu/dnetlib/pace/model/FieldValue.java | 0 .../eu/dnetlib/pace/model/FieldValueImpl.java | 0 .../eu/dnetlib/pace/model/MapDocument.java | 0 .../pace/model/MapDocumentComparator.java | 0 .../pace/model/MapDocumentSerializer.java | 0 .../java/eu/dnetlib/pace/model/Person.java | 0 .../pace/model/PersonComparatorUtils.java | 0 .../eu/dnetlib/pace/tree/AlwaysMatch.java | 0 .../eu/dnetlib/pace/tree/AuthorsMatch.java | 0 .../java/eu/dnetlib/pace/tree/CityMatch.java | 0 .../dnetlib/pace/tree/CosineSimilarity.java | 0 .../eu/dnetlib/pace/tree/DoiExactMatch.java | 0 .../dnetlib/pace/tree/DomainExactMatch.java | 0 .../java/eu/dnetlib/pace/tree/ExactMatch.java | 0 .../pace/tree/ExactMatchIgnoreCase.java | 0 .../dnetlib/pace/tree/InstanceTypeMatch.java | 0 .../eu/dnetlib/pace/tree/JaroWinkler.java | 0 .../pace/tree/JaroWinklerNormalizedName.java | 0 .../dnetlib/pace/tree/JaroWinklerTitle.java | 0 .../eu/dnetlib/pace/tree/JsonListMatch.java | 0 .../eu/dnetlib/pace/tree/KeywordMatch.java | 0 .../dnetlib/pace/tree/Level2JaroWinkler.java | 0 .../pace/tree/Level2JaroWinklerTitle.java | 0 .../dnetlib/pace/tree/Level2Levenstein.java | 0 .../java/eu/dnetlib/pace/tree/Levenstein.java | 0 .../eu/dnetlib/pace/tree/LevensteinTitle.java | 0 .../tree/LevensteinTitleIgnoreVersion.java | 0 .../dnetlib/pace/tree/ListContainsMatch.java | 0 .../eu/dnetlib/pace/tree/MustBeDifferent.java | 0 .../dnetlib/pace/tree/NullDistanceAlgo.java | 0 .../dnetlib/pace/tree/NumbersComparator.java | 0 .../eu/dnetlib/pace/tree/NumbersMatch.java | 0 .../eu/dnetlib/pace/tree/RomansMatch.java | 0 .../java/eu/dnetlib/pace/tree/SizeMatch.java | 0 .../dnetlib/pace/tree/SortedJaroWinkler.java | 0 .../pace/tree/SortedLevel2JaroWinkler.java | 0 .../pace/tree/StringContainsMatch.java | 0 .../eu/dnetlib/pace/tree/StringListMatch.java | 0 .../pace/tree/SubStringLevenstein.java | 0 .../dnetlib/pace/tree/TitleVersionMatch.java | 0 .../java/eu/dnetlib/pace/tree/UrlMatcher.java | 0 .../java/eu/dnetlib/pace/tree/YearMatch.java | 0 .../pace/tree/support/AbstractComparator.java | 0 .../support/AbstractSortedComparator.java | 0 .../eu/dnetlib/pace/tree/support/AggType.java | 0 .../dnetlib/pace/tree/support/Comparator.java | 0 .../pace/tree/support/ComparatorClass.java | 0 .../dnetlib/pace/tree/support/FieldConf.java | 0 .../dnetlib/pace/tree/support/FieldStats.java | 0 .../dnetlib/pace/tree/support/MatchType.java | 0 .../pace/tree/support/TreeNodeDef.java | 0 .../pace/tree/support/TreeNodeStats.java | 0 .../pace/tree/support/TreeProcessor.java | 0 .../dnetlib/pace/tree/support/TreeStats.java | 0 .../eu/dnetlib/pace/util/BlockProcessor.java | 0 .../pace/util/BlockProcessorForTesting.java | 0 .../java/eu/dnetlib/pace/util/Capitalise.java | 0 .../eu/dnetlib/pace/util/DiffPatchMatch.java | 0 .../dnetlib/pace/util/DotAbbreviations.java | 0 .../eu/dnetlib/pace/util/MapDocumentUtil.java | 0 .../eu/dnetlib/pace/util/PaceException.java | 0 .../eu/dnetlib/pace/util/PaceResolver.java | 0 .../java/eu/dnetlib/pace/util/Reporter.java | 0 .../eu/dnetlib/pace/config/city_map.csv | 0 .../eu/dnetlib/pace/config/dedupConfig.st | 0 .../eu/dnetlib/pace/config/name_particles.txt | 0 .../dnetlib/pace/config/ngram_blacklist.txt | 0 .../eu/dnetlib/pace/config/stopwords_de.txt | 0 .../eu/dnetlib/pace/config/stopwords_en.txt | 0 .../eu/dnetlib/pace/config/stopwords_es.txt | 0 .../eu/dnetlib/pace/config/stopwords_fr.txt | 0 .../eu/dnetlib/pace/config/stopwords_gr.txt | 0 .../eu/dnetlib/pace/config/stopwords_it.txt | 0 .../eu/dnetlib/pace/config/stopwords_pt.txt | 0 .../dnetlib/pace/config/title_blacklist.txt | 0 .../dnetlib/pace/config/translation_map.csv | 0 .../eu/dnetlib/pace/AbstractPaceTest.java | 0 .../clustering/ClusteringFunctionTest.java | 0 .../dnetlib/pace/common/PaceFunctionTest.java | 0 .../pace/comparators/ComparatorTest.java | 0 .../eu/dnetlib/pace/config/ConfigTest.java | 0 .../java/eu/dnetlib/pace/util/UtilTest.java | 0 .../dnetlib/pace/config/author.fdup.conf.json | 0 .../eu/dnetlib/pace/config/author.json | 0 .../organization.cross.compare.conf.json | 0 .../config/organization.current.conf.json | 0 .../eu/dnetlib/pace/config/organization.json | 0 .../config/organization.no_synonyms.conf.json | 0 .../config/pub.instancetype.tree.conf.json | 0 .../pace/config/pub.new.tree.conf.json | 0 .../eu/dnetlib/pace/config/pub.prod.conf.json | 0 .../pace/config/publication.current.conf.json | 0 .../pace/config/publication.example.json | 0 .../eu/dnetlib/pace/config/publication.json | 0 .../dnetlib/pace/config/title_blacklist.txt | 0 dhp-workflows/dhp-broker-events/pom.xml | 5 +- dhp-workflows/dhp-dedup-openaire/pom.xml | 39 ++++++--- dhp-workflows/dhp-graph-provision/pom.xml | 2 +- pom.xml | 81 +++++++++++++++++-- 136 files changed, 146 insertions(+), 39 deletions(-) rename {dnet-pace-core => dhp-pace-core}/pom.xml (64%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/clustering/AbstractClusteringFunction.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/clustering/Acronyms.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/clustering/BlacklistAwareClusteringCombiner.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/clustering/ClusteringClass.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/clustering/ClusteringCombiner.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/clustering/ClusteringFunction.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/clustering/ImmutableFieldValue.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/clustering/KeywordsClustering.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/clustering/LastNameFirstInitial.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/clustering/LowercaseClustering.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/clustering/NGramUtils.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/clustering/NgramPairs.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/clustering/Ngrams.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/clustering/PersonClustering.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/clustering/PersonHash.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/clustering/RandomClusteringFunction.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/clustering/SortedNgramPairs.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/clustering/SpaceTrimmingFieldValue.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/clustering/SuffixPrefix.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/clustering/UrlClustering.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/clustering/WordsStatsSuffixPrefixChain.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/clustering/WordsSuffixPrefix.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/config/Config.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/config/DedupConfig.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/config/PaceConfig.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/config/Type.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/config/WfConfig.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/model/AbstractField.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/model/Document.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/model/Field.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/model/FieldDef.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/model/FieldList.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/model/FieldListImpl.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/model/FieldValue.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/model/FieldValueImpl.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/model/MapDocument.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/model/MapDocumentComparator.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/model/MapDocumentSerializer.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/model/Person.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/model/PersonComparatorUtils.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/tree/AlwaysMatch.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/tree/AuthorsMatch.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/tree/CityMatch.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/tree/CosineSimilarity.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/tree/DoiExactMatch.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/tree/DomainExactMatch.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/tree/ExactMatch.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/tree/ExactMatchIgnoreCase.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/tree/InstanceTypeMatch.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/tree/JaroWinkler.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/tree/JaroWinklerNormalizedName.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/tree/JaroWinklerTitle.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/tree/JsonListMatch.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/tree/KeywordMatch.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinkler.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinklerTitle.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/tree/Level2Levenstein.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/tree/Levenstein.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/tree/LevensteinTitle.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/tree/LevensteinTitleIgnoreVersion.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/tree/ListContainsMatch.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/tree/MustBeDifferent.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/tree/NullDistanceAlgo.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/tree/NumbersComparator.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/tree/NumbersMatch.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/tree/RomansMatch.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/tree/SizeMatch.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/tree/SortedJaroWinkler.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/tree/SortedLevel2JaroWinkler.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/tree/StringContainsMatch.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/tree/StringListMatch.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/tree/SubStringLevenstein.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/tree/TitleVersionMatch.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/tree/UrlMatcher.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/tree/YearMatch.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/tree/support/AbstractComparator.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/tree/support/AbstractSortedComparator.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/tree/support/AggType.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/tree/support/Comparator.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/tree/support/ComparatorClass.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/tree/support/FieldConf.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/tree/support/FieldStats.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/tree/support/MatchType.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeStats.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/tree/support/TreeProcessor.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/tree/support/TreeStats.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/util/BlockProcessorForTesting.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/util/Capitalise.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/util/DiffPatchMatch.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/util/DotAbbreviations.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/util/PaceException.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/util/PaceResolver.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/java/eu/dnetlib/pace/util/Reporter.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/resources/eu/dnetlib/pace/config/city_map.csv (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/resources/eu/dnetlib/pace/config/dedupConfig.st (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/resources/eu/dnetlib/pace/config/name_particles.txt (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/resources/eu/dnetlib/pace/config/ngram_blacklist.txt (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/resources/eu/dnetlib/pace/config/stopwords_de.txt (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/resources/eu/dnetlib/pace/config/stopwords_en.txt (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/resources/eu/dnetlib/pace/config/stopwords_es.txt (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/resources/eu/dnetlib/pace/config/stopwords_fr.txt (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/resources/eu/dnetlib/pace/config/stopwords_gr.txt (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/resources/eu/dnetlib/pace/config/stopwords_it.txt (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/resources/eu/dnetlib/pace/config/stopwords_pt.txt (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/resources/eu/dnetlib/pace/config/title_blacklist.txt (100%) rename {dnet-pace-core => dhp-pace-core}/src/main/resources/eu/dnetlib/pace/config/translation_map.csv (100%) rename {dnet-pace-core => dhp-pace-core}/src/test/java/eu/dnetlib/pace/AbstractPaceTest.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/test/java/eu/dnetlib/pace/common/PaceFunctionTest.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/test/java/eu/dnetlib/pace/config/ConfigTest.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/test/java/eu/dnetlib/pace/util/UtilTest.java (100%) rename {dnet-pace-core => dhp-pace-core}/src/test/resources/eu/dnetlib/pace/config/author.fdup.conf.json (100%) rename {dnet-pace-core => dhp-pace-core}/src/test/resources/eu/dnetlib/pace/config/author.json (100%) rename {dnet-pace-core => dhp-pace-core}/src/test/resources/eu/dnetlib/pace/config/organization.cross.compare.conf.json (100%) rename {dnet-pace-core => dhp-pace-core}/src/test/resources/eu/dnetlib/pace/config/organization.current.conf.json (100%) rename {dnet-pace-core => dhp-pace-core}/src/test/resources/eu/dnetlib/pace/config/organization.json (100%) rename {dnet-pace-core => dhp-pace-core}/src/test/resources/eu/dnetlib/pace/config/organization.no_synonyms.conf.json (100%) rename {dnet-pace-core => dhp-pace-core}/src/test/resources/eu/dnetlib/pace/config/pub.instancetype.tree.conf.json (100%) rename {dnet-pace-core => dhp-pace-core}/src/test/resources/eu/dnetlib/pace/config/pub.new.tree.conf.json (100%) rename {dnet-pace-core => dhp-pace-core}/src/test/resources/eu/dnetlib/pace/config/pub.prod.conf.json (100%) rename {dnet-pace-core => dhp-pace-core}/src/test/resources/eu/dnetlib/pace/config/publication.current.conf.json (100%) rename {dnet-pace-core => dhp-pace-core}/src/test/resources/eu/dnetlib/pace/config/publication.example.json (100%) rename {dnet-pace-core => dhp-pace-core}/src/test/resources/eu/dnetlib/pace/config/publication.json (100%) rename {dnet-pace-core => dhp-pace-core}/src/test/resources/eu/dnetlib/pace/config/title_blacklist.txt (100%) diff --git a/dhp-common/pom.xml b/dhp-common/pom.xml index 6df11f4ea..a7a83821e 100644 --- a/dhp-common/pom.xml +++ b/dhp-common/pom.xml @@ -60,6 +60,11 @@ + + eu.dnetlib.dhp + dhp-pace-core + ${project.version} + org.apache.hadoop @@ -142,11 +147,6 @@ okhttp - - eu.dnetlib - dnet-pace-core - - org.apache.httpcomponents httpclient diff --git a/dnet-pace-core/pom.xml b/dhp-pace-core/pom.xml similarity index 64% rename from dnet-pace-core/pom.xml rename to dhp-pace-core/pom.xml index 567420bb3..12174a5c5 100644 --- a/dnet-pace-core/pom.xml +++ b/dhp-pace-core/pom.xml @@ -4,15 +4,49 @@ 4.0.0 - eu.dnetlib - dnet-dedup - 4.1.13-SNAPSHOT + eu.dnetlib.dhp + dhp + 1.2.5-SNAPSHOT ../pom.xml - dnet-pace-core + eu.dnetlib.dhp + dhp-pace-core + 1.2.5-SNAPSHOT jar + + + + net.alchim31.maven + scala-maven-plugin + 4.0.1 + + + scala-compile-first + initialize + + add-source + compile + + + + scala-test-compile + process-test-resources + + testCompile + + + + + ${scala.version} + -target:jvm-1.8 + + + + + + edu.cmu @@ -43,12 +77,6 @@ commons-logging commons-logging - - - org.junit.jupiter - junit-jupiter - test - org.reflections reflections diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/AbstractClusteringFunction.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/AbstractClusteringFunction.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/AbstractClusteringFunction.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/AbstractClusteringFunction.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/Acronyms.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/Acronyms.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/Acronyms.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/Acronyms.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/BlacklistAwareClusteringCombiner.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/BlacklistAwareClusteringCombiner.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/BlacklistAwareClusteringCombiner.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/BlacklistAwareClusteringCombiner.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringClass.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringClass.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringClass.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringClass.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringCombiner.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringCombiner.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringCombiner.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringCombiner.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringFunction.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringFunction.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringFunction.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringFunction.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ImmutableFieldValue.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/ImmutableFieldValue.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/ImmutableFieldValue.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/ImmutableFieldValue.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/KeywordsClustering.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/KeywordsClustering.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/KeywordsClustering.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/KeywordsClustering.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/LastNameFirstInitial.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/LastNameFirstInitial.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/LastNameFirstInitial.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/LastNameFirstInitial.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/LowercaseClustering.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/LowercaseClustering.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/LowercaseClustering.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/LowercaseClustering.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/NGramUtils.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/NGramUtils.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/NGramUtils.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/NGramUtils.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/NgramPairs.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/NgramPairs.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/NgramPairs.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/NgramPairs.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/Ngrams.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/Ngrams.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/Ngrams.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/Ngrams.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonClustering.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonClustering.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonClustering.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonClustering.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonHash.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonHash.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonHash.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonHash.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/RandomClusteringFunction.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/RandomClusteringFunction.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/RandomClusteringFunction.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/RandomClusteringFunction.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SortedNgramPairs.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/SortedNgramPairs.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SortedNgramPairs.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/SortedNgramPairs.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SpaceTrimmingFieldValue.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/SpaceTrimmingFieldValue.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SpaceTrimmingFieldValue.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/SpaceTrimmingFieldValue.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SuffixPrefix.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/SuffixPrefix.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/SuffixPrefix.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/SuffixPrefix.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/UrlClustering.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/UrlClustering.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/UrlClustering.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/UrlClustering.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/WordsStatsSuffixPrefixChain.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/WordsStatsSuffixPrefixChain.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/WordsStatsSuffixPrefixChain.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/WordsStatsSuffixPrefixChain.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/WordsSuffixPrefix.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/WordsSuffixPrefix.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/clustering/WordsSuffixPrefix.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/WordsSuffixPrefix.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Config.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/config/Config.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Config.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/config/Config.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Type.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/config/Type.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/config/Type.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/config/Type.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/WfConfig.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/config/WfConfig.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/config/WfConfig.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/config/WfConfig.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/AbstractField.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/AbstractField.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/model/AbstractField.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/model/AbstractField.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/Document.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/Document.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/model/Document.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/model/Document.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/Field.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/Field.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/model/Field.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/model/Field.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldList.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldList.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldList.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldList.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldListImpl.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldListImpl.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldListImpl.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldListImpl.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldValue.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldValue.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldValue.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldValue.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldValueImpl.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldValueImpl.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/model/FieldValueImpl.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldValueImpl.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/MapDocument.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/MapDocument.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/model/MapDocument.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/model/MapDocument.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/MapDocumentComparator.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/MapDocumentComparator.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/model/MapDocumentComparator.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/model/MapDocumentComparator.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/MapDocumentSerializer.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/MapDocumentSerializer.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/model/MapDocumentSerializer.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/model/MapDocumentSerializer.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/Person.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/Person.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/model/Person.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/model/Person.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/model/PersonComparatorUtils.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/PersonComparatorUtils.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/model/PersonComparatorUtils.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/model/PersonComparatorUtils.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AlwaysMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/AlwaysMatch.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AlwaysMatch.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/AlwaysMatch.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AuthorsMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/AuthorsMatch.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/AuthorsMatch.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/AuthorsMatch.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/CityMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/CityMatch.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/CityMatch.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/CityMatch.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/CosineSimilarity.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/CosineSimilarity.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/CosineSimilarity.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/CosineSimilarity.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/DoiExactMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/DoiExactMatch.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/DoiExactMatch.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/DoiExactMatch.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/DomainExactMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/DomainExactMatch.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/DomainExactMatch.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/DomainExactMatch.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatch.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatch.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatch.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatchIgnoreCase.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatchIgnoreCase.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatchIgnoreCase.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatchIgnoreCase.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/InstanceTypeMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/InstanceTypeMatch.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/InstanceTypeMatch.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/InstanceTypeMatch.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinkler.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinkler.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinkler.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinkler.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerNormalizedName.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerNormalizedName.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerNormalizedName.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerNormalizedName.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerTitle.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerTitle.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerTitle.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerTitle.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JsonListMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/JsonListMatch.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/JsonListMatch.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/JsonListMatch.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/KeywordMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/KeywordMatch.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/KeywordMatch.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/KeywordMatch.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinkler.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinkler.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinkler.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinkler.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinklerTitle.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinklerTitle.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinklerTitle.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinklerTitle.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2Levenstein.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2Levenstein.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2Levenstein.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2Levenstein.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Levenstein.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/Levenstein.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/Levenstein.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/Levenstein.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitle.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitle.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitle.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitle.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitleIgnoreVersion.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitleIgnoreVersion.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitleIgnoreVersion.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitleIgnoreVersion.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ListContainsMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/ListContainsMatch.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/ListContainsMatch.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/ListContainsMatch.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/MustBeDifferent.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/MustBeDifferent.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/MustBeDifferent.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/MustBeDifferent.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/NullDistanceAlgo.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/NullDistanceAlgo.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/NullDistanceAlgo.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/NullDistanceAlgo.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/NumbersComparator.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/NumbersComparator.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/NumbersComparator.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/NumbersComparator.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/NumbersMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/NumbersMatch.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/NumbersMatch.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/NumbersMatch.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/RomansMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/RomansMatch.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/RomansMatch.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/RomansMatch.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SizeMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/SizeMatch.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SizeMatch.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/SizeMatch.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SortedJaroWinkler.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/SortedJaroWinkler.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SortedJaroWinkler.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/SortedJaroWinkler.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SortedLevel2JaroWinkler.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/SortedLevel2JaroWinkler.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SortedLevel2JaroWinkler.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/SortedLevel2JaroWinkler.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/StringContainsMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/StringContainsMatch.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/StringContainsMatch.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/StringContainsMatch.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/StringListMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/StringListMatch.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/StringListMatch.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/StringListMatch.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SubStringLevenstein.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/SubStringLevenstein.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/SubStringLevenstein.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/SubStringLevenstein.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/TitleVersionMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/TitleVersionMatch.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/TitleVersionMatch.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/TitleVersionMatch.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/UrlMatcher.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/UrlMatcher.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/UrlMatcher.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/UrlMatcher.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/YearMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/YearMatch.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/YearMatch.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/YearMatch.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractComparator.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractComparator.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractComparator.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractComparator.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractSortedComparator.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractSortedComparator.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractSortedComparator.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractSortedComparator.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AggType.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AggType.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AggType.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AggType.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/Comparator.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/Comparator.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/Comparator.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/Comparator.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/ComparatorClass.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/ComparatorClass.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/ComparatorClass.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/ComparatorClass.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/FieldConf.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/FieldConf.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/FieldConf.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/FieldConf.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/FieldStats.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/FieldStats.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/FieldStats.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/FieldStats.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/MatchType.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/MatchType.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/MatchType.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/MatchType.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeStats.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeStats.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeStats.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeStats.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeProcessor.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeProcessor.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeProcessor.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeProcessor.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeStats.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeStats.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeStats.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeStats.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessorForTesting.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessorForTesting.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessorForTesting.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessorForTesting.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/Capitalise.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/Capitalise.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/util/Capitalise.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/util/Capitalise.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/DiffPatchMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/DiffPatchMatch.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/util/DiffPatchMatch.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/util/DiffPatchMatch.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/DotAbbreviations.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/DotAbbreviations.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/util/DotAbbreviations.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/util/DotAbbreviations.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/PaceException.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/PaceException.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/util/PaceException.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/util/PaceException.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/PaceResolver.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/PaceResolver.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/util/PaceResolver.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/util/PaceResolver.java diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/util/Reporter.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/Reporter.java similarity index 100% rename from dnet-pace-core/src/main/java/eu/dnetlib/pace/util/Reporter.java rename to dhp-pace-core/src/main/java/eu/dnetlib/pace/util/Reporter.java diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/city_map.csv b/dhp-pace-core/src/main/resources/eu/dnetlib/pace/config/city_map.csv similarity index 100% rename from dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/city_map.csv rename to dhp-pace-core/src/main/resources/eu/dnetlib/pace/config/city_map.csv diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/dedupConfig.st b/dhp-pace-core/src/main/resources/eu/dnetlib/pace/config/dedupConfig.st similarity index 100% rename from dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/dedupConfig.st rename to dhp-pace-core/src/main/resources/eu/dnetlib/pace/config/dedupConfig.st diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/name_particles.txt b/dhp-pace-core/src/main/resources/eu/dnetlib/pace/config/name_particles.txt similarity index 100% rename from dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/name_particles.txt rename to dhp-pace-core/src/main/resources/eu/dnetlib/pace/config/name_particles.txt diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/ngram_blacklist.txt b/dhp-pace-core/src/main/resources/eu/dnetlib/pace/config/ngram_blacklist.txt similarity index 100% rename from dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/ngram_blacklist.txt rename to dhp-pace-core/src/main/resources/eu/dnetlib/pace/config/ngram_blacklist.txt diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_de.txt b/dhp-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_de.txt similarity index 100% rename from dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_de.txt rename to dhp-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_de.txt diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_en.txt b/dhp-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_en.txt similarity index 100% rename from dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_en.txt rename to dhp-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_en.txt diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_es.txt b/dhp-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_es.txt similarity index 100% rename from dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_es.txt rename to dhp-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_es.txt diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_fr.txt b/dhp-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_fr.txt similarity index 100% rename from dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_fr.txt rename to dhp-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_fr.txt diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_gr.txt b/dhp-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_gr.txt similarity index 100% rename from dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_gr.txt rename to dhp-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_gr.txt diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_it.txt b/dhp-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_it.txt similarity index 100% rename from dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_it.txt rename to dhp-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_it.txt diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_pt.txt b/dhp-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_pt.txt similarity index 100% rename from dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_pt.txt rename to dhp-pace-core/src/main/resources/eu/dnetlib/pace/config/stopwords_pt.txt diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/title_blacklist.txt b/dhp-pace-core/src/main/resources/eu/dnetlib/pace/config/title_blacklist.txt similarity index 100% rename from dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/title_blacklist.txt rename to dhp-pace-core/src/main/resources/eu/dnetlib/pace/config/title_blacklist.txt diff --git a/dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/translation_map.csv b/dhp-pace-core/src/main/resources/eu/dnetlib/pace/config/translation_map.csv similarity index 100% rename from dnet-pace-core/src/main/resources/eu/dnetlib/pace/config/translation_map.csv rename to dhp-pace-core/src/main/resources/eu/dnetlib/pace/config/translation_map.csv diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/AbstractPaceTest.java b/dhp-pace-core/src/test/java/eu/dnetlib/pace/AbstractPaceTest.java similarity index 100% rename from dnet-pace-core/src/test/java/eu/dnetlib/pace/AbstractPaceTest.java rename to dhp-pace-core/src/test/java/eu/dnetlib/pace/AbstractPaceTest.java diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java b/dhp-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java similarity index 100% rename from dnet-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java rename to dhp-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/common/PaceFunctionTest.java b/dhp-pace-core/src/test/java/eu/dnetlib/pace/common/PaceFunctionTest.java similarity index 100% rename from dnet-pace-core/src/test/java/eu/dnetlib/pace/common/PaceFunctionTest.java rename to dhp-pace-core/src/test/java/eu/dnetlib/pace/common/PaceFunctionTest.java diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java b/dhp-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java similarity index 100% rename from dnet-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java rename to dhp-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java b/dhp-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java similarity index 100% rename from dnet-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java rename to dhp-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java diff --git a/dnet-pace-core/src/test/java/eu/dnetlib/pace/util/UtilTest.java b/dhp-pace-core/src/test/java/eu/dnetlib/pace/util/UtilTest.java similarity index 100% rename from dnet-pace-core/src/test/java/eu/dnetlib/pace/util/UtilTest.java rename to dhp-pace-core/src/test/java/eu/dnetlib/pace/util/UtilTest.java diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/author.fdup.conf.json b/dhp-pace-core/src/test/resources/eu/dnetlib/pace/config/author.fdup.conf.json similarity index 100% rename from dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/author.fdup.conf.json rename to dhp-pace-core/src/test/resources/eu/dnetlib/pace/config/author.fdup.conf.json diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/author.json b/dhp-pace-core/src/test/resources/eu/dnetlib/pace/config/author.json similarity index 100% rename from dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/author.json rename to dhp-pace-core/src/test/resources/eu/dnetlib/pace/config/author.json diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.cross.compare.conf.json b/dhp-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.cross.compare.conf.json similarity index 100% rename from dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.cross.compare.conf.json rename to dhp-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.cross.compare.conf.json diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.current.conf.json b/dhp-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.current.conf.json similarity index 100% rename from dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.current.conf.json rename to dhp-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.current.conf.json diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.json b/dhp-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.json similarity index 100% rename from dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.json rename to dhp-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.json diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.no_synonyms.conf.json b/dhp-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.no_synonyms.conf.json similarity index 100% rename from dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.no_synonyms.conf.json rename to dhp-pace-core/src/test/resources/eu/dnetlib/pace/config/organization.no_synonyms.conf.json diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/pub.instancetype.tree.conf.json b/dhp-pace-core/src/test/resources/eu/dnetlib/pace/config/pub.instancetype.tree.conf.json similarity index 100% rename from dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/pub.instancetype.tree.conf.json rename to dhp-pace-core/src/test/resources/eu/dnetlib/pace/config/pub.instancetype.tree.conf.json diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/pub.new.tree.conf.json b/dhp-pace-core/src/test/resources/eu/dnetlib/pace/config/pub.new.tree.conf.json similarity index 100% rename from dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/pub.new.tree.conf.json rename to dhp-pace-core/src/test/resources/eu/dnetlib/pace/config/pub.new.tree.conf.json diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/pub.prod.conf.json b/dhp-pace-core/src/test/resources/eu/dnetlib/pace/config/pub.prod.conf.json similarity index 100% rename from dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/pub.prod.conf.json rename to dhp-pace-core/src/test/resources/eu/dnetlib/pace/config/pub.prod.conf.json diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/publication.current.conf.json b/dhp-pace-core/src/test/resources/eu/dnetlib/pace/config/publication.current.conf.json similarity index 100% rename from dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/publication.current.conf.json rename to dhp-pace-core/src/test/resources/eu/dnetlib/pace/config/publication.current.conf.json diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/publication.example.json b/dhp-pace-core/src/test/resources/eu/dnetlib/pace/config/publication.example.json similarity index 100% rename from dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/publication.example.json rename to dhp-pace-core/src/test/resources/eu/dnetlib/pace/config/publication.example.json diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/publication.json b/dhp-pace-core/src/test/resources/eu/dnetlib/pace/config/publication.json similarity index 100% rename from dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/publication.json rename to dhp-pace-core/src/test/resources/eu/dnetlib/pace/config/publication.json diff --git a/dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/title_blacklist.txt b/dhp-pace-core/src/test/resources/eu/dnetlib/pace/config/title_blacklist.txt similarity index 100% rename from dnet-pace-core/src/test/resources/eu/dnetlib/pace/config/title_blacklist.txt rename to dhp-pace-core/src/test/resources/eu/dnetlib/pace/config/title_blacklist.txt diff --git a/dhp-workflows/dhp-broker-events/pom.xml b/dhp-workflows/dhp-broker-events/pom.xml index 5a41a0090..01f1ea321 100644 --- a/dhp-workflows/dhp-broker-events/pom.xml +++ b/dhp-workflows/dhp-broker-events/pom.xml @@ -41,8 +41,9 @@ - eu.dnetlib - dnet-pace-core + eu.dnetlib.dhp + dhp-pace-core + ${project.version} diff --git a/dhp-workflows/dhp-dedup-openaire/pom.xml b/dhp-workflows/dhp-dedup-openaire/pom.xml index a14076a78..af4511c3c 100644 --- a/dhp-workflows/dhp-dedup-openaire/pom.xml +++ b/dhp-workflows/dhp-dedup-openaire/pom.xml @@ -41,6 +41,30 @@ + + eu.dnetlib.dhp + dhp-common + ${project.version} + + + + eu.dnetlib.dhp + dhp-pace-core + ${project.version} + + + + org.scala-lang.modules + scala-java8-compat_2.11 + 1.0.2 + + + + org.scala-lang.modules + scala-collection-compat_2.11 + 2.8.0 + + org.apache.spark spark-core_2.11 @@ -51,9 +75,8 @@ - eu.dnetlib.dhp - dhp-common - ${project.version} + org.apache.spark + spark-graphx_2.11 @@ -68,16 +91,6 @@ jaxen jaxen - - - - eu.dnetlib - dnet-pace-core - - - org.apache.spark - spark-graphx_2.11 - com.fasterxml.jackson.core jackson-databind diff --git a/dhp-workflows/dhp-graph-provision/pom.xml b/dhp-workflows/dhp-graph-provision/pom.xml index ae8f3b53a..413cc8cdd 100644 --- a/dhp-workflows/dhp-graph-provision/pom.xml +++ b/dhp-workflows/dhp-graph-provision/pom.xml @@ -78,7 +78,7 @@ org.antlr - stringtemplate + ST4 org.apache.solr diff --git a/pom.xml b/pom.xml index db86c1db3..0f365a79b 100644 --- a/pom.xml +++ b/pom.xml @@ -19,6 +19,7 @@ dhp-build + dhp-pace-core dhp-common dhp-workflows @@ -105,6 +106,12 @@ false + + dnet-deps + dnet-dependencies + https://maven.d4science.org/nexus/content/repositories/dnet-deps + default + @@ -381,11 +388,6 @@ - - eu.dnetlib - dnet-pace-core - ${dnet-pace-core.version} - eu.dnetlib cnr-rmi-api @@ -444,7 +446,13 @@ org.antlr stringtemplate - 4.0 + 3.2.1 + + + + org.antlr + ST4 + 4.3.4 @@ -537,6 +545,61 @@ 4.8.71 + + com.fasterxml.jackson.dataformat + jackson-dataformat-xml + ${jackson.version} + provided + + + com.fasterxml.jackson.module + jackson-module-jsonSchema + ${jackson.version} + provided + + + + + org.apache.commons + commons-math3 + 3.6.1 + + + + + com.google.code.gson + gson + ${google.gson.version} + + + + commons-collections + commons-collections + ${commons.collections.version} + + + commons-logging + commons-logging + ${commons.logging.version} + + + + org.reflections + reflections + 0.9.10 + + + + org.scala-lang + scala-library + ${scala.version} + + + + com.ibm.icu + icu4j + 70.1 + @@ -614,7 +677,7 @@ org.apache.maven.plugins maven-dependency-plugin - 3.0.0 + 3.6.0 @@ -811,7 +874,6 @@ [4.0.3] [6.0.5] [3.1.6] - [4.1.12] [2.6.1] 7.5.0 4.7.2 @@ -823,5 +885,8 @@ 1.8 4.5.3 4.0.1 + 2.2.2 + 1.1.3 + 3.2.1 \ No newline at end of file From 801da2fd4ae834d5d16de567e8cb30c9f1798786 Mon Sep 17 00:00:00 2001 From: Giambattista Bloisi Date: Thu, 6 Jul 2023 10:28:53 +0200 Subject: [PATCH 224/449] New sources formatted by maven plugin --- .../AbstractClusteringFunction.java | 38 +- .../eu/dnetlib/pace/clustering/Acronyms.java | 12 +- .../BlacklistAwareClusteringCombiner.java | 79 +- .../pace/clustering/ClusteringClass.java | 5 +- .../pace/clustering/ClusteringCombiner.java | 40 +- .../pace/clustering/ClusteringFunction.java | 5 +- .../pace/clustering/ImmutableFieldValue.java | 2 + .../pace/clustering/KeywordsClustering.java | 82 +- .../pace/clustering/LastNameFirstInitial.java | 124 +- .../pace/clustering/LowercaseClustering.java | 9 +- .../dnetlib/pace/clustering/NGramUtils.java | 8 +- .../dnetlib/pace/clustering/NgramPairs.java | 6 +- .../eu/dnetlib/pace/clustering/Ngrams.java | 7 +- .../pace/clustering/PersonClustering.java | 20 +- .../dnetlib/pace/clustering/PersonHash.java | 4 +- .../clustering/RandomClusteringFunction.java | 5 +- .../pace/clustering/SortedNgramPairs.java | 6 +- .../clustering/SpaceTrimmingFieldValue.java | 9 +- .../dnetlib/pace/clustering/SuffixPrefix.java | 4 +- .../pace/clustering/UrlClustering.java | 70 +- .../WordsStatsSuffixPrefixChain.java | 129 +- .../pace/clustering/WordsSuffixPrefix.java | 76 +- .../pace/common/AbstractPaceFunctions.java | 684 +-- .../java/eu/dnetlib/pace/config/Config.java | 2 +- .../eu/dnetlib/pace/config/DedupConfig.java | 50 +- .../eu/dnetlib/pace/config/PaceConfig.java | 23 +- .../java/eu/dnetlib/pace/config/Type.java | 1 + .../java/eu/dnetlib/pace/config/WfConfig.java | 28 +- .../eu/dnetlib/pace/model/AbstractField.java | 8 +- .../eu/dnetlib/pace/model/ClusteringDef.java | 14 +- .../java/eu/dnetlib/pace/model/Document.java | 1 + .../java/eu/dnetlib/pace/model/Field.java | 5 +- .../java/eu/dnetlib/pace/model/FieldDef.java | 27 +- .../java/eu/dnetlib/pace/model/FieldList.java | 1 + .../eu/dnetlib/pace/model/FieldListImpl.java | 69 +- .../eu/dnetlib/pace/model/FieldValue.java | 1 + .../eu/dnetlib/pace/model/FieldValueImpl.java | 25 +- .../eu/dnetlib/pace/model/MapDocument.java | 6 +- .../pace/model/MapDocumentComparator.java | 8 +- .../pace/model/MapDocumentSerializer.java | 4 +- .../java/eu/dnetlib/pace/model/Person.java | 3 +- .../pace/model/PersonComparatorUtils.java | 7 +- .../eu/dnetlib/pace/tree/AlwaysMatch.java | 49 +- .../eu/dnetlib/pace/tree/AuthorsMatch.java | 245 +- .../java/eu/dnetlib/pace/tree/CityMatch.java | 59 +- .../dnetlib/pace/tree/CosineSimilarity.java | 60 +- .../eu/dnetlib/pace/tree/DoiExactMatch.java | 17 +- .../dnetlib/pace/tree/DomainExactMatch.java | 35 +- .../java/eu/dnetlib/pace/tree/ExactMatch.java | 54 +- .../pace/tree/ExactMatchIgnoreCase.java | 35 +- .../dnetlib/pace/tree/InstanceTypeMatch.java | 113 +- .../eu/dnetlib/pace/tree/JaroWinkler.java | 54 +- .../pace/tree/JaroWinklerNormalizedName.java | 100 +- .../dnetlib/pace/tree/JaroWinklerTitle.java | 15 +- .../eu/dnetlib/pace/tree/JsonListMatch.java | 106 +- .../eu/dnetlib/pace/tree/KeywordMatch.java | 61 +- .../dnetlib/pace/tree/Level2JaroWinkler.java | 8 +- .../pace/tree/Level2JaroWinklerTitle.java | 13 +- .../dnetlib/pace/tree/Level2Levenstein.java | 8 +- .../java/eu/dnetlib/pace/tree/Levenstein.java | 8 +- .../eu/dnetlib/pace/tree/LevensteinTitle.java | 17 +- .../tree/LevensteinTitleIgnoreVersion.java | 11 +- .../dnetlib/pace/tree/ListContainsMatch.java | 101 +- .../eu/dnetlib/pace/tree/MustBeDifferent.java | 10 +- .../dnetlib/pace/tree/NullDistanceAlgo.java | 7 +- .../dnetlib/pace/tree/NumbersComparator.java | 37 +- .../eu/dnetlib/pace/tree/NumbersMatch.java | 40 +- .../eu/dnetlib/pace/tree/RomansMatch.java | 38 +- .../java/eu/dnetlib/pace/tree/SizeMatch.java | 51 +- .../dnetlib/pace/tree/SortedJaroWinkler.java | 10 +- .../pace/tree/SortedLevel2JaroWinkler.java | 10 +- .../pace/tree/StringContainsMatch.java | 87 +- .../eu/dnetlib/pace/tree/StringListMatch.java | 73 +- .../pace/tree/SubStringLevenstein.java | 17 +- .../dnetlib/pace/tree/TitleVersionMatch.java | 33 +- .../java/eu/dnetlib/pace/tree/UrlMatcher.java | 80 +- .../java/eu/dnetlib/pace/tree/YearMatch.java | 58 +- .../pace/tree/support/AbstractComparator.java | 196 +- .../support/AbstractSortedComparator.java | 54 +- .../eu/dnetlib/pace/tree/support/AggType.java | 27 +- .../dnetlib/pace/tree/support/Comparator.java | 10 +- .../pace/tree/support/ComparatorClass.java | 3 +- .../dnetlib/pace/tree/support/FieldConf.java | 116 +- .../dnetlib/pace/tree/support/FieldStats.java | 127 +- .../dnetlib/pace/tree/support/MatchType.java | 20 +- .../pace/tree/support/TreeNodeDef.java | 228 +- .../pace/tree/support/TreeNodeStats.java | 218 +- .../pace/tree/support/TreeProcessor.java | 39 +- .../dnetlib/pace/tree/support/TreeStats.java | 69 +- .../eu/dnetlib/pace/util/BlockProcessor.java | 299 +- .../pace/util/BlockProcessorForTesting.java | 386 +- .../java/eu/dnetlib/pace/util/Capitalise.java | 15 +- .../eu/dnetlib/pace/util/DiffPatchMatch.java | 4925 +++++++++-------- .../dnetlib/pace/util/DotAbbreviations.java | 3 +- .../eu/dnetlib/pace/util/MapDocumentUtil.java | 293 +- .../eu/dnetlib/pace/util/PaceException.java | 13 +- .../eu/dnetlib/pace/util/PaceResolver.java | 76 +- .../java/eu/dnetlib/pace/util/Reporter.java | 6 +- .../eu/dnetlib/pace/AbstractPaceTest.java | 23 +- .../clustering/ClusteringFunctionTest.java | 33 +- .../dnetlib/pace/common/PaceFunctionTest.java | 73 +- .../pace/comparators/ComparatorTest.java | 104 +- .../eu/dnetlib/pace/config/ConfigTest.java | 45 +- .../java/eu/dnetlib/pace/util/UtilTest.java | 47 +- .../doiboost/SparkGenerateDoiBoost.scala | 2 +- 105 files changed, 5610 insertions(+), 5267 deletions(-) diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/AbstractClusteringFunction.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/AbstractClusteringFunction.java index 01f146120..e984f5d18 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/AbstractClusteringFunction.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/AbstractClusteringFunction.java @@ -1,9 +1,5 @@ -package eu.dnetlib.pace.clustering; -import eu.dnetlib.pace.common.AbstractPaceFunctions; -import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.model.Field; -import org.apache.commons.lang3.StringUtils; +package eu.dnetlib.pace.clustering; import java.util.Collection; import java.util.HashSet; @@ -11,33 +7,41 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; +import org.apache.commons.lang3.StringUtils; + +import eu.dnetlib.pace.common.AbstractPaceFunctions; +import eu.dnetlib.pace.config.Config; +import eu.dnetlib.pace.model.Field; + public abstract class AbstractClusteringFunction extends AbstractPaceFunctions implements ClusteringFunction { protected Map params; - + public AbstractClusteringFunction(final Map params) { this.params = params; } protected abstract Collection doApply(Config conf, String s); - + @Override public Collection apply(Config conf, List fields) { - return fields.stream().filter(f -> !f.isEmpty()) - .map(Field::stringValue) - .map(this::normalize) - .map(s -> filterAllStopWords(s)) - .map(s -> doApply(conf, s)) - .map(c -> filterBlacklisted(c, ngramBlacklist)) - .flatMap(c -> c.stream()) - .filter(StringUtils::isNotBlank) - .collect(Collectors.toCollection(HashSet::new)); + return fields + .stream() + .filter(f -> !f.isEmpty()) + .map(Field::stringValue) + .map(this::normalize) + .map(s -> filterAllStopWords(s)) + .map(s -> doApply(conf, s)) + .map(c -> filterBlacklisted(c, ngramBlacklist)) + .flatMap(c -> c.stream()) + .filter(StringUtils::isNotBlank) + .collect(Collectors.toCollection(HashSet::new)); } public Map getParams() { return params; } - + protected Integer param(String name) { return params.get(name); } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/Acronyms.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/Acronyms.java index d3008332d..9072fbb4b 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/Acronyms.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/Acronyms.java @@ -1,3 +1,4 @@ + package eu.dnetlib.pace.clustering; import java.util.Collection; @@ -6,6 +7,7 @@ import java.util.Set; import java.util.StringTokenizer; import com.google.common.collect.Sets; + import eu.dnetlib.pace.config.Config; @ClusteringClass("acronyms") @@ -19,16 +21,16 @@ public class Acronyms extends AbstractClusteringFunction { protected Collection doApply(Config conf, String s) { return extractAcronyms(s, param("max"), param("minLen"), param("maxLen")); } - + private Set extractAcronyms(final String s, int maxAcronyms, int minLen, int maxLen) { - + final Set acronyms = Sets.newLinkedHashSet(); - + for (int i = 0; i < maxAcronyms; i++) { - + final StringTokenizer st = new StringTokenizer(s); final StringBuilder sb = new StringBuilder(); - + while (st.hasMoreTokens()) { final String token = st.nextToken(); if (sb.length() > maxLen) { diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/BlacklistAwareClusteringCombiner.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/BlacklistAwareClusteringCombiner.java index 79a264a49..f0e93b8ba 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/BlacklistAwareClusteringCombiner.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/BlacklistAwareClusteringCombiner.java @@ -1,11 +1,5 @@ -package eu.dnetlib.pace.clustering; -import com.google.common.collect.Maps; -import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.model.Document; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.model.FieldListImpl; -import eu.dnetlib.pace.model.MapDocument; +package eu.dnetlib.pace.clustering; import java.util.Collection; import java.util.List; @@ -13,47 +7,54 @@ import java.util.Map; import java.util.Map.Entry; import java.util.regex.Pattern; +import com.google.common.collect.Maps; + +import eu.dnetlib.pace.config.Config; +import eu.dnetlib.pace.model.Document; +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.FieldListImpl; +import eu.dnetlib.pace.model.MapDocument; + public class BlacklistAwareClusteringCombiner extends ClusteringCombiner { - public static Collection filterAndCombine(final MapDocument a, final Config conf) { - Document filtered = filter(a, conf.blacklists()); - return combine(filtered, conf); - } + public static Collection filterAndCombine(final MapDocument a, final Config conf) { + Document filtered = filter(a, conf.blacklists()); + return combine(filtered, conf); + } - private static MapDocument filter(final MapDocument a, final Map> blacklists) { - if (blacklists == null || blacklists.isEmpty()) { - return a; - } + private static MapDocument filter(final MapDocument a, final Map> blacklists) { + if (blacklists == null || blacklists.isEmpty()) { + return a; + } - final Map filtered = Maps.newHashMap(a.getFieldMap()); + final Map filtered = Maps.newHashMap(a.getFieldMap()); - for (final Entry> e : blacklists.entrySet()) { - Field fields = a.getFieldMap().get(e.getKey()); - if (fields != null) { - final FieldListImpl fl = new FieldListImpl(); + for (final Entry> e : blacklists.entrySet()) { + Field fields = a.getFieldMap().get(e.getKey()); + if (fields != null) { + final FieldListImpl fl = new FieldListImpl(); - for (Field f : fields) { - if (!isBlackListed(f.stringValue(), e.getValue())) { - fl.add(f); - } - } + for (Field f : fields) { + if (!isBlackListed(f.stringValue(), e.getValue())) { + fl.add(f); + } + } - filtered.put(e.getKey(), fl); - } - } + filtered.put(e.getKey(), fl); + } + } - return new MapDocument(a.getIdentifier(), filtered); - } + return new MapDocument(a.getIdentifier(), filtered); + } - private static boolean isBlackListed(String value, List blacklist) { - for (Pattern pattern : blacklist) { - if (pattern.matcher(value).matches()) { - return true; - } - } + private static boolean isBlackListed(String value, List blacklist) { + for (Pattern pattern : blacklist) { + if (pattern.matcher(value).matches()) { + return true; + } + } - return false; - } + return false; + } } - diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringClass.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringClass.java index e67767171..3bb845b15 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringClass.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringClass.java @@ -1,3 +1,4 @@ + package eu.dnetlib.pace.clustering; import java.lang.annotation.ElementType; @@ -9,5 +10,5 @@ import java.lang.annotation.Target; @Target(ElementType.TYPE) public @interface ClusteringClass { - public String value(); -} \ No newline at end of file + public String value(); +} diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringCombiner.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringCombiner.java index 037476289..3a6f17e20 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringCombiner.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringCombiner.java @@ -1,3 +1,4 @@ + package eu.dnetlib.pace.clustering; import java.util.ArrayList; @@ -5,6 +6,8 @@ import java.util.Collection; import java.util.List; import java.util.stream.Collectors; +import org.apache.commons.lang3.StringUtils; + import com.google.common.collect.Sets; import eu.dnetlib.pace.config.Config; @@ -12,12 +15,11 @@ import eu.dnetlib.pace.model.ClusteringDef; import eu.dnetlib.pace.model.Document; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.model.FieldValueImpl; -import org.apache.commons.lang3.StringUtils; public class ClusteringCombiner { private static String SEPARATOR = ":"; - private static String COLLAPSE_ON= "collapseOn"; + private static String COLLAPSE_ON = "collapseOn"; public static Collection combine(final Document a, final Config conf) { final Collection res = Sets.newLinkedHashSet(); @@ -30,31 +32,33 @@ public class ClusteringCombiner { if (values instanceof FieldValueImpl) { fields.add(values); - } - else { + } else { fields.addAll((List) values); } - res.addAll( - cd.clusteringFunction() - .apply(conf, fields) - .stream() - .map(k -> prefix + SEPARATOR +k) - .collect(Collectors.toList()) - ); + res + .addAll( + cd + .clusteringFunction() + .apply(conf, fields) + .stream() + .map(k -> prefix + SEPARATOR + k) + .collect(Collectors.toList())); } } return res; } private static String getPrefix(ClusteringDef cd, String fieldName) { - return cd.getName()+ SEPARATOR + - cd.getParams().keySet() - .stream() - .filter(k -> k.contains(COLLAPSE_ON)) - .findFirst() - .map(k -> StringUtils.substringAfter(k, SEPARATOR)) - .orElse(fieldName); + return cd.getName() + SEPARATOR + + cd + .getParams() + .keySet() + .stream() + .filter(k -> k.contains(COLLAPSE_ON)) + .findFirst() + .map(k -> StringUtils.substringAfter(k, SEPARATOR)) + .orElse(fieldName); } } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringFunction.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringFunction.java index 0554d27a1..e72535160 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringFunction.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringFunction.java @@ -1,3 +1,4 @@ + package eu.dnetlib.pace.clustering; import java.util.Collection; @@ -8,9 +9,9 @@ import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.model.Field; public interface ClusteringFunction { - + public Collection apply(Config config, List fields); - + public Map getParams(); } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/ImmutableFieldValue.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/ImmutableFieldValue.java index 7f342f69c..bc8844aee 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/ImmutableFieldValue.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/ImmutableFieldValue.java @@ -1,3 +1,4 @@ + package eu.dnetlib.pace.clustering; import java.util.Collection; @@ -5,6 +6,7 @@ import java.util.List; import java.util.Map; import com.google.common.collect.Lists; + import eu.dnetlib.pace.config.Config; @ClusteringClass("immutablefieldvalue") diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/KeywordsClustering.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/KeywordsClustering.java index e67275c4e..60861aafd 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/KeywordsClustering.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/KeywordsClustering.java @@ -1,53 +1,57 @@ -package eu.dnetlib.pace.clustering; -import eu.dnetlib.pace.common.AbstractPaceFunctions; -import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.model.Field; -import org.apache.commons.lang3.StringUtils; +package eu.dnetlib.pace.clustering; import java.util.*; import java.util.stream.Collectors; +import org.apache.commons.lang3.StringUtils; + +import eu.dnetlib.pace.common.AbstractPaceFunctions; +import eu.dnetlib.pace.config.Config; +import eu.dnetlib.pace.model.Field; + @ClusteringClass("keywordsclustering") public class KeywordsClustering extends AbstractClusteringFunction { - public KeywordsClustering(Map params) { - super(params); - } + public KeywordsClustering(Map params) { + super(params); + } - @Override - protected Collection doApply(final Config conf, String s) { + @Override + protected Collection doApply(final Config conf, String s) { - //takes city codes and keywords codes without duplicates - Set keywords = getKeywords(s, conf.translationMap(), params.getOrDefault("windowSize", 4)); - Set cities = getCities(s, params.getOrDefault("windowSize", 4)); + // takes city codes and keywords codes without duplicates + Set keywords = getKeywords(s, conf.translationMap(), params.getOrDefault("windowSize", 4)); + Set cities = getCities(s, params.getOrDefault("windowSize", 4)); - //list of combination to return as result - final Collection combinations = new LinkedHashSet(); + // list of combination to return as result + final Collection combinations = new LinkedHashSet(); - for (String keyword: keywordsToCodes(keywords, conf.translationMap())){ - for (String city: citiesToCodes(cities)) { - combinations.add(keyword+"-"+city); - if (combinations.size()>=params.getOrDefault("max", 2)) { - return combinations; - } - } - } + for (String keyword : keywordsToCodes(keywords, conf.translationMap())) { + for (String city : citiesToCodes(cities)) { + combinations.add(keyword + "-" + city); + if (combinations.size() >= params.getOrDefault("max", 2)) { + return combinations; + } + } + } - return combinations; - } + return combinations; + } - @Override - public Collection apply(final Config conf, List fields) { - return fields.stream().filter(f -> !f.isEmpty()) - .map(Field::stringValue) - .map(this::cleanup) - .map(this::normalize) - .map(s -> filterAllStopWords(s)) - .map(s -> doApply(conf, s)) - .map(c -> filterBlacklisted(c, ngramBlacklist)) - .flatMap(c -> c.stream()) - .filter(StringUtils::isNotBlank) - .collect(Collectors.toCollection(HashSet::new)); - } -} \ No newline at end of file + @Override + public Collection apply(final Config conf, List fields) { + return fields + .stream() + .filter(f -> !f.isEmpty()) + .map(Field::stringValue) + .map(this::cleanup) + .map(this::normalize) + .map(s -> filterAllStopWords(s)) + .map(s -> doApply(conf, s)) + .map(c -> filterBlacklisted(c, ngramBlacklist)) + .flatMap(c -> c.stream()) + .filter(StringUtils::isNotBlank) + .collect(Collectors.toCollection(HashSet::new)); + } +} diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/LastNameFirstInitial.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/LastNameFirstInitial.java index 7f86854c2..dc6f8f775 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/LastNameFirstInitial.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/LastNameFirstInitial.java @@ -1,77 +1,81 @@ -package eu.dnetlib.pace.clustering; -import com.google.common.collect.Lists; -import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.model.Person; -import org.apache.commons.lang3.StringUtils; +package eu.dnetlib.pace.clustering; import java.util.*; import java.util.stream.Collectors; +import org.apache.commons.lang3.StringUtils; + +import com.google.common.collect.Lists; + +import eu.dnetlib.pace.config.Config; +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.Person; + @ClusteringClass("lnfi") -public class LastNameFirstInitial extends AbstractClusteringFunction{ +public class LastNameFirstInitial extends AbstractClusteringFunction { - private boolean DEFAULT_AGGRESSIVE = true; + private boolean DEFAULT_AGGRESSIVE = true; - public LastNameFirstInitial(final Map params) { - super(params); - } + public LastNameFirstInitial(final Map params) { + super(params); + } - @Override - public Collection apply(Config conf, List fields) { - return fields.stream().filter(f -> !f.isEmpty()) - .map(Field::stringValue) - .map(this::normalize) - .map(s -> doApply(conf, s)) - .map(c -> filterBlacklisted(c, ngramBlacklist)) - .flatMap(c -> c.stream()) - .filter(StringUtils::isNotBlank) - .collect(Collectors.toCollection(HashSet::new)); - } + @Override + public Collection apply(Config conf, List fields) { + return fields + .stream() + .filter(f -> !f.isEmpty()) + .map(Field::stringValue) + .map(this::normalize) + .map(s -> doApply(conf, s)) + .map(c -> filterBlacklisted(c, ngramBlacklist)) + .flatMap(c -> c.stream()) + .filter(StringUtils::isNotBlank) + .collect(Collectors.toCollection(HashSet::new)); + } - @Override - protected String normalize(final String s) { - return fixAliases(transliterate(nfd(unicodeNormalization(s)))) - // do not compact the regexes in a single expression, would cause StackOverflowError in case of large input strings - .replaceAll("[^ \\w]+", "") - .replaceAll("(\\p{InCombiningDiacriticalMarks})+", "") - .replaceAll("(\\p{Punct})+", " ") - .replaceAll("(\\d)+", " ") - .replaceAll("(\\n)+", " ") - .trim(); - } + @Override + protected String normalize(final String s) { + return fixAliases(transliterate(nfd(unicodeNormalization(s)))) + // do not compact the regexes in a single expression, would cause StackOverflowError in case of large input + // strings + .replaceAll("[^ \\w]+", "") + .replaceAll("(\\p{InCombiningDiacriticalMarks})+", "") + .replaceAll("(\\p{Punct})+", " ") + .replaceAll("(\\d)+", " ") + .replaceAll("(\\n)+", " ") + .trim(); + } - @Override - protected Collection doApply(final Config conf, final String s) { + @Override + protected Collection doApply(final Config conf, final String s) { - final List res = Lists.newArrayList(); + final List res = Lists.newArrayList(); - final boolean aggressive = (Boolean) (getParams().containsKey("aggressive") ? getParams().get("aggressive") : DEFAULT_AGGRESSIVE); + final boolean aggressive = (Boolean) (getParams().containsKey("aggressive") ? getParams().get("aggressive") + : DEFAULT_AGGRESSIVE); - Person p = new Person(s, aggressive); + Person p = new Person(s, aggressive); - if (p.isAccurate()) { - String lastName = p.getNormalisedSurname().toLowerCase(); - String firstInitial = p.getNormalisedFirstName().toLowerCase().substring(0,1); + if (p.isAccurate()) { + String lastName = p.getNormalisedSurname().toLowerCase(); + String firstInitial = p.getNormalisedFirstName().toLowerCase().substring(0, 1); - res.add(firstInitial.concat(lastName)); - } - else { // is not accurate, meaning it has no defined name and surname - List fullname = Arrays.asList(p.getNormalisedFullname().split(" ")); - if (fullname.size() == 1) { - res.add(p.getNormalisedFullname().toLowerCase()); - } - else if (fullname.size() == 2) { - res.add(fullname.get(0).substring(0,1).concat(fullname.get(1)).toLowerCase()); - res.add(fullname.get(1).substring(0,1).concat(fullname.get(0)).toLowerCase()); - } - else { - res.add(fullname.get(0).substring(0,1).concat(fullname.get(fullname.size()-1)).toLowerCase()); - res.add(fullname.get(fullname.size()-1).substring(0,1).concat(fullname.get(0)).toLowerCase()); - } - } + res.add(firstInitial.concat(lastName)); + } else { // is not accurate, meaning it has no defined name and surname + List fullname = Arrays.asList(p.getNormalisedFullname().split(" ")); + if (fullname.size() == 1) { + res.add(p.getNormalisedFullname().toLowerCase()); + } else if (fullname.size() == 2) { + res.add(fullname.get(0).substring(0, 1).concat(fullname.get(1)).toLowerCase()); + res.add(fullname.get(1).substring(0, 1).concat(fullname.get(0)).toLowerCase()); + } else { + res.add(fullname.get(0).substring(0, 1).concat(fullname.get(fullname.size() - 1)).toLowerCase()); + res.add(fullname.get(fullname.size() - 1).substring(0, 1).concat(fullname.get(0)).toLowerCase()); + } + } - return res; - } -} \ No newline at end of file + return res; + } +} diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/LowercaseClustering.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/LowercaseClustering.java index 309650f73..403d187fa 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/LowercaseClustering.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/LowercaseClustering.java @@ -1,14 +1,17 @@ + package eu.dnetlib.pace.clustering; import java.util.Collection; import java.util.List; import java.util.Map; +import org.apache.commons.lang3.StringUtils; + import com.google.common.collect.Lists; import com.google.common.collect.Sets; + import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.model.Field; -import org.apache.commons.lang3.StringUtils; @ClusteringClass("lowercase") public class LowercaseClustering extends AbstractClusteringFunction { @@ -20,7 +23,7 @@ public class LowercaseClustering extends AbstractClusteringFunction { @Override public Collection apply(Config conf, List fields) { Collection c = Sets.newLinkedHashSet(); - for(Field f : fields) { + for (Field f : fields) { c.addAll(doApply(conf, f.stringValue())); } return c; @@ -28,7 +31,7 @@ public class LowercaseClustering extends AbstractClusteringFunction { @Override protected Collection doApply(final Config conf, final String s) { - if(StringUtils.isBlank(s)) { + if (StringUtils.isBlank(s)) { return Lists.newArrayList(); } return Lists.newArrayList(s.toLowerCase().trim()); diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/NGramUtils.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/NGramUtils.java index 2391685b0..aa12f1279 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/NGramUtils.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/NGramUtils.java @@ -1,3 +1,4 @@ + package eu.dnetlib.pace.clustering; import java.util.Set; @@ -10,11 +11,14 @@ public class NGramUtils extends AbstractPaceFunctions { private static final int SIZE = 100; - private static Set stopwords = AbstractPaceFunctions.loadFromClasspath("/eu/dnetlib/pace/config/stopwords_en.txt"); + private static Set stopwords = AbstractPaceFunctions + .loadFromClasspath("/eu/dnetlib/pace/config/stopwords_en.txt"); public static String cleanupForOrdering(String s) { NGramUtils utils = new NGramUtils(); - return (utils.filterStopWords(utils.normalize(s), stopwords) + StringUtils.repeat(" ", SIZE)).substring(0, SIZE).replaceAll(" ", ""); + return (utils.filterStopWords(utils.normalize(s), stopwords) + StringUtils.repeat(" ", SIZE)) + .substring(0, SIZE) + .replaceAll(" ", ""); } } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/NgramPairs.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/NgramPairs.java index baa30d747..0656312c7 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/NgramPairs.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/NgramPairs.java @@ -1,3 +1,4 @@ + package eu.dnetlib.pace.clustering; import java.util.Collection; @@ -6,6 +7,7 @@ import java.util.List; import java.util.Map; import com.google.common.collect.Lists; + import eu.dnetlib.pace.config.Config; @ClusteringClass("ngrampairs") @@ -14,7 +16,7 @@ public class NgramPairs extends Ngrams { public NgramPairs(Map params) { super(params); } - + @Override protected Collection doApply(Config conf, String s) { return ngramPairs(Lists.newArrayList(getNgrams(s, param("ngramLen"), param("max") * 2, 1, 2)), param("max")); @@ -28,7 +30,7 @@ public class NgramPairs extends Ngrams { break; } res.add(ngrams.get(i) + ngrams.get(j)); - //System.out.println("-- " + concatNgrams); + // System.out.println("-- " + concatNgrams); } return res; } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/Ngrams.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/Ngrams.java index 214b1451f..bcc10a869 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/Ngrams.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/Ngrams.java @@ -1,9 +1,10 @@ + package eu.dnetlib.pace.clustering; -import eu.dnetlib.pace.config.Config; - import java.util.*; +import eu.dnetlib.pace.config.Config; + @ClusteringClass("ngrams") public class Ngrams extends AbstractClusteringFunction { @@ -36,7 +37,7 @@ public class Ngrams extends AbstractClusteringFunction { } } } - //System.out.println(ngrams + " n: " + ngrams.size()); + // System.out.println(ngrams + " n: " + ngrams.size()); return ngrams; } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonClustering.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonClustering.java index db8d90bce..83b92f22c 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonClustering.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonClustering.java @@ -1,17 +1,20 @@ -package eu.dnetlib.pace.clustering; -import com.google.common.collect.Sets; -import eu.dnetlib.pace.common.AbstractPaceFunctions; -import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.model.Person; -import org.apache.commons.lang3.StringUtils; +package eu.dnetlib.pace.clustering; import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Set; +import org.apache.commons.lang3.StringUtils; + +import com.google.common.collect.Sets; + +import eu.dnetlib.pace.common.AbstractPaceFunctions; +import eu.dnetlib.pace.config.Config; +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.Person; + @ClusteringClass("personClustering") public class PersonClustering extends AbstractPaceFunctions implements ClusteringFunction { @@ -31,7 +34,8 @@ public class PersonClustering extends AbstractPaceFunctions implements Clusterin final Person person = new Person(f.stringValue(), false); - if (StringUtils.isNotBlank(person.getNormalisedFirstName()) && StringUtils.isNotBlank(person.getNormalisedSurname())) { + if (StringUtils.isNotBlank(person.getNormalisedFirstName()) + && StringUtils.isNotBlank(person.getNormalisedSurname())) { hashes.add(firstLC(person.getNormalisedFirstName()) + person.getNormalisedSurname().toLowerCase()); } else { for (final String token1 : tokens(f.stringValue(), MAX_TOKENS)) { diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonHash.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonHash.java index f6c4fe07f..a3d58a9be 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonHash.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonHash.java @@ -1,3 +1,4 @@ + package eu.dnetlib.pace.clustering; import java.util.Collection; @@ -22,7 +23,8 @@ public class PersonHash extends AbstractClusteringFunction { protected Collection doApply(final Config conf, final String s) { final List res = Lists.newArrayList(); - final boolean aggressive = (Boolean) (getParams().containsKey("aggressive") ? getParams().get("aggressive") : DEFAULT_AGGRESSIVE); + final boolean aggressive = (Boolean) (getParams().containsKey("aggressive") ? getParams().get("aggressive") + : DEFAULT_AGGRESSIVE); res.add(new Person(s, aggressive).hash()); diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/RandomClusteringFunction.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/RandomClusteringFunction.java index 86a2e4e4f..2aab926da 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/RandomClusteringFunction.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/RandomClusteringFunction.java @@ -1,10 +1,11 @@ -package eu.dnetlib.pace.clustering; -import eu.dnetlib.pace.config.Config; +package eu.dnetlib.pace.clustering; import java.util.Collection; import java.util.Map; +import eu.dnetlib.pace.config.Config; + public class RandomClusteringFunction extends AbstractClusteringFunction { public RandomClusteringFunction(Map params) { diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/SortedNgramPairs.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/SortedNgramPairs.java index 55b203d7a..1fc9f1747 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/SortedNgramPairs.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/SortedNgramPairs.java @@ -1,3 +1,4 @@ + package eu.dnetlib.pace.clustering; import java.util.*; @@ -5,6 +6,7 @@ import java.util.*; import com.google.common.base.Joiner; import com.google.common.base.Splitter; import com.google.common.collect.Lists; + import eu.dnetlib.pace.config.Config; @ClusteringClass("sortedngrampairs") @@ -21,7 +23,9 @@ public class SortedNgramPairs extends NgramPairs { Collections.sort(tokens); - return ngramPairs(Lists.newArrayList(getNgrams(Joiner.on(" ").join(tokens), param("ngramLen"), param("max") * 2, 1, 2)), param("max")); + return ngramPairs( + Lists.newArrayList(getNgrams(Joiner.on(" ").join(tokens), param("ngramLen"), param("max") * 2, 1, 2)), + param("max")); } } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/SpaceTrimmingFieldValue.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/SpaceTrimmingFieldValue.java index 50cea4db3..392aecc79 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/SpaceTrimmingFieldValue.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/SpaceTrimmingFieldValue.java @@ -1,15 +1,17 @@ + package eu.dnetlib.pace.clustering; import java.util.Collection; import java.util.List; import java.util.Map; -import eu.dnetlib.pace.config.Config; import org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.lang3.StringUtils; import com.google.common.collect.Lists; +import eu.dnetlib.pace.config.Config; + @ClusteringClass("spacetrimmingfieldvalue") public class SpaceTrimmingFieldValue extends AbstractClusteringFunction { @@ -21,7 +23,10 @@ public class SpaceTrimmingFieldValue extends AbstractClusteringFunction { protected Collection doApply(final Config conf, final String s) { final List res = Lists.newArrayList(); - res.add(StringUtils.isBlank(s) ? RandomStringUtils.random(getParams().get("randomLength")) : s.toLowerCase().replaceAll("\\s+", "")); + res + .add( + StringUtils.isBlank(s) ? RandomStringUtils.random(getParams().get("randomLength")) + : s.toLowerCase().replaceAll("\\s+", "")); return res; } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/SuffixPrefix.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/SuffixPrefix.java index fa1f64362..2a1c023a9 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/SuffixPrefix.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/SuffixPrefix.java @@ -1,3 +1,4 @@ + package eu.dnetlib.pace.clustering; import java.util.Collection; @@ -5,6 +6,7 @@ import java.util.Map; import java.util.Set; import com.google.common.collect.Sets; + import eu.dnetlib.pace.config.Config; @ClusteringClass("suffixprefix") @@ -18,7 +20,7 @@ public class SuffixPrefix extends AbstractClusteringFunction { protected Collection doApply(Config conf, String s) { return suffixPrefix(s, param("len"), param("max")); } - + private Collection suffixPrefix(String s, int len, int max) { final Set bigrams = Sets.newLinkedHashSet(); int i = 0; diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/UrlClustering.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/UrlClustering.java index feb60a221..122e01179 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/UrlClustering.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/UrlClustering.java @@ -1,8 +1,5 @@ -package eu.dnetlib.pace.clustering; -import eu.dnetlib.pace.common.AbstractPaceFunctions; -import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.model.Field; +package eu.dnetlib.pace.clustering; import java.net.MalformedURLException; import java.net.URL; @@ -12,43 +9,46 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; +import eu.dnetlib.pace.common.AbstractPaceFunctions; +import eu.dnetlib.pace.config.Config; +import eu.dnetlib.pace.model.Field; + @ClusteringClass("urlclustering") public class UrlClustering extends AbstractPaceFunctions implements ClusteringFunction { - protected Map params; + protected Map params; - public UrlClustering(final Map params) { - this.params = params; - } + public UrlClustering(final Map params) { + this.params = params; + } - @Override - public Collection apply(final Config conf, List fields) { - try { - return fields.stream() - .filter(f -> !f.isEmpty()) - .map(Field::stringValue) - .map(this::asUrl) - .map(URL::getHost) - .collect(Collectors.toCollection(HashSet::new)); - } - catch (IllegalStateException e){ - return new HashSet<>(); - } - } + @Override + public Collection apply(final Config conf, List fields) { + try { + return fields + .stream() + .filter(f -> !f.isEmpty()) + .map(Field::stringValue) + .map(this::asUrl) + .map(URL::getHost) + .collect(Collectors.toCollection(HashSet::new)); + } catch (IllegalStateException e) { + return new HashSet<>(); + } + } - @Override - public Map getParams() { - return null; - } - - private URL asUrl(String value) { - try { - return new URL(value); - } catch (MalformedURLException e) { - // should not happen as checked by pace typing - throw new IllegalStateException("invalid URL: " + value); - } - } + @Override + public Map getParams() { + return null; + } + private URL asUrl(String value) { + try { + return new URL(value); + } catch (MalformedURLException e) { + // should not happen as checked by pace typing + throw new IllegalStateException("invalid URL: " + value); + } + } } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/WordsStatsSuffixPrefixChain.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/WordsStatsSuffixPrefixChain.java index 6fa2668fa..c8e02f8f0 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/WordsStatsSuffixPrefixChain.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/WordsStatsSuffixPrefixChain.java @@ -1,90 +1,91 @@ -package eu.dnetlib.pace.clustering; -import com.google.common.collect.Sets; -import eu.dnetlib.pace.config.Config; +package eu.dnetlib.pace.clustering; import java.util.*; import java.util.stream.Collectors; +import com.google.common.collect.Sets; + +import eu.dnetlib.pace.config.Config; + @ClusteringClass("wordsStatsSuffixPrefixChain") public class WordsStatsSuffixPrefixChain extends AbstractClusteringFunction { - public WordsStatsSuffixPrefixChain(Map params) { - super(params); - } + public WordsStatsSuffixPrefixChain(Map params) { + super(params); + } - @Override - protected Collection doApply(Config conf, String s) { - return suffixPrefixChain(s, param("mod")); - } + @Override + protected Collection doApply(Config conf, String s) { + return suffixPrefixChain(s, param("mod")); + } - private Collection suffixPrefixChain(String s, int mod) { + private Collection suffixPrefixChain(String s, int mod) { - //create the list of words from the string (remove short words) - List wordsList = - Arrays.stream(s.split(" ")) - .filter(si -> si.length() > 3) - .collect(Collectors.toList()); + // create the list of words from the string (remove short words) + List wordsList = Arrays + .stream(s.split(" ")) + .filter(si -> si.length() > 3) + .collect(Collectors.toList()); - final int words = wordsList.size(); - final int letters = s.length(); + final int words = wordsList.size(); + final int letters = s.length(); - //create the prefix: number of words + number of letters/mod - String prefix = words + "-" + letters/mod + "-"; + // create the prefix: number of words + number of letters/mod + String prefix = words + "-" + letters / mod + "-"; - return doSuffixPrefixChain(wordsList, prefix); + return doSuffixPrefixChain(wordsList, prefix); - } + } - private Collection doSuffixPrefixChain(List wordsList, String prefix) { + private Collection doSuffixPrefixChain(List wordsList, String prefix) { - Set set = Sets.newLinkedHashSet(); - switch(wordsList.size()){ - case 0: - case 1: - break; - case 2: - set.add( - prefix + - suffix(wordsList.get(0), 3) + - prefix(wordsList.get(1), 3) - ); + Set set = Sets.newLinkedHashSet(); + switch (wordsList.size()) { + case 0: + case 1: + break; + case 2: + set + .add( + prefix + + suffix(wordsList.get(0), 3) + + prefix(wordsList.get(1), 3)); - set.add( - prefix + - prefix(wordsList.get(0), 3) + - suffix(wordsList.get(1), 3) - ); + set + .add( + prefix + + prefix(wordsList.get(0), 3) + + suffix(wordsList.get(1), 3)); - break; - default: - set.add( - prefix + - suffix(wordsList.get(0), 3) + - prefix(wordsList.get(1), 3) + - suffix(wordsList.get(2), 3) - ); + break; + default: + set + .add( + prefix + + suffix(wordsList.get(0), 3) + + prefix(wordsList.get(1), 3) + + suffix(wordsList.get(2), 3)); - set.add( - prefix + - prefix(wordsList.get(0), 3) + - suffix(wordsList.get(1), 3) + - prefix(wordsList.get(2), 3) - ); - break; - } + set + .add( + prefix + + prefix(wordsList.get(0), 3) + + suffix(wordsList.get(1), 3) + + prefix(wordsList.get(2), 3)); + break; + } - return set; + return set; - } + } + private String suffix(String s, int len) { + return s.substring(s.length() - len); + } - private String suffix(String s, int len) { - return s.substring(s.length()-len); - } - - private String prefix(String s, int len) { - return s.substring(0, len); - } + private String prefix(String s, int len) { + return s.substring(0, len); + } } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/WordsSuffixPrefix.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/WordsSuffixPrefix.java index 1e94b34d2..e606590a5 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/WordsSuffixPrefix.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/WordsSuffixPrefix.java @@ -1,3 +1,4 @@ + package eu.dnetlib.pace.clustering; import java.util.Collection; @@ -5,53 +6,54 @@ import java.util.Map; import java.util.Set; import com.google.common.collect.Sets; + import eu.dnetlib.pace.config.Config; @ClusteringClass("wordssuffixprefix") public class WordsSuffixPrefix extends AbstractClusteringFunction { - public WordsSuffixPrefix(Map params) { - super(params); - } + public WordsSuffixPrefix(Map params) { + super(params); + } - @Override - protected Collection doApply(Config conf, String s) { - return suffixPrefix(s, param("len"), param("max")); - } + @Override + protected Collection doApply(Config conf, String s) { + return suffixPrefix(s, param("len"), param("max")); + } - private Collection suffixPrefix(String s, int len, int max) { + private Collection suffixPrefix(String s, int len, int max) { - final int words = s.split(" ").length; + final int words = s.split(" ").length; - // adjust the token length according to the number of words - switch (words) { - case 1: - return Sets.newLinkedHashSet(); - case 2: - return doSuffixPrefix(s, len+2, max, words); - case 3: - return doSuffixPrefix(s, len+1, max, words); - default: - return doSuffixPrefix(s, len, max, words); - } - } + // adjust the token length according to the number of words + switch (words) { + case 1: + return Sets.newLinkedHashSet(); + case 2: + return doSuffixPrefix(s, len + 2, max, words); + case 3: + return doSuffixPrefix(s, len + 1, max, words); + default: + return doSuffixPrefix(s, len, max, words); + } + } - private Collection doSuffixPrefix(String s, int len, int max, int words) { - final Set bigrams = Sets.newLinkedHashSet(); - int i = 0; - while (++i < s.length() && bigrams.size() < max) { - int j = s.indexOf(" ", i); + private Collection doSuffixPrefix(String s, int len, int max, int words) { + final Set bigrams = Sets.newLinkedHashSet(); + int i = 0; + while (++i < s.length() && bigrams.size() < max) { + int j = s.indexOf(" ", i); - int offset = j + len + 1 < s.length() ? j + len + 1 : s.length(); + int offset = j + len + 1 < s.length() ? j + len + 1 : s.length(); - if (j - len > 0) { - String bigram = s.substring(j - len, offset).replaceAll(" ", "").trim(); - if (bigram.length() >= 4) { - bigrams.add(words+bigram); - } - } - } - return bigrams; - } + if (j - len > 0) { + String bigram = s.substring(j - len, offset).replaceAll(" ", "").trim(); + if (bigram.length() >= 4) { + bigrams.add(words + bigram); + } + } + } + return bigrams; + } -} \ No newline at end of file +} diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java index bfe9f6220..9902508b8 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java @@ -1,16 +1,5 @@ -package eu.dnetlib.pace.common; -import com.google.common.base.Joiner; -import com.google.common.base.Splitter; -import com.google.common.collect.Iterables; -import com.google.common.collect.Sets; -import com.ibm.icu.text.Transliterator; -import eu.dnetlib.pace.clustering.NGramUtils; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.model.FieldList; -import eu.dnetlib.pace.model.FieldListImpl; -import org.apache.commons.io.IOUtils; -import org.apache.commons.lang3.StringUtils; +package eu.dnetlib.pace.common; import java.io.IOException; import java.io.StringWriter; @@ -21,6 +10,20 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringUtils; + +import com.google.common.base.Joiner; +import com.google.common.base.Splitter; +import com.google.common.collect.Iterables; +import com.google.common.collect.Sets; +import com.ibm.icu.text.Transliterator; + +import eu.dnetlib.pace.clustering.NGramUtils; +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.FieldList; +import eu.dnetlib.pace.model.FieldListImpl; + /** * Set of common functions for the framework * @@ -28,330 +31,337 @@ import java.util.stream.Collectors; */ public abstract class AbstractPaceFunctions { - //city map to be used when translating the city names into codes - private static Map cityMap = AbstractPaceFunctions.loadMapFromClasspath("/eu/dnetlib/pace/config/city_map.csv"); - - //list of stopwords in different languages - protected static Set stopwords_gr = loadFromClasspath("/eu/dnetlib/pace/config/stopwords_gr.txt"); - protected static Set stopwords_en = loadFromClasspath("/eu/dnetlib/pace/config/stopwords_en.txt"); - protected static Set stopwords_de = loadFromClasspath("/eu/dnetlib/pace/config/stopwords_de.txt"); - protected static Set stopwords_es = loadFromClasspath("/eu/dnetlib/pace/config/stopwords_es.txt"); - protected static Set stopwords_fr = loadFromClasspath("/eu/dnetlib/pace/config/stopwords_fr.txt"); - protected static Set stopwords_it = loadFromClasspath("/eu/dnetlib/pace/config/stopwords_it.txt"); - protected static Set stopwords_pt = loadFromClasspath("/eu/dnetlib/pace/config/stopwords_pt.txt"); - - //transliterator - protected static Transliterator transliterator = Transliterator.getInstance("Any-Eng"); - - //blacklist of ngrams: to avoid generic keys - protected static Set ngramBlacklist = loadFromClasspath("/eu/dnetlib/pace/config/ngram_blacklist.txt"); - - //html regex for normalization - public final String HTML_REGEX = "<[^>]*>"; - - private static final String alpha = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 "; - private static final String aliases_from = "⁰¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ⁿ₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎àáâäæãåāèéêëēėęəîïíīįìôöòóœøōõûüùúūßśšłžźżçćčñń"; - private static final String aliases_to = "0123456789+-=()n0123456789+-=()aaaaaaaaeeeeeeeeiiiiiioooooooouuuuussslzzzcccnn"; - - //doi prefix for normalization - public final String DOI_PREFIX = "(https?:\\/\\/dx\\.doi\\.org\\/)|(doi:)"; - - private Pattern numberPattern = Pattern.compile("-?\\d+(\\.\\d+)?"); - - private Pattern hexUnicodePattern = Pattern.compile("\\\\u(\\p{XDigit}{4})"); - - protected final static FieldList EMPTY_FIELD = new FieldListImpl(); - - protected String concat(final List l) { - return Joiner.on(" ").skipNulls().join(l); - } - - protected String cleanup(final String s) { - - final String s1 = s.replaceAll(HTML_REGEX, ""); - final String s2 = unicodeNormalization(s1.toLowerCase()); - final String s3 = nfd(s2); - final String s4 = fixXML(s3); - final String s5 = s4.replaceAll("([0-9]+)", " $1 "); - final String s6 = transliterate(s5); - final String s7 = fixAliases(s6); - final String s8 = s7.replaceAll("[^\\p{ASCII}]", ""); - final String s9 = s8.replaceAll("[\\p{Punct}]", " "); - final String s10 = s9.replaceAll("\\n", " "); - final String s11 = s10.replaceAll("(?m)\\s+", " "); - final String s12 = s11.trim(); - return s12; - } - - protected String fixXML(final String a){ - - return a.replaceAll("–", " ") - .replaceAll("&", " ") - .replaceAll(""", " ") - .replaceAll("−", " "); - } - - protected boolean checkNumbers(final String a, final String b) { - final String numbersA = getNumbers(a); - final String numbersB = getNumbers(b); - final String romansA = getRomans(a); - final String romansB = getRomans(b); - return !numbersA.equals(numbersB) || !romansA.equals(romansB); - } - - protected String getRomans(final String s) { - final StringBuilder sb = new StringBuilder(); - for (final String t : s.split(" ")) { - sb.append(isRoman(t) ? t : ""); - } - return sb.toString(); - } - - protected boolean isRoman(final String s) { - return s.replaceAll("^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$", "qwertyuiop").equals("qwertyuiop"); - } - - protected String getNumbers(final String s) { - final StringBuilder sb = new StringBuilder(); - for (final String t : s.split(" ")) { - sb.append(isNumber(t) ? t : ""); - } - return sb.toString(); - } - - public boolean isNumber(String strNum) { - if (strNum == null) { - return false; - } - return numberPattern.matcher(strNum).matches(); - } - - protected static String fixAliases(final String s) { - final StringBuilder sb = new StringBuilder(); - - s.chars().forEach(ch -> { - final int i = StringUtils.indexOf(aliases_from, ch); - sb.append(i >= 0 ? aliases_to.charAt(i) : (char)ch); - }); - - return sb.toString(); - } - - protected static String transliterate(final String s) { - try { - return transliterator.transliterate(s); - } - catch(Exception e) { - return s; - } - } - - protected String removeSymbols(final String s) { - final StringBuilder sb = new StringBuilder(); - - s.chars().forEach(ch -> { - sb.append(StringUtils.contains(alpha, ch) ? (char)ch : ' '); - }); - - return sb.toString().replaceAll("\\s+", " "); - } - - protected String getFirstValue(final Field values) { - return (values != null) && !Iterables.isEmpty(values) ? Iterables.getFirst(values, EMPTY_FIELD).stringValue() : ""; - } - - protected boolean notNull(final String s) { - return s != null; - } - - protected String normalize(final String s) { - return fixAliases(transliterate(nfd(unicodeNormalization(s)))) - .toLowerCase() - // do not compact the regexes in a single expression, would cause StackOverflowError in case of large input strings - .replaceAll("[^ \\w]+", "") - .replaceAll("(\\p{InCombiningDiacriticalMarks})+", "") - .replaceAll("(\\p{Punct})+", " ") - .replaceAll("(\\d)+", " ") - .replaceAll("(\\n)+", " ") - .trim(); - } - - public String nfd(final String s) { - return Normalizer.normalize(s, Normalizer.Form.NFD); - } - - public String utf8(final String s) { - byte[] bytes = s.getBytes(StandardCharsets.UTF_8); - return new String(bytes, StandardCharsets.UTF_8); - } - - public String unicodeNormalization(final String s) { - - Matcher m = hexUnicodePattern.matcher(s); - StringBuffer buf = new StringBuffer(s.length()); - while (m.find()) { - String ch = String.valueOf((char) Integer.parseInt(m.group(1), 16)); - m.appendReplacement(buf, Matcher.quoteReplacement(ch)); - } - m.appendTail(buf); - return buf.toString(); - } - - protected String filterStopWords(final String s, final Set stopwords) { - final StringTokenizer st = new StringTokenizer(s); - final StringBuilder sb = new StringBuilder(); - while (st.hasMoreTokens()) { - final String token = st.nextToken(); - if (!stopwords.contains(token)) { - sb.append(token); - sb.append(" "); - } - } - return sb.toString().trim(); - } - - public String filterAllStopWords(String s) { - - s = filterStopWords(s, stopwords_en); - s = filterStopWords(s, stopwords_de); - s = filterStopWords(s, stopwords_it); - s = filterStopWords(s, stopwords_fr); - s = filterStopWords(s, stopwords_pt); - s = filterStopWords(s, stopwords_es); - s = filterStopWords(s, stopwords_gr); - - return s; - } - - protected Collection filterBlacklisted(final Collection set, final Set ngramBlacklist) { - final Set newset = Sets.newLinkedHashSet(); - for (final String s : set) { - if (!ngramBlacklist.contains(s)) { - newset.add(s); - } - } - return newset; - } - - public static Set loadFromClasspath(final String classpath) { - - Transliterator transliterator = Transliterator.getInstance("Any-Eng"); - - final Set h = Sets.newHashSet(); - try { - for (final String s : IOUtils.readLines(NGramUtils.class.getResourceAsStream(classpath), StandardCharsets.UTF_8)) { - h.add(fixAliases(transliterator.transliterate(s))); //transliteration of the stopwords - } - } catch (final Throwable e) { - return Sets.newHashSet(); - } - return h; - } - - public static Map loadMapFromClasspath(final String classpath) { - - Transliterator transliterator = Transliterator.getInstance("Any-Eng"); - - final Map m = new HashMap<>(); - try { - for (final String s : IOUtils.readLines(AbstractPaceFunctions.class.getResourceAsStream(classpath), StandardCharsets.UTF_8)) { - //string is like this: code;word1;word2;word3 - String[] line = s.split(";"); - String value = line[0]; - for (int i = 1; i < line.length; i++) { - m.put(fixAliases(transliterator.transliterate(line[i].toLowerCase())), value); - } - } - } catch (final Throwable e) { - return new HashMap<>(); - } - return m; - } - - public String removeKeywords(String s, Set keywords) { - - s = " " + s + " "; - for (String k : keywords) { - s = s.replaceAll(k.toLowerCase(), ""); - } - - return s.trim(); - } - - public double commonElementsPercentage(Set s1, Set s2) { - - double longer = Math.max(s1.size(), s2.size()); - return (double) s1.stream().filter(s2::contains).count() / longer; - } - - //convert the set of keywords to codes - public Set toCodes(Set keywords, Map translationMap) { - return keywords.stream().map(s -> translationMap.get(s)).collect(Collectors.toSet()); - } - - public Set keywordsToCodes(Set keywords, Map translationMap) { - return toCodes(keywords, translationMap); - } - - public Set citiesToCodes(Set keywords) { - return toCodes(keywords, cityMap); - } - - protected String firstLC(final String s) { - return StringUtils.substring(s, 0, 1).toLowerCase(); - } - - protected Iterable tokens(final String s, final int maxTokens) { - return Iterables.limit(Splitter.on(" ").omitEmptyStrings().trimResults().split(s), maxTokens); - } - - public String normalizePid(String pid) { - return pid.toLowerCase().replaceAll(DOI_PREFIX, ""); - } - - //get the list of keywords into the input string - public Set getKeywords(String s1, Map translationMap, int windowSize) { - - String s = s1; - - List tokens = Arrays.asList(s.toLowerCase().split(" ")); - - Set codes = new HashSet<>(); - - if (tokens.size() < windowSize) - windowSize = tokens.size(); - - int length = windowSize; - - while (length != 0) { - - for (int i = 0; i <= tokens.size() - length; i++) { - String candidate = concat(tokens.subList(i, i + length)); - if (translationMap.containsKey(candidate)) { - codes.add(candidate); - s = s.replace(candidate, "").trim(); - } - } - - tokens = Arrays.asList(s.split(" ")); - length -= 1; - } - - return codes; - } - - public Set getCities(String s1, int windowSize) { - return getKeywords(s1, cityMap, windowSize); - } - - public static String readFromClasspath(final String filename, final Class clazz) { - final StringWriter sw = new StringWriter(); - try { - IOUtils.copy(clazz.getResourceAsStream(filename), sw, StandardCharsets.UTF_8); - return sw.toString(); - } catch (final IOException e) { - throw new RuntimeException("cannot load resource from classpath: " + filename); - } - } + // city map to be used when translating the city names into codes + private static Map cityMap = AbstractPaceFunctions + .loadMapFromClasspath("/eu/dnetlib/pace/config/city_map.csv"); + + // list of stopwords in different languages + protected static Set stopwords_gr = loadFromClasspath("/eu/dnetlib/pace/config/stopwords_gr.txt"); + protected static Set stopwords_en = loadFromClasspath("/eu/dnetlib/pace/config/stopwords_en.txt"); + protected static Set stopwords_de = loadFromClasspath("/eu/dnetlib/pace/config/stopwords_de.txt"); + protected static Set stopwords_es = loadFromClasspath("/eu/dnetlib/pace/config/stopwords_es.txt"); + protected static Set stopwords_fr = loadFromClasspath("/eu/dnetlib/pace/config/stopwords_fr.txt"); + protected static Set stopwords_it = loadFromClasspath("/eu/dnetlib/pace/config/stopwords_it.txt"); + protected static Set stopwords_pt = loadFromClasspath("/eu/dnetlib/pace/config/stopwords_pt.txt"); + + // transliterator + protected static Transliterator transliterator = Transliterator.getInstance("Any-Eng"); + + // blacklist of ngrams: to avoid generic keys + protected static Set ngramBlacklist = loadFromClasspath("/eu/dnetlib/pace/config/ngram_blacklist.txt"); + + // html regex for normalization + public final String HTML_REGEX = "<[^>]*>"; + + private static final String alpha = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 "; + private static final String aliases_from = "⁰¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ⁿ₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎àáâäæãåāèéêëēėęəîïíīįìôöòóœøōõûüùúūßśšłžźżçćčñń"; + private static final String aliases_to = "0123456789+-=()n0123456789+-=()aaaaaaaaeeeeeeeeiiiiiioooooooouuuuussslzzzcccnn"; + + // doi prefix for normalization + public final String DOI_PREFIX = "(https?:\\/\\/dx\\.doi\\.org\\/)|(doi:)"; + + private Pattern numberPattern = Pattern.compile("-?\\d+(\\.\\d+)?"); + + private Pattern hexUnicodePattern = Pattern.compile("\\\\u(\\p{XDigit}{4})"); + + protected final static FieldList EMPTY_FIELD = new FieldListImpl(); + + protected String concat(final List l) { + return Joiner.on(" ").skipNulls().join(l); + } + + protected String cleanup(final String s) { + + final String s1 = s.replaceAll(HTML_REGEX, ""); + final String s2 = unicodeNormalization(s1.toLowerCase()); + final String s3 = nfd(s2); + final String s4 = fixXML(s3); + final String s5 = s4.replaceAll("([0-9]+)", " $1 "); + final String s6 = transliterate(s5); + final String s7 = fixAliases(s6); + final String s8 = s7.replaceAll("[^\\p{ASCII}]", ""); + final String s9 = s8.replaceAll("[\\p{Punct}]", " "); + final String s10 = s9.replaceAll("\\n", " "); + final String s11 = s10.replaceAll("(?m)\\s+", " "); + final String s12 = s11.trim(); + return s12; + } + + protected String fixXML(final String a) { + + return a + .replaceAll("–", " ") + .replaceAll("&", " ") + .replaceAll(""", " ") + .replaceAll("−", " "); + } + + protected boolean checkNumbers(final String a, final String b) { + final String numbersA = getNumbers(a); + final String numbersB = getNumbers(b); + final String romansA = getRomans(a); + final String romansB = getRomans(b); + return !numbersA.equals(numbersB) || !romansA.equals(romansB); + } + + protected String getRomans(final String s) { + final StringBuilder sb = new StringBuilder(); + for (final String t : s.split(" ")) { + sb.append(isRoman(t) ? t : ""); + } + return sb.toString(); + } + + protected boolean isRoman(final String s) { + return s + .replaceAll("^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$", "qwertyuiop") + .equals("qwertyuiop"); + } + + protected String getNumbers(final String s) { + final StringBuilder sb = new StringBuilder(); + for (final String t : s.split(" ")) { + sb.append(isNumber(t) ? t : ""); + } + return sb.toString(); + } + + public boolean isNumber(String strNum) { + if (strNum == null) { + return false; + } + return numberPattern.matcher(strNum).matches(); + } + + protected static String fixAliases(final String s) { + final StringBuilder sb = new StringBuilder(); + + s.chars().forEach(ch -> { + final int i = StringUtils.indexOf(aliases_from, ch); + sb.append(i >= 0 ? aliases_to.charAt(i) : (char) ch); + }); + + return sb.toString(); + } + + protected static String transliterate(final String s) { + try { + return transliterator.transliterate(s); + } catch (Exception e) { + return s; + } + } + + protected String removeSymbols(final String s) { + final StringBuilder sb = new StringBuilder(); + + s.chars().forEach(ch -> { + sb.append(StringUtils.contains(alpha, ch) ? (char) ch : ' '); + }); + + return sb.toString().replaceAll("\\s+", " "); + } + + protected String getFirstValue(final Field values) { + return (values != null) && !Iterables.isEmpty(values) ? Iterables.getFirst(values, EMPTY_FIELD).stringValue() + : ""; + } + + protected boolean notNull(final String s) { + return s != null; + } + + protected String normalize(final String s) { + return fixAliases(transliterate(nfd(unicodeNormalization(s)))) + .toLowerCase() + // do not compact the regexes in a single expression, would cause StackOverflowError in case of large input + // strings + .replaceAll("[^ \\w]+", "") + .replaceAll("(\\p{InCombiningDiacriticalMarks})+", "") + .replaceAll("(\\p{Punct})+", " ") + .replaceAll("(\\d)+", " ") + .replaceAll("(\\n)+", " ") + .trim(); + } + + public String nfd(final String s) { + return Normalizer.normalize(s, Normalizer.Form.NFD); + } + + public String utf8(final String s) { + byte[] bytes = s.getBytes(StandardCharsets.UTF_8); + return new String(bytes, StandardCharsets.UTF_8); + } + + public String unicodeNormalization(final String s) { + + Matcher m = hexUnicodePattern.matcher(s); + StringBuffer buf = new StringBuffer(s.length()); + while (m.find()) { + String ch = String.valueOf((char) Integer.parseInt(m.group(1), 16)); + m.appendReplacement(buf, Matcher.quoteReplacement(ch)); + } + m.appendTail(buf); + return buf.toString(); + } + + protected String filterStopWords(final String s, final Set stopwords) { + final StringTokenizer st = new StringTokenizer(s); + final StringBuilder sb = new StringBuilder(); + while (st.hasMoreTokens()) { + final String token = st.nextToken(); + if (!stopwords.contains(token)) { + sb.append(token); + sb.append(" "); + } + } + return sb.toString().trim(); + } + + public String filterAllStopWords(String s) { + + s = filterStopWords(s, stopwords_en); + s = filterStopWords(s, stopwords_de); + s = filterStopWords(s, stopwords_it); + s = filterStopWords(s, stopwords_fr); + s = filterStopWords(s, stopwords_pt); + s = filterStopWords(s, stopwords_es); + s = filterStopWords(s, stopwords_gr); + + return s; + } + + protected Collection filterBlacklisted(final Collection set, final Set ngramBlacklist) { + final Set newset = Sets.newLinkedHashSet(); + for (final String s : set) { + if (!ngramBlacklist.contains(s)) { + newset.add(s); + } + } + return newset; + } + + public static Set loadFromClasspath(final String classpath) { + + Transliterator transliterator = Transliterator.getInstance("Any-Eng"); + + final Set h = Sets.newHashSet(); + try { + for (final String s : IOUtils + .readLines(NGramUtils.class.getResourceAsStream(classpath), StandardCharsets.UTF_8)) { + h.add(fixAliases(transliterator.transliterate(s))); // transliteration of the stopwords + } + } catch (final Throwable e) { + return Sets.newHashSet(); + } + return h; + } + + public static Map loadMapFromClasspath(final String classpath) { + + Transliterator transliterator = Transliterator.getInstance("Any-Eng"); + + final Map m = new HashMap<>(); + try { + for (final String s : IOUtils + .readLines(AbstractPaceFunctions.class.getResourceAsStream(classpath), StandardCharsets.UTF_8)) { + // string is like this: code;word1;word2;word3 + String[] line = s.split(";"); + String value = line[0]; + for (int i = 1; i < line.length; i++) { + m.put(fixAliases(transliterator.transliterate(line[i].toLowerCase())), value); + } + } + } catch (final Throwable e) { + return new HashMap<>(); + } + return m; + } + + public String removeKeywords(String s, Set keywords) { + + s = " " + s + " "; + for (String k : keywords) { + s = s.replaceAll(k.toLowerCase(), ""); + } + + return s.trim(); + } + + public double commonElementsPercentage(Set s1, Set s2) { + + double longer = Math.max(s1.size(), s2.size()); + return (double) s1.stream().filter(s2::contains).count() / longer; + } + + // convert the set of keywords to codes + public Set toCodes(Set keywords, Map translationMap) { + return keywords.stream().map(s -> translationMap.get(s)).collect(Collectors.toSet()); + } + + public Set keywordsToCodes(Set keywords, Map translationMap) { + return toCodes(keywords, translationMap); + } + + public Set citiesToCodes(Set keywords) { + return toCodes(keywords, cityMap); + } + + protected String firstLC(final String s) { + return StringUtils.substring(s, 0, 1).toLowerCase(); + } + + protected Iterable tokens(final String s, final int maxTokens) { + return Iterables.limit(Splitter.on(" ").omitEmptyStrings().trimResults().split(s), maxTokens); + } + + public String normalizePid(String pid) { + return pid.toLowerCase().replaceAll(DOI_PREFIX, ""); + } + + // get the list of keywords into the input string + public Set getKeywords(String s1, Map translationMap, int windowSize) { + + String s = s1; + + List tokens = Arrays.asList(s.toLowerCase().split(" ")); + + Set codes = new HashSet<>(); + + if (tokens.size() < windowSize) + windowSize = tokens.size(); + + int length = windowSize; + + while (length != 0) { + + for (int i = 0; i <= tokens.size() - length; i++) { + String candidate = concat(tokens.subList(i, i + length)); + if (translationMap.containsKey(candidate)) { + codes.add(candidate); + s = s.replace(candidate, "").trim(); + } + } + + tokens = Arrays.asList(s.split(" ")); + length -= 1; + } + + return codes; + } + + public Set getCities(String s1, int windowSize) { + return getKeywords(s1, cityMap, windowSize); + } + + public static String readFromClasspath(final String filename, final Class clazz) { + final StringWriter sw = new StringWriter(); + try { + IOUtils.copy(clazz.getResourceAsStream(filename), sw, StandardCharsets.UTF_8); + return sw.toString(); + } catch (final IOException e) { + throw new RuntimeException("cannot load resource from classpath: " + filename); + } + } } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/config/Config.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/config/Config.java index 6b44f4ebd..0623b468f 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/config/Config.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/config/Config.java @@ -1,3 +1,4 @@ + package eu.dnetlib.pace.config; import java.util.List; @@ -50,7 +51,6 @@ public interface Config { */ public Map> blacklists(); - /** * Translation map. * diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java index a377b087f..ee24ff476 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java @@ -1,16 +1,5 @@ -package eu.dnetlib.pace.config; -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.common.collect.Maps; -import eu.dnetlib.pace.model.ClusteringDef; -import eu.dnetlib.pace.model.FieldDef; -import eu.dnetlib.pace.util.PaceException; -import org.antlr.stringtemplate.StringTemplate; -import org.apache.commons.io.IOUtils; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; +package eu.dnetlib.pace.config; import java.io.IOException; import java.io.Serializable; @@ -22,9 +11,20 @@ import java.util.Map.Entry; import java.util.regex.Pattern; import java.util.stream.Collectors; +import org.antlr.stringtemplate.StringTemplate; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.collect.Maps; + +import eu.dnetlib.pace.model.ClusteringDef; +import eu.dnetlib.pace.model.FieldDef; import eu.dnetlib.pace.tree.support.TreeNodeDef; - +import eu.dnetlib.pace.util.PaceException; public class DedupConfig implements Config, Serializable { @@ -56,7 +56,8 @@ public class DedupConfig implements Config, Serializable { defaults.put("idPath", "$.id"); } - public DedupConfig() {} + public DedupConfig() { + } public static DedupConfig load(final String json) { @@ -66,10 +67,21 @@ public class DedupConfig implements Config, Serializable { config.getPace().initModel(); config.getPace().initTranslationMap(); - config.blacklists = config.getPace().getBlacklists().entrySet() - .stream() - .collect(Collectors.toMap(e -> e.getKey(), - e ->e.getValue().stream().filter(s -> !StringUtils.isBlank(s)).map(Pattern::compile).collect(Collectors.toList()) )); + config.blacklists = config + .getPace() + .getBlacklists() + .entrySet() + .stream() + .collect( + Collectors + .toMap( + e -> e.getKey(), + e -> e + .getValue() + .stream() + .filter(s -> !StringUtils.isBlank(s)) + .map(Pattern::compile) + .collect(Collectors.toList()))); return config; } catch (IOException e) { @@ -131,7 +143,7 @@ public class DedupConfig implements Config, Serializable { } @Override - public Map decisionTree(){ + public Map decisionTree() { return getPace().getDecisionTree(); } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java index 5ae2edfb0..b4afad9c8 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java @@ -1,19 +1,20 @@ + package eu.dnetlib.pace.config; +import java.io.Serializable; +import java.util.List; +import java.util.Map; import com.fasterxml.jackson.annotation.JsonIgnore; import com.google.common.collect.Maps; import com.ibm.icu.text.Transliterator; + import eu.dnetlib.pace.common.AbstractPaceFunctions; import eu.dnetlib.pace.model.ClusteringDef; import eu.dnetlib.pace.model.FieldDef; import eu.dnetlib.pace.tree.support.TreeNodeDef; import eu.dnetlib.pace.util.PaceResolver; -import java.io.Serializable; -import java.util.List; -import java.util.Map; - public class PaceConfig extends AbstractPaceFunctions implements Serializable { private List model; @@ -33,7 +34,8 @@ public class PaceConfig extends AbstractPaceFunctions implements Serializable { @JsonIgnore public static PaceResolver resolver = new PaceResolver(); - public PaceConfig() {} + public PaceConfig() { + } public void initModel() { modelMap = Maps.newHashMap(); @@ -42,20 +44,21 @@ public class PaceConfig extends AbstractPaceFunctions implements Serializable { } } - public void initTranslationMap(){ + public void initTranslationMap() { translationMap = Maps.newHashMap(); Transliterator transliterator = Transliterator.getInstance("Any-Eng"); for (String key : synonyms.keySet()) { - for (String term : synonyms.get(key)){ - translationMap.put( + for (String term : synonyms.get(key)) { + translationMap + .put( fixAliases(transliterator.transliterate(term.toLowerCase())), - key); + key); } } } - public Map translationMap(){ + public Map translationMap() { return translationMap; } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/config/Type.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/config/Type.java index 20981c427..9f3323edc 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/config/Type.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/config/Type.java @@ -1,3 +1,4 @@ + package eu.dnetlib.pace.config; public enum Type { diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/config/WfConfig.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/config/WfConfig.java index 78fc18a13..8dea04232 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/config/WfConfig.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/config/WfConfig.java @@ -1,10 +1,5 @@ -package eu.dnetlib.pace.config; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.common.collect.Lists; -import com.google.common.collect.Sets; -import eu.dnetlib.pace.util.PaceException; -import org.apache.commons.lang3.StringUtils; +package eu.dnetlib.pace.config; import java.io.IOException; import java.io.Serializable; @@ -12,6 +7,13 @@ import java.util.HashSet; import java.util.List; import java.util.Set; +import org.apache.commons.lang3.StringUtils; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; + +import eu.dnetlib.pace.util.PaceException; public class WfConfig implements Serializable { @@ -76,7 +78,6 @@ public class WfConfig implements Serializable { /** Maximum number of allowed children. */ private int maxChildren = MAX_CHILDREN; - /** Default maximum number of iterations. */ private final static int MAX_ITERATIONS = 20; @@ -84,9 +85,10 @@ public class WfConfig implements Serializable { private int maxIterations = MAX_ITERATIONS; /** The Jquery path to retrieve the identifier */ - private String idPath = "$.id"; + private String idPath = "$.id"; - public WfConfig() {} + public WfConfig() { + } /** * Instantiates a new dedup config. @@ -114,8 +116,10 @@ public class WfConfig implements Serializable { * @param idPath * the path for the id of the entity */ - public WfConfig(final String entityType, final String orderField, final List rootBuilder, final String dedupRun, - final Set skipList, final int queueMaxSize, final int groupMaxSize, final int slidingWindowSize, final boolean includeChildren, final int maxIterations, final String idPath) { + public WfConfig(final String entityType, final String orderField, final List rootBuilder, + final String dedupRun, + final Set skipList, final int queueMaxSize, final int groupMaxSize, final int slidingWindowSize, + final boolean includeChildren, final int maxIterations, final String idPath) { super(); this.entityType = entityType; this.orderField = orderField; @@ -257,7 +261,6 @@ public class WfConfig implements Serializable { this.maxChildren = maxChildren; } - public int getMaxIterations() { return maxIterations; } @@ -277,7 +280,6 @@ public class WfConfig implements Serializable { /* * (non-Javadoc) - * * @see java.lang.Object#toString() */ @Override diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/AbstractField.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/AbstractField.java index b418b75bb..c11d461ab 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/AbstractField.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/AbstractField.java @@ -1,3 +1,4 @@ + package eu.dnetlib.pace.model; import eu.dnetlib.pace.config.Type; @@ -16,7 +17,8 @@ public abstract class AbstractField implements Field { /** * Instantiates a new abstract field. */ - protected AbstractField() {} + protected AbstractField() { + } /** * Instantiates a new abstract field. @@ -33,7 +35,6 @@ public abstract class AbstractField implements Field { /* * (non-Javadoc) - * * @see eu.dnetlib.pace.model.Field#getName() */ @Override @@ -43,7 +44,6 @@ public abstract class AbstractField implements Field { /* * (non-Javadoc) - * * @see eu.dnetlib.pace.model.Field#getType() */ @Override @@ -53,7 +53,6 @@ public abstract class AbstractField implements Field { /* * (non-Javadoc) - * * @see eu.dnetlib.pace.model.Field#setName(java.lang.String) */ @Override @@ -63,7 +62,6 @@ public abstract class AbstractField implements Field { /* * (non-Javadoc) - * * @see eu.dnetlib.pace.model.Field#setType(eu.dnetlib.pace.config.Type) */ @Override diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java index c15885ecf..d9ad81d42 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java @@ -1,15 +1,16 @@ -package eu.dnetlib.pace.model; -import com.fasterxml.jackson.databind.ObjectMapper; -import eu.dnetlib.pace.clustering.ClusteringFunction; -import eu.dnetlib.pace.config.PaceConfig; -import eu.dnetlib.pace.util.PaceException; +package eu.dnetlib.pace.model; import java.io.IOException; import java.io.Serializable; import java.util.List; import java.util.Map; +import com.fasterxml.jackson.databind.ObjectMapper; + +import eu.dnetlib.pace.clustering.ClusteringFunction; +import eu.dnetlib.pace.config.PaceConfig; +import eu.dnetlib.pace.util.PaceException; public class ClusteringDef implements Serializable { @@ -19,7 +20,8 @@ public class ClusteringDef implements Serializable { private Map params; - public ClusteringDef() {} + public ClusteringDef() { + } public String getName() { return name; diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/Document.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/Document.java index fcacadd6f..d9c06d4e4 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/Document.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/Document.java @@ -1,3 +1,4 @@ + package eu.dnetlib.pace.model; import java.util.Set; diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/Field.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/Field.java index 4b7a73e31..d5712cf2f 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/Field.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/Field.java @@ -1,9 +1,10 @@ + package eu.dnetlib.pace.model; -import eu.dnetlib.pace.config.Type; - import java.io.Serializable; +import eu.dnetlib.pace.config.Type; + /** * The Interface Field. */ diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java index f7831edaa..8b123f2d5 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java @@ -1,13 +1,15 @@ + package eu.dnetlib.pace.model; +import java.io.Serializable; +import java.util.List; + import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.base.Splitter; import com.google.common.collect.Lists; -import eu.dnetlib.pace.config.Type; -import java.io.Serializable; -import java.util.List; +import eu.dnetlib.pace.config.Type; /** * The schema is composed by field definitions (FieldDef). Each field has a type, a name, and an associated compare algorithm. @@ -34,19 +36,20 @@ public class FieldDef implements Serializable { */ private int length = -1; - public FieldDef() {} + public FieldDef() { + } // def apply(s: String): Field[A] public Field apply(final Type type, final String s) { switch (type) { - case Int: - return new FieldValueImpl(type, name, Integer.parseInt(s)); - case String: - return new FieldValueImpl(type, name, s); - case List: - return new FieldListImpl(name, type); - default: - throw new IllegalArgumentException("Casting not implemented for type " + type); + case Int: + return new FieldValueImpl(type, name, Integer.parseInt(s)); + case String: + return new FieldValueImpl(type, name, s); + case List: + return new FieldListImpl(name, type); + default: + throw new IllegalArgumentException("Casting not implemented for type " + type); } } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldList.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldList.java index b1f5422b7..b47795d8b 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldList.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldList.java @@ -1,3 +1,4 @@ + package eu.dnetlib.pace.model; import java.util.List; diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldListImpl.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldListImpl.java index 635178b83..ca23a0bfc 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldListImpl.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldListImpl.java @@ -1,17 +1,19 @@ + package eu.dnetlib.pace.model; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.ListIterator; + import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.base.Function; import com.google.common.base.Joiner; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; -import eu.dnetlib.pace.config.Type; -import java.util.Collection; -import java.util.Iterator; -import java.util.List; -import java.util.ListIterator; +import eu.dnetlib.pace.config.Type; /** * The Class FieldListImpl. @@ -41,7 +43,6 @@ public class FieldListImpl extends AbstractField implements FieldList { /* * (non-Javadoc) - * * @see java.util.List#add(java.lang.Object) */ @Override @@ -51,7 +52,6 @@ public class FieldListImpl extends AbstractField implements FieldList { /* * (non-Javadoc) - * * @see java.util.List#add(int, java.lang.Object) */ @Override @@ -61,7 +61,6 @@ public class FieldListImpl extends AbstractField implements FieldList { /* * (non-Javadoc) - * * @see java.util.List#addAll(java.util.Collection) */ @Override @@ -71,7 +70,6 @@ public class FieldListImpl extends AbstractField implements FieldList { /* * (non-Javadoc) - * * @see java.util.List#addAll(int, java.util.Collection) */ @Override @@ -81,7 +79,6 @@ public class FieldListImpl extends AbstractField implements FieldList { /* * (non-Javadoc) - * * @see java.util.List#clear() */ @Override @@ -91,7 +88,6 @@ public class FieldListImpl extends AbstractField implements FieldList { /* * (non-Javadoc) - * * @see java.util.List#contains(java.lang.Object) */ @Override @@ -101,7 +97,6 @@ public class FieldListImpl extends AbstractField implements FieldList { /* * (non-Javadoc) - * * @see java.util.List#containsAll(java.util.Collection) */ @Override @@ -111,7 +106,6 @@ public class FieldListImpl extends AbstractField implements FieldList { /* * (non-Javadoc) - * * @see java.util.List#get(int) */ @Override @@ -121,7 +115,6 @@ public class FieldListImpl extends AbstractField implements FieldList { /* * (non-Javadoc) - * * @see java.util.List#indexOf(java.lang.Object) */ @Override @@ -131,7 +124,6 @@ public class FieldListImpl extends AbstractField implements FieldList { /* * (non-Javadoc) - * * @see eu.dnetlib.pace.model.Field#isEmpty() */ @Override @@ -141,7 +133,6 @@ public class FieldListImpl extends AbstractField implements FieldList { /* * (non-Javadoc) - * * @see java.lang.Iterable#iterator() */ @Override @@ -151,7 +142,6 @@ public class FieldListImpl extends AbstractField implements FieldList { /* * (non-Javadoc) - * * @see java.util.List#lastIndexOf(java.lang.Object) */ @Override @@ -161,7 +151,6 @@ public class FieldListImpl extends AbstractField implements FieldList { /* * (non-Javadoc) - * * @see java.util.List#listIterator() */ @Override @@ -171,7 +160,6 @@ public class FieldListImpl extends AbstractField implements FieldList { /* * (non-Javadoc) - * * @see java.util.List#listIterator(int) */ @Override @@ -181,7 +169,6 @@ public class FieldListImpl extends AbstractField implements FieldList { /* * (non-Javadoc) - * * @see java.util.List#remove(java.lang.Object) */ @Override @@ -191,7 +178,6 @@ public class FieldListImpl extends AbstractField implements FieldList { /* * (non-Javadoc) - * * @see java.util.List#remove(int) */ @Override @@ -201,7 +187,6 @@ public class FieldListImpl extends AbstractField implements FieldList { /* * (non-Javadoc) - * * @see java.util.List#removeAll(java.util.Collection) */ @Override @@ -211,7 +196,6 @@ public class FieldListImpl extends AbstractField implements FieldList { /* * (non-Javadoc) - * * @see java.util.List#retainAll(java.util.Collection) */ @Override @@ -221,7 +205,6 @@ public class FieldListImpl extends AbstractField implements FieldList { /* * (non-Javadoc) - * * @see java.util.List#set(int, java.lang.Object) */ @Override @@ -231,7 +214,6 @@ public class FieldListImpl extends AbstractField implements FieldList { /* * (non-Javadoc) - * * @see java.util.List#size() */ @Override @@ -241,7 +223,6 @@ public class FieldListImpl extends AbstractField implements FieldList { /* * (non-Javadoc) - * * @see java.util.List#subList(int, int) */ @Override @@ -251,7 +232,6 @@ public class FieldListImpl extends AbstractField implements FieldList { /* * (non-Javadoc) - * * @see java.util.List#toArray() */ @Override @@ -261,7 +241,6 @@ public class FieldListImpl extends AbstractField implements FieldList { /* * (non-Javadoc) - * * @see java.util.List#toArray(java.lang.Object[]) */ @Override @@ -271,33 +250,31 @@ public class FieldListImpl extends AbstractField implements FieldList { /* * (non-Javadoc) - * * @see eu.dnetlib.pace.model.Field#stringValue() */ @Override public String stringValue() { switch (getType()) { - case List: - case Int: - case String: - return Joiner.on(" ").join(stringList()); - case JSON: - String json; - try { - json = new ObjectMapper().writeValueAsString(this); - } catch (JsonProcessingException e) { - json = null; - } - return json; - default: - throw new IllegalArgumentException("Unknown type: " + getType().toString()); + case List: + case Int: + case String: + return Joiner.on(" ").join(stringList()); + case JSON: + String json; + try { + json = new ObjectMapper().writeValueAsString(this); + } catch (JsonProcessingException e) { + json = null; + } + return json; + default: + throw new IllegalArgumentException("Unknown type: " + getType().toString()); } } /* * (non-Javadoc) - * * @see eu.dnetlib.pace.model.FieldList#stringList() */ @Override @@ -317,10 +294,10 @@ public class FieldListImpl extends AbstractField implements FieldList { @Override public double[] doubleArray() { - return Lists.newArrayList(Iterables.transform(fields, getDouble())).stream().mapToDouble(d-> d).toArray(); + return Lists.newArrayList(Iterables.transform(fields, getDouble())).stream().mapToDouble(d -> d).toArray(); } - private Function getDouble() { + private Function getDouble() { return new Function() { @Override diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldValue.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldValue.java index ebe474363..b20f21a5c 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldValue.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldValue.java @@ -1,3 +1,4 @@ + package eu.dnetlib.pace.model; /** diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldValueImpl.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldValueImpl.java index a235315d9..eff54abfb 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldValueImpl.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldValueImpl.java @@ -1,3 +1,4 @@ + package eu.dnetlib.pace.model; import java.net.MalformedURLException; @@ -6,9 +7,10 @@ import java.util.Collections; import java.util.Iterator; import java.util.List; -import eu.dnetlib.pace.config.Type; import org.apache.commons.lang3.StringUtils; +import eu.dnetlib.pace.config.Type; + /** * The Class FieldValueImpl. */ @@ -20,7 +22,8 @@ public class FieldValueImpl extends AbstractField implements FieldValue { /** * Instantiates a new field value impl. */ - public FieldValueImpl() {} + public FieldValueImpl() { + } /** * Instantiates a new field value impl. @@ -39,17 +42,17 @@ public class FieldValueImpl extends AbstractField implements FieldValue { /* * (non-Javadoc) - * * @see eu.dnetlib.pace.model.Field#isEmpty() */ @Override public boolean isEmpty() { - if (value == null) return false; + if (value == null) + return false; switch (type) { case String: case JSON: - return value.toString().isEmpty(); + return value.toString().isEmpty(); case List: try { List list = (List) value; @@ -61,9 +64,9 @@ public class FieldValueImpl extends AbstractField implements FieldValue { String str = value.toString(); return StringUtils.isBlank(str) || !isValidURL(str); case DoubleArray: - return doubleArrayValue().length==0; - default: - return true; + return doubleArrayValue().length == 0; + default: + return true; } } @@ -78,7 +81,6 @@ public class FieldValueImpl extends AbstractField implements FieldValue { /* * (non-Javadoc) - * * @see eu.dnetlib.pace.model.FieldValue#getValue() */ @Override @@ -88,7 +90,6 @@ public class FieldValueImpl extends AbstractField implements FieldValue { /* * (non-Javadoc) - * * @see eu.dnetlib.pace.model.FieldValue#setValue(java.lang.Object) */ @Override @@ -98,7 +99,6 @@ public class FieldValueImpl extends AbstractField implements FieldValue { /* * (non-Javadoc) - * * @see eu.dnetlib.pace.model.Field#stringValue() */ @Override @@ -119,12 +119,11 @@ public class FieldValueImpl extends AbstractField implements FieldValue { } public double[] doubleArrayValue() { - return (double[])getValue(); + return (double[]) getValue(); } /* * (non-Javadoc) - * * @see java.lang.Iterable#iterator() */ @Override diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/MapDocument.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/MapDocument.java index 77b7c120e..c2860ca3b 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/MapDocument.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/MapDocument.java @@ -1,3 +1,4 @@ + package eu.dnetlib.pace.model; import java.io.Serializable; @@ -57,7 +58,6 @@ public class MapDocument implements Document, Serializable { /* * (non-Javadoc) - * * @see eu.dnetlib.pace.model.document.Document#fields() */ @Override @@ -67,7 +67,6 @@ public class MapDocument implements Document, Serializable { /* * (non-Javadoc) - * * @see eu.dnetlib.pace.model.document.Document#values(java.lang.String) */ @Override @@ -77,7 +76,6 @@ public class MapDocument implements Document, Serializable { /* * (non-Javadoc) - * * @see eu.dnetlib.pace.model.document.Document#fieldNames() */ @Override @@ -87,7 +85,6 @@ public class MapDocument implements Document, Serializable { /* * (non-Javadoc) - * * @see java.lang.Object#toString() */ @Override @@ -107,7 +104,6 @@ public class MapDocument implements Document, Serializable { /* * (non-Javadoc) - * * @see eu.dnetlib.pace.model.document.Document#getIdentifier() */ @Override diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/MapDocumentComparator.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/MapDocumentComparator.java index 7217b2b59..a77dcbc0c 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/MapDocumentComparator.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/MapDocumentComparator.java @@ -1,3 +1,4 @@ + package eu.dnetlib.pace.model; import java.util.Comparator; @@ -28,18 +29,19 @@ public class MapDocumentComparator implements Comparator { /* * (non-Javadoc) - * * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) */ @Override public int compare(final Document d1, final Document d2) { - if (d1.values(comparatorField).isEmpty() || d2.values(comparatorField).isEmpty()) return 0; + if (d1.values(comparatorField).isEmpty() || d2.values(comparatorField).isEmpty()) + return 0; final String o1 = Iterables.getFirst(d1.values(comparatorField), emptyField).stringValue(); final String o2 = Iterables.getFirst(d2.values(comparatorField), emptyField).stringValue(); - if ((o1 == null) || (o2 == null)) return 0; + if ((o1 == null) || (o2 == null)) + return 0; final String to1 = NGramUtils.cleanupForOrdering(o1); final String to2 = NGramUtils.cleanupForOrdering(o2); diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/MapDocumentSerializer.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/MapDocumentSerializer.java index e5b3522df..d71f780ad 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/MapDocumentSerializer.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/MapDocumentSerializer.java @@ -1,3 +1,4 @@ + package eu.dnetlib.pace.model; import java.lang.reflect.Type; @@ -33,7 +34,8 @@ public class MapDocumentSerializer implements InstanceCreator { gson.registerTypeAdapter(Field.class, new JsonDeserializer() { @Override - public Field deserialize(final JsonElement json, final Type typeOfT, final JsonDeserializationContext context) throws JsonParseException { + public Field deserialize(final JsonElement json, final Type typeOfT, + final JsonDeserializationContext context) throws JsonParseException { final FieldListImpl fl = new FieldListImpl(); if (json.isJsonObject()) { diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/Person.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/Person.java index 543b1bdfe..96120cf4d 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/Person.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/Person.java @@ -1,3 +1,4 @@ + package eu.dnetlib.pace.model; import java.nio.charset.Charset; @@ -43,7 +44,7 @@ public class Person { // s = s.replaceAll("[\\W&&[^,-]]", ""); } - if (s.contains(",")) { //if the name contains a comma it is easy derivable the name and the surname + if (s.contains(",")) { // if the name contains a comma it is easy derivable the name and the surname final String[] arr = s.split(","); if (arr.length == 1) { fullname = splitTerms(arr[0]); diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/PersonComparatorUtils.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/PersonComparatorUtils.java index a900a6082..1f8aab4bf 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/PersonComparatorUtils.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/PersonComparatorUtils.java @@ -1,3 +1,4 @@ + package eu.dnetlib.pace.model; import java.util.ArrayList; @@ -57,7 +58,7 @@ public class PersonComparatorUtils { private static boolean verifyNames(List list1, List list2) { return verifySimilarity(extractExtendedNames(list1), extractExtendedNames(list2)) - && verifySimilarity(extractInitials(list1), extractInitials(list2)); + && verifySimilarity(extractInitials(list1), extractInitials(list2)); } private static boolean verifySurnames(List list1, List list2) { @@ -76,7 +77,7 @@ public class PersonComparatorUtils { Collections.sort(list1); Collections.sort(list2); return verifySimilarity(extractExtendedNames(list1), extractExtendedNames(list2)) - && verifySimilarity(extractInitials(list1), extractInitials(list2)); + && verifySimilarity(extractInitials(list1), extractInitials(list2)); } private static List extractExtendedNames(List list) { @@ -107,7 +108,7 @@ public class PersonComparatorUtils { for (String s : list1) { int curr = list2.indexOf(s); if (curr > pos) { - list2.set(curr, "*"); // I invalidate the found element, example: "amm - amm" + list2.set(curr, "*"); // I invalidate the found element, example: "amm - amm" pos = curr; } else { return false; diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/AlwaysMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/AlwaysMatch.java index 2fb8eb97c..f53655a8e 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/AlwaysMatch.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/AlwaysMatch.java @@ -1,42 +1,43 @@ + package eu.dnetlib.pace.tree; +import java.util.Map; + import com.wcohen.ss.AbstractStringDistance; + import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.tree.support.AbstractComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; -import java.util.Map; - @ComparatorClass("alwaysMatch") public class AlwaysMatch extends AbstractComparator { - public AlwaysMatch(final Map params){ - super(params, new com.wcohen.ss.JaroWinkler()); - } + public AlwaysMatch(final Map params) { + super(params, new com.wcohen.ss.JaroWinkler()); + } - public AlwaysMatch(final double weight) { - super(weight, new com.wcohen.ss.JaroWinkler()); - } + public AlwaysMatch(final double weight) { + super(weight, new com.wcohen.ss.JaroWinkler()); + } - protected AlwaysMatch(final double weight, final AbstractStringDistance ssalgo) { - super(weight, ssalgo); - } + protected AlwaysMatch(final double weight, final AbstractStringDistance ssalgo) { + super(weight, ssalgo); + } - @Override - public double compare(final Field a, final Field b, final Config conf) { - return 1.0; - } + @Override + public double compare(final Field a, final Field b, final Config conf) { + return 1.0; + } - @Override - public double getWeight() { - return super.weight; - } + @Override + public double getWeight() { + return super.weight; + } - @Override - protected double normalize(final double d) { - return d; - } + @Override + protected double normalize(final double d) { + return d; + } } - diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/AuthorsMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/AuthorsMatch.java index 33f86d85d..047e121e3 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/AuthorsMatch.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/AuthorsMatch.java @@ -1,13 +1,5 @@ -package eu.dnetlib.pace.tree; -import com.google.common.collect.Iterables; -import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.model.FieldList; -import eu.dnetlib.pace.model.Person; -import eu.dnetlib.pace.tree.support.AbstractComparator; -import eu.dnetlib.pace.tree.support.ComparatorClass; -import com.wcohen.ss.AbstractStringDistance; +package eu.dnetlib.pace.tree; import java.util.Comparator; import java.util.List; @@ -16,139 +8,164 @@ import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; +import com.google.common.collect.Iterables; +import com.wcohen.ss.AbstractStringDistance; + +import eu.dnetlib.pace.config.Config; +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.FieldList; +import eu.dnetlib.pace.model.Person; +import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.ComparatorClass; + @ComparatorClass("authorsMatch") public class AuthorsMatch extends AbstractComparator { - Map params; + Map params; - private double SURNAME_THRESHOLD; - private double NAME_THRESHOLD; - private double FULLNAME_THRESHOLD; - private String MODE; //full or surname - private int SIZE_THRESHOLD; - private String TYPE; //count or percentage - private int common; + private double SURNAME_THRESHOLD; + private double NAME_THRESHOLD; + private double FULLNAME_THRESHOLD; + private String MODE; // full or surname + private int SIZE_THRESHOLD; + private String TYPE; // count or percentage + private int common; - public AuthorsMatch(Map params){ - super(params, new com.wcohen.ss.JaroWinkler()); - this.params = params; + public AuthorsMatch(Map params) { + super(params, new com.wcohen.ss.JaroWinkler()); + this.params = params; - MODE = params.getOrDefault("mode", "full"); - SURNAME_THRESHOLD = Double.parseDouble(params.getOrDefault("surname_th", "0.95")); - NAME_THRESHOLD = Double.parseDouble(params.getOrDefault("name_th", "0.95")); - FULLNAME_THRESHOLD = Double.parseDouble(params.getOrDefault("fullname_th", "0.9")); - SIZE_THRESHOLD = Integer.parseInt(params.getOrDefault("size_th", "20")); - TYPE = params.getOrDefault("type", "percentage"); - common = 0; - } + MODE = params.getOrDefault("mode", "full"); + SURNAME_THRESHOLD = Double.parseDouble(params.getOrDefault("surname_th", "0.95")); + NAME_THRESHOLD = Double.parseDouble(params.getOrDefault("name_th", "0.95")); + FULLNAME_THRESHOLD = Double.parseDouble(params.getOrDefault("fullname_th", "0.9")); + SIZE_THRESHOLD = Integer.parseInt(params.getOrDefault("size_th", "20")); + TYPE = params.getOrDefault("type", "percentage"); + common = 0; + } - protected AuthorsMatch(double w, AbstractStringDistance ssalgo) { - super(w, ssalgo); - } + protected AuthorsMatch(double w, AbstractStringDistance ssalgo) { + super(w, ssalgo); + } - @Override - public double compare(final Field a, final Field b, final Config conf) { + @Override + public double compare(final Field a, final Field b, final Config conf) { - if (a.isEmpty() || b.isEmpty()) - return -1; + if (a.isEmpty() || b.isEmpty()) + return -1; - if (((FieldList) a).size() > SIZE_THRESHOLD || ((FieldList) b).size() > SIZE_THRESHOLD) - return 1.0; + if (((FieldList) a).size() > SIZE_THRESHOLD || ((FieldList) b).size() > SIZE_THRESHOLD) + return 1.0; - List aList = ((FieldList) a).stringList().stream().map(author -> new Person(author, false)).collect(Collectors.toList()); - List bList = ((FieldList) b).stringList().stream().map(author -> new Person(author, false)).collect(Collectors.toList()); + List aList = ((FieldList) a) + .stringList() + .stream() + .map(author -> new Person(author, false)) + .collect(Collectors.toList()); + List bList = ((FieldList) b) + .stringList() + .stream() + .map(author -> new Person(author, false)) + .collect(Collectors.toList()); - common = 0; - //compare each element of List1 with each element of List2 - for (Person p1 : aList) + common = 0; + // compare each element of List1 with each element of List2 + for (Person p1 : aList) - for (Person p2 : bList) { + for (Person p2 : bList) { - //both persons are inaccurate - if (!p1.isAccurate() && !p2.isAccurate()) { - //compare just normalized fullnames - String fullname1 = normalization(p1.getNormalisedFullname().isEmpty()? p1.getOriginal() : p1.getNormalisedFullname()); - String fullname2 = normalization(p2.getNormalisedFullname().isEmpty()? p2.getOriginal() : p2.getNormalisedFullname()); + // both persons are inaccurate + if (!p1.isAccurate() && !p2.isAccurate()) { + // compare just normalized fullnames + String fullname1 = normalization( + p1.getNormalisedFullname().isEmpty() ? p1.getOriginal() : p1.getNormalisedFullname()); + String fullname2 = normalization( + p2.getNormalisedFullname().isEmpty() ? p2.getOriginal() : p2.getNormalisedFullname()); - if (ssalgo.score(fullname1, fullname2) > FULLNAME_THRESHOLD) { - common += 1; - break; - } - } + if (ssalgo.score(fullname1, fullname2) > FULLNAME_THRESHOLD) { + common += 1; + break; + } + } - //one person is inaccurate - if (p1.isAccurate() ^ p2.isAccurate()) { - //prepare data - //data for the accurate person - String name = normalization(p1.isAccurate()? p1.getNormalisedFirstName() : p2.getNormalisedFirstName()); - String surname = normalization(p1.isAccurate()? p1.getNormalisedSurname() : p2.getNormalisedSurname()); + // one person is inaccurate + if (p1.isAccurate() ^ p2.isAccurate()) { + // prepare data + // data for the accurate person + String name = normalization( + p1.isAccurate() ? p1.getNormalisedFirstName() : p2.getNormalisedFirstName()); + String surname = normalization( + p1.isAccurate() ? p1.getNormalisedSurname() : p2.getNormalisedSurname()); - //data for the inaccurate person - String fullname = normalization( - p1.isAccurate() ? ((p2.getNormalisedFullname().isEmpty()) ? p2.getOriginal() : p2.getNormalisedFullname()) : (p1.getNormalisedFullname().isEmpty() ? p1.getOriginal() : p1.getNormalisedFullname()) - ); + // data for the inaccurate person + String fullname = normalization( + p1.isAccurate() + ? ((p2.getNormalisedFullname().isEmpty()) ? p2.getOriginal() : p2.getNormalisedFullname()) + : (p1.getNormalisedFullname().isEmpty() ? p1.getOriginal() : p1.getNormalisedFullname())); - if (fullname.contains(surname)) { - if (MODE.equals("full")) { - if (fullname.contains(name)) { - common += 1; - break; - } - } - else { //MODE equals "surname" - common += 1; - break; - } - } - } + if (fullname.contains(surname)) { + if (MODE.equals("full")) { + if (fullname.contains(name)) { + common += 1; + break; + } + } else { // MODE equals "surname" + common += 1; + break; + } + } + } - //both persons are accurate - if (p1.isAccurate() && p2.isAccurate()) { + // both persons are accurate + if (p1.isAccurate() && p2.isAccurate()) { - if (compareSurname(p1, p2)) { - if (MODE.equals("full")) { - if(compareFirstname(p1, p2)) { - common += 1; - break; - } - } - else { //MODE equals "surname" - common += 1; - break; - } - } + if (compareSurname(p1, p2)) { + if (MODE.equals("full")) { + if (compareFirstname(p1, p2)) { + common += 1; + break; + } + } else { // MODE equals "surname" + common += 1; + break; + } + } - } + } - } + } - //normalization factor to compute the score - int normFactor = aList.size() == bList.size() ? aList.size() : (aList.size() + bList.size() - common); + // normalization factor to compute the score + int normFactor = aList.size() == bList.size() ? aList.size() : (aList.size() + bList.size() - common); - if(TYPE.equals("percentage")) { - return (double) common / normFactor; - } - else { - return (double) common; - } - } + if (TYPE.equals("percentage")) { + return (double) common / normFactor; + } else { + return (double) common; + } + } - public boolean compareSurname(Person p1, Person p2) { - return ssalgo.score(normalization(p1.getNormalisedSurname()), normalization(p2.getNormalisedSurname())) > SURNAME_THRESHOLD; - } + public boolean compareSurname(Person p1, Person p2) { + return ssalgo + .score( + normalization(p1.getNormalisedSurname()), normalization(p2.getNormalisedSurname())) > SURNAME_THRESHOLD; + } - public boolean compareFirstname(Person p1, Person p2) { + public boolean compareFirstname(Person p1, Person p2) { - if(p1.getNormalisedFirstName().length()<=2 || p2.getNormalisedFirstName().length()<=2) { - if (firstLC(p1.getNormalisedFirstName()).equals(firstLC(p2.getNormalisedFirstName()))) - return true; - } + if (p1.getNormalisedFirstName().length() <= 2 || p2.getNormalisedFirstName().length() <= 2) { + if (firstLC(p1.getNormalisedFirstName()).equals(firstLC(p2.getNormalisedFirstName()))) + return true; + } - return ssalgo.score(normalization(p1.getNormalisedFirstName()), normalization(p2.getNormalisedFirstName())) > NAME_THRESHOLD; - } + return ssalgo + .score( + normalization(p1.getNormalisedFirstName()), + normalization(p2.getNormalisedFirstName())) > NAME_THRESHOLD; + } - public String normalization(String s) { - return normalize(utf8(cleanup(s))); - } + public String normalization(String s) { + return normalize(utf8(cleanup(s))); + } } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/CityMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/CityMatch.java index 8ff818e07..f3da29e8e 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/CityMatch.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/CityMatch.java @@ -1,47 +1,48 @@ + package eu.dnetlib.pace.tree; +import java.util.Map; +import java.util.Set; + import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.tree.support.AbstractComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; -import java.util.Map; -import java.util.Set; - @ComparatorClass("cityMatch") public class CityMatch extends AbstractComparator { - private Map params; + private Map params; - public CityMatch(Map params) { - super(params); - this.params = params; - } + public CityMatch(Map params) { + super(params); + this.params = params; + } - @Override - public double distance(final String a, final String b, final Config conf) { + @Override + public double distance(final String a, final String b, final Config conf) { - String ca = cleanup(a); - String cb = cleanup(b); + String ca = cleanup(a); + String cb = cleanup(b); - ca = normalize(ca); - cb = normalize(cb); + ca = normalize(ca); + cb = normalize(cb); - ca = filterAllStopWords(ca); - cb = filterAllStopWords(cb); + ca = filterAllStopWords(ca); + cb = filterAllStopWords(cb); - Set cities1 = getCities(ca, Integer.parseInt(params.getOrDefault("windowSize", "4"))); - Set cities2 = getCities(cb, Integer.parseInt(params.getOrDefault("windowSize", "4"))); + Set cities1 = getCities(ca, Integer.parseInt(params.getOrDefault("windowSize", "4"))); + Set cities2 = getCities(cb, Integer.parseInt(params.getOrDefault("windowSize", "4"))); - Set codes1 = citiesToCodes(cities1); - Set codes2 = citiesToCodes(cities2); + Set codes1 = citiesToCodes(cities1); + Set codes2 = citiesToCodes(cities2); - //if no cities are detected, the comparator gives 1.0 - if (codes1.isEmpty() && codes2.isEmpty()) - return 1.0; - else { - if (codes1.isEmpty() ^ codes2.isEmpty()) - return -1; //undefined if one of the two has no cities - return commonElementsPercentage(codes1, codes2); - } - } + // if no cities are detected, the comparator gives 1.0 + if (codes1.isEmpty() && codes2.isEmpty()) + return 1.0; + else { + if (codes1.isEmpty() ^ codes2.isEmpty()) + return -1; // undefined if one of the two has no cities + return commonElementsPercentage(codes1, codes2); + } + } } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/CosineSimilarity.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/CosineSimilarity.java index 5d441771e..82d84794f 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/CosineSimilarity.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/CosineSimilarity.java @@ -1,5 +1,11 @@ + package eu.dnetlib.pace.tree; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.model.FieldList; @@ -8,46 +14,40 @@ import eu.dnetlib.pace.model.Person; import eu.dnetlib.pace.tree.support.AbstractComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - @ComparatorClass("cosineSimilarity") public class CosineSimilarity extends AbstractComparator { - Map params; + Map params; - public CosineSimilarity(Map params) { - super(params); - } + public CosineSimilarity(Map params) { + super(params); + } - @Override - public double compare(final Field a, final Field b, final Config conf) { + @Override + public double compare(final Field a, final Field b, final Config conf) { - if (a.isEmpty() || b.isEmpty()) - return -1; + if (a.isEmpty() || b.isEmpty()) + return -1; - double[] aVector = ((FieldValueImpl) a).doubleArrayValue(); - double[] bVector = ((FieldValueImpl) b).doubleArrayValue(); + double[] aVector = ((FieldValueImpl) a).doubleArrayValue(); + double[] bVector = ((FieldValueImpl) b).doubleArrayValue(); - return cosineSimilarity(aVector, bVector); - } + return cosineSimilarity(aVector, bVector); + } - double cosineSimilarity(double[] a, double[] b) { - double dotProduct = 0; - double normASum = 0; - double normBSum = 0; + double cosineSimilarity(double[] a, double[] b) { + double dotProduct = 0; + double normASum = 0; + double normBSum = 0; - for(int i = 0; i < a.length; i ++) { - dotProduct += a[i] * b[i]; - normASum += a[i] * a[i]; - normBSum += b[i] * b[i]; - } - - double eucledianDist = Math.sqrt(normASum) * Math.sqrt(normBSum); - return dotProduct / eucledianDist; - } + for (int i = 0; i < a.length; i++) { + dotProduct += a[i] * b[i]; + normASum += a[i] * a[i]; + normBSum += b[i] * b[i]; + } + double eucledianDist = Math.sqrt(normASum) * Math.sqrt(normBSum); + return dotProduct / eucledianDist; + } } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/DoiExactMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/DoiExactMatch.java index 24a94c8cd..24f3dfc02 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/DoiExactMatch.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/DoiExactMatch.java @@ -1,3 +1,4 @@ + package eu.dnetlib.pace.tree; import java.util.Map; @@ -13,15 +14,15 @@ import eu.dnetlib.pace.tree.support.ComparatorClass; @ComparatorClass("doiExactMatch") public class DoiExactMatch extends ExactMatchIgnoreCase { - public final String PREFIX = "(http:\\/\\/dx\\.doi\\.org\\/)|(doi:)"; + public final String PREFIX = "(http:\\/\\/dx\\.doi\\.org\\/)|(doi:)"; - public DoiExactMatch(final Map params) { - super(params); - } + public DoiExactMatch(final Map params) { + super(params); + } - @Override - protected String getValue(final Field f) { - return super.getValue(f).replaceAll(PREFIX, ""); - } + @Override + protected String getValue(final Field f) { + return super.getValue(f).replaceAll(PREFIX, ""); + } } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/DomainExactMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/DomainExactMatch.java index 958028e8a..efafe6573 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/DomainExactMatch.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/DomainExactMatch.java @@ -1,30 +1,31 @@ -package eu.dnetlib.pace.tree; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.tree.support.ComparatorClass; +package eu.dnetlib.pace.tree; import java.net.MalformedURLException; import java.net.URL; import java.util.Map; +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.tree.support.ComparatorClass; + @ComparatorClass("domainExactMatch") public class DomainExactMatch extends ExactMatchIgnoreCase { - public DomainExactMatch(final Map params) { - super(params); - } + public DomainExactMatch(final Map params) { + super(params); + } - @Override - protected String getValue(final Field f) { + @Override + protected String getValue(final Field f) { - try { - return asUrl(super.getValue(f)).getHost(); - } catch (MalformedURLException e) { - return ""; - } - } + try { + return asUrl(super.getValue(f)).getHost(); + } catch (MalformedURLException e) { + return ""; + } + } - private URL asUrl(final String value) throws MalformedURLException { - return new URL(value); - } + private URL asUrl(final String value) throws MalformedURLException { + return new URL(value); + } } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatch.java index 21479cf3f..85ce6744d 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatch.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatch.java @@ -1,42 +1,44 @@ + package eu.dnetlib.pace.tree; +import java.util.Map; + import com.wcohen.ss.AbstractStringDistance; + import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.tree.support.AbstractComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; -import java.util.Map; - @ComparatorClass("exactMatch") public class ExactMatch extends AbstractComparator { - public ExactMatch(Map params){ - super(params, new com.wcohen.ss.JaroWinkler()); - } + public ExactMatch(Map params) { + super(params, new com.wcohen.ss.JaroWinkler()); + } - public ExactMatch(final double weight) { - super(weight, new com.wcohen.ss.JaroWinkler()); - } + public ExactMatch(final double weight) { + super(weight, new com.wcohen.ss.JaroWinkler()); + } - protected ExactMatch(final double weight, final AbstractStringDistance ssalgo) { - super(weight, ssalgo); - } + protected ExactMatch(final double weight, final AbstractStringDistance ssalgo) { + super(weight, ssalgo); + } - @Override - public double distance(final String a, final String b, final Config conf) { - if (a.isEmpty() || b.isEmpty()) { - return -1.0; //return -1 if a field is missing - } - return a.equals(b) ? 1.0 : 0; - } + @Override + public double distance(final String a, final String b, final Config conf) { + if (a.isEmpty() || b.isEmpty()) { + return -1.0; // return -1 if a field is missing + } + return a.equals(b) ? 1.0 : 0; + } - @Override - public double getWeight() { - return super.weight; - } + @Override + public double getWeight() { + return super.weight; + } - @Override - protected double normalize(final double d) { - return d; - } + @Override + protected double normalize(final double d) { + return d; + } } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatchIgnoreCase.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatchIgnoreCase.java index 89cd2719a..307f02246 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatchIgnoreCase.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatchIgnoreCase.java @@ -1,32 +1,33 @@ + package eu.dnetlib.pace.tree; +import java.util.Map; + import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.tree.support.AbstractComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; -import java.util.Map; - @ComparatorClass("exactMatchIgnoreCase") public class ExactMatchIgnoreCase extends AbstractComparator { - public ExactMatchIgnoreCase(Map params) { - super(params); - } + public ExactMatchIgnoreCase(Map params) { + super(params); + } - @Override - public double compare(Field a, Field b, final Config conf) { + @Override + public double compare(Field a, Field b, final Config conf) { - final String fa = getValue(a); - final String fb = getValue(b); + final String fa = getValue(a); + final String fb = getValue(b); - if (fa.isEmpty() || fb.isEmpty()) - return -1; + if (fa.isEmpty() || fb.isEmpty()) + return -1; - return fa.equalsIgnoreCase(fb) ? 1 : 0; - } + return fa.equalsIgnoreCase(fb) ? 1 : 0; + } - protected String getValue(final Field f) { - return getFirstValue(f); - } -} \ No newline at end of file + protected String getValue(final Field f) { + return getFirstValue(f); + } +} diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/InstanceTypeMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/InstanceTypeMatch.java index 661b17433..bdef1225d 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/InstanceTypeMatch.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/InstanceTypeMatch.java @@ -1,11 +1,5 @@ -package eu.dnetlib.pace.tree; -import com.google.common.collect.Sets; -import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.model.FieldList; -import eu.dnetlib.pace.tree.support.AbstractComparator; -import eu.dnetlib.pace.tree.support.ComparatorClass; +package eu.dnetlib.pace.tree; import java.util.HashMap; import java.util.List; @@ -13,72 +7,79 @@ import java.util.Map; import java.util.Set; import java.util.stream.Collectors; +import com.google.common.collect.Sets; + +import eu.dnetlib.pace.config.Config; +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.FieldList; +import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.ComparatorClass; + @ComparatorClass("instanceTypeMatch") public class InstanceTypeMatch extends AbstractComparator { - final Map translationMap = new HashMap<>(); + final Map translationMap = new HashMap<>(); - public InstanceTypeMatch(Map params){ - super(params); + public InstanceTypeMatch(Map params) { + super(params); - //jolly types - translationMap.put("Conference object", "*"); - translationMap.put("Other literature type", "*"); - translationMap.put("Unknown", "*"); + // jolly types + translationMap.put("Conference object", "*"); + translationMap.put("Other literature type", "*"); + translationMap.put("Unknown", "*"); - //article types - translationMap.put("Article", "Article"); - translationMap.put("Data Paper", "Article"); - translationMap.put("Software Paper", "Article"); - translationMap.put("Preprint", "Article"); + // article types + translationMap.put("Article", "Article"); + translationMap.put("Data Paper", "Article"); + translationMap.put("Software Paper", "Article"); + translationMap.put("Preprint", "Article"); - //thesis types - translationMap.put("Thesis", "Thesis"); - translationMap.put("Master thesis", "Thesis"); - translationMap.put("Bachelor thesis", "Thesis"); - translationMap.put("Doctoral thesis", "Thesis"); - } + // thesis types + translationMap.put("Thesis", "Thesis"); + translationMap.put("Master thesis", "Thesis"); + translationMap.put("Bachelor thesis", "Thesis"); + translationMap.put("Doctoral thesis", "Thesis"); + } + @Override + public double compare(final Field a, final Field b, final Config conf) { - @Override - public double compare(final Field a, final Field b, final Config conf) { + if (a == null || b == null) { + return -1; + } - if (a == null || b == null) { - return -1; - } + final List sa = ((FieldList) a).stringList(); + final List sb = ((FieldList) b).stringList(); - final List sa = ((FieldList) a).stringList(); - final List sb = ((FieldList) b).stringList(); + if (sa.isEmpty() || sb.isEmpty()) { + return -1; + } - if (sa.isEmpty() || sb.isEmpty()) { - return -1; - } + final Set ca = sa.stream().map(this::translate).collect(Collectors.toSet()); + final Set cb = sb.stream().map(this::translate).collect(Collectors.toSet()); - final Set ca = sa.stream().map(this::translate).collect(Collectors.toSet()); - final Set cb = sb.stream().map(this::translate).collect(Collectors.toSet()); + // if at least one is a jolly type, it must produce a match + if (ca.contains("*") || cb.contains("*")) + return 1.0; - //if at least one is a jolly type, it must produce a match - if (ca.contains("*") || cb.contains("*")) - return 1.0; + int incommon = Sets.intersection(ca, cb).size(); - int incommon = Sets.intersection(ca, cb).size(); + // if at least one is in common, it must produce a match + return incommon >= 1 ? 1 : 0; + } - //if at least one is in common, it must produce a match - return incommon >= 1 ? 1 : 0; - } + public String translate(String term) { + return translationMap.getOrDefault(term, term); + } - public String translate(String term){ - return translationMap.getOrDefault(term, term); - } + @Override + public double getWeight() { + return super.weight; + } - @Override - public double getWeight() { - return super.weight; - } - - @Override - protected double normalize(final double d) { - return d; - } + @Override + protected double normalize(final double d) { + return d; + } } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinkler.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinkler.java index 9e214f6a4..7511e5ec9 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinkler.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinkler.java @@ -1,44 +1,46 @@ + package eu.dnetlib.pace.tree; +import java.util.Map; + import com.wcohen.ss.AbstractStringDistance; + import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.tree.support.AbstractComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; -import java.util.Map; - //case class JaroWinkler(w: Double) extends SecondStringDistanceAlgo(w, new com.wcohen.ss.JaroWinkler()) @ComparatorClass("jaroWinkler") public class JaroWinkler extends AbstractComparator { - public JaroWinkler(Map params){ - super(params, new com.wcohen.ss.JaroWinkler()); - } + public JaroWinkler(Map params) { + super(params, new com.wcohen.ss.JaroWinkler()); + } - public JaroWinkler(double weight) { - super(weight, new com.wcohen.ss.JaroWinkler()); - } + public JaroWinkler(double weight) { + super(weight, new com.wcohen.ss.JaroWinkler()); + } - protected JaroWinkler(double weight, AbstractStringDistance ssalgo) { - super(weight, ssalgo); - } + protected JaroWinkler(double weight, AbstractStringDistance ssalgo) { + super(weight, ssalgo); + } - @Override - public double distance(String a, String b, final Config conf) { - String ca = cleanup(a); - String cb = cleanup(b); + @Override + public double distance(String a, String b, final Config conf) { + String ca = cleanup(a); + String cb = cleanup(b); - return normalize(ssalgo.score(ca, cb)); - } + return normalize(ssalgo.score(ca, cb)); + } - @Override - public double getWeight() { - return super.weight; - } + @Override + public double getWeight() { + return super.weight; + } - @Override - protected double normalize(double d) { - return d; - } + @Override + protected double normalize(double d) { + return d; + } -} \ No newline at end of file +} diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerNormalizedName.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerNormalizedName.java index d8e416df9..4f4c68e47 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerNormalizedName.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerNormalizedName.java @@ -1,72 +1,74 @@ + package eu.dnetlib.pace.tree; -import com.wcohen.ss.AbstractStringDistance; -import eu.dnetlib.pace.tree.support.AbstractComparator; -import eu.dnetlib.pace.tree.support.ComparatorClass; - -import eu.dnetlib.pace.config.Config; - - import java.util.Map; import java.util.Set; +import com.wcohen.ss.AbstractStringDistance; + +import eu.dnetlib.pace.config.Config; +import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.ComparatorClass; + @ComparatorClass("jaroWinklerNormalizedName") public class JaroWinklerNormalizedName extends AbstractComparator { - private Map params; + private Map params; - public JaroWinklerNormalizedName(Map params){ - super(params, new com.wcohen.ss.JaroWinkler()); - this.params = params; - } + public JaroWinklerNormalizedName(Map params) { + super(params, new com.wcohen.ss.JaroWinkler()); + this.params = params; + } - public JaroWinklerNormalizedName(double weight) { - super(weight, new com.wcohen.ss.JaroWinkler()); - } + public JaroWinklerNormalizedName(double weight) { + super(weight, new com.wcohen.ss.JaroWinkler()); + } - protected JaroWinklerNormalizedName(double weight, AbstractStringDistance ssalgo) { - super(weight, ssalgo); - } + protected JaroWinklerNormalizedName(double weight, AbstractStringDistance ssalgo) { + super(weight, ssalgo); + } - @Override - public double distance(String a, String b, final Config conf) { - String ca = cleanup(a); - String cb = cleanup(b); + @Override + public double distance(String a, String b, final Config conf) { + String ca = cleanup(a); + String cb = cleanup(b); - ca = normalize(ca); - cb = normalize(cb); + ca = normalize(ca); + cb = normalize(cb); - ca = filterAllStopWords(ca); - cb = filterAllStopWords(cb); + ca = filterAllStopWords(ca); + cb = filterAllStopWords(cb); - Set keywords1 = getKeywords(ca, conf.translationMap(), Integer.parseInt(params.getOrDefault("windowSize", "4"))); - Set keywords2 = getKeywords(cb, conf.translationMap(), Integer.parseInt(params.getOrDefault("windowSize", "4"))); + Set keywords1 = getKeywords( + ca, conf.translationMap(), Integer.parseInt(params.getOrDefault("windowSize", "4"))); + Set keywords2 = getKeywords( + cb, conf.translationMap(), Integer.parseInt(params.getOrDefault("windowSize", "4"))); - Set cities1 = getCities(ca, Integer.parseInt(params.getOrDefault("windowSize", "4"))); - Set cities2 = getCities(cb, Integer.parseInt(params.getOrDefault("windowSize", "4"))); + Set cities1 = getCities(ca, Integer.parseInt(params.getOrDefault("windowSize", "4"))); + Set cities2 = getCities(cb, Integer.parseInt(params.getOrDefault("windowSize", "4"))); - ca = removeKeywords(ca, keywords1); - ca = removeKeywords(ca, cities1); - cb = removeKeywords(cb, keywords2); - cb = removeKeywords(cb, cities2); + ca = removeKeywords(ca, keywords1); + ca = removeKeywords(ca, cities1); + cb = removeKeywords(cb, keywords2); + cb = removeKeywords(cb, cities2); - ca = ca.replaceAll("[ ]{2,}", " "); - cb = cb.replaceAll("[ ]{2,}", " "); + ca = ca.replaceAll("[ ]{2,}", " "); + cb = cb.replaceAll("[ ]{2,}", " "); - if (ca.isEmpty() && cb.isEmpty()) - return 1.0; - else - return normalize(ssalgo.score(ca,cb)); - } + if (ca.isEmpty() && cb.isEmpty()) + return 1.0; + else + return normalize(ssalgo.score(ca, cb)); + } - @Override - public double getWeight() { - return super.weight; - } + @Override + public double getWeight() { + return super.weight; + } - @Override - protected double normalize(double d) { - return d; - } + @Override + protected double normalize(double d) { + return d; + } } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerTitle.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerTitle.java index 38ed437de..d97d8d061 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerTitle.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerTitle.java @@ -1,18 +1,19 @@ + package eu.dnetlib.pace.tree; +import java.util.Map; + import com.wcohen.ss.AbstractStringDistance; -import eu.dnetlib.pace.tree.support.AbstractComparator; -import eu.dnetlib.pace.tree.support.ComparatorClass; import eu.dnetlib.pace.config.Config; - -import java.util.Map; +import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.ComparatorClass; //case class JaroWinkler(w: Double) extends SecondStringDistanceAlgo(w, new com.wcohen.ss.JaroWinkler()) @ComparatorClass("jaroWinklerTitle") public class JaroWinklerTitle extends AbstractComparator { - public JaroWinklerTitle(Map params){ + public JaroWinklerTitle(Map params) { super(params, new com.wcohen.ss.JaroWinkler()); } @@ -23,7 +24,7 @@ public class JaroWinklerTitle extends AbstractComparator { protected JaroWinklerTitle(double weight, AbstractStringDistance ssalgo) { super(weight, ssalgo); } - + @Override public double distance(String a, String b, final Config conf) { String ca = cleanup(a); @@ -31,7 +32,7 @@ public class JaroWinklerTitle extends AbstractComparator { boolean check = checkNumbers(ca, cb); return check ? 0.5 : normalize(ssalgo.score(ca, cb)); - } + } @Override public double getWeight() { diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/JsonListMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/JsonListMatch.java index eb831b094..e5c69a852 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/JsonListMatch.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/JsonListMatch.java @@ -1,77 +1,81 @@ -package eu.dnetlib.pace.tree; -import com.google.common.collect.Sets; -import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.model.FieldList; -import eu.dnetlib.pace.tree.support.AbstractComparator; -import eu.dnetlib.pace.tree.support.ComparatorClass; -import eu.dnetlib.pace.util.MapDocumentUtil; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; +package eu.dnetlib.pace.tree; import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import com.google.common.collect.Sets; + +import eu.dnetlib.pace.config.Config; +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.FieldList; +import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.ComparatorClass; +import eu.dnetlib.pace.util.MapDocumentUtil; + @ComparatorClass("jsonListMatch") public class JsonListMatch extends AbstractComparator { - private static final Log log = LogFactory.getLog(JsonListMatch.class); - private Map params; + private static final Log log = LogFactory.getLog(JsonListMatch.class); + private Map params; - private String MODE; //"percentage" or "count" + private String MODE; // "percentage" or "count" - public JsonListMatch(final Map params) { - super(params); - this.params = params; + public JsonListMatch(final Map params) { + super(params); + this.params = params; - MODE = params.getOrDefault("mode", "percentage"); - } + MODE = params.getOrDefault("mode", "percentage"); + } - @Override - public double compare(final Field a, final Field b, final Config conf) { + @Override + public double compare(final Field a, final Field b, final Config conf) { - final List sa = ((FieldList) a).stringList(); - final List sb = ((FieldList) b).stringList(); + final List sa = ((FieldList) a).stringList(); + final List sb = ((FieldList) b).stringList(); - if (sa.isEmpty() || sb.isEmpty()) { - return -1; - } + if (sa.isEmpty() || sb.isEmpty()) { + return -1; + } - final Set ca = sa.stream().map(this::toComparableString).collect(Collectors.toSet()); - final Set cb = sb.stream().map(this::toComparableString).collect(Collectors.toSet()); + final Set ca = sa.stream().map(this::toComparableString).collect(Collectors.toSet()); + final Set cb = sb.stream().map(this::toComparableString).collect(Collectors.toSet()); - int incommon = Sets.intersection(ca, cb).size(); - int simDiff = Sets.symmetricDifference(ca, cb).size(); + int incommon = Sets.intersection(ca, cb).size(); + int simDiff = Sets.symmetricDifference(ca, cb).size(); - if (incommon + simDiff == 0) { - return 0.0; - } + if (incommon + simDiff == 0) { + return 0.0; + } - if (MODE.equals("percentage")) - return (double)incommon / (incommon + simDiff); - else - return incommon; + if (MODE.equals("percentage")) + return (double) incommon / (incommon + simDiff); + else + return incommon; - } + } - //converts every json into a comparable string basing on parameters - private String toComparableString(String json){ + // converts every json into a comparable string basing on parameters + private String toComparableString(String json) { - StringBuilder st = new StringBuilder(); //to build the string used for comparisons basing on the jpath into parameters + StringBuilder st = new StringBuilder(); // to build the string used for comparisons basing on the jpath into + // parameters - //for each path in the param list - for (String key: params.keySet().stream().filter(k -> k.contains("jpath")).collect(Collectors.toList())) { - String path = params.get(key); - String value = MapDocumentUtil.getJPathString(path, json); - if (value == null || value.isEmpty()) - value = ""; - st.append( value + "::"); - } + // for each path in the param list + for (String key : params.keySet().stream().filter(k -> k.contains("jpath")).collect(Collectors.toList())) { + String path = params.get(key); + String value = MapDocumentUtil.getJPathString(path, json); + if (value == null || value.isEmpty()) + value = ""; + st.append(value + "::"); + } - st.setLength(st.length()-2); - return st.toString(); - } + st.setLength(st.length() - 2); + return st.toString(); + } } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/KeywordMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/KeywordMatch.java index 7d275425d..0d69e5177 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/KeywordMatch.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/KeywordMatch.java @@ -1,47 +1,50 @@ + package eu.dnetlib.pace.tree; +import java.util.Map; +import java.util.Set; + import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.tree.support.AbstractComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; -import java.util.Map; -import java.util.Set; - @ComparatorClass("keywordMatch") public class KeywordMatch extends AbstractComparator { - Map params; + Map params; - public KeywordMatch(Map params) { - super(params); - this.params = params; - } + public KeywordMatch(Map params) { + super(params); + this.params = params; + } - @Override - public double distance(final String a, final String b, final Config conf) { + @Override + public double distance(final String a, final String b, final Config conf) { - String ca = cleanup(a); - String cb = cleanup(b); + String ca = cleanup(a); + String cb = cleanup(b); - ca = normalize(ca); - cb = normalize(cb); + ca = normalize(ca); + cb = normalize(cb); - ca = filterAllStopWords(ca); - cb = filterAllStopWords(cb); + ca = filterAllStopWords(ca); + cb = filterAllStopWords(cb); - Set keywords1 = getKeywords(ca, conf.translationMap(), Integer.parseInt(params.getOrDefault("windowSize", "4"))); - Set keywords2 = getKeywords(cb, conf.translationMap(), Integer.parseInt(params.getOrDefault("windowSize", "4"))); + Set keywords1 = getKeywords( + ca, conf.translationMap(), Integer.parseInt(params.getOrDefault("windowSize", "4"))); + Set keywords2 = getKeywords( + cb, conf.translationMap(), Integer.parseInt(params.getOrDefault("windowSize", "4"))); - Set codes1 = toCodes(keywords1, conf.translationMap()); - Set codes2 = toCodes(keywords2, conf.translationMap()); + Set codes1 = toCodes(keywords1, conf.translationMap()); + Set codes2 = toCodes(keywords2, conf.translationMap()); - //if no cities are detected, the comparator gives 1.0 - if (codes1.isEmpty() && codes2.isEmpty()) - return 1.0; - else { - if (codes1.isEmpty() ^ codes2.isEmpty()) - return -1.0; //undefined if one of the two has no keywords - return commonElementsPercentage(codes1, codes2); - } - } + // if no cities are detected, the comparator gives 1.0 + if (codes1.isEmpty() && codes2.isEmpty()) + return 1.0; + else { + if (codes1.isEmpty() ^ codes2.isEmpty()) + return -1.0; // undefined if one of the two has no keywords + return commonElementsPercentage(codes1, codes2); + } + } } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinkler.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinkler.java index f9e01356d..d483049d7 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinkler.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinkler.java @@ -1,15 +1,17 @@ + package eu.dnetlib.pace.tree; +import java.util.Map; + import com.wcohen.ss.AbstractStringDistance; + import eu.dnetlib.pace.tree.support.AbstractComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; -import java.util.Map; - @ComparatorClass("level2JaroWinkler") public class Level2JaroWinkler extends AbstractComparator { - public Level2JaroWinkler(Map params){ + public Level2JaroWinkler(Map params) { super(params, new com.wcohen.ss.Level2JaroWinkler()); } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinklerTitle.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinklerTitle.java index 29f99e4ae..a87a6079a 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinklerTitle.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinklerTitle.java @@ -1,16 +1,18 @@ + package eu.dnetlib.pace.tree; +import java.util.Map; + import com.wcohen.ss.AbstractStringDistance; + +import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.tree.support.AbstractComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; -import eu.dnetlib.pace.config.Config; - -import java.util.Map; @ComparatorClass("level2JaroWinklerTitle") public class Level2JaroWinklerTitle extends AbstractComparator { - public Level2JaroWinklerTitle(Map params){ + public Level2JaroWinklerTitle(Map params) { super(params, new com.wcohen.ss.Level2JaroWinkler()); } @@ -29,7 +31,8 @@ public class Level2JaroWinklerTitle extends AbstractComparator { final boolean check = checkNumbers(ca, cb); - if (check) return 0.5; + if (check) + return 0.5; return ssalgo.score(ca, cb); } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2Levenstein.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2Levenstein.java index 73fb13c13..5ac19ee2e 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2Levenstein.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2Levenstein.java @@ -1,15 +1,17 @@ + package eu.dnetlib.pace.tree; +import java.util.Map; + import com.wcohen.ss.AbstractStringDistance; + import eu.dnetlib.pace.tree.support.AbstractComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; -import java.util.Map; - @ComparatorClass("level2Levenstein") public class Level2Levenstein extends AbstractComparator { - public Level2Levenstein(Map params){ + public Level2Levenstein(Map params) { super(params, new com.wcohen.ss.Level2Levenstein()); } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/Levenstein.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/Levenstein.java index c146e5ab1..4072f52aa 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/Levenstein.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/Levenstein.java @@ -1,15 +1,17 @@ + package eu.dnetlib.pace.tree; +import java.util.Map; + import com.wcohen.ss.AbstractStringDistance; + import eu.dnetlib.pace.tree.support.AbstractComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; -import java.util.Map; - @ComparatorClass("levenstein") public class Levenstein extends AbstractComparator { - public Levenstein(Map params){ + public Levenstein(Map params) { super(params, new com.wcohen.ss.Levenstein()); } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitle.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitle.java index fda5848df..896e93f09 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitle.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitle.java @@ -1,21 +1,23 @@ + package eu.dnetlib.pace.tree; -import com.wcohen.ss.AbstractStringDistance; -import eu.dnetlib.pace.tree.support.AbstractComparator; -import eu.dnetlib.pace.tree.support.ComparatorClass; -import eu.dnetlib.pace.config.Config; +import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import java.util.Map; +import com.wcohen.ss.AbstractStringDistance; + +import eu.dnetlib.pace.config.Config; +import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.ComparatorClass; @ComparatorClass("levensteinTitle") public class LevensteinTitle extends AbstractComparator { private static final Log log = LogFactory.getLog(LevensteinTitle.class); - public LevensteinTitle(Map params){ + public LevensteinTitle(Map params) { super(params, new com.wcohen.ss.Levenstein()); } @@ -34,7 +36,8 @@ public class LevensteinTitle extends AbstractComparator { final boolean check = checkNumbers(ca, cb); - if (check) return 0.5; + if (check) + return 0.5; return normalize(ssalgo.score(ca, cb), ca.length(), cb.length()); } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitleIgnoreVersion.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitleIgnoreVersion.java index 506760fa0..796edf49e 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitleIgnoreVersion.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitleIgnoreVersion.java @@ -1,12 +1,13 @@ + package eu.dnetlib.pace.tree; +import java.util.Map; + import com.wcohen.ss.AbstractStringDistance; + +import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.tree.support.AbstractComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; -import eu.dnetlib.pace.config.Config; - - -import java.util.Map; /** * Compared compare between two titles, ignoring version numbers. Suitable for Software entities. @@ -14,7 +15,7 @@ import java.util.Map; @ComparatorClass("levensteinTitleIgnoreVersion") public class LevensteinTitleIgnoreVersion extends AbstractComparator { - public LevensteinTitleIgnoreVersion(Map params){ + public LevensteinTitleIgnoreVersion(Map params) { super(params, new com.wcohen.ss.Levenstein()); } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/ListContainsMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/ListContainsMatch.java index 40e041f6f..8abe37d96 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/ListContainsMatch.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/ListContainsMatch.java @@ -1,17 +1,19 @@ -package eu.dnetlib.pace.tree; -import com.google.common.collect.Sets; -import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.model.FieldList; -import eu.dnetlib.pace.tree.support.AbstractComparator; -import eu.dnetlib.pace.tree.support.ComparatorClass; +package eu.dnetlib.pace.tree; import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; +import com.google.common.collect.Sets; + +import eu.dnetlib.pace.config.Config; +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.FieldList; +import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.ComparatorClass; + /** * The Class Contains match * @@ -20,55 +22,54 @@ import java.util.stream.Collectors; @ComparatorClass("listContainsMatch") public class ListContainsMatch extends AbstractComparator { - private Map params; - private boolean CASE_SENSITIVE; - private String STRING; - private String AGGREGATOR; + private Map params; + private boolean CASE_SENSITIVE; + private String STRING; + private String AGGREGATOR; - public ListContainsMatch(Map params) { - super(params); - this.params = params; + public ListContainsMatch(Map params) { + super(params); + this.params = params; - //read parameters - CASE_SENSITIVE = Boolean.parseBoolean(params.getOrDefault("caseSensitive", "false")); - STRING = params.get("string"); - AGGREGATOR = params.get("bool"); - } + // read parameters + CASE_SENSITIVE = Boolean.parseBoolean(params.getOrDefault("caseSensitive", "false")); + STRING = params.get("string"); + AGGREGATOR = params.get("bool"); + } - @Override - public double compare(final Field a, final Field b, final Config conf) { + @Override + public double compare(final Field a, final Field b, final Config conf) { - List sa = ((FieldList) a).stringList(); - List sb = ((FieldList) b).stringList(); + List sa = ((FieldList) a).stringList(); + List sb = ((FieldList) b).stringList(); - if (sa.isEmpty() || sb.isEmpty()) { - return -1; - } + if (sa.isEmpty() || sb.isEmpty()) { + return -1; + } - if (!CASE_SENSITIVE) { - sa = sa.stream().map(String::toLowerCase).collect(Collectors.toList()); - sb = sb.stream().map(String::toLowerCase).collect(Collectors.toList()); - STRING = STRING.toLowerCase(); - } + if (!CASE_SENSITIVE) { + sa = sa.stream().map(String::toLowerCase).collect(Collectors.toList()); + sb = sb.stream().map(String::toLowerCase).collect(Collectors.toList()); + STRING = STRING.toLowerCase(); + } - switch(AGGREGATOR) { - case "AND": - if(sa.contains(STRING) && sb.contains(STRING)) - return 1.0; - break; - case "OR": - if(sa.contains(STRING) || sb.contains(STRING)) - return 1.0; - break; - case "XOR": - if(sa.contains(STRING) ^ sb.contains(STRING)) - return 1.0; - break; - default: - return 0.0; - } - return 0.0; + switch (AGGREGATOR) { + case "AND": + if (sa.contains(STRING) && sb.contains(STRING)) + return 1.0; + break; + case "OR": + if (sa.contains(STRING) || sb.contains(STRING)) + return 1.0; + break; + case "XOR": + if (sa.contains(STRING) ^ sb.contains(STRING)) + return 1.0; + break; + default: + return 0.0; + } + return 0.0; - } + } } - diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/MustBeDifferent.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/MustBeDifferent.java index 64413dfff..ee4b58d9c 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/MustBeDifferent.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/MustBeDifferent.java @@ -1,16 +1,18 @@ + package eu.dnetlib.pace.tree; +import java.util.Map; + import com.wcohen.ss.AbstractStringDistance; + +import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.tree.support.AbstractComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; -import eu.dnetlib.pace.config.Config; - -import java.util.Map; @ComparatorClass("mustBeDifferent") public class MustBeDifferent extends AbstractComparator { - public MustBeDifferent(Map params){ + public MustBeDifferent(Map params) { super(params, new com.wcohen.ss.Levenstein()); } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/NullDistanceAlgo.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/NullDistanceAlgo.java index 98c2f4548..8b400122f 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/NullDistanceAlgo.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/NullDistanceAlgo.java @@ -1,12 +1,13 @@ + package eu.dnetlib.pace.tree; +import java.util.Map; + import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.tree.support.Comparator; import eu.dnetlib.pace.tree.support.ComparatorClass; -import java.util.Map; - /** * Not all fields of a document need to partecipate in the compare measure. We model those fields as having a * NullDistanceAlgo. @@ -14,7 +15,7 @@ import java.util.Map; @ComparatorClass("null") public class NullDistanceAlgo implements Comparator { - public NullDistanceAlgo(Map params){ + public NullDistanceAlgo(Map params) { } @Override diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/NumbersComparator.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/NumbersComparator.java index ac6d78403..ebe25bab4 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/NumbersComparator.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/NumbersComparator.java @@ -1,34 +1,35 @@ + package eu.dnetlib.pace.tree; +import java.util.Map; + import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.tree.support.AbstractComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; -import java.util.Map; - @ComparatorClass("numbersComparator") public class NumbersComparator extends AbstractComparator { - Map params; + Map params; - public NumbersComparator(Map params) { - super(params); - this.params = params; - } + public NumbersComparator(Map params) { + super(params); + this.params = params; + } - @Override - public double distance(String a, String b, Config conf) { + @Override + public double distance(String a, String b, Config conf) { - //extracts numbers from the field - String numbers1 = getNumbers(nfd(a)); - String numbers2 = getNumbers(nfd(b)); + // extracts numbers from the field + String numbers1 = getNumbers(nfd(a)); + String numbers2 = getNumbers(nfd(b)); - if (numbers1.isEmpty() || numbers2.isEmpty()) - return -1.0; + if (numbers1.isEmpty() || numbers2.isEmpty()) + return -1.0; - int n1 = Integer.parseInt(numbers1); - int n2 = Integer.parseInt(numbers2); + int n1 = Integer.parseInt(numbers1); + int n2 = Integer.parseInt(numbers2); - return Math.abs(n1 - n2); - } + return Math.abs(n1 - n2); + } } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/NumbersMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/NumbersMatch.java index ce60a672a..52f99d018 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/NumbersMatch.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/NumbersMatch.java @@ -1,35 +1,35 @@ + package eu.dnetlib.pace.tree; +import java.util.Map; + import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.tree.support.AbstractComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; -import java.util.Map; - @ComparatorClass("numbersMatch") public class NumbersMatch extends AbstractComparator { + public NumbersMatch(Map params) { + super(params); + } - public NumbersMatch(Map params) { - super(params); - } + @Override + public double distance(String a, String b, Config conf) { - @Override - public double distance(String a, String b, Config conf) { + // extracts numbers from the field + String numbers1 = getNumbers(nfd(a)); + String numbers2 = getNumbers(nfd(b)); - //extracts numbers from the field - String numbers1 = getNumbers(nfd(a)); - String numbers2 = getNumbers(nfd(b)); + if (numbers1.isEmpty() && numbers2.isEmpty()) + return 1.0; - if (numbers1.isEmpty() && numbers2.isEmpty()) - return 1.0; + if (numbers1.isEmpty() || numbers2.isEmpty()) + return -1.0; - if (numbers1.isEmpty() || numbers2.isEmpty()) - return -1.0; + if (numbers1.equals(numbers2)) + return 1.0; - if (numbers1.equals(numbers2)) - return 1.0; - - return 0.0; - } -} \ No newline at end of file + return 0.0; + } +} diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/RomansMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/RomansMatch.java index bdbde9610..08e4d5d84 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/RomansMatch.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/RomansMatch.java @@ -1,35 +1,35 @@ + package eu.dnetlib.pace.tree; +import java.util.Map; + import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.tree.support.AbstractComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; -import java.util.Map; - @ComparatorClass("romansMatch") public class RomansMatch extends AbstractComparator { + public RomansMatch(Map params) { + super(params); + } - public RomansMatch(Map params) { - super(params); - } + @Override + public double distance(String a, String b, Config conf) { - @Override - public double distance(String a, String b, Config conf) { + // extracts romans from the field + String romans1 = getRomans(nfd(a)); + String romans2 = getRomans(nfd(b)); - //extracts romans from the field - String romans1 = getRomans(nfd(a)); - String romans2 = getRomans(nfd(b)); + if (romans1.isEmpty() && romans2.isEmpty()) + return 1.0; - if (romans1.isEmpty() && romans2.isEmpty()) - return 1.0; + if (romans1.isEmpty() || romans2.isEmpty()) + return -1.0; - if (romans1.isEmpty() || romans2.isEmpty()) - return -1.0; + if (romans1.equals(romans2)) + return 1.0; - if (romans1.equals(romans2)) - return 1.0; - - return 0.0; - } + return 0.0; + } } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/SizeMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/SizeMatch.java index 175b0666d..01cb3dd63 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/SizeMatch.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/SizeMatch.java @@ -1,3 +1,4 @@ + package eu.dnetlib.pace.tree; import java.util.List; @@ -18,34 +19,34 @@ import eu.dnetlib.pace.tree.support.ComparatorClass; @ComparatorClass("sizeMatch") public class SizeMatch extends AbstractComparator { - /** - * Instantiates a new size match. - * - * @param params - * the parameters - */ - public SizeMatch(final Map params) { - super(params); - } + /** + * Instantiates a new size match. + * + * @param params + * the parameters + */ + public SizeMatch(final Map params) { + super(params); + } - @Override - public double compare(final Field a, final Field b, final Config conf) { + @Override + public double compare(final Field a, final Field b, final Config conf) { - if (a.isEmpty() || b.isEmpty()) - return -1; + if (a.isEmpty() || b.isEmpty()) + return -1; - return Iterables.size(a) == Iterables.size(b) ? 1 : 0; - } + return Iterables.size(a) == Iterables.size(b) ? 1 : 0; + } - /** - * Checks if is empty. - * - * @param a - * the a - * @return true, if is empty - */ - protected boolean isEmpty(final Iterable a) { - return (a == null) || Iterables.isEmpty(a); - } + /** + * Checks if is empty. + * + * @param a + * the a + * @return true, if is empty + */ + protected boolean isEmpty(final Iterable a) { + return (a == null) || Iterables.isEmpty(a); + } } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/SortedJaroWinkler.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/SortedJaroWinkler.java index 79173ba66..6e5c36def 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/SortedJaroWinkler.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/SortedJaroWinkler.java @@ -1,18 +1,20 @@ + package eu.dnetlib.pace.tree; +import java.util.Map; + import com.wcohen.ss.AbstractStringDistance; + import eu.dnetlib.pace.tree.support.AbstractSortedComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; -import java.util.Map; - /** * The Class SortedJaroWinkler. */ @ComparatorClass("sortedJaroWinkler") public class SortedJaroWinkler extends AbstractSortedComparator { - public SortedJaroWinkler(Map params){ + public SortedJaroWinkler(Map params) { super(params, new com.wcohen.ss.Levenstein()); } @@ -40,7 +42,6 @@ public class SortedJaroWinkler extends AbstractSortedComparator { /* * (non-Javadoc) - * * @see eu.dnetlib.pace.compare.DistanceAlgo#getWeight() */ @Override @@ -50,7 +51,6 @@ public class SortedJaroWinkler extends AbstractSortedComparator { /* * (non-Javadoc) - * * @see eu.dnetlib.pace.compare.SecondStringDistanceAlgo#normalize(double) */ @Override diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/SortedLevel2JaroWinkler.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/SortedLevel2JaroWinkler.java index de8c669d7..3046fceae 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/SortedLevel2JaroWinkler.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/SortedLevel2JaroWinkler.java @@ -1,11 +1,13 @@ + package eu.dnetlib.pace.tree; +import java.util.Map; + import com.wcohen.ss.AbstractStringDistance; + import eu.dnetlib.pace.tree.support.AbstractSortedComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; -import java.util.Map; - /** * The Class SortedJaroWinkler. */ @@ -22,7 +24,7 @@ public class SortedLevel2JaroWinkler extends AbstractSortedComparator { super(weight, new com.wcohen.ss.Level2JaroWinkler()); } - public SortedLevel2JaroWinkler(final Map params){ + public SortedLevel2JaroWinkler(final Map params) { super(params, new com.wcohen.ss.Level2JaroWinkler()); } @@ -40,7 +42,6 @@ public class SortedLevel2JaroWinkler extends AbstractSortedComparator { /* * (non-Javadoc) - * * @see eu.dnetlib.pace.compare.DistanceAlgo#getWeight() */ @Override @@ -50,7 +51,6 @@ public class SortedLevel2JaroWinkler extends AbstractSortedComparator { /* * (non-Javadoc) - * * @see eu.dnetlib.pace.compare.SecondStringDistanceAlgo#normalize(double) */ @Override diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/StringContainsMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/StringContainsMatch.java index 9c5a9fed5..cef6de504 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/StringContainsMatch.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/StringContainsMatch.java @@ -1,11 +1,12 @@ + package eu.dnetlib.pace.tree; +import java.util.Map; + import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.tree.support.AbstractComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; -import java.util.Map; - /** * The Class Contains match * @@ -14,53 +15,53 @@ import java.util.Map; @ComparatorClass("stringContainsMatch") public class StringContainsMatch extends AbstractComparator { - private Map params; + private Map params; - private boolean CASE_SENSITIVE; - private String STRING; - private String AGGREGATOR; + private boolean CASE_SENSITIVE; + private String STRING; + private String AGGREGATOR; - public StringContainsMatch(Map params) { - super(params); - this.params = params; + public StringContainsMatch(Map params) { + super(params); + this.params = params; - //read parameters - CASE_SENSITIVE = Boolean.parseBoolean(params.getOrDefault("caseSensitive", "false")); - STRING = params.get("string"); - AGGREGATOR = params.get("aggregator"); + // read parameters + CASE_SENSITIVE = Boolean.parseBoolean(params.getOrDefault("caseSensitive", "false")); + STRING = params.get("string"); + AGGREGATOR = params.get("aggregator"); - } + } - @Override - public double distance(final String a, final String b, final Config conf) { + @Override + public double distance(final String a, final String b, final Config conf) { - String ca = a; - String cb = b; - if (!CASE_SENSITIVE) { - ca = a.toLowerCase(); - cb = b.toLowerCase(); - STRING = STRING.toLowerCase(); - } + String ca = a; + String cb = b; + if (!CASE_SENSITIVE) { + ca = a.toLowerCase(); + cb = b.toLowerCase(); + STRING = STRING.toLowerCase(); + } - if (AGGREGATOR != null) { - switch (AGGREGATOR) { - case "AND": - if (ca.contains(STRING) && cb.contains(STRING)) - return 1.0; - break; - case "OR": - if (ca.contains(STRING) || cb.contains(STRING)) - return 1.0; - break; - case "XOR": - if (ca.contains(STRING) ^ cb.contains(STRING)) - return 1.0; - break; - default: - return 0.0; - } - } + if (AGGREGATOR != null) { + switch (AGGREGATOR) { + case "AND": + if (ca.contains(STRING) && cb.contains(STRING)) + return 1.0; + break; + case "OR": + if (ca.contains(STRING) || cb.contains(STRING)) + return 1.0; + break; + case "XOR": + if (ca.contains(STRING) ^ cb.contains(STRING)) + return 1.0; + break; + default: + return 0.0; + } + } - return 0.0; - } + return 0.0; + } } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/StringListMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/StringListMatch.java index e67a7ea0b..c74deadc9 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/StringListMatch.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/StringListMatch.java @@ -1,54 +1,57 @@ -package eu.dnetlib.pace.tree; -import com.google.common.collect.Sets; -import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.model.FieldList; -import eu.dnetlib.pace.tree.support.AbstractComparator; -import eu.dnetlib.pace.tree.support.ComparatorClass; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; +package eu.dnetlib.pace.tree; import java.util.HashSet; import java.util.Map; import java.util.Set; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import com.google.common.collect.Sets; + +import eu.dnetlib.pace.config.Config; +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.FieldList; +import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.ComparatorClass; + @ComparatorClass("stringListMatch") public class StringListMatch extends AbstractComparator { - private static final Log log = LogFactory.getLog(StringListMatch.class); - private Map params; + private static final Log log = LogFactory.getLog(StringListMatch.class); + private Map params; - final private String TYPE; //percentage or count + final private String TYPE; // percentage or count - public StringListMatch(final Map params) { - super(params); - this.params = params; + public StringListMatch(final Map params) { + super(params); + this.params = params; - TYPE = params.getOrDefault("type", "percentage"); - } + TYPE = params.getOrDefault("type", "percentage"); + } - @Override - public double compare(final Field a, final Field b, final Config conf) { + @Override + public double compare(final Field a, final Field b, final Config conf) { - final Set pa = new HashSet<>(((FieldList) a).stringList()); - final Set pb = new HashSet<>(((FieldList) b).stringList()); + final Set pa = new HashSet<>(((FieldList) a).stringList()); + final Set pb = new HashSet<>(((FieldList) b).stringList()); - if (pa.isEmpty() || pb.isEmpty()) { - return -1; //return undefined if one of the two lists is empty - } + if (pa.isEmpty() || pb.isEmpty()) { + return -1; // return undefined if one of the two lists is empty + } - int incommon = Sets.intersection(pa, pb).size(); - int simDiff = Sets.symmetricDifference(pa, pb).size(); + int incommon = Sets.intersection(pa, pb).size(); + int simDiff = Sets.symmetricDifference(pa, pb).size(); - if (incommon + simDiff == 0) { - return 0.0; - } + if (incommon + simDiff == 0) { + return 0.0; + } - if(TYPE.equals("percentage")) - return (double)incommon / (incommon + simDiff); - else - return incommon; + if (TYPE.equals("percentage")) + return (double) incommon / (incommon + simDiff); + else + return incommon; - } -} \ No newline at end of file + } +} diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/SubStringLevenstein.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/SubStringLevenstein.java index 0c4165bf6..23be3f752 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/SubStringLevenstein.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/SubStringLevenstein.java @@ -1,17 +1,18 @@ + package eu.dnetlib.pace.tree; -import eu.dnetlib.pace.config.Config; +import java.util.Map; + import org.apache.commons.lang3.StringUtils; import com.wcohen.ss.AbstractStringDistance; + +import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.config.Type; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.tree.support.AbstractComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; - -import java.util.Map; - /** * The Class SubStringLevenstein. */ @@ -31,7 +32,7 @@ public class SubStringLevenstein extends AbstractComparator { super(w, new com.wcohen.ss.Levenstein()); } - public SubStringLevenstein(Map params){ + public SubStringLevenstein(Map params) { super(params, new com.wcohen.ss.Levenstein()); this.limit = Integer.parseInt(params.getOrDefault("limit", "1")); } @@ -66,8 +67,8 @@ public class SubStringLevenstein extends AbstractComparator { /* * (non-Javadoc) - * - * @see eu.dnetlib.pace.compare.SecondStringDistanceAlgo#compare(eu.dnetlib.pace.model.Field, eu.dnetlib.pace.model.Field) + * @see eu.dnetlib.pace.compare.SecondStringDistanceAlgo#compare(eu.dnetlib.pace.model.Field, + * eu.dnetlib.pace.model.Field) */ @Override public double distance(final Field a, final Field b, final Config conf) { @@ -79,7 +80,6 @@ public class SubStringLevenstein extends AbstractComparator { /* * (non-Javadoc) - * * @see eu.dnetlib.pace.compare.DistanceAlgo#getWeight() */ @Override @@ -89,7 +89,6 @@ public class SubStringLevenstein extends AbstractComparator { /* * (non-Javadoc) - * * @see eu.dnetlib.pace.compare.SecondStringDistanceAlgo#normalize(double) */ @Override diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/TitleVersionMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/TitleVersionMatch.java index 873a0c100..db1faf9e2 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/TitleVersionMatch.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/TitleVersionMatch.java @@ -1,3 +1,4 @@ + package eu.dnetlib.pace.tree; import java.util.List; @@ -17,24 +18,24 @@ import eu.dnetlib.pace.tree.support.ComparatorClass; @ComparatorClass("titleVersionMatch") public class TitleVersionMatch extends AbstractComparator { - public TitleVersionMatch(final Map params) { - super(params); - } + public TitleVersionMatch(final Map params) { + super(params); + } - @Override - public double compare(final Field a, final Field b, final Config conf) { - final String valueA = getFirstValue(a); - final String valueB = getFirstValue(b); + @Override + public double compare(final Field a, final Field b, final Config conf) { + final String valueA = getFirstValue(a); + final String valueB = getFirstValue(b); - if (valueA.isEmpty() || valueB.isEmpty()) - return -1; + if (valueA.isEmpty() || valueB.isEmpty()) + return -1; - return notNull(valueA) && notNull(valueB) && !checkNumbers(valueA, valueB) ? 1 : 0; - } + return notNull(valueA) && notNull(valueB) && !checkNumbers(valueA, valueB) ? 1 : 0; + } - @Override - public String toString() { - return getClass().getSimpleName() + ":" + super.toString(); - } + @Override + public String toString() { + return getClass().getSimpleName() + ":" + super.toString(); + } -} \ No newline at end of file +} diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/UrlMatcher.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/UrlMatcher.java index fc98fc187..f4f00a908 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/UrlMatcher.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/UrlMatcher.java @@ -1,59 +1,61 @@ -package eu.dnetlib.pace.tree; -import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.tree.support.ComparatorClass; -import org.apache.commons.lang3.StringUtils; +package eu.dnetlib.pace.tree; import java.net.MalformedURLException; import java.net.URL; import java.util.Map; +import org.apache.commons.lang3.StringUtils; + +import eu.dnetlib.pace.config.Config; +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.tree.support.ComparatorClass; + @ComparatorClass("urlMatcher") public class UrlMatcher extends Levenstein { - private Map params; + private Map params; - public UrlMatcher(Map params){ - super(params); - this.params = params; - } + public UrlMatcher(Map params) { + super(params); + this.params = params; + } - public UrlMatcher(double weight, Map params) { - super(weight); - this.params = params; - } + public UrlMatcher(double weight, Map params) { + super(weight); + this.params = params; + } - public void setParams(Map params) { - this.params = params; - } + public void setParams(Map params) { + this.params = params; + } - @Override - public double distance(Field a, Field b, final Config conf) { - final URL urlA = asUrl(getFirstValue(a)); - final URL urlB = asUrl(getFirstValue(b)); + @Override + public double distance(Field a, Field b, final Config conf) { + final URL urlA = asUrl(getFirstValue(a)); + final URL urlB = asUrl(getFirstValue(b)); - if (!urlA.getHost().equalsIgnoreCase(urlB.getHost())) { - return 0.0; - } + if (!urlA.getHost().equalsIgnoreCase(urlB.getHost())) { + return 0.0; + } - Double hostW = Double.parseDouble(params.getOrDefault("host", "0.5")); - Double pathW = Double.parseDouble(params.getOrDefault("path", "0.5")); + Double hostW = Double.parseDouble(params.getOrDefault("host", "0.5")); + Double pathW = Double.parseDouble(params.getOrDefault("path", "0.5")); - if (StringUtils.isBlank(urlA.getPath()) || StringUtils.isBlank(urlB.getPath())) { - return hostW * 0.5; - } + if (StringUtils.isBlank(urlA.getPath()) || StringUtils.isBlank(urlB.getPath())) { + return hostW * 0.5; + } - return hostW + pathW * super.distance(urlA.getPath(), urlB.getPath(), conf); - } + return hostW + pathW * super.distance(urlA.getPath(), urlB.getPath(), conf); + } - private URL asUrl(final String value) { - try { - return new URL(value); - } catch (MalformedURLException e) { - // should not happen as checked by pace typing - throw new IllegalStateException("invalid URL: " + value); - } - } + private URL asUrl(final String value) { + try { + return new URL(value); + } catch (MalformedURLException e) { + // should not happen as checked by pace typing + throw new IllegalStateException("invalid URL: " + value); + } + } } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/YearMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/YearMatch.java index 5dda0e25f..7ee8c8bad 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/YearMatch.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/YearMatch.java @@ -1,12 +1,14 @@ + package eu.dnetlib.pace.tree; +import java.util.Map; + +import org.apache.commons.lang3.StringUtils; + import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.tree.support.AbstractComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; -import org.apache.commons.lang3.StringUtils; - -import java.util.Map; /** * Returns true if the year of the date field in the given documents are the same, false when any of the two is invalid or it's missing. @@ -16,36 +18,36 @@ import java.util.Map; @ComparatorClass("yearMatch") public class YearMatch extends AbstractComparator { - private int limit = 4; + private int limit = 4; - public YearMatch(final Map params) { - super(params); - } + public YearMatch(final Map params) { + super(params); + } - @Override - public double compare(final Field a, final Field b, final Config conf) { - final String valueA = getNumbers(getFirstValue(a)); - final String valueB = getNumbers(getFirstValue(b)); + @Override + public double compare(final Field a, final Field b, final Config conf) { + final String valueA = getNumbers(getFirstValue(a)); + final String valueB = getNumbers(getFirstValue(b)); - if (valueA.isEmpty() || valueB.isEmpty()) - return -1; + if (valueA.isEmpty() || valueB.isEmpty()) + return -1; - final boolean lengthMatch = checkLength(valueA) && checkLength(valueB); - final boolean onemissing = valueA.isEmpty() || valueB.isEmpty(); + final boolean lengthMatch = checkLength(valueA) && checkLength(valueB); + final boolean onemissing = valueA.isEmpty() || valueB.isEmpty(); - return lengthMatch && valueA.equals(valueB) || onemissing ? 1 : 0; - } + return lengthMatch && valueA.equals(valueB) || onemissing ? 1 : 0; + } - protected boolean checkLength(final String s) { - return s.length() == limit; - } + protected boolean checkLength(final String s) { + return s.length() == limit; + } - protected String getFirstValue(final Field value) { - return (value != null) && !value.isEmpty() ? StringUtils.left(value.stringValue(), limit) : ""; - } + protected String getFirstValue(final Field value) { + return (value != null) && !value.isEmpty() ? StringUtils.left(value.stringValue(), limit) : ""; + } - @Override - public String toString() { - return getClass().getSimpleName() + ":" + super.toString(); - } -} \ No newline at end of file + @Override + public String toString() { + return getClass().getSimpleName() + ":" + super.toString(); + } +} diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractComparator.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractComparator.java index ddfcc5565..3ecffb289 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractComparator.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractComparator.java @@ -1,124 +1,130 @@ + package eu.dnetlib.pace.tree.support; +import java.util.List; +import java.util.Map; + import com.wcohen.ss.AbstractStringDistance; + import eu.dnetlib.pace.common.AbstractPaceFunctions; import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.config.Type; import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.model.FieldList; -import java.util.List; -import java.util.Map; - public abstract class AbstractComparator extends AbstractPaceFunctions implements Comparator { - /** The ssalgo. */ - protected AbstractStringDistance ssalgo; + /** The ssalgo. */ + protected AbstractStringDistance ssalgo; - /** The weight. */ - protected double weight = 0.0; + /** The weight. */ + protected double weight = 0.0; - private Map params; + private Map params; - protected AbstractComparator(Map params) { - this.params = params; - } + protected AbstractComparator(Map params) { + this.params = params; + } - protected AbstractComparator(Map params, final AbstractStringDistance ssalgo){ - this.params = params; - this.weight = 1.0; - this.ssalgo = ssalgo; - } + protected AbstractComparator(Map params, final AbstractStringDistance ssalgo) { + this.params = params; + this.weight = 1.0; + this.ssalgo = ssalgo; + } - /** - * Instantiates a new second string compare algo. - * - * @param weight - * the weight - * @param ssalgo - * the ssalgo - */ - protected AbstractComparator(final double weight, final AbstractStringDistance ssalgo) { - this.ssalgo = ssalgo; - this.weight = weight; - } + /** + * Instantiates a new second string compare algo. + * + * @param weight + * the weight + * @param ssalgo + * the ssalgo + */ + protected AbstractComparator(final double weight, final AbstractStringDistance ssalgo) { + this.ssalgo = ssalgo; + this.weight = weight; + } - protected AbstractComparator(final AbstractStringDistance ssalgo){ - this.ssalgo = ssalgo; - } + protected AbstractComparator(final AbstractStringDistance ssalgo) { + this.ssalgo = ssalgo; + } - /** - * Normalize. - * - * @param d - * the d - * @return the double - */ - protected double normalize(double d) { - return d; - } + /** + * Normalize. + * + * @param d + * the d + * @return the double + */ + protected double normalize(double d) { + return d; + } - /** - * Distance. - * - * @param a - * the a - * @param b - * the b - * @return the double - */ - public double distance(final String a, final String b, final Config conf) { + /** + * Distance. + * + * @param a + * the a + * @param b + * the b + * @return the double + */ + public double distance(final String a, final String b, final Config conf) { - if (a.isEmpty() || b.isEmpty()) { - return -1; //return -1 if a field is missing - } - double score = ssalgo.score(a, b); - return normalize(score); - } + if (a.isEmpty() || b.isEmpty()) { + return -1; // return -1 if a field is missing + } + double score = ssalgo.score(a, b); + return normalize(score); + } - /** - * Distance. - * - * @param a - * the a - * @param b - * the b - * @return the double - */ - protected double distance(final List a, final List b, final Config conf) { - return distance(concat(a), concat(b), conf); - } + /** + * Distance. + * + * @param a + * the a + * @param b + * the b + * @return the double + */ + protected double distance(final List a, final List b, final Config conf) { + return distance(concat(a), concat(b), conf); + } - public double distance(final Field a, final Field b, final Config conf) { - if (a.getType().equals(Type.String) && b.getType().equals(Type.String)) return distance(a.stringValue(), b.stringValue(), conf); - if (a.getType().equals(Type.List) && b.getType().equals(Type.List)) return distance(toList(a), toList(b), conf); + public double distance(final Field a, final Field b, final Config conf) { + if (a.getType().equals(Type.String) && b.getType().equals(Type.String)) + return distance(a.stringValue(), b.stringValue(), conf); + if (a.getType().equals(Type.List) && b.getType().equals(Type.List)) + return distance(toList(a), toList(b), conf); - throw new IllegalArgumentException("invalid types\n- A: " + a.toString() + "\n- B: " + b.toString()); - } + throw new IllegalArgumentException("invalid types\n- A: " + a.toString() + "\n- B: " + b.toString()); + } - @Override - public double compare(final Field a, final Field b, final Config conf) { - if (a.isEmpty() || b.isEmpty()) - return -1; - if (a.getType().equals(Type.String) && b.getType().equals(Type.String)) return distance(a.stringValue(), b.stringValue(), conf); - if (a.getType().equals(Type.List) && b.getType().equals(Type.List)) return distance(toList(a), toList(b), conf); + @Override + public double compare(final Field a, final Field b, final Config conf) { + if (a.isEmpty() || b.isEmpty()) + return -1; + if (a.getType().equals(Type.String) && b.getType().equals(Type.String)) + return distance(a.stringValue(), b.stringValue(), conf); + if (a.getType().equals(Type.List) && b.getType().equals(Type.List)) + return distance(toList(a), toList(b), conf); - throw new IllegalArgumentException("invalid types\n- A: " + a.toString() + "\n- B: " + b.toString()); - } + throw new IllegalArgumentException("invalid types\n- A: " + a.toString() + "\n- B: " + b.toString()); + } - /** - * To list. - * - * @param list - * the list - * @return the list - */ - protected List toList(final Field list) { - return ((FieldList) list).stringList(); - } + /** + * To list. + * + * @param list + * the list + * @return the list + */ + protected List toList(final Field list) { + return ((FieldList) list).stringList(); + } - public double getWeight(){ - return this.weight; - } + public double getWeight() { + return this.weight; + } } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractSortedComparator.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractSortedComparator.java index 557ad0c29..8927f2e14 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractSortedComparator.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractSortedComparator.java @@ -1,38 +1,40 @@ -package eu.dnetlib.pace.tree.support; -import com.google.common.collect.Lists; -import com.wcohen.ss.AbstractStringDistance; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.model.FieldList; +package eu.dnetlib.pace.tree.support; import java.util.Collections; import java.util.List; import java.util.Map; +import com.google.common.collect.Lists; +import com.wcohen.ss.AbstractStringDistance; + +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.FieldList; + public abstract class AbstractSortedComparator extends AbstractComparator { - /** - * Instantiates a new sorted second string compare algo. - * - * @param weight - * the weight - * @param ssalgo - * the ssalgo - */ - protected AbstractSortedComparator(final double weight, final AbstractStringDistance ssalgo) { - super(weight, ssalgo); - } + /** + * Instantiates a new sorted second string compare algo. + * + * @param weight + * the weight + * @param ssalgo + * the ssalgo + */ + protected AbstractSortedComparator(final double weight, final AbstractStringDistance ssalgo) { + super(weight, ssalgo); + } - protected AbstractSortedComparator(final Map params, final AbstractStringDistance ssalgo){ - super(Double.parseDouble(params.get("weight")), ssalgo); - } + protected AbstractSortedComparator(final Map params, final AbstractStringDistance ssalgo) { + super(Double.parseDouble(params.get("weight")), ssalgo); + } - @Override - protected List toList(final Field list) { - FieldList fl = (FieldList) list; - List values = Lists.newArrayList(fl.stringList()); - Collections.sort(values); - return values; - } + @Override + protected List toList(final Field list) { + FieldList fl = (FieldList) list; + List values = Lists.newArrayList(fl.stringList()); + Collections.sort(values); + return values; + } } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AggType.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AggType.java index caf7cd4c8..7011f2bf3 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AggType.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AggType.java @@ -1,24 +1,21 @@ + package eu.dnetlib.pace.tree.support; import eu.dnetlib.pace.util.PaceException; public enum AggType { - W_MEAN, //weighted mean - AVG, //average - SUM, - MAX, - MIN, - AND, //used for necessary conditions - OR; //used for sufficient conditions + W_MEAN, // weighted mean + AVG, // average + SUM, MAX, MIN, AND, // used for necessary conditions + OR; // used for sufficient conditions - public static AggType getEnum(String value) { + public static AggType getEnum(String value) { - try { - return AggType.valueOf(value); - } - catch (IllegalArgumentException e) { - throw new PaceException("Undefined aggregation type", e); - } - } + try { + return AggType.valueOf(value); + } catch (IllegalArgumentException e) { + throw new PaceException("Undefined aggregation type", e); + } + } } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/Comparator.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/Comparator.java index 67c26e99a..b11ca5429 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/Comparator.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/Comparator.java @@ -1,3 +1,4 @@ + package eu.dnetlib.pace.tree.support; import eu.dnetlib.pace.config.Config; @@ -5,10 +6,9 @@ import eu.dnetlib.pace.model.Field; public interface Comparator { - /* - * return : -1 -> can't decide (i.e. missing field) - * >0 -> similarity degree (depends on the algorithm) - * */ - public double compare(Field a, Field b, Config conf); + /* + * return : -1 -> can't decide (i.e. missing field) >0 -> similarity degree (depends on the algorithm) + */ + public double compare(Field a, Field b, Config conf); } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/ComparatorClass.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/ComparatorClass.java index 8c3002eb6..5ef0932cf 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/ComparatorClass.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/ComparatorClass.java @@ -1,3 +1,4 @@ + package eu.dnetlib.pace.tree.support; import java.lang.annotation.ElementType; @@ -9,5 +10,5 @@ import java.lang.annotation.Target; @Target(ElementType.TYPE) public @interface ComparatorClass { - public String value(); + public String value(); } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/FieldConf.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/FieldConf.java index 44971876f..d81c68e38 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/FieldConf.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/FieldConf.java @@ -1,82 +1,84 @@ + package eu.dnetlib.pace.tree.support; -import com.fasterxml.jackson.databind.ObjectMapper; -import eu.dnetlib.pace.util.PaceException; - - import java.io.IOException; import java.io.Serializable; import java.util.Map; +import com.fasterxml.jackson.databind.ObjectMapper; + +import eu.dnetlib.pace.util.PaceException; + /** * The class that defines the configuration of each field in the decision tree. * */ public class FieldConf implements Serializable { - private String field; //name of the field on which apply the comparator - private String comparator; //comparator name - private double weight = 1.0; //weight for the field (to be used in the aggregation) - private Map params; //parameters + private String field; // name of the field on which apply the comparator + private String comparator; // comparator name + private double weight = 1.0; // weight for the field (to be used in the aggregation) + private Map params; // parameters - private boolean countIfUndefined; + private boolean countIfUndefined; - public boolean isCountIfUndefined() { - return countIfUndefined; - } + public boolean isCountIfUndefined() { + return countIfUndefined; + } - public void setCountIfUndefined(boolean countIfUndefined) { - this.countIfUndefined = countIfUndefined; - } + public void setCountIfUndefined(boolean countIfUndefined) { + this.countIfUndefined = countIfUndefined; + } - public FieldConf() { - } + public FieldConf() { + } - public FieldConf(String field, String comparator, double weight, Map params, boolean countIfUndefined) { - this.field = field; - this.comparator = comparator; - this.weight = weight; - this.params = params; - this.countIfUndefined = countIfUndefined; - } + public FieldConf(String field, String comparator, double weight, Map params, + boolean countIfUndefined) { + this.field = field; + this.comparator = comparator; + this.weight = weight; + this.params = params; + this.countIfUndefined = countIfUndefined; + } - public String getField() { - return field; - } + public String getField() { + return field; + } - public void setField(String field) { - this.field = field; - } + public void setField(String field) { + this.field = field; + } - public String getComparator() { - return comparator; - } + public String getComparator() { + return comparator; + } - public void setComparator(String comparator) { - this.comparator = comparator; - } + public void setComparator(String comparator) { + this.comparator = comparator; + } - public double getWeight() { - return weight; - } + public double getWeight() { + return weight; + } - public void setWeight(double weight) { - this.weight = weight; - } + public void setWeight(double weight) { + this.weight = weight; + } - public Map getParams() { - return params; - } + public Map getParams() { + return params; + } - public void setParams(Map params) { - this.params = params; - } + public void setParams(Map params) { + this.params = params; + } - @Override - public String toString() { - try { - return new ObjectMapper().writeValueAsString(this); - } catch (IOException e) { - throw new PaceException("Impossible to convert to JSON: ", e); - } - } -} \ No newline at end of file + @Override + public String toString() { + try { + return new ObjectMapper().writeValueAsString(this); + } catch (IOException e) { + throw new PaceException("Impossible to convert to JSON: ", e); + } + } +} diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/FieldStats.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/FieldStats.java index fb0b51b47..0d5c80f53 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/FieldStats.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/FieldStats.java @@ -1,89 +1,90 @@ + package eu.dnetlib.pace.tree.support; -import com.fasterxml.jackson.databind.ObjectMapper; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.util.PaceException; - - import java.io.IOException; import java.io.Serializable; +import com.fasterxml.jackson.databind.ObjectMapper; + +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.util.PaceException; + /** * The class that contains the result of each comparison in the decision tree * */ public class FieldStats implements Serializable { - private double weight; //weight for the field (to be used in the aggregation) - private double threshold; //threshold for the field (to be used in some kind of aggregations) - private double result; //the result of the comparison - private Field a; - private Field b; + private double weight; // weight for the field (to be used in the aggregation) + private double threshold; // threshold for the field (to be used in some kind of aggregations) + private double result; // the result of the comparison + private Field a; + private Field b; - private boolean countIfUndefined; + private boolean countIfUndefined; - public FieldStats(double weight, double threshold, double result, boolean countIfUndefined, Field a, Field b) { - this.weight = weight; - this.threshold = threshold; - this.result = result; - this.countIfUndefined = countIfUndefined; - this.a = a; - this.b = b; - } + public FieldStats(double weight, double threshold, double result, boolean countIfUndefined, Field a, Field b) { + this.weight = weight; + this.threshold = threshold; + this.result = result; + this.countIfUndefined = countIfUndefined; + this.a = a; + this.b = b; + } - public double getThreshold() { - return threshold; - } + public double getThreshold() { + return threshold; + } - public void setThreshold(double threshold) { - this.threshold = threshold; - } + public void setThreshold(double threshold) { + this.threshold = threshold; + } - public double getWeight() { - return weight; - } + public double getWeight() { + return weight; + } - public void setWeight(double weight) { - this.weight = weight; - } + public void setWeight(double weight) { + this.weight = weight; + } - public double getResult() { - return result; - } + public double getResult() { + return result; + } - public void setResult(double result) { - this.result = result; - } + public void setResult(double result) { + this.result = result; + } - public boolean isCountIfUndefined() { - return countIfUndefined; - } + public boolean isCountIfUndefined() { + return countIfUndefined; + } - public void setCountIfUndefined(boolean countIfUndefined) { - this.countIfUndefined = countIfUndefined; - } + public void setCountIfUndefined(boolean countIfUndefined) { + this.countIfUndefined = countIfUndefined; + } - public Field getA() { - return a; - } + public Field getA() { + return a; + } - public void setA(Field a) { - this.a = a; - } + public void setA(Field a) { + this.a = a; + } - public Field getB() { - return b; - } + public Field getB() { + return b; + } - public void setB(Field b) { - this.b = b; - } + public void setB(Field b) { + this.b = b; + } - @Override - public String toString(){ - try { - return new ObjectMapper().writeValueAsString(this); - } catch (IOException e) { - throw new PaceException("Impossible to convert to JSON: ", e); - } - } + @Override + public String toString() { + try { + return new ObjectMapper().writeValueAsString(this); + } catch (IOException e) { + throw new PaceException("Impossible to convert to JSON: ", e); + } + } } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/MatchType.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/MatchType.java index c16039587..8dff818e8 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/MatchType.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/MatchType.java @@ -1,18 +1,16 @@ + package eu.dnetlib.pace.tree.support; public enum MatchType { - MATCH, - NO_MATCH, - UNDEFINED; + MATCH, NO_MATCH, UNDEFINED; - public static MatchType parse(String value) { + public static MatchType parse(String value) { - try { - return MatchType.valueOf(value); - } - catch (IllegalArgumentException e) { - return MatchType.UNDEFINED; //return UNDEFINED if the enum is not parsable - } - } + try { + return MatchType.valueOf(value); + } catch (IllegalArgumentException e) { + return MatchType.UNDEFINED; // return UNDEFINED if the enum is not parsable + } + } } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java index f7ebe96d1..a754f13cd 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java @@ -1,150 +1,160 @@ -package eu.dnetlib.pace.tree.support; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.config.PaceConfig; -import eu.dnetlib.pace.model.MapDocument; -import eu.dnetlib.pace.util.PaceException; -import org.apache.commons.lang3.StringUtils; +package eu.dnetlib.pace.tree.support; import java.io.IOException; import java.io.Serializable; import java.io.StringWriter; import java.util.List; +import org.apache.commons.lang3.StringUtils; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; + +import eu.dnetlib.pace.config.Config; +import eu.dnetlib.pace.config.PaceConfig; +import eu.dnetlib.pace.model.MapDocument; +import eu.dnetlib.pace.util.PaceException; + public class TreeNodeDef implements Serializable { - final static String CROSS_COMPARE = "crossCompare"; + final static String CROSS_COMPARE = "crossCompare"; - private List fields; - private AggType aggregation; + private List fields; + private AggType aggregation; - private double threshold; + private double threshold; - private String positive; - private String negative; - private String undefined; + private String positive; + private String negative; + private String undefined; - boolean ignoreUndefined; + boolean ignoreUndefined; - public TreeNodeDef(List fields, AggType aggregation, double threshold, String positive, String negative, String undefined, boolean ignoreUndefined) { - this.fields = fields; - this.aggregation = aggregation; - this.threshold = threshold; - this.positive = positive; - this.negative = negative; - this.undefined = undefined; - this.ignoreUndefined = ignoreUndefined; - } + public TreeNodeDef(List fields, AggType aggregation, double threshold, String positive, String negative, + String undefined, boolean ignoreUndefined) { + this.fields = fields; + this.aggregation = aggregation; + this.threshold = threshold; + this.positive = positive; + this.negative = negative; + this.undefined = undefined; + this.ignoreUndefined = ignoreUndefined; + } - public TreeNodeDef() {} + public TreeNodeDef() { + } - //function for the evaluation of the node - public TreeNodeStats evaluate(MapDocument doc1, MapDocument doc2, Config conf) { + // function for the evaluation of the node + public TreeNodeStats evaluate(MapDocument doc1, MapDocument doc2, Config conf) { - TreeNodeStats stats = new TreeNodeStats(); + TreeNodeStats stats = new TreeNodeStats(); - //for each field in the node, it computes the - for (FieldConf fieldConf : fields) { + // for each field in the node, it computes the + for (FieldConf fieldConf : fields) { - double weight = fieldConf.getWeight(); + double weight = fieldConf.getWeight(); - double result; + double result; - //if the param specifies a cross comparison (i.e. compare elements from different fields), compute the result for both sides and return the maximum - if(fieldConf.getParams().keySet().stream().anyMatch(k -> k.contains(CROSS_COMPARE))) { - String crossField = fieldConf.getParams().get(CROSS_COMPARE); - double result1 = comparator(fieldConf).compare(doc1.getFieldMap().get(fieldConf.getField()), doc2.getFieldMap().get(crossField), conf); - double result2 = comparator(fieldConf).compare(doc1.getFieldMap().get(crossField), doc2.getFieldMap().get(fieldConf.getField()), conf); - result = Math.max(result1,result2); - } - else { - result = comparator(fieldConf).compare(doc1.getFieldMap().get(fieldConf.getField()), doc2.getFieldMap().get(fieldConf.getField()), conf); - } + // if the param specifies a cross comparison (i.e. compare elements from different fields), compute the + // result for both sides and return the maximum + if (fieldConf.getParams().keySet().stream().anyMatch(k -> k.contains(CROSS_COMPARE))) { + String crossField = fieldConf.getParams().get(CROSS_COMPARE); + double result1 = comparator(fieldConf) + .compare(doc1.getFieldMap().get(fieldConf.getField()), doc2.getFieldMap().get(crossField), conf); + double result2 = comparator(fieldConf) + .compare(doc1.getFieldMap().get(crossField), doc2.getFieldMap().get(fieldConf.getField()), conf); + result = Math.max(result1, result2); + } else { + result = comparator(fieldConf) + .compare( + doc1.getFieldMap().get(fieldConf.getField()), doc2.getFieldMap().get(fieldConf.getField()), + conf); + } - stats.addFieldStats( - fieldConf.getComparator() + " on " + fieldConf.getField() + " " + fields.indexOf(fieldConf), - new FieldStats( - weight, - Double.parseDouble(fieldConf.getParams().getOrDefault("threshold", "1.0")), - result, - fieldConf.isCountIfUndefined(), - doc1.getFieldMap().get(fieldConf.getField()), - doc2.getFieldMap().get(fieldConf.getField()) - )); - } + stats + .addFieldStats( + fieldConf.getComparator() + " on " + fieldConf.getField() + " " + fields.indexOf(fieldConf), + new FieldStats( + weight, + Double.parseDouble(fieldConf.getParams().getOrDefault("threshold", "1.0")), + result, + fieldConf.isCountIfUndefined(), + doc1.getFieldMap().get(fieldConf.getField()), + doc2.getFieldMap().get(fieldConf.getField()))); + } - return stats; - } + return stats; + } - private Comparator comparator(final FieldConf field){ + private Comparator comparator(final FieldConf field) { - return PaceConfig.resolver.getComparator(field.getComparator(), field.getParams()); - } + return PaceConfig.resolver.getComparator(field.getComparator(), field.getParams()); + } - public List getFields() { - return fields; - } + public List getFields() { + return fields; + } - public void setFields(List fields) { - this.fields = fields; - } + public void setFields(List fields) { + this.fields = fields; + } - public AggType getAggregation() { - return aggregation; - } + public AggType getAggregation() { + return aggregation; + } - public void setAggregation(AggType aggregation) { - this.aggregation = aggregation; - } + public void setAggregation(AggType aggregation) { + this.aggregation = aggregation; + } - public double getThreshold() { - return threshold; - } + public double getThreshold() { + return threshold; + } - public void setThreshold(double threshold) { - this.threshold = threshold; - } + public void setThreshold(double threshold) { + this.threshold = threshold; + } - public String getPositive() { - return positive; - } + public String getPositive() { + return positive; + } - public void setPositive(String positive) { - this.positive = positive; - } + public void setPositive(String positive) { + this.positive = positive; + } - public String getNegative() { - return negative; - } + public String getNegative() { + return negative; + } - public void setNegative(String negative) { - this.negative = negative; - } + public void setNegative(String negative) { + this.negative = negative; + } - public String getUndefined() { - return undefined; - } + public String getUndefined() { + return undefined; + } - public void setUndefined(String undefined) { - this.undefined = undefined; - } + public void setUndefined(String undefined) { + this.undefined = undefined; + } - public boolean isIgnoreUndefined() { - return ignoreUndefined; - } + public boolean isIgnoreUndefined() { + return ignoreUndefined; + } - public void setIgnoreUndefined(boolean ignoreUndefined) { - this.ignoreUndefined = ignoreUndefined; - } + public void setIgnoreUndefined(boolean ignoreUndefined) { + this.ignoreUndefined = ignoreUndefined; + } - @Override - public String toString() { - try { - return new ObjectMapper().writeValueAsString(this); - } catch (IOException e) { - throw new PaceException("Impossible to convert to JSON: ", e); - } - } + @Override + public String toString() { + try { + return new ObjectMapper().writeValueAsString(this); + } catch (IOException e) { + throw new PaceException("Impossible to convert to JSON: ", e); + } + } } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeStats.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeStats.java index f9612a41f..2b96048b4 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeStats.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeStats.java @@ -1,3 +1,4 @@ + package eu.dnetlib.pace.tree.support; import java.io.Serializable; @@ -6,129 +7,128 @@ import java.util.Map; public class TreeNodeStats implements Serializable { - private Map results; //this is an accumulator for the results of the node + private Map results; // this is an accumulator for the results of the node - public TreeNodeStats(){ - this.results = new HashMap<>(); - } + public TreeNodeStats() { + this.results = new HashMap<>(); + } - public Map getResults() { - return results; - } + public Map getResults() { + return results; + } - public void addFieldStats(String id, FieldStats fieldStats){ - this.results.put(id, fieldStats); - } + public void addFieldStats(String id, FieldStats fieldStats) { + this.results.put(id, fieldStats); + } - public int fieldsCount(){ - return this.results.size(); - } + public int fieldsCount() { + return this.results.size(); + } - public int undefinedCount(){ - int undefinedCount = 0; - for(FieldStats fs: this.results.values()){ - if(fs.getResult() == -1) - undefinedCount ++; - } - return undefinedCount; - } + public int undefinedCount() { + int undefinedCount = 0; + for (FieldStats fs : this.results.values()) { + if (fs.getResult() == -1) + undefinedCount++; + } + return undefinedCount; + } - public double scoreSum(){ - double scoreSum = 0.0; - for(FieldStats fs: this.results.values()){ - if(fs.getResult()>=0.0) { - scoreSum += fs.getResult(); - } - } - return scoreSum; - } + public double scoreSum() { + double scoreSum = 0.0; + for (FieldStats fs : this.results.values()) { + if (fs.getResult() >= 0.0) { + scoreSum += fs.getResult(); + } + } + return scoreSum; + } - //return the sum of the weights without considering the fields with countIfMissing=false && result=-1 - public double weightSum(){ - double weightSum = 0.0; - for(FieldStats fs: this.results.values()){ - if(fs.getResult()>=0.0 || (fs.getResult()<0.0 && fs.isCountIfUndefined())) { - weightSum += fs.getWeight(); - } - } - return weightSum; - } + // return the sum of the weights without considering the fields with countIfMissing=false && result=-1 + public double weightSum() { + double weightSum = 0.0; + for (FieldStats fs : this.results.values()) { + if (fs.getResult() >= 0.0 || (fs.getResult() < 0.0 && fs.isCountIfUndefined())) { + weightSum += fs.getWeight(); + } + } + return weightSum; + } - public double weightedScoreSum(){ - double weightedScoreSum = 0.0; - for(FieldStats fs: this.results.values()){ - if(fs.getResult()>=0.0) { - weightedScoreSum += fs.getResult()*fs.getWeight(); - } - } - return weightedScoreSum; - } + public double weightedScoreSum() { + double weightedScoreSum = 0.0; + for (FieldStats fs : this.results.values()) { + if (fs.getResult() >= 0.0) { + weightedScoreSum += fs.getResult() * fs.getWeight(); + } + } + return weightedScoreSum; + } - public double max(){ - double max = -1.0; - for(FieldStats fs: this.results.values()){ - if(fs.getResult()>max) - max = fs.getResult(); - } - return max; - } + public double max() { + double max = -1.0; + for (FieldStats fs : this.results.values()) { + if (fs.getResult() > max) + max = fs.getResult(); + } + return max; + } - public double min(){ - double min = 100.0; //random high value - for(FieldStats fs: this.results.values()){ - if(fs.getResult()=0.0 || (fs.getResult() == -1 && fs.isCountIfUndefined())) - min = fs.getResult(); - } - } - return min; - } + public double min() { + double min = 100.0; // random high value + for (FieldStats fs : this.results.values()) { + if (fs.getResult() < min) { + if (fs.getResult() >= 0.0 || (fs.getResult() == -1 && fs.isCountIfUndefined())) + min = fs.getResult(); + } + } + return min; + } - //if at least one is true, return 1.0 - public double or(){ - for (FieldStats fieldStats : this.results.values()) { - if (fieldStats.getResult() >= fieldStats.getThreshold()) - return 1.0; - } - return 0.0; - } + // if at least one is true, return 1.0 + public double or() { + for (FieldStats fieldStats : this.results.values()) { + if (fieldStats.getResult() >= fieldStats.getThreshold()) + return 1.0; + } + return 0.0; + } - //if at least one is false, return 0.0 - public double and() { - for (FieldStats fieldStats : this.results.values()) { + // if at least one is false, return 0.0 + public double and() { + for (FieldStats fieldStats : this.results.values()) { - if (fieldStats.getResult() == -1) { - if (fieldStats.isCountIfUndefined()) - return 0.0; - } - else { - if (fieldStats.getResult() < fieldStats.getThreshold()) - return 0.0; - } + if (fieldStats.getResult() == -1) { + if (fieldStats.isCountIfUndefined()) + return 0.0; + } else { + if (fieldStats.getResult() < fieldStats.getThreshold()) + return 0.0; + } - } - return 1.0; - } + } + return 1.0; + } - public double getFinalScore(AggType aggregation){ + public double getFinalScore(AggType aggregation) { - switch (aggregation){ - case AVG: - return scoreSum()/fieldsCount(); - case SUM: - return scoreSum(); - case MAX: - return max(); - case MIN: - return min(); - case W_MEAN: - return weightedScoreSum()/weightSum(); - case OR: - return or(); - case AND: - return and(); - default: - return 0.0; - } - } + switch (aggregation) { + case AVG: + return scoreSum() / fieldsCount(); + case SUM: + return scoreSum(); + case MAX: + return max(); + case MIN: + return min(); + case W_MEAN: + return weightedScoreSum() / weightSum(); + case OR: + return or(); + case AND: + return and(); + default: + return 0.0; + } + } } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeProcessor.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeProcessor.java index 4828a5dd8..04e16be34 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeProcessor.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeProcessor.java @@ -1,16 +1,17 @@ + package eu.dnetlib.pace.tree.support; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.model.MapDocument; import eu.dnetlib.pace.util.PaceException; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - /** * The compare between two documents is given by the weighted mean of the field distances */ -public class TreeProcessor{ +public class TreeProcessor { private static final Log log = LogFactory.getLog(TreeProcessor.class); @@ -21,35 +22,34 @@ public class TreeProcessor{ } public boolean compare(final MapDocument a, final MapDocument b) { - //evaluate the decision tree + // evaluate the decision tree return evaluateTree(a, b).getResult() == MatchType.MATCH; } - public TreeStats evaluateTree(final MapDocument doc1, final MapDocument doc2){ + public TreeStats evaluateTree(final MapDocument doc1, final MapDocument doc2) { TreeStats treeStats = new TreeStats(); String current = "start"; - while (MatchType.parse(current)==MatchType.UNDEFINED) { + while (MatchType.parse(current) == MatchType.UNDEFINED) { TreeNodeDef currentNode = config.decisionTree().get(current); - //throw an exception if the node doesn't exist + // throw an exception if the node doesn't exist if (currentNode == null) throw new PaceException("Missing tree node: " + current); TreeNodeStats stats = currentNode.evaluate(doc1, doc2, config); treeStats.addNodeStats(current, stats); - //if ignoreUndefined=false the miss is considered as undefined - if (!currentNode.isIgnoreUndefined() && stats.undefinedCount()>0) { + // if ignoreUndefined=false the miss is considered as undefined + if (!currentNode.isIgnoreUndefined() && stats.undefinedCount() > 0) { current = currentNode.getUndefined(); } - //if ignoreUndefined=true the miss is ignored and the score computed anyway + // if ignoreUndefined=true the miss is ignored and the score computed anyway else if (stats.getFinalScore(currentNode.getAggregation()) >= currentNode.getThreshold()) { current = currentNode.getPositive(); - } - else { + } else { current = currentNode.getNegative(); } @@ -63,25 +63,24 @@ public class TreeProcessor{ String current = "start"; double score = 0.0; - while (MatchType.parse(current)==MatchType.UNDEFINED) { + while (MatchType.parse(current) == MatchType.UNDEFINED) { TreeNodeDef currentNode = config.decisionTree().get(current); - //throw an exception if the node doesn't exist + // throw an exception if the node doesn't exist if (currentNode == null) throw new PaceException("The Tree Node doesn't exist: " + current); TreeNodeStats stats = currentNode.evaluate(doc1, doc2, config); score = stats.getFinalScore(currentNode.getAggregation()); - //if ignoreUndefined=false the miss is considered as undefined - if (!currentNode.isIgnoreUndefined() && stats.undefinedCount()>0) { + // if ignoreUndefined=false the miss is considered as undefined + if (!currentNode.isIgnoreUndefined() && stats.undefinedCount() > 0) { current = currentNode.getUndefined(); } - //if ignoreUndefined=true the miss is ignored and the score computed anyway + // if ignoreUndefined=true the miss is ignored and the score computed anyway else if (stats.getFinalScore(currentNode.getAggregation()) >= currentNode.getThreshold()) { current = currentNode.getPositive(); - } - else { + } else { current = currentNode.getNegative(); } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeStats.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeStats.java index 186e8d11e..9a7f38f47 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeStats.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeStats.java @@ -1,51 +1,52 @@ -package eu.dnetlib.pace.tree.support; -import eu.dnetlib.pace.util.PaceException; -import com.fasterxml.jackson.databind.ObjectMapper; +package eu.dnetlib.pace.tree.support; import java.io.IOException; import java.util.HashMap; import java.util.Map; +import com.fasterxml.jackson.databind.ObjectMapper; + +import eu.dnetlib.pace.util.PaceException; + public class TreeStats { - //> - Map stats; - MatchType result; + // > + Map stats; + MatchType result; - public TreeStats(){ - this.stats = new HashMap<>(); - this.result = MatchType.NO_MATCH; - } + public TreeStats() { + this.stats = new HashMap<>(); + this.result = MatchType.NO_MATCH; + } - public MatchType getResult(){ - return this.result; - } + public MatchType getResult() { + return this.result; + } - public void setResult(MatchType result){ - this.result = result; - } + public void setResult(MatchType result) { + this.result = result; + } - public Map getStats() { - return stats; - } + public Map getStats() { + return stats; + } - public void setStats(Map stats) { - this.stats = stats; - } + public void setStats(Map stats) { + this.stats = stats; + } - public void addNodeStats(String layerID, TreeNodeStats treeNodeStats){ - this.stats.put(layerID, treeNodeStats); - } - - @Override - public String toString(){ - try { - return new ObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(this); - } catch (IOException e) { - throw new PaceException("Impossible to convert to JSON: ", e); - } - } + public void addNodeStats(String layerID, TreeNodeStats treeNodeStats) { + this.stats.put(layerID, treeNodeStats); + } + @Override + public String toString() { + try { + return new ObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(this); + } catch (IOException e) { + throw new PaceException("Impossible to convert to JSON: ", e); + } + } } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java index f1eefc3ea..4053a123c 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java @@ -1,192 +1,217 @@ + package eu.dnetlib.pace.util; -import com.google.common.collect.Lists; -import eu.dnetlib.pace.clustering.NGramUtils; -import eu.dnetlib.pace.config.DedupConfig; -import eu.dnetlib.pace.config.WfConfig; -import eu.dnetlib.pace.tree.support.TreeProcessor; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.model.MapDocument; -import eu.dnetlib.pace.model.MapDocumentComparator; +import java.util.*; + import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import java.util.*; +import com.google.common.collect.Lists; + +import eu.dnetlib.pace.clustering.NGramUtils; +import eu.dnetlib.pace.config.DedupConfig; +import eu.dnetlib.pace.config.WfConfig; +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.MapDocument; +import eu.dnetlib.pace.model.MapDocumentComparator; +import eu.dnetlib.pace.tree.support.TreeProcessor; public class BlockProcessor { - public static final List accumulators= new ArrayList<>(); + public static final List accumulators = new ArrayList<>(); - private static final Log log = LogFactory.getLog(BlockProcessor.class); + private static final Log log = LogFactory.getLog(BlockProcessor.class); - private DedupConfig dedupConf; + private DedupConfig dedupConf; - public static void constructAccumulator( final DedupConfig dedupConf) { - accumulators.add(String.format("%s::%s",dedupConf.getWf().getEntityType(), "records per hash key = 1")); - accumulators.add(String.format("%s::%s",dedupConf.getWf().getEntityType(), "missing " + dedupConf.getWf().getOrderField())); - accumulators.add(String.format("%s::%s",dedupConf.getWf().getEntityType(), String.format("Skipped records for count(%s) >= %s", dedupConf.getWf().getOrderField(), dedupConf.getWf().getGroupMaxSize()))); - accumulators.add(String.format("%s::%s",dedupConf.getWf().getEntityType(), "skip list")); - accumulators.add(String.format("%s::%s",dedupConf.getWf().getEntityType(), "dedupSimilarity (x2)")); - accumulators.add(String.format("%s::%s",dedupConf.getWf().getEntityType(), "d < " + dedupConf.getWf().getThreshold())); - } + public static void constructAccumulator(final DedupConfig dedupConf) { + accumulators.add(String.format("%s::%s", dedupConf.getWf().getEntityType(), "records per hash key = 1")); + accumulators + .add( + String + .format( + "%s::%s", dedupConf.getWf().getEntityType(), "missing " + dedupConf.getWf().getOrderField())); + accumulators + .add( + String + .format( + "%s::%s", dedupConf.getWf().getEntityType(), + String + .format( + "Skipped records for count(%s) >= %s", dedupConf.getWf().getOrderField(), + dedupConf.getWf().getGroupMaxSize()))); + accumulators.add(String.format("%s::%s", dedupConf.getWf().getEntityType(), "skip list")); + accumulators.add(String.format("%s::%s", dedupConf.getWf().getEntityType(), "dedupSimilarity (x2)")); + accumulators + .add(String.format("%s::%s", dedupConf.getWf().getEntityType(), "d < " + dedupConf.getWf().getThreshold())); + } - public BlockProcessor(DedupConfig dedupConf) { - this.dedupConf = dedupConf; - } + public BlockProcessor(DedupConfig dedupConf) { + this.dedupConf = dedupConf; + } - public void processSortedBlock(final String key, final List documents, final Reporter context) { - if (documents.size() > 1) { + public void processSortedBlock(final String key, final List documents, final Reporter context) { + if (documents.size() > 1) { // log.info("reducing key: '" + key + "' records: " + q.size()); - process(prepare(documents), context); + process(prepare(documents), context); - } else { - context.incrementCounter(dedupConf.getWf().getEntityType(), "records per hash key = 1", 1); - } - } + } else { + context.incrementCounter(dedupConf.getWf().getEntityType(), "records per hash key = 1", 1); + } + } - public void process(final String key, final Iterable documents, final Reporter context) { + public void process(final String key, final Iterable documents, final Reporter context) { - final Queue q = prepare(documents); + final Queue q = prepare(documents); - if (q.size() > 1) { + if (q.size() > 1) { // log.info("reducing key: '" + key + "' records: " + q.size()); - process(simplifyQueue(q, key, context), context); + process(simplifyQueue(q, key, context), context); - } else { - context.incrementCounter(dedupConf.getWf().getEntityType(), "records per hash key = 1", 1); - } - } + } else { + context.incrementCounter(dedupConf.getWf().getEntityType(), "records per hash key = 1", 1); + } + } - private Queue prepare(final Iterable documents) { - final Queue queue = new PriorityQueue<>(100, new MapDocumentComparator(dedupConf.getWf().getOrderField())); + private Queue prepare(final Iterable documents) { + final Queue queue = new PriorityQueue<>(100, + new MapDocumentComparator(dedupConf.getWf().getOrderField())); - final Set seen = new HashSet(); - final int queueMaxSize = dedupConf.getWf().getQueueMaxSize(); + final Set seen = new HashSet(); + final int queueMaxSize = dedupConf.getWf().getQueueMaxSize(); - documents.forEach(doc -> { - if (queue.size() <= queueMaxSize) { - final String id = doc.getIdentifier(); + documents.forEach(doc -> { + if (queue.size() <= queueMaxSize) { + final String id = doc.getIdentifier(); - if (!seen.contains(id)) { - seen.add(id); - queue.add(doc); - } - } - }); + if (!seen.contains(id)) { + seen.add(id); + queue.add(doc); + } + } + }); - return queue; - } + return queue; + } - private Queue simplifyQueue(final Queue queue, final String ngram, final Reporter context) { - final Queue q = new LinkedList<>(); + private Queue simplifyQueue(final Queue queue, final String ngram, + final Reporter context) { + final Queue q = new LinkedList<>(); - String fieldRef = ""; - final List tempResults = Lists.newArrayList(); + String fieldRef = ""; + final List tempResults = Lists.newArrayList(); - while (!queue.isEmpty()) { - final MapDocument result = queue.remove(); + while (!queue.isEmpty()) { + final MapDocument result = queue.remove(); - final String orderFieldName = dedupConf.getWf().getOrderField(); - final Field orderFieldValue = result.values(orderFieldName); - if (!orderFieldValue.isEmpty()) { - final String field = NGramUtils.cleanupForOrdering(orderFieldValue.stringValue()); - if (field.equals(fieldRef)) { - tempResults.add(result); - } else { - populateSimplifiedQueue(q, tempResults, context, fieldRef, ngram); - tempResults.clear(); - tempResults.add(result); - fieldRef = field; - } - } else { - context.incrementCounter(dedupConf.getWf().getEntityType(), "missing " + dedupConf.getWf().getOrderField(), 1); - } - } - populateSimplifiedQueue(q, tempResults, context, fieldRef, ngram); + final String orderFieldName = dedupConf.getWf().getOrderField(); + final Field orderFieldValue = result.values(orderFieldName); + if (!orderFieldValue.isEmpty()) { + final String field = NGramUtils.cleanupForOrdering(orderFieldValue.stringValue()); + if (field.equals(fieldRef)) { + tempResults.add(result); + } else { + populateSimplifiedQueue(q, tempResults, context, fieldRef, ngram); + tempResults.clear(); + tempResults.add(result); + fieldRef = field; + } + } else { + context + .incrementCounter( + dedupConf.getWf().getEntityType(), "missing " + dedupConf.getWf().getOrderField(), 1); + } + } + populateSimplifiedQueue(q, tempResults, context, fieldRef, ngram); - return q; - } + return q; + } - private void populateSimplifiedQueue(final Queue q, - final List tempResults, - final Reporter context, - final String fieldRef, - final String ngram) { - WfConfig wf = dedupConf.getWf(); - if (tempResults.size() < wf.getGroupMaxSize()) { - q.addAll(tempResults); - } else { - context.incrementCounter(wf.getEntityType(), String.format("Skipped records for count(%s) >= %s", wf.getOrderField(), wf.getGroupMaxSize()), tempResults.size()); + private void populateSimplifiedQueue(final Queue q, + final List tempResults, + final Reporter context, + final String fieldRef, + final String ngram) { + WfConfig wf = dedupConf.getWf(); + if (tempResults.size() < wf.getGroupMaxSize()) { + q.addAll(tempResults); + } else { + context + .incrementCounter( + wf.getEntityType(), + String.format("Skipped records for count(%s) >= %s", wf.getOrderField(), wf.getGroupMaxSize()), + tempResults.size()); // log.info("Skipped field: " + fieldRef + " - size: " + tempResults.size() + " - ngram: " + ngram); - } - } + } + } - private void process(final Queue queue, final Reporter context) { + private void process(final Queue queue, final Reporter context) { - while (!queue.isEmpty()) { + while (!queue.isEmpty()) { - final MapDocument pivot = queue.remove(); - final String idPivot = pivot.getIdentifier(); + final MapDocument pivot = queue.remove(); + final String idPivot = pivot.getIdentifier(); - WfConfig wf = dedupConf.getWf(); - final Field fieldsPivot = pivot.values(wf.getOrderField()); - final String fieldPivot = (fieldsPivot == null) || fieldsPivot.isEmpty() ? "" : fieldsPivot.stringValue(); + WfConfig wf = dedupConf.getWf(); + final Field fieldsPivot = pivot.values(wf.getOrderField()); + final String fieldPivot = (fieldsPivot == null) || fieldsPivot.isEmpty() ? "" : fieldsPivot.stringValue(); - if (fieldPivot != null) { - int i = 0; - for (final MapDocument curr : queue) { - final String idCurr = curr.getIdentifier(); + if (fieldPivot != null) { + int i = 0; + for (final MapDocument curr : queue) { + final String idCurr = curr.getIdentifier(); - if (mustSkip(idCurr)) { + if (mustSkip(idCurr)) { - context.incrementCounter(wf.getEntityType(), "skip list", 1); + context.incrementCounter(wf.getEntityType(), "skip list", 1); - break; - } + break; + } - if (i > wf.getSlidingWindowSize()) { - break; - } + if (i > wf.getSlidingWindowSize()) { + break; + } - final Field fieldsCurr = curr.values(wf.getOrderField()); - final String fieldCurr = (fieldsCurr == null) || fieldsCurr.isEmpty() ? null : fieldsCurr.stringValue(); + final Field fieldsCurr = curr.values(wf.getOrderField()); + final String fieldCurr = (fieldsCurr == null) || fieldsCurr.isEmpty() ? null + : fieldsCurr.stringValue(); - if (!idCurr.equals(idPivot) && (fieldCurr != null)) { + if (!idCurr.equals(idPivot) && (fieldCurr != null)) { - final TreeProcessor treeProcessor = new TreeProcessor(dedupConf); + final TreeProcessor treeProcessor = new TreeProcessor(dedupConf); - emitOutput(treeProcessor.compare(pivot, curr), idPivot, idCurr, context); + emitOutput(treeProcessor.compare(pivot, curr), idPivot, idCurr, context); - } - } - } - } - } + } + } + } + } + } - private void emitOutput(final boolean result, final String idPivot, final String idCurr, final Reporter context) { + private void emitOutput(final boolean result, final String idPivot, final String idCurr, final Reporter context) { - if (result) { - writeSimilarity(context, idPivot, idCurr); - context.incrementCounter(dedupConf.getWf().getEntityType(), "dedupSimilarity (x2)", 1); - } else { - context.incrementCounter(dedupConf.getWf().getEntityType(), "d < " + dedupConf.getWf().getThreshold(), 1); - } - } + if (result) { + writeSimilarity(context, idPivot, idCurr); + context.incrementCounter(dedupConf.getWf().getEntityType(), "dedupSimilarity (x2)", 1); + } else { + context.incrementCounter(dedupConf.getWf().getEntityType(), "d < " + dedupConf.getWf().getThreshold(), 1); + } + } - private boolean mustSkip(final String idPivot) { - return dedupConf.getWf().getSkipList().contains(getNsPrefix(idPivot)); - } + private boolean mustSkip(final String idPivot) { + return dedupConf.getWf().getSkipList().contains(getNsPrefix(idPivot)); + } - private String getNsPrefix(final String id) { - return StringUtils.substringBetween(id, "|", "::"); - } + private String getNsPrefix(final String id) { + return StringUtils.substringBetween(id, "|", "::"); + } - private void writeSimilarity(final Reporter context, final String from, final String to) { - final String type = dedupConf.getWf().getEntityType(); + private void writeSimilarity(final Reporter context, final String from, final String to) { + final String type = dedupConf.getWf().getEntityType(); - context.emit(type, from, to); - context.emit(type, to, from); - } + context.emit(type, from, to); + context.emit(type, to, from); + } } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessorForTesting.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessorForTesting.java index 24264c0bf..40f502e11 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessorForTesting.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessorForTesting.java @@ -1,6 +1,14 @@ + package eu.dnetlib.pace.util; +import java.util.*; + +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + import com.google.common.collect.Lists; + import eu.dnetlib.pace.clustering.NGramUtils; import eu.dnetlib.pace.config.DedupConfig; import eu.dnetlib.pace.config.WfConfig; @@ -9,240 +17,260 @@ import eu.dnetlib.pace.model.MapDocument; import eu.dnetlib.pace.model.MapDocumentComparator; import eu.dnetlib.pace.tree.*; import eu.dnetlib.pace.tree.support.TreeProcessor; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import java.util.*; public class BlockProcessorForTesting { - public static final List accumulators= new ArrayList<>(); + public static final List accumulators = new ArrayList<>(); - private static final Log log = LogFactory.getLog(eu.dnetlib.pace.util.BlockProcessorForTesting.class); + private static final Log log = LogFactory.getLog(eu.dnetlib.pace.util.BlockProcessorForTesting.class); - private DedupConfig dedupConf; + private DedupConfig dedupConf; - public static void constructAccumulator( final DedupConfig dedupConf) { - accumulators.add(String.format("%s::%s",dedupConf.getWf().getEntityType(), "records per hash key = 1")); - accumulators.add(String.format("%s::%s",dedupConf.getWf().getEntityType(), "missing " + dedupConf.getWf().getOrderField())); - accumulators.add(String.format("%s::%s",dedupConf.getWf().getEntityType(), String.format("Skipped records for count(%s) >= %s", dedupConf.getWf().getOrderField(), dedupConf.getWf().getGroupMaxSize()))); - accumulators.add(String.format("%s::%s",dedupConf.getWf().getEntityType(), "skip list")); - accumulators.add(String.format("%s::%s",dedupConf.getWf().getEntityType(), "dedupSimilarity (x2)")); - accumulators.add(String.format("%s::%s",dedupConf.getWf().getEntityType(), "d < " + dedupConf.getWf().getThreshold())); - } + public static void constructAccumulator(final DedupConfig dedupConf) { + accumulators.add(String.format("%s::%s", dedupConf.getWf().getEntityType(), "records per hash key = 1")); + accumulators + .add( + String + .format( + "%s::%s", dedupConf.getWf().getEntityType(), "missing " + dedupConf.getWf().getOrderField())); + accumulators + .add( + String + .format( + "%s::%s", dedupConf.getWf().getEntityType(), + String + .format( + "Skipped records for count(%s) >= %s", dedupConf.getWf().getOrderField(), + dedupConf.getWf().getGroupMaxSize()))); + accumulators.add(String.format("%s::%s", dedupConf.getWf().getEntityType(), "skip list")); + accumulators.add(String.format("%s::%s", dedupConf.getWf().getEntityType(), "dedupSimilarity (x2)")); + accumulators + .add(String.format("%s::%s", dedupConf.getWf().getEntityType(), "d < " + dedupConf.getWf().getThreshold())); + } - public BlockProcessorForTesting(DedupConfig dedupConf) { - this.dedupConf = dedupConf; - } + public BlockProcessorForTesting(DedupConfig dedupConf) { + this.dedupConf = dedupConf; + } - public void processSortedBlock(final String key, final List documents, final Reporter context, boolean useTree, boolean noMatch) { - if (documents.size() > 1) { + public void processSortedBlock(final String key, final List documents, final Reporter context, + boolean useTree, boolean noMatch) { + if (documents.size() > 1) { // log.info("reducing key: '" + key + "' records: " + q.size()); - process(prepare(documents), context, useTree, noMatch); + process(prepare(documents), context, useTree, noMatch); - } else { - context.incrementCounter(dedupConf.getWf().getEntityType(), "records per hash key = 1", 1); - } - } + } else { + context.incrementCounter(dedupConf.getWf().getEntityType(), "records per hash key = 1", 1); + } + } - public void process(final String key, final Iterable documents, final Reporter context, boolean useTree, boolean noMatch) { + public void process(final String key, final Iterable documents, final Reporter context, + boolean useTree, boolean noMatch) { - final Queue q = prepare(documents); + final Queue q = prepare(documents); - if (q.size() > 1) { + if (q.size() > 1) { // log.info("reducing key: '" + key + "' records: " + q.size()); - process(simplifyQueue(q, key, context), context, useTree, noMatch); + process(simplifyQueue(q, key, context), context, useTree, noMatch); - } else { - context.incrementCounter(dedupConf.getWf().getEntityType(), "records per hash key = 1", 1); - } - } + } else { + context.incrementCounter(dedupConf.getWf().getEntityType(), "records per hash key = 1", 1); + } + } - private Queue prepare(final Iterable documents) { - final Queue queue = new PriorityQueue<>(100, new MapDocumentComparator(dedupConf.getWf().getOrderField())); + private Queue prepare(final Iterable documents) { + final Queue queue = new PriorityQueue<>(100, + new MapDocumentComparator(dedupConf.getWf().getOrderField())); - final Set seen = new HashSet(); - final int queueMaxSize = dedupConf.getWf().getQueueMaxSize(); + final Set seen = new HashSet(); + final int queueMaxSize = dedupConf.getWf().getQueueMaxSize(); - documents.forEach(doc -> { - if (queue.size() <= queueMaxSize) { - final String id = doc.getIdentifier(); + documents.forEach(doc -> { + if (queue.size() <= queueMaxSize) { + final String id = doc.getIdentifier(); - if (!seen.contains(id)) { - seen.add(id); - queue.add(doc); - } - } - }); + if (!seen.contains(id)) { + seen.add(id); + queue.add(doc); + } + } + }); - return queue; - } + return queue; + } - private Queue simplifyQueue(final Queue queue, final String ngram, final Reporter context) { - final Queue q = new LinkedList<>(); + private Queue simplifyQueue(final Queue queue, final String ngram, + final Reporter context) { + final Queue q = new LinkedList<>(); - String fieldRef = ""; - final List tempResults = Lists.newArrayList(); + String fieldRef = ""; + final List tempResults = Lists.newArrayList(); - while (!queue.isEmpty()) { - final MapDocument result = queue.remove(); + while (!queue.isEmpty()) { + final MapDocument result = queue.remove(); - final String orderFieldName = dedupConf.getWf().getOrderField(); - final Field orderFieldValue = result.values(orderFieldName); - if (!orderFieldValue.isEmpty()) { - final String field = NGramUtils.cleanupForOrdering(orderFieldValue.stringValue()); - if (field.equals(fieldRef)) { - tempResults.add(result); - } else { - populateSimplifiedQueue(q, tempResults, context, fieldRef, ngram); - tempResults.clear(); - tempResults.add(result); - fieldRef = field; - } - } else { - context.incrementCounter(dedupConf.getWf().getEntityType(), "missing " + dedupConf.getWf().getOrderField(), 1); - } - } - populateSimplifiedQueue(q, tempResults, context, fieldRef, ngram); + final String orderFieldName = dedupConf.getWf().getOrderField(); + final Field orderFieldValue = result.values(orderFieldName); + if (!orderFieldValue.isEmpty()) { + final String field = NGramUtils.cleanupForOrdering(orderFieldValue.stringValue()); + if (field.equals(fieldRef)) { + tempResults.add(result); + } else { + populateSimplifiedQueue(q, tempResults, context, fieldRef, ngram); + tempResults.clear(); + tempResults.add(result); + fieldRef = field; + } + } else { + context + .incrementCounter( + dedupConf.getWf().getEntityType(), "missing " + dedupConf.getWf().getOrderField(), 1); + } + } + populateSimplifiedQueue(q, tempResults, context, fieldRef, ngram); - return q; - } + return q; + } - private void populateSimplifiedQueue(final Queue q, - final List tempResults, - final Reporter context, - final String fieldRef, - final String ngram) { - WfConfig wf = dedupConf.getWf(); - if (tempResults.size() < wf.getGroupMaxSize()) { - q.addAll(tempResults); - } else { - context.incrementCounter(wf.getEntityType(), String.format("Skipped records for count(%s) >= %s", wf.getOrderField(), wf.getGroupMaxSize()), tempResults.size()); + private void populateSimplifiedQueue(final Queue q, + final List tempResults, + final Reporter context, + final String fieldRef, + final String ngram) { + WfConfig wf = dedupConf.getWf(); + if (tempResults.size() < wf.getGroupMaxSize()) { + q.addAll(tempResults); + } else { + context + .incrementCounter( + wf.getEntityType(), + String.format("Skipped records for count(%s) >= %s", wf.getOrderField(), wf.getGroupMaxSize()), + tempResults.size()); // log.info("Skipped field: " + fieldRef + " - size: " + tempResults.size() + " - ngram: " + ngram); - } - } + } + } - private void process(final Queue queue, final Reporter context, boolean useTree, boolean noMatch) { + private void process(final Queue queue, final Reporter context, boolean useTree, boolean noMatch) { - while (!queue.isEmpty()) { + while (!queue.isEmpty()) { - final MapDocument pivot = queue.remove(); - final String idPivot = pivot.getIdentifier(); + final MapDocument pivot = queue.remove(); + final String idPivot = pivot.getIdentifier(); - WfConfig wf = dedupConf.getWf(); - final Field fieldsPivot = pivot.values(wf.getOrderField()); - final String fieldPivot = (fieldsPivot == null) || fieldsPivot.isEmpty() ? "" : fieldsPivot.stringValue(); + WfConfig wf = dedupConf.getWf(); + final Field fieldsPivot = pivot.values(wf.getOrderField()); + final String fieldPivot = (fieldsPivot == null) || fieldsPivot.isEmpty() ? "" : fieldsPivot.stringValue(); - if (fieldPivot != null) { - int i = 0; - for (final MapDocument curr : queue) { - final String idCurr = curr.getIdentifier(); + if (fieldPivot != null) { + int i = 0; + for (final MapDocument curr : queue) { + final String idCurr = curr.getIdentifier(); - if (mustSkip(idCurr)) { + if (mustSkip(idCurr)) { - context.incrementCounter(wf.getEntityType(), "skip list", 1); + context.incrementCounter(wf.getEntityType(), "skip list", 1); - break; - } + break; + } - if (i > wf.getSlidingWindowSize()) { - break; - } + if (i > wf.getSlidingWindowSize()) { + break; + } - final Field fieldsCurr = curr.values(wf.getOrderField()); - final String fieldCurr = (fieldsCurr == null) || fieldsCurr.isEmpty() ? null : fieldsCurr.stringValue(); + final Field fieldsCurr = curr.values(wf.getOrderField()); + final String fieldCurr = (fieldsCurr == null) || fieldsCurr.isEmpty() ? null + : fieldsCurr.stringValue(); - if (!idCurr.equals(idPivot) && (fieldCurr != null)) { + if (!idCurr.equals(idPivot) && (fieldCurr != null)) { - //draws no match relations (test purpose) - if (noMatch) { - emitOutput(!new TreeProcessor(dedupConf).compare(pivot, curr), idPivot, idCurr, context); - } - else { - //use the decision tree implementation or the "normal" implementation of the similarity score (valid only for publications) - if (useTree) - emitOutput(new TreeProcessor(dedupConf).compare(pivot, curr), idPivot, idCurr, context); - else - emitOutput(publicationCompare(pivot, curr, dedupConf), idPivot, idCurr, context); - } + // draws no match relations (test purpose) + if (noMatch) { + emitOutput(!new TreeProcessor(dedupConf).compare(pivot, curr), idPivot, idCurr, context); + } else { + // use the decision tree implementation or the "normal" implementation of the similarity + // score (valid only for publications) + if (useTree) + emitOutput(new TreeProcessor(dedupConf).compare(pivot, curr), idPivot, idCurr, context); + else + emitOutput(publicationCompare(pivot, curr, dedupConf), idPivot, idCurr, context); + } // if(new TreeProcessor(dedupConf).compare(pivot, curr) != publicationCompare(pivot, curr, dedupConf)) { // emitOutput(true, idPivot, idCurr, context); // } - } - } - } - } - } + } + } + } + } + } - protected static boolean compareInstanceType(MapDocument a, MapDocument b, DedupConfig conf) { - Map params = new HashMap<>(); - InstanceTypeMatch instanceTypeMatch = new InstanceTypeMatch(params); - double compare = instanceTypeMatch.compare(a.getFieldMap().get("instance"), b.getFieldMap().get("instance"), conf); - return compare>=1.0; - } + protected static boolean compareInstanceType(MapDocument a, MapDocument b, DedupConfig conf) { + Map params = new HashMap<>(); + InstanceTypeMatch instanceTypeMatch = new InstanceTypeMatch(params); + double compare = instanceTypeMatch + .compare(a.getFieldMap().get("instance"), b.getFieldMap().get("instance"), conf); + return compare >= 1.0; + } - private boolean publicationCompare(MapDocument a, MapDocument b, DedupConfig config) { - //if the score gives 1, the publications are equivalent - Map params = new HashMap<>(); - params.put("jpath_value", "$.value"); - params.put("jpath_classid", "$.qualifier.classid"); - params.put("mode", "count"); + private boolean publicationCompare(MapDocument a, MapDocument b, DedupConfig config) { + // if the score gives 1, the publications are equivalent + Map params = new HashMap<>(); + params.put("jpath_value", "$.value"); + params.put("jpath_classid", "$.qualifier.classid"); + params.put("mode", "count"); - double score = 0.0; + double score = 0.0; - //levenstein title - LevensteinTitle levensteinTitle = new LevensteinTitle(params); - if(levensteinTitle.compare(a.getFieldMap().get("title"), b.getFieldMap().get("title"), config) >= 0.9) { - score += 0.2; - } + // levenstein title + LevensteinTitle levensteinTitle = new LevensteinTitle(params); + if (levensteinTitle.compare(a.getFieldMap().get("title"), b.getFieldMap().get("title"), config) >= 0.9) { + score += 0.2; + } - //pid - JsonListMatch jsonListMatch = new JsonListMatch(params); - if (jsonListMatch.compare(a.getFieldMap().get("pid"), b.getFieldMap().get("pid"), config) >= 1.0) { - score += 0.5; - } + // pid + JsonListMatch jsonListMatch = new JsonListMatch(params); + if (jsonListMatch.compare(a.getFieldMap().get("pid"), b.getFieldMap().get("pid"), config) >= 1.0) { + score += 0.5; + } - //title version - TitleVersionMatch titleVersionMatch = new TitleVersionMatch(params); - double result1 = titleVersionMatch.compare(a.getFieldMap().get("title"), b.getFieldMap().get("title"), config); - if(result1<0 || result1>=1.0) { - score += 0.1; - } + // title version + TitleVersionMatch titleVersionMatch = new TitleVersionMatch(params); + double result1 = titleVersionMatch.compare(a.getFieldMap().get("title"), b.getFieldMap().get("title"), config); + if (result1 < 0 || result1 >= 1.0) { + score += 0.1; + } - //authors match - params.remove("mode"); - AuthorsMatch authorsMatch = new AuthorsMatch(params); - double result2 = authorsMatch.compare(a.getFieldMap().get("authors"), b.getFieldMap().get("authors"), config); - if(result2 <0|| result2>=0.6) { - score += 0.2; - } + // authors match + params.remove("mode"); + AuthorsMatch authorsMatch = new AuthorsMatch(params); + double result2 = authorsMatch.compare(a.getFieldMap().get("authors"), b.getFieldMap().get("authors"), config); + if (result2 < 0 || result2 >= 0.6) { + score += 0.2; + } - return score>=0.5; - } + return score >= 0.5; + } - private void emitOutput(final boolean result, final String idPivot, final String idCurr, final Reporter context) { + private void emitOutput(final boolean result, final String idPivot, final String idCurr, final Reporter context) { - if (result) { - writeSimilarity(context, idPivot, idCurr); - context.incrementCounter(dedupConf.getWf().getEntityType(), "dedupSimilarity (x2)", 1); - } else { - context.incrementCounter(dedupConf.getWf().getEntityType(), "d < " + dedupConf.getWf().getThreshold(), 1); - } - } + if (result) { + writeSimilarity(context, idPivot, idCurr); + context.incrementCounter(dedupConf.getWf().getEntityType(), "dedupSimilarity (x2)", 1); + } else { + context.incrementCounter(dedupConf.getWf().getEntityType(), "d < " + dedupConf.getWf().getThreshold(), 1); + } + } - private boolean mustSkip(final String idPivot) { - return dedupConf.getWf().getSkipList().contains(getNsPrefix(idPivot)); - } + private boolean mustSkip(final String idPivot) { + return dedupConf.getWf().getSkipList().contains(getNsPrefix(idPivot)); + } - private String getNsPrefix(final String id) { - return StringUtils.substringBetween(id, "|", "::"); - } + private String getNsPrefix(final String id) { + return StringUtils.substringBetween(id, "|", "::"); + } - private void writeSimilarity(final Reporter context, final String from, final String to) { - final String type = dedupConf.getWf().getEntityType(); + private void writeSimilarity(final Reporter context, final String from, final String to) { + final String type = dedupConf.getWf().getEntityType(); - context.emit(type, from, to); - } + context.emit(type, from, to); + } } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/Capitalise.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/Capitalise.java index 2de729045..403d91dd9 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/Capitalise.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/Capitalise.java @@ -1,15 +1,18 @@ + package eu.dnetlib.pace.util; +import org.apache.commons.lang3.text.WordUtils; import com.google.common.base.Function; -import org.apache.commons.lang3.text.WordUtils; public class Capitalise implements Function { - private final char[] DELIM = {' ', '-'}; + private final char[] DELIM = { + ' ', '-' + }; - @Override - public String apply(final String s) { - return WordUtils.capitalize(s.toLowerCase(), DELIM); - } + @Override + public String apply(final String s) { + return WordUtils.capitalize(s.toLowerCase(), DELIM); + } }; diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/DiffPatchMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/DiffPatchMatch.java index 45e011fdd..84d49bd5c 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/DiffPatchMatch.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/DiffPatchMatch.java @@ -1,3 +1,4 @@ + package eu.dnetlib.pace.util; /* @@ -17,7 +18,6 @@ package eu.dnetlib.pace.util; * See the License for the specific language governing permissions and * limitations under the License. */ - import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder; @@ -39,2433 +39,2498 @@ import java.util.regex.Pattern; */ public class DiffPatchMatch { - // Defaults. - // Set these on your diff_match_patch instance to override the defaults. - - /** - * Number of seconds to map a diff before giving up (0 for infinity). - */ - public float Diff_Timeout = 1.0f; - /** - * Cost of an empty edit operation in terms of edit characters. - */ - public short Diff_EditCost = 4; - /** - * At what point is no match declared (0.0 = perfection, 1.0 = very loose). - */ - public float Match_Threshold = 0.5f; - /** - * How far to search for a match (0 = exact location, 1000+ = broad match). - * A match this many characters away from the expected location will add - * 1.0 to the score (0.0 is a perfect match). - */ - public int Match_Distance = 1000; - /** - * When deleting a large block of text (over ~64 characters), how close do - * the contents have to be to match the expected contents. (0.0 = perfection, - * 1.0 = very loose). Note that Match_Threshold controls how closely the - * end points of a delete need to match. - */ - public float Patch_DeleteThreshold = 0.5f; - /** - * Chunk size for context length. - */ - public short Patch_Margin = 4; - - /** - * The number of bits in an int. - */ - private short Match_MaxBits = 32; - - /** - * Internal class for returning results from diff_linesToChars(). - * Other less paranoid languages just use a three-element array. - */ - protected static class LinesToCharsResult { - protected String chars1; - protected String chars2; - protected List lineArray; - - protected LinesToCharsResult(String chars1, String chars2, - List lineArray) { - this.chars1 = chars1; - this.chars2 = chars2; - this.lineArray = lineArray; - } - } - - - // DIFF FUNCTIONS - - - /** - * The data structure representing a diff is a Linked list of Diff objects: - * {Diff(Operation.DELETE, "Hello"), Diff(Operation.INSERT, "Goodbye"), - * Diff(Operation.EQUAL, " world.")} - * which means: delete "Hello", add "Goodbye" and keep " world." - */ - public enum Operation { - DELETE, INSERT, EQUAL - } - - /** - * Find the differences between two texts. - * Run a faster, slightly less optimal diff. - * This method allows the 'checklines' of diff_main() to be optional. - * Most of the time checklines is wanted, so default to true. - * @param text1 Old string to be diffed. - * @param text2 New string to be diffed. - * @return Linked List of Diff objects. - */ - public LinkedList diff_main(String text1, String text2) { - return diff_main(text1, text2, true); - } - - /** - * Find the differences between two texts. - * @param text1 Old string to be diffed. - * @param text2 New string to be diffed. - * @param checklines Speedup flag. If false, then don't run a - * line-level diff first to identify the changed areas. - * If true, then run a faster slightly less optimal diff. - * @return Linked List of Diff objects. - */ - public LinkedList diff_main(String text1, String text2, - boolean checklines) { - // Set a deadline by which time the diff must be complete. - long deadline; - if (Diff_Timeout <= 0) { - deadline = Long.MAX_VALUE; - } else { - deadline = System.currentTimeMillis() + (long) (Diff_Timeout * 1000); - } - return diff_main(text1, text2, checklines, deadline); - } - - /** - * Find the differences between two texts. Simplifies the problem by - * stripping any common prefix or suffix off the texts before diffing. - * @param text1 Old string to be diffed. - * @param text2 New string to be diffed. - * @param checklines Speedup flag. If false, then don't run a - * line-level diff first to identify the changed areas. - * If true, then run a faster slightly less optimal diff. - * @param deadline Time when the diff should be complete by. Used - * internally for recursive calls. Users should set DiffTimeout instead. - * @return Linked List of Diff objects. - */ - private LinkedList diff_main(String text1, String text2, - boolean checklines, long deadline) { - // Check for null inputs. - if (text1 == null || text2 == null) { - throw new IllegalArgumentException("Null inputs. (diff_main)"); - } - - // Check for equality (speedup). - LinkedList diffs; - if (text1.equals(text2)) { - diffs = new LinkedList(); - if (text1.length() != 0) { - diffs.add(new Diff(Operation.EQUAL, text1)); - } - return diffs; - } - - // Trim off common prefix (speedup). - int commonlength = diff_commonPrefix(text1, text2); - String commonprefix = text1.substring(0, commonlength); - text1 = text1.substring(commonlength); - text2 = text2.substring(commonlength); - - // Trim off common suffix (speedup). - commonlength = diff_commonSuffix(text1, text2); - String commonsuffix = text1.substring(text1.length() - commonlength); - text1 = text1.substring(0, text1.length() - commonlength); - text2 = text2.substring(0, text2.length() - commonlength); - - // Compute the diff on the middle block. - diffs = diff_compute(text1, text2, checklines, deadline); - - // Restore the prefix and suffix. - if (commonprefix.length() != 0) { - diffs.addFirst(new Diff(Operation.EQUAL, commonprefix)); - } - if (commonsuffix.length() != 0) { - diffs.addLast(new Diff(Operation.EQUAL, commonsuffix)); - } - - diff_cleanupMerge(diffs); - return diffs; - } - - /** - * Find the differences between two texts. Assumes that the texts do not - * have any common prefix or suffix. - * @param text1 Old string to be diffed. - * @param text2 New string to be diffed. - * @param checklines Speedup flag. If false, then don't run a - * line-level diff first to identify the changed areas. - * If true, then run a faster slightly less optimal diff. - * @param deadline Time when the diff should be complete by. - * @return Linked List of Diff objects. - */ - private LinkedList diff_compute(String text1, String text2, - boolean checklines, long deadline) { - LinkedList diffs = new LinkedList(); - - if (text1.length() == 0) { - // Just add some text (speedup). - diffs.add(new Diff(Operation.INSERT, text2)); - return diffs; - } - - if (text2.length() == 0) { - // Just delete some text (speedup). - diffs.add(new Diff(Operation.DELETE, text1)); - return diffs; - } - - String longtext = text1.length() > text2.length() ? text1 : text2; - String shorttext = text1.length() > text2.length() ? text2 : text1; - int i = longtext.indexOf(shorttext); - if (i != -1) { - // Shorter text is inside the longer text (speedup). - Operation op = (text1.length() > text2.length()) ? - Operation.DELETE : Operation.INSERT; - diffs.add(new Diff(op, longtext.substring(0, i))); - diffs.add(new Diff(Operation.EQUAL, shorttext)); - diffs.add(new Diff(op, longtext.substring(i + shorttext.length()))); - return diffs; - } - - if (shorttext.length() == 1) { - // Single character string. - // After the previous speedup, the character can't be an equality. - diffs.add(new Diff(Operation.DELETE, text1)); - diffs.add(new Diff(Operation.INSERT, text2)); - return diffs; - } - - // Check to see if the problem can be split in two. - String[] hm = diff_halfMatch(text1, text2); - if (hm != null) { - // A half-match was found, sort out the return data. - String text1_a = hm[0]; - String text1_b = hm[1]; - String text2_a = hm[2]; - String text2_b = hm[3]; - String mid_common = hm[4]; - // Send both pairs off for separate processing. - LinkedList diffs_a = diff_main(text1_a, text2_a, - checklines, deadline); - LinkedList diffs_b = diff_main(text1_b, text2_b, - checklines, deadline); - // Merge the results. - diffs = diffs_a; - diffs.add(new Diff(Operation.EQUAL, mid_common)); - diffs.addAll(diffs_b); - return diffs; - } - - if (checklines && text1.length() > 100 && text2.length() > 100) { - return diff_lineMode(text1, text2, deadline); - } - - return diff_bisect(text1, text2, deadline); - } - - /** - * Do a quick line-level diff on both strings, then rediff the parts for - * greater accuracy. - * This speedup can produce non-minimal diffs. - * @param text1 Old string to be diffed. - * @param text2 New string to be diffed. - * @param deadline Time when the diff should be complete by. - * @return Linked List of Diff objects. - */ - private LinkedList diff_lineMode(String text1, String text2, - long deadline) { - // Scan the text on a line-by-line basis first. - LinesToCharsResult a = diff_linesToChars(text1, text2); - text1 = a.chars1; - text2 = a.chars2; - List linearray = a.lineArray; - - LinkedList diffs = diff_main(text1, text2, false, deadline); - - // Convert the diff back to original text. - diff_charsToLines(diffs, linearray); - // Eliminate freak matches (e.g. blank lines) - diff_cleanupSemantic(diffs); - - // Rediff any replacement blocks, this time character-by-character. - // Add a dummy entry at the end. - diffs.add(new Diff(Operation.EQUAL, "")); - int count_delete = 0; - int count_insert = 0; - String text_delete = ""; - String text_insert = ""; - ListIterator pointer = diffs.listIterator(); - Diff thisDiff = pointer.next(); - while (thisDiff != null) { - switch (thisDiff.operation) { - case INSERT: - count_insert++; - text_insert += thisDiff.text; - break; - case DELETE: - count_delete++; - text_delete += thisDiff.text; - break; - case EQUAL: - // Upon reaching an equality, check for prior redundancies. - if (count_delete >= 1 && count_insert >= 1) { - // Delete the offending records and add the merged ones. - pointer.previous(); - for (int j = 0; j < count_delete + count_insert; j++) { - pointer.previous(); - pointer.remove(); - } - for (Diff subDiff : diff_main(text_delete, text_insert, false, - deadline)) { - pointer.add(subDiff); - } - } - count_insert = 0; - count_delete = 0; - text_delete = ""; - text_insert = ""; - break; - } - thisDiff = pointer.hasNext() ? pointer.next() : null; - } - diffs.removeLast(); // Remove the dummy entry at the end. - - return diffs; - } - - /** - * Find the 'middle snake' of a diff, split the problem in two - * and return the recursively constructed diff. - * See Myers 1986 paper: An O(ND) Difference Algorithm and Its Variations. - * @param text1 Old string to be diffed. - * @param text2 New string to be diffed. - * @param deadline Time at which to bail if not yet complete. - * @return LinkedList of Diff objects. - */ - protected LinkedList diff_bisect(String text1, String text2, - long deadline) { - // Cache the text lengths to prevent multiple calls. - int text1_length = text1.length(); - int text2_length = text2.length(); - int max_d = (text1_length + text2_length + 1) / 2; - int v_offset = max_d; - int v_length = 2 * max_d; - int[] v1 = new int[v_length]; - int[] v2 = new int[v_length]; - for (int x = 0; x < v_length; x++) { - v1[x] = -1; - v2[x] = -1; - } - v1[v_offset + 1] = 0; - v2[v_offset + 1] = 0; - int delta = text1_length - text2_length; - // If the total number of characters is odd, then the front path will - // collide with the reverse path. - boolean front = (delta % 2 != 0); - // Offsets for start and end of k loop. - // Prevents mapping of space beyond the grid. - int k1start = 0; - int k1end = 0; - int k2start = 0; - int k2end = 0; - for (int d = 0; d < max_d; d++) { - // Bail out if deadline is reached. - if (System.currentTimeMillis() > deadline) { - break; - } - - // Walk the front path one step. - for (int k1 = -d + k1start; k1 <= d - k1end; k1 += 2) { - int k1_offset = v_offset + k1; - int x1; - if (k1 == -d || (k1 != d && v1[k1_offset - 1] < v1[k1_offset + 1])) { - x1 = v1[k1_offset + 1]; - } else { - x1 = v1[k1_offset - 1] + 1; - } - int y1 = x1 - k1; - while (x1 < text1_length && y1 < text2_length - && text1.charAt(x1) == text2.charAt(y1)) { - x1++; - y1++; - } - v1[k1_offset] = x1; - if (x1 > text1_length) { - // Ran off the right of the graph. - k1end += 2; - } else if (y1 > text2_length) { - // Ran off the bottom of the graph. - k1start += 2; - } else if (front) { - int k2_offset = v_offset + delta - k1; - if (k2_offset >= 0 && k2_offset < v_length && v2[k2_offset] != -1) { - // Mirror x2 onto top-left coordinate system. - int x2 = text1_length - v2[k2_offset]; - if (x1 >= x2) { - // Overlap detected. - return diff_bisectSplit(text1, text2, x1, y1, deadline); - } - } - } - } - - // Walk the reverse path one step. - for (int k2 = -d + k2start; k2 <= d - k2end; k2 += 2) { - int k2_offset = v_offset + k2; - int x2; - if (k2 == -d || (k2 != d && v2[k2_offset - 1] < v2[k2_offset + 1])) { - x2 = v2[k2_offset + 1]; - } else { - x2 = v2[k2_offset - 1] + 1; - } - int y2 = x2 - k2; - while (x2 < text1_length && y2 < text2_length - && text1.charAt(text1_length - x2 - 1) - == text2.charAt(text2_length - y2 - 1)) { - x2++; - y2++; - } - v2[k2_offset] = x2; - if (x2 > text1_length) { - // Ran off the left of the graph. - k2end += 2; - } else if (y2 > text2_length) { - // Ran off the top of the graph. - k2start += 2; - } else if (!front) { - int k1_offset = v_offset + delta - k2; - if (k1_offset >= 0 && k1_offset < v_length && v1[k1_offset] != -1) { - int x1 = v1[k1_offset]; - int y1 = v_offset + x1 - k1_offset; - // Mirror x2 onto top-left coordinate system. - x2 = text1_length - x2; - if (x1 >= x2) { - // Overlap detected. - return diff_bisectSplit(text1, text2, x1, y1, deadline); - } - } - } - } - } - // Diff took too long and hit the deadline or - // number of diffs equals number of characters, no commonality at all. - LinkedList diffs = new LinkedList(); - diffs.add(new Diff(Operation.DELETE, text1)); - diffs.add(new Diff(Operation.INSERT, text2)); - return diffs; - } - - /** - * Given the location of the 'middle snake', split the diff in two parts - * and recurse. - * @param text1 Old string to be diffed. - * @param text2 New string to be diffed. - * @param x Index of split point in text1. - * @param y Index of split point in text2. - * @param deadline Time at which to bail if not yet complete. - * @return LinkedList of Diff objects. - */ - private LinkedList diff_bisectSplit(String text1, String text2, - int x, int y, long deadline) { - String text1a = text1.substring(0, x); - String text2a = text2.substring(0, y); - String text1b = text1.substring(x); - String text2b = text2.substring(y); - - // Compute both diffs serially. - LinkedList diffs = diff_main(text1a, text2a, false, deadline); - LinkedList diffsb = diff_main(text1b, text2b, false, deadline); - - diffs.addAll(diffsb); - return diffs; - } - - /** - * Split two texts into a list of strings. Reduce the texts to a string of - * hashes where each Unicode character represents one line. - * @param text1 First string. - * @param text2 Second string. - * @return An object containing the encoded text1, the encoded text2 and - * the List of unique strings. The zeroth element of the List of - * unique strings is intentionally blank. - */ - protected LinesToCharsResult diff_linesToChars(String text1, String text2) { - List lineArray = new ArrayList(); - Map lineHash = new HashMap(); - // e.g. linearray[4] == "Hello\n" - // e.g. linehash.get("Hello\n") == 4 - - // "\x00" is a valid character, but various debuggers don't like it. - // So we'll insert a junk entry to avoid generating a null character. - lineArray.add(""); - - // Allocate 2/3rds of the space for text1, the rest for text2. - String chars1 = diff_linesToCharsMunge(text1, lineArray, lineHash, 40000); - String chars2 = diff_linesToCharsMunge(text2, lineArray, lineHash, 65535); - return new LinesToCharsResult(chars1, chars2, lineArray); - } - - /** - * Split a text into a list of strings. Reduce the texts to a string of - * hashes where each Unicode character represents one line. - * @param text String to encode. - * @param lineArray List of unique strings. - * @param lineHash Map of strings to indices. - * @param maxLines Maximum length of lineArray. - * @return Encoded string. - */ - private String diff_linesToCharsMunge(String text, List lineArray, - Map lineHash, int maxLines) { - int lineStart = 0; - int lineEnd = -1; - String line; - StringBuilder chars = new StringBuilder(); - // Walk the text, pulling out a substring for each line. - // text.split('\n') would would temporarily double our memory footprint. - // Modifying text would create many large strings to garbage collect. - while (lineEnd < text.length() - 1) { - lineEnd = text.indexOf('\n', lineStart); - if (lineEnd == -1) { - lineEnd = text.length() - 1; - } - line = text.substring(lineStart, lineEnd + 1); - - if (lineHash.containsKey(line)) { - chars.append(String.valueOf((char) (int) lineHash.get(line))); - } else { - if (lineArray.size() == maxLines) { - // Bail out at 65535 because - // String.valueOf((char) 65536).equals(String.valueOf(((char) 0))) - line = text.substring(lineStart); - lineEnd = text.length(); - } - lineArray.add(line); - lineHash.put(line, lineArray.size() - 1); - chars.append(String.valueOf((char) (lineArray.size() - 1))); - } - lineStart = lineEnd + 1; - } - return chars.toString(); - } - - /** - * Rehydrate the text in a diff from a string of line hashes to real lines of - * text. - * @param diffs List of Diff objects. - * @param lineArray List of unique strings. - */ - protected void diff_charsToLines(List diffs, - List lineArray) { - StringBuilder text; - for (Diff diff : diffs) { - text = new StringBuilder(); - for (int j = 0; j < diff.text.length(); j++) { - text.append(lineArray.get(diff.text.charAt(j))); - } - diff.text = text.toString(); - } - } - - /** - * Determine the common prefix of two strings - * @param text1 First string. - * @param text2 Second string. - * @return The number of characters common to the start of each string. - */ - public int diff_commonPrefix(String text1, String text2) { - // Performance analysis: https://neil.fraser.name/news/2007/10/09/ - int n = Math.min(text1.length(), text2.length()); - for (int i = 0; i < n; i++) { - if (text1.charAt(i) != text2.charAt(i)) { - return i; - } - } - return n; - } - - /** - * Determine the common suffix of two strings - * @param text1 First string. - * @param text2 Second string. - * @return The number of characters common to the end of each string. - */ - public int diff_commonSuffix(String text1, String text2) { - // Performance analysis: https://neil.fraser.name/news/2007/10/09/ - int text1_length = text1.length(); - int text2_length = text2.length(); - int n = Math.min(text1_length, text2_length); - for (int i = 1; i <= n; i++) { - if (text1.charAt(text1_length - i) != text2.charAt(text2_length - i)) { - return i - 1; - } - } - return n; - } - - /** - * Determine if the suffix of one string is the prefix of another. - * @param text1 First string. - * @param text2 Second string. - * @return The number of characters common to the end of the first - * string and the start of the second string. - */ - protected int diff_commonOverlap(String text1, String text2) { - // Cache the text lengths to prevent multiple calls. - int text1_length = text1.length(); - int text2_length = text2.length(); - // Eliminate the null case. - if (text1_length == 0 || text2_length == 0) { - return 0; - } - // Truncate the longer string. - if (text1_length > text2_length) { - text1 = text1.substring(text1_length - text2_length); - } else if (text1_length < text2_length) { - text2 = text2.substring(0, text1_length); - } - int text_length = Math.min(text1_length, text2_length); - // Quick check for the worst case. - if (text1.equals(text2)) { - return text_length; - } - - // Start by looking for a single character match - // and increase length until no match is found. - // Performance analysis: https://neil.fraser.name/news/2010/11/04/ - int best = 0; - int length = 1; - while (true) { - String pattern = text1.substring(text_length - length); - int found = text2.indexOf(pattern); - if (found == -1) { - return best; - } - length += found; - if (found == 0 || text1.substring(text_length - length).equals( - text2.substring(0, length))) { - best = length; - length++; - } - } - } - - /** - * Do the two texts share a substring which is at least half the length of - * the longer text? - * This speedup can produce non-minimal diffs. - * @param text1 First string. - * @param text2 Second string. - * @return Five element String array, containing the prefix of text1, the - * suffix of text1, the prefix of text2, the suffix of text2 and the - * common middle. Or null if there was no match. - */ - protected String[] diff_halfMatch(String text1, String text2) { - if (Diff_Timeout <= 0) { - // Don't risk returning a non-optimal diff if we have unlimited time. - return null; - } - String longtext = text1.length() > text2.length() ? text1 : text2; - String shorttext = text1.length() > text2.length() ? text2 : text1; - if (longtext.length() < 4 || shorttext.length() * 2 < longtext.length()) { - return null; // Pointless. - } - - // First check if the second quarter is the seed for a half-match. - String[] hm1 = diff_halfMatchI(longtext, shorttext, - (longtext.length() + 3) / 4); - // Check again based on the third quarter. - String[] hm2 = diff_halfMatchI(longtext, shorttext, - (longtext.length() + 1) / 2); - String[] hm; - if (hm1 == null && hm2 == null) { - return null; - } else if (hm2 == null) { - hm = hm1; - } else if (hm1 == null) { - hm = hm2; - } else { - // Both matched. Select the longest. - hm = hm1[4].length() > hm2[4].length() ? hm1 : hm2; - } - - // A half-match was found, sort out the return data. - if (text1.length() > text2.length()) { - return hm; - //return new String[]{hm[0], hm[1], hm[2], hm[3], hm[4]}; - } else { - return new String[]{hm[2], hm[3], hm[0], hm[1], hm[4]}; - } - } - - /** - * Does a substring of shorttext exist within longtext such that the - * substring is at least half the length of longtext? - * @param longtext Longer string. - * @param shorttext Shorter string. - * @param i Start index of quarter length substring within longtext. - * @return Five element String array, containing the prefix of longtext, the - * suffix of longtext, the prefix of shorttext, the suffix of shorttext - * and the common middle. Or null if there was no match. - */ - private String[] diff_halfMatchI(String longtext, String shorttext, int i) { - // Start with a 1/4 length substring at position i as a seed. - String seed = longtext.substring(i, i + longtext.length() / 4); - int j = -1; - String best_common = ""; - String best_longtext_a = "", best_longtext_b = ""; - String best_shorttext_a = "", best_shorttext_b = ""; - while ((j = shorttext.indexOf(seed, j + 1)) != -1) { - int prefixLength = diff_commonPrefix(longtext.substring(i), - shorttext.substring(j)); - int suffixLength = diff_commonSuffix(longtext.substring(0, i), - shorttext.substring(0, j)); - if (best_common.length() < suffixLength + prefixLength) { - best_common = shorttext.substring(j - suffixLength, j) - + shorttext.substring(j, j + prefixLength); - best_longtext_a = longtext.substring(0, i - suffixLength); - best_longtext_b = longtext.substring(i + prefixLength); - best_shorttext_a = shorttext.substring(0, j - suffixLength); - best_shorttext_b = shorttext.substring(j + prefixLength); - } - } - if (best_common.length() * 2 >= longtext.length()) { - return new String[]{best_longtext_a, best_longtext_b, - best_shorttext_a, best_shorttext_b, best_common}; - } else { - return null; - } - } - - /** - * Reduce the number of edits by eliminating semantically trivial equalities. - * @param diffs LinkedList of Diff objects. - */ - public void diff_cleanupSemantic(LinkedList diffs) { - if (diffs.isEmpty()) { - return; - } - boolean changes = false; - Deque equalities = new ArrayDeque(); // Double-ended queue of qualities. - String lastEquality = null; // Always equal to equalities.peek().text - ListIterator pointer = diffs.listIterator(); - // Number of characters that changed prior to the equality. - int length_insertions1 = 0; - int length_deletions1 = 0; - // Number of characters that changed after the equality. - int length_insertions2 = 0; - int length_deletions2 = 0; - Diff thisDiff = pointer.next(); - while (thisDiff != null) { - if (thisDiff.operation == Operation.EQUAL) { - // Equality found. - equalities.push(thisDiff); - length_insertions1 = length_insertions2; - length_deletions1 = length_deletions2; - length_insertions2 = 0; - length_deletions2 = 0; - lastEquality = thisDiff.text; - } else { - // An insertion or deletion. - if (thisDiff.operation == Operation.INSERT) { - length_insertions2 += thisDiff.text.length(); - } else { - length_deletions2 += thisDiff.text.length(); - } - // Eliminate an equality that is smaller or equal to the edits on both - // sides of it. - if (lastEquality != null && (lastEquality.length() - <= Math.max(length_insertions1, length_deletions1)) - && (lastEquality.length() - <= Math.max(length_insertions2, length_deletions2))) { - //System.out.println("Splitting: '" + lastEquality + "'"); - // Walk back to offending equality. - while (thisDiff != equalities.peek()) { - thisDiff = pointer.previous(); - } - pointer.next(); - - // Replace equality with a delete. - pointer.set(new Diff(Operation.DELETE, lastEquality)); - // Insert a corresponding an insert. - pointer.add(new Diff(Operation.INSERT, lastEquality)); - - equalities.pop(); // Throw away the equality we just deleted. - if (!equalities.isEmpty()) { - // Throw away the previous equality (it needs to be reevaluated). - equalities.pop(); - } - if (equalities.isEmpty()) { - // There are no previous equalities, walk back to the start. - while (pointer.hasPrevious()) { - pointer.previous(); - } - } else { - // There is a safe equality we can fall back to. - thisDiff = equalities.peek(); - while (thisDiff != pointer.previous()) { - // Intentionally empty loop. - } - } - - length_insertions1 = 0; // Reset the counters. - length_insertions2 = 0; - length_deletions1 = 0; - length_deletions2 = 0; - lastEquality = null; - changes = true; - } - } - thisDiff = pointer.hasNext() ? pointer.next() : null; - } - - // Normalize the diff. - if (changes) { - diff_cleanupMerge(diffs); - } - diff_cleanupSemanticLossless(diffs); - - // Find any overlaps between deletions and insertions. - // e.g: abcxxxxxxdef - // -> abcxxxdef - // e.g: xxxabcdefxxx - // -> defxxxabc - // Only extract an overlap if it is as big as the edit ahead or behind it. - pointer = diffs.listIterator(); - Diff prevDiff = null; - thisDiff = null; - if (pointer.hasNext()) { - prevDiff = pointer.next(); - if (pointer.hasNext()) { - thisDiff = pointer.next(); - } - } - while (thisDiff != null) { - if (prevDiff.operation == Operation.DELETE && - thisDiff.operation == Operation.INSERT) { - String deletion = prevDiff.text; - String insertion = thisDiff.text; - int overlap_length1 = this.diff_commonOverlap(deletion, insertion); - int overlap_length2 = this.diff_commonOverlap(insertion, deletion); - if (overlap_length1 >= overlap_length2) { - if (overlap_length1 >= deletion.length() / 2.0 || - overlap_length1 >= insertion.length() / 2.0) { - // Overlap found. Insert an equality and trim the surrounding edits. - pointer.previous(); - pointer.add(new Diff(Operation.EQUAL, - insertion.substring(0, overlap_length1))); - prevDiff.text = - deletion.substring(0, deletion.length() - overlap_length1); - thisDiff.text = insertion.substring(overlap_length1); - // pointer.add inserts the element before the cursor, so there is - // no need to step past the new element. - } - } else { - if (overlap_length2 >= deletion.length() / 2.0 || - overlap_length2 >= insertion.length() / 2.0) { - // Reverse overlap found. - // Insert an equality and swap and trim the surrounding edits. - pointer.previous(); - pointer.add(new Diff(Operation.EQUAL, - deletion.substring(0, overlap_length2))); - prevDiff.operation = Operation.INSERT; - prevDiff.text = - insertion.substring(0, insertion.length() - overlap_length2); - thisDiff.operation = Operation.DELETE; - thisDiff.text = deletion.substring(overlap_length2); - // pointer.add inserts the element before the cursor, so there is - // no need to step past the new element. - } - } - thisDiff = pointer.hasNext() ? pointer.next() : null; - } - prevDiff = thisDiff; - thisDiff = pointer.hasNext() ? pointer.next() : null; - } - } - - /** - * Look for single edits surrounded on both sides by equalities - * which can be shifted sideways to align the edit to a word boundary. - * e.g: The cat came. -> The cat came. - * @param diffs LinkedList of Diff objects. - */ - public void diff_cleanupSemanticLossless(LinkedList diffs) { - String equality1, edit, equality2; - String commonString; - int commonOffset; - int score, bestScore; - String bestEquality1, bestEdit, bestEquality2; - // Create a new iterator at the start. - ListIterator pointer = diffs.listIterator(); - Diff prevDiff = pointer.hasNext() ? pointer.next() : null; - Diff thisDiff = pointer.hasNext() ? pointer.next() : null; - Diff nextDiff = pointer.hasNext() ? pointer.next() : null; - // Intentionally ignore the first and last element (don't need checking). - while (nextDiff != null) { - if (prevDiff.operation == Operation.EQUAL && - nextDiff.operation == Operation.EQUAL) { - // This is a single edit surrounded by equalities. - equality1 = prevDiff.text; - edit = thisDiff.text; - equality2 = nextDiff.text; - - // First, shift the edit as far left as possible. - commonOffset = diff_commonSuffix(equality1, edit); - if (commonOffset != 0) { - commonString = edit.substring(edit.length() - commonOffset); - equality1 = equality1.substring(0, equality1.length() - commonOffset); - edit = commonString + edit.substring(0, edit.length() - commonOffset); - equality2 = commonString + equality2; - } - - // Second, step character by character right, looking for the best fit. - bestEquality1 = equality1; - bestEdit = edit; - bestEquality2 = equality2; - bestScore = diff_cleanupSemanticScore(equality1, edit) - + diff_cleanupSemanticScore(edit, equality2); - while (edit.length() != 0 && equality2.length() != 0 - && edit.charAt(0) == equality2.charAt(0)) { - equality1 += edit.charAt(0); - edit = edit.substring(1) + equality2.charAt(0); - equality2 = equality2.substring(1); - score = diff_cleanupSemanticScore(equality1, edit) - + diff_cleanupSemanticScore(edit, equality2); - // The >= encourages trailing rather than leading whitespace on edits. - if (score >= bestScore) { - bestScore = score; - bestEquality1 = equality1; - bestEdit = edit; - bestEquality2 = equality2; - } - } - - if (!prevDiff.text.equals(bestEquality1)) { - // We have an improvement, save it back to the diff. - if (bestEquality1.length() != 0) { - prevDiff.text = bestEquality1; - } else { - pointer.previous(); // Walk past nextDiff. - pointer.previous(); // Walk past thisDiff. - pointer.previous(); // Walk past prevDiff. - pointer.remove(); // Delete prevDiff. - pointer.next(); // Walk past thisDiff. - pointer.next(); // Walk past nextDiff. - } - thisDiff.text = bestEdit; - if (bestEquality2.length() != 0) { - nextDiff.text = bestEquality2; - } else { - pointer.remove(); // Delete nextDiff. - nextDiff = thisDiff; - thisDiff = prevDiff; - } - } - } - prevDiff = thisDiff; - thisDiff = nextDiff; - nextDiff = pointer.hasNext() ? pointer.next() : null; - } - } - - /** - * Given two strings, compute a score representing whether the internal - * boundary falls on logical boundaries. - * Scores range from 6 (best) to 0 (worst). - * @param one First string. - * @param two Second string. - * @return The score. - */ - private int diff_cleanupSemanticScore(String one, String two) { - if (one.length() == 0 || two.length() == 0) { - // Edges are the best. - return 6; - } - - // Each port of this function behaves slightly differently due to - // subtle differences in each language's definition of things like - // 'whitespace'. Since this function's purpose is largely cosmetic, - // the choice has been made to use each language's native features - // rather than force total conformity. - char char1 = one.charAt(one.length() - 1); - char char2 = two.charAt(0); - boolean nonAlphaNumeric1 = !Character.isLetterOrDigit(char1); - boolean nonAlphaNumeric2 = !Character.isLetterOrDigit(char2); - boolean whitespace1 = nonAlphaNumeric1 && Character.isWhitespace(char1); - boolean whitespace2 = nonAlphaNumeric2 && Character.isWhitespace(char2); - boolean lineBreak1 = whitespace1 - && Character.getType(char1) == Character.CONTROL; - boolean lineBreak2 = whitespace2 - && Character.getType(char2) == Character.CONTROL; - boolean blankLine1 = lineBreak1 && BLANKLINEEND.matcher(one).find(); - boolean blankLine2 = lineBreak2 && BLANKLINESTART.matcher(two).find(); - - if (blankLine1 || blankLine2) { - // Five points for blank lines. - return 5; - } else if (lineBreak1 || lineBreak2) { - // Four points for line breaks. - return 4; - } else if (nonAlphaNumeric1 && !whitespace1 && whitespace2) { - // Three points for end of sentences. - return 3; - } else if (whitespace1 || whitespace2) { - // Two points for whitespace. - return 2; - } else if (nonAlphaNumeric1 || nonAlphaNumeric2) { - // One point for non-alphanumeric. - return 1; - } - return 0; - } - - // Define some regex patterns for matching boundaries. - private Pattern BLANKLINEEND - = Pattern.compile("\\n\\r?\\n\\Z", Pattern.DOTALL); - private Pattern BLANKLINESTART - = Pattern.compile("\\A\\r?\\n\\r?\\n", Pattern.DOTALL); - - /** - * Reduce the number of edits by eliminating operationally trivial equalities. - * @param diffs LinkedList of Diff objects. - */ - public void diff_cleanupEfficiency(LinkedList diffs) { - if (diffs.isEmpty()) { - return; - } - boolean changes = false; - Deque equalities = new ArrayDeque(); // Double-ended queue of equalities. - String lastEquality = null; // Always equal to equalities.peek().text - ListIterator pointer = diffs.listIterator(); - // Is there an insertion operation before the last equality. - boolean pre_ins = false; - // Is there a deletion operation before the last equality. - boolean pre_del = false; - // Is there an insertion operation after the last equality. - boolean post_ins = false; - // Is there a deletion operation after the last equality. - boolean post_del = false; - Diff thisDiff = pointer.next(); - Diff safeDiff = thisDiff; // The last Diff that is known to be unsplittable. - while (thisDiff != null) { - if (thisDiff.operation == Operation.EQUAL) { - // Equality found. - if (thisDiff.text.length() < Diff_EditCost && (post_ins || post_del)) { - // Candidate found. - equalities.push(thisDiff); - pre_ins = post_ins; - pre_del = post_del; - lastEquality = thisDiff.text; - } else { - // Not a candidate, and can never become one. - equalities.clear(); - lastEquality = null; - safeDiff = thisDiff; - } - post_ins = post_del = false; - } else { - // An insertion or deletion. - if (thisDiff.operation == Operation.DELETE) { - post_del = true; - } else { - post_ins = true; - } - /* - * Five types to be split: - * ABXYCD - * AXCD - * ABXC - * AXCD - * ABXC - */ - if (lastEquality != null - && ((pre_ins && pre_del && post_ins && post_del) - || ((lastEquality.length() < Diff_EditCost / 2) - && ((pre_ins ? 1 : 0) + (pre_del ? 1 : 0) - + (post_ins ? 1 : 0) + (post_del ? 1 : 0)) == 3))) { - //System.out.println("Splitting: '" + lastEquality + "'"); - // Walk back to offending equality. - while (thisDiff != equalities.peek()) { - thisDiff = pointer.previous(); - } - pointer.next(); - - // Replace equality with a delete. - pointer.set(new Diff(Operation.DELETE, lastEquality)); - // Insert a corresponding an insert. - pointer.add(thisDiff = new Diff(Operation.INSERT, lastEquality)); - - equalities.pop(); // Throw away the equality we just deleted. - lastEquality = null; - if (pre_ins && pre_del) { - // No changes made which could affect previous entry, keep going. - post_ins = post_del = true; - equalities.clear(); - safeDiff = thisDiff; - } else { - if (!equalities.isEmpty()) { - // Throw away the previous equality (it needs to be reevaluated). - equalities.pop(); - } - if (equalities.isEmpty()) { - // There are no previous questionable equalities, - // walk back to the last known safe diff. - thisDiff = safeDiff; - } else { - // There is an equality we can fall back to. - thisDiff = equalities.peek(); - } - while (thisDiff != pointer.previous()) { - // Intentionally empty loop. - } - post_ins = post_del = false; - } - - changes = true; - } - } - thisDiff = pointer.hasNext() ? pointer.next() : null; - } - - if (changes) { - diff_cleanupMerge(diffs); - } - } - - /** - * Reorder and merge like edit sections. Merge equalities. - * Any edit section can move as long as it doesn't cross an equality. - * @param diffs LinkedList of Diff objects. - */ - public void diff_cleanupMerge(LinkedList diffs) { - diffs.add(new Diff(Operation.EQUAL, "")); // Add a dummy entry at the end. - ListIterator pointer = diffs.listIterator(); - int count_delete = 0; - int count_insert = 0; - String text_delete = ""; - String text_insert = ""; - Diff thisDiff = pointer.next(); - Diff prevEqual = null; - int commonlength; - while (thisDiff != null) { - switch (thisDiff.operation) { - case INSERT: - count_insert++; - text_insert += thisDiff.text; - prevEqual = null; - break; - case DELETE: - count_delete++; - text_delete += thisDiff.text; - prevEqual = null; - break; - case EQUAL: - if (count_delete + count_insert > 1) { - boolean both_types = count_delete != 0 && count_insert != 0; - // Delete the offending records. - pointer.previous(); // Reverse direction. - while (count_delete-- > 0) { - pointer.previous(); - pointer.remove(); - } - while (count_insert-- > 0) { - pointer.previous(); - pointer.remove(); - } - if (both_types) { - // Factor out any common prefixies. - commonlength = diff_commonPrefix(text_insert, text_delete); - if (commonlength != 0) { - if (pointer.hasPrevious()) { - thisDiff = pointer.previous(); - assert thisDiff.operation == Operation.EQUAL - : "Previous diff should have been an equality."; - thisDiff.text += text_insert.substring(0, commonlength); - pointer.next(); - } else { - pointer.add(new Diff(Operation.EQUAL, - text_insert.substring(0, commonlength))); - } - text_insert = text_insert.substring(commonlength); - text_delete = text_delete.substring(commonlength); - } - // Factor out any common suffixies. - commonlength = diff_commonSuffix(text_insert, text_delete); - if (commonlength != 0) { - thisDiff = pointer.next(); - thisDiff.text = text_insert.substring(text_insert.length() - - commonlength) + thisDiff.text; - text_insert = text_insert.substring(0, text_insert.length() - - commonlength); - text_delete = text_delete.substring(0, text_delete.length() - - commonlength); - pointer.previous(); - } - } - // Insert the merged records. - if (text_delete.length() != 0) { - pointer.add(new Diff(Operation.DELETE, text_delete)); - } - if (text_insert.length() != 0) { - pointer.add(new Diff(Operation.INSERT, text_insert)); - } - // Step forward to the equality. - thisDiff = pointer.hasNext() ? pointer.next() : null; - } else if (prevEqual != null) { - // Merge this equality with the previous one. - prevEqual.text += thisDiff.text; - pointer.remove(); - thisDiff = pointer.previous(); - pointer.next(); // Forward direction - } - count_insert = 0; - count_delete = 0; - text_delete = ""; - text_insert = ""; - prevEqual = thisDiff; - break; - } - thisDiff = pointer.hasNext() ? pointer.next() : null; - } - if (diffs.getLast().text.length() == 0) { - diffs.removeLast(); // Remove the dummy entry at the end. - } - - /* - * Second pass: look for single edits surrounded on both sides by equalities - * which can be shifted sideways to eliminate an equality. - * e.g: ABAC -> ABAC - */ - boolean changes = false; - // Create a new iterator at the start. - // (As opposed to walking the current one back.) - pointer = diffs.listIterator(); - Diff prevDiff = pointer.hasNext() ? pointer.next() : null; - thisDiff = pointer.hasNext() ? pointer.next() : null; - Diff nextDiff = pointer.hasNext() ? pointer.next() : null; - // Intentionally ignore the first and last element (don't need checking). - while (nextDiff != null) { - if (prevDiff.operation == Operation.EQUAL && - nextDiff.operation == Operation.EQUAL) { - // This is a single edit surrounded by equalities. - if (thisDiff.text.endsWith(prevDiff.text)) { - // Shift the edit over the previous equality. - thisDiff.text = prevDiff.text - + thisDiff.text.substring(0, thisDiff.text.length() - - prevDiff.text.length()); - nextDiff.text = prevDiff.text + nextDiff.text; - pointer.previous(); // Walk past nextDiff. - pointer.previous(); // Walk past thisDiff. - pointer.previous(); // Walk past prevDiff. - pointer.remove(); // Delete prevDiff. - pointer.next(); // Walk past thisDiff. - thisDiff = pointer.next(); // Walk past nextDiff. - nextDiff = pointer.hasNext() ? pointer.next() : null; - changes = true; - } else if (thisDiff.text.startsWith(nextDiff.text)) { - // Shift the edit over the next equality. - prevDiff.text += nextDiff.text; - thisDiff.text = thisDiff.text.substring(nextDiff.text.length()) - + nextDiff.text; - pointer.remove(); // Delete nextDiff. - nextDiff = pointer.hasNext() ? pointer.next() : null; - changes = true; - } - } - prevDiff = thisDiff; - thisDiff = nextDiff; - nextDiff = pointer.hasNext() ? pointer.next() : null; - } - // If shifts were made, the diff needs reordering and another shift sweep. - if (changes) { - diff_cleanupMerge(diffs); - } - } - - /** - * loc is a location in text1, compute and return the equivalent location in - * text2. - * e.g. "The cat" vs "The big cat", 1->1, 5->8 - * @param diffs List of Diff objects. - * @param loc Location within text1. - * @return Location within text2. - */ - public int diff_xIndex(List diffs, int loc) { - int chars1 = 0; - int chars2 = 0; - int last_chars1 = 0; - int last_chars2 = 0; - Diff lastDiff = null; - for (Diff aDiff : diffs) { - if (aDiff.operation != Operation.INSERT) { - // Equality or deletion. - chars1 += aDiff.text.length(); - } - if (aDiff.operation != Operation.DELETE) { - // Equality or insertion. - chars2 += aDiff.text.length(); - } - if (chars1 > loc) { - // Overshot the location. - lastDiff = aDiff; - break; - } - last_chars1 = chars1; - last_chars2 = chars2; - } - if (lastDiff != null && lastDiff.operation == Operation.DELETE) { - // The location was deleted. - return last_chars2; - } - // Add the remaining character length. - return last_chars2 + (loc - last_chars1); - } - - /** - * Convert a Diff list into a pretty HTML report. - * @param diffs List of Diff objects. - * @return HTML representation. - */ - public String diff_prettyHtml(List diffs) { - StringBuilder html = new StringBuilder(); - for (Diff aDiff : diffs) { - String text = aDiff.text.replace("&", "&").replace("<", "<") - .replace(">", ">").replace("\n", "¶
"); - switch (aDiff.operation) { - case INSERT: - html.append("").append(text) - .append(""); - break; - case DELETE: - html.append("").append(text) - .append(""); - break; - case EQUAL: - html.append("").append(text).append(""); - break; - } - } - return html.toString(); - } - - /** - * Compute and return the source text (all equalities and deletions). - * @param diffs List of Diff objects. - * @return Source text. - */ - public String diff_text1(List diffs) { - StringBuilder text = new StringBuilder(); - for (Diff aDiff : diffs) { - if (aDiff.operation != Operation.INSERT) { - text.append(aDiff.text); - } - } - return text.toString(); - } - - /** - * Compute and return the destination text (all equalities and insertions). - * @param diffs List of Diff objects. - * @return Destination text. - */ - public String diff_text2(List diffs) { - StringBuilder text = new StringBuilder(); - for (Diff aDiff : diffs) { - if (aDiff.operation != Operation.DELETE) { - text.append(aDiff.text); - } - } - return text.toString(); - } - - /** - * Compute the Levenshtein compare; the number of inserted, deleted or - * substituted characters. - * @param diffs List of Diff objects. - * @return Number of changes. - */ - public int diff_levenshtein(List diffs) { - int levenshtein = 0; - int insertions = 0; - int deletions = 0; - for (Diff aDiff : diffs) { - switch (aDiff.operation) { - case INSERT: - insertions += aDiff.text.length(); - break; - case DELETE: - deletions += aDiff.text.length(); - break; - case EQUAL: - // A deletion and an insertion is one substitution. - levenshtein += Math.max(insertions, deletions); - insertions = 0; - deletions = 0; - break; - } - } - levenshtein += Math.max(insertions, deletions); - return levenshtein; - } - - /** - * Crush the diff into an encoded string which describes the operations - * required to transform text1 into text2. - * E.g. =3\t-2\t+ing -> Keep 3 chars, delete 2 chars, insert 'ing'. - * Operations are tab-separated. Inserted text is escaped using %xx notation. - * @param diffs List of Diff objects. - * @return Delta text. - */ - public String diff_toDelta(List diffs) { - StringBuilder text = new StringBuilder(); - for (Diff aDiff : diffs) { - switch (aDiff.operation) { - case INSERT: - try { - text.append("+").append(URLEncoder.encode(aDiff.text, "UTF-8") - .replace('+', ' ')).append("\t"); - } catch (UnsupportedEncodingException e) { - // Not likely on modern system. - throw new Error("This system does not support UTF-8.", e); - } - break; - case DELETE: - text.append("-").append(aDiff.text.length()).append("\t"); - break; - case EQUAL: - text.append("=").append(aDiff.text.length()).append("\t"); - break; - } - } - String delta = text.toString(); - if (delta.length() != 0) { - // Strip off trailing tab character. - delta = delta.substring(0, delta.length() - 1); - delta = unescapeForEncodeUriCompatability(delta); - } - return delta; - } - - /** - * Given the original text1, and an encoded string which describes the - * operations required to transform text1 into text2, compute the full diff. - * @param text1 Source string for the diff. - * @param delta Delta text. - * @return Array of Diff objects or null if invalid. - * @throws IllegalArgumentException If invalid input. - */ - public LinkedList diff_fromDelta(String text1, String delta) - throws IllegalArgumentException { - LinkedList diffs = new LinkedList(); - int pointer = 0; // Cursor in text1 - String[] tokens = delta.split("\t"); - for (String token : tokens) { - if (token.length() == 0) { - // Blank tokens are ok (from a trailing \t). - continue; - } - // Each token begins with a one character parameter which specifies the - // operation of this token (delete, insert, equality). - String param = token.substring(1); - switch (token.charAt(0)) { - case '+': - // decode would change all "+" to " " - param = param.replace("+", "%2B"); - try { - param = URLDecoder.decode(param, "UTF-8"); - } catch (UnsupportedEncodingException e) { - // Not likely on modern system. - throw new Error("This system does not support UTF-8.", e); - } catch (IllegalArgumentException e) { - // Malformed URI sequence. - throw new IllegalArgumentException( - "Illegal escape in diff_fromDelta: " + param, e); - } - diffs.add(new Diff(Operation.INSERT, param)); - break; - case '-': - // Fall through. - case '=': - int n; - try { - n = Integer.parseInt(param); - } catch (NumberFormatException e) { - throw new IllegalArgumentException( - "Invalid number in diff_fromDelta: " + param, e); - } - if (n < 0) { - throw new IllegalArgumentException( - "Negative number in diff_fromDelta: " + param); - } - String text; - try { - text = text1.substring(pointer, pointer += n); - } catch (StringIndexOutOfBoundsException e) { - throw new IllegalArgumentException("Delta length (" + pointer - + ") larger than source text length (" + text1.length() - + ").", e); - } - if (token.charAt(0) == '=') { - diffs.add(new Diff(Operation.EQUAL, text)); - } else { - diffs.add(new Diff(Operation.DELETE, text)); - } - break; - default: - // Anything else is an error. - throw new IllegalArgumentException( - "Invalid diff operation in diff_fromDelta: " + token.charAt(0)); - } - } - if (pointer != text1.length()) { - throw new IllegalArgumentException("Delta length (" + pointer - + ") smaller than source text length (" + text1.length() + ")."); - } - return diffs; - } - - - // MATCH FUNCTIONS - - - /** - * Locate the best instance of 'pattern' in 'text' near 'loc'. - * Returns -1 if no match found. - * @param text The text to search. - * @param pattern The pattern to search for. - * @param loc The location to search around. - * @return Best match index or -1. - */ - public int match_main(String text, String pattern, int loc) { - // Check for null inputs. - if (text == null || pattern == null) { - throw new IllegalArgumentException("Null inputs. (match_main)"); - } - - loc = Math.max(0, Math.min(loc, text.length())); - if (text.equals(pattern)) { - // Shortcut (potentially not guaranteed by the algorithm) - return 0; - } else if (text.length() == 0) { - // Nothing to match. - return -1; - } else if (loc + pattern.length() <= text.length() - && text.substring(loc, loc + pattern.length()).equals(pattern)) { - // Perfect match at the perfect spot! (Includes case of null pattern) - return loc; - } else { - // Do a fuzzy compare. - return match_bitap(text, pattern, loc); - } - } - - /** - * Locate the best instance of 'pattern' in 'text' near 'loc' using the - * Bitap algorithm. Returns -1 if no match found. - * @param text The text to search. - * @param pattern The pattern to search for. - * @param loc The location to search around. - * @return Best match index or -1. - */ - protected int match_bitap(String text, String pattern, int loc) { - assert (Match_MaxBits == 0 || pattern.length() <= Match_MaxBits) - : "Pattern too long for this application."; - - // Initialise the alphabet. - Map s = match_alphabet(pattern); - - // Highest score beyond which we give up. - double score_threshold = Match_Threshold; - // Is there a nearby exact match? (speedup) - int best_loc = text.indexOf(pattern, loc); - if (best_loc != -1) { - score_threshold = Math.min(match_bitapScore(0, best_loc, loc, pattern), - score_threshold); - // What about in the other direction? (speedup) - best_loc = text.lastIndexOf(pattern, loc + pattern.length()); - if (best_loc != -1) { - score_threshold = Math.min(match_bitapScore(0, best_loc, loc, pattern), - score_threshold); - } - } - - // Initialise the bit arrays. - int matchmask = 1 << (pattern.length() - 1); - best_loc = -1; - - int bin_min, bin_mid; - int bin_max = pattern.length() + text.length(); - // Empty initialization added to appease Java compiler. - int[] last_rd = new int[0]; - for (int d = 0; d < pattern.length(); d++) { - // Scan for the best match; each iteration allows for one more error. - // Run a binary search to determine how far from 'loc' we can stray at - // this error level. - bin_min = 0; - bin_mid = bin_max; - while (bin_min < bin_mid) { - if (match_bitapScore(d, loc + bin_mid, loc, pattern) - <= score_threshold) { - bin_min = bin_mid; - } else { - bin_max = bin_mid; - } - bin_mid = (bin_max - bin_min) / 2 + bin_min; - } - // Use the result from this iteration as the maximum for the next. - bin_max = bin_mid; - int start = Math.max(1, loc - bin_mid + 1); - int finish = Math.min(loc + bin_mid, text.length()) + pattern.length(); - - int[] rd = new int[finish + 2]; - rd[finish + 1] = (1 << d) - 1; - for (int j = finish; j >= start; j--) { - int charMatch; - if (text.length() <= j - 1 || !s.containsKey(text.charAt(j - 1))) { - // Out of range. - charMatch = 0; - } else { - charMatch = s.get(text.charAt(j - 1)); - } - if (d == 0) { - // First pass: exact match. - rd[j] = ((rd[j + 1] << 1) | 1) & charMatch; - } else { - // Subsequent passes: fuzzy match. - rd[j] = (((rd[j + 1] << 1) | 1) & charMatch) - | (((last_rd[j + 1] | last_rd[j]) << 1) | 1) | last_rd[j + 1]; - } - if ((rd[j] & matchmask) != 0) { - double score = match_bitapScore(d, j - 1, loc, pattern); - // This match will almost certainly be better than any existing - // match. But check anyway. - if (score <= score_threshold) { - // Told you so. - score_threshold = score; - best_loc = j - 1; - if (best_loc > loc) { - // When passing loc, don't exceed our current compare from loc. - start = Math.max(1, 2 * loc - best_loc); - } else { - // Already passed loc, downhill from here on in. - break; - } - } - } - } - if (match_bitapScore(d + 1, loc, loc, pattern) > score_threshold) { - // No hope for a (better) match at greater error levels. - break; - } - last_rd = rd; - } - return best_loc; - } - - /** - * Compute and return the score for a match with e errors and x location. - * @param e Number of errors in match. - * @param x Location of match. - * @param loc Expected location of match. - * @param pattern Pattern being sought. - * @return Overall score for match (0.0 = good, 1.0 = bad). - */ - private double match_bitapScore(int e, int x, int loc, String pattern) { - float accuracy = (float) e / pattern.length(); - int proximity = Math.abs(loc - x); - if (Match_Distance == 0) { - // Dodge divide by zero error. - return proximity == 0 ? accuracy : 1.0; - } - return accuracy + (proximity / (float) Match_Distance); - } - - /** - * Initialise the alphabet for the Bitap algorithm. - * @param pattern The text to encode. - * @return Hash of character locations. - */ - protected Map match_alphabet(String pattern) { - Map s = new HashMap(); - char[] char_pattern = pattern.toCharArray(); - for (char c : char_pattern) { - s.put(c, 0); - } - int i = 0; - for (char c : char_pattern) { - s.put(c, s.get(c) | (1 << (pattern.length() - i - 1))); - i++; - } - return s; - } - - - // PATCH FUNCTIONS - - - /** - * Increase the context until it is unique, - * but don't let the pattern expand beyond Match_MaxBits. - * @param patch The patch to grow. - * @param text Source text. - */ - protected void patch_addContext(Patch patch, String text) { - if (text.length() == 0) { - return; - } - String pattern = text.substring(patch.start2, patch.start2 + patch.length1); - int padding = 0; - - // Look for the first and last matches of pattern in text. If two different - // matches are found, increase the pattern length. - while (text.indexOf(pattern) != text.lastIndexOf(pattern) - && pattern.length() < Match_MaxBits - Patch_Margin - Patch_Margin) { - padding += Patch_Margin; - pattern = text.substring(Math.max(0, patch.start2 - padding), - Math.min(text.length(), patch.start2 + patch.length1 + padding)); - } - // Add one chunk for good luck. - padding += Patch_Margin; - - // Add the prefix. - String prefix = text.substring(Math.max(0, patch.start2 - padding), - patch.start2); - if (prefix.length() != 0) { - patch.diffs.addFirst(new Diff(Operation.EQUAL, prefix)); - } - // Add the suffix. - String suffix = text.substring(patch.start2 + patch.length1, - Math.min(text.length(), patch.start2 + patch.length1 + padding)); - if (suffix.length() != 0) { - patch.diffs.addLast(new Diff(Operation.EQUAL, suffix)); - } - - // Roll back the start points. - patch.start1 -= prefix.length(); - patch.start2 -= prefix.length(); - // Extend the lengths. - patch.length1 += prefix.length() + suffix.length(); - patch.length2 += prefix.length() + suffix.length(); - } - - /** - * Compute a list of patches to turn text1 into text2. - * A set of diffs will be computed. - * @param text1 Old text. - * @param text2 New text. - * @return LinkedList of Patch objects. - */ - public LinkedList patch_make(String text1, String text2) { - if (text1 == null || text2 == null) { - throw new IllegalArgumentException("Null inputs. (patch_make)"); - } - // No diffs provided, compute our own. - LinkedList diffs = diff_main(text1, text2, true); - if (diffs.size() > 2) { - diff_cleanupSemantic(diffs); - diff_cleanupEfficiency(diffs); - } - return patch_make(text1, diffs); - } - - /** - * Compute a list of patches to turn text1 into text2. - * text1 will be derived from the provided diffs. - * @param diffs Array of Diff objects for text1 to text2. - * @return LinkedList of Patch objects. - */ - public LinkedList patch_make(LinkedList diffs) { - if (diffs == null) { - throw new IllegalArgumentException("Null inputs. (patch_make)"); - } - // No origin string provided, compute our own. - String text1 = diff_text1(diffs); - return patch_make(text1, diffs); - } - - /** - * Compute a list of patches to turn text1 into text2. - * text2 is ignored, diffs are the delta between text1 and text2. - * @param text1 Old text - * @param text2 Ignored. - * @param diffs Array of Diff objects for text1 to text2. - * @return LinkedList of Patch objects. - * @deprecated Prefer patch_make(String text1, LinkedList diffs). - */ - @Deprecated public LinkedList patch_make(String text1, String text2, - LinkedList diffs) { - return patch_make(text1, diffs); - } - - /** - * Compute a list of patches to turn text1 into text2. - * text2 is not provided, diffs are the delta between text1 and text2. - * @param text1 Old text. - * @param diffs Array of Diff objects for text1 to text2. - * @return LinkedList of Patch objects. - */ - public LinkedList patch_make(String text1, LinkedList diffs) { - if (text1 == null || diffs == null) { - throw new IllegalArgumentException("Null inputs. (patch_make)"); - } - - LinkedList patches = new LinkedList(); - if (diffs.isEmpty()) { - return patches; // Get rid of the null case. - } - Patch patch = new Patch(); - int char_count1 = 0; // Number of characters into the text1 string. - int char_count2 = 0; // Number of characters into the text2 string. - // Start with text1 (prepatch_text) and apply the diffs until we arrive at - // text2 (postpatch_text). We recreate the patches one by one to determine - // context info. - String prepatch_text = text1; - String postpatch_text = text1; - for (Diff aDiff : diffs) { - if (patch.diffs.isEmpty() && aDiff.operation != Operation.EQUAL) { - // A new patch starts here. - patch.start1 = char_count1; - patch.start2 = char_count2; - } - - switch (aDiff.operation) { - case INSERT: - patch.diffs.add(aDiff); - patch.length2 += aDiff.text.length(); - postpatch_text = postpatch_text.substring(0, char_count2) - + aDiff.text + postpatch_text.substring(char_count2); - break; - case DELETE: - patch.length1 += aDiff.text.length(); - patch.diffs.add(aDiff); - postpatch_text = postpatch_text.substring(0, char_count2) - + postpatch_text.substring(char_count2 + aDiff.text.length()); - break; - case EQUAL: - if (aDiff.text.length() <= 2 * Patch_Margin - && !patch.diffs.isEmpty() && aDiff != diffs.getLast()) { - // Small equality inside a patch. - patch.diffs.add(aDiff); - patch.length1 += aDiff.text.length(); - patch.length2 += aDiff.text.length(); - } - - if (aDiff.text.length() >= 2 * Patch_Margin && !patch.diffs.isEmpty()) { - // Time for a new patch. - if (!patch.diffs.isEmpty()) { - patch_addContext(patch, prepatch_text); - patches.add(patch); - patch = new Patch(); - // Unlike Unidiff, our patch lists have a rolling context. - // https://github.com/google/diff-match-patch/wiki/Unidiff - // Update prepatch text & pos to reflect the application of the - // just completed patch. - prepatch_text = postpatch_text; - char_count1 = char_count2; - } - } - break; - } - - // Update the current character count. - if (aDiff.operation != Operation.INSERT) { - char_count1 += aDiff.text.length(); - } - if (aDiff.operation != Operation.DELETE) { - char_count2 += aDiff.text.length(); - } - } - // Pick up the leftover patch if not empty. - if (!patch.diffs.isEmpty()) { - patch_addContext(patch, prepatch_text); - patches.add(patch); - } - - return patches; - } - - /** - * Given an array of patches, return another array that is identical. - * @param patches Array of Patch objects. - * @return Array of Patch objects. - */ - public LinkedList patch_deepCopy(LinkedList patches) { - LinkedList patchesCopy = new LinkedList(); - for (Patch aPatch : patches) { - Patch patchCopy = new Patch(); - for (Diff aDiff : aPatch.diffs) { - Diff diffCopy = new Diff(aDiff.operation, aDiff.text); - patchCopy.diffs.add(diffCopy); - } - patchCopy.start1 = aPatch.start1; - patchCopy.start2 = aPatch.start2; - patchCopy.length1 = aPatch.length1; - patchCopy.length2 = aPatch.length2; - patchesCopy.add(patchCopy); - } - return patchesCopy; - } - - /** - * Merge a set of patches onto the text. Return a patched text, as well - * as an array of true/false values indicating which patches were applied. - * @param patches Array of Patch objects - * @param text Old text. - * @return Two element Object array, containing the new text and an array of - * boolean values. - */ - public Object[] patch_apply(LinkedList patches, String text) { - if (patches.isEmpty()) { - return new Object[]{text, new boolean[0]}; - } - - // Deep copy the patches so that no changes are made to originals. - patches = patch_deepCopy(patches); - - String nullPadding = patch_addPadding(patches); - text = nullPadding + text + nullPadding; - patch_splitMax(patches); - - int x = 0; - // delta keeps track of the offset between the expected and actual location - // of the previous patch. If there are patches expected at positions 10 and - // 20, but the first patch was found at 12, delta is 2 and the second patch - // has an effective expected position of 22. - int delta = 0; - boolean[] results = new boolean[patches.size()]; - for (Patch aPatch : patches) { - int expected_loc = aPatch.start2 + delta; - String text1 = diff_text1(aPatch.diffs); - int start_loc; - int end_loc = -1; - if (text1.length() > this.Match_MaxBits) { - // patch_splitMax will only provide an oversized pattern in the case of - // a monster delete. - start_loc = match_main(text, - text1.substring(0, this.Match_MaxBits), expected_loc); - if (start_loc != -1) { - end_loc = match_main(text, - text1.substring(text1.length() - this.Match_MaxBits), - expected_loc + text1.length() - this.Match_MaxBits); - if (end_loc == -1 || start_loc >= end_loc) { - // Can't find valid trailing context. Drop this patch. - start_loc = -1; - } - } - } else { - start_loc = match_main(text, text1, expected_loc); - } - if (start_loc == -1) { - // No match found. :( - results[x] = false; - // Subtract the delta for this failed patch from subsequent patches. - delta -= aPatch.length2 - aPatch.length1; - } else { - // Found a match. :) - results[x] = true; - delta = start_loc - expected_loc; - String text2; - if (end_loc == -1) { - text2 = text.substring(start_loc, - Math.min(start_loc + text1.length(), text.length())); - } else { - text2 = text.substring(start_loc, - Math.min(end_loc + this.Match_MaxBits, text.length())); - } - if (text1.equals(text2)) { - // Perfect match, just shove the replacement text in. - text = text.substring(0, start_loc) + diff_text2(aPatch.diffs) - + text.substring(start_loc + text1.length()); - } else { - // Imperfect match. Run a diff to get a framework of equivalent - // indices. - LinkedList diffs = diff_main(text1, text2, false); - if (text1.length() > this.Match_MaxBits - && diff_levenshtein(diffs) / (float) text1.length() - > this.Patch_DeleteThreshold) { - // The end points match, but the content is unacceptably bad. - results[x] = false; - } else { - diff_cleanupSemanticLossless(diffs); - int index1 = 0; - for (Diff aDiff : aPatch.diffs) { - if (aDiff.operation != Operation.EQUAL) { - int index2 = diff_xIndex(diffs, index1); - if (aDiff.operation == Operation.INSERT) { - // Insertion - text = text.substring(0, start_loc + index2) + aDiff.text - + text.substring(start_loc + index2); - } else if (aDiff.operation == Operation.DELETE) { - // Deletion - text = text.substring(0, start_loc + index2) - + text.substring(start_loc + diff_xIndex(diffs, - index1 + aDiff.text.length())); - } - } - if (aDiff.operation != Operation.DELETE) { - index1 += aDiff.text.length(); - } - } - } - } - } - x++; - } - // Strip the padding off. - text = text.substring(nullPadding.length(), text.length() - - nullPadding.length()); - return new Object[]{text, results}; - } - - /** - * Add some padding on text start and end so that edges can match something. - * Intended to be called only from within patch_apply. - * @param patches Array of Patch objects. - * @return The padding string added to each side. - */ - public String patch_addPadding(LinkedList patches) { - short paddingLength = this.Patch_Margin; - String nullPadding = ""; - for (short x = 1; x <= paddingLength; x++) { - nullPadding += String.valueOf((char) x); - } - - // Bump all the patches forward. - for (Patch aPatch : patches) { - aPatch.start1 += paddingLength; - aPatch.start2 += paddingLength; - } - - // Add some padding on start of first diff. - Patch patch = patches.getFirst(); - LinkedList diffs = patch.diffs; - if (diffs.isEmpty() || diffs.getFirst().operation != Operation.EQUAL) { - // Add nullPadding equality. - diffs.addFirst(new Diff(Operation.EQUAL, nullPadding)); - patch.start1 -= paddingLength; // Should be 0. - patch.start2 -= paddingLength; // Should be 0. - patch.length1 += paddingLength; - patch.length2 += paddingLength; - } else if (paddingLength > diffs.getFirst().text.length()) { - // Grow first equality. - Diff firstDiff = diffs.getFirst(); - int extraLength = paddingLength - firstDiff.text.length(); - firstDiff.text = nullPadding.substring(firstDiff.text.length()) - + firstDiff.text; - patch.start1 -= extraLength; - patch.start2 -= extraLength; - patch.length1 += extraLength; - patch.length2 += extraLength; - } - - // Add some padding on end of last diff. - patch = patches.getLast(); - diffs = patch.diffs; - if (diffs.isEmpty() || diffs.getLast().operation != Operation.EQUAL) { - // Add nullPadding equality. - diffs.addLast(new Diff(Operation.EQUAL, nullPadding)); - patch.length1 += paddingLength; - patch.length2 += paddingLength; - } else if (paddingLength > diffs.getLast().text.length()) { - // Grow last equality. - Diff lastDiff = diffs.getLast(); - int extraLength = paddingLength - lastDiff.text.length(); - lastDiff.text += nullPadding.substring(0, extraLength); - patch.length1 += extraLength; - patch.length2 += extraLength; - } - - return nullPadding; - } - - /** - * Look through the patches and break up any which are longer than the - * maximum limit of the match algorithm. - * Intended to be called only from within patch_apply. - * @param patches LinkedList of Patch objects. - */ - public void patch_splitMax(LinkedList patches) { - short patch_size = Match_MaxBits; - String precontext, postcontext; - Patch patch; - int start1, start2; - boolean empty; - Operation diff_type; - String diff_text; - ListIterator pointer = patches.listIterator(); - Patch bigpatch = pointer.hasNext() ? pointer.next() : null; - while (bigpatch != null) { - if (bigpatch.length1 <= Match_MaxBits) { - bigpatch = pointer.hasNext() ? pointer.next() : null; - continue; - } - // Remove the big old patch. - pointer.remove(); - start1 = bigpatch.start1; - start2 = bigpatch.start2; - precontext = ""; - while (!bigpatch.diffs.isEmpty()) { - // Create one of several smaller patches. - patch = new Patch(); - empty = true; - patch.start1 = start1 - precontext.length(); - patch.start2 = start2 - precontext.length(); - if (precontext.length() != 0) { - patch.length1 = patch.length2 = precontext.length(); - patch.diffs.add(new Diff(Operation.EQUAL, precontext)); - } - while (!bigpatch.diffs.isEmpty() - && patch.length1 < patch_size - Patch_Margin) { - diff_type = bigpatch.diffs.getFirst().operation; - diff_text = bigpatch.diffs.getFirst().text; - if (diff_type == Operation.INSERT) { - // Insertions are harmless. - patch.length2 += diff_text.length(); - start2 += diff_text.length(); - patch.diffs.addLast(bigpatch.diffs.removeFirst()); - empty = false; - } else if (diff_type == Operation.DELETE && patch.diffs.size() == 1 - && patch.diffs.getFirst().operation == Operation.EQUAL - && diff_text.length() > 2 * patch_size) { - // This is a large deletion. Let it pass in one chunk. - patch.length1 += diff_text.length(); - start1 += diff_text.length(); - empty = false; - patch.diffs.add(new Diff(diff_type, diff_text)); - bigpatch.diffs.removeFirst(); - } else { - // Deletion or equality. Only take as much as we can stomach. - diff_text = diff_text.substring(0, Math.min(diff_text.length(), - patch_size - patch.length1 - Patch_Margin)); - patch.length1 += diff_text.length(); - start1 += diff_text.length(); - if (diff_type == Operation.EQUAL) { - patch.length2 += diff_text.length(); - start2 += diff_text.length(); - } else { - empty = false; - } - patch.diffs.add(new Diff(diff_type, diff_text)); - if (diff_text.equals(bigpatch.diffs.getFirst().text)) { - bigpatch.diffs.removeFirst(); - } else { - bigpatch.diffs.getFirst().text = bigpatch.diffs.getFirst().text - .substring(diff_text.length()); - } - } - } - // Compute the head context for the next patch. - precontext = diff_text2(patch.diffs); - precontext = precontext.substring(Math.max(0, precontext.length() - - Patch_Margin)); - // Append the end context for this patch. - if (diff_text1(bigpatch.diffs).length() > Patch_Margin) { - postcontext = diff_text1(bigpatch.diffs).substring(0, Patch_Margin); - } else { - postcontext = diff_text1(bigpatch.diffs); - } - if (postcontext.length() != 0) { - patch.length1 += postcontext.length(); - patch.length2 += postcontext.length(); - if (!patch.diffs.isEmpty() - && patch.diffs.getLast().operation == Operation.EQUAL) { - patch.diffs.getLast().text += postcontext; - } else { - patch.diffs.add(new Diff(Operation.EQUAL, postcontext)); - } - } - if (!empty) { - pointer.add(patch); - } - } - bigpatch = pointer.hasNext() ? pointer.next() : null; - } - } - - /** - * Take a list of patches and return a textual representation. - * @param patches List of Patch objects. - * @return Text representation of patches. - */ - public String patch_toText(List patches) { - StringBuilder text = new StringBuilder(); - for (Patch aPatch : patches) { - text.append(aPatch); - } - return text.toString(); - } - - /** - * Parse a textual representation of patches and return a List of Patch - * objects. - * @param textline Text representation of patches. - * @return List of Patch objects. - * @throws IllegalArgumentException If invalid input. - */ - public List patch_fromText(String textline) - throws IllegalArgumentException { - List patches = new LinkedList(); - if (textline.length() == 0) { - return patches; - } - List textList = Arrays.asList(textline.split("\n")); - LinkedList text = new LinkedList(textList); - Patch patch; - Pattern patchHeader - = Pattern.compile("^@@ -(\\d+),?(\\d*) \\+(\\d+),?(\\d*) @@$"); - Matcher m; - char sign; - String line; - while (!text.isEmpty()) { - m = patchHeader.matcher(text.getFirst()); - if (!m.matches()) { - throw new IllegalArgumentException( - "Invalid patch string: " + text.getFirst()); - } - patch = new Patch(); - patches.add(patch); - patch.start1 = Integer.parseInt(m.group(1)); - if (m.group(2).length() == 0) { - patch.start1--; - patch.length1 = 1; - } else if (m.group(2).equals("0")) { - patch.length1 = 0; - } else { - patch.start1--; - patch.length1 = Integer.parseInt(m.group(2)); - } - - patch.start2 = Integer.parseInt(m.group(3)); - if (m.group(4).length() == 0) { - patch.start2--; - patch.length2 = 1; - } else if (m.group(4).equals("0")) { - patch.length2 = 0; - } else { - patch.start2--; - patch.length2 = Integer.parseInt(m.group(4)); - } - text.removeFirst(); - - while (!text.isEmpty()) { - try { - sign = text.getFirst().charAt(0); - } catch (IndexOutOfBoundsException e) { - // Blank line? Whatever. - text.removeFirst(); - continue; - } - line = text.getFirst().substring(1); - line = line.replace("+", "%2B"); // decode would change all "+" to " " - try { - line = URLDecoder.decode(line, "UTF-8"); - } catch (UnsupportedEncodingException e) { - // Not likely on modern system. - throw new Error("This system does not support UTF-8.", e); - } catch (IllegalArgumentException e) { - // Malformed URI sequence. - throw new IllegalArgumentException( - "Illegal escape in patch_fromText: " + line, e); - } - if (sign == '-') { - // Deletion. - patch.diffs.add(new Diff(Operation.DELETE, line)); - } else if (sign == '+') { - // Insertion. - patch.diffs.add(new Diff(Operation.INSERT, line)); - } else if (sign == ' ') { - // Minor equality. - patch.diffs.add(new Diff(Operation.EQUAL, line)); - } else if (sign == '@') { - // Start of next patch. - break; - } else { - // WTF? - throw new IllegalArgumentException( - "Invalid patch mode '" + sign + "' in: " + line); - } - text.removeFirst(); - } - } - return patches; - } - - - /** - * Class representing one diff operation. - */ - public static class Diff { - /** - * One of: INSERT, DELETE or EQUAL. - */ - public Operation operation; - /** - * The text associated with this diff operation. - */ - public String text; - - /** - * Constructor. Initializes the diff with the provided values. - * @param operation One of INSERT, DELETE or EQUAL. - * @param text The text being applied. - */ - public Diff(Operation operation, String text) { - // Construct a diff with the specified operation and text. - this.operation = operation; - this.text = text; - } - - /** - * Display a human-readable version of this Diff. - * @return text version. - */ - public String toString() { - String prettyText = this.text.replace('\n', '\u00b6'); - return "Diff(" + this.operation + ",\"" + prettyText + "\")"; - } - - /** - * Create a numeric hash value for a Diff. - * This function is not used by DMP. - * @return Hash value. - */ - @Override - public int hashCode() { - final int prime = 31; - int result = (operation == null) ? 0 : operation.hashCode(); - result += prime * ((text == null) ? 0 : text.hashCode()); - return result; - } - - /** - * Is this Diff equivalent to another Diff? - * @param obj Another Diff to compare against. - * @return true or false. - */ - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - Diff other = (Diff) obj; - if (operation != other.operation) { - return false; - } - if (text == null) { - if (other.text != null) { - return false; - } - } else if (!text.equals(other.text)) { - return false; - } - return true; - } - } - - - /** - * Class representing one patch operation. - */ - public static class Patch { - public LinkedList diffs; - public int start1; - public int start2; - public int length1; - public int length2; - - /** - * Constructor. Initializes with an empty list of diffs. - */ - public Patch() { - this.diffs = new LinkedList(); - } - - /** - * Emulate GNU diff's format. - * Header: @@ -382,8 +481,9 @@ - * Indices are printed as 1-based, not 0-based. - * @return The GNU diff string. - */ - public String toString() { - String coords1, coords2; - if (this.length1 == 0) { - coords1 = this.start1 + ",0"; - } else if (this.length1 == 1) { - coords1 = Integer.toString(this.start1 + 1); - } else { - coords1 = (this.start1 + 1) + "," + this.length1; - } - if (this.length2 == 0) { - coords2 = this.start2 + ",0"; - } else if (this.length2 == 1) { - coords2 = Integer.toString(this.start2 + 1); - } else { - coords2 = (this.start2 + 1) + "," + this.length2; - } - StringBuilder text = new StringBuilder(); - text.append("@@ -").append(coords1).append(" +").append(coords2) - .append(" @@\n"); - // Escape the body of the patch with %xx notation. - for (Diff aDiff : this.diffs) { - switch (aDiff.operation) { - case INSERT: - text.append('+'); - break; - case DELETE: - text.append('-'); - break; - case EQUAL: - text.append(' '); - break; - } - try { - text.append(URLEncoder.encode(aDiff.text, "UTF-8").replace('+', ' ')) - .append("\n"); - } catch (UnsupportedEncodingException e) { - // Not likely on modern system. - throw new Error("This system does not support UTF-8.", e); - } - } - return unescapeForEncodeUriCompatability(text.toString()); - } - } - - /** - * Unescape selected chars for compatability with JavaScript's encodeURI. - * In speed critical applications this could be dropped since the - * receiving application will certainly decode these fine. - * Note that this function is case-sensitive. Thus "%3f" would not be - * unescaped. But this is ok because it is only called with the output of - * URLEncoder.encode which returns uppercase hex. - * - * Example: "%3F" -> "?", "%24" -> "$", etc. - * - * @param str The string to escape. - * @return The escaped string. - */ - private static String unescapeForEncodeUriCompatability(String str) { - return str.replace("%21", "!").replace("%7E", "~") - .replace("%27", "'").replace("%28", "(").replace("%29", ")") - .replace("%3B", ";").replace("%2F", "/").replace("%3F", "?") - .replace("%3A", ":").replace("%40", "@").replace("%26", "&") - .replace("%3D", "=").replace("%2B", "+").replace("%24", "$") - .replace("%2C", ",").replace("%23", "#"); - } + // Defaults. + // Set these on your diff_match_patch instance to override the defaults. + + /** + * Number of seconds to map a diff before giving up (0 for infinity). + */ + public float Diff_Timeout = 1.0f; + /** + * Cost of an empty edit operation in terms of edit characters. + */ + public short Diff_EditCost = 4; + /** + * At what point is no match declared (0.0 = perfection, 1.0 = very loose). + */ + public float Match_Threshold = 0.5f; + /** + * How far to search for a match (0 = exact location, 1000+ = broad match). + * A match this many characters away from the expected location will add + * 1.0 to the score (0.0 is a perfect match). + */ + public int Match_Distance = 1000; + /** + * When deleting a large block of text (over ~64 characters), how close do + * the contents have to be to match the expected contents. (0.0 = perfection, + * 1.0 = very loose). Note that Match_Threshold controls how closely the + * end points of a delete need to match. + */ + public float Patch_DeleteThreshold = 0.5f; + /** + * Chunk size for context length. + */ + public short Patch_Margin = 4; + + /** + * The number of bits in an int. + */ + private short Match_MaxBits = 32; + + /** + * Internal class for returning results from diff_linesToChars(). + * Other less paranoid languages just use a three-element array. + */ + protected static class LinesToCharsResult { + protected String chars1; + protected String chars2; + protected List lineArray; + + protected LinesToCharsResult(String chars1, String chars2, + List lineArray) { + this.chars1 = chars1; + this.chars2 = chars2; + this.lineArray = lineArray; + } + } + + // DIFF FUNCTIONS + + /** + * The data structure representing a diff is a Linked list of Diff objects: + * {Diff(Operation.DELETE, "Hello"), Diff(Operation.INSERT, "Goodbye"), + * Diff(Operation.EQUAL, " world.")} + * which means: delete "Hello", add "Goodbye" and keep " world." + */ + public enum Operation { + DELETE, INSERT, EQUAL + } + + /** + * Find the differences between two texts. + * Run a faster, slightly less optimal diff. + * This method allows the 'checklines' of diff_main() to be optional. + * Most of the time checklines is wanted, so default to true. + * @param text1 Old string to be diffed. + * @param text2 New string to be diffed. + * @return Linked List of Diff objects. + */ + public LinkedList diff_main(String text1, String text2) { + return diff_main(text1, text2, true); + } + + /** + * Find the differences between two texts. + * @param text1 Old string to be diffed. + * @param text2 New string to be diffed. + * @param checklines Speedup flag. If false, then don't run a + * line-level diff first to identify the changed areas. + * If true, then run a faster slightly less optimal diff. + * @return Linked List of Diff objects. + */ + public LinkedList diff_main(String text1, String text2, + boolean checklines) { + // Set a deadline by which time the diff must be complete. + long deadline; + if (Diff_Timeout <= 0) { + deadline = Long.MAX_VALUE; + } else { + deadline = System.currentTimeMillis() + (long) (Diff_Timeout * 1000); + } + return diff_main(text1, text2, checklines, deadline); + } + + /** + * Find the differences between two texts. Simplifies the problem by + * stripping any common prefix or suffix off the texts before diffing. + * @param text1 Old string to be diffed. + * @param text2 New string to be diffed. + * @param checklines Speedup flag. If false, then don't run a + * line-level diff first to identify the changed areas. + * If true, then run a faster slightly less optimal diff. + * @param deadline Time when the diff should be complete by. Used + * internally for recursive calls. Users should set DiffTimeout instead. + * @return Linked List of Diff objects. + */ + private LinkedList diff_main(String text1, String text2, + boolean checklines, long deadline) { + // Check for null inputs. + if (text1 == null || text2 == null) { + throw new IllegalArgumentException("Null inputs. (diff_main)"); + } + + // Check for equality (speedup). + LinkedList diffs; + if (text1.equals(text2)) { + diffs = new LinkedList(); + if (text1.length() != 0) { + diffs.add(new Diff(Operation.EQUAL, text1)); + } + return diffs; + } + + // Trim off common prefix (speedup). + int commonlength = diff_commonPrefix(text1, text2); + String commonprefix = text1.substring(0, commonlength); + text1 = text1.substring(commonlength); + text2 = text2.substring(commonlength); + + // Trim off common suffix (speedup). + commonlength = diff_commonSuffix(text1, text2); + String commonsuffix = text1.substring(text1.length() - commonlength); + text1 = text1.substring(0, text1.length() - commonlength); + text2 = text2.substring(0, text2.length() - commonlength); + + // Compute the diff on the middle block. + diffs = diff_compute(text1, text2, checklines, deadline); + + // Restore the prefix and suffix. + if (commonprefix.length() != 0) { + diffs.addFirst(new Diff(Operation.EQUAL, commonprefix)); + } + if (commonsuffix.length() != 0) { + diffs.addLast(new Diff(Operation.EQUAL, commonsuffix)); + } + + diff_cleanupMerge(diffs); + return diffs; + } + + /** + * Find the differences between two texts. Assumes that the texts do not + * have any common prefix or suffix. + * @param text1 Old string to be diffed. + * @param text2 New string to be diffed. + * @param checklines Speedup flag. If false, then don't run a + * line-level diff first to identify the changed areas. + * If true, then run a faster slightly less optimal diff. + * @param deadline Time when the diff should be complete by. + * @return Linked List of Diff objects. + */ + private LinkedList diff_compute(String text1, String text2, + boolean checklines, long deadline) { + LinkedList diffs = new LinkedList(); + + if (text1.length() == 0) { + // Just add some text (speedup). + diffs.add(new Diff(Operation.INSERT, text2)); + return diffs; + } + + if (text2.length() == 0) { + // Just delete some text (speedup). + diffs.add(new Diff(Operation.DELETE, text1)); + return diffs; + } + + String longtext = text1.length() > text2.length() ? text1 : text2; + String shorttext = text1.length() > text2.length() ? text2 : text1; + int i = longtext.indexOf(shorttext); + if (i != -1) { + // Shorter text is inside the longer text (speedup). + Operation op = (text1.length() > text2.length()) ? Operation.DELETE : Operation.INSERT; + diffs.add(new Diff(op, longtext.substring(0, i))); + diffs.add(new Diff(Operation.EQUAL, shorttext)); + diffs.add(new Diff(op, longtext.substring(i + shorttext.length()))); + return diffs; + } + + if (shorttext.length() == 1) { + // Single character string. + // After the previous speedup, the character can't be an equality. + diffs.add(new Diff(Operation.DELETE, text1)); + diffs.add(new Diff(Operation.INSERT, text2)); + return diffs; + } + + // Check to see if the problem can be split in two. + String[] hm = diff_halfMatch(text1, text2); + if (hm != null) { + // A half-match was found, sort out the return data. + String text1_a = hm[0]; + String text1_b = hm[1]; + String text2_a = hm[2]; + String text2_b = hm[3]; + String mid_common = hm[4]; + // Send both pairs off for separate processing. + LinkedList diffs_a = diff_main( + text1_a, text2_a, + checklines, deadline); + LinkedList diffs_b = diff_main( + text1_b, text2_b, + checklines, deadline); + // Merge the results. + diffs = diffs_a; + diffs.add(new Diff(Operation.EQUAL, mid_common)); + diffs.addAll(diffs_b); + return diffs; + } + + if (checklines && text1.length() > 100 && text2.length() > 100) { + return diff_lineMode(text1, text2, deadline); + } + + return diff_bisect(text1, text2, deadline); + } + + /** + * Do a quick line-level diff on both strings, then rediff the parts for + * greater accuracy. + * This speedup can produce non-minimal diffs. + * @param text1 Old string to be diffed. + * @param text2 New string to be diffed. + * @param deadline Time when the diff should be complete by. + * @return Linked List of Diff objects. + */ + private LinkedList diff_lineMode(String text1, String text2, + long deadline) { + // Scan the text on a line-by-line basis first. + LinesToCharsResult a = diff_linesToChars(text1, text2); + text1 = a.chars1; + text2 = a.chars2; + List linearray = a.lineArray; + + LinkedList diffs = diff_main(text1, text2, false, deadline); + + // Convert the diff back to original text. + diff_charsToLines(diffs, linearray); + // Eliminate freak matches (e.g. blank lines) + diff_cleanupSemantic(diffs); + + // Rediff any replacement blocks, this time character-by-character. + // Add a dummy entry at the end. + diffs.add(new Diff(Operation.EQUAL, "")); + int count_delete = 0; + int count_insert = 0; + String text_delete = ""; + String text_insert = ""; + ListIterator pointer = diffs.listIterator(); + Diff thisDiff = pointer.next(); + while (thisDiff != null) { + switch (thisDiff.operation) { + case INSERT: + count_insert++; + text_insert += thisDiff.text; + break; + case DELETE: + count_delete++; + text_delete += thisDiff.text; + break; + case EQUAL: + // Upon reaching an equality, check for prior redundancies. + if (count_delete >= 1 && count_insert >= 1) { + // Delete the offending records and add the merged ones. + pointer.previous(); + for (int j = 0; j < count_delete + count_insert; j++) { + pointer.previous(); + pointer.remove(); + } + for (Diff subDiff : diff_main( + text_delete, text_insert, false, + deadline)) { + pointer.add(subDiff); + } + } + count_insert = 0; + count_delete = 0; + text_delete = ""; + text_insert = ""; + break; + } + thisDiff = pointer.hasNext() ? pointer.next() : null; + } + diffs.removeLast(); // Remove the dummy entry at the end. + + return diffs; + } + + /** + * Find the 'middle snake' of a diff, split the problem in two + * and return the recursively constructed diff. + * See Myers 1986 paper: An O(ND) Difference Algorithm and Its Variations. + * @param text1 Old string to be diffed. + * @param text2 New string to be diffed. + * @param deadline Time at which to bail if not yet complete. + * @return LinkedList of Diff objects. + */ + protected LinkedList diff_bisect(String text1, String text2, + long deadline) { + // Cache the text lengths to prevent multiple calls. + int text1_length = text1.length(); + int text2_length = text2.length(); + int max_d = (text1_length + text2_length + 1) / 2; + int v_offset = max_d; + int v_length = 2 * max_d; + int[] v1 = new int[v_length]; + int[] v2 = new int[v_length]; + for (int x = 0; x < v_length; x++) { + v1[x] = -1; + v2[x] = -1; + } + v1[v_offset + 1] = 0; + v2[v_offset + 1] = 0; + int delta = text1_length - text2_length; + // If the total number of characters is odd, then the front path will + // collide with the reverse path. + boolean front = (delta % 2 != 0); + // Offsets for start and end of k loop. + // Prevents mapping of space beyond the grid. + int k1start = 0; + int k1end = 0; + int k2start = 0; + int k2end = 0; + for (int d = 0; d < max_d; d++) { + // Bail out if deadline is reached. + if (System.currentTimeMillis() > deadline) { + break; + } + + // Walk the front path one step. + for (int k1 = -d + k1start; k1 <= d - k1end; k1 += 2) { + int k1_offset = v_offset + k1; + int x1; + if (k1 == -d || (k1 != d && v1[k1_offset - 1] < v1[k1_offset + 1])) { + x1 = v1[k1_offset + 1]; + } else { + x1 = v1[k1_offset - 1] + 1; + } + int y1 = x1 - k1; + while (x1 < text1_length && y1 < text2_length + && text1.charAt(x1) == text2.charAt(y1)) { + x1++; + y1++; + } + v1[k1_offset] = x1; + if (x1 > text1_length) { + // Ran off the right of the graph. + k1end += 2; + } else if (y1 > text2_length) { + // Ran off the bottom of the graph. + k1start += 2; + } else if (front) { + int k2_offset = v_offset + delta - k1; + if (k2_offset >= 0 && k2_offset < v_length && v2[k2_offset] != -1) { + // Mirror x2 onto top-left coordinate system. + int x2 = text1_length - v2[k2_offset]; + if (x1 >= x2) { + // Overlap detected. + return diff_bisectSplit(text1, text2, x1, y1, deadline); + } + } + } + } + + // Walk the reverse path one step. + for (int k2 = -d + k2start; k2 <= d - k2end; k2 += 2) { + int k2_offset = v_offset + k2; + int x2; + if (k2 == -d || (k2 != d && v2[k2_offset - 1] < v2[k2_offset + 1])) { + x2 = v2[k2_offset + 1]; + } else { + x2 = v2[k2_offset - 1] + 1; + } + int y2 = x2 - k2; + while (x2 < text1_length && y2 < text2_length + && text1.charAt(text1_length - x2 - 1) == text2.charAt(text2_length - y2 - 1)) { + x2++; + y2++; + } + v2[k2_offset] = x2; + if (x2 > text1_length) { + // Ran off the left of the graph. + k2end += 2; + } else if (y2 > text2_length) { + // Ran off the top of the graph. + k2start += 2; + } else if (!front) { + int k1_offset = v_offset + delta - k2; + if (k1_offset >= 0 && k1_offset < v_length && v1[k1_offset] != -1) { + int x1 = v1[k1_offset]; + int y1 = v_offset + x1 - k1_offset; + // Mirror x2 onto top-left coordinate system. + x2 = text1_length - x2; + if (x1 >= x2) { + // Overlap detected. + return diff_bisectSplit(text1, text2, x1, y1, deadline); + } + } + } + } + } + // Diff took too long and hit the deadline or + // number of diffs equals number of characters, no commonality at all. + LinkedList diffs = new LinkedList(); + diffs.add(new Diff(Operation.DELETE, text1)); + diffs.add(new Diff(Operation.INSERT, text2)); + return diffs; + } + + /** + * Given the location of the 'middle snake', split the diff in two parts + * and recurse. + * @param text1 Old string to be diffed. + * @param text2 New string to be diffed. + * @param x Index of split point in text1. + * @param y Index of split point in text2. + * @param deadline Time at which to bail if not yet complete. + * @return LinkedList of Diff objects. + */ + private LinkedList diff_bisectSplit(String text1, String text2, + int x, int y, long deadline) { + String text1a = text1.substring(0, x); + String text2a = text2.substring(0, y); + String text1b = text1.substring(x); + String text2b = text2.substring(y); + + // Compute both diffs serially. + LinkedList diffs = diff_main(text1a, text2a, false, deadline); + LinkedList diffsb = diff_main(text1b, text2b, false, deadline); + + diffs.addAll(diffsb); + return diffs; + } + + /** + * Split two texts into a list of strings. Reduce the texts to a string of + * hashes where each Unicode character represents one line. + * @param text1 First string. + * @param text2 Second string. + * @return An object containing the encoded text1, the encoded text2 and + * the List of unique strings. The zeroth element of the List of + * unique strings is intentionally blank. + */ + protected LinesToCharsResult diff_linesToChars(String text1, String text2) { + List lineArray = new ArrayList(); + Map lineHash = new HashMap(); + // e.g. linearray[4] == "Hello\n" + // e.g. linehash.get("Hello\n") == 4 + + // "\x00" is a valid character, but various debuggers don't like it. + // So we'll insert a junk entry to avoid generating a null character. + lineArray.add(""); + + // Allocate 2/3rds of the space for text1, the rest for text2. + String chars1 = diff_linesToCharsMunge(text1, lineArray, lineHash, 40000); + String chars2 = diff_linesToCharsMunge(text2, lineArray, lineHash, 65535); + return new LinesToCharsResult(chars1, chars2, lineArray); + } + + /** + * Split a text into a list of strings. Reduce the texts to a string of + * hashes where each Unicode character represents one line. + * @param text String to encode. + * @param lineArray List of unique strings. + * @param lineHash Map of strings to indices. + * @param maxLines Maximum length of lineArray. + * @return Encoded string. + */ + private String diff_linesToCharsMunge(String text, List lineArray, + Map lineHash, int maxLines) { + int lineStart = 0; + int lineEnd = -1; + String line; + StringBuilder chars = new StringBuilder(); + // Walk the text, pulling out a substring for each line. + // text.split('\n') would would temporarily double our memory footprint. + // Modifying text would create many large strings to garbage collect. + while (lineEnd < text.length() - 1) { + lineEnd = text.indexOf('\n', lineStart); + if (lineEnd == -1) { + lineEnd = text.length() - 1; + } + line = text.substring(lineStart, lineEnd + 1); + + if (lineHash.containsKey(line)) { + chars.append(String.valueOf((char) (int) lineHash.get(line))); + } else { + if (lineArray.size() == maxLines) { + // Bail out at 65535 because + // String.valueOf((char) 65536).equals(String.valueOf(((char) 0))) + line = text.substring(lineStart); + lineEnd = text.length(); + } + lineArray.add(line); + lineHash.put(line, lineArray.size() - 1); + chars.append(String.valueOf((char) (lineArray.size() - 1))); + } + lineStart = lineEnd + 1; + } + return chars.toString(); + } + + /** + * Rehydrate the text in a diff from a string of line hashes to real lines of + * text. + * @param diffs List of Diff objects. + * @param lineArray List of unique strings. + */ + protected void diff_charsToLines(List diffs, + List lineArray) { + StringBuilder text; + for (Diff diff : diffs) { + text = new StringBuilder(); + for (int j = 0; j < diff.text.length(); j++) { + text.append(lineArray.get(diff.text.charAt(j))); + } + diff.text = text.toString(); + } + } + + /** + * Determine the common prefix of two strings + * @param text1 First string. + * @param text2 Second string. + * @return The number of characters common to the start of each string. + */ + public int diff_commonPrefix(String text1, String text2) { + // Performance analysis: https://neil.fraser.name/news/2007/10/09/ + int n = Math.min(text1.length(), text2.length()); + for (int i = 0; i < n; i++) { + if (text1.charAt(i) != text2.charAt(i)) { + return i; + } + } + return n; + } + + /** + * Determine the common suffix of two strings + * @param text1 First string. + * @param text2 Second string. + * @return The number of characters common to the end of each string. + */ + public int diff_commonSuffix(String text1, String text2) { + // Performance analysis: https://neil.fraser.name/news/2007/10/09/ + int text1_length = text1.length(); + int text2_length = text2.length(); + int n = Math.min(text1_length, text2_length); + for (int i = 1; i <= n; i++) { + if (text1.charAt(text1_length - i) != text2.charAt(text2_length - i)) { + return i - 1; + } + } + return n; + } + + /** + * Determine if the suffix of one string is the prefix of another. + * @param text1 First string. + * @param text2 Second string. + * @return The number of characters common to the end of the first + * string and the start of the second string. + */ + protected int diff_commonOverlap(String text1, String text2) { + // Cache the text lengths to prevent multiple calls. + int text1_length = text1.length(); + int text2_length = text2.length(); + // Eliminate the null case. + if (text1_length == 0 || text2_length == 0) { + return 0; + } + // Truncate the longer string. + if (text1_length > text2_length) { + text1 = text1.substring(text1_length - text2_length); + } else if (text1_length < text2_length) { + text2 = text2.substring(0, text1_length); + } + int text_length = Math.min(text1_length, text2_length); + // Quick check for the worst case. + if (text1.equals(text2)) { + return text_length; + } + + // Start by looking for a single character match + // and increase length until no match is found. + // Performance analysis: https://neil.fraser.name/news/2010/11/04/ + int best = 0; + int length = 1; + while (true) { + String pattern = text1.substring(text_length - length); + int found = text2.indexOf(pattern); + if (found == -1) { + return best; + } + length += found; + if (found == 0 || text1 + .substring(text_length - length) + .equals( + text2.substring(0, length))) { + best = length; + length++; + } + } + } + + /** + * Do the two texts share a substring which is at least half the length of + * the longer text? + * This speedup can produce non-minimal diffs. + * @param text1 First string. + * @param text2 Second string. + * @return Five element String array, containing the prefix of text1, the + * suffix of text1, the prefix of text2, the suffix of text2 and the + * common middle. Or null if there was no match. + */ + protected String[] diff_halfMatch(String text1, String text2) { + if (Diff_Timeout <= 0) { + // Don't risk returning a non-optimal diff if we have unlimited time. + return null; + } + String longtext = text1.length() > text2.length() ? text1 : text2; + String shorttext = text1.length() > text2.length() ? text2 : text1; + if (longtext.length() < 4 || shorttext.length() * 2 < longtext.length()) { + return null; // Pointless. + } + + // First check if the second quarter is the seed for a half-match. + String[] hm1 = diff_halfMatchI( + longtext, shorttext, + (longtext.length() + 3) / 4); + // Check again based on the third quarter. + String[] hm2 = diff_halfMatchI( + longtext, shorttext, + (longtext.length() + 1) / 2); + String[] hm; + if (hm1 == null && hm2 == null) { + return null; + } else if (hm2 == null) { + hm = hm1; + } else if (hm1 == null) { + hm = hm2; + } else { + // Both matched. Select the longest. + hm = hm1[4].length() > hm2[4].length() ? hm1 : hm2; + } + + // A half-match was found, sort out the return data. + if (text1.length() > text2.length()) { + return hm; + // return new String[]{hm[0], hm[1], hm[2], hm[3], hm[4]}; + } else { + return new String[] { + hm[2], hm[3], hm[0], hm[1], hm[4] + }; + } + } + + /** + * Does a substring of shorttext exist within longtext such that the + * substring is at least half the length of longtext? + * @param longtext Longer string. + * @param shorttext Shorter string. + * @param i Start index of quarter length substring within longtext. + * @return Five element String array, containing the prefix of longtext, the + * suffix of longtext, the prefix of shorttext, the suffix of shorttext + * and the common middle. Or null if there was no match. + */ + private String[] diff_halfMatchI(String longtext, String shorttext, int i) { + // Start with a 1/4 length substring at position i as a seed. + String seed = longtext.substring(i, i + longtext.length() / 4); + int j = -1; + String best_common = ""; + String best_longtext_a = "", best_longtext_b = ""; + String best_shorttext_a = "", best_shorttext_b = ""; + while ((j = shorttext.indexOf(seed, j + 1)) != -1) { + int prefixLength = diff_commonPrefix( + longtext.substring(i), + shorttext.substring(j)); + int suffixLength = diff_commonSuffix( + longtext.substring(0, i), + shorttext.substring(0, j)); + if (best_common.length() < suffixLength + prefixLength) { + best_common = shorttext.substring(j - suffixLength, j) + + shorttext.substring(j, j + prefixLength); + best_longtext_a = longtext.substring(0, i - suffixLength); + best_longtext_b = longtext.substring(i + prefixLength); + best_shorttext_a = shorttext.substring(0, j - suffixLength); + best_shorttext_b = shorttext.substring(j + prefixLength); + } + } + if (best_common.length() * 2 >= longtext.length()) { + return new String[] { + best_longtext_a, best_longtext_b, + best_shorttext_a, best_shorttext_b, best_common + }; + } else { + return null; + } + } + + /** + * Reduce the number of edits by eliminating semantically trivial equalities. + * @param diffs LinkedList of Diff objects. + */ + public void diff_cleanupSemantic(LinkedList diffs) { + if (diffs.isEmpty()) { + return; + } + boolean changes = false; + Deque equalities = new ArrayDeque(); // Double-ended queue of qualities. + String lastEquality = null; // Always equal to equalities.peek().text + ListIterator pointer = diffs.listIterator(); + // Number of characters that changed prior to the equality. + int length_insertions1 = 0; + int length_deletions1 = 0; + // Number of characters that changed after the equality. + int length_insertions2 = 0; + int length_deletions2 = 0; + Diff thisDiff = pointer.next(); + while (thisDiff != null) { + if (thisDiff.operation == Operation.EQUAL) { + // Equality found. + equalities.push(thisDiff); + length_insertions1 = length_insertions2; + length_deletions1 = length_deletions2; + length_insertions2 = 0; + length_deletions2 = 0; + lastEquality = thisDiff.text; + } else { + // An insertion or deletion. + if (thisDiff.operation == Operation.INSERT) { + length_insertions2 += thisDiff.text.length(); + } else { + length_deletions2 += thisDiff.text.length(); + } + // Eliminate an equality that is smaller or equal to the edits on both + // sides of it. + if (lastEquality != null && (lastEquality.length() <= Math.max(length_insertions1, length_deletions1)) + && (lastEquality.length() <= Math.max(length_insertions2, length_deletions2))) { + // System.out.println("Splitting: '" + lastEquality + "'"); + // Walk back to offending equality. + while (thisDiff != equalities.peek()) { + thisDiff = pointer.previous(); + } + pointer.next(); + + // Replace equality with a delete. + pointer.set(new Diff(Operation.DELETE, lastEquality)); + // Insert a corresponding an insert. + pointer.add(new Diff(Operation.INSERT, lastEquality)); + + equalities.pop(); // Throw away the equality we just deleted. + if (!equalities.isEmpty()) { + // Throw away the previous equality (it needs to be reevaluated). + equalities.pop(); + } + if (equalities.isEmpty()) { + // There are no previous equalities, walk back to the start. + while (pointer.hasPrevious()) { + pointer.previous(); + } + } else { + // There is a safe equality we can fall back to. + thisDiff = equalities.peek(); + while (thisDiff != pointer.previous()) { + // Intentionally empty loop. + } + } + + length_insertions1 = 0; // Reset the counters. + length_insertions2 = 0; + length_deletions1 = 0; + length_deletions2 = 0; + lastEquality = null; + changes = true; + } + } + thisDiff = pointer.hasNext() ? pointer.next() : null; + } + + // Normalize the diff. + if (changes) { + diff_cleanupMerge(diffs); + } + diff_cleanupSemanticLossless(diffs); + + // Find any overlaps between deletions and insertions. + // e.g: abcxxxxxxdef + // -> abcxxxdef + // e.g: xxxabcdefxxx + // -> defxxxabc + // Only extract an overlap if it is as big as the edit ahead or behind it. + pointer = diffs.listIterator(); + Diff prevDiff = null; + thisDiff = null; + if (pointer.hasNext()) { + prevDiff = pointer.next(); + if (pointer.hasNext()) { + thisDiff = pointer.next(); + } + } + while (thisDiff != null) { + if (prevDiff.operation == Operation.DELETE && + thisDiff.operation == Operation.INSERT) { + String deletion = prevDiff.text; + String insertion = thisDiff.text; + int overlap_length1 = this.diff_commonOverlap(deletion, insertion); + int overlap_length2 = this.diff_commonOverlap(insertion, deletion); + if (overlap_length1 >= overlap_length2) { + if (overlap_length1 >= deletion.length() / 2.0 || + overlap_length1 >= insertion.length() / 2.0) { + // Overlap found. Insert an equality and trim the surrounding edits. + pointer.previous(); + pointer + .add( + new Diff(Operation.EQUAL, + insertion.substring(0, overlap_length1))); + prevDiff.text = deletion.substring(0, deletion.length() - overlap_length1); + thisDiff.text = insertion.substring(overlap_length1); + // pointer.add inserts the element before the cursor, so there is + // no need to step past the new element. + } + } else { + if (overlap_length2 >= deletion.length() / 2.0 || + overlap_length2 >= insertion.length() / 2.0) { + // Reverse overlap found. + // Insert an equality and swap and trim the surrounding edits. + pointer.previous(); + pointer + .add( + new Diff(Operation.EQUAL, + deletion.substring(0, overlap_length2))); + prevDiff.operation = Operation.INSERT; + prevDiff.text = insertion.substring(0, insertion.length() - overlap_length2); + thisDiff.operation = Operation.DELETE; + thisDiff.text = deletion.substring(overlap_length2); + // pointer.add inserts the element before the cursor, so there is + // no need to step past the new element. + } + } + thisDiff = pointer.hasNext() ? pointer.next() : null; + } + prevDiff = thisDiff; + thisDiff = pointer.hasNext() ? pointer.next() : null; + } + } + + /** + * Look for single edits surrounded on both sides by equalities + * which can be shifted sideways to align the edit to a word boundary. + * e.g: The cat came. -> The cat came. + * @param diffs LinkedList of Diff objects. + */ + public void diff_cleanupSemanticLossless(LinkedList diffs) { + String equality1, edit, equality2; + String commonString; + int commonOffset; + int score, bestScore; + String bestEquality1, bestEdit, bestEquality2; + // Create a new iterator at the start. + ListIterator pointer = diffs.listIterator(); + Diff prevDiff = pointer.hasNext() ? pointer.next() : null; + Diff thisDiff = pointer.hasNext() ? pointer.next() : null; + Diff nextDiff = pointer.hasNext() ? pointer.next() : null; + // Intentionally ignore the first and last element (don't need checking). + while (nextDiff != null) { + if (prevDiff.operation == Operation.EQUAL && + nextDiff.operation == Operation.EQUAL) { + // This is a single edit surrounded by equalities. + equality1 = prevDiff.text; + edit = thisDiff.text; + equality2 = nextDiff.text; + + // First, shift the edit as far left as possible. + commonOffset = diff_commonSuffix(equality1, edit); + if (commonOffset != 0) { + commonString = edit.substring(edit.length() - commonOffset); + equality1 = equality1.substring(0, equality1.length() - commonOffset); + edit = commonString + edit.substring(0, edit.length() - commonOffset); + equality2 = commonString + equality2; + } + + // Second, step character by character right, looking for the best fit. + bestEquality1 = equality1; + bestEdit = edit; + bestEquality2 = equality2; + bestScore = diff_cleanupSemanticScore(equality1, edit) + + diff_cleanupSemanticScore(edit, equality2); + while (edit.length() != 0 && equality2.length() != 0 + && edit.charAt(0) == equality2.charAt(0)) { + equality1 += edit.charAt(0); + edit = edit.substring(1) + equality2.charAt(0); + equality2 = equality2.substring(1); + score = diff_cleanupSemanticScore(equality1, edit) + + diff_cleanupSemanticScore(edit, equality2); + // The >= encourages trailing rather than leading whitespace on edits. + if (score >= bestScore) { + bestScore = score; + bestEquality1 = equality1; + bestEdit = edit; + bestEquality2 = equality2; + } + } + + if (!prevDiff.text.equals(bestEquality1)) { + // We have an improvement, save it back to the diff. + if (bestEquality1.length() != 0) { + prevDiff.text = bestEquality1; + } else { + pointer.previous(); // Walk past nextDiff. + pointer.previous(); // Walk past thisDiff. + pointer.previous(); // Walk past prevDiff. + pointer.remove(); // Delete prevDiff. + pointer.next(); // Walk past thisDiff. + pointer.next(); // Walk past nextDiff. + } + thisDiff.text = bestEdit; + if (bestEquality2.length() != 0) { + nextDiff.text = bestEquality2; + } else { + pointer.remove(); // Delete nextDiff. + nextDiff = thisDiff; + thisDiff = prevDiff; + } + } + } + prevDiff = thisDiff; + thisDiff = nextDiff; + nextDiff = pointer.hasNext() ? pointer.next() : null; + } + } + + /** + * Given two strings, compute a score representing whether the internal + * boundary falls on logical boundaries. + * Scores range from 6 (best) to 0 (worst). + * @param one First string. + * @param two Second string. + * @return The score. + */ + private int diff_cleanupSemanticScore(String one, String two) { + if (one.length() == 0 || two.length() == 0) { + // Edges are the best. + return 6; + } + + // Each port of this function behaves slightly differently due to + // subtle differences in each language's definition of things like + // 'whitespace'. Since this function's purpose is largely cosmetic, + // the choice has been made to use each language's native features + // rather than force total conformity. + char char1 = one.charAt(one.length() - 1); + char char2 = two.charAt(0); + boolean nonAlphaNumeric1 = !Character.isLetterOrDigit(char1); + boolean nonAlphaNumeric2 = !Character.isLetterOrDigit(char2); + boolean whitespace1 = nonAlphaNumeric1 && Character.isWhitespace(char1); + boolean whitespace2 = nonAlphaNumeric2 && Character.isWhitespace(char2); + boolean lineBreak1 = whitespace1 + && Character.getType(char1) == Character.CONTROL; + boolean lineBreak2 = whitespace2 + && Character.getType(char2) == Character.CONTROL; + boolean blankLine1 = lineBreak1 && BLANKLINEEND.matcher(one).find(); + boolean blankLine2 = lineBreak2 && BLANKLINESTART.matcher(two).find(); + + if (blankLine1 || blankLine2) { + // Five points for blank lines. + return 5; + } else if (lineBreak1 || lineBreak2) { + // Four points for line breaks. + return 4; + } else if (nonAlphaNumeric1 && !whitespace1 && whitespace2) { + // Three points for end of sentences. + return 3; + } else if (whitespace1 || whitespace2) { + // Two points for whitespace. + return 2; + } else if (nonAlphaNumeric1 || nonAlphaNumeric2) { + // One point for non-alphanumeric. + return 1; + } + return 0; + } + + // Define some regex patterns for matching boundaries. + private Pattern BLANKLINEEND = Pattern.compile("\\n\\r?\\n\\Z", Pattern.DOTALL); + private Pattern BLANKLINESTART = Pattern.compile("\\A\\r?\\n\\r?\\n", Pattern.DOTALL); + + /** + * Reduce the number of edits by eliminating operationally trivial equalities. + * @param diffs LinkedList of Diff objects. + */ + public void diff_cleanupEfficiency(LinkedList diffs) { + if (diffs.isEmpty()) { + return; + } + boolean changes = false; + Deque equalities = new ArrayDeque(); // Double-ended queue of equalities. + String lastEquality = null; // Always equal to equalities.peek().text + ListIterator pointer = diffs.listIterator(); + // Is there an insertion operation before the last equality. + boolean pre_ins = false; + // Is there a deletion operation before the last equality. + boolean pre_del = false; + // Is there an insertion operation after the last equality. + boolean post_ins = false; + // Is there a deletion operation after the last equality. + boolean post_del = false; + Diff thisDiff = pointer.next(); + Diff safeDiff = thisDiff; // The last Diff that is known to be unsplittable. + while (thisDiff != null) { + if (thisDiff.operation == Operation.EQUAL) { + // Equality found. + if (thisDiff.text.length() < Diff_EditCost && (post_ins || post_del)) { + // Candidate found. + equalities.push(thisDiff); + pre_ins = post_ins; + pre_del = post_del; + lastEquality = thisDiff.text; + } else { + // Not a candidate, and can never become one. + equalities.clear(); + lastEquality = null; + safeDiff = thisDiff; + } + post_ins = post_del = false; + } else { + // An insertion or deletion. + if (thisDiff.operation == Operation.DELETE) { + post_del = true; + } else { + post_ins = true; + } + /* + * Five types to be split: ABXYCD + * AXCD ABXC + * AXCD ABXC + */ + if (lastEquality != null + && ((pre_ins && pre_del && post_ins && post_del) + || ((lastEquality.length() < Diff_EditCost / 2) + && ((pre_ins ? 1 : 0) + (pre_del ? 1 : 0) + + (post_ins ? 1 : 0) + (post_del ? 1 : 0)) == 3))) { + // System.out.println("Splitting: '" + lastEquality + "'"); + // Walk back to offending equality. + while (thisDiff != equalities.peek()) { + thisDiff = pointer.previous(); + } + pointer.next(); + + // Replace equality with a delete. + pointer.set(new Diff(Operation.DELETE, lastEquality)); + // Insert a corresponding an insert. + pointer.add(thisDiff = new Diff(Operation.INSERT, lastEquality)); + + equalities.pop(); // Throw away the equality we just deleted. + lastEquality = null; + if (pre_ins && pre_del) { + // No changes made which could affect previous entry, keep going. + post_ins = post_del = true; + equalities.clear(); + safeDiff = thisDiff; + } else { + if (!equalities.isEmpty()) { + // Throw away the previous equality (it needs to be reevaluated). + equalities.pop(); + } + if (equalities.isEmpty()) { + // There are no previous questionable equalities, + // walk back to the last known safe diff. + thisDiff = safeDiff; + } else { + // There is an equality we can fall back to. + thisDiff = equalities.peek(); + } + while (thisDiff != pointer.previous()) { + // Intentionally empty loop. + } + post_ins = post_del = false; + } + + changes = true; + } + } + thisDiff = pointer.hasNext() ? pointer.next() : null; + } + + if (changes) { + diff_cleanupMerge(diffs); + } + } + + /** + * Reorder and merge like edit sections. Merge equalities. + * Any edit section can move as long as it doesn't cross an equality. + * @param diffs LinkedList of Diff objects. + */ + public void diff_cleanupMerge(LinkedList diffs) { + diffs.add(new Diff(Operation.EQUAL, "")); // Add a dummy entry at the end. + ListIterator pointer = diffs.listIterator(); + int count_delete = 0; + int count_insert = 0; + String text_delete = ""; + String text_insert = ""; + Diff thisDiff = pointer.next(); + Diff prevEqual = null; + int commonlength; + while (thisDiff != null) { + switch (thisDiff.operation) { + case INSERT: + count_insert++; + text_insert += thisDiff.text; + prevEqual = null; + break; + case DELETE: + count_delete++; + text_delete += thisDiff.text; + prevEqual = null; + break; + case EQUAL: + if (count_delete + count_insert > 1) { + boolean both_types = count_delete != 0 && count_insert != 0; + // Delete the offending records. + pointer.previous(); // Reverse direction. + while (count_delete-- > 0) { + pointer.previous(); + pointer.remove(); + } + while (count_insert-- > 0) { + pointer.previous(); + pointer.remove(); + } + if (both_types) { + // Factor out any common prefixies. + commonlength = diff_commonPrefix(text_insert, text_delete); + if (commonlength != 0) { + if (pointer.hasPrevious()) { + thisDiff = pointer.previous(); + assert thisDiff.operation == Operation.EQUAL : "Previous diff should have been an equality."; + thisDiff.text += text_insert.substring(0, commonlength); + pointer.next(); + } else { + pointer + .add( + new Diff(Operation.EQUAL, + text_insert.substring(0, commonlength))); + } + text_insert = text_insert.substring(commonlength); + text_delete = text_delete.substring(commonlength); + } + // Factor out any common suffixies. + commonlength = diff_commonSuffix(text_insert, text_delete); + if (commonlength != 0) { + thisDiff = pointer.next(); + thisDiff.text = text_insert + .substring( + text_insert.length() + - commonlength) + + thisDiff.text; + text_insert = text_insert + .substring( + 0, text_insert.length() + - commonlength); + text_delete = text_delete + .substring( + 0, text_delete.length() + - commonlength); + pointer.previous(); + } + } + // Insert the merged records. + if (text_delete.length() != 0) { + pointer.add(new Diff(Operation.DELETE, text_delete)); + } + if (text_insert.length() != 0) { + pointer.add(new Diff(Operation.INSERT, text_insert)); + } + // Step forward to the equality. + thisDiff = pointer.hasNext() ? pointer.next() : null; + } else if (prevEqual != null) { + // Merge this equality with the previous one. + prevEqual.text += thisDiff.text; + pointer.remove(); + thisDiff = pointer.previous(); + pointer.next(); // Forward direction + } + count_insert = 0; + count_delete = 0; + text_delete = ""; + text_insert = ""; + prevEqual = thisDiff; + break; + } + thisDiff = pointer.hasNext() ? pointer.next() : null; + } + if (diffs.getLast().text.length() == 0) { + diffs.removeLast(); // Remove the dummy entry at the end. + } + + /* + * Second pass: look for single edits surrounded on both sides by equalities which can be shifted sideways to + * eliminate an equality. e.g: ABAC -> ABAC + */ + boolean changes = false; + // Create a new iterator at the start. + // (As opposed to walking the current one back.) + pointer = diffs.listIterator(); + Diff prevDiff = pointer.hasNext() ? pointer.next() : null; + thisDiff = pointer.hasNext() ? pointer.next() : null; + Diff nextDiff = pointer.hasNext() ? pointer.next() : null; + // Intentionally ignore the first and last element (don't need checking). + while (nextDiff != null) { + if (prevDiff.operation == Operation.EQUAL && + nextDiff.operation == Operation.EQUAL) { + // This is a single edit surrounded by equalities. + if (thisDiff.text.endsWith(prevDiff.text)) { + // Shift the edit over the previous equality. + thisDiff.text = prevDiff.text + + thisDiff.text + .substring( + 0, thisDiff.text.length() + - prevDiff.text.length()); + nextDiff.text = prevDiff.text + nextDiff.text; + pointer.previous(); // Walk past nextDiff. + pointer.previous(); // Walk past thisDiff. + pointer.previous(); // Walk past prevDiff. + pointer.remove(); // Delete prevDiff. + pointer.next(); // Walk past thisDiff. + thisDiff = pointer.next(); // Walk past nextDiff. + nextDiff = pointer.hasNext() ? pointer.next() : null; + changes = true; + } else if (thisDiff.text.startsWith(nextDiff.text)) { + // Shift the edit over the next equality. + prevDiff.text += nextDiff.text; + thisDiff.text = thisDiff.text.substring(nextDiff.text.length()) + + nextDiff.text; + pointer.remove(); // Delete nextDiff. + nextDiff = pointer.hasNext() ? pointer.next() : null; + changes = true; + } + } + prevDiff = thisDiff; + thisDiff = nextDiff; + nextDiff = pointer.hasNext() ? pointer.next() : null; + } + // If shifts were made, the diff needs reordering and another shift sweep. + if (changes) { + diff_cleanupMerge(diffs); + } + } + + /** + * loc is a location in text1, compute and return the equivalent location in + * text2. + * e.g. "The cat" vs "The big cat", 1->1, 5->8 + * @param diffs List of Diff objects. + * @param loc Location within text1. + * @return Location within text2. + */ + public int diff_xIndex(List diffs, int loc) { + int chars1 = 0; + int chars2 = 0; + int last_chars1 = 0; + int last_chars2 = 0; + Diff lastDiff = null; + for (Diff aDiff : diffs) { + if (aDiff.operation != Operation.INSERT) { + // Equality or deletion. + chars1 += aDiff.text.length(); + } + if (aDiff.operation != Operation.DELETE) { + // Equality or insertion. + chars2 += aDiff.text.length(); + } + if (chars1 > loc) { + // Overshot the location. + lastDiff = aDiff; + break; + } + last_chars1 = chars1; + last_chars2 = chars2; + } + if (lastDiff != null && lastDiff.operation == Operation.DELETE) { + // The location was deleted. + return last_chars2; + } + // Add the remaining character length. + return last_chars2 + (loc - last_chars1); + } + + /** + * Convert a Diff list into a pretty HTML report. + * @param diffs List of Diff objects. + * @return HTML representation. + */ + public String diff_prettyHtml(List diffs) { + StringBuilder html = new StringBuilder(); + for (Diff aDiff : diffs) { + String text = aDiff.text + .replace("&", "&") + .replace("<", "<") + .replace(">", ">") + .replace("\n", "¶
"); + switch (aDiff.operation) { + case INSERT: + html + .append("") + .append(text) + .append(""); + break; + case DELETE: + html + .append("") + .append(text) + .append(""); + break; + case EQUAL: + html.append("").append(text).append(""); + break; + } + } + return html.toString(); + } + + /** + * Compute and return the source text (all equalities and deletions). + * @param diffs List of Diff objects. + * @return Source text. + */ + public String diff_text1(List diffs) { + StringBuilder text = new StringBuilder(); + for (Diff aDiff : diffs) { + if (aDiff.operation != Operation.INSERT) { + text.append(aDiff.text); + } + } + return text.toString(); + } + + /** + * Compute and return the destination text (all equalities and insertions). + * @param diffs List of Diff objects. + * @return Destination text. + */ + public String diff_text2(List diffs) { + StringBuilder text = new StringBuilder(); + for (Diff aDiff : diffs) { + if (aDiff.operation != Operation.DELETE) { + text.append(aDiff.text); + } + } + return text.toString(); + } + + /** + * Compute the Levenshtein compare; the number of inserted, deleted or + * substituted characters. + * @param diffs List of Diff objects. + * @return Number of changes. + */ + public int diff_levenshtein(List diffs) { + int levenshtein = 0; + int insertions = 0; + int deletions = 0; + for (Diff aDiff : diffs) { + switch (aDiff.operation) { + case INSERT: + insertions += aDiff.text.length(); + break; + case DELETE: + deletions += aDiff.text.length(); + break; + case EQUAL: + // A deletion and an insertion is one substitution. + levenshtein += Math.max(insertions, deletions); + insertions = 0; + deletions = 0; + break; + } + } + levenshtein += Math.max(insertions, deletions); + return levenshtein; + } + + /** + * Crush the diff into an encoded string which describes the operations + * required to transform text1 into text2. + * E.g. =3\t-2\t+ing -> Keep 3 chars, delete 2 chars, insert 'ing'. + * Operations are tab-separated. Inserted text is escaped using %xx notation. + * @param diffs List of Diff objects. + * @return Delta text. + */ + public String diff_toDelta(List diffs) { + StringBuilder text = new StringBuilder(); + for (Diff aDiff : diffs) { + switch (aDiff.operation) { + case INSERT: + try { + text + .append("+") + .append( + URLEncoder + .encode(aDiff.text, "UTF-8") + .replace('+', ' ')) + .append("\t"); + } catch (UnsupportedEncodingException e) { + // Not likely on modern system. + throw new Error("This system does not support UTF-8.", e); + } + break; + case DELETE: + text.append("-").append(aDiff.text.length()).append("\t"); + break; + case EQUAL: + text.append("=").append(aDiff.text.length()).append("\t"); + break; + } + } + String delta = text.toString(); + if (delta.length() != 0) { + // Strip off trailing tab character. + delta = delta.substring(0, delta.length() - 1); + delta = unescapeForEncodeUriCompatability(delta); + } + return delta; + } + + /** + * Given the original text1, and an encoded string which describes the + * operations required to transform text1 into text2, compute the full diff. + * @param text1 Source string for the diff. + * @param delta Delta text. + * @return Array of Diff objects or null if invalid. + * @throws IllegalArgumentException If invalid input. + */ + public LinkedList diff_fromDelta(String text1, String delta) + throws IllegalArgumentException { + LinkedList diffs = new LinkedList(); + int pointer = 0; // Cursor in text1 + String[] tokens = delta.split("\t"); + for (String token : tokens) { + if (token.length() == 0) { + // Blank tokens are ok (from a trailing \t). + continue; + } + // Each token begins with a one character parameter which specifies the + // operation of this token (delete, insert, equality). + String param = token.substring(1); + switch (token.charAt(0)) { + case '+': + // decode would change all "+" to " " + param = param.replace("+", "%2B"); + try { + param = URLDecoder.decode(param, "UTF-8"); + } catch (UnsupportedEncodingException e) { + // Not likely on modern system. + throw new Error("This system does not support UTF-8.", e); + } catch (IllegalArgumentException e) { + // Malformed URI sequence. + throw new IllegalArgumentException( + "Illegal escape in diff_fromDelta: " + param, e); + } + diffs.add(new Diff(Operation.INSERT, param)); + break; + case '-': + // Fall through. + case '=': + int n; + try { + n = Integer.parseInt(param); + } catch (NumberFormatException e) { + throw new IllegalArgumentException( + "Invalid number in diff_fromDelta: " + param, e); + } + if (n < 0) { + throw new IllegalArgumentException( + "Negative number in diff_fromDelta: " + param); + } + String text; + try { + text = text1.substring(pointer, pointer += n); + } catch (StringIndexOutOfBoundsException e) { + throw new IllegalArgumentException("Delta length (" + pointer + + ") larger than source text length (" + text1.length() + + ").", e); + } + if (token.charAt(0) == '=') { + diffs.add(new Diff(Operation.EQUAL, text)); + } else { + diffs.add(new Diff(Operation.DELETE, text)); + } + break; + default: + // Anything else is an error. + throw new IllegalArgumentException( + "Invalid diff operation in diff_fromDelta: " + token.charAt(0)); + } + } + if (pointer != text1.length()) { + throw new IllegalArgumentException("Delta length (" + pointer + + ") smaller than source text length (" + text1.length() + ")."); + } + return diffs; + } + + // MATCH FUNCTIONS + + /** + * Locate the best instance of 'pattern' in 'text' near 'loc'. + * Returns -1 if no match found. + * @param text The text to search. + * @param pattern The pattern to search for. + * @param loc The location to search around. + * @return Best match index or -1. + */ + public int match_main(String text, String pattern, int loc) { + // Check for null inputs. + if (text == null || pattern == null) { + throw new IllegalArgumentException("Null inputs. (match_main)"); + } + + loc = Math.max(0, Math.min(loc, text.length())); + if (text.equals(pattern)) { + // Shortcut (potentially not guaranteed by the algorithm) + return 0; + } else if (text.length() == 0) { + // Nothing to match. + return -1; + } else if (loc + pattern.length() <= text.length() + && text.substring(loc, loc + pattern.length()).equals(pattern)) { + // Perfect match at the perfect spot! (Includes case of null pattern) + return loc; + } else { + // Do a fuzzy compare. + return match_bitap(text, pattern, loc); + } + } + + /** + * Locate the best instance of 'pattern' in 'text' near 'loc' using the + * Bitap algorithm. Returns -1 if no match found. + * @param text The text to search. + * @param pattern The pattern to search for. + * @param loc The location to search around. + * @return Best match index or -1. + */ + protected int match_bitap(String text, String pattern, int loc) { + assert (Match_MaxBits == 0 || pattern.length() <= Match_MaxBits) : "Pattern too long for this application."; + + // Initialise the alphabet. + Map s = match_alphabet(pattern); + + // Highest score beyond which we give up. + double score_threshold = Match_Threshold; + // Is there a nearby exact match? (speedup) + int best_loc = text.indexOf(pattern, loc); + if (best_loc != -1) { + score_threshold = Math + .min( + match_bitapScore(0, best_loc, loc, pattern), + score_threshold); + // What about in the other direction? (speedup) + best_loc = text.lastIndexOf(pattern, loc + pattern.length()); + if (best_loc != -1) { + score_threshold = Math + .min( + match_bitapScore(0, best_loc, loc, pattern), + score_threshold); + } + } + + // Initialise the bit arrays. + int matchmask = 1 << (pattern.length() - 1); + best_loc = -1; + + int bin_min, bin_mid; + int bin_max = pattern.length() + text.length(); + // Empty initialization added to appease Java compiler. + int[] last_rd = new int[0]; + for (int d = 0; d < pattern.length(); d++) { + // Scan for the best match; each iteration allows for one more error. + // Run a binary search to determine how far from 'loc' we can stray at + // this error level. + bin_min = 0; + bin_mid = bin_max; + while (bin_min < bin_mid) { + if (match_bitapScore(d, loc + bin_mid, loc, pattern) <= score_threshold) { + bin_min = bin_mid; + } else { + bin_max = bin_mid; + } + bin_mid = (bin_max - bin_min) / 2 + bin_min; + } + // Use the result from this iteration as the maximum for the next. + bin_max = bin_mid; + int start = Math.max(1, loc - bin_mid + 1); + int finish = Math.min(loc + bin_mid, text.length()) + pattern.length(); + + int[] rd = new int[finish + 2]; + rd[finish + 1] = (1 << d) - 1; + for (int j = finish; j >= start; j--) { + int charMatch; + if (text.length() <= j - 1 || !s.containsKey(text.charAt(j - 1))) { + // Out of range. + charMatch = 0; + } else { + charMatch = s.get(text.charAt(j - 1)); + } + if (d == 0) { + // First pass: exact match. + rd[j] = ((rd[j + 1] << 1) | 1) & charMatch; + } else { + // Subsequent passes: fuzzy match. + rd[j] = (((rd[j + 1] << 1) | 1) & charMatch) + | (((last_rd[j + 1] | last_rd[j]) << 1) | 1) | last_rd[j + 1]; + } + if ((rd[j] & matchmask) != 0) { + double score = match_bitapScore(d, j - 1, loc, pattern); + // This match will almost certainly be better than any existing + // match. But check anyway. + if (score <= score_threshold) { + // Told you so. + score_threshold = score; + best_loc = j - 1; + if (best_loc > loc) { + // When passing loc, don't exceed our current compare from loc. + start = Math.max(1, 2 * loc - best_loc); + } else { + // Already passed loc, downhill from here on in. + break; + } + } + } + } + if (match_bitapScore(d + 1, loc, loc, pattern) > score_threshold) { + // No hope for a (better) match at greater error levels. + break; + } + last_rd = rd; + } + return best_loc; + } + + /** + * Compute and return the score for a match with e errors and x location. + * @param e Number of errors in match. + * @param x Location of match. + * @param loc Expected location of match. + * @param pattern Pattern being sought. + * @return Overall score for match (0.0 = good, 1.0 = bad). + */ + private double match_bitapScore(int e, int x, int loc, String pattern) { + float accuracy = (float) e / pattern.length(); + int proximity = Math.abs(loc - x); + if (Match_Distance == 0) { + // Dodge divide by zero error. + return proximity == 0 ? accuracy : 1.0; + } + return accuracy + (proximity / (float) Match_Distance); + } + + /** + * Initialise the alphabet for the Bitap algorithm. + * @param pattern The text to encode. + * @return Hash of character locations. + */ + protected Map match_alphabet(String pattern) { + Map s = new HashMap(); + char[] char_pattern = pattern.toCharArray(); + for (char c : char_pattern) { + s.put(c, 0); + } + int i = 0; + for (char c : char_pattern) { + s.put(c, s.get(c) | (1 << (pattern.length() - i - 1))); + i++; + } + return s; + } + + // PATCH FUNCTIONS + + /** + * Increase the context until it is unique, + * but don't let the pattern expand beyond Match_MaxBits. + * @param patch The patch to grow. + * @param text Source text. + */ + protected void patch_addContext(Patch patch, String text) { + if (text.length() == 0) { + return; + } + String pattern = text.substring(patch.start2, patch.start2 + patch.length1); + int padding = 0; + + // Look for the first and last matches of pattern in text. If two different + // matches are found, increase the pattern length. + while (text.indexOf(pattern) != text.lastIndexOf(pattern) + && pattern.length() < Match_MaxBits - Patch_Margin - Patch_Margin) { + padding += Patch_Margin; + pattern = text + .substring( + Math.max(0, patch.start2 - padding), + Math.min(text.length(), patch.start2 + patch.length1 + padding)); + } + // Add one chunk for good luck. + padding += Patch_Margin; + + // Add the prefix. + String prefix = text + .substring( + Math.max(0, patch.start2 - padding), + patch.start2); + if (prefix.length() != 0) { + patch.diffs.addFirst(new Diff(Operation.EQUAL, prefix)); + } + // Add the suffix. + String suffix = text + .substring( + patch.start2 + patch.length1, + Math.min(text.length(), patch.start2 + patch.length1 + padding)); + if (suffix.length() != 0) { + patch.diffs.addLast(new Diff(Operation.EQUAL, suffix)); + } + + // Roll back the start points. + patch.start1 -= prefix.length(); + patch.start2 -= prefix.length(); + // Extend the lengths. + patch.length1 += prefix.length() + suffix.length(); + patch.length2 += prefix.length() + suffix.length(); + } + + /** + * Compute a list of patches to turn text1 into text2. + * A set of diffs will be computed. + * @param text1 Old text. + * @param text2 New text. + * @return LinkedList of Patch objects. + */ + public LinkedList patch_make(String text1, String text2) { + if (text1 == null || text2 == null) { + throw new IllegalArgumentException("Null inputs. (patch_make)"); + } + // No diffs provided, compute our own. + LinkedList diffs = diff_main(text1, text2, true); + if (diffs.size() > 2) { + diff_cleanupSemantic(diffs); + diff_cleanupEfficiency(diffs); + } + return patch_make(text1, diffs); + } + + /** + * Compute a list of patches to turn text1 into text2. + * text1 will be derived from the provided diffs. + * @param diffs Array of Diff objects for text1 to text2. + * @return LinkedList of Patch objects. + */ + public LinkedList patch_make(LinkedList diffs) { + if (diffs == null) { + throw new IllegalArgumentException("Null inputs. (patch_make)"); + } + // No origin string provided, compute our own. + String text1 = diff_text1(diffs); + return patch_make(text1, diffs); + } + + /** + * Compute a list of patches to turn text1 into text2. + * text2 is ignored, diffs are the delta between text1 and text2. + * @param text1 Old text + * @param text2 Ignored. + * @param diffs Array of Diff objects for text1 to text2. + * @return LinkedList of Patch objects. + * @deprecated Prefer patch_make(String text1, LinkedList diffs). + */ + @Deprecated + public LinkedList patch_make(String text1, String text2, + LinkedList diffs) { + return patch_make(text1, diffs); + } + + /** + * Compute a list of patches to turn text1 into text2. + * text2 is not provided, diffs are the delta between text1 and text2. + * @param text1 Old text. + * @param diffs Array of Diff objects for text1 to text2. + * @return LinkedList of Patch objects. + */ + public LinkedList patch_make(String text1, LinkedList diffs) { + if (text1 == null || diffs == null) { + throw new IllegalArgumentException("Null inputs. (patch_make)"); + } + + LinkedList patches = new LinkedList(); + if (diffs.isEmpty()) { + return patches; // Get rid of the null case. + } + Patch patch = new Patch(); + int char_count1 = 0; // Number of characters into the text1 string. + int char_count2 = 0; // Number of characters into the text2 string. + // Start with text1 (prepatch_text) and apply the diffs until we arrive at + // text2 (postpatch_text). We recreate the patches one by one to determine + // context info. + String prepatch_text = text1; + String postpatch_text = text1; + for (Diff aDiff : diffs) { + if (patch.diffs.isEmpty() && aDiff.operation != Operation.EQUAL) { + // A new patch starts here. + patch.start1 = char_count1; + patch.start2 = char_count2; + } + + switch (aDiff.operation) { + case INSERT: + patch.diffs.add(aDiff); + patch.length2 += aDiff.text.length(); + postpatch_text = postpatch_text.substring(0, char_count2) + + aDiff.text + postpatch_text.substring(char_count2); + break; + case DELETE: + patch.length1 += aDiff.text.length(); + patch.diffs.add(aDiff); + postpatch_text = postpatch_text.substring(0, char_count2) + + postpatch_text.substring(char_count2 + aDiff.text.length()); + break; + case EQUAL: + if (aDiff.text.length() <= 2 * Patch_Margin + && !patch.diffs.isEmpty() && aDiff != diffs.getLast()) { + // Small equality inside a patch. + patch.diffs.add(aDiff); + patch.length1 += aDiff.text.length(); + patch.length2 += aDiff.text.length(); + } + + if (aDiff.text.length() >= 2 * Patch_Margin && !patch.diffs.isEmpty()) { + // Time for a new patch. + if (!patch.diffs.isEmpty()) { + patch_addContext(patch, prepatch_text); + patches.add(patch); + patch = new Patch(); + // Unlike Unidiff, our patch lists have a rolling context. + // https://github.com/google/diff-match-patch/wiki/Unidiff + // Update prepatch text & pos to reflect the application of the + // just completed patch. + prepatch_text = postpatch_text; + char_count1 = char_count2; + } + } + break; + } + + // Update the current character count. + if (aDiff.operation != Operation.INSERT) { + char_count1 += aDiff.text.length(); + } + if (aDiff.operation != Operation.DELETE) { + char_count2 += aDiff.text.length(); + } + } + // Pick up the leftover patch if not empty. + if (!patch.diffs.isEmpty()) { + patch_addContext(patch, prepatch_text); + patches.add(patch); + } + + return patches; + } + + /** + * Given an array of patches, return another array that is identical. + * @param patches Array of Patch objects. + * @return Array of Patch objects. + */ + public LinkedList patch_deepCopy(LinkedList patches) { + LinkedList patchesCopy = new LinkedList(); + for (Patch aPatch : patches) { + Patch patchCopy = new Patch(); + for (Diff aDiff : aPatch.diffs) { + Diff diffCopy = new Diff(aDiff.operation, aDiff.text); + patchCopy.diffs.add(diffCopy); + } + patchCopy.start1 = aPatch.start1; + patchCopy.start2 = aPatch.start2; + patchCopy.length1 = aPatch.length1; + patchCopy.length2 = aPatch.length2; + patchesCopy.add(patchCopy); + } + return patchesCopy; + } + + /** + * Merge a set of patches onto the text. Return a patched text, as well + * as an array of true/false values indicating which patches were applied. + * @param patches Array of Patch objects + * @param text Old text. + * @return Two element Object array, containing the new text and an array of + * boolean values. + */ + public Object[] patch_apply(LinkedList patches, String text) { + if (patches.isEmpty()) { + return new Object[] { + text, new boolean[0] + }; + } + + // Deep copy the patches so that no changes are made to originals. + patches = patch_deepCopy(patches); + + String nullPadding = patch_addPadding(patches); + text = nullPadding + text + nullPadding; + patch_splitMax(patches); + + int x = 0; + // delta keeps track of the offset between the expected and actual location + // of the previous patch. If there are patches expected at positions 10 and + // 20, but the first patch was found at 12, delta is 2 and the second patch + // has an effective expected position of 22. + int delta = 0; + boolean[] results = new boolean[patches.size()]; + for (Patch aPatch : patches) { + int expected_loc = aPatch.start2 + delta; + String text1 = diff_text1(aPatch.diffs); + int start_loc; + int end_loc = -1; + if (text1.length() > this.Match_MaxBits) { + // patch_splitMax will only provide an oversized pattern in the case of + // a monster delete. + start_loc = match_main( + text, + text1.substring(0, this.Match_MaxBits), expected_loc); + if (start_loc != -1) { + end_loc = match_main( + text, + text1.substring(text1.length() - this.Match_MaxBits), + expected_loc + text1.length() - this.Match_MaxBits); + if (end_loc == -1 || start_loc >= end_loc) { + // Can't find valid trailing context. Drop this patch. + start_loc = -1; + } + } + } else { + start_loc = match_main(text, text1, expected_loc); + } + if (start_loc == -1) { + // No match found. :( + results[x] = false; + // Subtract the delta for this failed patch from subsequent patches. + delta -= aPatch.length2 - aPatch.length1; + } else { + // Found a match. :) + results[x] = true; + delta = start_loc - expected_loc; + String text2; + if (end_loc == -1) { + text2 = text + .substring( + start_loc, + Math.min(start_loc + text1.length(), text.length())); + } else { + text2 = text + .substring( + start_loc, + Math.min(end_loc + this.Match_MaxBits, text.length())); + } + if (text1.equals(text2)) { + // Perfect match, just shove the replacement text in. + text = text.substring(0, start_loc) + diff_text2(aPatch.diffs) + + text.substring(start_loc + text1.length()); + } else { + // Imperfect match. Run a diff to get a framework of equivalent + // indices. + LinkedList diffs = diff_main(text1, text2, false); + if (text1.length() > this.Match_MaxBits + && diff_levenshtein(diffs) / (float) text1.length() > this.Patch_DeleteThreshold) { + // The end points match, but the content is unacceptably bad. + results[x] = false; + } else { + diff_cleanupSemanticLossless(diffs); + int index1 = 0; + for (Diff aDiff : aPatch.diffs) { + if (aDiff.operation != Operation.EQUAL) { + int index2 = diff_xIndex(diffs, index1); + if (aDiff.operation == Operation.INSERT) { + // Insertion + text = text.substring(0, start_loc + index2) + aDiff.text + + text.substring(start_loc + index2); + } else if (aDiff.operation == Operation.DELETE) { + // Deletion + text = text.substring(0, start_loc + index2) + + text + .substring( + start_loc + diff_xIndex( + diffs, + index1 + aDiff.text.length())); + } + } + if (aDiff.operation != Operation.DELETE) { + index1 += aDiff.text.length(); + } + } + } + } + } + x++; + } + // Strip the padding off. + text = text + .substring( + nullPadding.length(), text.length() + - nullPadding.length()); + return new Object[] { + text, results + }; + } + + /** + * Add some padding on text start and end so that edges can match something. + * Intended to be called only from within patch_apply. + * @param patches Array of Patch objects. + * @return The padding string added to each side. + */ + public String patch_addPadding(LinkedList patches) { + short paddingLength = this.Patch_Margin; + String nullPadding = ""; + for (short x = 1; x <= paddingLength; x++) { + nullPadding += String.valueOf((char) x); + } + + // Bump all the patches forward. + for (Patch aPatch : patches) { + aPatch.start1 += paddingLength; + aPatch.start2 += paddingLength; + } + + // Add some padding on start of first diff. + Patch patch = patches.getFirst(); + LinkedList diffs = patch.diffs; + if (diffs.isEmpty() || diffs.getFirst().operation != Operation.EQUAL) { + // Add nullPadding equality. + diffs.addFirst(new Diff(Operation.EQUAL, nullPadding)); + patch.start1 -= paddingLength; // Should be 0. + patch.start2 -= paddingLength; // Should be 0. + patch.length1 += paddingLength; + patch.length2 += paddingLength; + } else if (paddingLength > diffs.getFirst().text.length()) { + // Grow first equality. + Diff firstDiff = diffs.getFirst(); + int extraLength = paddingLength - firstDiff.text.length(); + firstDiff.text = nullPadding.substring(firstDiff.text.length()) + + firstDiff.text; + patch.start1 -= extraLength; + patch.start2 -= extraLength; + patch.length1 += extraLength; + patch.length2 += extraLength; + } + + // Add some padding on end of last diff. + patch = patches.getLast(); + diffs = patch.diffs; + if (diffs.isEmpty() || diffs.getLast().operation != Operation.EQUAL) { + // Add nullPadding equality. + diffs.addLast(new Diff(Operation.EQUAL, nullPadding)); + patch.length1 += paddingLength; + patch.length2 += paddingLength; + } else if (paddingLength > diffs.getLast().text.length()) { + // Grow last equality. + Diff lastDiff = diffs.getLast(); + int extraLength = paddingLength - lastDiff.text.length(); + lastDiff.text += nullPadding.substring(0, extraLength); + patch.length1 += extraLength; + patch.length2 += extraLength; + } + + return nullPadding; + } + + /** + * Look through the patches and break up any which are longer than the + * maximum limit of the match algorithm. + * Intended to be called only from within patch_apply. + * @param patches LinkedList of Patch objects. + */ + public void patch_splitMax(LinkedList patches) { + short patch_size = Match_MaxBits; + String precontext, postcontext; + Patch patch; + int start1, start2; + boolean empty; + Operation diff_type; + String diff_text; + ListIterator pointer = patches.listIterator(); + Patch bigpatch = pointer.hasNext() ? pointer.next() : null; + while (bigpatch != null) { + if (bigpatch.length1 <= Match_MaxBits) { + bigpatch = pointer.hasNext() ? pointer.next() : null; + continue; + } + // Remove the big old patch. + pointer.remove(); + start1 = bigpatch.start1; + start2 = bigpatch.start2; + precontext = ""; + while (!bigpatch.diffs.isEmpty()) { + // Create one of several smaller patches. + patch = new Patch(); + empty = true; + patch.start1 = start1 - precontext.length(); + patch.start2 = start2 - precontext.length(); + if (precontext.length() != 0) { + patch.length1 = patch.length2 = precontext.length(); + patch.diffs.add(new Diff(Operation.EQUAL, precontext)); + } + while (!bigpatch.diffs.isEmpty() + && patch.length1 < patch_size - Patch_Margin) { + diff_type = bigpatch.diffs.getFirst().operation; + diff_text = bigpatch.diffs.getFirst().text; + if (diff_type == Operation.INSERT) { + // Insertions are harmless. + patch.length2 += diff_text.length(); + start2 += diff_text.length(); + patch.diffs.addLast(bigpatch.diffs.removeFirst()); + empty = false; + } else if (diff_type == Operation.DELETE && patch.diffs.size() == 1 + && patch.diffs.getFirst().operation == Operation.EQUAL + && diff_text.length() > 2 * patch_size) { + // This is a large deletion. Let it pass in one chunk. + patch.length1 += diff_text.length(); + start1 += diff_text.length(); + empty = false; + patch.diffs.add(new Diff(diff_type, diff_text)); + bigpatch.diffs.removeFirst(); + } else { + // Deletion or equality. Only take as much as we can stomach. + diff_text = diff_text + .substring( + 0, Math + .min( + diff_text.length(), + patch_size - patch.length1 - Patch_Margin)); + patch.length1 += diff_text.length(); + start1 += diff_text.length(); + if (diff_type == Operation.EQUAL) { + patch.length2 += diff_text.length(); + start2 += diff_text.length(); + } else { + empty = false; + } + patch.diffs.add(new Diff(diff_type, diff_text)); + if (diff_text.equals(bigpatch.diffs.getFirst().text)) { + bigpatch.diffs.removeFirst(); + } else { + bigpatch.diffs.getFirst().text = bigpatch.diffs.getFirst().text + .substring(diff_text.length()); + } + } + } + // Compute the head context for the next patch. + precontext = diff_text2(patch.diffs); + precontext = precontext + .substring( + Math + .max( + 0, precontext.length() + - Patch_Margin)); + // Append the end context for this patch. + if (diff_text1(bigpatch.diffs).length() > Patch_Margin) { + postcontext = diff_text1(bigpatch.diffs).substring(0, Patch_Margin); + } else { + postcontext = diff_text1(bigpatch.diffs); + } + if (postcontext.length() != 0) { + patch.length1 += postcontext.length(); + patch.length2 += postcontext.length(); + if (!patch.diffs.isEmpty() + && patch.diffs.getLast().operation == Operation.EQUAL) { + patch.diffs.getLast().text += postcontext; + } else { + patch.diffs.add(new Diff(Operation.EQUAL, postcontext)); + } + } + if (!empty) { + pointer.add(patch); + } + } + bigpatch = pointer.hasNext() ? pointer.next() : null; + } + } + + /** + * Take a list of patches and return a textual representation. + * @param patches List of Patch objects. + * @return Text representation of patches. + */ + public String patch_toText(List patches) { + StringBuilder text = new StringBuilder(); + for (Patch aPatch : patches) { + text.append(aPatch); + } + return text.toString(); + } + + /** + * Parse a textual representation of patches and return a List of Patch + * objects. + * @param textline Text representation of patches. + * @return List of Patch objects. + * @throws IllegalArgumentException If invalid input. + */ + public List patch_fromText(String textline) + throws IllegalArgumentException { + List patches = new LinkedList(); + if (textline.length() == 0) { + return patches; + } + List textList = Arrays.asList(textline.split("\n")); + LinkedList text = new LinkedList(textList); + Patch patch; + Pattern patchHeader = Pattern.compile("^@@ -(\\d+),?(\\d*) \\+(\\d+),?(\\d*) @@$"); + Matcher m; + char sign; + String line; + while (!text.isEmpty()) { + m = patchHeader.matcher(text.getFirst()); + if (!m.matches()) { + throw new IllegalArgumentException( + "Invalid patch string: " + text.getFirst()); + } + patch = new Patch(); + patches.add(patch); + patch.start1 = Integer.parseInt(m.group(1)); + if (m.group(2).length() == 0) { + patch.start1--; + patch.length1 = 1; + } else if (m.group(2).equals("0")) { + patch.length1 = 0; + } else { + patch.start1--; + patch.length1 = Integer.parseInt(m.group(2)); + } + + patch.start2 = Integer.parseInt(m.group(3)); + if (m.group(4).length() == 0) { + patch.start2--; + patch.length2 = 1; + } else if (m.group(4).equals("0")) { + patch.length2 = 0; + } else { + patch.start2--; + patch.length2 = Integer.parseInt(m.group(4)); + } + text.removeFirst(); + + while (!text.isEmpty()) { + try { + sign = text.getFirst().charAt(0); + } catch (IndexOutOfBoundsException e) { + // Blank line? Whatever. + text.removeFirst(); + continue; + } + line = text.getFirst().substring(1); + line = line.replace("+", "%2B"); // decode would change all "+" to " " + try { + line = URLDecoder.decode(line, "UTF-8"); + } catch (UnsupportedEncodingException e) { + // Not likely on modern system. + throw new Error("This system does not support UTF-8.", e); + } catch (IllegalArgumentException e) { + // Malformed URI sequence. + throw new IllegalArgumentException( + "Illegal escape in patch_fromText: " + line, e); + } + if (sign == '-') { + // Deletion. + patch.diffs.add(new Diff(Operation.DELETE, line)); + } else if (sign == '+') { + // Insertion. + patch.diffs.add(new Diff(Operation.INSERT, line)); + } else if (sign == ' ') { + // Minor equality. + patch.diffs.add(new Diff(Operation.EQUAL, line)); + } else if (sign == '@') { + // Start of next patch. + break; + } else { + // WTF? + throw new IllegalArgumentException( + "Invalid patch mode '" + sign + "' in: " + line); + } + text.removeFirst(); + } + } + return patches; + } + + /** + * Class representing one diff operation. + */ + public static class Diff { + /** + * One of: INSERT, DELETE or EQUAL. + */ + public Operation operation; + /** + * The text associated with this diff operation. + */ + public String text; + + /** + * Constructor. Initializes the diff with the provided values. + * @param operation One of INSERT, DELETE or EQUAL. + * @param text The text being applied. + */ + public Diff(Operation operation, String text) { + // Construct a diff with the specified operation and text. + this.operation = operation; + this.text = text; + } + + /** + * Display a human-readable version of this Diff. + * @return text version. + */ + public String toString() { + String prettyText = this.text.replace('\n', '\u00b6'); + return "Diff(" + this.operation + ",\"" + prettyText + "\")"; + } + + /** + * Create a numeric hash value for a Diff. + * This function is not used by DMP. + * @return Hash value. + */ + @Override + public int hashCode() { + final int prime = 31; + int result = (operation == null) ? 0 : operation.hashCode(); + result += prime * ((text == null) ? 0 : text.hashCode()); + return result; + } + + /** + * Is this Diff equivalent to another Diff? + * @param obj Another Diff to compare against. + * @return true or false. + */ + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + Diff other = (Diff) obj; + if (operation != other.operation) { + return false; + } + if (text == null) { + if (other.text != null) { + return false; + } + } else if (!text.equals(other.text)) { + return false; + } + return true; + } + } + + /** + * Class representing one patch operation. + */ + public static class Patch { + public LinkedList diffs; + public int start1; + public int start2; + public int length1; + public int length2; + + /** + * Constructor. Initializes with an empty list of diffs. + */ + public Patch() { + this.diffs = new LinkedList(); + } + + /** + * Emulate GNU diff's format. + * Header: @@ -382,8 +481,9 @@ + * Indices are printed as 1-based, not 0-based. + * @return The GNU diff string. + */ + public String toString() { + String coords1, coords2; + if (this.length1 == 0) { + coords1 = this.start1 + ",0"; + } else if (this.length1 == 1) { + coords1 = Integer.toString(this.start1 + 1); + } else { + coords1 = (this.start1 + 1) + "," + this.length1; + } + if (this.length2 == 0) { + coords2 = this.start2 + ",0"; + } else if (this.length2 == 1) { + coords2 = Integer.toString(this.start2 + 1); + } else { + coords2 = (this.start2 + 1) + "," + this.length2; + } + StringBuilder text = new StringBuilder(); + text + .append("@@ -") + .append(coords1) + .append(" +") + .append(coords2) + .append(" @@\n"); + // Escape the body of the patch with %xx notation. + for (Diff aDiff : this.diffs) { + switch (aDiff.operation) { + case INSERT: + text.append('+'); + break; + case DELETE: + text.append('-'); + break; + case EQUAL: + text.append(' '); + break; + } + try { + text + .append(URLEncoder.encode(aDiff.text, "UTF-8").replace('+', ' ')) + .append("\n"); + } catch (UnsupportedEncodingException e) { + // Not likely on modern system. + throw new Error("This system does not support UTF-8.", e); + } + } + return unescapeForEncodeUriCompatability(text.toString()); + } + } + + /** + * Unescape selected chars for compatability with JavaScript's encodeURI. + * In speed critical applications this could be dropped since the + * receiving application will certainly decode these fine. + * Note that this function is case-sensitive. Thus "%3f" would not be + * unescaped. But this is ok because it is only called with the output of + * URLEncoder.encode which returns uppercase hex. + * + * Example: "%3F" -> "?", "%24" -> "$", etc. + * + * @param str The string to escape. + * @return The escaped string. + */ + private static String unescapeForEncodeUriCompatability(String str) { + return str + .replace("%21", "!") + .replace("%7E", "~") + .replace("%27", "'") + .replace("%28", "(") + .replace("%29", ")") + .replace("%3B", ";") + .replace("%2F", "/") + .replace("%3F", "?") + .replace("%3A", ":") + .replace("%40", "@") + .replace("%26", "&") + .replace("%3D", "=") + .replace("%2B", "+") + .replace("%24", "$") + .replace("%2C", ",") + .replace("%23", "#"); + } } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/DotAbbreviations.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/DotAbbreviations.java index fdbd6e99d..33183b0f6 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/DotAbbreviations.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/DotAbbreviations.java @@ -1,3 +1,4 @@ + package eu.dnetlib.pace.util; import com.google.common.base.Function; @@ -7,4 +8,4 @@ public class DotAbbreviations implements Function { public String apply(String s) { return s.length() == 1 ? s + "." : s; } -}; \ No newline at end of file +}; diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java index cc801068b..2c1a1700b 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java @@ -1,166 +1,177 @@ -package eu.dnetlib.pace.util; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.jayway.jsonpath.Configuration; -import com.jayway.jsonpath.JsonPath; -import com.jayway.jsonpath.Option; -import eu.dnetlib.pace.config.DedupConfig; -import eu.dnetlib.pace.config.Type; -import eu.dnetlib.pace.model.*; -import net.minidev.json.JSONArray; +package eu.dnetlib.pace.util; import java.math.BigDecimal; import java.util.*; import java.util.function.Predicate; import java.util.stream.Collectors; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.jayway.jsonpath.Configuration; +import com.jayway.jsonpath.JsonPath; +import com.jayway.jsonpath.Option; + +import eu.dnetlib.pace.config.DedupConfig; +import eu.dnetlib.pace.config.Type; +import eu.dnetlib.pace.model.*; +import net.minidev.json.JSONArray; + public class MapDocumentUtil { - public static final String URL_REGEX = "^(http|https|ftp)\\://.*"; - public static Predicate urlFilter = s -> s.trim().matches(URL_REGEX); + public static final String URL_REGEX = "^(http|https|ftp)\\://.*"; + public static Predicate urlFilter = s -> s.trim().matches(URL_REGEX); - public static MapDocument asMapDocumentWithJPath(DedupConfig conf, final String json) { - MapDocument m = new MapDocument(); - m.setIdentifier(getJPathString(conf.getWf().getIdPath(), json)); - Map stringField = new HashMap<>(); - conf.getPace().getModel().forEach(fdef -> { - switch (fdef.getType()) { - case String: - case Int: - stringField.put(fdef.getName(), new FieldValueImpl(fdef.getType(), fdef.getName(), truncateValue(getJPathString(fdef.getPath(), json), fdef.getLength()))); - break; - case URL: - String uv = getJPathString(fdef.getPath(), json); - if (!urlFilter.test(uv)) uv = ""; - stringField.put(fdef.getName(), new FieldValueImpl(fdef.getType(), fdef.getName(), uv)); - break; - case List: - case JSON: - FieldListImpl fi = new FieldListImpl(fdef.getName(), fdef.getType()); - truncateList(getJPathList(fdef.getPath(), json, fdef.getType()), fdef.getSize()) - .stream() - .map(item -> new FieldValueImpl(Type.String, fdef.getName(), item)) - .forEach(fi::add); - stringField.put(fdef.getName(), fi); - break; - case DoubleArray: - stringField.put( - fdef.getName(), - new FieldValueImpl(Type.DoubleArray, - fdef.getName(), - getJPathArray(fdef.getPath(), json)) - ); - break; - case StringConcat: - String[] jpaths = fdef.getPath().split("\\|\\|\\|"); - stringField.put( - fdef.getName(), - new FieldValueImpl(Type.String, - fdef.getName(), - truncateValue(Arrays.stream(jpaths).map(jpath -> getJPathString(jpath, json)).collect(Collectors.joining(" ")), - fdef.getLength()) - ) - ); - break; - } - }); - m.setFieldMap(stringField); - return m; - } + public static MapDocument asMapDocumentWithJPath(DedupConfig conf, final String json) { + MapDocument m = new MapDocument(); + m.setIdentifier(getJPathString(conf.getWf().getIdPath(), json)); + Map stringField = new HashMap<>(); + conf.getPace().getModel().forEach(fdef -> { + switch (fdef.getType()) { + case String: + case Int: + stringField + .put( + fdef.getName(), new FieldValueImpl(fdef.getType(), fdef.getName(), + truncateValue(getJPathString(fdef.getPath(), json), fdef.getLength()))); + break; + case URL: + String uv = getJPathString(fdef.getPath(), json); + if (!urlFilter.test(uv)) + uv = ""; + stringField.put(fdef.getName(), new FieldValueImpl(fdef.getType(), fdef.getName(), uv)); + break; + case List: + case JSON: + FieldListImpl fi = new FieldListImpl(fdef.getName(), fdef.getType()); + truncateList(getJPathList(fdef.getPath(), json, fdef.getType()), fdef.getSize()) + .stream() + .map(item -> new FieldValueImpl(Type.String, fdef.getName(), item)) + .forEach(fi::add); + stringField.put(fdef.getName(), fi); + break; + case DoubleArray: + stringField + .put( + fdef.getName(), + new FieldValueImpl(Type.DoubleArray, + fdef.getName(), + getJPathArray(fdef.getPath(), json))); + break; + case StringConcat: + String[] jpaths = fdef.getPath().split("\\|\\|\\|"); + stringField + .put( + fdef.getName(), + new FieldValueImpl(Type.String, + fdef.getName(), + truncateValue( + Arrays + .stream(jpaths) + .map(jpath -> getJPathString(jpath, json)) + .collect(Collectors.joining(" ")), + fdef.getLength()))); + break; + } + }); + m.setFieldMap(stringField); + return m; + } - public static List getJPathList(String path, String json, Type type) { - if (type == Type.List) - return JsonPath.using(Configuration.defaultConfiguration().addOptions(Option.ALWAYS_RETURN_LIST, Option.SUPPRESS_EXCEPTIONS)).parse(json).read(path); - Object jresult; - List result = new ArrayList<>(); - try { - jresult = JsonPath.read(json, path); - } catch (Throwable e) { - return result; - } - if (jresult instanceof JSONArray) { + public static List getJPathList(String path, String json, Type type) { + if (type == Type.List) + return JsonPath + .using( + Configuration + .defaultConfiguration() + .addOptions(Option.ALWAYS_RETURN_LIST, Option.SUPPRESS_EXCEPTIONS)) + .parse(json) + .read(path); + Object jresult; + List result = new ArrayList<>(); + try { + jresult = JsonPath.read(json, path); + } catch (Throwable e) { + return result; + } + if (jresult instanceof JSONArray) { - ((JSONArray) jresult).forEach(it -> { + ((JSONArray) jresult).forEach(it -> { - try { - result.add(new ObjectMapper().writeValueAsString(it)); - } catch (JsonProcessingException e) { + try { + result.add(new ObjectMapper().writeValueAsString(it)); + } catch (JsonProcessingException e) { - } - } - ); - return result; - } + } + }); + return result; + } - if (jresult instanceof LinkedHashMap) { - try { - result.add(new ObjectMapper().writeValueAsString(jresult)); - } catch (JsonProcessingException e) { + if (jresult instanceof LinkedHashMap) { + try { + result.add(new ObjectMapper().writeValueAsString(jresult)); + } catch (JsonProcessingException e) { - } - return result; - } - if (jresult instanceof String) { - result.add((String) jresult); - } - return result; - } + } + return result; + } + if (jresult instanceof String) { + result.add((String) jresult); + } + return result; + } + public static String getJPathString(final String jsonPath, final String json) { + try { + Object o = JsonPath.read(json, jsonPath); + if (o instanceof String) + return (String) o; + if (o instanceof JSONArray && ((JSONArray) o).size() > 0) + return (String) ((JSONArray) o).get(0); + return ""; + } catch (Exception e) { + return ""; + } + } - public static String getJPathString(final String jsonPath, final String json) { - try { - Object o = JsonPath.read(json, jsonPath); - if (o instanceof String) - return (String)o; - if (o instanceof JSONArray && ((JSONArray)o).size()>0) - return (String)((JSONArray)o).get(0); - return ""; - } catch (Exception e) { - return ""; - } - } + public static double[] getJPathArray(final String jsonPath, final String json) { + try { + Object o = JsonPath.read(json, jsonPath); + if (o instanceof double[]) + return (double[]) o; + if (o instanceof JSONArray) { + Object[] objects = ((JSONArray) o).toArray(); + double[] array = new double[objects.length]; + for (int i = 0; i < objects.length; i++) { + if (objects[i] instanceof BigDecimal) + array[i] = ((BigDecimal) objects[i]).doubleValue(); + else + array[i] = (double) objects[i]; + } + return array; + } + return new double[0]; + } catch (Exception e) { + e.printStackTrace(); + return new double[0]; + } + } - public static double[] getJPathArray(final String jsonPath, final String json) { - try { - Object o = JsonPath.read(json, jsonPath); - if (o instanceof double[]) - return (double[]) o; - if (o instanceof JSONArray) { - Object[] objects = ((JSONArray) o).toArray(); - double[] array = new double[objects.length]; - for (int i = 0; i < objects.length; i++) { - if (objects[i] instanceof BigDecimal) - array[i] = ((BigDecimal)objects[i]).doubleValue(); - else - array[i] = (double) objects[i]; - } - return array; - } - return new double[0]; - } - catch (Exception e) { - e.printStackTrace(); - return new double[0]; - } - } + public static String truncateValue(String value, int length) { + if (value == null) + return ""; + if (length == -1 || length > value.length()) + return value; - public static String truncateValue(String value, int length) { - if (value == null) - return ""; + return value.substring(0, length); + } - if (length == -1 || length > value.length()) - return value; + public static List truncateList(List list, int size) { + if (size == -1 || size > list.size()) + return list; - return value.substring(0, length); - } - - public static List truncateList(List list, int size) { - if (size == -1 || size > list.size()) - return list; - - return list.subList(0, size); - } + return list.subList(0, size); + } } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/PaceException.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/PaceException.java index 198861c53..077139482 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/PaceException.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/PaceException.java @@ -1,13 +1,14 @@ + package eu.dnetlib.pace.util; public class PaceException extends RuntimeException { - public PaceException(String s, Throwable e){ - super(s, e); - } + public PaceException(String s, Throwable e) { + super(s, e); + } - public PaceException(String s){ - super(s); - } + public PaceException(String s) { + super(s); + } } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/PaceResolver.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/PaceResolver.java index bf6feea1c..252205c79 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/PaceResolver.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/PaceResolver.java @@ -1,49 +1,61 @@ -package eu.dnetlib.pace.util; -import eu.dnetlib.pace.clustering.ClusteringClass; -import eu.dnetlib.pace.clustering.ClusteringFunction; -import eu.dnetlib.pace.tree.support.Comparator; -import eu.dnetlib.pace.tree.support.ComparatorClass; -import org.reflections.Reflections; +package eu.dnetlib.pace.util; import java.io.Serializable; import java.lang.reflect.InvocationTargetException; import java.util.Map; import java.util.stream.Collectors; +import org.reflections.Reflections; + +import eu.dnetlib.pace.clustering.ClusteringClass; +import eu.dnetlib.pace.clustering.ClusteringFunction; +import eu.dnetlib.pace.tree.support.Comparator; +import eu.dnetlib.pace.tree.support.ComparatorClass; + public class PaceResolver implements Serializable { - public static final Reflections CLUSTERING_RESOLVER = new Reflections("eu.dnetlib.pace.clustering"); - public static final Reflections COMPARATOR_RESOLVER = new Reflections("eu.dnetlib.pace.tree"); + public static final Reflections CLUSTERING_RESOLVER = new Reflections("eu.dnetlib.pace.clustering"); + public static final Reflections COMPARATOR_RESOLVER = new Reflections("eu.dnetlib.pace.tree"); - private final Map> clusteringFunctions; - private final Map> comparators; + private final Map> clusteringFunctions; + private final Map> comparators; - public PaceResolver() { + public PaceResolver() { - this.clusteringFunctions = CLUSTERING_RESOLVER.getTypesAnnotatedWith(ClusteringClass.class).stream() - .filter(ClusteringFunction.class::isAssignableFrom) - .collect(Collectors.toMap(cl -> cl.getAnnotation(ClusteringClass.class).value(), cl -> (Class)cl)); + this.clusteringFunctions = CLUSTERING_RESOLVER + .getTypesAnnotatedWith(ClusteringClass.class) + .stream() + .filter(ClusteringFunction.class::isAssignableFrom) + .collect( + Collectors + .toMap( + cl -> cl.getAnnotation(ClusteringClass.class).value(), cl -> (Class) cl)); - this.comparators = COMPARATOR_RESOLVER.getTypesAnnotatedWith(ComparatorClass.class).stream() - .filter(Comparator.class::isAssignableFrom) - .collect(Collectors.toMap(cl -> cl.getAnnotation(ComparatorClass.class).value(), cl -> (Class)cl)); - } + this.comparators = COMPARATOR_RESOLVER + .getTypesAnnotatedWith(ComparatorClass.class) + .stream() + .filter(Comparator.class::isAssignableFrom) + .collect( + Collectors.toMap(cl -> cl.getAnnotation(ComparatorClass.class).value(), cl -> (Class) cl)); + } - public ClusteringFunction getClusteringFunction(String name, Map params) throws PaceException { - try { - return clusteringFunctions.get(name).getDeclaredConstructor(Map.class).newInstance(params); - } catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) { - throw new PaceException(name + " not found ", e); - } - } + public ClusteringFunction getClusteringFunction(String name, Map params) throws PaceException { + try { + return clusteringFunctions.get(name).getDeclaredConstructor(Map.class).newInstance(params); + } catch (InstantiationException | IllegalAccessException | InvocationTargetException + | NoSuchMethodException e) { + throw new PaceException(name + " not found ", e); + } + } - public Comparator getComparator(String name, Map params) throws PaceException { - try { - return comparators.get(name).getDeclaredConstructor(Map.class).newInstance(params); - } catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException | NullPointerException e) { - throw new PaceException(name + " not found ", e); - } - } + public Comparator getComparator(String name, Map params) throws PaceException { + try { + return comparators.get(name).getDeclaredConstructor(Map.class).newInstance(params); + } catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException + | NullPointerException e) { + throw new PaceException(name + " not found ", e); + } + } } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/Reporter.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/Reporter.java index 10c886cb5..fd6761aa1 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/Reporter.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/Reporter.java @@ -1,11 +1,11 @@ -package eu.dnetlib.pace.util; +package eu.dnetlib.pace.util; import java.io.Serializable; public interface Reporter extends Serializable { - void incrementCounter(String counterGroup, String counterName, long delta); + void incrementCounter(String counterGroup, String counterName, long delta); - void emit(String type, String from, String to); + void emit(String type, String from, String to); } diff --git a/dhp-pace-core/src/test/java/eu/dnetlib/pace/AbstractPaceTest.java b/dhp-pace-core/src/test/java/eu/dnetlib/pace/AbstractPaceTest.java index 27c804ac7..2a37701aa 100644 --- a/dhp-pace-core/src/test/java/eu/dnetlib/pace/AbstractPaceTest.java +++ b/dhp-pace-core/src/test/java/eu/dnetlib/pace/AbstractPaceTest.java @@ -1,11 +1,5 @@ -package eu.dnetlib.pace; -import eu.dnetlib.pace.common.AbstractPaceFunctions; -import eu.dnetlib.pace.config.Type; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.model.FieldListImpl; -import eu.dnetlib.pace.model.FieldValueImpl; -import org.apache.commons.io.IOUtils; +package eu.dnetlib.pace; import java.io.IOException; import java.io.StringWriter; @@ -13,6 +7,14 @@ import java.nio.charset.StandardCharsets; import java.util.List; import java.util.stream.Collectors; +import org.apache.commons.io.IOUtils; + +import eu.dnetlib.pace.common.AbstractPaceFunctions; +import eu.dnetlib.pace.config.Type; +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.FieldListImpl; +import eu.dnetlib.pace.model.FieldValueImpl; + public abstract class AbstractPaceTest extends AbstractPaceFunctions { protected String readFromClasspath(final String filename) { @@ -41,9 +43,12 @@ public abstract class AbstractPaceTest extends AbstractPaceFunctions { return new FieldValueImpl(Type.DoubleArray, "array", a); } - protected Field createFieldList(List strings, String fieldName){ + protected Field createFieldList(List strings, String fieldName) { - List fieldValueStream = strings.stream().map(s -> new FieldValueImpl(Type.String, fieldName, s)).collect(Collectors.toList()); + List fieldValueStream = strings + .stream() + .map(s -> new FieldValueImpl(Type.String, fieldName, s)) + .collect(Collectors.toList()); FieldListImpl a = new FieldListImpl(); a.addAll(fieldValueStream); diff --git a/dhp-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java b/dhp-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java index f57daaa32..9873278b9 100644 --- a/dhp-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java +++ b/dhp-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java @@ -1,17 +1,20 @@ -package eu.dnetlib.pace.clustering; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import com.google.common.collect.Sets; -import eu.dnetlib.pace.AbstractPaceTest; -import eu.dnetlib.pace.common.AbstractPaceFunctions; -import eu.dnetlib.pace.config.DedupConfig; -import org.junit.jupiter.api.*; +package eu.dnetlib.pace.clustering; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; +import org.junit.jupiter.api.*; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; + +import eu.dnetlib.pace.AbstractPaceTest; +import eu.dnetlib.pace.common.AbstractPaceFunctions; +import eu.dnetlib.pace.config.DedupConfig; + public class ClusteringFunctionTest extends AbstractPaceTest { private static Map params; @@ -20,7 +23,11 @@ public class ClusteringFunctionTest extends AbstractPaceTest { @BeforeAll public static void setUp() throws Exception { params = Maps.newHashMap(); - conf = DedupConfig.load(AbstractPaceFunctions.readFromClasspath("/eu/dnetlib/pace/config/organization.current.conf.json", ClusteringFunctionTest.class)); + conf = DedupConfig + .load( + AbstractPaceFunctions + .readFromClasspath( + "/eu/dnetlib/pace/config/organization.current.conf.json", ClusteringFunctionTest.class)); } @Test @@ -210,7 +217,7 @@ public class ClusteringFunctionTest extends AbstractPaceTest { } @Test - public void testPersonClustering(){ + public void testPersonClustering() { final ClusteringFunction cf = new PersonClustering(params); final String s = "Abd-Alla, Abo-el-nour N."; @@ -224,7 +231,7 @@ public class ClusteringFunctionTest extends AbstractPaceTest { } @Test - public void testPersonHash(){ + public void testPersonHash() { final ClusteringFunction cf = new PersonHash(params); final String s = "Manghi, Paolo"; @@ -238,7 +245,7 @@ public class ClusteringFunctionTest extends AbstractPaceTest { } @Test - public void testLastNameFirstInitial(){ + public void testLastNameFirstInitial() { final ClusteringFunction cf = new LastNameFirstInitial(params); final String s = "LI Yonghong"; @@ -246,4 +253,4 @@ public class ClusteringFunctionTest extends AbstractPaceTest { System.out.println(cf.apply(conf, Lists.newArrayList(title(s)))); } -} \ No newline at end of file +} diff --git a/dhp-pace-core/src/test/java/eu/dnetlib/pace/common/PaceFunctionTest.java b/dhp-pace-core/src/test/java/eu/dnetlib/pace/common/PaceFunctionTest.java index ff1ca6721..7fd81d975 100644 --- a/dhp-pace-core/src/test/java/eu/dnetlib/pace/common/PaceFunctionTest.java +++ b/dhp-pace-core/src/test/java/eu/dnetlib/pace/common/PaceFunctionTest.java @@ -1,56 +1,57 @@ + package eu.dnetlib.pace.common; -import org.junit.jupiter.api.*; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; +import org.junit.jupiter.api.*; + public class PaceFunctionTest extends AbstractPaceFunctions { - private final static String TEST_STRING = "Toshiba NB550D: è un netbook su piattaforma AMD Fusion⁽¹²⁾."; + private final static String TEST_STRING = "Toshiba NB550D: è un netbook su piattaforma AMD Fusion⁽¹²⁾."; - @Test - public void normalizePidTest(){ + @Test + public void normalizePidTest() { - assertEquals("identifier", normalizePid("IdentifIer")); - assertEquals("10.1109/tns.2015.2493347", normalizePid("10.1109/TNS.2015.2493347")); - assertEquals("10.0001/testdoi", normalizePid("http://dx.doi.org/10.0001/testDOI")); - assertEquals("10.0001/testdoi", normalizePid("https://dx.doi.org/10.0001/testDOI")); - } + assertEquals("identifier", normalizePid("IdentifIer")); + assertEquals("10.1109/tns.2015.2493347", normalizePid("10.1109/TNS.2015.2493347")); + assertEquals("10.0001/testdoi", normalizePid("http://dx.doi.org/10.0001/testDOI")); + assertEquals("10.0001/testdoi", normalizePid("https://dx.doi.org/10.0001/testDOI")); + } - @Test - public void filterAllStopwordsTest(){ + @Test + public void filterAllStopwordsTest() { - assertEquals("universita politecnica marche", filterAllStopWords("universita politecnica delle marche")); - } + assertEquals("universita politecnica marche", filterAllStopWords("universita politecnica delle marche")); + } - @Test - public void normalizeTest() { - assertEquals("universitat", normalize("Universität")); + @Test + public void normalizeTest() { + assertEquals("universitat", normalize("Universität")); - System.out.println(normalize("İstanbul Ticarət Universiteti")); - } + System.out.println(normalize("İstanbul Ticarət Universiteti")); + } - @Test - public void cleanupTest() { - assertEquals("istanbul ticaret universiteti", cleanup("İstanbul Ticarət Universiteti")); + @Test + public void cleanupTest() { + assertEquals("istanbul ticaret universiteti", cleanup("İstanbul Ticarət Universiteti")); + System.out.println("cleaned up : " + cleanup(TEST_STRING)); + } - System.out.println("cleaned up : " + cleanup(TEST_STRING)); - } + @Test + public void testGetNumbers() { + System.out.println("Numbers : " + getNumbers(TEST_STRING)); + } - @Test - public void testGetNumbers() { - System.out.println("Numbers : " + getNumbers(TEST_STRING)); - } + @Test + public void testRemoveSymbols() { + System.out.println("Without symbols: " + removeSymbols(TEST_STRING)); + } - @Test - public void testRemoveSymbols() { - System.out.println("Without symbols: " + removeSymbols(TEST_STRING)); - } - - @Test - public void testFixAliases() { - System.out.println("Fixed aliases : " + fixAliases(TEST_STRING)); - } + @Test + public void testFixAliases() { + System.out.println("Fixed aliases : " + fixAliases(TEST_STRING)); + } } diff --git a/dhp-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java b/dhp-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java index f0333cbc8..5c846c058 100644 --- a/dhp-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java +++ b/dhp-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java @@ -1,14 +1,6 @@ + package eu.dnetlib.pace.comparators; -import eu.dnetlib.pace.AbstractPaceTest; -import eu.dnetlib.pace.clustering.NGramUtils; -import eu.dnetlib.pace.config.Type; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.model.FieldValueImpl; -import eu.dnetlib.pace.tree.*; -import eu.dnetlib.pace.config.DedupConfig; - -import org.junit.jupiter.api.*; import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.ArrayList; @@ -16,6 +8,16 @@ import java.util.Arrays; import java.util.HashMap; import java.util.Map; +import org.junit.jupiter.api.*; + +import eu.dnetlib.pace.AbstractPaceTest; +import eu.dnetlib.pace.clustering.NGramUtils; +import eu.dnetlib.pace.config.DedupConfig; +import eu.dnetlib.pace.config.Type; +import eu.dnetlib.pace.model.Field; +import eu.dnetlib.pace.model.FieldValueImpl; +import eu.dnetlib.pace.tree.*; + @TestInstance(TestInstance.Lifecycle.PER_CLASS) public class ComparatorTest extends AbstractPaceTest { @@ -24,7 +26,8 @@ public class ComparatorTest extends AbstractPaceTest { @BeforeAll public void setup() { - conf = DedupConfig.load(readFromClasspath("/eu/dnetlib/pace/config/organization.current.conf.json", ComparatorTest.class)); + conf = DedupConfig + .load(readFromClasspath("/eu/dnetlib/pace/config/organization.current.conf.json", ComparatorTest.class)); } @BeforeEach @@ -37,7 +40,6 @@ public class ComparatorTest extends AbstractPaceTest { params.put("jpath_classid", "$.qualifier.classid"); } - @Test public void testCleanForSorting() { NGramUtils utils = new NGramUtils(); @@ -48,22 +50,27 @@ public class ComparatorTest extends AbstractPaceTest { public void cityMatchTest() { final CityMatch cityMatch = new CityMatch(params); - //both names with no cities + // both names with no cities assertEquals(1.0, cityMatch.distance("Università", "Centro di ricerca", conf)); - //one of the two names with no cities + // one of the two names with no cities assertEquals(-1.0, cityMatch.distance("Università di Bologna", "Centro di ricerca", conf)); - //both names with cities (same) + // both names with cities (same) assertEquals(1.0, cityMatch.distance("Universita di Bologna", "Biblioteca di Bologna", conf)); - //both names with cities (different) + // both names with cities (different) assertEquals(0.0, cityMatch.distance("Universita di Bologna", "Universita di Torino", conf)); assertEquals(0.0, cityMatch.distance("Franklin College", "Concordia College", conf)); - //particular cases + // particular cases assertEquals(1.0, cityMatch.distance("Free University of Bozen-Bolzano", "Università di Bolzano", conf)); - assertEquals(1.0, cityMatch.distance("Politechniki Warszawskiej (Warsaw University of Technology)", "Warsaw University of Technology", conf)); + assertEquals( + 1.0, + cityMatch + .distance( + "Politechniki Warszawskiej (Warsaw University of Technology)", "Warsaw University of Technology", + conf)); // failing becasuse 'Allen' is a transliterrated greek stopword // assertEquals(-1.0, cityMatch.distance("Allen (United States)", "United States Military Academy", conf)); @@ -71,17 +78,18 @@ public class ComparatorTest extends AbstractPaceTest { } @Test - public void keywordMatchTest(){ + public void keywordMatchTest() { params.put("threshold", "0.5"); final KeywordMatch keywordMatch = new KeywordMatch(params); - assertEquals(0.5, keywordMatch.distance("Biblioteca dell'Universita di Bologna", "Università di Bologna", conf)); + assertEquals( + 0.5, keywordMatch.distance("Biblioteca dell'Universita di Bologna", "Università di Bologna", conf)); assertEquals(1.0, keywordMatch.distance("Universita degli studi di Pisa", "Universita di Pisa", conf)); assertEquals(1.0, keywordMatch.distance("Polytechnic University of Turin", "POLITECNICO DI TORINO", conf)); assertEquals(1.0, keywordMatch.distance("Istanbul Commerce University", "İstanbul Ticarət Universiteti", conf)); assertEquals(1.0, keywordMatch.distance("Franklin College", "Concordia College", conf)); - assertEquals(2.0/3.0, keywordMatch.distance("University of Georgia", "Georgia State University", conf)); + assertEquals(2.0 / 3.0, keywordMatch.distance("University of Georgia", "Georgia State University", conf)); assertEquals(0.5, keywordMatch.distance("University College London", "University of London", conf)); assertEquals(0.5, keywordMatch.distance("Washington State University", "University of Washington", conf)); assertEquals(-1.0, keywordMatch.distance("Allen (United States)", "United States Military Academy", conf)); @@ -89,7 +97,7 @@ public class ComparatorTest extends AbstractPaceTest { } @Test - public void listContainsMatchTest(){ + public void listContainsMatchTest() { Field a = createFieldList(Arrays.asList("Article", "Publication", "ORP"), "instanceType"); Field b = createFieldList(Arrays.asList("Publication", "Article", "ORP"), "instanceType"); @@ -112,7 +120,7 @@ public class ComparatorTest extends AbstractPaceTest { } @Test - public void stringContainsMatchTest(){ + public void stringContainsMatchTest() { params.put("string", "openorgs"); params.put("aggregator", "XOR"); @@ -132,7 +140,7 @@ public class ComparatorTest extends AbstractPaceTest { } @Test - public void numbersMatchTest(){ + public void numbersMatchTest() { final NumbersMatch numbersMatch = new NumbersMatch(params); assertEquals(0.0, numbersMatch.distance("University of Rennes 2", "Universita di Rennes 7", conf)); @@ -140,7 +148,7 @@ public class ComparatorTest extends AbstractPaceTest { } @Test - public void romansMatchTest(){ + public void romansMatchTest() { final RomansMatch romansMatch = new RomansMatch(params); @@ -154,8 +162,9 @@ public class ComparatorTest extends AbstractPaceTest { final JaroWinklerNormalizedName jaroWinklerNormalizedName = new JaroWinklerNormalizedName(params); - double result = jaroWinklerNormalizedName.distance("AT&T (United States)", "United States Military Academy", conf); - System.out.println("result = " + result); + double result = jaroWinklerNormalizedName + .distance("AT&T (United States)", "United States Military Academy", conf); + System.out.println("result = " + result); result = jaroWinklerNormalizedName.distance("NOAA - Servicio Meteorol\\u00f3gico Nacional", "NOAA - NWS", conf); System.out.println("result = " + result); @@ -183,7 +192,11 @@ public class ComparatorTest extends AbstractPaceTest { final LevensteinTitle levensteinTitle = new LevensteinTitle(params); - double result = levensteinTitle.distance("Degradation of lignin β‐aryl ether units in Arabidopsis thaliana expressing LigD, LigF and LigG from Sphingomonas paucimobilis SYK‐6", "Degradation of lignin β-aryl ether units in Arabidopsis thaliana expressing LigD, LigF and LigG from Sphingomonas paucimobilis SYK-6", conf); + double result = levensteinTitle + .distance( + "Degradation of lignin β‐aryl ether units in Arabidopsis thaliana expressing LigD, LigF and LigG from Sphingomonas paucimobilis SYK‐6", + "Degradation of lignin β-aryl ether units in Arabidopsis thaliana expressing LigD, LigF and LigG from Sphingomonas paucimobilis SYK-6", + conf); System.out.println("result = " + result); } @@ -207,13 +220,15 @@ public class ComparatorTest extends AbstractPaceTest { assertEquals(1.0, result); - Field c = createFieldList(Arrays.asList("Conference object", "Conference object", "Conference object"), "instanceType"); + Field c = createFieldList( + Arrays.asList("Conference object", "Conference object", "Conference object"), "instanceType"); result = instanceTypeMatch.compare(c, b, conf); assertEquals(1.0, result); Field d = createFieldList(Arrays.asList("Master thesis", "Master thesis", "Master thesis"), "instanceType"); - Field e = createFieldList(Arrays.asList("Bachelor thesis", "Bachelor thesis", "Bachelor thesis"), "instanceType"); + Field e = createFieldList( + Arrays.asList("Bachelor thesis", "Bachelor thesis", "Bachelor thesis"), "instanceType"); result = instanceTypeMatch.compare(d, e, conf); assertEquals(1.0, result); @@ -234,7 +249,8 @@ public class ComparatorTest extends AbstractPaceTest { AuthorsMatch authorsMatch = new AuthorsMatch(params); - Field a = createFieldList(Arrays.asList("La Bruzzo, Sandro", "Atzori, Claudio", "De Bonis, Michele"), "authors"); + Field a = createFieldList( + Arrays.asList("La Bruzzo, Sandro", "Atzori, Claudio", "De Bonis, Michele"), "authors"); Field b = createFieldList(Arrays.asList("Atzori, C.", "La Bruzzo, S.", "De Bonis, M."), "authors"); double result = authorsMatch.compare(a, b, conf); @@ -244,7 +260,7 @@ public class ComparatorTest extends AbstractPaceTest { Field d = createFieldList(Arrays.asList("Manghi, Pasquale"), "authors"); result = authorsMatch.compare(c, d, conf); - assertEquals(0.0, result) ; + assertEquals(0.0, result); params.put("mode", "surname"); authorsMatch = new AuthorsMatch(params); @@ -258,7 +274,7 @@ public class ComparatorTest extends AbstractPaceTest { assertEquals(0.25, result); Field f = createFieldList(new ArrayList<>(), "authors"); - result = authorsMatch.compare(f,f, conf); + result = authorsMatch.compare(f, f, conf); System.out.println("result = " + result); } @@ -268,8 +284,19 @@ public class ComparatorTest extends AbstractPaceTest { JsonListMatch jsonListMatch = new JsonListMatch(params); - Field a = createFieldList(Arrays.asList("{\"datainfo\":{\"deletedbyinference\":false,\"inferenceprovenance\":null,\"inferred\":false,\"invisible\":false,\"provenanceaction\":{\"classid\":\"sysimport:actionset\",\"classname\":\"Harvested\",\"schemeid\":\"dnet:provenanceActions\",\"schemename\":\"dnet:provenanceActions\"},\"trust\":\"0.9\"},\"qualifier\":{\"classid\":\"doi\",\"classname\":\"Digital Object Identifier\",\"schemeid\":\"dnet:pid_types\",\"schemename\":\"dnet:pid_types\"},\"value\":\"10.1111/pbi.12655\"}"), "authors"); - Field b = createFieldList(Arrays.asList("{\"datainfo\":{\"deletedbyinference\":false,\"inferenceprovenance\":\"\",\"inferred\":false,\"invisible\":false,\"provenanceaction\":{\"classid\":\"sysimport:crosswalk:repository\",\"classname\":\"Harvested\",\"schemeid\":\"dnet:provenanceActions\",\"schemename\":\"dnet:provenanceActions\"},\"trust\":\"0.9\"},\"qualifier\":{\"classid\":\"pmc\",\"classname\":\"PubMed Central ID\",\"schemeid\":\"dnet:pid_types\",\"schemename\":\"dnet:pid_types\"},\"value\":\"PMC5399005\"}","{\"datainfo\":{\"deletedbyinference\":false,\"inferenceprovenance\":\"\",\"inferred\":false,\"invisible\":false,\"provenanceaction\":{\"classid\":\"sysimport:crosswalk:repository\",\"classname\":\"Harvested\",\"schemeid\":\"dnet:provenanceActions\",\"schemename\":\"dnet:provenanceActions\"},\"trust\":\"0.9\"},\"qualifier\":{\"classid\":\"pmid\",\"classname\":\"PubMed ID\",\"schemeid\":\"dnet:pid_types\",\"schemename\":\"dnet:pid_types\"},\"value\":\"27775869\"}","{\"datainfo\":{\"deletedbyinference\":false,\"inferenceprovenance\":\"\",\"inferred\":false,\"invisible\":false,\"provenanceaction\":{\"classid\":\"user:claim\",\"classname\":\"Linked by user\",\"schemeid\":\"dnet:provenanceActions\",\"schemename\":\"dnet:provenanceActions\"},\"trust\":\"0.9\"},\"qualifier\":{\"classid\":\"doi\",\"classname\":\"Digital Object Identifier\",\"schemeid\":\"dnet:pid_types\",\"schemename\":\"dnet:pid_types\"},\"value\":\"10.1111/pbi.12655\"}","{\"datainfo\":{\"deletedbyinference\":false,\"inferenceprovenance\":\"\",\"inferred\":false,\"invisible\":false,\"provenanceaction\":{\"classid\":\"sysimport:crosswalk:repository\",\"classname\":\"Harvested\",\"schemeid\":\"dnet:provenanceActions\",\"schemename\":\"dnet:provenanceActions\"},\"trust\":\"0.9\"},\"qualifier\":{\"classid\":\"handle\",\"classname\":\"Handle\",\"schemeid\":\"dnet:pid_types\",\"schemename\":\"dnet:pid_types\"},\"value\":\"1854/LU-8523529\"}"), "authors"); + Field a = createFieldList( + Arrays + .asList( + "{\"datainfo\":{\"deletedbyinference\":false,\"inferenceprovenance\":null,\"inferred\":false,\"invisible\":false,\"provenanceaction\":{\"classid\":\"sysimport:actionset\",\"classname\":\"Harvested\",\"schemeid\":\"dnet:provenanceActions\",\"schemename\":\"dnet:provenanceActions\"},\"trust\":\"0.9\"},\"qualifier\":{\"classid\":\"doi\",\"classname\":\"Digital Object Identifier\",\"schemeid\":\"dnet:pid_types\",\"schemename\":\"dnet:pid_types\"},\"value\":\"10.1111/pbi.12655\"}"), + "authors"); + Field b = createFieldList( + Arrays + .asList( + "{\"datainfo\":{\"deletedbyinference\":false,\"inferenceprovenance\":\"\",\"inferred\":false,\"invisible\":false,\"provenanceaction\":{\"classid\":\"sysimport:crosswalk:repository\",\"classname\":\"Harvested\",\"schemeid\":\"dnet:provenanceActions\",\"schemename\":\"dnet:provenanceActions\"},\"trust\":\"0.9\"},\"qualifier\":{\"classid\":\"pmc\",\"classname\":\"PubMed Central ID\",\"schemeid\":\"dnet:pid_types\",\"schemename\":\"dnet:pid_types\"},\"value\":\"PMC5399005\"}", + "{\"datainfo\":{\"deletedbyinference\":false,\"inferenceprovenance\":\"\",\"inferred\":false,\"invisible\":false,\"provenanceaction\":{\"classid\":\"sysimport:crosswalk:repository\",\"classname\":\"Harvested\",\"schemeid\":\"dnet:provenanceActions\",\"schemename\":\"dnet:provenanceActions\"},\"trust\":\"0.9\"},\"qualifier\":{\"classid\":\"pmid\",\"classname\":\"PubMed ID\",\"schemeid\":\"dnet:pid_types\",\"schemename\":\"dnet:pid_types\"},\"value\":\"27775869\"}", + "{\"datainfo\":{\"deletedbyinference\":false,\"inferenceprovenance\":\"\",\"inferred\":false,\"invisible\":false,\"provenanceaction\":{\"classid\":\"user:claim\",\"classname\":\"Linked by user\",\"schemeid\":\"dnet:provenanceActions\",\"schemename\":\"dnet:provenanceActions\"},\"trust\":\"0.9\"},\"qualifier\":{\"classid\":\"doi\",\"classname\":\"Digital Object Identifier\",\"schemeid\":\"dnet:pid_types\",\"schemename\":\"dnet:pid_types\"},\"value\":\"10.1111/pbi.12655\"}", + "{\"datainfo\":{\"deletedbyinference\":false,\"inferenceprovenance\":\"\",\"inferred\":false,\"invisible\":false,\"provenanceaction\":{\"classid\":\"sysimport:crosswalk:repository\",\"classname\":\"Harvested\",\"schemeid\":\"dnet:provenanceActions\",\"schemename\":\"dnet:provenanceActions\"},\"trust\":\"0.9\"},\"qualifier\":{\"classid\":\"handle\",\"classname\":\"Handle\",\"schemeid\":\"dnet:pid_types\",\"schemename\":\"dnet:pid_types\"},\"value\":\"1854/LU-8523529\"}"), + "authors"); double result = jsonListMatch.compare(a, b, conf); @@ -299,13 +326,16 @@ public class ComparatorTest extends AbstractPaceTest { CosineSimilarity cosineSimilarity = new CosineSimilarity(params); - Field a = new FieldValueImpl(Type.DoubleArray, "array", new double[]{1,2,3}); - Field b = new FieldValueImpl(Type.DoubleArray, "array", new double[]{1,2,3}); + Field a = new FieldValueImpl(Type.DoubleArray, "array", new double[] { + 1, 2, 3 + }); + Field b = new FieldValueImpl(Type.DoubleArray, "array", new double[] { + 1, 2, 3 + }); double compare = cosineSimilarity.compare(a, b, conf); System.out.println("compare = " + compare); } - } diff --git a/dhp-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java b/dhp-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java index 4a2a062a1..02b59354a 100644 --- a/dhp-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java +++ b/dhp-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java @@ -1,5 +1,14 @@ + package eu.dnetlib.pace.config; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.*; +import java.util.stream.Collectors; + +import org.junit.jupiter.api.*; import eu.dnetlib.pace.AbstractPaceTest; import eu.dnetlib.pace.clustering.BlacklistAwareClusteringCombiner; @@ -15,15 +24,6 @@ import eu.dnetlib.pace.tree.support.FieldConf; import eu.dnetlib.pace.tree.support.TreeNodeDef; import eu.dnetlib.pace.tree.support.TreeNodeStats; import eu.dnetlib.pace.util.MapDocumentUtil; -import org.junit.jupiter.api.*; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertTrue; - -import java.util.*; -import java.util.stream.Collectors; - public class ConfigTest extends AbstractPaceTest { @@ -68,7 +68,7 @@ public class ConfigTest extends AbstractPaceTest { System.out.println("translationMap = " + translationMap.size()); - for (String key: translationMap.keySet()) { + for (String key : translationMap.keySet()) { if (translationMap.get(key).equals("key::1")) System.out.println("key = " + key); } @@ -99,7 +99,7 @@ public class ConfigTest extends AbstractPaceTest { System.out.println("mapDocument = " + mapDocument.getFieldMap().get("title").stringValue()); - } + } @Test public void authorAsMapDocument() { @@ -110,20 +110,23 @@ public class ConfigTest extends AbstractPaceTest { final MapDocument mapDocument = MapDocumentUtil.asMapDocumentWithJPath(dedupConf, json); - System.out.println("mapDocument = " + Arrays.toString(((FieldValue) mapDocument.getFieldMap().get("topics")).doubleArrayValue())); + System.out + .println( + "mapDocument = " + + Arrays.toString(((FieldValue) mapDocument.getFieldMap().get("topics")).doubleArrayValue())); } - @Test - public void testJPath() { - final String json = readFromClasspath("organization.json"); + @Test + public void testJPath() { + final String json = readFromClasspath("organization.json"); - final String jpath ="$.id"; + final String jpath = "$.id"; - System.out.println("result = " + MapDocumentUtil.getJPathString(jpath, json)); - } + System.out.println("result = " + MapDocumentUtil.getJPathString(jpath, json)); + } - @Test + @Test public void clusteringCombinerTest() { DedupConfig dedupConf = DedupConfig.load(readFromClasspath("publication.current.conf.json")); @@ -150,7 +153,7 @@ public class ConfigTest extends AbstractPaceTest { Collection strings = BlacklistAwareClusteringCombiner.filterAndCombine(mapDocument, dedupConf); - for (String s: strings) { + for (String s : strings) { System.out.println("s = " + s); } @@ -169,7 +172,7 @@ public class ConfigTest extends AbstractPaceTest { TreeNodeStats nodeStats = treeNode.evaluate(doc, doc, dedupConf); - assertTrue(nodeStats.getFinalScore(AggType.MAX)>0.7); + assertTrue(nodeStats.getFinalScore(AggType.MAX) > 0.7); } } diff --git a/dhp-pace-core/src/test/java/eu/dnetlib/pace/util/UtilTest.java b/dhp-pace-core/src/test/java/eu/dnetlib/pace/util/UtilTest.java index a5c6d2729..41b24d8be 100644 --- a/dhp-pace-core/src/test/java/eu/dnetlib/pace/util/UtilTest.java +++ b/dhp-pace-core/src/test/java/eu/dnetlib/pace/util/UtilTest.java @@ -1,38 +1,41 @@ + package eu.dnetlib.pace.util; -import eu.dnetlib.pace.model.Person; -import org.junit.jupiter.api.*; +import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.HashMap; import java.util.Map; -import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.*; + +import eu.dnetlib.pace.model.Person; public class UtilTest { - static Map params; + static Map params; - @BeforeAll - public static void setUp(){ - params = new HashMap<>(); - } + @BeforeAll + public static void setUp() { + params = new HashMap<>(); + } - @Test - public void paceResolverTest() { - PaceResolver paceResolver = new PaceResolver(); - paceResolver.getComparator("keywordMatch", params); - } + @Test + public void paceResolverTest() { + PaceResolver paceResolver = new PaceResolver(); + paceResolver.getComparator("keywordMatch", params); + } - @Test - public void personTest() { - Person p = new Person("j. f. kennedy", false); + @Test + public void personTest() { + Person p = new Person("j. f. kennedy", false); - assertEquals("kennedy", p.getSurnameString()); - assertEquals("j f", p.getNameString()); + assertEquals("kennedy", p.getSurnameString()); + assertEquals("j f", p.getNameString()); - p = new Person("Guan-Hua Du", false); + p = new Person("Guan-Hua Du", false); - System.out.println("surname = " + p.getSurnameString()); - System.out.println("name = " + p.getNameString()); - } + System.out.println("surname = " + p.getSurnameString()); + System.out.println("name = " + p.getNameString()); + } } diff --git a/dhp-workflows/dhp-doiboost/src/main/scala/eu/dnetlib/doiboost/SparkGenerateDoiBoost.scala b/dhp-workflows/dhp-doiboost/src/main/scala/eu/dnetlib/doiboost/SparkGenerateDoiBoost.scala index 3315fc41d..2cbd53097 100644 --- a/dhp-workflows/dhp-doiboost/src/main/scala/eu/dnetlib/doiboost/SparkGenerateDoiBoost.scala +++ b/dhp-workflows/dhp-doiboost/src/main/scala/eu/dnetlib/doiboost/SparkGenerateDoiBoost.scala @@ -284,4 +284,4 @@ object SparkGenerateDoiBoost { .save(s"$workingDirPath/doiBoostOrganization") } -} \ No newline at end of file +} From 772d5f0aab8b680688ef66bc27b171c64e93d78f Mon Sep 17 00:00:00 2001 From: ikanellos Date: Thu, 6 Jul 2023 13:47:51 +0300 Subject: [PATCH 225/449] Make PR and AttRank serial --- .../impact_indicators/oozie_app/workflow.xml | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml index 9bd582984..8466e03e5 100644 --- a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml @@ -22,7 +22,10 @@ ${wf:conf('resume') eq "rankings-start"} ${wf:conf('resume') eq "impulse"} - ${wf:conf('resume') eq "rankings-iterative"} + ${wf:conf('resume') eq "pagerank"} + ${wf:conf('resume') eq "attrank"} + + ${wf:conf('resume') eq "format-results"} ${wf:conf('resume') eq "map-ids"} ${wf:conf('resume') eq "map-scores"} @@ -220,16 +223,19 @@
- + + + @@ -278,7 +284,7 @@ - + @@ -328,15 +334,18 @@ - + - + + + to="get-file-names"/> + --> From d5c39a10596f732d9a17fdb9d6c5abe014f88c4c Mon Sep 17 00:00:00 2001 From: ikanellos Date: Thu, 6 Jul 2023 15:04:48 +0300 Subject: [PATCH 226/449] Fix map scores to doi --- .../oa/graph/impact_indicators/job.properties | 2 +- .../oozie_app/map_scores_to_dois.py | 28 ++++++++++++------- 2 files changed, 19 insertions(+), 11 deletions(-) mode change 100644 => 100755 dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/map_scores_to_dois.py diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/job.properties b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/job.properties index a2f3d5828..ea68ade1a 100644 --- a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/job.properties +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/job.properties @@ -47,7 +47,7 @@ spark2SqlQueryExecutionListeners=com.cloudera.spark.lineage.NavigatorQueryListen resourceManager=http://iis-cdh5-test-m2.ocean.icm.edu.pl:8088/cluster # current year used when creating graph / by some ranking methods -currentYear=2024 +currentYear=2023 # Alpha value for pagerank pageRankAlpha=0.5 diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/map_scores_to_dois.py b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/map_scores_to_dois.py old mode 100644 new mode 100755 index 0d294e045..0fc67eb53 --- a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/map_scores_to_dois.py +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/map_scores_to_dois.py @@ -1,3 +1,4 @@ +#!/usr/bin/python # This program reads the openaire to doi mapping from the ${synonymFolder} of the workflow # and uses this mapping to create doi-based score files in the format required by BiP! DB. # This is done by reading each openaire-id based ranking file and joining the openaire based @@ -17,28 +18,35 @@ import pyspark.sql.functions as F # from pyspark.sql.functions import udf ################################################################################################# ################################################################################################# -# Clean up directory name +# Clean up directory name - no longer needed in final workflow version +''' def clean_directory_name(dir_name): # We have a name with the form *_bip_universe_* or *_graph_universe_* # and we need to keep the parts in * + + dir_name_parts = dir_name.split('_') dir_name_parts = [part for part in dir_name_parts if ('bip' not in part and 'graph' not in part and 'universe' not in part and 'from' not in part)] - - clean_name = '_'.join(dir_name_parts) + + dir_name = dir_name.replace("openaire_id_graph", "openaire_ids") + clean_name = dir_name + ".txt.gz" - if '_ids' not in clean_name: - clean_name = clean_name.replace('id_', 'ids_') + # clean_name = '_'.join(dir_name_parts) + + # if '_ids' not in clean_name: + # clean_name = clean_name.replace('id_', 'ids_') # clean_name = clean_name.replace('.txt', '') # clean_name = clean_name.replace('.gz', '') - if 'openaire_ids_' in clean_name: - clean_name = clean_name.replace('openaire_ids_', '') + # if 'openaire_ids_' in clean_name: + # clean_name = clean_name.replace('openaire_ids_', '') # clean_name = clean_name + '.txt.gz' # else: # clean_name = clean_name + '.txt.gz' return clean_name +''' ################################################################################################# if len(sys.argv) < 3: print ("Usage: ./map_scores_to_dois.py <...etc...>") @@ -47,12 +55,12 @@ if len(sys.argv) < 3: # Read arguments synonyms_folder = sys.argv[1] num_partitions = int(sys.argv[2]) -input_file_list = [argument for argument in sys.argv[3:]] -input_file_list = [clean_directory_name(item) for item in input_file_list] +input_file_list = [argument.replace("_openaire_id_graph", "").replace("_openaire_id_graph_", "") + "_openaire_ids.txt.gz" for argument in sys.argv[3:]] +# input_file_list = [clean_directory_name(item) for item in input_file_list] # Prepare output specific variables output_file_list = [item.replace("_openaire_ids", "") for item in input_file_list] -output_file_list = [item + ".gz" if not item.endswith(".gz") else item for item in output_file_list] +output_file_list = [item + ".txt.gz" if not item.endswith(".txt.gz") else item for item in output_file_list] # --- INFO MESSAGES --- # print ("\n\n----------------------------") From bbc245696e2b17e0123c1343023d53d1dbb4930b Mon Sep 17 00:00:00 2001 From: Serafeim Chatzopoulos Date: Thu, 6 Jul 2023 15:56:12 +0300 Subject: [PATCH 227/449] Prepare actionsets for BIP affiliations --- .../PrepareAffiliationRelations.java | 170 ++++++++++-------- 1 file changed, 91 insertions(+), 79 deletions(-) diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelations.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelations.java index dce9082fd..adb198fb3 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelations.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelations.java @@ -5,6 +5,8 @@ import static eu.dnetlib.dhp.actionmanager.Constants.*; import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkSession; import java.io.Serializable; +import java.util.Arrays; +import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.stream.Collectors; @@ -12,10 +14,16 @@ import java.util.stream.Stream; import eu.dnetlib.dhp.actionmanager.Constants; import eu.dnetlib.dhp.actionmanager.bipaffiliations.model.*; +import eu.dnetlib.dhp.schema.action.AtomicAction; +import eu.dnetlib.dhp.schema.oaf.utils.CleaningFunctions; +import eu.dnetlib.dhp.schema.oaf.utils.IdentifierFactory; import org.apache.commons.io.IOUtils; +import org.apache.hadoop.io.Text; +import org.apache.hadoop.mapred.SequenceFileOutputFormat; import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.JavaSparkContext; +import org.apache.spark.api.java.function.MapFunction; import org.apache.spark.sql.Encoders; import org.apache.spark.sql.Row; import org.apache.spark.sql.SparkSession; @@ -31,6 +39,7 @@ import eu.dnetlib.dhp.schema.common.ModelConstants; import eu.dnetlib.dhp.schema.oaf.*; import eu.dnetlib.dhp.schema.oaf.KeyValue; import eu.dnetlib.dhp.schema.oaf.utils.OafMapperUtils; +import scala.Tuple2; /** * created the Atomic Action for each tipe of results @@ -40,6 +49,12 @@ public class PrepareAffiliationRelations implements Serializable { private static final String DOI = "doi"; private static final Logger log = LoggerFactory.getLogger(PrepareAffiliationRelations.class); private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); + private static final String ID_PREFIX = "50|doi_________::"; + + private static final String TRUST = "0.91"; + + public static final String BIP_AFFILIATIONS_CLASSID = "sysimport:crosswalk:bipaffiliations"; + public static final String BIP_AFFILIATIONS_CLASSNAME = "Imported from BIP! Affiliations"; public static void main(String[] args) throws Exception { @@ -76,93 +91,90 @@ public class PrepareAffiliationRelations implements Serializable { final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); - JavaRDD bipDeserializeJavaRDD = sc + JavaRDD affiliationRelationsDeserializeRDD = sc .textFile(inputPath) .map(item -> OBJECT_MAPPER.readValue(item, AffiliationRelationDeserializer.class)); // for(AffiliationRelationDeserializer rel: bipDeserializeJavaRDD.collect()){ // System.out.println(rel); // } - JavaRDD affiliationRelations = - bipDeserializeJavaRDD.flatMap(entry -> - entry.getMatchings().stream().flatMap(matching -> - matching.getRorId().stream().map( rorId -> new AffiliationRelationModel( - entry.getDoi(), - rorId, - matching.getConfidence() - ))).collect(Collectors.toList()).iterator()); - for(AffiliationRelationModel rel: affiliationRelations.collect()){ - System.out.println(rel); - } -// Dataset relations = spark -// .createDataset(bipDeserializeJavaRDD.flatMap(entry -> { -//// entry.keySet().stream().map(key -> { -// AffiliationRelationModel rel = new AffiliationRelationModel(entry.getDoi()) -// System.out.println(entry); -// return entry; -//// BipScore bs = new BipScore(); -//// bs.setId(key); -//// bs.setScoreList(entry.get(key)); -//// return bs; -// }).collect(Collectors.toList()).iterator()).rdd(), Encoßders.bean(AffiliationRelationModel.class)); + Dataset affiliationRelations = + spark.createDataset( + affiliationRelationsDeserializeRDD.flatMap(entry -> + entry.getMatchings().stream().flatMap(matching -> + matching.getRorId().stream().map( rorId -> new AffiliationRelationModel( + entry.getDoi(), + rorId, + matching.getConfidence() + ))).collect(Collectors.toList()) + .iterator()) + .rdd(), + Encoders.bean(AffiliationRelationModel.class)); -// bipScores -// -// .map((MapFunction) bs -> { -// Result ret = new Result(); -// -// ret.setId(bs.getId()); -// -// ret.setMeasures(getMeasure(bs)); -// -// return ret; -// }, Encoders.bean(Result.class)) -// .toJavaRDD() -// .map(p -> new AtomicAction(Result.class, p)) -// .mapToPair( -// aa -> new Tuple2<>(new Text(aa.getClazz().getCanonicalName()), -// new Text(OBJECT_MAPPER.writeValueAsString(aa)))) -// .saveAsHadoopFile(outputPath, Text.class, Text.class, SequenceFileOutputFormat.class); + affiliationRelations + .map((MapFunction) affRel -> { + + String paperId = ID_PREFIX + + IdentifierFactory.md5(CleaningFunctions.normalizePidValue("doi", affRel.getDoi())); + final String affId = ID_PREFIX + + IdentifierFactory.md5(CleaningFunctions.normalizePidValue("ror", affRel.getRorId())); + + return getRelation(paperId, affId, ModelConstants.HAS_AUTHOR_INSTITUTION); + + }, Encoders.bean(Relation.class)) + .toJavaRDD() + .map(p -> new AtomicAction(Relation.class, p)) + .mapToPair( + aa -> new Tuple2<>(new Text(aa.getClazz().getCanonicalName()), + new Text(OBJECT_MAPPER.writeValueAsString(aa)))) + .saveAsHadoopFile(outputPath, Text.class, Text.class, SequenceFileOutputFormat.class); -// } -// -// private static List getMeasure(BipScore value) { -// return value -// .getScoreList() -// .stream() -// .map(score -> { -// Measure m = new Measure(); -// m.setId(score.getId()); -// m -// .setUnit( -// score -// .getUnit() -// .stream() -// .map(unit -> { -// KeyValue kv = new KeyValue(); -// kv.setValue(unit.getValue()); -// kv.setKey(unit.getKey()); -// kv -// .setDataInfo( -// OafMapperUtils -// .dataInfo( -// false, -// UPDATE_DATA_INFO_TYPE, -// true, -// false, -// OafMapperUtils -// .qualifier( -// UPDATE_MEASURE_BIP_CLASS_ID, -// UPDATE_CLASS_NAME, -// ModelConstants.DNET_PROVENANCE_ACTIONS, -// ModelConstants.DNET_PROVENANCE_ACTIONS), -// "")); -// return kv; -// }) -// .collect(Collectors.toList())); -// return m; -// }) -// .collect(Collectors.toList()); } + + public static Relation getRelation(String source, String target, String relclass) { + Relation r = new Relation(); + + r.setCollectedfrom(getCollectedFrom()); + r.setSource(source); + r.setTarget(target); + r.setRelClass(relclass); + r.setRelType(ModelConstants.RESULT_ORGANIZATION); + r.setSubRelType(ModelConstants.AFFILIATION); + r.setDataInfo(getDataInfo()); + return r; + } + + public static List getCollectedFrom() { + KeyValue kv = new KeyValue(); + kv.setKey(ModelConstants.DNET_PROVENANCE_ACTIONS); + kv.setValue(ModelConstants.DNET_PROVENANCE_ACTIONS); + + return Collections.singletonList(kv); + } + + public static DataInfo getDataInfo() { + DataInfo di = new DataInfo(); + di.setInferred(false); + di.setDeletedbyinference(false); + di.setTrust(TRUST); + di.setProvenanceaction( + getQualifier( + BIP_AFFILIATIONS_CLASSID, + BIP_AFFILIATIONS_CLASSNAME, + ModelConstants.DNET_PROVENANCE_ACTIONS + )); + return di; + } + + public static Qualifier getQualifier(String class_id, String class_name, + String qualifierSchema) { + Qualifier pa = new Qualifier(); + pa.setClassid(class_id); + pa.setClassname(class_name); + pa.setSchemeid(qualifierSchema); + pa.setSchemename(qualifierSchema); + return pa; + } + } From 12528ed2efc9cc20bfbf1336c78fb16a69c7553e Mon Sep 17 00:00:00 2001 From: Serafeim Chatzopoulos Date: Thu, 6 Jul 2023 18:08:33 +0300 Subject: [PATCH 228/449] Refactor PrepareAffiliationRelations.java to use OafMapperUtils common functions --- .../PrepareAffiliationRelations.java | 115 +++++++----------- .../ror/GenerateRorActionSetJob.java | 2 +- 2 files changed, 42 insertions(+), 75 deletions(-) diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelations.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelations.java index adb198fb3..20c649a74 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelations.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelations.java @@ -1,19 +1,14 @@ package eu.dnetlib.dhp.actionmanager.bipaffiliations; -import static eu.dnetlib.dhp.actionmanager.Constants.*; import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkSession; import java.io.Serializable; -import java.util.Arrays; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; import java.util.stream.Collectors; -import java.util.stream.Stream; import eu.dnetlib.dhp.actionmanager.Constants; import eu.dnetlib.dhp.actionmanager.bipaffiliations.model.*; +import eu.dnetlib.dhp.actionmanager.ror.GenerateRorActionSetJob; import eu.dnetlib.dhp.schema.action.AtomicAction; import eu.dnetlib.dhp.schema.oaf.utils.CleaningFunctions; import eu.dnetlib.dhp.schema.oaf.utils.IdentifierFactory; @@ -25,7 +20,6 @@ import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.JavaSparkContext; import org.apache.spark.api.java.function.MapFunction; import org.apache.spark.sql.Encoders; -import org.apache.spark.sql.Row; import org.apache.spark.sql.SparkSession; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -33,16 +27,14 @@ import org.apache.spark.sql.Dataset; import com.fasterxml.jackson.databind.ObjectMapper; -import eu.dnetlib.dhp.actionmanager.bipmodel.BipScore; import eu.dnetlib.dhp.application.ArgumentApplicationParser; import eu.dnetlib.dhp.schema.common.ModelConstants; import eu.dnetlib.dhp.schema.oaf.*; -import eu.dnetlib.dhp.schema.oaf.KeyValue; import eu.dnetlib.dhp.schema.oaf.utils.OafMapperUtils; import scala.Tuple2; /** - * created the Atomic Action for each tipe of results + * Creates action sets for Crossref affiliation relations inferred by BIP! */ public class PrepareAffiliationRelations implements Serializable { @@ -50,19 +42,17 @@ public class PrepareAffiliationRelations implements Serializable { private static final Logger log = LoggerFactory.getLogger(PrepareAffiliationRelations.class); private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); private static final String ID_PREFIX = "50|doi_________::"; - - private static final String TRUST = "0.91"; - - public static final String BIP_AFFILIATIONS_CLASSID = "sysimport:crosswalk:bipaffiliations"; - public static final String BIP_AFFILIATIONS_CLASSNAME = "Imported from BIP! Affiliations"; + public static final String BIP_AFFILIATIONS_CLASSID = "result:organization:bipinference"; + public static final String BIP_AFFILIATIONS_CLASSNAME = "Affiliation relation inferred by BIP!"; + public static final String BIP_INFERENCE_PROVENANCE = "bip_affiliation"; public static void main(String[] args) throws Exception { String jsonConfiguration = IOUtils - .toString( - PrepareAffiliationRelations.class - .getResourceAsStream( - "/eu/dnetlib/dhp/actionmanager/bipaffiliations/input_actionset_parameter.json")); + .toString( + PrepareAffiliationRelations.class + .getResourceAsStream( + "/eu/dnetlib/dhp/actionmanager/bipaffiliations/input_actionset_parameter.json")); final ArgumentApplicationParser parser = new ArgumentApplicationParser(jsonConfiguration); parser.parseArgument(args); @@ -91,14 +81,12 @@ public class PrepareAffiliationRelations implements Serializable { final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); + // load and parse affiliation relations from HDFS JavaRDD affiliationRelationsDeserializeRDD = sc .textFile(inputPath) .map(item -> OBJECT_MAPPER.readValue(item, AffiliationRelationDeserializer.class)); -// for(AffiliationRelationDeserializer rel: bipDeserializeJavaRDD.collect()){ -// System.out.println(rel); -// } - + // convert affiliation to an internal representation Dataset affiliationRelations = spark.createDataset( affiliationRelationsDeserializeRDD.flatMap(entry -> @@ -112,15 +100,40 @@ public class PrepareAffiliationRelations implements Serializable { .rdd(), Encoders.bean(AffiliationRelationModel.class)); + // prepare action sets for affiliation relations affiliationRelations .map((MapFunction) affRel -> { - String paperId = ID_PREFIX - + IdentifierFactory.md5(CleaningFunctions.normalizePidValue("doi", affRel.getDoi())); - final String affId = ID_PREFIX - + IdentifierFactory.md5(CleaningFunctions.normalizePidValue("ror", affRel.getRorId())); + // DOI to OpenAIRE id + final String paperId = ID_PREFIX + IdentifierFactory.md5(CleaningFunctions.normalizePidValue("doi", affRel.getDoi())); - return getRelation(paperId, affId, ModelConstants.HAS_AUTHOR_INSTITUTION); + // ROR id to OpenAIRE id + final String affId = GenerateRorActionSetJob.calculateOpenaireId(affRel.getRorId()); + + Qualifier qualifier = OafMapperUtils.qualifier( + BIP_AFFILIATIONS_CLASSID, + BIP_AFFILIATIONS_CLASSNAME, + ModelConstants.DNET_PROVENANCE_ACTIONS, + ModelConstants.DNET_PROVENANCE_ACTIONS); + + // format data info; setting `confidence` into relation's `trust` + DataInfo dataInfo = OafMapperUtils.dataInfo( + false, + BIP_INFERENCE_PROVENANCE, + true, + false, + qualifier, + Double.toString(affRel.getConfidence())); + + return OafMapperUtils.getRelation( + paperId, + affId, + ModelConstants.RESULT_ORGANIZATION, + ModelConstants.AFFILIATION, + ModelConstants.HAS_AUTHOR_INSTITUTION, + null, + dataInfo, + null); }, Encoders.bean(Relation.class)) .toJavaRDD() @@ -131,50 +144,4 @@ public class PrepareAffiliationRelations implements Serializable { .saveAsHadoopFile(outputPath, Text.class, Text.class, SequenceFileOutputFormat.class); } - - public static Relation getRelation(String source, String target, String relclass) { - Relation r = new Relation(); - - r.setCollectedfrom(getCollectedFrom()); - r.setSource(source); - r.setTarget(target); - r.setRelClass(relclass); - r.setRelType(ModelConstants.RESULT_ORGANIZATION); - r.setSubRelType(ModelConstants.AFFILIATION); - r.setDataInfo(getDataInfo()); - return r; - } - - public static List getCollectedFrom() { - KeyValue kv = new KeyValue(); - kv.setKey(ModelConstants.DNET_PROVENANCE_ACTIONS); - kv.setValue(ModelConstants.DNET_PROVENANCE_ACTIONS); - - return Collections.singletonList(kv); - } - - public static DataInfo getDataInfo() { - DataInfo di = new DataInfo(); - di.setInferred(false); - di.setDeletedbyinference(false); - di.setTrust(TRUST); - di.setProvenanceaction( - getQualifier( - BIP_AFFILIATIONS_CLASSID, - BIP_AFFILIATIONS_CLASSNAME, - ModelConstants.DNET_PROVENANCE_ACTIONS - )); - return di; - } - - public static Qualifier getQualifier(String class_id, String class_name, - String qualifierSchema) { - Qualifier pa = new Qualifier(); - pa.setClassid(class_id); - pa.setClassname(class_name); - pa.setSchemeid(qualifierSchema); - pa.setSchemename(qualifierSchema); - return pa; - } - } diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/ror/GenerateRorActionSetJob.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/ror/GenerateRorActionSetJob.java index 1be2a96fd..5f3493d56 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/ror/GenerateRorActionSetJob.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/ror/GenerateRorActionSetJob.java @@ -168,7 +168,7 @@ public class GenerateRorActionSetJob { } - private static String calculateOpenaireId(final String rorId) { + public static String calculateOpenaireId(final String rorId) { return String.format("20|%s::%s", Constants.ROR_NS_PREFIX, DHPUtils.md5(rorId)); } From bc7b00bcd170140f6db127dbb62623825d4f47f7 Mon Sep 17 00:00:00 2001 From: Serafeim Chatzopoulos Date: Thu, 6 Jul 2023 18:29:15 +0300 Subject: [PATCH 229/449] Add bi-directional affiliation relations --- .../PrepareAffiliationRelations.java | 40 ++++++++++++++----- 1 file changed, 29 insertions(+), 11 deletions(-) diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelations.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelations.java index 20c649a74..45e712c7e 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelations.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelations.java @@ -4,6 +4,8 @@ package eu.dnetlib.dhp.actionmanager.bipaffiliations; import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkSession; import java.io.Serializable; +import java.util.Arrays; +import java.util.List; import java.util.stream.Collectors; import eu.dnetlib.dhp.actionmanager.Constants; @@ -18,6 +20,7 @@ import org.apache.hadoop.mapred.SequenceFileOutputFormat; import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.JavaSparkContext; +import org.apache.spark.api.java.function.FlatMapFunction; import org.apache.spark.api.java.function.MapFunction; import org.apache.spark.sql.Encoders; import org.apache.spark.sql.SparkSession; @@ -38,7 +41,6 @@ import scala.Tuple2; */ public class PrepareAffiliationRelations implements Serializable { - private static final String DOI = "doi"; private static final Logger log = LoggerFactory.getLogger(PrepareAffiliationRelations.class); private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); private static final String ID_PREFIX = "50|doi_________::"; @@ -102,7 +104,7 @@ public class PrepareAffiliationRelations implements Serializable { // prepare action sets for affiliation relations affiliationRelations - .map((MapFunction) affRel -> { + .flatMap((FlatMapFunction) affRel -> { // DOI to OpenAIRE id final String paperId = ID_PREFIX + IdentifierFactory.md5(CleaningFunctions.normalizePidValue("doi", affRel.getDoi())); @@ -125,15 +127,8 @@ public class PrepareAffiliationRelations implements Serializable { qualifier, Double.toString(affRel.getConfidence())); - return OafMapperUtils.getRelation( - paperId, - affId, - ModelConstants.RESULT_ORGANIZATION, - ModelConstants.AFFILIATION, - ModelConstants.HAS_AUTHOR_INSTITUTION, - null, - dataInfo, - null); + // return bi-directional relations + return getAffiliationRelationPair(paperId, affId, dataInfo).iterator(); }, Encoders.bean(Relation.class)) .toJavaRDD() @@ -144,4 +139,27 @@ public class PrepareAffiliationRelations implements Serializable { .saveAsHadoopFile(outputPath, Text.class, Text.class, SequenceFileOutputFormat.class); } + + private static List getAffiliationRelationPair(String paperId, String affId, DataInfo dataInfo) { + return Arrays.asList( + OafMapperUtils.getRelation( + paperId, + affId, + ModelConstants.RESULT_ORGANIZATION, + ModelConstants.AFFILIATION, + ModelConstants.HAS_AUTHOR_INSTITUTION, + null, + dataInfo, + null), + OafMapperUtils.getRelation( + affId, + paperId, + ModelConstants.RESULT_ORGANIZATION, + ModelConstants.AFFILIATION, + ModelConstants.IS_AUTHOR_INSTITUTION_OF, + null, + dataInfo, + null) + ); + } } From c2998a14e8e998cc496a8e8db803e48bafdb43e4 Mon Sep 17 00:00:00 2001 From: Serafeim Chatzopoulos Date: Thu, 6 Jul 2023 20:28:16 +0300 Subject: [PATCH 230/449] Add basic tests for affiliation relations --- .../PrepareAffiliationRelationsTest.java | 108 +++++++++--------- 1 file changed, 52 insertions(+), 56 deletions(-) diff --git a/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelationsTest.java b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelationsTest.java index eba53ccdb..c76fcf6a9 100644 --- a/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelationsTest.java +++ b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelationsTest.java @@ -5,8 +5,11 @@ import static org.junit.jupiter.api.Assertions.*; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; -import java.util.List; +import eu.dnetlib.dhp.schema.common.ModelConstants; +import eu.dnetlib.dhp.schema.oaf.Relation; +import eu.dnetlib.dhp.schema.oaf.utils.CleaningFunctions; +import eu.dnetlib.dhp.schema.oaf.utils.IdentifierFactory; import org.apache.commons.io.FileUtils; import org.apache.hadoop.io.Text; import org.apache.spark.SparkConf; @@ -26,7 +29,6 @@ import org.slf4j.LoggerFactory; import com.fasterxml.jackson.databind.ObjectMapper; import eu.dnetlib.dhp.schema.action.AtomicAction; -import eu.dnetlib.dhp.schema.oaf.Result; public class PrepareAffiliationRelationsTest { @@ -35,6 +37,7 @@ public class PrepareAffiliationRelationsTest { private static SparkSession spark; private static Path workingDir; + private static final String ID_PREFIX = "50|doi_________::"; private static final Logger log = LoggerFactory .getLogger(PrepareAffiliationRelationsTest.class); @@ -69,71 +72,64 @@ public class PrepareAffiliationRelationsTest { @Test void testMatch() throws Exception { + String affiliationRelationsPath = getClass() .getResource("/eu/dnetlib/dhp/actionmanager/bipaffiliations/doi_to_ror.json") .getPath(); + String outputPath = workingDir.toString() + "/actionSet"; + PrepareAffiliationRelations .main( new String[] { - "-isSparkSessionManaged", - Boolean.FALSE.toString(), - "-inputPath", - affiliationRelationsPath, - "-outputPath", - workingDir.toString() + "/actionSet" + "-isSparkSessionManaged", Boolean.FALSE.toString(), + "-inputPath", affiliationRelationsPath, + "-outputPath", outputPath }); final JavaSparkContext sc = new JavaSparkContext(spark.sparkContext()); -// JavaRDD tmp = sc -// .sequenceFile(workingDir.toString() + "/actionSet", Text.class, Text.class) -// .map(value -> OBJECT_MAPPER.readValue(value._2().toString(), AtomicAction.class)) -// .map(aa -> ((Result) aa.getPayload())); -// -// assertEquals(4, tmp.count()); -// -// Dataset verificationDataset = spark.createDataset(tmp.rdd(), Encoders.bean(Result.class)); -// verificationDataset.createOrReplaceTempView("result"); -// -// Dataset execVerification = spark -// .sql( -// "Select p.id oaid, mes.id, mUnit.value from result p " + -// "lateral view explode(measures) m as mes " + -// "lateral view explode(mes.unit) u as mUnit "); -// -// Assertions.assertEquals(12, execVerification.count()); -// Assertions -// .assertEquals( -// "6.63451994567e-09", execVerification -// .filter( -// "oaid='50|arXiv_dedup_::4a2d5fd8d71daec016c176ec71d957b1' " + -// "and id = 'influence'") -// .select("value") -// .collectAsList() -// .get(0) -// .getString(0)); -// Assertions -// .assertEquals( -// "0.348694533145", execVerification -// .filter( -// "oaid='50|arXiv_dedup_::4a2d5fd8d71daec016c176ec71d957b1' " + -// "and id = 'popularity_alt'") -// .select("value") -// .collectAsList() -// .get(0) -// .getString(0)); -// Assertions -// .assertEquals( -// "2.16094680115e-09", execVerification -// .filter( -// "oaid='50|arXiv_dedup_::4a2d5fd8d71daec016c176ec71d957b1' " + -// "and id = 'popularity'") -// .select("value") -// .collectAsList() -// .get(0) -// .getString(0)); -// + JavaRDD tmp = sc + .sequenceFile(outputPath, Text.class, Text.class) + .map(value -> OBJECT_MAPPER.readValue(value._2().toString(), AtomicAction.class)) + .map(aa -> ((Relation) aa.getPayload())); + + for (Relation r : tmp.collect()) { + System.out.println( + r.getSource() + "\t" + r.getTarget() + "\t" + r.getRelType() + "\t" + r.getRelClass() + "\t" + r.getSubRelType() + "\t" + r.getValidationDate() + "\t" + r.getDataInfo().getTrust() + "\t" + r.getDataInfo().getInferred() + ); + } + // count the number of relations + assertEquals(16, tmp.count()); + + Dataset dataset = spark.createDataset(tmp.rdd(), Encoders.bean(Relation.class)); + dataset.createOrReplaceTempView("result"); + + Dataset execVerification = spark.sql("select r.relType, r.relClass, r.source, r.target, r.dataInfo.trust from result r"); + + // verify that we have equal number of bi-directional relations + Assertions.assertEquals(8, execVerification + .filter( + "relClass='" + ModelConstants.HAS_AUTHOR_INSTITUTION +"'") + .collectAsList() + .size()); + + Assertions.assertEquals(8, execVerification + .filter( + "relClass='" + ModelConstants.IS_AUTHOR_INSTITUTION_OF +"'") + .collectAsList() + .size()); + + // check confidence value of a specific relation + String sourceDOI = "10.1105/tpc.8.3.343"; + + final String sourceOpenaireId = ID_PREFIX + IdentifierFactory.md5(CleaningFunctions.normalizePidValue("doi", sourceDOI)); + + Assertions.assertEquals("0.7071067812", execVerification + .filter( + "source='" + sourceOpenaireId +"'") + .collectAsList().get(0).getString(4)); + } } From 4eba14a80e25d17cd476cc1f0ffe420654b50726 Mon Sep 17 00:00:00 2001 From: Serafeim Chatzopoulos Date: Thu, 6 Jul 2023 21:07:50 +0300 Subject: [PATCH 231/449] Add oozie workflow --- .../oozie_app/config-default.xml | 30 +++++ .../bipaffiliations/oozie_app/workflow.xml | 108 ++++++++++++++++++ 2 files changed, 138 insertions(+) create mode 100644 dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/oozie_app/config-default.xml create mode 100644 dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/oozie_app/workflow.xml diff --git a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/oozie_app/config-default.xml b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/oozie_app/config-default.xml new file mode 100644 index 000000000..d262cb6e0 --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/oozie_app/config-default.xml @@ -0,0 +1,30 @@ + + + jobTracker + yarnRM + + + nameNode + hdfs://nameservice1 + + + oozie.use.system.libpath + true + + + hiveMetastoreUris + thrift://iis-cdh5-test-m3.ocean.icm.edu.pl:9083 + + + hiveJdbcUrl + jdbc:hive2://iis-cdh5-test-m3.ocean.icm.edu.pl:10000 + + + hiveDbName + openaire + + + oozie.launcher.mapreduce.user.classpath.first + true + + diff --git a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/oozie_app/workflow.xml b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/oozie_app/workflow.xml new file mode 100644 index 000000000..7c44bb7eb --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/oozie_app/workflow.xml @@ -0,0 +1,108 @@ + + + + + inputPath + the path where to find the inferred affiliation relations + + + outputPath + the path where to store the actionset + + + sparkDriverMemory + memory for driver process + + + sparkExecutorMemory + memory for individual executor + + + sparkExecutorCores + number of cores used by single executor + + + oozieActionShareLibForSpark2 + oozie action sharelib for spark 2.* + + + spark2ExtraListeners + com.cloudera.spark.lineage.NavigatorAppListener + spark 2.* extra listeners classname + + + spark2SqlQueryExecutionListeners + com.cloudera.spark.lineage.NavigatorQueryListener + spark 2.* sql query execution listeners classname + + + spark2YarnHistoryServerAddress + spark 2.* yarn history server address + + + spark2EventLogDir + spark 2.* event log dir location + + + + + ${jobTracker} + ${nameNode} + + + mapreduce.job.queuename + ${queueName} + + + oozie.launcher.mapred.job.queue.name + ${oozieLauncherQueueName} + + + oozie.action.sharelib.for.spark + ${oozieActionShareLibForSpark2} + + + + + + + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + + + + + + + + + + + + + + + yarn + cluster + Produces the atomic action with the inferred by BIP! affiliation relations from Crossref + eu.dnetlib.dhp.actionmanager.bipaffiliations.PrepareAffiliationRelations/class> + dhp-aggregation-${projectVersion}.jar + + --executor-memory=${sparkExecutorMemory} + --executor-cores=${sparkExecutorCores} + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.sql.warehouse.dir=${sparkSqlWarehouseDir} + + --inputPath${inputPath} + --outputPath${outputPath} + + + + + + + \ No newline at end of file From 76901a25f9580063ee87f500c59f39fdea5f3990 Mon Sep 17 00:00:00 2001 From: dimitrispie Date: Wed, 12 Jul 2023 22:49:08 +0300 Subject: [PATCH 232/449] Updates Promotion DBs - Add a step for promoting the splitted monitor DBs --- .../stats/oozie_app/updateProductionViews.sh | 4 +-- .../oozie_app/updateProductionViewsMonitor.sh | 36 +++++++++++-------- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/dhp-workflows/dhp-stats-promote/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/updateProductionViews.sh b/dhp-workflows/dhp-stats-promote/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/updateProductionViews.sh index a6d7b289d..3813c7f27 100644 --- a/dhp-workflows/dhp-stats-promote/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/updateProductionViews.sh +++ b/dhp-workflows/dhp-stats-promote/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/updateProductionViews.sh @@ -11,6 +11,6 @@ export PRODUCTION=$2 echo "Updating ${PRODUCTION} database" impala-shell -i impala-cluster-dn1.openaire.eu -q "create database if not exists ${PRODUCTION}" -impala-shell -i impala-cluster-dn1.openaire.eu -d ${PRODUCTION} -q "show tables" --delimited | sed "s/^/drop view if exists ${PRODUCTION}./" | sed "s/$/;/" | impala-shell -c -f - -impala-shell -i impala-cluster-dn1.openaire.eu -d ${SOURCE} -q "show tables" --delimited | sed "s/\(.*\)/create view ${PRODUCTION}.\1 as select * from ${SOURCE}.\1;/" | impala-shell -c -f - +impala-shell -i impala-cluster-dn1.openaire.eu -d ${PRODUCTION} -q "show tables" --delimited | sed "s/^/drop view if exists ${PRODUCTION}./" | sed "s/$/;/" | impala-shell -i impala-cluster-dn1.openaire.eu -c -f - +impala-shell -i impala-cluster-dn1.openaire.eu -d ${SOURCE} -q "show tables" --delimited | sed "s/\(.*\)/create view ${PRODUCTION}.\1 as select * from ${SOURCE}.\1;/" | impala-shell -i impala-cluster-dn1.openaire.eu -c -f - echo "Production db ready!" \ No newline at end of file diff --git a/dhp-workflows/dhp-stats-promote/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/updateProductionViewsMonitor.sh b/dhp-workflows/dhp-stats-promote/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/updateProductionViewsMonitor.sh index 68844b14c..592310122 100644 --- a/dhp-workflows/dhp-stats-promote/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/updateProductionViewsMonitor.sh +++ b/dhp-workflows/dhp-stats-promote/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/updateProductionViewsMonitor.sh @@ -9,30 +9,36 @@ fi export SOURCE=$1 export PRODUCTION=$2 -echo "Updating ${PRODUCTION}'_funded' database" -impala-shell -i impala-cluster-dn1.openaire.eu -q "create database if not exists ${PRODUCTION}'_funded'" -impala-shell -i impala-cluster-dn1.openaire.eu -d ${PRODUCTION}'_funded' -q "show tables" --delimited | sed "s/^/drop view if exists ${PRODUCTION}'_funded'./" | sed "s/$/;/" | impala-shell -c -f - -impala-shell -i impala-cluster-dn1.openaire.eu -d ${SOURCE}'_funded' -q "show tables" --delimited | sed "s/\(.*\)/create view ${PRODUCTION}'_funded'.\1 as select * from ${SOURCE}'_funded'.\1;/" | impala-shell -c -f - +echo "Updating ${PRODUCTION} monitor database" +impala-shell -i impala-cluster-dn1.openaire.eu -q "create database if not exists ${PRODUCTION}" +impala-shell -i impala-cluster-dn1.openaire.eu -d ${PRODUCTION} -q "show tables" --delimited | sed "s/^/drop view if exists ${PRODUCTION}./" | sed "s/$/;/" | impala-shell -i impala-cluster-dn1.openaire.eu -c -f - +impala-shell -i impala-cluster-dn1.openaire.eu -d ${SOURCE} -q "show tables" --delimited | sed "s/\(.*\)/create view ${PRODUCTION}.\1 as select * from ${SOURCE}.\1;/" | impala-shell -i impala-cluster-dn1.openaire.eu -c -f - +echo "Production monitor db ready!" + +echo "Updating ${PRODUCTION}_funded database" +impala-shell -i impala-cluster-dn1.openaire.eu -q "create database if not exists ${PRODUCTION}_funded" +impala-shell -i impala-cluster-dn1.openaire.eu -d ${PRODUCTION}_funded -q "show tables" --delimited | sed "s/^/drop view if exists ${PRODUCTION}_funded./" | sed "s/$/;/" | impala-shell -i impala-cluster-dn1.openaire.eu -c -f - +impala-shell -i impala-cluster-dn1.openaire.eu -d ${SOURCE}_funded -q "show tables" --delimited | sed "s/\(.*\)/create view ${PRODUCTION}_funded.\1 as select * from ${SOURCE}_funded.\1;/" | impala-shell -i impala-cluster-dn1.openaire.eu -c -f - echo "Production funded db ready!" -echo "Updating ${PRODUCTION}'_institutions' database" -impala-shell -i impala-cluster-dn1.openaire.eu -q "create database if not exists ${PRODUCTION}'_institutions'" -impala-shell -i impala-cluster-dn1.openaire.eu -d ${PRODUCTION}'_institutions' -q "show tables" --delimited | sed "s/^/drop view if exists ${PRODUCTION}'_institutions'./" | sed "s/$/;/" | impala-shell -c -f - -impala-shell -i impala-cluster-dn1.openaire.eu -d ${SOURCE}'_institutions' -q "show tables" --delimited | sed "s/\(.*\)/create view ${PRODUCTION}'_institutions'.\1 as select * from ${SOURCE}'_institutions'.\1;/" | impala-shell -c -f - +echo "Updating ${PRODUCTION}_institutions database" +impala-shell -i impala-cluster-dn1.openaire.eu -q "create database if not exists ${PRODUCTION}_institutions" +impala-shell -i impala-cluster-dn1.openaire.eu -d ${PRODUCTION}_institutions -q "show tables" --delimited | sed "s/^/drop view if exists ${PRODUCTION}_institutions./" | sed "s/$/;/" | impala-shell -i impala-cluster-dn1.openaire.eu -c -f - +impala-shell -i impala-cluster-dn1.openaire.eu -d ${SOURCE}_institutions -q "show tables" --delimited | sed "s/\(.*\)/create view ${PRODUCTION}_institutions.\1 as select * from ${SOURCE}_institutions.\1;/" | impala-shell -i impala-cluster-dn1.openaire.eu -c -f - echo "Production insitutions db ready!" -echo "Updating ${PRODUCTION}'_ris_tail' database" -impala-shell -i impala-cluster-dn1.openaire.eu -q "create database if not exists ${PRODUCTION}'_ris_tail'" -impala-shell -i impala-cluster-dn1.openaire.eu -d ${PRODUCTION}'_ris_tail' -q "show tables" --delimited | sed "s/^/drop view if exists ${PRODUCTION}'_ris_tail'./" | sed "s/$/;/" | impala-shell -c -f - -impala-shell -i impala-cluster-dn1.openaire.eu -d ${SOURCE}'_RIs_tail' -q "show tables" --delimited | sed "s/\(.*\)/create view ${PRODUCTION}'_ris_tail'.\1 as select * from ${SOURCE}'_ris_tail'.\1;/" | impala-shell -c -f - +echo "Updating ${PRODUCTION}_ris_tail database" +impala-shell -i impala-cluster-dn1.openaire.eu -q "create database if not exists ${PRODUCTION}_ris_tail" +impala-shell -i impala-cluster-dn1.openaire.eu -d ${PRODUCTION}_ris_tail -q "show tables" --delimited | sed "s/^/drop view if exists ${PRODUCTION}_ris_tail./" | sed "s/$/;/" | impala-shell -i impala-cluster-dn1.openaire.eu -c -f - +impala-shell -i impala-cluster-dn1.openaire.eu -d ${SOURCE}_ris_tail -q "show tables" --delimited | sed "s/\(.*\)/create view ${PRODUCTION}_ris_tail.\1 as select * from ${SOURCE}_ris_tail.\1;/" | impala-shell -i impala-cluster-dn1.openaire.eu -c -f - echo "Production RIS tail db ready!" contexts="knowmad::other dh-ch::other enermaps::other gotriple::other neanias-atmospheric::other rural-digital-europe::other covid-19::other aurora::other neanias-space::other north-america-studies::other north-american-studies::other eutopia::other" for i in ${contexts} do tmp=`echo "$i" | sed 's/'-'/'_'/g' | sed 's/'::'/'_'/g'` - impala-shell -i impala-cluster-dn1.openaire.eu -q "create database if not exists ${PRODUCTION}'_'${tmp}" - impala-shell -i impala-cluster-dn1.openaire.eu -d ${PRODUCTION}'_'${tmp} -q "show tables" --delimited | sed "s/^/drop view if exists ${PRODUCTION}'_'${tmp}./" | sed "s/$/;/" | impala-shell -c -f - - impala-shell -i impala-cluster-dn1.openaire.eu -d ${SOURCE}'_'${tmp} -q "show tables" --delimited | sed "s/\(.*\)/create view ${PRODUCTION}'_'${tmp}.\1 as select * from ${SOURCE}'_'${tmp}.\1;/" | impala-shell -c -f - + impala-shell -i impala-cluster-dn1.openaire.eu -q "create database if not exists ${PRODUCTION}_${tmp}" + impala-shell -i impala-cluster-dn1.openaire.eu -d ${PRODUCTION}_${tmp} -q "show tables" --delimited | sed "s/^/drop view if exists ${PRODUCTION}_${tmp}./" | sed "s/$/;/" | impala-shell -i impala-cluster-dn1.openaire.eu -c -f - + impala-shell -i impala-cluster-dn1.openaire.eu -d ${SOURCE}_${tmp} -q "show tables" --delimited | sed "s/\(.*\)/create view ${PRODUCTION}_${tmp}.\1 as select * from ${SOURCE}_${tmp}.\1;/" | impala-shell -i impala-cluster-dn1.openaire.eu -c -f - echo "Production ${tmp} db ready!" done From 163b2ee2a8f27755a36de97c2f6115d27b367165 Mon Sep 17 00:00:00 2001 From: dimitrispie Date: Thu, 13 Jul 2023 15:25:00 +0300 Subject: [PATCH 233/449] Changes 1. Monitor updates 2. Bug fixes during copy to impala cluster --- .../oozie_app/config-default.xml | 30 + .../oozie_app/copyDataToImpalaCluster.sh | 75 ++ .../oozie_app/finalizeImpalaCluster.sh | 29 + .../graph/stats-monitor/oozie_app/monitor.sh | 54 ++ .../oozie_app/scripts/updateMonitorDB.sql | 138 ++++ .../oozie_app/scripts/updateMonitorDBAll.sql | 150 ++++ .../scripts/updateMonitorDB_institutions.sql | 12 + .../stats-monitor/oozie_app/workflow.xml | 110 +++ .../oozie_app/copyDataToImpalaCluster.sh | 8 +- .../stats/oozie_app/finalizeImpalaCluster.sh | 10 +- .../dhp/oa/graph/stats/oozie_app/monitor.sh | 22 +- .../graph/stats/oozie_app/scripts/step15.sql | 11 +- .../scripts/step16-createIndicatorsTables.sql | 718 +++++++++--------- .../scripts/step20-createMonitorDB.sql | 106 +-- .../scripts/step20-createMonitorDBAll.sql | 276 +++++++ .../scripts/step20-createMonitorDB_RIs.sql | 2 +- .../step20-createMonitorDB_RIs_tail.sql | 2 +- .../scripts/step20-createMonitorDB_funded.sql | 2 +- .../step20-createMonitorDB_institutions.sql | 9 +- .../scripts/step21-createObservatoryDB.sql | 38 +- .../dhp/oa/graph/stats/oozie_app/workflow.xml | 18 +- 21 files changed, 1347 insertions(+), 473 deletions(-) create mode 100644 dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/config-default.xml create mode 100644 dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/copyDataToImpalaCluster.sh create mode 100644 dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/finalizeImpalaCluster.sh create mode 100644 dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/monitor.sh create mode 100644 dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/scripts/updateMonitorDB.sql create mode 100644 dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/scripts/updateMonitorDBAll.sql create mode 100644 dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/scripts/updateMonitorDB_institutions.sql create mode 100644 dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/workflow.xml create mode 100644 dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDBAll.sql diff --git a/dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/config-default.xml b/dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/config-default.xml new file mode 100644 index 000000000..b2a1322e6 --- /dev/null +++ b/dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/config-default.xml @@ -0,0 +1,30 @@ + + + jobTracker + ${jobTracker} + + + nameNode + ${nameNode} + + + oozie.use.system.libpath + true + + + oozie.action.sharelib.for.spark + spark2 + + + hive_metastore_uris + thrift://iis-cdh5-test-m3.ocean.icm.edu.pl:9083 + + + hive_jdbc_url + jdbc:hive2://iis-cdh5-test-m3.ocean.icm.edu.pl:10000/;UseNativeQuery=1;?spark.executor.memory=22166291558;spark.yarn.executor.memoryOverhead=3225;spark.driver.memory=15596411699;spark.yarn.driver.memoryOverhead=1228 + + + oozie.wf.workflow.notification.url + {serviceUrl}/v1/oozieNotification/jobUpdate?jobId=$jobId%26status=$status + + \ No newline at end of file diff --git a/dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/copyDataToImpalaCluster.sh b/dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/copyDataToImpalaCluster.sh new file mode 100644 index 000000000..1587f7152 --- /dev/null +++ b/dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/copyDataToImpalaCluster.sh @@ -0,0 +1,75 @@ +export PYTHON_EGG_CACHE=/home/$(whoami)/.python-eggs +export link_folder=/tmp/impala-shell-python-egg-cache-$(whoami) +if ! [ -L $link_folder ] +then + rm -Rf "$link_folder" + ln -sfn ${PYTHON_EGG_CACHE}${link_folder} ${link_folder} +fi + +#export HADOOP_USER_NAME=$2 + +function copydb() { + + export HADOOP_USER="dimitris.pierrakos" + export HADOOP_USER_NAME='dimitris.pierrakos' + + db=$1 + FILE=("hive_wf_tmp_"$RANDOM) + hdfs dfs -mkdir hdfs://impala-cluster-mn1.openaire.eu:8020/tmp/$FILE/ + + # change ownership to impala +# hdfs dfs -conf /etc/impala_cluster/hdfs-site.xml -chmod -R 777 /tmp/$FILE/${db}.db + hdfs dfs -conf /etc/impala_cluster/hdfs-site.xml -chmod -R 777 /tmp/$FILE/ + + + # copy the databases from ocean to impala + echo "copying $db" + hadoop distcp -Dmapreduce.map.memory.mb=6144 -pb hdfs://nameservice1/user/hive/warehouse/${db}.db hdfs://impala-cluster-mn1.openaire.eu:8020/tmp/$FILE/ + + hdfs dfs -conf /etc/impala_cluster/hdfs-site.xml -chmod -R 777 /tmp/$FILE/${db}.db + + # drop tables from db + for i in `impala-shell -i impala-cluster-dn1.openaire.eu -d ${db} --delimited -q "show tables"`; + do + `impala-shell -i impala-cluster-dn1.openaire.eu -d ${db} -q "drop table $i;"`; + done + + # drop views from db + for i in `impala-shell -i impala-cluster-dn1.openaire.eu -d ${db} --delimited -q "show tables"`; + do + `impala-shell -i impala-cluster-dn1.openaire.eu -d ${db} -q "drop view $i;"`; + done + + # delete the database + impala-shell -i impala-cluster-dn1.openaire.eu -q "drop database if exists ${db} cascade"; + + # create the databases + impala-shell -i impala-cluster-dn1.openaire.eu -q "create database ${db}"; + + impala-shell -q "INVALIDATE METADATA" + echo "creating schema for ${db}" + for (( k = 0; k < 5; k ++ )); do + for i in `impala-shell -d ${db} --delimited -q "show tables"`; + do + impala-shell -d ${db} --delimited -q "show create table $i"; + done | sed 's/"$/;/' | sed 's/^"//' | sed 's/[[:space:]]\date[[:space:]]/`date`/g' | impala-shell --user $HADOOP_USER_NAME -i impala-cluster-dn1.openaire.eu -c -f - + done + + # load the data from /tmp in the respective tables + echo "copying data in tables and computing stats" + for i in `impala-shell -i impala-cluster-dn1.openaire.eu -d ${db} --delimited -q "show tables"`; + do + impala-shell -i impala-cluster-dn1.openaire.eu -d ${db} -q "load data inpath '/tmp/$FILE/${db}.db/$i' into table $i"; + impala-shell -i impala-cluster-dn1.openaire.eu -d ${db} -q "compute stats $i"; + done + + # deleting the remaining directory from hdfs +hdfs dfs -conf /etc/impala_cluster/hdfs-site.xml -rm -R /tmp/$FILE/${db}.db +} + +MONITOR_DB=$1 +#HADOOP_USER_NAME=$2 + +copydb $MONITOR_DB'_institutions' +copydb $MONITOR_DB + diff --git a/dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/finalizeImpalaCluster.sh b/dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/finalizeImpalaCluster.sh new file mode 100644 index 000000000..a7227e0c8 --- /dev/null +++ b/dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/finalizeImpalaCluster.sh @@ -0,0 +1,29 @@ +export PYTHON_EGG_CACHE=/home/$(whoami)/.python-eggs +export link_folder=/tmp/impala-shell-python-egg-cache-$(whoami) +if ! [ -L $link_folder ] +then + rm -Rf "$link_folder" + ln -sfn ${PYTHON_EGG_CACHE}${link_folder} ${link_folder} +fi + +function createShadowDB() { + SOURCE=$1 + SHADOW=$2 + + # drop views from db + for i in `impala-shell -i impala-cluster-dn1.openaire.eu -d ${SHADOW} --delimited -q "show tables"`; + do + `impala-shell -i impala-cluster-dn1.openaire.eu -d ${SHADOW} -q "drop view $i;"`; + done + + impala-shell -i impala-cluster-dn1.openaire.eu -q "drop database ${SHADOW} CASCADE"; + impala-shell -i impala-cluster-dn1.openaire.eu -q "create database if not exists ${SHADOW}"; +# impala-shell -i impala-cluster-dn1.openaire.eu -d ${SHADOW} -q "show tables" | sed "s/^/drop view if exists ${SHADOW}./" | sed "s/$/;/" | impala-shell -i impala-cluster-dn1.openaire.eu -f - + impala-shell -i impala-cluster-dn1.openaire.eu -d ${SOURCE} -q "show tables" --delimited | sed "s/\(.*\)/create view ${SHADOW}.\1 as select * from ${SOURCE}.\1;/" | impala-shell -i impala-cluster-dn1.openaire.eu -f - +} + +MONITOR_DB=$1 +MONITOR_DB_SHADOW=$2 + +createShadowDB $MONITOR_DB'_institutions' $MONITOR_DB'_institutions_shadow' +createShadowDB $MONITOR_DB $MONITOR_DB'_shadow' diff --git a/dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/monitor.sh b/dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/monitor.sh new file mode 100644 index 000000000..4f1889c9e --- /dev/null +++ b/dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/monitor.sh @@ -0,0 +1,54 @@ +export PYTHON_EGG_CACHE=/home/$(whoami)/.python-eggs +export link_folder=/tmp/impala-shell-python-egg-cache-$(whoami) +if ! [ -L $link_folder ] +then + rm -Rf "$link_folder" + ln -sfn ${PYTHON_EGG_CACHE}${link_folder} ${link_folder} +fi + +export SOURCE=$1 +export TARGET=$2 +export SHADOW=$3 +export SCRIPT_PATH=$4 +export SCRIPT_PATH2=$5 +export SCRIPT_PATH2=$6 + +export HIVE_OPTS="-hiveconf mapred.job.queue.name=analytics -hiveconf hive.spark.client.connect.timeout=120000ms -hiveconf hive.spark.client.server.connect.timeout=300000ms -hiveconf spark.executor.memory=19166291558 -hiveconf spark.yarn.executor.memoryOverhead=3225 -hiveconf spark.driver.memory=11596411699 -hiveconf spark.yarn.driver.memoryOverhead=1228" +export HADOOP_USER_NAME="oozie" + +echo "Getting file from " $4 +hdfs dfs -copyToLocal $4 + +echo "Getting file from " $5 +hdfs dfs -copyToLocal $5 + +echo "Getting file from " $6 +hdfs dfs -copyToLocal $6 + +#update Institutions DB +cat updateMonitorDB_institutions.sql | sed "s/SOURCE/$1/g" | sed "s/TARGET/$2_institutions/g1" > foo +hive $HIVE_OPTS -f foo +cat updateMonitorDB.sql | sed "s/SOURCE/$1/g" | sed "s/TARGET/$2_institutions/g1" > foo +hive $HIVE_OPTS -f foo + +echo "Hive shell finished" + +echo "Updating shadow monitor insitutions database" +hive -e "drop database if exists ${SHADOW}_institutions cascade" +hive -e "create database if not exists ${SHADOW}_institutions" +hive $HIVE_OPTS --database ${2}_institutions -e "show tables" | grep -v WARN | sed "s/\(.*\)/create view ${SHADOW}_institutions.\1 as select * from ${2}_institutions.\1;/" > foo +hive -f foo +echo "Shadow db monitor insitutions ready!" + +#update Monitor DB +cat updateMonitorDBAll.sql | sed "s/SOURCE/$1/g" | sed "s/TARGET/$2/g1" > foo +hive $HIVE_OPTS -f foo + +echo "Hive shell finished" + +echo "Updating shadow monitor database" +hive -e "drop database if exists ${SHADOW} cascade" +hive -e "create database if not exists ${SHADOW}" +hive $HIVE_OPTS --database ${2} -e "show tables" | grep -v WARN | sed "s/\(.*\)/create view ${SHADOW}.\1 as select * from ${2}.\1;/" > foo +hive -f foo +echo "Shadow db monitor insitutions ready!" diff --git a/dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/scripts/updateMonitorDB.sql b/dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/scripts/updateMonitorDB.sql new file mode 100644 index 000000000..248b7e564 --- /dev/null +++ b/dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/scripts/updateMonitorDB.sql @@ -0,0 +1,138 @@ +INSERT INTO TARGET.result select * from TARGET.result_new; +ANALYZE TABLE TARGET.result COMPUTE STATISTICS; + +INSERT INTO TARGET.result_citations select * from SOURCE.result_citations orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.result_citations COMPUTE STATISTICS; + +INSERT INTO TARGET.result_references_oc select * from SOURCE.result_references_oc orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.result_references_oc COMPUTE STATISTICS; + +INSERT INTO TARGET.result_classifications select * from SOURCE.result_classifications orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.result_classifications COMPUTE STATISTICS; + +INSERT INTO TARGET.result_apc select * from SOURCE.result_apc orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.result_apc COMPUTE STATISTICS; + +INSERT INTO TARGET.result_concepts select * from SOURCE.result_concepts orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.result_concepts COMPUTE STATISTICS; + +INSERT INTO TARGET.result_datasources select * from SOURCE.result_datasources orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.result_datasources COMPUTE STATISTICS; + +INSERT INTO TARGET.result_fundercount select * from SOURCE.result_fundercount orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.result_fundercount COMPUTE STATISTICS; + +INSERT INTO TARGET.result_gold select * from SOURCE.result_gold orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.result_gold COMPUTE STATISTICS; + +INSERT INTO TARGET.result_greenoa select * from SOURCE.result_greenoa orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.result_greenoa COMPUTE STATISTICS; + +INSERT INTO TARGET.result_languages select * from SOURCE.result_languages orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.result_languages COMPUTE STATISTICS; + +INSERT INTO TARGET.result_licenses select * from SOURCE.result_licenses orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.result_licenses COMPUTE STATISTICS; + +INSERT INTO TARGET.result_oids select * from SOURCE.result_oids orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.result_oids COMPUTE STATISTICS; + +INSERT INTO TARGET.result_organization select * from SOURCE.result_organization orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.result_organization COMPUTE STATISTICS; + +INSERT INTO TARGET.result_peerreviewed select * from SOURCE.result_peerreviewed orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.result_peerreviewed COMPUTE STATISTICS; + +INSERT INTO TARGET.result_pids select * from SOURCE.result_pids orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.result_pids COMPUTE STATISTICS; + +INSERT INTO TARGET.result_projectcount select * from SOURCE.result_projectcount orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.result_projectcount COMPUTE STATISTICS; + +INSERT INTO TARGET.result_projects select * from SOURCE.result_projects orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.result_projects COMPUTE STATISTICS; + +INSERT INTO TARGET.result_refereed select * from SOURCE.result_refereed orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.result_refereed COMPUTE STATISTICS; + +INSERT INTO TARGET.result_sources select * from SOURCE.result_sources orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.result_sources COMPUTE STATISTICS; + +INSERT INTO TARGET.result_topics select * from SOURCE.result_topics orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.result_topics COMPUTE STATISTICS; + +INSERT INTO TARGET.result_fos select * from SOURCE.result_fos orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.result_fos COMPUTE STATISTICS; + +INSERT INTO TARGET.result_accessroute select * from SOURCE.result_accessroute orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.result_accessroute COMPUTE STATISTICS; + +create or replace view TARGET.foo1 as select * from SOURCE.result_result rr where rr.source in (select id from TARGET.result_new); +create or replace view TARGET.foo2 as select * from SOURCE.result_result rr where rr.target in (select id from TARGET.result_new); +insert into TARGET.result_result select distinct * from (select * from TARGET.foo1 union all select * from TARGET.foo2) foufou; +drop view TARGET.foo1; +drop view TARGET.foo2; +ANALYZE TABLE TARGET.result_result COMPUTE STATISTICS; + + +-- indicators +-- Sprint 1 ---- +INSERT INTO TARGET.indi_pub_green_oa select * from SOURCE.indi_pub_green_oa orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.indi_pub_green_oa COMPUTE STATISTICS; +INSERT INTO TARGET.indi_pub_grey_lit select * from SOURCE.indi_pub_grey_lit orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.indi_pub_grey_lit COMPUTE STATISTICS; +INSERT INTO TARGET.indi_pub_doi_from_crossref select * from SOURCE.indi_pub_doi_from_crossref orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.indi_pub_doi_from_crossref COMPUTE STATISTICS; +-- Sprint 2 ---- +INSERT INTO TARGET.indi_result_has_cc_licence select * from SOURCE.indi_result_has_cc_licence orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.indi_result_has_cc_licence COMPUTE STATISTICS; +INSERT INTO TARGET.indi_result_has_cc_licence_url select * from SOURCE.indi_result_has_cc_licence_url orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.indi_result_has_cc_licence_url COMPUTE STATISTICS; +INSERT INTO TARGET.indi_pub_has_abstract select * from SOURCE.indi_pub_has_abstract orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.indi_pub_has_abstract COMPUTE STATISTICS; +INSERT INTO TARGET.indi_result_with_orcid select * from SOURCE.indi_result_with_orcid orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.indi_result_with_orcid COMPUTE STATISTICS; +---- Sprint 3 ---- +INSERT INTO TARGET.indi_funded_result_with_fundref select * from SOURCE.indi_funded_result_with_fundref orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.indi_funded_result_with_fundref COMPUTE STATISTICS; + +---- Sprint 4 ---- +INSERT INTO TARGET.indi_pub_diamond select * from SOURCE.indi_pub_diamond orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.indi_pub_diamond COMPUTE STATISTICS; +INSERT INTO TARGET.indi_pub_in_transformative select * from SOURCE.indi_pub_in_transformative orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.indi_pub_in_transformative COMPUTE STATISTICS; +INSERT INTO TARGET.indi_pub_closed_other_open select * from SOURCE.indi_pub_closed_other_open orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.indi_pub_closed_other_open COMPUTE STATISTICS; +---- Sprint 5 ---- +INSERT INTO TARGET.indi_result_no_of_copies select * from SOURCE.indi_result_no_of_copies orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.indi_result_no_of_copies COMPUTE STATISTICS; +---- Sprint 6 ---- +INSERT INTO TARGET.indi_pub_hybrid_oa_with_cc select * from SOURCE.indi_pub_hybrid_oa_with_cc orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.indi_pub_hybrid_oa_with_cc COMPUTE STATISTICS; +INSERT INTO TARGET.indi_pub_bronze_oa select * from SOURCE.indi_pub_bronze_oa orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.indi_pub_bronze_oa COMPUTE STATISTICS; +INSERT INTO TARGET.indi_pub_downloads select * from SOURCE.indi_pub_downloads orig where exists (select 1 from TARGET.result_new r where r.id=orig.result_id); +ANALYZE TABLE TARGET.indi_pub_downloads COMPUTE STATISTICS; +INSERT INTO TARGET.indi_pub_downloads_datasource select * from SOURCE.indi_pub_downloads_datasource orig where exists (select 1 from TARGET.result_new r where r.id=orig.result_id); +ANALYZE TABLE TARGET.indi_pub_downloads_datasource COMPUTE STATISTICS; +INSERT INTO TARGET.indi_pub_downloads_year select * from SOURCE.indi_pub_downloads_year orig where exists (select 1 from TARGET.result_new r where r.id=orig.result_id); +ANALYZE TABLE TARGET.indi_pub_downloads_year COMPUTE STATISTICS; +INSERT INTO TARGET.indi_pub_downloads_datasource_year select * from SOURCE.indi_pub_downloads_datasource_year orig where exists (select 1 from TARGET.result_new r where r.id=orig.result_id); +ANALYZE TABLE TARGET.indi_pub_downloads_datasource_year COMPUTE STATISTICS; +---- Sprint 7 ---- +INSERT INTO TARGET.indi_pub_gold_oa select * from SOURCE.indi_pub_gold_oa orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.indi_pub_gold_oa COMPUTE STATISTICS; +INSERT INTO TARGET.indi_pub_hybrid select * from SOURCE.indi_pub_hybrid orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.indi_pub_hybrid COMPUTE STATISTICS; +INSERT INTO TARGET.indi_pub_has_preprint select * from SOURCE.indi_pub_has_preprint orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.indi_pub_has_preprint COMPUTE STATISTICS; +INSERT INTO TARGET.indi_pub_in_subscribed select * from SOURCE.indi_pub_in_subscribed orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.indi_pub_in_subscribed COMPUTE STATISTICS; +INSERT INTO TARGET.indi_result_with_pid select * from SOURCE.indi_result_with_pid orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.indi_result_with_pid COMPUTE STATISTICS; +INSERT INTO TARGET.indi_impact_measures select * from SOURCE.indi_impact_measures orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.indi_impact_measures COMPUTE STATISTICS; +INSERT INTO TARGET.indi_pub_interdisciplinarity select * from SOURCE.indi_pub_interdisciplinarity orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.indi_pub_interdisciplinarity COMPUTE STATISTICS; + +DROP TABLE IF EXISTS TARGET.result_new; \ No newline at end of file diff --git a/dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/scripts/updateMonitorDBAll.sql b/dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/scripts/updateMonitorDBAll.sql new file mode 100644 index 000000000..478e3824e --- /dev/null +++ b/dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/scripts/updateMonitorDBAll.sql @@ -0,0 +1,150 @@ +DROP TABLE IF EXISTS TARGET.result_new; + +create table TARGET.result_new as + select distinct * from ( + select * from SOURCE.result r where exists (select 1 from SOURCE.result_organization ro where ro.id=r.id and ro.organization in ( + 'openorgs____::4d4051b56708688235252f1d8fddb8c1', --Iscte - Instituto Universitário de Lisboa + 'openorgs____::ab4ac74c35fa5dada770cf08e5110fab' -- Universidade Católica Portuguesa + ) )) foo; + +INSERT INTO TARGET.result select * from TARGET.result_new; +ANALYZE TABLE TARGET.result_new COMPUTE STATISTICS; + +INSERT INTO TARGET.result select * from TARGET.result_new; +ANALYZE TABLE TARGET.result COMPUTE STATISTICS; + +INSERT INTO TARGET.result_citations select * from SOURCE.result_citations orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.result_citations COMPUTE STATISTICS; + +INSERT INTO TARGET.result_references_oc select * from SOURCE.result_references_oc orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.result_references_oc COMPUTE STATISTICS; + +INSERT INTO TARGET.result_classifications select * from SOURCE.result_classifications orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.result_classifications COMPUTE STATISTICS; + +INSERT INTO TARGET.result_apc select * from SOURCE.result_apc orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.result_apc COMPUTE STATISTICS; + +INSERT INTO TARGET.result_concepts select * from SOURCE.result_concepts orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.result_concepts COMPUTE STATISTICS; + +INSERT INTO TARGET.result_datasources select * from SOURCE.result_datasources orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.result_datasources COMPUTE STATISTICS; + +INSERT INTO TARGET.result_fundercount select * from SOURCE.result_fundercount orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.result_fundercount COMPUTE STATISTICS; + +INSERT INTO TARGET.result_gold select * from SOURCE.result_gold orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.result_gold COMPUTE STATISTICS; + +INSERT INTO TARGET.result_greenoa select * from SOURCE.result_greenoa orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.result_greenoa COMPUTE STATISTICS; + +INSERT INTO TARGET.result_languages select * from SOURCE.result_languages orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.result_languages COMPUTE STATISTICS; + +INSERT INTO TARGET.result_licenses select * from SOURCE.result_licenses orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.result_licenses COMPUTE STATISTICS; + +INSERT INTO TARGET.result_oids select * from SOURCE.result_oids orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.result_oids COMPUTE STATISTICS; + +INSERT INTO TARGET.result_organization select * from SOURCE.result_organization orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.result_organization COMPUTE STATISTICS; + +INSERT INTO TARGET.result_peerreviewed select * from SOURCE.result_peerreviewed orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.result_peerreviewed COMPUTE STATISTICS; + +INSERT INTO TARGET.result_pids select * from SOURCE.result_pids orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.result_pids COMPUTE STATISTICS; + +INSERT INTO TARGET.result_projectcount select * from SOURCE.result_projectcount orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.result_projectcount COMPUTE STATISTICS; + +INSERT INTO TARGET.result_projects select * from SOURCE.result_projects orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.result_projects COMPUTE STATISTICS; + +INSERT INTO TARGET.result_refereed select * from SOURCE.result_refereed orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.result_refereed COMPUTE STATISTICS; + +INSERT INTO TARGET.result_sources select * from SOURCE.result_sources orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.result_sources COMPUTE STATISTICS; + +INSERT INTO TARGET.result_topics select * from SOURCE.result_topics orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.result_topics COMPUTE STATISTICS; + +INSERT INTO TARGET.result_fos select * from SOURCE.result_fos orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.result_fos COMPUTE STATISTICS; + +INSERT INTO TARGET.result_accessroute select * from SOURCE.result_accessroute orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.result_accessroute COMPUTE STATISTICS; + +create or replace view TARGET.foo1 as select * from SOURCE.result_result rr where rr.source in (select id from TARGET.result_new); +create or replace view TARGET.foo2 as select * from SOURCE.result_result rr where rr.target in (select id from TARGET.result_new); +insert into TARGET.result_result select distinct * from (select * from TARGET.foo1 union all select * from TARGET.foo2) foufou; +drop view TARGET.foo1; +drop view TARGET.foo2; +ANALYZE TABLE TARGET.result_result COMPUTE STATISTICS; + + +-- indicators +-- Sprint 1 ---- +INSERT INTO TARGET.indi_pub_green_oa select * from SOURCE.indi_pub_green_oa orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.indi_pub_green_oa COMPUTE STATISTICS; +INSERT INTO TARGET.indi_pub_grey_lit select * from SOURCE.indi_pub_grey_lit orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.indi_pub_grey_lit COMPUTE STATISTICS; +INSERT INTO TARGET.indi_pub_doi_from_crossref select * from SOURCE.indi_pub_doi_from_crossref orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.indi_pub_doi_from_crossref COMPUTE STATISTICS; +-- Sprint 2 ---- +INSERT INTO TARGET.indi_result_has_cc_licence select * from SOURCE.indi_result_has_cc_licence orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.indi_result_has_cc_licence COMPUTE STATISTICS; +INSERT INTO TARGET.indi_result_has_cc_licence_url select * from SOURCE.indi_result_has_cc_licence_url orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.indi_result_has_cc_licence_url COMPUTE STATISTICS; +INSERT INTO TARGET.indi_pub_has_abstract select * from SOURCE.indi_pub_has_abstract orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.indi_pub_has_abstract COMPUTE STATISTICS; +INSERT INTO TARGET.indi_result_with_orcid select * from SOURCE.indi_result_with_orcid orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.indi_result_with_orcid COMPUTE STATISTICS; +---- Sprint 3 ---- +INSERT INTO TARGET.indi_funded_result_with_fundref select * from SOURCE.indi_funded_result_with_fundref orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.indi_funded_result_with_fundref COMPUTE STATISTICS; + +---- Sprint 4 ---- +INSERT INTO TARGET.indi_pub_diamond select * from SOURCE.indi_pub_diamond orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.indi_pub_diamond COMPUTE STATISTICS; +INSERT INTO TARGET.indi_pub_in_transformative select * from SOURCE.indi_pub_in_transformative orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.indi_pub_in_transformative COMPUTE STATISTICS; +INSERT INTO TARGET.indi_pub_closed_other_open select * from SOURCE.indi_pub_closed_other_open orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.indi_pub_closed_other_open COMPUTE STATISTICS; +---- Sprint 5 ---- +INSERT INTO TARGET.indi_result_no_of_copies select * from SOURCE.indi_result_no_of_copies orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.indi_result_no_of_copies COMPUTE STATISTICS; +---- Sprint 6 ---- +INSERT INTO TARGET.indi_pub_hybrid_oa_with_cc select * from SOURCE.indi_pub_hybrid_oa_with_cc orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.indi_pub_hybrid_oa_with_cc COMPUTE STATISTICS; +INSERT INTO TARGET.indi_pub_bronze_oa select * from SOURCE.indi_pub_bronze_oa orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.indi_pub_bronze_oa COMPUTE STATISTICS; +INSERT INTO TARGET.indi_pub_downloads select * from SOURCE.indi_pub_downloads orig where exists (select 1 from TARGET.result_new r where r.id=orig.result_id); +ANALYZE TABLE TARGET.indi_pub_downloads COMPUTE STATISTICS; +INSERT INTO TARGET.indi_pub_downloads_datasource select * from SOURCE.indi_pub_downloads_datasource orig where exists (select 1 from TARGET.result_new r where r.id=orig.result_id); +ANALYZE TABLE TARGET.indi_pub_downloads_datasource COMPUTE STATISTICS; +INSERT INTO TARGET.indi_pub_downloads_year select * from SOURCE.indi_pub_downloads_year orig where exists (select 1 from TARGET.result_new r where r.id=orig.result_id); +ANALYZE TABLE TARGET.indi_pub_downloads_year COMPUTE STATISTICS; +INSERT INTO TARGET.indi_pub_downloads_datasource_year select * from SOURCE.indi_pub_downloads_datasource_year orig where exists (select 1 from TARGET.result_new r where r.id=orig.result_id); +ANALYZE TABLE TARGET.indi_pub_downloads_datasource_year COMPUTE STATISTICS; +---- Sprint 7 ---- +INSERT INTO TARGET.indi_pub_gold_oa select * from SOURCE.indi_pub_gold_oa orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.indi_pub_gold_oa COMPUTE STATISTICS; +INSERT INTO TARGET.indi_pub_hybrid select * from SOURCE.indi_pub_hybrid orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.indi_pub_hybrid COMPUTE STATISTICS; +INSERT INTO TARGET.indi_pub_has_preprint select * from SOURCE.indi_pub_has_preprint orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.indi_pub_has_preprint COMPUTE STATISTICS; +INSERT INTO TARGET.indi_pub_in_subscribed select * from SOURCE.indi_pub_in_subscribed orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.indi_pub_in_subscribed COMPUTE STATISTICS; +INSERT INTO TARGET.indi_result_with_pid select * from SOURCE.indi_result_with_pid orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.indi_result_with_pid COMPUTE STATISTICS; +INSERT INTO TARGET.indi_impact_measures select * from SOURCE.indi_impact_measures orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.indi_impact_measures COMPUTE STATISTICS; +INSERT INTO TARGET.indi_pub_interdisciplinarity select * from SOURCE.indi_pub_interdisciplinarity orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); +ANALYZE TABLE TARGET.indi_pub_interdisciplinarity COMPUTE STATISTICS; + +DROP TABLE IF EXISTS TARGET.result_new; diff --git a/dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/scripts/updateMonitorDB_institutions.sql b/dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/scripts/updateMonitorDB_institutions.sql new file mode 100644 index 000000000..236f3733f --- /dev/null +++ b/dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/scripts/updateMonitorDB_institutions.sql @@ -0,0 +1,12 @@ +DROP TABLE IF EXISTS TARGET.result_new; + +create table TARGET.result_new as + select distinct * from ( + select * from SOURCE.result r where exists (select 1 from SOURCE.result_organization ro where ro.id=r.id and ro.organization in ( + 'openorgs____::4d4051b56708688235252f1d8fddb8c1', --Iscte - Instituto Universitário de Lisboa + 'openorgs____::ab4ac74c35fa5dada770cf08e5110fab' -- Universidade Católica Portuguesa + ) )) foo; + +INSERT INTO TARGET.result select * from TARGET.result_new; +ANALYZE TABLE TARGET.result_new COMPUTE STATISTICS; + diff --git a/dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/workflow.xml b/dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/workflow.xml new file mode 100644 index 000000000..7b999a843 --- /dev/null +++ b/dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/workflow.xml @@ -0,0 +1,110 @@ + + + + stats_db_name + the target stats database name + + + monitor_db_name + the target monitor db name + + + monitor_db_shadow_name + the name of the shadow monitor db + + + hive_metastore_uris + hive server metastore URIs + + + hive_jdbc_url + hive server jdbc url + + + hive_timeout + the time period, in seconds, after which Hive fails a transaction if a Hive client has not sent a hearbeat. The default value is 300 seconds. + + + hadoop_user_name + user name of the wf owner + + + + + ${jobTracker} + ${nameNode} + + + hive.metastore.uris + ${hive_metastore_uris} + + + hive.txn.timeout + ${hive_timeout} + + + mapred.job.queue.name + analytics + + + + + + + + ${wf:conf('resumeFrom') eq 'Step1-updateMonitorDB'} + ${wf:conf('resumeFrom') eq 'Step2-copyDataToImpalaCluster'} + ${wf:conf('resumeFrom') eq 'Step3-finalizeImpalaCluster'} + + + + + + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + + + + ${jobTracker} + ${nameNode} + monitor.sh + ${stats_db_name} + ${monitor_db_name} + ${monitor_db_shadow_name} + ${wf:appPath()}/scripts/updateMonitorDB_institutions.sql + ${wf:appPath()}/scripts/updateMonitorDB.sql + ${wf:appPath()}/scripts/updateMonitorDBAll.sql + monitor.sh + + + + + + + + ${jobTracker} + ${nameNode} + copyDataToImpalaCluster.sh + ${monitor_db_name} + ${hadoop_user_name} + copyDataToImpalaCluster.sh + + + + + + + + ${jobTracker} + ${nameNode} + finalizeImpalaCluster.sh + ${monitor_db_name} + ${monitor_db_shadow_name} + finalizeImpalaCluster.sh + + + + + + + diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/copyDataToImpalaCluster.sh b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/copyDataToImpalaCluster.sh index 87294f6e9..431978997 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/copyDataToImpalaCluster.sh +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/copyDataToImpalaCluster.sh @@ -24,13 +24,13 @@ function copydb() { # drop tables from db for i in `impala-shell --user $HADOOP_USER_NAME -i impala-cluster-dn1.openaire.eu -d ${db} --delimited -q "show tables"`; do - `impala-shell -i impala-cluster-dn1.openaire.eu -d -d ${db} -q "drop table $i;"`; + `impala-shell -i impala-cluster-dn1.openaire.eu -d ${db} -q "drop table $i;"`; done # drop views from db for i in `impala-shell --user $HADOOP_USER_NAME -i impala-cluster-dn1.openaire.eu -d ${db} --delimited -q "show tables"`; do - `impala-shell -i impala-cluster-dn1.openaire.eu -d -d ${db} -q "drop view $i;"`; + `impala-shell -i impala-cluster-dn1.openaire.eu -d ${db} -q "drop view $i;"`; done # delete the database @@ -82,12 +82,12 @@ copydb $USAGE_STATS_DB copydb $PROD_USAGE_STATS_DB copydb $EXT_DB copydb $STATS_DB -#copydb $MONITOR_DB +copydb $MONITOR_DB copydb $OBSERVATORY_DB copydb $MONITOR_DB'_funded' copydb $MONITOR_DB'_institutions' -copydb $MONITOR_DB'_RIs_tail' +copydb $MONITOR_DB'_ris_tail' contexts="knowmad::other dh-ch::other enermaps::other gotriple::other neanias-atmospheric::other rural-digital-europe::other covid-19::other aurora::other neanias-space::other north-america-studies::other north-american-studies::other eutopia::other" for i in ${contexts} diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/finalizeImpalaCluster.sh b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/finalizeImpalaCluster.sh index 857635b6c..86a93216c 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/finalizeImpalaCluster.sh +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/finalizeImpalaCluster.sh @@ -13,7 +13,7 @@ function createShadowDB() { # drop views from db for i in `impala-shell -i impala-cluster-dn1.openaire.eu -d ${SHADOW} --delimited -q "show tables"`; do - `impala-shell -i impala-cluster-dn1.openaire.eu -d -d ${SHADOW} -q "drop view $i;"`; + `impala-shell -i impala-cluster-dn1.openaire.eu -d ${SHADOW} -q "drop view $i;"`; done impala-shell -i impala-cluster-dn1.openaire.eu -q "drop database ${SHADOW} CASCADE"; @@ -36,13 +36,13 @@ createShadowDB $MONITOR_DB $MONITOR_DB_SHADOW createShadowDB $OBSERVATORY_DB $OBSERVATORY_DB_SHADOW createShadowDB USAGE_STATS_DB USAGE_STATS_DB_SHADOW -createShadowDB $MONITOR_DB'_funded' $MONITOR_DB'_funded_shadow' -createShadowDB $MONITOR_DB'_institutions' $MONITOR_DB'_institutions_shadow' -createShadowDB $MONITOR_DB'_RIs_tail' $MONITOR_DB'_RIs_tail_shadow' +createShadowDB $MONITOR_DB'_funded' $MONITOR_DB_SHADOW'_shadow_funded' +createShadowDB $MONITOR_DB'_institutions' $MONITOR_DB_SHADOW'_shadow_institutions' +createShadowDB $MONITOR_DB'_ris_tail' $MONITOR_DB_SHADOW'_shadow_ris_tail' contexts="knowmad::other dh-ch::other enermaps::other gotriple::other neanias-atmospheric::other rural-digital-europe::other covid-19::other aurora::other neanias-space::other north-america-studies::other north-american-studies::other eutopia::other" for i in ${contexts} do tmp=`echo "$i" | sed 's/'-'/'_'/g' | sed 's/'::'/'_'/g'` - createShadowDB ${MONITOR_DB}'_'${tmp} ${MONITOR_DB}'_'${tmp}'_shadow' + createShadowDB ${MONITOR_DB}'_'${tmp} ${MONITOR_DB_SHADOW}'_shadow_'${tmp} done \ No newline at end of file diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/monitor.sh b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/monitor.sh index 08f4c9232..014b19c6c 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/monitor.sh +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/monitor.sh @@ -14,6 +14,7 @@ export SCRIPT_PATH2=$5 export SCRIPT_PATH3=$6 export SCRIPT_PATH4=$7 export SCRIPT_PATH5=$8 +export SCRIPT_PATH6=$9 export HIVE_OPTS="-hiveconf mapred.job.queue.name=analytics -hiveconf hive.spark.client.connect.timeout=120000ms -hiveconf hive.spark.client.server.connect.timeout=300000ms -hiveconf spark.executor.memory=19166291558 -hiveconf spark.yarn.executor.memoryOverhead=3225 -hiveconf spark.driver.memory=11596411699 -hiveconf spark.yarn.driver.memoryOverhead=1228" export HADOOP_USER_NAME="oozie" @@ -33,12 +34,19 @@ hdfs dfs -copyToLocal $7 echo "Getting file from " $8 hdfs dfs -copyToLocal $8 +echo "Getting file from " $9 +hdfs dfs -copyToLocal $9 + + echo "Creating monitor database" +cat step20-createMonitorDBAll.sql | sed "s/SOURCE/openaire_prod_stats_20230707/g" | sed "s/TARGET/openaire_prod_stats_monitor_20230707/g1" > foo +hive $HIVE_OPTS -f foo + cat step20-createMonitorDB_funded.sql | sed "s/SOURCE/$1/g" | sed "s/TARGET/$2_funded/g1" > foo hive $HIVE_OPTS -f foo cat step20-createMonitorDB.sql | sed "s/SOURCE/$1/g" | sed "s/TARGET/$2_funded/g1" > foo hive $HIVE_OPTS -f foo -# + cat step20-createMonitorDB_institutions.sql | sed "s/SOURCE/$1/g" | sed "s/TARGET/$2_institutions/g1" > foo hive $HIVE_OPTS -f foo cat step20-createMonitorDB.sql | sed "s/SOURCE/$1/g" | sed "s/TARGET/$2_institutions/g1" > foo @@ -56,14 +64,20 @@ do hive $HIVE_OPTS -f foo done - -cat step20-createMonitorDB_RIs_tail.sql | sed "s/SOURCE/$1/g" | sed "s/TARGET/$2_RIs_tail/g1" | sed "s/CONTEXTS/\"'knowmad::other','dh-ch::other', 'enermaps::other', 'gotriple::other', 'neanias-atmospheric::other', 'rural-digital-europe::other', 'covid-19::other', 'aurora::other', 'neanias-space::other', 'north-america-studies::other', 'north-american-studies::other', 'eutopia::other'\"/g" > foo +cat step20-createMonitorDB_RIs_tail.sql | sed "s/SOURCE/$1/g" | sed "s/TARGET/$2_ris_tail/g1" | sed "s/CONTEXTS/\"'knowmad::other','dh-ch::other', 'enermaps::other', 'gotriple::other', 'neanias-atmospheric::other', 'rural-digital-europe::other', 'covid-19::other', 'aurora::other', 'neanias-space::other', 'north-america-studies::other', 'north-american-studies::other', 'eutopia::other'\"/g" > foo hive $HIVE_OPTS -f foo -cat step20-createMonitorDB.sql | sed "s/SOURCE/$1/g" | sed "s/TARGET/$2_RIs_tail/g1" > foo +cat step20-createMonitorDB.sql | sed "s/SOURCE/$1/g" | sed "s/TARGET/$2_ris_tail/g1" > foo hive $HIVE_OPTS -f foo echo "Hive shell finished" +echo "Updating shadow monitor all database" +hive -e "drop database if exists ${SHADOW} cascade" +hive -e "create database if not exists ${SHADOW}" +hive $HIVE_OPTS --database ${2} -e "show tables" | grep -v WARN | sed "s/\(.*\)/create view ${SHADOW}.\1 as select * from ${2}.\1;/" > foo +hive -f foo +echo "Updated shadow monitor all database" + echo "Updating shadow monitor funded database" hive -e "drop database if exists ${SHADOW}_funded cascade" hive -e "create database if not exists ${SHADOW}_funded" diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step15.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step15.sql index 132cb482e..75e8b001b 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step15.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step15.sql @@ -37,8 +37,17 @@ select * from ${stats_db_name}.otherresearchproduct_refereed; create table if not exists ${stats_db_name}.indi_impact_measures STORED AS PARQUET as select substr(id, 4) as id, measures_ids.id impactmetric, cast(measures_ids.unit.value[0] as double) score, -cast(measures_ids.unit.value[0] as decimal(6,3)) score_dec, measures_ids.unit.value[1] class +cast(measures_ids.unit.value[0] as decimal(6,3)) score_dec, measures_ids.unit.value[1] impact_class from ${openaire_db_name}.result lateral view explode(measures) measures as measures_ids where measures_ids.id!='views' and measures_ids.id!='downloads'; ANALYZE TABLE indi_impact_measures COMPUTE STATISTICS; + +create table if not exists ${stats_db_name}.result_apc_affiliations STORED AS PARQUET as +select distinct substr(rel.target,4) id, substr(rel.source,4) organization, o.legalname.value name, +cast(rel.properties[0].value as double) apc_amount, +rel.properties[1].value apc_currency +from ${openaire_db_name}.relation rel +join ${openaire_db_name}.organization o on o.id=rel.source +join ${openaire_db_name}.result r on r.id=rel.target +where rel.subreltype = 'affiliation' and rel.datainfo.deletedbyinference = false and size(rel.properties) > 0; diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step16-createIndicatorsTables.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step16-createIndicatorsTables.sql index 36b34cc3c..57c381875 100755 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step16-createIndicatorsTables.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step16-createIndicatorsTables.sql @@ -1,88 +1,88 @@ -- Sprint 1 ---- -create table if not exists indi_pub_green_oa stored as parquet as +create table if not exists ${stats_db_name}.indi_pub_green_oa stored as parquet as select distinct p.id, coalesce(green_oa, 0) as green_oa -from publication p +from ${stats_db_name}.publication p left outer join ( select p.id, 1 as green_oa - from publication p - join result_instance ri on ri.id = p.id - join datasource on datasource.id = ri.hostedby + from ${stats_db_name}.publication p + join ${stats_db_name}.result_instance ri on ri.id = p.id + join ${stats_db_name}.datasource on datasource.id = ri.hostedby where datasource.type like '%Repository%' and (ri.accessright = 'Open Access' or ri.accessright = 'Embargo' or ri.accessright = 'Open Source')) tmp on p.id= tmp.id; -ANALYZE TABLE indi_pub_green_oa COMPUTE STATISTICS; +--ANALYZE TABLE ${stats_db_name}.indi_pub_green_oa COMPUTE STATISTICS; -create table if not exists indi_pub_grey_lit stored as parquet as +create table if not exists ${stats_db_name}.indi_pub_grey_lit stored as parquet as select distinct p.id, coalesce(grey_lit, 0) as grey_lit -from publication p +from ${stats_db_name}.publication p left outer join ( select p.id, 1 as grey_lit - from publication p - join result_classifications rt on rt.id = p.id + from ${stats_db_name}.publication p + join ${stats_db_name}.result_classifications rt on rt.id = p.id where rt.type not in ('Article','Part of book or chapter of book','Book','Doctoral thesis','Master thesis','Data Paper', 'Thesis', 'Bachelor thesis', 'Conference object') and - not exists (select 1 from result_classifications rc where type ='Other literature type' + not exists (select 1 from ${stats_db_name}.result_classifications rc where type ='Other literature type' and rc.id=p.id)) tmp on p.id=tmp.id; -ANALYZE TABLE indi_pub_grey_lit COMPUTE STATISTICS; +--ANALYZE TABLE ${stats_db_name}.indi_pub_grey_lit COMPUTE STATISTICS; -create table if not exists indi_pub_doi_from_crossref stored as parquet as +create table if not exists ${stats_db_name}.indi_pub_doi_from_crossref stored as parquet as select distinct p.id, coalesce(doi_from_crossref, 0) as doi_from_crossref -from publication p +from ${stats_db_name}.publication p left outer join - (select ri.id, 1 as doi_from_crossref from result_instance ri - join datasource d on d.id = ri.collectedfrom + (select ri.id, 1 as doi_from_crossref from ${stats_db_name}.result_instance ri + join ${stats_db_name}.datasource d on d.id = ri.collectedfrom where pidtype='Digital Object Identifier' and d.name ='Crossref') tmp on tmp.id=p.id; -ANALYZE TABLE indi_pub_doi_from_crossref COMPUTE STATISTICS; +--ANALYZE TABLE ${stats_db_name}.indi_pub_doi_from_crossref COMPUTE STATISTICS; -- Sprint 2 ---- -create table if not exists indi_result_has_cc_licence stored as parquet as +create table if not exists ${stats_db_name}.indi_result_has_cc_licence stored as parquet as select distinct r.id, (case when lic='' or lic is null then 0 else 1 end) as has_cc_license -from result r - left outer join (select r.id, license.type as lic from result r - join result_licenses as license on license.id = r.id +from ${stats_db_name}.result r +left outer join (select r.id, license.type as lic from ${stats_db_name}.result r + join ${stats_db_name}.result_licenses as license on license.id = r.id where lower(license.type) LIKE '%creativecommons.org%' OR lower(license.type) LIKE '%cc-%') tmp on r.id= tmp.id; -ANALYZE TABLE indi_result_has_cc_licence COMPUTE STATISTICS; +--ANALYZE TABLE ${stats_db_name}.indi_result_has_cc_licence COMPUTE STATISTICS; -create table if not exists indi_result_has_cc_licence_url stored as parquet as +create table if not exists ${stats_db_name}.indi_result_has_cc_licence_url stored as parquet as select distinct r.id, case when lic_host='' or lic_host is null then 0 else 1 end as has_cc_license_url -from result r +from ${stats_db_name}.result r left outer join (select r.id, lower(parse_url(license.type, "HOST")) as lic_host - from result r - join result_licenses as license on license.id = r.id + from ${stats_db_name}.result r + join ${stats_db_name}.result_licenses as license on license.id = r.id WHERE lower(parse_url(license.type, "HOST")) = "creativecommons.org") tmp on r.id= tmp.id; -ANALYZE TABLE indi_result_has_cc_licence_url COMPUTE STATISTICS; +--ANALYZE TABLE ${stats_db_name}.indi_result_has_cc_licence_url COMPUTE STATISTICS; -create table if not exists indi_pub_has_abstract stored as parquet as +create table if not exists ${stats_db_name}.indi_pub_has_abstract stored as parquet as select distinct publication.id, cast(coalesce(abstract, true) as int) has_abstract -from publication; +from ${stats_db_name}.publication; -ANALYZE TABLE indi_pub_has_abstract COMPUTE STATISTICS; +--ANALYZE TABLE ${stats_db_name}.indi_pub_has_abstract COMPUTE STATISTICS; -create table if not exists indi_result_with_orcid stored as parquet as +create table if not exists ${stats_db_name}.indi_result_with_orcid stored as parquet as select distinct r.id, coalesce(has_orcid, 0) as has_orcid -from result r - left outer join (select id, 1 as has_orcid from result_orcid) tmp +from ${stats_db_name}.result r + left outer join (select id, 1 as has_orcid from ${stats_db_name}.result_orcid) tmp on r.id= tmp.id; -ANALYZE TABLE indi_result_with_orcid COMPUTE STATISTICS; +--ANALYZE TABLE ${stats_db_name}.indi_result_with_orcid COMPUTE STATISTICS; ---- Sprint 3 ---- -create table if not exists indi_funded_result_with_fundref stored as parquet as +create table if not exists ${stats_db_name}.indi_funded_result_with_fundref stored as parquet as select distinct r.result as id, coalesce(fundref, 0) as fundref -from project_results r - left outer join (select distinct result, 1 as fundref from project_results +from ${stats_db_name}.project_results r + left outer join (select distinct result, 1 as fundref from ${stats_db_name}.project_results where provenance='Harvested') tmp on r.result= tmp.result; -ANALYZE TABLE indi_funded_result_with_fundref COMPUTE STATISTICS; +--ANALYZE TABLE ${stats_db_name}.indi_funded_result_with_fundref COMPUTE STATISTICS; -- create table indi_result_org_collab stored as parquet as -- select o1.organization org1, o2.organization org2, count(distinct o1.id) as collaborations @@ -92,68 +92,68 @@ ANALYZE TABLE indi_funded_result_with_fundref COMPUTE STATISTICS; -- -- compute stats indi_result_org_collab; -- -create TEMPORARY TABLE tmp AS SELECT ro.organization organization, ro.id, o.name from result_organization ro -join organization o on o.id=ro.organization where o.name is not null; +create TEMPORARY TABLE ${stats_db_name}.tmp AS SELECT ro.organization organization, ro.id, o.name from ${stats_db_name}.result_organization ro +join ${stats_db_name}.organization o on o.id=ro.organization where o.name is not null; -create table if not exists indi_result_org_collab stored as parquet as +create table if not exists ${stats_db_name}.indi_result_org_collab stored as parquet as select o1.organization org1, o1.name org1name1, o2.organization org2, o2.name org2name2, count(o1.id) as collaborations -from tmp as o1 -join tmp as o2 where o1.id=o2.id and o1.organization!=o2.organization and o1.name!=o2.name +from ${stats_db_name}.tmp as o1 +join ${stats_db_name}.tmp as o2 where o1.id=o2.id and o1.organization!=o2.organization and o1.name!=o2.name group by o1.organization, o2.organization, o1.name, o2.name; -drop table tmp purge; +drop table ${stats_db_name}.tmp purge; -ANALYZE TABLE indi_result_org_collab COMPUTE STATISTICS; +--ANALYZE TABLE ${stats_db_name}.indi_result_org_collab COMPUTE STATISTICS; -create TEMPORARY TABLE tmp AS -select distinct ro.organization organization, ro.id, o.name, o.country from result_organization ro -join organization o on o.id=ro.organization where country <> 'UNKNOWN' and o.name is not null; +create TEMPORARY TABLE ${stats_db_name}.tmp AS +select distinct ro.organization organization, ro.id, o.name, o.country from ${stats_db_name}.result_organization ro +join ${stats_db_name}.organization o on o.id=ro.organization where country <> 'UNKNOWN' and o.name is not null; -create table if not exists indi_result_org_country_collab stored as parquet as +create table if not exists ${stats_db_name}.indi_result_org_country_collab stored as parquet as select o1.organization org1,o1.name org1name1, o2.country country2, count(o1.id) as collaborations -from tmp as o1 join tmp as o2 on o1.id=o2.id +from ${stats_db_name}.tmp as o1 join ${stats_db_name}.tmp as o2 on o1.id=o2.id where o1.id=o2.id and o1.country!=o2.country group by o1.organization, o1.id, o1.name, o2.country; -drop table tmp purge; +drop table ${stats_db_name}.tmp purge; -ANALYZE TABLE indi_result_org_country_collab COMPUTE STATISTICS; +--ANALYZE TABLE ${stats_db_name}.indi_result_org_country_collab COMPUTE STATISTICS; -create TEMPORARY TABLE tmp AS -select o.id organization, o.name, ro.project as project from organization o - join organization_projects ro on o.id=ro.id where o.name is not null; +create TEMPORARY TABLE ${stats_db_name}.tmp AS +select o.id organization, o.name, ro.project as project from ${stats_db_name}.organization o + join ${stats_db_name}.organization_projects ro on o.id=ro.id where o.name is not null; -create table if not exists indi_project_collab_org stored as parquet as +create table if not exists ${stats_db_name}.indi_project_collab_org stored as parquet as select o1.organization org1,o1.name orgname1, o2.organization org2, o2.name orgname2, count(distinct o1.project) as collaborations -from tmp as o1 - join tmp as o2 on o1.project=o2.project +from ${stats_db_name}.tmp as o1 + join ${stats_db_name}.tmp as o2 on o1.project=o2.project where o1.organization<>o2.organization and o1.name<>o2.name group by o1.name,o2.name, o1.organization, o2.organization; -drop table tmp purge; +drop table ${stats_db_name}.tmp purge; -ANALYZE TABLE indi_project_collab_org COMPUTE STATISTICS; +--ANALYZE TABLE ${stats_db_name}.indi_project_collab_org COMPUTE STATISTICS; -create TEMPORARY TABLE tmp AS -select o.id organization, o.name, o.country , ro.project as project from organization o - join organization_projects ro on o.id=ro.id +create TEMPORARY TABLE ${stats_db_name}.tmp AS +select o.id organization, o.name, o.country , ro.project as project from ${stats_db_name}.organization o + join ${stats_db_name}.organization_projects ro on o.id=ro.id and o.country <> 'UNKNOWN' and o.name is not null; -create table if not exists indi_project_collab_org_country stored as parquet as +create table if not exists ${stats_db_name}.indi_project_collab_org_country stored as parquet as select o1.organization org1,o1.name org1name, o2.country country2, count(distinct o1.project) as collaborations -from tmp as o1 - join tmp as o2 on o1.project=o2.project +from ${stats_db_name}.tmp as o1 + join ${stats_db_name}.tmp as o2 on o1.project=o2.project where o1.organization<>o2.organization and o1.country<>o2.country group by o1.organization, o2.country, o1.name; -drop table tmp purge; +drop table ${stats_db_name}.tmp purge; -ANALYZE TABLE indi_project_collab_org_country COMPUTE STATISTICS; +--ANALYZE TABLE ${stats_db_name}.indi_project_collab_org_country COMPUTE STATISTICS; -create table if not exists indi_funder_country_collab stored as parquet as - with tmp as (select funder, project, country from organization_projects op - join organization o on o.id=op.id - join project p on p.id=op.project +create table if not exists ${stats_db_name}.indi_funder_country_collab stored as parquet as + with tmp as (select funder, project, country from ${stats_db_name}.organization_projects op + join ${stats_db_name}.organization o on o.id=op.id + join ${stats_db_name}.project p on p.id=op.project where country <> 'UNKNOWN') select f1.funder, f1.country as country1, f2.country as country2, count(distinct f1.project) as collaborations from tmp as f1 @@ -161,104 +161,104 @@ from tmp as f1 where f1.country<>f2.country group by f1.funder, f2.country, f1.country; -ANALYZE TABLE indi_funder_country_collab COMPUTE STATISTICS; +--ANALYZE TABLE ${stats_db_name}.indi_funder_country_collab COMPUTE STATISTICS; -create TEMPORARY TABLE tmp AS -select distinct country, ro.id as result from organization o - join result_organization ro on o.id=ro.organization +create TEMPORARY TABLE ${stats_db_name}.tmp AS +select distinct country, ro.id as result from ${stats_db_name}.organization o + join ${stats_db_name}.result_organization ro on o.id=ro.organization where country <> 'UNKNOWN' and o.name is not null; -create table if not exists indi_result_country_collab stored as parquet as +create table if not exists ${stats_db_name}.indi_result_country_collab stored as parquet as select o1.country country1, o2.country country2, count(o1.result) as collaborations -from tmp as o1 - join tmp as o2 on o1.result=o2.result +from ${stats_db_name}.tmp as o1 + join ${stats_db_name}.tmp as o2 on o1.result=o2.result where o1.country<>o2.country group by o1.country, o2.country; -drop table tmp purge; +drop table ${stats_db_name}.tmp purge; -ANALYZE TABLE indi_result_country_collab COMPUTE STATISTICS; +--ANALYZE TABLE ${stats_db_name}.indi_result_country_collab COMPUTE STATISTICS; ---- Sprint 4 ---- -create table if not exists indi_pub_diamond stored as parquet as +create table if not exists ${stats_db_name}.indi_pub_diamond stored as parquet as select distinct pd.id, coalesce(in_diamond_journal, 0) as in_diamond_journal -from publication_datasources pd +from ${stats_db_name}.publication_datasources pd left outer join ( - select pd.id, 1 as in_diamond_journal from publication_datasources pd - join datasource d on d.id=pd.datasource + select pd.id, 1 as in_diamond_journal from ${stats_db_name}.publication_datasources pd + join ${stats_db_name}.datasource d on d.id=pd.datasource join STATS_EXT.plan_s_jn ps where (ps.issn_print=d.issn_printed and ps.issn_online=d.issn_online) and (ps.journal_is_in_doaj=true or ps.journal_is_oa=true) and ps.has_apc=false) tmp on pd.id=tmp.id; -ANALYZE TABLE indi_pub_diamond COMPUTE STATISTICS; +----ANALYZE TABLE ${stats_db_name}.indi_pub_diamond COMPUTE STATISTICS; -create table if not exists indi_pub_in_transformative stored as parquet as +create table if not exists ${stats_db_name}.indi_pub_in_transformative stored as parquet as select distinct pd.id, coalesce(is_transformative, 0) as is_transformative -from publication pd +from ${stats_db_name}.publication pd left outer join ( - select pd.id, 1 as is_transformative from publication_datasources pd - join datasource d on d.id=pd.datasource + select pd.id, 1 as is_transformative from ${stats_db_name}.publication_datasources pd + join ${stats_db_name}.datasource d on d.id=pd.datasource join STATS_EXT.plan_s_jn ps where (ps.issn_print=d.issn_printed and ps.issn_online=d.issn_online) and ps.is_transformative_journal=true) tmp on pd.id=tmp.id; -ANALYZE TABLE indi_pub_in_transformative COMPUTE STATISTICS; +--ANALYZE TABLE ${stats_db_name}.indi_pub_in_transformative COMPUTE STATISTICS; -create table if not exists indi_pub_closed_other_open stored as parquet as -select distinct ri.id, coalesce(pub_closed_other_open, 0) as pub_closed_other_open from result_instance ri +create table if not exists ${stats_db_name}.indi_pub_closed_other_open stored as parquet as +select distinct ri.id, coalesce(pub_closed_other_open, 0) as pub_closed_other_open from ${stats_db_name}.result_instance ri left outer join - (select ri.id, 1 as pub_closed_other_open from result_instance ri - join publication p on p.id=ri.id - join datasource d on ri.hostedby=d.id + (select ri.id, 1 as pub_closed_other_open from ${stats_db_name}.result_instance ri + join ${stats_db_name}.publication p on p.id=ri.id + join ${stats_db_name}.datasource d on ri.hostedby=d.id where d.type like '%Journal%' and ri.accessright='Closed Access' and (p.bestlicence='Open Access' or p.bestlicence='Open Source')) tmp on tmp.id=ri.id; -ANALYZE TABLE indi_pub_closed_other_open COMPUTE STATISTICS; +--ANALYZE TABLE ${stats_db_name}.indi_pub_closed_other_open COMPUTE STATISTICS; ---- Sprint 5 ---- -create table if not exists indi_result_no_of_copies stored as parquet as -select id, count(id) as number_of_copies from result_instance group by id; +create table if not exists ${stats_db_name}.indi_result_no_of_copies stored as parquet as +select id, count(id) as number_of_copies from ${stats_db_name}.result_instance group by id; -ANALYZE TABLE indi_result_no_of_copies COMPUTE STATISTICS; +--ANALYZE TABLE ${stats_db_name}.indi_result_no_of_copies COMPUTE STATISTICS; ---- Sprint 6 ---- -create table if not exists indi_pub_downloads stored as parquet as +create table if not exists ${stats_db_name}.indi_pub_downloads stored as parquet as SELECT result_id, sum(downloads) no_downloads from openaire_prod_usage_stats.usage_stats - join publication on result_id=id + join ${stats_db_name}.publication on result_id=id where downloads>0 GROUP BY result_id order by no_downloads desc; -ANALYZE TABLE indi_pub_downloads COMPUTE STATISTICS; +--ANALYZE TABLE ${stats_db_name}.indi_pub_downloads COMPUTE STATISTICS; -create table if not exists indi_pub_downloads_datasource stored as parquet as +create table if not exists ${stats_db_name}.indi_pub_downloads_datasource stored as parquet as SELECT result_id, repository_id, sum(downloads) no_downloads from openaire_prod_usage_stats.usage_stats - join publication on result_id=id + join ${stats_db_name}.publication on result_id=id where downloads>0 GROUP BY result_id, repository_id order by result_id; -ANALYZE TABLE indi_pub_downloads_datasource COMPUTE STATISTICS; +--ANALYZE TABLE ${stats_db_name}.indi_pub_downloads_datasource COMPUTE STATISTICS; -create table if not exists indi_pub_downloads_year stored as parquet as +create table if not exists ${stats_db_name}.indi_pub_downloads_year stored as parquet as SELECT result_id, substring(us.`date`, 1,4) as `year`, sum(downloads) no_downloads from openaire_prod_usage_stats.usage_stats us -join publication on result_id=id where downloads>0 +join ${stats_db_name}.publication on result_id=id where downloads>0 GROUP BY result_id, substring(us.`date`, 1,4); -ANALYZE TABLE indi_pub_downloads_year COMPUTE STATISTICS; +--ANALYZE TABLE ${stats_db_name}.indi_pub_downloads_year COMPUTE STATISTICS; -create table if not exists indi_pub_downloads_datasource_year stored as parquet as +create table if not exists ${stats_db_name}.indi_pub_downloads_datasource_year stored as parquet as SELECT result_id, substring(us.`date`, 1,4) as `year`, repository_id, sum(downloads) no_downloads from openaire_prod_usage_stats.usage_stats us -join publication on result_id=id +join ${stats_db_name}.publication on result_id=id where downloads>0 GROUP BY result_id, repository_id, substring(us.`date`, 1,4); -ANALYZE TABLE indi_pub_downloads_datasource_year COMPUTE STATISTICS; +--ANALYZE TABLE ${stats_db_name}.indi_pub_downloads_datasource_year COMPUTE STATISTICS; ---- Sprint 7 ---- -create table if not exists indi_pub_gold_oa stored as parquet as +create table if not exists ${stats_db_name}.indi_pub_gold_oa stored as parquet as WITH gold_oa AS ( SELECT issn_l, journal_is_in_doaj, @@ -284,7 +284,7 @@ create table if not exists indi_pub_gold_oa stored as parquet as id, issn_printed as issn FROM - datasource + ${stats_db_name}.datasource WHERE issn_printed IS NOT NULL UNION ALL @@ -292,7 +292,7 @@ create table if not exists indi_pub_gold_oa stored as parquet as id, issn_online as issn FROM - datasource + ${stats_db_name}.datasource WHERE issn_online IS NOT NULL or id like '%doajarticles%') as issn WHERE @@ -300,16 +300,16 @@ create table if not exists indi_pub_gold_oa stored as parquet as SELECT DISTINCT pd.id, coalesce(is_gold, 0) as is_gold FROM - publication_datasources pd + ${stats_db_name}.publication_datasources pd left outer join( - select pd.id, 1 as is_gold FROM publication_datasources pd + select pd.id, 1 as is_gold FROM ${stats_db_name}.publication_datasources pd JOIN issn on issn.id=pd.datasource JOIN gold_oa on issn.issn = gold_oa.issn) tmp on pd.id=tmp.id; -ANALYZE TABLE indi_pub_gold_oa COMPUTE STATISTICS; +--ANALYZE TABLE ${stats_db_name}.indi_pub_gold_oa COMPUTE STATISTICS; -create table if not exists indi_pub_hybrid_oa_with_cc stored as parquet as +create table if not exists ${stats_db_name}.indi_pub_hybrid_oa_with_cc stored as parquet as WITH hybrid_oa AS ( SELECT issn_l, journal_is_in_doaj, journal_is_oa, issn_print as issn FROM STATS_EXT.plan_s_jn @@ -322,27 +322,27 @@ create table if not exists indi_pub_hybrid_oa_with_cc stored as parquet as SELECT * FROM ( SELECT id, issn_printed as issn - FROM datasource + FROM ${stats_db_name}.datasource WHERE issn_printed IS NOT NULL UNION ALL SELECT id,issn_online as issn - FROM datasource + FROM ${stats_db_name}.datasource WHERE issn_online IS NOT NULL ) as issn WHERE LENGTH(issn) > 7) SELECT DISTINCT pd.id, coalesce(is_hybrid_oa, 0) as is_hybrid_oa -FROM publication_datasources pd +FROM ${stats_db_name}.publication_datasources pd LEFT OUTER JOIN ( - SELECT pd.id, 1 as is_hybrid_oa from publication_datasources pd - JOIN datasource d on d.id=pd.datasource + SELECT pd.id, 1 as is_hybrid_oa from ${stats_db_name}.publication_datasources pd + JOIN ${stats_db_name}.datasource d on d.id=pd.datasource JOIN issn on issn.id=pd.datasource JOIN hybrid_oa ON issn.issn = hybrid_oa.issn - JOIN indi_result_has_cc_licence cc on pd.id=cc.id - JOIN indi_pub_gold_oa ga on pd.id=ga.id + JOIN ${stats_db_name}.indi_result_has_cc_licence cc on pd.id=cc.id + JOIN ${stats_db_name}.indi_pub_gold_oa ga on pd.id=ga.id where cc.has_cc_license=1 and ga.is_gold=0) tmp on pd.id=tmp.id; -ANALYZE TABLE indi_pub_hybrid_oa_with_cc COMPUTE STATISTICS; +--ANALYZE TABLE ${stats_db_name}.indi_pub_hybrid_oa_with_cc COMPUTE STATISTICS; -create table if not exists indi_pub_hybrid stored as parquet as +create table if not exists ${stats_db_name}.indi_pub_hybrid stored as parquet as WITH gold_oa AS ( SELECT issn_l, journal_is_in_doaj, @@ -370,7 +370,7 @@ create table if not exists indi_pub_hybrid stored as parquet as id, issn_printed as issn FROM - datasource + ${stats_db_name}.datasource WHERE issn_printed IS NOT NULL UNION ALL @@ -378,424 +378,398 @@ create table if not exists indi_pub_hybrid stored as parquet as id, issn_online as issn FROM - datasource + ${stats_db_name}.datasource WHERE issn_online IS NOT NULL or id like '%doajarticles%') as issn WHERE LENGTH(issn) > 7) select distinct pd.id, coalesce(is_hybrid, 0) as is_hybrid -from publication_datasources pd +from ${stats_db_name}.publication_datasources pd left outer join ( - select pd.id, 1 as is_hybrid from publication_datasources pd - join datasource d on d.id=pd.datasource + select pd.id, 1 as is_hybrid from ${stats_db_name}.publication_datasources pd + join ${stats_db_name}.datasource d on d.id=pd.datasource join issn on issn.id=pd.datasource join gold_oa on issn.issn=gold_oa.issn where (gold_oa.journal_is_in_doaj=false or gold_oa.journal_is_oa=false))tmp on pd.id=tmp.id; -ANALYZE TABLE indi_pub_hybrid COMPUTE STATISTICS; +--ANALYZE TABLE ${stats_db_name}.indi_pub_hybrid COMPUTE STATISTICS; -create table if not exists indi_org_fairness stored as parquet as +create table if not exists ${stats_db_name}.indi_org_fairness stored as parquet as --return results with PIDs, and rich metadata group by organization with result_fair as - (select ro.organization organization, count(distinct ro.id) no_result_fair from result_organization ro - join result r on r.id=ro.id + (select ro.organization organization, count(distinct ro.id) no_result_fair from ${stats_db_name}.result_organization ro + join ${stats_db_name}.result r on r.id=ro.id --join result_pids rp on r.id=rp.id where (title is not null) and (publisher is not null) and (abstract=true) and (year is not null) and (authors>0) and cast(year as int)>2003 group by ro.organization), --return all results group by organization - allresults as (select organization, count(distinct ro.id) no_allresults from result_organization ro - join result r on r.id=ro.id + allresults as (select ro.organization, count(distinct ro.id) no_allresults from ${stats_db_name}.result_organization ro + join ${stats_db_name}.result r on r.id=ro.id where cast(year as int)>2003 - group by organization) + group by ro.organization) --return results_fair/all_results select allresults.organization, result_fair.no_result_fair/allresults.no_allresults org_fairness from allresults join result_fair on result_fair.organization=allresults.organization; -ANALYZE TABLE indi_org_fairness COMPUTE STATISTICS; +--ANALYZE TABLE ${stats_db_name}.indi_org_fairness COMPUTE STATISTICS; -create table if not exists indi_org_fairness_pub_pr stored as parquet as - with result_fair as - (select ro.organization organization, count(distinct ro.id) no_result_fair - from result_organization ro - join publication p on p.id=ro.id - join indi_pub_doi_from_crossref dc on dc.id=p.id - join indi_pub_grey_lit gl on gl.id=p.id +CREATE TEMPORARY table ${stats_db_name}.result_fair as +select ro.organization organization, count(distinct ro.id) no_result_fair + from ${stats_db_name}.result_organization ro + join ${stats_db_name}.publication p on p.id=ro.id + join ${stats_db_name}.indi_pub_doi_from_crossref dc on dc.id=p.id + join ${stats_db_name}.indi_pub_grey_lit gl on gl.id=p.id where (title is not null) and (publisher is not null) and (abstract=true) and (year is not null) and (authors>0) and cast(year as int)>2003 and dc.doi_from_crossref=1 and gl.grey_lit=0 - group by ro.organization), - allresults as (select organization, count(distinct ro.id) no_allresults from result_organization ro - join publication p on p.id=ro.id + group by ro.organization; + +CREATE TEMPORARY TABLE ${stats_db_name}.allresults as +select ro.organization, count(distinct ro.id) no_allresults from ${stats_db_name}.result_organization ro + join ${stats_db_name}.publication p on p.id=ro.id where cast(year as int)>2003 - group by organization) ---return results_fair/all_results -select allresults.organization, result_fair.no_result_fair/allresults.no_allresults org_fairness -from allresults - join result_fair on result_fair.organization=allresults.organization; + group by ro.organization; -ANALYZE TABLE indi_org_fairness_pub_pr COMPUTE STATISTICS; +create table if not exists ${stats_db_name}.indi_org_fairness_pub_pr stored as parquet as +select ar.organization, rf.no_result_fair/ar.no_allresults org_fairness +from ${stats_db_name}.allresults ar + join ${stats_db_name}.result_fair rf on rf.organization=ar.organization; -CREATE TEMPORARY table result_fair as - select year, ro.organization organization, count(distinct ro.id) no_result_fair from result_organization ro - join result p on p.id=ro.id +DROP table ${stats_db_name}.result_fair purge; +DROP table ${stats_db_name}.allresults purge; + +--ANALYZE TABLE ${stats_db_name}.indi_org_fairness_pub_pr COMPUTE STATISTICS; + +CREATE TEMPORARY table ${stats_db_name}.result_fair as + select year, ro.organization organization, count(distinct ro.id) no_result_fair from ${stats_db_name}.result_organization ro + join ${stats_db_name}.result p on p.id=ro.id where (title is not null) and (publisher is not null) and (abstract=true) and (year is not null) and (authors>0) and cast(year as int)>2003 group by ro.organization, year; -CREATE TEMPORARY TABLE allresults as select year, organization, count(distinct ro.id) no_allresults from result_organization ro - join result p on p.id=ro.id +CREATE TEMPORARY TABLE ${stats_db_name}.allresults as select year, ro.organization, count(distinct ro.id) no_allresults from ${stats_db_name}.result_organization ro + join ${stats_db_name}.result p on p.id=ro.id where cast(year as int)>2003 - group by organization, year; + group by ro.organization, year; -create table if not exists indi_org_fairness_pub_year stored as parquet as +create table if not exists ${stats_db_name}.indi_org_fairness_pub_year stored as parquet as select allresults.year, allresults.organization, result_fair.no_result_fair/allresults.no_allresults org_fairness -from allresults - join result_fair on result_fair.organization=allresults.organization and result_fair.year=allresults.year; +from ${stats_db_name}.allresults + join ${stats_db_name}.result_fair on result_fair.organization=allresults.organization and result_fair.year=allresults.year; -DROP table result_fair purge; -DROP table allresults purge; +DROP table ${stats_db_name}.result_fair purge; +DROP table ${stats_db_name}.allresults purge; -ANALYZE TABLE indi_org_fairness_pub_year COMPUTE STATISTICS; +--ANALYZE TABLE ${stats_db_name}.indi_org_fairness_pub_year COMPUTE STATISTICS; -CREATE TEMPORARY TABLE result_fair as +CREATE TEMPORARY TABLE ${stats_db_name}.result_fair as select ro.organization organization, count(distinct ro.id) no_result_fair - from result_organization ro - join result p on p.id=ro.id + from ${stats_db_name}.result_organization ro + join ${stats_db_name}.result p on p.id=ro.id where (title is not null) and (publisher is not null) and (abstract=true) and (year is not null) and (authors>0) and cast(year as int)>2003 group by ro.organization; -CREATE TEMPORARY TABLE allresults as - select organization, count(distinct ro.id) no_allresults from result_organization ro - join result p on p.id=ro.id +CREATE TEMPORARY TABLE ${stats_db_name}.allresults as + select ro.organization, count(distinct ro.id) no_allresults from ${stats_db_name}.result_organization ro + join ${stats_db_name}.result p on p.id=ro.id where cast(year as int)>2003 - group by organization; + group by ro.organization; -create table if not exists indi_org_fairness_pub as -select allresults.organization, result_fair.no_result_fair/allresults.no_allresults org_fairness -from allresults join result_fair on result_fair.organization=allresults.organization; +create table if not exists ${stats_db_name}.indi_org_fairness_pub as +select ar.organization, rf.no_result_fair/ar.no_allresults org_fairness +from ${stats_db_name}.allresults ar join ${stats_db_name}.result_fair rf +on rf.organization=ar.organization; -DROP table result_fair purge; -DROP table allresults purge; +DROP table ${stats_db_name}.result_fair purge; +DROP table ${stats_db_name}.allresults purge; -ANALYZE TABLE indi_org_fairness_pub COMPUTE STATISTICS; +--ANALYZE TABLE ${stats_db_name}.indi_org_fairness_pub COMPUTE STATISTICS; -CREATE TEMPORARY TABLE result_fair as - select year, ro.organization organization, count(distinct ro.id) no_result_fair from result_organization ro - join result r on r.id=ro.id - join result_pids rp on r.id=rp.id +CREATE TEMPORARY TABLE ${stats_db_name}.result_fair as + select year, ro.organization organization, count(distinct ro.id) no_result_fair from ${stats_db_name}.result_organization ro + join ${stats_db_name}.result r on r.id=ro.id + join ${stats_db_name}.result_pids rp on r.id=rp.id where (title is not null) and (publisher is not null) and (abstract=true) and (year is not null) and (authors>0) and cast(year as int)>2003 group by ro.organization, year; -CREATE TEMPORARY TABLE allresults as - select year, organization, count(distinct ro.id) no_allresults from result_organization ro - join result r on r.id=ro.id +CREATE TEMPORARY TABLE ${stats_db_name}.allresults as + select year, ro.organization, count(distinct ro.id) no_allresults from ${stats_db_name}.result_organization ro + join ${stats_db_name}.result r on r.id=ro.id where cast(year as int)>2003 - group by organization, year; + group by ro.organization, year; -create table if not exists indi_org_fairness_year stored as parquet as +create table if not exists ${stats_db_name}.indi_org_fairness_year stored as parquet as select allresults.year, allresults.organization, result_fair.no_result_fair/allresults.no_allresults org_fairness - from allresults - join result_fair on result_fair.organization=allresults.organization and result_fair.year=allresults.year; + from ${stats_db_name}.allresults + join ${stats_db_name}.result_fair on result_fair.organization=allresults.organization and result_fair.year=allresults.year; -DROP table result_fair purge; -DROP table allresults purge; +DROP table ${stats_db_name}.result_fair purge; +DROP table ${stats_db_name}.allresults purge; -ANALYZE TABLE indi_org_fairness_year COMPUTE STATISTICS; +--ANALYZE TABLE ${stats_db_name}.indi_org_fairness_year COMPUTE STATISTICS; -CREATE TEMPORARY TABLE result_with_pid as - select year, ro.organization organization, count(distinct rp.id) no_result_with_pid from result_organization ro - join result_pids rp on rp.id=ro.id - join result r on r.id=rp.id +CREATE TEMPORARY TABLE ${stats_db_name}.result_with_pid as + select year, ro.organization, count(distinct rp.id) no_result_with_pid from ${stats_db_name}.result_organization ro + join ${stats_db_name}.result_pids rp on rp.id=ro.id + join ${stats_db_name}.result r on r.id=rp.id where cast(year as int) >2003 group by ro.organization, year; -CREATE TEMPORARY TABLE allresults as - select year, organization, count(distinct ro.id) no_allresults from result_organization ro - join result r on r.id=ro.id +CREATE TEMPORARY TABLE ${stats_db_name}.allresults as + select year, ro.organization, count(distinct ro.id) no_allresults from ${stats_db_name}.result_organization ro + join ${stats_db_name}.result r on r.id=ro.id where cast(year as int) >2003 - group by organization, year; + group by ro.organization, year; -create table if not exists indi_org_findable_year stored as parquet as +create table if not exists ${stats_db_name}.indi_org_findable_year stored as parquet as select allresults.year, allresults.organization, result_with_pid.no_result_with_pid/allresults.no_allresults org_findable -from allresults - join result_with_pid on result_with_pid.organization=allresults.organization and result_with_pid.year=allresults.year; +from ${stats_db_name}.allresults + join ${stats_db_name}.result_with_pid on result_with_pid.organization=allresults.organization and result_with_pid.year=allresults.year; -DROP table result_with_pid purge; -DROP table allresults purge; +DROP table ${stats_db_name}.result_with_pid purge; +DROP table ${stats_db_name}.allresults purge; -ANALYZE TABLE indi_org_findable_year COMPUTE STATISTICS; +--ANALYZE TABLE ${stats_db_name}.indi_org_findable_year COMPUTE STATISTICS; -CREATE TEMPORARY TABLE result_with_pid as -select ro.organization organization, count(distinct rp.id) no_result_with_pid from result_organization ro - join result_pids rp on rp.id=ro.id - join result r on r.id=rp.id +CREATE TEMPORARY TABLE ${stats_db_name}.result_with_pid as +select ro.organization, count(distinct rp.id) no_result_with_pid from ${stats_db_name}.result_organization ro + join ${stats_db_name}.result_pids rp on rp.id=ro.id + join ${stats_db_name}.result r on r.id=rp.id where cast(year as int) >2003 group by ro.organization; -CREATE TEMPORARY TABLE allresults as -select organization, count(distinct ro.id) no_allresults from result_organization ro - join result r on r.id=ro.id +CREATE TEMPORARY TABLE ${stats_db_name}.allresults as +select ro.organization, count(distinct ro.id) no_allresults from ${stats_db_name}.result_organization ro + join ${stats_db_name}.result r on r.id=ro.id where cast(year as int) >2003 - group by organization; + group by ro.organization; -create table if not exists indi_org_findable stored as parquet as +create table if not exists ${stats_db_name}.indi_org_findable stored as parquet as select allresults.organization, result_with_pid.no_result_with_pid/allresults.no_allresults org_findable -from allresults - join result_with_pid on result_with_pid.organization=allresults.organization; +from ${stats_db_name}.allresults + join ${stats_db_name}.result_with_pid on result_with_pid.organization=allresults.organization; -DROP table result_with_pid purge; -DROP table allresults purge; +DROP table ${stats_db_name}.result_with_pid purge; +DROP table ${stats_db_name}.allresults purge; -ANALYZE TABLE indi_org_findable COMPUTE STATISTICS; +--ANALYZE TABLE ${stats_db_name}.indi_org_findable COMPUTE STATISTICS; -CREATE TEMPORARY TABLE pubs_oa as -SELECT ro.organization, count(distinct r.id) no_oapubs FROM publication r - join result_organization ro on ro.id=r.id - join result_instance ri on ri.id=r.id +CREATE TEMPORARY TABLE ${stats_db_name}.pubs_oa as +SELECT ro.organization, count(distinct r.id) no_oapubs FROM ${stats_db_name}.publication r + join ${stats_db_name}.result_organization ro on ro.id=r.id + join ${stats_db_name}.result_instance ri on ri.id=r.id where (ri.accessright = 'Open Access' or ri.accessright = 'Embargo' or ri.accessright = 'Open Source') and cast(r.year as int)>2003 group by ro.organization; -CREATE TEMPORARY TABLE datasets_oa as -SELECT ro.organization, count(distinct r.id) no_oadatasets FROM dataset r - join result_organization ro on ro.id=r.id - join result_instance ri on ri.id=r.id +CREATE TEMPORARY TABLE ${stats_db_name}.datasets_oa as +SELECT ro.organization, count(distinct r.id) no_oadatasets FROM ${stats_db_name}.dataset r + join ${stats_db_name}.result_organization ro on ro.id=r.id + join ${stats_db_name}.result_instance ri on ri.id=r.id where (ri.accessright = 'Open Access' or ri.accessright = 'Embargo' or ri.accessright = 'Open Source') and cast(r.year as int)>2003 group by ro.organization; -CREATE TEMPORARY TABLE software_oa as -SELECT ro.organization, count(distinct r.id) no_oasoftware FROM software r - join result_organization ro on ro.id=r.id - join result_instance ri on ri.id=r.id +CREATE TEMPORARY TABLE ${stats_db_name}.software_oa as +SELECT ro.organization, count(distinct r.id) no_oasoftware FROM ${stats_db_name}.software r + join ${stats_db_name}.result_organization ro on ro.id=r.id + join ${stats_db_name}.result_instance ri on ri.id=r.id where (ri.accessright = 'Open Access' or ri.accessright = 'Embargo' or ri.accessright = 'Open Source') and cast(r.year as int)>2003 group by ro.organization; -CREATE TEMPORARY TABLE allpubs as -SELECT ro.organization organization, count(ro.id) no_allpubs FROM result_organization ro - join publication ps on ps.id=ro.id +CREATE TEMPORARY TABLE ${stats_db_name}.allpubs as +SELECT ro.organization, count(ro.id) no_allpubs FROM ${stats_db_name}.result_organization ro + join ${stats_db_name}.publication ps on ps.id=ro.id where cast(ps.year as int)>2003 group by ro.organization; -CREATE TEMPORARY TABLE alldatasets as -SELECT ro.organization organization, count(ro.id) no_alldatasets FROM result_organization ro - join dataset ps on ps.id=ro.id +CREATE TEMPORARY TABLE ${stats_db_name}.alldatasets as +SELECT ro.organization, count(ro.id) no_alldatasets FROM ${stats_db_name}.result_organization ro + join ${stats_db_name}.dataset ps on ps.id=ro.id where cast(ps.year as int)>2003 group by ro.organization; -CREATE TEMPORARY TABLE allsoftware as -SELECT ro.organization organization, count(ro.id) no_allsoftware FROM result_organization ro - join software ps on ps.id=ro.id +CREATE TEMPORARY TABLE ${stats_db_name}.allsoftware as +SELECT ro.organization, count(ro.id) no_allsoftware FROM ${stats_db_name}.result_organization ro + join ${stats_db_name}.software ps on ps.id=ro.id where cast(ps.year as int)>2003 group by ro.organization; -CREATE TEMPORARY TABLE allpubsshare as -select pubs_oa.organization, pubs_oa.no_oapubs/allpubs.no_allpubs p from allpubs - join pubs_oa on allpubs.organization=pubs_oa.organization; +CREATE TEMPORARY TABLE ${stats_db_name}.allpubsshare as +select pubs_oa.organization, pubs_oa.no_oapubs/allpubs.no_allpubs p from ${stats_db_name}.allpubs + join ${stats_db_name}.pubs_oa on allpubs.organization=pubs_oa.organization; -CREATE TEMPORARY TABLE alldatasetssshare as +CREATE TEMPORARY TABLE ${stats_db_name}.alldatasetssshare as select datasets_oa.organization, datasets_oa.no_oadatasets/alldatasets.no_alldatasets d - from alldatasets - join datasets_oa on alldatasets.organization=datasets_oa.organization; + from ${stats_db_name}.alldatasets + join ${stats_db_name}.datasets_oa on alldatasets.organization=datasets_oa.organization; -CREATE TEMPORARY TABLE allsoftwaresshare as +CREATE TEMPORARY TABLE ${stats_db_name}.allsoftwaresshare as select software_oa.organization, software_oa.no_oasoftware/allsoftware.no_allsoftware s - from allsoftware - join software_oa on allsoftware.organization=software_oa.organization; + from ${stats_db_name}.allsoftware + join ${stats_db_name}.software_oa on allsoftware.organization=software_oa.organization; -create table if not exists indi_org_openess stored as parquet as +create table if not exists ${stats_db_name}.indi_org_openess stored as parquet as select allpubsshare.organization, (p+if(isnull(s),0,s)+if(isnull(d),0,d))/(1+(case when s is null then 0 else 1 end) +(case when d is null then 0 else 1 end)) - org_openess FROM allpubsshare + org_openess FROM ${stats_db_name}.allpubsshare left outer join (select organization,d from - alldatasetssshare) tmp1 + ${stats_db_name}.alldatasetssshare) tmp1 on tmp1.organization=allpubsshare.organization left outer join (select organization,s from - allsoftwaresshare) tmp2 + ${stats_db_name}.allsoftwaresshare) tmp2 on tmp2.organization=allpubsshare.organization; -DROP TABLE pubs_oa purge; -DROP TABLE datasets_oa purge; -DROP TABLE software_oa purge; -DROP TABLE allpubs purge; -DROP TABLE alldatasets purge; -DROP TABLE allsoftware purge; -DROP TABLE allpubsshare purge; -DROP TABLE alldatasetssshare purge; -DROP TABLE allsoftwaresshare purge; +DROP TABLE ${stats_db_name}.pubs_oa purge; +DROP TABLE ${stats_db_name}.datasets_oa purge; +DROP TABLE ${stats_db_name}.software_oa purge; +DROP TABLE ${stats_db_name}.allpubs purge; +DROP TABLE ${stats_db_name}.alldatasets purge; +DROP TABLE ${stats_db_name}.allsoftware purge; +DROP TABLE ${stats_db_name}.allpubsshare purge; +DROP TABLE ${stats_db_name}.alldatasetssshare purge; +DROP TABLE ${stats_db_name}.allsoftwaresshare purge; -ANALYZE TABLE indi_org_openess COMPUTE STATISTICS; +--ANALYZE TABLE ${stats_db_name}.indi_org_openess COMPUTE STATISTICS; -CREATE TEMPORARY TABLE pubs_oa AS -SELECT r.year, ro.organization, count(distinct r.id) no_oapubs FROM publication r - join result_organization ro on ro.id=r.id - join result_instance ri on ri.id=r.id +CREATE TEMPORARY TABLE ${stats_db_name}.pubs_oa AS +SELECT r.year, ro.organization, count(distinct r.id) no_oapubs FROM ${stats_db_name}.publication r + join ${stats_db_name}.result_organization ro on ro.id=r.id + join ${stats_db_name}.result_instance ri on ri.id=r.id where (ri.accessright = 'Open Access' or ri.accessright = 'Embargo' or ri.accessright = 'Open Source') and cast(r.year as int)>2003 group by ro.organization,r.year; -CREATE TEMPORARY TABLE datasets_oa AS -SELECT r.year,ro.organization, count(distinct r.id) no_oadatasets FROM dataset r - join result_organization ro on ro.id=r.id - join result_instance ri on ri.id=r.id +CREATE TEMPORARY TABLE ${stats_db_name}.datasets_oa AS +SELECT r.year,ro.organization, count(distinct r.id) no_oadatasets FROM ${stats_db_name}.dataset r + join ${stats_db_name}.result_organization ro on ro.id=r.id + join ${stats_db_name}.result_instance ri on ri.id=r.id where (ri.accessright = 'Open Access' or ri.accessright = 'Embargo' or ri.accessright = 'Open Source') and cast(r.year as int)>2003 group by ro.organization, r.year; -CREATE TEMPORARY TABLE software_oa AS -SELECT r.year,ro.organization, count(distinct r.id) no_oasoftware FROM software r - join result_organization ro on ro.id=r.id - join result_instance ri on ri.id=r.id +CREATE TEMPORARY TABLE ${stats_db_name}.software_oa AS +SELECT r.year,ro.organization, count(distinct r.id) no_oasoftware FROM ${stats_db_name}.software r + join ${stats_db_name}.result_organization ro on ro.id=r.id + join ${stats_db_name}.result_instance ri on ri.id=r.id where (ri.accessright = 'Open Access' or ri.accessright = 'Embargo' or ri.accessright = 'Open Source') and cast(r.year as int)>2003 group by ro.organization, r.year; -CREATE TEMPORARY TABLE allpubs as -SELECT p.year,ro.organization organization, count(ro.id) no_allpubs FROM result_organization ro - join publication p on p.id=ro.id where cast(p.year as int)>2003 +CREATE TEMPORARY TABLE ${stats_db_name}.allpubs as +SELECT p.year,ro.organization organization, count(ro.id) no_allpubs FROM ${stats_db_name}.result_organization ro + join ${stats_db_name}.publication p on p.id=ro.id where cast(p.year as int)>2003 group by ro.organization, p.year; -CREATE TEMPORARY TABLE alldatasets as -SELECT d.year, ro.organization organization, count(ro.id) no_alldatasets FROM result_organization ro - join dataset d on d.id=ro.id where cast(d.year as int)>2003 +CREATE TEMPORARY TABLE ${stats_db_name}.alldatasets as +SELECT d.year, ro.organization organization, count(ro.id) no_alldatasets FROM ${stats_db_name}.result_organization ro + join ${stats_db_name}.dataset d on d.id=ro.id where cast(d.year as int)>2003 group by ro.organization, d.year; -CREATE TEMPORARY TABLE allsoftware as -SELECT s.year,ro.organization organization, count(ro.id) no_allsoftware FROM result_organization ro - join software s on s.id=ro.id where cast(s.year as int)>2003 +CREATE TEMPORARY TABLE ${stats_db_name}.allsoftware as +SELECT s.year,ro.organization organization, count(ro.id) no_allsoftware FROM ${stats_db_name}.result_organization ro + join ${stats_db_name}.software s on s.id=ro.id where cast(s.year as int)>2003 group by ro.organization, s.year; -CREATE TEMPORARY TABLE allpubsshare as -select allpubs.year, pubs_oa.organization, pubs_oa.no_oapubs/allpubs.no_allpubs p from allpubs - join pubs_oa on allpubs.organization=pubs_oa.organization where cast(allpubs.year as INT)=cast(pubs_oa.year as int); +CREATE TEMPORARY TABLE ${stats_db_name}.allpubsshare as +select allpubs.year, pubs_oa.organization, pubs_oa.no_oapubs/allpubs.no_allpubs p from ${stats_db_name}.allpubs + join ${stats_db_name}.pubs_oa on allpubs.organization=pubs_oa.organization where cast(allpubs.year as INT)=cast(pubs_oa.year as int); -CREATE TEMPORARY TABLE alldatasetssshare as +CREATE TEMPORARY TABLE ${stats_db_name}.alldatasetssshare as select alldatasets.year, datasets_oa.organization, datasets_oa.no_oadatasets/alldatasets.no_alldatasets d - from alldatasets - join datasets_oa on alldatasets.organization=datasets_oa.organization where cast(alldatasets.year as INT)=cast(datasets_oa.year as int); + from ${stats_db_name}.alldatasets + join ${stats_db_name}.datasets_oa on alldatasets.organization=datasets_oa.organization where cast(alldatasets.year as INT)=cast(datasets_oa.year as int); -CREATE TEMPORARY TABLE allsoftwaresshare as +CREATE TEMPORARY TABLE ${stats_db_name}.allsoftwaresshare as select allsoftware.year, software_oa.organization, software_oa.no_oasoftware/allsoftware.no_allsoftware s - from allsoftware - join software_oa on allsoftware.organization=software_oa.organization where cast(allsoftware.year as INT)=cast(software_oa.year as int); + from ${stats_db_name}.allsoftware + join ${stats_db_name}.software_oa on allsoftware.organization=software_oa.organization where cast(allsoftware.year as INT)=cast(software_oa.year as int); -create table if not exists indi_org_openess_year stored as parquet as +create table if not exists ${stats_db_name}.indi_org_openess_year stored as parquet as select allpubsshare.year, allpubsshare.organization, (p+if(isnull(s),0,s)+if(isnull(d),0,d))/(1+(case when s is null then 0 else 1 end) +(case when d is null then 0 else 1 end)) - org_openess FROM allpubsshare + org_openess FROM ${stats_db_name}.allpubsshare left outer join (select year, organization,d from - alldatasetssshare) tmp1 + ${stats_db_name}.alldatasetssshare) tmp1 on tmp1.organization=allpubsshare.organization and tmp1.year=allpubsshare.year left outer join (select year, organization,s from - allsoftwaresshare) tmp2 + ${stats_db_name}.allsoftwaresshare) tmp2 on tmp2.organization=allpubsshare.organization and tmp2.year=allpubsshare.year; -DROP TABLE pubs_oa purge; -DROP TABLE datasets_oa purge; -DROP TABLE software_oa purge; -DROP TABLE allpubs purge; -DROP TABLE alldatasets purge; -DROP TABLE allsoftware purge; -DROP TABLE allpubsshare purge; -DROP TABLE alldatasetssshare purge; -DROP TABLE allsoftwaresshare purge; +DROP TABLE ${stats_db_name}.pubs_oa purge; +DROP TABLE ${stats_db_name}.datasets_oa purge; +DROP TABLE ${stats_db_name}.software_oa purge; +DROP TABLE ${stats_db_name}.allpubs purge; +DROP TABLE ${stats_db_name}.alldatasets purge; +DROP TABLE ${stats_db_name}.allsoftware purge; +DROP TABLE ${stats_db_name}.allpubsshare purge; +DROP TABLE ${stats_db_name}.alldatasetssshare purge; +DROP TABLE ${stats_db_name}.allsoftwaresshare purge; -ANALYZE TABLE indi_org_openess_year COMPUTE STATISTICS; +--ANALYZE TABLE ${stats_db_name}.indi_org_openess_year COMPUTE STATISTICS; -create table if not exists indi_pub_has_preprint stored as parquet as +create table if not exists ${stats_db_name}.indi_pub_has_preprint stored as parquet as select distinct p.id, coalesce(has_preprint, 0) as has_preprint -from publication_classifications p +from ${stats_db_name}.publication_classifications p left outer join ( select p.id, 1 as has_preprint - from publication_classifications p + from ${stats_db_name}.publication_classifications p where p.type='Preprint') tmp on p.id= tmp.id; -ANALYZE TABLE indi_pub_has_preprint COMPUTE STATISTICS; +--ANALYZE TABLE ${stats_db_name}.indi_pub_has_preprint COMPUTE STATISTICS; -create table if not exists indi_pub_in_subscribed stored as parquet as +create table if not exists ${stats_db_name}.indi_pub_in_subscribed stored as parquet as select distinct p.id, coalesce(is_subscription, 0) as is_subscription -from publication p +from ${stats_db_name}.publication p left outer join( - select p.id, 1 as is_subscription from publication p - join indi_pub_gold_oa g on p.id=g.id - join indi_pub_hybrid h on p.id=h.id - join indi_pub_in_transformative t on p.id=t.id + select p.id, 1 as is_subscription from ${stats_db_name}.publication p + join ${stats_db_name}.indi_pub_gold_oa g on p.id=g.id + join ${stats_db_name}.indi_pub_hybrid h on p.id=h.id + join ${stats_db_name}.indi_pub_in_transformative t on p.id=t.id where g.is_gold=0 and h.is_hybrid=0 and t.is_transformative=0) tmp on p.id=tmp.id; -ANALYZE TABLE indi_pub_in_subscribed COMPUTE STATISTICS; +--ANALYZE TABLE ${stats_db_name}.indi_pub_in_subscribed COMPUTE STATISTICS; -create table if not exists indi_result_with_pid as +create table if not exists ${stats_db_name}.indi_result_with_pid as select distinct p.id, coalesce(result_with_pid, 0) as result_with_pid -from result p +from ${stats_db_name}.result p left outer join ( select p.id, 1 as result_with_pid - from result_pids p) tmp + from ${stats_db_name}.result_pids p) tmp on p.id= tmp.id; -ANALYZE TABLE indi_result_with_pid COMPUTE STATISTICS; +--ANALYZE TABLE ${stats_db_name}.indi_result_with_pid COMPUTE STATISTICS; -CREATE TEMPORARY TABLE pub_fos_totals as -select rf.id, count(distinct lvl3) totals from result_fos rf +CREATE TEMPORARY TABLE ${stats_db_name}.pub_fos_totals as +select rf.id, count(distinct lvl3) totals from ${stats_db_name}.result_fos rf group by rf.id; -create table if not exists indi_pub_interdisciplinarity as +create table if not exists ${stats_db_name}.indi_pub_interdisciplinarity as select distinct p.id as id, coalesce(is_interdisciplinary, 0) as is_interdisciplinary -from pub_fos_totals p +from ${stats_db_name}.pub_fos_totals p left outer join ( -select pub_fos_totals.id, 1 as is_interdisciplinary from pub_fos_totals +select pub_fos_totals.id, 1 as is_interdisciplinary from ${stats_db_name}.pub_fos_totals where totals>1) tmp on p.id=tmp.id; -drop table pub_fos_totals purge; +drop table ${stats_db_name}.pub_fos_totals purge; -ANALYZE TABLE indi_pub_interdisciplinarity COMPUTE STATISTICS; +--ANALYZE TABLE ${stats_db_name}.indi_pub_interdisciplinarity COMPUTE STATISTICS; -create table if not exists indi_pub_bronze_oa stored as parquet as +create table if not exists ${stats_db_name}.indi_pub_bronze_oa stored as parquet as select distinct p.id, coalesce(is_bronze_oa,0) as is_bronze_oa -from publication p +from ${stats_db_name}.publication p left outer join -(select p.id, 1 as is_bronze_oa from publication p -join indi_result_has_cc_licence cc on cc.id=p.id -join indi_pub_gold_oa ga on ga.id=p.id +(select p.id, 1 as is_bronze_oa from ${stats_db_name}.publication p +join ${stats_db_name}.indi_result_has_cc_licence cc on cc.id=p.id +join ${stats_db_name}.indi_pub_gold_oa ga on ga.id=p.id where cc.has_cc_license=0 and ga.is_gold=0) tmp on tmp.id=p.id; --- create table if not exists indi_pub_bronze_oa stored as parquet as --- WITH hybrid_oa AS ( --- SELECT issn_l, journal_is_in_doaj, journal_is_oa, issn_print as issn --- FROM STATS_EXT.plan_s_jn --- WHERE issn_print != "" --- UNION ALL --- SELECT issn_l, journal_is_in_doaj, journal_is_oa, issn_online as issn --- FROM STATS_EXT.plan_s_jn --- WHERE issn_online != "" and (journal_is_in_doaj = FALSE OR journal_is_oa = FALSE)), --- issn AS ( --- SELECT * --- FROM ( --- SELECT id, issn_printed as issn --- FROM datasource --- WHERE issn_printed IS NOT NULL --- UNION ALL --- SELECT id,issn_online as issn --- FROM datasource --- WHERE issn_online IS NOT NULL ) as issn --- WHERE LENGTH(issn) > 7) ---SELECT DISTINCT pd.id, coalesce(is_bronze_oa, 0) as is_bronze_oa ---FROM publication_datasources pd --- LEFT OUTER JOIN ( --- SELECT pd.id, 1 as is_bronze_oa from publication_datasources pd --- JOIN datasource d on d.id=pd.datasource --- JOIN issn on issn.id=pd.datasource --- JOIN hybrid_oa ON issn.issn = hybrid_oa.issn --- JOIN indi_result_has_cc_licence cc on pd.id=cc.id --- JOIN indi_pub_gold_oa ga on pd.id=ga.id --- JOIN indi_pub_hybrid_oa_with_cc hy on hy.id=pd.id --- where cc.has_cc_license=0 and ga.is_gold=0 and hy.is_hybrid_oa=0) tmp on pd.id=tmp.id; - -ANALYZE TABLE indi_pub_bronze_oa COMPUTE STATISTICS; \ No newline at end of file +--ANALYZE TABLE ${stats_db_name}.indi_pub_bronze_oa COMPUTE STATISTICS; \ No newline at end of file diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB.sql index 9744d5aae..3eeb792c7 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB.sql @@ -90,83 +90,83 @@ create view if not exists TARGET.totalresearchersft as select * from SOURCE.tota create view if not exists TARGET.hrrst as select * from SOURCE.hrrst; create table TARGET.result_citations stored as parquet as select * from SOURCE.result_citations orig where exists (select 1 from TARGET.result r where r.id=orig.id); -ANALYZE TABLE TARGET.result_citations COMPUTE STATISTICS; +--ANALYZE TABLE TARGET.result_citations COMPUTE STATISTICS; create table TARGET.result_references_oc stored as parquet as select * from SOURCE.result_references_oc orig where exists (select 1 from TARGET.result r where r.id=orig.id); -ANALYZE TABLE TARGET.result_references_oc COMPUTE STATISTICS; +--ANALYZE TABLE TARGET.result_references_oc COMPUTE STATISTICS; create table TARGET.result_citations_oc stored as parquet as select * from SOURCE.result_citations_oc orig where exists (select 1 from TARGET.result r where r.id=orig.id); -ANALYZE TABLE TARGET.result_citations_oc COMPUTE STATISTICS; +--ANALYZE TABLE TARGET.result_citations_oc COMPUTE STATISTICS; create table TARGET.result_classifications stored as parquet as select * from SOURCE.result_classifications orig where exists (select 1 from TARGET.result r where r.id=orig.id); -ANALYZE TABLE TARGET.result_classifications COMPUTE STATISTICS; +--ANALYZE TABLE TARGET.result_classifications COMPUTE STATISTICS; create table TARGET.result_apc stored as parquet as select * from SOURCE.result_apc orig where exists (select 1 from TARGET.result r where r.id=orig.id); -ANALYZE TABLE TARGET.result_apc COMPUTE STATISTICS; +--ANALYZE TABLE TARGET.result_apc COMPUTE STATISTICS; create table TARGET.result_concepts stored as parquet as select * from SOURCE.result_concepts orig where exists (select 1 from TARGET.result r where r.id=orig.id); -ANALYZE TABLE TARGET.result_concepts COMPUTE STATISTICS; +--ANALYZE TABLE TARGET.result_concepts COMPUTE STATISTICS; create table TARGET.result_datasources stored as parquet as select * from SOURCE.result_datasources orig where exists (select 1 from TARGET.result r where r.id=orig.id); -ANALYZE TABLE TARGET.result_datasources COMPUTE STATISTICS; +--ANALYZE TABLE TARGET.result_datasources COMPUTE STATISTICS; create table TARGET.result_fundercount stored as parquet as select * from SOURCE.result_fundercount orig where exists (select 1 from TARGET.result r where r.id=orig.id); -ANALYZE TABLE TARGET.result_fundercount COMPUTE STATISTICS; +--ANALYZE TABLE TARGET.result_fundercount COMPUTE STATISTICS; create table TARGET.result_gold stored as parquet as select * from SOURCE.result_gold orig where exists (select 1 from TARGET.result r where r.id=orig.id); -ANALYZE TABLE TARGET.result_gold COMPUTE STATISTICS; +--ANALYZE TABLE TARGET.result_gold COMPUTE STATISTICS; create table TARGET.result_greenoa stored as parquet as select * from SOURCE.result_greenoa orig where exists (select 1 from TARGET.result r where r.id=orig.id); -ANALYZE TABLE TARGET.result_greenoa COMPUTE STATISTICS; +--ANALYZE TABLE TARGET.result_greenoa COMPUTE STATISTICS; create table TARGET.result_languages stored as parquet as select * from SOURCE.result_languages orig where exists (select 1 from TARGET.result r where r.id=orig.id); -ANALYZE TABLE TARGET.result_languages COMPUTE STATISTICS; +--ANALYZE TABLE TARGET.result_languages COMPUTE STATISTICS; create table TARGET.result_licenses stored as parquet as select * from SOURCE.result_licenses orig where exists (select 1 from TARGET.result r where r.id=orig.id); -ANALYZE TABLE TARGET.result_licenses COMPUTE STATISTICS; +--ANALYZE TABLE TARGET.result_licenses COMPUTE STATISTICS; create table TARGET.licenses_normalized STORED AS PARQUET as select * from SOURCE.licenses_normalized; -ANALYZE TABLE TARGET.licenses_normalized COMPUTE STATISTICS; +--ANALYZE TABLE TARGET.licenses_normalized COMPUTE STATISTICS; create table TARGET.result_oids stored as parquet as select * from SOURCE.result_oids orig where exists (select 1 from TARGET.result r where r.id=orig.id); -ANALYZE TABLE TARGET.result_oids COMPUTE STATISTICS; +--ANALYZE TABLE TARGET.result_oids COMPUTE STATISTICS; create table TARGET.result_organization stored as parquet as select * from SOURCE.result_organization orig where exists (select 1 from TARGET.result r where r.id=orig.id); -ANALYZE TABLE TARGET.result_organization COMPUTE STATISTICS; +--ANALYZE TABLE TARGET.result_organization COMPUTE STATISTICS; create table TARGET.result_peerreviewed stored as parquet as select * from SOURCE.result_peerreviewed orig where exists (select 1 from TARGET.result r where r.id=orig.id); -ANALYZE TABLE TARGET.result_peerreviewed COMPUTE STATISTICS; +--ANALYZE TABLE TARGET.result_peerreviewed COMPUTE STATISTICS; create table TARGET.result_pids stored as parquet as select * from SOURCE.result_pids orig where exists (select 1 from TARGET.result r where r.id=orig.id); -ANALYZE TABLE TARGET.result_pids COMPUTE STATISTICS; +--ANALYZE TABLE TARGET.result_pids COMPUTE STATISTICS; create table TARGET.result_projectcount stored as parquet as select * from SOURCE.result_projectcount orig where exists (select 1 from TARGET.result r where r.id=orig.id); -ANALYZE TABLE TARGET.result_projectcount COMPUTE STATISTICS; +--ANALYZE TABLE TARGET.result_projectcount COMPUTE STATISTICS; create table TARGET.result_projects stored as parquet as select * from SOURCE.result_projects orig where exists (select 1 from TARGET.result r where r.id=orig.id); -ANALYZE TABLE TARGET.result_projects COMPUTE STATISTICS; +--ANALYZE TABLE TARGET.result_projects COMPUTE STATISTICS; create table TARGET.result_refereed stored as parquet as select * from SOURCE.result_refereed orig where exists (select 1 from TARGET.result r where r.id=orig.id); -ANALYZE TABLE TARGET.result_refereed COMPUTE STATISTICS; +--ANALYZE TABLE TARGET.result_refereed COMPUTE STATISTICS; create table TARGET.result_sources stored as parquet as select * from SOURCE.result_sources orig where exists (select 1 from TARGET.result r where r.id=orig.id); -ANALYZE TABLE TARGET.result_sources COMPUTE STATISTICS; +--ANALYZE TABLE TARGET.result_sources COMPUTE STATISTICS; create table TARGET.result_topics stored as parquet as select * from SOURCE.result_topics orig where exists (select 1 from TARGET.result r where r.id=orig.id); -ANALYZE TABLE TARGET.result_topics COMPUTE STATISTICS; +--ANALYZE TABLE TARGET.result_topics COMPUTE STATISTICS; create table TARGET.result_fos stored as parquet as select * from SOURCE.result_fos orig where exists (select 1 from TARGET.result r where r.id=orig.id); -ANALYZE TABLE TARGET.result_fos COMPUTE STATISTICS; +--ANALYZE TABLE TARGET.result_fos COMPUTE STATISTICS; create table TARGET.result_accessroute stored as parquet as select * from SOURCE.result_accessroute orig where exists (select 1 from TARGET.result r where r.id=orig.id); -ANALYZE TABLE TARGET.result_accessroute COMPUTE STATISTICS; +--ANALYZE TABLE TARGET.result_accessroute COMPUTE STATISTICS; create view TARGET.foo1 as select * from SOURCE.result_result rr where rr.source in (select id from TARGET.result); create view TARGET.foo2 as select * from SOURCE.result_result rr where rr.target in (select id from TARGET.result); create table TARGET.result_result STORED AS PARQUET as select distinct * from (select * from TARGET.foo1 union all select * from TARGET.foo2) foufou; drop view TARGET.foo1; drop view TARGET.foo2; -ANALYZE TABLE TARGET.result_result COMPUTE STATISTICS; +--ANALYZE TABLE TARGET.result_result COMPUTE STATISTICS; -- datasources create view if not exists TARGET.datasource as select * from SOURCE.datasource; @@ -175,7 +175,7 @@ create view if not exists TARGET.datasource_organizations as select * from SOURC create view if not exists TARGET.datasource_sources as select * from SOURCE.datasource_sources; create table TARGET.datasource_results stored as parquet as select id as result, datasource as id from TARGET.result_datasources; -ANALYZE TABLE TARGET.datasource_results COMPUTE STATISTICS; +--ANALYZE TABLE TARGET.datasource_results COMPUTE STATISTICS; -- organizations create view if not exists TARGET.organization as select * from SOURCE.organization; @@ -193,28 +193,28 @@ create view if not exists TARGET.project_classification as select * from SOURCE. create view if not exists TARGET.project_organization_contribution as select * from SOURCE.project_organization_contribution; create table TARGET.project_results stored as parquet as select id as result, project as id from TARGET.result_projects; -ANALYZE TABLE TARGET.project_results COMPUTE STATISTICS; +--ANALYZE TABLE TARGET.project_results COMPUTE STATISTICS; -- indicators -- Sprint 1 ---- create table TARGET.indi_pub_green_oa stored as parquet as select * from SOURCE.indi_pub_green_oa orig where exists (select 1 from TARGET.result r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_pub_green_oa COMPUTE STATISTICS; +--ANALYZE TABLE TARGET.indi_pub_green_oa COMPUTE STATISTICS; create table TARGET.indi_pub_grey_lit stored as parquet as select * from SOURCE.indi_pub_grey_lit orig where exists (select 1 from TARGET.result r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_pub_grey_lit COMPUTE STATISTICS; +--ANALYZE TABLE TARGET.indi_pub_grey_lit COMPUTE STATISTICS; create table TARGET.indi_pub_doi_from_crossref stored as parquet as select * from SOURCE.indi_pub_doi_from_crossref orig where exists (select 1 from TARGET.result r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_pub_doi_from_crossref COMPUTE STATISTICS; +--ANALYZE TABLE TARGET.indi_pub_doi_from_crossref COMPUTE STATISTICS; -- Sprint 2 ---- create table TARGET.indi_result_has_cc_licence stored as parquet as select * from SOURCE.indi_result_has_cc_licence orig where exists (select 1 from TARGET.result r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_result_has_cc_licence COMPUTE STATISTICS; +--ANALYZE TABLE TARGET.indi_result_has_cc_licence COMPUTE STATISTICS; create table TARGET.indi_result_has_cc_licence_url stored as parquet as select * from SOURCE.indi_result_has_cc_licence_url orig where exists (select 1 from TARGET.result r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_result_has_cc_licence_url COMPUTE STATISTICS; +--ANALYZE TABLE TARGET.indi_result_has_cc_licence_url COMPUTE STATISTICS; create table TARGET.indi_pub_has_abstract stored as parquet as select * from SOURCE.indi_pub_has_abstract orig where exists (select 1 from TARGET.result r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_pub_has_abstract COMPUTE STATISTICS; +--ANALYZE TABLE TARGET.indi_pub_has_abstract COMPUTE STATISTICS; create table TARGET.indi_result_with_orcid stored as parquet as select * from SOURCE.indi_result_with_orcid orig where exists (select 1 from TARGET.result r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_result_with_orcid COMPUTE STATISTICS; +--ANALYZE TABLE TARGET.indi_result_with_orcid COMPUTE STATISTICS; ---- Sprint 3 ---- create table TARGET.indi_funded_result_with_fundref stored as parquet as select * from SOURCE.indi_funded_result_with_fundref orig where exists (select 1 from TARGET.result r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_funded_result_with_fundref COMPUTE STATISTICS; +--ANALYZE TABLE TARGET.indi_funded_result_with_fundref COMPUTE STATISTICS; create view TARGET.indi_result_org_collab as select * from SOURCE.indi_result_org_collab; create view TARGET.indi_result_org_country_collab as select * from SOURCE.indi_result_org_country_collab; create view TARGET.indi_project_collab_org as select * from SOURCE.indi_project_collab_org; @@ -223,32 +223,32 @@ create view TARGET.indi_funder_country_collab as select * from SOURCE.indi_funde create view TARGET.indi_result_country_collab as select * from SOURCE.indi_result_country_collab; ---- Sprint 4 ---- create table TARGET.indi_pub_diamond stored as parquet as select * from SOURCE.indi_pub_diamond orig where exists (select 1 from TARGET.result r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_pub_diamond COMPUTE STATISTICS; +--ANALYZE TABLE TARGET.indi_pub_diamond COMPUTE STATISTICS; create table TARGET.indi_pub_in_transformative stored as parquet as select * from SOURCE.indi_pub_in_transformative orig where exists (select 1 from TARGET.result r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_pub_in_transformative COMPUTE STATISTICS; +--ANALYZE TABLE TARGET.indi_pub_in_transformative COMPUTE STATISTICS; create table TARGET.indi_pub_closed_other_open stored as parquet as select * from SOURCE.indi_pub_closed_other_open orig where exists (select 1 from TARGET.result r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_pub_closed_other_open COMPUTE STATISTICS; +--ANALYZE TABLE TARGET.indi_pub_closed_other_open COMPUTE STATISTICS; ---- Sprint 5 ---- create table TARGET.indi_result_no_of_copies stored as parquet as select * from SOURCE.indi_result_no_of_copies orig where exists (select 1 from TARGET.result r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_result_no_of_copies COMPUTE STATISTICS; +--ANALYZE TABLE TARGET.indi_result_no_of_copies COMPUTE STATISTICS; ---- Sprint 6 ---- create table TARGET.indi_pub_hybrid_oa_with_cc stored as parquet as select * from SOURCE.indi_pub_hybrid_oa_with_cc orig where exists (select 1 from TARGET.result r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_pub_hybrid_oa_with_cc COMPUTE STATISTICS; +--ANALYZE TABLE TARGET.indi_pub_hybrid_oa_with_cc COMPUTE STATISTICS; create table TARGET.indi_pub_bronze_oa stored as parquet as select * from SOURCE.indi_pub_bronze_oa orig where exists (select 1 from TARGET.result r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_pub_bronze_oa COMPUTE STATISTICS; +--ANALYZE TABLE TARGET.indi_pub_bronze_oa COMPUTE STATISTICS; create table TARGET.indi_pub_downloads stored as parquet as select * from SOURCE.indi_pub_downloads orig where exists (select 1 from TARGET.result r where r.id=orig.result_id); -ANALYZE TABLE TARGET.indi_pub_downloads COMPUTE STATISTICS; +--ANALYZE TABLE TARGET.indi_pub_downloads COMPUTE STATISTICS; create table TARGET.indi_pub_downloads_datasource stored as parquet as select * from SOURCE.indi_pub_downloads_datasource orig where exists (select 1 from TARGET.result r where r.id=orig.result_id); -ANALYZE TABLE TARGET.indi_pub_downloads_datasource COMPUTE STATISTICS; +--ANALYZE TABLE TARGET.indi_pub_downloads_datasource COMPUTE STATISTICS; create table TARGET.indi_pub_downloads_year stored as parquet as select * from SOURCE.indi_pub_downloads_year orig where exists (select 1 from TARGET.result r where r.id=orig.result_id); -ANALYZE TABLE TARGET.indi_pub_downloads_year COMPUTE STATISTICS; +--ANALYZE TABLE TARGET.indi_pub_downloads_year COMPUTE STATISTICS; create table TARGET.indi_pub_downloads_datasource_year stored as parquet as select * from SOURCE.indi_pub_downloads_datasource_year orig where exists (select 1 from TARGET.result r where r.id=orig.result_id); -ANALYZE TABLE TARGET.indi_pub_downloads_datasource_year COMPUTE STATISTICS; +--ANALYZE TABLE TARGET.indi_pub_downloads_datasource_year COMPUTE STATISTICS; ---- Sprint 7 ---- create table TARGET.indi_pub_gold_oa stored as parquet as select * from SOURCE.indi_pub_gold_oa orig where exists (select 1 from TARGET.result r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_pub_gold_oa COMPUTE STATISTICS; +--ANALYZE TABLE TARGET.indi_pub_gold_oa COMPUTE STATISTICS; create table TARGET.indi_pub_hybrid stored as parquet as select * from SOURCE.indi_pub_hybrid orig where exists (select 1 from TARGET.result r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_pub_hybrid COMPUTE STATISTICS; +--ANALYZE TABLE TARGET.indi_pub_hybrid COMPUTE STATISTICS; create view TARGET.indi_org_fairness as select * from SOURCE.indi_org_fairness; create view TARGET.indi_org_fairness_pub_pr as select * from SOURCE.indi_org_fairness_pub_pr; create view TARGET.indi_org_fairness_pub_year as select * from SOURCE.indi_org_fairness_pub_year; @@ -259,12 +259,14 @@ create view TARGET.indi_org_findable as select * from SOURCE.indi_org_findable; create view TARGET.indi_org_openess as select * from SOURCE.indi_org_openess; create view TARGET.indi_org_openess_year as select * from SOURCE.indi_org_openess_year; create table TARGET.indi_pub_has_preprint stored as parquet as select * from SOURCE.indi_pub_has_preprint orig where exists (select 1 from TARGET.result r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_pub_has_preprint COMPUTE STATISTICS; +--ANALYZE TABLE TARGET.indi_pub_has_preprint COMPUTE STATISTICS; create table TARGET.indi_pub_in_subscribed stored as parquet as select * from SOURCE.indi_pub_in_subscribed orig where exists (select 1 from TARGET.result r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_pub_in_subscribed COMPUTE STATISTICS; +--ANALYZE TABLE TARGET.indi_pub_in_subscribed COMPUTE STATISTICS; create table TARGET.indi_result_with_pid stored as parquet as select * from SOURCE.indi_result_with_pid orig where exists (select 1 from TARGET.result r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_result_with_pid COMPUTE STATISTICS; +--ANALYZE TABLE TARGET.indi_result_with_pid COMPUTE STATISTICS; create table TARGET.indi_impact_measures stored as parquet as select * from SOURCE.indi_impact_measures orig where exists (select 1 from TARGET.result r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_impact_measures COMPUTE STATISTICS; +--ANALYZE TABLE TARGET.indi_impact_measures COMPUTE STATISTICS; create table TARGET.indi_pub_interdisciplinarity stored as parquet as select * from SOURCE.indi_pub_interdisciplinarity orig where exists (select 1 from TARGET.result r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_pub_interdisciplinarity COMPUTE STATISTICS; +--ANALYZE TABLE TARGET.indi_pub_interdisciplinarity COMPUTE STATISTICS; +create table TARGET.result_apc_affiliations stored as parquet as select * from SOURCE.result_apc_affiliations orig where exists (select 1 from TARGET.result r where r.id=orig.id); +--ANALYZE TABLE TARGET.result_apc_affiliations COMPUTE STATISTICS; diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDBAll.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDBAll.sql new file mode 100644 index 000000000..a59791084 --- /dev/null +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDBAll.sql @@ -0,0 +1,276 @@ +drop database if exists TARGET cascade; +create database if not exists TARGET; + +create view if not exists TARGET.category as select * from SOURCE.category; +create view if not exists TARGET.concept as select * from SOURCE.concept; +create view if not exists TARGET.context as select * from SOURCE.context; +create view if not exists TARGET.country as select * from SOURCE.country; +create view if not exists TARGET.countrygdp as select * from SOURCE.countrygdp; +create view if not exists TARGET.creation_date as select * from SOURCE.creation_date; +create view if not exists TARGET.funder as select * from SOURCE.funder; +create view if not exists TARGET.fundref as select * from SOURCE.fundref; +create view if not exists TARGET.rndexpenditure as select * from SOURCE.rndexpediture; +create view if not exists TARGET.rndgdpexpenditure as select * from SOURCE.rndgdpexpenditure; +create view if not exists TARGET.doctoratestudents as select * from SOURCE.doctoratestudents; +create view if not exists TARGET.totalresearchers as select * from SOURCE.totalresearchers; +create view if not exists TARGET.totalresearchersft as select * from SOURCE.totalresearchersft; +create view if not exists TARGET.hrrst as select * from SOURCE.hrrst; + +create table TARGET.result stored as parquet as + select distinct * from ( + select * from SOURCE.result r where exists (select 1 from SOURCE.result_projects rp join SOURCE.project p on rp.project=p.id where rp.id=r.id) + union all + select * from SOURCE.result r where exists (select 1 from SOURCE.result_concepts rc where rc.id=r.id) + union all + select * from SOURCE.result r where exists (select 1 from SOURCE.result_organization ro where ro.id=r.id and ro.organization in ( + 'openorgs____::b84450f9864182c67b8611b5593f4250', --"Athena Research and Innovation Center In Information Communication & Knowledge Technologies', --ARC" + 'openorgs____::d41cf6bd4ab1b1362a44397e0b95c975', --National Research Council + 'openorgs____::d2a09b9d5eabb10c95f9470e172d05d2', --??? Not exists ?? + 'openorgs____::d169c7407dd417152596908d48c11460', --Masaryk University + 'openorgs____::1ec924b1759bb16d0a02f2dad8689b21', --University of Belgrade + 'openorgs____::0ae431b820e4c33db8967fbb2b919150', --University of Helsinki + 'openorgs____::759d59f05d77188faee99b7493b46805', --University of Minho + 'openorgs____::cad284878801b9465fa51a95b1d779db', --Universidad Politécnica de Madrid + 'openorgs____::eadc8da90a546e98c03f896661a2e4d4', --University of Göttingen + 'openorgs____::c0286313e36479eff8676dba9b724b40', --National and Kapodistrian University of Athens + -- 'openorgs____::c80a8243a5e5c620d7931c88d93bf17a', --Université Paris Diderot + 'openorgs____::c08634f0a6b0081c3dc6e6c93a4314f3', --Bielefeld University + 'openorgs____::6fc85e4a8f7ecaf4b0c738d010e967ea', --University of Southern Denmark + 'openorgs____::3d6122f87f9a97a99d8f6e3d73313720', --Humboldt-Universität zu Berlin + 'openorgs____::16720ada63d0fa8ca41601feae7d1aa5', --TU Darmstadt + 'openorgs____::ccc0a066b56d2cfaf90c2ae369df16f5', --KU Leuven + 'openorgs____::4c6f119632adf789746f0a057ed73e90', --University of the Western Cape + 'openorgs____::ec3665affa01aeafa28b7852c4176dbd', --Rudjer Boskovic Institute + 'openorgs____::5f31346d444a7f06a28c880fb170b0f6', --Ghent University + 'openorgs____::2dbe47117fd5409f9c61620813456632', --University of Luxembourg + 'openorgs____::6445d7758d3a40c4d997953b6632a368', --National Institute of Informatics (NII) + 'openorgs____::b77c01aa15de3675da34277d48de2ec1', -- Valencia Catholic University Saint Vincent Martyr + 'openorgs____::7fe2f66cdc43983c6b24816bfe9cf6a0', -- Unviersity of Warsaw + 'openorgs____::15e7921fc50d9aa1229a82a84429419e', -- University Of Thessaly + 'openorgs____::11f7919dadc8f8a7251af54bba60c956', -- Technical University of Crete + 'openorgs____::84f0c5f5dbb6daf42748485924efde4b', -- University of Piraeus + 'openorgs____::4ac562f0376fce3539504567649cb373', -- University of Patras + 'openorgs____::3e8d1f8c3f6cd7f418b09f1f58b4873b', -- Aristotle University of Thessaloniki + 'openorgs____::3fcef6e1c469c10f2a84b281372c9814', -- World Bank + 'openorgs____::1698a2eb1885ef8adb5a4a969e745ad3', -- École des Ponts ParisTech + 'openorgs____::e15adb13c4dadd49de4d35c39b5da93a', -- Nanyang Technological University + 'openorgs____::4b34103bde246228fcd837f5f1bf4212', -- Autonomous University of Barcelona + 'openorgs____::72ec75fcfc4e0df1a76dc4c49007fceb', -- McMaster University + 'openorgs____::51c7fc556e46381734a25a6fbc3fd398', -- University of Modena and Reggio Emilia + 'openorgs____::235d7f9ad18ecd7e6dc62ea4990cb9db', -- Bilkent University + 'openorgs____::31f2fa9e05b49d4cf40a19c3fed8eb06', -- Saints Cyril and Methodius University of Skopje + 'openorgs____::db7686f30f22cbe73a4fde872ce812a6', -- University of Milan + 'openorgs____::b8b8ca674452579f3f593d9f5e557483', -- University College Cork + 'openorgs____::38d7097854736583dde879d12dacafca', -- Brown University + 'openorgs____::57784c9e047e826fefdb1ef816120d92', --Arts et Métiers ParisTech + 'openorgs____::2530baca8a15936ba2e3297f2bce2e7e', -- University of Cape Town + 'openorgs____::d11f981828c485cd23d93f7f24f24db1', -- Technological University Dublin + 'openorgs____::5e6bf8962665cdd040341171e5c631d8', -- Delft University of Technology + 'openorgs____::846cb428d3f52a445f7275561a7beb5d', -- University of Manitoba + 'openorgs____::eb391317ed0dc684aa81ac16265de041', -- Universitat Rovira i Virgili + 'openorgs____::66aa9fc2fceb271423dfabcc38752dc0', -- Lund University + 'openorgs____::3cff625a4370d51e08624cc586138b2f', -- IMT Atlantique + 'openorgs____::c0b262bd6eab819e4c994914f9c010e2', -- National Institute of Geophysics and Volcanology + 'openorgs____::1624ff7c01bb641b91f4518539a0c28a', -- Vrije Universiteit Amsterdam + 'openorgs____::4d4051b56708688235252f1d8fddb8c1', --Iscte - Instituto Universitário de Lisboa + 'openorgs____::ab4ac74c35fa5dada770cf08e5110fab' -- Universidade Católica Portuguesa + ) )) foo; + +--ANALYZE TABLE TARGET.result COMPUTE STATISTICS; + +create view if not exists TARGET.category as select * from SOURCE.category; +create view if not exists TARGET.concept as select * from SOURCE.concept; +create view if not exists TARGET.context as select * from SOURCE.context; +create view if not exists TARGET.country as select * from SOURCE.country; +create view if not exists TARGET.countrygdp as select * from SOURCE.countrygdp; +create view if not exists TARGET.creation_date as select * from SOURCE.creation_date; +create view if not exists TARGET.funder as select * from SOURCE.funder; +create view if not exists TARGET.fundref as select * from SOURCE.fundref; +create view if not exists TARGET.rndexpenditure as select * from SOURCE.rndexpediture; +create view if not exists TARGET.rndgdpexpenditure as select * from SOURCE.rndgdpexpenditure; +create view if not exists TARGET.doctoratestudents as select * from SOURCE.doctoratestudents; +create view if not exists TARGET.totalresearchers as select * from SOURCE.totalresearchers; +create view if not exists TARGET.totalresearchersft as select * from SOURCE.totalresearchersft; +create view if not exists TARGET.hrrst as select * from SOURCE.hrrst; + +create table TARGET.result_citations stored as parquet as select * from SOURCE.result_citations orig where exists (select 1 from TARGET.result r where r.id=orig.id); +--ANALYZE TABLE TARGET.result_citations COMPUTE STATISTICS; + +create table TARGET.result_references_oc stored as parquet as select * from SOURCE.result_references_oc orig where exists (select 1 from TARGET.result r where r.id=orig.id); +--ANALYZE TABLE TARGET.result_references_oc COMPUTE STATISTICS; + +create table TARGET.result_citations_oc stored as parquet as select * from SOURCE.result_citations_oc orig where exists (select 1 from TARGET.result r where r.id=orig.id); +--ANALYZE TABLE TARGET.result_citations_oc COMPUTE STATISTICS; + +create table TARGET.result_classifications stored as parquet as select * from SOURCE.result_classifications orig where exists (select 1 from TARGET.result r where r.id=orig.id); +--ANALYZE TABLE TARGET.result_classifications COMPUTE STATISTICS; + +create table TARGET.result_apc stored as parquet as select * from SOURCE.result_apc orig where exists (select 1 from TARGET.result r where r.id=orig.id); +--ANALYZE TABLE TARGET.result_apc COMPUTE STATISTICS; + +create table TARGET.result_concepts stored as parquet as select * from SOURCE.result_concepts orig where exists (select 1 from TARGET.result r where r.id=orig.id); +--ANALYZE TABLE TARGET.result_concepts COMPUTE STATISTICS; + +create table TARGET.result_datasources stored as parquet as select * from SOURCE.result_datasources orig where exists (select 1 from TARGET.result r where r.id=orig.id); +--ANALYZE TABLE TARGET.result_datasources COMPUTE STATISTICS; + +create table TARGET.result_fundercount stored as parquet as select * from SOURCE.result_fundercount orig where exists (select 1 from TARGET.result r where r.id=orig.id); +--ANALYZE TABLE TARGET.result_fundercount COMPUTE STATISTICS; + +create table TARGET.result_gold stored as parquet as select * from SOURCE.result_gold orig where exists (select 1 from TARGET.result r where r.id=orig.id); +--ANALYZE TABLE TARGET.result_gold COMPUTE STATISTICS; + +create table TARGET.result_greenoa stored as parquet as select * from SOURCE.result_greenoa orig where exists (select 1 from TARGET.result r where r.id=orig.id); +--ANALYZE TABLE TARGET.result_greenoa COMPUTE STATISTICS; + +create table TARGET.result_languages stored as parquet as select * from SOURCE.result_languages orig where exists (select 1 from TARGET.result r where r.id=orig.id); +--ANALYZE TABLE TARGET.result_languages COMPUTE STATISTICS; + +create table TARGET.result_licenses stored as parquet as select * from SOURCE.result_licenses orig where exists (select 1 from TARGET.result r where r.id=orig.id); +--ANALYZE TABLE TARGET.result_licenses COMPUTE STATISTICS; + +create table TARGET.licenses_normalized STORED AS PARQUET as select * from SOURCE.licenses_normalized; +--ANALYZE TABLE TARGET.licenses_normalized COMPUTE STATISTICS; + +create table TARGET.result_oids stored as parquet as select * from SOURCE.result_oids orig where exists (select 1 from TARGET.result r where r.id=orig.id); +--ANALYZE TABLE TARGET.result_oids COMPUTE STATISTICS; + +create table TARGET.result_organization stored as parquet as select * from SOURCE.result_organization orig where exists (select 1 from TARGET.result r where r.id=orig.id); +--ANALYZE TABLE TARGET.result_organization COMPUTE STATISTICS; + +create table TARGET.result_peerreviewed stored as parquet as select * from SOURCE.result_peerreviewed orig where exists (select 1 from TARGET.result r where r.id=orig.id); +--ANALYZE TABLE TARGET.result_peerreviewed COMPUTE STATISTICS; + +create table TARGET.result_pids stored as parquet as select * from SOURCE.result_pids orig where exists (select 1 from TARGET.result r where r.id=orig.id); +--ANALYZE TABLE TARGET.result_pids COMPUTE STATISTICS; + +create table TARGET.result_projectcount stored as parquet as select * from SOURCE.result_projectcount orig where exists (select 1 from TARGET.result r where r.id=orig.id); +--ANALYZE TABLE TARGET.result_projectcount COMPUTE STATISTICS; + +create table TARGET.result_projects stored as parquet as select * from SOURCE.result_projects orig where exists (select 1 from TARGET.result r where r.id=orig.id); +--ANALYZE TABLE TARGET.result_projects COMPUTE STATISTICS; + +create table TARGET.result_refereed stored as parquet as select * from SOURCE.result_refereed orig where exists (select 1 from TARGET.result r where r.id=orig.id); +--ANALYZE TABLE TARGET.result_refereed COMPUTE STATISTICS; + +create table TARGET.result_sources stored as parquet as select * from SOURCE.result_sources orig where exists (select 1 from TARGET.result r where r.id=orig.id); +--ANALYZE TABLE TARGET.result_sources COMPUTE STATISTICS; + +create table TARGET.result_topics stored as parquet as select * from SOURCE.result_topics orig where exists (select 1 from TARGET.result r where r.id=orig.id); +--ANALYZE TABLE TARGET.result_topics COMPUTE STATISTICS; + +create table TARGET.result_fos stored as parquet as select * from SOURCE.result_fos orig where exists (select 1 from TARGET.result r where r.id=orig.id); +--ANALYZE TABLE TARGET.result_fos COMPUTE STATISTICS; + +create table TARGET.result_accessroute stored as parquet as select * from SOURCE.result_accessroute orig where exists (select 1 from TARGET.result r where r.id=orig.id); +--ANALYZE TABLE TARGET.result_accessroute COMPUTE STATISTICS; + +create view TARGET.foo1 as select * from SOURCE.result_result rr where rr.source in (select id from TARGET.result); +create view TARGET.foo2 as select * from SOURCE.result_result rr where rr.target in (select id from TARGET.result); +create table TARGET.result_result STORED AS PARQUET as select distinct * from (select * from TARGET.foo1 union all select * from TARGET.foo2) foufou; +drop view TARGET.foo1; +drop view TARGET.foo2; +--ANALYZE TABLE TARGET.result_result COMPUTE STATISTICS; + +-- datasources +create view if not exists TARGET.datasource as select * from SOURCE.datasource; +create view if not exists TARGET.datasource_oids as select * from SOURCE.datasource_oids; +create view if not exists TARGET.datasource_organizations as select * from SOURCE.datasource_organizations; +create view if not exists TARGET.datasource_sources as select * from SOURCE.datasource_sources; + +create table TARGET.datasource_results stored as parquet as select id as result, datasource as id from TARGET.result_datasources; +--ANALYZE TABLE TARGET.datasource_results COMPUTE STATISTICS; + +-- organizations +create view if not exists TARGET.organization as select * from SOURCE.organization; +create view if not exists TARGET.organization_datasources as select * from SOURCE.organization_datasources; +create view if not exists TARGET.organization_pids as select * from SOURCE.organization_pids; +create view if not exists TARGET.organization_projects as select * from SOURCE.organization_projects; +create view if not exists TARGET.organization_sources as select * from SOURCE.organization_sources; + +-- projects +create view if not exists TARGET.project as select * from SOURCE.project; +create view if not exists TARGET.project_oids as select * from SOURCE.project_oids; +create view if not exists TARGET.project_organizations as select * from SOURCE.project_organizations; +create view if not exists TARGET.project_resultcount as select * from SOURCE.project_resultcount; +create view if not exists TARGET.project_classification as select * from SOURCE.project_classification; +create view if not exists TARGET.project_organization_contribution as select * from SOURCE.project_organization_contribution; + +create table TARGET.project_results stored as parquet as select id as result, project as id from TARGET.result_projects; +--ANALYZE TABLE TARGET.project_results COMPUTE STATISTICS; + +-- indicators +-- Sprint 1 ---- +create table TARGET.indi_pub_green_oa stored as parquet as select * from SOURCE.indi_pub_green_oa orig where exists (select 1 from TARGET.result r where r.id=orig.id); +--ANALYZE TABLE TARGET.indi_pub_green_oa COMPUTE STATISTICS; +create table TARGET.indi_pub_grey_lit stored as parquet as select * from SOURCE.indi_pub_grey_lit orig where exists (select 1 from TARGET.result r where r.id=orig.id); +--ANALYZE TABLE TARGET.indi_pub_grey_lit COMPUTE STATISTICS; +create table TARGET.indi_pub_doi_from_crossref stored as parquet as select * from SOURCE.indi_pub_doi_from_crossref orig where exists (select 1 from TARGET.result r where r.id=orig.id); +--ANALYZE TABLE TARGET.indi_pub_doi_from_crossref COMPUTE STATISTICS; +-- Sprint 2 ---- +create table TARGET.indi_result_has_cc_licence stored as parquet as select * from SOURCE.indi_result_has_cc_licence orig where exists (select 1 from TARGET.result r where r.id=orig.id); +--ANALYZE TABLE TARGET.indi_result_has_cc_licence COMPUTE STATISTICS; +create table TARGET.indi_result_has_cc_licence_url stored as parquet as select * from SOURCE.indi_result_has_cc_licence_url orig where exists (select 1 from TARGET.result r where r.id=orig.id); +--ANALYZE TABLE TARGET.indi_result_has_cc_licence_url COMPUTE STATISTICS; +create table TARGET.indi_pub_has_abstract stored as parquet as select * from SOURCE.indi_pub_has_abstract orig where exists (select 1 from TARGET.result r where r.id=orig.id); +--ANALYZE TABLE TARGET.indi_pub_has_abstract COMPUTE STATISTICS; +create table TARGET.indi_result_with_orcid stored as parquet as select * from SOURCE.indi_result_with_orcid orig where exists (select 1 from TARGET.result r where r.id=orig.id); +--ANALYZE TABLE TARGET.indi_result_with_orcid COMPUTE STATISTICS; +---- Sprint 3 ---- +create table TARGET.indi_funded_result_with_fundref stored as parquet as select * from SOURCE.indi_funded_result_with_fundref orig where exists (select 1 from TARGET.result r where r.id=orig.id); +--ANALYZE TABLE TARGET.indi_funded_result_with_fundref COMPUTE STATISTICS; +create view TARGET.indi_result_org_collab as select * from SOURCE.indi_result_org_collab; +create view TARGET.indi_result_org_country_collab as select * from SOURCE.indi_result_org_country_collab; +create view TARGET.indi_project_collab_org as select * from SOURCE.indi_project_collab_org; +create view TARGET.indi_project_collab_org_country as select * from SOURCE.indi_project_collab_org_country; +create view TARGET.indi_funder_country_collab as select * from SOURCE.indi_funder_country_collab; +create view TARGET.indi_result_country_collab as select * from SOURCE.indi_result_country_collab; +---- Sprint 4 ---- +create table TARGET.indi_pub_diamond stored as parquet as select * from SOURCE.indi_pub_diamond orig where exists (select 1 from TARGET.result r where r.id=orig.id); +--ANALYZE TABLE TARGET.indi_pub_diamond COMPUTE STATISTICS; +create table TARGET.indi_pub_in_transformative stored as parquet as select * from SOURCE.indi_pub_in_transformative orig where exists (select 1 from TARGET.result r where r.id=orig.id); +--ANALYZE TABLE TARGET.indi_pub_in_transformative COMPUTE STATISTICS; +create table TARGET.indi_pub_closed_other_open stored as parquet as select * from SOURCE.indi_pub_closed_other_open orig where exists (select 1 from TARGET.result r where r.id=orig.id); +--ANALYZE TABLE TARGET.indi_pub_closed_other_open COMPUTE STATISTICS; +---- Sprint 5 ---- +create table TARGET.indi_result_no_of_copies stored as parquet as select * from SOURCE.indi_result_no_of_copies orig where exists (select 1 from TARGET.result r where r.id=orig.id); +--ANALYZE TABLE TARGET.indi_result_no_of_copies COMPUTE STATISTICS; +---- Sprint 6 ---- +create table TARGET.indi_pub_hybrid_oa_with_cc stored as parquet as select * from SOURCE.indi_pub_hybrid_oa_with_cc orig where exists (select 1 from TARGET.result r where r.id=orig.id); +--ANALYZE TABLE TARGET.indi_pub_hybrid_oa_with_cc COMPUTE STATISTICS; +create table TARGET.indi_pub_bronze_oa stored as parquet as select * from SOURCE.indi_pub_bronze_oa orig where exists (select 1 from TARGET.result r where r.id=orig.id); +--ANALYZE TABLE TARGET.indi_pub_bronze_oa COMPUTE STATISTICS; +create table TARGET.indi_pub_downloads stored as parquet as select * from SOURCE.indi_pub_downloads orig where exists (select 1 from TARGET.result r where r.id=orig.result_id); +--ANALYZE TABLE TARGET.indi_pub_downloads COMPUTE STATISTICS; +create table TARGET.indi_pub_downloads_datasource stored as parquet as select * from SOURCE.indi_pub_downloads_datasource orig where exists (select 1 from TARGET.result r where r.id=orig.result_id); +--ANALYZE TABLE TARGET.indi_pub_downloads_datasource COMPUTE STATISTICS; +create table TARGET.indi_pub_downloads_year stored as parquet as select * from SOURCE.indi_pub_downloads_year orig where exists (select 1 from TARGET.result r where r.id=orig.result_id); +--ANALYZE TABLE TARGET.indi_pub_downloads_year COMPUTE STATISTICS; +create table TARGET.indi_pub_downloads_datasource_year stored as parquet as select * from SOURCE.indi_pub_downloads_datasource_year orig where exists (select 1 from TARGET.result r where r.id=orig.result_id); +--ANALYZE TABLE TARGET.indi_pub_downloads_datasource_year COMPUTE STATISTICS; +---- Sprint 7 ---- +create table TARGET.indi_pub_gold_oa stored as parquet as select * from SOURCE.indi_pub_gold_oa orig where exists (select 1 from TARGET.result r where r.id=orig.id); +--ANALYZE TABLE TARGET.indi_pub_gold_oa COMPUTE STATISTICS; +create table TARGET.indi_pub_hybrid stored as parquet as select * from SOURCE.indi_pub_hybrid orig where exists (select 1 from TARGET.result r where r.id=orig.id); +--ANALYZE TABLE TARGET.indi_pub_hybrid COMPUTE STATISTICS; +create view TARGET.indi_org_fairness as select * from SOURCE.indi_org_fairness; +create view TARGET.indi_org_fairness_pub_pr as select * from SOURCE.indi_org_fairness_pub_pr; +create view TARGET.indi_org_fairness_pub_year as select * from SOURCE.indi_org_fairness_pub_year; +create view TARGET.indi_org_fairness_pub as select * from SOURCE.indi_org_fairness_pub; +create view TARGET.indi_org_fairness_year as select * from SOURCE.indi_org_fairness_year; +create view TARGET.indi_org_findable_year as select * from SOURCE.indi_org_findable_year; +create view TARGET.indi_org_findable as select * from SOURCE.indi_org_findable; +create view TARGET.indi_org_openess as select * from SOURCE.indi_org_openess; +create view TARGET.indi_org_openess_year as select * from SOURCE.indi_org_openess_year; +create table TARGET.indi_pub_has_preprint stored as parquet as select * from SOURCE.indi_pub_has_preprint orig where exists (select 1 from TARGET.result r where r.id=orig.id); +--ANALYZE TABLE TARGET.indi_pub_has_preprint COMPUTE STATISTICS; +create table TARGET.indi_pub_in_subscribed stored as parquet as select * from SOURCE.indi_pub_in_subscribed orig where exists (select 1 from TARGET.result r where r.id=orig.id); +--ANALYZE TABLE TARGET.indi_pub_in_subscribed COMPUTE STATISTICS; +create table TARGET.indi_result_with_pid stored as parquet as select * from SOURCE.indi_result_with_pid orig where exists (select 1 from TARGET.result r where r.id=orig.id); +--ANALYZE TABLE TARGET.indi_result_with_pid COMPUTE STATISTICS; +create table TARGET.indi_impact_measures stored as parquet as select * from SOURCE.indi_impact_measures orig where exists (select 1 from TARGET.result r where r.id=orig.id); +--ANALYZE TABLE TARGET.indi_impact_measures COMPUTE STATISTICS; +create table TARGET.indi_pub_interdisciplinarity stored as parquet as select * from SOURCE.indi_pub_interdisciplinarity orig where exists (select 1 from TARGET.result r where r.id=orig.id); +--ANALYZE TABLE TARGET.indi_pub_interdisciplinarity COMPUTE STATISTICS; +create table TARGET.result_apc_affiliations stored as parquet as select * from SOURCE.result_apc_affiliations orig where exists (select 1 from TARGET.result r where r.id=orig.id); +--ANALYZE TABLE TARGET.result_apc_affiliations COMPUTE STATISTICS; diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB_RIs.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB_RIs.sql index 92b40405d..9a9407c2d 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB_RIs.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB_RIs.sql @@ -12,4 +12,4 @@ create table TARGET.result stored as parquet as -- join SOURCE.result where rc.id=r.id and conc.category like CONTEXT) ) foo; -ANALYZE TABLE TARGET.result COMPUTE STATISTICS; \ No newline at end of file +--ANALYZE TABLE TARGET.result COMPUTE STATISTICS; \ No newline at end of file diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB_RIs_tail.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB_RIs_tail.sql index ef6d08d79..bad18efde 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB_RIs_tail.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB_RIs_tail.sql @@ -12,4 +12,4 @@ create table TARGET.result stored as parquet as -- join SOURCE.result where rc.id=r.id and conc.category not in (CONTEXTS)) ) foo; -ANALYZE TABLE TARGET.result COMPUTE STATISTICS; \ No newline at end of file +--ANALYZE TABLE TARGET.result COMPUTE STATISTICS; \ No newline at end of file diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB_funded.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB_funded.sql index 8d8739c74..b8d3c0242 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB_funded.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB_funded.sql @@ -6,4 +6,4 @@ create table TARGET.result stored as parquet as select * from SOURCE.result r where exists (select 1 from SOURCE.result_projects rp join SOURCE.project p on rp.project=p.id where rp.id=r.id) ) foo; -ANALYZE TABLE TARGET.result COMPUTE STATISTICS; \ No newline at end of file +--ANALYZE TABLE TARGET.result COMPUTE STATISTICS; \ No newline at end of file diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB_institutions.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB_institutions.sql index 442e623cd..1f75c3cd1 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB_institutions.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB_institutions.sql @@ -42,7 +42,7 @@ create table TARGET.result stored as parquet as 'openorgs____::31f2fa9e05b49d4cf40a19c3fed8eb06', -- Saints Cyril and Methodius University of Skopje 'openorgs____::db7686f30f22cbe73a4fde872ce812a6', -- University of Milan 'openorgs____::b8b8ca674452579f3f593d9f5e557483', -- University College Cork - 'openorgs____::38d7097854736583dde879d12dacafca' -- Brown University + 'openorgs____::38d7097854736583dde879d12dacafca', -- Brown University 'openorgs____::57784c9e047e826fefdb1ef816120d92', --Arts et Métiers ParisTech 'openorgs____::2530baca8a15936ba2e3297f2bce2e7e', -- University of Cape Town 'openorgs____::d11f981828c485cd23d93f7f24f24db1', -- Technological University Dublin @@ -52,7 +52,10 @@ create table TARGET.result stored as parquet as 'openorgs____::66aa9fc2fceb271423dfabcc38752dc0', -- Lund University 'openorgs____::3cff625a4370d51e08624cc586138b2f', -- IMT Atlantique 'openorgs____::c0b262bd6eab819e4c994914f9c010e2', -- National Institute of Geophysics and Volcanology - 'openorgs____::1624ff7c01bb641b91f4518539a0c28a' -- Vrije Universiteit Amsterdam + 'openorgs____::1624ff7c01bb641b91f4518539a0c28a', -- Vrije Universiteit Amsterdam + 'openorgs____::4d4051b56708688235252f1d8fddb8c1', --Iscte - Instituto Universitário de Lisboa + 'openorgs____::ab4ac74c35fa5dada770cf08e5110fab' -- Universidade Católica Portuguesa + ))) foo; -ANALYZE TABLE TARGET.result COMPUTE STATISTICS; \ No newline at end of file +--ANALYZE TABLE TARGET.result COMPUTE STATISTICS; \ No newline at end of file diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step21-createObservatoryDB.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step21-createObservatoryDB.sql index 2d7d572b3..b7e421813 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step21-createObservatoryDB.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step21-createObservatoryDB.sql @@ -8,7 +8,7 @@ from ${stats_db_name}.result r group by rl.id ) rln on rln.id=r.id; -ANALYZE TABLE ${observatory_db_name}.result_cc_licence COMPUTE STATISTICS; +--ANALYZE TABLE ${observatory_db_name}.result_cc_licence COMPUTE STATISTICS; create table ${observatory_db_name}.result_affiliated_country stored as parquet as select @@ -39,7 +39,7 @@ group by r.green, r.gold, case when rl.type is not null then true else false end case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract, cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, c.code, c.name; -ANALYZE TABLE ${observatory_db_name}.result_affiliated_country COMPUTE STATISTICS; +--ANALYZE TABLE ${observatory_db_name}.result_affiliated_country COMPUTE STATISTICS; create table ${observatory_db_name}.result_affiliated_year stored as parquet as select @@ -70,7 +70,7 @@ group by r.green, r.gold, case when rl.type is not null then true else false end case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract, cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, r.year; -ANALYZE TABLE ${observatory_db_name}.result_affiliated_year COMPUTE STATISTICS; +--ANALYZE TABLE ${observatory_db_name}.result_affiliated_year COMPUTE STATISTICS; create table ${observatory_db_name}.result_affiliated_year_country stored as parquet as select @@ -101,7 +101,7 @@ group by r.green, r.gold, case when rl.type is not null then true else false end case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract, cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, r.year, c.code, c.name; -ANALYZE TABLE ${observatory_db_name}.result_affiliated_year_country COMPUTE STATISTICS; +--ANALYZE TABLE ${observatory_db_name}.result_affiliated_year_country COMPUTE STATISTICS; create table ${observatory_db_name}.result_affiliated_datasource stored as parquet as select @@ -134,7 +134,7 @@ group by r.green, r.gold, case when rl.type is not null then true else false end case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract, cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, d.name; -ANALYZE TABLE ${observatory_db_name}.result_affiliated_datasource COMPUTE STATISTICS; +--ANALYZE TABLE ${observatory_db_name}.result_affiliated_datasource COMPUTE STATISTICS; create table ${observatory_db_name}.result_affiliated_datasource_country stored as parquet as select @@ -167,7 +167,7 @@ group by r.green, r.gold, case when rl.type is not null then true else false end case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract, cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, d.name, c.code, c.name; -ANALYZE TABLE ${observatory_db_name}.result_affiliated_datasource_country COMPUTE STATISTICS; +--ANALYZE TABLE ${observatory_db_name}.result_affiliated_datasource_country COMPUTE STATISTICS; create table ${observatory_db_name}.result_affiliated_organization stored as parquet as select @@ -198,7 +198,7 @@ group by r.green, r.gold, case when rl.type is not null then true else false end case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract, cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, o.name; -ANALYZE TABLE ${observatory_db_name}.result_affiliated_organization COMPUTE STATISTICS; +--ANALYZE TABLE ${observatory_db_name}.result_affiliated_organization COMPUTE STATISTICS; create table ${observatory_db_name}.result_affiliated_organization_country stored as parquet as select @@ -229,7 +229,7 @@ group by r.green, r.gold, case when rl.type is not null then true else false end case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract, cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, o.name, c.code, c.name; -ANALYZE TABLE ${observatory_db_name}.result_affiliated_organization_country COMPUTE STATISTICS; +--ANALYZE TABLE ${observatory_db_name}.result_affiliated_organization_country COMPUTE STATISTICS; create table ${observatory_db_name}.result_affiliated_funder stored as parquet as select @@ -262,7 +262,7 @@ group by r.green, r.gold, case when rl.type is not null then true else false end case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract, cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, p.funder; -ANALYZE TABLE ${observatory_db_name}.result_affiliated_funder COMPUTE STATISTICS; +--ANALYZE TABLE ${observatory_db_name}.result_affiliated_funder COMPUTE STATISTICS; create table ${observatory_db_name}.result_affiliated_funder_country stored as parquet as select @@ -295,7 +295,7 @@ group by r.green, r.gold, case when rl.type is not null then true else false end case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract, cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, p.funder, c.code, c.name; -ANALYZE TABLE ${observatory_db_name}.result_affiliated_funder_country COMPUTE STATISTICS; +--ANALYZE TABLE ${observatory_db_name}.result_affiliated_funder_country COMPUTE STATISTICS; create table ${observatory_db_name}.result_deposited_country stored as parquet as select @@ -328,7 +328,7 @@ group by r.green, r.gold, case when rl.type is not null then true else false end case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract, cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, c.code, c.name; -ANALYZE TABLE ${observatory_db_name}.result_deposited_country COMPUTE STATISTICS; +--ANALYZE TABLE ${observatory_db_name}.result_deposited_country COMPUTE STATISTICS; create table ${observatory_db_name}.result_deposited_year stored as parquet as select @@ -361,7 +361,7 @@ group by r.green, r.gold, case when rl.type is not null then true else false end case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract, cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, r.year; -ANALYZE TABLE ${observatory_db_name}.result_deposited_year COMPUTE STATISTICS; +--ANALYZE TABLE ${observatory_db_name}.result_deposited_year COMPUTE STATISTICS; create table ${observatory_db_name}.result_deposited_year_country stored as parquet as select @@ -394,7 +394,7 @@ group by r.green, r.gold, case when rl.type is not null then true else false end case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract, cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, r.year, c.code, c.name; -ANALYZE TABLE ${observatory_db_name}.result_deposited_year_country COMPUTE STATISTICS; +--ANALYZE TABLE ${observatory_db_name}.result_deposited_year_country COMPUTE STATISTICS; create table ${observatory_db_name}.result_deposited_datasource stored as parquet as select @@ -427,7 +427,7 @@ group by r.green, r.gold, case when rl.type is not null then true else false end case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract, cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, d.name; -ANALYZE TABLE ${observatory_db_name}.result_deposited_datasource COMPUTE STATISTICS; +--ANALYZE TABLE ${observatory_db_name}.result_deposited_datasource COMPUTE STATISTICS; create table ${observatory_db_name}.result_deposited_datasource_country stored as parquet as select @@ -460,7 +460,7 @@ group by r.green, r.gold, case when rl.type is not null then true else false end case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract, cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, d.name, c.code, c.name; -ANALYZE TABLE ${observatory_db_name}.result_deposited_datasource_country COMPUTE STATISTICS; +--ANALYZE TABLE ${observatory_db_name}.result_deposited_datasource_country COMPUTE STATISTICS; create table ${observatory_db_name}.result_deposited_organization stored as parquet as select @@ -493,7 +493,7 @@ group by r.green, r.gold, case when rl.type is not null then true else false end case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract, cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, o.name; -ANALYZE TABLE ${observatory_db_name}.result_deposited_organization COMPUTE STATISTICS; +--ANALYZE TABLE ${observatory_db_name}.result_deposited_organization COMPUTE STATISTICS; create table ${observatory_db_name}.result_deposited_organization_country stored as parquet as select @@ -526,7 +526,7 @@ group by r.green, r.gold, case when rl.type is not null then true else false end case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract, cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, o.name, c.code, c.name; -ANALYZE TABLE ${observatory_db_name}.result_deposited_organization_country COMPUTE STATISTICS; +--ANALYZE TABLE ${observatory_db_name}.result_deposited_organization_country COMPUTE STATISTICS; create table ${observatory_db_name}.result_deposited_funder stored as parquet as select @@ -561,7 +561,7 @@ group by r.green, r.gold, case when rl.type is not null then true else false end case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract, cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, p.funder; -ANALYZE TABLE ${observatory_db_name}.result_deposited_funder COMPUTE STATISTICS; +--ANALYZE TABLE ${observatory_db_name}.result_deposited_funder COMPUTE STATISTICS; create table ${observatory_db_name}.result_deposited_funder_country stored as parquet as select @@ -596,4 +596,4 @@ group by r.green, r.gold, case when rl.type is not null then true else false end case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract, cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, p.funder, c.code, c.name; -ANALYZE TABLE ${observatory_db_name}.result_deposited_funder_country COMPUTE STATISTICS; \ No newline at end of file +--ANALYZE TABLE ${observatory_db_name}.result_deposited_funder_country COMPUTE STATISTICS; \ No newline at end of file diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/workflow.xml b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/workflow.xml index 2ab50fb29..c03520e48 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/workflow.xml @@ -317,15 +317,12 @@ - - ${jobTracker} - ${nameNode} - indicators.sh - ${stats_db_name} - ${external_stats_db_name} - ${wf:appPath()}/scripts/step16-createIndicatorsTables.sql - indicators.sh - + + ${hive_jdbc_url} + + stats_db_name=${stats_db_name} + external_stats_db_name=${external_stats_db_name} + @@ -378,6 +375,7 @@ ${wf:appPath()}/scripts/step20-createMonitorDB_institutions.sql ${wf:appPath()}/scripts/step20-createMonitorDB_RIs.sql ${wf:appPath()}/scripts/step20-createMonitorDB_RIs_tail.sql + ${wf:appPath()}/scripts/step20-createMonitorDBAll.sql monitor.sh @@ -469,7 +467,7 @@ ${usage_stats_db_shadow_name} finalizeImpalaCluster.sh - + From bc1a4611aacfa1358baf49d24955c42612ae0050 Mon Sep 17 00:00:00 2001 From: Serafeim Chatzopoulos Date: Mon, 17 Jul 2023 11:17:53 +0300 Subject: [PATCH 234/449] Minor changes --- .../PrepareAffiliationRelations.java | 2 +- .../bipaffiliations/job.properties | 42 +++++++++++++++++++ .../bipaffiliations/oozie_app/workflow.xml | 1 - .../PrepareAffiliationRelationsTest.java | 10 ++--- 4 files changed, 48 insertions(+), 7 deletions(-) create mode 100644 dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/job.properties diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelations.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelations.java index 45e712c7e..44870c0f8 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelations.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelations.java @@ -46,7 +46,7 @@ public class PrepareAffiliationRelations implements Serializable { private static final String ID_PREFIX = "50|doi_________::"; public static final String BIP_AFFILIATIONS_CLASSID = "result:organization:bipinference"; public static final String BIP_AFFILIATIONS_CLASSNAME = "Affiliation relation inferred by BIP!"; - public static final String BIP_INFERENCE_PROVENANCE = "bip_affiliation"; + public static final String BIP_INFERENCE_PROVENANCE = "bip:affiliation:crossref"; public static void main(String[] args) throws Exception { diff --git a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/job.properties b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/job.properties new file mode 100644 index 000000000..dce59a31f --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/job.properties @@ -0,0 +1,42 @@ +# --- You can override the following properties (if needed) coming from your ~/.dhp/application.properties --- +# dhp.hadoop.frontend.temp.dir=/home/ilias.kanellos +# dhp.hadoop.frontend.user.name=ilias.kanellos +# dhp.hadoop.frontend.host.name=iis-cdh5-test-gw.ocean.icm.edu.pl +# dhp.hadoop.frontend.port.ssh=22 +# oozieServiceLoc=http://iis-cdh5-test-m3:11000/oozie +# jobTracker=yarnRM +# nameNode=hdfs://nameservice1 +# oozie.execution.log.file.location = target/extract-and-run-on-remote-host.log +# maven.executable=mvn + +# Some memory and driver settings for more demanding tasks +sparkDriverMemory=10G +sparkExecutorMemory=10G +sparkExecutorCores=4 +sparkShufflePartitions=7680 + +# The above is given differently in an example I found online +oozie.action.sharelib.for.spark=spark2 +oozieActionShareLibForSpark2=spark2 +spark2YarnHistoryServerAddress=http://iis-cdh5-test-gw.ocean.icm.edu.pl:18089 +spark2EventLogDir=/user/spark/spark2ApplicationHistory +sparkSqlWarehouseDir=/user/hive/warehouse +hiveMetastoreUris=thrift://iis-cdh5-test-m3.ocean.icm.edu.pl:9083 +# This MAY avoid the no library used error +oozie.use.system.libpath=true +# Some stuff copied from openaire's jobs +spark2ExtraListeners=com.cloudera.spark.lineage.NavigatorAppListener +spark2SqlQueryExecutionListeners=com.cloudera.spark.lineage.NavigatorQueryListener + +# I think this should be the oozie workflow directory +# oozieWorkflowPath=/user/ilias.kanellos/workflow_example/ + + +# The workflow application path +wfAppPath=${oozieTopWfApplicationPath} + +# The following is needed as a property of a workflow +oozie.wf.application.path=${oozieTopWfApplicationPath} + +inputPath=/user/schatz/affiliations/data-v3.json +outputPath=/tmp/crossref-affiliations-output-v3 diff --git a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/oozie_app/workflow.xml b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/oozie_app/workflow.xml index 7c44bb7eb..31f35adfd 100644 --- a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/oozie_app/workflow.xml @@ -79,7 +79,6 @@ - yarn diff --git a/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelationsTest.java b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelationsTest.java index c76fcf6a9..7e2fc5a39 100644 --- a/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelationsTest.java +++ b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelationsTest.java @@ -94,11 +94,11 @@ public class PrepareAffiliationRelationsTest { .map(value -> OBJECT_MAPPER.readValue(value._2().toString(), AtomicAction.class)) .map(aa -> ((Relation) aa.getPayload())); - for (Relation r : tmp.collect()) { - System.out.println( - r.getSource() + "\t" + r.getTarget() + "\t" + r.getRelType() + "\t" + r.getRelClass() + "\t" + r.getSubRelType() + "\t" + r.getValidationDate() + "\t" + r.getDataInfo().getTrust() + "\t" + r.getDataInfo().getInferred() - ); - } +// for (Relation r : tmp.collect()) { +// System.out.println( +// r.getSource() + "\t" + r.getTarget() + "\t" + r.getRelType() + "\t" + r.getRelClass() + "\t" + r.getSubRelType() + "\t" + r.getValidationDate() + "\t" + r.getDataInfo().getTrust() + "\t" + r.getDataInfo().getInferred() +// ); +// } // count the number of relations assertEquals(16, tmp.count()); From be4856ef35401dc7a6e969763839254e645456fb Mon Sep 17 00:00:00 2001 From: dimitrispie Date: Mon, 17 Jul 2023 15:33:58 +0300 Subject: [PATCH 235/449] Update step15.sql --- .../eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step15.sql | 2 -- 1 file changed, 2 deletions(-) diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step15.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step15.sql index 75e8b001b..d1cbde438 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step15.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step15.sql @@ -41,8 +41,6 @@ cast(measures_ids.unit.value[0] as decimal(6,3)) score_dec, measures_ids.unit.va from ${openaire_db_name}.result lateral view explode(measures) measures as measures_ids where measures_ids.id!='views' and measures_ids.id!='downloads'; -ANALYZE TABLE indi_impact_measures COMPUTE STATISTICS; - create table if not exists ${stats_db_name}.result_apc_affiliations STORED AS PARQUET as select distinct substr(rel.target,4) id, substr(rel.source,4) organization, o.legalname.value name, cast(rel.properties[0].value as double) apc_amount, From be320ba3c1c013d11da957acbce843b00bcae484 Mon Sep 17 00:00:00 2001 From: Serafeim Chatzopoulos Date: Mon, 17 Jul 2023 16:04:21 +0300 Subject: [PATCH 236/449] Indentation fixes --- .../dnetlib/dhp/actionmanager/Constants.java | 3 +- .../PrepareAffiliationRelations.java | 228 ++++++++++-------- .../AffiliationRelationDeserializer.java | 31 +-- .../model/AffiliationRelationModel.java | 11 +- .../bipaffiliations/job.properties | 11 +- .../bipaffiliations/oozie_app/workflow.xml | 4 +- .../PrepareAffiliationRelationsTest.java | 162 +++++++------ 7 files changed, 235 insertions(+), 215 deletions(-) diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/Constants.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/Constants.java index 8b0dab3a7..62556b16b 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/Constants.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/Constants.java @@ -3,7 +3,6 @@ package eu.dnetlib.dhp.actionmanager; import java.util.Optional; -import eu.dnetlib.dhp.common.HdfsSupport; import org.apache.spark.api.java.function.MapFunction; import org.apache.spark.sql.Dataset; import org.apache.spark.sql.Encoders; @@ -12,6 +11,7 @@ import org.apache.spark.sql.SparkSession; import com.fasterxml.jackson.databind.ObjectMapper; import eu.dnetlib.dhp.application.ArgumentApplicationParser; +import eu.dnetlib.dhp.common.HdfsSupport; import eu.dnetlib.dhp.schema.common.ModelConstants; import eu.dnetlib.dhp.schema.oaf.StructuredProperty; import eu.dnetlib.dhp.schema.oaf.Subject; @@ -94,6 +94,7 @@ public class Constants { return s; } + public static void removeOutputDir(SparkSession spark, String path) { HdfsSupport.remove(path, spark.sparkContext().hadoopConfiguration()); } diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelations.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelations.java index 44870c0f8..9b5d4a2ca 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelations.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelations.java @@ -8,12 +8,6 @@ import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; -import eu.dnetlib.dhp.actionmanager.Constants; -import eu.dnetlib.dhp.actionmanager.bipaffiliations.model.*; -import eu.dnetlib.dhp.actionmanager.ror.GenerateRorActionSetJob; -import eu.dnetlib.dhp.schema.action.AtomicAction; -import eu.dnetlib.dhp.schema.oaf.utils.CleaningFunctions; -import eu.dnetlib.dhp.schema.oaf.utils.IdentifierFactory; import org.apache.commons.io.IOUtils; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapred.SequenceFileOutputFormat; @@ -22,17 +16,23 @@ import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.JavaSparkContext; import org.apache.spark.api.java.function.FlatMapFunction; import org.apache.spark.api.java.function.MapFunction; +import org.apache.spark.sql.Dataset; import org.apache.spark.sql.Encoders; import org.apache.spark.sql.SparkSession; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.apache.spark.sql.Dataset; import com.fasterxml.jackson.databind.ObjectMapper; +import eu.dnetlib.dhp.actionmanager.Constants; +import eu.dnetlib.dhp.actionmanager.bipaffiliations.model.*; +import eu.dnetlib.dhp.actionmanager.ror.GenerateRorActionSetJob; import eu.dnetlib.dhp.application.ArgumentApplicationParser; +import eu.dnetlib.dhp.schema.action.AtomicAction; import eu.dnetlib.dhp.schema.common.ModelConstants; import eu.dnetlib.dhp.schema.oaf.*; +import eu.dnetlib.dhp.schema.oaf.utils.CleaningFunctions; +import eu.dnetlib.dhp.schema.oaf.utils.IdentifierFactory; import eu.dnetlib.dhp.schema.oaf.utils.OafMapperUtils; import scala.Tuple2; @@ -41,125 +41,139 @@ import scala.Tuple2; */ public class PrepareAffiliationRelations implements Serializable { - private static final Logger log = LoggerFactory.getLogger(PrepareAffiliationRelations.class); - private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); - private static final String ID_PREFIX = "50|doi_________::"; - public static final String BIP_AFFILIATIONS_CLASSID = "result:organization:bipinference"; - public static final String BIP_AFFILIATIONS_CLASSNAME = "Affiliation relation inferred by BIP!"; - public static final String BIP_INFERENCE_PROVENANCE = "bip:affiliation:crossref"; + private static final Logger log = LoggerFactory.getLogger(PrepareAffiliationRelations.class); + private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); + private static final String ID_PREFIX = "50|doi_________::"; + public static final String BIP_AFFILIATIONS_CLASSID = "result:organization:bipinference"; + public static final String BIP_AFFILIATIONS_CLASSNAME = "Affiliation relation inferred by BIP!"; + public static final String BIP_INFERENCE_PROVENANCE = "bip:affiliation:crossref"; - public static void main(String[] args) throws Exception { + public static void main(String[] args) throws Exception { - String jsonConfiguration = IOUtils - .toString( - PrepareAffiliationRelations.class - .getResourceAsStream( - "/eu/dnetlib/dhp/actionmanager/bipaffiliations/input_actionset_parameter.json")); + String jsonConfiguration = IOUtils + .toString( + PrepareAffiliationRelations.class + .getResourceAsStream( + "/eu/dnetlib/dhp/actionmanager/bipaffiliations/input_actionset_parameter.json")); - final ArgumentApplicationParser parser = new ArgumentApplicationParser(jsonConfiguration); - parser.parseArgument(args); + final ArgumentApplicationParser parser = new ArgumentApplicationParser(jsonConfiguration); + parser.parseArgument(args); - Boolean isSparkSessionManaged = Constants.isSparkSessionManaged(parser); - log.info("isSparkSessionManaged: {}", isSparkSessionManaged); + Boolean isSparkSessionManaged = Constants.isSparkSessionManaged(parser); + log.info("isSparkSessionManaged: {}", isSparkSessionManaged); - final String inputPath = parser.get("inputPath"); - log.info("inputPath {}: ", inputPath); + final String inputPath = parser.get("inputPath"); + log.info("inputPath {}: ", inputPath); - final String outputPath = parser.get("outputPath"); - log.info("outputPath {}: ", outputPath); + final String outputPath = parser.get("outputPath"); + log.info("outputPath {}: ", outputPath); - SparkConf conf = new SparkConf(); + SparkConf conf = new SparkConf(); - runWithSparkSession( - conf, - isSparkSessionManaged, - spark -> { - Constants.removeOutputDir(spark, outputPath); - prepareAffiliationRelations(spark, inputPath, outputPath); - }); - } + runWithSparkSession( + conf, + isSparkSessionManaged, + spark -> { + Constants.removeOutputDir(spark, outputPath); + prepareAffiliationRelations(spark, inputPath, outputPath); + }); + } - private static void prepareAffiliationRelations(SparkSession spark, String inputPath, String outputPath) { + private static void prepareAffiliationRelations(SparkSession spark, String inputPath, + String outputPath) { - final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); + final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); - // load and parse affiliation relations from HDFS - JavaRDD affiliationRelationsDeserializeRDD = sc - .textFile(inputPath) - .map(item -> OBJECT_MAPPER.readValue(item, AffiliationRelationDeserializer.class)); + // load and parse affiliation relations from HDFS + JavaRDD affiliationRelationsDeserializeRDD = sc + .textFile(inputPath) + .map(item -> OBJECT_MAPPER.readValue(item, AffiliationRelationDeserializer.class)); - // convert affiliation to an internal representation - Dataset affiliationRelations = - spark.createDataset( - affiliationRelationsDeserializeRDD.flatMap(entry -> - entry.getMatchings().stream().flatMap(matching -> - matching.getRorId().stream().map( rorId -> new AffiliationRelationModel( - entry.getDoi(), - rorId, - matching.getConfidence() - ))).collect(Collectors.toList()) - .iterator()) - .rdd(), - Encoders.bean(AffiliationRelationModel.class)); + // convert affiliation to an internal representation + Dataset affiliationRelations = spark + .createDataset( + affiliationRelationsDeserializeRDD + .flatMap( + entry -> entry + .getMatchings() + .stream() + .flatMap( + matching -> matching + .getRorId() + .stream() + .map( + rorId -> new AffiliationRelationModel( + entry.getDoi(), + rorId, + matching.getConfidence()))) + .collect(Collectors.toList()) + .iterator()) + .rdd(), + Encoders.bean(AffiliationRelationModel.class)); - // prepare action sets for affiliation relations - affiliationRelations - .flatMap((FlatMapFunction) affRel -> { + // prepare action sets for affiliation relations + affiliationRelations + .flatMap((FlatMapFunction) affRel -> { - // DOI to OpenAIRE id - final String paperId = ID_PREFIX + IdentifierFactory.md5(CleaningFunctions.normalizePidValue("doi", affRel.getDoi())); + // DOI to OpenAIRE id + final String paperId = ID_PREFIX + + IdentifierFactory.md5(CleaningFunctions.normalizePidValue("doi", affRel.getDoi())); - // ROR id to OpenAIRE id - final String affId = GenerateRorActionSetJob.calculateOpenaireId(affRel.getRorId()); + // ROR id to OpenAIRE id + final String affId = GenerateRorActionSetJob.calculateOpenaireId(affRel.getRorId()); - Qualifier qualifier = OafMapperUtils.qualifier( - BIP_AFFILIATIONS_CLASSID, - BIP_AFFILIATIONS_CLASSNAME, - ModelConstants.DNET_PROVENANCE_ACTIONS, - ModelConstants.DNET_PROVENANCE_ACTIONS); + Qualifier qualifier = OafMapperUtils + .qualifier( + BIP_AFFILIATIONS_CLASSID, + BIP_AFFILIATIONS_CLASSNAME, + ModelConstants.DNET_PROVENANCE_ACTIONS, + ModelConstants.DNET_PROVENANCE_ACTIONS); - // format data info; setting `confidence` into relation's `trust` - DataInfo dataInfo = OafMapperUtils.dataInfo( - false, - BIP_INFERENCE_PROVENANCE, - true, - false, - qualifier, - Double.toString(affRel.getConfidence())); + // format data info; setting `confidence` into relation's `trust` + DataInfo dataInfo = OafMapperUtils + .dataInfo( + false, + BIP_INFERENCE_PROVENANCE, + true, + false, + qualifier, + Double.toString(affRel.getConfidence())); - // return bi-directional relations - return getAffiliationRelationPair(paperId, affId, dataInfo).iterator(); + // return bi-directional relations + return getAffiliationRelationPair(paperId, affId, dataInfo).iterator(); - }, Encoders.bean(Relation.class)) - .toJavaRDD() - .map(p -> new AtomicAction(Relation.class, p)) - .mapToPair( - aa -> new Tuple2<>(new Text(aa.getClazz().getCanonicalName()), - new Text(OBJECT_MAPPER.writeValueAsString(aa)))) - .saveAsHadoopFile(outputPath, Text.class, Text.class, SequenceFileOutputFormat.class); + }, Encoders.bean(Relation.class)) + .toJavaRDD() + .map(p -> new AtomicAction(Relation.class, p)) + .mapToPair( + aa -> new Tuple2<>(new Text(aa.getClazz().getCanonicalName()), + new Text(OBJECT_MAPPER.writeValueAsString(aa)))) + .saveAsHadoopFile(outputPath, Text.class, Text.class, SequenceFileOutputFormat.class); - } + } - private static List getAffiliationRelationPair(String paperId, String affId, DataInfo dataInfo) { - return Arrays.asList( - OafMapperUtils.getRelation( - paperId, - affId, - ModelConstants.RESULT_ORGANIZATION, - ModelConstants.AFFILIATION, - ModelConstants.HAS_AUTHOR_INSTITUTION, - null, - dataInfo, - null), - OafMapperUtils.getRelation( - affId, - paperId, - ModelConstants.RESULT_ORGANIZATION, - ModelConstants.AFFILIATION, - ModelConstants.IS_AUTHOR_INSTITUTION_OF, - null, - dataInfo, - null) - ); - } + private static List getAffiliationRelationPair(String paperId, String affId, DataInfo dataInfo) { + return Arrays + .asList( + OafMapperUtils + .getRelation( + paperId, + affId, + ModelConstants.RESULT_ORGANIZATION, + ModelConstants.AFFILIATION, + ModelConstants.HAS_AUTHOR_INSTITUTION, + null, + dataInfo, + null), + OafMapperUtils + .getRelation( + affId, + paperId, + ModelConstants.RESULT_ORGANIZATION, + ModelConstants.AFFILIATION, + ModelConstants.IS_AUTHOR_INSTITUTION_OF, + null, + dataInfo, + null)); + } } diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/model/AffiliationRelationDeserializer.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/model/AffiliationRelationDeserializer.java index 450a8c175..ef4f200d0 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/model/AffiliationRelationDeserializer.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/model/AffiliationRelationDeserializer.java @@ -1,26 +1,27 @@ -package eu.dnetlib.dhp.actionmanager.bipaffiliations.model; -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Data; +package eu.dnetlib.dhp.actionmanager.bipaffiliations.model; import java.io.Serializable; import java.util.List; +import com.fasterxml.jackson.annotation.JsonProperty; + +import lombok.Data; + @Data public class AffiliationRelationDeserializer implements Serializable { - @JsonProperty("DOI") - private String doi; - @JsonProperty("Matchings") - private List matchings; + @JsonProperty("DOI") + private String doi; + @JsonProperty("Matchings") + private List matchings; - @Data - public static class Matching implements Serializable { - @JsonProperty("RORid") - private List rorId; - @JsonProperty("Confidence") - private double confidence; + @Data + public static class Matching implements Serializable { + @JsonProperty("RORid") + private List rorId; + @JsonProperty("Confidence") + private double confidence; - } + } } - diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/model/AffiliationRelationModel.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/model/AffiliationRelationModel.java index 8689914ee..6509f56ac 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/model/AffiliationRelationModel.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/model/AffiliationRelationModel.java @@ -1,15 +1,16 @@ + package eu.dnetlib.dhp.actionmanager.bipaffiliations.model; +import java.io.Serializable; + import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import java.io.Serializable; - @Data @AllArgsConstructor public class AffiliationRelationModel implements Serializable { - private String doi; - private String rorId; - private double confidence; + private String doi; + private String rorId; + private double confidence; } diff --git a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/job.properties b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/job.properties index dce59a31f..43d86ee09 100644 --- a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/job.properties +++ b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/job.properties @@ -28,15 +28,8 @@ oozie.use.system.libpath=true spark2ExtraListeners=com.cloudera.spark.lineage.NavigatorAppListener spark2SqlQueryExecutionListeners=com.cloudera.spark.lineage.NavigatorQueryListener -# I think this should be the oozie workflow directory -# oozieWorkflowPath=/user/ilias.kanellos/workflow_example/ - - -# The workflow application path -wfAppPath=${oozieTopWfApplicationPath} - # The following is needed as a property of a workflow oozie.wf.application.path=${oozieTopWfApplicationPath} -inputPath=/user/schatz/affiliations/data-v3.json -outputPath=/tmp/crossref-affiliations-output-v3 +inputPath=/user/schatz/affiliations/data-v3.1.json +outputPath=/tmp/crossref-affiliations-output-v3.1 diff --git a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/oozie_app/workflow.xml b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/oozie_app/workflow.xml index 31f35adfd..9930cfe17 100644 --- a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/oozie_app/workflow.xml @@ -1,4 +1,4 @@ - + @@ -84,7 +84,7 @@ yarn cluster Produces the atomic action with the inferred by BIP! affiliation relations from Crossref - eu.dnetlib.dhp.actionmanager.bipaffiliations.PrepareAffiliationRelations/class> + eu.dnetlib.dhp.actionmanager.bipaffiliations.PrepareAffiliationRelations dhp-aggregation-${projectVersion}.jar --executor-memory=${sparkExecutorMemory} diff --git a/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelationsTest.java b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelationsTest.java index 7e2fc5a39..72aabde7f 100644 --- a/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelationsTest.java +++ b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelationsTest.java @@ -1,3 +1,4 @@ + package eu.dnetlib.dhp.actionmanager.bipaffiliations; import static org.junit.jupiter.api.Assertions.*; @@ -6,10 +7,6 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; -import eu.dnetlib.dhp.schema.common.ModelConstants; -import eu.dnetlib.dhp.schema.oaf.Relation; -import eu.dnetlib.dhp.schema.oaf.utils.CleaningFunctions; -import eu.dnetlib.dhp.schema.oaf.utils.IdentifierFactory; import org.apache.commons.io.FileUtils; import org.apache.hadoop.io.Text; import org.apache.spark.SparkConf; @@ -29,107 +26,120 @@ import org.slf4j.LoggerFactory; import com.fasterxml.jackson.databind.ObjectMapper; import eu.dnetlib.dhp.schema.action.AtomicAction; +import eu.dnetlib.dhp.schema.common.ModelConstants; +import eu.dnetlib.dhp.schema.oaf.Relation; +import eu.dnetlib.dhp.schema.oaf.utils.CleaningFunctions; +import eu.dnetlib.dhp.schema.oaf.utils.IdentifierFactory; public class PrepareAffiliationRelationsTest { - private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); + private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); - private static SparkSession spark; + private static SparkSession spark; - private static Path workingDir; - private static final String ID_PREFIX = "50|doi_________::"; - private static final Logger log = LoggerFactory - .getLogger(PrepareAffiliationRelationsTest.class); + private static Path workingDir; + private static final String ID_PREFIX = "50|doi_________::"; + private static final Logger log = LoggerFactory + .getLogger(PrepareAffiliationRelationsTest.class); - @BeforeAll - public static void beforeAll() throws IOException { - workingDir = Files.createTempDirectory(PrepareAffiliationRelationsTest.class.getSimpleName()); + @BeforeAll + public static void beforeAll() throws IOException { + workingDir = Files.createTempDirectory(PrepareAffiliationRelationsTest.class.getSimpleName()); - log.info("Using work dir {}", workingDir); + log.info("Using work dir {}", workingDir); - SparkConf conf = new SparkConf(); - conf.setAppName(PrepareAffiliationRelationsTest.class.getSimpleName()); + SparkConf conf = new SparkConf(); + conf.setAppName(PrepareAffiliationRelationsTest.class.getSimpleName()); - conf.setMaster("local[*]"); - conf.set("spark.driver.host", "localhost"); - conf.set("hive.metastore.local", "true"); - conf.set("spark.ui.enabled", "false"); - conf.set("spark.sql.warehouse.dir", workingDir.toString()); - conf.set("hive.metastore.warehouse.dir", workingDir.resolve("warehouse").toString()); + conf.setMaster("local[*]"); + conf.set("spark.driver.host", "localhost"); + conf.set("hive.metastore.local", "true"); + conf.set("spark.ui.enabled", "false"); + conf.set("spark.sql.warehouse.dir", workingDir.toString()); + conf.set("hive.metastore.warehouse.dir", workingDir.resolve("warehouse").toString()); - spark = SparkSession - .builder() - .appName(PrepareAffiliationRelationsTest.class.getSimpleName()) - .config(conf) - .getOrCreate(); - } + spark = SparkSession + .builder() + .appName(PrepareAffiliationRelationsTest.class.getSimpleName()) + .config(conf) + .getOrCreate(); + } - @AfterAll - public static void afterAll() throws IOException { - FileUtils.deleteDirectory(workingDir.toFile()); - spark.stop(); - } + @AfterAll + public static void afterAll() throws IOException { + FileUtils.deleteDirectory(workingDir.toFile()); + spark.stop(); + } - @Test - void testMatch() throws Exception { + @Test + void testMatch() throws Exception { - String affiliationRelationsPath = getClass() - .getResource("/eu/dnetlib/dhp/actionmanager/bipaffiliations/doi_to_ror.json") - .getPath(); + String affiliationRelationsPath = getClass() + .getResource("/eu/dnetlib/dhp/actionmanager/bipaffiliations/doi_to_ror.json") + .getPath(); - String outputPath = workingDir.toString() + "/actionSet"; + String outputPath = workingDir.toString() + "/actionSet"; - PrepareAffiliationRelations - .main( - new String[] { - "-isSparkSessionManaged", Boolean.FALSE.toString(), - "-inputPath", affiliationRelationsPath, - "-outputPath", outputPath - }); + PrepareAffiliationRelations + .main( + new String[] { + "-isSparkSessionManaged", Boolean.FALSE.toString(), + "-inputPath", affiliationRelationsPath, + "-outputPath", outputPath + }); - final JavaSparkContext sc = new JavaSparkContext(spark.sparkContext()); + final JavaSparkContext sc = new JavaSparkContext(spark.sparkContext()); - JavaRDD tmp = sc - .sequenceFile(outputPath, Text.class, Text.class) - .map(value -> OBJECT_MAPPER.readValue(value._2().toString(), AtomicAction.class)) - .map(aa -> ((Relation) aa.getPayload())); + JavaRDD tmp = sc + .sequenceFile(outputPath, Text.class, Text.class) + .map(value -> OBJECT_MAPPER.readValue(value._2().toString(), AtomicAction.class)) + .map(aa -> ((Relation) aa.getPayload())); // for (Relation r : tmp.collect()) { // System.out.println( // r.getSource() + "\t" + r.getTarget() + "\t" + r.getRelType() + "\t" + r.getRelClass() + "\t" + r.getSubRelType() + "\t" + r.getValidationDate() + "\t" + r.getDataInfo().getTrust() + "\t" + r.getDataInfo().getInferred() // ); // } - // count the number of relations - assertEquals(16, tmp.count()); + // count the number of relations + assertEquals(16, tmp.count()); - Dataset dataset = spark.createDataset(tmp.rdd(), Encoders.bean(Relation.class)); - dataset.createOrReplaceTempView("result"); + Dataset dataset = spark.createDataset(tmp.rdd(), Encoders.bean(Relation.class)); + dataset.createOrReplaceTempView("result"); - Dataset execVerification = spark.sql("select r.relType, r.relClass, r.source, r.target, r.dataInfo.trust from result r"); + Dataset execVerification = spark + .sql("select r.relType, r.relClass, r.source, r.target, r.dataInfo.trust from result r"); - // verify that we have equal number of bi-directional relations - Assertions.assertEquals(8, execVerification - .filter( - "relClass='" + ModelConstants.HAS_AUTHOR_INSTITUTION +"'") - .collectAsList() - .size()); + // verify that we have equal number of bi-directional relations + Assertions + .assertEquals( + 8, execVerification + .filter( + "relClass='" + ModelConstants.HAS_AUTHOR_INSTITUTION + "'") + .collectAsList() + .size()); - Assertions.assertEquals(8, execVerification - .filter( - "relClass='" + ModelConstants.IS_AUTHOR_INSTITUTION_OF +"'") - .collectAsList() - .size()); + Assertions + .assertEquals( + 8, execVerification + .filter( + "relClass='" + ModelConstants.IS_AUTHOR_INSTITUTION_OF + "'") + .collectAsList() + .size()); - // check confidence value of a specific relation - String sourceDOI = "10.1105/tpc.8.3.343"; + // check confidence value of a specific relation + String sourceDOI = "10.1105/tpc.8.3.343"; - final String sourceOpenaireId = ID_PREFIX + IdentifierFactory.md5(CleaningFunctions.normalizePidValue("doi", sourceDOI)); + final String sourceOpenaireId = ID_PREFIX + + IdentifierFactory.md5(CleaningFunctions.normalizePidValue("doi", sourceDOI)); - Assertions.assertEquals("0.7071067812", execVerification - .filter( - "source='" + sourceOpenaireId +"'") - .collectAsList().get(0).getString(4)); + Assertions + .assertEquals( + "0.7071067812", execVerification + .filter( + "source='" + sourceOpenaireId + "'") + .collectAsList() + .get(0) + .getString(4)); - } + } } - From db4ca43ee84aa29610bbf6dcbef6f921bf57e13c Mon Sep 17 00:00:00 2001 From: Serafeim Chatzopoulos Date: Tue, 18 Jul 2023 18:38:26 +0300 Subject: [PATCH 237/449] Resolve conflict --- .../dhp/oa/graph/impact_indicators/oozie_app/workflow.xml | 7 ------- 1 file changed, 7 deletions(-) diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml index 1f344ba5a..6eb783941 100644 --- a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml @@ -340,19 +340,12 @@ -<<<<<<< HEAD -======= - - - ->>>>>>> 60f25b780de1c456762003cbb8b0011c9c82f93d - From 38dfebfbe6703f3200fb7f55845e56a2d16dbdb7 Mon Sep 17 00:00:00 2001 From: Giambattista Bloisi Date: Wed, 19 Jul 2023 14:18:56 +0200 Subject: [PATCH 238/449] Disable MdStoreClientTest test as it requires a local mongodb running and it does not perform any assertions --- .../src/test/java/eu/dnetlib/dhp/common/MdStoreClientTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dhp-common/src/test/java/eu/dnetlib/dhp/common/MdStoreClientTest.java b/dhp-common/src/test/java/eu/dnetlib/dhp/common/MdStoreClientTest.java index f38d04979..f87f6e313 100644 --- a/dhp-common/src/test/java/eu/dnetlib/dhp/common/MdStoreClientTest.java +++ b/dhp-common/src/test/java/eu/dnetlib/dhp/common/MdStoreClientTest.java @@ -15,7 +15,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; public class MdStoreClientTest { - @Test + // @Test public void testMongoCollection() throws IOException { final MdstoreClient client = new MdstoreClient("mongodb://localhost:27017", "mdstore"); From e47ed1fdb2003cad9fcbaa1e48a1177879dc22e1 Mon Sep 17 00:00:00 2001 From: Giambattista Bloisi Date: Wed, 19 Jul 2023 14:21:40 +0200 Subject: [PATCH 239/449] Use DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES in json mapper to avoid that tests fail if they encounter unmapped properties --- .../promote/PromoteActionPayloadForGraphTableJob.java | 4 +++- .../partition/PartitionActionSetsByPayloadTypeJobTest.java | 4 +++- .../promote/PromoteActionPayloadForGraphTableJobTest.java | 4 +++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/dhp-workflows/dhp-actionmanager/src/main/java/eu/dnetlib/dhp/actionmanager/promote/PromoteActionPayloadForGraphTableJob.java b/dhp-workflows/dhp-actionmanager/src/main/java/eu/dnetlib/dhp/actionmanager/promote/PromoteActionPayloadForGraphTableJob.java index c5f252c97..7b024bea8 100644 --- a/dhp-workflows/dhp-actionmanager/src/main/java/eu/dnetlib/dhp/actionmanager/promote/PromoteActionPayloadForGraphTableJob.java +++ b/dhp-workflows/dhp-actionmanager/src/main/java/eu/dnetlib/dhp/actionmanager/promote/PromoteActionPayloadForGraphTableJob.java @@ -20,6 +20,7 @@ import org.apache.spark.sql.SparkSession; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException; @@ -33,7 +34,8 @@ import eu.dnetlib.dhp.schema.oaf.*; public class PromoteActionPayloadForGraphTableJob { private static final Logger logger = LoggerFactory.getLogger(PromoteActionPayloadForGraphTableJob.class); - private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); + private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper() + .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); public static void main(String[] args) throws Exception { String jsonConfiguration = IOUtils diff --git a/dhp-workflows/dhp-actionmanager/src/test/java/eu/dnetlib/dhp/actionmanager/partition/PartitionActionSetsByPayloadTypeJobTest.java b/dhp-workflows/dhp-actionmanager/src/test/java/eu/dnetlib/dhp/actionmanager/partition/PartitionActionSetsByPayloadTypeJobTest.java index 62eec13d5..de74350f3 100644 --- a/dhp-workflows/dhp-actionmanager/src/test/java/eu/dnetlib/dhp/actionmanager/partition/PartitionActionSetsByPayloadTypeJobTest.java +++ b/dhp-workflows/dhp-actionmanager/src/test/java/eu/dnetlib/dhp/actionmanager/partition/PartitionActionSetsByPayloadTypeJobTest.java @@ -31,6 +31,7 @@ import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.junit.jupiter.MockitoExtension; +import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import eu.dnetlib.dhp.actionmanager.ISClient; @@ -46,7 +47,8 @@ public class PartitionActionSetsByPayloadTypeJobTest { private static Configuration configuration; private static SparkSession spark; - private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); + private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper() + .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); private static final StructType ATOMIC_ACTION_SCHEMA = StructType$.MODULE$ .apply( diff --git a/dhp-workflows/dhp-actionmanager/src/test/java/eu/dnetlib/dhp/actionmanager/promote/PromoteActionPayloadForGraphTableJobTest.java b/dhp-workflows/dhp-actionmanager/src/test/java/eu/dnetlib/dhp/actionmanager/promote/PromoteActionPayloadForGraphTableJobTest.java index df9202ed8..aa8c00786 100644 --- a/dhp-workflows/dhp-actionmanager/src/test/java/eu/dnetlib/dhp/actionmanager/promote/PromoteActionPayloadForGraphTableJobTest.java +++ b/dhp-workflows/dhp-actionmanager/src/test/java/eu/dnetlib/dhp/actionmanager/promote/PromoteActionPayloadForGraphTableJobTest.java @@ -25,6 +25,7 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; +import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import eu.dnetlib.dhp.schema.common.ModelSupport; @@ -41,7 +42,8 @@ public class PromoteActionPayloadForGraphTableJobTest { private Path inputActionPayloadRootDir; private Path outputDir; - private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); + private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper() + .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); @BeforeAll public static void beforeAll() { From dba34505de8d3d8704529c66afe4acdcac8944fc Mon Sep 17 00:00:00 2001 From: Giambattista Bloisi Date: Wed, 19 Jul 2023 14:24:52 +0200 Subject: [PATCH 240/449] Fix SparkStatsTest bug where parquet tables were incorrectly read as text files leading to unpredictable count() values --- .../dnetlib/dhp/oa/dedup/SparkStatsTest.java | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkStatsTest.java b/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkStatsTest.java index b33b627e7..07e993444 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkStatsTest.java +++ b/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkStatsTest.java @@ -145,34 +145,34 @@ public class SparkStatsTest implements Serializable { long orgs_blocks = spark .read() - .textFile(testOutputBasePath + "/" + testActionSetId + "/organization_blockstats") + .load(testOutputBasePath + "/" + testActionSetId + "/organization_blockstats") .count(); long pubs_blocks = spark .read() - .textFile(testOutputBasePath + "/" + testActionSetId + "/publication_blockstats") + .load(testOutputBasePath + "/" + testActionSetId + "/publication_blockstats") .count(); long sw_blocks = spark .read() - .textFile(testOutputBasePath + "/" + testActionSetId + "/software_blockstats") + .load(testOutputBasePath + "/" + testActionSetId + "/software_blockstats") .count(); long ds_blocks = spark .read() - .textFile(testOutputBasePath + "/" + testActionSetId + "/dataset_blockstats") + .load(testOutputBasePath + "/" + testActionSetId + "/dataset_blockstats") .count(); long orp_blocks = spark .read() - .textFile(testOutputBasePath + "/" + testActionSetId + "/otherresearchproduct_blockstats") + .load(testOutputBasePath + "/" + testActionSetId + "/otherresearchproduct_blockstats") .count(); - assertEquals(480, orgs_blocks); - assertEquals(295, pubs_blocks); - assertEquals(122, sw_blocks); - assertEquals(191, ds_blocks); - assertEquals(178, orp_blocks); + assertEquals(414, orgs_blocks); + assertEquals(187, pubs_blocks); + assertEquals(128, sw_blocks); + assertEquals(192, ds_blocks); + assertEquals(194, orp_blocks); } @AfterAll From 0210a14e436f3c83ac610e721237f7c9c73f3255 Mon Sep 17 00:00:00 2001 From: Giambattista Bloisi Date: Thu, 20 Jul 2023 23:45:57 +0200 Subject: [PATCH 241/449] Ignore timestamp differences in PromoteActionPayloadForGraphTableJobTest --- .../promote/PromoteActionPayloadForGraphTableJobTest.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/dhp-workflows/dhp-actionmanager/src/test/java/eu/dnetlib/dhp/actionmanager/promote/PromoteActionPayloadForGraphTableJobTest.java b/dhp-workflows/dhp-actionmanager/src/test/java/eu/dnetlib/dhp/actionmanager/promote/PromoteActionPayloadForGraphTableJobTest.java index aa8c00786..83153ae16 100644 --- a/dhp-workflows/dhp-actionmanager/src/test/java/eu/dnetlib/dhp/actionmanager/promote/PromoteActionPayloadForGraphTableJobTest.java +++ b/dhp-workflows/dhp-actionmanager/src/test/java/eu/dnetlib/dhp/actionmanager/promote/PromoteActionPayloadForGraphTableJobTest.java @@ -156,6 +156,10 @@ public class PromoteActionPayloadForGraphTableJobTest { List actualOutputRows = readGraphTableFromJobOutput(outputGraphTableDir.toString(), rowClazz) .collectAsList() .stream() + .map(s -> { + s.setLastupdatetimestamp(0L); + return s; + }) .sorted(Comparator.comparingInt(Object::hashCode)) .collect(Collectors.toList()); String expectedOutputGraphTableJsonDumpPath = resultFileLocation(strategy, rowClazz, actionPayloadClazz); @@ -168,6 +172,10 @@ public class PromoteActionPayloadForGraphTableJobTest { expectedOutputGraphTableJsonDumpFile.toString(), rowClazz) .collectAsList() .stream() + .map(s -> { + s.setLastupdatetimestamp(0L); + return s; + }) .sorted(Comparator.comparingInt(Object::hashCode)) .collect(Collectors.toList()); assertIterableEquals(expectedOutputRows, actualOutputRows); From 5e15f20e6e5b9961d842fcdf4590a61f84a31d2b Mon Sep 17 00:00:00 2001 From: Giambattista Bloisi Date: Fri, 21 Jul 2023 00:46:54 +0200 Subject: [PATCH 242/449] Fix entityMerger that was excluding the authors of the first entity in the list to merge --- .../main/java/eu/dnetlib/dhp/oa/dedup/DedupRecordFactory.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/DedupRecordFactory.java b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/DedupRecordFactory.java index 7637cde93..60669106a 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/DedupRecordFactory.java +++ b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/DedupRecordFactory.java @@ -110,6 +110,10 @@ public class DedupRecordFactory { // set authors and date if (ModelSupport.isSubClass(entity, Result.class)) { + Optional + .ofNullable(((Result) entity).getAuthor()) + .ifPresent(a -> authors.add(a)); + ((Result) entity).setAuthor(AuthorMerger.merge(authors)); } From 54c1eacef18d7759968abb89b84d870abbd77f47 Mon Sep 17 00:00:00 2001 From: Giambattista Bloisi Date: Fri, 21 Jul 2023 10:42:24 +0200 Subject: [PATCH 243/449] SparkJobTest was failing because testing workingdir was not cleaned up after eact test --- .../SparkJobTest.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/entitytoorganizationfromsemrel/SparkJobTest.java b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/entitytoorganizationfromsemrel/SparkJobTest.java index 2e75c75ad..517a20cd9 100644 --- a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/entitytoorganizationfromsemrel/SparkJobTest.java +++ b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/entitytoorganizationfromsemrel/SparkJobTest.java @@ -11,8 +11,10 @@ import org.apache.commons.io.FileUtils; import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.JavaSparkContext; +import org.apache.spark.sql.SaveMode; import org.apache.spark.sql.SparkSession; import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; @@ -58,6 +60,11 @@ public class SparkJobTest { .getOrCreate(); } + @AfterEach + public void afterEach() throws IOException { + FileUtils.deleteDirectory(workingDir.toFile()); + } + @AfterAll public static void afterAll() throws IOException { FileUtils.deleteDirectory(workingDir.toFile()); @@ -91,16 +98,19 @@ public class SparkJobTest { readPath(spark, leavesPath, Leaves.class) .write() + .mode(SaveMode.Overwrite) .option("compression", "gzip") .json(workingDir.toString() + "/leavesInput"); readPath(spark, resultOrgPath, KeyValueSet.class) .write() + .mode(SaveMode.Overwrite) .option("compression", "gzip") .json(workingDir.toString() + "/orgsInput"); readPath(spark, projectOrgPath, KeyValueSet.class) .write() + .mode(SaveMode.Overwrite) .option("compression", "gzip") .json(workingDir.toString() + "/projectInput"); @@ -369,16 +379,19 @@ public class SparkJobTest { readPath(spark, leavesPath, Leaves.class) .write() + .mode(SaveMode.Overwrite) .option("compression", "gzip") .json(workingDir.toString() + "/leavesInput"); readPath(spark, resultOrgPath, KeyValueSet.class) .write() + .mode(SaveMode.Overwrite) .option("compression", "gzip") .json(workingDir.toString() + "/orgsInput"); readPath(spark, projectOrgPath, KeyValueSet.class) .write() + .mode(SaveMode.Overwrite) .option("compression", "gzip") .json(workingDir.toString() + "/projectInput"); @@ -649,16 +662,19 @@ public class SparkJobTest { readPath(spark, leavesPath, Leaves.class) .write() + .mode(SaveMode.Overwrite) .option("compression", "gzip") .json(workingDir.toString() + "/leavesInput"); readPath(spark, resultOrgPath, KeyValueSet.class) .write() + .mode(SaveMode.Overwrite) .option("compression", "gzip") .json(workingDir.toString() + "/orgsInput"); readPath(spark, projectOrgPath, KeyValueSet.class) .write() + .mode(SaveMode.Overwrite) .option("compression", "gzip") .json(workingDir.toString() + "/projectInput"); From f03153823a6c710f9cb56280a717fd041b325334 Mon Sep 17 00:00:00 2001 From: Giambattista Bloisi Date: Fri, 21 Jul 2023 10:48:28 +0200 Subject: [PATCH 244/449] Update testCitationRelations number of expected citations according to changes made in 0559d8b4 (monodirectional citations) --- .../eu/dnetlib/dhp/doiboost/crossref/CrossrefMappingTest.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dhp-workflows/dhp-doiboost/src/test/scala/eu/dnetlib/dhp/doiboost/crossref/CrossrefMappingTest.scala b/dhp-workflows/dhp-doiboost/src/test/scala/eu/dnetlib/dhp/doiboost/crossref/CrossrefMappingTest.scala index e0ef0e65c..fbf6f72c0 100644 --- a/dhp-workflows/dhp-doiboost/src/test/scala/eu/dnetlib/dhp/doiboost/crossref/CrossrefMappingTest.scala +++ b/dhp-workflows/dhp-doiboost/src/test/scala/eu/dnetlib/dhp/doiboost/crossref/CrossrefMappingTest.scala @@ -149,7 +149,7 @@ class CrossrefMappingTest { assertNotNull(relationList) assertFalse(relationList.isEmpty) - assertEquals(doisReference.size * 2, relationList.size) + assertEquals(doisReference.size, relationList.size) mapper.getSerializationConfig.enable(SerializationConfig.Feature.INDENT_OUTPUT) relationList.foreach(p => println(mapper.writeValueAsString(p))) From 03da9651620f363ba23720b8f131c084856f28dd Mon Sep 17 00:00:00 2001 From: ikanellos Date: Fri, 21 Jul 2023 13:42:30 +0300 Subject: [PATCH 245/449] Format bip-score based file without doi references --- .../oozie_app/format_ranking_results.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/format_ranking_results.py b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/format_ranking_results.py index e7d62c2f1..8dbbe3ad3 100644 --- a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/format_ranking_results.py +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/format_ranking_results.py @@ -213,7 +213,10 @@ if mode == 'bip': cc_dir = sys.argv[4] impulse_dir = sys.argv[5] ram_dir = sys.argv[6] - refs_dir = sys.argv[7] + + # NOTE: This was used initial, but @Serafeim told me to remove it since we don't get doi-doi referencew anymore + # In case of emergency, bring this back + # refs_dir = sys.argv[7] # Score-specific dataframe pagerank_df = spark.read.schema(float_schema).option('delimiter', '\t').option('header',True).csv(pagerank_dir).repartition(num_partitions, 'id') @@ -221,7 +224,7 @@ if mode == 'bip': cc_df = spark.read.schema(int_schema).option('delimiter', '\t').option('header',True).csv(cc_dir).repartition(num_partitions, 'id') impulse_df = spark.read.schema(int_schema).option('delimiter', '\t').option('header',True).csv(impulse_dir).repartition(num_partitions, 'id') ram_df = spark.read.schema(float_schema).option('delimiter', '\t').option('header', True).csv(ram_dir).repartition(num_partitions, 'id') - refs_df = spark.read.schema(refs_schema).option('delimiter', '\t').option('header',True).csv(refs_dir).repartition(num_partitions, 'id') + # refs_df = spark.read.schema(refs_schema).option('delimiter', '\t').option('header',True).csv(refs_dir).repartition(num_partitions, 'id') # ----------- TESTING CODE --------------- # # pagerank_entries = pagerank_df.count() @@ -258,9 +261,10 @@ if mode == 'bip': .select(results_df.id, 'pagerank', 'pagerank_normalized', 'attrank', 'attrank_normalized', 'cc', 'cc_normalized',\ '3-cc', '3-cc_normalized', F.col('score').alias('ram')) - # Add references - results_df = results_df.join(refs_df, ['id']).select(results_df.id, 'pagerank', 'pagerank_normalized', 'attrank', 'attrank_normalized', \ - 'cc', 'cc_normalized', '3-cc', '3-cc_normalized', 'ram', 'num_refs') + # Add references - THIS WAS REMOVED SINCE WE DON't GET DOI REFERENCES + # In case of emergency bring back + # results_df = results_df.join(refs_df, ['id']).select(results_df.id, 'pagerank', 'pagerank_normalized', 'attrank', 'attrank_normalized', \ + # 'cc', 'cc_normalized', '3-cc', '3-cc_normalized', 'ram', 'num_refs') # Write resulting dataframe to file output_dir = "/".join(pagerank_dir.split('/')[:-1]) From 2cc5b1a39b36f6c0bc35a23cd2c76b7e04609eaf Mon Sep 17 00:00:00 2001 From: Serafeim Chatzopoulos Date: Fri, 21 Jul 2023 15:26:50 +0300 Subject: [PATCH 246/449] Fixes in workflow.xml --- .../bipfinder/SparkAtomicActionScoreJob.java | 20 ++-- .../score/deserializers/BipProjectModel.java | 97 ++++++++++--------- .../score/deserializers/BipResultModel.java | 4 +- .../PrepareBipFinder.java | 2 +- .../SparkAtomicActionScoreJobTest.java | 28 +++--- .../project/PrepareH2020ProgrammeTest.java | 2 +- .../project/ReadProjectsTest.java | 2 +- .../actionmanager/project/ReadTopicTest.java | 2 +- .../oa/graph/impact_indicators/job.properties | 2 +- .../impact_indicators/oozie_app/workflow.xml | 33 ++++--- 10 files changed, 100 insertions(+), 92 deletions(-) diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipfinder/SparkAtomicActionScoreJob.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipfinder/SparkAtomicActionScoreJob.java index 8b8e05723..fb11e829f 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipfinder/SparkAtomicActionScoreJob.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipfinder/SparkAtomicActionScoreJob.java @@ -9,7 +9,6 @@ import java.util.List; import java.util.Optional; import java.util.stream.Collectors; -import eu.dnetlib.dhp.actionmanager.bipmodel.score.deserializers.BipProjectModel; import org.apache.commons.io.IOUtils; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapred.SequenceFileOutputFormat; @@ -25,8 +24,9 @@ import org.slf4j.LoggerFactory; import com.fasterxml.jackson.databind.ObjectMapper; -import eu.dnetlib.dhp.actionmanager.bipmodel.score.deserializers.BipResultModel; import eu.dnetlib.dhp.actionmanager.bipmodel.BipScore; +import eu.dnetlib.dhp.actionmanager.bipmodel.score.deserializers.BipProjectModel; +import eu.dnetlib.dhp.actionmanager.bipmodel.score.deserializers.BipResultModel; import eu.dnetlib.dhp.application.ArgumentApplicationParser; import eu.dnetlib.dhp.common.HdfsSupport; import eu.dnetlib.dhp.schema.action.AtomicAction; @@ -89,8 +89,7 @@ public class SparkAtomicActionScoreJob implements Serializable { default: throw new RuntimeException("Unknown target entity: " + targetEntity); } - } - ); + }); } private static void prepareProjects(SparkSession spark, String inputPath, String outputPath) { @@ -98,17 +97,18 @@ public class SparkAtomicActionScoreJob implements Serializable { // read input bip project scores Dataset projectScores = readPath(spark, inputPath, BipProjectModel.class); - projectScores.map( (MapFunction) bipProjectScores -> { + projectScores.map((MapFunction) bipProjectScores -> { Project project = new Project(); project.setId(bipProjectScores.getProjectId()); project.setMeasures(bipProjectScores.toMeasures()); return project; }, Encoders.bean(Project.class)) - .toJavaRDD() - .map(p -> new AtomicAction(Project.class, p)) - .mapToPair( aa -> new Tuple2<>(new Text(aa.getClazz().getCanonicalName()), - new Text(OBJECT_MAPPER.writeValueAsString(aa)))) - .saveAsHadoopFile(outputPath, Text.class, Text.class, SequenceFileOutputFormat.class); + .toJavaRDD() + .map(p -> new AtomicAction(Project.class, p)) + .mapToPair( + aa -> new Tuple2<>(new Text(aa.getClazz().getCanonicalName()), + new Text(OBJECT_MAPPER.writeValueAsString(aa)))) + .saveAsHadoopFile(outputPath, Text.class, Text.class, SequenceFileOutputFormat.class); } diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipmodel/score/deserializers/BipProjectModel.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipmodel/score/deserializers/BipProjectModel.java index 77c1567a8..680e12504 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipmodel/score/deserializers/BipProjectModel.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipmodel/score/deserializers/BipProjectModel.java @@ -1,69 +1,74 @@ + package eu.dnetlib.dhp.actionmanager.bipmodel.score.deserializers; -import com.opencsv.bean.CsvBindByPosition; -import eu.dnetlib.dhp.schema.common.ModelConstants; -import eu.dnetlib.dhp.schema.oaf.KeyValue; -import eu.dnetlib.dhp.schema.oaf.utils.OafMapperUtils; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import eu.dnetlib.dhp.schema.oaf.Measure; +import static eu.dnetlib.dhp.actionmanager.Constants.*; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; -import static eu.dnetlib.dhp.actionmanager.Constants.*; +import com.opencsv.bean.CsvBindByPosition; + +import eu.dnetlib.dhp.schema.common.ModelConstants; +import eu.dnetlib.dhp.schema.oaf.KeyValue; +import eu.dnetlib.dhp.schema.oaf.Measure; +import eu.dnetlib.dhp.schema.oaf.utils.OafMapperUtils; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; @NoArgsConstructor @AllArgsConstructor @Getter @Setter public class BipProjectModel { - String projectId; + String projectId; - String numOfInfluentialResults; + String numOfInfluentialResults; - String numOfPopularResults; + String numOfPopularResults; - String totalImpulse; + String totalImpulse; - String totalCitationCount; + String totalCitationCount; - // each project bip measure has exactly one value, hence one key-value pair - private Measure createMeasure(String measureId, String measureValue) { + // each project bip measure has exactly one value, hence one key-value pair + private Measure createMeasure(String measureId, String measureValue) { - KeyValue kv = new KeyValue(); - kv.setKey("score"); - kv.setValue(measureValue); - kv.setDataInfo( - OafMapperUtils.dataInfo( - false, - UPDATE_DATA_INFO_TYPE, - true, - false, - OafMapperUtils.qualifier( - UPDATE_MEASURE_BIP_CLASS_ID, - UPDATE_CLASS_NAME, - ModelConstants.DNET_PROVENANCE_ACTIONS, - ModelConstants.DNET_PROVENANCE_ACTIONS), - "") - ); + KeyValue kv = new KeyValue(); + kv.setKey("score"); + kv.setValue(measureValue); + kv + .setDataInfo( + OafMapperUtils + .dataInfo( + false, + UPDATE_DATA_INFO_TYPE, + true, + false, + OafMapperUtils + .qualifier( + UPDATE_MEASURE_BIP_CLASS_ID, + UPDATE_CLASS_NAME, + ModelConstants.DNET_PROVENANCE_ACTIONS, + ModelConstants.DNET_PROVENANCE_ACTIONS), + "")); - Measure measure = new Measure(); - measure.setId(measureId); - measure.setUnit(Collections.singletonList(kv)); - return measure; - } - public List toMeasures() { - return Arrays.asList( - createMeasure("numOfInfluentialResults", numOfInfluentialResults), - createMeasure("numOfPopularResults", numOfPopularResults), - createMeasure("totalImpulse", totalImpulse), - createMeasure("totalCitationCount", totalCitationCount) - ); - } + Measure measure = new Measure(); + measure.setId(measureId); + measure.setUnit(Collections.singletonList(kv)); + return measure; + } + + public List toMeasures() { + return Arrays + .asList( + createMeasure("numOfInfluentialResults", numOfInfluentialResults), + createMeasure("numOfPopularResults", numOfPopularResults), + createMeasure("totalImpulse", totalImpulse), + createMeasure("totalCitationCount", totalCitationCount)); + } } diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipmodel/score/deserializers/BipResultModel.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipmodel/score/deserializers/BipResultModel.java index 06a173413..f992dc59f 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipmodel/score/deserializers/BipResultModel.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipmodel/score/deserializers/BipResultModel.java @@ -1,13 +1,13 @@ package eu.dnetlib.dhp.actionmanager.bipmodel.score.deserializers; -import eu.dnetlib.dhp.actionmanager.bipmodel.Score; - import java.io.Serializable; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import eu.dnetlib.dhp.actionmanager.bipmodel.Score; + /** * Class that maps the model of the bipFinder! input data. * Only needed for deserialization purposes diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/PrepareBipFinder.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/PrepareBipFinder.java index efcb96a85..0507f90e5 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/PrepareBipFinder.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/PrepareBipFinder.java @@ -24,8 +24,8 @@ import org.slf4j.LoggerFactory; import com.fasterxml.jackson.databind.ObjectMapper; -import eu.dnetlib.dhp.actionmanager.bipmodel.score.deserializers.BipResultModel; import eu.dnetlib.dhp.actionmanager.bipmodel.BipScore; +import eu.dnetlib.dhp.actionmanager.bipmodel.score.deserializers.BipResultModel; import eu.dnetlib.dhp.application.ArgumentApplicationParser; import eu.dnetlib.dhp.common.HdfsSupport; import eu.dnetlib.dhp.schema.common.ModelConstants; diff --git a/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/bipfinder/SparkAtomicActionScoreJobTest.java b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/bipfinder/SparkAtomicActionScoreJobTest.java index aa5a19f11..7752fbc27 100644 --- a/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/bipfinder/SparkAtomicActionScoreJobTest.java +++ b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/bipfinder/SparkAtomicActionScoreJobTest.java @@ -7,8 +7,6 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; -import eu.dnetlib.dhp.schema.oaf.KeyValue; -import eu.dnetlib.dhp.schema.oaf.Project; import org.apache.commons.io.FileUtils; import org.apache.hadoop.io.Text; import org.apache.spark.SparkConf; @@ -28,6 +26,8 @@ import org.slf4j.LoggerFactory; import com.fasterxml.jackson.databind.ObjectMapper; import eu.dnetlib.dhp.schema.action.AtomicAction; +import eu.dnetlib.dhp.schema.oaf.KeyValue; +import eu.dnetlib.dhp.schema.oaf.Project; import eu.dnetlib.dhp.schema.oaf.Result; public class SparkAtomicActionScoreJobTest { @@ -73,15 +73,16 @@ public class SparkAtomicActionScoreJobTest { } private void runJob(String inputPath, String outputPath, String targetEntity) throws Exception { - SparkAtomicActionScoreJob.main( - new String[] { + SparkAtomicActionScoreJob + .main( + new String[] { "-isSparkSessionManaged", Boolean.FALSE.toString(), "-inputPath", inputPath, "-outputPath", outputPath, "-targetEntity", targetEntity, - } - ); + }); } + @Test void testResultScores() throws Exception { final String targetEntity = RESULT; @@ -149,8 +150,8 @@ public class SparkAtomicActionScoreJobTest { void testProjectScores() throws Exception { String targetEntity = PROJECT; String inputResultScores = getClass() - .getResource("/eu/dnetlib/dhp/actionmanager/bipfinder/project_bip_scores.json") - .getPath(); + .getResource("/eu/dnetlib/dhp/actionmanager/bipfinder/project_bip_scores.json") + .getPath(); String outputPath = workingDir.toString() + "/" + targetEntity + "/actionSet"; // execute the job to generate the action sets for project scores @@ -159,9 +160,9 @@ public class SparkAtomicActionScoreJobTest { final JavaSparkContext sc = new JavaSparkContext(spark.sparkContext()); JavaRDD projects = sc - .sequenceFile(outputPath, Text.class, Text.class) - .map(value -> OBJECT_MAPPER.readValue(value._2().toString(), AtomicAction.class)) - .map(aa -> ((Project) aa.getPayload())); + .sequenceFile(outputPath, Text.class, Text.class) + .map(value -> OBJECT_MAPPER.readValue(value._2().toString(), AtomicAction.class)) + .map(aa -> ((Project) aa.getPayload())); // test the number of projects assertEquals(4, projects.count()); @@ -171,7 +172,8 @@ public class SparkAtomicActionScoreJobTest { // count that the project with id testProjectId is present assertEquals(1, projects.filter(row -> row.getId().equals(testProjectId)).count()); - projects.filter(row -> row.getId().equals(testProjectId)) + projects + .filter(row -> row.getId().equals(testProjectId)) .flatMap(r -> r.getMeasures().iterator()) .foreach(m -> { log.info(m.getId() + " " + m.getUnit()); @@ -184,7 +186,7 @@ public class SparkAtomicActionScoreJobTest { // ensure that the correct key is provided, i.e. score assertEquals("score", kv.getKey()); - switch(m.getId()) { + switch (m.getId()) { case "numOfInfluentialResults": assertEquals("0", kv.getValue()); break; diff --git a/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/project/PrepareH2020ProgrammeTest.java b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/project/PrepareH2020ProgrammeTest.java index c68bfa13a..b30658feb 100644 --- a/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/project/PrepareH2020ProgrammeTest.java +++ b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/project/PrepareH2020ProgrammeTest.java @@ -92,7 +92,7 @@ public class PrepareH2020ProgrammeTest { Assertions.assertEquals(0, verificationDataset.filter("classification = ''").count()); - //tmp.foreach(csvProgramme -> System.out.println(OBJECT_MAPPER.writeValueAsString(csvProgramme))); + // tmp.foreach(csvProgramme -> System.out.println(OBJECT_MAPPER.writeValueAsString(csvProgramme))); Assertions .assertEquals( diff --git a/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/project/ReadProjectsTest.java b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/project/ReadProjectsTest.java index 4be09c4b7..0d92c48a8 100644 --- a/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/project/ReadProjectsTest.java +++ b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/project/ReadProjectsTest.java @@ -98,7 +98,7 @@ public class ReadProjectsTest { Assertions.assertEquals("H2020-EU.1.3.", project.getLegalBasis()); Assertions.assertEquals("MSCA-IF-2019", project.getTopics()); - //tmp.foreach(p -> System.out.println(OBJECT_MAPPER.writeValueAsString(p))); + // tmp.foreach(p -> System.out.println(OBJECT_MAPPER.writeValueAsString(p))); } } diff --git a/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/project/ReadTopicTest.java b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/project/ReadTopicTest.java index bdb0cc3a1..82a9e6aed 100644 --- a/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/project/ReadTopicTest.java +++ b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/project/ReadTopicTest.java @@ -93,7 +93,7 @@ public class ReadTopicTest { Assertions.assertEquals("Individual Fellowships", topic.getTitle()); Assertions.assertEquals("MSCA-IF-2019", topic.getTopic()); - //tmp.foreach(p -> System.out.println(OBJECT_MAPPER.writeValueAsString(p))); + // tmp.foreach(p -> System.out.println(OBJECT_MAPPER.writeValueAsString(p))); } } diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/job.properties b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/job.properties index 9d6c94ca9..b1598910d 100644 --- a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/job.properties +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/job.properties @@ -97,7 +97,7 @@ oozie.wf.application.path=${oozieTopWfApplicationPath} # Path where the final output should be? -actionSetOutputPath=${workingDir}/bip_actionsets/ +actionSetOutputPath=${workingDir}/bip_actionsets # The directory to store project impact indicators projectImpactIndicatorsOutput=${workingDir}/project_indicators diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml index 6eb783941..65067dace 100644 --- a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml @@ -24,20 +24,21 @@ ${wf:conf('resume') eq "impulse"} ${wf:conf('resume') eq "pagerank"} ${wf:conf('resume') eq "attrank"} - ${wf:conf('resume') eq "format-results"} ${wf:conf('resume') eq "map-ids"} ${wf:conf('resume') eq "map-scores"} ${wf:conf('resume') eq "start"} - ${wf:conf('resume') eq "projects-impact"} - + + ${wf:conf('resume') eq "projects-impact"} + ${wf:conf('resume') eq "projects-impact-actionsets"} + - + @@ -479,7 +480,7 @@ - + @@ -526,7 +527,7 @@ - + @@ -568,14 +569,14 @@ - - + + - + @@ -583,13 +584,13 @@ - + - + - yarn + yarn-cluster cluster Produces the atomic action with the bip finder scores for publications eu.dnetlib.dhp.actionmanager.bipfinder.SparkAtomicActionScoreJob @@ -640,7 +641,7 @@ - ${openaireDataInput}/relations + ${openaireDataInput}/relation ${nameNode}/${workingDir}/${wf:actionData('get-file-names')['pr_file']} @@ -658,16 +659,16 @@ - + - + - yarn + yarn-cluster cluster Produces the atomic action with the bip finder scores for projects eu.dnetlib.dhp.actionmanager.bipfinder.SparkAtomicActionScoreJob From cb0f3c50f69bba7c0db137117e973bb8bd865c3f Mon Sep 17 00:00:00 2001 From: Serafeim Chatzopoulos Date: Fri, 21 Jul 2023 16:07:10 +0300 Subject: [PATCH 247/449] Format workflow.xml --- .../impact_indicators/oozie_app/workflow.xml | 182 +++--------------- 1 file changed, 32 insertions(+), 150 deletions(-) diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml index 65067dace..349e054d8 100644 --- a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml @@ -13,7 +13,6 @@ - @@ -38,27 +37,14 @@ - + - - - - - yarn-cluster cluster - - - Openaire Ranking Graph Creation - + OpenAIRE Ranking Graph Creation create_openaire_ranking_graph.py - --executor-memory=${sparkHighExecutorMemory} @@ -80,39 +66,30 @@ ${sparkShufflePartitions} ${openaireGraphInputPath} - + ${wfAppPath}/create_openaire_ranking_graph.py#create_openaire_ranking_graph.py - - - - + - - yarn-cluster cluster - - - Spark CC - + Citation Count calculation CC.py - --executor-memory=${sparkHighExecutorMemory} @@ -129,31 +106,23 @@ ${openaireGraphInputPath} ${sparkShufflePartitions} - + ${wfAppPath}/bip-ranker/CC.py#CC.py - - - + - - yarn-cluster cluster - - - Spark RAM - + RAM calculation TAR.py - --executor-memory=${sparkHighExecutorMemory} @@ -171,37 +140,27 @@ ${ramGamma} ${currentYear} RAM - ${sparkShufflePartitions} ${checkpointDir} - + ${wfAppPath}/bip-ranker/TAR.py#TAR.py - - - + - - - yarn-cluster cluster - - - Spark Impulse - + Impulse calculation CC.py - --executor-memory=${sparkHighExecutorMemory} @@ -219,47 +178,22 @@ ${sparkShufflePartitions} 3 - + ${wfAppPath}/bip-ranker/CC.py#CC.py - - - - - - - - - - - - - - - - yarn-cluster cluster - - - Spark Pagerank - + Pagerank calculation PageRank.py - --executor-memory=${sparkHighExecutorMemory} @@ -280,31 +214,22 @@ ${sparkShufflePartitions} dfs - + ${wfAppPath}/bip-ranker/PageRank.py#PageRank.py - - - - - yarn-cluster cluster - - - Spark AttRank - + AttRank calculation AttRank.py - --executor-memory=${sparkHighExecutorMemory} @@ -330,27 +255,16 @@ ${sparkShufflePartitions} dfs - + ${wfAppPath}/bip-ranker/AttRank.py#AttRank.py - - - - - - - @@ -360,15 +274,12 @@ ${workingDir} - ${wfAppPath}/get_ranking_files.sh#get_ranking_files.sh - - @@ -383,18 +294,12 @@ - - yarn-cluster cluster - - Format Ranking Results JSON - format_ranking_results.py - --executor-memory=${sparkNormalExecutorMemory} @@ -419,13 +324,11 @@ ${sparkShufflePartitions} openaire - + ${wfAppPath}/format_ranking_results.py#format_ranking_results.py - - @@ -471,18 +374,15 @@ ${wfAppPath}/format_ranking_results.py#format_ranking_results.py - - - + - + - @@ -490,15 +390,10 @@ - yarn-cluster cluster - - Openaire-DOI synonym collection - map_openaire_ids_to_dois.py - --executor-memory=${sparkHighExecutorMemory} @@ -515,19 +410,16 @@ ${openaireDataInput}/ ${synonymFolder} - + ${wfAppPath}/map_openaire_ids_to_dois.py#map_openaire_ids_to_dois.py - - - - + @@ -535,12 +427,8 @@ yarn-cluster cluster - - Mapping Openaire Scores to DOIs - map_scores_to_dois.py - --executor-memory=${sparkHighExecutorMemory} @@ -564,18 +452,15 @@ ${nameNode}/${workingDir}/${wf:actionData('get-file-names')['impulse_file']} ${nameNode}/${workingDir}/${wf:actionData('get-file-names')['ram_file']} - ${wfAppPath}/map_scores_to_dois.py#map_scores_to_dois.py - - - + @@ -590,11 +475,13 @@ + yarn-cluster cluster Produces the atomic action with the bip finder scores for publications eu.dnetlib.dhp.actionmanager.bipfinder.SparkAtomicActionScoreJob dhp-aggregation-${projectVersion}.jar + --executor-memory=${sparkNormalExecutorMemory} --executor-cores=${sparkExecutorCores} @@ -609,23 +496,19 @@ --outputPath${actionSetOutputPath}/results/ --targetEntityresult + + - - yarn-cluster cluster - - - Project Impact Indicators - + Project Impact Indicators calculation projects_impact.py - --executor-memory=${sparkHighExecutorMemory} @@ -639,7 +522,6 @@ - ${openaireDataInput}/relation @@ -653,26 +535,23 @@ ${sparkShufflePartitions} ${projectImpactIndicatorsOutput} - - ${wfAppPath}/projects_impact.py#projects_impact.py - - - + yarn-cluster cluster Produces the atomic action with the bip finder scores for projects eu.dnetlib.dhp.actionmanager.bipfinder.SparkAtomicActionScoreJob dhp-aggregation-${projectVersion}.jar + --executor-memory=${sparkNormalExecutorMemory} --executor-cores=${sparkExecutorCores} @@ -683,12 +562,15 @@ --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} --conf spark.sql.warehouse.dir=${sparkSqlWarehouseDir} + --inputPath${projectImpactIndicatorsOutput} --outputPath${actionSetOutputPath}/projects/ --targetEntityproject + + From 2374f445a941a76fe239a95e75a5e491c12a22bf Mon Sep 17 00:00:00 2001 From: ikanellos Date: Fri, 21 Jul 2023 17:42:46 +0300 Subject: [PATCH 248/449] Produce additional bip update specific files --- .../oozie_app/map_scores_to_dois.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/map_scores_to_dois.py b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/map_scores_to_dois.py index 0fc67eb53..f6a8e9996 100755 --- a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/map_scores_to_dois.py +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/map_scores_to_dois.py @@ -15,6 +15,8 @@ from pyspark.sql.types import * # Import sql functions with shorthand alias import pyspark.sql.functions as F + +from pyspark.sql.functions import max # from pyspark.sql.functions import udf ################################################################################################# ################################################################################################# @@ -127,6 +129,10 @@ for offset, input_file in enumerate(input_file_list): # Load file to dataframe ranking_df = spark.read.schema(schema).option('delimiter', '\t').csv(input_file).repartition(num_partitions, 'id') + + # Get max score + max_score = ranking_df.select(max('score').alias('max')).collect()[0]['max'] + print ("Max Score for " + str(input_file) + " is " + str(max_score)) # TESTING # print ("Loaded df sample:") @@ -138,6 +144,15 @@ for offset, input_file in enumerate(input_file_list): output_file = output_file_list[offset] print ("Writing to: " + output_file) doi_score_df.write.mode('overwrite').option('delimiter','\t').option('header',False).csv(output_file, compression='gzip') + + # Creata another file for the bip update process + ranking_df = ranking_df.select('id', 'score', F.lit(F.col('score')/max_score).alias('normalized_score'), 'class', F.col('class').alias('class_dup')) + doi_score_df = synonym_df.join(ranking_df, ['id']).select('doi', 'score', 'normalized_score', 'class', 'class_dup').repartition(num_partitions, 'doi').cache() + output_file = output_file.replace(".txt.gz", "_for_bip_update.txt.gz") + print ("Writing bip update to: " + output_file) + doi_score_df.write.mode('overwrite').option('delimiter','\t').option('header',False).csv(output_file, compression='gzip') + + # Free memory? ranking_df.unpersist(True) From 3a0f09774a941b38e641b2d74ea073a9b6bce187 Mon Sep 17 00:00:00 2001 From: Serafeim Chatzopoulos Date: Fri, 21 Jul 2023 17:55:41 +0300 Subject: [PATCH 249/449] Add script to find score limits --- .../oozie_app/get_score_limits.sh | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/get_score_limits.sh diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/get_score_limits.sh b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/get_score_limits.sh new file mode 100644 index 000000000..6d4161d7f --- /dev/null +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/get_score_limits.sh @@ -0,0 +1,63 @@ +#/usr/bin/bash + +# Read log files from ranking scripts and create a two-line file +# with score limits for the various measures. To be used by Kleanthis + +attrank_file=$(ls *attrank*.log); +pr_file=$(ls *pagerank*.log) +ram_file=$(ls *ram*.log); +cc_file=$(ls *cc*.log); +impulse_file=$(ls *impulse*.log); + +echo +echo "-----------------------------" +echo "Attrank file:${attrank_file}"; +echo "PageRank file:${pr_file}"; +echo "RAM file:${ram_file}"; +echo "CC file:${cc_file}"; +echo "Impulse file:${impulse_file}"; +echo "-----------------------------" +echo +echo + +# output file will be called score_limits.csv +echo -e "influence_top001\tinfluence_top01\tinfluence_top1\tinfluence_top10\tpopularity_top001\tpopularity_top01\tpopularity_top1\tpopularity_top10\timpulse_top001\timpulse_top01\timpulse_top1\timpulse_top10\tcc_top001\tcc_top01\tcc_top1\tcc_top10" > score_limits.csv +# ---------------------------------------------------- # +# Get respective score limits (we don't need RAM) +inf_001=$(grep "^0.01%" ${pr_file} | cut -f 2); +inf_01=$(grep "^0.1%" ${pr_file} | cut -f 2); +inf_1=$(grep "^1%" ${pr_file} | cut -f 2); +inf_10=$(grep "^10%" ${pr_file} | cut -f 2); +echo "Influnence limits:" +echo -e "${inf_001}\t${inf_01}\t${inf_1}\t${inf_10}"; +# ---------------------------------------------------- # +pop_001=$(grep "^0.01%" ${attrank_file} | cut -f 2); +pop_01=$(grep "^0.1%" ${attrank_file} | cut -f 2); +pop_1=$(grep "^1%" ${attrank_file} | cut -f 2); +pop_10=$(grep "^10%" ${attrank_file} | cut -f 2); +echo "Popularity limits:"; +echo -e "${pop_001}\t${pop_01}\t${pop_1}\t${pop_10}"; +# ---------------------------------------------------- # +imp_001=$(grep "^0.01%" ${impulse_file} | cut -f 2); +imp_01=$(grep "^0.1%" ${impulse_file} | cut -f 2); +imp_1=$(grep "^1%" ${impulse_file} | cut -f 2); +imp_10=$(grep "^10%" ${impulse_file} | cut -f 2); +echo "Popularity limits:"; +echo -e "${imp_001}\t${imp_01}\t${imp_1}\t${imp_10}"; +# ---------------------------------------------------- # +cc_001=$(grep "^0.01%" ${cc_file} | cut -f 2); +cc_01=$(grep "^0.1%" ${cc_file} | cut -f 2); +cc_1=$(grep "^1%" ${cc_file} | cut -f 2); +cc_10=$(grep "^10%" ${cc_file} | cut -f 2); +echo "Popularity limits:"; +echo -e "${cc_001}\t${cc_01}\t${cc_1}\t${cc_10}"; +# ---------------------------------------------------- # + +echo -e "${inf_001}\t${inf_01}\t${inf_1}\t${inf_10}\t${pop_001}\t${pop_01}\t${pop_1}\t${pop_10}\t${imp_001}\t${imp_01}\t${imp_1}\t${imp_10}\t${cc_001}\t${cc_01}\t${cc_1}\t${cc_10}" >> score_limits.csv + +echo +echo "score_limits.csv contents:" +cat score_limits.csv + +echo; +echo; From bb5b845e3cd0116a3df8bd8c70d7d8ebabfd8b3c Mon Sep 17 00:00:00 2001 From: Giambattista Bloisi Date: Mon, 17 Jul 2023 17:18:46 +0200 Subject: [PATCH 250/449] Use scala.binary.version property to resolve scala maven dependencies Ensure consistent usage of maven properties Profile for compiling with scala 2.12 and Spark 3.4 --- dhp-common/pom.xml | 8 +-- dhp-pace-core/pom.xml | 17 +++--- .../eu/dnetlib/pace/util/DiffPatchMatch.java | 18 +++++++ dhp-workflows/dhp-actionmanager/pom.xml | 4 +- dhp-workflows/dhp-aggregation/pom.xml | 11 +++- dhp-workflows/dhp-blacklist/pom.xml | 4 +- dhp-workflows/dhp-broker-events/pom.xml | 4 +- dhp-workflows/dhp-dedup-openaire/pom.xml | 21 +++++--- dhp-workflows/dhp-doiboost/pom.xml | 6 ++- dhp-workflows/dhp-enrichment/pom.xml | 6 +-- dhp-workflows/dhp-graph-mapper/pom.xml | 12 +++-- dhp-workflows/dhp-graph-provision/pom.xml | 8 +-- dhp-workflows/dhp-stats-promote/pom.xml | 4 +- dhp-workflows/dhp-stats-update/pom.xml | 4 +- .../dhp-usage-raw-data-update/pom.xml | 6 +-- dhp-workflows/dhp-usage-stats-build/pom.xml | 6 +-- pom.xml | 53 +++++++++++++++---- 17 files changed, 133 insertions(+), 59 deletions(-) diff --git a/dhp-common/pom.xml b/dhp-common/pom.xml index a7a83821e..6198bd81e 100644 --- a/dhp-common/pom.xml +++ b/dhp-common/pom.xml @@ -52,6 +52,8 @@ + true + ${scala.binary.version} ${scala.version} @@ -81,11 +83,11 @@ org.apache.spark - spark-core_2.11 + spark-core_${scala.binary.version} org.apache.spark - spark-sql_2.11 + spark-sql_${scala.binary.version} @@ -159,7 +161,7 @@ eu.dnetlib.dhp - dhp-schemas + ${dhp-schemas.artifact} diff --git a/dhp-pace-core/pom.xml b/dhp-pace-core/pom.xml index 12174a5c5..fd7f44fc9 100644 --- a/dhp-pace-core/pom.xml +++ b/dhp-pace-core/pom.xml @@ -20,7 +20,7 @@ net.alchim31.maven scala-maven-plugin - 4.0.1 + ${net.alchim31.maven.version} scala-compile-first @@ -39,8 +39,9 @@ + true + ${scala.binary.version} ${scala.version} - -target:jvm-1.8 @@ -68,7 +69,6 @@ commons-io commons-io - org.antlr stringtemplate @@ -89,17 +89,22 @@ org.apache.commons commons-math3 - com.jayway.jsonpath json-path - com.ibm.icu icu4j - + + org.apache.spark + spark-core_${scala.binary.version} + + + org.apache.spark + spark-sql_${scala.binary.version} + diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/DiffPatchMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/DiffPatchMatch.java index 84d49bd5c..12c96500e 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/DiffPatchMatch.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/DiffPatchMatch.java @@ -1,6 +1,24 @@ package eu.dnetlib.pace.util; +/* + * Diff Match and Patch + * Copyright 2018 The diff-match-patch Authors. + * https://github.com/google/diff-match-patch + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + /* * Diff Match and Patch * Copyright 2018 The diff-match-patch Authors. diff --git a/dhp-workflows/dhp-actionmanager/pom.xml b/dhp-workflows/dhp-actionmanager/pom.xml index 29e1fab1f..ce13502b6 100644 --- a/dhp-workflows/dhp-actionmanager/pom.xml +++ b/dhp-workflows/dhp-actionmanager/pom.xml @@ -11,12 +11,12 @@ org.apache.spark - spark-core_2.11 + spark-core_${scala.binary.version} org.apache.spark - spark-sql_2.11 + spark-sql_${scala.binary.version} diff --git a/dhp-workflows/dhp-aggregation/pom.xml b/dhp-workflows/dhp-aggregation/pom.xml index 53d349d2a..108d25ba6 100644 --- a/dhp-workflows/dhp-aggregation/pom.xml +++ b/dhp-workflows/dhp-aggregation/pom.xml @@ -38,6 +38,8 @@ + true + ${scala.binary.version} ${scala.version} @@ -54,11 +56,11 @@ org.apache.spark - spark-core_2.11 + spark-core_${scala.binary.version} org.apache.spark - spark-sql_2.11 + spark-sql_${scala.binary.version} @@ -75,6 +77,11 @@ dom4j dom4j + + org.scala-lang.modules + scala-xml_${scala.binary.version} + ${scala-xml.version} + xml-apis diff --git a/dhp-workflows/dhp-blacklist/pom.xml b/dhp-workflows/dhp-blacklist/pom.xml index 479a9e8c6..7ecc8b35d 100644 --- a/dhp-workflows/dhp-blacklist/pom.xml +++ b/dhp-workflows/dhp-blacklist/pom.xml @@ -16,11 +16,11 @@ org.apache.spark - spark-core_2.11 + spark-core_${scala.binary.version} org.apache.spark - spark-sql_2.11 + spark-sql_${scala.binary.version} diff --git a/dhp-workflows/dhp-broker-events/pom.xml b/dhp-workflows/dhp-broker-events/pom.xml index 01f1ea321..322fc7e93 100644 --- a/dhp-workflows/dhp-broker-events/pom.xml +++ b/dhp-workflows/dhp-broker-events/pom.xml @@ -18,11 +18,11 @@ org.apache.spark - spark-core_2.11 + spark-core_${scala.binary.version} org.apache.spark - spark-sql_2.11 + spark-sql_${scala.binary.version} org.elasticsearch diff --git a/dhp-workflows/dhp-dedup-openaire/pom.xml b/dhp-workflows/dhp-dedup-openaire/pom.xml index af4511c3c..a271efe8e 100644 --- a/dhp-workflows/dhp-dedup-openaire/pom.xml +++ b/dhp-workflows/dhp-dedup-openaire/pom.xml @@ -13,7 +13,7 @@ net.alchim31.maven scala-maven-plugin - 4.0.1 + ${net.alchim31.maven.version} scala-compile-first @@ -32,6 +32,8 @@ + true + ${scala.binary.version} ${scala.version} @@ -53,30 +55,35 @@ ${project.version} + + org.apache.commons + commons-lang3 + + org.scala-lang.modules - scala-java8-compat_2.11 + scala-java8-compat_${scala.binary.version} 1.0.2 org.scala-lang.modules - scala-collection-compat_2.11 - 2.8.0 + scala-collection-compat_${scala.binary.version} + 2.11.0 org.apache.spark - spark-core_2.11 + spark-core_${scala.binary.version} org.apache.spark - spark-sql_2.11 + spark-sql_${scala.binary.version} org.apache.spark - spark-graphx_2.11 + spark-graphx_${scala.binary.version} diff --git a/dhp-workflows/dhp-doiboost/pom.xml b/dhp-workflows/dhp-doiboost/pom.xml index 37accbc4f..6e8911fba 100644 --- a/dhp-workflows/dhp-doiboost/pom.xml +++ b/dhp-workflows/dhp-doiboost/pom.xml @@ -33,6 +33,8 @@ + true + ${scala.binary.version} ${scala.version} @@ -70,12 +72,12 @@ org.apache.spark - spark-core_2.11 + spark-core_${scala.binary.version} org.apache.spark - spark-sql_2.11 + spark-sql_${scala.binary.version} diff --git a/dhp-workflows/dhp-enrichment/pom.xml b/dhp-workflows/dhp-enrichment/pom.xml index 591cad252..9698dee03 100644 --- a/dhp-workflows/dhp-enrichment/pom.xml +++ b/dhp-workflows/dhp-enrichment/pom.xml @@ -12,11 +12,11 @@ org.apache.spark - spark-core_2.11 + spark-core_${scala.binary.version} org.apache.spark - spark-sql_2.11 + spark-sql_${scala.binary.version} @@ -27,7 +27,7 @@ org.apache.spark - spark-hive_2.11 + spark-hive_${scala.binary.version} test diff --git a/dhp-workflows/dhp-graph-mapper/pom.xml b/dhp-workflows/dhp-graph-mapper/pom.xml index f579a7d2b..ef35951c0 100644 --- a/dhp-workflows/dhp-graph-mapper/pom.xml +++ b/dhp-workflows/dhp-graph-mapper/pom.xml @@ -14,7 +14,7 @@ net.alchim31.maven scala-maven-plugin - 4.0.1 + ${net.alchim31.maven.version} scala-compile-first @@ -37,6 +37,8 @@ -Xmax-classfile-name 200 + true + ${scala.binary.version} ${scala.version} @@ -64,15 +66,15 @@ org.apache.spark - spark-core_2.11 + spark-core_${scala.binary.version} org.apache.spark - spark-sql_2.11 + spark-sql_${scala.binary.version} org.apache.spark - spark-hive_2.11 + spark-hive_${scala.binary.version} test @@ -125,7 +127,7 @@ org.json4s - json4s-jackson_2.11 + json4s-jackson_${scala.binary.version} diff --git a/dhp-workflows/dhp-graph-provision/pom.xml b/dhp-workflows/dhp-graph-provision/pom.xml index 413cc8cdd..e62fcdf19 100644 --- a/dhp-workflows/dhp-graph-provision/pom.xml +++ b/dhp-workflows/dhp-graph-provision/pom.xml @@ -14,7 +14,7 @@ net.alchim31.maven scala-maven-plugin - 4.0.1 + ${net.alchim31.maven.version} scala-compile-first @@ -37,6 +37,8 @@ -Xmax-classfile-name 200 + true + ${scala.binary.version} ${scala.version} @@ -48,11 +50,11 @@ org.apache.spark - spark-core_2.11 + spark-core_${scala.binary.version} org.apache.spark - spark-sql_2.11 + spark-sql_${scala.binary.version} com.jayway.jsonpath diff --git a/dhp-workflows/dhp-stats-promote/pom.xml b/dhp-workflows/dhp-stats-promote/pom.xml index ce3e739a5..9e17a78dc 100644 --- a/dhp-workflows/dhp-stats-promote/pom.xml +++ b/dhp-workflows/dhp-stats-promote/pom.xml @@ -10,11 +10,11 @@ org.apache.spark - spark-core_2.11 + spark-core_${scala.binary.version} org.apache.spark - spark-sql_2.11 + spark-sql_${scala.binary.version} diff --git a/dhp-workflows/dhp-stats-update/pom.xml b/dhp-workflows/dhp-stats-update/pom.xml index 2bc610c42..f491b5868 100644 --- a/dhp-workflows/dhp-stats-update/pom.xml +++ b/dhp-workflows/dhp-stats-update/pom.xml @@ -10,11 +10,11 @@ org.apache.spark - spark-core_2.11 + spark-core_${scala.binary.version} org.apache.spark - spark-sql_2.11 + spark-sql_${scala.binary.version} diff --git a/dhp-workflows/dhp-usage-raw-data-update/pom.xml b/dhp-workflows/dhp-usage-raw-data-update/pom.xml index 954c8bd39..a9dbb09ae 100644 --- a/dhp-workflows/dhp-usage-raw-data-update/pom.xml +++ b/dhp-workflows/dhp-usage-raw-data-update/pom.xml @@ -46,13 +46,11 @@ org.apache.spark - spark-core_2.11 - 2.2.0 + spark-core_${scala.binary.version} org.apache.spark - spark-sql_2.11 - 2.4.5 + spark-sql_${scala.binary.version} com.googlecode.json-simple diff --git a/dhp-workflows/dhp-usage-stats-build/pom.xml b/dhp-workflows/dhp-usage-stats-build/pom.xml index 54e18580b..56aec73b7 100644 --- a/dhp-workflows/dhp-usage-stats-build/pom.xml +++ b/dhp-workflows/dhp-usage-stats-build/pom.xml @@ -46,13 +46,11 @@ org.apache.spark - spark-core_2.11 - 2.2.0 + spark-core_${scala.binary.version} org.apache.spark - spark-sql_2.11 - 2.4.5 + spark-sql_${scala.binary.version} com.googlecode.json-simple diff --git a/pom.xml b/pom.xml index 0f365a79b..c6b65e27a 100644 --- a/pom.xml +++ b/pom.xml @@ -142,7 +142,7 @@ eu.dnetlib.dhp - dhp-schemas + ${dhp-schemas.artifact} ${dhp-schemas.version} @@ -171,25 +171,25 @@ org.apache.spark - spark-core_2.11 + spark-core_${scala.binary.version} ${dhp.spark.version} provided org.apache.spark - spark-sql_2.11 + spark-sql_${scala.binary.version} ${dhp.spark.version} provided org.apache.spark - spark-graphx_2.11 + spark-graphx_${scala.binary.version} ${dhp.spark.version} provided org.apache.spark - spark-hive_2.11 + spark-hive_${scala.binary.version} ${dhp.spark.version} test @@ -295,7 +295,7 @@ com.lucidworks.spark spark-solr - 3.6.0 + ${sparksolr.version} * @@ -518,7 +518,7 @@ org.json4s - json4s-jackson_2.11 + json4s-jackson_${scala.binary.version} ${json4s.version} @@ -610,7 +610,11 @@ target/test-classes - + + org.apache.maven.plugins + maven-plugin-plugin + 3.3 + org.apache.maven.plugins maven-project-info-reports-plugin @@ -694,7 +698,7 @@ org.antipathy - mvn-scalafmt_2.11 + mvn-scalafmt_${scala.binary.version} 1.0.1640073709.733712b @@ -751,7 +755,7 @@ org.antipathy - mvn-scalafmt_2.11 + mvn-scalafmt_${scala.binary.version} https://code-repo.d4science.org/D-Net/dnet-hadoop/raw/branch/beta/dhp-build/dhp-code-style/src/main/resources/scalafmt/scalafmt.conf false @@ -860,12 +864,16 @@ cdh5.9.2 2.6.0-${dhp.cdh.version} 4.1.0-${dhp.cdh.version} + dhp-schemas + 3.6.0 2.4.0.cloudera2 2.9.6 3.5 true 11.0.2 2.11.12 + 2.11 + 1.3.0 5.6.1 3.3.3 3.4.2 @@ -889,4 +897,29 @@ 1.1.3 3.2.1 + + + + + scala-2.12 + + 2.12 + 2.12.18 + + + + 4.0.2 + 3.4.1 + 2.14.2 + 3.12.0 + 3.7.0-M11 + 4.8.1 + + + + + \ No newline at end of file From e64c2854a369ae9787fadd210be3ac700b64b996 Mon Sep 17 00:00:00 2001 From: Giambattista Bloisi Date: Tue, 18 Jul 2023 11:38:56 +0200 Subject: [PATCH 251/449] Refactor Dedup process to use Spark Dataframe API and intermediate representation with Row interface JsonPath cache contention fixed by using a ConcurrentHashMap Blacklist filtering performance improvement Minor performance improvements when evaluating similarity Sorting in clustered elements is deterministic (by ordering and identity field, instead of ordering field only) --- .../AbstractClusteringFunction.java | 4 +- .../BlacklistAwareClusteringCombiner.java | 60 ---- .../pace/clustering/ClusteringCombiner.java | 64 ---- .../pace/clustering/ClusteringFunction.java | 3 +- .../pace/clustering/KeywordsClustering.java | 5 +- .../pace/clustering/LastNameFirstInitial.java | 4 +- .../pace/clustering/LowercaseClustering.java | 7 +- .../dnetlib/pace/clustering/NGramUtils.java | 6 +- .../dnetlib/pace/clustering/NgramPairs.java | 7 +- .../eu/dnetlib/pace/clustering/Ngrams.java | 20 +- .../pace/clustering/PersonClustering.java | 11 +- .../pace/clustering/SortedNgramPairs.java | 2 +- .../pace/clustering/UrlClustering.java | 4 +- .../pace/common/AbstractPaceFunctions.java | 24 +- .../java/eu/dnetlib/pace/config/Config.java | 11 +- .../eu/dnetlib/pace/config/DedupConfig.java | 37 +- .../eu/dnetlib/pace/config/PaceConfig.java | 13 +- .../eu/dnetlib/pace/model/AbstractField.java | 72 ---- .../java/eu/dnetlib/pace/model/Document.java | 40 --- .../java/eu/dnetlib/pace/model/Field.java | 57 ---- .../java/eu/dnetlib/pace/model/FieldDef.java | 14 - .../java/eu/dnetlib/pace/model/FieldList.java | 25 -- .../eu/dnetlib/pace/model/FieldListImpl.java | 315 ------------------ .../eu/dnetlib/pace/model/FieldValue.java | 26 -- .../eu/dnetlib/pace/model/FieldValueImpl.java | 135 -------- .../eu/dnetlib/pace/model/MapDocument.java | 143 -------- .../pace/model/MapDocumentComparator.java | 52 --- .../pace/model/MapDocumentSerializer.java | 103 ------ .../pace/model/RowDataOrderingComparator.java | 65 ++++ .../eu/dnetlib/pace/model/SparkDeduper.scala | 131 ++++++++ .../eu/dnetlib/pace/model/SparkModel.scala | 108 ++++++ .../eu/dnetlib/pace/tree/AlwaysMatch.java | 5 +- .../eu/dnetlib/pace/tree/AuthorsMatch.java | 26 +- .../java/eu/dnetlib/pace/tree/CityMatch.java | 4 +- .../dnetlib/pace/tree/CosineSimilarity.java | 22 +- .../eu/dnetlib/pace/tree/DoiExactMatch.java | 5 +- .../dnetlib/pace/tree/DomainExactMatch.java | 5 +- .../java/eu/dnetlib/pace/tree/ExactMatch.java | 4 +- .../pace/tree/ExactMatchIgnoreCase.java | 18 +- .../dnetlib/pace/tree/InstanceTypeMatch.java | 17 +- .../eu/dnetlib/pace/tree/JaroWinkler.java | 4 +- .../pace/tree/JaroWinklerNormalizedName.java | 4 +- .../dnetlib/pace/tree/JaroWinklerTitle.java | 4 +- .../eu/dnetlib/pace/tree/JsonListMatch.java | 25 +- .../eu/dnetlib/pace/tree/KeywordMatch.java | 4 +- .../dnetlib/pace/tree/Level2JaroWinkler.java | 4 +- .../pace/tree/Level2JaroWinklerTitle.java | 4 +- .../dnetlib/pace/tree/Level2Levenstein.java | 4 +- .../java/eu/dnetlib/pace/tree/Levenstein.java | 4 +- .../eu/dnetlib/pace/tree/LevensteinTitle.java | 4 +- .../tree/LevensteinTitleIgnoreVersion.java | 4 +- .../dnetlib/pace/tree/ListContainsMatch.java | 15 +- .../eu/dnetlib/pace/tree/MustBeDifferent.java | 4 +- .../dnetlib/pace/tree/NullDistanceAlgo.java | 5 +- .../dnetlib/pace/tree/NumbersComparator.java | 4 +- .../eu/dnetlib/pace/tree/NumbersMatch.java | 4 +- .../eu/dnetlib/pace/tree/RomansMatch.java | 4 +- .../java/eu/dnetlib/pace/tree/SizeMatch.java | 24 +- .../pace/tree/StringContainsMatch.java | 4 +- .../eu/dnetlib/pace/tree/StringListMatch.java | 13 +- .../pace/tree/SubStringLevenstein.java | 41 +-- .../dnetlib/pace/tree/TitleVersionMatch.java | 14 +- .../java/eu/dnetlib/pace/tree/UrlMatcher.java | 10 +- .../java/eu/dnetlib/pace/tree/YearMatch.java | 11 +- .../pace/tree/support/AbstractComparator.java | 80 ++--- .../tree/support/AbstractListComparator.java | 39 +++ .../support/AbstractSortedComparator.java | 20 +- .../support/AbstractStringComparator.java | 46 +++ .../dnetlib/pace/tree/support/Comparator.java | 6 +- .../dnetlib/pace/tree/support/FieldStats.java | 15 +- .../dnetlib/pace/tree/support/MatchType.java | 17 +- .../pace/tree/support/TreeNodeDef.java | 48 +-- .../pace/tree/support/TreeProcessor.java | 48 +-- .../eu/dnetlib/pace/util/BlockProcessor.java | 157 +++------ .../pace/util/BlockProcessorForTesting.java | 276 --------------- .../eu/dnetlib/pace/util/DiffPatchMatch.java | 17 - .../eu/dnetlib/pace/util/MapDocumentUtil.java | 170 ++++------ .../eu/dnetlib/pace/util/SparkReporter.java | 85 +++++ .../eu/dnetlib/pace/AbstractPaceTest.java | 39 +-- .../clustering/ClusteringFunctionTest.java | 68 ++-- .../pace/comparators/ComparatorTest.java | 60 ++-- .../eu/dnetlib/pace/config/ConfigTest.java | 104 +----- .../java/eu/dnetlib/pace/util/UtilTest.java | 5 +- .../project/utils/EXCELParser.java | 4 +- .../project/utils/ReadProjects.java | 9 +- .../project/utils/ReadTopics.java | 4 +- .../collection/plugin/oai/OaiIterator.java | 2 +- .../dhp/broker/oa/CheckDuplictedIdsJob.java | 2 +- .../dhp/broker/oa/util/TrustUtils.java | 18 +- .../aggregators/stats/StatsAggregator.java | 2 +- .../oa/samples/SimpleVariableJobTest.java | 9 +- .../dhp/oa/dedup/AbstractSparkAction.java | 4 +- .../eu/dnetlib/dhp/oa/dedup/DatePicker.java | 6 +- .../eu/dnetlib/dhp/oa/dedup/DedupUtility.java | 46 +-- .../java/eu/dnetlib/dhp/oa/dedup/Deduper.java | 58 ---- .../dnetlib/dhp/oa/dedup/SparkBlockStats.java | 61 ++-- .../dhp/oa/dedup/SparkCreateSimRels.java | 45 +-- .../dnetlib/dhp/oa/dedup/SparkReporter.java | 50 --- .../dhp/oa/dedup/SparkWhitelistSimRels.java | 66 ++-- .../oa/dedup/graph/ConnectedComponent.java | 2 +- .../eu/dnetlib/dhp/oa/dedup/model/Block.java | 80 ----- .../dhp/oa/dedup/EntityMergerTest.java | 8 +- .../dnetlib/dhp/oa/dedup/SparkDedupTest.java | 32 +- .../dhp/oa/dedup/SparkOpenorgsDedupTest.java | 4 +- .../oa/dedup/SparkOpenorgsProvisionTest.java | 4 - .../oa/dedup/SparkPublicationRootsTest.java | 2 +- .../dhp/oa/dedup/jpath/JsonPathTest.java | 300 +---------------- .../dedup/jpath/dedup_conf_organization.json | 269 +++++++++++++++ .../dhp/oa/dedup/jpath/organization.json | 241 ++++++++++++++ .../OrcidPropagationJobTest.java | 2 - .../dhp/sx/graph/SparkCreateInputGraph.scala | 2 +- .../dhp/oa/provision/XmlIndexingJob.java | 5 + .../oa/provision/utils/XmlRecordFactory.java | 1 - 113 files changed, 1644 insertions(+), 2886 deletions(-) delete mode 100644 dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/BlacklistAwareClusteringCombiner.java delete mode 100644 dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringCombiner.java delete mode 100644 dhp-pace-core/src/main/java/eu/dnetlib/pace/model/AbstractField.java delete mode 100644 dhp-pace-core/src/main/java/eu/dnetlib/pace/model/Document.java delete mode 100644 dhp-pace-core/src/main/java/eu/dnetlib/pace/model/Field.java delete mode 100644 dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldList.java delete mode 100644 dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldListImpl.java delete mode 100644 dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldValue.java delete mode 100644 dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldValueImpl.java delete mode 100644 dhp-pace-core/src/main/java/eu/dnetlib/pace/model/MapDocument.java delete mode 100644 dhp-pace-core/src/main/java/eu/dnetlib/pace/model/MapDocumentComparator.java delete mode 100644 dhp-pace-core/src/main/java/eu/dnetlib/pace/model/MapDocumentSerializer.java create mode 100644 dhp-pace-core/src/main/java/eu/dnetlib/pace/model/RowDataOrderingComparator.java create mode 100644 dhp-pace-core/src/main/java/eu/dnetlib/pace/model/SparkDeduper.scala create mode 100644 dhp-pace-core/src/main/java/eu/dnetlib/pace/model/SparkModel.scala create mode 100644 dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractListComparator.java create mode 100644 dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractStringComparator.java delete mode 100644 dhp-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessorForTesting.java create mode 100644 dhp-pace-core/src/main/java/eu/dnetlib/pace/util/SparkReporter.java delete mode 100644 dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/Deduper.java delete mode 100644 dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkReporter.java delete mode 100644 dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/model/Block.java create mode 100644 dhp-workflows/dhp-dedup-openaire/src/test/resources/eu/dnetlib/dhp/oa/dedup/jpath/dedup_conf_organization.json create mode 100644 dhp-workflows/dhp-dedup-openaire/src/test/resources/eu/dnetlib/dhp/oa/dedup/jpath/organization.json diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/AbstractClusteringFunction.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/AbstractClusteringFunction.java index e984f5d18..3da8eb490 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/AbstractClusteringFunction.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/AbstractClusteringFunction.java @@ -11,7 +11,6 @@ import org.apache.commons.lang3.StringUtils; import eu.dnetlib.pace.common.AbstractPaceFunctions; import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.model.Field; public abstract class AbstractClusteringFunction extends AbstractPaceFunctions implements ClusteringFunction { @@ -24,11 +23,10 @@ public abstract class AbstractClusteringFunction extends AbstractPaceFunctions i protected abstract Collection doApply(Config conf, String s); @Override - public Collection apply(Config conf, List fields) { + public Collection apply(Config conf, List fields) { return fields .stream() .filter(f -> !f.isEmpty()) - .map(Field::stringValue) .map(this::normalize) .map(s -> filterAllStopWords(s)) .map(s -> doApply(conf, s)) diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/BlacklistAwareClusteringCombiner.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/BlacklistAwareClusteringCombiner.java deleted file mode 100644 index f0e93b8ba..000000000 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/BlacklistAwareClusteringCombiner.java +++ /dev/null @@ -1,60 +0,0 @@ - -package eu.dnetlib.pace.clustering; - -import java.util.Collection; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.regex.Pattern; - -import com.google.common.collect.Maps; - -import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.model.Document; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.model.FieldListImpl; -import eu.dnetlib.pace.model.MapDocument; - -public class BlacklistAwareClusteringCombiner extends ClusteringCombiner { - - public static Collection filterAndCombine(final MapDocument a, final Config conf) { - Document filtered = filter(a, conf.blacklists()); - return combine(filtered, conf); - } - - private static MapDocument filter(final MapDocument a, final Map> blacklists) { - if (blacklists == null || blacklists.isEmpty()) { - return a; - } - - final Map filtered = Maps.newHashMap(a.getFieldMap()); - - for (final Entry> e : blacklists.entrySet()) { - Field fields = a.getFieldMap().get(e.getKey()); - if (fields != null) { - final FieldListImpl fl = new FieldListImpl(); - - for (Field f : fields) { - if (!isBlackListed(f.stringValue(), e.getValue())) { - fl.add(f); - } - } - - filtered.put(e.getKey(), fl); - } - } - - return new MapDocument(a.getIdentifier(), filtered); - } - - private static boolean isBlackListed(String value, List blacklist) { - for (Pattern pattern : blacklist) { - if (pattern.matcher(value).matches()) { - return true; - } - } - - return false; - } - -} diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringCombiner.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringCombiner.java deleted file mode 100644 index 3a6f17e20..000000000 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringCombiner.java +++ /dev/null @@ -1,64 +0,0 @@ - -package eu.dnetlib.pace.clustering; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.stream.Collectors; - -import org.apache.commons.lang3.StringUtils; - -import com.google.common.collect.Sets; - -import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.model.ClusteringDef; -import eu.dnetlib.pace.model.Document; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.model.FieldValueImpl; - -public class ClusteringCombiner { - - private static String SEPARATOR = ":"; - private static String COLLAPSE_ON = "collapseOn"; - - public static Collection combine(final Document a, final Config conf) { - final Collection res = Sets.newLinkedHashSet(); - for (final ClusteringDef cd : conf.clusterings()) { - for (final String fieldName : cd.getFields()) { - String prefix = getPrefix(cd, fieldName); - - Field values = a.values(fieldName); - List fields = new ArrayList<>(); - - if (values instanceof FieldValueImpl) { - fields.add(values); - } else { - fields.addAll((List) values); - } - - res - .addAll( - cd - .clusteringFunction() - .apply(conf, fields) - .stream() - .map(k -> prefix + SEPARATOR + k) - .collect(Collectors.toList())); - } - } - return res; - } - - private static String getPrefix(ClusteringDef cd, String fieldName) { - return cd.getName() + SEPARATOR + - cd - .getParams() - .keySet() - .stream() - .filter(k -> k.contains(COLLAPSE_ON)) - .findFirst() - .map(k -> StringUtils.substringAfter(k, SEPARATOR)) - .orElse(fieldName); - } - -} diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringFunction.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringFunction.java index e72535160..8b7852418 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringFunction.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringFunction.java @@ -6,11 +6,10 @@ import java.util.List; import java.util.Map; import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.model.Field; public interface ClusteringFunction { - public Collection apply(Config config, List fields); + public Collection apply(Config config, List fields); public Map getParams(); diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/KeywordsClustering.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/KeywordsClustering.java index 60861aafd..38299adb4 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/KeywordsClustering.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/KeywordsClustering.java @@ -6,9 +6,7 @@ import java.util.stream.Collectors; import org.apache.commons.lang3.StringUtils; -import eu.dnetlib.pace.common.AbstractPaceFunctions; import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.model.Field; @ClusteringClass("keywordsclustering") public class KeywordsClustering extends AbstractClusteringFunction { @@ -40,11 +38,10 @@ public class KeywordsClustering extends AbstractClusteringFunction { } @Override - public Collection apply(final Config conf, List fields) { + public Collection apply(final Config conf, List fields) { return fields .stream() .filter(f -> !f.isEmpty()) - .map(Field::stringValue) .map(this::cleanup) .map(this::normalize) .map(s -> filterAllStopWords(s)) diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/LastNameFirstInitial.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/LastNameFirstInitial.java index dc6f8f775..5a385961a 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/LastNameFirstInitial.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/LastNameFirstInitial.java @@ -9,7 +9,6 @@ import org.apache.commons.lang3.StringUtils; import com.google.common.collect.Lists; import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.model.Person; @ClusteringClass("lnfi") @@ -22,11 +21,10 @@ public class LastNameFirstInitial extends AbstractClusteringFunction { } @Override - public Collection apply(Config conf, List fields) { + public Collection apply(Config conf, List fields) { return fields .stream() .filter(f -> !f.isEmpty()) - .map(Field::stringValue) .map(this::normalize) .map(s -> doApply(conf, s)) .map(c -> filterBlacklisted(c, ngramBlacklist)) diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/LowercaseClustering.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/LowercaseClustering.java index 403d187fa..a3a6c4881 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/LowercaseClustering.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/LowercaseClustering.java @@ -11,7 +11,6 @@ import com.google.common.collect.Lists; import com.google.common.collect.Sets; import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.model.Field; @ClusteringClass("lowercase") public class LowercaseClustering extends AbstractClusteringFunction { @@ -21,10 +20,10 @@ public class LowercaseClustering extends AbstractClusteringFunction { } @Override - public Collection apply(Config conf, List fields) { + public Collection apply(Config conf, List fields) { Collection c = Sets.newLinkedHashSet(); - for (Field f : fields) { - c.addAll(doApply(conf, f.stringValue())); + for (String f : fields) { + c.addAll(doApply(conf, f)); } return c; } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/NGramUtils.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/NGramUtils.java index aa12f1279..6ee80b86e 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/NGramUtils.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/NGramUtils.java @@ -8,15 +8,15 @@ import org.apache.commons.lang3.StringUtils; import eu.dnetlib.pace.common.AbstractPaceFunctions; public class NGramUtils extends AbstractPaceFunctions { + static private final NGramUtils NGRAMUTILS = new NGramUtils(); private static final int SIZE = 100; - private static Set stopwords = AbstractPaceFunctions + private static final Set stopwords = AbstractPaceFunctions .loadFromClasspath("/eu/dnetlib/pace/config/stopwords_en.txt"); public static String cleanupForOrdering(String s) { - NGramUtils utils = new NGramUtils(); - return (utils.filterStopWords(utils.normalize(s), stopwords) + StringUtils.repeat(" ", SIZE)) + return (NGRAMUTILS.filterStopWords(NGRAMUTILS.normalize(s), stopwords) + StringUtils.repeat(" ", SIZE)) .substring(0, SIZE) .replaceAll(" ", ""); } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/NgramPairs.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/NgramPairs.java index 0656312c7..aa06aa408 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/NgramPairs.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/NgramPairs.java @@ -2,7 +2,6 @@ package eu.dnetlib.pace.clustering; import java.util.Collection; -import java.util.HashMap; import java.util.List; import java.util.Map; @@ -14,7 +13,11 @@ import eu.dnetlib.pace.config.Config; public class NgramPairs extends Ngrams { public NgramPairs(Map params) { - super(params); + super(params, false); + } + + public NgramPairs(Map params, boolean sorted) { + super(params, sorted); } @Override diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/Ngrams.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/Ngrams.java index bcc10a869..96c305a16 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/Ngrams.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/Ngrams.java @@ -8,8 +8,15 @@ import eu.dnetlib.pace.config.Config; @ClusteringClass("ngrams") public class Ngrams extends AbstractClusteringFunction { + private final boolean sorted; + public Ngrams(Map params) { + this(params, false); + } + + public Ngrams(Map params, boolean sorted) { super(params); + this.sorted = sorted; } @Override @@ -19,20 +26,21 @@ public class Ngrams extends AbstractClusteringFunction { protected Collection getNgrams(String s, int ngramLen, int max, int maxPerToken, int minNgramLen) { - final Collection ngrams = new LinkedHashSet(); + final Collection ngrams = sorted ? new TreeSet<>() : new LinkedHashSet(); final StringTokenizer st = new StringTokenizer(s); while (st.hasMoreTokens()) { final String token = st.nextToken(); if (!token.isEmpty()) { - for (int i = 0; i < maxPerToken && ngramLen + i <= token.length(); i++) { - String ngram = (token + " ").substring(i, ngramLen + i).trim(); - if (ngrams.size() >= max) { - return ngrams; - } + String ngram = token.substring(i, Math.min(ngramLen + i, token.length())).trim(); + if (ngram.length() >= minNgramLen) { ngrams.add(ngram); + + if (ngrams.size() >= max) { + return ngrams; + } } } } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonClustering.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonClustering.java index 83b92f22c..b4a04ce65 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonClustering.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonClustering.java @@ -12,7 +12,6 @@ import com.google.common.collect.Sets; import eu.dnetlib.pace.common.AbstractPaceFunctions; import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.model.Person; @ClusteringClass("personClustering") @@ -27,19 +26,19 @@ public class PersonClustering extends AbstractPaceFunctions implements Clusterin } @Override - public Collection apply(final Config conf, final List fields) { + public Collection apply(final Config conf, final List fields) { final Set hashes = Sets.newHashSet(); - for (final Field f : fields) { + for (final String f : fields) { - final Person person = new Person(f.stringValue(), false); + final Person person = new Person(f, false); if (StringUtils.isNotBlank(person.getNormalisedFirstName()) && StringUtils.isNotBlank(person.getNormalisedSurname())) { hashes.add(firstLC(person.getNormalisedFirstName()) + person.getNormalisedSurname().toLowerCase()); } else { - for (final String token1 : tokens(f.stringValue(), MAX_TOKENS)) { - for (final String token2 : tokens(f.stringValue(), MAX_TOKENS)) { + for (final String token1 : tokens(f, MAX_TOKENS)) { + for (final String token2 : tokens(f, MAX_TOKENS)) { if (!token1.equals(token2)) { hashes.add(firstLC(token1) + token2); } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/SortedNgramPairs.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/SortedNgramPairs.java index 1fc9f1747..b085ae26d 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/SortedNgramPairs.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/SortedNgramPairs.java @@ -13,7 +13,7 @@ import eu.dnetlib.pace.config.Config; public class SortedNgramPairs extends NgramPairs { public SortedNgramPairs(Map params) { - super(params); + super(params, false); } @Override diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/UrlClustering.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/UrlClustering.java index 122e01179..5b267ad10 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/UrlClustering.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/UrlClustering.java @@ -11,7 +11,6 @@ import java.util.stream.Collectors; import eu.dnetlib.pace.common.AbstractPaceFunctions; import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.model.Field; @ClusteringClass("urlclustering") public class UrlClustering extends AbstractPaceFunctions implements ClusteringFunction { @@ -23,12 +22,11 @@ public class UrlClustering extends AbstractPaceFunctions implements ClusteringFu } @Override - public Collection apply(final Config conf, List fields) { + public Collection apply(final Config conf, List fields) { try { return fields .stream() .filter(f -> !f.isEmpty()) - .map(Field::stringValue) .map(this::asUrl) .map(URL::getHost) .collect(Collectors.toCollection(HashSet::new)); diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java index 9902508b8..b440686de 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java @@ -16,13 +16,11 @@ import org.apache.commons.lang3.StringUtils; import com.google.common.base.Joiner; import com.google.common.base.Splitter; import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; import com.google.common.collect.Sets; import com.ibm.icu.text.Transliterator; import eu.dnetlib.pace.clustering.NGramUtils; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.model.FieldList; -import eu.dnetlib.pace.model.FieldListImpl; /** * Set of common functions for the framework @@ -51,28 +49,25 @@ public abstract class AbstractPaceFunctions { protected static Set ngramBlacklist = loadFromClasspath("/eu/dnetlib/pace/config/ngram_blacklist.txt"); // html regex for normalization - public final String HTML_REGEX = "<[^>]*>"; + public static final Pattern HTML_REGEX = Pattern.compile("<[^>]*>"); private static final String alpha = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 "; private static final String aliases_from = "⁰¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ⁿ₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎àáâäæãåāèéêëēėęəîïíīįìôöòóœøōõûüùúūßśšłžźżçćčñń"; private static final String aliases_to = "0123456789+-=()n0123456789+-=()aaaaaaaaeeeeeeeeiiiiiioooooooouuuuussslzzzcccnn"; // doi prefix for normalization - public final String DOI_PREFIX = "(https?:\\/\\/dx\\.doi\\.org\\/)|(doi:)"; + public static final Pattern DOI_PREFIX = Pattern.compile("(https?:\\/\\/dx\\.doi\\.org\\/)|(doi:)"); - private Pattern numberPattern = Pattern.compile("-?\\d+(\\.\\d+)?"); + private static Pattern numberPattern = Pattern.compile("-?\\d+(\\.\\d+)?"); - private Pattern hexUnicodePattern = Pattern.compile("\\\\u(\\p{XDigit}{4})"); - - protected final static FieldList EMPTY_FIELD = new FieldListImpl(); + private static Pattern hexUnicodePattern = Pattern.compile("\\\\u(\\p{XDigit}{4})"); protected String concat(final List l) { return Joiner.on(" ").skipNulls().join(l); } protected String cleanup(final String s) { - - final String s1 = s.replaceAll(HTML_REGEX, ""); + final String s1 = HTML_REGEX.matcher(s).replaceAll(""); final String s2 = unicodeNormalization(s1.toLowerCase()); final String s3 = nfd(s2); final String s4 = fixXML(s3); @@ -162,11 +157,6 @@ public abstract class AbstractPaceFunctions { return sb.toString().replaceAll("\\s+", " "); } - protected String getFirstValue(final Field values) { - return (values != null) && !Iterables.isEmpty(values) ? Iterables.getFirst(values, EMPTY_FIELD).stringValue() - : ""; - } - protected boolean notNull(final String s) { return s != null; } @@ -316,7 +306,7 @@ public abstract class AbstractPaceFunctions { } public String normalizePid(String pid) { - return pid.toLowerCase().replaceAll(DOI_PREFIX, ""); + return DOI_PREFIX.matcher(pid.toLowerCase()).replaceAll(""); } // get the list of keywords into the input string diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/config/Config.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/config/Config.java index 0623b468f..4d823d129 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/config/Config.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/config/Config.java @@ -3,7 +3,7 @@ package eu.dnetlib.pace.config; import java.util.List; import java.util.Map; -import java.util.regex.Pattern; +import java.util.function.Predicate; import eu.dnetlib.pace.model.ClusteringDef; import eu.dnetlib.pace.model.FieldDef; @@ -30,13 +30,6 @@ public interface Config { */ public Map decisionTree(); - /** - * Field configuration definitions. - * - * @return the list of definitions - */ - public Map modelMap(); - /** * Clusterings. * @@ -49,7 +42,7 @@ public interface Config { * * @return the map */ - public Map> blacklists(); + public Map> blacklists(); /** * Translation map. diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java index ee24ff476..ac0ef08e4 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/config/DedupConfig.java @@ -4,18 +4,19 @@ package eu.dnetlib.pace.config; import java.io.IOException; import java.io.Serializable; import java.nio.charset.StandardCharsets; +import java.util.AbstractMap; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.function.Predicate; import java.util.regex.Pattern; +import java.util.regex.PatternSyntaxException; import java.util.stream.Collectors; import org.antlr.stringtemplate.StringTemplate; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.databind.ObjectMapper; @@ -27,9 +28,6 @@ import eu.dnetlib.pace.tree.support.TreeNodeDef; import eu.dnetlib.pace.util.PaceException; public class DedupConfig implements Config, Serializable { - - private static final Log log = LogFactory.getLog(DedupConfig.class); - private static String CONFIG_TEMPLATE = "dedupConfig.st"; private PaceConfig pace; @@ -37,7 +35,7 @@ public class DedupConfig implements Config, Serializable { private WfConfig wf; @JsonIgnore - private Map> blacklists; + private Map> blacklists; private static Map defaults = Maps.newHashMap(); @@ -72,19 +70,29 @@ public class DedupConfig implements Config, Serializable { .getBlacklists() .entrySet() .stream() + .map( + e -> new AbstractMap.SimpleEntry>(e.getKey(), + e + .getValue() + .stream() + .filter(s -> !StringUtils.isBlank(s)) + .map(Pattern::compile) + .collect(Collectors.toList()))) .collect( Collectors .toMap( e -> e.getKey(), - e -> e + e -> (Predicate & Serializable) s -> e .getValue() .stream() - .filter(s -> !StringUtils.isBlank(s)) - .map(Pattern::compile) - .collect(Collectors.toList()))); + .filter(p -> p.matcher(s).matches()) + .findFirst() + .isPresent())) + + ; return config; - } catch (IOException e) { + } catch (IOException | PatternSyntaxException e) { throw new PaceException("Error in parsing configuration json", e); } @@ -152,18 +160,13 @@ public class DedupConfig implements Config, Serializable { return getPace().getModel(); } - @Override - public Map modelMap() { - return getPace().getModelMap(); - } - @Override public List clusterings() { return getPace().getClustering(); } @Override - public Map> blacklists() { + public Map> blacklists() { return blacklists; } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java index b4afad9c8..f1bc49f4a 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/config/PaceConfig.java @@ -28,6 +28,10 @@ public class PaceConfig extends AbstractPaceFunctions implements Serializable { @JsonIgnore private Map translationMap; + public Map getModelMap() { + return modelMap; + } + @JsonIgnore private Map modelMap; @@ -101,13 +105,4 @@ public class PaceConfig extends AbstractPaceFunctions implements Serializable { public void setSynonyms(Map> synonyms) { this.synonyms = synonyms; } - - public Map getModelMap() { - return modelMap; - } - - public void setModelMap(final Map modelMap) { - this.modelMap = modelMap; - } - } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/AbstractField.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/AbstractField.java deleted file mode 100644 index c11d461ab..000000000 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/AbstractField.java +++ /dev/null @@ -1,72 +0,0 @@ - -package eu.dnetlib.pace.model; - -import eu.dnetlib.pace.config.Type; - -/** - * The Class AbstractField. - */ -public abstract class AbstractField implements Field { - - /** The type. */ - protected Type type = Type.String; - - /** The name. */ - protected String name; - - /** - * Instantiates a new abstract field. - */ - protected AbstractField() { - } - - /** - * Instantiates a new abstract field. - * - * @param type - * the type - * @param name - * the name - */ - protected AbstractField(final Type type, final String name) { - this.type = type; - this.name = name; - } - - /* - * (non-Javadoc) - * @see eu.dnetlib.pace.model.Field#getName() - */ - @Override - public String getName() { - return name; - } - - /* - * (non-Javadoc) - * @see eu.dnetlib.pace.model.Field#getType() - */ - @Override - public Type getType() { - return type; - } - - /* - * (non-Javadoc) - * @see eu.dnetlib.pace.model.Field#setName(java.lang.String) - */ - @Override - public void setName(final String name) { - this.name = name; - } - - /* - * (non-Javadoc) - * @see eu.dnetlib.pace.model.Field#setType(eu.dnetlib.pace.config.Type) - */ - @Override - public void setType(final Type type) { - this.type = type; - } - -} diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/Document.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/Document.java deleted file mode 100644 index d9c06d4e4..000000000 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/Document.java +++ /dev/null @@ -1,40 +0,0 @@ - -package eu.dnetlib.pace.model; - -import java.util.Set; - -/** - * The Interface Document. Models the common operations available on a Pace Document. - */ -public interface Document { - - /** - * Gets the identifier. - * - * @return the identifier - */ - String getIdentifier(); - - /** - * Fields. - * - * @return the iterable - */ - Iterable fields(); - - /** - * Values. - * - * @param name - * the name - * @return the field list - */ - Field values(String name); - - /** - * Field names. - * - * @return the sets the - */ - Set fieldNames(); -} diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/Field.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/Field.java deleted file mode 100644 index d5712cf2f..000000000 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/Field.java +++ /dev/null @@ -1,57 +0,0 @@ - -package eu.dnetlib.pace.model; - -import java.io.Serializable; - -import eu.dnetlib.pace.config.Type; - -/** - * The Interface Field. - */ -public interface Field extends Iterable, Serializable { - - /** - * Gets the name. - * - * @return the name - */ - public String getName(); - - /** - * Sets the name. - * - * @param name - * the new name - */ - public void setName(String name); - - /** - * Gets the type. - * - * @return the type - */ - public Type getType(); - - /** - * Sets the type. - * - * @param type - * the new type - */ - public void setType(Type type); - - /** - * Checks if is empty. - * - * @return true, if is empty - */ - public boolean isEmpty(); - - /** - * String value. - * - * @return the string - */ - public String stringValue(); - -} diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java index 8b123f2d5..f34545e6d 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java @@ -39,20 +39,6 @@ public class FieldDef implements Serializable { public FieldDef() { } - // def apply(s: String): Field[A] - public Field apply(final Type type, final String s) { - switch (type) { - case Int: - return new FieldValueImpl(type, name, Integer.parseInt(s)); - case String: - return new FieldValueImpl(type, name, s); - case List: - return new FieldListImpl(name, type); - default: - throw new IllegalArgumentException("Casting not implemented for type " + type); - } - } - public String getName() { return name; } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldList.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldList.java deleted file mode 100644 index b47795d8b..000000000 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldList.java +++ /dev/null @@ -1,25 +0,0 @@ - -package eu.dnetlib.pace.model; - -import java.util.List; - -/** - * The Interface FieldList. - */ -public interface FieldList extends List, Field { - - /** - * String list. - * - * @return the list - */ - public List stringList(); - - /** - * Double[] Array - * - * @return the double[] array - */ - public double[] doubleArray(); - -} diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldListImpl.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldListImpl.java deleted file mode 100644 index ca23a0bfc..000000000 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldListImpl.java +++ /dev/null @@ -1,315 +0,0 @@ - -package eu.dnetlib.pace.model; - -import java.util.Collection; -import java.util.Iterator; -import java.util.List; -import java.util.ListIterator; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.common.base.Function; -import com.google.common.base.Joiner; -import com.google.common.collect.Iterables; -import com.google.common.collect.Lists; - -import eu.dnetlib.pace.config.Type; - -/** - * The Class FieldListImpl. - */ -public class FieldListImpl extends AbstractField implements FieldList { - - /** The fields. */ - private List fields; - - /** - * Instantiates a new field list impl. - */ - public FieldListImpl() { - fields = Lists.newArrayList(); - } - - /** - * Instantiates a new field list impl. - * - * @param name - * the name - */ - public FieldListImpl(final String name, final Type type) { - super(type, name); - fields = Lists.newArrayList(); - } - - /* - * (non-Javadoc) - * @see java.util.List#add(java.lang.Object) - */ - @Override - public boolean add(final Field f) { - return fields.add(f); - } - - /* - * (non-Javadoc) - * @see java.util.List#add(int, java.lang.Object) - */ - @Override - public void add(final int i, final Field f) { - fields.add(i, f); - } - - /* - * (non-Javadoc) - * @see java.util.List#addAll(java.util.Collection) - */ - @Override - public boolean addAll(final Collection f) { - return fields.addAll(f); - } - - /* - * (non-Javadoc) - * @see java.util.List#addAll(int, java.util.Collection) - */ - @Override - public boolean addAll(final int i, final Collection f) { - return fields.addAll(i, f); - } - - /* - * (non-Javadoc) - * @see java.util.List#clear() - */ - @Override - public void clear() { - fields.clear(); - } - - /* - * (non-Javadoc) - * @see java.util.List#contains(java.lang.Object) - */ - @Override - public boolean contains(final Object o) { - return fields.contains(o); - } - - /* - * (non-Javadoc) - * @see java.util.List#containsAll(java.util.Collection) - */ - @Override - public boolean containsAll(final Collection f) { - return fields.containsAll(f); - } - - /* - * (non-Javadoc) - * @see java.util.List#get(int) - */ - @Override - public Field get(final int i) { - return fields.get(i); - } - - /* - * (non-Javadoc) - * @see java.util.List#indexOf(java.lang.Object) - */ - @Override - public int indexOf(final Object o) { - return fields.indexOf(o); - } - - /* - * (non-Javadoc) - * @see eu.dnetlib.pace.model.Field#isEmpty() - */ - @Override - public boolean isEmpty() { - return Iterables.all(fields, f -> f.isEmpty()); - } - - /* - * (non-Javadoc) - * @see java.lang.Iterable#iterator() - */ - @Override - public Iterator iterator() { - return fields.iterator(); - } - - /* - * (non-Javadoc) - * @see java.util.List#lastIndexOf(java.lang.Object) - */ - @Override - public int lastIndexOf(final Object o) { - return fields.lastIndexOf(o); - } - - /* - * (non-Javadoc) - * @see java.util.List#listIterator() - */ - @Override - public ListIterator listIterator() { - return fields.listIterator(); - } - - /* - * (non-Javadoc) - * @see java.util.List#listIterator(int) - */ - @Override - public ListIterator listIterator(final int i) { - return fields.listIterator(i); - } - - /* - * (non-Javadoc) - * @see java.util.List#remove(java.lang.Object) - */ - @Override - public boolean remove(final Object o) { - return fields.remove(o); - } - - /* - * (non-Javadoc) - * @see java.util.List#remove(int) - */ - @Override - public Field remove(final int i) { - return fields.remove(i); - } - - /* - * (non-Javadoc) - * @see java.util.List#removeAll(java.util.Collection) - */ - @Override - public boolean removeAll(final Collection f) { - return fields.removeAll(f); - } - - /* - * (non-Javadoc) - * @see java.util.List#retainAll(java.util.Collection) - */ - @Override - public boolean retainAll(final Collection f) { - return fields.retainAll(f); - } - - /* - * (non-Javadoc) - * @see java.util.List#set(int, java.lang.Object) - */ - @Override - public Field set(final int i, final Field f) { - return fields.set(i, f); - } - - /* - * (non-Javadoc) - * @see java.util.List#size() - */ - @Override - public int size() { - return fields.size(); - } - - /* - * (non-Javadoc) - * @see java.util.List#subList(int, int) - */ - @Override - public List subList(final int from, final int to) { - return fields.subList(from, to); - } - - /* - * (non-Javadoc) - * @see java.util.List#toArray() - */ - @Override - public Object[] toArray() { - return fields.toArray(); - } - - /* - * (non-Javadoc) - * @see java.util.List#toArray(java.lang.Object[]) - */ - @Override - public T[] toArray(final T[] t) { - return fields.toArray(t); - } - - /* - * (non-Javadoc) - * @see eu.dnetlib.pace.model.Field#stringValue() - */ - @Override - public String stringValue() { - switch (getType()) { - - case List: - case Int: - case String: - return Joiner.on(" ").join(stringList()); - case JSON: - String json; - try { - json = new ObjectMapper().writeValueAsString(this); - } catch (JsonProcessingException e) { - json = null; - } - return json; - default: - throw new IllegalArgumentException("Unknown type: " + getType().toString()); - } - } - - /* - * (non-Javadoc) - * @see eu.dnetlib.pace.model.FieldList#stringList() - */ - @Override - public List stringList() { - return Lists.newArrayList(Iterables.transform(fields, getValuesTransformer())); - } - - private Function getValuesTransformer() { - return new Function() { - - @Override - public String apply(final Field f) { - return f.stringValue(); - } - }; - } - - @Override - public double[] doubleArray() { - return Lists.newArrayList(Iterables.transform(fields, getDouble())).stream().mapToDouble(d -> d).toArray(); - } - - private Function getDouble() { - - return new Function() { - @Override - public Double apply(final Field f) { - return Double.parseDouble(f.stringValue()); - } - }; - } - - @Override - public String toString() { - return stringList().toString(); - } - -} diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldValue.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldValue.java deleted file mode 100644 index b20f21a5c..000000000 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldValue.java +++ /dev/null @@ -1,26 +0,0 @@ - -package eu.dnetlib.pace.model; - -/** - * The Interface FieldValue. - */ -public interface FieldValue extends Field { - - /** - * Gets the value. - * - * @return the value - */ - public Object getValue(); - - /** - * Sets the value. - * - * @param value - * the new value - */ - public void setValue(final Object value); - - public double[] doubleArrayValue(); - -} diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldValueImpl.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldValueImpl.java deleted file mode 100644 index eff54abfb..000000000 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldValueImpl.java +++ /dev/null @@ -1,135 +0,0 @@ - -package eu.dnetlib.pace.model; - -import java.net.MalformedURLException; -import java.net.URL; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; - -import org.apache.commons.lang3.StringUtils; - -import eu.dnetlib.pace.config.Type; - -/** - * The Class FieldValueImpl. - */ -public class FieldValueImpl extends AbstractField implements FieldValue { - - /** The value. */ - private Object value = null; - - /** - * Instantiates a new field value impl. - */ - public FieldValueImpl() { - } - - /** - * Instantiates a new field value impl. - * - * @param type - * the type - * @param name - * the name - * @param value - * the value - */ - public FieldValueImpl(final Type type, final String name, final Object value) { - super(type, name); - this.value = value; - } - - /* - * (non-Javadoc) - * @see eu.dnetlib.pace.model.Field#isEmpty() - */ - @Override - public boolean isEmpty() { - if (value == null) - return false; - - switch (type) { - case String: - case JSON: - return value.toString().isEmpty(); - case List: - try { - List list = (List) value; - return list.isEmpty() || ((FieldValueImpl) list.get(0)).isEmpty(); - } catch (Exception e) { - throw new RuntimeException(value.toString()); - } - case URL: - String str = value.toString(); - return StringUtils.isBlank(str) || !isValidURL(str); - case DoubleArray: - return doubleArrayValue().length == 0; - default: - return true; - } - } - - private boolean isValidURL(final String s) { - try { - new URL(s); - return true; - } catch (MalformedURLException e) { - return false; - } - } - - /* - * (non-Javadoc) - * @see eu.dnetlib.pace.model.FieldValue#getValue() - */ - @Override - public Object getValue() { - return value; - } - - /* - * (non-Javadoc) - * @see eu.dnetlib.pace.model.FieldValue#setValue(java.lang.Object) - */ - @Override - public void setValue(final Object value) { - this.value = value; - } - - /* - * (non-Javadoc) - * @see eu.dnetlib.pace.model.Field#stringValue() - */ - @Override - // @SuppressWarnings("unchecked") - public String stringValue() { - return String.valueOf(getValue()); - // switch (getType()) { - // - // case Int: - // return String.valueOf(getValue()); - // case List: - // return Joiner.on(" ").join((List) getValue()); - // case String: - // return (String) getValue(); - // default: - // throw new IllegalArgumentException("Unknown type: " + getType().toString()); - // } - } - - public double[] doubleArrayValue() { - return (double[]) getValue(); - } - - /* - * (non-Javadoc) - * @see java.lang.Iterable#iterator() - */ - @Override - @SuppressWarnings("unchecked") - public Iterator iterator() { - return Collections.singleton((Field) this).iterator(); - } - -} diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/MapDocument.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/MapDocument.java deleted file mode 100644 index c2860ca3b..000000000 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/MapDocument.java +++ /dev/null @@ -1,143 +0,0 @@ - -package eu.dnetlib.pace.model; - -import java.io.Serializable; -import java.util.Map; -import java.util.Set; - -import com.google.common.collect.Iterables; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; - -/** - * The Class MapDocument. - */ -public class MapDocument implements Document, Serializable { - - /** The identifier. */ - private String identifier; - - /** The field map. */ - private Map fieldMap; - - /** - * Instantiates a new map document. - */ - public MapDocument() { - identifier = null; - fieldMap = Maps.newHashMap(); - } - - /** - * Instantiates a new map document. - * - * @param identifier - * the identifier - * @param fieldMap - * the field map - */ - public MapDocument(final String identifier, final Map fieldMap) { - this.setIdentifier(identifier); - this.fieldMap = fieldMap; - } - - /** - * Instantiates a new map document. - * - * @param identifier - * the identifier - * @param data - * the data - */ - public MapDocument(final String identifier, final byte[] data) { - final MapDocument doc = MapDocumentSerializer.decode(data); - - this.fieldMap = doc.fieldMap; - this.identifier = doc.identifier; - } - - /* - * (non-Javadoc) - * @see eu.dnetlib.pace.model.document.Document#fields() - */ - @Override - public Iterable fields() { - return Lists.newArrayList(Iterables.concat(fieldMap.values())); - } - - /* - * (non-Javadoc) - * @see eu.dnetlib.pace.model.document.Document#values(java.lang.String) - */ - @Override - public Field values(final String name) { - return fieldMap.get(name); - } - - /* - * (non-Javadoc) - * @see eu.dnetlib.pace.model.document.Document#fieldNames() - */ - @Override - public Set fieldNames() { - return fieldMap.keySet(); - } - - /* - * (non-Javadoc) - * @see java.lang.Object#toString() - */ - @Override - public String toString() { - return MapDocumentSerializer.toString(this); - // return String.format("Document(%s)", fieldMap.toString()); - } - - /** - * To byte array. - * - * @return the byte[] - */ - public byte[] toByteArray() { - return MapDocumentSerializer.toByteArray(this); - } - - /* - * (non-Javadoc) - * @see eu.dnetlib.pace.model.document.Document#getIdentifier() - */ - @Override - public String getIdentifier() { - return identifier; - } - - /** - * Sets the identifier. - * - * @param identifier - * the new identifier - */ - public void setIdentifier(final String identifier) { - this.identifier = identifier; - } - - /** - * Gets the field map. - * - * @return the field map - */ - public Map getFieldMap() { - return fieldMap; - } - - /** - * Sets the field map. - * - * @param fieldMap - * the field map - */ - public void setFieldMap(final Map fieldMap) { - this.fieldMap = fieldMap; - } - -} diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/MapDocumentComparator.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/MapDocumentComparator.java deleted file mode 100644 index a77dcbc0c..000000000 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/MapDocumentComparator.java +++ /dev/null @@ -1,52 +0,0 @@ - -package eu.dnetlib.pace.model; - -import java.util.Comparator; - -import com.google.common.collect.Iterables; - -import eu.dnetlib.pace.clustering.NGramUtils; - -/** - * The Class MapDocumentComparator. - */ -public class MapDocumentComparator implements Comparator { - - /** The comparator field. */ - private String comparatorField; - - private final FieldList emptyField = new FieldListImpl(); - - /** - * Instantiates a new map document comparator. - * - * @param comparatorField - * the comparator field - */ - public MapDocumentComparator(final String comparatorField) { - this.comparatorField = comparatorField; - } - - /* - * (non-Javadoc) - * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) - */ - @Override - public int compare(final Document d1, final Document d2) { - - if (d1.values(comparatorField).isEmpty() || d2.values(comparatorField).isEmpty()) - return 0; - - final String o1 = Iterables.getFirst(d1.values(comparatorField), emptyField).stringValue(); - final String o2 = Iterables.getFirst(d2.values(comparatorField), emptyField).stringValue(); - - if ((o1 == null) || (o2 == null)) - return 0; - - final String to1 = NGramUtils.cleanupForOrdering(o1); - final String to2 = NGramUtils.cleanupForOrdering(o2); - - return to1.compareTo(to2); - } - -} diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/MapDocumentSerializer.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/MapDocumentSerializer.java deleted file mode 100644 index d71f780ad..000000000 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/MapDocumentSerializer.java +++ /dev/null @@ -1,103 +0,0 @@ - -package eu.dnetlib.pace.model; - -import java.lang.reflect.Type; - -import com.google.gson.GsonBuilder; -import com.google.gson.InstanceCreator; -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonDeserializer; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonParseException; - -/** - * The Class MapDocumentSerializer. - */ -public class MapDocumentSerializer implements InstanceCreator { - - @Override - public MapDocument createInstance(final Type type) { - return new MapDocument(); - } - - /** - * Decode. - * - * @param s - * the String - * @return the map document - */ - public static MapDocument decode(final String s) { - final GsonBuilder gson = new GsonBuilder(); - - gson.registerTypeAdapter(Field.class, new JsonDeserializer() { - - @Override - public Field deserialize(final JsonElement json, final Type typeOfT, - final JsonDeserializationContext context) throws JsonParseException { - final FieldListImpl fl = new FieldListImpl(); - if (json.isJsonObject()) { - - fl.add(handleJsonObject(json.getAsJsonObject())); - - } else if (json.isJsonArray()) { - - for (final JsonElement e : json.getAsJsonArray()) { - if (e.isJsonObject()) { - fl.add(handleJsonObject(e.getAsJsonObject())); - } - } - } - return fl; - } - - private Field handleJsonObject(final JsonObject o) { - final FieldListImpl fl = new FieldListImpl(); - final String name = o.get("name").getAsString(); - final String type = o.get("type").getAsString(); - final String value = o.get("value").getAsString(); - fl.add(new FieldValueImpl(eu.dnetlib.pace.config.Type.valueOf(type), name, value)); - return fl; - } - }); - - return gson.create().fromJson(s, MapDocument.class); - } - - /** - * Decode. - * - * @param bytes - * the bytes - * @return the map document - */ - public static MapDocument decode(final byte[] bytes) { - return decode(new String(bytes)); - } - - /** - * To string. - * - * @param doc - * the doc - * @return the string - */ - public static String toString(final MapDocument doc) { - final GsonBuilder b = new GsonBuilder(); - return b.setPrettyPrinting().create().toJson(doc); - - } - - /** - * To byte array. - * - * @param doc - * the doc - * @return the byte[] - */ - public static byte[] toByteArray(final MapDocument doc) { - return toString(doc).getBytes(); - } - -} diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/RowDataOrderingComparator.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/RowDataOrderingComparator.java new file mode 100644 index 000000000..f0ded0570 --- /dev/null +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/RowDataOrderingComparator.java @@ -0,0 +1,65 @@ + +package eu.dnetlib.pace.model; + +import java.util.Comparator; + +import org.apache.spark.sql.Row; + +import eu.dnetlib.pace.clustering.NGramUtils; + +/** + * The Class MapDocumentComparator. + */ +public class RowDataOrderingComparator implements Comparator { + + /** The comparator field. */ + private final int comparatorField; + private final int identityFieldPosition; + + /** + * Instantiates a new map document comparator. + * + * @param comparatorField + * the comparator field + */ + public RowDataOrderingComparator(final int comparatorField, int identityFieldPosition) { + this.comparatorField = comparatorField; + this.identityFieldPosition = identityFieldPosition; + } + + /* + * (non-Javadoc) + * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) + */ + @Override + public int compare(final Row d1, final Row d2) { + if (d1 == null) + return d2 == null ? 0 : -1; + else if (d2 == null) { + return 1; + } + + final String o1 = d1.getString(comparatorField); + final String o2 = d2.getString(comparatorField); + + if (o1 == null) + return o2 == null ? 0 : -1; + else if (o2 == null) { + return 1; + } + + final String to1 = NGramUtils.cleanupForOrdering(o1); + final String to2 = NGramUtils.cleanupForOrdering(o2); + + int res = to1.compareTo(to2); + if (res == 0) { + res = o1.compareTo(o2); + if (res == 0) { + return d1.getString(identityFieldPosition).compareTo(d2.getString(identityFieldPosition)); + } + } + + return res; + } + +} diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/SparkDeduper.scala b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/SparkDeduper.scala new file mode 100644 index 000000000..b3f56bcdb --- /dev/null +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/SparkDeduper.scala @@ -0,0 +1,131 @@ +package eu.dnetlib.pace.model + +import eu.dnetlib.pace.config.{DedupConfig, Type} +import eu.dnetlib.pace.util.{BlockProcessor, SparkReporter} +import org.apache.spark.SparkContext +import org.apache.spark.sql.catalyst.expressions.Literal +import org.apache.spark.sql.expressions._ +import org.apache.spark.sql.functions.{col, lit, udf} +import org.apache.spark.sql.types._ +import org.apache.spark.sql.{Column, Dataset, Row, functions} + +import java.util.function.Predicate +import java.util.stream.Collectors +import scala.collection.JavaConversions._ +import scala.collection.JavaConverters._ +import scala.collection.mutable +case class SparkDeduper(conf: DedupConfig) extends Serializable { + + val model: SparkModel = SparkModel(conf) + + val dedup: (Dataset[Row] => Dataset[Row]) = df => { + df.transform(filterAndCleanup) + .transform(generateClustersWithCollect) + .transform(processBlocks) + } + + + val filterAndCleanup: (Dataset[Row] => Dataset[Row]) = df => { + val df_with_filters = conf.getPace.getModel.asScala.foldLeft(df)((res, fdef) => { + if (conf.blacklists.containsKey(fdef.getName)) { + res.withColumn( + fdef.getName + "_filtered", + filterColumnUDF(fdef).apply(new Column(fdef.getName)) + ) + } else { + res + } + }) + + df_with_filters + } + + def filterColumnUDF(fdef: FieldDef): UserDefinedFunction = { + val blacklist: Predicate[String] = conf.blacklists().get(fdef.getName) + + if (blacklist == null) { + throw new IllegalArgumentException("Column: " + fdef.getName + " does not have any filter") + } else { + fdef.getType match { + case Type.List | Type.JSON => + udf[Array[String], Array[String]](values => { + values.filter((v: String) => !blacklist.test(v)) + }) + + case _ => + udf[String, String](v => { + if (blacklist.test(v)) "" + else v + }) + } + } + } + + val generateClustersWithCollect: (Dataset[Row] => Dataset[Row]) = df_with_filters => { + var df_with_clustering_keys: Dataset[Row] = null + + for ((cd, idx) <- conf.clusterings().zipWithIndex) { + val inputColumns = cd.getFields().foldLeft(Seq[Column]())((acc, fName) => { + val column = if (conf.blacklists.containsKey(fName)) + Seq(col(fName + "_filtered")) + else + Seq(col(fName)) + + acc ++ column + }) + + // Add 'key' column with the value generated by the given clustering definition + val ds: Dataset[Row] = df_with_filters + .withColumn("clustering", lit(cd.getName + "::" + idx)) + .withColumn("key", functions.explode(clusterValuesUDF(cd).apply(functions.array(inputColumns: _*)))) + // Add position column having the position of the row within the set of rows having the same key value ordered by the sorting value + .withColumn("position", functions.row_number().over(Window.partitionBy("key").orderBy(col(model.orderingFieldName), col(model.identifierFieldName)))) + + if (df_with_clustering_keys == null) + df_with_clustering_keys = ds + else + df_with_clustering_keys = df_with_clustering_keys.union(ds) + } + + //TODO: analytics + + val df_with_blocks = df_with_clustering_keys + // filter out rows with position exceeding the maxqueuesize parameter + .filter(col("position").leq(conf.getWf.getQueueMaxSize)) + .groupBy("clustering", "key") + .agg(functions.collect_set(functions.struct(model.schema.fieldNames.map(col): _*)).as("block")) + .filter(functions.size(new Column("block")).gt(1)) + + df_with_blocks + } + + def clusterValuesUDF(cd: ClusteringDef) = { + udf[mutable.WrappedArray[String], mutable.WrappedArray[Any]](values => { + values.flatMap(f => cd.clusteringFunction().apply(conf, Seq(f.toString).asJava).asScala) + }) + } + + val processBlocks: (Dataset[Row] => Dataset[Row]) = df => { + df.filter(functions.size(new Column("block")).geq(new Literal(2, DataTypes.IntegerType))) + .withColumn("relations", processBlock(df.sqlContext.sparkContext).apply(new Column("block"))) + .select(functions.explode(new Column("relations")).as("relation")) + } + + def processBlock(implicit sc: SparkContext) = { + val accumulators = SparkReporter.constructAccumulator(conf, sc) + + udf[Array[(String, String)], mutable.WrappedArray[Row]](block => { + val reporter = new SparkReporter(accumulators) + + val mapDocuments = block.asJava.stream() + .sorted(new RowDataOrderingComparator(model.orderingFieldPosition, model.identityFieldPosition)) + .limit(conf.getWf.getQueueMaxSize) + .collect(Collectors.toList[Row]()) + + new BlockProcessor(conf, model.identityFieldPosition, model.orderingFieldPosition).processSortedRows(mapDocuments, reporter) + + reporter.getRelations.asScala.toArray + }).asNondeterministic() + } + +} diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/SparkModel.scala b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/SparkModel.scala new file mode 100644 index 000000000..95325ace0 --- /dev/null +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/SparkModel.scala @@ -0,0 +1,108 @@ +package eu.dnetlib.pace.model + +import com.jayway.jsonpath.{Configuration, JsonPath} +import eu.dnetlib.pace.config.{DedupConfig, Type} +import eu.dnetlib.pace.util.MapDocumentUtil +import org.apache.spark.sql.catalyst.encoders.RowEncoder +import org.apache.spark.sql.catalyst.expressions.GenericRowWithSchema +import org.apache.spark.sql.types.{DataTypes, Metadata, StructField, StructType} +import org.apache.spark.sql.{Dataset, Row} + +import java.util.regex.Pattern +import scala.collection.JavaConverters._ + +case class SparkModel(conf: DedupConfig) { + private val URL_REGEX: Pattern = Pattern.compile("^\\s*(http|https|ftp)\\://.*") + + private val CONCAT_REGEX: Pattern = Pattern.compile("\\|\\|\\|") + + val identifierFieldName = "identifier" + + val orderingFieldName = if (!conf.getWf.getOrderField.isEmpty) conf.getWf.getOrderField else identifierFieldName + + val schema: StructType = { + // create an implicit identifier field + val identifier = new FieldDef() + identifier.setName(identifierFieldName) + identifier.setType(Type.String) + + // Construct a Spark StructType representing the schema of the model + (Seq(identifier) ++ conf.getPace.getModel.asScala) + .foldLeft( + new StructType() + )((resType, fieldDef) => { + resType.add(fieldDef.getType match { + case Type.List | Type.JSON => + StructField(fieldDef.getName, DataTypes.createArrayType(DataTypes.StringType), true, Metadata.empty) + case Type.DoubleArray => + StructField(fieldDef.getName, DataTypes.createArrayType(DataTypes.DoubleType), true, Metadata.empty) + case _ => + StructField(fieldDef.getName, DataTypes.StringType, true, Metadata.empty) + }) + }) + + + } + + val identityFieldPosition: Int = schema.fieldIndex(identifierFieldName) + + val orderingFieldPosition: Int = schema.fieldIndex(orderingFieldName) + + val parseJsonDataset: (Dataset[String] => Dataset[Row]) = df => { + df.map(r => rowFromJson(r))(RowEncoder(schema)) + } + + def rowFromJson(json: String): Row = { + val documentContext = + JsonPath.using(Configuration.defaultConfiguration.addOptions(com.jayway.jsonpath.Option.SUPPRESS_EXCEPTIONS)).parse(json) + val values = new Array[Any](schema.size) + + values(identityFieldPosition) = MapDocumentUtil.getJPathString(conf.getWf.getIdPath, documentContext) + + schema.fieldNames.zipWithIndex.foldLeft(values) { + case ((res, (fname, index))) => { + val fdef = conf.getPace.getModelMap.get(fname) + + if (fdef != null) { + res(index) = fdef.getType match { + case Type.String | Type.Int => + MapDocumentUtil.truncateValue( + MapDocumentUtil.getJPathString(fdef.getPath, documentContext), + fdef.getLength + ) + + case Type.URL => + var uv = MapDocumentUtil.getJPathString(fdef.getPath, documentContext) + if (!URL_REGEX.matcher(uv).matches) + uv = "" + uv + + case Type.List | Type.JSON => + MapDocumentUtil.truncateList( + MapDocumentUtil.getJPathList(fdef.getPath, documentContext, fdef.getType), + fdef.getSize + ).toArray + + case Type.StringConcat => + val jpaths = CONCAT_REGEX.split(fdef.getPath) + + MapDocumentUtil.truncateValue( + jpaths + .map(jpath => MapDocumentUtil.getJPathString(jpath, documentContext)) + .mkString(" "), + fdef.getLength + ) + + case Type.DoubleArray => + MapDocumentUtil.getJPathArray(fdef.getPath, json) + } + } + + res + } + } + + new GenericRowWithSchema(values, schema) + } +} + diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/AlwaysMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/AlwaysMatch.java index f53655a8e..4d31df5b3 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/AlwaysMatch.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/AlwaysMatch.java @@ -6,12 +6,11 @@ import java.util.Map; import com.wcohen.ss.AbstractStringDistance; import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.tree.support.AbstractComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; @ComparatorClass("alwaysMatch") -public class AlwaysMatch extends AbstractComparator { +public class AlwaysMatch extends AbstractComparator { public AlwaysMatch(final Map params) { super(params, new com.wcohen.ss.JaroWinkler()); @@ -26,7 +25,7 @@ public class AlwaysMatch extends AbstractComparator { } @Override - public double compare(final Field a, final Field b, final Config conf) { + public double compare(final Object a, final Object b, final Config conf) { return 1.0; } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/AuthorsMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/AuthorsMatch.java index 047e121e3..5c6939e60 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/AuthorsMatch.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/AuthorsMatch.java @@ -1,25 +1,19 @@ package eu.dnetlib.pace.tree; -import java.util.Comparator; import java.util.List; import java.util.Map; -import java.util.function.Function; import java.util.stream.Collectors; -import java.util.stream.Stream; -import com.google.common.collect.Iterables; import com.wcohen.ss.AbstractStringDistance; import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.model.FieldList; import eu.dnetlib.pace.model.Person; -import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.AbstractListComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; @ComparatorClass("authorsMatch") -public class AuthorsMatch extends AbstractComparator { +public class AuthorsMatch extends AbstractListComparator { Map params; @@ -49,24 +43,16 @@ public class AuthorsMatch extends AbstractComparator { } @Override - public double compare(final Field a, final Field b, final Config conf) { + public double compare(final List a, final List b, final Config conf) { if (a.isEmpty() || b.isEmpty()) return -1; - if (((FieldList) a).size() > SIZE_THRESHOLD || ((FieldList) b).size() > SIZE_THRESHOLD) + if (a.size() > SIZE_THRESHOLD || b.size() > SIZE_THRESHOLD) return 1.0; - List aList = ((FieldList) a) - .stringList() - .stream() - .map(author -> new Person(author, false)) - .collect(Collectors.toList()); - List bList = ((FieldList) b) - .stringList() - .stream() - .map(author -> new Person(author, false)) - .collect(Collectors.toList()); + List aList = a.stream().map(author -> new Person(author, false)).collect(Collectors.toList()); + List bList = b.stream().map(author -> new Person(author, false)).collect(Collectors.toList()); common = 0; // compare each element of List1 with each element of List2 diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/CityMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/CityMatch.java index f3da29e8e..1d898ad83 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/CityMatch.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/CityMatch.java @@ -5,11 +5,11 @@ import java.util.Map; import java.util.Set; import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.AbstractStringComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; @ComparatorClass("cityMatch") -public class CityMatch extends AbstractComparator { +public class CityMatch extends AbstractStringComparator { private Map params; diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/CosineSimilarity.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/CosineSimilarity.java index 82d84794f..d255612ba 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/CosineSimilarity.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/CosineSimilarity.java @@ -1,21 +1,14 @@ package eu.dnetlib.pace.tree; -import java.util.HashMap; -import java.util.List; import java.util.Map; -import java.util.stream.Collectors; import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.model.FieldList; -import eu.dnetlib.pace.model.FieldValueImpl; -import eu.dnetlib.pace.model.Person; import eu.dnetlib.pace.tree.support.AbstractComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; @ComparatorClass("cosineSimilarity") -public class CosineSimilarity extends AbstractComparator { +public class CosineSimilarity extends AbstractComparator { Map params; @@ -24,15 +17,16 @@ public class CosineSimilarity extends AbstractComparator { } @Override - public double compare(final Field a, final Field b, final Config conf) { + public double compare(Object a, Object b, Config config) { + return compare((double[]) a, (double[]) b, config); + } - if (a.isEmpty() || b.isEmpty()) + public double compare(final double[] a, final double[] b, final Config conf) { + + if (a.length == 0 || b.length == 0) return -1; - double[] aVector = ((FieldValueImpl) a).doubleArrayValue(); - double[] bVector = ((FieldValueImpl) b).doubleArrayValue(); - - return cosineSimilarity(aVector, bVector); + return cosineSimilarity(a, b); } double cosineSimilarity(double[] a, double[] b) { diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/DoiExactMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/DoiExactMatch.java index 24f3dfc02..d3c5bc10d 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/DoiExactMatch.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/DoiExactMatch.java @@ -3,7 +3,6 @@ package eu.dnetlib.pace.tree; import java.util.Map; -import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.tree.support.ComparatorClass; /** @@ -21,8 +20,8 @@ public class DoiExactMatch extends ExactMatchIgnoreCase { } @Override - protected String getValue(final Field f) { - return super.getValue(f).replaceAll(PREFIX, ""); + protected String toString(final Object f) { + return super.toString(f).replaceAll(PREFIX, ""); } } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/DomainExactMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/DomainExactMatch.java index efafe6573..c28274652 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/DomainExactMatch.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/DomainExactMatch.java @@ -5,7 +5,6 @@ import java.net.MalformedURLException; import java.net.URL; import java.util.Map; -import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.tree.support.ComparatorClass; @ComparatorClass("domainExactMatch") @@ -16,10 +15,10 @@ public class DomainExactMatch extends ExactMatchIgnoreCase { } @Override - protected String getValue(final Field f) { + protected String toString(final Object f) { try { - return asUrl(super.getValue(f)).getHost(); + return asUrl(super.toString(f)).getHost(); } catch (MalformedURLException e) { return ""; } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatch.java index 85ce6744d..35357c553 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatch.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatch.java @@ -6,11 +6,11 @@ import java.util.Map; import com.wcohen.ss.AbstractStringDistance; import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.AbstractStringComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; @ComparatorClass("exactMatch") -public class ExactMatch extends AbstractComparator { +public class ExactMatch extends AbstractStringComparator { public ExactMatch(Map params) { super(params, new com.wcohen.ss.JaroWinkler()); diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatchIgnoreCase.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatchIgnoreCase.java index 307f02246..85c57ad40 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatchIgnoreCase.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/ExactMatchIgnoreCase.java @@ -4,30 +4,26 @@ package eu.dnetlib.pace.tree; import java.util.Map; import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.AbstractStringComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; @ComparatorClass("exactMatchIgnoreCase") -public class ExactMatchIgnoreCase extends AbstractComparator { +public class ExactMatchIgnoreCase extends AbstractStringComparator { public ExactMatchIgnoreCase(Map params) { super(params); } @Override - public double compare(Field a, Field b, final Config conf) { + public double compare(String a, String b, final Config conf) { - final String fa = getValue(a); - final String fb = getValue(b); - - if (fa.isEmpty() || fb.isEmpty()) + if (a.isEmpty() || b.isEmpty()) return -1; - return fa.equalsIgnoreCase(fb) ? 1 : 0; + return a.equalsIgnoreCase(b) ? 1 : 0; } - protected String getValue(final Field f) { - return getFirstValue(f); + protected String toString(final Object object) { + return toFirstString(object); } } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/InstanceTypeMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/InstanceTypeMatch.java index bdef1225d..238cb16ce 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/InstanceTypeMatch.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/InstanceTypeMatch.java @@ -10,13 +10,11 @@ import java.util.stream.Collectors; import com.google.common.collect.Sets; import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.model.FieldList; -import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.AbstractListComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; @ComparatorClass("instanceTypeMatch") -public class InstanceTypeMatch extends AbstractComparator { +public class InstanceTypeMatch extends AbstractListComparator { final Map translationMap = new HashMap<>(); @@ -42,21 +40,18 @@ public class InstanceTypeMatch extends AbstractComparator { } @Override - public double compare(final Field a, final Field b, final Config conf) { + public double compare(final List a, final List b, final Config conf) { if (a == null || b == null) { return -1; } - final List sa = ((FieldList) a).stringList(); - final List sb = ((FieldList) b).stringList(); - - if (sa.isEmpty() || sb.isEmpty()) { + if (a.isEmpty() || b.isEmpty()) { return -1; } - final Set ca = sa.stream().map(this::translate).collect(Collectors.toSet()); - final Set cb = sb.stream().map(this::translate).collect(Collectors.toSet()); + final Set ca = a.stream().map(this::translate).collect(Collectors.toSet()); + final Set cb = b.stream().map(this::translate).collect(Collectors.toSet()); // if at least one is a jolly type, it must produce a match if (ca.contains("*") || cb.contains("*")) diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinkler.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinkler.java index 7511e5ec9..2cb411d26 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinkler.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinkler.java @@ -6,12 +6,12 @@ import java.util.Map; import com.wcohen.ss.AbstractStringDistance; import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.AbstractStringComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; //case class JaroWinkler(w: Double) extends SecondStringDistanceAlgo(w, new com.wcohen.ss.JaroWinkler()) @ComparatorClass("jaroWinkler") -public class JaroWinkler extends AbstractComparator { +public class JaroWinkler extends AbstractStringComparator { public JaroWinkler(Map params) { super(params, new com.wcohen.ss.JaroWinkler()); diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerNormalizedName.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerNormalizedName.java index 4f4c68e47..576b9281d 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerNormalizedName.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerNormalizedName.java @@ -7,11 +7,11 @@ import java.util.Set; import com.wcohen.ss.AbstractStringDistance; import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.AbstractStringComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; @ComparatorClass("jaroWinklerNormalizedName") -public class JaroWinklerNormalizedName extends AbstractComparator { +public class JaroWinklerNormalizedName extends AbstractStringComparator { private Map params; diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerTitle.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerTitle.java index d97d8d061..6ba7dd2a4 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerTitle.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/JaroWinklerTitle.java @@ -6,12 +6,12 @@ import java.util.Map; import com.wcohen.ss.AbstractStringDistance; import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.AbstractStringComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; //case class JaroWinkler(w: Double) extends SecondStringDistanceAlgo(w, new com.wcohen.ss.JaroWinkler()) @ComparatorClass("jaroWinklerTitle") -public class JaroWinklerTitle extends AbstractComparator { +public class JaroWinklerTitle extends AbstractStringComparator { public JaroWinklerTitle(Map params) { super(params, new com.wcohen.ss.JaroWinkler()); diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/JsonListMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/JsonListMatch.java index e5c69a852..3897e37f8 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/JsonListMatch.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/JsonListMatch.java @@ -10,16 +10,18 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.google.common.collect.Sets; +import com.jayway.jsonpath.Configuration; +import com.jayway.jsonpath.DocumentContext; +import com.jayway.jsonpath.JsonPath; +import com.jayway.jsonpath.Option; import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.model.FieldList; -import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.AbstractListComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; import eu.dnetlib.pace.util.MapDocumentUtil; @ComparatorClass("jsonListMatch") -public class JsonListMatch extends AbstractComparator { +public class JsonListMatch extends AbstractListComparator { private static final Log log = LogFactory.getLog(JsonListMatch.class); private Map params; @@ -34,11 +36,7 @@ public class JsonListMatch extends AbstractComparator { } @Override - public double compare(final Field a, final Field b, final Config conf) { - - final List sa = ((FieldList) a).stringList(); - final List sb = ((FieldList) b).stringList(); - + public double compare(final List sa, final List sb, final Config conf) { if (sa.isEmpty() || sb.isEmpty()) { return -1; } @@ -65,14 +63,17 @@ public class JsonListMatch extends AbstractComparator { StringBuilder st = new StringBuilder(); // to build the string used for comparisons basing on the jpath into // parameters - + final DocumentContext documentContext = JsonPath + .using(Configuration.defaultConfiguration().addOptions(Option.SUPPRESS_EXCEPTIONS)) + .parse(json); // for each path in the param list for (String key : params.keySet().stream().filter(k -> k.contains("jpath")).collect(Collectors.toList())) { String path = params.get(key); - String value = MapDocumentUtil.getJPathString(path, json); + String value = MapDocumentUtil.getJPathString(path, documentContext); if (value == null || value.isEmpty()) value = ""; - st.append(value + "::"); + st.append(value); + st.append("::"); } st.setLength(st.length() - 2); diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/KeywordMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/KeywordMatch.java index 0d69e5177..53acb4dc8 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/KeywordMatch.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/KeywordMatch.java @@ -5,11 +5,11 @@ import java.util.Map; import java.util.Set; import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.AbstractStringComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; @ComparatorClass("keywordMatch") -public class KeywordMatch extends AbstractComparator { +public class KeywordMatch extends AbstractStringComparator { Map params; diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinkler.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinkler.java index d483049d7..970f975f6 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinkler.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinkler.java @@ -5,11 +5,11 @@ import java.util.Map; import com.wcohen.ss.AbstractStringDistance; -import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.AbstractStringComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; @ComparatorClass("level2JaroWinkler") -public class Level2JaroWinkler extends AbstractComparator { +public class Level2JaroWinkler extends AbstractStringComparator { public Level2JaroWinkler(Map params) { super(params, new com.wcohen.ss.Level2JaroWinkler()); diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinklerTitle.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinklerTitle.java index a87a6079a..e351058f9 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinklerTitle.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2JaroWinklerTitle.java @@ -6,11 +6,11 @@ import java.util.Map; import com.wcohen.ss.AbstractStringDistance; import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.AbstractStringComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; @ComparatorClass("level2JaroWinklerTitle") -public class Level2JaroWinklerTitle extends AbstractComparator { +public class Level2JaroWinklerTitle extends AbstractStringComparator { public Level2JaroWinklerTitle(Map params) { super(params, new com.wcohen.ss.Level2JaroWinkler()); diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2Levenstein.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2Levenstein.java index 5ac19ee2e..e66602e4f 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2Levenstein.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/Level2Levenstein.java @@ -5,11 +5,11 @@ import java.util.Map; import com.wcohen.ss.AbstractStringDistance; -import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.AbstractStringComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; @ComparatorClass("level2Levenstein") -public class Level2Levenstein extends AbstractComparator { +public class Level2Levenstein extends AbstractStringComparator { public Level2Levenstein(Map params) { super(params, new com.wcohen.ss.Level2Levenstein()); diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/Levenstein.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/Levenstein.java index 4072f52aa..0871f8176 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/Levenstein.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/Levenstein.java @@ -5,11 +5,11 @@ import java.util.Map; import com.wcohen.ss.AbstractStringDistance; -import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.AbstractStringComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; @ComparatorClass("levenstein") -public class Levenstein extends AbstractComparator { +public class Levenstein extends AbstractStringComparator { public Levenstein(Map params) { super(params, new com.wcohen.ss.Levenstein()); diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitle.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitle.java index 896e93f09..877cb95ab 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitle.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitle.java @@ -9,11 +9,11 @@ import org.apache.commons.logging.LogFactory; import com.wcohen.ss.AbstractStringDistance; import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.AbstractStringComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; @ComparatorClass("levensteinTitle") -public class LevensteinTitle extends AbstractComparator { +public class LevensteinTitle extends AbstractStringComparator { private static final Log log = LogFactory.getLog(LevensteinTitle.class); diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitleIgnoreVersion.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitleIgnoreVersion.java index 796edf49e..341c0a62b 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitleIgnoreVersion.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitleIgnoreVersion.java @@ -6,14 +6,14 @@ import java.util.Map; import com.wcohen.ss.AbstractStringDistance; import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.AbstractStringComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; /** * Compared compare between two titles, ignoring version numbers. Suitable for Software entities. */ @ComparatorClass("levensteinTitleIgnoreVersion") -public class LevensteinTitleIgnoreVersion extends AbstractComparator { +public class LevensteinTitleIgnoreVersion extends AbstractStringComparator { public LevensteinTitleIgnoreVersion(Map params) { super(params, new com.wcohen.ss.Levenstein()); diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/ListContainsMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/ListContainsMatch.java index 8abe37d96..059db8de5 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/ListContainsMatch.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/ListContainsMatch.java @@ -3,15 +3,10 @@ package eu.dnetlib.pace.tree; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.stream.Collectors; -import com.google.common.collect.Sets; - import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.model.FieldList; -import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.AbstractListComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; /** @@ -20,7 +15,7 @@ import eu.dnetlib.pace.tree.support.ComparatorClass; * @author miconis * */ @ComparatorClass("listContainsMatch") -public class ListContainsMatch extends AbstractComparator { +public class ListContainsMatch extends AbstractListComparator { private Map params; private boolean CASE_SENSITIVE; @@ -38,11 +33,7 @@ public class ListContainsMatch extends AbstractComparator { } @Override - public double compare(final Field a, final Field b, final Config conf) { - - List sa = ((FieldList) a).stringList(); - List sb = ((FieldList) b).stringList(); - + public double compare(List sa, List sb, Config conf) { if (sa.isEmpty() || sb.isEmpty()) { return -1; } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/MustBeDifferent.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/MustBeDifferent.java index ee4b58d9c..b9d62cf16 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/MustBeDifferent.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/MustBeDifferent.java @@ -6,11 +6,11 @@ import java.util.Map; import com.wcohen.ss.AbstractStringDistance; import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.AbstractStringComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; @ComparatorClass("mustBeDifferent") -public class MustBeDifferent extends AbstractComparator { +public class MustBeDifferent extends AbstractStringComparator { public MustBeDifferent(Map params) { super(params, new com.wcohen.ss.Levenstein()); diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/NullDistanceAlgo.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/NullDistanceAlgo.java index 8b400122f..3ae1dcde0 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/NullDistanceAlgo.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/NullDistanceAlgo.java @@ -4,7 +4,6 @@ package eu.dnetlib.pace.tree; import java.util.Map; import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.tree.support.Comparator; import eu.dnetlib.pace.tree.support.ComparatorClass; @@ -13,13 +12,13 @@ import eu.dnetlib.pace.tree.support.ComparatorClass; * NullDistanceAlgo. */ @ComparatorClass("null") -public class NullDistanceAlgo implements Comparator { +public class NullDistanceAlgo implements Comparator { public NullDistanceAlgo(Map params) { } @Override - public double compare(Field a, Field b, Config config) { + public double compare(Object a, Object b, Config config) { return 0; } } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/NumbersComparator.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/NumbersComparator.java index ebe25bab4..2c003a170 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/NumbersComparator.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/NumbersComparator.java @@ -4,11 +4,11 @@ package eu.dnetlib.pace.tree; import java.util.Map; import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.AbstractStringComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; @ComparatorClass("numbersComparator") -public class NumbersComparator extends AbstractComparator { +public class NumbersComparator extends AbstractStringComparator { Map params; diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/NumbersMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/NumbersMatch.java index 52f99d018..820436d2e 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/NumbersMatch.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/NumbersMatch.java @@ -4,11 +4,11 @@ package eu.dnetlib.pace.tree; import java.util.Map; import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.AbstractStringComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; @ComparatorClass("numbersMatch") -public class NumbersMatch extends AbstractComparator { +public class NumbersMatch extends AbstractStringComparator { public NumbersMatch(Map params) { super(params); diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/RomansMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/RomansMatch.java index 08e4d5d84..a7c580973 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/RomansMatch.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/RomansMatch.java @@ -4,11 +4,11 @@ package eu.dnetlib.pace.tree; import java.util.Map; import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.AbstractStringComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; @ComparatorClass("romansMatch") -public class RomansMatch extends AbstractComparator { +public class RomansMatch extends AbstractStringComparator { public RomansMatch(Map params) { super(params); diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/SizeMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/SizeMatch.java index 01cb3dd63..fb99ddb14 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/SizeMatch.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/SizeMatch.java @@ -4,11 +4,8 @@ package eu.dnetlib.pace.tree; import java.util.List; import java.util.Map; -import com.google.common.collect.Iterables; - import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.AbstractListComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; /** @@ -17,7 +14,7 @@ import eu.dnetlib.pace.tree.support.ComparatorClass; * @author claudio */ @ComparatorClass("sizeMatch") -public class SizeMatch extends AbstractComparator { +public class SizeMatch extends AbstractListComparator { /** * Instantiates a new size match. @@ -30,23 +27,12 @@ public class SizeMatch extends AbstractComparator { } @Override - public double compare(final Field a, final Field b, final Config conf) { + public double compare(final List a, final List b, final Config conf) { if (a.isEmpty() || b.isEmpty()) - return -1; + return -1.0; - return Iterables.size(a) == Iterables.size(b) ? 1 : 0; - } - - /** - * Checks if is empty. - * - * @param a - * the a - * @return true, if is empty - */ - protected boolean isEmpty(final Iterable a) { - return (a == null) || Iterables.isEmpty(a); + return a.size() == b.size() ? 1.0 : 0.0; } } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/StringContainsMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/StringContainsMatch.java index cef6de504..bca417b60 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/StringContainsMatch.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/StringContainsMatch.java @@ -4,7 +4,7 @@ package eu.dnetlib.pace.tree; import java.util.Map; import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.AbstractStringComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; /** @@ -13,7 +13,7 @@ import eu.dnetlib.pace.tree.support.ComparatorClass; * @author miconis * */ @ComparatorClass("stringContainsMatch") -public class StringContainsMatch extends AbstractComparator { +public class StringContainsMatch extends AbstractStringComparator { private Map params; diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/StringListMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/StringListMatch.java index c74deadc9..b4dbef3bb 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/StringListMatch.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/StringListMatch.java @@ -2,6 +2,7 @@ package eu.dnetlib.pace.tree; import java.util.HashSet; +import java.util.List; import java.util.Map; import java.util.Set; @@ -11,13 +12,11 @@ import org.apache.commons.logging.LogFactory; import com.google.common.collect.Sets; import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.model.FieldList; -import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.AbstractListComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; @ComparatorClass("stringListMatch") -public class StringListMatch extends AbstractComparator { +public class StringListMatch extends AbstractListComparator { private static final Log log = LogFactory.getLog(StringListMatch.class); private Map params; @@ -32,10 +31,10 @@ public class StringListMatch extends AbstractComparator { } @Override - public double compare(final Field a, final Field b, final Config conf) { + public double compare(final List a, final List b, final Config conf) { - final Set pa = new HashSet<>(((FieldList) a).stringList()); - final Set pb = new HashSet<>(((FieldList) b).stringList()); + final Set pa = new HashSet<>(a); + final Set pb = new HashSet<>(b); if (pa.isEmpty() || pb.isEmpty()) { return -1; // return undefined if one of the two lists is empty diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/SubStringLevenstein.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/SubStringLevenstein.java index 23be3f752..3f8c40599 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/SubStringLevenstein.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/SubStringLevenstein.java @@ -8,25 +8,24 @@ import org.apache.commons.lang3.StringUtils; import com.wcohen.ss.AbstractStringDistance; import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.config.Type; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.AbstractStringComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; /** * The Class SubStringLevenstein. */ @ComparatorClass("subStringLevenstein") -public class SubStringLevenstein extends AbstractComparator { +public class SubStringLevenstein extends AbstractStringComparator { - /** The limit. */ + /** + * The limit. + */ protected int limit; /** * Instantiates a new sub string levenstein. - * - * @param w - * the w + * + * @param w the w */ public SubStringLevenstein(final double w) { super(w, new com.wcohen.ss.Levenstein()); @@ -39,11 +38,9 @@ public class SubStringLevenstein extends AbstractComparator { /** * Instantiates a new sub string levenstein. - * - * @param w - * the w - * @param limit - * the limit + * + * @param w the w + * @param limit the limit */ public SubStringLevenstein(final double w, final int limit) { super(w, new com.wcohen.ss.Levenstein()); @@ -52,13 +49,10 @@ public class SubStringLevenstein extends AbstractComparator { /** * Instantiates a new sub string levenstein. - * - * @param w - * the w - * @param limit - * the limit - * @param ssalgo - * the ssalgo + * + * @param w the w + * @param limit the limit + * @param ssalgo the ssalgo */ protected SubStringLevenstein(final double w, final int limit, final AbstractStringDistance ssalgo) { super(w, ssalgo); @@ -71,11 +65,8 @@ public class SubStringLevenstein extends AbstractComparator { * eu.dnetlib.pace.model.Field) */ @Override - public double distance(final Field a, final Field b, final Config conf) { - if (a.getType().equals(Type.String) && b.getType().equals(Type.String)) - return distance(StringUtils.left(a.stringValue(), limit), StringUtils.left(b.stringValue(), limit), conf); - - throw new IllegalArgumentException("invalid types\n- A: " + a.toString() + "\n- B: " + b.toString()); + public double distance(final String a, final String b, final Config conf) { + return distance(StringUtils.left(a, limit), StringUtils.left(b, limit), conf); } /* diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/TitleVersionMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/TitleVersionMatch.java index db1faf9e2..8d99ac27f 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/TitleVersionMatch.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/TitleVersionMatch.java @@ -1,12 +1,10 @@ package eu.dnetlib.pace.tree; -import java.util.List; import java.util.Map; import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.AbstractStringComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; /** @@ -16,17 +14,14 @@ import eu.dnetlib.pace.tree.support.ComparatorClass; * */ @ComparatorClass("titleVersionMatch") -public class TitleVersionMatch extends AbstractComparator { +public class TitleVersionMatch extends AbstractStringComparator { public TitleVersionMatch(final Map params) { super(params); } @Override - public double compare(final Field a, final Field b, final Config conf) { - final String valueA = getFirstValue(a); - final String valueB = getFirstValue(b); - + public double compare(final String valueA, final String valueB, final Config conf) { if (valueA.isEmpty() || valueB.isEmpty()) return -1; @@ -38,4 +33,7 @@ public class TitleVersionMatch extends AbstractComparator { return getClass().getSimpleName() + ":" + super.toString(); } + protected String toString(final Object object) { + return toFirstString(object); + } } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/UrlMatcher.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/UrlMatcher.java index f4f00a908..722236be6 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/UrlMatcher.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/UrlMatcher.java @@ -8,7 +8,6 @@ import java.util.Map; import org.apache.commons.lang3.StringUtils; import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.tree.support.ComparatorClass; @ComparatorClass("urlMatcher") @@ -31,9 +30,9 @@ public class UrlMatcher extends Levenstein { } @Override - public double distance(Field a, Field b, final Config conf) { - final URL urlA = asUrl(getFirstValue(a)); - final URL urlB = asUrl(getFirstValue(b)); + public double distance(String a, String b, final Config conf) { + final URL urlA = asUrl(a); + final URL urlB = asUrl(b); if (!urlA.getHost().equalsIgnoreCase(urlB.getHost())) { return 0.0; @@ -58,4 +57,7 @@ public class UrlMatcher extends Levenstein { } } + protected String toString(final Object object) { + return toFirstString(object); + } } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/YearMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/YearMatch.java index 7ee8c8bad..95f796f6a 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/YearMatch.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/YearMatch.java @@ -6,8 +6,7 @@ import java.util.Map; import org.apache.commons.lang3.StringUtils; import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.tree.support.AbstractComparator; +import eu.dnetlib.pace.tree.support.AbstractStringComparator; import eu.dnetlib.pace.tree.support.ComparatorClass; /** @@ -16,7 +15,7 @@ import eu.dnetlib.pace.tree.support.ComparatorClass; * @author claudio */ @ComparatorClass("yearMatch") -public class YearMatch extends AbstractComparator { +public class YearMatch extends AbstractStringComparator { private int limit = 4; @@ -25,7 +24,7 @@ public class YearMatch extends AbstractComparator { } @Override - public double compare(final Field a, final Field b, final Config conf) { + public double compare(final String a, final String b, final Config conf) { final String valueA = getNumbers(getFirstValue(a)); final String valueB = getNumbers(getFirstValue(b)); @@ -42,8 +41,8 @@ public class YearMatch extends AbstractComparator { return s.length() == limit; } - protected String getFirstValue(final Field value) { - return (value != null) && !value.isEmpty() ? StringUtils.left(value.stringValue(), limit) : ""; + protected String getFirstValue(final String value) { + return (value != null) && !value.isEmpty() ? StringUtils.left(value, limit) : ""; } @Override diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractComparator.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractComparator.java index 3ecffb289..8a957c5e3 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractComparator.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractComparator.java @@ -4,15 +4,14 @@ package eu.dnetlib.pace.tree.support; import java.util.List; import java.util.Map; +import com.google.common.base.Joiner; +import com.google.common.collect.Lists; import com.wcohen.ss.AbstractStringDistance; import eu.dnetlib.pace.common.AbstractPaceFunctions; import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.config.Type; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.model.FieldList; -public abstract class AbstractComparator extends AbstractPaceFunctions implements Comparator { +public abstract class AbstractComparator extends AbstractPaceFunctions implements Comparator { /** The ssalgo. */ protected AbstractStringDistance ssalgo; @@ -69,8 +68,8 @@ public abstract class AbstractComparator extends AbstractPaceFunctions implement * the b * @return the double */ - public double distance(final String a, final String b, final Config conf) { + protected double distance(final String a, final String b, final Config conf) { if (a.isEmpty() || b.isEmpty()) { return -1; // return -1 if a field is missing } @@ -78,49 +77,50 @@ public abstract class AbstractComparator extends AbstractPaceFunctions implement return normalize(score); } - /** - * Distance. - * - * @param a - * the a - * @param b - * the b - * @return the double - */ - protected double distance(final List a, final List b, final Config conf) { - return distance(concat(a), concat(b), conf); - } - - public double distance(final Field a, final Field b, final Config conf) { - if (a.getType().equals(Type.String) && b.getType().equals(Type.String)) - return distance(a.stringValue(), b.stringValue(), conf); - if (a.getType().equals(Type.List) && b.getType().equals(Type.List)) - return distance(toList(a), toList(b), conf); - - throw new IllegalArgumentException("invalid types\n- A: " + a.toString() + "\n- B: " + b.toString()); - } - - @Override - public double compare(final Field a, final Field b, final Config conf) { + protected double compare(final String a, final String b, final Config conf) { if (a.isEmpty() || b.isEmpty()) return -1; - if (a.getType().equals(Type.String) && b.getType().equals(Type.String)) - return distance(a.stringValue(), b.stringValue(), conf); - if (a.getType().equals(Type.List) && b.getType().equals(Type.List)) - return distance(toList(a), toList(b), conf); - - throw new IllegalArgumentException("invalid types\n- A: " + a.toString() + "\n- B: " + b.toString()); + return distance(a, b, conf); } /** - * To list. + * Convert the given argument to a List of Strings * - * @param list - * the list + * @param object + * function argument * @return the list */ - protected List toList(final Field list) { - return ((FieldList) list).stringList(); + protected List toList(final Object object) { + if (object instanceof List) { + return (List) object; + } + + return Lists.newArrayList(object.toString()); + } + + /** + * Convert the given argument to a String + * + * @param object + * function argument + * @return the list + */ + protected String toString(final Object object) { + if (object instanceof List) { + List l = (List) object; + return Joiner.on(" ").join(l); + } + + return object.toString(); + } + + protected String toFirstString(final Object object) { + if (object instanceof List) { + List l = (List) object; + return l.isEmpty() ? "" : l.get(0); + } + + return object.toString(); } public double getWeight() { diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractListComparator.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractListComparator.java new file mode 100644 index 000000000..3f35350bd --- /dev/null +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractListComparator.java @@ -0,0 +1,39 @@ + +package eu.dnetlib.pace.tree.support; + +import java.util.List; +import java.util.Map; + +import com.wcohen.ss.AbstractStringDistance; + +import eu.dnetlib.pace.config.Config; + +abstract public class AbstractListComparator extends AbstractComparator> { + protected AbstractListComparator(Map params) { + super(params); + } + + protected AbstractListComparator(Map params, AbstractStringDistance ssalgo) { + super(params, ssalgo); + } + + protected AbstractListComparator(double weight, AbstractStringDistance ssalgo) { + super(weight, ssalgo); + } + + protected AbstractListComparator(AbstractStringDistance ssalgo) { + super(ssalgo); + } + + @Override + public double compare(Object a, Object b, Config conf) { + return compare(toList(a), toList(b), conf); + } + + public double compare(final List a, final List b, final Config conf) { + if (a.isEmpty() || b.isEmpty()) + return -1; + + return distance(concat(a), concat(b), conf); + } +} diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractSortedComparator.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractSortedComparator.java index 8927f2e14..06c806b92 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractSortedComparator.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractSortedComparator.java @@ -8,10 +8,7 @@ import java.util.Map; import com.google.common.collect.Lists; import com.wcohen.ss.AbstractStringDistance; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.model.FieldList; - -public abstract class AbstractSortedComparator extends AbstractComparator { +public abstract class AbstractSortedComparator extends AbstractListComparator { /** * Instantiates a new sorted second string compare algo. @@ -30,11 +27,14 @@ public abstract class AbstractSortedComparator extends AbstractComparator { } @Override - protected List toList(final Field list) { - FieldList fl = (FieldList) list; - List values = Lists.newArrayList(fl.stringList()); - Collections.sort(values); - return values; - } + protected List toList(final Object object) { + if (object instanceof List) { + List fl = (List) object; + List values = Lists.newArrayList(fl); + Collections.sort(values); + return values; + } + return Lists.newArrayList(object.toString()); + } } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractStringComparator.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractStringComparator.java new file mode 100644 index 000000000..037ff6634 --- /dev/null +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractStringComparator.java @@ -0,0 +1,46 @@ + +package eu.dnetlib.pace.tree.support; + +import java.util.Map; + +import com.wcohen.ss.AbstractStringDistance; + +import eu.dnetlib.pace.config.Config; + +public abstract class AbstractStringComparator extends AbstractComparator { + protected AbstractStringComparator(Map params) { + super(params); + } + + protected AbstractStringComparator(Map params, AbstractStringDistance ssalgo) { + super(params, ssalgo); + } + + protected AbstractStringComparator(double weight, AbstractStringDistance ssalgo) { + super(weight, ssalgo); + } + + protected AbstractStringComparator(AbstractStringDistance ssalgo) { + super(ssalgo); + } + + public double distance(final String a, final String b, final Config conf) { + if (a.isEmpty() || b.isEmpty()) { + return -1; // return -1 if a field is missing + } + double score = ssalgo.score(a, b); + return normalize(score); + } + + @Override + public double compare(Object a, Object b, Config conf) { + return compare(toString(a), toString(b), conf); + } + + public double compare(final String a, final String b, final Config conf) { + if (a.isEmpty() || b.isEmpty()) + return -1; + return distance(a, b, conf); + } + +} diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/Comparator.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/Comparator.java index b11ca5429..15a39921b 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/Comparator.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/Comparator.java @@ -2,13 +2,11 @@ package eu.dnetlib.pace.tree.support; import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.model.Field; -public interface Comparator { +public interface Comparator { /* * return : -1 -> can't decide (i.e. missing field) >0 -> similarity degree (depends on the algorithm) */ - public double compare(Field a, Field b, Config conf); - + public double compare(Object a, Object b, Config conf); } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/FieldStats.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/FieldStats.java index 0d5c80f53..46e66378e 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/FieldStats.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/FieldStats.java @@ -6,7 +6,6 @@ import java.io.Serializable; import com.fasterxml.jackson.databind.ObjectMapper; -import eu.dnetlib.pace.model.Field; import eu.dnetlib.pace.util.PaceException; /** @@ -17,12 +16,12 @@ public class FieldStats implements Serializable { private double weight; // weight for the field (to be used in the aggregation) private double threshold; // threshold for the field (to be used in some kind of aggregations) private double result; // the result of the comparison - private Field a; - private Field b; + private Object a; + private Object b; private boolean countIfUndefined; - public FieldStats(double weight, double threshold, double result, boolean countIfUndefined, Field a, Field b) { + public FieldStats(double weight, double threshold, double result, boolean countIfUndefined, Object a, Object b) { this.weight = weight; this.threshold = threshold; this.result = result; @@ -63,19 +62,19 @@ public class FieldStats implements Serializable { this.countIfUndefined = countIfUndefined; } - public Field getA() { + public Object getA() { return a; } - public void setA(Field a) { + public void setA(Object a) { this.a = a; } - public Field getB() { + public Object getB() { return b; } - public void setB(Field b) { + public void setB(Object b) { this.b = b; } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/MatchType.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/MatchType.java index 8dff818e8..60559412d 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/MatchType.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/MatchType.java @@ -7,10 +7,19 @@ public enum MatchType { public static MatchType parse(String value) { - try { - return MatchType.valueOf(value); - } catch (IllegalArgumentException e) { - return MatchType.UNDEFINED; // return UNDEFINED if the enum is not parsable + if (MATCH.name().equals(value)) { + return MATCH; + } else if (NO_MATCH.name().equals(value)) { + return NO_MATCH; + } else { + return UNDEFINED; } + +// try { +// return MatchType.valueOf(value); +// } +// catch (IllegalArgumentException e) { +// return MatchType.UNDEFINED; //return UNDEFINED if the enum is not parsable +// } } } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java index a754f13cd..0973fdf1e 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeNodeDef.java @@ -3,17 +3,17 @@ package eu.dnetlib.pace.tree.support; import java.io.IOException; import java.io.Serializable; -import java.io.StringWriter; import java.util.List; -import org.apache.commons.lang3.StringUtils; +import org.apache.spark.sql.Row; +import org.apache.spark.sql.types.ArrayType; +import org.apache.spark.sql.types.DataType; +import org.apache.spark.sql.types.StringType; -import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import eu.dnetlib.pace.config.Config; import eu.dnetlib.pace.config.PaceConfig; -import eu.dnetlib.pace.model.MapDocument; import eu.dnetlib.pace.util.PaceException; public class TreeNodeDef implements Serializable { @@ -46,31 +46,27 @@ public class TreeNodeDef implements Serializable { } // function for the evaluation of the node - public TreeNodeStats evaluate(MapDocument doc1, MapDocument doc2, Config conf) { + public TreeNodeStats evaluate(Row doc1, Row doc2, Config conf) { TreeNodeStats stats = new TreeNodeStats(); // for each field in the node, it computes the for (FieldConf fieldConf : fields) { - double weight = fieldConf.getWeight(); - double result; + Object value1 = getJavaValue(doc1, fieldConf.getField()); + Object value2 = getJavaValue(doc2, fieldConf.getField()); + // if the param specifies a cross comparison (i.e. compare elements from different fields), compute the // result for both sides and return the maximum - if (fieldConf.getParams().keySet().stream().anyMatch(k -> k.contains(CROSS_COMPARE))) { - String crossField = fieldConf.getParams().get(CROSS_COMPARE); - double result1 = comparator(fieldConf) - .compare(doc1.getFieldMap().get(fieldConf.getField()), doc2.getFieldMap().get(crossField), conf); - double result2 = comparator(fieldConf) - .compare(doc1.getFieldMap().get(crossField), doc2.getFieldMap().get(fieldConf.getField()), conf); + String crossField = fieldConf.getParams().get(CROSS_COMPARE); + if (crossField != null) { + double result1 = comparator(fieldConf).compare(value1, getJavaValue(doc2, crossField), conf); + double result2 = comparator(fieldConf).compare(getJavaValue(doc1, crossField), value2, conf); result = Math.max(result1, result2); } else { - result = comparator(fieldConf) - .compare( - doc1.getFieldMap().get(fieldConf.getField()), doc2.getFieldMap().get(fieldConf.getField()), - conf); + result = comparator(fieldConf).compare(value1, value2, conf); } stats @@ -81,13 +77,27 @@ public class TreeNodeDef implements Serializable { Double.parseDouble(fieldConf.getParams().getOrDefault("threshold", "1.0")), result, fieldConf.isCountIfUndefined(), - doc1.getFieldMap().get(fieldConf.getField()), - doc2.getFieldMap().get(fieldConf.getField()))); + value1, + value2)); } return stats; } + public Object getJavaValue(Row row, String name) { + int pos = row.fieldIndex(name); + if (pos >= 0) { + DataType dt = row.schema().fields()[pos].dataType(); + if (dt instanceof StringType) { + return row.getString(pos); + } else if (dt instanceof ArrayType) { + return row.getList(pos); + } + } + + return null; + } + private Comparator comparator(final FieldConf field) { return PaceConfig.resolver.getComparator(field.getComparator(), field.getParams()); diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeProcessor.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeProcessor.java index 04e16be34..263504dbb 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeProcessor.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeProcessor.java @@ -3,9 +3,9 @@ package eu.dnetlib.pace.tree.support; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.spark.sql.Row; import eu.dnetlib.pace.config.Config; -import eu.dnetlib.pace.model.MapDocument; import eu.dnetlib.pace.util.PaceException; /** @@ -21,72 +21,72 @@ public class TreeProcessor { this.config = config; } - public boolean compare(final MapDocument a, final MapDocument b) { + // row based copies + + public boolean compare(final Row a, final Row b) { // evaluate the decision tree return evaluateTree(a, b).getResult() == MatchType.MATCH; } - public TreeStats evaluateTree(final MapDocument doc1, final MapDocument doc2) { + public TreeStats evaluateTree(final Row doc1, final Row doc2) { TreeStats treeStats = new TreeStats(); - String current = "start"; + String nextNodeName = "start"; - while (MatchType.parse(current) == MatchType.UNDEFINED) { + do { - TreeNodeDef currentNode = config.decisionTree().get(current); + TreeNodeDef currentNode = config.decisionTree().get(nextNodeName); // throw an exception if the node doesn't exist if (currentNode == null) - throw new PaceException("Missing tree node: " + current); + throw new PaceException("Missing tree node: " + nextNodeName); TreeNodeStats stats = currentNode.evaluate(doc1, doc2, config); - treeStats.addNodeStats(current, stats); + treeStats.addNodeStats(nextNodeName, stats); // if ignoreUndefined=false the miss is considered as undefined if (!currentNode.isIgnoreUndefined() && stats.undefinedCount() > 0) { - current = currentNode.getUndefined(); + nextNodeName = currentNode.getUndefined(); } // if ignoreUndefined=true the miss is ignored and the score computed anyway else if (stats.getFinalScore(currentNode.getAggregation()) >= currentNode.getThreshold()) { - current = currentNode.getPositive(); + nextNodeName = currentNode.getPositive(); } else { - current = currentNode.getNegative(); + nextNodeName = currentNode.getNegative(); } - } + } while (MatchType.parse(nextNodeName) == MatchType.UNDEFINED); - treeStats.setResult(MatchType.parse(current)); + treeStats.setResult(MatchType.parse(nextNodeName)); return treeStats; } - public double computeScore(final MapDocument doc1, final MapDocument doc2) { - String current = "start"; + public double computeScore(final Row doc1, final Row doc2) { + String nextNodeName = "start"; double score = 0.0; - while (MatchType.parse(current) == MatchType.UNDEFINED) { + do { - TreeNodeDef currentNode = config.decisionTree().get(current); + TreeNodeDef currentNode = config.decisionTree().get(nextNodeName); // throw an exception if the node doesn't exist if (currentNode == null) - throw new PaceException("The Tree Node doesn't exist: " + current); + throw new PaceException("The Tree Node doesn't exist: " + nextNodeName); TreeNodeStats stats = currentNode.evaluate(doc1, doc2, config); score = stats.getFinalScore(currentNode.getAggregation()); // if ignoreUndefined=false the miss is considered as undefined if (!currentNode.isIgnoreUndefined() && stats.undefinedCount() > 0) { - current = currentNode.getUndefined(); + nextNodeName = currentNode.getUndefined(); } // if ignoreUndefined=true the miss is ignored and the score computed anyway else if (stats.getFinalScore(currentNode.getAggregation()) >= currentNode.getThreshold()) { - current = currentNode.getPositive(); + nextNodeName = currentNode.getPositive(); } else { - current = currentNode.getNegative(); + nextNodeName = currentNode.getNegative(); } - - } + } while (MatchType.parse(nextNodeName) == MatchType.UNDEFINED); return score; } - } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java index 4053a123c..c2b0ddda7 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java @@ -1,20 +1,19 @@ package eu.dnetlib.pace.util; -import java.util.*; +import java.util.ArrayList; +import java.util.List; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.spark.sql.Row; +import org.apache.spark.sql.types.ArrayType; +import org.apache.spark.sql.types.DataType; +import org.apache.spark.sql.types.StringType; -import com.google.common.collect.Lists; - -import eu.dnetlib.pace.clustering.NGramUtils; import eu.dnetlib.pace.config.DedupConfig; import eu.dnetlib.pace.config.WfConfig; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.model.MapDocument; -import eu.dnetlib.pace.model.MapDocumentComparator; import eu.dnetlib.pace.tree.support.TreeProcessor; public class BlockProcessor { @@ -25,6 +24,9 @@ public class BlockProcessor { private DedupConfig dedupConf; + private final int identifierFieldPos; + private final int orderFieldPos; + public static void constructAccumulator(final DedupConfig dedupConf) { accumulators.add(String.format("%s::%s", dedupConf.getWf().getEntityType(), "records per hash key = 1")); accumulators @@ -47,152 +49,80 @@ public class BlockProcessor { .add(String.format("%s::%s", dedupConf.getWf().getEntityType(), "d < " + dedupConf.getWf().getThreshold())); } - public BlockProcessor(DedupConfig dedupConf) { + public BlockProcessor(DedupConfig dedupConf, int identifierFieldPos, int orderFieldPos) { this.dedupConf = dedupConf; + this.identifierFieldPos = identifierFieldPos; + this.orderFieldPos = orderFieldPos; } - public void processSortedBlock(final String key, final List documents, final Reporter context) { + public void processSortedRows(final List documents, final Reporter context) { if (documents.size() > 1) { // log.info("reducing key: '" + key + "' records: " + q.size()); - process(prepare(documents), context); + processRows(documents, context); } else { context.incrementCounter(dedupConf.getWf().getEntityType(), "records per hash key = 1", 1); } } - public void process(final String key, final Iterable documents, final Reporter context) { + private void processRows(final List queue, final Reporter context) { - final Queue q = prepare(documents); + for (int pivotPos = 0; pivotPos < queue.size(); pivotPos++) { + final Row pivot = queue.get(pivotPos); - if (q.size() > 1) { -// log.info("reducing key: '" + key + "' records: " + q.size()); - process(simplifyQueue(q, key, context), context); - - } else { - context.incrementCounter(dedupConf.getWf().getEntityType(), "records per hash key = 1", 1); - } - } - - private Queue prepare(final Iterable documents) { - final Queue queue = new PriorityQueue<>(100, - new MapDocumentComparator(dedupConf.getWf().getOrderField())); - - final Set seen = new HashSet(); - final int queueMaxSize = dedupConf.getWf().getQueueMaxSize(); - - documents.forEach(doc -> { - if (queue.size() <= queueMaxSize) { - final String id = doc.getIdentifier(); - - if (!seen.contains(id)) { - seen.add(id); - queue.add(doc); - } - } - }); - - return queue; - } - - private Queue simplifyQueue(final Queue queue, final String ngram, - final Reporter context) { - final Queue q = new LinkedList<>(); - - String fieldRef = ""; - final List tempResults = Lists.newArrayList(); - - while (!queue.isEmpty()) { - final MapDocument result = queue.remove(); - - final String orderFieldName = dedupConf.getWf().getOrderField(); - final Field orderFieldValue = result.values(orderFieldName); - if (!orderFieldValue.isEmpty()) { - final String field = NGramUtils.cleanupForOrdering(orderFieldValue.stringValue()); - if (field.equals(fieldRef)) { - tempResults.add(result); - } else { - populateSimplifiedQueue(q, tempResults, context, fieldRef, ngram); - tempResults.clear(); - tempResults.add(result); - fieldRef = field; - } - } else { - context - .incrementCounter( - dedupConf.getWf().getEntityType(), "missing " + dedupConf.getWf().getOrderField(), 1); - } - } - populateSimplifiedQueue(q, tempResults, context, fieldRef, ngram); - - return q; - } - - private void populateSimplifiedQueue(final Queue q, - final List tempResults, - final Reporter context, - final String fieldRef, - final String ngram) { - WfConfig wf = dedupConf.getWf(); - if (tempResults.size() < wf.getGroupMaxSize()) { - q.addAll(tempResults); - } else { - context - .incrementCounter( - wf.getEntityType(), - String.format("Skipped records for count(%s) >= %s", wf.getOrderField(), wf.getGroupMaxSize()), - tempResults.size()); -// log.info("Skipped field: " + fieldRef + " - size: " + tempResults.size() + " - ngram: " + ngram); - } - } - - private void process(final Queue queue, final Reporter context) { - - while (!queue.isEmpty()) { - - final MapDocument pivot = queue.remove(); - final String idPivot = pivot.getIdentifier(); - - WfConfig wf = dedupConf.getWf(); - final Field fieldsPivot = pivot.values(wf.getOrderField()); - final String fieldPivot = (fieldsPivot == null) || fieldsPivot.isEmpty() ? "" : fieldsPivot.stringValue(); + final String idPivot = pivot.getString(identifierFieldPos); // identifier + final Object fieldsPivot = getJavaValue(pivot, orderFieldPos); + final String fieldPivot = (fieldsPivot == null) ? "" : fieldsPivot.toString(); + final WfConfig wf = dedupConf.getWf(); if (fieldPivot != null) { int i = 0; - for (final MapDocument curr : queue) { - final String idCurr = curr.getIdentifier(); + for (int windowPos = pivotPos + 1; windowPos < queue.size(); windowPos++) { + final Row curr = queue.get(windowPos); + final String idCurr = curr.getString(identifierFieldPos); // identifier if (mustSkip(idCurr)) { - context.incrementCounter(wf.getEntityType(), "skip list", 1); - break; } - if (i > wf.getSlidingWindowSize()) { + if (++i > wf.getSlidingWindowSize()) { break; } - final Field fieldsCurr = curr.values(wf.getOrderField()); - final String fieldCurr = (fieldsCurr == null) || fieldsCurr.isEmpty() ? null - : fieldsCurr.stringValue(); + final Object fieldsCurr = getJavaValue(curr, orderFieldPos); + final String fieldCurr = (fieldsCurr == null) ? null : fieldsCurr.toString(); if (!idCurr.equals(idPivot) && (fieldCurr != null)) { final TreeProcessor treeProcessor = new TreeProcessor(dedupConf); emitOutput(treeProcessor.compare(pivot, curr), idPivot, idCurr, context); - } } } } } + public Object getJavaValue(Row row, int pos) { + DataType dt = row.schema().fields()[pos].dataType(); + if (dt instanceof StringType) { + return row.getString(pos); + } else if (dt instanceof ArrayType) { + return row.getList(pos); + } + + return null; + } + private void emitOutput(final boolean result, final String idPivot, final String idCurr, final Reporter context) { if (result) { - writeSimilarity(context, idPivot, idCurr); + if (idPivot.compareTo(idCurr) <= 0) { + writeSimilarity(context, idPivot, idCurr); + } else { + writeSimilarity(context, idCurr, idPivot); + } context.incrementCounter(dedupConf.getWf().getEntityType(), "dedupSimilarity (x2)", 1); } else { context.incrementCounter(dedupConf.getWf().getEntityType(), "d < " + dedupConf.getWf().getThreshold(), 1); @@ -211,7 +141,6 @@ public class BlockProcessor { final String type = dedupConf.getWf().getEntityType(); context.emit(type, from, to); - context.emit(type, to, from); } } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessorForTesting.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessorForTesting.java deleted file mode 100644 index 40f502e11..000000000 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessorForTesting.java +++ /dev/null @@ -1,276 +0,0 @@ - -package eu.dnetlib.pace.util; - -import java.util.*; - -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import com.google.common.collect.Lists; - -import eu.dnetlib.pace.clustering.NGramUtils; -import eu.dnetlib.pace.config.DedupConfig; -import eu.dnetlib.pace.config.WfConfig; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.model.MapDocument; -import eu.dnetlib.pace.model.MapDocumentComparator; -import eu.dnetlib.pace.tree.*; -import eu.dnetlib.pace.tree.support.TreeProcessor; - -public class BlockProcessorForTesting { - - public static final List accumulators = new ArrayList<>(); - - private static final Log log = LogFactory.getLog(eu.dnetlib.pace.util.BlockProcessorForTesting.class); - - private DedupConfig dedupConf; - - public static void constructAccumulator(final DedupConfig dedupConf) { - accumulators.add(String.format("%s::%s", dedupConf.getWf().getEntityType(), "records per hash key = 1")); - accumulators - .add( - String - .format( - "%s::%s", dedupConf.getWf().getEntityType(), "missing " + dedupConf.getWf().getOrderField())); - accumulators - .add( - String - .format( - "%s::%s", dedupConf.getWf().getEntityType(), - String - .format( - "Skipped records for count(%s) >= %s", dedupConf.getWf().getOrderField(), - dedupConf.getWf().getGroupMaxSize()))); - accumulators.add(String.format("%s::%s", dedupConf.getWf().getEntityType(), "skip list")); - accumulators.add(String.format("%s::%s", dedupConf.getWf().getEntityType(), "dedupSimilarity (x2)")); - accumulators - .add(String.format("%s::%s", dedupConf.getWf().getEntityType(), "d < " + dedupConf.getWf().getThreshold())); - } - - public BlockProcessorForTesting(DedupConfig dedupConf) { - this.dedupConf = dedupConf; - } - - public void processSortedBlock(final String key, final List documents, final Reporter context, - boolean useTree, boolean noMatch) { - if (documents.size() > 1) { -// log.info("reducing key: '" + key + "' records: " + q.size()); - process(prepare(documents), context, useTree, noMatch); - - } else { - context.incrementCounter(dedupConf.getWf().getEntityType(), "records per hash key = 1", 1); - } - } - - public void process(final String key, final Iterable documents, final Reporter context, - boolean useTree, boolean noMatch) { - - final Queue q = prepare(documents); - - if (q.size() > 1) { -// log.info("reducing key: '" + key + "' records: " + q.size()); - process(simplifyQueue(q, key, context), context, useTree, noMatch); - - } else { - context.incrementCounter(dedupConf.getWf().getEntityType(), "records per hash key = 1", 1); - } - } - - private Queue prepare(final Iterable documents) { - final Queue queue = new PriorityQueue<>(100, - new MapDocumentComparator(dedupConf.getWf().getOrderField())); - - final Set seen = new HashSet(); - final int queueMaxSize = dedupConf.getWf().getQueueMaxSize(); - - documents.forEach(doc -> { - if (queue.size() <= queueMaxSize) { - final String id = doc.getIdentifier(); - - if (!seen.contains(id)) { - seen.add(id); - queue.add(doc); - } - } - }); - - return queue; - } - - private Queue simplifyQueue(final Queue queue, final String ngram, - final Reporter context) { - final Queue q = new LinkedList<>(); - - String fieldRef = ""; - final List tempResults = Lists.newArrayList(); - - while (!queue.isEmpty()) { - final MapDocument result = queue.remove(); - - final String orderFieldName = dedupConf.getWf().getOrderField(); - final Field orderFieldValue = result.values(orderFieldName); - if (!orderFieldValue.isEmpty()) { - final String field = NGramUtils.cleanupForOrdering(orderFieldValue.stringValue()); - if (field.equals(fieldRef)) { - tempResults.add(result); - } else { - populateSimplifiedQueue(q, tempResults, context, fieldRef, ngram); - tempResults.clear(); - tempResults.add(result); - fieldRef = field; - } - } else { - context - .incrementCounter( - dedupConf.getWf().getEntityType(), "missing " + dedupConf.getWf().getOrderField(), 1); - } - } - populateSimplifiedQueue(q, tempResults, context, fieldRef, ngram); - - return q; - } - - private void populateSimplifiedQueue(final Queue q, - final List tempResults, - final Reporter context, - final String fieldRef, - final String ngram) { - WfConfig wf = dedupConf.getWf(); - if (tempResults.size() < wf.getGroupMaxSize()) { - q.addAll(tempResults); - } else { - context - .incrementCounter( - wf.getEntityType(), - String.format("Skipped records for count(%s) >= %s", wf.getOrderField(), wf.getGroupMaxSize()), - tempResults.size()); -// log.info("Skipped field: " + fieldRef + " - size: " + tempResults.size() + " - ngram: " + ngram); - } - } - - private void process(final Queue queue, final Reporter context, boolean useTree, boolean noMatch) { - - while (!queue.isEmpty()) { - - final MapDocument pivot = queue.remove(); - final String idPivot = pivot.getIdentifier(); - - WfConfig wf = dedupConf.getWf(); - final Field fieldsPivot = pivot.values(wf.getOrderField()); - final String fieldPivot = (fieldsPivot == null) || fieldsPivot.isEmpty() ? "" : fieldsPivot.stringValue(); - - if (fieldPivot != null) { - int i = 0; - for (final MapDocument curr : queue) { - final String idCurr = curr.getIdentifier(); - - if (mustSkip(idCurr)) { - - context.incrementCounter(wf.getEntityType(), "skip list", 1); - - break; - } - - if (i > wf.getSlidingWindowSize()) { - break; - } - - final Field fieldsCurr = curr.values(wf.getOrderField()); - final String fieldCurr = (fieldsCurr == null) || fieldsCurr.isEmpty() ? null - : fieldsCurr.stringValue(); - - if (!idCurr.equals(idPivot) && (fieldCurr != null)) { - - // draws no match relations (test purpose) - if (noMatch) { - emitOutput(!new TreeProcessor(dedupConf).compare(pivot, curr), idPivot, idCurr, context); - } else { - // use the decision tree implementation or the "normal" implementation of the similarity - // score (valid only for publications) - if (useTree) - emitOutput(new TreeProcessor(dedupConf).compare(pivot, curr), idPivot, idCurr, context); - else - emitOutput(publicationCompare(pivot, curr, dedupConf), idPivot, idCurr, context); - } -// if(new TreeProcessor(dedupConf).compare(pivot, curr) != publicationCompare(pivot, curr, dedupConf)) { -// emitOutput(true, idPivot, idCurr, context); -// } - - } - } - } - } - } - - protected static boolean compareInstanceType(MapDocument a, MapDocument b, DedupConfig conf) { - Map params = new HashMap<>(); - InstanceTypeMatch instanceTypeMatch = new InstanceTypeMatch(params); - double compare = instanceTypeMatch - .compare(a.getFieldMap().get("instance"), b.getFieldMap().get("instance"), conf); - return compare >= 1.0; - } - - private boolean publicationCompare(MapDocument a, MapDocument b, DedupConfig config) { - // if the score gives 1, the publications are equivalent - Map params = new HashMap<>(); - params.put("jpath_value", "$.value"); - params.put("jpath_classid", "$.qualifier.classid"); - params.put("mode", "count"); - - double score = 0.0; - - // levenstein title - LevensteinTitle levensteinTitle = new LevensteinTitle(params); - if (levensteinTitle.compare(a.getFieldMap().get("title"), b.getFieldMap().get("title"), config) >= 0.9) { - score += 0.2; - } - - // pid - JsonListMatch jsonListMatch = new JsonListMatch(params); - if (jsonListMatch.compare(a.getFieldMap().get("pid"), b.getFieldMap().get("pid"), config) >= 1.0) { - score += 0.5; - } - - // title version - TitleVersionMatch titleVersionMatch = new TitleVersionMatch(params); - double result1 = titleVersionMatch.compare(a.getFieldMap().get("title"), b.getFieldMap().get("title"), config); - if (result1 < 0 || result1 >= 1.0) { - score += 0.1; - } - - // authors match - params.remove("mode"); - AuthorsMatch authorsMatch = new AuthorsMatch(params); - double result2 = authorsMatch.compare(a.getFieldMap().get("authors"), b.getFieldMap().get("authors"), config); - if (result2 < 0 || result2 >= 0.6) { - score += 0.2; - } - - return score >= 0.5; - } - - private void emitOutput(final boolean result, final String idPivot, final String idCurr, final Reporter context) { - - if (result) { - writeSimilarity(context, idPivot, idCurr); - context.incrementCounter(dedupConf.getWf().getEntityType(), "dedupSimilarity (x2)", 1); - } else { - context.incrementCounter(dedupConf.getWf().getEntityType(), "d < " + dedupConf.getWf().getThreshold(), 1); - } - } - - private boolean mustSkip(final String idPivot) { - return dedupConf.getWf().getSkipList().contains(getNsPrefix(idPivot)); - } - - private String getNsPrefix(final String id) { - return StringUtils.substringBetween(id, "|", "::"); - } - - private void writeSimilarity(final Reporter context, final String from, final String to) { - final String type = dedupConf.getWf().getEntityType(); - - context.emit(type, from, to); - } -} diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/DiffPatchMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/DiffPatchMatch.java index 12c96500e..c885f2aeb 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/DiffPatchMatch.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/DiffPatchMatch.java @@ -19,23 +19,6 @@ package eu.dnetlib.pace.util; * limitations under the License. */ -/* - * Diff Match and Patch - * Copyright 2018 The diff-match-patch Authors. - * https://github.com/google/diff-match-patch - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder; diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java index 2c1a1700b..a59b6248b 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java @@ -2,19 +2,20 @@ package eu.dnetlib.pace.util; import java.math.BigDecimal; -import java.util.*; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.concurrent.ConcurrentHashMap; import java.util.function.Predicate; -import java.util.stream.Collectors; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; -import com.jayway.jsonpath.Configuration; +import com.jayway.jsonpath.DocumentContext; import com.jayway.jsonpath.JsonPath; -import com.jayway.jsonpath.Option; +import com.jayway.jsonpath.spi.cache.Cache; +import com.jayway.jsonpath.spi.cache.CacheProvider; -import eu.dnetlib.pace.config.DedupConfig; import eu.dnetlib.pace.config.Type; -import eu.dnetlib.pace.model.*; import net.minidev.json.JSONArray; public class MapDocumentUtil { @@ -22,103 +23,20 @@ public class MapDocumentUtil { public static final String URL_REGEX = "^(http|https|ftp)\\://.*"; public static Predicate urlFilter = s -> s.trim().matches(URL_REGEX); - public static MapDocument asMapDocumentWithJPath(DedupConfig conf, final String json) { - MapDocument m = new MapDocument(); - m.setIdentifier(getJPathString(conf.getWf().getIdPath(), json)); - Map stringField = new HashMap<>(); - conf.getPace().getModel().forEach(fdef -> { - switch (fdef.getType()) { - case String: - case Int: - stringField - .put( - fdef.getName(), new FieldValueImpl(fdef.getType(), fdef.getName(), - truncateValue(getJPathString(fdef.getPath(), json), fdef.getLength()))); - break; - case URL: - String uv = getJPathString(fdef.getPath(), json); - if (!urlFilter.test(uv)) - uv = ""; - stringField.put(fdef.getName(), new FieldValueImpl(fdef.getType(), fdef.getName(), uv)); - break; - case List: - case JSON: - FieldListImpl fi = new FieldListImpl(fdef.getName(), fdef.getType()); - truncateList(getJPathList(fdef.getPath(), json, fdef.getType()), fdef.getSize()) - .stream() - .map(item -> new FieldValueImpl(Type.String, fdef.getName(), item)) - .forEach(fi::add); - stringField.put(fdef.getName(), fi); - break; - case DoubleArray: - stringField - .put( - fdef.getName(), - new FieldValueImpl(Type.DoubleArray, - fdef.getName(), - getJPathArray(fdef.getPath(), json))); - break; - case StringConcat: - String[] jpaths = fdef.getPath().split("\\|\\|\\|"); - stringField - .put( - fdef.getName(), - new FieldValueImpl(Type.String, - fdef.getName(), - truncateValue( - Arrays - .stream(jpaths) - .map(jpath -> getJPathString(jpath, json)) - .collect(Collectors.joining(" ")), - fdef.getLength()))); - break; + static { + CacheProvider.setCache(new Cache() { + private final ConcurrentHashMap jsonPathCache = new ConcurrentHashMap(); + + @Override + public JsonPath get(String key) { + return jsonPathCache.get(key); + } + + @Override + public void put(String key, JsonPath value) { + jsonPathCache.put(key, value); } }); - m.setFieldMap(stringField); - return m; - } - - public static List getJPathList(String path, String json, Type type) { - if (type == Type.List) - return JsonPath - .using( - Configuration - .defaultConfiguration() - .addOptions(Option.ALWAYS_RETURN_LIST, Option.SUPPRESS_EXCEPTIONS)) - .parse(json) - .read(path); - Object jresult; - List result = new ArrayList<>(); - try { - jresult = JsonPath.read(json, path); - } catch (Throwable e) { - return result; - } - if (jresult instanceof JSONArray) { - - ((JSONArray) jresult).forEach(it -> { - - try { - result.add(new ObjectMapper().writeValueAsString(it)); - } catch (JsonProcessingException e) { - - } - }); - return result; - } - - if (jresult instanceof LinkedHashMap) { - try { - result.add(new ObjectMapper().writeValueAsString(jresult)); - } catch (JsonProcessingException e) { - - } - return result; - } - if (jresult instanceof String) { - result.add((String) jresult); - } - return result; } public static String getJPathString(final String jsonPath, final String json) { @@ -174,4 +92,54 @@ public class MapDocumentUtil { return list.subList(0, size); } + public static String getJPathString(final String jsonPath, final DocumentContext json) { + try { + Object o = json.read(jsonPath); + if (o instanceof String) + return (String) o; + if (o instanceof JSONArray && ((JSONArray) o).size() > 0) + return (String) ((JSONArray) o).get(0); + return ""; + } catch (Exception e) { + return ""; + } + } + + public static List getJPathList(String path, DocumentContext json, Type type) { + // if (type == Type.List) + // return JsonPath.using(Configuration.defaultConfiguration().addOptions(Option.ALWAYS_RETURN_LIST, + // Option.SUPPRESS_EXCEPTIONS)).parse(json).read(path); + Object jresult; + List result = new ArrayList<>(); + try { + jresult = json.read(path); + } catch (Throwable e) { + return result; + } + + if (jresult instanceof JSONArray) { + ((JSONArray) jresult).forEach(it -> { + try { + result.add(new ObjectMapper().writeValueAsString(it)); + } catch (JsonProcessingException e) { + + } + }); + return result; + } + + if (jresult instanceof LinkedHashMap) { + try { + result.add(new ObjectMapper().writeValueAsString(jresult)); + } catch (JsonProcessingException e) { + + } + return result; + } + if (jresult instanceof String) { + result.add((String) jresult); + } + return result; + } + } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/SparkReporter.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/SparkReporter.java new file mode 100644 index 000000000..437fe783b --- /dev/null +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/SparkReporter.java @@ -0,0 +1,85 @@ + +package eu.dnetlib.pace.util; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.spark.SparkContext; +import org.apache.spark.util.LongAccumulator; + +import eu.dnetlib.pace.config.DedupConfig; +import scala.Serializable; +import scala.Tuple2; + +public class SparkReporter implements Serializable, Reporter { + + private final List> relations = new ArrayList<>(); + + private final Map accumulators; + + public SparkReporter(Map accumulators) { + this.accumulators = accumulators; + } + + public void incrementCounter( + String counterGroup, + String counterName, + long delta, + Map accumulators) { + + final String accumulatorName = String.format("%s::%s", counterGroup, counterName); + if (accumulators.containsKey(accumulatorName)) { + accumulators.get(accumulatorName).add(delta); + } + } + + @Override + public void incrementCounter(String counterGroup, String counterName, long delta) { + + incrementCounter(counterGroup, counterName, delta, accumulators); + } + + @Override + public void emit(String type, String from, String to) { + relations.add(new Tuple2<>(from, to)); + } + + public List> getRelations() { + return relations; + } + + public static Map constructAccumulator( + final DedupConfig dedupConf, final SparkContext context) { + + Map accumulators = new HashMap<>(); + + String acc1 = String.format("%s::%s", dedupConf.getWf().getEntityType(), "records per hash key = 1"); + accumulators.put(acc1, context.longAccumulator(acc1)); + String acc2 = String + .format( + "%s::%s", + dedupConf.getWf().getEntityType(), "missing " + dedupConf.getWf().getOrderField()); + accumulators.put(acc2, context.longAccumulator(acc2)); + String acc3 = String + .format( + "%s::%s", + dedupConf.getWf().getEntityType(), + String + .format( + "Skipped records for count(%s) >= %s", + dedupConf.getWf().getOrderField(), dedupConf.getWf().getGroupMaxSize())); + accumulators.put(acc3, context.longAccumulator(acc3)); + String acc4 = String.format("%s::%s", dedupConf.getWf().getEntityType(), "skip list"); + accumulators.put(acc4, context.longAccumulator(acc4)); + String acc5 = String.format("%s::%s", dedupConf.getWf().getEntityType(), "dedupSimilarity (x2)"); + accumulators.put(acc5, context.longAccumulator(acc5)); + String acc6 = String + .format( + "%s::%s", dedupConf.getWf().getEntityType(), "d < " + dedupConf.getWf().getThreshold()); + accumulators.put(acc6, context.longAccumulator(acc6)); + + return accumulators; + } +} diff --git a/dhp-pace-core/src/test/java/eu/dnetlib/pace/AbstractPaceTest.java b/dhp-pace-core/src/test/java/eu/dnetlib/pace/AbstractPaceTest.java index 2a37701aa..d3f502f35 100644 --- a/dhp-pace-core/src/test/java/eu/dnetlib/pace/AbstractPaceTest.java +++ b/dhp-pace-core/src/test/java/eu/dnetlib/pace/AbstractPaceTest.java @@ -3,57 +3,42 @@ package eu.dnetlib.pace; import java.io.IOException; import java.io.StringWriter; -import java.nio.charset.StandardCharsets; import java.util.List; -import java.util.stream.Collectors; import org.apache.commons.io.IOUtils; import eu.dnetlib.pace.common.AbstractPaceFunctions; -import eu.dnetlib.pace.config.Type; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.model.FieldListImpl; -import eu.dnetlib.pace.model.FieldValueImpl; public abstract class AbstractPaceTest extends AbstractPaceFunctions { protected String readFromClasspath(final String filename) { final StringWriter sw = new StringWriter(); try { - IOUtils.copy(getClass().getResourceAsStream(filename), sw, StandardCharsets.UTF_8); + IOUtils.copy(getClass().getResourceAsStream(filename), sw); return sw.toString(); } catch (final IOException e) { throw new RuntimeException("cannot load resource from classpath: " + filename); } } - protected Field title(final String s) { - return new FieldValueImpl(Type.String, "title", s); + protected String title(final String s) { + return s; } - protected Field person(final String s) { - return new FieldValueImpl(Type.JSON, "person", s); + protected String person(final String s) { + return s; } - protected Field url(final String s) { - return new FieldValueImpl(Type.URL, "url", s); + protected String url(final String s) { + return s; } - protected Field array(final double[] a) { - return new FieldValueImpl(Type.DoubleArray, "array", a); - } - - protected Field createFieldList(List strings, String fieldName) { - - List fieldValueStream = strings - .stream() - .map(s -> new FieldValueImpl(Type.String, fieldName, s)) - .collect(Collectors.toList()); - - FieldListImpl a = new FieldListImpl(); - a.addAll(fieldValueStream); - + protected double[] array(final double[] a) { return a; + } + + protected List createFieldList(List strings, String fieldName) { + return strings; } } diff --git a/dhp-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java b/dhp-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java index 9873278b9..f9a1ea9e2 100644 --- a/dhp-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java +++ b/dhp-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java @@ -2,14 +2,12 @@ package eu.dnetlib.pace.clustering; import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; -import org.junit.jupiter.api.*; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; import com.google.common.collect.Lists; import com.google.common.collect.Maps; -import com.google.common.collect.Sets; import eu.dnetlib.pace.AbstractPaceTest; import eu.dnetlib.pace.common.AbstractPaceFunctions; @@ -37,7 +35,7 @@ public class ClusteringFunctionTest extends AbstractPaceTest { final String s = "http://www.test.it/path/to/resource"; System.out.println(s); - System.out.println(urlClustering.apply(conf, Lists.newArrayList(url(s)))); + System.out.println(urlClustering.apply(conf, Lists.newArrayList(s))); } @Test @@ -51,7 +49,7 @@ public class ClusteringFunctionTest extends AbstractPaceTest { final String s = "Search for the Standard Model Higgs Boson"; System.out.println(s); - System.out.println(ngram.apply(conf, Lists.newArrayList(title(s)))); + System.out.println(ngram.apply(conf, Lists.newArrayList(s))); } @Test @@ -63,7 +61,7 @@ public class ClusteringFunctionTest extends AbstractPaceTest { final String s = "Search for the Standard Model Higgs Boson"; System.out.println(s); - System.out.println(np.apply(conf, Lists.newArrayList(title(s)))); + System.out.println(np.apply(conf, Lists.newArrayList(s))); } @Test @@ -75,15 +73,15 @@ public class ClusteringFunctionTest extends AbstractPaceTest { final String s1 = "University of Pisa"; System.out.println(s1); - System.out.println(np.apply(conf, Lists.newArrayList(title(s1)))); + System.out.println(np.apply(conf, Lists.newArrayList(s1))); final String s2 = "Pisa University"; System.out.println(s2); - System.out.println(np.apply(conf, Lists.newArrayList(title(s2)))); + System.out.println(np.apply(conf, Lists.newArrayList(s2))); final String s3 = "Parco Tecnologico Agroalimentare Umbria"; System.out.println(s3); - System.out.println(np.apply(conf, Lists.newArrayList(title(s3)))); + System.out.println(np.apply(conf, Lists.newArrayList(s3))); } @@ -97,7 +95,7 @@ public class ClusteringFunctionTest extends AbstractPaceTest { final String s = "Search for the Standard Model Higgs Boson"; System.out.println(s); - System.out.println(acro.apply(conf, Lists.newArrayList(title(s)))); + System.out.println(acro.apply(conf, Lists.newArrayList(s))); } @Test @@ -109,12 +107,12 @@ public class ClusteringFunctionTest extends AbstractPaceTest { final String s = "Search for the Standard Model Higgs Boson"; System.out.println(s); - System.out.println(sp.apply(conf, Lists.newArrayList(title(s)))); + System.out.println(sp.apply(conf, Lists.newArrayList(s))); params.put("len", 3); params.put("max", 1); - System.out.println(sp.apply(conf, Lists.newArrayList(title("Framework for general-purpose deduplication")))); + System.out.println(sp.apply(conf, Lists.newArrayList("Framework for general-purpose deduplication"))); } @Test @@ -127,7 +125,7 @@ public class ClusteringFunctionTest extends AbstractPaceTest { final String s = "Search for the Standard Model Higgs Boson"; System.out.println(s); - System.out.println(sp.apply(conf, Lists.newArrayList(title(s)))); + System.out.println(sp.apply(conf, Lists.newArrayList(s))); } @Test @@ -138,31 +136,31 @@ public class ClusteringFunctionTest extends AbstractPaceTest { String s = "Search for the Standard Model Higgs Boson"; System.out.println(s); - System.out.println(sp.apply(conf, Lists.newArrayList(title(s)))); + System.out.println(sp.apply(conf, Lists.newArrayList(s))); s = "A Physical Education Teacher Is Like...: Examining Turkish Students Perceptions of Physical Education Teachers Through Metaphor Analysis"; System.out.println(s); - System.out.println(sp.apply(conf, Lists.newArrayList(title(s)))); + System.out.println(sp.apply(conf, Lists.newArrayList(s))); s = "Structure of a Eukaryotic Nonribosomal Peptide Synthetase Adenylation Domain That Activates a Large Hydroxamate Amino Acid in Siderophore Biosynthesis"; System.out.println(s); - System.out.println(sp.apply(conf, Lists.newArrayList(title(s)))); + System.out.println(sp.apply(conf, Lists.newArrayList(s))); s = "Performance Evaluation"; System.out.println(s); - System.out.println(sp.apply(conf, Lists.newArrayList(title(s)))); + System.out.println(sp.apply(conf, Lists.newArrayList(s))); s = "JRC Open Power Plants Database (JRC-PPDB-OPEN)"; System.out.println(s); - System.out.println(sp.apply(conf, Lists.newArrayList(title(s)))); + System.out.println(sp.apply(conf, Lists.newArrayList(s))); s = "JRC Open Power Plants Database"; System.out.println(s); - System.out.println(sp.apply(conf, Lists.newArrayList(title(s)))); + System.out.println(sp.apply(conf, Lists.newArrayList(s))); s = "niivue/niivue: 0.21.1"; System.out.println(s); - System.out.println(sp.apply(conf, Lists.newArrayList(title(s)))); + System.out.println(sp.apply(conf, Lists.newArrayList(s))); } @@ -175,7 +173,7 @@ public class ClusteringFunctionTest extends AbstractPaceTest { final String s = "Search for the Standard Model Higgs Boson"; System.out.println(s); - System.out.println(sp.apply(conf, Lists.newArrayList(title(s)))); + System.out.println(sp.apply(conf, Lists.newArrayList(s))); } @Test @@ -184,35 +182,35 @@ public class ClusteringFunctionTest extends AbstractPaceTest { final ClusteringFunction cf = new KeywordsClustering(params); final String s = "Polytechnic University of Turin"; System.out.println(s); - System.out.println(cf.apply(conf, Lists.newArrayList(title(s)))); + System.out.println(cf.apply(conf, Lists.newArrayList(s))); final String s1 = "POLITECNICO DI TORINO"; System.out.println(s1); - System.out.println(cf.apply(conf, Lists.newArrayList(title(s1)))); + System.out.println(cf.apply(conf, Lists.newArrayList(s1))); final String s2 = "Universita farmaceutica culturale di milano bergamo"; System.out.println("s2 = " + s2); - System.out.println(cf.apply(conf, Lists.newArrayList(title(s2)))); + System.out.println(cf.apply(conf, Lists.newArrayList(s2))); final String s3 = "universita universita milano milano"; System.out.println("s3 = " + s3); - System.out.println(cf.apply(conf, Lists.newArrayList(title(s3)))); + System.out.println(cf.apply(conf, Lists.newArrayList(s3))); final String s4 = "Politechniki Warszawskiej (Warsaw University of Technology)"; System.out.println("s4 = " + s4); - System.out.println(cf.apply(conf, Lists.newArrayList(title(s4)))); + System.out.println(cf.apply(conf, Lists.newArrayList(s4))); final String s5 = "İstanbul Ticarət Universiteti"; System.out.println("s5 = " + s5); - System.out.println(cf.apply(conf, Lists.newArrayList(title(s5)))); + System.out.println(cf.apply(conf, Lists.newArrayList(s5))); final String s6 = "National and Kapodistrian University of Athens"; System.out.println("s6 = " + s6); - System.out.println(cf.apply(conf, Lists.newArrayList(title(s6)))); + System.out.println(cf.apply(conf, Lists.newArrayList(s6))); final String s7 = "Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών"; System.out.println("s7 = " + s7); - System.out.println(cf.apply(conf, Lists.newArrayList(title(s7)))); + System.out.println(cf.apply(conf, Lists.newArrayList(s7))); } @@ -222,11 +220,11 @@ public class ClusteringFunctionTest extends AbstractPaceTest { final ClusteringFunction cf = new PersonClustering(params); final String s = "Abd-Alla, Abo-el-nour N."; System.out.println("s = " + s); - System.out.println(cf.apply(conf, Lists.newArrayList(title(s)))); + System.out.println(cf.apply(conf, Lists.newArrayList(s))); final String s1 = "Manghi, Paolo"; System.out.println("s1 = " + s1); - System.out.println(cf.apply(conf, Lists.newArrayList(title(s1)))); + System.out.println(cf.apply(conf, Lists.newArrayList(s1))); } @@ -236,11 +234,11 @@ public class ClusteringFunctionTest extends AbstractPaceTest { final ClusteringFunction cf = new PersonHash(params); final String s = "Manghi, Paolo"; System.out.println("s = " + s); - System.out.println(cf.apply(conf, Lists.newArrayList(title(s)))); + System.out.println(cf.apply(conf, Lists.newArrayList(s))); final String s1 = "Manghi, P."; System.out.println("s = " + s1); - System.out.println(cf.apply(conf, Lists.newArrayList(title(s1)))); + System.out.println(cf.apply(conf, Lists.newArrayList(s1))); } @@ -250,7 +248,7 @@ public class ClusteringFunctionTest extends AbstractPaceTest { final ClusteringFunction cf = new LastNameFirstInitial(params); final String s = "LI Yonghong"; System.out.println("s = " + s); - System.out.println(cf.apply(conf, Lists.newArrayList(title(s)))); + System.out.println(cf.apply(conf, Lists.newArrayList(s))); } } diff --git a/dhp-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java b/dhp-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java index 5c846c058..b37e16cf5 100644 --- a/dhp-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java +++ b/dhp-pace-core/src/test/java/eu/dnetlib/pace/comparators/ComparatorTest.java @@ -3,19 +3,16 @@ package eu.dnetlib.pace.comparators; import static org.junit.jupiter.api.Assertions.assertEquals; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; +import java.util.*; -import org.junit.jupiter.api.*; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; import eu.dnetlib.pace.AbstractPaceTest; import eu.dnetlib.pace.clustering.NGramUtils; import eu.dnetlib.pace.config.DedupConfig; -import eu.dnetlib.pace.config.Type; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.model.FieldValueImpl; import eu.dnetlib.pace.tree.*; @TestInstance(TestInstance.Lifecycle.PER_CLASS) @@ -99,8 +96,8 @@ public class ComparatorTest extends AbstractPaceTest { @Test public void listContainsMatchTest() { - Field a = createFieldList(Arrays.asList("Article", "Publication", "ORP"), "instanceType"); - Field b = createFieldList(Arrays.asList("Publication", "Article", "ORP"), "instanceType"); + List a = createFieldList(Arrays.asList("Article", "Publication", "ORP"), "instanceType"); + List b = createFieldList(Arrays.asList("Publication", "Article", "ORP"), "instanceType"); params.put("string", "Article"); params.put("bool", "XOR"); @@ -214,31 +211,32 @@ public class ComparatorTest extends AbstractPaceTest { final InstanceTypeMatch instanceTypeMatch = new InstanceTypeMatch(params); - Field a = createFieldList(Arrays.asList("Article", "Article", "Article"), "instanceType"); - Field b = createFieldList(Arrays.asList("Article", "Article", "Article"), "instanceType"); + List a = createFieldList(Arrays.asList("Article", "Article", "Article"), "instanceType"); + List b = createFieldList(Arrays.asList("Article", "Article", "Article"), "instanceType"); double result = instanceTypeMatch.compare(a, b, conf); assertEquals(1.0, result); - Field c = createFieldList( + List c = createFieldList( Arrays.asList("Conference object", "Conference object", "Conference object"), "instanceType"); result = instanceTypeMatch.compare(c, b, conf); assertEquals(1.0, result); - Field d = createFieldList(Arrays.asList("Master thesis", "Master thesis", "Master thesis"), "instanceType"); - Field e = createFieldList( + List d = createFieldList( + Arrays.asList("Master thesis", "Master thesis", "Master thesis"), "instanceType"); + List e = createFieldList( Arrays.asList("Bachelor thesis", "Bachelor thesis", "Bachelor thesis"), "instanceType"); result = instanceTypeMatch.compare(d, e, conf); assertEquals(1.0, result); - Field g = createFieldList(Arrays.asList("Software Paper", "Software Paper"), "instanceType"); + List g = createFieldList(Arrays.asList("Software Paper", "Software Paper"), "instanceType"); result = instanceTypeMatch.compare(e, g, conf); assertEquals(0.0, result); - Field h = createFieldList(Arrays.asList("Other literature type", "Article"), "instanceType"); + List h = createFieldList(Arrays.asList("Other literature type", "Article"), "instanceType"); result = instanceTypeMatch.compare(a, h, conf); assertEquals(1.0, result); @@ -249,15 +247,15 @@ public class ComparatorTest extends AbstractPaceTest { AuthorsMatch authorsMatch = new AuthorsMatch(params); - Field a = createFieldList( + List a = createFieldList( Arrays.asList("La Bruzzo, Sandro", "Atzori, Claudio", "De Bonis, Michele"), "authors"); - Field b = createFieldList(Arrays.asList("Atzori, C.", "La Bruzzo, S.", "De Bonis, M."), "authors"); + List b = createFieldList(Arrays.asList("Atzori, C.", "La Bruzzo, S.", "De Bonis, M."), "authors"); double result = authorsMatch.compare(a, b, conf); assertEquals(1.0, result); - Field c = createFieldList(Arrays.asList("Manghi, Paolo"), "authors"); - Field d = createFieldList(Arrays.asList("Manghi, Pasquale"), "authors"); + List c = createFieldList(Arrays.asList("Manghi, Paolo"), "authors"); + List d = createFieldList(Arrays.asList("Manghi, Pasquale"), "authors"); result = authorsMatch.compare(c, d, conf); assertEquals(0.0, result); @@ -268,12 +266,12 @@ public class ComparatorTest extends AbstractPaceTest { assertEquals(1.0, result); - Field e = createFieldList(Arrays.asList("Manghi, Paolo", "Atzori, Claudio"), "authors"); + List e = createFieldList(Arrays.asList("Manghi, Paolo", "Atzori, Claudio"), "authors"); result = authorsMatch.compare(a, e, conf); assertEquals(0.25, result); - Field f = createFieldList(new ArrayList<>(), "authors"); + List f = createFieldList(new ArrayList<>(), "authors"); result = authorsMatch.compare(f, f, conf); System.out.println("result = " + result); @@ -284,12 +282,12 @@ public class ComparatorTest extends AbstractPaceTest { JsonListMatch jsonListMatch = new JsonListMatch(params); - Field a = createFieldList( + List a = createFieldList( Arrays .asList( "{\"datainfo\":{\"deletedbyinference\":false,\"inferenceprovenance\":null,\"inferred\":false,\"invisible\":false,\"provenanceaction\":{\"classid\":\"sysimport:actionset\",\"classname\":\"Harvested\",\"schemeid\":\"dnet:provenanceActions\",\"schemename\":\"dnet:provenanceActions\"},\"trust\":\"0.9\"},\"qualifier\":{\"classid\":\"doi\",\"classname\":\"Digital Object Identifier\",\"schemeid\":\"dnet:pid_types\",\"schemename\":\"dnet:pid_types\"},\"value\":\"10.1111/pbi.12655\"}"), "authors"); - Field b = createFieldList( + List b = createFieldList( Arrays .asList( "{\"datainfo\":{\"deletedbyinference\":false,\"inferenceprovenance\":\"\",\"inferred\":false,\"invisible\":false,\"provenanceaction\":{\"classid\":\"sysimport:crosswalk:repository\",\"classname\":\"Harvested\",\"schemeid\":\"dnet:provenanceActions\",\"schemename\":\"dnet:provenanceActions\"},\"trust\":\"0.9\"},\"qualifier\":{\"classid\":\"pmc\",\"classname\":\"PubMed Central ID\",\"schemeid\":\"dnet:pid_types\",\"schemename\":\"dnet:pid_types\"},\"value\":\"PMC5399005\"}", @@ -313,8 +311,8 @@ public class ComparatorTest extends AbstractPaceTest { public void domainExactMatch() { DomainExactMatch domainExactMatch = new DomainExactMatch(params); - Field a = url("http://www.flowrepository.org"); - Field b = url("http://flowrepository.org/"); + String a = url("http://www.flowrepository.org"); + String b = url("http://flowrepository.org/"); double compare = domainExactMatch.compare(a, b, conf); System.out.println("compare = " + compare); @@ -326,12 +324,12 @@ public class ComparatorTest extends AbstractPaceTest { CosineSimilarity cosineSimilarity = new CosineSimilarity(params); - Field a = new FieldValueImpl(Type.DoubleArray, "array", new double[] { + double[] a = new double[] { 1, 2, 3 - }); - Field b = new FieldValueImpl(Type.DoubleArray, "array", new double[] { + }; + double[] b = new double[] { 1, 2, 3 - }); + }; double compare = cosineSimilarity.compare(a, b, conf); diff --git a/dhp-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java b/dhp-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java index 02b59354a..b46085bb4 100644 --- a/dhp-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java +++ b/dhp-pace-core/src/test/java/eu/dnetlib/pace/config/ConfigTest.java @@ -3,26 +3,14 @@ package eu.dnetlib.pace.config; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertTrue; -import java.util.*; -import java.util.stream.Collectors; +import java.util.HashMap; +import java.util.Map; -import org.junit.jupiter.api.*; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; import eu.dnetlib.pace.AbstractPaceTest; -import eu.dnetlib.pace.clustering.BlacklistAwareClusteringCombiner; -import eu.dnetlib.pace.clustering.ClusteringClass; -import eu.dnetlib.pace.clustering.ClusteringCombiner; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.model.FieldList; -import eu.dnetlib.pace.model.FieldValue; -import eu.dnetlib.pace.model.MapDocument; -import eu.dnetlib.pace.tree.JsonListMatch; -import eu.dnetlib.pace.tree.support.AggType; -import eu.dnetlib.pace.tree.support.FieldConf; -import eu.dnetlib.pace.tree.support.TreeNodeDef; -import eu.dnetlib.pace.tree.support.TreeNodeStats; import eu.dnetlib.pace.util.MapDocumentUtil; public class ConfigTest extends AbstractPaceTest { @@ -82,41 +70,6 @@ public class ConfigTest extends AbstractPaceTest { assertEquals(0, load.getPace().translationMap().keySet().size()); } - @Test - public void asMapDocumentTest1() { - - DedupConfig dedupConf = DedupConfig.load(readFromClasspath("publication.current.conf.json")); - - final String json = readFromClasspath("publication.json"); - - final MapDocument mapDocument = MapDocumentUtil.asMapDocumentWithJPath(dedupConf, json); - -// System.out.println("mapDocument = " + mapDocument.getFieldMap()); - -// JsonListMatch jsonListMatch = new JsonListMatch(params); -// -// jsonListMatch.compare(mapDocument.getFieldMap().get("pid"), mapDocument.getFieldMap().get("pid"), null); - - System.out.println("mapDocument = " + mapDocument.getFieldMap().get("title").stringValue()); - - } - - @Test - public void authorAsMapDocument() { - - DedupConfig dedupConf = DedupConfig.load(readFromClasspath("author.fdup.conf.json")); - - final String json = readFromClasspath("author.json"); - - final MapDocument mapDocument = MapDocumentUtil.asMapDocumentWithJPath(dedupConf, json); - - System.out - .println( - "mapDocument = " - + Arrays.toString(((FieldValue) mapDocument.getFieldMap().get("topics")).doubleArrayValue())); - - } - @Test public void testJPath() { final String json = readFromClasspath("organization.json"); @@ -126,53 +79,4 @@ public class ConfigTest extends AbstractPaceTest { System.out.println("result = " + MapDocumentUtil.getJPathString(jpath, json)); } - @Test - public void clusteringCombinerTest() { - - DedupConfig dedupConf = DedupConfig.load(readFromClasspath("publication.current.conf.json")); - - final String json = readFromClasspath("publication.json"); - - final MapDocument mapDocument = MapDocumentUtil.asMapDocumentWithJPath(dedupConf, json); - - String[] combine = ClusteringCombiner.combine(mapDocument, dedupConf).toArray(new String[3]); - - assertEquals("test", combine[0].split(":")[1]); - assertEquals("title", combine[1].split(":")[1]); - assertEquals("doi", combine[2].split(":")[1]); - } - - @Test - public void filterAndCombineTest() { - - DedupConfig dedupConf = DedupConfig.load(readFromClasspath("pub.prod.conf.json")); - - final String json = readFromClasspath("publication.example.json"); - - final MapDocument mapDocument = MapDocumentUtil.asMapDocumentWithJPath(dedupConf, json); - - Collection strings = BlacklistAwareClusteringCombiner.filterAndCombine(mapDocument, dedupConf); - - for (String s : strings) { - System.out.println("s = " + s); - } - - } - - @Test - public void crossCompareTest() { - - DedupConfig dedupConf = DedupConfig.load(readFromClasspath("organization.cross.compare.conf.json")); - - TreeNodeDef treeNode = dedupConf.decisionTree().get("start"); - - final String json = readFromClasspath("organization.json"); - - final MapDocument doc = MapDocumentUtil.asMapDocumentWithJPath(dedupConf, json); - - TreeNodeStats nodeStats = treeNode.evaluate(doc, doc, dedupConf); - - assertTrue(nodeStats.getFinalScore(AggType.MAX) > 0.7); - - } } diff --git a/dhp-pace-core/src/test/java/eu/dnetlib/pace/util/UtilTest.java b/dhp-pace-core/src/test/java/eu/dnetlib/pace/util/UtilTest.java index 41b24d8be..6056c342d 100644 --- a/dhp-pace-core/src/test/java/eu/dnetlib/pace/util/UtilTest.java +++ b/dhp-pace-core/src/test/java/eu/dnetlib/pace/util/UtilTest.java @@ -6,9 +6,11 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.HashMap; import java.util.Map; -import org.junit.jupiter.api.*; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; import eu.dnetlib.pace.model.Person; +import jdk.nashorn.internal.ir.annotations.Ignore; public class UtilTest { @@ -20,6 +22,7 @@ public class UtilTest { } @Test + @Ignore public void paceResolverTest() { PaceResolver paceResolver = new PaceResolver(); paceResolver.getComparator("keywordMatch", params); diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/project/utils/EXCELParser.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/project/utils/EXCELParser.java index 139f7e74a..e507f8c56 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/project/utils/EXCELParser.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/project/utils/EXCELParser.java @@ -7,8 +7,8 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; -import org.apache.commons.lang.StringUtils; -import org.apache.commons.lang.reflect.FieldUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.reflect.FieldUtils; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.openxml4j.opc.OPCPackage; import org.apache.poi.ss.usermodel.Cell; diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/project/utils/ReadProjects.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/project/utils/ReadProjects.java index 904837e3d..f652b3dba 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/project/utils/ReadProjects.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/project/utils/ReadProjects.java @@ -1,12 +1,13 @@ package eu.dnetlib.dhp.actionmanager.project.utils; -import java.io.*; +import java.io.BufferedWriter; +import java.io.IOException; +import java.io.OutputStreamWriter; +import java.io.Serializable; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; -import java.util.zip.ZipEntry; -import java.util.zip.ZipInputStream; import org.apache.commons.io.IOUtils; import org.apache.hadoop.conf.Configuration; @@ -66,7 +67,7 @@ public class ReadProjects implements Serializable { FSDataInputStream inputStream = fs.open(hdfsreadpath); - ArrayList projects = OBJECT_MAPPER + List projects = OBJECT_MAPPER .readValue( IOUtils.toString(inputStream, "UTF-8"), new TypeReference>() { diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/project/utils/ReadTopics.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/project/utils/ReadTopics.java index e0e34be31..3b0603c6b 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/project/utils/ReadTopics.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/project/utils/ReadTopics.java @@ -6,7 +6,6 @@ import java.io.IOException; import java.io.OutputStreamWriter; import java.io.Serializable; import java.nio.charset.StandardCharsets; -import java.util.ArrayList; import java.util.List; import org.apache.commons.io.IOUtils; @@ -23,7 +22,6 @@ import com.fasterxml.jackson.databind.ObjectMapper; import eu.dnetlib.dhp.actionmanager.project.PrepareProjects; import eu.dnetlib.dhp.actionmanager.project.utils.model.JsonTopic; -import eu.dnetlib.dhp.actionmanager.project.utils.model.Project; import eu.dnetlib.dhp.application.ArgumentApplicationParser; /** @@ -68,7 +66,7 @@ public class ReadTopics implements Serializable { FSDataInputStream inputStream = fs.open(hdfsreadpath); - ArrayList topics = OBJECT_MAPPER + List topics = OBJECT_MAPPER .readValue( IOUtils.toString(inputStream, "UTF-8"), new TypeReference>() { diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/collection/plugin/oai/OaiIterator.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/collection/plugin/oai/OaiIterator.java index 28b2572fb..8f4a9e393 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/collection/plugin/oai/OaiIterator.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/collection/plugin/oai/OaiIterator.java @@ -9,7 +9,7 @@ import java.util.Iterator; import java.util.Queue; import java.util.concurrent.PriorityBlockingQueue; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.DocumentHelper; diff --git a/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/CheckDuplictedIdsJob.java b/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/CheckDuplictedIdsJob.java index f0aa6491f..bb3a17ac4 100644 --- a/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/CheckDuplictedIdsJob.java +++ b/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/CheckDuplictedIdsJob.java @@ -2,7 +2,7 @@ package eu.dnetlib.dhp.broker.oa; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.spark.SparkConf; import org.apache.spark.api.java.function.FilterFunction; import org.apache.spark.api.java.function.MapFunction; diff --git a/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/util/TrustUtils.java b/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/util/TrustUtils.java index a49801f32..a6fa2b1a1 100644 --- a/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/util/TrustUtils.java +++ b/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/util/TrustUtils.java @@ -3,6 +3,7 @@ package eu.dnetlib.dhp.broker.oa.util; import java.io.IOException; +import org.apache.spark.sql.Row; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -10,9 +11,8 @@ import com.fasterxml.jackson.databind.ObjectMapper; import eu.dnetlib.broker.objects.OaBrokerMainEntity; import eu.dnetlib.pace.config.DedupConfig; -import eu.dnetlib.pace.model.MapDocument; +import eu.dnetlib.pace.model.SparkDeduper; import eu.dnetlib.pace.tree.support.TreeProcessor; -import eu.dnetlib.pace.util.MapDocumentUtil; public class TrustUtils { @@ -20,13 +20,18 @@ public class TrustUtils { private static DedupConfig dedupConfig; + private static SparkDeduper deduper; + + private static final ObjectMapper mapper; + static { - final ObjectMapper mapper = new ObjectMapper(); + mapper = new ObjectMapper(); try { dedupConfig = mapper .readValue( DedupConfig.class.getResourceAsStream("/eu/dnetlib/dhp/broker/oa/dedupConfig/dedupConfig.json"), DedupConfig.class); + deduper = new SparkDeduper(dedupConfig); } catch (final IOException e) { log.error("Error loading dedupConfig, e"); } @@ -42,11 +47,8 @@ public class TrustUtils { } try { - final ObjectMapper objectMapper = new ObjectMapper(); - final MapDocument doc1 = MapDocumentUtil - .asMapDocumentWithJPath(dedupConfig, objectMapper.writeValueAsString(r1)); - final MapDocument doc2 = MapDocumentUtil - .asMapDocumentWithJPath(dedupConfig, objectMapper.writeValueAsString(r2)); + final Row doc1 = deduper.model().rowFromJson(mapper.writeValueAsString(r1)); + final Row doc2 = deduper.model().rowFromJson(mapper.writeValueAsString(r2)); final double score = new TreeProcessor(dedupConfig).computeScore(doc1, doc2); diff --git a/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/util/aggregators/stats/StatsAggregator.java b/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/util/aggregators/stats/StatsAggregator.java index 240e2d211..0f8bad2ce 100644 --- a/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/util/aggregators/stats/StatsAggregator.java +++ b/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/util/aggregators/stats/StatsAggregator.java @@ -1,7 +1,7 @@ package eu.dnetlib.dhp.broker.oa.util.aggregators.stats; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.spark.sql.Encoder; import org.apache.spark.sql.Encoders; import org.apache.spark.sql.expressions.Aggregator; diff --git a/dhp-workflows/dhp-broker-events/src/test/java/eu/dnetlib/dhp/broker/oa/samples/SimpleVariableJobTest.java b/dhp-workflows/dhp-broker-events/src/test/java/eu/dnetlib/dhp/broker/oa/samples/SimpleVariableJobTest.java index a6d1c89d3..73d1731cf 100644 --- a/dhp-workflows/dhp-broker-events/src/test/java/eu/dnetlib/dhp/broker/oa/samples/SimpleVariableJobTest.java +++ b/dhp-workflows/dhp-broker-events/src/test/java/eu/dnetlib/dhp/broker/oa/samples/SimpleVariableJobTest.java @@ -12,6 +12,7 @@ import java.util.stream.Collectors; import org.apache.commons.io.FileUtils; import org.apache.spark.SparkConf; +import org.apache.spark.api.java.function.FilterFunction; import org.apache.spark.api.java.function.MapFunction; import org.apache.spark.sql.Encoders; import org.apache.spark.sql.SparkSession; @@ -82,8 +83,8 @@ public class SimpleVariableJobTest { final long n = spark .createDataset(inputList, Encoders.STRING()) - .filter(s -> filter(map.get(s))) - .map((MapFunction) s -> s.toLowerCase(), Encoders.STRING()) + .filter((FilterFunction) s -> filter(map.get(s))) + .map((MapFunction) String::toLowerCase, Encoders.STRING()) .count(); System.out.println(n); @@ -96,8 +97,8 @@ public class SimpleVariableJobTest { final long n = spark .createDataset(inputList, Encoders.STRING()) - .filter(s -> filter(staticMap.get(s))) - .map((MapFunction) s -> s.toLowerCase(), Encoders.STRING()) + .filter((FilterFunction) s -> filter(staticMap.get(s))) + .map((MapFunction) String::toLowerCase, Encoders.STRING()) .count(); System.out.println(n); diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/AbstractSparkAction.java b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/AbstractSparkAction.java index 136413376..68af3d699 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/AbstractSparkAction.java +++ b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/AbstractSparkAction.java @@ -88,9 +88,7 @@ abstract class AbstractSparkAction implements Serializable { "for $x in /RESOURCE_PROFILE[.//RESOURCE_IDENTIFIER/@value = '%s'] return $x//DEDUPLICATION/text()", configProfileId)); - DedupConfig dedupConfig = new ObjectMapper().readValue(conf, DedupConfig.class); - dedupConfig.getPace().initModel(); - dedupConfig.getPace().initTranslationMap(); + DedupConfig dedupConfig = DedupConfig.load(conf); dedupConfig.getWf().setConfigurationId(actionSetId); return dedupConfig; diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/DatePicker.java b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/DatePicker.java index 9d767c4d2..8ed3c68b2 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/DatePicker.java +++ b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/DatePicker.java @@ -5,14 +5,14 @@ import static java.util.Collections.reverseOrder; import static java.util.Map.Entry.comparingByValue; import static java.util.stream.Collectors.toMap; -import static org.apache.commons.lang.StringUtils.endsWith; -import static org.apache.commons.lang.StringUtils.substringBefore; +import static org.apache.commons.lang3.StringUtils.endsWith; +import static org.apache.commons.lang3.StringUtils.substringBefore; import java.time.Year; import java.util.*; import java.util.stream.Collectors; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import eu.dnetlib.dhp.schema.oaf.Field; diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/DedupUtility.java b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/DedupUtility.java index aeb485768..a7a27f5c9 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/DedupUtility.java +++ b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/DedupUtility.java @@ -2,27 +2,22 @@ package eu.dnetlib.dhp.oa.dedup; import java.io.StringReader; -import java.util.*; +import java.util.ArrayList; +import java.util.List; -import org.apache.spark.SparkContext; -import org.apache.spark.util.LongAccumulator; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; import org.xml.sax.SAXException; -import com.google.common.collect.Sets; - import eu.dnetlib.dhp.schema.common.ModelConstants; import eu.dnetlib.dhp.schema.oaf.DataInfo; import eu.dnetlib.dhp.schema.oaf.Relation; import eu.dnetlib.dhp.utils.ISLookupClientFactory; import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpException; import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpService; -import eu.dnetlib.pace.clustering.BlacklistAwareClusteringCombiner; import eu.dnetlib.pace.config.DedupConfig; -import eu.dnetlib.pace.model.MapDocument; public class DedupUtility { @@ -32,43 +27,6 @@ public class DedupUtility { private DedupUtility() { } - public static Map constructAccumulator( - final DedupConfig dedupConf, final SparkContext context) { - - Map accumulators = new HashMap<>(); - - String acc1 = String.format("%s::%s", dedupConf.getWf().getEntityType(), "records per hash key = 1"); - accumulators.put(acc1, context.longAccumulator(acc1)); - String acc2 = String - .format( - "%s::%s", - dedupConf.getWf().getEntityType(), "missing " + dedupConf.getWf().getOrderField()); - accumulators.put(acc2, context.longAccumulator(acc2)); - String acc3 = String - .format( - "%s::%s", - dedupConf.getWf().getEntityType(), - String - .format( - "Skipped records for count(%s) >= %s", - dedupConf.getWf().getOrderField(), dedupConf.getWf().getGroupMaxSize())); - accumulators.put(acc3, context.longAccumulator(acc3)); - String acc4 = String.format("%s::%s", dedupConf.getWf().getEntityType(), "skip list"); - accumulators.put(acc4, context.longAccumulator(acc4)); - String acc5 = String.format("%s::%s", dedupConf.getWf().getEntityType(), "dedupSimilarity (x2)"); - accumulators.put(acc5, context.longAccumulator(acc5)); - String acc6 = String - .format( - "%s::%s", dedupConf.getWf().getEntityType(), "d < " + dedupConf.getWf().getThreshold()); - accumulators.put(acc6, context.longAccumulator(acc6)); - - return accumulators; - } - - static Set getGroupingKeys(DedupConfig conf, MapDocument doc) { - return Sets.newHashSet(BlacklistAwareClusteringCombiner.filterAndCombine(doc, conf)); - } - public static String createDedupRecordPath( final String basePath, final String actionSetId, final String entityType) { return String.format("%s/%s/%s_deduprecord", basePath, actionSetId, entityType); diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/Deduper.java b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/Deduper.java deleted file mode 100644 index 68201677e..000000000 --- a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/Deduper.java +++ /dev/null @@ -1,58 +0,0 @@ - -package eu.dnetlib.dhp.oa.dedup; - -import java.util.Map; -import java.util.stream.Collectors; - -import org.apache.spark.api.java.JavaPairRDD; -import org.apache.spark.api.java.JavaSparkContext; -import org.apache.spark.util.LongAccumulator; - -import eu.dnetlib.dhp.oa.dedup.model.Block; -import eu.dnetlib.pace.config.DedupConfig; -import eu.dnetlib.pace.model.MapDocument; -import eu.dnetlib.pace.util.BlockProcessor; -import scala.Serializable; -import scala.Tuple2; - -public class Deduper implements Serializable { - - public static JavaPairRDD computeRelations( - JavaSparkContext context, JavaPairRDD blocks, DedupConfig config) { - Map accumulators = DedupUtility.constructAccumulator(config, context.sc()); - - return blocks - .flatMapToPair( - it -> { - final SparkReporter reporter = new SparkReporter(accumulators); - new BlockProcessor(config) - .processSortedBlock(it._1(), it._2().getDocuments(), reporter); - return reporter.getRelations().iterator(); - }) - .mapToPair(it -> new Tuple2<>(it._1() + it._2(), it)) - .reduceByKey((a, b) -> a) - .mapToPair(Tuple2::_2); - } - - public static JavaPairRDD createSortedBlocks( - JavaPairRDD mapDocs, DedupConfig config) { - final String of = config.getWf().getOrderField(); - final int maxQueueSize = config.getWf().getQueueMaxSize(); - - return mapDocs - // the reduce is just to be sure that we haven't document with same id - .reduceByKey((a, b) -> a) - .map(Tuple2::_2) - // Clustering: from to List - .flatMap( - a -> DedupUtility - .getGroupingKeys(config, a) - .stream() - .map(it -> Block.from(it, a)) - .collect(Collectors.toList()) - .iterator()) - .mapToPair(block -> new Tuple2<>(block.getKey(), block)) - .reduceByKey((b1, b2) -> Block.from(b1, b2, of, maxQueueSize)) - .filter(b -> b._2().getDocuments().size() > 1); - } -} diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkBlockStats.java b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkBlockStats.java index c9c9dd8fe..3e5215d42 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkBlockStats.java +++ b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkBlockStats.java @@ -2,32 +2,26 @@ package eu.dnetlib.dhp.oa.dedup; import java.io.IOException; +import java.util.Collection; import java.util.Optional; import org.apache.commons.io.IOUtils; import org.apache.spark.SparkConf; -import org.apache.spark.api.java.JavaPairRDD; -import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.JavaSparkContext; -import org.apache.spark.api.java.function.PairFunction; -import org.apache.spark.sql.Encoders; -import org.apache.spark.sql.SaveMode; -import org.apache.spark.sql.SparkSession; +import org.apache.spark.api.java.function.MapFunction; +import org.apache.spark.sql.*; import org.dom4j.DocumentException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.xml.sax.SAXException; import eu.dnetlib.dhp.application.ArgumentApplicationParser; -import eu.dnetlib.dhp.oa.dedup.model.Block; import eu.dnetlib.dhp.oa.dedup.model.BlockStats; import eu.dnetlib.dhp.utils.ISLookupClientFactory; import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpException; import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpService; import eu.dnetlib.pace.config.DedupConfig; -import eu.dnetlib.pace.model.MapDocument; -import eu.dnetlib.pace.util.MapDocumentUtil; -import scala.Tuple2; +import eu.dnetlib.pace.model.SparkDeduper; public class SparkBlockStats extends AbstractSparkAction { @@ -91,36 +85,35 @@ public class SparkBlockStats extends AbstractSparkAction { JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); - JavaPairRDD mapDocuments = sc + SparkDeduper deduper = new SparkDeduper(dedupConf); + + Dataset simRels = spark + .read() .textFile(DedupUtility.createEntityPath(graphBasePath, subEntity)) - .repartition(numPartitions) - .mapToPair( - (PairFunction) s -> { - MapDocument d = MapDocumentUtil.asMapDocumentWithJPath(dedupConf, s); - return new Tuple2<>(d.getIdentifier(), d); - }); + .transform(deduper.model().parseJsonDataset()) + .transform(deduper.filterAndCleanup()) + .transform(deduper.generateClustersWithCollect()) + .filter(functions.size(new Column("block")).geq(1)); - // create blocks for deduplication - JavaRDD blockStats = Deduper - .createSortedBlocks(mapDocuments, dedupConf) - .repartition(numPartitions) - .map(b -> asBlockStats(dedupConf, b)); + simRels.map((MapFunction) row -> { + Collection mapDocuments = row.getList(row.fieldIndex("block")); - // save the blockstats in the workingdir - spark - .createDataset(blockStats.rdd(), Encoders.bean(BlockStats.class)) + /* + * List mapDocuments = documents .stream() .sorted( new + * RowDataOrderingComparator(deduper.model().orderingFieldPosition(), + * deduper.model().identityFieldPosition())) .limit(dedupConf.getWf().getQueueMaxSize()) + * .collect(Collectors.toList()); + */ + + return new BlockStats( + row.getString(row.fieldIndex("key")), + (long) mapDocuments.size(), + computeComparisons( + (long) mapDocuments.size(), (long) dedupConf.getWf().getSlidingWindowSize())); + }, Encoders.bean(BlockStats.class)) .write() .mode(SaveMode.Overwrite) .save(outputPath); } } - - private BlockStats asBlockStats(DedupConfig dedupConf, Tuple2 b) { - return new BlockStats( - b._1(), - (long) b._2().getDocuments().size(), - computeComparisons( - (long) b._2().getDocuments().size(), (long) dedupConf.getWf().getSlidingWindowSize())); - } - } diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkCreateSimRels.java b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkCreateSimRels.java index ca6398e8a..5b3cc3111 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkCreateSimRels.java +++ b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkCreateSimRels.java @@ -7,13 +7,9 @@ import java.util.Optional; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.apache.spark.SparkConf; -import org.apache.spark.api.java.JavaPairRDD; import org.apache.spark.api.java.JavaSparkContext; -import org.apache.spark.api.java.function.PairFunction; -import org.apache.spark.sql.Dataset; -import org.apache.spark.sql.Encoders; -import org.apache.spark.sql.SaveMode; -import org.apache.spark.sql.SparkSession; +import org.apache.spark.api.java.function.MapFunction; +import org.apache.spark.sql.*; import org.dom4j.DocumentException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -22,15 +18,12 @@ import org.xml.sax.SAXException; import eu.dnetlib.dhp.application.ArgumentApplicationParser; import eu.dnetlib.dhp.application.dedup.log.DedupLogModel; import eu.dnetlib.dhp.application.dedup.log.DedupLogWriter; -import eu.dnetlib.dhp.oa.dedup.model.Block; import eu.dnetlib.dhp.schema.oaf.Relation; import eu.dnetlib.dhp.utils.ISLookupClientFactory; import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpException; import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpService; import eu.dnetlib.pace.config.DedupConfig; -import eu.dnetlib.pace.model.MapDocument; -import eu.dnetlib.pace.util.MapDocumentUtil; -import scala.Tuple2; +import eu.dnetlib.pace.model.SparkDeduper; public class SparkCreateSimRels extends AbstractSparkAction { @@ -38,6 +31,7 @@ public class SparkCreateSimRels extends AbstractSparkAction { public SparkCreateSimRels(ArgumentApplicationParser parser, SparkSession spark) { super(parser, spark); + spark.sparkContext().setLogLevel("WARN"); } public static void main(String[] args) throws Exception { @@ -79,7 +73,6 @@ public class SparkCreateSimRels extends AbstractSparkAction { // for each dedup configuration for (DedupConfig dedupConf : getConfigurations(isLookUpService, actionSetId)) { - final long start = System.currentTimeMillis(); final String entity = dedupConf.getWf().getEntityType(); @@ -91,27 +84,17 @@ public class SparkCreateSimRels extends AbstractSparkAction { JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); - JavaPairRDD mapDocuments = sc + SparkDeduper deduper = new SparkDeduper(dedupConf); + + Dataset simRels = spark + .read() .textFile(DedupUtility.createEntityPath(graphBasePath, subEntity)) - .repartition(numPartitions) - .mapToPair( - (PairFunction) s -> { - MapDocument d = MapDocumentUtil.asMapDocumentWithJPath(dedupConf, s); - return new Tuple2<>(d.getIdentifier(), d); - }); - - // create blocks for deduplication - JavaPairRDD blocks = Deduper - .createSortedBlocks(mapDocuments, dedupConf) - .repartition(numPartitions); - - Dataset simRels = spark - .createDataset( - Deduper - .computeRelations(sc, blocks, dedupConf) - .map(t -> DedupUtility.createSimRel(t._1(), t._2(), entity)) - .repartition(numPartitions) - .rdd(), + .transform(deduper.model().parseJsonDataset()) + .transform(deduper.dedup()) + .distinct() + .map( + (MapFunction) t -> DedupUtility + .createSimRel(t.getStruct(0).getString(0), t.getStruct(0).getString(1), entity), Encoders.bean(Relation.class)); saveParquet(simRels, outputPath, SaveMode.Overwrite); diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkReporter.java b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkReporter.java deleted file mode 100644 index 005e65ddf..000000000 --- a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkReporter.java +++ /dev/null @@ -1,50 +0,0 @@ - -package eu.dnetlib.dhp.oa.dedup; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import org.apache.spark.util.LongAccumulator; - -import eu.dnetlib.pace.util.Reporter; -import scala.Serializable; -import scala.Tuple2; - -public class SparkReporter implements Serializable, Reporter { - - private final List> relations = new ArrayList<>(); - - private final Map accumulators; - - public SparkReporter(Map accumulators) { - this.accumulators = accumulators; - } - - public void incrementCounter( - String counterGroup, - String counterName, - long delta, - Map accumulators) { - - final String accumulatorName = String.format("%s::%s", counterGroup, counterName); - if (accumulators.containsKey(accumulatorName)) { - accumulators.get(accumulatorName).add(delta); - } - } - - @Override - public void incrementCounter(String counterGroup, String counterName, long delta) { - - incrementCounter(counterGroup, counterName, delta, accumulators); - } - - @Override - public void emit(String type, String from, String to) { - relations.add(new Tuple2<>(from, to)); - } - - public List> getRelations() { - return relations; - } -} diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkWhitelistSimRels.java b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkWhitelistSimRels.java index 72c10e2a6..94a09ed05 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkWhitelistSimRels.java +++ b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkWhitelistSimRels.java @@ -8,26 +8,18 @@ import org.apache.commons.io.IOUtils; import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaSparkContext; import org.apache.spark.api.java.function.MapFunction; -import org.apache.spark.api.java.function.PairFunction; -import org.apache.spark.sql.Dataset; -import org.apache.spark.sql.Encoders; -import org.apache.spark.sql.SaveMode; -import org.apache.spark.sql.SparkSession; +import org.apache.spark.sql.*; import org.dom4j.DocumentException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.xml.sax.SAXException; import eu.dnetlib.dhp.application.ArgumentApplicationParser; -import eu.dnetlib.dhp.schema.oaf.DataInfo; import eu.dnetlib.dhp.schema.oaf.Relation; import eu.dnetlib.dhp.utils.ISLookupClientFactory; import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpException; import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpService; import eu.dnetlib.pace.config.DedupConfig; -import eu.dnetlib.pace.model.MapDocument; -import eu.dnetlib.pace.util.MapDocumentUtil; -import scala.Tuple2; public class SparkWhitelistSimRels extends AbstractSparkAction { @@ -78,15 +70,14 @@ public class SparkWhitelistSimRels extends AbstractSparkAction { JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); // file format: source####target - Dataset> whiteListRels = spark - .createDataset( - sc - .textFile(whiteListPath) - // check if the line is in the correct format: id1####id2 - .filter(s -> s.contains(WHITELIST_SEPARATOR) && s.split(WHITELIST_SEPARATOR).length == 2) - .map(s -> new Tuple2<>(s.split(WHITELIST_SEPARATOR)[0], s.split(WHITELIST_SEPARATOR)[1])) - .rdd(), - Encoders.tuple(Encoders.STRING(), Encoders.STRING())); + Dataset whiteListRels = spark + .read() + .textFile(whiteListPath) + .withColumn("pairs", functions.split(new Column("value"), WHITELIST_SEPARATOR)) + .filter(functions.size(new Column("pairs")).equalTo(2)) + .select( + functions.element_at(new Column("pairs"), 1).as("from"), + functions.element_at(new Column("pairs"), 2).as("to")); // for each dedup configuration for (DedupConfig dedupConf : getConfigurations(isLookUpService, actionSetId)) { @@ -97,35 +88,26 @@ public class SparkWhitelistSimRels extends AbstractSparkAction { final String outputPath = DedupUtility.createSimRelPath(workingPath, actionSetId, subEntity); - Dataset> entities = spark - .createDataset( - sc - .textFile(DedupUtility.createEntityPath(graphBasePath, subEntity)) - .repartition(numPartitions) - .mapToPair( - (PairFunction) s -> { - MapDocument d = MapDocumentUtil.asMapDocumentWithJPath(dedupConf, s); - return new Tuple2<>(d.getIdentifier(), "present"); - }) - .rdd(), - Encoders.tuple(Encoders.STRING(), Encoders.STRING())); + // DFMapDocumentUtils.registerUDFs(spark, dedupConf); - Dataset> whiteListRels1 = whiteListRels - .joinWith(entities, whiteListRels.col("_1").equalTo(entities.col("_1")), "inner") - .map( - (MapFunction, Tuple2>, Tuple2>) Tuple2::_1, - Encoders.tuple(Encoders.STRING(), Encoders.STRING())); + Dataset entities = spark + .read() + .textFile(DedupUtility.createEntityPath(graphBasePath, subEntity)) + .repartition(numPartitions) + .withColumn("id", functions.get_json_object(new Column("value"), dedupConf.getWf().getIdPath())); - Dataset> whiteListRels2 = whiteListRels1 - .joinWith(entities, whiteListRels1.col("_2").equalTo(entities.col("_1")), "inner") - .map( - (MapFunction, Tuple2>, Tuple2>) Tuple2::_1, - Encoders.tuple(Encoders.STRING(), Encoders.STRING())); + Dataset whiteListRels1 = whiteListRels + .join(entities, entities.col("id").equalTo(whiteListRels.col("from")), "inner") + .select("from", "to"); + + Dataset whiteListRels2 = whiteListRels1 + .join(entities, whiteListRels1.col("to").equalTo(entities.col("id")), "inner") + .select("from", "to"); Dataset whiteListSimRels = whiteListRels2 .map( - (MapFunction, Relation>) r -> DedupUtility - .createSimRel(r._1(), r._2(), entity), + (MapFunction) r -> DedupUtility + .createSimRel(r.getString(0), r.getString(1), entity), Encoders.bean(Relation.class)); saveParquet(whiteListSimRels, outputPath, SaveMode.Append); diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/graph/ConnectedComponent.java b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/graph/ConnectedComponent.java index 3e564052e..4a39a175d 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/graph/ConnectedComponent.java +++ b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/graph/ConnectedComponent.java @@ -6,7 +6,7 @@ import java.io.Serializable; import java.util.Set; import java.util.stream.Collectors; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.codehaus.jackson.annotate.JsonIgnore; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/model/Block.java b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/model/Block.java deleted file mode 100644 index 4f0d95c8f..000000000 --- a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/model/Block.java +++ /dev/null @@ -1,80 +0,0 @@ - -package eu.dnetlib.dhp.oa.dedup.model; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.Iterator; -import java.util.List; -import java.util.stream.Collectors; -import java.util.stream.Stream; -import java.util.stream.StreamSupport; - -import com.google.common.collect.Lists; - -import eu.dnetlib.pace.model.MapDocument; - -public class Block implements Serializable { - - private String key; - - private List documents; - - public Block() { - super(); - } - - public static Block from(String key, MapDocument doc) { - Block block = new Block(); - block.setKey(key); - block.setDocuments(Lists.newArrayList(doc)); - return block; - } - - public static Block from(String key, Iterator blocks, String orderField, int maxSize) { - Block block = new Block(); - block.setKey(key); - - Iterable it = () -> blocks; - - block - .setDocuments( - StreamSupport - .stream(it.spliterator(), false) - .flatMap(b -> b.getDocuments().stream()) - .sorted(Comparator.comparing(a -> a.getFieldMap().get(orderField).stringValue())) - .limit(maxSize) - .collect(Collectors.toCollection(ArrayList::new))); - return block; - } - - public static Block from(Block b1, Block b2, String orderField, int maxSize) { - Block block = new Block(); - block.setKey(b1.getKey()); - block - .setDocuments( - Stream - .concat(b1.getDocuments().stream(), b2.getDocuments().stream()) - .sorted(Comparator.comparing(a -> a.getFieldMap().get(orderField).stringValue())) - .limit(maxSize) - .collect(Collectors.toCollection(ArrayList::new))); - - return block; - } - - public String getKey() { - return key; - } - - public void setKey(String key) { - this.key = key; - } - - public List getDocuments() { - return documents; - } - - public void setDocuments(List documents) { - this.documents = documents; - } -} diff --git a/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/EntityMergerTest.java b/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/EntityMergerTest.java index c9cfb8cb2..42ca1613f 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/EntityMergerTest.java +++ b/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/EntityMergerTest.java @@ -9,7 +9,8 @@ import java.io.IOException; import java.io.Serializable; import java.lang.reflect.InvocationTargetException; import java.nio.file.Paths; -import java.util.*; +import java.util.ArrayList; +import java.util.List; import java.util.stream.Collectors; import org.codehaus.jackson.map.ObjectMapper; @@ -17,7 +18,10 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import eu.dnetlib.dhp.oa.merge.AuthorMerger; -import eu.dnetlib.dhp.schema.oaf.*; +import eu.dnetlib.dhp.schema.oaf.DataInfo; +import eu.dnetlib.dhp.schema.oaf.Publication; +import eu.dnetlib.dhp.schema.oaf.Software; +import eu.dnetlib.dhp.schema.oaf.StructuredProperty; import eu.dnetlib.pace.util.MapDocumentUtil; import scala.Tuple2; diff --git a/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkDedupTest.java b/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkDedupTest.java index 3de14f577..6a2c6dcc5 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkDedupTest.java +++ b/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkDedupTest.java @@ -178,16 +178,18 @@ public class SparkDedupTest implements Serializable { .load(DedupUtility.createSimRelPath(testOutputBasePath, testActionSetId, "otherresearchproduct")) .count(); - assertEquals(3076, orgs_simrel); - assertEquals(7046, pubs_simrel); - assertEquals(336, sw_simrel); - assertEquals(442, ds_simrel); - assertEquals(6784, orp_simrel); -// System.out.println("orgs_simrel = " + orgs_simrel); -// System.out.println("pubs_simrel = " + pubs_simrel); -// System.out.println("sw_simrel = " + sw_simrel); -// System.out.println("ds_simrel = " + ds_simrel); -// System.out.println("orp_simrel = " + orp_simrel); + System.out.println("orgs_simrel = " + orgs_simrel); + System.out.println("pubs_simrel = " + pubs_simrel); + System.out.println("sw_simrel = " + sw_simrel); + System.out.println("ds_simrel = " + ds_simrel); + System.out.println("orp_simrel = " + orp_simrel); + + assertEquals(1538, orgs_simrel); + assertEquals(3523, pubs_simrel); + assertEquals(168, sw_simrel); + assertEquals(221, ds_simrel); + assertEquals(3392, orp_simrel); + } @Test @@ -231,10 +233,10 @@ public class SparkDedupTest implements Serializable { .count(); // entities simrels supposed to be equal to the number of previous step (no rels in whitelist) - assertEquals(3076, orgs_simrel); - assertEquals(7046, pubs_simrel); - assertEquals(442, ds_simrel); - assertEquals(6784, orp_simrel); + assertEquals(1538, orgs_simrel); + assertEquals(3523, pubs_simrel); + assertEquals(221, ds_simrel); + assertEquals(3392, orp_simrel); // System.out.println("orgs_simrel = " + orgs_simrel); // System.out.println("pubs_simrel = " + pubs_simrel); // System.out.println("ds_simrel = " + ds_simrel); @@ -264,7 +266,7 @@ public class SparkDedupTest implements Serializable { && rel.getTarget().equalsIgnoreCase(whiteList.get(1).split(WHITELIST_SEPARATOR)[1])) .count() > 0); - assertEquals(338, sw_simrel.count()); + assertEquals(170, sw_simrel.count()); // System.out.println("sw_simrel = " + sw_simrel.count()); } diff --git a/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkOpenorgsDedupTest.java b/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkOpenorgsDedupTest.java index 88c28ab2f..a0c7772e9 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkOpenorgsDedupTest.java +++ b/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkOpenorgsDedupTest.java @@ -143,7 +143,7 @@ public class SparkOpenorgsDedupTest implements Serializable { .load(DedupUtility.createSimRelPath(testOutputBasePath, testActionSetId, "organization")) .count(); - assertEquals(290, orgs_simrel); + assertEquals(145, orgs_simrel); } @Test @@ -172,7 +172,7 @@ public class SparkOpenorgsDedupTest implements Serializable { .load(DedupUtility.createSimRelPath(testOutputBasePath, testActionSetId, "organization")) .count(); - assertEquals(326, orgs_simrel); + assertEquals(181, orgs_simrel); } @Test diff --git a/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkOpenorgsProvisionTest.java b/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkOpenorgsProvisionTest.java index 2a9f34dee..a0bf6b37e 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkOpenorgsProvisionTest.java +++ b/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkOpenorgsProvisionTest.java @@ -11,8 +11,6 @@ import java.io.IOException; import java.io.Serializable; import java.net.URISyntaxException; import java.nio.file.Paths; -import java.util.List; -import java.util.stream.Collectors; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; @@ -31,8 +29,6 @@ import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.junit.jupiter.MockitoExtension; -import com.fasterxml.jackson.databind.ObjectMapper; - import eu.dnetlib.dhp.application.ArgumentApplicationParser; import eu.dnetlib.dhp.schema.oaf.Relation; import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpException; diff --git a/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkPublicationRootsTest.java b/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkPublicationRootsTest.java index 3cff836eb..e3fe882ef 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkPublicationRootsTest.java +++ b/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkPublicationRootsTest.java @@ -129,7 +129,7 @@ public class SparkPublicationRootsTest implements Serializable { .load(DedupUtility.createSimRelPath(workingPath, testActionSetId, "publication")) .count(); - assertEquals(74, pubs_simrel); + assertEquals(37, pubs_simrel); } @Test diff --git a/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/jpath/JsonPathTest.java b/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/jpath/JsonPathTest.java index 7348a3bd2..705c2cc84 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/jpath/JsonPathTest.java +++ b/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/jpath/JsonPathTest.java @@ -1,305 +1,31 @@ package eu.dnetlib.dhp.oa.dedup.jpath; +import java.io.IOException; + +import org.apache.commons.io.IOUtils; +import org.apache.spark.sql.Row; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.junit.platform.commons.util.StringUtils; import eu.dnetlib.pace.config.DedupConfig; -import eu.dnetlib.pace.model.MapDocument; -import eu.dnetlib.pace.util.MapDocumentUtil; +import eu.dnetlib.pace.model.SparkModel; class JsonPathTest { - String json = "{\t\"dataInfo\":{\t\t\"invisible\":false,\t\t\"inferred\":false,\t\t\"deletedbyinference\":false,\t\t\"trust\":\"0.810000002384185791\",\t\t\"inferenceprovenance\":\"\",\t\t\"provenanceaction\":{\t\t\t\"classid\":\"sysimport:crosswalk:entityregistry\",\t\t\t\"classname\":\"sysimport:crosswalk:entityregistry\",\t\t\t\"schemeid\":\"dnet:provenance_actions\",\t\t\t\"schemename\":\"dnet:provenance_actions\"\t\t}\t},\t\"lastupdatetimestamp\":1584960968152,\t\"id\":\"20|corda__h2020::9faf23721249f26ac2c16eb857ea1fb9\",\t\"originalId\":[\t\t\"corda__h2020::927957582\"\t],\t\"collectedfrom\":[\t\t{\t\t\t\"key\":\"openaire____::corda_h2020\",\t\t\t\"value\":\"CORDA - COmmon Research DAta Warehouse - Horizon 2020\",\t\t\t\"dataInfo\":null\t\t}\t],\t\"pid\":[\t],\t\"dateofcollection\":\"2016-06-05\",\t\"dateoftransformation\":\"2019-11-19\",\t\"extraInfo\":[\t],\t\"oaiprovenance\":null,\t\"legalshortname\":{\t\t\"value\":\"Comentor AB\",\t\t\"dataInfo\":{\t\t\t\"invisible\":false,\t\t\t\"inferred\":false,\t\t\t\"deletedbyinference\":false,\t\t\t\"trust\":\"0.810000002384185791\",\t\t\t\"inferenceprovenance\":\"\",\t\t\t\"provenanceaction\":{\t\t\t\t\"classid\":\"sysimport:crosswalk:entityregistry\",\t\t\t\t\"classname\":\"sysimport:crosswalk:entityregistry\",\t\t\t\t\"schemeid\":\"dnet:provenance_actions\",\t\t\t\t\"schemename\":\"dnet:provenance_actions\"\t\t\t}\t\t}\t},\t\"legalname\":{\t\t\"value\":\"Comentor AB\",\t\t\"dataInfo\":{\t\t\t\"invisible\":false,\t\t\t\"inferred\":false,\t\t\t\"deletedbyinference\":false,\t\t\t\"trust\":\"0.810000002384185791\",\t\t\t\"inferenceprovenance\":\"\",\t\t\t\"provenanceaction\":{\t\t\t\t\"classid\":\"sysimport:crosswalk:entityregistry\",\t\t\t\t\"classname\":\"sysimport:crosswalk:entityregistry\",\t\t\t\t\"schemeid\":\"dnet:provenance_actions\",\t\t\t\t\"schemename\":\"dnet:provenance_actions\"\t\t\t}\t\t}\t},\t\"alternativeNames\":[\t],\t\"websiteurl\":{\t\t\"value\":\"http://www.comentor.se\",\t\t\"dataInfo\":{\t\t\t\"invisible\":false,\t\t\t\"inferred\":false,\t\t\t\"deletedbyinference\":false,\t\t\t\"trust\":\"0.810000002384185791\",\t\t\t\"inferenceprovenance\":\"\",\t\t\t\"provenanceaction\":{\t\t\t\t\"classid\":\"sysimport:crosswalk:entityregistry\",\t\t\t\t\"classname\":\"sysimport:crosswalk:entityregistry\",\t\t\t\t\"schemeid\":\"dnet:provenance_actions\",\t\t\t\t\"schemename\":\"dnet:provenance_actions\"\t\t\t}\t\t}\t},\t\"logourl\":null,\t\"eclegalbody\":{\t\t\"value\":\"false\",\t\t\"dataInfo\":{\t\t\t\"invisible\":false,\t\t\t\"inferred\":false,\t\t\t\"deletedbyinference\":false,\t\t\t\"trust\":\"0.810000002384185791\",\t\t\t\"inferenceprovenance\":\"\",\t\t\t\"provenanceaction\":{\t\t\t\t\"classid\":\"sysimport:crosswalk:entityregistry\",\t\t\t\t\"classname\":\"sysimport:crosswalk:entityregistry\",\t\t\t\t\"schemeid\":\"dnet:provenance_actions\",\t\t\t\t\"schemename\":\"dnet:provenance_actions\"\t\t\t}\t\t}\t},\t\"eclegalperson\":{\t\t\"value\":\"true\",\t\t\"dataInfo\":{\t\t\t\"invisible\":false,\t\t\t\"inferred\":false,\t\t\t\"deletedbyinference\":false,\t\t\t\"trust\":\"0.810000002384185791\",\t\t\t\"inferenceprovenance\":\"\",\t\t\t\"provenanceaction\":{\t\t\t\t\"classid\":\"sysimport:crosswalk:entityregistry\",\t\t\t\t\"classname\":\"sysimport:crosswalk:entityregistry\",\t\t\t\t\"schemeid\":\"dnet:provenance_actions\",\t\t\t\t\"schemename\":\"dnet:provenance_actions\"\t\t\t}\t\t}\t},\t\"ecnonprofit\":{\t\t\"value\":\"false\",\t\t\"dataInfo\":{\t\t\t\"invisible\":false,\t\t\t\"inferred\":false,\t\t\t\"deletedbyinference\":false,\t\t\t\"trust\":\"0.810000002384185791\",\t\t\t\"inferenceprovenance\":\"\",\t\t\t\"provenanceaction\":{\t\t\t\t\"classid\":\"sysimport:crosswalk:entityregistry\",\t\t\t\t\"classname\":\"sysimport:crosswalk:entityregistry\",\t\t\t\t\"schemeid\":\"dnet:provenance_actions\",\t\t\t\t\"schemename\":\"dnet:provenance_actions\"\t\t\t}\t\t}\t},\t\"ecresearchorganization\":{\t\t\"value\":\"false\",\t\t\"dataInfo\":{\t\t\t\"invisible\":false,\t\t\t\"inferred\":false,\t\t\t\"deletedbyinference\":false,\t\t\t\"trust\":\"0.810000002384185791\",\t\t\t\"inferenceprovenance\":\"\",\t\t\t\"provenanceaction\":{\t\t\t\t\"classid\":\"sysimport:crosswalk:entityregistry\",\t\t\t\t\"classname\":\"sysimport:crosswalk:entityregistry\",\t\t\t\t\"schemeid\":\"dnet:provenance_actions\",\t\t\t\t\"schemename\":\"dnet:provenance_actions\"\t\t\t}\t\t}\t},\t\"echighereducation\":{\t\t\"value\":\"false\",\t\t\"dataInfo\":{\t\t\t\"invisible\":false,\t\t\t\"inferred\":false,\t\t\t\"deletedbyinference\":false,\t\t\t\"trust\":\"0.810000002384185791\",\t\t\t\"inferenceprovenance\":\"\",\t\t\t\"provenanceaction\":{\t\t\t\t\"classid\":\"sysimport:crosswalk:entityregistry\",\t\t\t\t\"classname\":\"sysimport:crosswalk:entityregistry\",\t\t\t\t\"schemeid\":\"dnet:provenance_actions\",\t\t\t\t\"schemename\":\"dnet:provenance_actions\"\t\t\t}\t\t}\t},\t\"ecinternationalorganizationeurinterests\":{\t\t\"value\":\"false\",\t\t\"dataInfo\":{\t\t\t\"invisible\":false,\t\t\t\"inferred\":false,\t\t\t\"deletedbyinference\":false,\t\t\t\"trust\":\"0.810000002384185791\",\t\t\t\"inferenceprovenance\":\"\",\t\t\t\"provenanceaction\":{\t\t\t\t\"classid\":\"sysimport:crosswalk:entityregistry\",\t\t\t\t\"classname\":\"sysimport:crosswalk:entityregistry\",\t\t\t\t\"schemeid\":\"dnet:provenance_actions\",\t\t\t\t\"schemename\":\"dnet:provenance_actions\"\t\t\t}\t\t}\t},\t\"ecinternationalorganization\":{\t\t\"value\":\"false\",\t\t\"dataInfo\":{\t\t\t\"invisible\":false,\t\t\t\"inferred\":false,\t\t\t\"deletedbyinference\":false,\t\t\t\"trust\":\"0.810000002384185791\",\t\t\t\"inferenceprovenance\":\"\",\t\t\t\"provenanceaction\":{\t\t\t\t\"classid\":\"sysimport:crosswalk:entityregistry\",\t\t\t\t\"classname\":\"sysimport:crosswalk:entityregistry\",\t\t\t\t\"schemeid\":\"dnet:provenance_actions\",\t\t\t\t\"schemename\":\"dnet:provenance_actions\"\t\t\t}\t\t}\t},\t\"ecenterprise\":{\t\t\"value\":\"false\",\t\t\"dataInfo\":{\t\t\t\"invisible\":false,\t\t\t\"inferred\":false,\t\t\t\"deletedbyinference\":false,\t\t\t\"trust\":\"0.810000002384185791\",\t\t\t\"inferenceprovenance\":\"\",\t\t\t\"provenanceaction\":{\t\t\t\t\"classid\":\"sysimport:crosswalk:entityregistry\",\t\t\t\t\"classname\":\"sysimport:crosswalk:entityregistry\",\t\t\t\t\"schemeid\":\"dnet:provenance_actions\",\t\t\t\t\"schemename\":\"dnet:provenance_actions\"\t\t\t}\t\t}\t},\t\"ecsmevalidated\":{\t\t\"value\":\"true\",\t\t\"dataInfo\":{\t\t\t\"invisible\":false,\t\t\t\"inferred\":false,\t\t\t\"deletedbyinference\":false,\t\t\t\"trust\":\"0.810000002384185791\",\t\t\t\"inferenceprovenance\":\"\",\t\t\t\"provenanceaction\":{\t\t\t\t\"classid\":\"sysimport:crosswalk:entityregistry\",\t\t\t\t\"classname\":\"sysimport:crosswalk:entityregistry\",\t\t\t\t\"schemeid\":\"dnet:provenance_actions\",\t\t\t\t\"schemename\":\"dnet:provenance_actions\"\t\t\t}\t\t}\t},\t\"ecnutscode\":{\t\t\"value\":\"false\",\t\t\"dataInfo\":{\t\t\t\"invisible\":false,\t\t\t\"inferred\":false,\t\t\t\"deletedbyinference\":false,\t\t\t\"trust\":\"0.810000002384185791\",\t\t\t\"inferenceprovenance\":\"\",\t\t\t\"provenanceaction\":{\t\t\t\t\"classid\":\"sysimport:crosswalk:entityregistry\",\t\t\t\t\"classname\":\"sysimport:crosswalk:entityregistry\",\t\t\t\t\"schemeid\":\"dnet:provenance_actions\",\t\t\t\t\"schemename\":\"dnet:provenance_actions\"\t\t\t}\t\t}\t},\t\"country\":null}"; - DedupConfig conf = DedupConfig - .load( - "{\n" - + " \"wf\" : {\n" - + " \"threshold\" : \"0.99\",\n" - + " \"dedupRun\" : \"001\",\n" - + " \"entityType\" : \"organization\",\n" - + " \"subEntityValue\": \"organization\",\n" - + " \"orderField\" : \"legalname\",\n" - + " \"queueMaxSize\" : \"2000\",\n" - + " \"groupMaxSize\" : \"50\",\n" - + " \"slidingWindowSize\" : \"200\",\n" - + " \"idPath\":\"$.id\",\n" - + " \"rootBuilder\" : [ \"organization\", \"projectOrganization_participation_isParticipant\", \"datasourceOrganization_provision_isProvidedBy\" ],\n" - + " \"includeChildren\" : \"true\",\n" - + " \"maxIterations\": \"20\"\n" - + " },\n" - + " \"pace\" : {\n" - + " \"clustering\" : [\n" - + " { \"name\" : \"sortedngrampairs\", \"fields\" : [ \"legalname\" ], \"params\" : { \"max\" : 2, \"ngramLen\" : \"3\"} },\n" - + " { \"name\" : \"suffixprefix\", \"fields\" : [ \"legalname\" ], \"params\" : { \"max\" : 1, \"len\" : \"3\" } },\n" - + " { \"name\" : \"urlclustering\", \"fields\" : [ \"websiteurl\" ], \"params\" : { } },\n" - + " { \"name\" : \"keywordsclustering\", \"fields\" : [ \"legalname\" ], \"params\" : { \"max\": 2, \"windowSize\": 4} }\n" - + " ],\n" - + " \"decisionTree\" : {\n" - + " \"start\": {\n" - + " \"fields\": [\n" - + " {\n" - + " \"field\": \"gridid\",\n" - + " \"comparator\": \"exactMatch\",\n" - + " \"weight\": 1,\n" - + " \"countIfUndefined\": \"false\",\n" - + " \"params\": {}\n" - + " }\n" - + " ],\n" - + " \"threshold\": 1,\n" - + " \"aggregation\": \"AVG\",\n" - + " \"positive\": \"MATCH\",\n" - + " \"negative\": \"NO_MATCH\",\n" - + " \"undefined\": \"layer2\",\n" - + " \"ignoreUndefined\": \"false\"\n" - + " },\n" - + " \"layer2\": {\n" - + " \"fields\": [\n" - + " {\n" - + " \"field\": \"websiteurl\",\n" - + " \"comparator\": \"domainExactMatch\",\n" - + " \"weight\": 1,\n" - + " \"countIfUndefined\": \"false\",\n" - + " \"params\": {}\n" - + " },\n" - + " {\n" - + " \"field\": \"country\",\n" - + " \"comparator\": \"exactMatch\",\n" - + " \"weight\": 1,\n" - + " \"countIfUndefined\": \"true\",\n" - + " \"params\": {}\n" - + " },\n" - + " {\n" - + " \"field\": \"legalname\",\n" - + " \"comparator\": \"numbersMatch\",\n" - + " \"weight\": 1,\n" - + " \"countIfUndefined\": \"true\",\n" - + " \"params\": {}\n" - + " },\n" - + " {\n" - + " \"field\": \"legalname\",\n" - + " \"comparator\": \"romansMatch\",\n" - + " \"weight\": 1,\n" - + " \"countIfUndefined\": \"true\",\n" - + " \"params\": {}\n" - + " }\n" - + " ],\n" - + " \"threshold\": 1,\n" - + " \"aggregation\": \"AND\",\n" - + " \"positive\": \"layer3\",\n" - + " \"negative\": \"NO_MATCH\",\n" - + " \"undefined\": \"layer3\",\n" - + " \"ignoreUndefined\": \"true\"\n" - + " },\n" - + " \"layer3\": {\n" - + " \"fields\": [\n" - + " {\n" - + " \"field\": \"legalname\",\n" - + " \"comparator\": \"cityMatch\",\n" - + " \"weight\": 1.0,\n" - + " \"countIfUndefined\": \"true\",\n" - + " \"params\": {\n" - + " \"windowSize\": \"4\"\n" - + " }\n" - + " }\n" - + " ],\n" - + " \"threshold\": 0.1,\n" - + " \"aggregation\": \"AVG\",\n" - + " \"positive\": \"layer4\",\n" - + " \"negative\": \"NO_MATCH\",\n" - + " \"undefined\": \"NO_MATCH\",\n" - + " \"ignoreUndefined\": \"true\"\n" - + " },\n" - + " \"layer4\": {\n" - + " \"fields\": [\n" - + " {\n" - + " \"field\": \"legalname\",\n" - + " \"comparator\": \"keywordMatch\",\n" - + " \"weight\": 1.0,\n" - + " \"countIfUndefined\": \"true\",\n" - + " \"params\": {\n" - + " \"windowSize\": \"4\"\n" - + " }\n" - + " }\n" - + " ],\n" - + " \"threshold\": 0.7,\n" - + " \"aggregation\": \"AVG\",\n" - + " \"positive\": \"layer5\",\n" - + " \"negative\": \"NO_MATCH\",\n" - + " \"undefined\": \"layer5\",\n" - + " \"ignoreUndefined\": \"true\"\n" - + " },\n" - + " \"layer5\": {\n" - + " \"fields\": [\n" - + " {\n" - + " \"field\": \"legalname\",\n" - + " \"comparator\": \"jaroWinklerNormalizedName\",\n" - + " \"weight\": 0.9,\n" - + " \"countIfUndefined\": \"true\",\n" - + " \"params\": {\n" - + " \"windowSize\": \"4\"\n" - + " }\n" - + " },\n" - + " {\n" - + " \"field\": \"legalshortname\",\n" - + " \"comparator\": \"jaroWinklerNormalizedName\",\n" - + " \"weight\": 0.1,\n" - + " \"countIfUndefined\": \"false\",\n" - + " \"params\": {\n" - + " \"windowSize\": 4\n" - + " }\n" - + " }\n" - + " ],\n" - + " \"threshold\": 0.9,\n" - + " \"aggregation\": \"W_MEAN\",\n" - + " \"positive\": \"MATCH\",\n" - + " \"negative\": \"NO_MATCH\",\n" - + " \"undefined\": \"NO_MATCH\",\n" - + " \"ignoreUndefined\": \"true\"\n" - + " }\n" - + " },\n" - + " \"model\" : [\n" - + " { \"name\" : \"country\", \"type\" : \"String\", \"path\" : \"$.country.classid\"},\n" - + " { \"name\" : \"legalshortname\", \"type\" : \"String\", \"path\" : \"$.legalshortname.value\"},\n" - + " { \"name\" : \"legalname\", \"type\" : \"String\", \"path\" : \"$.legalname.value\" },\n" - + " { \"name\" : \"websiteurl\", \"type\" : \"URL\", \"path\" : \"$.websiteurl.value\" },\n" - + " { \"name\" : \"gridid\", \"type\" : \"String\", \"path\" : \"$.pid[?(@.qualifier.classid =='grid')].value\"},\n" - + " { \"name\" : \"originalId\", \"type\" : \"String\", \"path\" : \"$.id\" }\n" - + " ],\n" - + " \"blacklists\" : {\n" - + " \"legalname\" : []\n" - + " },\n" - + " \"synonyms\": {\n" - + " \"key::1\": [\"university\",\"università\", \"universitas\", \"università studi\",\"universitario\",\"universitaria\",\"université\", \"universite\", \"universitaire\",\"universitaires\",\"universidad\",\"universitade\",\"Universität\",\"universitaet\",\"Uniwersytet\",\"университет\",\"universiteit\",\"πανεπιστήμιο\",\"universitesi\",\"universiteti\", \"universiti\"],\n" - + " \"key::2\": [\"studies\",\"studi\",\"études\",\"estudios\",\"estudos\",\"Studien\",\"studia\",\"исследования\",\"studies\",\"σπουδές\"],\n" - + " \"key::3\": [\"advanced\",\"superiore\",\"supérieur\",\"supérieure\",\"supérieurs\",\"supérieures\",\"avancado\",\"avancados\",\"fortgeschrittene\",\"fortgeschritten\",\"zaawansowany\",\"передовой\",\"gevorderd\",\"gevorderde\",\"προχωρημένος\",\"προχωρημένη\",\"προχωρημένο\",\"προχωρημένες\",\"προχωρημένα\",\"wyzsza\"],\n" - + " \"key::4\": [\"institute\",\"istituto\",\"institut\",\"instituto\",\"instituto\",\"Institut\",\"instytut\",\"институт\",\"instituut\",\"ινστιτούτο\"],\n" - + " \"key::5\": [\"hospital\",\"ospedale\",\"hôpital\",\"hospital\",\"hospital\",\"Krankenhaus\",\"szpital\",\"больница\",\"ziekenhuis\",\"νοσοκομείο\"],\n" - + " \"key::6\": [\"research\",\"ricerca\",\"recherche\",\"investigacion\",\"pesquisa\",\"Forschung\",\"badania\",\"исследования\",\"onderzoek\",\"έρευνα\",\"erevna\",\"erevnas\"],\n" - + " \"key::7\": [\"college\",\"collegio\",\"colegio\",\"faculdade\",\"Hochschule\",\"Szkoła Wyższa\",\"Высшая школа\",\"κολλέγιο\"],\n" - + " \"key::8\": [\"foundation\",\"fondazione\",\"fondation\",\"fundación\",\"fundação\",\"Stiftung\",\"Fundacja\",\"фонд\",\"stichting\",\"ίδρυμα\",\"idryma\"],\n" - + " \"key::9\": [\"center\",\"centro\",\"centre\",\"centro\",\"centro\",\"zentrum\",\"centrum\",\"центр\",\"centrum\",\"κέντρο\"],\n" - + " \"key::10\": [\"national\",\"nazionale\",\"national\",\"nationale\",\"nationaux\",\"nationales\",\"nacional\",\"nacional\",\"national\",\"krajowy\",\"национальный\",\"nationaal\",\"nationale\",\"εθνικό\"],\n" - + " \"key::11\": [\"association\",\"associazione\",\"association\",\"asociación\",\"associação\",\"Verein\",\"verband\",\"stowarzyszenie\",\"ассоциация\",\"associatie\"],\n" - + " \"key::12\": [\"society\",\"societa\",\"société\",\"sociedad\",\"sociedade\",\"gesellschaft\",\"społeczeństwo\",\"общество\",\"maatschappij\",\"κοινωνία\"],\n" - + " \"key::13\": [\"international\",\"internazionale\",\"international\",\"internacional\",\"internacional\",\"international\",\"międzynarodowy\",\"Международный\",\"internationaal\",\"internationale\",\"διεθνής\",\"διεθνή\",\"διεθνές\"],\n" - + " \"key::14\": [\"community\",\"comunita\",\"communauté\",\"comunidad\",\"comunidade\",\"Gemeinschaft\",\"społeczność\",\"сообщество\",\"gemeenschap\",\"κοινότητα\"],\n" - + " \"key::15\": [\"school\",\"scuola\",\"école\",\"escuela\",\"escola\",\"schule\",\"Szkoła\",\"школа\",\"school\",\"σχολείο\"],\n" - + " \"key::16\": [\"education\",\"educazione\",\"éducation\",\"educacion\",\"Educação\",\"Bildung\",\"Edukacja\",\"образование\",\"opleiding\",\"εκπαίδευση\"],\n" - + " \"key::17\": [\"academy\",\"accademia\",\"académie\",\"academia\",\"academia\",\"Akademie\",\"akademie\",\"академия\",\"academie\",\"ακαδημία\"],\n" - + " \"key::18\": [\"public\",\"pubblico\",\"public\",\"publique\",\"publics\",\"publiques\",\"publico\",\"publico\",\"Öffentlichkeit\",\"publiczny\",\"публичный\",\"publiek\",\"publieke\",\"δημόσιος\",\"δημόσια\",\"δημόσιο\"],\n" - + " \"key::19\": [\"museum\",\"museo\",\"musée\",\"mueso\",\"museu\",\"museum\",\"muzeum\",\"музей\",\"museum\",\"μουσείο\"],\n" - + " \"key::20\": [\"group\",\"gruppo\",\"groupe\",\"grupo\",\"grupo\",\"gruppe\",\"grupa\",\"группа\",\"groep\",\"ομάδα\",\"όμιλος\"],\n" - + " \"key::21\": [\"department\",\"dipartimento\",\"département\",\"departamento\",\"departamento\",\"abteilung\",\"departament\",\"отдел\",\"afdeling\",\"τμήμα\"],\n" - + " \"key::22\": [\"council\",\"consiglio\",\"conseil\",\"Consejo\",\"conselho\",\"gesellschaft\",\"rada\",\"совет\",\"raad\",\"συμβούλιο\"],\n" - + " \"key::23\": [\"library\",\"biblioteca\",\"bibliothèque\",\"biblioteca\",\"biblioteca\",\"Bibliothek\",\"biblioteka\",\"библиотека\",\"bibliotheek\",\"βιβλιοθήκη\"],\n" - + " \"key::24\": [\"ministry\",\"ministero\",\"ministère\",\"ministerio\",\"ministério\",\"Ministerium\",\"ministerstwo\",\"министерство\",\"ministerie\",\"υπουργείο\"],\n" - + " \"key::25\": [\"services\",\"servizi\",\"services\",\"servicios\",\"Serviços\",\"Dienstleistungen\",\"usługi\",\"услуги\",\"diensten\",\"υπηρεσίες\"],\n" - + " \"key::26\": [\"central\",\"centrale\",\"central\",\"centrale\",\"centrales\",\"central\",\"central\",\"zentral\",\"centralny\",\"цетральный\",\"centraal\",\"κεντρικός\",\"κεντρική\",\"κεντρικό\",\"κεντρικά\"],\n" - + " \"key::27\": [\"general\",\"generale\",\"général\",\"générale\",\"généraux\",\"générales\",\"general\",\"geral\",\"general\",\"Allgemeines\",\"general\",\"общий\",\"algemeen\",\"algemene\",\"γενικός\",\"γενική\",\"γενικό\",\"γενικά\"],\n" - + " \"key::28\": [\"applied\",\"applicati\",\"appliqué\",\"appliquée\",\"appliqués\",\"appliquées\",\"aplicado\",\"aplicada\",\"angewendet\",\"stosowany\",\"прикладной\",\"toegepast\",\"toegepaste\",\"εφαρμοσμένος\",\"εφαρμοσμένη\",\"εφαρμοσμένο\",\"εφαρμοσμένα\"],\n" - + " \"key::29\": [\"european\",\"europee\",\"europea\",\"européen\",\"européenne\",\"européens\",\"européennes\",\"europeo\",\"europeu\",\"europäisch\",\"europejski\",\"европейский\",\"Europees\",\"Europese\",\"ευρωπαϊκός\",\"ευρωπαϊκή\",\"ευρωπαϊκό\",\"ευρωπαϊκά\"],\n" - + " \"key::30\": [\"agency\",\"agenzia\",\"agence\",\"agencia\",\"agencia\",\"agentur\",\"agencja\",\"агенция\",\"agentschap\",\"πρακτορείο\"],\n" - + " \"key::31\": [\"laboratory\",\"laboratorio\",\"laboratoire\",\"laboratorio\",\"laboratorio\",\"labor\",\"laboratorium\",\"лаборатория\",\"laboratorium\",\"εργαστήριο\"],\n" - + " \"key::32\": [\"industry\",\"industria\",\"industrie\",\"индустрия\",\"industrie\",\"βιομηχανία\"],\n" - + " \"key::33\": [\"industrial\",\"industriale\",\"industriel\",\"industrielle\",\"industriels\",\"industrielles\",\"индустриальный\",\"industrieel\",\"βιομηχανικός\",\"βιομηχανική\",\"βιομηχανικό\",\"βιομηχανικά\",\"βιομηχανικές\"],\n" - + " \"key::34\": [\"consortium\",\"consorzio\",\"consortium\",\"консорциум\",\"consortium\",\"κοινοπραξία\"],\n" - + " \"key::35\": [\"organization\",\"organizzazione\",\"organisation\",\"organización\",\"organização\",\"organizacja\",\"организация\",\"organisatie\",\"οργανισμός\"],\n" - + " \"key::36\": [\"authority\",\"autorità\",\"autorité\",\"авторитет\",\"autoriteit\"],\n" - + " \"key::37\": [\"federation\",\"federazione\",\"fédération\",\"федерация\",\"federatie\",\"ομοσπονδία\"],\n" - + " \"key::38\": [\"observatory\",\"osservatorio\",\"observatoire\",\"обсерватория\",\"observatorium\",\"αστεροσκοπείο\"],\n" - + " \"key::39\": [\"bureau\",\"ufficio\",\"bureau\",\"офис\",\"bureau\",\"γραφείο\"],\n" - + " \"key::40\": [\"company\",\"impresa\",\"compagnie\",\"société\",\"компания\",\"bedrijf\",\"εταιρία\"],\n" - + " \"key::41\": [\"polytechnic\",\"politecnico\",\"polytechnique\",\"политехника\",\"polytechnisch\",\"πολυτεχνείο\",\"universita politecnica\",\"polytechnic university\",\"universidad politecnica\",\"universitat politecnica\",\"politechnika\",\"politechniki\",\"university technology\",\"university science technology\"],\n" - + " \"key::42\": [\"coalition\",\"coalizione\",\"coalition\",\"коалиция\",\"coalitie\",\"συνασπισμός\"],\n" - + " \"key::43\": [\"initiative\",\"iniziativa\",\"initiative\",\"инициатива\",\"initiatief\",\"πρωτοβουλία\"],\n" - + " \"key::44\": [\"academic\",\"accademico\",\"académique\",\"universitaire\",\"акадеческий academisch\",\"ακαδημαϊκός\",\"ακαδημαϊκή\",\"ακαδημαϊκό\",\"ακαδημαϊκές\",\"ακαδημαϊκοί\"],\n" - + " \"key::45\": [\"institution\",\"istituzione\",\"institution\",\"институциональный\",\"instelling\",\"ινστιτούτο\"],\n" - + " \"key::46\": [\"division\",\"divisione\",\"division\",\"отделение\",\"divisie\",\"τμήμα\"],\n" - + " \"key::47\": [\"committee\",\"comitato\",\"comité\",\"комитет\",\"commissie\",\"επιτροπή\"],\n" - + " \"key::48\": [\"promotion\",\"promozione\",\"продвижение\",\"proothisis\",\"forderung\"],\n" - + " \"key::49\": [\"medical\",\"medicine\",\"clinical\",\"medicina\",\"clinici\",\"médico\",\"medicina\",\"clínica\",\"médico\",\"medicina\",\"clínica\",\"medizinisch\",\"Medizin\",\"klinisch\",\"medisch\",\"geneeskunde\",\"klinisch\",\"ιατρικός\",\"ιατρική\",\"ιατρικό\",\"ιατρικά\",\"κλινικός\",\"κλινική\",\"κλινικό\",\"κλινικά\",\"tıbbi\",\"tıp\",\"klinik\",\"orvosi\",\"orvostudomány\",\"klinikai\",\"zdravniški\",\"medicinski\",\"klinični\",\"meditsiini\",\"kliinik\",\"kliiniline\"],\n" - + " \"key::50\": [\"technology\",\"technological\",\"tecnologia\",\"tecnologie\",\"tecnología\",\"tecnológico\",\"tecnologia\",\"tecnológico\",\"Technologie\",\"technologisch\",\"technologie\",\"technologisch\",\"τεχνολογία\",\"τεχνολογικός\",\"τεχνολογική\",\"τεχνολογικό\",\"teknoloji\",\"teknolojik\",\"technológia\",\"technológiai\",\"tehnologija\",\"tehnološki\",\"tehnoloogia\",\"tehnoloogiline\",\"technologii\",\"technical\",\"texniki\",\"teknik\"],\n" - + " \"key::51\": [\"science\",\"scientific\",\"scienza\",\"scientifiche\",\"scienze\",\"ciencia\",\"científico\",\"ciência\",\"científico\",\"Wissenschaft\",\"wissenschaftlich\",\"wetenschap\",\"wetenschappelijk\",\"επιστήμη\",\"επιστημονικός\",\"επιστημονική\",\"επιστημονικό\",\"επιστημονικά\",\"bilim\",\"bilimsel\",\"tudomány\",\"tudományos\",\"znanost\",\"znanstveni\",\"teadus\",\"teaduslik\",\"\"],\n" - + " \"key::52\": [\"engineering\",\"ingegneria\",\"ingeniería\",\"engenharia\",\"Ingenieurwissenschaft\",\"ingenieurswetenschappen\",\"bouwkunde\",\"μηχανικός\",\"μηχανική\",\"μηχανικό\",\"mühendislik\",\"mérnöki\",\"Inženirstvo\",\"inseneeria\",\"inseneri\",\"\"],\n" - + " \"key::53\": [\"management\",\"gestione\",\"gestionale\",\"gestionali\",\"gestión\",\"administración\",\"gestão\",\"administração\",\"Verwaltung\",\"management\",\"διαχείριση\",\"yönetim\",\"menedzsment\",\"vodstvo\",\"upravljanje\",\"management\",\"juhtkond\",\"juhtimine\",\"haldus\",\"\"],\n" - + " \"key::54\": [\"energy\",\"energia\",\"energía\",\"energia\",\"Energie\",\"energie\",\"ενέργεια\",\"enerji\",\"energia\",\"energija\",\"energia\",\"\"],\n" - + " \"key::55\": [\"agricultural\",\"agriculture\",\"agricoltura\",\"agricole\",\"agrícola\",\"agricultura\",\"agrícola\",\"agricultura\",\"landwirtschaftlich\",\"Landwirtschaft\",\"landbouwkundig\",\"landbouw\",\"αγροτικός\",\"αγροτική\",\"αγροτικό\",\"γεωργικός\",\"γεωργική\",\"γεωργικό\",\"γεωργία\",\"tarımsal\",\"tarım\",\"mezőgazdasági\",\"mezőgazdaság\",\"poljedelski\",\"poljedelstvo\",\"põllumajandus\",\"põllumajanduslik\",\"\"],\n" - + " \"key::56\": [\"information\",\"informazione\",\"información\",\"informação\",\"Information\",\"informatie\",\"πληροφορία\",\"bilgi\",\"információ\",\"informacija\",\"informatsioon\",\"informatycznych\",\"\"],\n" - + " \"key::57\": [\"social\",\"sociali\",\"social\",\"social\",\"Sozial\",\"sociaal\",\"maatschappelijk\",\"κοινωνικός\",\"κοινωνική\",\"κοινωνικό\",\"κοινωνικά\",\"sosyal\",\"szociális\",\"družbeni\",\"sotsiaal\",\"sotsiaalne\",\"\"],\n" - + " \"key::58\": [\"environmental\",\"ambiente\",\"medioambiental\",\"ambiente\",\"medioambiente\",\"meioambiente\",\"Umwelt\",\"milieu\",\"milieuwetenschap\",\"milieukunde\",\"περιβαλλοντικός\",\"περιβαλλοντική\",\"περιβαλλοντικό\",\"περιβαλλοντικά\",\"çevre\",\"környezeti\",\"okoliški\",\"keskonna\",\"\"],\n" - + " \"key::59\": [\"business\",\"economia\",\"economiche\",\"economica\",\"negocio\",\"empresa\",\"negócio\",\"Unternehmen\",\"bedrijf\",\"bedrijfskunde\",\"επιχείρηση\",\"iş\",\"üzleti\",\"posel\",\"ettevõte/äri\",\"\"],\n" - + " \"key::60\": [\"pharmaceuticals\",\"pharmacy\",\"farmacia\",\"farmaceutica\",\"farmacéutica\",\"farmacia\",\"farmacêutica\",\"farmácia\",\"Pharmazeutika\",\"Arzneimittelkunde\",\"farmaceutica\",\"geneesmiddelen\",\"apotheek\",\"φαρμακευτικός\",\"φαρμακευτική\",\"φαρμακευτικό\",\"φαρμακευτικά\",\"φαρμακείο\",\"ilaç\",\"eczane\",\"gyógyszerészeti\",\"gyógyszertár\",\"farmacevtika\",\"lekarništvo\",\"farmaatsia\",\"farmatseutiline\",\"\"],\n" - + " \"key::61\": [\"healthcare\",\"health services\",\"salute\",\"atenciónmédica\",\"cuidadodelasalud\",\"cuidadoscomasaúde\",\"Gesundheitswesen\",\"gezondheidszorg\",\"ιατροφαρμακευτικήπερίθαλψη\",\"sağlıkhizmeti\",\"egészségügy\",\"zdravstvo\",\"tervishoid\",\"tervishoiu\",\"\"],\n" - + " \"key::62\": [\"history\",\"storia\",\"historia\",\"história\",\"Geschichte\",\"geschiedenis\",\"geschiedkunde\",\"ιστορία\",\"tarih\",\"történelem\",\"zgodovina\",\"ajalugu\",\"\"],\n" - + " \"key::63\": [\"materials\",\"materiali\",\"materia\",\"materiales\",\"materiais\",\"materialen\",\"υλικά\",\"τεκμήρια\",\"malzemeler\",\"anyagok\",\"materiali\",\"materjalid\",\"vahendid\",\"\"],\n" - + " \"key::64\": [\"economics\",\"economia\",\"economiche\",\"economica\",\"economía\",\"economia\",\"Wirtschaft\",\"economie\",\"οικονομικά\",\"οικονομικέςεπιστήμες\",\"ekonomi\",\"közgazdaságtan\",\"gospodarstvo\",\"ekonomija\",\"majanduslik\",\"majandus\",\"\"],\n" - + " \"key::65\": [\"therapeutics\",\"terapeutica\",\"terapéutica\",\"terapêutica\",\"therapie\",\"θεραπευτική\",\"tedavibilimi\",\"gyógykezelés\",\"terapevtika\",\"terapeutiline\",\"ravi\",\"\"],\n" - + " \"key::66\": [\"oncology\",\"oncologia\",\"oncologico\",\"oncología\",\"oncologia\",\"Onkologie\",\"oncologie\",\"ογκολογία\",\"onkoloji\",\"onkológia\",\"onkologija\",\"onkoloogia\",\"\"],\n" - + " \"key::67\": [\"natural\",\"naturali\",\"naturale\",\"natural\",\"natural\",\"natürlich\",\"natuurlijk\",\"φυσικός\",\"φυσική\",\"φυσικό\",\"φυσικά\",\"doğal\",\"természetes\",\"naraven\",\"loodus\",\"\"],\n" - + " \"key::68\": [\"educational\",\"educazione\",\"pedagogia\",\"educacional\",\"educativo\",\"educacional\",\"pädagogisch\",\"educatief\",\"εκπαιδευτικός\",\"εκπαιδευτική\",\"εκπαιδευτικό\",\"εκπαιδευτικά\",\"eğitimsel\",\"oktatási\",\"izobraževalen\",\"haridus\",\"hariduslik\",\"\"],\n" - + " \"key::69\": [\"biomedical\",\"biomedica\",\"biomédico\",\"biomédico\",\"biomedizinisch\",\"biomedisch\",\"βιοιατρικός\",\"βιοιατρική\",\"βιοιατρικό\",\"βιοιατρικά\",\"biyomedikal\",\"orvosbiológiai\",\"biomedicinski\",\"biomeditsiiniline\",\"\"],\n" - + " \"key::70\": [\"veterinary\",\"veterinaria\",\"veterinarie\",\"veterinaria\",\"veterinária\",\"tierärtzlich\",\"veterinair\",\"veeartsenijlkunde\",\"κτηνιατρικός\",\"κτηνιατρική\",\"κτηνιατρικό\",\"κτηνιατρικά\",\"veteriner\",\"állatorvosi\",\"veterinar\",\"veterinarski\",\"veterinaaria\",\"\"],\n" - + " \"key::71\": [\"chemistry\",\"chimica\",\"química\",\"química\",\"Chemie\",\"chemie\",\"scheikunde\",\"χημεία\",\"kimya\",\"kémia\",\"kemija\",\"keemia\",\"\"],\n" - + " \"key::72\": [\"security\",\"sicurezza\",\"seguridad\",\"segurança\",\"Sicherheit\",\"veiligheid\",\"ασφάλεια\",\"güvenlik\",\"biztonsági\",\"varnost\",\"turvalisus\",\"julgeolek\",\"\"],\n" - + " \"key::73\": [\"biotechnology\",\"biotecnologia\",\"biotecnologie\",\"biotecnología\",\"biotecnologia\",\"Biotechnologie\",\"biotechnologie\",\"βιοτεχνολογία\",\"biyoteknoloji\",\"biotechnológia\",\"biotehnologija\",\"biotehnoloogia\",\"\"],\n" - + " \"key::74\": [\"military\",\"militare\",\"militari\",\"militar\",\"militar\",\"Militär\",\"militair\",\"leger\",\"στρατιωτικός\",\"στρατιωτική\",\"στρατιωτικό\",\"στρατιωτικά\",\"askeri\",\"katonai\",\"vojaški\",\"vojni\",\"militaar\",\"wojskowa\",\"\"],\n" - + " \"key::75\": [\"theological\",\"teologia\",\"teologico\",\"teológico\",\"tecnológica\",\"theologisch\",\"theologisch\",\"θεολογικός\",\"θεολογική\",\"θεολογικό\",\"θεολογικά\",\"teolojik\",\"technológiai\",\"teološki\",\"teoloogia\",\"usuteadus\",\"teoloogiline\",\"\"],\n" - + " \"key::76\": [\"electronics\",\"elettronica\",\"electrónica\",\"eletrônicos\",\"Elektronik\",\"elektronica\",\"ηλεκτρονική\",\"elektronik\",\"elektronika\",\"elektronika\",\"elektroonika\",\"\"],\n" - + " \"key::77\": [\"forestry\",\"forestale\",\"forestali\",\"silvicultura\",\"forestal\",\"floresta\",\"Forstwirtschaft\",\"bosbouw\",\"δασοκομία\",\"δασολογία\",\"ormancılık\",\"erdészet\",\"gozdarstvo\",\"metsandus\",\"\"],\n" - + " \"key::78\": [\"maritime\",\"marittima\",\"marittime\",\"marittimo\",\"marítimo\",\"marítimo\",\"maritiem\",\"ναυτικός\",\"ναυτική\",\"ναυτικό\",\"ναυτικά\",\"ναυτιλιακός\",\"ναυτιλιακή\",\"ναυτιλιακό\",\"ναυτιλιακά\",\"θαλάσσιος\",\"θαλάσσια\",\"θαλάσσιο\",\"denizcilik\",\"tengeri\",\"morski\",\"mere\",\"merendus\",\"\"],\n" - + " \"key::79\": [\"sports\",\"sport\",\"deportes\",\"esportes\",\"Sport\",\"sport\",\"sportwetenschappen\",\"άθληση\",\"γυμναστικήδραστηριότητα\",\"spor\",\"sport\",\"šport\",\"sport\",\"spordi\",\"\"],\n" - + " \"key::80\": [\"surgery\",\"chirurgia\",\"chirurgiche\",\"cirugía\",\"cirurgia\",\"Chirurgie\",\"chirurgie\",\"heelkunde\",\"εγχείρηση\",\"επέμβαση\",\"χειρουργικήεπέμβαση\",\"cerrahi\",\"sebészet\",\"kirurgija\",\"kirurgia\",\"\"],\n" - + " \"key::81\": [\"cultural\",\"culturale\",\"culturali\",\"cultura\",\"cultural\",\"cultural\",\"kulturell\",\"cultureel\",\"πολιτιστικός\",\"πολιτιστική\",\"πολιτιστικό\",\"πολιτισμικός\",\"πολιτισμική\",\"πολιτισμικό\",\"kültürel\",\"kultúrális\",\"kulturni\",\"kultuuri\",\"kultuuriline\",\"\"],\n" - + " \"key::82\": [\"computerscience\",\"informatica\",\"ordenador\",\"computadora\",\"informática\",\"computación\",\"cienciasdelacomputación\",\"ciênciadacomputação\",\"Computer\",\"computer\",\"υπολογιστής\",\"ηλεκτρονικόςυπολογιστής\",\"bilgisayar\",\"számítógép\",\"računalnik\",\"arvuti\",\"\"],\n" - + " \"key::83\": [\"finance\",\"financial\",\"finanza\",\"finanziarie\",\"finanza\",\"financiero\",\"finanças\",\"financeiro\",\"Finanzen\",\"finanziell\",\"financiën\",\"financieel\",\"χρηματοοικονομικά\",\"χρηματοδότηση\",\"finanse\",\"finansal\",\"pénzügy\",\"pénzügyi\",\"finance\",\"finančni\",\"finants\",\"finantsiline\",\"\"],\n" - + " \"key::84\": [\"communication\",\"comunicazione\",\"comuniciación\",\"comunicação\",\"Kommunikation\",\"communication\",\"επικοινωνία\",\"iletişim\",\"kommunikáció\",\"komuniciranje\",\"kommunikatsioon\",\"\"],\n" - + " \"key::85\": [\"justice\",\"giustizia\",\"justicia\",\"justiça\",\"Recht\",\"Justiz\",\"justitie\",\"gerechtigheid\",\"δικαιοσύνη\",\"υπουργείοδικαιοσύνης\",\"δίκαιο\",\"adalet\",\"igazságügy\",\"pravo\",\"õigus\",\"\"],\n" - + " \"key::86\": [\"aerospace\",\"aerospaziale\",\"aerospaziali\",\"aeroespacio\",\"aeroespaço\",\"Luftfahrt\",\"luchtvaart\",\"ruimtevaart\",\"αεροπορικός\",\"αεροπορική\",\"αεροπορικό\",\"αεροναυπηγικός\",\"αεροναυπηγική\",\"αεροναυπηγικό\",\"αεροναυπηγικά\",\"havacılıkveuzay\",\"légtér\",\"zrakoplovstvo\",\"atmosfäär\",\"kosmos\",\"\"],\n" - + " \"key::87\": [\"dermatology\",\"dermatologia\",\"dermatología\",\"dermatologia\",\"Dermatologie\",\"dermatologie\",\"δρματολογία\",\"dermatoloji\",\"bőrgyógyászat\",\"dermatológia\",\"dermatologija\",\"dermatoloogia\",\"\"],\n" - + " \"key::88\": [\"architecture\",\"architettura\",\"arquitectura\",\"arquitetura\",\"Architektur\",\"architectuur\",\"αρχιτεκτονική\",\"mimarlık\",\"építészet\",\"arhitektura\",\"arhitektuur\",\"\"],\n" - + " \"key::89\": [\"mathematics\",\"matematica\",\"matematiche\",\"matemáticas\",\"matemáticas\",\"Mathematik\",\"wiskunde\",\"mathematica\",\"μαθηματικά\",\"matematik\",\"matematika\",\"matematika\",\"matemaatika\",\"\"],\n" - + " \"key::90\": [\"language\",\"lingue\",\"linguistica\",\"linguistiche\",\"lenguaje\",\"idioma\",\"língua\",\"idioma\",\"Sprache\",\"taal\",\"taalkunde\",\"γλώσσα\",\"dil\",\"nyelv\",\"jezik\",\"keel\",\"\"],\n" - + " \"key::91\": [\"neuroscience\",\"neuroscienza\",\"neurociencia\",\"neurociência\",\"Neurowissenschaft\",\"neurowetenschappen\",\"νευροεπιστήμη\",\"nörobilim\",\"idegtudomány\",\"nevroznanost\",\"neuroteadused\",\"\"],\n" - + " \"key::92\": [\"automation\",\"automazione\",\"automatización\",\"automação\",\"Automatisierung\",\"automatisering\",\"αυτοματοποίηση\",\"otomasyon\",\"automatizálás\",\"avtomatizacija\",\"automatiseeritud\",\"\"],\n" - + " \"key::93\": [\"pediatric\",\"pediatria\",\"pediatriche\",\"pediatrico\",\"pediátrico\",\"pediatría\",\"pediátrico\",\"pediatria\",\"pädiatrisch\",\"pediatrische\",\"παιδιατρική\",\"pediatrik\",\"gyermekgyógyászat\",\"pediatrija\",\"pediaatria\",\"\"],\n" - + " \"key::94\": [\"photonics\",\"fotonica\",\"fotoniche\",\"fotónica\",\"fotônica\",\"Photonik\",\"fotonica\",\"φωτονική\",\"fotonik\",\"fotonika\",\"fotonika\",\"fotoonika\",\"\"],\n" - + " \"key::95\": [\"mechanics\", \"mechanical\", \"meccanica\",\"meccaniche\",\"mecánica\",\"mecânica\",\"Mechanik\",\"Maschinenbau\",\"mechanica\",\"werktuigkunde\",\"μηχανικής\",\"mekanik\",\"gépészet\",\"mehanika\",\"mehaanika\",\"\"],\n" - + " \"key::96\": [\"psychiatrics\",\"psichiatria\",\"psichiatrica\",\"psichiatriche\",\"psiquiatría\",\"psiquiatria\",\"Psychiatrie\",\"psychiatrie\",\"ψυχιατρική\",\"psikiyatrik\",\"pszihiátria\",\"psihiatrija\",\"psühhaatria\",\"\"],\n" - + " \"key::97\": [\"psychology\",\"fisiologia\",\"psicología\",\"psicologia\",\"Psychologie\",\"psychologie\",\"ψυχολογία\",\"psikoloji\",\"pszihológia\",\"psihologija\",\"psühholoogia\",\"\"],\n" - + " \"key::98\": [\"automotive\",\"industriaautomobilistica\",\"industriadelautomóvil\",\"automotriz\",\"industriaautomotriz\",\"automotivo\",\"Automobilindustrie\",\"autoindustrie\",\"αυτοκίνητος\",\"αυτοκίνητη\",\"αυτοκίνητο\",\"αυτοκινούμενος\",\"αυτοκινούμενη\",\"αυτοκινούμενο\",\"αυτοκινητιστικός\",\"αυτοκινητιστική\",\"αυτοκινητιστικό\",\"otomotiv\",\"autóipari\",\"samogiben\",\"avtomobilskaindustrija\",\"auto-\",\"\"],\n" - + " \"key::99\": [\"neurology\",\"neurologia\",\"neurologiche\",\"neurología\",\"neurologia\",\"Neurologie\",\"neurologie\",\"zenuwleer\",\"νευρολογία\",\"nöroloji\",\"neurológia\",\"ideggyógyászat\",\"nevrologija\",\"neuroloogia\",\"\"],\n" - + " \"key::100\": [\"geology\",\"geologia\",\"geologiche\",\"geología\",\"geologia\",\"Geologie\",\"geologie\",\"aardkunde\",\"γεωλογία\",\"jeoloji\",\"geológia\",\"földtudomány\",\"geologija\",\"geoloogia\",\"\"],\n" - + " \"key::101\": [\"microbiology\",\"microbiologia\",\"micro-biologia\",\"microbiologiche\",\"microbiología\",\"microbiologia\",\"Mikrobiologie\",\"microbiologie\",\"μικροβιολογία\",\"mikrobiyoloji\",\"mikrobiológia\",\"mikrobiologija\",\"mikrobioloogia\",\"\"],\n" - + " \"key::102\": [\"informatics\",\"informatica\",\"informática\",\"informática\",\"informatica\",\"\"],\n" - + " \"key::103\": [\"forschungsgemeinschaft\",\"comunita ricerca\",\"research community\",\"research foundation\",\"research association\"],\n" - + " \"key::104\": [\"commerce\",\"ticaret\",\"ticarət\",\"commercio\",\"trade\",\"handel\",\"comercio\"],\n" - + " \"key::105\" : [\"state\", \"stato\", \"etade\", \"estado\", \"statale\", \"etat\", \"zustand\", \"estado\"],\n" - + " \"key::106\" : [\"seminary\", \"seminario\", \"seminaire\", \"seminar\"],\n" - + " \"key::107\" : [\"agricultural forestry\", \"af\", \"a f\"],\n" - + " \"key::108\" : [\"agricultural mechanical\", \"am\", \"a m\"],\n" - + " \"key::109\" : [\"catholic\", \"catholique\", \"katholische\", \"catolica\", \"cattolica\", \"catolico\"]\n" - + " }\n" - + " }\n" - + "}"); - @Test - void testJPath() { + void testJPath() throws IOException { - MapDocument d = MapDocumentUtil.asMapDocumentWithJPath(conf, json); + DedupConfig conf = DedupConfig + .load(IOUtils.toString(getClass().getResourceAsStream("dedup_conf_organization.json"))); - Assertions.assertNotNull(d); - Assertions.assertTrue(StringUtils.isNotBlank(d.getIdentifier())); + final String org = IOUtils.toString(getClass().getResourceAsStream("organization.json")); - System.out.println("d = " + d); + Row row = SparkModel.apply(conf).rowFromJson(org); + + Assertions.assertNotNull(row); + Assertions.assertTrue(StringUtils.isNotBlank(row.getAs("identifier"))); } - @Test - void testNull() { - final Object p = null; - - System.out.println((String) p); - - } } diff --git a/dhp-workflows/dhp-dedup-openaire/src/test/resources/eu/dnetlib/dhp/oa/dedup/jpath/dedup_conf_organization.json b/dhp-workflows/dhp-dedup-openaire/src/test/resources/eu/dnetlib/dhp/oa/dedup/jpath/dedup_conf_organization.json new file mode 100644 index 000000000..726f2b899 --- /dev/null +++ b/dhp-workflows/dhp-dedup-openaire/src/test/resources/eu/dnetlib/dhp/oa/dedup/jpath/dedup_conf_organization.json @@ -0,0 +1,269 @@ +{ + "wf" : { + "threshold" : "0.99", + "dedupRun" : "001", + "entityType" : "organization", + "subEntityValue": "organization", + "orderField" : "legalname", + "queueMaxSize" : "2000", + "groupMaxSize" : "50", + "slidingWindowSize" : "200", + "idPath":"$.id", + "rootBuilder" : [ "organization", "projectOrganization_participation_isParticipant", "datasourceOrganization_provision_isProvidedBy" ], + "includeChildren" : "true", + "maxIterations": "20" + }, + "pace" : { + "clustering" : [ + { "name" : "sortedngrampairs", "fields" : [ "legalname" ], "params" : { "max" : 2, "ngramLen" : "3"} }, + { "name" : "suffixprefix", "fields" : [ "legalname" ], "params" : { "max" : 1, "len" : "3" } }, + { "name" : "urlclustering", "fields" : [ "websiteurl" ], "params" : { } }, + { "name" : "keywordsclustering", "fields" : [ "legalname" ], "params" : { "max": 2, "windowSize": 4} } + ], + "decisionTree" : { + "start": { + "fields": [ + { + "field": "gridid", + "comparator": "exactMatch", + "weight": 1, + "countIfUndefined": "false", + "params": {} + } + ], + "threshold": 1, + "aggregation": "AVG", + "positive": "MATCH", + "negative": "NO_MATCH", + "undefined": "layer2", + "ignoreUndefined": "false" + }, + "layer2": { + "fields": [ + { + "field": "websiteurl", + "comparator": "domainExactMatch", + "weight": 1, + "countIfUndefined": "false", + "params": {} + }, + { + "field": "country", + "comparator": "exactMatch", + "weight": 1, + "countIfUndefined": "true", + "params": {} + }, + { + "field": "legalname", + "comparator": "numbersMatch", + "weight": 1, + "countIfUndefined": "true", + "params": {} + }, + { + "field": "legalname", + "comparator": "romansMatch", + "weight": 1, + "countIfUndefined": "true", + "params": {} + } + ], + "threshold": 1, + "aggregation": "AND", + "positive": "layer3", + "negative": "NO_MATCH", + "undefined": "layer3", + "ignoreUndefined": "true" + }, + "layer3": { + "fields": [ + { + "field": "legalname", + "comparator": "cityMatch", + "weight": 1.0, + "countIfUndefined": "true", + "params": { + "windowSize": "4" + } + } + ], + "threshold": 0.1, + "aggregation": "AVG", + "positive": "layer4", + "negative": "NO_MATCH", + "undefined": "NO_MATCH", + "ignoreUndefined": "true" + }, + "layer4": { + "fields": [ + { + "field": "legalname", + "comparator": "keywordMatch", + "weight": 1.0, + "countIfUndefined": "true", + "params": { + "windowSize": "4" + } + } + ], + "threshold": 0.7, + "aggregation": "AVG", + "positive": "layer5", + "negative": "NO_MATCH", + "undefined": "layer5", + "ignoreUndefined": "true" + }, + "layer5": { + "fields": [ + { + "field": "legalname", + "comparator": "jaroWinklerNormalizedName", + "weight": 0.9, + "countIfUndefined": "true", + "params": { + "windowSize": "4" + } + }, + { + "field": "legalshortname", + "comparator": "jaroWinklerNormalizedName", + "weight": 0.1, + "countIfUndefined": "false", + "params": { + "windowSize": 4 + } + } + ], + "threshold": 0.9, + "aggregation": "W_MEAN", + "positive": "MATCH", + "negative": "NO_MATCH", + "undefined": "NO_MATCH", + "ignoreUndefined": "true" + } + }, + "model" : [ + { "name" : "country", "type" : "String", "path" : "$.country.classid"}, + { "name" : "legalshortname", "type" : "String", "path" : "$.legalshortname.value"}, + { "name" : "legalname", "type" : "String", "path" : "$.legalname.value" }, + { "name" : "websiteurl", "type" : "URL", "path" : "$.websiteurl.value" }, + { "name" : "gridid", "type" : "String", "path" : "$.pid[?(@.qualifier.classid =='grid')].value"}, + { "name" : "originalId", "type" : "String", "path" : "$.id" } + ], + "blacklists" : { + "legalname" : [] + }, + "synonyms": { + "key::1": ["university","università", "universitas", "università studi","universitario","universitaria","université", "universite", "universitaire","universitaires","universidad","universitade","Universität","universitaet","Uniwersytet","университет","universiteit","πανεπιστήμιο","universitesi","universiteti", "universiti"], + "key::2": ["studies","studi","études","estudios","estudos","Studien","studia","исследования","studies","σπουδές"], + "key::3": ["advanced","superiore","supérieur","supérieure","supérieurs","supérieures","avancado","avancados","fortgeschrittene","fortgeschritten","zaawansowany","передовой","gevorderd","gevorderde","προχωρημένος","προχωρημένη","προχωρημένο","προχωρημένες","προχωρημένα","wyzsza"], + "key::4": ["institute","istituto","institut","instituto","instituto","Institut","instytut","институт","instituut","ινστιτούτο"], + "key::5": ["hospital","ospedale","hôpital","hospital","hospital","Krankenhaus","szpital","больница","ziekenhuis","νοσοκομείο"], + "key::6": ["research","ricerca","recherche","investigacion","pesquisa","Forschung","badania","исследования","onderzoek","έρευνα","erevna","erevnas"], + "key::7": ["college","collegio","colegio","faculdade","Hochschule","Szkoła Wyższa","Высшая школа","κολλέγιο"], + "key::8": ["foundation","fondazione","fondation","fundación","fundação","Stiftung","Fundacja","фонд","stichting","ίδρυμα","idryma"], + "key::9": ["center","centro","centre","centro","centro","zentrum","centrum","центр","centrum","κέντρο"], + "key::10": ["national","nazionale","national","nationale","nationaux","nationales","nacional","nacional","national","krajowy","национальный","nationaal","nationale","εθνικό"], + "key::11": ["association","associazione","association","asociación","associação","Verein","verband","stowarzyszenie","ассоциация","associatie"], + "key::12": ["society","societa","société","sociedad","sociedade","gesellschaft","społeczeństwo","общество","maatschappij","κοινωνία"], + "key::13": ["international","internazionale","international","internacional","internacional","international","międzynarodowy","Международный","internationaal","internationale","διεθνής","διεθνή","διεθνές"], + "key::14": ["community","comunita","communauté","comunidad","comunidade","Gemeinschaft","społeczność","сообщество","gemeenschap","κοινότητα"], + "key::15": ["school","scuola","école","escuela","escola","schule","Szkoła","школа","school","σχολείο"], + "key::16": ["education","educazione","éducation","educacion","Educação","Bildung","Edukacja","образование","opleiding","εκπαίδευση"], + "key::17": ["academy","accademia","académie","academia","academia","Akademie","akademie","академия","academie","ακαδημία"], + "key::18": ["public","pubblico","public","publique","publics","publiques","publico","publico","Öffentlichkeit","publiczny","публичный","publiek","publieke","δημόσιος","δημόσια","δημόσιο"], + "key::19": ["museum","museo","musée","mueso","museu","museum","muzeum","музей","museum","μουσείο"], + "key::20": ["group","gruppo","groupe","grupo","grupo","gruppe","grupa","группа","groep","ομάδα","όμιλος"], + "key::21": ["department","dipartimento","département","departamento","departamento","abteilung","departament","отдел","afdeling","τμήμα"], + "key::22": ["council","consiglio","conseil","Consejo","conselho","gesellschaft","rada","совет","raad","συμβούλιο"], + "key::23": ["library","biblioteca","bibliothèque","biblioteca","biblioteca","Bibliothek","biblioteka","библиотека","bibliotheek","βιβλιοθήκη"], + "key::24": ["ministry","ministero","ministère","ministerio","ministério","Ministerium","ministerstwo","министерство","ministerie","υπουργείο"], + "key::25": ["services","servizi","services","servicios","Serviços","Dienstleistungen","usługi","услуги","diensten","υπηρεσίες"], + "key::26": ["central","centrale","central","centrale","centrales","central","central","zentral","centralny","цетральный","centraal","κεντρικός","κεντρική","κεντρικό","κεντρικά"], + "key::27": ["general","generale","général","générale","généraux","générales","general","geral","general","Allgemeines","general","общий","algemeen","algemene","γενικός","γενική","γενικό","γενικά"], + "key::28": ["applied","applicati","appliqué","appliquée","appliqués","appliquées","aplicado","aplicada","angewendet","stosowany","прикладной","toegepast","toegepaste","εφαρμοσμένος","εφαρμοσμένη","εφαρμοσμένο","εφαρμοσμένα"], + "key::29": ["european","europee","europea","européen","européenne","européens","européennes","europeo","europeu","europäisch","europejski","европейский","Europees","Europese","ευρωπαϊκός","ευρωπαϊκή","ευρωπαϊκό","ευρωπαϊκά"], + "key::30": ["agency","agenzia","agence","agencia","agencia","agentur","agencja","агенция","agentschap","πρακτορείο"], + "key::31": ["laboratory","laboratorio","laboratoire","laboratorio","laboratorio","labor","laboratorium","лаборатория","laboratorium","εργαστήριο"], + "key::32": ["industry","industria","industrie","индустрия","industrie","βιομηχανία"], + "key::33": ["industrial","industriale","industriel","industrielle","industriels","industrielles","индустриальный","industrieel","βιομηχανικός","βιομηχανική","βιομηχανικό","βιομηχανικά","βιομηχανικές"], + "key::34": ["consortium","consorzio","consortium","консорциум","consortium","κοινοπραξία"], + "key::35": ["organization","organizzazione","organisation","organización","organização","organizacja","организация","organisatie","οργανισμός"], + "key::36": ["authority","autorità","autorité","авторитет","autoriteit"], + "key::37": ["federation","federazione","fédération","федерация","federatie","ομοσπονδία"], + "key::38": ["observatory","osservatorio","observatoire","обсерватория","observatorium","αστεροσκοπείο"], + "key::39": ["bureau","ufficio","bureau","офис","bureau","γραφείο"], + "key::40": ["company","impresa","compagnie","société","компания","bedrijf","εταιρία"], + "key::41": ["polytechnic","politecnico","polytechnique","политехника","polytechnisch","πολυτεχνείο","universita politecnica","polytechnic university","universidad politecnica","universitat politecnica","politechnika","politechniki","university technology","university science technology"], + "key::42": ["coalition","coalizione","coalition","коалиция","coalitie","συνασπισμός"], + "key::43": ["initiative","iniziativa","initiative","инициатива","initiatief","πρωτοβουλία"], + "key::44": ["academic","accademico","académique","universitaire","акадеческий academisch","ακαδημαϊκός","ακαδημαϊκή","ακαδημαϊκό","ακαδημαϊκές","ακαδημαϊκοί"], + "key::45": ["institution","istituzione","institution","институциональный","instelling","ινστιτούτο"], + "key::46": ["division","divisione","division","отделение","divisie","τμήμα"], + "key::47": ["committee","comitato","comité","комитет","commissie","επιτροπή"], + "key::48": ["promotion","promozione","продвижение","proothisis","forderung"], + "key::49": ["medical","medicine","clinical","medicina","clinici","médico","medicina","clínica","médico","medicina","clínica","medizinisch","Medizin","klinisch","medisch","geneeskunde","klinisch","ιατρικός","ιατρική","ιατρικό","ιατρικά","κλινικός","κλινική","κλινικό","κλινικά","tıbbi","tıp","klinik","orvosi","orvostudomány","klinikai","zdravniški","medicinski","klinični","meditsiini","kliinik","kliiniline"], + "key::50": ["technology","technological","tecnologia","tecnologie","tecnología","tecnológico","tecnologia","tecnológico","Technologie","technologisch","technologie","technologisch","τεχνολογία","τεχνολογικός","τεχνολογική","τεχνολογικό","teknoloji","teknolojik","technológia","technológiai","tehnologija","tehnološki","tehnoloogia","tehnoloogiline","technologii","technical","texniki","teknik"], + "key::51": ["science","scientific","scienza","scientifiche","scienze","ciencia","científico","ciência","científico","Wissenschaft","wissenschaftlich","wetenschap","wetenschappelijk","επιστήμη","επιστημονικός","επιστημονική","επιστημονικό","επιστημονικά","bilim","bilimsel","tudomány","tudományos","znanost","znanstveni","teadus","teaduslik",""], + "key::52": ["engineering","ingegneria","ingeniería","engenharia","Ingenieurwissenschaft","ingenieurswetenschappen","bouwkunde","μηχανικός","μηχανική","μηχανικό","mühendislik","mérnöki","Inženirstvo","inseneeria","inseneri",""], + "key::53": ["management","gestione","gestionale","gestionali","gestión","administración","gestão","administração","Verwaltung","management","διαχείριση","yönetim","menedzsment","vodstvo","upravljanje","management","juhtkond","juhtimine","haldus",""], + "key::54": ["energy","energia","energía","energia","Energie","energie","ενέργεια","enerji","energia","energija","energia",""], + "key::55": ["agricultural","agriculture","agricoltura","agricole","agrícola","agricultura","agrícola","agricultura","landwirtschaftlich","Landwirtschaft","landbouwkundig","landbouw","αγροτικός","αγροτική","αγροτικό","γεωργικός","γεωργική","γεωργικό","γεωργία","tarımsal","tarım","mezőgazdasági","mezőgazdaság","poljedelski","poljedelstvo","põllumajandus","põllumajanduslik",""], + "key::56": ["information","informazione","información","informação","Information","informatie","πληροφορία","bilgi","információ","informacija","informatsioon","informatycznych",""], + "key::57": ["social","sociali","social","social","Sozial","sociaal","maatschappelijk","κοινωνικός","κοινωνική","κοινωνικό","κοινωνικά","sosyal","szociális","družbeni","sotsiaal","sotsiaalne",""], + "key::58": ["environmental","ambiente","medioambiental","ambiente","medioambiente","meioambiente","Umwelt","milieu","milieuwetenschap","milieukunde","περιβαλλοντικός","περιβαλλοντική","περιβαλλοντικό","περιβαλλοντικά","çevre","környezeti","okoliški","keskonna",""], + "key::59": ["business","economia","economiche","economica","negocio","empresa","negócio","Unternehmen","bedrijf","bedrijfskunde","επιχείρηση","iş","üzleti","posel","ettevõte/äri",""], + "key::60": ["pharmaceuticals","pharmacy","farmacia","farmaceutica","farmacéutica","farmacia","farmacêutica","farmácia","Pharmazeutika","Arzneimittelkunde","farmaceutica","geneesmiddelen","apotheek","φαρμακευτικός","φαρμακευτική","φαρμακευτικό","φαρμακευτικά","φαρμακείο","ilaç","eczane","gyógyszerészeti","gyógyszertár","farmacevtika","lekarništvo","farmaatsia","farmatseutiline",""], + "key::61": ["healthcare","health services","salute","atenciónmédica","cuidadodelasalud","cuidadoscomasaúde","Gesundheitswesen","gezondheidszorg","ιατροφαρμακευτικήπερίθαλψη","sağlıkhizmeti","egészségügy","zdravstvo","tervishoid","tervishoiu",""], + "key::62": ["history","storia","historia","história","Geschichte","geschiedenis","geschiedkunde","ιστορία","tarih","történelem","zgodovina","ajalugu",""], + "key::63": ["materials","materiali","materia","materiales","materiais","materialen","υλικά","τεκμήρια","malzemeler","anyagok","materiali","materjalid","vahendid",""], + "key::64": ["economics","economia","economiche","economica","economía","economia","Wirtschaft","economie","οικονομικά","οικονομικέςεπιστήμες","ekonomi","közgazdaságtan","gospodarstvo","ekonomija","majanduslik","majandus",""], + "key::65": ["therapeutics","terapeutica","terapéutica","terapêutica","therapie","θεραπευτική","tedavibilimi","gyógykezelés","terapevtika","terapeutiline","ravi",""], + "key::66": ["oncology","oncologia","oncologico","oncología","oncologia","Onkologie","oncologie","ογκολογία","onkoloji","onkológia","onkologija","onkoloogia",""], + "key::67": ["natural","naturali","naturale","natural","natural","natürlich","natuurlijk","φυσικός","φυσική","φυσικό","φυσικά","doğal","természetes","naraven","loodus",""], + "key::68": ["educational","educazione","pedagogia","educacional","educativo","educacional","pädagogisch","educatief","εκπαιδευτικός","εκπαιδευτική","εκπαιδευτικό","εκπαιδευτικά","eğitimsel","oktatási","izobraževalen","haridus","hariduslik",""], + "key::69": ["biomedical","biomedica","biomédico","biomédico","biomedizinisch","biomedisch","βιοιατρικός","βιοιατρική","βιοιατρικό","βιοιατρικά","biyomedikal","orvosbiológiai","biomedicinski","biomeditsiiniline",""], + "key::70": ["veterinary","veterinaria","veterinarie","veterinaria","veterinária","tierärtzlich","veterinair","veeartsenijlkunde","κτηνιατρικός","κτηνιατρική","κτηνιατρικό","κτηνιατρικά","veteriner","állatorvosi","veterinar","veterinarski","veterinaaria",""], + "key::71": ["chemistry","chimica","química","química","Chemie","chemie","scheikunde","χημεία","kimya","kémia","kemija","keemia",""], + "key::72": ["security","sicurezza","seguridad","segurança","Sicherheit","veiligheid","ασφάλεια","güvenlik","biztonsági","varnost","turvalisus","julgeolek",""], + "key::73": ["biotechnology","biotecnologia","biotecnologie","biotecnología","biotecnologia","Biotechnologie","biotechnologie","βιοτεχνολογία","biyoteknoloji","biotechnológia","biotehnologija","biotehnoloogia",""], + "key::74": ["military","militare","militari","militar","militar","Militär","militair","leger","στρατιωτικός","στρατιωτική","στρατιωτικό","στρατιωτικά","askeri","katonai","vojaški","vojni","militaar","wojskowa",""], + "key::75": ["theological","teologia","teologico","teológico","tecnológica","theologisch","theologisch","θεολογικός","θεολογική","θεολογικό","θεολογικά","teolojik","technológiai","teološki","teoloogia","usuteadus","teoloogiline",""], + "key::76": ["electronics","elettronica","electrónica","eletrônicos","Elektronik","elektronica","ηλεκτρονική","elektronik","elektronika","elektronika","elektroonika",""], + "key::77": ["forestry","forestale","forestali","silvicultura","forestal","floresta","Forstwirtschaft","bosbouw","δασοκομία","δασολογία","ormancılık","erdészet","gozdarstvo","metsandus",""], + "key::78": ["maritime","marittima","marittime","marittimo","marítimo","marítimo","maritiem","ναυτικός","ναυτική","ναυτικό","ναυτικά","ναυτιλιακός","ναυτιλιακή","ναυτιλιακό","ναυτιλιακά","θαλάσσιος","θαλάσσια","θαλάσσιο","denizcilik","tengeri","morski","mere","merendus",""], + "key::79": ["sports","sport","deportes","esportes","Sport","sport","sportwetenschappen","άθληση","γυμναστικήδραστηριότητα","spor","sport","šport","sport","spordi",""], + "key::80": ["surgery","chirurgia","chirurgiche","cirugía","cirurgia","Chirurgie","chirurgie","heelkunde","εγχείρηση","επέμβαση","χειρουργικήεπέμβαση","cerrahi","sebészet","kirurgija","kirurgia",""], + "key::81": ["cultural","culturale","culturali","cultura","cultural","cultural","kulturell","cultureel","πολιτιστικός","πολιτιστική","πολιτιστικό","πολιτισμικός","πολιτισμική","πολιτισμικό","kültürel","kultúrális","kulturni","kultuuri","kultuuriline",""], + "key::82": ["computerscience","informatica","ordenador","computadora","informática","computación","cienciasdelacomputación","ciênciadacomputação","Computer","computer","υπολογιστής","ηλεκτρονικόςυπολογιστής","bilgisayar","számítógép","računalnik","arvuti",""], + "key::83": ["finance","financial","finanza","finanziarie","finanza","financiero","finanças","financeiro","Finanzen","finanziell","financiën","financieel","χρηματοοικονομικά","χρηματοδότηση","finanse","finansal","pénzügy","pénzügyi","finance","finančni","finants","finantsiline",""], + "key::84": ["communication","comunicazione","comuniciación","comunicação","Kommunikation","communication","επικοινωνία","iletişim","kommunikáció","komuniciranje","kommunikatsioon",""], + "key::85": ["justice","giustizia","justicia","justiça","Recht","Justiz","justitie","gerechtigheid","δικαιοσύνη","υπουργείοδικαιοσύνης","δίκαιο","adalet","igazságügy","pravo","õigus",""], + "key::86": ["aerospace","aerospaziale","aerospaziali","aeroespacio","aeroespaço","Luftfahrt","luchtvaart","ruimtevaart","αεροπορικός","αεροπορική","αεροπορικό","αεροναυπηγικός","αεροναυπηγική","αεροναυπηγικό","αεροναυπηγικά","havacılıkveuzay","légtér","zrakoplovstvo","atmosfäär","kosmos",""], + "key::87": ["dermatology","dermatologia","dermatología","dermatologia","Dermatologie","dermatologie","δρματολογία","dermatoloji","bőrgyógyászat","dermatológia","dermatologija","dermatoloogia",""], + "key::88": ["architecture","architettura","arquitectura","arquitetura","Architektur","architectuur","αρχιτεκτονική","mimarlık","építészet","arhitektura","arhitektuur",""], + "key::89": ["mathematics","matematica","matematiche","matemáticas","matemáticas","Mathematik","wiskunde","mathematica","μαθηματικά","matematik","matematika","matematika","matemaatika",""], + "key::90": ["language","lingue","linguistica","linguistiche","lenguaje","idioma","língua","idioma","Sprache","taal","taalkunde","γλώσσα","dil","nyelv","jezik","keel",""], + "key::91": ["neuroscience","neuroscienza","neurociencia","neurociência","Neurowissenschaft","neurowetenschappen","νευροεπιστήμη","nörobilim","idegtudomány","nevroznanost","neuroteadused",""], + "key::92": ["automation","automazione","automatización","automação","Automatisierung","automatisering","αυτοματοποίηση","otomasyon","automatizálás","avtomatizacija","automatiseeritud",""], + "key::93": ["pediatric","pediatria","pediatriche","pediatrico","pediátrico","pediatría","pediátrico","pediatria","pädiatrisch","pediatrische","παιδιατρική","pediatrik","gyermekgyógyászat","pediatrija","pediaatria",""], + "key::94": ["photonics","fotonica","fotoniche","fotónica","fotônica","Photonik","fotonica","φωτονική","fotonik","fotonika","fotonika","fotoonika",""], + "key::95": ["mechanics", "mechanical", "meccanica","meccaniche","mecánica","mecânica","Mechanik","Maschinenbau","mechanica","werktuigkunde","μηχανικής","mekanik","gépészet","mehanika","mehaanika",""], + "key::96": ["psychiatrics","psichiatria","psichiatrica","psichiatriche","psiquiatría","psiquiatria","Psychiatrie","psychiatrie","ψυχιατρική","psikiyatrik","pszihiátria","psihiatrija","psühhaatria",""], + "key::97": ["psychology","fisiologia","psicología","psicologia","Psychologie","psychologie","ψυχολογία","psikoloji","pszihológia","psihologija","psühholoogia",""], + "key::98": ["automotive","industriaautomobilistica","industriadelautomóvil","automotriz","industriaautomotriz","automotivo","Automobilindustrie","autoindustrie","αυτοκίνητος","αυτοκίνητη","αυτοκίνητο","αυτοκινούμενος","αυτοκινούμενη","αυτοκινούμενο","αυτοκινητιστικός","αυτοκινητιστική","αυτοκινητιστικό","otomotiv","autóipari","samogiben","avtomobilskaindustrija","auto-",""], + "key::99": ["neurology","neurologia","neurologiche","neurología","neurologia","Neurologie","neurologie","zenuwleer","νευρολογία","nöroloji","neurológia","ideggyógyászat","nevrologija","neuroloogia",""], + "key::100": ["geology","geologia","geologiche","geología","geologia","Geologie","geologie","aardkunde","γεωλογία","jeoloji","geológia","földtudomány","geologija","geoloogia",""], + "key::101": ["microbiology","microbiologia","micro-biologia","microbiologiche","microbiología","microbiologia","Mikrobiologie","microbiologie","μικροβιολογία","mikrobiyoloji","mikrobiológia","mikrobiologija","mikrobioloogia",""], + "key::102": ["informatics","informatica","informática","informática","informatica",""], + "key::103": ["forschungsgemeinschaft","comunita ricerca","research community","research foundation","research association"], + "key::104": ["commerce","ticaret","ticarət","commercio","trade","handel","comercio"], + "key::105" : ["state", "stato", "etade", "estado", "statale", "etat", "zustand", "estado"], + "key::106" : ["seminary", "seminario", "seminaire", "seminar"], + "key::107" : ["agricultural forestry", "af", "a f"], + "key::108" : ["agricultural mechanical", "am", "a m"], + "key::109" : ["catholic", "catholique", "katholische", "catolica", "cattolica", "catolico"] + } + } +} \ No newline at end of file diff --git a/dhp-workflows/dhp-dedup-openaire/src/test/resources/eu/dnetlib/dhp/oa/dedup/jpath/organization.json b/dhp-workflows/dhp-dedup-openaire/src/test/resources/eu/dnetlib/dhp/oa/dedup/jpath/organization.json new file mode 100644 index 000000000..f3777ec0c --- /dev/null +++ b/dhp-workflows/dhp-dedup-openaire/src/test/resources/eu/dnetlib/dhp/oa/dedup/jpath/organization.json @@ -0,0 +1,241 @@ +{ + "dataInfo": { + "invisible": false, + "inferred": false, + "deletedbyinference": false, + "trust": "0.810000002384185791", + "inferenceprovenance": "", + "provenanceaction": { + "classid": "sysimport:crosswalk:entityregistry", + "classname": "sysimport:crosswalk:entityregistry", + "schemeid": "dnet:provenance_actions", + "schemename": "dnet:provenance_actions" + } + }, + "lastupdatetimestamp": 1584960968152, + "id": "20|corda__h2020::9faf23721249f26ac2c16eb857ea1fb9", + "originalId": ["corda__h2020::927957582"], + "collectedfrom": [ + { + "key": "openaire____::corda_h2020", + "value": "CORDA - COmmon Research DAta Warehouse - Horizon 2020", + "dataInfo": null + } + ], + "pid": [], + "dateofcollection": "2016-06-05", + "dateoftransformation": "2019-11-19", + "extraInfo": [], + "oaiprovenance": null, + "legalshortname": { + "value": "Comentor AB", + "dataInfo": { + "invisible": false, + "inferred": false, + "deletedbyinference": false, + "trust": "0.810000002384185791", + "inferenceprovenance": "", + "provenanceaction": { + "classid": "sysimport:crosswalk:entityregistry", + "classname": "sysimport:crosswalk:entityregistry", + "schemeid": "dnet:provenance_actions", + "schemename": "dnet:provenance_actions" + } + } + }, + "legalname": { + "value": "Comentor AB", + "dataInfo": { + "invisible": false, + "inferred": false, + "deletedbyinference": false, + "trust": "0.810000002384185791", + "inferenceprovenance": "", + "provenanceaction": { + "classid": "sysimport:crosswalk:entityregistry", + "classname": "sysimport:crosswalk:entityregistry", + "schemeid": "dnet:provenance_actions", + "schemename": "dnet:provenance_actions" + } + } + }, + "alternativeNames": [], + "websiteurl": { + "value": "http://www.comentor.se", + "dataInfo": { + "invisible": false, + "inferred": false, + "deletedbyinference": false, + "trust": "0.810000002384185791", + "inferenceprovenance": "", + "provenanceaction": { + "classid": "sysimport:crosswalk:entityregistry", + "classname": "sysimport:crosswalk:entityregistry", + "schemeid": "dnet:provenance_actions", + "schemename": "dnet:provenance_actions" + } + } + }, + "logourl": null, + "eclegalbody": { + "value": "false", + "dataInfo": { + "invisible": false, + "inferred": false, + "deletedbyinference": false, + "trust": "0.810000002384185791", + "inferenceprovenance": "", + "provenanceaction": { + "classid": "sysimport:crosswalk:entityregistry", + "classname": "sysimport:crosswalk:entityregistry", + "schemeid": "dnet:provenance_actions", + "schemename": "dnet:provenance_actions" + } + } + }, + "eclegalperson": { + "value": "true", + "dataInfo": { + "invisible": false, + "inferred": false, + "deletedbyinference": false, + "trust": "0.810000002384185791", + "inferenceprovenance": "", + "provenanceaction": { + "classid": "sysimport:crosswalk:entityregistry", + "classname": "sysimport:crosswalk:entityregistry", + "schemeid": "dnet:provenance_actions", + "schemename": "dnet:provenance_actions" + } + } + }, + "ecnonprofit": { + "value": "false", + "dataInfo": { + "invisible": false, + "inferred": false, + "deletedbyinference": false, + "trust": "0.810000002384185791", + "inferenceprovenance": "", + "provenanceaction": { + "classid": "sysimport:crosswalk:entityregistry", + "classname": "sysimport:crosswalk:entityregistry", + "schemeid": "dnet:provenance_actions", + "schemename": "dnet:provenance_actions" + } + } + }, + "ecresearchorganization": { + "value": "false", + "dataInfo": { + "invisible": false, + "inferred": false, + "deletedbyinference": false, + "trust": "0.810000002384185791", + "inferenceprovenance": "", + "provenanceaction": { + "classid": "sysimport:crosswalk:entityregistry", + "classname": "sysimport:crosswalk:entityregistry", + "schemeid": "dnet:provenance_actions", + "schemename": "dnet:provenance_actions" + } + } + }, + "echighereducation": { + "value": "false", + "dataInfo": { + "invisible": false, + "inferred": false, + "deletedbyinference": false, + "trust": "0.810000002384185791", + "inferenceprovenance": "", + "provenanceaction": { + "classid": "sysimport:crosswalk:entityregistry", + "classname": "sysimport:crosswalk:entityregistry", + "schemeid": "dnet:provenance_actions", + "schemename": "dnet:provenance_actions" + } + } + }, + "ecinternationalorganizationeurinterests": { + "value": "false", + "dataInfo": { + "invisible": false, + "inferred": false, + "deletedbyinference": false, + "trust": "0.810000002384185791", + "inferenceprovenance": "", + "provenanceaction": { + "classid": "sysimport:crosswalk:entityregistry", + "classname": "sysimport:crosswalk:entityregistry", + "schemeid": "dnet:provenance_actions", + "schemename": "dnet:provenance_actions" + } + } + }, + "ecinternationalorganization": { + "value": "false", + "dataInfo": { + "invisible": false, + "inferred": false, + "deletedbyinference": false, + "trust": "0.810000002384185791", + "inferenceprovenance": "", + "provenanceaction": { + "classid": "sysimport:crosswalk:entityregistry", + "classname": "sysimport:crosswalk:entityregistry", + "schemeid": "dnet:provenance_actions", + "schemename": "dnet:provenance_actions" + } + } + }, + "ecenterprise": { + "value": "false", + "dataInfo": { + "invisible": false, + "inferred": false, + "deletedbyinference": false, + "trust": "0.810000002384185791", + "inferenceprovenance": "", + "provenanceaction": { + "classid": "sysimport:crosswalk:entityregistry", + "classname": "sysimport:crosswalk:entityregistry", + "schemeid": "dnet:provenance_actions", + "schemename": "dnet:provenance_actions" + } + } + }, + "ecsmevalidated": { + "value": "true", + "dataInfo": { + "invisible": false, + "inferred": false, + "deletedbyinference": false, + "trust": "0.810000002384185791", + "inferenceprovenance": "", + "provenanceaction": { + "classid": "sysimport:crosswalk:entityregistry", + "classname": "sysimport:crosswalk:entityregistry", + "schemeid": "dnet:provenance_actions", + "schemename": "dnet:provenance_actions" + } + } + }, + "ecnutscode": { + "value": "false", + "dataInfo": { + "invisible": false, + "inferred": false, + "deletedbyinference": false, + "trust": "0.810000002384185791", + "inferenceprovenance": "", + "provenanceaction": { + "classid": "sysimport:crosswalk:entityregistry", + "classname": "sysimport:crosswalk:entityregistry", + "schemeid": "dnet:provenance_actions", + "schemename": "dnet:provenance_actions" + } + } + }, + "country": null +} diff --git a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/orcidtoresultfromsemrel/OrcidPropagationJobTest.java b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/orcidtoresultfromsemrel/OrcidPropagationJobTest.java index 85db7ecf9..40849132e 100644 --- a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/orcidtoresultfromsemrel/OrcidPropagationJobTest.java +++ b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/orcidtoresultfromsemrel/OrcidPropagationJobTest.java @@ -19,10 +19,8 @@ import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.cloudera.org.codehaus.jackson.map.jsontype.impl.ClassNameIdResolver; import com.fasterxml.jackson.databind.ObjectMapper; -import eu.dnetlib.dhp.PropagationConstant; import eu.dnetlib.dhp.schema.common.ModelConstants; import eu.dnetlib.dhp.schema.oaf.Dataset; diff --git a/dhp-workflows/dhp-graph-mapper/src/main/scala/eu/dnetlib/dhp/sx/graph/SparkCreateInputGraph.scala b/dhp-workflows/dhp-graph-mapper/src/main/scala/eu/dnetlib/dhp/sx/graph/SparkCreateInputGraph.scala index 9d57e5869..704c9ab5c 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/scala/eu/dnetlib/dhp/sx/graph/SparkCreateInputGraph.scala +++ b/dhp-workflows/dhp-graph-mapper/src/main/scala/eu/dnetlib/dhp/sx/graph/SparkCreateInputGraph.scala @@ -130,7 +130,7 @@ object SparkCreateInputGraph { val ds: Dataset[T] = spark.read.load(sourcePath).as[T] ds.groupByKey(_.getId) - .reduceGroups { (x, y) => + .reduceGroups { (x: T, y: T) => x.mergeFrom(y) x } diff --git a/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/XmlIndexingJob.java b/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/XmlIndexingJob.java index 1560fcbd9..cd401c6cb 100644 --- a/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/XmlIndexingJob.java +++ b/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/XmlIndexingJob.java @@ -156,6 +156,11 @@ public class XmlIndexingJob { switch (outputFormat) { case SOLR: final String collection = ProvisionConstants.getCollectionName(format); + + // SparkSolr >= 4 + // com.lucidworks.spark.BatchSizeType bt = com.lucidworks.spark.BatchSizeType.NUM_DOCS; + // SolrSupport.indexDocs(zkHost, collection, batchSize, bt, docs.rdd()); + // SparkSolr < 4 SolrSupport.indexDocs(zkHost, collection, batchSize, docs.rdd()); break; case HDFS: diff --git a/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/utils/XmlRecordFactory.java b/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/utils/XmlRecordFactory.java index e88b49de4..19d889d90 100644 --- a/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/utils/XmlRecordFactory.java +++ b/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/utils/XmlRecordFactory.java @@ -31,7 +31,6 @@ import org.dom4j.Node; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; -import org.json4s.Xml; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.base.Joiner; From 270df939c451ff9a5b166b79436c22d9b3609afb Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Tue, 25 Jul 2023 17:29:50 +0200 Subject: [PATCH 252/449] partial implementation of the suggestions from https://support.openaire.eu/issues/8898 --- .../oaf/utils/GraphCleaningFunctions.java | 57 ++++++++++++++++--- .../clean/GraphCleaningFunctionsTest.java | 31 ++++++++++ .../eu/dnetlib/dhp/oa/graph/clean/result.json | 2 +- .../dhp/oa/graph/clean/result_dataset.json | 28 +++++++++ 4 files changed, 110 insertions(+), 8 deletions(-) create mode 100644 dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/result_dataset.json diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java index a47b63edb..dff794c0d 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java @@ -13,11 +13,7 @@ import java.util.stream.Collectors; import java.util.stream.Stream; import org.apache.commons.lang3.StringUtils; -import org.apache.spark.api.java.function.MapFunction; -import org.apache.spark.sql.Encoders; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; import com.github.sisyphsu.dateparser.DateParserUtils; import com.google.common.collect.Lists; import com.google.common.collect.Sets; @@ -39,6 +35,7 @@ public class GraphCleaningFunctions extends CleaningFunctions { public static final String TITLE_FILTER_REGEX = String.format("(%s)|\\W|\\d", TITLE_TEST); public static final int TITLE_FILTER_RESIDUAL_LENGTH = 5; + private static final String NAME_CLEANING_REGEX = "[\\r\\n\\t\\s]+"; public static T cleanContext(T value, String contextId, String verifyParam) { if (ModelSupport.isSubClass(value, Result.class)) { @@ -247,7 +244,8 @@ public class GraphCleaningFunctions extends CleaningFunctions { if (value instanceof Datasource) { // nothing to evaluate here } else if (value instanceof Project) { - // nothing to evaluate here + final Project p = (Project) value; + return Objects.isNull(p.getCode()) || StringUtils.isBlank(p.getCode().getValue()); } else if (value instanceof Organization) { // nothing to evaluate here } else if (value instanceof Relation) { @@ -294,6 +292,12 @@ public class GraphCleaningFunctions extends CleaningFunctions { } else if (value instanceof Result) { Result r = (Result) value; + if (Objects.nonNull(r.getFulltext()) && (ModelConstants.SOFTWARE_RESULTTYPE_CLASSID.equals(r.getResulttype().getClassid()) || + ModelConstants.DATASET_RESULTTYPE_CLASSID.equals(r.getResulttype().getClassid()))) { + r.setFulltext(null); + + } + if (Objects.nonNull(r.getDateofacceptance())) { Optional date = cleanDateField(r.getDateofacceptance()); if (date.isPresent()) { @@ -318,8 +322,15 @@ public class GraphCleaningFunctions extends CleaningFunctions { .filter(sp -> StringUtils.isNotBlank(sp.getValue())) .collect(Collectors.toList())); } - if (Objects.nonNull(r.getPublisher()) && StringUtils.isBlank(r.getPublisher().getValue())) { - r.setPublisher(null); + if (Objects.nonNull(r.getPublisher())) { + if (StringUtils.isBlank(r.getPublisher().getValue())) { + r.setPublisher(null); + } else { + r.getPublisher().setValue( + r.getPublisher().getValue() + .replaceAll(NAME_CLEANING_REGEX, " ") + ); + } } if (Objects.isNull(r.getLanguage()) || StringUtils.isBlank(r.getLanguage().getClassid())) { r @@ -486,6 +497,11 @@ public class GraphCleaningFunctions extends CleaningFunctions { i.setDateofacceptance(null); } } + if (StringUtils.isNotBlank(i.getFulltext()) && + (ModelConstants.SOFTWARE_RESULTTYPE_CLASSID.equals(r.getResulttype().getClassid()) || + ModelConstants.DATASET_RESULTTYPE_CLASSID.equals(r.getResulttype().getClassid()))) { + i.setFulltext(null); + } } } if (Objects.isNull(r.getBestaccessright()) @@ -510,6 +526,7 @@ public class GraphCleaningFunctions extends CleaningFunctions { .filter(Objects::nonNull) .filter(a -> StringUtils.isNotBlank(a.getFullname())) .filter(a -> StringUtils.isNotBlank(a.getFullname().replaceAll("[\\W]", ""))) + .map(GraphCleaningFunctions::cleanupAuthor) .collect(Collectors.toList())); boolean nullRank = r @@ -604,6 +621,32 @@ public class GraphCleaningFunctions extends CleaningFunctions { return value; } + private static Author cleanupAuthor(Author author) { + if (StringUtils.isNotBlank(author.getFullname())) { + author.setFullname( + author.getFullname() + .replaceAll(NAME_CLEANING_REGEX, " ") + .replace("\"", "\\\"") + ); + } + if (StringUtils.isNotBlank(author.getName())) { + author.setName( + author.getName() + .replaceAll(NAME_CLEANING_REGEX, " ") + .replace("\"", "\\\"") + ); + } + if (StringUtils.isNotBlank(author.getSurname())) { + author.setSurname( + author.getSurname() + .replaceAll(NAME_CLEANING_REGEX, " ") + .replace("\"", "\\\"") + ); + } + + return author; + } + private static Optional cleanDateField(Field dateofacceptance) { return Optional .ofNullable(dateofacceptance) diff --git a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/GraphCleaningFunctionsTest.java b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/GraphCleaningFunctionsTest.java index 24b942f4d..be8307b50 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/GraphCleaningFunctionsTest.java +++ b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/GraphCleaningFunctionsTest.java @@ -251,6 +251,12 @@ public class GraphCleaningFunctionsTest { pid.getQualifier().getClassname())); }); + assertTrue( + p_cleaned + .getAuthor() + .stream() + .anyMatch(a -> "Brien, Tom".equals(a.getFullname()))); + assertNotNull(p_cleaned.getSubject()); List fos_subjects = p_cleaned @@ -285,6 +291,31 @@ public class GraphCleaningFunctionsTest { System.out.println(MAPPER.writeValueAsString(p_cleaned)); } + @Test + void testCleaning_dataset() throws Exception { + + assertNotNull(vocabularies); + assertNotNull(mapping); + + String json = IOUtils + .toString(getClass().getResourceAsStream("/eu/dnetlib/dhp/oa/graph/clean/result_dataset.json")); + Dataset p_in = MAPPER.readValue(json, Dataset.class); + + assertTrue(p_in instanceof Result); + assertTrue(p_in instanceof Dataset); + + Dataset p_out = OafCleaner.apply(GraphCleaningFunctions.fixVocabularyNames(p_in), mapping); + + assertNotNull(p_out); + + assertNotNull(p_out.getPublisher()); + assertNotNull(p_out.getPublisher().getValue()); + + Dataset p_cleaned = GraphCleaningFunctions.cleanup(p_out, vocabularies); + + assertEquals("Best publisher in the world", p_cleaned.getPublisher().getValue()); + } + private static void verify_keyword(Publication p_cleaned, String subject) { Optional s1 = p_cleaned .getSubject() diff --git a/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/result.json b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/result.json index 8f35470e1..8ef642dd3 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/result.json +++ b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/result.json @@ -3,7 +3,7 @@ { "affiliation": [ ], - "fullname": "Brien, Tom", + "fullname": "Brien, Tom", "name": "Tom", "pid": [ { diff --git a/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/result_dataset.json b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/result_dataset.json new file mode 100644 index 000000000..bec87c7ae --- /dev/null +++ b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/result_dataset.json @@ -0,0 +1,28 @@ +{ + "resulttype": { + "classid": "dataset", + "classname": "dataset", + "schemeid": "dnet:result_typologies", + "schemename": "dnet:result_typologies" + }, + "fulltext": [ + { + "value" : "https://www.researchgate.net" + } + ], + "publisher" : { + "value" : "Best publisher in the world" + }, + "id": "50|CSC_________::2250a70c903c6ac6e4c01438259e9375", + "instance": [ + { + "instancetype": { + "classid": "Comment/debate", + "classname": "Comment/debate", + "schemeid": "dnet:publication_resource", + "schemename": "dnet:publication_resource" + }, + "fulltext": "https://www.researchgate.net" + } + ] +} \ No newline at end of file From d8435a6512f201189b415391b7de3d8ca3ee7b90 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Tue, 25 Jul 2023 17:39:57 +0200 Subject: [PATCH 253/449] inverted condition --- .../eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java index dff794c0d..705967fcf 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java @@ -245,7 +245,7 @@ public class GraphCleaningFunctions extends CleaningFunctions { // nothing to evaluate here } else if (value instanceof Project) { final Project p = (Project) value; - return Objects.isNull(p.getCode()) || StringUtils.isBlank(p.getCode().getValue()); + return Objects.nonNull(p.getCode()) && StringUtils.isNotBlank(p.getCode().getValue()); } else if (value instanceof Organization) { // nothing to evaluate here } else if (value instanceof Relation) { From a72b9e96ac9d1d6ec588370e8d8a374a865c9928 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Thu, 27 Jul 2023 14:57:38 +0200 Subject: [PATCH 254/449] expand the instance level fulltext in the XML records --- .../eu/dnetlib/dhp/oa/provision/model/XmlInstance.java | 10 ++++++++++ .../dhp/oa/provision/utils/XmlRecordFactory.java | 6 ++++++ .../dnetlib/dhp/oa/provision/XmlRecordFactoryTest.java | 8 ++++++-- .../eu/dnetlib/dhp/oa/provision/publication.json | 6 +++++- 4 files changed, 27 insertions(+), 3 deletions(-) diff --git a/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/model/XmlInstance.java b/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/model/XmlInstance.java index 930eab4c3..22e1df9ce 100644 --- a/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/model/XmlInstance.java +++ b/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/model/XmlInstance.java @@ -57,6 +57,8 @@ public class XmlInstance implements Serializable { // typed results private String processingchargecurrency; + private String fulltext; + private Qualifier refereed; // peer-review status public String getUrl() { @@ -162,4 +164,12 @@ public class XmlInstance implements Serializable { public void setRefereed(Qualifier refereed) { this.refereed = refereed; } + + public String getFulltext() { + return fulltext; + } + + public void setFulltext(String fulltext) { + this.fulltext = fulltext; + } } diff --git a/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/utils/XmlRecordFactory.java b/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/utils/XmlRecordFactory.java index 19d889d90..3b810ba8c 100644 --- a/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/utils/XmlRecordFactory.java +++ b/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/utils/XmlRecordFactory.java @@ -1309,6 +1309,9 @@ public class XmlRecordFactory implements Serializable { .map(d -> XmlSerializationUtils.asXmlElement("license", d)) .collect(Collectors.toList())); } + if (StringUtils.isNotBlank(instance.getFulltext())) { + fields.add(XmlSerializationUtils.asXmlElement("fulltext", instance.getFulltext())); + } children .add( @@ -1459,6 +1462,9 @@ public class XmlRecordFactory implements Serializable { Optional .ofNullable(i.getDistributionlocation()) .ifPresent(dl -> instance.getDistributionlocation().add(dl)); + Optional + .ofNullable(i.getFulltext()) + .ifPresent(instance::setFulltext); }); if (instance.getHostedby().size() > 1 diff --git a/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/XmlRecordFactoryTest.java b/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/XmlRecordFactoryTest.java index 8802b546d..761539780 100644 --- a/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/XmlRecordFactoryTest.java +++ b/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/XmlRecordFactoryTest.java @@ -47,8 +47,6 @@ public class XmlRecordFactoryTest { final String xml = xmlRecordFactory.build(new JoinedEntity<>(p)); - System.out.println(xml); - assertNotNull(xml); final Document doc = new SAXReader().read(new StringReader(xml)); @@ -92,6 +90,12 @@ public class XmlRecordFactoryTest { assertEquals("EOSC::Jupyter Notebook", doc.valueOf("//*[local-name() = 'result']/eoscifguidelines/@code")); + assertEquals(2, Integer.parseInt(doc.valueOf("count(//*[local-name() = 'result']/fulltext)"))); + + assertEquals( + "https://osf.io/preprints/socarxiv/7vgtu/download", + doc.valueOf("//*[local-name() = 'result']/fulltext[1]")); + } @Test diff --git a/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/publication.json b/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/publication.json index 901e6d579..4ba20292c 100644 --- a/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/publication.json +++ b/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/publication.json @@ -485,10 +485,14 @@ }, "extraInfo": [], "format": [], - "fulltext": [], + "fulltext": [ + { "value" : "https://osf.io/preprints/socarxiv/7vgtu/download" }, + { "value" : "https://osf.io/preprints/socarxiv/7vgtu/download2" } + ], "id": "50|CSC_________::0000ec4dd9df012feaafa77e71a0fb4c", "instance": [ { + "fulltext" : "https://osf.io/preprints/socarxiv/7vgtu/download", "measures": [ { "id": "influence", From ebfba38ab604ef6dd6a8ba38a280e9ca04b2ff70 Mon Sep 17 00:00:00 2001 From: Serafeim Chatzopoulos Date: Fri, 28 Jul 2023 19:03:47 +0300 Subject: [PATCH 255/449] Add changes from code review --- .../PrepareAffiliationRelations.java | 58 +++++++------------ 1 file changed, 22 insertions(+), 36 deletions(-) diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelations.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelations.java index 9b5d4a2ca..381558aae 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelations.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelations.java @@ -10,15 +10,15 @@ import java.util.stream.Collectors; import org.apache.commons.io.IOUtils; import org.apache.hadoop.io.Text; +import org.apache.hadoop.io.compress.GzipCodec; import org.apache.hadoop.mapred.SequenceFileOutputFormat; import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.JavaSparkContext; import org.apache.spark.api.java.function.FlatMapFunction; import org.apache.spark.api.java.function.MapFunction; +import org.apache.spark.sql.*; import org.apache.spark.sql.Dataset; -import org.apache.spark.sql.Encoders; -import org.apache.spark.sql.SparkSession; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -82,45 +82,32 @@ public class PrepareAffiliationRelations implements Serializable { private static void prepareAffiliationRelations(SparkSession spark, String inputPath, String outputPath) { - final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); - // load and parse affiliation relations from HDFS - JavaRDD affiliationRelationsDeserializeRDD = sc - .textFile(inputPath) - .map(item -> OBJECT_MAPPER.readValue(item, AffiliationRelationDeserializer.class)); + Dataset df = spark + .read() + .schema("`DOI` STRING, `Matchings` ARRAY,`Confidence`:DOUBLE>>") + .json(inputPath); - // convert affiliation to an internal representation - Dataset affiliationRelations = spark - .createDataset( - affiliationRelationsDeserializeRDD - .flatMap( - entry -> entry - .getMatchings() - .stream() - .flatMap( - matching -> matching - .getRorId() - .stream() - .map( - rorId -> new AffiliationRelationModel( - entry.getDoi(), - rorId, - matching.getConfidence()))) - .collect(Collectors.toList()) - .iterator()) - .rdd(), - Encoders.bean(AffiliationRelationModel.class)); + // unroll nested arrays + df = df + .withColumn("matching", functions.explode(new Column("Matchings"))) + .withColumn("rorid", functions.explode(new Column("matching.RORid"))) + .select( + new Column("DOI").as("doi"), + new Column("rorid"), + new Column("matching.Confidence").as("confidence")); // prepare action sets for affiliation relations - affiliationRelations - .flatMap((FlatMapFunction) affRel -> { + df + .toJavaRDD() + .flatMap((FlatMapFunction) row -> { // DOI to OpenAIRE id final String paperId = ID_PREFIX - + IdentifierFactory.md5(CleaningFunctions.normalizePidValue("doi", affRel.getDoi())); + + IdentifierFactory.md5(CleaningFunctions.normalizePidValue("doi", row.getAs("doi"))); // ROR id to OpenAIRE id - final String affId = GenerateRorActionSetJob.calculateOpenaireId(affRel.getRorId()); + final String affId = GenerateRorActionSetJob.calculateOpenaireId(row.getAs("rorid")); Qualifier qualifier = OafMapperUtils .qualifier( @@ -137,18 +124,17 @@ public class PrepareAffiliationRelations implements Serializable { true, false, qualifier, - Double.toString(affRel.getConfidence())); + Double.toString(row.getAs("confidence"))); // return bi-directional relations return getAffiliationRelationPair(paperId, affId, dataInfo).iterator(); - }, Encoders.bean(Relation.class)) - .toJavaRDD() + }) .map(p -> new AtomicAction(Relation.class, p)) .mapToPair( aa -> new Tuple2<>(new Text(aa.getClazz().getCanonicalName()), new Text(OBJECT_MAPPER.writeValueAsString(aa)))) - .saveAsHadoopFile(outputPath, Text.class, Text.class, SequenceFileOutputFormat.class); + .saveAsHadoopFile(outputPath, Text.class, Text.class, SequenceFileOutputFormat.class, GzipCodec.class); } From 7cefe2665bbd57472d9ea6e08a593f03a05cbc25 Mon Sep 17 00:00:00 2001 From: Serafeim Chatzopoulos Date: Fri, 28 Jul 2023 19:14:39 +0300 Subject: [PATCH 256/449] Remove unnecessary classes --- .../PrepareAffiliationRelations.java | 5 ---- .../AffiliationRelationDeserializer.java | 27 ------------------- .../model/AffiliationRelationModel.java | 16 ----------- 3 files changed, 48 deletions(-) delete mode 100644 dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/model/AffiliationRelationDeserializer.java delete mode 100644 dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/model/AffiliationRelationModel.java diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelations.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelations.java index 381558aae..a9c610de7 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelations.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelations.java @@ -6,17 +6,13 @@ import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkSession; import java.io.Serializable; import java.util.Arrays; import java.util.List; -import java.util.stream.Collectors; import org.apache.commons.io.IOUtils; import org.apache.hadoop.io.Text; import org.apache.hadoop.io.compress.GzipCodec; import org.apache.hadoop.mapred.SequenceFileOutputFormat; import org.apache.spark.SparkConf; -import org.apache.spark.api.java.JavaRDD; -import org.apache.spark.api.java.JavaSparkContext; import org.apache.spark.api.java.function.FlatMapFunction; -import org.apache.spark.api.java.function.MapFunction; import org.apache.spark.sql.*; import org.apache.spark.sql.Dataset; import org.slf4j.Logger; @@ -25,7 +21,6 @@ import org.slf4j.LoggerFactory; import com.fasterxml.jackson.databind.ObjectMapper; import eu.dnetlib.dhp.actionmanager.Constants; -import eu.dnetlib.dhp.actionmanager.bipaffiliations.model.*; import eu.dnetlib.dhp.actionmanager.ror.GenerateRorActionSetJob; import eu.dnetlib.dhp.application.ArgumentApplicationParser; import eu.dnetlib.dhp.schema.action.AtomicAction; diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/model/AffiliationRelationDeserializer.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/model/AffiliationRelationDeserializer.java deleted file mode 100644 index ef4f200d0..000000000 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/model/AffiliationRelationDeserializer.java +++ /dev/null @@ -1,27 +0,0 @@ - -package eu.dnetlib.dhp.actionmanager.bipaffiliations.model; - -import java.io.Serializable; -import java.util.List; - -import com.fasterxml.jackson.annotation.JsonProperty; - -import lombok.Data; - -@Data -public class AffiliationRelationDeserializer implements Serializable { - @JsonProperty("DOI") - private String doi; - @JsonProperty("Matchings") - private List matchings; - - @Data - public static class Matching implements Serializable { - @JsonProperty("RORid") - private List rorId; - @JsonProperty("Confidence") - private double confidence; - - } - -} diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/model/AffiliationRelationModel.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/model/AffiliationRelationModel.java deleted file mode 100644 index 6509f56ac..000000000 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/model/AffiliationRelationModel.java +++ /dev/null @@ -1,16 +0,0 @@ - -package eu.dnetlib.dhp.actionmanager.bipaffiliations.model; - -import java.io.Serializable; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@AllArgsConstructor -public class AffiliationRelationModel implements Serializable { - private String doi; - private String rorId; - private double confidence; -} From 11ffb9bd68e156a79de96028a005a6335e5cb805 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Mon, 31 Jul 2023 12:35:05 +0200 Subject: [PATCH 257/449] rule out records with NULL dataInfo --- .../dhp/schema/oaf/utils/GraphCleaningFunctions.java | 2 +- .../dhp/oa/graph/clean/GraphCleaningFunctionsTest.java | 9 +++++++++ .../resources/eu/dnetlib/dhp/oa/graph/clean/project.json | 1 + 3 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/project.json diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java index a47b63edb..7af85fc4a 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java @@ -239,7 +239,7 @@ public class GraphCleaningFunctions extends CleaningFunctions { d -> Optional .ofNullable(d.getInvisible()) .orElse(true)) - .orElse(true)) + .orElse(false)) .orElse(true))) { return true; } diff --git a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/GraphCleaningFunctionsTest.java b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/GraphCleaningFunctionsTest.java index 24b942f4d..bc65fc662 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/GraphCleaningFunctionsTest.java +++ b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/GraphCleaningFunctionsTest.java @@ -337,6 +337,15 @@ public class GraphCleaningFunctionsTest { Assertions.assertEquals(true, GraphCleaningFunctions.filter(cleaned)); } + @Test + public void testFilterProject() throws IOException { + String json = IOUtils + .toString(getClass().getResourceAsStream("/eu/dnetlib/dhp/oa/graph/clean/project.json")); + Project p_in = MAPPER.readValue(json, Project.class); + + Assertions.assertEquals(false, GraphCleaningFunctions.filter(p_in)); + } + @Test public void testCleanDoiBoost2() throws IOException { String json = IOUtils diff --git a/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/project.json b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/project.json new file mode 100644 index 000000000..9ab714376 --- /dev/null +++ b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/project.json @@ -0,0 +1 @@ +{"measures": [{"id": "downloads", "unit": [{"dataInfo": {"provenanceaction": {"classid": "measure:usage_counts", "classname": "measure:usage_counts", "schemeid": "dnet:provenanceActions", "schemename": "dnet:provenanceActions"}, "deletedbyinference": false, "inferred": true, "inferenceprovenance": "update", "invisible": false, "trust": ""}, "key": "count", "value": "1"}]}, {"id": "views", "unit": [{"dataInfo": {"provenanceaction": {"classid": "measure:usage_counts", "classname": "measure:usage_counts", "schemeid": "dnet:provenanceActions", "schemename": "dnet:provenanceActions"}, "deletedbyinference": false, "inferred": true, "inferenceprovenance": "update", "invisible": false, "trust": ""}, "key": "count", "value": "0"}]}], "id": "40|aka_________::591da07706352f1195afaeed4065f52e"} \ No newline at end of file From b9dddbfe543f4efb9b6a5fd6d7acffc02ec4c440 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Mon, 31 Jul 2023 17:52:56 +0200 Subject: [PATCH 258/449] rule out records with NULL dataInfo, except for Relations --- .../oaf/utils/GraphCleaningFunctions.java | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java index 7af85fc4a..2ba805e1e 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java @@ -228,20 +228,20 @@ public class GraphCleaningFunctions extends CleaningFunctions { } public static boolean filter(T value) { - if (Boolean.TRUE - .equals( - Optional - .ofNullable(value) - .map( - o -> Optional - .ofNullable(o.getDataInfo()) - .map( - d -> Optional - .ofNullable(d.getInvisible()) - .orElse(true)) - .orElse(false)) - .orElse(true))) { - return true; + if (!(value instanceof Relation) && (Boolean.TRUE + .equals( + Optional + .ofNullable(value) + .map( + o -> Optional + .ofNullable(o.getDataInfo()) + .map( + d -> Optional + .ofNullable(d.getInvisible()) + .orElse(true)) + .orElse(false)) + .orElse(true)))) { + return true; } if (value instanceof Datasource) { From af49424b599010a997835de6a2d771933c1f42fa Mon Sep 17 00:00:00 2001 From: Giambattista Bloisi Date: Fri, 4 Aug 2023 14:27:39 +0200 Subject: [PATCH 259/449] Add a "CleanRelation" action after the PropagateRelation to filter out all relations that have been deleyted by inference or that are pointing to dangling entities --- .../dhp/oa/dedup/SparkCleanRelation.scala | 74 ++++++++++ .../oa/dedup/cleanRelation_parameters.json | 20 +++ .../dedup/consistency/oozie_app/workflow.xml | 27 +++- .../dnetlib/dhp/oa/dedup/SparkDedupTest.java | 132 +++++++++++++----- 4 files changed, 214 insertions(+), 39 deletions(-) create mode 100644 dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkCleanRelation.scala create mode 100644 dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/cleanRelation_parameters.json diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkCleanRelation.scala b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkCleanRelation.scala new file mode 100644 index 000000000..5f1e63ca8 --- /dev/null +++ b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkCleanRelation.scala @@ -0,0 +1,74 @@ +package eu.dnetlib.dhp.oa.dedup + +import eu.dnetlib.dhp.application.ArgumentApplicationParser +import eu.dnetlib.dhp.common.HdfsSupport +import eu.dnetlib.dhp.schema.oaf.Relation +import eu.dnetlib.dhp.utils.ISLookupClientFactory +import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpService +import org.apache.commons.io.IOUtils +import org.apache.spark.SparkConf +import org.apache.spark.sql._ +import org.apache.spark.sql.functions.col +import org.apache.spark.sql.types.{DataTypes, StructField, StructType} +import org.slf4j.LoggerFactory + +object SparkCleanRelation { + private val log = LoggerFactory.getLogger(classOf[SparkCleanRelation]) + + @throws[Exception] + def main(args: Array[String]): Unit = { + val parser = new ArgumentApplicationParser( + IOUtils.toString( + classOf[SparkCleanRelation].getResourceAsStream("/eu/dnetlib/dhp/oa/dedup/cleanRelation_parameters.json") + ) + ) + parser.parseArgument(args) + val conf = new SparkConf + + new SparkCleanRelation(parser, AbstractSparkAction.getSparkSession(conf)) + .run(ISLookupClientFactory.getLookUpService(parser.get("isLookUpUrl"))) + } +} + +class SparkCleanRelation(parser: ArgumentApplicationParser, spark: SparkSession) + extends AbstractSparkAction(parser, spark) { + override def run(isLookUpService: ISLookUpService): Unit = { + val graphBasePath = parser.get("graphBasePath") + val inputPath = parser.get("inputPath") + val outputPath = parser.get("outputPath") + + SparkCleanRelation.log.info("graphBasePath: '{}'", graphBasePath) + SparkCleanRelation.log.info("inputPath: '{}'", inputPath) + SparkCleanRelation.log.info("outputPath: '{}'", outputPath) + + AbstractSparkAction.removeOutputDir(spark, outputPath) + + val entities = + Seq("datasource", "project", "organization", "publication", "dataset", "software", "otherresearchproduct") + + val emptyIds = spark.createDataFrame(spark.sparkContext.emptyRDD[Row].setName("empty"), + new StructType().add(StructField("id", DataTypes.StringType, true))) + + val ids = entities + .foldLeft(emptyIds)((ds, entity) => { + val entityPath = graphBasePath + '/' + entity + if (HdfsSupport.exists(entityPath, spark.sparkContext.hadoopConfiguration)) { + ds.union(spark.read.schema("`id` STRING").json(entityPath)) + } else { + ds + } + }) + .distinct() + + val relations = spark.read.schema(Encoders.bean(classOf[Relation]).schema).json(inputPath) + .filter(col("dataInfo.deletedbyinference").isNull || col("dataInfo.deletedbyinference") === false) + + AbstractSparkAction.save( + relations + .join(ids, col("source") === ids("id"), "leftsemi") + .join(ids, col("target") === ids("id"), "leftsemi"), + outputPath, + SaveMode.Overwrite + ) + } +} diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/cleanRelation_parameters.json b/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/cleanRelation_parameters.json new file mode 100644 index 000000000..860539ad9 --- /dev/null +++ b/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/cleanRelation_parameters.json @@ -0,0 +1,20 @@ +[ + { + "paramName": "i", + "paramLongName": "graphBasePath", + "paramDescription": "the base path of raw graph", + "paramRequired": true + }, + { + "paramName": "w", + "paramLongName": "inputPath", + "paramDescription": "the path to the input relation to cleanup", + "paramRequired": true + }, + { + "paramName": "o", + "paramLongName": "outputPath", + "paramDescription": "the path of the output relation cleaned", + "paramRequired": true + } +] \ No newline at end of file diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/consistency/oozie_app/workflow.xml b/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/consistency/oozie_app/workflow.xml index 7c500493f..fedc68d9d 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/consistency/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/consistency/oozie_app/workflow.xml @@ -92,9 +92,34 @@ --conf spark.sql.shuffle.partitions=15000 --graphBasePath${graphBasePath} - --o${graphOutputPath} + --outputPath${workingPath}/propagaterelation/ --workingPath${workingPath} + + + + + + + yarn + cluster + Clean Relations + eu.dnetlib.dhp.oa.dedup.SparkCleanRelation + dhp-dedup-openaire-${projectVersion}.jar + + --executor-memory=${sparkExecutorMemory} + --executor-cores=${sparkExecutorCores} + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.sql.shuffle.partitions=15000 + + --graphBasePath${graphBasePath} + --inputPath${workingPath}/propagaterelation/relation + --outputPath${graphOutputPath}/relation + diff --git a/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkDedupTest.java b/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkDedupTest.java index 6a2c6dcc5..c382e922e 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkDedupTest.java +++ b/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkDedupTest.java @@ -1,11 +1,32 @@ package eu.dnetlib.dhp.oa.dedup; -import static java.nio.file.Files.createTempDirectory; - -import static org.apache.spark.sql.functions.count; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.lenient; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.collect.Sets; +import eu.dnetlib.dhp.application.ArgumentApplicationParser; +import eu.dnetlib.dhp.schema.common.ModelConstants; +import eu.dnetlib.dhp.schema.oaf.*; +import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpException; +import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpService; +import eu.dnetlib.pace.util.MapDocumentUtil; +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.IOUtils; +import org.apache.spark.SparkConf; +import org.apache.spark.api.java.JavaPairRDD; +import org.apache.spark.api.java.JavaRDD; +import org.apache.spark.api.java.JavaSparkContext; +import org.apache.spark.api.java.function.FilterFunction; +import org.apache.spark.api.java.function.MapFunction; +import org.apache.spark.api.java.function.PairFunction; +import org.apache.spark.sql.*; +import org.apache.spark.sql.Dataset; +import org.junit.jupiter.api.*; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.junit.jupiter.MockitoExtension; +import scala.Tuple2; import java.io.File; import java.io.FileReader; @@ -19,36 +40,11 @@ import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; -import org.apache.commons.io.FileUtils; -import org.apache.commons.io.IOUtils; -import org.apache.spark.SparkConf; -import org.apache.spark.api.java.JavaPairRDD; -import org.apache.spark.api.java.JavaRDD; -import org.apache.spark.api.java.JavaSparkContext; -import org.apache.spark.api.java.function.FilterFunction; -import org.apache.spark.api.java.function.MapFunction; -import org.apache.spark.api.java.function.PairFunction; -import org.apache.spark.sql.Dataset; -import org.apache.spark.sql.Encoders; -import org.apache.spark.sql.Row; -import org.apache.spark.sql.SparkSession; -import org.junit.jupiter.api.*; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.Mock; -import org.mockito.Mockito; -import org.mockito.junit.jupiter.MockitoExtension; - -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.common.collect.Sets; - -import eu.dnetlib.dhp.application.ArgumentApplicationParser; -import eu.dnetlib.dhp.schema.common.ModelConstants; -import eu.dnetlib.dhp.schema.oaf.*; -import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpException; -import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpService; -import eu.dnetlib.pace.util.MapDocumentUtil; -import scala.Tuple2; +import static java.nio.file.Files.createTempDirectory; +import static org.apache.spark.sql.functions.col; +import static org.apache.spark.sql.functions.count; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.lenient; @ExtendWith(MockitoExtension.class) @TestMethodOrder(MethodOrderer.OrderAnnotation.class) @@ -681,15 +677,16 @@ public class SparkDedupTest implements Serializable { ArgumentApplicationParser parser = new ArgumentApplicationParser( classPathResourceAsString("/eu/dnetlib/dhp/oa/dedup/propagateRelation_parameters.json")); + String outputRelPath = testDedupGraphBasePath + "/propagaterelation"; parser .parseArgument( new String[] { - "-i", testGraphBasePath, "-w", testOutputBasePath, "-o", testDedupGraphBasePath + "-i", testGraphBasePath, "-w", testOutputBasePath, "-o", outputRelPath }); new SparkPropagateRelation(parser, spark).run(isLookUpService); - long relations = jsc.textFile(testDedupGraphBasePath + "/relation").count(); + long relations = jsc.textFile(outputRelPath + "/relation").count(); // assertEquals(4860, relations); System.out.println("relations = " + relations); @@ -708,7 +705,7 @@ public class SparkDedupTest implements Serializable { (PairFunction) r -> new Tuple2(r.getString(0), "d")); JavaRDD toCheck = jsc - .textFile(testDedupGraphBasePath + "/relation") + .textFile(outputRelPath + "/relation") .mapToPair(json -> new Tuple2<>(MapDocumentUtil.getJPathString("$.source", json), json)) .join(mergedIds) .map(t -> t._2()._1()) @@ -724,6 +721,65 @@ public class SparkDedupTest implements Serializable { @Test @Order(8) + void testCleanBaseRelations() throws Exception { + ArgumentApplicationParser parser = new ArgumentApplicationParser( + classPathResourceAsString("/eu/dnetlib/dhp/oa/dedup/cleanRelation_parameters.json")); + + // append dangling relations to be cleaned up + Dataset df_before = spark.read().schema(Encoders.bean(Relation.class).schema()).json(testGraphBasePath + "/relation"); + Dataset df_input =df_before + .unionByName(df_before.drop("source").withColumn("source", functions.lit("n/a"))) + .unionByName(df_before.drop("target").withColumn("target", functions.lit("n/a"))); + df_input.write().mode(SaveMode.Overwrite).json(testOutputBasePath + "_tmp"); + + parser + .parseArgument( + new String[]{ + "--graphBasePath", testGraphBasePath, + "--inputPath", testGraphBasePath + "/relation", + "--outputPath", testDedupGraphBasePath + "/relation" + }); + + new SparkCleanRelation(parser, spark).run(isLookUpService); + + Dataset df_after = spark.read().schema(Encoders.bean(Relation.class).schema()).json(testDedupGraphBasePath + "/relation"); + + assertNotEquals(df_before.count(), df_input.count()); + assertNotEquals(df_input.count(), df_after.count()); + assertEquals(5, df_after.count()); + } + + @Test + @Order(9) + void testCleanDedupedRelations() throws Exception { + ArgumentApplicationParser parser = new ArgumentApplicationParser( + classPathResourceAsString("/eu/dnetlib/dhp/oa/dedup/cleanRelation_parameters.json")); + + String inputRelPath = testDedupGraphBasePath + "/propagaterelation/relation"; + + // append dangling relations to be cleaned up + Dataset df_before = spark.read().schema(Encoders.bean(Relation.class).schema()).json(inputRelPath); + + df_before.filter(col("dataInfo.deletedbyinference").notEqual(true)).show(50, false); + + parser + .parseArgument( + new String[]{ + "--graphBasePath", testGraphBasePath, + "--inputPath", inputRelPath, + "--outputPath", testDedupGraphBasePath + "/relation" + }); + + new SparkCleanRelation(parser, spark).run(isLookUpService); + + Dataset df_after = spark.read().schema(Encoders.bean(Relation.class).schema()).json(testDedupGraphBasePath + "/relation"); + + assertNotEquals(df_before.count(), df_after.count()); + assertEquals(0, df_after.count()); + } + + @Test + @Order(10) void testRelations() throws Exception { testUniqueness("/eu/dnetlib/dhp/dedup/test/relation_1.json", 12, 10); testUniqueness("/eu/dnetlib/dhp/dedup/test/relation_2.json", 10, 2); From 97b6d1dc458da37b460b6f7e7982f339beebff44 Mon Sep 17 00:00:00 2001 From: Giambattista Bloisi Date: Mon, 7 Aug 2023 10:24:11 +0200 Subject: [PATCH 260/449] Filter ids by dataInfo.deletedbyinference and DataInfo.invisible flags Filter relations also by dataInfo.invisible flag --- .../eu/dnetlib/dhp/oa/dedup/SparkCleanRelation.scala | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkCleanRelation.scala b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkCleanRelation.scala index 5f1e63ca8..5d8da42c2 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkCleanRelation.scala +++ b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkCleanRelation.scala @@ -46,22 +46,26 @@ class SparkCleanRelation(parser: ArgumentApplicationParser, spark: SparkSession) val entities = Seq("datasource", "project", "organization", "publication", "dataset", "software", "otherresearchproduct") + val idsSchema = StructType.fromDDL("`id` STRING, `dataInfo` STRUCT<`deletedbyinference`:BOOLEAN,`invisible`:BOOLEAN>") + val emptyIds = spark.createDataFrame(spark.sparkContext.emptyRDD[Row].setName("empty"), - new StructType().add(StructField("id", DataTypes.StringType, true))) + idsSchema) val ids = entities .foldLeft(emptyIds)((ds, entity) => { val entityPath = graphBasePath + '/' + entity if (HdfsSupport.exists(entityPath, spark.sparkContext.hadoopConfiguration)) { - ds.union(spark.read.schema("`id` STRING").json(entityPath)) + ds.union(spark.read.schema(idsSchema).json(entityPath)) } else { ds } }) + .filter("dataInfo.deletedbyinference != true AND dataInfo.invisible != true") + .select("id") .distinct() val relations = spark.read.schema(Encoders.bean(classOf[Relation]).schema).json(inputPath) - .filter(col("dataInfo.deletedbyinference").isNull || col("dataInfo.deletedbyinference") === false) + .filter("dataInfo.deletedbyinference != true AND dataInfo.invisible != true") AbstractSparkAction.save( relations From fab99202719bb8636e51e5bb3b7cc87fd7166e9a Mon Sep 17 00:00:00 2001 From: Giambattista Bloisi Date: Tue, 8 Aug 2023 15:52:20 +0200 Subject: [PATCH 261/449] DispatchEntitiesSparkJob: manage all entity types together, support filtering by dataInfo.invisible flag --- .../oa/merge/DispatchEntitiesSparkJob.java | 73 ++++---- .../merge/dispatch_entities_parameters.json | 6 +- .../dedup/consistency/oozie_app/workflow.xml | 174 +----------------- .../dnetlib/dhp/oa/dedup/SparkDedupTest.java | 106 ++++++----- .../dhp/oa/graph/group/oozie_app/workflow.xml | 174 +----------------- .../group/GroupEntitiesSparkJobTest.java | 58 +++--- 6 files changed, 137 insertions(+), 454 deletions(-) diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/DispatchEntitiesSparkJob.java b/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/DispatchEntitiesSparkJob.java index 3f65d754f..88c32fdbf 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/DispatchEntitiesSparkJob.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/DispatchEntitiesSparkJob.java @@ -11,25 +11,18 @@ import org.apache.commons.lang3.StringUtils; import org.apache.spark.SparkConf; import org.apache.spark.api.java.function.FilterFunction; import org.apache.spark.api.java.function.MapFunction; -import org.apache.spark.sql.Encoders; -import org.apache.spark.sql.SaveMode; -import org.apache.spark.sql.SparkSession; +import org.apache.spark.sql.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.databind.ObjectMapper; - import eu.dnetlib.dhp.application.ArgumentApplicationParser; import eu.dnetlib.dhp.common.HdfsSupport; -import eu.dnetlib.dhp.schema.oaf.Oaf; -import eu.dnetlib.dhp.schema.oaf.OafEntity; +import eu.dnetlib.dhp.schema.common.ModelSupport; public class DispatchEntitiesSparkJob { private static final Logger log = LoggerFactory.getLogger(DispatchEntitiesSparkJob.class); - private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); - public static void main(String[] args) throws Exception { String jsonConfiguration = IOUtils @@ -54,11 +47,12 @@ public class DispatchEntitiesSparkJob { String outputPath = parser.get("outputPath"); log.info("outputPath: {}", outputPath); - String graphTableClassName = parser.get("graphTableClassName"); - log.info("graphTableClassName: {}", graphTableClassName); + boolean filterInvisible = Optional + .ofNullable(parser.get("filterInvisible")) + .map(Boolean::valueOf) + .orElse(Boolean.FALSE); - @SuppressWarnings("unchecked") - Class entityClazz = (Class) Class.forName(graphTableClassName); + log.info("filterInvisible: {}", filterInvisible); SparkConf conf = new SparkConf(); runWithSparkSession( @@ -66,32 +60,43 @@ public class DispatchEntitiesSparkJob { isSparkSessionManaged, spark -> { HdfsSupport.remove(outputPath, spark.sparkContext().hadoopConfiguration()); - dispatchEntities(spark, inputPath, entityClazz, outputPath); + dispatchEntities(spark, inputPath, outputPath, filterInvisible); }); } - private static void dispatchEntities( + private static void dispatchEntities( SparkSession spark, String inputPath, - Class clazz, - String outputPath) { + String outputPath, + boolean filterInvisible) { - spark - .read() - .textFile(inputPath) - .filter((FilterFunction) s -> isEntityType(s, clazz)) - .map((MapFunction) s -> StringUtils.substringAfter(s, "|"), Encoders.STRING()) - .map( - (MapFunction) value -> OBJECT_MAPPER.readValue(value, clazz), - Encoders.bean(clazz)) - .write() - .mode(SaveMode.Overwrite) - .option("compression", "gzip") - .json(outputPath); + Dataset df = spark.read().textFile(inputPath); + + ModelSupport.oafTypes.entrySet().parallelStream().forEach(entry -> { + String entityType = entry.getKey(); + Class clazz = entry.getValue(); + + if (!entityType.equalsIgnoreCase("relation")) { + Dataset entityDF = spark + .read() + .schema(Encoders.bean(clazz).schema()) + .json( + df + .filter((FilterFunction) s -> s.startsWith(clazz.getName())) + .map( + (MapFunction) s -> StringUtils.substringAfter(s, "|"), + Encoders.STRING())); + + if (filterInvisible) { + entityDF = entityDF.filter("dataInfo.invisible != true"); + } + + entityDF + .write() + .mode(SaveMode.Overwrite) + .option("compression", "gzip") + .json(outputPath + "/" + entityType); + } + }); } - - private static boolean isEntityType(final String s, final Class clazz) { - return StringUtils.substringBefore(s, "|").equals(clazz.getName()); - } - } diff --git a/dhp-common/src/main/resources/eu/dnetlib/dhp/oa/merge/dispatch_entities_parameters.json b/dhp-common/src/main/resources/eu/dnetlib/dhp/oa/merge/dispatch_entities_parameters.json index aa8d2a7c2..60f11ac84 100644 --- a/dhp-common/src/main/resources/eu/dnetlib/dhp/oa/merge/dispatch_entities_parameters.json +++ b/dhp-common/src/main/resources/eu/dnetlib/dhp/oa/merge/dispatch_entities_parameters.json @@ -18,9 +18,9 @@ "paramRequired": true }, { - "paramName": "c", - "paramLongName": "graphTableClassName", - "paramDescription": "the graph entity class name", + "paramName": "fi", + "paramLongName": "filterInvisible", + "paramDescription": "if true filters out invisible entities", "paramRequired": true } ] \ No newline at end of file diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/consistency/oozie_app/workflow.xml b/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/consistency/oozie_app/workflow.xml index fedc68d9d..b1ceca05a 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/consistency/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/consistency/oozie_app/workflow.xml @@ -144,25 +144,15 @@ --graphInputPath${graphBasePath} --outputPath${workingPath}/grouped_entities - + - - - - - - - - - - - + yarn cluster - Dispatch publications + Dispatch grouped entitities eu.dnetlib.dhp.oa.merge.DispatchEntitiesSparkJob dhp-dedup-openaire-${projectVersion}.jar @@ -176,164 +166,12 @@ --conf spark.sql.shuffle.partitions=7680 --inputPath${workingPath}/grouped_entities - --outputPath${graphOutputPath}/datasource - --graphTableClassNameeu.dnetlib.dhp.schema.oaf.Datasource + --outputPath${graphOutputPath} + --filterInvisibletrue - + - - - yarn - cluster - Dispatch project - eu.dnetlib.dhp.oa.merge.DispatchEntitiesSparkJob - dhp-dedup-openaire-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.sql.shuffle.partitions=7680 - - --inputPath${workingPath}/grouped_entities - --outputPath${graphOutputPath}/project - --graphTableClassNameeu.dnetlib.dhp.schema.oaf.Project - - - - - - - - yarn - cluster - Dispatch organization - eu.dnetlib.dhp.oa.merge.DispatchEntitiesSparkJob - dhp-dedup-openaire-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.sql.shuffle.partitions=7680 - - --inputPath${workingPath}/grouped_entities - --outputPath${graphOutputPath}/organization - --graphTableClassNameeu.dnetlib.dhp.schema.oaf.Organization - - - - - - - - yarn - cluster - Dispatch publication - eu.dnetlib.dhp.oa.merge.DispatchEntitiesSparkJob - dhp-dedup-openaire-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.sql.shuffle.partitions=7680 - - --inputPath${workingPath}/grouped_entities - --outputPath${graphOutputPath}/publication - --graphTableClassNameeu.dnetlib.dhp.schema.oaf.Publication - - - - - - - - yarn - cluster - Dispatch dataset - eu.dnetlib.dhp.oa.merge.DispatchEntitiesSparkJob - dhp-dedup-openaire-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.sql.shuffle.partitions=7680 - - --inputPath${workingPath}/grouped_entities - --outputPath${graphOutputPath}/dataset - --graphTableClassNameeu.dnetlib.dhp.schema.oaf.Dataset - - - - - - - - yarn - cluster - Dispatch software - eu.dnetlib.dhp.oa.merge.DispatchEntitiesSparkJob - dhp-dedup-openaire-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.sql.shuffle.partitions=7680 - - --inputPath${workingPath}/grouped_entities - --outputPath${graphOutputPath}/software - --graphTableClassNameeu.dnetlib.dhp.schema.oaf.Software - - - - - - - - yarn - cluster - Dispatch otherresearchproduct - eu.dnetlib.dhp.oa.merge.DispatchEntitiesSparkJob - dhp-dedup-openaire-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.sql.shuffle.partitions=7680 - - --inputPath${workingPath}/grouped_entities - --outputPath${graphOutputPath}/otherresearchproduct - --graphTableClassNameeu.dnetlib.dhp.schema.oaf.OtherResearchProduct - - - - - - -
\ No newline at end of file diff --git a/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkDedupTest.java b/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkDedupTest.java index c382e922e..38bd72a5e 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkDedupTest.java +++ b/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkDedupTest.java @@ -1,15 +1,25 @@ package eu.dnetlib.dhp.oa.dedup; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.common.collect.Sets; -import eu.dnetlib.dhp.application.ArgumentApplicationParser; -import eu.dnetlib.dhp.schema.common.ModelConstants; -import eu.dnetlib.dhp.schema.oaf.*; -import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpException; -import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpService; -import eu.dnetlib.pace.util.MapDocumentUtil; +import static java.nio.file.Files.createTempDirectory; + +import static org.apache.spark.sql.functions.col; +import static org.apache.spark.sql.functions.count; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.lenient; + +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.io.Serializable; +import java.net.URISyntaxException; +import java.nio.file.Paths; +import java.util.HashSet; +import java.util.List; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; + import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.apache.spark.SparkConf; @@ -26,26 +36,19 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.junit.jupiter.MockitoExtension; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.collect.Sets; + +import eu.dnetlib.dhp.application.ArgumentApplicationParser; +import eu.dnetlib.dhp.schema.common.ModelConstants; +import eu.dnetlib.dhp.schema.oaf.*; +import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpException; +import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpService; +import eu.dnetlib.pace.util.MapDocumentUtil; import scala.Tuple2; -import java.io.File; -import java.io.FileReader; -import java.io.IOException; -import java.io.Serializable; -import java.net.URISyntaxException; -import java.nio.file.Paths; -import java.util.HashSet; -import java.util.List; -import java.util.Optional; -import java.util.Set; -import java.util.stream.Collectors; - -import static java.nio.file.Files.createTempDirectory; -import static org.apache.spark.sql.functions.col; -import static org.apache.spark.sql.functions.count; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.lenient; - @ExtendWith(MockitoExtension.class) @TestMethodOrder(MethodOrderer.OrderAnnotation.class) public class SparkDedupTest implements Serializable { @@ -723,26 +726,32 @@ public class SparkDedupTest implements Serializable { @Order(8) void testCleanBaseRelations() throws Exception { ArgumentApplicationParser parser = new ArgumentApplicationParser( - classPathResourceAsString("/eu/dnetlib/dhp/oa/dedup/cleanRelation_parameters.json")); + classPathResourceAsString("/eu/dnetlib/dhp/oa/dedup/cleanRelation_parameters.json")); // append dangling relations to be cleaned up - Dataset df_before = spark.read().schema(Encoders.bean(Relation.class).schema()).json(testGraphBasePath + "/relation"); - Dataset df_input =df_before - .unionByName(df_before.drop("source").withColumn("source", functions.lit("n/a"))) - .unionByName(df_before.drop("target").withColumn("target", functions.lit("n/a"))); + Dataset df_before = spark + .read() + .schema(Encoders.bean(Relation.class).schema()) + .json(testGraphBasePath + "/relation"); + Dataset df_input = df_before + .unionByName(df_before.drop("source").withColumn("source", functions.lit("n/a"))) + .unionByName(df_before.drop("target").withColumn("target", functions.lit("n/a"))); df_input.write().mode(SaveMode.Overwrite).json(testOutputBasePath + "_tmp"); parser - .parseArgument( - new String[]{ - "--graphBasePath", testGraphBasePath, - "--inputPath", testGraphBasePath + "/relation", - "--outputPath", testDedupGraphBasePath + "/relation" - }); + .parseArgument( + new String[] { + "--graphBasePath", testGraphBasePath, + "--inputPath", testGraphBasePath + "/relation", + "--outputPath", testDedupGraphBasePath + "/relation" + }); new SparkCleanRelation(parser, spark).run(isLookUpService); - Dataset df_after = spark.read().schema(Encoders.bean(Relation.class).schema()).json(testDedupGraphBasePath + "/relation"); + Dataset df_after = spark + .read() + .schema(Encoders.bean(Relation.class).schema()) + .json(testDedupGraphBasePath + "/relation"); assertNotEquals(df_before.count(), df_input.count()); assertNotEquals(df_input.count(), df_after.count()); @@ -753,7 +762,7 @@ public class SparkDedupTest implements Serializable { @Order(9) void testCleanDedupedRelations() throws Exception { ArgumentApplicationParser parser = new ArgumentApplicationParser( - classPathResourceAsString("/eu/dnetlib/dhp/oa/dedup/cleanRelation_parameters.json")); + classPathResourceAsString("/eu/dnetlib/dhp/oa/dedup/cleanRelation_parameters.json")); String inputRelPath = testDedupGraphBasePath + "/propagaterelation/relation"; @@ -763,16 +772,19 @@ public class SparkDedupTest implements Serializable { df_before.filter(col("dataInfo.deletedbyinference").notEqual(true)).show(50, false); parser - .parseArgument( - new String[]{ - "--graphBasePath", testGraphBasePath, - "--inputPath", inputRelPath, - "--outputPath", testDedupGraphBasePath + "/relation" - }); + .parseArgument( + new String[] { + "--graphBasePath", testGraphBasePath, + "--inputPath", inputRelPath, + "--outputPath", testDedupGraphBasePath + "/relation" + }); new SparkCleanRelation(parser, spark).run(isLookUpService); - Dataset df_after = spark.read().schema(Encoders.bean(Relation.class).schema()).json(testDedupGraphBasePath + "/relation"); + Dataset df_after = spark + .read() + .schema(Encoders.bean(Relation.class).schema()) + .json(testDedupGraphBasePath + "/relation"); assertNotEquals(df_before.count(), df_after.count()); assertEquals(0, df_after.count()); diff --git a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/group/oozie_app/workflow.xml b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/group/oozie_app/workflow.xml index 888a873c5..27a18207b 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/group/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/group/oozie_app/workflow.xml @@ -94,25 +94,15 @@ --graphInputPath${graphBasePath} --outputPath${workingPath}/grouped_entities - + - - - - - - - - - - - + yarn cluster - Dispatch publications + Dispatch grouped entities eu.dnetlib.dhp.oa.merge.DispatchEntitiesSparkJob dhp-graph-mapper-${projectVersion}.jar @@ -126,165 +116,13 @@ --conf spark.sql.shuffle.partitions=7680 --inputPath${workingPath}/grouped_entities - --outputPath${graphOutputPath}/datasource - --graphTableClassNameeu.dnetlib.dhp.schema.oaf.Datasource + --outputPath${graphOutputPath} + --filterInvisiblefalse - + - - - yarn - cluster - Dispatch project - eu.dnetlib.dhp.oa.merge.DispatchEntitiesSparkJob - dhp-graph-mapper-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.sql.shuffle.partitions=7680 - - --inputPath${workingPath}/grouped_entities - --outputPath${graphOutputPath}/project - --graphTableClassNameeu.dnetlib.dhp.schema.oaf.Project - - - - - - - - yarn - cluster - Dispatch organization - eu.dnetlib.dhp.oa.merge.DispatchEntitiesSparkJob - dhp-graph-mapper-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.sql.shuffle.partitions=7680 - - --inputPath${workingPath}/grouped_entities - --outputPath${graphOutputPath}/organization - --graphTableClassNameeu.dnetlib.dhp.schema.oaf.Organization - - - - - - - - yarn - cluster - Dispatch publication - eu.dnetlib.dhp.oa.merge.DispatchEntitiesSparkJob - dhp-graph-mapper-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.sql.shuffle.partitions=7680 - - --inputPath${workingPath}/grouped_entities - --outputPath${graphOutputPath}/publication - --graphTableClassNameeu.dnetlib.dhp.schema.oaf.Publication - - - - - - - - yarn - cluster - Dispatch dataset - eu.dnetlib.dhp.oa.merge.DispatchEntitiesSparkJob - dhp-graph-mapper-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.sql.shuffle.partitions=7680 - - --inputPath${workingPath}/grouped_entities - --outputPath${graphOutputPath}/dataset - --graphTableClassNameeu.dnetlib.dhp.schema.oaf.Dataset - - - - - - - - yarn - cluster - Dispatch software - eu.dnetlib.dhp.oa.merge.DispatchEntitiesSparkJob - dhp-graph-mapper-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.sql.shuffle.partitions=7680 - - --inputPath${workingPath}/grouped_entities - --outputPath${graphOutputPath}/software - --graphTableClassNameeu.dnetlib.dhp.schema.oaf.Software - - - - - - - - yarn - cluster - Dispatch otherresearchproduct - eu.dnetlib.dhp.oa.merge.DispatchEntitiesSparkJob - dhp-graph-mapper-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.sql.shuffle.partitions=7680 - - --inputPath${workingPath}/grouped_entities - --outputPath${graphOutputPath}/otherresearchproduct - --graphTableClassNameeu.dnetlib.dhp.schema.oaf.OtherResearchProduct - - - - - - - diff --git a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/group/GroupEntitiesSparkJobTest.java b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/group/GroupEntitiesSparkJobTest.java index 3bd1c13de..4c86da47e 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/group/GroupEntitiesSparkJobTest.java +++ b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/group/GroupEntitiesSparkJobTest.java @@ -1,14 +1,14 @@ package eu.dnetlib.dhp.oa.graph.group; -import static org.junit.jupiter.api.Assertions.*; - -import java.io.IOException; -import java.net.URISyntaxException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; - +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import eu.dnetlib.dhp.common.HdfsSupport; +import eu.dnetlib.dhp.oa.merge.DispatchEntitiesSparkJob; +import eu.dnetlib.dhp.oa.merge.GroupEntitiesSparkJob; +import eu.dnetlib.dhp.schema.common.ModelSupport; +import eu.dnetlib.dhp.schema.oaf.Result; +import eu.dnetlib.dhp.utils.DHPUtils; import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.StringUtils; import org.apache.spark.SparkConf; @@ -19,17 +19,13 @@ import org.apache.spark.sql.Encoders; import org.apache.spark.sql.SparkSession; import org.junit.jupiter.api.*; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.common.collect.Lists; +import java.io.IOException; +import java.net.URISyntaxException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; -import eu.dnetlib.dhp.common.HdfsSupport; -import eu.dnetlib.dhp.oa.merge.DispatchEntitiesSparkJob; -import eu.dnetlib.dhp.oa.merge.GroupEntitiesSparkJob; -import eu.dnetlib.dhp.schema.common.ModelSupport; -import eu.dnetlib.dhp.schema.oaf.Publication; -import eu.dnetlib.dhp.schema.oaf.Result; -import eu.dnetlib.dhp.utils.DHPUtils; +import static org.junit.jupiter.api.Assertions.assertEquals; @TestMethodOrder(MethodOrderer.OrderAnnotation.class) public class GroupEntitiesSparkJobTest { @@ -101,21 +97,16 @@ public class GroupEntitiesSparkJobTest { @Test @Order(2) void testDispatchEntities() throws Exception { - for (String type : Lists - .newArrayList( - Publication.class.getCanonicalName(), eu.dnetlib.dhp.schema.oaf.Dataset.class.getCanonicalName())) { - String directory = StringUtils.substringAfterLast(type, ".").toLowerCase(); - DispatchEntitiesSparkJob.main(new String[] { - "-isSparkSessionManaged", - Boolean.FALSE.toString(), - "-inputPath", - groupEntityPath.toString(), - "-outputPath", - dispatchEntityPath.resolve(directory).toString(), - "-graphTableClassName", - type - }); - } + DispatchEntitiesSparkJob.main(new String[] { + "-isSparkSessionManaged", + Boolean.FALSE.toString(), + "-inputPath", + groupEntityPath.toString(), + "-outputPath", + dispatchEntityPath.resolve(".").toString(), + "-filterInvisible", + Boolean.TRUE.toString() + }); Dataset output = spark .read() @@ -140,5 +131,4 @@ public class GroupEntitiesSparkJobTest { .filter((FilterFunction) s -> s.equals("dataset")) .count()); } - } From 95cd2b9b1e7f130d53b616773e9e016ccf970b83 Mon Sep 17 00:00:00 2001 From: Giambattista Bloisi Date: Thu, 10 Aug 2023 11:53:48 +0200 Subject: [PATCH 262/449] Make filterInvisible a mandatory parameter of DispathEntitiesSparkJob Make filterInvisible a mandatory parameter of both dedup/consistency and graph/group oozie workflows --- .../eu/dnetlib/dhp/oa/merge/DispatchEntitiesSparkJob.java | 6 +----- .../dhp/oa/dedup/consistency/oozie_app/workflow.xml | 7 +++++-- .../eu/dnetlib/dhp/oa/graph/group/oozie_app/workflow.xml | 6 +++++- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/DispatchEntitiesSparkJob.java b/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/DispatchEntitiesSparkJob.java index 88c32fdbf..4d2ccb178 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/DispatchEntitiesSparkJob.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/DispatchEntitiesSparkJob.java @@ -47,11 +47,7 @@ public class DispatchEntitiesSparkJob { String outputPath = parser.get("outputPath"); log.info("outputPath: {}", outputPath); - boolean filterInvisible = Optional - .ofNullable(parser.get("filterInvisible")) - .map(Boolean::valueOf) - .orElse(Boolean.FALSE); - + boolean filterInvisible = Boolean.valueOf(parser.get("filterInvisible")); log.info("filterInvisible: {}", filterInvisible); SparkConf conf = new SparkConf(); diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/consistency/oozie_app/workflow.xml b/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/consistency/oozie_app/workflow.xml index b1ceca05a..eb7e6d98d 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/consistency/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/consistency/oozie_app/workflow.xml @@ -12,6 +12,10 @@ graphOutputPath path of the output graph + + filterInvisible + whether filter out invisible entities after merge + sparkDriverMemory memory for driver process @@ -24,7 +28,6 @@ sparkExecutorCores number of cores used by single executor - oozieActionShareLibForSpark2 oozie action sharelib for spark 2.* @@ -167,7 +170,7 @@ --inputPath${workingPath}/grouped_entities --outputPath${graphOutputPath} - --filterInvisibletrue + --filterInvisible${filterInvisible} diff --git a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/group/oozie_app/workflow.xml b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/group/oozie_app/workflow.xml index 27a18207b..219dc7331 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/group/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/group/oozie_app/workflow.xml @@ -12,6 +12,10 @@ graphOutputPath path of the output graph + + filterInvisible + whether filter out invisible entities after merge + sparkDriverMemory memory for driver process @@ -117,7 +121,7 @@ --inputPath${workingPath}/grouped_entities --outputPath${graphOutputPath} - --filterInvisiblefalse + --filterInvisible${filterInvisible} From 97c1ba89187b5c57b6cac3263dd8c9d855c586d8 Mon Sep 17 00:00:00 2001 From: Serafeim Chatzopoulos Date: Fri, 11 Aug 2023 15:56:53 +0300 Subject: [PATCH 263/449] Merge actionsets of results and projects --- .../bipfinder/SparkAtomicActionScoreJob.java | 62 ++++--- .../bipfinder/input_actionset_parameter.json | 18 +-- .../SparkAtomicActionScoreJobTest.java | 152 +++++++++--------- .../impact_indicators/oozie_app/workflow.xml | 76 +++------ 4 files changed, 130 insertions(+), 178 deletions(-) diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipfinder/SparkAtomicActionScoreJob.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipfinder/SparkAtomicActionScoreJob.java index fb11e829f..040c89782 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipfinder/SparkAtomicActionScoreJob.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipfinder/SparkAtomicActionScoreJob.java @@ -6,13 +6,14 @@ import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkSession; import java.io.Serializable; import java.util.List; -import java.util.Optional; import java.util.stream.Collectors; import org.apache.commons.io.IOUtils; import org.apache.hadoop.io.Text; +import org.apache.hadoop.io.compress.GzipCodec; import org.apache.hadoop.mapred.SequenceFileOutputFormat; import org.apache.spark.SparkConf; +import org.apache.spark.api.java.JavaPairRDD; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.JavaSparkContext; import org.apache.spark.api.java.function.MapFunction; @@ -41,8 +42,6 @@ import scala.Tuple2; */ public class SparkAtomicActionScoreJob implements Serializable { - private static final String RESULT = "result"; - private static final String PROJECT = "project"; private static final Logger log = LoggerFactory.getLogger(SparkAtomicActionScoreJob.class); private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); @@ -61,15 +60,15 @@ public class SparkAtomicActionScoreJob implements Serializable { Boolean isSparkSessionManaged = isSparkSessionManaged(parser); log.info("isSparkSessionManaged: {}", isSparkSessionManaged); - final String inputPath = parser.get("inputPath"); - log.info("inputPath: {}", inputPath); + final String resultsInputPath = parser.get("resultsInputPath"); + log.info("resultsInputPath: {}", resultsInputPath); + + final String projectsInputPath = parser.get("projectsInputPath"); + log.info("projectsInputPath: {}", projectsInputPath); final String outputPath = parser.get("outputPath"); log.info("outputPath: {}", outputPath); - final String targetEntity = parser.get("targetEntity"); - log.info("targetEntity: {}", targetEntity); - SparkConf conf = new SparkConf(); runWithSparkSession( @@ -78,26 +77,23 @@ public class SparkAtomicActionScoreJob implements Serializable { spark -> { removeOutputDir(spark, outputPath); - // follow different procedures for different target entities - switch (targetEntity) { - case RESULT: - prepareResults(spark, inputPath, outputPath); - break; - case PROJECT: - prepareProjects(spark, inputPath, outputPath); - break; - default: - throw new RuntimeException("Unknown target entity: " + targetEntity); - } + JavaPairRDD resultsRDD = prepareResults(spark, resultsInputPath, outputPath); + JavaPairRDD projectsRDD = prepareProjects(spark, projectsInputPath, outputPath); + + resultsRDD + .union(projectsRDD) + .saveAsHadoopFile( + outputPath, Text.class, Text.class, SequenceFileOutputFormat.class, GzipCodec.class); }); } - private static void prepareProjects(SparkSession spark, String inputPath, String outputPath) { + private static JavaPairRDD prepareProjects(SparkSession spark, String inputPath, + String outputPath) { // read input bip project scores Dataset projectScores = readPath(spark, inputPath, BipProjectModel.class); - projectScores.map((MapFunction) bipProjectScores -> { + return projectScores.map((MapFunction) bipProjectScores -> { Project project = new Project(); project.setId(bipProjectScores.getProjectId()); project.setMeasures(bipProjectScores.toMeasures()); @@ -107,12 +103,12 @@ public class SparkAtomicActionScoreJob implements Serializable { .map(p -> new AtomicAction(Project.class, p)) .mapToPair( aa -> new Tuple2<>(new Text(aa.getClazz().getCanonicalName()), - new Text(OBJECT_MAPPER.writeValueAsString(aa)))) - .saveAsHadoopFile(outputPath, Text.class, Text.class, SequenceFileOutputFormat.class); + new Text(OBJECT_MAPPER.writeValueAsString(aa)))); } - private static void prepareResults(SparkSession spark, String bipScorePath, String outputPath) { + private static JavaPairRDD prepareResults(SparkSession spark, String bipScorePath, + String outputPath) { final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); @@ -128,24 +124,20 @@ public class SparkAtomicActionScoreJob implements Serializable { return bs; }).collect(Collectors.toList()).iterator()).rdd(), Encoders.bean(BipScore.class)); - bipScores + return bipScores.map((MapFunction) bs -> { + Result ret = new Result(); - .map((MapFunction) bs -> { - Result ret = new Result(); + ret.setId(bs.getId()); - ret.setId(bs.getId()); + ret.setMeasures(getMeasure(bs)); - ret.setMeasures(getMeasure(bs)); - - return ret; - }, Encoders.bean(Result.class)) + return ret; + }, Encoders.bean(Result.class)) .toJavaRDD() .map(p -> new AtomicAction(Result.class, p)) .mapToPair( aa -> new Tuple2<>(new Text(aa.getClazz().getCanonicalName()), - new Text(OBJECT_MAPPER.writeValueAsString(aa)))) - .saveAsHadoopFile(outputPath, Text.class, Text.class, SequenceFileOutputFormat.class); - + new Text(OBJECT_MAPPER.writeValueAsString(aa)))); } private static List getMeasure(BipScore value) { diff --git a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipfinder/input_actionset_parameter.json b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipfinder/input_actionset_parameter.json index d6b93c5af..c472eb5e6 100644 --- a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipfinder/input_actionset_parameter.json +++ b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipfinder/input_actionset_parameter.json @@ -6,9 +6,15 @@ "paramRequired": false }, { - "paramName": "ip", - "paramLongName": "inputPath", - "paramDescription": "the URL from where to get the programme file", + "paramName": "rip", + "paramLongName": "resultsInputPath", + "paramDescription": "the URL from where to get the input file for results", + "paramRequired": true + }, + { + "paramName": "pip", + "paramLongName": "projectsInputPath", + "paramDescription": "the URL from where to get the input file for projects", "paramRequired": true }, { @@ -16,11 +22,5 @@ "paramLongName": "outputPath", "paramDescription": "the path of the new ActionSet", "paramRequired": true - }, - { - "paramName": "te", - "paramLongName": "targetEntity", - "paramDescription": "the type of target entity to be enriched; currently supported one of { 'result', 'project' }", - "paramRequired": true } ] \ No newline at end of file diff --git a/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/bipfinder/SparkAtomicActionScoreJobTest.java b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/bipfinder/SparkAtomicActionScoreJobTest.java index 7752fbc27..542354836 100644 --- a/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/bipfinder/SparkAtomicActionScoreJobTest.java +++ b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/bipfinder/SparkAtomicActionScoreJobTest.java @@ -7,6 +7,8 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; +import javax.xml.crypto.Data; + import org.apache.commons.io.FileUtils; import org.apache.hadoop.io.Text; import org.apache.spark.SparkConf; @@ -27,6 +29,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import eu.dnetlib.dhp.schema.action.AtomicAction; import eu.dnetlib.dhp.schema.oaf.KeyValue; +import eu.dnetlib.dhp.schema.oaf.OafEntity; import eu.dnetlib.dhp.schema.oaf.Project; import eu.dnetlib.dhp.schema.oaf.Result; @@ -38,9 +41,6 @@ public class SparkAtomicActionScoreJobTest { private static Path workingDir; - private final static String RESULT = "result"; - private final static String PROJECT = "project"; - private static final Logger log = LoggerFactory.getLogger(SparkAtomicActionScoreJobTest.class); @BeforeAll @@ -72,50 +72,64 @@ public class SparkAtomicActionScoreJobTest { spark.stop(); } - private void runJob(String inputPath, String outputPath, String targetEntity) throws Exception { + private void runJob(String resultsInputPath, String projectsInputPath, String outputPath) throws Exception { SparkAtomicActionScoreJob .main( new String[] { "-isSparkSessionManaged", Boolean.FALSE.toString(), - "-inputPath", inputPath, + "-resultsInputPath", resultsInputPath, + "-projectsInputPath", projectsInputPath, "-outputPath", outputPath, - "-targetEntity", targetEntity, }); } @Test - void testResultScores() throws Exception { - final String targetEntity = RESULT; - String inputResultScores = getClass() + void testScores() throws Exception { + + String resultsInputPath = getClass() .getResource("/eu/dnetlib/dhp/actionmanager/bipfinder/result_bip_scores.json") .getPath(); - String outputPath = workingDir.toString() + "/" + targetEntity + "/actionSet"; + + String projectsInputPath = getClass() + .getResource("/eu/dnetlib/dhp/actionmanager/bipfinder/project_bip_scores.json") + .getPath(); + + String outputPath = workingDir.toString() + "/actionSet"; // execute the job to generate the action sets for result scores - runJob(inputResultScores, outputPath, targetEntity); + runJob(resultsInputPath, projectsInputPath, outputPath); final JavaSparkContext sc = new JavaSparkContext(spark.sparkContext()); - JavaRDD tmp = sc + JavaRDD tmp = sc .sequenceFile(outputPath, Text.class, Text.class) .map(value -> OBJECT_MAPPER.readValue(value._2().toString(), AtomicAction.class)) - .map(aa -> ((Result) aa.getPayload())); + .map(aa -> ((OafEntity) aa.getPayload())); - assertEquals(4, tmp.count()); + assertEquals(8, tmp.count()); - Dataset verificationDataset = spark.createDataset(tmp.rdd(), Encoders.bean(Result.class)); + Dataset verificationDataset = spark.createDataset(tmp.rdd(), Encoders.bean(OafEntity.class)); verificationDataset.createOrReplaceTempView("result"); - Dataset execVerification = spark + Dataset testDataset = spark .sql( "Select p.id oaid, mes.id, mUnit.value from result p " + "lateral view explode(measures) m as mes " + "lateral view explode(mes.unit) u as mUnit "); - Assertions.assertEquals(12, execVerification.count()); +// execVerification.show(); + + Assertions.assertEquals(28, testDataset.count()); + + assertResultImpactScores(testDataset); + assertProjectImpactScores(testDataset); + + } + + void assertResultImpactScores(Dataset testDataset) { Assertions .assertEquals( - "6.63451994567e-09", execVerification + "6.63451994567e-09", testDataset .filter( "oaid='50|arXiv_dedup_::4a2d5fd8d71daec016c176ec71d957b1' " + "and id = 'influence'") @@ -125,7 +139,7 @@ public class SparkAtomicActionScoreJobTest { .getString(0)); Assertions .assertEquals( - "0.348694533145", execVerification + "0.348694533145", testDataset .filter( "oaid='50|arXiv_dedup_::4a2d5fd8d71daec016c176ec71d957b1' " + "and id = 'popularity_alt'") @@ -135,7 +149,7 @@ public class SparkAtomicActionScoreJobTest { .getString(0)); Assertions .assertEquals( - "2.16094680115e-09", execVerification + "2.16094680115e-09", testDataset .filter( "oaid='50|arXiv_dedup_::4a2d5fd8d71daec016c176ec71d957b1' " + "and id = 'popularity'") @@ -143,65 +157,49 @@ public class SparkAtomicActionScoreJobTest { .collectAsList() .get(0) .getString(0)); - } - @Test - void testProjectScores() throws Exception { - String targetEntity = PROJECT; - String inputResultScores = getClass() - .getResource("/eu/dnetlib/dhp/actionmanager/bipfinder/project_bip_scores.json") - .getPath(); - String outputPath = workingDir.toString() + "/" + targetEntity + "/actionSet"; + void assertProjectImpactScores(Dataset testDataset) throws Exception { - // execute the job to generate the action sets for project scores - runJob(inputResultScores, outputPath, PROJECT); - - final JavaSparkContext sc = new JavaSparkContext(spark.sparkContext()); - - JavaRDD projects = sc - .sequenceFile(outputPath, Text.class, Text.class) - .map(value -> OBJECT_MAPPER.readValue(value._2().toString(), AtomicAction.class)) - .map(aa -> ((Project) aa.getPayload())); - - // test the number of projects - assertEquals(4, projects.count()); - - String testProjectId = "40|nih_________::c02a8233e9b60f05bb418f0c9b714833"; - - // count that the project with id testProjectId is present - assertEquals(1, projects.filter(row -> row.getId().equals(testProjectId)).count()); - - projects - .filter(row -> row.getId().equals(testProjectId)) - .flatMap(r -> r.getMeasures().iterator()) - .foreach(m -> { - log.info(m.getId() + " " + m.getUnit()); - - // ensure that only one score is present for each bip impact measure - assertEquals(1, m.getUnit().size()); - - KeyValue kv = m.getUnit().get(0); - - // ensure that the correct key is provided, i.e. score - assertEquals("score", kv.getKey()); - - switch (m.getId()) { - case "numOfInfluentialResults": - assertEquals("0", kv.getValue()); - break; - case "numOfPopularResults": - assertEquals("1", kv.getValue()); - break; - case "totalImpulse": - assertEquals("25", kv.getValue()); - break; - case "totalCitationCount": - assertEquals("43", kv.getValue()); - break; - default: - fail("Unknown measure id in the context of projects"); - } - }); + Assertions + .assertEquals( + "0", testDataset + .filter( + "oaid='40|nih_________::c02a8233e9b60f05bb418f0c9b714833' " + + "and id = 'numOfInfluentialResults'") + .select("value") + .collectAsList() + .get(0) + .getString(0)); + Assertions + .assertEquals( + "1", testDataset + .filter( + "oaid='40|nih_________::c02a8233e9b60f05bb418f0c9b714833' " + + "and id = 'numOfPopularResults'") + .select("value") + .collectAsList() + .get(0) + .getString(0)); + Assertions + .assertEquals( + "25", testDataset + .filter( + "oaid='40|nih_________::c02a8233e9b60f05bb418f0c9b714833' " + + "and id = 'totalImpulse'") + .select("value") + .collectAsList() + .get(0) + .getString(0)); + Assertions + .assertEquals( + "43", testDataset + .filter( + "oaid='40|nih_________::c02a8233e9b60f05bb418f0c9b714833' " + + "and id = 'totalCitationCount'") + .select("value") + .collectAsList() + .get(0) + .getString(0)); } } diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml index 349e054d8..c225fa3e1 100644 --- a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml @@ -31,7 +31,7 @@ ${wf:conf('resume') eq "projects-impact"} - ${wf:conf('resume') eq "projects-impact-actionsets"} + ${wf:conf('resume') eq "create-actionset"} @@ -455,53 +455,11 @@ ${wfAppPath}/map_scores_to_dois.py#map_scores_to_dois.py - + - - - - - - - - - - - - - - - - - yarn-cluster - cluster - Produces the atomic action with the bip finder scores for publications - eu.dnetlib.dhp.actionmanager.bipfinder.SparkAtomicActionScoreJob - dhp-aggregation-${projectVersion}.jar - - - --executor-memory=${sparkNormalExecutorMemory} - --executor-cores=${sparkExecutorCores} - --driver-memory=${sparkNormalDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.sql.warehouse.dir=${sparkSqlWarehouseDir} - - --inputPath${bipScorePath} - --outputPath${actionSetOutputPath}/results/ - --targetEntityresult - - - - - - - @@ -538,17 +496,26 @@ ${wfAppPath}/projects_impact.py#projects_impact.py - + - - + + + + + + + + + + + yarn-cluster cluster - Produces the atomic action with the bip finder scores for projects + Produces the atomic action with the bip finder scores eu.dnetlib.dhp.actionmanager.bipfinder.SparkAtomicActionScoreJob dhp-aggregation-${projectVersion}.jar @@ -563,14 +530,13 @@ --conf spark.sql.warehouse.dir=${sparkSqlWarehouseDir} - --inputPath${projectImpactIndicatorsOutput} - --outputPath${actionSetOutputPath}/projects/ - --targetEntityproject + --resultsInputPath${bipScorePath} + --projectsInputPath${projectImpactIndicatorsOutput} + --outputPath${actionSetOutputPath} - - + @@ -630,10 +596,6 @@ Calculating project impact indicators failed, error message[${wf:errorMessage(wf:lastErrorNode())}]
- - ActionSet creation for projects failed, error message[${wf:errorMessage(wf:lastErrorNode())}] - - From 0d7b2bf83d9cea3e948d6d7481db785b6fa8a20b Mon Sep 17 00:00:00 2001 From: Giambattista Bloisi Date: Mon, 28 Aug 2023 10:34:54 +0200 Subject: [PATCH 264/449] Rewrite SparkPropagateRelation exploiting Dataframe API --- .../dhp/oa/dedup/SparkPropagateRelation.java | 302 ++++++++---------- 1 file changed, 127 insertions(+), 175 deletions(-) diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkPropagateRelation.java b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkPropagateRelation.java index 0fa41bd6d..00dfd215d 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkPropagateRelation.java +++ b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkPropagateRelation.java @@ -1,19 +1,6 @@ package eu.dnetlib.dhp.oa.dedup; -import static org.apache.spark.sql.functions.col; - -import java.util.Objects; - -import org.apache.commons.io.IOUtils; -import org.apache.commons.lang3.StringUtils; -import org.apache.spark.SparkConf; -import org.apache.spark.api.java.function.FilterFunction; -import org.apache.spark.api.java.function.MapFunction; -import org.apache.spark.sql.*; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import eu.dnetlib.dhp.application.ArgumentApplicationParser; import eu.dnetlib.dhp.schema.common.ModelConstants; import eu.dnetlib.dhp.schema.common.ModelSupport; @@ -21,198 +8,163 @@ import eu.dnetlib.dhp.schema.oaf.DataInfo; import eu.dnetlib.dhp.schema.oaf.Relation; import eu.dnetlib.dhp.utils.ISLookupClientFactory; import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpService; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.spark.SparkConf; +import org.apache.spark.api.java.function.FilterFunction; +import org.apache.spark.api.java.function.MapFunction; +import org.apache.spark.api.java.function.ReduceFunction; +import org.apache.spark.sql.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import scala.Tuple2; import scala.Tuple3; +import java.util.Objects; + +import static org.apache.spark.sql.functions.col; + public class SparkPropagateRelation extends AbstractSparkAction { - private static final Logger log = LoggerFactory.getLogger(SparkPropagateRelation.class); + private static final Logger log = LoggerFactory.getLogger(SparkPropagateRelation.class); - enum FieldType { - SOURCE, TARGET - } + private static Encoder REL_BEAN_ENC = Encoders.bean(Relation.class); - public SparkPropagateRelation(ArgumentApplicationParser parser, SparkSession spark) { - super(parser, spark); - } + private static Encoder REL_KRYO_ENC = Encoders.kryo(Relation.class); - public static void main(String[] args) throws Exception { - ArgumentApplicationParser parser = new ArgumentApplicationParser( - IOUtils - .toString( - SparkPropagateRelation.class - .getResourceAsStream( - "/eu/dnetlib/dhp/oa/dedup/propagateRelation_parameters.json"))); + public SparkPropagateRelation(ArgumentApplicationParser parser, SparkSession spark) { + super(parser, spark); + } - parser.parseArgument(args); + public static void main(String[] args) throws Exception { + ArgumentApplicationParser parser = new ArgumentApplicationParser( + IOUtils + .toString( + SparkPropagateRelation.class + .getResourceAsStream( + "/eu/dnetlib/dhp/oa/dedup/propagateRelation_parameters.json"))); - SparkConf conf = new SparkConf(); - conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer"); - conf.registerKryoClasses(ModelSupport.getOafModelClasses()); + parser.parseArgument(args); - new SparkPropagateRelation(parser, getSparkSession(conf)) - .run(ISLookupClientFactory.getLookUpService(parser.get("isLookUpUrl"))); - } + SparkConf conf = new SparkConf(); + conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer"); + conf.registerKryoClasses(ModelSupport.getOafModelClasses()); - @Override - public void run(ISLookUpService isLookUpService) { + new SparkPropagateRelation(parser, getSparkSession(conf)) + .run(ISLookupClientFactory.getLookUpService(parser.get("isLookUpUrl"))); + } - final String graphBasePath = parser.get("graphBasePath"); - final String workingPath = parser.get("workingPath"); - final String graphOutputPath = parser.get("graphOutputPath"); + @Override + public void run(ISLookUpService isLookUpService) { - log.info("graphBasePath: '{}'", graphBasePath); - log.info("workingPath: '{}'", workingPath); - log.info("graphOutputPath: '{}'", graphOutputPath); + final String graphBasePath = parser.get("graphBasePath"); + final String workingPath = parser.get("workingPath"); + final String graphOutputPath = parser.get("graphOutputPath"); - final String outputRelationPath = DedupUtility.createEntityPath(graphOutputPath, "relation"); - removeOutputDir(spark, outputRelationPath); + log.info("graphBasePath: '{}'", graphBasePath); + log.info("workingPath: '{}'", workingPath); + log.info("graphOutputPath: '{}'", graphOutputPath); - Dataset mergeRels = spark - .read() - .load(DedupUtility.createMergeRelPath(workingPath, "*", "*")) - .as(Encoders.bean(Relation.class)); + final String outputRelationPath = DedupUtility.createEntityPath(graphOutputPath, "relation"); + removeOutputDir(spark, outputRelationPath); - // - Dataset> mergedIds = mergeRels - .where(col("relClass").equalTo(ModelConstants.MERGES)) - .select(col("source"), col("target")) - .distinct() - .map( - (MapFunction>) r -> new Tuple2<>(r.getString(1), r.getString(0)), - Encoders.tuple(Encoders.STRING(), Encoders.STRING())) - .cache(); + Dataset mergeRels = spark + .read() + .load(DedupUtility.createMergeRelPath(workingPath, "*", "*")) + .as(REL_BEAN_ENC); - final String relationPath = DedupUtility.createEntityPath(graphBasePath, "relation"); + // + Dataset mergedIds = mergeRels + .where(col("relClass").equalTo(ModelConstants.MERGES)) + .select(col("source").as("dedupID"), col("target").as("mergedObjectID")) + .distinct() + .cache(); - Dataset rels = spark.read().textFile(relationPath).map(patchRelFn(), Encoders.bean(Relation.class)); + final String inputRelationPath = DedupUtility.createEntityPath(graphBasePath, "relation"); - Dataset newRels = createNewRels(rels, mergedIds, getFixRelFn()); + Dataset rels = spark.read().schema(REL_BEAN_ENC.schema()).json(inputRelationPath) + .as(REL_BEAN_ENC) +// .map((MapFunction) rel -> { +// if (rel.getDataInfo() == null) { +// rel.setDataInfo(new DataInfo()); +// } +// return rel; +// }, REL_BEAN_ENC) + ; - Dataset updated = processDataset( - processDataset(rels, mergedIds, FieldType.SOURCE, getDeletedFn()), - mergedIds, - FieldType.TARGET, - getDeletedFn()); + Dataset> dedupedRels = rels + .joinWith(mergedIds, rels.col("source").equalTo(mergedIds.col("mergedObjectID")), "left_outer") + .joinWith(mergedIds, col("_1.target").equalTo(mergedIds.col("mergedObjectID")), "left_outer") + .filter("_1._2 IS NOT NULL OR _2 IS NOT NULL") + .select("_1._1", "_1._2.dedupID", "_2.dedupID") + .as(Encoders.tuple(REL_BEAN_ENC, Encoders.STRING(), Encoders.STRING())) + .cache(); - save( - distinctRelations( - newRels - .union(updated) - .union(mergeRels) - .map((MapFunction) r -> r, Encoders.kryo(Relation.class))) - .filter((FilterFunction) r -> !Objects.equals(r.getSource(), r.getTarget())), - outputRelationPath, SaveMode.Overwrite); - } + mergedIds.unpersist(); - private Dataset distinctRelations(Dataset rels) { - return rels - .filter(getRelationFilterFunction()) - .groupByKey( - (MapFunction) r -> String - .join(r.getSource(), r.getTarget(), r.getRelType(), r.getSubRelType(), r.getRelClass()), - Encoders.STRING()) - .agg(new RelationAggregator().toColumn()) - .map((MapFunction, Relation>) Tuple2::_2, Encoders.bean(Relation.class)); - } + Dataset newRels = dedupedRels + .map((MapFunction, Relation>) t -> { + Relation r = t._1(); + String newSource = t._2(); + String newTarget = t._3(); - // redirect the relations to the dedupID - private static Dataset createNewRels( - Dataset rels, // all the relations to be redirected - Dataset> mergedIds, // merge rels: - MapFunction, Tuple2>, Tuple2>, Relation> mapRel) { + if (r.getDataInfo() == null) { + r.setDataInfo(new DataInfo()); + } + r.getDataInfo().setDeletedbyinference(false); - // - Dataset> mapped = rels - .map( - (MapFunction>) r -> new Tuple3<>(getId(r, FieldType.SOURCE), - r, getId(r, FieldType.TARGET)), - Encoders.tuple(Encoders.STRING(), Encoders.kryo(Relation.class), Encoders.STRING())); + if (newSource != null) + r.setSource(newSource); - // < , > - Dataset, Tuple2>> relSource = mapped - .joinWith(mergedIds, mapped.col("_1").equalTo(mergedIds.col("_1")), "left_outer"); + if (newTarget != null) + r.setTarget(newTarget); - // < <, >, > - Dataset, Tuple2>, Tuple2>> relSourceTarget = relSource - .joinWith(mergedIds, relSource.col("_1._3").equalTo(mergedIds.col("_1")), "left_outer"); + return r; + }, REL_BEAN_ENC) + .distinct(); - return relSourceTarget - .filter( - (FilterFunction, Tuple2>, Tuple2>>) r -> r - ._1() - ._1() != null || r._2() != null) - .map(mapRel, Encoders.bean(Relation.class)) - .distinct(); - } + Dataset updated = dedupedRels + .map((MapFunction, Relation>) t -> { + Relation r = t._1(); + if (r.getDataInfo() == null) { + r.setDataInfo(new DataInfo()); + } + r.getDataInfo().setDeletedbyinference(true); + return r; + }, REL_BEAN_ENC); - private static Dataset processDataset( - Dataset rels, - Dataset> mergedIds, - FieldType type, - MapFunction, Tuple2>, Relation> mapFn) { - final Dataset> mapped = rels - .map( - (MapFunction>) r -> new Tuple2<>(getId(r, type), r), - Encoders.tuple(Encoders.STRING(), Encoders.kryo(Relation.class))); - return mapped - .joinWith(mergedIds, mapped.col("_1").equalTo(mergedIds.col("_1")), "left_outer") - .map(mapFn, Encoders.bean(Relation.class)); - } + save( + distinctRelations( + newRels + .union(updated) + .union(mergeRels) + .map((MapFunction) r -> r, REL_KRYO_ENC) + ) + .filter((FilterFunction) r -> !Objects.equals(r.getSource(), r.getTarget())), + outputRelationPath, SaveMode.Overwrite); + } - private FilterFunction getRelationFilterFunction() { - return r -> StringUtils.isNotBlank(r.getSource()) || - StringUtils.isNotBlank(r.getTarget()) || - StringUtils.isNotBlank(r.getRelType()) || - StringUtils.isNotBlank(r.getSubRelType()) || - StringUtils.isNotBlank(r.getRelClass()); - } + private Dataset distinctRelations(Dataset rels) { + return rels + .filter(getRelationFilterFunction()) + .groupByKey( + (MapFunction) r -> String + .join(" ", r.getSource(), r.getTarget(), r.getRelType(), r.getSubRelType(), r.getRelClass()), + Encoders.STRING()) + .reduceGroups((ReduceFunction) (b, a) -> { + b.mergeFrom(a); + return b; + } + ) - private static String getId(Relation r, FieldType type) { - switch (type) { - case SOURCE: - return r.getSource(); - case TARGET: - return r.getTarget(); - default: - throw new IllegalArgumentException(""); - } - } - - private static MapFunction, Tuple2>, Tuple2>, Relation> getFixRelFn() { - return value -> { - - Relation r = value._1()._1()._2(); - String newSource = value._1()._2() != null ? value._1()._2()._2() : null; - String newTarget = value._2() != null ? value._2()._2() : null; - - if (r.getDataInfo() == null) { - r.setDataInfo(new DataInfo()); - } - r.getDataInfo().setDeletedbyinference(false); - - if (newSource != null) - r.setSource(newSource); - - if (newTarget != null) - r.setTarget(newTarget); - - return r; - }; - } - - private static MapFunction, Tuple2>, Relation> getDeletedFn() { - return value -> { - if (value._2() != null) { - Relation r = value._1()._2(); - if (r.getDataInfo() == null) { - r.setDataInfo(new DataInfo()); - } - r.getDataInfo().setDeletedbyinference(true); - return r; - } - return value._1()._2(); - }; - } + .map((MapFunction, Relation>) Tuple2::_2, REL_BEAN_ENC); + } + private FilterFunction getRelationFilterFunction() { + return r -> StringUtils.isNotBlank(r.getSource()) || + StringUtils.isNotBlank(r.getTarget()) || + StringUtils.isNotBlank(r.getRelType()) || + StringUtils.isNotBlank(r.getSubRelType()) || + StringUtils.isNotBlank(r.getRelClass()); + } } From a860e1942313b0ee2f9a1dae07493108157f3a64 Mon Sep 17 00:00:00 2001 From: Giambattista Bloisi Date: Mon, 28 Aug 2023 15:36:02 +0200 Subject: [PATCH 265/449] Fix ensure all relations are written out, not only those managed by dedup --- .../dhp/oa/dedup/SparkPropagateRelation.java | 90 ++++++++----------- 1 file changed, 38 insertions(+), 52 deletions(-) diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkPropagateRelation.java b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkPropagateRelation.java index 00dfd215d..d16a3a63d 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkPropagateRelation.java +++ b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkPropagateRelation.java @@ -8,6 +8,7 @@ import eu.dnetlib.dhp.schema.oaf.DataInfo; import eu.dnetlib.dhp.schema.oaf.Relation; import eu.dnetlib.dhp.utils.ISLookupClientFactory; import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpService; +import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.apache.spark.SparkConf; @@ -20,6 +21,9 @@ import org.slf4j.LoggerFactory; import scala.Tuple2; import scala.Tuple3; +import java.util.Arrays; +import java.util.Collections; +import java.util.Iterator; import java.util.Objects; import static org.apache.spark.sql.functions.col; @@ -80,68 +84,51 @@ public class SparkPropagateRelation extends AbstractSparkAction { .distinct() .cache(); - final String inputRelationPath = DedupUtility.createEntityPath(graphBasePath, "relation"); + Dataset allRels = spark.read() + .schema(REL_BEAN_ENC.schema()) + .json(DedupUtility.createEntityPath(graphBasePath, "relation")); - Dataset rels = spark.read().schema(REL_BEAN_ENC.schema()).json(inputRelationPath) - .as(REL_BEAN_ENC) -// .map((MapFunction) rel -> { -// if (rel.getDataInfo() == null) { -// rel.setDataInfo(new DataInfo()); -// } -// return rel; -// }, REL_BEAN_ENC) - ; - - Dataset> dedupedRels = rels - .joinWith(mergedIds, rels.col("source").equalTo(mergedIds.col("mergedObjectID")), "left_outer") + Dataset dedupedRels = allRels + .joinWith(mergedIds, allRels.col("source").equalTo(mergedIds.col("mergedObjectID")), "left_outer") .joinWith(mergedIds, col("_1.target").equalTo(mergedIds.col("mergedObjectID")), "left_outer") - .filter("_1._2 IS NOT NULL OR _2 IS NOT NULL") .select("_1._1", "_1._2.dedupID", "_2.dedupID") .as(Encoders.tuple(REL_BEAN_ENC, Encoders.STRING(), Encoders.STRING())) - .cache(); + .flatMap(SparkPropagateRelation::addInferredRelations, REL_KRYO_ENC); - mergedIds.unpersist(); + Dataset processedRelations = distinctRelations(dedupedRels.union(mergeRels.map((MapFunction) r -> r, REL_KRYO_ENC))) + .filter((FilterFunction) r -> !Objects.equals(r.getSource(), r.getTarget())); - Dataset newRels = dedupedRels - .map((MapFunction, Relation>) t -> { - Relation r = t._1(); - String newSource = t._2(); - String newTarget = t._3(); + save(processedRelations, outputRelationPath, SaveMode.Overwrite); + } - if (r.getDataInfo() == null) { - r.setDataInfo(new DataInfo()); - } - r.getDataInfo().setDeletedbyinference(false); + private static Iterator addInferredRelations(Tuple3 t) throws Exception { + Relation existingRel = t._1(); + String newSource = t._2(); + String newTarget = t._3(); - if (newSource != null) - r.setSource(newSource); + if (newSource == null && newTarget == null) { + return Collections.singleton(t._1()).iterator(); + } - if (newTarget != null) - r.setTarget(newTarget); + // update existing relation + if (existingRel.getDataInfo() == null) { + existingRel.setDataInfo(new DataInfo()); + } + existingRel.getDataInfo().setDeletedbyinference(true); - return r; - }, REL_BEAN_ENC) - .distinct(); + // Create new relation inferred by dedupIDs + Relation inferredRel = (Relation) BeanUtils.cloneBean(existingRel); - Dataset updated = dedupedRels - .map((MapFunction, Relation>) t -> { - Relation r = t._1(); - if (r.getDataInfo() == null) { - r.setDataInfo(new DataInfo()); - } - r.getDataInfo().setDeletedbyinference(true); - return r; - }, REL_BEAN_ENC); + inferredRel.setDataInfo((DataInfo) BeanUtils.cloneBean(existingRel.getDataInfo())); + inferredRel.getDataInfo().setDeletedbyinference(false); - save( - distinctRelations( - newRels - .union(updated) - .union(mergeRels) - .map((MapFunction) r -> r, REL_KRYO_ENC) - ) - .filter((FilterFunction) r -> !Objects.equals(r.getSource(), r.getTarget())), - outputRelationPath, SaveMode.Overwrite); + if (newSource != null) + inferredRel.setSource(newSource); + + if (newTarget != null) + inferredRel.setTarget(newTarget); + + return Arrays.asList(existingRel, inferredRel).iterator(); } private Dataset distinctRelations(Dataset rels) { @@ -156,8 +143,7 @@ public class SparkPropagateRelation extends AbstractSparkAction { return b; } ) - - .map((MapFunction, Relation>) Tuple2::_2, REL_BEAN_ENC); + .map((MapFunction, Relation>) Tuple2::_2, REL_BEAN_ENC); } private FilterFunction getRelationFilterFunction() { From d012aec0b34369d5ec1074815b05785880329c7c Mon Sep 17 00:00:00 2001 From: Giambattista Bloisi Date: Mon, 28 Aug 2023 22:44:54 +0200 Subject: [PATCH 266/449] Revert PropagateRelation's argument name from outputPath to graphOutputPath in consistency workflow (#8964) --- .../eu/dnetlib/dhp/oa/dedup/consistency/oozie_app/workflow.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/consistency/oozie_app/workflow.xml b/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/consistency/oozie_app/workflow.xml index eb7e6d98d..2302d4b8f 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/consistency/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/consistency/oozie_app/workflow.xml @@ -95,7 +95,7 @@ --conf spark.sql.shuffle.partitions=15000 --graphBasePath${graphBasePath} - --outputPath${workingPath}/propagaterelation/ + --graphOutputPath${workingPath}/propagaterelation/ --workingPath${workingPath} From f437be80ad851bf4f67bfde629798603979b1216 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Tue, 29 Aug 2023 09:03:03 +0200 Subject: [PATCH 267/449] [impact indicators] adjusted paths in the bip ranker wf parameters --- .../impact_indicators/oozie_app/workflow.xml | 35 ++++++++++++++----- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml index c225fa3e1..0d7d29bfe 100644 --- a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml @@ -9,6 +9,26 @@ oozie.action.sharelib.for.spark ${oozieActionShareLibForSpark2} + + projectImpactIndicatorsOutput + ${nameNode}${workingDir}/project_indicators + + + openaireGraphInputPath + ${nameNode}/${workingDir}/openaire_id_graph + + + synonymFolder + ${nameNode}/${workingDir}/openaireid_to_dois/ + + + checkpointDir + ${nameNode}/${workingDir}/check/ + + + bipScorePath + ${nameNode}${workingDir}/openaire_universe_scores/ + @@ -65,9 +85,8 @@ ${sparkShufflePartitions} - ${openaireGraphInputPath} - - ${wfAppPath}/create_openaire_ranking_graph.py#create_openaire_ranking_graph.py + ${nameNode}${workingDir}/openaire_id_graph + ${nameNode}${wfAppPath}/create_openaire_ranking_graph.py#create_openaire_ranking_graph.py @@ -103,7 +122,7 @@ - ${openaireGraphInputPath} + ${nameNode}/${workingDir}/openaire_id_graph ${sparkShufflePartitions} @@ -136,7 +155,7 @@ - ${openaireGraphInputPath} + ${nameNode}/${workingDir}/openaire_id_graph ${ramGamma} ${currentYear} RAM @@ -174,7 +193,7 @@ - ${openaireGraphInputPath} + ${nameNode}/${workingDir}/openaire_id_graph ${sparkShufflePartitions} 3 @@ -207,7 +226,7 @@ - ${openaireGraphInputPath} + ${nameNode}/${workingDir}/openaire_id_graph ${pageRankAlpha} ${convergenceError} ${checkpointDir} @@ -243,7 +262,7 @@ - ${openaireGraphInputPath} + ${nameNode}/${workingDir}/openaire_id_graph ${attrankAlpha} ${attrankBeta} ${attrankGamma} From bf35280ea6201dd9189d240ee261deb83e2a8844 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Tue, 29 Aug 2023 11:11:00 +0200 Subject: [PATCH 268/449] code formatting --- .../oaf/utils/GraphCleaningFunctions.java | 81 ++++--- .../eu/dnetlib/pace/util/DiffPatchMatch.java | 1 - .../dhp/oa/dedup/SparkPropagateRelation.java | 222 +++++++++--------- .../clean/GraphCleaningFunctionsTest.java | 2 +- .../group/GroupEntitiesSparkJobTest.java | 30 +-- 5 files changed, 173 insertions(+), 163 deletions(-) diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java index 6b1d14829..8afa41f95 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java @@ -226,19 +226,19 @@ public class GraphCleaningFunctions extends CleaningFunctions { public static boolean filter(T value) { if (!(value instanceof Relation) && (Boolean.TRUE - .equals( - Optional - .ofNullable(value) - .map( - o -> Optional - .ofNullable(o.getDataInfo()) - .map( - d -> Optional - .ofNullable(d.getInvisible()) - .orElse(true)) - .orElse(false)) - .orElse(true)))) { - return true; + .equals( + Optional + .ofNullable(value) + .map( + o -> Optional + .ofNullable(o.getDataInfo()) + .map( + d -> Optional + .ofNullable(d.getInvisible()) + .orElse(true)) + .orElse(false)) + .orElse(true)))) { + return true; } if (value instanceof Datasource) { @@ -292,9 +292,10 @@ public class GraphCleaningFunctions extends CleaningFunctions { } else if (value instanceof Result) { Result r = (Result) value; - if (Objects.nonNull(r.getFulltext()) && (ModelConstants.SOFTWARE_RESULTTYPE_CLASSID.equals(r.getResulttype().getClassid()) || - ModelConstants.DATASET_RESULTTYPE_CLASSID.equals(r.getResulttype().getClassid()))) { - r.setFulltext(null); + if (Objects.nonNull(r.getFulltext()) + && (ModelConstants.SOFTWARE_RESULTTYPE_CLASSID.equals(r.getResulttype().getClassid()) || + ModelConstants.DATASET_RESULTTYPE_CLASSID.equals(r.getResulttype().getClassid()))) { + r.setFulltext(null); } @@ -326,10 +327,13 @@ public class GraphCleaningFunctions extends CleaningFunctions { if (StringUtils.isBlank(r.getPublisher().getValue())) { r.setPublisher(null); } else { - r.getPublisher().setValue( - r.getPublisher().getValue() - .replaceAll(NAME_CLEANING_REGEX, " ") - ); + r + .getPublisher() + .setValue( + r + .getPublisher() + .getValue() + .replaceAll(NAME_CLEANING_REGEX, " ")); } } if (Objects.isNull(r.getLanguage()) || StringUtils.isBlank(r.getLanguage().getClassid())) { @@ -498,8 +502,8 @@ public class GraphCleaningFunctions extends CleaningFunctions { } } if (StringUtils.isNotBlank(i.getFulltext()) && - (ModelConstants.SOFTWARE_RESULTTYPE_CLASSID.equals(r.getResulttype().getClassid()) || - ModelConstants.DATASET_RESULTTYPE_CLASSID.equals(r.getResulttype().getClassid()))) { + (ModelConstants.SOFTWARE_RESULTTYPE_CLASSID.equals(r.getResulttype().getClassid()) || + ModelConstants.DATASET_RESULTTYPE_CLASSID.equals(r.getResulttype().getClassid()))) { i.setFulltext(null); } } @@ -623,25 +627,28 @@ public class GraphCleaningFunctions extends CleaningFunctions { private static Author cleanupAuthor(Author author) { if (StringUtils.isNotBlank(author.getFullname())) { - author.setFullname( - author.getFullname() - .replaceAll(NAME_CLEANING_REGEX, " ") - .replace("\"", "\\\"") - ); + author + .setFullname( + author + .getFullname() + .replaceAll(NAME_CLEANING_REGEX, " ") + .replace("\"", "\\\"")); } if (StringUtils.isNotBlank(author.getName())) { - author.setName( - author.getName() - .replaceAll(NAME_CLEANING_REGEX, " ") - .replace("\"", "\\\"") - ); + author + .setName( + author + .getName() + .replaceAll(NAME_CLEANING_REGEX, " ") + .replace("\"", "\\\"")); } if (StringUtils.isNotBlank(author.getSurname())) { - author.setSurname( - author.getSurname() - .replaceAll(NAME_CLEANING_REGEX, " ") - .replace("\"", "\\\"") - ); + author + .setSurname( + author + .getSurname() + .replaceAll(NAME_CLEANING_REGEX, " ") + .replace("\"", "\\\"")); } return author; diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/DiffPatchMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/DiffPatchMatch.java index c885f2aeb..84d49bd5c 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/DiffPatchMatch.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/DiffPatchMatch.java @@ -18,7 +18,6 @@ package eu.dnetlib.pace.util; * See the License for the specific language governing permissions and * limitations under the License. */ - import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder; diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkPropagateRelation.java b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkPropagateRelation.java index d16a3a63d..175ebf8a6 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkPropagateRelation.java +++ b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkPropagateRelation.java @@ -1,13 +1,13 @@ package eu.dnetlib.dhp.oa.dedup; -import eu.dnetlib.dhp.application.ArgumentApplicationParser; -import eu.dnetlib.dhp.schema.common.ModelConstants; -import eu.dnetlib.dhp.schema.common.ModelSupport; -import eu.dnetlib.dhp.schema.oaf.DataInfo; -import eu.dnetlib.dhp.schema.oaf.Relation; -import eu.dnetlib.dhp.utils.ISLookupClientFactory; -import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpService; +import static org.apache.spark.sql.functions.col; + +import java.util.Arrays; +import java.util.Collections; +import java.util.Iterator; +import java.util.Objects; + import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; @@ -18,139 +18,141 @@ import org.apache.spark.api.java.function.ReduceFunction; import org.apache.spark.sql.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; + +import eu.dnetlib.dhp.application.ArgumentApplicationParser; +import eu.dnetlib.dhp.schema.common.ModelConstants; +import eu.dnetlib.dhp.schema.common.ModelSupport; +import eu.dnetlib.dhp.schema.oaf.DataInfo; +import eu.dnetlib.dhp.schema.oaf.Relation; +import eu.dnetlib.dhp.utils.ISLookupClientFactory; +import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpService; import scala.Tuple2; import scala.Tuple3; -import java.util.Arrays; -import java.util.Collections; -import java.util.Iterator; -import java.util.Objects; - -import static org.apache.spark.sql.functions.col; - public class SparkPropagateRelation extends AbstractSparkAction { - private static final Logger log = LoggerFactory.getLogger(SparkPropagateRelation.class); + private static final Logger log = LoggerFactory.getLogger(SparkPropagateRelation.class); - private static Encoder REL_BEAN_ENC = Encoders.bean(Relation.class); + private static Encoder REL_BEAN_ENC = Encoders.bean(Relation.class); - private static Encoder REL_KRYO_ENC = Encoders.kryo(Relation.class); + private static Encoder REL_KRYO_ENC = Encoders.kryo(Relation.class); - public SparkPropagateRelation(ArgumentApplicationParser parser, SparkSession spark) { - super(parser, spark); - } + public SparkPropagateRelation(ArgumentApplicationParser parser, SparkSession spark) { + super(parser, spark); + } - public static void main(String[] args) throws Exception { - ArgumentApplicationParser parser = new ArgumentApplicationParser( - IOUtils - .toString( - SparkPropagateRelation.class - .getResourceAsStream( - "/eu/dnetlib/dhp/oa/dedup/propagateRelation_parameters.json"))); + public static void main(String[] args) throws Exception { + ArgumentApplicationParser parser = new ArgumentApplicationParser( + IOUtils + .toString( + SparkPropagateRelation.class + .getResourceAsStream( + "/eu/dnetlib/dhp/oa/dedup/propagateRelation_parameters.json"))); - parser.parseArgument(args); + parser.parseArgument(args); - SparkConf conf = new SparkConf(); - conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer"); - conf.registerKryoClasses(ModelSupport.getOafModelClasses()); + SparkConf conf = new SparkConf(); + conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer"); + conf.registerKryoClasses(ModelSupport.getOafModelClasses()); - new SparkPropagateRelation(parser, getSparkSession(conf)) - .run(ISLookupClientFactory.getLookUpService(parser.get("isLookUpUrl"))); - } + new SparkPropagateRelation(parser, getSparkSession(conf)) + .run(ISLookupClientFactory.getLookUpService(parser.get("isLookUpUrl"))); + } - @Override - public void run(ISLookUpService isLookUpService) { + @Override + public void run(ISLookUpService isLookUpService) { - final String graphBasePath = parser.get("graphBasePath"); - final String workingPath = parser.get("workingPath"); - final String graphOutputPath = parser.get("graphOutputPath"); + final String graphBasePath = parser.get("graphBasePath"); + final String workingPath = parser.get("workingPath"); + final String graphOutputPath = parser.get("graphOutputPath"); - log.info("graphBasePath: '{}'", graphBasePath); - log.info("workingPath: '{}'", workingPath); - log.info("graphOutputPath: '{}'", graphOutputPath); + log.info("graphBasePath: '{}'", graphBasePath); + log.info("workingPath: '{}'", workingPath); + log.info("graphOutputPath: '{}'", graphOutputPath); - final String outputRelationPath = DedupUtility.createEntityPath(graphOutputPath, "relation"); - removeOutputDir(spark, outputRelationPath); + final String outputRelationPath = DedupUtility.createEntityPath(graphOutputPath, "relation"); + removeOutputDir(spark, outputRelationPath); - Dataset mergeRels = spark - .read() - .load(DedupUtility.createMergeRelPath(workingPath, "*", "*")) - .as(REL_BEAN_ENC); + Dataset mergeRels = spark + .read() + .load(DedupUtility.createMergeRelPath(workingPath, "*", "*")) + .as(REL_BEAN_ENC); - // - Dataset mergedIds = mergeRels - .where(col("relClass").equalTo(ModelConstants.MERGES)) - .select(col("source").as("dedupID"), col("target").as("mergedObjectID")) - .distinct() - .cache(); + // + Dataset mergedIds = mergeRels + .where(col("relClass").equalTo(ModelConstants.MERGES)) + .select(col("source").as("dedupID"), col("target").as("mergedObjectID")) + .distinct() + .cache(); - Dataset allRels = spark.read() - .schema(REL_BEAN_ENC.schema()) - .json(DedupUtility.createEntityPath(graphBasePath, "relation")); + Dataset allRels = spark + .read() + .schema(REL_BEAN_ENC.schema()) + .json(DedupUtility.createEntityPath(graphBasePath, "relation")); - Dataset dedupedRels = allRels - .joinWith(mergedIds, allRels.col("source").equalTo(mergedIds.col("mergedObjectID")), "left_outer") - .joinWith(mergedIds, col("_1.target").equalTo(mergedIds.col("mergedObjectID")), "left_outer") - .select("_1._1", "_1._2.dedupID", "_2.dedupID") - .as(Encoders.tuple(REL_BEAN_ENC, Encoders.STRING(), Encoders.STRING())) - .flatMap(SparkPropagateRelation::addInferredRelations, REL_KRYO_ENC); + Dataset dedupedRels = allRels + .joinWith(mergedIds, allRels.col("source").equalTo(mergedIds.col("mergedObjectID")), "left_outer") + .joinWith(mergedIds, col("_1.target").equalTo(mergedIds.col("mergedObjectID")), "left_outer") + .select("_1._1", "_1._2.dedupID", "_2.dedupID") + .as(Encoders.tuple(REL_BEAN_ENC, Encoders.STRING(), Encoders.STRING())) + .flatMap(SparkPropagateRelation::addInferredRelations, REL_KRYO_ENC); - Dataset processedRelations = distinctRelations(dedupedRels.union(mergeRels.map((MapFunction) r -> r, REL_KRYO_ENC))) - .filter((FilterFunction) r -> !Objects.equals(r.getSource(), r.getTarget())); + Dataset processedRelations = distinctRelations( + dedupedRels.union(mergeRels.map((MapFunction) r -> r, REL_KRYO_ENC))) + .filter((FilterFunction) r -> !Objects.equals(r.getSource(), r.getTarget())); - save(processedRelations, outputRelationPath, SaveMode.Overwrite); - } + save(processedRelations, outputRelationPath, SaveMode.Overwrite); + } - private static Iterator addInferredRelations(Tuple3 t) throws Exception { - Relation existingRel = t._1(); - String newSource = t._2(); - String newTarget = t._3(); + private static Iterator addInferredRelations(Tuple3 t) throws Exception { + Relation existingRel = t._1(); + String newSource = t._2(); + String newTarget = t._3(); - if (newSource == null && newTarget == null) { - return Collections.singleton(t._1()).iterator(); - } + if (newSource == null && newTarget == null) { + return Collections.singleton(t._1()).iterator(); + } - // update existing relation - if (existingRel.getDataInfo() == null) { - existingRel.setDataInfo(new DataInfo()); - } - existingRel.getDataInfo().setDeletedbyinference(true); + // update existing relation + if (existingRel.getDataInfo() == null) { + existingRel.setDataInfo(new DataInfo()); + } + existingRel.getDataInfo().setDeletedbyinference(true); - // Create new relation inferred by dedupIDs - Relation inferredRel = (Relation) BeanUtils.cloneBean(existingRel); + // Create new relation inferred by dedupIDs + Relation inferredRel = (Relation) BeanUtils.cloneBean(existingRel); - inferredRel.setDataInfo((DataInfo) BeanUtils.cloneBean(existingRel.getDataInfo())); - inferredRel.getDataInfo().setDeletedbyinference(false); + inferredRel.setDataInfo((DataInfo) BeanUtils.cloneBean(existingRel.getDataInfo())); + inferredRel.getDataInfo().setDeletedbyinference(false); - if (newSource != null) - inferredRel.setSource(newSource); + if (newSource != null) + inferredRel.setSource(newSource); - if (newTarget != null) - inferredRel.setTarget(newTarget); + if (newTarget != null) + inferredRel.setTarget(newTarget); - return Arrays.asList(existingRel, inferredRel).iterator(); - } + return Arrays.asList(existingRel, inferredRel).iterator(); + } - private Dataset distinctRelations(Dataset rels) { - return rels - .filter(getRelationFilterFunction()) - .groupByKey( - (MapFunction) r -> String - .join(" ", r.getSource(), r.getTarget(), r.getRelType(), r.getSubRelType(), r.getRelClass()), - Encoders.STRING()) - .reduceGroups((ReduceFunction) (b, a) -> { - b.mergeFrom(a); - return b; - } - ) - .map((MapFunction, Relation>) Tuple2::_2, REL_BEAN_ENC); - } + private Dataset distinctRelations(Dataset rels) { + return rels + .filter(getRelationFilterFunction()) + .groupByKey( + (MapFunction) r -> String + .join(" ", r.getSource(), r.getTarget(), r.getRelType(), r.getSubRelType(), r.getRelClass()), + Encoders.STRING()) + .reduceGroups((ReduceFunction) (b, a) -> { + b.mergeFrom(a); + return b; + }) + .map((MapFunction, Relation>) Tuple2::_2, REL_BEAN_ENC); + } - private FilterFunction getRelationFilterFunction() { - return r -> StringUtils.isNotBlank(r.getSource()) || - StringUtils.isNotBlank(r.getTarget()) || - StringUtils.isNotBlank(r.getRelType()) || - StringUtils.isNotBlank(r.getSubRelType()) || - StringUtils.isNotBlank(r.getRelClass()); - } + private FilterFunction getRelationFilterFunction() { + return r -> StringUtils.isNotBlank(r.getSource()) || + StringUtils.isNotBlank(r.getTarget()) || + StringUtils.isNotBlank(r.getRelType()) || + StringUtils.isNotBlank(r.getSubRelType()) || + StringUtils.isNotBlank(r.getRelClass()); + } } diff --git a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/GraphCleaningFunctionsTest.java b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/GraphCleaningFunctionsTest.java index 1492c60fe..8d10508a9 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/GraphCleaningFunctionsTest.java +++ b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/GraphCleaningFunctionsTest.java @@ -371,7 +371,7 @@ public class GraphCleaningFunctionsTest { @Test public void testFilterProject() throws IOException { String json = IOUtils - .toString(getClass().getResourceAsStream("/eu/dnetlib/dhp/oa/graph/clean/project.json")); + .toString(getClass().getResourceAsStream("/eu/dnetlib/dhp/oa/graph/clean/project.json")); Project p_in = MAPPER.readValue(json, Project.class); Assertions.assertEquals(false, GraphCleaningFunctions.filter(p_in)); diff --git a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/group/GroupEntitiesSparkJobTest.java b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/group/GroupEntitiesSparkJobTest.java index 4c86da47e..61baf80dc 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/group/GroupEntitiesSparkJobTest.java +++ b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/group/GroupEntitiesSparkJobTest.java @@ -1,14 +1,14 @@ package eu.dnetlib.dhp.oa.graph.group; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; -import eu.dnetlib.dhp.common.HdfsSupport; -import eu.dnetlib.dhp.oa.merge.DispatchEntitiesSparkJob; -import eu.dnetlib.dhp.oa.merge.GroupEntitiesSparkJob; -import eu.dnetlib.dhp.schema.common.ModelSupport; -import eu.dnetlib.dhp.schema.oaf.Result; -import eu.dnetlib.dhp.utils.DHPUtils; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.io.IOException; +import java.net.URISyntaxException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.StringUtils; import org.apache.spark.SparkConf; @@ -19,13 +19,15 @@ import org.apache.spark.sql.Encoders; import org.apache.spark.sql.SparkSession; import org.junit.jupiter.api.*; -import java.io.IOException; -import java.net.URISyntaxException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; -import static org.junit.jupiter.api.Assertions.assertEquals; +import eu.dnetlib.dhp.common.HdfsSupport; +import eu.dnetlib.dhp.oa.merge.DispatchEntitiesSparkJob; +import eu.dnetlib.dhp.oa.merge.GroupEntitiesSparkJob; +import eu.dnetlib.dhp.schema.common.ModelSupport; +import eu.dnetlib.dhp.schema.oaf.Result; +import eu.dnetlib.dhp.utils.DHPUtils; @TestMethodOrder(MethodOrderer.OrderAnnotation.class) public class GroupEntitiesSparkJobTest { From 6b1c05d118fff9b0aae9e4dfc5ffea25de4986f1 Mon Sep 17 00:00:00 2001 From: Giambattista Bloisi Date: Tue, 29 Aug 2023 16:04:19 +0200 Subject: [PATCH 269/449] Add sparkExecutorMemoryOverhead workflow config to set off-heap memory for Spark actions. If not explicitly set it is defaulted to 1Gb --- .../consistency/oozie_app/config-default.xml | 4 ++++ .../oa/dedup/consistency/oozie_app/workflow.xml | 16 ++++++++++++---- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/consistency/oozie_app/config-default.xml b/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/consistency/oozie_app/config-default.xml index 2e0ed9aee..0980c3731 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/consistency/oozie_app/config-default.xml +++ b/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/consistency/oozie_app/config-default.xml @@ -15,4 +15,8 @@ oozie.action.sharelib.for.spark spark2 + + sparkExecutorMemoryOverhead + 1G + \ No newline at end of file diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/consistency/oozie_app/workflow.xml b/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/consistency/oozie_app/workflow.xml index 2302d4b8f..b724e5d0b 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/consistency/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/consistency/oozie_app/workflow.xml @@ -18,11 +18,15 @@ sparkDriverMemory - memory for driver process + heap memory for driver process sparkExecutorMemory - memory for individual executor + heap memory for individual executor + + + sparkExecutorMemoryOverhead + off-heap memory for individual executor sparkExecutorCores @@ -86,6 +90,7 @@ dhp-dedup-openaire-${projectVersion}.jar --executor-memory=${sparkExecutorMemory} + --conf spark.executor.memoryOverhead=${sparkExecutorMemoryOverhead} --executor-cores=${sparkExecutorCores} --driver-memory=${sparkDriverMemory} --conf spark.extraListeners=${spark2ExtraListeners} @@ -111,6 +116,7 @@ dhp-dedup-openaire-${projectVersion}.jar --executor-memory=${sparkExecutorMemory} + --conf spark.executor.memoryOverhead=${sparkExecutorMemoryOverhead} --executor-cores=${sparkExecutorCores} --driver-memory=${sparkDriverMemory} --conf spark.extraListeners=${spark2ExtraListeners} @@ -135,8 +141,9 @@ eu.dnetlib.dhp.oa.merge.GroupEntitiesSparkJob dhp-dedup-openaire-${projectVersion}.jar - --executor-cores=${sparkExecutorCores} --executor-memory=${sparkExecutorMemory} + --conf spark.executor.memoryOverhead=${sparkExecutorMemoryOverhead} + --executor-cores=${sparkExecutorCores} --driver-memory=${sparkDriverMemory} --conf spark.extraListeners=${spark2ExtraListeners} --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} @@ -159,8 +166,9 @@ eu.dnetlib.dhp.oa.merge.DispatchEntitiesSparkJob dhp-dedup-openaire-${projectVersion}.jar - --executor-cores=${sparkExecutorCores} --executor-memory=${sparkExecutorMemory} + --conf spark.executor.memoryOverhead=${sparkExecutorMemoryOverhead} + --executor-cores=${sparkExecutorCores} --driver-memory=${sparkDriverMemory} --conf spark.extraListeners=${spark2ExtraListeners} --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} From 6cc7d8ca7b04f8aff859fda0ff04294b830608b5 Mon Sep 17 00:00:00 2001 From: Giambattista Bloisi Date: Thu, 24 Aug 2023 21:48:07 +0200 Subject: [PATCH 270/449] GroupEntities and DispatchEntites are now merged in GroupEntitiesSparkJob --- .../oa/merge/DispatchEntitiesSparkJob.java | 98 -------- .../dhp/oa/merge/GroupEntitiesSparkJob.java | 221 ++++++++---------- .../merge/dispatch_entities_parameters.json | 26 --- .../group_graph_entities_parameters.json | 16 +- .../dedup/consistency/oozie_app/workflow.xml | 26 +-- .../dhp/oa/graph/group/oozie_app/workflow.xml | 25 +- .../group/GroupEntitiesSparkJobTest.java | 201 ++++++++-------- 7 files changed, 203 insertions(+), 410 deletions(-) delete mode 100644 dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/DispatchEntitiesSparkJob.java delete mode 100644 dhp-common/src/main/resources/eu/dnetlib/dhp/oa/merge/dispatch_entities_parameters.json diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/DispatchEntitiesSparkJob.java b/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/DispatchEntitiesSparkJob.java deleted file mode 100644 index 4d2ccb178..000000000 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/DispatchEntitiesSparkJob.java +++ /dev/null @@ -1,98 +0,0 @@ - -package eu.dnetlib.dhp.oa.merge; - -import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkSession; - -import java.util.Objects; -import java.util.Optional; - -import org.apache.commons.io.IOUtils; -import org.apache.commons.lang3.StringUtils; -import org.apache.spark.SparkConf; -import org.apache.spark.api.java.function.FilterFunction; -import org.apache.spark.api.java.function.MapFunction; -import org.apache.spark.sql.*; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import eu.dnetlib.dhp.application.ArgumentApplicationParser; -import eu.dnetlib.dhp.common.HdfsSupport; -import eu.dnetlib.dhp.schema.common.ModelSupport; - -public class DispatchEntitiesSparkJob { - - private static final Logger log = LoggerFactory.getLogger(DispatchEntitiesSparkJob.class); - - public static void main(String[] args) throws Exception { - - String jsonConfiguration = IOUtils - .toString( - Objects - .requireNonNull( - DispatchEntitiesSparkJob.class - .getResourceAsStream( - "/eu/dnetlib/dhp/oa/merge/dispatch_entities_parameters.json"))); - final ArgumentApplicationParser parser = new ArgumentApplicationParser(jsonConfiguration); - parser.parseArgument(args); - - Boolean isSparkSessionManaged = Optional - .ofNullable(parser.get("isSparkSessionManaged")) - .map(Boolean::valueOf) - .orElse(Boolean.TRUE); - log.info("isSparkSessionManaged: {}", isSparkSessionManaged); - - String inputPath = parser.get("inputPath"); - log.info("inputPath: {}", inputPath); - - String outputPath = parser.get("outputPath"); - log.info("outputPath: {}", outputPath); - - boolean filterInvisible = Boolean.valueOf(parser.get("filterInvisible")); - log.info("filterInvisible: {}", filterInvisible); - - SparkConf conf = new SparkConf(); - runWithSparkSession( - conf, - isSparkSessionManaged, - spark -> { - HdfsSupport.remove(outputPath, spark.sparkContext().hadoopConfiguration()); - dispatchEntities(spark, inputPath, outputPath, filterInvisible); - }); - } - - private static void dispatchEntities( - SparkSession spark, - String inputPath, - String outputPath, - boolean filterInvisible) { - - Dataset df = spark.read().textFile(inputPath); - - ModelSupport.oafTypes.entrySet().parallelStream().forEach(entry -> { - String entityType = entry.getKey(); - Class clazz = entry.getValue(); - - if (!entityType.equalsIgnoreCase("relation")) { - Dataset entityDF = spark - .read() - .schema(Encoders.bean(clazz).schema()) - .json( - df - .filter((FilterFunction) s -> s.startsWith(clazz.getName())) - .map( - (MapFunction) s -> StringUtils.substringAfter(s, "|"), - Encoders.STRING())); - - if (filterInvisible) { - entityDF = entityDF.filter("dataInfo.invisible != true"); - } - - entityDF - .write() - .mode(SaveMode.Overwrite) - .option("compression", "gzip") - .json(outputPath + "/" + entityType); - } - }); - } -} diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/GroupEntitiesSparkJob.java b/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/GroupEntitiesSparkJob.java index e652bd5b6..87510c108 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/GroupEntitiesSparkJob.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/GroupEntitiesSparkJob.java @@ -2,36 +2,28 @@ package eu.dnetlib.dhp.oa.merge; import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkSession; -import static eu.dnetlib.dhp.utils.DHPUtils.toSeq; +import static org.apache.spark.sql.functions.col; +import static org.apache.spark.sql.functions.when; -import java.io.IOException; -import java.util.List; -import java.util.Objects; +import java.util.Map; import java.util.Optional; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ForkJoinPool; import java.util.stream.Collectors; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang3.StringUtils; import org.apache.spark.SparkConf; -import org.apache.spark.api.java.JavaSparkContext; -import org.apache.spark.api.java.function.FilterFunction; import org.apache.spark.api.java.function.MapFunction; +import org.apache.spark.api.java.function.ReduceFunction; import org.apache.spark.sql.*; -import org.apache.spark.sql.expressions.Aggregator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.jayway.jsonpath.Configuration; -import com.jayway.jsonpath.DocumentContext; -import com.jayway.jsonpath.JsonPath; -import com.jayway.jsonpath.Option; - import eu.dnetlib.dhp.application.ArgumentApplicationParser; import eu.dnetlib.dhp.common.HdfsSupport; +import eu.dnetlib.dhp.schema.common.EntityType; import eu.dnetlib.dhp.schema.common.ModelSupport; -import eu.dnetlib.dhp.schema.oaf.*; +import eu.dnetlib.dhp.schema.oaf.OafEntity; import eu.dnetlib.dhp.schema.oaf.utils.OafMapperUtils; import scala.Tuple2; @@ -39,13 +31,9 @@ import scala.Tuple2; * Groups the graph content by entity identifier to ensure ID uniqueness */ public class GroupEntitiesSparkJob { - private static final Logger log = LoggerFactory.getLogger(GroupEntitiesSparkJob.class); - private static final String ID_JPATH = "$.id"; - - private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper() - .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + private static final Encoder OAFENTITY_KRYO_ENC = Encoders.kryo(OafEntity.class); public static void main(String[] args) throws Exception { @@ -66,9 +54,15 @@ public class GroupEntitiesSparkJob { String graphInputPath = parser.get("graphInputPath"); log.info("graphInputPath: {}", graphInputPath); + String checkpointPath = parser.get("checkpointPath"); + log.info("checkpointPath: {}", checkpointPath); + String outputPath = parser.get("outputPath"); log.info("outputPath: {}", outputPath); + boolean filterInvisible = Boolean.valueOf(parser.get("filterInvisible")); + log.info("filterInvisible: {}", filterInvisible); + SparkConf conf = new SparkConf(); conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer"); conf.registerKryoClasses(ModelSupport.getOafModelClasses()); @@ -78,126 +72,95 @@ public class GroupEntitiesSparkJob { isSparkSessionManaged, spark -> { HdfsSupport.remove(outputPath, spark.sparkContext().hadoopConfiguration()); - groupEntities(spark, graphInputPath, outputPath); + groupEntities(spark, graphInputPath, checkpointPath, outputPath, filterInvisible); }); } private static void groupEntities( SparkSession spark, String inputPath, - String outputPath) { + String checkpointPath, + String outputPath, + boolean filterInvisible) { - final TypedColumn aggregator = new GroupingAggregator().toColumn(); - final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); - spark - .read() - .textFile(toSeq(listEntityPaths(inputPath, sc))) - .map((MapFunction) GroupEntitiesSparkJob::parseOaf, Encoders.kryo(OafEntity.class)) - .filter((FilterFunction) e -> StringUtils.isNotBlank(ModelSupport.idFn().apply(e))) - .groupByKey((MapFunction) oaf -> ModelSupport.idFn().apply(oaf), Encoders.STRING()) - .agg(aggregator) + Dataset allEntities = spark.emptyDataset(OAFENTITY_KRYO_ENC); + + for (Map.Entry e : ModelSupport.entityTypes.entrySet()) { + String entity = e.getKey().name(); + Class entityClass = e.getValue(); + String entityInputPath = inputPath + "/" + entity; + + if (!HdfsSupport.exists(entityInputPath, spark.sparkContext().hadoopConfiguration())) { + continue; + } + + allEntities = allEntities + .union( + ((Dataset) spark + .read() + .schema(Encoders.bean(entityClass).schema()) + .json(entityInputPath) + .filter("length(id) > 0") + .as(Encoders.bean(entityClass))) + .map((MapFunction) r -> r, OAFENTITY_KRYO_ENC)); + } + + Dataset groupedEntities = allEntities + .groupByKey((MapFunction) OafEntity::getId, Encoders.STRING()) + .reduceGroups((ReduceFunction) (b, a) -> OafMapperUtils.mergeEntities(b, a)) .map( - (MapFunction, String>) t -> t._2().getClass().getName() + - "|" + OBJECT_MAPPER.writeValueAsString(t._2()), - Encoders.STRING()) + (MapFunction, Tuple2>) t -> new Tuple2( + t._2().getClass().getName(), t._2()), + Encoders.tuple(Encoders.STRING(), OAFENTITY_KRYO_ENC)); + + // pivot on "_1" (classname of the entity) + // created columns containing only entities of the same class + for (Map.Entry e : ModelSupport.entityTypes.entrySet()) { + String entity = e.getKey().name(); + Class entityClass = e.getValue(); + + groupedEntities = groupedEntities + .withColumn( + entity, + when(col("_1").equalTo(entityClass.getName()), col("_2"))); + } + + groupedEntities + .drop("_1", "_2") .write() - .option("compression", "gzip") .mode(SaveMode.Overwrite) - .text(outputPath); - } + .option("compression", "gzip") + .save(checkpointPath); - public static class GroupingAggregator extends Aggregator { + ForkJoinPool parPool = new ForkJoinPool(ModelSupport.entityTypes.size()); - @Override - public OafEntity zero() { - return null; - } - - @Override - public OafEntity reduce(OafEntity b, OafEntity a) { - return mergeAndGet(b, a); - } - - private OafEntity mergeAndGet(OafEntity b, OafEntity a) { - if (Objects.nonNull(a) && Objects.nonNull(b)) { - return OafMapperUtils.mergeEntities(b, a); - } - return Objects.isNull(a) ? b : a; - } - - @Override - public OafEntity merge(OafEntity b, OafEntity a) { - return mergeAndGet(b, a); - } - - @Override - public OafEntity finish(OafEntity j) { - return j; - } - - @Override - public Encoder bufferEncoder() { - return Encoders.kryo(OafEntity.class); - } - - @Override - public Encoder outputEncoder() { - return Encoders.kryo(OafEntity.class); - } - - } - - private static OafEntity parseOaf(String s) { - - DocumentContext dc = JsonPath - .parse(s, Configuration.defaultConfiguration().addOptions(Option.SUPPRESS_EXCEPTIONS)); - final String id = dc.read(ID_JPATH); - if (StringUtils.isNotBlank(id)) { - - String prefix = StringUtils.substringBefore(id, "|"); - switch (prefix) { - case "10": - return parse(s, Datasource.class); - case "20": - return parse(s, Organization.class); - case "40": - return parse(s, Project.class); - case "50": - String resultType = dc.read("$.resulttype.classid"); - switch (resultType) { - case "publication": - return parse(s, Publication.class); - case "dataset": - return parse(s, eu.dnetlib.dhp.schema.oaf.Dataset.class); - case "software": - return parse(s, Software.class); - case "other": - return parse(s, OtherResearchProduct.class); - default: - throw new IllegalArgumentException(String.format("invalid resultType: '%s'", resultType)); - } - default: - throw new IllegalArgumentException(String.format("invalid id prefix: '%s'", prefix)); - } - } else { - throw new IllegalArgumentException(String.format("invalid oaf: '%s'", s)); - } - } - - private static OafEntity parse(String s, Class clazz) { - try { - return OBJECT_MAPPER.readValue(s, clazz); - } catch (IOException e) { - throw new IllegalArgumentException(e); - } - } - - private static List listEntityPaths(String inputPath, JavaSparkContext sc) { - return HdfsSupport - .listFiles(inputPath, sc.hadoopConfiguration()) + ModelSupport.entityTypes + .entrySet() .stream() - .filter(f -> !f.toLowerCase().contains("relation")) - .collect(Collectors.toList()); - } + .map(e -> parPool.submit(() -> { + String entity = e.getKey().name(); + Class entityClass = e.getValue(); + spark + .read() + .load(checkpointPath) + .select(col(entity).as("value")) + .filter("value IS NOT NULL") + .as(OAFENTITY_KRYO_ENC) + .map((MapFunction) r -> r, (Encoder) Encoders.bean(entityClass)) + .filter(filterInvisible ? "dataInfo.invisible != TRUE" : "TRUE") + .write() + .mode(SaveMode.Overwrite) + .option("compression", "gzip") + .json(outputPath + "/" + entity); + })) + .collect(Collectors.toList()) + .forEach(t -> { + try { + t.get(); + } catch (InterruptedException | ExecutionException e) { + throw new RuntimeException(e); + } + }); + } } diff --git a/dhp-common/src/main/resources/eu/dnetlib/dhp/oa/merge/dispatch_entities_parameters.json b/dhp-common/src/main/resources/eu/dnetlib/dhp/oa/merge/dispatch_entities_parameters.json deleted file mode 100644 index 60f11ac84..000000000 --- a/dhp-common/src/main/resources/eu/dnetlib/dhp/oa/merge/dispatch_entities_parameters.json +++ /dev/null @@ -1,26 +0,0 @@ -[ - { - "paramName": "issm", - "paramLongName": "isSparkSessionManaged", - "paramDescription": "when true will stop SparkSession after job execution", - "paramRequired": false - }, - { - "paramName": "i", - "paramLongName": "inputPath", - "paramDescription": "the source path", - "paramRequired": true - }, - { - "paramName": "o", - "paramLongName": "outputPath", - "paramDescription": "path of the output graph", - "paramRequired": true - }, - { - "paramName": "fi", - "paramLongName": "filterInvisible", - "paramDescription": "if true filters out invisible entities", - "paramRequired": true - } -] \ No newline at end of file diff --git a/dhp-common/src/main/resources/eu/dnetlib/dhp/oa/merge/group_graph_entities_parameters.json b/dhp-common/src/main/resources/eu/dnetlib/dhp/oa/merge/group_graph_entities_parameters.json index e65acb3c4..58e3ca711 100644 --- a/dhp-common/src/main/resources/eu/dnetlib/dhp/oa/merge/group_graph_entities_parameters.json +++ b/dhp-common/src/main/resources/eu/dnetlib/dhp/oa/merge/group_graph_entities_parameters.json @@ -8,13 +8,25 @@ { "paramName": "gin", "paramLongName": "graphInputPath", - "paramDescription": "the graph root path", + "paramDescription": "the input graph root path", + "paramRequired": true + }, + { + "paramName": "cp", + "paramLongName": "checkpointPath", + "paramDescription": "checkpoint directory", "paramRequired": true }, { "paramName": "out", "paramLongName": "outputPath", - "paramDescription": "the output merged graph root path", + "paramDescription": "the output graph root path", + "paramRequired": true + }, + { + "paramName": "fi", + "paramLongName": "filterInvisible", + "paramDescription": "if true filters out invisible entities", "paramRequired": true } ] \ No newline at end of file diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/consistency/oozie_app/workflow.xml b/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/consistency/oozie_app/workflow.xml index b724e5d0b..3640ee6ca 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/consistency/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/consistency/oozie_app/workflow.xml @@ -152,31 +152,7 @@ --conf spark.sql.shuffle.partitions=15000 --graphInputPath${graphBasePath} - --outputPath${workingPath}/grouped_entities - - - - - - - - yarn - cluster - Dispatch grouped entitities - eu.dnetlib.dhp.oa.merge.DispatchEntitiesSparkJob - dhp-dedup-openaire-${projectVersion}.jar - - --executor-memory=${sparkExecutorMemory} - --conf spark.executor.memoryOverhead=${sparkExecutorMemoryOverhead} - --executor-cores=${sparkExecutorCores} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.sql.shuffle.partitions=7680 - - --inputPath${workingPath}/grouped_entities + --checkpointPath${workingPath}/grouped_entities --outputPath${graphOutputPath} --filterInvisible${filterInvisible} diff --git a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/group/oozie_app/workflow.xml b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/group/oozie_app/workflow.xml index 219dc7331..190788c9d 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/group/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/group/oozie_app/workflow.xml @@ -96,30 +96,7 @@ --conf spark.sql.shuffle.partitions=15000 --graphInputPath${graphBasePath} - --outputPath${workingPath}/grouped_entities - - - - - - - - yarn - cluster - Dispatch grouped entities - eu.dnetlib.dhp.oa.merge.DispatchEntitiesSparkJob - dhp-graph-mapper-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.sql.shuffle.partitions=7680 - - --inputPath${workingPath}/grouped_entities + --checkpointPath${workingPath}/grouped_entities --outputPath${graphOutputPath} --filterInvisible${filterInvisible} diff --git a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/group/GroupEntitiesSparkJobTest.java b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/group/GroupEntitiesSparkJobTest.java index 61baf80dc..b878e778e 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/group/GroupEntitiesSparkJobTest.java +++ b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/group/GroupEntitiesSparkJobTest.java @@ -1,16 +1,15 @@ package eu.dnetlib.dhp.oa.graph.group; -import static org.junit.jupiter.api.Assertions.assertEquals; - -import java.io.IOException; -import java.net.URISyntaxException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; - +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import eu.dnetlib.dhp.common.HdfsSupport; +import eu.dnetlib.dhp.oa.merge.GroupEntitiesSparkJob; +import eu.dnetlib.dhp.schema.common.ModelSupport; +import eu.dnetlib.dhp.schema.oaf.OafEntity; +import eu.dnetlib.dhp.schema.oaf.Result; +import eu.dnetlib.dhp.utils.DHPUtils; import org.apache.commons.io.FileUtils; -import org.apache.commons.lang3.StringUtils; import org.apache.spark.SparkConf; import org.apache.spark.api.java.function.FilterFunction; import org.apache.spark.api.java.function.MapFunction; @@ -19,118 +18,108 @@ import org.apache.spark.sql.Encoders; import org.apache.spark.sql.SparkSession; import org.junit.jupiter.api.*; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; +import java.io.IOException; +import java.net.URISyntaxException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; -import eu.dnetlib.dhp.common.HdfsSupport; -import eu.dnetlib.dhp.oa.merge.DispatchEntitiesSparkJob; -import eu.dnetlib.dhp.oa.merge.GroupEntitiesSparkJob; -import eu.dnetlib.dhp.schema.common.ModelSupport; -import eu.dnetlib.dhp.schema.oaf.Result; -import eu.dnetlib.dhp.utils.DHPUtils; +import static org.junit.jupiter.api.Assertions.assertEquals; @TestMethodOrder(MethodOrderer.OrderAnnotation.class) public class GroupEntitiesSparkJobTest { - private static SparkSession spark; + private static SparkSession spark; - private static ObjectMapper mapper = new ObjectMapper() - .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + private static ObjectMapper mapper = new ObjectMapper() + .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - private static Path workingDir; - private Path dataInputPath; + private static Path workingDir; + private Path dataInputPath; - private Path groupEntityPath; - private Path dispatchEntityPath; + private Path checkpointPath; - @BeforeAll - public static void beforeAll() throws IOException { - workingDir = Files.createTempDirectory(GroupEntitiesSparkJob.class.getSimpleName()); + private Path outputPath; - SparkConf conf = new SparkConf(); - conf.setAppName(GroupEntitiesSparkJob.class.getSimpleName()); - conf.setMaster("local"); - conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer"); - conf.registerKryoClasses(ModelSupport.getOafModelClasses()); - spark = SparkSession.builder().config(conf).getOrCreate(); - } + @BeforeAll + public static void beforeAll() throws IOException { + workingDir = Files.createTempDirectory(GroupEntitiesSparkJob.class.getSimpleName()); - @BeforeEach - public void beforeEach() throws IOException, URISyntaxException { - dataInputPath = Paths.get(ClassLoader.getSystemResource("eu/dnetlib/dhp/oa/graph/group").toURI()); - groupEntityPath = workingDir.resolve("grouped_entity"); - dispatchEntityPath = workingDir.resolve("dispatched_entity"); - } + SparkConf conf = new SparkConf(); + conf.setAppName(GroupEntitiesSparkJob.class.getSimpleName()); + conf.setMaster("local"); + conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer"); + conf.registerKryoClasses(ModelSupport.getOafModelClasses()); + spark = SparkSession.builder().config(conf).getOrCreate(); + } - @AfterAll - public static void afterAll() throws IOException { - spark.stop(); - FileUtils.deleteDirectory(workingDir.toFile()); - } + @BeforeEach + public void beforeEach() throws IOException, URISyntaxException { + dataInputPath = Paths.get(ClassLoader.getSystemResource("eu/dnetlib/dhp/oa/graph/group").toURI()); + checkpointPath = workingDir.resolve("grouped_entity"); + outputPath = workingDir.resolve("dispatched_entity"); + } - @Test - @Order(1) - void testGroupEntities() throws Exception { - GroupEntitiesSparkJob.main(new String[] { - "-isSparkSessionManaged", - Boolean.FALSE.toString(), - "-graphInputPath", - dataInputPath.toString(), - "-outputPath", - groupEntityPath.toString() - }); + @AfterAll + public static void afterAll() throws IOException { + spark.stop(); + FileUtils.deleteDirectory(workingDir.toFile()); + } - Dataset output = spark - .read() - .textFile(groupEntityPath.toString()) - .map((MapFunction) s -> StringUtils.substringAfter(s, "|"), Encoders.STRING()) - .map((MapFunction) s -> mapper.readValue(s, Result.class), Encoders.bean(Result.class)); + @Test + @Order(1) + void testGroupEntities() throws Exception { + GroupEntitiesSparkJob.main(new String[]{ + "-isSparkSessionManaged", + Boolean.FALSE.toString(), + "-graphInputPath", + dataInputPath.toString(), + "-checkpointPath", + checkpointPath.toString(), + "-outputPath", + outputPath.toString(), + "-filterInvisible", + Boolean.FALSE.toString() + }); - assertEquals( - 1, - output - .filter( - (FilterFunction) r -> "50|doi_________::09821844208a5cd6300b2bfb13bca1b9" - .equals(r.getId()) && - r.getCollectedfrom().stream().anyMatch(kv -> kv.getValue().equalsIgnoreCase("zenodo"))) - .count()); - } + Dataset checkpointTable = spark + .read() + .load(checkpointPath.toString()) + .selectExpr("COALESCE(*)") + .as(Encoders.kryo(OafEntity.class)); - @Test - @Order(2) - void testDispatchEntities() throws Exception { - DispatchEntitiesSparkJob.main(new String[] { - "-isSparkSessionManaged", - Boolean.FALSE.toString(), - "-inputPath", - groupEntityPath.toString(), - "-outputPath", - dispatchEntityPath.resolve(".").toString(), - "-filterInvisible", - Boolean.TRUE.toString() - }); - Dataset output = spark - .read() - .textFile( - DHPUtils - .toSeq( - HdfsSupport - .listFiles(dispatchEntityPath.toString(), spark.sparkContext().hadoopConfiguration()))) - .map((MapFunction) s -> mapper.readValue(s, Result.class), Encoders.bean(Result.class)); + assertEquals( + 1, + checkpointTable + .filter( + (FilterFunction) r -> "50|doi_________::09821844208a5cd6300b2bfb13bca1b9" + .equals(r.getId()) && + r.getCollectedfrom().stream().anyMatch(kv -> kv.getValue().equalsIgnoreCase("zenodo"))) + .count()); - assertEquals(3, output.count()); - assertEquals( - 2, - output - .map((MapFunction) r -> r.getResulttype().getClassid(), Encoders.STRING()) - .filter((FilterFunction) s -> s.equals("publication")) - .count()); - assertEquals( - 1, - output - .map((MapFunction) r -> r.getResulttype().getClassid(), Encoders.STRING()) - .filter((FilterFunction) s -> s.equals("dataset")) - .count()); - } -} + + Dataset output = spark + .read() + .textFile( + DHPUtils + .toSeq( + HdfsSupport + .listFiles(outputPath.toString(), spark.sparkContext().hadoopConfiguration()))) + .map((MapFunction) s -> mapper.readValue(s, Result.class), Encoders.bean(Result.class)); + + assertEquals(3, output.count()); + assertEquals( + 2, + output + .map((MapFunction) r -> r.getResulttype().getClassid(), Encoders.STRING()) + .filter((FilterFunction) s -> s.equals("publication")) + .count()); + assertEquals( + 1, + output + .map((MapFunction) r -> r.getResulttype().getClassid(), Encoders.STRING()) + .filter((FilterFunction) s -> s.equals("dataset")) + .count()); + } +} \ No newline at end of file From 964c2f553e43438cedbfe44d2b1ae5e4d4d3d4f6 Mon Sep 17 00:00:00 2001 From: dimitrispie Date: Fri, 1 Sep 2023 10:57:02 +0300 Subject: [PATCH 271/449] Changes in indicators step, monitor step MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - graduatedoctorates for observatory - result_apc_affiliations table - new indicators indi_is_funder_plan_s indi_funder_fairness indi_ris_fairness indi_funder_openess indi_ris_openess indi_funder_findable indi_ris_findable indi_is_project_result_after - cast year to int in composite indicators - new institutions -- Universidade Católica Portuguesa -- Iscte - Instituto Universitário de Lisboa -- Munster Technological University -- Cardiff University -- Leibniz Institute of Ecological Urban and Regional Development --- .../dhp/oa/graph/stats/oozie_app/monitor.sh | 2 +- .../graph/stats/oozie_app/scripts/step13.sql | 0 .../graph/stats/oozie_app/scripts/step15.sql | 2 +- .../stats/oozie_app/scripts/step15_5.sql | 1 + .../scripts/step16-createIndicatorsTables.sql | 358 ++++++++++++++---- .../scripts/step20-createMonitorDB.sql | 9 + .../scripts/step20-createMonitorDBAll.sql | 18 +- .../step20-createMonitorDB_institutions.sql | 25 +- .../graph/stats/oozie_app/scripts/step5.sql | 0 .../dhp/oa/graph/stats/oozie_app/workflow.xml | 2 +- 10 files changed, 324 insertions(+), 93 deletions(-) mode change 100644 => 100755 dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/monitor.sh mode change 100644 => 100755 dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step13.sql mode change 100644 => 100755 dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step5.sql diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/monitor.sh b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/monitor.sh old mode 100644 new mode 100755 index 014b19c6c..872456973 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/monitor.sh +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/monitor.sh @@ -39,7 +39,7 @@ hdfs dfs -copyToLocal $9 echo "Creating monitor database" -cat step20-createMonitorDBAll.sql | sed "s/SOURCE/openaire_prod_stats_20230707/g" | sed "s/TARGET/openaire_prod_stats_monitor_20230707/g1" > foo +cat step20-createMonitorDBAll.sql | sed "s/SOURCE/$1/g" | sed "s/TARGET/$2/g1" > foo hive $HIVE_OPTS -f foo cat step20-createMonitorDB_funded.sql | sed "s/SOURCE/$1/g" | sed "s/TARGET/$2_funded/g1" > foo diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step13.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step13.sql old mode 100644 new mode 100755 diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step15.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step15.sql index d1cbde438..4a8f81943 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step15.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step15.sql @@ -48,4 +48,4 @@ rel.properties[1].value apc_currency from ${openaire_db_name}.relation rel join ${openaire_db_name}.organization o on o.id=rel.source join ${openaire_db_name}.result r on r.id=rel.target -where rel.subreltype = 'affiliation' and rel.datainfo.deletedbyinference = false and size(rel.properties) > 0; +where rel.subreltype = 'affiliation' and rel.datainfo.deletedbyinference = false and size(rel.properties)>0; diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step15_5.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step15_5.sql index f39ff2afd..615f523ce 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step15_5.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step15_5.sql @@ -35,6 +35,7 @@ create or replace view ${stats_db_name}.doctoratestudents as select * from stats create or replace view ${stats_db_name}.totalresearchers as select * from stats_ext.totalresearchers; create or replace view ${stats_db_name}.totalresearchersft as select * from stats_ext.totalresearchersft; create or replace view ${stats_db_name}.hrrst as select * from stats_ext.hrrst; +create or replace view ${stats_db_name}.graduatedoctorates as select * from stats_ext.graduatedoctorates; create table if not exists ${stats_db_name}.result_instance stored as parquet as select distinct r.* diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step16-createIndicatorsTables.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step16-createIndicatorsTables.sql index 57c381875..1c80f6757 100755 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step16-createIndicatorsTables.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step16-createIndicatorsTables.sql @@ -12,8 +12,6 @@ from ${stats_db_name}.publication p or ri.accessright = 'Embargo' or ri.accessright = 'Open Source')) tmp on p.id= tmp.id; ---ANALYZE TABLE ${stats_db_name}.indi_pub_green_oa COMPUTE STATISTICS; - create table if not exists ${stats_db_name}.indi_pub_grey_lit stored as parquet as select distinct p.id, coalesce(grey_lit, 0) as grey_lit from ${stats_db_name}.publication p @@ -25,8 +23,6 @@ from ${stats_db_name}.publication p not exists (select 1 from ${stats_db_name}.result_classifications rc where type ='Other literature type' and rc.id=p.id)) tmp on p.id=tmp.id; ---ANALYZE TABLE ${stats_db_name}.indi_pub_grey_lit COMPUTE STATISTICS; - create table if not exists ${stats_db_name}.indi_pub_doi_from_crossref stored as parquet as select distinct p.id, coalesce(doi_from_crossref, 0) as doi_from_crossref from ${stats_db_name}.publication p @@ -36,8 +32,6 @@ from ${stats_db_name}.publication p where pidtype='Digital Object Identifier' and d.name ='Crossref') tmp on tmp.id=p.id; ---ANALYZE TABLE ${stats_db_name}.indi_pub_doi_from_crossref COMPUTE STATISTICS; - -- Sprint 2 ---- create table if not exists ${stats_db_name}.indi_result_has_cc_licence stored as parquet as select distinct r.id, (case when lic='' or lic is null then 0 else 1 end) as has_cc_license @@ -47,8 +41,6 @@ left outer join (select r.id, license.type as lic from ${stats_db_name}.result r where lower(license.type) LIKE '%creativecommons.org%' OR lower(license.type) LIKE '%cc-%') tmp on r.id= tmp.id; ---ANALYZE TABLE ${stats_db_name}.indi_result_has_cc_licence COMPUTE STATISTICS; - create table if not exists ${stats_db_name}.indi_result_has_cc_licence_url stored as parquet as select distinct r.id, case when lic_host='' or lic_host is null then 0 else 1 end as has_cc_license_url from ${stats_db_name}.result r @@ -58,22 +50,16 @@ from ${stats_db_name}.result r WHERE lower(parse_url(license.type, "HOST")) = "creativecommons.org") tmp on r.id= tmp.id; ---ANALYZE TABLE ${stats_db_name}.indi_result_has_cc_licence_url COMPUTE STATISTICS; - create table if not exists ${stats_db_name}.indi_pub_has_abstract stored as parquet as select distinct publication.id, cast(coalesce(abstract, true) as int) has_abstract from ${stats_db_name}.publication; ---ANALYZE TABLE ${stats_db_name}.indi_pub_has_abstract COMPUTE STATISTICS; - create table if not exists ${stats_db_name}.indi_result_with_orcid stored as parquet as select distinct r.id, coalesce(has_orcid, 0) as has_orcid from ${stats_db_name}.result r left outer join (select id, 1 as has_orcid from ${stats_db_name}.result_orcid) tmp on r.id= tmp.id; ---ANALYZE TABLE ${stats_db_name}.indi_result_with_orcid COMPUTE STATISTICS; - ---- Sprint 3 ---- create table if not exists ${stats_db_name}.indi_funded_result_with_fundref stored as parquet as select distinct r.result as id, coalesce(fundref, 0) as fundref @@ -82,8 +68,6 @@ from ${stats_db_name}.project_results r where provenance='Harvested') tmp on r.result= tmp.result; ---ANALYZE TABLE ${stats_db_name}.indi_funded_result_with_fundref COMPUTE STATISTICS; - -- create table indi_result_org_collab stored as parquet as -- select o1.organization org1, o2.organization org2, count(distinct o1.id) as collaborations -- from result_organization as o1 @@ -103,8 +87,6 @@ group by o1.organization, o2.organization, o1.name, o2.name; drop table ${stats_db_name}.tmp purge; ---ANALYZE TABLE ${stats_db_name}.indi_result_org_collab COMPUTE STATISTICS; - create TEMPORARY TABLE ${stats_db_name}.tmp AS select distinct ro.organization organization, ro.id, o.name, o.country from ${stats_db_name}.result_organization ro join ${stats_db_name}.organization o on o.id=ro.organization where country <> 'UNKNOWN' and o.name is not null; @@ -117,8 +99,6 @@ group by o1.organization, o1.id, o1.name, o2.country; drop table ${stats_db_name}.tmp purge; ---ANALYZE TABLE ${stats_db_name}.indi_result_org_country_collab COMPUTE STATISTICS; - create TEMPORARY TABLE ${stats_db_name}.tmp AS select o.id organization, o.name, ro.project as project from ${stats_db_name}.organization o join ${stats_db_name}.organization_projects ro on o.id=ro.id where o.name is not null; @@ -132,8 +112,6 @@ group by o1.name,o2.name, o1.organization, o2.organization; drop table ${stats_db_name}.tmp purge; ---ANALYZE TABLE ${stats_db_name}.indi_project_collab_org COMPUTE STATISTICS; - create TEMPORARY TABLE ${stats_db_name}.tmp AS select o.id organization, o.name, o.country , ro.project as project from ${stats_db_name}.organization o join ${stats_db_name}.organization_projects ro on o.id=ro.id @@ -148,8 +126,6 @@ group by o1.organization, o2.country, o1.name; drop table ${stats_db_name}.tmp purge; ---ANALYZE TABLE ${stats_db_name}.indi_project_collab_org_country COMPUTE STATISTICS; - create table if not exists ${stats_db_name}.indi_funder_country_collab stored as parquet as with tmp as (select funder, project, country from ${stats_db_name}.organization_projects op join ${stats_db_name}.organization o on o.id=op.id @@ -161,8 +137,6 @@ from tmp as f1 where f1.country<>f2.country group by f1.funder, f2.country, f1.country; ---ANALYZE TABLE ${stats_db_name}.indi_funder_country_collab COMPUTE STATISTICS; - create TEMPORARY TABLE ${stats_db_name}.tmp AS select distinct country, ro.id as result from ${stats_db_name}.organization o join ${stats_db_name}.result_organization ro on o.id=ro.organization @@ -177,8 +151,6 @@ group by o1.country, o2.country; drop table ${stats_db_name}.tmp purge; ---ANALYZE TABLE ${stats_db_name}.indi_result_country_collab COMPUTE STATISTICS; - ---- Sprint 4 ---- create table if not exists ${stats_db_name}.indi_pub_diamond stored as parquet as select distinct pd.id, coalesce(in_diamond_journal, 0) as in_diamond_journal @@ -190,8 +162,6 @@ from ${stats_db_name}.publication_datasources pd and (ps.journal_is_in_doaj=true or ps.journal_is_oa=true) and ps.has_apc=false) tmp on pd.id=tmp.id; -----ANALYZE TABLE ${stats_db_name}.indi_pub_diamond COMPUTE STATISTICS; - create table if not exists ${stats_db_name}.indi_pub_in_transformative stored as parquet as select distinct pd.id, coalesce(is_transformative, 0) as is_transformative from ${stats_db_name}.publication pd @@ -202,8 +172,6 @@ from ${stats_db_name}.publication pd and ps.is_transformative_journal=true) tmp on pd.id=tmp.id; ---ANALYZE TABLE ${stats_db_name}.indi_pub_in_transformative COMPUTE STATISTICS; - create table if not exists ${stats_db_name}.indi_pub_closed_other_open stored as parquet as select distinct ri.id, coalesce(pub_closed_other_open, 0) as pub_closed_other_open from ${stats_db_name}.result_instance ri left outer join @@ -214,14 +182,10 @@ select distinct ri.id, coalesce(pub_closed_other_open, 0) as pub_closed_other_op (p.bestlicence='Open Access' or p.bestlicence='Open Source')) tmp on tmp.id=ri.id; ---ANALYZE TABLE ${stats_db_name}.indi_pub_closed_other_open COMPUTE STATISTICS; - ---- Sprint 5 ---- create table if not exists ${stats_db_name}.indi_result_no_of_copies stored as parquet as select id, count(id) as number_of_copies from ${stats_db_name}.result_instance group by id; ---ANALYZE TABLE ${stats_db_name}.indi_result_no_of_copies COMPUTE STATISTICS; - ---- Sprint 6 ---- create table if not exists ${stats_db_name}.indi_pub_downloads stored as parquet as SELECT result_id, sum(downloads) no_downloads from openaire_prod_usage_stats.usage_stats @@ -239,24 +203,18 @@ where downloads>0 GROUP BY result_id, repository_id order by result_id; ---ANALYZE TABLE ${stats_db_name}.indi_pub_downloads_datasource COMPUTE STATISTICS; - create table if not exists ${stats_db_name}.indi_pub_downloads_year stored as parquet as -SELECT result_id, substring(us.`date`, 1,4) as `year`, sum(downloads) no_downloads +SELECT result_id, cast(substring(us.`date`, 1,4) as int) as `year`, sum(downloads) no_downloads from openaire_prod_usage_stats.usage_stats us join ${stats_db_name}.publication on result_id=id where downloads>0 GROUP BY result_id, substring(us.`date`, 1,4); ---ANALYZE TABLE ${stats_db_name}.indi_pub_downloads_year COMPUTE STATISTICS; - create table if not exists ${stats_db_name}.indi_pub_downloads_datasource_year stored as parquet as -SELECT result_id, substring(us.`date`, 1,4) as `year`, repository_id, sum(downloads) no_downloads from openaire_prod_usage_stats.usage_stats us +SELECT result_id, cast(substring(us.`date`, 1,4) as int) as `year`, repository_id, sum(downloads) no_downloads from openaire_prod_usage_stats.usage_stats us join ${stats_db_name}.publication on result_id=id where downloads>0 GROUP BY result_id, repository_id, substring(us.`date`, 1,4); ---ANALYZE TABLE ${stats_db_name}.indi_pub_downloads_datasource_year COMPUTE STATISTICS; - ---- Sprint 7 ---- create table if not exists ${stats_db_name}.indi_pub_gold_oa stored as parquet as WITH gold_oa AS ( SELECT @@ -307,8 +265,6 @@ FROM JOIN gold_oa on issn.issn = gold_oa.issn) tmp on pd.id=tmp.id; ---ANALYZE TABLE ${stats_db_name}.indi_pub_gold_oa COMPUTE STATISTICS; - create table if not exists ${stats_db_name}.indi_pub_hybrid_oa_with_cc stored as parquet as WITH hybrid_oa AS ( SELECT issn_l, journal_is_in_doaj, journal_is_oa, issn_print as issn @@ -340,8 +296,6 @@ FROM ${stats_db_name}.publication_datasources pd JOIN ${stats_db_name}.indi_pub_gold_oa ga on pd.id=ga.id where cc.has_cc_license=1 and ga.is_gold=0) tmp on pd.id=tmp.id; ---ANALYZE TABLE ${stats_db_name}.indi_pub_hybrid_oa_with_cc COMPUTE STATISTICS; - create table if not exists ${stats_db_name}.indi_pub_hybrid stored as parquet as WITH gold_oa AS ( SELECT issn_l, @@ -393,8 +347,6 @@ from ${stats_db_name}.publication_datasources pd where (gold_oa.journal_is_in_doaj=false or gold_oa.journal_is_oa=false))tmp on pd.id=tmp.id; ---ANALYZE TABLE ${stats_db_name}.indi_pub_hybrid COMPUTE STATISTICS; - create table if not exists ${stats_db_name}.indi_org_fairness stored as parquet as --return results with PIDs, and rich metadata group by organization with result_fair as @@ -413,8 +365,6 @@ select allresults.organization, result_fair.no_result_fair/allresults.no_allresu from allresults join result_fair on result_fair.organization=allresults.organization; ---ANALYZE TABLE ${stats_db_name}.indi_org_fairness COMPUTE STATISTICS; - CREATE TEMPORARY table ${stats_db_name}.result_fair as select ro.organization organization, count(distinct ro.id) no_result_fair from ${stats_db_name}.result_organization ro @@ -439,8 +389,6 @@ from ${stats_db_name}.allresults ar DROP table ${stats_db_name}.result_fair purge; DROP table ${stats_db_name}.allresults purge; ---ANALYZE TABLE ${stats_db_name}.indi_org_fairness_pub_pr COMPUTE STATISTICS; - CREATE TEMPORARY table ${stats_db_name}.result_fair as select year, ro.organization organization, count(distinct ro.id) no_result_fair from ${stats_db_name}.result_organization ro join ${stats_db_name}.result p on p.id=ro.id @@ -460,8 +408,6 @@ from ${stats_db_name}.allresults DROP table ${stats_db_name}.result_fair purge; DROP table ${stats_db_name}.allresults purge; ---ANALYZE TABLE ${stats_db_name}.indi_org_fairness_pub_year COMPUTE STATISTICS; - CREATE TEMPORARY TABLE ${stats_db_name}.result_fair as select ro.organization organization, count(distinct ro.id) no_result_fair from ${stats_db_name}.result_organization ro @@ -484,8 +430,6 @@ on rf.organization=ar.organization; DROP table ${stats_db_name}.result_fair purge; DROP table ${stats_db_name}.allresults purge; ---ANALYZE TABLE ${stats_db_name}.indi_org_fairness_pub COMPUTE STATISTICS; - CREATE TEMPORARY TABLE ${stats_db_name}.result_fair as select year, ro.organization organization, count(distinct ro.id) no_result_fair from ${stats_db_name}.result_organization ro join ${stats_db_name}.result r on r.id=ro.id @@ -507,8 +451,6 @@ create table if not exists ${stats_db_name}.indi_org_fairness_year stored as par DROP table ${stats_db_name}.result_fair purge; DROP table ${stats_db_name}.allresults purge; ---ANALYZE TABLE ${stats_db_name}.indi_org_fairness_year COMPUTE STATISTICS; - CREATE TEMPORARY TABLE ${stats_db_name}.result_with_pid as select year, ro.organization, count(distinct rp.id) no_result_with_pid from ${stats_db_name}.result_organization ro join ${stats_db_name}.result_pids rp on rp.id=ro.id @@ -530,8 +472,6 @@ from ${stats_db_name}.allresults DROP table ${stats_db_name}.result_with_pid purge; DROP table ${stats_db_name}.allresults purge; ---ANALYZE TABLE ${stats_db_name}.indi_org_findable_year COMPUTE STATISTICS; - CREATE TEMPORARY TABLE ${stats_db_name}.result_with_pid as select ro.organization, count(distinct rp.id) no_result_with_pid from ${stats_db_name}.result_organization ro join ${stats_db_name}.result_pids rp on rp.id=ro.id @@ -553,8 +493,6 @@ from ${stats_db_name}.allresults DROP table ${stats_db_name}.result_with_pid purge; DROP table ${stats_db_name}.allresults purge; ---ANALYZE TABLE ${stats_db_name}.indi_org_findable COMPUTE STATISTICS; - CREATE TEMPORARY TABLE ${stats_db_name}.pubs_oa as SELECT ro.organization, count(distinct r.id) no_oapubs FROM ${stats_db_name}.publication r join ${stats_db_name}.result_organization ro on ro.id=r.id @@ -633,8 +571,6 @@ DROP TABLE ${stats_db_name}.allpubsshare purge; DROP TABLE ${stats_db_name}.alldatasetssshare purge; DROP TABLE ${stats_db_name}.allsoftwaresshare purge; ---ANALYZE TABLE ${stats_db_name}.indi_org_openess COMPUTE STATISTICS; - CREATE TEMPORARY TABLE ${stats_db_name}.pubs_oa AS SELECT r.year, ro.organization, count(distinct r.id) no_oapubs FROM ${stats_db_name}.publication r join ${stats_db_name}.result_organization ro on ro.id=r.id @@ -690,7 +626,7 @@ select allsoftware.year, software_oa.organization, software_oa.no_oasoftware/all create table if not exists ${stats_db_name}.indi_org_openess_year stored as parquet as -select allpubsshare.year, allpubsshare.organization, +select cast(allpubsshare.year as int), allpubsshare.organization, (p+if(isnull(s),0,s)+if(isnull(d),0,d))/(1+(case when s is null then 0 else 1 end) +(case when d is null then 0 else 1 end)) org_openess FROM ${stats_db_name}.allpubsshare @@ -711,8 +647,6 @@ DROP TABLE ${stats_db_name}.allpubsshare purge; DROP TABLE ${stats_db_name}.alldatasetssshare purge; DROP TABLE ${stats_db_name}.allsoftwaresshare purge; ---ANALYZE TABLE ${stats_db_name}.indi_org_openess_year COMPUTE STATISTICS; - create table if not exists ${stats_db_name}.indi_pub_has_preprint stored as parquet as select distinct p.id, coalesce(has_preprint, 0) as has_preprint from ${stats_db_name}.publication_classifications p @@ -722,8 +656,6 @@ from ${stats_db_name}.publication_classifications p where p.type='Preprint') tmp on p.id= tmp.id; ---ANALYZE TABLE ${stats_db_name}.indi_pub_has_preprint COMPUTE STATISTICS; - create table if not exists ${stats_db_name}.indi_pub_in_subscribed stored as parquet as select distinct p.id, coalesce(is_subscription, 0) as is_subscription from ${stats_db_name}.publication p @@ -735,8 +667,6 @@ from ${stats_db_name}.publication p where g.is_gold=0 and h.is_hybrid=0 and t.is_transformative=0) tmp on p.id=tmp.id; ---ANALYZE TABLE ${stats_db_name}.indi_pub_in_subscribed COMPUTE STATISTICS; - create table if not exists ${stats_db_name}.indi_result_with_pid as select distinct p.id, coalesce(result_with_pid, 0) as result_with_pid from ${stats_db_name}.result p @@ -745,8 +675,6 @@ from ${stats_db_name}.result p from ${stats_db_name}.result_pids p) tmp on p.id= tmp.id; ---ANALYZE TABLE ${stats_db_name}.indi_result_with_pid COMPUTE STATISTICS; - CREATE TEMPORARY TABLE ${stats_db_name}.pub_fos_totals as select rf.id, count(distinct lvl3) totals from ${stats_db_name}.result_fos rf group by rf.id; @@ -761,8 +689,6 @@ where totals>1) tmp on p.id=tmp.id; drop table ${stats_db_name}.pub_fos_totals purge; ---ANALYZE TABLE ${stats_db_name}.indi_pub_interdisciplinarity COMPUTE STATISTICS; - create table if not exists ${stats_db_name}.indi_pub_bronze_oa stored as parquet as select distinct p.id, coalesce(is_bronze_oa,0) as is_bronze_oa from ${stats_db_name}.publication p @@ -772,4 +698,280 @@ join ${stats_db_name}.indi_result_has_cc_licence cc on cc.id=p.id join ${stats_db_name}.indi_pub_gold_oa ga on ga.id=p.id where cc.has_cc_license=0 and ga.is_gold=0) tmp on tmp.id=p.id; ---ANALYZE TABLE ${stats_db_name}.indi_pub_bronze_oa COMPUTE STATISTICS; \ No newline at end of file +CREATE TEMPORARY TABLE ${stats_db_name}.project_year_result_year as +select p.id project_id, acronym, r.id result_id, r.year, p.end_year +from ${stats_db_name}.project p +join ${stats_db_name}.result_projects rp on p.id=rp.project +join ${stats_db_name}.result r on r.id=rp.id +where p.end_year is NOT NULL and r.year is not null; + +create table if not exists ${stats_db_name}.indi_is_project_result_after stored as parquet as +select pry.project_id, pry.acronym, pry.result_id, +coalesce(is_project_result_after, 0) as is_project_result_after +from ${stats_db_name}.project_year_result_year pry +left outer join (select pry.project_id, pry.acronym, pry.result_id, 1 as is_project_result_after +from ${stats_db_name}.project_year_result_year pry +where pry.year>pry.end_year) tmp on pry.result_id=tmp.result_id; + +drop table ${stats_db_name}.project_year_result_year purge; + +create table if not exists ${stats_db_name}.indi_is_funder_plan_s stored as parquet as +select distinct f.id, f.name, coalesce(is_funder_plan_s, 0) as is_funder_plan_s +from ${stats_db_name}.funder f + left outer join (select id, name, 1 as is_funder_plan_s from ${stats_db_name}.funder + join stats_ext.plan_s_short on c_o_alition_s_organisation_funder=name) tmp + on f.name= tmp.name; + +--Funder Fairness + +create table if not exists ${stats_db_name}.indi_funder_fairness stored as parquet as + with result_fair as + (select p.funder funder, count(distinct rp.id) no_result_fair from ${stats_db_name}.result_projects rp + join ${stats_db_name}.result r on r.id=rp.id + join ${stats_db_name}.project p on p.id=rp.project + where (r.title is not null) and (publisher is not null) and (abstract=true) and (year is not null) and (authors>0) and cast(year as int)>2003 + group by p.funder), + allresults as (select p.funder funder, count(distinct rp.id) no_allresults from ${stats_db_name}.result_projects rp + join ${stats_db_name}.result r on r.id=rp.id + join ${stats_db_name}.project p on p.id=rp.project + where cast(year as int)>2003 + group by p.funder) +select allresults.funder, result_fair.no_result_fair/allresults.no_allresults funder_fairness +from allresults + join result_fair on result_fair.funder=allresults.funder; + +--RIs Fairness +create table if not exists ${stats_db_name}.indi_ris_fairness stored as parquet as +with result_contexts as +(select distinct rc.id, context.name ri_initiative from ${stats_db_name}.result_concepts rc +join ${stats_db_name}.concept on concept.id=rc.concept +join ${stats_db_name}.category on category.id=concept.category +join ${stats_db_name}.context on context.id=category.context), +result_fair as + (select rc.ri_initiative ri_initiative, count(distinct rc.id) no_result_fair from result_contexts rc + join ${stats_db_name}.result r on r.id=rc.id + where (title is not null) and (publisher is not null) and (abstract=true) and (year is not null) and (authors>0) and cast(year as int)>2003 + group by rc.ri_initiative), +allresults as +(select rc.ri_initiative ri_initiative, count(distinct rc.id) no_allresults from result_contexts rc + join ${stats_db_name}.result r on r.id=rc.id + where cast(year as int)>2003 + group by rc.ri_initiative) +select allresults.ri_initiative, result_fair.no_result_fair/allresults.no_allresults ris_fairness +from allresults + join result_fair on result_fair.ri_initiative=allresults.ri_initiative; + +--Funder Openess + +CREATE TEMPORARY TABLE ${stats_db_name}.pubs_oa as +select p.funder funder, count(distinct rp.id) no_oapubs from ${stats_db_name}.result_projects rp +join ${stats_db_name}.project p on p.id=rp.project +join ${stats_db_name}.publication r on r.id=rp.id +join ${stats_db_name}.result_instance ri on ri.id=r.id +where (ri.accessright = 'Open Access' or ri.accessright = 'Embargo' or ri.accessright = 'Open Source') +and cast(r.year as int)>2003 +group by p.funder; + + +CREATE TEMPORARY TABLE ${stats_db_name}.datasets_oa as +select p.funder funder, count(distinct rp.id) no_oadatasets from ${stats_db_name}.result_projects rp +join ${stats_db_name}.project p on p.id=rp.project +join ${stats_db_name}.dataset r on r.id=rp.id +join ${stats_db_name}.result_instance ri on ri.id=r.id +where (ri.accessright = 'Open Access' or ri.accessright = 'Embargo' or ri.accessright = 'Open Source') +and cast(r.year as int)>2003 +group by p.funder; + +CREATE TEMPORARY TABLE ${stats_db_name}.software_oa as +select p.funder funder, count(distinct rp.id) no_oasoftware from ${stats_db_name}.result_projects rp +join ${stats_db_name}.project p on p.id=rp.project +join ${stats_db_name}.software r on r.id=rp.id +join ${stats_db_name}.result_instance ri on ri.id=r.id +where (ri.accessright = 'Open Access' or ri.accessright = 'Embargo' or ri.accessright = 'Open Source') +and cast(r.year as int)>2003 +group by p.funder; + +CREATE TEMPORARY TABLE ${stats_db_name}.allpubs as +select p.funder funder, count(distinct rp.id) no_allpubs from ${stats_db_name}.result_projects rp +join ${stats_db_name}.project p on p.id=rp.project +join ${stats_db_name}.publication r on r.id=rp.id +where cast(r.year as int)>2003 +group by p.funder; + +CREATE TEMPORARY TABLE ${stats_db_name}.alldatasets as +select p.funder funder, count(distinct rp.id) no_alldatasets from ${stats_db_name}.result_projects rp +join ${stats_db_name}.project p on p.id=rp.project +join ${stats_db_name}.dataset r on r.id=rp.id +where cast(r.year as int)>2003 +group by p.funder; + +CREATE TEMPORARY TABLE ${stats_db_name}.allsoftware as +select p.funder funder, count(distinct rp.id) no_allsoftware from ${stats_db_name}.result_projects rp +join ${stats_db_name}.project p on p.id=rp.project +join ${stats_db_name}.software r on r.id=rp.id +where cast(r.year as int)>2003 +group by p.funder; + +CREATE TEMPORARY TABLE ${stats_db_name}.allpubsshare as +select pubs_oa.funder, pubs_oa.no_oapubs/allpubs.no_allpubs p from ${stats_db_name}.allpubs + join ${stats_db_name}.pubs_oa on allpubs.funder=pubs_oa.funder; + +CREATE TEMPORARY TABLE ${stats_db_name}.alldatasetssshare as +select datasets_oa.funder, datasets_oa.no_oadatasets/alldatasets.no_alldatasets d + from ${stats_db_name}.alldatasets + join ${stats_db_name}.datasets_oa on alldatasets.funder=datasets_oa.funder; + +CREATE TEMPORARY TABLE ${stats_db_name}.allsoftwaresshare as +select software_oa.funder, software_oa.no_oasoftware/allsoftware.no_allsoftware s + from ${stats_db_name}.allsoftware + join ${stats_db_name}.software_oa on allsoftware.funder=software_oa.funder; + +create table if not exists ${stats_db_name}.indi_funder_openess stored as parquet as +select allpubsshare.funder, + (p+if(isnull(s),0,s)+if(isnull(d),0,d))/(1+(case when s is null then 0 else 1 end) + +(case when d is null then 0 else 1 end)) + funder_openess FROM ${stats_db_name}.allpubsshare + left outer join (select funder,d from + ${stats_db_name}.alldatasetssshare) tmp1 + on tmp1.funder=allpubsshare.funder + left outer join (select funder,s from + ${stats_db_name}.allsoftwaresshare) tmp2 + on tmp2.funder=allpubsshare.funder; + +DROP TABLE ${stats_db_name}.pubs_oa purge; +DROP TABLE ${stats_db_name}.datasets_oa purge; +DROP TABLE ${stats_db_name}.software_oa purge; +DROP TABLE ${stats_db_name}.allpubs purge; +DROP TABLE ${stats_db_name}.alldatasets purge; +DROP TABLE ${stats_db_name}.allsoftware purge; +DROP TABLE ${stats_db_name}.allpubsshare purge; +DROP TABLE ${stats_db_name}.alldatasetssshare purge; +DROP TABLE ${stats_db_name}.allsoftwaresshare purge; + +--RIs Openess + +CREATE TEMPORARY TABLE ${stats_db_name}.result_contexts as +select distinct rc.id, context.name ri_initiative from ${stats_db_name}.result_concepts rc +join ${stats_db_name}.concept on concept.id=rc.concept +join ${stats_db_name}.category on category.id=concept.category +join ${stats_db_name}.context on context.id=category.context; + +CREATE TEMPORARY TABLE ${stats_db_name}.pubs_oa as +select rp.ri_initiative ri_initiative, count(distinct rp.id) no_oapubs from ${stats_db_name}.result_contexts rp +join ${stats_db_name}.publication r on r.id=rp.id +join ${stats_db_name}.result_instance ri on ri.id=r.id +where (ri.accessright = 'Open Access' or ri.accessright = 'Embargo' or ri.accessright = 'Open Source') +and cast(r.year as int)>2003 +group by rp.ri_initiative; + +CREATE TEMPORARY TABLE ${stats_db_name}.datasets_oa as +select rp.ri_initiative ri_initiative, count(distinct rp.id) no_oadatasets from ${stats_db_name}.result_contexts rp +join ${stats_db_name}.dataset r on r.id=rp.id +join ${stats_db_name}.result_instance ri on ri.id=r.id +where (ri.accessright = 'Open Access' or ri.accessright = 'Embargo' or ri.accessright = 'Open Source') +and cast(r.year as int)>2003 +group by rp.ri_initiative; + +CREATE TEMPORARY TABLE ${stats_db_name}.software_oa as +select rp.ri_initiative ri_initiative, count(distinct rp.id) no_oasoftware from ${stats_db_name}.result_contexts rp +join ${stats_db_name}.software r on r.id=rp.id +join ${stats_db_name}.result_instance ri on ri.id=r.id +where (ri.accessright = 'Open Access' or ri.accessright = 'Embargo' or ri.accessright = 'Open Source') +and cast(r.year as int)>2003 +group by rp.ri_initiative; + +CREATE TEMPORARY TABLE ${stats_db_name}.allpubs as +select rp.ri_initiative ri_initiative, count(distinct rp.id) no_allpubs from ${stats_db_name}.result_contexts rp +join ${stats_db_name}.publication r on r.id=rp.id +where cast(r.year as int)>2003 +group by rp.ri_initiative; + +CREATE TEMPORARY TABLE ${stats_db_name}.alldatasets as +select rp.ri_initiative ri_initiative, count(distinct rp.id) no_alldatasets from ${stats_db_name}.result_contexts rp +join ${stats_db_name}.dataset r on r.id=rp.id +where cast(r.year as int)>2003 +group by rp.ri_initiative; + +CREATE TEMPORARY TABLE ${stats_db_name}.allsoftware as +select rp.ri_initiative ri_initiative, count(distinct rp.id) no_allsoftware from ${stats_db_name}.result_contexts rp +join ${stats_db_name}.software r on r.id=rp.id +where cast(r.year as int)>2003 +group by rp.ri_initiative; + +CREATE TEMPORARY TABLE ${stats_db_name}.allpubsshare as +select pubs_oa.ri_initiative, pubs_oa.no_oapubs/allpubs.no_allpubs p from ${stats_db_name}.allpubs + join ${stats_db_name}.pubs_oa on allpubs.ri_initiative=pubs_oa.ri_initiative; + +CREATE TEMPORARY TABLE ${stats_db_name}.alldatasetssshare as +select datasets_oa.ri_initiative, datasets_oa.no_oadatasets/alldatasets.no_alldatasets d + from ${stats_db_name}.alldatasets + join ${stats_db_name}.datasets_oa on alldatasets.ri_initiative=datasets_oa.ri_initiative; + +CREATE TEMPORARY TABLE ${stats_db_name}.allsoftwaresshare as +select software_oa.ri_initiative, software_oa.no_oasoftware/allsoftware.no_allsoftware s + from ${stats_db_name}.allsoftware + join ${stats_db_name}.software_oa on allsoftware.ri_initiative=software_oa.ri_initiative; + +create table if not exists ${stats_db_name}.indi_ris_openess stored as parquet as +select allpubsshare.ri_initiative, + (p+if(isnull(s),0,s)+if(isnull(d),0,d))/(1+(case when s is null then 0 else 1 end) + +(case when d is null then 0 else 1 end)) + ris_openess FROM ${stats_db_name}.allpubsshare + left outer join (select ri_initiative,d from + ${stats_db_name}.alldatasetssshare) tmp1 + on tmp1.ri_initiative=allpubsshare.ri_initiative + left outer join (select ri_initiative,s from + ${stats_db_name}.allsoftwaresshare) tmp2 + on tmp2.ri_initiative=allpubsshare.ri_initiative; + +DROP TABLE ${stats_db_name}.result_contexts purge; +DROP TABLE ${stats_db_name}.pubs_oa purge; +DROP TABLE ${stats_db_name}.datasets_oa purge; +DROP TABLE ${stats_db_name}.software_oa purge; +DROP TABLE ${stats_db_name}.allpubs purge; +DROP TABLE ${stats_db_name}.alldatasets purge; +DROP TABLE ${stats_db_name}.allsoftware purge; +DROP TABLE ${stats_db_name}.allpubsshare purge; +DROP TABLE ${stats_db_name}.alldatasetssshare purge; +DROP TABLE ${stats_db_name}.allsoftwaresshare purge; + +--Funder Findability +create table if not exists ${stats_db_name}.indi_funder_findable stored as parquet as +with result_findable as + (select p.funder funder, count(distinct rp.id) no_result_findable from ${stats_db_name}.result_projects rp + join ${stats_db_name}.publication r on r.id=rp.id + join ${stats_db_name}.project p on p.id=rp.project + join ${stats_db_name}.result_pids rpi on rpi.id=r.id + where cast(year as int)>2003 + group by p.funder), + allresults as (select p.funder funder, count(distinct rp.id) no_allresults from ${stats_db_name}.result_projects rp + join ${stats_db_name}.result r on r.id=rp.id + join ${stats_db_name}.project p on p.id=rp.project + where cast(year as int)>2003 + group by p.funder) +select allresults.funder, result_findable.no_result_findable/allresults.no_allresults funder_findable +from allresults + join result_findable on result_findable.funder=allresults.funder; + +--RIs Findability +create table if not exists ${stats_db_name}.indi_ris_findable stored as parquet as +with result_contexts as +(select distinct rc.id, context.name ri_initiative from ${stats_db_name}.result_concepts rc +join ${stats_db_name}.concept on concept.id=rc.concept +join ${stats_db_name}.category on category.id=concept.category +join ${stats_db_name}.context on context.id=category.context), +result_findable as + (select rc.ri_initiative ri_initiative, count(distinct rc.id) no_result_findable from result_contexts rc + join ${stats_db_name}.result r on r.id=rc.id + join ${stats_db_name}.result_pids rp on rp.id=r.id + where cast(r.year as int)>2003 + group by rc.ri_initiative), +allresults as +(select rc.ri_initiative ri_initiative, count(distinct rc.id) no_allresults from result_contexts rc + join ${stats_db_name}.result r on r.id=rc.id + where cast(r.year as int)>2003 + group by rc.ri_initiative) +select allresults.ri_initiative, result_findable.no_result_findable/allresults.no_allresults ris_findable +from allresults + join result_findable on result_findable.ri_initiative=allresults.ri_initiative; + diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB.sql index 3eeb792c7..586bee347 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB.sql @@ -88,6 +88,7 @@ create view if not exists TARGET.doctoratestudents as select * from SOURCE.docto create view if not exists TARGET.totalresearchers as select * from SOURCE.totalresearchers; create view if not exists TARGET.totalresearchersft as select * from SOURCE.totalresearchersft; create view if not exists TARGET.hrrst as select * from SOURCE.hrrst; +create view if not exists TARGET.graduatedoctorates as select * from SOURCE.graduatedoctorates; create table TARGET.result_citations stored as parquet as select * from SOURCE.result_citations orig where exists (select 1 from TARGET.result r where r.id=orig.id); --ANALYZE TABLE TARGET.result_citations COMPUTE STATISTICS; @@ -270,3 +271,11 @@ create table TARGET.indi_pub_interdisciplinarity stored as parquet as select * f --ANALYZE TABLE TARGET.indi_pub_interdisciplinarity COMPUTE STATISTICS; create table TARGET.result_apc_affiliations stored as parquet as select * from SOURCE.result_apc_affiliations orig where exists (select 1 from TARGET.result r where r.id=orig.id); --ANALYZE TABLE TARGET.result_apc_affiliations COMPUTE STATISTICS; +create table TARGET.indi_is_project_result_after stored as parquet as select * from SOURCE.indi_is_project_result_after orig where exists (select 1 from TARGET.result r where r.id=orig.result_id); +create table TARGET.indi_is_funder_plan_s stored as parquet as select * from SOURCE.indi_is_funder_plan_s orig where exists (select 1 from TARGET.result r where r.id=orig.id); +create view TARGET.indi_funder_fairness as select * from SOURCE.indi_funder_fairness; +create view TARGET.indi_funder_openess as select * from SOURCE.indi_funder_openess; +create view TARGET.indi_funder_findable as select * from SOURCE.indi_funder_findable; +create view TARGET.indi_ris_fairness as select * from SOURCE.indi_ris_fairness; +create view TARGET.indi_ris_openess as select * from SOURCE.indi_ris_openess; +create view TARGET.indi_ris_findable as select * from SOURCE.indi_ris_findable; \ No newline at end of file diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDBAll.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDBAll.sql index a59791084..df4795e3e 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDBAll.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDBAll.sql @@ -15,6 +15,7 @@ create view if not exists TARGET.doctoratestudents as select * from SOURCE.docto create view if not exists TARGET.totalresearchers as select * from SOURCE.totalresearchers; create view if not exists TARGET.totalresearchersft as select * from SOURCE.totalresearchersft; create view if not exists TARGET.hrrst as select * from SOURCE.hrrst; +create view if not exists TARGET.graduatedoctorates as select * from SOURCE.graduatedoctorates; create table TARGET.result stored as parquet as select distinct * from ( @@ -73,7 +74,11 @@ create table TARGET.result stored as parquet as 'openorgs____::c0b262bd6eab819e4c994914f9c010e2', -- National Institute of Geophysics and Volcanology 'openorgs____::1624ff7c01bb641b91f4518539a0c28a', -- Vrije Universiteit Amsterdam 'openorgs____::4d4051b56708688235252f1d8fddb8c1', --Iscte - Instituto Universitário de Lisboa - 'openorgs____::ab4ac74c35fa5dada770cf08e5110fab' -- Universidade Católica Portuguesa + 'openorgs____::ab4ac74c35fa5dada770cf08e5110fab', -- Universidade Católica Portuguesa + 'openorgs____::4d4051b56708688235252f1d8fddb8c1', -- Iscte - Instituto Universitário de Lisboa + 'openorgs____::5d55fb216b14691cf68218daf5d78cd9', -- Munster Technological University + 'openorgs____::0fccc7640f0cb44d5cd1b06b312a06b9', -- Cardiff University + 'openorgs____::8839b55dae0c84d56fd533f52d5d483a' -- Leibniz Institute of Ecological Urban and Regional Development ) )) foo; --ANALYZE TABLE TARGET.result COMPUTE STATISTICS; @@ -92,6 +97,7 @@ create view if not exists TARGET.doctoratestudents as select * from SOURCE.docto create view if not exists TARGET.totalresearchers as select * from SOURCE.totalresearchers; create view if not exists TARGET.totalresearchersft as select * from SOURCE.totalresearchersft; create view if not exists TARGET.hrrst as select * from SOURCE.hrrst; +--create view if not exists TARGET.graduatedoctorates as select * from SOURCE.graduatedoctorates; create table TARGET.result_citations stored as parquet as select * from SOURCE.result_citations orig where exists (select 1 from TARGET.result r where r.id=orig.id); --ANALYZE TABLE TARGET.result_citations COMPUTE STATISTICS; @@ -274,3 +280,13 @@ create table TARGET.indi_pub_interdisciplinarity stored as parquet as select * f --ANALYZE TABLE TARGET.indi_pub_interdisciplinarity COMPUTE STATISTICS; create table TARGET.result_apc_affiliations stored as parquet as select * from SOURCE.result_apc_affiliations orig where exists (select 1 from TARGET.result r where r.id=orig.id); --ANALYZE TABLE TARGET.result_apc_affiliations COMPUTE STATISTICS; +create table TARGET.indi_is_project_result_after stored as parquet as select * from SOURCE.indi_is_project_result_after orig where exists (select 1 from TARGET.result r where r.id=orig.id); +create table TARGET.indi_is_funder_plan_s stored as parquet as select * from SOURCE.indi_is_funder_plan_s orig where exists (select 1 from TARGET.result r where r.id=orig.id); +create view TARGET.indi_funder_fairness as select * from SOURCE.indi_funder_fairness; +create view TARGET.indi_funder_openess as select * from SOURCE.indi_funder_openess; +create view TARGET.indi_funder_findable as select * from SOURCE.indi_funder_findable; +create view TARGET.indi_ris_fairness as select * from SOURCE.indi_ris_fairness; +create view TARGET.indi_ris_openess as select * from SOURCE.indi_ris_openess; +create view TARGET.indi_ris_findable as select * from SOURCE.indi_ris_findable; + + diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB_institutions.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB_institutions.sql index 1f75c3cd1..7bfba92a8 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB_institutions.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB_institutions.sql @@ -34,16 +34,16 @@ create table TARGET.result stored as parquet as 'openorgs____::3e8d1f8c3f6cd7f418b09f1f58b4873b', -- Aristotle University of Thessaloniki 'openorgs____::3fcef6e1c469c10f2a84b281372c9814', -- World Bank 'openorgs____::1698a2eb1885ef8adb5a4a969e745ad3', -- École des Ponts ParisTech - 'openorgs____::e15adb13c4dadd49de4d35c39b5da93a', -- Nanyang Technological University - 'openorgs____::4b34103bde246228fcd837f5f1bf4212', -- Autonomous University of Barcelona - 'openorgs____::72ec75fcfc4e0df1a76dc4c49007fceb', -- McMaster University - 'openorgs____::51c7fc556e46381734a25a6fbc3fd398', -- University of Modena and Reggio Emilia - 'openorgs____::235d7f9ad18ecd7e6dc62ea4990cb9db', -- Bilkent University - 'openorgs____::31f2fa9e05b49d4cf40a19c3fed8eb06', -- Saints Cyril and Methodius University of Skopje + 'openorgs____::e15adb13c4dadd49de4d35c39b5da93a', -- Nanyang Technological University + 'openorgs____::4b34103bde246228fcd837f5f1bf4212', -- Autonomous University of Barcelona + 'openorgs____::72ec75fcfc4e0df1a76dc4c49007fceb', -- McMaster University + 'openorgs____::51c7fc556e46381734a25a6fbc3fd398', -- University of Modena and Reggio Emilia + 'openorgs____::235d7f9ad18ecd7e6dc62ea4990cb9db', -- Bilkent University + 'openorgs____::31f2fa9e05b49d4cf40a19c3fed8eb06', -- Saints Cyril and Methodius University of Skopje 'openorgs____::db7686f30f22cbe73a4fde872ce812a6', -- University of Milan - 'openorgs____::b8b8ca674452579f3f593d9f5e557483', -- University College Cork + 'openorgs____::b8b8ca674452579f3f593d9f5e557483', -- University College Cork 'openorgs____::38d7097854736583dde879d12dacafca', -- Brown University - 'openorgs____::57784c9e047e826fefdb1ef816120d92', --Arts et Métiers ParisTech + 'openorgs____::57784c9e047e826fefdb1ef816120d92', --Arts et Métiers ParisTech 'openorgs____::2530baca8a15936ba2e3297f2bce2e7e', -- University of Cape Town 'openorgs____::d11f981828c485cd23d93f7f24f24db1', -- Technological University Dublin 'openorgs____::5e6bf8962665cdd040341171e5c631d8', -- Delft University of Technology @@ -52,10 +52,13 @@ create table TARGET.result stored as parquet as 'openorgs____::66aa9fc2fceb271423dfabcc38752dc0', -- Lund University 'openorgs____::3cff625a4370d51e08624cc586138b2f', -- IMT Atlantique 'openorgs____::c0b262bd6eab819e4c994914f9c010e2', -- National Institute of Geophysics and Volcanology - 'openorgs____::1624ff7c01bb641b91f4518539a0c28a', -- Vrije Universiteit Amsterdam + 'openorgs____::1624ff7c01bb641b91f4518539a0c28a', -- Vrije Universiteit Amsterdam 'openorgs____::4d4051b56708688235252f1d8fddb8c1', --Iscte - Instituto Universitário de Lisboa - 'openorgs____::ab4ac74c35fa5dada770cf08e5110fab' -- Universidade Católica Portuguesa - + 'openorgs____::ab4ac74c35fa5dada770cf08e5110fab', -- Universidade Católica Portuguesa + 'openorgs____::4d4051b56708688235252f1d8fddb8c1', -- Iscte - Instituto Universitário de Lisboa + 'openorgs____::5d55fb216b14691cf68218daf5d78cd9', -- Munster Technological University + 'openorgs____::0fccc7640f0cb44d5cd1b06b312a06b9', -- Cardiff University + 'openorgs____::8839b55dae0c84d56fd533f52d5d483a' -- Leibniz Institute of Ecological Urban and Regional Development ))) foo; --ANALYZE TABLE TARGET.result COMPUTE STATISTICS; \ No newline at end of file diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step5.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step5.sql old mode 100644 new mode 100755 diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/workflow.xml b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/workflow.xml index c03520e48..aa991730b 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/workflow.xml @@ -467,7 +467,7 @@ ${usage_stats_db_shadow_name} finalizeImpalaCluster.sh - + From 2caaaec42d24023b7195f8922bafd43bc12494dd Mon Sep 17 00:00:00 2001 From: Giambattista Bloisi Date: Fri, 1 Sep 2023 09:32:57 +0200 Subject: [PATCH 272/449] Include SparkCleanRelation logic in SparkPropagateRelation SparkPropagateRelation includes merge relations Revised tests for SparkPropagateRelation --- .../dhp/oa/dedup/RelationAggregator.java | 57 ------- .../dhp/oa/dedup/SparkCleanRelation.scala | 78 --------- .../dhp/oa/dedup/SparkPropagateRelation.java | 138 ++++++++-------- .../oa/dedup/cleanRelation_parameters.json | 20 --- .../dedup/consistency/oozie_app/workflow.xml | 28 +--- .../dnetlib/dhp/oa/dedup/SparkDedupTest.java | 150 ++++++++---------- .../oa/dedup/SparkOpenorgsProvisionTest.java | 103 ++++++------ 7 files changed, 185 insertions(+), 389 deletions(-) delete mode 100644 dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/RelationAggregator.java delete mode 100644 dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkCleanRelation.scala delete mode 100644 dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/cleanRelation_parameters.json diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/RelationAggregator.java b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/RelationAggregator.java deleted file mode 100644 index 96d783dbf..000000000 --- a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/RelationAggregator.java +++ /dev/null @@ -1,57 +0,0 @@ - -package eu.dnetlib.dhp.oa.dedup; - -import java.util.Objects; - -import org.apache.spark.sql.Encoder; -import org.apache.spark.sql.Encoders; -import org.apache.spark.sql.expressions.Aggregator; - -import eu.dnetlib.dhp.schema.oaf.Relation; - -public class RelationAggregator extends Aggregator { - - private static final Relation ZERO = new Relation(); - - @Override - public Relation zero() { - return ZERO; - } - - @Override - public Relation reduce(Relation b, Relation a) { - return mergeRel(b, a); - } - - @Override - public Relation merge(Relation b, Relation a) { - return mergeRel(b, a); - } - - @Override - public Relation finish(Relation r) { - return r; - } - - private Relation mergeRel(Relation b, Relation a) { - if (Objects.equals(b, ZERO)) { - return a; - } - if (Objects.equals(a, ZERO)) { - return b; - } - - b.mergeFrom(a); - return b; - } - - @Override - public Encoder bufferEncoder() { - return Encoders.kryo(Relation.class); - } - - @Override - public Encoder outputEncoder() { - return Encoders.kryo(Relation.class); - } -} diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkCleanRelation.scala b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkCleanRelation.scala deleted file mode 100644 index 5d8da42c2..000000000 --- a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkCleanRelation.scala +++ /dev/null @@ -1,78 +0,0 @@ -package eu.dnetlib.dhp.oa.dedup - -import eu.dnetlib.dhp.application.ArgumentApplicationParser -import eu.dnetlib.dhp.common.HdfsSupport -import eu.dnetlib.dhp.schema.oaf.Relation -import eu.dnetlib.dhp.utils.ISLookupClientFactory -import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpService -import org.apache.commons.io.IOUtils -import org.apache.spark.SparkConf -import org.apache.spark.sql._ -import org.apache.spark.sql.functions.col -import org.apache.spark.sql.types.{DataTypes, StructField, StructType} -import org.slf4j.LoggerFactory - -object SparkCleanRelation { - private val log = LoggerFactory.getLogger(classOf[SparkCleanRelation]) - - @throws[Exception] - def main(args: Array[String]): Unit = { - val parser = new ArgumentApplicationParser( - IOUtils.toString( - classOf[SparkCleanRelation].getResourceAsStream("/eu/dnetlib/dhp/oa/dedup/cleanRelation_parameters.json") - ) - ) - parser.parseArgument(args) - val conf = new SparkConf - - new SparkCleanRelation(parser, AbstractSparkAction.getSparkSession(conf)) - .run(ISLookupClientFactory.getLookUpService(parser.get("isLookUpUrl"))) - } -} - -class SparkCleanRelation(parser: ArgumentApplicationParser, spark: SparkSession) - extends AbstractSparkAction(parser, spark) { - override def run(isLookUpService: ISLookUpService): Unit = { - val graphBasePath = parser.get("graphBasePath") - val inputPath = parser.get("inputPath") - val outputPath = parser.get("outputPath") - - SparkCleanRelation.log.info("graphBasePath: '{}'", graphBasePath) - SparkCleanRelation.log.info("inputPath: '{}'", inputPath) - SparkCleanRelation.log.info("outputPath: '{}'", outputPath) - - AbstractSparkAction.removeOutputDir(spark, outputPath) - - val entities = - Seq("datasource", "project", "organization", "publication", "dataset", "software", "otherresearchproduct") - - val idsSchema = StructType.fromDDL("`id` STRING, `dataInfo` STRUCT<`deletedbyinference`:BOOLEAN,`invisible`:BOOLEAN>") - - val emptyIds = spark.createDataFrame(spark.sparkContext.emptyRDD[Row].setName("empty"), - idsSchema) - - val ids = entities - .foldLeft(emptyIds)((ds, entity) => { - val entityPath = graphBasePath + '/' + entity - if (HdfsSupport.exists(entityPath, spark.sparkContext.hadoopConfiguration)) { - ds.union(spark.read.schema(idsSchema).json(entityPath)) - } else { - ds - } - }) - .filter("dataInfo.deletedbyinference != true AND dataInfo.invisible != true") - .select("id") - .distinct() - - val relations = spark.read.schema(Encoders.bean(classOf[Relation]).schema).json(inputPath) - .filter("dataInfo.deletedbyinference != true AND dataInfo.invisible != true") - - AbstractSparkAction.save( - relations - .join(ids, col("source") === ids("id"), "leftsemi") - .join(ids, col("target") === ids("id"), "leftsemi"), - outputPath, - SaveMode.Overwrite - ) - } -} diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkPropagateRelation.java b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkPropagateRelation.java index 175ebf8a6..739295c91 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkPropagateRelation.java +++ b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkPropagateRelation.java @@ -3,23 +3,19 @@ package eu.dnetlib.dhp.oa.dedup; import static org.apache.spark.sql.functions.col; -import java.util.Arrays; -import java.util.Collections; -import java.util.Iterator; -import java.util.Objects; - -import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang3.StringUtils; import org.apache.spark.SparkConf; -import org.apache.spark.api.java.function.FilterFunction; import org.apache.spark.api.java.function.MapFunction; import org.apache.spark.api.java.function.ReduceFunction; import org.apache.spark.sql.*; +import org.apache.spark.sql.catalyst.encoders.RowEncoder; +import org.apache.spark.sql.types.StructType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import eu.dnetlib.dhp.application.ArgumentApplicationParser; +import eu.dnetlib.dhp.common.HdfsSupport; +import eu.dnetlib.dhp.schema.common.EntityType; import eu.dnetlib.dhp.schema.common.ModelConstants; import eu.dnetlib.dhp.schema.common.ModelSupport; import eu.dnetlib.dhp.schema.oaf.DataInfo; @@ -70,73 +66,63 @@ public class SparkPropagateRelation extends AbstractSparkAction { log.info("workingPath: '{}'", workingPath); log.info("graphOutputPath: '{}'", graphOutputPath); - final String outputRelationPath = DedupUtility.createEntityPath(graphOutputPath, "relation"); - removeOutputDir(spark, outputRelationPath); - Dataset mergeRels = spark - .read() - .load(DedupUtility.createMergeRelPath(workingPath, "*", "*")) - .as(REL_BEAN_ENC); + .read() + .load(DedupUtility.createMergeRelPath(workingPath, "*", "*")) + .as(REL_BEAN_ENC); // - Dataset mergedIds = mergeRels - .where(col("relClass").equalTo(ModelConstants.MERGES)) - .select(col("source").as("dedupID"), col("target").as("mergedObjectID")) - .distinct() - .cache(); + Dataset idsToMerge = mergeRels + .where(col("relClass").equalTo(ModelConstants.MERGES)) + .select(col("source").as("dedupID"), col("target").as("mergedObjectID")) + .distinct(); Dataset allRels = spark - .read() - .schema(REL_BEAN_ENC.schema()) - .json(DedupUtility.createEntityPath(graphBasePath, "relation")); + .read() + .schema(REL_BEAN_ENC.schema()) + .json(graphBasePath + "/relation"); Dataset dedupedRels = allRels - .joinWith(mergedIds, allRels.col("source").equalTo(mergedIds.col("mergedObjectID")), "left_outer") - .joinWith(mergedIds, col("_1.target").equalTo(mergedIds.col("mergedObjectID")), "left_outer") - .select("_1._1", "_1._2.dedupID", "_2.dedupID") - .as(Encoders.tuple(REL_BEAN_ENC, Encoders.STRING(), Encoders.STRING())) - .flatMap(SparkPropagateRelation::addInferredRelations, REL_KRYO_ENC); + .joinWith(idsToMerge, allRels.col("source").equalTo(idsToMerge.col("mergedObjectID")), "left_outer") + .joinWith(idsToMerge, col("_1.target").equalTo(idsToMerge.col("mergedObjectID")), "left_outer") + .select("_1._1", "_1._2.dedupID", "_2.dedupID") + .as(Encoders.tuple(REL_BEAN_ENC, Encoders.STRING(), Encoders.STRING())) + .map((MapFunction, Relation>) t -> { + Relation rel = t._1(); + String newSource = t._2(); + String newTarget = t._3(); - Dataset processedRelations = distinctRelations( - dedupedRels.union(mergeRels.map((MapFunction) r -> r, REL_KRYO_ENC))) - .filter((FilterFunction) r -> !Objects.equals(r.getSource(), r.getTarget())); + if (rel.getDataInfo() == null) { + rel.setDataInfo(new DataInfo()); + } - save(processedRelations, outputRelationPath, SaveMode.Overwrite); - } + if (newSource != null || newTarget != null) { + rel.getDataInfo().setDeletedbyinference(false); - private static Iterator addInferredRelations(Tuple3 t) throws Exception { - Relation existingRel = t._1(); - String newSource = t._2(); - String newTarget = t._3(); + if (newSource != null) + rel.setSource(newSource); - if (newSource == null && newTarget == null) { - return Collections.singleton(t._1()).iterator(); - } + if (newTarget != null) + rel.setTarget(newTarget); + } - // update existing relation - if (existingRel.getDataInfo() == null) { - existingRel.setDataInfo(new DataInfo()); - } - existingRel.getDataInfo().setDeletedbyinference(true); + return rel; + }, REL_BEAN_ENC); - // Create new relation inferred by dedupIDs - Relation inferredRel = (Relation) BeanUtils.cloneBean(existingRel); + // ids of records that are both not deletedbyinference and not invisible + Dataset ids = validIds(spark, graphBasePath); - inferredRel.setDataInfo((DataInfo) BeanUtils.cloneBean(existingRel.getDataInfo())); - inferredRel.getDataInfo().setDeletedbyinference(false); + // filter relations that point to valid records, can force them to be visible + Dataset cleanedRels = dedupedRels + .join(ids, col("source").equalTo(ids.col("id")), "leftsemi") + .join(ids, col("target").equalTo(ids.col("id")), "leftsemi") + .as(REL_BEAN_ENC) + .map((MapFunction) r -> { + r.getDataInfo().setInvisible(false); + return r; + }, REL_KRYO_ENC); - if (newSource != null) - inferredRel.setSource(newSource); - - if (newTarget != null) - inferredRel.setTarget(newTarget); - - return Arrays.asList(existingRel, inferredRel).iterator(); - } - - private Dataset distinctRelations(Dataset rels) { - return rels - .filter(getRelationFilterFunction()) + Dataset distinctRels = cleanedRels .groupByKey( (MapFunction) r -> String .join(" ", r.getSource(), r.getTarget(), r.getRelType(), r.getSubRelType(), r.getRelClass()), @@ -146,13 +132,33 @@ public class SparkPropagateRelation extends AbstractSparkAction { return b; }) .map((MapFunction, Relation>) Tuple2::_2, REL_BEAN_ENC); + + final String outputRelationPath = graphOutputPath + "/relation"; + removeOutputDir(spark, outputRelationPath); + save( + distinctRels + .union(mergeRels) + .filter("source != target AND dataInfo.deletedbyinference != true AND dataInfo.invisible != true"), + outputRelationPath, + SaveMode.Overwrite); } - private FilterFunction getRelationFilterFunction() { - return r -> StringUtils.isNotBlank(r.getSource()) || - StringUtils.isNotBlank(r.getTarget()) || - StringUtils.isNotBlank(r.getRelType()) || - StringUtils.isNotBlank(r.getSubRelType()) || - StringUtils.isNotBlank(r.getRelClass()); + static Dataset validIds(SparkSession spark, String graphBasePath) { + StructType idsSchema = StructType + .fromDDL("`id` STRING, `dataInfo` STRUCT<`deletedbyinference`:BOOLEAN,`invisible`:BOOLEAN>"); + + Dataset allIds = spark.emptyDataset(RowEncoder.apply(idsSchema)); + + for (EntityType entityType : ModelSupport.entityTypes.keySet()) { + String entityPath = graphBasePath + '/' + entityType.name(); + if (HdfsSupport.exists(entityPath, spark.sparkContext().hadoopConfiguration())) { + allIds = allIds.union(spark.read().schema(idsSchema).json(entityPath)); + } + } + + return allIds + .filter("dataInfo.deletedbyinference != true AND dataInfo.invisible != true") + .select("id") + .distinct(); } } diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/cleanRelation_parameters.json b/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/cleanRelation_parameters.json deleted file mode 100644 index 860539ad9..000000000 --- a/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/cleanRelation_parameters.json +++ /dev/null @@ -1,20 +0,0 @@ -[ - { - "paramName": "i", - "paramLongName": "graphBasePath", - "paramDescription": "the base path of raw graph", - "paramRequired": true - }, - { - "paramName": "w", - "paramLongName": "inputPath", - "paramDescription": "the path to the input relation to cleanup", - "paramRequired": true - }, - { - "paramName": "o", - "paramLongName": "outputPath", - "paramDescription": "the path of the output relation cleaned", - "paramRequired": true - } -] \ No newline at end of file diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/consistency/oozie_app/workflow.xml b/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/consistency/oozie_app/workflow.xml index b724e5d0b..0083339cf 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/consistency/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/consistency/oozie_app/workflow.xml @@ -100,35 +100,9 @@ --conf spark.sql.shuffle.partitions=15000 --graphBasePath${graphBasePath} - --graphOutputPath${workingPath}/propagaterelation/ + --graphOutputPath${graphOutputPath} --workingPath${workingPath} - - - - - - - yarn - cluster - Clean Relations - eu.dnetlib.dhp.oa.dedup.SparkCleanRelation - dhp-dedup-openaire-${projectVersion}.jar - - --executor-memory=${sparkExecutorMemory} - --conf spark.executor.memoryOverhead=${sparkExecutorMemoryOverhead} - --executor-cores=${sparkExecutorCores} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.sql.shuffle.partitions=15000 - - --graphBasePath${graphBasePath} - --inputPath${workingPath}/propagaterelation/relation - --outputPath${graphOutputPath}/relation - diff --git a/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkDedupTest.java b/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkDedupTest.java index 38bd72a5e..6c4935637 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkDedupTest.java +++ b/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkDedupTest.java @@ -3,7 +3,6 @@ package eu.dnetlib.dhp.oa.dedup; import static java.nio.file.Files.createTempDirectory; -import static org.apache.spark.sql.functions.col; import static org.apache.spark.sql.functions.count; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.lenient; @@ -23,14 +22,13 @@ import java.util.stream.Collectors; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.apache.spark.SparkConf; -import org.apache.spark.api.java.JavaPairRDD; -import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.JavaSparkContext; import org.apache.spark.api.java.function.FilterFunction; import org.apache.spark.api.java.function.MapFunction; -import org.apache.spark.api.java.function.PairFunction; -import org.apache.spark.sql.*; import org.apache.spark.sql.Dataset; +import org.apache.spark.sql.Encoders; +import org.apache.spark.sql.Row; +import org.apache.spark.sql.SparkSession; import org.junit.jupiter.api.*; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; @@ -46,8 +44,6 @@ import eu.dnetlib.dhp.schema.common.ModelConstants; import eu.dnetlib.dhp.schema.oaf.*; import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpException; import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpService; -import eu.dnetlib.pace.util.MapDocumentUtil; -import scala.Tuple2; @ExtendWith(MockitoExtension.class) @TestMethodOrder(MethodOrderer.OrderAnnotation.class) @@ -62,6 +58,8 @@ public class SparkDedupTest implements Serializable { private static String testGraphBasePath; private static String testOutputBasePath; private static String testDedupGraphBasePath; + private static String testConsistencyGraphBasePath; + private static final String testActionSetId = "test-orchestrator"; private static String whitelistPath; private static List whiteList; @@ -75,6 +73,7 @@ public class SparkDedupTest implements Serializable { .get(SparkDedupTest.class.getResource("/eu/dnetlib/dhp/dedup/entities").toURI()) .toFile() .getAbsolutePath(); + testOutputBasePath = createTempDirectory(SparkDedupTest.class.getSimpleName() + "-") .toAbsolutePath() .toString(); @@ -83,6 +82,10 @@ public class SparkDedupTest implements Serializable { .toAbsolutePath() .toString(); + testConsistencyGraphBasePath = createTempDirectory(SparkDedupTest.class.getSimpleName() + "-") + .toAbsolutePath() + .toString(); + whitelistPath = Paths .get(SparkDedupTest.class.getResource("/eu/dnetlib/dhp/dedup/whitelist.simrels.txt").toURI()) .toFile() @@ -674,22 +677,45 @@ public class SparkDedupTest implements Serializable { assertEquals(mergedOrp, deletedOrp); } + @Test + @Order(6) + void copyRelationsNoOpenorgsTest() throws Exception { + + ArgumentApplicationParser parser = new ArgumentApplicationParser( + IOUtils + .toString( + SparkCopyRelationsNoOpenorgs.class + .getResourceAsStream( + "/eu/dnetlib/dhp/oa/dedup/updateEntity_parameters.json"))); + parser + .parseArgument( + new String[] { + "-i", testGraphBasePath, "-w", testOutputBasePath, "-o", testDedupGraphBasePath + }); + + new SparkCopyRelationsNoOpenorgs(parser, spark).run(isLookUpService); + + final Dataset outputRels = spark.read().text(testDedupGraphBasePath + "/relation"); + + System.out.println(outputRels.count()); + // assertEquals(2382, outputRels.count()); + } + @Test @Order(7) void propagateRelationTest() throws Exception { ArgumentApplicationParser parser = new ArgumentApplicationParser( classPathResourceAsString("/eu/dnetlib/dhp/oa/dedup/propagateRelation_parameters.json")); - String outputRelPath = testDedupGraphBasePath + "/propagaterelation"; parser .parseArgument( new String[] { - "-i", testGraphBasePath, "-w", testOutputBasePath, "-o", outputRelPath + "-i", testDedupGraphBasePath, "-w", testOutputBasePath, "-o", testConsistencyGraphBasePath }); new SparkPropagateRelation(parser, spark).run(isLookUpService); - long relations = jsc.textFile(outputRelPath + "/relation").count(); + long relations = jsc.textFile(testDedupGraphBasePath + "/relation").count(); // assertEquals(4860, relations); System.out.println("relations = " + relations); @@ -699,95 +725,52 @@ public class SparkDedupTest implements Serializable { .read() .load(DedupUtility.createMergeRelPath(testOutputBasePath, "*", "*")) .as(Encoders.bean(Relation.class)); - final JavaPairRDD mergedIds = mergeRels - .where("relClass == 'merges'") - .select(mergeRels.col("target")) - .distinct() - .toJavaRDD() - .mapToPair( - (PairFunction) r -> new Tuple2(r.getString(0), "d")); - JavaRDD toCheck = jsc - .textFile(outputRelPath + "/relation") - .mapToPair(json -> new Tuple2<>(MapDocumentUtil.getJPathString("$.source", json), json)) - .join(mergedIds) - .map(t -> t._2()._1()) - .mapToPair(json -> new Tuple2<>(MapDocumentUtil.getJPathString("$.target", json), json)) - .join(mergedIds) - .map(t -> t._2()._1()); + Dataset inputRels = spark + .read() + .json(testDedupGraphBasePath + "/relation"); - long deletedbyinference = toCheck.filter(this::isDeletedByInference).count(); - long updated = toCheck.count(); + Dataset outputRels = spark + .read() + .json(testConsistencyGraphBasePath + "/relation"); - assertEquals(updated, deletedbyinference); + assertEquals( + 0, outputRels + .filter("dataInfo.deletedbyinference == true OR dataInfo.invisible == true") + .count()); + + assertEquals( + 5, outputRels + .filter("relClass NOT IN ('merges', 'isMergedIn')") + .count()); + + assertEquals(5 + mergeRels.count(), outputRels.count()); } @Test @Order(8) - void testCleanBaseRelations() throws Exception { - ArgumentApplicationParser parser = new ArgumentApplicationParser( - classPathResourceAsString("/eu/dnetlib/dhp/oa/dedup/cleanRelation_parameters.json")); - - // append dangling relations to be cleaned up + void testCleanedPropagatedRelations() throws Exception { Dataset df_before = spark .read() .schema(Encoders.bean(Relation.class).schema()) - .json(testGraphBasePath + "/relation"); - Dataset df_input = df_before - .unionByName(df_before.drop("source").withColumn("source", functions.lit("n/a"))) - .unionByName(df_before.drop("target").withColumn("target", functions.lit("n/a"))); - df_input.write().mode(SaveMode.Overwrite).json(testOutputBasePath + "_tmp"); - - parser - .parseArgument( - new String[] { - "--graphBasePath", testGraphBasePath, - "--inputPath", testGraphBasePath + "/relation", - "--outputPath", testDedupGraphBasePath + "/relation" - }); - - new SparkCleanRelation(parser, spark).run(isLookUpService); + .json(testDedupGraphBasePath + "/relation"); Dataset df_after = spark .read() .schema(Encoders.bean(Relation.class).schema()) - .json(testDedupGraphBasePath + "/relation"); - - assertNotEquals(df_before.count(), df_input.count()); - assertNotEquals(df_input.count(), df_after.count()); - assertEquals(5, df_after.count()); - } - - @Test - @Order(9) - void testCleanDedupedRelations() throws Exception { - ArgumentApplicationParser parser = new ArgumentApplicationParser( - classPathResourceAsString("/eu/dnetlib/dhp/oa/dedup/cleanRelation_parameters.json")); - - String inputRelPath = testDedupGraphBasePath + "/propagaterelation/relation"; - - // append dangling relations to be cleaned up - Dataset df_before = spark.read().schema(Encoders.bean(Relation.class).schema()).json(inputRelPath); - - df_before.filter(col("dataInfo.deletedbyinference").notEqual(true)).show(50, false); - - parser - .parseArgument( - new String[] { - "--graphBasePath", testGraphBasePath, - "--inputPath", inputRelPath, - "--outputPath", testDedupGraphBasePath + "/relation" - }); - - new SparkCleanRelation(parser, spark).run(isLookUpService); - - Dataset df_after = spark - .read() - .schema(Encoders.bean(Relation.class).schema()) - .json(testDedupGraphBasePath + "/relation"); + .json(testConsistencyGraphBasePath + "/relation"); assertNotEquals(df_before.count(), df_after.count()); - assertEquals(0, df_after.count()); + + assertEquals( + 0, df_after + .filter("dataInfo.deletedbyinference == true OR dataInfo.invisible == true") + .count()); + + assertEquals( + 5, df_after + .filter("relClass NOT IN ('merges', 'isMergedIn')") + .count()); } @Test @@ -813,6 +796,7 @@ public class SparkDedupTest implements Serializable { public static void finalCleanUp() throws IOException { FileUtils.deleteDirectory(new File(testOutputBasePath)); FileUtils.deleteDirectory(new File(testDedupGraphBasePath)); + FileUtils.deleteDirectory(new File(testConsistencyGraphBasePath)); } public boolean isDeletedByInference(String s) { diff --git a/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkOpenorgsProvisionTest.java b/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkOpenorgsProvisionTest.java index a0bf6b37e..73e768cf1 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkOpenorgsProvisionTest.java +++ b/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkOpenorgsProvisionTest.java @@ -3,6 +3,7 @@ package eu.dnetlib.dhp.oa.dedup; import static java.nio.file.Files.createTempDirectory; +import static org.apache.spark.sql.functions.col; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.lenient; @@ -15,10 +16,6 @@ import java.nio.file.Paths; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.apache.spark.SparkConf; -import org.apache.spark.api.java.JavaPairRDD; -import org.apache.spark.api.java.JavaRDD; -import org.apache.spark.api.java.JavaSparkContext; -import org.apache.spark.api.java.function.PairFunction; import org.apache.spark.sql.Dataset; import org.apache.spark.sql.Encoders; import org.apache.spark.sql.Row; @@ -33,8 +30,6 @@ import eu.dnetlib.dhp.application.ArgumentApplicationParser; import eu.dnetlib.dhp.schema.oaf.Relation; import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpException; import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpService; -import eu.dnetlib.pace.util.MapDocumentUtil; -import scala.Tuple2; @ExtendWith(MockitoExtension.class) @TestMethodOrder(MethodOrderer.OrderAnnotation.class) @@ -44,11 +39,11 @@ public class SparkOpenorgsProvisionTest implements Serializable { ISLookUpService isLookUpService; private static SparkSession spark; - private static JavaSparkContext jsc; private static String testGraphBasePath; private static String testOutputBasePath; private static String testDedupGraphBasePath; + private static String testConsistencyGraphBasePath; private static final String testActionSetId = "test-orchestrator"; @BeforeAll @@ -64,6 +59,9 @@ public class SparkOpenorgsProvisionTest implements Serializable { testDedupGraphBasePath = createTempDirectory(SparkOpenorgsProvisionTest.class.getSimpleName() + "-") .toAbsolutePath() .toString(); + testConsistencyGraphBasePath = createTempDirectory(SparkOpenorgsProvisionTest.class.getSimpleName() + "-") + .toAbsolutePath() + .toString(); FileUtils.deleteDirectory(new File(testOutputBasePath)); FileUtils.deleteDirectory(new File(testDedupGraphBasePath)); @@ -76,8 +74,13 @@ public class SparkOpenorgsProvisionTest implements Serializable { .master("local[*]") .config(conf) .getOrCreate(); + } - jsc = JavaSparkContext.fromSparkContext(spark.sparkContext()); + @AfterAll + public static void finalCleanUp() throws IOException { + FileUtils.deleteDirectory(new File(testOutputBasePath)); + FileUtils.deleteDirectory(new File(testDedupGraphBasePath)); + FileUtils.deleteDirectory(new File(testConsistencyGraphBasePath)); } @BeforeEach @@ -186,26 +189,21 @@ public class SparkOpenorgsProvisionTest implements Serializable { new SparkUpdateEntity(parser, spark).run(isLookUpService); - long organizations = jsc.textFile(testDedupGraphBasePath + "/organization").count(); + Dataset organizations = spark.read().json(testDedupGraphBasePath + "/organization"); - long mergedOrgs = spark + Dataset mergedOrgs = spark .read() .load(testOutputBasePath + "/" + testActionSetId + "/organization_mergerel") - .as(Encoders.bean(Relation.class)) .where("relClass=='merges'") - .javaRDD() - .map(Relation::getTarget) - .distinct() - .count(); + .select("target") + .distinct(); - assertEquals(80, organizations); + assertEquals(80, organizations.count()); - long deletedOrgs = jsc - .textFile(testDedupGraphBasePath + "/organization") - .filter(this::isDeletedByInference) - .count(); + Dataset deletedOrgs = organizations + .filter("dataInfo.deletedbyinference = TRUE"); - assertEquals(mergedOrgs, deletedOrgs); + assertEquals(mergedOrgs.count(), deletedOrgs.count()); } @Test @@ -226,10 +224,9 @@ public class SparkOpenorgsProvisionTest implements Serializable { new SparkCopyRelationsNoOpenorgs(parser, spark).run(isLookUpService); - final JavaRDD rels = jsc.textFile(testDedupGraphBasePath + "/relation"); - - assertEquals(2382, rels.count()); + final Dataset outputRels = spark.read().text(testDedupGraphBasePath + "/relation"); + assertEquals(2382, outputRels.count()); } @Test @@ -244,51 +241,41 @@ public class SparkOpenorgsProvisionTest implements Serializable { parser .parseArgument( new String[] { - "-i", testGraphBasePath, "-w", testOutputBasePath, "-o", testDedupGraphBasePath + "-i", testDedupGraphBasePath, "-w", testOutputBasePath, "-o", testConsistencyGraphBasePath }); new SparkPropagateRelation(parser, spark).run(isLookUpService); - long relations = jsc.textFile(testDedupGraphBasePath + "/relation").count(); - - assertEquals(4896, relations); - - // check deletedbyinference final Dataset mergeRels = spark .read() .load(DedupUtility.createMergeRelPath(testOutputBasePath, "*", "*")) .as(Encoders.bean(Relation.class)); - final JavaPairRDD mergedIds = mergeRels + + Dataset inputRels = spark + .read() + .json(testDedupGraphBasePath + "/relation"); + + Dataset outputRels = spark + .read() + .json(testConsistencyGraphBasePath + "/relation"); + + final Dataset mergedIds = mergeRels .where("relClass == 'merges'") - .select(mergeRels.col("target")) - .distinct() - .toJavaRDD() - .mapToPair( - (PairFunction) r -> new Tuple2(r.getString(0), "d")); + .select(col("target").as("id")) + .distinct(); - JavaRDD toCheck = jsc - .textFile(testDedupGraphBasePath + "/relation") - .mapToPair(json -> new Tuple2<>(MapDocumentUtil.getJPathString("$.source", json), json)) - .join(mergedIds) - .map(t -> t._2()._1()) - .mapToPair(json -> new Tuple2<>(MapDocumentUtil.getJPathString("$.target", json), json)) - .join(mergedIds) - .map(t -> t._2()._1()); + Dataset toUpdateRels = inputRels + .as("rel") + .join(mergedIds.as("s"), col("rel.source").equalTo(col("s.id")), "left_outer") + .join(mergedIds.as("t"), col("rel.target").equalTo(col("t.id")), "left_outer") + .filter("s.id IS NOT NULL OR t.id IS NOT NULL") + .distinct(); - long deletedbyinference = toCheck.filter(this::isDeletedByInference).count(); - long updated = toCheck.count(); + Dataset updatedRels = inputRels + .select("source", "target", "relClass") + .except(outputRels.select("source", "target", "relClass")); - assertEquals(updated, deletedbyinference); + assertEquals(toUpdateRels.count(), updatedRels.count()); + assertEquals(140, outputRels.count()); } - - @AfterAll - public static void finalCleanUp() throws IOException { - FileUtils.deleteDirectory(new File(testOutputBasePath)); - FileUtils.deleteDirectory(new File(testDedupGraphBasePath)); - } - - public boolean isDeletedByInference(String s) { - return s.contains("\"deletedbyinference\":true"); - } - } From 7de0164c269fcc1b4b15a37ca006e3383709aad6 Mon Sep 17 00:00:00 2001 From: Serafeim Chatzopoulos Date: Mon, 4 Sep 2023 16:04:41 +0300 Subject: [PATCH 273/449] Fix import of affiliations relations from Crossref --- .../PrepareAffiliationRelations.java | 5 ++--- .../actionmanager/bipaffiliations/job.properties | 4 ++-- .../PrepareAffiliationRelationsTest.java | 8 ++++---- .../actionmanager/bipaffiliations/doi_to_ror.json | 13 +++++++------ 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelations.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelations.java index a9c610de7..9ac610240 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelations.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelations.java @@ -80,16 +80,15 @@ public class PrepareAffiliationRelations implements Serializable { // load and parse affiliation relations from HDFS Dataset df = spark .read() - .schema("`DOI` STRING, `Matchings` ARRAY,`Confidence`:DOUBLE>>") + .schema("`DOI` STRING, `Matchings` ARRAY>") .json(inputPath); // unroll nested arrays df = df .withColumn("matching", functions.explode(new Column("Matchings"))) - .withColumn("rorid", functions.explode(new Column("matching.RORid"))) .select( new Column("DOI").as("doi"), - new Column("rorid"), + new Column("matching.RORid").as("rorid"), new Column("matching.Confidence").as("confidence")); // prepare action sets for affiliation relations diff --git a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/job.properties b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/job.properties index 43d86ee09..d942e6772 100644 --- a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/job.properties +++ b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/job.properties @@ -31,5 +31,5 @@ spark2SqlQueryExecutionListeners=com.cloudera.spark.lineage.NavigatorQueryListen # The following is needed as a property of a workflow oozie.wf.application.path=${oozieTopWfApplicationPath} -inputPath=/user/schatz/affiliations/data-v3.1.json -outputPath=/tmp/crossref-affiliations-output-v3.1 +inputPath=/data/bip-affiliations/data.json +outputPath=/tmp/crossref-affiliations-output-v5 diff --git a/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelationsTest.java b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelationsTest.java index 72aabde7f..ed8e5fe0d 100644 --- a/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelationsTest.java +++ b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelationsTest.java @@ -101,7 +101,7 @@ public class PrepareAffiliationRelationsTest { // ); // } // count the number of relations - assertEquals(16, tmp.count()); + assertEquals(20, tmp.count()); Dataset dataset = spark.createDataset(tmp.rdd(), Encoders.bean(Relation.class)); dataset.createOrReplaceTempView("result"); @@ -112,7 +112,7 @@ public class PrepareAffiliationRelationsTest { // verify that we have equal number of bi-directional relations Assertions .assertEquals( - 8, execVerification + 10, execVerification .filter( "relClass='" + ModelConstants.HAS_AUTHOR_INSTITUTION + "'") .collectAsList() @@ -120,14 +120,14 @@ public class PrepareAffiliationRelationsTest { Assertions .assertEquals( - 8, execVerification + 10, execVerification .filter( "relClass='" + ModelConstants.IS_AUTHOR_INSTITUTION_OF + "'") .collectAsList() .size()); // check confidence value of a specific relation - String sourceDOI = "10.1105/tpc.8.3.343"; + String sourceDOI = "10.1061/(asce)0733-9399(2002)128:7(759)"; final String sourceOpenaireId = ID_PREFIX + IdentifierFactory.md5(CleaningFunctions.normalizePidValue("doi", sourceDOI)); diff --git a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/doi_to_ror.json b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/doi_to_ror.json index 3b067dcc8..985a8d14b 100644 --- a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/doi_to_ror.json +++ b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/doi_to_ror.json @@ -1,6 +1,7 @@ -{"DOI":"10.1061\/(asce)0733-9399(2002)128:7(759)","Matchings":[{"RORid":["https:\/\/ror.org\/01teme464"],"Confidence":0.73},{"RORid":["https:\/\/ror.org\/03yxnpp24"],"Confidence":0.7071067812}]} -{"DOI":"10.1105\/tpc.8.3.343","Matchings":[{"RORid":["https:\/\/ror.org\/02k40bc56"],"Confidence":0.7071067812}]} -{"DOI":"10.1161\/01.cir.0000013305.01850.37","Matchings":[{"RORid":["https:\/\/ror.org\/00qjgza05"],"Confidence":1}]} -{"DOI":"10.1142\/s021821650200186x","Matchings":[{"RORid":["https:\/\/ror.org\/05apxxy63"],"Confidence":1},{"RORid":["https:\/\/ror.org\/035xkbk20"],"Confidence":1}]} -{"DOI":"10.1061\/(asce)0733-9372(2002)128:7(575)","Matchings":[{"RORid":["https:\/\/ror.org\/04j198w64"],"Confidence":0.58}]} -{"DOI":"10.1161\/hy0202.103001","Matchings":[{"RORid":["https:\/\/ror.org\/057xtrt18"],"Confidence":0.7071067812}]} \ No newline at end of file +{"DOI":"10.1061\/(asce)0733-9399(2002)128:7(759)","Matchings":[{"RORid":"https:\/\/ror.org\/03yxnpp24","Confidence":0.7071067812},{"RORid":"https:\/\/ror.org\/01teme464","Confidence":0.89}]} +{"DOI":"10.1105\/tpc.8.3.343","Matchings":[{"RORid":"https:\/\/ror.org\/02k40bc56","Confidence":0.7071067812}]} +{"DOI":"10.1161\/01.cir.0000013305.01850.37","Matchings":[{"RORid":"https:\/\/ror.org\/00qjgza05","Confidence":1}]} +{"DOI":"10.1142\/s021821650200186x","Matchings":[{"RORid":"https:\/\/ror.org\/035xkbk20","Confidence":1},{"RORid":"https:\/\/ror.org\/05apxxy63","Confidence":1}]} +{"DOI":"10.1061\/(asce)0733-9372(2002)128:7(575)","Matchings":[{"RORid":"https:\/\/ror.org\/04j198w64","Confidence":0.82}]} +{"DOI":"10.1061\/(asce)0733-9372(2002)128:7(588)","Matchings":[{"RORid":"https:\/\/ror.org\/03m8km719","Confidence":0.8660254038},{"RORid":"https:\/\/ror.org\/02aze4h65","Confidence":0.87}]} +{"DOI":"10.1161\/hy0202.103001","Matchings":[{"RORid":"https:\/\/ror.org\/057xtrt18","Confidence":0.7071067812}]} \ No newline at end of file From 5b06c9d06fd592440e0a97bb4aaeabee33b0b08b Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Mon, 4 Sep 2023 15:15:24 +0200 Subject: [PATCH 274/449] [graph raw] datainfo.invisible set as true only for entities --- .../raw/AbstractMdRecordToOafMapper.java | 45 +++++++++++-------- .../dhp/oa/graph/raw/OafToOafMapper.java | 9 ++-- .../dhp/oa/graph/raw/OdfToOafMapper.java | 17 +++---- 3 files changed, 38 insertions(+), 33 deletions(-) diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/AbstractMdRecordToOafMapper.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/AbstractMdRecordToOafMapper.java index efb860d44..b37e6a755 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/AbstractMdRecordToOafMapper.java +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/AbstractMdRecordToOafMapper.java @@ -117,14 +117,14 @@ public abstract class AbstractMdRecordToOafMapper { return Lists.newArrayList(); } - final DataInfo info = prepareDataInfo(doc, invisible); + final DataInfo entityInfo = prepareDataInfo(doc, invisible); final long lastUpdateTimestamp = new Date().getTime(); - final List instances = prepareInstances(doc, info, collectedFrom, hostedBy); + final List instances = prepareInstances(doc, entityInfo, collectedFrom, hostedBy); final String type = getResultType(doc, instances); - return createOafs(doc, type, instances, collectedFrom, info, lastUpdateTimestamp); + return createOafs(doc, type, instances, collectedFrom, entityInfo, lastUpdateTimestamp); } catch (DocumentException e) { log.error("Error with record:\n" + xml); return Lists.newArrayList(); @@ -184,13 +184,15 @@ public abstract class AbstractMdRecordToOafMapper { final List oafs = Lists.newArrayList(entity); + final DataInfo relationInfo = prepareDataInfo(doc, false); + if (!oafs.isEmpty()) { Set rels = Sets.newHashSet(); - rels.addAll(addProjectRels(doc, entity)); - rels.addAll(addOtherResultRels(doc, entity)); - rels.addAll(addRelations(doc, entity)); - rels.addAll(addAffiliations(doc, entity)); + rels.addAll(addProjectRels(doc, entity, relationInfo)); + rels.addAll(addOtherResultRels(doc, entity, relationInfo)); + rels.addAll(addRelations(doc, entity, relationInfo)); + rels.addAll(addAffiliations(doc, entity, relationInfo)); oafs.addAll(rels); } @@ -243,7 +245,7 @@ public abstract class AbstractMdRecordToOafMapper { private List addProjectRels( final Document doc, - final OafEntity entity) { + final OafEntity entity, DataInfo info) { final List res = new ArrayList<>(); @@ -262,18 +264,21 @@ public abstract class AbstractMdRecordToOafMapper { .add( OafMapperUtils .getRelation( - docId, projectId, RESULT_PROJECT, OUTCOME, IS_PRODUCED_BY, entity, validationdDate)); + docId, projectId, RESULT_PROJECT, OUTCOME, IS_PRODUCED_BY, entity.getCollectedfrom(), + info, entity.getLastupdatetimestamp(), validationdDate, null)); res .add( OafMapperUtils - .getRelation(projectId, docId, RESULT_PROJECT, OUTCOME, PRODUCES, entity, validationdDate)); + .getRelation( + projectId, docId, RESULT_PROJECT, OUTCOME, PRODUCES, entity.getCollectedfrom(), info, + entity.getLastupdatetimestamp(), validationdDate, null)); } } return res; } - private List addRelations(Document doc, OafEntity entity) { + private List addRelations(Document doc, OafEntity entity, DataInfo info) { final List rels = Lists.newArrayList(); @@ -301,14 +306,16 @@ public abstract class AbstractMdRecordToOafMapper { .add( OafMapperUtils .getRelation( - entity.getId(), targetId, relType, subRelType, relClass, entity, - validationDate)); + entity.getId(), targetId, relType, subRelType, relClass, + entity.getCollectedfrom(), info, + entity.getLastupdatetimestamp(), validationDate, null)); rels .add( OafMapperUtils .getRelation( - targetId, entity.getId(), relType, subRelType, relClassInverse, entity, - validationDate)); + targetId, entity.getId(), relType, subRelType, relClassInverse, + entity.getCollectedfrom(), info, + entity.getLastupdatetimestamp(), validationDate, null)); } } } @@ -316,7 +323,7 @@ public abstract class AbstractMdRecordToOafMapper { return rels; } - private List addAffiliations(Document doc, OafEntity entity) { + private List addAffiliations(Document doc, OafEntity entity, DataInfo info) { final List rels = Lists.newArrayList(); for (Object o : doc.selectNodes("//datacite:affiliation[@affiliationIdentifierScheme='ROR']")) { @@ -345,14 +352,14 @@ public abstract class AbstractMdRecordToOafMapper { OafMapperUtils .getRelation( resultId, orgId, RESULT_ORGANIZATION, AFFILIATION, HAS_AUTHOR_INSTITUTION, - entity.getCollectedfrom(), entity.getDataInfo(), entity.getLastupdatetimestamp(), null, + entity.getCollectedfrom(), info, entity.getLastupdatetimestamp(), null, properties)); rels .add( OafMapperUtils .getRelation( orgId, resultId, RESULT_ORGANIZATION, AFFILIATION, IS_AUTHOR_INSTITUTION_OF, - entity.getCollectedfrom(), entity.getDataInfo(), entity.getLastupdatetimestamp(), null, + entity.getCollectedfrom(), info, entity.getLastupdatetimestamp(), null, properties)); } } @@ -361,7 +368,7 @@ public abstract class AbstractMdRecordToOafMapper { protected abstract List addOtherResultRels( final Document doc, - final OafEntity entity); + final OafEntity entity, DataInfo info); private void populateResultFields( final Result r, diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/OafToOafMapper.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/OafToOafMapper.java index 2271a0fff..a9f9367af 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/OafToOafMapper.java +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/OafToOafMapper.java @@ -4,7 +4,6 @@ package eu.dnetlib.dhp.oa.graph.raw; import static eu.dnetlib.dhp.schema.common.ModelConstants.*; import static eu.dnetlib.dhp.schema.oaf.utils.OafMapperUtils.*; -import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.util.ArrayList; import java.util.HashSet; @@ -292,7 +291,7 @@ public class OafToOafMapper extends AbstractMdRecordToOafMapper { @Override protected List addOtherResultRels( final Document doc, - final OafEntity entity) { + final OafEntity entity, DataInfo info) { final String docId = entity.getId(); final List res = new ArrayList<>(); @@ -308,11 +307,13 @@ public class OafToOafMapper extends AbstractMdRecordToOafMapper { res .add( getRelation( - docId, otherId, RESULT_RESULT, RELATIONSHIP, IS_RELATED_TO, entity)); + docId, otherId, RESULT_RESULT, RELATIONSHIP, IS_RELATED_TO, entity.getCollectedfrom(), info, + entity.getLastupdatetimestamp(), null, null)); res .add( getRelation( - otherId, docId, RESULT_RESULT, RELATIONSHIP, IS_RELATED_TO, entity)); + otherId, docId, RESULT_RESULT, RELATIONSHIP, IS_RELATED_TO, entity.getCollectedfrom(), info, + entity.getLastupdatetimestamp(), null, null)); } } return res; diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/OdfToOafMapper.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/OdfToOafMapper.java index 1faa2fe9b..bbd1e7ab1 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/OdfToOafMapper.java +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/OdfToOafMapper.java @@ -5,15 +5,11 @@ import static eu.dnetlib.dhp.schema.common.ModelConstants.*; import static eu.dnetlib.dhp.schema.oaf.utils.OafMapperUtils.*; import static eu.dnetlib.dhp.schema.oaf.utils.OafMapperUtils.structuredProperty; -import java.io.UnsupportedEncodingException; -import java.net.MalformedURLException; -import java.net.URL; import java.net.URLDecoder; import java.util.*; import java.util.stream.Collectors; import org.apache.commons.lang3.StringUtils; -import org.apache.commons.validator.routines.UrlValidator; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.Node; @@ -27,7 +23,6 @@ import eu.dnetlib.dhp.schema.common.RelationInverse; import eu.dnetlib.dhp.schema.oaf.*; import eu.dnetlib.dhp.schema.oaf.utils.CleaningFunctions; import eu.dnetlib.dhp.schema.oaf.utils.IdentifierFactory; -import eu.dnetlib.dhp.schema.oaf.utils.PidType; public class OdfToOafMapper extends AbstractMdRecordToOafMapper { @@ -397,7 +392,7 @@ public class OdfToOafMapper extends AbstractMdRecordToOafMapper { @Override protected List addOtherResultRels( final Document doc, - final OafEntity entity) { + final OafEntity entity, DataInfo info) { final String docId = entity.getId(); @@ -413,7 +408,7 @@ public class OdfToOafMapper extends AbstractMdRecordToOafMapper { final String relType = ((Node) o).valueOf("@relationType"); String otherId = guessRelatedIdentifier(idType, originalId); if (StringUtils.isNotBlank(otherId)) { - res.addAll(getRelations(relType, docId, otherId, entity)); + res.addAll(getRelations(relType, docId, otherId, entity, info)); } } @@ -434,18 +429,20 @@ public class OdfToOafMapper extends AbstractMdRecordToOafMapper { } protected List getRelations(final String reltype, final String entityId, final String otherId, - final OafEntity entity) { + final OafEntity entity, DataInfo info) { final List res = new ArrayList<>(); RelationInverse rel = ModelSupport.findRelation(reltype); if (rel != null) { res .add( getRelation( - entityId, otherId, rel.getRelType(), rel.getSubReltype(), rel.getRelClass(), entity)); + entityId, otherId, rel.getRelType(), rel.getSubReltype(), rel.getRelClass(), + entity.getCollectedfrom(), info, entity.getLastupdatetimestamp(), null, null)); res .add( getRelation( - otherId, entityId, rel.getRelType(), rel.getSubReltype(), rel.getInverseRelClass(), entity)); + otherId, entityId, rel.getRelType(), rel.getSubReltype(), rel.getInverseRelClass(), + entity.getCollectedfrom(), info, entity.getLastupdatetimestamp(), null, null)); } return res; From 15666e86a8448f724e3c7876f480afac36b4a766 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Mon, 4 Sep 2023 15:56:06 +0200 Subject: [PATCH 275/449] added collectedfrom to the affiliation relations imported from Crossref --- .../bipaffiliations/PrepareAffiliationRelations.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelations.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelations.java index 9ac610240..603ad6339 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelations.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelations.java @@ -120,8 +120,10 @@ public class PrepareAffiliationRelations implements Serializable { qualifier, Double.toString(row.getAs("confidence"))); + List collectedfrom = OafMapperUtils.listKeyValues(ModelConstants.CROSSREF_ID, "Crossref"); + // return bi-directional relations - return getAffiliationRelationPair(paperId, affId, dataInfo).iterator(); + return getAffiliationRelationPair(paperId, affId, collectedfrom, dataInfo).iterator(); }) .map(p -> new AtomicAction(Relation.class, p)) @@ -132,7 +134,8 @@ public class PrepareAffiliationRelations implements Serializable { } - private static List getAffiliationRelationPair(String paperId, String affId, DataInfo dataInfo) { + private static List getAffiliationRelationPair(String paperId, String affId, List collectedfrom, + DataInfo dataInfo) { return Arrays .asList( OafMapperUtils @@ -142,7 +145,7 @@ public class PrepareAffiliationRelations implements Serializable { ModelConstants.RESULT_ORGANIZATION, ModelConstants.AFFILIATION, ModelConstants.HAS_AUTHOR_INSTITUTION, - null, + collectedfrom, dataInfo, null), OafMapperUtils @@ -152,7 +155,7 @@ public class PrepareAffiliationRelations implements Serializable { ModelConstants.RESULT_ORGANIZATION, ModelConstants.AFFILIATION, ModelConstants.IS_AUTHOR_INSTITUTION_OF, - null, + collectedfrom, dataInfo, null)); } From 5f90cc11e98d0addbfb22bf8ce0a83e87a269e00 Mon Sep 17 00:00:00 2001 From: dimitrispie Date: Wed, 6 Sep 2023 14:14:38 +0300 Subject: [PATCH 276/449] Update step16-createIndicatorsTables.sql Fix indi_pub_bronze_oa --- .../oozie_app/scripts/step16-createIndicatorsTables.sql | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step16-createIndicatorsTables.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step16-createIndicatorsTables.sql index 1c80f6757..dd249d371 100755 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step16-createIndicatorsTables.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step16-createIndicatorsTables.sql @@ -696,7 +696,11 @@ left outer join (select p.id, 1 as is_bronze_oa from ${stats_db_name}.publication p join ${stats_db_name}.indi_result_has_cc_licence cc on cc.id=p.id join ${stats_db_name}.indi_pub_gold_oa ga on ga.id=p.id -where cc.has_cc_license=0 and ga.is_gold=0) tmp on tmp.id=p.id; +join ${stats_db_name}.result_instance ri on ri.id=p.id +join ${stats_db_name}.datasource d on d.id=ri.hostedby +where cc.has_cc_license=0 and ga.is_gold=0 +and (d.type='Journal' or d.type='Journal Aggregator/Publisher') +and ri.accessright='Open Access') tmp on tmp.id=p.id; CREATE TEMPORARY TABLE ${stats_db_name}.project_year_result_year as select p.id project_id, acronym, r.id result_id, r.year, p.end_year From 4786aa0e094fe848a5e7024b68c0d4e7c80ec65f Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Thu, 7 Sep 2023 11:20:35 +0200 Subject: [PATCH 277/449] added Archive ouverte UNIGE (ETHZ.UNIGENF, opendoar____::1400) to the Datacite hostedBy_map --- .../main/resources/eu/dnetlib/dhp/datacite/hostedBy_map.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/datacite/hostedBy_map.json b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/datacite/hostedBy_map.json index 9088d2960..d07cc33cb 100644 --- a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/datacite/hostedBy_map.json +++ b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/datacite/hostedBy_map.json @@ -1,4 +1,9 @@ { + "ETHZ.UNIGENF": { + "openaire_id": "opendoar____::1400", + "datacite_name": "Uni Genf", + "official_name": "Archive ouverte UNIGE" + }, "GESIS.RKI": { "openaire_id": "re3data_____::r3d100010436", "datacite_name": "Forschungsdatenzentrum am Robert Koch Institut", From 8a6892cc638c84fb6b05db27fa9e2ed538899896 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Tue, 12 Sep 2023 14:34:28 +0200 Subject: [PATCH 278/449] [graph dedup] consistency wf should not remove the relations while dispatching the entities --- .../dhp/oa/merge/DispatchEntitiesSparkJob.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/DispatchEntitiesSparkJob.java b/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/DispatchEntitiesSparkJob.java index 4d2ccb178..cf0a183d7 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/DispatchEntitiesSparkJob.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/DispatchEntitiesSparkJob.java @@ -47,17 +47,14 @@ public class DispatchEntitiesSparkJob { String outputPath = parser.get("outputPath"); log.info("outputPath: {}", outputPath); - boolean filterInvisible = Boolean.valueOf(parser.get("filterInvisible")); + boolean filterInvisible = Boolean.parseBoolean(parser.get("filterInvisible")); log.info("filterInvisible: {}", filterInvisible); SparkConf conf = new SparkConf(); runWithSparkSession( conf, isSparkSessionManaged, - spark -> { - HdfsSupport.remove(outputPath, spark.sparkContext().hadoopConfiguration()); - dispatchEntities(spark, inputPath, outputPath, filterInvisible); - }); + spark -> dispatchEntities(spark, inputPath, outputPath, filterInvisible)); } private static void dispatchEntities( @@ -72,7 +69,9 @@ public class DispatchEntitiesSparkJob { String entityType = entry.getKey(); Class clazz = entry.getValue(); + final String entityPath = outputPath + "/" + entityType; if (!entityType.equalsIgnoreCase("relation")) { + HdfsSupport.remove(entityPath, spark.sparkContext().hadoopConfiguration()); Dataset entityDF = spark .read() .schema(Encoders.bean(clazz).schema()) @@ -91,7 +90,7 @@ public class DispatchEntitiesSparkJob { .write() .mode(SaveMode.Overwrite) .option("compression", "gzip") - .json(outputPath + "/" + entityType); + .json(entityPath); } }); } From 395a4af020621633b9e33e05a6ee5ab5f089413b Mon Sep 17 00:00:00 2001 From: Serafeim Chatzopoulos Date: Tue, 12 Sep 2023 22:31:50 +0300 Subject: [PATCH 279/449] Run CC and RAM sequentieally in dhp-impact-indicators WF --- .../impact_indicators/oozie_app/workflow.xml | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml index 0d7d29bfe..e43e7cf14 100644 --- a/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-impact-indicators/src/main/resources/eu/dnetlib/dhp/oa/graph/impact_indicators/oozie_app/workflow.xml @@ -39,7 +39,8 @@ - ${wf:conf('resume') eq "rankings-start"} + ${wf:conf('resume') eq "cc"} + ${wf:conf('resume') eq "ram"} ${wf:conf('resume') eq "impulse"} ${wf:conf('resume') eq "pagerank"} ${wf:conf('resume') eq "attrank"} @@ -89,18 +90,11 @@ ${nameNode}${wfAppPath}/create_openaire_ranking_graph.py#create_openaire_ranking_graph.py - + - - - - - - - @@ -129,7 +123,7 @@ ${wfAppPath}/bip-ranker/CC.py#CC.py - + @@ -165,14 +159,11 @@ ${wfAppPath}/bip-ranker/TAR.py#TAR.py - + - - - From 9d44418d381b14ab7a6301f1979b2a3af5efbd2f Mon Sep 17 00:00:00 2001 From: Serafeim Chatzopoulos Date: Thu, 14 Sep 2023 18:43:25 +0300 Subject: [PATCH 280/449] Add collecting software code repository URLs --- dhp-workflows/dhp-swh/pom.xml | 104 +++++++++ .../swh/CollectSoftwareRepositoryURLs.java | 211 ++++++++++++++++++ .../dhp/swh/models/LastVisitResponse.java | 40 ++++ .../eu/dnetlib/dhp/swh/input_parameters.json | 26 +++ .../eu/dnetlib/dhp/swh/job.properties | 25 +++ .../eu/dnetlib/dhp/swh/oozie_app/workflow.xml | 101 +++++++++ dhp-workflows/pom.xml | 1 + 7 files changed, 508 insertions(+) create mode 100644 dhp-workflows/dhp-swh/pom.xml create mode 100644 dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/CollectSoftwareRepositoryURLs.java create mode 100644 dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/models/LastVisitResponse.java create mode 100644 dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/input_parameters.json create mode 100644 dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/job.properties create mode 100644 dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/oozie_app/workflow.xml diff --git a/dhp-workflows/dhp-swh/pom.xml b/dhp-workflows/dhp-swh/pom.xml new file mode 100644 index 000000000..501b2aef8 --- /dev/null +++ b/dhp-workflows/dhp-swh/pom.xml @@ -0,0 +1,104 @@ + + + 4.0.0 + + eu.dnetlib.dhp + dhp-workflows + 1.2.5-SNAPSHOT + + dhp-swh + + + + org.apache.spark + spark-core_${scala.binary.version} + + + + org.apache.spark + spark-sql_${scala.binary.version} + + + + eu.dnetlib.dhp + dhp-common + ${project.version} + + + net.sf.saxon + Saxon-HE + + + + + + dom4j + dom4j + + + + xml-apis + xml-apis + + + + jaxen + jaxen + + + + org.apache.hadoop + hadoop-distcp + + + + eu.dnetlib + dnet-actionmanager-api + + + eu.dnetlib + dnet-actionmanager-common + + + eu.dnetlib + dnet-openaireplus-mapping-utils + + + saxonica + saxon + + + saxonica + saxon-dom + + + jgrapht + jgrapht + + + net.sf.ehcache + ehcache + + + org.springframework + spring-test + + + org.apache.* + * + + + apache + * + + + + + + org.apache.httpcomponents + httpclient + 4.5.13 + + + + diff --git a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/CollectSoftwareRepositoryURLs.java b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/CollectSoftwareRepositoryURLs.java new file mode 100644 index 000000000..c91f2bb8c --- /dev/null +++ b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/CollectSoftwareRepositoryURLs.java @@ -0,0 +1,211 @@ + +package eu.dnetlib.dhp.swh; + +import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkHiveSession; +import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkSession; + +import java.io.IOException; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Optional; +import java.util.concurrent.TimeUnit; + +import org.apache.commons.io.IOUtils; +import org.apache.http.Header; +import org.apache.http.HttpEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; +import org.apache.spark.SparkConf; +import org.apache.spark.api.java.function.FlatMapFunction; +import org.apache.spark.sql.*; +import org.apache.spark.sql.Dataset; +import org.apache.spark.sql.types.DataTypes; +import org.apache.spark.sql.types.StructType; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.fasterxml.jackson.databind.ObjectMapper; + +import eu.dnetlib.dhp.application.ArgumentApplicationParser; +import eu.dnetlib.dhp.schema.common.ModelConstants; +import eu.dnetlib.dhp.schema.oaf.*; + +/** + * Creates action sets for Crossref affiliation relations inferred by BIP! + */ +public class CollectSoftwareRepositoryURLs implements Serializable { + + private static final Logger log = LoggerFactory.getLogger(CollectSoftwareRepositoryURLs.class); + // public static final String BIP_AFFILIATIONS_CLASSID = "result:organization:bipinference"; +// public static final String BIP_AFFILIATIONS_CLASSNAME = "Affiliation relation inferred by BIP!"; +// public static final String BIP_INFERENCE_PROVENANCE = "bip:affiliation:crossref"; + private static final String DEFAULT_VISIT_TYPE = "git"; + private static final int CONCURRENT_API_CALLS = 1; + + private static final String SWH_LATEST_VISIT_URL = "https://archive.softwareheritage.org/api/1/origin/%s/visit/latest/"; + + public static void main(String[] args) throws Exception { + + String jsonConfiguration = IOUtils + .toString( + CollectSoftwareRepositoryURLs.class + .getResourceAsStream("/eu/dnetlib/dhp/swh/input_parameters.json")); + + final ArgumentApplicationParser parser = new ArgumentApplicationParser(jsonConfiguration); + parser.parseArgument(args); + + final Boolean isSparkSessionManaged = Optional + .ofNullable(parser.get("isSparkSessionManaged")) + .map(Boolean::valueOf) + .orElse(Boolean.TRUE); + log.info("isSparkSessionManaged: {}", isSparkSessionManaged); + + final String hiveDbName = parser.get("hiveDbName"); + log.info("hiveDbName {}: ", hiveDbName); + + final String outputPath = parser.get("softwareCodeRepositoryURLs"); + log.info("softwareCodeRepositoryURLs {}: ", outputPath); + + final String hiveMetastoreUris = parser.get("hiveMetastoreUris"); + log.info("hiveMetastoreUris: {}", hiveMetastoreUris); + + SparkConf conf = new SparkConf(); + conf.set("hive.metastore.uris", hiveMetastoreUris); + + runWithSparkHiveSession( + conf, + isSparkSessionManaged, + spark -> { + doRun(spark, hiveDbName, outputPath); + }); + } + + private static void doRun(SparkSession spark, String hiveDbName, String outputPath) { + + String queryTemplate = "SELECT distinct coderepositoryurl.value " + + "FROM %s.software " + + "WHERE coderepositoryurl.value IS NOT NULL"; + String query = String.format(queryTemplate, hiveDbName); + + log.info("Hive query to fetch software code URLs: {}", query); + + Dataset df = spark.sql(query); + + // write distinct repository URLs + df + .write() + .mode(SaveMode.Overwrite) +// .option("compression", "gzip") + .csv(outputPath); + } + + private static Dataset readSoftware(SparkSession spark, String inputPath) { + return spark + .read() + .json(inputPath) + .select( + new Column("codeRepositoryUrl.value").as("codeRepositoryUrl"), + new Column("dataInfo.deletedbyinference"), + new Column("dataInfo.invisible")); + } + + private static Dataset filterSoftware(Dataset softwareDF, Integer limit) { + + Dataset df = softwareDF + .where(softwareDF.col("codeRepositoryUrl").isNotNull()) + .where("deletedbyinference = false") + .where("invisible = false") + .drop("deletedbyinference") + .drop("invisible"); + +// TODO remove when done + df = df.limit(limit); + + return df; + } + + public static Dataset makeParallelRequests(SparkSession spark, Dataset softwareDF) { + // TODO replace with coalesce ? + Dataset df = softwareDF.repartition(CONCURRENT_API_CALLS); + + log.info("Number of partitions: {}", df.rdd().getNumPartitions()); + + ObjectMapper objectMapper = new ObjectMapper(); + + List collectedRows = df + .javaRDD() + // max parallelism should be equal to the number of partitions here + .mapPartitions((FlatMapFunction, Row>) partition -> { + List resultRows = new ArrayList<>(); + while (partition.hasNext()) { + Row row = partition.next(); + String url = String.format(SWH_LATEST_VISIT_URL, row.getString(0)); + +// String snapshotId = null; +// String type = null; +// String date = null; + + String responseBody = makeAPICall(url); + TimeUnit.SECONDS.sleep(1); +// Thread.sleep(500); +// if (responseBody != null) { +// LastVisitResponse visitResponse = objectMapper.readValue(responseBody, LastVisitResponse.class); +// snapshotId = visitResponse.getSnapshot(); +// type = visitResponse.getType(); +// date = visitResponse.getDate(); +// } +// resultRows.add(RowFactory.create(url, snapshotId, type, date)); + + resultRows.add(RowFactory.create(url, responseBody)); + } + return resultRows.iterator(); + + }) + .collect(); + + StructType resultSchema = new StructType() + .add("codeRepositoryUrl", DataTypes.StringType) + .add("response", DataTypes.StringType); + +// .add("snapshotId", DataTypes.StringType) +// .add("type", DataTypes.StringType) +// .add("date", DataTypes.StringType); + + // create a DataFrame from the collected rows + return spark.createDataFrame(collectedRows, resultSchema); + } + + private static String makeAPICall(String url) throws IOException { + System.out.println(java.time.LocalDateTime.now()); + + try (CloseableHttpClient httpClient = HttpClients.createDefault()) { + HttpGet httpGet = new HttpGet(url); + httpGet + .setHeader( + "Authorization", + "Bearer eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJhMTMxYTQ1My1hM2IyLTQwMTUtODQ2Ny05MzAyZjk3MTFkOGEifQ.eyJpYXQiOjE2OTQ2MzYwMjAsImp0aSI6IjkwZjdkNTNjLTQ5YTktNGFiMy1hY2E0LTcwMTViMjEyZTNjNiIsImlzcyI6Imh0dHBzOi8vYXV0aC5zb2Z0d2FyZWhlcml0YWdlLm9yZy9hdXRoL3JlYWxtcy9Tb2Z0d2FyZUhlcml0YWdlIiwiYXVkIjoiaHR0cHM6Ly9hdXRoLnNvZnR3YXJlaGVyaXRhZ2Uub3JnL2F1dGgvcmVhbG1zL1NvZnR3YXJlSGVyaXRhZ2UiLCJzdWIiOiIzMTY5OWZkNC0xNmE0LTQxOWItYTdhMi00NjI5MDY4ZjI3OWEiLCJ0eXAiOiJPZmZsaW5lIiwiYXpwIjoic3doLXdlYiIsInNlc3Npb25fc3RhdGUiOiIzMjYzMzEwMS00ZDRkLTQwMjItODU2NC1iMzNlMTJiNTE3ZDkiLCJzY29wZSI6Im9wZW5pZCBvZmZsaW5lX2FjY2VzcyBwcm9maWxlIGVtYWlsIn0.XHj1VIZu1dZ4Ej32-oU84mFmaox9cLNjXosNxwZM0Xs"); + try (CloseableHttpResponse response = httpClient.execute(httpGet)) { + int statusCode = response.getStatusLine().getStatusCode(); +// if (statusCode != 200) +// return null; + Header[] headers = response.getHeaders("X-RateLimit-Remaining"); + for (Header header : headers) { + System.out + .println( + "Key : " + header.getName() + + " ,Value : " + header.getValue()); + } + HttpEntity entity = response.getEntity(); + if (entity != null) { + return EntityUtils.toString(entity); + } + } + } + return null; + } +} diff --git a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/models/LastVisitResponse.java b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/models/LastVisitResponse.java new file mode 100644 index 000000000..435397590 --- /dev/null +++ b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/models/LastVisitResponse.java @@ -0,0 +1,40 @@ + +package eu.dnetlib.dhp.swh.models; + +import com.cloudera.com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +@JsonIgnoreProperties(ignoreUnknown = true) +public class LastVisitResponse { + + private String type; + + private String date; + + @JsonProperty("snapshot") + private String snapshotId; + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getDate() { + return date; + } + + public void setDate(String date) { + this.date = date; + } + + public String getSnapshot() { + return snapshotId; + } + + public void setSnapshot(String snapshotId) { + this.snapshotId = snapshotId; + } +} diff --git a/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/input_parameters.json b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/input_parameters.json new file mode 100644 index 000000000..dd5432b93 --- /dev/null +++ b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/input_parameters.json @@ -0,0 +1,26 @@ +[ + { + "paramName": "issm", + "paramLongName": "isSparkSessionManaged", + "paramDescription": "when true will stop SparkSession after job execution", + "paramRequired": false + }, + { + "paramName": "ip", + "paramLongName": "softwareCodeRepositoryURLs", + "paramDescription": "the URL where to store software repository URLs", + "paramRequired": true + }, + { + "paramName": "db", + "paramLongName": "hiveDbName", + "paramDescription": "the target hive database name", + "paramRequired": true + }, + { + "paramName": "hmu", + "paramLongName": "hiveMetastoreUris", + "paramDescription": "the hive metastore uris", + "paramRequired": true + } +] \ No newline at end of file diff --git a/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/job.properties b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/job.properties new file mode 100644 index 000000000..a63343aed --- /dev/null +++ b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/job.properties @@ -0,0 +1,25 @@ +# hive +hiveDbName=openaire_prod_20230914 +hiveMetastoreUris=thrift://iis-cdh5-test-m3.ocean.icm.edu.pl:9083 + +# oozie +oozie.action.sharelib.for.spark=spark2 +oozie.use.system.libpath=true +oozie.wf.application.path=${oozieTopWfApplicationPath} +oozie.wf.application.path=${oozieTopWfApplicationPath} +oozieActionShareLibForSpark2=spark2 + +# spark +spark2EventLogDir=/user/spark/spark2ApplicationHistory +spark2ExtraListeners=com.cloudera.spark.lineage.NavigatorAppListener +spark2SqlQueryExecutionListeners=com.cloudera.spark.lineage.NavigatorQueryListener +spark2YarnHistoryServerAddress=http://iis-cdh5-test-gw.ocean.icm.edu.pl:18089 +sparkSqlWarehouseDir=/user/hive/warehouse + +# misc +wfAppPath=${oozieTopWfApplicationPath} +resourceManager=http://iis-cdh5-test-m2.ocean.icm.edu.pl:8088/cluster + +# custom params +softwareCodeRepositoryURLs=${workingDir}/code_repo_urls.csv +resume=collect-software-repository-urls diff --git a/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/oozie_app/workflow.xml b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/oozie_app/workflow.xml new file mode 100644 index 000000000..9832e5f26 --- /dev/null +++ b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/oozie_app/workflow.xml @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${jobTracker} + ${nameNode} + + + + + + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + + + + ${wf:conf('startFrom') eq 'collect-software-repository-urls'} + + + + + + + yarn + cluster + Collect software repository URLs + eu.dnetlib.dhp.swh.CollectSoftwareRepositoryURLs + dhp-swh-${projectVersion}.jar + + --executor-memory=${sparkExecutorMemory} + --executor-cores=${sparkExecutorCores} + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.sql.warehouse.dir=${sparkSqlWarehouseDir} + + + --softwareCodeRepositoryURLs${softwareCodeRepositoryURLs} + --hiveDbName${hiveDbName} + --hiveMetastoreUris${hiveMetastoreUris} + + + + + + + + + \ No newline at end of file diff --git a/dhp-workflows/pom.xml b/dhp-workflows/pom.xml index d054ba39b..64f5f2d26 100644 --- a/dhp-workflows/pom.xml +++ b/dhp-workflows/pom.xml @@ -39,6 +39,7 @@ dhp-broker-events dhp-doiboost dhp-impact-indicators + dhp-swh From 9ef971a1464e5d307c407316cda69eb97d6ecb9a Mon Sep 17 00:00:00 2001 From: dimitrispie Date: Tue, 19 Sep 2023 14:25:42 +0300 Subject: [PATCH 281/449] Update step16-createIndicatorsTables.sql Fix int year for: indi_org_openess_year indi_org_fairness_year indi_org_findable_year --- .../scripts/step16-createIndicatorsTables.sql | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step16-createIndicatorsTables.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step16-createIndicatorsTables.sql index dd249d371..ae95727a6 100755 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step16-createIndicatorsTables.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step16-createIndicatorsTables.sql @@ -444,9 +444,9 @@ CREATE TEMPORARY TABLE ${stats_db_name}.allresults as group by ro.organization, year; create table if not exists ${stats_db_name}.indi_org_fairness_year stored as parquet as - select allresults.year, allresults.organization, result_fair.no_result_fair/allresults.no_allresults org_fairness + select cast(allresults.year as int) year, allresults.organization, result_fair.no_result_fair/allresults.no_allresults org_fairness from ${stats_db_name}.allresults - join ${stats_db_name}.result_fair on result_fair.organization=allresults.organization and result_fair.year=allresults.year; + join ${stats_db_name}.result_fair on result_fair.organization=allresults.organization and cast(result_fair.year as int)=cast(allresults.year as int); DROP table ${stats_db_name}.result_fair purge; DROP table ${stats_db_name}.allresults purge; @@ -465,9 +465,9 @@ CREATE TEMPORARY TABLE ${stats_db_name}.allresults as group by ro.organization, year; create table if not exists ${stats_db_name}.indi_org_findable_year stored as parquet as -select allresults.year, allresults.organization, result_with_pid.no_result_with_pid/allresults.no_allresults org_findable +select cast(allresults.year as int) year, allresults.organization, result_with_pid.no_result_with_pid/allresults.no_allresults org_findable from ${stats_db_name}.allresults - join ${stats_db_name}.result_with_pid on result_with_pid.organization=allresults.organization and result_with_pid.year=allresults.year; + join ${stats_db_name}.result_with_pid on result_with_pid.organization=allresults.organization and cast(result_with_pid.year as int)=cast(allresults.year as int); DROP table ${stats_db_name}.result_with_pid purge; DROP table ${stats_db_name}.allresults purge; @@ -626,16 +626,16 @@ select allsoftware.year, software_oa.organization, software_oa.no_oasoftware/all create table if not exists ${stats_db_name}.indi_org_openess_year stored as parquet as -select cast(allpubsshare.year as int), allpubsshare.organization, +select cast(allpubsshare.year as int) year, allpubsshare.organization, (p+if(isnull(s),0,s)+if(isnull(d),0,d))/(1+(case when s is null then 0 else 1 end) +(case when d is null then 0 else 1 end)) org_openess FROM ${stats_db_name}.allpubsshare - left outer join (select year, organization,d from + left outer join (select cast(year as int), organization,d from ${stats_db_name}.alldatasetssshare) tmp1 on tmp1.organization=allpubsshare.organization and tmp1.year=allpubsshare.year - left outer join (select year, organization,s from + left outer join (select cast(year as int), organization,s from ${stats_db_name}.allsoftwaresshare) tmp2 - on tmp2.organization=allpubsshare.organization and tmp2.year=allpubsshare.year; + on tmp2.organization=allpubsshare.organization and cast(tmp2.year as int)=cast(allpubsshare.year as int); DROP TABLE ${stats_db_name}.pubs_oa purge; DROP TABLE ${stats_db_name}.datasets_oa purge; From 76476cdfb63c2c0570f0669e50970d43e9aecb16 Mon Sep 17 00:00:00 2001 From: Sandro La Bruzzo Date: Wed, 20 Sep 2023 10:33:14 +0200 Subject: [PATCH 282/449] Added maven repo for dependencies that are not in maven central --- .../eu/dnetlib/pace/util/DiffPatchMatch.java | 17 +++++++++++++++++ pom.xml | 10 ++++++++++ 2 files changed, 27 insertions(+) diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/DiffPatchMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/DiffPatchMatch.java index 84d49bd5c..cfd9acd70 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/DiffPatchMatch.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/DiffPatchMatch.java @@ -1,6 +1,23 @@ package eu.dnetlib.pace.util; +/* + * Diff Match and Patch + * Copyright 2018 The diff-match-patch Authors. + * https://github.com/google/diff-match-patch + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ /* * Diff Match and Patch * Copyright 2018 The diff-match-patch Authors. diff --git a/pom.xml b/pom.xml index c6b65e27a..9cd82a343 100644 --- a/pom.xml +++ b/pom.xml @@ -112,6 +112,16 @@ https://maven.d4science.org/nexus/content/repositories/dnet-deps default + + maven-restlet + Restlet repository + https://maven.restlet.talend.com + + + conjars + conjars + https://conjars.wensel.net/repo/ + From cc7204a08904a8b23ac8bd30be5f829ff93e7cc0 Mon Sep 17 00:00:00 2001 From: Alessia Bardi Date: Tue, 19 Sep 2023 13:38:25 +0200 Subject: [PATCH 283/449] tests for d4science catalog --- .../dnetlib/dhp/oa/graph/raw/MappersTest.java | 22 +++++ .../dhp/oa/graph/raw/d4science-1-training.xml | 93 +++++++++++++++++++ .../dhp/oa/graph/raw/d4science-2-dataset.xml | 72 ++++++++++++++ .../oa/provision/XmlRecordFactoryTest.java | 52 ++++++++++- .../oa/provision/d4science-1-training.json | 1 + .../dhp/oa/provision/d4science-2-dataset.json | 1 + 6 files changed, 237 insertions(+), 4 deletions(-) create mode 100644 dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/raw/d4science-1-training.xml create mode 100644 dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/raw/d4science-2-dataset.xml create mode 100644 dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/d4science-1-training.json create mode 100644 dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/d4science-2-dataset.json diff --git a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/raw/MappersTest.java b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/raw/MappersTest.java index 894ed33f7..b506d3a62 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/raw/MappersTest.java +++ b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/raw/MappersTest.java @@ -1067,6 +1067,28 @@ class MappersTest { System.out.println("***************"); } + @Test + public void testD4ScienceTraining() throws IOException { + final String xml = IOUtils + .toString(Objects.requireNonNull(getClass().getResourceAsStream("d4science-1-training.xml"))); + final List list = new OdfToOafMapper(vocs, false, true).processMdRecord(xml); + final OtherResearchProduct trainingMaterial = (OtherResearchProduct) list.get(0); + System.out.println("***************"); + System.out.println(new ObjectMapper().writeValueAsString(trainingMaterial)); + System.out.println("***************"); + } + + @Test + public void testD4ScienceDataset() throws IOException { + final String xml = IOUtils + .toString(Objects.requireNonNull(getClass().getResourceAsStream("d4science-2-dataset.xml"))); + final List list = new OdfToOafMapper(vocs, false, true).processMdRecord(xml); + final Dataset trainingMaterial = (Dataset) list.get(0); + System.out.println("***************"); + System.out.println(new ObjectMapper().writeValueAsString(trainingMaterial)); + System.out.println("***************"); + } + @Test void testNotWellFormed() throws IOException { final String xml = IOUtils diff --git a/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/raw/d4science-1-training.xml b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/raw/d4science-1-training.xml new file mode 100644 index 000000000..91f9f9118 --- /dev/null +++ b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/raw/d4science-1-training.xml @@ -0,0 +1,93 @@ + + + + alessia_____::104c2d4ba8878c16fa824dce5b1bea57 + 12d8f77e-d66f-46f5-8d88-af7db23bc4c9 + 2023-09-08T10:12:35.864+02:00 + alessia_____ + 2023-09-08T11:31:45.692+02:00 + + + + http://data.d4science.org/ctlg/ResourceCatalogue/visual_analytics_for_data_scientists + + + + BRAGHIERI MARCO + + + + Visual Analytics for Data Scientists + + SoBigData++ + + + + + TrainingMaterial + + Participants to this module shall + - Learn the principles and rules underlying the design of visual data + representations and human-computer interactions + - Understand, adapt and apply representative visual analytics methods and systems for diverse types + of data and problems + - Analyse and evaluate the structure and properties + of data to select or devise appropriate methods for data exploration + - Combine visualization, interactive techniques, and computational + processing to develop practical data analysis for problem solving + + (This teaching material on Visual Analytics for Data Scientists is part of a MSc module at City University London). + + The author did not intend to violate any copyright on figures or content. In case you are the legal owner of any copyrighted content, please contact info@sobigdata.eu and we will immediately remove it + + + Visual analytics + + + Slides + Other + PDF + PDF + PDF + PDF + PDF + PDF + PDF + PDF + PDF + PDF + ZIP + + + OPEN + 0010 + + + + other-open + corda__h2020::871042 + + + + + https%3A%2F%2Fapi.d4science.org%2Fcatalogue%2Fitems + + + + + + + false + false + 0.9 + + + + + \ No newline at end of file diff --git a/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/raw/d4science-2-dataset.xml b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/raw/d4science-2-dataset.xml new file mode 100644 index 000000000..48ceb6c13 --- /dev/null +++ b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/raw/d4science-2-dataset.xml @@ -0,0 +1,72 @@ + + + + alessia_____::028879484548f4e1c630e1c503e35231 + 4fed018e-c2ff-4afa-b7b5-1ca1beebf850 + 2023-09-08T12:14:27.615+02:00 + alessia_____ + 2023-09-08T12:14:51.7+02:00 + + + + http://data.d4science.org/ctlg/ResourceCatalogue/city-to-city_migration + + + + + + Pappalardo, Luca + + 0000-0002-1547-6007 + + + + City-to-city migration + + SoBigData++ + + + 2018-02-15 + + Dataset + + Census data recording the migration of people between metropolitan areas in + the US + + + Human Mobility data + + + + OPEN + 0021 + 2018-02-15 + + + AFL-3.0 + corda__h2020::871042 + + + + + https%3A%2F%2Fapi.d4science.org%2Fcatalogue%2Fitems + + + + + + + false + false + 0.9 + + + + + \ No newline at end of file diff --git a/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/XmlRecordFactoryTest.java b/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/XmlRecordFactoryTest.java index 761539780..88bffd0e7 100644 --- a/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/XmlRecordFactoryTest.java +++ b/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/XmlRecordFactoryTest.java @@ -24,10 +24,7 @@ import eu.dnetlib.dhp.oa.provision.model.RelatedEntity; import eu.dnetlib.dhp.oa.provision.model.RelatedEntityWrapper; import eu.dnetlib.dhp.oa.provision.utils.ContextMapper; import eu.dnetlib.dhp.oa.provision.utils.XmlRecordFactory; -import eu.dnetlib.dhp.schema.oaf.Datasource; -import eu.dnetlib.dhp.schema.oaf.Project; -import eu.dnetlib.dhp.schema.oaf.Publication; -import eu.dnetlib.dhp.schema.oaf.Relation; +import eu.dnetlib.dhp.schema.oaf.*; public class XmlRecordFactoryTest { @@ -196,4 +193,51 @@ public class XmlRecordFactoryTest { assertEquals("dnet:pid_types", ((Element) pids.get(0)).attribute("schemeid").getValue()); assertEquals("dnet:pid_types", ((Element) pids.get(0)).attribute("schemename").getValue()); } + + @Test + public void testD4ScienceTraining() throws DocumentException, IOException { + final ContextMapper contextMapper = new ContextMapper(); + + final XmlRecordFactory xmlRecordFactory = new XmlRecordFactory(contextMapper, false, + XmlConverterJob.schemaLocation); + + final OtherResearchProduct p = OBJECT_MAPPER + .readValue( + IOUtils.toString(getClass().getResourceAsStream("d4science-1-training.json")), + OtherResearchProduct.class); + + final String xml = xmlRecordFactory.build(new JoinedEntity<>(p)); + + assertNotNull(xml); + + final Document doc = new SAXReader().read(new StringReader(xml)); + + assertNotNull(doc); + System.out.println(doc.asXML()); + + } + + @Test + public void testD4ScienceDataset() throws DocumentException, IOException { + final ContextMapper contextMapper = new ContextMapper(); + + final XmlRecordFactory xmlRecordFactory = new XmlRecordFactory(contextMapper, false, + XmlConverterJob.schemaLocation); + + final OtherResearchProduct p = OBJECT_MAPPER + .readValue( + IOUtils.toString(getClass().getResourceAsStream("d4science-2-dataset.json")), + OtherResearchProduct.class); + + final String xml = xmlRecordFactory.build(new JoinedEntity<>(p)); + + assertNotNull(xml); + + final Document doc = new SAXReader().read(new StringReader(xml)); + + assertNotNull(doc); + System.out.println(doc.asXML()); + + } + } diff --git a/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/d4science-1-training.json b/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/d4science-1-training.json new file mode 100644 index 000000000..3ce397f10 --- /dev/null +++ b/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/d4science-1-training.json @@ -0,0 +1 @@ +{"collectedfrom":[{"key":"10|alessia_____::6332e88a4c7dba6f7743d3a7a0c6ea2c","value":"Alessia","dataInfo":null}],"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1694165542374,"id":"50|alessia_____::104c2d4ba8878c16fa824dce5b1bea57","originalId":["12d8f77e-d66f-46f5-8d88-af7db23bc4c9","50|alessia_____::104c2d4ba8878c16fa824dce5b1bea57"],"pid":[],"dateofcollection":"2023-09-08T10:12:35.864+02:00","dateoftransformation":"2023-09-08T11:31:45.692+02:00","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2023-09-08T10:12:35.864+02:00","altered":true,"baseURL":"https%3A%2F%2Fapi.d4science.org%2Fcatalogue%2Fitems","identifier":"","datestamp":"","metadataNamespace":""}},"measures":null,"processingchargeamount":null,"processingchargecurrency":null,"author":[{"fullname":"BRAGHIERI MARCO","name":"","surname":"","rank":1,"pid":[],"affiliation":[]}],"resulttype":{"classid":"other","classname":"other","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"","classname":"","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"Visual analytics","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"Visual Analytics for Data Scientists","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[{"value":"","qualifier":{"classid":"Issued","classname":"Issued","schemeid":"dnet:dataCite_date","schemename":"dnet:dataCite_date"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"description":[{"value":"Participants to this module shall\n - Learn the principles and rules underlying the design of visual data\n representations and human-computer interactions\n - Understand, adapt and apply representative visual analytics methods and systems for diverse types\n of data and problems\n - Analyse and evaluate the structure and properties\n of data to select or devise appropriate methods for data exploration\n - Combine visualization, interactive techniques, and computational\n processing to develop practical data analysis for problem solving\n\n (This teaching material on Visual Analytics for Data Scientists is part of a MSc module at City University London).\n\n The author did not intend to violate any copyright on figures or content. In case you are the legal owner of any copyrighted content, please contact info@sobigdata.eu and we will immediately remove it","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":null,"publisher":{"value":"SoBigData++","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"embargoenddate":null,"source":[],"fulltext":[],"format":[{"value":"Slides","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Other","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"PDF","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"ZIP","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"contributor":[],"resourcetype":{"classid":"TrainingMaterial","classname":"TrainingMaterial","schemeid":"dnet:dataCite_resource","schemename":"dnet:dataCite_resource"},"coverage":[],"bestaccessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"context":[],"externalReference":[],"instance":[{"license":{"value":"other-open","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes","openAccessRoute":null},"instancetype":{"classid":"0010","classname":"Lecture","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"10|alessia_____::6332e88a4c7dba6f7743d3a7a0c6ea2c","value":"Alessia","dataInfo":null},"url":["http://data.d4science.org/ctlg/ResourceCatalogue/visual_analytics_for_data_scientists"],"distributionlocation":null,"collectedfrom":{"key":"10|alessia_____::6332e88a4c7dba6f7743d3a7a0c6ea2c","value":"Alessia","dataInfo":null},"pid":[],"alternateIdentifier":[],"dateofacceptance":null,"processingchargeamount":null,"processingchargecurrency":null,"refereed":{"classid":"","classname":"","schemeid":"dnet:review_levels","schemename":"dnet:review_levels"},"measures":null,"fulltext":null}],"eoscifguidelines":[],"contactperson":[],"contactgroup":[],"tool":[]} diff --git a/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/d4science-2-dataset.json b/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/d4science-2-dataset.json new file mode 100644 index 000000000..ea8465e36 --- /dev/null +++ b/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/d4science-2-dataset.json @@ -0,0 +1 @@ +{"collectedfrom":[{"key":"10|alessia_____::6332e88a4c7dba6f7743d3a7a0c6ea2c","value":"Alessia","dataInfo":null}],"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1694507584675,"id":"50|alessia_____::028879484548f4e1c630e1c503e35231","originalId":["4fed018e-c2ff-4afa-b7b5-1ca1beebf850","50|alessia_____::028879484548f4e1c630e1c503e35231"],"pid":[],"dateofcollection":"2023-09-08T12:14:27.615+02:00","dateoftransformation":"2023-09-08T12:14:51.7+02:00","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2023-09-08T12:14:27.615+02:00","altered":true,"baseURL":"https%3A%2F%2Fapi.d4science.org%2Fcatalogue%2Fitems","identifier":"","datestamp":"","metadataNamespace":""}},"measures":null,"processingchargeamount":null,"processingchargecurrency":null,"author":[{"fullname":"Pappalardo, Luca","name":"Luca","surname":"Pappalardo","rank":1,"pid":[{"value":"0000-0002-1547-6007","qualifier":{"classid":"orcid_pending","classname":"Open Researcher and Contributor ID","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"affiliation":[]}],"resulttype":{"classid":"dataset","classname":"dataset","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"","classname":"","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"Human Mobility data","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"City-to-city migration","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[{"value":"2018-02-15","qualifier":{"classid":"Issued","classname":"Issued","schemeid":"dnet:dataCite_date","schemename":"dnet:dataCite_date"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"description":[{"value":"Census data recording the migration of people between metropolitan areas in\n the US","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2018-02-15","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":{"value":"SoBigData++","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[],"resourcetype":{"classid":"dataset","classname":"dataset","schemeid":"dnet:dataCite_resource","schemename":"dnet:dataCite_resource"},"coverage":[],"bestaccessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"context":[],"externalReference":[],"instance":[{"license":{"value":"AFL-3.0","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes","openAccessRoute":null},"instancetype":{"classid":"0021","classname":"Dataset","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"10|alessia_____::6332e88a4c7dba6f7743d3a7a0c6ea2c","value":"Alessia","dataInfo":null},"url":["http://data.d4science.org/ctlg/ResourceCatalogue/city-to-city_migration"],"distributionlocation":null,"collectedfrom":{"key":"10|alessia_____::6332e88a4c7dba6f7743d3a7a0c6ea2c","value":"Alessia","dataInfo":null},"pid":[],"alternateIdentifier":[],"dateofacceptance":{"value":"2018-02-15","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":{"classid":"","classname":"","schemeid":"dnet:review_levels","schemename":"dnet:review_levels"},"measures":null,"fulltext":null}],"eoscifguidelines":[],"storagedate":{"value":"2018-02-15","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"device":null,"size":null,"version":null,"lastmetadataupdate":null,"metadataversionnumber":null,"geolocation":[]} From 0935d7757cfc9c4efce6500e3e8f02792d56c2ad Mon Sep 17 00:00:00 2001 From: Alessia Bardi Date: Tue, 19 Sep 2023 14:47:01 +0200 Subject: [PATCH 284/449] Use v5 of the UNIBI Gold ISSN list in test --- .../eu/dnetlib/dhp/oa/graph/hostedbymap/DownloadCsvTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/hostedbymap/DownloadCsvTest.java b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/hostedbymap/DownloadCsvTest.java index 48f1e0c06..9bd32968a 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/hostedbymap/DownloadCsvTest.java +++ b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/hostedbymap/DownloadCsvTest.java @@ -49,7 +49,7 @@ public class DownloadCsvTest { @Test void getUnibiFileTest() throws CollectorException, IOException, ClassNotFoundException { - String fileURL = "https://pub.uni-bielefeld.de/download/2944717/2944718/issn_gold_oa_version_4.csv"; + String fileURL = "https://pub.uni-bielefeld.de/download/2944717/2944718/issn_gold_oa_version_5.csv"; final String outputFile = workingDir + "/unibi_gold.json"; new DownloadCSV() From ed9c81a0b7a12ac2b337843ef42f63ca62b1f063 Mon Sep 17 00:00:00 2001 From: Serafeim Chatzopoulos Date: Wed, 27 Sep 2023 19:00:54 +0300 Subject: [PATCH 285/449] Add steps to collect last visit data && archive not found repository URLs --- .../java/eu/dnetlib/dhp/common/Constants.java | 1 + .../common/collection/HttpClientParams.java | 37 +++- .../dhp/common/collection/HttpConnector2.java | 7 + dhp-workflows/dhp-swh/pom.xml | 6 + .../dhp/swh/ArchiveRepositoryURLs.java | 137 +++++++++++++++ .../swh/CollectLastVisitRepositoryData.java | 120 +++++++++++++ .../swh/CollectSoftwareRepositoryURLs.java | 158 ++---------------- ...tVisitResponse.java => LastVisitData.java} | 10 +- .../dnetlib/dhp/swh/utils/SWHConnection.java | 138 +++++++++++++++ .../dnetlib/dhp/swh/utils/SWHConstants.java | 13 ++ .../eu/dnetlib/dhp/swh/utils/SWHUtils.java | 94 +++++++++++ .../swh/input_archive_repository_urls.json | 26 +++ ...ut_collect_last_visit_repository_data.json | 38 +++++ ...put_collect_software_repository_urls.json} | 2 +- .../eu/dnetlib/dhp/swh/job.properties | 22 +-- .../dhp/swh/oozie_app/config-default.xml | 50 ++++++ .../eu/dnetlib/dhp/swh/oozie_app/workflow.xml | 109 ++++++------ .../dhp/swh/ArchiveRepositoryURLsTest.java | 35 ++++ .../eu/dnetlib/dhp/swh/SWHConnectionTest.java | 57 +++++++ .../dhp/swh/lastVisitDataToArchive.csv | 6 + 20 files changed, 848 insertions(+), 218 deletions(-) create mode 100644 dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/ArchiveRepositoryURLs.java create mode 100644 dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/CollectLastVisitRepositoryData.java rename dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/models/{LastVisitResponse.java => LastVisitData.java} (81%) create mode 100644 dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/utils/SWHConnection.java create mode 100644 dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/utils/SWHConstants.java create mode 100644 dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/utils/SWHUtils.java create mode 100644 dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/input_archive_repository_urls.json create mode 100644 dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/input_collect_last_visit_repository_data.json rename dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/{input_parameters.json => input_collect_software_repository_urls.json} (96%) create mode 100644 dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/oozie_app/config-default.xml create mode 100644 dhp-workflows/dhp-swh/src/test/java/eu/dnetlib/dhp/swh/ArchiveRepositoryURLsTest.java create mode 100644 dhp-workflows/dhp-swh/src/test/java/eu/dnetlib/dhp/swh/SWHConnectionTest.java create mode 100644 dhp-workflows/dhp-swh/src/test/resources/eu/dnetlib/dhp/swh/lastVisitDataToArchive.csv diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/common/Constants.java b/dhp-common/src/main/java/eu/dnetlib/dhp/common/Constants.java index 4f2c6341e..0477d6399 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/common/Constants.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/common/Constants.java @@ -51,6 +51,7 @@ public class Constants { public static final String RETRY_DELAY = "retryDelay"; public static final String CONNECT_TIMEOUT = "connectTimeOut"; public static final String READ_TIMEOUT = "readTimeOut"; + public static final String REQUEST_METHOD = "requestMethod"; public static final String FROM_DATE_OVERRIDE = "fromDateOverride"; public static final String UNTIL_DATE_OVERRIDE = "untilDateOverride"; diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/common/collection/HttpClientParams.java b/dhp-common/src/main/java/eu/dnetlib/dhp/common/collection/HttpClientParams.java index 6fcec00dd..55f9ceb8b 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/common/collection/HttpClientParams.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/common/collection/HttpClientParams.java @@ -1,6 +1,9 @@ package eu.dnetlib.dhp.common.collection; +import java.util.HashMap; +import java.util.Map; + /** * Bundles the http connection parameters driving the client behaviour. */ @@ -13,6 +16,8 @@ public class HttpClientParams { public static int _connectTimeOut = 10; // seconds public static int _readTimeOut = 30; // seconds + public static String _requestMethod = "GET"; + /** * Maximum number of allowed retires before failing */ @@ -38,17 +43,30 @@ public class HttpClientParams { */ private int readTimeOut; + /** + * Custom http headers + */ + private Map headers; + + /** + * Request method (i.e., GET, POST etc) + */ + private String requestMethod; + + public HttpClientParams() { - this(_maxNumberOfRetry, _requestDelay, _retryDelay, _connectTimeOut, _readTimeOut); + this(_maxNumberOfRetry, _requestDelay, _retryDelay, _connectTimeOut, _readTimeOut, new HashMap<>(), _requestMethod); } public HttpClientParams(int maxNumberOfRetry, int requestDelay, int retryDelay, int connectTimeOut, - int readTimeOut) { + int readTimeOut, Map headers, String requestMethod) { this.maxNumberOfRetry = maxNumberOfRetry; this.requestDelay = requestDelay; this.retryDelay = retryDelay; this.connectTimeOut = connectTimeOut; this.readTimeOut = readTimeOut; + this.headers = headers; + this.requestMethod = requestMethod; } public int getMaxNumberOfRetry() { @@ -91,4 +109,19 @@ public class HttpClientParams { this.readTimeOut = readTimeOut; } + public Map getHeaders() { + return headers; + } + + public void setHeaders(Map headers) { + this.headers = headers; + } + + public String getRequestMethod() { + return requestMethod; + } + + public void setRequestMethod(String requestMethod) { + this.requestMethod = requestMethod; + } } diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/common/collection/HttpConnector2.java b/dhp-common/src/main/java/eu/dnetlib/dhp/common/collection/HttpConnector2.java index dd46ab1f4..905457bcd 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/common/collection/HttpConnector2.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/common/collection/HttpConnector2.java @@ -107,7 +107,14 @@ public class HttpConnector2 { urlConn.setReadTimeout(getClientParams().getReadTimeOut() * 1000); urlConn.setConnectTimeout(getClientParams().getConnectTimeOut() * 1000); urlConn.addRequestProperty(HttpHeaders.USER_AGENT, userAgent); + urlConn.setRequestMethod(getClientParams().getRequestMethod()); + // if provided, add custom headers + if (!getClientParams().getHeaders().isEmpty()) { + for (Map.Entry headerEntry : getClientParams().getHeaders().entrySet()) { + urlConn.addRequestProperty(headerEntry.getKey(), headerEntry.getValue()); + } + } if (log.isDebugEnabled()) { logHeaderFields(urlConn); } diff --git a/dhp-workflows/dhp-swh/pom.xml b/dhp-workflows/dhp-swh/pom.xml index 501b2aef8..80fff4587 100644 --- a/dhp-workflows/dhp-swh/pom.xml +++ b/dhp-workflows/dhp-swh/pom.xml @@ -99,6 +99,12 @@ httpclient 4.5.13 + + org.datanucleus + datanucleus-core + 3.2.10 + compile + diff --git a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/ArchiveRepositoryURLs.java b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/ArchiveRepositoryURLs.java new file mode 100644 index 000000000..7b3b74d9e --- /dev/null +++ b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/ArchiveRepositoryURLs.java @@ -0,0 +1,137 @@ + +package eu.dnetlib.dhp.swh; + +import com.fasterxml.jackson.databind.ObjectMapper; +import eu.dnetlib.dhp.application.ArgumentApplicationParser; +import eu.dnetlib.dhp.common.collection.CollectorException; +import eu.dnetlib.dhp.common.collection.HttpClientParams; +import eu.dnetlib.dhp.swh.models.LastVisitData; +import eu.dnetlib.dhp.swh.utils.SWHConnection; +import eu.dnetlib.dhp.swh.utils.SWHConstants; +import eu.dnetlib.dhp.swh.utils.SWHUtils; +import org.apache.commons.cli.ParseException; +import org.apache.commons.io.IOUtils; +import org.apache.hadoop.fs.FileSystem; +import org.apache.hadoop.io.SequenceFile; +import org.apache.hadoop.io.Text; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.net.URL; +import java.util.Date; +import java.util.Optional; +import java.util.concurrent.TimeUnit; + +import static eu.dnetlib.dhp.common.Constants.REQUEST_METHOD; +import static eu.dnetlib.dhp.utils.DHPUtils.getHadoopConfiguration; + +/** + * Sends archive requests to the SWH API for those software repository URLs that are missing from them + * + * @author Serafeim Chatzopoulos + */ +public class ArchiveRepositoryURLs { + + private static final Logger log = LoggerFactory.getLogger(ArchiveRepositoryURLs.class); + private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); + + private static SWHConnection swhConnection = null; + + public static void main(final String[] args) throws IOException, ParseException { + final ArgumentApplicationParser argumentParser = new ArgumentApplicationParser( + IOUtils + .toString( + CollectLastVisitRepositoryData.class + .getResourceAsStream( + "/eu/dnetlib/dhp/swh/input_archive_repository_urls.json"))); + argumentParser.parseArgument(args); + + final String hdfsuri = argumentParser.get("namenode"); + log.info("hdfsURI: {}", hdfsuri); + + final String inputPath = argumentParser.get("lastVisitsPath"); + log.info("inputPath: {}", inputPath); + + final String outputPath = argumentParser.get("archiveRequestsPath"); + log.info("outputPath: {}", outputPath); + + final Integer archiveThresholdInDays = Integer.parseInt(argumentParser.get("archiveThresholdInDays")); + log.info("archiveThresholdInDays: {}", archiveThresholdInDays); + + final HttpClientParams clientParams = SWHUtils.getClientParams(argumentParser); + + swhConnection = new SWHConnection(clientParams); + + final FileSystem fs = FileSystem.get(getHadoopConfiguration(hdfsuri)); + + archive(fs, inputPath, outputPath, archiveThresholdInDays); + + } + + private static void archive(FileSystem fs, String inputPath, String outputPath, Integer archiveThresholdInDays) throws IOException { + + SequenceFile.Reader fr = SWHUtils.getSequenceFileReader(fs, inputPath); + SequenceFile.Writer fw = SWHUtils.getSequenceFileWriter(fs, outputPath); + + // Create key and value objects to hold data + Text repoUrl = new Text(); + Text lastVisitData = new Text(); + + // Read key-value pairs from the SequenceFile and handle appropriately + while (fr.next(repoUrl, lastVisitData)) { + + String response = handleRecord(repoUrl.toString(), lastVisitData.toString(), archiveThresholdInDays); + + // response is equal to null when no need for request + if (response != null) { + SWHUtils.appendToSequenceFile(fw, repoUrl.toString(), response); + } + + } + + // Close readers + fw.close(); + fr.close(); + } + + public static String handleRecord(String repoUrl, String lastVisitData, Integer archiveThresholdInDays) throws IOException { + System.out.println("Key: " + repoUrl + ", Value: " + lastVisitData); + + LastVisitData lastVisit = OBJECT_MAPPER.readValue(lastVisitData, LastVisitData.class); + + // perform an archive request when no repoUrl was not found in previous step + if (lastVisit.getSnapshot() != null) { + + // OR last visit was before (now() - archiveThresholdInDays) + long diffInMillies = Math.abs((new Date()).getTime() - lastVisit.getDate().getTime()); + long diffInDays = TimeUnit.DAYS.convert(diffInMillies, TimeUnit.MILLISECONDS); + + if (archiveThresholdInDays >= diffInDays) { + return null; + } + } + + // if last visit data are available, re-use version control type, else use the default one (i.e., git) + String visitType = Optional + .ofNullable(lastVisit.getType()) + .orElse(SWHConstants.DEFAULT_VISIT_TYPE); + + URL url = new URL(String.format(SWHConstants.SWH_ARCHIVE_URL, visitType, repoUrl.trim())); + System.out.println(url.toString()); + + String response; + try { + response = swhConnection.call(url.toString()); + } catch (CollectorException e) { + log.info("Error in request: {}", url); + response = "{}"; + } + + return response; + + } + + + +} diff --git a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/CollectLastVisitRepositoryData.java b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/CollectLastVisitRepositoryData.java new file mode 100644 index 000000000..c4b6412b5 --- /dev/null +++ b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/CollectLastVisitRepositoryData.java @@ -0,0 +1,120 @@ + +package eu.dnetlib.dhp.swh; + +import eu.dnetlib.dhp.application.ArgumentApplicationParser; +import eu.dnetlib.dhp.common.collection.CollectorException; +import eu.dnetlib.dhp.common.collection.HttpClientParams; +import eu.dnetlib.dhp.swh.utils.SWHConnection; +import eu.dnetlib.dhp.swh.utils.SWHConstants; +import eu.dnetlib.dhp.swh.utils.SWHUtils; +import org.apache.commons.cli.ParseException; +import org.apache.commons.io.IOUtils; +import org.apache.hadoop.fs.FSDataInputStream; +import org.apache.hadoop.fs.FileStatus; +import org.apache.hadoop.fs.FileSystem; +import org.apache.hadoop.fs.Path; +import org.apache.hadoop.io.SequenceFile; +import org.apache.hadoop.io.Text; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.URISyntaxException; +import java.net.URL; +import java.nio.charset.StandardCharsets; + +import static eu.dnetlib.dhp.utils.DHPUtils.getHadoopConfiguration; + +/** + * Given a file with software repository URLs, this class + * collects last visit data from the Software Heritage API. + * + * @author Serafeim Chatzopoulos + */ +public class CollectLastVisitRepositoryData { + + private static final Logger log = LoggerFactory.getLogger(CollectLastVisitRepositoryData.class); + private static SWHConnection swhConnection = null; + + public static void main(final String[] args) + throws IOException, ParseException, InterruptedException, URISyntaxException, CollectorException { + final ArgumentApplicationParser argumentParser = new ArgumentApplicationParser( + IOUtils + .toString( + CollectLastVisitRepositoryData.class + .getResourceAsStream( + "/eu/dnetlib/dhp/swh/input_collect_last_visit_repository_data.json"))); + argumentParser.parseArgument(args); + + log.info("Java Xmx: {}m", Runtime.getRuntime().maxMemory() / (1024 * 1024)); + + final String hdfsuri = argumentParser.get("namenode"); + log.info("hdfsURI: {}", hdfsuri); + + final String inputPath = argumentParser.get("softwareCodeRepositoryURLs"); + log.info("inputPath: {}", inputPath); + + final String outputPath = argumentParser.get("lastVisitsPath"); + log.info("outputPath: {}", outputPath); + + final HttpClientParams clientParams = SWHUtils.getClientParams(argumentParser); + + swhConnection = new SWHConnection(clientParams); + + final FileSystem fs = FileSystem.get(getHadoopConfiguration(hdfsuri)); + + collect(fs, inputPath, outputPath); + + fs.close(); + } + + private static void collect(FileSystem fs, String inputPath, String outputPath) + throws IOException { + + SequenceFile.Writer fw = SWHUtils.getSequenceFileWriter(fs, outputPath); + + // Specify the HDFS directory path you want to read + Path directoryPath = new Path(inputPath); + + // List all files in the directory + FileStatus[] partStatuses = fs.listStatus(directoryPath); + + for (FileStatus partStatus : partStatuses) { + + // Check if it's a file (not a directory) + if (partStatus.isFile()) { + handleFile(fs, partStatus.getPath(), fw); + } + + } + + fw.close(); + } + + private static void handleFile(FileSystem fs, Path partInputPath, SequenceFile.Writer fw) + throws IOException { + + BufferedReader br = SWHUtils.getFileReader(fs, partInputPath); + + String repoUrl; + while ((repoUrl = br.readLine()) != null) { + + URL url = new URL(String.format(SWHConstants.SWH_LATEST_VISIT_URL, repoUrl.trim())); + + String response; + try { + response = swhConnection.call(url.toString()); + } catch (CollectorException e) { + log.info("Error in request: {}", url); + response = "{}"; + } + + SWHUtils.appendToSequenceFile(fw, repoUrl, response); + } + + br.close(); + } + +} diff --git a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/CollectSoftwareRepositoryURLs.java b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/CollectSoftwareRepositoryURLs.java index c91f2bb8c..f93280b5e 100644 --- a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/CollectSoftwareRepositoryURLs.java +++ b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/CollectSoftwareRepositoryURLs.java @@ -1,60 +1,37 @@ package eu.dnetlib.dhp.swh; -import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkHiveSession; -import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkSession; - -import java.io.IOException; -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Optional; -import java.util.concurrent.TimeUnit; - +import eu.dnetlib.dhp.application.ArgumentApplicationParser; +import eu.dnetlib.dhp.schema.oaf.Result; import org.apache.commons.io.IOUtils; -import org.apache.http.Header; -import org.apache.http.HttpEntity; -import org.apache.http.client.methods.CloseableHttpResponse; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.impl.client.HttpClients; -import org.apache.http.util.EntityUtils; import org.apache.spark.SparkConf; -import org.apache.spark.api.java.function.FlatMapFunction; -import org.apache.spark.sql.*; import org.apache.spark.sql.Dataset; -import org.apache.spark.sql.types.DataTypes; -import org.apache.spark.sql.types.StructType; +import org.apache.spark.sql.Row; +import org.apache.spark.sql.SaveMode; +import org.apache.spark.sql.SparkSession; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.databind.ObjectMapper; +import java.io.Serializable; +import java.util.Optional; -import eu.dnetlib.dhp.application.ArgumentApplicationParser; -import eu.dnetlib.dhp.schema.common.ModelConstants; -import eu.dnetlib.dhp.schema.oaf.*; +import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkHiveSession; /** - * Creates action sets for Crossref affiliation relations inferred by BIP! + * Collects unique software repository URLs in the Graph using Hive + * + * @author Serafeim Chatzopoulos */ public class CollectSoftwareRepositoryURLs implements Serializable { private static final Logger log = LoggerFactory.getLogger(CollectSoftwareRepositoryURLs.class); - // public static final String BIP_AFFILIATIONS_CLASSID = "result:organization:bipinference"; -// public static final String BIP_AFFILIATIONS_CLASSNAME = "Affiliation relation inferred by BIP!"; -// public static final String BIP_INFERENCE_PROVENANCE = "bip:affiliation:crossref"; - private static final String DEFAULT_VISIT_TYPE = "git"; - private static final int CONCURRENT_API_CALLS = 1; - - private static final String SWH_LATEST_VISIT_URL = "https://archive.softwareheritage.org/api/1/origin/%s/visit/latest/"; public static void main(String[] args) throws Exception { String jsonConfiguration = IOUtils .toString( CollectSoftwareRepositoryURLs.class - .getResourceAsStream("/eu/dnetlib/dhp/swh/input_parameters.json")); + .getResourceAsStream("/eu/dnetlib/dhp/swh/input_collect_software_repository_urls.json")); final ArgumentApplicationParser parser = new ArgumentApplicationParser(jsonConfiguration); parser.parseArgument(args); @@ -89,7 +66,10 @@ public class CollectSoftwareRepositoryURLs implements Serializable { String queryTemplate = "SELECT distinct coderepositoryurl.value " + "FROM %s.software " + - "WHERE coderepositoryurl.value IS NOT NULL"; + "WHERE coderepositoryurl.value IS NOT NULL " + + "AND datainfo.deletedbyinference = FALSE " + + "AND datainfo.invisible = FALSE " + + "LIMIT 1000"; // TODO remove String query = String.format(queryTemplate, hiveDbName); log.info("Hive query to fetch software code URLs: {}", query); @@ -100,112 +80,6 @@ public class CollectSoftwareRepositoryURLs implements Serializable { df .write() .mode(SaveMode.Overwrite) -// .option("compression", "gzip") .csv(outputPath); } - - private static Dataset readSoftware(SparkSession spark, String inputPath) { - return spark - .read() - .json(inputPath) - .select( - new Column("codeRepositoryUrl.value").as("codeRepositoryUrl"), - new Column("dataInfo.deletedbyinference"), - new Column("dataInfo.invisible")); - } - - private static Dataset filterSoftware(Dataset softwareDF, Integer limit) { - - Dataset df = softwareDF - .where(softwareDF.col("codeRepositoryUrl").isNotNull()) - .where("deletedbyinference = false") - .where("invisible = false") - .drop("deletedbyinference") - .drop("invisible"); - -// TODO remove when done - df = df.limit(limit); - - return df; - } - - public static Dataset makeParallelRequests(SparkSession spark, Dataset softwareDF) { - // TODO replace with coalesce ? - Dataset df = softwareDF.repartition(CONCURRENT_API_CALLS); - - log.info("Number of partitions: {}", df.rdd().getNumPartitions()); - - ObjectMapper objectMapper = new ObjectMapper(); - - List collectedRows = df - .javaRDD() - // max parallelism should be equal to the number of partitions here - .mapPartitions((FlatMapFunction, Row>) partition -> { - List resultRows = new ArrayList<>(); - while (partition.hasNext()) { - Row row = partition.next(); - String url = String.format(SWH_LATEST_VISIT_URL, row.getString(0)); - -// String snapshotId = null; -// String type = null; -// String date = null; - - String responseBody = makeAPICall(url); - TimeUnit.SECONDS.sleep(1); -// Thread.sleep(500); -// if (responseBody != null) { -// LastVisitResponse visitResponse = objectMapper.readValue(responseBody, LastVisitResponse.class); -// snapshotId = visitResponse.getSnapshot(); -// type = visitResponse.getType(); -// date = visitResponse.getDate(); -// } -// resultRows.add(RowFactory.create(url, snapshotId, type, date)); - - resultRows.add(RowFactory.create(url, responseBody)); - } - return resultRows.iterator(); - - }) - .collect(); - - StructType resultSchema = new StructType() - .add("codeRepositoryUrl", DataTypes.StringType) - .add("response", DataTypes.StringType); - -// .add("snapshotId", DataTypes.StringType) -// .add("type", DataTypes.StringType) -// .add("date", DataTypes.StringType); - - // create a DataFrame from the collected rows - return spark.createDataFrame(collectedRows, resultSchema); - } - - private static String makeAPICall(String url) throws IOException { - System.out.println(java.time.LocalDateTime.now()); - - try (CloseableHttpClient httpClient = HttpClients.createDefault()) { - HttpGet httpGet = new HttpGet(url); - httpGet - .setHeader( - "Authorization", - "Bearer eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJhMTMxYTQ1My1hM2IyLTQwMTUtODQ2Ny05MzAyZjk3MTFkOGEifQ.eyJpYXQiOjE2OTQ2MzYwMjAsImp0aSI6IjkwZjdkNTNjLTQ5YTktNGFiMy1hY2E0LTcwMTViMjEyZTNjNiIsImlzcyI6Imh0dHBzOi8vYXV0aC5zb2Z0d2FyZWhlcml0YWdlLm9yZy9hdXRoL3JlYWxtcy9Tb2Z0d2FyZUhlcml0YWdlIiwiYXVkIjoiaHR0cHM6Ly9hdXRoLnNvZnR3YXJlaGVyaXRhZ2Uub3JnL2F1dGgvcmVhbG1zL1NvZnR3YXJlSGVyaXRhZ2UiLCJzdWIiOiIzMTY5OWZkNC0xNmE0LTQxOWItYTdhMi00NjI5MDY4ZjI3OWEiLCJ0eXAiOiJPZmZsaW5lIiwiYXpwIjoic3doLXdlYiIsInNlc3Npb25fc3RhdGUiOiIzMjYzMzEwMS00ZDRkLTQwMjItODU2NC1iMzNlMTJiNTE3ZDkiLCJzY29wZSI6Im9wZW5pZCBvZmZsaW5lX2FjY2VzcyBwcm9maWxlIGVtYWlsIn0.XHj1VIZu1dZ4Ej32-oU84mFmaox9cLNjXosNxwZM0Xs"); - try (CloseableHttpResponse response = httpClient.execute(httpGet)) { - int statusCode = response.getStatusLine().getStatusCode(); -// if (statusCode != 200) -// return null; - Header[] headers = response.getHeaders("X-RateLimit-Remaining"); - for (Header header : headers) { - System.out - .println( - "Key : " + header.getName() - + " ,Value : " + header.getValue()); - } - HttpEntity entity = response.getEntity(); - if (entity != null) { - return EntityUtils.toString(entity); - } - } - } - return null; - } } diff --git a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/models/LastVisitResponse.java b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/models/LastVisitData.java similarity index 81% rename from dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/models/LastVisitResponse.java rename to dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/models/LastVisitData.java index 435397590..b8cd6de6e 100644 --- a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/models/LastVisitResponse.java +++ b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/models/LastVisitData.java @@ -4,12 +4,14 @@ package eu.dnetlib.dhp.swh.models; import com.cloudera.com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import java.util.Date; + @JsonIgnoreProperties(ignoreUnknown = true) -public class LastVisitResponse { +public class LastVisitData { private String type; - private String date; + private Date date; @JsonProperty("snapshot") private String snapshotId; @@ -22,11 +24,11 @@ public class LastVisitResponse { this.type = type; } - public String getDate() { + public Date getDate() { return date; } - public void setDate(String date) { + public void setDate(Date date) { this.date = date; } diff --git a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/utils/SWHConnection.java b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/utils/SWHConnection.java new file mode 100644 index 000000000..46d512dcb --- /dev/null +++ b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/utils/SWHConnection.java @@ -0,0 +1,138 @@ + +package eu.dnetlib.dhp.swh.utils; + +import java.io.IOException; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.commons.lang3.math.NumberUtils; +import org.apache.http.Header; +import org.apache.http.HttpHeaders; +import org.apache.http.HttpStatus; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.util.EntityUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import eu.dnetlib.dhp.common.Constants; +import eu.dnetlib.dhp.common.collection.CollectorException; +import eu.dnetlib.dhp.common.collection.HttpClientParams; +import eu.dnetlib.dhp.common.collection.HttpConnector2; + +public class SWHConnection { + + private static final Logger log = LoggerFactory.getLogger(SWHConnection.class); + + CloseableHttpClient httpClient; + + HttpClientParams clientParams; + + HttpConnector2 conn; + + public SWHConnection(HttpClientParams clientParams) { + +// // force http client to NOT transform double quotes (//) to single quote (/) +// RequestConfig requestConfig = RequestConfig.custom().setNormalizeUri(false).build(); +// +// // Create an HttpClient instance +// httpClient = HttpClientBuilder +// .create() +// .setDefaultRequestConfig(requestConfig) +// .build(); +// +// this.clientParams = clientParams; + // set custom headers + Map headers = new HashMap() { + { + put(HttpHeaders.ACCEPT, "application/json"); + put(HttpHeaders.AUTHORIZATION, String.format("Bearer %s", SWHConstants.ACCESS_TOKEN)); + } + }; + + clientParams.setHeaders(headers); + + // create http connector + conn = new HttpConnector2(clientParams); + + } + + public String call(String url) throws CollectorException { + return conn.getInputSource(url); + } + + public String getLib(String url) throws IOException, CollectorException { + + // delay between requests + if (this.clientParams.getRequestDelay() > 0) { + log.info("Request delay: {}", this.clientParams.getRequestDelay()); + this.backOff(this.clientParams.getRequestDelay()); + } + + // Create an HttpGet request with the URL + HttpGet httpGet = new HttpGet(url); + httpGet.setHeader("Accept", "application/json"); + httpGet.setHeader("Authorization", String.format("Bearer %s", SWHConstants.ACCESS_TOKEN)); + + // Execute the request and get the response + try (CloseableHttpResponse response = httpClient.execute(httpGet)) { + + System.out.println(url); + + int responseCode = response.getStatusLine().getStatusCode(); + if (responseCode != HttpStatus.SC_OK) { + + } + + System.out.println(responseCode); + + List
httpHeaders = Arrays.asList(response.getAllHeaders()); + for (Header header : httpHeaders) { + System.out.println(header.getName() + ":\t" + header.getValue()); + } + + String rateRemaining = this.getRateRemaining(response); + + // back off when rate remaining limit is approaching + if (rateRemaining != null && (Integer.parseInt(rateRemaining) < 2)) { + int retryAfter = this.getRetryAfter(response); + + log.info("Rate Limit: {} - Backing off: {}", rateRemaining, retryAfter); + this.backOff(retryAfter); + } + + return EntityUtils.toString(response.getEntity()); + } + } + + private String getRateRemaining(CloseableHttpResponse response) { + Header header = response.getFirstHeader(Constants.HTTPHEADER_IETF_DRAFT_RATELIMIT_REMAINING); + if (header != null) { + return header.getValue(); + } + return null; + } + + private int getRetryAfter(CloseableHttpResponse response) { + Header header = response.getFirstHeader(HttpHeaders.RETRY_AFTER); + if (header != null) { + String retryAfter = header.getValue(); + if (NumberUtils.isCreatable(retryAfter)) { + return Integer.parseInt(retryAfter) + 10; + } + } + return 1000; + } + + private void backOff(int sleepTimeMs) throws CollectorException { + try { + Thread.sleep(sleepTimeMs); + } catch (InterruptedException e) { + throw new CollectorException(e); + } + } + +} diff --git a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/utils/SWHConstants.java b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/utils/SWHConstants.java new file mode 100644 index 000000000..1299bc805 --- /dev/null +++ b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/utils/SWHConstants.java @@ -0,0 +1,13 @@ + +package eu.dnetlib.dhp.swh.utils; + +public class SWHConstants { + public static final String SWH_LATEST_VISIT_URL = "https://archive.softwareheritage.org/api/1/origin/%s/visit/latest/"; + + public static final String SWH_ARCHIVE_URL = "https://archive.softwareheritage.org/api/1/origin/save/%s/url/%s/"; + + public static final String ACCESS_TOKEN = ""; + + public static final String DEFAULT_VISIT_TYPE = "git"; + +} diff --git a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/utils/SWHUtils.java b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/utils/SWHUtils.java new file mode 100644 index 000000000..8200e7b34 --- /dev/null +++ b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/utils/SWHUtils.java @@ -0,0 +1,94 @@ + +package eu.dnetlib.dhp.swh.utils; + +import eu.dnetlib.dhp.application.ArgumentApplicationParser; +import eu.dnetlib.dhp.common.collection.HttpClientParams; +import org.apache.hadoop.fs.FSDataInputStream; +import org.apache.hadoop.fs.FileSystem; +import org.apache.hadoop.fs.Path; +import org.apache.hadoop.io.SequenceFile; +import org.apache.hadoop.io.Text; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; +import java.util.Optional; + +import static eu.dnetlib.dhp.common.Constants.*; + +public class SWHUtils { + + private static final Logger log = LoggerFactory.getLogger(SWHUtils.class); + + public static HttpClientParams getClientParams(ArgumentApplicationParser argumentParser) { + + final HttpClientParams clientParams = new HttpClientParams(); + clientParams + .setMaxNumberOfRetry( + Optional + .ofNullable(argumentParser.get(MAX_NUMBER_OF_RETRY)) + .map(Integer::parseInt) + .orElse(HttpClientParams._maxNumberOfRetry)); + log.info("maxNumberOfRetry is {}", clientParams.getMaxNumberOfRetry()); + + clientParams + .setRequestDelay( + Optional + .ofNullable(argumentParser.get(REQUEST_DELAY)) + .map(Integer::parseInt) + .orElse(HttpClientParams._requestDelay)); + log.info("requestDelay is {}", clientParams.getRequestDelay()); + + clientParams + .setRetryDelay( + Optional + .ofNullable(argumentParser.get(RETRY_DELAY)) + .map(Integer::parseInt) + .orElse(HttpClientParams._retryDelay)); + log.info("retryDelay is {}", clientParams.getRetryDelay()); + + clientParams + .setRequestMethod( + Optional + .ofNullable(argumentParser.get(REQUEST_METHOD)) + .orElse(HttpClientParams._requestMethod)); + log.info("requestMethod is {}", clientParams.getRequestMethod()); + + return clientParams; + } + + public static BufferedReader getFileReader(FileSystem fs, Path inputPath) throws IOException { + FSDataInputStream inputStream = fs.open(inputPath); + return new BufferedReader( + new InputStreamReader(inputStream, StandardCharsets.UTF_8)); + } + + public static SequenceFile.Writer getSequenceFileWriter(FileSystem fs, String outputPath) throws IOException { + return SequenceFile + .createWriter( + fs.getConf(), + SequenceFile.Writer.file(new Path(outputPath)), + SequenceFile.Writer.keyClass(Text.class), + SequenceFile.Writer.valueClass(Text.class)); + } + + public static SequenceFile.Reader getSequenceFileReader(FileSystem fs, String inputPath) throws IOException { + Path filePath = new Path(inputPath); + SequenceFile.Reader.Option fileOption = SequenceFile.Reader.file(filePath); + + return new SequenceFile.Reader(fs.getConf(), fileOption); + } + + public static void appendToSequenceFile(SequenceFile.Writer fw, String keyStr, String valueStr) throws IOException { + Text key = new Text(); + key.set(keyStr); + + Text value = new Text(); + value.set(valueStr); + + fw.append(key, value); + } +} diff --git a/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/input_archive_repository_urls.json b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/input_archive_repository_urls.json new file mode 100644 index 000000000..5ec481305 --- /dev/null +++ b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/input_archive_repository_urls.json @@ -0,0 +1,26 @@ +[ + { + "paramName": "n", + "paramLongName": "namenode", + "paramDescription": "the Name Node URI", + "paramRequired": true + }, + { + "paramName": "lv", + "paramLongName": "lastVisitsPath", + "paramDescription": "the URL where to store last visits data", + "paramRequired": true + }, + { + "paramName": "rqd", + "paramLongName": "requestDelay", + "paramDescription": "the delay (ms) between requests", + "paramRequired": false + }, + { + "paramName": "atid", + "paramLongName": "archiveThresholdInDays", + "paramDescription": "the thershold (in days) required to issue an archive request", + "paramRequired": false + } +] \ No newline at end of file diff --git a/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/input_collect_last_visit_repository_data.json b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/input_collect_last_visit_repository_data.json new file mode 100644 index 000000000..6c59123be --- /dev/null +++ b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/input_collect_last_visit_repository_data.json @@ -0,0 +1,38 @@ +[ + { + "paramName": "n", + "paramLongName": "namenode", + "paramDescription": "the Name Node URI", + "paramRequired": true + }, + { + "paramName": "scr", + "paramLongName": "softwareCodeRepositoryURLs", + "paramDescription": "the URL from where to read software repository URLs", + "paramRequired": true + }, + { + "paramName": "lv", + "paramLongName": "lastVisitsPath", + "paramDescription": "the URL where to store last visits data", + "paramRequired": true + }, + { + "paramName": "mnr", + "paramLongName": "maxNumberOfRetry", + "paramDescription": "the maximum number of admitted connection retries", + "paramRequired": false + }, + { + "paramName": "rqd", + "paramLongName": "requestDelay", + "paramDescription": "the delay (ms) between requests", + "paramRequired": false + }, + { + "paramName": "rtd", + "paramLongName": "retryDelay", + "paramDescription": "the delay (ms) between retries", + "paramRequired": false + } +] \ No newline at end of file diff --git a/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/input_parameters.json b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/input_collect_software_repository_urls.json similarity index 96% rename from dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/input_parameters.json rename to dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/input_collect_software_repository_urls.json index dd5432b93..6e98c7673 100644 --- a/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/input_parameters.json +++ b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/input_collect_software_repository_urls.json @@ -6,7 +6,7 @@ "paramRequired": false }, { - "paramName": "ip", + "paramName": "scr", "paramLongName": "softwareCodeRepositoryURLs", "paramDescription": "the URL where to store software repository URLs", "paramRequired": true diff --git a/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/job.properties b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/job.properties index a63343aed..e2c2af852 100644 --- a/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/job.properties +++ b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/job.properties @@ -1,25 +1,11 @@ # hive hiveDbName=openaire_prod_20230914 -hiveMetastoreUris=thrift://iis-cdh5-test-m3.ocean.icm.edu.pl:9083 -# oozie -oozie.action.sharelib.for.spark=spark2 -oozie.use.system.libpath=true -oozie.wf.application.path=${oozieTopWfApplicationPath} -oozie.wf.application.path=${oozieTopWfApplicationPath} -oozieActionShareLibForSpark2=spark2 - -# spark -spark2EventLogDir=/user/spark/spark2ApplicationHistory -spark2ExtraListeners=com.cloudera.spark.lineage.NavigatorAppListener -spark2SqlQueryExecutionListeners=com.cloudera.spark.lineage.NavigatorQueryListener -spark2YarnHistoryServerAddress=http://iis-cdh5-test-gw.ocean.icm.edu.pl:18089 sparkSqlWarehouseDir=/user/hive/warehouse -# misc -wfAppPath=${oozieTopWfApplicationPath} -resourceManager=http://iis-cdh5-test-m2.ocean.icm.edu.pl:8088/cluster +# input/output files +softwareCodeRepositoryURLs=${workingDir}/1_code_repo_urls.csv +lastVisitsPath=${workingDir}/2_last_visits.seq +archiveRequestsPath=${workingDir}/3_archive_requests.seq -# custom params -softwareCodeRepositoryURLs=${workingDir}/code_repo_urls.csv resume=collect-software-repository-urls diff --git a/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/oozie_app/config-default.xml b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/oozie_app/config-default.xml new file mode 100644 index 000000000..7873d595e --- /dev/null +++ b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/oozie_app/config-default.xml @@ -0,0 +1,50 @@ + + + jobTracker + yarnRM + + + nameNode + hdfs://nameservice1 + + + oozie.use.system.libpath + true + + + oozie.action.sharelib.for.spark + spark2 + + + hiveMetastoreUris + thrift://iis-cdh5-test-m3.ocean.icm.edu.pl:9083 + + + spark2YarnHistoryServerAddress + http://iis-cdh5-test-gw.ocean.icm.edu.pl:18089 + + + spark2EventLogDir + /user/spark/spark2ApplicationHistory + + + spark2ExtraListeners + "com.cloudera.spark.lineage.NavigatorAppListener" + + + spark2SqlQueryExecutionListeners + "com.cloudera.spark.lineage.NavigatorQueryListener" + + + oozieActionShareLibForSpark2 + spark2 + + + resourceManager + http://iis-cdh5-test-m2.ocean.icm.edu.pl:8088/cluster + + + oozie.launcher.mapreduce.user.classpath.first + true + + \ No newline at end of file diff --git a/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/oozie_app/workflow.xml b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/oozie_app/workflow.xml index 9832e5f26..5062d562b 100644 --- a/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/oozie_app/workflow.xml @@ -1,59 +1,31 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + hiveDbName + The name of the Hive DB to be used + + + softwareCodeRepositoryURLs + The path in the HDSF to save the software repository URLs + + + resume + Variable that indicates the step to start from + + + ${jobTracker} ${nameNode} + + + oozie.action.sharelib.for.spark + ${oozieActionShareLibForSpark2} + + @@ -90,8 +62,43 @@ --softwareCodeRepositoryURLs${softwareCodeRepositoryURLs} --hiveDbName${hiveDbName} --hiveMetastoreUris${hiveMetastoreUris} - + + + + + + + eu.dnetlib.dhp.swh.CollectLastVisitRepositoryData + + --namenode${nameNode} + --softwareCodeRepositoryURLs${softwareCodeRepositoryURLs} + --lastVisitsPath${lastVisitsPath} + + --maxNumberOfRetry2 + --requestDelay0 + --retryDelay1 + --requestMethodGET + + + + + + + + + eu.dnetlib.dhp.swh.ArchiveRepositoryURLs + + --namenode${nameNode} + --lastVisitsPath${lastVisitsPath} + --archiveThresholdInDays365 + + --maxNumberOfRetry2 + --requestDelay0 + --retryDelay1 + --requestMethodPOST + + diff --git a/dhp-workflows/dhp-swh/src/test/java/eu/dnetlib/dhp/swh/ArchiveRepositoryURLsTest.java b/dhp-workflows/dhp-swh/src/test/java/eu/dnetlib/dhp/swh/ArchiveRepositoryURLsTest.java new file mode 100644 index 000000000..06e40ae14 --- /dev/null +++ b/dhp-workflows/dhp-swh/src/test/java/eu/dnetlib/dhp/swh/ArchiveRepositoryURLsTest.java @@ -0,0 +1,35 @@ +package eu.dnetlib.dhp.swh; + +import eu.dnetlib.dhp.swh.utils.SWHUtils; +import org.apache.hadoop.fs.FileSystem; +import org.junit.jupiter.api.Test; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.util.Arrays; + +public class ArchiveRepositoryURLsTest { + + @Test + void testArchive() throws IOException { + String inputPath = getClass() + .getResource("/eu/dnetlib/dhp/swh/lastVisitDataToArchive.csv") + .getPath(); + + File file = new File(inputPath); + FileReader fr = new FileReader(file); + BufferedReader br = new BufferedReader(fr); //creates a buffering character input stream + + String line; + while((line = br.readLine()) != null) { + String[] tokens = line.split("\t"); + + String response = ArchiveRepositoryURLs.handleRecord(tokens[0], tokens[1], 365); + System.out.println(tokens[0] + "\t" + response); + System.out.println(); + } + fr.close(); + } +} diff --git a/dhp-workflows/dhp-swh/src/test/java/eu/dnetlib/dhp/swh/SWHConnectionTest.java b/dhp-workflows/dhp-swh/src/test/java/eu/dnetlib/dhp/swh/SWHConnectionTest.java new file mode 100644 index 000000000..d69f6ff1b --- /dev/null +++ b/dhp-workflows/dhp-swh/src/test/java/eu/dnetlib/dhp/swh/SWHConnectionTest.java @@ -0,0 +1,57 @@ + +package eu.dnetlib.dhp.swh; + +import eu.dnetlib.dhp.common.collection.CollectorException; +import eu.dnetlib.dhp.common.collection.HttpClientParams; +import eu.dnetlib.dhp.swh.utils.SWHConnection; +import eu.dnetlib.dhp.swh.utils.SWHConstants; +import org.junit.jupiter.api.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +//import org.apache.hadoop.hdfs.MiniDFSCluster; + +public class SWHConnectionTest { + private static final Logger log = LoggerFactory.getLogger(SWHConnectionTest.class); + + @Test + void testGetCall() throws IOException { + + HttpClientParams clientParams = new HttpClientParams(); + clientParams.setRequestMethod("GET"); + + SWHConnection swhConnection = new SWHConnection(clientParams); + + String repoUrl = "https://github.com/stanford-futuredata/FAST"; + URL url = new URL(String.format(SWHConstants.SWH_LATEST_VISIT_URL, repoUrl)); + String response = null; + try { + response = swhConnection.call(url.toString()); + } catch (CollectorException e) { + System.out.println("Error in request: " + url); + } + System.out.println(response); + } + + @Test + void testPostCall() throws MalformedURLException { + HttpClientParams clientParams = new HttpClientParams(); + clientParams.setRequestMethod("POST"); + + SWHConnection swhConnection = new SWHConnection(clientParams); + + String repoUrl = "https://github.com/stanford-futuredata/FAST"; + URL url = new URL(String.format(SWHConstants.SWH_ARCHIVE_URL, SWHConstants.DEFAULT_VISIT_TYPE, repoUrl)); + String response = null; + try { + response = swhConnection.call(url.toString()); + } catch (CollectorException e) { + System.out.println("Error in request: " + url); + } + System.out.println(response); + } +} diff --git a/dhp-workflows/dhp-swh/src/test/resources/eu/dnetlib/dhp/swh/lastVisitDataToArchive.csv b/dhp-workflows/dhp-swh/src/test/resources/eu/dnetlib/dhp/swh/lastVisitDataToArchive.csv new file mode 100644 index 000000000..6477dd62a --- /dev/null +++ b/dhp-workflows/dhp-swh/src/test/resources/eu/dnetlib/dhp/swh/lastVisitDataToArchive.csv @@ -0,0 +1,6 @@ +https://github.com/bioinsilico/BIPSPI {"origin":"https://github.com/bioinsilico/BIPSPI","visit":1,"date":"2020-03-18T14:50:21.541822+00:00","status":"full","snapshot":"c6c69d2cd73ce89811448da5f031611df6f63bdb","type":"git","metadata":{},"origin_url":"https://archive.softwareheritage.org/api/1/origin/https://github.com/bioinsilico/BIPSPI/get/","snapshot_url":"https://archive.softwareheritage.org/api/1/snapshot/c6c69d2cd73ce89811448da5f031611df6f63bdb/"} +https://github.com/mloop/kdiff-type1-error-rate/blob/master/analysis/simulation.R {} +https://github.com/schwanbeck/YSMR {"origin":"https://github.com/schwanbeck/YSMR","visit":6,"date":"2023-08-02T15:25:02.650676+00:00","status":"full","snapshot":"a9d1c5f0bca2def198b89f65bc9f7da3be8439ed","type":"git","metadata":{},"origin_url":"https://archive.softwareheritage.org/api/1/origin/https://github.com/schwanbeck/YSMR/get/","snapshot_url":"https://archive.softwareheritage.org/api/1/snapshot/a9d1c5f0bca2def198b89f65bc9f7da3be8439ed/"} +https://github.com/lvclark/TASSELGBS_combine {"origin":"https://github.com/lvclark/TASSELGBS_combine","visit":1,"date":"2020-04-12T20:44:09.405589+00:00","status":"full","snapshot":"ffa6fefd3f5becefbea9fe0e6d5d93859c95c071","type":"git","metadata":{},"origin_url":"https://archive.softwareheritage.org/api/1/origin/https://github.com/lvclark/TASSELGBS_combine/get/","snapshot_url":"https://archive.softwareheritage.org/api/1/snapshot/ffa6fefd3f5becefbea9fe0e6d5d93859c95c071/"} +https://github.com/PRIDE-Toolsuite/inspector-example-files {"origin":"https://github.com/PRIDE-Toolsuite/inspector-example-files","visit":12,"date":"2021-01-25T08:54:13.394674+00:00","status":"full","snapshot":"0b56eb0ad07cf778df6dabefc4b73636e0ae8b37","type":"git","metadata":{},"origin_url":"https://archive.softwareheritage.org/api/1/origin/https://github.com/PRIDE-Toolsuite/inspector-example-files/get/","snapshot_url":"https://archive.softwareheritage.org/api/1/snapshot/0b56eb0ad07cf778df6dabefc4b73636e0ae8b37/"} +https://bitbucket.org/matwey/chelyabinsk {"origin":"https://bitbucket.org/matwey/chelyabinsk","visit":6,"date":"2021-09-24T19:32:43.322909+00:00","status":"full","snapshot":"215913858c3ee0e61e1aaea18241c5ee006da1b0","type":"hg","metadata":{},"origin_url":"https://archive.softwareheritage.org/api/1/origin/https://bitbucket.org/matwey/chelyabinsk/get/","snapshot_url":"https://archive.softwareheritage.org/api/1/snapshot/215913858c3ee0e61e1aaea18241c5ee006da1b0/"} \ No newline at end of file From ab0d70691cf4c21b886142b9a5d2b7327d6445d5 Mon Sep 17 00:00:00 2001 From: Serafeim Chatzopoulos Date: Thu, 28 Sep 2023 20:56:18 +0300 Subject: [PATCH 286/449] Add step for archiving repoUrls to SWH --- .../common/collection/HttpClientParams.java | 4 +- .../dhp/swh/ArchiveRepositoryURLs.java | 99 +++++++++++++------ .../swh/CollectLastVisitRepositoryData.java | 31 +++--- .../swh/CollectSoftwareRepositoryURLs.java | 15 +-- .../dnetlib/dhp/swh/models/LastVisitData.java | 22 +++-- .../dnetlib/dhp/swh/utils/SWHConstants.java | 4 +- .../eu/dnetlib/dhp/swh/utils/SWHUtils.java | 39 ++++---- .../swh/input_archive_repository_urls.json | 24 +++++ ...ut_collect_last_visit_repository_data.json | 6 ++ .../eu/dnetlib/dhp/swh/job.properties | 4 + .../eu/dnetlib/dhp/swh/oozie_app/workflow.xml | 35 +++++-- .../dhp/swh/ArchiveRepositoryURLsTest.java | 45 +++++---- .../eu/dnetlib/dhp/swh/SWHConnectionTest.java | 19 ++-- .../dhp/swh/lastVisitDataToArchive.csv | 1 + 14 files changed, 230 insertions(+), 118 deletions(-) diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/common/collection/HttpClientParams.java b/dhp-common/src/main/java/eu/dnetlib/dhp/common/collection/HttpClientParams.java index 55f9ceb8b..d26d9c0e9 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/common/collection/HttpClientParams.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/common/collection/HttpClientParams.java @@ -53,9 +53,9 @@ public class HttpClientParams { */ private String requestMethod; - public HttpClientParams() { - this(_maxNumberOfRetry, _requestDelay, _retryDelay, _connectTimeOut, _readTimeOut, new HashMap<>(), _requestMethod); + this(_maxNumberOfRetry, _requestDelay, _retryDelay, _connectTimeOut, _readTimeOut, new HashMap<>(), + _requestMethod); } public HttpClientParams(int maxNumberOfRetry, int requestDelay, int retryDelay, int connectTimeOut, diff --git a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/ArchiveRepositoryURLs.java b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/ArchiveRepositoryURLs.java index 7b3b74d9e..38db27baf 100644 --- a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/ArchiveRepositoryURLs.java +++ b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/ArchiveRepositoryURLs.java @@ -1,14 +1,16 @@ package eu.dnetlib.dhp.swh; -import com.fasterxml.jackson.databind.ObjectMapper; -import eu.dnetlib.dhp.application.ArgumentApplicationParser; -import eu.dnetlib.dhp.common.collection.CollectorException; -import eu.dnetlib.dhp.common.collection.HttpClientParams; -import eu.dnetlib.dhp.swh.models.LastVisitData; -import eu.dnetlib.dhp.swh.utils.SWHConnection; -import eu.dnetlib.dhp.swh.utils.SWHConstants; -import eu.dnetlib.dhp.swh.utils.SWHUtils; +import static eu.dnetlib.dhp.common.Constants.REQUEST_METHOD; +import static eu.dnetlib.dhp.utils.DHPUtils.getHadoopConfiguration; + +import java.io.IOException; +import java.net.URL; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Optional; +import java.util.concurrent.TimeUnit; + import org.apache.commons.cli.ParseException; import org.apache.commons.io.IOUtils; import org.apache.hadoop.fs.FileSystem; @@ -17,14 +19,17 @@ import org.apache.hadoop.io.Text; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.IOException; -import java.net.URL; -import java.util.Date; -import java.util.Optional; -import java.util.concurrent.TimeUnit; +import com.fasterxml.jackson.databind.ObjectMapper; -import static eu.dnetlib.dhp.common.Constants.REQUEST_METHOD; -import static eu.dnetlib.dhp.utils.DHPUtils.getHadoopConfiguration; +import eu.dnetlib.dhp.application.ArgumentApplicationParser; +import eu.dnetlib.dhp.common.collection.CollectorException; +import eu.dnetlib.dhp.common.collection.HttpClientParams; +import eu.dnetlib.dhp.schema.common.ModelSupport; +import eu.dnetlib.dhp.schema.oaf.utils.GraphCleaningFunctions; +import eu.dnetlib.dhp.swh.models.LastVisitData; +import eu.dnetlib.dhp.swh.utils.SWHConnection; +import eu.dnetlib.dhp.swh.utils.SWHConstants; +import eu.dnetlib.dhp.swh.utils.SWHUtils; /** * Sends archive requests to the SWH API for those software repository URLs that are missing from them @@ -69,7 +74,8 @@ public class ArchiveRepositoryURLs { } - private static void archive(FileSystem fs, String inputPath, String outputPath, Integer archiveThresholdInDays) throws IOException { + private static void archive(FileSystem fs, String inputPath, String outputPath, Integer archiveThresholdInDays) + throws IOException { SequenceFile.Reader fr = SWHUtils.getSequenceFileReader(fs, inputPath); SequenceFile.Writer fw = SWHUtils.getSequenceFileWriter(fs, outputPath); @@ -81,7 +87,13 @@ public class ArchiveRepositoryURLs { // Read key-value pairs from the SequenceFile and handle appropriately while (fr.next(repoUrl, lastVisitData)) { - String response = handleRecord(repoUrl.toString(), lastVisitData.toString(), archiveThresholdInDays); + String response = null; + try { + response = handleRecord(repoUrl.toString(), lastVisitData.toString(), archiveThresholdInDays); + } catch (java.text.ParseException e) { + log.error("Could not handle record with repo Url: {}", repoUrl.toString()); + throw new RuntimeException(e); + } // response is equal to null when no need for request if (response != null) { @@ -95,43 +107,68 @@ public class ArchiveRepositoryURLs { fr.close(); } - public static String handleRecord(String repoUrl, String lastVisitData, Integer archiveThresholdInDays) throws IOException { - System.out.println("Key: " + repoUrl + ", Value: " + lastVisitData); + public static String handleRecord(String repoUrl, String lastVisitData, Integer archiveThresholdInDays) + throws IOException, java.text.ParseException { + + log.info("{ Key: {}, Value: {} }", repoUrl, lastVisitData); LastVisitData lastVisit = OBJECT_MAPPER.readValue(lastVisitData, LastVisitData.class); - // perform an archive request when no repoUrl was not found in previous step + // a previous attempt for archival has been made, and repository URL was not found + // avoid performing the same archive request again + if (lastVisit.getType() != null && + lastVisit.getType().equals(SWHConstants.VISIT_STATUS_NOT_FOUND)) { + + log.info("Avoid request -- previous archive request returned NOT_FOUND"); + return null; + } + + // if we have last visit data if (lastVisit.getSnapshot() != null) { - // OR last visit was before (now() - archiveThresholdInDays) - long diffInMillies = Math.abs((new Date()).getTime() - lastVisit.getDate().getTime()); - long diffInDays = TimeUnit.DAYS.convert(diffInMillies, TimeUnit.MILLISECONDS); + String cleanDate = GraphCleaningFunctions.cleanDate(lastVisit.getDate()); - if (archiveThresholdInDays >= diffInDays) { - return null; + // and the last visit date can be parsed + if (cleanDate != null) { + + SimpleDateFormat formatter = new SimpleDateFormat(ModelSupport.DATE_FORMAT); + Date lastVisitDate = formatter.parse(cleanDate); + + // OR last visit time < (now() - archiveThresholdInDays) + long diffInMillies = Math.abs((new Date()).getTime() - lastVisitDate.getTime()); + long diffInDays = TimeUnit.DAYS.convert(diffInMillies, TimeUnit.MILLISECONDS); + log.info("Date diff from now (in days): {}", diffInDays); + + // do not perform a request, if the last visit date is no older than $archiveThresholdInDays + if (archiveThresholdInDays >= diffInDays) { + log.info("Avoid request -- no older than {} days", archiveThresholdInDays); + return null; + } } } - // if last visit data are available, re-use version control type, else use the default one (i.e., git) + // ELSE perform an archive request + log.info("Perform archive request for: {}", repoUrl); + + // if last visit data are available, re-use version control type, + // else use the default one (i.e., git) String visitType = Optional .ofNullable(lastVisit.getType()) .orElse(SWHConstants.DEFAULT_VISIT_TYPE); URL url = new URL(String.format(SWHConstants.SWH_ARCHIVE_URL, visitType, repoUrl.trim())); - System.out.println(url.toString()); + + log.info("Sending archive request: {}", url); String response; try { response = swhConnection.call(url.toString()); } catch (CollectorException e) { - log.info("Error in request: {}", url); + log.error("Error in request: {}", url); response = "{}"; } return response; - } - - } diff --git a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/CollectLastVisitRepositoryData.java b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/CollectLastVisitRepositoryData.java index c4b6412b5..9386b6876 100644 --- a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/CollectLastVisitRepositoryData.java +++ b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/CollectLastVisitRepositoryData.java @@ -1,12 +1,15 @@ package eu.dnetlib.dhp.swh; -import eu.dnetlib.dhp.application.ArgumentApplicationParser; -import eu.dnetlib.dhp.common.collection.CollectorException; -import eu.dnetlib.dhp.common.collection.HttpClientParams; -import eu.dnetlib.dhp.swh.utils.SWHConnection; -import eu.dnetlib.dhp.swh.utils.SWHConstants; -import eu.dnetlib.dhp.swh.utils.SWHUtils; +import static eu.dnetlib.dhp.utils.DHPUtils.getHadoopConfiguration; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.URISyntaxException; +import java.net.URL; +import java.nio.charset.StandardCharsets; + import org.apache.commons.cli.ParseException; import org.apache.commons.io.IOUtils; import org.apache.hadoop.fs.FSDataInputStream; @@ -18,14 +21,12 @@ import org.apache.hadoop.io.Text; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.net.URISyntaxException; -import java.net.URL; -import java.nio.charset.StandardCharsets; - -import static eu.dnetlib.dhp.utils.DHPUtils.getHadoopConfiguration; +import eu.dnetlib.dhp.application.ArgumentApplicationParser; +import eu.dnetlib.dhp.common.collection.CollectorException; +import eu.dnetlib.dhp.common.collection.HttpClientParams; +import eu.dnetlib.dhp.swh.utils.SWHConnection; +import eu.dnetlib.dhp.swh.utils.SWHConstants; +import eu.dnetlib.dhp.swh.utils.SWHUtils; /** * Given a file with software repository URLs, this class @@ -107,7 +108,7 @@ public class CollectLastVisitRepositoryData { try { response = swhConnection.call(url.toString()); } catch (CollectorException e) { - log.info("Error in request: {}", url); + log.error("Error in request: {}", url); response = "{}"; } diff --git a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/CollectSoftwareRepositoryURLs.java b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/CollectSoftwareRepositoryURLs.java index f93280b5e..c1a0fafa5 100644 --- a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/CollectSoftwareRepositoryURLs.java +++ b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/CollectSoftwareRepositoryURLs.java @@ -1,8 +1,11 @@ package eu.dnetlib.dhp.swh; -import eu.dnetlib.dhp.application.ArgumentApplicationParser; -import eu.dnetlib.dhp.schema.oaf.Result; +import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkHiveSession; + +import java.io.Serializable; +import java.util.Optional; + import org.apache.commons.io.IOUtils; import org.apache.spark.SparkConf; import org.apache.spark.sql.Dataset; @@ -12,10 +15,8 @@ import org.apache.spark.sql.SparkSession; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.Serializable; -import java.util.Optional; - -import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkHiveSession; +import eu.dnetlib.dhp.application.ArgumentApplicationParser; +import eu.dnetlib.dhp.schema.oaf.Result; /** * Collects unique software repository URLs in the Graph using Hive @@ -69,7 +70,7 @@ public class CollectSoftwareRepositoryURLs implements Serializable { "WHERE coderepositoryurl.value IS NOT NULL " + "AND datainfo.deletedbyinference = FALSE " + "AND datainfo.invisible = FALSE " + - "LIMIT 1000"; // TODO remove + "LIMIT 1000"; String query = String.format(queryTemplate, hiveDbName); log.info("Hive query to fetch software code URLs: {}", query); diff --git a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/models/LastVisitData.java b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/models/LastVisitData.java index b8cd6de6e..eaff5ce02 100644 --- a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/models/LastVisitData.java +++ b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/models/LastVisitData.java @@ -1,21 +1,23 @@ package eu.dnetlib.dhp.swh.models; +import java.util.Date; + +import com.cloudera.com.fasterxml.jackson.annotation.JsonFormat; import com.cloudera.com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import java.util.Date; - @JsonIgnoreProperties(ignoreUnknown = true) public class LastVisitData { private String type; - - private Date date; + private String date; @JsonProperty("snapshot") private String snapshotId; + private String status; + public String getType() { return type; } @@ -24,11 +26,11 @@ public class LastVisitData { this.type = type; } - public Date getDate() { + public String getDate() { return date; } - public void setDate(Date date) { + public void setDate(String date) { this.date = date; } @@ -39,4 +41,12 @@ public class LastVisitData { public void setSnapshot(String snapshotId) { this.snapshotId = snapshotId; } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } } diff --git a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/utils/SWHConstants.java b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/utils/SWHConstants.java index 1299bc805..f58705188 100644 --- a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/utils/SWHConstants.java +++ b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/utils/SWHConstants.java @@ -6,8 +6,10 @@ public class SWHConstants { public static final String SWH_ARCHIVE_URL = "https://archive.softwareheritage.org/api/1/origin/save/%s/url/%s/"; - public static final String ACCESS_TOKEN = ""; + public static final String ACCESS_TOKEN = "eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJhMTMxYTQ1My1hM2IyLTQwMTUtODQ2Ny05MzAyZjk3MTFkOGEifQ.eyJpYXQiOjE2OTQ2MzYwMjAsImp0aSI6IjkwZjdkNTNjLTQ5YTktNGFiMy1hY2E0LTcwMTViMjEyZTNjNiIsImlzcyI6Imh0dHBzOi8vYXV0aC5zb2Z0d2FyZWhlcml0YWdlLm9yZy9hdXRoL3JlYWxtcy9Tb2Z0d2FyZUhlcml0YWdlIiwiYXVkIjoiaHR0cHM6Ly9hdXRoLnNvZnR3YXJlaGVyaXRhZ2Uub3JnL2F1dGgvcmVhbG1zL1NvZnR3YXJlSGVyaXRhZ2UiLCJzdWIiOiIzMTY5OWZkNC0xNmE0LTQxOWItYTdhMi00NjI5MDY4ZjI3OWEiLCJ0eXAiOiJPZmZsaW5lIiwiYXpwIjoic3doLXdlYiIsInNlc3Npb25fc3RhdGUiOiIzMjYzMzEwMS00ZDRkLTQwMjItODU2NC1iMzNlMTJiNTE3ZDkiLCJzY29wZSI6Im9wZW5pZCBvZmZsaW5lX2FjY2VzcyBwcm9maWxlIGVtYWlsIn0.XHj1VIZu1dZ4Ej32-oU84mFmaox9cLNjXosNxwZM0Xs"; public static final String DEFAULT_VISIT_TYPE = "git"; + public static final String VISIT_STATUS_NOT_FOUND = "not_found"; + } diff --git a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/utils/SWHUtils.java b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/utils/SWHUtils.java index 8200e7b34..405ce51e4 100644 --- a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/utils/SWHUtils.java +++ b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/utils/SWHUtils.java @@ -1,8 +1,14 @@ package eu.dnetlib.dhp.swh.utils; -import eu.dnetlib.dhp.application.ArgumentApplicationParser; -import eu.dnetlib.dhp.common.collection.HttpClientParams; +import static eu.dnetlib.dhp.common.Constants.*; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; +import java.util.Optional; + import org.apache.hadoop.fs.FSDataInputStream; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; @@ -11,13 +17,8 @@ import org.apache.hadoop.io.Text; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.nio.charset.StandardCharsets; -import java.util.Optional; - -import static eu.dnetlib.dhp.common.Constants.*; +import eu.dnetlib.dhp.application.ArgumentApplicationParser; +import eu.dnetlib.dhp.common.collection.HttpClientParams; public class SWHUtils { @@ -51,10 +52,10 @@ public class SWHUtils { log.info("retryDelay is {}", clientParams.getRetryDelay()); clientParams - .setRequestMethod( - Optional - .ofNullable(argumentParser.get(REQUEST_METHOD)) - .orElse(HttpClientParams._requestMethod)); + .setRequestMethod( + Optional + .ofNullable(argumentParser.get(REQUEST_METHOD)) + .orElse(HttpClientParams._requestMethod)); log.info("requestMethod is {}", clientParams.getRequestMethod()); return clientParams; @@ -63,16 +64,16 @@ public class SWHUtils { public static BufferedReader getFileReader(FileSystem fs, Path inputPath) throws IOException { FSDataInputStream inputStream = fs.open(inputPath); return new BufferedReader( - new InputStreamReader(inputStream, StandardCharsets.UTF_8)); + new InputStreamReader(inputStream, StandardCharsets.UTF_8)); } public static SequenceFile.Writer getSequenceFileWriter(FileSystem fs, String outputPath) throws IOException { return SequenceFile - .createWriter( - fs.getConf(), - SequenceFile.Writer.file(new Path(outputPath)), - SequenceFile.Writer.keyClass(Text.class), - SequenceFile.Writer.valueClass(Text.class)); + .createWriter( + fs.getConf(), + SequenceFile.Writer.file(new Path(outputPath)), + SequenceFile.Writer.keyClass(Text.class), + SequenceFile.Writer.valueClass(Text.class)); } public static SequenceFile.Reader getSequenceFileReader(FileSystem fs, String inputPath) throws IOException { diff --git a/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/input_archive_repository_urls.json b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/input_archive_repository_urls.json index 5ec481305..ce80d6f4a 100644 --- a/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/input_archive_repository_urls.json +++ b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/input_archive_repository_urls.json @@ -11,12 +11,36 @@ "paramDescription": "the URL where to store last visits data", "paramRequired": true }, + { + "paramName": "arp", + "paramLongName": "archiveRequestsPath", + "paramDescription": "the URL where to store the responses of the archive requests", + "paramRequired": true + }, + { + "paramName": "mnr", + "paramLongName": "maxNumberOfRetry", + "paramDescription": "the maximum number of admitted connection retries", + "paramRequired": false + }, { "paramName": "rqd", "paramLongName": "requestDelay", "paramDescription": "the delay (ms) between requests", "paramRequired": false }, + { + "paramName": "rtd", + "paramLongName": "retryDelay", + "paramDescription": "the delay (ms) between retries", + "paramRequired": false + }, + { + "paramName": "rm", + "paramLongName": "requestMethod", + "paramDescription": "the method of the requests to perform", + "paramRequired": false + }, { "paramName": "atid", "paramLongName": "archiveThresholdInDays", diff --git a/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/input_collect_last_visit_repository_data.json b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/input_collect_last_visit_repository_data.json index 6c59123be..8bf41f0ae 100644 --- a/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/input_collect_last_visit_repository_data.json +++ b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/input_collect_last_visit_repository_data.json @@ -34,5 +34,11 @@ "paramLongName": "retryDelay", "paramDescription": "the delay (ms) between retries", "paramRequired": false + }, + { + "paramName": "rm", + "paramLongName": "requestMethod", + "paramDescription": "the method of the requests to perform", + "paramRequired": false } ] \ No newline at end of file diff --git a/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/job.properties b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/job.properties index e2c2af852..4cc1c1e25 100644 --- a/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/job.properties +++ b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/job.properties @@ -8,4 +8,8 @@ softwareCodeRepositoryURLs=${workingDir}/1_code_repo_urls.csv lastVisitsPath=${workingDir}/2_last_visits.seq archiveRequestsPath=${workingDir}/3_archive_requests.seq +maxNumberOfRetry=2 +retryDelay=1 +requestDelay=100 + resume=collect-software-repository-urls diff --git a/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/oozie_app/workflow.xml b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/oozie_app/workflow.xml index 5062d562b..b89165fa2 100644 --- a/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/oozie_app/workflow.xml @@ -8,7 +8,27 @@ softwareCodeRepositoryURLs - The path in the HDSF to save the software repository URLs + The path in the HDFS to save the software repository URLs + + + lastVisitsPath + The path in the HDFS to save the responses of the last visit requests + + + archiveRequestsPath + The path in the HDFS to save the responses of the archive requests + + + maxNumberOfRetry + Max number of retries for failed API calls + + + retryDelay + Retry delay for failed requests (in sec) + + + requestDelay + Delay between API requests (in ms) resume @@ -75,9 +95,9 @@ --softwareCodeRepositoryURLs${softwareCodeRepositoryURLs} --lastVisitsPath${lastVisitsPath} - --maxNumberOfRetry2 - --requestDelay0 - --retryDelay1 + --maxNumberOfRetry${maxNumberOfRetry} + --requestDelay${requestDelay} + --retryDelay${retryDelay} --requestMethodGET @@ -91,11 +111,12 @@ --namenode${nameNode} --lastVisitsPath${lastVisitsPath} + --archiveRequestsPath${archiveRequestsPath} --archiveThresholdInDays365 - --maxNumberOfRetry2 - --requestDelay0 - --retryDelay1 + --maxNumberOfRetry${maxNumberOfRetry} + --requestDelay${requestDelay} + --retryDelay${retryDelay} --requestMethodPOST diff --git a/dhp-workflows/dhp-swh/src/test/java/eu/dnetlib/dhp/swh/ArchiveRepositoryURLsTest.java b/dhp-workflows/dhp-swh/src/test/java/eu/dnetlib/dhp/swh/ArchiveRepositoryURLsTest.java index 06e40ae14..e069e9655 100644 --- a/dhp-workflows/dhp-swh/src/test/java/eu/dnetlib/dhp/swh/ArchiveRepositoryURLsTest.java +++ b/dhp-workflows/dhp-swh/src/test/java/eu/dnetlib/dhp/swh/ArchiveRepositoryURLsTest.java @@ -1,35 +1,38 @@ -package eu.dnetlib.dhp.swh; -import eu.dnetlib.dhp.swh.utils.SWHUtils; -import org.apache.hadoop.fs.FileSystem; -import org.junit.jupiter.api.Test; +package eu.dnetlib.dhp.swh; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; +import java.text.ParseException; import java.util.Arrays; +import org.apache.hadoop.fs.FileSystem; +import org.junit.jupiter.api.Test; + +import eu.dnetlib.dhp.swh.utils.SWHUtils; + public class ArchiveRepositoryURLsTest { - @Test - void testArchive() throws IOException { - String inputPath = getClass() - .getResource("/eu/dnetlib/dhp/swh/lastVisitDataToArchive.csv") - .getPath(); + @Test + void testArchive() throws IOException, ParseException { + String inputPath = getClass() + .getResource("/eu/dnetlib/dhp/swh/lastVisitDataToArchive.csv") + .getPath(); - File file = new File(inputPath); - FileReader fr = new FileReader(file); - BufferedReader br = new BufferedReader(fr); //creates a buffering character input stream + File file = new File(inputPath); + FileReader fr = new FileReader(file); + BufferedReader br = new BufferedReader(fr); // creates a buffering character input stream - String line; - while((line = br.readLine()) != null) { - String[] tokens = line.split("\t"); + String line; + while ((line = br.readLine()) != null) { + String[] tokens = line.split("\t"); - String response = ArchiveRepositoryURLs.handleRecord(tokens[0], tokens[1], 365); - System.out.println(tokens[0] + "\t" + response); - System.out.println(); - } - fr.close(); - } + String response = ArchiveRepositoryURLs.handleRecord(tokens[0], tokens[1], 365); + System.out.println(tokens[0] + "\t" + response); + System.out.println(); + } + fr.close(); + } } diff --git a/dhp-workflows/dhp-swh/src/test/java/eu/dnetlib/dhp/swh/SWHConnectionTest.java b/dhp-workflows/dhp-swh/src/test/java/eu/dnetlib/dhp/swh/SWHConnectionTest.java index d69f6ff1b..28210f1b3 100644 --- a/dhp-workflows/dhp-swh/src/test/java/eu/dnetlib/dhp/swh/SWHConnectionTest.java +++ b/dhp-workflows/dhp-swh/src/test/java/eu/dnetlib/dhp/swh/SWHConnectionTest.java @@ -1,17 +1,18 @@ package eu.dnetlib.dhp.swh; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +import org.junit.jupiter.api.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import eu.dnetlib.dhp.common.collection.CollectorException; import eu.dnetlib.dhp.common.collection.HttpClientParams; import eu.dnetlib.dhp.swh.utils.SWHConnection; import eu.dnetlib.dhp.swh.utils.SWHConstants; -import org.junit.jupiter.api.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; //import org.apache.hadoop.hdfs.MiniDFSCluster; @@ -24,7 +25,7 @@ public class SWHConnectionTest { HttpClientParams clientParams = new HttpClientParams(); clientParams.setRequestMethod("GET"); - SWHConnection swhConnection = new SWHConnection(clientParams); + SWHConnection swhConnection = new SWHConnection(clientParams); String repoUrl = "https://github.com/stanford-futuredata/FAST"; URL url = new URL(String.format(SWHConstants.SWH_LATEST_VISIT_URL, repoUrl)); @@ -42,7 +43,7 @@ public class SWHConnectionTest { HttpClientParams clientParams = new HttpClientParams(); clientParams.setRequestMethod("POST"); - SWHConnection swhConnection = new SWHConnection(clientParams); + SWHConnection swhConnection = new SWHConnection(clientParams); String repoUrl = "https://github.com/stanford-futuredata/FAST"; URL url = new URL(String.format(SWHConstants.SWH_ARCHIVE_URL, SWHConstants.DEFAULT_VISIT_TYPE, repoUrl)); diff --git a/dhp-workflows/dhp-swh/src/test/resources/eu/dnetlib/dhp/swh/lastVisitDataToArchive.csv b/dhp-workflows/dhp-swh/src/test/resources/eu/dnetlib/dhp/swh/lastVisitDataToArchive.csv index 6477dd62a..568ccf482 100644 --- a/dhp-workflows/dhp-swh/src/test/resources/eu/dnetlib/dhp/swh/lastVisitDataToArchive.csv +++ b/dhp-workflows/dhp-swh/src/test/resources/eu/dnetlib/dhp/swh/lastVisitDataToArchive.csv @@ -1,3 +1,4 @@ +https://bitbucket.org/samskillman/yt-stokes {"origin":"https://bitbucket.org/samskillman/yt-stokes","visit":43,"date":"2021-09-13T21:59:27.125171+00:00","status":"failed","snapshot":null,"type":"hg","metadata":{},"origin_url":"https://archive.softwareheritage.org/api/1/origin/https://bitbucket.org/samskillman/yt-stokes/get/","snapshot_url":null} https://github.com/bioinsilico/BIPSPI {"origin":"https://github.com/bioinsilico/BIPSPI","visit":1,"date":"2020-03-18T14:50:21.541822+00:00","status":"full","snapshot":"c6c69d2cd73ce89811448da5f031611df6f63bdb","type":"git","metadata":{},"origin_url":"https://archive.softwareheritage.org/api/1/origin/https://github.com/bioinsilico/BIPSPI/get/","snapshot_url":"https://archive.softwareheritage.org/api/1/snapshot/c6c69d2cd73ce89811448da5f031611df6f63bdb/"} https://github.com/mloop/kdiff-type1-error-rate/blob/master/analysis/simulation.R {} https://github.com/schwanbeck/YSMR {"origin":"https://github.com/schwanbeck/YSMR","visit":6,"date":"2023-08-02T15:25:02.650676+00:00","status":"full","snapshot":"a9d1c5f0bca2def198b89f65bc9f7da3be8439ed","type":"git","metadata":{},"origin_url":"https://archive.softwareheritage.org/api/1/origin/https://github.com/schwanbeck/YSMR/get/","snapshot_url":"https://archive.softwareheritage.org/api/1/snapshot/a9d1c5f0bca2def198b89f65bc9f7da3be8439ed/"} From e84f5b5e6457d8e47fea99a860cd27f41c67882e Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Mon, 2 Oct 2023 09:25:16 +0200 Subject: [PATCH 287/449] extended existing codo to accomodate import of POCI from open citation --- .../CreateActionSetSparkJob.java | 29 +++++++++++++------ .../opencitations/GetOpenCitationsRefs.java | 16 ++++++---- .../actionmanager/opencitations/ReadCOCI.java | 18 +++++++++--- .../opencitations/as_parameters.json | 5 ++++ .../opencitations/input_parameters.json | 6 ++++ .../input_readcoci_parameters.json | 7 ++++- .../opencitations/oozie_app/workflow.xml | 9 ++++-- 7 files changed, 67 insertions(+), 23 deletions(-) diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/opencitations/CreateActionSetSparkJob.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/opencitations/CreateActionSetSparkJob.java index 4c658e52f..dafd82120 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/opencitations/CreateActionSetSparkJob.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/opencitations/CreateActionSetSparkJob.java @@ -26,7 +26,6 @@ import eu.dnetlib.dhp.actionmanager.opencitations.model.COCI; import eu.dnetlib.dhp.application.ArgumentApplicationParser; import eu.dnetlib.dhp.schema.action.AtomicAction; import eu.dnetlib.dhp.schema.common.ModelConstants; -import eu.dnetlib.dhp.schema.common.ModelSupport; import eu.dnetlib.dhp.schema.oaf.*; import eu.dnetlib.dhp.schema.oaf.utils.CleaningFunctions; import eu.dnetlib.dhp.schema.oaf.utils.IdentifierFactory; @@ -35,7 +34,9 @@ import scala.Tuple2; public class CreateActionSetSparkJob implements Serializable { public static final String OPENCITATIONS_CLASSID = "sysimport:crosswalk:opencitations"; public static final String OPENCITATIONS_CLASSNAME = "Imported from OpenCitations"; - private static final String ID_PREFIX = "50|doi_________::"; + private static final String DOI_PREFIX = "50|doi_________::"; + + private static final String PMID_PREFIX = "50|pmid________::"; private static final String TRUST = "0.91"; private static final Logger log = LoggerFactory.getLogger(CreateActionSetSparkJob.class); @@ -67,6 +68,9 @@ public class CreateActionSetSparkJob implements Serializable { final String outputPath = parser.get("outputPath"); log.info("outputPath {}", outputPath); + final String prefix = parser.get("prefix"); + log.info("prefix {}", prefix); + final boolean shouldDuplicateRels = Optional .ofNullable(parser.get("shouldDuplicateRels")) .map(Boolean::valueOf) @@ -77,13 +81,13 @@ public class CreateActionSetSparkJob implements Serializable { conf, isSparkSessionManaged, spark -> { - extractContent(spark, inputPath, outputPath, shouldDuplicateRels); + extractContent(spark, inputPath, outputPath, shouldDuplicateRels, prefix); }); } private static void extractContent(SparkSession spark, String inputPath, String outputPath, - boolean shouldDuplicateRels) { + boolean shouldDuplicateRels, String prefix) { spark .read() .textFile(inputPath + "/*") @@ -91,7 +95,8 @@ public class CreateActionSetSparkJob implements Serializable { (MapFunction) value -> OBJECT_MAPPER.readValue(value, COCI.class), Encoders.bean(COCI.class)) .flatMap( - (FlatMapFunction) value -> createRelation(value, shouldDuplicateRels).iterator(), + (FlatMapFunction) value -> createRelation(value, shouldDuplicateRels, prefix) + .iterator(), Encoders.bean(Relation.class)) .filter((FilterFunction) value -> value != null) .toJavaRDD() @@ -103,13 +108,19 @@ public class CreateActionSetSparkJob implements Serializable { } - private static List createRelation(COCI value, boolean duplicate) { + private static List createRelation(COCI value, boolean duplicate, String p) { List relationList = new ArrayList<>(); + String prefix; + if (p.equals("COCI")) { + prefix = DOI_PREFIX; + } else { + prefix = PMID_PREFIX; + } - String citing = ID_PREFIX + String citing = prefix + IdentifierFactory.md5(CleaningFunctions.normalizePidValue("doi", value.getCiting())); - final String cited = ID_PREFIX + final String cited = prefix + IdentifierFactory.md5(CleaningFunctions.normalizePidValue("doi", value.getCited())); if (!citing.equals(cited)) { @@ -120,7 +131,7 @@ public class CreateActionSetSparkJob implements Serializable { cited, ModelConstants.CITES)); if (duplicate && value.getCiting().endsWith(".refs")) { - citing = ID_PREFIX + IdentifierFactory + citing = prefix + IdentifierFactory .md5( CleaningFunctions .normalizePidValue( diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/opencitations/GetOpenCitationsRefs.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/opencitations/GetOpenCitationsRefs.java index 3530c9980..60dc998ef 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/opencitations/GetOpenCitationsRefs.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/opencitations/GetOpenCitationsRefs.java @@ -45,6 +45,9 @@ public class GetOpenCitationsRefs implements Serializable { final String hdfsNameNode = parser.get("hdfsNameNode"); log.info("hdfsNameNode {}", hdfsNameNode); + final String prefix = parser.get("prefix"); + log.info("prefix {}", prefix); + Configuration conf = new Configuration(); conf.set("fs.defaultFS", hdfsNameNode); @@ -53,30 +56,31 @@ public class GetOpenCitationsRefs implements Serializable { GetOpenCitationsRefs ocr = new GetOpenCitationsRefs(); for (String file : inputFile) { - ocr.doExtract(workingPath + "/Original/" + file, workingPath, fileSystem); + ocr.doExtract(workingPath + "/Original/" + file, workingPath, fileSystem, prefix); } } - private void doExtract(String inputFile, String workingPath, FileSystem fileSystem) + private void doExtract(String inputFile, String workingPath, FileSystem fileSystem, String prefix) throws IOException { final Path path = new Path(inputFile); FSDataInputStream oc_zip = fileSystem.open(path); - int count = 1; + // int count = 1; try (ZipInputStream zis = new ZipInputStream(oc_zip)) { ZipEntry entry = null; while ((entry = zis.getNextEntry()) != null) { if (!entry.isDirectory()) { String fileName = entry.getName(); - fileName = fileName.substring(0, fileName.indexOf("T")) + "_" + count; - count++; + // fileName = fileName.substring(0, fileName.indexOf("T")) + "_" + count; + fileName = fileName.substring(0, fileName.lastIndexOf(".")); + // count++; try ( FSDataOutputStream out = fileSystem - .create(new Path(workingPath + "/COCI/" + fileName + ".gz")); + .create(new Path(workingPath + "/" + prefix + "/" + fileName + ".gz")); GZIPOutputStream gzipOs = new GZIPOutputStream(new BufferedOutputStream(out))) { IOUtils.copy(zis, gzipOs); diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/opencitations/ReadCOCI.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/opencitations/ReadCOCI.java index 4293ca187..3d384de9d 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/opencitations/ReadCOCI.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/opencitations/ReadCOCI.java @@ -49,6 +49,9 @@ public class ReadCOCI implements Serializable { final String workingPath = parser.get("workingPath"); log.info("workingPath {}", workingPath); + final String format = parser.get("format"); + log.info("format {}", format); + SparkConf sconf = new SparkConf(); final String delimiter = Optional @@ -64,13 +67,14 @@ public class ReadCOCI implements Serializable { workingPath, inputFile, outputPath, - delimiter); + delimiter, + format); }); } private static void doRead(SparkSession spark, String workingPath, String[] inputFiles, String outputPath, - String delimiter) throws IOException { + String delimiter, String format) throws IOException { for (String inputFile : inputFiles) { String p_string = workingPath + "/" + inputFile + ".gz"; @@ -87,9 +91,15 @@ public class ReadCOCI implements Serializable { cociData.map((MapFunction) row -> { COCI coci = new COCI(); + if (format.equals("COCI")) { + coci.setCiting(row.getString(1)); + coci.setCited(row.getString(2)); + } else { + coci.setCiting(String.valueOf(row.getInt(1))); + coci.setCited(String.valueOf(row.getInt(2))); + } coci.setOci(row.getString(0)); - coci.setCiting(row.getString(1)); - coci.setCited(row.getString(2)); + return coci; }, Encoders.bean(COCI.class)) .write() diff --git a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/opencitations/as_parameters.json b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/opencitations/as_parameters.json index 308e02026..e25d1f4b8 100644 --- a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/opencitations/as_parameters.json +++ b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/opencitations/as_parameters.json @@ -21,5 +21,10 @@ "paramLongName": "shouldDuplicateRels", "paramDescription": "the hdfs name node", "paramRequired": false +},{ + "paramName": "p", + "paramLongName": "prefix", + "paramDescription": "the hdfs name node", + "paramRequired": true } ] diff --git a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/opencitations/input_parameters.json b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/opencitations/input_parameters.json index 4910ad11d..96db7eeb7 100644 --- a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/opencitations/input_parameters.json +++ b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/opencitations/input_parameters.json @@ -16,5 +16,11 @@ "paramLongName": "hdfsNameNode", "paramDescription": "the hdfs name node", "paramRequired": true + }, + { + "paramName": "p", + "paramLongName": "prefix", + "paramDescription": "COCI or POCI", + "paramRequired": true } ] diff --git a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/opencitations/input_readcoci_parameters.json b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/opencitations/input_readcoci_parameters.json index b57cb5d9a..fa840089d 100644 --- a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/opencitations/input_readcoci_parameters.json +++ b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/opencitations/input_readcoci_parameters.json @@ -30,7 +30,12 @@ "paramLongName": "inputFile", "paramDescription": "the hdfs name node", "paramRequired": true - } + }, { + "paramName": "f", + "paramLongName": "format", + "paramDescription": "the hdfs name node", + "paramRequired": true +} ] diff --git a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/opencitations/oozie_app/workflow.xml b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/opencitations/oozie_app/workflow.xml index 0f01039f7..4807da903 100644 --- a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/opencitations/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/opencitations/oozie_app/workflow.xml @@ -60,6 +60,7 @@ --hdfsNameNode${nameNode} --inputFile${inputFile} --workingPath${workingPath} + --prefix${prefix} @@ -82,10 +83,11 @@ --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} --conf spark.sql.warehouse.dir=${sparkSqlWarehouseDir} - --workingPath${workingPath}/COCI - --outputPath${workingPath}/COCI_JSON/ + --workingPath${workingPath}/${prefix} + --outputPath${workingPath}/${prefix}_JSON/ --delimiter${delimiter} --inputFile${inputFileCoci} + --format${prefix} @@ -108,8 +110,9 @@ --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} --conf spark.sql.warehouse.dir=${sparkSqlWarehouseDir} - --inputPath${workingPath}/COCI_JSON + --inputPath${workingPath}/${prefix}_JSON --outputPath${outputPath} + --prefix${prefix} From e239b81740bccfb90211464b5d422113eac2b783 Mon Sep 17 00:00:00 2001 From: Giambattista Bloisi Date: Wed, 20 Sep 2023 15:42:00 +0200 Subject: [PATCH 288/449] Fix defect #8997: GenerateEventsJob is generating huge amounts of logs because broker entity similarity calculation consistently failed --- .../eu/dnetlib/pace/model/SparkModel.scala | 4 ++-- .../dhp/broker/oa/util/TrustUtils.java | 22 +++++++++---------- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/SparkModel.scala b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/SparkModel.scala index 95325ace0..3ba36aa22 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/SparkModel.scala +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/SparkModel.scala @@ -78,10 +78,10 @@ case class SparkModel(conf: DedupConfig) { uv case Type.List | Type.JSON => - MapDocumentUtil.truncateList( + Seq(MapDocumentUtil.truncateList( MapDocumentUtil.getJPathList(fdef.getPath, documentContext, fdef.getType), fdef.getSize - ).toArray + )) case Type.StringConcat => val jpaths = CONCAT_REGEX.split(fdef.getPath) diff --git a/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/util/TrustUtils.java b/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/util/TrustUtils.java index a6fa2b1a1..6f197a8ce 100644 --- a/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/util/TrustUtils.java +++ b/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/util/TrustUtils.java @@ -1,18 +1,18 @@ package eu.dnetlib.dhp.broker.oa.util; -import java.io.IOException; - -import org.apache.spark.sql.Row; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.fasterxml.jackson.databind.ObjectMapper; - import eu.dnetlib.broker.objects.OaBrokerMainEntity; import eu.dnetlib.pace.config.DedupConfig; import eu.dnetlib.pace.model.SparkDeduper; import eu.dnetlib.pace.tree.support.TreeProcessor; +import org.apache.commons.io.IOUtils; +import org.apache.spark.sql.Row; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; public class TrustUtils { @@ -27,10 +27,8 @@ public class TrustUtils { static { mapper = new ObjectMapper(); try { - dedupConfig = mapper - .readValue( - DedupConfig.class.getResourceAsStream("/eu/dnetlib/dhp/broker/oa/dedupConfig/dedupConfig.json"), - DedupConfig.class); + dedupConfig = DedupConfig.load(IOUtils.toString(DedupConfig.class.getResourceAsStream("/eu/dnetlib/dhp/broker/oa/dedupConfig/dedupConfig.json"), StandardCharsets.UTF_8)); + deduper = new SparkDeduper(dedupConfig); } catch (final IOException e) { log.error("Error loading dedupConfig, e"); @@ -57,7 +55,7 @@ public class TrustUtils { return TrustUtils.rescale(score, threshold); } catch (final Exception e) { log.error("Error computing score between results", e); - return BrokerConstants.MIN_TRUST; + throw new RuntimeException(e); } } From 7f244d9a7ad7e723d9c80503476e590835031c4d Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Wed, 20 Sep 2023 15:53:21 +0200 Subject: [PATCH 289/449] code formatting --- .../dhp/broker/oa/util/TrustUtils.java | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/util/TrustUtils.java b/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/util/TrustUtils.java index 6f197a8ce..67468c6f9 100644 --- a/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/util/TrustUtils.java +++ b/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/util/TrustUtils.java @@ -1,18 +1,20 @@ package eu.dnetlib.dhp.broker.oa.util; -import com.fasterxml.jackson.databind.ObjectMapper; -import eu.dnetlib.broker.objects.OaBrokerMainEntity; -import eu.dnetlib.pace.config.DedupConfig; -import eu.dnetlib.pace.model.SparkDeduper; -import eu.dnetlib.pace.tree.support.TreeProcessor; +import java.io.IOException; +import java.nio.charset.StandardCharsets; + import org.apache.commons.io.IOUtils; import org.apache.spark.sql.Row; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.IOException; -import java.nio.charset.StandardCharsets; +import com.fasterxml.jackson.databind.ObjectMapper; + +import eu.dnetlib.broker.objects.OaBrokerMainEntity; +import eu.dnetlib.pace.config.DedupConfig; +import eu.dnetlib.pace.model.SparkDeduper; +import eu.dnetlib.pace.tree.support.TreeProcessor; public class TrustUtils { @@ -27,7 +29,13 @@ public class TrustUtils { static { mapper = new ObjectMapper(); try { - dedupConfig = DedupConfig.load(IOUtils.toString(DedupConfig.class.getResourceAsStream("/eu/dnetlib/dhp/broker/oa/dedupConfig/dedupConfig.json"), StandardCharsets.UTF_8)); + dedupConfig = DedupConfig + .load( + IOUtils + .toString( + DedupConfig.class + .getResourceAsStream("/eu/dnetlib/dhp/broker/oa/dedupConfig/dedupConfig.json"), + StandardCharsets.UTF_8)); deduper = new SparkDeduper(dedupConfig); } catch (final IOException e) { From 3c47920c7839b2004a2e8f9fbb4dbff8873d1e6d Mon Sep 17 00:00:00 2001 From: Giambattista Bloisi Date: Wed, 20 Sep 2023 16:14:01 +0200 Subject: [PATCH 290/449] Use asScala to convert java List to Scala Sequence --- .../src/main/java/eu/dnetlib/pace/model/SparkModel.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/SparkModel.scala b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/SparkModel.scala index 3ba36aa22..aa997c6e9 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/SparkModel.scala +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/SparkModel.scala @@ -78,10 +78,10 @@ case class SparkModel(conf: DedupConfig) { uv case Type.List | Type.JSON => - Seq(MapDocumentUtil.truncateList( + MapDocumentUtil.truncateList( MapDocumentUtil.getJPathList(fdef.getPath, documentContext, fdef.getType), fdef.getSize - )) + ).asScala case Type.StringConcat => val jpaths = CONCAT_REGEX.split(fdef.getPath) From c412dc162bc7028c1e94eb3205960e24e748347e Mon Sep 17 00:00:00 2001 From: Giambattista Bloisi Date: Wed, 27 Sep 2023 22:30:47 +0200 Subject: [PATCH 291/449] Fix bug in conversion from dedup json model to Spark Dataset of Rows: list of strings contained the json escaped representation of the value instead of the plain value, this caused instanceTypeMatch failures because of the leading and trailing double quotes --- .../src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java index a59b6248b..28244cb3b 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java @@ -117,6 +117,11 @@ public class MapDocumentUtil { return result; } + if (type == Type.List && jresult instanceof List) { + ((List) jresult).forEach(x -> result.add(x.toString())); + return result; + } + if (jresult instanceof JSONArray) { ((JSONArray) jresult).forEach(it -> { try { From 9898470b0e2c5b05ae73c5b2ae404f6f52cba2f4 Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Mon, 2 Oct 2023 12:54:16 +0200 Subject: [PATCH 292/449] Addressing comments in https://code-repo.d4science.org/D-Net/dnet-hadoop/pulls/340\#issuecomment-10592 --- .../CreateActionSetSparkJob.java | 119 ++++++++---------- .../opencitations/oozie_app/workflow.xml | 2 +- 2 files changed, 54 insertions(+), 67 deletions(-) diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/opencitations/CreateActionSetSparkJob.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/opencitations/CreateActionSetSparkJob.java index dafd82120..e3a9833b3 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/opencitations/CreateActionSetSparkJob.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/opencitations/CreateActionSetSparkJob.java @@ -12,6 +12,7 @@ import org.apache.commons.io.IOUtils; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapred.SequenceFileOutputFormat; import org.apache.spark.SparkConf; +import org.apache.spark.api.java.JavaPairRDD; import org.apache.spark.api.java.function.FilterFunction; import org.apache.spark.api.java.function.FlatMapFunction; import org.apache.spark.api.java.function.MapFunction; @@ -26,9 +27,12 @@ import eu.dnetlib.dhp.actionmanager.opencitations.model.COCI; import eu.dnetlib.dhp.application.ArgumentApplicationParser; import eu.dnetlib.dhp.schema.action.AtomicAction; import eu.dnetlib.dhp.schema.common.ModelConstants; +import eu.dnetlib.dhp.schema.common.ModelSupport; import eu.dnetlib.dhp.schema.oaf.*; import eu.dnetlib.dhp.schema.oaf.utils.CleaningFunctions; import eu.dnetlib.dhp.schema.oaf.utils.IdentifierFactory; +import eu.dnetlib.dhp.schema.oaf.utils.OafMapperUtils; +import eu.dnetlib.dhp.utils.DHPUtils; import scala.Tuple2; public class CreateActionSetSparkJob implements Serializable { @@ -68,9 +72,6 @@ public class CreateActionSetSparkJob implements Serializable { final String outputPath = parser.get("outputPath"); log.info("outputPath {}", outputPath); - final String prefix = parser.get("prefix"); - log.info("prefix {}", prefix); - final boolean shouldDuplicateRels = Optional .ofNullable(parser.get("shouldDuplicateRels")) .map(Boolean::valueOf) @@ -81,47 +82,62 @@ public class CreateActionSetSparkJob implements Serializable { conf, isSparkSessionManaged, spark -> { - extractContent(spark, inputPath, outputPath, shouldDuplicateRels, prefix); + extractContent(spark, inputPath, outputPath, shouldDuplicateRels); }); } private static void extractContent(SparkSession spark, String inputPath, String outputPath, + boolean shouldDuplicateRels) { + + getTextTextJavaPairRDD(spark, inputPath, shouldDuplicateRels, "COCI") + .union(getTextTextJavaPairRDD(spark, inputPath, shouldDuplicateRels, "POCI")) + .saveAsHadoopFile(outputPath, Text.class, Text.class, SequenceFileOutputFormat.class); + + } + + private static JavaPairRDD getTextTextJavaPairRDD(SparkSession spark, String inputPath, boolean shouldDuplicateRels, String prefix) { - spark + return spark .read() - .textFile(inputPath + "/*") + .textFile(inputPath + "/" + prefix + "/" + prefix + "_JSON/*") .map( (MapFunction) value -> OBJECT_MAPPER.readValue(value, COCI.class), Encoders.bean(COCI.class)) .flatMap( - (FlatMapFunction) value -> createRelation(value, shouldDuplicateRels, prefix) - .iterator(), + (FlatMapFunction) value -> createRelation( + value, shouldDuplicateRels, prefix) + .iterator(), Encoders.bean(Relation.class)) .filter((FilterFunction) value -> value != null) .toJavaRDD() .map(p -> new AtomicAction(p.getClass(), p)) .mapToPair( aa -> new Tuple2<>(new Text(aa.getClazz().getCanonicalName()), - new Text(OBJECT_MAPPER.writeValueAsString(aa)))) - .saveAsHadoopFile(outputPath, Text.class, Text.class, SequenceFileOutputFormat.class); - + new Text(OBJECT_MAPPER.writeValueAsString(aa)))); } private static List createRelation(COCI value, boolean duplicate, String p) { List relationList = new ArrayList<>(); String prefix; + String citing; + String cited; if (p.equals("COCI")) { prefix = DOI_PREFIX; + citing = prefix + + IdentifierFactory.md5(CleaningFunctions.normalizePidValue("doi", value.getCiting())); + cited = prefix + + IdentifierFactory.md5(CleaningFunctions.normalizePidValue("doi", value.getCited())); + } else { prefix = PMID_PREFIX; - } + citing = prefix + + IdentifierFactory.md5(CleaningFunctions.normalizePidValue("pmid", value.getCiting())); + cited = prefix + + IdentifierFactory.md5(CleaningFunctions.normalizePidValue("pmid", value.getCited())); - String citing = prefix - + IdentifierFactory.md5(CleaningFunctions.normalizePidValue("doi", value.getCiting())); - final String cited = prefix - + IdentifierFactory.md5(CleaningFunctions.normalizePidValue("doi", value.getCited())); + } if (!citing.equals(cited)) { relationList @@ -143,59 +159,30 @@ public class CreateActionSetSparkJob implements Serializable { return relationList; } - private static Collection getRelations(String citing, String cited) { - - return Arrays - .asList( - getRelation(citing, cited, ModelConstants.CITES), - getRelation(cited, citing, ModelConstants.IS_CITED_BY)); - } - public static Relation getRelation( String source, String target, String relclass) { - Relation r = new Relation(); - r.setCollectedfrom(getCollectedFrom()); - r.setSource(source); - r.setTarget(target); - r.setRelClass(relclass); - r.setRelType(ModelConstants.RESULT_RESULT); - r.setSubRelType(ModelConstants.CITATION); - r - .setDataInfo( - getDataInfo()); - return r; + + return OafMapperUtils + .getRelation( + source, + target, + ModelConstants.RESULT_RESULT, + ModelConstants.CITATION, + relclass, + Arrays + .asList( + OafMapperUtils.keyValue(ModelConstants.OPENOCITATIONS_ID, ModelConstants.OPENOCITATIONS_NAME)), + OafMapperUtils + .dataInfo( + false, null, false, false, + OafMapperUtils + .qualifier( + OPENCITATIONS_CLASSID, OPENCITATIONS_CLASSNAME, + ModelConstants.DNET_PROVENANCE_ACTIONS, ModelConstants.DNET_PROVENANCE_ACTIONS), + TRUST), + null); + } - - public static List getCollectedFrom() { - KeyValue kv = new KeyValue(); - kv.setKey(ModelConstants.OPENOCITATIONS_ID); - kv.setValue(ModelConstants.OPENOCITATIONS_NAME); - - return Arrays.asList(kv); - } - - public static DataInfo getDataInfo() { - DataInfo di = new DataInfo(); - di.setInferred(false); - di.setDeletedbyinference(false); - di.setTrust(TRUST); - - di - .setProvenanceaction( - getQualifier(OPENCITATIONS_CLASSID, OPENCITATIONS_CLASSNAME, ModelConstants.DNET_PROVENANCE_ACTIONS)); - return di; - } - - public static Qualifier getQualifier(String class_id, String class_name, - String qualifierSchema) { - Qualifier pa = new Qualifier(); - pa.setClassid(class_id); - pa.setClassname(class_name); - pa.setSchemeid(qualifierSchema); - pa.setSchemename(qualifierSchema); - return pa; - } - } diff --git a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/opencitations/oozie_app/workflow.xml b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/opencitations/oozie_app/workflow.xml index 4807da903..bd1932dd5 100644 --- a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/opencitations/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/opencitations/oozie_app/workflow.xml @@ -110,7 +110,7 @@ --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} --conf spark.sql.warehouse.dir=${sparkSqlWarehouseDir} - --inputPath${workingPath}/${prefix}_JSON + --inputPath${workingPath} --outputPath${outputPath} --prefix${prefix} From d7fccdc64b53a80c5f93be8cf4826c0d01f1e3ff Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Mon, 2 Oct 2023 14:10:57 +0200 Subject: [PATCH 293/449] fixed paths in wf to match the req of the pathname --- .../actionmanager/opencitations/oozie_app/workflow.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/opencitations/oozie_app/workflow.xml b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/opencitations/oozie_app/workflow.xml index bd1932dd5..d87dfa2ba 100644 --- a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/opencitations/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/opencitations/oozie_app/workflow.xml @@ -46,7 +46,7 @@ download.sh ${filelist} - ${workingPath}/Original + ${workingPath}/${prefix}/Original HADOOP_USER_NAME=${wf:user()} download.sh @@ -59,7 +59,7 @@ eu.dnetlib.dhp.actionmanager.opencitations.GetOpenCitationsRefs --hdfsNameNode${nameNode} --inputFile${inputFile} - --workingPath${workingPath} + --workingPath${workingPath}/${prefix} --prefix${prefix} @@ -83,8 +83,8 @@ --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} --conf spark.sql.warehouse.dir=${sparkSqlWarehouseDir} - --workingPath${workingPath}/${prefix} - --outputPath${workingPath}/${prefix}_JSON/ + --workingPath${workingPath}/${prefix}/${prefix} + --outputPath${workingPath}/${prefix}/${prefix}_JSON/ --delimiter${delimiter} --inputFile${inputFileCoci} --format${prefix} From c9a5ad6a0266de84a0be5efc493b686586705218 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Mon, 2 Oct 2023 16:28:42 +0200 Subject: [PATCH 294/449] extending the coverage of the peer non-unknown refereed instances --- .../oaf/utils/GraphCleaningFunctions.java | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java index 8afa41f95..3c3e8052e 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java @@ -36,6 +36,19 @@ public class GraphCleaningFunctions extends CleaningFunctions { public static final int TITLE_FILTER_RESIDUAL_LENGTH = 5; private static final String NAME_CLEANING_REGEX = "[\\r\\n\\t\\s]+"; + private static final HashSet PEER_REVIEWED_TYPES = new HashSet<>(); + + static { + PEER_REVIEWED_TYPES.add("Article"); + PEER_REVIEWED_TYPES.add("Part of book or chapter of book"); + PEER_REVIEWED_TYPES.add("Book"); + PEER_REVIEWED_TYPES.add("Doctoral thesis"); + PEER_REVIEWED_TYPES.add("Master thesis"); + PEER_REVIEWED_TYPES.add("Data Paper"); + PEER_REVIEWED_TYPES.add("Thesis"); + PEER_REVIEWED_TYPES.add("Bachelor thesis"); + PEER_REVIEWED_TYPES.add("Conference object"); + } public static T cleanContext(T value, String contextId, String verifyParam) { if (ModelSupport.isSubClass(value, Result.class)) { @@ -493,6 +506,28 @@ public class GraphCleaningFunctions extends CleaningFunctions { if (Objects.isNull(i.getRefereed()) || StringUtils.isBlank(i.getRefereed().getClassid())) { i.setRefereed(qualifier("0000", "Unknown", ModelConstants.DNET_REVIEW_LEVELS)); } + + // from the script from Dimitris + if ("0000".equals(i.getRefereed().getClassid())) { + final boolean isFromCrossref = ModelConstants.CROSSREF_ID + .equals(i.getCollectedfrom().getKey()); + final boolean hasDoi = i + .getPid() + .stream() + .anyMatch(pid -> PidType.doi.toString().equals(pid.getQualifier().getClassid())); + final boolean isPeerReviewedType = PEER_REVIEWED_TYPES + .contains(i.getInstancetype().getClassname()); + final boolean noOtherLitType = r + .getInstance() + .stream() + .noneMatch(ii -> "Other literature type".equals(ii.getInstancetype().getClassname())); + if (isFromCrossref && hasDoi && isPeerReviewedType && noOtherLitType) { + i.setRefereed(qualifier("0001", "peerReviewed", ModelConstants.DNET_REVIEW_LEVELS)); + } else { + i.setRefereed(qualifier("0002", "nonPeerReviewed", ModelConstants.DNET_REVIEW_LEVELS)); + } + } + if (Objects.nonNull(i.getDateofacceptance())) { Optional date = cleanDateField(i.getDateofacceptance()); if (date.isPresent()) { From 839a8524e70790440bb570c5093f0ab43e0df323 Mon Sep 17 00:00:00 2001 From: Serafeim Chatzopoulos Date: Mon, 2 Oct 2023 23:50:38 +0300 Subject: [PATCH 295/449] Add action for creating actionsets --- .../dhp/swh/ArchiveRepositoryURLs.java | 5 +- .../swh/CollectLastVisitRepositoryData.java | 2 +- .../swh/CollectSoftwareRepositoryURLs.java | 9 +- .../dnetlib/dhp/swh/PrepareSWHActionsets.java | 177 ++++++++++++++++++ .../dnetlib/dhp/swh/models/LastVisitData.java | 25 ++- .../dnetlib/dhp/swh/utils/SWHConnection.java | 100 ---------- .../dnetlib/dhp/swh/utils/SWHConstants.java | 4 + .../dhp/swh/input_prepare_swh_actionsets.json | 26 +++ .../eu/dnetlib/dhp/swh/job.properties | 2 + .../eu/dnetlib/dhp/swh/oozie_app/workflow.xml | 27 +++ .../dhp/swh/PrepareSWHActionsetsTest.java | 97 ++++++++++ .../eu/dnetlib/dhp/swh/last_visits_data.seq | Bin 0 -> 253188 bytes .../eu/dnetlib/dhp/swh/software.json.gz | Bin 0 -> 16127 bytes 13 files changed, 362 insertions(+), 112 deletions(-) create mode 100644 dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/PrepareSWHActionsets.java create mode 100644 dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/input_prepare_swh_actionsets.json create mode 100644 dhp-workflows/dhp-swh/src/test/java/eu/dnetlib/dhp/swh/PrepareSWHActionsetsTest.java create mode 100644 dhp-workflows/dhp-swh/src/test/resources/eu/dnetlib/dhp/swh/last_visits_data.seq create mode 100644 dhp-workflows/dhp-swh/src/test/resources/eu/dnetlib/dhp/swh/software.json.gz diff --git a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/ArchiveRepositoryURLs.java b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/ArchiveRepositoryURLs.java index 38db27baf..f02861953 100644 --- a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/ArchiveRepositoryURLs.java +++ b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/ArchiveRepositoryURLs.java @@ -1,7 +1,6 @@ package eu.dnetlib.dhp.swh; -import static eu.dnetlib.dhp.common.Constants.REQUEST_METHOD; import static eu.dnetlib.dhp.utils.DHPUtils.getHadoopConfiguration; import java.io.IOException; @@ -116,8 +115,8 @@ public class ArchiveRepositoryURLs { // a previous attempt for archival has been made, and repository URL was not found // avoid performing the same archive request again - if (lastVisit.getType() != null && - lastVisit.getType().equals(SWHConstants.VISIT_STATUS_NOT_FOUND)) { + if (lastVisit.getStatus() != null && + lastVisit.getStatus().equals(SWHConstants.VISIT_STATUS_NOT_FOUND)) { log.info("Avoid request -- previous archive request returned NOT_FOUND"); return null; diff --git a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/CollectLastVisitRepositoryData.java b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/CollectLastVisitRepositoryData.java index 9386b6876..296a4cce1 100644 --- a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/CollectLastVisitRepositoryData.java +++ b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/CollectLastVisitRepositoryData.java @@ -40,7 +40,7 @@ public class CollectLastVisitRepositoryData { private static SWHConnection swhConnection = null; public static void main(final String[] args) - throws IOException, ParseException, InterruptedException, URISyntaxException, CollectorException { + throws IOException, ParseException { final ArgumentApplicationParser argumentParser = new ArgumentApplicationParser( IOUtils .toString( diff --git a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/CollectSoftwareRepositoryURLs.java b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/CollectSoftwareRepositoryURLs.java index c1a0fafa5..6232fa322 100644 --- a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/CollectSoftwareRepositoryURLs.java +++ b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/CollectSoftwareRepositoryURLs.java @@ -3,7 +3,6 @@ package eu.dnetlib.dhp.swh; import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkHiveSession; -import java.io.Serializable; import java.util.Optional; import org.apache.commons.io.IOUtils; @@ -23,7 +22,7 @@ import eu.dnetlib.dhp.schema.oaf.Result; * * @author Serafeim Chatzopoulos */ -public class CollectSoftwareRepositoryURLs implements Serializable { +public class CollectSoftwareRepositoryURLs { private static final Logger log = LoggerFactory.getLogger(CollectSoftwareRepositoryURLs.class); @@ -44,10 +43,10 @@ public class CollectSoftwareRepositoryURLs implements Serializable { log.info("isSparkSessionManaged: {}", isSparkSessionManaged); final String hiveDbName = parser.get("hiveDbName"); - log.info("hiveDbName {}: ", hiveDbName); + log.info("hiveDbName: {}", hiveDbName); final String outputPath = parser.get("softwareCodeRepositoryURLs"); - log.info("softwareCodeRepositoryURLs {}: ", outputPath); + log.info("softwareCodeRepositoryURLs: {}", outputPath); final String hiveMetastoreUris = parser.get("hiveMetastoreUris"); log.info("hiveMetastoreUris: {}", hiveMetastoreUris); @@ -70,7 +69,7 @@ public class CollectSoftwareRepositoryURLs implements Serializable { "WHERE coderepositoryurl.value IS NOT NULL " + "AND datainfo.deletedbyinference = FALSE " + "AND datainfo.invisible = FALSE " + - "LIMIT 1000"; + "LIMIT 5000"; String query = String.format(queryTemplate, hiveDbName); log.info("Hive query to fetch software code URLs: {}", query); diff --git a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/PrepareSWHActionsets.java b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/PrepareSWHActionsets.java new file mode 100644 index 000000000..c0ab11bc4 --- /dev/null +++ b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/PrepareSWHActionsets.java @@ -0,0 +1,177 @@ + +package eu.dnetlib.dhp.swh; + +import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkSession; +import static org.apache.spark.sql.functions.col; + +import java.io.Serializable; +import java.util.Arrays; +import java.util.List; +import java.util.Optional; + +import org.apache.commons.io.IOUtils; +import org.apache.hadoop.io.Text; +import org.apache.hadoop.mapred.SequenceFileOutputFormat; +import org.apache.spark.SparkConf; +import org.apache.spark.api.java.JavaPairRDD; +import org.apache.spark.api.java.JavaRDD; +import org.apache.spark.api.java.JavaSparkContext; +import org.apache.spark.api.java.function.MapFunction; +import org.apache.spark.sql.*; +import org.apache.spark.sql.Dataset; +import org.apache.spark.sql.types.DataTypes; +import org.apache.spark.sql.types.StructField; +import org.apache.spark.sql.types.StructType; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.fasterxml.jackson.databind.ObjectMapper; + +import eu.dnetlib.dhp.application.ArgumentApplicationParser; +import eu.dnetlib.dhp.schema.action.AtomicAction; +import eu.dnetlib.dhp.schema.common.ModelConstants; +import eu.dnetlib.dhp.schema.oaf.*; +import eu.dnetlib.dhp.schema.oaf.utils.OafMapperUtils; +import eu.dnetlib.dhp.swh.models.LastVisitData; +import eu.dnetlib.dhp.swh.utils.SWHConstants; +import scala.Tuple2; + +/** + * Creates action sets for Software Heritage data + * + * @author Serafeim Chatzopoulos + */ +public class PrepareSWHActionsets { + + private static final Logger log = LoggerFactory.getLogger(PrepareSWHActionsets.class); + private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); + + public static void main(String[] args) throws Exception { + + String jsonConfiguration = IOUtils + .toString( + PrepareSWHActionsets.class + .getResourceAsStream( + "/eu/dnetlib/dhp/swh/input_prepare_swh_actionsets.json")); + + final ArgumentApplicationParser parser = new ArgumentApplicationParser(jsonConfiguration); + parser.parseArgument(args); + + final Boolean isSparkSessionManaged = Optional + .ofNullable(parser.get("isSparkSessionManaged")) + .map(Boolean::valueOf) + .orElse(Boolean.TRUE); + log.info("isSparkSessionManaged: {}", isSparkSessionManaged); + + final String inputPath = parser.get("lastVisitsPath"); + log.info("inputPath: {}", inputPath); + + final String softwareInputPath = parser.get("softwareInputPath"); + log.info("softwareInputPath: {}", softwareInputPath); + + final String outputPath = parser.get("actionsetsPath"); + log.info("outputPath: {}", outputPath); + + SparkConf conf = new SparkConf(); + + runWithSparkSession( + conf, + isSparkSessionManaged, + spark -> { + JavaPairRDD softwareRDD = prepareActionsets(spark, inputPath, softwareInputPath); + softwareRDD + .saveAsHadoopFile( + outputPath, Text.class, Text.class, SequenceFileOutputFormat.class); +// , GzipCodec.class); + }); + } + + private static Dataset loadSWHData(SparkSession spark, String inputPath) { + + JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); + + // read from file and transform to tuples + // Note: snapshot id is the SWH id for us + JavaRDD swhRDD = sc + .sequenceFile(inputPath, Text.class, Text.class) + .map(t -> t._2().toString()) + .map(t -> OBJECT_MAPPER.readValue(t, LastVisitData.class)) + .filter(t -> t.getOrigin() != null && t.getSnapshot() != null) // response from SWH API is empty if repo URL + // was not found + .map(item -> RowFactory.create(item.getOrigin(), item.getSnapshot())); + + // convert RDD to 2-column DF + List fields = Arrays + .asList( + DataTypes.createStructField("repoUrl", DataTypes.StringType, true), + DataTypes.createStructField("swhId", DataTypes.StringType, true)); + StructType schema = DataTypes.createStructType(fields); + + return spark.createDataFrame(swhRDD, schema); + } + + private static Dataset loadGraphSoftwareData(SparkSession spark, String softwareInputPath) { + return spark + .read() + .textFile(softwareInputPath) + .map( + (MapFunction) t -> OBJECT_MAPPER.readValue(t, Software.class), + Encoders.bean(Software.class)) + .filter(t -> t.getCodeRepositoryUrl() != null) + .select(col("id"), col("codeRepositoryUrl.value").as("repoUrl")); + } + + private static JavaPairRDD prepareActionsets(SparkSession spark, String inputPath, + String softwareInputPath) { + + Dataset swhDF = loadSWHData(spark, inputPath); +// swhDF.show(false); + + Dataset graphSoftwareDF = loadGraphSoftwareData(spark, softwareInputPath); +// graphSoftwareDF.show(5); + + Dataset joinedDF = graphSoftwareDF.join(swhDF, "repoUrl").select("id", "swhid"); +// joinedDF.show(false); + + return joinedDF.map((MapFunction) row -> { + + Software s = new Software(); + + // set openaire id + s.setId(row.getString(row.fieldIndex("id"))); + + // set swh id + Qualifier qualifier = OafMapperUtils + .qualifier( + SWHConstants.SWHID, + SWHConstants.SWHID_CLASSNAME, + ModelConstants.DNET_PID_TYPES, + ModelConstants.DNET_PID_TYPES); + + DataInfo dataInfo = OafMapperUtils + .dataInfo( + false, + null, + false, + false, + ModelConstants.PROVENANCE_ACTION_SET_QUALIFIER, + ""); + + s + .setPid( + Arrays + .asList( + OafMapperUtils + .structuredProperty( + row.getString(row.fieldIndex("swhid")), + qualifier, + dataInfo))); + return s; + }, Encoders.bean(Software.class)) + .toJavaRDD() + .map(p -> new AtomicAction(Software.class, p)) + .mapToPair( + aa -> new Tuple2<>(new Text(aa.getClazz().getCanonicalName()), + new Text(OBJECT_MAPPER.writeValueAsString(aa)))); + } +} diff --git a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/models/LastVisitData.java b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/models/LastVisitData.java index eaff5ce02..5e705716c 100644 --- a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/models/LastVisitData.java +++ b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/models/LastVisitData.java @@ -1,15 +1,15 @@ package eu.dnetlib.dhp.swh.models; -import java.util.Date; +import java.io.Serializable; -import com.cloudera.com.fasterxml.jackson.annotation.JsonFormat; import com.cloudera.com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; @JsonIgnoreProperties(ignoreUnknown = true) -public class LastVisitData { +public class LastVisitData implements Serializable { + private String origin; private String type; private String date; @@ -49,4 +49,23 @@ public class LastVisitData { public void setStatus(String status) { this.status = status; } + + public String getOrigin() { + return origin; + } + + public void setOrigin(String origin) { + this.origin = origin; + } + + @Override + public String toString() { + return "LastVisitData{" + + "origin='" + origin + '\'' + + ", type='" + type + '\'' + + ", date='" + date + '\'' + + ", snapshotId='" + snapshotId + '\'' + + ", status='" + status + '\'' + + '}'; + } } diff --git a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/utils/SWHConnection.java b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/utils/SWHConnection.java index 46d512dcb..9c145fc19 100644 --- a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/utils/SWHConnection.java +++ b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/utils/SWHConnection.java @@ -1,50 +1,21 @@ package eu.dnetlib.dhp.swh.utils; -import java.io.IOException; -import java.util.Arrays; import java.util.HashMap; -import java.util.List; import java.util.Map; -import org.apache.commons.lang3.math.NumberUtils; -import org.apache.http.Header; import org.apache.http.HttpHeaders; -import org.apache.http.HttpStatus; -import org.apache.http.client.methods.CloseableHttpResponse; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.util.EntityUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import eu.dnetlib.dhp.common.Constants; import eu.dnetlib.dhp.common.collection.CollectorException; import eu.dnetlib.dhp.common.collection.HttpClientParams; import eu.dnetlib.dhp.common.collection.HttpConnector2; public class SWHConnection { - private static final Logger log = LoggerFactory.getLogger(SWHConnection.class); - - CloseableHttpClient httpClient; - - HttpClientParams clientParams; - HttpConnector2 conn; public SWHConnection(HttpClientParams clientParams) { -// // force http client to NOT transform double quotes (//) to single quote (/) -// RequestConfig requestConfig = RequestConfig.custom().setNormalizeUri(false).build(); -// -// // Create an HttpClient instance -// httpClient = HttpClientBuilder -// .create() -// .setDefaultRequestConfig(requestConfig) -// .build(); -// -// this.clientParams = clientParams; // set custom headers Map headers = new HashMap() { { @@ -64,75 +35,4 @@ public class SWHConnection { return conn.getInputSource(url); } - public String getLib(String url) throws IOException, CollectorException { - - // delay between requests - if (this.clientParams.getRequestDelay() > 0) { - log.info("Request delay: {}", this.clientParams.getRequestDelay()); - this.backOff(this.clientParams.getRequestDelay()); - } - - // Create an HttpGet request with the URL - HttpGet httpGet = new HttpGet(url); - httpGet.setHeader("Accept", "application/json"); - httpGet.setHeader("Authorization", String.format("Bearer %s", SWHConstants.ACCESS_TOKEN)); - - // Execute the request and get the response - try (CloseableHttpResponse response = httpClient.execute(httpGet)) { - - System.out.println(url); - - int responseCode = response.getStatusLine().getStatusCode(); - if (responseCode != HttpStatus.SC_OK) { - - } - - System.out.println(responseCode); - - List
httpHeaders = Arrays.asList(response.getAllHeaders()); - for (Header header : httpHeaders) { - System.out.println(header.getName() + ":\t" + header.getValue()); - } - - String rateRemaining = this.getRateRemaining(response); - - // back off when rate remaining limit is approaching - if (rateRemaining != null && (Integer.parseInt(rateRemaining) < 2)) { - int retryAfter = this.getRetryAfter(response); - - log.info("Rate Limit: {} - Backing off: {}", rateRemaining, retryAfter); - this.backOff(retryAfter); - } - - return EntityUtils.toString(response.getEntity()); - } - } - - private String getRateRemaining(CloseableHttpResponse response) { - Header header = response.getFirstHeader(Constants.HTTPHEADER_IETF_DRAFT_RATELIMIT_REMAINING); - if (header != null) { - return header.getValue(); - } - return null; - } - - private int getRetryAfter(CloseableHttpResponse response) { - Header header = response.getFirstHeader(HttpHeaders.RETRY_AFTER); - if (header != null) { - String retryAfter = header.getValue(); - if (NumberUtils.isCreatable(retryAfter)) { - return Integer.parseInt(retryAfter) + 10; - } - } - return 1000; - } - - private void backOff(int sleepTimeMs) throws CollectorException { - try { - Thread.sleep(sleepTimeMs); - } catch (InterruptedException e) { - throw new CollectorException(e); - } - } - } diff --git a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/utils/SWHConstants.java b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/utils/SWHConstants.java index f58705188..08400f28b 100644 --- a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/utils/SWHConstants.java +++ b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/utils/SWHConstants.java @@ -12,4 +12,8 @@ public class SWHConstants { public static final String VISIT_STATUS_NOT_FOUND = "not_found"; + public static final String SWHID = "swhid"; + + public static final String SWHID_CLASSNAME = "Software Heritage Identifier"; + } diff --git a/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/input_prepare_swh_actionsets.json b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/input_prepare_swh_actionsets.json new file mode 100644 index 000000000..07ab0b1f4 --- /dev/null +++ b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/input_prepare_swh_actionsets.json @@ -0,0 +1,26 @@ +[ + { + "paramName": "issm", + "paramLongName": "isSparkSessionManaged", + "paramDescription": "when true will stop SparkSession after job execution", + "paramRequired": false + }, + { + "paramName": "lv", + "paramLongName": "lastVisitsPath", + "paramDescription": "the URL where to store last visits data", + "paramRequired": true + }, + { + "paramName": "ap", + "paramLongName": "actionsetsPath", + "paramDescription": "the URL path where to store actionsets", + "paramRequired": true + }, + { + "paramName": "sip", + "paramLongName": "softwareInputPath", + "paramDescription": "the URL path of the software in the graph", + "paramRequired": true + } +] \ No newline at end of file diff --git a/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/job.properties b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/job.properties index 4cc1c1e25..651bae337 100644 --- a/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/job.properties +++ b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/job.properties @@ -7,6 +7,8 @@ sparkSqlWarehouseDir=/user/hive/warehouse softwareCodeRepositoryURLs=${workingDir}/1_code_repo_urls.csv lastVisitsPath=${workingDir}/2_last_visits.seq archiveRequestsPath=${workingDir}/3_archive_requests.seq +actionsetsPath=${workingDir}/4_actionsets +graphPath=/tmp/prod_provision/graph/18_graph_blacklisted maxNumberOfRetry=2 retryDelay=1 diff --git a/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/oozie_app/workflow.xml b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/oozie_app/workflow.xml index b89165fa2..7aa667a4a 100644 --- a/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/oozie_app/workflow.xml @@ -57,6 +57,7 @@ ${wf:conf('startFrom') eq 'collect-software-repository-urls'} + ${wf:conf('startFrom') eq 'create-swh-actionsets'} @@ -120,6 +121,32 @@ --requestMethodPOST + + + + + + + yarn + cluster + Create actionsets for SWH data + eu.dnetlib.dhp.swh.PrepareSWHActionsets + dhp-swh-${projectVersion}.jar + + --executor-memory=${sparkExecutorMemory} + --executor-cores=${sparkExecutorCores} + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.sql.warehouse.dir=${sparkSqlWarehouseDir} + + + --lastVisitsPath${lastVisitsPath} + --actionsetsPath${actionsetsPath} + --softwareInputPath${graphPath}/software + diff --git a/dhp-workflows/dhp-swh/src/test/java/eu/dnetlib/dhp/swh/PrepareSWHActionsetsTest.java b/dhp-workflows/dhp-swh/src/test/java/eu/dnetlib/dhp/swh/PrepareSWHActionsetsTest.java new file mode 100644 index 000000000..ffcb7aaee --- /dev/null +++ b/dhp-workflows/dhp-swh/src/test/java/eu/dnetlib/dhp/swh/PrepareSWHActionsetsTest.java @@ -0,0 +1,97 @@ + +package eu.dnetlib.dhp.swh; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; + +import org.apache.commons.io.FileUtils; +import org.apache.hadoop.io.Text; +import org.apache.spark.SparkConf; +import org.apache.spark.api.java.JavaRDD; +import org.apache.spark.api.java.JavaSparkContext; +import org.apache.spark.sql.Dataset; +import org.apache.spark.sql.Encoders; +import org.apache.spark.sql.Row; +import org.apache.spark.sql.SparkSession; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.fasterxml.jackson.databind.ObjectMapper; + +import eu.dnetlib.dhp.schema.action.AtomicAction; +import eu.dnetlib.dhp.schema.common.ModelConstants; +import eu.dnetlib.dhp.schema.oaf.Relation; +import eu.dnetlib.dhp.schema.oaf.utils.CleaningFunctions; +import eu.dnetlib.dhp.schema.oaf.utils.IdentifierFactory; + +public class PrepareSWHActionsetsTest { + + private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); + + private static SparkSession spark; + + private static Path workingDir; + + private static final Logger log = LoggerFactory + .getLogger(PrepareSWHActionsetsTest.class); + + @BeforeAll + public static void beforeAll() throws IOException { + workingDir = Files.createTempDirectory(PrepareSWHActionsetsTest.class.getSimpleName()); + + log.info("Using work dir {}", workingDir); + + SparkConf conf = new SparkConf(); + conf.setAppName(PrepareSWHActionsetsTest.class.getSimpleName()); + + conf.setMaster("local[*]"); + conf.set("spark.driver.host", "localhost"); + conf.set("hive.metastore.local", "true"); + conf.set("spark.ui.enabled", "false"); + conf.set("spark.sql.warehouse.dir", workingDir.toString()); + conf.set("hive.metastore.warehouse.dir", workingDir.resolve("warehouse").toString()); + + spark = SparkSession + .builder() + .appName(PrepareSWHActionsetsTest.class.getSimpleName()) + .config(conf) + .getOrCreate(); + } + + @AfterAll + public static void afterAll() throws IOException { + FileUtils.deleteDirectory(workingDir.toFile()); + spark.stop(); + } + + @Test + void testRun() throws Exception { + + String lastVisitsPath = getClass() + .getResource("/eu/dnetlib/dhp/swh/last_visits_data.seq") + .getPath(); + + String outputPath = workingDir.toString() + "/actionSet"; + + String softwareInputPath = getClass() + .getResource("/eu/dnetlib/dhp/swh/software.json.gz") + .getPath(); + + PrepareSWHActionsets + .main( + new String[] { + "-isSparkSessionManaged", Boolean.FALSE.toString(), + "-lastVisitsPath", lastVisitsPath, + "-softwareInputPath", softwareInputPath, + "-actionsetsPath", outputPath + }); + + } +} diff --git a/dhp-workflows/dhp-swh/src/test/resources/eu/dnetlib/dhp/swh/last_visits_data.seq b/dhp-workflows/dhp-swh/src/test/resources/eu/dnetlib/dhp/swh/last_visits_data.seq new file mode 100644 index 0000000000000000000000000000000000000000..683fc0e693c3174f4d863d95a31361c6651565ca GIT binary patch literal 253188 zcma&O2RPOL|2}RMAtNI)lO*Xl_DIOimYEgDad0?;bB;|aNw#EmciL-=zuS)=+~DJC2n!*AmW zWllMPko;@AY`1K$89oZr=MH(qB8b1Zdp_YFPS+d1`2HfYs!%`O#6sb8k2j3bqC00z z&)b}?eq6qXl-`067_G16cISrV`m?IjbtzXM)x(A^-p(~yCP6KgKfjy#v6hfcw4N0m zwfx5QS+;#a_*q2j8q^?L8EoRLL>=8_I@7DEOm|cbT{wb7VABk8zysSdbL=}T+Zg2 z-{a2Vu%^Y2?^cc_TAZD-Ww1H<*1xZ(sJcv0{s&5qeE( z|9<_+fpc8}%+KI?Ki%z*I*WQm%wDszaX!6^{p1kt%LlGsQm=03e<}WT=pJzXstfJn zFWStd&=3H~4e(M|I|3AC1PrZf2DJm9pq@w_j@EdUF zRuKlZPbOsrAJ0^Wa=EZxl)oluZ~o@%*lC$ZLJ>wEQdyhkBC{>xt*CJPwlBdtTg)9d5K?NAWx=TDdN=6S z^II(6?>R|MNG__UIB&T=6|=KTkM0(o^4O9Q-n(wZ>6d%MNv9{pQ2eoAHCo5gqYM*P zQ=n@!{5I>lb=~Ez_Oi810VA1W1D`vw@;0S5k4I(0&7_!j0_EJe{RK9N$lv$r^)F5D zxch*I4zm;dI1&d(OTqp+jR2hC zJTJ=@HgZzG$hAC}*d6|+x7>y%HwycWwx7AbGwl?!zKxtdI8?A{DD0$^t}!u}3_%T$ zh3jS2_jN$8RWVXF%7k7M?#HRd<%EUl#TJOWtA9{sM|Ufws65wyb8~7uy{k4${M%O( zmppg7^k-|LQ*`@RXSPBuQ~i8iIFGzDG{RwDej*^EYsKL2a%{_PTj^ zSfj}Jq@2QipQ0xw>?kLMGHIQe}ke&JTb&N)}xd92I)_? z-dF)#h$~Btxv1z%G-g8m-5sf@tfai?yBO}Vs*Ga zRr^9F=os??=i(+LM>)-JGaVHXv~peM1-pB_QhoDc=EP)H`DDfWl?pXK^|FU&w3JJ; z{3eTr2wfT$gKV2T!|N-ZwhKN}PK#+T3OBs_KD)ZUXKS@jW{+@7irK=gb}``-%`eiQ zML4!dCQD}&3M*jDGLCz>pB2Zl zdFyN8r^&1}c7BBA=*?VfBdp-I0@fc1zta0ag!Wn%bac&Z9zpd>oubvvHBWHv-4F+b zc;f7d0>La>Qb$T~f2z!Q@_DPq4-Z=u89#rc@c2nVK^l7h5d1lUF#y0wxVer%%*n+Q z2_<+UF)n{#YCTJ=FU6qvh6l3r4)_O&QZTpQ6p3U}t5%k(cMX})GB;V@)ZSWb3<%h( zDowmcBW~2q1TiPAx^{crg-L%l%93QF#m}BaE|~M7pztLrr_vy&;tz83wGM|53`6vu z=ksqCB5$2yvAZjVw7^$$jUs*K&7tG%o58T6c2n28c4b+s5z*@naS(0`&YBOlKJc}( z{ij2PyIvF}#<`Yegxzsi@yToWHZv+AuiM}8-L=9!k`H~w9BXuT9mVySy#Cnim)Ffj zFPhEo34A)NJc#}>TGE7hD$O4_1uzf;um81wJ0!u*9qxi42m?w6HTXk~bdeY}C;^>70v_qhBw+sZDD*`5#=tY+pn%gmn%8cZKnHZ_!72~xxt%J%7;Q?cx<#H1`) zDkMtk@;1W8CQL6bq0p4`g^QJ`Yp9SNrX-XrJ%H4Hw%{>;w6S z%>Wh&@cQ3%#ADrYaD)Ru6d{a35TJiCPSD5T_C$>S3F`&o_lqBKFkKKB0v?G6lo;G& zxRWCe>+VYY6%i0vU93II&?_~~K$}?USj@i0OTd?SW=N@cciy_ai5!-QT+=)SDt}?y zFkrCOWL?t9yZ(*)RU$m8?lg~4=PX_vD~`-Uzb#j6KE)a;OcDO_-V@Z9N$RL(rXQ4w zz518oj;vgwf-B(>p(3A{>t-o$aEAUcFEf;g39HLh9WLKZ)$U~yj7f)N*}Ur6iexQ+ z(;>iRI*cyrDpZAE8LC{5rt2|~$bAR5;h3Tx3Mm~4QNyl&PT0KQs%$8D$8HnX)1Y0C zf;9+Mn7KN3zmVR}CDUW$6b!4TKmBgyS`#b%FVW*S&sXJadT#JsIPf5|9o3(EA9ocL zK30I%k$g(Y9)rLjWW}L|2nQqvp@gvq#~498ht1#|o_sK#_q|3U=5Z$4Z=U54eyzlg;ze{q?TC-%mRw=pN1W)W8C@g5DC?Yrca zl6A#fcj=!8^y;##%s*yDSl#cCBD1DrDFf5si%}#aD0B=317lnbk;n)`d1h4maF}9&O5QP zHla3;D<$=$rI>36o>u9+dh8i`6}PQSo`C1PbDEwVRK7_biqlo6z8|)O%Evm^Q_{p5Ly0pM763)~%^O5902#G`Jf{M zBnaHolnW?zrz7{bE$zLaFEeo^QJ+ixI6r|=kAtPX!heZ^!kv`do5Ef0^uj-A~OWPEx5M&QVxZ03b` z>bjk5-0In`{YEFoF8WLs`lBsr@&r)i(c@d0`=`Aox^R4VU-x{P-%lp5xBL1E8Y1#T zA>l+7KLe=$*a-&t=AO@otUsf_nAzAS=wHzeoCZ)Zf(vwk{|G3I2sorY0td5qCl(o1 zeO)Eu<>}EP7iA9mYEtTcMY`j_(acqdx+dY^eebcXp6K^E*FOn;XHduyyhJchp#1FF zw+BWMz00bKKgf+hk%=K=lh@4?M31%7sBMTiSGM3!((6ZAnijv%f0D>}9G@%_7^B^A z3dgsQw`{_1JQP>3EI0lhUnm1=xUNfQWv%-Y=-#sgiJ*fAv>r{l9;VKLg)9Bk1ihWO z9CVnvbh(JbvTBOpkDJ2&-nMkU=hG;ivh#|~UwAIpVbca{8ghz>aa{u1rl0qwcBp{M?ZHJk@%iHaP7maDxx4u-Ku5C~YP zftINe#2$zAAW97cFwFtrqOG-nw$T3dl6U#~`Kc^-{IRFUUYjLdK(a4O@h6$uj|+Km zM>&R4?=QF1o$NmRDE-va#_@EzC%9S>s@jGmy+c(yadZMVyV>2O;x9H0eO$#O(`OFW zw5VZr$0z+Z+ul95rRZ>oN*+z0M|Zpqi_ZO^#ht51%{%Ga%d%wt_ykgS&*NtH6kktO zhNwM<2kN^mceeq4ir~}K@G6l~cPR8$D7;Iu!s4^=cFCG|waYENcoEiXS-lB!tjp+# zAr@wJ`5!%|f+x2l2O_0>lpXUJxMt^+nxg11{^T;+uCLvEzdU99)kVLyNy`=z(+6<+ z30_>BM_>haL|~!B55xo2^=G;*a$@manH?kL?W_r6N`a}P%2FP{ow^jEnMQ9&lZJ|0O| z8_D(3U|;F$^SA>w>aRLE>1E2tB?~iu)wn;Y^c&QsqLQ|l=vX)Jt4>oDND`6fIG(MS ztS2)Xa^qD8n~|WOO+~{c)7F9XLbBwSUFCZf0oGdw#n&8}=Ef`dW&MW6DN^{Hv6Hd# z%lyieHk=0)XX@0vTz>_0&{G9WQP2BOP88l-1_0=Rmx}U#K=>!Uf;r+uL_}mIp#%p< z2n^*Y48bE%2sj*x#Xyi4JONC+NEjZ1cZJ~q7yY}6Km*?O$g++nl8oQP%K?UVMIpS1 z5G(x|e}0dHoR;SmG5`CO{3-8Sa3RzwQ0=1fRW#qHBKg&^JXH2kSJpAuPkSBYe})+&17ldHv9CQk^wavBJ{k z%*~dS#7+{%MO?vc$gSP7_eloqi>@B-kxynWR*z>kNmSQ3k)lc2zkirL<(bIYI<<3{ z@bl4^m*NjsrB{4H@w)w+>;vQ5`+mqqve0e;2oO35)qLI(J?Igcc zU8bM*vG|JM_)lK||b9)UVt`n|JYO0}aj5G$zPVYbOWVRX6u$fM5?I`Ua z5APqf{3?WdKX-5*J}0vG3SxBjm&Aacl#f(zJnt2eJW47>&bpWMy<%5;4g+R*sEV8e ztNh8?sl(g=C_q3UfeQZzn1AJ>Kw`B=V(|nVQQ7+EX(P6X|BVQLgVyjbDyoenK$Tow zRj|0<1nY0-O~zwTX4>TPIPZ>AvL2&052P-RHvKQ{LaAFvbC;ho)1Bcu(fQ*_F|e39U6>5GPUzJZ)Q@vUCRo;l(Vhw!C_M0 zIpPd=x5lj2#Q(UVC4_ju$OjcXr0cp`w0ECZ_sJ+t(t7i9Zc8qjV#q^1xBdniUECTk zu|q5Mt}JOTs(1(SnlrL3@wmYl;Q3QuE86xPx-M<>8edTSBB!2w@yeS=T09y}v(N7F z(0#U~=M#NDcG&ni>b|d8VAXB%=l&s-;LuS4Wcbeg2iw0PV~=nEHO|Qi4{0wW57!-)aH0sO!VEaBmW7 z-|Evd)P0ukXOOm>X^J=ETDptaI&N%-)0prI-^rsq4$7S{9gXOF$YH=RD0h++Za;vvx$ zvDjdAvWNV~9UaWiT7(||@~FiJ6->An?YbiosJQlY zCm*(S^PFfN`_8@jOMKPL9EDPbJoift%^?#FkNt~yWGhq6vKR&}Rz6qh4MF;DsiW^RmiAt({xJ1uqd&r7G->*an}Ir3NDbSyZnJLM+Hq=x?CsjZgdfe-BJY~V zO;_)Gd7w4<>g_z57p^Z`r<77!ojdV;ZdMxoC33cK_mJlgDIL`px4t(3p!jFk{M)^P zJK>Oc0@l?@7mD>j;5?8BPY4{;ECe2Ehr-%H(J&yq=Sl!s^(^VZ&1Xi`$(y7{`7m(tF{xcgjn%XQ(`k$Gv+eSZCh&cpAN z-)13sWJgn3FE9s!rp-)p$pQr%qIlQ+9gN}NssxteMynh ziJZmk9){h%{yh&`yehD|eqRt=R-*HBWc6}(!C(n?SSK`8T~k$4<^OPqF-(aiR_XfG zD-EXh5bGG3QUSG>D=adk!LM1)x>H_ml)(N9*pTKCIBm4t+IDhF6)#2Nf3{JgJc5t& zR@QahZN96Yd3JX5?b@TsMfrqA&Q&XG3cuF+5@)QhoKh~PJZ!O1QTq+D^kA#SUfBXy zy&ey%nx|S?gL}8K=fth|Yn2ah7^js^NOFyyPD6hiv8Ysc8?6XRuiP6n8;KM74T@}9 z9yVx+pVo{$F`r(;Y-wyj=)#gU_5J!h_zLL~30Z^8cWX``4cGF6LledG2g7V*draNr z4;=s~X8&f)?n(Z>qin)0Vl!!P#4&hE>EXufq-;3|^$&S5IK7hWlYAU^u7pvZROilfk z-2_)W(&8J{l9PPVV@$NQ#=EsVYAWqq#0yOq&A1gyt>6a@@%4JlHcP|M1)aI;;esU8 z_*%zCghITCJabFGxo6h7A9tZ_Zw+0;`B;D%@hXrOSYvH8w&x!NQ}_A)dh}&x zfykp7RJjjvUL}HZJ9%TX!92Z*)jRdvHo0 z#whL|HgGrSUjl=4pqMkGc?>CAz0PVyDU80T51J`r9h}Wz&a$!$^rvLy_3JWtc6Vz# zo0Ub{^5*HXo9;C{4;D`ioOQTB)seheXt}f(LtmC5I4>UR%zc?}^qocas&&{%NoFDb zo%xbfe(m!q%!E$I5^gVHf1%j%xfRf#(!y*)b|rhI&oQshM_Fag&Ig{;=dAC4Yx0n< zfA0AMAKp|?x{}V$0R>%=3n7tF$!2uL&ILws* zMjj2sAA9+K!^)Um?)e51R@fb-4JjXwMx>lH-b;S99sbMc=O< z27KV5it-_HM`N$>)_PHv^)Qz^Sh?Y7hLN+g#-UJRkG zZH>;DaQb;EGbavdU+rRC@DAT==x_ny_gg>s^h6)%2lLYD<&&7OTKS!dl^+#3ZezPO zxpK}z&MeQ{;vW*SzWZ12E}&(*+Y%|Ci6ppug}7RM+&+7EAo7dlMUW zo5)GPib^vJ(&FPaJzl|HKX@vS8I{-;>MNpD}Q??jSPEhUs!3X5wMKQPSfmi)vOk5?p#vz&AZYho-HR{$m z>CG0yUJ)-(F)<~1MIb9}+TFS+E#^eB#nW>c_O;wICJZGzwZtlEch)f)Svd&wl^4kz zD@?DkT|3ZnZCI&J4hfb26~`HBs0$lZ;$mVm5Bk*76C1&?W{SRflqe--nO8K>>o(?Q zFSn{~9X9^p{ZRDgZ12+w@B765BnMDAGU=jeWCBsaVO=50NGt;52*hp#jwnE>U@<@y zARyh*P&gn@uApIMMia{qNV*h#*J8q^Rz>)u^i%JOPh>>G1w$adM)z}nksZF_`9K}* zbIgqs>EJQlFyo(^6xCZ3gp^_o%8;#$d{ZvutGE^1zBI?+e{rWbg?}vT@pH*6`7#y{Bd-OIFBUhFEPZd@%2RAVPmFt1qEP zda8>(n?pJL=dxaw&h2Mr;SSx#_eWwCEFzn~h6XHr54hb@zE~2JeJ)1p^H5#Q=C|2DJb@W|qde zxbwFqbRU|v8BoR1O$klbhtMK9$E6DlhHYkxzC$@l4KE&YqF2S&qKmD_&}LqC-oh z8E3kfiawK&9$R<$^gWZh8b=+mc-2!ZdZKQVIU9~wUy52h^?N8)GvFhr1L^eWo5;er z!>`4D>ECqjcs}wi{oN~?hA8~4+|(vggG{o}w_E)C_TXnY+5Gi8`=>^*x0|lMA_*2k>+T5QF7 z;8PFMjtc$e#>6K#-$V*uv8#DIM%QsZCnmw~^{RYC-gWg`CWYcFdr~bcro3Qp(mAb%(5B#}XLypcdhB30yke}Vo5f0f1W#1p2R z!s8bO+9`xMWDrNwBV8%9J06HfC=}9J3~GnO;IQ!D$Y4N91E@zJrP2JI9v}HRkBUJB z!9nxD*d$hHn?W8)Olf3w3G_&B_&?RRVLhGx^yeF9ysEDu$t!_`sB$`?d|9Mp!s|vV znI8~}o=YA(9ZW{)b`%|_4P1HY>SQIRXn0I!a`Z-UYd+)hz>$LLoXbe8B=#%6C2qXcXB`pe zrM?Qi52_n%1+NB}dMoJMDBjCU0M}CGvxw!r+OLOLVyXZMQU#S%q2M5rQUFknjI8Jz zKva!%p!xBbM@}KsP2TLIg(6$rPi!{VKMO{1b&U;Z=<85DDY^An_n5}5g|Wp< zzlE2@rg4`uP!8v;tJrJC9|C=<-n-6sZ zNyAceV$#ri>!(L;F~iS!v#cb(i5QB+tJU>IIyakS&MzrjHLsD!cL-O-NQbbjtvwdV z3c5IU$6nlKD>fw{hjwUT&iY}FZ^Y<6LFxVW0l!$ZKS^|deT5phYMy3FGfJ06q3^}6cY3eJ% z2}lnFR2PAA!QyPxbkuFs-Fi5siL4+WqVTkchxk8uHtPVue_6IXHQ4pgmckatRDYZ#; zp!;~7G05XOoA)+Xqfv1nZDdYmHNAZQ{I!-S`a&PF?f4I5b3aBD1rAub+dgp=lZ6`s zuucN7j;vH5ZHIBi5mibcM-rS+NW0&c6LTL#EQa&!Ekl`3km4dg3yGgU&&UwVmg_8G zw#@4@NKqc=ARAY=7xVPz%+kdfNS z;uxIUFio8!Q%?5q)tUtV7a8oyqy;8P=~3$k2{envY%NwmSey>E39FRv^}N6a?d8eR zX&#hQ|ERNl|FNJ-Dv2~bF|YcT>w=1_*{{QyU)Q~i*~iv7eo==2nn=nFFgbGS$HUO> z2oxNP0zwhg)!Y8}?IK>T|H=O?Y#dAis?BY6Wg5aSKpj+Oi!Dt{_5Q%6+K zIA{jwZ^Ir$sJe)e1ZKPWLeYu5AL^<*9w2vV@<-`dH{)4QyB$p8afZiNqph-zvu?Ic zK7J`|#o;Zb6<;T-&3j8$I@R&gsloV7bffOjb5^S%woN`$b4*HadHIks0o|46e7>_G zXH|XW)^Pf8?ohC_^=KAQpwO_Q^C1LIV4(4OY1v-o~hlCUE^!UOXGSn$Jv*Eh`?`4*L&C94z|-9)m{9=DU_ng zdnMrtwuL+SiyJ}a9LmN+zpu8PGQK1*>Ph0MGcFL=+X%BiI*n(lR_GnFgnWC}|s!*fR+-f#c9<9(8=e)5cOs=RrycOutVN8lZh2fslXe9Ua} z&;}%R3VNG*XR19O5c9o~;B{oa3*09UG!pvPCmb-&ff)OL>O7HP{jWv*O?`57$9e-_ zMHZ@TUCRn$t0Pv&RCId7N77Zuec{# zE@waMVfFcO7@**n_S+X`1HNzv3DFle@t3(b*`gOV^yOgFqEIe)Oh27L;OSKwBUZb! z6=&iumb7Iv4s(pC+da{e%0&+Ir7Lyo*v&x}Cf!n&@@_fl8okA;%D>D)mhnfBS4=5& zR3y}3B)Rf2zAMJlyb(!r{`Ef=9-4DPjOeblq(Wa~qjn*^($*I#cLXdmMK&qb=5vUQI4h#Ie@p<<{Bb%evv5c@ym z>VN00V@yxS8C!d;Saofn&7DhI^Dj5V>Q2{h&ney}S^BVXHzkTGOz^v_Ex4cBQX~rf zRdf*%;#a4!Pq~{cQ&+9a{z(5rpF-E8t)8DxK=-&qwqF^jmuF2$XyF==Sa3I4FER}# zcdg$}%hFbujcLF6t60f}SFShC)iZ76bcqSITzh6&Jv$+adOvNM2Dna{MfpN7kNXI4 zH?NoxrIqAD36XJ8PV2`XpWG6y9>~15Y|ZqT(u$1eI+?iv*U9<&VG7X?5h>mhV6YCn z4vxwyc%A1v0uwyKj+h6Ag5&_g5hOUhQX`_YF=V1A9}K4$PkXQl3?T(&Dfc_?q}=3+ zx%l-C!yL6dUOb&9-r5U(7}ck!-)DARtxnaI!5HuU@Rme(?d_+LH@!XMzei9Cuki^H zTw^X#_jhleiSReXSzLB z)*{;3v$K(Lmi6gX##VDBiZJ2Fk_FzHlQE&vxhE4IY-&~9D_@B-R6#yqw0LjSz_p8z z-FY=N$cdx7k;{_|V~(&59YqUdx?Fi4*P9dmsbRt5N}*cTmm01^Tx(rE9a`8nqf=I+#05s)Pj^iJe#QQ12T07Tmyd3F~Yts0yI zP~ip#;Yb(T0R~6dVX-d%$>2ia;`Xjs8w?Kbfc`&iY>eUAcg`sdxHv@~DR6;Ih%V63 z>hNzD$ZxRjDOTZWL*Y4~=>L@|34fB^6D!p{+aE*q0b+PA+=I-L-bDr?T5ZleH}}}_ zd0s99x!6LumgzU89ZGM%IITPjo|Mw~QuMo5u@;>ut#FVmS*_Ue9;GQnQp;+vDa$2h zZE$=$7a?w~9Vb?>w%^P+l5u5}P{3XqrZ`d$#rD`;cypB`h}hC(N8xsdmB6|HomyWnD`d&az zu-C+5jBzkmjo&e4eUIPjJ|NNmjnk9H*tQ-|FD&h7V3)Jylci{uL9;AS%WKk`r&k!p ze(U%&BfOygz}Sub9p^sa@zx<>;k(Ooi+~j6lGGiujwW4@w_M%41XGF@Y21 z1vj<%RkK+ePt`^GmZ>+!g~Lu+Y@&+j%;b3PFNJe4hfbL zp?WIDBH}W#;u2zFe^}#xVQap_l7il`M%d6wv7MK@DWYc#P8R*3Q9SWv)%-C<8vLxy zbzsy2SxEvGuP749_Ilo_Sk2CTMCm>Z3#x2=)K!?Eb;7g+|MqU;X%>!0sJq8m?b=`K zm1*#nuerY}LO{KT8gYfPP@M}IkOa%ho-O&Ou06mO>6Uq|G44(-tyNAj5N`@4}+w8NswA^?-fYd1>$P~U}phfM@LeT9#{gfsZjtkxc7gy z4$xQ(5+FycR@y|N-~n+V16_acPPP;ZSBp16XoIaXUh^pTC^Yu4be8p{%mKq5g42I#?m*9;dMEd98={Qb~2C zPU*aj`Nq$q=VzdtYhmm!u%cckmc`a(pxh+CFp0E@ubn=dG49ACR_eq43>&mYkaNE9 zy>0JiplvFLaLPz{8fsqF$ct*X&Ppn5`0PB{wRhi44}^UtKW-LNr$3p3<<1Kn+;MVX z;<_gp7ZtDU8au=jsjyG!Ogk9N)kk^wXuEM=u-c#8Tk+8^fD>_v?#S+LYKliAQ3!7@ zFxC=a8v4I4+<#`-%pM)9$5jm^LTwc8VHA!rH?@+1@|l}!HhUtK#q7>I#3P5TOmFc+ z|7riUcg!lRJDoYV?DgoL(F{VdK~L4k)(6=r6mB;$(a0<0#a+42tXhrBWM}M6R4*94 zSy*yg(8Uq;q~%#jT)hV2VUnhDX-3_oaI0&FZ?ci%f_Sd81(s*bpvPj=Quj$gbJm22 zG{ooqShA(jo=%5b!$H?K92@>AaA@Vy%o^#6v^fi}Ui_iJS#{k=XoInQNcH)nGJW&QccHBap2mUR8ghs2l-k@y_xCpiN(-x&>a28uC?fD$JF$Mzo* zzLK%2lBldO+Ww!~$~o|U;$la11r0+iSRw{Ioj{z2!QP9F2NLfNLm}~h>CJHl+QjZ) zQq)orNhyLu3HSRC`%6?btGB$l$7=$5L;Z~nQ(|xE*+ee-D?V)yzN{);8-c7~Sl1-) zj*P$h4u12)g5-Q`xb!ihnD!3@55X6nR2@MPCi%7+Iy5&*s5+R>bY#l7x-qm%ceoEZ zx#!oK68yJ75Uehmk$1uPHhSmR1L^lejG=U^ERix5rminySv+FiY;#pSE-Pg@z} zLt%1ryJY4->phvN%1yGfLkTY5CO^f#Xj~0)vwA=NPVlBryVGeVt`Ddc2FIqUyLWiF zuQnX(UT__qcUx7waNtP_#O~FvRQtaZLl=5o7l@S`srKlHmN=8!ab71_V%dY zK5;QCzPMh5mkqffQ8n%8-ckSlY zjOg6cS*KSrO-!lteyF<)Rs4LxVEXV}=drQ{oE&D$Z;JKi7IPRq)5RaBwom-L^X40) z+zSdxLV=V|@Zgzh@kQI3^z_|t$xDsCoR6L{lQ{GxtgtS-Yj4pqpO+3|l9G+wrl1ng zx!VM1dc0IjF}=yd)wo6bp6@G1_&)wH_Mq{5s&xa2=9_4uB1LSOM^X)A;^d|RvRee` z|Ng3^Nkr-IlEUG!HS2dKyC9S!VjI%-*K%;mb|g?0N_0H8GQ6?V(m)rMKAp~U5M(aJ z*waCF^2wV86J2bz6x$!xGGw1dhL>be(Z2uT)MHZ zpv%|p>V>N*jJy!Rjh!xuf*<$r>?*ym{Ves6Ed2YjmNXy1{);(Y5X*uHlumZpN1X2S zDDV0N7Y8>FVxZ6$ND7y++Nn}k6T|lNgp8IyalPQM-o76wq{2z!NY8TcefBGT)9eYU zV~2`+OZPQ8?oKt5GIE94{|m|Z*Elo*i}A)gfhBbm))NZG85_L)@6fI;rsYonb28d3 zm51@^3t~LAB9lR5=h%G)vt>~k0d+KgJmF8^ZU5tK76qA)r=JHQKuAX zca&|g<3;T-nyoOJ2hBB13j_LoZ?47PgGn%Sr9eGS@EeKGx*$jNN+Jb?+8kRdja6?df%8f7gcT&o&iB?qT8QPQ9Xy59(z+ zMac|Zh;F5p%FCY!94ryL{sCF=%;#7?$s?-pt3g%1i4Q(ZJas);|B=JGLiG|f!a4Ri z3jI>)_`(|lH3Md~;nPVSCK+C5ihKs#P?2q3_>8`Uc{x-0y${0dKe8&tGn=`-)5?FF zhrl&*w$j=LI(2TlZ3gs3bCuL-Z+Y(V82;L!F|<-3?P7@g25=*?eaPh_>beqm@Bu~> ztScZ1?gRwbD1&1ia4tCtd(`vFnp#+I~(iJQ0+B zv8_X(uf;fs?XuCLQ2spWWZ=7^i?rMkv6+Qmb4-8l+J!(i1p8|IpA>nQTP7>t;+yb! z)>%#J{xNk>MJUctzB*TJs#9Is$H02@9SDQ3Pb6$~!+0z9NQAog3=cZ%*4-LTm6kj` z2i%I(V3i;FFo$VXN?`z zVY$>cm6MIh^>krsFG=q#gLN4Szws?UN~-buUKMCfI{LR#W1J<16@tDLmiG7jKaB;r zz^2dDe*EDZ&BMQs<_Wh_B!%XtJqHjHLqA6f5_o64D-wYs8ltY=9za3NqvXQHu3YVj2 z@Y^y_Opw=fYaQ6)`20!$HeA9Wpz$^%-lFmP>#f|3xbgzJOo`H*6vqw=vDl7*_&txY z#l0*u)-C4mQ8M2OkaU5fDlQgAISnh57D6Fh9_phjZ?z|LLItn1r|<~amzHTRHS6G8oP14cQfoxXmuM8 zI~DeaZO8PyERg8>wApq0*Wo^R21E;3H<(Fuh;-6txBWUFS(4mBmBnVrF8YJS%YbbF zymY~hYwcL)B@@ktGg|iv8Fg|zt3E>Cf%4S7WSCGn>3oZYhAGE)Ap^9 z?oG$us{+GB(Eo^D@oQ7Cb5Kk4imx7!+`QauefLlfOpH!$fJfnj!cze-|34R8@Nf_l z$Ka6;#DMreIV(}`Ig(z09V`MKje@GVxg$Lw>MA-AAjF#zW3B(N1DmeZMGTt6VsbHg zylikPvU1AwOW+X-G2Eqp9-+X~lX7_Ir{HHjwwzxgkabf-!uz=GWp{iUXFKUt-o59+ zQ~Rid@5tJy%D&)H`LHp&dj2fcHum#e%dugXPG9Y93ws%>VMt_}C|C$>$xAOSl=@7{^My<0B_npS> z*$bVoW~LOTQ|3`~yf2aF)P5^G&~Nd*>#gU?*L`y;F*6mu3h+xVKOGYnt>D?2k8>+q zpJ_;j)1lkb47)NobJZqcpTW|?r)jhHVb{|8?m#}Smz<%1`c89S7U^@T8mmy%C`w#+ z#-H7;h!`i&`kfr_;i%*H8vA*e&cpa?g=TGs3cngeR1JwF^+;FQm6#L%{j@3K!)siz zz?!xJC+kmx{2MH5Y{5WL)fJ&Q-~JaY8lTQ+|8bRjK-jepJWeU@HK*0hB!?##S!id; z_SWAedp(#hx#>9SMVECglx7jm+noh{0UuJjCxK9&-aGj?`OkbGW%!L z+C-SY9%mdO0lLn}frl){+j}{1{JU!jIz+r4UNOCRZ5hS!id=^jY}0;eqiiz2_utrf z6K3Yx&&W!E4$;WDB6~z{)CCVSz=HLBVBw&!P$L2s?qs719wFg~vrz%t={8C@m>qE! z8&EIeQ2sl#nCz}Ic(cJ|p_A(Kz=d&{c(8;Z4VDm~UtoSLAdaLlD>K-;R_EQgFGB;K za1bV9XMgJjX>nwGL64kbE7OBso_K|R32!flnTQ^~p6LgR%S+|5$57VHNix;THxth> z$%|!*@W;K^tT)t^$Hj@?7QGefTZrml&J}G@I0Q=?R{TVvaxlO9nTS>tHxc^tyLCHo8>I8Rp zwfT=I{m@rIK}cXUbaNqSHI z^n(Z9(%nIo&QkbjU@v@xd~gz5(rD^YrUN;nb$XDPJM}%_BM;SXC{dp+YzS`wr;;cN z9qCkqM@0}E!KT_@pFx5V?A89?I;O(ZDqB<36fPPAzs#0h0P5K8GDQ2GI(Xnz1RxxX zjYZiT;@Ywgszh2Zq?fbZVL(n;$z||e{;tFuKbdNDBGJ56uSC^OeVcYGzPN>Jqb)Kl zO{NZq&XC~3mdD3zJOxge*~@6+Wd-h_%dItwEaMH4DLHAG%;1DTLoK2AUDKhb288nJ zSzm1GU4dRwd%F6~24dcNs$+yKK4~j+PuzQQ)6WsUCGwi7fnDFJ#@@4G!lwRw}dn(H7ZD_bR!^0NDC+>AtGS_D!=^< z=e+fNKluA&&f%=HV6is)+0VW2`?_A&j_Vg6iwf_+Y5snN95(yAtwYrHmV)T_K0j|I zG+%k!dVBY_(6$!}6K;dtyw8HU-sQ`hFcF`8<%8ZpXM%mz1EUB_z45B}@eHQ{a`Mxh zA-hfs8VVEd$-2Zl`E2N>=L#{=W3iNYtOGfqC;h|ak_~u zqBo6UPr>p)5~O1>E!MyVV{K!Ja0fj_I1pch2DO!k3@FY(*9)NvsX+daBH@UDA9HN! z0V+EecLz|fARVmGa34E6pmPQP@t^PhI~dH#0kp*}0g%7}?(X9Z8f^|(v%T?ATT}nX zjkGNmcmwILp@}l`ND*KJ*V6MO`gs2~aOLjbY*H{t6LfzKsZTm7Fr|F|bG4;Tb&)rO z21T~o5I=zTi7%eJ+4)sjwXfQeC7%1~qBg^K7tJ4fXNr9L^=7`I#zkL)KMqkMp+ld| zIJ$cw>w?J+eIElRXsd`X_dGn>Gt*T~P>ebMOPAY-QMcsg=-uF)zPdwh${S+hZQ79j zq`*A32F9>y!Z#_NVVarykCJ_u5BssHuO6aol z3kdS3iUSr++|3@VDjD+vA23hNUXat*vLA>*>Ni)u>Wt^m(h8|mzTGwD;IPSuO;e@2 zQdDd1R?lv$ybz#=Avo`NfN1cg;o@~XRJ~td=bHywOdc2e@6?jJOs@? zffXmc8xNUw<=V_|-!r|68xa-=9UzdO^;mfU3hnEF1f67CAc;alGt<~V_GDS6(Ako} zL&uDLHa1UdjR=)dSShYZB=@y7rq4e4;_iUXwvQ!jabQxwWb1^>y&sr$PTtav8ot-3 zsd~DD^*++OUBuL7TPm{ZT<)={SXfYhd13PMEH|^`tjB@b6-c?Mi5+Uy|2x#WiYzrE zEqbTm1fYh-Ln?)SWyxcp-IP1{Q%Iy+cF3mj+e1$_o{&=FYnbAiHRJcC`Fk>WBa7{m zZ^Vs!JFOd(?+vC(uoKjtf*>m;^Y4gT+dm(QLVi|+MU6(acnBIS2jrPM_Ew9sbP%v} z2b}>RHMB(9D9HZy_y%L`r%^MQ=*B>N4vSc%-I`(Vqa%(JX{+)P!7l*|$_g#1NYNp7 zB~#da1q2t&Zq0R5uUVpa3m)9VsOHkGEbS@l&QrKsBhpknlAhf?L+M;Pd3lekO2+0* z^(@0;^+V7xDdS6pmArV%IF6`Y?%{p$sE>|0b6nCx+dG1E<>9wFr@FEApR+ysOnEGA z1Jklw-EJG)csHoSQ8X5yt|c9A{ltfvDzadW7gENyGLr&&5U_3{tEz1H;8 zxv=-PKMtpVDb*U#0u_q0NjMCw3nZR9*5c!ga7Vz^Wpre~!vn11&_4OYlN*)!Xl(Y& ziJ2BgH3p8d|2dyYYPqpb&i_ogz(ODRDEK_f4n%G8F^SD5;Yi^;PybcJuY4?@^~m*9 z&MU9@Q2?WbR}LcuQ++k zv#9#^^kde-yeWqnWICfB<~!=emn9$Z40;{LYi%aQoi**ipCWlS!fV&g05iD5eO&1y<-aGFd7D6f%{;+k9{ktK`U`_riefF>i7z-C9!r2$@B?^!h zklG0>3v_`vl0M_kGrbb8i)AOJX0_y@u2;!5$qrpnhAt2SrocAuvw7gZS680$W6=)C zQjN+XS?U+V*e&8k|F9b^dwA8e`xXL)6U!AGn9zvK2dcPi$!^^TnY!ql(VX$3=MNoi zrW^j53JWJ2*N3>g7UZ4m+z#2;yZq*kZn-$gZ4NDuv8OT~58nzixyQp{(I`wkv=1U+MtX8CFC;yE%@8AeXl-hw2lI-mGx?uQ;ppKm&V z6aB{baPYRpJ@dEo)zQWSqRA-h>L{vV?WVugO8sJ9N>=7L%&ifh;?|=W4E~RI8zOu7 zHSdX)rQAPDfSFVhvLkti7u{D~?Rr*{HTFEC$m?$!u}5Mh7?%ijTia>g?-6|uks>7H zIir@QbI;5?=aYa)7a>3ce9E4ELZ;iTuY97GNCYk4WyWVBefucuY+(#FavYg@jjPW$ zri+}kC?jTs?Ni+!qFH-|mg5b+G{=hx{O8qbMwDa<4Xc;m3yqt8I){ZpsuxX6BdWN1E-R+HScec z-~&@=0?=Jmxadj2!KakqzI$8X%{`^W#~pmY5L4Rs@xI!q+Sy{UI4}VOQ zcq#%%=H9qDjv3z6HsTaar1nwU8!H;|cw}cXOkEx`sK!C*kn1@9tmz>GCo)QZ8PC)y zW8~m=Q9+kY#OuBpI7febIJG+t#aB1jopt|WSKopl@v^z6s;yfW6lghpyYBU#BWURi zyiY&?m%=?|d5deSZXK{HU}xuj@p{%{w!kif&@acnxHN#<&>ajV!Bp51E~_S^qw~Kr z8VjfBiP|ytBk=3ERI0Ghq0E!7243fyqueg1)g!>`yqrf-5Z$y14b3~|XI4mMBg1`2 zfc5GMihVsv>Pk(CLrVCD>M6!Yj8poo^DFnQve)HzUCCSN-BWW^cYfgCfN9-$xS@Nm zph59XSRA2hL+~w0f-bAt%;nLWRfPp7=-B$Qq9TCZ zJGsG-kJPV^g6P5E6ZdVWt?IqK-XMR`7rFgy0-q&)ByVn}D5S&goHSxk0yQSPH#MwX zZ}0F4G&dIt+Yuc{g{*>=`Kwje!`2by0(Y@@5%6?&fEMMC&R45g4B>|rX<9xJ-D(*= zbqF*xF69i&DU(%4h~n8t(#1TiSN9%rE{9p_<0Np@tWE{t+xwedlE2Vd?WcDaB~}{>7(;(&0>}fHDD;u_1YHJaXLE1F5z_i!c?Fv_JFj{~ zau^HbUKT1#V~>+^4h9B29T!dDpG>}6qtbQ;t8w?9U652eWqm zsMlDiT?ec|V9B#=2Y@aApRo4V!eRt9z|(n+Imj#u+9WyNtg z0S>2G*o!ktRPS!aGJ9kT%lW*zLy`vJm;bAe6Lv^`kSqPBlH4K@kdNpl=+XB9CH z*5$84cvUo@d5Q_cZCvbq+|AWgLG#81dqew8l4zsG;i?(PN*<3m z!a&t^Dru>vUi6e65mU?%lIJljNH7 zHkfeG_%dLmDt$`~7|xBOC9|R-1|uZSKK5u)wLya(skIzj77ch*FeL{p zfaLc}t7jsnCpLK_1pmfY`wX$N{K|jervIlX79<*a{p+QWyS&pduzA&_I-VxDRfZtx zs|__h9o}o#Y=TmZ4w-@uGI>(&+h>exbdbde4&ACukaqM?&N>3 zx-~uTW_91y<(G9K1v^lNWJYJXRO^KazFUJj?cOiik%Z1&hs_&+nvj3bvrti8z!Iih!3e*>S`rIrA?D}+ zfEMNCW}(9cNLU#;alhscrBQ9-*QdD8H9k>uRlrKA)9lJ)^iNkFltr=gmE5VyIcLXo zo6LyPGOt7YS`Jc0H~&hbWrTC{PPaVE*CBm9+8 zZtFdo^biN_FUq~PdD#o3YST64g&d>S2Ky7}+dlSGL>#?%N?=a-J>N&N&0kTzRV-kc z%UQ?wNlQ$ihV_f7`@yg9g@NQDo9XV-N$+#9HNV8)H-856u$-a?kzn6QgU_)dBQPTb z6A4o`4K=_aD$zN)MzmoN=fbY=F#=#N}wM+q07CY2XhLkuEFx9v_ z5j7d(5%Y;iA^TKI8OaeW^)-N{uHsmy7N0)h|KsrXmD^?=@j0;-e3$r2CUL&ML`c5z z62I3k!Wu#FQYWM5I@Lq5ZWGKZx2rs+t*U&(OM5fVH?H?-*VEflq((Ih6@d5BX00#_ zO3i7ZnXfeC^hw(ahEEh`9_!a_#tKagRHaEo!s=wQa~eA^OzCBsKbmH@e|Sd&P{j!> zs6wT|*`bcS)mrX~PUeMfbjoGTh^VYJHlG$@Sv)Xb%OTC8{#18(6)-#$Gi6Mgak%=z z`oTiWg3qyv2}>(GcPqFe!bS6_x&(5PBNqnT17QdE;^*c2Z?g;QPd+wP!B2U^d6|7|7Wn>UlYIJygCh%7ak3>po#th0uIlRh@2H zq3lZ|k$#v}T3JWOVpC`3GJD+BSMDOYa z#lw6$37p|Vmw?0N(7a|?aQqI(BcV(Ua8ihYzs(iNV{QS~2sgAHI3{!$nw z`U|2P?Mq~atpn0NmPQnSfJM(C(@XL+`T@Z+A!OCl-cyf@-w574^)gFd2@qbpJ<~q< zcCke>ck^+`ThZ#=&_q=Tdg8C>!jaPwfeNFg(?(9Qm+DtgFAn>vDnOs`$ft&`c8(sw zW9qsCUA0~E45FMphR8{aiCy2(L=yd4S~xTeIvevHZ+K4fhu9wa$vZH!gQupKf%VG* z>*wKq%=)3M91#F7<_=f$1RD};IGB!uoioA%WPP~9l%1`RfR+g08Zw$1ve)GRtrI4P z&8L7t{cxBnI3e6&D(Z5|FgYEVj;9MCaYC{W1lY(r0K(w{;g&le^aCU;MR2QP&lpB| zYBjH4c5vRZ$G zd3@%^d(4&3(l`X3iLQEeC4}OTy+XQL`EoOhZESTF@FSx)w!Z9)^rNDqJF6;HBu&;` zJHB-(jL%p#wt5Dpm-6IhRpPIHt<@Ufd8c*XvL2V!@P0L!M@HOG6vAkpCjgQ9(p_ep zvt$h4*i@VAax@K7_erKkQ|j)7YPYR+dZ!1));$J7uP@u#bVkbBn7BTyXn;+t8$?|w zte!VjZM`Et6S=9t@9@C&uKc`%DbXy~ICT=+CpuTXKl5fXRtjG9%N!`?aN`e( zE1};bh|e3pHlX?A_JKzH4=QGvZjI%@W@x%E3O>IltA9mUI$GPfgFn*$8Sg_wo@0qs zfbneahB%4`@^o{CyqZS^`)`*^0?roX^hH`>&4}1ck;TW5)AyfDk)}Ck;3jAK*#_L? zPTDxR95r7?&)KHjc01ok==T`Lix7>&S`l^1EoghJA&dPiFd*(25f-miONcOhn9l?R zY+EvB6zAL&Dvj|Ui@g^$=|pefSb68bnIU`b{icK`m~ymj&|R>^Z+*@4Gi_g{~F1Mt{0-#YTxn*on~Bi`%yNMNnQ zW%$pk{^5=TSxZ1s2|1^&K;#l!PgPf2MnOhL7pgISw^w>p$p}m~>sBKugM`z>)Gayx zg=^%xC_r!xEIIW=1s@h4w>>ZhA3 zFOe%=U?4KJ$>FFbEGaE;OB7Fn>DT$csp9EX<8*b8{g=1nWrzh>b@V(DZhKR}GAcza z7g&x-s@5-fR-_vi6c&xlbMSq5`4@mdufC%An#9R)P4>~iWJ%vN?J_sh8Cy3+V|hUM z#Fw0Wm!e?&o$myU6p}}WoNckEDW-7V1XXJD+Qosn^uQ>*ztjj&GwN8oCK&wyWhFRq z0RYV%D4YLZQd1NIM;^reR5zX0299V}h}rOe>AL{e__{5urGWzP9ZTqFwT?vVz3OY? z-6zB;(^$e4kY(~z3ZLj)FM3hxK3ybTQtvTfi@w8Oi`MeC3VjV4xw66G`aUx(?)!$2B@81#_+nFgW3S~x`+PoC#t+!c-_`VlIm&dF@BBIDc3 zRT&HtNCF|oB9I2YTBfe!dAEgG3m zX+%9jn`^XMwX8xk8D?~on>MmHMM7t{%;aGECB1@13c*G94>z`)wyV3|cb!_uKFeXA z|03Tzs_7g5Ij^QPD}vgSQ2%n~*PzdRI;^Y3r9`Z>Pc)t<7??D0;NWwt`M|@|+6HOs zA!rSkvDO6wr9UcEu&%V=+m4+MBHUmA8VznpC?Ng;-b#3s9d_@76R>=}E2^@5a*YHZ5Jtbv>%j+L@=kdC2mR9DyM z@_{>5&n@ggU(fWytBaGWM7+0pV)M_HG>qkppiGs0>}kLJ!&3d4Xg4GMx~5@13G-l_ zFPAo)U_8~Vx_~iiUJdR$DwZ20=vI0;R*t()b*S5Gz0Y77G#>o1Fx6%*v|q-i2Onty zKo#ICZc=Yp=W@`aK+s05&(rrHXoCqS_rC@!zHiZxUJ#O{9=r2UkgNm*m)SvO4_r|b zrl_HI9h$B@kb;VK1+08tCFut_iY7w!x}*m@MK=k5B8hp3^!`PImFvDeT=qoPs;#Sd z-<72A0Gn^>*@3!nhcWVgEj&ZTpXG4UJ3;5$TT6HiuhtTJmF#_5+H>f`=HECl3x2(4 zO=h~Sy==0ab7$e9zBZAbOE%Zg70^7_(1gH1v(7Zo=8I|6a8G%gqL5l$L^s+?T8JUj z?kSJ=EFjZzrhwBmX;5S?uQz$voXKTYCAc{9;l|g(?WUmj3LKof&cfGs85sCeW=|^G ztGy4z&tQPYp`Qru3ZE1`aX1GuwHoI^+QIj-(C=Vc6X+ke*fu7`TsuTHnD9WJmzzFL-S@KoCDjdw-2s0hf%GH=0?!f%)PLV!Kq0Ik1_a#R+y&S<%>Shw!y#NPu)u(_9Iy{<>`>q>@#lhrx!Cc- z0!If|Pw?a9q3lAyaB_ypU}s}OnyP3WmmkH)b_2J^mH<%olj)cs#msnBY%kO z<;~5va&?)?tn(IuHlP>l@sa}N_EPT*m)?d|u@Hrk3?}iutvktM+)L!tJ|tV!=1*3i z+nKbj9cN@pFBVoB^+YF)yLbFLthy z8?8O41Pf*WKB_m4`8zmz+Iu>C*f;|=nH}5`+Mn*8Zjg-^bWWf;{6Cf^NUI0|u|T)~ zkH5)Zs(`=RcR-^6?F0^ExE!!3g49G88<-suxH=IqIfbK#LF`H2Mv>hdBu; zuI@B2b3z^A*pZ!w|Ja0~=?m~Vv0~n}$qH?SIgKUO-Mu5&Pi>c`$TZh(x%w-LKelvg zN{x9ybJJYux;irfYns6#j(z0yJ|q2#Z0AXCbk&2pglLPRwGKgWO>MJ2`PS`)l=Fzk z2+{M&ZcDk2?76KNC`1Awrq+dwu8@Tq{h%H)x|&We zjlW9Y+XQ(K2q>)JNF8BuX0gUfstf;0Oi3i+`7Zl5%Omo#?*mFfrD}`#K3mW*XC{qz z;;mft9C_Kak>%6Va4q#gwTagZnDzO$2_G1K;`8VwE?z2FkoAm?ljEp26X*Ea$W3mC z;?|p^ikKZgXx1))Jgz4oz|L*S2BgEC&n-gxQ07+5EFYA)m4Sq&nOHf%<}&cOhAtll zd;#)^Xh0#>d{D$6UnbV{5!j>Uq-0_384r6;FiwnGesGqe_#>9B7{?f6^Nz zh6yWFZ%p*X?9ysMuG>jBz4;*((~S^v?zPk)i_w>NS~ zDypksJKQ|{)jje7#17cj5V24#KOk=TcuRcW@iQHgF1qJaY2CZcT-nJ)XVqt_A`+G# zz6ofSYEjI8jJHDM@pLF5EAnN7+19kH;D&TFX>~=Kt94qS^yZHwBWD7O*IhUJHB;8e z|Lb`n`_aB0l{a4oy*bvtTz)uK74Nn}m*F9*X;uGx{+r7|a_$G43RQ6&LU(}N_b*X2 zVWQ?Fjg*|`+6$k%JjK?|*I&Kudg=@*>s!yy&H5JA#AkH_Vz+XG=Bjb$_wlctOdkNN z2OUJmPJ+Q(8NmD;fa4dg1PXCg&{%T=w-OH@5Eo_xsrEGcp;6|T8QZwl$GpVhD>7%N zQQvy*-c!1!X(^$n2ZFFFpBNXQv||ewBW(hjp;B=vaDC?ab6WW%dt6_RcB2o`k1l?n zR9j@f+8($3H8=<_T796TX-UgwZ83-3#uGE;af9^~iL*;R|0o@8x&qVo&+5U^Uo=CP z*i|Xwg)wu^3}|{+3>&HR(B)5QrhO=z-nP#&I;M|#pA|fl8?o1+R8@0uN!D~TbN1~) z8nIKUoKl+X6FyMeZ3@}qr3|)p;TXu>Tns#MmOexCH3Vy#zt(=1l<^a;FI6qkcI`Hh zXdB}^T^DWTN=N`p1^FnB?F8I%K-jqXc*3>iVc3v@Bc#ePZ>w%+klW%W0}&kJLWLF6r)Mr8*= zJs_wcjjXEB#8kL|Wh%KywnN>sO27O~dE1ou40}Y)(r_|6#-&u%0qi3QyJp4`C+ZTD z%O42>Dz9fSG;0BpRo1hbPI}+Rop`{#R5K}urYRo7hFKUF$z(L+hI|Tx5>%kp_px^r zl%u;7!UrS(TKiZ6a~xK7^2bmUm&^+2*3F~&sg0mx+6ElcC4+^3@(2K=*-#ZhjO7uO zpQ6Uwt13~;K-}ruti=sRth-jE9_h9oJ_RH+B90etH@~}bOkLotdgoi>_$*Ii8}gRm z_XbriyR8FO>=HRI6pqO3)j*Ty@En!T_p>!zJ+-T|2t3RkG6@LfxVBV8`@i30Imkvra{3cgS4{&MF+HEpeFwJwZA~4ltJw!b}5R=pu^gFM>I;Jes|U z$-2%5HuPxU9C4ED?|dJ{$LovZW~#5hA&Wk5Y1e_7OY54V^6dMPmM*)r?qGOx23fz1EZxADm=qT?Z37_m$N3E0oz*Rty>>~dcYJU zU66#!#s-5O1^qmfn_5z zk2DFoBV<#=grP$n{msaEJ*iMZ7%S*ac&Vwr4%2Hj*2>4AFn zkIOKXN$%-BFZ+6R;x?c!SeGiH33xdjstAK|^sg zWu&erD zP%0f4gl(En4x7_}>BZ)ls&Kn3SIk}B<;hzIt)hZG=iwrB8850mZm5IVH^@Tp4d5n7opl14)yo@xS)MvT&NK?_Vzj{pJrLv3nG2MAew4egE z+eo`l)rBjg-fgQ1M9*%oxz!@YjQ(Yl z?OPwRS~A&wmCo-?T#Y~Uma?lsf7pouqCu=i?%4C&1CaKuoZy-^2&e0AZdmq5>>p8& z+FnspQ}y02%?7DZgszw5a>yybqsFrP9D3AJ+zxP<_OL<&Kq3s#RS=J3qq*A?X?);z zn&8}eTWP2$=BHB>a{)FYTGin4jW(LX(gM*5lt)GTlrH>KdigWQqAi+#^9MfF4(z~~ z9F%!M{(w{U*xD5#kqJvhgbViIc@0t?&vh*nx>QZ$o~c?AZ%B6_O3X8*O&Lq+Z@O<_ZXn`VF8W2F zC;8Rp!44Fu!;jB2@TxS`zVB2ELE5)$#)UKOD+^kmB8+V*C1puFqWlXcf~<*HULe&Q zB!%a1p2-c4Llwz$JiN0A%xOT8?Z?{;(gxC{FI0$AG1;c;8-9F9SLyD&V$;pR>)X#! zl&0S^%f(jd0b)%yk__r7%Z#Ai@xr8V6Bq7h^hv>j_JhlWgd#AfeMIU2b6QLfo-;P< zr4RWz>0R;HLwBGmT{i(asXgq0K(2%XP?g7{p+U@}rxi5TQg-$NxljCa5Hhe$oE&P_s_hkH9vE*|(9 zdm=0b3E#L|t!J7#NLxPBs%BNPpGy-JcgsJ{k%uDSV@-pbE&?bW@gOn04Mro-gKLGie5C&52;G6(0@k6p2bt*j6Mrcs{wjg- z^>*ZkGJZjaNKR80rXvdxEshk>San_hcMewycwYnq*~hp{b+TMY0>k~(7ax+qfP7yn z2a!j>e&lzQA<6XP9u0)FzyU~$&WENG?cJ+t6BE(Y@83Jr`^-uoA)uo!PYjR&70fdc zlSQBNZMxAQxE63`Z@+%=9;9UP`~$Vvv-lts;veE!G^`>%-gky>oX}K!wDL=_;7RGkYl-U#~Zt@P$gn_v7;jLLKw1x{lRe>!MGwhM2*T9)(woSs(A(gyBt0VzG~I zp}2&_y@!X>OoTNmc=i5xw2Gln%mEa%dF-V|&l0r3z#T>#GS5SPN>E<807MGP+!@?z zu!R;RF2kzlqr26W!ej4Qm_{>j&~SzaN^uqdZ5ffP_|beSZ*TTBaODDmqtM``DC*R4 z>pc3f?*1g+SKIx=2MYeagd%(|SXnR+=?6mDJj^KOmBJ0F^NEI-4?gC|tTSBMxYj6Z z<>9ne@J40B>C0&g904HFys=k3hgmIvh@$1OpQ}+VUSnK(PA<`&uQ!?koy`%Wq7&Z- z?vLMo$SGYk-tbl=a#C;^$TI+SKwSdqT9+C;6z#EVb4Dt_VmCLoL+raihs?Z+b`O*K z?9bEUw~~&utxEw+7dw~e){7FMV-6~_j>TL$009*oL^)xZb?)ZYKuUoZpmD2W+dIX1J+3WS4>%7J( zjMjV;L*}N8&pvn)JA1SWlJY*`!zpGw1D-kM+tl>!?LQ8`fk?>bB4G!jUQ>}zz`8&v zqGR`vj}5{D45gr^H*o!UdjR{So0pBd`H|=6|EU{VVy9eUKIY;E%D6@02j)T|yvJF^ zz^%-az69_8c6E7YV_iXZ7Z6TaNnLNm4^QUy6^y-CEjjg>c>P4g0KduLD!q4ty0L!b zc;2OY4aV?A%2XUReh0&L(&th_GjXxy7vdx9Hl*dpn*`ZuxK(9aGJ1>p`?d$Ukv+kd za^DA?h#EFd^&Nyq%2Ybe`&wsk3%A(^pVKF{%Kls@wXHIFY2Z{g19q}&h8}# zO8Jc+&TAArW*2Ggauie480J+GI}jVI=?8%XU7m)V8Bj;B1~6Ug`AN6ElmJ?%xI$p1 zj)g$^fER%;kek`@3-ANN4${X3Z3U8hK$wU*FpC2HFZkl$_KPO=PN>`5RuyxTugr8d z&abkX{~{s~=ZRace>QqOK?RJ>%kMeu49otK2LWVS)I-JQ`WnF zO*F93He)Ek+wXI3dyjM9WN}5iNyuH9>)LUVY9i#5`qpjFBNzz=NLxrVGE*M3uzCpd zkq%1ZDcx;Texa1-CW#)H*@|GMF}DsA^NOb4uO{G+CXTVBo;p?EgnY5maU(Q`?&b)E z{%reC^DWbs904jkrNuA$w?ie-LsBO@#AyArJh$ENbUuxW5XsfAicPaDO&o$V{?uU8 zEmUO^_&L*YHsMz_k&5%9lN2d$!P-Gy$zx}90E+?|&*1H+ZsP$$!<^JTkw_&?NX+=) zx0tbiqKh}Y25G3rGr=O6#YzPdL=yBtoLViRH>B3PnRIj)1StPbiV!}*c3_sIyURRS zTUQt9m*T>n@$-yio|Womy=PjMd6r=(DF~WV*pBeIVd&D6|Mv8YxP3jB_NutLF%@Az z^N(D{@3jV{X*FE>g48ryY}t3dxhodaVNK^VhkH2z6=KY1>G{HRchShix84KUp>DSx zZsEuYmPzdvh^yLcJUb?2x>5Fwt{r!s-cMo*vMPABNMLY3l3fFO#+m?}Q>?W{pATPN zC37|<1xd>5Flb7Gt=@m@H~zRXD}xmREPr58@PKJ~f(9Sl!PVT(8DjeX30R;HbloDU zd!BgP`jrKb__YmYEr=AU^4buZW774nL6qaGPOB5$^;LsBFvBwrBC1(UFNz_DmN=R3ZNDM|||Gy-gYaWEj3Gw!WlplVZl zZL2mC|C*0`jY?9OOY&veKwvKN`Fuec3U2N@-4k=xGZUmuqwk2@QYo?~;8A1XxN*jO2h5dLUx9RDm_6u)Fbb+J(qas z0tjbw*=iPO8rzx6?r(rZ9|fxC1a0)$LGc8xSCqbRJ$z=Qv%1Y%mDp_u%pH>nr|oY5 zI!Z(HDn7U!(znZ(=#Gz4W;yD5j@qxJ6>OyID@Rj3-grLNs6Tm~351Sn^jj+2zk-wU z0ti{MYGC`4>|tKLBYhO7d_%*?6%_d_Y35%dJWaNlm;yc%`OD9HQ^$V$CB7H1B@Ws& zwf%7@u)qG=xdNfKz`fz@0O}}Jgf1E?4}cv1Uv*F01O@RHP2DSLT8mQHd1yRN0U&d- zB}V@nj~{OCEUk0N?vBCRPIou3<5@`67r{ea?i1E9^F%&5y?N{OKQ6KY-i|QU)I#fg zFYS#tzb;DZaE?^w7k^2AQ=(0ab#8z~nOfch9@qq;z1VA<>)GAvBT5A$xsGL88xyf4 zs|w_LnZ=UPau65tV7rN49UGnn#s0d2*x!qgh8Torkq20?Dh>%6amiIeL99TunN6BR z&4@W{UXKm3dnog^377S1*v)@V^y7trAhXxa!xpp|EP<97z>J}z38WbUNQJp2;2)X; z5`ZVxTbBPo3tB4q(ZcUFCre09c7Is8DsT(8@Dz)mG6Wrs9TOY{vxi4T`{Kh*M<;su zxtT?M%%o~1TmRmo{Vcd664j*e4X<4K+I2v=N;c0edM90NoF&zn(Cb?Y5CuX3QJg8l zL6hqD6A8`{WSa#IR}Jf#j%in+4u~J)3M9N7%-Y_l^$Qp;oE)YvC&6>2fEnSmFvdFC z^Ssot@k2fip|ZA_E}$&}g(vD;fVdac4fTiMK`g16uQ#qyJRE%8f$*~9(VB1`8~_l z30D9|xsN$Cf|Sx=D@o*6hnfi!PDc}+{?G%lvYzfZ zDPE`o)p6y+#t&^rFW-g|b215x3fLVPL<;=e_ zHSw4U5mM$OaV4GvN{6y9V`g~VqjI0H$;Pd3^d2`Xb+#vms-U32uS>`(mHa$k=Z|T- zC2li|=rKDQOO;8kp&MiFR*%;Tq__{7sBAdB4*#PD44wVoyN zWs4+;eg)~tj#aG#)`_!?6Q3i{QX)MZo*Y>6=by3h;cMa|C)+YH?oo+sK=veDb53s<03v`rggwEzj@0d8SMd& z*#L`l7A(@SEm1op+6F+z?cnY}666E!-Uw)Q{*Xy641I@}7Y}{v6HBtbXGP_Y1eRheL}ke; zlKR}5&D*V6?n{ieRsK2#>BQ#ug)2WvKrlSKCK0^>CZY|4X_yCdr)}7(#olC=<6Y7x zphr!ARYOZS!Mvi^_HWN<9vxS0^f4ivXD?=hr_Nx(Dsm_AOlSL|28fKAJpA_nw;-mL zyA6f?Fk0PUz36ul3W^q8F5t|wYwI65JZ;De?EtAUf`yKCx9yOC>0Bhe2_F02q+`^9VoIa4-+?CE2F|Dc&!gA6#py3H7#OK@Fw+{^spPd8PXnN4j;Y&ZeWBcpK8QidQ zk5hykbrV-iV+Z7DnlQ_oG?KEjrzBAi(&?8a0PC5fd}kCpPu^m=_~-W*V>WYiEHCSP zlVz;0F&Ll(Bbq#i*EZvyKtodo?Gv*^y3P)Mslms{>6jg@DYMEz2AlDVqPY%Bd}o}9 zt|xE&DiPvATp!K{IY7RJcZ8+CR$h6!BGmsY2sncWB;H5$BzPHiFJ414LR_K5D`Kp- zE*~DEL647{{9Nt_W8Ab&(R<7`Zq+K0wR;u}h}6T$26hCHmJ#p@=&v^ssTn|^ak>x z1{Y6TV}jo(=wo2%<&}dCZ=#WWS{~0oG*d{1Pm*D9UcTALy6wGQ%_p_nJ{ap<hAl6FvTBwof-J_$c!d+7c3k!3;nGM`=cng zvqd{tBe6Oo2*3mc?|>e1l+F6PbfU(?+?uA(K5)F-id7b3D{>``-^xNzI<2l>@^=|4 zY6}bZi97|w2wy?2-U+W==alzhQ6+aKPjs&Q;1Y0k0~yB>?>vfIQ zR44iJuLG!AxusD$L^4J@T7bN2XH#?|z0IUI;K-vlpZG8dgP4>H?8Qsn9 zU^<5zj&B*+g;+Cm%Y2!2G8;^bFK3*Gd=yx(r_T<^Wg*icm1aeBzPxgQJOAtz-eLw! zt_eRPD)ExUUhQXc3`KmvP|kU$%lCryqHoDzBAfIj2j5cjB;}lHJcf`-K=fF5~cH=bh3-uR)t6$~vzgso!jtV*f zimDV&uvBKcdGa`0H#gI(c4~dcK96_auY|Noqq3$r{leWJsQhx-4mqo&!Bc|OMK1-6 z=8Fa3F`7jWfff31&HZ0dp_;rWh_G{p``Ea+VBccDC6`uQ+C1`U^+R!NtKyQfwsgmCF1+92NuucDBjUK?{)+T5$=l+Yd$nf6r(bKVw=NKKMDRzb z(94nXWE9KCs^aTtqeO?D6Ys=Hjtk|lDLCbO$7)M(5+%_1^xJqFK3SD`OP=QPpIeLKq-1~8O6J)A55zlYq@6Ly6fF*(6?Z2O>|1JsW z<)U2Bp3c_r|9u6$%Z!ikZ$+PtyRRUTuO#-(0sc+58>@Djl)W&lNA)dxS@35)OMj~5 z2M{waYk3AxugPO;ZPix!-?<9HsQ`;bcs6US7Per1iBde2{((I+m%xcBSt9oD_ecmZ zS=8fdg>+gKW@k8=XhxzaFSEQ$>ibmLzatGVwPosK$oYPGT0N$K#wgpjOOh`~*fOnl z!$K1!_~mVspKwzVXd$yb;*nh?$bpZqbuaqd*oh`#U1*;i6IcI!2AZPZuP}EjJ=MD^ zs<`>}$-t$?y~D%kX4b~>^!Rm-)^|~0Nw8w4BHnzEHiBNOV0*Tp~OC1{25Qch}kh8Yi;7d^BmkhXFaCSt1V+EV8b}X;o z$JHGT>OV-|3GQF+a^Q*&XqBL~eH6#}XGf%s+KT>jwUq3)QJgMAH@>n^U1;umMaql; z(huZK`a8@X?tH*fJw3)?suijBkQyuvQiI_RbW>0fl_;&KslXX^+!E*>m>3$iLQ%a& z6i9i2NjVp-joK-_8DqV5g(c3Vtnr3B%O>twsq#voCo;19Qw?5=5x1rr|2(hxo-NPp3Z&i)45uh*sq!Z6j;HhCs$ zAPi%vgoI(mq>z7lNE9fSy`>n>{sQicpZ83gaiwPCb^cNZfqC%pZ+yUqbwhigZGGU@ zkRTb0Y<9QtFn71Nv9$&4SZmO#baOK2Kaz^IU!(w6TQC@IA(>dFpERZpATF>v=l=vM zA{EzDBSt}*pI$OcfBMy(xku8@tgKfL9$ub5XQiJwz&Il^#-8D@`{2YWzkHoD+{6hA znYf`JTa3>33CU-g5vX&yZB4Rhm0#*S$ySUYxypCv-ORK15e#}GbeW|C~i3u7jO$>dsMatCwm>Dm|jP7iyK3l`Zn*eIqLG1~xM5>fDY?HqSiq!`{> zBb!!@-rqz?A@rqJ%48y9PyNM(4m|qJl9;fm^n{xI&unXSC zXZxm6y_5kNi@})qc+a)Hixpt~yLrH^e1KdY7z(g+f*w39;!^GjLAioAk8&y8#`OE0|YYUJ>GCf;pD6WK_UzO=`kq zy~7pc5TsS0uiaOD8^U&`s3v_iaSpwm=Im2uOzPy*9<H> zNaW)ddY6%EMM=V;)gZP}1^p2g#FiTJ8m#*Tmm)k1mLDQ-vMj;!BZgnG zzNyXkmqhisrGAshoBSY}XVwm8YD}6;~cU+5z&^ z^%LR&CtS+zL5|4(8V3IAw{vlG0Nw$?{|BZE^}~+^g)6ur)NHJ*5O5IN>VN>ANpR+4 zqqU*h>32swoT1y5oaruub6DzsD*yT!4WZ%A-4q7Di(GmA@q{C~9K$ zHsD5N7ZFj4`3D~Yly+3#m~B!&EhjG@FfqX&iBiQs`q4)04&ssqI5eE4gl~)O*xMO* zbH6C{pL=e3;gJ+SUVQ|KQnib=l2+hz87AB)O$AxJOvj~9dZ$_B?+Gv$z4#Hceg*B@ znqqocT9vzMd}d-*f8m*)3QmhA&-wkDr4_sOasP}s60W?MDV#fxc1mLk zu~^G&o?s7+o8`Z0mjL2M$%i}meMx_WE@-HJNMQS=`4g&}0=xw5zQF~%L&m{!;DY5~ zVm#&n1Q#_BA#MZrMq?S1e{^n%sgVHo%|t^T#YP6wwV-ySzLX2}_A8hI(LTQd4u5UC zQZoB~&}a(-QfLr*cqE1PWePb*$cs21EOxMXGvzk3LSJGyt<#HkXO1lrchi@%#wJV-@ki<2Uh1so@FF?PUl>MI8vr=8hvP@kVaSUe*Y0a${kEJzn?fN+Iy_D2@sm3c;i z>pj=6me3U%hTls$Pniw?Gi=G*!2Oa8H=)jt*7VG+9qbqU5VF%|EjtAf2+H4X(~N(# z@@WqlTUDra9yax(ucW^I#M;lJ@y%3KOs?icy)tEl^q8^vq+weR6bc39Xhi@7!Ha}e zq5aZnpk6uBHVuGKs8c3*kb_C*5@V(#y$f z6LGcL&)h7f-7;kxhiu=M`;PGJ*A*t+%P|%8DFVUabDU|D^4->IG&%TF^pFvg)2B4# zJpv2VyQNRtu|c;z5at1P5X9p?7K{P9{XS@58ag`6;Xv>M*2TdJ<_6p`;1q}U(r-x^ zs@Lr<#guR8C)@?TcpPI2R<7&k7D1$;HLKiMG3(*NK>*X7Xs3AXxrcgYtdvCW?tk~C zw>7&Lb8AVy%%xxO-kSz(QujwriKX#tZ`cwq_QqgzI4B&cbNk<{KV#}<`WjwdtTY09M^12Z5)`s;r6+BEA8O-mL< zy{b5Sf%eR!r3-?4wp=Ur?>^$_+&!Nq{yjj;h4u6DcmGD8SteUk^gXZ+qTqAv9bQ>W zM+Xk&c>uq+J4g}(&3w41xG=D#{^7&Ikp$oVd-(R(mmnyb>;bA3XipICKL33c;y`qU zV_$_Rgcm5YoPZ1L=-=31fnS*KzrO&khiMUlAB0ae#RWoI{1u0Hh9 zZukK#DNKH=i8)Zgz*T|f>fo=Ieed4Ha}mAze4K{gRG#Hj%Hj(b=YNV>7n0h2o=m3Q zC?{d%BbsI=(SMMT*GdvpPe%(z#oyW&NkN?KLoMxI^yljbq z0E7&;z-l?@aJ73iAyVSpLBpOz0U`qRma{}6j^F35h>B=QAs_O6YA|E%CZcoO%}^={ ztx=$PkdkwG^V69s=J!#wLe(8M&t|x3(HV*csrZgX=<`yRA@L7han6aj&pq0S>3T!5 z7ds#9S?hpg*qu7%WnDH@<>c{{A@qQ@N8CxtPK9*g1)O`iwBPII-NdU|{~upx9ad%b zy?qcxK|}>q8Wj)_4xJK8cZbp(`p{hh2HhZCDxfG`N{f^rQqm=*AZ>txh{|t0hncVA zyv+N@8DOp%xvuSgp1t;3_x-uUr)fTJ3>w>IvA8++YEx2f-wzYMo2}M4#QF4!*}-F% zsST=V^-fop?%tTBBN!>hcmIwbc`FooD=NZgUsEDj-z;3M<-|3l781fL_^tXwR>g$y3q0X1Tsky~JcS>!RpJG{W?K>J}5G;702#fjJKHm89z;XQD5`YBgx~f$<9?pxZ z`0K5^FZ~z#rXY880eJ(5mL~F!MV`*RYv;S;*rejsW^f9)-SL^w;lLg*^wLmuDzHkIPH0(YHTQ@LAc!2>E(X#(JjBgv95jG$3 z<7>pxAvk+ojtXkJ53kb^dm9|f2&=PB%rEl=$&VSU+18i!GKV?6Xsa$bCgUkpA4;31 z*!(tT)~Rm(b}`3lHlbT8M2TQffFN_XIJRDtQkS4|-j#Y8Q;f3^v*sU-?*89i# zg?k46{C(e%Xh7FM28F3Bho^<9vbLt224ahk`A3hoU*qlQc&+~=3}R4q=KcG zkXX5@MbU!$s93H;)xIDKf7V-95`P4O*g2k%r!G9e1!bVA0+q)V#f28B3r&5gkE)W} z7Y?h31_0Sor~Cv>S?6P^Je|=(vWDzIoAgIop^xW8vt_!}Oy4rjPx`0kDozb#w8efr zvaF@7?Py?c!#bi}H_6|&X*)i+ma9`)lzy7ZmiqN%Wi zU9zlYZ#aQ!l8yy(*n4@A9CqtXB!|6ftYwD0czkykUXoRM0noor>kfm;;J+=H+&nN! zQ-%ywYc%+Qv77XFQ&O-}l4klA4P>KbjA~HoZ$5aO531Wn45)4=asTpQwzMY(%~?I? zZlPB1!Z+ERt8AccCJ1bG_pNktCQpXPc5{rBCm)#UsMr|^+UiTZZ>5jWKT)rBc(O`% z1JQ@4V2RxWm26moqxGZtQ8!r@;UcDjaihrPypP|`suQr(EKgL5j-z)alB>58of$LO z!0FUw;0VC(6)dnjV8cp(fwPb5!iwE`U`3H+8g5PqeuLn*Au3BnCxO2$n4@c?Dxm>D z@c37?^JniGar(PjJ6KpjhLsbT2;AK;cCH+*E+EtT=Y~UAq5Ez)Q!qn0K%vQ@C9Vdt zOUS_b7iQ;GWESpQLr3tj44F_l9V8!<%tmCE5mOaNevT%FA9BSv5D$X(w;3OSqm20P z886Ed)LsV&kBNMb?j>6_33&G)ZU-=s#0)T_OcDK(G+X?0 zcN&DKkNH9;1n!nc0zD0@jM&$`Vs7gWbTep(xPl5FONg>VnYp_`(-M1v{?4-P_!jqm z*0od?VW~n6M>`hickJ-rKtCj*^-;;ujizn~t2C69>>y4>4r3~~StA`W8@O+1SsrwM z2(%Sq2v0iCIyxpTs}ylNN{(Mxj@`SXPJ^E#d*F`k*wySa`8tThhliAa<%O^CL-%J( zG%?lR>{=ozrHZ10pkIvQVu8oAmLR3MJ;^k(V1za13!zW8c1_2m;fbv?5wN zTX!CEeN064n%xN1aH~|(N^McvtJO56jtQ5g&UY@O6>79sUS;;Y01Q9nBi5tg&yLHo z4~V>EmENQdc>QvoTJ}EU&0s*0d<~8}R2;nfd?_UGIbp!18wVaT1j1GDzZ(h&oe1oA zXctpQz!m+~a{BW?HnHQx^#yUoEuvA9rXTB-gPiH07zgKc z&SvfqbDY!d9&`mA_s-5P^B*Q}&rq(&Kb-j9uJ&Jok{3?vLCaSx8QD zn&f^X`QYbm294E}!`Rql*7b(=uj2Uc%qLUx=d6A;$|Yr+89ZKh#w8*qgD0|3jIH%k z>F#b2s0LP!z1=*f_BPTC76wUy6cpI!@O5)D1<8QCq^1T+-u`cF8_!Rnrq!)963PT8)UHcWTbNIA}(Is&HJrt+66y@{B@oeOo=@ZtxWX&bnR}L)zpWn zUWBtD&CEqoB#ujz)Yi>Vlz!{w%z;Pm-bwnVjSyHF$i=%W)~|GU+$#!gbqHY0>X-X; zME7F6E^X&|l>(+Q=HhI*<=U5N%SH-}jIIZc+TZfru}>@Z>a!)M=?tx0t2KIG&TC=h z@erewJY-??Fjr{quqI7pQ>E&$ibeNlQ}2=~y5!R6UQ1+h^i`ECbgK$XJ#mz+Gb1rj z7r{vFENh5!ST*(NH!xUy`M^4PA0E7J9~KW zWwhI*b`a)!xotl8+VBc5b3C(udWk=aA<1D=C0w=94aS|~PvwE1bMb?Rw@K%nm$y&h z2@&3PzVAzjH?t~^G||t5+#+|lvpc;E&mKR%^Y+2TGr>p`-3~rzlYO?Bw34)vxCDo! zIG8$JP|)Lq1S}wyqW+?2!UjXBVW1NXcYKtjxU!ns9~B?=-zbCf7j4JxWd5(3j|F}w zKi@vT(;Mx8l#)E$9ICGNh;Ih@ZNNo!v4C$JZJ@gRL%7KB>w&zX@qyE;eXXg2#c<#- zNo#`=k68tajv4Ka2i+o_7)+u+LaUi7Y#2+0FDkH0*``R!F*YdrrkRH4tuH34go#Lr zagtIjG+_dK)BvI!W_u8L=V9za8>7}HW{i#Q)7rkB@9NNae$Q}VT;mr_C8l;3l*7Sn zEu~aX*7OS4h965s;CNVnH?#_>Jj-A+_R%w-hwV~{z;kNB015&Z9FzAhs0RIK4$if< z_cvtb)i+8)@w}lz}ufG5I;j+@NiIakL{s*>Zl4D@8 z{xcOu9*$&epeb|^r66`565OypWkjJTt*k2b$9-7?N~6D3GXJcIkUsyu_d!~-2Hf9a6+P7<=X2Hl<6#Dy(>my$t_ZL z>$voQJ@KWgXLqhI<1BOiB?UG2^HjO$Y%3l$inlnHn`dVsvY;M)HaLBHm+t$y*^-8{ z#rJLu1cT)nTXOHa91?cG$>A_VnId2JUK0=-3r@H4heh#Un3R(;Zi%`KJc$}i)d~|n z67`-CGIH{8FdmJszQa`ZIwAu&oqg|TDn;c9`wpD0yGeeJ?F5?!DDNE7CvG=CRQGKz zjDqnf|M?msdG?h%D;jRS66v*k659Dd$BD_H>fuQ^f>HJM93T1m(&|k=$vVw2-?KYW z?>$y8*sXDfc{J(_XKFKR^I(i78ivhs7wv_A&AUL*2bvuzxsk(}c0~ASq{rtoS08fr zvC4oYkihC{kRYA|?LnZPqziOK&lGR%(jgi@V+e%_QxCie%Ykq^eiuCd5MU`df_O$2 zy8PT6nx2r`;A(BGqNHZ5q^YG0ixaDe2>XJUw4W52b-(OgJP>pzNupdJAEkewox5K! zE6^b8(Go7}z-i!XUGCcbhRn*EGpYhIQ_O>{iSKMQ-O-&I7^c~-;IZ)`xq16zZ*4^r zZ%JL1W!2^S(!fl+(pH8Gg_;k{ZiBVuCBGUC4kIB!ijKFA{p`sr2c%TbN-Ks|{p5}= zxI0K48NpSEy3|-+T%~Pjm3?TCQkeNZ+dAcrhS}7aQ>SeS{km+84Jcoz$A{yQ#V6aY zM+~s}*Nba3@NGUAnDM#9S`xLHGPheXN?#G4DG9#b z;?bLPglsird>?ICh)o^Gr&i7B6Erft7XEi_dxz*|XVM;Bo8lbW%v?ETQ*+g9A&}14V}wnF+}nzWN;=w;-ZN1tc@SES%n9~0T@a`tJMzrd zbp56+2#bh~HV=P1a`)gb1npMvwz2qfy=-_lEDWN;+V{={904=XUAw{b`tNV|Rs|pw z0A?#Kde=n$E&;F|xU;G*2W~rK;qq|dx@P}?ZD7*3zdrS&-!orh`HOw+q;U*q-(SS_ zZ7p4%dO)9YO-VW^mSZcU>BZ{o$a>tVr(4oQ>%2k9M(2FEOi3?1ALQEQtyH z)@CE)9+S0f`eJzok~Uy5C$~MW)f?S6M%h$77BeWwMf3*qtF5L#-lJaKt7GE1PFYZn z^bjHQ`I4#+z3_l%gET&2@Wn0F^HY|#>RJDP}&2`+GD$dkP# z(=f@>KIdbaJVwY06UUIDh=f|9MVUnV5$2j3GJ~K+QmTJgFKjp9)(Iqvc3&B}p%FgH zG5XZ0agQrn3TX~8Jwm)uQk3I5!w^|Lzscd*HM^MNf=lup@;#)Ds@!YivxdHdUNao; z9>#sD=oZG!!T`A;1cLZsD5Q_;&DY)CmdhlxU-6xP;;*eo48sN@gO%CWI|`R{P@)6k z7*RT^Nung>Flu`{2s|N>H{_*nV&_lvnLnMqVzGhJ&W!EkmCabJxhQ9$aIa@4v#|u+ z&ZU)CNi&)EQcdamC{Nwo;C1lJO6C!yI&WXm$+SA_))m9?tCid1b04XuMH|r_W$O;b zIM>wV$pUL_dTn=RDb{5@B-TPziQxe%cN%gxMSH8;oU<~Ezub=!y}zV1dA}{6q&!i_ z+6;g4WpTWpcKSK>FJ&M6Fs6i7iYfSKHAnO}S3Xw;E%h7l-rF%QeMYcQb~QU&HKB9HcG5w=2(~C zice5hwA$*y_7DkrLu?)gh$Fz}K|IT(cJocL{j#c z?C6>?ab5c(rHd}aLTA+r&j-lpGph(qzIGTWwNgp6J~c61xRxd}rJ2u+Qj&>MWUq5b z&E>oIC8PaXPi)aj$KgoM4d-`SzR6L%r+}{MyLcm=-&TnsLJe@zCp3U9fHO4CU&yJ|Rm<oU-HqkJLl6>pI_1` z%~8FZqH}2HN;yT6K{zCJzY<_^)3@!@>b_r_b$xzM&j-_K5LIv0o5~F&O_yfT>YaOV zB81k0DN!S{kc!7?s=$9$KVUf2Cm}W4wR&qlPKYgu^EkH0GcxBFvk`DihG#pcsGq-| zAScuAOJI+VzT3?v#MFOx^RN{G?cQNk0f*Ie&Brifc$P%qv#;_I%WAcNL^Bt#s{>9H zIun0|Ho#2u&n6>0m-}l)%&gskD&)!GVT!FF6&--+0gC?8sP<#uAg0xl4lRb?Va8^C zoeb(n-TB5QQ1o9^07d_b&(~jHoaq50$R;-uEC*Gs zochU}*Qal5s;EZZ^YYA9sw}dzp5(LhI@z0`pl~!^eKx7HXyX0$%Lu)SnE7K%KK#{9 z6thnTib&g-$B);0-u4_P7jPNiY>Kw@)sJZ~)oFf_eepo}%ZX>-hi^>w|KJp7Tx)TF z{4XQz@~PaLHs$V0q>uS<0-(1;cPw7otMu26?&AbE43EzJBFMZKgn^BQoN4>Mxz*56 zM@u3qQjlP~If9_i^54eC$YUvQ?Kxtlw}t{KOXp0?k7M~$Ts}RNprBEL=@VpXLPN3O zNMDr0X&C@_b0gqx(F8xi=DWmV^(66+CJ}R&M7?jL zWSE?IXGn1;()t8Xe2SOyw&%5H(;rfkzz|BG7VeX$W;3bw=&6jo_JD^Extd45q}}(* zJ1&Z|o#kKW!?p$Waz$MSJ^Btk0h`6uc!$GXERVl7RH#^m_kv&6v9rC&+2{q(y7hdI);l;i#NQuP{k8at z3|~y$Ek5Ed9QuHtTE>NYnDG;|8<<1R+66VmL|yC-P98us|1x;5#y3sZqq z<)-7m8X@P$br2_jsmd)VbJOJVI%#vKIjoj15@ zz-pwWTqL!f!MzX`W^NsZsWNW+oOawY+Cjl8CAQhazGzva$i@PdZC6?ap(%tDmW-!7 zBs{{h2Yi1f4{D6kr!ttNh#8mH?M{%ig%Dr3wh(izHSdup>1*^Sb9}a3&YP*CN2;Aa zDcZuARD5Um28>B<4Z#OEefoAdJiW+!Y~SVZFooO`R}NcaP%~rqBXWf14Wlimer#PfZeVYg6{tpNz9BG>Yc~@c9=?Yb zvP>hbr@2k99`*vke=2+l&O1wZs<_mUELbREPpBzyG9vi&L+6WL6P;(ct0+r?|{1C+YEly5qg>Te3UnvK36~WUa(pe`);3Rha)gxg2`GUF*N`9h?(2j z1MEmauUdu6luwc{(h_>d&QtN{ili;4&|jS7Edj`9>UmNaAb;qnGqQ&KcOePeK?}|0 zT5UtZ{5%w87|qxGd^bbgp*t7t&&5Y@tV|{6Uf|NtQOcCKR;HcT0Y{Hs4r6+}w9{Vm`teQNV85_nIf8r+|`| zR^&nHXo_=aNNXzYw5EQ%L=!PU)8 zr@()ozWqF=u9uW5!1Grl*-BXMW1Ngf{!^zWt3yJPwSQF`T;1OAz)hd`SPQdQT{K(H zf0ZJ`9Y$slT2CgFteUMQ!OVWtNPcX1D}xo{xCt=Pn30|qr_|$uFZ`9Pu8oZ5o-(LB zrFzQUR$+qw&4<7ubzA#og`~D+slFYz?S%%j)njPFn@X7w)6lj;9n5-)$naxKZfMR! z0is-iCellqkxjTNv`9k&8dK|bmNRmU2qvJ5IHQ+zEzi*g9{2a4F=@_ z+!9j`ISVhe5;lk#6vxnGf>t!rWBMh)WYTm;)J3BzY7kS+L zCB^kv7(FPL)Bc)mgAz6bjI4CgU`~SGt0RYGrX=6cY&sV@y8PwNa&F~5@&P$Xdul0=1r``9QM?EvH^U+O?kn$KQ2)WdAunJ`<->ipLcHf$ zkHYHBs9E%X9;p^mL*fUH-;5)7Ap9{6#rpLKM1au58;KMPh_ZCw9=*7{21*jdYpxuM z;_7NxjY{X<30UH#c!xqbW_U`w@C237bzWs)bLq)$J~*QN^H9Uhm={1NIn0KwNk3kt zlbsEqdSgV+#ogP7LloU^q5s7HaQa01k2X*K=E?W7zvRu|&SaaR%`aRsO=k{Ln7=m9 zd`~?!pZ{xZqc(l#I%VJ43m3RQlML8DR~iudh>6Zobv&4Tu}(WDFTc`#Bq_>h#HPS4 zz+HZHDZj5gxmKC%dG|uY6ZW7?3k5v6ly@vUI$pZXZdu}4G?PuI`?h{4G)40Z<~E%c zBf3(7M*zu%?8E^U)z^OQ<^vJdhUo1Vg696)_Ww~U(86NvE8A0WwBQor6yi{F5;sRX z?d1X)BdZ55>VGKMyCZ3;!k$U4o>1IOToDX=$XmIW+T7E85=m|DpO1fk{qn~4CwI$p z+kG5L6=BSl$2fh`h9&J=P8!{QM|i5f?a`DJ_gqW)4dQ2Jr-Zjx!FxB^KlW%b(`j;p-L%P%4kVTyrVp)|9eKyyD%i#pPHT z&OW>lI^qxBxRKE_mMuTC0DbQ%43QQjo?r!^U3q=6n z^LR61dp*NZP9KkzhSg>w9&X`FD8X(r^qJaT-i5rqB5OJKgebR#fuf=PgE8i>>{U7n z1@3vulPQ~gNB5Fby%8&5{_$#tGwU>2rCAN*n~wOb+GY{KZUG8aKID|GQ}=Cb<#&`m zkGOp8gLXBAeZygo5D|c`3y#vg^?~*r9QM$j z!?n8&;?0saesU}r9)X{i^s{2Ax)tdN?0eUD535Va%F{(^KZc`p>&MiHq=AX}c{Ka+Dx@)Vj$_ROgHY(Z8arO#4&&GQsm!R z{{hp$8i@HcYlq|)o5B6%is0C#Tmq+~XCeOaun|r?V|Br&>IHzq77+s+HtTluTUa1u z1S@=LpIMcKgA3Z8!xZCUjnaA z$RSKH;Nj>3&vvL1x+8=oV}sOQSmn!iA(B+N6o9?)^wHNbTz#c6uQ9K1xntNm(Ie;* z@0$8$1%Na^h>F`nO%m_$PJX(*!XNyAKL1sIW!cljBFf-eTXVy)oTO0Y5;tT1?`rR| zT*6*(tgIQAX968C9+&LBOLs$s=tt+;&X6*yrMYkvk#F0g%$cyhy7N-Ut4Wx@y=~g1 z!u?48f#m08^KnxDiG!glhsE+!b79>`VcmWg@Biq9o1$GY!1snzPDNZ+MiZr`i`0+U zWA3j}$}a(7{!&S~Qgl#8^n}c^QhqB;y4;|jx!G7v+w zX3R$3vX=wlrs9v9(z$G$a{nXK^#^R#x2F3Bq^7u|6ND}wU_T90eWyg>$W|xyU%S%~ zClBiPZK~5(LtntMT!s%X&)-|>&wCBD?A)v&aTWUE2qOVHF}4^EEq74WVbI_%`R7#y z>51<9{)bd23pYsLuy(Y!Kq8)yAB>S7kZ1RI7UTq_NNc}P`El#?@`HkL=lWQ}AyG!x zr}dRJp7|IXU1NK1Z%Nfhs-uujiWqflxifn2zTww06WkytArW6{rl4~gzjbPLIiAVV zyy?Q(t_Bi?#B7$KS!T)s{#-Gw@{i+s^+(ZxFICRpN6qWjp*nlcT#G;IeQbbKZ!FJe z&=1mNG8QQr-=>V2((c}V8)Zl+E=`^M@z{&rpK$lJvqrwYi} z{H{oa^pSR53lem_CYt3wS<(iUT{**wx+D)xrxhGl47m=OPoqAGEIrO2W~_$`j@9ZLxEzQB-=^SwFW*@$5MU%6 zQ(I~KhH@u#@njH-Qa#yNRHvZP#;y0o}3X(C#iko31B{L+-1JLI@bAcXy@3O)Css;#I~XD!<<_?9GG6{Vc50zEeU^5aBsG zn4vLTLO>kXQdW{Sb#!zCAsH4N6Z_lEVXII{);?bGRDbifj6a``q78k~dW;+Cx|`jAORQZh&PTe-;Xzmm%9OPp&90{fz{!{vKi{c?Rg z#9G0EIPA2DqGy!U6mt~2u*K7B<#W2IE2>lr`zK{p3x~R-1Xd-BNb<;}U+9Q1c5g8CwDXu8lIx0_6s(kn(pd3ie(fR4)ibg; z2T$IfP5jU&x&?`&N?_Ti4m(fl+(FoQ=u1J~)@K|J*HZSTcP&3@@?Nsc-IU_eiBr!( z9eHH1x>#zq8s^M+ozZ&IS)B3tLoIc^`;n9*2DJm1diBMY8FxadCZ8k`zN)s%MN{YY z9U0iNB#W{e8&nwM^J{;=Le_wqFj8loHBmoC%4k<@B zWwaAm_uU-fi2fJPw_7Pgu;^J33M`y=s-qt={1wm~-Au7p|3Zf!g2&)SbrL$+CuJg$ z-dWE^wYvqKWr{|rUGl-+TgKLY*)N-<)1=P7dn?(L1PHq(Ji_0S*)}Td_2s&f|bW+}d7uKZV5N1fGP1 z8+;SO)sY6;w~InhCwgDirxLyIDVKulYDfv zFX~-u(w$4?jxbKTYV!6L?6u4jk+QYZqSM~bcLXa^n#rTPI8~pR<8k7z+g_azY?=MM z^a+Q*s}k;5LDZoX+GVsIrz8*rvVEZM>G2~L=K2Em1(n^Rd$vbC*BT@y;5|JOKM_0@ zos+2Yaen5zk=xqvS|Phr0JS@Zx@*lD1BeMq0?Gg@+9OaJCsoKe-|=TMpRxccr!JjJ zagX!;t4cj}WJhGLw(}lf$1=NjtjTGbqW-pnnk1`AH**||RBxe7{Tgz9LF&ky+bNIsZmraL-lzx%Tvjn)@ zKg5U<(4C9Dq=NfGhMI*WLdH?*c;xm(qEnfzGC#HJcbr1n^Hexvm(#yJR($P=nB(4ihEfSV@qdwdYV~b4eXdj!@0||TgJ*uUuEak!%9k0k(%!PT zo)oouPv~lfl_~>3>{b(!=3i5NaNcxtWAHE_)>}97)R^lx=*+X1<~bI%cwxY#t-0R`FI7FuP)!p@T=%KD}|}y>&CRnEnz|HI2wqH`Wh^Wv&6W5>8kTB}&Ut>b+3a5R;^Lb?g^D&zP>AQpb|?AL42tZS=1 zz9POxqtq?rDoQ-6PZ*BDo2(#j)i-eMdqZ`~T~3l!&-tlm<+n2>30t2$KFWW#MoEDk zjNL4?R#VnBed)FN79|gS=3xGth2(A5fgHVIft0NyufOB#y1!!2n7Rc%`XLb~*aXSKH0erfY=Y$cv&*=iw}yk7an2YSJmPlu=nE^y z=i!TWYUZ_ZZG3-oO%YwlVi#5;Mmd>cB^8l!pP2!Hj5V-r)%Tyay7%jGzJs^PhxB(Z z4IfTqjqoM$Y1a<=Fc(yoke9KLFgi{=&vIU`Rz$Z6LR~b+A19{nYF%tcQad(eO%8f zT*$FAh885dnxnXc01fGe{zHnphj7QbyE#12X5dG~ zHj6-o^3NOo1^5m7lHp~<#Z_cEEYUzbM@~?<$s$S(2P7=g6zf`26SisPJi&NXooXT{ zCd%G@g26EV3%W4T?v_0Trv4n;^&kW0t)z7pv2S}RhTeBoV_ zv}it{8q(6qBiQQBW*B-@L;mE5c{ZJ$`61!$xiC!M>D5s4itss&1cL;P`gJ|lhZa}) zl&34#<6OJFFEC1sYyNWI5i$N8uAe3`j8=G@rXTn5^^nBo)1^U^)jooA`YjfdbTyi} z9cS24>{pFkQ1H`Dkzca>qp2@ zP0DdQnY$^Urg3k=wRCGH7LG*hZD8NwiriI{=2Z(N4oz!mFVtWDh`o53-zdC}$VtJd zXCdj{XrG;J&)_c1Ph@@jp_ zr5k~d3~MG+twzVYuh+a@Bu?-(Iizpk7PeGr;%&;!re+f6-jRN$(0$Tc>y)u#L$fSk z7gAH0ySYAYZos`gEZ5pktcB>#Og`he2Zh?t+MX?HPe%-iy97lsFxFKvzS8=hQtY?g zK^=WT-Tx*u!^4f^M}#5;_{lDs5VIZHniD1twr2LGZpQY|L;2&?*p(7{ zySLAe7eAm#;xGA~QO-yq!uDQrxXU}egU!fd4Ccy6P&YDH#s}k)fWAj3ksUZkM(Ha* z4R`BAS3H)0<06}AN#ZLTdj%!mTC9iGa}E3awiAihmF0VrS(^7w7SJ1R+xT7Ip-#OXD%`bXxer2YxC&9O{s{RdE#2CTCfkMzI{2&$rX+Bj; z*~aYZt0zS3J$>G10zNIiVvKII#erm9+Kl5lq}2txyY(PU%sd9!Jv?8+2mYhVKrZRD zH2W09GIr3$^X8CMkU$m)5#gPXS}Ix8YiI4yv0F)zJSw_iWbSQGknvJ(CE>*SQPD3E z1+P!LTtux}jQR=lfPfq_uALS2ymTbjA(R#7^<%Xg(JiPQ53dA% zP=4Fnq^m=MpYVC47v|q52Us{?;TD2SEHEz&JTG=`urERejunYmFC<<_H5_6@l7B+JMcf(#M>QwZ(*8-= zSC!)$TQa;lx|0IJM#n{Iom{h4YJYZqE*GR|rpD3rtUL3ZMoc4x*2m;^&gJxr>`Cn8 zUDmgm+;a79;~9t|md&vDGwWhfySpWDSuY}5{dKHxFcfh&$-rmd368m=8<5fAly(8s z{2x0{%F%4k=ep;k`{$XANZI!-o8j5EaPYB)q#p!b@8O8Sx`+S4^N9<*0d(WeYZO=q z#OOnU8VTaQc%3Yic`7?y7u1I!ngp4aDzuse5eRfg#YAv_FlpDheisjd^NiuwKdF@#b%cf0Xr_$@S)7w-Va| ztsD!{^BUJ5=v6%kF3z_R-b{Vl3t)-E@14$LDbSE?5U~Xm=nLdU8^Vb!kw0$5QA_s< zs>35*?SqW%H9sH}=x@7KNPrD*DA*oW!e?O9AuNS`m&C!*8uD16k7*95K4TbYU^S2b zxY@@x`CwK%?6}TUW_bdvG2p_Vjp|Parj2? zkiM??^Vfndg2y80qyTbM%b=tk8b@NKmfeb%k2mb7ZKXyznc!ZuQGcGYwX0PM69c}P z91MxqU$#YI26ts6Ba#8xT^M`JnR z`f2Mt-m-2YfiC^fZ1F|Y=TT!)fFiH!QVY=&p~o;ceDntW{^0TX-Q6`vHh73=VKSpb zV*h_dGcb)DIIt!yX{bfq{~8j)(}-NKq_H3~*)YGNAk(UM)_@iv-9`b6OX6AB+n8dD5mu^;j4DozSY2}jsqo>Qlc6>FnuQ5Wz zqWtt9oL^@qD&)M7_}uQX#!96qcqy0rW*{_-jN_`Plc^}eTUJ$zRnT*u;SL^sJj%ty z&IiUt&cX%jk(g5StR+_XSbdcWnvw^YBR~Ozyt5z>5q@~PznLK+MRQx!>f_e+ zME&xt*4VreyzU%?*p>Wag0>PMlM z_AerExZ$Dtt)=?!S`Fjo^sh?oEc~DQ!nG{jeXL=C4~y$&;RPcYZ#xU@tpNh>kP8YN z32Io1pLR)eW%Oa9r+5pCV%c7ta?$opg59z;5~_nOiC^eJtTt^uwe@akqxn5qh#*(X zfxbJ(8c(nkIzCO`ni+9zTq0*WE25D*5Sp->AeuXM$KsT5D|Hx!dYMaOcE3~EoM|hG@_nMoYgFmA^?sbNp%$HzEa(pfy-UvuL4wS}>PI%RTB>2kbbSIS2A zlLvo%n)!Ur33o-h;T(i%Q;?()${&=4-3EL2vpZ;Fqf3(s5ZU(8UDoeo_0YREz z3tFUJlR*q^@8WKlcj|fSmv=NoCYGU`*#4rkfiVf8vyoYDG$F<$5IzJRcW{f~G&MEK z!6m0r)xW2I<2D{D>2&bVUtfb#*ml4aj0pK2_OzZ%CDD6TKHlNLv=YD;mES*?XmeEi z@?OaD94dDboxY%NKRy^?*DkFIjMHYgS=EdsQ7#3N_2UXilRlj5jvjv*EPpo zjTdBKJSV)*nQV*olx%~iB=b$``r={#_A8`^+66T}v>d6v#0;;m_Ej`PaNXwa4Q%u) zjH!C=hH1mvAgA2EcpS(NL0dr;pd=sLb?&%)iWbEY;dl$;0T*Vh2t+P7*WPo6SbWFG^laP=-*EMiw8px;XIWv#`uE z3w{sfJhkWy$rX4=x2gk}g45S_Z*0moKkI=dnO_Y?gdircBhG zz=v|QL`h*>+`LgL5GH92UsX-PTMkWa5GtcoL2%^a2{v7n1lk;R)zQTqmaiyQ-1Y$1 ziJ&Fpj;EIK-8LkyWHE1z4#rr#G55r))xD!D-TM6X?u0(QeUsTy(PPKocc*`R_T2Z4 zTxi1v9@hg|>UebF#;9sYHUU$muH%Z&Q!A=_vB62jeyyyN&4XXPheHOdo7BnKipo4c zzm3mfEp?;IRyLRE5%Xq{S*Iww$sTfq{o*UWQ#S31EH!yjS@XU<1y_5HEsQ0ca8mHD z%8YIgp*2zRd+8Z!B$w4%u5ECI@uAkdxPS$VIA7(H`%iT|nie`&n^(TQ?BvwVpqB8* z39Xs5nr?N}6cJOGwDY;)Ax(%fI$In0?&PJbfumgHqO4=dF+V+33teB{72N$b8WaDs zl1}EsJ;j3$tzn)2(*y?=Cg^9oLR%7T!vXO>7Iv;&LfASMkx0VHS^iLy>6S`*Mu4b` z{v!gL^o!1ivp^x~>ZF8KNKz>puUG8u_Z`$^=#Z@*Tk34jEymwCFZ5)*rdJ7f!T4hxy+R77}Da{ z2-n{%%Q)Hp^??s%h*8dmt_?3c{gKL7f|A8cZcHKEYG*(mx$?ZfEHH>%5tnQe=I+u) zTfEaRO(=Z@)iZP6c`D7Z9BK<&PPx#Cx(Rp94?`hgH9KJx~2_|xTC9Q)aR9<_GZs_X%*+)i6oXT zQ(7o#pCMOP6enY3 zUdgLuE{(Sl#nY-vEK2n8!RcUj(n|T-fwP(bq1K-(&E3u-%FWq0W4K_lh!^j1$y=ge zC6>+P%WDXO>m5D}xh(6u)1RPzyN*|P0}rzp0ZEm(tgtk{6(s*y8gK!j?A_tw3L6pO zo`Wt21=m+gl(@2z6pEXZ8>~Q?YTYUj)e&9NUy#6pDt#hA8soF!(AFnvRXS z_K@rBL1cv{k75sS4UiSey67@bpE`p|{u(csqL3n!q<1yH$T5i1bb&zvAO&B67W^&L zmNJ>GrO-X_nx3ULsACthlrwQ^1G%dZ=`&hIC;}h43~a1 z&UgPZ275Qy7j`29l3rKj9~_qMHekZ|qX4eQhz?6tlLQi9AEg7S?L4btDhAh>}uBtJQ39=LwzSdzL4`%JO zfAkcjN`ym};ZyIQa@7EjDrCA0=^_TC+Ku@V-q`e8>Sjy`YBLdQEF;_Hz(1>NrYXw?|b|kr-%OQ z`aOX+r;)6%0~t|RMozK;XMiv=I*cSkh^%b z?BL~ZIh>~ENHr!BGjV+i#pA1%!ZK>j;znPu_C(zL?Ocu(+UGyajj$l1W_QKsa>A}x1TZCDgX#loY7X~oPt3YVmx z+NfO!=U8b-CK>=&1p}fr7;|i!IGtOUU^sElj`mFZ0vY%COe%gl2O39DlngG{W}i8) z1q<)&_QK`b8i8_kQHJ=zq984_efzG~?&kK6$Xm$F8Uv}Yu1;vPznnP#yD(AU5%41; zDLj5Tl~SBX$n|<;kxy|@>($;)*?Ml&zyT(p5YmCJ`X-_Uc9$bRB~z9$t@@!hs&>qf9u>w zeLdQ?H$xNDkJiOIyptue#-4I@U$MPO>@VcyBGy&h7_jG^^WZOCIWG7(A{15yQU2^3 z;)Vf8C<;4>LOHoOnsXpO11A*Hmtn_1fD#Dwr1}c1^(RPBbwy7ucIoc9f}VB(FlY|;--|L}JO&pv%6H01BT!@g$`+T76=z-u7pcGN)crIP(_#t5ot2#d+QpjGBp zF^vOaITpKisG1Fk<-#U=*tHwqszXowoKtNM2Z;M=lXVeCKcPVSvq5J(PWsRh%VnQH zvflLtg3g*JvoLBui=Qm!R@FAsx3|^w$mL1|gQWr(EMMw_(YcbX%D0)X``qryTF0+5 zys3Un%Bn@@W#={@$Q3vYo?6pqJUnC(J`K2XBRGe+-s3W_g29qi#L>BCpbLWO}(L0k}vUZ&pq9Yd074a~Fx;ekbTS8C(c^1QGx5`xMz&q3tX|ip*h; zadCmZra8*h42~vO3|2w+`?}XLN*t#TG-SinTy<|7e9sT+h#w zzm>nn#Z~g+K;X-P&GDKijrxt=tr;d^LXVUhP{f`Woli!MnuW0yIt0q*+T4GrQ`BFi z)vGtoWWUqEqi}p&L;>@#PzgO(G&td$zEB`GtCy=~--`RxGtmE&;A8RQZ7+Y#BnUBI z@^NKgiSqbAzRo)y>-PQsq$s4U$gFHKv$Bee?2M3+E?oBIvS*6ynZ0R$_SOc zLPf|dLZbYRH}~hh`+UCc-ya@4?tkvb-Bt1U5)>AAHJe6o#K* zR;c#NPd3MFQZF}D(s|A0yOmKB82D0;CSvQwwmjwuox!?rDFpZ=-+%g+3o_l7 zTPR9powRZMm};GYEgAJd;v*^BlPc!9kL!`6zeqD(mVTo*rm_a=MWWG*i-xoX$f*pUSvW!8+fm_^SnAhA1CGXbN z1nB~%AIEwZdh}=;86^qi%n20k#%#;7UP&U}LspO%8#VnnN$yv%Y`Z#l0>n9by5iW{;(TX@V~P={wS}3#fE~H9x}~#;Z+9| z{1sI#1;PJ*wjlM>femLe}L2}^oj%_*P*o-?uL^W^MYzp+2+_C9`al!v>@pl zTezwHiNeVYbzLhYW0+F&Q4DPyEyrd_`Ln!M&*!9Bp7LeEM_#MEm~mVfa(MBXiTh&L z=lguwEnP*{i$9?^eJI1rx5fsaCED>E}h?GD6Qb1PdoFuD2p^pFMq^FY{g z&^N|SI6wR-L=uMRs((>4NFqbHF3*>M&2{p{rZ@DiUy(IaL^d6L3u(oCM>fW;jeN#Y zZ>+YUYnT!XOy)>Xs^7mt!a4n~WOoggBxKntWf{i_=Zd%(l-Kmt-9b$0$@^!f@Y|u= zEkau?FG=awYh5Qdo}_2hObGRUX^d36I7aMQ_%kx?Rd&aor1k}W5FT=9c0o33=nITP zeRQLxx2Q&ZLi8km%u{M=w%i0!+yY$0yiq8n(qdn_hh%&YNXFIUx|5-qaAqPi^aC^K z&0))$+E}AZAVU=ce0NhU2IFF91udZec!J>&b+odF(OcFZO1v|dD4M3}N()u^qD~!E z>e99p)SVmge1cydZ$6T%Y;fo8 zdKl0xT|CdX)bmPW^n;Gc>DsEf;M2*)Bu8T(kSR^e%$7)Sq0LN{Zb(?=KemaBq`rz6kijbLOyk4H1|azvJU75J%o>XbSRep0AoV7W@4`>4#6tioh@WPYNA( z$BtN3s+)zR2g2I@E8W1!)(T^9Y0s+#zyIfp6^(ro;(dIWX{^{(SM_F1i`^NNcX9@ym>*bKhyqJ7Up` z5;Z#Ev2)u!^D;dKFMe^2E9r6PXkO;`008+RUN8M+W^DnfG)%gPLLui3tkxN!F;C?S z&!`{z0vMwwaD?pr!0+7$aQWsEE&e=Kem)=x76VZU99WG&lMrp|0wKG+Ch*|dTaLdU ze@&vT5OCcNDzk=!qw*V3&ybk(hfgDbWK>(xYg;dfoq2gb@og$XdpM;dI>Q2t`ci|j z5+aLR3WE8%m#!#NLna7F)hl?w{CiqcbIHvyH8!R~Kqsd}SY8MO)m#YZw2)(kWI+() z(aKUC_4X*uPo<8j9_CM~0kQtx zNC5H`KtgH@$qh{GQRXQgkANJY*YRK>E*K)Iy{cJo=QYePyV zrBSJF1xA)FC>tXm&GA!@*W1IGgn&7gfI3@!_LJ@>m$1J0;1Gc0p6?Urtqqyu#}^>! zWD(;7bQ(l4KPDkLR#36~a`C>uLAr1HOI%LtptgUhL68gZz?ZTc8faLKc2LU#WyTDy zQ3SmSt(Ctw(ChHy6jKOf>Y2QL#cSz)882*w~4IwUgdBujhoQC?rr|z z(^)jtE8h#eppk&o2cJvC?K&O%*!0&ZI_Xha%jw#p46Stx&jzN;81lLCwhP?mAL>6J zeROT7cw$GX3%t-dhtHsRhUP0f#}X21rQ!lP(u`uK+E?Phk($s?PiZi^DQPK##0&&IhTBGey+|W~Sbg<<{ z*+YLWJ?an4H*v*O*~D1~yx~m6Pt5WjD0PUH)BT`nNQ}hB7VTth{cd|Pc{{Cz3|;`J zR}C-ZiQaiJRMc1|9AjW3+_|i>c_Bh!L)D*3M2kU}u+UWPIaRXgkGUIqU}Pn$oo3d^ zrQ58|%U~WYDJeN0-dn3Vc}~COupH}zNzGD)!;87(LDBOa3jGm-{g1Ac>yEx7F~X>@ z5k_+_ERH+pBOlAG}PF^qk zggItPO!7he$#bxy54$rTZD)Aa3qx>U&l<5kh{)_(J+!%~_z7s{n8UwzDGTD@6&u&? zh^qULA7Q-YDVoRB7w8+c)Jexm7xMNTIjx)tDpckBmzb+@+SY8H>AA+AC*nru&SB@h z^EcmW(r}Qo3arxf6&kdC6MkSHaz{<@@uK0Fm{FC!klb}tVY;iH4o|*89*xCz!HRb3 zwc9uCJUeV@SUZ!5_ePJYbC}~(Mx4Y7>Z#pRi$Cc7)`d?_-CDay>_a4tdr8#2ih%lj zvr$xA{BG3O$wQYR)%ZPcJUmHp&-~j;L2Ykm37iZUUNfwV31rYA8x*E#@SfUdltEnu zD+LY*cY_8$X=adl>EbciB6{q!J?7uDr_T}5VfU)yTHS-K+gmlEC+pTz-!<{CC@Nb? z)=CIDi7LBRRgXSBuiDiwWctouEhkgHJ74UCxUUZ78e%Xj6pBxZ?jbX!~b0<>Fi{ zTQ<6JBaqMUUYK>;KxF5vl2u3fH8fY2Z9n&H%32q*Kw0*VcwS%GcT{WpWXFBq8wc$2hlnMi2B+^0QlqjS|#mcG=9HeZ% zcW?>wc?vKkoQ=G7>ICJ!W&5f<|LYrR8pDQx#({$bsRQOLGKdPkiG-saDHQLBAXHe05F(c1-)na>XsB=^9 z#|QaJLN3-BZhfDgZ)I+;I(Un!e3-_S878e*H=eh*jL5Y$>2Q)u3b5!aW;u<_Xfi6B zmY3x6SdUwJxW_{e=^>IpUf2Ae1oD}qnNe{CCsef_=W=or8Mp6-A{6NRy}au@tMXZAHu3IQTMnSY~!FlGFKhi<^YBGou#^#pfNlg2pLOl3mZ*ge4 z_eM+ENhA#rmpO5#Wk9ivS7yGVC*qj_hrjiMi$iHt?Bu=ColCd#79>}wONl<8&{})9 zE{}TpgdW}8?ce$gcU$L;R$oNu3BP$-1NNF0FJn?JR4L+%tDnflZVxf#pCICkc=G_0 z-mHR6$}8<4=cypE!VTX8Cy$xyop1D8+f_zl5_JHaED`Iw1S_x&KeRLltb(bn6>xy} zW?qd*u(s@g@kjl(T2UWNedZ=1`!F=?Z>8skt`cp{n3Tsm=JYdc@b$h(Pu}kP^;$Dh zOX5Pe`Qvg+ACBG^BZFDwRV>SGG_D~mWPNmU%@f31^D9N-4E7RVKL%{l#Gkq{#u4Ip z8?deMoMx6>1GE+Bk@b;0wAwo96&sE4-fdH=^Z1l;OLA|kqk1ng5iB3cy(O15XF9%S zUC61Hp~8JDseU45Wwp@YCIf!b;*9$@j3U5SHcH<{cTJDQvGLg)CIOF;)M-}rukU{B zl3rroap5Q$V>9mcK}2v!$m)Tg%{414TQE3dfrE_ZRh8D(a#6)j%(Z8m=<}Tw4aMPtY8;?SmGkW21XXI^XM(kvR1xIDJN1}xrwah@31&F>>Qkc$ z!f78~ZF7`qC5f+maJRfUWNLW`@-*!nhryKdQ$Jw4Ll4%|vkf>Ik{>_3K1tB<3V}^B+yUUw2el8o5un)R zMED{EZ^MvT;89qj1D}CF+s8UP+d%N2hokGhUia@R9)h(SkjqVL%!d+YfDc1qvP0F5 zo`P|g(b#9pneN?{wa>1ovp;(tB$<=<#0WObS?NzIlSle|I~hzulHl|{n9_EwgS;=E zGfB=dnanVlUbj|hxw`-H+uD+)cv}#F2<@-OZSlOdoh0?DCmhq4x&*tgZR#9DRnc3I zxms4`g_jWKFV%S3YYG;0Qluv;+_Xy!%4F&~67>bvL&x1kIEebp2d_wJ){zpyLWrRmPU#1T8CHiFz7X`2Qt|?aLZVuA#TP6l4wxSXyKJb z+d+EvHKaU3F8#~IK#T6GIQ;g+$t0H(@8mY)&*Env!S7Dmi-0~?XT}BvQZmn_j<*jU zT!NM~G9H!F;}SfB&g@=INoYx{Tr&e{*2taIY#WefWvY9%+*}XfHyVf&LK&53S=Ahh zk15ef&)LM>NY2h<*SM`;h@80QdnfL!^2YPknt(6z1Xo0Am_7pw%GXz(Fw)`S`ygC< zm%XMmBMzi=9o>0}K(by*8`k3{JA@%V7iL(Y1ND6vxP0KP43(rV8hI>pt0LGQdt1;b zI9u&0wXW^e@RYjW5|~YES&!A@i8Cj(E4F^S`bOc~lcS*2B6ko)jI`RNp1m(tX2*vV z&(lT-5Z8eFV^w*4QbDN&SPR6F{Ld|O z&>RbzsTKqJS_bQSLYxok6X9;U7(&0ovHMf9l_+C8r6~q2JM_A~hdafO_QmPAZ}R1u zLqB{bM7$@rM(OeU(5GG&QoT$Q_B#e$LABw&YVZWrV87)ijQzZFr)Z-#W_kmVfXwqAPZ%fTUbx56}HThXls!vl;E5A_^@W!#(w_Jbu zIPIwPg=(Qe3c^bX1~+r`Tg*t6aL>#G=V&u+P;dfs?}@kQm{=R`BiHsnC3X{W z;Obs4!5v5WBv>9PVd!32XNSZa+tlu7`2w=`x>Qw1dYndS`>Ep%(`FOfx4&|IEvn)c z$g}&#sbxWx&c4=b_BzJiL~wr9XIxsOP>gc{zxSF9hupQ z_x+Ao3ip{0{;Y4jlYE2;j=-ZYOjzaoSHA6CNw~GHQ}r*A-H(Lz z8455xR<^u*^LGsJfWfcwUtR)r$X2w)T6oAh!kFGp9by&{R>GfE_rLlpF;-A+yP$YA zEUcUaAioujw*DUx)>Jghu6B*w*=>OewBoA@xFOl$h7|Jb-oGLJwr2Lw=1nr+2Mbj$ zD3q}rza?2+#~W1C@M-9zo4@Wt>=~*E5A}WT(D(}qTUmi*O2c+M-Jo14!kp?})$2Ns z^JRZ^RnJIV35nW>!#?%Sz7{XLMN@09x;l+N5vR4m+fN=v*M@2{npsDviW*WXF9NY%GkU<$^BvG5n`|EC$KrX zJhS_9<-Wf{xi8SW6%|53pZo6`T~n+rsKf!Y3D`D>C%K@opP>53izJ-2`f9Zu!sCo+`-ll0}|XUc?+sbON3&OVx+`Nh1CL7P3 z02Kp1JsvUe=^12Y(tn)pr10E%*K=R$(0pU!SrYBS%NKuroNK=O&`-frWcu6mrI_EF zxN*=`*p!Kxgyllswg>i1Elo^$O-y0-uLY}Si$-#J_s=;f&7qZ0lyBNFOoAR`D%-X` zgC`Fe#Z%hXA*1+IoyC_2NXD2|{pJJ$f;Z=AJ4uB^bDV1S2o}UtxO{16Tc~mo&VE|u zf11%D<3_Vuv8+k<0<9}fQ>g1>E%8TgnwQ*Oe;;l4=3<;K8rqbhKFg_n)RJp`2s?Qe z?OU#rGgIVujpWx+{fLQWqo7Pic`pA1Ji_NMsN)83ytC#ozviElFF45F6T?ZmXq;kv zABNnzJW=Bm>ca`sUnm9Cl9;3$gg-Z+A`Dj+5kpqx&ksy>iW-^y$0(Xa!|b2qA+!LGrcpu*5Pjp0 z)x^%O)JnY?XEtA;->Nm)jZy+?Kb0}%@mEKF>M9=H;R#9LewD}RLVPiJwMJ9&7**Fp ze(`)a%LnhaT7PEejMYgyZw50I^WC^wVQ3eG$>80(Y?EQ)kvS}8eYMuR@7%m^crmwu zX_ZZ0X(Z!MRD*&A5ewr&R$&(x3iU_;f{D|g8wbsDck435)o{>Nzj25XQIc>Vlwlg; zkGO1u1G&WSZ;>z&8LIBy9fHVBPDrD}6Nn1@0PBG$XAboLJDWi6kEIo_nv0etoI87) z1Q{*wV2;nQeXvKi(`xT=Dstq}2#pLb^yzWv^LHH3(}dRbO{Lp>x21gx4RWe#7?jIJJ*)2qdGhx1< z>|Ct|wblMHd|+Ql>x!bB0x0rKG{H(@g$C8}|7?X`+Cs9*LKYQI zLKrDeqZ|TRO85+rC3vjNEU;%&|Fl1;L)_(5g5&)G_2u<=Sx{na+ctrF({i#XzCK5& zOy1cer*v{;M9p5Cv2ayKduk=?4(QdDmvBc+43^g;9S~5_D8H_}bGpq*>O)!}$1W+2 z>T`YWbf<}xl-H?)ZYkHI1tJ{PtTAG<^D5ukZZCHdISrE|wg3k8SB0%(WNk#0;k9S; zw6iuS7raXja97 zM%ziw9olmMPm+cQuoD&EXH3`qz21q;tckb)g|~Df9R++>z(rY+7W#> z=~s%xVaB{0u?BjLYCOD2^F+ed0$U+qbZ9^E*t1oC;8{w|bX^?x1QTaVm*NvE<*kjX z?zKo=`rc`)2jPCUsk!ob*1kquuWnttDkYftg?3`SWWoLUcGu(kMGNTC)8_-7g&!u1 z8HY~F@*1QSYC<65vf1nD``@!OlU1CbB}l%q3OgUF=wuQrC+6|;%zUVE3>tEg&xbbkd4qwQVFaubR8E~t@Plx z*(h!)TJ{eO%f95iT{k}+qWpBUmHyg>=EgG`n__8ah^tJ6bR4ap93D_ zz0Oa~dOtLe3|9bc8uawkDgEdonM1P zGTJpwj)wbjM=SO$kON-s8ol4#hi>t?8*vDUl z1w+VZ2bv{Zp;c>*LAgSP60Z{)W5taEx+eD?yd9JpFv{6;WbSE55v7KPS^(HGr*wXD zWo6y+DVX||`lyT#U%!`xdTq7h!@OY>i}k9M&>b~_**B7FzrQ-5&wldHuo5Q6C=&6X z?cTnYQWT2E^disRMT8;eo?at~%2gG&BecG@YTB9uh8u<* z$^#2ZR$JPG@tQ`z*s~G@E^sI;a;(&NU%U_##NF+yRx_U#cLl3zs{cH&Lijaqm9$V@ z>H4rzUq?3M1v%`P2d~K6X6s{)xVL@+8fZOZv+6yEjNk=^3YEqlE?M!h;J7T9qvFzr zD&2PYbXT1;mc_wheUs+WlOIbWhiknL9SY4Lgw=3*@#jmdm(5!M2mZ@W3ubGA5rjtG|<*!U)B zT5^M=gPa%07@dOoo4zxGfpknY4C1BvDQ`}$yP#FMNDW#7EgQU;!(1ZV%vC=Qc`S7< ztQJ?Qc;FoKuBVtJe5;&RAjs~Td1+K2z*n7O$uiTzv4Xe*t$nRutwXr6m|2E=Cn7# zeqvF%W8NdWE+GM&xh3;vE=8D0-Qz;qZrLno@>h(V<-C%~O|rJVc=B_Qyei~j)a-6* zdXIib-XqQH&IMn5!iD(*xz>%;r1zD zS)w47$)*?QO<&o1)-eJ;lxtO*#Gh$hz z1uR!QzUvmg9bGWUrT!=R{f`UK-UIx(Ao={y@4q6ME(nMSA0Qh&@S&rO^6*4KA3+Cr zg=T-jG4?c#0Hg*0+;E5%nK5q8^HA;-(ck1&PqBsz8B$-l8|Hb*9-+m~A3%q;iDjOFBFK^mgEvJL1D?B$%gMi=O?K`u(FD>W`%{Hsith7)&aM zSohG~>YF44SCWX%Xd#f$uQkv}z{}h~387QY*O>}Vv|OH3xhO{|`EcCbA-TWxLMt>&T^sLKkJqpV?A3lP+v#+z)$Om-1p^T<5eUKRy`7`1bs;h~L=Ad6o1RC6#{bYE_jZ(_SA&q)FJ2O!5iBwBx&X`}XD# zEqfJYKM2=`xrCZ*~z8Q$b0wh zksOaC_lmbY2goxWuOrJ1st$**8t{C+x>mPY4}!D{sdcpPLpaPs5+35{B4{P2P0n#|b84j#gkAzc>S^jGYuFx0fN4?%q&XN-P zmj(V9E1Y5=Q>!{G-bR-#lt7=7J4+dAXgMC->-C2Bz!8nJwTYvZJFmK|>fd4_h{E}w7h(8Pt7_eq`BTNH`>Y|cRZ6i? zf+FgnGihXhv<_fKV?tQJmRa=JA|vz2oW!Pb{7@gRyYZ1-T;AGQdVa|W!L-Ns&yg!I zN)mBh=s8(?m`mF+V2sl4CZ&FUo`8o&T&gMI^Yc;+A0_4Q9}N=1{J330^nCb~;~8`3SNO_$d>sK3-|X0a5K+l4t=R)5a6{i|Ykfh&c!ezfsh&yFymsFYofA5Q9Gi8ERXP*pZ)#3~`DEE^x4%ZF zr_FJRYwfjzYzf*2jTn;XZw?7gx)1lOqngDO)Um=J{W+rOizBTL*B;(KW%$lDc7NY> zL%Nj$ki+q;G8l-8xKLFd{5{!OU~SEWpj8P;aK?XeDDMA5sc(y$rlxrl?cJbPa=xLM zI7Ch3Fa(>v%hdUT1Kb?NuithzzpZ+p_j+$5(0d~~c}{gKhrai8LX`PX^W3r7%qud3 zMat)+lj4s*Co;a+ku~g4O#bQ2Mn$YnyKABI(`l~RgtgZcGNVd$^pzg zg;Gr>2=>yNU)rKO=7-fH@v%9K#CB$qG?Gg=@7^5-<%Ad>SRmec1uq?30Q?Ug{Eu7C z4eJ7edmA7u@sVb*NWAu?`vFOjHP73Z66b9yUs!3SJSrxT1MkvKkURzC%^$UtJ8)6VP###UosAm|Y-Fsk(iZ<~pTs36Pc-rhTz<}fEBq5RQR`m% z;Azi(vOVI=zOZ<&t?+~ILbv>578@K!OT+Ea7Cb$PHqjMzhrr5{#z-(uAYJg63X@YE zlm#Cn-hZ`Y>aUH`7q0p2GPGEA+hfMi>1LA3RU4klW---DiK&=2h-5~mS;xut5!t+B zFTeiUb*wSCV!XUA-g}6Ns^psUO*?P2@i77gJ^V9$i8kw8--@%ps2z?y-P|*9k;J)a zT0Zg6BR3Zn2K!@3u!%x{qxikrrCr`_rjHsHw}!AMlY+m&svs|x16Rc!3nMBgUVAg{ z{mt^%s=&Zt51)1mUk0QHQ_S9pf6sR5*ZIp-x+`T|U+|hhr26`4p)lJX z92K>hI^MiXjWbt1936`q3p3hzy+8NU8cL?QD(XwA6GT`0q95xnST3wb`D`pZ?c9(<2(S-8!d`>7$t{;k7^eU!41)#r!JZo9&jOK0O&{rm*Zz);0YdP9>CZ2uh)ixu zJ*ek7pGeW$Bp4=ZGk|keC=pTq;AGuBGF&5}f=>nNLU^S0dthpEi1Ov}V#& zi>N7DZTUn%(VZ~#vmDUg`A~FMyS^mD8YC~v77Zu8DJUH26F)^|r0CzcUVXSh2*H~& zXas#Yx?Hn+3AE=5>B#u)tVeJytOz2;I51)aAVL;)RxbO&K+Y&98*X!FZgZzS^5eb; z6Z9BJ_A(y+?a0OF$EZ!?FO5uR<_eNq1^@z}27Io_?0n^2YQnP!7%9>0q0fx5le)rBMO#8{oPw+VBICJ$b?w@%E+ZdNl&4B% zaVUmg!K8wea>2LAC&IE{Eh*jh(sUyyDn4iZ<}s^@fFc9%y!#KxITLwVfm_yqe$qm`~4t;fwWJ?QFPt|Q8#Owt@UT{p1<4_-N_PQ@N$ zrur1O+w%&lYc+vBNAL+1>fyyA~&6Ue0%oED`kc2ZO0^@7aIg zm`xV#YGtQuX@%Tgyjs_;DysdDcdR>nZMJ`b=ayg8<$LrgtZKF#sz~h&suV5zYltcZ zz4c^oo(;nS))h|?Lhkcxbb^;xhIzKjl1Yj#Jf}6zGZki%kenF5^deL?k4N-W%~e@t z+jGgN1nf1;^u~>unz)+0Uc&gie(uNe5dHIsrDe?Sbf6Q16^UyoRyJbmrg_}wT=q>> zwJc3NN=#)|MFWkhL87V_lU(Sf87E^y>gGniSGdgIzs2oXzu>-8b?xk=US*1)3jNDi zkwN#i{#55x$#;vFn@$i6bzH$x^9=63T)yvblP{fCk6UjaZ1gX;{=bUMuVI~>F)mJU z@F1qfy)2+B>e5%PYC;$nx11gHP~dd_vjCv{x9y1NU66^eqV`qkE7IKZI>>hX2Tr)u zb05Pp8X#l!sPi4>^jHi_k*R5fmQp*VXV63$!nAVUx>fJ7vi)LPtk~+9w?0Qw8Y@LHO19A%-?dkt6jBKj5+mkN7n1=H|X-j_eZU?jkIaG z%j##}+h;tydeugy(vCh*S?UAbuejfQ5g6`tt@vlkS3;*qzFVh3?V_pPo(gk_ey#) zm>4Kcwcp{$goXEhO`xCEs6K}RH(^Qk| z=`yxG*Jm$^)#?$8#fGNIkX&Uh48|>cCC}GrJvbmkr^mK^v!viO0gvlWG=GO4O5hNb zVro!|eLnJO{uhH-Lj9vykrB}knWM|zE2qOkIXW@T`u9QzTU zb{Jwze6PvcvZG>NYVHuesP+TD!!z~Jy;4<`$R-;0r^a-@+Ss0zUR}xFk=zb?^3ofZ zWk@~lYCL$B_6Q#bo|e}3wrDqSJ2V@<*jBCLpPn2 zM(T;R-!~pJ^jtg}ggR+D8!i#7LCZ}j$GEVpd+3xynLi5-FvN9Ua^Hm4peo<|2)05k zEc1fA_}JVrHUnOVLxz%q(0`E}M{#<^{@OK%=k(ZV80~0#hFZX)AeGpGZ7JYeS=l+e zV0fh+oncV1_mKXFVA1wu8e6tN4*&~;gu_1wLexm%VO03;xsJ5KnNH`6IE)q(vydm7 z*J$waC^y~ODIuTr#SNa7q0`yyznZp*vA*4lnII~M-e{s6E51prXh5#$hi^Ww6d$$f zcd}wrOEf-nWrrUNRe90oEWX_5{FVsQlmF#@R79S(uV{Gr;?cI;^9t98Fah2o+VY%z zt}e=|kAIYmZ}-+ym^a7aN4*;|*x>qBAM{1qUuI=zWZHp#%kQ28t2?XBs*v7aMy_iF zHq;E+yDuSO$|4?tXDZ_c&cKq;!IB)9CS~aY{4{4zq!>fnVqj`xW$K7E*)xK`j`?Hq z&@pTkBaE22gky&_H4QeNP-@p5s{D8dF>`(S%l`4RCOB$m@xBaE8(k@Wl4NbSpm5%Y z3g?ZT;)l5UgQJBL*|(m(A(dlMlkz%MBdPuAcyg#5*O(Fa_5A6u_X`Dmxi%Y_qwDiG zpuz4dz=TCUr;_*INljfJ{Rn>a?#X#IdVQ|$cWM=}S1y$?MaZ_&dD`?_LI{o5i_h`7 za(OL!gb&|A0be`oqTD&osxr7mE_6}lcB^b;j73_`F)RG={Uj->TdaY#l>13i>)__P z*czP-YeWTW^iQ#1ovg@!E1`RH4qn(=RU?3QOZL70hL)11UF7SNN{pCJ}!KV z+4ej&n-WlvMZVB0@0amFL7wS`$m)Ps)9J>^CKq}VD1FuhS85oh4zW@3&DsY#7@6wx z{W!7e0C2~jiy<6mxrEOq-xGO3O29*6;!d7!?Zr})qTJ)Un(Xw-!&l(!Qgzp;q`$#U zhfb&SUc;6eqm9JDv8Vc!J8SPm)y(QBKTmB{DXbfe=m~hd=DNUTkx)e4fc<}EGjK}hp$zwW&PZ^d!x_24>y+aQ}n#V=Itg~ysUQW zXBk>JhUXxU@k8R^$>5Lj{|WLw2_Ze_?!Ek%vO^b^NJaSoP2*K?Rau&$(e{wpCJbpt z&S0@Z_7s9U+nbIeX+6kw`KPOhk4NCYFUNoFf;j<&)Y=Ng&ns``2vh34Qsj@J*l_H# z9B&*R9Fs8C5b|2M4);gYAT5HS82ZNV9*JK_avsk)*-JlfP=8EHG{cd9YlrFNNjq~< zoKcd)eU<;)+H>}n5eT)vbrx7o{Bi7VC8MZc=Qib+B3eqM2L$IeAUFz!VudgiLwwHJ zEY%HTS(@(DVz!>W!wb?wHSxi}E^B|O5i85RUZcgSwNq^C?QxTYtuqetxDd@A;&N{F zGnw5PN#G#fQR@+-mF%-bLRVh-AqYRdpdNwuDtp?ZO-{e6J9xcs0!Lw2B8G?q6U&q> z9bIf~u&z417HCLnbawOrS^$t&{yx?AMiCvuZ`Az?8&0`|(OJ+LJaI8o*Srp7U=2~G zJ>tsF6ORj%dr}9Y9`)bt6i%|rnmDm+l_c@U2;5y9(l0et1RZO}<;dtXlabXa>Sj|{ z3Aq=M!Z#J8tU-8_@EdEEH7$$BtFc7$At|T5Kn+!!*QKuMvq-30b<_}FglbSPvCd%Y zccbxsdEtu5f!@(Obhh{DXI&Qs02uGeJJfYHvA5dCeBP1!j?u)B=;YR%W!hwsQe&^8 z0t{2X9D9C}?Ohn;IM7La^`$$uOu_JS3z#bddy-Gf`#1jja1WGUIl<)K8HUexyckyu zW}g%A$H0&ucN(FhwNfinM@e2osA%Nhi;%WN!O}k01GLDLHs9ay%7le@D8sZcW20Ws z#>e?bd)e@jCQ_M`0ixh({$70&uee(~AYS5;gyM^by(NQs@wrR=)!tyCK{DK)-WFem zCni9P^w(&6L@cj$6r7Hjw;5xn>%Uw+-*a_2rNA{LYV15>;C+2!J4WXHf&_$~iy zN!ymR-{a&RRA*V_juH}U!D`VdB!*mt;D?|husF?-u={d8$p0mcUzPVEWBfpCSdO!> zV-8gNyP@oz`1$z3&uotbXE|aq+yIvW_o&m}CyH#GKl0U2cVN>qw*`vP2Dc1kXxQQa z)hH`zNC~LM?$sc$>)r{zifBY`>M6wByu)-$nD~Tp#{J(+A73)!fE)6qUo4PM{(atj z-4053TOjaYP`ql0FG9-_^}kuzX0~lsG%Hm&w6`L%JD4j{F71OR4E>e&#KOI{kW%5b zHnX<8aDL{4*QH}zbZcbXmsdvegI**nxThcb_|?6I^kc_n3?rJU!hV3eR*FN|uA22b9h~$4jWK zJDaKG7ZYkUFsLVD?)33Kx>H$~m7mO13@1R+xMY$OYeQWyf6FrMk_N+U zuV>%k?Ilmzui-sp3w(ZPR~?2DgP+duOlqx#xx@M(GS7c%@BfZO1y%s85wDZ08S+d) zYVUuD0k>@JeWBr}U`kzdov@uD_%S$+DLn_ofE1CuZ2rV!_wBalR(&wbkDj+pN84V= zKi|a?fk_vmZ`7QHOl|xW1c+ zQ0oPP7fv{k1S239vMU`{2+ zjbNv%z5)3}4l>zY*Gn|TS=&dR@=rNDw6ZKV^%jF9~6faD*tDMaFSj=EMV zEk~tv>O^?I7IApS>x-TZEC^zjL4!b@*lldr7#PQy2;*2OF2wZUDq*j~b>MkyZEgoD zD&T|hLLG?+&HmgqO~XF0Yep2vsr|TsGx4AE7$}v0pT`jYNGes;*xeKy?Gb{1%U+`3 z>5DZB_tFb?)c1ng6(Y}(r-nra8@AJLA>dwfrro>e_zg!kY;-r)PCwg3 zIc||zeS3T|G3pReCXvIrisYQ481Xpq5e6zKOlEO$&GmHo^6IZ`C7(ar-ALos;z3xKuQq)u zg(B6N*k|Uc46;2wxP=amQ75Hw&(8TI;E;i42qP@o`L%z0R~qq)@&=FL`M>hFfo~Fd z(;V15Gy%o}IM{({ta9}Vx4g8LoaWwsLuz**Kfhq<7`C&eTj4xx(nts&rhwx4EJZVM zx$Dp-ASC%y0V86pAnY|%8*)RqrRp%zyIRpam!2;1XI3c+GIxDupKk9sZ2$b)Bv9ej zC}-}{svjPAwIkq-M?BHD)`-u&gg2jQUQb<3aO(6hk!h(4bRNr}a(_e4gG%b7H5bcq zQGP5uA89s_keyq$=>IOTPo5@=hNY-g_EodvvNDm@uttj@PO@Z1iE+f{z9V7Q)O%-{#g+Y~c7__4u#eNHY*KqHR&O zw!FyT-Pp-VK}O~Jwf|nB?k;B4QO}U5;i6l(3)V5iAuJ-G#U_Qbi=>I;Pc8QH!jtR| zo+6z2_|X@weI`1J1U>@~5& z>=pN$*ouGKmbIvxy9C!{l?QQ5&%8|eN%7YH`}6dromE2GY@Z7n;acXDV=^QyWtN=6 zXGUa{d0s_^r4KX8WoGrK4ds4GRg-eMDFbio{OYb6mlQjIHEru{@S$t#C6f|pzohuh z_xrp#ISCM5sHIup`x8HQIwa;83SX%BJ_rEz#nn zdqiI5Agn6IMTAu%SKc@Fg;Ut)R=S;7FHT!fP}XuLU6y>~8@px5|Z2DUpBoe&eP}I=#^G_UoOyL09#e&DbyaZoHeLf zX>!exTULDZCTF!KnfP_R@507AN}mq7CKMe;+RyW~gPk$i&#ja28A&QS9G)<-LRhu` z8)5#7>=Bn60FNz#FRE-mFtf68N#(~9VZ)mTFFa%Z)B8NQ&F5n7Vu`}?swrpz1u1j@=ftaeTCcQu>Nda05rkd8|&3MPp>#l4Zk0{F(d)cchUn`%gWrN0#yFQ_Na~ z)Y-g4^SYlT+qTqNS{k>=2RZb_Quour=ph|!9hpKC^rK|%)z0s}{RvZOH0-2+lpw!< zDL4>Az=2d!X;>Qs2Ik1Eg?7Zc@`7VR1;h}5_=S^hf9kl8elaCxc2D$nTdJqA#Y+HB z+rxZVv7j%<_9$1Se{)H@zyuz^AxxI9;UFbSQ(5rt&dk$}`Y99J_6L}+;`ilqrRolQ7N191CU?9f<`d~C-CPtUlMk9?=xpq6$L-hDVw1Lg-y=6QeJ!Zo#cc#%Y!F^`m_>dxrvSq3bKBBkD6Kx zaw^vlg6-pSf9>6)iy9|#Q}beUHob&gMc>41ynge`HhmGFhHm7M=1$GT&s@FZ3T@g) zt|oPsZ&lo#Saq!QS*89oQqI!7BQtU&ktx;xq*d*8^ZTM>H*XVlmAp?W>{1B)6NBD z3oK-atG44sJf(1t@?Zc1{O6N_Yc7%^hD3gGyPzz26%@6!xsh8~6K#+D z6Z`=f3u#k~?Z3%%wgT{@{)+$H3~Tlh$j#s^Vw|$MyR!u|wquO%=gd+5=$ntD9i455 z3g&+CM?_nEx{B)5EnEHe<#W`fGgBA1ZD@*4vscxwffw*-9&yZSrbmzqL7b zC|9yNFtj1@219IUC%PR8JxMlK9vCkz(r3^nc_ zcY`2xU_W4ZdX51RQxlHQ_{LEaklp3pA1suGn ziy_gQad+Fm-|UX~o6)jQQ8;;ALT5g{(>HiNn{Cq|?3{}ue(n2{HK9^y?reRoI(@z+ z2@iQmd>hZ1oVq#!=bsC^ie5EM{EK~h9YfkTIcN_Tf3`T&PMAP9)k4N{US zDIlE^(jZ;Z5(3g8(xUS1=P>U(zQ2$8!?|#-(LdJgXYaM{bw>v3k37gmY(SeHDgx6( znJ;zfKSCK#OZ-xTz8Sx9q#FAwHKm_ezXVi4yx0GeE$7~W2|#=3OjLKW>3YriiWfgVBhC`N zfRD)cVqSAWC3XeYLeuYQa}E(fEclN2%*76QSE)G773B<&X7wr~f$vjh9u&x#AD|2x zFPquGU11=~P#kSQ#Q_4%uS&$_R}*xH5nOUe<()nl^dZoO zbClw04q6vQiByGa$z*Q6j75{R4g(`Yzc+>3UDK8CvH6UVv4B|rG4uM(WivxWU@@yw zKR_wKz!}eZJz$(c`mHK13!yeu$$t8bZSW>$!hv@9v?;vTLF!r^#iD9uabT8pHFxo3|M$yH~NkH$uC>GoYKDfm(I zxvoDnJ=Z#$x8ShC!nW*D=ak1WX_r5Hi89lpu9UvPs;2Ix_WPHedW|C~PqJdPoP>(Y zM1?y-*Pm-%#seM=$$We8LXXqaf6~kUVC~-YFFC()z<{iI&owT#wy{KkX5A9@7)ZUu zRTR)nivN4R^MgMtBzVsKu4oRV&%nVKxO=-lwlfn07HHt+0zv^7cNjR22s;y?u(ySX z0a?Hy5wO6;p>g#3GvXgRge8`3)F@jJ;Wr*VO&B8Sj9u6s_x)0o1)hnHYQtKdN5cvK zb(#$`s%SIGFX@>srTjT>)xER&8L){62Z}l}hLvUnG6uG85ADKv6550Tm5#|uxLwpcWMqb_1Z0|kM>7LWh8?Aus8Q`517 zkw-X9Jq+4@ov|YFB)oD0zvovTGQ5p>?4h>0eal<==M*#32hR(}8YvK(29Ye!o!l*L zfSav3WRKxwYHDN(@gktP^sha3EIr7@+_e(`gF`M;f7`Cj?=Cyv%48imN+(mq1~}CYBB9}VLjL)sn|cGjO)kJDxw`h#Fp7l zw(?1@AyhoYz=4I_fIeL++bTPADEGZuVuSR=qI*V&{7B8cJ=4#sl1vWVR~+5OfnS5A zeoM7D4O}@67Zrui)1G@Tx8jz|Onm#RQf}1j&D3bI%qK?nhbAjbimhZ9-&nDYE!Iw~ zFXhy_uG9{uGGFd)v|mBo-6mr-53Taa_oW0t(DuVd;ueF~4Y)_NU#p&BIR3_(bxGg= zm4ntE=PIayyPl@Yyp68mri=YVL?tWF>$E}#Ha@rvJan$o+zK-+55dD~*-qLZl)|b-A zk$~{Y1J{*m67qesS~z=*aJb}npOpZ0TjSG--M6ZHAE$pSUe|B=R!gR%5S#0V?nmqwne$0(YU~NWW7N48R`wCKnq63I*-C z&sFar5jH?QZ3TRLEJ2|6|APg|t1&uyMr;kv@mER=X&+=>0xtNtbLD^?vE?(e0=WP` zg{A=>Y*Izh%l&{J;qd(TfqpXTIep!DidUlDTPC!}?LZzeT?wnQFTs}bmIHtK=gl`n zNLIn%JTD-t^Y27k+=36Tn=xdf=v$aoVC8K7Oj0{jbDvAgo{6w&j zG_*}Ms22LQamHP^yZ24ki$VyA_*nMF%oErc6ZX7f^VN8ob8 z*yiuyfEycERc~8}H@Qmlmc5kwIB!kAU8zqtLDtqSX_Grv1!6C`VlE+Mjw_7hLtfJpz*7ep7Em~k>op5uBnqU3fcRB< zLQ+mLK>$R^t0`@h6;yFteW0f}h}nk;GNK&{L;w&0-b#PqWw}nUu}7fI9SHG_{`0Cv z0tW}kI@%JB0&zm_4z?&XsNanQAgg$^<^j2m+!|~&y0#=bi=>w}XqnO&1XX8(Zn zg`*Y97tG`Ep%s;p|p zPQ31SGo6VjonQKxHuGi0OXN%ia)e}Cl!=y@B$0m*zel7$vhHQ%aJ_CtC z`%QOYj1$YZfi&G|J`Gyy;V|)7rjJJ*hBdF6(-Vgl;kdw>ONKxZn7ny=+G z$zGHjz!B?;^H9_{@(b$)jDqjk8$2~PfcXyEw`1?D~QZJleFECwnB zw^fh_&KHmt12hE|_Mi@O|2c-q-FlhT;ZV#+l`e8M`F2L zs)>FyN1TMQ1&rTV?MgrY%x;VHv54~t^phk9k7i;pNI8#I;7N^}Dpm_o&H0!KZ~D@R z9r%VvR=?rvQ+jX0m_W%fqHfFd-sEoe9K{UM&(qFhWJ7&wOw`ru{x-y9Q@E3vg6{@` zecPzVxC2dEGUGSrrg10 zRiR++cHwK_p6xj`n6I$N=mG8Vvw-d| z)y^j|7w%cEy`p@_gW+pLXc&WQc{OeF^mN+SPpja$zBfjsOpqZc3M3^w_fC2OcXfAm z0PJ3n9c~0f7eL7RkFfV&Uc-0*)^~xLNE|MZ_NI66hyw7$`v*PmZqT2_99p}s%c4% zX1$-3t@xkha0Pcaec-g#Pd2mxBAM1zG76IG*J_$7fAez(3Qc(-Wl&~WTeXU6G0Y$R zP8z;&1YYM@y1>-4ulXy4a;#eDlW}?3)H`|aMYk|+HJ7mKaUzO7P0zu;F%62er2dJH zwCo3wmR=VH!^1;BX&|ECxdHncWYQ9-cNFdmh!W13*PH8|cF%dI2Lv)(f?F+0EvzRIsdR z_h6y7V~*J|*T>=)sRk~s<;vJxV4jJ({njr#cK(Jnt6ssRtSIAKFRTHK2@*W!wmQK~ z_nG|=y%eF%>zI`)UN#=eV#6*tCA_IBPu|@icYOC+Ud!!vX{bo0FpRX$7{RG~KcCNVjCbNl@lSRIMlUQ?&pj0J?k7633Z7;ELi2NZ@zi`7FxiR> zBYZ%Os6dU*#X|vHY;Pw8b&^&Hu=)WOhUQ}68UmbUs7Srw_PNs0mcJ;gCAg_Os_!;O z_$68^g+X;nJy_5$yZ!=E%k`IdQLbiEdVhXD{N;X#Ql!r8> zO-8gd+tUVQ-}G>?cKWkqd~%xJCf|yVqOhJUs8pDCLb^@Pzpbns*3(0B(bIId!Ek$9 zT15pgn4KSxHXseh_zii|#|57)a$?`#CYf;D6TJxhy&i?)LZ(f77s<5e@>(|wfj>%> z(7RneQ<|v9ph!>~L``*0r!6n9C=U~tl~F_oN7O@CvOk*ax384KpH}OWEH=!a00kITKJ<;BsB=UCqpD@k z4`Ni6MqBJ=0piDN$W><-AS&j-P(bfo)EK z`&|hs`7!MEXj|T^x8L}g;>{Bf*2KHtWA?wWbL9;t=kTWS=U8+8vP zJ1dL6`MlG0wDw!0n4-o}eZv0`Iuc%K2aq65}jOVfa=Z5+*hOt8*#clr8@;Pv)aXTM7HB zpDLLXyH;&mKqY@4M~CTW(Ba3@62Fma@!*W@YyJ+Y+eElWHJMpHb5tOtt2cEjlS^}O zQjorGyaz3~Ecf9~SVSkMMn_W3WiyR-vvE&CUx32=r-BZUJ%Ix)D2S<@E331e1FHkV z!5la@p?6tL;QhZ6P@&a{@=1L({Bn8Ri}UJja(We$SJ`<*#g-FvY$Lq69s6@Fu;a4d z$GfZRcRXEU^!%@JIZNXhI|*r!=i;Qd6whRM6;UKo6_mY{V_pu9|Xnd9nI z&wX`m6E)f67vZ^sOa`=-9lo9*lmy~8W_^J|NxJX*bDs!FmU}d6@^n0o8AVR<1bXoE zh$(zn4C+u^6npUzGCBu_}u;O|t#A zfJH(H*`P#|Hk#eqqNFy0GWMn)17F5a+^}_UZ2nXH1P~(tvbmT;OM81;8xYdyawdV2 zg3_(+K%Wh2_4khEHu&4lH~R%;1z3w4_zPr^Cg>L3TpoPDcIZYuE=tMH?>0&MFz7<* z-dyM+NOGC*+Eo`P#=h8}$Q|=RG;(pwxGp* zyPNjC3u=aC!05tILPa3uLmQ1#8LH?{B@UiI(M5$+aU!ap7OBi=ObO znHo&Uu_z(;6T%4kI1^%&b|}o|CVw?>B2^)=*^e~Hf_IQsTP?tf**3!I=K^H)tLwW* zxUe(xknuN6gucptydy#uoJp{aKEFu^BoZ4Fd*HBb2Qzgs0l?H5_w8RUVDtE+;vIpS zA{SdVC_{PKciRa7`)-IBQ=HZeFX#pEN^aOsyH0Z&uB zyy>LLCsg=`@UjN8sco;xkegd%0dmT9WX$Nx$i zg$qIqKu&-E223-2P^4ATxPoV{4Y;;`;$~P{w#|DE`N0aqn)S))mALfq+$VRN%OJ4OO0QdH7o1pVmOh ziZ0jmo3c#7BQx>|#fRStbXelqi5^)LR?XwCph9=4NZP%fEcF;34hTvLPOJdl$4~wX zIJg%+dVOD^fOsF2k))>&zBc@7v@>%09+3?y#03t{xy(1{inp|aLGBH#W@w*dBRgPi zh+gU$**gI1S%k+w_#ALlgN7UNk^G~oM)I(@Ip;+hR%2T^W4fm@Ba&da8KoNmH-Eq8 zZ%TxP>&(Z8USG6>`uO`n;-#J{Mtk&hp!Jpe#x673ucC@m(rc|}Pv(ZnFHDHoE@~bI zEWWVBuB}-N%B?Y;D0DVzp)hn(;r-Q2G2$v)9{28>PKYJ&Oc4O6i_(PPHu&fw^-5{S zieo5i$_6}0n3UA`tOmOtSL*cTWJ|u^=XX)dKIEcW5cl1P+`pQIKod1LQm0waN=ez``g7r5CCkw-Gk_Rlak{@@`^Q(ga~(}0HM zbD=vm$lt*faA#mLk5$o&E(NezxB~f%W_?B^SIWAw=rmp!&ye38mQJmd{qh)u2F_um z+>FFPxcV&mzh3O$u0PC=q+?+Y;P(xPw(2G45GSuP5MX)g>BQCcwdvZ-w8)GYX5cHj z=XUtT0hD4D@A4@IcZDwJP8oK8+_*P#@I&_!D;8Jc6=b6QZ(apU;bfl3%MH)7HA^cr zkg-MY4_O}2x(uO%&@G$(v zYXm%n`a0kNX8>mOu>X_C*b#AU)D3Odw$`0mos8nBzcaC4Bf`{0^33++qo)NS7st{?&B(uK(1#<&mi-obsK13r4lOGT<5Bpz(Q5#zs;&i`HN~PHDi@e;xiBeCSYt z&K=9)fP#YnS-?P$=meApfJ5hCZ-jI=J!3ljyPm!^<%sb*<0-czn5-J3h2Kg9-QQyo zHVL1UW$FGA2`pcqL8!$YU=AEp43gAJvB@qf*=W^1!Aklq^(lh*1gjpFK~Eh)N-9C$ zM~iz?QzM=6z+da#BF=dTev$i}t?a3@`(p^{e5=pw%zQpM%WKfAQn)db14q0 zkF~TACgx6-FbP#7WnkB$X6|SN26dDz`u>CFgMaC7+@^xhwrh+dbu-yAWE`jf$>EHU z8PPg{roV-Pyv~`!-&+ekDOK%#@+Hr$@bDY8$w%2Xr?F}`zZwf}5(sTfN-ek7dm|2A zb*1jEFEtXomNpTqnK!3JyTnH8hY*lb3<~YYcglX#xVJ0%V=WEn@fNW}b;W)O7cM+$ z<6?t5s056lM$LBeURnz98pM;PcjU#VjHTba1AA%^>mS78p;ze5VTTpN5QYgcmX5bR z7kbyN`hTR^kjZJHTD?(EU0&rUnZtI_()Pj!M*Yhak3DHFyKA=o*{knUcn~&NRv*Ox zY6fZ3&m~oY?KKi^Y6H5C$LiptQ+EQtIm0j>L)$N4J7T7X!}#{m%jqxAz07YvQoqf_ zp{9}XK@>J5$NR2;yLh=Uew>x+Lq!*c5V|3tV(Mp&S^z5Wn({a>0#V&qXkcx<6n@ zzqhWti!Y&7!SA3kRjQFkEK&6Nw)^Z&?ecpndnHup7$vz^gwWHvq4f<#w3|v8VCO`d zECrrc9KngXOH#=v>=*0^0Vx0fQYx$L$9%)EKyjeA;9NC=860U1w?o}O8U5!~Vrk0kg(-bp9sm9&lm)>?M4 z$XyDy-D_zj>!RA_Os$xrl72BB%z`B82wQG-KzrRv@n!S&3v#h0~5zI7^4(7?_Spp zkEpcLh)G$nTZR%Hp#%UO`57HPd^(RM0WysBYNNICM8)EolDE;U9(>Jz9QZ{V>V-BX z?r4%yUe35act_2z;BJW3GXjbWn{Vhxar^um8kZ26LCv;<0-|dbhQ>`>o*Ef+c1{@=qsQA=X0Mo zKy7of0Z<`$CxIdX2shl!;WoAiKz;^2tQ~+0#Rv1P^rk)+A>IQ?#{e(#vdSH?^y?&# z3kUM|LgEH*ek#==Z0bn-3f86?t&5D$h!uMv32e-=`(}~|H7!@RFVS<=@I*Dg%U@}a z6x9L$!18N(VXKe4|CnmBZe>Ne{Sesa{hpMr*P0Xp^dc7J4;?mawF~6U*-F)m0zY_Z zha)BRgst<7+u&mrPkG2EQLu|TS<0?=3+|CTV@WpZ)MuE6Rm^#-gwytsQ#0@m|)C$BMC5x@m!fcTFJ%0)jWTI>!f|%*& zJM-Es1JGEnxZV(O=1w{BxODmZp=nT4Mkr21yJh4~6f=u790;hvP>oP2xz-sQ6u{RT zQ6)%gRQ-9=kT1{sX6noNXy;z{ox7r4xnC3~PVx;M<(!!~u1NVW3{;p9s|v|{faOVy z$k8uandK-uY^dBI^|BrN$XOB8b``=cj#YpEs9RdGf5lE%CYboZKX`^cX+m7eN`WdJ z`wQizqn)NyBMh5McI;c*znz<(?L0U5h}p6hUG~qncP{GeU}XYFfxJbSBS_{2?gSux z5$S+(`Dc_yE6f33p}1fZ^JTzmaEzXZV|JF{UCGS@x-qy%Gi07+8*hImr(0bYt)%qQ z4`#sRxIr*S7hoOeC@6|Q`kA@VAI!Sdh?v0*}XaihX%`{b&mgjz|4NZPb%<;q*L3a(Axg4%20-PH0S zjo{M@^v0N>{Sx;?XdkTJ<8hsS z5)}S=)o?GiL>X)kc$tgh+~FXj56C0$z2T8WUHllCrQ;eu`{NLRtV%{&ZJ?3VlnlQE z5$2F=Q0RA?yIzY+pm*$EYGA7M$0i!cDE^zs0sQE!t>I=sAqBSs`QMI^iuyFtPEVbT- zxG%*>axrhb;Q=^3HU*RN+!!0TUnHPtZGCVIWb(i!P0yX2_g750sc})%3#Bet?QoW8C_Uo0_U~Y{n z%IJWgXzC|qSYSa+yUD!WcT!3@xe#yr#&^qoOqw~#`syzGr@Z6`!jVjqy7;+)H&0|_ zbGamFroJY;?ll?lJH|9y^SJMQJ@ugaOI9<#uG^qFK3BczXH6+7E04G0^XPuw)t3lPs?dZACt*h!oJhBbY-004NVcOs_c6c0U$tz zK?F$O1;>+5;jf#>&3t(sM!EK7fq{l(Pilh;I5xOGWBxlHhU z(f&+Ap**}&eihIlJv+TMBJ^HSyD+^POtq!<>VHkLVFhTAwp%S25Dl`WX_v^SiBpK| zSHllr3epSZo_(+m83qNy1O+;m2WjqX3#6I|6H{Az6rgPbY#AEWfGiA*YKl_>Dt#PJ z7kTX{n7ML^-L8TUY}{E-6?13S6?%eX?lYv6Kp>ei)j$CDfGdWX-l^zj&P-ouujSTFd=`(#43 zy6g=%+n;7sL`r%UbS`M(>qnm*Be@(Ph>)alMO#3d|J90D?v z5)mpKp^5lxkIH%8k=G=+X3($1*&63RVBW&yegs!-ugm0|f-OAhyx!O8Um9?W^ODuK znj5#9-U(mISKgnh&_}Y|zK2=KRjGUo9H8R3Gmgtp+xGIm#kWcJk%O&zS?u zZefc|Kf^Ba&=OKw_Urv=*`W|=#O?Ye`}Lp??0d9Q%Xazf48vjI2(g1I2|hRnTyQlt zcLED$XhC5McQ?4z?0|6xM85?auL@m+W$;U=4}e9$xH~};*LWMu1!{E#;!%8ativ`M2f1OeL&qr zuj#*h)Ah{Y(WBh{&R!`to+~fcZ%>B!bP33U={*{Gd|tq4em%STz12Z#?-2i?;?X8C zSntd|PqG4agF4D{84PN0aD^)%oIK#>2w)R!=c4=%Y3P5BmW5nW$#lDnC+=M=u%l1C zTR3zV7$gE7-WOjzw0(AW!;{m~L$G~*!F<#gIroM%F+*&lZci@8KIfvyaGEQTi09R( zp7Scyf%Kv{QZ)5G!wkMuc#Pvr8JgB*LkALCh2#8c%Qg3G^k(jVio0^ zj9wa7%Ees^peWESLufl1IM%Xt<#AUsZR%1?Y1_PKlTT)He+_%OYKD({Qx^Bqm(`Tt zNp)=S>e9Exo4=!X`73@%K7UGR_-?@ypK54BWq~NL>ZfVP3$4@BheuNL1v8hH?P**> z?t|(;%dc~9Zm=N)VH}_;ASwK>pV6P*UkneNlsT~e3g5wqzjXVlG_?M*9})x%k6`nf zWLWRXvp>L`VY-#L<*Eg|?Nc4YWp*rTJ}uX7>^oWP*hv$$zX6Y*fVsH1hS^UlJIp3G z-`AFC%|)}lYcfx5LK^jcKOcy$uh2`*sLpIwAv{)Yjd8P0NU6u|6>#Ob721UjQhQ}Y zB6;_51XszOv}0DmYG<7e_Byf6pKKSCX=Bsym#h2KeEGU>2}Mg>SNR@#e0%Qr#wqyX z961P*!R>#BfnzexbM$NxINb8$I-cS5GR`5nWkw#OYXYovx-fuh&ZEHV@_{vzoM0>)o2*(|wdPhUZ{U%O2TcIE+~ z&*sL6$q=B*pLue9jJ&U-+5=AGpQ&&LZHv2m;WbsTVO1Y+DyVtmhESo(u3!fMJUKzyhhz9JA3Bc}{=mI+jXXO?mTsKb)1~~_{ zuipI+iT~(P0s5u}f0#8W5#&N}t}4*P31w;nvGE`u9!-P?^sfDFIZAk(+pkh0asBB_ z?Mz2ArI0skH>xjap~rq+Iz+LbYu{%J$y%b^P zbwHDTmGQOEZP_*HET&yfHr+g7SN{a1Z_dw)a611{&9pA zk4B+b!txs#9b4-hR0WOg@IjtLDQcQWiB0X-N5j)^-U5`t9HfuneF^hg^X8$u;g=)@ zkFUo8mz;oT1~B$#a<*PO8~X)6!|w(pubrOmOEuSb0jG+Omx2NB7riq*_j_^%Bz_x9 zm?GG;pY@7jN}P(EO3=GXkFzz*8qi;rjZLH;6 zS0O2@63W9DuB)e^m&p9{mA%(-7o}o6JIz@vVi!DkA(gP*?z^R4_P{WOq~Q1pUMj1Y zi%%KaBj*o>14sk<%iM~qF3j*hIsnLt^jx0?D_}%mXNKZrXXl4m@R&je>EGr1Len@_ zk3eZrJ1^PY4(+q$yZt~dw0s9i!su|W->VBNwt=>_Pn{SBTLCG(8 z>S&GFdi%oNr=5a=yt1@it}7L)llXyR%ad=F_bR7Py6TAg;)}09klNbRS97IqU)=1$ zz|aC`m%R|kZSbq@`YVe@)<+jX__Q5i8T}LO{|O-3IKaba@{b0`hzt~jiSeArUP)S9 zO$LUh*eg5PL*tn(z-6Jf5!^gzH-X-;g-pl#tqYpB`RgF~+kP2U(d$7(l4fHM@*{bE1K*5dyA zR{V91k&lkKN#Vo_6J0p@`*i7|J<4|!KyH~`Vz!OQia&KL|ZYz!&z>s-l;v%M`4O``wF>g-?+(h>iX zOadJ@E5v;H|0yJ)SMXfwr#0LbBzT>f-b2{#*>nfYEC2xnjT9_k3RXTx7DjpTWRs~K zE3sEYYvrmH;WL4=2m&%51=C$I&y!`+>dWAIJaw;PzVCTurp@yV7V?sz}I0nF}KDc?xDCYQAAt@fRKw#RLuA zPC%;V8{*OR41BIzVBPkxRk&ZHND!9?O?Cw!s1sg^PA&lqK57`Vyc-)?&x)H~JL-+w z71#16kX%yOglR_&LA$Sn0pGgnOax+00Qh^S4Z+|A#Jm6sLqmPeIRx07oek^>+}s)d zzqdQI&Iga`Nss6Nst8qgpL14%CUO~Aac_he>&)zyN-pSGu`G}@~3 zrtu~2La)vFYv0*>ai2)Nj@H;90T}?bA@z5TMWxxkNq!>W6NKAl6sT8NO(AQ&mcBUs z<2inUO4%GG#b?J!=(POY%_l-dHk}0kD1Ff}T%3zody6-J}w>Ks0K?>*+LgdZai82T43fx+c)kp0OE-1XD3Us2!3DjL~d zcTd0I1C@ZBF3-K90Lc@Gxj~RFOi_^&-3I&>i_pm*vAZnhGQ2hT8RB^UBLq$HX@UC3 ziy%Y_VB9mWMGAqOyC#mA_Zm_KGb|$ex4u<_Pl>xrs1YkA;rtVmTea0ILCnz{zGm0y ztLFrYoM;v6v{Ld_Ni?Qn6^>IbEC&Yz*xv<${rm6RIsRBBSg$CF%YDkcE=lM#N97u~ zs%MbE>Z(eF8vf3;CO$ajx-GY^s?7o?_mMZSpQvi?re4A&xZ>eNswe(%;QkrzuXhCD z{<5GXZjNNEO)Wo8wV+wf)VNA%Lf78}l!P9X`zJ1VsaWN&1L}6Y+_f0W3v3w2zxrGZ=S-4iJDs` z4?$|cM_z@X~ggW%_0>2B~G0L*mmwu^2(I&J_ij!9j43Ey4{NLKGi^m7A(L-0YvN zn?0Hh`)_LXi;lbe?X`w)LNiaS*{>I4ad2Ezf${>Cm9(UgSuDxlVwRph+&$hy0cr6l zjsFd*U49*Az5Z$aWwtA&O>KPj4`UK)#}b57UHy7zh@2xS0V{7FY)_Kpxj)6q<1>B6 z|14WD`=(fSs-p8ULCxoWjGMPPuG96a)d=@^JsXyy%wfAr0dMrtOs?To*R(MZsAAP8 zSP3F|^uaOPWu#Iwcs_C`KB0?&G8c1VKPbET3%JiLL6emI}e?Bwl&jlrf z7MJ{d=Uhe>2oJFRHg_@ud6ec(4(2XE6mRPeHtwJ~H#cL2e2mb`OFal%A<^oDAycu2 zr23j3%I;dxq4;PWZ?fjsU+9?E&%BWN8|&_~CoKKrTp;k2l=!95uW0GgJMAo(HzREl z1*r(WllzaBzk1)BNz3?Jn0SKE?6nrNqR#A4uK8ZDbEkFi z*5jbG(xlO08(4I2VuT^my2L>G^1GGiO~AM# z5r^gG*Y>{I?Nj!zRU8-}yf3g*qsff`ojZTNvw)kLo7mgi0BNHY2=|7G0ZSRc+JO2| z4hWf(I78+%(;w*8x~&;1$J<`6pc6}1gBB_=dr=w#B%fXpQi?QooIY%z{-^}j;eNjC zCT51Em}D0s^9ySE#gtO3I6kVawL9#6r(8a6D|^?Z*rD*(B z0k7;>km{COWDrgXdt&gIzAL!b*?vBfqc#CLZ|S>D5xel`4|M$=ty*hOtQslKmdnMfAg>g)v2t*(1P`smx-AKXUe zrR=6tR8}~)h*9x6jSrQr zaU?^@_1a7YFvURQ9Zm$=uxSH$%guUj1IxYEC9-x0;{f+``dc8l)2O!e_2Jdm)HHJw zfzN+@*W6;zEH;&X{^}ZbnKYa8%TNotBgtUWK{AcxynA{Yh=Oeaz7$J_YePwZEv1+c z=F&)iEYMM`s8K0t_cRwU<8`L;Xktf@!_xk;uCCorKTLz+F21|r3k>#D3IuC$GR|mBljMZW)Y2P_IyB?6ToB55_rD0wFsTlq5kVDdjNo`?UX$boI!s@nZ_oi~#6k zBLS5;7dCMNN;Jp?708lNrZ6QtG00sN-2+&I7F2Roqr6~YP|2iw<^W^b%&5JR1&?w{ zI>Ya(lYd%9$9s9bPn`Y}o-IO4PhZ1~_$smNfA{Dv1&xkh&{kqYnKz`&y(kOs>)}2A z+;Z}Z7asQB*pf!L#MKB29@BJUb`{+)b6%|bhDvjSmET-LbqjGtN2&HynI>hk_E$?* z4OFg@SdUOCUrAZ7A*Vousp1N7ixt_-sK>ozlE_}Eu{(9@pi~TCCw(+Jvjw_ODg0sI zD*-ddWy}klL)gB+;u$2n(`z@5_(H)6BOuxRf0Z8>YoA?on-BQ~Y6D>d=kAxlHozTe z4?{XT0eT%5s|m^yoeJcP{;rhK!9d~-={Cri_yvXSPr`4^C2n4Y;O>Ls$f@fsqw2i(MJ+$@}q zsKF9t1%{!XyU)vq7sr>!DR5iZVD-EXR1=B_4Q$Dro$=5D#I!)||+N5~Cyq3*r zAVZ9j3bc#*ocOp4KhX94Ps4+HYBe!k#+$RF(=e)}M%z~h8GbbnOJ})rSoPD0RR&^e zlkWWFdZx@CgBQ`6)Qo$%`~lO~KwQ{w4BNb%t3|bcIKDP~eJu15lMogOOySVFp>qcq zz=Q>y3CJE6rUqJTpg%+VS^n)0H-2?@0U0r{mEUy57>~U)5FJ@gUT*<2NzB68}x3yj_z))DK`Tr#|Q#q)=7uzZSv3rkPQC-F%6U{*5~YBOi$ zk$mg$A;~rUsv7l?GO+f>l8~G+t)V(_|M(4}?(az{Bl9H*bhYwY$>S;u3TrD@WuKOt z>vd-5ye(P>CL^xvaujOXK^z2+;A~?XT8l`)m$-r>_<`%&AQ9kdG61e-=9j>04$jcp z8+RW-1hvPf+faH95^yzpWbxj~6`?kH9>TbP+GH`0X_ux?xs=+EkZXN^rv zTd^LXr()o(jQ$>JEDhyuunmTukl4|y4?x&rsjw}a zRQs-UkL>3}D)L5Ew8%eTlJ({5b6Zfr0j#sd3@@$yv|%&SPb=#=SRs|P1z!G-2me36 zGlZ#&l@k(XiA1u3GXw}X;Ee~wn}2q1|MDmrO?@x!0E7T%f$TnT*3E>5GvK9U^M7<8 z2}KloAXw5ODI5e#rU)u6jA~ineW4&Xon!OkG_D)hRuy;NDKo{c{ka&7&;S>a#YH^T z*y4T}$_kR2cn#LaBj53X3Is4S<=hYJ6ov~e^@pp?C`QG`Mu)hC^P0*_W7aUJu7qO_ z(hyluD9e_&n}vvs3Ii30M6us7hS^V7nD0IKk3<$e*21cM7>M${B8D&=R zw!7Io*{~{r?+uFm`)h&H$?uxNJ5&0W`1Vcn@a*7JZ3QUI6u*)7 zi*Fc;Evun58Y}m<7;#;KW;hErofMEtE0247ILGwSjx4^IV6`uEdX-D7G0t^L zxII3NM`Pz>JfODviL*k`6xXrY2Gmw#G~i+LmWvz(6=Mb!JJ*z0PE=7IpaWoa0$BSJ zK$LH1X=`pK4dxbLz63Rpf147U*58>Lp>iXe?%8C6kd*wTlJ(;jY4)F(M3J;A+3Y1RQbqAw-`^X@yi^uS zENdrTAN@l^-E~S^BTiK=<6Hez&7hvU7j#uWqPp4Nd-w_Lt5w1W_zfxwo%S^|Tx*2+ zhi_@|Dc>JX>f0>0cFXP~@#?WLv`cQg1_de~crtr4*0VZRCso*8Vq_U!T%o#iKz8wY zhf_#e3uX1@^LZDu zo868jQbfC%sJ=K~Dt5@;`=z!PiZ{quiN-VxEOBTPYd&rVyjv& zLAq_yT2RPd`Kn*$ZG~GXimK^5n9Rm!KjMC7G-oe!cH^CfqlJu8AFMv_NivE z8t5yDu_<^GdmI+)#C4p$!1IgMST)ma^hm0L@Hx1GxeJ(2Cs9e2C+`v#mnmBU0wU9| zi7}dMb$_&bVlVii$}OF=vf_8p7bihG=DkYbA+IMw7~n$vCh>t$i2d^f9z`wU2ZSOi z@^Kb&MGwgBO>S?>^GM-(;3>C|;x-_Bxv;cqPmLgt1Fz?RNZCd9A`g@VT7;jgb+mVwDuXWalghO7CAh+RbLa1f)t`i0L1tp>?Ae1pAKNXeIHoi*VJmIa6P554p! z$bE?zEr3Xt{_@;Kg{N8v>le5_Zs9rLMcmk+1XczbO*nTGFgvq^9Ne!iNtE*{X(ULF zNbXwpu`Vad_?73>p{>ywzYLWxamh#K#aUS8si5lfClyyFxtWx$#SQoKqW9m_@~XK^ zY@L>B6Nb|DT==xHujx5ObIAXYyK!9U>qb|3#9qLl0vnF#b{CIFBdd=OP&sa1nYkt; zeR>M199b^|gjcZl#WPR{98idJGahUaD0dVb4wI5lhZfy`fl0kbk$3mWTd`}Td^hjL z4?O^;AiyNHc(D#`eF0|w!cWb^olA@l+HR!1=9R}}ZcWs%y)1B*D;)|yRCE~Jcv5x!SC&dZ!eGT{ zfn6INB4H9>{ z_l;Jyng_4NU-;Am$ZfK9g@~GKO`jv-&ZvlsK$Mpu_k5uC0RvGrmKDS+g|ZKmw@#k{ zo9p^MfPA+z1_9I?O}0I^dxRqa_5oJ?Fb5}lXFw@AOZxk_7Xq%)2URoL7j?aYs$^ zzRn0ELa{3)uC%7C^j;QcIByZ~hv$kTJC;6neK5M8=5__Ka~!>rgHy4ZWU-Q?sRNWIjJV##n%kOWX<)O8DQbAgI)jNmZMXJzIZmczQqVnRkaV6QVgrnj5F zQ@M2X=EcO3LnTrsVunM{-uZTlZSoJSYIJI?+7EV}7lA)cmC!{ouCiBN4haD#1%iIg zo#4^hduw}ODFbmtU^1%8aMLr7zJHfU{8`s7uh|WY_tv?14tisI0O-jeTVyXEHiEdYiz8PFjBPsqMtfCu*DN z`K^n4C{bIFL4HK*PBL(Bg zscg0B;xSnh$Ow2ZE}Fgvy? zO{UA8N!?r3io>ilh)y`0oBGstm+bN=y24vV0HQpl1h4VxNr`v9Z| zUEi8N7*!@AY@jB9&3`^k&BDY6m@$F8Dm&na2E9su?;CR}#k>d);;yH(-U+6AI)o4W zm~0|K!NP}7JA!-r^mK+sgbl(6CA0yFf8xTG=N$zQJ~;canX-n2bemBnSnbnu|G2m( zjvJT7q^rd$=se?x?jf^si87@VrNl$EU-d*(>3g3bYs?qh3f#l!C7*m#uKH>G;PdAL zCCMuBr^95q(RYVF?q()^WF~1SsQOr1Kv`y~g~JaNm1}x))mf{G%~|M$&-m^H{llLm z<7jBG3I}anILZFx|5z7(KJ*m?wSag-=MwmVssRdFaIr#2L%dHbz?B7|H&9V}f!h$E zG-|jMnEqCeM=A_pdcdr7DzW(EX$P5K+`jJ;rKp30d`>xhk?8KxCqQ!WGSKdFjJRLM za@(%WNkr<(iE^#WA|2(|EB6DA*0_x4xc5HYa}A-tQf*ow znAz{(_fKuo_-6(*V_;)gfa;7bdi8gw5}1+BcaG639AQr2zNTy5SdXhKHx zOhj!O@7L)9O()F_$k^k$d6+h+&VR4Npxz%chf_eQA;i#%kM6T;rRa&=%bkmSt$L&H zjU%&n=;DXYBp8cb3i^@yu)ny5XPIe4WWCy1_R`b`b`T3h40B@?)WPASv z)_yJWR~^jM23jw3w0i8E1c-6QvM4deE?oe=Zw8bv=&JuWTVdlDo~TU#+4(&T2BbRu z7Y1{-M>&}SYhNczb2b2iK`*s6WF-qTF#~R?u>ULc!v%lz+y)T|w?sMfal@qK&txNi z`GTN`85Qd|{y)aPJDlqNkDC-FWM_p!=CQX>_9i1c4i1jvI2?O6?Cgx}GAklmSs^2d zl5miboskMjD$nP8bXWK9aX;7dhb!)`xbC;lcz<5+*QiX1J7rD1r>S{rRI1Ei$kcYu zADr3~S3hZNH!jM7xrP&ce*Mo@5V3?ZBp6Nxx=9g%iaQfGX+J)?;%9e64&WU3OKfRw z_G|Q^fTgr4P!^f+(_x-pplHIZdoG+4i%zUd!SqSK90_Wbc$_#@kwZKs zyJBE4j9T4#+j}ZYFAGTti7Ur$4Pnj1;q>Q=0k39!5AbUGh+_*j)UAtcm%=W}os!QR zLPXKKZyB_KhrDsPzc0AbPeVEgM>QMSyd3^i~J(urf~r4y#utgYX?;$QOR#Lyk80R0zcG z8e~2Cc#=gp)`ML7V_%Mv)%Qr<2X^YWxu655Q5vVPt4c$ zq<$uSzwFU3ICbwF6p%w83qJnP`TujBK@px9H!tAXGwV@Yz*42tCEuLV?rx!8{R?8&6nAC?RP29-^X~4!Ml&>x= ze`w0l+iq&LP%4Qu8`gT4Ls`4P*dG%`|N&&Tvr#4jzaJ_zstMU7|1cb=N;o$2SgDC z1Q|ceb}~hgX-_XUa@(gGhXDk8Bj4(D_mT_*!HQb93 zOkj4ncmf*{9gcJpm$titP3BT8Rk4P(q;2a;$D^kX9ZTBPI znUaGh%;ET_5%gfqV#ctrV3iGDoVDq&zfr9uYB%$SPQfrb)PHhw3{jYn>X~$NrD3}> zS|q#7faU!2w;y^Qb|W_ilaKGX&Bf?GotaB+I#uSB*H#?EcJ)#O8Bo#=uoCls6yMtm zzQWm5LcaWyyrw#O1C+!Pd>H5-Fp&0yqw$Xoq2HhUjvI8q_`11bfObSgQ1tg-!@w7U zK;R~57XWU|zvbSP|Ftch;aKqgb$}s2Os|l-E8GFTKZN^Tc-z?C+rihY?(Di;ZL3o` zv@amU-e9TO7Z5_Zv%w>`#?1xVEU!?jNiRq+5v+`&gGB_?-5Gqy?DYz`q+dwe(PrR+ zHwAPuqNy^d?-v?AHhz3_y-F-q(%Z%mAksrrm~)WviVA~5t7*Z%#^b+~)T z-7|tTSM1o;+r%vR(rgJ$PjCTZQuaABJ3q6%y#__<+*)Ff9pdcFXkeZX!AJ*ps&H2) z3=%E0{|B@b{{+d+Ce7dVivREw7hpE60^r)PM1HS{*-ORb4kJDi--W04zWVJnRZ=!@ zI2Ge`YR(>+KG!#HruXjfqes(hk#wsw$=t>Pt*@AG(--)_ZoT z1&fayEQHP5G{SnzUp^|90TTfDctSq4l7-lvArPf%;w0g6zmI1nFC+HU+6Sc(@0Yz3 zRnm;@Rsw6^f z8edl~+inZdI7Dh6+;reM-3J0E0I;hpIeKby&U*(dTaGk{K_ zlg+UIi~$&>`G5yVZxu8K*b4@jwrZ4{7YT5EI>!yUKBa9}9S>y3Gzvx}Z?WdG-u4yB zr&I@aJq4r#G~+K!%zDU|$)B5=GrN*6SE+H8uF2^2OC4%fQWmyC#OjM@#Id%*i$1h58e6uzYKo?zeS=Axs2YK7TJJuZM5 zF?>}4d4#gX18Jw@&sP&c(0@Kf0piiVIlCJ$XWt<{iU|jq6Zod}z{1#LfWs;VVUL6h zxx>AE@X?k3LJ6!~+9BwKnHeIQ`aqcVdSVuFX&DH--!ICOw}Jw|5g>yRpaiZ2UFSn; zy-&V;)%kd1z?%@>=B*vSk0vP@KTyXWNwJb72|0H(_-4C!92L6Ep`a#Y{;m6E&^Vw3 zL2Q-ouKeuHU;!B&7Bnh+bxPp*@Rzr|5=PfI<;j za3SZob3UF5j*gp+i;8bP!EIDLI@1{6mBnBnXVgD%?eZaEAd92$b|-#U{B7^bk0kep zqKUmyvaMl&^7a4Q{JXV^H&dpuGwh3xi%)$N>ypKuE{`>|dPQn5+V^T|%~B zHe}$#dNL2-p1@lL;GU-{@D@jqV9e}aZe*f0_GWNc3^_B7`qMEE6mHZ>UneHQT-oe& zPZ91|3k@KO!@|?7OZ85zciQ)5o1RV1ySY-v4}7+=qWvkh$dx_Ldo#p`t_H+#`_t}T z+zMPIc3R^x@GiLc;U1qV=F_lg_fW-|4B1xU;K!0v#6ny!U;49g)r$66p#`SN?p<>| zI=Be&YtgKSfn$EDl#YhG)b~AIMb7Ug47e?tvD8S2X$U!y{b_IiTBU%s`fZ~OMb&TFik(jAxnbTZ;+LVJDtU{AdeYQ^ z{@x8G?eT@U51z$D>j8SmJ_c0$YU=Alq}+L}+0V=Rd#h$+j`n;zqZ}X^op+0*O#kVH zel&N+>fJ*bX$>oLcbNSJcH7%gxF1@t4_yk+KTH`m^O18{ zbGlQc1ukslQPX#>v9X@pJ}gZ7F0XT=?uyP=Od$If5d_RX+`twrz zCpy2PpGB;1&AD8>+oDAg`7YG)*=l7{8I!g<5rLs3q2uBsN0z@c4zR18J=#M(gRb8E z0ZR~%bi09}m1-pJJ>yhT{h;KlZSBNpds?UDAP(11n91LqkP`HwzU7fn#I^7l0>cHY zZV1=p$*HO6#QGdd8FC{I?$2*4eU)H$lQGvENf<$c5hYtA;9kFfFfNlVeK0lpt%5!HWXvC?HC&G!42qs{Cvr2cf{KI_91QD zz!7yF(_^S4*Fv$}X!4g*R!zsti(cpJlxn%E{saM7=R~h14paIzdIM=)I~SSfxu>qB zI!4d(MM_K%j>e-BIRasZqEFFIDuN~~y&40^$2*-V7g+@0WLI@=3-w@96NVCeyAf^?dyKK*=9y#SW7Phm`+)9)17T+@ zJOJ=nrDcS$K(zpabW{7hD1fYn{z6u-(y&uv_&216FL7V71Lg#%*96IT{l!wr)uX;r&8U)7hLX?oQ=e4_tg+kYL?%uO ztXnyvE{|~C;yNi*`>JW6tR!G)Gv9x~$}=}ZMPvUFwHwqf(Rca@+}Ranu^Q)mxUPKN z<>}C?Q7dIBrqb+`&=fwS&6W=VqxP)v@$OQcz)$fzv5c$7Yb`$-U1TV~smu^g(WK?<7dE9e4};6r1d0pyz_*zn0X0KGIzg?tsa3o~=fCbw%@d9++s_s+r%;MLa&6mgo;1c`vq4fz0H62OOK{< zvEp)4pI;~cIrnqMU%Qy2t%glTJswnsELdT4^E7T4zGzg=T+F&WM9+PDy~0u0WF#|L z`i7ou0Xga5 z=8kpcb%{*rczY;E(a;zm0qXB!r4JPfzQ?LEujmwQ4$Bs7&~81IKi3 zkmJTQ2somHk}n^13=GyWx?D`Xxt-(oyo&){^Cm70H}te6t!aTyvZ`BU05SU6uunXj z49AWh$0qBMb0yG6M8}5@NB;>7!-5K^0eHLQjDcvX!Kj>AGBax7eP>*N3td z<5F*L#Vvso@;{x(G?4B_#)dFs;2vMNF7*66>9n(-44zKryMky&eA@c@cn?Q0P==@Nkj~%VdsNOMI1gwf?#^)jPR6 zFG)fsS#|xCHMYacNI29%Oz<%+*U6%#fYY`2wumZ?^szMCIcz9PmT!QMp=FM zX3OH}TVwK>BN$#&9T)Fjm6||f>&`xXJCs|2Aerk?>BpwUxG?onBDp<6uUoMY{R4Wt z|GAU@>RP<8PH>Efu#mdG5zNTnP1*Z@rf)qjq&1Pvh_;)mqa5AdEZRt*8_6$OrjtI* z4LBeGu)HF!zxM=m#xX|+Z0}uZd3*crVmJ^&faEYO z`k6bUjt2RK)b}}e)N0Qds|=|<=N?r!!`JbGbGWJSJ5aJeTF`unJlb?wb}&7Y0^rlS zxDVgD*qL0Va9a&XB+9)p$-4OKIq(d#rBLq$;w>fX^3I2yyVTvxG^hHe_3O0q7Ehd7 zvn_C1bEV5Ck`H7DeX*dgd)hn4?|b8bT5QVHvBliPAMp^>1WZ>B_BurYxWpSJ-faGnGO( zT%vU+##~g)wa-L1kMRdqtl?@>8I1?|y$$MmX>D$)+f3ei+9Nzq$hiq5%UVGXJVL1R zq;*2X5Tt2Bw0#cwPFM&EfU$Cd{dhxG`sv3Se8%Ugyy0fgMJx+fR0{DWci^ES)DeIKroKk=71)r_{n1 zDwqsIm1wR7+}ync!z@Fl6xD){cknUII!Q2$$OOgsd#}M5>)AP@cmqQ=wkslury?ohGB-wxs)N_?|VWr$v9E*aC~JNuQtDB|^V+L}kH0dj5| z-=D=;Yin$gzrRPTG}w}CMWJM_+a3D0F_*u4=S~33L2CI&o}r<d+x4M6$Z&5do3< zz>T%Ny7?VsXrEw5HAb81lU?-*1@)R_j8SfDITZtVXZ56y=CeM+45R5~u*xt7x7GyL*~ zTq$mpTmOZIIV8z7!``Q`I;FCGChQ`@3s#eM>dFFylc;FOq)x~@T!Gzo*B4BYdmy)L zAL{Z3n8#L->oq$sbn#8vPw~aC*_y~b1Ny&^T~n>J3iEcueV``#_vK4{v3807Yd&5Q#THU?96MGtdZ{cYjc@>e1vzb({UxA7XV>JUt>QvEuFGpNbH{09@o74R0bkGl9uW=T z>v=eOzW&FPAKybZJkBbZ*`GY~Eaf%Rk)p0*By-8Y%gxITb3l@^v@)Ylk=jO`a|(U4 z=UdSmg%nilK$msjJuK>iVWNFG=NZ2XDLU!ZGVYg@j6{FFIA2rioab`YbNKC{qgPj> zWxQhiFJb!E0ze``Q2gmN0+Qj4@?l{X0@28wQ5fBm)R~a`0 zGM@3Vj{dQXAbFZ%F2M`NGc2ACaBr?4b2>s;ZAt0_?`^)o@fO^$cw~P~Ltxr#EpzFN zq-`rVd`M>-Odpj*g~k+`PJX?#P0>T%qDaxqNHLefEbjfWE*w5qm9D;z%p(`gMQ{Y!V&qa5tUt7*RY6vL&Kc zq`C|f6hMLglf|G1jL6Y;SOlPm3n36_Pq4DUwZDJN{WH6SB#bOB9+T zuZ&%j#62_4s3hdzGIMY96vPfReYP-(lkHJ5wvzk|`Bp)p^xa(Q)5L#b=H+u*r^+r?Py#qgi9Tt*-suETMVRf%Lel&Ixv-5z8;A&viRH{lv|= zt9q*L_Cf0UH2%y32Je~(tzap@m+9$GTb}lu*1eNpQya73)|l_5#X5lMKrDs>VK!G^ z@Q!kKhPw(G=^7eCRrw1h*Lf}O5kw*hl5nMyafV|m`?=o~tw?CfPPlK)2+39Z+7f== zi^W3DX9XwgeIDnW5YCZ#KI44-*4@SC=Wlw{g`Tg94kf!^*Aj>!r_VaHjY~(Pp37of ztVf18@-OJ<(B6~)ft@+UmI|+_C$cB+)uCz;mM%9xIiO=T`Dk zb76Y%iJh%VNDxNy*l~*ZAu1h=`pg#fv%CEh#g6!}G`)JZ!=iSlQ<)Gr4=j^&9Dhr` zcV!STG3kiCe;mF_A2IN2!5rAMs({3KtiO&w9OW!zd_l*?NMnDo{BEr(bJ*RG_OF`kpzl5 zp{$8r=3d;Wy1q`YtbHJ7mPQYva;8)3bD2Trh{eaIizWBIiUCI5VO6C}d%P^QmpeP3 zd64arImauWPO9)KM77O2sG|=|l_Qnv64T{W?<5|JVoMu~^mf~0gFtVA?F*6c@myLr z7Ov^Pjb`m83bw82C)US}29cebp1S}5j}tx0PRBm%t5npBu30}J#M(uL{|Dd!F3y8T zQSJ~s2#yw!6uMw&@;_@x+Gnj}(&LEnu=7pn%A&&PRZV^n{_{Xa5Kn~JfwJ15NpS^N zga}IpBG*}$-j-~xzHT**aX4zuqg?!){1cG*0|W!ECKaqb2sQUMU#qo_p9Y%zwRGP1 znacRLo;{xb#ngyIXS(e~p+0MeJRKV*YhHN1dXd69F7BdrDGCugmyb5k;5FC^E?z=6 zZ_T4+Uc^IA>%fZMa@sp)Fz0Yre`GTMpy(^cU&=vk7Qzt%Iw;;$GB$qNZF?^UG!dmj z6)W6TZlTb-5bDhjRLX1W8Nh%%00?zFg}~?g75T^QtSqNST-U9YxY9P^Tt-dYl1^#I zDd-B*YlTDB)I>f%Z{GefwcFQi{z8Q89nS-Xj9U(b5v{WgrEi0-?nZXsOz&wfMAL^$ zhtrywnMcW2zD!XH=US%jOBSb>vz#)CGDHQ(I8%uwr~B#p*W27h_NrUFmR=OgAIkB1 zUfXzCZaGe}VL*36qRhp``1yLyr!wQ<;;-n@pYuL4Ea!{_&$s7-Oq=!%rn~&)Hy|!q z(c?wa8zGw_KxUdbOHgwd;*zb;04`bS!rqlFz+Q>FV5LAPc05cP)C714A1u=Wfi`ZS zKlj9-fN_PJC(2()$w&>Rj6?$~K@6x+;vWL9Z7dOm->6pe`9_GtOKR(I;(k8xrSuPI zk_E@{sH@ty*G+qiFCkM{X$(o@Q4X~Q35Kg}pC3t>uQ;YZgVkw=%0224eCK}s?#Qjp z(f(@dY>kcq;@#eesvU2*rl=L45-nmJlqSun@DSda*ndJd( z60w3~M^}5RoMrRnPhZSBX%gDd72H@LjW9hu)L=-6jk5t`Sg+H`*FmL3 z!N(si%6|f7_Q0>}e?T&bRe$h-j&uV0aD)#;>%=1wV7v#eIaNGGfq_Q&3zSnPic8Zt z|K&WSt2^;(aQLDHZ)087KoAnpfE6z*JhY1kIj$A$VnRKKK#uELFI=IGmZg&eouEo< zcN~~l?JBV(@hWTa)h4^#-OPI6YVSIc;_Z~#5S;p2D#Uu6Nt=e4#24Y)k-)j<4+*>&;7`2iVy3!-pxE z15V4f7~~iGE|huV%!Bmw5$7V7Q~H)!zCYP-d$gU5O}cIsrLWMm_CANmXZ8CTQ4gGkzRFdMD&?1wnLlY*VKfWZE=zyxik+kJ_g3n^4{W za&n5|0MR1Bu}c?@;ZDR2SY)ZCh5@^Qt;|~uXFb@vj0wW!ZK|d&?80716$pDJ%Ner% zXyqmozX)RA=RxedDL(eS86W#T>Tv~%eQ&h6(JS?1F=-N1>Oawb9VmNQ1DH1n>1wKI z!i?Z<4!%fxkoNv>0iE8=*~`^;49(ks=D^-kD;enLAj_R(ca7hcJBxi_XJ+)ZSt^Qj zvJ6nuUEP`+PRPH#U9llOy0}DjxlVulI~{lMX0tt`+}EXOfcG)=a9Tjk(uQG^$Nl9? zLsf}}Uim?DRvx+O8X72_>Zi~=^Bw36hJ~Xod{Zd{1}VyL?3j|`TNYk)q-~MJy7EiK zyfmtJ=f@xuOU%(h!e?)GZvH4~dI)bCXnQ4hMOZbPMAlBY|FFKZt_aETM}9!l8@kIz zFiiP&-^4Po53<#zWWDhT6bVB1|7^>@nr%aXi0bPhkgh_&wHRy>LL1dhe{Gul_PU+cu{VV{QTP_>OX;VU z@b`M*N^%X!eFf_~q1R8L-E~6yf*Gz}0ZqM*Q&xrC)2J|+Ktk!4s_%K!4KpQaJnN714$ znYiJ{SRy)Y1_IL)q`+w4J&7>oQNKI~t_k0-VYd z%)6a|U>rZ~{>yo(ZTf2@Ub-RqCwl8u0sSvhM$7i(HkjzzD>RIvbwspjZyriNH5$xQ zYjgU+m|d*k4*7#GA{E!I0dj0?T|w33pyz&Cze&NvpUTig=~HT&usXw<0_T4FQvV@OnWNSyvCWAjCAN1VQ45QiJ#gjN9Dgr89&J>7^6}^N&Zv$WPHKM zNJJWD4EIEd;S+119twX}m@&kz5CEXmKBxeOrWMdI7Zj3sI*%*L7H06aDt0WjjSuma;o(+cZ14<~@eZB6V6R1_v!}TLx z{S*r&0=_l|msrf^%|GfVe`x-XI32KPidPZ#KHd;tvmS~JZxp;^bLs@rT!`zk?Wm*9 z{$!C~w~d(ng%@mDnK#ogJ=wL);L?yuS)A)uDNyN>aUB{n%00F1-?B(oCm!AuDG|z; zAbq|xRknm8p#)=D7H7atLEYwj-)k@f1S9*b_nIzLuwPIhNN)zgSgG~${U>B8cYAJE zYQYPAqom=Rhbc-aPet~5LS)rVqDRUzCl2jlzH{tU&twDrJiC4jbT~sH37U~#(8`!I=*UUT&=gqPEisxK%go_ zp3;oP=dOk|fU3kiWxYj0b0gr3lTnfFPH29H?xs$^@oCvReaawN^V~c|zwo)(y({BD z&!PoIw5EKE8Usavo+1Yp1#1s@Nf?X+px}cz25+p-{)P3MFy0q?O3M&(G4nYaT_g$A zPn0DAM=07f|5iT%YJ(lAeR`@%^0S+;Rt5(P>$O?Nn|J-=D)= zZE;$i4^>vM3xd(R#VJ~auc+;dx-ZKWSvY;MT z<~gogt&?qck)yS7H=Wikf_YMc1nOHvE5gK%rxF&f&RhJjXexW}<)qZ351*CozA(xA zse|`uoK?5@AsC@J7!xGQ#R|Af{oF%?nLQslAU2eJi|PAyxE#pkb@m4{Iz0Y}g(NNR zKt%|R?EdB4*)If@Gi={gFc#tle&>AhDUj{N?UPB^%}<=MM_*Wq5GY`A zHkMiOl#^1=`C+-DZ<>pg%*AI|v>o6zE*;l(QilwENo3ekg3_wrpDkGQ3CfJTprC~; zd|&{dYkpJjW;3!L++G%DynZyBMBb$eSL*NKX0a-L6H7t2)x6x;V^Qm+Y|2}%mU=JV zn5flzC_S5lAERqlvLhL^jOnqM(Nl=W;!&m;i` z?tzwE$3WQ*oSo(4TMM{N7>!Jt$PiH5B}8<@!-~B3y^|{D8}@a~ z`^KFhILMCFNLuvixq+MHt+dY`3iVN*`1tYB`btY=y1Ol%TsTV2q^0M;GD9tV_#`;u8vdEcnY) zz5D5IOs1i1MlZFuQG@6Spw10Ge(oW%C8<^Xt9zAheEek*bBqztT+$2z&873Zm{6M< zc-3L4>V27tH>7X3;|Uc2>j;uj9N5jcdLw}!r2_~qLBpLffct_!g@0G24@VIP{J7;a zamgKq{|Eaiq=2cu>3Xa(6>s2vhc% zvR8TBn7NOy2cN?r61w}(_Sjy^yqix``7jxMlkJNVu~>Z)%Z_VhH-!$#!d(T&t5P` zK+X8gkoSUvtK1DtD;-3{|2_3(2jA}CmKw}U5c;C(SPV!xgc9wMPTl}~0|OIii~a@O z#?o->HY*F5RlyUA+kF1mGBXNB0lnf)t?He93}s?O6U=~Z!sux>GR3cMoSP4pk03ht zB1HUUpAngVcz1=_I+pVboGMlN+nl-csL4zmjy95*`Ee39^v7|xS^*AJcv<^9){7kU zJR%-?h>->VmZk7v@$earh`ie3N=ri?w3OG4O!;{EHR9;CDBSoY-~D?AAbRNY^CDFi zG9#I*VG22=Q?d_b`b|@L;*%9KWsmf(|C$6-3=ozS4 zK#mm{o;z5wpZ-pZjUP2VEz-e9nUc;3#aJcas>PixkZEOaQnxr2cZ1hw-)}q*YCUFJ zoX#lW}!>Z^8${Li&gpo-k#964d`mJ;+W%#nFpnP?8on2aQ>M=UCugDb1*dsNrQKM8f}+Y!Fzz3R9e(A&ajvn{OXzHG~qn->*Q7(Tye<^nAhL2P~g8&F1QpnhPI916tjcsU4} zxOoB^F4hNx_c_3HH9Zkd&}#c*64w*E_MLL-D!{|l+(bPDp!XY){eCj!+KHQd}&uuNwnMmXZsX#AZSN|BK53cxqrc+~=hbBtJ`h9@S@(nL-3n`Nk zFYo(>Ock7#Mn%j+TKv2hp_HrFIlL@UXxUa$&lZO#q8Q6`w=mZwwJU{Z1c`3D-buRd zv~thvI#FW)lx!g{M4(P4MX`MgEHxWn5OZ~_DGpNJLnNRBNe3E8Wf%Z7fdwz%82}p4 zUti&?^c!HZJx5IHm!*5+Rj@-gp#W7Z@c00hmX9IU0lLU*MBujg`XXRTE}DOxR;xb> zNEs3?R|h`TY=v*B`*}CMg?VuGDttFNL&JUY)bThz8j`0eXHtyQwO^zLDc>(O)HdC4Emy&@8iokQ8X2`ivLkfi!R!xK9!(gQdP8yV>R?@bV&EIwKFkgtt3j=3Ay zH@D@|0v@+*TeQbv4eQfpA;`(w+f(Zbf&wb*-=mR|)P0&n()zP@&y}UGNB`t%e>xk| zP3rTdhi1^EEr2tNu!n2vqYK9n&0@oHjq~&3(#A`Zi!b)Azo#gA#mjbp^|x|4oMojB z6Ue1{R;7_HR8&d4x$0RQPnAK)}o%#LVl^uXb+F!F)B)p`3E&V?_27wb%U zJSD@gcYYYX5d`2Q{~PlO=W7)=?N?F;sl8__)>$mZDXInwzg?DHi)eeV^r<^wg@0EI zv~8kS!yrvY^a!la_e@F`Z?K03>aI6{7<%+4V)DkV48> z1USfn1{)6Zfdf+}H!lz~=?Sbp{qRfzZ#!=gd<7E`6%-bSiHQOp0}QnJAd~vvH|>AU zaNNMpuoqGTOb|nix7WX3O&~7ABQ{xFfq>-v1c%%y?n{F}42nPSh(18Bm=tC|Gr(Bu z3K(mhj|%xH<_tzSg;XRjXI**~SUkRvOwCqney6^4mS=h{+3A%beT9^N{sq#V8mfun zWgnBAlNR?4>++K(3MehW6I-&WIA{epue=`>K$7j8;K}3Tiu&@V6eQM;50}?A-%G7k z$*Dc{xUSL!3~?Us%=?+MMC*chSDW%q-^dXOJzsg9RrM?RqDQ)&Xpn_Vqh!Vr(s#_y zUHaPjZoLoS$&GV+_1{i^dKgDle!D0w3c`q4!LQ}OCj$5tfP8ou78!s+dJ8!tK^{8B z9g1KB5#al0-9NmcHNv-v>EM?}E-9%Ie?hoVtH3I+`~8j<kjH z(``bncE>&lv;LF4_JnXjJ6Q!(=>L=CjJG%RvUmTV`3-a$95_3?fb{~2q;5he0PZ*= z@$b^V+qyU!n)OG7$GNy4={pY+Ug6RZVd+?!?-}q%>z)95N>*a3WDMe5QWuwdq2tupD$6$mf(| zA{Sx0rXVhyExx?pW7<@!zmYaw%@n-X%LqBaIJHqGHvXN<&R!`rP8EsT;Px$v$O6lb z6O`mYhd(V~yM}Z`V0A#WCQ8T?1MoW6-^oA!UU##EIxJZn#@0S;y23afieFg?F9&BK z+ciWr@Qz$}!pBOSRs7Z}4uHW2glhVO0rzyzwZ)LP$z@&Eja7d(;FrB!-ANn7VBXoU z5NKy%3>+jom9afiO`{(_#PP%A%Ekh^$1g`Y^-C;<_k`6fU{{9yTi##Q&b6zAtC=gL zqlILv<;g14*L6$D_spYEK0&rd^T4HGZ&X3H6#*67M=3dtI z4-Ckil^dNqrfvyJC5U&c-_Q7#V?FVc;~n4~g7N%?u$xJsPN4ZcxbgLL$9TaYNiH}C zg`h70KnQFX{>?E3FEcmb94+YX;P~&;5Sk7h*a+$%Q3xG>m=^GLa6|YD86liN?y@ns zt@g_gW@!7k?02HPPgEtVnZXiQMJ_?(k8mJAa(YjN2iZ6va@_kY{MKIxt#)&S)F5v_ z>SBeY>I%2?qhuM^ol={pu9ALYKB5~UUo#M^tN9$oCS9_e$$mXWFZ^?~{pXbKCY2a? zbCpg&+=vbpB@6qpwGoe|dB$7PehmX?lOgNDyqngen|9oviqvV9QcFy{M@Q@uuv45j z>gI=Ueb9l6hP~hCMj$3fgeQ-|ok@HpRX62>ZG}UR#lM0qUmr>0?xq(7W3zfkPJ!$D8i{irL1`qJDp4@C^XkLttrf!0oDz z*GnloW5GWW0)e$)g&^&~yU5EQ1_s9nSCB#md`7_<`gPM@07;TwFhg&!lsMpiHjWs3 zZ%-Rxk-z>o!0wd*KTTHVfS+cF0el*e|LyIHL0`Lv{Ya*1B zs111oszBKa(NA{#<@o7cDR-YGf70jlaPTG08?d?->cPiC_*&o^qJG)ibZB>?`$+gw znN6Y!g{>~N{Yo3U+l5RlgtR*H^F?&>mA1&9m!zBS?k<%9e(58W7hnZyM`U;B2sJJ4 z7^ThG#|mGfzKs2*6aK(bbGM{SuB}7<^v%Q7Fv@FtT!}8OY4d>D-b?xVeX^^K5J5;d3Z9;hqxLOcGoJ&Q81B#~y zsA}M)4<4={3Dy-jf4CxGpc(Ok=p|UB9cWB`*-t`!O%eV{MhjxkKn1VN$i9iR?PP6! zRA=84$FckPD(D*rJ=meXkv)y088i8!X(~8d^Lbljs&f^)o2t<=k)SuLj_m91RrJI? zP5uR1ju!)8oNX#eI#?EN=sKFkRA+e2(Q2K~_gAO5S|>w#*6gKEGfweX`Qz6*6gMi7 z)Z4MhE+!+&iZq`Umsr#0_DgART#qUql_?pJzjv`ACxcA-{)>)2PPkAGR&A}2#lPSq zy74EfCrjEQjGiD$!KPt7;H5-&){VqIYCRvGo_EI`8gVR?O{WaM(AJ%o`7yJ!r25kf85iZYvC;tLcj~xGV~Y8BUFs z@dqeAW$|dAc2BZO`555WvmGLww0~%+b`f(XJNIzC^v~)2!ovq+>NB}mhv1+8b!v^- zWm=0QK7BuI;T|`9SNDONstsQO)8nUACAyKpgM4#OH8&6WmKa&XTuiuthpwfAtT~LwDPQU`v9#%?A1~tLeOsiBw`?M%W2!=fSA23 zfY~eB7lQ;v`cM8AIG*6Zk{K>!s$+y_E468L2-B*5GOemz(`L%5+aW%A{kpb)oF=pL zT`qq{#)zFGBO&Fyd@uB@FF%S5djZ#=CMfi!c%fF{G0)1k=;N?(w{KcoC3MSakZ|S9>7w*T!M=^$6OTHPMLCi;df&OZ zpOSJ*Z1%3AD;LQ(RjQp}mqUfSIutL}tOf2^Qp9k*Ac4GOzS8??!dq^(+Mc~qV`6ox z84hGrx$ZSXOlqxtp^z8jV8j5m)sLThuK)vZ>xj?J;m+jHSD+sMDO*v7W5IdtrY)p| z#3*^YIk@86|G&}#ZeZy~nFcFSUzF+?Ew9=$Qs?9!#fG!wbC+GOJKyES+19-`we@~Q z07_vDr{mbTDbPCYZ#7D@jD8yLXLo# zMz*f(Z$6V(>1_|4@3QTI7+g@Yutz`(6Fym3EOY(J3n-sDYzaUe902NI#6ulJl#XW6 zycQPppIP;~jWXUg`8%9UV{+i|PUih-=KF+2;)IyU z0s#+XRqKr zhGbdQy=byUY8B280&~7;DynDJi&aB!B&vM2?*g$936OvodO-@Zz$+A5sG3?H(!Pv5 zQcX1)X-*5AT%6!3e8B%b#6Bh<1!g)=>?u&$ zABf?rYWQ~~8v}SpGLrBqvk;tw2oHYKM*!hrA`GvaTlWI~?^KOR@dtM{`04F|)EY-X z(MEdt0{>~q*%L&?!0}R)KjYhWTyY{4!ASmvfP?Gm>a}|}u;G*W+Ybur4Ab6!*2WJG zK6{&Z&Ryf4f5TJ7Ng`Yki!%MTLl%58dcHk{r~NwfY$0i_huy_~oYE26=l6!{#@@R) zl@^3}c1f4@24LbUA6hIX=5g`>`r3~G*@=xXZKlQV>T8zzwa41nmcLMn*W$d#hRKNs zEmyBgDtzsd%D9;@KY5FL!ToI8IfB$iFuqOLmdItb68@GX#W(o2_XtNEt-1RhY&_9) zyDf0_TwH~-UyIz@dk7g=q73RWA9(QW?EfV5`Jg~A<}c*#544;9|631+*;ly5C56mZ zf=kEhR7`|r9PW$@gp3mIfQtpzVwPuEHWxH z1&46Nx-5^~xzA*TG7da<+9i0YA=hi%V3Jj%;JsL<<)g)UtiLpky&#l{(^=o<5j_}s zq|3*PKecBYpGX<+ap!e6p|JG5X)s!9hOw;sw}OLSSD>NgmJ) z86q4U{2>~@G32-npd3gj;;HFoh;UMMMSuqh)LQ2x>OxxJa7YVmuUR)JJ?3lrBp&nmx8B;%< zLYbj?xTY`&mFCfeJOSbc>)<$7IObc_;UQ$bp76g93x%2Zo1mm9xau2l(qXsZO zUF)>p+ey+{C$sEN$?=W_6@h-an>sr*B8)yER2evsOJST7eOat1mRdWb;00I9w7I4+ zj&4zFcx{I&xpgl3fq%^VVYflACDn%>o4jh-&+6!MEdD@c>}c zIRn#sZ;$|we{TN!?MDUv`GHIeSAV1naE}1-R0tafH@FR`EyO7OipDE^>6OrB zTfzU!JmQu8X7(St(zYV-C3cO2lO7j)L4)og(7E>Atv5uzE$G-f{2KcF2>EdzZuQ)K z?{gK%`}|^0k+i#aVqcbX?6lf@L!QY?z?e8<;{~VEm{AL!taPM)ZsdE!F*LJ03zz9V zb?$Md+VY|yT@0N%3gwzm;u4`VfN0!Cbh1>DI}$o9fVg;HufS}!I@{G?=|<5qj$m7_ z$9X|772AJ{As-&{aW6 z64>8CR&P-z*ou8qz8X35QF^+a&xaJ)s4E$-UY#T5dQ2-fx#qXQ88GO=;a3(g!4v!v z*tMR|NUXDR19q(=P1Bio&3+1(%GZ}~#d+;sCdD+5SOgf~OL38dWi>AsvXQD{R%$`f z-z^>OC2&{>y5B;VTQ5H4Y|B*aj`fbuy)68=r|7(NgKROCJ2^Xaop!>#4of}Vn}U)E z!Xc&xM`-vkScE4)MGjgn7zuwlX)yA}&n}VWc?|?-XjBPQ zaB##KDLtbLh@7k;MW62VlKD6VT*HBp#+l;jrx%??gkPEyeQkY;y{DVqs+ZE!zGB`i zJ*m#7%B6Rjgx=!0mYJRD`EXKGT)9EB=6#PcDeGork*n{^C?*JQzGYSQLo~jASHqLl zZihoB+HQ(zh(WbZ1eclPT38*~f6uLSI4ifX6P@?<+|;+{tyrD-`(*5Skg@Mfu;y&e zF)p#Nl2@U?YQP_U7XBy_M>z*w~(1=Xep$Hqm`zVf#nM%f^Q^ zF{Sk(jyGiTfjQVp4?6h%?BP=xof$hj@3|r<^8)3(EN{D8T)z$D#|?1n>zEv2PSp8A zY4!0G#wS0d%*CX>Wb&30cJy;#KOH^@q9{nt?X=ZqtTt9;yu#6WYymD@FigG8qdVoy zYr)ao5W*7H3ZEXjhbRW1_1t{9xegR2R;;%;qiGe8&}Z3QsCdIZr(pN050Clp7dLC+-3Q>so%S9}pwQp+^47yr(gC?AJOyWy zBp3-65n~ZpGACR0YQ+;QoyrzSnfTLK!|;Z$bE+972He#B?r{7JbJhV`G2r0wppd8E_!TuwDtI^c9SB8tKpnErx`VmH+O8VTOj z_TvNTd*f2iUdH8v%0TS01M^b=6Aul%Mc|&!V2eTp!ILij$)ELMxqXNK(&|8shn==2 z&1mwOzm#<%ug^i5ypRtX?&b`G{)@`UvpXW8^z>R3IdP2lhWTh?;C$rahaf9*ZP%;<mfe~#c!hMVBGRauP2khPyE5s|FOF|vsYA$#x9!NJKm_DsplPPR}f zBOzqZtYjxy$p}SRWtYnD`98Wn)%A7#{y4YPRjymFUhmiY^?W`bkNe}{BxAG?jLWrw zMzd$UczZsE5DRJ{QYI$R%mK|F{<*{X3;}n6={KjuQs36ecM*}FH&z_Bxb_#4a}@Aa z9-^~oyA^Nn#G*vQoyXu#j$kEfSm#kmbsW^w;Bta6XgAsx#nE>u-($!2=2X>QDW*SE z)z+_ZxX%V#m1f&3K&Pl3m8T`0xglbTz-ddH68GHWg{VTi&y`JI+ICHjH>R}-=u2K^ zQRU+m|CKI1I-y*h;TyN^H^e? ztxX+WVJQCBiA8{P>3=_he}4-+Q`!yd#pB}X00T&5$o|(KCcFrLct^FB7j*NlxB{3O zwCO4s5Tw~cgCApuHHR-$pxiLkgdV>I=-jYgzZxN+wnARM_>CNK-5|NiaBbw7WU`2x zZR}vQ1a~?R6%LCY0E?*Nt-((D(?NVEE;y;B-wB@M7}q|(1R`;++58 znG4fjj*h!w{$&0<&VY!$6>;~-{?^um06ebv| z3o8kPk0FssN>T{Lu66n9h(vB{&`D_m(n*B^LYb=BH)IBV2T4en-pD5XXe^!GEg*Yj z|5*QQomm}MnCvMM-xt8K?i!pH8Jh~o1~h{hvHz1pC4D_iN|j`e=>=kKACJmy-KQ19 zJ{0cxx$r*tVO?Ip?RIvZ<#gcv>?ATJK;&!!{5w>>z`V5vk&%Tf*p56Ad4sDRxFVdb zxvy-GX#V68J>NayL?rU3JD-M?zvO6A zRloT_H7!s*=a9EWTXDR>LhR_rZ^nJHu9+GcvGaz*bs((nP&1oCz1J^;Gn~;uS@VVW zZqX5!)P>akHzj#_8BcSHbaX5n#{_%?UyrDnXM#Cub16=gt0@t(S-1x#bl(HU%wI() z@q2U|75!b_S28{PkszDcmCry0dh-<`1iA9hAr1tBy{Qp_aAy5y6$B$S8=M)=2{FAw zZkVMd2vvRGOI6TDl=F&2gD+nwC6`{+FLpGN&SL)U%q#iL`Hr_^5YGZas3ahk zp)TzbQSB9r6-&ANbeWHoDRYwew$5bv*QWjPeUve-_2DP)s7KPfmycR%q&A(J0QmDxSam{j*icLwL6-z3!j!(RGzAmL8kQ%`24>xcPvuX2#ptz50Dp zdi&Cg_9IV4^))Jd&6bcVh`wLsoSnM5>b0ks{mec&*6ef=99Hdzj%PPZ6Q856E@wz# z^~l-Usy;_yl6r7%?O?~#(D$%o{;n?nK6Koz0a<2^cHsHn7tT(gqyBT#{pXF|4w79i zI`e2^t?Z?7|0k>?^_9q|PKxhB^sGo}1`9YF4g>On!M7KGrGGdSF0j~reIOVKkt*lq zZwB%85#Iw-1Lk%UyERw7i8d-aEK5e_nq}Q0;w#D1d(uiRfA0`oEZx+eQBHN)*TeCP zVqb1%A36|osW-WOz96zJ{Om02rk+{iyHcz;b8=|{y?7*vXYWb3nrMol~6tj=r3rT7AZU?bq9J$FlMQwB}*73O7y%z=LWao9qwq$l!DAmBmBCr{;QC+|2N- zEgf*#l@q!*gUfCYSDgUv=XHE&f+kI42Px#OL6vi&&drsP{If{+LaTYeG;!YW)6nBk zSt>o?w2U^YXGt(?>NQD6&E#U{@v)O$4iTPOXqFx&)8M0#d)&Q)1zs9J5qT1${J^rGwH~cYRKgf!0*18 zWp3hzo<4}VQ6xZk4)$aZn9KElZsjmi{JcU6$y(tXf#t9$Ct#=Ts9n$mDX^!lyuKa} zQuv|Z6^XMz$zpBs;gE{RYbXern6_?2i$sw74ki%izC2VFk|6+F25HHs1Ts%7-Ku=p z9{pi+>+6Tfh2tdoRh?zv6+Y#eJemLoZb7O(V3VK7ZY4^J8`WFE5pI-V7BWNti$ z-BPBW>vntf)a`_74$n;%v0nKHpA=r`Si3?wh)@gqW8K|n-DQ&`9Ibe1kYVU z#@Tn{IfwQ&Z9*BX>A1;2-dyj<2AO5?HOdPBe9ku4si(_H(^{_f|RU`|*Hq<-76(~N@x z#2#}6*lJjet%V(s3!wOe(#;a0Mt?~qpwp~|-#kZjzr+hnmS4K$L7ZFZM;ETwbPkk&!nGDYgm4?+K(KmR5Wnrd&kd|pC}I%;d*|{&Z=+tS zqVQuVedUPzMA3zL3@%k!?EC`8n%cq1pX$>WDutd-RgZpmnjod7=pa;EO|bc5JPXMr z#)9FKP3)YS1xrEEY@u8;*$9E1^vKmOxKSu# zAq(;#ayC)u{<(ymEtk|tr4s|GVWKMV?2w1idPWA(26lfFU9{r)AG79(HSdo%PxFeu zp$L_tm)_4MkRv71C^>sirdsps8+NcEVr|<$)z;_KLeOZ^rI3S9IJVYi1&lx2#tUfl zA5L9NHo5OJQxNx@!<^36*tp`FDf1iIoHiiSVyNp-N9$6A{r#b~r0^)3fT`L@x~)`h~n-ZEi3gSd43WqN1CrY0bvj`Qa=+Nd|_fe1I*sqzB`x@hz&5$9WA**zG zO0a2cS!{tG{hXDQ`_;|KLi<^fP?r(yl2;D}KkYi5k*)Sx-GrVh-dN@fW@t5i#6zix z=HNYWVlAb9bX}b^=3dFFw~r-u{~){~aH}j_0@Jnb8%9iQDzYI*`I55HIJVAa>%_aV zBfjN6yY@KWMuahlOmatGqpgb-&KX)O_RuLXH$~9R_?O-PdZ?3xN6qR*i=v*>5ZyNC zqN&0MBF|hxZd7MRprZKs9WhOBXSL`-Rtw?h=mw!;A>+$zciU1fUm6;EI_zk9aM(Pg zDcpMS<`n1Pmq^BqFQ1>QN*(K=yKm?kE4B6{g|6$g=3eaSRkt@Eyk+$rP)vO^nJ71v zH?K19N6pn87`MFkzG#CJ&Z8X_5Y&m{<4`qi?(?|)c z@=D|oaRT#wce^$QhlmqM1mIi9MTE4wEyzWD`U>E>3ne!n!IFrBpwO-^)_}hPY4vtetv@f4RJ&2)JO7@2+}JW7r$-Zp72&~!NK3!U{EAS)}_m|_;oeUpFDcp#whJON4wBX`d+@!lMHWq@p)081#( z@DJ0rw5DhpO#-S9V0SrC``pLpRLEw*Amx#I)vM1_so$U`l>*1CLhi&FTytEy`}9SU zp5*Iq-jR$NKi$YU?C+Wjr7^(@GQ$e)*tT;3Jp+ssc{E)e9Auy*GF66IkQWYZiWE$+ zzd)h(&ut;XbYEf3Li~}r2bU&T;%^TEu|N&(3c-`_pkw^7-86aY3m${9F~e4NSlY7b z7HLLIqvvAV=o0~!GO@az1c?CV6UE)s?;52~)8GK?&n?O#OJzY&EGo@gPae)#?tv*e z{6?$N)05HzLmH1nucwY(?UZ+5OK1{K5jP9ljRT1D2Er6T0eN&)FQB9@ zXrX}fj6` zqZ0E9oT(0ze_3^=DXlTwXo)9sYmv6vy$Sbw@|&Rg^Lp$R*w6o2m0y9QzzGM22^}2R z22s#_#z2Vm_CX2HKAs5#CM5d}Jzr@1 z#O9%91ukmRKInTItJBsbBRgvT2HC>zkCcgQy2z5+8D5z?_5fJgEOV>8TKm;?GS6V- zI`0c*yaM9Qe1Afk(mR>(kAzffKr&M{Suc1yba}?gJ@e$Z=rO*RO7(myS{uBC_GCy^ zUT{vS$$|az*7I`|3`h1j{ve4d4x9UrOACUz6cpHDS6hLAS3rQr*&e5%azWk`oJ$s( z_?UDxEHpOoG|JRlzsKe6#hCjq?+B|t&vxfO&!Oyl+fDE3(A?<_mD;3{>{f=p$%Kx@ zP5wn;Ms`H*j82Y_u|ed{IJESA!V`|)}5HJ@A$^!61gI=l0Ft`OBg z-ye}ZzXjQ|7-DL=evPpIkdfV2?+x;Obw3CTmf3H5##qBPL;4##N_W7cV~?}|t%QYn zR5Vd%xcLR~dklFXFXBt9@YLPxk}|>taxt$hle~r)q}1q zwX6rI!3d5H;-m$+vf6edPbrb|!%X7qP#&CpaeWmD9LzX#X%xVoF~8jBh^yKyk`d8B#Fi`uK>Z z1$;!4A8lX(EDT~?*zrmSM2%HA7xG^+ui9e15f<52G0FSlL>kMo)*pv*bi8{QzSIFjNaxFSLs!D( z3Ygf+4plW;RShYMGAJ;XE7?bcXy5N*+M{Eso9#arq7)$*KNw#*Y;Kc0Dj*$bH}Yu> z;wJXTfaR-5+^*f}u4=I*<3(BhPb)8NB$PDlcn0t7$;EzBS4|xeOtrTzW}!0e-;^jk z-PpqyLZ|@)@ml^GTde1ci`bQSb2;?v*D|K66>nhOw3YZ@9y<@I=vy1RJ0jmPwTRahU5HEMT9o7oDy@-qL@aQ?JifKpa^RfA;Ld=}RV~ z%;fi09S-`>2h&}JyaMWVn8>IsRq;~iqxbzUdiBmM9=<03ZI~4y!Rk*YAo>*qUA*IC z2rFmfgtM^VQBl*9g*^u8$H-&&Tfj2k6IDom{9e0;_1eW!7Q?2}Z~+w#Cfykhua|Ab zfxyl2$0wP*o0WnFhw06e%oE8}&&D0!R_2iNbJd<}zD#}Mt~b@OwrnKhQf#BhAqTd%F=4IWDGA`(!C0u^$gn?K54Y`L~#WtcJk*;r2e z&5SyE>3&Co8n4UX%ZCQmW2;KzpI768;$1H09ZmhS@Ag7 zpq!lk<$FPnwjFWM<_>1I2yO?3a6)WBG-VGGgnz$4PXShD?s0v1{r}>|y;tIY#h>7j zdN3o$$BkP<-1tKzZk$i&Iqq^pxu2?G5>swdv8F=$AuCYgW`qql(tENdcEIIg=qL=a{`d6Qe2NiF8mvhnVb@#D4w1>aV@tDbM{soMk4NG!; z@mgT!Big6UjPK$T6fGfc{OEZYl25p|4j&$<5~S&z=+a`vefZvy6*45}(u?SYML{0d9bL~DJ1ZxE3`(J$U`>!DB4s3YXNRHDe=e;BXgn=2 zo`7n%My4C)R(7_|_z~xC$>(KTUX~5|Aze-HXYnUac;7>^jHYM!{zdF*rf8(;YS`Od z%|^savNr6ENuZ@)sPAE=@KCBPo;=G+9XJTRfN;(L>CBG)qWFwCg-0q1$vU)sx;X=> zI!`o?aq!2`cq)EH-lu8ZP6qm6LcD%BwA#+m>sGzB&)_44_GgSVt(v6a%-VQ*D58$lVU#uV7{teNr>&AW zZj!v63WKcZod!VvZKAng51ly~S73_rXu9A47Y5-c=J;3+*pwGxbZ&vjw2=472%;-F2<9ntJrB%7Hi9^Nk%|i?v$D)$_Jmt&3wf6kTO)Wvw>Nk@y?Lm5ZCo4{} zfy{;5O-k~M$(MX3)LKOBQZf*Z(Px)4v1W1_+Q; zVs}PfF~6|$*WEu$H{iku+`jGZ<4k%82O|aS)g4u6ZbOt0kezrZ^q_p{z1xbOvFg>uB!J%Xc&8YK^%`s zBEobxO_(;6HE>kaJjK`H_I;|n@q=~H{brRUhUOE26wgaEj!nLN)YS?|cemNolYxhX0syH_RHJIsPCOknRuir0EHT@ksZV46=$2FkFQA&a*iOA;UU6 zDLeyKh5xUW`TJbFg2Q-$Q`!qWM$UFnnEh+whqzqNitq5gHuu5-uF>zG4>t<}* zDj{Mp@ienE1yQcE5qM_y8@H`p5|Z89JCifgp89HCe{Zxzh%aP0gQYd!>xN(iQwwj^ zWAdC5g%HAkg{k`e2U6`XjtO7clM_dDB}}Yp#jSAO`qyPRJa!>pR8!d(;8UZAA48Df$?QKf5+`vV&_l4>*IBAB9iCs zeDjDwqQjxJw-?f4gzh(Y(BCFWr0@1NHK^MaT+WzQ|EAB5>LL>vyiQPshy2lPi87B= z22%>W^JDYVTwJ*iWAZBHWFivpHwCT7;#wd~-IJfGQ*!HY=~I_d9|?ny)t8YHg4vvX ztH;rbEOFR5-Zw&;->L0=JWa?>7q$|Gzl0a`{O6*U_g#%L;#K}_Q*ze?qb)-tJ7qGW zC=o6A%3gw6UaJ_f#H9b&QypmtOp0O8PDvnn=Akd?8Yn1$0LiF3o#au zZwD2a=>>bVttWm@{=$uHD_;gxl#CWD(XG1*0jv~)%5bz$^~-^6BtuVzY$N0Uv0ACq z8Gm$;I?E`YA$Y)ER-0ffBE`s7_eJ)Z^Gv_RrclK|g0y#{qZsR5y?P30%HJ#R_a1%rO^u^QgyR)*%xdAE6X(8Dg3ZGQ($<{x$;l%?+~R|Z5zIvNH=>xRw*-jL)quzJ8wZ$~?^ zx7-7~Yc$iB4<3x+5HE}Y+K!H~Bn$`f&l!>}G{^toY> zmIw%`pyOwabATqF6&{43c@gG-@C+gx5`4uUzQPTlN}zO*(ZJ{cyM1z&8emY)$i`qJ^B>xM%Q_kCaLO1q=D4k z)|QqF%Xko$@%P2>58Z+dv_;WZphh!8re0P!d%Q68f2}0eh^>hiUqmbAVk{`-Q*yEY@@#uQaUHHe&a*UlVFbt+@@H=Y3`THd^e(I+c@3GL=QPD z=-TdXkm9_*a$(T_wH#}zx=P3!8gu1!t^msP^GUvIM)q0A(-?^AF8q%6)lresvq{dc z*ICn%62B*u`g&Jfk%9H&;Y_ua!jW%n4HPQ!Y9s{C2{x;bzZ7M?S0R4I8_eG?sKz*fe%5Aaq{o(opr`2zB5MZ26sbeS92b<3rflt{_YKQhR;8Yu9;+&5dhtKy!yqjtlSihP%BgaV8 zJKiozc3zQSAB?1nj*)abWc}DmgORk@(WX^OU9?{zY&+urS`IIm>F}sv9h^;-wf?mn z9#Y3C$8JCpMP}ioo&pj~3@^ybt)9Ol7k(n6#3rh%BKv`ZD@sSe=wY;m%;-N*)U$PX zt`{AN6A7f(qsa|mbtA^INIp@^Pjd)M#lFlPDA7o@UwsfO+ty&gX5v(FJRVt%PS5c7 z5!ToOint>Gr^ezZ1hez59FwX^uyDn-M$fz4-*By6JyJqJ7Wrr|f(~AtuQPn*Qg%b* zToCAO={J;GBe;p#7C$APeMwJ%0ONH0-AUcwY%L;89Ony0=Ll6;0-Inl5YozyGGrLE zVtDMG`B7+`g&PWFj`*teH#X@x*@u?t7q!Qp`99vw?0qi}Aqvc>Zx;aobXW%bEdb*r z%UdC;DG7;caypAM?%Cw$TI*||AQ%0L?nc#xDa~<(_K9r2S{MO z;yollcPyJ_WIAsRiXWqY~1+W_%|Ce}0_rVXI-Bt$6RGwMGCdY6iVcJ2ttkbb)Ih+OZ zGwv_aYebPm@K9aP-8A{C*D#UPMo96^>+!XVqoo34t!hP@7NPj;3HTi>NjO&=#6wimLVS$WwC;Eq9$l8)#ny z3%3ssL-;$}y_19%-@FvBp+<$yjU?S$ly&FR*CX+g!^ut_zb`m6fg1mW7)r=1`~`Qr zPjA)1?C$|G`*U#&a)5Q8~uUI>XJHzlem|LOn6v{uEKGAG$W*_N?jtNlOC z>3Tu`W(=l{RG~?uRb%3C+@rV)xfUazGOr<8*!xZKWwE#sp~$kc!-5ADe=@t}*cA5; zUVdt`zUPzm7$--`f=YmjXqH`Y8^f7q#@Rd`Ts!(?si*Ie4^F6S#G|Dmqn8E;$=@ky z8_?Gc%M&#}>(?xiA$L1?55}O^i|Z*HN9Lxz5tA~Ut#lXZ{cB(;5cBqq8YnBACs_XN zfzd8=L0RY0zm8W3^SxC4xG9KOyop+wVz@9CkXjrF!Jg7V56}qi&$gYU*VY}WB}HZ} z!8ThhLwxyolug3=PlEot*6Bmap9`*gc~T{bRLU+wirG0v6 zisC?QpG3Npl9I)QV5Z?ym0rQ_;-;P~;dEM(rb@n44h;Y0kv^Y3og&=(u3~}M;nLwG zjaiv5*ow6bR}Ojs&12`KQhA2T8fK4W(jDCYV$y~oczll$rJQ;~X63BC8JgPDa%5fRO{s%CVt&jwo`9lO6k^{=x<9}CvDJO;60o$J-XAFc6pY^al7sI-OG@l; zsaA7Bo1tycpuE@yY;Hrx%uK=mVGBNPz@nJ`58?7>RogkJVqj+Ki#o8@FXBiMCQynO z8xoVXgdo#KKRn59YYXW@2Trlqo$0hpPZWGMg&nmW31&XaTD;-6Z=i*$bgzZO@o>Q! zLuyLCN(-mES08q8x-AV+_NJQ=-98bffATN|;uGM}kWu*8a~Iw#qFl4Et562She;y;L;UMGn88!0yBBY< z`T-WJr^){A*EDnvo>VL*=xQ$z@)T!$cY`fU(L?NPj#BE?mGs;$ExCq$rwX1OjHeUm z_Of!tM0BkmJI%Ft7-eRbek+%6WNlW&1jLK$?@tY4nPpo~f_$G0UV2sHMxz!#0 z>o5OD!C(iSVJxDy1b!cnxf2@Y;$jXm3L)4Rf6lyOr|P_>Xt`eVWF+1`2uCLO%mWG$><aPB=f=b@&K-oF&td|gov|$#}~Guw6q)q zOj-f%z!7;=3Xz#sQ1fFC*3O|zjz&+8)96*{CQMC03GliWu$WJty;w$+%Y>6WBko)4 zbx@wmK#S}_ftf{G46#F6O9raS!8c)kjrOFNf(u2U$mW#(VC5l+Gnj|B;|y9m6&|H( zl-lQ>!Q^#T_C#qI;CtSezPjmUevFS2$>M{acXOwK1hy&v)j@@m4+_utSOwkKYiRq) z#3m$>Bv-6M@HX3M2z$JR%2^SyH& z!;PD9U&l$xcspg&0l`|oJ+DvX6RD#)xlD1td7(s^bIVcxxeB+KS!F!!ET3rdCGIdH z99g=@gwau{c23>&=!~mM_~f=XW|buXlY&I4$TYV~Ta5O4rk0U*jYvF6#iytSolxP3 zA|K;nGQ&HkDs#O}z6pm69m)i#%`9q@bG16~V?Irgy$gGc9PVRyeKZc@05y;P7 z`tRoZX-Mmhum0J06E403y%g&iIq zW{L*-s1qDdunGUvv#QpbJiTZ;2m^a%F1)%4QDYuTXoOVeO9^m?-u(L670o@^ldtqN z+?R)N|aB&Iv!onINupStQ%kWG$I~RG<>wU9Xh2!UoIm5 zlk-@op>bPvj*a$XIl$ll^Qn|~>~#aL(wgnkjLJ%6y%L*VL(ddRh=lGhaea7d zxqu{*I5>zWSg5gf+Y;dNUAo(?BIY09Ach?4r+Zsff1U_WOfnZDh?({*ab;Zl+`v@P z%ddZvsWw52HB!=>TGswF-=V4o4y{g-RoOP(KAIZ-&eDa_yw_E7GX8q^I+|>_ha8RL zXMOG^POJUg`zTd5@WHX+`iU6Zmj<82i&LMP+msxCsFkA`IH6g+7U%PR5Km?lHO+yT z7D1Ho$=Gj0jK-;rFBoIr&fT_3Hah-lHJvwtL7po#ctY>|{JQ~9&!`1~Q zd}bR^ZbEc4TK#Rwn!h}Z<%pCm^L*r*7v>HWAS6<&W$O5v=d~FS7=104T~U6Nog+{x zZHSKYe^nZ9Y;#9pKqs!K-XJ}Xve|T)na4P(Nh;-Sc!N>?5H2oCqC?e{cd#{;BkJ0? z>i;6OeDC-pNBj>$UW!Id|1CKHLtk+|G$8)=e#8JQ4pNBhICiqdx?`|#l3DTCW38-R z;2yC3>Nni(#O7_3?LK#c(EIq;CnVpG#Ss(*%V@`3+J^vncivWPDc)0;+l$q&5!yr?~M9&BKqP_YxeXdxcQe} zhs@2ZVCdwvc$!jCMAYvLL1M*d4h)@8%H-U)p5L_6oo?h3xn+0^E`1-S@rFZ%w7l+E1Q@MLPY)T0CRpRGXJRC|j8Q`MM|+N3*|d&TzgrTmDrSii?fwxW+cbF1V81gT{XdZW}t!JtF`|Y!~?AI zPueLik5DOaH^n?zKC>jw%6K(YDdtIn0Ab$YV;djF?|I*VA(%-_+zq z2o)@bA$-(ScX*1Rm2VFta40;WnU737yfCI{#48T;gTK(7|Nf8M4lu|3Q$zWmeQry% z85RQwd>k;TTzJ3%vz;-8TsrWX)~$nGaCt178WoExReN-G;3F?r>?A6xIF5*y}`&5~+-!RakGUqm%`c)%t zAFRcGO1@0OQ!5`+ek3D#cSZG=bB9j>jE|A#g@!{o(R;Wugb{&1@9i8p5uee%?{#0I z0t}lkq|^~=eUCt@Ib=$?<0TbL`L+Pz;E|J6#$y40&v7km2bdzs)pX>IU83l{Z|f-} zzu1PiL!){(WCP=cqaToh?!X=MnZ^)Wp+l%vf|VOVC8&|J^)#71#NdUWCOSPR`tW?m zjGw1s;^Ec|kMUvpuh1|n=hl8;qdfxACf!OW6>Zw8M#LfwC5KoKI!iVlx+AwD{;nk7 zxGz27)#>|3bkcJIKN-!cx5-*Sw8^}wPCHtvNdMUxz?O~u#Z&1nwocD?%Td2lm5g1aV?;PHQI3#dAeG=qCL&Q zj*GIyQ(jR{=G#-G-_BQ1_C2yoW#05tXHoPur=y5#0O#xf*aeZ~KyzehfMHg7}FQx$!!;QqbTxYw zGo;&zT<`Q950&96kqjY3=-`dw-MNEWAiWE z{ZEM7&9q{?^cd`RKeooE+Yv?}l25|Coljz4I@d_*X4tS_GEmrwAEl&@KXdL^Nu`i# zlBlP@X>|+ska<1$aesT}o3d<^jMo~LY=!So@5j)0GB;}yk;(tmA%RnN!!E8qYHhbA zUbnr-VKcn@?T6Z`bZ-d?6UqZX2l9>`^QTL3DOpYk zCJcKT$5%;eba2NCr`MyIG3Qn(TkWMW7n!rrY_BG%FLnE0>oex33hn-~pzC+UkynY8 zV4rJ+&e%tH8v}-8YJf>k5(`cm*>*1GE=`9WwE*;o|>y<=M0G6tx(jsBql z)s$L)*X#7@>qIAa&^!p3eMUChyWI|Uas7W;wk>X7timf)JxlYYA%9bWUznYMCz=#)TQz= z1p{V7Kp>6v57)iQ4;bQ$+r_f--oWQHLbm9=XYt&@%{5XE6tJ=hyJFm3l^Cp{Z4H*g z=K6#Ro1a^{&@Aesfsvr)`Ny#J6C{(Sxar`!Z>>tZRu14XqvBq{v!82*Esnk1z6?}Sv~=euoLS^zht1-L2u zmsP)TQ}~dopG%GyzCb>%j)D;DPLj){0(R1NllvUl>Voa=E54YbcswXNb-v?fzL^}0 zE^lkbpkpEBH|64>_00Dr3);*Z2!9Jq!Ec-@R)^1?Tk^9>GyB?@oZq)!l(TQ>r-(e( zXZTd!;nkOOaq%h-7;`zPYMw;Zo_P`w!^}l=3*k+<$bAKL%fZ$R6Eg53`LuZ9C+J=@VI ztEsKA-5%Cf-+qYyD0N7M4t*xBTu|-rBOu|59xMvhQjb0DGB*5+%E;a+yy$~itl#;i z&RwwPsUMn-}08)}F35IBO_%9Gs!eCy3gPSO(oJq%tBF z9keY9(R<=h4o-lS`^6s2Q!_-apj5hFcrH~7Dc{+k|IXavHWBzba!y$dyw~)xn&V5i zzU`y9F8(HUD9N+R``pt+hlXcV(BIWbQI)@T{1|1_ch7@Ai)&@NiMaLstZnS}nrADM zQa_1Fn?0Bpwt73IxtsOzU=VG{qf#@Sn9~y!53?`4-oh%mKruBw0tc~MV%TyTSt-Z`+(V) z)H)M}6XG9xlRw-k7Nd>2W8*~sQJa0*Sn5@bjahQJ$*luFnZ49E3 zcW4kjR45{$n0N*UX8s|(vw!oKv%jH(lrALRmLTZ-pD3fNAD$bF`Ja^d9)pdIm79AQY{Lm z;{&xtPXb!c#1XQreAW1&P;HN`K78Lo>gw4n#3U`f7*#6uzX`mpGJFc zm{QVfjmN2TZk6Y<`(M0ytzCih(q8>TPyIIjJ?Nub8M|2rky;{LL;F02CzkH{IVOG&Y@?FB)*?@Nv3uK|j>oU0 zoE0(ifSAV0a};Ud!r3HoT?mVXWkLEdJ2vigm1R&?_`p0VEnSqX?BDmUd0GyqPuBVh zZbQUHTtz1pcd?&&C2~K&=)T;HJ~AX%N?`oZxrJy38qD@{(cI-hI`p6VLzCG;Ur?wyod2KUckge`_#3U+*t z**Uvx13i^pHSs!%KdWAq6vnX|M@E>lk_O{%vlX@Efxhx`x81f1Y5O&%%BWjPg8LDT z{eVE7th$W#fa$Q_~G2>-=Up4o|2QtiQ zq5~;br*7Y;TAq*n@HH*UGR(g7x}J7~&$+!AgD%#7*Mau@J5w*qj=O2|a|)L3*N)?; zv|X<~%NL#@ zbrgZ8m|iYZRc!Mwf%P~A>mek#!|`eX1S4m#i10wzodY1~EHI`ZHgR?~g$UH`cnoBe z@Eg-PS^ruDGLCS{1m-O4Cup*eQ9|&iR(!_M{8AL`n(L!?CG)vHj5mg0OAlqF6JEWC z5ie$A0Cif%<)ESrfh6mZsR6O1{qLA^Z*b?Lr`2}xjR=CS-b>!0-u>#^eXE=%E-iwL z2HfJT@A;qj>1Hk!$5o2sz%9+Lgb7(CrHj3I!@KJ4;mr!hICbeUTARSzI{Pcioah7T zPG3xLS$}-vG0b|8fp&Z}c~Pe~ejwN~v6G@JALW=S++pu1ddO?w`5d99FB!b^2Y8-= z-TcgT_bsM(WvT>jo4d2lCtQH_`cKR`j96@NZXi?wm68Pp<6sJg5K}v6#B}tB+O&bj zY+!Ku1p_V3GtS6p2{moVqkgaw?g(<6B7KN>`|i06S+QuQ%GT5*G=EPr>9Z;8(aIun zhU$n#^g8+(F-cQNM0uH{r%u5Lt6T@{Coc4J8mhJd}?m^E^mb{(AD1c9wT1-DuR3vbF(P&d1o>Qu2`vLPnTS$pLRuN&Y=i z7RvxNh4zvwwygZ@#^7MLeao4^Xi3{9+6T1@ac3xbraYeU+`H0Z6!m@p5& zf%)F{%&TdwQ6jc}-NFmI@E}NNuFOZ<>O>ob-VW0U&C8BZ%Z!h+w|G1&*L83@DP}MB z(%1C@(#9jIB3Y6av}^(PmVHW4KHV*>yioSjyy5y$ z0=KUu&vxBX`j1P`5m?0ESM@)dbO1oNhf5?v55a-LNdpZl$1j7N;lDLblhIRmUl>g9 z&e%Mo!&dt2A79%AuQtveb zsiqMU`(aQhW2PEC<7 z;#v6KFa5l|)deTOW#EwpZfCeb5B_J>h?J!}9*B@eXl?@*aW=4<8Zp=W(I{(_rx;2OE}=Wl&V>V`&CZzUy1O32r{=R@o7J3V+n)IRtrotZ5x z+*O{9b{}_BP*}t`PxY<$Dobacl(}m652Pq|QBv;1hI}kFef}kvJ>|h_YtWI5M=~Q= z_3Tjdkrj!f!?GhTyCUqhv;~b~Nx%-xdv_V^&}%`wN6xcFWzBhOR|R}Aqb0E$xw16l z?bUcWcVDCfZv{Eg_}o3{68>C00E5=%#JViR%F0e4?z78;Cw3E_dpcOR9f4D37;tNW zufrOM;uhemfiw{e{M+D7N1%OxQ8Ydyqhato!6yBXoIkCtu5YxR268f1tpp*)!6N+# zSv*0aeE>$$;f6_OLK!Gdg2~$>!5W*yBnD#+j*kULqwYxr$xolP)F}uH{CLQRmTD*wpsI;VV*?({_7dA>1~&8xy8r|o;b%{2-{Xd17#TuUJt zBES8OS^L;&?qMCWU34bS#)8T^8Bz0T31J^F_X8>j&bR{BRA5@7gItED*!3vqgS)T9 zNs6e9q@***NgSL{jLYrm{!T#3>T%gaaz%CD7G{szCW&uzlsYUAl54bMjxq97J7FNx z4Oo!~G|>DHl*1o;^S?8!ATZO@8O*})2128dLICK_7!<-W{ObYu4Kn1h!kNlDo2r@e z3GoW@igLSnxNuu}{q-dL%O~~U{Q{VCqW{$`I1PW(9X;T#z>Y%V8{kT=jeMzw!`iz@ z+u~d;bg&qAq!;rCx`MS+r0@8MWva7Q8yq9wC_OPFxXzfb1J12-J0X6cpfb zqByxK-e$IR!Bf6Huc)f3-Q{kEWhgF^LN)iC-Rh`V2Y0e=nAHlGIXfK}pLQ%Qe=_d~ zho}BR`P+RzJ8ZP&S#zp~bn~nkMRilyPutL7@UH8*mW&JW{S5L5fakAx;%oxc}i96hHDRzd@FAUMf}7{^Z|5Bk)ce; zt?yI1=m7J`Ap)hek^TXINtUg%u3QUZH<;kBpt3T!h#$F=6jJOlGrSy|?WQrWR`+7h z12KQ)AKBtfYbFZJm>Xv(aTRYPhtHaRh%SNOwNJiBaiY1wjD(yl~2`lsuO(n4z1`7~gM50s5 z`xrqO-nX@N<2uXRPX{NyADm(g1EmaJEWcwhBaOK90H^8#ofdO62JCgvME>1Tr|~=J zafi8h^9nDK-mYH>!xB>629Pie{%$-v9x55gZ+KuBc$jjT`rxw}k2h6szY(iQa{mmB zM!Qn)yNI8&%VN^yG6Uj@&N4ide6gmjlgX*v_aWy|dpbT%CNYs>E%92gPa1AL)G+00 z=;32F8T&`f2FQx&3i_c2`iCH0F!(QCd@ccbp|nCccj z6lv1e<2& zsx!ZP8)RXttPEb!IECNpzbE*kHZGzl=TmrI-29{bsy3QAy8*!f?W&B=14XOvL%xcL zXP)&9s6_&Iq6Ae`xvA!7c=DCrHQl8eNfb;Z(G3zIKrtKw(MAsgNy}#eyd$Mv?9A-FE?l_mEvqG~>^-7kRAgjlWo3qBXJk{f5TWvWzAt^gr*nS#!>My_x6>c5 zUhmiI^?W`bkNd;T-NO=4T2?3+Rv>I!6xPZL-lT3Q$dHFzQa}{#ggl`@^oViu22>FQ z^jV;+0fh@)n3|}1IJ-!KSQuE?&ZMw*4&-$li4b*@cl=P&^EOj)G#vMq^UEvCJ(={A z4KD}K8|BxoF_J}|IR0=k%^FfN-QGy8LM#nRC8_D^HaU?TWq11YR#=b9!XdeIoA+H8 z^gczaGBJo4+zBElOHVy&K7S#qqrsc>{RNdvJtxN-Zvl&PAqJ8(>(8HhRUWSu(?O-% znfuheray;cP$fgCKQ_*weF+JzxnP(0JG926@s;C9n{isl@x{0HYEz1*JyXw?E0(I| zr+V-7beDob9T%UiBP_8-<{vx2EwYyr)9bxW6VkA63EuG-60ue-DAvD9y z8TlK4y{d+PNof~MIS|rXh_9WiEZ9$7M{L%?@J0t7Qis2}?mVPkO)0F@BHD$yn`s}r zNDM>#1nzbxBxIoXm%B7j1&Dp6_>|G{m0swD`75SPKY8<$q9Zn;$wh5L2X86J66?=C zY?Iy6P-M1a#y&7mfB!-MAhXPA**)jYH`5|KY9{IZjEvr3Dw7SCoTbij1hVvrnGL#2 zOW0_KKKo>l7ayZy-V^*{1GH-Pm!kF%@I!c?;rnj~7mZN|8_m1*WQ2QY_Zn&N-#mHv zgca%da?JLZ?~T%5&W#yIx1?<+{dhs-?D=!Qd40?pmWzyJfWklLUz!$qK`DzN?Os*6#$GCr})%J#3LOUvKJ#bNAkLEz9^A z(I#d`X?@!ZtNW~S(S$=g&WiOxGir7ilREEfvYL_|H5fHcYNYodxAOhjmMp=Ci684^ zI`g7#ChO4ju5)Q#G5PGj(N0H7>LGrS0(oqnWi-6Y=5n3m`g$u{nEN@5bql{|MG$=v8{-A-gDbBt{b6cL^$kCIG?ttA@K` zHve=bM##Fontp?dzH^3TS|-^ewrQ-@2*`NXGFn6R#!EMS!w@pw5sv(OC9!F@e}9d; zCVyKxgSG(xSk`D6Z8=^(J|5G5qW_SMhA#r~N}|po(v1}wmpyvA6fK@yh+GC4ML5%S z1w-dOhFd;m-G2qika{Jx+Et+ZEYwDcxXwFe?Li;rhD)PNu_^t97c~btHh4F%_oDsu z^y`7cW3G7IUWV_Slq(0R5#6mTR7U-!Q}~eF-MM@>1u;9`;3@n zDD1ZE4s>U#gp)XQfX>JWpTA7`>>OHwFpPWTTiyUB$T}=_g>AYdt;bhn{|kE4^h>fr ziAJoqwKH4niO1fQjj2DgOVw++f1uC3eNoijy1b>pRQOptSk?4rO1OH_1@{{6Ht{l=ei)4*R(^E9>NT<|>epz0{ ziTwK-iFM22&@N*T?*{Nrr8YY+Z*V4oTubjj;#>6VUY_3bnPXE2_@za}-jSlO9x6Hi z0)Vl`u3T|T#4vN^(#EiOv3o6lxvjyJ<6|nW&AzzCOVp&Ss9c@(!>-)Bb}C*f#c$x) z$J%E$hIy&k&H4NuS*1d02|lkYn}1zzUJEZxe)-7xTSqj%9*HI?V&{5!xu6`?QEnLI;Qyn7#&;?Hai{!IW!ZT{W}by5GMTkR16>OX zsd~`vK{Pr$;$3{A_swg7;2{u`TPtOfQ{~TT=uqk&U##+O)wi&{R89CTj!9I% zjaAbfKs*~=bXI3t4-oJV8h+(mseSog^58@IpC>ygeKxO$Fw0%$F*`X`hxul-%ori@ zb&vR|uLlC>MYk{gGWF;JqH14+DQrn((!Xoi$R#%$5b$Eq3Z59%9f`_6nZXusB-Aa_ z?i=%YplyQ7_KG}X>LCTo+ybG`+p{)@E$u{|zY~Zr`+g>4JR!JG;(KgSd+4j4JtQWh zZ|26_Z#`P5HawWF`?mP8a-O)4dRc4Vjaw92=ApDtg|RCdHh02N9<_otC0AuiLPA5O zikeDB(9>5s*itf5-<;Hr;#GN>6834a(yF&;(%ARZSgH0{`OEybg1Vt*6tJs6Rq@;Op!#p13MC84cSKe z(9>4h7<612V@AR3(UO)mnk>d{?8qaUU{%nge0)4oTkc_bvWudTjLcUlvV+g$@vC{pzSad1WW$t^;(jIJqv_fA~RCB$~dAavgp2^0} z+#~lRIS@pakoW@(YhUgdNADz%h@vBkbBZaGZD^zTEB#QsV2VKOknLNUwaly>pM9U|Q83vw zPMF091R=Q7qyWaBl6sR#i8h3C-Hsn`f2l@qCie(V)@^_DFHuxUS^xw#l5+OfBgCSnykb zy&az%t+wXnoW;y1G&x#Z<{xCfdO!b`70s~}%6sG@20gemIOBh$H|r}~(YQ$U0Uwt9p@~XEU zN|XB{Jak_cG%YeDiXOXd|}}#A>)HLb&e$6*3b)ubeQMzqwtEn8!~x zeLH-GH3a(7_~UKYcdi=LoKVMO?3JOVtSM`%BBx<0C#j;KtRRbMZlbzv11=tIexJKk z+B|GLD6>8wz30YW#onqg&%S*bQxP02GgO=B{c9X;4xbZ(*O`^O;ToRrrH7%AJIh17f6CCHDa%M zJ*SRqgAu#(ZqewCUJM{*zFO32RtAc5t%QL{UIw| z1=mPYz|A5N94U5EuM3mi6(U9Fzsyx~Rz`k_k3-#2m|eKSzfn$CQCQ`Pfqv-+WFxWi zeoa|+c%j;hVzhxc4X3?lrK)nV+fyILE7S7QBw4l+9`kCb8=tf*{KWTies&=7#2n8~ zBgyEFY52OJs@GX)Bt_;cKbWVG6|P)J{@qAILhX3Hsp%TWHn#^s=lfU?LVv#G-a#%( zWIDcURc`O$iZ!>!p$&B1!B6h?5AzycSN|7KJbhB>*PX6o?Cunn`Z4<=u%P-q^ju2y zjkL}Klx6a#xq6_Rq>gk91_pu#I?0lvC*{ob6%b!OX*@KCN~!n0axLR=LP^j}TW}!N z($Y$+rFNluben*Dgs8oj9%GIHaa?~bW!~e|PgLrstyrTUqGpXDGr|~c3rDrJp2e#= zUk6UkTQ=_2EtMzeKc_w`_N6;oYUA4l23WV6t=TyJyChHOF7kRq2Do+v6y+ZtKW4io zge6W8*Aj>gO^@S;WV^l(50Dn*H3AXoFRv%I6QC#`p&R-}TO1i40t>_d3$*KfW@Qe6 z#Q1VZ!4cv;k>VSSi3ql8=LHJ#RIrZ~=2`GWHO=kUcOUc@ENh`|+rM{O3n`0u#4t!% zB(#I_M&vnCt^?jyL&}uJlcVQT%4-=K+86Nzqia zHwvjQF{P&2c!v8pWU9B@Xe$kSYDgT$++tT|y$^*=&Vml)zXo3a{8z+k?ueGvkQV0S{rwBK8xkY&M|D5|hS5Jz z`2Y5!#e9z^xjgC&b_;G4q# zRR3W?92A1>`7+w(TU_x8HO&@*Lu&`Vg*-mSA3O8~Zj};r2kPFdgt@492ZseLQ=XOO zWO?4LtXzD0UT=hKNa##tj$_~b*H*XRl^L1}bzoS8^y?1#gLPyR?Q8UjHOa>MTK3t% zP*au6uDhMdnBw0 zm_#I}4=A3lSPWh&qXHy=qe!ha66HcCddOsrxUeAT%B8SnHead0qq++UKCLvR@p^A& z**a4<#{B@+@{-PPo(&`0T`hC?wfCn%>G3Y+>K^xop37Bb>x~x)J?Re0M~4=JQ$#S? zxi!v)C4Tf$vHFO=x?Y~cljTaCteyh!f8&itxU~w>MzPBkO;=UzWU^Q|PFrWXcw}|7 zt1&-uOnKOohf8yFPzlacqBKp|s_6q&47Da0zG}|55veC*&{rJ(u zNzwNC*M!^*#Bf?}9JnY?LbiWfVgs@(<^b%&^Ef>CFOQSIUM(1V>=kRAIVAp~AtB5T z3t@Nvy;`OORQ*WTT2l%8{Xya>3pROK8_1JWAQI{B zwd!D^tADlnsagedLm*lAtZ58;QyW{il&%L8X%I(-;DBqetL~&`mOHbc5Vn_-W8^n0 z5db$W4(SEnyml#4znIrNt`+*q*hRn1{~RQpSD9VpARl9Z&7-M$CLa%a#sYtDbFi(& z9-w~Eoj5f(?R{q@{7z`&%w?@?p5@d~0rgdTx_GAZJh{Qh46vJlj(7Cw_O&tSlo$k5 z_z@Yihc3cKx&%LB7yfr9{QKJkV}P3}I4E6V3~p+Pg@idM3S8X~!+@KqEyfcAdIMK@ z`u_Q?Bi)2uH>b3QnyV8`w15A~{~Pc2um2n0e%_S?4EYZ3HaLtM%t@@FZ-bbiOd)p? z8ie>3v=VaJ1-;iU$(xQ|swi`hSn3pE5UWG)Ty>XwiIA&qnCn^+5|{yQpQpSPg$J20 ztR#?JKfJX5;6efatJWo=?BwI}6ne^|(+&Q_8SG6gnRN{Ufz;6)Y+6Mc2cD4ToO|-N z@69Fcv;9IvKJogkOA2AtkNoV`ag~cm*f$-s`y;vBJo_gO?vGj?oF|n(eIfT*mZXwO zXHX~DbFtyd+N2cL0QJIRC!TX~fuNj#_^RKRQHr`_ zjYKb3O0TJYM~i{wM~y6c20ngd7P;#iNd;@EAgzqj(MBs{k!TjMLm?aaAKL(AFcA8t zYG=9k-*cF)Gvhk;zsapE+3(5iPF(^az$^9o!u$XxV6i1wv@u$johSPe^0U!1@kMPN zX~xP5g+aoz3?x3_?|>=8^_wo-a0 zx%|EHLY3jK;n5FIYV~_$QRZmo*}o;`R2P2uX+0!I7yA(6e^;{tIq0I4Y0Q$u(~3>Q z%LSEn&$7B_h?*b!dGRyrL`Z$~GrjL-^<1QTe>gj*UeG&JVSv}?I+pJD{I&nVR4^i9 z5{93D8d3k=&bnAfBr((xh!_qaBLs@98!|QfWB2|Ydkzp<0G|W$$sFw>qbY^b+yQF* zbF7}3en()UQ$x6vt6)xk=X!t`AyX5T&uxYhIR};mt&~puxe8k^K5)VJnpwgT8O2pHJ>_)@V=t#CQSDodGGb*(te&ZiGj9y1I)7Q)?m?-~ z?5Hck2z6_(8u6z4ym4KVMoPRcIDq1#;qf&YO z+H(x4uYA(sQ^m0Fa=-Gne3jg1A^JTQ65ZaM%%C+|y;YMdwM58<$NQ=>_{e{G4e9St z%?!{CeWd;NFbFZY{?(g^bA}*S1gejQ;RYy@Q0{Q&AQ-tn-1%nBtQWtWD=J_$D`crl z*m38dc+c{Gc)icoh&2(xm#f%dlBM4e6kAl?%dIb%korQKTEB;)_k*HPi6S@?l_CNY za*i@TYb%jrQHsmbVAHC6FE|iyn{}SS^q8P|kcQB(W^LLU_W5GCRFU}BL0dc74}La_ zWhWH|(&`&UFn0t=`y#|VH3!WugKo~by8~6McLZPOIlcTGS1!g)=EhDsV5}Vfqv%aw;&f>Jo6x~Oa?h`fbtr1bR=g4E;dVWxQY|mk{(h9%KuIrQWpL%NM zKhFJZ@^da0<$1}~Lqk=!)SCUE?tr`$jU3X-3-6PDjlQre6n9o zOZ1s`kox=xu+47zVKK8v)^IDUiS~J`L9D#3D zZ)X?CkGA`ya`+gdeK(9qeWjDgPHEy(gzq-EVsA(qdI?}xDQe7k2KLH}q`nD0>Fj~e zgRj8|?bU7BezB7WpC&=Dbu|b^WQ3r-*?r{d!vj~Xq?{%S?=uJNF3Jms1V(}G(h+YZ z_y-Vj#zHhtrP`u#pIKycXsjMyt$G%2-@u9;wW?o=_dBS3`49JyUBv`J?g<}3z$2Gp zZCb1E6PO$GiG$=P?y9yuT26|brL!tmGv6oreJ1oI6Y&7k^QWhuKUK=_FsN2=^bC)# z_R;Wt(8LS|GG)bEC0Rd4oO<0~9?r*+=m+DlTdMjdoHul;l^`}TP@{_`0;X)vA%|(h+h*qls@Op-81f_J3DKK5KVl5IS<(< zhCTb`oi%5!&O@)si@+?=$=o4^`Y$gQMC&CY{J)F&kCr-^QDCHqv4rO`cy-)O5rU(o zDaZ&Ql^H)>GghKSLyd75)LoJRNrzxFUT=pslY zt`5%5WZ&-jvB6LjZ`foV3G|UI37RkVTIF6HCTbQ`oY&UE0}$vL6jjU z)e8yRuzIc>N=%A9)yrK=1{vyYWjkMAH4IIZ}#9Wd%GfskBZ`1X|SUz1Ab zRj;OfP_uZH=OIOm^0jkF<=E6i`+Hj=XZTJkr`>Yd%Z>K^77~FOxo@W4(`Td_k=)A2 zO@Q!VLgaQVmI#ZOP@LEf2f^1_NaZ|YdgL}D?}e@uft>6vdrAdoZ--Ha$)UTsJ;nnq zCy7$fF#YX#`d8(rAuB1PBFpXY?|w3Y68yot#>HXvFc3y;k5zEA0z;`e+QQz$9Fg?@ zE5Hk)rr~|}pQ{+Da{jr=|JeU9J@N+G9$eqf2>r{#1F~vAZn)}q)UZH^(!`YEK%C3GVFpzhS}#Dd%}JzZ<;VR}i@d<4a_*s;U_i8|4jcRVHz z63LY{eu(n_VWu7utCA4-o|yNvX0x5XF6|THBH!Gz83q|2iUz|+Kj;DxCK(=r*%w6f zy2e(HNgMc?Fjv+lN@qNYp)d0ljBwy*&wJ8i*xx4*9;-oP7tc|93vmPh=4x)oiR3Yy z*CY1bjPAJaL%xmBZfe{Eo0HaO{qGV61R}`}Q$#!zjR6fSY1hvD(4}wsNPA2fKTksF zc)J$F-dEf_(8}%_+_v~m>pyg{*efcahs>I|}1MWHqd$IVs+X6ZjSFmyR_G*UQhECMWWwT+_K;ibbW~*EMWWPoAkS8?C_3R7jbf=T=uPdcUg<=Fh7>II|9LsT`?O!~8U{t`C zt>e0>H`sdan3J;zt2I@)PcFeS&FrkI;M#eM;iF?BW>j|;Rg)1RQ zJGuey-|IOxs{eofy`OsnF*l*_j4z3I-7JPS7VWMGceXXc9Rpxl&ELl3&&znmQF&_K0_ov34xB=# zhW99PryhCdxcAyIsq&hHB1e(=aGx271G%q!$&S0+F)iCJ-KEU}%HR*E9Frr`)^XZ8 z)PbskAI(NJgH;uKJc;8MiDel(N()H1Ce03Y5Lj;dJ-Lc9859^xGUKxld3#=7{&Uij zjpqG_>Mb*bi3pUiqJ_SirDFKkc98`6Cy)K$zrnVK%I*H9`H%Gd-_@BN&eh!86X)iP z_O!J11l9V#ml>HZ?P@S|ck}VKgp5`>Cuz`Cu7u|3@HA@9!H%#|Cr$Ew9D{(jRZkUc?Xa8m1WO$EPIlbJQ>_k;Jnw*h60fRlQ{;i|FF7hsxXF0yHGI-YwYw|%${fO0Tpb}K z1#ts-{g1-*k9^yVq+-8c#3#;x7WkMu7|3PS^P`kjAMQj+Azry{M>Gf-Gg8NzDGfuU zGzf|_u#CBFjAlPpsmonu1CFWYuHV>^dVZ)hlcTUInmmGj&TjX$E08>ZT&2ICllg+f&oM@kGl*(=8d#0=;%mkxA2dSW*#qK66Vq)cn9 zL8D(yUe8=1=;Kp*kP>&-B~|pW$6-M6XalM~CwI61-K>8o z;(4h3ZYhq*jOh}cEMz8U_PvDgEzmu85F|r~J94#dZ~1Lj9%LMyiD)?3Q7uEnbFR$p z9@#Gf^y1PNs^NwK--wN?$CE{XGMc1lZ62%~%7xW;uq@~3OXUi;S2mstf0|q7p8z22 z`>m~Z$}gtRzmu9emT2SOeoU-%>~)k5R#@X5``Bl-+y^I1ZKG|CNyKtg`yt>GCQ!$- zr!W3b7EklpF6pxt5$c}qSEiRdzY z8j6hO5QF@#!(B@x3)mI3dP309`|Xd%_nh#;o`x$VfYo0Rr>Ub>+8ZU7`2^gnV0qrD z`%^Ec2(Q#2uP{Bp@gCcu@_`rJ%lk#TS>cH?Ne=xRkyl+#Q_Kq#@<8I}GnJ$mVzQ!h zW-CE&TASm}qwTc&Ugj$6v$FDiW$67>(Y+#uE_sPlvEFMtyr!Wod#6+Fv>^SOfmcpr zQ5kb-B`4hE#T6C zlj;99jG4Vf$X9$nB#fo5l>zU{3YdvQ{HlD$;rKYz&*dZdfm||%q6gZPD*_)M<&Yho zuo|qFJHgAcaN5i~-I&#=tX&-ZzViaaEG8N#yYb+3>tMhu*%^nyaN^o6E8107xrw z{gn|+zS~+D=GkZ=3aYzI5tDg2%(JM6;=EztLeaeggc5YsOJrT-7j{@*x-V}Se;%d^ zh3gQn2HSNS=LSVS=uxn4R)}W}{7n|_D0ulpVes$wm|0kW#WaLe9^tvp67n17nD~Al ze%loLy{W$EgtUuJ%SdbhCfsT~hA8Pmx3BIuOdzF>`3nsiY3frBLvGJcqlb2k0Y=6r z%r9o&y`LGA)rWPs{H>njBWX@ivp|l2{2PU2mC)#Qd`8iy%`l+FbsbBP6Kz!$4j!QM z9TRNPDGw-p6BZKAn_`gBs^R&y#q)EAQgJH9OlAfs*uc)k07j(q<6d)k#)q=dnN@dmBwjKx}d z%Om#PKQFW}=@c{5>#~X1$m}jKZs9L9FmC-1S_G*&KoNi#lZW6zm0-`6i$14+y}qMj zN%6#5A=3-0n;&0|rkUP6+tvV3{oN?8S%8qmevsjyK0fcGc%5FCA8q zWScr_tsaV+sgpVqPaUelYf~648Ydd+bR?&YQ&TDKC(nh`XPc0~6Sv{gMFHb)%1Ud` zhC+^2soJ6rY`GVfy|c@#`P5@(5o*bK?@7OdgeRD|W>a)YQByWa?SyCg0Mt?DZQASJ z8}g<;xU=t^fw(%~cxK&zpE<74hf|N&n~4k|=jFRWnaA{tbWy;;TSti}qUr;w1 zsL%%aYO7REDav2U@|k7lv5R+B%tdT8T&|lhyQ*BJAJ>%_yTbnNq;DV2naH2LAbc&M z@3H2*yxN_8qyQYmkY=z}B;%c2pS1VGv^)3ltqE8c5OM83DS>I9iw6eWH!2WpWsgu( z@vWdg-i=|Jht1#JIAR{j8fsyvIBgbr2T_+3lOkM~qNO>d6{}x(-(S+r!?`>S{7%CJ z6?L^FAF0WX2K~@s*S~Vx#rWpR4=x%Pl5>STmB%QaX$U9!m_uTD8Ccj1RkGqjdZS{bg^S z3a5EEAuS&Lr43J`&#zMv^cS{rXMzgzW=Mx5c$W80oHUTY`}5Mp^SP# z@a0og-J%P@^=JXN0*ags$<_cZwx0Ld{fhn4qL1@^XLpJmU+(hWTCVl#sRVznYkC&G z0xi=vw>~ZjRMdw&_#9YYMyrj^YJ#jQRnSy?9M|2S;OwbYc8t%zM*GEaCtm{wWuB9a z-1%KD551JTswfXy>$V6GIU*gkFJYpuA|^0f+a1VMjv59; z_?G5Qu0GKGSB5Dmgdd{hF&@@f6od^!#4zfz6$+v?AvMw)r7W+7S3IEMH;A)K8Jr{- zR|v7UN38d*|0y{C`tWzNgEt3^N71ehURZdn{;oJ}n|Mg%-fLGo&X%qI){65tO59NQt_61X7yr(ckL|I zx`4w5DMe{)&6`odE{|}VCXut@8akz#7Guy@cRcFTO6k7@{8bF;9Tw2WB7ltkE22|= zj{wZm(3Sukxn`TFr0Mjsv+B?8{V1e5odgo*qg+b?~*D<_zZYU>LE@o0i=mjvAJ~5J2~e zaqN`#=D7cs||c*&lf`8^I3epB;<1QaQe#G`46w2 z&uO@6_Z?tK-SqChz#APkkmOk9LAQQkn*6}MaUS2Nw`@2~Ts1ia8rt6u&4mP)X?Q$> zG{>h@?J_;{MeAAq9LfniM=oZA%vN{G;mCB_!TtOdoyU8;R&Ugk3W+p~9~WP}ekTCw zOv%vuDE$-N1z4q~f?#NX|GjVL;SLxA3pX^*$qi*`iTnd%qb+{-!2fsfek2TgHVMhb z*Pn&Y>^FlnLs$7JUPA?k;iDOK8%|sE z5L;Se?H<4`D=rb%us7TFMmz=P8`C&Ne75CntNP4Ew`I7TOZpD`QeLxo0e+ULsVM z1`PhlrxrYU3*jKVUyhyY6h_QY++1fQHsU#iC|*7lxp$#+#4e*T^u@4cMrXPN%c|Ya zyF6XrcyF;3-%j&iYtl014Y2IEdE7uf;PE~>j24RhoRG1wVpJpn@qM1;s4^p~u`(`S zBuD49s-blqU6|u6q1qiu#f7lNFcA`;1>Z-QLRIqz3(TMVXJ3=6CKS?LS2oV?FX-$@ zNT6j__F1zYnSoT^*ffXbTd@vODI#*+`?e>)8%s>YvRq|$xwgpIw$0f+{EgP>YotCb z5+i(AySBzvWmUDMa85h6L@ZicO3e+W2G~Soi6jv{jVz+4`4~OZJ74$xoru&`4v8~P@K@wPIV&0NX%g%QU42jZS?$$mEP*8 zz-f>=N*4xUmzEwfXUjH|#Hduv#LP?0ng2X1WN^0A`@xKy;eDD<*=H^}-jz1=PPXR6dN}fmbwvD*Q-G?RJqndb&BGWwf+^ zTgJ@ooj`1ehcLsX4WcARQ@Cj@O#$)EEBs&T4MLyT^&Zf7a`Se(q>hFdC<_~iGJTsdTn88QBC56hG&GHzHV|cSHjT^tEvO6a`dL}&Nvd$FTR^^98BJruqx+!X|HIg zMNq8d$$0i7gfvcbh`%7%_r_CjwrsynVFm(jxl%8u$eOW7*7zaUxmxoA8m))9g|iwH z%nzkrsVT>;B{@MZXufwA%HZBM&x|ozmf2uMK){ElsyRwVI%DSNnP$(6Pwd9}k`*6; zw~=kmnJ09a!2AOkEX2mw3r8!|UJuZ#Q2mS(XQ#HisU(ov9(>ZqtqwYMTT2+BLykMQ zfN$On<66SK=R=Va7{I**Qj)u@IGD_wY(Z+{fR?_jqacIgJ%@7l!Y4h$pb!NVRSP>5 znB$S92VFQ4J1eG&#F4+$9wl#)*wAl531|s~96x6wx)#$EEjD~GZ;hBPs&|6wl*1vZ z6sydQ@#^()CvjDF8Hw*F6=nz$&Kx>!4w;v23dU$ckd0LwfDvVr?g7H7fDiu%8Jl(OFux zOX*!Ny&4h)BXl{m`??ral5Ym8$WAM--ruhoByzO$N<-@j`Cns)Pm)CCnqBi+mX3LM zT?#K#m>eIT0YS&}IEe%yuGi}c3E^FYPYut#`Joss%LG2!<8o9F z**ufAANLWa5_vim2@O$?#Vabsp}Rx&^YVv=LazludcaOo0jyQchmq_L9(H*-g63mw zIkNhKI*Ljn3zCe%q#oJdtH(B%o9T|X#2r8~LBDb?*S2h^20cvs(H74^@`BmeT;KuBP_b{4F$PIw2m8~XR}Y(W|d zuMaGec=!hmV7o38p3*%{C+n!{6U5FS`H#?{vg?y;FB_4)88oMVSiwWvP5lp4MWIQB`#~c zv`Uxh>Ct_0hip1$J@w|j7f*zE69)#Ldw*Z{+^VAJ75*GA16r~Bi<{DDgXuc<{^amL z@#$>cy9sl*_P!+G@vYIm=CWp&!gyNJHCDnRw(;VLOCp%%z05*P;dBq@W45QhYhGq2 znj&LL*R27ac%z%=7NMqVq|fiYv@6iV0U~+5dHK(w;hxa+aJ5FH^!Q`z|E`PaX#1DX z+=DMZ7)yM{pRmu9YX>nN+2e*c8+3hYtWMrW(u~bRcXFkG?Jd$h{Wkt5U*nSI`P{d4 zN|}R#m104sh+UT3iVH`i=%P3>;-B`(<%GvL6+NpgDm|MeWFXl6J6uY|+e_~egiBGs zshHuHnsOZJR}m9v%zyv(g2!b8+FngTYT5l{m9n<{FXx@N5;+k_8utz)t!0bm5t4Gh z0D4*M1R0=+R>LCNSi|i63y?HyaOgTL4T88G162m&KYjho6^q%${p{SkY3nFI&IwTCzb~Vd;bGrt@wvrc5 zM#SdoysgNY95}X99MadT%`Xk~swz=lNl3fcTYmTRpcy)=N5ox4qD-DYOhYL7VR_;D ztjjsB6dtmR+0e!unZVvzN!!=lQ+bCwR(SQcx*tR$-}i$8FXM>{^O$IN~ucEVpLJWgf3 zUj$~#JFzsJt0ZE!;dmE1!u~|EKy-P%2cN4`_waYu6Szlgy|ik1zjt~o#-ugq309e6OTHLV5tW#Owny} z)B;#3ugh*Ep{T^8c32=MGbO4lFh5t$AoWCEK99x^-U9y~bPxrv93kZ#M5xMFqpnua z-uyLG#gEPXwNLEZ484W?@Qi5PFjC<#B$Lwfjy~Uhu>|81;eZN%qA;gmL;?L*p$$ln zz{3iR5jXT7zs0{PE`hWLZRrG$dO+eK6l+jgW4!)T{Qnha<%qGxxH&^biRVB5}RjfmSNGQV=aU#Mz$J#nnp?XAm%a0a=DYkg?Zd3E|j@&otlDHpZoMf;9(+NE$6 z6gGW;2C^LM!M5X54lh)YSkfSuP$#XPewKtjK`mQN9$Wh(R7r0AZYHU>UF|phwdEAW z2kcBosT-pMrwAY-QQ@kriLk_2Ym}3`*Ay35O?B*ibPWZKh~W={lJl>@^eLJolbb*3*B&x?#zqpCYHFyHul1GB*^ zLZ@Md$>IX%7{4ASP!u@M5jIcl?OBu@Y*{)vAIiQ`GoM1u0z-pTfj?>cX$Ty{kV-SPY9{rJzHvAa z_kKgFCsKTWc737}-Sq*a+xJg0DZW3|^zrbO_TYfuYqIM|(+VJ=4p zNJL#7w#DHzcycp2JK0~}`C&o=mMZ>9aimEcC$A>`AvTQ+ZZaD(Sr4wTT%|`Hqgvrl zzR>qDv9c4lG4wjUxZFE!Vspo$-7UxAX}z4GrQ*4L24zRSrSW z$(tG^MI;Bl0c$V#Lj=Xwc*LHl*~nj;yO3Ywr!f&7aDqm}w2`31n;lX!5@#@GHy-WG zh_!KQLFZXe6f7|D=S;W))PWR<~^y_eFy@7A!~^(dB-tf$?l;-eIA=e$qR^!3}P zMsV_W+}9*86@!E-lhVlI4sjA0|MR2|B{@`r_ZviAx!4=&fIjd2x`yzm!y|rK#$Q*_ zFH&FbQpb0|o)c2^sS*AqNMtk9>5BWdjski?qYC4A$mTr38C0w&H zzf6vlG_enJ-~`%t0H0r%IqZiUe|7C1nW^v7eVKRd z+`hpJFJ0x_Kc*|A@AZ84m8Re1OFvVoW1BJdnq%4jGl0-aOt#~LSmLDgi0>ByMn3mz zZPtd|zSz`;=nr%Ue$~lPWYvji;DaF4;QaAlhKx3qt?d_}JutC5n&{-{9|jU4!c(v= zyP8)dogromYYD|R4rGvs))5D%yav`vNfOyV{|I$Ehw=}Hdtp0BpUG25kSi(J?|9bk z1`#1OUuK7C%I9mZ5DDr_x}ZWNIZ{iY?x>B?)3t1LRHojUgjMT5C@ z{Nk%=6NCP$v~OGEn|Vv3!8sJ8-%&J%9GjOCtKXK~9zHg(r*#zu5MADeEAE1aicdE7 zl(P8vv@FRb5=~CLO*&9ViNuSSixGm_xpZo6NP_%V6~oX5ZO_H%Pq0pGuui-@yA*zM z2wTe1?J~^s?67DH_=mHNGs?ovb4L#Jr>E87=Xdl#*=q-3cxQ?g$tL5cY+U^rS=}EQmsH6ZB5}wDH|qo%0o7HaD(1!&(`ho4}A1{8M0|-##U~~g4 z7t`OC%gY-~Q4ZkrgH|@sexS7Dmr=8Ea(99;0Al+4M@TQg@2Mz0-ax2VC@(!Fl5kg~ zhz&ulPh6lQgLpBPu}<2~txo7A=-*m+YIy571(Jf~alwHR%V;H%9^&meUR7A<7BZ8Y zILP5#7;U8<5`g$H0;xk(2Gkxq2Y0G!I~5Js7OZ>dKVcj8hy)#<8##p&$GeEsb=~UM zDMeP}C9d~fsHwvHQXgod2DA-1nzFkr(4krZD%Z3pdwsrj=<_EXK_E8wfcX4i9krRN zLAljNubkY_DvyWQ=xYYq+|W5de)Wp;XWBZNAXq5cZQjWjKaoM`s&DiHEEF>E+jXYy z1_zQG#vPjO8mh9ATK_qduG~#gsIj;)^z7mobBhaw67IKCbo6=^^3@R~WF$kZ=6Y&m zYzPO*Gg!tBPn_jQ*Jjllb$U$W(V*Dm zW|#WA6Sv>ZDVaRc4XUv=B-X>I&VLx0#47a02Sc`nyy<+!G(OwHY$w}-j$jf<^qrV5 zB)Xm3jNd>g7A|>Lf>8HkKrt-KVOW-3m2*BeNFp5!G4xdMn5aKH0?JcAHVKx7w77WPbq>hCSr|P)Mw@IN`a|2HU+0O@dvp5Nu5(*XFCqdP*%#Nc~5P3a}O1$u@Z>5L;06_}sws}(1t=On_ z_55tTcq;n7WGF|9PK{Ink8TIL?YujU{;sp%{gezlTH}Ij=iNYd2zMV_E zSD%k@^GkjlIQ-p#JXxe_LC>a1d9{hvC6Mcj$|wIOIg1C_cutwX&RoDc?v-UVv3N^A zfRiATXu`CFJDN@n4(#9Je+H6F%J6>cO zx-O_pcAE11Vizk!qK4mm#wwECGb0{$@ea`~@cgR<_wZbh+1@UIC=MXCZtXd!8ibVL zTJWQAX_wViQP5OFL#x6WxR~~sE8c(ng@OG58M(RP1F$geNPdu$D_DLJ>ert>K;+Ng zRa}pCcd$UaJ1DD5%lzjUQ8ph8twAXX#aGG)xWL^_v2%AXRiOX$n~$~Vzv5k;WPeJX zlxRt~S=YE}RO!8^JC-P&VZG{rdWhzw8-e|LAt%i5Mbp?lulEetyxy*85r3A}UL^|& zpARCZDByVKiGb7pBn!*5F>&!u|!V$YGunGON3ABsI>P(+L;x-H#EAfN(H)0XXmSY!CNZ99lp zTQoSDczN~9b-)hcZ=hX4CXVi~oDjX|h*rWl!=u;^2Z9qPURj zRB{W|&T`MR?9_A@1@0NT2Orh?hx$7sQVa~0#x9m%OLs+2KrsLB;qoMN(-9S$gcTgS;9V^aR4!HkAMptvT*V2fyV3cyVQw{ z2%>-uj@W9kYEu~yC&hx!1dZrSu8Q?ZU)a;R7C3Q~;*R27X;QAR{H9CxhwrPsKe9$U zyfiytgHszY46HiN2nrJnA4S3QD~~+Voi=4alGJpNj<)}8wmgl(5gObhtW&Vd!rO>G zf%mn&#_P!q1s!<>B%D(=&yOlYR&oFO<|DyQFEaKc;&&a=rklFso+1hp!I3&{`r%jl6uSSG!#aXC9(6yV!&%BBUy z0`90Z&Y<8$_T;ll-^IRfo`}n3-2B{2~=i+?o&LcJz zu4}m3ZC->Uef%Myu1?N{Bv=x#UUvMLBTk2D945oMidcBv=zQV3C3(!37*rffv20c; zh;UT&5;uZ4OCc)gtQC~fHdxAh`@$8Uikc}nJK~ZyUnM>nW7I07Y{(R!z+6`C_)K=> zqd~qXs>-VHwjE2V0Y_-^!w%Q(4wYgNg9amlF;+`R6Bmg*c9BbN*Ebws?Ntx~_U~W+^BE0A zr0#up!&pC~9%O#3AoE9Le$37~bdp)02s+JI>L^mnhxNWCuo3(MH)%o=NPCkoYKbZ6a+h@3=84HUAa!e9DRxR?5I_ z!(&mz(WikWIJxYO>p*EX?-60uBdzPM1)E(o{f11bwVHW!GP%UEpF8Gsm#JJzZm|&X z`9If@U;!7!I8{A9hO0ZGE6Ki)gWSikyN!tZ*j_)kFTNfiYvJD5&T~BTqm;LB@r3C428J6|%|R>&A_n`*zzaMD~pA z)e?p5nY|)JMj06?Gdn^>`Mp24^ZlN4zCZn;b54)P>5r@T=RL0L^?JT+kswtA%E*(% zd|@XpM}sCd5aRa1xJ7}DYJIrNjXd@#2+ttOQY9n76Wk;^Vd9eE;|_+^+^$Q7CAx;0rV=BU<*t~X zh#_BYj3YkmM5oDi?n68< ztB;3?zvkI#DEOijai6Ypa$IWvNUQgr9Bx7TIG~oPV}V)EbTMhDL;WOX*0YJ3^-PRL zCxP_?jdI0APuYP{z}yH!x_}!mxL#qN;kF=39@uArkI>x(BV7L{Q81o~%Vi!gCNy&@ zY`H1`^&<={C>b}A|9EDzkH7x@<_71&XSxD*BGcGU)A(7nk82R0)XOQ}kbQnF60xFN zTW|ezH!jgO>Veogx!Ps>g%%jgg)wEd=Pn%Iv|cAuDluq0Gvj-@xlnaMDT?sonGb5s zUQ@Cky~1iVqBp;hU4K;BOk17O*P!L>sr86jj6OkuRDkxdxtOxK#HW?EJ_eV-3CnuP z-?_ysw@&t&XejcTYkMuLa#^BV2mLwOTCUq9&U5$gxE)g{&-_rUFdx1r<>tShhk-- zeAZ&m)v+}pY3-n&oNj&Q)6s>aUQsFj@1@CZ?0)aYM1@R-8Y8KKJYB~r+GxYF$qt_V z=K9n+9|E3~=eiSGK!qUN!>Mm4n2m?9vyd>DP%GSmnmB;70RTJDaAPVlQ}WJ4V+>9? z%ql)U+4wB^Bn5X^z5Mu97ckpc|G@uH^kdUO^R+6-#J=vDRDLU8CQ`xS9i7A(dy$IAWV3t>UgG>_%E_W1B9TG12l7!=UEKWD zhmHxIDYNICH40aixbn>3_l{+C)RwR!r(1;LJ4!vsQQ4d=Zw^|j`NH#T)o@f+fbD_G z*P`S50E76PO!C#9gu%|zeHDnL5~5HVD_c;&K*C@ z=!>IZQiJk7UIzVupB3GmFflqJnC7KRU`om_Wz%4AQRedGUC}1Lsjo1OpFaGe%MGbD z_jL(=o1R(5RSQee`@yhViTn}9Jn*1a9c{)^LDyZ%(A8oc6{#eiyAV;VqbgdI-pox| z0$by8Vx#ASkzFq+t6QBqX6ac(;3$bSR+S_(eYrb4C@$U6J0_w5XE;==-^NV$Sq`KQN$K#i?^d zM^EsYbOX>b0r|gT;{Tybe#6>c*c?hMW4NA_Em@H-s{Bq?62I(5iq& z^;D*kP+-Dvm6;Fx(*9gM(JripjFEBcp(1kvnA4k5J&{0)=)-Q(JtZz&j`37z=+G^q zO>zMk4SRArOTAg}oNHK^3{9JXq7}e?XnJF80qm#WI1Nq)MJlp^ z^oU}{dbK;3i$_W$Li~1{w>G}~;SIyH!sRRzE77zS2Lq7YDyPh(@_ADA{0Z7Gv0Io>*T!j+k;<<>JM!ESUk&Ur&MIT zpO@&f=F=)qjg(GF6}vgA9&kn$Xa|^V`u*0MU&)BUBJgN70Dvzrfalh()RSzK?n$!Z zdfA)bwqU`Kj1Nir0pM$7j-fMj@7NZKvo^a>M+)x?1$8+-z8PavW$vD=H5ps`^Nz*a zLQovY|9I-_9}Wq9;a(^KKvx29+rPBeVA6Uswb+-gV}ktxG?C~Y#DcVuDv?J zi$js5x)1Y38^l(PA9$8zxjd{&p;3!#$`1h0jBl?YXa;zcHhVn3$DvwVHE`3bWP`TI z00j@v9Z`GPQUZs_RZM|?RwN=qOW2%mHY|_S0HD>MydC&O@`b}6d=vsEn>d_QW|H7y zd|co$dPIUFB&&IRXPk+kj61ac4vuP5h0QDNDeyd%_L-TaMZ9?ge794>M(kX8s1;)C3~oX|6^Q^%E3jt3;g$IJ7SrpyUQiSW9;9886+jO;h|xoGd`kQ; zMiXEYfD%ZBP0NkU@a$5PX)u@jM8se|#lkQr_0qzu`J?)3H<*+3gMl40QH@2c7w6Wx)y$P^H* zk-Vjw8SH)*^o$tqfFPz%gD2q)PLR|4{DasDP#k$soKrPtDloJO&~pnyj1Xg31b#S;v~Pvj{@^nM*vx{WN@bMyt+@1|)SMjLtdt5hKQjk4RPs9*BNO|2ia`4dleHGCOz2jzW6Ubov5aI@p&l3wWF}a-K_t%b*FU< zp;h{BD|t&W!y_*2^TR!Qdo$a9nxi+>lh>*DhZa`0t;ypO&(M-;YCOnd)7EPB{PwX? zn^Z+0=GWEUd-s2PUr^Ixs@iz~U9`a<@brteniIG>`T&iYKR5z0)dJ-M(1rhkssD}c zj^}W*+)v;m5-(S#7?0OXmIkAVN2?d>DI_|9N1Fh8*8X7Hl3;RJ3ZhJc$LT0~*K29b*l)3WmP+5YHkFdZf2ZZ@~gS%4^sig86BENAE3CAs2Un`(u+b0+Gjvux#c|_Li z=yRq>T<4o~SrC^ic`~yGc4FZ!+o8)|Q`pxcD9dknVR(zPMi@dOWlTqg%&+^lw@Utg z$oJhk%F63U;}6o_JB`>5APM3i6*7vbfuB>OL!5vG(#{0}Hrl!)Tmfto!|wh|WC~!8 zKw5;b1;{d(-T%lz&VWDh^dl4czd*{YgAHZ``%l}K$?x}4l>)YAK%HfG!pHMzMgzx} zVZH^)n}gW{5GU)>f$uN_aE2mi9USAH-Pz?(D`t`^Gp^u`yw_dtZ}!NmXGSMYus&@& zbIbT)xwLKJ#nsAQxDgmKu{d>sUhu5#Pr%@k+9X1`?Qb11W{6>$<8)C7v1_X;Jh z?R>63C9x-2qnkRD)PbHFPJcI2L0iCjUH;?dWZiK;V_GCJ<^3P;7lv;gskOghmt=Q# zXW|`Nx(*RQ%J7`28DAV*?Sd)C_}%(DXDABp>VowMwmz&=dz7FG2qzbBX8{eEy8~Pg zg3;XcMkBrczgaN8Ct>Qs)?`KKRoa|rTb0kRGtWK-Lo&%6%#h4N4$*QT@=(G`nM`jR zMsE1+&8|)Uw~)iVd{4I&mV#|*6nY0c`I&Mg&J5bkSgK2v(uPRg8fL(3YS%|aE4qGt zOH>vCA85~Nc(K+U+=5$gGmv^2XZ3S>?eH1&NnD>Xv1vx0*so*4p4GNk___)ErtONQ7 zAJ`BfrSd=EDZs3&3g9XCy6v#kgA1>+LJ7ry?dA-I@WK`Y_m)O)qg!TM&>i^WjV9DW zf&#->-x4CgLsbb=`3aWWddcE?i zp+);!V17nHN#hs)rPi#+E!)BT^PFFvLCt7t?P3e^xywfBdP79H&cqi}9y90LYIM1r zE&SP*?wJwM)X6}|<^47&kA7TG?p6B`$)?85Zwyv~L)Y7d_VvFH;qa5F`MPfJ;OM^H zrkp#Dxx?B-OW*YifB$Zr6IfRCpfaaEk-@UE1=;7Ijfoa;aP@)?Q!sY@&!W%0vsaCf=dvGNG|(rlD+rR1_Y%1zVc!!j7-Es1+Pu| z!9ffC5g|`E^JTqh*@^PT_+BNuWr-8`ole6A+x-P1HSWN~XQAtZYP9b&YzRP&;u#e$XjHC_3h&iuT6ABlgTGwDDe(iNF4uUb+a+TAe7egzd!p2n z34P8Ya=sgM;mw|Ch(v!7l#0lnITnBvku8_`A9}qAp8|DI1wV3EPw78_P6}XhfDxUCqpHHc z_IF1wz^4ZLl8Y|f!wdPp7%b@1JXP22Y-{8IGLXG>o9WiWOH>})pSnb|qjiU|0s??YS(mho4SI{c>TGdSQe!^~FpNv)A4yDxkG%NLm`{ve{wB=T3@C4@z z*02JXx!3hei&}V9nVplhY|{RnNQZ13gJv=M<5a_l%zB>SX3Hj%t7h{S+)$1(2U{YbUz#iqjIU}u(v$HR|JhfA$Bk2`Q zt{Sdh@4$5~7m```e*Vz4+P<9DS!9(eQdu$9_z^Fw8Q|@hrA-Aq5qn#4q%+#GHC6Zp z@AK61|crFdT5vQLS5W`#2B=G7JCRPFl*2Z>I{^DThh-jq9xRkVC zewWCz%L^|PdT~myMZu7+QOcL9-ud_O^Z)qg%Rhw+fpSQJa>&Y@vhwsD0WjY~9$djd z!mV8-fYcgqwy z4jpp{l!0dC973FB;Bfc&PU{cJstdp7NHs*1ML7n3%=Pl2Cc~q*EHVVIS|6;ss@|H| zNl*R~=sr-Tx*+p0dx?y|q#d*$Z2Zm28GG%d2y~Ixk*w>uj;YHnXH5*WKb~<6e#0tn zs@qc2FIjqsy}Tfw2CJFjnncA{5|)&#yA*T7;te`JTM%89NAWP*6|A5vkKt2(ndf1x z(j&|2Uvo=LKKrJU+Abdrr*Iid!$b!aZ%JkdcY)j4%Q-9hV`Y{A!LG6^zh*kY?aT}p z+|HO8vcT{TTL2VLTI!SndN|sG5xW2y67HU`;{g^Oh4O-ecK`C-fwut^8)XK4dirG@ zXw+_bJjLMfam<|9WhuP&&)g7w?!_~1K!bUR%Kw%5esKLw6KDads+@F3Z4FaQ@0I3A zQw)mA%&R?tMOLp;|FWNIkV_w!&(Fnfe?&@$c)eMr{6tZ~K3@CPS&AmOUjN}GX8qit zb#~^3wg)tNaRypS@oeK$`7hQO(9-soiq6x-=ltjjPs%yKa;Ntv@Ry=SBqW zi+EYNO}=$p^o4LRxPf*^(E>f-Q#pQrEYee&X4z-O-FRD*!!=RXiO51FZFL1e7iE8L z$vww?N*eNeb1qW#j@enZx?5YgS>1oQPe9}IQ@dNPphp21AnpP-aMWMcf&V%=JK{8h z=OF0E1b}|S--l7I>@V?}J8IUCb{|Sb%ZNm6Nk$FI_l`K?9G|N!D zQ*sXbcGcE?ft-pH{5`Bh+NpbxwvX~on6edPdZ$z74i@=OcfJLcL+WB@rH(02bCCu|lB1?h7Ulz|jQs zTe?8C@V^{_iG*bF*-D#8!rP*n1-1F2(d(+%kUw$mDds(HLj_LCU5po4L#SSmkVkem zhZg{?(=8@7@u@q$Gb)Yy(SCv*em|2^5o2jG4mE^V4_`hDCnEBV*mG1^TIl z23`UnM@A$%DLuvKpkL5@C(2_-PmZPhy*)=o$(VDVh5|7vOKUH}laHsb>Pw;1A#@wH z`n`Bpiatu{(skIa<wNge?yZuWFLS*O8| z<2yhyX^6P6j5cJ5yaY-Eu2@*6CZ~LJ>M(aSQUT0t;DEdAFQ9lsQ_l}{w@|`-3P82w z0!Q+BqWS*&yCQs=Ky?7-rF=>VBpev$UBI`Bu~ye4HiE66GJ;Ksv6IIwKs8HxR{H|c z>RB20k>m+oTIGG!V%@!qzV_yBI?B}4Z_9SSv^IU5eh@|K;z}{xb!AXTL|n33J=-U! z=Yhty?YuM*{&;gm7(c=N>TNw==l3li)GnXLE(t+~(&72tu7s&dl5M)oD=sYEZUX zlwR{W-_&P{+|GHd=!IgLDMGQ`OofthIo66hHG$!gDtNX(^VolXJApQUL#|ss`;J$ZfS~0Wi<^n^2N*ubPxEV_m6igvsXB?()~q_*TdUB!h z)`M_^f(uuL;njDG0 zTL;Gp)i~2VqjTW?6*YMETj}VdUb~oUWBsk>LXnx&9w0ZslOH$|Yb7mSTFWK`Jrl<5 z*`h`~U7^9}R-k7swdDTM**mqqn7CZ@>-giZq#Z+NuECGo6wyndG@M{Do;o|cp#XCS zjeHDB1*pH_NDqk8;OYVQvO|Ms5u|nb=j^ceds0ewV+^1AzGGG#&=UfgGn71$6P@?z zTw=r7G?6Uy@1Db%o|~9dV`#<-AU(VFjK%ypbK6mFJCqN%&joEF)bbzpvkiZU46z4# z7YCqsDJC3d(fgg3pO!D0k9_!k)(MeXs8OX?(~>@-mYLc0+PM!x{Gou{#dZ!guVJMw zTB6_{RbQs5thPlP-SD`fJ#q{Y4#|R${*!1%t*#8>N9Dj*$FK^IAJr6$n^}3QpFj8g zB1=4A7+r^`#UKOf68>@F89bZ%-W{K>OyogR*dT|Zd@2<}JVV2=Q{6vsPY(pb3yBmE zaYfkul@fdJZ%grf(u>#P(#rdAr0RY!1+Wv7%aUodv*|(XFW>iBwFDZMY)pEEfh>Gpl=qm-RS?FHs4QTa;elQy~of&Ib zYp`quXaint`vt!AkJ=-Q2L$7?J@;9TE)UmJg)(Wh!LH%04{#2@4EokiT&nZo`50x4 zz*-()9`+22q+xTe?-~9w4L~CNgxf_2J@>s5Laqt@nB=g@2>`eMdU8&1CB5jAA=^2+ zf1C~=6h$Hc&d+o!_6w*85va(iO?pqrsS0un#W5bxq!j_+XeSR`4QjOmjER5yX{**{S{* z6X@ZxI?$tB=jI>yxIyq)M$#XF=MI8F=!m4LDs$&$h?2=M_T$C+{5m%d2mXz zdF)5xEp_@$Z*9*&Nw-XP0f(4rkMr^j>3ZwIOIT0{R-5~Z@!Ve_Sf0Yq*CaMBM~(mC zdO!opbZXk9pO=r1m%s_ifX^1;Zp-J21ep*2i5Z558eqa|W{o_9cL;Pawzh5L1g{zK z0l{#n>RZ%_%>n{G0O9w(m#y=5@->kG`zL%(!M&q78t`!n^U)R#YI-U4{Jr+Hsk>i+ zR;WDo-h+%ZT)IT_C1=as`~8)M%FJN0xMc85|6|kvz2sXB)~A%a>ltZ_NpI_4`3*Q{ zkh#C0LlS#)>I;y_dv`O&rPvD4O%{%28j4vItTX_ATCP+MJxmVt@MmJJGVf8QaWJ3v z-oIq@%IhgZXtu?6SaR{0Ahrue2Gd7m?SA$aNm=^uq-`r7>jSjZ)%Y>6j!6Erj_kp; z9e|WU7$VdxyrGGCR72|ss>@Vj1p|lmmgIG#4Mt*cWhVqO??;4gxPWB~t)u&x{N+1! z>19N*TydXXpWjvV5XZ8;+`7Id$JiFWZjn>qTT3uohkjx63=l;}pT`iZ)Vkj9w|}*# zR?XBTHqfnN;4xWZ_O5(fiD~98Gs2n&0bNpu#=px;lW~j!?@fqrT&`Jqo_hUp z18nP?QY!CL(<%Ak<$x`oLp4dvWaFiIu~qcU{Q`V4jb>5~v*neQxL*J4GoKvSGL+h+ zf*}DF5PXu$YG5WlZ@F zug}UJ4pj?8Y=S{YZlVr!K?i-AZL=PtdM%s5;XBSKs?fXfxRN>-7YVN#-!gat`Z7~N z3DszCd(a34nUNAN!@2A|ER)Y5(rJgLtF=hBZB)$I9F0xR36AbrEV+$y*nb8wthXruCIfHnpzdj@v0zzz$u8 z3h2)H$xye9<4ZF>ol~Av8>W%+_J606Lzwz;?68%*Au3Zi4MYD8lvt}!&W@`gj^aJDR&X&6wiW%+ZPE#2A(m!k}U}e2lWt6J@fSq zARRJ**q}7vKr5>VNBtK#N2&Mp9vd8&M zsf zm1_!Api%}Y19_(`gEBhpRF-h=M`NHtX7j#zSMnH-Cc&f6KYjQ-yZ`;c6lUqfSbT^P z#z8uGVHz+vr=j#4Xi1$ZjtTp#GN&G4S|$d3@=C@6jtE;m8@P+D+!JT3jvzld_h3WU1FLirOtI@Dwtz%=mlHS7zm#Kxyj zi-j$XcOouW%nYyGecr{q^t$6wX;(I!`?4C+Il5-#9wBjQd^etv^K_vZz>DMdA^mz6 zp>2CGFV`cZkLj@wgTH?6huV_;mOU+*l3e90Y>Q4+!%x{tY5`X6$20(2m2=d>gD)=m z76E*3x~O@^#Dcu6b~4A?EpeSkl#~1KGz#%$lp!;d*ya#L=PS%n=2{{WH7ZdT839Ci ze?H3mK=c3{G|&ZZfD_FZdiVZI&?-52i)E`G=eB5c4-hB-dD$bdToT$${vS%rT;sf5RL9eXClbL0)#zi~RM* zpHdE7BFWT#>OaO@b_4o}N_)ePl(da%G`*1c&Jm@IsrN0=>(_CLY-MU4UkHx@LZMt) zU5l(hBn32a{s!2x(oiJmZkwcZt6t{aMW46@PXF%cz6%^}?-jtrS=O3_LTLJA;(QNG zoP%)k8=@bAlKj#42GV<796TJoq=W!c&ISSE9WkuEf9hJNgfnCmSDzd@X$W3s>%Plu z0BtuQcn54ZfV2m2^v4Gvo)9L4d&#gMlLL<|)vg%_wfo5tZ^E3KLB9NHtAVmq+9( zkaSf$O6xK&WhJ9CIWtez`bPtE!1FetX1+8d_t-fYqL6-36lO!oYYAWoZa zf3wS}^ZeC$!gR||!Fl)HQ^w8*Mn?1(>VB)3`MKIb3m7vb5T$6zXujm>d@dpTJZQv8 z@qbHzHs;4wC=C)WFFc5hUhRne0 zj1mUv?zUiZ`p+(~UAH)J-nIievxE?94g4g;ooF)}!tAM30kAk=1wikKCBg7e0Q%H= zg{={?j2b6#3m;c>{t%F$eN@z~*qQCvC6vyj50|t7Xc1DkMf|5z_DaOzF#uDepY( zZ#AumcrOAtd(*(?=HG<$d+GjI_RXi2De{9Ot;x4?_yxUnLbtAS1%p{Lpj`EenAaR1 zH(nzLQABRP@r->VcTd0hV4=ZIYzI;nJY7Ac1qA+~8UhEpixWz~4&>+90q3@rD*_Y7 z2Uu<}9{~qPK3CA|1;+5de%HzY=4lK1y+CF!pooGat>hJzwZ-|BZ|E!VgRUpP!~fvO zi2rn-K%qerDb$q)*<6ZV02ukNzn%d}7Y6#W+gPjC0iXbd{3a-MWdI`}iF5TT*~gR7FIn3+T~o^LvI4DO*IG7^jn{~_834`Fa9POzh{fZ0Xm z{8!SaZgwYd$a7klnjn>aKJ^p%co^_qx+*2_9*-XH1=LOK?<$Y8g0z%A73?60w(%a(!mmrO)D&rGzS+ZppqH>Oj|VuzpJf-3pQ4_cVGq3fG4ji_>0Q%w z#)@pDZ$}HO@|Lu18@=l7b-n#Zb>|>xJMgTLPp2Fo*8ymIDgi zYys9yJT5k-gTx`NF!6LixI8O z^+p%yjUe*lk_x`apvuKd5x3su_4EEV_i3dU4+U)kED$fq6GYdHcJp_v!H3YjD?f1l ze)g_Dj*uaJFpG_6CTLvp?igXC?{sO4cAD_Lz9S*cdpivBL4u%MKFU;iq zpB?oC3i^jQ6*rRwHF?=8{@U&E5>CFQF|7){5GL0% zO+KGgd+FgmFSpyyWR+_JIr_D}Byoe(_1inC+@`a?bW*y%-g69LhEet?T3$mQ;+-t_?PdJTU zv-uB0o`%d5sqBnp3qLaEF)4?A21iyh_6p9AMdRAhbGMz}ZoyuCi%{O4U%A3FK?|Ui zPCA0I3&LD4_326_Du2xNJumsxsH@igGH7wy^}%CB74^Ql8R7E>0Uc65xQ<~4RjF!^ ziyBIuc%K*=nik>`TJU_zqNW^#yC?UX*I+ zDLDv5sqT%z=LhGhOlqsL8%HUNczF5aj11Hg;L0W^;UH1zb8Z)j+n z{Lj9tkt0bkTVXSbt29d{Qb+`SeJwc4_1gpjqUh(JRH-FvLHLBsyrmsj;n*nl- zE=6`ro1a&C=j&&cv*zdY;#QcP^omQJ*lH};hV_dC4hkfUQ^-}--uFFm8l(K3G2S97 zz>o}sWW+!V;|2Z_eHU*$rkn0v7-ssOdzVJTRby;H&iK*f4S-vlwk8=9G(WjZ)nPVY zm%^}jpfZ2NRe`M+hOh&03WT$u6ei~p?Q(L*{Cm|*1pk2G>3GOCK5M&sdIsS6@3D|^ z0#64j4Zp3!pqCFacfBj=^pNZyLeFII4ph9wuj{xyJ+yl9(qX#{wNT=ecv?j=aau-^ zNI{Z@4UuIEz9oZVAa6Z+33p@D#)pCnP=o;m#W}7BPnmA`%VpvN!NzY9!~@#3xT|Wf zO;@$lEZs`7TgHIxyx4M$%uI(Zre*)O)rX7@r*orNcB=usK{scgSTWiSkyc&Jl&w#a z8_u5eRhP`1{z2ec2VJKe_F%$iNl&uXt7hByCElEiBRl=xfLTbVPJuyl1cax7HaQA_ zDLia}6u}e9W`gwS;3LB@_^sn?FM}i`Bb>N9tl$eH$CT?^1}5)e=D)dwP$Z@+xsvY^ z9}U)}i7f@OQlh79Zx>e(TmsDTbK;ilI#C|Ln7(Hr4u$FFce@1E6q6rGQ4?tkahxEI#z$FCZQypWgd@oCik1t3>NZ1k;KkGN2}Z9KXRm9N|b{ z`4)iLfxNx{*>ooOwe%rHM%VmFN*qMOyfjw{CQX~c{{_om(M`}Z55E}V$3tZuL%;u+ zVf2jtnF0QiU>DU`$1bU~*Bwri=OQ&yM|6ur_3=v{kYy`> z_9w)DdsPyqe|&DanMU-->~jhliT#$f9xean*QDPU+!8|%@`@;1QFSd1r4ixOYv8&drUjgRfWpB!p998kG zw?#`)@Xqtz2k;L`!LQZ$^`#;Q8Y>k#sFHb5S}&}#Z#~E$dt&Xku*27z&*?|{Np;yRDBz&gNK`}n#(d(|;8g=u4^6kgQ zw9NO5EcA>1aOMY<=wF<4NS@WWqMjChxQ@75fkl3i;@4LncXb;@b9nW*ughDZC+j+Z zxDcP1uycJ-{NB`SH03%n)HVy*5>D`122%BueHJu{i2Qtf3&T0P?D9}GF$|pHf3^W> zXefhpC>Ml)wyKs6RF3`=5?-03S&zv5k3U0n&pi&`j9rgIg;=S~hmr3PSsZxqj8auP zH#T+BZ(iNMSB*{mCW)*LJ;=YBZ`u%QPm_4Ac#R z^x0p%C@jv=PJ`#gTw$i+3^J>2Dd!7Inh3*ITIm=232ZPXe0SP^dc%+KQ*Q@c(N^xT&fQ@WdV-Uf_)? zBntTu|7oy?#5<=7R}~ag`801SfW{k!W6%suZ^NNYyLZoPMD%M`GP|MJMS7HAN!J+Q}FO^_1>#;`bTSwJ3Y@x*ssNE z=I{I<9@@oG$A{0XP6H;i;7Zt4bCVpU{4V6(yosw|?NB&1ZF3U>mYIoleA_#1;`*>&tfD{3b1T}u! z#nwv(BMge&> zTmVRTfB^BY&Lq^=23KlG^L2E|BLPIU;f31a6LptD%x7Z%aftcs+!!ztfSx@7#zkA^ zpS@O@HVKZJgw{I?;ua*ZkU+mzj@I80H)-j4CN`5f3Z8OKMA-?mzkH$9bX7IzllfPr z_Xb?qwOftLEW78~-N5WNl4H^fb8mBUobIv6Ua?|M=Y#ARA~o`PpL2zF_it zH6HPh46RLaHvFyxy~JUq=eLAe`OC4ROKXxc4e!>defVv&i4rp83~8K`knY^R%%n}y zDqp$lsgwr{EYqG<=|e^k3QFiAIrYkIdN0nII&Gozsr2I&{a%zUA&8^3$`exoU$4%sUT>4Y zKlaD_mNo}_^KtYJ*u*Jw?Qh{2%O|_BH;*IjP>uT3lQ5W0f=0Qt#0iTNmCi`4NGkj zTOwDR8&C8oZhKG<65}fhp;GQAh=ZCj%Va(sCoFL#JSdG=3V!bn*oZRQMi5bl?(2Nxi?3> zyq;$Cyj0}Uw5UT(>N*^BQ*X-pG<}t+Y(@{vu4y*1EApo_^{n-eRGi1B;$~2Jxtss< zqMyZxCyPQMQ)l#=?ABsD`MsRGLv4FGc#o*Bcaq{CtaP@Wk(fC?29(F!xi>6Yu=e<3 zAjusED9fpW0UH+&Xd2}O{E(iGXcsF0{jvfEWRM+bi*^N}1{lG>-+rWyiD1>QQh*yG zG(ip$*>s_Krp%r_CVtWzLhbwlTCwSjdoJE|CvZ@EWp5_64I}DW%J@m|b4HaxYaC36 z@4u`h@3*t5y|BKNPA_EOgG-mB5v2dMNbc)qSN6CXC$m1Ax`~*B$u*Bs$+y~9o?cy? zLRh6KpsDZgc@E_+2_#EOlu&Eia^Q2B3dP4W%JAc}gd<wV&oN@`#$g{_u-1PQj0&X% zfpYz^O3Guhw<$NM3by1Sf58D+=MFNfPI-olmj0N6O^uMPa2@zGZD4{ufQ>vj0FcFEn3 z*s{6G$M9VWB13GtNAh3!SJ$mvG7{|am>a67$SGSJO3K|94Wc4k{7`5}T5feiSJO%# zgnW2_%-a*qVWNyn7<{ ze~$zl+s-n{mA>(lnFvRSlb77UIiJ>DqA4TMX?{4^US+~x#j=*R^kpw!%HO;rtkIr8 zX39DmkqVTWigfMalG{Jq`dQvqbJlR{>KIhMU;@%#W%dgrRG&8x*##B?^%282>C(7n zvx}~$vZPgVei)u0J=D(_XZ;jeGZl5EA_nC9VnO1nLzq`z`6HEA&;QG>=h12O<6k7jk_(?4n0#{5yBNFS<9f$V8e{b z_wggolAbw6Ll0s%>pHY=Ks?1Ct`blNz^UjFJ1@}W_6PbpuqlD6VN5XqA^}bU==KHH z79^X-?Br@SM^Q_qGYyygU$M^_M<}wX+%CG|(;j0Lf&f6@eo;H~Pl5 zT{wCA7q#_0O@V+KL9_qBlj~7t1JD=b+@oKXVP)6|!?$`?o|l&pv_qzPuZ6_zZ1a_K z--p|6Zv_uiOzX%p9zF{@9)YI8b9WQh!J-0`7Ay(zQ@%qjMML1q_5k=E1Tfly|FQxc zFfT9`K2c740KwD0?-=n6%kZYnEMn-A!5*D2O0r)MJ*S_2wyu|b${(^QFmP~fX=CYE zS595BMW(&TFqP(W);q#3#DmH44~uTMEk_l%yO5s6<|>b4K$UlSW>#RI zOHQWL-BfH&-m}$NEgHI+9IIv^KTG&HTt(yZBkGY2>h#4YMiU+D_la?E2RIKK@CgCYIX*3CCMBfCg&h{G0JuVdrB|NYyUBMQz$6P_Se0!$5yZ(e#9b1qGZ? zCt|0++u*?Y!Hx)wuT-uT(TcmzUdaJLh>I9$0EqD7-9?q-fjh@PJ!N90BIM}9sc?4h zi(Y5)HAa0|A|TOaZqn?Ik zl&T7SXNJi!KMt8mZY#eJXg+dy%(b-JR{MQDipa`f zvY!E5EsIv;l5*z-0V7Kho^`b~TLtG;TfsB;gsb4IgKqHI=dTLMN*=c^fG&dzuG^2Z z;-R5>pajC;=WmV0A7iy3+tB~SYC(_f%S@*f5RhhF;4U`q0?Icrh>3sIFznrI#dU}% z4h%G0URO?VT4trOV021ij0wG&-I5!$i4OX9gIY+atQVk?KqB+uA{GbJU1E!{PCxB!!-qH|do6T}2L$uY!xd!6on((!3p-3u*y*bWi;Xy=)PD zwl=m%0VNC@2?$jG<)eZ6HvfKP{_&7-L8H6?BNOHU16)5r0b6%_6h_4fX4C&A*{@}) zxaX|U&qP-6sh^qpi!Ffvg{ydos!{_c&a^b}@BpxUFM^Rh6)eobvI^TZP$0)$=Z?g|?3BRO%>H2%Fkogl6V}g)=K{zH^Be&)18?m#NrAzNYnW z)@zP}^iq4KewrJdH@w3_4GqPJ_fe6RbYwasN&5}x8mEMJ8$_?t_hyYA@WN^}7O}~f z{ELG$wal^@k(_%NMAvJkzY$$ySTaDUh`8gL_UXplar_-tSss$l`^313aYmrNir_~| z@{~2_?&al;5WxJ(4{|s#FHL?xyaU(Slivjfa)*CcnE?D*r~7bF-oQ=mY6}A(J|7rn z8m9T*cj^ZAkzNM`CJ?t~l~EG(hVpW64RuCvmZVrrEhaBzAGCmESR%7LpWncn6eT}` zH8@(m_r9EeF3n=>0^a$28Cx6Nslc7CYRo&8?Ik4}TJ3RyxnsN6ltCrJ)Xx`W!ac}T zR59zT^UhwrEeBH>&H5-v-&ohcc=3|WdcITR*nWYO=NLB^>TO9ypUpM97&+jFE9-{| zh513uCaRBwTV^>AMFmNcKWe5LsyoEl3xo7iy^>*UJkm3a^hf+8gBN7^j_?x z?`CX#>_|;;j6e_fQ$J`MM|(KhLqJLY<}J((w;$@A-F#K%tDg0h=bk^Q8I|X~?m`MP zHOLV6xTv-5{uTsA#^)^)b=Z6fdPNRYdKn!_G)vKGNUQ>ICE2?`YW-`)CZcDib5x{w zf@|UWo7XWLN#-|L(``DZ;`L>QX=Z4K#~YHKY;1vc^d)wRk*xlW`oUc>CbwR>G>JHg zC&~3QW_&Lz>Ag4%&~!YFCFSM>VsRf5N_Z%n`NmtG7|8kKQhodpa^^0dX$&}XvGlIlA1)-&`cqaq zW&HsLnhPHQYXe&Z&{zX|lBbs^TmS|xCXiJL#s_I0fL#u#A)vb*W)AI}Qv&jefJzfXcDx6%iT{J zAuIDMS}s?gXfw)T@iR)grIAC!W>+xsR@>x*D?TZS&o^_vdVDu>2eqz_m1N`K3f8(J zRB=Iyze_bjX7qW(cmvJ5JYA*2&#LEh^fGJwrd&RBCXH#^gwduj9u{V=kE}fN%b_%G zgVFwk>EL)Zo(5|~D%H8W^ zhz4zM;TUvE(owQ8B*MOO4<3U0E7OT?p;X6_XtKsaE(6K}uyVOX_5@01j(g)Qj5WAh zpQ}b^uc8s;_Bisj$265rR24Wtbc!Gq|BL&n)4lc_Q?>?lCfQ1Lea4&+1dR{$ON#AR$~S4>@0&URA-}TK1EB1P^TQ(a z03RR;+AQaRtl)>?hlLujIiJ5WIxaBGtwO@|)@+c`@oe$94C>Z)UoQ1A@s6wp1%X5i zr&__0aI~M7BN~Lo{|EZT=Z)|HPLh*gFd$(7T{MHTj@nxM(AJ#1Lnox|^()k28t>_~=Dh0Z#lI(#bq}BlWE=H$ z&&gHXg|9~y)>;$YAEdfVq_a~>`HL=HO}vPK+mdvCsL36?#IqDtl>6$|KK;r?*K^QS z5+~Oz+0ee4KG2gm;OX<)q?&!5;8T;Pz&@{AhB6$6w=ORhW#)*&_(3Wd`qkEh1D2nW zn$!+!gAHo1eA2iNt1IW?OXWp_8$)S>JhvAvwK?96q&icbNFJ^rRteC_|N1ACC;>gj|Dk20p|=Irwm`Ak=o{|mL2%NBtvtk(_=s6S=cieptd)DiDdYbECGu4QaV@S6d8`{B9?bs>)s+0~BS ze`)jqoSnI$w*(|1II0s`yNhlW&~}^=jlB76*pJCjQkF@buswTwkkH$`mrSqHx-1LX z?YvOg)uQOvW%yn`x^%Syk#r5jF27+NseUFavpH+ETT~|+*%U#8ke>Z=!{^pj5~bRS zn1a%q0#3Hyhs4O^%LCp}1|r8>0_;KFXfElHMy|lCvi^R?U-9=6I@h(JjB^Qw4P+k6 z)k*Fyf^SQ~p!??&fW@xvn&*0FnTg=o03T?jX6)jjuFW6YSy~8SQPTzrS#1w@ki4wz zCw%e+h5lt<08FN{+ss#}W`KdAob4_E5JAX<$Q4ygzWF~AaifBEi1gk-k7S2itE(5uy0y$@6Obue7!;*k;4@Yqa0DAR7ykB8>(wE@!HS zRp$rD0GaGtj7&Dd%aoqAwxK4pqTx$9qglz?W0!my4TG&k$MuOX8pH7BgT)Z399|eB zW^*Zfbx5_0PZ8Jsql!G!34)NT~Vt@|v zRD9JREgwL(?;wG)bA_77022U=eNcNE1v}vqK^yW-Xsm&1lZ=Ll3lmN&Q)BK8pT4otN7$d?j1 z0LN913P1>7)#+jxG{LS94w`(YFn!};-Mz2h-*pBaA6@5mKPPorr}9dkk{-1ZO`~() z_N5P8%okD4Tt?N&bt&9xM9Dhy_xnpN3clPw@E?>*6S2Dr+WO{w5#G6ue$LbqIG5rl zqQuboCPM7gRpA|VKX%GId0-CO>1VQ@kG_Paj3b_Gk4NV^+d;Is?5bUpDt3*Cmj=l< z`bQz)Q9X+1aG})y_;?uHr1x;$f1kD63+V<05d}Yg%U=HYs0N2P0zh;A{Vah#&r?r0 zCvN~Ka!12Kz>>f%cRM}MA^hJH4(WO(edWrG(OFxCMG%~t01eT&{D;V);M8;sodQ6x zFfN)dQQ)E(gIqN9PIULSTkO~LJe$?G@Bh3?V{_3AsI^7QjM1+zR<`3waEdqiEvnf* zdsVumTg&+XVD@0{H`2{rBH>vsKkSy)ZT&jEpCFLqwUxbXYxFR0K z3V0HjIfeSSCu|t4UaKhj_Z^5oyp(4)9Zge99&U$4rR>bOI?M#?q!;?p)V`owj_$3D z$+d9ric7qhorq*+OSkE1WI&SwIA@_x&49Sli69CFa8vE~E>#A_n0Vs5Rei{k&a>L2Bo{Z8DMCb zp-U`Ux=U0*kd_81B@~eo5$TXtLIng-kayjKd+UDw_qrtg9CYA|t9M*CxlQPb~-pjCESjm;Wyc$h|rC!Bu)aL7wb-_Ya zTV-%5hE3JNf}iE0s+!vNk<_Tb-e_(%>D=J$FDhvLYK2<$z@ZY^Q|)h?1vB+q+>9OZ zh70B1PgG5*eq!Oh7_yB;>@Q|NlhG&`ec{Qal{Q*+x}dnn#JyIxWh+>A+jNX*7Pq7F z4jpcr1aDt{HG?{g->xUu09}XJIo@oE0HUiq8U+C9A z{O66uk^omp zOHDdJb3tI*gLH`9%?Q3_Qd)~&jU=Cd_<(RuADOB}8T_(RMB(%Iv=38*PXkNXD(+Xj z2iPiX;6ffXQU)C~++$rH;oawPcUexRcNE@DD!|RBd9ZR`4*!HaYZKv)QzLhvrLjrp z7)dJj%k6cGgE^WJfh(5~d{QoT-GhU;EUT_~AP?9&6VG<`_Td5ucLaIBKe4`CTeVC) zyl@X3G=9{vR$zreQql2~6AzR%$c_P5A-FBl4z#`0KCB(GhI}((jNEEdojsgh4WMM;{EQ8G=s%MHY}d*qT0L zx%kr~cBAB~dc?_-%ywFWnVj2vEmr)Q2AN3vW!62(rvsMonF~NA>qc&()@%9}>)n@{ z-RH9x&~DVvXvhv^_N0S=fAUGSX&E5y0A1QqpJF`+UM;CY3_cFc4(yvAAnS@!5 zf%0!7y2-{q(+zDj3~Z@Cwu?&A6wRfNX>U!iQI!qVpD5Iovf6y)AJ`8l_$fe)oxy6DP8vqRe>{?i9_umvuge-|G7xF-0>$sW^e zu}7io0WQG(_4JcDw}o0PD>DuDTz=ZoSMyh6c=o!K?Y&&opy!1h zc6B~rj{6>dGMW5ZI}&BYKBm5q?e?gMQn&YH4wBi^vxCH*s; zatsi*eGCGTf4rC`p)f9HK9TuCppeQu(AOz5m!*K_Kuup4#j-T@%vt-#9 zmaLc%4xNg>15OjDayhn%ttSnlAb>;68FaVc(l%b;nfCJ61)CGnQbk8s8PXv_qom&v z5i#pbZ zF{Pz@txYI*3I*SV=0Xntfpj}A>GRmj>26b#yM~g_$eMWfh(DYxG@&XSL9VB}*H%67 zL&|rAmSzQOFPexXut}(oH0y~*=E*Cax(O-6r)%%a-l#rz`@_EVmWbH3P%Ck22^r@t z-WoC%P0@q7mBUtP)2MB`zM1(OO5Z1d0cr2#X>euQF(~;^z4i!bJddR8liXoj3 z6rBDdJ7wcQK;O#*rXc!}J^zf)se!Nlf= znk0$sW!ye%AvIB~vq4Q4p1J~3g`{AvNc2zZVlu89S^{~I_qsDUOAklN$b*z3K zi4?zskKpbJBbxhp?hHB(w6`#!?#CXLAd3ZzL11onK5+0y7%)LYR1^^L2qYGmWcS}& z=Ou=HrUjr2XQ7OEMVw4o>?B~g;vdiq#H@B>V|&WiKkaP+-=tfkF30H^eV@x{Hy(ZNYC7M;cqI3$<~55Do)jK+!@@>g z9SK&L+@{=#agY$SixmBeXL>j24niwdKmXL+&0GqySnIuaPG%{ zqwSi1enaD@<@J8IndOV|9blOt$L6u6E;#GJvxI^|#vK8`Pg-3EQ|cb|;~|Te+MBmN z>3;#DN0t*+-e!&;a)z^3E^E=4WpTjE^Y-_?UpySHjKQv4eoui`(Ntq}|h#egW6d zhl=bi7^fE#D_W0Us5+QNvZIf0^SAT+yru! zwI&6+{HYOjr0H@1tju7AEGM<*io-*-FI@raJvg4}w7LL;dl&RBo=;Fbq9(lqtZ#+| zueZeIg&S8gP8)`aV3pBvfbkEvFC|S!-?zj11CW#|5YZ!SLK^`%VgH|`RB$Zd8vg^J_}V4CcP0#AOV0(WM-e7 z={pE0N7P3d7oS&+_!@Q5sxU2`1~aEnE4gDVTaG>ANsdxG2iyq{U$`T+M&!F zKaK5!fp5Rz#4HzM-xB2dy#hjxFD&I%yCE~xMZ+Irm-Yyg z(E2Rc*fS+uv@J=NWxEeNI6(bUv~$w0gNJH}#HUick7sE34nwC!)RTY;j?2Khg}5 zy%pnh4pPZV^+Gvz&t!jgqC)l10v-80j?g~FTxm5m+c{Xl#Jo`Kh{O=pRN{0*`IsP5 zzaDA2>sr04HKMaCS2nC-8hS@X@6J6Ej5AeT4N;}$2>9=CFI@+)$Ai-1KT_8i$y!~SPgh+Uu^y&MW{PRJ2*O4GWf1{P!O7I8 z0yBr{yCrdq)Yc9%1E6y@Z!3a2vFD#Qku#qa{^-ZodAp#d24~!+dOF#GdRm3?fSMog zDx+!J$s#VkGzwiv9MHLGannf2FRYyn`Bohu{3sS{K?|)@Ekr=`L*2cJozg%W)+ol*YRkI8_lql@@wB{MPzd`U4@a#qvl27U)6IxLyEBYJSC7bc@|5f76cs* zK_U&;sGI_xuQW&9s&L;UrjE6leFg!R4L`p)|8#V7_cMLs;STQIY$@#f$OI>_aAaWN zj(w_B!F}%t;G_echyWnw@-ONFj9@XYUbjTC))S@Bj!)B-NUgYo5gB&P-u;(-4m|px zWzFlqd;tVi)YzSymFSz$%JK_&R3QpN#%^BF#@f|}h9z^8}|inEAMES$|Qv+;lg)WCA*NCaF# z|2$MUAV>7GVASNVP5;4$Ghc8u~#D6V*@tv6K(%F0W2?Ns|GL$lJ zwWz!uJH`5HDbh(fsQ zYa7t%0nQHKAd^#+w}hzgo(@N}{NFoK-)LkKi$!n))(@w<4Rym1?t&ALzGy=EAqdDr z00G&(zO?mWwOwZW-GCaeVhz(NE6FGNX|f`>hj8S#tM9{_n_D*e8R!!6@i|AkSvA$V zZ^tOH%#%MZK6in7@M%=pT&+`Mm7~1w?f|eO@+X~fRNwOfW+3%}2HPf=j)#;ceSM=V zmGZ{=*0Va>xh2T5-Iz5s*1CXXG2QLT$xV+wuGlc13s(z3rk!t(Tg=cDU3Bmkt8PKX zBYuT>we661$qXjXoR?LO@>J^?e5|8`tOWbx&>t_+NXe596!c9jxZzAf>HTzogP> zhKOAS`5Y=g8uA?O0Y-}4t9Phs3MLXc0d=HWBFDdu4o@e7m&9O*9ZHz z{eKR)-v;`#Ha3@Lk^QgBOU{nIz_YR?!d#5GTM!^W$XMvjgoNWXO6q=Vc`typ_mTl` zVj)&(9zqgWe=n)^EGeuJTWIFhhbP@@LbRh17bncTI+KYnt|oZ#vH39&UhBetoUF#S zX`lxfa-xQJS+$uS3Kp1F$IkadQ0*ilXBGBJn0$Cj5tYq%n>cw-2~XV-?;>?LwS_^I z632I=on}3O1ZC2K6EEL_%DmhkSQP8e$O<>8FAq`&bUnbOrO6q7LPUXfzcj0e8@G>D z%F;0L*>B}O$bhCDU8jb_V<2V-H10UoVW#Y62YQB3x79#eSN6XTR9{2Vcv(w{5kn>9 zqVEJAAmv}SXe^CCg>NV+4eL8O_<0q%_V2(6P`1Olns&tMT2gx%L#YJBW^iAp= zgv8Yg6yoemIfJR{b?WG{Q>SgAs9uN@+Qz$x&9wHx>>715mwQ9igVF8xE3X9nujj7> zT)@#?e#P!{)$^txK=_sjd&RzY`gWKFcB2xWh%Hv3tl+!BaSS+Vw=VIAAESoGbQiS?m_4#p2JE18+>rV<8ooyi{EEh{u~|Jqxa z@am=dz;O2K{Zt(Q1AW?h|~t6XsCxwUar`nK>nyF+YzcfAq|%Psg*n zuT{kJ!xY||wr$(53;|Q?!Ie*7d*-^LSTvV=XJh&t@ymUrH!S^nr*(G;YhHnR!*tQ>S?4Y7xfrHv6#s>8_AtF zN$h4cS=&H$8qjlHz27wblZ#pf>3Vs@^;uui$%PY@7tP;yoUvn$2laQyPad%_@mq&* zz=Yo0QH~%exrKp|;d&lA9 zH|Bh0C(Sz`dP4+X5vrq=(?D&wzXipDXY{du7vb$YF_4x zL;QDL;!3jB?n;1b-I9`86a0S|+H&U04TC?pbPSiTRwnh=m@N_#a6hAK;(oXhHack4nuLv9S>OJFNqnjB?zeKS$Q%&FzbE4kUPN#pVF$=+)u5~rM+ zc+_UFHk-(3_lkT12O;(7VWOFVS#g<8fs@)8x&DZNt1lyn6|mQ_sDCIi0iXAKN4F$! zQcQgGm4)nto{7z4y>o&eogQnaH4d5QiJ1$Rm3rQ>Sl()hPI(@3au3^T$ocbmre&LHcl@Q6 z$<5P+q=fZ!W{OkC%L~U}vDt7K6RCK|bbqv1GG-K~V$<1w-`{M+Pl(U^;so3F*VO&S z=8fyEThcS?I}Ze0aGvHpifl&GuutuuS>dt;Z~i>}%>>E~f}ix@=AE~6$!(_8Gj{SX zWd|g8KKAm%%frJ9IJIDu0$R=<2ra;yKDzw;?o?cS=5w-X@gs77wTXbjC#!PJSw`Nm2PlO zT&I$poNa-yDZA5f(wV!4tZY1rZjV1#p;V1qug=W((YjaTV(7ay8_AC3HC!D#2@}rJ zgttRCgYQObGpaM53z}j0qM=`Wt+f6|t@XKTm>xdyP@41B>X*9wp=^9+44_P7F+1_A zP^e6Q9k1vEL9B34!q(v0<4+DB9zH$F#5y=_c;gNb=VPQg$F7Vo($OCPG`!)OXfH=s z#{i_d0Y;e%O8l!3_1I38DsWR#%=apnNu|6-I$&U_3(VJW=s$kOE5b^Ot&@hd`Cxo~ zb2mupn)%y>C-cF4#TPPyu~&?~=POS*h9oU+seI+ngQ`TG`zZ8#XQzl(M#s)*wz~?li3@=y-*jDSM^6vAd_)&0N2}(eY!I*IT_& z9a-f0aK?6}mAb*it>&Lm=NY37*iK(Ua*r(3cTLQNXK^n~+=~-Bmy|^6KVdo`ldaA= zgWX3!bzP#NTGGp4mgVQ+;Xwu(<*GG;8rF%C2MYsv501SPdU=4+5MbGP!9Cp&&cB2J z|K16s&z+p}^rAoag4f`z!cIIyx1WCCTlS08e(>mU=EqQ%ddN!l{ZI-lM>Q8}j;8rm$Tk=Y&QrbfU^eMvf#m zJ@U@1lNd^T@r)Ywqc|_qi9a2OL%_g#$SYf{=G{xY-Qb#(1oeV%jV^(E7KHXa$wcw5 z>jS^6qs`{GXQc;0U%iJ+V_#t~Rw#hQzK59h^_(=6B9s+eO+Ykoc;ze5Dg!gt73{2o zup3}KAZz=vMpvLY_C~r`J0cx`9S`N=h#~m?aS{B+>PljH6Td<+X*3cBKxs!%FkH7I zxDzJwGe|1P+$iGu4)sv)`E_NS-g{tYg>^V`XHNZUc!sMS5B*Gpn z=+O9i5+87;HGc5QbIKXtcq`#qE(!<6&AYGGlhYPcg(s8n7m0Kwi<5X6KfTpHS7msO z#7~Y|efG;*5P#6FMpt}E>v zK|>&fF=E`{F}>Zieh7yEfA#?IS0Na_4OZn6Se0YT3=^=EfJ-1s1ss9)a4kh(;Pe7` zTFjj94>e%lsD=!QC03;Vh0@Unk@KUeZvdHA9&%k%#6|$a$`P5ic@Ki75x0E(rFk>b zbfZ?GCH%b9YpqFXA;C?tGw_4h5wDu4)JhR7(^tKU^WC-<9>(i_Pf5R)#234zxTs9m zq{PSlx+$yr`;0H`WnM5#!uLNn-<&m0j&h}hwBdRZyPVxyd}R7RIpNG z@dIFcX$T-}ubAZ>%Zy!EzpxBt?Utf$0nZ@r@0;>4#>eT84Q|Tw=o=rvRK^=p1d>(9 z0zob2={Z(%w)sMl~x8O9PocY zn1dnEj?huw23k-AVYP_76O?4D? zR9)MSLrO83@kG&`kL9kb59i{LO=*b*OSb7cAS42m^6t|kJW~wXD~i5C^4qC!vR;SV zHdJcwJFp^8GwrX;=CD4qqTIMd_w+k3AGQZK1mWZn$AJ~X;s&4JTQS&qtpULr>BWum zu!np5dZE#-E^rrrHz2hAcL@KNIsj6>9lMDsYG|sg#JAZNC<{V%&_%#N7^gLJGT%5~>-f;$fuqRl(Sqc17(|dT(fvvL&cAgM z*X#|MhX$czmVu~qcB&bH%*cBGj>)!}6^y!M__b)+xY}Ts$A=!Atx8|WnBysS;VH#q z=ev*9c*eWw%~RU1exjUO0AL$)^0_k**ruZmw!tHIyX0seGqAT>M&Sm91%O3S2cKip zA2k87Pg+YBL+(SMZGf!=6WI$eHvp`KV1$5v;GZFb82}#sk0eG9e5tb1F}DLxC(w}x z=LUG^ZIIvx9ii^3n)?T~2gQpg5)HoA0|QL?L#U4(P1}KSSe<^@S!acbekFRN3na7S$VM8+>BB=1 zLOnT36^xJ1-%IM+jn!~fis);D1y&mImcU*_zrB)=D#LSND-wKowKw99x>DVCeaq@a!R5pGotr*qibeU_f^EpQnd2u-u5ioyNL^w#$(K zynPVH2D=|oTG+$v!vyy}dF1H{*kL^${oM_v8_r{KmQoKnuH zP4Kt?@%|sTroT#NA+(`+7uV45veRw(2dS8E zdJC}X$NoISTPF5e-np^8%~ZHmn=g!fZ7r9PW#YEFl2`}%<4)kKr<@LrZ%$LU^dbNB z@n?!>x4+$GhWzv<7FbWJX2XlIAq7tTNUAO$l69+M>_?4RovqrV)Wa7C*@t|8RCbe@ zkGR6`_r5PYyM=AL=>xy6E~R5c=fV?RExyVZAbWuz;9c8!6Z7v@*oL@JvhFy2DT^QR zx5GL5vjcZ7YVJ*du_&kylih7tSlfBWellD3&sgz-wd= zVY2>+OKgvJC9#GF-g0YH#1VRd*LEgLP8;Z+ zXTff}6^CU{D#7J1^&NCxu4927@00HdzF@unilMVbfZ4e#(jN%0T^xa%6cQQ#d$$;6 zI=KeT%>7)rq_6H=B?l4%`0JiOQ=qzfmi2pizo99>xImQ;OX_ol5Auqpl{>yqF1|cv z@P*J(;1G{4#z!Qu>!y^x1u;->SlQL{W5iNp3{s?;m$;B&B#e*QXBxd}==Y)_hqz*m z`6Ji$3aLbKt>8D^(_+geItIRM6LyxXjqPe*kpA0?-lA%q>9`MgMohnyeXe`)MH$ED zN=VEr0rBfykVAZ>=x!da*$FlQL|T1{e>7)T6`kVT7NAswQS(g zNtaphW=t-=2N4R{AVMJujFimj(UJ3aucg=J&YCzfo9C2r)qcz>*H0;Js0kew^kEAO zkIe1y7*HKf92Hl&AOobj}4Zw72%a^er%TGln^5`{IhX zJ_IdfigjiGr(VH9n}B-7_ohIWCIp7r4Uda@$sFoMq9M0bD|Rzp#7*|f5@V;>cVrRI zL!M+VF?S8YN^~75X(cLNCjWj#-%n$waPjbPy4tF7iOXW0FZ5WZohGtDj^rX~nc$L- zg4(O}mYOZUt0g-Yj*{$}Z$8qVbBIZ$iqU=}0DxceIQ$wbjRvpnP1R z!$1Cy{Uy2$>Rni#tHV~sW(<4)S+7_>F#NV&Z7qQ_ibG~Q&oYF9bSqQf*^2-8_ctLI zPk#(bXMa)QSMi=ih;(Nx5|dHT$PvQqlTlugi0eX>640TN_f{nZbftCy^ zuLk?Y&8RQ?4`c_`uKObKaBgUMB}Lr>aHI&v*B_vPKQvsk%kYEOB;Ozo3r@^ARKtYC3Q~D^W8>Z~$1g0q{ z&`~Xm?}MJJkmn`eR7eh)97$)0Nl1W+uSWS@WLpelpst>N(5dOf-Dl*NzMdiJO4!ND z&VbY;TWzsEcA4sOs&DVcr54n320Wc7lA42^T%OOq&$#pKzJajK&3-Y}aGE8Crwq4$ z3O>DWS;0zg^kPTI#M-17k`b1sXkAX@FdWXCbkP5(LJ{L6uWyMDASYT(51?_SnD0A& zF89suaEA2ppS`k5k&uotl~7kKeB^LHm3^X{(+` z1XdL)#E)$tBCKse&=tag2f&JT)TH%(S&9EpD*@h#mhg0?eQ2X1X;&mH{~wa`xpGX* z0oQ%I*4-_jE1}>GWv2-}f6u@Bv=!dkNNe2}thYp~5=n|{vtJke>F4jtGixy5QYaLw z5OkJT;H6AHm}IL>E2dE!8a9oYFt~D=s`CVr#lmxsHfm9y-mzPXg8scil$_?fjT)zT zG12(TWp(OJo*pafN+uH;P)^8VrlA;xJ6bIt(kkgam7NCm{^%UrAk5o1!w%lYUxBwL zp%GN}7Q%x-`0L?)=yqQ%ZPtpNkaUL?EQ<;FXlndZ75(?#>goXa`CbnH2+W}Y2^tP; z=^jW(w(F1fwsvvET&uvX3U*YhLKHgC9QpT-3l<-`&mOz@az|is4>yD*CZpy5O2q)G zU!%=Al?xaL?MX}*H2+7_qrBA@h>1_+VkdN`FgUp+XnK>uW7KRt?d(0?rw@V!=Gz9> zIzm3E>&;Pm+9K4M#cVkWQ%yc4PZk}N1k}XT6qlJ!Wh%@-abs#w+}Ol*>MqrL?tKV$ zRLGd_ato`y*qGmxIG?5k)mqC|f2~6CX?ne7d>|Cd2bN{TZ}NlgKo6p*5M3T`?B#%{WFRDF~B*2iF_3o`)BF@ zI3<*2VG5d>a=LJD8%qTg%2v+9+g=$c@;v}J1q?|wLEGi1Fa<*Mf6I5*1Eb4zb!Tst zHaqM}Cy*J>8Yu**oMkXv=?*C5s0rno;KrR6MqyHs*g)D(G!qqeDif~{-HU4uULxg^yv;BDOI@Y?CdNz9c|xCL{I=FuV5uKt|5pqwoNZkAwGJliJTu>(%7N&?Q%^M-Y}gx4H9F zWdBgQqWUI1)q!L?QRI!LlM3~k_o>rv9bboFfm#hqSLc{TML2*=DOW@Q2(=Di%6ZWP}J>GE-mo36_?HjQ(N4w&hwYNjZ;A?@8MGb!^7WdJGap(K&_jZcbd|S zDlN!y|Gd-+kIrXKdB3`)MVeC{&++OSS4f7Mt!SCEjBlL)5pp4Z^5yw&64Q*%YDXzT zB&BpV81LaukAUkgxHx>L>4HGMDah*5*)898= zT%&Q#mAIMSY8GXgP|vI;%tzL{VqmH;^T-#^r>2dW%H=}`mVh{PZvf}}=tlB~8XsJvROCH- zyRa|4{UZn0m#2I2Tc{`^MaHa*9Wo-qMms|Y_|0-mkelWzEvaHXy0x%6YN%;ANSf}4 z=U$&3_P!uaAZ+?MWhFO(U~#g_u)OYrWc`dh4ii1{B^JXh9YJqXp~2_NUwq&~F>_Yw z*4Q9gR{gsBP7?h_Jexs1YtreFO?l_E#Rch;)9_@=j z-7a$CA$QNF>fr}W9uYZjIQ!jD@_VA>_&ld}R&yj@oO(n3qd|+8SVisL9nzSF5E7%& z^7E|LhHV-?4M_p4;TPT-x*^UxWPjX2H$vXSbO@O7{vlwd`UZJDWq>!zn7<^)m) zFhx5BD9IBV8vnk0PJ~>{!fL~HFdXx?JjZkMUu!;~KK-r_51~0uGLaj)y2^>nIQJCg z-Du~e+Mj2_`NO|a?KeJai(0juoOIWs_VyTztP02zBhjdk&Z{?ask}B6I(4yRtF*Va z2yn`x($m?PoYm?N#MJ90hDa3ePqR(xM|f+Tqgpd{DlGLwsSWs>Z}gNGZOL5FA7N4H z?t7VW~qZNJYpAnEl_GPH{sk zmdtJPwZTqz8r34&Ujb;5S?^^M8c!PJB>;8J;nSIGG{$Pvd(QyFDYX>)?jy%_XVTrz zWQqaLZ9n1Ur(bY>+4cFRq{R2xj%-$g%HRQ{69Wez8eC?2LPpIkROO#4BV3l6yOd3A zHt7M4zgQj$rcJnKFK^MIyLGw5)C7x@NKB=Kt~vb37BC%C;%C#tGaW(=_s7}@liit4 zt-k-`yAA4W56;W&FM8%WEv1gFDq-DfKdn};MGB7n(#-;z{tV6jBYbq~EJx2w9{}mP z;y%;3?|MH4IPQ#q+|u3)B0u1#pV8T0uiTFTtpvvh%bUW@vxgC;bNS~ zj>?4ehZYw-)`=o&W`uCfLsRoNh>zO!n^!~U>et^HE~TI^V zEe*ZSp1}0PCm;y70g8AO@ITojAnef}Zo2MhbsCyajqgvcC9I0Y=D!7sT`146zvBxU zpk&_w@L1p#s2aCp$ECkKO2&d{wzydgAG z5sa`GrDd^y(ypztFz=A9bC86N2#jh5d2AM2P9q$#v1%}@bScZs8EKTMg_}Z#3-Gd- zE0eZlt=XmFT>R9SESZkcJ8T5u_$i{R=YP%u$!-(<=puFMQXKDJ>KZs$z28|h|E<%} zo*te6pbhtT_2m`%??VU)HGluuA2p^8fOLTdvZIYZTt&y;8=Be0sX}^kbM%?*Y)vZ^ir*^>BBvKLdNg)r%WTE#=JSB|rkzQlzi6$o znQP?QGgxTt-SaJh8*0My{W1MD{I805^VWXkxJJ8g38*#o7io~+(VX~dS!CEg&6f() zH=qR}*1X&>>1QQyE4EIfWS%HmXjCbB`knLkP3l{i=rCN=MYrO^!x7-mz@*o}5fPQ( zNd#BI<8LIMz+?_&U3Q*8Pagox%YaP&>xlUWWHOKKgq{ViJKgAWiL_jlO-^}cIbAEF zs&5Tm@nN_)hagU~pKDR%IcYT)aoO_|Y6)z1qJj9hE44bhw7nG$DjQ2gLO z!;Wmw8>cLao8ozC!I=~4shM3u*7A6yRje}XIq5s>muq`(Fp+ny?rm!_lR>6$lu+qG zpG8SDTGjnem@%FKwla;tbcwdU{li_zRwh)@BV6zz5=iZ^X~D7_tEQI&A=!4&S)web zZYl2vMhT7(J^^Ff{Eaio{1PS6%#F`9TKSm9KGEov>dwQP#XnEnZx=pN({uJ^h}%PX zfG%fSclr5UE}7(EuSlLVO=?2kmh2yuoH%`N2Oi$FOCEe5UGS36XM2#8U;c%OYC0OQ zofWPOwf4orOMuu?naI^=>bM`0~Oo)&6 z(G0v~!JCYl6t7S8yVOM`Stb=NYcX~G#}%Y&6{@xBA1CS*dw%X?Bscn@E7_LG+DR`n z32tujxdw@b@b|WTN!;bWg}+sZ=l!KSichaF;kn(Nc!%(H!YrF%Dw(_@m#?jEpD#jA z#IrrAn}FoJ{G<7EWm&D(Rh>W%gD_X6H!B-Veumo~BZ z-X+u%+h8ex6NIzWiCl3&)3DsAMB=gfFFLSNw^URkBMAMzYC){FsNm`oM16NAdk_?Wx;VIbTZ0KHsP+Lw9R`vSF`LZqUY^xy@vvE_muK}GqqMsMJF3<0 z4mR%{1_4f+JkZ>f02dgl8>{!;)U=_jNZS}|{YKCVqNxJk*?%+dLg>rDfp#|ih=fr) zqg*{^p?sHVCaNjQVS}<%KP`YGgQQ5i$*4y`#v5BIrXCQ*PP%^R(jy-&DrO(XuZ7}e z3i_s{9|~PZ=$hQ>=Z(7N^qkp=Tkg@!H;E)}2&#_KF zg8%hWP8i5L{u(~UC$W8aV;0Pt0w6^IkzbTQSQ@C5J@$11QN7lHhX?>%_JAh|MtSZo zFefmghK@RE4TyyJT)!&6Y^Wyt&D~&04_(%C9|f4*adQUEZsnmB_)a`D=Iep)?fux> zdcVpA6#_C*pb($}g}`nl-}^I!X@jhUoFaIR9pCDbAJ^ovb#?=-mT+i#Jo~&#abt3j zanEw&VD_7`(#D*m@b}svG{cUB@e}*Nco4`cd=Belczj;=%0=gMMLF6B0ySl{S=#E1 z-h#$9CaMnOkAnNiZX6-F6s>!4AG`*n*wxLduEiI)c^Ls#goy@Wl z^14cLaPVJCB{@qupl`s)8^DzaI>-S}v!={OIh9L%{1na0)~T#W$+}Y-E)U&h&OVWe z8}u|NfZ1kn+s$?~Upc(ddTnZS!TeKyZ`Caa!qlzl!3vroJFzcQKi9R&nxyo+Po2b$ zWL}%Q&1i>gH@Ot;z`|E~-YKcbm!XtL$gt?V!mIVwVtLyW*f54^pB|C&?*yKd1r8lG ziBEX^2S4V*kQws^sV0s|c^}AVDhCU_bxXOoc^@BIcd}_H5#wN0*9UG+SSow;cI==Swd8x-9+0oxhsjsY1>CrXiJym6;A-l9+UMYO!j%XhJix>t9Gmb0 z#P#+_9h8mpkwC{4W`lBd#RR-y00&1w2wIqPLGS6D^DT2~r4agfT)h@Ud=V>ho~krG z?PU12?tzi86X)XSPF?kQ1{hO-u^`?c(RFQum|mdp2wrw~j^ge`pK(WP<^+aTG=?sj zrEb;vNiCP}u65+{d2e=CS5ff~lZtEeIlQ9DqWM}qJyBd)!2YUW5R3^;8na*qqme7;EA0Nt`+&o7BI2{7M=RhJ(Z4bo(VBTBE}}{ppQEL_10q%lqJ@s!NI~ zSh7pt`TdJB)6w7CO%@1_;5r)8mcZU%g9L6F%&hPiDFgF%ck@-btjp}?Czm&#WkhnF zrRh=fP&or!{cjiza$vS&TvvLtuArcjlt~VCpho5{3Rl*43i2r_R~LEhyR5mozkn`y zJTNh(N^n|tvznP)^!oz8wz>RHeC6l6f>UAVs9B~(3}dv+-d&3?O^J(Ue}R|8w;-4@ z=AK>Pd=H__oh&GK$zdg-HhabNro|_B7jeqyLAHj3++iJOZu}I@p4!Kg#_ibr$v8I) zK~hV~Sebj{`P&Y6uUKcdr(e00+p)rLR4Q9TMxjaly<;%Y;wsE80He%QK3vu4UZj?J z6%SRWkgny}4bTaCwCn->23Yy^-M}17^OxxiK!Gp@*opYc`4Fb*9V~O;$5WHBsmlrt^{gvj6t9Y9vq=rqx7P56;_wz=v-K`!9^ARcg=k1p zp2)tUL-&aGK2Ln!>_ymOHvxL*0SKJL{n|#-F@-7HKNkvtCgOhk9UQPYV3ctDKviEs z0jX=_2<05Wp_u`w+|?X0YO44)aGDZ;FvSHGL-BPs65mTM0P|UWaNM4@aq0pIW)S-Q)aWj__W+>2!|#u?{EAD zT_D^26)~_#)6%RxcTbo2V?%TiPUZ;*P_u91UhO(zfBNt-7&+^BYIUI=7{}=@GRg5cU(HEV%C~k3Q#uG~3h_=OVG;xNCEe(Y%BuDJPNB zmz!bov)xW}r&9-ul*+A+2#Pq}D@B8Zk{UW^{F4jU9Ae@hJwg<61Wcg(Yu!(ACKjC{ zfZP_6tN9Pn!hK9l-}rq*`?sA)xYH#rhMTJq_HIZ&OC$X0ds>94!E|f)8$I*>&MB)A z&E-$2HGio<{yMZrBfMP@Fu-7hti-x#M`xrz&;?_L_Nvf37zUIu6HGQ;{XHW$g9Mp0 ztObdC=yVx6$paGUNEB;GR2xBJ7yZn&rw3+ZAJ=U))v7aIo;t^4oH?JfGQubljlUEU zBGukMrs+8rXk+xEU&zS1v48ZYZDP|xZohvTe(MD@)f|2O8l9H~{>y+EFTrr?dAwU! z16P(*4*piAb^80SmsD?6m6}E(^G@qC)Y0Cl(lLKbn6lQT;o9frZfa?g(K$$502B?t z4V!yS?y1E42cPT%h2)JCzssQP=3(z`?+k0+?7w|8oXFw^mRi_sS{CC&SPx-)J0;E`mUP}$c9 z>8L3Cgvbv0uJ)H|1f4>+@KSo23qFNK3F8a2-p;+GTKckbf zq2Qz+p829+qbRNF?P3H@aic=fu(GK*)151IO_q4+ozMC5v6vuuPo3XH$L8x0nJY~l z6oYZVS=}!rQqWByrFJz7=PXb%4%4#qd?x;R=mt9Zrc|Bl)b2MU;=!Uoi0We(#n!_S zv{h_@vewoEg$6As43zoLyRs7d0!`3;v&5_a-j!w79(sbivdylY>CZLLc-m_$PH(5A zK)&s4w!`5$eXmYew3C07jGNoo##vOC}hd@`wti z)AV(_w?S?LUQ&i%Pt|I@f9o!O_Y*dIvhTVxqBX4}b&OLRC2dU~UwhH+7$ptMPS`wd z(b}(^K2*Ny*dMEWBAyRu$ee+ZX|FBh4Nv6NjJ#!E6*mudo|y7z$CD;FdSEoB3k1wz z;hzr=cNE*J-#l=eF^Px-ZD`C+ee7@pQYhP?tUVBLb!lB)7$igZzf9&)4Hc44B3LCp zaW7)Cja24=r%(%cFwS!y2@xQG=PwV&!ODe#QMnqHQ#=8gLgpFhkc#o=Cuz@H+}r)J zN!(uAA$|lah^({1N$jgx&`CB+&J|b6vCaEdPT~!F;3wJ>asrym%wgJkXV+yphMdrcE+D1n4*QEIK_;8P!d>o z9;-1tYXYPvf+?=$KUG{CC4AzBcbXkprWC0u4R2STIQTj=g-2oul4Utzd5jU zHSDlE>kMT8Iz!>N%~B3l_ktQm>pDX%cui5Bm%Qp?#;^;pPJl2KbDF!%eh&YpCa#mV z@rKKR7f2d>e%I80z1$!%igX(oXzBt$0XXBqko&(^mcNQQZS1UF5J)h}Kzbcfo8wH6 zE{_J=rd^EPs4~Vwq|53lAKQoSDrd)JF2oNj_=|ud4xPEla zc?apgKL^=O!{ikpQ-L>&!<05%;cFyKf3f^-CiOiu@(p>{!H zl63zV{9s)H-+nBL7G!imHL8ajxTm|rLCzWUHwAA`a09{^7XJGyV+3DwtX^3c;Q_T@ zQ66w`&4gUYNEncSAz@%wg}w@EBmE91v~oFP^@Hj|E1w^h>dgd6ty=B!*Q8(3P<(h5 zWKG)T#~`eNsi$6n8DCu?wu0i&G9yQrE11rB7(ua6yzFu@chta zn|H)4X^CkP%ijH(@Z5LE{F1u(sv@edy-$`TcoPWLfsr1Bh;KX9iR{^SJamAiW$V9s z)hMpdCdM4{{zO(zy&x(@E=q>^&UC%0g;Q4NZCf2|z(meG&=4E*=!8OnrNx9<7D8%+DVI6!j{eKD!?_>$#+*jE1?n7D#riH)Z{ z90isPWJde`ci~Thg+Dd`1_d^04}?G5)zJfUX8mCRi=N*Xk-`lW@SZ%P%@u;FRGrxc zU;v}70I{uGnAlcwhVO%5Y8MHnc2?UG>s@ccPPIG9KE&sea?2%#W_EcMz);zv7Mdbv zb>rEF{5ypm1@HXSMuR^7Tp775I3zW&+x#ZAApS6-oVK)pu99|KVS@3MkAtmz z43+KF`47c)#l!jq->Rm5Y}V0GbU|rO;KTxHPF;J_w{x@i$5Pnuev8S?GTT$Ok)n+t zz3{UmsNeN1cM{%EsowU8TR@8UfJmZrpf-w><~ut}W?p!>_midzDI#GsMwG^p7kc#A z{vTcE9nSUshH+A4?~#l|BxGiUlv!5xOnmV*viB+}gskk5R92bUGs=kUWRsB{B7{ou zdp=*Cb2`7v`NPq5&UO0Zx!#}mc%J)y-GPesjuq-Z)Nk}YQ7>L$TXgpcwIU;o8D39r z&o^#ai?*zpVTl)MV6k>B)-)e;f3-9c@lrt{e2|S%xO9xG|AsCkGM~MLHo~VY;=#$| zd*-s4|D`l*O|g+(B!IPF%-gpt1XuBn-BmYb$)WuKGTNY2x`Ozjj>ne^(VzlN>nfbFqMiDvY!Mngv%b zYs_ropBwbljPK(<6D_^-a!oU|w$SR8k-10#_j z71w;{c>+dnrJbwMbC%7WsciB8WX|MCYZxpk|=@B2v1J3I(py{M=we!-y7 zu7&&HU4qRf*IIR^BZsuL^RDd@gQah}`6HE7>moO0LIAPd0pqw@&>MjdDtotK&=(1V zK40v5sh}{pP8@=Yu$(wx^}+}XI(5AJzy7aD7Zy$#+zkOKxH$1xtUegu)po62crua+ z5?&{Cb?;T=v+mrZ(0lrwtOLEL67+EkJ)@LHXQ?zYT4ebCP};TWtPFv++v^{GorF5_ zBJw(DH?8&OkI9Km?@>@XaPDo53Vrr^dM^BqN3v@9fKgC>vtm_Nxu<;YTHcTNnJa@D zZndW%mCbm&PU39PFh8(qIyQAa5MQqlmDE$SRk-bhCXjrk?wSs|Vn=i^An7hOh~T~Q zYMi8Fa^HKk0L$yg-O5|ob=LQw2$<&FflpvBYXJ7}SUEu0EtoeUTGQe zeL9Rb4x=3Tn>DcJXU))o_|oW(XEXss5)BTItNs4exd4$IoejgNM!=Y+2l8}5FsAVg zV}U$62#) zi!QrCq8Mz+5=Mq0k2s4L%p0)+IE&eOV&T$~PFS(Je>{Dp!dTm-@_fpH+SC1R@6$Aj z)k=A4jK5bB(JJUMU9_;@UKAf#O70@<;nQa>DCly^5K-=`p*qT;+aiR07Ml%dKCc8! zoDY*)@7nLlG&mSyx$hm8ua5Z$CHv3Oxtf)&7m62Uegj4mT4+zqn@$CJ>>{?0(Fe!G zS)?w=(IUDUQ{6kVTLE{W-9+u(zu#{9D;g~~(VzL3y4A--FuTfk+kbWzWS;C)p*^%X zG5A*8$08~uCNecpCov=yB(P7<2oKqt*ETBVN}I(b@C?Z90A`aCvAKS7*L(IUHL_Gz z=og*U(klnYTC@xHai7N*g;2zi9F$ z?)5)@I}E_8QjNGU*{CCw<`{)O+?o)Nt2a*05nmHZ*bWV&b9)D9S=zx}^6x)iQ9!Z}|4?v*?`d$XkrX{2D#7Tf!E1lj0C7w6rI6|R zX}PKhj%jit`i^aJp{!Tp$ibM9Ct0bdBMw^Eq=X{jRDmGes%&pD+ zy}SI^n`$zodD_<$d$!(RMj6C#-ZXyU_5B^UMd$-kthDZgsb`%4XMHG77QUfin8i1V zp9b+M0X^|75mY(=K%QGLl6sOZ=dC%l+h-iTTOn~OfmfqHQt05z2!{pgS+46UBP=> ztWPepjuQRp`Qv3V=a2eGWkCfYj?V9stvp87S%OlNiCaUr2B$-v(w}*l$y|njY4G10 zQ7;FW3-VsnI<9t{g%qngo?ezSQzPHAi~fXQ$b?bCks9$ z)8vgvk11l;Tt6+O$dX!USDuts;kDWBVc}FBix;45?C{1Rahjsh=mccWg!1(E^>WEC z*?tZ1=XoaTm?HV&8)*x(7dA8ZS`AU;!`-N#uZG2HZed?~6ai-+MtpGK!m_r8@Hk!> zH_%!ES^ zTzV^Vov;qWQY@Uc#E48o%M+&ezr@Z7eQa18W_>nk_FXtcI^{G4p$$O~%MQbnjFDCI zTFuVT*z$q$XmsvFf1OBur6kEH7wL|QTge5-oa%WZY$C{22aQG<%Y<_5s+lsKZ=Uu$vy+%8j+C~3yz*O1ElhPTs(pqH2&SLA(bg45^kjQ-5GPBhmi z*wA5#+$He6={QJg@`Xr*Y`bDt?BlC1;Kkn#h(!PX`VJf^t60Mqhql!Ki8zwB=b&N- zI(!J8-d{yv&O`ceh7Ch657k}N8P}mO7w>&q1ogF zWVydkraP{57*78{@E0k3I)>3CKv0p_#@=J3A$PP#{MAt&_PKM`So2;Z_ZF$T$Yj<- zlO$Is8Hwke$Hba?f0M_H$hvH996b|O}^5|$Vj{19J3`Vw|N?wDI?lc&x z-%GWA%qdo7aA>5|{rT)2`0v@{L-gbu&yOuXm+#li@-$xc6|yTbgYryOv_rU4 z&;@q9E!rH7!k?&7+zh>9F= zBZ5f^+TI!M3U6NrJ4Z`nFnwSMny$w1(uHO9S6=z3Dw0<|o%>ZMp6S7%TO_NkSTfmn z;!7LpONMp76x}>qqaIVM#k*%-x5u|i%1ld>R?;QdNRuXctSdi#madK8_U9?tujKf; zOyy%+!PatT=DXnSST^R zGk~m|dFnhi6|Sw8Ut*y3Xch=ey3R6nw})JhTc(u3z2(&2)HkVD^*j`>9&T*^M4+_9 zDMnJ*pWY?qLCM(u>&TOqft{O2TUCWuRpp92*w$R(q4SsE|BoZDb?C~5CU0m!fNag( zbIGDHO&ZCvzZKgb0}#dbr}gkTaI)MSzxC+NjIE`@Q@L&lAL4iVD+%ZMd&%8NyY*UL z1W7V%U5&J-ACBJ0)`|;mYV~fH&b=)3mWm`pAg-umN~`v{@_d|*mqwcw^=vIj>n7L2 zUVbYaJ=<8gNNzcC^`$Df;oCZedCv&M-8gzY=D3-GrY+a0_LS$ZRT!`R%3{@-Ac*daTnil zDRsk>p;qKjs{@}PmzA_NwPbX7<)OU^JS#r<>i)3Gnlv}RnY7D1qY{9D<^UkwsRk4%B0gOhD zO{JIhEZ@p2KbhpD$v*9__vvNd%MLZkSm|-rMF;i=PtU=w^e9W|LgJ|~mz$0B+O8VT z<0k$39mhK|qhChnQ?#Wmu8+sQlxE`eHa>gH={k{*5<3Z>^5d@77mZ7c&$vjZM|&9U zXy#JK!z$7@BRWh@*uJ7wTkzgD@jF~B_8T61~r2&OMyaLDGC;IfM=l8X~jjmR=zqyde^B@_{2Ps?$)X0~=wNpb2Jg?I0$0 z4w`8wQ`8Ly9I=u;;2T`aaNiLO73YgqJ;Wt5Wb`$p4d`6|9So|jz3gKt6?Geea~(#ZK10csUg|Ww(*IKc$#gQ zi-pjT4UV^CS>H6@*GYrnPGmr$y^8Xol^r;)wz>(Zf2L59;-w<|G&fD_dKjk^3g}5YaX~ z`=;nHDK1sX$Yc`PQyVWyQH)WkC>s?rRCWx!q&elFbY02?RVk2@Yo0!$Bjs!_ z+O2#te2k?3m>DiE*hopZ%M&YT`0DgL}8PmoRDnHhK00DXTvA)nWw zqos%3msbE9zg+9Z&EMs5)1jTE%}Mk%o|>Ij^5X*JH0;BWSNel`$UiLa-Tny5UvB{3 zV>4|AgZ><2K0Z)LV2-+hK(K7B-9YilwygS875%1o!yjut=yqK|&dflTN0JfTc z0c_=|&s0fQMgKTbrhPoutxC@9#!cB$jQKd@<|t32V<&58_T%;A>Pel+^xC@NCtVrs zM+)pSguQLfROnEY=@gGYgj|W6pW7*2M9*hQ_ytG;04uWM6p6@Ls)rX+t|etfOq5(& zH8oi;NJ+y>#<`3U0Dp=2XtBGuvkTLg<4v>2;6Uq^se`!##MvYLZ_ssu z*}>S{0g^XRpe%qQsbO^EnYumY1q!?U(Opru=!TrQc+#tBct;^>c(-{9GY zMfup&;YzXRlaLD}iOnwa<=vFms1*Cp3dzD95gqTyX{e4V{OIZ&aD8%xae#xfg{^}J z?;n4}5Q3cf&+-fW`EU1U3(zwC4Jb#MqwM~Fh=7TOKCpGAWD5!f6haZWB=`S-W##2Q z>)KqhT>BaY%|QU!sqF7@h4bZb%~-~~c_Sj_M_esK*ecj(z&;}4u)xqbwz5ZyiL@oFxN4yo05coR z)#5YzPg0((zKG9=?1q;6p7j2)6AQ6(2Y7~4mA7!ka)pho~ zdU;3Rod8Nh(`=W#_4g7_i`>j|bKc>G+cS~#n3|?N$m9RTG}vq1j=;x?d#de--IakT zk=I5=vPZ<|DK27CO<%lb z5#@|P2o~^)`T;Jyn??bo1s)1d-@KMkAbuy#6wfZ=d$((6ZTS{q_t!H!ohrwVJ?-RwgSB1c!za6^MIDdZs?U5OS7(L$$QnhjLq*tha->j8{f2jT&vI;Z zv2>^ z*AP};R6qZ=j{dcY65EM?ddhz%Fzms2+TJt-ML>%Rw7ed3B=OKrKG)7H5#y+P7YBo#?!x$Q7QC_UhAP-V{ueL&ifqv!hNA=OvA;RD4@Od8Rep zcN#BN^ljVo98Ifgn(Tpm89Vv>M=L*+*G8+iXPv}SFhNA)E66tqQNf|NoGPmYcvxR) zxQ@Rm%#Bq_@f*ORfa!GSarTxkg*$t4h@*?P=@+GsZ~(9aFrVasO9U>iuF?v;vRap5 zU&DBP|Gh*uhe%k8JmfB4djb(K3@sW4;9x~2W`6|>AV=x#J&?C|NUwJ>C!z$^JHY3b zJeW#~BIP&t_VOPbi*KO}6za$`Rd_7PpUx$Ga`@1hr;Fk5jt{TI3Md}Wu6nOB=pHFe z$3hT;Z{0cTZjdmWOiH)G&~|*weAJ2Jm#AytyO@H^8$nmLa(s1)TbP!}-2{aL(==ah zQP)#!#TOnuAvmwJSu=G@rM;7ayJ6SLi-hu)NpXov>N|a=Xq+%6HjuUtx`XFXes|9f zMBL)^AY<_J4?(7f7vSf>8><=0&e6pS_HJmcn;{Wa2uu!`o6dFz41oU=4-R$;OHbsw z0#%Ru#^AUAzk*QS7*%Ajs?-M6uc|> z8qCDmbEwnN!)9PB#lK->aD9@E!gv z$D(?{izeqx)5SbNUiB%0rMSGUq33St=DKNlSM2OTwmkt_pF`uG9Cx z6GC2)sLyn?b@NVGk5S2RAC5h`=BeE|p+3v|-5dG56G@Hgf*|dC-d^@C&dX@ZlS8)1 zV>hFnis+SQpQ=K)x!bX{BgvA8q=uCjEBDw60~7Br){n1NP83X>FN$n{C5Y7MK$?uZ zHG)8K1X0>0P{%{wxv>l!oCx>zk8V%H5FNoev zJ97%7FVf4EL-@O0gr_p1Rj%vqRC8j&8rY+=&Se?ZocHMEsBLO}CYTqM6%E>(KKJKb zVqe{cY0=t41yMdWuE`$puh{Nih<|9TnABu@`59JnHk=Rn?+fb3`g@)}b`Qq6KAoJ`S(6<@5q6A^HxFu zj!mWn;nkny1Ct6vQVDNRkskxQPEzKEMg;N*tld+_=Q4llUi^W&Kle<&Z?WR6%2;2q zS1jZ;B))yCr2OiafQsRTj|>Xk$5n3ipLFA)59v#+%NQ`xv`Kf%FTJ9hthgw<*79;Q z(~FZKgrE2#ig$2%@MB@Xr)C@(k?Oeh1s~s*i>yalMAcRru|&nyVBIjz@sTxle%=nVwz z5b76FMtA1T6pyUgb5wh9y7k}SY`fo{m3>`oFvapT`TOMcl|t3t`0h$J+I7Z(zP8io zWSSlMB-Q7aP=l#?QIcEIpSRs~a}5AbI$!*&ozW$c2X)pDnPI$m>lEJWPXzvlH}Maf z@Gv8cbRHQ7Y+6zTFQ~!XEJ3=tx3?M@U|EI)&@p(1O2CSO=jFkVCpqaWKoZo1o!=G! z?si^iCpT+A-~VNx{6j|2SpKSE;?!3Q8p6bCX&V1b|1uwxwqH20dm*InK2(|4da9m9d3vr^`$&pNl(eOTp zl;bQanTnaGbbs>Obd_+DzmHzGt08LCzAF0c!VJT`G@5X&>g-2(Bs%RJrKiu>RppP? zPK7rc*j2TiJ>NN4Cvh&chkOqEZ3lEH)?e~ERiYZKd|p)x1jb+Bs~(rTI#ealMB=!0 z0-A)|x3JGEILbKP{`{D7SBVrXPHAnCf>0$r_)$?l;1P8hb;CxM7Zg`k4j?RX{+I5` z-P+O~?dl2@G*>m(G=}c9H3VLP-07^w{~Pb|;qO22TH=BRp`59kE0Q_@siUsW2;1?` zH5$hF1anRMayT!V4#1+P+o-*RQ-${9Ms9ZY?yWA(?&L^+^_Swzm5&nB_p5KObVV~q zJV@kNr1_5ZG%2Pj^i1C{2X9+>pfg*_CI4nyA$y_~bwk^{f_C?W-Z|=?li<^Ajb2|x zC1q`1=t*flVKY_Qi0iSOe7!>3$a=(iN5{rIDC|+La%b3CP3I)2I3KeDO&jRn!HQVs zX*~7SM7oIiS5i9_$@-Njg^24`lLAfHR$EUXZ}iy*l*yf-wLJ#_fa_bURfv}*+=qDx zrXh47*xKI91IZZ?=2f%yMB56efFb$&%>!dVtcp%Py-{iDs>KvCK&H_|sGQ z;^IUjB;_`-_T_zLL)%GH8_r8e&w~sZsa-30^P**xzD1liY#@j=&YJ04K$HYv9iOM9 z<6Jw0+#k%gCShFkYj0`yvS%NC)8=u`p8FCtDT)!uB8ggt zwSQJ~M^kcqx*1VR`o_st#sJUo6J4h6(2l)$klVWoyAx!Geo6TvEi!UV$B%5KUpj0C zu+A1vG>2K}G+H4hlJKA5y_|fFYQ<1GN5(a_AB4##Z^979N=`(%3FKfQ+RL{pb&x#skX&}#< z+~f62@$upWip@bK`7SBn!y#kg2)pG{BEviSiwzYdzSFpt$5y=eq!twLZ_gfa`gQ2# zY(Nkc0(9(HswxM3lxXn7qh0oGB%oo(FuyP#o(r#qwKLkn)(e>sA>kCiCq=f#a9&zF zBKGin44;ZDaNnyWRc8AreTPp+e#_7Hm~{$;biupEt;5<@g!<+0`oEaed2NgX5mP(h zGG#snZ6V(l;yDf?Ik_~BpjL_knqJhX!d05YhUAR&;4b3`$^ulq>tnil=9utOCyGE( z&66})XPWToN-pK!a8v7ix?-F=P}(M>qOV)6yIGbiHmbOU#2x=nx ztZd1x>G%_u+%l|*4|Qyc4aKV8%B#9-qu?wZPs*~l+fT}Q+c1Kv;;JKl?hq7~2MT+j z8dM%_tp@ykO%-ikQ#4uyjUmygqTOJSqyp1h7;pa@*kYd|d;zQG1e-~CiYH{sAo_1a zIB_|J7*vL*3V#CLdwy^GVI(DCkGPazr+nHe7*1MWt0^YMtCZREEAg>?{8Yxar=Zt- z#VH(R@Bb!*dU*llxpMV+EFHqpN_8J^u=dBOdDnoft&Pzkc`@Fl)60V5m;pEmizno| zEv}fo70#Ow(I9wA-=2HPHBCoS=XA}DXXjD$*9XfdMyuPXYIzb~{T+lScB zM<@Nq<>No4C(a;(1-d8%s;fCe{;ioS;+F$ym+NnI@88OtqDN%GSL@S2C(aR(>Bs7G zNIID7D+o{0%PHE6F?Y5)sTE!FG>_fWVRT9J=2$87PM_K?Fr1)JedIBJxaRTz1aZCL z)0_##c&Zx~r1i|(unlgMMRzJX)Wr%HpVNphHW;k_9xD*Kd?oB<#!YeV-miTMDZO;g zVGll!l;^O^Y1@@G-^<9)CFplAY_qo+C85~NYCl`o(OoAY6pF(?2Tm}+N4{T95UnLc zLEX}zZrya&84Jf4<5v`^IWjbI&B+pTma6Go|0rbG^jN%i@T5)l6_} zj)_53>&-yw36=?`-TV1@^dWAX=kt!gREUK(cZL-tB3_&KdPqwhy;*Aa)!)95#_WX; zO7w*nSGA5w?}^pz>dzxi6P!FC{zkR8OKvy{WjJHMnSuL9+sk~XItmS^!WHwj83k|M z9z9CN?AF)|s!#6XkYMIXiA42rjh~;wJZX>-UguvX^@vmA*s*q~S5UB^ zyaFHU({vMy==C+`h>3~A5W}q!y_3Ipd3OR=6k>v{Xkw87k^gjM*t*!DT)jbA3Z1Wg z*H@$x01U`vkwn%Qchi(e2*q&wN!!X+Ebeb2q&tcGfjSb)+WmELhOg1)`09l&Ta}&` zR!wd)JALeLmr;*z)Sl&=x6BaHVc3Q4xAz>D!ZXg0T;-7Nlg~x;;})vTXB)%h>+_Z2)Xj@ z6yur8$`3udOT<`ATblP)nz8-C0+rkYuCMg97I7E+!Z=0A4u6Z<+jiRaGQA+WWRW#= zxm5Ou31hg8vDIzAPWN-S94tI<`nGwDUwsjw*Bo&+t3WZe2)mW7d?xd4)myomX=&}a zGax_J=2$`sgnvJvw7Im#_}M1`%*a-p$ZO0bA1}`}Q_TJJjzPL?R1URGy}QnzF>qv}ga z?J|+mQQKoDL`Jk|YV&Dd(O2H}XUW5UklkDL-F{Q!y>mZNjQg(D2!qGh`>moe5>L5gMEfAwu)988t45f1Bt;#_lRwS(y!16+reAqW9@ zz)J{?Lmp=f9yE}Wo#B!N6+;|5$o#Eb;l54!0>fBPkx=}R2y{k~5_rKuoU4s^!D%cu zOvbl=eVRUFN^pT2u_1KgzQ#)}e_FIgbhcTHd;B94!;ol8W_hKaq8mNrh-Pu0DGFlH zODv}#NxJ|3QcfK>5f-(tq`OvSNj)#`@7AE_B;*iWk8fXv*m6eR$~jJ&V?E;G$(JK9 zEA-#s@L9aJC*UeXvTk*bI6%m?yzpD`_%Fq&LtRaJhY%9`rqNPq=J%)c?Baosk{J|y z8)Ydofy5rtic^41b#ra3COg@bV;<%Cdk0l>(Ouz4CkYjge zmL#+k>|xbxd-p_}L|E7H-DIrWT&7=^^^FapNh}J=V_u=3+=u4Amp^t4?~OKb_j2BV-CZcB@rr) zZ*phG74s!URa~==9F>?@ziX3f>cz^?c1grw+b46Yb7--MwO@3ZvAUea3>RIU#Yg}Y z-uxFt+#hAb&{zaMRXPwWW0<_E%vZ&klHIlTb~Vu|jfzgPpWo~CIX|F*F*)O1CGwcw zn*dX0`g`agi?#+|gqk4vMhD)R+^uaOd-EJ}skAWG1gn=Zgy-2Ct0LpBKYPew{A6EP z(iA^4sT5*!9eyCGhP05O$&RsD4TpWr#E1rwH*)RL7+Wb_V!{(_@0Lby<Rl{rR_qw%&P=Z4tN#ALLH2+Vk-PMBeE+#E&Duqa|bf*nY^&S#(ykmoc=AsSrX|z z5taxg0*&q;{*-@zU}m-`J8NNKP)>N*xuAFv|IfZ#?q3r{tbZfy{y=9TY;#8|Wt6pm z5I?WBhUUNiH;m-`Kt-p5rZP0vTtRHki@^kec^{skmKcuGKf2%$j;{0}C1Km4dZutA z@$%Td-#~qJQC8#>LHy^tEr|3EaV+3vC2|;)Ox+}y5gALY{PHYezJ;unzPs}!x}gek zOde=2(>b5W8oB>D%C`PUa5=8Nzo(sezyIP73qRF{6{d^WR9STI;@k5_=f0`1sZtYJiUcc8J@ z7Fbg@Fp)$dKm!E30@Gd$((a#Amd%W#53FlDHX;{KL+iXg}Uhs&#YlZ_;iHjwcbK=W|SK9b776+!==@3&DmYGRzbA_ zkD7JPaV(Q~dwguKo}Z0B2B955TeVoM zpPs8fTgTeaM&Bm)h=W=PWN&$|w(qR-i#14KB|#g*IHZCng7hTaXEJx)tjuSG@*JX>GTLF(y=wW1A9F*y=q6Y*+kyw&F)8wKfSD0tFFlS4KNW=eFM;s_=P#!#`CNd_Xu;SlkK_Cz2`*aIWttuv=UTC zt}Dh0Xnryio1IP8U$#xV=9hSZA#{Sr!G^ATOO3B<)sA}pLakRk>0aQtdAJAEYYaQCo%#s(9bP&3`<-W+; z*qz@P0&$J)AhL45k>;6_`QV>t6{UFBgosJ^g+)=u7L5z>WBBypa|8_Gf*+4Qu)sIf z*U)vV^}hY1vZ&M0Ocy8sGk2#x=p}Dm=pSvs6LsvlH%)Ds|k&J=4#pY1o2~_+^huez#b1 zmy-H&XD~*Rk9hR5!=#h613ppKLlK6Q*<*X_Yqz-@h$(Jg{NWSC%(3^GDrHOxyN~Z7 z)C~(H{a6D0e--aPg)FemIU+C#8!s@in>qZSlm*F=KJeP3c|}DVQXj5r@aQV=YF@si zfe}>ID>hyvySJvjbt5{-DA~QFV(QWnIV&zEbhLeRU@3l0%>CH9ySyJmt1ksIjZTwp z{Mxu}EHa_c<1<)U%a?{`x{GbaP+^v&{flHEvirr=_RjV*w`zhm8=c)aD4ZPYi}*A+ zOqFa|v(;L)+Nd^hGcO4#S{zxF{xnKQ#!8jwNwikZRAb-fLoYqr!ld38TAb3U*kmwI zjmji2dV4MB<+T|dU7?AtXT_J-=J|ew5}FO^XNmd+h^0nLg>UzGSe}{59bmMj`H?L3 zc67kIrEe&2oA}-2#RgtH+Ey8}V_nV0d!HW%C}mzs@x|iS5BLCIHv%*}a6n*gjU3bP zwCA-&qa1laWq`RDBB=xWUER;ezAHGnMl84MMcdsmgRZUybaf5CrXpS4tadz1Km%m4 z1uSs9BH*!@UHvSh-Gq>b0T7=_yZ6elVx^U3&l)s^9}UhzhUE87;cAWHbV0G-IY-h z#q1($!8gpKwY)FdK0+7^lIh6hD>=SZDN(5=RPw6wOkmUmXZ5gLw@?-Iimf(Iz}RGd z8L}}*_meM61|Xz4n-ZA~U@5`RMXA5m-XHfBOH*qLUg&V|rwmHNBuNbu%>axp%$N_J zY;x`}-$RIe|2|s&Q&i=Q7Ubh}!Q1?&_%aQAUeqPhnV0F*Ao`EEukM^Pka6bm8%tAN(@teoLr}Jpi zeIiT;(_BMqJd5f+_d{Y9*m0hx_x2pXR>(!X?2LnL9s+$`3@qkAi2}^&P|jk!nwqMR zD*_`x%!!MjAOn#WQ>SReh8go+mEm;j^X}Z4SAI*n4|m-MNp~^#-?_a_6#k?og{J19 ztom}N<+B<|JHF$oFx;)31lG(+OZ8wEj2c(;q-JxhR=?_ic&0HIdTBtoTIju2+0A&+ zCnPn!HEgS}f0$*M>ZCFqJrNv#O=_}Ubg*w|Np)Lg(8luJ1AB4TVA1E7bdshbHwO~t zXB|&AOJD`oLXbibL;-p*(FO6RWGjbGdxQyT5QU|-o%&%*^8|U9@FDM#-o1%Uc$c)n zy9CV=d~HWivVJtTuv@ev~RIXb@1x3DZTIu6?ZJ>ZX|jTU#K>U zc<`1aU0!?n=VpS?=28Z^N2kw&qr3EMAWpO@ju4PLwjhNq@VlxEp4k}r#)886PkuE1 ztdgje#>3uj&?@maeuI*}Tk~-xKRf*DoPEpC^d#2ZI zkjr`?9wz2r4O9<<2QoyNB~?b%k{zca$459MzgS*d4x@^{PGGge+GX|D(o4u2bwqq; zCWKR;FBiWgfr^48?fm8MCvO~iB5NeA8=6x?D~%tOB%2JWl4HW%HP^o;XI&Hzw?g-y zXJL@IID5wLsr{wVtfDgi=DtUPPx--K>9&_3Xz3*VUd+#85ll>>n}#V4ZJ(^zZ#N4Z zQFw8FDxfEZsffsF#(R_D8*R&;I39DEpckq~8{(;~8Jr2YQdwX*CO-rsh z$EXg6mjAeI)SV5*M2^J++n8QRmkvf#@c31hk>|OjC8zd(O5;{h_s`AaPYHCm^;{!A zxSAR&#=K3U(uV3musS@eK;`)!;rBvL*>GZ7Bo45!RZ5P0iE1d$9a+QT5c%fkFG6r# zgm<=g>$_befqR$>n}v4$Rs>)AT|#wdqk$WSBJqT|vSm74)=jMQ@f#f-Gge6(b`@WL zog=kRZcLmgtgW}t93*zHj$tTM7q<+%WP4n{LPN2utjDK=3fP3ksfmr)t+Ut>!yB33 zHa(3sZck5X9G@c3^;%wNJVlgvQY^ARQKFJlnivKJ)}&1M_H%o$K+@q;cE_j=yOcN> zc4|yK$AP<&r5$j+JkY$3R>1GILXx(A;VXLZh~^Lm~&eN~2jzHjJ`^Kk=#!{fc18HcI0Qg=fsAy?%@rpsaCgBj0<7IM-o_{dKk4a zIff!qGQ1prkHa24dwWZf0Sa8;pTKeZbgvsKf~5Q%h(@{O>R=};&1(ZUSLFTuFW^?XZ#+M#HZ}TQIK`A`fB1ThHsXw2=-IPDqJ(S2pe@e-yJ-@*R2xm!6O*U;6jpqTEp7DVF z@x)O>QjL+PW&SJL{n`|3PkR)l%H1L#MH{5`SHBQ=Zi(v&OvPU_xwFYe(FFaPRvn1BQ!1hn6v<7o`v+VkK*rvm}Jyc?sg1+`)i~>_h)FD8iXT9yZlDAEJRwgZazW5X6xN zJGLl=Wh3m^_}sUx>-P8&CuOw2VNnXXlT#X0nb>>%;a{BdbxTrSA z6$>8acr9rC7N6jR`b!p_^jzV)_~oeSdm*%E<6?8>?W7{4Nf3tT8BMimgT;K~`R`eg z-kki}$KMlnXRIZA{1PfI*mf_Cu{1Ob`o)&?2={{WBgQj<@DkTu(s6QpZiB7TH#>6E z!P{u#W`&X^<;R(kXo_4xWE>@s2K-nN2S`fy%Bi#M}TSP-nF_j2kM}?yZNyTV7s$F~N+2oVI`;V{o zkTf9V^3y=j0$mC|FZaBG~<&BJ8$oD&5@6wLw6VRObwI!ju(I7+-~g7eqO z@VJo`Z65J_pZx}8NK}Q^{-IWXu1ak@IQ?Y$=)l+Nw z5h~n|`zU-%Q|?2jmuC%rb$O0W-4w~R5`Ubnikk5Vn>p>>9I^=9+h^QhJ_U~DhX z4}6}AsOzpGzOCVn^ARTNiB0l{b>c`3)S*0EC9o=^XvGRxcxkWr>f;SD%M` zb)1@8I1_e}m!L`r!0f>MRV7;oM+-EsvZfA(w){`ep)>6B&(n2>^012J>;+W0|4QyF zoO%tj>;f`w1prN~)=u0^0mA%OWaoLwhQsHbI&f<^2`M~ zQa-I!*=QfsACniJqmtPs-T7G3d8G~yKYMo4%o$!CM2%Gniyr?BX`^CzHFB9! zuG>9Bpox5W>QVy$%p&ha(G}$F8E*i56QjRAbusE5hcc%GbSa8kT z*g+H#)hYi_*LqoJ^oDM-k&*Tfbww@&G!MzWD}&b6i^md#?%A@&_TkpZ4`j)W<)j+) zmJy?_Mw5+pEvqk8Yrs8vHaVf)!s$fwHAvYrzCR)7V3T66gNPzB1Og==^S!^^BY6Id zjH_QL9%3K;g$KDaf-}1_kfySOMV8=@))fuI$pf!GNCL>g4_=f#AmHG!YmZPn&8=PR zF{H15009kQETZrbGgb*Bj(`2z%Ha^@g9IG6yTX-mV{gZ|#;A$n*QEbD&)t-@|<3LkJtvqKPiuvmJ3s$2d|jX>ptEp6Nu&9HDJEwWlBlx6*3<>@Xg@@gjY~`@ye-PlF@?x{GZpI&Y|xvQ$~S9tUZ#+m5}4Ba?(d5 zAm{oW$nj-BxLo@PshzQwz|ML@DgHMMAfor%oEf+-$W#ct20-srD>uQ+V2w%kGT|xUhSYMZvHBsH(fbKdA6sM^B!Za{PdHZ zI-xWMde)-PZiZGpZ>yiPk*Mfa6i0=mRiKxYrr$dW1XzRTugYQqm)C~Qft$~2zMDOA z4i{5?3$W{>pO$6g4m% zS_j6fy1ahWIeNd=kg@8Q+Z@61_wLYIjp|BhP)XR=f9J_jeq`jD)^R}-2cLuC+?47x zNf8gd=8B5`yyx?r9M6Fft4EMYhA({M!`%0HT7&e>Phn@OUi-5fZHt<=d?0tyOc)Xg zt8S>K4}JRSy1njf3=EjZs3xvqML2aiL@37%x7 z=T9Sd!V6fGgdaF1#=k2x-0r_*^a|VYW;pV8M+{L1-U%)2;UR(c<~21%nPHCeKe`#X zR9}!zIUg>DvJod+B^@v6fF!8f)L?Fe6UG+`PRdICkfVb^E8;PJ)){|G^sZr7<+~$! zZ?02K&BR!uT#>CNINsoM#z^+!3GsA8&D>&}xDQLZoZ+!apuftzxm51uJ9A`EDDbDe zUc+_ba9gM6i&^%zn*BR>Qu=dT`b5S1NW?!2yqVwZfg7PHg&EC7R6zyY2<<{QdU3;k z&0N*Wn*7Gd3UrO>%aGnXxp)alL&<|}Ikj|e0@;@5fwFa|%>CYZC*DBTgDjChZ^)JI*PbC0m=tA-&EB4nrLH!Ax67{lXm6O3t@11>B(#W1YI7Dbk*mF`dD^|;!wO>9t;q$oltgDeu zd9nBocV>)$U`W(ptOLvqSHA}%sp;}`{%+xAx^;{6wt2BHYCFQxYON#@Y^%FWepEL7AIA^iTzr3kmoq9*v z*tou@ixuSGU5>P_Z8)-lMTC&kS_u)NNjrU4$VscSWPHijUNEa!cU$ zm3+e`HgASAx>Z|AKX7ZZ*e%V?8T9oB!_|J)t?bDr3vrlIVL$&lYjAVv_Sk#Zd2CIQ zX2CeGW8a7=!(&gHJ#oH*?HFz{*<8O`z(UseXmRh=cb1PY?BNT+N>~VZ3(EqTL>>5r z*jc-R0nD8jwCulUN&e8;LbM1b%~J4%fLVgi1piPm9->6A{_KWeXpBa|##_5xhb##_ zV2J7K@$)67fV61@xe&xKulh=*^?@H34# z-OMxb*Ip`Ur*a6Vw(!l#{OzC?6i|x;ZM?3)U3IZUTRFqv1CntpRUmi+qelPZM)!^5 zisr-}Mvx&ejA~H)mLbefChk82_TzxTto4TKnqHDcs#QDv>m%zsY7Z;1zMGVkT;QoJ znEXH(y_RP>{{V-7OvhHXI56(oeH>amPUFD7oWW~-;S$0|@V1_N$(QtC>ze(uThQEk z!?U9|&c`3YaZ1aq@Non|ko|(eOjbqsLZNmR;~O;r8hBhALNI!RDSkVa`48uOU%Bxu zp@~)#feR^ikEUf;6Z0xK$<7mPB#e~v%g>|y+Yk-q-l<)llfElIQ_4)@#)V225v|m(6K2`?-td0oR^Xae?{gG54A1X@Syw^M8Cxfy+4$wq~gfLTx{sqh}>u_v+;Z-4mB*4Vm@Ev9u*=itJ@UKSe? zV(S_C$^ApZY{6BF(2}dd4LX@xE# n%aclTvpNM%y7;aA(0%AKgUBHGS%+htt1zt z7ou{;B%p4*c;eg`Q+$vdJ5hx+_3!_p}cLoPYbe6c9`CBi%}Yyvkc z0^w$=oN^{zjs zdSUixw2Yh<#f?!eHoKzo=WgNUC5j?Bk_&a8+gYllJxp_?69UUO<%k}f%3eaWNMdqu`Vq6{ z2l{AGke=jV$LnHeC*+I)&$c7e8@V?xJe88yl&)Y! zUf(yKma&(E$}UL`8A}IAl%>#+LdX&ZV`*j#!zfE7LWG3K)?zK&pbViw%GzehTF9Ec zq9n@i{*3cIr{8($zxn%qedd0i=f1D&eH~U;!A6Kyinegr==ul=9wGHk+fH^o5n!=m za{Nl3rf;(OTKx8?orkAtD1B6qdg_S~W@n1l?dFYT5?s(`NImkK0xSAfE+TaC^Opb^ zHartdf?DuGE!I@yI8gxWM52%(kA>*r<%M=2z#0b;2!m-GL?j?WEX<#NU*E+#_JRIn zqkIg}n$H;NG*{=x))aC}tAqXs`}B=Fn22``8=XU)F4R-J4re)~CV zL9M<#biOTYu14>#z4bx~#m;Rt?tNQy9^B1JkF#$tF#cB5|9#?yQr@^50U1^N>dfP)Q$$|foKEY_jz&yf$_Xb2+uSwJXKX+J(H|NC zG4%Eg)7XX>nd%QX%ca&}p69u@yY<)g?TYa;3GVU#oJPR0DMh=FDxP^<>us*YoKMV0 z({LsA0;>oG?ii(!-XYajrT$qG$HZ2QerRL~zAm9SoJdxm6&$@wweC+U@chC4s3+04 zAlwK(p%ELaw1SwFK%b3an4?53X&}4cfJ~8T(`uwzoJ<>WvWj$I%8oDnNh0kKZ z?fXgvIM7b=w|@~F5e_q1``BlkRBH+r>|Md>??i%!1QEK8t1&~2cv_w>P=;7B-ln=bntT5+V5GS4)!{Tt0_uA$yZJ)8W6 zeL|^b#>P+*tO&^dZOd0CoAEz!&(@H{+@?2rIqhR zoNxCR(x!28zJwe@j!GWx-n)Vnb3rRSKJs<3VE%rm@Pl8iY(;L?o?)3==LmbO3+O)M zQ!@tg(1w%u`s&Z}JtqVLe`maQW7z>N_coMn3@M`X_sn}9ghw?)e*>!1KB;7y6e^+ zt@!cJwZH7Ebh9jWBo(7zUqzU7Q>)g$QagaIeAYSbv=FEK3X%hFiYuU{Y5RuR{ygz< zlk9eDf{|+@CHIVk)yYAil5B(6p8W~E7eqqv2a}{iiz=}%VrI?PKf(*(RB~wb-spVm zUL8xk-^&|QW@%Eq=M6gPdkZfIiJPGKvR)-jblUIBeqZ-AL-uKG?p#+}#ZlQZ-o|t0 z*BXNoce*pcBp;&&oR(L55qc8>ojB|_!N1XO6QUtFO~5A`O64t_kuyb?;q&tx#e14q)u!`uRZCCbrQ((n z_KeDlC0bX@pMSKiN@Nxncg?kW*D0Sj6)6@7G z%>pieh)!Jftfx>B00JZ@w)6VWzG}Ls=@^B&v#?i&h|T87OA$3MAC(G#fta0Yj=^dF z`LyR^Cc>0Dn)P`ZhAY@O|7rzu4CTL=KXQI?BMV) z<`VN}n|ovSZ0fJ4?t-HC*2BVSKz4dV zs>c?f8!zs!`h%8RfsJNvyH{Y|HRHF_!S&?yJq~-K!GSw!Cld#o$+OLY`%{pe9>PaG z`wUF{wcOzreh+X-x)9p>IPy|sH#usv3u^#;Dki-(79q@wE2VH1o^s(TC3#DP!&`}g zg;;agr-$|RF~)g<7zNbEz=*(+?ZKMiusZBpz0n|gln7!>*FnwBE9%8Tf>xMGuxQ=@ zHLbMuDvt321ko(5#*^1eiQL3qa*;yWh4Y$qM!9aWTJrGy`m9$C#ghHZIbl>~TSuV- zY=GaVVM+1+Bb(SB)nLVM*_7>VI3{TsnL4#7o~D_1LQEfj|3L-i7Io1sf!p|9Ew5lF7TfK8pPT(|qUyUF{X$q0;56+)uh9z-B57}?>ixf92Ln@1N* z#L4NBNhG2%;w=0nhZGtxhA_GQQmg4WJ%ZT1t?T;rIw^_ONb$tgNby>=(JJ6CUj10Z zIkOA=mkBQGQ1wGS!}+)0H{U{!*>HXky9bb z6Dunq)_IJGb*SG$s-Y?pP?a^G2YMFAF-HwgXd3Iw9XaQ90@wyXee*KGIWum3$cLlD z5HfYS8B6vRX$5Qx9%>M+yn~Qlwk2yh3xU9ef^b-YD+yuVkl8%g9lMA z1_IU06Iq?D9QZO{detMkm5tilCnE>Yp?ZI8P*;7$M&p#?YAd$e)`+tqOF0F;8Xi2V zm}G9*U@SXPe*Y!1%G>=%Yux9lGZRbNeFHbk#i-blz1H1Lw1Okp7U?#=yS!&Ty-Ji+ zsFuN69f@hzKD|zueU6=GnS;1AH(T&u8WbJke&SMINWlr1LC6zD7Ns@YB<5SK5D*}` z+0cgx;_ZjseaA&vS18Q171U3mNT1)_co4PInkTzGg^b6kD9gcsolLSN|NS)oWxmc= z$oWmETXzG0wR8d)Ex10_RgMI zw40;*e`B@lH2J3B%!;hx%LO~iu5h6CNPfWnJv#)<3LpT%1lGalf9modJah3J0bA6j zX%n5|910vHyYp#ee%cN;4>qYn`5frZ&FxH?(nbkgm3p{|4#i`c<(4!?8V%5%U{c|6 zd(6+qMZYbn{|fDFi8=?SGp80+glEn7>PQpGBxc5(X*cdQ_=Kxi7@_PJV&KLQ1mKfN zkuhe@@E^Q}1<)j&!`;XV@;>JIEgOi8NQMfPbHE#0UNJ>@V|-7id2TcYQ=uNeRZkL~ zkQ_piryPbtaMdD_7}4~AhH84BXDBP6VPCX}YENGFC zQ?O8WQAhC#f4D)4JzcmB9#vs9m8E6ft|(L{p)Cq+);?*rC*RSe^Rjkm&a_peK=S#l zZ%FcP@cz7bsVzIOvYmtGL+IcU!(fQodw@v)Q+*+r)e+^ZfF%Duafst|yPI9c9t0xhV@CeHrqN9wD>7q~g ztU(<^8vL3&3_asxnr`UhWM?_XFQmUSMzf3t7FNILVL#hdbU&KQPjT1k7O<5KL>fp8 zo3!3Lri#T3pTGK-%9hlMB+gAbXC;bTrjNe$CHGpj$oc*JR_S+hF58aE)7({~d)y#_ zUohGr4fE%b&3i+?9{KY$>*;+*dgCd3W|nkX*r(ECQK!6JSmCr|o_2Ag2H8UB zoX-Hz0MV@{eN5O2p6(e-ntOU!%hI7|8usjy{0S=G9cy#SrNevlPQED0QO#^h&k=mq zYbc=+5Kbt7Q4cYTO@8BM__Ct2m{Igz_rhRH>@=;2f#)J2PRS_u!<8_FO;j1Dah&P zxUA28JLtTULLH4)&++&@X@~~}^0y9ABHn8;V{!EHtmhoKOAN(M-^5*ak=nLnSNLRC z`637IWz86?ZZ)^$^E_*z<9n$?fXQfz{^{O zn>CzB3!|Oyi7(n>nVq(`y(z^VY&qa0dfxDIO{poH`%y$MxBa=;xxno4mD%s&?@e)b z3#5wI!QY`CvhZJ8leVu*AlYLHhHzc-)Px%)q_;VEQ6St2#)eqH8acSwk^xnh`b$pl z{aCN@the5Sbzw`xUWS7APv<-pzT--*#(%QRSf3%x)VSU1=kiKb|Lj58omsC#V+-x= zZb4A*hAmffD^zNR_=Ka5s~GiVyRjGu%Y_Ae+A2Bhrm{JQq9Wo4@GGf&su_A;mwUCkxmH+!FIJ;$@Tlg~NFbACAxiNY$%R?QM|-+Tu& zz8C2meC^A^=Fa{Q<-V|l;_5tpdQU>_Z|(;O(|XOB8txp#r63d|Ie6IOAtMBu8=9fn zutk79p$M=?@$+pNynhsZ%QF+92a20%t!{BPSmti2u|m%8U6(Xi=8sm*0&H?84Aq`L z3BT^sxUHI5q?7LbiDiDqMRjNjdu5!M8tu@7PUFsw-oV~#Hn=sBEicpTz@s;s6f@vz}19NX?ba!ELWiD!SZ*BnXeQR>#IJV~hy9$IOZgf?&De);$ znwpMq%66u2*-p3RteU>v6%LRDC6q~m#fNQm-inw-%mOB2e$3R5`8BhH+{vtD&H<^1 zW!aW9oigo2cV(tXf*^2ka9;Ru@NtWl#aLup{l9RZId@#@FWyj3}yVByv;pJbwT4F;pe*)vqR^AoP;*hP&t;BocDlB2`Ig=5 z1&-CVSW?F4S%z}GHmRN{v`E?R{UQ7(Jwi=<%JMMVv~$hcP)lKApQ33n#bi%XW# z5v#5OTF?U^Ez%`m5ram06QDKASmHyOkVZM%-kRM>Gk86r^4Zo_{UBq(Ldi>>b0pmK z&iobXR}8Q?1opqW4BmuzWt-qGw5hz6g$Ju>r8?Z{89 z9-iB!V2p~a%z=JedaH+*&;%wz9LTh&dizn)>JC~>S<=*vuBN-1Zp|rJv%c&K6fiAK z?`eAH%rN?f)i?B(Mhrg2eL@o&K__#3C5B$X zeG$X`d@PDlnUI|QRsv~xG9uVSH-O|jDp=S<=w|hc)@guN;$KjrwK2&jbP>+ECc}gok|99wQ)o2_@x#xAJ{$3qd08&QZ1 z2y{u4Le9%N3Q&axZpS5lW*(twIt?N$b>jBZ<*pzN2E1VRhbeBClFiJ^sJPvvd>$8B zY)gK3xTLD-9I6tL81Xy80Jlp)BkJZzD&?j3EAyW~XS`yD`>mu=Eoc^73&QhCWXn;T z`Q7CP)ucYJY6zzxtOrK$;kOp1#L2?qLjL7yPK{{;#&kGa15yL}DhBjuzR*`e4GLaF zOiAF!4{l6(LMrMl8PAIk?o{753#`=LRgs0k+o{aQV=y1VM*f$N>q2sl7?_Gz+vG?@ z5k@wrx9iLMa5vSfa`NBzg&#!@Hp>OyCcE^K2lH=CFPFYyE`DSBvI6)hfR6(BY;={@ z1>aUP?ezdY2Kv8l?@b9nllywDFk8o2R8@!7QH-W{H-#Up5nC*)`mb!dNPdWkc{H3S;?5PBUA&V>_Kr zSFxJHSSo;0vsg@FEI)_G6vk3vER_gT7|X4D*O)#NWI6T4Rv;`NjK(|)VR^bVqNg{< zae2fP#&S~_%Ylevngkjy%aEE07rU|Qxx!g~+f4UzAY3&jkC7Z0FW)91qXoutWP*lR zfW%bj%U3eeJO<|i3lMglvW(+mz8c$CF}6n{0xJbvN5T^@uPPeDY))x0zM_+AHbbqL zzeUaG*D>aA74Y^62KE_%w{zIfBT%=)GDVthlY_zV_@tWFTQgwn&71c@aO-*=#Nd9x z_so^wQ)pa;##LzC&E`xpHDgUQuGM$UR;TkwFmBIKVBF6boCWDgIM`<7ig_|}Ak*q$ z!o6v*%Acj-^TC4SI5hC9%xOfRips2m@;oEH0E*?QfKtimcIlZRh+?lwyvN8De1-rK zgkLEEk{4wFRz`~)3;q?`wzUwGLgNn+6NCn zepgjvOY24ujQIugjDdxi_IHAv$=SSb(`G9K@@F#}hE@CRHW-RYP0d!CPyBI<`Yk_c z7pR&zjat9v=>`%7ISY|U7aS12}>DNv!<8bd(^0Z}Nnjq{j7u_+Xr5@8C(wsl`@_H#jO z3+~t|AlpMhnMVQHmd5nvKrRoNg0XE1#->sQDhS(S81Cf&A&!7?RZh9rGMc-`I|S}e zVv(g|p2uofU&XM#{ds37*B2*hKwrgxD#+otH|BdY+%Szuz;ZsS7WQl0fI=d^G$i5z zjPFrs#H!dfd0Pr?FlNb!{H>(P9<&sl+q%%|hxdUK>#skE6?}iPcT9%wKb#KsmT2`p zWeFMH^iLF8@LQT)3OMn(sefF}So3gRy>E9~J?l|$LECOw9b3T#A3r*~KoKYea`cpD zj0{*5k+Vt4YB1jro;qlk>}S6OZP=sx}|KM z5lw#OG#Pm!FGSKtG7lnrSta#UNj)1yrD+bvJF%Irp&O8wPsMv;!9S z4(nN4>tZuEW}Yc@<_qG#n?}aBfXV< z^(Zi_%F5VKI4f}QMIq9AAg!xQC|K*a&3G>dY$F%+V1B?8g_(ODLn@bN*=%`Mjq0ly z)iZi65)n@n{OyIo-xe3^A9DaUG^l_-EZZh;xEP2eDE&fYrv zDpx7<6bMd%;5MB-$k2@LdLTHvZ9yK^;W1f?=lAr`%2)Uc(w43Lf35+ zU3VvBtmk_)@Lapw)y=LST6)K1j%gYl)^n^LbGFunjHz^fit+AO$OO0G z!i{a+7jFMd*x2VpuWtHq3OUxC0Kn6o=SvQ`m(gsp)SdgvDHPea&4e!poH9G#cY55C zLaDqkl*;1b*W-XH15lG0lOUCt1;8f}!J(E5)IO4C4pUkE{63&cRk;GGD3FQ*scd>p z%+ky?K`K_?vRZD>eH2Q?X&D`Lu;XWp&R{kYh&R~*Cq+Br&{B_sXgvWom#7ta=X-Uz{@W|7vzDF)wj|N^#NYh)XnQd8=+^_d6U@`UO^&` z=|2nbSX*=T0p%io0S%CbB@x+(COnU~36AO|FDBb7Yd{1}HeyAM<4Lsoa{7KQ>3Vch z^~a|vzJwi;r)Ey+*dixY`+0rvWWHG%oHp;Y7Y(72quJ5k#Z)}YhBfwel6 z%21JO4RQ_tdUy|Pj0UdBdJgURUE4MN(6aoHIX!CWjM{of-%_wK1si)B6Zui0zN6=Q)4KoPy-71v~eC&z$XQKQX)(NpSJE@!g(s> z(;5Mo%6WSX;t4~EHwU!3qfk!`Kt1hF*O;(xG+OG!?WYRi^ldZT%Rx9D2^hEe3ZV+m zzlu@)iDxSF+3Ok3VN9cl#MPOh>ZHgQ2SOa|9GyHiOI8$!ga%@p>>-|oEu0KFzj1#m zthxquAf$pBDwyGB*HBGE(;aX@*Mb@9-M((OjBamzm?6B;ZFTE66wL5Zqq9S*v)oAS zl9TT+UsBdeC*RjFJx~KDlYtnqq##kXYego#LNMD{#L}|Ts-hVK34=MX5L%Zrlqho` zp+vrsVt&}`3|!zv$M4>U`HJdsQB+8b@MGic2uUPwVC4uWO|b7w}D6} zM>lNUwG`4xA)T7BYO9b=kLEO^qZ>U1bW%Vkg%W5Oiz%R!0y-(6Q^VLxG1p54I^75& zKNZkvjlfmyygdr(RK?4dz)sVf3h&eaywlGjy9gt3MQ*2YdidzTN58DlQr|Yaz8oM1 zBK-*Ue=C9PlDrCE^BRWrElWgu5x0RgwET+adHa$B#dDt~55S=WG??;? zRSR~3<#qj@Vfle>GcRPm&U(zZOyBE-f#doM9?Dx@yemB^$nL7l3j@9D=oY2a0At?p z7z?@q^Lw@#TA{sA*>nw$yki+J(2##Vj8(vbGSw=3OM}*OJhH6F7}GATCvZ3CGg5wN ziGL32+KD$I$V)p1r+Z&(Cb|!Rh79A(F#CF^uN$pS&t3yGwCar|(9leD?wlR&ydfcv zSU!WI?CuW+XtHO5`eV#)m4ka(;bewm>d}N?&Z&reXX=Lg{Wdu+{fKd&?D#y$$te^^ zq4u?bDhu!nIfUm|;km9G{l0GLu5CD>WqCTdv7V!MZO@@yC$xRfm$Ro~@Qb@q7Ed{q z@4yOtx#(#QP+9QYgksA@wyX`!)-(n(t|=vtlk_rim9usgA8fD9$%<)}0R5^0G*6kY zA%l)W-&fqGL}Y_Sq~cX288;^xDfmwGl8tCPVPz)rNm7ipI8=bliVCxrmEMP00vu@aC?7LbZ*m8^UQ zS?O`%iEEa(v(Ue>goEqcTD>l*m{3X1=1R^*7FMjP(;wkCdvXIjRZ72ZN-7&PbEnkEJ^R@ZpFMxxPD#XI=0%L;xi>An=K?2mnvzv0ci-d z_bxe}ah~G5uN*foL!;Nz+m=F&E2Z3QrL1^WNyg1d#x&;F?bH3i zO+N;1=(^EW9*h!}%@&q3_EmhU1m$x=FKTDTa81RDiW4{KMyF*IwGG=*e5d&CtMc9W zpA*fedHZO8FjUN@%)$nng^E>`Tx>`dQ((}L(L$b)sW?$_;zoRwwkM+EW=Kc3G?@{* z%J!YB(2ioqXLgxyaHp>Eq{u{2O7>LTskrlb)%K0#<89q^ds-oQs^NJX7m7C(Z$7)^ zyfj+6(&~ygH_e+#<}Uyru@XFnMnomHyh1=?1qolW}KEwaRatK*8zS50l{ zR;FW6?=Ylr+NkKyW2&y?JwI~c)!GvxzX4%32wDD zV8FmJPgt;`!P9D1H+KH?cl=^rlxaWnLv z#F)`s=B1WbmCUEnK~P<%y#A3fAO=keta*B;8kE}{@!|N#q$+%~y{n$zNxho|R+6qN^80*(BhQj4RftGPHRB0SNM5F? z$Ow+R5Zz71ySDa4+e+a>yx2RBkDzr&?F#xVaR>Xl7iGk({2#$PdVA2 zQVm|tXf~0YwBv(m2~sASkTdFEL=`I~6Y@p`6S9X|Gy~fCWLRXSk2&>$`2>74Za6XH za2;A6(rm;uBqSq8tf1Nsh~r7lbA0-)jA;V515P8DfFdd2-vPYJuE{AVD;ni6J9$bo z_&S@>7Ye=4Ml|97l#JPIGVSgU)*#b6MvIuH+S`%`Fvs2i-+^@!kX^=7ph$9AXB;KR zmDQL_-rC2RH-X8Ey$x&g0;|Re`ZJG$W|JmfZ#wQJfmR3&{vkgBb%b^%v|-AaKPJOT z0$oLJDs!AzZ&|{!s>M6OCChS}A!|*E)@*WQYfUJeL?_@)HtJrn*(M z`)u017SiFLJ~>DVHo{2;REVckLKRud^+JdU|0X;JdSa_*O~Tf3kD>2D!JVrNfL(Ewkh5`_1T5>5GagH;pup2na(ulG3gG)EbRy|77}F$Sugk*Rt63Ty zRaT5eP&peo#Sa3uWbwQYLv4UCZgAA*XLd|Q!r?TwJta`H>Eo?MpIs37Tx!7G;~f&9 zhnBP7N|yLiNJ8!Z@4x=HG4xz3#+fKbTeFx-LOZdE!WC*w&(Ujq@&poe3cMgn8G z)rldO(9_ylsF{Ib(J{Nmay%dhsfY!mpjZm{e@?PG0>TSaGj#v}!%AbGH($%HN2j5P z=!lPKKIfQ2kuWlKy++GyQ_k7Oo3Ty$TG(b#O9JTZK@^psfanUzfzo&^LudHC*U;}b z(7|y`vkUAc-0(#VLX+0PKG|(;E+x_5n5m_NT^HJ@j{Cr~B~jdL>a3@bcUev|G|2^M z8!)r0NPLbLC6vSz+A$>}twLYmcqe(vGa3lOz*32TPkN0f!#c}0C{#b>)Z-B^Cerx0 zf??0cJbe}2n=dfzG9Qd6xgLNlEj{ToP$U645fWuDqvKf)bK^VeK|zp&-#42E)_QSp zYnSX(P>e?+VA2EK&jffI9DB>iDZRoqnS|^%er99(fVIMEF=%qKFGP`ok1cN=3ZF_2 zKS*%-tv0n2xoV_=hG00S3w-n{+>HUKc9zRdPJOMH>|m`m)34Fut2``zjTSH{dfY?P z?B3zY^K10(edYU2#hEWfH5htw75$A65rY|gBBBYJcp$=t6I5Vzz!2YrG0!U74%osc zLsry|XtT+)=HPz-n-1oB4BDE|G!xf6rau4le-Z+;IQsNQAwY5O9_*47s6c+)J3VN8 zx7P_Ml}SKxMx&RPp{-H?zvCkrC!iBhYHwI1t_Zzr?vwBKt_zmn`sh!f4nSZuT<5LH z5Yw;{1_UZB$|(z2h~OzKx(^o!AP8O<0%bkEID?6x?eYp@vKVZ8f#IVy$NR@bTw$NC z#$cWog3$b;53j)lA^5eRjA}0kze?t(jmn@JSb+oz`4_mv0*t{itbia)xPZ>qi{E+5 z{8^Z;;aX))K0(OQWvxUCA@ORHnfO@dlRg=M0Lh@k6+~nk;YzhO+9sLsV3s8;&$mfF z0nZZwIMaeS3uz*fNem`f^H=QFgS!pO?2=8e#G6R?7c%dLT*#G@xb~>}Ab9g)n@G%C zQdFeaFC`@DECa#Yd`4P_8mBP!llkI&AG|FZAXT(5V+^c~JeMJCX^!ku9%28X4t(#` z5I_PTc@(jrPj(Ul25E-p|&F*x#9*Ag%9F}W^L=~&E%gbLc#Oeryw%5 zGZ8TffI)r1lDy1sAim$tcV5E_xbwQ%bii~3>v-_3EOi;mzWGZSuiRn1&0YH|qrp7xxFqz&9wY5*IcO65JS9FOnm! zo1C%{ZbiX(`6;XSq>Oobzm!2LuOz^Y2b+*9TfhJE`@ekLqGd4_S+$|c!yRo6*vlEP zQdm6NsqtA*7 zy0lAct9~iNU8O}<%1SPwgcr@Lo!3@DwwCrAPI4aO9PP^wE%Dz$T|4n61bK1i;B;>V zBhEjuQ=!6Ea^vk%zzYS2L7{}+a`6&(X^OCB5ZTx*Q#UP5?`ei{W|)1w)7OobZgu{B zYg$@rm)ZK+18=aI9+HeV9dT(Uf!xgmN$Vvy!qLVd|JXt{(yFbJWH%G3C$9goRf%&N zV2pa9QW7$XVU)Z@4hmU=#3m3lzkna4(X?26_OU>k@=zJr>|++Cs6`njJ76_{41L** zfPt1t$bD6b$7*1i{0PFa^KIglJSvFXoR(ZbjZ%o$A6K=a&-~-g@izH)u>S(FO?HPVF5H6sv-e?l=j=~8d1DU8I9+D#%v*BC1Yl9l zJW(lba5^y1fIJ-G{wFX+ryF=-W}%vjPT6c;)VH&G^5A7P%++tne~$hil5x+k!gF0W z`hA^Q9pCa<&ky~c)9tu4=ozMA25{RnJNDLmOSt5KCP-zq!~Rw7u>TtBQ)Puv`E{C` zUuS{i6{jlc`ux&$4~CyB$*TCZQT(cSP4U|E%f?lf=Rm}1#IDbWh2UTah?o`GLltxw(vdI!sajcS(FCr#% z#$uTvql7Wpox&;4-vWOZfprn22vfI_-wniEB0O|VRxN1!{awHaOL&kb(oAB z!So_#&EB3~pn*?=x*E$~p3d+5&m{Kh(cr>O2#u~Kxr~mosf5pU`l#q^D5$f#i2UE1qW=DT(`@J!}0oq3iKbS&F7^w8T<85NYzzM-Yb zTjE$niBwFpxiL+}uS!BbvxIE(JTF<^wk%ymC{={=1w<$-zFqI6auHykKmBitF%=Li z1qM};QFWpUCRd}0n(<_kY`B+)ZO7w+u&tBEcg+QT!H)G7DHZzcCta6ttZzBIUC zwv686l4H)_xFb2{5l?tbBf=4rJU>~WUJ&~0hl7D!3KGz=XG{BNQAPtAdWLUP+tw}5 z3~ZY@y4~$`oWNB<3T1+C$^^e9)s@euVie7dQ7Cp*@^Pc`F~w653#JLb5NVmu81Dv9 zT5+Qio-aUn-o?v`ZIuvx79px)yeh`~0%E*Vc3ms3iJPHOFemcZ%K4e$|D44k&c+#| zMNZD}j3F5SJ``8lA@B^IYd4fZUsgk`1~iu^4T0U;?8xsUXtam#+=$AAAb9cITfC;# z0bH_lULAV+YI=^*r#^WvZ{RU@c+@x|=8Bpl@Vv*Jv%&kLSJUG&=8qG3geQiYv!YK9 zZpGz>73LVRgsdRPW$dwxRL8bJZPjU@C$t#L;N7dC%6oN7`Sb39P zIVp2_V(29H1gI#ocg_6r!Sf%VVL{{`QoNcak&upQ0Dr>h*gNV=^^4ug|8JL9#& zI9k=w@^Vk{K*+!lG#8<;9xJXGh~0&Q=J)G^o0}aCt7h;zQNq)m{r!Uh+4*qxZtwW) zU~q8uH?niQbNIL6!H~S!8Sd?p_s3-S;O)WL&LP=9IDWf#dUASjd`5P6&UVQAeR8~a z_VfGGAIZt-`?L3h_lM-*=;Uzk2x{9oJ9vNG@aXy4lp2=VC7Z~g@fp1qiHId^dMCJK zS&nF)M%YBaVm0Vj;*m--%W1P(R`y56S z{?KTW^ZY#JX%(kAuPOpDoeC9LRDs1O2rQb`V*`uz8+Tx>7noRzq$v|mMHcF^e{A78 zraz&H@T!$ikWqdl{0m&@^DlA|^B|xTlysN;vQ8m^zl%)#W9!*4+Fgrw&A_2yCt$2Y zySmkNdLHXC+txc>(@=p;<+yLiaeq2BqTGJv_BYqxpLlCo=ef1vqws8@;FD28fiQL89 zA5#{^G%F_U4+-C8{*AobhX;ebu>j=p|e?#3I>5EtuF&$e_O z_|NRp&~i-2bAS`gjuYyJ!$K7oQ(oAHys&kJwDP-@-_=~dYXui8j#ZL#(~?tp^2(Ec z0iJxttZR7a`!L_gf;=QM$%9y{6Fd!uSBE>Cu(SYMnH)hk$S?(BWYrPInn!c+7KYV| zM6(e@YtyAFIN0rzT?7hUim04!#Kg_YBRuD!sN5Cp7DdP|G~ksGVmLn=2*#Pq&Brhq za`1-=M({+f5pL0i_rYDH1m+J++KN-a_d`V~kN*G$%9)=rS#q{@nPvAM0rCvNojVD$ z9JKkk6_!y{SNfLv+vJ#oB|uTY)OY7M=JJ*%7a+J%pk(uRB@Gs;+x?Y>G~?T3C*s=XG3W zdX~#<>iVqfhj!TU%#P`FJ2xzucQn#=f#E<{-Hrt<)aY2Y*X;zB=}rSlLUc!i}UZ0dICfXQXhz$lbnwdT3#cq zq1DBw{{_|$`R>pheoy`rfys)9PF{Ta1J7#Wxi%~VqE)|%VUX`WoEXOU+JM0T(1;Do z^wS@}f7J~}j^%)XXsd?tltI(MOJUWR7a);-D;fE2aC|!az8=b$GcWuncW{;q2k@+jHr+)QcFiWrZ4OUF`SeERPs zqZ7FOU&wc(Pk)H`(;q0g@Yq0n{(Xy_WrE*qU@q`HJrK_PW?TDcM*muI+cwFtCNaN* zYH`s$v36U}1_cfrC+u{+PzTG+GJA$^1)kIOEz9)`+cey@mpnFPicWnjb`Vs$o+<0> zt~qyye>SGka&vYLNt=*&-~?u5Co8xgF*KqN@kmv9=3!0g6|Lm~24LcT6zW6{|gx)n+p7 z986-xZEJCxu2}5zq?zKe^?9tNxa@I)ECw#im1(9#*b_1r!W$`H?DoeR@3_0Tn)b1Z zC(TKKu(c1Thg&6eJV3eN+-z4iO=OE^$m!V$r_{GaLc%(a$q?rh#dW#^``PGyTY zROu_{<0^iof-iRmUod_*7z}qSlES5Q7we!`PC<-@%Fy;4 zBCZJbh$RY8?N=gO-Z?S9yWF6f%;!}N;WWVdfQ)$ft%V`|`|#wTH9UBGymR==UIGe} zF`0057Ipr6ItKds`7iAu!V@EjZ$60WXc6=*nPR?GK(WNyEb$DmZ;_7D@=V0y?a2Yr z$SDg6qCQDb!iawQLkm9rk$(EW1=%?{A%@{}Oc0RdyQGZC!S3#{9Q83Y4!>8Bfaj@5 zaA>~2jT)z6$Rl1alSpLE9QXZi^n#JS5sN&QVSv59y>&l;{9$l6ZiQPSrQGweBVTxm zwc53D-In80#%$krdtKWxeO)(g+j0zM2R$R~^cKwff8RTPzx)2{Zo{8?L$7aced(&^ zDR;NaQegU5Il@7q} z-p*;C?D9}{y1<+;d)H}Jonc6Jrnyl;(4V&8k}#U{Xo4umkdMj?!6oGMct^|GZv;$) zi!c&bauRpmD5FO}RX#(bDe1hHbY25M z@>#@h7!u^09{D?501zij&DrH64w8+$myR4ccw(fQp|>2^QxCzY})CuIt$> z=+SQAhh|7+*|6idj@`BA!DThOnmxOq8>5WIz>1^8mE613(whxhZi1AmpSzau$_9U? z_$1L+EEs&#)VX77@H{WsvbdbxyffxhFSFhga*`$PFm=?*&4X!IzA%8wdEW0&J)tTJ zEZg*@>*7%F5>Ym}qqp0!%=_Y~OagKjTX)0)dCvT>A}o2wXaJITl_#}C-X(>KeyixWihh5E_==_J zov#@EcKf#8a`mo?ey<#WQ&6}3L`0KB#3(&4^;V~4nB<4_FF#N+&RF=L|FJ3+;ao7b zm#S#}8nvNB3U*k#s?BJ%T6Mku*!l|!Ym#$lUHviRhc^Ao5AF0X&lepw7;`$z>$zRm z@dN5wU<;eR+p%5KG8{)mhn4htSbC}G@arG>hQ_a4y<>H|&I^bRPg~l==&)`Xo$gX} z_}+N%v@!A`H^`6gv{&vU&l^QhyPh85^mNCU%nEENxaDf3CigH=4ZK~rOs@!*+p zqvFAjOT(?$wgK_NdtKE2)YE-jJkX>01x+6j3*3I7J{YTivMbK~3wmFz=C+D3stBWs zFn+F&?r6qCM|*v4gwfK$foOGlUz{)Xl@7oU>0gcoSs)B1j@q#<<$rMX3-Ee_*=96?Kr>{iDZncrcvI0dvd6m zG6{zY?ld;I)9u-AuVcS}VCl4_O$?SAhHE5B`NE(Rjo>6qqh7n`2_ z1eOcS`UsxX9~UYe@(~5^^m0Xr^r5Kek1#ZJn;c|(;qbcp>b}6JeDA@S>ySaiw#gn; zFt5G7TB_YztX;nMaP4CTy`EgS*6r%-<_B))NB8!a}3qIZDLk(Cx;P)(Ax2`NmQp za@vZ!LUD5F?g*5*wAa;b!#B}dH^Po-hutovjvxB25wHdY%GN#k`m=cZF~j@n!$QyJ zjy>-TZ>kSw>0P&HH6x~x-yhVdoBB*ajaxB_pq}7s3%k4eqb5azC&i60!WzDG102ek zI#CYgqC@$pgYTcglVWJ4^?L1-@xjTE{dPWGuLK_o2ld=A9_L5xvR@f+Cfg>b0$V-z zS!UPwK~SczKj^spL?gzpx5*LBxLEkg?D{^>t9tptZw$s1njA%+{@5l%9xr}odU>A* zHh=vEKwy+7^%XrSOVbTZYJDH10}7aDhSS%Hc1g1d=J0$s+`+PVe(NR6WYL1*2;eE;6CfM+ z@trZeU(kZ&tnOxu{NQDOA;$M4h8N{7au~U?O03CX)>Y*d!zPx=?WTWMoDTQDui9c_TYxvu>yF=Qh@{Tq=iy7TcHk#y z2i&;T%{rBsKL!e=Q%_`@Lq%;F217Qn2K|RYLRI9l$(j@GTF|--V`QYIQ?79?;TlmKbd@Jm9Eakr6 zmMJUU_l#L6gln>Pd#>K?x_;LUJ=+iUka~vYGt+Q-x}^t;hku5Al#kI6YLWxLfa_S! zz3pdArUL{P1)ZGVggAJUw%yX(5e7q%msK#J5q?icckOoEYfX8rWg4z-Ij+^ZG@2R} zxVOzs4G%mhOdsr+nlCS5zN`!wEK2fqLk3cs-ijH_?>_k|G+MFJ6T7296{KgmLG!yC zZ_tKU=_@6#f+{a5s4@Uc<9yjRe<+UfO+yQ2#}rfah)!9~@GvHF0QM&@N(?7`NWjL+ z^4cl=YstXC16>%%xv>zmIpWX)N)AEos$&4Q)HWrxP3i0GDljzz|NBbYl+0e==(Vhl ztF|ev9DsX)5zn$eiJBJmZMPeCb?OF7LCM57>QtDseNz;hbLR3>(AUF)_05?oJG!oU6(Fxr0<)bkz z$Q8|DqCyd1%z#|+VoXL%ROeXZ0oLgZ?In+I082O6Cag7T{o@~4m*!E#vgM5DG56bV zPfkf8Vl;}Oift&4x~Fj9ODLSIRORjk^1FtKn1TuB^t|MQK!UlFKqJ2fzafhycx0%=+9eXC2b>-ubts9!kl~syGDc$RkAXZDq2--9FG(^3 zuU$ch3MT6r{Q1vSYsNr6*|#eg`WY(?CeV@!JeX!E36Q7CoK@l6uN=7b!ydTb9h+Hh z*RpM+W9nAdFnez3xjke3!0q!WjSZvjj7OpFe8=qSUDlx;uVeWR1swn$0qdB)@A`~& zw{9*OllPz{l19ZV@4?;Ol~rhzM%wf>g|=%#SOx>+R@)aX-O+WUqc<32x2mc4#5q|q zT59TEGQz;nR|s+HHxA$YScy|$S0HmDXH^M4(4$%X)=_KKcelR$Y_+E_{p%3Y3*@|GLyEw9{Sb2DtS?k1ZmymV^`dg1odE<)GA_NMG=G1RV>M;zRK$AE#5 zx)Ry)h|TXVw`>FFk?+y07?UBcU;6UNOKSX}T3cE=O1(Kt@n^FYs>OAi<;5yov#1sm zNjP3}7;l*oKg#|ZT1w?euS{y*Ik#;OI!!F(~F9PB=g z?#IBl27gS=wz|63>vd}twbn^l-}IQGnhlCE%Fn~lEuVJ(+6rcy_nf#*?LFo zn1;PDn{KA#s>WE&sjoYyj?q9EmWfhHFK`msde7Eu+cg&^k)>492B*&uoP6?gi|n?@ z8Bl%Ew3|OtGwOxRC<`VN{OY;7zA&Tg#TiwPvYJ<4cV7J)kICPJP-^MrO(Iisb<@#I z$L%gmB1fsEO9p>xEg=*;dJERC1a}@7nl=r~1tm zrtVivPUH5SZmZ)uDml$vXJ}vQEu*F5iP_|bGJ?M%{uhv;FmDTj@`GGf37r4Q0`dcH znD|Rl#_T%HerU@pnRA#$k>*V_{C8f+qtha|U1EfZ2}zzZsHfg(f*VHiAKLIi@o9$oTc*}UQ;Xj}Gy4Pb) z;Cm`1&P$n3DkaX>R--Bt>9(V8> z)E5AKFdYK?BZsMeGQXkF<&6yjTbikN4Xx`KcY@C95ni#PvW%Ug3Df>2#Kkrqj|W`F zwieIFt8XY~Xe=|Bn$zocwXWsdiJ6)YvP$Qq(m6dUos*$Il+MYN`$Y_lb=&KubGq}5 z8`1F%gj|`;Lf7@(uEW4JwoJd{cEiwf4a+bbeeICzw~)+ckq_>SGS1uJIJ)h4fk``# zZuG*yWu2~V(5~ZHJ;!$!kC6M2TqNQOMdr+CR1wGL7Yhvvi`cGZcG^4;ek*49w+{_% zM4a(^r*iz8K57a%1hKzW1byxC1e+^3D%os`~{r>e0Eo=AR^lld@|c8L-35e#wKK_CUY(V2$FdOX`Ju}^*X&w0 z^#jxDu)yejQXXu0|28Kgs1=j literal 0 HcmV?d00001 From 9f73d93e624ae08ca61288503171226477fd87fd Mon Sep 17 00:00:00 2001 From: Serafeim Chatzopoulos Date: Tue, 3 Oct 2023 14:39:08 +0300 Subject: [PATCH 296/449] Add param for limiting repo Urls --- .../swh/CollectLastVisitRepositoryData.java | 34 ++++++++----------- .../swh/CollectSoftwareRepositoryURLs.java | 16 ++++++--- .../dnetlib/dhp/swh/PrepareSWHActionsets.java | 1 - ...nput_collect_software_repository_urls.json | 6 ++++ .../eu/dnetlib/dhp/swh/job.properties | 2 ++ .../eu/dnetlib/dhp/swh/oozie_app/workflow.xml | 1 + 6 files changed, 35 insertions(+), 25 deletions(-) diff --git a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/CollectLastVisitRepositoryData.java b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/CollectLastVisitRepositoryData.java index 296a4cce1..e602266a8 100644 --- a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/CollectLastVisitRepositoryData.java +++ b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/CollectLastVisitRepositoryData.java @@ -1,32 +1,26 @@ package eu.dnetlib.dhp.swh; -import static eu.dnetlib.dhp.utils.DHPUtils.getHadoopConfiguration; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.net.URISyntaxException; -import java.net.URL; -import java.nio.charset.StandardCharsets; - -import org.apache.commons.cli.ParseException; -import org.apache.commons.io.IOUtils; -import org.apache.hadoop.fs.FSDataInputStream; -import org.apache.hadoop.fs.FileStatus; -import org.apache.hadoop.fs.FileSystem; -import org.apache.hadoop.fs.Path; -import org.apache.hadoop.io.SequenceFile; -import org.apache.hadoop.io.Text; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import eu.dnetlib.dhp.application.ArgumentApplicationParser; import eu.dnetlib.dhp.common.collection.CollectorException; import eu.dnetlib.dhp.common.collection.HttpClientParams; import eu.dnetlib.dhp.swh.utils.SWHConnection; import eu.dnetlib.dhp.swh.utils.SWHConstants; import eu.dnetlib.dhp.swh.utils.SWHUtils; +import org.apache.commons.cli.ParseException; +import org.apache.commons.io.IOUtils; +import org.apache.hadoop.fs.FileStatus; +import org.apache.hadoop.fs.FileSystem; +import org.apache.hadoop.fs.Path; +import org.apache.hadoop.io.SequenceFile; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.BufferedReader; +import java.io.IOException; +import java.net.URL; + +import static eu.dnetlib.dhp.utils.DHPUtils.getHadoopConfiguration; /** * Given a file with software repository URLs, this class diff --git a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/CollectSoftwareRepositoryURLs.java b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/CollectSoftwareRepositoryURLs.java index 6232fa322..abd51bc5b 100644 --- a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/CollectSoftwareRepositoryURLs.java +++ b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/CollectSoftwareRepositoryURLs.java @@ -51,6 +51,9 @@ public class CollectSoftwareRepositoryURLs { final String hiveMetastoreUris = parser.get("hiveMetastoreUris"); log.info("hiveMetastoreUris: {}", hiveMetastoreUris); + final Integer softwareLimit = Integer.parseInt(parser.get("softwareLimit")); + log.info("softwareLimit: {}", softwareLimit); + SparkConf conf = new SparkConf(); conf.set("hive.metastore.uris", hiveMetastoreUris); @@ -58,18 +61,23 @@ public class CollectSoftwareRepositoryURLs { conf, isSparkSessionManaged, spark -> { - doRun(spark, hiveDbName, outputPath); + doRun(spark, hiveDbName, softwareLimit, outputPath); }); } - private static void doRun(SparkSession spark, String hiveDbName, String outputPath) { + private static void doRun(SparkSession spark, String hiveDbName, Integer limit, + String outputPath) { String queryTemplate = "SELECT distinct coderepositoryurl.value " + "FROM %s.software " + "WHERE coderepositoryurl.value IS NOT NULL " + "AND datainfo.deletedbyinference = FALSE " + - "AND datainfo.invisible = FALSE " + - "LIMIT 5000"; + "AND datainfo.invisible = FALSE "; + + if (limit != null) { + queryTemplate += String.format("LIMIT %s", limit); + } + String query = String.format(queryTemplate, hiveDbName); log.info("Hive query to fetch software code URLs: {}", query); diff --git a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/PrepareSWHActionsets.java b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/PrepareSWHActionsets.java index c0ab11bc4..c54e10d3e 100644 --- a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/PrepareSWHActionsets.java +++ b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/PrepareSWHActionsets.java @@ -82,7 +82,6 @@ public class PrepareSWHActionsets { softwareRDD .saveAsHadoopFile( outputPath, Text.class, Text.class, SequenceFileOutputFormat.class); -// , GzipCodec.class); }); } diff --git a/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/input_collect_software_repository_urls.json b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/input_collect_software_repository_urls.json index 6e98c7673..4459fe9df 100644 --- a/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/input_collect_software_repository_urls.json +++ b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/input_collect_software_repository_urls.json @@ -22,5 +22,11 @@ "paramLongName": "hiveMetastoreUris", "paramDescription": "the hive metastore uris", "paramRequired": true + }, + { + "paramName": "slim", + "paramLongName": "softwareLimit", + "paramDescription": "limit on the number of software repo URL to fetch", + "paramRequired": false } ] \ No newline at end of file diff --git a/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/job.properties b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/job.properties index 651bae337..8dd0689a3 100644 --- a/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/job.properties +++ b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/job.properties @@ -14,4 +14,6 @@ maxNumberOfRetry=2 retryDelay=1 requestDelay=100 +softwareLimit=500 + resume=collect-software-repository-urls diff --git a/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/oozie_app/workflow.xml b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/oozie_app/workflow.xml index 7aa667a4a..e0763414f 100644 --- a/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/oozie_app/workflow.xml @@ -83,6 +83,7 @@ --softwareCodeRepositoryURLs${softwareCodeRepositoryURLs} --hiveDbName${hiveDbName} --hiveMetastoreUris${hiveMetastoreUris} + --softwareLimit${softwareLimit} From 24c43e0c602254f506e81f1e3d361645b1a9d36e Mon Sep 17 00:00:00 2001 From: Serafeim Chatzopoulos Date: Tue, 3 Oct 2023 15:11:58 +0300 Subject: [PATCH 297/449] Restructure workflow parameters --- .../main/resources/eu/dnetlib/dhp/swh/job.properties | 2 -- .../eu/dnetlib/dhp/swh/oozie_app/config-default.xml | 4 ++++ .../eu/dnetlib/dhp/swh/oozie_app/workflow.xml | 12 ++++++++++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/job.properties b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/job.properties index 8dd0689a3..114181944 100644 --- a/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/job.properties +++ b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/job.properties @@ -1,8 +1,6 @@ # hive hiveDbName=openaire_prod_20230914 -sparkSqlWarehouseDir=/user/hive/warehouse - # input/output files softwareCodeRepositoryURLs=${workingDir}/1_code_repo_urls.csv lastVisitsPath=${workingDir}/2_last_visits.seq diff --git a/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/oozie_app/config-default.xml b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/oozie_app/config-default.xml index 7873d595e..3e45a53fa 100644 --- a/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/oozie_app/config-default.xml +++ b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/oozie_app/config-default.xml @@ -47,4 +47,8 @@ oozie.launcher.mapreduce.user.classpath.first true + + sparkSqlWarehouseDir + /user/hive/warehouse + \ No newline at end of file diff --git a/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/oozie_app/workflow.xml b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/oozie_app/workflow.xml index e0763414f..e29e5b43d 100644 --- a/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/oozie_app/workflow.xml @@ -18,6 +18,14 @@ archiveRequestsPath The path in the HDFS to save the responses of the archive requests + + actionsetsPath + The path in the HDFS to save the action sets + + + graphPath + The path in the HDFS to the base folder of the graph + maxNumberOfRetry Max number of retries for failed API calls @@ -30,6 +38,10 @@ requestDelay Delay between API requests (in ms) + + softwareLimit + Limit on the number of repo URLs to use (Optional); for debug purposes + resume Variable that indicates the step to start from From b49a3ac9b21233edb889b2e0e60dfa3ed8c02734 Mon Sep 17 00:00:00 2001 From: Serafeim Chatzopoulos Date: Tue, 3 Oct 2023 15:43:38 +0300 Subject: [PATCH 298/449] Add actionsetsPath as a global WF param --- .../swh/CollectLastVisitRepositoryData.java | 23 ++++++++++--------- .../eu/dnetlib/dhp/swh/oozie_app/workflow.xml | 4 ++++ 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/CollectLastVisitRepositoryData.java b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/CollectLastVisitRepositoryData.java index e602266a8..ce1b0bb46 100644 --- a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/CollectLastVisitRepositoryData.java +++ b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/CollectLastVisitRepositoryData.java @@ -1,12 +1,12 @@ package eu.dnetlib.dhp.swh; -import eu.dnetlib.dhp.application.ArgumentApplicationParser; -import eu.dnetlib.dhp.common.collection.CollectorException; -import eu.dnetlib.dhp.common.collection.HttpClientParams; -import eu.dnetlib.dhp.swh.utils.SWHConnection; -import eu.dnetlib.dhp.swh.utils.SWHConstants; -import eu.dnetlib.dhp.swh.utils.SWHUtils; +import static eu.dnetlib.dhp.utils.DHPUtils.getHadoopConfiguration; + +import java.io.BufferedReader; +import java.io.IOException; +import java.net.URL; + import org.apache.commons.cli.ParseException; import org.apache.commons.io.IOUtils; import org.apache.hadoop.fs.FileStatus; @@ -16,11 +16,12 @@ import org.apache.hadoop.io.SequenceFile; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.BufferedReader; -import java.io.IOException; -import java.net.URL; - -import static eu.dnetlib.dhp.utils.DHPUtils.getHadoopConfiguration; +import eu.dnetlib.dhp.application.ArgumentApplicationParser; +import eu.dnetlib.dhp.common.collection.CollectorException; +import eu.dnetlib.dhp.common.collection.HttpClientParams; +import eu.dnetlib.dhp.swh.utils.SWHConnection; +import eu.dnetlib.dhp.swh.utils.SWHConstants; +import eu.dnetlib.dhp.swh.utils.SWHUtils; /** * Given a file with software repository URLs, this class diff --git a/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/oozie_app/workflow.xml b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/oozie_app/workflow.xml index e29e5b43d..c69ecd74d 100644 --- a/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/oozie_app/workflow.xml @@ -57,6 +57,10 @@ oozie.action.sharelib.for.spark ${oozieActionShareLibForSpark2} + + actionsetsPath + ${actionsetsPath} + From cae75fc75da4410289e1d5107073c5b112520003 Mon Sep 17 00:00:00 2001 From: Serafeim Chatzopoulos Date: Tue, 3 Oct 2023 16:55:10 +0300 Subject: [PATCH 299/449] Add SWH in the collectedFrom field --- .../java/eu/dnetlib/dhp/swh/PrepareSWHActionsets.java | 8 ++++++++ .../main/java/eu/dnetlib/dhp/swh/utils/SWHConstants.java | 4 ++++ 2 files changed, 12 insertions(+) diff --git a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/PrepareSWHActionsets.java b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/PrepareSWHActionsets.java index c54e10d3e..93d111039 100644 --- a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/PrepareSWHActionsets.java +++ b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/PrepareSWHActionsets.java @@ -165,6 +165,14 @@ public class PrepareSWHActionsets { row.getString(row.fieldIndex("swhid")), qualifier, dataInfo))); + + // add SWH in the `collectedFrom` field + KeyValue kv = new KeyValue(); + kv.setKey(SWHConstants.SWH_ID); + kv.setValue(SWHConstants.SWH_NAME); + + s.setCollectedfrom(Arrays.asList(kv)); + return s; }, Encoders.bean(Software.class)) .toJavaRDD() diff --git a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/utils/SWHConstants.java b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/utils/SWHConstants.java index 08400f28b..efd0e708b 100644 --- a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/utils/SWHConstants.java +++ b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/utils/SWHConstants.java @@ -16,4 +16,8 @@ public class SWHConstants { public static final String SWHID_CLASSNAME = "Software Heritage Identifier"; + public static final String SWH_ID = "10|openaire____::dbfd07503aaa1ed31beed7dec942f3f4"; + + public static final String SWH_NAME = "Software Heritage"; + } From e9f24df21cce089aec7945b2f50f20cbe1acc062 Mon Sep 17 00:00:00 2001 From: Serafeim Chatzopoulos Date: Tue, 3 Oct 2023 20:57:57 +0300 Subject: [PATCH 300/449] Move SWH API Key from constants to workflow param --- .../java/eu/dnetlib/dhp/swh/ArchiveRepositoryURLs.java | 5 ++++- .../dhp/swh/CollectLastVisitRepositoryData.java | 5 ++++- .../java/eu/dnetlib/dhp/swh/utils/SWHConnection.java | 6 ++++-- .../java/eu/dnetlib/dhp/swh/utils/SWHConstants.java | 2 -- .../dnetlib/dhp/swh/input_archive_repository_urls.json | 6 ++++++ .../swh/input_collect_last_visit_repository_data.json | 6 ++++++ .../main/resources/eu/dnetlib/dhp/swh/job.properties | 2 ++ .../eu/dnetlib/dhp/swh/oozie_app/workflow.xml | 10 ++++++++++ .../java/eu/dnetlib/dhp/swh/SWHConnectionTest.java | 4 ++-- 9 files changed, 38 insertions(+), 8 deletions(-) diff --git a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/ArchiveRepositoryURLs.java b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/ArchiveRepositoryURLs.java index f02861953..baa510346 100644 --- a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/ArchiveRepositoryURLs.java +++ b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/ArchiveRepositoryURLs.java @@ -63,9 +63,12 @@ public class ArchiveRepositoryURLs { final Integer archiveThresholdInDays = Integer.parseInt(argumentParser.get("archiveThresholdInDays")); log.info("archiveThresholdInDays: {}", archiveThresholdInDays); + final String apiAccessToken = argumentParser.get("apiAccessToken"); + log.info("apiAccessToken: {}", apiAccessToken); + final HttpClientParams clientParams = SWHUtils.getClientParams(argumentParser); - swhConnection = new SWHConnection(clientParams); + swhConnection = new SWHConnection(clientParams, apiAccessToken); final FileSystem fs = FileSystem.get(getHadoopConfiguration(hdfsuri)); diff --git a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/CollectLastVisitRepositoryData.java b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/CollectLastVisitRepositoryData.java index ce1b0bb46..ebb9176ff 100644 --- a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/CollectLastVisitRepositoryData.java +++ b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/CollectLastVisitRepositoryData.java @@ -55,9 +55,12 @@ public class CollectLastVisitRepositoryData { final String outputPath = argumentParser.get("lastVisitsPath"); log.info("outputPath: {}", outputPath); + final String apiAccessToken = argumentParser.get("apiAccessToken"); + log.info("apiAccessToken: {}", apiAccessToken); + final HttpClientParams clientParams = SWHUtils.getClientParams(argumentParser); - swhConnection = new SWHConnection(clientParams); + swhConnection = new SWHConnection(clientParams, apiAccessToken); final FileSystem fs = FileSystem.get(getHadoopConfiguration(hdfsuri)); diff --git a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/utils/SWHConnection.java b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/utils/SWHConnection.java index 9c145fc19..80249e816 100644 --- a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/utils/SWHConnection.java +++ b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/utils/SWHConnection.java @@ -14,13 +14,15 @@ public class SWHConnection { HttpConnector2 conn; - public SWHConnection(HttpClientParams clientParams) { + public SWHConnection(HttpClientParams clientParams, String accessToken) { // set custom headers Map headers = new HashMap() { { put(HttpHeaders.ACCEPT, "application/json"); - put(HttpHeaders.AUTHORIZATION, String.format("Bearer %s", SWHConstants.ACCESS_TOKEN)); + if (accessToken != null) { + put(HttpHeaders.AUTHORIZATION, String.format("Bearer %s", accessToken)); + } } }; diff --git a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/utils/SWHConstants.java b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/utils/SWHConstants.java index efd0e708b..eae839cfd 100644 --- a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/utils/SWHConstants.java +++ b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/utils/SWHConstants.java @@ -6,8 +6,6 @@ public class SWHConstants { public static final String SWH_ARCHIVE_URL = "https://archive.softwareheritage.org/api/1/origin/save/%s/url/%s/"; - public static final String ACCESS_TOKEN = "eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJhMTMxYTQ1My1hM2IyLTQwMTUtODQ2Ny05MzAyZjk3MTFkOGEifQ.eyJpYXQiOjE2OTQ2MzYwMjAsImp0aSI6IjkwZjdkNTNjLTQ5YTktNGFiMy1hY2E0LTcwMTViMjEyZTNjNiIsImlzcyI6Imh0dHBzOi8vYXV0aC5zb2Z0d2FyZWhlcml0YWdlLm9yZy9hdXRoL3JlYWxtcy9Tb2Z0d2FyZUhlcml0YWdlIiwiYXVkIjoiaHR0cHM6Ly9hdXRoLnNvZnR3YXJlaGVyaXRhZ2Uub3JnL2F1dGgvcmVhbG1zL1NvZnR3YXJlSGVyaXRhZ2UiLCJzdWIiOiIzMTY5OWZkNC0xNmE0LTQxOWItYTdhMi00NjI5MDY4ZjI3OWEiLCJ0eXAiOiJPZmZsaW5lIiwiYXpwIjoic3doLXdlYiIsInNlc3Npb25fc3RhdGUiOiIzMjYzMzEwMS00ZDRkLTQwMjItODU2NC1iMzNlMTJiNTE3ZDkiLCJzY29wZSI6Im9wZW5pZCBvZmZsaW5lX2FjY2VzcyBwcm9maWxlIGVtYWlsIn0.XHj1VIZu1dZ4Ej32-oU84mFmaox9cLNjXosNxwZM0Xs"; - public static final String DEFAULT_VISIT_TYPE = "git"; public static final String VISIT_STATUS_NOT_FOUND = "not_found"; diff --git a/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/input_archive_repository_urls.json b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/input_archive_repository_urls.json index ce80d6f4a..e8671f71b 100644 --- a/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/input_archive_repository_urls.json +++ b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/input_archive_repository_urls.json @@ -46,5 +46,11 @@ "paramLongName": "archiveThresholdInDays", "paramDescription": "the thershold (in days) required to issue an archive request", "paramRequired": false + }, + { + "paramName": "aat", + "paramLongName": "apiAccessToken", + "paramDescription": "the API access token of the SWH API", + "paramRequired": false } ] \ No newline at end of file diff --git a/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/input_collect_last_visit_repository_data.json b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/input_collect_last_visit_repository_data.json index 8bf41f0ae..662582dfe 100644 --- a/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/input_collect_last_visit_repository_data.json +++ b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/input_collect_last_visit_repository_data.json @@ -40,5 +40,11 @@ "paramLongName": "requestMethod", "paramDescription": "the method of the requests to perform", "paramRequired": false + }, + { + "paramName": "aat", + "paramLongName": "apiAccessToken", + "paramDescription": "the API access token of the SWH API", + "paramRequired": false } ] \ No newline at end of file diff --git a/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/job.properties b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/job.properties index 114181944..35c068286 100644 --- a/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/job.properties +++ b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/job.properties @@ -8,6 +8,8 @@ archiveRequestsPath=${workingDir}/3_archive_requests.seq actionsetsPath=${workingDir}/4_actionsets graphPath=/tmp/prod_provision/graph/18_graph_blacklisted +apiAccessToken=eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJhMTMxYTQ1My1hM2IyLTQwMTUtODQ2Ny05MzAyZjk3MTFkOGEifQ.eyJpYXQiOjE2OTQ2MzYwMjAsImp0aSI6IjkwZjdkNTNjLTQ5YTktNGFiMy1hY2E0LTcwMTViMjEyZTNjNiIsImlzcyI6Imh0dHBzOi8vYXV0aC5zb2Z0d2FyZWhlcml0YWdlLm9yZy9hdXRoL3JlYWxtcy9Tb2Z0d2FyZUhlcml0YWdlIiwiYXVkIjoiaHR0cHM6Ly9hdXRoLnNvZnR3YXJlaGVyaXRhZ2Uub3JnL2F1dGgvcmVhbG1zL1NvZnR3YXJlSGVyaXRhZ2UiLCJzdWIiOiIzMTY5OWZkNC0xNmE0LTQxOWItYTdhMi00NjI5MDY4ZjI3OWEiLCJ0eXAiOiJPZmZsaW5lIiwiYXpwIjoic3doLXdlYiIsInNlc3Npb25fc3RhdGUiOiIzMjYzMzEwMS00ZDRkLTQwMjItODU2NC1iMzNlMTJiNTE3ZDkiLCJzY29wZSI6Im9wZW5pZCBvZmZsaW5lX2FjY2VzcyBwcm9maWxlIGVtYWlsIn0.XHj1VIZu1dZ4Ej32-oU84mFmaox9cLNjXosNxwZM0Xs + maxNumberOfRetry=2 retryDelay=1 requestDelay=100 diff --git a/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/oozie_app/workflow.xml b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/oozie_app/workflow.xml index c69ecd74d..64dc0d2aa 100644 --- a/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/oozie_app/workflow.xml @@ -38,6 +38,10 @@ requestDelay Delay between API requests (in ms) + + apiAccessToken + The API Key of the SWH API + softwareLimit Limit on the number of repo URLs to use (Optional); for debug purposes @@ -61,6 +65,10 @@ actionsetsPath ${actionsetsPath} + + apiAccessToken + ${apiAccessToken} + @@ -117,6 +125,7 @@ --requestDelay${requestDelay} --retryDelay${retryDelay} --requestMethodGET + --apiAccessToken${apiAccessToken} @@ -136,6 +145,7 @@ --requestDelay${requestDelay} --retryDelay${retryDelay} --requestMethodPOST + --apiAccessToken${apiAccessToken} diff --git a/dhp-workflows/dhp-swh/src/test/java/eu/dnetlib/dhp/swh/SWHConnectionTest.java b/dhp-workflows/dhp-swh/src/test/java/eu/dnetlib/dhp/swh/SWHConnectionTest.java index 28210f1b3..b19e0e7ac 100644 --- a/dhp-workflows/dhp-swh/src/test/java/eu/dnetlib/dhp/swh/SWHConnectionTest.java +++ b/dhp-workflows/dhp-swh/src/test/java/eu/dnetlib/dhp/swh/SWHConnectionTest.java @@ -25,7 +25,7 @@ public class SWHConnectionTest { HttpClientParams clientParams = new HttpClientParams(); clientParams.setRequestMethod("GET"); - SWHConnection swhConnection = new SWHConnection(clientParams); + SWHConnection swhConnection = new SWHConnection(clientParams, null); String repoUrl = "https://github.com/stanford-futuredata/FAST"; URL url = new URL(String.format(SWHConstants.SWH_LATEST_VISIT_URL, repoUrl)); @@ -43,7 +43,7 @@ public class SWHConnectionTest { HttpClientParams clientParams = new HttpClientParams(); clientParams.setRequestMethod("POST"); - SWHConnection swhConnection = new SWHConnection(clientParams); + SWHConnection swhConnection = new SWHConnection(clientParams, null); String repoUrl = "https://github.com/stanford-futuredata/FAST"; URL url = new URL(String.format(SWHConstants.SWH_ARCHIVE_URL, SWHConstants.DEFAULT_VISIT_TYPE, repoUrl)); From ee8a39e7d2dcd121d88c1bb84eb4794024fe6a16 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Wed, 4 Oct 2023 12:32:05 +0200 Subject: [PATCH 301/449] cleanup and refinements --- .../CreateActionSetSparkJob.java | 63 ++++++++++++------- .../opencitations/GetOpenCitationsRefs.java | 3 +- .../actionmanager/opencitations/ReadCOCI.java | 9 +-- .../opencitations/as_parameters.json | 18 +++--- .../opencitations/oozie_app/workflow.xml | 3 +- 5 files changed, 55 insertions(+), 41 deletions(-) diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/opencitations/CreateActionSetSparkJob.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/opencitations/CreateActionSetSparkJob.java index e3a9833b3..2db756a94 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/opencitations/CreateActionSetSparkJob.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/opencitations/CreateActionSetSparkJob.java @@ -32,18 +32,28 @@ import eu.dnetlib.dhp.schema.oaf.*; import eu.dnetlib.dhp.schema.oaf.utils.CleaningFunctions; import eu.dnetlib.dhp.schema.oaf.utils.IdentifierFactory; import eu.dnetlib.dhp.schema.oaf.utils.OafMapperUtils; +import eu.dnetlib.dhp.schema.oaf.utils.PidType; import eu.dnetlib.dhp.utils.DHPUtils; import scala.Tuple2; public class CreateActionSetSparkJob implements Serializable { public static final String OPENCITATIONS_CLASSID = "sysimport:crosswalk:opencitations"; public static final String OPENCITATIONS_CLASSNAME = "Imported from OpenCitations"; + + // DOI-to-DOI citations + public static final String COCI = "COCI"; + + // PMID-to-PMID citations + public static final String POCI = "POCI"; + private static final String DOI_PREFIX = "50|doi_________::"; private static final String PMID_PREFIX = "50|pmid________::"; + private static final String TRUST = "0.91"; private static final Logger log = LoggerFactory.getLogger(CreateActionSetSparkJob.class); + private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); public static void main(final String[] args) throws IOException, ParseException { @@ -67,7 +77,7 @@ public class CreateActionSetSparkJob implements Serializable { log.info("isSparkSessionManaged: {}", isSparkSessionManaged); final String inputPath = parser.get("inputPath"); - log.info("inputPath {}", inputPath.toString()); + log.info("inputPath {}", inputPath); final String outputPath = parser.get("outputPath"); log.info("outputPath {}", outputPath); @@ -81,19 +91,16 @@ public class CreateActionSetSparkJob implements Serializable { runWithSparkSession( conf, isSparkSessionManaged, - spark -> { - extractContent(spark, inputPath, outputPath, shouldDuplicateRels); - }); + spark -> extractContent(spark, inputPath, outputPath, shouldDuplicateRels)); } private static void extractContent(SparkSession spark, String inputPath, String outputPath, boolean shouldDuplicateRels) { - getTextTextJavaPairRDD(spark, inputPath, shouldDuplicateRels, "COCI") - .union(getTextTextJavaPairRDD(spark, inputPath, shouldDuplicateRels, "POCI")) + getTextTextJavaPairRDD(spark, inputPath, shouldDuplicateRels, COCI) + .union(getTextTextJavaPairRDD(spark, inputPath, shouldDuplicateRels, POCI)) .saveAsHadoopFile(outputPath, Text.class, Text.class, SequenceFileOutputFormat.class); - } private static JavaPairRDD getTextTextJavaPairRDD(SparkSession spark, String inputPath, @@ -109,7 +116,7 @@ public class CreateActionSetSparkJob implements Serializable { value, shouldDuplicateRels, prefix) .iterator(), Encoders.bean(Relation.class)) - .filter((FilterFunction) value -> value != null) + .filter((FilterFunction) Objects::nonNull) .toJavaRDD() .map(p -> new AtomicAction(p.getClass(), p)) .mapToPair( @@ -123,20 +130,28 @@ public class CreateActionSetSparkJob implements Serializable { String prefix; String citing; String cited; - if (p.equals("COCI")) { - prefix = DOI_PREFIX; - citing = prefix - + IdentifierFactory.md5(CleaningFunctions.normalizePidValue("doi", value.getCiting())); - cited = prefix - + IdentifierFactory.md5(CleaningFunctions.normalizePidValue("doi", value.getCited())); - - } else { - prefix = PMID_PREFIX; - citing = prefix - + IdentifierFactory.md5(CleaningFunctions.normalizePidValue("pmid", value.getCiting())); - cited = prefix - + IdentifierFactory.md5(CleaningFunctions.normalizePidValue("pmid", value.getCited())); + switch (p) { + case COCI: + prefix = DOI_PREFIX; + citing = prefix + + IdentifierFactory + .md5(CleaningFunctions.normalizePidValue(PidType.doi.toString(), value.getCiting())); + cited = prefix + + IdentifierFactory + .md5(CleaningFunctions.normalizePidValue(PidType.doi.toString(), value.getCited())); + break; + case POCI: + prefix = PMID_PREFIX; + citing = prefix + + IdentifierFactory + .md5(CleaningFunctions.normalizePidValue(PidType.pmid.toString(), value.getCiting())); + cited = prefix + + IdentifierFactory + .md5(CleaningFunctions.normalizePidValue(PidType.pmid.toString(), value.getCited())); + break; + default: + throw new IllegalStateException("Invalid prefix: " + p); } if (!citing.equals(cited)) { @@ -162,7 +177,7 @@ public class CreateActionSetSparkJob implements Serializable { public static Relation getRelation( String source, String target, - String relclass) { + String relClass) { return OafMapperUtils .getRelation( @@ -170,7 +185,7 @@ public class CreateActionSetSparkJob implements Serializable { target, ModelConstants.RESULT_RESULT, ModelConstants.CITATION, - relclass, + relClass, Arrays .asList( OafMapperUtils.keyValue(ModelConstants.OPENOCITATIONS_ID, ModelConstants.OPENOCITATIONS_NAME)), @@ -183,6 +198,6 @@ public class CreateActionSetSparkJob implements Serializable { ModelConstants.DNET_PROVENANCE_ACTIONS, ModelConstants.DNET_PROVENANCE_ACTIONS), TRUST), null); - } + } diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/opencitations/GetOpenCitationsRefs.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/opencitations/GetOpenCitationsRefs.java index 60dc998ef..600cf7df1 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/opencitations/GetOpenCitationsRefs.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/opencitations/GetOpenCitationsRefs.java @@ -3,6 +3,7 @@ package eu.dnetlib.dhp.actionmanager.opencitations; import java.io.*; import java.io.Serializable; +import java.util.Arrays; import java.util.Objects; import java.util.zip.GZIPOutputStream; import java.util.zip.ZipEntry; @@ -37,7 +38,7 @@ public class GetOpenCitationsRefs implements Serializable { parser.parseArgument(args); final String[] inputFile = parser.get("inputFile").split(";"); - log.info("inputFile {}", inputFile.toString()); + log.info("inputFile {}", Arrays.asList(inputFile)); final String workingPath = parser.get("workingPath"); log.info("workingPath {}", workingPath); diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/opencitations/ReadCOCI.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/opencitations/ReadCOCI.java index 3d384de9d..b9c24df3b 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/opencitations/ReadCOCI.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/opencitations/ReadCOCI.java @@ -7,6 +7,7 @@ import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkSession; import java.io.IOException; import java.io.Serializable; +import java.util.Arrays; import java.util.Optional; import org.apache.commons.io.IOUtils; @@ -42,7 +43,7 @@ public class ReadCOCI implements Serializable { log.info("outputPath: {}", outputPath); final String[] inputFile = parser.get("inputFile").split(";"); - log.info("inputFile {}", inputFile.toString()); + log.info("inputFile {}", Arrays.asList(inputFile)); Boolean isSparkSessionManaged = isSparkSessionManaged(parser); log.info("isSparkSessionManaged: {}", isSparkSessionManaged); @@ -74,10 +75,10 @@ public class ReadCOCI implements Serializable { private static void doRead(SparkSession spark, String workingPath, String[] inputFiles, String outputPath, - String delimiter, String format) throws IOException { + String delimiter, String format) { for (String inputFile : inputFiles) { - String p_string = workingPath + "/" + inputFile + ".gz"; + String pString = workingPath + "/" + inputFile + ".gz"; Dataset cociData = spark .read() @@ -86,7 +87,7 @@ public class ReadCOCI implements Serializable { .option("inferSchema", "true") .option("header", "true") .option("quotes", "\"") - .load(p_string) + .load(pString) .repartition(100); cociData.map((MapFunction) row -> { diff --git a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/opencitations/as_parameters.json b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/opencitations/as_parameters.json index e25d1f4b8..5244a6fe4 100644 --- a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/opencitations/as_parameters.json +++ b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/opencitations/as_parameters.json @@ -16,15 +16,11 @@ "paramLongName": "isSparkSessionManaged", "paramDescription": "the hdfs name node", "paramRequired": false - }, { - "paramName": "sdr", - "paramLongName": "shouldDuplicateRels", - "paramDescription": "the hdfs name node", - "paramRequired": false -},{ - "paramName": "p", - "paramLongName": "prefix", - "paramDescription": "the hdfs name node", - "paramRequired": true -} + }, + { + "paramName": "sdr", + "paramLongName": "shouldDuplicateRels", + "paramDescription": "activates/deactivates the construction of bidirectional relations Cites/IsCitedBy", + "paramRequired": false + } ] diff --git a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/opencitations/oozie_app/workflow.xml b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/opencitations/oozie_app/workflow.xml index d87dfa2ba..deb32459b 100644 --- a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/opencitations/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/opencitations/oozie_app/workflow.xml @@ -34,6 +34,7 @@ Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + ${jobTracker} @@ -54,6 +55,7 @@ + eu.dnetlib.dhp.actionmanager.opencitations.GetOpenCitationsRefs @@ -112,7 +114,6 @@ --inputPath${workingPath} --outputPath${outputPath} - --prefix${prefix} From 1bb83b91880933cee1a39aaa59ad0c70f5086156 Mon Sep 17 00:00:00 2001 From: Serafeim Chatzopoulos Date: Wed, 4 Oct 2023 20:31:45 +0300 Subject: [PATCH 302/449] Add prefix in SWH ID --- .../src/main/java/eu/dnetlib/dhp/swh/PrepareSWHActionsets.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/PrepareSWHActionsets.java b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/PrepareSWHActionsets.java index 93d111039..2239244d6 100644 --- a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/PrepareSWHActionsets.java +++ b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/PrepareSWHActionsets.java @@ -162,7 +162,7 @@ public class PrepareSWHActionsets { .asList( OafMapperUtils .structuredProperty( - row.getString(row.fieldIndex("swhid")), + String.format("swh:1:snp:%s", row.getString(row.fieldIndex("swhid"))), qualifier, dataInfo))); From 13f332ce77e3ef7a03ba6e0b31419cf7caf3ea8e Mon Sep 17 00:00:00 2001 From: Sandro La Bruzzo Date: Fri, 6 Oct 2023 10:40:05 +0200 Subject: [PATCH 303/449] ignored jenv prop --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 73d9179fa..14cd4d345 100644 --- a/.gitignore +++ b/.gitignore @@ -26,3 +26,4 @@ spark-warehouse /**/*.log /**/.factorypath /**/.scalafmt.conf +/.java-version From 42a2dad975051211dae5bf56e6d129d82d1401f9 Mon Sep 17 00:00:00 2001 From: Sandro La Bruzzo Date: Fri, 6 Oct 2023 11:52:33 +0200 Subject: [PATCH 304/449] implemented relation to irish funder from a Json list --- .../dhp/doiboost/crossref/irish_funder.json | 946 ++++++++++++++++++ .../doiboost/crossref/Crossref2Oaf.scala | 25 + .../crossref/CrossrefMappingTest.scala | 2 +- 3 files changed, 972 insertions(+), 1 deletion(-) create mode 100644 dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/crossref/irish_funder.json diff --git a/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/crossref/irish_funder.json b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/crossref/irish_funder.json new file mode 100644 index 000000000..6c6912c2e --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/crossref/irish_funder.json @@ -0,0 +1,946 @@ +[ + { + "id": "100007630", + "uri": "http://dx.doi.org/10.13039/100007630", + "name": "College of Engineering and Informatics, National University of Ireland, Galway", + "synonym": [] + }, + { + "id": "100007731", + "uri": "http://dx.doi.org/10.13039/100007731", + "name": "Endo International", + "synonym": [] + }, + { + "id": "100008099", + "uri": "http://dx.doi.org/10.13039/100008099", + "name": "Food Safety Authority of Ireland", + "synonym": [] + }, + { + "id": "100008124", + "uri": "http://dx.doi.org/10.13039/100008124", + "name": "Department of Jobs, Enterprise and Innovation", + "synonym": [] + }, + { + "id": "100009098", + "uri": "http://dx.doi.org/10.13039/100009098", + "name": "Department of Foreign Affairs and Trade, Ireland", + "synonym": [] + }, + { + "id": "100009099", + "uri": "http://dx.doi.org/10.13039/100009099", + "name": "Irish Aid", + "synonym": [] + }, + { + "id": "100009770", + "uri": "http://dx.doi.org/10.13039/100009770", + "name": "National University of Ireland", + "synonym": [] + }, + { + "id": "100009985", + "uri": "http://dx.doi.org/10.13039/100009985", + "name": "Parkinson's Association of Ireland", + "synonym": [] + }, + { + "id": "100010399", + "uri": "http://dx.doi.org/10.13039/100010399", + "name": "European Society of Cataract and Refractive Surgeons", + "synonym": [] + }, + { + "id": "100010414", + "uri": "http://dx.doi.org/10.13039/100010414", + "name": "Health Research Board", + "synonym": [ + "501100001590" + ] + }, + { + "id": "100010546", + "uri": "http://dx.doi.org/10.13039/100010546", + "name": "Deparment of Children and Youth Affairs, Ireland", + "synonym": [] + }, + { + "id": "100010993", + "uri": "http://dx.doi.org/10.13039/100010993", + "name": "Irish Nephrology Society", + "synonym": [] + }, + { + "id": "100011062", + "uri": "http://dx.doi.org/10.13039/100011062", + "name": "Asian Spinal Cord Network", + "synonym": [] + }, + { + "id": "100011096", + "uri": "http://dx.doi.org/10.13039/100011096", + "name": "Jazz Pharmaceuticals", + "synonym": [] + }, + { + "id": "100011396", + "uri": "http://dx.doi.org/10.13039/100011396", + "name": "Irish College of General Practitioners", + "synonym": [] + }, + { + "id": "100012734", + "uri": "http://dx.doi.org/10.13039/100012734", + "name": "Department for Culture, Heritage and the Gaeltacht, Ireland", + "synonym": [] + }, + { + "id": "100012754", + "uri": "http://dx.doi.org/10.13039/100012754", + "name": "Horizon Pharma", + "synonym": [] + }, + { + "id": "100012891", + "uri": "http://dx.doi.org/10.13039/100012891", + "name": "Medical Research Charities Group", + "synonym": [] + }, + { + "id": "100012919", + "uri": "http://dx.doi.org/10.13039/100012919", + "name": "Epilepsy Ireland", + "synonym": [] + }, + { + "id": "100012920", + "uri": "http://dx.doi.org/10.13039/100012920", + "name": "GLEN", + "synonym": [] + }, + { + "id": "100012921", + "uri": "http://dx.doi.org/10.13039/100012921", + "name": "Royal College of Surgeons in Ireland", + "synonym": [] + }, + { + "id": "100013029", + "uri": "http://dx.doi.org/10.13039/100013029", + "name": "Iris O'Brien Foundation", + "synonym": [] + }, + { + "id": "100013206", + "uri": "http://dx.doi.org/10.13039/100013206", + "name": "Food Institutional Research Measure", + "synonym": [] + }, + { + "id": "100013381", + "uri": "http://dx.doi.org/10.13039/100013381", + "name": "Irish Phytochemical Food Network", + "synonym": [] + }, + { + "id": "100013433", + "uri": "http://dx.doi.org/10.13039/100013433", + "name": "Transport Infrastructure Ireland", + "synonym": [] + }, + { + "id": "100013461", + "uri": "http://dx.doi.org/10.13039/100013461", + "name": "Arts and Disability Ireland", + "synonym": [] + }, + { + "id": "100013548", + "uri": "http://dx.doi.org/10.13039/100013548", + "name": "Filmbase", + "synonym": [] + }, + { + "id": "100013917", + "uri": "http://dx.doi.org/10.13039/100013917", + "name": "Society for Musicology in Ireland", + "synonym": [] + }, + { + "id": "100014251", + "uri": "http://dx.doi.org/10.13039/100014251", + "name": "Humanities in the European Research Area", + "synonym": [] + }, + { + "id": "100014364", + "uri": "http://dx.doi.org/10.13039/100014364", + "name": "National Children's Research Centre", + "synonym": [] + }, + { + "id": "100014384", + "uri": "http://dx.doi.org/10.13039/100014384", + "name": "Amarin Corporation", + "synonym": [] + }, + { + "id": "100014902", + "uri": "http://dx.doi.org/10.13039/100014902", + "name": "Irish Association for Cancer Research", + "synonym": [] + }, + { + "id": "100015023", + "uri": "http://dx.doi.org/10.13039/100015023", + "name": "Ireland Funds", + "synonym": [] + }, + { + "id": "100015037", + "uri": "http://dx.doi.org/10.13039/100015037", + "name": "Simon Cumbers Media Fund", + "synonym": [] + }, + { + "id": "100015319", + "uri": "http://dx.doi.org/10.13039/100015319", + "name": "Sport Ireland Institute", + "synonym": [] + }, + { + "id": "100015320", + "uri": "http://dx.doi.org/10.13039/100015320", + "name": "Paralympics Ireland", + "synonym": [] + }, + { + "id": "100015442", + "uri": "http://dx.doi.org/10.13039/100015442", + "name": "Global Brain Health Institute", + "synonym": [] + }, + { + "id": "100015776", + "uri": "http://dx.doi.org/10.13039/100015776", + "name": "Health and Social Care Board", + "synonym": [] + }, + { + "id": "100015992", + "uri": "http://dx.doi.org/10.13039/100015992", + "name": "St. Luke's Institute of Cancer Research", + "synonym": [] + }, + { + "id": "100017897", + "uri": "http://dx.doi.org/10.13039/100017897", + "name": "Friedreich\u2019s Ataxia Research Alliance Ireland", + "synonym": [] + }, + { + "id": "100018064", + "uri": "http://dx.doi.org/10.13039/100018064", + "name": "Department of Tourism, Culture, Arts, Gaeltacht, Sport and Media", + "synonym": [] + }, + { + "id": "100018172", + "uri": "http://dx.doi.org/10.13039/100018172", + "name": "Department of the Environment, Climate and Communications", + "synonym": [] + }, + { + "id": "100018175", + "uri": "http://dx.doi.org/10.13039/100018175", + "name": "Dairy Processing Technology Centre", + "synonym": [] + }, + { + "id": "100018270", + "uri": "http://dx.doi.org/10.13039/100018270", + "name": "Health Service Executive", + "synonym": [] + }, + { + "id": "100018529", + "uri": "http://dx.doi.org/10.13039/100018529", + "name": "Alkermes", + "synonym": [] + }, + { + "id": "100018542", + "uri": "http://dx.doi.org/10.13039/100018542", + "name": "Irish Endocrine Society", + "synonym": [] + }, + { + "id": "100018754", + "uri": "http://dx.doi.org/10.13039/100018754", + "name": "An Roinn Sl\u00e1inte", + "synonym": [] + }, + { + "id": "100018998", + "uri": "http://dx.doi.org/10.13039/100018998", + "name": "Irish Research eLibrary", + "synonym": [] + }, + { + "id": "100019428", + "uri": "http://dx.doi.org/10.13039/100019428", + "name": "Nabriva Therapeutics", + "synonym": [] + }, + { + "id": "100019637", + "uri": "http://dx.doi.org/10.13039/100019637", + "name": "Horizon Therapeutics", + "synonym": [] + }, + { + "id": "100020174", + "uri": "http://dx.doi.org/10.13039/100020174", + "name": "Health Research Charities Ireland", + "synonym": [] + }, + { + "id": "100020202", + "uri": "http://dx.doi.org/10.13039/100020202", + "name": "UCD Foundation", + "synonym": [] + }, + { + "id": "100020233", + "uri": "http://dx.doi.org/10.13039/100020233", + "name": "Ireland Canada University Foundation", + "synonym": [] + }, + { + "id": "100022943", + "uri": "http://dx.doi.org/10.13039/100022943", + "name": "National Cancer Registry Ireland", + "synonym": [] + }, + { + "id": "501100001581", + "uri": "http://dx.doi.org/10.13039/501100001581", + "name": "Arts Council of Ireland", + "synonym": [] + }, + { + "id": "501100001582", + "uri": "http://dx.doi.org/10.13039/501100001582", + "name": "Centre for Ageing Research and Development in Ireland", + "synonym": [] + }, + { + "id": "501100001583", + "uri": "http://dx.doi.org/10.13039/501100001583", + "name": "Cystinosis Foundation Ireland", + "synonym": [] + }, + { + "id": "501100001584", + "uri": "http://dx.doi.org/10.13039/501100001584", + "name": "Department of Agriculture, Food and the Marine, Ireland", + "synonym": [] + }, + { + "id": "501100001586", + "uri": "http://dx.doi.org/10.13039/501100001586", + "name": "Department of Education and Skills, Ireland", + "synonym": [] + }, + { + "id": "501100001587", + "uri": "http://dx.doi.org/10.13039/501100001587", + "name": "Economic and Social Research Institute", + "synonym": [] + }, + { + "id": "501100001588", + "uri": "http://dx.doi.org/10.13039/501100001588", + "name": "Enterprise Ireland", + "synonym": [] + }, + { + "id": "501100001589", + "uri": "http://dx.doi.org/10.13039/501100001589", + "name": "Environmental Protection Agency", + "synonym": [] + }, + { + "id": "501100001591", + "uri": "http://dx.doi.org/10.13039/501100001591", + "name": "Heritage Council", + "synonym": [] + }, + { + "id": "501100001592", + "uri": "http://dx.doi.org/10.13039/501100001592", + "name": "Higher Education Authority", + "synonym": [] + }, + { + "id": "501100001593", + "uri": "http://dx.doi.org/10.13039/501100001593", + "name": "Irish Cancer Society", + "synonym": [] + }, + { + "id": "501100001594", + "uri": "http://dx.doi.org/10.13039/501100001594", + "name": "Irish Heart Foundation", + "synonym": [] + }, + { + "id": "501100001595", + "uri": "http://dx.doi.org/10.13039/501100001595", + "name": "Irish Hospice Foundation", + "synonym": [] + }, + { + "id": "501100001596", + "uri": "http://dx.doi.org/10.13039/501100001596", + "name": "Irish Research Council for Science, Engineering and Technology", + "synonym": [] + }, + { + "id": "501100001597", + "uri": "http://dx.doi.org/10.13039/501100001597", + "name": "Irish Research Council for the Humanities and Social Sciences", + "synonym": [] + }, + { + "id": "501100001598", + "uri": "http://dx.doi.org/10.13039/501100001598", + "name": "Mental Health Commission", + "synonym": [] + }, + { + "id": "501100001600", + "uri": "http://dx.doi.org/10.13039/501100001600", + "name": "Research and Education Foundation, Sligo General Hospital", + "synonym": [] + }, + { + "id": "501100001601", + "uri": "http://dx.doi.org/10.13039/501100001601", + "name": "Royal Irish Academy", + "synonym": [] + }, + { + "id": "501100001602", + "uri": "http://dx.doi.org/10.13039/501100001602", + "name": "Science Foundation Ireland", + "synonym": [] + }, + { + "id": "501100001603", + "uri": "http://dx.doi.org/10.13039/501100001603", + "name": "Sustainable Energy Authority of Ireland", + "synonym": [] + }, + { + "id": "501100001604", + "uri": "http://dx.doi.org/10.13039/501100001604", + "name": "Teagasc", + "synonym": [] + }, + { + "id": "501100001627", + "uri": "http://dx.doi.org/10.13039/501100001627", + "name": "Marine Institute", + "synonym": [] + }, + { + "id": "501100001628", + "uri": "http://dx.doi.org/10.13039/501100001628", + "name": "Central Remedial Clinic", + "synonym": [] + }, + { + "id": "501100001629", + "uri": "http://dx.doi.org/10.13039/501100001629", + "name": "Royal Dublin Society", + "synonym": [] + }, + { + "id": "501100001630", + "uri": "http://dx.doi.org/10.13039/501100001630", + "name": "Dublin Institute for Advanced Studies", + "synonym": [] + }, + { + "id": "501100001631", + "uri": "http://dx.doi.org/10.13039/501100001631", + "name": "University College Dublin", + "synonym": [] + }, + { + "id": "501100001633", + "uri": "http://dx.doi.org/10.13039/501100001633", + "name": "National University of Ireland, Maynooth", + "synonym": [] + }, + { + "id": "501100001634", + "uri": "http://dx.doi.org/10.13039/501100001634", + "name": "University of Galway", + "synonym": [] + }, + { + "id": "501100001635", + "uri": "http://dx.doi.org/10.13039/501100001635", + "name": "University of Limerick", + "synonym": [] + }, + { + "id": "501100001636", + "uri": "http://dx.doi.org/10.13039/501100001636", + "name": "University College Cork", + "synonym": [] + }, + { + "id": "501100001637", + "uri": "http://dx.doi.org/10.13039/501100001637", + "name": "Trinity College Dublin", + "synonym": [] + }, + { + "id": "501100001638", + "uri": "http://dx.doi.org/10.13039/501100001638", + "name": "Dublin City University", + "synonym": [] + }, + { + "id": "501100002081", + "uri": "http://dx.doi.org/10.13039/501100002081", + "name": "Irish Research Council", + "synonym": [] + }, + { + "id": "501100002736", + "uri": "http://dx.doi.org/10.13039/501100002736", + "name": "Covidien", + "synonym": [] + }, + { + "id": "501100002755", + "uri": "http://dx.doi.org/10.13039/501100002755", + "name": "Brennan and Company", + "synonym": [] + }, + { + "id": "501100002919", + "uri": "http://dx.doi.org/10.13039/501100002919", + "name": "Cork Institute of Technology", + "synonym": [] + }, + { + "id": "501100002959", + "uri": "http://dx.doi.org/10.13039/501100002959", + "name": "Dublin City Council", + "synonym": [] + }, + { + "id": "501100003036", + "uri": "http://dx.doi.org/10.13039/501100003036", + "name": "Perrigo Company Charitable Foundation", + "synonym": [] + }, + { + "id": "501100003037", + "uri": "http://dx.doi.org/10.13039/501100003037", + "name": "Elan", + "synonym": [] + }, + { + "id": "501100003496", + "uri": "http://dx.doi.org/10.13039/501100003496", + "name": "HeyStaks Technologies", + "synonym": [] + }, + { + "id": "501100003553", + "uri": "http://dx.doi.org/10.13039/501100003553", + "name": "Gaelic Athletic Association", + "synonym": [] + }, + { + "id": "501100003840", + "uri": "http://dx.doi.org/10.13039/501100003840", + "name": "Irish Institute of Clinical Neuroscience", + "synonym": [] + }, + { + "id": "501100003956", + "uri": "http://dx.doi.org/10.13039/501100003956", + "name": "Aspect Medical Systems", + "synonym": [] + }, + { + "id": "501100004162", + "uri": "http://dx.doi.org/10.13039/501100004162", + "name": "Meath Foundation", + "synonym": [] + }, + { + "id": "501100004210", + "uri": "http://dx.doi.org/10.13039/501100004210", + "name": "Our Lady's Children's Hospital, Crumlin", + "synonym": [] + }, + { + "id": "501100004321", + "uri": "http://dx.doi.org/10.13039/501100004321", + "name": "Shire", + "synonym": [] + }, + { + "id": "501100004981", + "uri": "http://dx.doi.org/10.13039/501100004981", + "name": "Athlone Institute of Technology", + "synonym": [] + }, + { + "id": "501100006518", + "uri": "http://dx.doi.org/10.13039/501100006518", + "name": "Department of Communications, Energy and Natural Resources, Ireland", + "synonym": [] + }, + { + "id": "501100006553", + "uri": "http://dx.doi.org/10.13039/501100006553", + "name": "Collaborative Centre for Applied Nanotechnology", + "synonym": [] + }, + { + "id": "501100006759", + "uri": "http://dx.doi.org/10.13039/501100006759", + "name": "CLARITY Centre for Sensor Web Technologies", + "synonym": [] + }, + { + "id": "501100009246", + "uri": "http://dx.doi.org/10.13039/501100009246", + "name": "Technological University Dublin", + "synonym": [] + }, + { + "id": "501100009269", + "uri": "http://dx.doi.org/10.13039/501100009269", + "name": "Programme of Competitive Forestry Research for Development", + "synonym": [] + }, + { + "id": "501100009315", + "uri": "http://dx.doi.org/10.13039/501100009315", + "name": "Cystinosis Ireland", + "synonym": [] + }, + { + "id": "501100010808", + "uri": "http://dx.doi.org/10.13039/501100010808", + "name": "Geological Survey of Ireland", + "synonym": [] + }, + { + "id": "501100011030", + "uri": "http://dx.doi.org/10.13039/501100011030", + "name": "Alimentary Glycoscience Research Cluster", + "synonym": [] + }, + { + "id": "501100011031", + "uri": "http://dx.doi.org/10.13039/501100011031", + "name": "Alimentary Health", + "synonym": [] + }, + { + "id": "501100011103", + "uri": "http://dx.doi.org/10.13039/501100011103", + "name": "Rann\u00eds", + "synonym": [] + }, + { + "id": "501100012354", + "uri": "http://dx.doi.org/10.13039/501100012354", + "name": "Inland Fisheries Ireland", + "synonym": [] + }, + { + "id": "501100014384", + "uri": "http://dx.doi.org/10.13039/501100014384", + "name": "X-Bolt Orthopaedics", + "synonym": [] + }, + { + "id": "501100014710", + "uri": "http://dx.doi.org/10.13039/501100014710", + "name": "PrecisionBiotics Group", + "synonym": [] + }, + { + "id": "501100014827", + "uri": "http://dx.doi.org/10.13039/501100014827", + "name": "Dormant Accounts Fund", + "synonym": [] + }, + { + "id": "501100016041", + "uri": "http://dx.doi.org/10.13039/501100016041", + "name": "St Vincents Anaesthesia Foundation", + "synonym": [] + }, + { + "id": "501100017501", + "uri": "http://dx.doi.org/10.13039/501100017501", + "name": "FotoNation", + "synonym": [] + }, + { + "id": "501100018641", + "uri": "http://dx.doi.org/10.13039/501100018641", + "name": "Dairy Research Ireland", + "synonym": [] + }, + { + "id": "501100018839", + "uri": "http://dx.doi.org/10.13039/501100018839", + "name": "Irish Centre for High-End Computing", + "synonym": [] + }, + { + "id": "501100019905", + "uri": "http://dx.doi.org/10.13039/501100019905", + "name": "Galway University Foundation", + "synonym": [] + }, + { + "id": "501100020036", + "uri": "http://dx.doi.org/10.13039/501100020036", + "name": "Dystonia Ireland", + "synonym": [] + }, + { + "id": "501100020221", + "uri": "http://dx.doi.org/10.13039/501100020221", + "name": "Irish Motor Neurone Disease Association", + "synonym": [] + }, + { + "id": "501100020270", + "uri": "http://dx.doi.org/10.13039/501100020270", + "name": "Advanced Materials and Bioengineering Research", + "synonym": [] + }, + { + "id": "501100020403", + "uri": "http://dx.doi.org/10.13039/501100020403", + "name": "Irish Composites Centre", + "synonym": [] + }, + { + "id": "501100020425", + "uri": "http://dx.doi.org/10.13039/501100020425", + "name": "Irish Thoracic Society", + "synonym": [] + }, + { + "id": "501100021102", + "uri": "http://dx.doi.org/10.13039/501100021102", + "name": "Waterford Institute of Technology", + "synonym": [] + }, + { + "id": "501100021110", + "uri": "http://dx.doi.org/10.13039/501100021110", + "name": "Irish MPS Society", + "synonym": [] + }, + { + "id": "501100021525", + "uri": "http://dx.doi.org/10.13039/501100021525", + "name": "Insight SFI Research Centre for Data Analytics", + "synonym": [] + }, + { + "id": "501100021694", + "uri": "http://dx.doi.org/10.13039/501100021694", + "name": "Elan Pharma International", + "synonym": [] + }, + { + "id": "501100021838", + "uri": "http://dx.doi.org/10.13039/501100021838", + "name": "Royal College of Physicians of Ireland", + "synonym": [] + }, + { + "id": "501100022542", + "uri": "http://dx.doi.org/10.13039/501100022542", + "name": "Breakthrough Cancer Research", + "synonym": [] + }, + { + "id": "501100022610", + "uri": "http://dx.doi.org/10.13039/501100022610", + "name": "Breast Cancer Ireland", + "synonym": [] + }, + { + "id": "501100022728", + "uri": "http://dx.doi.org/10.13039/501100022728", + "name": "Munster Technological University", + "synonym": [] + }, + { + "id": "501100022729", + "uri": "http://dx.doi.org/10.13039/501100022729", + "name": "Institute of Technology, Tralee", + "synonym": [] + }, + { + "id": "501100023273", + "uri": "http://dx.doi.org/10.13039/501100023273", + "name": "HRB Clinical Research Facility Galway", + "synonym": [] + }, + { + "id": "501100023378", + "uri": "http://dx.doi.org/10.13039/501100023378", + "name": "Lauritzson Foundation", + "synonym": [] + }, + { + "id": "501100023551", + "uri": "http://dx.doi.org/10.13039/501100023551", + "name": "Cystic Fibrosis Ireland", + "synonym": [] + }, + { + "id": "501100023970", + "uri": "http://dx.doi.org/10.13039/501100023970", + "name": "Tyndall National Institute", + "synonym": [] + }, + { + "id": "501100024094", + "uri": "http://dx.doi.org/10.13039/501100024094", + "name": "Raidi\u00f3 Teilif\u00eds \u00c9ireann", + "synonym": [] + }, + { + "id": "501100024242", + "uri": "http://dx.doi.org/10.13039/501100024242", + "name": "Synthesis and Solid State Pharmaceutical Centre", + "synonym": [] + }, + { + "id": "501100024313", + "uri": "http://dx.doi.org/10.13039/501100024313", + "name": "Irish Rugby Football Union", + "synonym": [] + }, + { + "id": "100007490", + "uri": "http://dx.doi.org/10.13039/100007490", + "name": "Bausch and Lomb Ireland", + "synonym": [] + }, + { + "id": "100007819", + "uri": "http://dx.doi.org/10.13039/100007819", + "name": "Allergan", + "synonym": [] + }, + { + "id": "100010547", + "uri": "http://dx.doi.org/10.13039/100010547", + "name": "Irish Youth Justice Service", + "synonym": [] + }, + { + "id": "100012733", + "uri": "http://dx.doi.org/10.13039/100012733", + "name": "National Parks and Wildlife Service", + "synonym": [] + }, + { + "id": "100015278", + "uri": "http://dx.doi.org/10.13039/100015278", + "name": "Pfizer Healthcare Ireland", + "synonym": [] + }, + { + "id": "100017144", + "uri": "http://dx.doi.org/10.13039/100017144", + "name": "Shell E and P Ireland", + "synonym": [] + }, + { + "id": "100022895", + "uri": "http://dx.doi.org/10.13039/100022895", + "name": "Health Research Institute, University of Limerick", + "synonym": [] + }, + { + "id": "501100001599", + "uri": "http://dx.doi.org/10.13039/501100001599", + "name": "National Council for Forest Research and Development", + "synonym": [] + }, + { + "id": "501100006554", + "uri": "http://dx.doi.org/10.13039/501100006554", + "name": "IDA Ireland", + "synonym": [] + }, + { + "id": "501100011626", + "uri": "http://dx.doi.org/10.13039/501100011626", + "name": "Energy Policy Research Centre, Economic and Social Research Institute", + "synonym": [] + }, + { + "id": "501100014531", + "uri": "http://dx.doi.org/10.13039/501100014531", + "name": "Physical Education and Sport Sciences Department, University of Limerick", + "synonym": [] + }, + { + "id": "501100014745", + "uri": "http://dx.doi.org/10.13039/501100014745", + "name": "APC Microbiome Institute", + "synonym": [] + }, + { + "id": "501100014826", + "uri": "http://dx.doi.org/10.13039/501100014826", + "name": "ADAPT - Centre for Digital Content Technology", + "synonym": [] + }, + { + "id": "501100020570", + "uri": "http://dx.doi.org/10.13039/501100020570", + "name": "College of Medicine, Nursing and Health Sciences, National University of Ireland, Galway", + "synonym": [] + }, + { + "id": "501100020871", + "uri": "http://dx.doi.org/10.13039/501100020871", + "name": "Bernal Institute, University of Limerick", + "synonym": [] + }, + { + "id": "501100023852", + "uri": "http://dx.doi.org/10.13039/501100023852", + "name": "Moore Institute for Research in the Humanities and Social Studies, University of Galway", + "synonym": [] + } +] \ No newline at end of file diff --git a/dhp-workflows/dhp-doiboost/src/main/scala/eu/dnetlib/doiboost/crossref/Crossref2Oaf.scala b/dhp-workflows/dhp-doiboost/src/main/scala/eu/dnetlib/doiboost/crossref/Crossref2Oaf.scala index 9c63b709b..e0fdb9ce4 100644 --- a/dhp-workflows/dhp-doiboost/src/main/scala/eu/dnetlib/doiboost/crossref/Crossref2Oaf.scala +++ b/dhp-workflows/dhp-doiboost/src/main/scala/eu/dnetlib/doiboost/crossref/Crossref2Oaf.scala @@ -16,6 +16,7 @@ import org.slf4j.{Logger, LoggerFactory} import java.util import scala.collection.JavaConverters._ import scala.collection.mutable +import scala.io.Source import scala.util.matching.Regex case class CrossrefDT(doi: String, json: String, timestamp: Long) {} @@ -30,11 +31,22 @@ case class mappingAuthor( affiliation: Option[mappingAffiliation] ) {} +case class funderInfo(id:String,uri:String, name:String,synonym:List[String] ) {} + + + case class mappingFunder(name: String, DOI: Option[String], award: Option[List[String]]) {} case object Crossref2Oaf { val logger: Logger = LoggerFactory.getLogger(Crossref2Oaf.getClass) + val irishFunder: List[funderInfo] = { + val s = Source.fromInputStream(getClass.getResourceAsStream("/eu/dnetlib/dhp/doiboost/crossref/irish_funder.json")).mkString + implicit lazy val formats: DefaultFormats.type = org.json4s.DefaultFormats + lazy val json: org.json4s.JValue = parse(s) + json.extract[List[funderInfo]] + } + val mappingCrossrefType = Map( "book-section" -> "publication", "book" -> "publication", @@ -88,6 +100,11 @@ case object Crossref2Oaf { "report" -> "0017 Report" ) + def getIrishId(doi:String):Option[String] = { + val id =doi.split("/").last + irishFunder.find(f => id.equalsIgnoreCase(f.id) || (f.synonym.nonEmpty && f.synonym.exists(s => s.equalsIgnoreCase(id)))).map(f => f.id) + } + def mappingResult(result: Result, json: JValue, cobjCategory: String): Result = { implicit lazy val formats: DefaultFormats.type = org.json4s.DefaultFormats @@ -467,6 +484,14 @@ case object Crossref2Oaf { if (funders != null) funders.foreach(funder => { if (funder.DOI.isDefined && funder.DOI.get.nonEmpty) { + + if (getIrishId(funder.DOI.get).isDefined) { + val nsPrefix = getIrishId(funder.DOI.get).get.padTo(12, '_') + val targetId = getProjectId(nsPrefix, "1e5e62235d094afd01cd56e65112fc63") + queue += generateRelation(sourceId, targetId, ModelConstants.IS_PRODUCED_BY) + queue += generateRelation(targetId, sourceId, ModelConstants.PRODUCES) + } + funder.DOI.get match { case "10.13039/100010663" | "10.13039/100010661" | "10.13039/501100007601" | "10.13039/501100000780" | "10.13039/100010665" => diff --git a/dhp-workflows/dhp-doiboost/src/test/scala/eu/dnetlib/dhp/doiboost/crossref/CrossrefMappingTest.scala b/dhp-workflows/dhp-doiboost/src/test/scala/eu/dnetlib/dhp/doiboost/crossref/CrossrefMappingTest.scala index fbf6f72c0..7961376c5 100644 --- a/dhp-workflows/dhp-doiboost/src/test/scala/eu/dnetlib/dhp/doiboost/crossref/CrossrefMappingTest.scala +++ b/dhp-workflows/dhp-doiboost/src/test/scala/eu/dnetlib/dhp/doiboost/crossref/CrossrefMappingTest.scala @@ -50,7 +50,7 @@ class CrossrefMappingTest { } } - def checkRelation(generatedOAF: List[Oaf]): Unit = { + def checkRelation(generatedOAF: List[Oaf]): Unit = { val rels: List[Relation] = generatedOAF.filter(p => p.isInstanceOf[Relation]).asInstanceOf[List[Relation]] From eed9fe090220b93789f0d051303fb718814af23d Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Fri, 6 Oct 2023 12:31:17 +0200 Subject: [PATCH 305/449] code formatting --- .../dhp/oa/merge/GroupEntitiesSparkJob.java | 4 +- .../dhp/oa/dedup/SparkPropagateRelation.java | 72 +++---- .../group/GroupEntitiesSparkJobTest.java | 190 +++++++++--------- 3 files changed, 133 insertions(+), 133 deletions(-) diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/GroupEntitiesSparkJob.java b/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/GroupEntitiesSparkJob.java index 87510c108..99981bf6a 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/GroupEntitiesSparkJob.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/GroupEntitiesSparkJob.java @@ -33,7 +33,7 @@ import scala.Tuple2; public class GroupEntitiesSparkJob { private static final Logger log = LoggerFactory.getLogger(GroupEntitiesSparkJob.class); - private static final Encoder OAFENTITY_KRYO_ENC = Encoders.kryo(OafEntity.class); + private static final Encoder OAFENTITY_KRYO_ENC = Encoders.kryo(OafEntity.class); public static void main(String[] args) throws Exception { @@ -114,7 +114,7 @@ public class GroupEntitiesSparkJob { Encoders.tuple(Encoders.STRING(), OAFENTITY_KRYO_ENC)); // pivot on "_1" (classname of the entity) - // created columns containing only entities of the same class + // created columns containing only entities of the same class for (Map.Entry e : ModelSupport.entityTypes.entrySet()) { String entity = e.getKey().name(); Class entityClass = e.getValue(); diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkPropagateRelation.java b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkPropagateRelation.java index 739295c91..cb1c70059 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkPropagateRelation.java +++ b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkPropagateRelation.java @@ -67,60 +67,60 @@ public class SparkPropagateRelation extends AbstractSparkAction { log.info("graphOutputPath: '{}'", graphOutputPath); Dataset mergeRels = spark - .read() - .load(DedupUtility.createMergeRelPath(workingPath, "*", "*")) - .as(REL_BEAN_ENC); + .read() + .load(DedupUtility.createMergeRelPath(workingPath, "*", "*")) + .as(REL_BEAN_ENC); // Dataset idsToMerge = mergeRels - .where(col("relClass").equalTo(ModelConstants.MERGES)) - .select(col("source").as("dedupID"), col("target").as("mergedObjectID")) - .distinct(); + .where(col("relClass").equalTo(ModelConstants.MERGES)) + .select(col("source").as("dedupID"), col("target").as("mergedObjectID")) + .distinct(); Dataset allRels = spark - .read() - .schema(REL_BEAN_ENC.schema()) - .json(graphBasePath + "/relation"); + .read() + .schema(REL_BEAN_ENC.schema()) + .json(graphBasePath + "/relation"); Dataset dedupedRels = allRels - .joinWith(idsToMerge, allRels.col("source").equalTo(idsToMerge.col("mergedObjectID")), "left_outer") - .joinWith(idsToMerge, col("_1.target").equalTo(idsToMerge.col("mergedObjectID")), "left_outer") - .select("_1._1", "_1._2.dedupID", "_2.dedupID") - .as(Encoders.tuple(REL_BEAN_ENC, Encoders.STRING(), Encoders.STRING())) - .map((MapFunction, Relation>) t -> { - Relation rel = t._1(); - String newSource = t._2(); - String newTarget = t._3(); + .joinWith(idsToMerge, allRels.col("source").equalTo(idsToMerge.col("mergedObjectID")), "left_outer") + .joinWith(idsToMerge, col("_1.target").equalTo(idsToMerge.col("mergedObjectID")), "left_outer") + .select("_1._1", "_1._2.dedupID", "_2.dedupID") + .as(Encoders.tuple(REL_BEAN_ENC, Encoders.STRING(), Encoders.STRING())) + .map((MapFunction, Relation>) t -> { + Relation rel = t._1(); + String newSource = t._2(); + String newTarget = t._3(); - if (rel.getDataInfo() == null) { - rel.setDataInfo(new DataInfo()); - } + if (rel.getDataInfo() == null) { + rel.setDataInfo(new DataInfo()); + } - if (newSource != null || newTarget != null) { - rel.getDataInfo().setDeletedbyinference(false); + if (newSource != null || newTarget != null) { + rel.getDataInfo().setDeletedbyinference(false); - if (newSource != null) - rel.setSource(newSource); + if (newSource != null) + rel.setSource(newSource); - if (newTarget != null) - rel.setTarget(newTarget); - } + if (newTarget != null) + rel.setTarget(newTarget); + } - return rel; - }, REL_BEAN_ENC); + return rel; + }, REL_BEAN_ENC); // ids of records that are both not deletedbyinference and not invisible Dataset ids = validIds(spark, graphBasePath); // filter relations that point to valid records, can force them to be visible Dataset cleanedRels = dedupedRels - .join(ids, col("source").equalTo(ids.col("id")), "leftsemi") - .join(ids, col("target").equalTo(ids.col("id")), "leftsemi") - .as(REL_BEAN_ENC) - .map((MapFunction) r -> { - r.getDataInfo().setInvisible(false); - return r; - }, REL_KRYO_ENC); + .join(ids, col("source").equalTo(ids.col("id")), "leftsemi") + .join(ids, col("target").equalTo(ids.col("id")), "leftsemi") + .as(REL_BEAN_ENC) + .map((MapFunction) r -> { + r.getDataInfo().setInvisible(false); + return r; + }, REL_KRYO_ENC); Dataset distinctRels = cleanedRels .groupByKey( diff --git a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/group/GroupEntitiesSparkJobTest.java b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/group/GroupEntitiesSparkJobTest.java index b878e778e..0887adf45 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/group/GroupEntitiesSparkJobTest.java +++ b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/group/GroupEntitiesSparkJobTest.java @@ -1,14 +1,14 @@ package eu.dnetlib.dhp.oa.graph.group; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; -import eu.dnetlib.dhp.common.HdfsSupport; -import eu.dnetlib.dhp.oa.merge.GroupEntitiesSparkJob; -import eu.dnetlib.dhp.schema.common.ModelSupport; -import eu.dnetlib.dhp.schema.oaf.OafEntity; -import eu.dnetlib.dhp.schema.oaf.Result; -import eu.dnetlib.dhp.utils.DHPUtils; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.io.IOException; +import java.net.URISyntaxException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + import org.apache.commons.io.FileUtils; import org.apache.spark.SparkConf; import org.apache.spark.api.java.function.FilterFunction; @@ -18,108 +18,108 @@ import org.apache.spark.sql.Encoders; import org.apache.spark.sql.SparkSession; import org.junit.jupiter.api.*; -import java.io.IOException; -import java.net.URISyntaxException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; -import static org.junit.jupiter.api.Assertions.assertEquals; +import eu.dnetlib.dhp.common.HdfsSupport; +import eu.dnetlib.dhp.oa.merge.GroupEntitiesSparkJob; +import eu.dnetlib.dhp.schema.common.ModelSupport; +import eu.dnetlib.dhp.schema.oaf.OafEntity; +import eu.dnetlib.dhp.schema.oaf.Result; +import eu.dnetlib.dhp.utils.DHPUtils; @TestMethodOrder(MethodOrderer.OrderAnnotation.class) public class GroupEntitiesSparkJobTest { - private static SparkSession spark; + private static SparkSession spark; - private static ObjectMapper mapper = new ObjectMapper() - .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + private static ObjectMapper mapper = new ObjectMapper() + .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - private static Path workingDir; - private Path dataInputPath; + private static Path workingDir; + private Path dataInputPath; - private Path checkpointPath; + private Path checkpointPath; - private Path outputPath; + private Path outputPath; - @BeforeAll - public static void beforeAll() throws IOException { - workingDir = Files.createTempDirectory(GroupEntitiesSparkJob.class.getSimpleName()); + @BeforeAll + public static void beforeAll() throws IOException { + workingDir = Files.createTempDirectory(GroupEntitiesSparkJob.class.getSimpleName()); - SparkConf conf = new SparkConf(); - conf.setAppName(GroupEntitiesSparkJob.class.getSimpleName()); - conf.setMaster("local"); - conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer"); - conf.registerKryoClasses(ModelSupport.getOafModelClasses()); - spark = SparkSession.builder().config(conf).getOrCreate(); - } + SparkConf conf = new SparkConf(); + conf.setAppName(GroupEntitiesSparkJob.class.getSimpleName()); + conf.setMaster("local"); + conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer"); + conf.registerKryoClasses(ModelSupport.getOafModelClasses()); + spark = SparkSession.builder().config(conf).getOrCreate(); + } - @BeforeEach - public void beforeEach() throws IOException, URISyntaxException { - dataInputPath = Paths.get(ClassLoader.getSystemResource("eu/dnetlib/dhp/oa/graph/group").toURI()); - checkpointPath = workingDir.resolve("grouped_entity"); - outputPath = workingDir.resolve("dispatched_entity"); - } + @BeforeEach + public void beforeEach() throws IOException, URISyntaxException { + dataInputPath = Paths.get(ClassLoader.getSystemResource("eu/dnetlib/dhp/oa/graph/group").toURI()); + checkpointPath = workingDir.resolve("grouped_entity"); + outputPath = workingDir.resolve("dispatched_entity"); + } - @AfterAll - public static void afterAll() throws IOException { - spark.stop(); - FileUtils.deleteDirectory(workingDir.toFile()); - } + @AfterAll + public static void afterAll() throws IOException { + spark.stop(); + FileUtils.deleteDirectory(workingDir.toFile()); + } - @Test - @Order(1) - void testGroupEntities() throws Exception { - GroupEntitiesSparkJob.main(new String[]{ - "-isSparkSessionManaged", - Boolean.FALSE.toString(), - "-graphInputPath", - dataInputPath.toString(), - "-checkpointPath", - checkpointPath.toString(), - "-outputPath", - outputPath.toString(), - "-filterInvisible", - Boolean.FALSE.toString() - }); + @Test + @Order(1) + void testGroupEntities() throws Exception { + GroupEntitiesSparkJob.main(new String[] { + "-isSparkSessionManaged", + Boolean.FALSE.toString(), + "-graphInputPath", + dataInputPath.toString(), + "-checkpointPath", + checkpointPath.toString(), + "-outputPath", + outputPath.toString(), + "-filterInvisible", + Boolean.FALSE.toString() + }); - Dataset checkpointTable = spark - .read() - .load(checkpointPath.toString()) - .selectExpr("COALESCE(*)") - .as(Encoders.kryo(OafEntity.class)); + Dataset checkpointTable = spark + .read() + .load(checkpointPath.toString()) + .selectExpr("COALESCE(*)") + .as(Encoders.kryo(OafEntity.class)); + assertEquals( + 1, + checkpointTable + .filter( + (FilterFunction) r -> "50|doi_________::09821844208a5cd6300b2bfb13bca1b9" + .equals(r.getId()) && + r.getCollectedfrom().stream().anyMatch(kv -> kv.getValue().equalsIgnoreCase("zenodo"))) + .count()); - assertEquals( - 1, - checkpointTable - .filter( - (FilterFunction) r -> "50|doi_________::09821844208a5cd6300b2bfb13bca1b9" - .equals(r.getId()) && - r.getCollectedfrom().stream().anyMatch(kv -> kv.getValue().equalsIgnoreCase("zenodo"))) - .count()); + Dataset output = spark + .read() + .textFile( + DHPUtils + .toSeq( + HdfsSupport + .listFiles(outputPath.toString(), spark.sparkContext().hadoopConfiguration()))) + .map((MapFunction) s -> mapper.readValue(s, Result.class), Encoders.bean(Result.class)); - - Dataset output = spark - .read() - .textFile( - DHPUtils - .toSeq( - HdfsSupport - .listFiles(outputPath.toString(), spark.sparkContext().hadoopConfiguration()))) - .map((MapFunction) s -> mapper.readValue(s, Result.class), Encoders.bean(Result.class)); - - assertEquals(3, output.count()); - assertEquals( - 2, - output - .map((MapFunction) r -> r.getResulttype().getClassid(), Encoders.STRING()) - .filter((FilterFunction) s -> s.equals("publication")) - .count()); - assertEquals( - 1, - output - .map((MapFunction) r -> r.getResulttype().getClassid(), Encoders.STRING()) - .filter((FilterFunction) s -> s.equals("dataset")) - .count()); - } -} \ No newline at end of file + assertEquals(3, output.count()); + assertEquals( + 2, + output + .map((MapFunction) r -> r.getResulttype().getClassid(), Encoders.STRING()) + .filter((FilterFunction) s -> s.equals("publication")) + .count()); + assertEquals( + 1, + output + .map((MapFunction) r -> r.getResulttype().getClassid(), Encoders.STRING()) + .filter((FilterFunction) s -> s.equals("dataset")) + .count()); + } +} From f759b18bca5260ff61a4603a023aa484585e05fe Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Fri, 6 Oct 2023 13:43:20 +0200 Subject: [PATCH 306/449] [SWH] aligned parameter name --- .../resources/eu/dnetlib/dhp/swh/oozie_app/workflow.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/oozie_app/workflow.xml b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/oozie_app/workflow.xml index 64dc0d2aa..c625fcb5b 100644 --- a/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-swh/src/main/resources/eu/dnetlib/dhp/swh/oozie_app/workflow.xml @@ -47,7 +47,7 @@ Limit on the number of repo URLs to use (Optional); for debug purposes - resume + resumeFrom Variable that indicates the step to start from @@ -80,8 +80,8 @@ - ${wf:conf('startFrom') eq 'collect-software-repository-urls'} - ${wf:conf('startFrom') eq 'create-swh-actionsets'} + ${wf:conf('resumeFrom') eq 'collect-software-repository-urls'} + ${wf:conf('resumeFrom') eq 'create-swh-actionsets'} From 858931ccb63ee47849129686cbfe3406cee4f997 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Fri, 6 Oct 2023 14:03:33 +0200 Subject: [PATCH 307/449] [SWH] compress the output actionset --- .../src/main/java/eu/dnetlib/dhp/swh/PrepareSWHActionsets.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/PrepareSWHActionsets.java b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/PrepareSWHActionsets.java index 2239244d6..2691d4b7e 100644 --- a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/PrepareSWHActionsets.java +++ b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/PrepareSWHActionsets.java @@ -11,6 +11,7 @@ import java.util.Optional; import org.apache.commons.io.IOUtils; import org.apache.hadoop.io.Text; +import org.apache.hadoop.io.compress.GzipCodec; import org.apache.hadoop.mapred.SequenceFileOutputFormat; import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaPairRDD; @@ -81,7 +82,7 @@ public class PrepareSWHActionsets { JavaPairRDD softwareRDD = prepareActionsets(spark, inputPath, softwareInputPath); softwareRDD .saveAsHadoopFile( - outputPath, Text.class, Text.class, SequenceFileOutputFormat.class); + outputPath, Text.class, Text.class, SequenceFileOutputFormat.class, GzipCodec.class); }); } From 2f3cf6d0e700b3a96c493e1d81cb2274bb45bad2 Mon Sep 17 00:00:00 2001 From: Giambattista Bloisi Date: Fri, 6 Oct 2023 12:35:54 +0200 Subject: [PATCH 308/449] Fix cleaning of Pmid where parsing of numbers stopped at first not leading 0' character --- .../eu/dnetlib/dhp/schema/oaf/utils/PmidCleaningRule.java | 4 ++-- .../dnetlib/dhp/schema/oaf/utils/PmidCleaningRuleTest.java | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/PmidCleaningRule.java b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/PmidCleaningRule.java index d0f5a3b27..c0c451b88 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/PmidCleaningRule.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/PmidCleaningRule.java @@ -7,7 +7,7 @@ import java.util.regex.Pattern; // https://researchguides.stevens.edu/c.php?g=442331&p=6577176 public class PmidCleaningRule { - public static final Pattern PATTERN = Pattern.compile("[1-9]{1,8}"); + public static final Pattern PATTERN = Pattern.compile("0*(\\d{1,8})"); public static String clean(String pmid) { String s = pmid @@ -17,7 +17,7 @@ public class PmidCleaningRule { final Matcher m = PATTERN.matcher(s); if (m.find()) { - return m.group(); + return m.group(1); } return ""; } diff --git a/dhp-common/src/test/java/eu/dnetlib/dhp/schema/oaf/utils/PmidCleaningRuleTest.java b/dhp-common/src/test/java/eu/dnetlib/dhp/schema/oaf/utils/PmidCleaningRuleTest.java index 9562adf7e..295eac85f 100644 --- a/dhp-common/src/test/java/eu/dnetlib/dhp/schema/oaf/utils/PmidCleaningRuleTest.java +++ b/dhp-common/src/test/java/eu/dnetlib/dhp/schema/oaf/utils/PmidCleaningRuleTest.java @@ -9,10 +9,16 @@ class PmidCleaningRuleTest { @Test void testCleaning() { + // leading zeros are removed assertEquals("1234", PmidCleaningRule.clean("01234")); + // tolerant to spaces in the middle assertEquals("1234567", PmidCleaningRule.clean("0123 4567")); + // stop parsing at first not numerical char assertEquals("123", PmidCleaningRule.clean("0123x4567")); + // invalid id leading to empty result assertEquals("", PmidCleaningRule.clean("abc")); + // valid id with zeroes in the number + assertEquals("20794075", PmidCleaningRule.clean("20794075")); } } From 46034630cf62fcb5fcd66366a9be48f62f363d0b Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Fri, 6 Oct 2023 14:42:02 +0200 Subject: [PATCH 309/449] [OC] compress the output actionset --- .../actionmanager/opencitations/CreateActionSetSparkJob.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/opencitations/CreateActionSetSparkJob.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/opencitations/CreateActionSetSparkJob.java index 2db756a94..ed0a54efa 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/opencitations/CreateActionSetSparkJob.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/opencitations/CreateActionSetSparkJob.java @@ -10,6 +10,7 @@ import java.util.*; import org.apache.commons.cli.ParseException; import org.apache.commons.io.IOUtils; import org.apache.hadoop.io.Text; +import org.apache.hadoop.io.compress.GzipCodec; import org.apache.hadoop.mapred.SequenceFileOutputFormat; import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaPairRDD; @@ -27,7 +28,6 @@ import eu.dnetlib.dhp.actionmanager.opencitations.model.COCI; import eu.dnetlib.dhp.application.ArgumentApplicationParser; import eu.dnetlib.dhp.schema.action.AtomicAction; import eu.dnetlib.dhp.schema.common.ModelConstants; -import eu.dnetlib.dhp.schema.common.ModelSupport; import eu.dnetlib.dhp.schema.oaf.*; import eu.dnetlib.dhp.schema.oaf.utils.CleaningFunctions; import eu.dnetlib.dhp.schema.oaf.utils.IdentifierFactory; @@ -100,7 +100,7 @@ public class CreateActionSetSparkJob implements Serializable { getTextTextJavaPairRDD(spark, inputPath, shouldDuplicateRels, COCI) .union(getTextTextJavaPairRDD(spark, inputPath, shouldDuplicateRels, POCI)) - .saveAsHadoopFile(outputPath, Text.class, Text.class, SequenceFileOutputFormat.class); + .saveAsHadoopFile(outputPath, Text.class, Text.class, SequenceFileOutputFormat.class, GzipCodec.class); } private static JavaPairRDD getTextTextJavaPairRDD(SparkSession spark, String inputPath, From 84a58802ab51ea5a496b14059799a78366d74d07 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Fri, 6 Oct 2023 14:48:05 +0200 Subject: [PATCH 310/449] [OC] using the common pid cleaning function --- .../opencitations/CreateActionSetSparkJob.java | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/opencitations/CreateActionSetSparkJob.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/opencitations/CreateActionSetSparkJob.java index ed0a54efa..a367ba852 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/opencitations/CreateActionSetSparkJob.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/opencitations/CreateActionSetSparkJob.java @@ -7,6 +7,7 @@ import java.io.IOException; import java.io.Serializable; import java.util.*; +import eu.dnetlib.dhp.schema.oaf.utils.*; import org.apache.commons.cli.ParseException; import org.apache.commons.io.IOUtils; import org.apache.hadoop.io.Text; @@ -29,10 +30,6 @@ import eu.dnetlib.dhp.application.ArgumentApplicationParser; import eu.dnetlib.dhp.schema.action.AtomicAction; import eu.dnetlib.dhp.schema.common.ModelConstants; import eu.dnetlib.dhp.schema.oaf.*; -import eu.dnetlib.dhp.schema.oaf.utils.CleaningFunctions; -import eu.dnetlib.dhp.schema.oaf.utils.IdentifierFactory; -import eu.dnetlib.dhp.schema.oaf.utils.OafMapperUtils; -import eu.dnetlib.dhp.schema.oaf.utils.PidType; import eu.dnetlib.dhp.utils.DHPUtils; import scala.Tuple2; @@ -136,19 +133,19 @@ public class CreateActionSetSparkJob implements Serializable { prefix = DOI_PREFIX; citing = prefix + IdentifierFactory - .md5(CleaningFunctions.normalizePidValue(PidType.doi.toString(), value.getCiting())); + .md5(PidCleaner.normalizePidValue(PidType.doi.toString(), value.getCiting())); cited = prefix + IdentifierFactory - .md5(CleaningFunctions.normalizePidValue(PidType.doi.toString(), value.getCited())); + .md5(PidCleaner.normalizePidValue(PidType.doi.toString(), value.getCited())); break; case POCI: prefix = PMID_PREFIX; citing = prefix + IdentifierFactory - .md5(CleaningFunctions.normalizePidValue(PidType.pmid.toString(), value.getCiting())); + .md5(PidCleaner.normalizePidValue(PidType.pmid.toString(), value.getCiting())); cited = prefix + IdentifierFactory - .md5(CleaningFunctions.normalizePidValue(PidType.pmid.toString(), value.getCited())); + .md5(PidCleaner.normalizePidValue(PidType.pmid.toString(), value.getCited())); break; default: throw new IllegalStateException("Invalid prefix: " + p); From ef833840c357f97595ce563393bff3331f0d987d Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Fri, 6 Oct 2023 15:48:18 +0200 Subject: [PATCH 311/449] [Doiboost] removed linkage to SFI unidentified project --- .../eu/dnetlib/dhp/doiboost/crossref/irish_funder.json | 6 ------ 1 file changed, 6 deletions(-) diff --git a/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/crossref/irish_funder.json b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/crossref/irish_funder.json index 6c6912c2e..15eb1b711 100644 --- a/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/crossref/irish_funder.json +++ b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/crossref/irish_funder.json @@ -433,12 +433,6 @@ "name": "Royal Irish Academy", "synonym": [] }, - { - "id": "501100001602", - "uri": "http://dx.doi.org/10.13039/501100001602", - "name": "Science Foundation Ireland", - "synonym": [] - }, { "id": "501100001603", "uri": "http://dx.doi.org/10.13039/501100001603", From 489a082f044cc89215f2183eb06ff764826f8578 Mon Sep 17 00:00:00 2001 From: dimitrispie Date: Mon, 9 Oct 2023 14:00:50 +0300 Subject: [PATCH 312/449] Update step16-createIndicatorsTables.sql Change scripts for gold, hybrid, bronze indicators --- .../scripts/step16-createIndicatorsTables.sql | 353 ++++++++++++------ 1 file changed, 245 insertions(+), 108 deletions(-) diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step16-createIndicatorsTables.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step16-createIndicatorsTables.sql index ae95727a6..6af486340 100755 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step16-createIndicatorsTables.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step16-createIndicatorsTables.sql @@ -1,4 +1,6 @@ -- Sprint 1 ---- +drop table if exists ${stats_db_name}.indi_pub_green_oa purge; + create table if not exists ${stats_db_name}.indi_pub_green_oa stored as parquet as select distinct p.id, coalesce(green_oa, 0) as green_oa from ${stats_db_name}.publication p @@ -12,6 +14,8 @@ from ${stats_db_name}.publication p or ri.accessright = 'Embargo' or ri.accessright = 'Open Source')) tmp on p.id= tmp.id; +drop table if exists ${stats_db_name}.indi_pub_grey_lit purge; + create table if not exists ${stats_db_name}.indi_pub_grey_lit stored as parquet as select distinct p.id, coalesce(grey_lit, 0) as grey_lit from ${stats_db_name}.publication p @@ -23,6 +27,8 @@ from ${stats_db_name}.publication p not exists (select 1 from ${stats_db_name}.result_classifications rc where type ='Other literature type' and rc.id=p.id)) tmp on p.id=tmp.id; +drop table if exists ${stats_db_name}.indi_pub_doi_from_crossref purge; + create table if not exists ${stats_db_name}.indi_pub_doi_from_crossref stored as parquet as select distinct p.id, coalesce(doi_from_crossref, 0) as doi_from_crossref from ${stats_db_name}.publication p @@ -33,6 +39,8 @@ from ${stats_db_name}.publication p on tmp.id=p.id; -- Sprint 2 ---- +drop table if exists ${stats_db_name}.indi_result_has_cc_licence purge; + create table if not exists ${stats_db_name}.indi_result_has_cc_licence stored as parquet as select distinct r.id, (case when lic='' or lic is null then 0 else 1 end) as has_cc_license from ${stats_db_name}.result r @@ -41,6 +49,8 @@ left outer join (select r.id, license.type as lic from ${stats_db_name}.result r where lower(license.type) LIKE '%creativecommons.org%' OR lower(license.type) LIKE '%cc-%') tmp on r.id= tmp.id; +drop table if exists ${stats_db_name}.indi_result_has_cc_licence_url purge; + create table if not exists ${stats_db_name}.indi_result_has_cc_licence_url stored as parquet as select distinct r.id, case when lic_host='' or lic_host is null then 0 else 1 end as has_cc_license_url from ${stats_db_name}.result r @@ -50,10 +60,14 @@ from ${stats_db_name}.result r WHERE lower(parse_url(license.type, "HOST")) = "creativecommons.org") tmp on r.id= tmp.id; +drop table if exists ${stats_db_name}.indi_pub_has_abstract purge; + create table if not exists ${stats_db_name}.indi_pub_has_abstract stored as parquet as select distinct publication.id, cast(coalesce(abstract, true) as int) has_abstract from ${stats_db_name}.publication; +drop table if exists ${stats_db_name}.indi_result_with_orcid purge; + create table if not exists ${stats_db_name}.indi_result_with_orcid stored as parquet as select distinct r.id, coalesce(has_orcid, 0) as has_orcid from ${stats_db_name}.result r @@ -61,6 +75,9 @@ from ${stats_db_name}.result r on r.id= tmp.id; ---- Sprint 3 ---- + +drop table if exists ${stats_db_name}.indi_funded_result_with_fundref purge; + create table if not exists ${stats_db_name}.indi_funded_result_with_fundref stored as parquet as select distinct r.result as id, coalesce(fundref, 0) as fundref from ${stats_db_name}.project_results r @@ -79,6 +96,8 @@ from ${stats_db_name}.project_results r create TEMPORARY TABLE ${stats_db_name}.tmp AS SELECT ro.organization organization, ro.id, o.name from ${stats_db_name}.result_organization ro join ${stats_db_name}.organization o on o.id=ro.organization where o.name is not null; +drop table if exists ${stats_db_name}.indi_result_org_collab purge; + create table if not exists ${stats_db_name}.indi_result_org_collab stored as parquet as select o1.organization org1, o1.name org1name1, o2.organization org2, o2.name org2name2, count(o1.id) as collaborations from ${stats_db_name}.tmp as o1 @@ -91,6 +110,8 @@ create TEMPORARY TABLE ${stats_db_name}.tmp AS select distinct ro.organization organization, ro.id, o.name, o.country from ${stats_db_name}.result_organization ro join ${stats_db_name}.organization o on o.id=ro.organization where country <> 'UNKNOWN' and o.name is not null; +drop table if exists ${stats_db_name}.indi_result_org_country_collab purge; + create table if not exists ${stats_db_name}.indi_result_org_country_collab stored as parquet as select o1.organization org1,o1.name org1name1, o2.country country2, count(o1.id) as collaborations from ${stats_db_name}.tmp as o1 join ${stats_db_name}.tmp as o2 on o1.id=o2.id @@ -103,6 +124,8 @@ create TEMPORARY TABLE ${stats_db_name}.tmp AS select o.id organization, o.name, ro.project as project from ${stats_db_name}.organization o join ${stats_db_name}.organization_projects ro on o.id=ro.id where o.name is not null; +drop table if exists ${stats_db_name}.indi_project_collab_org purge; + create table if not exists ${stats_db_name}.indi_project_collab_org stored as parquet as select o1.organization org1,o1.name orgname1, o2.organization org2, o2.name orgname2, count(distinct o1.project) as collaborations from ${stats_db_name}.tmp as o1 @@ -117,6 +140,8 @@ select o.id organization, o.name, o.country , ro.project as project from ${stat join ${stats_db_name}.organization_projects ro on o.id=ro.id and o.country <> 'UNKNOWN' and o.name is not null; +drop table if exists ${stats_db_name}.indi_project_collab_org_country purge; + create table if not exists ${stats_db_name}.indi_project_collab_org_country stored as parquet as select o1.organization org1,o1.name org1name, o2.country country2, count(distinct o1.project) as collaborations from ${stats_db_name}.tmp as o1 @@ -126,6 +151,8 @@ group by o1.organization, o2.country, o1.name; drop table ${stats_db_name}.tmp purge; +drop table if exists ${stats_db_name}.indi_funder_country_collab purge; + create table if not exists ${stats_db_name}.indi_funder_country_collab stored as parquet as with tmp as (select funder, project, country from ${stats_db_name}.organization_projects op join ${stats_db_name}.organization o on o.id=op.id @@ -142,6 +169,8 @@ select distinct country, ro.id as result from ${stats_db_name}.organization o join ${stats_db_name}.result_organization ro on o.id=ro.organization where country <> 'UNKNOWN' and o.name is not null; +drop table if exists ${stats_db_name}.indi_result_country_collab purge; + create table if not exists ${stats_db_name}.indi_result_country_collab stored as parquet as select o1.country country1, o2.country country2, count(o1.result) as collaborations from ${stats_db_name}.tmp as o1 @@ -152,6 +181,8 @@ group by o1.country, o2.country; drop table ${stats_db_name}.tmp purge; ---- Sprint 4 ---- +drop table if exists ${stats_db_name}.indi_pub_diamond purge; + create table if not exists ${stats_db_name}.indi_pub_diamond stored as parquet as select distinct pd.id, coalesce(in_diamond_journal, 0) as in_diamond_journal from ${stats_db_name}.publication_datasources pd @@ -162,6 +193,8 @@ from ${stats_db_name}.publication_datasources pd and (ps.journal_is_in_doaj=true or ps.journal_is_oa=true) and ps.has_apc=false) tmp on pd.id=tmp.id; +drop table if exists ${stats_db_name}.indi_pub_in_transformative purge; + create table if not exists ${stats_db_name}.indi_pub_in_transformative stored as parquet as select distinct pd.id, coalesce(is_transformative, 0) as is_transformative from ${stats_db_name}.publication pd @@ -172,6 +205,8 @@ from ${stats_db_name}.publication pd and ps.is_transformative_journal=true) tmp on pd.id=tmp.id; +drop table if exists ${stats_db_name}.indi_pub_closed_other_open purge; + create table if not exists ${stats_db_name}.indi_pub_closed_other_open stored as parquet as select distinct ri.id, coalesce(pub_closed_other_open, 0) as pub_closed_other_open from ${stats_db_name}.result_instance ri left outer join @@ -183,10 +218,14 @@ select distinct ri.id, coalesce(pub_closed_other_open, 0) as pub_closed_other_op on tmp.id=ri.id; ---- Sprint 5 ---- +drop table if exists ${stats_db_name}.indi_result_no_of_copies purge; + create table if not exists ${stats_db_name}.indi_result_no_of_copies stored as parquet as select id, count(id) as number_of_copies from ${stats_db_name}.result_instance group by id; ---- Sprint 6 ---- +drop table if exists ${stats_db_name}.indi_pub_downloads purge; + create table if not exists ${stats_db_name}.indi_pub_downloads stored as parquet as SELECT result_id, sum(downloads) no_downloads from openaire_prod_usage_stats.usage_stats join ${stats_db_name}.publication on result_id=id @@ -196,6 +235,8 @@ order by no_downloads desc; --ANALYZE TABLE ${stats_db_name}.indi_pub_downloads COMPUTE STATISTICS; +drop table if exists ${stats_db_name}.indi_pub_downloads_datasource purge; + create table if not exists ${stats_db_name}.indi_pub_downloads_datasource stored as parquet as SELECT result_id, repository_id, sum(downloads) no_downloads from openaire_prod_usage_stats.usage_stats join ${stats_db_name}.publication on result_id=id @@ -203,12 +244,16 @@ where downloads>0 GROUP BY result_id, repository_id order by result_id; +drop table if exists ${stats_db_name}.indi_pub_downloads_year purge; + create table if not exists ${stats_db_name}.indi_pub_downloads_year stored as parquet as SELECT result_id, cast(substring(us.`date`, 1,4) as int) as `year`, sum(downloads) no_downloads from openaire_prod_usage_stats.usage_stats us join ${stats_db_name}.publication on result_id=id where downloads>0 GROUP BY result_id, substring(us.`date`, 1,4); +drop table if exists ${stats_db_name}.indi_pub_downloads_datasource_year purge; + create table if not exists ${stats_db_name}.indi_pub_downloads_datasource_year stored as parquet as SELECT result_id, cast(substring(us.`date`, 1,4) as int) as `year`, repository_id, sum(downloads) no_downloads from openaire_prod_usage_stats.usage_stats us join ${stats_db_name}.publication on result_id=id @@ -216,54 +261,81 @@ where downloads>0 GROUP BY result_id, repository_id, substring(us.`date`, 1,4); ---- Sprint 7 ---- +drop table if exists ${stats_db_name}.indi_pub_gold_oa purge; + +--create table if not exists ${stats_db_name}.indi_pub_gold_oa stored as parquet as +-- WITH gold_oa AS ( SELECT +-- issn_l, +-- journal_is_in_doaj, +-- journal_is_oa, +-- issn_1 as issn +-- FROM +-- STATS_EXT.oa_journals +-- WHERE +-- issn_1 != "" +-- UNION +-- ALL SELECT +-- issn_l, +-- journal_is_in_doaj, +-- journal_is_oa, +-- issn_2 as issn +-- FROM +-- STATS_EXT.oa_journals +-- WHERE +-- issn_2 != "" ), issn AS ( SELECT +-- * +-- FROM +--( SELECT +-- id, +-- issn_printed as issn +-- FROM +-- ${stats_db_name}.datasource +-- WHERE +-- issn_printed IS NOT NULL +-- UNION ALL +-- SELECT +-- id, +-- issn_online as issn +-- FROM +-- ${stats_db_name}.datasource +-- WHERE +-- issn_online IS NOT NULL or id like '%doajarticles%') as issn +-- WHERE +-- LENGTH(issn) > 7) +--SELECT +-- DISTINCT pd.id, coalesce(is_gold, 0) as is_gold +--FROM +-- ${stats_db_name}.publication_datasources pd +-- left outer join( +-- select pd.id, 1 as is_gold FROM ${stats_db_name}.publication_datasources pd +-- JOIN issn on issn.id=pd.datasource +-- JOIN gold_oa on issn.issn = gold_oa.issn) tmp +-- on pd.id=tmp.id; + create table if not exists ${stats_db_name}.indi_pub_gold_oa stored as parquet as - WITH gold_oa AS ( SELECT - issn_l, - journal_is_in_doaj, - journal_is_oa, - issn_1 as issn - FROM - STATS_EXT.oa_journals - WHERE - issn_1 != "" - UNION - ALL SELECT - issn_l, - journal_is_in_doaj, - journal_is_oa, - issn_2 as issn - FROM - STATS_EXT.oa_journals - WHERE - issn_2 != "" ), issn AS ( SELECT - * - FROM -( SELECT - id, - issn_printed as issn - FROM - ${stats_db_name}.datasource - WHERE - issn_printed IS NOT NULL - UNION ALL - SELECT - id, - issn_online as issn - FROM - ${stats_db_name}.datasource - WHERE - issn_online IS NOT NULL or id like '%doajarticles%') as issn - WHERE - LENGTH(issn) > 7) -SELECT - DISTINCT pd.id, coalesce(is_gold, 0) as is_gold -FROM - ${stats_db_name}.publication_datasources pd - left outer join( - select pd.id, 1 as is_gold FROM ${stats_db_name}.publication_datasources pd - JOIN issn on issn.id=pd.datasource - JOIN gold_oa on issn.issn = gold_oa.issn) tmp - on pd.id=tmp.id; +with gold_oa as ( +SELECT issn,issn_l from stats_ext.issn_gold_oa_dataset_v5), +issn AS (SELECT * FROM +(SELECT id,issn_printed as issn FROM ${stats_db_name}.datasource +WHERE issn_printed IS NOT NULL +UNION ALL +SELECT id, issn_online as issn FROM ${stats_db_name}.datasource +WHERE issn_online IS NOT NULL or id like '%doajarticles%') as issn +WHERE LENGTH(issn) > 7), +alljournals AS(select issn, issn_l from stats_ext.alljournals +where journal_is_in_doaj=true or journal_is_oa=true) +SELECT DISTINCT pd.id, coalesce(is_gold, 0) as is_gold +FROM ${stats_db_name}.publication_datasources pd +left outer join ( +select pd.id, 1 as is_gold FROM ${stats_db_name}.publication_datasources pd +JOIN issn on issn.id=pd.datasource +JOIN gold_oa on issn.issn = gold_oa.issn +join alljournals on issn.issn=alljournals.issn +left outer join ${stats_db_name}.result_instance ri on ri.id=pd.id +and ri.accessright!='Closed Access' and ri.accessright_uw='gold') tmp +on pd.id=tmp.id; + +drop table if exists ${stats_db_name}.indi_pub_hybrid_oa_with_cc purge; create table if not exists ${stats_db_name}.indi_pub_hybrid_oa_with_cc stored as parquet as WITH hybrid_oa AS ( @@ -296,56 +368,71 @@ FROM ${stats_db_name}.publication_datasources pd JOIN ${stats_db_name}.indi_pub_gold_oa ga on pd.id=ga.id where cc.has_cc_license=1 and ga.is_gold=0) tmp on pd.id=tmp.id; +drop table if exists ${stats_db_name}.indi_pub_hybrid purge; + +--create table if not exists ${stats_db_name}.indi_pub_hybrid stored as parquet as +-- WITH gold_oa AS ( SELECT +-- issn_l, +-- journal_is_in_doaj, +-- journal_is_oa, +-- issn_1 as issn, +-- has_apc +-- FROM +-- STATS_EXT.oa_journals +-- WHERE +-- issn_1 != "" +-- UNION +-- ALL SELECT +-- issn_l, +-- journal_is_in_doaj, +-- journal_is_oa, +-- issn_2 as issn, +-- has_apc +-- FROM +-- STATS_EXT.oa_journals +-- WHERE +-- issn_2 != "" ), issn AS ( SELECT +-- * +-- FROM +--( SELECT +-- id, +-- issn_printed as issn +-- FROM +-- ${stats_db_name}.datasource +-- WHERE +-- issn_printed IS NOT NULL +-- UNION ALL +-- SELECT +-- id, +-- issn_online as issn +-- FROM +-- ${stats_db_name}.datasource +-- WHERE +-- issn_online IS NOT NULL or id like '%doajarticles%') as issn +-- WHERE +-- LENGTH(issn) > 7) +--select distinct pd.id, coalesce(is_hybrid, 0) as is_hybrid +--from ${stats_db_name}.publication_datasources pd +-- left outer join ( +-- select pd.id, 1 as is_hybrid from ${stats_db_name}.publication_datasources pd +-- join ${stats_db_name}.datasource d on d.id=pd.datasource +-- join issn on issn.id=pd.datasource +-- join gold_oa on issn.issn=gold_oa.issn +-- where (gold_oa.journal_is_in_doaj=false or gold_oa.journal_is_oa=false))tmp +-- on pd.id=tmp.id; + create table if not exists ${stats_db_name}.indi_pub_hybrid stored as parquet as - WITH gold_oa AS ( SELECT - issn_l, - journal_is_in_doaj, - journal_is_oa, - issn_1 as issn, - has_apc - FROM - STATS_EXT.oa_journals - WHERE - issn_1 != "" - UNION - ALL SELECT - issn_l, - journal_is_in_doaj, - journal_is_oa, - issn_2 as issn, - has_apc - FROM - STATS_EXT.oa_journals - WHERE - issn_2 != "" ), issn AS ( SELECT - * - FROM -( SELECT - id, - issn_printed as issn - FROM - ${stats_db_name}.datasource - WHERE - issn_printed IS NOT NULL - UNION ALL - SELECT - id, - issn_online as issn - FROM - ${stats_db_name}.datasource - WHERE - issn_online IS NOT NULL or id like '%doajarticles%') as issn - WHERE - LENGTH(issn) > 7) -select distinct pd.id, coalesce(is_hybrid, 0) as is_hybrid -from ${stats_db_name}.publication_datasources pd - left outer join ( - select pd.id, 1 as is_hybrid from ${stats_db_name}.publication_datasources pd - join ${stats_db_name}.datasource d on d.id=pd.datasource - join issn on issn.id=pd.datasource - join gold_oa on issn.issn=gold_oa.issn - where (gold_oa.journal_is_in_doaj=false or gold_oa.journal_is_oa=false))tmp - on pd.id=tmp.id; +select pd.id,coalesce(is_hybrid,0) is_hybrid from ${stats_db_name}.publication_datasources pd +left outer join (select pd.id, 1 as is_hybrid from ${stats_db_name}.publication_datasources pd +join ${stats_db_name}.datasource d on pd.datasource=d.id +join ${stats_db_name}.result_instance ri on ri.id=pd.id +join ${stats_db_name}.indi_pub_gold_oa indi_gold on indi_gold.id=pd.id +join ${stats_db_name}.result_accessroute ra on ra.id=pd.id +where d.type like '%Journal%' and ri.accessright!='Closed Access' and (ri.accessright_uw!='gold' +or indi_gold.is_gold=0) and (ra.accessroute='hybrid' or ri.license is not null)) tmp +on pd.id=tmp.id; + +drop table if exists ${stats_db_name}.indi_org_fairness purge; create table if not exists ${stats_db_name}.indi_org_fairness stored as parquet as --return results with PIDs, and rich metadata group by organization @@ -381,6 +468,8 @@ select ro.organization, count(distinct ro.id) no_allresults from ${stats_db_name where cast(year as int)>2003 group by ro.organization; +drop table if exists ${stats_db_name}.indi_org_fairness_pub_pr purge; + create table if not exists ${stats_db_name}.indi_org_fairness_pub_pr stored as parquet as select ar.organization, rf.no_result_fair/ar.no_allresults org_fairness from ${stats_db_name}.allresults ar @@ -400,6 +489,8 @@ CREATE TEMPORARY TABLE ${stats_db_name}.allresults as select year, ro.organizati where cast(year as int)>2003 group by ro.organization, year; +drop table if exists ${stats_db_name}.indi_org_fairness_pub_year purge; + create table if not exists ${stats_db_name}.indi_org_fairness_pub_year stored as parquet as select allresults.year, allresults.organization, result_fair.no_result_fair/allresults.no_allresults org_fairness from ${stats_db_name}.allresults @@ -422,6 +513,8 @@ CREATE TEMPORARY TABLE ${stats_db_name}.allresults as where cast(year as int)>2003 group by ro.organization; +drop table if exists ${stats_db_name}.indi_org_fairness_pub purge; + create table if not exists ${stats_db_name}.indi_org_fairness_pub as select ar.organization, rf.no_result_fair/ar.no_allresults org_fairness from ${stats_db_name}.allresults ar join ${stats_db_name}.result_fair rf @@ -443,6 +536,8 @@ CREATE TEMPORARY TABLE ${stats_db_name}.allresults as where cast(year as int)>2003 group by ro.organization, year; +drop table if exists ${stats_db_name}.indi_org_fairness_year purge; + create table if not exists ${stats_db_name}.indi_org_fairness_year stored as parquet as select cast(allresults.year as int) year, allresults.organization, result_fair.no_result_fair/allresults.no_allresults org_fairness from ${stats_db_name}.allresults @@ -464,6 +559,8 @@ CREATE TEMPORARY TABLE ${stats_db_name}.allresults as where cast(year as int) >2003 group by ro.organization, year; +drop table if exists ${stats_db_name}.indi_org_findable_year purge; + create table if not exists ${stats_db_name}.indi_org_findable_year stored as parquet as select cast(allresults.year as int) year, allresults.organization, result_with_pid.no_result_with_pid/allresults.no_allresults org_findable from ${stats_db_name}.allresults @@ -485,6 +582,8 @@ select ro.organization, count(distinct ro.id) no_allresults from ${stats_db_name where cast(year as int) >2003 group by ro.organization; +drop table if exists ${stats_db_name}.indi_org_findable purge; + create table if not exists ${stats_db_name}.indi_org_findable stored as parquet as select allresults.organization, result_with_pid.no_result_with_pid/allresults.no_allresults org_findable from ${stats_db_name}.allresults @@ -549,6 +648,8 @@ select software_oa.organization, software_oa.no_oasoftware/allsoftware.no_allsof from ${stats_db_name}.allsoftware join ${stats_db_name}.software_oa on allsoftware.organization=software_oa.organization; +drop table if exists ${stats_db_name}.indi_org_openess purge; + create table if not exists ${stats_db_name}.indi_org_openess stored as parquet as select allpubsshare.organization, (p+if(isnull(s),0,s)+if(isnull(d),0,d))/(1+(case when s is null then 0 else 1 end) @@ -624,6 +725,7 @@ select allsoftware.year, software_oa.organization, software_oa.no_oasoftware/all from ${stats_db_name}.allsoftware join ${stats_db_name}.software_oa on allsoftware.organization=software_oa.organization where cast(allsoftware.year as INT)=cast(software_oa.year as int); +drop table if exists ${stats_db_name}.indi_org_openess_year purge; create table if not exists ${stats_db_name}.indi_org_openess_year stored as parquet as select cast(allpubsshare.year as int) year, allpubsshare.organization, @@ -647,6 +749,8 @@ DROP TABLE ${stats_db_name}.allpubsshare purge; DROP TABLE ${stats_db_name}.alldatasetssshare purge; DROP TABLE ${stats_db_name}.allsoftwaresshare purge; +drop table if exists ${stats_db_name}.indi_pub_has_preprint purge; + create table if not exists ${stats_db_name}.indi_pub_has_preprint stored as parquet as select distinct p.id, coalesce(has_preprint, 0) as has_preprint from ${stats_db_name}.publication_classifications p @@ -655,6 +759,7 @@ from ${stats_db_name}.publication_classifications p from ${stats_db_name}.publication_classifications p where p.type='Preprint') tmp on p.id= tmp.id; +drop table if exists ${stats_db_name}.indi_pub_in_subscribed purge; create table if not exists ${stats_db_name}.indi_pub_in_subscribed stored as parquet as select distinct p.id, coalesce(is_subscription, 0) as is_subscription @@ -667,6 +772,8 @@ from ${stats_db_name}.publication p where g.is_gold=0 and h.is_hybrid=0 and t.is_transformative=0) tmp on p.id=tmp.id; +drop table if exists ${stats_db_name}.indi_result_with_pid purge; + create table if not exists ${stats_db_name}.indi_result_with_pid as select distinct p.id, coalesce(result_with_pid, 0) as result_with_pid from ${stats_db_name}.result p @@ -679,6 +786,8 @@ CREATE TEMPORARY TABLE ${stats_db_name}.pub_fos_totals as select rf.id, count(distinct lvl3) totals from ${stats_db_name}.result_fos rf group by rf.id; +drop table if exists ${stats_db_name}.indi_pub_interdisciplinarity purge; + create table if not exists ${stats_db_name}.indi_pub_interdisciplinarity as select distinct p.id as id, coalesce(is_interdisciplinary, 0) as is_interdisciplinary @@ -689,18 +798,31 @@ where totals>1) tmp on p.id=tmp.id; drop table ${stats_db_name}.pub_fos_totals purge; -create table if not exists ${stats_db_name}.indi_pub_bronze_oa stored as parquet as -select distinct p.id, coalesce(is_bronze_oa,0) as is_bronze_oa -from ${stats_db_name}.publication p -left outer join -(select p.id, 1 as is_bronze_oa from ${stats_db_name}.publication p -join ${stats_db_name}.indi_result_has_cc_licence cc on cc.id=p.id -join ${stats_db_name}.indi_pub_gold_oa ga on ga.id=p.id -join ${stats_db_name}.result_instance ri on ri.id=p.id -join ${stats_db_name}.datasource d on d.id=ri.hostedby -where cc.has_cc_license=0 and ga.is_gold=0 -and (d.type='Journal' or d.type='Journal Aggregator/Publisher') -and ri.accessright='Open Access') tmp on tmp.id=p.id; +drop table if exists ${stats_db_name}.indi_pub_bronze_oa purge; + +--create table if not exists ${stats_db_name}.indi_pub_bronze_oa stored as parquet as +--select distinct p.id, coalesce(is_bronze_oa,0) as is_bronze_oa +--from ${stats_db_name}.publication p +--left outer join +--(select p.id, 1 as is_bronze_oa from ${stats_db_name}.publication p +--join ${stats_db_name}.indi_result_has_cc_licence cc on cc.id=p.id +--join ${stats_db_name}.indi_pub_gold_oa ga on ga.id=p.id +--join ${stats_db_name}.result_instance ri on ri.id=p.id +--join ${stats_db_name}.datasource d on d.id=ri.hostedby +--where cc.has_cc_license=0 and ga.is_gold=0 +--and (d.type='Journal' or d.type='Journal Aggregator/Publisher') +--and ri.accessright='Open Access') tmp on tmp.id=p.id; + +create table ${stats_db_name}.indi_pub_bronze stored as parquet as +select pd.id,coalesce(is_bronze_oa,0) is_bronze_oa from ${stats_db_name}.publication_datasources pd +left outer join (select pd.id, 1 as is_bronze_oa from ${stats_db_name}.publication_datasources pd +join ${stats_db_name}.datasource d on pd.datasource=d.id +join ${stats_db_name}.result_instance ri on ri.id=pd.id +join ${stats_db_name}.indi_pub_gold_oa indi_gold on indi_gold.id=pd.id +join ${stats_db_name}.result_accessroute ra on ra.id=pd.id +where d.type like '%Journal%' and ri.accessright!='Closed Access' and (ri.accessright_uw!='gold' +or indi_gold.is_gold=0) and (ra.accessroute='bronze' or ri.license is null)) tmp +on pd.id=tmp.id; CREATE TEMPORARY TABLE ${stats_db_name}.project_year_result_year as select p.id project_id, acronym, r.id result_id, r.year, p.end_year @@ -709,6 +831,8 @@ join ${stats_db_name}.result_projects rp on p.id=rp.project join ${stats_db_name}.result r on r.id=rp.id where p.end_year is NOT NULL and r.year is not null; +drop table if exists ${stats_db_name}.indi_is_project_result_after purge; + create table if not exists ${stats_db_name}.indi_is_project_result_after stored as parquet as select pry.project_id, pry.acronym, pry.result_id, coalesce(is_project_result_after, 0) as is_project_result_after @@ -719,6 +843,8 @@ where pry.year>pry.end_year) tmp on pry.result_id=tmp.result_id; drop table ${stats_db_name}.project_year_result_year purge; +drop table ${stats_db_name}.indi_is_funder_plan_s purge; + create table if not exists ${stats_db_name}.indi_is_funder_plan_s stored as parquet as select distinct f.id, f.name, coalesce(is_funder_plan_s, 0) as is_funder_plan_s from ${stats_db_name}.funder f @@ -727,6 +853,7 @@ from ${stats_db_name}.funder f on f.name= tmp.name; --Funder Fairness +drop table ${stats_db_name}.indi_funder_fairness purge; create table if not exists ${stats_db_name}.indi_funder_fairness stored as parquet as with result_fair as @@ -745,6 +872,8 @@ from allresults join result_fair on result_fair.funder=allresults.funder; --RIs Fairness +drop table ${stats_db_name}.indi_ris_fairness purge; + create table if not exists ${stats_db_name}.indi_ris_fairness stored as parquet as with result_contexts as (select distinct rc.id, context.name ri_initiative from ${stats_db_name}.result_concepts rc @@ -830,6 +959,8 @@ select software_oa.funder, software_oa.no_oasoftware/allsoftware.no_allsoftware from ${stats_db_name}.allsoftware join ${stats_db_name}.software_oa on allsoftware.funder=software_oa.funder; +drop table ${stats_db_name}.indi_funder_openess purge; + create table if not exists ${stats_db_name}.indi_funder_openess stored as parquet as select allpubsshare.funder, (p+if(isnull(s),0,s)+if(isnull(d),0,d))/(1+(case when s is null then 0 else 1 end) @@ -916,6 +1047,8 @@ select software_oa.ri_initiative, software_oa.no_oasoftware/allsoftware.no_allso from ${stats_db_name}.allsoftware join ${stats_db_name}.software_oa on allsoftware.ri_initiative=software_oa.ri_initiative; +drop table ${stats_db_name}.indi_ris_openess purge; + create table if not exists ${stats_db_name}.indi_ris_openess stored as parquet as select allpubsshare.ri_initiative, (p+if(isnull(s),0,s)+if(isnull(d),0,d))/(1+(case when s is null then 0 else 1 end) @@ -940,6 +1073,8 @@ DROP TABLE ${stats_db_name}.alldatasetssshare purge; DROP TABLE ${stats_db_name}.allsoftwaresshare purge; --Funder Findability +drop table ${stats_db_name}.indi_funder_findable purge; + create table if not exists ${stats_db_name}.indi_funder_findable stored as parquet as with result_findable as (select p.funder funder, count(distinct rp.id) no_result_findable from ${stats_db_name}.result_projects rp @@ -958,6 +1093,8 @@ from allresults join result_findable on result_findable.funder=allresults.funder; --RIs Findability +drop table ${stats_db_name}.indi_ris_findable purge; + create table if not exists ${stats_db_name}.indi_ris_findable stored as parquet as with result_contexts as (select distinct rc.id, context.name ri_initiative from ${stats_db_name}.result_concepts rc From 17586f0ff8d0e8d6225ecff52fa072ed4e66c3d4 Mon Sep 17 00:00:00 2001 From: dimitrispie Date: Mon, 9 Oct 2023 14:21:31 +0300 Subject: [PATCH 313/449] Update step20-createMonitorDB.sql Add result_orcid table to monitor dbs --- .../oa/graph/stats/oozie_app/scripts/step20-createMonitorDB.sql | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB.sql index 586bee347..d5d242230 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB.sql @@ -162,6 +162,8 @@ create table TARGET.result_fos stored as parquet as select * from SOURCE.result_ create table TARGET.result_accessroute stored as parquet as select * from SOURCE.result_accessroute orig where exists (select 1 from TARGET.result r where r.id=orig.id); --ANALYZE TABLE TARGET.result_accessroute COMPUTE STATISTICS; +create table TARGET.result_orcid stored as parquet as select * from SOURCE.result_orcid orig where exists (select 1 from TARGET.result r where r.id=orig.id); + create view TARGET.foo1 as select * from SOURCE.result_result rr where rr.source in (select id from TARGET.result); create view TARGET.foo2 as select * from SOURCE.result_result rr where rr.target in (select id from TARGET.result); create table TARGET.result_result STORED AS PARQUET as select distinct * from (select * from TARGET.foo1 union all select * from TARGET.foo2) foufou; From 3d6be209899806d9c319eb034f26b1248e671091 Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Mon, 9 Oct 2023 14:26:33 +0200 Subject: [PATCH 314/449] changes to use the API instead of the IS the get the information for the communities to be used during bulktagging and context propagation --- .../bipfinder/SparkAtomicActionScoreJob.java | 2 +- .../dhp/oa/dedup/SparkPropagateRelation.java | 72 +++---- .../eu/dnetlib/dhp/api/QueryCommunityAPI.java | 78 +++++++ .../main/java/eu/dnetlib/dhp/api/Utils.java | 136 +++++++++++++ .../api/model/CommunityContentprovider.java | 43 ++++ .../model/CommunityEntityMap.java} | 6 +- .../dnetlib/dhp/api/model/CommunityModel.java | 108 ++++++++++ .../dhp/api/model/CommunitySummary.java | 16 ++ .../dnetlib/dhp/api/model/ContentModel.java | 50 +++++ .../dnetlib/dhp/api/model/DatasourceList.java | 12 ++ .../dhp/api/model/OrganizationList.java | 15 ++ .../dnetlib/dhp/api/model/ProjectModel.java | 23 +++ .../dnetlib/dhp/bulktag/SparkBulkTagJob.java | 4 +- .../dhp/bulktag/community/Community.java | 10 +- .../community/CommunityConfiguration.java | 8 +- .../CommunityConfigurationFactory.java | 13 +- .../dhp/bulktag/community/Constraint.java | 20 +- .../community/SelectionConstraints.java | 3 +- .../PrepareResultCommunitySet.java | 17 +- .../oozie_app/workflow.xml | 8 +- .../dnetlib/dhp/bulktag/BulkTagJobTest.java | 38 ++++ .../CommunityConfigurationFactoryTest.java | 2 +- .../dhp/bulktag/QueryCommunityAPITest.java | 91 +++++++++ .../group/GroupEntitiesSparkJobTest.java | 190 +++++++++--------- 24 files changed, 787 insertions(+), 178 deletions(-) create mode 100644 dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/QueryCommunityAPI.java create mode 100644 dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/Utils.java create mode 100644 dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/CommunityContentprovider.java rename dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/{resulttocommunityfromorganization/OrganizationMap.java => api/model/CommunityEntityMap.java} (59%) create mode 100644 dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/CommunityModel.java create mode 100644 dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/CommunitySummary.java create mode 100644 dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/ContentModel.java create mode 100644 dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/DatasourceList.java create mode 100644 dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/OrganizationList.java create mode 100644 dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/ProjectModel.java create mode 100644 dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/QueryCommunityAPITest.java diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipfinder/SparkAtomicActionScoreJob.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipfinder/SparkAtomicActionScoreJob.java index 040c89782..8adc88920 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipfinder/SparkAtomicActionScoreJob.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipfinder/SparkAtomicActionScoreJob.java @@ -95,7 +95,7 @@ public class SparkAtomicActionScoreJob implements Serializable { return projectScores.map((MapFunction) bipProjectScores -> { Project project = new Project(); - project.setId(bipProjectScores.getProjectId()); + // project.setId(bipProjectScores.getProjectId()); project.setMeasures(bipProjectScores.toMeasures()); return project; }, Encoders.bean(Project.class)) diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkPropagateRelation.java b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkPropagateRelation.java index 739295c91..cb1c70059 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkPropagateRelation.java +++ b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkPropagateRelation.java @@ -67,60 +67,60 @@ public class SparkPropagateRelation extends AbstractSparkAction { log.info("graphOutputPath: '{}'", graphOutputPath); Dataset mergeRels = spark - .read() - .load(DedupUtility.createMergeRelPath(workingPath, "*", "*")) - .as(REL_BEAN_ENC); + .read() + .load(DedupUtility.createMergeRelPath(workingPath, "*", "*")) + .as(REL_BEAN_ENC); // Dataset idsToMerge = mergeRels - .where(col("relClass").equalTo(ModelConstants.MERGES)) - .select(col("source").as("dedupID"), col("target").as("mergedObjectID")) - .distinct(); + .where(col("relClass").equalTo(ModelConstants.MERGES)) + .select(col("source").as("dedupID"), col("target").as("mergedObjectID")) + .distinct(); Dataset allRels = spark - .read() - .schema(REL_BEAN_ENC.schema()) - .json(graphBasePath + "/relation"); + .read() + .schema(REL_BEAN_ENC.schema()) + .json(graphBasePath + "/relation"); Dataset dedupedRels = allRels - .joinWith(idsToMerge, allRels.col("source").equalTo(idsToMerge.col("mergedObjectID")), "left_outer") - .joinWith(idsToMerge, col("_1.target").equalTo(idsToMerge.col("mergedObjectID")), "left_outer") - .select("_1._1", "_1._2.dedupID", "_2.dedupID") - .as(Encoders.tuple(REL_BEAN_ENC, Encoders.STRING(), Encoders.STRING())) - .map((MapFunction, Relation>) t -> { - Relation rel = t._1(); - String newSource = t._2(); - String newTarget = t._3(); + .joinWith(idsToMerge, allRels.col("source").equalTo(idsToMerge.col("mergedObjectID")), "left_outer") + .joinWith(idsToMerge, col("_1.target").equalTo(idsToMerge.col("mergedObjectID")), "left_outer") + .select("_1._1", "_1._2.dedupID", "_2.dedupID") + .as(Encoders.tuple(REL_BEAN_ENC, Encoders.STRING(), Encoders.STRING())) + .map((MapFunction, Relation>) t -> { + Relation rel = t._1(); + String newSource = t._2(); + String newTarget = t._3(); - if (rel.getDataInfo() == null) { - rel.setDataInfo(new DataInfo()); - } + if (rel.getDataInfo() == null) { + rel.setDataInfo(new DataInfo()); + } - if (newSource != null || newTarget != null) { - rel.getDataInfo().setDeletedbyinference(false); + if (newSource != null || newTarget != null) { + rel.getDataInfo().setDeletedbyinference(false); - if (newSource != null) - rel.setSource(newSource); + if (newSource != null) + rel.setSource(newSource); - if (newTarget != null) - rel.setTarget(newTarget); - } + if (newTarget != null) + rel.setTarget(newTarget); + } - return rel; - }, REL_BEAN_ENC); + return rel; + }, REL_BEAN_ENC); // ids of records that are both not deletedbyinference and not invisible Dataset ids = validIds(spark, graphBasePath); // filter relations that point to valid records, can force them to be visible Dataset cleanedRels = dedupedRels - .join(ids, col("source").equalTo(ids.col("id")), "leftsemi") - .join(ids, col("target").equalTo(ids.col("id")), "leftsemi") - .as(REL_BEAN_ENC) - .map((MapFunction) r -> { - r.getDataInfo().setInvisible(false); - return r; - }, REL_KRYO_ENC); + .join(ids, col("source").equalTo(ids.col("id")), "leftsemi") + .join(ids, col("target").equalTo(ids.col("id")), "leftsemi") + .as(REL_BEAN_ENC) + .map((MapFunction) r -> { + r.getDataInfo().setInvisible(false); + return r; + }, REL_KRYO_ENC); Dataset distinctRels = cleanedRels .groupByKey( diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/QueryCommunityAPI.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/QueryCommunityAPI.java new file mode 100644 index 000000000..635ee2027 --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/QueryCommunityAPI.java @@ -0,0 +1,78 @@ + +package eu.dnetlib.dhp.api; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; + +import org.apache.http.HttpHeaders; +import org.jetbrains.annotations.NotNull; + +import com.google.gson.Gson; + +/** + * @author miriam.baglioni + * @Date 06/10/23 + */ +public class QueryCommunityAPI { + private static final String baseUrl = "https://services.openaire.eu/openaire/"; + + private static String get(String geturl) throws IOException{ + URL url = new URL(geturl); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setDoOutput(true); + conn.setRequestMethod("GET"); + + int responseCode = conn.getResponseCode(); + String body = getBody(conn); + conn.disconnect(); + if (responseCode != HttpURLConnection.HTTP_OK) + throw new IOException("Unexpected code " + responseCode + body); + + return body; + } + + public static String communities() throws IOException { + return get(baseUrl + "community/communities"); + } + + public static String community(String id) throws IOException { + return get(baseUrl + "community/" + id); + } + + public static String communityDatasource(String id)throws IOException{ + return get(baseUrl + "community/" + id + "/contentproviders"); + + } + + public static String communityPropagationOrganization(String id) throws IOException { + return get(baseUrl + "community/" + id + "/propagationOrganizations"); + } + + public static String communityProjects(String id, String page, String size) throws IOException{ + return get(baseUrl + "community/" + id +"/projects/" + page + "/" + size); + } + + @NotNull + private static String getBody(HttpURLConnection conn) throws IOException { + String body = "{}"; + try (BufferedReader br = new BufferedReader( + new InputStreamReader(conn.getInputStream(), "utf-8"))) { + StringBuilder response = new StringBuilder(); + String responseLine = null; + while ((responseLine = br.readLine()) != null) { + response.append(responseLine.trim()); + } + + body = response.toString(); + + } + return body; + } + + +} diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/Utils.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/Utils.java new file mode 100644 index 000000000..5b3004a5d --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/Utils.java @@ -0,0 +1,136 @@ +package eu.dnetlib.dhp.api; + +import com.amazonaws.util.StringUtils; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.collect.Maps; +import eu.dnetlib.dhp.api.model.*; +import eu.dnetlib.dhp.bulktag.community.Community; +import eu.dnetlib.dhp.bulktag.community.CommunityConfiguration; +import eu.dnetlib.dhp.bulktag.community.Provider; +import eu.dnetlib.dhp.bulktag.criteria.VerbResolver; +import eu.dnetlib.dhp.bulktag.criteria.VerbResolverFactory; + +import javax.management.Query; +import java.io.IOException; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * @author miriam.baglioni + * @Date 09/10/23 + */ +public class Utils implements Serializable { + private static final ObjectMapper MAPPER = new ObjectMapper(); + private static final VerbResolver resolver = VerbResolverFactory.newInstance(); + + public static CommunityConfiguration getCommunityConfiguration() throws IOException { + final Map communities = Maps.newHashMap(); + List validCommunities = new ArrayList<>(); + getValidCommunities() + .forEach(community -> { + try { + CommunityModel cm = MAPPER.readValue(QueryCommunityAPI.community(community.getId()), CommunityModel.class); + validCommunities.add(getCommunity(cm)); + } catch (IOException e) { + throw new RuntimeException(e); + } + }); + validCommunities.forEach(community ->{ + try { + DatasourceList dl = MAPPER.readValue(QueryCommunityAPI.communityDatasource(community.getId()), DatasourceList.class); + community.setProviders(dl.stream().map(d -> { +// if(d.getEnabled() == null || Boolean.FALSE.equals(d.getEnabled())) +// return null; + Provider p = new Provider(); + p.setOpenaireId("10|" + d.getOpenaireId()); + p.setSelectionConstraints(d.getSelectioncriteria()); + if(p.getSelectionConstraints() != null) + p.getSelectionConstraints().setSelection(resolver); + return p; + }) + .filter(Objects::nonNull) + .collect(Collectors.toList())); + } catch (IOException e) { + throw new RuntimeException(e); + } + }); + + validCommunities.forEach(community ->{ + if(community.isValid()) + communities.put(community.getId(), community); + }); + return new CommunityConfiguration(communities); + } + + private static Community getCommunity(CommunityModel cm){ + Community c = new Community(); + c.setId(cm.getId()); + c.setZenodoCommunities(cm.getOtherZenodoCommunities()); + if(!StringUtils.isNullOrEmpty(cm.getZenodoCommunity())) + c.getZenodoCommunities().add(cm.getZenodoCommunity()); + c.setSubjects(cm.getSubjects()); + c.getSubjects().addAll(cm.getFos()); + c.getSubjects().addAll(cm.getSdg()); + c.setConstraints(cm.getAdvancedConstraints()); + if(c.getConstraints()!=null) + c.getConstraints().setSelection(resolver); + c.setRemoveConstraints(cm.getRemoveConstraints()); + if(c.getRemoveConstraints()!=null) + c.getRemoveConstraints().setSelection(resolver); + return c; + } + + public static List getValidCommunities() throws IOException { + return MAPPER.readValue(QueryCommunityAPI.communities(), CommunitySummary.class) + .stream() + .filter(community -> !community.getStatus().equals("hidden") && + (community.getType().equals("ri") || community.getType().equals("community"))) + .collect(Collectors.toList()); + } + public static CommunityEntityMap getCommunityOrganization() throws IOException { + CommunityEntityMap organizationMap = new CommunityEntityMap(); + getValidCommunities() + .forEach(community -> { + String id = community.getId(); + try { + List associatedOrgs = MAPPER.readValue(QueryCommunityAPI.communityPropagationOrganization(id), OrganizationList.class); + if(associatedOrgs.size() >0){ + organizationMap.put(id, associatedOrgs); + } + } catch (IOException e) { + throw new RuntimeException(e); + } + }); + return organizationMap; + } + + public static CommunityEntityMap getCommunityProjects()throws IOException{ + CommunityEntityMap projectMap = new CommunityEntityMap(); + getValidCommunities() + .forEach(community ->{ + int page = -1; + int size = 100; + ContentModel cm = new ContentModel(); + List projectList = new ArrayList<>(); + do{ + page ++; + try { + cm = MAPPER.readValue( QueryCommunityAPI.communityProjects(community.getId(), String.valueOf(page), String.valueOf(size)), ContentModel.class); + if (cm.getContent().size() > 0){ + + cm.getContent().forEach(p -> + projectList.add ("40|" + p.getOpenaireId())); + projectMap.put(community.getId(), projectList); + } + } catch (IOException e) { + throw new RuntimeException(e); + } + }while (!cm.getLast()); + }); + return projectMap; + } +} diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/CommunityContentprovider.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/CommunityContentprovider.java new file mode 100644 index 000000000..5378e556a --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/CommunityContentprovider.java @@ -0,0 +1,43 @@ +package eu.dnetlib.dhp.api.model; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.google.gson.Gson; +import eu.dnetlib.dhp.bulktag.community.SelectionConstraints; + + +@JsonAutoDetect +@JsonIgnoreProperties(ignoreUnknown = true) +public class CommunityContentprovider { + private String openaireId; + private SelectionConstraints selectioncriteria; + + private String enabled; + + public String getEnabled() { + return enabled; + } + + public void setEnabled(String enabled) { + this.enabled = enabled; + } + + public String getOpenaireId() { + return openaireId; + } + + public void setOpenaireId(final String openaireId) { + this.openaireId = openaireId; + } + + + public SelectionConstraints getSelectioncriteria() { + + return this.selectioncriteria; + } + + public void setSelectioncriteria(SelectionConstraints selectioncriteria) { + this.selectioncriteria = selectioncriteria; + + } +} diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromorganization/OrganizationMap.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/CommunityEntityMap.java similarity index 59% rename from dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromorganization/OrganizationMap.java rename to dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/CommunityEntityMap.java index 7d786058a..ca3eb2857 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromorganization/OrganizationMap.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/CommunityEntityMap.java @@ -1,13 +1,13 @@ -package eu.dnetlib.dhp.resulttocommunityfromorganization; +package eu.dnetlib.dhp.api.model; import java.util.ArrayList; import java.util.HashMap; import java.util.List; -public class OrganizationMap extends HashMap> { +public class CommunityEntityMap extends HashMap> { - public OrganizationMap() { + public CommunityEntityMap() { super(); } diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/CommunityModel.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/CommunityModel.java new file mode 100644 index 000000000..c5b3fac7c --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/CommunityModel.java @@ -0,0 +1,108 @@ + +package eu.dnetlib.dhp.api.model; + +import java.io.Serializable; +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import eu.dnetlib.dhp.bulktag.community.SelectionConstraints; + + +/** + * @author miriam.baglioni + * @Date 06/10/23 + */ +@JsonIgnoreProperties(ignoreUnknown = true) +public class CommunityModel implements Serializable { + private String id; + private String type; + private String status; + + private String zenodoCommunity; + private List subjects; + private List otherZenodoCommunities; + private List fos; + private List sdg; + private SelectionConstraints advancedConstraints; + private SelectionConstraints removeConstraints; + + public String getZenodoCommunity() { + return zenodoCommunity; + } + + public void setZenodoCommunity(String zenodoCommunity) { + this.zenodoCommunity = zenodoCommunity; + } + + public List getSubjects() { + return subjects; + } + + public void setSubjects(List subjects) { + this.subjects = subjects; + } + + public List getOtherZenodoCommunities() { + return otherZenodoCommunities; + } + + public void setOtherZenodoCommunities(List otherZenodoCommunities) { + this.otherZenodoCommunities = otherZenodoCommunities; + } + + public List getFos() { + return fos; + } + + public void setFos(List fos) { + this.fos = fos; + } + + public List getSdg() { + return sdg; + } + + public void setSdg(List sdg) { + this.sdg = sdg; + } + + public SelectionConstraints getRemoveConstraints() { + return removeConstraints; + } + + public void setRemoveConstraints(SelectionConstraints removeConstraints) { + this.removeConstraints = removeConstraints; + } + + public SelectionConstraints getAdvancedConstraints() { + return advancedConstraints; + } + + public void setAdvancedConstraints(SelectionConstraints advancedConstraints) { + this.advancedConstraints = advancedConstraints; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } +} diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/CommunitySummary.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/CommunitySummary.java new file mode 100644 index 000000000..774b6c874 --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/CommunitySummary.java @@ -0,0 +1,16 @@ +package eu.dnetlib.dhp.api.model; + +import java.io.Serializable; +import java.util.ArrayList; + +/** + * @author miriam.baglioni + * @Date 06/10/23 + */ +public class CommunitySummary extends ArrayList implements Serializable { + public CommunitySummary() { + super(); + } + } + + diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/ContentModel.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/ContentModel.java new file mode 100644 index 000000000..a755a9455 --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/ContentModel.java @@ -0,0 +1,50 @@ +package eu.dnetlib.dhp.api.model; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +import java.io.Serializable; +import java.util.List; + +/** + * @author miriam.baglioni + * @Date 09/10/23 + */ +@JsonIgnoreProperties(ignoreUnknown = true) +public class ContentModel implements Serializable { + private List content; + private Integer totalPages; + private Boolean last; + private Integer number; + + public List getContent() { + return content; + } + + public void setContent(List content) { + this.content = content; + } + + public Integer getTotalPages() { + return totalPages; + } + + public void setTotalPages(Integer totalPages) { + this.totalPages = totalPages; + } + + public Boolean getLast() { + return last; + } + + public void setLast(Boolean last) { + this.last = last; + } + + public Integer getNumber() { + return number; + } + + public void setNumber(Integer number) { + this.number = number; + } +} diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/DatasourceList.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/DatasourceList.java new file mode 100644 index 000000000..8e31d7612 --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/DatasourceList.java @@ -0,0 +1,12 @@ +package eu.dnetlib.dhp.api.model; + +import eu.dnetlib.dhp.api.model.CommunityContentprovider; + + +import java.io.Serializable; +import java.util.ArrayList; +public class DatasourceList extends ArrayList implements Serializable { + public DatasourceList(){ + super(); + } +} \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/OrganizationList.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/OrganizationList.java new file mode 100644 index 000000000..6895967ff --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/OrganizationList.java @@ -0,0 +1,15 @@ +package eu.dnetlib.dhp.api.model; + +import java.io.Serializable; +import java.util.ArrayList; + +/** + * @author miriam.baglioni + * @Date 09/10/23 + */ +public class OrganizationList extends ArrayList implements Serializable { + + public OrganizationList(){ + super(); + } +} diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/ProjectModel.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/ProjectModel.java new file mode 100644 index 000000000..50bdcf649 --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/ProjectModel.java @@ -0,0 +1,23 @@ +package eu.dnetlib.dhp.api.model; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +import java.io.Serializable; + +/** + * @author miriam.baglioni + * @Date 09/10/23 + */ +@JsonIgnoreProperties(ignoreUnknown = true) +public class ProjectModel implements Serializable { + + private String openaireId; + + public String getOpenaireId() { + return openaireId; + } + + public void setOpenaireId(String openaireId) { + this.openaireId = openaireId; + } +} diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/SparkBulkTagJob.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/SparkBulkTagJob.java index 3186ed5c0..b61bc2c9f 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/SparkBulkTagJob.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/SparkBulkTagJob.java @@ -6,10 +6,10 @@ import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkSession; import java.util.*; +import eu.dnetlib.dhp.api.Utils; import org.apache.commons.io.IOUtils; import org.apache.spark.SparkConf; import org.apache.spark.api.java.function.FilterFunction; -import org.apache.spark.api.java.function.ForeachFunction; import org.apache.spark.api.java.function.MapFunction; import org.apache.spark.sql.Dataset; import org.apache.spark.sql.Encoders; @@ -87,7 +87,7 @@ public class SparkBulkTagJob { if (isTest) { cc = CommunityConfigurationFactory.newInstance(taggingConf); } else { - cc = QueryInformationSystem.getCommunityConfiguration(parser.get("isLookUpUrl")); + cc = Utils.getCommunityConfiguration();//QueryInformationSystem.getCommunityConfiguration(parser.get("isLookUpUrl")); } runWithSparkSession( diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/Community.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/Community.java index b44376e22..d281f8783 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/Community.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/Community.java @@ -4,16 +4,18 @@ package eu.dnetlib.dhp.bulktag.community; import java.io.Serializable; import java.util.ArrayList; import java.util.List; +import java.util.Optional; import com.google.gson.Gson; + /** Created by miriam on 01/08/2018. */ public class Community implements Serializable { private String id; private List subjects = new ArrayList<>(); private List providers = new ArrayList<>(); - private List zenodoCommunities = new ArrayList<>(); + private List zenodoCommunities = new ArrayList<>(); private SelectionConstraints constraints = new SelectionConstraints(); private SelectionConstraints removeConstraints = new SelectionConstraints(); @@ -26,7 +28,7 @@ public class Community implements Serializable { return !getSubjects().isEmpty() || !getProviders().isEmpty() || !getZenodoCommunities().isEmpty() - || getConstraints().getCriteria() != null; + || (Optional.ofNullable(getConstraints()).isPresent() && getConstraints().getCriteria() != null); } public String getId() { @@ -53,11 +55,11 @@ public class Community implements Serializable { this.providers = providers; } - public List getZenodoCommunities() { + public List getZenodoCommunities() { return zenodoCommunities; } - public void setZenodoCommunities(List zenodoCommunities) { + public void setZenodoCommunities(List zenodoCommunities) { this.zenodoCommunities = zenodoCommunities; } diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/CommunityConfiguration.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/CommunityConfiguration.java index e061ccd5e..a658c7ff5 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/CommunityConfiguration.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/CommunityConfiguration.java @@ -81,7 +81,7 @@ public class CommunityConfiguration implements Serializable { this.removeConstraintsMap = removeConstraintsMap; } - CommunityConfiguration(final Map communities) { + public CommunityConfiguration(final Map communities) { this.communities = communities; init(); } @@ -117,10 +117,10 @@ public class CommunityConfiguration implements Serializable { add(d.getOpenaireId(), new Pair<>(id, d.getSelectionConstraints()), datasourceMap); } // get zenodo communities - for (ZenodoCommunity zc : c.getZenodoCommunities()) { + for (String zc : c.getZenodoCommunities()) { add( - zc.getZenodoCommunityId(), - new Pair<>(id, zc.getSelCriteria()), + zc, + new Pair<>(id, null), zenodocommunityMap); } selectionConstraintsMap.put(id, c.getConstraints()); diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/CommunityConfigurationFactory.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/CommunityConfigurationFactory.java index 7b9e03ef6..013bf7168 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/CommunityConfigurationFactory.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/CommunityConfigurationFactory.java @@ -5,7 +5,6 @@ import java.io.StringReader; import java.util.ArrayList; import java.util.List; import java.util.Map; - import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -143,16 +142,16 @@ public class CommunityConfigurationFactory { return providerList; } - private static List parseZenodoCommunities(final Node node) { + private static List parseZenodoCommunities(final Node node) { final List list = node.selectNodes("./zenodocommunities/zenodocommunity"); - final List zenodoCommunityList = new ArrayList<>(); + final List zenodoCommunityList = new ArrayList<>(); for (Node n : list) { - ZenodoCommunity zc = new ZenodoCommunity(); - zc.setZenodoCommunityId(n.selectSingleNode("./zenodoid").getText()); - zc.setSelCriteria(n.selectSingleNode("./selcriteria")); +// ZenodoCommunity zc = new ZenodoCommunity(); +// zc.setZenodoCommunityId(n.selectSingleNode("./zenodoid").getText()); +// zc.setSelCriteria(n.selectSingleNode("./selcriteria")); - zenodoCommunityList.add(zc); + zenodoCommunityList.add(n.selectSingleNode("./zenodoid").getText()); } log.info("size of the zenodo community list " + zenodoCommunityList.size()); diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/Constraint.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/Constraint.java index ed58cc14d..03ae1117b 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/Constraint.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/Constraint.java @@ -6,12 +6,14 @@ import java.lang.reflect.InvocationTargetException; import eu.dnetlib.dhp.bulktag.criteria.Selection; import eu.dnetlib.dhp.bulktag.criteria.VerbResolver; +import org.apache.htrace.fasterxml.jackson.annotation.JsonIgnore; public class Constraint implements Serializable { private String verb; private String field; private String value; // private String element; + @JsonIgnore private Selection selection; public String getVerb() { @@ -37,11 +39,11 @@ public class Constraint implements Serializable { public void setValue(String value) { this.value = value; } - - public void setSelection(Selection sel) { - selection = sel; - } - +//@JsonIgnore + //public void setSelection(Selection sel) { +// selection = sel; +// } +@JsonIgnore public void setSelection(VerbResolver resolver) throws InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException { @@ -52,11 +54,5 @@ public class Constraint implements Serializable { return selection.apply(metadata); } -// public String getElement() { -// return element; -// } -// -// public void setElement(String element) { -// this.element = element; -// } + } diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/SelectionConstraints.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/SelectionConstraints.java index c7dcce812..8e6d25e9b 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/SelectionConstraints.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/SelectionConstraints.java @@ -7,11 +7,12 @@ import java.util.Collection; import java.util.List; import java.util.Map; +import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import eu.dnetlib.dhp.bulktag.criteria.VerbResolver; - +@JsonAutoDetect public class SelectionConstraints implements Serializable { private List criteria; diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromorganization/PrepareResultCommunitySet.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromorganization/PrepareResultCommunitySet.java index 0fc8cb390..ff6b73286 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromorganization/PrepareResultCommunitySet.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromorganization/PrepareResultCommunitySet.java @@ -6,12 +6,12 @@ import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkHiveSession; import java.util.*; +import eu.dnetlib.dhp.api.Utils; +import eu.dnetlib.dhp.api.model.CommunityEntityMap; import org.apache.commons.io.IOUtils; import org.apache.hadoop.io.compress.GzipCodec; import org.apache.spark.SparkConf; -import org.apache.spark.api.java.function.FilterFunction; import org.apache.spark.api.java.function.MapFunction; -import org.apache.spark.api.java.function.MapGroupsFunction; import org.apache.spark.sql.Dataset; import org.apache.spark.sql.Encoders; import org.apache.spark.sql.SparkSession; @@ -48,10 +48,11 @@ public class PrepareResultCommunitySet { final String outputPath = parser.get("outputPath"); log.info("outputPath: {}", outputPath); - final OrganizationMap organizationMap = new Gson() - .fromJson( - parser.get("organizationtoresultcommunitymap"), - OrganizationMap.class); +// final CommunityEntityMap organizationMap = new Gson() +// .fromJson( +// parser.get("organizationtoresultcommunitymap"), +// CommunityEntityMap.class); + final CommunityEntityMap organizationMap = Utils.getCommunityOrganization(); log.info("organizationMap: {}", new Gson().toJson(organizationMap)); SparkConf conf = new SparkConf(); @@ -70,7 +71,7 @@ public class PrepareResultCommunitySet { SparkSession spark, String inputPath, String outputPath, - OrganizationMap organizationMap) { + CommunityEntityMap organizationMap) { Dataset relation = readPath(spark, inputPath, Relation.class); relation.createOrReplaceTempView("relation"); @@ -115,7 +116,7 @@ public class PrepareResultCommunitySet { } private static MapFunction mapResultCommunityFn( - OrganizationMap organizationMap) { + CommunityEntityMap organizationMap) { return value -> { String rId = value.getResultId(); Optional> orgs = Optional.ofNullable(value.getMerges()); diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/oozie_app/workflow.xml index 6a329fdc4..d9805ab7b 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/oozie_app/workflow.xml @@ -4,10 +4,10 @@ sourcePath the source path - - organizationtoresultcommunitymap - organization community map - + + + + outputPath the output path diff --git a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/BulkTagJobTest.java b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/BulkTagJobTest.java index 660a55472..745cd7e6f 100644 --- a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/BulkTagJobTest.java +++ b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/BulkTagJobTest.java @@ -1568,4 +1568,42 @@ public class BulkTagJobTest { } + @Test + void newConfTest() throws Exception { + final String pathMap = BulkTagJobTest.pathMap; + SparkBulkTagJob + .main( + new String[] { + "-isTest", Boolean.TRUE.toString(), + "-isSparkSessionManaged", Boolean.FALSE.toString(), + "-sourcePath", + getClass().getResource("/eu/dnetlib/dhp/bulktag/sample/dataset/no_updates").getPath(), + "-taggingConf", taggingConf, + "-resultTableName", "eu.dnetlib.dhp.schema.oaf.Dataset", + "-outputPath", workingDir.toString() + "/dataset", + "-isLookUpUrl", MOCK_IS_LOOK_UP_URL, + "-pathMap", pathMap + }); + + final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); + + JavaRDD tmp = sc + .textFile(workingDir.toString() + "/dataset") + .map(item -> OBJECT_MAPPER.readValue(item, Dataset.class)); + + Assertions.assertEquals(10, tmp.count()); + org.apache.spark.sql.Dataset verificationDataset = spark + .createDataset(tmp.rdd(), Encoders.bean(Dataset.class)); + + verificationDataset.createOrReplaceTempView("dataset"); + + String query = "select id, MyT.id community " + + "from dataset " + + "lateral view explode(context) c as MyT " + + "lateral view explode(MyT.datainfo) d as MyD " + + "where MyD.inferenceprovenance = 'bulktagging'"; + + Assertions.assertEquals(0, spark.sql(query).count()); + } + } diff --git a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/CommunityConfigurationFactoryTest.java b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/CommunityConfigurationFactoryTest.java index c8fd62c8e..7e12bf9c3 100644 --- a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/CommunityConfigurationFactoryTest.java +++ b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/CommunityConfigurationFactoryTest.java @@ -47,7 +47,7 @@ class CommunityConfigurationFactoryTest { sc.setVerb("not_contains"); sc.setField("contributor"); sc.setValue("DARIAH"); - sc.setSelection(resolver.getSelectionCriteria(sc.getVerb(), sc.getValue())); + sc.setSelection(resolver);//.getSelectionCriteria(sc.getVerb(), sc.getValue())); String metadata = "This work has been partially supported by DARIAH-EU infrastructure"; Assertions.assertFalse(sc.verifyCriteria(metadata)); } diff --git a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/QueryCommunityAPITest.java b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/QueryCommunityAPITest.java new file mode 100644 index 000000000..1b3403535 --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/QueryCommunityAPITest.java @@ -0,0 +1,91 @@ + +package eu.dnetlib.dhp.bulktag; + +import eu.dnetlib.dhp.api.Utils; +import eu.dnetlib.dhp.api.model.CommunityEntityMap; +import eu.dnetlib.dhp.bulktag.community.Community; +import eu.dnetlib.dhp.bulktag.community.CommunityConfiguration; + +import eu.dnetlib.dhp.api.model.CommunityModel; +import eu.dnetlib.dhp.api.model.CommunitySummary; +import eu.dnetlib.dhp.api.model.DatasourceList; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; + +import eu.dnetlib.dhp.api.QueryCommunityAPI; + +import java.util.List; + +/** + * @author miriam.baglioni + * @Date 06/10/23 + */ +public class QueryCommunityAPITest { + + @Test + void communityList() throws Exception { + String body = QueryCommunityAPI.communities(); + new ObjectMapper() + .readValue(body, CommunitySummary.class) + .forEach(p -> { + try { + System.out.println(new ObjectMapper().writeValueAsString(p)); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + }); + } + + @Test + void community() throws Exception { + String id = "dh-ch"; + String body = QueryCommunityAPI.community(id); + System.out.println(new ObjectMapper().writeValueAsString(new ObjectMapper() + .readValue(body, CommunityModel.class))) + ; + } + + @Test + void communityDatasource() throws Exception { + String id = "dh-ch"; + String body = QueryCommunityAPI.communityDatasource(id); + new ObjectMapper() + .readValue(body, DatasourceList.class) + .forEach(ds-> { + try { + System.out.println(new ObjectMapper().writeValueAsString(ds)); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + }); + ; + } + + @Test + void validCommunities() throws Exception { + CommunityConfiguration cc = Utils.getCommunityConfiguration(); + System.out.println(cc.getCommunities().keySet()); + Community community =cc.getCommunities().get("aurora"); + Assertions.assertEquals(0, community.getSubjects().size()); + Assertions.assertEquals(null, community.getConstraints()); + Assertions.assertEquals(null, community.getRemoveConstraints()); + Assertions.assertEquals(2, community.getZenodoCommunities().size()); + Assertions.assertTrue(community.getZenodoCommunities().stream().anyMatch(c -> c.equals("aurora-universities-network"))); + Assertions.assertTrue(community.getZenodoCommunities().stream().anyMatch(c -> c.equals("university-of-innsbruck"))); + Assertions.assertEquals(35, community.getProviders().size()); + Assertions.assertEquals(35, community.getProviders().stream().filter(p->p.getSelectionConstraints()==null).count()); + } + + @Test + void getCommunityProjects() throws Exception { + CommunityEntityMap projectMap = Utils.getCommunityProjects(); + Assertions.assertFalse(projectMap.containsKey("mes")); + Assertions.assertEquals(33, projectMap.size()); + Assertions.assertTrue(projectMap.keySet().stream().allMatch(k -> projectMap.get(k).stream().allMatch(p -> p.startsWith("40|")))); + } + +} + diff --git a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/group/GroupEntitiesSparkJobTest.java b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/group/GroupEntitiesSparkJobTest.java index b878e778e..0887adf45 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/group/GroupEntitiesSparkJobTest.java +++ b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/group/GroupEntitiesSparkJobTest.java @@ -1,14 +1,14 @@ package eu.dnetlib.dhp.oa.graph.group; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; -import eu.dnetlib.dhp.common.HdfsSupport; -import eu.dnetlib.dhp.oa.merge.GroupEntitiesSparkJob; -import eu.dnetlib.dhp.schema.common.ModelSupport; -import eu.dnetlib.dhp.schema.oaf.OafEntity; -import eu.dnetlib.dhp.schema.oaf.Result; -import eu.dnetlib.dhp.utils.DHPUtils; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.io.IOException; +import java.net.URISyntaxException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + import org.apache.commons.io.FileUtils; import org.apache.spark.SparkConf; import org.apache.spark.api.java.function.FilterFunction; @@ -18,108 +18,108 @@ import org.apache.spark.sql.Encoders; import org.apache.spark.sql.SparkSession; import org.junit.jupiter.api.*; -import java.io.IOException; -import java.net.URISyntaxException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; -import static org.junit.jupiter.api.Assertions.assertEquals; +import eu.dnetlib.dhp.common.HdfsSupport; +import eu.dnetlib.dhp.oa.merge.GroupEntitiesSparkJob; +import eu.dnetlib.dhp.schema.common.ModelSupport; +import eu.dnetlib.dhp.schema.oaf.OafEntity; +import eu.dnetlib.dhp.schema.oaf.Result; +import eu.dnetlib.dhp.utils.DHPUtils; @TestMethodOrder(MethodOrderer.OrderAnnotation.class) public class GroupEntitiesSparkJobTest { - private static SparkSession spark; + private static SparkSession spark; - private static ObjectMapper mapper = new ObjectMapper() - .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + private static ObjectMapper mapper = new ObjectMapper() + .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - private static Path workingDir; - private Path dataInputPath; + private static Path workingDir; + private Path dataInputPath; - private Path checkpointPath; + private Path checkpointPath; - private Path outputPath; + private Path outputPath; - @BeforeAll - public static void beforeAll() throws IOException { - workingDir = Files.createTempDirectory(GroupEntitiesSparkJob.class.getSimpleName()); + @BeforeAll + public static void beforeAll() throws IOException { + workingDir = Files.createTempDirectory(GroupEntitiesSparkJob.class.getSimpleName()); - SparkConf conf = new SparkConf(); - conf.setAppName(GroupEntitiesSparkJob.class.getSimpleName()); - conf.setMaster("local"); - conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer"); - conf.registerKryoClasses(ModelSupport.getOafModelClasses()); - spark = SparkSession.builder().config(conf).getOrCreate(); - } + SparkConf conf = new SparkConf(); + conf.setAppName(GroupEntitiesSparkJob.class.getSimpleName()); + conf.setMaster("local"); + conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer"); + conf.registerKryoClasses(ModelSupport.getOafModelClasses()); + spark = SparkSession.builder().config(conf).getOrCreate(); + } - @BeforeEach - public void beforeEach() throws IOException, URISyntaxException { - dataInputPath = Paths.get(ClassLoader.getSystemResource("eu/dnetlib/dhp/oa/graph/group").toURI()); - checkpointPath = workingDir.resolve("grouped_entity"); - outputPath = workingDir.resolve("dispatched_entity"); - } + @BeforeEach + public void beforeEach() throws IOException, URISyntaxException { + dataInputPath = Paths.get(ClassLoader.getSystemResource("eu/dnetlib/dhp/oa/graph/group").toURI()); + checkpointPath = workingDir.resolve("grouped_entity"); + outputPath = workingDir.resolve("dispatched_entity"); + } - @AfterAll - public static void afterAll() throws IOException { - spark.stop(); - FileUtils.deleteDirectory(workingDir.toFile()); - } + @AfterAll + public static void afterAll() throws IOException { + spark.stop(); + FileUtils.deleteDirectory(workingDir.toFile()); + } - @Test - @Order(1) - void testGroupEntities() throws Exception { - GroupEntitiesSparkJob.main(new String[]{ - "-isSparkSessionManaged", - Boolean.FALSE.toString(), - "-graphInputPath", - dataInputPath.toString(), - "-checkpointPath", - checkpointPath.toString(), - "-outputPath", - outputPath.toString(), - "-filterInvisible", - Boolean.FALSE.toString() - }); + @Test + @Order(1) + void testGroupEntities() throws Exception { + GroupEntitiesSparkJob.main(new String[] { + "-isSparkSessionManaged", + Boolean.FALSE.toString(), + "-graphInputPath", + dataInputPath.toString(), + "-checkpointPath", + checkpointPath.toString(), + "-outputPath", + outputPath.toString(), + "-filterInvisible", + Boolean.FALSE.toString() + }); - Dataset checkpointTable = spark - .read() - .load(checkpointPath.toString()) - .selectExpr("COALESCE(*)") - .as(Encoders.kryo(OafEntity.class)); + Dataset checkpointTable = spark + .read() + .load(checkpointPath.toString()) + .selectExpr("COALESCE(*)") + .as(Encoders.kryo(OafEntity.class)); + assertEquals( + 1, + checkpointTable + .filter( + (FilterFunction) r -> "50|doi_________::09821844208a5cd6300b2bfb13bca1b9" + .equals(r.getId()) && + r.getCollectedfrom().stream().anyMatch(kv -> kv.getValue().equalsIgnoreCase("zenodo"))) + .count()); - assertEquals( - 1, - checkpointTable - .filter( - (FilterFunction) r -> "50|doi_________::09821844208a5cd6300b2bfb13bca1b9" - .equals(r.getId()) && - r.getCollectedfrom().stream().anyMatch(kv -> kv.getValue().equalsIgnoreCase("zenodo"))) - .count()); + Dataset output = spark + .read() + .textFile( + DHPUtils + .toSeq( + HdfsSupport + .listFiles(outputPath.toString(), spark.sparkContext().hadoopConfiguration()))) + .map((MapFunction) s -> mapper.readValue(s, Result.class), Encoders.bean(Result.class)); - - Dataset output = spark - .read() - .textFile( - DHPUtils - .toSeq( - HdfsSupport - .listFiles(outputPath.toString(), spark.sparkContext().hadoopConfiguration()))) - .map((MapFunction) s -> mapper.readValue(s, Result.class), Encoders.bean(Result.class)); - - assertEquals(3, output.count()); - assertEquals( - 2, - output - .map((MapFunction) r -> r.getResulttype().getClassid(), Encoders.STRING()) - .filter((FilterFunction) s -> s.equals("publication")) - .count()); - assertEquals( - 1, - output - .map((MapFunction) r -> r.getResulttype().getClassid(), Encoders.STRING()) - .filter((FilterFunction) s -> s.equals("dataset")) - .count()); - } -} \ No newline at end of file + assertEquals(3, output.count()); + assertEquals( + 2, + output + .map((MapFunction) r -> r.getResulttype().getClassid(), Encoders.STRING()) + .filter((FilterFunction) s -> s.equals("publication")) + .count()); + assertEquals( + 1, + output + .map((MapFunction) r -> r.getResulttype().getClassid(), Encoders.STRING()) + .filter((FilterFunction) s -> s.equals("dataset")) + .count()); + } +} From a3d01ccb246e52e7977aef8c57b15d964dcc9834 Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Mon, 9 Oct 2023 14:52:17 +0200 Subject: [PATCH 315/449] refactoring --- .../CreateActionSetSparkJob.java | 2 +- .../doiboost/crossref/Crossref2Oaf.scala | 16 +- .../crossref/CrossrefMappingTest.scala | 2 +- .../eu/dnetlib/dhp/api/QueryCommunityAPI.java | 9 +- .../main/java/eu/dnetlib/dhp/api/Utils.java | 236 +++++++++--------- .../api/model/CommunityContentprovider.java | 6 +- .../dnetlib/dhp/api/model/CommunityModel.java | 2 +- .../dhp/api/model/CommunitySummary.java | 11 +- .../dnetlib/dhp/api/model/ContentModel.java | 61 ++--- .../dnetlib/dhp/api/model/DatasourceList.java | 11 +- .../dhp/api/model/OrganizationList.java | 7 +- .../dnetlib/dhp/api/model/ProjectModel.java | 19 +- .../dnetlib/dhp/bulktag/SparkBulkTagJob.java | 4 +- .../dhp/bulktag/community/Community.java | 1 - .../CommunityConfigurationFactory.java | 1 + .../dhp/bulktag/community/Constraint.java | 9 +- .../community/SelectionConstraints.java | 1 + .../PrepareResultCommunitySet.java | 4 +- .../dnetlib/dhp/bulktag/BulkTagJobTest.java | 38 +-- .../CommunityConfigurationFactoryTest.java | 2 +- .../dhp/bulktag/QueryCommunityAPITest.java | 65 +++-- 21 files changed, 268 insertions(+), 239 deletions(-) diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/opencitations/CreateActionSetSparkJob.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/opencitations/CreateActionSetSparkJob.java index a367ba852..b707fdcd3 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/opencitations/CreateActionSetSparkJob.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/opencitations/CreateActionSetSparkJob.java @@ -7,7 +7,6 @@ import java.io.IOException; import java.io.Serializable; import java.util.*; -import eu.dnetlib.dhp.schema.oaf.utils.*; import org.apache.commons.cli.ParseException; import org.apache.commons.io.IOUtils; import org.apache.hadoop.io.Text; @@ -30,6 +29,7 @@ import eu.dnetlib.dhp.application.ArgumentApplicationParser; import eu.dnetlib.dhp.schema.action.AtomicAction; import eu.dnetlib.dhp.schema.common.ModelConstants; import eu.dnetlib.dhp.schema.oaf.*; +import eu.dnetlib.dhp.schema.oaf.utils.*; import eu.dnetlib.dhp.utils.DHPUtils; import scala.Tuple2; diff --git a/dhp-workflows/dhp-doiboost/src/main/scala/eu/dnetlib/doiboost/crossref/Crossref2Oaf.scala b/dhp-workflows/dhp-doiboost/src/main/scala/eu/dnetlib/doiboost/crossref/Crossref2Oaf.scala index e0fdb9ce4..565d34e62 100644 --- a/dhp-workflows/dhp-doiboost/src/main/scala/eu/dnetlib/doiboost/crossref/Crossref2Oaf.scala +++ b/dhp-workflows/dhp-doiboost/src/main/scala/eu/dnetlib/doiboost/crossref/Crossref2Oaf.scala @@ -31,9 +31,7 @@ case class mappingAuthor( affiliation: Option[mappingAffiliation] ) {} -case class funderInfo(id:String,uri:String, name:String,synonym:List[String] ) {} - - +case class funderInfo(id: String, uri: String, name: String, synonym: List[String]) {} case class mappingFunder(name: String, DOI: Option[String], award: Option[List[String]]) {} @@ -41,7 +39,9 @@ case object Crossref2Oaf { val logger: Logger = LoggerFactory.getLogger(Crossref2Oaf.getClass) val irishFunder: List[funderInfo] = { - val s = Source.fromInputStream(getClass.getResourceAsStream("/eu/dnetlib/dhp/doiboost/crossref/irish_funder.json")).mkString + val s = Source + .fromInputStream(getClass.getResourceAsStream("/eu/dnetlib/dhp/doiboost/crossref/irish_funder.json")) + .mkString implicit lazy val formats: DefaultFormats.type = org.json4s.DefaultFormats lazy val json: org.json4s.JValue = parse(s) json.extract[List[funderInfo]] @@ -100,9 +100,11 @@ case object Crossref2Oaf { "report" -> "0017 Report" ) - def getIrishId(doi:String):Option[String] = { - val id =doi.split("/").last - irishFunder.find(f => id.equalsIgnoreCase(f.id) || (f.synonym.nonEmpty && f.synonym.exists(s => s.equalsIgnoreCase(id)))).map(f => f.id) + def getIrishId(doi: String): Option[String] = { + val id = doi.split("/").last + irishFunder + .find(f => id.equalsIgnoreCase(f.id) || (f.synonym.nonEmpty && f.synonym.exists(s => s.equalsIgnoreCase(id)))) + .map(f => f.id) } def mappingResult(result: Result, json: JValue, cobjCategory: String): Result = { diff --git a/dhp-workflows/dhp-doiboost/src/test/scala/eu/dnetlib/dhp/doiboost/crossref/CrossrefMappingTest.scala b/dhp-workflows/dhp-doiboost/src/test/scala/eu/dnetlib/dhp/doiboost/crossref/CrossrefMappingTest.scala index 7961376c5..fbf6f72c0 100644 --- a/dhp-workflows/dhp-doiboost/src/test/scala/eu/dnetlib/dhp/doiboost/crossref/CrossrefMappingTest.scala +++ b/dhp-workflows/dhp-doiboost/src/test/scala/eu/dnetlib/dhp/doiboost/crossref/CrossrefMappingTest.scala @@ -50,7 +50,7 @@ class CrossrefMappingTest { } } - def checkRelation(generatedOAF: List[Oaf]): Unit = { + def checkRelation(generatedOAF: List[Oaf]): Unit = { val rels: List[Relation] = generatedOAF.filter(p => p.isInstanceOf[Relation]).asInstanceOf[List[Relation]] diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/QueryCommunityAPI.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/QueryCommunityAPI.java index 635ee2027..cc615ba46 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/QueryCommunityAPI.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/QueryCommunityAPI.java @@ -21,7 +21,7 @@ import com.google.gson.Gson; public class QueryCommunityAPI { private static final String baseUrl = "https://services.openaire.eu/openaire/"; - private static String get(String geturl) throws IOException{ + private static String get(String geturl) throws IOException { URL url = new URL(geturl); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setDoOutput(true); @@ -44,7 +44,7 @@ public class QueryCommunityAPI { return get(baseUrl + "community/" + id); } - public static String communityDatasource(String id)throws IOException{ + public static String communityDatasource(String id) throws IOException { return get(baseUrl + "community/" + id + "/contentproviders"); } @@ -53,8 +53,8 @@ public class QueryCommunityAPI { return get(baseUrl + "community/" + id + "/propagationOrganizations"); } - public static String communityProjects(String id, String page, String size) throws IOException{ - return get(baseUrl + "community/" + id +"/projects/" + page + "/" + size); + public static String communityProjects(String id, String page, String size) throws IOException { + return get(baseUrl + "community/" + id + "/projects/" + page + "/" + size); } @NotNull @@ -74,5 +74,4 @@ public class QueryCommunityAPI { return body; } - } diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/Utils.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/Utils.java index 5b3004a5d..c1aaa14c4 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/Utils.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/Utils.java @@ -1,16 +1,6 @@ + package eu.dnetlib.dhp.api; -import com.amazonaws.util.StringUtils; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.common.collect.Maps; -import eu.dnetlib.dhp.api.model.*; -import eu.dnetlib.dhp.bulktag.community.Community; -import eu.dnetlib.dhp.bulktag.community.CommunityConfiguration; -import eu.dnetlib.dhp.bulktag.community.Provider; -import eu.dnetlib.dhp.bulktag.criteria.VerbResolver; -import eu.dnetlib.dhp.bulktag.criteria.VerbResolverFactory; - -import javax.management.Query; import java.io.IOException; import java.io.Serializable; import java.util.ArrayList; @@ -19,118 +9,140 @@ import java.util.Map; import java.util.Objects; import java.util.stream.Collectors; +import javax.management.Query; + +import com.amazonaws.util.StringUtils; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.collect.Maps; + +import eu.dnetlib.dhp.api.model.*; +import eu.dnetlib.dhp.bulktag.community.Community; +import eu.dnetlib.dhp.bulktag.community.CommunityConfiguration; +import eu.dnetlib.dhp.bulktag.community.Provider; +import eu.dnetlib.dhp.bulktag.criteria.VerbResolver; +import eu.dnetlib.dhp.bulktag.criteria.VerbResolverFactory; + /** * @author miriam.baglioni * @Date 09/10/23 */ public class Utils implements Serializable { - private static final ObjectMapper MAPPER = new ObjectMapper(); - private static final VerbResolver resolver = VerbResolverFactory.newInstance(); + private static final ObjectMapper MAPPER = new ObjectMapper(); + private static final VerbResolver resolver = VerbResolverFactory.newInstance(); - public static CommunityConfiguration getCommunityConfiguration() throws IOException { - final Map communities = Maps.newHashMap(); - List validCommunities = new ArrayList<>(); - getValidCommunities() - .forEach(community -> { - try { - CommunityModel cm = MAPPER.readValue(QueryCommunityAPI.community(community.getId()), CommunityModel.class); - validCommunities.add(getCommunity(cm)); - } catch (IOException e) { - throw new RuntimeException(e); - } - }); - validCommunities.forEach(community ->{ - try { - DatasourceList dl = MAPPER.readValue(QueryCommunityAPI.communityDatasource(community.getId()), DatasourceList.class); - community.setProviders(dl.stream().map(d -> { + public static CommunityConfiguration getCommunityConfiguration() throws IOException { + final Map communities = Maps.newHashMap(); + List validCommunities = new ArrayList<>(); + getValidCommunities() + .forEach(community -> { + try { + CommunityModel cm = MAPPER + .readValue(QueryCommunityAPI.community(community.getId()), CommunityModel.class); + validCommunities.add(getCommunity(cm)); + } catch (IOException e) { + throw new RuntimeException(e); + } + }); + validCommunities.forEach(community -> { + try { + DatasourceList dl = MAPPER + .readValue(QueryCommunityAPI.communityDatasource(community.getId()), DatasourceList.class); + community.setProviders(dl.stream().map(d -> { // if(d.getEnabled() == null || Boolean.FALSE.equals(d.getEnabled())) // return null; - Provider p = new Provider(); - p.setOpenaireId("10|" + d.getOpenaireId()); - p.setSelectionConstraints(d.getSelectioncriteria()); - if(p.getSelectionConstraints() != null) - p.getSelectionConstraints().setSelection(resolver); - return p; - }) - .filter(Objects::nonNull) - .collect(Collectors.toList())); - } catch (IOException e) { - throw new RuntimeException(e); - } - }); + Provider p = new Provider(); + p.setOpenaireId("10|" + d.getOpenaireId()); + p.setSelectionConstraints(d.getSelectioncriteria()); + if (p.getSelectionConstraints() != null) + p.getSelectionConstraints().setSelection(resolver); + return p; + }) + .filter(Objects::nonNull) + .collect(Collectors.toList())); + } catch (IOException e) { + throw new RuntimeException(e); + } + }); - validCommunities.forEach(community ->{ - if(community.isValid()) - communities.put(community.getId(), community); - }); - return new CommunityConfiguration(communities); - } + validCommunities.forEach(community -> { + if (community.isValid()) + communities.put(community.getId(), community); + }); + return new CommunityConfiguration(communities); + } - private static Community getCommunity(CommunityModel cm){ - Community c = new Community(); - c.setId(cm.getId()); - c.setZenodoCommunities(cm.getOtherZenodoCommunities()); - if(!StringUtils.isNullOrEmpty(cm.getZenodoCommunity())) - c.getZenodoCommunities().add(cm.getZenodoCommunity()); - c.setSubjects(cm.getSubjects()); - c.getSubjects().addAll(cm.getFos()); - c.getSubjects().addAll(cm.getSdg()); - c.setConstraints(cm.getAdvancedConstraints()); - if(c.getConstraints()!=null) - c.getConstraints().setSelection(resolver); - c.setRemoveConstraints(cm.getRemoveConstraints()); - if(c.getRemoveConstraints()!=null) - c.getRemoveConstraints().setSelection(resolver); - return c; - } + private static Community getCommunity(CommunityModel cm) { + Community c = new Community(); + c.setId(cm.getId()); + c.setZenodoCommunities(cm.getOtherZenodoCommunities()); + if (!StringUtils.isNullOrEmpty(cm.getZenodoCommunity())) + c.getZenodoCommunities().add(cm.getZenodoCommunity()); + c.setSubjects(cm.getSubjects()); + c.getSubjects().addAll(cm.getFos()); + c.getSubjects().addAll(cm.getSdg()); + c.setConstraints(cm.getAdvancedConstraints()); + if (c.getConstraints() != null) + c.getConstraints().setSelection(resolver); + c.setRemoveConstraints(cm.getRemoveConstraints()); + if (c.getRemoveConstraints() != null) + c.getRemoveConstraints().setSelection(resolver); + return c; + } - public static List getValidCommunities() throws IOException { - return MAPPER.readValue(QueryCommunityAPI.communities(), CommunitySummary.class) - .stream() - .filter(community -> !community.getStatus().equals("hidden") && - (community.getType().equals("ri") || community.getType().equals("community"))) - .collect(Collectors.toList()); - } - public static CommunityEntityMap getCommunityOrganization() throws IOException { - CommunityEntityMap organizationMap = new CommunityEntityMap(); - getValidCommunities() - .forEach(community -> { - String id = community.getId(); - try { - List associatedOrgs = MAPPER.readValue(QueryCommunityAPI.communityPropagationOrganization(id), OrganizationList.class); - if(associatedOrgs.size() >0){ - organizationMap.put(id, associatedOrgs); - } - } catch (IOException e) { - throw new RuntimeException(e); - } - }); - return organizationMap; - } + public static List getValidCommunities() throws IOException { + return MAPPER + .readValue(QueryCommunityAPI.communities(), CommunitySummary.class) + .stream() + .filter( + community -> !community.getStatus().equals("hidden") && + (community.getType().equals("ri") || community.getType().equals("community"))) + .collect(Collectors.toList()); + } - public static CommunityEntityMap getCommunityProjects()throws IOException{ - CommunityEntityMap projectMap = new CommunityEntityMap(); - getValidCommunities() - .forEach(community ->{ - int page = -1; - int size = 100; - ContentModel cm = new ContentModel(); - List projectList = new ArrayList<>(); - do{ - page ++; - try { - cm = MAPPER.readValue( QueryCommunityAPI.communityProjects(community.getId(), String.valueOf(page), String.valueOf(size)), ContentModel.class); - if (cm.getContent().size() > 0){ + public static CommunityEntityMap getCommunityOrganization() throws IOException { + CommunityEntityMap organizationMap = new CommunityEntityMap(); + getValidCommunities() + .forEach(community -> { + String id = community.getId(); + try { + List associatedOrgs = MAPPER + .readValue(QueryCommunityAPI.communityPropagationOrganization(id), OrganizationList.class); + if (associatedOrgs.size() > 0) { + organizationMap.put(id, associatedOrgs); + } + } catch (IOException e) { + throw new RuntimeException(e); + } + }); + return organizationMap; + } - cm.getContent().forEach(p -> - projectList.add ("40|" + p.getOpenaireId())); - projectMap.put(community.getId(), projectList); - } - } catch (IOException e) { - throw new RuntimeException(e); - } - }while (!cm.getLast()); - }); - return projectMap; - } + public static CommunityEntityMap getCommunityProjects() throws IOException { + CommunityEntityMap projectMap = new CommunityEntityMap(); + getValidCommunities() + .forEach(community -> { + int page = -1; + int size = 100; + ContentModel cm = new ContentModel(); + List projectList = new ArrayList<>(); + do { + page++; + try { + cm = MAPPER + .readValue( + QueryCommunityAPI + .communityProjects(community.getId(), String.valueOf(page), String.valueOf(size)), + ContentModel.class); + if (cm.getContent().size() > 0) { + + cm.getContent().forEach(p -> projectList.add("40|" + p.getOpenaireId())); + projectMap.put(community.getId(), projectList); + } + } catch (IOException e) { + throw new RuntimeException(e); + } + } while (!cm.getLast()); + }); + return projectMap; + } } diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/CommunityContentprovider.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/CommunityContentprovider.java index 5378e556a..9fab5a80c 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/CommunityContentprovider.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/CommunityContentprovider.java @@ -1,10 +1,11 @@ + package eu.dnetlib.dhp.api.model; import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.google.gson.Gson; -import eu.dnetlib.dhp.bulktag.community.SelectionConstraints; +import eu.dnetlib.dhp.bulktag.community.SelectionConstraints; @JsonAutoDetect @JsonIgnoreProperties(ignoreUnknown = true) @@ -30,10 +31,9 @@ public class CommunityContentprovider { this.openaireId = openaireId; } - public SelectionConstraints getSelectioncriteria() { - return this.selectioncriteria; + return this.selectioncriteria; } public void setSelectioncriteria(SelectionConstraints selectioncriteria) { diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/CommunityModel.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/CommunityModel.java index c5b3fac7c..745e7efc2 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/CommunityModel.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/CommunityModel.java @@ -5,8 +5,8 @@ import java.io.Serializable; import java.util.List; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import eu.dnetlib.dhp.bulktag.community.SelectionConstraints; +import eu.dnetlib.dhp.bulktag.community.SelectionConstraints; /** * @author miriam.baglioni diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/CommunitySummary.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/CommunitySummary.java index 774b6c874..a0541f7ee 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/CommunitySummary.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/CommunitySummary.java @@ -1,3 +1,4 @@ + package eu.dnetlib.dhp.api.model; import java.io.Serializable; @@ -8,9 +9,7 @@ import java.util.ArrayList; * @Date 06/10/23 */ public class CommunitySummary extends ArrayList implements Serializable { - public CommunitySummary() { - super(); - } - } - - + public CommunitySummary() { + super(); + } +} diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/ContentModel.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/ContentModel.java index a755a9455..469709f59 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/ContentModel.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/ContentModel.java @@ -1,50 +1,51 @@ -package eu.dnetlib.dhp.api.model; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +package eu.dnetlib.dhp.api.model; import java.io.Serializable; import java.util.List; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + /** * @author miriam.baglioni * @Date 09/10/23 */ @JsonIgnoreProperties(ignoreUnknown = true) public class ContentModel implements Serializable { - private List content; - private Integer totalPages; - private Boolean last; - private Integer number; + private List content; + private Integer totalPages; + private Boolean last; + private Integer number; - public List getContent() { - return content; - } + public List getContent() { + return content; + } - public void setContent(List content) { - this.content = content; - } + public void setContent(List content) { + this.content = content; + } - public Integer getTotalPages() { - return totalPages; - } + public Integer getTotalPages() { + return totalPages; + } - public void setTotalPages(Integer totalPages) { - this.totalPages = totalPages; - } + public void setTotalPages(Integer totalPages) { + this.totalPages = totalPages; + } - public Boolean getLast() { - return last; - } + public Boolean getLast() { + return last; + } - public void setLast(Boolean last) { - this.last = last; - } + public void setLast(Boolean last) { + this.last = last; + } - public Integer getNumber() { - return number; - } + public Integer getNumber() { + return number; + } - public void setNumber(Integer number) { - this.number = number; - } + public void setNumber(Integer number) { + this.number = number; + } } diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/DatasourceList.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/DatasourceList.java index 8e31d7612..30d0241c3 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/DatasourceList.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/DatasourceList.java @@ -1,12 +1,13 @@ + package eu.dnetlib.dhp.api.model; -import eu.dnetlib.dhp.api.model.CommunityContentprovider; - - import java.io.Serializable; import java.util.ArrayList; + +import eu.dnetlib.dhp.api.model.CommunityContentprovider; + public class DatasourceList extends ArrayList implements Serializable { - public DatasourceList(){ + public DatasourceList() { super(); } -} \ No newline at end of file +} diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/OrganizationList.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/OrganizationList.java index 6895967ff..3c81ad179 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/OrganizationList.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/OrganizationList.java @@ -1,3 +1,4 @@ + package eu.dnetlib.dhp.api.model; import java.io.Serializable; @@ -9,7 +10,7 @@ import java.util.ArrayList; */ public class OrganizationList extends ArrayList implements Serializable { - public OrganizationList(){ - super(); - } + public OrganizationList() { + super(); + } } diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/ProjectModel.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/ProjectModel.java index 50bdcf649..3495d6a63 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/ProjectModel.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/model/ProjectModel.java @@ -1,9 +1,10 @@ + package eu.dnetlib.dhp.api.model; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; - import java.io.Serializable; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + /** * @author miriam.baglioni * @Date 09/10/23 @@ -11,13 +12,13 @@ import java.io.Serializable; @JsonIgnoreProperties(ignoreUnknown = true) public class ProjectModel implements Serializable { - private String openaireId; + private String openaireId; - public String getOpenaireId() { - return openaireId; - } + public String getOpenaireId() { + return openaireId; + } - public void setOpenaireId(String openaireId) { - this.openaireId = openaireId; - } + public void setOpenaireId(String openaireId) { + this.openaireId = openaireId; + } } diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/SparkBulkTagJob.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/SparkBulkTagJob.java index b61bc2c9f..0d98e4958 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/SparkBulkTagJob.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/SparkBulkTagJob.java @@ -6,7 +6,6 @@ import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkSession; import java.util.*; -import eu.dnetlib.dhp.api.Utils; import org.apache.commons.io.IOUtils; import org.apache.spark.SparkConf; import org.apache.spark.api.java.function.FilterFunction; @@ -21,6 +20,7 @@ import org.slf4j.LoggerFactory; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.gson.Gson; +import eu.dnetlib.dhp.api.Utils; import eu.dnetlib.dhp.application.ArgumentApplicationParser; import eu.dnetlib.dhp.bulktag.community.*; import eu.dnetlib.dhp.schema.oaf.Datasource; @@ -87,7 +87,7 @@ public class SparkBulkTagJob { if (isTest) { cc = CommunityConfigurationFactory.newInstance(taggingConf); } else { - cc = Utils.getCommunityConfiguration();//QueryInformationSystem.getCommunityConfiguration(parser.get("isLookUpUrl")); + cc = Utils.getCommunityConfiguration();// QueryInformationSystem.getCommunityConfiguration(parser.get("isLookUpUrl")); } runWithSparkSession( diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/Community.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/Community.java index d281f8783..9cd3a8f82 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/Community.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/Community.java @@ -8,7 +8,6 @@ import java.util.Optional; import com.google.gson.Gson; - /** Created by miriam on 01/08/2018. */ public class Community implements Serializable { diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/CommunityConfigurationFactory.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/CommunityConfigurationFactory.java index 013bf7168..955ca3856 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/CommunityConfigurationFactory.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/CommunityConfigurationFactory.java @@ -5,6 +5,7 @@ import java.io.StringReader; import java.util.ArrayList; import java.util.List; import java.util.Map; + import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/Constraint.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/Constraint.java index 03ae1117b..82a6a3b85 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/Constraint.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/Constraint.java @@ -4,9 +4,10 @@ package eu.dnetlib.dhp.bulktag.community; import java.io.Serializable; import java.lang.reflect.InvocationTargetException; +import org.apache.htrace.fasterxml.jackson.annotation.JsonIgnore; + import eu.dnetlib.dhp.bulktag.criteria.Selection; import eu.dnetlib.dhp.bulktag.criteria.VerbResolver; -import org.apache.htrace.fasterxml.jackson.annotation.JsonIgnore; public class Constraint implements Serializable { private String verb; @@ -39,11 +40,12 @@ public class Constraint implements Serializable { public void setValue(String value) { this.value = value; } + //@JsonIgnore - //public void setSelection(Selection sel) { + // public void setSelection(Selection sel) { // selection = sel; // } -@JsonIgnore + @JsonIgnore public void setSelection(VerbResolver resolver) throws InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException { @@ -54,5 +56,4 @@ public class Constraint implements Serializable { return selection.apply(metadata); } - } diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/SelectionConstraints.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/SelectionConstraints.java index 8e6d25e9b..57cc658fc 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/SelectionConstraints.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/SelectionConstraints.java @@ -12,6 +12,7 @@ import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import eu.dnetlib.dhp.bulktag.criteria.VerbResolver; + @JsonAutoDetect public class SelectionConstraints implements Serializable { private List criteria; diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromorganization/PrepareResultCommunitySet.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromorganization/PrepareResultCommunitySet.java index ff6b73286..e0670b80f 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromorganization/PrepareResultCommunitySet.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromorganization/PrepareResultCommunitySet.java @@ -6,8 +6,6 @@ import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkHiveSession; import java.util.*; -import eu.dnetlib.dhp.api.Utils; -import eu.dnetlib.dhp.api.model.CommunityEntityMap; import org.apache.commons.io.IOUtils; import org.apache.hadoop.io.compress.GzipCodec; import org.apache.spark.SparkConf; @@ -20,6 +18,8 @@ import org.slf4j.LoggerFactory; import com.google.gson.Gson; +import eu.dnetlib.dhp.api.Utils; +import eu.dnetlib.dhp.api.model.CommunityEntityMap; import eu.dnetlib.dhp.application.ArgumentApplicationParser; import eu.dnetlib.dhp.schema.common.ModelConstants; import eu.dnetlib.dhp.schema.oaf.Relation; diff --git a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/BulkTagJobTest.java b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/BulkTagJobTest.java index 745cd7e6f..11dad9055 100644 --- a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/BulkTagJobTest.java +++ b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/BulkTagJobTest.java @@ -1572,36 +1572,36 @@ public class BulkTagJobTest { void newConfTest() throws Exception { final String pathMap = BulkTagJobTest.pathMap; SparkBulkTagJob - .main( - new String[] { - "-isTest", Boolean.TRUE.toString(), - "-isSparkSessionManaged", Boolean.FALSE.toString(), - "-sourcePath", - getClass().getResource("/eu/dnetlib/dhp/bulktag/sample/dataset/no_updates").getPath(), - "-taggingConf", taggingConf, - "-resultTableName", "eu.dnetlib.dhp.schema.oaf.Dataset", - "-outputPath", workingDir.toString() + "/dataset", - "-isLookUpUrl", MOCK_IS_LOOK_UP_URL, - "-pathMap", pathMap - }); + .main( + new String[] { + "-isTest", Boolean.TRUE.toString(), + "-isSparkSessionManaged", Boolean.FALSE.toString(), + "-sourcePath", + getClass().getResource("/eu/dnetlib/dhp/bulktag/sample/dataset/no_updates").getPath(), + "-taggingConf", taggingConf, + "-resultTableName", "eu.dnetlib.dhp.schema.oaf.Dataset", + "-outputPath", workingDir.toString() + "/dataset", + "-isLookUpUrl", MOCK_IS_LOOK_UP_URL, + "-pathMap", pathMap + }); final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); JavaRDD tmp = sc - .textFile(workingDir.toString() + "/dataset") - .map(item -> OBJECT_MAPPER.readValue(item, Dataset.class)); + .textFile(workingDir.toString() + "/dataset") + .map(item -> OBJECT_MAPPER.readValue(item, Dataset.class)); Assertions.assertEquals(10, tmp.count()); org.apache.spark.sql.Dataset verificationDataset = spark - .createDataset(tmp.rdd(), Encoders.bean(Dataset.class)); + .createDataset(tmp.rdd(), Encoders.bean(Dataset.class)); verificationDataset.createOrReplaceTempView("dataset"); String query = "select id, MyT.id community " - + "from dataset " - + "lateral view explode(context) c as MyT " - + "lateral view explode(MyT.datainfo) d as MyD " - + "where MyD.inferenceprovenance = 'bulktagging'"; + + "from dataset " + + "lateral view explode(context) c as MyT " + + "lateral view explode(MyT.datainfo) d as MyD " + + "where MyD.inferenceprovenance = 'bulktagging'"; Assertions.assertEquals(0, spark.sql(query).count()); } diff --git a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/CommunityConfigurationFactoryTest.java b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/CommunityConfigurationFactoryTest.java index 7e12bf9c3..5f0b1d7f1 100644 --- a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/CommunityConfigurationFactoryTest.java +++ b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/CommunityConfigurationFactoryTest.java @@ -47,7 +47,7 @@ class CommunityConfigurationFactoryTest { sc.setVerb("not_contains"); sc.setField("contributor"); sc.setValue("DARIAH"); - sc.setSelection(resolver);//.getSelectionCriteria(sc.getVerb(), sc.getValue())); + sc.setSelection(resolver);// .getSelectionCriteria(sc.getVerb(), sc.getValue())); String metadata = "This work has been partially supported by DARIAH-EU infrastructure"; Assertions.assertFalse(sc.verifyCriteria(metadata)); } diff --git a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/QueryCommunityAPITest.java b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/QueryCommunityAPITest.java index 1b3403535..b0043d1e8 100644 --- a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/QueryCommunityAPITest.java +++ b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/QueryCommunityAPITest.java @@ -1,14 +1,8 @@ package eu.dnetlib.dhp.bulktag; -import eu.dnetlib.dhp.api.Utils; -import eu.dnetlib.dhp.api.model.CommunityEntityMap; -import eu.dnetlib.dhp.bulktag.community.Community; -import eu.dnetlib.dhp.bulktag.community.CommunityConfiguration; +import java.util.List; -import eu.dnetlib.dhp.api.model.CommunityModel; -import eu.dnetlib.dhp.api.model.CommunitySummary; -import eu.dnetlib.dhp.api.model.DatasourceList; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -16,8 +10,13 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import eu.dnetlib.dhp.api.QueryCommunityAPI; - -import java.util.List; +import eu.dnetlib.dhp.api.Utils; +import eu.dnetlib.dhp.api.model.CommunityEntityMap; +import eu.dnetlib.dhp.api.model.CommunityModel; +import eu.dnetlib.dhp.api.model.CommunitySummary; +import eu.dnetlib.dhp.api.model.DatasourceList; +import eu.dnetlib.dhp.bulktag.community.Community; +import eu.dnetlib.dhp.bulktag.community.CommunityConfiguration; /** * @author miriam.baglioni @@ -43,9 +42,12 @@ public class QueryCommunityAPITest { void community() throws Exception { String id = "dh-ch"; String body = QueryCommunityAPI.community(id); - System.out.println(new ObjectMapper().writeValueAsString(new ObjectMapper() - .readValue(body, CommunityModel.class))) - ; + System.out + .println( + new ObjectMapper() + .writeValueAsString( + new ObjectMapper() + .readValue(body, CommunityModel.class))); } @Test @@ -53,14 +55,14 @@ public class QueryCommunityAPITest { String id = "dh-ch"; String body = QueryCommunityAPI.communityDatasource(id); new ObjectMapper() - .readValue(body, DatasourceList.class) - .forEach(ds-> { - try { - System.out.println(new ObjectMapper().writeValueAsString(ds)); - } catch (JsonProcessingException e) { - throw new RuntimeException(e); - } - }); + .readValue(body, DatasourceList.class) + .forEach(ds -> { + try { + System.out.println(new ObjectMapper().writeValueAsString(ds)); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + }); ; } @@ -68,24 +70,33 @@ public class QueryCommunityAPITest { void validCommunities() throws Exception { CommunityConfiguration cc = Utils.getCommunityConfiguration(); System.out.println(cc.getCommunities().keySet()); - Community community =cc.getCommunities().get("aurora"); + Community community = cc.getCommunities().get("aurora"); Assertions.assertEquals(0, community.getSubjects().size()); Assertions.assertEquals(null, community.getConstraints()); Assertions.assertEquals(null, community.getRemoveConstraints()); Assertions.assertEquals(2, community.getZenodoCommunities().size()); - Assertions.assertTrue(community.getZenodoCommunities().stream().anyMatch(c -> c.equals("aurora-universities-network"))); - Assertions.assertTrue(community.getZenodoCommunities().stream().anyMatch(c -> c.equals("university-of-innsbruck"))); + Assertions + .assertTrue( + community.getZenodoCommunities().stream().anyMatch(c -> c.equals("aurora-universities-network"))); + Assertions + .assertTrue(community.getZenodoCommunities().stream().anyMatch(c -> c.equals("university-of-innsbruck"))); Assertions.assertEquals(35, community.getProviders().size()); - Assertions.assertEquals(35, community.getProviders().stream().filter(p->p.getSelectionConstraints()==null).count()); + Assertions + .assertEquals( + 35, community.getProviders().stream().filter(p -> p.getSelectionConstraints() == null).count()); } @Test void getCommunityProjects() throws Exception { CommunityEntityMap projectMap = Utils.getCommunityProjects(); Assertions.assertFalse(projectMap.containsKey("mes")); - Assertions.assertEquals(33, projectMap.size()); - Assertions.assertTrue(projectMap.keySet().stream().allMatch(k -> projectMap.get(k).stream().allMatch(p -> p.startsWith("40|")))); + Assertions.assertEquals(33, projectMap.size()); + Assertions + .assertTrue( + projectMap + .keySet() + .stream() + .allMatch(k -> projectMap.get(k).stream().allMatch(p -> p.startsWith("40|")))); } } - From 9a98f408b36d6ebcd0b1bdeaaa64565c0a899f03 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Tue, 10 Oct 2023 09:36:11 +0200 Subject: [PATCH 316/449] code formatting --- .../opencitations/CreateActionSetSparkJob.java | 2 +- .../dnetlib/doiboost/crossref/Crossref2Oaf.scala | 16 +++++++++------- .../doiboost/crossref/CrossrefMappingTest.scala | 2 +- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/opencitations/CreateActionSetSparkJob.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/opencitations/CreateActionSetSparkJob.java index a367ba852..b707fdcd3 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/opencitations/CreateActionSetSparkJob.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/opencitations/CreateActionSetSparkJob.java @@ -7,7 +7,6 @@ import java.io.IOException; import java.io.Serializable; import java.util.*; -import eu.dnetlib.dhp.schema.oaf.utils.*; import org.apache.commons.cli.ParseException; import org.apache.commons.io.IOUtils; import org.apache.hadoop.io.Text; @@ -30,6 +29,7 @@ import eu.dnetlib.dhp.application.ArgumentApplicationParser; import eu.dnetlib.dhp.schema.action.AtomicAction; import eu.dnetlib.dhp.schema.common.ModelConstants; import eu.dnetlib.dhp.schema.oaf.*; +import eu.dnetlib.dhp.schema.oaf.utils.*; import eu.dnetlib.dhp.utils.DHPUtils; import scala.Tuple2; diff --git a/dhp-workflows/dhp-doiboost/src/main/scala/eu/dnetlib/doiboost/crossref/Crossref2Oaf.scala b/dhp-workflows/dhp-doiboost/src/main/scala/eu/dnetlib/doiboost/crossref/Crossref2Oaf.scala index e0fdb9ce4..565d34e62 100644 --- a/dhp-workflows/dhp-doiboost/src/main/scala/eu/dnetlib/doiboost/crossref/Crossref2Oaf.scala +++ b/dhp-workflows/dhp-doiboost/src/main/scala/eu/dnetlib/doiboost/crossref/Crossref2Oaf.scala @@ -31,9 +31,7 @@ case class mappingAuthor( affiliation: Option[mappingAffiliation] ) {} -case class funderInfo(id:String,uri:String, name:String,synonym:List[String] ) {} - - +case class funderInfo(id: String, uri: String, name: String, synonym: List[String]) {} case class mappingFunder(name: String, DOI: Option[String], award: Option[List[String]]) {} @@ -41,7 +39,9 @@ case object Crossref2Oaf { val logger: Logger = LoggerFactory.getLogger(Crossref2Oaf.getClass) val irishFunder: List[funderInfo] = { - val s = Source.fromInputStream(getClass.getResourceAsStream("/eu/dnetlib/dhp/doiboost/crossref/irish_funder.json")).mkString + val s = Source + .fromInputStream(getClass.getResourceAsStream("/eu/dnetlib/dhp/doiboost/crossref/irish_funder.json")) + .mkString implicit lazy val formats: DefaultFormats.type = org.json4s.DefaultFormats lazy val json: org.json4s.JValue = parse(s) json.extract[List[funderInfo]] @@ -100,9 +100,11 @@ case object Crossref2Oaf { "report" -> "0017 Report" ) - def getIrishId(doi:String):Option[String] = { - val id =doi.split("/").last - irishFunder.find(f => id.equalsIgnoreCase(f.id) || (f.synonym.nonEmpty && f.synonym.exists(s => s.equalsIgnoreCase(id)))).map(f => f.id) + def getIrishId(doi: String): Option[String] = { + val id = doi.split("/").last + irishFunder + .find(f => id.equalsIgnoreCase(f.id) || (f.synonym.nonEmpty && f.synonym.exists(s => s.equalsIgnoreCase(id)))) + .map(f => f.id) } def mappingResult(result: Result, json: JValue, cobjCategory: String): Result = { diff --git a/dhp-workflows/dhp-doiboost/src/test/scala/eu/dnetlib/dhp/doiboost/crossref/CrossrefMappingTest.scala b/dhp-workflows/dhp-doiboost/src/test/scala/eu/dnetlib/dhp/doiboost/crossref/CrossrefMappingTest.scala index 7961376c5..fbf6f72c0 100644 --- a/dhp-workflows/dhp-doiboost/src/test/scala/eu/dnetlib/dhp/doiboost/crossref/CrossrefMappingTest.scala +++ b/dhp-workflows/dhp-doiboost/src/test/scala/eu/dnetlib/dhp/doiboost/crossref/CrossrefMappingTest.scala @@ -50,7 +50,7 @@ class CrossrefMappingTest { } } - def checkRelation(generatedOAF: List[Oaf]): Unit = { + def checkRelation(generatedOAF: List[Oaf]): Unit = { val rels: List[Relation] = generatedOAF.filter(p => p.isInstanceOf[Relation]).asInstanceOf[List[Relation]] From 110ce4b40fc54c2d60fe8120927e76b84580b8c9 Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Tue, 10 Oct 2023 09:46:40 +0200 Subject: [PATCH 317/449] extend the fos model to include the level4 and the scores for level3 and level4. removed bip indicators from the instance --- .../dnetlib/dhp/actionmanager/Constants.java | 20 ++++-- .../GetFOSSparkJob.java | 9 ++- .../PrepareFOSSparkJob.java | 27 +++++-- .../SparkSaveUnresolved.java | 6 +- .../model/FOSDataModel.java | 63 +++++++++++++++-- .../CreateActionSetSparkJob.java | 2 +- .../oozie_app/workflow.xml | 56 +++++++-------- .../createunresolvedentities/GetFosTest.java | 39 +++++++++-- .../createunresolvedentities/PrepareTest.java | 70 +++++++++++++++++++ .../createunresolvedentities/ProduceTest.java | 34 +++++++++ .../createunresolvedentities/fos/fos_sbs2.csv | 26 +++++++ .../fos/fos_sbs_2.json | 25 +++++++ .../doiboost/crossref/Crossref2Oaf.scala | 16 +++-- .../crossref/CrossrefMappingTest.scala | 2 +- 14 files changed, 334 insertions(+), 61 deletions(-) create mode 100644 dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/createunresolvedentities/fos/fos_sbs2.csv create mode 100644 dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/createunresolvedentities/fos/fos_sbs_2.json diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/Constants.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/Constants.java index 62556b16b..006d3af76 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/Constants.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/Constants.java @@ -40,6 +40,7 @@ public class Constants { public static final String SDG_CLASS_NAME = "Sustainable Development Goals"; public static final String NULL = "NULL"; + public static final String NA = "N/A"; public static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); @@ -61,10 +62,16 @@ public class Constants { .map((MapFunction) value -> OBJECT_MAPPER.readValue(value, clazz), Encoders.bean(clazz)); } - public static Subject getSubject(String sbj, String classid, String classname, - String diqualifierclassid) { - if (sbj == null || sbj.equals(NULL)) + public static Subject getSubject(String sbj, String classid, String classname, String diqualifierclassid, + Boolean split) { + if (sbj == null || sbj.equals(NULL) || sbj.startsWith(NA)) return null; + String trust = ""; + String subject = sbj; + if (split) { + sbj = subject.split("@@")[0]; + trust = subject.split("@@")[1]; + } Subject s = new Subject(); s.setValue(sbj); s @@ -89,9 +96,14 @@ public class Constants { UPDATE_CLASS_NAME, ModelConstants.DNET_PROVENANCE_ACTIONS, ModelConstants.DNET_PROVENANCE_ACTIONS), - "")); + trust)); return s; + } + + public static Subject getSubject(String sbj, String classid, String classname, + String diqualifierclassid) { + return getSubject(sbj, classid, classname, diqualifierclassid, false); } diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/GetFOSSparkJob.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/GetFOSSparkJob.java index 0cc2f93df..abea6acd7 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/GetFOSSparkJob.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/GetFOSSparkJob.java @@ -75,9 +75,12 @@ public class GetFOSSparkJob implements Serializable { fosData.map((MapFunction) r -> { FOSDataModel fosDataModel = new FOSDataModel(); fosDataModel.setDoi(r.getString(0).toLowerCase()); - fosDataModel.setLevel1(r.getString(1)); - fosDataModel.setLevel2(r.getString(2)); - fosDataModel.setLevel3(r.getString(3)); + fosDataModel.setLevel1(r.getString(2)); + fosDataModel.setLevel2(r.getString(3)); + fosDataModel.setLevel3(r.getString(4)); + fosDataModel.setLevel4(r.getString(5)); + fosDataModel.setScoreL3(String.valueOf(r.getDouble(6))); + fosDataModel.setScoreL4(String.valueOf(r.getDouble(7))); return fosDataModel; }, Encoders.bean(FOSDataModel.class)) .write() diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/PrepareFOSSparkJob.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/PrepareFOSSparkJob.java index 4d2d25215..57ad8b96a 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/PrepareFOSSparkJob.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/PrepareFOSSparkJob.java @@ -78,12 +78,20 @@ public class PrepareFOSSparkJob implements Serializable { HashSet level1 = new HashSet<>(); HashSet level2 = new HashSet<>(); HashSet level3 = new HashSet<>(); - addLevels(level1, level2, level3, first); - it.forEachRemaining(v -> addLevels(level1, level2, level3, v)); + HashSet level4 = new HashSet<>(); + addLevels(level1, level2, level3, level4, first); + it.forEachRemaining(v -> addLevels(level1, level2, level3, level4, v)); List sbjs = new ArrayList<>(); - level1.forEach(l -> sbjs.add(getSubject(l, FOS_CLASS_ID, FOS_CLASS_NAME, UPDATE_SUBJECT_FOS_CLASS_ID))); - level2.forEach(l -> sbjs.add(getSubject(l, FOS_CLASS_ID, FOS_CLASS_NAME, UPDATE_SUBJECT_FOS_CLASS_ID))); - level3.forEach(l -> sbjs.add(getSubject(l, FOS_CLASS_ID, FOS_CLASS_NAME, UPDATE_SUBJECT_FOS_CLASS_ID))); + level1 + .forEach(l -> add(sbjs, getSubject(l, FOS_CLASS_ID, FOS_CLASS_NAME, UPDATE_SUBJECT_FOS_CLASS_ID))); + level2 + .forEach(l -> add(sbjs, getSubject(l, FOS_CLASS_ID, FOS_CLASS_NAME, UPDATE_SUBJECT_FOS_CLASS_ID))); + level3 + .forEach( + l -> add(sbjs, getSubject(l, FOS_CLASS_ID, FOS_CLASS_NAME, UPDATE_SUBJECT_FOS_CLASS_ID, true))); + level4 + .forEach( + l -> add(sbjs, getSubject(l, FOS_CLASS_ID, FOS_CLASS_NAME, UPDATE_SUBJECT_FOS_CLASS_ID, true))); r.setSubject(sbjs); r .setDataInfo( @@ -106,11 +114,18 @@ public class PrepareFOSSparkJob implements Serializable { .json(outputPath + "/fos"); } + private static void add(List sbsjs, Subject sbj) { + if (sbj != null) + sbsjs.add(sbj); + } + private static void addLevels(HashSet level1, HashSet level2, HashSet level3, + HashSet level4, FOSDataModel first) { level1.add(first.getLevel1()); level2.add(first.getLevel2()); - level3.add(first.getLevel3()); + level3.add(first.getLevel3() + "@@" + first.getScoreL3()); + level4.add(first.getLevel4() + "@@" + first.getScoreL4()); } } diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/SparkSaveUnresolved.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/SparkSaveUnresolved.java index 3b9775094..93bbfcc88 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/SparkSaveUnresolved.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/SparkSaveUnresolved.java @@ -69,9 +69,9 @@ public class SparkSaveUnresolved implements Serializable { .mapGroups((MapGroupsFunction) (k, it) -> { Result ret = it.next(); it.forEachRemaining(r -> { - if (r.getInstance() != null) { - ret.setInstance(r.getInstance()); - } +// if (r.getInstance() != null) { +// ret.setInstance(r.getInstance()); +// } if (r.getSubject() != null) { if (ret.getSubject() != null) ret.getSubject().addAll(r.getSubject()); diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/model/FOSDataModel.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/model/FOSDataModel.java index e98ba74a1..a82d7bfd6 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/model/FOSDataModel.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/model/FOSDataModel.java @@ -11,21 +11,43 @@ public class FOSDataModel implements Serializable { private String doi; @CsvBindByPosition(position = 1) +// @CsvBindByName(column = "doi") + private String oaid; + @CsvBindByPosition(position = 2) // @CsvBindByName(column = "level1") private String level1; - @CsvBindByPosition(position = 2) + @CsvBindByPosition(position = 3) // @CsvBindByName(column = "level2") private String level2; - @CsvBindByPosition(position = 3) + @CsvBindByPosition(position = 4) // @CsvBindByName(column = "level3") private String level3; + @CsvBindByPosition(position = 5) +// @CsvBindByName(column = "level3") + private String level4; + @CsvBindByPosition(position = 6) + private String scoreL3; + @CsvBindByPosition(position = 7) + private String scoreL4; + public FOSDataModel() { } + public FOSDataModel(String doi, String level1, String level2, String level3, String level4, String l3score, + String l4score) { + this.doi = doi; + this.level1 = level1; + this.level2 = level2; + this.level3 = level3; + this.level4 = level4; + this.scoreL3 = l3score; + this.scoreL4 = l4score; + } + public FOSDataModel(String doi, String level1, String level2, String level3) { this.doi = doi; this.level1 = level1; @@ -33,8 +55,41 @@ public class FOSDataModel implements Serializable { this.level3 = level3; } - public static FOSDataModel newInstance(String d, String level1, String level2, String level3) { - return new FOSDataModel(d, level1, level2, level3); + public static FOSDataModel newInstance(String d, String level1, String level2, String level3, String level4, + String scorel3, String scorel4) { + return new FOSDataModel(d, level1, level2, level3, level4, scorel3, scorel4); + } + + public String getOaid() { + return oaid; + } + + public void setOaid(String oaid) { + this.oaid = oaid; + } + + public String getLevel4() { + return level4; + } + + public void setLevel4(String level4) { + this.level4 = level4; + } + + public String getScoreL3() { + return scoreL3; + } + + public void setScoreL3(String scoreL3) { + this.scoreL3 = scoreL3; + } + + public String getScoreL4() { + return scoreL4; + } + + public void setScoreL4(String scoreL4) { + this.scoreL4 = scoreL4; } public String getDoi() { diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/opencitations/CreateActionSetSparkJob.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/opencitations/CreateActionSetSparkJob.java index a367ba852..b707fdcd3 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/opencitations/CreateActionSetSparkJob.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/opencitations/CreateActionSetSparkJob.java @@ -7,7 +7,6 @@ import java.io.IOException; import java.io.Serializable; import java.util.*; -import eu.dnetlib.dhp.schema.oaf.utils.*; import org.apache.commons.cli.ParseException; import org.apache.commons.io.IOUtils; import org.apache.hadoop.io.Text; @@ -30,6 +29,7 @@ import eu.dnetlib.dhp.application.ArgumentApplicationParser; import eu.dnetlib.dhp.schema.action.AtomicAction; import eu.dnetlib.dhp.schema.common.ModelConstants; import eu.dnetlib.dhp.schema.oaf.*; +import eu.dnetlib.dhp.schema.oaf.utils.*; import eu.dnetlib.dhp.utils.DHPUtils; import scala.Tuple2; diff --git a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/createunresolvedentities/oozie_app/workflow.xml b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/createunresolvedentities/oozie_app/workflow.xml index c8af64594..a2935a71d 100644 --- a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/createunresolvedentities/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/createunresolvedentities/oozie_app/workflow.xml @@ -6,10 +6,10 @@ the input path of the resources to be extended - - bipScorePath - the path where to find the bipFinder scores - + + + + outputPath the path where to store the actionset @@ -77,34 +77,34 @@ - + - - - yarn - cluster - Produces the unresolved from BIP! Finder - eu.dnetlib.dhp.actionmanager.createunresolvedentities.PrepareBipFinder - dhp-aggregation-${projectVersion}.jar - - --executor-memory=${sparkExecutorMemory} - --executor-cores=${sparkExecutorCores} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.sql.warehouse.dir=${sparkSqlWarehouseDir} - - --sourcePath${bipScorePath} - --outputPath${workingDir}/prepared - - - - + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/GetFosTest.java b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/GetFosTest.java index 7e0acc2bb..d4fe129df 100644 --- a/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/GetFosTest.java +++ b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/GetFosTest.java @@ -13,10 +13,7 @@ import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.JavaSparkContext; import org.apache.spark.sql.SparkSession; -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -68,6 +65,7 @@ public class GetFosTest { } @Test + @Disabled void test3() throws Exception { final String sourcePath = getClass() .getResource("/eu/dnetlib/dhp/actionmanager/createunresolvedentities/fos/fos_sbs.tsv") @@ -96,4 +94,37 @@ public class GetFosTest { tmp.foreach(t -> Assertions.assertTrue(t.getLevel3() != null)); } + + @Test + void test4() throws Exception { + final String sourcePath = getClass() + .getResource("/eu/dnetlib/dhp/actionmanager/createunresolvedentities/fos/fos_sbs2.csv") + .getPath(); + + final String outputPath = workingDir.toString() + "/fos.json"; + GetFOSSparkJob + .main( + new String[] { + "--isSparkSessionManaged", Boolean.FALSE.toString(), + "--sourcePath", sourcePath, + "--delimiter", ",", + "-outputPath", outputPath + + }); + + final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); + + JavaRDD tmp = sc + .textFile(outputPath) + .map(item -> OBJECT_MAPPER.readValue(item, FOSDataModel.class)); + + tmp.foreach(t -> Assertions.assertTrue(t.getDoi() != null)); + tmp.foreach(t -> Assertions.assertTrue(t.getLevel1() != null)); + tmp.foreach(t -> Assertions.assertTrue(t.getLevel2() != null)); + tmp.foreach(t -> Assertions.assertTrue(t.getLevel3() != null)); + tmp.foreach(t -> Assertions.assertTrue(t.getLevel4() != null)); + tmp.foreach(t -> Assertions.assertTrue(t.getScoreL3() != null)); + tmp.foreach(t -> Assertions.assertTrue(t.getScoreL4() != null)); + + } } diff --git a/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/PrepareTest.java b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/PrepareTest.java index cc8108bde..ccb0ebbff 100644 --- a/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/PrepareTest.java +++ b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/PrepareTest.java @@ -222,6 +222,76 @@ public class PrepareTest { } + @Test + void fosPrepareTest2() throws Exception { + final String sourcePath = getClass() + .getResource("/eu/dnetlib/dhp/actionmanager/createunresolvedentities/fos/fos_sbs_2.json") + .getPath(); + + PrepareFOSSparkJob + .main( + new String[] { + "--isSparkSessionManaged", Boolean.FALSE.toString(), + "--sourcePath", sourcePath, + + "-outputPath", workingDir.toString() + "/work" + + }); + + final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); + + JavaRDD tmp = sc + .textFile(workingDir.toString() + "/work/fos") + .map(item -> OBJECT_MAPPER.readValue(item, Result.class)); + + String doi1 = "unresolved::10.1016/j.revmed.2006.07.012::doi"; + + assertEquals(13, tmp.count()); + assertEquals(1, tmp.filter(row -> row.getId().equals(doi1)).count()); + + Result result = tmp + .filter(r -> r.getId().equals(doi1)) + .first(); + + result.getSubject().forEach(s -> System.out.println(s.getValue() + " trust = " + s.getDataInfo().getTrust())); + Assertions.assertEquals(6, result.getSubject().size()); + + assertTrue( + result + .getSubject() + .stream() + .anyMatch( + s -> s.getValue().contains("03 medical and health sciences") + && s.getDataInfo().getTrust().equals(""))); + + assertTrue( + result + .getSubject() + .stream() + .anyMatch( + s -> s.getValue().contains("0302 clinical medicine") && s.getDataInfo().getTrust().equals(""))); + + assertTrue( + result + .getSubject() + .stream() + .anyMatch( + s -> s + .getValue() + .contains("030204 cardiovascular system & hematology") + && s.getDataInfo().getTrust().equals("0.5101401805877686"))); + assertTrue( + result + .getSubject() + .stream() + .anyMatch( + s -> s + .getValue() + .contains("03020409 Hematology/Coagulopathies") + && s.getDataInfo().getTrust().equals("0.0546871414174914"))); + + } + @Test void sdgPrepareTest() throws Exception { final String sourcePath = getClass() diff --git a/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/ProduceTest.java b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/ProduceTest.java index c3c110f09..fce6c1e97 100644 --- a/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/ProduceTest.java +++ b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/ProduceTest.java @@ -379,6 +379,40 @@ public class ProduceTest { .map(item -> OBJECT_MAPPER.readValue(item, Result.class)); } + @Test + public JavaRDD getResultFosJavaRDD() throws Exception { + + final String fosPath = getClass() + .getResource("/eu/dnetlib/dhp/actionmanager/createunresolvedentities/fos/fos_sbs_2.json") + .getPath(); + + PrepareFOSSparkJob + .main( + new String[] { + "--isSparkSessionManaged", Boolean.FALSE.toString(), + "--sourcePath", fosPath, + "-outputPath", workingDir.toString() + "/work" + }); + + SparkSaveUnresolved.main(new String[] { + "--isSparkSessionManaged", Boolean.FALSE.toString(), + "--sourcePath", workingDir.toString() + "/work", + + "-outputPath", workingDir.toString() + "/unresolved" + + }); + + final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); + + JavaRDD tmp = sc + .textFile(workingDir.toString() + "/unresolved") + .map(item -> OBJECT_MAPPER.readValue(item, Result.class)); + tmp.foreach(r -> System.out.println(new ObjectMapper().writeValueAsString(r))); + + return tmp; + + } + @Test void prepareTest5Subjects() throws Exception { final String doi = "unresolved::10.1063/5.0032658::doi"; diff --git a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/createunresolvedentities/fos/fos_sbs2.csv b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/createunresolvedentities/fos/fos_sbs2.csv new file mode 100644 index 000000000..3b1f2304f --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/createunresolvedentities/fos/fos_sbs2.csv @@ -0,0 +1,26 @@ +DOI,OAID,level1,level2,level3,level4,score_for_L3,score_for_L4 +10.1016/j.anucene.2006.02.004,doi_________::00059d9963edf633bec756fb21b5bd72,02 engineering and technology,"0202 electrical engineering, electronic engineering, information engineering",020209 energy,02020908 Climate change policy/Ethanol fuel,0.5,0.5 +10.1016/j.anucene.2006.02.004,doi_________::00059d9963edf633bec756fb21b5bd72,02 engineering and technology,0211 other engineering and technologies,021108 energy,02110808 Climate change policy/Ethanol fuel,0.5,0.5 +10.1016/j.revmed.2006.07.010,doi_________::0026476c1651a92c933d752ff12496c7,03 medical and health sciences,0302 clinical medicine,030220 oncology & carcinogenesis,N/A,0.5036656856536865,0.0 +10.1016/j.revmed.2006.07.010,doi_________::0026476c1651a92c933d752ff12496c7,03 medical and health sciences,0302 clinical medicine,030212 general & internal medicine,N/A,0.4963343143463135,0.0 +10.20965/jrm.2006.p0312,doi_________::0028336a2f3826cc83c47dbefac71543,02 engineering and technology,0209 industrial biotechnology,020901 industrial engineering & automation,02090104 Robotics/Robots,0.6111094951629639,0.5053805979936855 +10.20965/jrm.2006.p0312,doi_________::0028336a2f3826cc83c47dbefac71543,01 natural sciences,0104 chemical sciences,010401 analytical chemistry,N/A,0.3888905048370361,0.0 +10.1111/j.1747-7379.2006.040_1.x,doi_________::002c7077e7c114a8304eb90f59e45fa4,05 social sciences,0506 political science,050602 political science & public administration,05060202 Ethnic groups/Ethnicity,0.6159052848815918,0.7369035568037298 +10.1111/j.1747-7379.2006.040_1.x,doi_________::002c7077e7c114a8304eb90f59e45fa4,05 social sciences,0502 economics and business,050207 economics,N/A,0.3840946555137634,0.0 +10.1007/s10512-006-0049-9,doi_________::003f29f9254819cf4c78558b1bc25f10,02 engineering and technology,"0202 electrical engineering, electronic engineering, information engineering",020209 energy,02020908 Climate change policy/Ethanol fuel,0.5,0.5 +10.1007/s10512-006-0049-9,doi_________::003f29f9254819cf4c78558b1bc25f10,02 engineering and technology,0211 other engineering and technologies,021108 energy,02110808 Climate change policy/Ethanol fuel,0.5,0.5 +10.1111/j.1365-2621.2005.01045.x,doi_________::00419355b4c3e0646bd0e1b301164c8e,04 agricultural and veterinary sciences,0404 agricultural biotechnology,040401 food science,04040102 Food science/Food industry,0.5,0.5 +10.1111/j.1365-2621.2005.01045.x,doi_________::00419355b4c3e0646bd0e1b301164c8e,04 agricultural and veterinary sciences,0405 other agricultural sciences,040502 food science,04050202 Food science/Food industry,0.5,0.5 +10.1002/chin.200617262,doi_________::004c8cef80668904961b9e62841793c8,01 natural sciences,0104 chemical sciences,010405 organic chemistry,01040508 Functional groups/Ethers,0.5566747188568115,0.5582916736602783 +10.1002/chin.200617262,doi_________::004c8cef80668904961b9e62841793c8,01 natural sciences,0104 chemical sciences,010402 general chemistry,01040207 Chemical synthesis/Total synthesis,0.4433253407478332,0.4417082965373993 +10.1016/j.revmed.2006.07.012,doi_________::005b1d0fb650b680abaf6cfe26a21604,03 medical and health sciences,0302 clinical medicine,030204 cardiovascular system & hematology,03020409 Hematology/Coagulopathies,0.5101401805877686,0.0546871414174914 +10.1016/j.revmed.2006.07.012,doi_________::005b1d0fb650b680abaf6cfe26a21604,03 medical and health sciences,0301 basic medicine,030105 genetics & heredity,N/A,0.4898599088191986,0.0 +10.4109/jslab.17.132,doi_________::00889baa06de363e37930daaf8e800c0,03 medical and health sciences,0301 basic medicine,030104 developmental biology,N/A,0.5,0.0 +10.4109/jslab.17.132,doi_________::00889baa06de363e37930daaf8e800c0,03 medical and health sciences,0303 health sciences,030304 developmental biology,N/A,0.5,0.0 +10.1108/00251740610715687,doi_________::0092cb1b1920d556719385a26363ecaa,05 social sciences,0502 economics and business,050203 business & management,05020311 International business/International trade,0.605047881603241,0.2156608108845153 +10.1108/00251740610715687,doi_________::0092cb1b1920d556719385a26363ecaa,05 social sciences,0502 economics and business,050211 marketing,N/A,0.394952118396759,0.0 +10.1080/03067310500248098,doi_________::00a76678d230e3f20b6356804448028f,04 agricultural and veterinary sciences,0404 agricultural biotechnology,040401 food science,04040102 Food science/Food industry,0.5,0.5 +10.1080/03067310500248098,doi_________::00a76678d230e3f20b6356804448028f,04 agricultural and veterinary sciences,0405 other agricultural sciences,040502 food science,04050202 Food science/Food industry,0.5,0.5 +10.3152/147154306781778533,doi_________::00acc520f3939e5a6675343881fed4f2,05 social sciences,0502 economics and business,050203 business & management,05020307 Innovation/Product management,0.5293408632278442,0.5326762795448303 +10.3152/147154306781778533,doi_________::00acc520f3939e5a6675343881fed4f2,05 social sciences,0509 other social sciences,050905 science studies,05090502 Social philosophy/Capitalism,0.4706590473651886,0.4673237204551697 +10.1785/0120050806,doi_________::00d5831d329e7ae4523d78bfc3042e98,02 engineering and technology,0211 other engineering and technologies,021101 geological & geomatics engineering,02110103 Concrete/Building materials,0.5343400835990906,0.3285667930180677 \ No newline at end of file diff --git a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/createunresolvedentities/fos/fos_sbs_2.json b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/createunresolvedentities/fos/fos_sbs_2.json new file mode 100644 index 000000000..00ffad70c --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/actionmanager/createunresolvedentities/fos/fos_sbs_2.json @@ -0,0 +1,25 @@ +{"doi":"10.1016/j.anucene.2006.02.004","level1":"02 engineering and technology","level2":"0202 electrical engineering, electronic engineering, information engineering","level3":"020209 energy","level4":"02020908 Climate change policy/Ethanol fuel","scoreL3":"0.5","scoreL4":"0.5"} +{"doi":"10.1016/j.anucene.2006.02.004","level1":"02 engineering and technology","level2":"0211 other engineering and technologies","level3":"021108 energy","level4":"02110808 Climate change policy/Ethanol fuel","scoreL3":"0.5","scoreL4":"0.5"} +{"doi":"10.1016/j.revmed.2006.07.010","level1":"03 medical and health sciences","level2":"0302 clinical medicine","level3":"030220 oncology & carcinogenesis","level4":"N/A","scoreL3":"0.5036656856536865","scoreL4":"0.0"} +{"doi":"10.1016/j.revmed.2006.07.010","level1":"03 medical and health sciences","level2":"0302 clinical medicine","level3":"030212 general & internal medicine","level4":"N/A","scoreL3":"0.4963343143463135","scoreL4":"0.0"} +{"doi":"10.20965/jrm.2006.p0312","level1":"02 engineering and technology","level2":"0209 industrial biotechnology","level3":"020901 industrial engineering & automation","level4":"02090104 Robotics/Robots","scoreL3":"0.6111094951629639","scoreL4":"0.5053805979936855"} +{"doi":"10.20965/jrm.2006.p0312","level1":"01 natural sciences","level2":"0104 chemical sciences","level3":"010401 analytical chemistry","level4":"N/A","scoreL3":"0.3888905048370361","scoreL4":"0.0"} +{"doi":"10.1111/j.1747-7379.2006.040_1.x","level1":"05 social sciences","level2":"0506 political science","level3":"050602 political science & public administration","level4":"05060202 Ethnic groups/Ethnicity","scoreL3":"0.6159052848815918","scoreL4":"0.7369035568037298"} +{"doi":"10.1111/j.1747-7379.2006.040_1.x","level1":"05 social sciences","level2":"0502 economics and business","level3":"050207 economics","level4":"N/A","scoreL3":"0.3840946555137634","scoreL4":"0.0"} +{"doi":"10.1007/s10512-006-0049-9","level1":"02 engineering and technology","level2":"0202 electrical engineering, electronic engineering, information engineering","level3":"020209 energy","level4":"02020908 Climate change policy/Ethanol fuel","scoreL3":"0.5","scoreL4":"0.5"} +{"doi":"10.1007/s10512-006-0049-9","level1":"02 engineering and technology","level2":"0211 other engineering and technologies","level3":"021108 energy","level4":"02110808 Climate change policy/Ethanol fuel","scoreL3":"0.5","scoreL4":"0.5"} +{"doi":"10.1111/j.1365-2621.2005.01045.x","level1":"04 agricultural and veterinary sciences","level2":"0404 agricultural biotechnology","level3":"040401 food science","level4":"04040102 Food science/Food industry","scoreL3":"0.5","scoreL4":"0.5"} +{"doi":"10.1111/j.1365-2621.2005.01045.x","level1":"04 agricultural and veterinary sciences","level2":"0405 other agricultural sciences","level3":"040502 food science","level4":"04050202 Food science/Food industry","scoreL3":"0.5","scoreL4":"0.5"} +{"doi":"10.1002/chin.200617262","level1":"01 natural sciences","level2":"0104 chemical sciences","level3":"010405 organic chemistry","level4":"01040508 Functional groups/Ethers","scoreL3":"0.5566747188568115","scoreL4":"0.5582916736602783"} +{"doi":"10.1002/chin.200617262","level1":"01 natural sciences","level2":"0104 chemical sciences","level3":"010402 general chemistry","level4":"01040207 Chemical synthesis/Total synthesis","scoreL3":"0.4433253407478332","scoreL4":"0.4417082965373993"} +{"doi":"10.1016/j.revmed.2006.07.012","level1":"03 medical and health sciences","level2":"0302 clinical medicine","level3":"030204 cardiovascular system & hematology","level4":"03020409 Hematology/Coagulopathies","scoreL3":"0.5101401805877686","scoreL4":"0.0546871414174914"} +{"doi":"10.1016/j.revmed.2006.07.012","level1":"03 medical and health sciences","level2":"0301 basic medicine","level3":"030105 genetics & heredity","level4":"N/A","scoreL3":"0.4898599088191986","scoreL4":"0.0"} +{"doi":"10.4109/jslab.17.132","level1":"03 medical and health sciences","level2":"0301 basic medicine","level3":"030104 developmental biology","level4":"N/A","scoreL3":"0.5","scoreL4":"0.0"} +{"doi":"10.4109/jslab.17.132","level1":"03 medical and health sciences","level2":"0303 health sciences","level3":"030304 developmental biology","level4":"N/A","scoreL3":"0.5","scoreL4":"0.0"} +{"doi":"10.1108/00251740610715687","level1":"05 social sciences","level2":"0502 economics and business","level3":"050203 business & management","level4":"05020311 International business/International trade","scoreL3":"0.605047881603241","scoreL4":"0.2156608108845153"} +{"doi":"10.1108/00251740610715687","level1":"05 social sciences","level2":"0502 economics and business","level3":"050211 marketing","level4":"N/A","scoreL3":"0.394952118396759","scoreL4":"0.0"} +{"doi":"10.1080/03067310500248098","level1":"04 agricultural and veterinary sciences","level2":"0404 agricultural biotechnology","level3":"040401 food science","level4":"04040102 Food science/Food industry","scoreL3":"0.5","scoreL4":"0.5"} +{"doi":"10.1080/03067310500248098","level1":"04 agricultural and veterinary sciences","level2":"0405 other agricultural sciences","level3":"040502 food science","level4":"04050202 Food science/Food industry","scoreL3":"0.5","scoreL4":"0.5"} +{"doi":"10.3152/147154306781778533","level1":"05 social sciences","level2":"0502 economics and business","level3":"050203 business & management","level4":"05020307 Innovation/Product management","scoreL3":"0.5293408632278442","scoreL4":"0.5326762795448303"} +{"doi":"10.3152/147154306781778533","level1":"05 social sciences","level2":"0509 other social sciences","level3":"050905 science studies","level4":"05090502 Social philosophy/Capitalism","scoreL3":"0.4706590473651886","scoreL4":"0.4673237204551697"} +{"doi":"10.1785/0120050806","level1":"02 engineering and technology","level2":"0211 other engineering and technologies","level3":"021101 geological & geomatics engineering","level4":"02110103 Concrete/Building materials","scoreL3":"0.5343400835990906","scoreL4":"0.3285667930180677"} diff --git a/dhp-workflows/dhp-doiboost/src/main/scala/eu/dnetlib/doiboost/crossref/Crossref2Oaf.scala b/dhp-workflows/dhp-doiboost/src/main/scala/eu/dnetlib/doiboost/crossref/Crossref2Oaf.scala index e0fdb9ce4..565d34e62 100644 --- a/dhp-workflows/dhp-doiboost/src/main/scala/eu/dnetlib/doiboost/crossref/Crossref2Oaf.scala +++ b/dhp-workflows/dhp-doiboost/src/main/scala/eu/dnetlib/doiboost/crossref/Crossref2Oaf.scala @@ -31,9 +31,7 @@ case class mappingAuthor( affiliation: Option[mappingAffiliation] ) {} -case class funderInfo(id:String,uri:String, name:String,synonym:List[String] ) {} - - +case class funderInfo(id: String, uri: String, name: String, synonym: List[String]) {} case class mappingFunder(name: String, DOI: Option[String], award: Option[List[String]]) {} @@ -41,7 +39,9 @@ case object Crossref2Oaf { val logger: Logger = LoggerFactory.getLogger(Crossref2Oaf.getClass) val irishFunder: List[funderInfo] = { - val s = Source.fromInputStream(getClass.getResourceAsStream("/eu/dnetlib/dhp/doiboost/crossref/irish_funder.json")).mkString + val s = Source + .fromInputStream(getClass.getResourceAsStream("/eu/dnetlib/dhp/doiboost/crossref/irish_funder.json")) + .mkString implicit lazy val formats: DefaultFormats.type = org.json4s.DefaultFormats lazy val json: org.json4s.JValue = parse(s) json.extract[List[funderInfo]] @@ -100,9 +100,11 @@ case object Crossref2Oaf { "report" -> "0017 Report" ) - def getIrishId(doi:String):Option[String] = { - val id =doi.split("/").last - irishFunder.find(f => id.equalsIgnoreCase(f.id) || (f.synonym.nonEmpty && f.synonym.exists(s => s.equalsIgnoreCase(id)))).map(f => f.id) + def getIrishId(doi: String): Option[String] = { + val id = doi.split("/").last + irishFunder + .find(f => id.equalsIgnoreCase(f.id) || (f.synonym.nonEmpty && f.synonym.exists(s => s.equalsIgnoreCase(id)))) + .map(f => f.id) } def mappingResult(result: Result, json: JValue, cobjCategory: String): Result = { diff --git a/dhp-workflows/dhp-doiboost/src/test/scala/eu/dnetlib/dhp/doiboost/crossref/CrossrefMappingTest.scala b/dhp-workflows/dhp-doiboost/src/test/scala/eu/dnetlib/dhp/doiboost/crossref/CrossrefMappingTest.scala index 7961376c5..fbf6f72c0 100644 --- a/dhp-workflows/dhp-doiboost/src/test/scala/eu/dnetlib/dhp/doiboost/crossref/CrossrefMappingTest.scala +++ b/dhp-workflows/dhp-doiboost/src/test/scala/eu/dnetlib/dhp/doiboost/crossref/CrossrefMappingTest.scala @@ -50,7 +50,7 @@ class CrossrefMappingTest { } } - def checkRelation(generatedOAF: List[Oaf]): Unit = { + def checkRelation(generatedOAF: List[Oaf]): Unit = { val rels: List[Relation] = generatedOAF.filter(p => p.isInstanceOf[Relation]).asInstanceOf[List[Relation]] From ed9282ef2a3e40a76308fbff9226a3bfa6a90df6 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Tue, 10 Oct 2023 09:52:03 +0200 Subject: [PATCH 318/449] removed module dhp-stats-monitor-update --- .../oozie_app/config-default.xml | 30 ---- .../oozie_app/copyDataToImpalaCluster.sh | 75 --------- .../oozie_app/finalizeImpalaCluster.sh | 29 ---- .../graph/stats-monitor/oozie_app/monitor.sh | 54 ------- .../oozie_app/scripts/updateMonitorDB.sql | 138 ---------------- .../oozie_app/scripts/updateMonitorDBAll.sql | 150 ------------------ .../scripts/updateMonitorDB_institutions.sql | 12 -- .../stats-monitor/oozie_app/workflow.xml | 110 ------------- 8 files changed, 598 deletions(-) delete mode 100644 dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/config-default.xml delete mode 100644 dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/copyDataToImpalaCluster.sh delete mode 100644 dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/finalizeImpalaCluster.sh delete mode 100644 dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/monitor.sh delete mode 100644 dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/scripts/updateMonitorDB.sql delete mode 100644 dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/scripts/updateMonitorDBAll.sql delete mode 100644 dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/scripts/updateMonitorDB_institutions.sql delete mode 100644 dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/workflow.xml diff --git a/dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/config-default.xml b/dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/config-default.xml deleted file mode 100644 index b2a1322e6..000000000 --- a/dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/config-default.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - jobTracker - ${jobTracker} - - - nameNode - ${nameNode} - - - oozie.use.system.libpath - true - - - oozie.action.sharelib.for.spark - spark2 - - - hive_metastore_uris - thrift://iis-cdh5-test-m3.ocean.icm.edu.pl:9083 - - - hive_jdbc_url - jdbc:hive2://iis-cdh5-test-m3.ocean.icm.edu.pl:10000/;UseNativeQuery=1;?spark.executor.memory=22166291558;spark.yarn.executor.memoryOverhead=3225;spark.driver.memory=15596411699;spark.yarn.driver.memoryOverhead=1228 - - - oozie.wf.workflow.notification.url - {serviceUrl}/v1/oozieNotification/jobUpdate?jobId=$jobId%26status=$status - - \ No newline at end of file diff --git a/dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/copyDataToImpalaCluster.sh b/dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/copyDataToImpalaCluster.sh deleted file mode 100644 index 1587f7152..000000000 --- a/dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/copyDataToImpalaCluster.sh +++ /dev/null @@ -1,75 +0,0 @@ -export PYTHON_EGG_CACHE=/home/$(whoami)/.python-eggs -export link_folder=/tmp/impala-shell-python-egg-cache-$(whoami) -if ! [ -L $link_folder ] -then - rm -Rf "$link_folder" - ln -sfn ${PYTHON_EGG_CACHE}${link_folder} ${link_folder} -fi - -#export HADOOP_USER_NAME=$2 - -function copydb() { - - export HADOOP_USER="dimitris.pierrakos" - export HADOOP_USER_NAME='dimitris.pierrakos' - - db=$1 - FILE=("hive_wf_tmp_"$RANDOM) - hdfs dfs -mkdir hdfs://impala-cluster-mn1.openaire.eu:8020/tmp/$FILE/ - - # change ownership to impala -# hdfs dfs -conf /etc/impala_cluster/hdfs-site.xml -chmod -R 777 /tmp/$FILE/${db}.db - hdfs dfs -conf /etc/impala_cluster/hdfs-site.xml -chmod -R 777 /tmp/$FILE/ - - - # copy the databases from ocean to impala - echo "copying $db" - hadoop distcp -Dmapreduce.map.memory.mb=6144 -pb hdfs://nameservice1/user/hive/warehouse/${db}.db hdfs://impala-cluster-mn1.openaire.eu:8020/tmp/$FILE/ - - hdfs dfs -conf /etc/impala_cluster/hdfs-site.xml -chmod -R 777 /tmp/$FILE/${db}.db - - # drop tables from db - for i in `impala-shell -i impala-cluster-dn1.openaire.eu -d ${db} --delimited -q "show tables"`; - do - `impala-shell -i impala-cluster-dn1.openaire.eu -d ${db} -q "drop table $i;"`; - done - - # drop views from db - for i in `impala-shell -i impala-cluster-dn1.openaire.eu -d ${db} --delimited -q "show tables"`; - do - `impala-shell -i impala-cluster-dn1.openaire.eu -d ${db} -q "drop view $i;"`; - done - - # delete the database - impala-shell -i impala-cluster-dn1.openaire.eu -q "drop database if exists ${db} cascade"; - - # create the databases - impala-shell -i impala-cluster-dn1.openaire.eu -q "create database ${db}"; - - impala-shell -q "INVALIDATE METADATA" - echo "creating schema for ${db}" - for (( k = 0; k < 5; k ++ )); do - for i in `impala-shell -d ${db} --delimited -q "show tables"`; - do - impala-shell -d ${db} --delimited -q "show create table $i"; - done | sed 's/"$/;/' | sed 's/^"//' | sed 's/[[:space:]]\date[[:space:]]/`date`/g' | impala-shell --user $HADOOP_USER_NAME -i impala-cluster-dn1.openaire.eu -c -f - - done - - # load the data from /tmp in the respective tables - echo "copying data in tables and computing stats" - for i in `impala-shell -i impala-cluster-dn1.openaire.eu -d ${db} --delimited -q "show tables"`; - do - impala-shell -i impala-cluster-dn1.openaire.eu -d ${db} -q "load data inpath '/tmp/$FILE/${db}.db/$i' into table $i"; - impala-shell -i impala-cluster-dn1.openaire.eu -d ${db} -q "compute stats $i"; - done - - # deleting the remaining directory from hdfs -hdfs dfs -conf /etc/impala_cluster/hdfs-site.xml -rm -R /tmp/$FILE/${db}.db -} - -MONITOR_DB=$1 -#HADOOP_USER_NAME=$2 - -copydb $MONITOR_DB'_institutions' -copydb $MONITOR_DB - diff --git a/dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/finalizeImpalaCluster.sh b/dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/finalizeImpalaCluster.sh deleted file mode 100644 index a7227e0c8..000000000 --- a/dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/finalizeImpalaCluster.sh +++ /dev/null @@ -1,29 +0,0 @@ -export PYTHON_EGG_CACHE=/home/$(whoami)/.python-eggs -export link_folder=/tmp/impala-shell-python-egg-cache-$(whoami) -if ! [ -L $link_folder ] -then - rm -Rf "$link_folder" - ln -sfn ${PYTHON_EGG_CACHE}${link_folder} ${link_folder} -fi - -function createShadowDB() { - SOURCE=$1 - SHADOW=$2 - - # drop views from db - for i in `impala-shell -i impala-cluster-dn1.openaire.eu -d ${SHADOW} --delimited -q "show tables"`; - do - `impala-shell -i impala-cluster-dn1.openaire.eu -d ${SHADOW} -q "drop view $i;"`; - done - - impala-shell -i impala-cluster-dn1.openaire.eu -q "drop database ${SHADOW} CASCADE"; - impala-shell -i impala-cluster-dn1.openaire.eu -q "create database if not exists ${SHADOW}"; -# impala-shell -i impala-cluster-dn1.openaire.eu -d ${SHADOW} -q "show tables" | sed "s/^/drop view if exists ${SHADOW}./" | sed "s/$/;/" | impala-shell -i impala-cluster-dn1.openaire.eu -f - - impala-shell -i impala-cluster-dn1.openaire.eu -d ${SOURCE} -q "show tables" --delimited | sed "s/\(.*\)/create view ${SHADOW}.\1 as select * from ${SOURCE}.\1;/" | impala-shell -i impala-cluster-dn1.openaire.eu -f - -} - -MONITOR_DB=$1 -MONITOR_DB_SHADOW=$2 - -createShadowDB $MONITOR_DB'_institutions' $MONITOR_DB'_institutions_shadow' -createShadowDB $MONITOR_DB $MONITOR_DB'_shadow' diff --git a/dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/monitor.sh b/dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/monitor.sh deleted file mode 100644 index 4f1889c9e..000000000 --- a/dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/monitor.sh +++ /dev/null @@ -1,54 +0,0 @@ -export PYTHON_EGG_CACHE=/home/$(whoami)/.python-eggs -export link_folder=/tmp/impala-shell-python-egg-cache-$(whoami) -if ! [ -L $link_folder ] -then - rm -Rf "$link_folder" - ln -sfn ${PYTHON_EGG_CACHE}${link_folder} ${link_folder} -fi - -export SOURCE=$1 -export TARGET=$2 -export SHADOW=$3 -export SCRIPT_PATH=$4 -export SCRIPT_PATH2=$5 -export SCRIPT_PATH2=$6 - -export HIVE_OPTS="-hiveconf mapred.job.queue.name=analytics -hiveconf hive.spark.client.connect.timeout=120000ms -hiveconf hive.spark.client.server.connect.timeout=300000ms -hiveconf spark.executor.memory=19166291558 -hiveconf spark.yarn.executor.memoryOverhead=3225 -hiveconf spark.driver.memory=11596411699 -hiveconf spark.yarn.driver.memoryOverhead=1228" -export HADOOP_USER_NAME="oozie" - -echo "Getting file from " $4 -hdfs dfs -copyToLocal $4 - -echo "Getting file from " $5 -hdfs dfs -copyToLocal $5 - -echo "Getting file from " $6 -hdfs dfs -copyToLocal $6 - -#update Institutions DB -cat updateMonitorDB_institutions.sql | sed "s/SOURCE/$1/g" | sed "s/TARGET/$2_institutions/g1" > foo -hive $HIVE_OPTS -f foo -cat updateMonitorDB.sql | sed "s/SOURCE/$1/g" | sed "s/TARGET/$2_institutions/g1" > foo -hive $HIVE_OPTS -f foo - -echo "Hive shell finished" - -echo "Updating shadow monitor insitutions database" -hive -e "drop database if exists ${SHADOW}_institutions cascade" -hive -e "create database if not exists ${SHADOW}_institutions" -hive $HIVE_OPTS --database ${2}_institutions -e "show tables" | grep -v WARN | sed "s/\(.*\)/create view ${SHADOW}_institutions.\1 as select * from ${2}_institutions.\1;/" > foo -hive -f foo -echo "Shadow db monitor insitutions ready!" - -#update Monitor DB -cat updateMonitorDBAll.sql | sed "s/SOURCE/$1/g" | sed "s/TARGET/$2/g1" > foo -hive $HIVE_OPTS -f foo - -echo "Hive shell finished" - -echo "Updating shadow monitor database" -hive -e "drop database if exists ${SHADOW} cascade" -hive -e "create database if not exists ${SHADOW}" -hive $HIVE_OPTS --database ${2} -e "show tables" | grep -v WARN | sed "s/\(.*\)/create view ${SHADOW}.\1 as select * from ${2}.\1;/" > foo -hive -f foo -echo "Shadow db monitor insitutions ready!" diff --git a/dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/scripts/updateMonitorDB.sql b/dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/scripts/updateMonitorDB.sql deleted file mode 100644 index 248b7e564..000000000 --- a/dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/scripts/updateMonitorDB.sql +++ /dev/null @@ -1,138 +0,0 @@ -INSERT INTO TARGET.result select * from TARGET.result_new; -ANALYZE TABLE TARGET.result COMPUTE STATISTICS; - -INSERT INTO TARGET.result_citations select * from SOURCE.result_citations orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.result_citations COMPUTE STATISTICS; - -INSERT INTO TARGET.result_references_oc select * from SOURCE.result_references_oc orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.result_references_oc COMPUTE STATISTICS; - -INSERT INTO TARGET.result_classifications select * from SOURCE.result_classifications orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.result_classifications COMPUTE STATISTICS; - -INSERT INTO TARGET.result_apc select * from SOURCE.result_apc orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.result_apc COMPUTE STATISTICS; - -INSERT INTO TARGET.result_concepts select * from SOURCE.result_concepts orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.result_concepts COMPUTE STATISTICS; - -INSERT INTO TARGET.result_datasources select * from SOURCE.result_datasources orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.result_datasources COMPUTE STATISTICS; - -INSERT INTO TARGET.result_fundercount select * from SOURCE.result_fundercount orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.result_fundercount COMPUTE STATISTICS; - -INSERT INTO TARGET.result_gold select * from SOURCE.result_gold orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.result_gold COMPUTE STATISTICS; - -INSERT INTO TARGET.result_greenoa select * from SOURCE.result_greenoa orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.result_greenoa COMPUTE STATISTICS; - -INSERT INTO TARGET.result_languages select * from SOURCE.result_languages orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.result_languages COMPUTE STATISTICS; - -INSERT INTO TARGET.result_licenses select * from SOURCE.result_licenses orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.result_licenses COMPUTE STATISTICS; - -INSERT INTO TARGET.result_oids select * from SOURCE.result_oids orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.result_oids COMPUTE STATISTICS; - -INSERT INTO TARGET.result_organization select * from SOURCE.result_organization orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.result_organization COMPUTE STATISTICS; - -INSERT INTO TARGET.result_peerreviewed select * from SOURCE.result_peerreviewed orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.result_peerreviewed COMPUTE STATISTICS; - -INSERT INTO TARGET.result_pids select * from SOURCE.result_pids orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.result_pids COMPUTE STATISTICS; - -INSERT INTO TARGET.result_projectcount select * from SOURCE.result_projectcount orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.result_projectcount COMPUTE STATISTICS; - -INSERT INTO TARGET.result_projects select * from SOURCE.result_projects orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.result_projects COMPUTE STATISTICS; - -INSERT INTO TARGET.result_refereed select * from SOURCE.result_refereed orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.result_refereed COMPUTE STATISTICS; - -INSERT INTO TARGET.result_sources select * from SOURCE.result_sources orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.result_sources COMPUTE STATISTICS; - -INSERT INTO TARGET.result_topics select * from SOURCE.result_topics orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.result_topics COMPUTE STATISTICS; - -INSERT INTO TARGET.result_fos select * from SOURCE.result_fos orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.result_fos COMPUTE STATISTICS; - -INSERT INTO TARGET.result_accessroute select * from SOURCE.result_accessroute orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.result_accessroute COMPUTE STATISTICS; - -create or replace view TARGET.foo1 as select * from SOURCE.result_result rr where rr.source in (select id from TARGET.result_new); -create or replace view TARGET.foo2 as select * from SOURCE.result_result rr where rr.target in (select id from TARGET.result_new); -insert into TARGET.result_result select distinct * from (select * from TARGET.foo1 union all select * from TARGET.foo2) foufou; -drop view TARGET.foo1; -drop view TARGET.foo2; -ANALYZE TABLE TARGET.result_result COMPUTE STATISTICS; - - --- indicators --- Sprint 1 ---- -INSERT INTO TARGET.indi_pub_green_oa select * from SOURCE.indi_pub_green_oa orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_pub_green_oa COMPUTE STATISTICS; -INSERT INTO TARGET.indi_pub_grey_lit select * from SOURCE.indi_pub_grey_lit orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_pub_grey_lit COMPUTE STATISTICS; -INSERT INTO TARGET.indi_pub_doi_from_crossref select * from SOURCE.indi_pub_doi_from_crossref orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_pub_doi_from_crossref COMPUTE STATISTICS; --- Sprint 2 ---- -INSERT INTO TARGET.indi_result_has_cc_licence select * from SOURCE.indi_result_has_cc_licence orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_result_has_cc_licence COMPUTE STATISTICS; -INSERT INTO TARGET.indi_result_has_cc_licence_url select * from SOURCE.indi_result_has_cc_licence_url orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_result_has_cc_licence_url COMPUTE STATISTICS; -INSERT INTO TARGET.indi_pub_has_abstract select * from SOURCE.indi_pub_has_abstract orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_pub_has_abstract COMPUTE STATISTICS; -INSERT INTO TARGET.indi_result_with_orcid select * from SOURCE.indi_result_with_orcid orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_result_with_orcid COMPUTE STATISTICS; ----- Sprint 3 ---- -INSERT INTO TARGET.indi_funded_result_with_fundref select * from SOURCE.indi_funded_result_with_fundref orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_funded_result_with_fundref COMPUTE STATISTICS; - ----- Sprint 4 ---- -INSERT INTO TARGET.indi_pub_diamond select * from SOURCE.indi_pub_diamond orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_pub_diamond COMPUTE STATISTICS; -INSERT INTO TARGET.indi_pub_in_transformative select * from SOURCE.indi_pub_in_transformative orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_pub_in_transformative COMPUTE STATISTICS; -INSERT INTO TARGET.indi_pub_closed_other_open select * from SOURCE.indi_pub_closed_other_open orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_pub_closed_other_open COMPUTE STATISTICS; ----- Sprint 5 ---- -INSERT INTO TARGET.indi_result_no_of_copies select * from SOURCE.indi_result_no_of_copies orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_result_no_of_copies COMPUTE STATISTICS; ----- Sprint 6 ---- -INSERT INTO TARGET.indi_pub_hybrid_oa_with_cc select * from SOURCE.indi_pub_hybrid_oa_with_cc orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_pub_hybrid_oa_with_cc COMPUTE STATISTICS; -INSERT INTO TARGET.indi_pub_bronze_oa select * from SOURCE.indi_pub_bronze_oa orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_pub_bronze_oa COMPUTE STATISTICS; -INSERT INTO TARGET.indi_pub_downloads select * from SOURCE.indi_pub_downloads orig where exists (select 1 from TARGET.result_new r where r.id=orig.result_id); -ANALYZE TABLE TARGET.indi_pub_downloads COMPUTE STATISTICS; -INSERT INTO TARGET.indi_pub_downloads_datasource select * from SOURCE.indi_pub_downloads_datasource orig where exists (select 1 from TARGET.result_new r where r.id=orig.result_id); -ANALYZE TABLE TARGET.indi_pub_downloads_datasource COMPUTE STATISTICS; -INSERT INTO TARGET.indi_pub_downloads_year select * from SOURCE.indi_pub_downloads_year orig where exists (select 1 from TARGET.result_new r where r.id=orig.result_id); -ANALYZE TABLE TARGET.indi_pub_downloads_year COMPUTE STATISTICS; -INSERT INTO TARGET.indi_pub_downloads_datasource_year select * from SOURCE.indi_pub_downloads_datasource_year orig where exists (select 1 from TARGET.result_new r where r.id=orig.result_id); -ANALYZE TABLE TARGET.indi_pub_downloads_datasource_year COMPUTE STATISTICS; ----- Sprint 7 ---- -INSERT INTO TARGET.indi_pub_gold_oa select * from SOURCE.indi_pub_gold_oa orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_pub_gold_oa COMPUTE STATISTICS; -INSERT INTO TARGET.indi_pub_hybrid select * from SOURCE.indi_pub_hybrid orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_pub_hybrid COMPUTE STATISTICS; -INSERT INTO TARGET.indi_pub_has_preprint select * from SOURCE.indi_pub_has_preprint orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_pub_has_preprint COMPUTE STATISTICS; -INSERT INTO TARGET.indi_pub_in_subscribed select * from SOURCE.indi_pub_in_subscribed orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_pub_in_subscribed COMPUTE STATISTICS; -INSERT INTO TARGET.indi_result_with_pid select * from SOURCE.indi_result_with_pid orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_result_with_pid COMPUTE STATISTICS; -INSERT INTO TARGET.indi_impact_measures select * from SOURCE.indi_impact_measures orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_impact_measures COMPUTE STATISTICS; -INSERT INTO TARGET.indi_pub_interdisciplinarity select * from SOURCE.indi_pub_interdisciplinarity orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_pub_interdisciplinarity COMPUTE STATISTICS; - -DROP TABLE IF EXISTS TARGET.result_new; \ No newline at end of file diff --git a/dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/scripts/updateMonitorDBAll.sql b/dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/scripts/updateMonitorDBAll.sql deleted file mode 100644 index 478e3824e..000000000 --- a/dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/scripts/updateMonitorDBAll.sql +++ /dev/null @@ -1,150 +0,0 @@ -DROP TABLE IF EXISTS TARGET.result_new; - -create table TARGET.result_new as - select distinct * from ( - select * from SOURCE.result r where exists (select 1 from SOURCE.result_organization ro where ro.id=r.id and ro.organization in ( - 'openorgs____::4d4051b56708688235252f1d8fddb8c1', --Iscte - Instituto Universitário de Lisboa - 'openorgs____::ab4ac74c35fa5dada770cf08e5110fab' -- Universidade Católica Portuguesa - ) )) foo; - -INSERT INTO TARGET.result select * from TARGET.result_new; -ANALYZE TABLE TARGET.result_new COMPUTE STATISTICS; - -INSERT INTO TARGET.result select * from TARGET.result_new; -ANALYZE TABLE TARGET.result COMPUTE STATISTICS; - -INSERT INTO TARGET.result_citations select * from SOURCE.result_citations orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.result_citations COMPUTE STATISTICS; - -INSERT INTO TARGET.result_references_oc select * from SOURCE.result_references_oc orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.result_references_oc COMPUTE STATISTICS; - -INSERT INTO TARGET.result_classifications select * from SOURCE.result_classifications orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.result_classifications COMPUTE STATISTICS; - -INSERT INTO TARGET.result_apc select * from SOURCE.result_apc orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.result_apc COMPUTE STATISTICS; - -INSERT INTO TARGET.result_concepts select * from SOURCE.result_concepts orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.result_concepts COMPUTE STATISTICS; - -INSERT INTO TARGET.result_datasources select * from SOURCE.result_datasources orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.result_datasources COMPUTE STATISTICS; - -INSERT INTO TARGET.result_fundercount select * from SOURCE.result_fundercount orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.result_fundercount COMPUTE STATISTICS; - -INSERT INTO TARGET.result_gold select * from SOURCE.result_gold orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.result_gold COMPUTE STATISTICS; - -INSERT INTO TARGET.result_greenoa select * from SOURCE.result_greenoa orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.result_greenoa COMPUTE STATISTICS; - -INSERT INTO TARGET.result_languages select * from SOURCE.result_languages orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.result_languages COMPUTE STATISTICS; - -INSERT INTO TARGET.result_licenses select * from SOURCE.result_licenses orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.result_licenses COMPUTE STATISTICS; - -INSERT INTO TARGET.result_oids select * from SOURCE.result_oids orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.result_oids COMPUTE STATISTICS; - -INSERT INTO TARGET.result_organization select * from SOURCE.result_organization orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.result_organization COMPUTE STATISTICS; - -INSERT INTO TARGET.result_peerreviewed select * from SOURCE.result_peerreviewed orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.result_peerreviewed COMPUTE STATISTICS; - -INSERT INTO TARGET.result_pids select * from SOURCE.result_pids orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.result_pids COMPUTE STATISTICS; - -INSERT INTO TARGET.result_projectcount select * from SOURCE.result_projectcount orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.result_projectcount COMPUTE STATISTICS; - -INSERT INTO TARGET.result_projects select * from SOURCE.result_projects orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.result_projects COMPUTE STATISTICS; - -INSERT INTO TARGET.result_refereed select * from SOURCE.result_refereed orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.result_refereed COMPUTE STATISTICS; - -INSERT INTO TARGET.result_sources select * from SOURCE.result_sources orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.result_sources COMPUTE STATISTICS; - -INSERT INTO TARGET.result_topics select * from SOURCE.result_topics orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.result_topics COMPUTE STATISTICS; - -INSERT INTO TARGET.result_fos select * from SOURCE.result_fos orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.result_fos COMPUTE STATISTICS; - -INSERT INTO TARGET.result_accessroute select * from SOURCE.result_accessroute orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.result_accessroute COMPUTE STATISTICS; - -create or replace view TARGET.foo1 as select * from SOURCE.result_result rr where rr.source in (select id from TARGET.result_new); -create or replace view TARGET.foo2 as select * from SOURCE.result_result rr where rr.target in (select id from TARGET.result_new); -insert into TARGET.result_result select distinct * from (select * from TARGET.foo1 union all select * from TARGET.foo2) foufou; -drop view TARGET.foo1; -drop view TARGET.foo2; -ANALYZE TABLE TARGET.result_result COMPUTE STATISTICS; - - --- indicators --- Sprint 1 ---- -INSERT INTO TARGET.indi_pub_green_oa select * from SOURCE.indi_pub_green_oa orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_pub_green_oa COMPUTE STATISTICS; -INSERT INTO TARGET.indi_pub_grey_lit select * from SOURCE.indi_pub_grey_lit orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_pub_grey_lit COMPUTE STATISTICS; -INSERT INTO TARGET.indi_pub_doi_from_crossref select * from SOURCE.indi_pub_doi_from_crossref orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_pub_doi_from_crossref COMPUTE STATISTICS; --- Sprint 2 ---- -INSERT INTO TARGET.indi_result_has_cc_licence select * from SOURCE.indi_result_has_cc_licence orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_result_has_cc_licence COMPUTE STATISTICS; -INSERT INTO TARGET.indi_result_has_cc_licence_url select * from SOURCE.indi_result_has_cc_licence_url orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_result_has_cc_licence_url COMPUTE STATISTICS; -INSERT INTO TARGET.indi_pub_has_abstract select * from SOURCE.indi_pub_has_abstract orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_pub_has_abstract COMPUTE STATISTICS; -INSERT INTO TARGET.indi_result_with_orcid select * from SOURCE.indi_result_with_orcid orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_result_with_orcid COMPUTE STATISTICS; ----- Sprint 3 ---- -INSERT INTO TARGET.indi_funded_result_with_fundref select * from SOURCE.indi_funded_result_with_fundref orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_funded_result_with_fundref COMPUTE STATISTICS; - ----- Sprint 4 ---- -INSERT INTO TARGET.indi_pub_diamond select * from SOURCE.indi_pub_diamond orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_pub_diamond COMPUTE STATISTICS; -INSERT INTO TARGET.indi_pub_in_transformative select * from SOURCE.indi_pub_in_transformative orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_pub_in_transformative COMPUTE STATISTICS; -INSERT INTO TARGET.indi_pub_closed_other_open select * from SOURCE.indi_pub_closed_other_open orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_pub_closed_other_open COMPUTE STATISTICS; ----- Sprint 5 ---- -INSERT INTO TARGET.indi_result_no_of_copies select * from SOURCE.indi_result_no_of_copies orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_result_no_of_copies COMPUTE STATISTICS; ----- Sprint 6 ---- -INSERT INTO TARGET.indi_pub_hybrid_oa_with_cc select * from SOURCE.indi_pub_hybrid_oa_with_cc orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_pub_hybrid_oa_with_cc COMPUTE STATISTICS; -INSERT INTO TARGET.indi_pub_bronze_oa select * from SOURCE.indi_pub_bronze_oa orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_pub_bronze_oa COMPUTE STATISTICS; -INSERT INTO TARGET.indi_pub_downloads select * from SOURCE.indi_pub_downloads orig where exists (select 1 from TARGET.result_new r where r.id=orig.result_id); -ANALYZE TABLE TARGET.indi_pub_downloads COMPUTE STATISTICS; -INSERT INTO TARGET.indi_pub_downloads_datasource select * from SOURCE.indi_pub_downloads_datasource orig where exists (select 1 from TARGET.result_new r where r.id=orig.result_id); -ANALYZE TABLE TARGET.indi_pub_downloads_datasource COMPUTE STATISTICS; -INSERT INTO TARGET.indi_pub_downloads_year select * from SOURCE.indi_pub_downloads_year orig where exists (select 1 from TARGET.result_new r where r.id=orig.result_id); -ANALYZE TABLE TARGET.indi_pub_downloads_year COMPUTE STATISTICS; -INSERT INTO TARGET.indi_pub_downloads_datasource_year select * from SOURCE.indi_pub_downloads_datasource_year orig where exists (select 1 from TARGET.result_new r where r.id=orig.result_id); -ANALYZE TABLE TARGET.indi_pub_downloads_datasource_year COMPUTE STATISTICS; ----- Sprint 7 ---- -INSERT INTO TARGET.indi_pub_gold_oa select * from SOURCE.indi_pub_gold_oa orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_pub_gold_oa COMPUTE STATISTICS; -INSERT INTO TARGET.indi_pub_hybrid select * from SOURCE.indi_pub_hybrid orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_pub_hybrid COMPUTE STATISTICS; -INSERT INTO TARGET.indi_pub_has_preprint select * from SOURCE.indi_pub_has_preprint orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_pub_has_preprint COMPUTE STATISTICS; -INSERT INTO TARGET.indi_pub_in_subscribed select * from SOURCE.indi_pub_in_subscribed orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_pub_in_subscribed COMPUTE STATISTICS; -INSERT INTO TARGET.indi_result_with_pid select * from SOURCE.indi_result_with_pid orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_result_with_pid COMPUTE STATISTICS; -INSERT INTO TARGET.indi_impact_measures select * from SOURCE.indi_impact_measures orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_impact_measures COMPUTE STATISTICS; -INSERT INTO TARGET.indi_pub_interdisciplinarity select * from SOURCE.indi_pub_interdisciplinarity orig where exists (select 1 from TARGET.result_new r where r.id=orig.id); -ANALYZE TABLE TARGET.indi_pub_interdisciplinarity COMPUTE STATISTICS; - -DROP TABLE IF EXISTS TARGET.result_new; diff --git a/dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/scripts/updateMonitorDB_institutions.sql b/dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/scripts/updateMonitorDB_institutions.sql deleted file mode 100644 index 236f3733f..000000000 --- a/dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/scripts/updateMonitorDB_institutions.sql +++ /dev/null @@ -1,12 +0,0 @@ -DROP TABLE IF EXISTS TARGET.result_new; - -create table TARGET.result_new as - select distinct * from ( - select * from SOURCE.result r where exists (select 1 from SOURCE.result_organization ro where ro.id=r.id and ro.organization in ( - 'openorgs____::4d4051b56708688235252f1d8fddb8c1', --Iscte - Instituto Universitário de Lisboa - 'openorgs____::ab4ac74c35fa5dada770cf08e5110fab' -- Universidade Católica Portuguesa - ) )) foo; - -INSERT INTO TARGET.result select * from TARGET.result_new; -ANALYZE TABLE TARGET.result_new COMPUTE STATISTICS; - diff --git a/dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/workflow.xml b/dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/workflow.xml deleted file mode 100644 index 7b999a843..000000000 --- a/dhp-workflows/dhp-stats-monitor-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats-monitor/oozie_app/workflow.xml +++ /dev/null @@ -1,110 +0,0 @@ - - - - stats_db_name - the target stats database name - - - monitor_db_name - the target monitor db name - - - monitor_db_shadow_name - the name of the shadow monitor db - - - hive_metastore_uris - hive server metastore URIs - - - hive_jdbc_url - hive server jdbc url - - - hive_timeout - the time period, in seconds, after which Hive fails a transaction if a Hive client has not sent a hearbeat. The default value is 300 seconds. - - - hadoop_user_name - user name of the wf owner - - - - - ${jobTracker} - ${nameNode} - - - hive.metastore.uris - ${hive_metastore_uris} - - - hive.txn.timeout - ${hive_timeout} - - - mapred.job.queue.name - analytics - - - - - - - - ${wf:conf('resumeFrom') eq 'Step1-updateMonitorDB'} - ${wf:conf('resumeFrom') eq 'Step2-copyDataToImpalaCluster'} - ${wf:conf('resumeFrom') eq 'Step3-finalizeImpalaCluster'} - - - - - - Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] - - - - - ${jobTracker} - ${nameNode} - monitor.sh - ${stats_db_name} - ${monitor_db_name} - ${monitor_db_shadow_name} - ${wf:appPath()}/scripts/updateMonitorDB_institutions.sql - ${wf:appPath()}/scripts/updateMonitorDB.sql - ${wf:appPath()}/scripts/updateMonitorDBAll.sql - monitor.sh - - - - - - - - ${jobTracker} - ${nameNode} - copyDataToImpalaCluster.sh - ${monitor_db_name} - ${hadoop_user_name} - copyDataToImpalaCluster.sh - - - - - - - - ${jobTracker} - ${nameNode} - finalizeImpalaCluster.sh - ${monitor_db_name} - ${monitor_db_shadow_name} - finalizeImpalaCluster.sh - - - - - - - From a431b04814dc55c56ab2bde7d2a2663b7fc0950a Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Tue, 10 Oct 2023 12:53:57 +0200 Subject: [PATCH 319/449] leftover for the properties and removal of bipfinder --- .../PrepareBipFinder.java | 178 ------------------ .../oozie_app/workflow.xml | 31 +-- .../createunresolvedentities/PrepareTest.java | 139 -------------- .../createunresolvedentities/ProduceTest.java | 30 --- 4 files changed, 1 insertion(+), 377 deletions(-) delete mode 100644 dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/PrepareBipFinder.java diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/PrepareBipFinder.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/PrepareBipFinder.java deleted file mode 100644 index 0507f90e5..000000000 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/PrepareBipFinder.java +++ /dev/null @@ -1,178 +0,0 @@ - -package eu.dnetlib.dhp.actionmanager.createunresolvedentities; - -import static eu.dnetlib.dhp.actionmanager.Constants.*; -import static eu.dnetlib.dhp.actionmanager.Constants.UPDATE_CLASS_NAME; -import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkSession; - -import java.io.Serializable; -import java.util.Arrays; -import java.util.List; -import java.util.Optional; -import java.util.stream.Collectors; - -import org.apache.commons.io.IOUtils; -import org.apache.spark.SparkConf; -import org.apache.spark.api.java.JavaRDD; -import org.apache.spark.api.java.JavaSparkContext; -import org.apache.spark.api.java.function.MapFunction; -import org.apache.spark.sql.Encoders; -import org.apache.spark.sql.SaveMode; -import org.apache.spark.sql.SparkSession; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.fasterxml.jackson.databind.ObjectMapper; - -import eu.dnetlib.dhp.actionmanager.bipmodel.BipScore; -import eu.dnetlib.dhp.actionmanager.bipmodel.score.deserializers.BipResultModel; -import eu.dnetlib.dhp.application.ArgumentApplicationParser; -import eu.dnetlib.dhp.common.HdfsSupport; -import eu.dnetlib.dhp.schema.common.ModelConstants; -import eu.dnetlib.dhp.schema.oaf.Instance; -import eu.dnetlib.dhp.schema.oaf.KeyValue; -import eu.dnetlib.dhp.schema.oaf.Measure; -import eu.dnetlib.dhp.schema.oaf.Result; -import eu.dnetlib.dhp.schema.oaf.utils.CleaningFunctions; -import eu.dnetlib.dhp.schema.oaf.utils.OafMapperUtils; -import eu.dnetlib.dhp.utils.DHPUtils; - -public class PrepareBipFinder implements Serializable { - - private static final Logger log = LoggerFactory.getLogger(PrepareBipFinder.class); - private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); - - public static void main(String[] args) throws Exception { - - String jsonConfiguration = IOUtils - .toString( - PrepareBipFinder.class - .getResourceAsStream( - "/eu/dnetlib/dhp/actionmanager/createunresolvedentities/prepare_parameters.json")); - - final ArgumentApplicationParser parser = new ArgumentApplicationParser(jsonConfiguration); - - parser.parseArgument(args); - - Boolean isSparkSessionManaged = Optional - .ofNullable(parser.get("isSparkSessionManaged")) - .map(Boolean::valueOf) - .orElse(Boolean.TRUE); - - log.info("isSparkSessionManaged: {}", isSparkSessionManaged); - - final String sourcePath = parser.get("sourcePath"); - log.info("sourcePath {}: ", sourcePath); - - final String outputPath = parser.get("outputPath"); - log.info("outputPath {}: ", outputPath); - - SparkConf conf = new SparkConf(); - - runWithSparkSession( - conf, - isSparkSessionManaged, - spark -> { - HdfsSupport.remove(outputPath, spark.sparkContext().hadoopConfiguration()); - prepareResults(spark, sourcePath, outputPath); - }); - } - - private static void prepareResults(SparkSession spark, String inputPath, String outputPath) { - - final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); - - JavaRDD bipDeserializeJavaRDD = sc - .textFile(inputPath) - .map(item -> OBJECT_MAPPER.readValue(item, BipResultModel.class)); - - spark - .createDataset(bipDeserializeJavaRDD.flatMap(entry -> entry.keySet().stream().map(key -> { - BipScore bs = new BipScore(); - bs.setId(key); - bs.setScoreList(entry.get(key)); - - return bs; - }).collect(Collectors.toList()).iterator()).rdd(), Encoders.bean(BipScore.class)) - .map((MapFunction) v -> { - Result r = new Result(); - final String cleanedPid = CleaningFunctions.normalizePidValue(DOI, v.getId()); - - r.setId(DHPUtils.generateUnresolvedIdentifier(v.getId(), DOI)); - Instance inst = new Instance(); - inst.setMeasures(getMeasure(v)); - - inst - .setPid( - Arrays - .asList( - OafMapperUtils - .structuredProperty( - cleanedPid, - OafMapperUtils - .qualifier( - DOI, DOI_CLASSNAME, - ModelConstants.DNET_PID_TYPES, - ModelConstants.DNET_PID_TYPES), - null))); - r.setInstance(Arrays.asList(inst)); - r - .setDataInfo( - OafMapperUtils - .dataInfo( - false, null, true, - false, - OafMapperUtils - .qualifier( - ModelConstants.PROVENANCE_ENRICH, - null, - ModelConstants.DNET_PROVENANCE_ACTIONS, - ModelConstants.DNET_PROVENANCE_ACTIONS), - null)); - return r; - }, Encoders.bean(Result.class)) - .write() - .mode(SaveMode.Overwrite) - .option("compression", "gzip") - .json(outputPath + "/bip"); - } - - private static List getMeasure(BipScore value) { - return value - .getScoreList() - .stream() - .map(score -> { - Measure m = new Measure(); - m.setId(score.getId()); - m - .setUnit( - score - .getUnit() - .stream() - .map(unit -> { - KeyValue kv = new KeyValue(); - kv.setValue(unit.getValue()); - kv.setKey(unit.getKey()); - kv - .setDataInfo( - OafMapperUtils - .dataInfo( - false, - UPDATE_DATA_INFO_TYPE, - true, - false, - OafMapperUtils - .qualifier( - UPDATE_MEASURE_BIP_CLASS_ID, - UPDATE_CLASS_NAME, - ModelConstants.DNET_PROVENANCE_ACTIONS, - ModelConstants.DNET_PROVENANCE_ACTIONS), - "")); - return kv; - }) - .collect(Collectors.toList())); - return m; - }) - .collect(Collectors.toList()); - } -} diff --git a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/createunresolvedentities/oozie_app/workflow.xml b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/createunresolvedentities/oozie_app/workflow.xml index a2935a71d..a5388f28b 100644 --- a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/createunresolvedentities/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/createunresolvedentities/oozie_app/workflow.xml @@ -5,11 +5,6 @@ fosPath the input path of the resources to be extended - - - - - outputPath the path where to store the actionset @@ -77,35 +72,10 @@ - - - - - - - - - - - - - - - - - - - - - - - - - yarn @@ -125,6 +95,7 @@ --sourcePath${fosPath} --outputPath${workingDir}/input/fos + --delimiter${delimiter} diff --git a/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/PrepareTest.java b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/PrepareTest.java index ccb0ebbff..da7bcd3de 100644 --- a/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/PrepareTest.java +++ b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/PrepareTest.java @@ -67,92 +67,6 @@ public class PrepareTest { spark.stop(); } - @Test - void bipPrepareTest() throws Exception { - final String sourcePath = getClass() - .getResource("/eu/dnetlib/dhp/actionmanager/createunresolvedentities/bip/bip.json") - .getPath(); - - PrepareBipFinder - .main( - new String[] { - "--isSparkSessionManaged", Boolean.FALSE.toString(), - "--sourcePath", sourcePath, - "--outputPath", workingDir.toString() + "/work" - - }); - - final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); - - JavaRDD tmp = sc - .textFile(workingDir.toString() + "/work/bip") - .map(item -> OBJECT_MAPPER.readValue(item, Result.class)); - - Assertions.assertEquals(86, tmp.count()); - - String doi1 = "unresolved::10.0000/096020199389707::doi"; - - Assertions.assertEquals(1, tmp.filter(r -> r.getId().equals(doi1)).count()); - Assertions.assertEquals(1, tmp.filter(r -> r.getId().equals(doi1)).collect().get(0).getInstance().size()); - Assertions - .assertEquals( - 3, tmp.filter(r -> r.getId().equals(doi1)).collect().get(0).getInstance().get(0).getMeasures().size()); - Assertions - .assertEquals( - "6.34596412687e-09", tmp - .filter(r -> r.getId().equals(doi1)) - .collect() - .get(0) - .getInstance() - .get(0) - .getMeasures() - .stream() - .filter(sl -> sl.getId().equals("influence")) - .collect(Collectors.toList()) - .get(0) - .getUnit() - .get(0) - .getValue()); - Assertions - .assertEquals( - "0.641151896994", tmp - .filter(r -> r.getId().equals(doi1)) - .collect() - .get(0) - .getInstance() - .get(0) - .getMeasures() - .stream() - .filter(sl -> sl.getId().equals("popularity_alt")) - .collect(Collectors.toList()) - .get(0) - .getUnit() - .get(0) - .getValue()); - Assertions - .assertEquals( - "2.33375102921e-09", tmp - .filter(r -> r.getId().equals(doi1)) - .collect() - .get(0) - .getInstance() - .get(0) - .getMeasures() - .stream() - .filter(sl -> sl.getId().equals("popularity")) - .collect(Collectors.toList()) - .get(0) - .getUnit() - .get(0) - .getValue()); - - final String doi2 = "unresolved::10.3390/s18072310::doi"; - - Assertions.assertEquals(1, tmp.filter(r -> r.getId().equals(doi2)).count()); - Assertions.assertEquals(1, tmp.filter(r -> r.getId().equals(doi2)).collect().get(0).getInstance().size()); - - } - @Test void fosPrepareTest() throws Exception { final String sourcePath = getClass() @@ -338,57 +252,4 @@ public class PrepareTest { } -// @Test -// void test3() throws Exception { -// final String sourcePath = "/Users/miriam.baglioni/Downloads/doi_fos_results_20_12_2021.csv.gz"; -// -// final String outputPath = workingDir.toString() + "/fos.json"; -// GetFOSSparkJob -// .main( -// new String[] { -// "--isSparkSessionManaged", Boolean.FALSE.toString(), -// "--sourcePath", sourcePath, -// -// "-outputPath", outputPath -// -// }); -// -// final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); -// -// JavaRDD tmp = sc -// .textFile(outputPath) -// .map(item -> OBJECT_MAPPER.readValue(item, FOSDataModel.class)); -// -// tmp.foreach(t -> Assertions.assertTrue(t.getDoi() != null)); -// tmp.foreach(t -> Assertions.assertTrue(t.getLevel1() != null)); -// tmp.foreach(t -> Assertions.assertTrue(t.getLevel2() != null)); -// tmp.foreach(t -> Assertions.assertTrue(t.getLevel3() != null)); -// -// } -// -// @Test -// void test4() throws Exception { -// final String sourcePath = "/Users/miriam.baglioni/Downloads/doi_sdg_results_20_12_21.csv.gz"; -// -// final String outputPath = workingDir.toString() + "/sdg.json"; -// GetSDGSparkJob -// .main( -// new String[] { -// "--isSparkSessionManaged", Boolean.FALSE.toString(), -// "--sourcePath", sourcePath, -// -// "-outputPath", outputPath -// -// }); -// -// final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); -// -// JavaRDD tmp = sc -// .textFile(outputPath) -// .map(item -> OBJECT_MAPPER.readValue(item, SDGDataModel.class)); -// -// tmp.foreach(t -> Assertions.assertTrue(t.getDoi() != null)); -// tmp.foreach(t -> Assertions.assertTrue(t.getSbj() != null)); -// -// } } diff --git a/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/ProduceTest.java b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/ProduceTest.java index fce6c1e97..ce116688a 100644 --- a/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/ProduceTest.java +++ b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/ProduceTest.java @@ -340,18 +340,7 @@ public class ProduceTest { } private JavaRDD getResultJavaRDD() throws Exception { - final String bipPath = getClass() - .getResource("/eu/dnetlib/dhp/actionmanager/createunresolvedentities/bip/bip.json") - .getPath(); - PrepareBipFinder - .main( - new String[] { - "--isSparkSessionManaged", Boolean.FALSE.toString(), - "--sourcePath", bipPath, - "--outputPath", workingDir.toString() + "/work" - - }); final String fosPath = getClass() .getResource("/eu/dnetlib/dhp/actionmanager/createunresolvedentities/fos/fos.json") .getPath(); @@ -449,18 +438,7 @@ public class ProduceTest { } private JavaRDD getResultJavaRDDPlusSDG() throws Exception { - final String bipPath = getClass() - .getResource("/eu/dnetlib/dhp/actionmanager/createunresolvedentities/bip/bip.json") - .getPath(); - PrepareBipFinder - .main( - new String[] { - "--isSparkSessionManaged", Boolean.FALSE.toString(), - "--sourcePath", bipPath, - "--outputPath", workingDir.toString() + "/work" - - }); final String fosPath = getClass() .getResource("/eu/dnetlib/dhp/actionmanager/createunresolvedentities/fos/fos.json") .getPath(); @@ -517,14 +495,6 @@ public class ProduceTest { .filter(row -> row.getSubject() != null) .count()); - Assertions - .assertEquals( - 85, - tmp - .filter(row -> !row.getId().equals(doi)) - .filter(r -> r.getInstance() != null && r.getInstance().size() > 0) - .count()); - } @Test From a460ebe215ebe1f535905d0d3121a84bcd087c2b Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Tue, 10 Oct 2023 15:50:11 +0200 Subject: [PATCH 320/449] [UnresolvedEntities] updated action name --- .../createunresolvedentities/oozie_app/workflow.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/createunresolvedentities/oozie_app/workflow.xml b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/createunresolvedentities/oozie_app/workflow.xml index a5388f28b..c8e9547dc 100644 --- a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/createunresolvedentities/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/createunresolvedentities/oozie_app/workflow.xml @@ -184,7 +184,7 @@ yarn cluster - Saves the result produced for bip and fos by grouping results with the same id + Save the unresolved entities grouping results with the same id eu.dnetlib.dhp.actionmanager.createunresolvedentities.SparkSaveUnresolved dhp-aggregation-${projectVersion}.jar From 554551682d0501fa7664fab0a9bee8be6b0309d3 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Wed, 11 Oct 2023 16:09:19 +0200 Subject: [PATCH 321/449] [raw graph] adopting the new COAR based vocabularies for the resource typing --- .../common/vocabulary/VocabularyGroup.java | 21 ++++++++++++ .../dhp/schema/oaf/utils/OafMapperUtils.java | 10 +++++- .../raw/AbstractMdRecordToOafMapper.java | 31 ++++++++++++++++++ .../dhp/oa/graph/raw/OafToOafMapper.java | 32 ++++++++++++++++--- .../dhp/oa/graph/raw/OdfToOafMapper.java | 27 ++++++++++++++++ .../oa/graph/raw/OriginalTypeComparator.java | 32 +++++++++++++++++++ .../dnetlib/dhp/oa/graph/raw/MappersTest.java | 21 ++++++++++++ .../dnetlib/dhp/oa/graph/clean/synonyms.txt | 7 +++- .../eu/dnetlib/dhp/oa/graph/clean/terms.txt | 4 ++- .../dnetlib/dhp/oa/graph/raw/oaf_record.xml | 4 ++- pom.xml | 2 +- 11 files changed, 182 insertions(+), 9 deletions(-) create mode 100644 dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/OriginalTypeComparator.java diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/common/vocabulary/VocabularyGroup.java b/dhp-common/src/main/java/eu/dnetlib/dhp/common/vocabulary/VocabularyGroup.java index fc7175270..4c1feac45 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/common/vocabulary/VocabularyGroup.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/common/vocabulary/VocabularyGroup.java @@ -135,6 +135,27 @@ public class VocabularyGroup implements Serializable { return vocs.get(vocId.toLowerCase()).getSynonymAsQualifier(syn); } + public Qualifier lookupTermBySynonym(final String vocId, final String syn) { + if (StringUtils.isBlank(vocId)) { + return OafMapperUtils.unknown("", ""); + } + + final Vocabulary vocabulary = vocs.get(vocId.toLowerCase()); + + return Optional + .ofNullable(vocabulary.getTerm(syn)) + .map( + term -> OafMapperUtils + .qualifier(term.getId(), term.getName(), vocabulary.getId(), vocabulary.getName())) + .orElse( + Optional + .ofNullable(vocabulary.getTermBySynonym(syn)) + .map( + term -> OafMapperUtils + .qualifier(term.getId(), term.getName(), vocabulary.getId(), vocabulary.getName())) + .orElse(null)); + } + /** * getSynonymAsQualifierCaseSensitive * diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/OafMapperUtils.java b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/OafMapperUtils.java index c58096d35..1c557c805 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/OafMapperUtils.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/OafMapperUtils.java @@ -14,7 +14,6 @@ import java.util.stream.Collectors; import org.apache.commons.lang3.StringUtils; import eu.dnetlib.dhp.schema.common.AccessRightComparator; -import eu.dnetlib.dhp.schema.common.ModelConstants; import eu.dnetlib.dhp.schema.common.ModelSupport; import eu.dnetlib.dhp.schema.oaf.*; @@ -141,6 +140,15 @@ public class OafMapperUtils { .collect(Collectors.toList()); } + public static InstanceTypeMapping instanceTypeMapping(String originalType, Qualifier term) { + final InstanceTypeMapping m = new InstanceTypeMapping(); + m.setVocabularyName(term.getSchemeid()); + m.setOriginalType(originalType); + m.setTypeCode(term.getClassid()); + m.setTypeLabel(term.getClassname()); + return m; + } + public static Qualifier unknown(final String schemeid, final String schemename) { return qualifier(UNKNOWN, "Unknown", schemeid, schemename); } diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/AbstractMdRecordToOafMapper.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/AbstractMdRecordToOafMapper.java index b37e6a755..2fed7d627 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/AbstractMdRecordToOafMapper.java +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/AbstractMdRecordToOafMapper.java @@ -41,6 +41,11 @@ public abstract class AbstractMdRecordToOafMapper { protected static final String DATACITE_SCHEMA_KERNEL_4_SLASH = "http://datacite.org/schema/kernel-4/"; protected static final String DATACITE_SCHEMA_KERNEL_3 = "http://datacite.org/schema/kernel-3"; protected static final String DATACITE_SCHEMA_KERNEL_3_SLASH = "http://datacite.org/schema/kernel-3/"; + + protected static final String OPENAIRE_COAR_RESOURCE_TYPES_3_1 = "openaire::coar_resource_types_3_1"; + + public static final String OPENAIRE_USER_RESOURCE_TYPES = "openaire::user_resource_types"; + protected static final Qualifier ORCID_PID_TYPE = qualifier( ModelConstants.ORCID_PENDING, ModelConstants.ORCID_CLASSNAME, @@ -516,6 +521,32 @@ public abstract class AbstractMdRecordToOafMapper { protected abstract Field prepareDatasetStorageDate(Document doc, DataInfo info); + protected abstract String findOriginalType(Document doc); + + protected List prepareInstanceTypeMapping(Document doc) { + return Optional.ofNullable(findOriginalType(doc)) + .map(originalType -> { + final List mappings = Lists.newArrayList(); + + if (vocs.vocabularyExists(OPENAIRE_COAR_RESOURCE_TYPES_3_1)) { + + // TODO verify what the vocabs return when a synonym is not defined + Qualifier coarTerm = vocs.lookupTermBySynonym(OPENAIRE_COAR_RESOURCE_TYPES_3_1, originalType); + mappings.add(OafMapperUtils.instanceTypeMapping(originalType, coarTerm)); + + if (vocs.vocabularyExists(OPENAIRE_USER_RESOURCE_TYPES)) { + + // TODO verify what the vocabs return when a synonym is not defined + Qualifier userTerm = vocs.lookupTermBySynonym(OPENAIRE_USER_RESOURCE_TYPES, coarTerm.getClassid()); + mappings.add(OafMapperUtils.instanceTypeMapping(originalType, userTerm)); + } + } + + return mappings; + }) + .orElse(new ArrayList<>()); + } + private Journal prepareJournal(final Document doc, final DataInfo info) { final Node n = doc.selectSingleNode("//oaf:journal"); if (n != null) { diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/OafToOafMapper.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/OafToOafMapper.java index a9f9367af..5cdb434f1 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/OafToOafMapper.java +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/OafToOafMapper.java @@ -5,12 +5,10 @@ import static eu.dnetlib.dhp.schema.common.ModelConstants.*; import static eu.dnetlib.dhp.schema.oaf.utils.OafMapperUtils.*; import java.net.URLDecoder; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; +import java.util.*; import java.util.stream.Collectors; +import eu.dnetlib.dhp.schema.oaf.utils.OafMapperUtils; import org.apache.commons.lang3.StringUtils; import org.dom4j.Document; import org.dom4j.Element; @@ -25,6 +23,8 @@ import eu.dnetlib.dhp.schema.oaf.utils.CleaningFunctions; import eu.dnetlib.dhp.schema.oaf.utils.IdentifierFactory; import eu.dnetlib.dhp.schema.oaf.utils.ModelHardLimits; +import static org.apache.commons.lang3.StringUtils.contains; + public class OafToOafMapper extends AbstractMdRecordToOafMapper { public OafToOafMapper(final VocabularyGroup vocs, final boolean invisible, final boolean shouldHashId, @@ -139,6 +139,8 @@ public class OafToOafMapper extends AbstractMdRecordToOafMapper { final List alternateIdentifier = prepareResultPids(doc, info); final List pid = IdentifierFactory.getPids(alternateIdentifier, collectedfrom); + instance.setInstanceTypeMapping(prepareInstanceTypeMapping(doc)); + final Set pids = new HashSet<>(pid); instance @@ -187,6 +189,28 @@ public class OafToOafMapper extends AbstractMdRecordToOafMapper { return Lists.newArrayList(instance); } + /** + * The Dublin Core element dc:type can be repeated, but we need to base our mapping on a single value + * So this method tries to give precedence to the COAR resource type, when available. Otherwise, it looks for the + * openaire's info:eu-repo type, and as last resort picks the 1st type text available + * + * http://purl.org/coar/resource_type/c_5794 + * info:eu-repo/semantics/article + * Conference article + * + * @param doc the input document + * @return the chosen resource type + */ + @Override + protected String findOriginalType(Document doc) { + return (String) doc.selectNodes("//dc:type") + .stream() + .map(o -> "" + ((Node) o).getText().trim()) + .sorted(new OriginalTypeComparator()) + .findFirst() + .orElse(null); + } + @Override protected List> prepareSources(final Document doc, final DataInfo info) { return prepareListFields(doc, "//dc:source", info); diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/OdfToOafMapper.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/OdfToOafMapper.java index bbd1e7ab1..c01775327 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/OdfToOafMapper.java +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/OdfToOafMapper.java @@ -9,6 +9,7 @@ import java.net.URLDecoder; import java.util.*; import java.util.stream.Collectors; +import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.dom4j.Document; import org.dom4j.Element; @@ -139,6 +140,8 @@ public class OdfToOafMapper extends AbstractMdRecordToOafMapper { final List alternateIdentifier = prepareResultPids(doc, info); final List pid = IdentifierFactory.getPids(alternateIdentifier, collectedfrom); + instance.setInstanceTypeMapping(prepareInstanceTypeMapping(doc)); + final Set pids = new HashSet<>(pid); instance @@ -217,6 +220,30 @@ public class OdfToOafMapper extends AbstractMdRecordToOafMapper { } } + @Override + protected List prepareInstanceTypeMapping(Document doc) { + return null; + } + + /** + * The Datacite element + * + * journal article + * + * @param doc the input document + * @return the chosen resource type + */ + @Override + protected String findOriginalType(Document doc) { + final Element resourceType = (Element) doc.selectSingleNode( + "//metadata/*[local-name() = 'resource']/*[local-name() = 'resourceType']"); + + final String resourceTypeURI = resourceType.attributeValue("anyURI"); + final String resourceTypeTxt = resourceType.getText(); + + return ObjectUtils.firstNonNull(resourceTypeURI, resourceTypeTxt); + } + @Override protected List> prepareSources(final Document doc, final DataInfo info) { return new ArrayList<>(); // Not present in ODF ??? diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/OriginalTypeComparator.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/OriginalTypeComparator.java new file mode 100644 index 000000000..2eeead32e --- /dev/null +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/OriginalTypeComparator.java @@ -0,0 +1,32 @@ +package eu.dnetlib.dhp.oa.graph.raw; + +import java.util.Comparator; + +import static org.apache.commons.lang3.StringUtils.contains; +import static org.apache.commons.lang3.StringUtils.startsWith; + +public class OriginalTypeComparator implements Comparator { + + @Override + public int compare(String t1, String t2) { + + if (t1.equals(t2)) { + return 0; + } + if (startsWith(t1, "http") && contains(t1, "coar") && contains(t1, "resource_type")) { + return -1; + } + if (startsWith(t2, "http") && contains(t2, "coar") && contains(t2, "resource_type")) { + return 1; + } + if (startsWith(t1, "info:eu-repo/semantics")) { + return -1; + } + if (startsWith(t2, "info:eu-repo/semantics")) { + return 1; + } + + return t1.compareTo(t2); + } + +} diff --git a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/raw/MappersTest.java b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/raw/MappersTest.java index b506d3a62..5df2b7a3b 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/raw/MappersTest.java +++ b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/raw/MappersTest.java @@ -116,6 +116,27 @@ class MappersTest { assertNotNull(instance.getPid()); assertTrue(instance.getPid().isEmpty()); + assertNotNull(instance.getInstanceTypeMapping()); + assertEquals(2, instance.getInstanceTypeMapping().size()); + + Optional coarType = instance.getInstanceTypeMapping() + .stream() + .filter(itm -> AbstractMdRecordToOafMapper.OPENAIRE_COAR_RESOURCE_TYPES_3_1.equals(itm.getVocabularyName())) + .findFirst(); + + assertTrue(coarType.isPresent()); + assertEquals("http://purl.org/coar/resource_type/c_5794", coarType.get().getTypeCode()); + assertEquals("conference paper", coarType.get().getTypeLabel()); + + Optional userType = instance.getInstanceTypeMapping() + .stream() + .filter(itm -> AbstractMdRecordToOafMapper.OPENAIRE_USER_RESOURCE_TYPES.equals(itm.getVocabularyName())) + .findFirst(); + + assertTrue(userType.isPresent()); + assertEquals("Article", userType.get().getTypeCode()); + assertEquals("Article", userType.get().getTypeLabel()); + assertFalse(instance.getAlternateIdentifier().isEmpty()); assertEquals("doi", instance.getAlternateIdentifier().get(0).getQualifier().getClassid()); assertEquals("10.3897/oneeco.2.e13718", instance.getAlternateIdentifier().get(0).getValue()); diff --git a/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/synonyms.txt b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/synonyms.txt index 409dfd5dc..b3fa94b20 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/synonyms.txt +++ b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/synonyms.txt @@ -1245,4 +1245,9 @@ dnet:relation_relClass @=@ IsRelatedTo @=@ isRelatedTo dnet:relation_subRelType @=@ relationship @=@ publicationDataset dnet:provenanceActions @=@ iis @=@ erroneous label to be cleaned FOS @=@ 0101 mathematics @=@ FOS: Mathematics -FOS @=@ 0102 computer and information sciences @=@ FOS: Computer and information sciences \ No newline at end of file +FOS @=@ 0102 computer and information sciences @=@ FOS: Computer and information sciences +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_5794 @=@ Proceedings paper +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_5794 @=@ Conference article +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_5794 @=@ http://purl.org/eprint/type/ConferencePaper +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_5794 @=@ Conference article +openaire::user_resource_types @=@ Article @=@ http://purl.org/coar/resource_type/c_5794 \ No newline at end of file diff --git a/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/terms.txt b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/terms.txt index 24ce42fc2..a38c0e987 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/terms.txt +++ b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/terms.txt @@ -1121,4 +1121,6 @@ dnet:relation_subRelType @=@ dnet:relation_subRelType @=@ supplement @=@ supplem dnet:relation_subRelType @=@ dnet:relation_subRelType @=@ version @=@ version FOS @=@ Fields of Science and Technology classification @=@ 0101 mathematics @=@ 0101 mathematics FOS @=@ Fields of Science and Technology classification @=@ 0102 computer and information sciences @=@ 0102 computer and information sciences -FOS @=@ Fields of Science and Technology classification @=@ 0103 physical sciences @=@ 0103 physical sciences \ No newline at end of file +FOS @=@ Fields of Science and Technology classification @=@ 0103 physical sciences @=@ 0103 physical sciences +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_5794 @=@ conference paper +openaire::user_resource_types @=@ openaire::user_resource_types @=@ Article @=@ Article \ No newline at end of file diff --git a/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/raw/oaf_record.xml b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/raw/oaf_record.xml index 277578185..492fc9a7a 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/raw/oaf_record.xml +++ b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/raw/oaf_record.xml @@ -47,7 +47,9 @@ provisioning services regulating services supporting services - Research Article + conference paper + http://purl.org/coar/resource_type/c_5794 + info:eu-repo/semantics/article 0001 2017-01-01 diff --git a/pom.xml b/pom.xml index 9cd82a343..0f1ec78af 100644 --- a/pom.xml +++ b/pom.xml @@ -888,7 +888,7 @@ 3.3.3 3.4.2 [2.12,3.0) - [3.17.1] + [4.17.2-SNAPSHOT] [4.0.3] [6.0.5] [3.1.6] From 89184d5b4f1af674af33fff2a46961804b8da751 Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Wed, 11 Oct 2023 18:17:35 +0200 Subject: [PATCH 322/449] used the API instead of the IS for bulktagging and propagation for community through organization. Added a new propagation step for communities through projects. Still using the API and not the IS --- .../eu/dnetlib/dhp/PropagationConstant.java | 3 + .../eu/dnetlib/dhp/api/QueryCommunityAPI.java | 38 ++-- .../main/java/eu/dnetlib/dhp/api/Utils.java | 64 +++--- .../dnetlib/dhp/bulktag/SparkBulkTagJob.java | 70 ++++--- .../dhp/bulktag/community/ResultTagger.java | 28 +-- .../PrepareResultCommunitySet.java | 9 +- ...kResultToCommunityFromOrganizationJob.java | 12 +- .../PrepareResultCommunitySet.java | 121 ++++++++++++ .../ResultProjectList.java | 26 +++ .../SparkResultToCommunityFromProject.java | 156 +++++++++++++++ .../dhp/bulktag/input_bulkTag_parameters.json | 28 +-- .../dhp/bulktag/oozie_app/workflow.xml | 108 +--------- .../resources/eu/dnetlib/dhp/bulktag/query.xq | 62 ------ .../input_communitytoresult_parameters.json | 12 -- .../oozie_app/workflow.xml | 7 +- .../dnetlib/dhp/bulktag/BulkTagJobTest.java | 187 +++++++++--------- .../dhp/bulktag/QueryCommunityAPITest.java | 19 +- .../ResultToCommunityJobTest.java | 2 +- .../eosc/dataset/{dataset_10.json => dataset} | 0 .../bulktag/eosc/dataset/otherresearchproduct | 0 .../dhp/bulktag/eosc/dataset/publication | 0 .../dnetlib/dhp/bulktag/eosc/dataset/software | 0 .../bulktag/sample/dataset/no_updates/dataset | 10 + .../dataset/no_updates/dataset_10.json.gz | Bin 6736 -> 0 bytes .../sample/dataset/no_updates/datasource | 0 .../dataset/no_updates/otherresearchproduct | 0 .../sample/dataset/no_updates/publication | 0 .../sample/dataset/no_updates/software | 0 .../{dataset_10.json => dataset} | 0 .../datasource | 0 .../otherresearchproduct | 10 + .../publication | 0 .../update_datasourcewithconstraints/software | 0 .../contextnoprovenance/dataset | 10 + .../contextnoprovenance/dataset_10.json.gz | Bin 6888 -> 0 bytes .../contextnoprovenance/datasource | 0 .../contextnoprovenance/otherresearchproduct | 0 .../contextnoprovenance/publication | 0 .../contextnoprovenance/software | 0 .../dataset/update_subject/nocontext/dataset | 10 + .../nocontext/dataset_10.json.gz | Bin 6755 -> 0 bytes .../update_subject/nocontext/datasource | 0 .../nocontext/otherresearchproduct | 0 .../update_subject/nocontext/publication | 0 .../dataset/update_subject/nocontext/software | 0 .../{dataset_10.json => dataset} | 6 +- .../update_subject_datasource/datasource | 0 .../otherresearchproduct | 0 .../update_subject_datasource/publication | 0 .../update_subject_datasource/software | 0 .../update_zenodocommunity/dataset | 0 .../update_zenodocommunity/datasource | 0 .../otherresearchproduct | 10 + .../otherresearchproduct_10.json.gz | Bin 8300 -> 0 bytes .../update_zenodocommunity/publication | 0 .../update_zenodocommunity/software | 0 .../publication/update_datasource/dataset | 0 .../publication/update_datasource/datasource | 0 .../update_datasource/otherresearchproduct | 0 .../publication/update_datasource/publication | 10 + .../update_datasource/publication_10.json.gz | Bin 5257 -> 0 bytes .../publication/update_datasource/software | 0 .../dhp/bulktag/sample/software/dataset | 0 .../sample/software/otherresearchproduct | 0 .../dhp/bulktag/sample/software/publication | 0 .../dhp/bulktag/sample/software/software | 10 + .../sample/software/software_10.json.gz | Bin 6727 -> 0 bytes .../eu/dnetlib/dhp/eosctag/galaxy/publication | 0 .../dnetlib/dhp/eosctag/jupyter/publication | 0 .../dnetlib/dhp/eosctag/twitter/publication | 0 70 files changed, 622 insertions(+), 406 deletions(-) create mode 100644 dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/PrepareResultCommunitySet.java create mode 100644 dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/ResultProjectList.java create mode 100644 dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/SparkResultToCommunityFromProject.java delete mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/query.xq rename dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/eosc/dataset/{dataset_10.json => dataset} (100%) create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/eosc/dataset/otherresearchproduct create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/eosc/dataset/publication create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/eosc/dataset/software create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/no_updates/dataset delete mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/no_updates/dataset_10.json.gz create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/no_updates/datasource create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/no_updates/otherresearchproduct create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/no_updates/publication create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/no_updates/software rename dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_datasourcewithconstraints/{dataset_10.json => dataset} (100%) create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_datasourcewithconstraints/datasource create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_datasourcewithconstraints/otherresearchproduct create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_datasourcewithconstraints/publication create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_datasourcewithconstraints/software create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_subject/contextnoprovenance/dataset delete mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_subject/contextnoprovenance/dataset_10.json.gz create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_subject/contextnoprovenance/datasource create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_subject/contextnoprovenance/otherresearchproduct create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_subject/contextnoprovenance/publication create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_subject/contextnoprovenance/software create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_subject/nocontext/dataset delete mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_subject/nocontext/dataset_10.json.gz create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_subject/nocontext/datasource create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_subject/nocontext/otherresearchproduct create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_subject/nocontext/publication create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_subject/nocontext/software rename dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_subject_datasource/{dataset_10.json => dataset} (93%) create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_subject_datasource/datasource create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_subject_datasource/otherresearchproduct create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_subject_datasource/publication create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_subject_datasource/software create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/otherresearchproduct/update_zenodocommunity/dataset create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/otherresearchproduct/update_zenodocommunity/datasource create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/otherresearchproduct/update_zenodocommunity/otherresearchproduct delete mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/otherresearchproduct/update_zenodocommunity/otherresearchproduct_10.json.gz create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/otherresearchproduct/update_zenodocommunity/publication create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/otherresearchproduct/update_zenodocommunity/software create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/publication/update_datasource/dataset create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/publication/update_datasource/datasource create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/publication/update_datasource/otherresearchproduct create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/publication/update_datasource/publication delete mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/publication/update_datasource/publication_10.json.gz create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/publication/update_datasource/software create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/software/dataset create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/software/otherresearchproduct create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/software/publication create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/software/software delete mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/software/software_10.json.gz create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/eosctag/galaxy/publication create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/eosctag/jupyter/publication create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/eosctag/twitter/publication diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/PropagationConstant.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/PropagationConstant.java index 053300696..7c4186663 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/PropagationConstant.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/PropagationConstant.java @@ -71,6 +71,9 @@ public class PropagationConstant { public static final String PROPAGATION_RESULT_COMMUNITY_ORGANIZATION_CLASS_ID = "result:community:organization"; public static final String PROPAGATION_RESULT_COMMUNITY_ORGANIZATION_CLASS_NAME = " Propagation of result belonging to community through organization"; + public static final String PROPAGATION_RESULT_COMMUNITY_PROJECT_CLASS_ID = "result:community:project"; + public static final String PROPAGATION_RESULT_COMMUNITY_PROJECT_CLASS_NAME = " Propagation of result belonging to community through project"; + public static final String PROPAGATION_ORCID_TO_RESULT_FROM_SEM_REL_CLASS_ID = "authorpid:result"; public static final String PROPAGATION_ORCID_TO_RESULT_FROM_SEM_REL_CLASS_NAME = "Propagation of authors pid to result through semantic relations"; diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/QueryCommunityAPI.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/QueryCommunityAPI.java index cc615ba46..262ca0290 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/QueryCommunityAPI.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/QueryCommunityAPI.java @@ -4,22 +4,18 @@ package eu.dnetlib.dhp.api; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; -import java.io.OutputStream; import java.net.HttpURLConnection; -import java.net.MalformedURLException; import java.net.URL; -import org.apache.http.HttpHeaders; import org.jetbrains.annotations.NotNull; -import com.google.gson.Gson; - /** * @author miriam.baglioni * @Date 06/10/23 */ public class QueryCommunityAPI { - private static final String baseUrl = "https://services.openaire.eu/openaire/"; + private static final String PRODUCTION_BASE_URL = "https://services.openaire.eu/openaire/"; + private static final String BETA_BASE_URL = "https://beta.services.openaire.eu/openaire/"; private static String get(String geturl) throws IOException { URL url = new URL(geturl); @@ -36,25 +32,35 @@ public class QueryCommunityAPI { return body; } - public static String communities() throws IOException { - return get(baseUrl + "community/communities"); + public static String communities(boolean production) throws IOException { + if (production) + return get(PRODUCTION_BASE_URL + "community/communities"); + return get(BETA_BASE_URL + "community/communities"); } - public static String community(String id) throws IOException { - return get(baseUrl + "community/" + id); + public static String community(String id, boolean production) throws IOException { + if (production) + return get(PRODUCTION_BASE_URL + "community/" + id); + return get(BETA_BASE_URL + "community/" + id); } - public static String communityDatasource(String id) throws IOException { - return get(baseUrl + "community/" + id + "/contentproviders"); + public static String communityDatasource(String id, boolean production) throws IOException { + if (production) + return get(PRODUCTION_BASE_URL + "community/" + id + "/contentproviders"); + return (BETA_BASE_URL + "community/" + id + "/contentproviders"); } - public static String communityPropagationOrganization(String id) throws IOException { - return get(baseUrl + "community/" + id + "/propagationOrganizations"); + public static String communityPropagationOrganization(String id, boolean production) throws IOException { + if (production) + return get(PRODUCTION_BASE_URL + "community/" + id + "/propagationOrganizations"); + return get(BETA_BASE_URL + "community/" + id + "/propagationOrganizations"); } - public static String communityProjects(String id, String page, String size) throws IOException { - return get(baseUrl + "community/" + id + "/projects/" + page + "/" + size); + public static String communityProjects(String id, String page, String size, boolean production) throws IOException { + if (production) + return get(PRODUCTION_BASE_URL + "community/" + id + "/projects/" + page + "/" + size); + return get(BETA_BASE_URL + "community/" + id + "/projects/" + page + "/" + size); } @NotNull diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/Utils.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/Utils.java index c1aaa14c4..a0eacb774 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/Utils.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/Utils.java @@ -30,14 +30,14 @@ public class Utils implements Serializable { private static final ObjectMapper MAPPER = new ObjectMapper(); private static final VerbResolver resolver = VerbResolverFactory.newInstance(); - public static CommunityConfiguration getCommunityConfiguration() throws IOException { + public static CommunityConfiguration getCommunityConfiguration(boolean production) throws IOException { final Map communities = Maps.newHashMap(); List validCommunities = new ArrayList<>(); - getValidCommunities() + getValidCommunities(production) .forEach(community -> { try { CommunityModel cm = MAPPER - .readValue(QueryCommunityAPI.community(community.getId()), CommunityModel.class); + .readValue(QueryCommunityAPI.community(community.getId(), production), CommunityModel.class); validCommunities.add(getCommunity(cm)); } catch (IOException e) { throw new RuntimeException(e); @@ -46,10 +46,11 @@ public class Utils implements Serializable { validCommunities.forEach(community -> { try { DatasourceList dl = MAPPER - .readValue(QueryCommunityAPI.communityDatasource(community.getId()), DatasourceList.class); + .readValue( + QueryCommunityAPI.communityDatasource(community.getId(), production), DatasourceList.class); community.setProviders(dl.stream().map(d -> { -// if(d.getEnabled() == null || Boolean.FALSE.equals(d.getEnabled())) -// return null; + if (d.getEnabled() == null || Boolean.FALSE.equals(d.getEnabled())) + return null; Provider p = new Provider(); p.setOpenaireId("10|" + d.getOpenaireId()); p.setSelectionConstraints(d.getSelectioncriteria()); @@ -80,18 +81,20 @@ public class Utils implements Serializable { c.setSubjects(cm.getSubjects()); c.getSubjects().addAll(cm.getFos()); c.getSubjects().addAll(cm.getSdg()); - c.setConstraints(cm.getAdvancedConstraints()); - if (c.getConstraints() != null) + if (cm.getAdvancedConstraints() != null) { + c.setConstraints(cm.getAdvancedConstraints()); c.getConstraints().setSelection(resolver); - c.setRemoveConstraints(cm.getRemoveConstraints()); - if (c.getRemoveConstraints() != null) + } + if (cm.getRemoveConstraints() != null) { + c.setRemoveConstraints(cm.getRemoveConstraints()); c.getRemoveConstraints().setSelection(resolver); + } return c; } - public static List getValidCommunities() throws IOException { + public static List getValidCommunities(boolean production) throws IOException { return MAPPER - .readValue(QueryCommunityAPI.communities(), CommunitySummary.class) + .readValue(QueryCommunityAPI.communities(production), CommunitySummary.class) .stream() .filter( community -> !community.getStatus().equals("hidden") && @@ -99,17 +102,26 @@ public class Utils implements Serializable { .collect(Collectors.toList()); } - public static CommunityEntityMap getCommunityOrganization() throws IOException { + /** + * it returns for each organization the list of associated communities + */ + public static CommunityEntityMap getCommunityOrganization(boolean production) throws IOException { CommunityEntityMap organizationMap = new CommunityEntityMap(); - getValidCommunities() + getValidCommunities(production) .forEach(community -> { String id = community.getId(); try { List associatedOrgs = MAPPER - .readValue(QueryCommunityAPI.communityPropagationOrganization(id), OrganizationList.class); - if (associatedOrgs.size() > 0) { - organizationMap.put(id, associatedOrgs); - } + .readValue( + QueryCommunityAPI.communityPropagationOrganization(id, production), OrganizationList.class); + associatedOrgs.forEach(o -> { + if (!organizationMap + .keySet() + .contains( + "20|" + o)) + organizationMap.put("20|" + o, new ArrayList<>()); + organizationMap.get("20|" + o).add(community.getId()); + }); } catch (IOException e) { throw new RuntimeException(e); } @@ -117,26 +129,28 @@ public class Utils implements Serializable { return organizationMap; } - public static CommunityEntityMap getCommunityProjects() throws IOException { + public static CommunityEntityMap getCommunityProjects(boolean production) throws IOException { CommunityEntityMap projectMap = new CommunityEntityMap(); - getValidCommunities() + getValidCommunities(production) .forEach(community -> { int page = -1; int size = 100; ContentModel cm = new ContentModel(); - List projectList = new ArrayList<>(); do { page++; try { cm = MAPPER .readValue( QueryCommunityAPI - .communityProjects(community.getId(), String.valueOf(page), String.valueOf(size)), + .communityProjects( + community.getId(), String.valueOf(page), String.valueOf(size), production), ContentModel.class); if (cm.getContent().size() > 0) { - - cm.getContent().forEach(p -> projectList.add("40|" + p.getOpenaireId())); - projectMap.put(community.getId(), projectList); + cm.getContent().forEach(p -> { + if (!projectMap.keySet().contains("40|" + p.getOpenaireId())) + projectMap.put("40|" + p.getOpenaireId(), new ArrayList<>()); + projectMap.get("40|" + p.getOpenaireId()).add(community.getId()); + }); } } catch (IOException e) { throw new RuntimeException(e); diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/SparkBulkTagJob.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/SparkBulkTagJob.java index 0d98e4958..b24ee129a 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/SparkBulkTagJob.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/SparkBulkTagJob.java @@ -23,6 +23,8 @@ import com.google.gson.Gson; import eu.dnetlib.dhp.api.Utils; import eu.dnetlib.dhp.application.ArgumentApplicationParser; import eu.dnetlib.dhp.bulktag.community.*; +import eu.dnetlib.dhp.schema.common.EntityType; +import eu.dnetlib.dhp.schema.common.ModelSupport; import eu.dnetlib.dhp.schema.oaf.Datasource; import eu.dnetlib.dhp.schema.oaf.Result; @@ -53,50 +55,38 @@ public class SparkBulkTagJob { .orElse(Boolean.TRUE); log.info("isSparkSessionManaged: {}", isSparkSessionManaged); - Boolean isTest = Optional - .ofNullable(parser.get("isTest")) - .map(Boolean::valueOf) - .orElse(Boolean.FALSE); - log.info("isTest: {} ", isTest); - final String inputPath = parser.get("sourcePath"); log.info("inputPath: {}", inputPath); final String outputPath = parser.get("outputPath"); log.info("outputPath: {}", outputPath); + final boolean production = Boolean.valueOf(parser.get("production")); + log.info("production: {}", production); + ProtoMap protoMappingParams = new Gson().fromJson(parser.get("pathMap"), ProtoMap.class); log.info("pathMap: {}", new Gson().toJson(protoMappingParams)); - final String resultClassName = parser.get("resultTableName"); - log.info("resultTableName: {}", resultClassName); - - final Boolean saveGraph = Optional - .ofNullable(parser.get("saveGraph")) - .map(Boolean::valueOf) - .orElse(Boolean.TRUE); - log.info("saveGraph: {}", saveGraph); - - Class resultClazz = (Class) Class.forName(resultClassName); - SparkConf conf = new SparkConf(); CommunityConfiguration cc; - String taggingConf = parser.get("taggingConf"); + String taggingConf = Optional + .ofNullable(parser.get("taggingConf")) + .map(String::valueOf) + .orElse(null); - if (isTest) { + if (taggingConf != null) { cc = CommunityConfigurationFactory.newInstance(taggingConf); } else { - cc = Utils.getCommunityConfiguration();// QueryInformationSystem.getCommunityConfiguration(parser.get("isLookUpUrl")); + cc = Utils.getCommunityConfiguration(production); } runWithSparkSession( conf, isSparkSessionManaged, spark -> { - removeOutputDir(spark, outputPath); extendCommunityConfigurationForEOSC(spark, inputPath, cc); - execBulkTag(spark, inputPath, outputPath, protoMappingParams, resultClazz, cc); + execBulkTag(spark, inputPath, outputPath, protoMappingParams, cc); }); } @@ -141,22 +131,30 @@ public class SparkBulkTagJob { String inputPath, String outputPath, ProtoMap protoMappingParams, - Class resultClazz, CommunityConfiguration communityConfiguration) { - ResultTagger resultTagger = new ResultTagger(); - readPath(spark, inputPath, resultClazz) - .map(patchResult(), Encoders.bean(resultClazz)) - .filter(Objects::nonNull) - .map( - (MapFunction) value -> resultTagger - .enrichContextCriteria( - value, communityConfiguration, protoMappingParams), - Encoders.bean(resultClazz)) - .write() - .mode(SaveMode.Overwrite) - .option("compression", "gzip") - .json(outputPath); + ModelSupport.entityTypes + .keySet() + .parallelStream() + .filter(e -> ModelSupport.isResult(e)) + .forEach(e -> { + removeOutputDir(spark, outputPath + e.name()); + ResultTagger resultTagger = new ResultTagger(); + Class resultClazz = ModelSupport.entityTypes.get(e); + readPath(spark, inputPath + e.name(), resultClazz) + .map(patchResult(), Encoders.bean(resultClazz)) + .filter(Objects::nonNull) + .map( + (MapFunction) value -> resultTagger + .enrichContextCriteria( + value, communityConfiguration, protoMappingParams), + Encoders.bean(resultClazz)) + .write() + .mode(SaveMode.Overwrite) + .option("compression", "gzip") + .json(outputPath + e.name()); + }); + } public static Dataset readPath( diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/ResultTagger.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/ResultTagger.java index 5f62c10f4..98c46cf00 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/ResultTagger.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/ResultTagger.java @@ -82,19 +82,23 @@ public class ResultTagger implements Serializable { // communities contains all the communities to be not added to the context final Set removeCommunities = new HashSet<>(); + // if (conf.getRemoveConstraintsMap().keySet().size() > 0) conf .getRemoveConstraintsMap() .keySet() - .forEach(communityId -> { - if (conf.getRemoveConstraintsMap().get(communityId).getCriteria() != null && - conf - .getRemoveConstraintsMap() - .get(communityId) - .getCriteria() - .stream() - .anyMatch(crit -> crit.verifyCriteria(param))) - removeCommunities.add(communityId); - }); + .forEach( + communityId -> { + // log.info("Remove constraints for " + communityId); + if (conf.getRemoveConstraintsMap().keySet().contains(communityId) && + conf.getRemoveConstraintsMap().get(communityId).getCriteria() != null && + conf + .getRemoveConstraintsMap() + .get(communityId) + .getCriteria() + .stream() + .anyMatch(crit -> crit.verifyCriteria(param))) + removeCommunities.add(communityId); + }); // communities contains all the communities to be added as context for the result final Set communities = new HashSet<>(); @@ -124,10 +128,10 @@ public class ResultTagger implements Serializable { if (Objects.nonNull(result.getInstance())) { for (Instance i : result.getInstance()) { if (Objects.nonNull(i.getCollectedfrom()) && Objects.nonNull(i.getCollectedfrom().getKey())) { - collfrom.add(StringUtils.substringAfter(i.getCollectedfrom().getKey(), "|")); + collfrom.add(i.getCollectedfrom().getKey()); } if (Objects.nonNull(i.getHostedby()) && Objects.nonNull(i.getHostedby().getKey())) { - hostdby.add(StringUtils.substringAfter(i.getHostedby().getKey(), "|")); + hostdby.add(i.getHostedby().getKey()); } } diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromorganization/PrepareResultCommunitySet.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromorganization/PrepareResultCommunitySet.java index e0670b80f..e32e94a4b 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromorganization/PrepareResultCommunitySet.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromorganization/PrepareResultCommunitySet.java @@ -48,11 +48,10 @@ public class PrepareResultCommunitySet { final String outputPath = parser.get("outputPath"); log.info("outputPath: {}", outputPath); -// final CommunityEntityMap organizationMap = new Gson() -// .fromJson( -// parser.get("organizationtoresultcommunitymap"), -// CommunityEntityMap.class); - final CommunityEntityMap organizationMap = Utils.getCommunityOrganization(); + final boolean production = Boolean.valueOf(parser.get("production")); + log.info("production: {}", production); + + final CommunityEntityMap organizationMap = Utils.getCommunityOrganization(production); log.info("organizationMap: {}", new Gson().toJson(organizationMap)); SparkConf conf = new SparkConf(); diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromorganization/SparkResultToCommunityFromOrganizationJob.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromorganization/SparkResultToCommunityFromOrganizationJob.java index 50df08f8c..43f425b68 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromorganization/SparkResultToCommunityFromOrganizationJob.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromorganization/SparkResultToCommunityFromOrganizationJob.java @@ -56,12 +56,6 @@ public class SparkResultToCommunityFromOrganizationJob { final String resultClassName = parser.get("resultTableName"); log.info("resultTableName: {}", resultClassName); - final Boolean saveGraph = Optional - .ofNullable(parser.get("saveGraph")) - .map(Boolean::valueOf) - .orElse(Boolean.TRUE); - log.info("saveGraph: {}", saveGraph); - @SuppressWarnings("unchecked") Class resultClazz = (Class) Class.forName(resultClassName); @@ -73,9 +67,9 @@ public class SparkResultToCommunityFromOrganizationJob { isSparkSessionManaged, spark -> { removeOutputDir(spark, outputPath); - if (saveGraph) { - execPropagation(spark, inputPath, outputPath, resultClazz, possibleupdatespath); - } + + execPropagation(spark, inputPath, outputPath, resultClazz, possibleupdatespath); + }); } diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/PrepareResultCommunitySet.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/PrepareResultCommunitySet.java new file mode 100644 index 000000000..b0fbf8056 --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/PrepareResultCommunitySet.java @@ -0,0 +1,121 @@ + +package eu.dnetlib.dhp.resulttocommunityfromproject; + +import static eu.dnetlib.dhp.PropagationConstant.*; +import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkHiveSession; + +import java.util.*; + +import org.apache.commons.io.IOUtils; +import org.apache.hadoop.io.compress.GzipCodec; +import org.apache.spark.SparkConf; +import org.apache.spark.api.java.function.MapFunction; +import org.apache.spark.api.java.function.MapGroupsFunction; +import org.apache.spark.sql.*; +import org.apache.spark.sql.types.DataTypes; +import org.apache.spark.sql.types.StructType; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.google.gson.Gson; + +import eu.dnetlib.dhp.api.Utils; +import eu.dnetlib.dhp.api.model.CommunityEntityMap; +import eu.dnetlib.dhp.application.ArgumentApplicationParser; +import eu.dnetlib.dhp.resulttocommunityfromorganization.ResultCommunityList; +import eu.dnetlib.dhp.resulttocommunityfromorganization.ResultOrganizations; +import eu.dnetlib.dhp.schema.common.ModelConstants; +import eu.dnetlib.dhp.schema.oaf.Relation; +import scala.Tuple2; + +public class PrepareResultCommunitySet { + + private static final Logger log = LoggerFactory.getLogger(PrepareResultCommunitySet.class); + + public static void main(String[] args) throws Exception { + String jsonConfiguration = IOUtils + .toString( + PrepareResultCommunitySet.class + .getResourceAsStream( + "/eu/dnetlib/dhp/resulttocommunityfromproject/input_preparecommunitytoresult_parameters.json")); + + final ArgumentApplicationParser parser = new ArgumentApplicationParser(jsonConfiguration); + parser.parseArgument(args); + + Boolean isSparkSessionManaged = isSparkSessionManaged(parser); + log.info("isSparkSessionManaged: {}", isSparkSessionManaged); + + String inputPath = parser.get("sourcePath"); + log.info("inputPath: {}", inputPath); + + final String outputPath = parser.get("outputPath"); + log.info("outputPath: {}", outputPath); + + final boolean production = Boolean.valueOf(parser.get("outputPath")); + log.info("production: {}", production); + + final CommunityEntityMap projectsMap = Utils.getCommunityProjects(production); + log.info("projectsMap: {}", new Gson().toJson(projectsMap)); + + SparkConf conf = new SparkConf(); + conf.set("hive.metastore.uris", parser.get("hive_metastore_uris")); + + runWithSparkHiveSession( + conf, + isSparkSessionManaged, + spark -> { + removeOutputDir(spark, outputPath); + prepareInfo(spark, inputPath, outputPath, projectsMap); + }); + } + + private static void prepareInfo( + SparkSession spark, + String inputPath, + String outputPath, + CommunityEntityMap projectMap) { + + final StructType structureSchema = new StructType() + .add( + "dataInfo", new StructType() + .add("deletedbyinference", DataTypes.BooleanType) + .add("invisible", DataTypes.BooleanType)) + .add("source", DataTypes.StringType) + .add("target", DataTypes.StringType) + .add("relClass", DataTypes.StringType); + + spark + .read() + .schema(structureSchema) + .json(inputPath) + .filter( + "dataInfo.deletedbyinference != true " + + "and relClass == '" + ModelConstants.IS_PRODUCED_BY + "'") + .select( + new Column("source").as("resultId"), + new Column("target").as("projectId")) + .groupByKey((MapFunction) r -> (String) r.getAs("source"), Encoders.STRING()) + .mapGroups((MapGroupsFunction) (k, v) -> { + ResultProjectList rpl = new ResultProjectList(); + rpl.setResultId(k); + ArrayList cl = new ArrayList<>(); + cl.addAll(projectMap.get(v.next().getAs("target"))); + v.forEachRemaining(r -> { + projectMap + .get(r.getAs("target")) + .forEach(c -> { + if (!cl.contains(c)) + cl.add(c); + }); + + }); + rpl.setCommunityList(cl); + return rpl; + }, Encoders.bean(ResultProjectList.class)) + .write() + .mode(SaveMode.Overwrite) + .option("compression", "gzip") + .json(outputPath); + } + +} diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/ResultProjectList.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/ResultProjectList.java new file mode 100644 index 000000000..44798a1f3 --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/ResultProjectList.java @@ -0,0 +1,26 @@ + +package eu.dnetlib.dhp.resulttocommunityfromproject; + +import java.io.Serializable; +import java.util.ArrayList; + +public class ResultProjectList implements Serializable { + private String resultId; + private ArrayList communityList; + + public String getResultId() { + return resultId; + } + + public void setResultId(String resultId) { + this.resultId = resultId; + } + + public ArrayList getCommunityList() { + return communityList; + } + + public void setCommunityList(ArrayList communityList) { + this.communityList = communityList; + } +} diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/SparkResultToCommunityFromProject.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/SparkResultToCommunityFromProject.java new file mode 100644 index 000000000..6d4779ea1 --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/SparkResultToCommunityFromProject.java @@ -0,0 +1,156 @@ + +package eu.dnetlib.dhp.resulttocommunityfromproject; + +import static eu.dnetlib.dhp.PropagationConstant.*; +import static eu.dnetlib.dhp.PropagationConstant.PROPAGATION_RESULT_COMMUNITY_ORGANIZATION_CLASS_NAME; +import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkHiveSession; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +import org.apache.commons.io.IOUtils; +import org.apache.spark.SparkConf; +import org.apache.spark.api.java.function.MapFunction; +import org.apache.spark.sql.Dataset; +import org.apache.spark.sql.Encoders; +import org.apache.spark.sql.SaveMode; +import org.apache.spark.sql.SparkSession; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import eu.dnetlib.dhp.application.ArgumentApplicationParser; +import eu.dnetlib.dhp.resulttocommunityfromorganization.ResultCommunityList; +import eu.dnetlib.dhp.resulttocommunityfromorganization.SparkResultToCommunityFromOrganizationJob; +import eu.dnetlib.dhp.schema.common.ModelConstants; +import eu.dnetlib.dhp.schema.common.ModelSupport; +import eu.dnetlib.dhp.schema.oaf.Context; +import eu.dnetlib.dhp.schema.oaf.Result; +import scala.Tuple2; + +/** + * @author miriam.baglioni + * @Date 11/10/23 + */ +public class SparkResultToCommunityFromProject implements Serializable { + private static final Logger log = LoggerFactory.getLogger(SparkResultToCommunityFromProject.class); + + public static void main(String[] args) throws Exception { + String jsonConfiguration = IOUtils + .toString( + SparkResultToCommunityFromProject.class + .getResourceAsStream( + "/eu/dnetlib/dhp/resulttocommunityfromproject/input_communitytoresult_parameters.json")); + + final ArgumentApplicationParser parser = new ArgumentApplicationParser(jsonConfiguration); + + parser.parseArgument(args); + + Boolean isSparkSessionManaged = isSparkSessionManaged(parser); + log.info("isSparkSessionManaged: {}", isSparkSessionManaged); + + String inputPath = parser.get("sourcePath"); + log.info("inputPath: {}", inputPath); + + final String outputPath = parser.get("outputPath"); + log.info("outputPath: {}", outputPath); + + final String possibleupdatespath = parser.get("preparedInfoPath"); + log.info("preparedInfoPath: {}", possibleupdatespath); + + final String resultClassName = parser.get("resultTableName"); + log.info("resultTableName: {}", resultClassName); + + @SuppressWarnings("unchecked") + Class resultClazz = (Class) Class.forName(resultClassName); + + SparkConf conf = new SparkConf(); + conf.set("hive.metastore.uris", parser.get("hive_metastore_uris")); + + runWithSparkHiveSession( + conf, + isSparkSessionManaged, + spark -> { +// removeOutputDir(spark, outputPath); + + execPropagation(spark, inputPath, outputPath, possibleupdatespath); + + }); + } + + private static void execPropagation( + SparkSession spark, + String inputPath, + String outputPath, + + String possibleUpdatesPath) { + + Dataset possibleUpdates = readPath(spark, possibleUpdatesPath, ResultProjectList.class); + + ModelSupport.entityTypes + .keySet() + .parallelStream() + .forEach(e -> { + if (ModelSupport.isResult(e)) { + removeOutputDir(spark, outputPath + e.name()); + Class resultClazz = ModelSupport.entityTypes.get(e); + Dataset result = readPath(spark, inputPath + e.name(), resultClazz); + + result + .joinWith( + possibleUpdates, + result.col("id").equalTo(possibleUpdates.col("resultId")), + "left_outer") + .map(resultCommunityFn(), Encoders.bean(resultClazz)) + .write() + .mode(SaveMode.Overwrite) + .option("compression", "gzip") + .json(outputPath); + } + }); + + } + + private static MapFunction, R> resultCommunityFn() { + return value -> { + R ret = value._1(); + Optional rcl = Optional.ofNullable(value._2()); + if (rcl.isPresent()) { + ArrayList communitySet = rcl.get().getCommunityList(); + List contextList = ret + .getContext() + .stream() + .map(Context::getId) + .collect(Collectors.toList()); + + @SuppressWarnings("unchecked") + R res = (R) ret.getClass().newInstance(); + + res.setId(ret.getId()); + List propagatedContexts = new ArrayList<>(); + for (String cId : communitySet) { + if (!contextList.contains(cId)) { + Context newContext = new Context(); + newContext.setId(cId); + newContext + .setDataInfo( + Arrays + .asList( + getDataInfo( + PROPAGATION_DATA_INFO_TYPE, + PROPAGATION_RESULT_COMMUNITY_PROJECT_CLASS_ID, + PROPAGATION_RESULT_COMMUNITY_PROJECT_CLASS_NAME, + ModelConstants.DNET_PROVENANCE_ACTIONS))); + propagatedContexts.add(newContext); + } + } + res.setContext(propagatedContexts); + ret.mergeFrom(res); + } + return ret; + }; + } +} diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/input_bulkTag_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/input_bulkTag_parameters.json index a8be7c32e..dbe2d088f 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/input_bulkTag_parameters.json +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/input_bulkTag_parameters.json @@ -1,10 +1,5 @@ [ - { - "paramName":"is", - "paramLongName":"isLookUpUrl", - "paramDescription": "URL of the isLookUp Service", - "paramRequired": true - }, + { "paramName":"s", "paramLongName":"sourcePath", @@ -17,12 +12,7 @@ "paramDescription": "the json path associated to each selection field", "paramRequired": true }, - { - "paramName":"tn", - "paramLongName":"resultTableName", - "paramDescription": "the name of the result table we are currently working on", - "paramRequired": true - }, + { "paramName": "out", "paramLongName": "outputPath", @@ -35,17 +25,19 @@ "paramDescription": "true if the spark session is managed, false otherwise", "paramRequired": false }, - { - "paramName": "test", - "paramLongName": "isTest", - "paramDescription": "Parameter intended for testing purposes only. True if the reun is relatesd to a test and so the taggingConf parameter should be loaded", - "paramRequired": false - }, + { "paramName": "tg", "paramLongName": "taggingConf", "paramDescription": "this parameter is intended for testing purposes only. It is a possible tagging configuration obtained via the XQUERY. Intended to be removed", "paramRequired": false + }, + + { + "paramName": "p", + "paramLongName": "production", + "paramDescription": "this parameter is intended for testing purposes only. It is a possible tagging configuration obtained via the XQUERY. Intended to be removed", + "paramRequired": true } ] \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/oozie_app/workflow.xml index b868e4c72..56eed4703 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/oozie_app/workflow.xml @@ -4,10 +4,6 @@ sourcePath the source path - - isLookUpUrl - the isLookup service endpoint - pathMap the json path associated to each selection field @@ -44,7 +40,7 @@ - + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] @@ -102,16 +98,9 @@ - + - - - - - - - - + yarn-cluster cluster @@ -128,98 +117,15 @@ --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --sourcePath${sourcePath}/publication - --resultTableNameeu.dnetlib.dhp.schema.oaf.Publication - --outputPath${outputPath}/publication + --sourcePath${sourcePath}/ + --outputPath${outputPath}/ --pathMap${pathMap} - --isLookUpUrl${isLookUpUrl} + --production${production} - + - - - yarn-cluster - cluster - bulkTagging-dataset - eu.dnetlib.dhp.bulktag.SparkBulkTagJob - dhp-enrichment-${projectVersion}.jar - - --num-executors=${sparkExecutorNumber} - --executor-memory=${sparkExecutorMemory} - --executor-cores=${sparkExecutorCores} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - - --sourcePath${sourcePath}/dataset - --resultTableNameeu.dnetlib.dhp.schema.oaf.Dataset - --outputPath${outputPath}/dataset - --pathMap${pathMap} - --isLookUpUrl${isLookUpUrl} - - - - - - - - yarn-cluster - cluster - bulkTagging-orp - eu.dnetlib.dhp.bulktag.SparkBulkTagJob - dhp-enrichment-${projectVersion}.jar - - --num-executors=${sparkExecutorNumber} - --executor-memory=${sparkExecutorMemory} - --executor-cores=${sparkExecutorCores} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - - --sourcePath${sourcePath}/otherresearchproduct - --resultTableNameeu.dnetlib.dhp.schema.oaf.OtherResearchProduct - --outputPath${outputPath}/otherresearchproduct - --pathMap${pathMap} - --isLookUpUrl${isLookUpUrl} - - - - - - - - yarn-cluster - cluster - bulkTagging-software - eu.dnetlib.dhp.bulktag.SparkBulkTagJob - dhp-enrichment-${projectVersion}.jar - - --num-executors=${sparkExecutorNumber} - --executor-memory=${sparkExecutorMemory} - --executor-cores=${sparkExecutorCores} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - - --sourcePath${sourcePath}/software - --resultTableNameeu.dnetlib.dhp.schema.oaf.Software - --outputPath${outputPath}/software - --pathMap${pathMap} - --isLookUpUrl${isLookUpUrl} - - - - - - diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/query.xq b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/query.xq deleted file mode 100644 index 052037efb..000000000 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/query.xq +++ /dev/null @@ -1,62 +0,0 @@ -for $x in collection('/db/DRIVER/ContextDSResources/ContextDSResourceType') -let $subj := $x//CONFIGURATION/context/param[./@name='subject']/text() -let $datasources := $x//CONFIGURATION/context/category[./@id=concat($x//CONFIGURATION/context/@id,'::contentproviders')]/concept -let $organizations := $x//CONFIGURATION/context/category[./@id=concat($x//CONFIGURATION/context/@id,'::resultorganizations')]/concept -let $communities := $x//CONFIGURATION/context/category[./@id=concat($x//CONFIGURATION/context/@id,'::zenodocommunities')]/concept -let $fos := $x//CONFIGURATION/context/param[./@name='fos']/text() -let $sdg := $x//CONFIGURATION/context/param[./@name='sdg']/text() -let $zenodo := $x//param[./@name='zenodoCommunity']/text() -where $x//CONFIGURATION/context[./@type='community' or ./@type='ri'] and $x//context/param[./@name = 'status']/text() != 'hidden' -return - -{ $x//CONFIGURATION/context/@id} - -{$x//CONFIGURATION/context/param[./@name='removeConstraints']/text() } - - -{$x//CONFIGURATION/context/param[./@name='advancedConstraints']/text() } - - - {for $y in tokenize($subj,',') - return - {$y}} - {for $y in tokenize($fos,',') - return - {$y}} - {for $y in tokenize($sdg,',') - return - {$y}} - - - {for $d in $datasources - where $d/param[./@name='enabled']/text()='true' - return - - - {$d//param[./@name='openaireId']/text()} - - - {$d/param[./@name='selcriteria']/text()} - - } - - -{for $zc in $zenodo -return - - -{$zc} - -} -{for $zc in $communities -return - - -{$zc/param[./@name='zenodoid']/text()} - - -{$zc/param[./@name='selcriteria']/text()} - -} - - \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/input_communitytoresult_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/input_communitytoresult_parameters.json index eebc1a0ca..b6eb309a5 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/input_communitytoresult_parameters.json +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/input_communitytoresult_parameters.json @@ -11,18 +11,6 @@ "paramDescription": "the hive metastore uris", "paramRequired": true }, - { - "paramName":"sg", - "paramLongName":"saveGraph", - "paramDescription": "true if the new version of the graph must be saved", - "paramRequired": false - }, - { - "paramName":"test", - "paramLongName":"isTest", - "paramDescription": "true if it is executing a test", - "paramRequired": false - }, { "paramName": "out", "paramLongName": "outputPath", diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/oozie_app/workflow.xml index d9805ab7b..b25822ad0 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/oozie_app/workflow.xml @@ -4,10 +4,7 @@ sourcePath the source path - - - - + outputPath the output path @@ -106,7 +103,7 @@ --sourcePath${sourcePath}/relation --outputPath${workingDir}/preparedInfo/resultCommunityList --hive_metastore_uris${hive_metastore_uris} - --organizationtoresultcommunitymap${organizationtoresultcommunitymap} + diff --git a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/BulkTagJobTest.java b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/BulkTagJobTest.java index 11dad9055..7cbbcaafb 100644 --- a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/BulkTagJobTest.java +++ b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/BulkTagJobTest.java @@ -6,6 +6,7 @@ import static eu.dnetlib.dhp.bulktag.community.TaggingConstants.ZENODO_COMMUNITY import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; +import java.util.HashMap; import java.util.List; import org.apache.commons.io.FileUtils; @@ -98,14 +99,11 @@ public class BulkTagJobTest { SparkBulkTagJob .main( new String[] { - "-isTest", Boolean.TRUE.toString(), "-isSparkSessionManaged", Boolean.FALSE.toString(), "-sourcePath", - getClass().getResource("/eu/dnetlib/dhp/bulktag/sample/dataset/no_updates").getPath(), + getClass().getResource("/eu/dnetlib/dhp/bulktag/sample/dataset/no_updates/").getPath(), "-taggingConf", taggingConf, - "-resultTableName", "eu.dnetlib.dhp.schema.oaf.Dataset", - "-outputPath", workingDir.toString() + "/dataset", - "-isLookUpUrl", MOCK_IS_LOOK_UP_URL, + "-outputPath", workingDir.toString() + "/", "-pathMap", pathMap }); @@ -133,19 +131,16 @@ public class BulkTagJobTest { @Test void bulktagBySubjectNoPreviousContextTest() throws Exception { final String sourcePath = getClass() - .getResource("/eu/dnetlib/dhp/bulktag/sample/dataset/update_subject/nocontext") + .getResource("/eu/dnetlib/dhp/bulktag/sample/dataset/update_subject/nocontext/") .getPath(); final String pathMap = BulkTagJobTest.pathMap; SparkBulkTagJob .main( new String[] { - "-isTest", Boolean.TRUE.toString(), "-isSparkSessionManaged", Boolean.FALSE.toString(), "-sourcePath", sourcePath, "-taggingConf", taggingConf, - "-resultTableName", "eu.dnetlib.dhp.schema.oaf.Dataset", - "-outputPath", workingDir.toString() + "/dataset", - "-isLookUpUrl", MOCK_IS_LOOK_UP_URL, + "-outputPath", workingDir.toString() + "/", "-pathMap", pathMap }); @@ -230,19 +225,19 @@ public class BulkTagJobTest { void bulktagBySubjectPreviousContextNoProvenanceTest() throws Exception { final String sourcePath = getClass() .getResource( - "/eu/dnetlib/dhp/bulktag/sample/dataset/update_subject/contextnoprovenance") + "/eu/dnetlib/dhp/bulktag/sample/dataset/update_subject/contextnoprovenance/") .getPath(); final String pathMap = BulkTagJobTest.pathMap; SparkBulkTagJob .main( new String[] { - "-isTest", Boolean.TRUE.toString(), + "-isSparkSessionManaged", Boolean.FALSE.toString(), "-sourcePath", sourcePath, "-taggingConf", taggingConf, - "-resultTableName", "eu.dnetlib.dhp.schema.oaf.Dataset", - "-outputPath", workingDir.toString() + "/dataset", - "-isLookUpUrl", MOCK_IS_LOOK_UP_URL, + + "-outputPath", workingDir.toString() + "/", + "-pathMap", pathMap }); @@ -311,18 +306,18 @@ public class BulkTagJobTest { @Test void bulktagByDatasourceTest() throws Exception { final String sourcePath = getClass() - .getResource("/eu/dnetlib/dhp/bulktag/sample/publication/update_datasource") + .getResource("/eu/dnetlib/dhp/bulktag/sample/publication/update_datasource/") .getPath(); SparkBulkTagJob .main( new String[] { - "-isTest", Boolean.TRUE.toString(), + "-isSparkSessionManaged", Boolean.FALSE.toString(), "-sourcePath", sourcePath, "-taggingConf", taggingConf, - "-resultTableName", "eu.dnetlib.dhp.schema.oaf.Publication", - "-outputPath", workingDir.toString() + "/publication", - "-isLookUpUrl", MOCK_IS_LOOK_UP_URL, + + "-outputPath", workingDir.toString() + "/", + "-pathMap", pathMap }); @@ -384,25 +379,25 @@ public class BulkTagJobTest { void bulktagByZenodoCommunityTest() throws Exception { final String sourcePath = getClass() .getResource( - "/eu/dnetlib/dhp/bulktag/sample/otherresearchproduct/update_zenodocommunity") + "/eu/dnetlib/dhp/bulktag/sample/otherresearchproduct/update_zenodocommunity/") .getPath(); SparkBulkTagJob .main( new String[] { - "-isTest", Boolean.TRUE.toString(), + "-isSparkSessionManaged", Boolean.FALSE.toString(), "-sourcePath", sourcePath, "-taggingConf", taggingConf, - "-resultTableName", "eu.dnetlib.dhp.schema.oaf.OtherResearchProduct", - "-outputPath", workingDir.toString() + "/orp", - "-isLookUpUrl", MOCK_IS_LOOK_UP_URL, + + "-outputPath", workingDir.toString() + "/", + "-pathMap", pathMap }); final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); JavaRDD tmp = sc - .textFile(workingDir.toString() + "/orp") + .textFile(workingDir.toString() + "/otherresearchproduct") .map(item -> OBJECT_MAPPER.readValue(item, OtherResearchProduct.class)); Assertions.assertEquals(10, tmp.count()); @@ -505,18 +500,18 @@ public class BulkTagJobTest { @Test void bulktagBySubjectDatasourceTest() throws Exception { final String sourcePath = getClass() - .getResource("/eu/dnetlib/dhp/bulktag/sample/dataset/update_subject_datasource") + .getResource("/eu/dnetlib/dhp/bulktag/sample/dataset/update_subject_datasource/") .getPath(); SparkBulkTagJob .main( new String[] { - "-isTest", Boolean.TRUE.toString(), + "-isSparkSessionManaged", Boolean.FALSE.toString(), "-sourcePath", sourcePath, "-taggingConf", taggingConf, - "-resultTableName", "eu.dnetlib.dhp.schema.oaf.Dataset", - "-outputPath", workingDir.toString() + "/dataset", - "-isLookUpUrl", MOCK_IS_LOOK_UP_URL, + + "-outputPath", workingDir.toString() + "/", + "-pathMap", pathMap }); @@ -636,14 +631,14 @@ public class BulkTagJobTest { SparkBulkTagJob .main( new String[] { - "-isTest", Boolean.TRUE.toString(), + "-isSparkSessionManaged", Boolean.FALSE.toString(), "-sourcePath", - getClass().getResource("/eu/dnetlib/dhp/bulktag/sample/software/software_10.json.gz").getPath(), + getClass().getResource("/eu/dnetlib/dhp/bulktag/sample/software/").getPath(), "-taggingConf", taggingConf, - "-resultTableName", "eu.dnetlib.dhp.schema.oaf.Software", - "-outputPath", workingDir.toString() + "/software", - "-isLookUpUrl", MOCK_IS_LOOK_UP_URL, + + "-outputPath", workingDir.toString() + "/", + "-pathMap", pathMap }); @@ -732,18 +727,18 @@ public class BulkTagJobTest { final String sourcePath = getClass() .getResource( - "/eu/dnetlib/dhp/bulktag/sample/dataset/update_datasourcewithconstraints") + "/eu/dnetlib/dhp/bulktag/sample/dataset/update_datasourcewithconstraints/") .getPath(); SparkBulkTagJob .main( new String[] { - "-isTest", Boolean.TRUE.toString(), + "-isSparkSessionManaged", Boolean.FALSE.toString(), "-sourcePath", sourcePath, "-taggingConf", taggingConf, - "-resultTableName", "eu.dnetlib.dhp.schema.oaf.Dataset", - "-outputPath", workingDir.toString() + "/dataset", - "-isLookUpUrl", MOCK_IS_LOOK_UP_URL, + + "-outputPath", workingDir.toString() + "/", + "-pathMap", pathMap }); @@ -774,19 +769,19 @@ public class BulkTagJobTest { void bulkTagOtherJupyter() throws Exception { final String sourcePath = getClass() .getResource( - "/eu/dnetlib/dhp/eosctag/jupyter/otherresearchproduct") + "/eu/dnetlib/dhp/eosctag/jupyter/") .getPath(); SparkBulkTagJob .main( new String[] { - "-isTest", Boolean.TRUE.toString(), + "-isSparkSessionManaged", Boolean.FALSE.toString(), "-sourcePath", sourcePath, "-taggingConf", taggingConf, - "-resultTableName", "eu.dnetlib.dhp.schema.oaf.OtherResearchProduct", - "-outputPath", workingDir.toString() + "/otherresearchproduct", - "-isLookUpUrl", MOCK_IS_LOOK_UP_URL, + + "-outputPath", workingDir.toString() + "/", + "-pathMap", pathMap }); @@ -829,18 +824,18 @@ public class BulkTagJobTest { public void bulkTagDatasetJupyter() throws Exception { final String sourcePath = getClass() .getResource( - "/eu/dnetlib/dhp/eosctag/jupyter/dataset") + "/eu/dnetlib/dhp/eosctag/jupyter/") .getPath(); SparkBulkTagJob .main( new String[] { - "-isTest", Boolean.TRUE.toString(), + "-isSparkSessionManaged", Boolean.FALSE.toString(), "-sourcePath", sourcePath, "-taggingConf", taggingConf, - "-resultTableName", "eu.dnetlib.dhp.schema.oaf.Dataset", - "-outputPath", workingDir.toString() + "/dataset", - "-isLookUpUrl", MOCK_IS_LOOK_UP_URL, + + "-outputPath", workingDir.toString() + "/", + "-pathMap", pathMap }); @@ -878,18 +873,18 @@ public class BulkTagJobTest { final String sourcePath = getClass() .getResource( - "/eu/dnetlib/dhp/eosctag/jupyter/software") + "/eu/dnetlib/dhp/eosctag/jupyter/") .getPath(); SparkBulkTagJob .main( new String[] { - "-isTest", Boolean.TRUE.toString(), + "-isSparkSessionManaged", Boolean.FALSE.toString(), "-sourcePath", sourcePath, "-taggingConf", taggingConf, - "-resultTableName", "eu.dnetlib.dhp.schema.oaf.Software", - "-outputPath", workingDir.toString() + "/software", - "-isLookUpUrl", MOCK_IS_LOOK_UP_URL, + + "-outputPath", workingDir.toString() + "/", + "-pathMap", pathMap }); @@ -1096,18 +1091,18 @@ public class BulkTagJobTest { void galaxyOtherTest() throws Exception { final String sourcePath = getClass() .getResource( - "/eu/dnetlib/dhp/eosctag/galaxy/otherresearchproduct") + "/eu/dnetlib/dhp/eosctag/galaxy/") .getPath(); SparkBulkTagJob .main( new String[] { - "-isTest", Boolean.TRUE.toString(), + "-isSparkSessionManaged", Boolean.FALSE.toString(), "-sourcePath", sourcePath, "-taggingConf", taggingConf, - "-resultTableName", "eu.dnetlib.dhp.schema.oaf.OtherResearchProduct", - "-outputPath", workingDir.toString() + "/otherresearchproduct", - "-isLookUpUrl", MOCK_IS_LOOK_UP_URL, + + "-outputPath", workingDir.toString() + "/", + "-pathMap", pathMap }); @@ -1214,18 +1209,18 @@ public class BulkTagJobTest { void galaxySoftwareTest() throws Exception { final String sourcePath = getClass() .getResource( - "/eu/dnetlib/dhp/eosctag/galaxy/software") + "/eu/dnetlib/dhp/eosctag/galaxy/") .getPath(); SparkBulkTagJob .main( new String[] { - "-isTest", Boolean.TRUE.toString(), + "-isSparkSessionManaged", Boolean.FALSE.toString(), "-sourcePath", sourcePath, "-taggingConf", taggingConf, - "-resultTableName", "eu.dnetlib.dhp.schema.oaf.Software", - "-outputPath", workingDir.toString() + "/software", - "-isLookUpUrl", MOCK_IS_LOOK_UP_URL, + + "-outputPath", workingDir.toString() + "/", + "-pathMap", pathMap }); @@ -1333,19 +1328,19 @@ public class BulkTagJobTest { void twitterDatasetTest() throws Exception { final String sourcePath = getClass() .getResource( - "/eu/dnetlib/dhp/eosctag/twitter/dataset") + "/eu/dnetlib/dhp/eosctag/twitter/") .getPath(); SparkBulkTagJob .main( new String[] { - "-isTest", Boolean.TRUE.toString(), + "-isSparkSessionManaged", Boolean.FALSE.toString(), "-sourcePath", sourcePath, "-taggingConf", taggingConf, - "-resultTableName", "eu.dnetlib.dhp.schema.oaf.Dataset", - "-outputPath", workingDir.toString() + "/dataset", - "-isLookUpUrl", MOCK_IS_LOOK_UP_URL, + + "-outputPath", workingDir.toString() + "/", + "-pathMap", pathMap }); @@ -1373,19 +1368,19 @@ public class BulkTagJobTest { void twitterOtherTest() throws Exception { final String sourcePath = getClass() .getResource( - "/eu/dnetlib/dhp/eosctag/twitter/otherresearchproduct") + "/eu/dnetlib/dhp/eosctag/twitter/") .getPath(); SparkBulkTagJob .main( new String[] { - "-isTest", Boolean.TRUE.toString(), + "-isSparkSessionManaged", Boolean.FALSE.toString(), "-sourcePath", sourcePath, "-taggingConf", taggingConf, - "-resultTableName", "eu.dnetlib.dhp.schema.oaf.OtherResearchProduct", - "-outputPath", workingDir.toString() + "/otherresearchproduct", - "-isLookUpUrl", MOCK_IS_LOOK_UP_URL, + + "-outputPath", workingDir.toString() + "/", + "-pathMap", pathMap }); @@ -1418,19 +1413,19 @@ public class BulkTagJobTest { void twitterSoftwareTest() throws Exception { final String sourcePath = getClass() .getResource( - "/eu/dnetlib/dhp/eosctag/twitter/software") + "/eu/dnetlib/dhp/eosctag/twitter/") .getPath(); SparkBulkTagJob .main( new String[] { - "-isTest", Boolean.TRUE.toString(), + "-isSparkSessionManaged", Boolean.FALSE.toString(), "-sourcePath", sourcePath, "-taggingConf", taggingConf, - "-resultTableName", "eu.dnetlib.dhp.schema.oaf.Software", - "-outputPath", workingDir.toString() + "/software", - "-isLookUpUrl", MOCK_IS_LOOK_UP_URL, + + "-outputPath", workingDir.toString() + "/", + "-pathMap", pathMap }); @@ -1455,19 +1450,19 @@ public class BulkTagJobTest { void EoscContextTagTest() throws Exception { final String sourcePath = getClass() .getResource( - "/eu/dnetlib/dhp/bulktag/eosc/dataset/dataset_10.json") + "/eu/dnetlib/dhp/bulktag/eosc/dataset/") .getPath(); SparkBulkTagJob .main( new String[] { - "-isTest", Boolean.TRUE.toString(), + "-isSparkSessionManaged", Boolean.FALSE.toString(), "-sourcePath", sourcePath, "-taggingConf", taggingConf, - "-resultTableName", "eu.dnetlib.dhp.schema.oaf.Dataset", - "-outputPath", workingDir.toString() + "/dataset", - "-isLookUpUrl", MOCK_IS_LOOK_UP_URL, + + "-outputPath", workingDir.toString() + "/", + "-pathMap", pathMap }); @@ -1533,16 +1528,16 @@ public class BulkTagJobTest { SparkBulkTagJob .main( new String[] { - "-isTest", Boolean.TRUE.toString(), + "-isSparkSessionManaged", Boolean.FALSE.toString(), "-sourcePath", getClass() - .getResource("/eu/dnetlib/dhp/bulktag/sample/dataset/update_datasourcewithconstraints") + .getResource("/eu/dnetlib/dhp/bulktag/sample/dataset/update_datasourcewithconstraints/") .getPath(), "-taggingConf", taggingConf, - "-resultTableName", "eu.dnetlib.dhp.schema.oaf.Dataset", - "-outputPath", workingDir.toString() + "/dataset", - "-isLookUpUrl", MOCK_IS_LOOK_UP_URL, + + "-outputPath", workingDir.toString() + "/", + "-pathMap", pathMap }); final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); @@ -1574,14 +1569,14 @@ public class BulkTagJobTest { SparkBulkTagJob .main( new String[] { - "-isTest", Boolean.TRUE.toString(), + "-isSparkSessionManaged", Boolean.FALSE.toString(), "-sourcePath", - getClass().getResource("/eu/dnetlib/dhp/bulktag/sample/dataset/no_updates").getPath(), + getClass().getResource("/eu/dnetlib/dhp/bulktag/sample/dataset/no_updates/").getPath(), "-taggingConf", taggingConf, - "-resultTableName", "eu.dnetlib.dhp.schema.oaf.Dataset", - "-outputPath", workingDir.toString() + "/dataset", - "-isLookUpUrl", MOCK_IS_LOOK_UP_URL, + + "-outputPath", workingDir.toString() + "/", + "-production", Boolean.TRUE.toString(), "-pathMap", pathMap }); diff --git a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/QueryCommunityAPITest.java b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/QueryCommunityAPITest.java index b0043d1e8..a0083dab8 100644 --- a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/QueryCommunityAPITest.java +++ b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/QueryCommunityAPITest.java @@ -26,7 +26,7 @@ public class QueryCommunityAPITest { @Test void communityList() throws Exception { - String body = QueryCommunityAPI.communities(); + String body = QueryCommunityAPI.communities(true); new ObjectMapper() .readValue(body, CommunitySummary.class) .forEach(p -> { @@ -41,7 +41,7 @@ public class QueryCommunityAPITest { @Test void community() throws Exception { String id = "dh-ch"; - String body = QueryCommunityAPI.community(id); + String body = QueryCommunityAPI.community(id, true); System.out .println( new ObjectMapper() @@ -53,7 +53,7 @@ public class QueryCommunityAPITest { @Test void communityDatasource() throws Exception { String id = "dh-ch"; - String body = QueryCommunityAPI.communityDatasource(id); + String body = QueryCommunityAPI.communityDatasource(id, true); new ObjectMapper() .readValue(body, DatasourceList.class) .forEach(ds -> { @@ -68,7 +68,7 @@ public class QueryCommunityAPITest { @Test void validCommunities() throws Exception { - CommunityConfiguration cc = Utils.getCommunityConfiguration(); + CommunityConfiguration cc = Utils.getCommunityConfiguration(true); System.out.println(cc.getCommunities().keySet()); Community community = cc.getCommunities().get("aurora"); Assertions.assertEquals(0, community.getSubjects().size()); @@ -84,11 +84,20 @@ public class QueryCommunityAPITest { Assertions .assertEquals( 35, community.getProviders().stream().filter(p -> p.getSelectionConstraints() == null).count()); + + } + + @Test + void eutopiaCommunityConfiguration() throws Exception { + CommunityConfiguration cc = Utils.getCommunityConfiguration(true); + System.out.println(cc.getCommunities().keySet()); + Community community = cc.getCommunities().get("eutopia"); + community.getProviders().forEach(p -> System.out.println(p.getOpenaireId())); } @Test void getCommunityProjects() throws Exception { - CommunityEntityMap projectMap = Utils.getCommunityProjects(); + CommunityEntityMap projectMap = Utils.getCommunityProjects(true); Assertions.assertFalse(projectMap.containsKey("mes")); Assertions.assertEquals(33, projectMap.size()); Assertions diff --git a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/resulttocommunityfromorganization/ResultToCommunityJobTest.java b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/resulttocommunityfromorganization/ResultToCommunityJobTest.java index 4dd8b976c..da3be8b35 100644 --- a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/resulttocommunityfromorganization/ResultToCommunityJobTest.java +++ b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/resulttocommunityfromorganization/ResultToCommunityJobTest.java @@ -78,7 +78,7 @@ public class ResultToCommunityJobTest { .getResource("/eu/dnetlib/dhp/resulttocommunityfromorganization/sample") .getPath(), "-hive_metastore_uris", "", - "-saveGraph", "true", + "-resultTableName", "eu.dnetlib.dhp.schema.oaf.Dataset", "-outputPath", workingDir.toString() + "/dataset", "-preparedInfoPath", preparedInfoPath diff --git a/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/eosc/dataset/dataset_10.json b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/eosc/dataset/dataset similarity index 100% rename from dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/eosc/dataset/dataset_10.json rename to dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/eosc/dataset/dataset diff --git a/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/eosc/dataset/otherresearchproduct b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/eosc/dataset/otherresearchproduct new file mode 100644 index 000000000..e69de29bb diff --git a/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/eosc/dataset/publication b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/eosc/dataset/publication new file mode 100644 index 000000000..e69de29bb diff --git a/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/eosc/dataset/software b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/eosc/dataset/software new file mode 100644 index 000000000..e69de29bb diff --git a/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/no_updates/dataset b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/no_updates/dataset new file mode 100644 index 000000000..b3ac15d4c --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/no_updates/dataset @@ -0,0 +1,10 @@ +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055868909,"id":"50|od______3989::02dd5d2c222191b0b9bd4f33c8e96529","originalId":["od______3989::02dd5d2c222191b0b9bd4f33c8e96529"],"collectedfrom":[{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null}],"pid":[{"value":"10.4185/RLCS-2018-1243","qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofcollection":"2020-03-03T13:05:26.091Z","dateoftransformation":"2020-03-03T13:06:53.161Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2020-03-03T13:05:26.091Z","altered":true,"baseURL":"http%3A%2F%2Frepositorio.ucjc.edu%2Foai%2Frequest","identifier":"oai:repositorio.ucjc.edu:20.500.12020/562","datestamp":"2018-01-23T15:06:07Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Gallardo-Camacho, Jorge","name":"Jorge","surname":"Gallardo-Camacho","rank":1,"pid":null,"affiliation":null},{"fullname":"Trujillo Fernández, José Ramón","name":"José Ramón","surname":"Trujillo Fernández","rank":2,"pid":null,"affiliation":null},{"fullname":"Jorge Alonso, Ana","name":"Ana","surname":"Jorge Alonso","rank":3,"pid":null,"affiliation":null}],"resulttype":{"classid":"dataset","classname":"dataset","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"esl/spa","classname":"Spanish","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"Ciencias de la Comunicación","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"yihadismo","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"viralidad","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"vídeo","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"propaganda","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"terrorismo","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"terrorism","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"jihadism","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"virality","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"video","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"5903 Ideologías Políticas","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"6310.13 Terrorismo","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"El individualismo como estrategia","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Individualism as an improvised strategy","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"Se analiza como el Yihadismo distribuye su mensaje propaganístico en You Tube.\nUniversidad Camilo José Cela","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2018-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[{"value":"MediaLab - UCJC","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":{"value":"http://creativecommons.org/licenses/by-nc-nd/4.0/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0024","classname":"Film","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"url":["http://hdl.handle.net/20.500.12020/562"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"dateofacceptance":{"value":"2018-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"storagedate":null,"device":null,"size":null,"version":null,"lastmetadataupdate":null,"metadataversionnumber":null,"geolocation":[]} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055868954,"id":"50|od______3989::05d8c751462f9bb8d2b06956dfbc5c7b","originalId":["od______3989::05d8c751462f9bb8d2b06956dfbc5c7b"],"collectedfrom":[{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null}],"pid":[],"dateofcollection":"2020-03-03T13:05:26.079Z","dateoftransformation":"2020-03-03T13:06:53.239Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2020-03-03T13:05:26.079Z","altered":true,"baseURL":"http%3A%2F%2Frepositorio.ucjc.edu%2Foai%2Frequest","identifier":"oai:repositorio.ucjc.edu:20.500.12020/227","datestamp":"2017-11-15T16:29:55Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Rico Pérez, Marta","name":"Marta","surname":"Rico Pérez","rank":1,"pid":null,"affiliation":null}],"resulttype":{"classid":"dataset","classname":"dataset","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"esl/spa","classname":"Spanish","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"Ciencias de la Actividad Física y del Deporte","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Eventos deportivos","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Retos","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Deporte","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"I Congreso Nuevos Retos en los Eventos Deportivos","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"I Congreso Nuevos Retos en los Eventos Deportivos, celebrado en la Universidad Camilo José Cela.\n\n\n\nDerivado del proyecto de investigación \"La situación de los eventos deportivos en España a través de su estructuras y de sus herramientas\", tiene como finalidad conocer la situación de los eventos deportivos en España. Se realizó un estudio descriptivo holístico en el que se investigaron elementos culturales, el perfil de los recursos humanos, la estructura de los comités, entre otras.","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2015-06-20","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":{"value":"http://creativecommons.org/licenses/by-nc-nd/4.0/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0024","classname":"Film","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"url":["http://hdl.handle.net/20.500.12020/227"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"dateofacceptance":{"value":"2015-06-20","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"storagedate":null,"device":null,"size":null,"version":null,"lastmetadataupdate":null,"metadataversionnumber":null,"geolocation":[]} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055869097,"id":"50|od______3989::0f89464c4ac4c398fe0c71433b175a62","originalId":["od______3989::0f89464c4ac4c398fe0c71433b175a62"],"collectedfrom":[{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null}],"pid":[],"dateofcollection":"2020-03-03T13:05:26.069Z","dateoftransformation":"2020-03-03T13:06:53.54Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2020-03-03T13:05:26.069Z","altered":true,"baseURL":"http%3A%2F%2Frepositorio.ucjc.edu%2Foai%2Frequest","identifier":"oai:repositorio.ucjc.edu:20.500.12020/802","datestamp":"2018-11-14T15:30:47Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Universidad Camilo José Cela, Ciencias de la Actividad Física y del Deporte","name":"Ciencias La Actividad Física Y. Del Deporte","surname":"Universidad Camilo José Cela","rank":1,"pid":null,"affiliation":null}],"resulttype":{"classid":"dataset","classname":"dataset","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"esl/spa","classname":"Spanish","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"Ciencias de la Actividad Física y del Deporte","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Actividades deportivas","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Impacto físico","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Proyectos de investigación","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"2411.06 Fisiología del Ejercicio","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"Investigaciones en Ciencias de la Actividad Física y del Deporte CCAFD - UCJC","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"Blanca Romero, investigadora y docente de Ciencias de la Actividad Física y del Deporte en la Universidad Camilo José Cela, describe dos de las líneas de investigación que se han desarrollado en el departamento CCAFD de UCJC: el impacto físico de las diferentes actividades deportivas y los métodos de recuperación más eficaces tras el ejercicio físico.\nBlanca también destaca la importancia en el ámbito de la salud los estudios en Ciencias de la Actividad Física y del Deporte.\nCiencias de la Actividad Física y del Deporte en la Universidad Camilo José Cela","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2016-03-21","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[{"value":"Universidad Camilo José Cela, Ciencias de la Actividad Física y del Deporte","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":{"value":"http://creativecommons.org/licenses/by-nc-nd/4.0/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0024","classname":"Film","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"url":["http://hdl.handle.net/20.500.12020/802"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"dateofacceptance":{"value":"2016-03-21","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"storagedate":null,"device":null,"size":null,"version":null,"lastmetadataupdate":null,"metadataversionnumber":null,"geolocation":[]} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055869215,"id":"50|od______3989::1729c3988199b95d1d566851af7d3c55","originalId":["od______3989::1729c3988199b95d1d566851af7d3c55"],"collectedfrom":[{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null}],"pid":[],"dateofcollection":"2020-03-03T13:05:25.653Z","dateoftransformation":"2020-03-03T13:06:53.764Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2020-03-03T13:05:25.653Z","altered":true,"baseURL":"http%3A%2F%2Frepositorio.ucjc.edu%2Foai%2Frequest","identifier":"oai:repositorio.ucjc.edu:20.500.12020/801","datestamp":"2018-11-14T15:19:38Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Universidad Camilo José Cela, Ciencias de la Actividad Física y del Deporte","name":"Ciencias La Actividad Física Y. Del Deporte","surname":"Universidad Camilo José Cela","rank":1,"pid":null,"affiliation":null}],"resulttype":{"classid":"dataset","classname":"dataset","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"esl/spa","classname":"Spanish","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"Ciencias de la Actividad Física y del Deporte","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Prevención","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Hidratación","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Deporte","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Deportistas","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Electrolitos","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Deportes de resistencia","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"2411.06 Fisiología del Ejercicio","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"La importancia de la hidratación en competiciones resistencia, por Juan del Coso","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"Juan del Coso, investigador y profesor en el Grado en Ciencias de la Actividad Física y del Deporte UCJC, presenta el proyecto de investigación que ha realizado el departamento CCAFD de UCJC: la prevención de desequilibrios de agua y electrolitos que se dan en los deportes de resistencia para que los deportistas realicen su actividad de una manera más segura.\nMás información: http://www.ucjc.edu/2016/03/investiga...\nUniversidad Camilo José Cela, Ciencias de la Actividad Física y del Deporte","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2016-03-21","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[{"value":"Grado en Ciencias de la Actividad Física y del Deporte UCJC","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":{"value":"http://creativecommons.org/licenses/by-nc-nd/4.0/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0024","classname":"Film","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"url":["http://hdl.handle.net/20.500.12020/801"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"dateofacceptance":{"value":"2016-03-21","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"storagedate":null,"device":null,"size":null,"version":null,"lastmetadataupdate":null,"metadataversionnumber":null,"geolocation":[]} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055869487,"id":"50|od______3989::2e3f34ce90520fae350a7e1148d7dcea","originalId":["od______3989::2e3f34ce90520fae350a7e1148d7dcea"],"collectedfrom":[{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null}],"pid":[],"dateofcollection":"2020-03-03T13:05:34.912Z","dateoftransformation":"2020-03-03T13:06:54.218Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2020-03-03T13:05:34.912Z","altered":true,"baseURL":"http%3A%2F%2Frepositorio.ucjc.edu%2Foai%2Frequest","identifier":"oai:repositorio.ucjc.edu:20.500.12020/800","datestamp":"2018-11-14T13:43:21Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Universidad Camilo José Cela, Vicerrectorado de Innovación","name":"Vicerrectorado Innovación","surname":"Universidad Camilo José Cela","rank":1,"pid":null,"affiliation":null}],"resulttype":{"classid":"dataset","classname":"dataset","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"esl/spa","classname":"Spanish","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"Ciencias de la Actividad Física y del Deporte","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Deporte","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Cafeína","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Efectos","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Alto rendimiento","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Competiciones","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Beneficios","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"2411.06 Fisiología del Ejercicio","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"Investigación - Efectos positivos y negativos del uso de la cafeína en el deporte","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"Proyecto de investigación que se están desarrollando en la Universidad Camilo José Cela (UCJC) sobre la cafeína y sus efectos cuando se realiza deporte. https://www.ucjc.edu/2016/08/la-bbc-s...\n\nJuan Del Coso, director del Laboratorio de Fisiología del Ejercicio de la Universidad Camilo José Cela, nos describe cómo está siendo la investigación que desarrolla con deportistas de alto rendimiento y el consumo de cafeína.\n\n\"Nuestra investigación se enmarca dentro del campo de la fisiología del ejercicio y el objetivo que tenemos es investigar los efectos que tiene la cafeína en los deportistas, principalmente saber si es una ayuda ergogénica en la mayor parte de los deportes, pero también conocer qué perjuicios existen para aquellos deportistas que la utilizan para incrementar el rendimiento deportivo\", explica Del Coso.\n\nY es que los datos son muy llamativos: tres de cada cuatro deportistas de alto rendimiento utilizan la cafeína antes de la competición y muchas veces se utiliza sin saber los perjuicios que puede tener para el deportista. \"Lo que estamos investigando es cómo una sustancia, que te puede hacer rendir mejor, cómo puede afectar negativamente cuando termina una competición\".\n\nPero esta investigación no sólo puede extraer conclusiones interesantes y útiles para los deportistas profesionales, \"investigando el deporte de alto rendimiento podemos conocer los beneficios y perjuicios de la cafeína que también afectarían al deportista amateur y hacer un deporte en general más seguro\".\n\nPara el desarrollo de este proyecto de investigación están colaborando el Laboratorio de Fisiología del Ejercicio de la Universidad Camilo José Cela y la Agencia para la Protección de la Salud en el Deporte.\nPara el desarrollo de este proyecto de investigación están colaborando el Laboratorio de Fisiología del Ejercicio de la Universidad Camilo José Cela y la Agencia para la Protección de la Salud en el Deporte.","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2017-10-06","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[{"value":"Universidad Camilo José Cela, Vicerrectorado de Innovación","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":{"value":"http://creativecommons.org/licenses/by-nc-nd/4.0/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0024","classname":"Film","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"url":["http://hdl.handle.net/20.500.12020/800"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"dateofacceptance":{"value":"2017-10-06","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"storagedate":null,"device":null,"size":null,"version":null,"lastmetadataupdate":null,"metadataversionnumber":null,"geolocation":[]} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055869498,"id":"50|od______3989::2f4f3c820c450bd08dac08d07cc82dcf","originalId":["od______3989::2f4f3c820c450bd08dac08d07cc82dcf"],"collectedfrom":[{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null}],"pid":[],"dateofcollection":"2020-03-03T13:05:34.806Z","dateoftransformation":"2020-03-03T13:06:54.229Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2020-03-03T13:05:34.806Z","altered":true,"baseURL":"http%3A%2F%2Frepositorio.ucjc.edu%2Foai%2Frequest","identifier":"oai:repositorio.ucjc.edu:20.500.12020/797","datestamp":"2018-11-14T12:12:23Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Cuesta Cano, Laura","name":"Laura","surname":"Cuesta Cano","rank":1,"pid":null,"affiliation":null}],"resulttype":{"classid":"dataset","classname":"dataset","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"esl/spa","classname":"Spanish","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"Ciencias de la Comunicación","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Marketing digital","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Medios sociales","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Marcas","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Empresas","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Emprendedores","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"II Liga de Debate CICAE - UCJC","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"6114.13 Marketing","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"Laura Cuesta - Liga de Debate CICAE - UCJC","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"Laura Cuesta, profesora en la Universidad Camilo José Cela (UCJC) y Especialista en Marketing Digital y Medios Sociales para marcas y emprendedores. \n\nEn esta ocasión, Laura Cuesta, nos explica el significado de redes sociales y nos habla sobre el uso que le dan los usuarios.\n\nII Liga de Debate CICAE - UCJC http://ligacicae.ucjc.edu/\n\nLa Universidad Camilo José Cela (UCJC) y la Asociación de Colegios Privados e Independientes –Círculo de Calidad Educativa (CICAE) – organizan la segunda edición de esta gran liga de debate académico. El formato es al estilo inglés, similar al de la Oxford Union, donde algunos jóvenes se reunían a debatir sobre temas de la más candente actualidad y polemizaban con la intención de formarse en tan valoradas habilidades.\n\nLa Liga de Debate CICAE-UCJC es una ocasión única para los alumnos de ponerse en contacto con herramientas tan útiles como la oratoria y la comunicación efectiva. Pero, sobre ","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2018-10-23","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[{"value":"Universidad Camilo José Cela, Vicerrectorado de Innovación","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":{"value":"http://creativecommons.org/licenses/by-nc-nd/4.0/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0024","classname":"Film","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"url":["http://hdl.handle.net/20.500.12020/797"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"dateofacceptance":{"value":"2018-10-23","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"storagedate":null,"device":null,"size":null,"version":null,"lastmetadataupdate":null,"metadataversionnumber":null,"geolocation":[]} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055870582,"id":"50|od______3989::752fd0b2bbac1ea1cc50e52fd46eb663","originalId":["od______3989::752fd0b2bbac1ea1cc50e52fd46eb663"],"collectedfrom":[{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null}],"pid":[],"dateofcollection":"2020-03-03T13:05:34.561Z","dateoftransformation":"2020-03-03T13:06:55.716Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2020-03-03T13:05:34.561Z","altered":true,"baseURL":"http%3A%2F%2Frepositorio.ucjc.edu%2Foai%2Frequest","identifier":"oai:repositorio.ucjc.edu:20.500.12020/798","datestamp":"2018-11-14T12:57:26Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Universidad Camilo José Cela, Vicerrectorado de Innovación","name":"Vicerrectorado Innovación","surname":"Universidad Camilo José Cela","rank":1,"pid":null,"affiliation":null}],"resulttype":{"classid":"dataset","classname":"dataset","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"esl/spa","classname":"Spanish","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"Psicología","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Alcohol","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Dependencia","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Proyectos de investigación","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Alcoholismo","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Realidad virtual","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Psicología conductual","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"Investigación - Intervención basada en realidad virtual sobre la dependencia del alcohol","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"Proyecto de investigación que se están desarrollando en la Universidad Camilo José Cela (UCJC) con tecnología aplicada al abandono de la dependencia del alcohol. \nRosa Jurado, profesora e investigadora de UCJC https://www.ucjc.edu/, explica cómo se conjuga el alcoholismo con la realidad virtual. \"Mi investigación consiste en desarrollar una técnica de intervención o rehabilitación que tiene como propósito fomentar la capacidad de inhibición para que las personas que tienen dependencia del alcohol sean capaces de controlar su conducta de aproximación hacia aquello que tiene que ver con el consumo de alcohol\".\n\nEn esta investigación, liderada por la Universidad Camilo José Cela, están participando, el Instituto de Investigación Biomédica del Hospital 12 de Octubre y la Universidad Politécnica de Madrid, con el CeDint. \"En nuestro equipo de investigación pensamos que, además del deseo de consumo, existen una carencia clara de capacidad de control inhibitorio en este tipo de personas\", destaca Rosa Jurado.\n\nLa realidad virtual sirve, según explica Gabriel Rubio, jefe de Psiquiatría del Hospital 12 de Octubre, \"para dar un paso más, para ver cómo reacciona un sujeto en un ambiente que no es el real, pero se parece mucho al real\". El objetivo final de estas acciones es \"mejorar la capacidad del individuo para poner en marcha mecanismos de inhibición conductual, para que el sujeto sea capaz de decir que no\".\n\nY no acaba ahí el proceso. La fase final del tratamiento se enfoca en que el paciente \"sea capaz de reconstruir su vida\" a través de programas de entrenamiento de habilidades sociales, asertividad, familias... \"Juntando todas las áreas de intervención, la abstinencia se mantiene mucho más tiempo y las recaídas disminuyen\".","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2017-10-05","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[{"value":"Universidad Camilo José Cela, Vicerrectorado de Innovación","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":{"value":"http://creativecommons.org/licenses/by-nc-nd/4.0/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0024","classname":"Film","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"url":["http://hdl.handle.net/20.500.12020/798"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"dateofacceptance":{"value":"2017-10-05","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"storagedate":null,"device":null,"size":null,"version":null,"lastmetadataupdate":null,"metadataversionnumber":null,"geolocation":[]} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055870750,"id":"50|od______3989::7fcbe3a03280663cddebfd3cb9203177","originalId":["od______3989::7fcbe3a03280663cddebfd3cb9203177"],"collectedfrom":[{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null}],"pid":[],"dateofcollection":"2020-03-03T13:05:25.652Z","dateoftransformation":"2020-03-03T13:06:55.95Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2020-03-03T13:05:25.652Z","altered":true,"baseURL":"http%3A%2F%2Frepositorio.ucjc.edu%2Foai%2Frequest","identifier":"oai:repositorio.ucjc.edu:20.500.12020/796","datestamp":"2018-11-05T13:36:54Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Universidad Camilo José Cela, Vicerrectorado de Innovación","name":"Vicerrectorado Innovación","surname":"Universidad Camilo José Cela","rank":1,"pid":null,"affiliation":null}],"resulttype":{"classid":"dataset","classname":"dataset","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"esl/spa","classname":"Spanish","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"Ciencias de la Comunicación","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Redes sociales","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Comunicación","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Información","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Desinformación","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"III Liga de Debate CICAE","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Instantaneidad","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Información periodística","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Fake news","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"5910.02 Medios de Comunicación de Masas","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"Jorge Gallardo - Liga de Debate CICAE","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"Jorge Gallardo, profesor de Derecho en la Universidad Camilo José Cela (UCJC), Doctor en Comunicación Audiovisual y MBA en Empresas Audiovisuales. Subdirector de Espejo Público en Antena 3 Noticias. \n\nEn esta ocasión, Jorge Gallardo habla sobre las redes sociales, cómo han transformado la manera en la que nos comunicamos y nos informamos. \n\nIII Liga de Debate CICAE - UCJC http://ligacicae.ucjc.edu/\n\nLa Universidad Camilo José Cela (UCJC) y la Asociación de Colegios Privados e Independientes –Círculo de Calidad Educativa (CICAE) – organizan la tercera edición de esta gran liga de debate académico. El formato es al estilo inglés, similar al de la Oxford Union, donde algunos jóvenes se reunían a debatir sobre temas de la más candente actualidad y polemizaban con la intención de formarse en tan valoradas habilidades.\n\nLa Liga de Debate CICAE-UCJC es una ocasión única para los alumnos de ponerse en contacto con herramientas tan útiles como la oratoria y la comunicación efectiva. Pero, sobre","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2018-10-23","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":{"value":"http://creativecommons.org/licenses/by-nc-nd/4.0/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0024","classname":"Film","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"url":["http://hdl.handle.net/20.500.12020/796"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"dateofacceptance":{"value":"2018-10-23","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"storagedate":null,"device":null,"size":null,"version":null,"lastmetadataupdate":null,"metadataversionnumber":null,"geolocation":[]} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055872001,"id":"50|od______3989::d791339867bec6d3eb2104deeb4e4961","originalId":["od______3989::d791339867bec6d3eb2104deeb4e4961"],"collectedfrom":[{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null}],"pid":[],"dateofcollection":"2020-03-03T13:05:34.586Z","dateoftransformation":"2020-03-03T13:06:57.721Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2020-03-03T13:05:34.586Z","altered":true,"baseURL":"http%3A%2F%2Frepositorio.ucjc.edu%2Foai%2Frequest","identifier":"oai:repositorio.ucjc.edu:20.500.12020/645","datestamp":"2018-04-12T07:59:27Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Universidad Camilo José Cela, Vicerrectorado de Innovación","name":"Vicerrectorado Innovación","surname":"Universidad Camilo José Cela","rank":1,"pid":null,"affiliation":null}],"resulttype":{"classid":"dataset","classname":"dataset","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"esl/spa","classname":"Spanish","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"Transferencia de Conocimiento e Innovación","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Innovación","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Investigación","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Ciencia","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Tecnología","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"UCJC Open Science Day 2018","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"El UCJC Open Science Day tiene como objetivo mostrar las actividades de investigación llevadas a cabo por investigadores de la Universidad Camilo José Cela (UCJC) a todos los miembros de la UCJC.","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2018-04-10","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":{"value":"http://creativecommons.org/licenses/by-nc-nd/4.0/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0024","classname":"Film","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"url":["http://hdl.handle.net/20.500.12020/645"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"dateofacceptance":{"value":"2018-04-10","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"storagedate":null,"device":null,"size":null,"version":null,"lastmetadataupdate":null,"metadataversionnumber":null,"geolocation":[]} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055872022,"id":"50|od______3989::d90d3a1f64ad264b5ebed8a35b280343","originalId":["od______3989::d90d3a1f64ad264b5ebed8a35b280343"],"collectedfrom":[{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null}],"pid":[],"dateofcollection":"2020-03-03T13:05:34.912Z","dateoftransformation":"2020-03-03T13:06:57.747Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2020-03-03T13:05:34.912Z","altered":true,"baseURL":"http%3A%2F%2Frepositorio.ucjc.edu%2Foai%2Frequest","identifier":"oai:repositorio.ucjc.edu:20.500.12020/795","datestamp":"2018-11-06T15:43:10Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Universidad Camilo José Cela, Vicerrectorado de Innovación","name":"Vicerrectorado Innovación","surname":"Universidad Camilo José Cela","rank":1,"pid":null,"affiliation":null}],"resulttype":{"classid":"dataset","classname":"dataset","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"esl/spa","classname":"Spanish","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"Ciencias de la Comunicación","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Unión Europea","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Desinformación","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Política","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Periodismo","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Ciudadanos europeos","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Democracias","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Estado de derecho","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Derechos humanos","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"5910.02 Medios de Comunicación de Masas","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"Ramón Luis Varcárcel - La Unión Europea ante el reto de la desinformación","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"Conferencia de Ramón Luis Valcárcel, vicepresidente del Parlamento Europeo, en el Campus de Almagro de la Universidad Camilo José Cela (UCJC) bajo el título \"La Unión Europea ante el reto de la desinformación\", en la que ha alertado sobre el alcance de la desinformación en las democracias y sobre cómo pone en peligro los derechos de los ciudadanos europeos. También ha participado el rector de la UCJC, Samuel Martín-Barbero.","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2018-10-11","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":{"value":"http://creativecommons.org/licenses/by-nc-nd/4.0/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0024","classname":"Film","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"url":["http://hdl.handle.net/20.500.12020/795"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"dateofacceptance":{"value":"2018-10-11","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"storagedate":null,"device":null,"size":null,"version":null,"lastmetadataupdate":null,"metadataversionnumber":null,"geolocation":[]} \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/no_updates/dataset_10.json.gz b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/no_updates/dataset_10.json.gz deleted file mode 100644 index bd29d59ae948f260084f492e11d2439e22d96d1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6736 zcmV-W8n5LaiwFp=uZ>;+17u-zVRL14UokK)YIARH0PS7flG`?xzMrQ+scNcbs?=(d z67_f2X*-!t*@??`rYbw0N`WLKp+f=+NOq!RUA1|JeF9(l!WUDy%dKwn6#FE54giXj z`ajbiGB$Qy8MOou2j@FD0C7GX{M1WmLC?fO_U1qJxVYdsk5bl~FKC*xK76xaO0i`3 zMZ!{6uq4{(UzmvNvV|)1qBrk(gIUkk#NXFSUNAv*$sYVr|4rk9OMwl?Da~^Zt@QFu z&a<^t#XMFr&%dYXw{ykTGUtU<8>p^}3YxLI6wc!n%b0#}B3Lo6+dk24=esiYiPw~R z{kq?Sc8hWi>S6`YSYFU<-JAR2H1xu7I-btF8FU(33cdf9$v67{hO_BxKKFto36mfW zg212okr&OPWV9F#<0+es!vM7<6<=~e(=&L$KYI79{!h?~Oj8yEFbgF!c*IY=Z`lT9 zk!vOrNfkbAKF8-lV;3|nv9piZdix9NiadhW3z`yk^wsI-r%ub8rMeYW7ch_>L2Eb5L(_t3BmpNtE2263>iH9> zvnq=9pNA)Z4nBo{JN0onDC6^Zz>*Ta23hov-<8l7qMI;LSOY~t=U3I62i_p`yn&BW z9f#wqeqbV@TCuVkNm4i8|^rY%tY znV0ICD)1v9`YkvuJDPE5Lwkz_Pr1cdkM{mv%P&=V&eK$qPniIwm>r(E4|{p)L-LP}A9>(K)^FQaqt6nh^3l!H&?G$#ooDJ7>eD+P~f%#96P zG8?|43C}a>U}zJD3$8%-2~8Xft-`Q;mjM7Gk^hJ`?v4l z&H9;4x9iRZ2~hM`rg1Fl9z7z)atf%!3$JPV-xCeO1MZkI4?v4fFZGj|FFDJ zv|vkq!}~@?xgh3=`<>eR;jjaU)+sO8H~R&e(jOFY5dWSbch*FefG?zifE-YZ=PV%> z-y7Bp4&Khet9Q~x6Jz60o1*JYG%!hi;j7>X(#l|!{h7!QU)k>`pp zS4CY&)G)yZjCiKc*-nA@H5a)ZNdQ;MWAJEuqsm5&W5s9zZVWtP29oKZu`Qh+N1G!N zABp66H1Licw)Yr(d!RLC{_@%5FAgO8at+hUiLP*k80JaeWHPxX#=2MFbq)OG;Iiih zql30T0m`glClBF zb9{+afpd$U+EK_<#ueG5cZt;W;G()&?crxNCDGiuSjH=u%^1y)RZuy`!(Zc4VfQ!H z?@IefmefRy9E1dS+nf;-cERI%e&j#yKI_$9MdL7py^4@yhpE{`vY(KRNs#iX$10uH{IE$uypX{%9O5W>GXvg2)@s!f~>Q;xL{>y<0evw^jcS zawP9Tx0}rFNw*7zv-e52GxD@ew+n(v?-Jc^a^(9*e)!TK&x6@K4Bs!^?m50rKHI)k zNOpTlRnZ`sRe#nrGgF%V_Ooh`+HPanIhxs>XlCeMF7!M6r|_B&iy5+kUs3`C6Py}z z`?76r+C7F}3yDx++x$YhxJ9dYJZFW2pj`-@U+Pr6=!~37vBY;@@|uLkfde!u;uGu=g|CBuMft_1T$fk1-?S*4#ZNx>$t*x-BXAGdBKQc7_8a;LP~)` zlnKW^TGd}jvO+GyE-nL_fHwk?H%BB+y>4AhI+yyZ+sMZPN&@n^|&y_hio`5OwoZb z1@1<5IZWX^vI|qVFvSCgDQ4bma&4GmF`bRZqj*H)Q4C)#m={m{(Qp{~laT6T;x~pV zZmZtSFva-3VTy3{KBE-lPDClD-jzuKFiJ7PqyR&2K6=kd0d9O9?UQ@&q}#{t>OI-3 z#DDu)*ZO(@Rhrf6K*-esVNL+cxpScr7aI9+XO`wZ@D3bSZ=$$k9W8UrGjP8!M=tbm zac4SO1>>3B7|k#5j5=W21SS~yJ}k0e!iTpGb23d&E052aih0c4xamr4s~$8`Fug&4 zzZC*GJw5sKQB4kafv-Q1J={I;^$Dyp0s7}MV@mdGUz zOeliqOZ(iMq}z9b(JMTE6(m|wj6~&BDR?=x@i&Iypf!@ObjZjWFFXRRcaA^v{rSCW zE#Vq`cu^zt%2gS33&Tg*_H7}plo)YZGi9a9wr^l~Eil^^RK%zfHpeQ5ST#6!C9JMN z#)xm<>P{3Cz5qQL3}cT| ze>RI|Vd5v@csvb#x|k%xI1FzIVcuH3gCWdtFb;?J3}H^j?=ObAlc)U{rhj7$)1S?U zQy0T@F-#Z3{8*-z{SXb(z+FhDbs+x669rmxNVJZG^Glrp0p4aEp`zvUzqsmFGUe{r zX(xsRv$3lj#)e*IIZzyv!ohPZlj6yKbk@9@tQw0h43ow(TeE^&vPEN%^$AoZpO-pj zosv_T-vF#5Q*_ZJ?oOuIgL$7!0k5v``~}P5qY3bTR-GNbXHXvZy}+u##_$L)x%n6| zQYKc^p2yYg-At5#_Sf}`9exjeW#5%N<&ols{y^c49%N#T`MsiMBve#Krjx5D9Rh7r zUA!)&7i&hw7;5KbO~t_4rJy9Ef1L^cX#De&DJeEV#kschjj`YwK(u40v4o2lpa9j0S-} zeP5)9TAubv4>noGm86H^d^DT~eygO1zk>&YAs?f6(rLuVnGo_~7yq+QIVe_@xpeos zV>CEM!$&-CxbSVqKscofwtXjDaH`$d?Lwcvb|AExB_f5TAM`EZI$Ng;2)65(nh`z+ zMVnB3!UUeT<<3Dl3WI~^4itv7{h;s>vGY68GUx=(8zR_}n$L(~nO8^8W4j`&kJ;b6 zN_HfME*iz%Nes_!W)tKLQxI(5G;=VByCp#Hz=rIHgBX6d&a}zW+*SHpZhJ8zbRnJ4BoJ6B^I8vP$G|On zGC~g;o5~{I{$ehj-o7C@$NfE>;Nh|+YyDxm^*t^GvMdf(f0}WD1@kh~VpYmBspWfL zl=`0Q!-fzpkx><6$3&q_;`x|@>Dj(54*FhauFx&Y=$z@C?I>~qGjFDoP&87to3s=b zJ6%d=ls|AC2Xqf)uy7IcHBB>}VI-#!Q=l+>HZnfwrc9usT7qP61#XoX3(M#RFhm9m zt5UmHRFghthL?4IjVg)#cO@VNKb@C)(LmS_nvG(pC=?`454k9spF&Ala5O(#62w(F z+6w40D5iyjk~e`U0> zn+i~{0p3?&Ohj*-%7%St=aAcBfyly8H(a{DwJH1X6-BUg&lJhnxm0~y%luB!#6b6U zqN2ubtg|SX$~Zh68))|TRZpw`85#zPb~ru+_?hi5Y1M|_-3BSZbmFwk4V{k*+?39Z zN;hQtD<}*;X*C>Ljv;wLJ#$;ZtKPmIcJt?zNUmj~hu7}*1^6887Q09xt3f%KoV6w^ z!?&7(5e=W4I1#ioRw5hCXuA|UfnY!^5niZJ)2w8rza8Y(XKC*N9b-4K&+J4I%T&8t ztAU5~y_lVcl9OeFTLyo_6jrdfzO#ao7dn5AS;5rla6ZIdxtQ?-Qqd+yzIWt}old(( zMf*2{WDZS7Mf=#XbyT#DP|>_jQ_y z)LSN}RLDNO;FhX!(|Pr0O(koT?m6DrgYw2sWme)Is7vzEdeHMJRo{YN7fX^DSLonq z6%MA8VdoM?OX`Rjt&fe^rCn*6x|iY6aEC$%P!I`Aq;gKFT`11Z$P>QQi8~&#h~mvA zXQwBRZ@t;XVe|g68TC=>ruYTL3yCncnK0bF9-jacSrbr=Wan=5bQSnm0rKqGkOn79>(Fsi@dPNcj-Rx=Q%2L9OVe!UDF# ziRmx}eQw`oc(oCEoD#EVr>Q=;J(w5RC%`$~zRmjp0rZh7!$!fTzWf0yB&Y`o@Fh}c zJ`6MuJv!h10;X%oNs5)i@K{W{Tv?C`mhHAjG+!mABGHT>7?Gvz^M|!Ex*LlL*nM1km26}xC8P`U*u(#Bop|o z1w#)5K!ajtgdPz0!0vY0^n$yWCS?wHX&^0EQQ4_mEK|CsyJ* z1((jz7V`+6R%eg0dE9EH_L~~FR=;kN4~@ZAG(_+?Och2(TN?LcxBrp|qP9_J6scW2 zF{Pl(;CsPK8;Y6Gm-W$9TiYXA>{woBzuVoou-yZ)fu=IKsg3%obM$hn0a&tb( z#a!CW@)FCHbS$E_Q-9&+rMnfSZ6K=T1Nr51mkyW?xGA1zE~`tcKs;wQwspZ3#LRV-C?m@%6oK%VYZ7Z`U@{{m}Y|slV_$esOl6oNxd@A0ZDq>a?P<` zx@a3+N`Hib^Mb{q@*7kWRlpFz?vSUDNKs{pxW@XB1@m0ylzd*|OY|N&XYbZ2THWk) zb>gHtSB=TD0-Xcl&da5y&Cq(vuc#A;;{@}*JmrUa!X!nQVaEi*D=jI_LnyXyW6g}v z>TQljOod`77ezzgCYO+AKtLy}eWx9LL8m}jLwU<<;9|uiOJ1pOnxZhq;D2Vg}ujm6SiVw2+gc`!*rwfx)<{*WWZP4aesaQ?> z+Uyh1I73E?<{sRhjLMoPk`y@RR}yF-(C(RlhZbdFw`TSb`-IDE`!+GSq~vchU+aB6 zKfuCY!lZ`oaC6xDGraw)0q9ejD4z7Io}RKt05RGKbWP~|R4`D!EBX4W(Pd~ThR@L_ zG+~-Ck(l%>Oj;mNb^ToiC!OtwTD}Ol7h~{y7Gc4&mSOU4OTg2nRkoE5rf@CW7r(j*u(J)t>SnoC1dn<5JaIy{WU zOeceq=y~v0Fhrzs?NWX%aBI0Df#t+B$8`FyS3RAf>GBXnO(&S-yp%>@O?N`UkkPlI zBx5mdaAnmyUOiyz1ysKtyvW}(eM629w)CSRp~YO;{@L;KHFg!Ci(nA0w(soCcrb>g zW+W{r^t$R%N(#Kc(XyU28EYX;jxpOP_DJjSRd26hP2mAcF1dCGn9coFk5GKx#rCZs zcqzG5)Y8*5X-d#tqOc~dY)3)_d(WA&x#9aDYKGgGn8*&A|GWfOr*m9Mq@|%Z+r9y~ z@=HFnk6_RU29+>F0y>t#tf$?OL0S(g_yY64ZS=FCLv;HNpPT?HT$CGzS+iV-@4@p3 zg-)lAIrLGY>6k+wF1C(2)Dh;;wA0KXHw8N8kYf%#By(sIde<_C7IDOe)Efp^_rr4p< zuCv1ZEcnN8{pzsj%EWJzx5RA~hH&P4123qu_vqX- z&5R_P58@ILc7_c3xl~I=KBGv*O5`<3y{-q#@fy1b^WAxk`|#J4L1O`mAvxskB*s2@ zB=u#AP-TDEpOoMZ0JGAh_WI-mi&RNTo4;Z*uNP(1xRy~T3pcS9=@?Bn_OjZfQ?3)aH zVI=zfIeI#s60Be<*6MI6!CXo(mlDjS1pCM)SeFmwk3{TqJhKnka2(I96FjqVr+H@1 zBRig%c%5W?%gMvd7~pgccjfr+)&}UrT6(4QmaLP+q8&N!;!1P=p-66`BCyPwR3e&qg zAX)|DF}xy~H;}{}S#)r;J1#T`Ia!q%x+{lHhXZ&b`u zJeaQ|){R$1Lh<;bKKoeISHs-#1;()_x@Zn}XHT3;(PY8yTTN=MrcW?TfQRh4Iq{4q zWuH-%(oEB3jUnO9DduJtnypLiB2LnbE|t6wQ6i$}5+72)I~yJ-f7Sav28(yC)MxBh zc>57kdUiMGl+ArSsJN@^o66XS-P(+7Y+ZA>9}iVysWnSEb}`jX(au=*fNp$wsXZVs z@&1(UTfEVyzD6gJrax7#0!s_&lNU5A;g_dSaQjXieL_{llyr2Fdku%X9P09Yr&C84 mX+%97UBuBvK2*90Mg_Y~7jYih(M4YW>Hh(z`8FgaPyqm7df$-% diff --git a/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/no_updates/datasource b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/no_updates/datasource new file mode 100644 index 000000000..e69de29bb diff --git a/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/no_updates/otherresearchproduct b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/no_updates/otherresearchproduct new file mode 100644 index 000000000..e69de29bb diff --git a/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/no_updates/publication b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/no_updates/publication new file mode 100644 index 000000000..e69de29bb diff --git a/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/no_updates/software b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/no_updates/software new file mode 100644 index 000000000..e69de29bb diff --git a/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_datasourcewithconstraints/dataset_10.json b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_datasourcewithconstraints/dataset similarity index 100% rename from dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_datasourcewithconstraints/dataset_10.json rename to dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_datasourcewithconstraints/dataset diff --git a/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_datasourcewithconstraints/datasource b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_datasourcewithconstraints/datasource new file mode 100644 index 000000000..e69de29bb diff --git a/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_datasourcewithconstraints/otherresearchproduct b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_datasourcewithconstraints/otherresearchproduct new file mode 100644 index 000000000..ae580eab9 --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_datasourcewithconstraints/otherresearchproduct @@ -0,0 +1,10 @@ +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055422336,"id":"50|od______2017::0750a4d0782265873d669520f5e33c07","originalId":["od______2017::0750a4d0782265873d669520f5e33c07"],"collectedfrom":[{"key":"opendoar____::2017","value":"Repositório Científico do Instituto Politécnico de Viseu","dataInfo":null}],"pid":[],"dateofcollection":"2018-05-08T17:28:57.843Z","dateoftransformation":"2019-11-30T04:19:48.897Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2018-05-08T17:28:57.843Z","altered":true,"baseURL":"http://repositorio.ipv.pt/oai/openaire","identifier":"oai:repositorio.ipv.pt:10400.19/4572","datestamp":"2017-05-05T02:01:39Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Godinho, Maria do Céu","name":"Maria Do Céu","surname":"Godinho","rank":1,"pid":null,"affiliation":null},{"fullname":"Costa, Cristina Amaro","name":"Cristina Amaro","surname":"Costa","rank":2,"pid":null,"affiliation":null}],"resulttype":{"classid":"other","classname":"other","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"por","classname":"Portuguese","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"Pesticidas","qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Proteção integrada","qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"O uso dos pesticidas em Portugal. Que caminhos?","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"A agricultura está inevitavelmente associada a um conjunto de variáveis no ecossistema, onde estão incluídos as pragas e doenças nas culturas e presença de outras plantas que competem pelo alimento, água e luz. Estes agentes são responsáveis por perdas no rendimento que, normalmente, não são aceites pelo agricultor. E é, por isso, que se recorre aos pesticidas: é preciso proteger as culturas do ataque dos seus inimigos.\nTambém é verdade que a agricultura é a atividade desenvolvida pelo Homem que mais se aproxima dos sistemas naturais e tem, assim, um papel central na produção de diversos serviços do ecossistema, como a biodiversidade agrícola, qualidade do solo e água, estabilidade climática e manutenção da paisagem. Ora, o uso dos pesticidas introduz efeitos negativos em todo este sistema: degradam o solo, reduzem a qualidade e disponibilidade de água, causam poluição e perda de habitats selvagens e de biodiversidade. Aqui reside a encruzilhada na proteção das culturas.\ninfo:eu-repo/semantics/publishedVersion","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2016-07-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":{"value":"Quercus","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[{"id":"http://zenodo.org/communities/chicago-covid-19"}],"externalReference":[],"instance":[{"license":null,"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0020","classname":"Other ORP type","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::2017","value":"Repositório Científico do Instituto Politécnico de Viseu","dataInfo":null},"url":["http://hdl.handle.net/10400.19/4572"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::2017","value":"Repositório Científico do Instituto Politécnico de Viseu","dataInfo":null},"dateofacceptance":{"value":"2016-07-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"contactperson":[],"contactgroup":[],"tool":[]} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055423621,"id":"50|od______2017::1bd97baef19dbd2db3203b112bb83bc5","originalId":["od______2017::1bd97baef19dbd2db3203b112bb83bc5"],"collectedfrom":[{"key":"opendoar____::2017","value":"Repositório Científico do Instituto Politécnico de Viseu","dataInfo":null}],"pid":[],"dateofcollection":"2019-02-25T04:30:56.994Z","dateoftransformation":"2019-11-30T04:19:58.463Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2019-02-25T04:30:56.994Z","altered":true,"baseURL":"http://repositorio.ipv.pt/oai/openaire","identifier":"oai:repositorio.ipv.pt:10400.19/5415","datestamp":"2019-02-23T03:01:23Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Brandão, Daniela","name":"Daniela","surname":"Brandão","rank":1,"pid":null,"affiliation":null},{"fullname":"Duarte, Natália","name":"Natália","surname":"Duarte","rank":2,"pid":null,"affiliation":null},{"fullname":"Araújo, Lia","name":"Lia","surname":"Araújo","rank":3,"pid":null,"affiliation":null},{"fullname":"Alves, Sara","name":"Sara","surname":"Alves","rank":4,"pid":null,"affiliation":null},{"fullname":"Teixeira, Laetitia","name":"Laetitia","surname":"Teixeira","rank":5,"pid":null,"affiliation":null},{"fullname":"Ribeiro, Oscar","name":"Oscar","surname":"Ribeiro","rank":6,"pid":null,"affiliation":null}],"resulttype":{"classid":"other","classname":"other","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"eng","classname":"English","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"Quality of life","qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Centenarians","qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"Centenarians´ quality of life and the role of health and living context","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"Introduction: The interest of the scienti􏰀c community to study the centenarian population has been growing due to the signi􏰀cant expansion of life expectancy and human longevity. Evidences about their quality of life (QoL) are, nevertheless, still limited. Different conceptualizations of QoL, the overvaluation of the negative aspects of advanced age and the heterogeneity of the oldest old are some issues that could explain the dif􏰀culties in this assessment. Objectives: This study aims to analyze the perceived QoL in a sample of centenarians and analyze if there are significant life context (community vs institutional) and health (objective and subjective perception) differences.\nMethods: A subsample of 59 Portuguese centenarians who participated in the PT100_Oporto Centenarian Study, conducted in 2013 was considered. Descriptive and chi-square analysis were conducted.\nResults: Most centenarians perceived their QoL in a very positive manner (50.8% rated it as “good”, 6.8% as “very good” and 3.4% as “excellent”); 28.8% perceived it as “acceptable” and 10.2% as “bad”. No significant statistical differences were found for the considered variables.\nConclusions: Centenarians seem to present high levels of perceived QoL, which can be associated with a great ability to adapt to adverse situations that occur through their lives. Neither contextual and health aspects seem to in􏰂uence the perception of QoL in this particular sample study. Nonetheless, more research is \nneeded to understand the speci􏰀cities of the QoL in the centenarian population, namely the role of psychological and social variables.\ninfo:eu-repo/semantics/publishedVersion","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2014-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[{"id":"http://zenodo.org/communities/edenis"},{"id":"http://zenodo.org/communities/aginfra"}, {"id":"http://zenodo.org/communities/primefish"}],"externalReference":[],"instance":[{"license":null,"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0020","classname":"Other ORP type","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::2017","value":"Repositório Científico do Instituto Politécnico de Viseu","dataInfo":null},"url":["http://hdl.handle.net/10400.19/5415"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::2017","value":"Repositório Científico do Instituto Politécnico de Viseu","dataInfo":null},"dateofacceptance":{"value":"2014-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"contactperson":[],"contactgroup":[],"tool":[]} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055423836,"id":"50|od______2017::1e400f1747487fd15998735c41a55c72","originalId":["od______2017::1e400f1747487fd15998735c41a55c72"],"collectedfrom":[{"key":"opendoar____::2017","value":"Repositório Científico do Instituto Politécnico de Viseu","dataInfo":null}],"pid":[],"dateofcollection":"2019-02-25T04:30:56.996Z","dateoftransformation":"2019-11-30T04:19:59.556Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2019-02-25T04:30:56.996Z","altered":true,"baseURL":"http://repositorio.ipv.pt/oai/openaire","identifier":"oai:repositorio.ipv.pt:10400.19/5422","datestamp":"2019-02-23T03:01:29Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Brandão, Daniela","name":"Daniela","surname":"Brandão","rank":1,"pid":null,"affiliation":null},{"fullname":"Ribeiro, Oscar","name":"Oscar","surname":"Ribeiro","rank":2,"pid":null,"affiliation":null},{"fullname":"Araújo, Lia","name":"Lia","surname":"Araújo","rank":3,"pid":null,"affiliation":null},{"fullname":"Paul, Constança","name":"Constança","surname":"Paul","rank":4,"pid":null,"affiliation":null}],"resulttype":{"classid":"other","classname":"other","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"eng","classname":"English","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"Oldest old","qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Census","qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"What about the Portuguese oldest old? A global overview using census data","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"Background\nThe older population is itself aging, and achieving an advanced age is becoming more common worldwide. In Portugal, individuals aged 80+ represent 5.6 % of the total population and 26.5 % of the popu- lation were aged 65 and over in 2011. Having a national profile on this population will give important information to develop interven- tion programs and identify the areas requiring most attention. Ob- jective: This study aims to provide a profile of the Portuguese oldest old, as given by the last national census data.\nMethods\nThe characteristics of all residents aged 80+ (N = 532,219) were ana- lysed considering socio-demographic information (gender, marital status, education, type of residence, place of birth, income) and the existence of difficulties in functional, sensorial and cognitive activities due to health problems or ageing.\nResults\nThe majority of the most aged are females (64.5 %), widowed (53.9 %), and present low educational levels (46.1 % never attended school and 31.6 % do not know how to read/write). Own pensions constitute the main source of income (96.3 %) and the majority live in private households (88.8 %), with 43.2 % currently living in the place where they were born. The majority (73.0 %) reported major difficulties in at least one functional activity – bathing/dressing, walk- ing/climbing stairs, seeing, hearing, memory/concentration, under- standing others/being understood.\nConclusions\nThe high percentage of oldest old living in private households and the presence of functional limitations point to the importance of in- formal care and community care services to support this population. Further studies paying attention to their needs and utilisation of ser- vices are required.\ninfo:eu-repo/semantics/publishedVersion","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2016-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[{"dataInfo":[{"deletedbyinference":false,"inferenceprovenance":"propagation","inferred":true,"invisible":false,"provenanceaction":{"classid":"propagation:community:productsthroughsemrel","classname":" Propagation of result belonging to community through semantic relation","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.85"}],"id":"ee"},{"dataInfo":[{"deletedbyinference":false,"inferenceprovenance":"propagation","inferred":true,"invisible":false,"provenanceaction":{"classid":"propagation:community:productsthroughsemrel","classname":" Propagation of result belonging to community through semantic relation","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.85"}],"id":"fam"},{"dataInfo":[{"deletedbyinference":false,"inferenceprovenance":"propagation","inferred":true,"invisible":false,"provenanceaction":{"classid":"propagation:community:productsthroughsemrel","classname":" Propagation of result belonging to community through semantic relation","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.85"}],"id":"covid-19"},{"id":"http://zenodo.org/communities/c2smart"}],"externalReference":[],"instance":[{"license":null,"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0020","classname":"Other ORP type","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::2017","value":"Repositório Científico do Instituto Politécnico de Viseu","dataInfo":null},"url":["http://hdl.handle.net/10400.19/5422"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::2017","value":"Repositório Científico do Instituto Politécnico de Viseu","dataInfo":null},"dateofacceptance":{"value":"2016-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"contactperson":[],"contactgroup":[],"tool":[]} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055424072,"id":"50|od______2017::210281c5bc1c739a11ccceeeca806396","originalId":["od______2017::210281c5bc1c739a11ccceeeca806396"],"collectedfrom":[{"key":"opendoar____::2017","value":"Repositório Científico do Instituto Politécnico de Viseu","dataInfo":null}],"pid":[],"dateofcollection":"2018-11-29T04:22:08.265Z","dateoftransformation":"2019-11-30T04:20:00.603Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2018-11-29T04:22:08.265Z","altered":true,"baseURL":"http://repositorio.ipv.pt/oai/openaire","identifier":"oai:repositorio.ipv.pt:10400.19/1089","datestamp":"2018-11-26T15:31:28Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Avelar-Rosa, Bruno","name":"Bruno","surname":"Avelar-Rosa","rank":1,"pid":null,"affiliation":null}],"resulttype":{"classid":"other","classname":"other","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"por","classname":"Portuguese","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"Treino de Jovens","qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Iniciação Desportiva","qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Metodologia","qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Didática","qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"Treino de Jovens: Princípios Orientadores","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"Documento que recolhe os traços gerais da intervenção do treinador de jovens, considerando as possíveis orientações pedagógicas, os eixos de evolução do praticante, os diferentes modelos didáticos de iniciação, os momentos idóneos para a intervenção nas diferentes qualidades motoras e a relação entre o treinador de jovens e os restantes agentes implicados no processo (destacando-se, naturalmente, os pais).","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2010-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":{"value":"Confederação do Desporto de Portugal","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[{"dataInfo":[{"deletedbyinference":false,"inferenceprovenance":"propagation","inferred":true,"invisible":false,"provenanceaction":{"classid":"propagation:community:productsthroughsemrel","classname":" Propagation of result belonging to community through semantic relation","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.85"}],"id":"beopen"},{"dataInfo":[{"deletedbyinference":false,"inferenceprovenance":"propagation","inferred":true,"invisible":false,"provenanceaction":{"classid":"propagation:community:productsthroughsemrel","classname":" Propagation of result belonging to community through semantic relation","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.85"}],"id":"fam"},{"dataInfo":[{"deletedbyinference":false,"inferenceprovenance":"propagation","inferred":true,"invisible":false,"provenanceaction":{"classid":"propagation:community:productsthroughsemrel","classname":" Propagation of result belonging to community through semantic relation","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.85"}],"id":"covid-19"},{"id":"http://zenodo.org/communities/primefish"}, {"id":"http://zenodo.org/communities/c2smart"}] ,"externalReference":[],"instance":[{"license":null,"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0020","classname":"Other ORP type","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::2017","value":"Repositório Científico do Instituto Politécnico de Viseu","dataInfo":null},"url":["http://hdl.handle.net/10400.19/1089"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::2017","value":"Repositório Científico do Instituto Politécnico de Viseu","dataInfo":null},"dateofacceptance":{"value":"2010-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"contactperson":[],"contactgroup":[],"tool":[]} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055424163,"id":"50|od______2017::225a8382b6a3db76fba97c2dc146f937","originalId":["od______2017::225a8382b6a3db76fba97c2dc146f937"],"collectedfrom":[{"key":"opendoar____::2017","value":"Repositório Científico do Instituto Politécnico de Viseu","dataInfo":null}],"pid":[],"dateofcollection":"2018-05-08T17:26:56.251Z","dateoftransformation":"2019-11-30T04:20:01.127Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2018-05-08T17:26:56.251Z","altered":true,"baseURL":"http://repositorio.ipv.pt/oai/openaire","identifier":"oai:repositorio.ipv.pt:10400.19/3290","datestamp":"2016-07-14T02:01:33Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Millenium","name":null,"surname":null,"rank":1,"pid":null,"affiliation":null}],"resulttype":{"classid":"other","classname":"other","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"por","classname":"Portuguese","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[],"title":[{"value":"Referências bibliográficas ao estilo APA","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[],"dateofacceptance":{"value":"2016-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[{"id":"primefish"}],"externalReference":[],"instance":[{"license":null,"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0020","classname":"Other ORP type","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::2017","value":"Repositório Científico do Instituto Politécnico de Viseu","dataInfo":null},"url":["http://hdl.handle.net/10400.19/3290"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::2017","value":"Repositório Científico do Instituto Politécnico de Viseu","dataInfo":null},"dateofacceptance":{"value":"2016-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"contactperson":[],"contactgroup":[],"tool":[]} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055424299,"id":"50|od______2017::241d59362b075000e89d276e7bb6badc","originalId":["od______2017::241d59362b075000e89d276e7bb6badc"],"collectedfrom":[{"key":"opendoar____::2017","value":"Repositório Científico do Instituto Politécnico de Viseu","dataInfo":null}],"pid":[],"dateofcollection":"2019-09-06T04:39:29.25Z","dateoftransformation":"2019-11-30T04:20:01.631Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2019-09-06T04:39:29.25Z","altered":true,"baseURL":"http://repositorio.ipv.pt/oai/openaire","identifier":"oai:repositorio.ipv.pt:10400.19/1190","datestamp":"2019-09-04T02:00:41Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Menezes, Luís","name":"Luís","surname":"Menezes","rank":1,"pid":null,"affiliation":null},{"fullname":"Ribeiro, António","name":"António","surname":"Ribeiro","rank":2,"pid":null,"affiliation":null},{"fullname":"Martins, Ana Patrícia","name":"Ana Patrícia","surname":"Martins","rank":3,"pid":null,"affiliation":null},{"fullname":"Rodrigues, Cátia","name":"Cátia","surname":"Rodrigues","rank":4,"pid":null,"affiliation":null},{"fullname":"Gomes, Helena","name":"Helena","surname":"Gomes","rank":5,"pid":null,"affiliation":null},{"fullname":"Novo, Sónia","name":"Sónia","surname":"Novo","rank":6,"pid":null,"affiliation":null}],"resulttype":{"classid":"other","classname":"other","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"por","classname":"Portuguese","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"Matemática","qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Capacidades tranversais","qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"Penso, comunico, resolvo","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"Esta brochura destina-se a alunos do ensino básico (1.º a 9.º anos), tendo como objetivo fornecer informação sobre as capacidades transversais que o novo Programa de Matemática português (2007) veio destacar.\nEscola Superior de Educação de Viseu","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2010-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":{"value":"ESEV","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[{"id":"http://zenodo.org/communities/fake"}],"externalReference":[],"instance":[{"license":null,"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0020","classname":"Other ORP type","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::2017","value":"Repositório Científico do Instituto Politécnico de Viseu","dataInfo":null},"url":["http://hdl.handle.net/10400.19/1190"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::2017","value":"Repositório Científico do Instituto Politécnico de Viseu","dataInfo":null},"dateofacceptance":{"value":"2010-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"contactperson":[],"contactgroup":[],"tool":[]} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055424626,"id":"50|od______2017::28fe553056801d4a764edac6bec334ec","originalId":["od______2017::28fe553056801d4a764edac6bec334ec"],"collectedfrom":[{"key":"opendoar____::2017","value":"Repositório Científico do Instituto Politécnico de Viseu","dataInfo":null}],"pid":[],"dateofcollection":"2019-02-25T04:30:56.998Z","dateoftransformation":"2019-11-30T04:20:03.799Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2019-02-25T04:30:56.998Z","altered":true,"baseURL":"http://repositorio.ipv.pt/oai/openaire","identifier":"oai:repositorio.ipv.pt:10400.19/5432","datestamp":"2019-02-23T03:01:24Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"da Costa Teixeira, Laetitia","name":"Laetitia","surname":"Da Costa Teixeira","rank":1,"pid":null,"affiliation":null},{"fullname":"Araújo, Lia","name":"Lia","surname":"Araújo","rank":2,"pid":null,"affiliation":null},{"fullname":"Ribeiro, Oscar","name":"Oscar","surname":"Ribeiro","rank":3,"pid":null,"affiliation":null},{"fullname":"Jopp, Daniela","name":"Daniela","surname":"Jopp","rank":4,"pid":null,"affiliation":null},{"fullname":"Paul, Constança","name":"Constança","surname":"Paul","rank":5,"pid":null,"affiliation":null}],"resulttype":{"classid":"other","classname":"other","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"eng","classname":"English","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"Europe","qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Centenarians","qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"Centenarians in Europe","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"In the last decade, the number of centenarians world- wide has increased. Following this tendency, the number of centenarian studies has also exponentially augmented. Given the complexity to conduct research with centenarians, elementary information on this specific age group remains unknown at a European level. This paper compares basic characteristics of centenarians from 32 European coun- tries based on Census 2011. Results revealed that France is the country with higher ratio of centenarians, followed by Italy and Greece; on the other hand Croatia, Romania and Bulgaria present the lower ratio. The distribution accord- ing to gender is similar for all countries, with higher ratio of women reaching 100 years old. Different patterns of education level were found on countries where this infor- mation was reliable: Portugal and Greece are the countries with lower levels of education, with more than half without formal education; Finland, UK and Iceland are the countries with higher levels of education, with all centenarians having at least lower secondary education. Analysing the residence situation (living in the community or living in the institu- tion), Romania, Bulgaria, Lithuania, Greece and Latvia are the countries that present higher percentages of centenarians living in the community; Iceland is the country with lower percentage of centenarians living in the community. A posi- tive correlation between the number of centenarians and the percentage of Total Health Expenditure of GDP is observed. This study provides important information about the current profile of European centenarians, which is compared to gen- eral information on the centenarian population from EUA and Asia.\ninfo:eu-repo/semantics/publishedVersion","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2017-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":null,"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0020","classname":"Other ORP type","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::2017","value":"Repositório Científico do Instituto Politécnico de Viseu","dataInfo":null},"url":["http://hdl.handle.net/10400.19/5432"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::2017","value":"Repositório Científico do Instituto Politécnico de Viseu","dataInfo":null},"dateofacceptance":{"value":"2017-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"contactperson":[],"contactgroup":[],"tool":[]} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055424730,"id":"50|od______2017::2a777b5c11f070ece546d75162047179","originalId":["od______2017::2a777b5c11f070ece546d75162047179"],"collectedfrom":[{"key":"opendoar____::2017","value":"Repositório Científico do Instituto Politécnico de Viseu","dataInfo":null}],"pid":[],"dateofcollection":"2019-02-25T04:30:56.998Z","dateoftransformation":"2019-11-30T04:20:04.285Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2019-02-25T04:30:56.998Z","altered":true,"baseURL":"http://repositorio.ipv.pt/oai/openaire","identifier":"oai:repositorio.ipv.pt:10400.19/5428","datestamp":"2019-02-23T03:01:30Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"da Costa Teixeira, Laetitia","name":"Laetitia","surname":"Da Costa Teixeira","rank":1,"pid":null,"affiliation":null},{"fullname":"Araújo, Lia","name":"Lia","surname":"Araújo","rank":2,"pid":null,"affiliation":null},{"fullname":"Paul, Constança","name":"Constança","surname":"Paul","rank":3,"pid":null,"affiliation":null},{"fullname":"Ribeiro, Oscar","name":"Oscar","surname":"Ribeiro","rank":4,"pid":null,"affiliation":null}],"resulttype":{"classid":"other","classname":"other","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"eng","classname":"English","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"Survival","qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"100 years old","qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"Survival after 100 years of age in Portuguese centenarians","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"The group of individuals aged 80 and over is growing faster than other segment of the population, and within this group the number of centenarians has risen exponentially worldwide. This phenomena lead to an increasing number of centenarian studies, improving the knowledge about this population, validating the idea of heterogeneity that char- acterizes this group. However, the factors influencing their aging survival remains understudied. The present study aims to identify factors associated with survival after 100 years old in a sample of Portuguese centenarians. After being included in a population-based study on centenarians (PT100–Oporto Centenarian Study), each participant was assessed by a tel- ephone interview every 6 months in order to assess his/her health condition. Follow-up was considered as the time (in months) between 100th birthday and death or the last tel- ephone contact. Survival analysis was performed to iden- tify factors associated with survival after 100 years old. Sociological and medical factors were considered. 140 cen- tenarians were assessed and 115 (82.1%) died. The median survival time after 100 years old was 38 months. Survival after age 100 was associated with acute disease (last month), self-perception of physical condition and drinking status. This study intends do identify factors that predict longevity in long-lived individuals. Findings recognize the importance of factors related with health status, self-perception of physi- cal condition and life style (no alcohol consume) for survival. Further studies should explore the predictive value of these factors, as well as psychosocial aspects, considering living longer but also the quality of time beyond one hundred.\ninfo:eu-repo/semantics/publishedVersion","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2018-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":null,"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0020","classname":"Other ORP type","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::2017","value":"Repositório Científico do Instituto Politécnico de Viseu","dataInfo":null},"url":["http://hdl.handle.net/10400.19/5428"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::2017","value":"Repositório Científico do Instituto Politécnico de Viseu","dataInfo":null},"dateofacceptance":{"value":"2018-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"contactperson":[],"contactgroup":[],"tool":[]} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055426968,"id":"50|od______2017::48eb86b38e6e2cfb94bf0a4663848c10","originalId":["od______2017::48eb86b38e6e2cfb94bf0a4663848c10"],"collectedfrom":[{"key":"opendoar____::2017","value":"Repositório Científico do Instituto Politécnico de Viseu","dataInfo":null}],"pid":[],"dateofcollection":"2019-02-25T04:30:56.995Z","dateoftransformation":"2019-11-30T04:20:13.611Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2019-02-25T04:30:56.995Z","altered":true,"baseURL":"http://repositorio.ipv.pt/oai/openaire","identifier":"oai:repositorio.ipv.pt:10400.19/5416","datestamp":"2019-02-23T03:01:21Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Teixeira, Laetitia","name":"Laetitia","surname":"Teixeira","rank":1,"pid":null,"affiliation":null},{"fullname":"Araújo, Lia","name":"Lia","surname":"Araújo","rank":2,"pid":null,"affiliation":null},{"fullname":"Duarte, Natália","name":"Natália","surname":"Duarte","rank":3,"pid":null,"affiliation":null},{"fullname":"Brandão, Daniela","name":"Daniela","surname":"Brandão","rank":4,"pid":null,"affiliation":null},{"fullname":"Azevedo, Maria João","name":"Maria João","surname":"Azevedo","rank":5,"pid":null,"affiliation":null},{"fullname":"Ribeiro, Oscar","name":"Oscar","surname":"Ribeiro","rank":6,"pid":null,"affiliation":null}],"resulttype":{"classid":"other","classname":"other","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"eng","classname":"English","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"Cognition","qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Survival","qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Functional capacity","qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"Cognition and functionality: how do they related to time lived after 100 years of age?","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"Introduction: The number of centenarians has greatly increased in Portugal in the last decades. Therefore, the analysis of survival time after becoming a centenarian and related factors constitute an import- ant issue for the quality of care provision. The objective of this study is to identify health related factors associated with the time lived after being 100 years of age. Methods: Data come from the population-based study PT100 (Oporto Centenarian Study) and considers information gathered through face-to-face interviews with centenarians and their proxies during 2013. Study eligibility criteria included being 100 and more years old and living in the Oporto Metropolitan Area. Survival analyses were performed in order to identify factors associated with survival after the 100. Functional status (e.g., walking, being bedrid- den) and specific health conditions (e.g. presence/absence of cognitive impairment) were considered as potential factors. Results: The sam- ple comprises 140 centenarians with approximately 14.5 months as median survival time after their 100th anniversary. Centenarians who were bedridden presented a higher probability to live after 100 years when compared with functionally independent centenarians. Presence of cognitive impairment was not associated with the time lived after 100 years old. Conclusions: Given the increasing number of centenarians in Portugal, different studies based on this population need to be consid- ered. The present study, focused on the life after 100 years old, provides new information about this topic contributing to the formulation of new scientific questions for this population.\ninfo:eu-repo/semantics/publishedVersion","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2014-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":null,"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0020","classname":"Other ORP type","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::2017","value":"Repositório Científico do Instituto Politécnico de Viseu","dataInfo":null},"url":["http://hdl.handle.net/10400.19/5416"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::2017","value":"Repositório Científico do Instituto Politécnico de Viseu","dataInfo":null},"dateofacceptance":{"value":"2014-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"contactperson":[],"contactgroup":[],"tool":[]} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055427049,"id":"50|od______2017::4a1bcdd965b879fbac86a7d3b947a6cc","originalId":["od______2017::4a1bcdd965b879fbac86a7d3b947a6cc"],"collectedfrom":[{"key":"opendoar____::2017","value":"Repositório Científico do Instituto Politécnico de Viseu","dataInfo":null}],"pid":[],"dateofcollection":"2018-05-08T17:24:51.637Z","dateoftransformation":"2019-11-30T04:20:13.727Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2018-05-08T17:24:51.637Z","altered":true,"baseURL":"http://repositorio.ipv.pt/oai/openaire","identifier":"oai:repositorio.ipv.pt:10400.19/995","datestamp":"2014-07-15T01:00:31Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Oliveira, Ana Maria","name":"Ana Maria","surname":"Oliveira","rank":1,"pid":null,"affiliation":null}],"resulttype":{"classid":"other","classname":"other","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"por","classname":"Portuguese","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"Cognição e Linguagem","qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Processamento da Linguagem","qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"Processar a Linguagem através dos Sentidos: entre a doçura e a amargura","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[],"dateofacceptance":{"value":"2010-07-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":{"value":"Instituto de Literatura Comparada Margarida Losa – Faculdade de Letras da Universidade do Porto","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":null,"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0010","classname":"Lecture","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::2017","value":"Repositório Científico do Instituto Politécnico de Viseu","dataInfo":null},"url":["http://hdl.handle.net/10400.19/995"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::2017","value":"Repositório Científico do Instituto Politécnico de Viseu","dataInfo":null},"dateofacceptance":{"value":"2010-07-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"contactperson":[],"contactgroup":[],"tool":[]} diff --git a/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_datasourcewithconstraints/publication b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_datasourcewithconstraints/publication new file mode 100644 index 000000000..e69de29bb diff --git a/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_datasourcewithconstraints/software b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_datasourcewithconstraints/software new file mode 100644 index 000000000..e69de29bb diff --git a/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_subject/contextnoprovenance/dataset b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_subject/contextnoprovenance/dataset new file mode 100644 index 000000000..d03739195 --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_subject/contextnoprovenance/dataset @@ -0,0 +1,10 @@ +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055868909,"id":"50|od______3989::02dd5d2c222191b0b9bd4f33c8e96529","originalId":["od______3989::02dd5d2c222191b0b9bd4f33c8e96529"],"collectedfrom":[{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null}],"pid":[{"value":"10.4185/RLCS-2018-1243","qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofcollection":"2020-03-03T13:05:26.091Z","dateoftransformation":"2020-03-03T13:06:53.161Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2020-03-03T13:05:26.091Z","altered":true,"baseURL":"http%3A%2F%2Frepositorio.ucjc.edu%2Foai%2Frequest","identifier":"oai:repositorio.ucjc.edu:20.500.12020/562","datestamp":"2018-01-23T15:06:07Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Gallardo-Camacho, Jorge","name":"Jorge","surname":"Gallardo-Camacho","rank":1,"pid":null,"affiliation":null},{"fullname":"Trujillo Fernández, José Ramón","name":"José Ramón","surname":"Trujillo Fernández","rank":2,"pid":null,"affiliation":null},{"fullname":"Jorge Alonso, Ana","name":"Ana","surname":"Jorge Alonso","rank":3,"pid":null,"affiliation":null}],"resulttype":{"classid":"dataset","classname":"dataset","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"esl/spa","classname":"Spanish","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"COVID-19","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"yihadismo","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"viralidad","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"vídeo","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"propaganda","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"terrorismo","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"terrorism","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"jihadism","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"virality","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"video","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"5903 Ideologías Políticas","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"6310.13 Terrorismo","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"El individualismo como estrategia","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Individualism as an improvised strategy","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"Se analiza como el Yihadismo distribuye su mensaje propaganístico en You Tube.\nUniversidad Camilo José Cela","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2018-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[{"value":"MediaLab - UCJC","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[{"dataInfo":[{"deletedbyinference":false,"inferenceprovenance":"propagation","inferred":true,"invisible":false,"provenanceaction":{"classid":"propagation:community:productsthroughsemrel","classname":" Propagation of result belonging to community through semantic relation","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.85"}],"id":"ee"},{"dataInfo":[{"deletedbyinference":false,"inferenceprovenance":"propagation","inferred":true,"invisible":false,"provenanceaction":{"classid":"propagation:community:productsthroughsemrel","classname":" Propagation of result belonging to community through semantic relation","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.85"}],"id":"fam"},{"dataInfo":[{"deletedbyinference":false,"inferenceprovenance":"propagation","inferred":true,"invisible":false,"provenanceaction":{"classid":"propagation:community:productsthroughsemrel","classname":" Propagation of result belonging to community through semantic relation","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.85"}],"id":"covid-19"}],"externalReference":[],"instance":[{"license":{"value":"http://creativecommons.org/licenses/by-nc-nd/4.0/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0024","classname":"Film","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"url":["http://hdl.handle.net/20.500.12020/562"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"dateofacceptance":{"value":"2018-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"storagedate":null,"device":null,"size":null,"version":null,"lastmetadataupdate":null,"metadataversionnumber":null,"geolocation":[]} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055868954,"id":"50|od______3989::05d8c751462f9bb8d2b06956dfbc5c7b","originalId":["od______3989::05d8c751462f9bb8d2b06956dfbc5c7b"],"collectedfrom":[{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null}],"pid":[],"dateofcollection":"2020-03-03T13:05:26.079Z","dateoftransformation":"2020-03-03T13:06:53.239Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2020-03-03T13:05:26.079Z","altered":true,"baseURL":"http%3A%2F%2Frepositorio.ucjc.edu%2Foai%2Frequest","identifier":"oai:repositorio.ucjc.edu:20.500.12020/227","datestamp":"2017-11-15T16:29:55Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Rico Pérez, Marta","name":"Marta","surname":"Rico Pérez","rank":1,"pid":null,"affiliation":null}],"resulttype":{"classid":"dataset","classname":"dataset","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"esl/spa","classname":"Spanish","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"coronavirus disease-19","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"agriculture","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Retos","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Deporte","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"I Congreso Nuevos Retos en los Eventos Deportivos","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"I Congreso Nuevos Retos en los Eventos Deportivos, celebrado en la Universidad Camilo José Cela.\n\n\n\nDerivado del proyecto de investigación \"La situación de los eventos deportivos en España a través de su estructuras y de sus herramientas\", tiene como finalidad conocer la situación de los eventos deportivos en España. Se realizó un estudio descriptivo holístico en el que se investigaron elementos culturales, el perfil de los recursos humanos, la estructura de los comités, entre otras.","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2015-06-20","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":{"value":"http://creativecommons.org/licenses/by-nc-nd/4.0/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0024","classname":"Film","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"url":["http://hdl.handle.net/20.500.12020/227"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"dateofacceptance":{"value":"2015-06-20","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"storagedate":null,"device":null,"size":null,"version":null,"lastmetadataupdate":null,"metadataversionnumber":null,"geolocation":[]} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055869097,"id":"50|od______3989::0f89464c4ac4c398fe0c71433b175a62","originalId":["od______3989::0f89464c4ac4c398fe0c71433b175a62"],"collectedfrom":[{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null}],"pid":[],"dateofcollection":"2020-03-03T13:05:26.069Z","dateoftransformation":"2020-03-03T13:06:53.54Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2020-03-03T13:05:26.069Z","altered":true,"baseURL":"http%3A%2F%2Frepositorio.ucjc.edu%2Foai%2Frequest","identifier":"oai:repositorio.ucjc.edu:20.500.12020/802","datestamp":"2018-11-14T15:30:47Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Universidad Camilo José Cela, Ciencias de la Actividad Física y del Deporte","name":"Ciencias La Actividad Física Y. Del Deporte","surname":"Universidad Camilo José Cela","rank":1,"pid":null,"affiliation":null}],"resulttype":{"classid":"dataset","classname":"dataset","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"esl/spa","classname":"Spanish","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"fishery","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"sea","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Impacto físico","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Proyectos de investigación","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"2411.06 Fisiología del Ejercicio","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"Investigaciones en Ciencias de la Actividad Física y del Deporte CCAFD - UCJC","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"Blanca Romero, investigadora y docente de Ciencias de la Actividad Física y del Deporte en la Universidad Camilo José Cela, describe dos de las líneas de investigación que se han desarrollado en el departamento CCAFD de UCJC: el impacto físico de las diferentes actividades deportivas y los métodos de recuperación más eficaces tras el ejercicio físico.\nBlanca también destaca la importancia en el ámbito de la salud los estudios en Ciencias de la Actividad Física y del Deporte.\nCiencias de la Actividad Física y del Deporte en la Universidad Camilo José Cela","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2016-03-21","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[{"value":"Universidad Camilo José Cela, Ciencias de la Actividad Física y del Deporte","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":{"value":"http://creativecommons.org/licenses/by-nc-nd/4.0/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0024","classname":"Film","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"url":["http://hdl.handle.net/20.500.12020/802"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"dateofacceptance":{"value":"2016-03-21","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"storagedate":null,"device":null,"size":null,"version":null,"lastmetadataupdate":null,"metadataversionnumber":null,"geolocation":[]} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055869215,"id":"50|od______3989::1729c3988199b95d1d566851af7d3c55","originalId":["od______3989::1729c3988199b95d1d566851af7d3c55"],"collectedfrom":[{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null}],"pid":[],"dateofcollection":"2020-03-03T13:05:25.653Z","dateoftransformation":"2020-03-03T13:06:53.764Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2020-03-03T13:05:25.653Z","altered":true,"baseURL":"http%3A%2F%2Frepositorio.ucjc.edu%2Foai%2Frequest","identifier":"oai:repositorio.ucjc.edu:20.500.12020/801","datestamp":"2018-11-14T15:19:38Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Universidad Camilo José Cela, Ciencias de la Actividad Física y del Deporte","name":"Ciencias La Actividad Física Y. Del Deporte","surname":"Universidad Camilo José Cela","rank":1,"pid":null,"affiliation":null}],"resulttype":{"classid":"dataset","classname":"dataset","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"esl/spa","classname":"Spanish","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"Ciencias de la Actividad Física y del Deporte","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Prevención","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Hidratación","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Deporte","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Deportistas","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Electrolitos","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Deportes de resistencia","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"2411.06 Fisiología del Ejercicio","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"La importancia de la hidratación en competiciones resistencia, por Juan del Coso","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"Juan del Coso, investigador y profesor en el Grado en Ciencias de la Actividad Física y del Deporte UCJC, presenta el proyecto de investigación que ha realizado el departamento CCAFD de UCJC: la prevención de desequilibrios de agua y electrolitos que se dan en los deportes de resistencia para que los deportistas realicen su actividad de una manera más segura.\nMás información: http://www.ucjc.edu/2016/03/investiga...\nUniversidad Camilo José Cela, Ciencias de la Actividad Física y del Deporte","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2016-03-21","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[{"value":"Grado en Ciencias de la Actividad Física y del Deporte UCJC","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":{"value":"http://creativecommons.org/licenses/by-nc-nd/4.0/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0024","classname":"Film","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"url":["http://hdl.handle.net/20.500.12020/801"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"dateofacceptance":{"value":"2016-03-21","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"storagedate":null,"device":null,"size":null,"version":null,"lastmetadataupdate":null,"metadataversionnumber":null,"geolocation":[]} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055869487,"id":"50|od______3989::2e3f34ce90520fae350a7e1148d7dcea","originalId":["od______3989::2e3f34ce90520fae350a7e1148d7dcea"],"collectedfrom":[{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null}],"pid":[],"dateofcollection":"2020-03-03T13:05:34.912Z","dateoftransformation":"2020-03-03T13:06:54.218Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2020-03-03T13:05:34.912Z","altered":true,"baseURL":"http%3A%2F%2Frepositorio.ucjc.edu%2Foai%2Frequest","identifier":"oai:repositorio.ucjc.edu:20.500.12020/800","datestamp":"2018-11-14T13:43:21Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Universidad Camilo José Cela, Vicerrectorado de Innovación","name":"Vicerrectorado Innovación","surname":"Universidad Camilo José Cela","rank":1,"pid":null,"affiliation":null}],"resulttype":{"classid":"dataset","classname":"dataset","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"esl/spa","classname":"Spanish","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"Ciencias de la Actividad Física y del Deporte","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Deporte","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Cafeína","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Efectos","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Alto rendimiento","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Competiciones","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Beneficios","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"2411.06 Fisiología del Ejercicio","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"Investigación - Efectos positivos y negativos del uso de la cafeína en el deporte","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"Proyecto de investigación que se están desarrollando en la Universidad Camilo José Cela (UCJC) sobre la cafeína y sus efectos cuando se realiza deporte. https://www.ucjc.edu/2016/08/la-bbc-s...\n\nJuan Del Coso, director del Laboratorio de Fisiología del Ejercicio de la Universidad Camilo José Cela, nos describe cómo está siendo la investigación que desarrolla con deportistas de alto rendimiento y el consumo de cafeína.\n\n\"Nuestra investigación se enmarca dentro del campo de la fisiología del ejercicio y el objetivo que tenemos es investigar los efectos que tiene la cafeína en los deportistas, principalmente saber si es una ayuda ergogénica en la mayor parte de los deportes, pero también conocer qué perjuicios existen para aquellos deportistas que la utilizan para incrementar el rendimiento deportivo\", explica Del Coso.\n\nY es que los datos son muy llamativos: tres de cada cuatro deportistas de alto rendimiento utilizan la cafeína antes de la competición y muchas veces se utiliza sin saber los perjuicios que puede tener para el deportista. \"Lo que estamos investigando es cómo una sustancia, que te puede hacer rendir mejor, cómo puede afectar negativamente cuando termina una competición\".\n\nPero esta investigación no sólo puede extraer conclusiones interesantes y útiles para los deportistas profesionales, \"investigando el deporte de alto rendimiento podemos conocer los beneficios y perjuicios de la cafeína que también afectarían al deportista amateur y hacer un deporte en general más seguro\".\n\nPara el desarrollo de este proyecto de investigación están colaborando el Laboratorio de Fisiología del Ejercicio de la Universidad Camilo José Cela y la Agencia para la Protección de la Salud en el Deporte.\nPara el desarrollo de este proyecto de investigación están colaborando el Laboratorio de Fisiología del Ejercicio de la Universidad Camilo José Cela y la Agencia para la Protección de la Salud en el Deporte.","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2017-10-06","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[{"value":"Universidad Camilo José Cela, Vicerrectorado de Innovación","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":{"value":"http://creativecommons.org/licenses/by-nc-nd/4.0/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0024","classname":"Film","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"url":["http://hdl.handle.net/20.500.12020/800"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"dateofacceptance":{"value":"2017-10-06","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"storagedate":null,"device":null,"size":null,"version":null,"lastmetadataupdate":null,"metadataversionnumber":null,"geolocation":[]} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055869498,"id":"50|od______3989::2f4f3c820c450bd08dac08d07cc82dcf","originalId":["od______3989::2f4f3c820c450bd08dac08d07cc82dcf"],"collectedfrom":[{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null}],"pid":[],"dateofcollection":"2020-03-03T13:05:34.806Z","dateoftransformation":"2020-03-03T13:06:54.229Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2020-03-03T13:05:34.806Z","altered":true,"baseURL":"http%3A%2F%2Frepositorio.ucjc.edu%2Foai%2Frequest","identifier":"oai:repositorio.ucjc.edu:20.500.12020/797","datestamp":"2018-11-14T12:12:23Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Cuesta Cano, Laura","name":"Laura","surname":"Cuesta Cano","rank":1,"pid":null,"affiliation":null}],"resulttype":{"classid":"dataset","classname":"dataset","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"esl/spa","classname":"Spanish","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"Ciencias de la Comunicación","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Marketing digital","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Medios sociales","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Marcas","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Empresas","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Emprendedores","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"II Liga de Debate CICAE - UCJC","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"6114.13 Marketing","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"Laura Cuesta - Liga de Debate CICAE - UCJC","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"Laura Cuesta, profesora en la Universidad Camilo José Cela (UCJC) y Especialista en Marketing Digital y Medios Sociales para marcas y emprendedores. \n\nEn esta ocasión, Laura Cuesta, nos explica el significado de redes sociales y nos habla sobre el uso que le dan los usuarios.\n\nII Liga de Debate CICAE - UCJC http://ligacicae.ucjc.edu/\n\nLa Universidad Camilo José Cela (UCJC) y la Asociación de Colegios Privados e Independientes –Círculo de Calidad Educativa (CICAE) – organizan la segunda edición de esta gran liga de debate académico. El formato es al estilo inglés, similar al de la Oxford Union, donde algunos jóvenes se reunían a debatir sobre temas de la más candente actualidad y polemizaban con la intención de formarse en tan valoradas habilidades.\n\nLa Liga de Debate CICAE-UCJC es una ocasión única para los alumnos de ponerse en contacto con herramientas tan útiles como la oratoria y la comunicación efectiva. Pero, sobretodo, una oportunidad de fomentar el pensamiento crítico y la socialización entre alumnos con espíritu emprendedor. La Liga de Debate CICAE - Universidad Camilo José Cela se diferencia del resto de torneos en que potenciamos que sea eminentemente formativa. Alumnos y profesores reciben formación en comunicación, oratoria y debate por parte de alguno de los expertos en debate españoles más reconocidos en la escena internacional.\n\nDatos de la III Liga de Debate CICAE - UCJC http://ligacicae.ucjc.edu/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2018-10-23","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[{"value":"Universidad Camilo José Cela, Vicerrectorado de Innovación","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":{"value":"http://creativecommons.org/licenses/by-nc-nd/4.0/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0024","classname":"Film","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"url":["http://hdl.handle.net/20.500.12020/797"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"dateofacceptance":{"value":"2018-10-23","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"storagedate":null,"device":null,"size":null,"version":null,"lastmetadataupdate":null,"metadataversionnumber":null,"geolocation":[]} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055870582,"id":"50|od______3989::752fd0b2bbac1ea1cc50e52fd46eb663","originalId":["od______3989::752fd0b2bbac1ea1cc50e52fd46eb663"],"collectedfrom":[{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null}],"pid":[],"dateofcollection":"2020-03-03T13:05:34.561Z","dateoftransformation":"2020-03-03T13:06:55.716Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2020-03-03T13:05:34.561Z","altered":true,"baseURL":"http%3A%2F%2Frepositorio.ucjc.edu%2Foai%2Frequest","identifier":"oai:repositorio.ucjc.edu:20.500.12020/798","datestamp":"2018-11-14T12:57:26Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Universidad Camilo José Cela, Vicerrectorado de Innovación","name":"Vicerrectorado Innovación","surname":"Universidad Camilo José Cela","rank":1,"pid":null,"affiliation":null}],"resulttype":{"classid":"dataset","classname":"dataset","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"esl/spa","classname":"Spanish","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"Psicología","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Alcohol","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Dependencia","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Proyectos de investigación","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Alcoholismo","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Realidad virtual","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Psicología conductual","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"Investigación - Intervención basada en realidad virtual sobre la dependencia del alcohol","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"Proyecto de investigación que se están desarrollando en la Universidad Camilo José Cela (UCJC) con tecnología aplicada al abandono de la dependencia del alcohol. \nRosa Jurado, profesora e investigadora de UCJC https://www.ucjc.edu/, explica cómo se conjuga el alcoholismo con la realidad virtual. \"Mi investigación consiste en desarrollar una técnica de intervención o rehabilitación que tiene como propósito fomentar la capacidad de inhibición para que las personas que tienen dependencia del alcohol sean capaces de controlar su conducta de aproximación hacia aquello que tiene que ver con el consumo de alcohol\".\n\nEn esta investigación, liderada por la Universidad Camilo José Cela, están participando, el Instituto de Investigación Biomédica del Hospital 12 de Octubre y la Universidad Politécnica de Madrid, con el CeDint. \"En nuestro equipo de investigación pensamos que, además del deseo de consumo, existen una carencia clara de capacidad de control inhibitorio en este tipo de personas\", destaca Rosa Jurado.\n\nLa realidad virtual sirve, según explica Gabriel Rubio, jefe de Psiquiatría del Hospital 12 de Octubre, \"para dar un paso más, para ver cómo reacciona un sujeto en un ambiente que no es el real, pero se parece mucho al real\". El objetivo final de estas acciones es \"mejorar la capacidad del individuo para poner en marcha mecanismos de inhibición conductual, para que el sujeto sea capaz de decir que no\".\n\nY no acaba ahí el proceso. La fase final del tratamiento se enfoca en que el paciente \"sea capaz de reconstruir su vida\" a través de programas de entrenamiento de habilidades sociales, asertividad, familias... \"Juntando todas las áreas de intervención, la abstinencia se mantiene mucho más tiempo y las recaídas disminuyen\".","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2017-10-05","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[{"value":"Universidad Camilo José Cela, Vicerrectorado de Innovación","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":{"value":"http://creativecommons.org/licenses/by-nc-nd/4.0/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0024","classname":"Film","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"url":["http://hdl.handle.net/20.500.12020/798"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"dateofacceptance":{"value":"2017-10-05","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"storagedate":null,"device":null,"size":null,"version":null,"lastmetadataupdate":null,"metadataversionnumber":null,"geolocation":[]} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055870750,"id":"50|od______3989::7fcbe3a03280663cddebfd3cb9203177","originalId":["od______3989::7fcbe3a03280663cddebfd3cb9203177"],"collectedfrom":[{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null}],"pid":[],"dateofcollection":"2020-03-03T13:05:25.652Z","dateoftransformation":"2020-03-03T13:06:55.95Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2020-03-03T13:05:25.652Z","altered":true,"baseURL":"http%3A%2F%2Frepositorio.ucjc.edu%2Foai%2Frequest","identifier":"oai:repositorio.ucjc.edu:20.500.12020/796","datestamp":"2018-11-05T13:36:54Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Universidad Camilo José Cela, Vicerrectorado de Innovación","name":"Vicerrectorado Innovación","surname":"Universidad Camilo José Cela","rank":1,"pid":null,"affiliation":null}],"resulttype":{"classid":"dataset","classname":"dataset","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"esl/spa","classname":"Spanish","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"Ciencias de la Comunicación","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Redes sociales","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Comunicación","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Información","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Desinformación","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"III Liga de Debate CICAE","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Instantaneidad","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Información periodística","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Fake news","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"5910.02 Medios de Comunicación de Masas","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"Jorge Gallardo - Liga de Debate CICAE","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"Jorge Gallardo, profesor de Derecho en la Universidad Camilo José Cela (UCJC), Doctor en Comunicación Audiovisual y MBA en Empresas Audiovisuales. Subdirector de Espejo Público en Antena 3 Noticias. \n\nEn esta ocasión, Jorge Gallardo habla sobre las redes sociales, cómo han transformado la manera en la que nos comunicamos y nos informamos. \n\nIII Liga de Debate CICAE - UCJC http://ligacicae.ucjc.edu/\n\nLa Universidad Camilo José Cela (UCJC) y la Asociación de Colegios Privados e Independientes –Círculo de Calidad Educativa (CICAE) – organizan la tercera edición de esta gran liga de debate académico. El formato es al estilo inglés, similar al de la Oxford Union, donde algunos jóvenes se reunían a debatir sobre temas de la más candente actualidad y polemizaban con la intención de formarse en tan valoradas habilidades.\n\nLa Liga de Debate CICAE-UCJC es una ocasión única para los alumnos de ponerse en contacto con herramientas tan útiles como la oratoria y la comunicación efectiva. Pero, sobretodo, una oportunidad de fomentar el pensamiento crítico y la socialización entre alumnos con espíritu emprendedor. La Liga de Debate CICAE - Universidad Camilo José Cela se diferencia del resto de torneos en que potenciamos que sea eminentemente formativa. Alumnos y profesores reciben formación en comunicación, oratoria y debate por parte de alguno de los expertos en debate españoles más reconocidos en la escena internacional.\n\nDatos de la III Liga de Debate CICAE - UCJC http://ligacicae.ucjc.edu/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2018-10-23","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":{"value":"http://creativecommons.org/licenses/by-nc-nd/4.0/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0024","classname":"Film","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"url":["http://hdl.handle.net/20.500.12020/796"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"dateofacceptance":{"value":"2018-10-23","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"storagedate":null,"device":null,"size":null,"version":null,"lastmetadataupdate":null,"metadataversionnumber":null,"geolocation":[]} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055872001,"id":"50|od______3989::d791339867bec6d3eb2104deeb4e4961","originalId":["od______3989::d791339867bec6d3eb2104deeb4e4961"],"collectedfrom":[{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null}],"pid":[],"dateofcollection":"2020-03-03T13:05:34.586Z","dateoftransformation":"2020-03-03T13:06:57.721Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2020-03-03T13:05:34.586Z","altered":true,"baseURL":"http%3A%2F%2Frepositorio.ucjc.edu%2Foai%2Frequest","identifier":"oai:repositorio.ucjc.edu:20.500.12020/645","datestamp":"2018-04-12T07:59:27Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Universidad Camilo José Cela, Vicerrectorado de Innovación","name":"Vicerrectorado Innovación","surname":"Universidad Camilo José Cela","rank":1,"pid":null,"affiliation":null}],"resulttype":{"classid":"dataset","classname":"dataset","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"esl/spa","classname":"Spanish","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"Transferencia de Conocimiento e Innovación","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Innovación","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Investigación","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Ciencia","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Tecnología","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"UCJC Open Science Day 2018","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"El UCJC Open Science Day tiene como objetivo mostrar las actividades de investigación llevadas a cabo por investigadores de la Universidad Camilo José Cela (UCJC) a todos los miembros de la UCJC.","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2018-04-10","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":{"value":"http://creativecommons.org/licenses/by-nc-nd/4.0/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0024","classname":"Film","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"url":["http://hdl.handle.net/20.500.12020/645"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"dateofacceptance":{"value":"2018-04-10","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"storagedate":null,"device":null,"size":null,"version":null,"lastmetadataupdate":null,"metadataversionnumber":null,"geolocation":[]} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055872022,"id":"50|od______3989::d90d3a1f64ad264b5ebed8a35b280343","originalId":["od______3989::d90d3a1f64ad264b5ebed8a35b280343"],"collectedfrom":[{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null}],"pid":[],"dateofcollection":"2020-03-03T13:05:34.912Z","dateoftransformation":"2020-03-03T13:06:57.747Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2020-03-03T13:05:34.912Z","altered":true,"baseURL":"http%3A%2F%2Frepositorio.ucjc.edu%2Foai%2Frequest","identifier":"oai:repositorio.ucjc.edu:20.500.12020/795","datestamp":"2018-11-06T15:43:10Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Universidad Camilo José Cela, Vicerrectorado de Innovación","name":"Vicerrectorado Innovación","surname":"Universidad Camilo José Cela","rank":1,"pid":null,"affiliation":null}],"resulttype":{"classid":"dataset","classname":"dataset","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"esl/spa","classname":"Spanish","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"Ciencias de la Comunicación","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Unión Europea","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Desinformación","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Política","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Periodismo","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Ciudadanos europeos","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Democracias","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Estado de derecho","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Derechos humanos","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"5910.02 Medios de Comunicación de Masas","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"Ramón Luis Varcárcel - La Unión Europea ante el reto de la desinformación","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"Conferencia de Ramón Luis Valcárcel, vicepresidente del Parlamento Europeo, en el Campus de Almagro de la Universidad Camilo José Cela (UCJC) bajo el título \"La Unión Europea ante el reto de la desinformación\", en la que ha alertado sobre el alcance de la desinformación en las democracias y sobre cómo pone en peligro los derechos de los ciudadanos europeos. También ha participado el rector de la UCJC, Samuel Martín-Barbero.","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2018-10-11","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":{"value":"http://creativecommons.org/licenses/by-nc-nd/4.0/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0024","classname":"Film","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"url":["http://hdl.handle.net/20.500.12020/795"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"dateofacceptance":{"value":"2018-10-11","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"storagedate":null,"device":null,"size":null,"version":null,"lastmetadataupdate":null,"metadataversionnumber":null,"geolocation":[]} \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_subject/contextnoprovenance/dataset_10.json.gz b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_subject/contextnoprovenance/dataset_10.json.gz deleted file mode 100644 index ee62cd7913e67677f1d81e880f137d1545656608..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6888 zcmVxLlHK z`R}e$UCC6?oiw_82FOki0!pH7RwUA)q)MD@1Dj{qC+N$*=!-$_a_ieX#XiZNLsFLP z`p;BHO2XYnrfl=)@O+2A=i}k`y@VF@Tr6a7{(X;&OP=#6Wxe@=ra9}wHw&f|OLku* zEM)~tqK*EAiMUQ%s4_2l^PV@D^=wZ3eXZmr6I7?{!4LIk8W&s&tT;|-o^zt*3ZAjNpxL@N_rq!Eh2eBOoq028G}aV)|1Fa*_5TfL)7gCP1xXSnK^z2u zKl39mnnlTIF&xHIHXDZlYD+4<P{2QX56u2A(27h`76UK~B{L}E``%Y<1G309 z6N#h>OPkNJJgDrFrX@D^30rS}L|u_5P1ZkvD{Yul(WM3+KUj;LZI1>Q$)=MMb`lDx=ru7|+Auz#r=z z>|01}u=pobCn<00?t5$BPgou+zOGcaqUsVl(i5odc6n%8FpVVO1ZYJxXMcb36!NT! zV*Tgg$)AId;onYuTn@_kA|9}$gs(vs{o~gq)P?9KOcd5YQPBBy`R0K)2t9A$qg2P? zIIvo=-M*&{-t&(F5H>_rcoP&fV+BR4{0tz;*HqgL$~Zqh{^px+2G|>^idP((J&AtprzGu<>gr+G~i99-`8I4!6Pdcl#P+R7*mqcYzI{ht&}{po zXv&bYpMSuw<MJkO+qp-mVrxdPoMG;uJr3d8n&!dzEq6$AKvO_x+8)Zx%34zNa6u!wb2 zLsxKcFtiE7goA&sF;MdiM$aI4&2p6_&e z|ADW!E+ZJ}Ryc|orxVK}s+N+8#Pk*OZ7xd{+n$5|u7Z7A*iYIEYyOU<(A}f3PQnVC zXDs3LDUHYxx#Glk0Npus8RZ+7pMfKWq)L0>Q0)==exXz3x#G)JQ6~}>rtcg2#t%1Z z^LqW+0Z!|!iH`AkU&ZfsWj9Kj!w{R50yg2;{G^PFyjUq&E>}6rV9Y+yJb7McC2~QG zcalUbm14=ok`#I!W=bTsBmzaj$j@U)o>pymG>Do8I1PIUnDK_<4DIy(tLuG1GpG1A z6c0lZPtXOA-@vegT#EDs+vytzDlT$6Zv!YPk750^H-}q3N~{=&eaWz8P^YG&*wp!P zv^f&-kw}h51Mk?)BoCPC_oj%Z%%49$`|Lon&)2YsJ<%Di5yO=9WhRpw*c*EZ-qgTf zrLA~gFgmFFW1eQ$wH;R~v9{+gt2y!d=3kc(gjmU3BaZ?+Dh09MD^-f*NNc~VBps}% zNK!Tcd5*8}wQwbCHxejhD&vaA*1JNNd~{LW8v60q&`P4Y!+0F8VC~FkhJ2-J8Fu(< zTq1KN{5dpB9iJ|aF(L{SHQ%Y|2P!3)T^Z!qn;+L2Sa6y;n z2G%h6fdG`SX5~v7^X-p8Iho>eBe%K9?^3g9(m)Vz;in7hUfTkyq?Yv z(M`i~euxhEA@I1V%YFzqB0E2X^FutMA7bXsCO7&a7Sq{iJc>s&9>wt0f_d@89}S0* zKMARhFmbCN;;!u7^h1mv>W2tNAJPpm?t~j+>RlU81lJZ(o^Lu}+5{#T z`93U_VA_VggSoD%XZy1YreYp**KfMwp{hHL6igqpKWyPfPESuhep25Uaqg?%kUiYr zef1Hn6#@DeGGj{i>#;VGN*jcXVGG01WFBZf_i%0Xt!F2K@}(^|C+YURVDy@izjF1g zDEgCfsuXN7trv}4vGr4 z&Dp+%RE3q3T?~b^^YHS|+NW{VWYhJ%} zj>s-z>l~4ta75yPbC(^FZccQLNau)rOh;tkhc`JQ{YfxG58~9H&7xVD_(?b(PeY$B zCdn`k!#f<2cV_RPBQhL}!{GxRk(2R<^F;3CY2Op+-|C6BppT60LWj)WVRIs*diW?k^yc7Zs z^fJqV;+PZ;o;#ToPxrmEW^1x)EV|H58p~|W3U0|3jZW4lkd=H|YM*sVPGx=zu#Qa8 zMU%KcnPLy-eKG}XU7`F1%i&Ms;Qyq$0sKIxJf3@jRe_D+MOx~_L4{c>%mptW>;)eb}VMh-#vBvyfQ8N-Ms*BIb^^*>Px~WcHC(?^GBV!D? z^RlL5VD3^-l2O4RpXOTRY*{M27yS%Bfx+QvotAe_8s|>csn#(%5stm#@lG{^!ChgY zolDoTAbvwS{gqe{|H+8u&~&5+hpi($bcOWbJJQ4NtYbOS!yg#`J4p|t>5aFq12$X? zM=_guVc;z&8-^a8Fy9|dlSvZmdwI8!9`4NEJ<`K)G?@9pgGdjfLEuk66zQRsr+w0c z4S8`b>0vk@4d;R1D(T@LFaklBk8yO;!NAD55b|>8|FfkWB&*WMpMTJ=5jaMJV>GyV z!?|xe2f`^`u6#Jxd(;eeBUX2MC|-dvTxf?)f$8G}LGFO)g?3m#wnmE_ASXdp6}@Z4_7r=>kosb?{OiJWpS|j(~JvDn3tIrt5Ti`5a0U@553ft ziV!Z5Q59puM4?Rh_?Uv}*|seX+FnPl&^5~Fg6YWXC~^TaZ>ED#Gy<-huoM3D zlRn0GmvwxNDirT^R+WQ4bT_Zt{v@#qN;KLJu5c^3?MTj@0=9MFlJ&3jfZ|<0K45V zc2YJqPKD*(XzQ{|S2TzX)ETd!s7r?NO29sBe$c(JD4>iDeWBRvk|hRzWwf!I3Q({C zzB*t`L?4{WhJEP4A-CNEk%g{qxO9DMQ?~FGMX+?s6v^0yRDGMv{7%utK=*c{qQ-9Q zU{NrYaVQ)sXtwutPpkhq8U~7X*gph}Gut22st$d+4N`#V#A%ruIv*E!D4iRXZpij0 zP#FBB)o^GzhU5kL%$ozRd;5CW&7apIxt59UUb{CG;O}U+*hLCi4a&jftTkB~zSR`; zX!yH{6G2O3C9=_swo9=S2s*?P;e`w}%}Q4K+d*!}EIoQa!`N-?GdoelGS$Pa)xcwp zy%?Q`l9OeFTLzzD3M*J#zdS+7OC3MQtYGSJIKRhMIiK+(Qqd+yzIWt}old((Mf(q( zWDZS7Mf;;;>!@fQp`v-6rlPqi&{5GG741=}XtU{!RJ6rtF^s2y7mq?OO1x=8WB89Z ziQ&s6Ui9vuqTQ9flT@^+H-0D;E%;y$lGpOIO+}l`u6dArM@0+f@GlsCSSs3SsgF!f zsgQlx;FhZKAbIt%rjj*M_Z)BRQF&vhGAr>6)CKuy-Rb#^s;^*N7fX_uq0qt6DjZA) z!_Fo2medh5TJIaN3%k-XbuYuK;SPlkpdb>KNaY5lcA+>wCr|lO2kv;nB8o4YoS&YY z-TAVK!{)-4VN^JNjiE$PvN1i1q!6U`-q7@1obxhcLZ1 z%ylWNXDOj*rU!^}_btvzG`XhC;g|5KT=C2H%r;+GU3BtqY2!tnHtn|F-1Y4z&YK%%liNUw2>;qM!~8+{}wVNs0Rt~B~oZU3{(#- zy4d~*rfbMaij~6fSWLZKS&#~r?T$w@UnQm@(TpJIk)>_(hO9wf8MH5=nh$2Ects<= zk(OI&nj9%05m-Mujj1*Xo|^Zd1{SvKFxLm66>F`sNV5G&bJlhoA?QZLopNju|Aq=YkNYA9n0(d7Y{eiZTE<5peedSgQ3%@V*~vm(R6H}-!Ha~4b%xX z5ITLk%m#8(pko6$Hqhg-fhJx!4Q^rsO~PQ2cu^2VH1-+w<2dvfem5GkXgtPVcpDq& z&g`9J1BGM%L2RIKF!9G9kPT$zX`c-=?cK%(3Mcbm>;h9cg3&z*M$hq0a&te)`CQtK z@)FCHbS$E_Lx17nrF#{nZ6K=P1Nqf^mkyW?3{yPMTvV4`2 zafXZ(%{{m~7?m|oBq?x=uO!ewpx$!pO zA~E4vn6yBk>iW9~PCD8TwR{m6UW~!-S%d}8T84?w!h{L(QdmhUCNK3=fZ2K1A%CC%} zeFTF>(5Zy!640;=W<5O&8KiZmf-f-s+eViK4WirkSaJfWa8Yg;M$K|AzDJKE6gr(c z=FlG!O~)Mi{bK8wLmgobO*_pTa#NsV4msw~V={*(p?4#5Xc0$jNWEb&^~U32oFpt- zB*QqG1>Vq~U|^YBnL~GF?;dj~2nXZvVNcqHgIV~Yh(onF?GuM=?6xb!AumK>hZs@G z5r-Uc$VDdl4NemKp5f+^lEb1+EL^wf3>2uY>WZgBqFt69Y*ri?-2mgJJH-x_b_Xjw z&w_sp*RKwXu1p;0HsvzezRwGo)g3Nv;_@;5iV?xSaZB7*VF+iwH}HZgdXJ7x(~L-> z`5-P3VQ0vYpGvi4K{YeSK0bo{|&|V*%V3H~*Y4cYM=Jm3S8qYH7U||=MJm3C=jy5gN2?lGTWJo@f zNN1xrMgTi7?`AwN!*bc@+ZYPfiV9Mn6q}bCGm4L(SzQ={QND`{l*uY!nBB?17e=CA z9;2tzA;Ai!VyzAr63m4Jb0NW8NU%TH1nc6V{FaD)j%W6JHXO$@>jcki+-aVf8<8E) z%<;?~k!Kcoo_`b1ESb#wA^bU>L@XXBLlydgEo|@adOk}DxgPgMbeCPwiA?5&i7SB-Cu~dvc1=J)lA-|Umc#H2k<^ZuX7n3Y zIZN*4TBX`GmTSKaEHbl5?VK%`zy(BjT)zqK3q7Y(=QnYF6X!Si1Ncqwc&yug6E`9| zzlrmkJfhzuxbbC=WacG9>MzD4ngruf6tajVQ#uTzVCoG=cfIU!XZB9|O=kYX?&nVi zlhNb@`c14nZTn3ovuph(ctL;s$`9wG;oSF}-^BS%+y(vL;4INRjs(NUV~ev=L0@$z zlI||D1H;DLmZ|2LyFSq_4Em0%d*Y*Q98P%&Ya@#H6PTVWq`O4f@???8SYdc~2Slqt zoWT~!>_8H8WzoUWZokkVCRJ zv2JV?3B~J+`tD;WKZM2U!ANGzm)JsVyqf8F~f28(a4)OYMx`1%o3 zdUiMWl+AlQsJQF%o6OjT-P(+7Y+iG@A1_s7sx?bFHZj$MqMfnq1>N}SQhPvN;rl7u zcle@D{ftf`O?#?X1(p`lCogGM!Y|Jt;r6{a`iQECDe34U59$v0xzy$RPN$A8((rmX ix`?BT{9frI=oRcXUBr#ZjxO@%PyY{%{0-$MQ~?0JZc1qY diff --git a/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_subject/contextnoprovenance/datasource b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_subject/contextnoprovenance/datasource new file mode 100644 index 000000000..e69de29bb diff --git a/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_subject/contextnoprovenance/otherresearchproduct b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_subject/contextnoprovenance/otherresearchproduct new file mode 100644 index 000000000..e69de29bb diff --git a/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_subject/contextnoprovenance/publication b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_subject/contextnoprovenance/publication new file mode 100644 index 000000000..e69de29bb diff --git a/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_subject/contextnoprovenance/software b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_subject/contextnoprovenance/software new file mode 100644 index 000000000..e69de29bb diff --git a/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_subject/nocontext/dataset b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_subject/nocontext/dataset new file mode 100644 index 000000000..54552697b --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_subject/nocontext/dataset @@ -0,0 +1,10 @@ +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055868909,"id":"50|od______3989::02dd5d2c222191b0b9bd4f33c8e96529","originalId":["od______3989::02dd5d2c222191b0b9bd4f33c8e96529"],"collectedfrom":[{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null}],"pid":[{"value":"10.4185/RLCS-2018-1243","qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofcollection":"2020-03-03T13:05:26.091Z","dateoftransformation":"2020-03-03T13:06:53.161Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2020-03-03T13:05:26.091Z","altered":true,"baseURL":"http%3A%2F%2Frepositorio.ucjc.edu%2Foai%2Frequest","identifier":"oai:repositorio.ucjc.edu:20.500.12020/562","datestamp":"2018-01-23T15:06:07Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Gallardo-Camacho, Jorge","name":"Jorge","surname":"Gallardo-Camacho","rank":1,"pid":null,"affiliation":null},{"fullname":"Trujillo Fernández, José Ramón","name":"José Ramón","surname":"Trujillo Fernández","rank":2,"pid":null,"affiliation":null},{"fullname":"Jorge Alonso, Ana","name":"Ana","surname":"Jorge Alonso","rank":3,"pid":null,"affiliation":null}],"resulttype":{"classid":"dataset","classname":"dataset","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"esl/spa","classname":"Spanish","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"COVID-19","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"yihadismo","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"viralidad","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"vídeo","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"propaganda","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"terrorismo","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"terrorism","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"jihadism","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"virality","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"video","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"5903 Ideologías Políticas","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"6310.13 Terrorismo","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"El individualismo como estrategia","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Individualism as an improvised strategy","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"Se analiza como el Yihadismo distribuye su mensaje propaganístico en You Tube.\nUniversidad Camilo José Cela","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2018-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[{"value":"MediaLab - UCJC","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":{"value":"http://creativecommons.org/licenses/by-nc-nd/4.0/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0024","classname":"Film","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"url":["http://hdl.handle.net/20.500.12020/562"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"dateofacceptance":{"value":"2018-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"storagedate":null,"device":null,"size":null,"version":null,"lastmetadataupdate":null,"metadataversionnumber":null,"geolocation":[]} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055868954,"id":"50|od______3989::05d8c751462f9bb8d2b06956dfbc5c7b","originalId":["od______3989::05d8c751462f9bb8d2b06956dfbc5c7b"],"collectedfrom":[{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null}],"pid":[],"dateofcollection":"2020-03-03T13:05:26.079Z","dateoftransformation":"2020-03-03T13:06:53.239Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2020-03-03T13:05:26.079Z","altered":true,"baseURL":"http%3A%2F%2Frepositorio.ucjc.edu%2Foai%2Frequest","identifier":"oai:repositorio.ucjc.edu:20.500.12020/227","datestamp":"2017-11-15T16:29:55Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Rico Pérez, Marta","name":"Marta","surname":"Rico Pérez","rank":1,"pid":null,"affiliation":null}],"resulttype":{"classid":"dataset","classname":"dataset","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"esl/spa","classname":"Spanish","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"coronavirus disease-19","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"agriculture","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Retos","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Deporte","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"I Congreso Nuevos Retos en los Eventos Deportivos","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"I Congreso Nuevos Retos en los Eventos Deportivos, celebrado en la Universidad Camilo José Cela.\n\n\n\nDerivado del proyecto de investigación \"La situación de los eventos deportivos en España a través de su estructuras y de sus herramientas\", tiene como finalidad conocer la situación de los eventos deportivos en España. Se realizó un estudio descriptivo holístico en el que se investigaron elementos culturales, el perfil de los recursos humanos, la estructura de los comités, entre otras.","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2015-06-20","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":{"value":"http://creativecommons.org/licenses/by-nc-nd/4.0/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0024","classname":"Film","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"url":["http://hdl.handle.net/20.500.12020/227"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"dateofacceptance":{"value":"2015-06-20","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"storagedate":null,"device":null,"size":null,"version":null,"lastmetadataupdate":null,"metadataversionnumber":null,"geolocation":[]} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055869097,"id":"50|od______3989::0f89464c4ac4c398fe0c71433b175a62","originalId":["od______3989::0f89464c4ac4c398fe0c71433b175a62"],"collectedfrom":[{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null}],"pid":[],"dateofcollection":"2020-03-03T13:05:26.069Z","dateoftransformation":"2020-03-03T13:06:53.54Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2020-03-03T13:05:26.069Z","altered":true,"baseURL":"http%3A%2F%2Frepositorio.ucjc.edu%2Foai%2Frequest","identifier":"oai:repositorio.ucjc.edu:20.500.12020/802","datestamp":"2018-11-14T15:30:47Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Universidad Camilo José Cela, Ciencias de la Actividad Física y del Deporte","name":"Ciencias La Actividad Física Y. Del Deporte","surname":"Universidad Camilo José Cela","rank":1,"pid":null,"affiliation":null}],"resulttype":{"classid":"dataset","classname":"dataset","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"esl/spa","classname":"Spanish","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"fishery","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"sea","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Impacto físico","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Proyectos de investigación","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"2411.06 Fisiología del Ejercicio","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"Investigaciones en Ciencias de la Actividad Física y del Deporte CCAFD - UCJC","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"Blanca Romero, investigadora y docente de Ciencias de la Actividad Física y del Deporte en la Universidad Camilo José Cela, describe dos de las líneas de investigación que se han desarrollado en el departamento CCAFD de UCJC: el impacto físico de las diferentes actividades deportivas y los métodos de recuperación más eficaces tras el ejercicio físico.\nBlanca también destaca la importancia en el ámbito de la salud los estudios en Ciencias de la Actividad Física y del Deporte.\nCiencias de la Actividad Física y del Deporte en la Universidad Camilo José Cela","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2016-03-21","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[{"value":"Universidad Camilo José Cela, Ciencias de la Actividad Física y del Deporte","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":{"value":"http://creativecommons.org/licenses/by-nc-nd/4.0/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0024","classname":"Film","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"url":["http://hdl.handle.net/20.500.12020/802"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"dateofacceptance":{"value":"2016-03-21","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"storagedate":null,"device":null,"size":null,"version":null,"lastmetadataupdate":null,"metadataversionnumber":null,"geolocation":[]} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055869215,"id":"50|od______3989::1729c3988199b95d1d566851af7d3c55","originalId":["od______3989::1729c3988199b95d1d566851af7d3c55"],"collectedfrom":[{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null}],"pid":[],"dateofcollection":"2020-03-03T13:05:25.653Z","dateoftransformation":"2020-03-03T13:06:53.764Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2020-03-03T13:05:25.653Z","altered":true,"baseURL":"http%3A%2F%2Frepositorio.ucjc.edu%2Foai%2Frequest","identifier":"oai:repositorio.ucjc.edu:20.500.12020/801","datestamp":"2018-11-14T15:19:38Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Universidad Camilo José Cela, Ciencias de la Actividad Física y del Deporte","name":"Ciencias La Actividad Física Y. Del Deporte","surname":"Universidad Camilo José Cela","rank":1,"pid":null,"affiliation":null}],"resulttype":{"classid":"dataset","classname":"dataset","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"esl/spa","classname":"Spanish","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"Ciencias de la Actividad Física y del Deporte","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Prevención","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Hidratación","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Deporte","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Deportistas","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Electrolitos","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Deportes de resistencia","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"2411.06 Fisiología del Ejercicio","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"La importancia de la hidratación en competiciones resistencia, por Juan del Coso","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"Juan del Coso, investigador y profesor en el Grado en Ciencias de la Actividad Física y del Deporte UCJC, presenta el proyecto de investigación que ha realizado el departamento CCAFD de UCJC: la prevención de desequilibrios de agua y electrolitos que se dan en los deportes de resistencia para que los deportistas realicen su actividad de una manera más segura.\nMás información: http://www.ucjc.edu/2016/03/investiga...\nUniversidad Camilo José Cela, Ciencias de la Actividad Física y del Deporte","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2016-03-21","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[{"value":"Grado en Ciencias de la Actividad Física y del Deporte UCJC","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":{"value":"http://creativecommons.org/licenses/by-nc-nd/4.0/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0024","classname":"Film","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"url":["http://hdl.handle.net/20.500.12020/801"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"dateofacceptance":{"value":"2016-03-21","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"storagedate":null,"device":null,"size":null,"version":null,"lastmetadataupdate":null,"metadataversionnumber":null,"geolocation":[]} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055869487,"id":"50|od______3989::2e3f34ce90520fae350a7e1148d7dcea","originalId":["od______3989::2e3f34ce90520fae350a7e1148d7dcea"],"collectedfrom":[{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null}],"pid":[],"dateofcollection":"2020-03-03T13:05:34.912Z","dateoftransformation":"2020-03-03T13:06:54.218Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2020-03-03T13:05:34.912Z","altered":true,"baseURL":"http%3A%2F%2Frepositorio.ucjc.edu%2Foai%2Frequest","identifier":"oai:repositorio.ucjc.edu:20.500.12020/800","datestamp":"2018-11-14T13:43:21Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Universidad Camilo José Cela, Vicerrectorado de Innovación","name":"Vicerrectorado Innovación","surname":"Universidad Camilo José Cela","rank":1,"pid":null,"affiliation":null}],"resulttype":{"classid":"dataset","classname":"dataset","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"esl/spa","classname":"Spanish","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"Ciencias de la Actividad Física y del Deporte","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Deporte","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Cafeína","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Efectos","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Alto rendimiento","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Competiciones","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Beneficios","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"2411.06 Fisiología del Ejercicio","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"Investigación - Efectos positivos y negativos del uso de la cafeína en el deporte","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"Proyecto de investigación que se están desarrollando en la Universidad Camilo José Cela (UCJC) sobre la cafeína y sus efectos cuando se realiza deporte. https://www.ucjc.edu/2016/08/la-bbc-s...\n\nJuan Del Coso, director del Laboratorio de Fisiología del Ejercicio de la Universidad Camilo José Cela, nos describe cómo está siendo la investigación que desarrolla con deportistas de alto rendimiento y el consumo de cafeína.\n\n\"Nuestra investigación se enmarca dentro del campo de la fisiología del ejercicio y el objetivo que tenemos es investigar los efectos que tiene la cafeína en los deportistas, principalmente saber si es una ayuda ergogénica en la mayor parte de los deportes, pero también conocer qué perjuicios existen para aquellos deportistas que la utilizan para incrementar el rendimiento deportivo\", explica Del Coso.\n\nY es que los datos son muy llamativos: tres de cada cuatro deportistas de alto rendimiento utilizan la cafeína antes de la competición y muchas veces se utiliza sin saber los perjuicios que puede tener para el deportista. \"Lo que estamos investigando es cómo una sustancia, que te puede hacer rendir mejor, cómo puede afectar negativamente cuando termina una competición\".\n\nPero esta investigación no sólo puede extraer conclusiones interesantes y útiles para los deportistas profesionales, \"investigando el deporte de alto rendimiento podemos conocer los beneficios y perjuicios de la cafeína que también afectarían al deportista amateur y hacer un deporte en general más seguro\".\n\nPara el desarrollo de este proyecto de investigación están colaborando el Laboratorio de Fisiología del Ejercicio de la Universidad Camilo José Cela y la Agencia para la Protección de la Salud en el Deporte.\nPara el desarrollo de este proyecto de investigación están colaborando el Laboratorio de Fisiología del Ejercicio de la Universidad Camilo José Cela y la Agencia para la Protección de la Salud en el Deporte.","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2017-10-06","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[{"value":"Universidad Camilo José Cela, Vicerrectorado de Innovación","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":{"value":"http://creativecommons.org/licenses/by-nc-nd/4.0/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0024","classname":"Film","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"url":["http://hdl.handle.net/20.500.12020/800"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"dateofacceptance":{"value":"2017-10-06","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"storagedate":null,"device":null,"size":null,"version":null,"lastmetadataupdate":null,"metadataversionnumber":null,"geolocation":[]} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055869498,"id":"50|od______3989::2f4f3c820c450bd08dac08d07cc82dcf","originalId":["od______3989::2f4f3c820c450bd08dac08d07cc82dcf"],"collectedfrom":[{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null}],"pid":[],"dateofcollection":"2020-03-03T13:05:34.806Z","dateoftransformation":"2020-03-03T13:06:54.229Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2020-03-03T13:05:34.806Z","altered":true,"baseURL":"http%3A%2F%2Frepositorio.ucjc.edu%2Foai%2Frequest","identifier":"oai:repositorio.ucjc.edu:20.500.12020/797","datestamp":"2018-11-14T12:12:23Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Cuesta Cano, Laura","name":"Laura","surname":"Cuesta Cano","rank":1,"pid":null,"affiliation":null}],"resulttype":{"classid":"dataset","classname":"dataset","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"esl/spa","classname":"Spanish","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"Ciencias de la Comunicación","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Marketing digital","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Medios sociales","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Marcas","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Empresas","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Emprendedores","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"II Liga de Debate CICAE - UCJC","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"6114.13 Marketing","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"Laura Cuesta - Liga de Debate CICAE - UCJC","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"Laura Cuesta, profesora en la Universidad Camilo José Cela (UCJC) y Especialista en Marketing Digital y Medios Sociales para marcas y emprendedores. \n\nEn esta ocasión, Laura Cuesta, nos explica el significado de redes sociales y nos habla sobre el uso que le dan los usuarios.\n\nII Liga de Debate CICAE - UCJC http://ligacicae.ucjc.edu/\n\nLa Universidad Camilo José Cela (UCJC) y la Asociación de Colegios Privados e Independientes –Círculo de Calidad Educativa (CICAE) – organizan la segunda edición de esta gran liga de debate académico. El formato es al estilo inglés, similar al de la Oxford Union, donde algunos jóvenes se reunían a debatir sobre temas de la más candente actualidad y polemizaban con la intención de formarse en tan valoradas habilidades.\n\nLa Liga de Debate CICAE-UCJC es una ocasión única para los alumnos de ponerse en contacto con herramientas tan útiles como la oratoria y la comunicación efectiva. Pero, sobretodo, una oportunidad de fomentar el pensamiento crítico y la socialización entre alumnos con espíritu emprendedor. La Liga de Debate CICAE - Universidad Camilo José Cela se diferencia del resto de torneos en que potenciamos que sea eminentemente formativa. Alumnos y profesores reciben formación en comunicación, oratoria y debate por parte de alguno de los expertos en debate españoles más reconocidos en la escena internacional.\n\nDatos de la III Liga de Debate CICAE - UCJC http://ligacicae.ucjc.edu/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2018-10-23","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[{"value":"Universidad Camilo José Cela, Vicerrectorado de Innovación","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":{"value":"http://creativecommons.org/licenses/by-nc-nd/4.0/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0024","classname":"Film","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"url":["http://hdl.handle.net/20.500.12020/797"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"dateofacceptance":{"value":"2018-10-23","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"storagedate":null,"device":null,"size":null,"version":null,"lastmetadataupdate":null,"metadataversionnumber":null,"geolocation":[]} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055870582,"id":"50|od______3989::752fd0b2bbac1ea1cc50e52fd46eb663","originalId":["od______3989::752fd0b2bbac1ea1cc50e52fd46eb663"],"collectedfrom":[{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null}],"pid":[],"dateofcollection":"2020-03-03T13:05:34.561Z","dateoftransformation":"2020-03-03T13:06:55.716Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2020-03-03T13:05:34.561Z","altered":true,"baseURL":"http%3A%2F%2Frepositorio.ucjc.edu%2Foai%2Frequest","identifier":"oai:repositorio.ucjc.edu:20.500.12020/798","datestamp":"2018-11-14T12:57:26Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Universidad Camilo José Cela, Vicerrectorado de Innovación","name":"Vicerrectorado Innovación","surname":"Universidad Camilo José Cela","rank":1,"pid":null,"affiliation":null}],"resulttype":{"classid":"dataset","classname":"dataset","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"esl/spa","classname":"Spanish","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"Psicología","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Alcohol","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Dependencia","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Proyectos de investigación","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Alcoholismo","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Realidad virtual","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Psicología conductual","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"Investigación - Intervención basada en realidad virtual sobre la dependencia del alcohol","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"Proyecto de investigación que se están desarrollando en la Universidad Camilo José Cela (UCJC) con tecnología aplicada al abandono de la dependencia del alcohol. \nRosa Jurado, profesora e investigadora de UCJC https://www.ucjc.edu/, explica cómo se conjuga el alcoholismo con la realidad virtual. \"Mi investigación consiste en desarrollar una técnica de intervención o rehabilitación que tiene como propósito fomentar la capacidad de inhibición para que las personas que tienen dependencia del alcohol sean capaces de controlar su conducta de aproximación hacia aquello que tiene que ver con el consumo de alcohol\".\n\nEn esta investigación, liderada por la Universidad Camilo José Cela, están participando, el Instituto de Investigación Biomédica del Hospital 12 de Octubre y la Universidad Politécnica de Madrid, con el CeDint. \"En nuestro equipo de investigación pensamos que, además del deseo de consumo, existen una carencia clara de capacidad de control inhibitorio en este tipo de personas\", destaca Rosa Jurado.\n\nLa realidad virtual sirve, según explica Gabriel Rubio, jefe de Psiquiatría del Hospital 12 de Octubre, \"para dar un paso más, para ver cómo reacciona un sujeto en un ambiente que no es el real, pero se parece mucho al real\". El objetivo final de estas acciones es \"mejorar la capacidad del individuo para poner en marcha mecanismos de inhibición conductual, para que el sujeto sea capaz de decir que no\".\n\nY no acaba ahí el proceso. La fase final del tratamiento se enfoca en que el paciente \"sea capaz de reconstruir su vida\" a través de programas de entrenamiento de habilidades sociales, asertividad, familias... \"Juntando todas las áreas de intervención, la abstinencia se mantiene mucho más tiempo y las recaídas disminuyen\".","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2017-10-05","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[{"value":"Universidad Camilo José Cela, Vicerrectorado de Innovación","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":{"value":"http://creativecommons.org/licenses/by-nc-nd/4.0/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0024","classname":"Film","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"url":["http://hdl.handle.net/20.500.12020/798"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"dateofacceptance":{"value":"2017-10-05","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"storagedate":null,"device":null,"size":null,"version":null,"lastmetadataupdate":null,"metadataversionnumber":null,"geolocation":[]} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055870750,"id":"50|od______3989::7fcbe3a03280663cddebfd3cb9203177","originalId":["od______3989::7fcbe3a03280663cddebfd3cb9203177"],"collectedfrom":[{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null}],"pid":[],"dateofcollection":"2020-03-03T13:05:25.652Z","dateoftransformation":"2020-03-03T13:06:55.95Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2020-03-03T13:05:25.652Z","altered":true,"baseURL":"http%3A%2F%2Frepositorio.ucjc.edu%2Foai%2Frequest","identifier":"oai:repositorio.ucjc.edu:20.500.12020/796","datestamp":"2018-11-05T13:36:54Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Universidad Camilo José Cela, Vicerrectorado de Innovación","name":"Vicerrectorado Innovación","surname":"Universidad Camilo José Cela","rank":1,"pid":null,"affiliation":null}],"resulttype":{"classid":"dataset","classname":"dataset","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"esl/spa","classname":"Spanish","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"Ciencias de la Comunicación","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Redes sociales","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Comunicación","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Información","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Desinformación","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"III Liga de Debate CICAE","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Instantaneidad","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Información periodística","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Fake news","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"5910.02 Medios de Comunicación de Masas","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"Jorge Gallardo - Liga de Debate CICAE","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"Jorge Gallardo, profesor de Derecho en la Universidad Camilo José Cela (UCJC), Doctor en Comunicación Audiovisual y MBA en Empresas Audiovisuales. Subdirector de Espejo Público en Antena 3 Noticias. \n\nEn esta ocasión, Jorge Gallardo habla sobre las redes sociales, cómo han transformado la manera en la que nos comunicamos y nos informamos. \n\nIII Liga de Debate CICAE - UCJC http://ligacicae.ucjc.edu/\n\nLa Universidad Camilo José Cela (UCJC) y la Asociación de Colegios Privados e Independientes –Círculo de Calidad Educativa (CICAE) – organizan la tercera edición de esta gran liga de debate académico. El formato es al estilo inglés, similar al de la Oxford Union, donde algunos jóvenes se reunían a debatir sobre temas de la más candente actualidad y polemizaban con la intención de formarse en tan valoradas habilidades.\n\nLa Liga de Debate CICAE-UCJC es una ocasión única para los alumnos de ponerse en contacto con herramientas tan útiles como la oratoria y la comunicación efectiva. Pero, sobretodo, una oportunidad de fomentar el pensamiento crítico y la socialización entre alumnos con espíritu emprendedor. La Liga de Debate CICAE - Universidad Camilo José Cela se diferencia del resto de torneos en que potenciamos que sea eminentemente formativa. Alumnos y profesores reciben formación en comunicación, oratoria y debate por parte de alguno de los expertos en debate españoles más reconocidos en la escena internacional.\n\nDatos de la III Liga de Debate CICAE - UCJC http://ligacicae.ucjc.edu/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2018-10-23","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":{"value":"http://creativecommons.org/licenses/by-nc-nd/4.0/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0024","classname":"Film","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"url":["http://hdl.handle.net/20.500.12020/796"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"dateofacceptance":{"value":"2018-10-23","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"storagedate":null,"device":null,"size":null,"version":null,"lastmetadataupdate":null,"metadataversionnumber":null,"geolocation":[]} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055872001,"id":"50|od______3989::d791339867bec6d3eb2104deeb4e4961","originalId":["od______3989::d791339867bec6d3eb2104deeb4e4961"],"collectedfrom":[{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null}],"pid":[],"dateofcollection":"2020-03-03T13:05:34.586Z","dateoftransformation":"2020-03-03T13:06:57.721Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2020-03-03T13:05:34.586Z","altered":true,"baseURL":"http%3A%2F%2Frepositorio.ucjc.edu%2Foai%2Frequest","identifier":"oai:repositorio.ucjc.edu:20.500.12020/645","datestamp":"2018-04-12T07:59:27Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Universidad Camilo José Cela, Vicerrectorado de Innovación","name":"Vicerrectorado Innovación","surname":"Universidad Camilo José Cela","rank":1,"pid":null,"affiliation":null}],"resulttype":{"classid":"dataset","classname":"dataset","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"esl/spa","classname":"Spanish","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"Transferencia de Conocimiento e Innovación","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Innovación","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Investigación","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Ciencia","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Tecnología","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"UCJC Open Science Day 2018","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"El UCJC Open Science Day tiene como objetivo mostrar las actividades de investigación llevadas a cabo por investigadores de la Universidad Camilo José Cela (UCJC) a todos los miembros de la UCJC.","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2018-04-10","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":{"value":"http://creativecommons.org/licenses/by-nc-nd/4.0/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0024","classname":"Film","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"url":["http://hdl.handle.net/20.500.12020/645"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"dateofacceptance":{"value":"2018-04-10","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"storagedate":null,"device":null,"size":null,"version":null,"lastmetadataupdate":null,"metadataversionnumber":null,"geolocation":[]} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055872022,"id":"50|od______3989::d90d3a1f64ad264b5ebed8a35b280343","originalId":["od______3989::d90d3a1f64ad264b5ebed8a35b280343"],"collectedfrom":[{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null}],"pid":[],"dateofcollection":"2020-03-03T13:05:34.912Z","dateoftransformation":"2020-03-03T13:06:57.747Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2020-03-03T13:05:34.912Z","altered":true,"baseURL":"http%3A%2F%2Frepositorio.ucjc.edu%2Foai%2Frequest","identifier":"oai:repositorio.ucjc.edu:20.500.12020/795","datestamp":"2018-11-06T15:43:10Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Universidad Camilo José Cela, Vicerrectorado de Innovación","name":"Vicerrectorado Innovación","surname":"Universidad Camilo José Cela","rank":1,"pid":null,"affiliation":null}],"resulttype":{"classid":"dataset","classname":"dataset","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"esl/spa","classname":"Spanish","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"Ciencias de la Comunicación","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Unión Europea","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Desinformación","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Política","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Periodismo","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Ciudadanos europeos","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Democracias","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Estado de derecho","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Derechos humanos","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"5910.02 Medios de Comunicación de Masas","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"Ramón Luis Varcárcel - La Unión Europea ante el reto de la desinformación","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"Conferencia de Ramón Luis Valcárcel, vicepresidente del Parlamento Europeo, en el Campus de Almagro de la Universidad Camilo José Cela (UCJC) bajo el título \"La Unión Europea ante el reto de la desinformación\", en la que ha alertado sobre el alcance de la desinformación en las democracias y sobre cómo pone en peligro los derechos de los ciudadanos europeos. También ha participado el rector de la UCJC, Samuel Martín-Barbero.","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2018-10-11","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":{"value":"http://creativecommons.org/licenses/by-nc-nd/4.0/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0024","classname":"Film","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"url":["http://hdl.handle.net/20.500.12020/795"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"dateofacceptance":{"value":"2018-10-11","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"storagedate":null,"device":null,"size":null,"version":null,"lastmetadataupdate":null,"metadataversionnumber":null,"geolocation":[]} \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_subject/nocontext/dataset_10.json.gz b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/dataset/update_subject/nocontext/dataset_10.json.gz deleted file mode 100644 index cf3c3aa7b6412355f6172a0b70a3929ebdcc2735..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6755 zcmV-p8l2@HiwFqS2%ug717u-zVRL14UokK)YIARH0PS7Pj^j4A-p^AI1_qb`TrNqr z{I{#PDwztplSX$ZKyG>vP!eskB8d(qRpR6}aPtiJ33}O!UJQDdt+#oK`y}@qlCor% z>n~F^Qo1=)=-3u19-i;;_k2A3r4!Mdo~Lusnf}t@=_Sv25VOv7PUDPq;g>m+l11Ae zA{MipMZsD=RXXwoPN+culI; zue%*6H!oJ8E|&9zWjRe&ovG`OeaH95!|}wKK&7!H-}!G5eW(7{pNuEdspCbFA9NK#ovTEy{dC}D+lgZGx1 zU8gs2$Nus2C$kqvp5u;>TyM~atUnYq=5x;EF0hf{d+6z3u0X`2@ACDET?5Vb>FcgF z-Mg7CqK9TH=Eh2toPoFk_Xe=pts)bXd@u;)zN|LT;fb4k-|E@VOv=NL}?e$O4M z9PB4Zt+DtPiW8LAb@z+0?^BkAlCMhDEvdYOhI9(0-7F7{bEc34oB*wWX6&oyPaw}S z&sTr#pZwMP6#lmA|tx9GF)<~c2CH~ z@s}s($6n7l1~I;i!eiCX&>~+7soL5c+MYr8GaAQKM&f8j6B;f>mwXN{U{Iz>P=3t{ zc}*602#9_UotA0M*tDU%`JBhxV60kucc=3#s0N%B!3FdbJ3apF%dgK*kKD=ief*wSyYlQyV0-Yp z_u$B zXlM%#7KSEaxG)nXi$e4Bqk!K>_yvun=GYd?U zzzqAY({uaerJX)Cx<#Gy992`>a5{?#Pa_VU7oq{ckWj!sEXyU$*@EA&-bg4O#=Vsk_W|_k*pw4bVe^2DR&t*?=l!P zAxlcW5e0c!1g!Te{VL^`OlG(tM`kqPu`n)*8H=%-uqfWsRY*gqQ(n67O594fm*ZNU z-o4}Ntcn17x+V5v+UdlSfXannX{6hV{xuVY3{A^He^<_a%FQ?Bh1H)!k*emA8z*6j z%~KX}`h*7Lh+J{vTYzruy0r4O%TL1*LQ<(baH#eGeZSBsvP|;DGOrS)6-@8}y_@lK zwpAeh%+t)YB!DaCA@pcFt;%?aL&<0k-5B(U2}q_K#3pri9ITJh@F{iV(2%0mx$;Zf9g(x*A?(r9m$U44fe|Zl*h@Tx?|rF zD*yC%rIjA8{-J~*#8PAmc@*G5NkQFCA!DQ~8T(yEac@b}C}us7=lBYP0>>6Jw4;!* z2uor~=L&)8!9}&B+QW}(QlPo>bP+CLG-EVD20_^|?mrC+iPc}1&!y@kSyYiOG7u8F z+xmzYu}dCS<0Joh`&rHQO3H>N=au9eP0}l$l)st`X^{lgIK05^n9>Zt{pahy{9^Hc zC_bb=xRwv;N8@nhyMv)Op9H};@&ac#@rTho2>oyrbZ+58-j@A8$cMZKwQe-IC$-M& zPacz6r{!syTIYGA&J}9i=*V@CT>qszoO+X~?>{cJ?l~?epKabsB(^=JGOrQJ%C8lr zOs8hQ|0-()w%ZtWmQr?@QWgp+QhLdur^IDHgF0J+S;L!ibRl^N##2aUfoKwl=PVc2 zH`FKuFe896Z98a*L+G5$M7qGmE%~Bgmm(vojo@Bz4F5TU*Wg!;8o#`$^;i!=8zH~D z2jSkP&?OI0DUgjmBI2EP!166UOYK|{WIpOROd zCzOC%3iBOOpdic$5^V*+($8SRwfPq%l)&8na`P6Sqq75Dn?(piFU`nW|CW&@*awIQ z@1fbNP8W=mrA+%x=D0>u6$nKN>urhkx~C95@`4e`&>ORPPl^XnW0aJdG)sz79IQSW1#)9Pznj$hFbXD^*8B~zx zpc;4sOd=T(psK8AcW55am*XEf!z0hJI&Ft9$NC{YWW%w3h!*%EaJ#9^ehAwmTR(*L zLp-1#V&Y6j*ZLvm4q4#!VNKY4xaEwH^cx>`1hUZ;E_-G-?$v@k{PV}LQd665!OrC0xnhBPhnvOgR z#-!S@GOyj{d$N;>|Ng7W^-T}5)U#Edj>7`s0e?fPv%Zgi$M-Q;s|b5ArqK=FjM+o0 z%~HV==tNT9=&K3jAv$hGrPLKX@O}H7;oUZFjazK8`ci`0GS%?&n}n@dB|Q7`3cXwZX0&_)x{<%n)6y2(?jf7MNAwpQf zFf^Han$I0vTV3PX3E=(0yf-89=3UC@fu6r~^(-m+lQJqLEHRB2jiFO#g&Zm6_%X%{ zuR!aa;$yx$zL%v%T!9bEEkes0vC2WE++XMfN;YqEVWdRA(TYhURkC>l&1()C2q7c- zhOjtRc8Fzxy;rHxHOLt7&0AH8oWc*FCv6-Q6>O@rc>}3(BPYoKu1LGkv{UR4v}lmv z;W4xugb(Nj8{(#fXUX3!af4OZJoJ``h1VX4`q;6xj>uLxB5}jH&5lSrCR#_Nbwoa- zBhqvI>l~5p$eW-CaqLbe!NiZ;$R7^JzDwt$s2}?NEsn@rv$xO@>Gy_y|DKM>(eUv+ zkz0A1_e8okdLrG)v_H0DeN zK!DY(4QJUb5N9~+mLlf%@MtTV1T(&?4BCd8W?4`ylfuGtE0f~Mu6I^1O_sGu7rIG9 zk*rwG4cVgB$hriwlFtj}vyRD3WH$h7$rNogiMx|2c3|EmQ^3*{-als(*ccwfB{v@iM#{vJnp3r^yqk#=nyEIs^nE7HCfX#hLAfeDk=u%E>cPonli|zxE2{(6cW!xKgDlg zaJXBiEQ!wSeEqg5#xU=>0vOw_Vl&K`t$xEWE02toH=EE-=QPsx`S~vib8cR?&6W6;J>0!|G-0@?P9x8d7Cq0;u7Y9iX{pp}T_1s2D4_`wM1Wi7~-bn=m zBj;%1zu@lOUYL zF!h7FMO?+)v<|^$JEppa&qC286rZpZ&)ag_L0Jleh35_whVxyg@DVZNJ5e&IFwAR` zvIW(j5yK)YkDiBSMphlOzj>ByNepc?io25-p54qQ$QXto*u1I7U`X#4%AEWSx3B(A zG7-pK(^{+e;>=iOSg1E!|k&Lb%d|$`C7-=2C}`4=I?QsoQ+7?p5RpRiX$k zn2NlPBIhvjCMpO;E#SHiOJT56sZ?C}y{==A?tu&zo`!ry<3vRm$!NeNC=B0?j1Rgl zBFHEgAlcg#w@S2yC3FoKB7=pM0oqHdNf+b0iz>cG8H)ag0+5177loQM5cZQ|qi8A$ z1&QN*E{fu(P*UU^&CjF+aV5649I6b8sbjN^XOCg=*-tCR z%QDpNHb?=c6UIfR>3lrJP3cUlbWJwDfx_UEQp3LGXp$G?({~QM>g?)aJANKSawQ_w zyta2Jz~^8)*+mLj1{&tR%> zI3HrItk3uXsc54k*Ew>AR;O*FqWzmrGK;3AqJ8YxS}IygsAx{Bsc3cxv{W=pMSD;x z+GKn!6>UD4_rtO0gah9RB4-@Y5dLvSA^aGH^Uf_)wA-?`l8QEVhWDkSd5?A>c_mNN zRJ76Lz=h;nDw;QiKd=9|RJ2*4woGO;6Vd1Et?6u1X! zgM2jZ^n6O?_t3AW3lizB(8AFu983kn&IGiU*b*}uZyTWvyV5XqFTtbX7KIj|kVY&L z(soMCLUDdhp74bV+;PeRiZ`2_&rZ&6z1hTK^Z3{dU3buP`(!(*vT(G6F{V~`#H{F! z{#XODM6fnueRm>Q-3Geb=r!~{Os_RL%T^4h=8Am)IjiMUxs$XeW)At0BN5`~5B1VxF6hq)BKE%y~N*RVGR-A#5vWlyQnV;NQd&mM%f^NP3GZC`| zYU`QgmlQ7~Lf>Y@aQBYudyM|?fBtv2c_+g{(-~%>(iWb>QitZg|$(54bi69kb`W(q_fDMgkEinfGKiYg`$6po^lM59n7ibH7lC59dn z*7t-o{|>=$eL6KRu0!!n0QE#O^a*d|2b=+w87(q(k$E72!A;~V&92}^4%Ji*QijF39IH_bC zdkU;J;VBw`=7pI(WYoxsk+=%MrDC*&Jb<@V(W6Wpw@Rtqy2g#wuj=GOZLlQ`5qcaZ zb1kDujr*~ie+dLp*(el>)Gi+BR8VE;d!d)s6th%a)<sy^#Hqb|jreyCfBv$v8B9PB8AvQ@*b! z3{r#=0afXZ(#XYz^7?m+kBq?x=uau&JK)L5ByfiOz zvo*7W*e6^ho41k1B_{t6*-Gu}xgI9|5(YKw4%hpoKf~LpXgtm%xM0>o$| zP_AwXg)`m(17|O3rMNUSHX*X0p~K5q$W$;WfjtjC1w%wC*EZzW9JiKB5?DrbaZH8(deu=8 znyxlM)O3VF&I_RhR&*y63>ke(N)i_023Jz9@u~(}O`y6}<3;|St{ZZEu%w?g2`%K( z)X%h^Z?LKWT>y=6xp`-9#)CF26eDR)q1I)MVv^(ijfVB4$XIisV~m+Xu|`UVuR1#g zD+&)-a=}%1fYIDvbqK}xU2fiLf|nEvNew+sk)~3*4HQX3n{D0zT-lXAw2NTS02)=Qn*>xWfl*I&LmFw-sNe^T|F%}| zf(p^iJA88lsPME{GmM&LU3?E7N65E2walT95>3k-`f#ze%%PSrhsLdD4%s2lGKVa4 z=pmUyBj34}IW!Lg)~8P28#}{cKa3(4%%gr7OgyLWjxeyyjm)9jvbT>pYe6T9sSameve*gi&7vcw@v9I}y#{)B_Xu4lNurDU;a5)0cbS_1{D zt32Xqk!Y4>2a6R8MmxZ`?o6>orP+~G2jNYSS)6^r9C_ab{MA#ZK#YtW|n96fIKtLaop>8X3=Qk_Tl4j6tHj@^;zJ# z&LCne7_h-)=yq=AncbSbeLORa2sOUneRZSW$a5bvLe;nx_tgythTOYLG;;<=uJ_Uz zP5sH#8(E^6C7RulX!cUItZL;?W@?>mb|v<)vo3}P{iGI%mH=VnCA9?$LzA^2Gzr4X zD$0fhq8(mnwK=UeXI|j>`jC-Rx+XYNw65nr7q)kIJ)gyd9LBvC-DMkeA`w}x<4Rz} z2@?~69S8_WViW+~au}W=5Xuo#kAA~SXUUyht5mthGUc~{NoEqrt+NFa*nkKR>o>u5 zp<{Jw{U+9LV*Mr`f!_qT$J*^Tu|2Z&n^?ce1Nu$8Yj5_5CQj6+?tD0)kvAL!J_}eh zrhPx~#!i25+sz)gW^bk6Wa8fMeEz668jK#%Z(`(W+HW$N9Q2#u0sY}i*PjmhQ`fP6 z6YDpz2lW4hqeOi>5)2==EzSxFZPo5b+OxPdx)~(!6Ff%#PIGGh(>`pgC&w)fkgVqqJ^W`cA-GX$g)VVyRvB51Nj!E zyHX*Z(*$98Qt*s?O=Y-wBSRMB!F=Vht}PV_#p8?W>|(H!p1o|uWW z&Vt>wn%G!Pm!O*f57~2l;u%lMKBF?GiK5GDL&BR=^vx_ZSrw{_IEfRwkm5c>iGW@R zd`S*#Hat-Ns`Ez-7VlcA&e$*U_9G_M=&sKx>-%_6afkEk%vgu*+>ESEUVXS94^?BT z6^l7mF;<lg(5phuEO?76{gUNyGj1TgX_&w2T zDPm4J58y-fn+K^>F*Y1T+!zV19GI1ni$v*k5@==28IQi2Xptx*Q>9l>oU+DzA+D0y z1aq+vRB;%KbW*i_LT#HePhR6CxxW3jbpY+ASpw`5sayz?@?!T(=3;IvT^@fv)JM6o>7rMhyr!(k}hTU*5823Bwv@g2dz#Re+O3Rsyd2|~p z_`|_9i~kY0qM}FyAegCE3#j6ogRjI2XiAj=?|Szulp|tMebDd*i4mP@T$bP?Ro94`^fE0yz!(raz^7J zmJp92w{07nQ(V@S?3km6Q7jmUS z;)X67xZb2YM#2^%<;eAWpsOa~G@x>t&d$ypB0vXo3Egy*o*mymxqaMmT%_)c zFgPYH=2<#dnlxkzV$0S3V-?DHu3GFa*OH_BZ=C;#Le9V2xQLB+q56HjxV4R6{(pN+wI52Tx34tS;l7@jf3&pX!;b)SvJdr z5nI|XD%sv{_4Qk{2w9wh5u_1fGXF~$iX`@8^q+#d$v}o2EBiX*QLeCc^1z6kDIIQ* zSfyUVpQ5?vFsI1!ZL67qt~LYV$SGx~RVvPZIR7ujWSokb2D{KmaWA9@qY)-nWKC@> z-e;M?Y1go%9F>Ko83X#-H@sHVm(8> zFB@4JfnP`98v4HEaT?OvgH}lOwMk78P8gqQ8Nk@eG-sd-=TBjTi=|BYQbf>NDj0M_ z1rkO)<1AaSK*e8zsi(Es66Wdir%NFXixm?A^bICZv4AO7#qb>~B%2XL+4)bXZ=h$1 z<}*|`&_5BM{{Vl+@V}e}Oiy66(-&+)Whtg6FxjN=@7Ji8YLS3!7ofb6VxX5uCoCq; zpTcwm<)iG0!)^f`(A*5WV3*vqhL!;>#$qf^ zb-*e}VuiNpoOen?d+hwj7F8;NUo9fk2&gwupqGrVjkO76#%=}@hGBxnbtW{ca{-n_ zpzl}-at&6%2Dm5}a;A*)dHjek{PQ0dSj!T-0DQu%d`+705fW0ll$0SvrY=>4KP~y6 zs0A<)3&Lo{Mi>WL9?J!{japHnc(6W+qJe}KDujf8Ko=4Y6|n%gqIbx1nYT@d;|g84uA+?fdf>Kpj)V2+?V;+ z0My|8DexCHV8P=oMHM1KfGnUMRAJ$;`x zCz&5fGZ*3Su?esijp4n9;k8>!9zdVcVsluSTG(U_+Ai#~yoRS&UxOYL3aRV7gw=@- zGSe{f8jKVRpX(V+xuIPa*sZHknGW(r0`8Mj@i@(Yk#EHQ4Rd~~rJtp=mA9K)DrmR2 zwyFS{)wJWp96nlS7zoB_Ih&_drZ{in8|%Hw9SToG3>KE$2rwlqvRJ0Dkv$IPV9;l( z4Ry<~?Trs`ltFm`+w$mvC}oH(%Gl(C4(g61%u1%DZH-O2T4l*5~!!Z~7JdB(O>T!hAzC4;1yR#{?G zQl(HQ|M>0Sf76KS<$x32LC3ocobdc`JoLGkdgIU!JE7n0xLx1#I=(;Z`aypOII*+% zo`4hMw%ciU`Uo|2-ARAojK{s}fD`?Z(;IYO9yoCsJ+B#@==Z$-MR39r*L~!65uE6B zUoANCAuvCL9aD?lzB~AJN1U{Y%~G6vS;6aS@o!Uy+$HndW${ey4FVitJVnSDqHAX ztA$5GJ{A(U@^?5`pmeP>RZ7)ZQJ`$Ef35Z&NFPcA+wPly>#D8dXVp-ivutOur$CX2 zXB$o5if6bHd&MZx@6dCSu9%v#NKQoqGVH^8pbiz?K$mHZ_-)((efuH3tq@UNj(__f z>(Q*nC4)JSfh}TMMFJD&0#*uhN{-|b*66I*={MNXUTMPBv7_78VNRtd>=7sfV#6>D zQ&b344in%yTK?a^|MzzRE8IFO2J2|pJ%lUD6I6P}5|v~T&5mr&4fBPF8SK=~P@Td| zU_q)@&SG0B(8^QHX>xqZR_;rwqE5 z&N)()!6)EHL_=zhXvCB_2c{C{e@3YiVL1bRL%7Rf_sM|b!WpHCzz_+G%Y{J+aM+ox zo(QT9cGiJ_oFVoSE91<-s@K z*74}b%GH{jLsigAsk!~fpF|z$?Gg4nAF2p`+!e6!521f2n7<;qKW5c=nDq{v%@s>v zH;KBWjk{_@>_%#;d$`R+ekY=9qa8Wqn!5TRYCS9}wX0|6V{IE8OVAF$2{i&cb_ z_2%v}u)aklp6hgqT6~UmJM5lXQw!J$rg$zZ;89(UmMK$MQHJpU+FFy6uY^rwLn!YX z3K3{D62P(g%*Ko$a4*N4Q#O~gIRgtQA{vTo3f=-Gkinb*QDB=2Tpam!CUNcqTP0x7 z5hiKP9PCh&)c%2x9cp`;<)(oKs0xA%Dc354cCEZ3+Ox8IFwoH%oR0^vDs`34)a1`{{0Ehgg-@AiOl(LJY-jog1= zz?s~W-FF7;H-#@YRVip`jW#5uGjRG<7W~*|`Db#iQ>BAG?4?h%S9};N~k}Mpwy}B2tM35J4<$Mqi-PndS?N9_4FI z>n-M5a08wFI+NP+3x*_5Q_P}b#IV{dhk>?&SSWpaW2Pj0dig-dD^JvenEAGS+#^+; zuMPJKT(U}m+gTU_f-aT^7TyDP*b6&xT9e%2J@${R-|e(I-uNgNK+HiRD+4(SU;{gg z4sq2E#R9pL%w@2~&cm5N_k4>jxRxk&gikWlVj|3f-0zM{EF>i-BM>dTU>8uDFLgRc z?E>`^M4E4<6e<|J`$pe@+E|U? z7Ja%Pa+n??fulghq9*@B%q#ZGcYkI+2V)S=jzevoJ3uR#?>56Uys+n!I;XIkL|k16 z$^vSk>5m0yxLzF-td2Jft?m-|)Mf-fVR70Bm}4Ic7s!-S;X3MP^@zYdLdN10EiOo) zhM-pr+rsTaGFFMK^lH7P(*QZJmnbk}#aV^I|$+F9ze6gFI@JbYk~iMAz9P#>C7f|eU_ z?Ty?FY&^>E9=KKs6MtMTs_nvo9|@mXA4y&G)?If|Ii4@cT5Xfk=1dZMgv;bd5Ma2& z0(e8L?6fMHuNq(;fW<1FsY1I0)~0s4D?iLoSPsY@6@7SV@~><6s87hDb=C-iDI31O zX1-7PqG9}-V0?8k_G;*S&@r$tNE@vE{lMBg@4`LWW@Xf1?eCxy8 z+bHX+AJVv~f~@z{Y8w+6F%U0$^SJ)VE@%L{%J5y)n2uPWn?bR|kbn|oSli%jYI;t#cw3j~ zmFCE4JUlNEPjnlv*{{J9YbQAs^b?1BIbQQMIn67@VXTJFd;Jh;gIc|2)XEp=S85Q$ z2C99J7=K-;wstZ4idU&CaQE*TboZS{cge@U=jd*;PHoWLcU4q7(OqxQy%gQ;^!cbe z>i7fR4gKL@>htk1=!AjS8%)RDT_GHI7T+6mw+fj!z?;jRzIQEj*K@qiD+=LQr{^`J zyWP&%y@>A8i}PNu2;umOUrD|z@x3pZElN-~-^Ue*Zf9J2^dR{Mh?5JzT|)-CP`aPcIJSyW-|$toLX?N3;5# z@8=qG)a>WpRZ;ES&vnM*OZRgyMX(Kzf32V&^^1D}V%uKnDu;(M~6 z8@FBf?|@#S8c#Z7*gsu!J2&WhFZE%pZREV}v%224-JGS(?&jP{&wItYIT4E|7_{Y1 zcK(w&sGg9@_9SvwO9DeBqxHtA(OjCB_uJH}%hCoyNI zJjJlG^(V55WawqE@mf}1^x(xF%X*+fP{9mYdIJw{)L+Zu&%WP`Pg7<;c(H&uAFBm6 z^$D2fxYktpyK0GY9=uo>oO@~sl6#19t4H=BsjatyIS=+d2F@Ei#(fuz!J;{VxIc@7 zwb#Em*yj9j6;5jS^gEZ$QT+W7PYo`O4?X8^e}xQV`UmnHwHQ7lq->ab z3{-*vkg0DQb@(}BbeIxJicXMRnFPN3^s_;9_ze?uOa0J+_tUm8?|aqW4;xqF>gJ* z_4|g4dwtgO3dfkH{43G8yx#|xH@QCc+~wUE_r~S@u8L}>%X`qdG#Er@G!^}R*X<8R zt{3+BaL^MW4+g#ny4{}G>GIxHe1BZto52@G*YbIHo#A-=N`pa+-bgTr?(Sd^y;tk> z4mrD_aGQ7SaN;*NOTM5t`~~AST+avo;z1~`=koqkCCL@zYGBqE^mPBqC=|OK-fycf z`b|ZlxRq&@G-25HVzzF=uwmP2Ig4N2H?HZ4b+xcyj>ve*vSMdcx5%5sh;Nfw$ z@P)n*R-0l&wDG}vK_Sy+9AIPw3@iN+EJSVSbb3CVp0kHd)N`sUpA*NLKr#v=hpQM@ zbv%kzjAt{tv=5bkOu-Or#AS>j{5TJIoQJ5cA_vpk^mUS340wUnaJ^cKTTn!fplHId zAg7oZw0(oxPvpOdaaL@zR7+ch2$47&(B4f~ZioOC8je*~L zRmgF6xE>Osx)!VSMzjcN_rW#{%TcLjty0Hu$CA!7n^-U#I(~_^y7suo!q<&Dcc-tVe+*uFsaFtqtdH9Zt#QrWZT^IL)nJ>~ak(;_pY;YMGVy)dr z6mjPh8{*{FWAsP>M>T!>_~t3nuY3&lfabIop$4ZA8QRxWwgk(mLQ>_CKI#E%Dg(A= zU2N2PX$rd-=3~9hga#Tf7~#v}wOd1Z>$4N;@`;hWi5Brj@Wf%`a(?$NeKdI2yN`E~ z*K^PDuEzK@c-Olss-1Y(uo$1TOTfE+B|>z~dmb+gt~K${uZKiE%=A(&>8-^E&3Nl) z(mEEk<_&Dbw-@5u3Pu$}knt%@o^>zp)JCw5>+zF=D?yMAVD&c2{_21gVhR?eq4>5J zLXy{_ha1dDh}0BT*^ojmb_;75LD*6~7p6rXmr-C@5UCYcYFUY)KDpr$v4s zgJacm&@ruMA{O?6N}dv4)n*p4dP2VQqSp@lM4e%LYK!8*CLN?tum}hv4)VICwgKmv zDaLCBpiy{a>_BMYpu#1;9v;1nwO+IUil_ouo(L<7s^$xpAPOluG&3A=LG0lrCc$AR zRMrM=mKdrT<84#nif?U;zghCsx@Vgmo<4$>fBEju_w9?!HL#pL#1cm>hL9A#h@Q$o zCg@E^)Cjr*8*YoYah8gx%|tTCNY?hzbScglvU$Y@YylhVIbrWG4WZJiyf_1~91|pG zo&1Q&NQ=c-?6nPQimeq-#$&v4i(25`k{v>ow(_GAW`OQMO%#GXpD_pov zZ@%q!SY?|n4rHk5L}=V?S(iUb6(Nonlqf#-33800V;R7`&t)e(eOb=P5D&qa~7 zSq-wL$o7Q*uolnjv%^ux@qTl}D$T^Yakv!}5zn@%8}_q1%2`=w1m(qf3G?S-U+XOo zFfMxtrUI0V9TIb?nj?%x9!=W>=_D2znS#9lzG8PvNm~JF8Gn@rGEXzJhUTC;#Ub4l zyD+8-NDNqrz+OBP6gM5T0)MnI^m|yhs1Cx781mdu9D`X5#$ij0@uGTyu!^4MDrzab zymM`Kv3oFS3n;jP!F(8l?ni-|E6QZDg*YOJxDe9C$mC|OGLR7%;z;G7VBTd!+GrBV zZN4e(Sqq2BnTR5auV7ZeT#?-HcLM9US`-Fkdk*Rm2f>_x?WMB|*c7cf5a66z_3_0@ z5xgwe9Bg3|@BB?6Sfj>?+#pyDg0+tbR%f*D2v%c!8U*WI71b^TYcL*+E<><-BjJw* zes?4Wq7zL0anGN+yf+whN4-(txjPW7oyGST!MfHfWnR}AcrW*rvaR&Ib_B~C>_V_Q zulSj=YXevNfLGnjxW-6m_jr2#G^#fQDg4>@(Iyy2`CkyP`Va%xQRuiUUDTrN{Mnzb z4qI(7@QHw3EVOo)P9}eb^?uqb#O$^wiNyQR%7?;$8@G`whRshLX2+S_&5f{UloWNjP}l;IK&L%z)&v2q#N9Td8!pCVf{=s_uYG_w zi3nyj1gv3q71s*F~POX`m5-r*c-bC>J{v&dg~s9JxSeEANmmLM_8K=zDB= zU*0#}gmLp4a)>+-$K0oXNiVI@UK02QyJrMlcz7d$T*B})QOxnPt`v{YIgMEid8{^Z!r0=SzcEO}Ww|8kQrylqGAPmQY zzCRj{r#=rx13nD9{ zL9jd07F{&1`F)rV>iEj3ouxVY9Kb~KMwWXf%dId=Ayv(40%aU#p5^(EctGE<&!gnSO5_Vz@2ZbAMPf4eXsi?Ee9U`?Xtd`~U#n?eH=H diff --git a/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/otherresearchproduct/update_zenodocommunity/publication b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/otherresearchproduct/update_zenodocommunity/publication new file mode 100644 index 000000000..e69de29bb diff --git a/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/otherresearchproduct/update_zenodocommunity/software b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/otherresearchproduct/update_zenodocommunity/software new file mode 100644 index 000000000..e69de29bb diff --git a/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/publication/update_datasource/dataset b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/publication/update_datasource/dataset new file mode 100644 index 000000000..e69de29bb diff --git a/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/publication/update_datasource/datasource b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/publication/update_datasource/datasource new file mode 100644 index 000000000..e69de29bb diff --git a/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/publication/update_datasource/otherresearchproduct b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/publication/update_datasource/otherresearchproduct new file mode 100644 index 000000000..e69de29bb diff --git a/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/publication/update_datasource/publication b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/publication/update_datasource/publication new file mode 100644 index 000000000..12b385b22 --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/publication/update_datasource/publication @@ -0,0 +1,10 @@ +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055113942,"id":"50|ec_fp7health::000085c89f4b96dc2269bd37edb35306","originalId":["ec_fp7health::000085c89f4b96dc2269bd37edb35306"],"collectedfrom":[{"key":"openaire____::ec_fp7_health","value":"HEALTH FP7 Publications Database","dataInfo":null}],"pid":[{"value":"10.1016/j.fgb.2012.05.007","qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofcollection":"2016-02-11T18:10:02.893Z","dateoftransformation":"2016-03-08T16:42:14.571Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2016-02-11T18:10:02.893Z","altered":true,"baseURL":"file:///var/lib/dnet/health_crossref","identifier":"","datestamp":"","metadataNamespace":""}},"author":[{"fullname":"Lewis, Leanne E.","name":"Leanne E.","surname":"Lewis","rank":1,"pid":null,"affiliation":null},{"fullname":"Bain, Judith M.","name":"Judith M.","surname":"Bain","rank":2,"pid":null,"affiliation":null},{"fullname":"Lowes, Christina","name":"Christina","surname":"Lowes","rank":3,"pid":null,"affiliation":null},{"fullname":"Gow, Neil A.R.","name":"Neil A. R.","surname":"Gow","rank":4,"pid":null,"affiliation":null},{"fullname":"Erwig, Lars-Peter","name":"Lars-Peter","surname":"Erwig","rank":5,"pid":null,"affiliation":null}],"resulttype":{"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"eng","classname":"English","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"Candida albicans infection inhibits macrophage cell division and proliferation","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[],"dateofacceptance":{"value":"2012-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":{"value":"Academic Press","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"embargoenddate":null,"source":[{"value":"Fungal Genetics and Biology; Vol 49","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"fulltext":[],"format":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":{"value":"http://creativecommons.org/licenses/by/3.0/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0001","classname":"peerReviewed","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"openaire____::1256f046-bf1f-4afc-8b47-d0b147148b18","value":"Unknown Repository","dataInfo":null},"url":["http://dx.doi.org/10.1016/j.fgb.2012.05.007"],"distributionlocation":"","collectedfrom":{"key":"10|doajarticles::8cec81178926caaca531afbd8eb5d64c","value":"HEALTH FP7 Publications Database","dataInfo":null},"dateofacceptance":{"value":"2012-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"journal":{"name":"Fungal Genetics and Biology","issnPrinted":"1087-1845","issnOnline":"","issnLinking":"","ep":"680","iss":"9","sp":"679","vol":"49","edition":"","conferenceplace":null,"conferencedate":null,"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055114128,"id":"50|ec_fp7health::000b9e61f83f5a4b0c35777b7bccdf38","originalId":["ec_fp7health::000b9e61f83f5a4b0c35777b7bccdf38"],"collectedfrom":[{"key":"openaire____::ec_fp7_health","value":"HEALTH FP7 Publications Database","dataInfo":null}],"pid":[{"value":"10.1096/fj.09-145573","qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofcollection":"2016-02-11T18:10:11.811Z","dateoftransformation":"2016-03-08T16:42:14.579Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2016-02-11T18:10:11.811Z","altered":true,"baseURL":"file:///var/lib/dnet/health_crossref","identifier":"","datestamp":"","metadataNamespace":""}},"author":[{"fullname":"Tamassia, N.","name":"N.","surname":"Tamassia","rank":1,"pid":null,"affiliation":null},{"fullname":"Castellucci, M.","name":"M.","surname":"Castellucci","rank":2,"pid":null,"affiliation":null},{"fullname":"Rossato, M.","name":"M.","surname":"Rossato","rank":3,"pid":null,"affiliation":null},{"fullname":"Gasperini, S.","name":"S.","surname":"Gasperini","rank":4,"pid":null,"affiliation":null},{"fullname":"Bosisio, D.","name":"D.","surname":"Bosisio","rank":5,"pid":null,"affiliation":null},{"fullname":"Giacomelli, M.","name":"M.","surname":"Giacomelli","rank":6,"pid":null,"affiliation":null},{"fullname":"Badolato, R.","name":"R.","surname":"Badolato","rank":7,"pid":null,"affiliation":null},{"fullname":"Cassatella, M. A.","name":"M. A.","surname":"Cassatella","rank":8,"pid":null,"affiliation":null},{"fullname":"Bazzoni, F.","name":"F.","surname":"Bazzoni","rank":9,"pid":null,"affiliation":null}],"resulttype":{"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"eng","classname":"English","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"Uncovering an IL-10-dependent NF-kappa B recruitment to the IL-1ra promoter that is impaired in STAT3 functionally defective patients","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[],"dateofacceptance":{"value":"2010-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":{"value":"FEDERATION AMER SOC EXP BIOL","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"embargoenddate":null,"source":[{"value":"The FASEB Journal; Vol 24","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"fulltext":[],"format":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":null,"accessright":{"classid":"CLOSED","classname":"Closed Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0001","classname":"peerReviewed","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"10|doajarticles::8cec81178926caaca531afbd8eb5d64c","value":"Unknown Repository","dataInfo":null},"url":["http://dx.doi.org/10.1096/fj.09-145573"],"distributionlocation":"","collectedfrom":{"key":"openaire____::ec_fp7_health","value":"HEALTH FP7 Publications Database","dataInfo":null},"dateofacceptance":{"value":"2010-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"journal":{"name":"The FASEB Journal","issnPrinted":"1530-6860","issnOnline":"","issnLinking":"","ep":"1375","iss":"5","sp":"1365","vol":"24","edition":"","conferenceplace":null,"conferencedate":null,"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055114168,"id":"50|ec_fp7health::000c8195edd542e4e64ebb32172cbf89","originalId":["ec_fp7health::000c8195edd542e4e64ebb32172cbf89"],"collectedfrom":[{"key":"openaire____::ec_fp7_health","value":"HEALTH FP7 Publications Database","dataInfo":null}],"pid":[{"value":"10.1097/FJC.0b013e31828780eb","qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofcollection":"2016-02-11T18:09:48.436Z","dateoftransformation":"2016-03-08T16:42:14.58Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2016-02-11T18:09:48.436Z","altered":true,"baseURL":"file:///var/lib/dnet/health_crossref","identifier":"","datestamp":"","metadataNamespace":""}},"author":[{"fullname":"Ford, John","name":"John","surname":"Ford","rank":1,"pid":null,"affiliation":null},{"fullname":"Milnes, James","name":"James","surname":"Milnes","rank":2,"pid":null,"affiliation":null},{"fullname":"Wettwer, Erich","name":"Erich","surname":"Wettwer","rank":3,"pid":null,"affiliation":null},{"fullname":"Christ, Torsten","name":"Torsten","surname":"Christ","rank":4,"pid":null,"affiliation":null},{"fullname":"Rogers, Marc","name":"Marc","surname":"Rogers","rank":5,"pid":null,"affiliation":null},{"fullname":"Sutton, Kathy","name":"Kathy","surname":"Sutton","rank":6,"pid":null,"affiliation":null},{"fullname":"Madge, David","name":"David","surname":"Madge","rank":7,"pid":null,"affiliation":null},{"fullname":"Virag, Laszlo","name":"Laszlo","surname":"Virag","rank":8,"pid":null,"affiliation":null},{"fullname":"Jost, Norbert","name":"Norbert","surname":"Jost","rank":9,"pid":null,"affiliation":null},{"fullname":"Horvath, Zoltan","name":"Zoltan","surname":"Horvath","rank":10,"pid":null,"affiliation":null},{"fullname":"Matschke, Klaus","name":"Klaus","surname":"Matschke","rank":11,"pid":null,"affiliation":null},{"fullname":"Varro, Andras","name":"Andras","surname":"Varro","rank":12,"pid":null,"affiliation":null},{"fullname":"Ravens, Ursula","name":"Ursula","surname":"Ravens","rank":13,"pid":null,"affiliation":null}],"resulttype":{"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"eng","classname":"English","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"Human Electrophysiological and Pharmacological Properties of XEN-D0101: A Novel Atrial-Selective Kv1.5/I-Kur Inhibitor","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[],"dateofacceptance":{"value":"2013-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":{"value":"LIPPINCOTT WILLIAMS & WILKINS","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"embargoenddate":null,"source":[{"value":"Journal of Cardiovascular Pharmacology; Vol 61","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"fulltext":[],"format":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":null,"accessright":{"classid":"CLOSED","classname":"Closed Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0001","classname":"peerReviewed","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"10|opendoar____::96da2f590cd7246bbde0051047b0d6f7","value":"Unknown Repository","dataInfo":null},"url":["http://dx.doi.org/10.1097/FJC.0b013e31828780eb"],"distributionlocation":"","collectedfrom":{"key":"10|opendoar____::1a551829d50f1400b0dab21fdd969c04","value":"HEALTH FP7 Publications Database","dataInfo":null},"dateofacceptance":{"value":"2013-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"journal":{"name":"Journal of Cardiovascular Pharmacology","issnPrinted":"0160-2446","issnOnline":"","issnLinking":"","ep":"415","iss":"5","sp":"408","vol":"61","edition":"","conferenceplace":null,"conferencedate":null,"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055114204,"id":"50|ec_fp7health::0010eb63e181e3e91b8b6dc6b3e1c798","originalId":["ec_fp7health::0010eb63e181e3e91b8b6dc6b3e1c798"],"collectedfrom":[{"key":"openaire____::ec_fp7_health","value":"HEALTH FP7 Publications Database","dataInfo":null}],"pid":[{"value":"10.1016/j.ajpath.2013.06.019","qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofcollection":"2016-02-11T18:10:16.68Z","dateoftransformation":"2016-03-08T16:42:14.582Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2016-02-11T18:10:16.68Z","altered":true,"baseURL":"file:///var/lib/dnet/health_crossref","identifier":"","datestamp":"","metadataNamespace":""}},"author":[{"fullname":"Pizzolla, Angela","name":"Angela","surname":"Pizzolla","rank":1,"pid":null,"affiliation":null},{"fullname":"Wing, Kajsa","name":"Kajsa","surname":"Wing","rank":2,"pid":null,"affiliation":null},{"fullname":"Holmdahl, Rikard","name":"Rikard","surname":"Holmdahl","rank":3,"pid":null,"affiliation":null}],"resulttype":{"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"eng","classname":"English","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"A Glucose-6-Phosphate Isomerase Peptide Induces T and B Cell-Dependent Chronic Arthritis in C57BL/10 Mice Arthritis without Reactive Oxygen Species and Complement","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[],"dateofacceptance":{"value":"2013-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":{"value":"ELSEVIER SCIENCE INC","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"embargoenddate":null,"source":[{"value":"The American Journal of Pathology; Vol 183","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"fulltext":[],"format":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":{"value":"http://www.elsevier.com/open-access/userlicense/1.0/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0001","classname":"peerReviewed","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"10|doajarticles::8cec81178926caaca531afbd8eb5d64c","value":"Unknown Repository","dataInfo":null},"url":["http://dx.doi.org/10.1016/j.ajpath.2013.06.019"],"distributionlocation":"","collectedfrom":{"key":"10|opendoar____::1a551829d50f1400b0dab21fdd969c04","value":"HEALTH FP7 Publications Database","dataInfo":null},"dateofacceptance":{"value":"2013-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"journal":{"name":"The American Journal of Pathology","issnPrinted":"0002-9440","issnOnline":"","issnLinking":"","ep":"1155","iss":"4","sp":"1144","vol":"183","edition":"","conferenceplace":null,"conferencedate":null,"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055114228,"id":"50|ec_fp7health::00110d3f9d05812aa683d5117964bdcd","originalId":["ec_fp7health::00110d3f9d05812aa683d5117964bdcd"],"collectedfrom":[{"key":"openaire____::ec_fp7_health","value":"HEALTH FP7 Publications Database","dataInfo":null}],"pid":[{"value":"10.1128/MCB.00231-12","qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofcollection":"2016-02-11T18:10:21.541Z","dateoftransformation":"2016-03-08T16:42:14.583Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2016-02-11T18:10:21.541Z","altered":true,"baseURL":"file:///var/lib/dnet/health_crossref","identifier":"","datestamp":"","metadataNamespace":""}},"author":[{"fullname":"Gronroos, E.","name":"E.","surname":"Gronroos","rank":1,"pid":null,"affiliation":null},{"fullname":"Kingston, I. J.","name":"I. J.","surname":"Kingston","rank":2,"pid":null,"affiliation":null},{"fullname":"Ramachandran, A.","name":"A.","surname":"Ramachandran","rank":3,"pid":null,"affiliation":null},{"fullname":"Randall, R. A.","name":"R. A.","surname":"Randall","rank":4,"pid":null,"affiliation":null},{"fullname":"Vizan, P.","name":"P.","surname":"Vizan","rank":5,"pid":null,"affiliation":null},{"fullname":"Hill, C. S.","name":"C. S.","surname":"Hill","rank":6,"pid":null,"affiliation":null}],"resulttype":{"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"eng","classname":"English","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"Transforming Growth Factor beta Inhibits Bone Morphogenetic Protein-Induced Transcription through Novel Phosphorylated Smad1/5-Smad3 Complexes","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[],"dateofacceptance":{"value":"2012-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":{"value":"AMER SOC MICROBIOLOGY","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"embargoenddate":null,"source":[{"value":"Molecular and Cellular Biology; Vol 32","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"fulltext":[],"format":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":null,"accessright":{"classid":"CLOSED","classname":"Closed Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0001","classname":"peerReviewed","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"openaire____::1256f046-bf1f-4afc-8b47-d0b147148b18","value":"Unknown Repository","dataInfo":null},"url":["http://dx.doi.org/10.1128/MCB.00231-12"],"distributionlocation":"","collectedfrom":{"key":"openaire____::ec_fp7_health","value":"HEALTH FP7 Publications Database","dataInfo":null},"dateofacceptance":{"value":"2012-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"journal":{"name":"Molecular and Cellular Biology","issnPrinted":"0270-7306","issnOnline":"","issnLinking":"","ep":"2916","iss":"14","sp":"2904","vol":"32","edition":"","conferenceplace":null,"conferencedate":null,"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055114253,"id":"50|ec_fp7health::0013c229505d753b29370b1029f196d3","originalId":["ec_fp7health::0013c229505d753b29370b1029f196d3"],"collectedfrom":[{"key":"openaire____::ec_fp7_health","value":"HEALTH FP7 Publications Database","dataInfo":null}],"pid":[{"value":"10.1111/j.1469-0691.2011.03696.x","qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofcollection":"2016-02-11T18:10:16.003Z","dateoftransformation":"2016-03-08T16:42:14.586Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2016-02-11T18:10:16.003Z","altered":true,"baseURL":"file:///var/lib/dnet/health_crossref","identifier":"","datestamp":"","metadataNamespace":""}},"author":[{"fullname":"Espinal, P.","name":"P.","surname":"Espinal","rank":1,"pid":null,"affiliation":null},{"fullname":"Seifert, H.","name":"H.","surname":"Seifert","rank":2,"pid":null,"affiliation":null},{"fullname":"Dijkshoorn, L.","name":"L.","surname":"Dijkshoorn","rank":3,"pid":null,"affiliation":null},{"fullname":"Vila, J.","name":"J.","surname":"Vila","rank":4,"pid":null,"affiliation":null},{"fullname":"Roca, I.","name":"I.","surname":"Roca","rank":5,"pid":null,"affiliation":null}],"resulttype":{"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"eng","classname":"English","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"Rapid and accurate identification of genomic species from the Acinetobacter baumannii (Ab) group by MALDI-TOF MS.","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[],"dateofacceptance":{"value":"2012-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":{"value":"Blackwell Publishing","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"embargoenddate":null,"source":[{"value":"Clinical Microbiology and Infection; Vol 18","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"fulltext":[],"format":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":{"value":"http://www.elsevier.com/open-access/userlicense/1.0/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0001","classname":"peerReviewed","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"openaire____::1256f046-bf1f-4afc-8b47-d0b147148b18","value":"Unknown Repository","dataInfo":null},"url":["http://dx.doi.org/10.1111/j.1469-0691.2011.03696.x"],"distributionlocation":"","collectedfrom":{"key":"openaire____::ec_fp7_health","value":"HEALTH FP7 Publications Database","dataInfo":null},"dateofacceptance":{"value":"2012-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"journal":{"name":"Clinical Microbiology and Infection","issnPrinted":"1198-743X","issnOnline":"","issnLinking":"","ep":"1103","iss":"11","sp":"1097","vol":"18","edition":"","conferenceplace":null,"conferencedate":null,"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055114274,"id":"50|ec_fp7health::00161e52ec870cc48b5a0a40c5d88e58","originalId":["ec_fp7health::00161e52ec870cc48b5a0a40c5d88e58"],"collectedfrom":[{"key":"openaire____::ec_fp7_health","value":"HEALTH FP7 Publications Database","dataInfo":null}],"pid":[{"value":"10.1021/ac200237j","qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofcollection":"2016-02-11T18:09:49.972Z","dateoftransformation":"2016-03-08T16:42:14.588Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2016-02-11T18:09:49.972Z","altered":true,"baseURL":"file:///var/lib/dnet/health_crossref","identifier":"","datestamp":"","metadataNamespace":""}},"author":[{"fullname":"Xu, Shoujiang","name":"Shoujiang","surname":"Xu","rank":1,"pid":null,"affiliation":null},{"fullname":"Liu, Yang","name":"Yang","surname":"Liu","rank":2,"pid":null,"affiliation":null},{"fullname":"Wang, Taihong","name":"Taihong","surname":"Wang","rank":3,"pid":null,"affiliation":null},{"fullname":"Li, Jinghong","name":"Jinghong","surname":"Li","rank":4,"pid":null,"affiliation":null}],"resulttype":{"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"eng","classname":"English","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"Positive Potential Operation of a Cathodic Electrogenerated Chemiluminescence Immunosensor Based on Luminol and Graphene for Cancer Biomarker Detection","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[],"dateofacceptance":{"value":"2011-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":{"value":"AMER CHEMICAL SOC","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"embargoenddate":null,"source":[{"value":"Analytical Chemistry; Vol 83","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"fulltext":[],"format":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":null,"accessright":{"classid":"CLOSED","classname":"Closed Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0001","classname":"peerReviewed","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"openaire____::1256f046-bf1f-4afc-8b47-d0b147148b18","value":"Unknown Repository","dataInfo":null},"url":["http://dx.doi.org/10.1021/ac200237j"],"distributionlocation":"","collectedfrom":{"key":"openaire____::ec_fp7_health","value":"HEALTH FP7 Publications Database","dataInfo":null},"dateofacceptance":{"value":"2011-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"journal":{"name":"Analytical Chemistry","issnPrinted":"0003-2700","issnOnline":"","issnLinking":"","ep":"3823","iss":"10","sp":"3817","vol":"83","edition":"","conferenceplace":null,"conferencedate":null,"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055114298,"id":"50|ec_fp7health::001b3ce526a763539e684a5c8bec1223","originalId":["ec_fp7health::001b3ce526a763539e684a5c8bec1223"],"collectedfrom":[{"key":"openaire____::ec_fp7_health","value":"HEALTH FP7 Publications Database","dataInfo":null}],"pid":[{"value":"10.1038/nrmicro3067","qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofcollection":"2016-02-11T18:10:14.775Z","dateoftransformation":"2016-03-08T16:42:14.589Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2016-02-11T18:10:14.775Z","altered":true,"baseURL":"file:///var/lib/dnet/health_crossref","identifier":"","datestamp":"","metadataNamespace":""}},"author":[{"fullname":"Chandler, Michael","name":"Michael","surname":"Chandler","rank":1,"pid":null,"affiliation":null},{"fullname":"de la Cruz, Fernando","name":"Fernando","surname":"La Cruz","rank":2,"pid":null,"affiliation":null},{"fullname":"Dyda, Fred","name":"Fred","surname":"Dyda","rank":3,"pid":null,"affiliation":null},{"fullname":"Hickman, Alison B.","name":"Alison B.","surname":"Hickman","rank":4,"pid":null,"affiliation":null},{"fullname":"Moncalian, Gabriel","name":"Gabriel","surname":"Moncalian","rank":5,"pid":null,"affiliation":null},{"fullname":"Ton-Hoang, Bao","name":"Bao","surname":"Ton-Hoang","rank":6,"pid":null,"affiliation":null}],"resulttype":{"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"eng","classname":"English","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"Breaking and joining single-stranded DNA: the HUH endonuclease superfamily","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[],"dateofacceptance":{"value":"2013-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":{"value":"NATURE PUBLISHING GROUP","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"embargoenddate":null,"source":[{"value":"Nature Reviews Microbiology; Vol 11","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"fulltext":[],"format":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":null,"accessright":{"classid":"CLOSED","classname":"Closed Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0001","classname":"peerReviewed","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"openaire____::1256f046-bf1f-4afc-8b47-d0b147148b18","value":"Unknown Repository","dataInfo":null},"url":["http://dx.doi.org/10.1038/nrmicro3067"],"distributionlocation":"","collectedfrom":{"key":"openaire____::ec_fp7_health","value":"HEALTH FP7 Publications Database","dataInfo":null},"dateofacceptance":{"value":"2013-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"journal":{"name":"Nature Reviews Microbiology","issnPrinted":"1740-1526","issnOnline":"","issnLinking":"","ep":"538","iss":"8","sp":"525","vol":"11","edition":"","conferenceplace":null,"conferencedate":null,"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055114326,"id":"50|ec_fp7health::001bd73b6a5ada26a6021d608de6c6a4","originalId":["ec_fp7health::001bd73b6a5ada26a6021d608de6c6a4"],"collectedfrom":[{"key":"openaire____::ec_fp7_health","value":"HEALTH FP7 Publications Database","dataInfo":null}],"pid":[{"value":"10.1016/S0140-6736(12)62202-8","qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofcollection":"2016-02-11T18:10:29.817Z","dateoftransformation":"2016-03-08T16:42:14.591Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2016-02-11T18:10:29.817Z","altered":true,"baseURL":"file:///var/lib/dnet/health_crossref","identifier":"","datestamp":"","metadataNamespace":""}},"author":[{"fullname":"Hansel, Trevor T","name":"Trevor T.","surname":"Hansel","rank":1,"pid":null,"affiliation":null},{"fullname":"Johnston, Sebastian L","name":"Sebastian L.","surname":"Johnston","rank":2,"pid":null,"affiliation":null},{"fullname":"Openshaw, Peter J","name":"Peter J.","surname":"Openshaw","rank":3,"pid":null,"affiliation":null}],"resulttype":{"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"eng","classname":"English","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"Microbes and mucosal immune responses in asthma","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[],"dateofacceptance":{"value":"2013-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":{"value":"ELSEVIER SCIENCE INC","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"embargoenddate":null,"source":[{"value":"The Lancet; Vol 381","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"fulltext":[],"format":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":null,"accessright":{"classid":"CLOSED","classname":"Closed Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0001","classname":"peerReviewed","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"openaire____::1256f046-bf1f-4afc-8b47-d0b147148b18","value":"Unknown Repository","dataInfo":null},"url":["http://dx.doi.org/10.1016/S0140-6736(12)62202-8"],"distributionlocation":"","collectedfrom":{"key":"openaire____::ec_fp7_health","value":"HEALTH FP7 Publications Database","dataInfo":null},"dateofacceptance":{"value":"2013-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"journal":{"name":"The Lancet","issnPrinted":"0140-6736","issnOnline":"","issnLinking":"","ep":"873","iss":"9869","sp":"861","vol":"381","edition":"","conferenceplace":null,"conferencedate":null,"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055114352,"id":"50|ec_fp7health::001d16a111fbca498017c8d39b0068bf","originalId":["ec_fp7health::001d16a111fbca498017c8d39b0068bf"],"collectedfrom":[{"key":"openaire____::ec_fp7_health","value":"HEALTH FP7 Publications Database","dataInfo":null}],"pid":[{"value":"10.1016/j.expneurol.2011.08.012","qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofcollection":"2016-02-11T18:09:51.03Z","dateoftransformation":"2016-03-08T16:42:14.592Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2016-02-11T18:09:51.03Z","altered":true,"baseURL":"file:///var/lib/dnet/health_crossref","identifier":"","datestamp":"","metadataNamespace":""}},"author":[{"fullname":"Mazarati, Andréy","name":"Andréy","surname":"Mazarati","rank":1,"pid":null,"affiliation":null},{"fullname":"Maroso, Mattia","name":"Mattia","surname":"Maroso","rank":2,"pid":null,"affiliation":null},{"fullname":"Iori, Valentina","name":"Valentina","surname":"Iori","rank":3,"pid":null,"affiliation":null},{"fullname":"Vezzani, Annamaria","name":"Annamaria","surname":"Vezzani","rank":4,"pid":null,"affiliation":null},{"fullname":"Carli, Mirjana","name":"Mirjana","surname":"Carli","rank":5,"pid":null,"affiliation":null}],"resulttype":{"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"eng","classname":"English","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"High-mobility group box-1 impairs memory in mice through both toll-like receptor 4 and Receptor for Advanced Glycation End Products","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[],"dateofacceptance":{"value":"2011-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[{"value":"Experimental Neurology; Vol 232","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"fulltext":[],"format":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":null,"accessright":{"classid":"CLOSED","classname":"Closed Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0001","classname":"peerReviewed","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"openaire____::1256f046-bf1f-4afc-8b47-d0b147148b18","value":"Unknown Repository","dataInfo":null},"url":["http://dx.doi.org/10.1016/j.expneurol.2011.08.012"],"distributionlocation":"","collectedfrom":{"key":"openaire____::ec_fp7_health","value":"HEALTH FP7 Publications Database","dataInfo":null},"dateofacceptance":{"value":"2011-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"journal":{"name":"Experimental Neurology","issnPrinted":"0014-4886","issnOnline":"","issnLinking":"","ep":"148","iss":"2","sp":"143","vol":"232","edition":"","conferenceplace":null,"conferencedate":null,"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}} \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/publication/update_datasource/publication_10.json.gz b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/publication/update_datasource/publication_10.json.gz deleted file mode 100644 index 99c4015e715ae7540f024ef729623d3e0484d739..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5257 zcmV;46n5($iwFocB%odZ18{X>Y-wX*bZKvHUokK)YIARH0PS7fa@#nTzTc-n>0)c9 zNA8|+J60mwD%(kSPuEroBq0knMQA|Ej+4p7KF&VJ-tI%~0V#@<6w8tlXXp%4 zUDYOZz=NN|1K|6BgD;Jcq@*8@c;nzpgT?nOVSYp#2O|g(5L1N5e| zDKr;N*@Px3nM@l8*m5n+vM@G0Q-?}RO_ugg8hjj0oiQa*IzBki;Gb&+t~WA$&kh4! zw>>{J9B4+vGBg_s!3DcvF^T%{fiDt6ar^nsF^(i_TI%qiaBNmXX+UN*u!zT#^(b7!fSrmN*l~Y++ zP*l7GYi+DyyK~zf-S}-?!+Kk@+M4D-?tjck#72yY<<1T{Tj|j}Wv$y-_%VH)(kHrW z@$1*7GUx5gS$3c_Wj>l)PFC^;^qSq$^cKd~*ge47fu^@z&-i6a`?6B0c@nx@t`&$c6q!3IIu;M?2D*xfq&0+( zUsU?4npWz{axAo2&u9Zv7c`kgsq{(9-e6if*OgCy`Ipu2Jb#~bay;TU>6f)V! zAOU$1sDfUkqOjN}dUXQ62j%LQTVUyj)!NFg?Xi@8To$NSbwxzk!!Gt9pzil1PQz@F zmEUSu9fbc}%ne8Y)lQ4?x-cF&wQFe@{%fda-?rJCxr#z;PT^P@l7y>k&=>$T%HvUcJ&=i{C}&YiU@nYHzt*5l6EAbL|^O zR@tIZ@1bDe$HUB^T&IOy)0+Qs5l1YZH?e#ku=oxNlP6G#!q~2s{|0}{9!j!ANB()w zp%{&9+@>L`8uOwTqYSfI3?}pB>Qq5l(sq{g^*_F-w)!zFfr)i@154n0)W##%7+J*h zwZO0($MGFM2*Q!!KF<oL%h;dK3ytWL;2qsXF=Nl9A1Y7uwt%YxMaum;HZI z(Q~p|p-g6>!BgCf;$~je7`x8RypJ=04Aw%hoA!VFE0N9g>dbw{RCf)0_O zftay$B9l{&(lO1X1(EE`gv00uX(UA~K~N((zY7tI(baYL+CZaOoRxz_(IX0J#{S$> zGzBw<_a#pogQ9fmXhz>p>1YaJ`7xBv$??(gW%s&&agMrY$Cv2pqKA%uAELwl#Xz<0 zOAtKQ;Q3CvSI39wZ4Oc8w2p47=KghPo%xjRDe9p&xVSn#T4}&u#1k0w{%z=o?*Z+9 z1pBax>+C~3yc8Ct2EbQIF|7Iabz;FXw3hAK+SbGZHXLigELa7zfDPMPPz%}Ep{NB# zE!3v1o~IVaOEz)K?Tk{VaMbib3-ZOt)(prVP61q;Tdn&PokGnd?xU&s$IG|@E|FpI7< zS(#A5vNPd5IfhGqLj|UEt%w=+`?Nf`~I8@pNh29 zQYMsYr0CZC!m^fAF7BZRn&|I5f)z)pXYpLBnah^nrnY0(q~LV#pm*LyWLEh+i^pp3 z>NO2oXMs*<6B46iIW3Z>aG*Gu$pj?IcG(SKk}@H|B5epl;JLu05Fer6kI!32 z8rJXu>VlWMrxEI=f|00oMWZ>>^X?wEtxmu7ZYEGaKl8)I)4i`~pE}yj_tQRxLcM+r z?K9{PhyC;3#q~A%tv?v_yJuJEKVdHaH~ILke}1K!_$9cXIVvclQX52>bESTh}83+<89_`!tG z6KLF?CsLN{f{A6pE4|RtM%dIqNl1JhkHXNiy+AX+3tv?OF-Wy$kmR8dyKTEW6G-}tolz-@ zQ!fH($UcAO+2;Okd_$|4>*Be@TnpjGeq_>bFq%rb;x?(MDIO~v4~t8Pe>eR2lt+`0 zjH4#HWOqbV2#dvY6@AZz8{3je3PM&8a=rZEI)vOsZ=zWM3*MI98p7IeItKTE`U#)F zvOJ+^2n!qVAgCXQGnjaz>-_vS>d`1_9W72A^u~h6EI?h6js;9-Ww0pJvz)^Ltnttp zEXON9JuvVrvlJGMB!`(VK0V&h7+pJ4s#Ra=bU_zfrVNyaD)_<>76=t^8M}sR|6d1PUW+32@bJ*4&@=Zi zR<#2@>Bx0yE7#eXB~;9_cCZR3rNT-58s|Blftf zoc_R83Ei6obdRxVF0lK2ELY&Y0`F_nR?ma?n<7hLtcAwN3pLBdIw7`egpkMaY|{^e z@OkilbN2dx_gHs3XT8HVI0XZ@u&zM+`dRX}puLXUmbr6eDc5)@)V?fFyNR4l(;L^tcpxJsfq#2Q$LIvA#Rc-ggBF|G6LiR9iq5#0j`>X< zsa9^6PbrIAIrR~u>|MoJfYPzxvzzgJ=X_3`K%F9R(;>Q=kPvsQmi)gl=Q2J~6)@?Q z*^{~hqc&8=B1+O(zjt{d!z5k2`9n49OK=%y946e^cF2r~l|ew|!_sXShOXNF*WoeL zF8SwS_J8%Q4Qr^ytBRYX#=$xw>6<nRm0$uk&GIT7%*FD35F+tP45%%oRcpgUIoV`XcI>w#bHa2aq zrP&^q+%IlxhV9wyPYP16pH=U$4_?!DzRlUSUvMM*ygc=S)Q^*?{E9b1wsV<10re{? zZ%<8|=(M8YbXmh(W=|mfh~3^LW6nj~M1$&m)XPdru{}Zb4@{mIsB!{tSF!ENDS=%> zCj~@O4pqKk8J7ovtzmNoYAaB?UOsyr)V?HO!r7D^)>|_nH|!U#EjL2B8|H?_T;3U* z%s17`$wC(XzZ<}$J>@>M0~N?8GKNgd82U@s|0}u?d^Sb?BRcC2j{2?ZixYH~aYPEY zenlpuaO>LO)`zfyy?c;XqYv|+^TTSYRev~a-HTY9g}FLoP%b~mFfuO*4V_PSi%s~d z1AZOsTJ6DCd+-%GunCJ%M8PlqUA{a~u*KNA#ui}gxh=;ue&3ocz*sX%wg4Awfs7E< zD0kf}wm`83b!w~U*#c)%#2gz_OQ(VBXh8rYgGDrAYJnBHF15CZn6o*1eb@p`#~l*r zlD&3r6+KWtGv4~51+VQn`p)#g%iXlFC{MlUf!}9MbT#I)TSl@Ke}UIml1hmB_t~Bl z!GM99KbAE7vHEh5*^?gljmQ8z*MyCERYRFj3Bp4vL3nl}2L`N(-oi{^SxF_OT9vIy z0tMtNAirMTbsfkbN>wrd&XA|l_rL@j*3Dvp;S|G4Fv|7R@Fw zr%nRdP^dqd%wnFb`vw%KPw#2x%~1U*ws zcVR*Fm}ZDX<_8lP?s9Nn1=#tO zzJ@ZZE6`=b#U;9|Lb@n) zxn6DcJi6>{3hCk-0kw3SIJRLK9<^PQSb^))0PFe|d(k&%uMxUzxSd!`BspbhwxjUn z`Wf=p+t1Cm<5)Z6%ifD^KVOumUiflPhBb-gCAen{##$Pc&}o@ay`44}-xFsJDT)Z{ ziP`5SI+64DIILW}T1ly3wYmJB(DTt_NI;dKm6+`Fr^>!`5ZV)TK4rn(B#Ryci+CQR z!)g$jN>Vj8N|s}50D9%_RUX5HhDnWYh%Z>RzsiKl1+0a9W50ke*F0{W@(jN}B$ckp zA4)w7xrPe+qJZ_+IjpP$>xY68IsMO2?_17d`L|q^M6{L25hbJ{Iy&zjWIN(d-=88G zbTpm?5tTvjli8Gt5t*>)QDNb)%NA7h`PyLN=iTe~m&a)M{&3L0I_;moL2oWE-Vas7 zz62tEPSTm6D2E=CrG0wyUGK`G6)>)V@t+BduYeM-3L00VU>%|H4PJf?A;*rXwXmgc zAFahQ+yy}H7WlZOTMKv`tLsV?JYK7|dKMlxbbAv#9y*3^6N`jIw~4LkIJ7l4q;_Bv za|?KUWA+-sMzD*EPN6Dxkc6CcSm&bFb}UXIG%y!!H*4d{Lfy z0p+LAEHrAOYeDb1K-VP}TBNMtyqWx-IQd&Xj`JAkR}|`*{cY?A8X^RriYi%zH%#8OAn`yX`9TRWPoCaepR^`{d$T0lL4m z_xM?NS?2zI4ZmHO+}8N5>y#UuJ=gXM2-mgo0>aG)5QX6?47WCI^*n}a=^HTI5ZeS} zJn{o#daj0@zzq%0*EHMpN6%xpo3qyo!@X_OPt%yr1drw+p4_&kF0iblQEwYg!;*2j zb_Q|vmx`vbC{DdF+%xi-$Yb$M)Qv;&zyI@C;+ryo{@;H;F5#Pn{GKT88G(xMCORW& z%1Ehe@m$p;MfZel`_M&A^npaOt>TKJYEr37if@hBt_0wwpFfj0Yd=UKqFSqJQY9jH zo};nfcIO@u5tCcf#Vx5;tW2nEO_#EbZMQiqBw8WS^>Xv;Nc1Tz87s$*o?aSg(hVSTx_p&G< zdJ{d)qkbQQ%uw)f7NqK`$ya7XDu&0u7~Rgto2`M_<4;p6V6hUXBtqxelzg$(R#&$p zDv(xzv_Bi9eQI_5s$g2>#p?*ue%srxL$(?=Tc+!7581-Euz+m!0Gst, and not Rst<>Gst).","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2012-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[{"id":"http://zenodo.org/communities/euromixproject"}],"externalReference":[],"instance":[{"license":{"value":"https://creativecommons.org/licenses/by-sa/3.0/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0029","classname":"Software","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"10|opendoar____::fd4c2dc64ccb8496e6f1f94c85f30d06","value":"ProdInra","dataInfo":null},"url":["http://prodinra.inra.fr/record/255707"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::1582","value":"ProdInra","dataInfo":null},"dateofacceptance":{"value":"2012-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"documentationUrl":[],"license":[],"codeRepositoryUrl":null,"programmingLanguage":null} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055721330,"id":"50|od______1582::5aec1186054301b66c0c5dc35972a589","originalId":["od______1582::5aec1186054301b66c0c5dc35972a589"],"collectedfrom":[{"key":"opendoar____::1582","value":"ProdInra","dataInfo":null}],"pid":[],"dateofcollection":"2019-01-24T16:45:07Z","dateoftransformation":"","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2019-01-23T18:54:28.567Z","altered":true,"baseURL":"http://oai.prodinra.inra.fr/ft","identifier":"oai:prodinra.inra.fr:402973","datestamp":"2018-03-19T00:00:00Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Muratorio, Sylvie","name":"Sylvie","surname":"Muratorio","rank":1,"pid":null,"affiliation":null}],"resulttype":{"classid":"software","classname":"software","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"eng","classname":"English","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"modèle de simulation","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"modèle physiologique","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"approche génétique","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"castanea","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"fagus sylvatica","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"PDG Documentation, version 2","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[],"dateofacceptance":{"value":"2017-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":{"value":"https://creativecommons.org/licenses/by-sa/3.0/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0029","classname":"Software","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::1582","value":"ProdInra","dataInfo":null},"url":["http://prodinra.inra.fr/record/402973"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::1582","value":"ProdInra","dataInfo":null},"dateofacceptance":{"value":"2017-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"documentationUrl":[],"license":[],"codeRepositoryUrl":null,"programmingLanguage":null} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055728345,"id":"50|od______1582::626bf0af9988f811e6290d694587edf5","originalId":["od______1582::626bf0af9988f811e6290d694587edf5"],"collectedfrom":[{"key":"opendoar____::1582","value":"ProdInra","dataInfo":null}],"pid":[],"dateofcollection":"2019-01-24T16:45:07Z","dateoftransformation":"","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2019-01-23T18:57:53.59Z","altered":true,"baseURL":"http://oai.prodinra.inra.fr/ft","identifier":"oai:prodinra.inra.fr:396375","datestamp":"2018-12-20T00:00:00Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Chades, Iadine","name":"Iadine","surname":"Chades","rank":1,"pid":null,"affiliation":null},{"fullname":"Chapron, Guillaume","name":"Guillaume","surname":"Chapron","rank":2,"pid":null,"affiliation":null},{"fullname":"Cros, Marie-Josee","name":"Marie-Josee","surname":"Cros","rank":3,"pid":null,"affiliation":null},{"fullname":"Garcia, Frederick","name":"Frederick","surname":"Garcia","rank":4,"pid":null,"affiliation":null},{"fullname":"Sabbadin, Regis","name":"Regis","surname":"Sabbadin","rank":5,"pid":null,"affiliation":null}],"resulttype":{"classid":"software","classname":"software","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"eng","classname":"English","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[],"title":[{"value":"Package MDPtoolbox R","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"The Markov Decision Processes (MDP) toolbox proposes functions related to the resolution of discrete-time Markov Decision Processes: finite horizon, value iteration, policy iteration, linear programming algorithms with some variants and also proposes some functions related to Reinforcement Learning.","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2017-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":null,"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0029","classname":"Software","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::1582","value":"ProdInra","dataInfo":null},"url":["http://prodinra.inra.fr/record/396375"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::1582","value":"ProdInra","dataInfo":null},"dateofacceptance":{"value":"2017-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"documentationUrl":[],"license":[],"codeRepositoryUrl":null,"programmingLanguage":null} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055729488,"id":"50|od______1582::639909adfad9d708308f2aedb733e4a0","originalId":["od______1582::639909adfad9d708308f2aedb733e4a0"],"collectedfrom":[{"key":"opendoar____::1582","value":"ProdInra","dataInfo":null}],"pid":[],"dateofcollection":"2019-01-24T16:45:07Z","dateoftransformation":"","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2019-01-23T18:50:56.823Z","altered":true,"baseURL":"http://oai.prodinra.inra.fr/ft","identifier":"oai:prodinra.inra.fr:408837","datestamp":"2018-03-19T00:00:00Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Becheler, Ronan","name":"Ronan","surname":"Becheler","rank":1,"pid":null,"affiliation":null},{"fullname":"Masson, Jean-Pierre","name":"Jean-Pierre","surname":"Masson","rank":2,"pid":null,"affiliation":null},{"fullname":"Arnaud-Haond, Sophie","name":"Sophie","surname":"Arnaud-Haond","rank":3,"pid":null,"affiliation":null},{"fullname":"Halkett, Fabien","name":"Fabien","surname":"Halkett","rank":4,"pid":null,"affiliation":null},{"fullname":"Mariette, Stéphanie","name":"Stéphanie","surname":"Mariette","rank":5,"pid":null,"affiliation":null},{"fullname":"Guillemin, Marie-Laure","name":"Marie-Laure","surname":"Guillemin","rank":6,"pid":null,"affiliation":null},{"fullname":"Valero, Myriam","name":"Myriam","surname":"Valero","rank":7,"pid":null,"affiliation":null},{"fullname":"Destombe, Christophe","name":"Christophe","surname":"Destombe","rank":8,"pid":null,"affiliation":null},{"fullname":"Stoeckel, Solenn","name":"Solenn","surname":"Stoeckel","rank":9,"pid":null,"affiliation":null}],"resulttype":{"classid":"software","classname":"software","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"eng","classname":"English","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"clonalite","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"eucaryote","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"reproduction clonale","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"approche bayésienne","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"écologie végétale","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"logiciel","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"endogamie","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"autoincompatibilité","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"ClonEstiMate 1.01","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"ClonEstiMate, a Bayesian method for quantifying rates of clonality of populations genotyped at two-time steps","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2016-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":{"value":"https://creativecommons.org/licenses/by-sa/3.0/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0029","classname":"Software","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::1582","value":"ProdInra","dataInfo":null},"url":["http://prodinra.inra.fr/record/408837"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::1582","value":"ProdInra","dataInfo":null},"dateofacceptance":{"value":"2016-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"documentationUrl":[],"license":[],"codeRepositoryUrl":null,"programmingLanguage":null} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055738736,"id":"50|od______1582::6e7a9b21a2feef45673890432af34244","originalId":["od______1582::6e7a9b21a2feef45673890432af34244"],"collectedfrom":[{"key":"opendoar____::1582","value":"ProdInra","dataInfo":null}],"pid":[],"dateofcollection":"2019-01-24T16:45:07Z","dateoftransformation":"","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2019-01-23T18:53:57.871Z","altered":true,"baseURL":"http://oai.prodinra.inra.fr/ft","identifier":"oai:prodinra.inra.fr:403174","datestamp":"2018-03-19T00:00:00Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Delenne, Jean-Yves","name":"Jean-Yves","surname":"Delenne","rank":1,"pid":null,"affiliation":null},{"fullname":"Richefeu, Vincent","name":"Vincent","surname":"Richefeu","rank":2,"pid":null,"affiliation":null},{"fullname":"Frank, Xavier","name":"Xavier","surname":"Frank","rank":3,"pid":null,"affiliation":null},{"fullname":"Radjaï, Farhang","name":"Farhang","surname":"Radjaï","rank":4,"pid":null,"affiliation":null}],"resulttype":{"classid":"software","classname":"software","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"eng","classname":"English","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"Modélisation et simulation","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Modeling and Simulation","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"structure granulaire","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"algorithme","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"simulation numérique","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"flux de gaz","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"flux de liquide","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"Flowbox","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"The code FLOWbox is dedicated to the computation of flow through porous and granular materials.\nFLOWbox is based on an optimized 3D Lattice Boltzmann algorithm for the computation of liquid or gas flows directly at the scale of heterogeneities. FLOWbox intends to be a powerful and versatile software able to operate on highly detailed microstructures in a systematic fashion. These microstructures can be generated either from numerical simulation or from tomography.","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2015-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":{"value":"https://creativecommons.org/licenses/by-sa/3.0/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0029","classname":"Software","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::1582","value":"ProdInra","dataInfo":null},"url":["http://prodinra.inra.fr/record/403174"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::1582","value":"ProdInra","dataInfo":null},"dateofacceptance":{"value":"2015-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"documentationUrl":[],"license":[],"codeRepositoryUrl":null,"programmingLanguage":null} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055741711,"id":"50|od______1582::71dd00de0e70764d2800a766c0b165db","originalId":["od______1582::71dd00de0e70764d2800a766c0b165db"],"collectedfrom":[{"key":"opendoar____::1582","value":"ProdInra","dataInfo":null}],"pid":[],"dateofcollection":"2019-01-24T16:45:07Z","dateoftransformation":"","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2019-01-23T18:35:31.489Z","altered":true,"baseURL":"http://oai.prodinra.inra.fr/ft","identifier":"oai:prodinra.inra.fr:442564","datestamp":"2018-11-12T00:00:00Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Bitteur, Sylvaine","name":"Sylvaine","surname":"Bitteur","rank":1,"pid":null,"affiliation":null},{"fullname":"Lortal, Sylvie","name":"Sylvie","surname":"Lortal","rank":2,"pid":null,"affiliation":null}],"resulttype":{"classid":"software","classname":"software","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"eng","classname":"English","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[],"title":[{"value":"Charte graphique et site web MILK International Symposium","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[],"dateofacceptance":{"value":"2014-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":{"value":"https://creativecommons.org/licenses/by-nd/3.0/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0029","classname":"Software","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::1582","value":"ProdInra","dataInfo":null},"url":["http://prodinra.inra.fr/record/442564"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::1582","value":"ProdInra","dataInfo":null},"dateofacceptance":{"value":"2014-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"documentationUrl":[],"license":[],"codeRepositoryUrl":null,"programmingLanguage":null} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055745351,"id":"50|od______1582::764d9ba73f2f3e794e00a80b075330ef","originalId":["od______1582::764d9ba73f2f3e794e00a80b075330ef"],"collectedfrom":[{"key":"opendoar____::1582","value":"ProdInra","dataInfo":null}],"pid":[],"dateofcollection":"2019-01-24T16:45:07Z","dateoftransformation":"","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2019-01-23T18:41:37.345Z","altered":true,"baseURL":"http://oai.prodinra.inra.fr/ft","identifier":"oai:prodinra.inra.fr:407117","datestamp":"2018-05-28T00:00:00Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Favre, Colette","name":"Colette","surname":"Favre","rank":1,"pid":null,"affiliation":null},{"fullname":"Grel, Audrey","name":"Audrey","surname":"Grel","rank":2,"pid":null,"affiliation":null},{"fullname":"Granier, Evelyne","name":"Evelyne","surname":"Granier","rank":3,"pid":null,"affiliation":null},{"fullname":"Cosserat-Mangeot, Régine","name":"Régine","surname":"Cosserat-Mangeot","rank":4,"pid":null,"affiliation":null},{"fullname":"Bachacou, Jean","name":"Jean","surname":"Bachacou","rank":5,"pid":null,"affiliation":null},{"fullname":"LEROY, Nathalie","name":"Nathalie","surname":"Leroy","rank":6,"pid":null,"affiliation":null},{"fullname":"Dupouey, Jean-Luc","name":"Jean-Luc","surname":"Dupouey","rank":7,"pid":null,"affiliation":null}],"resulttype":{"classid":"software","classname":"software","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"fra/fre","classname":"French","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"digitalisation","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"carte des sols","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"géoréférencement","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"vectorisation","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"France","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"usage du sol","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"Digitalisation des cartes anciennes : Manuel pour la vectorisation de l'usage des sols et le géo-référencement des minutes 1:40 000 de la carte d' Etat-Major","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[],"dateofacceptance":{"value":"2017-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":{"value":"https://creativecommons.org/licenses/by-sa/3.0/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0029","classname":"Software","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::1582","value":"ProdInra","dataInfo":null},"url":["http://prodinra.inra.fr/record/407117"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::1582","value":"ProdInra","dataInfo":null},"dateofacceptance":{"value":"2017-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"documentationUrl":[],"license":[],"codeRepositoryUrl":null,"programmingLanguage":null} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055748883,"id":"50|od______1582::7a6ace3d7ad42ac813e4955f66a44435","originalId":["od______1582::7a6ace3d7ad42ac813e4955f66a44435"],"collectedfrom":[{"key":"opendoar____::1582","value":"ProdInra","dataInfo":null}],"pid":[],"dateofcollection":"2019-01-24T16:45:07Z","dateoftransformation":"","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2019-01-23T18:52:22.609Z","altered":true,"baseURL":"http://oai.prodinra.inra.fr/ft","identifier":"oai:prodinra.inra.fr:407676","datestamp":"2018-03-19T00:00:00Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Desjeux, Yann","name":"Yann","surname":"Desjeux","rank":1,"pid":null,"affiliation":null},{"fullname":"Latruffe, Laure","name":"Laure","surname":"Latruffe","rank":2,"pid":null,"affiliation":null}],"resulttype":{"classid":"software","classname":"software","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"eng","classname":"English","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"Stochastic Frontier Analysis (SFA);R; R package","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"sfadv: Advanced Methods for Stochastic Frontier Analysis. R package version 1.0.1","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"Stochastic frontier analysis with advanced methods.\nIn particular, it applies the approach proposed by Latruffe et al. (2017) to estimate a stochastic frontier with technical inefficiency effects when one input is endogenous.","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2017-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":{"value":"https://creativecommons.org/licenses/by-sa/3.0/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0029","classname":"Software","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::1582","value":"ProdInra","dataInfo":null},"url":["http://prodinra.inra.fr/record/407676"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::1582","value":"ProdInra","dataInfo":null},"dateofacceptance":{"value":"2017-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"documentationUrl":[],"license":[],"codeRepositoryUrl":null,"programmingLanguage":null} diff --git a/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/software/software_10.json.gz b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/sample/software/software_10.json.gz deleted file mode 100644 index 3dcadf41d70ba3ac0cd5661d34778d279d35e352..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6727 zcmV-N8o1>jiwFo3Y@l8M19NX?ba!ELWnVEcE^2dcZUF6FUvt|yl7GKXfm7Aq*j2Jj ziljto_V&uLoy2o?lCrbAH@7pDf=Ez8LJ?XLw4==CVc+hfte^Hn_;o+jbp!k-S&nQ^ z5-Vd&Wo#1!&_H*ifo}W={L%`kq(@04TEkyjJUQnXAH}RSjA)#(Hl#!>O<7nage+!~ zg`>H8!;+xRE7LratzpaR3|d7=d_POYIZLR@*@74KGYupc2@(!snq?fQw6b}|r!$et zVUUU}yP)yAVajGA<5Hw^D6X<5bjog%ISVFi%2dT+!sM`~y{BkrRi2{88*+X8*lqz` zna_Y-O!6tqB%RJ$L)-H`%kz2z-|_pcPKW6uHm{k@7K5XnX_}{H1lr;y(jdL>#jK1QVrV3RV2lddKF_7BOQRR?-$Fg_2?rXa@ zbiJX~|KC=bQ>HY@B9TsMksIEy_mHaV$0`NoO|AH)=>7rAf|SonrI^t49Qb?ywKi!w zuWf(mxI@S5xZVKi(pWO3qo9GHha;M?Kb{^#nTeFM;qESw>j1rwLti`UN0jbH5|uP$ ziR2MyDe{W);c~X2>vp|iW7|7+_qAmW)jw>goDOsK_=7%&8#ye2cLY^pGpbFc@Fh)%{i9WOP3 zCF3RPhsikR*<=OrvWC?}>$e|qgyx9^qof8vmXF@TXi{P>Mk8sRv2##kLW5i~0u7$= zl%gFY8L%9NH6wvYMMBRx7+Qh@`L8*R3+*M1E|At@2h?-j^u}ZLo_uWD0J1O@kZW@R z`NU*E7H0$Usp){Mo(~rLa+ew57P*^zxYe9+W44bUQIjQ?$fR13t$i?DAi;4;XA}O{ zoDn7okZ0tAjmS{~wklDhfyOYLr`WW7N)D&|m=iE8OLA>$<`l*`(exG-bm7Iaj-pui zf&81r3{6E{%CevfW>xTsRe?5TF*~P;4AnfPX3XY1R!^ZcfNslj$}6=6MUL~DWw#95 zZ_9RQcs@d#j6+0EGi*Ad=~%#WM+-uy!o-vYg;;Qglduvgp419O{~ZW0&3u$gHS_A} zNfp!+l&&g(cBE>yz#Jo741hqh43;hvS!YTL62IuhU@`xHV2KEYn)L%Qo#qLbFbVC3 z$gvh`5fnnZ5TCM2l1PRpS)nmdVax-TWDDAZ)n`zDkTS3-=L{b{Gfz0t=Y!4pGfqXaqcGvl#a?LxP%iA>ci*I04@z8xr_U z!knpwL6vp0iVoFn*E9wENXrsjW>6whY9aNipP-AVa;6Mbn7(Lo{~Kncy01}?-?0bZQ}O2J8mETxR^k?HPq8p^g-s<;g6U1bi@tf~N$7>H2XiW2je(TSMd{I-DK(UT$M^aN`uIMLf+U ziFtxmg&5HUEyov0J{>{-fOo3@=*(qgOO=Ce0xjF$ZZG9*aCsrC3puefN=q67RWjUy zJlRC#aYzy&Q7SRUu#g#4b2^)%azHa1p01^a5~xxn z;#gd07NA{KVp$&4TgWeDW2q`N3slyMW2jr#3Wp;3PNM3;h>6uE1dJgDK1dRP>$*K8 zz*^!$yNONo|Cah~lTN3z1@8h8=hGzHR;gX}2L5v32V_v0ef85Jy&?@W42rZqJb~Ab z9&=WX15lMj84DcnxvW%bt5h3ER9yZZN9+j422Yf^5-I-x)(6-+2NsfNEMX~FyTZhQ zMuKF<(8WY++EDQfC^Z<;u#C?$)Tw2A`CJzI^9&?cRoE_MrR^xpA{_LlCR~lxWy4Yk zdMA7yz6ONINd1G8P=YWjtLk;^-;eNQlrRy1$m0a#g$;3tD4ddh@#d#&s zr4p^@JOn<1`G6XgeJ{-_=1KA(W*`;J0Ih*(KgX~!c@BJ>@BEqZ1cuF+fb#R0k5Zmb zJLI{zKqXT#ZK&n~g(cMpN6}}9`2h7mALYNuflxL>(s!C!&~OmAT1hBn!Di~G{bsLK zzvimG6!{5FgE-!Q@LZ8EyfLBvoK6j2pzAtnZ+tmn`YC6C42z~#pDpW^ei z6^8EX3U*{lF~U56p|Q|nHM(%cfv6m9l!08yCR~nSEm_Cx|J-Ha`sqD2t7rDq9w{Os zz}4g%d+-Jp!Zeu6H*^%dnNjFJZDB}3RiQHN*n_WuoXDs_P8j6GXF^UaZaDgV%6ieL z=h#s{@M*8xXFlutecuZQgF!d^tjLLCt8Rmk6UNFL)KtX zOTC^w0^>1q2VQq%`y+p3F|W4{IkB$z<3&#Nov(tN=o{q3qeD)B%bcUfU#=B0<&rY6 zkf}(}5}PeCgQYM6F<6R?lm_nKTwP-4iVd9c)n#&ZDa|-}Xvr9q%R@_m&SqsKfIv6( zO4W>u2e()Td$fsiQJZa7{|wFW*boTVF*r;CXK_Yev2>bC{A@Xxot>TDEFc34+eFdc z0TlN9ki0s5`RsJ>guFUDJ^ABnviIVEG?VvH1IUxZ{g)?)${;K?9gE)@@WMowkMvTtnw!`)e;CLx>Oz1fyKEcR13~AJoDSgkU`E*D?8(go~_Z6N@@ueuklOWE+ z0$Zk#Cy4i`R(B#9mfG;NMxK>vFDe*SFqcKYUaUlyHFDOiLkJO^k6W6(t08=i>eXPS72X1v zKBXZmMN@)&3YZ?*`st@b{imK%e)>t_`;g0u$=6S1;b$5uB7A%5pP1Wn0M zy2vG3z_Ut@lPwJ|+eXY$`LYRLOT`8B{V4{?0OO#>n?szN|#8OW)CZ5PNqGbSqPqI^*L6mT@p4Lly|Sc9rx?Wj5nP&Vdx$29_+DZ_-!LZ<$w>Vj5}LP?5wTQ44lUv0u{PI7@l ztJbyx7F@u(dNxwfup8&i>`P6Yjdp%wek|lwPL3d6HDl^k!Qw=Ty4A?HV&43%&zMTd zDzM&tr!aDMZ;+^Uv};S#T?5?xu!4^*y;)F^xK}mPS;Lg%0>HC zGuY{8p21GP{tTwO01m0Po?}sbZv(2mgQm6crnY#8VZM^pQ0xziiAWmT2MNE&lx>3t zzEjM?oUvo@z$@{uQB5W@cZaRx(4vuwH?R05%5b{VB3Dr@?6KVN4;KP1zs39 z-k{&5o{!x6B;a>l@ka;v^%3yf^*i2|KPt_I*{FZhQEB$zD*=8_a`n|E7y2l9zI2d0 zUpz*>%H1-U-(PiFnh3A{5#vX*_+fVu!Z5gphlHP$BAHEqzET{6)OvXQ9IR$0%wS44 zMIr%3--=Nqg@=?vM8|nXGQ8(Sg5zm~u^D)|R|n6?LDQLP6SX5KlI6Qu3}kN8rTgpe z@aUV+#&0h|ZGz34s5U0pyeimy@0jf^FW%7Mi%p6q8!QiNbMwU;y>4$5 zSu`39d_VGSoAtT_E9?zi&+o$+_SQs`*A{<_(d7Qnb2?xCR#IosbNb$@V6xr)dZ$P1 zPiTnnup=5STuE9z*O6qM_10nJ_A(vd0QgtWavsMN3{Fj}nY2I-OSEo#Bk2;o6pv6m zp($rOKZuMq$So!|2ttvHnsX;=&w%@!w#ida7MAkhT}`c-RMXN0Dr)YXsGZT#2*rcv zeT;e5Y8?2XA8R^g){2s6g8#P;{;v)h(BK`EBPR#1q!95)yeH=Cx^HNRfhMgoA4-*$z(n zH&Ypsh$ndUY;mx0yTpP@mKHH97&ttbH&YPeOH(ypMXifP6_d1ym3;kJNwGRNv664x zB$!yqZ%U-=VkHCD_iv1qID>&TpkYMALD;u^$MT~t1t#_#hq=^R7b{s;{4vH#tfANI z_}wpl)TV3szH`%2n_mri_k@9x#w-QLTL9Ati{h3*+J*@Ig0aOXJ{N!TW5Vm4U-7M9O7wPt~PhE1M>rC?IF$x}MwtijLf zxh7ZSy=TZo#eAe>&@*{;Ih)XAp?8w~>+e-!lcBoQt)nMPQ6Y?Lu_*>>bj<0P=IOOS zRGHWa4wdC9y1hHm{SyVn6F_th&fT;@uY9ga>8ur<{+;N6p^#!a0;cXyQdlJkeY9g0 zziXt`6w5*tP5*AOFDY2?j>V{=F-wxBiWbj}=vR@sqBStluX{jWgBZ+P%%wr{Jt&5Z zPWnM6NCaJ)4p9tIP4#r8HyY z!H*W!Cqo)3Jm?gjgknsm+zf_?oiK7Kc!I~xz~X-dJ^=WHMk1R5$=`<+)nO+236+f4 z9To33o9o|@NN>Nn-V}A4Q1XP%S;lEXrc6$RzOEHSkDxcaeKWh$=1U3lrNnP__rKU~+N9loV{*;z|6>>F zn%#fL?>oI4cmG+R4n|#@b|c0jJonb|2bSw}Y2>(F*KMuY{a;u7G4B35L$BZQ`}UXL z{derX+j`*L{{w~_jI7v{|M8qPkoV1`=3Zx9#G>zm0XW5L3?r7e$)7lgNZl$~ZrfG~ zHL)^#>wf$HPq9#&{0}|n3bjxqSI;#em9urf9sg4rzNJ_H#2x>1Le+j|wdG$XG`fVj z`M>_Jb=ysUvwyp4|Mou9pU90j_P}}# ztP16+3D-YtxW4>y#mM1dM@D6#@DhZp%ha6i_0S@T;`}`xNjRn-j372a5O~`-Hy2`V z%5LJ*SX_+6`G8`y<5##mgJBqA6uJKHR^M1f%MWj(Slum> zihPXs(ZFy0{cEw_OUV>(H{rnR&QD3B-s+M{yb1=IGUXrO**PG`R7xH&@B7i1O$_uq%)qqDK(754&A`A3wTVje4 z(%EEgz9hcWU|F+q;F*mBvsY{OYRz8lZ+5R%Z4PYGUac{?X0P_Ki*(Iit!wvf`=-6x zz8!{^6*7zUt$xo9yS`=7KHhaQvU^@QYJGaIc5U%TxL50VL&xs8{ue*i&UL$9Z{=RC zZSUCKul1!imy+eFz9EG!oNU)fX?(7&^SAD|Q+o^}ipICPjzwo}-FA=GY-p}Ij%^>5 zUaGB{*#yJUdV3R6F4%~i93B5RIZD(z8JP->=h+))Que0AGi!WS>GC2 zea~?$7OiuH*A;(+j<9PFoqor0y)O@1?%Ve2Bg?#Fb0hA(gvzKcMnH zSOwg{+&KZe$AoN?)2qwzLLlLk{p;`JYlq}7m22Jays{@0%scqO8f@NLz?m-wE{cq; z`yEkse0ciu$2NIEQQ=WpHi zXtK?Yltd}rjjpxeDNb`=8vPxDft0j_f8QMTSZdp1tCrhgf){sK(lsyR#9&pZPFIgJ zBa4TW#rWz{q*s^G)urm-RDVxn1oB`4IS0!H%Q<7G9$pmqiC17itPd)KJi}{d!W^dx zBZdJJn zvos^AJX4Y$`pOngTUrSdo4iu7hZF`HVOsA1;LVza4b(4F6i+L%qP z2SInLDC#C{Y8jJjHnkqRNY`y@`M&SmxT!^ZG+<8Hr=i=Wfp0s^9e7^U>rvNroppB> zuPy!vH?_R(u-onQtS^u5wEDe%ul3+3@nmmV{=Q9qq|F;Zil>FUMlfINo~TX=42&Yy zCQJ9WT)(lU%-S-z&R?@taV7;!02zK}_%wypFeoC~12X`2EhAfJPxrRJKmDGZl9|4P z*F;4&BPxnE)L0PPD+D} zp*0$J$QG{Kx5@7hULFl?&@gM@?9#WC?NWMS_4|LokD_5d Date: Thu, 12 Oct 2023 09:13:42 +0200 Subject: [PATCH 323/449] [graph cleaning] avoid NPEs --- .../oaf/utils/GraphCleaningFunctions.java | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java index 3c3e8052e..324e3dd58 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java @@ -509,12 +509,19 @@ public class GraphCleaningFunctions extends CleaningFunctions { // from the script from Dimitris if ("0000".equals(i.getRefereed().getClassid())) { - final boolean isFromCrossref = ModelConstants.CROSSREF_ID - .equals(i.getCollectedfrom().getKey()); - final boolean hasDoi = i - .getPid() - .stream() - .anyMatch(pid -> PidType.doi.toString().equals(pid.getQualifier().getClassid())); + final boolean isFromCrossref = Optional + .ofNullable(i.getCollectedfrom()) + .map(KeyValue::getKey) + .map(id -> id.equals(ModelConstants.CROSSREF_ID)) + .orElse(false); + final boolean hasDoi = Optional + .ofNullable(i.getPid()) + .map( + pid -> pid + .stream() + .anyMatch( + p -> PidType.doi.toString().equals(p.getQualifier().getClassid()))) + .orElse(false); final boolean isPeerReviewedType = PEER_REVIEWED_TYPES .contains(i.getInstancetype().getClassname()); final boolean noOtherLitType = r From dda602fff7c65341d0db9dcb9b0b5db2cf5be7ee Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Thu, 12 Oct 2023 10:05:46 +0200 Subject: [PATCH 324/449] [AMF] docs --- dhp-workflows/dhp-actionmanager/README.md | 72 +++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 dhp-workflows/dhp-actionmanager/README.md diff --git a/dhp-workflows/dhp-actionmanager/README.md b/dhp-workflows/dhp-actionmanager/README.md new file mode 100644 index 000000000..9899c4a98 --- /dev/null +++ b/dhp-workflows/dhp-actionmanager/README.md @@ -0,0 +1,72 @@ +# Action Management Framework + +This module implements the oozie workflow for the integration of pre-built contents into the OpenAIRE Graph. + +Such contents can be + +* brand new, non-existing records to be introduced as nodes of the graph +* updates (or enrichment) for records that does exist in the graph (e.g. a new subject term for a publication) +* relations among existing nodes + +The actionset contents are organised into logical containers, each of them can contain multiple versions contents and is characterised by + +* a name +* an identifier +* the paths on HDFS where each version of the contents is stored + +Each version is then characterised by + +* the creation date +* the last update date +* the indication where it is the latest one or it is an expired version, candidate for garbage collection + +## ActionSet serialization + +Each actionset version contains records compliant to the graph internal data model, i.e. subclasses of `eu.dnetlib.dhp.schema.oaf.Oaf`, +defined in the external schemas module + +``` + + eu.dnetlib.dhp + ${dhp-schemas.artifact} + ${dhp-schemas.version} + +``` + +When the actionset contains a relationship, the model class to use is `eu.dnetlib.dhp.schema.oaf.Relation`, otherwise +when the actionset contains an entity, it is a `eu.dnetlib.dhp.schema.oaf.OafEntity` or one of its subclasses +`Datasource`, `Organization`, `Project`, `Result` (or one of its subclasses `Publication`, `Dataset`, etc...). + +Then, each OpenAIRE Graph model class instance must be wrapped using the class `eu.dnetlib.dhp.schema.action.AtomicAction`, a generic +container that defines two attributes + +* `T payload` the OpenAIRE Graph class instance containing the data; +* `Class clazz` must contain the class whose instance is contained in the payload. + +Each AtomicAction can be then serialised in JSON format using `com.fasterxml.jackson.databind.ObjectMapper` from + +``` + + com.fasterxml.jackson.core + jackson-databind + ${dhp.jackson.version} + +``` + +Then, the JSON serialization must be stored as a GZip compressed sequence file (`org.apache.hadoop.mapred.SequenceFileOutputFormat`). +As such, it contains a set of tuples, a key and a value defined as `org.apache.hadoop.io.Text` where + +* the `key` must be set to the class canonical name contained in the `AtomicAction`; +* the `value` must be set to the AtomicAction JSON serialization. + +The following snippet provides an example of how create an actionset version of Relation records: + +``` + rels // JavaRDD + .map(relation -> new AtomicAction(Relation.class, relation)) + .mapToPair( + aa -> new Tuple2<>(new Text(aa.getClazz().getCanonicalName()), + new Text(OBJECT_MAPPER.writeValueAsString(aa)))) + .saveAsHadoopFile(outputPath, Text.class, Text.class, SequenceFileOutputFormat.class, GzipCodec.class); +``` + From 76447958bb538c75872d6b5f0fef184e97b42d55 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Thu, 12 Oct 2023 12:23:20 +0200 Subject: [PATCH 325/449] cleanup & docs --- README.md | 128 +++++++++++++++++- dhp-workflows/dhp-distcp/pom.xml | 13 -- .../dhp/distcp/oozie_app/config-default.xml | 18 --- .../dnetlib/dhp/distcp/oozie_app/workflow.xml | 46 ------- dhp-workflows/docs/oozie-installer.markdown | 111 --------------- dhp-workflows/pom.xml | 1 - 6 files changed, 127 insertions(+), 190 deletions(-) delete mode 100644 dhp-workflows/dhp-distcp/pom.xml delete mode 100644 dhp-workflows/dhp-distcp/src/main/resources/eu/dnetlib/dhp/distcp/oozie_app/config-default.xml delete mode 100644 dhp-workflows/dhp-distcp/src/main/resources/eu/dnetlib/dhp/distcp/oozie_app/workflow.xml delete mode 100644 dhp-workflows/docs/oozie-installer.markdown diff --git a/README.md b/README.md index 0a0bd82ab..2c1440f44 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,128 @@ # dnet-hadoop -Dnet-hadoop is the project that defined all the OOZIE workflows for the OpenAIRE Graph construction, processing, provisioning. \ No newline at end of file + +Dnet-hadoop is the project that defined all the [OOZIE workflows](https://oozie.apache.org/) for the OpenAIRE Graph construction, processing, provisioning. + +How to build, package and run oozie workflows +==================== + +Oozie-installer is a utility allowing building, uploading and running oozie workflows. In practice, it creates a `*.tar.gz` +package that contains resources that define a workflow and some helper scripts. + +This module is automatically executed when running: + +`mvn package -Poozie-package -Dworkflow.source.dir=classpath/to/parent/directory/of/oozie_app` + +on module having set: + +``` + + eu.dnetlib.dhp + dhp-workflows + +``` + +in `pom.xml` file. `oozie-package` profile initializes oozie workflow packaging, `workflow.source.dir` property points to +a workflow (notice: this is not a relative path but a classpath to directory usually holding `oozie_app` subdirectory). + +The outcome of this packaging is `oozie-package.tar.gz` file containing inside all the resources required to run Oozie workflow: + +- jar packages +- workflow definitions +- job properties +- maintenance scripts + +Required properties +==================== + +In order to include proper workflow within package, `workflow.source.dir` property has to be set. It could be provided +by setting `-Dworkflow.source.dir=some/job/dir` maven parameter. + +In oder to define full set of cluster environment properties one should create `~/.dhp/application.properties` file with +the following properties: + +- `dhp.hadoop.frontend.user.name` - your user name on hadoop cluster and frontend machine +- `dhp.hadoop.frontend.host.name` - frontend host name +- `dhp.hadoop.frontend.temp.dir` - frontend directory for temporary files +- `dhp.hadoop.frontend.port.ssh` - frontend machine ssh port +- `oozieServiceLoc` - oozie service location required by run_workflow.sh script executing oozie job +- `nameNode` - name node address +- `jobTracker` - job tracker address +- `oozie.execution.log.file.location` - location of file that will be created when executing oozie job, it contains output +produced by `run_workflow.sh` script (needed to obtain oozie job id) +- `maven.executable` - mvn command location, requires parameterization due to a different setup of CI cluster +- `sparkDriverMemory` - amount of memory assigned to spark jobs driver +- `sparkExecutorMemory` - amount of memory assigned to spark jobs executors +- `sparkExecutorCores` - number of cores assigned to spark jobs executors + +All values will be overriden with the ones from `job.properties` and eventually `job-override.properties` stored in module's +main folder. + +When overriding properties from `job.properties`, `job-override.properties` file can be created in main module directory +(the one containing `pom.xml` file) and define all new properties which will override existing properties. +One can provide those properties one by one as command line `-D` arguments. + +Properties overriding order is the following: + +1. `pom.xml` defined properties (located in the project root dir) +2. `~/.dhp/application.properties` defined properties +3. `${workflow.source.dir}/job.properties` +4. `job-override.properties` (located in the project root dir) +5. `maven -Dparam=value` + +where the maven `-Dparam` property is overriding all the other ones. + +Workflow definition requirements +==================== + +`workflow.source.dir` property should point to the following directory structure: + + [${workflow.source.dir}] + | + |-job.properties (optional) + | + \-[oozie_app] + | + \-workflow.xml + +This property can be set using maven `-D` switch. + +`[oozie_app]` is the default directory name however it can be set to any value as soon as `oozieAppDir` property is +provided with directory name as value. + +Sub-workflows are supported as well and sub-workflow directories should be nested within `[oozie_app]` directory. + +Creating oozie installer step-by-step +===================================== + +Automated oozie-installer steps are the following: + +1. creating jar packages: `*.jar` and `*tests.jar` along with copying all dependencies in `target/dependencies` +2. reading properties from maven, `~/.dhp/application.properties`, `job.properties`, `job-override.properties` +3. invoking priming mechanism linking resources from import.txt file (currently resolving subworkflow resources) +4. assembling shell scripts for preparing Hadoop filesystem, uploading Oozie application and starting workflow +5. copying whole `${workflow.source.dir}` content to `target/${oozie.package.file.name}` +6. generating updated `job.properties` file in `target/${oozie.package.file.name}` based on maven, +`~/.dhp/application.properties`, `job.properties` and `job-override.properties` +7. creating `lib` directory (or multiple directories for sub-workflows for each nested directory) and copying jar packages +created at step (1) to each one of them +8. bundling whole `${oozie.package.file.name}` directory into single tar.gz package + +Uploading oozie package and running workflow on cluster +======================================================= + +In order to simplify deployment and execution process two dedicated profiles were introduced: + +- `deploy` +- `run` + +to be used along with `oozie-package` profile e.g. by providing `-Poozie-package,deploy,run` maven parameters. + +The `deploy` profile supplements packaging process with: +1) uploading oozie-package via scp to `/home/${user.name}/oozie-packages` directory on `${dhp.hadoop.frontend.host.name}` machine +2) extracting uploaded package +3) uploading oozie content to hadoop cluster HDFS location defined in `oozie.wf.application.path` property (generated dynamically by maven build process, based on `${dhp.hadoop.frontend.user.name}` and `workflow.source.dir` properties) + +The `run` profile introduces: +1) executing oozie application uploaded to HDFS cluster using `deploy` command. Triggers `run_workflow.sh` script providing runtime properties defined in `job.properties` file. + +Notice: ssh access to frontend machine has to be configured on system level and it is preferable to set key-based authentication in order to simplify remote operations. \ No newline at end of file diff --git a/dhp-workflows/dhp-distcp/pom.xml b/dhp-workflows/dhp-distcp/pom.xml deleted file mode 100644 index c3d3a7375..000000000 --- a/dhp-workflows/dhp-distcp/pom.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - dhp-workflows - eu.dnetlib.dhp - 1.2.5-SNAPSHOT - - 4.0.0 - - dhp-distcp - - - \ No newline at end of file diff --git a/dhp-workflows/dhp-distcp/src/main/resources/eu/dnetlib/dhp/distcp/oozie_app/config-default.xml b/dhp-workflows/dhp-distcp/src/main/resources/eu/dnetlib/dhp/distcp/oozie_app/config-default.xml deleted file mode 100644 index 905fb9984..000000000 --- a/dhp-workflows/dhp-distcp/src/main/resources/eu/dnetlib/dhp/distcp/oozie_app/config-default.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - jobTracker - yarnRM - - - nameNode - hdfs://nameservice1 - - - sourceNN - webhdfs://namenode2.hadoop.dm.openaire.eu:50071 - - - oozie.use.system.libpath - true - - \ No newline at end of file diff --git a/dhp-workflows/dhp-distcp/src/main/resources/eu/dnetlib/dhp/distcp/oozie_app/workflow.xml b/dhp-workflows/dhp-distcp/src/main/resources/eu/dnetlib/dhp/distcp/oozie_app/workflow.xml deleted file mode 100644 index 91b97332b..000000000 --- a/dhp-workflows/dhp-distcp/src/main/resources/eu/dnetlib/dhp/distcp/oozie_app/workflow.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - sourceNN - the source name node - - - sourcePath - the source path - - - targetPath - the target path - - - hbase_dump_distcp_memory_mb - 6144 - memory for distcp action copying InfoSpace dump from remote cluster - - - hbase_dump_distcp_num_maps - 1 - maximum number of simultaneous copies of InfoSpace dump from remote location - - - - - - - Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] - - - - - -Dmapreduce.map.memory.mb=${hbase_dump_distcp_memory_mb} - -pb - -m ${hbase_dump_distcp_num_maps} - ${sourceNN}/${sourcePath} - ${nameNode}/${targetPath} - - - - - - - \ No newline at end of file diff --git a/dhp-workflows/docs/oozie-installer.markdown b/dhp-workflows/docs/oozie-installer.markdown deleted file mode 100644 index d2de80dcc..000000000 --- a/dhp-workflows/docs/oozie-installer.markdown +++ /dev/null @@ -1,111 +0,0 @@ -General notes -==================== - -Oozie-installer is a utility allowing building, uploading and running oozie workflows. In practice, it creates a `*.tar.gz` package that contains resouces that define a workflow and some helper scripts. - -This module is automatically executed when running: - -`mvn package -Poozie-package -Dworkflow.source.dir=classpath/to/parent/directory/of/oozie_app` - -on module having set: - - - eu.dnetlib.dhp - dhp-workflows - - -in `pom.xml` file. `oozie-package` profile initializes oozie workflow packaging, `workflow.source.dir` property points to a workflow (notice: this is not a relative path but a classpath to directory usually holding `oozie_app` subdirectory). - -The outcome of this packaging is `oozie-package.tar.gz` file containing inside all the resources required to run Oozie workflow: - -- jar packages -- workflow definitions -- job properties -- maintenance scripts - -Required properties -==================== - -In order to include proper workflow within package, `workflow.source.dir` property has to be set. It could be provided by setting `-Dworkflow.source.dir=some/job/dir` maven parameter. - -In oder to define full set of cluster environment properties one should create `~/.dhp/application.properties` file with the following properties: - -- `dhp.hadoop.frontend.user.name` - your user name on hadoop cluster and frontend machine -- `dhp.hadoop.frontend.host.name` - frontend host name -- `dhp.hadoop.frontend.temp.dir` - frontend directory for temporary files -- `dhp.hadoop.frontend.port.ssh` - frontend machine ssh port -- `oozieServiceLoc` - oozie service location required by run_workflow.sh script executing oozie job -- `nameNode` - name node address -- `jobTracker` - job tracker address -- `oozie.execution.log.file.location` - location of file that will be created when executing oozie job, it contains output produced by `run_workflow.sh` script (needed to obtain oozie job id) -- `maven.executable` - mvn command location, requires parameterization due to a different setup of CI cluster -- `sparkDriverMemory` - amount of memory assigned to spark jobs driver -- `sparkExecutorMemory` - amount of memory assigned to spark jobs executors -- `sparkExecutorCores` - number of cores assigned to spark jobs executors - -All values will be overriden with the ones from `job.properties` and eventually `job-override.properties` stored in module's main folder. - -When overriding properties from `job.properties`, `job-override.properties` file can be created in main module directory (the one containing `pom.xml` file) and define all new properties which will override existing properties. One can provide those properties one by one as command line -D arguments. - -Properties overriding order is the following: - -1. `pom.xml` defined properties (located in the project root dir) -2. `~/.dhp/application.properties` defined properties -3. `${workflow.source.dir}/job.properties` -4. `job-override.properties` (located in the project root dir) -5. `maven -Dparam=value` - -where the maven `-Dparam` property is overriding all the other ones. - -Workflow definition requirements -==================== - -`workflow.source.dir` property should point to the following directory structure: - - [${workflow.source.dir}] - | - |-job.properties (optional) - | - \-[oozie_app] - | - \-workflow.xml - -This property can be set using maven `-D` switch. - -`[oozie_app]` is the default directory name however it can be set to any value as soon as `oozieAppDir` property is provided with directory name as value. - -Subworkflows are supported as well and subworkflow directories should be nested within `[oozie_app]` directory. - -Creating oozie installer step-by-step -===================================== - -Automated oozie-installer steps are the following: - -1. creating jar packages: `*.jar` and `*tests.jar` along with copying all dependancies in `target/dependencies` -2. reading properties from maven, `~/.dhp/application.properties`, `job.properties`, `job-override.properties` -3. invoking priming mechanism linking resources from import.txt file (currently resolving subworkflow resources) -4. assembling shell scripts for preparing Hadoop filesystem, uploading Oozie application and starting workflow -5. copying whole `${workflow.source.dir}` content to `target/${oozie.package.file.name}` -6. generating updated `job.properties` file in `target/${oozie.package.file.name}` based on maven, `~/.dhp/application.properties`, `job.properties` and `job-override.properties` -7. creating `lib` directory (or multiple directories for subworkflows for each nested directory) and copying jar packages created at step (1) to each one of them -8. bundling whole `${oozie.package.file.name}` directory into single tar.gz package - -Uploading oozie package and running workflow on cluster -======================================================= - -In order to simplify deployment and execution process two dedicated profiles were introduced: - -- `deploy` -- `run` - -to be used along with `oozie-package` profile e.g. by providing `-Poozie-package,deploy,run` maven parameters. - -`deploy` profile supplements packaging process with: -1) uploading oozie-package via scp to `/home/${user.name}/oozie-packages` directory on `${dhp.hadoop.frontend.host.name}` machine -2) extracting uploaded package -3) uploading oozie content to hadoop cluster HDFS location defined in `oozie.wf.application.path` property (generated dynamically by maven build process, based on `${dhp.hadoop.frontend.user.name}` and `workflow.source.dir` properties) - -`run` profile introduces: -1) executing oozie application uploaded to HDFS cluster using `deploy` command. Triggers `run_workflow.sh` script providing runtime properties defined in `job.properties` file. - -Notice: ssh access to frontend machine has to be configured on system level and it is preferable to set key-based authentication in order to simplify remote operations. \ No newline at end of file diff --git a/dhp-workflows/pom.xml b/dhp-workflows/pom.xml index 64f5f2d26..369c71b5b 100644 --- a/dhp-workflows/pom.xml +++ b/dhp-workflows/pom.xml @@ -25,7 +25,6 @@ dhp-workflow-profiles dhp-aggregation - dhp-distcp dhp-actionmanager dhp-graph-mapper dhp-dedup-openaire From 6cf64d5d8b3b9826bce76d94f0548ee96eff2736 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Fri, 13 Oct 2023 10:09:26 +0200 Subject: [PATCH 326/449] [SWH] renamed 'Software Heritage Identifier' to 'Software Hash Identifier' --- .../src/main/java/eu/dnetlib/dhp/swh/utils/SWHConstants.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/utils/SWHConstants.java b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/utils/SWHConstants.java index eae839cfd..2a0403044 100644 --- a/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/utils/SWHConstants.java +++ b/dhp-workflows/dhp-swh/src/main/java/eu/dnetlib/dhp/swh/utils/SWHConstants.java @@ -12,7 +12,7 @@ public class SWHConstants { public static final String SWHID = "swhid"; - public static final String SWHID_CLASSNAME = "Software Heritage Identifier"; + public static final String SWHID_CLASSNAME = "Software Hash Identifier"; public static final String SWH_ID = "10|openaire____::dbfd07503aaa1ed31beed7dec942f3f4"; From 54fbf09ac63d1076a51ab791f093b33d9c4520bb Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Mon, 16 Oct 2023 08:57:47 +0200 Subject: [PATCH 327/449] [raw graph] WIP: mapping original resource types --- .../raw/AbstractMdRecordToOafMapper.java | 64 +- .../dhp/oa/graph/raw/OafToOafMapper.java | 28 +- .../dhp/oa/graph/raw/OdfToOafMapper.java | 22 +- .../dnetlib/dhp/oa/graph/raw/MappersTest.java | 60 +- .../dnetlib/dhp/oa/graph/clean/synonyms.txt | 855 +++++++++++++++++- .../eu/dnetlib/dhp/oa/graph/clean/terms.txt | 292 +++++- 6 files changed, 1244 insertions(+), 77 deletions(-) diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/AbstractMdRecordToOafMapper.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/AbstractMdRecordToOafMapper.java index 2fed7d627..5f0acbab7 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/AbstractMdRecordToOafMapper.java +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/AbstractMdRecordToOafMapper.java @@ -42,10 +42,6 @@ public abstract class AbstractMdRecordToOafMapper { protected static final String DATACITE_SCHEMA_KERNEL_3 = "http://datacite.org/schema/kernel-3"; protected static final String DATACITE_SCHEMA_KERNEL_3_SLASH = "http://datacite.org/schema/kernel-3/"; - protected static final String OPENAIRE_COAR_RESOURCE_TYPES_3_1 = "openaire::coar_resource_types_3_1"; - - public static final String OPENAIRE_USER_RESOURCE_TYPES = "openaire::user_resource_types"; - protected static final Qualifier ORCID_PID_TYPE = qualifier( ModelConstants.ORCID_PENDING, ModelConstants.ORCID_CLASSNAME, @@ -129,7 +125,9 @@ public abstract class AbstractMdRecordToOafMapper { final String type = getResultType(doc, instances); - return createOafs(doc, type, instances, collectedFrom, entityInfo, lastUpdateTimestamp); + final Qualifier metaResourceType = getMetaResourceType(instances); + + return createOafs(doc, type, metaResourceType, instances, collectedFrom, entityInfo, lastUpdateTimestamp); } catch (DocumentException e) { log.error("Error with record:\n" + xml); return Lists.newArrayList(); @@ -155,6 +153,30 @@ public abstract class AbstractMdRecordToOafMapper { return type; } + protected Qualifier getMetaResourceType(final List instances) { + + if (vocs.vocabularyExists(OPENAIRE_META_RESOURCE_TYPE)) { + Optional instanceTypeMapping = instances + .stream() + .flatMap(i -> i.getInstanceTypeMapping().stream()) + .filter(t -> OPENAIRE_COAR_RESOURCE_TYPES_3_1.equals(t.getVocabularyName())) + .findFirst(); + + if (!instanceTypeMapping.isPresent()) { + throw new IllegalStateException("unable to find an instance from " + OPENAIRE_COAR_RESOURCE_TYPES_3_1); + } else { + final String typeCode = instanceTypeMapping.get().getTypeCode(); + return Optional + .ofNullable(vocs.lookupTermBySynonym(OPENAIRE_META_RESOURCE_TYPE, typeCode)) + .orElseThrow(() -> + new IllegalStateException("unable to find a synonym for '" + typeCode + "' in " + + OPENAIRE_META_RESOURCE_TYPE)); + } + } else { + throw new IllegalStateException("vocabulary '" + OPENAIRE_META_RESOURCE_TYPE + "' not available"); + } + } + private KeyValue getProvenanceDatasource(final Document doc, final String xpathId, final String xpathName) { final String dsId = doc.valueOf(xpathId); final String dsName = doc.valueOf(xpathName); @@ -169,12 +191,13 @@ public abstract class AbstractMdRecordToOafMapper { protected List createOafs( final Document doc, final String type, + final Qualifier metaResourceType, final List instances, final KeyValue collectedFrom, final DataInfo info, final long lastUpdateTimestamp) { - final OafEntity entity = createEntity(doc, type, instances, collectedFrom, info, lastUpdateTimestamp); + final OafEntity entity = createEntity(doc, type, metaResourceType, instances, collectedFrom, info, lastUpdateTimestamp); final Set originalId = Sets.newHashSet(entity.getOriginalId()); originalId.add(entity.getId()); @@ -207,6 +230,7 @@ public abstract class AbstractMdRecordToOafMapper { private OafEntity createEntity(final Document doc, final String type, + final Qualifier metaResourceType, final List instances, final KeyValue collectedFrom, final DataInfo info, @@ -214,12 +238,12 @@ public abstract class AbstractMdRecordToOafMapper { switch (type.toLowerCase()) { case "publication": final Publication p = new Publication(); - populateResultFields(p, doc, instances, collectedFrom, info, lastUpdateTimestamp); + populateResultFields(p, metaResourceType, doc, instances, collectedFrom, info, lastUpdateTimestamp); p.setJournal(prepareJournal(doc, info)); return p; case "dataset": final Dataset d = new Dataset(); - populateResultFields(d, doc, instances, collectedFrom, info, lastUpdateTimestamp); + populateResultFields(d, metaResourceType, doc, instances, collectedFrom, info, lastUpdateTimestamp); d.setStoragedate(prepareDatasetStorageDate(doc, info)); d.setDevice(prepareDatasetDevice(doc, info)); d.setSize(prepareDatasetSize(doc, info)); @@ -230,7 +254,7 @@ public abstract class AbstractMdRecordToOafMapper { return d; case "software": final Software s = new Software(); - populateResultFields(s, doc, instances, collectedFrom, info, lastUpdateTimestamp); + populateResultFields(s, metaResourceType, doc, instances, collectedFrom, info, lastUpdateTimestamp); s.setDocumentationUrl(prepareSoftwareDocumentationUrls(doc, info)); s.setLicense(prepareSoftwareLicenses(doc, info)); s.setCodeRepositoryUrl(prepareSoftwareCodeRepositoryUrl(doc, info)); @@ -240,7 +264,7 @@ public abstract class AbstractMdRecordToOafMapper { case "otherresearchproducts": default: final OtherResearchProduct o = new OtherResearchProduct(); - populateResultFields(o, doc, instances, collectedFrom, info, lastUpdateTimestamp); + populateResultFields(o, metaResourceType, doc, instances, collectedFrom, info, lastUpdateTimestamp); o.setContactperson(prepareOtherResearchProductContactPersons(doc, info)); o.setContactgroup(prepareOtherResearchProductContactGroups(doc, info)); o.setTool(prepareOtherResearchProductTools(doc, info)); @@ -377,11 +401,13 @@ public abstract class AbstractMdRecordToOafMapper { private void populateResultFields( final Result r, + final Qualifier metaResourceType, final Document doc, final List instances, final KeyValue collectedFrom, final DataInfo info, final long lastUpdateTimestamp) { + r.setMetaResourceType(metaResourceType); r.setDataInfo(info); r.setLastupdatetimestamp(lastUpdateTimestamp); r.setId(createOpenaireId(50, doc.valueOf("//dri:objIdentifier"), false)); @@ -531,15 +557,17 @@ public abstract class AbstractMdRecordToOafMapper { if (vocs.vocabularyExists(OPENAIRE_COAR_RESOURCE_TYPES_3_1)) { // TODO verify what the vocabs return when a synonym is not defined - Qualifier coarTerm = vocs.lookupTermBySynonym(OPENAIRE_COAR_RESOURCE_TYPES_3_1, originalType); - mappings.add(OafMapperUtils.instanceTypeMapping(originalType, coarTerm)); + Optional.ofNullable(vocs.lookupTermBySynonym(OPENAIRE_COAR_RESOURCE_TYPES_3_1, originalType)) + .ifPresent(coarTerm -> { + mappings.add(OafMapperUtils.instanceTypeMapping(originalType, coarTerm)); + if (vocs.vocabularyExists(OPENAIRE_USER_RESOURCE_TYPES)) { - if (vocs.vocabularyExists(OPENAIRE_USER_RESOURCE_TYPES)) { - - // TODO verify what the vocabs return when a synonym is not defined - Qualifier userTerm = vocs.lookupTermBySynonym(OPENAIRE_USER_RESOURCE_TYPES, coarTerm.getClassid()); - mappings.add(OafMapperUtils.instanceTypeMapping(originalType, userTerm)); - } + // TODO verify what the vocabs return when a synonym is not defined + Optional + .ofNullable(vocs.lookupTermBySynonym(OPENAIRE_USER_RESOURCE_TYPES, coarTerm.getClassid())) + .ifPresent(type -> mappings.add(OafMapperUtils.instanceTypeMapping(originalType, type))); + } + }); } return mappings; diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/OafToOafMapper.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/OafToOafMapper.java index 5cdb434f1..6bcc8ec44 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/OafToOafMapper.java +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/OafToOafMapper.java @@ -1,29 +1,27 @@ package eu.dnetlib.dhp.oa.graph.raw; -import static eu.dnetlib.dhp.schema.common.ModelConstants.*; -import static eu.dnetlib.dhp.schema.oaf.utils.OafMapperUtils.*; - -import java.net.URLDecoder; -import java.util.*; -import java.util.stream.Collectors; - -import eu.dnetlib.dhp.schema.oaf.utils.OafMapperUtils; -import org.apache.commons.lang3.StringUtils; -import org.dom4j.Document; -import org.dom4j.Element; -import org.dom4j.Node; - import com.google.common.collect.Lists; - import eu.dnetlib.dhp.common.PacePerson; import eu.dnetlib.dhp.common.vocabulary.VocabularyGroup; import eu.dnetlib.dhp.schema.oaf.*; import eu.dnetlib.dhp.schema.oaf.utils.CleaningFunctions; import eu.dnetlib.dhp.schema.oaf.utils.IdentifierFactory; import eu.dnetlib.dhp.schema.oaf.utils.ModelHardLimits; +import org.apache.commons.lang3.StringUtils; +import org.dom4j.Document; +import org.dom4j.Element; +import org.dom4j.Node; -import static org.apache.commons.lang3.StringUtils.contains; +import java.net.URLDecoder; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +import static eu.dnetlib.dhp.schema.common.ModelConstants.*; +import static eu.dnetlib.dhp.schema.oaf.utils.OafMapperUtils.*; public class OafToOafMapper extends AbstractMdRecordToOafMapper { diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/OdfToOafMapper.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/OdfToOafMapper.java index c01775327..c383e9300 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/OdfToOafMapper.java +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/OdfToOafMapper.java @@ -220,11 +220,6 @@ public class OdfToOafMapper extends AbstractMdRecordToOafMapper { } } - @Override - protected List prepareInstanceTypeMapping(Document doc) { - return null; - } - /** * The Datacite element * @@ -235,13 +230,20 @@ public class OdfToOafMapper extends AbstractMdRecordToOafMapper { */ @Override protected String findOriginalType(Document doc) { - final Element resourceType = (Element) doc.selectSingleNode( - "//metadata/*[local-name() = 'resource']/*[local-name() = 'resourceType']"); + String resourceType = Optional.ofNullable((Element) doc.selectSingleNode( + "//*[local-name()='metadata']/*[local-name() = 'resource']/*[local-name() = 'resourceType']")) + .map(element -> { + final String resourceTypeURI = element.attributeValue("anyURI"); + final String resourceTypeTxt = element.getText(); - final String resourceTypeURI = resourceType.attributeValue("anyURI"); - final String resourceTypeTxt = resourceType.getText(); + return ObjectUtils.firstNonNull(resourceTypeURI, resourceTypeTxt); + }) + .orElse(doc.valueOf( + "//*[local-name()='metadata']/*[local-name() = 'resource']/*[local-name() = 'CobjCategory']/text()") + ); + + return resourceType; - return ObjectUtils.firstNonNull(resourceTypeURI, resourceTypeTxt); } @Override diff --git a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/raw/MappersTest.java b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/raw/MappersTest.java index 5df2b7a3b..4d30a3fa8 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/raw/MappersTest.java +++ b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/raw/MappersTest.java @@ -74,7 +74,7 @@ class MappersTest { assertTrue(StringUtils.isNotBlank(p.getDateofcollection())); assertTrue(StringUtils.isNotBlank(p.getDateoftransformation())); - assertTrue(p.getAuthor().size() > 0); + assertFalse(p.getAuthor().isEmpty()); final Optional author = p .getAuthor() .stream() @@ -97,14 +97,14 @@ class MappersTest { assertEquals("Votsi", author.get().getSurname()); assertEquals("Nefta", author.get().getName()); - assertTrue(p.getSubject().size() > 0); + assertFalse(p.getSubject().isEmpty()); assertTrue(StringUtils.isNotBlank(p.getJournal().getIssnOnline())); assertTrue(StringUtils.isNotBlank(p.getJournal().getName())); assertTrue(p.getPid().isEmpty()); assertNotNull(p.getInstance()); - assertTrue(p.getInstance().size() > 0); + assertFalse(p.getInstance().isEmpty()); p .getInstance() .forEach(i -> { @@ -121,7 +121,7 @@ class MappersTest { Optional coarType = instance.getInstanceTypeMapping() .stream() - .filter(itm -> AbstractMdRecordToOafMapper.OPENAIRE_COAR_RESOURCE_TYPES_3_1.equals(itm.getVocabularyName())) + .filter(itm -> ModelConstants.OPENAIRE_COAR_RESOURCE_TYPES_3_1.equals(itm.getVocabularyName())) .findFirst(); assertTrue(coarType.isPresent()); @@ -130,7 +130,7 @@ class MappersTest { Optional userType = instance.getInstanceTypeMapping() .stream() - .filter(itm -> AbstractMdRecordToOafMapper.OPENAIRE_USER_RESOURCE_TYPES.equals(itm.getVocabularyName())) + .filter(itm -> ModelConstants.OPENAIRE_USER_RESOURCE_TYPES.equals(itm.getVocabularyName())) .findFirst(); assertTrue(userType.isPresent()); @@ -228,7 +228,7 @@ class MappersTest { assertTrue(StringUtils.isNotBlank(p.getDateofcollection())); assertTrue(StringUtils.isNotBlank(p.getDateoftransformation())); - assertTrue(p.getAuthor().size() > 0); + assertFalse(p.getAuthor().isEmpty()); final Optional author = p .getAuthor() .stream() @@ -251,13 +251,13 @@ class MappersTest { assertEquals("Votsi", author.get().getSurname()); assertEquals("Nefta", author.get().getName()); - assertTrue(p.getSubject().size() > 0); - assertTrue(p.getPid().size() > 0); + assertFalse(p.getSubject().isEmpty()); + assertFalse(p.getPid().isEmpty()); assertEquals("PMC1517292", p.getPid().get(0).getValue()); assertEquals("pmc", p.getPid().get(0).getQualifier().getClassid()); assertNotNull(p.getInstance()); - assertTrue(p.getInstance().size() > 0); + assertFalse(p.getInstance().isEmpty()); p .getInstance() .forEach(i -> { @@ -287,7 +287,7 @@ class MappersTest { final List list = new OafToOafMapper(vocs, true, true).processMdRecord(xml); - assertTrue(list.size() > 0); + assertFalse(list.isEmpty()); assertTrue(list.get(0) instanceof Publication); final Publication p = (Publication) list.get(0); @@ -343,7 +343,7 @@ class MappersTest { assertTrue(d.getOriginalId().stream().anyMatch(oid -> oid.equals("oai:zenodo.org:3234526"))); assertValidId(d.getCollectedfrom().get(0).getKey()); assertTrue(StringUtils.isNotBlank(d.getTitle().get(0).getValue())); - assertTrue(d.getAuthor().size() > 0); + assertFalse(d.getAuthor().isEmpty()); final Optional author = d .getAuthor() @@ -377,13 +377,13 @@ class MappersTest { final Field affiliation = opAff.get(); assertEquals("ISTI-CNR", affiliation.getValue()); - assertTrue(d.getSubject().size() > 0); - assertTrue(d.getInstance().size() > 0); - assertTrue(d.getContext().size() > 0); - assertTrue(d.getContext().get(0).getId().length() > 0); + assertFalse(d.getSubject().isEmpty()); + assertFalse(d.getInstance().isEmpty()); + assertFalse(d.getContext().isEmpty()); + assertFalse(d.getContext().get(0).getId().isEmpty()); assertNotNull(d.getInstance()); - assertTrue(d.getInstance().size() > 0); + assertFalse(d.getInstance().isEmpty()); d .getInstance() .forEach(i -> { @@ -457,7 +457,7 @@ class MappersTest { // assertEquals("oai:pub.uni-bielefeld.de:2949739", p.getOriginalId().get(0)); assertValidId(p.getCollectedfrom().get(0).getKey()); - assertTrue(p.getAuthor().size() > 0); + assertFalse(p.getAuthor().isEmpty()); final Optional author = p .getAuthor() @@ -469,14 +469,14 @@ class MappersTest { assertEquals("Potwarka", author.get().getSurname()); assertEquals("Luke R.", author.get().getName()); - assertTrue(p.getSubject().size() > 0); - assertTrue(p.getInstance().size() > 0); + assertFalse(p.getSubject().isEmpty()); + assertFalse(p.getInstance().isEmpty()); assertNotNull(p.getTitle()); assertFalse(p.getTitle().isEmpty()); assertNotNull(p.getInstance()); - assertTrue(p.getInstance().size() > 0); + assertFalse(p.getInstance().isEmpty()); p .getInstance() .forEach(i -> { @@ -624,9 +624,9 @@ class MappersTest { assertValidId(s.getId()); assertValidId(s.getCollectedfrom().get(0).getKey()); assertTrue(StringUtils.isNotBlank(s.getTitle().get(0).getValue())); - assertTrue(s.getAuthor().size() > 0); - assertTrue(s.getSubject().size() > 0); - assertTrue(s.getInstance().size() > 0); + assertFalse(s.getAuthor().isEmpty()); + assertFalse(s.getSubject().isEmpty()); + assertFalse(s.getInstance().isEmpty()); final Relation r1 = (Relation) list.get(1); final Relation r2 = (Relation) list.get(2); @@ -882,7 +882,7 @@ class MappersTest { assertEquals(2, p.getOriginalId().size()); assertTrue(p.getOriginalId().stream().anyMatch(oid -> oid.equals("df76e73f-0483-49a4-a9bb-63f2f985574a"))); assertValidId(p.getCollectedfrom().get(0).getKey()); - assertTrue(p.getAuthor().size() > 0); + assertFalse(p.getAuthor().isEmpty()); final Optional author = p .getAuthor() @@ -892,14 +892,14 @@ class MappersTest { assertEquals("Museum Sønderjylland", author.get().getFullname()); - assertTrue(p.getSubject().size() > 0); - assertTrue(p.getInstance().size() > 0); + assertFalse(p.getSubject().isEmpty()); + assertFalse(p.getInstance().isEmpty()); assertNotNull(p.getTitle()); assertFalse(p.getTitle().isEmpty()); assertNotNull(p.getInstance()); - assertTrue(p.getInstance().size() > 0); + assertFalse(p.getInstance().isEmpty()); p .getInstance() .forEach(i -> { @@ -939,10 +939,10 @@ class MappersTest { System.out.println("***************"); final Dataset p = (Dataset) list.get(0); - assertTrue(p.getInstance().size() > 0); + assertFalse(p.getInstance().isEmpty()); for (String url : p.getInstance().get(0).getUrl()) { System.out.println(url); - assertTrue(!url.contains("&")); + assertFalse(url.contains("&")); } } @@ -959,7 +959,7 @@ class MappersTest { assertTrue(o.isPresent()); Publication p = (Publication) o.get(); - assertTrue(p.getInstance().size() > 0); + assertFalse(p.getInstance().isEmpty()); assertEquals("https://doi.org/10.1155/2015/439379", p.getInstance().get(0).getUrl().get(0)); diff --git a/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/synonyms.txt b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/synonyms.txt index b3fa94b20..a17a3949a 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/synonyms.txt +++ b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/synonyms.txt @@ -1246,8 +1246,857 @@ dnet:relation_subRelType @=@ relationship @=@ publicationDataset dnet:provenanceActions @=@ iis @=@ erroneous label to be cleaned FOS @=@ 0101 mathematics @=@ FOS: Mathematics FOS @=@ 0102 computer and information sciences @=@ FOS: Computer and information sciences +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_ddb1 @=@ Chemical Structures +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_ddb1 @=@ Data Cube +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_ddb1 @=@ Dataset/Dataset +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_ddb1 @=@ Ensemble de données / Dataset +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_ddb1 @=@ Research Data +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_ddb1 @=@ dataset +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_ddb1 @=@ http://purl.org/coar/resource_type/c_ddb1 +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/ACF7-8YT9 @=@ collection +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/ACF7-8YT9 @=@ Collection of Datasets +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/ACF7-8YT9 @=@ RO-crate +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/ACF7-8YT9 @=@ Supplementary Collection of Datasets +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/ACF7-8YT9 @=@ Supplementary Dataset +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_12cc @=@ http://purl.org/coar/resource_type/c_12cc +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_12cc @=@ Planimetría +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_cb28 @=@ clinicalTrial +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_cb28 @=@ http://purl.org/coar/resource_type/c_cb28 +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_12cd @=@ Carte géographique / Map +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_12cd @=@ http://purl.org/coar/resource_type/c_12cd +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_12cd @=@ map +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_12cd @=@ Mapa +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_18cc @=@ Audio +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_18cc @=@ http://purl.org/coar/resource_type/c_18cc +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_18cc @=@ sound +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_86bc @=@ Book Prospectus +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_86bc @=@ Dictionary Entry +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_86bc @=@ Disclosure +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_86bc @=@ Literature review +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_86bc @=@ Reseña bibliográfica +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_86bc @=@ bibliography +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_86bc @=@ http://purl.org/coar/resource_type/c_86bc +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_8a7e @=@ AUDIOVISUAL_DOCUMENT +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_8a7e @=@ Audiovisual/Audiovisual +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_8a7e @=@ http://purl.org/coar/resource_type/c_8a7e +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_ecc8 @=@ Diagram +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_ecc8 @=@ Drawing +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_ecc8 @=@ Figure +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_ecc8 @=@ Image/Image +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_ecc8 @=@ Imagen - Image +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_ecc8 @=@ Imagen 3-D +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_ecc8 @=@ Imagen +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_ecc8 @=@ Photo +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_ecc8 @=@ Plot +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_ecc8 @=@ StillImage|PRESERVED_SPECIMEN +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_ecc8 @=@ fotó +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_ecc8 @=@ grafika +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_ecc8 @=@ http://purl.org/coar/resource_type/c_ecc8 +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_ecc8 @=@ image-diagram +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_ecc8 @=@ image-drawing +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_ecc8 @=@ image-figure +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_ecc8 @=@ image-other +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_ecc8 @=@ image-photo +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_ecc8 @=@ image-plot +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_ecc8 @=@ image +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_12ce @=@ film +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_12ce @=@ Film, vidéo / Motion picture, video +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_12ce @=@ http://purl.org/coar/resource_type/c_12ce +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_12ce @=@ Video +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_12ce @=@ vídeo +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/C53B-JCY5 @=@ H1 Myönnetty patentti +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/C53B-JCY5 @=@ http://purl.org/coar/resource_type/C53B-JCY5 +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_15cd @=@ brevet +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_15cd @=@ http://purl.org/coar/resource_type/c_15cd +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_15cd @=@ Patent +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_15cd @=@ Patente +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_15cd @=@ Registered Copyright +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_15cd @=@ Traducción de patente +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/SB3Y-W4EH @=@ Solicitud de patente +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_e9a0 @=@ http://purl.org/coar/resource_type/c_e9a0 +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_e9a0 @=@ interactiveResource +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_e059 @=@ http://purl.org/coar/resource_type/c_e059 +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_e059 @=@ Learning Object +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_e059 @=@ learningObject +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_e059 @=@ PEDAGOGICAL_DOCUMENT +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_1843 @=@ Autre / Other +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_1843 @=@ EGI Virtual Appliance +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_1843 @=@ Event/Event +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_1843 @=@ Exhibition +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_1843 @=@ Kita / Other +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_1843 @=@ Model/Model +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_1843 @=@ Otro - Other +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_1843 @=@ Physical Object +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_1843 @=@ Research Tool +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_1843 @=@ Service +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_1843 @=@ Trabajo de divulgación +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_1843 @=@ UNKNOWN +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_1843 @=@ University Academic Unit +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_1843 @=@ application +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_1843 @=@ artefact +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_1843 @=@ carte +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_1843 @=@ composition +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_1843 @=@ corpus +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_1843 @=@ event +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_1843 @=@ http://purl.org/coar/resource_type/c_1843 +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_1843 @=@ http://purl.org/coar/resource_type/c_26e4 +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_1843 @=@ info:eu-repo/semantics/other +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_1843 @=@ misc +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_1843 @=@ model +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_1843 @=@ other research product +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_1843 @=@ other +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_1843 @=@ otro +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_1843 @=@ physicalObject +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_1843 @=@ revue +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_1843 @=@ sonstige Veröffentlichung +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_1843 @=@ text/tg.edition+tg.aggregation+xml +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/9DKX-KSAF @=@ Modelo de utilidad +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_7ad9 @=@ http://purl.org/coar/resource_type/c_7ad9 +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_7ad9 @=@ Online Resource +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_7ad9 @=@ Sitio web +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_7ad9 @=@ Web publication/site +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_7877 @=@ Clinical Study +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_7877 @=@ http://purl.org/coar/resource_type/c_7877 +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2f33 @=@ Livre / Book +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2f33 @=@ Book (monograph) +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2f33 @=@ Book (non peer-reviewed) +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2f33 @=@ Book (peer-reviewed) +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2f33 @=@ Book - monograph - editorial book +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2f33 @=@ Book as author +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2f33 @=@ Books +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2f33 @=@ Buch +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2f33 @=@ Edited Book +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2f33 @=@ International Book/Monograph +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2f33 @=@ Knyga / Book +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2f33 @=@ Książka +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2f33 @=@ Lehr- oder Fachbuch +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2f33 @=@ Libro - Book +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2f33 @=@ Libro +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2f33 @=@ Monografia +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2f33 @=@ Monograph +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2f33 @=@ National Book/Monograph +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2f33 @=@ atlas +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2f33 @=@ book-series +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2f33 @=@ book-set +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2f33 @=@ book-track +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2f33 @=@ book +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2f33 @=@ book_series +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2f33 @=@ book_title +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2f33 @=@ doc-type:book +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2f33 @=@ eBook +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2f33 @=@ edited-book +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2f33 @=@ http://purl.org/coar/resource_type/c_2f33 +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2f33 @=@ http://purl.org/eprint/type/Book +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2f33 @=@ info:eu-repo/semantics/book +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2f33 @=@ könyv +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2f33 @=@ ouvrage +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2f33 @=@ publication-book +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2f33 @=@ reference-book +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2f33 @=@ scientific book +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2f33 @=@ Книга +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2f33 @=@ Учебник +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2f33 @=@ Монография +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_3248 @=@ A3 Kirjan tai muun kokoomateoksen osa +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_3248 @=@ Beitrag in einem Lehr- oder Fachbuch +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_3248 @=@ Book Part (author) +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_3248 @=@ Book Section / Chapter +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_3248 @=@ Book Section +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_3248 @=@ Book chapter or Essay in book +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_3248 @=@ Book editorial +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_3248 @=@ Book section +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_3248 @=@ BookChapter +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_3248 @=@ Book_Chapter +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_3248 @=@ Buchbeitrag +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_3248 @=@ Capítulo de Libro - Book Section +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_3248 @=@ Capítulo de libro +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_3248 @=@ Chapitre de livre / Book chapter +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_3248 @=@ Contribution to International Book/Monograph ISI/JCR +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_3248 @=@ Contribution to International Book/Monograph +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_3248 @=@ Contribution to National Book/Monograph +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_3248 @=@ Contribution to book (non peer-reviewed) +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_3248 @=@ Contribution to book (peer-reviewed) +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_3248 @=@ Knygos dalis / Book chapter +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_3248 @=@ Part of book - chapter +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_3248 @=@ Rozdział z książki +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_3248 @=@ Scientific publication - Book Chapter +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_3248 @=@ book chapter +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_3248 @=@ book part +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_3248 @=@ book-chapter +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_3248 @=@ book-part +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_3248 @=@ book-section +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_3248 @=@ bookPart +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_3248 @=@ book_content +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_3248 @=@ chapitre_ouvrage +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_3248 @=@ chapter +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_3248 @=@ doc-type:bookPart +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_3248 @=@ http://purl.org/coar/resource_type/c_3248 +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_3248 @=@ http://purl.org/eprint/type/BookItem +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_3248 @=@ info:eu-repo/semantics/Chapter +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_3248 @=@ info:eu-repo/semantics/bookPart +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_3248 @=@ könyvfejezet +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_3248 @=@ publication-section +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_3248 @=@ reference-entry +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_3248 @=@ reference_entry +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_3248 @=@ scientific book chapter +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_3248 @=@ Глава монографии +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_ba08 @=@ Book Review +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_ba08 @=@ book-review +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_ba08 @=@ http://purl.org/coar/resource_type/c_ba08 +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_ba08 @=@ info:eu-repo/semantics/bookreview +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_ba08 @=@ reseña de libro +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_5794 @=@ A4 Artikkeli konferenssijulkaisussa +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_5794 @=@ Article in monograph or in proceedings +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_5794 @=@ Article in proceedings +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_5794 @=@ Conference Paper +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_5794 @=@ Conference article +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_5794 @=@ Conference papers +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_5794 @=@ ConferencePaper +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_5794 @=@ PROCEEDING_PAPER +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_5794 @=@ Papers in Conference Proceedings openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_5794 @=@ Proceedings paper -openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_5794 @=@ Conference article +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_5794 @=@ Scientific publication - Conference Paper +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_5794 @=@ Scientific publication - Conference Short Paper +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_5794 @=@ conference_paper +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_5794 @=@ http://purl.org/coar/resource_type/c_5794 openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_5794 @=@ http://purl.org/eprint/type/ConferencePaper -openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_5794 @=@ Conference article -openaire::user_resource_types @=@ Article @=@ http://purl.org/coar/resource_type/c_5794 \ No newline at end of file +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_5794 @=@ http://purl.org/escidoc/metadata/ves/publication-types/conference-report +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_5794 @=@ info:eu-repo/semantics/Conference Paper +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_5794 @=@ info:eu-repo/semantics/conferencePaper +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_5794 @=@ proceeding with peer review +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_5794 @=@ proceedings-article +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_5794 @=@ publication-conferencepaper +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_5794 @=@ Επιστημονική δημοσίευση - Ανακοίνωση Συνεδρίου (Short Paper) +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_18cp @=@ Conference preprint +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_18cp @=@ http://purl.org/coar/resource_type/c_18cp +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_18co @=@ http://purl.org/coar/resource_type/c_18co +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_7acd @=@ correction +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_7acd @=@ corrigenda +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_7acd @=@ http://purl.org/coar/resource_type/c_7acd +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_7acd @=@ partial-retraction +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_7acd @=@ reply +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_7acd @=@ retraction +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_ab20 @=@ Data Management Plan (NSF Generic) +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_ab20 @=@ Data Management Plan +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_ab20 @=@ OutputManagementPlan +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_ab20 @=@ http://purl.org/coar/resource_type/c_ab20 +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_ab20 @=@ http://purl.org/spar/fabio/DataMangementPlan +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_ab20 @=@ plan de gestión de datos +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_ab20 @=@ publication-datamanagementplan +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_beb9 @=@ Data Descriptor +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_beb9 @=@ data-article +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_beb9 @=@ DataPaper +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_beb9 @=@ http://purl.org/coar/resource_type/c_beb9 +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/H9BQ-739P @=@ Peer review +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/H9BQ-739P @=@ peer-review +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_816b @=@ http://purl.org/coar/resource_type/c_816b +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_816b @=@ info:eu-repo/semantics/preprint +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_816b @=@ Pre Print +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_816b @=@ Pre-print +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_816b @=@ publication-preprint +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_816b @=@ Препринт +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_93fc @=@ ACTIVITY_REPORT +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_93fc @=@ Case Report +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_93fc @=@ Commissioned report +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_93fc @=@ Internal note +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_93fc @=@ Rapport / Report +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_93fc @=@ brief-report +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_93fc @=@ case-report +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_93fc @=@ chapitre_rapport +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_93fc @=@ compte rendu +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_93fc @=@ doc-type:report +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_93fc @=@ document_institutionnel +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_93fc @=@ http://purl.org/coar/resource_type/c_18hj +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_93fc @=@ http://purl.org/coar/resource_type/c_18wq +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_93fc @=@ http://purl.org/coar/resource_type/c_18ww +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_93fc @=@ http://purl.org/coar/resource_type/c_93fc +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_93fc @=@ http://purl.org/coar/resource_type/c_ba1f +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_93fc @=@ http://purl.org/eprint/type/Report +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_93fc @=@ info:eu-repo/semantics/report +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_93fc @=@ publication-report +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_93fc @=@ rapport_expertise +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_93fc @=@ rapport_mission +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_93fc @=@ report-paper +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_93fc @=@ report-paper_title +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_93fc @=@ report-series +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_93fc @=@ report +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_93fc @=@ support_cours +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ A1 Alkuperäisartikkeli tieteellisessä aikakauslehdessä +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ Article (author) +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ Article from Conference in a Journal +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ Article in journal +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ Article +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ ArticleArtikel +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ Articles in Journals +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ Articolo +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ Artículo - Article +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ Artículo +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ Articulo +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ Aufsatz +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ Journal article (on-line or printed) +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ Journal article +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ Journal articles +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ Journal paper +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ JournalArticle +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ Makale +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ Original article (non peer-reviewed) +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ Original article (peer-reviewed) +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ Peer-reviewed Article +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ Publication - Article +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ Published Journal Article +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ Research Article +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ Scientific publication - Journal Article +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ Straipsnis / Article +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ Taxonomic Paper +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ Zeitschriftenbeitrag +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ art +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ article in non peer-reviewed journal +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ article in peer-reviewed journal +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ article_site_web +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ artykuł +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ doc-type:Journal Article +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ doc-type:article +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ foly +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ folyóiratcikk +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ http://purl.org/coar/resource_type/c_6501 +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ http://purl.org/escidoc/metadata/ves/publication-types/article +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ http://purl.org/ontology/bibo/AcademicArticle +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ info:eu-repo/semantics/Journal Article +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ info:eu-repo/semantics/article +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ journal-article +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ journal_article +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ non peer-reviewed article +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ publication-article +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ rapid-communication +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ research-article +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ text (article) +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ Статья +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ Рецензована стаття +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_dcae04bc @=@ A2 Katsausartikkeli tieteellisessä aikakauslehdessä +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_dcae04bc @=@ Journal Article/Review +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_dcae04bc @=@ Review article (non peer-reviewed) +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_dcae04bc @=@ Review article (peer-reviewed) +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_dcae04bc @=@ article-commentary +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_dcae04bc @=@ artículo de revisión +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_dcae04bc @=@ Review Article +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_dcae04bc @=@ review-article +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_dcae04bc @=@ Revisión +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_dcae04bc @=@ RezensionReview +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_dcae04bc @=@ http://purl.org/coar/resource_type/c_dcae04bc +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_7bab @=@ http://purl.org/coar/resource_type/c_7bab +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_71bd @=@ Documento tecnico +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_71bd @=@ http://purl.org/coar/resource_type/c_71bd +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_71bd @=@ publication-softwaredocumentation +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_71bd @=@ Software documentation +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/H6QP-SC1X @=@ Trademark +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_393c @=@ http://purl.org/coar/resource_type/c_393c +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_393c @=@ Workflow +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_393c @=@ Workflow/Workflow +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_7a1f @=@ Bachelor's Degree +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_7a1f @=@ Bachelor's +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_7a1f @=@ Bachelors Thesis +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_7a1f @=@ Graduate Thesis +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_7a1f @=@ Proyecto fin de carrera +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_7a1f @=@ Undergraduate Thesis +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_7a1f @=@ Undergraduate diploma +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_7a1f @=@ bachelor thesis +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_7a1f @=@ http://purl.org/coar/resource_type/c_7a1f +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_7a1f @=@ info:eu-repo/semantics/bachelorThesis +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_7a1f @=@ выпускная бакалаврская работа +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_db06 @=@ Daktaro disertacija / Doctoral dissertation +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_db06 @=@ Diss +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_db06 @=@ Dissertation +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_db06 @=@ Doctoral Dissertation +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_db06 @=@ Doctoral +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_db06 @=@ DoctoralThesis +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_db06 @=@ HabilitationThesis +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_db06 @=@ PhD Theses +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_db06 @=@ PhD thesis +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_db06 @=@ Tenure-Promotion +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_db06 @=@ Tesi di dottorato +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_db06 @=@ Tesis +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_db06 @=@ Text.Thesis.Doctoral +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_db06 @=@ Theses +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_db06 @=@ Thesis or Dissertation +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_db06 @=@ Thesis.Doctoral +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_db06 @=@ Thesis +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_db06 @=@ doc-type:doctoralThesis +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_db06 @=@ doctoral thesis +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_db06 @=@ dok +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_db06 @=@ doktori dolgozat +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_db06 @=@ http://purl.org/coar/resource_type/c_db06 +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_db06 @=@ http://purl.org/eprint/type/Thesis +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_db06 @=@ info:eu-repo/semantics/doctoralThesis +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_db06 @=@ publication-thesis +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_db06 @=@ tesis doctoral +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_db06 @=@ these exercice +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_db06 @=@ these +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_bdcc @=@ Diploma Project +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_bdcc @=@ MSc Thesis +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_bdcc @=@ Magistro darbas / Master thesis +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_bdcc @=@ Master Degree +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_bdcc @=@ Master's Degree +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_bdcc @=@ Master's +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_bdcc @=@ Masterarbeit u.a. +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_bdcc @=@ Masters (Taught) +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_bdcc @=@ Masters thesis +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_bdcc @=@ Masters-Thesis.Magister +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_bdcc @=@ Tesina +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_bdcc @=@ Thesis.Master +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_bdcc @=@ Trabajo fin de Máster +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_bdcc @=@ doc-type:masterThesis +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_bdcc @=@ hdr +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_bdcc @=@ http://purl.org/coar/resource_type/c_bdcc +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_bdcc @=@ info:eu-repo/semantics/masterThesis +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_bdcc @=@ master thesis +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_bdcc @=@ masterThesis +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_bdcc @=@ memoire +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_bdcc @=@ tesis de maestría +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_18wz @=@ http://purl.org/coar/resource_type/c_18wz +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_186u @=@ http://purl.org/coar/resource_type/c_186u +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_186u @=@ http://purl.org/spar/fabio/DataManagementPolicy +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_186u @=@ http://purl.org/spar/fabio/DataManagementPolicyDocument +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_186u @=@ JRC Reference Reports +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_18op @=@ Deliverable +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_18op @=@ http://purl.org/coar/resource_type/c_18op +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_18op @=@ Project deliverable +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_18op @=@ Project Report +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_18op @=@ publication-deliverable +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_18ws @=@ D4 Julkaistu kehittämis- tai tutkimusraportti tai -selvitys +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_18ws @=@ EUR - Scientific and Technical Research Reports +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_18ws @=@ Project milestone +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_18ws @=@ RESEARCH_REPORT +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_18ws @=@ http://purl.org/coar/resource_type/c_18ws +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_18ws @=@ research report +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_18ws @=@ научный доклад +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_18gh @=@ Departmental Technical Report +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_18gh @=@ Informe Técnico +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_18gh @=@ Tech-Report +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_18gh @=@ Technical Report +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_18gh @=@ document_technique +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_18gh @=@ http://purl.org/coar/resource_type/c_18gh +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_18gh @=@ informe a organismo financiador +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_18gh @=@ publication-technicalnote +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_46ec @=@ Graduate diploma +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_46ec @=@ Hochschulschrift +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_46ec @=@ Tesis/trabajos de grado – Thesis +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_46ec @=@ Thèse ou mémoire / Thesis or Dissertation +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_8042 @=@ Arbeitspapier +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_8042 @=@ Departmental Bulletin Paper +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_8042 @=@ Documento de trabajo +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_8042 @=@ Paper +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_8042 @=@ Project description +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_8042 @=@ Research-Paper +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_8042 @=@ ResearchPaper +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_8042 @=@ Working / discussion paper +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_8042 @=@ Working Paper / Technical Report +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_8042 @=@ Working Paper +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_8042 @=@ doc-type:workingPaper +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_8042 @=@ http://purl.org/coar/resource_type/c_8042 +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_8042 @=@ http://purl.org/escidoc/metadata/ves/publication-types/paper +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_8042 @=@ info:eu-repo/semantics/paper +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_8042 @=@ info:eu-repo/semantics/workingPaper +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_8042 @=@ publication-workingpaper +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_8042 @=@ workingPaper +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_6947 @=@ Blog +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_6947 @=@ Entrada de blog +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_6947 @=@ http://purl.org/coar/resource_type/c_6947 +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_c94f @=@ Conference Abstract +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_c94f @=@ Conference Paper/Proceeding/Abstract +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_c94f @=@ Conference Program +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_c94f @=@ Conference contribution +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_c94f @=@ Conference or Workshop Item +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_c94f @=@ Conference paper, poster, etc. +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_c94f @=@ Conference paper/abstract +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_c94f @=@ Conference report +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_c94f @=@ Contribution à un congrès / Conference object +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_c94f @=@ Contributions to Conferences +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_c94f @=@ International Conference Abstract/Poster +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_c94f @=@ International Conference ISI/JCR +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_c94f @=@ International Conference communication/abstract/poster +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_c94f @=@ Konferenzbeitrag +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_c94f @=@ Resumen comunicación Congreso +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_c94f @=@ Resúmen comunicación Congreso +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_c94f @=@ communication_invitee +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_c94f @=@ communication_sans_actes +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_c94f @=@ conference item +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_c94f @=@ conference object +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_c94f @=@ conference +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_c94f @=@ conferenceObject +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_c94f @=@ doc-type:conferenceObject +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_c94f @=@ http://purl.org/coar/resource_type/c_c94f +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_c94f @=@ info:eu-repo/semantics/conferenceItem +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_c94f @=@ info:eu-repo/semantics/conferenceObject +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_c94f @=@ info:eu-repo/semantics/conferenceitemnotinproceedings +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_6670 @=@ Comunicación Congreso +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_6670 @=@ Comunicación de congreso +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_6670 @=@ Conference Poster +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_6670 @=@ National Conference Abstract/Poster +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_6670 @=@ National Conference communication/abstract/poster +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_6670 @=@ Póster de congreso +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_6670 @=@ Póster +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_6670 @=@ Scientific publication - Conference Poster +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_6670 @=@ http://purl.org/coar/resource_type/c_6670 +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_6670 @=@ http://purl.org/eprint/type/ConferencePoster +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_6670 @=@ plakat +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_6670 @=@ poster +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/R60J-J5BD @=@ Conference lecture +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/R60J-J5BD @=@ Ponencia - Conference or Workshop Item +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/R60J-J5BD @=@ Presentación +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/R60J-J5BD @=@ Presentation +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/R60J-J5BD @=@ invited conference talk +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/R60J-J5BD @=@ ponencia +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/R60J-J5BD @=@ prezentacja +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_f744 @=@ Actes de congrès / Conference proceedings +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_f744 @=@ Conference Proceedings +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_f744 @=@ GL4 Conference Proceedings +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_f744 @=@ International Conference +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_f744 @=@ National Conference +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_f744 @=@ PREFACE_PROCEEDINGS +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_f744 @=@ Proceedings (peer-reviewed) +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_f744 @=@ Proceedings of a Conference +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_f744 @=@ Tagungsband +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_f744 @=@ actas de congreso +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_f744 @=@ actes_congres +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_f744 @=@ communication_avec_actes +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_f744 @=@ communication_par_affiche +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_f744 @=@ conference proceeding +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_f744 @=@ http://purl.org/coar/resource_type/c_f744 +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_f744 @=@ http://purl.org/escidoc/metadata/ves/publication-types/proceedings +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_f744 @=@ info:eu-repo/semantics/conferenceproceedings +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_f744 @=@ proceeding, seminar, workshop without peer review +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_f744 @=@ proceedings +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_b239 @=@ Editorial +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_b239 @=@ Editorial ISI/JCR +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_b239 @=@ Editors +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_b239 @=@ Editors (non peer-reviewed) +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_b239 @=@ Editors (peer-reviewed) +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_b239 @=@ http://purl.org/coar/resource_type/c_b239 +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_0640 @=@ http://purl.org/coar/resource_type/c_0640 +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_0640 @=@ International Journal +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_0640 @=@ International Journal ISI/JCR +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_0640 @=@ Journal (full / special issue) +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_0640 @=@ National Journal +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_0857 @=@ habilitation à diriger des recherches +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_0857 @=@ http://purl.org/coar/resource_type/c_0857 +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_545b @=@ Article - letter to the editor +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_545b @=@ Article / Letter to editor +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_545b @=@ Article / Letter to the editor +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_545b @=@ Article-letter to the editor +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_545b @=@ Article/Letter to editor +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_545b @=@ http://purl.org/coar/resource_type/c_545b +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_545b @=@ letter +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2cd9 @=@ Magazine Article +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2cd9 @=@ Revista +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2cd9 @=@ Sammelband +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2cd9 @=@ revista divulgativa +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_0040 @=@ foreword +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_0040 @=@ Abstract +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_0040 @=@ Beitrag im Sammelband +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_0040 @=@ Manuscript +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_0040 @=@ Manuscrito +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_0040 @=@ afterword +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_0040 @=@ avantpropos +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_0040 @=@ http://purl.org/coar/resource_type/c_0040 +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_0040 @=@ http://purl.org/coar/resource_type/c_3e5a +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_0040 @=@ postface +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2fe3 @=@ revuedepresse +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_998f @=@ Article / Newspaper +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_998f @=@ Newspaper Article +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_998f @=@ Newspaper or magazine article +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_998f @=@ http://purl.org/coar/resource_type/c_998f +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_998f @=@ in-brief +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/QX5C-AR31 @=@ Berichtsreihe +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/QX5C-AR31 @=@ Encyclopedia Entry +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/QX5C-AR31 @=@ Funding Submission +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/QX5C-AR31 @=@ Índice +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/QX5C-AR31 @=@ License +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/QX5C-AR31 @=@ Manual +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/QX5C-AR31 @=@ Other publication (non peer-review) +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/QX5C-AR31 @=@ Other publication (peer-review) +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/QX5C-AR31 @=@ Supervised Student Publication +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/QX5C-AR31 @=@ Text/Text +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/QX5C-AR31 @=@ Text +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/QX5C-AR31 @=@ Translation +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/QX5C-AR31 @=@ Travail étudiant / Student work +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/QX5C-AR31 @=@ chronique +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/QX5C-AR31 @=@ contributionToPeriodical +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/QX5C-AR31 @=@ historicalDocument +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/QX5C-AR31 @=@ info:eu-repo/semantics/contributionToPeriodical +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/QX5C-AR31 @=@ literature +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/QX5C-AR31 @=@ other publication +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/QX5C-AR31 @=@ publication-other +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/QX5C-AR31 @=@ sa_component +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/QX5C-AR31 @=@ standard-series +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/QX5C-AR31 @=@ standard +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_baaf @=@ Proposal +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_baaf @=@ http://purl.org/coar/resource_type/c_baaf +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_baaf @=@ research-proposal +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_efa0 @=@ Book/Film/Article review +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_efa0 @=@ http://purl.org/coar/resource_type/c_efa0 +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_efa0 @=@ info:eu-repo/semantics/review +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_18cf @=@ http://purl.org/coar/resource_type/c_18cf +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_1162 @=@ Comentario +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_1162 @=@ Comment/debate +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_1162 @=@ annotation +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_1162 @=@ http://purl.org/coar/resource_type/c_1162 +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_1162 @=@ info:eu-repo/semantics/annotation +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_8544 @=@ Inaugural lecture +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_8544 @=@ Material didáctico +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_8544 @=@ Matériel didactique / Educational material +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_8544 @=@ Public-Lecture +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_8544 @=@ Teaching Resource +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_8544 @=@ http://purl.org/coar/resource_type/c_8544 +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_8544 @=@ info:eu-repo/semantics/lecture +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_8544 @=@ lesson +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_8544 @=@ note de lecture +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_8544 @=@ notedelecture +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_8544 @=@ Учебный материал +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_18cd @=@ Partitura +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_18cd @=@ document_audiovisuel +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_18cd @=@ http://purl.org/coar/resource_type/c_18cd +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_18cw @=@ Estudio y edición crítica de música +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_18cw @=@ http://purl.org/coar/resource_type/c_18cw +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_c950 @=@ Software/Software +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_c950 @=@ Software +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_c950 @=@ http://purl.org/coar/resource_type/c_c950 +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_5ce6 @=@ Jupyter Notebook +openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_5ce6 @=@ http://purl.org/coar/resource_type/c_5ce6 +openaire::user_resource_types @=@ Article @=@ text:conference_output:conference_proceedings:conference_paper +openaire::user_resource_types @=@ Article @=@ http://purl.org/coar/resource_type/c_5794 +openaire::user_resource_types @=@ Article @=@ text:conference_output:conference_paper_not_in_proceedings +openaire::user_resource_types @=@ Article @=@ http://purl.org/coar/resource_type/c_18cp +openaire::user_resource_types @=@ Article @=@ text:conference_output:conference_poster_not_in_proceedings +openaire::user_resource_types @=@ Article @=@ http://purl.org/coar/resource_type/c_18co +openaire::user_resource_types @=@ Article @=@ text:journal:journal_article:corrigendum +openaire::user_resource_types @=@ Article @=@ http://purl.org/coar/resource_type/c_7acd +openaire::user_resource_types @=@ Article @=@ text:journal:journal_article:data_paper +openaire::user_resource_types @=@ Article @=@ http://purl.org/coar/resource_type/c_beb9 +openaire::user_resource_types @=@ Article @=@ text:journal:journal_article +openaire::user_resource_types @=@ Article @=@ http://purl.org/coar/resource_type/c_6501 +openaire::user_resource_types @=@ Article @=@ text:preprint +openaire::user_resource_types @=@ Article @=@ http://purl.org/coar/resource_type/c_816b +openaire::user_resource_types @=@ Article @=@ text:journal:journal_article:research_article +openaire::user_resource_types @=@ Article @=@ http://purl.org/coar/resource_type/c_2df8fbb1 +openaire::user_resource_types @=@ Article @=@ text:journal:journal_article:review_article +openaire::user_resource_types @=@ Article @=@ http://purl.org/coar/resource_type/c_dcae04bc +openaire::user_resource_types @=@ Article @=@ text:journal:journal_article:software_paper +openaire::user_resource_types @=@ Article @=@ http://purl.org/coar/resource_type/c_7bab +openaire::user_resource_types @=@ Article @=@ text:working_paper +openaire::user_resource_types @=@ Article @=@ http://purl.org/coar/resource_type/c_8042 +openaire::user_resource_types @=@ Thesis @=@ text:thesis:bachelor_thesis +openaire::user_resource_types @=@ Thesis @=@ http://purl.org/coar/resource_type/c_7a1f +openaire::user_resource_types @=@ Thesis @=@ text:thesis:doctoral_thesis +openaire::user_resource_types @=@ Thesis @=@ http://purl.org/coar/resource_type/c_db06 +openaire::user_resource_types @=@ Thesis @=@ text:thesis:master_thesis +openaire::user_resource_types @=@ Thesis @=@ http://purl.org/coar/resource_type/c_bdcc +openaire::user_resource_types @=@ Thesis @=@ text:thesis +openaire::user_resource_types @=@ Thesis @=@ http://purl.org/coar/resource_type/c_46ec +openaire::user_resource_types @=@ Report @=@ text:report +openaire::user_resource_types @=@ Report @=@ http://purl.org/coar/resource_type/c_93fc +openaire::user_resource_types @=@ Report @=@ text:report:memorandum +openaire::user_resource_types @=@ Report @=@ http://purl.org/coar/resource_type/c_18wz +openaire::user_resource_types @=@ Report @=@ text:report:policy_report +openaire::user_resource_types @=@ Report @=@ http://purl.org/coar/resource_type/c_186u +openaire::user_resource_types @=@ Report @=@ text:report:research_protocol +openaire::user_resource_types @=@ Report @=@ http://purl.org/coar/resource_type/YZ1N-ZFT9 +openaire::user_resource_types @=@ Report @=@ text:report:research_report +openaire::user_resource_types @=@ Report @=@ http://purl.org/coar/resource_type/c_18ws +openaire::user_resource_types @=@ Report @=@ text:report:technical_report +openaire::user_resource_types @=@ Report @=@ http://purl.org/coar/resource_type/c_18gh +openaire::user_resource_types @=@ Project result @=@ text:report:data_management_plan +openaire::user_resource_types @=@ Project result @=@ http://purl.org/coar/resource_type/c_ab20 +openaire::user_resource_types @=@ Project result @=@ text:report:project_deliverable +openaire::user_resource_types @=@ Project result @=@ http://purl.org/coar/resource_type/c_18op +openaire::user_resource_types @=@ Book/Chapter @=@ text:book +openaire::user_resource_types @=@ Book/Chapter @=@ http://purl.org/coar/resource_type/c_2f33 +openaire::user_resource_types @=@ Book/Chapter @=@ text:book:book_part +openaire::user_resource_types @=@ Book/Chapter @=@ http://purl.org/coar/resource_type/c_3248 +openaire::user_resource_types @=@ Clinical Study @=@ text:report:clinical_study +openaire::user_resource_types @=@ Clinical Study @=@ http://purl.org/coar/resource_type/c_7877 +openaire::meta_resource_types @=@ Research Literature @=@ text:bibliography +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_86bc +openaire::meta_resource_types @=@ Research Literature @=@ patent:design_patent +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/C53B-JCY5 +openaire::meta_resource_types @=@ Research Literature @=@ patent +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_15cd +openaire::meta_resource_types @=@ Research Literature @=@ patent:PCT_application +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/SB3Y-W4EH +openaire::meta_resource_types @=@ Research Literature @=@ patent:plant_patent +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/Z907-YMBB +openaire::meta_resource_types @=@ Research Literature @=@ patent:plant_variety_protection +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/GPQ7-G5VE +openaire::meta_resource_types @=@ Research Literature @=@ patent:software_patent +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/MW8G-3CR8 +openaire::meta_resource_types @=@ Research Literature @=@ patent:utility_model +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/9DKX-KSAF +openaire::meta_resource_types @=@ Research Literature @=@ text:report:clinical_study +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_7877 +openaire::meta_resource_types @=@ Research Literature @=@ text:book +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_2f33 +openaire::meta_resource_types @=@ Research Literature @=@ text:book:book_part +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_3248 +openaire::meta_resource_types @=@ Research Literature @=@ text:review:book_review +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_ba08 +openaire::meta_resource_types @=@ Research Literature @=@ text:review:commentary +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/D97F-VB57 +openaire::meta_resource_types @=@ Research Literature @=@ text:conference_output:conference_proceedings:conference_paper +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_5794 +openaire::meta_resource_types @=@ Research Literature @=@ text:conference_output:conference_paper_not_in_proceedings +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_18cp +openaire::meta_resource_types @=@ Research Literature @=@ text:conference_output:conference_poster_not_in_proceedings +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_18co +openaire::meta_resource_types @=@ Research Literature @=@ text:journal:journal_article:corrigendum +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_7acd +openaire::meta_resource_types @=@ Research Literature @=@ text:report:data_management_plan +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_ab20 +openaire::meta_resource_types @=@ Research Literature @=@ text:journal:journal_article:data_paper +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_beb9 +openaire::meta_resource_types @=@ Research Literature @=@ text:journal:journal_article +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_6501 +openaire::meta_resource_types @=@ Research Literature @=@ text:review:peer_review +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/H9BQ-739P +openaire::meta_resource_types @=@ Research Literature @=@ text:preprint +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_816b +openaire::meta_resource_types @=@ Research Literature @=@ text:report +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_93fc +openaire::meta_resource_types @=@ Research Literature @=@ text:journal:journal_article:research_article +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_2df8fbb1 +openaire::meta_resource_types @=@ Research Literature @=@ text:journal:journal_article:review_article +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_dcae04bc +openaire::meta_resource_types @=@ Research Literature @=@ text:journal:journal_article:software_paper +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_7bab +openaire::meta_resource_types @=@ Research Literature @=@ text:technical_documentation +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_71bd +openaire::meta_resource_types @=@ Research Literature @=@ text:transcription +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/6NC7-GK9S +openaire::meta_resource_types @=@ Research Literature @=@ text:thesis:bachelor_thesis +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_7a1f +openaire::meta_resource_types @=@ Research Literature @=@ text:thesis:doctoral_thesis +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_db06 +openaire::meta_resource_types @=@ Research Literature @=@ text:thesis:master_thesis +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_bdcc +openaire::meta_resource_types @=@ Research Literature @=@ text:report:memorandum +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_18wz +openaire::meta_resource_types @=@ Research Literature @=@ text:report:policy_report +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_186u +openaire::meta_resource_types @=@ Research Literature @=@ text:report:project_deliverable +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_18op +openaire::meta_resource_types @=@ Research Literature @=@ text:report:research_protocol +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/YZ1N-ZFT9 +openaire::meta_resource_types @=@ Research Literature @=@ text:report:research_report +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_18ws +openaire::meta_resource_types @=@ Research Literature @=@ text:report:technical_report +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_18gh +openaire::meta_resource_types @=@ Research Literature @=@ text:thesis +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_46ec +openaire::meta_resource_types @=@ Research Literature @=@ text:working_paper +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_8042 +openaire::meta_resource_types @=@ Research Literature @=@ text:blog_post +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_6947 +openaire::meta_resource_types @=@ Research Literature @=@ text:conference_output +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_c94f +openaire::meta_resource_types @=@ Research Literature @=@ text:conference_output:conference_proceedings:conference_poster +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_6670 +openaire::meta_resource_types @=@ Research Literature @=@ text:conference_output:conference_presentation +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/R60J-J5BD +openaire::meta_resource_types @=@ Research Literature @=@ text:conference_output:conference_proceedings +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_f744 +openaire::meta_resource_types @=@ Research Literature @=@ text:journal:editorial +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_b239 +openaire::meta_resource_types @=@ Research Literature @=@ text:journal +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_0640 +openaire::meta_resource_types @=@ Research Literature @=@ text:letter +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_0857 +openaire::meta_resource_types @=@ Research Literature @=@ text:journal:letter_to_the_editor +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_545b +openaire::meta_resource_types @=@ Research Literature @=@ text:magazine +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_2cd9 +openaire::meta_resource_types @=@ Research Literature @=@ text:manuscript +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_0040 +openaire::meta_resource_types @=@ Research Literature @=@ text:newspaper +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_2fe3 +openaire::meta_resource_types @=@ Research Literature @=@ text:newspaper:newspaper_article +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_998f +openaire::meta_resource_types @=@ Research Literature @=@ text:other_periodical +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/QX5C-AR31 +openaire::meta_resource_types @=@ Research Literature @=@ text:research_proposal +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_baaf +openaire::meta_resource_types @=@ Research Literature @=@ text:review +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_efa0 +openaire::meta_resource_types @=@ Research Literature @=@ text +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_18cf +openaire::meta_resource_types @=@ Research Literature @=@ text:annotation +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_1162 +openaire::meta_resource_types @=@ Research Literature @=@ text:lecture +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_8544 +openaire::meta_resource_types @=@ Research Literature @=@ text:musical_notation +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_18cw +openaire::meta_resource_types @=@ Research Data @=@ dataset +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/c_ddb1 +openaire::meta_resource_types @=@ Research Data @=@ dataset:aggregated_data +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/ACF7-8YT9 +openaire::meta_resource_types @=@ Research Data @=@ cartographic_material +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/c_12cc +openaire::meta_resource_types @=@ Research Data @=@ dataset:clinical_trial_data +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/c_cb28 +openaire::meta_resource_types @=@ Research Data @=@ dataset:compiled_data +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/FXF3-D3G7 +openaire::meta_resource_types @=@ Research Data @=@ dataset:encoded_data +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/AM6W-6QAW +openaire::meta_resource_types @=@ Research Data @=@ dataset:experimental_data +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/63NG-B465 +openaire::meta_resource_types @=@ Research Data @=@ dataset:genomic_data +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/A8F1-NPV9 +openaire::meta_resource_types @=@ Research Data @=@ dataset:geospatial_data +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/2H0M-X761 +openaire::meta_resource_types @=@ Research Data @=@ dataset:laboratory_notebook +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/H41Y-FW7B +openaire::meta_resource_types @=@ Research Data @=@ cartographic_material:map +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/c_12cd +openaire::meta_resource_types @=@ Research Data @=@ dataset:measurement_and_test_data +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/DD58-GFSX +openaire::meta_resource_types @=@ Research Data @=@ dataset:observational_data +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/FF4C-28RK +openaire::meta_resource_types @=@ Research Data @=@ dataset:recorded_data +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/CQMR-7K63 +openaire::meta_resource_types @=@ Research Data @=@ dataset:simulation_data +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/W2XT-7017 +openaire::meta_resource_types @=@ Research Data @=@ sound +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/c_18cc +openaire::meta_resource_types @=@ Research Data @=@ dataset:survey_data +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/NHD0-W6SY +openaire::meta_resource_types @=@ Research Data @=@ image +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/c_c513 +openaire::meta_resource_types @=@ Research Data @=@ image:moving_image +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/c_8a7e +openaire::meta_resource_types @=@ Research Data @=@ image:still_image +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/c_ecc8 +openaire::meta_resource_types @=@ Research Data @=@ image:moving_image:video +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/c_12ce +openaire::meta_resource_types @=@ Research Data @=@ design +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/542X-3S04 +openaire::meta_resource_types @=@ Research Data @=@ design:industrial_design +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/JBNF-DYAD +openaire::meta_resource_types @=@ Research Data @=@ interactive_resource +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/c_e9a0 +openaire::meta_resource_types @=@ Research Data @=@ design:layout_design +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/BW7T-YM2G +openaire::meta_resource_types @=@ Research Data @=@ interactive_resource:website +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/c_7ad9 +openaire::meta_resource_types @=@ Research Data @=@ sound:musical_composition +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/c_18cd +openaire::meta_resource_types @=@ Research Software @=@ software:research_software +openaire::meta_resource_types @=@ Research Software @=@ http://purl.org/coar/resource_type/c_c950 +openaire::meta_resource_types @=@ Research Software @=@ software +openaire::meta_resource_types @=@ Research Software @=@ http://purl.org/coar/resource_type/c_5ce6 +openaire::meta_resource_types @=@ Research Software @=@ software:source_code +openaire::meta_resource_types @=@ Research Software @=@ http://purl.org/coar/resource_type/QH80-2R4E +openaire::meta_resource_types @=@ Other Research Products @=@ learning_object +openaire::meta_resource_types @=@ Other Research Products @=@ http://purl.org/coar/resource_type/c_e059 +openaire::meta_resource_types @=@ Other Research Products @=@ other +openaire::meta_resource_types @=@ Other Research Products @=@ http://purl.org/coar/resource_type/c_1843 +openaire::meta_resource_types @=@ Other Research Products @=@ trademark +openaire::meta_resource_types @=@ Other Research Products @=@ http://purl.org/coar/resource_type/H6QP-SC1X +openaire::meta_resource_types @=@ Other Research Products @=@ workflow +openaire::meta_resource_types @=@ Other Research Products @=@ http://purl.org/coar/resource_type/c_393c \ No newline at end of file diff --git a/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/terms.txt b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/terms.txt index a38c0e987..68828b3d8 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/terms.txt +++ b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/terms.txt @@ -1122,5 +1122,295 @@ dnet:relation_subRelType @=@ dnet:relation_subRelType @=@ version @=@ version FOS @=@ Fields of Science and Technology classification @=@ 0101 mathematics @=@ 0101 mathematics FOS @=@ Fields of Science and Technology classification @=@ 0102 computer and information sciences @=@ 0102 computer and information sciences FOS @=@ Fields of Science and Technology classification @=@ 0103 physical sciences @=@ 0103 physical sciences +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_ddb1 @=@ dataset +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/ACF7-8YT9 @=@ aggregated data +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_12cc @=@ cartographic material +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_cb28 @=@ clinical trial data +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/FXF3-D3G7 @=@ compiled data +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/AM6W-6QAW @=@ encoded data +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/63NG-B465 @=@ experimental data +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/A8F1-NPV9 @=@ genomic data +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/2H0M-X761 @=@ geospatial data +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/H41Y-FW7B @=@ laboratory notebook +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_12cd @=@ map +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/DD58-GFSX @=@ measurement and test data +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/FF4C-28RK @=@ observational data +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/CQMR-7K63 @=@ recorded data +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/W2XT-7017 @=@ simulation data +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_18cc @=@ sound +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/NHD0-W6SY @=@ survey data +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_86bc @=@ bibliography +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_c513 @=@ image +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_8a7e @=@ moving image +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_ecc8 @=@ still image +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_12ce @=@ video +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/C53B-JCY5 @=@ design patent +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_15cd @=@ patent +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/SB3Y-W4EH @=@ PCT application +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/Z907-YMBB @=@ plant patent +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/GPQ7-G5VE @=@ plant variety protection +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/MW8G-3CR8 @=@ software patent +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/542X-3S04 @=@ design +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/JBNF-DYAD @=@ industrial design +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_e9a0 @=@ interactive resource +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/BW7T-YM2G @=@ layout design +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_e059 @=@ learning object +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_1843 @=@ other +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/9DKX-KSAF @=@ utility model +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_7ad9 @=@ website +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_7877 @=@ clinical study +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2f33 @=@ book +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_3248 @=@ book part +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_ba08 @=@ book review +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/D97F-VB57 @=@ commentary openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_5794 @=@ conference paper -openaire::user_resource_types @=@ openaire::user_resource_types @=@ Article @=@ Article \ No newline at end of file +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_18cp @=@ conference paper not in proceedings +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_18co @=@ conference poster not in proceedings +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_7acd @=@ corrigendum +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_ab20 @=@ data management plan +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_beb9 @=@ data paper +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_6501 @=@ journal article +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/H9BQ-739P @=@ peer review +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_816b @=@ preprint +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_93fc @=@ report +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2df8fbb1 @=@ research article +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_dcae04bc @=@ review article +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_7bab @=@ software paper +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_71bd @=@ technical documentation +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/6NC7-GK9S @=@ transcription +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/H6QP-SC1X @=@ trademark +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_393c @=@ workflow +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_7a1f @=@ bachelor thesis +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_db06 @=@ doctoral thesis +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_bdcc @=@ master thesis +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_18wz @=@ memorandum +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_186u @=@ policy report +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_18op @=@ project deliverable +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/YZ1N-ZFT9 @=@ research protocol +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_18ws @=@ research report +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_18gh @=@ technical report +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_46ec @=@ thesis +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_8042 @=@ working paper +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_6947 @=@ blog post +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_c94f @=@ conference output +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_6670 @=@ conference poster +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/R60J-J5BD @=@ conference presentation +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_f744 @=@ conference proceedings +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_b239 @=@ editorial +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_0640 @=@ journal +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_0857 @=@ letter +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_545b @=@ letter to the editor +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2cd9 @=@ magazine +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_0040 @=@ manuscript +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_2fe3 @=@ newspaper +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_998f @=@ newspaper article +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/QX5C-AR31 @=@ other periodical +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_baaf @=@ research proposal +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_efa0 @=@ review +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_18cf @=@ text +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_1162 @=@ annotation +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_8544 @=@ lecture +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_18cd @=@ musical composition +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_18cw @=@ musical notation +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_c950 @=@ research software +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/c_5ce6 @=@ software +openaire::coar_resource_types_3_1 @=@ openaire::coar_resource_types_3_1 @=@ http://purl.org/coar/resource_type/QH80-2R4E @=@ source code +openaire::user_resource_types @=@ openaire::user_resource_types @=@ Article @=@ Article +openaire::user_resource_types @=@ openaire::user_resource_types @=@ Thesis @=@ Thesis +openaire::user_resource_types @=@ openaire::user_resource_types @=@ Report @=@ Report +openaire::user_resource_types @=@ openaire::user_resource_types @=@ Project result @=@ Project result +openaire::user_resource_types @=@ openaire::user_resource_types @=@ Research Data @=@ Research Data +openaire::user_resource_types @=@ openaire::user_resource_types @=@ Presentation @=@ Presentation +openaire::user_resource_types @=@ openaire::user_resource_types @=@ Book/Chapter @=@ Book/Chapter +openaire::user_resource_types @=@ openaire::user_resource_types @=@ Multimedia @=@ Multimedia +openaire::user_resource_types @=@ openaire::user_resource_types @=@ Clinical Study @=@ Clinical Study +openaire::meta_resource_types @=@ openaire::meta_resource_types @=@ Research Literature @=@ Research Literature +openaire::meta_resource_types @=@ openaire::meta_resource_types @=@ Research Data @=@ Research Data +openaire::meta_resource_types @=@ openaire::meta_resource_types @=@ Research Software @=@ Research Software +openaire::meta_resource_types @=@ openaire::meta_resource_types @=@ Other Research Products @=@ Other Research Products +openaire::meta_resource_types @=@ Research Literature @=@ text:bibliography +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_86bc +openaire::meta_resource_types @=@ Research Literature @=@ patent:design_patent +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/C53B-JCY5 +openaire::meta_resource_types @=@ Research Literature @=@ patent +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_15cd +openaire::meta_resource_types @=@ Research Literature @=@ patent:PCT_application +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/SB3Y-W4EH +openaire::meta_resource_types @=@ Research Literature @=@ patent:plant_patent +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/Z907-YMBB +openaire::meta_resource_types @=@ Research Literature @=@ patent:plant_variety_protection +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/GPQ7-G5VE +openaire::meta_resource_types @=@ Research Literature @=@ patent:software_patent +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/MW8G-3CR8 +openaire::meta_resource_types @=@ Research Literature @=@ patent:utility_model +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/9DKX-KSAF +openaire::meta_resource_types @=@ Research Literature @=@ text:report:clinical_study +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_7877 +openaire::meta_resource_types @=@ Research Literature @=@ text:book +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_2f33 +openaire::meta_resource_types @=@ Research Literature @=@ text:book:book_part +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_3248 +openaire::meta_resource_types @=@ Research Literature @=@ text:review:book_review +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_ba08 +openaire::meta_resource_types @=@ Research Literature @=@ text:review:commentary +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/D97F-VB57 +openaire::meta_resource_types @=@ Research Literature @=@ text:conference_output:conference_proceedings:conference_paper +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_5794 +openaire::meta_resource_types @=@ Research Literature @=@ text:conference_output:conference_paper_not_in_proceedings +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_18cp +openaire::meta_resource_types @=@ Research Literature @=@ text:conference_output:conference_poster_not_in_proceedings +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_18co +openaire::meta_resource_types @=@ Research Literature @=@ text:journal:journal_article:corrigendum +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_7acd +openaire::meta_resource_types @=@ Research Literature @=@ text:report:data_management_plan +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_ab20 +openaire::meta_resource_types @=@ Research Literature @=@ text:journal:journal_article:data_paper +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_beb9 +openaire::meta_resource_types @=@ Research Literature @=@ text:journal:journal_article +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_6501 +openaire::meta_resource_types @=@ Research Literature @=@ text:review:peer_review +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/H9BQ-739P +openaire::meta_resource_types @=@ Research Literature @=@ text:preprint +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_816b +openaire::meta_resource_types @=@ Research Literature @=@ text:report +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_93fc +openaire::meta_resource_types @=@ Research Literature @=@ text:journal:journal_article:research_article +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_2df8fbb1 +openaire::meta_resource_types @=@ Research Literature @=@ text:journal:journal_article:review_article +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_dcae04bc +openaire::meta_resource_types @=@ Research Literature @=@ text:journal:journal_article:software_paper +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_7bab +openaire::meta_resource_types @=@ Research Literature @=@ text:technical_documentation +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_71bd +openaire::meta_resource_types @=@ Research Literature @=@ text:transcription +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/6NC7-GK9S +openaire::meta_resource_types @=@ Research Literature @=@ text:thesis:bachelor_thesis +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_7a1f +openaire::meta_resource_types @=@ Research Literature @=@ text:thesis:doctoral_thesis +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_db06 +openaire::meta_resource_types @=@ Research Literature @=@ text:thesis:master_thesis +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_bdcc +openaire::meta_resource_types @=@ Research Literature @=@ text:report:memorandum +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_18wz +openaire::meta_resource_types @=@ Research Literature @=@ text:report:policy_report +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_186u +openaire::meta_resource_types @=@ Research Literature @=@ text:report:project_deliverable +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_18op +openaire::meta_resource_types @=@ Research Literature @=@ text:report:research_protocol +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/YZ1N-ZFT9 +openaire::meta_resource_types @=@ Research Literature @=@ text:report:research_report +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_18ws +openaire::meta_resource_types @=@ Research Literature @=@ text:report:technical_report +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_18gh +openaire::meta_resource_types @=@ Research Literature @=@ text:thesis +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_46ec +openaire::meta_resource_types @=@ Research Literature @=@ text:working_paper +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_8042 +openaire::meta_resource_types @=@ Research Literature @=@ text:blog_post +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_6947 +openaire::meta_resource_types @=@ Research Literature @=@ text:conference_output +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_c94f +openaire::meta_resource_types @=@ Research Literature @=@ text:conference_output:conference_proceedings:conference_poster +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_6670 +openaire::meta_resource_types @=@ Research Literature @=@ text:conference_output:conference_presentation +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/R60J-J5BD +openaire::meta_resource_types @=@ Research Literature @=@ text:conference_output:conference_proceedings +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_f744 +openaire::meta_resource_types @=@ Research Literature @=@ text:journal:editorial +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_b239 +openaire::meta_resource_types @=@ Research Literature @=@ text:journal +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_0640 +openaire::meta_resource_types @=@ Research Literature @=@ text:letter +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_0857 +openaire::meta_resource_types @=@ Research Literature @=@ text:journal:letter_to_the_editor +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_545b +openaire::meta_resource_types @=@ Research Literature @=@ text:magazine +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_2cd9 +openaire::meta_resource_types @=@ Research Literature @=@ text:manuscript +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_0040 +openaire::meta_resource_types @=@ Research Literature @=@ text:newspaper +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_2fe3 +openaire::meta_resource_types @=@ Research Literature @=@ text:newspaper:newspaper_article +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_998f +openaire::meta_resource_types @=@ Research Literature @=@ text:other_periodical +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/QX5C-AR31 +openaire::meta_resource_types @=@ Research Literature @=@ text:research_proposal +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_baaf +openaire::meta_resource_types @=@ Research Literature @=@ text:review +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_efa0 +openaire::meta_resource_types @=@ Research Literature @=@ text +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_18cf +openaire::meta_resource_types @=@ Research Literature @=@ text:annotation +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_1162 +openaire::meta_resource_types @=@ Research Literature @=@ text:lecture +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_8544 +openaire::meta_resource_types @=@ Research Literature @=@ text:musical_notation +openaire::meta_resource_types @=@ Research Literature @=@ http://purl.org/coar/resource_type/c_18cw +openaire::meta_resource_types @=@ Research Data @=@ dataset +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/c_ddb1 +openaire::meta_resource_types @=@ Research Data @=@ dataset:aggregated_data +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/ACF7-8YT9 +openaire::meta_resource_types @=@ Research Data @=@ cartographic_material +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/c_12cc +openaire::meta_resource_types @=@ Research Data @=@ dataset:clinical_trial_data +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/c_cb28 +openaire::meta_resource_types @=@ Research Data @=@ dataset:compiled_data +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/FXF3-D3G7 +openaire::meta_resource_types @=@ Research Data @=@ dataset:encoded_data +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/AM6W-6QAW +openaire::meta_resource_types @=@ Research Data @=@ dataset:experimental_data +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/63NG-B465 +openaire::meta_resource_types @=@ Research Data @=@ dataset:genomic_data +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/A8F1-NPV9 +openaire::meta_resource_types @=@ Research Data @=@ dataset:geospatial_data +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/2H0M-X761 +openaire::meta_resource_types @=@ Research Data @=@ dataset:laboratory_notebook +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/H41Y-FW7B +openaire::meta_resource_types @=@ Research Data @=@ cartographic_material:map +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/c_12cd +openaire::meta_resource_types @=@ Research Data @=@ dataset:measurement_and_test_data +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/DD58-GFSX +openaire::meta_resource_types @=@ Research Data @=@ dataset:observational_data +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/FF4C-28RK +openaire::meta_resource_types @=@ Research Data @=@ dataset:recorded_data +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/CQMR-7K63 +openaire::meta_resource_types @=@ Research Data @=@ dataset:simulation_data +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/W2XT-7017 +openaire::meta_resource_types @=@ Research Data @=@ sound +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/c_18cc +openaire::meta_resource_types @=@ Research Data @=@ dataset:survey_data +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/NHD0-W6SY +openaire::meta_resource_types @=@ Research Data @=@ image +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/c_c513 +openaire::meta_resource_types @=@ Research Data @=@ image:moving_image +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/c_8a7e +openaire::meta_resource_types @=@ Research Data @=@ image:still_image +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/c_ecc8 +openaire::meta_resource_types @=@ Research Data @=@ image:moving_image:video +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/c_12ce +openaire::meta_resource_types @=@ Research Data @=@ design +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/542X-3S04 +openaire::meta_resource_types @=@ Research Data @=@ design:industrial_design +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/JBNF-DYAD +openaire::meta_resource_types @=@ Research Data @=@ interactive_resource +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/c_e9a0 +openaire::meta_resource_types @=@ Research Data @=@ design:layout_design +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/BW7T-YM2G +openaire::meta_resource_types @=@ Research Data @=@ interactive_resource:website +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/c_7ad9 +openaire::meta_resource_types @=@ Research Data @=@ sound:musical_composition +openaire::meta_resource_types @=@ Research Data @=@ http://purl.org/coar/resource_type/c_18cd +openaire::meta_resource_types @=@ Research Software @=@ software:research_software +openaire::meta_resource_types @=@ Research Software @=@ http://purl.org/coar/resource_type/c_c950 +openaire::meta_resource_types @=@ Research Software @=@ software +openaire::meta_resource_types @=@ Research Software @=@ http://purl.org/coar/resource_type/c_5ce6 +openaire::meta_resource_types @=@ Research Software @=@ software:source_code +openaire::meta_resource_types @=@ Research Software @=@ http://purl.org/coar/resource_type/QH80-2R4E +openaire::meta_resource_types @=@ Other Research Products @=@ learning_object +openaire::meta_resource_types @=@ Other Research Products @=@ http://purl.org/coar/resource_type/c_e059 +openaire::meta_resource_types @=@ Other Research Products @=@ other +openaire::meta_resource_types @=@ Other Research Products @=@ http://purl.org/coar/resource_type/c_1843 +openaire::meta_resource_types @=@ Other Research Products @=@ trademark +openaire::meta_resource_types @=@ Other Research Products @=@ http://purl.org/coar/resource_type/H6QP-SC1X +openaire::meta_resource_types @=@ Other Research Products @=@ workflow +openaire::meta_resource_types @=@ Other Research Products @=@ http://purl.org/coar/resource_type/c_393c \ No newline at end of file From 03670bb9ce8609a17277e2d6ab6e53190cc8fe7e Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Mon, 16 Oct 2023 10:55:47 +0200 Subject: [PATCH 328/449] [dedup] use common saveParquet and save methods to ensure outputs are compressed --- .../dhp/oa/dedup/SparkCopyOpenorgsMergeRels.java | 10 +++++----- .../dhp/oa/dedup/SparkCopyRelationsNoOpenorgs.java | 7 +------ .../eu/dnetlib/dhp/oa/dedup/SparkCreateMergeRels.java | 2 +- .../dhp/oa/dedup/SparkCreateOrgsDedupRecord.java | 6 +----- .../eu/dnetlib/dhp/oa/dedup/SparkCreateSimRels.java | 2 -- .../eu/dnetlib/dhp/oa/dedup/SparkWhitelistSimRels.java | 2 -- 6 files changed, 8 insertions(+), 21 deletions(-) diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkCopyOpenorgsMergeRels.java b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkCopyOpenorgsMergeRels.java index 9d0f61007..eca2193af 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkCopyOpenorgsMergeRels.java +++ b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkCopyOpenorgsMergeRels.java @@ -7,6 +7,7 @@ import java.util.Optional; import org.apache.commons.io.IOUtils; import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaRDD; +import org.apache.spark.sql.Dataset; import org.apache.spark.sql.Encoders; import org.apache.spark.sql.SaveMode; import org.apache.spark.sql.SparkSession; @@ -77,13 +78,12 @@ public class SparkCopyOpenorgsMergeRels extends AbstractSparkAction { log.info("Number of Openorgs Merge Relations collected: {}", mergeRelsRDD.count()); - spark + final Dataset relations = spark .createDataset( mergeRelsRDD.rdd(), - Encoders.bean(Relation.class)) - .write() - .mode(SaveMode.Append) - .parquet(outputPath); + Encoders.bean(Relation.class)); + + saveParquet(relations, outputPath, SaveMode.Append); } private boolean isMergeRel(Relation rel) { diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkCopyRelationsNoOpenorgs.java b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkCopyRelationsNoOpenorgs.java index 62cbb5bff..e10f41c82 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkCopyRelationsNoOpenorgs.java +++ b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkCopyRelationsNoOpenorgs.java @@ -67,12 +67,7 @@ public class SparkCopyRelationsNoOpenorgs extends AbstractSparkAction { log.debug("Number of non-Openorgs relations collected: {}", simRels.count()); } - spark - .createDataset(simRels.rdd(), Encoders.bean(Relation.class)) - .write() - .mode(SaveMode.Overwrite) - .json(outputPath); - + save(spark.createDataset(simRels.rdd(), Encoders.bean(Relation.class)), outputPath, SaveMode.Overwrite); } } diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkCreateMergeRels.java b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkCreateMergeRels.java index 2f551b244..babbaaabd 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkCreateMergeRels.java +++ b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkCreateMergeRels.java @@ -155,7 +155,7 @@ public class SparkCreateMergeRels extends AbstractSparkAction { (FlatMapFunction) cc -> ccToMergeRel(cc, dedupConf), Encoders.bean(Relation.class)); - mergeRels.write().mode(SaveMode.Overwrite).parquet(mergeRelPath); + saveParquet(mergeRels, mergeRelPath, SaveMode.Overwrite); } } diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkCreateOrgsDedupRecord.java b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkCreateOrgsDedupRecord.java index 8e5e9fd69..25e394f25 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkCreateOrgsDedupRecord.java +++ b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkCreateOrgsDedupRecord.java @@ -72,11 +72,7 @@ public class SparkCreateOrgsDedupRecord extends AbstractSparkAction { final String mergeRelsPath = DedupUtility.createMergeRelPath(workingPath, actionSetId, "organization"); - rootOrganization(spark, entityPath, mergeRelsPath) - .write() - .mode(SaveMode.Overwrite) - .option("compression", "gzip") - .json(outputPath); + save(rootOrganization(spark, entityPath, mergeRelsPath), outputPath, SaveMode.Overwrite); } diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkCreateSimRels.java b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkCreateSimRels.java index 5b3cc3111..5f54c34df 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkCreateSimRels.java +++ b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkCreateSimRels.java @@ -82,8 +82,6 @@ public class SparkCreateSimRels extends AbstractSparkAction { final String outputPath = DedupUtility.createSimRelPath(workingPath, actionSetId, subEntity); removeOutputDir(spark, outputPath); - JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); - SparkDeduper deduper = new SparkDeduper(dedupConf); Dataset simRels = spark diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkWhitelistSimRels.java b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkWhitelistSimRels.java index 94a09ed05..65ad0c327 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkWhitelistSimRels.java +++ b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkWhitelistSimRels.java @@ -67,8 +67,6 @@ public class SparkWhitelistSimRels extends AbstractSparkAction { log.info("workingPath: '{}'", workingPath); log.info("whiteListPath: '{}'", whiteListPath); - JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); - // file format: source####target Dataset whiteListRels = spark .read() From 159388f9c220e33810d50c7a4552ac640c78eb92 Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Mon, 16 Oct 2023 11:26:07 +0200 Subject: [PATCH 329/449] testing and fix some issues --- .../main/java/eu/dnetlib/dhp/api/Utils.java | 7 + .../dnetlib/dhp/bulktag/SparkBulkTagJob.java | 11 +- .../community/QueryInformationSystem.java | 34 -- ...kResultToCommunityFromOrganizationJob.java | 50 +-- .../PrepareResultCommunitySet.java | 15 +- .../SparkResultToCommunityFromProject.java | 13 +- .../input_communitytoresult_parameters.json | 13 +- ...t_preparecommunitytoresult_parameters.json | 12 +- .../oozie_app/workflow.xml | 115 +------ .../input_communitytoresult_parameters.json | 28 ++ ...t_preparecommunitytoresult_parameters.json | 33 ++ .../QueryCommunityAPITest.java | 16 +- .../PrepareAssocTest.java | 95 ++++++ .../PrepareAssocTest.java | 88 +++++ .../ResultToCommunityJobTest.java | 323 ++++++++++++++++++ .../preparedInfo/resultCommunityList.json | 36 ++ .../preparedInfo/resultCommunityList.json.gz | Bin 939 -> 0 bytes .../relation/relation | 20 ++ .../preparedInfo/resultcommunitylist | 4 + .../relation/relation | 20 ++ .../sample/dataset | 10 + .../sample/otherresearchproduct | 0 .../sample/publication | 0 .../sample/software | 0 24 files changed, 736 insertions(+), 207 deletions(-) delete mode 100644 dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/QueryInformationSystem.java create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromproject/input_communitytoresult_parameters.json create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromproject/input_preparecommunitytoresult_parameters.json rename dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/{bulktag => api}/QueryCommunityAPITest.java (90%) create mode 100644 dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/resulttocommunityfromorganization/PrepareAssocTest.java create mode 100644 dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/resulttocommunityfromproject/PrepareAssocTest.java create mode 100644 dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/resulttocommunityfromproject/ResultToCommunityJobTest.java create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/preparedInfo/resultCommunityList.json delete mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/preparedInfo/resultCommunityList.json.gz create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/relation/relation create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/resulttocommunityfromproject/preparedInfo/resultcommunitylist create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/resulttocommunityfromproject/relation/relation create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/resulttocommunityfromproject/sample/dataset create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/resulttocommunityfromproject/sample/otherresearchproduct create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/resulttocommunityfromproject/sample/publication create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/resulttocommunityfromproject/sample/software diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/Utils.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/Utils.java index a0eacb774..43d5e7e98 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/Utils.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/Utils.java @@ -11,6 +11,9 @@ import java.util.stream.Collectors; import javax.management.Query; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import com.amazonaws.util.StringUtils; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.collect.Maps; @@ -21,6 +24,7 @@ import eu.dnetlib.dhp.bulktag.community.CommunityConfiguration; import eu.dnetlib.dhp.bulktag.community.Provider; import eu.dnetlib.dhp.bulktag.criteria.VerbResolver; import eu.dnetlib.dhp.bulktag.criteria.VerbResolverFactory; +import eu.dnetlib.dhp.resulttocommunityfromorganization.SparkResultToCommunityFromOrganizationJob; /** * @author miriam.baglioni @@ -30,6 +34,8 @@ public class Utils implements Serializable { private static final ObjectMapper MAPPER = new ObjectMapper(); private static final VerbResolver resolver = VerbResolverFactory.newInstance(); + private static final Logger log = LoggerFactory.getLogger(Utils.class); + public static CommunityConfiguration getCommunityConfiguration(boolean production) throws IOException { final Map communities = Maps.newHashMap(); List validCommunities = new ArrayList<>(); @@ -126,6 +132,7 @@ public class Utils implements Serializable { throw new RuntimeException(e); } }); + return organizationMap; } diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/SparkBulkTagJob.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/SparkBulkTagJob.java index b24ee129a..68c740dd5 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/SparkBulkTagJob.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/SparkBulkTagJob.java @@ -95,10 +95,7 @@ public class SparkBulkTagJob { Dataset datasources = readPath( spark, inputPath - .substring( - 0, - inputPath.lastIndexOf("/")) - + "/datasource", + + "datasource", Datasource.class) .filter((FilterFunction) ds -> isOKDatasource(ds)) .map((MapFunction) ds -> ds.getId(), Encoders.STRING()); @@ -106,10 +103,10 @@ public class SparkBulkTagJob { Map>> dsm = cc.getEoscDatasourceMap(); for (String ds : datasources.collectAsList()) { - final String dsId = ds.substring(3); - if (!dsm.containsKey(dsId)) { + // final String dsId = ds.substring(3); + if (!dsm.containsKey(ds)) { ArrayList> eoscList = new ArrayList<>(); - dsm.put(dsId, eoscList); + dsm.put(ds, eoscList); } } diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/QueryInformationSystem.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/QueryInformationSystem.java deleted file mode 100644 index 5fe3cf81f..000000000 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/community/QueryInformationSystem.java +++ /dev/null @@ -1,34 +0,0 @@ - -package eu.dnetlib.dhp.bulktag.community; - -import java.io.IOException; -import java.util.List; - -import org.apache.commons.io.IOUtils; -import org.dom4j.DocumentException; -import org.xml.sax.SAXException; - -import com.google.common.base.Joiner; - -import eu.dnetlib.dhp.utils.ISLookupClientFactory; -import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpException; -import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpService; - -public class QueryInformationSystem { - - public static CommunityConfiguration getCommunityConfiguration(final String isLookupUrl) - throws ISLookUpException, DocumentException, SAXException, IOException { - ISLookUpService isLookUp = ISLookupClientFactory.getLookUpService(isLookupUrl); - final List res = isLookUp - .quickSearchProfile( - IOUtils - .toString( - QueryInformationSystem.class - .getResourceAsStream( - "/eu/dnetlib/dhp/bulktag/query.xq"))); - - final String xmlConf = "" + Joiner.on(" ").join(res) + ""; - - return CommunityConfigurationFactory.newInstance(xmlConf); - } -} diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromorganization/SparkResultToCommunityFromOrganizationJob.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromorganization/SparkResultToCommunityFromOrganizationJob.java index 43f425b68..fe79f1be1 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromorganization/SparkResultToCommunityFromOrganizationJob.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromorganization/SparkResultToCommunityFromOrganizationJob.java @@ -2,7 +2,7 @@ package eu.dnetlib.dhp.resulttocommunityfromorganization; import static eu.dnetlib.dhp.PropagationConstant.*; -import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkHiveSession; +import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkSession; import java.util.ArrayList; import java.util.Arrays; @@ -22,6 +22,7 @@ import org.slf4j.LoggerFactory; import eu.dnetlib.dhp.application.ArgumentApplicationParser; import eu.dnetlib.dhp.schema.common.ModelConstants; +import eu.dnetlib.dhp.schema.common.ModelSupport; import eu.dnetlib.dhp.schema.oaf.Context; import eu.dnetlib.dhp.schema.oaf.Result; import scala.Tuple2; @@ -53,22 +54,15 @@ public class SparkResultToCommunityFromOrganizationJob { final String possibleupdatespath = parser.get("preparedInfoPath"); log.info("preparedInfoPath: {}", possibleupdatespath); - final String resultClassName = parser.get("resultTableName"); - log.info("resultTableName: {}", resultClassName); - - @SuppressWarnings("unchecked") - Class resultClazz = (Class) Class.forName(resultClassName); - SparkConf conf = new SparkConf(); - conf.set("hive.metastore.uris", parser.get("hive_metastore_uris")); - runWithSparkHiveSession( + runWithSparkSession( conf, isSparkSessionManaged, spark -> { - removeOutputDir(spark, outputPath); + // removeOutputDir(spark, outputPath); - execPropagation(spark, inputPath, outputPath, resultClazz, possibleupdatespath); + execPropagation(spark, inputPath, outputPath, possibleupdatespath); }); } @@ -77,22 +71,32 @@ public class SparkResultToCommunityFromOrganizationJob { SparkSession spark, String inputPath, String outputPath, - Class resultClazz, String possibleUpdatesPath) { Dataset possibleUpdates = readPath(spark, possibleUpdatesPath, ResultCommunityList.class); - Dataset result = readPath(spark, inputPath, resultClazz); - result - .joinWith( - possibleUpdates, - result.col("id").equalTo(possibleUpdates.col("resultId")), - "left_outer") - .map(resultCommunityFn(), Encoders.bean(resultClazz)) - .write() - .mode(SaveMode.Overwrite) - .option("compression", "gzip") - .json(outputPath); + ModelSupport.entityTypes + .keySet() + .parallelStream() + .forEach(e -> { + if (ModelSupport.isResult(e)) { + Class resultClazz = ModelSupport.entityTypes.get(e); + removeOutputDir(spark, outputPath + e.name()); + Dataset result = readPath(spark, inputPath + e.name(), resultClazz); + + result + .joinWith( + possibleUpdates, + result.col("id").equalTo(possibleUpdates.col("resultId")), + "left_outer") + .map(resultCommunityFn(), Encoders.bean(resultClazz)) + .write() + .mode(SaveMode.Overwrite) + .option("compression", "gzip") + .json(outputPath + e.name()); + } + }); + } private static MapFunction, R> resultCommunityFn() { diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/PrepareResultCommunitySet.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/PrepareResultCommunitySet.java index b0fbf8056..883f5ca86 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/PrepareResultCommunitySet.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/PrepareResultCommunitySet.java @@ -3,6 +3,7 @@ package eu.dnetlib.dhp.resulttocommunityfromproject; import static eu.dnetlib.dhp.PropagationConstant.*; import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkHiveSession; +import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkSession; import java.util.*; @@ -51,16 +52,15 @@ public class PrepareResultCommunitySet { final String outputPath = parser.get("outputPath"); log.info("outputPath: {}", outputPath); - final boolean production = Boolean.valueOf(parser.get("outputPath")); + final boolean production = Boolean.valueOf(parser.get("production")); log.info("production: {}", production); final CommunityEntityMap projectsMap = Utils.getCommunityProjects(production); log.info("projectsMap: {}", new Gson().toJson(projectsMap)); SparkConf conf = new SparkConf(); - conf.set("hive.metastore.uris", parser.get("hive_metastore_uris")); - runWithSparkHiveSession( + runWithSparkSession( conf, isSparkSessionManaged, spark -> { @@ -94,24 +94,27 @@ public class PrepareResultCommunitySet { .select( new Column("source").as("resultId"), new Column("target").as("projectId")) - .groupByKey((MapFunction) r -> (String) r.getAs("source"), Encoders.STRING()) + .groupByKey((MapFunction) r -> (String) r.getAs("resultId"), Encoders.STRING()) .mapGroups((MapGroupsFunction) (k, v) -> { ResultProjectList rpl = new ResultProjectList(); rpl.setResultId(k); ArrayList cl = new ArrayList<>(); - cl.addAll(projectMap.get(v.next().getAs("target"))); + cl.addAll(projectMap.get(v.next().getAs("projectId"))); v.forEachRemaining(r -> { projectMap - .get(r.getAs("target")) + .get(r.getAs("projectId")) .forEach(c -> { if (!cl.contains(c)) cl.add(c); }); }); + if(cl.size() == 0) + return null; rpl.setCommunityList(cl); return rpl; }, Encoders.bean(ResultProjectList.class)) + .filter(Objects::nonNull) .write() .mode(SaveMode.Overwrite) .option("compression", "gzip") diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/SparkResultToCommunityFromProject.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/SparkResultToCommunityFromProject.java index 6d4779ea1..daef6a317 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/SparkResultToCommunityFromProject.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/SparkResultToCommunityFromProject.java @@ -4,6 +4,7 @@ package eu.dnetlib.dhp.resulttocommunityfromproject; import static eu.dnetlib.dhp.PropagationConstant.*; import static eu.dnetlib.dhp.PropagationConstant.PROPAGATION_RESULT_COMMUNITY_ORGANIZATION_CLASS_NAME; import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkHiveSession; +import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkSession; import java.io.Serializable; import java.util.ArrayList; @@ -61,20 +62,14 @@ public class SparkResultToCommunityFromProject implements Serializable { final String possibleupdatespath = parser.get("preparedInfoPath"); log.info("preparedInfoPath: {}", possibleupdatespath); - final String resultClassName = parser.get("resultTableName"); - log.info("resultTableName: {}", resultClassName); - - @SuppressWarnings("unchecked") - Class resultClazz = (Class) Class.forName(resultClassName); SparkConf conf = new SparkConf(); - conf.set("hive.metastore.uris", parser.get("hive_metastore_uris")); - runWithSparkHiveSession( + + runWithSparkSession( conf, isSparkSessionManaged, spark -> { -// removeOutputDir(spark, outputPath); execPropagation(spark, inputPath, outputPath, possibleupdatespath); @@ -108,7 +103,7 @@ public class SparkResultToCommunityFromProject implements Serializable { .write() .mode(SaveMode.Overwrite) .option("compression", "gzip") - .json(outputPath); + .json(outputPath + e.name()); } }); diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/input_communitytoresult_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/input_communitytoresult_parameters.json index b6eb309a5..0db8085d1 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/input_communitytoresult_parameters.json +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/input_communitytoresult_parameters.json @@ -5,12 +5,7 @@ "paramDescription": "the path of the sequencial file to read", "paramRequired": true }, - { - "paramName":"h", - "paramLongName":"hive_metastore_uris", - "paramDescription": "the hive metastore uris", - "paramRequired": true - }, + { "paramName": "out", "paramLongName": "outputPath", @@ -23,12 +18,6 @@ "paramDescription": "true if the spark session is managed, false otherwise", "paramRequired": false }, - { - "paramName":"tn", - "paramLongName":"resultTableName", - "paramDescription": "the name of the result table we are currently working on", - "paramRequired": true - }, { "paramName": "p", "paramLongName": "preparedInfoPath", diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/input_preparecommunitytoresult_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/input_preparecommunitytoresult_parameters.json index 8df509abf..8b6291e5d 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/input_preparecommunitytoresult_parameters.json +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/input_preparecommunitytoresult_parameters.json @@ -5,12 +5,6 @@ "paramDescription": "the path of the sequencial file to read", "paramRequired": true }, - { - "paramName":"ocm", - "paramLongName":"organizationtoresultcommunitymap", - "paramDescription": "the map for the association organization communities", - "paramRequired": true - }, { "paramName":"h", "paramLongName":"hive_metastore_uris", @@ -28,6 +22,12 @@ "paramLongName": "outputPath", "paramDescription": "the path used to store temporary output files", "paramRequired": true + }, + { + "paramName": "p", + "paramLongName": "production", + "paramDescription": "the path used to store temporary output files", + "paramRequired": true } ] \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/oozie_app/workflow.xml index b25822ad0..55490e25c 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/oozie_app/workflow.xml @@ -22,7 +22,7 @@ - + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] @@ -90,8 +90,8 @@ eu.dnetlib.dhp.resulttocommunityfromorganization.PrepareResultCommunitySet dhp-enrichment-${projectVersion}.jar - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} + --executor-cores=4 + --executor-memory=10G --driver-memory=${sparkDriverMemory} --conf spark.extraListeners=${spark2ExtraListeners} --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} @@ -103,20 +103,13 @@ --sourcePath${sourcePath}/relation --outputPath${workingDir}/preparedInfo/resultCommunityList --hive_metastore_uris${hive_metastore_uris} - + --production${production} - + - - - - - - - - + yarn cluster @@ -135,104 +128,14 @@ --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} --preparedInfoPath${workingDir}/preparedInfo/resultCommunityList - --sourcePath${sourcePath}/publication - --outputPath${outputPath}/publication - --hive_metastore_uris${hive_metastore_uris} - --resultTableNameeu.dnetlib.dhp.schema.oaf.Publication - --saveGraph${saveGraph} + --sourcePath${sourcePath}/ + --outputPath${outputPath}/ - + - - - yarn - cluster - community2resultfromorganization-Dataset - eu.dnetlib.dhp.resulttocommunityfromorganization.SparkResultToCommunityFromOrganizationJob - dhp-enrichment-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.dynamicAllocation.enabled=true - --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} - - --preparedInfoPath${workingDir}/preparedInfo/resultCommunityList - --sourcePath${sourcePath}/dataset - --outputPath${outputPath}/dataset - --hive_metastore_uris${hive_metastore_uris} - --resultTableNameeu.dnetlib.dhp.schema.oaf.Dataset - --saveGraph${saveGraph} - - - - - - - yarn - cluster - community2resultfromorganization-ORP - eu.dnetlib.dhp.resulttocommunityfromorganization.SparkResultToCommunityFromOrganizationJob - dhp-enrichment-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.dynamicAllocation.enabled=true - --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} - - --preparedInfoPath${workingDir}/preparedInfo/resultCommunityList - --sourcePath${sourcePath}/otherresearchproduct - --outputPath${outputPath}/otherresearchproduct - --hive_metastore_uris${hive_metastore_uris} - --resultTableNameeu.dnetlib.dhp.schema.oaf.OtherResearchProduct - --saveGraph${saveGraph} - - - - - - - - yarn - cluster - community2resultfromorganization-Software - eu.dnetlib.dhp.resulttocommunityfromorganization.SparkResultToCommunityFromOrganizationJob - dhp-enrichment-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.dynamicAllocation.enabled=true - --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} - - --preparedInfoPath${workingDir}/preparedInfo/resultCommunityList - --sourcePath${sourcePath}/software - --outputPath${outputPath}/software - --hive_metastore_uris${hive_metastore_uris} - --resultTableNameeu.dnetlib.dhp.schema.oaf.Software - --saveGraph${saveGraph} - - - - - - diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromproject/input_communitytoresult_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromproject/input_communitytoresult_parameters.json new file mode 100644 index 000000000..0db8085d1 --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromproject/input_communitytoresult_parameters.json @@ -0,0 +1,28 @@ +[ + { + "paramName":"s", + "paramLongName":"sourcePath", + "paramDescription": "the path of the sequencial file to read", + "paramRequired": true + }, + + { + "paramName": "out", + "paramLongName": "outputPath", + "paramDescription": "the path used to store temporary output files", + "paramRequired": true + }, + { + "paramName": "ssm", + "paramLongName": "isSparkSessionManaged", + "paramDescription": "true if the spark session is managed, false otherwise", + "paramRequired": false + }, + { + "paramName": "p", + "paramLongName": "preparedInfoPath", + "paramDescription": "the path where prepared info have been stored", + "paramRequired": true + } + +] \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromproject/input_preparecommunitytoresult_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromproject/input_preparecommunitytoresult_parameters.json new file mode 100644 index 000000000..8b6291e5d --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromproject/input_preparecommunitytoresult_parameters.json @@ -0,0 +1,33 @@ +[ + { + "paramName":"s", + "paramLongName":"sourcePath", + "paramDescription": "the path of the sequencial file to read", + "paramRequired": true + }, + { + "paramName":"h", + "paramLongName":"hive_metastore_uris", + "paramDescription": "the hive metastore uris", + "paramRequired": true + }, + { + "paramName": "ssm", + "paramLongName": "isSparkSessionManaged", + "paramDescription": "true if the spark session is managed, false otherwise", + "paramRequired": false + }, + { + "paramName": "out", + "paramLongName": "outputPath", + "paramDescription": "the path used to store temporary output files", + "paramRequired": true + }, + { + "paramName": "p", + "paramLongName": "production", + "paramDescription": "the path used to store temporary output files", + "paramRequired": true + } + +] \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/QueryCommunityAPITest.java b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/api/QueryCommunityAPITest.java similarity index 90% rename from dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/QueryCommunityAPITest.java rename to dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/api/QueryCommunityAPITest.java index a0083dab8..6ee01a6f0 100644 --- a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/QueryCommunityAPITest.java +++ b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/api/QueryCommunityAPITest.java @@ -1,5 +1,5 @@ -package eu.dnetlib.dhp.bulktag; +package eu.dnetlib.dhp.api; import java.util.List; @@ -98,14 +98,22 @@ public class QueryCommunityAPITest { @Test void getCommunityProjects() throws Exception { CommunityEntityMap projectMap = Utils.getCommunityProjects(true); - Assertions.assertFalse(projectMap.containsKey("mes")); - Assertions.assertEquals(33, projectMap.size()); + Assertions .assertTrue( projectMap .keySet() .stream() - .allMatch(k -> projectMap.get(k).stream().allMatch(p -> p.startsWith("40|")))); + .allMatch(k -> k.startsWith("40|"))); + + System.out.println(projectMap); + } + + @Test + void getCommunityOrganizations() throws Exception { + CommunityEntityMap organizationMap = Utils.getCommunityOrganization(true); + Assertions.assertTrue(organizationMap.keySet().stream().allMatch(k -> k.startsWith("20|"))); + } } diff --git a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/resulttocommunityfromorganization/PrepareAssocTest.java b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/resulttocommunityfromorganization/PrepareAssocTest.java new file mode 100644 index 000000000..6536ecc85 --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/resulttocommunityfromorganization/PrepareAssocTest.java @@ -0,0 +1,95 @@ + +package eu.dnetlib.dhp.resulttocommunityfromorganization; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; + +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.IOUtils; +import org.apache.spark.SparkConf; +import org.apache.spark.api.java.JavaRDD; +import org.apache.spark.api.java.JavaSparkContext; +import org.apache.spark.sql.Encoders; +import org.apache.spark.sql.SparkSession; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.gson.Gson; + +import eu.dnetlib.dhp.api.Utils; +import eu.dnetlib.dhp.api.model.CommunityEntityMap; +import eu.dnetlib.dhp.bulktag.BulkTagJobTest; +import eu.dnetlib.dhp.bulktag.SparkBulkTagJob; +import eu.dnetlib.dhp.schema.oaf.Dataset; + +/** + * @author miriam.baglioni + * @Date 13/10/23 + */ +public class PrepareAssocTest { + + private static SparkSession spark; + + private static Path workingDir; + + private static final Logger log = LoggerFactory.getLogger(PrepareAssocTest.class); + + @BeforeAll + public static void beforeAll() throws IOException { + workingDir = Files.createTempDirectory(BulkTagJobTest.class.getSimpleName()); + log.info("using work dir {}", workingDir); + + SparkConf conf = new SparkConf(); + conf.setAppName(BulkTagJobTest.class.getSimpleName()); + + conf.setMaster("local[*]"); + conf.set("spark.driver.host", "localhost"); + conf.set("hive.metastore.local", "true"); + conf.set("spark.ui.enabled", "false"); + conf.set("spark.sql.warehouse.dir", workingDir.toString()); + conf.set("hive.metastore.warehouse.dir", workingDir.resolve("warehouse").toString()); + + spark = SparkSession + .builder() + .appName(PrepareAssocTest.class.getSimpleName()) + .config(conf) + .getOrCreate(); + } + + @AfterAll + public static void afterAll() throws IOException { + FileUtils.deleteDirectory(workingDir.toFile()); + spark.stop(); + } + + @Test + void test1() throws Exception { + + PrepareResultCommunitySet + .main( + new String[] { + + "-isSparkSessionManaged", Boolean.FALSE.toString(), + "-sourcePath", + getClass().getResource("/eu/dnetlib/dhp/resulttocommunityfromorganization/relation/").getPath(), + "-outputPath", workingDir.toString() + "/prepared", + "-production", Boolean.TRUE.toString(), + "-hive_metastore_uris", "" + }); + + final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); + + JavaRDD tmp = sc + .textFile(workingDir.toString() + "/prepared") + .map(item -> new ObjectMapper().readValue(item, ResultCommunityList.class)); + + tmp.foreach(r -> System.out.println(new ObjectMapper().writeValueAsString(r))); + } + +} diff --git a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/resulttocommunityfromproject/PrepareAssocTest.java b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/resulttocommunityfromproject/PrepareAssocTest.java new file mode 100644 index 000000000..0e10b3edf --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/resulttocommunityfromproject/PrepareAssocTest.java @@ -0,0 +1,88 @@ + +package eu.dnetlib.dhp.resulttocommunityfromproject; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; + +import org.apache.commons.io.FileUtils; +import org.apache.spark.SparkConf; +import org.apache.spark.api.java.JavaRDD; +import org.apache.spark.api.java.JavaSparkContext; +import org.apache.spark.sql.SparkSession; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.fasterxml.jackson.databind.ObjectMapper; + +import eu.dnetlib.dhp.bulktag.BulkTagJobTest; +import eu.dnetlib.dhp.resulttocommunityfromorganization.ResultCommunityList; + +/** + * @author miriam.baglioni + * @Date 13/10/23 + */ +public class PrepareAssocTest { + + private static SparkSession spark; + + private static Path workingDir; + + private static final Logger log = LoggerFactory.getLogger(PrepareAssocTest.class); + + @BeforeAll + public static void beforeAll() throws IOException { + workingDir = Files.createTempDirectory(BulkTagJobTest.class.getSimpleName()); + log.info("using work dir {}", workingDir); + + SparkConf conf = new SparkConf(); + conf.setAppName(BulkTagJobTest.class.getSimpleName()); + + conf.setMaster("local[*]"); + conf.set("spark.driver.host", "localhost"); + conf.set("hive.metastore.local", "true"); + conf.set("spark.ui.enabled", "false"); + conf.set("spark.sql.warehouse.dir", workingDir.toString()); + conf.set("hive.metastore.warehouse.dir", workingDir.resolve("warehouse").toString()); + + spark = SparkSession + .builder() + .appName(PrepareAssocTest.class.getSimpleName()) + .config(conf) + .getOrCreate(); + } + + @AfterAll + public static void afterAll() throws IOException { + FileUtils.deleteDirectory(workingDir.toFile()); + spark.stop(); + } + + @Test + void test1() throws Exception { + + PrepareResultCommunitySet + .main( + new String[] { + + "-isSparkSessionManaged", Boolean.FALSE.toString(), + "-sourcePath", + getClass().getResource("/eu/dnetlib/dhp/resulttocommunityfromproject/relation/").getPath(), + "-outputPath", workingDir.toString() + "/prepared", + "-production", Boolean.TRUE.toString(), + "-hive_metastore_uris", "" + }); + + final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); + + JavaRDD tmp = sc + .textFile(workingDir.toString() + "/prepared") + .map(item -> new ObjectMapper().readValue(item, ResultProjectList.class)); + + tmp.foreach(r -> System.out.println(new ObjectMapper().writeValueAsString(r))); + } + +} diff --git a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/resulttocommunityfromproject/ResultToCommunityJobTest.java b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/resulttocommunityfromproject/ResultToCommunityJobTest.java new file mode 100644 index 000000000..6a5726cbe --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/resulttocommunityfromproject/ResultToCommunityJobTest.java @@ -0,0 +1,323 @@ + +package eu.dnetlib.dhp.resulttocommunityfromproject; + +import static org.apache.spark.sql.functions.desc; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; + +import org.apache.commons.io.FileUtils; +import org.apache.spark.SparkConf; +import org.apache.spark.api.java.JavaRDD; +import org.apache.spark.api.java.JavaSparkContext; +import org.apache.spark.sql.Encoders; +import org.apache.spark.sql.Row; +import org.apache.spark.sql.SparkSession; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.fasterxml.jackson.databind.ObjectMapper; + +import eu.dnetlib.dhp.orcidtoresultfromsemrel.OrcidPropagationJobTest; +import eu.dnetlib.dhp.resulttocommunityfromorganization.SparkResultToCommunityFromOrganizationJob; +import eu.dnetlib.dhp.schema.oaf.Dataset; + +public class ResultToCommunityJobTest { + + private static final Logger log = LoggerFactory.getLogger(ResultToCommunityJobTest.class); + + private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); + + private static SparkSession spark; + + private static Path workingDir; + + @BeforeAll + public static void beforeAll() throws IOException { + workingDir = Files.createTempDirectory(ResultToCommunityJobTest.class.getSimpleName()); + log.info("using work dir {}", workingDir); + + SparkConf conf = new SparkConf(); + conf.setAppName(ResultToCommunityJobTest.class.getSimpleName()); + + conf.setMaster("local[*]"); + conf.set("spark.driver.host", "localhost"); + conf.set("hive.metastore.local", "true"); + conf.set("spark.ui.enabled", "false"); + conf.set("spark.sql.warehouse.dir", workingDir.toString()); + conf.set("hive.metastore.warehouse.dir", workingDir.resolve("warehouse").toString()); + + spark = SparkSession + .builder() + .appName(OrcidPropagationJobTest.class.getSimpleName()) + .config(conf) + .getOrCreate(); + } + + @AfterAll + public static void afterAll() throws IOException { + FileUtils.deleteDirectory(workingDir.toFile()); + spark.stop(); + } + + @Test + void testSparkResultToCommunityFromProjectJob() throws Exception { + final String preparedInfoPath = getClass() + .getResource("/eu/dnetlib/dhp/resulttocommunityfromproject/preparedInfo") + .getPath(); + SparkResultToCommunityFromProject + .main( + new String[] { + + "-isSparkSessionManaged", Boolean.FALSE.toString(), + "-sourcePath", getClass() + .getResource("/eu/dnetlib/dhp/resulttocommunityfromproject/sample/") + .getPath(), + + "-outputPath", workingDir.toString() + "/", + "-preparedInfoPath", preparedInfoPath + }); + + final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); + + JavaRDD tmp = sc + .textFile(workingDir.toString() + "/dataset") + .map(item -> OBJECT_MAPPER.readValue(item, Dataset.class)); + + tmp.foreach(d -> System.out.println(new ObjectMapper().writeValueAsString(d))); +// Assertions.assertEquals(10, tmp.count()); +// org.apache.spark.sql.Dataset verificationDataset = spark +// .createDataset(tmp.rdd(), Encoders.bean(Dataset.class)); +// +// verificationDataset.createOrReplaceTempView("dataset"); +// +// String query = "select id, MyT.id community " +// + "from dataset " +// + "lateral view explode(context) c as MyT " +// + "lateral view explode(MyT.datainfo) d as MyD " +// + "where MyD.inferenceprovenance = 'propagation'"; +// +// org.apache.spark.sql.Dataset resultExplodedProvenance = spark.sql(query); +// Assertions.assertEquals(5, resultExplodedProvenance.count()); +// Assertions +// .assertEquals( +// 0, +// resultExplodedProvenance +// .filter("id = '50|dedup_wf_001::afaf128022d29872c4dad402b2db04fe'") +// .count()); +// Assertions +// .assertEquals( +// 1, +// resultExplodedProvenance +// .filter("id = '50|dedup_wf_001::3f62cfc27024d564ea86760c494ba93b'") +// .count()); +// Assertions +// .assertEquals( +// "beopen", +// resultExplodedProvenance +// .select("community") +// .where( +// resultExplodedProvenance +// .col("id") +// .equalTo( +// "50|dedup_wf_001::3f62cfc27024d564ea86760c494ba93b")) +// .collectAsList() +// .get(0) +// .getString(0)); +// +// Assertions +// .assertEquals( +// 2, +// resultExplodedProvenance +// .filter("id = '50|od________18::8887b1df8b563c4ea851eb9c882c9d7b'") +// .count()); +// Assertions +// .assertEquals( +// "mes", +// resultExplodedProvenance +// .select("community") +// .where( +// resultExplodedProvenance +// .col("id") +// .equalTo( +// "50|od________18::8887b1df8b563c4ea851eb9c882c9d7b")) +// .sort(desc("community")) +// .collectAsList() +// .get(0) +// .getString(0)); +// Assertions +// .assertEquals( +// "euromarine", +// resultExplodedProvenance +// .select("community") +// .where( +// resultExplodedProvenance +// .col("id") +// .equalTo( +// "50|od________18::8887b1df8b563c4ea851eb9c882c9d7b")) +// .sort(desc("community")) +// .collectAsList() +// .get(1) +// .getString(0)); +// +// Assertions +// .assertEquals( +// 1, +// resultExplodedProvenance +// .filter("id = '50|doajarticles::8d817039a63710fcf97e30f14662c6c8'") +// .count()); +// Assertions +// .assertEquals( +// "mes", +// resultExplodedProvenance +// .select("community") +// .where( +// resultExplodedProvenance +// .col("id") +// .equalTo( +// "50|doajarticles::8d817039a63710fcf97e30f14662c6c8")) +// .sort(desc("community")) +// .collectAsList() +// .get(0) +// .getString(0)); +// +// Assertions +// .assertEquals( +// 1, +// resultExplodedProvenance +// .filter("id = '50|doajarticles::3c98f0632f1875b4979e552ba3aa01e6'") +// .count()); +// Assertions +// .assertEquals( +// "mes", +// resultExplodedProvenance +// .select("community") +// .where( +// resultExplodedProvenance +// .col("id") +// .equalTo( +// "50|doajarticles::3c98f0632f1875b4979e552ba3aa01e6")) +// .sort(desc("community")) +// .collectAsList() +// .get(0) +// .getString(0)); +// +// query = "select id, MyT.id community " +// + "from dataset " +// + "lateral view explode(context) c as MyT " +// + "lateral view explode(MyT.datainfo) d as MyD "; +// +// org.apache.spark.sql.Dataset resultCommunityId = spark.sql(query); +// +// Assertions.assertEquals(10, resultCommunityId.count()); +// +// Assertions +// .assertEquals( +// 1, +// resultCommunityId +// .filter("id = '50|dedup_wf_001::afaf128022d29872c4dad402b2db04fe'") +// .count()); +// Assertions +// .assertEquals( +// "beopen", +// resultCommunityId +// .select("community") +// .where( +// resultCommunityId +// .col("id") +// .equalTo( +// "50|dedup_wf_001::afaf128022d29872c4dad402b2db04fe")) +// .collectAsList() +// .get(0) +// .getString(0)); +// +// Assertions +// .assertEquals( +// 1, +// resultCommunityId +// .filter("id = '50|dedup_wf_001::3f62cfc27024d564ea86760c494ba93b'") +// .count()); +// +// Assertions +// .assertEquals( +// 3, +// resultCommunityId +// .filter("id = '50|od________18::8887b1df8b563c4ea851eb9c882c9d7b'") +// .count()); +// Assertions +// .assertEquals( +// "beopen", +// resultCommunityId +// .select("community") +// .where( +// resultCommunityId +// .col("id") +// .equalTo( +// "50|od________18::8887b1df8b563c4ea851eb9c882c9d7b")) +// .sort(desc("community")) +// .collectAsList() +// .get(2) +// .getString(0)); +// +// Assertions +// .assertEquals( +// 2, +// resultCommunityId +// .filter("id = '50|doajarticles::8d817039a63710fcf97e30f14662c6c8'") +// .count()); +// Assertions +// .assertEquals( +// "euromarine", +// resultCommunityId +// .select("community") +// .where( +// resultCommunityId +// .col("id") +// .equalTo( +// "50|doajarticles::8d817039a63710fcf97e30f14662c6c8")) +// .sort(desc("community")) +// .collectAsList() +// .get(1) +// .getString(0)); +// +// Assertions +// .assertEquals( +// 3, +// resultCommunityId +// .filter("id = '50|doajarticles::3c98f0632f1875b4979e552ba3aa01e6'") +// .count()); +// Assertions +// .assertEquals( +// "euromarine", +// resultCommunityId +// .select("community") +// .where( +// resultCommunityId +// .col("id") +// .equalTo( +// "50|doajarticles::3c98f0632f1875b4979e552ba3aa01e6")) +// .sort(desc("community")) +// .collectAsList() +// .get(2) +// .getString(0)); +// Assertions +// .assertEquals( +// "ni", +// resultCommunityId +// .select("community") +// .where( +// resultCommunityId +// .col("id") +// .equalTo( +// "50|doajarticles::3c98f0632f1875b4979e552ba3aa01e6")) +// .sort(desc("community")) +// .collectAsList() +// .get(0) +// .getString(0)); + } +} diff --git a/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/preparedInfo/resultCommunityList.json b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/preparedInfo/resultCommunityList.json new file mode 100644 index 000000000..bd4674c4f --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/preparedInfo/resultCommunityList.json @@ -0,0 +1,36 @@ +{"communityList":["beopen"],"resultId":"50|dedup_wf_001::afaf128022d29872c4dad402b2db04fe"} +{"communityList":["beopen"],"resultId":"50|dedup_wf_001::3f62cfc27024d564ea86760c494ba93b"} +{"communityList":["euromarine","mes"],"resultId":"50|od________18::8887b1df8b563c4ea851eb9c882c9d7b"} +{"communityList":["euromarine","mes"],"resultId":"50|doajarticles::8d817039a63710fcf97e30f14662c6c8"} +{"communityList":["euromarine","mes"],"resultId":"50|doajarticles::3c98f0632f1875b4979e552ba3aa01e6"} +{"communityList":["euromarine","mes"],"resultId":"50|doajarticles::53b70ea6e0769d02ddf93307ec8e3e92"} +{"communityList":["euromarine","mes"],"resultId":"50|dedup_wf_001::ef1ac6efc10f420fa9e190e49644f1f2"} +{"communityList":["euromarine","mes"],"resultId":"50|dedup_wf_001::b738aa93950dddfb0294df2e8fdf0579"} +{"communityList":["euromarine","mes"],"resultId":"50|doajarticles::befccb1f9e6b833fd82e587737ae9e7d"} +{"communityList":["euromarine","mes"],"resultId":"50|doajarticles::bf1cba621615e27db1692865a5f35a0b"} +{"communityList":["euromarine","mes"],"resultId":"50|dedup_wf_001::e105de571b336daae05f0e75cf740c5c"} +{"communityList":["euromarine","mes"],"resultId":"50|dedup_wf_001::1fe4f347c9df657b7ba520987d79436e"} +{"communityList":["euromarine","mes"],"resultId":"50|doajarticles::6d7c00a8c8e59f0215459e2e4ee3fd6c"} +{"communityList":["euromarine","mes"],"resultId":"50|dedup_wf_001::39ec88ef4127db0ea1b88938f1c52889"} +{"communityList":["euromarine","mes"],"resultId":"50|dedup_wf_001::3496709db804d98f76c45d7ed023dd95"} +{"communityList":["euromarine","mes"],"resultId":"50|doajarticles::dc97fffbdb6d35f792fc0ab428ff065c"} +{"communityList":["euromarine","mes"],"resultId":"50|dedup_wf_001::b61d082d96619d9b7a876e6dce44cf65"} +{"communityList":["euromarine","mes"],"resultId":"50|dedup_wf_001::32a96881c3036cf2d2165bb2d276ea82"} +{"communityList":["euromarine","mes"],"resultId":"50|dedup_wf_001::76e9e6a959ba588483c74ec580369864"} +{"communityList":["euromarine","mes"],"resultId":"50|dedup_wf_001::1487a0a92572376d95d6cc3f066504b7"} +{"communityList":["euromarine","mes"],"resultId":"50|dedup_wf_001::413a0a0656f888cce9c15f6be6df60e3"} +{"communityList":["euromarine","mes"],"resultId":"50|dedup_wf_001::25c3e91960cbd7a8f95a2e511cbffddd"} +{"communityList":["euromarine","mes"],"resultId":"50|dedup_wf_001::4d523b52094a689856e479bb99063c7a"} +{"communityList":["euromarine","mes"],"resultId":"50|od______2663::393c7262bb71642b7bb4c67cfeab02c5"} +{"communityList":["euromarine","mes"],"resultId":"50|dedup_wf_001::0b3333d875b91ffa4db0735efec94e7a"} +{"communityList":["euromarine","mes"],"resultId":"50|dedup_wf_001::0699c30043edfae40786d80acd20d300"} +{"communityList":["euromarine","mes"],"resultId":"50|doajarticles::7f29ade677e66ffbf1312fa837bc73ca"} +{"communityList":["euromarine","mes"],"resultId":"50|doajarticles::7ba6627ac7590d367cc01bbac4d518e8"} +{"communityList":["euromarine","mes"],"resultId":"50|dedup_wf_001::8ad9bc047433401947dc0cdb4a989cee"} +{"communityList":["euromarine","mes"],"resultId":"50|dedup_wf_001::cce70f27d85df658479d0ec0046a4eb3"} +{"communityList":["euromarine","mes"],"resultId":"50|dedup_wf_001::74304be834b7013dbaeb73c3a19a654b"} +{"communityList":["euromarine","mes"],"resultId":"50|dedup_wf_001::46fc13a87befb6a83ac9c63580528ab0"} +{"communityList":["euromarine","mes"],"resultId":"50|doajarticles::66f1867488b62d9c9fb734273775e203"} +{"communityList":["euromarine","mes"],"resultId":"50|dedup_wf_001::79236995d5c30e5234a47cee4a728cae"} +{"communityList":["euromarine","mes"],"resultId":"50|od______2386::cb7f6cb01d1a835612731d645842f699"} +{"communityList":["euromarine","mes"],"resultId":"50|dedup_wf_001::d424daa43f97a434eb0a12289410cade"} \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/preparedInfo/resultCommunityList.json.gz b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/preparedInfo/resultCommunityList.json.gz deleted file mode 100644 index 8b452d0e17e06baf8f3ac6d62277c2a08d88a13c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 939 zcmV;c162GUiwFqE4x3&819D|^b!>D)Z*6ULZfSIROlfm;E^2dcZUC)UNs44g4Bh(} zx$cD`LZP8@l!t}WKNm@oi~mx3dP9D_`Sa7$m-mmK zfBoU{)92g6kGGT0AM*X}r#H8c`RU8M&)>)G;kMzo$oTT%?JxBfU_3lnS&b<$XG|5I zj$wf?&x`|DdHeR=*L$D6il&!OhKaEW(}bA7QSq3r^Uu%DFCU+u?BnD6yuG~3&%s|TnnNK`39&|9gmQR^^)cy&=s6Bd#i*H5QLtIB+1TkZ{EX71BWqR2%q`4|Ej2kV zLaE`$Xbu`XC&wA2Q)t_+wGHmSqYzhtV#169)z=f?4T2SrFGW$MVAci z#cRb&=If|3Y@6Y=v(gpw{#pKlLaMD5z?D&!2rLu=<}o4q`)eGAYpO*Oa}u@F)L3Jd z$>QU@{Qg;9qjXTxWOLryKfW1p80T2`*F7Zf?_;kvCf4TVfQ)M)3`GtHkAtS7p7*EN zE0oqDLv^;uehEwIGY-fOHYCG57pbymXd_8k?Iti*9Lp|GzHD@<-FQ*EK Date: Mon, 16 Oct 2023 11:46:12 +0200 Subject: [PATCH 330/449] new spark parrameter updated --- .../oozie_app/workflow.xml | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/oozie_app/workflow.xml index 55490e25c..7a5fd7434 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/oozie_app/workflow.xml @@ -90,14 +90,16 @@ eu.dnetlib.dhp.resulttocommunityfromorganization.PrepareResultCommunitySet dhp-enrichment-${projectVersion}.jar - --executor-cores=4 - --executor-memory=10G + --executor-cores=6 + --executor-memory=5G + --spark.executor.memoryOverhead=3g + --conf spark.sql.shuffle.partitions=3284 --driver-memory=${sparkDriverMemory} --conf spark.extraListeners=${spark2ExtraListeners} --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.dynamicAllocation.enabled=true + --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} --sourcePath${sourcePath}/relation @@ -117,14 +119,15 @@ eu.dnetlib.dhp.resulttocommunityfromorganization.SparkResultToCommunityFromOrganizationJob dhp-enrichment-${projectVersion}.jar - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} + --executor-cores=6 + --executor-memory=5G + --spark.executor.memoryOverhead=3g + --conf spark.sql.shuffle.partitions=3284 --driver-memory=${sparkDriverMemory} --conf spark.extraListeners=${spark2ExtraListeners} --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.dynamicAllocation.enabled=true --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} --preparedInfoPath${workingDir}/preparedInfo/resultCommunityList From 6dfcd0c9a2072c589709a97769185a966def58b4 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Mon, 16 Oct 2023 12:57:18 +0200 Subject: [PATCH 331/449] [raw graph] mapping original resource types --- .../raw/AbstractMdRecordToOafMapper.java | 63 ++++--- .../dhp/oa/graph/raw/OafToOafMapper.java | 41 +++-- .../dhp/oa/graph/raw/OdfToOafMapper.java | 22 ++- .../oa/graph/raw/OriginalTypeComparator.java | 43 ++--- .../dnetlib/dhp/oa/graph/raw/MappersTest.java | 168 ++++++++++++++++-- .../dnetlib/dhp/oa/graph/raw/oaf_crossref.xml | 68 +++++++ 6 files changed, 308 insertions(+), 97 deletions(-) create mode 100644 dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/raw/oaf_crossref.xml diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/AbstractMdRecordToOafMapper.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/AbstractMdRecordToOafMapper.java index 5f0acbab7..49133cedb 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/AbstractMdRecordToOafMapper.java +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/AbstractMdRecordToOafMapper.java @@ -157,20 +157,20 @@ public abstract class AbstractMdRecordToOafMapper { if (vocs.vocabularyExists(OPENAIRE_META_RESOURCE_TYPE)) { Optional instanceTypeMapping = instances - .stream() - .flatMap(i -> i.getInstanceTypeMapping().stream()) - .filter(t -> OPENAIRE_COAR_RESOURCE_TYPES_3_1.equals(t.getVocabularyName())) - .findFirst(); + .stream() + .flatMap(i -> i.getInstanceTypeMapping().stream()) + .filter(t -> OPENAIRE_COAR_RESOURCE_TYPES_3_1.equals(t.getVocabularyName())) + .findFirst(); if (!instanceTypeMapping.isPresent()) { - throw new IllegalStateException("unable to find an instance from " + OPENAIRE_COAR_RESOURCE_TYPES_3_1); + return null; } else { final String typeCode = instanceTypeMapping.get().getTypeCode(); return Optional - .ofNullable(vocs.lookupTermBySynonym(OPENAIRE_META_RESOURCE_TYPE, typeCode)) - .orElseThrow(() -> - new IllegalStateException("unable to find a synonym for '" + typeCode + "' in " + - OPENAIRE_META_RESOURCE_TYPE)); + .ofNullable(vocs.lookupTermBySynonym(OPENAIRE_META_RESOURCE_TYPE, typeCode)) + .orElseThrow( + () -> new IllegalStateException("unable to find a synonym for '" + typeCode + "' in " + + OPENAIRE_META_RESOURCE_TYPE)); } } else { throw new IllegalStateException("vocabulary '" + OPENAIRE_META_RESOURCE_TYPE + "' not available"); @@ -197,7 +197,8 @@ public abstract class AbstractMdRecordToOafMapper { final DataInfo info, final long lastUpdateTimestamp) { - final OafEntity entity = createEntity(doc, type, metaResourceType, instances, collectedFrom, info, lastUpdateTimestamp); + final OafEntity entity = createEntity( + doc, type, metaResourceType, instances, collectedFrom, info, lastUpdateTimestamp); final Set originalId = Sets.newHashSet(entity.getOriginalId()); originalId.add(entity.getId()); @@ -550,29 +551,33 @@ public abstract class AbstractMdRecordToOafMapper { protected abstract String findOriginalType(Document doc); protected List prepareInstanceTypeMapping(Document doc) { - return Optional.ofNullable(findOriginalType(doc)) - .map(originalType -> { - final List mappings = Lists.newArrayList(); + return Optional + .ofNullable(findOriginalType(doc)) + .map(originalType -> { + final List mappings = Lists.newArrayList(); - if (vocs.vocabularyExists(OPENAIRE_COAR_RESOURCE_TYPES_3_1)) { + if (vocs.vocabularyExists(OPENAIRE_COAR_RESOURCE_TYPES_3_1)) { - // TODO verify what the vocabs return when a synonym is not defined - Optional.ofNullable(vocs.lookupTermBySynonym(OPENAIRE_COAR_RESOURCE_TYPES_3_1, originalType)) - .ifPresent(coarTerm -> { - mappings.add(OafMapperUtils.instanceTypeMapping(originalType, coarTerm)); - if (vocs.vocabularyExists(OPENAIRE_USER_RESOURCE_TYPES)) { + // TODO verify what the vocabs return when a synonym is not defined + Optional + .ofNullable(vocs.lookupTermBySynonym(OPENAIRE_COAR_RESOURCE_TYPES_3_1, originalType)) + .ifPresent(coarTerm -> { + mappings.add(OafMapperUtils.instanceTypeMapping(originalType, coarTerm)); + if (vocs.vocabularyExists(OPENAIRE_USER_RESOURCE_TYPES)) { - // TODO verify what the vocabs return when a synonym is not defined - Optional - .ofNullable(vocs.lookupTermBySynonym(OPENAIRE_USER_RESOURCE_TYPES, coarTerm.getClassid())) - .ifPresent(type -> mappings.add(OafMapperUtils.instanceTypeMapping(originalType, type))); - } - }); - } + // TODO verify what the vocabs return when a synonym is not defined + Optional + .ofNullable( + vocs.lookupTermBySynonym(OPENAIRE_USER_RESOURCE_TYPES, coarTerm.getClassid())) + .ifPresent( + type -> mappings.add(OafMapperUtils.instanceTypeMapping(originalType, type))); + } + }); + } - return mappings; - }) - .orElse(new ArrayList<>()); + return mappings; + }) + .orElse(new ArrayList<>()); } private Journal prepareJournal(final Document doc, final DataInfo info) { diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/OafToOafMapper.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/OafToOafMapper.java index 6bcc8ec44..a63296d18 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/OafToOafMapper.java +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/OafToOafMapper.java @@ -1,17 +1,8 @@ package eu.dnetlib.dhp.oa.graph.raw; -import com.google.common.collect.Lists; -import eu.dnetlib.dhp.common.PacePerson; -import eu.dnetlib.dhp.common.vocabulary.VocabularyGroup; -import eu.dnetlib.dhp.schema.oaf.*; -import eu.dnetlib.dhp.schema.oaf.utils.CleaningFunctions; -import eu.dnetlib.dhp.schema.oaf.utils.IdentifierFactory; -import eu.dnetlib.dhp.schema.oaf.utils.ModelHardLimits; -import org.apache.commons.lang3.StringUtils; -import org.dom4j.Document; -import org.dom4j.Element; -import org.dom4j.Node; +import static eu.dnetlib.dhp.schema.common.ModelConstants.*; +import static eu.dnetlib.dhp.schema.oaf.utils.OafMapperUtils.*; import java.net.URLDecoder; import java.util.ArrayList; @@ -20,8 +11,19 @@ import java.util.List; import java.util.Set; import java.util.stream.Collectors; -import static eu.dnetlib.dhp.schema.common.ModelConstants.*; -import static eu.dnetlib.dhp.schema.oaf.utils.OafMapperUtils.*; +import org.apache.commons.lang3.StringUtils; +import org.dom4j.Document; +import org.dom4j.Element; +import org.dom4j.Node; + +import com.google.common.collect.Lists; + +import eu.dnetlib.dhp.common.PacePerson; +import eu.dnetlib.dhp.common.vocabulary.VocabularyGroup; +import eu.dnetlib.dhp.schema.oaf.*; +import eu.dnetlib.dhp.schema.oaf.utils.CleaningFunctions; +import eu.dnetlib.dhp.schema.oaf.utils.IdentifierFactory; +import eu.dnetlib.dhp.schema.oaf.utils.ModelHardLimits; public class OafToOafMapper extends AbstractMdRecordToOafMapper { @@ -201,12 +203,13 @@ public class OafToOafMapper extends AbstractMdRecordToOafMapper { */ @Override protected String findOriginalType(Document doc) { - return (String) doc.selectNodes("//dc:type") - .stream() - .map(o -> "" + ((Node) o).getText().trim()) - .sorted(new OriginalTypeComparator()) - .findFirst() - .orElse(null); + return (String) doc + .selectNodes("//dc:type") + .stream() + .map(o -> "" + ((Node) o).getText().trim()) + .sorted(new OriginalTypeComparator()) + .findFirst() + .orElse(null); } @Override diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/OdfToOafMapper.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/OdfToOafMapper.java index c383e9300..e63b01a00 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/OdfToOafMapper.java +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/OdfToOafMapper.java @@ -230,20 +230,18 @@ public class OdfToOafMapper extends AbstractMdRecordToOafMapper { */ @Override protected String findOriginalType(Document doc) { - String resourceType = Optional.ofNullable((Element) doc.selectSingleNode( + return Optional + .ofNullable( + (Element) doc + .selectSingleNode( "//*[local-name()='metadata']/*[local-name() = 'resource']/*[local-name() = 'resourceType']")) - .map(element -> { - final String resourceTypeURI = element.attributeValue("anyURI"); - final String resourceTypeTxt = element.getText(); - - return ObjectUtils.firstNonNull(resourceTypeURI, resourceTypeTxt); - }) - .orElse(doc.valueOf( - "//*[local-name()='metadata']/*[local-name() = 'resource']/*[local-name() = 'CobjCategory']/text()") - ); - - return resourceType; + .map(element -> { + final String resourceTypeURI = element.attributeValue("anyURI"); + final String resourceTypeTxt = element.getText(); + return ObjectUtils.firstNonNull(resourceTypeURI, resourceTypeTxt); + }) + .orElse(null); } @Override diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/OriginalTypeComparator.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/OriginalTypeComparator.java index 2eeead32e..c3d8b4789 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/OriginalTypeComparator.java +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/OriginalTypeComparator.java @@ -1,32 +1,33 @@ -package eu.dnetlib.dhp.oa.graph.raw; -import java.util.Comparator; +package eu.dnetlib.dhp.oa.graph.raw; import static org.apache.commons.lang3.StringUtils.contains; import static org.apache.commons.lang3.StringUtils.startsWith; +import java.util.Comparator; + public class OriginalTypeComparator implements Comparator { - @Override - public int compare(String t1, String t2) { + @Override + public int compare(String t1, String t2) { - if (t1.equals(t2)) { - return 0; - } - if (startsWith(t1, "http") && contains(t1, "coar") && contains(t1, "resource_type")) { - return -1; - } - if (startsWith(t2, "http") && contains(t2, "coar") && contains(t2, "resource_type")) { - return 1; - } - if (startsWith(t1, "info:eu-repo/semantics")) { - return -1; - } - if (startsWith(t2, "info:eu-repo/semantics")) { - return 1; - } + if (t1.equals(t2)) { + return 0; + } + if (startsWith(t1, "http") && contains(t1, "coar") && contains(t1, "resource_type")) { + return -1; + } + if (startsWith(t2, "http") && contains(t2, "coar") && contains(t2, "resource_type")) { + return 1; + } + if (startsWith(t1, "info:eu-repo/semantics")) { + return -1; + } + if (startsWith(t2, "info:eu-repo/semantics")) { + return 1; + } - return t1.compareTo(t2); - } + return t1.compareTo(t2); + } } diff --git a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/raw/MappersTest.java b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/raw/MappersTest.java index 4d30a3fa8..e6997ac1d 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/raw/MappersTest.java +++ b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/raw/MappersTest.java @@ -14,6 +14,8 @@ import java.util.stream.Collectors; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; +import org.apache.spark.api.java.function.MapFunction; +import org.apache.spark.sql.Encoders; import org.dom4j.DocumentException; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -25,8 +27,11 @@ import com.fasterxml.jackson.databind.ObjectMapper; import eu.dnetlib.dhp.common.Constants; import eu.dnetlib.dhp.common.vocabulary.VocabularyGroup; +import eu.dnetlib.dhp.oa.graph.clean.CleaningRuleMap; +import eu.dnetlib.dhp.oa.graph.clean.OafCleaner; import eu.dnetlib.dhp.schema.common.ModelConstants; import eu.dnetlib.dhp.schema.oaf.*; +import eu.dnetlib.dhp.schema.oaf.utils.GraphCleaningFunctions; import eu.dnetlib.dhp.schema.oaf.utils.IdentifierFactory; import eu.dnetlib.dhp.schema.oaf.utils.PidType; import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpService; @@ -119,19 +124,21 @@ class MappersTest { assertNotNull(instance.getInstanceTypeMapping()); assertEquals(2, instance.getInstanceTypeMapping().size()); - Optional coarType = instance.getInstanceTypeMapping() - .stream() - .filter(itm -> ModelConstants.OPENAIRE_COAR_RESOURCE_TYPES_3_1.equals(itm.getVocabularyName())) - .findFirst(); + Optional coarType = instance + .getInstanceTypeMapping() + .stream() + .filter(itm -> ModelConstants.OPENAIRE_COAR_RESOURCE_TYPES_3_1.equals(itm.getVocabularyName())) + .findFirst(); assertTrue(coarType.isPresent()); assertEquals("http://purl.org/coar/resource_type/c_5794", coarType.get().getTypeCode()); assertEquals("conference paper", coarType.get().getTypeLabel()); - Optional userType = instance.getInstanceTypeMapping() - .stream() - .filter(itm -> ModelConstants.OPENAIRE_USER_RESOURCE_TYPES.equals(itm.getVocabularyName())) - .findFirst(); + Optional userType = instance + .getInstanceTypeMapping() + .stream() + .filter(itm -> ModelConstants.OPENAIRE_USER_RESOURCE_TYPES.equals(itm.getVocabularyName())) + .findFirst(); assertTrue(userType.isPresent()); assertEquals("Article", userType.get().getTypeCode()); @@ -266,8 +273,8 @@ class MappersTest { }); Publication p_cleaned = cleanup(p, vocs); - assertEquals("0000", p_cleaned.getInstance().get(0).getRefereed().getClassid()); - assertEquals("Unknown", p_cleaned.getInstance().get(0).getRefereed().getClassname()); + assertEquals("0002", p_cleaned.getInstance().get(0).getRefereed().getClassid()); + assertEquals("nonPeerReviewed", p_cleaned.getInstance().get(0).getRefereed().getClassname()); assertNotNull(p.getInstance().get(0).getPid()); assertEquals(2, p.getInstance().get(0).getPid().size()); @@ -485,8 +492,8 @@ class MappersTest { }); Publication p_cleaned = cleanup(p, vocs); - assertEquals("0000", p_cleaned.getInstance().get(0).getRefereed().getClassid()); - assertEquals("Unknown", p_cleaned.getInstance().get(0).getRefereed().getClassname()); + assertEquals("0002", p_cleaned.getInstance().get(0).getRefereed().getClassid()); + assertEquals("nonPeerReviewed", p_cleaned.getInstance().get(0).getRefereed().getClassname()); } @Test @@ -604,8 +611,137 @@ class MappersTest { assertTrue(i.getUrl().contains("https://clinicaltrials.gov/ct2/show/NCT02321059")); Dataset d_cleaned = cleanup(d, vocs); - assertEquals("0000", d_cleaned.getInstance().get(0).getRefereed().getClassid()); - assertEquals("Unknown", d_cleaned.getInstance().get(0).getRefereed().getClassname()); + assertEquals("0002", d_cleaned.getInstance().get(0).getRefereed().getClassid()); + assertEquals("nonPeerReviewed", d_cleaned.getInstance().get(0).getRefereed().getClassname()); + } + + @Test + void test_record_from_Crossref() throws IOException { + + final CleaningRuleMap mapping = CleaningRuleMap.create(vocs); + + final String xml = IOUtils + .toString(Objects.requireNonNull(getClass().getResourceAsStream("oaf_crossref.xml"))); + final List list = new OafToOafMapper(vocs, false, true).processMdRecord(xml); + + assertEquals(1, list.size()); + assertTrue(list.get(0) instanceof Publication); + + final Publication p = OafCleaner.apply(fixVocabularyNames((Publication) list.get(0)), mapping); + + assertNotNull(p.getDateofcollection()); + assertEquals("2020-08-06T07:04:09.62Z", p.getDateofcollection()); + + assertNotNull(p.getDateoftransformation()); + assertEquals("2020-08-06T07:20:57.911Z", p.getDateoftransformation()); + + assertNotNull(p.getDataInfo()); + assertFalse(p.getDataInfo().getInvisible()); + assertFalse(p.getDataInfo().getDeletedbyinference()); + assertEquals("0.9", p.getDataInfo().getTrust()); + + assertValidId(p.getId()); + assertEquals(2, p.getOriginalId().size()); + + assertEquals("50|doi_________::7f0f7807f17db50e5c2b5c452ccaf06d", p.getOriginalId().get(0)); + assertValidId(p.getCollectedfrom().get(0).getKey()); + + assertNotNull(p.getTitle()); + assertEquals(1, p.getTitle().size()); + assertEquals( + "A case report of serious haemolysis in a glucose-6-phosphate dehydrogenase-deficient COVID-19 patient receiving hydroxychloroquine", + p + .getTitle() + .get(0) + .getValue()); + + assertNotNull(p.getDescription()); + assertEquals(0, p.getDescription().size()); + + assertEquals(8, p.getAuthor().size()); + + assertNotNull(p.getInstance()); + assertEquals(1, p.getInstance().size()); + + final Instance i = p.getInstance().get(0); + + assertNotNull(i.getAccessright()); + assertEquals(ModelConstants.DNET_ACCESS_MODES, i.getAccessright().getSchemeid()); + assertEquals(ModelConstants.DNET_ACCESS_MODES, i.getAccessright().getSchemename()); + assertEquals("OPEN", i.getAccessright().getClassid()); + assertEquals("Open Access", i.getAccessright().getClassname()); + + assertNotNull(i.getCollectedfrom()); + assertEquals("10|openaire____::081b82f96300b6a6e3d282bad31cb6e2", i.getCollectedfrom().getKey()); + assertEquals("Crossref", i.getCollectedfrom().getValue()); + + assertNotNull(i.getHostedby()); + assertEquals("10|openaire____::55045bd2a65019fd8e6741a755395c8c", i.getHostedby().getKey()); + assertEquals("Unknown Repository", i.getHostedby().getValue()); + + assertNotNull(i.getInstancetype()); + assertEquals("0001", i.getInstancetype().getClassid()); + assertEquals("Article", i.getInstancetype().getClassname()); + assertEquals(ModelConstants.DNET_PUBLICATION_RESOURCE, i.getInstancetype().getSchemeid()); + assertEquals(ModelConstants.DNET_PUBLICATION_RESOURCE, i.getInstancetype().getSchemename()); + + assertNull(i.getLicense()); + assertNotNull(i.getDateofacceptance()); + assertEquals("2020-06-04", i.getDateofacceptance().getValue()); + + assertNull(i.getProcessingchargeamount()); + assertNull(i.getProcessingchargecurrency()); + + assertNotNull(i.getPid()); + assertEquals(1, i.getPid().size()); + + assertNotNull(i.getAlternateIdentifier()); + assertEquals(0, i.getAlternateIdentifier().size()); + + assertNotNull(i.getUrl()); + assertEquals(1, i.getUrl().size()); + assertTrue(i.getUrl().contains("http://dx.doi.org/10.1080/23744235.2020.1774644")); + + assertEquals("", p.getInstance().get(0).getRefereed().getClassid()); + assertEquals("", p.getInstance().get(0).getRefereed().getClassname()); + + Publication p_cleaned = cleanup(p, vocs); + + assertEquals("0001", p_cleaned.getInstance().get(0).getRefereed().getClassid()); + assertEquals("peerReviewed", p_cleaned.getInstance().get(0).getRefereed().getClassname()); + + assertNotNull(p_cleaned.getMetaResourceType()); + assertEquals("Research Literature", p_cleaned.getMetaResourceType().getClassid()); + assertEquals("Research Literature", p_cleaned.getMetaResourceType().getClassname()); + assertEquals(ModelConstants.OPENAIRE_META_RESOURCE_TYPE, p_cleaned.getMetaResourceType().getSchemeid()); + assertEquals(ModelConstants.OPENAIRE_META_RESOURCE_TYPE, p_cleaned.getMetaResourceType().getSchemename()); + + assertNotNull(p_cleaned.getInstance().get(0).getInstanceTypeMapping()); + assertEquals(2, p_cleaned.getInstance().get(0).getInstanceTypeMapping().size()); + + assertTrue( + p_cleaned + .getInstance() + .get(0) + .getInstanceTypeMapping() + .stream() + .anyMatch( + t -> "journal-article".equals(t.getOriginalType()) && + ModelConstants.OPENAIRE_COAR_RESOURCE_TYPES_3_1.equals(t.getVocabularyName()) && + "http://purl.org/coar/resource_type/c_2df8fbb1".equals(t.getTypeCode()) && + "research article".equals(t.getTypeLabel()))); + + assertTrue( + p_cleaned + .getInstance() + .get(0) + .getInstanceTypeMapping() + .stream() + .anyMatch( + t -> "journal-article".equals(t.getOriginalType()) && + ModelConstants.OPENAIRE_USER_RESOURCE_TYPES.equals(t.getVocabularyName()) && + "Article".equals(t.getTypeCode()) && + "Article".equals(t.getTypeLabel()))); } @Test @@ -908,8 +1044,8 @@ class MappersTest { }); Dataset p_cleaned = cleanup(p, vocs); - assertEquals("0000", p_cleaned.getInstance().get(0).getRefereed().getClassid()); - assertEquals("Unknown", p_cleaned.getInstance().get(0).getRefereed().getClassname()); + assertEquals("0002", p_cleaned.getInstance().get(0).getRefereed().getClassid()); + assertEquals("nonPeerReviewed", p_cleaned.getInstance().get(0).getRefereed().getClassname()); } @Test diff --git a/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/raw/oaf_crossref.xml b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/raw/oaf_crossref.xml new file mode 100644 index 000000000..182820a08 --- /dev/null +++ b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/raw/oaf_crossref.xml @@ -0,0 +1,68 @@ + + +
+ doi_________::7f0f7807f17db50e5c2b5c452ccaf06d + doi_________::7f0f7807f17db50e5c2b5c452ccaf06d + 2020-08-06T07:04:09.62Z + + + + + + 2020-08-06T07:20:57.911Z + openaire____ +
+ + A case report of serious haemolysis in a glucose-6-phosphate dehydrogenase-deficient COVID-19 patient receiving hydroxychloroquine + Maillart, E. + Leemans, S. + Van Noten, H. + Vandergraesen, T. + Mahadeb, B. + Salaouatchi, M. T. + De Bels, D. + Clevenbergh, P. + + http://dx.doi.org/10.1080/23744235.2020.1774644 + + Informa UK Limited + Crossref + Infectious Diseases + Microbiology (medical) + General Immunology and Microbiology + Infectious Diseases + General Medicine + journal-article + 0001 + 2020-06-04 + + OPEN + + + 10.1080/23744235.2020.1774644 + Infectious Diseases + + + + + file%3A%2F%2F%2Fsrv%2Fclaims%2Frecords%2Fpublication%2Fcrossref + + + + + + + false + false + 0.9 + + + + +
\ No newline at end of file From 0e44b037a52558e20bbe418a5d313fc7fd8e966f Mon Sep 17 00:00:00 2001 From: Giambattista Bloisi Date: Tue, 17 Oct 2023 07:54:01 +0200 Subject: [PATCH 332/449] FIX: GroupEntitiesSparkJob deletes whole graph outputPath instead of its temporary folder --- .../java/eu/dnetlib/dhp/oa/merge/GroupEntitiesSparkJob.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/GroupEntitiesSparkJob.java b/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/GroupEntitiesSparkJob.java index 99981bf6a..f5c8eea19 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/GroupEntitiesSparkJob.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/GroupEntitiesSparkJob.java @@ -71,7 +71,7 @@ public class GroupEntitiesSparkJob { conf, isSparkSessionManaged, spark -> { - HdfsSupport.remove(outputPath, spark.sparkContext().hadoopConfiguration()); + HdfsSupport.remove(checkpointPath, spark.sparkContext().hadoopConfiguration()); groupEntities(spark, graphInputPath, checkpointPath, outputPath, filterInvisible); }); } From d28b7085f6f13a644926302e47da314dcb22de5d Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Tue, 17 Oct 2023 11:09:31 +0200 Subject: [PATCH 333/449] more NPE checks --- .../common/vocabulary/VocabularyGroup.java | 25 ++++++++----------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/common/vocabulary/VocabularyGroup.java b/dhp-common/src/main/java/eu/dnetlib/dhp/common/vocabulary/VocabularyGroup.java index 4c1feac45..64b6f91af 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/common/vocabulary/VocabularyGroup.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/common/vocabulary/VocabularyGroup.java @@ -136,24 +136,21 @@ public class VocabularyGroup implements Serializable { } public Qualifier lookupTermBySynonym(final String vocId, final String syn) { - if (StringUtils.isBlank(vocId)) { - return OafMapperUtils.unknown("", ""); - } - - final Vocabulary vocabulary = vocs.get(vocId.toLowerCase()); - - return Optional - .ofNullable(vocabulary.getTerm(syn)) + return find(vocId) .map( - term -> OafMapperUtils - .qualifier(term.getId(), term.getName(), vocabulary.getId(), vocabulary.getName())) - .orElse( - Optional - .ofNullable(vocabulary.getTermBySynonym(syn)) + vocabulary -> Optional + .ofNullable(vocabulary.getTerm(syn)) .map( term -> OafMapperUtils .qualifier(term.getId(), term.getName(), vocabulary.getId(), vocabulary.getName())) - .orElse(null)); + .orElse( + Optional + .ofNullable(vocabulary.getTermBySynonym(syn)) + .map( + term -> OafMapperUtils + .qualifier(term.getId(), term.getName(), vocabulary.getId(), vocabulary.getName())) + .orElse(null))) + .orElse(null); } /** From b0fed1725edc8c000619906751ad46a105c9449b Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Thu, 19 Oct 2023 12:13:45 +0200 Subject: [PATCH 334/449] avoid NPEs --- .../oaf/utils/GraphCleaningFunctions.java | 10 ++++++ .../dnetlib/dhp/bulktag/SparkBulkTagJob.java | 7 ++-- .../PrepareResultCountrySet.java | 32 ++++++++++++++----- 3 files changed, 39 insertions(+), 10 deletions(-) diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java index 324e3dd58..b4402a2fb 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java @@ -286,6 +286,12 @@ public class GraphCleaningFunctions extends CleaningFunctions { public static T cleanup(T value, VocabularyGroup vocs) { + if (Objects.isNull(value.getDataInfo())) { + final DataInfo d = new DataInfo(); + d.setDeletedbyinference(false); + value.setDataInfo(d); + } + if (value instanceof OafEntity) { OafEntity e = (OafEntity) value; @@ -305,6 +311,10 @@ public class GraphCleaningFunctions extends CleaningFunctions { } else if (value instanceof Result) { Result r = (Result) value; + if (Objects.isNull(r.getContext())) { + r.setContext(new ArrayList<>()); + } + if (Objects.nonNull(r.getFulltext()) && (ModelConstants.SOFTWARE_RESULTTYPE_CLASSID.equals(r.getResulttype().getClassid()) || ModelConstants.DATASET_RESULTTYPE_CLASSID.equals(r.getResulttype().getClassid()))) { diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/SparkBulkTagJob.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/SparkBulkTagJob.java index 3186ed5c0..fc3882b73 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/SparkBulkTagJob.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/SparkBulkTagJob.java @@ -25,6 +25,7 @@ import eu.dnetlib.dhp.application.ArgumentApplicationParser; import eu.dnetlib.dhp.bulktag.community.*; import eu.dnetlib.dhp.schema.oaf.Datasource; import eu.dnetlib.dhp.schema.oaf.Result; +import eu.dnetlib.dhp.schema.oaf.utils.OafMapperUtils; public class SparkBulkTagJob { @@ -170,10 +171,12 @@ public class SparkBulkTagJob { // TODO remove this hack as soon as the values fixed by this method will be provided as NON null private static MapFunction patchResult() { return r -> { - if (r.getDataInfo().getDeletedbyinference() == null) { + if (Objects.isNull(r.getDataInfo())) { + r.setDataInfo(OafMapperUtils.dataInfo(false, "", false, false, OafMapperUtils.unknown("", ""), "")); + } else if (r.getDataInfo().getDeletedbyinference() == null) { r.getDataInfo().setDeletedbyinference(false); } - if (r.getContext() == null) { + if (Objects.isNull(r.getContext())) { r.setContext(new ArrayList<>()); } return r; diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/countrypropagation/PrepareResultCountrySet.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/countrypropagation/PrepareResultCountrySet.java index 28b6f616d..184d24751 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/countrypropagation/PrepareResultCountrySet.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/countrypropagation/PrepareResultCountrySet.java @@ -5,10 +5,7 @@ import static eu.dnetlib.dhp.PropagationConstant.*; import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkHiveSession; import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkSession; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashSet; -import java.util.Set; +import java.util.*; import java.util.stream.Collectors; import org.apache.commons.io.IOUtils; @@ -88,14 +85,33 @@ public class PrepareResultCountrySet { // selects all the results non deleted by inference and non invisible Dataset result = readPath(spark, inputPath, resultClazz) .filter( - (FilterFunction) r -> !r.getDataInfo().getDeletedbyinference() && - !r.getDataInfo().getInvisible()); + (FilterFunction) r -> Optional + .ofNullable(r.getDataInfo()) + .map(dataInfo -> !dataInfo.getDeletedbyinference() && !dataInfo.getInvisible()) + .orElse(true)); // of the results collects the distinct keys for collected from (at the level of the result) and hosted by // and produces pairs resultId, key for each distinct key associated to the result result.flatMap((FlatMapFunction) r -> { - Set cfhb = r.getCollectedfrom().stream().map(cf -> cf.getKey()).collect(Collectors.toSet()); - cfhb.addAll(r.getInstance().stream().map(i -> i.getHostedby().getKey()).collect(Collectors.toSet())); + Set cfhb = Optional + .ofNullable(r.getCollectedfrom()) + .map(cf -> cf.stream().map(KeyValue::getKey).collect(Collectors.toSet())) + .orElse(new HashSet<>()); + cfhb + .addAll( + Optional + .ofNullable(r.getInstance()) + .map( + i -> i + .stream() + .map( + ii -> Optional + .ofNullable(ii.getHostedby()) + .map(KeyValue::getKey) + .orElse(null)) + .filter(Objects::nonNull) + .collect(Collectors.toSet())) + .orElse(new HashSet<>())); return cfhb .stream() .map(value -> EntityEntityRel.newInstance(r.getId(), value)) From 2b9d0416eca2b0b1fc5b9a2b7ed19ca0868ddd2c Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Thu, 19 Oct 2023 16:26:37 +0200 Subject: [PATCH 335/449] [graph raw] URL Validator to accept double slashes --- .../raw/AbstractMdRecordToOafMapper.java | 2 +- .../dnetlib/dhp/oa/graph/raw/MappersTest.java | 14 ++++ .../dnetlib/dhp/oa/graph/raw/idus_sevilla.xml | 65 +++++++++++++++++++ 3 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/raw/idus_sevilla.xml diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/AbstractMdRecordToOafMapper.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/AbstractMdRecordToOafMapper.java index b37e6a755..bca6a2aae 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/AbstractMdRecordToOafMapper.java +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/AbstractMdRecordToOafMapper.java @@ -29,7 +29,7 @@ public abstract class AbstractMdRecordToOafMapper { protected final VocabularyGroup vocs; - protected static final UrlValidator URL_VALIDATOR = UrlValidator.getInstance(); + protected static final UrlValidator URL_VALIDATOR = new UrlValidator(UrlValidator.ALLOW_2_SLASHES); private final boolean invisible; diff --git a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/raw/MappersTest.java b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/raw/MappersTest.java index b506d3a62..da7a890ee 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/raw/MappersTest.java +++ b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/raw/MappersTest.java @@ -797,6 +797,20 @@ class MappersTest { assertFalse(p_cleaned.getTitle().isEmpty()); } + @Test + void test_instance_url_validation() throws IOException { + final String xml = IOUtils.toString(Objects.requireNonNull(getClass().getResourceAsStream("idus_sevilla.xml"))); + final List list = new OafToOafMapper(vocs, false, true).processMdRecord(xml); + + final Publication p = (Publication) list.get(0); + + assertNotNull(p.getInstance()); + assertFalse(p.getInstance().isEmpty()); + assertNotNull(p.getInstance().get(0).getUrl()); + assertFalse(p.getInstance().get(0).getUrl().isEmpty()); + assertEquals("https://idus.us.es/handle//11441/118940", p.getInstance().get(0).getUrl().get(0)); + } + @Test void testZenodo() throws IOException, DocumentException { final String xml = IOUtils.toString(Objects.requireNonNull(getClass().getResourceAsStream("odf_zenodo.xml"))); diff --git a/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/raw/idus_sevilla.xml b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/raw/idus_sevilla.xml new file mode 100644 index 000000000..1bfa3c7c3 --- /dev/null +++ b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/raw/idus_sevilla.xml @@ -0,0 +1,65 @@ + + +
+ od______3272::6a4d00217a024a46ce9697ce98b13c2a + oai:idus.us.es:11441/118940 + + + + + + 2021-08-20T12:32:32.826Z + 2023-07-04T15:47:55.397Z + od______3272 +
+ + El museo pictorico y escala optica : tomo I : theorica de la pintura en que se describe su origen ... y se aprueban con demonstraciomes mathematicas y filosoficas, sus mas radicales fundamentos + Palomino de Castro y Velasco, Antonio, 1653-1726 + Rovira y Brocandel, Hipólito, 1693-1765 + Palomino de Castro y Velasco, Antonio, 1653-1726 + 2021-08-12T08:59:53Z + 1715 + A 042(a)/063 + application/pdf + https://idus.us.es/handle//11441/118940 + spa + En Madrid : por Lucas Antonio de Bedmar ... : vendese en casa de Don Joseph de Villar y Villanueva, 1715 + info:eu-repo/semantics/book + info:eu-repo/semantics/publishedVersion + 0002 + 1715-01-01 + + opendoar____::3272 + OPEN + + + https://idus.us.es/handle//11441/118940 + + http://creativecommons.org/licenses/by-nc-nd/4.0/ + + + + + http%3A%2F%2Fidus.us.es%2Foai%2Fdriver + oai:idus.us.es:11441/118940 + 2021-08-12T08:59:54Z + http://www.openarchives.org/OAI/2.0/oai_dc/ + + + + false + false + 0.9 + + + + +
\ No newline at end of file From 6b19dcee80cdc19b6acdd95e6b05e5a4093b3ba7 Mon Sep 17 00:00:00 2001 From: Serafeim Chatzopoulos Date: Thu, 19 Oct 2023 19:58:25 +0300 Subject: [PATCH 336/449] Add actionset creation for pubmed affiliations --- .../PrepareAffiliationRelations.java | 32 ++++++++++++------- .../input_actionset_parameter.json | 8 ++++- .../bipaffiliations/job.properties | 1 + .../bipaffiliations/oozie_app/workflow.xml | 7 +++- 4 files changed, 35 insertions(+), 13 deletions(-) diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelations.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelations.java index 603ad6339..cbfba30c5 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelations.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelations.java @@ -12,6 +12,7 @@ import org.apache.hadoop.io.Text; import org.apache.hadoop.io.compress.GzipCodec; import org.apache.hadoop.mapred.SequenceFileOutputFormat; import org.apache.spark.SparkConf; +import org.apache.spark.api.java.JavaPairRDD; import org.apache.spark.api.java.function.FlatMapFunction; import org.apache.spark.sql.*; import org.apache.spark.sql.Dataset; @@ -58,10 +59,13 @@ public class PrepareAffiliationRelations implements Serializable { log.info("isSparkSessionManaged: {}", isSparkSessionManaged); final String inputPath = parser.get("inputPath"); - log.info("inputPath {}: ", inputPath); + log.info("inputPath: {}", inputPath); + + final String pubmedInputPath = parser.get("pubmedInputPath"); + log.info("pubmedInputPath: {}", pubmedInputPath); final String outputPath = parser.get("outputPath"); - log.info("outputPath {}: ", outputPath); + log.info("outputPath: {}", outputPath); SparkConf conf = new SparkConf(); @@ -70,12 +74,22 @@ public class PrepareAffiliationRelations implements Serializable { isSparkSessionManaged, spark -> { Constants.removeOutputDir(spark, outputPath); - prepareAffiliationRelations(spark, inputPath, outputPath); + + List collectedFromCrossref = OafMapperUtils.listKeyValues(ModelConstants.CROSSREF_ID, "Crossref"); + JavaPairRDD crossrefRelations = prepareAffiliationRelations(spark, inputPath, collectedFromCrossref); + + List collectedFromPubmed = OafMapperUtils.listKeyValues(ModelConstants.PUBMED_CENTRAL_ID, "Pubmed"); + JavaPairRDD pubmedRelations = prepareAffiliationRelations(spark, inputPath, collectedFromPubmed); + + crossrefRelations + .union(pubmedRelations) + .saveAsHadoopFile(outputPath, Text.class, Text.class, SequenceFileOutputFormat.class, GzipCodec.class); + }); } - private static void prepareAffiliationRelations(SparkSession spark, String inputPath, - String outputPath) { + private static JavaPairRDD prepareAffiliationRelations(SparkSession spark, String inputPath, + List collectedfrom) { // load and parse affiliation relations from HDFS Dataset df = spark @@ -92,7 +106,7 @@ public class PrepareAffiliationRelations implements Serializable { new Column("matching.Confidence").as("confidence")); // prepare action sets for affiliation relations - df + return df .toJavaRDD() .flatMap((FlatMapFunction) row -> { @@ -120,8 +134,6 @@ public class PrepareAffiliationRelations implements Serializable { qualifier, Double.toString(row.getAs("confidence"))); - List collectedfrom = OafMapperUtils.listKeyValues(ModelConstants.CROSSREF_ID, "Crossref"); - // return bi-directional relations return getAffiliationRelationPair(paperId, affId, collectedfrom, dataInfo).iterator(); @@ -129,9 +141,7 @@ public class PrepareAffiliationRelations implements Serializable { .map(p -> new AtomicAction(Relation.class, p)) .mapToPair( aa -> new Tuple2<>(new Text(aa.getClazz().getCanonicalName()), - new Text(OBJECT_MAPPER.writeValueAsString(aa)))) - .saveAsHadoopFile(outputPath, Text.class, Text.class, SequenceFileOutputFormat.class, GzipCodec.class); - + new Text(OBJECT_MAPPER.writeValueAsString(aa)))); } private static List getAffiliationRelationPair(String paperId, String affId, List collectedfrom, diff --git a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/input_actionset_parameter.json b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/input_actionset_parameter.json index 7663a454b..96dcc3b32 100644 --- a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/input_actionset_parameter.json +++ b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/input_actionset_parameter.json @@ -8,7 +8,13 @@ { "paramName": "ip", "paramLongName": "inputPath", - "paramDescription": "the URL from where to get the programme file", + "paramDescription": "the path to get the input data from Crossref", + "paramRequired": true + }, + { + "paramName": "pip", + "paramLongName": "pubmedInputPath", + "paramDescription": "the path to get the input data from Pubmed", "paramRequired": true }, { diff --git a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/job.properties b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/job.properties index d942e6772..fe3cbb633 100644 --- a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/job.properties +++ b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/job.properties @@ -32,4 +32,5 @@ spark2SqlQueryExecutionListeners=com.cloudera.spark.lineage.NavigatorQueryListen oozie.wf.application.path=${oozieTopWfApplicationPath} inputPath=/data/bip-affiliations/data.json +pubmedInputPath=/data/bip-affiiations/pubmed-data.json outputPath=/tmp/crossref-affiliations-output-v5 diff --git a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/oozie_app/workflow.xml b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/oozie_app/workflow.xml index 9930cfe17..c0a6bfc52 100644 --- a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/oozie_app/workflow.xml @@ -3,7 +3,11 @@ inputPath - the path where to find the inferred affiliation relations + the path where to find the inferred affiliation relations from Crossref + + + pubmedInputPath + the path where to find the inferred affiliation relations from Pubmed outputPath @@ -97,6 +101,7 @@ --conf spark.sql.warehouse.dir=${sparkSqlWarehouseDir} --inputPath${inputPath} + --pubmedInputPath${pubmedInputPath} --outputPath${outputPath} From a4214ced1e0b71b4af87cf4cdddf05b30f92afb1 Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Fri, 20 Oct 2023 10:14:20 +0200 Subject: [PATCH 337/449] fixing issue on propagation organization. added --config to workflow definition. added oozie_app to communtiy project --- .../PrepareResultCommunitySet.java | 4 +- .../SparkResultToCommunityFromProject.java | 2 - .../oozie_app/workflow.xml | 4 +- ...t_preparecommunitytoresult_parameters.json | 7 +- .../oozie_app/config-default.xml | 58 +++++++ .../oozie_app/workflow.xml | 144 ++++++++++++++++++ 6 files changed, 207 insertions(+), 12 deletions(-) create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromproject/oozie_app/config-default.xml create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromproject/oozie_app/workflow.xml diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/PrepareResultCommunitySet.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/PrepareResultCommunitySet.java index 883f5ca86..c47075272 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/PrepareResultCommunitySet.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/PrepareResultCommunitySet.java @@ -109,12 +109,12 @@ public class PrepareResultCommunitySet { }); }); - if(cl.size() == 0) + if (cl.size() == 0) return null; rpl.setCommunityList(cl); return rpl; }, Encoders.bean(ResultProjectList.class)) - .filter(Objects::nonNull) + .filter(Objects::nonNull) .write() .mode(SaveMode.Overwrite) .option("compression", "gzip") diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/SparkResultToCommunityFromProject.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/SparkResultToCommunityFromProject.java index daef6a317..90c30f812 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/SparkResultToCommunityFromProject.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/SparkResultToCommunityFromProject.java @@ -62,10 +62,8 @@ public class SparkResultToCommunityFromProject implements Serializable { final String possibleupdatespath = parser.get("preparedInfoPath"); log.info("preparedInfoPath: {}", possibleupdatespath); - SparkConf conf = new SparkConf(); - runWithSparkSession( conf, isSparkSessionManaged, diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/oozie_app/workflow.xml index 7a5fd7434..d5d75fbc1 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/oozie_app/workflow.xml @@ -92,7 +92,7 @@ --executor-cores=6 --executor-memory=5G - --spark.executor.memoryOverhead=3g + --conf spark.executor.memoryOverhead=3g --conf spark.sql.shuffle.partitions=3284 --driver-memory=${sparkDriverMemory} --conf spark.extraListeners=${spark2ExtraListeners} @@ -121,7 +121,7 @@ --executor-cores=6 --executor-memory=5G - --spark.executor.memoryOverhead=3g + --conf spark.executor.memoryOverhead=3g --conf spark.sql.shuffle.partitions=3284 --driver-memory=${sparkDriverMemory} --conf spark.extraListeners=${spark2ExtraListeners} diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromproject/input_preparecommunitytoresult_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromproject/input_preparecommunitytoresult_parameters.json index 8b6291e5d..9a50c79fa 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromproject/input_preparecommunitytoresult_parameters.json +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromproject/input_preparecommunitytoresult_parameters.json @@ -5,12 +5,7 @@ "paramDescription": "the path of the sequencial file to read", "paramRequired": true }, - { - "paramName":"h", - "paramLongName":"hive_metastore_uris", - "paramDescription": "the hive metastore uris", - "paramRequired": true - }, + { "paramName": "ssm", "paramLongName": "isSparkSessionManaged", diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromproject/oozie_app/config-default.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromproject/oozie_app/config-default.xml new file mode 100644 index 000000000..2744ea92b --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromproject/oozie_app/config-default.xml @@ -0,0 +1,58 @@ + + + jobTracker + yarnRM + + + nameNode + hdfs://nameservice1 + + + oozie.use.system.libpath + true + + + oozie.action.sharelib.for.spark + spark2 + + + hive_metastore_uris + thrift://iis-cdh5-test-m3.ocean.icm.edu.pl:9083 + + + spark2YarnHistoryServerAddress + http://iis-cdh5-test-gw.ocean.icm.edu.pl:18089 + + + spark2EventLogDir + /user/spark/spark2ApplicationHistory + + + spark2ExtraListeners + com.cloudera.spark.lineage.NavigatorAppListener + + + spark2SqlQueryExecutionListeners + com.cloudera.spark.lineage.NavigatorQueryListener + + + sparkExecutorNumber + 4 + + + sparkDriverMemory + 15G + + + sparkExecutorMemory + 6G + + + sparkExecutorCores + 1 + + + spark2MaxExecutors + 50 + + \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromproject/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromproject/oozie_app/workflow.xml new file mode 100644 index 000000000..21cc2d887 --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromproject/oozie_app/workflow.xml @@ -0,0 +1,144 @@ + + + + sourcePath + the source path + + + + outputPath + the output path + + + + + ${jobTracker} + ${nameNode} + + + oozie.action.sharelib.for.spark + ${oozieActionShareLibForSpark2} + + + + + + + + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + + + + + + + + + + + + + + + + + + + + ${nameNode}/${sourcePath}/relation + ${nameNode}/${outputPath}/relation + + + + + + + + ${nameNode}/${sourcePath}/organization + ${nameNode}/${outputPath}/organization + + + + + + + + ${nameNode}/${sourcePath}/project + ${nameNode}/${outputPath}/project + + + + + + + + ${nameNode}/${sourcePath}/datasource + ${nameNode}/${outputPath}/datasource + + + + + + + + + + yarn + cluster + Prepare-Community-Result-Organization + eu.dnetlib.dhp.resulttocommunityfromproject.PrepareResultCommunitySet + dhp-enrichment-${projectVersion}.jar + + --executor-cores=6 + --executor-memory=5G + --conf spark.executor.memoryOverhead=3g + --conf spark.sql.shuffle.partitions=3284 + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + + --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} + + --sourcePath${sourcePath}/relation + --outputPath${workingDir}/preparedInfo/resultCommunityList + --production${production} + + + + + + + + yarn + cluster + community2resultfromproject + eu.dnetlib.dhp.resulttocommunityfromproject.SparkResultToCommunityFromProject + dhp-enrichment-${projectVersion}.jar + + --executor-cores=6 + --executor-memory=5G + --conf spark.executor.memoryOverhead=3g + --conf spark.sql.shuffle.partitions=3284 + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} + + --preparedInfoPath${workingDir}/preparedInfo/resultCommunityList + --sourcePath${sourcePath}/ + --outputPath${outputPath}/ + + + + + + + + + + \ No newline at end of file From aad5982bf171d4504de660afa1a4350bd7e761f9 Mon Sep 17 00:00:00 2001 From: Serafeim Chatzopoulos Date: Fri, 20 Oct 2023 12:48:21 +0300 Subject: [PATCH 338/449] Change the description of the workflow --- .../PrepareAffiliationRelations.java | 22 ++++++++++++------- .../bipaffiliations/oozie_app/workflow.xml | 2 +- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelations.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelations.java index cbfba30c5..18d98be54 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelations.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelations.java @@ -75,21 +75,27 @@ public class PrepareAffiliationRelations implements Serializable { spark -> { Constants.removeOutputDir(spark, outputPath); - List collectedFromCrossref = OafMapperUtils.listKeyValues(ModelConstants.CROSSREF_ID, "Crossref"); - JavaPairRDD crossrefRelations = prepareAffiliationRelations(spark, inputPath, collectedFromCrossref); + List collectedFromCrossref = OafMapperUtils + .listKeyValues(ModelConstants.CROSSREF_ID, "Crossref"); + JavaPairRDD crossrefRelations = prepareAffiliationRelations( + spark, inputPath, collectedFromCrossref); - List collectedFromPubmed = OafMapperUtils.listKeyValues(ModelConstants.PUBMED_CENTRAL_ID, "Pubmed"); - JavaPairRDD pubmedRelations = prepareAffiliationRelations(spark, inputPath, collectedFromPubmed); + List collectedFromPubmed = OafMapperUtils + .listKeyValues(ModelConstants.PUBMED_CENTRAL_ID, "Pubmed"); + JavaPairRDD pubmedRelations = prepareAffiliationRelations( + spark, inputPath, collectedFromPubmed); crossrefRelations - .union(pubmedRelations) - .saveAsHadoopFile(outputPath, Text.class, Text.class, SequenceFileOutputFormat.class, GzipCodec.class); + .union(pubmedRelations) + .saveAsHadoopFile( + outputPath, Text.class, Text.class, SequenceFileOutputFormat.class, GzipCodec.class); }); } - private static JavaPairRDD prepareAffiliationRelations(SparkSession spark, String inputPath, - List collectedfrom) { + private static JavaPairRDD prepareAffiliationRelations(SparkSession spark, + String inputPath, + List collectedfrom) { // load and parse affiliation relations from HDFS Dataset df = spark diff --git a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/oozie_app/workflow.xml b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/oozie_app/workflow.xml index c0a6bfc52..e3fdddfd6 100644 --- a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/oozie_app/workflow.xml @@ -87,7 +87,7 @@ yarn cluster - Produces the atomic action with the inferred by BIP! affiliation relations from Crossref + Produces the atomic action with the inferred by BIP! affiliation relations (from Crossref and Pubmed) eu.dnetlib.dhp.actionmanager.bipaffiliations.PrepareAffiliationRelations dhp-aggregation-${projectVersion}.jar From 7fc621cdecaa23f57aa7744f51b3f15c46366dd3 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Fri, 20 Oct 2023 22:28:12 +0200 Subject: [PATCH 339/449] added defaults to the graph resolution workflow config-default.xml --- .../resolution/oozie_app/config-default.xml | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/resolution/oozie_app/config-default.xml b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/resolution/oozie_app/config-default.xml index 6fb2a1253..86847ed46 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/resolution/oozie_app/config-default.xml +++ b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/resolution/oozie_app/config-default.xml @@ -1,4 +1,12 @@ + + jobTracker + yarnRM + + + nameNode + hdfs://nameservice1 + oozie.use.system.libpath true @@ -7,4 +15,28 @@ oozie.action.sharelib.for.spark spark2 + + hive_metastore_uris + thrift://iis-cdh5-test-m3.ocean.icm.edu.pl:9083 + + + spark2YarnHistoryServerAddress + http://iis-cdh5-test-gw.ocean.icm.edu.pl:18089 + + + spark2ExtraListeners + com.cloudera.spark.lineage.NavigatorAppListener + + + spark2SqlQueryExecutionListeners + com.cloudera.spark.lineage.NavigatorQueryListener + + + sparkExecutorNumber + 4 + + + spark2EventLogDir + /user/spark/spark2ApplicationHistory + \ No newline at end of file From a870aa2b093929e190ae48cbb15cf98d732e2926 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Fri, 20 Oct 2023 22:28:39 +0200 Subject: [PATCH 340/449] depending on dhp-schemas:3.17.2 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 9cd82a343..f361a266c 100644 --- a/pom.xml +++ b/pom.xml @@ -888,7 +888,7 @@ 3.3.3 3.4.2 [2.12,3.0) - [3.17.1] + [3.17.2] [4.0.3] [6.0.5] [3.1.6] From 89c4dfbaf455d9621e76d0eebf2ca6ea7c718686 Mon Sep 17 00:00:00 2001 From: dimitrispie Date: Tue, 24 Oct 2023 09:48:23 +0300 Subject: [PATCH 341/449] StatsDB workflow to export actionsets about OA routes, diamond, and publicly-funded A new oozie workflow capable to read from the stats db to produce a new actionSet for updating results with: - green_oa ={true, false} - openAccesColor = {gold, hybrid, bronze} - in_diamond_journal={true, false} - publicly_funded={true, false} Inputs: - outputPath - statsDB --- dhp-workflows/dhp-stats-actionsets/pom.xml | 114 +++++++ .../dnetlib/dhp/actionmanager/Constants.java | 102 +++++++ .../StatsAtomicActionsJob.java | 286 ++++++++++++++++++ .../stats_actionsets/StatsDiamondOAModel.java | 29 ++ .../stats_actionsets/StatsGreenOAModel.java | 29 ++ .../stats_actionsets/StatsOAColourModel.java | 47 +++ .../StatsPubliclyFundedModel.java | 29 ++ .../input_actionset_parameter.json | 32 ++ .../oozie_app/config-default.xml | 30 ++ .../stats_actionsets/oozie_app/workflow.xml | 125 ++++++++ .../src/main/resources/log4j.properties | 12 + 11 files changed, 835 insertions(+) create mode 100644 dhp-workflows/dhp-stats-actionsets/pom.xml create mode 100644 dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/Constants.java create mode 100644 dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/stats_actionsets/StatsAtomicActionsJob.java create mode 100644 dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/stats_actionsets/StatsDiamondOAModel.java create mode 100644 dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/stats_actionsets/StatsGreenOAModel.java create mode 100644 dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/stats_actionsets/StatsOAColourModel.java create mode 100644 dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/stats_actionsets/StatsPubliclyFundedModel.java create mode 100644 dhp-workflows/dhp-stats-actionsets/src/main/resources/eu/dnetlib/dhp/actionmanager/stats_actionsets/input_actionset_parameter.json create mode 100644 dhp-workflows/dhp-stats-actionsets/src/main/resources/eu/dnetlib/dhp/actionmanager/stats_actionsets/oozie_app/config-default.xml create mode 100644 dhp-workflows/dhp-stats-actionsets/src/main/resources/eu/dnetlib/dhp/actionmanager/stats_actionsets/oozie_app/workflow.xml create mode 100644 dhp-workflows/dhp-stats-actionsets/src/main/resources/log4j.properties diff --git a/dhp-workflows/dhp-stats-actionsets/pom.xml b/dhp-workflows/dhp-stats-actionsets/pom.xml new file mode 100644 index 000000000..670fd4a5e --- /dev/null +++ b/dhp-workflows/dhp-stats-actionsets/pom.xml @@ -0,0 +1,114 @@ + + + 4.0.0 + + eu.dnetlib.dhp + dhp-workflows + 1.2.5-SNAPSHOT + + dhp-stats-actionsets + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + org.apache.httpcomponents + httpclient + + + + org.apache.spark + spark-core_2.11 + + + org.apache.spark + spark-sql_2.11 + + + + eu.dnetlib.dhp + dhp-common + ${project.version} + + + + net.sf.saxon + Saxon-HE + + + dom4j + dom4j + + + + xml-apis + xml-apis + + + + jaxen + jaxen + + + + org.json + json + + + + + org.apache.poi + poi-ooxml + + + + + org.apache.commons + commons-compress + + + + org.mongodb + mongo-java-driver + + + + + \ No newline at end of file diff --git a/dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/Constants.java b/dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/Constants.java new file mode 100644 index 000000000..0df34364d --- /dev/null +++ b/dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/Constants.java @@ -0,0 +1,102 @@ + +package eu.dnetlib.dhp.actionmanager; + +import java.util.Optional; + +import org.apache.spark.api.java.function.MapFunction; +import org.apache.spark.sql.Dataset; +import org.apache.spark.sql.Encoders; +import org.apache.spark.sql.SparkSession; + +import com.fasterxml.jackson.databind.ObjectMapper; + +import eu.dnetlib.dhp.application.ArgumentApplicationParser; +import eu.dnetlib.dhp.schema.common.ModelConstants; +import eu.dnetlib.dhp.schema.oaf.StructuredProperty; +import eu.dnetlib.dhp.schema.oaf.Subject; +import eu.dnetlib.dhp.schema.oaf.utils.OafMapperUtils; + +public class Constants { + + public static final String DOI = "doi"; + public static final String DOI_CLASSNAME = "Digital Object Identifier"; + + public static final String DEFAULT_DELIMITER = ","; + public static final String DEFAULT_FOS_DELIMITER = "\t"; + + public static final String UPDATE_DATA_INFO_TYPE = "update"; +// public static final String UPDATE_SUBJECT_FOS_CLASS_ID = "subject:fos"; + public static final String UPDATE_CLASS_NAME = "Inferred by OpenAIRE"; +// public static final String UPDATE_MEASURE_BIP_CLASS_ID = "measure:bip"; +// public static final String UPDATE_SUBJECT_SDG_CLASS_ID = "subject:sdg"; +// public static final String UPDATE_MEASURE_USAGE_COUNTS_CLASS_ID = "measure:usage_counts"; +// public static final String UPDATE_KEY_USAGE_COUNTS = "count"; + + public static final String UPDATE_MEASURE_STATS_MODEL_CLASS_ID = "measure:stats_model"; + public static final String UPDATE_KEY_STATS_MODEL = "stats_model"; + +// public static final String UPDATE_MEASURE_PUBLICLY_FUNDED_CLASS_ID = "measure:publicly_funded"; +// public static final String UPDATE_KEY_PUBLICLY_FUNDED = "publicly_funded"; + +// public static final String FOS_CLASS_ID = "FOS"; +// public static final String FOS_CLASS_NAME = "Fields of Science and Technology classification"; +// +// public static final String SDG_CLASS_ID = "SDG"; +// public static final String SDG_CLASS_NAME = "Sustainable Development Goals"; + + public static final String NULL = "NULL"; + + public static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); + + private Constants() { + } + + public static Boolean isSparkSessionManaged(ArgumentApplicationParser parser) { + return Optional + .ofNullable(parser.get("isSparkSessionManaged")) + .map(Boolean::valueOf) + .orElse(Boolean.TRUE); + } + + public static Dataset readPath( + SparkSession spark, String inputPath, Class clazz) { + return spark + .read() + .textFile(inputPath) + .map((MapFunction) value -> OBJECT_MAPPER.readValue(value, clazz), Encoders.bean(clazz)); + } + + public static Subject getSubject(String sbj, String classid, String classname, + String diqualifierclassid) { + if (sbj == null || sbj.equals(NULL)) + return null; + Subject s = new Subject(); + s.setValue(sbj); + s + .setQualifier( + OafMapperUtils + .qualifier( + classid, + classname, + ModelConstants.DNET_SUBJECT_TYPOLOGIES, + ModelConstants.DNET_SUBJECT_TYPOLOGIES)); + s + .setDataInfo( + OafMapperUtils + .dataInfo( + false, + UPDATE_DATA_INFO_TYPE, + true, + false, + OafMapperUtils + .qualifier( + diqualifierclassid, + UPDATE_CLASS_NAME, + ModelConstants.DNET_PROVENANCE_ACTIONS, + ModelConstants.DNET_PROVENANCE_ACTIONS), + "")); + + return s; + + } +} diff --git a/dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/stats_actionsets/StatsAtomicActionsJob.java b/dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/stats_actionsets/StatsAtomicActionsJob.java new file mode 100644 index 000000000..f6e2cfe01 --- /dev/null +++ b/dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/stats_actionsets/StatsAtomicActionsJob.java @@ -0,0 +1,286 @@ + +package eu.dnetlib.dhp.actionmanager.stats_actionsets; + +import static eu.dnetlib.dhp.actionmanager.Constants.*; +import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkHiveSession; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Optional; + +import org.apache.commons.io.IOUtils; +import org.apache.hadoop.io.Text; +import org.apache.hadoop.mapred.SequenceFileOutputFormat; +import org.apache.spark.SparkConf; +import org.apache.spark.api.java.function.MapFunction; +import org.apache.spark.api.java.function.MapGroupsFunction; +import org.apache.spark.sql.Dataset; +import org.apache.spark.sql.Encoders; +import org.apache.spark.sql.SaveMode; +import org.apache.spark.sql.SparkSession; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.fasterxml.jackson.databind.ObjectMapper; + +import eu.dnetlib.dhp.application.ArgumentApplicationParser; +import eu.dnetlib.dhp.common.HdfsSupport; +import eu.dnetlib.dhp.schema.action.AtomicAction; +import eu.dnetlib.dhp.schema.common.ModelConstants; +import eu.dnetlib.dhp.schema.oaf.*; +import eu.dnetlib.dhp.schema.oaf.utils.OafMapperUtils; +import scala.Tuple2; + +/** + * created the Atomic Action for each type of results + */ +public class StatsAtomicActionsJob implements Serializable { + + private static final Logger log = LoggerFactory.getLogger(StatsAtomicActionsJob.class); + private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); + + public static void main(String[] args) throws Exception { + + String jsonConfiguration = IOUtils + .toString( + StatsAtomicActionsJob.class + .getResourceAsStream( + "/eu/dnetlib/dhp/actionmanager/stats_actionsets/input_actionset_parameter.json")); + + final ArgumentApplicationParser parser = new ArgumentApplicationParser(jsonConfiguration); + + parser.parseArgument(args); + + Boolean isSparkSessionManaged = Optional + .ofNullable(parser.get("isSparkSessionManaged")) + .map(Boolean::valueOf) + .orElse(Boolean.TRUE); + + log.info("isSparkSessionManaged: {}", isSparkSessionManaged); + + final String outputPath = parser.get("outputPath"); + log.info("outputPath {}: ", outputPath); + + SparkConf conf = new SparkConf(); + conf.set("hive.metastore.uris", parser.get("hive_metastore_uris")); + + final String dbname = parser.get("statsDB"); + + final String workingPath = parser.get("workingPath"); + + runWithSparkHiveSession( + conf, + isSparkSessionManaged, + spark -> { + removeOutputDir(spark, outputPath); + prepareGreenData(dbname, spark, workingPath + "/greenOADB", "indi_pub_green_oa", "id"); + prepareDiamondData(dbname, spark, workingPath + "/diamondOADΒ", "indi_pub_diamond", "id"); + preparePubliclyFundedData( + dbname, spark, workingPath + "/publiclyFundedDΒ", "indi_funded_result_with_fundref", "id"); + prepareOAColourData(dbname, spark, workingPath + "/oacolourDB", "", "id"); + writeActionSet(spark, workingPath, outputPath); + }); + } + + private static void prepareGreenData(String dbname, SparkSession spark, String workingPath, String tableName, + String resultAttributeName) { + spark + .sql( + String + .format( + "select %s as id, green_oa as green_oa " + + "from %s.%s", + resultAttributeName, dbname, tableName)) + .as(Encoders.bean(StatsGreenOAModel.class)) + .write() + .mode(SaveMode.Overwrite) + .option("compression", "gzip") + .json(workingPath); + } + + private static void prepareDiamondData(String dbname, SparkSession spark, String workingPath, String tableName, + String resultAttributeName) { + spark + .sql( + String + .format( + "select %s as id, in_diamond_journal as in_diamond_journal " + + "from %s.%s", + resultAttributeName, dbname, tableName)) + .as(Encoders.bean(StatsDiamondOAModel.class)) + .write() + .mode(SaveMode.Overwrite) + .option("compression", "gzip") + .json(workingPath); + } + + private static void preparePubliclyFundedData(String dbname, SparkSession spark, String workingPath, + String tableName, + String resultAttributeName) { + spark + .sql( + String + .format( + "select %s as id, fundref as publicly_funded " + + "from %s.%s", + resultAttributeName, dbname, tableName)) + .as(Encoders.bean(StatsPubliclyFundedModel.class)) + .write() + .mode(SaveMode.Overwrite) + .option("compression", "gzip") + .json(workingPath); + } + + private static void prepareOAColourData(String dbname, SparkSession spark, String workingPath, String tableName, + String resultAttributeName) { + spark + .sql( + String + .format( + "select b.%s as id, is_gold, is_bronze_oa, is_hybrid from %s.indi_pub_bronze_oa b " + + "left outer join %s.indi_pub_gold_oa g on g.id=b.id " + + "left outer join %s.indi_pub_hybrid h on b.id=h.id", + resultAttributeName, dbname, dbname, dbname)) + .as(Encoders.bean(StatsOAColourModel.class)) + .write() + .mode(SaveMode.Overwrite) + .option("compression", "gzip") + .json(workingPath); + } + + public static void writeActionSet(SparkSession spark, String inputPath, String outputPath) { + + getFinalIndicatorsGreenResult(spark, inputPath + "/greenOADB") + .toJavaRDD() + .map(p -> new AtomicAction(p.getClass(), p)) + .union( + getFinalIndicatorsDiamondResult(spark, inputPath + "/diamondOADΒ") + .toJavaRDD() + .map(p -> new AtomicAction(p.getClass(), p))) + .union( + getFinalIndicatorsPubliclyFundedResult(spark, inputPath + "/publiclyFundedDΒ") + .toJavaRDD() + .map(p -> new AtomicAction(p.getClass(), p))) + .union( + getFinalIndicatorsOAColourResult(spark, inputPath + "/oacolourDB") + .toJavaRDD() + .map(p -> new AtomicAction(p.getClass(), p))) + .mapToPair( + aa -> new Tuple2<>(new Text(aa.getClazz().getCanonicalName()), + new Text(OBJECT_MAPPER.writeValueAsString(aa)))) + .saveAsHadoopFile(outputPath, Text.class, Text.class, SequenceFileOutputFormat.class); + } + + public static Measure newMeasureInstance(String id) { + Measure m = new Measure(); + m.setId(id); + m.setUnit(new ArrayList<>()); + return m; + } + + private static Dataset getFinalIndicatorsGreenResult(SparkSession spark, String inputPath) { + + return readPath(spark, inputPath, StatsGreenOAModel.class) + .map((MapFunction) usm -> { + Result r = new Result(); + r.setId("50|" + usm.getId()); + r.setMeasures(getMeasure(usm.isGreen_oa(), "green_oa")); + return r; + }, Encoders.bean(Result.class)); + } + + private static Dataset getFinalIndicatorsDiamondResult(SparkSession spark, String inputPath) { + + return readPath(spark, inputPath, StatsDiamondOAModel.class) + .map((MapFunction) usm -> { + Result r = new Result(); + r.setId("50|" + usm.getId()); + r.setMeasures(getMeasure(usm.isIn_diamond_journal(), "in_diamond_journal")); + return r; + }, Encoders.bean(Result.class)); + } + + private static Dataset getFinalIndicatorsPubliclyFundedResult(SparkSession spark, String inputPath) { + + return readPath(spark, inputPath, StatsPubliclyFundedModel.class) + .map((MapFunction) usm -> { + Result r = new Result(); + r.setId("50|" + usm.getId()); + r.setMeasures(getMeasure(usm.isPublicly_funded(), "publicly_funded")); + return r; + }, Encoders.bean(Result.class)); + } + + private static Dataset getFinalIndicatorsOAColourResult(SparkSession spark, String inputPath) { + + return readPath(spark, inputPath, StatsOAColourModel.class) + .map((MapFunction) usm -> { + Result r = new Result(); + r.setId("50|" + usm.getId()); + r.setMeasures(getMeasureOAColour(usm.isIs_gold(), usm.isIs_bronze_oa(), usm.isIs_hybrid())); + return r; + }, Encoders.bean(Result.class)); + } + + private static List getMeasure(Boolean is_model_oa, String model_type) { + DataInfo dataInfo = OafMapperUtils + .dataInfo( + false, + UPDATE_DATA_INFO_TYPE, + true, + false, + OafMapperUtils + .qualifier( + UPDATE_MEASURE_STATS_MODEL_CLASS_ID, + UPDATE_CLASS_NAME, + ModelConstants.DNET_PROVENANCE_ACTIONS, + ModelConstants.DNET_PROVENANCE_ACTIONS), + ""); + + return Arrays + .asList( + OafMapperUtils + .newMeasureInstance(model_type, String.valueOf(is_model_oa), UPDATE_KEY_STATS_MODEL, dataInfo)); + } + + private static List getMeasureOAColour(Boolean is_gold, Boolean is_bronze_oa, Boolean is_hybrid) { + DataInfo dataInfo = OafMapperUtils + .dataInfo( + false, + UPDATE_DATA_INFO_TYPE, + true, + false, + OafMapperUtils + .qualifier( + UPDATE_MEASURE_STATS_MODEL_CLASS_ID, + UPDATE_CLASS_NAME, + ModelConstants.DNET_PROVENANCE_ACTIONS, + ModelConstants.DNET_PROVENANCE_ACTIONS), + ""); + + return Arrays + .asList( + OafMapperUtils + .newMeasureInstance("is_gold", String.valueOf(is_gold), UPDATE_KEY_STATS_MODEL, dataInfo), + OafMapperUtils + .newMeasureInstance("is_bronze_oa", String.valueOf(is_bronze_oa), UPDATE_KEY_STATS_MODEL, dataInfo), + OafMapperUtils + .newMeasureInstance("is_hybrid", String.valueOf(is_hybrid), UPDATE_KEY_STATS_MODEL, dataInfo)); + + } + + private static void removeOutputDir(SparkSession spark, String path) { + HdfsSupport.remove(path, spark.sparkContext().hadoopConfiguration()); + } + + public static Dataset readPath( + SparkSession spark, String inputPath, Class clazz) { + return spark + .read() + .textFile(inputPath) + .map((MapFunction) value -> OBJECT_MAPPER.readValue(value, clazz), Encoders.bean(clazz)); + } + +} diff --git a/dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/stats_actionsets/StatsDiamondOAModel.java b/dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/stats_actionsets/StatsDiamondOAModel.java new file mode 100644 index 000000000..340790fa8 --- /dev/null +++ b/dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/stats_actionsets/StatsDiamondOAModel.java @@ -0,0 +1,29 @@ + +package eu.dnetlib.dhp.actionmanager.stats_actionsets; + +import java.io.Serializable; + +/** + * @author dimitris.pierrakos + * @Date 30/10/23 + */ +public class StatsDiamondOAModel implements Serializable { + private String id; + private boolean in_diamond_journal; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public boolean isIn_diamond_journal() { + return in_diamond_journal; + } + + public void setIn_diamond_journal(boolean in_diamond_journal) { + this.in_diamond_journal = in_diamond_journal; + } +} diff --git a/dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/stats_actionsets/StatsGreenOAModel.java b/dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/stats_actionsets/StatsGreenOAModel.java new file mode 100644 index 000000000..3d59bdf95 --- /dev/null +++ b/dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/stats_actionsets/StatsGreenOAModel.java @@ -0,0 +1,29 @@ + +package eu.dnetlib.dhp.actionmanager.stats_actionsets; + +import java.io.Serializable; + +/** + * @author dimitris.pierrakos + * @Date 30/10/23 + */ +public class StatsGreenOAModel implements Serializable { + private String id; + private boolean green_oa; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public boolean isGreen_oa() { + return green_oa; + } + + public void setGreen_oa(boolean green_oa) { + this.green_oa = green_oa; + } +} diff --git a/dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/stats_actionsets/StatsOAColourModel.java b/dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/stats_actionsets/StatsOAColourModel.java new file mode 100644 index 000000000..a83eb4f60 --- /dev/null +++ b/dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/stats_actionsets/StatsOAColourModel.java @@ -0,0 +1,47 @@ + +package eu.dnetlib.dhp.actionmanager.stats_actionsets; + +import java.io.Serializable; + +/** + * @author dimitris.pierrakos + * @Date 30/10/23 + */ +public class StatsOAColourModel implements Serializable { + private String id; + private boolean is_gold; + private boolean is_bronze_oa; + private boolean is_hybrid; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public boolean isIs_gold() { + return is_gold; + } + + public void setIs_gold(boolean is_gold) { + this.is_gold = is_gold; + } + + public boolean isIs_bronze_oa() { + return is_bronze_oa; + } + + public void setIs_bronze_oa(boolean is_bronze_oa) { + this.is_bronze_oa = is_bronze_oa; + } + + public boolean isIs_hybrid() { + return is_hybrid; + } + + public void setIs_hybrid(boolean is_hybrid) { + this.is_hybrid = is_hybrid; + } +} diff --git a/dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/stats_actionsets/StatsPubliclyFundedModel.java b/dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/stats_actionsets/StatsPubliclyFundedModel.java new file mode 100644 index 000000000..6bdc78220 --- /dev/null +++ b/dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/stats_actionsets/StatsPubliclyFundedModel.java @@ -0,0 +1,29 @@ + +package eu.dnetlib.dhp.actionmanager.stats_actionsets; + +import java.io.Serializable; + +/** + * @author dimitris.pierrakos + * @Date 30/10/23 + */ +public class StatsPubliclyFundedModel implements Serializable { + private String id; + private boolean publicly_funded; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public boolean isPublicly_funded() { + return publicly_funded; + } + + public void setPublicly_funded(boolean publicly_funded) { + this.publicly_funded = publicly_funded; + } +} diff --git a/dhp-workflows/dhp-stats-actionsets/src/main/resources/eu/dnetlib/dhp/actionmanager/stats_actionsets/input_actionset_parameter.json b/dhp-workflows/dhp-stats-actionsets/src/main/resources/eu/dnetlib/dhp/actionmanager/stats_actionsets/input_actionset_parameter.json new file mode 100644 index 000000000..bb24d4c99 --- /dev/null +++ b/dhp-workflows/dhp-stats-actionsets/src/main/resources/eu/dnetlib/dhp/actionmanager/stats_actionsets/input_actionset_parameter.json @@ -0,0 +1,32 @@ +[ + { + "paramName": "issm", + "paramLongName": "isSparkSessionManaged", + "paramDescription": "when true will stop SparkSession after job execution", + "paramRequired": false + }, + { + "paramName": "hmu", + "paramLongName": "hive_metastore_uris", + "paramDescription": "the URI for the hive metastore", + "paramRequired": true + }, + { + "paramName": "o", + "paramLongName": "outputPath", + "paramDescription": "the path of the new ActionSet", + "paramRequired": true + }, + { + "paramName": "sdb", + "paramLongName": "statsDB", + "paramDescription": "the name of the stats db to be used", + "paramRequired": true + }, + { + "paramName": "wp", + "paramLongName": "workingPath", + "paramDescription": "the workingPath where to save the content of the usage_stats table", + "paramRequired": true + } +] \ No newline at end of file diff --git a/dhp-workflows/dhp-stats-actionsets/src/main/resources/eu/dnetlib/dhp/actionmanager/stats_actionsets/oozie_app/config-default.xml b/dhp-workflows/dhp-stats-actionsets/src/main/resources/eu/dnetlib/dhp/actionmanager/stats_actionsets/oozie_app/config-default.xml new file mode 100644 index 000000000..d262cb6e0 --- /dev/null +++ b/dhp-workflows/dhp-stats-actionsets/src/main/resources/eu/dnetlib/dhp/actionmanager/stats_actionsets/oozie_app/config-default.xml @@ -0,0 +1,30 @@ + + + jobTracker + yarnRM + + + nameNode + hdfs://nameservice1 + + + oozie.use.system.libpath + true + + + hiveMetastoreUris + thrift://iis-cdh5-test-m3.ocean.icm.edu.pl:9083 + + + hiveJdbcUrl + jdbc:hive2://iis-cdh5-test-m3.ocean.icm.edu.pl:10000 + + + hiveDbName + openaire + + + oozie.launcher.mapreduce.user.classpath.first + true + + diff --git a/dhp-workflows/dhp-stats-actionsets/src/main/resources/eu/dnetlib/dhp/actionmanager/stats_actionsets/oozie_app/workflow.xml b/dhp-workflows/dhp-stats-actionsets/src/main/resources/eu/dnetlib/dhp/actionmanager/stats_actionsets/oozie_app/workflow.xml new file mode 100644 index 000000000..1aa4e1050 --- /dev/null +++ b/dhp-workflows/dhp-stats-actionsets/src/main/resources/eu/dnetlib/dhp/actionmanager/stats_actionsets/oozie_app/workflow.xml @@ -0,0 +1,125 @@ + + + + outputPath + the path where to store the actionset + + + statsDB + the name of the stats db to be used + + + sparkDriverMemory + memory for driver process + + + sparkExecutorMemory + memory for individual executor + + + sparkExecutorCores + number of cores used by single executor + + + oozieActionShareLibForSpark2 + oozie action sharelib for spark 2.* + + + spark2ExtraListeners + com.cloudera.spark.lineage.NavigatorAppListener + spark 2.* extra listeners classname + + + spark2SqlQueryExecutionListeners + com.cloudera.spark.lineage.NavigatorQueryListener + spark 2.* sql query execution listeners classname + + + spark2YarnHistoryServerAddress + spark 2.* yarn history server address + + + spark2EventLogDir + spark 2.* event log dir location + + + + + ${jobTracker} + ${nameNode} + + + mapreduce.job.queuename + ${queueName} + + + oozie.launcher.mapred.job.queue.name + ${oozieLauncherQueueName} + + + oozie.action.sharelib.for.spark + ${oozieActionShareLibForSpark2} + + + + + + + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + + + + yarn + cluster + Produces the atomic action with the usage stats count for results + + eu.dnetlib.dhp.actionmanager.stats_actionsets.SparkAtomicActionGreenOAJob + dhp-stats-actionsets-${projectVersion}.jar + + --executor-memory=${sparkExecutorMemory} + --executor-cores=${sparkExecutorCores} + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.sql.warehouse.dir=${sparkSqlWarehouseDir} + + --hive_metastore_uris${hiveMetastoreUris} + --outputPath${outputPath} + --statsDB${statsDB} + --workingPath${workingDir} + + + + + + + + yarn + cluster + Produces the atomic action with the stats green_oa for results + + eu.dnetlib.dhp.actionmanager.stats_actionsets.StatsAtomicActionsJob + dhp-stats-actionsets-${projectVersion}.jar + + --executor-memory=${sparkExecutorMemory} + --executor-cores=${sparkExecutorCores} + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.sql.warehouse.dir=${sparkSqlWarehouseDir} + + --hive_metastore_uris${hiveMetastoreUris} + --outputPath${outputPath} + --statsDB${statsDB} + --workingPath${workingDir} + + + + + + \ No newline at end of file diff --git a/dhp-workflows/dhp-stats-actionsets/src/main/resources/log4j.properties b/dhp-workflows/dhp-stats-actionsets/src/main/resources/log4j.properties new file mode 100644 index 000000000..81458d1f7 --- /dev/null +++ b/dhp-workflows/dhp-stats-actionsets/src/main/resources/log4j.properties @@ -0,0 +1,12 @@ +# Set root logger level to DEBUG and its only appender to A1. +log4j.rootLogger=INFO, A1 + +# A1 is set to be a ConsoleAppender. +log4j.appender.A1=org.apache.log4j.ConsoleAppender + +# A1 uses PatternLayout. +log4j.appender.A1.layout=org.apache.log4j.PatternLayout +log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n + +log4j.logger.org.apache.spark=FATAL +log4j.logger.org.spark_project=FATAL From a82aaf57b219faa880817cf18213b22944cb730b Mon Sep 17 00:00:00 2001 From: Serafeim Chatzopoulos Date: Wed, 25 Oct 2023 12:05:02 -0700 Subject: [PATCH 342/449] Renaming input param for crossref input path --- .../bipaffiliations/PrepareAffiliationRelations.java | 8 ++++---- .../bipaffiliations/input_actionset_parameter.json | 4 ++-- .../dhp/actionmanager/bipaffiliations/job.properties | 4 ++-- .../actionmanager/bipaffiliations/oozie_app/workflow.xml | 4 ++-- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelations.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelations.java index 18d98be54..1bdb06ecc 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelations.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelations.java @@ -58,8 +58,8 @@ public class PrepareAffiliationRelations implements Serializable { Boolean isSparkSessionManaged = Constants.isSparkSessionManaged(parser); log.info("isSparkSessionManaged: {}", isSparkSessionManaged); - final String inputPath = parser.get("inputPath"); - log.info("inputPath: {}", inputPath); + final String crossrefInputPath = parser.get("crossrefInputPath"); + log.info("crossrefInputPath: {}", crossrefInputPath); final String pubmedInputPath = parser.get("pubmedInputPath"); log.info("pubmedInputPath: {}", pubmedInputPath); @@ -78,12 +78,12 @@ public class PrepareAffiliationRelations implements Serializable { List collectedFromCrossref = OafMapperUtils .listKeyValues(ModelConstants.CROSSREF_ID, "Crossref"); JavaPairRDD crossrefRelations = prepareAffiliationRelations( - spark, inputPath, collectedFromCrossref); + spark, crossrefInputPath, collectedFromCrossref); List collectedFromPubmed = OafMapperUtils .listKeyValues(ModelConstants.PUBMED_CENTRAL_ID, "Pubmed"); JavaPairRDD pubmedRelations = prepareAffiliationRelations( - spark, inputPath, collectedFromPubmed); + spark, pubmedInputPath, collectedFromPubmed); crossrefRelations .union(pubmedRelations) diff --git a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/input_actionset_parameter.json b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/input_actionset_parameter.json index 96dcc3b32..c6f905199 100644 --- a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/input_actionset_parameter.json +++ b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/input_actionset_parameter.json @@ -6,8 +6,8 @@ "paramRequired": false }, { - "paramName": "ip", - "paramLongName": "inputPath", + "paramName": "cip", + "paramLongName": "crossrefInputPath", "paramDescription": "the path to get the input data from Crossref", "paramRequired": true }, diff --git a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/job.properties b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/job.properties index fe3cbb633..a3d55ff0c 100644 --- a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/job.properties +++ b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/job.properties @@ -31,6 +31,6 @@ spark2SqlQueryExecutionListeners=com.cloudera.spark.lineage.NavigatorQueryListen # The following is needed as a property of a workflow oozie.wf.application.path=${oozieTopWfApplicationPath} -inputPath=/data/bip-affiliations/data.json -pubmedInputPath=/data/bip-affiiations/pubmed-data.json +crossrefInputPath=/data/bip-affiliations/data.json +pubmedInputPath=/data/bip-affiliations/pubmed-data.json outputPath=/tmp/crossref-affiliations-output-v5 diff --git a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/oozie_app/workflow.xml b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/oozie_app/workflow.xml index e3fdddfd6..c5ac6f884 100644 --- a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/actionmanager/bipaffiliations/oozie_app/workflow.xml @@ -2,7 +2,7 @@ - inputPath + crossrefInputPath the path where to find the inferred affiliation relations from Crossref @@ -100,7 +100,7 @@ --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} --conf spark.sql.warehouse.dir=${sparkSqlWarehouseDir} - --inputPath${inputPath} + --crossrefInputPath${crossrefInputPath} --pubmedInputPath${pubmedInputPath} --outputPath${outputPath} From 2090003ea96dee43c3cd6c90f50f6d4a2b39a869 Mon Sep 17 00:00:00 2001 From: Serafeim Chatzopoulos Date: Thu, 26 Oct 2023 13:47:06 -0700 Subject: [PATCH 343/449] Adjust tests to new WF input params --- .../PrepareAffiliationRelationsTest.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelationsTest.java b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelationsTest.java index ed8e5fe0d..e2639996c 100644 --- a/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelationsTest.java +++ b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelationsTest.java @@ -74,17 +74,22 @@ public class PrepareAffiliationRelationsTest { @Test void testMatch() throws Exception { - String affiliationRelationsPath = getClass() + String crossrefAffiliationRelationPath = getClass() .getResource("/eu/dnetlib/dhp/actionmanager/bipaffiliations/doi_to_ror.json") .getPath(); + String pubmedAffiliationRelationsPath = getClass() + .getResource("/eu/dnetlib/dhp/actionmanager/bipaffiliations/doi_to_ror.json") + .getPath(); + String outputPath = workingDir.toString() + "/actionSet"; PrepareAffiliationRelations .main( new String[] { "-isSparkSessionManaged", Boolean.FALSE.toString(), - "-inputPath", affiliationRelationsPath, + "-crossrefInputPath", crossrefAffiliationRelationPath, + "-pubmedInputPath", pubmedAffiliationRelationsPath, "-outputPath", outputPath }); @@ -101,7 +106,7 @@ public class PrepareAffiliationRelationsTest { // ); // } // count the number of relations - assertEquals(20, tmp.count()); + assertEquals(40, tmp.count()); Dataset dataset = spark.createDataset(tmp.rdd(), Encoders.bean(Relation.class)); dataset.createOrReplaceTempView("result"); @@ -112,7 +117,7 @@ public class PrepareAffiliationRelationsTest { // verify that we have equal number of bi-directional relations Assertions .assertEquals( - 10, execVerification + 20, execVerification .filter( "relClass='" + ModelConstants.HAS_AUTHOR_INSTITUTION + "'") .collectAsList() @@ -120,7 +125,7 @@ public class PrepareAffiliationRelationsTest { Assertions .assertEquals( - 10, execVerification + 20, execVerification .filter( "relClass='" + ModelConstants.IS_AUTHOR_INSTITUTION_OF + "'") .collectAsList() From 262d7c581b56244cc3eab179bcb3ad82ba6174ae Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Tue, 31 Oct 2023 14:34:10 +0100 Subject: [PATCH 344/449] [graph cleaning] implemented further suggestions from https://support.openaire.eu/issues/8898 --- .../oaf/utils/GraphCleaningFunctions.java | 95 +++++++++++++++++-- .../graph/clean/CleanGraphSparkJobTest.java | 15 +++ .../clean/graph/publication/publication.json | 2 +- 3 files changed, 103 insertions(+), 9 deletions(-) diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java index b4402a2fb..e8bada028 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java @@ -3,16 +3,20 @@ package eu.dnetlib.dhp.schema.oaf.utils; import static eu.dnetlib.dhp.schema.oaf.utils.OafMapperUtils.getProvenance; +import java.net.MalformedURLException; +import java.net.URL; import java.time.LocalDate; import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; import java.util.*; import java.util.function.Function; +import java.util.function.Supplier; import java.util.stream.Collectors; import java.util.stream.Stream; import org.apache.commons.lang3.StringUtils; +import org.apache.cxf.common.util.UrlUtils; import com.github.sisyphsu.dateparser.DateParserUtils; import com.google.common.collect.Lists; @@ -23,6 +27,7 @@ import eu.dnetlib.dhp.schema.common.ModelConstants; import eu.dnetlib.dhp.schema.common.ModelSupport; import eu.dnetlib.dhp.schema.oaf.*; import me.xuender.unidecode.Unidecode; +import sun.awt.HKSCS; public class GraphCleaningFunctions extends CleaningFunctions { @@ -36,6 +41,13 @@ public class GraphCleaningFunctions extends CleaningFunctions { public static final int TITLE_FILTER_RESIDUAL_LENGTH = 5; private static final String NAME_CLEANING_REGEX = "[\\r\\n\\t\\s]+"; + + private static final Set INVALID_AUTHOR_NAMES = new HashSet<>(); + + private static final Set INVALID_URLS = new HashSet<>(); + + private static final Set INVALID_URL_HOSTS = new HashSet<>(); + private static final HashSet PEER_REVIEWED_TYPES = new HashSet<>(); static { @@ -48,6 +60,47 @@ public class GraphCleaningFunctions extends CleaningFunctions { PEER_REVIEWED_TYPES.add("Thesis"); PEER_REVIEWED_TYPES.add("Bachelor thesis"); PEER_REVIEWED_TYPES.add("Conference object"); + + INVALID_AUTHOR_NAMES.add("(:null)"); + INVALID_AUTHOR_NAMES.add("(:unap)"); + INVALID_AUTHOR_NAMES.add("(:tba)"); + INVALID_AUTHOR_NAMES.add("(:unas)"); + INVALID_AUTHOR_NAMES.add("(:unav)"); + INVALID_AUTHOR_NAMES.add("(:unkn)"); + INVALID_AUTHOR_NAMES.add("(:unkn) unknown"); + INVALID_AUTHOR_NAMES.add(":none"); + INVALID_AUTHOR_NAMES.add(":null"); + INVALID_AUTHOR_NAMES.add(":unas"); + INVALID_AUTHOR_NAMES.add(":unav"); + INVALID_AUTHOR_NAMES.add(":unkn"); + INVALID_AUTHOR_NAMES.add("[autor desconocido]"); + INVALID_AUTHOR_NAMES.add("[s. n.]"); + INVALID_AUTHOR_NAMES.add("[s.n]"); + INVALID_AUTHOR_NAMES.add("[unknown]"); + INVALID_AUTHOR_NAMES.add("anonymous"); + INVALID_AUTHOR_NAMES.add("n.n."); + INVALID_AUTHOR_NAMES.add("nn"); + INVALID_AUTHOR_NAMES.add("no name supplied"); + INVALID_AUTHOR_NAMES.add("none"); + INVALID_AUTHOR_NAMES.add("none available"); + INVALID_AUTHOR_NAMES.add("not available not available"); + INVALID_AUTHOR_NAMES.add("null &na;"); + INVALID_AUTHOR_NAMES.add("null anonymous"); + INVALID_AUTHOR_NAMES.add("unbekannt"); + INVALID_AUTHOR_NAMES.add("unknown"); + + INVALID_URL_HOSTS.add("creativecommons.org"); + INVALID_URL_HOSTS.add("www.academia.edu"); + INVALID_URL_HOSTS.add("academia.edu"); + INVALID_URL_HOSTS.add("researchgate.net"); + INVALID_URL_HOSTS.add("www.researchgate.net"); + + INVALID_URLS.add("http://repo.scoap3.org/api"); + INVALID_URLS.add("http://ora.ox.ac.uk/objects/uuid:"); + INVALID_URLS.add("http://ntur.lib.ntu.edu.tw/news/agent_contract.pdf"); + INVALID_URLS.add("https://media.springer.com/full/springer-instructions-for-authors-assets/pdf/SN_BPF_EN.pdf"); + INVALID_URLS.add("http://www.tobaccoinduceddiseases.org/dl/61aad426c96519bea4040a374c6a6110/"); + INVALID_URLS.add("https://www.bilboard.nl/verenigingsbladen/bestuurskundige-berichten"); } public static T cleanContext(T value, String contextId, String verifyParam) { @@ -558,6 +611,15 @@ public class GraphCleaningFunctions extends CleaningFunctions { ModelConstants.DATASET_RESULTTYPE_CLASSID.equals(r.getResulttype().getClassid()))) { i.setFulltext(null); } + if (Objects.nonNull(i.getUrl())) { + i + .setUrl( + i + .getUrl() + .stream() + .filter(GraphCleaningFunctions::urlFilter) + .collect(Collectors.toList())); + } } } if (Objects.isNull(r.getBestaccessright()) @@ -580,8 +642,7 @@ public class GraphCleaningFunctions extends CleaningFunctions { .getAuthor() .stream() .filter(Objects::nonNull) - .filter(a -> StringUtils.isNotBlank(a.getFullname())) - .filter(a -> StringUtils.isNotBlank(a.getFullname().replaceAll("[\\W]", ""))) + .filter(GraphCleaningFunctions::isValidAuthorName) .map(GraphCleaningFunctions::cleanupAuthor) .collect(Collectors.toList())); @@ -739,12 +800,30 @@ public class GraphCleaningFunctions extends CleaningFunctions { // HELPERS private static boolean isValidAuthorName(Author a) { - return !Stream - .of(a.getFullname(), a.getName(), a.getSurname()) - .filter(s -> s != null && !s.isEmpty()) - .collect(Collectors.joining("")) - .toLowerCase() - .matches(INVALID_AUTHOR_REGEX); + return StringUtils.isNotBlank(a.getFullname()) && + StringUtils.isNotBlank(a.getFullname().replaceAll("[\\W]", "")) && + !INVALID_AUTHOR_NAMES.contains(StringUtils.lowerCase(a.getFullname()).trim()) && + !Stream + .of(a.getFullname(), a.getName(), a.getSurname()) + .filter(StringUtils::isNotBlank) + .collect(Collectors.joining("")) + .toLowerCase() + .matches(INVALID_AUTHOR_REGEX); + } + + private static boolean urlFilter(String u) { + try { + final URL url = new URL(u); + if (StringUtils.isBlank(url.getPath()) || "/".equals(url.getPath())) { + return false; + } + if (INVALID_URL_HOSTS.contains(url.getHost())) { + return false; + } + return !INVALID_URLS.contains(url.toString()); + } catch (MalformedURLException ex) { + return false; + } } private static List processPidCleaning(List pids) { diff --git a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/CleanGraphSparkJobTest.java b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/CleanGraphSparkJobTest.java index 65182108e..a1a4c29cd 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/CleanGraphSparkJobTest.java +++ b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/CleanGraphSparkJobTest.java @@ -251,9 +251,19 @@ public class CleanGraphSparkJobTest { .filter(String.format("id = '%s'", id)) .first(); + final Set invalidURLs = new HashSet<>(); + invalidURLs.add("http://academia.edu/abcd"); + invalidURLs.add("http://repo.scoap3.org/api"); + invalidURLs.add("http://hdl.handle.net/"); + assertNull(p_in.getBestaccessright()); assertTrue(p_in instanceof Result); assertTrue(p_in instanceof Publication); + assertNotNull(p_in.getAuthor()); + assertEquals(14, p_in.getAuthor().size()); + assertNotNull(p_in.getInstance()); + assertNotNull(p_in.getInstance().get(0)); + assertEquals(3, p_in.getInstance().get(0).getUrl().stream().filter(invalidURLs::contains).count()); new CleanGraphSparkJob( args( @@ -273,6 +283,9 @@ public class CleanGraphSparkJobTest { assertNull(p.getPublisher()); + assertNotNull(p.getAuthor()); + assertEquals(12, p.getAuthor().size()); + assertEquals("und", p.getLanguage().getClassid()); assertEquals("Undetermined", p.getLanguage().getClassname()); @@ -364,6 +377,8 @@ public class CleanGraphSparkJobTest { .stream() .anyMatch(s -> s.getValue().equals("10.1009/qwerty"))); + assertTrue(p.getInstance().get(0).getUrl().stream().noneMatch(invalidURLs::contains)); + assertNotNull(p.getSubject()); List fos_subjects = p diff --git a/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/graph/publication/publication.json b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/graph/publication/publication.json index e5d7c88db..e2a2b9449 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/graph/publication/publication.json +++ b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/graph/publication/publication.json @@ -1,4 +1,4 @@ -{"id":"50|CSC_________::2250a70c903c6ac6e4c01438259e9375","author":[{"affiliation":[],"fullname":"Brien, Tom","name":"Tom","pid":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"ORCID12","classname":"ORCID12","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"0000-0001-9613-6639"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"ORCID12","classname":"ORCID12","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"https://orcid.org/0000-0001-9613-6639"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:entityregistry","classname":"sysimport:crosswalk:entityregistry","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"orcid","classname":"ORCID12","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"0000-0001-9613-6639"}],"rank":1,"surname":"Brien"},{"affiliation":[],"fullname":"Ade, Peter","name":"Peter","pid":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"xyz","classname":"XYZ","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"qwerty"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"","schemename":""},"value":"asdasd"}],"rank":2,"surname":"Ade"},{"affiliation":[],"fullname":"Barry, Peter S.","name":"Peter S.","pid":null,"rank":3,"surname":"Barry"},{"affiliation":[],"fullname":"Dunscombe, Chris J.","name":"Chris J.","pid":[],"rank":4,"surname":"Dunscombe"},{"affiliation":[],"fullname":"Leadley, David R.","name":"David R.","pid":[],"rank":5,"surname":"Leadley"},{"affiliation":[],"fullname":"Morozov, Dmitry V.","name":"Dmitry V.","pid":[],"rank":6,"surname":"Morozov"},{"affiliation":[],"fullname":"Myronov, Maksym","name":"Maksym","pid":[],"rank":7,"surname":"Myronov"},{"affiliation":[],"fullname":"Parker, Evan","name":"Evan","pid":[],"rank":8,"surname":"Parker"},{"affiliation":[],"fullname":"Prest, Martin J.","name":"Martin J.","pid":[],"rank":9,"surname":"Prest"},{"affiliation":[],"fullname":"Prunnila, Mika","name":"Mika","pid":[],"rank":10,"surname":"Prunnila"},{"affiliation":[],"fullname":"Sudiwala, Rashmi V.","name":"Rashmi V.","pid":[],"rank":11,"surname":"Sudiwala"},{"affiliation":[],"fullname":"Whall, Terry E.","name":"Terry E.","pid":[],"rank":12,"surname":"Whall"},{"affiliation":[],"fullname":"Mauskopf","name":"","pid":[],"rank":13,"surname":""},{"affiliation":[],"fullname":" P. D. ","name":"","pid":[],"rank":14,"surname":""}],"bestaccessright":null,"publisher":{"value":null},"collectedfrom":[{"key":"10|CSC_________::a2b9ce8435390bcbfc05f3cae3948747","value":"VIRTA"}],"context":[],"contributor":[],"country":[{"classid":"DE","classname":"DE","schemeid":"dnet:countries","schemename":"dnet:countries"}],"coverage":[],"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"dateofacceptance":{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"7 oct 1970"},"dateofcollection":"","dateoftransformation":"2020-04-22T12:34:08.009Z","description":[],"externalReference":[],"extraInfo":[],"format":[],"fulltext":[],"instance":[{"pid":[{"dataInfo":null,"qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.1007/s109090161569x"},{"dataInfo":null,"qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.1008/abcd"}],"alternateIdentifier":[{"dataInfo":null,"qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.1007/s109090161569x"},{"dataInfo":null,"qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.1009/qwerty"}],"accessright":{"classid":"CLOSED","classname":"CLOSED","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"collectedfrom":{"key":"10|CSC_________::a2b9ce8435390bcbfc05f3cae3948747","value":"VIRTA"},"dateofacceptance":{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"2016-01-01"},"distributionlocation":"","hostedby":{"key":"10|CSC_________::a2b9ce8435390bcbfc05f3cae3948747","value":"VIRTA"},"instancetype":{"classid":"Comment/debate","classname":"Comment/debate","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"url":["http://juuli.fi/Record/0275158616","http://dx.doi.org/10.1007/s109090161569x"]},{"pid":[{"dataInfo":null,"qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.1002/s21010127267xy"},{"dataInfo":null,"qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.1008/abcd"}],"alternateIdentifier":[{"dataInfo":null,"qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.1007/s109090161569x"},{"dataInfo":null,"qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.1009/qwerty"}],"accessright":{"classid":"CLOSED","classname":"CLOSED","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"collectedfrom":{"key":"10|CSC_________::a2b9ce8435390bcbfc05f3cae3948747","value":"VIRTA"},"dateofacceptance":{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"2016-01-01"},"distributionlocation":"","hostedby":{"key":"10|CSC_________::a2b9ce8435390bcbfc05f3cae3948747","value":"VIRTA"},"instancetype":{"classid":"Model","classname":"Model","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"url":["http://dx.doi.org/10.1002/s21010127267xy"]},{"pid":[{"dataInfo":null,"qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.1002/s21010127267xy"},{"dataInfo":null,"qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.1008/abcd"}],"alternateIdentifier":[{"dataInfo":null,"qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.1007/s109090161569x"},{"dataInfo":null,"qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.1009/qwerty"}],"accessright":{"classid":"CLOSED","classname":"CLOSED","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"collectedfrom":{"key":"10|CSC_________::a2b9ce8435390bcbfc05f3cae3948747","value":"VIRTA"},"dateofacceptance":{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"2016-01-01"},"distributionlocation":"","hostedby":{"key":"10|CSC_________::a2b9ce8435390bcbfc05f3cae3948747","value":"VIRTA"},"instancetype":{"classid":"xyz","classname":"xyz","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"url":["http://dx.doi.org/10.1002/t32121238378t"]}],"journal":{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"edition":"","ep":" 7","iss":"9 March","issnLinking":"","issnOnline":"","issnPrinted":"0022-2291","name":"Journal of Low Temperature Physics - Early Acces","sp":"1 ","vol":""},"language":{"classid":"UNKNOWN","classname":"UNKNOWN","schemeid":"dnet:languages","schemename":"dnet:languages"},"lastupdatetimestamp":1591283286319,"oaiprovenance":{"originDescription":{"altered":true,"baseURL":"https%3A%2F%2Fvirta-jtp.csc.fi%2Fapi%2Fcerif","datestamp":"2019-07-30","harvestDate":"2020-04-22T11:04:38.685Z","identifier":"oai:virta-jtp.csc.fi:Publications/0275158616","metadataNamespace":""}},"originalId":["CSC_________::2250a70c903c6ac6e4c01438259e9375"],"pid":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.1007/s109090161569x"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.1007/s109090161569x"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":""}],"relevantdate":[],"resourcetype":{"classid":"0001","classname":"0001","schemeid":"dnet:dataCite_resource","schemename":"dnet:dataCite_resource"},"resulttype":{"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"source":[],"subject":[{"dataInfo":{"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"deletedbyinference":false,"inferred":false,"inferenceprovenance":"","invisible":false,"trust":"0.9"},"qualifier":{"classid":"FOS","classname":"Fields of Science and Technology classification","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"value":"In Situ Hybridization"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"value":"ta213"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"FOS: Mathematics"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"FOS: Computer and information sciences"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"0101 mathematics"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"subject:fos","classname":"subject:fos","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"0101 mathematics"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"value":"slot antennas"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"value":"strained silicon"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"value":"cold electron bolometers"},{"dataInfo":{"deletedbyinference":false,"inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:actionset","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"FOS","classname":"Fields of Science and Technology classification","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"Avicennia"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"value":"measure noise"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"value":"noise equivalent power"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"value":"optical characterisation"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"value":"optical response"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"value":"photon noise"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"value":"silicon absorbers"}],"title":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"value":"Optical response of strained- and unstrained-silicon cold-electron bolometers test"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"value":"test test 123 test"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"value":"omic"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"value":"「マキャベリ的知性と心の理論の進化論」 リチャード・バーン, アンドリュー・ホワイトゥン 編/藤田和生, 山下博志, 友永雅巳 監訳"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"value":"-"}]} +{"id":"50|CSC_________::2250a70c903c6ac6e4c01438259e9375","author":[{"affiliation":[],"fullname":"Brien, Tom","name":"Tom","pid":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"ORCID12","classname":"ORCID12","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"0000-0001-9613-6639"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"ORCID12","classname":"ORCID12","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"https://orcid.org/0000-0001-9613-6639"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:entityregistry","classname":"sysimport:crosswalk:entityregistry","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"orcid","classname":"ORCID12","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"0000-0001-9613-6639"}],"rank":1,"surname":"Brien"},{"affiliation":[],"fullname":"Ade, Peter","name":"Peter","pid":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"xyz","classname":"XYZ","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"qwerty"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"","schemename":""},"value":"asdasd"}],"rank":2,"surname":"Ade"},{"affiliation":[],"fullname":"Barry, Peter S.","name":"Peter S.","pid":null,"rank":3,"surname":"Barry"},{"affiliation":[],"fullname":"Dunscombe, Chris J.","name":"Chris J.","pid":[],"rank":4,"surname":"Dunscombe"},{"affiliation":[],"fullname":"Leadley, David R.","name":"David R.","pid":[],"rank":5,"surname":"Leadley"},{"affiliation":[],"fullname":"Morozov, Dmitry V.","name":"Dmitry V.","pid":[],"rank":6,"surname":"Morozov"},{"affiliation":[],"fullname":"Myronov, Maksym","name":"Maksym","pid":[],"rank":7,"surname":"Myronov"},{"affiliation":[],"fullname":"Parker, Evan","name":"Evan","pid":[],"rank":8,"surname":"Parker"},{"affiliation":[],"fullname":"Prest, Martin J.","name":"Martin J.","pid":[],"rank":9,"surname":"Prest"},{"affiliation":[],"fullname":"Prunnila, Mika","name":"Mika","pid":[],"rank":10,"surname":"Prunnila"},{"affiliation":[],"fullname":"Sudiwala, Rashmi V.","name":"Rashmi V.","pid":[],"rank":11,"surname":"Sudiwala"},{"affiliation":[],"fullname":"Whall, Terry E.","name":"Terry E.","pid":[],"rank":12,"surname":"Whall"},{"affiliation":[],"fullname":" - ","name":"","pid":[],"rank":13,"surname":""},{"affiliation":[],"fullname":" :none","name":"","pid":[],"rank":14,"surname":""}],"bestaccessright":null,"publisher":{"value":null},"collectedfrom":[{"key":"10|CSC_________::a2b9ce8435390bcbfc05f3cae3948747","value":"VIRTA"}],"context":[],"contributor":[],"country":[{"classid":"DE","classname":"DE","schemeid":"dnet:countries","schemename":"dnet:countries"}],"coverage":[],"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"dateofacceptance":{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"7 oct 1970"},"dateofcollection":"","dateoftransformation":"2020-04-22T12:34:08.009Z","description":[],"externalReference":[],"extraInfo":[],"format":[],"fulltext":[],"instance":[{"pid":[{"dataInfo":null,"qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.1007/s109090161569x"},{"dataInfo":null,"qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.1008/abcd"}],"alternateIdentifier":[{"dataInfo":null,"qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.1007/s109090161569x"},{"dataInfo":null,"qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.1009/qwerty"}],"accessright":{"classid":"CLOSED","classname":"CLOSED","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"collectedfrom":{"key":"10|CSC_________::a2b9ce8435390bcbfc05f3cae3948747","value":"VIRTA"},"dateofacceptance":{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"2016-01-01"},"distributionlocation":"","hostedby":{"key":"10|CSC_________::a2b9ce8435390bcbfc05f3cae3948747","value":"VIRTA"},"instancetype":{"classid":"Comment/debate","classname":"Comment/debate","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"url":["http://juuli.fi/Record/0275158616","http://dx.doi.org/10.1007/s109090161569x","http://academia.edu/abcd","http://repo.scoap3.org/api","http://hdl.handle.net/"]},{"pid":[{"dataInfo":null,"qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.1002/s21010127267xy"},{"dataInfo":null,"qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.1008/abcd"}],"alternateIdentifier":[{"dataInfo":null,"qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.1007/s109090161569x"},{"dataInfo":null,"qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.1009/qwerty"}],"accessright":{"classid":"CLOSED","classname":"CLOSED","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"collectedfrom":{"key":"10|CSC_________::a2b9ce8435390bcbfc05f3cae3948747","value":"VIRTA"},"dateofacceptance":{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"2016-01-01"},"distributionlocation":"","hostedby":{"key":"10|CSC_________::a2b9ce8435390bcbfc05f3cae3948747","value":"VIRTA"},"instancetype":{"classid":"Model","classname":"Model","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"url":["http://dx.doi.org/10.1002/s21010127267xy"]},{"pid":[{"dataInfo":null,"qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.1002/s21010127267xy"},{"dataInfo":null,"qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.1008/abcd"}],"alternateIdentifier":[{"dataInfo":null,"qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.1007/s109090161569x"},{"dataInfo":null,"qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.1009/qwerty"}],"accessright":{"classid":"CLOSED","classname":"CLOSED","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"collectedfrom":{"key":"10|CSC_________::a2b9ce8435390bcbfc05f3cae3948747","value":"VIRTA"},"dateofacceptance":{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"2016-01-01"},"distributionlocation":"","hostedby":{"key":"10|CSC_________::a2b9ce8435390bcbfc05f3cae3948747","value":"VIRTA"},"instancetype":{"classid":"xyz","classname":"xyz","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"url":["http://dx.doi.org/10.1002/t32121238378t"]}],"journal":{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"edition":"","ep":" 7","iss":"9 March","issnLinking":"","issnOnline":"","issnPrinted":"0022-2291","name":"Journal of Low Temperature Physics - Early Acces","sp":"1 ","vol":""},"language":{"classid":"UNKNOWN","classname":"UNKNOWN","schemeid":"dnet:languages","schemename":"dnet:languages"},"lastupdatetimestamp":1591283286319,"oaiprovenance":{"originDescription":{"altered":true,"baseURL":"https%3A%2F%2Fvirta-jtp.csc.fi%2Fapi%2Fcerif","datestamp":"2019-07-30","harvestDate":"2020-04-22T11:04:38.685Z","identifier":"oai:virta-jtp.csc.fi:Publications/0275158616","metadataNamespace":""}},"originalId":["CSC_________::2250a70c903c6ac6e4c01438259e9375"],"pid":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.1007/s109090161569x"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.1007/s109090161569x"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":""}],"relevantdate":[],"resourcetype":{"classid":"0001","classname":"0001","schemeid":"dnet:dataCite_resource","schemename":"dnet:dataCite_resource"},"resulttype":{"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"source":[],"subject":[{"dataInfo":{"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"deletedbyinference":false,"inferred":false,"inferenceprovenance":"","invisible":false,"trust":"0.9"},"qualifier":{"classid":"FOS","classname":"Fields of Science and Technology classification","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"value":"In Situ Hybridization"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"value":"ta213"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"FOS: Mathematics"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"FOS: Computer and information sciences"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"0101 mathematics"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"subject:fos","classname":"subject:fos","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"0101 mathematics"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"value":"slot antennas"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"value":"strained silicon"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"value":"cold electron bolometers"},{"dataInfo":{"deletedbyinference":false,"inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:actionset","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"FOS","classname":"Fields of Science and Technology classification","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"Avicennia"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"value":"measure noise"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"value":"noise equivalent power"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"value":"optical characterisation"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"value":"optical response"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"value":"photon noise"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"value":"silicon absorbers"}],"title":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"value":"Optical response of strained- and unstrained-silicon cold-electron bolometers test"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"value":"test test 123 test"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"value":"omic"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"value":"「マキャベリ的知性と心の理論の進化論」 リチャード・バーン, アンドリュー・ホワイトゥン 編/藤田和生, 山下博志, 友永雅巳 監訳"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"value":"-"}]} {"id":"50|doi_________::b0baa0eb88a5788f0b8815560d2a32f2","context": [], "dataInfo": {"invisible": false, "trust": "0.9", "provenanceaction": {"classid": "sysimport:actionset", "classname": "sysimport:actionset", "schemeid": "dnet:provenanceActions", "schemename": "dnet:provenanceActions"}, "inferred": false, "deletedbyinference": false}, "resourcetype": {"classid": "0001", "classname": "Article", "schemeid": "dnet:publication_resource", "schemename": "dnet:publication_resource"}, "pid": [{"qualifier": {"classid": "doi", "classname": "doi", "schemeid": "dnet:pid_types", "schemename": "dnet:pid_types"}, "value": "10.1097/00132586-197308000-00003"}], "contributor": [], "bestaccessright": {"classid": "UNKNOWN", "classname": "not available", "schemeid": "dnet:access_modes", "schemename": "dnet:access_modes"}, "relevantdate": [{"qualifier": {"classid": "created", "classname": "created", "schemeid": "dnet:dataCite_date", "schemename": "dnet:dataCite_date"}, "value": "2006-11-06T11:36:37Z"}], "collectedfrom": [{"key": "10|openaire____::081b82f96300b6a6e3d282bad31cb6e2", "value": "Crossref"}], "subject": [], "lastupdatetimestamp": 1620353302565, "author": [{"fullname": "N. S. AGRUSS", "surname": "AGRUSS", "name": "N. S.", "rank": 1}, {"fullname": "E. Y. ROSIN", "surname": "ROSIN", "name": "E. Y.", "rank": 2}, {"fullname": "R. J. ADOLPH", "surname": "ADOLPH", "name": "R. J.", "rank": 3}, {"fullname": "N. O. FOWLER", "surname": "FOWLER", "name": "N. O.", "rank": 4}], "instance": [{"hostedby": {"key": "10|issn___print::b8cee613d4f898f8c03956d57ea69be2", "value": "Survey of Anesthesiology"}, "url": ["https://doi.org/10.1097/00132586-197308000-00003"], "pid": [{"qualifier": {"classid": "doi", "classname": "doi", "schemeid": "dnet:pid_types", "schemename": "dnet:pid_types"}, "value": "10.1097/00132586-197308000-00003"}], "dateofacceptance": {"value": "2006-11-06T11:36:37Z"}, "collectedfrom": {"key": "10|openaire____::081b82f96300b6a6e3d282bad31cb6e2", "value": "Crossref"}, "accessright": {"classid": "UNKNOWN", "classname": "not available", "schemeid": "dnet:access_modes", "schemename": "dnet:access_modes"}, "instancetype": {"classid": "0001", "classname": "Article", "schemeid": "dnet:publication_resource", "schemename": "dnet:publication_resource"}}], "dateofcollection": "2021-05-07T02:08:22Z", "fulltext": [], "description": [], "format": [], "journal": {"issnPrinted": "0039-6206", "vol": "17", "sp": "304", "name": "Survey of Anesthesiology"}, "measures": [], "coverage": [], "externalReference": [], "publisher": {"value": "Ovid Technologies (Wolters Kluwer Health)"}, "resulttype": {"classid": "publication", "classname": "publication", "schemeid": "dnet:result_typologies", "schemename": "dnet:result_typologies"}, "country": [], "extraInfo": [], "originalId": ["10.1097/00132586-197308000-00003", "50|doiboost____::b0baa0eb88a5788f0b8815560d2a32f2"], "source": [{"value": "Crossref"}], "dateofacceptance": {"value": "2006-11-06T11:36:37Z"}, "title": [{"qualifier": {"classid": "main title", "classname": "main title", "schemeid": "dnet:dataCite_title", "schemename": "dnet:dataCite_title"}, "value": "SIGNIFICANCE OF CHRONIC SINUS BRADYCARDIA IN ELDERLY PEOPLE"}]} {"id":"50|doi_________::4972b0ca81b96b225aed8038bb965656","context": [], "dataInfo": {"invisible": false, "trust": "0.9", "provenanceaction": {"classid": "sysimport:actionset", "classname": "sysimport:actionset", "schemeid": "dnet:provenanceActions", "schemename": "dnet:provenanceActions"}, "inferred": false, "deletedbyinference": false}, "resourcetype": {"classid": "0001", "classname": "Article", "schemeid": "dnet:publication_resource", "schemename": "dnet:publication_resource"}, "pid": [{"qualifier": {"classid": "doi", "classname": "doi", "schemeid": "dnet:pid_types", "schemename": "dnet:pid_types"}, "value": "10.2143/tvg.62.1.5002364"}], "contributor": [], "bestaccessright": {"classid": "UNKNOWN", "classname": "not available", "schemeid": "dnet:access_modes", "schemename": "dnet:access_modes"}, "relevantdate": [{"qualifier": {"classid": "created", "classname": "created", "schemeid": "dnet:dataCite_date", "schemename": "dnet:dataCite_date"}, "value": "2007-08-20T08:35:04Z"}, {"qualifier": {"classid": "published-online", "classname": "published-online", "schemeid": "dnet:dataCite_date", "schemename": "dnet:dataCite_date"}, "value": "2006-01-01"}], "collectedfrom": [{"key": "10|openaire____::081b82f96300b6a6e3d282bad31cb6e2", "value": "Crossref"}], "subject": [{"qualifier": {"classid": "keywords", "classname": "keywords", "schemeid": "dnet:subject_classification_typologies", "schemename": "dnet:subject_classification_typologies"}, "value": "General Medicine"}], "lastupdatetimestamp": 1620381522840, "author": [{"fullname": "null VERHAMME P", "surname": "VERHAMME P", "rank": 1}], "instance": [{"hostedby": {"key": "10|issn__online::7ec728ad1ac65c60cd563a5137111125", "value": "Tijdschrift voor Geneeskunde"}, "url": ["https://doi.org/10.2143/tvg.62.1.5002364"], "pid": [{"qualifier": {"classid": "doi", "classname": "doi", "schemeid": "dnet:pid_types", "schemename": "dnet:pid_types"}, "value": "10.2143/tvg.62.1.5002364"}], "dateofacceptance": {"value": "2006-01-01"}, "collectedfrom": {"key": "10|openaire____::081b82f96300b6a6e3d282bad31cb6e2", "value": "Crossref"}, "accessright": {"classid": "UNKNOWN", "classname": "not available", "schemeid": "dnet:access_modes", "schemename": "dnet:access_modes"}, "instancetype": {"classid": "0001", "classname": "Article", "schemeid": "dnet:publication_resource", "schemename": "dnet:publication_resource"}}], "dateofcollection": "2021-05-07T09:58:42Z", "fulltext": [], "description": [], "format": [], "journal": {"vol": "62", "sp": "55", "issnOnline": "0371-683X", "ep": "61", "name": "Tijdschrift voor Geneeskunde"}, "measures": [], "coverage": [], "externalReference": [], "publisher": {"value": "Peeters Publishers"}, "resulttype": {"classid": "publication", "classname": "publication", "schemeid": "dnet:result_typologies", "schemename": "dnet:result_typologies"}, "country": [], "extraInfo": [], "originalId": ["10.2143/tvg.62.1.5002364", "50|doiboost____::4972b0ca81b96b225aed8038bb965656"], "source": [{"value": "Crossref"}], "dateofacceptance": {"value": "2006-01-01"}, "title": [{"qualifier": {"classid": "main title", "classname": "main title", "schemeid": "dnet:dataCite_title", "schemename": "dnet:dataCite_title"}, "value": "Antitrombotica: nieuwe moleculen"}]} {"id":"50|DansKnawCris::0224aae28af558f21768dbc6439a_ctx","author":[],"bestaccessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"collectedfrom":[{"dataInfo":null,"key":"10|openaire____::c6df70599aa984f16ee52b4b86d2e89f","value":"DANS (Data Archiving and Networked Services)"}],"context":[{"dataInfo":[{"deletedbyinference":false,"inferenceprovenance":"bulktagging","inferred":true,"invisible":false,"provenanceaction":{"classid":"community:subject","classname":"Bulktagging for Community - Subject","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":null}],"id":"sobigdata::projects::2"}],"contributor":[],"country":[],"coverage":[],"dataInfo":{"deletedbyinference":true,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"dateofacceptance":{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"2007-01-01"},"dateofcollection":"","dateoftransformation":"2020-05-25T16:14:18.452Z","description":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"Lit.opg., bijl."}],"embargoenddate":null,"externalReference":[],"extraInfo":[],"format":[],"fulltext":[],"instance":[{"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"collectedfrom":{"dataInfo":null,"key":"10|openaire____::c6df70599aa984f16ee52b4b86d2e89f","value":"DANS (Data Archiving and Networked Services)"},"dateofacceptance":{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"2007-01-01"},"distributionlocation":"","hostedby":{"dataInfo":null,"key":"10|openaire____::c6df70599aa984f16ee52b4b86d2e89f","value":"DANS (Data Archiving and Networked Services)"},"instancetype":{"classid":"0017","classname":"Report","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"license":null,"processingchargeamount":{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":true,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"8250"},"processingchargecurrency":{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":true,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"EUR"},"refereed":null,"url":null}],"language":{"classid":"nl","classname":"nl","schemeid":"dnet:languages","schemename":"dnet:languages"},"lastupdatetimestamp":1591282676557,"oaiprovenance":{"originDescription":{"altered":true,"baseURL":"http%3A%2F%2Fservices.nod.dans.knaw.nl%2Foa-cerif","datestamp":"2019-12-01T07:51:24Z","harvestDate":"2020-05-25T11:33:13.427Z","identifier":"oai:services.nod.dans.knaw.nl:Publications/rce:document:550013110","metadataNamespace":""}},"originalId":["DansKnawCris::0224aae28af558f21768dbc6439c7a95"],"pid":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"urn","classname":"urn","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"http://cultureelerfgoed.adlibsoft.com/dispatcher.aspx?action=search&database=ChoiceRapporten&search=priref=550013110"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"urn","classname":"urn","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"http://cultureelerfgoed.adlibsoft.com/dispatcher.aspx?action=search&database=ChoiceRapporten&search=priref=550013110"}],"publisher":null,"relevantdate":[],"resourcetype":{"classid":"0017","classname":"0017","schemeid":"dnet:dataCite_resource","schemename":"dnet:dataCite_resource"},"resulttype":{"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"source":[],"subject":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"value":"archeologie"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"value":"prospectie"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"value":"Archaeology"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"value":"Archaeology"}],"title":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"value":"Gcube veldonderzoek d.m.v. boringen (karterende fase) : Raadhuisstraat te Dirkshorn, gemeente Harenkarspel"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"value":"Synthegra Archeologie Rapportenreeks P0502381"}],"journal":null} From dde2fec0357eccbbc8b0fad1391ad070eb36cad9 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Tue, 31 Oct 2023 14:35:33 +0100 Subject: [PATCH 345/449] [graph cleaning] cleanup --- .../dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java index e8bada028..7a8acbd36 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java @@ -11,12 +11,10 @@ import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; import java.util.*; import java.util.function.Function; -import java.util.function.Supplier; import java.util.stream.Collectors; import java.util.stream.Stream; import org.apache.commons.lang3.StringUtils; -import org.apache.cxf.common.util.UrlUtils; import com.github.sisyphsu.dateparser.DateParserUtils; import com.google.common.collect.Lists; @@ -27,7 +25,6 @@ import eu.dnetlib.dhp.schema.common.ModelConstants; import eu.dnetlib.dhp.schema.common.ModelSupport; import eu.dnetlib.dhp.schema.oaf.*; import me.xuender.unidecode.Unidecode; -import sun.awt.HKSCS; public class GraphCleaningFunctions extends CleaningFunctions { From c80b768af062166e4ae94abcf529af0aac994b7b Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Tue, 31 Oct 2023 15:49:42 +0100 Subject: [PATCH 346/449] test for project propagation --- .../PrepareResultCommunitySet.java | 2 +- .../PrepareAssocTest.java | 14 +- .../ResultToCommunityJobTest.java | 257 ++---------------- 3 files changed, 36 insertions(+), 237 deletions(-) diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/PrepareResultCommunitySet.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/PrepareResultCommunitySet.java index c47075272..9a2f25fa6 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/PrepareResultCommunitySet.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/PrepareResultCommunitySet.java @@ -56,7 +56,7 @@ public class PrepareResultCommunitySet { log.info("production: {}", production); final CommunityEntityMap projectsMap = Utils.getCommunityProjects(production); - log.info("projectsMap: {}", new Gson().toJson(projectsMap)); + //log.info("projectsMap: {}", new Gson().toJson(projectsMap)); SparkConf conf = new SparkConf(); diff --git a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/resulttocommunityfromproject/PrepareAssocTest.java b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/resulttocommunityfromproject/PrepareAssocTest.java index 0e10b3edf..172873af3 100644 --- a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/resulttocommunityfromproject/PrepareAssocTest.java +++ b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/resulttocommunityfromproject/PrepareAssocTest.java @@ -10,9 +10,7 @@ import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.JavaSparkContext; import org.apache.spark.sql.SparkSession; -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -61,6 +59,7 @@ public class PrepareAssocTest { spark.stop(); } + @Disabled @Test void test1() throws Exception { @@ -72,8 +71,8 @@ public class PrepareAssocTest { "-sourcePath", getClass().getResource("/eu/dnetlib/dhp/resulttocommunityfromproject/relation/").getPath(), "-outputPath", workingDir.toString() + "/prepared", - "-production", Boolean.TRUE.toString(), - "-hive_metastore_uris", "" + "-production", Boolean.TRUE.toString() + }); final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); @@ -82,7 +81,10 @@ public class PrepareAssocTest { .textFile(workingDir.toString() + "/prepared") .map(item -> new ObjectMapper().readValue(item, ResultProjectList.class)); - tmp.foreach(r -> System.out.println(new ObjectMapper().writeValueAsString(r))); + Assertions.assertEquals(4, tmp.count()); + Assertions.assertEquals(2, tmp.filter(rpl -> rpl.getCommunityList().contains("aurora")).count()); + Assertions.assertEquals(1, tmp.filter(rpl -> rpl.getCommunityList().contains("sdsn-gr")).count()); + Assertions.assertEquals(1, tmp.filter(rpl -> rpl.getCommunityList().contains("netherlands")).count()); } } diff --git a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/resulttocommunityfromproject/ResultToCommunityJobTest.java b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/resulttocommunityfromproject/ResultToCommunityJobTest.java index 6a5726cbe..b705af8ac 100644 --- a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/resulttocommunityfromproject/ResultToCommunityJobTest.java +++ b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/resulttocommunityfromproject/ResultToCommunityJobTest.java @@ -6,7 +6,9 @@ import static org.apache.spark.sql.functions.desc; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; +import java.util.List; +import eu.dnetlib.dhp.schema.oaf.Context; import org.apache.commons.io.FileUtils; import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaRDD; @@ -89,235 +91,30 @@ public class ResultToCommunityJobTest { .textFile(workingDir.toString() + "/dataset") .map(item -> OBJECT_MAPPER.readValue(item, Dataset.class)); - tmp.foreach(d -> System.out.println(new ObjectMapper().writeValueAsString(d))); -// Assertions.assertEquals(10, tmp.count()); -// org.apache.spark.sql.Dataset verificationDataset = spark -// .createDataset(tmp.rdd(), Encoders.bean(Dataset.class)); -// -// verificationDataset.createOrReplaceTempView("dataset"); -// -// String query = "select id, MyT.id community " -// + "from dataset " -// + "lateral view explode(context) c as MyT " -// + "lateral view explode(MyT.datainfo) d as MyD " -// + "where MyD.inferenceprovenance = 'propagation'"; -// -// org.apache.spark.sql.Dataset resultExplodedProvenance = spark.sql(query); -// Assertions.assertEquals(5, resultExplodedProvenance.count()); -// Assertions -// .assertEquals( -// 0, -// resultExplodedProvenance -// .filter("id = '50|dedup_wf_001::afaf128022d29872c4dad402b2db04fe'") -// .count()); -// Assertions -// .assertEquals( -// 1, -// resultExplodedProvenance -// .filter("id = '50|dedup_wf_001::3f62cfc27024d564ea86760c494ba93b'") -// .count()); -// Assertions -// .assertEquals( -// "beopen", -// resultExplodedProvenance -// .select("community") -// .where( -// resultExplodedProvenance -// .col("id") -// .equalTo( -// "50|dedup_wf_001::3f62cfc27024d564ea86760c494ba93b")) -// .collectAsList() -// .get(0) -// .getString(0)); -// -// Assertions -// .assertEquals( -// 2, -// resultExplodedProvenance -// .filter("id = '50|od________18::8887b1df8b563c4ea851eb9c882c9d7b'") -// .count()); -// Assertions -// .assertEquals( -// "mes", -// resultExplodedProvenance -// .select("community") -// .where( -// resultExplodedProvenance -// .col("id") -// .equalTo( -// "50|od________18::8887b1df8b563c4ea851eb9c882c9d7b")) -// .sort(desc("community")) -// .collectAsList() -// .get(0) -// .getString(0)); -// Assertions -// .assertEquals( -// "euromarine", -// resultExplodedProvenance -// .select("community") -// .where( -// resultExplodedProvenance -// .col("id") -// .equalTo( -// "50|od________18::8887b1df8b563c4ea851eb9c882c9d7b")) -// .sort(desc("community")) -// .collectAsList() -// .get(1) -// .getString(0)); -// -// Assertions -// .assertEquals( -// 1, -// resultExplodedProvenance -// .filter("id = '50|doajarticles::8d817039a63710fcf97e30f14662c6c8'") -// .count()); -// Assertions -// .assertEquals( -// "mes", -// resultExplodedProvenance -// .select("community") -// .where( -// resultExplodedProvenance -// .col("id") -// .equalTo( -// "50|doajarticles::8d817039a63710fcf97e30f14662c6c8")) -// .sort(desc("community")) -// .collectAsList() -// .get(0) -// .getString(0)); -// -// Assertions -// .assertEquals( -// 1, -// resultExplodedProvenance -// .filter("id = '50|doajarticles::3c98f0632f1875b4979e552ba3aa01e6'") -// .count()); -// Assertions -// .assertEquals( -// "mes", -// resultExplodedProvenance -// .select("community") -// .where( -// resultExplodedProvenance -// .col("id") -// .equalTo( -// "50|doajarticles::3c98f0632f1875b4979e552ba3aa01e6")) -// .sort(desc("community")) -// .collectAsList() -// .get(0) -// .getString(0)); -// -// query = "select id, MyT.id community " -// + "from dataset " -// + "lateral view explode(context) c as MyT " -// + "lateral view explode(MyT.datainfo) d as MyD "; -// -// org.apache.spark.sql.Dataset resultCommunityId = spark.sql(query); -// -// Assertions.assertEquals(10, resultCommunityId.count()); -// -// Assertions -// .assertEquals( -// 1, -// resultCommunityId -// .filter("id = '50|dedup_wf_001::afaf128022d29872c4dad402b2db04fe'") -// .count()); -// Assertions -// .assertEquals( -// "beopen", -// resultCommunityId -// .select("community") -// .where( -// resultCommunityId -// .col("id") -// .equalTo( -// "50|dedup_wf_001::afaf128022d29872c4dad402b2db04fe")) -// .collectAsList() -// .get(0) -// .getString(0)); -// -// Assertions -// .assertEquals( -// 1, -// resultCommunityId -// .filter("id = '50|dedup_wf_001::3f62cfc27024d564ea86760c494ba93b'") -// .count()); -// -// Assertions -// .assertEquals( -// 3, -// resultCommunityId -// .filter("id = '50|od________18::8887b1df8b563c4ea851eb9c882c9d7b'") -// .count()); -// Assertions -// .assertEquals( -// "beopen", -// resultCommunityId -// .select("community") -// .where( -// resultCommunityId -// .col("id") -// .equalTo( -// "50|od________18::8887b1df8b563c4ea851eb9c882c9d7b")) -// .sort(desc("community")) -// .collectAsList() -// .get(2) -// .getString(0)); -// -// Assertions -// .assertEquals( -// 2, -// resultCommunityId -// .filter("id = '50|doajarticles::8d817039a63710fcf97e30f14662c6c8'") -// .count()); -// Assertions -// .assertEquals( -// "euromarine", -// resultCommunityId -// .select("community") -// .where( -// resultCommunityId -// .col("id") -// .equalTo( -// "50|doajarticles::8d817039a63710fcf97e30f14662c6c8")) -// .sort(desc("community")) -// .collectAsList() -// .get(1) -// .getString(0)); -// -// Assertions -// .assertEquals( -// 3, -// resultCommunityId -// .filter("id = '50|doajarticles::3c98f0632f1875b4979e552ba3aa01e6'") -// .count()); -// Assertions -// .assertEquals( -// "euromarine", -// resultCommunityId -// .select("community") -// .where( -// resultCommunityId -// .col("id") -// .equalTo( -// "50|doajarticles::3c98f0632f1875b4979e552ba3aa01e6")) -// .sort(desc("community")) -// .collectAsList() -// .get(2) -// .getString(0)); -// Assertions -// .assertEquals( -// "ni", -// resultCommunityId -// .select("community") -// .where( -// resultCommunityId -// .col("id") -// .equalTo( -// "50|doajarticles::3c98f0632f1875b4979e552ba3aa01e6")) -// .sort(desc("community")) -// .collectAsList() -// .get(0) -// .getString(0)); + Assertions.assertEquals(10, tmp.count()); + /** + * {"resultId":"50|57a035e5b1ae::d5be548ca7ae489d762f893be67af52f","communityList":["aurora"]} + * {"resultId":"50|57a035e5b1ae::a77232ffca9115fcad51c3503dbc7e3e","communityList":["aurora"]} + * {"resultId":"50|57a035e5b1ae::803aaad4decab7e27cd4b52a1931b3a1","communityList":["sdsn-gr"]} + * {"resultId":"50|57a035e5b1ae::a02e9e4087bca50687731ae5c765b5e1","communityList":["netherlands"]} + */ + List context = tmp.filter(r -> r.getId().equals("50|57a035e5b1ae::d5be548ca7ae489d762f893be67af52f")) + .first().getContext(); + Assertions.assertTrue(context.stream().anyMatch(c -> containsResultCommunityProject(c))); + + context = tmp.filter(r -> r.getId().equals("50|57a035e5b1ae::a77232ffca9115fcad51c3503dbc7e3e")) + .first().getContext(); + Assertions.assertTrue(context.stream().anyMatch(c -> containsResultCommunityProject(c))); + + Assertions.assertEquals(0, tmp.filter(r -> r.getId().equals("50|57a035e5b1ae::803aaad4decab7e27cd4b52a1931b3a1")).count()); + + Assertions.assertEquals(0, tmp.filter(r -> r.getId().equals("50|57a035e5b1ae::a02e9e4087bca50687731ae5c765b5e1")).count()); + + Assertions.assertEquals(2, tmp.filter(r -> r.getContext().stream().anyMatch(c -> c.getId().equals("aurora"))).count()); + + } + + private static boolean containsResultCommunityProject(Context c) { + return c.getDataInfo().stream().anyMatch(di -> di.getProvenanceaction().getClassid().equals("result:community:project")); } } From a737dd47b6268111a18550a3e94241ec8358447c Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Tue, 31 Oct 2023 15:54:49 +0100 Subject: [PATCH 347/449] removed not needed test class --- .../dnetlib/dhp/bulktag/BulkTagJobTest.java | 2 +- .../PrepareAssocTest.java | 90 ------------------- 2 files changed, 1 insertion(+), 91 deletions(-) delete mode 100644 dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/resulttocommunityfromproject/PrepareAssocTest.java diff --git a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/BulkTagJobTest.java b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/BulkTagJobTest.java index 7cbbcaafb..5e106ef45 100644 --- a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/BulkTagJobTest.java +++ b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/BulkTagJobTest.java @@ -6,7 +6,7 @@ import static eu.dnetlib.dhp.bulktag.community.TaggingConstants.ZENODO_COMMUNITY import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; -import java.util.HashMap; + import java.util.List; import org.apache.commons.io.FileUtils; diff --git a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/resulttocommunityfromproject/PrepareAssocTest.java b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/resulttocommunityfromproject/PrepareAssocTest.java deleted file mode 100644 index 172873af3..000000000 --- a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/resulttocommunityfromproject/PrepareAssocTest.java +++ /dev/null @@ -1,90 +0,0 @@ - -package eu.dnetlib.dhp.resulttocommunityfromproject; - -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; - -import org.apache.commons.io.FileUtils; -import org.apache.spark.SparkConf; -import org.apache.spark.api.java.JavaRDD; -import org.apache.spark.api.java.JavaSparkContext; -import org.apache.spark.sql.SparkSession; -import org.junit.jupiter.api.*; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.fasterxml.jackson.databind.ObjectMapper; - -import eu.dnetlib.dhp.bulktag.BulkTagJobTest; -import eu.dnetlib.dhp.resulttocommunityfromorganization.ResultCommunityList; - -/** - * @author miriam.baglioni - * @Date 13/10/23 - */ -public class PrepareAssocTest { - - private static SparkSession spark; - - private static Path workingDir; - - private static final Logger log = LoggerFactory.getLogger(PrepareAssocTest.class); - - @BeforeAll - public static void beforeAll() throws IOException { - workingDir = Files.createTempDirectory(BulkTagJobTest.class.getSimpleName()); - log.info("using work dir {}", workingDir); - - SparkConf conf = new SparkConf(); - conf.setAppName(BulkTagJobTest.class.getSimpleName()); - - conf.setMaster("local[*]"); - conf.set("spark.driver.host", "localhost"); - conf.set("hive.metastore.local", "true"); - conf.set("spark.ui.enabled", "false"); - conf.set("spark.sql.warehouse.dir", workingDir.toString()); - conf.set("hive.metastore.warehouse.dir", workingDir.resolve("warehouse").toString()); - - spark = SparkSession - .builder() - .appName(PrepareAssocTest.class.getSimpleName()) - .config(conf) - .getOrCreate(); - } - - @AfterAll - public static void afterAll() throws IOException { - FileUtils.deleteDirectory(workingDir.toFile()); - spark.stop(); - } - - @Disabled - @Test - void test1() throws Exception { - - PrepareResultCommunitySet - .main( - new String[] { - - "-isSparkSessionManaged", Boolean.FALSE.toString(), - "-sourcePath", - getClass().getResource("/eu/dnetlib/dhp/resulttocommunityfromproject/relation/").getPath(), - "-outputPath", workingDir.toString() + "/prepared", - "-production", Boolean.TRUE.toString() - - }); - - final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); - - JavaRDD tmp = sc - .textFile(workingDir.toString() + "/prepared") - .map(item -> new ObjectMapper().readValue(item, ResultProjectList.class)); - - Assertions.assertEquals(4, tmp.count()); - Assertions.assertEquals(2, tmp.filter(rpl -> rpl.getCommunityList().contains("aurora")).count()); - Assertions.assertEquals(1, tmp.filter(rpl -> rpl.getCommunityList().contains("sdsn-gr")).count()); - Assertions.assertEquals(1, tmp.filter(rpl -> rpl.getCommunityList().contains("netherlands")).count()); - } - -} From 937ff6a7c77fa6422463471d8f3aff9c22ff775b Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Tue, 31 Oct 2023 15:56:08 +0100 Subject: [PATCH 348/449] - --- .../dhp/api/QueryCommunityAPITest.java | 119 ------------------ .../dnetlib/dhp/bulktag/BulkTagJobTest.java | 2 - 2 files changed, 121 deletions(-) delete mode 100644 dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/api/QueryCommunityAPITest.java diff --git a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/api/QueryCommunityAPITest.java b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/api/QueryCommunityAPITest.java deleted file mode 100644 index 6ee01a6f0..000000000 --- a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/api/QueryCommunityAPITest.java +++ /dev/null @@ -1,119 +0,0 @@ - -package eu.dnetlib.dhp.api; - -import java.util.List; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; - -import eu.dnetlib.dhp.api.QueryCommunityAPI; -import eu.dnetlib.dhp.api.Utils; -import eu.dnetlib.dhp.api.model.CommunityEntityMap; -import eu.dnetlib.dhp.api.model.CommunityModel; -import eu.dnetlib.dhp.api.model.CommunitySummary; -import eu.dnetlib.dhp.api.model.DatasourceList; -import eu.dnetlib.dhp.bulktag.community.Community; -import eu.dnetlib.dhp.bulktag.community.CommunityConfiguration; - -/** - * @author miriam.baglioni - * @Date 06/10/23 - */ -public class QueryCommunityAPITest { - - @Test - void communityList() throws Exception { - String body = QueryCommunityAPI.communities(true); - new ObjectMapper() - .readValue(body, CommunitySummary.class) - .forEach(p -> { - try { - System.out.println(new ObjectMapper().writeValueAsString(p)); - } catch (JsonProcessingException e) { - throw new RuntimeException(e); - } - }); - } - - @Test - void community() throws Exception { - String id = "dh-ch"; - String body = QueryCommunityAPI.community(id, true); - System.out - .println( - new ObjectMapper() - .writeValueAsString( - new ObjectMapper() - .readValue(body, CommunityModel.class))); - } - - @Test - void communityDatasource() throws Exception { - String id = "dh-ch"; - String body = QueryCommunityAPI.communityDatasource(id, true); - new ObjectMapper() - .readValue(body, DatasourceList.class) - .forEach(ds -> { - try { - System.out.println(new ObjectMapper().writeValueAsString(ds)); - } catch (JsonProcessingException e) { - throw new RuntimeException(e); - } - }); - ; - } - - @Test - void validCommunities() throws Exception { - CommunityConfiguration cc = Utils.getCommunityConfiguration(true); - System.out.println(cc.getCommunities().keySet()); - Community community = cc.getCommunities().get("aurora"); - Assertions.assertEquals(0, community.getSubjects().size()); - Assertions.assertEquals(null, community.getConstraints()); - Assertions.assertEquals(null, community.getRemoveConstraints()); - Assertions.assertEquals(2, community.getZenodoCommunities().size()); - Assertions - .assertTrue( - community.getZenodoCommunities().stream().anyMatch(c -> c.equals("aurora-universities-network"))); - Assertions - .assertTrue(community.getZenodoCommunities().stream().anyMatch(c -> c.equals("university-of-innsbruck"))); - Assertions.assertEquals(35, community.getProviders().size()); - Assertions - .assertEquals( - 35, community.getProviders().stream().filter(p -> p.getSelectionConstraints() == null).count()); - - } - - @Test - void eutopiaCommunityConfiguration() throws Exception { - CommunityConfiguration cc = Utils.getCommunityConfiguration(true); - System.out.println(cc.getCommunities().keySet()); - Community community = cc.getCommunities().get("eutopia"); - community.getProviders().forEach(p -> System.out.println(p.getOpenaireId())); - } - - @Test - void getCommunityProjects() throws Exception { - CommunityEntityMap projectMap = Utils.getCommunityProjects(true); - - Assertions - .assertTrue( - projectMap - .keySet() - .stream() - .allMatch(k -> k.startsWith("40|"))); - - System.out.println(projectMap); - } - - @Test - void getCommunityOrganizations() throws Exception { - CommunityEntityMap organizationMap = Utils.getCommunityOrganization(true); - Assertions.assertTrue(organizationMap.keySet().stream().allMatch(k -> k.startsWith("20|"))); - - } - -} diff --git a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/BulkTagJobTest.java b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/BulkTagJobTest.java index 5e106ef45..d02faedec 100644 --- a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/BulkTagJobTest.java +++ b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/BulkTagJobTest.java @@ -32,8 +32,6 @@ public class BulkTagJobTest { private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); - public static final String MOCK_IS_LOOK_UP_URL = "BASEURL:8280/is/services/isLookUp"; - public static final String pathMap = "{ \"author\" : \"$['author'][*]['fullname']\"," + " \"title\" : \"$['title'][*]['value']\"," + " \"orcid\" : \"$['author'][*]['pid'][*][?(@['key']=='ORCID')]['value']\"," From edcb17ca9827c39c8662b3083d2246dd91bd26ab Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Fri, 3 Nov 2023 13:01:14 +0100 Subject: [PATCH 349/449] refactoring and test --- .../PrepareResultCommunitySet.java | 2 +- .../SparkResultToCommunityFromProject.java | 18 +++++++++-- .../dnetlib/dhp/bulktag/BulkTagJobTest.java | 1 - .../ResultToCommunityJobTest.java | 31 +++++++++++++------ 4 files changed, 39 insertions(+), 13 deletions(-) diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/PrepareResultCommunitySet.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/PrepareResultCommunitySet.java index 9a2f25fa6..7bee1ea0c 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/PrepareResultCommunitySet.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/PrepareResultCommunitySet.java @@ -56,7 +56,7 @@ public class PrepareResultCommunitySet { log.info("production: {}", production); final CommunityEntityMap projectsMap = Utils.getCommunityProjects(production); - //log.info("projectsMap: {}", new Gson().toJson(projectsMap)); + // log.info("projectsMap: {}", new Gson().toJson(projectsMap)); SparkConf conf = new SparkConf(); diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/SparkResultToCommunityFromProject.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/SparkResultToCommunityFromProject.java index 90c30f812..6e298cf94 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/SparkResultToCommunityFromProject.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/SparkResultToCommunityFromProject.java @@ -112,7 +112,7 @@ public class SparkResultToCommunityFromProject implements Serializable { R ret = value._1(); Optional rcl = Optional.ofNullable(value._2()); if (rcl.isPresent()) { - ArrayList communitySet = rcl.get().getCommunityList(); + // ArrayList communitySet = rcl.get().getCommunityList(); List contextList = ret .getContext() .stream() @@ -124,7 +124,7 @@ public class SparkResultToCommunityFromProject implements Serializable { res.setId(ret.getId()); List propagatedContexts = new ArrayList<>(); - for (String cId : communitySet) { + for (String cId : rcl.get().getCommunityList()) { if (!contextList.contains(cId)) { Context newContext = new Context(); newContext.setId(cId); @@ -138,6 +138,20 @@ public class SparkResultToCommunityFromProject implements Serializable { PROPAGATION_RESULT_COMMUNITY_PROJECT_CLASS_NAME, ModelConstants.DNET_PROVENANCE_ACTIONS))); propagatedContexts.add(newContext); + } else { + ret + .getContext() + .stream() + .filter(c -> c.getId().equals(cId)) + .findFirst() + .get() + .getDataInfo() + .add( + getDataInfo( + PROPAGATION_DATA_INFO_TYPE, + PROPAGATION_RESULT_COMMUNITY_PROJECT_CLASS_ID, + PROPAGATION_RESULT_COMMUNITY_PROJECT_CLASS_NAME, + ModelConstants.DNET_PROVENANCE_ACTIONS)); } } res.setContext(propagatedContexts); diff --git a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/BulkTagJobTest.java b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/BulkTagJobTest.java index d02faedec..efabcc6bc 100644 --- a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/BulkTagJobTest.java +++ b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/BulkTagJobTest.java @@ -6,7 +6,6 @@ import static eu.dnetlib.dhp.bulktag.community.TaggingConstants.ZENODO_COMMUNITY import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; - import java.util.List; import org.apache.commons.io.FileUtils; diff --git a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/resulttocommunityfromproject/ResultToCommunityJobTest.java b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/resulttocommunityfromproject/ResultToCommunityJobTest.java index b705af8ac..5642501b3 100644 --- a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/resulttocommunityfromproject/ResultToCommunityJobTest.java +++ b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/resulttocommunityfromproject/ResultToCommunityJobTest.java @@ -8,7 +8,6 @@ import java.nio.file.Files; import java.nio.file.Path; import java.util.List; -import eu.dnetlib.dhp.schema.oaf.Context; import org.apache.commons.io.FileUtils; import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaRDD; @@ -27,6 +26,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import eu.dnetlib.dhp.orcidtoresultfromsemrel.OrcidPropagationJobTest; import eu.dnetlib.dhp.resulttocommunityfromorganization.SparkResultToCommunityFromOrganizationJob; +import eu.dnetlib.dhp.schema.oaf.Context; import eu.dnetlib.dhp.schema.oaf.Dataset; public class ResultToCommunityJobTest { @@ -98,23 +98,36 @@ public class ResultToCommunityJobTest { * {"resultId":"50|57a035e5b1ae::803aaad4decab7e27cd4b52a1931b3a1","communityList":["sdsn-gr"]} * {"resultId":"50|57a035e5b1ae::a02e9e4087bca50687731ae5c765b5e1","communityList":["netherlands"]} */ - List context = tmp.filter(r -> r.getId().equals("50|57a035e5b1ae::d5be548ca7ae489d762f893be67af52f")) - .first().getContext(); + List context = tmp + .filter(r -> r.getId().equals("50|57a035e5b1ae::d5be548ca7ae489d762f893be67af52f")) + .first() + .getContext(); Assertions.assertTrue(context.stream().anyMatch(c -> containsResultCommunityProject(c))); - context = tmp.filter(r -> r.getId().equals("50|57a035e5b1ae::a77232ffca9115fcad51c3503dbc7e3e")) - .first().getContext(); + context = tmp + .filter(r -> r.getId().equals("50|57a035e5b1ae::a77232ffca9115fcad51c3503dbc7e3e")) + .first() + .getContext(); Assertions.assertTrue(context.stream().anyMatch(c -> containsResultCommunityProject(c))); - Assertions.assertEquals(0, tmp.filter(r -> r.getId().equals("50|57a035e5b1ae::803aaad4decab7e27cd4b52a1931b3a1")).count()); + Assertions + .assertEquals( + 0, tmp.filter(r -> r.getId().equals("50|57a035e5b1ae::803aaad4decab7e27cd4b52a1931b3a1")).count()); - Assertions.assertEquals(0, tmp.filter(r -> r.getId().equals("50|57a035e5b1ae::a02e9e4087bca50687731ae5c765b5e1")).count()); + Assertions + .assertEquals( + 0, tmp.filter(r -> r.getId().equals("50|57a035e5b1ae::a02e9e4087bca50687731ae5c765b5e1")).count()); - Assertions.assertEquals(2, tmp.filter(r -> r.getContext().stream().anyMatch(c -> c.getId().equals("aurora"))).count()); + Assertions + .assertEquals( + 2, tmp.filter(r -> r.getContext().stream().anyMatch(c -> c.getId().equals("aurora"))).count()); } private static boolean containsResultCommunityProject(Context c) { - return c.getDataInfo().stream().anyMatch(di -> di.getProvenanceaction().getClassid().equals("result:community:project")); + return c + .getDataInfo() + .stream() + .anyMatch(di -> di.getProvenanceaction().getClassid().equals("result:community:project")); } } From 638ad9e74f09a7ea975e49cc7842746096608cbc Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Fri, 3 Nov 2023 15:06:50 +0100 Subject: [PATCH 350/449] changing test for new implementation --- ...kResultToCommunityFromOrganizationJob.java | 2 - .../dnetlib/dhp/bulktag/BulkTagJobTest.java | 4 +- .../PrepareAssocTest.java | 95 ------------------ .../ResultToCommunityJobTest.java | 8 +- .../sample/dataset | 10 ++ .../sample/dataset_10.json.gz | Bin 7128 -> 0 bytes 6 files changed, 16 insertions(+), 103 deletions(-) delete mode 100644 dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/resulttocommunityfromorganization/PrepareAssocTest.java create mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/sample/dataset delete mode 100644 dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/sample/dataset_10.json.gz diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromorganization/SparkResultToCommunityFromOrganizationJob.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromorganization/SparkResultToCommunityFromOrganizationJob.java index fe79f1be1..df8ca3805 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromorganization/SparkResultToCommunityFromOrganizationJob.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromorganization/SparkResultToCommunityFromOrganizationJob.java @@ -60,8 +60,6 @@ public class SparkResultToCommunityFromOrganizationJob { conf, isSparkSessionManaged, spark -> { - // removeOutputDir(spark, outputPath); - execPropagation(spark, inputPath, outputPath, possibleupdatespath); }); diff --git a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/BulkTagJobTest.java b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/BulkTagJobTest.java index efabcc6bc..64eb86338 100644 --- a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/BulkTagJobTest.java +++ b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/BulkTagJobTest.java @@ -40,7 +40,9 @@ public class BulkTagJobTest { "\"fos\" : \"$['subject'][?(@['qualifier']['classid']=='FOS')].value\"," + "\"sdg\" : \"$['subject'][?(@['qualifier']['classid']=='SDG')].value\"," + "\"hostedby\" : \"$['instance'][*]['hostedby']['key']\" , " + - "\"collectedfrom\" : \"$['instance'][*]['collectedfrom']['key']\"} "; + "\"collectedfrom\" : \"$['instance'][*]['collectedfrom']['key']\"," + + "\"publisher\":\"$['publisher'].value\"," + + "\"publicationyear\":\"$['dateofacceptance'].value\"} "; private static SparkSession spark; diff --git a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/resulttocommunityfromorganization/PrepareAssocTest.java b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/resulttocommunityfromorganization/PrepareAssocTest.java deleted file mode 100644 index 6536ecc85..000000000 --- a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/resulttocommunityfromorganization/PrepareAssocTest.java +++ /dev/null @@ -1,95 +0,0 @@ - -package eu.dnetlib.dhp.resulttocommunityfromorganization; - -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; - -import org.apache.commons.io.FileUtils; -import org.apache.commons.io.IOUtils; -import org.apache.spark.SparkConf; -import org.apache.spark.api.java.JavaRDD; -import org.apache.spark.api.java.JavaSparkContext; -import org.apache.spark.sql.Encoders; -import org.apache.spark.sql.SparkSession; -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.gson.Gson; - -import eu.dnetlib.dhp.api.Utils; -import eu.dnetlib.dhp.api.model.CommunityEntityMap; -import eu.dnetlib.dhp.bulktag.BulkTagJobTest; -import eu.dnetlib.dhp.bulktag.SparkBulkTagJob; -import eu.dnetlib.dhp.schema.oaf.Dataset; - -/** - * @author miriam.baglioni - * @Date 13/10/23 - */ -public class PrepareAssocTest { - - private static SparkSession spark; - - private static Path workingDir; - - private static final Logger log = LoggerFactory.getLogger(PrepareAssocTest.class); - - @BeforeAll - public static void beforeAll() throws IOException { - workingDir = Files.createTempDirectory(BulkTagJobTest.class.getSimpleName()); - log.info("using work dir {}", workingDir); - - SparkConf conf = new SparkConf(); - conf.setAppName(BulkTagJobTest.class.getSimpleName()); - - conf.setMaster("local[*]"); - conf.set("spark.driver.host", "localhost"); - conf.set("hive.metastore.local", "true"); - conf.set("spark.ui.enabled", "false"); - conf.set("spark.sql.warehouse.dir", workingDir.toString()); - conf.set("hive.metastore.warehouse.dir", workingDir.resolve("warehouse").toString()); - - spark = SparkSession - .builder() - .appName(PrepareAssocTest.class.getSimpleName()) - .config(conf) - .getOrCreate(); - } - - @AfterAll - public static void afterAll() throws IOException { - FileUtils.deleteDirectory(workingDir.toFile()); - spark.stop(); - } - - @Test - void test1() throws Exception { - - PrepareResultCommunitySet - .main( - new String[] { - - "-isSparkSessionManaged", Boolean.FALSE.toString(), - "-sourcePath", - getClass().getResource("/eu/dnetlib/dhp/resulttocommunityfromorganization/relation/").getPath(), - "-outputPath", workingDir.toString() + "/prepared", - "-production", Boolean.TRUE.toString(), - "-hive_metastore_uris", "" - }); - - final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); - - JavaRDD tmp = sc - .textFile(workingDir.toString() + "/prepared") - .map(item -> new ObjectMapper().readValue(item, ResultCommunityList.class)); - - tmp.foreach(r -> System.out.println(new ObjectMapper().writeValueAsString(r))); - } - -} diff --git a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/resulttocommunityfromorganization/ResultToCommunityJobTest.java b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/resulttocommunityfromorganization/ResultToCommunityJobTest.java index da3be8b35..6440ded92 100644 --- a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/resulttocommunityfromorganization/ResultToCommunityJobTest.java +++ b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/resulttocommunityfromorganization/ResultToCommunityJobTest.java @@ -72,15 +72,13 @@ public class ResultToCommunityJobTest { SparkResultToCommunityFromOrganizationJob .main( new String[] { - "-isTest", Boolean.TRUE.toString(), + "-isSparkSessionManaged", Boolean.FALSE.toString(), "-sourcePath", getClass() - .getResource("/eu/dnetlib/dhp/resulttocommunityfromorganization/sample") + .getResource("/eu/dnetlib/dhp/resulttocommunityfromorganization/sample/") .getPath(), - "-hive_metastore_uris", "", - "-resultTableName", "eu.dnetlib.dhp.schema.oaf.Dataset", - "-outputPath", workingDir.toString() + "/dataset", + "-outputPath", workingDir.toString() + "/", "-preparedInfoPath", preparedInfoPath }); diff --git a/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/sample/dataset b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/sample/dataset new file mode 100644 index 000000000..61a1da1ac --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/sample/dataset @@ -0,0 +1,10 @@ +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055868909,"id":"50|dedup_wf_001::afaf128022d29872c4dad402b2db04fe","originalId":["od______3989::02dd5d2c222191b0b9bd4f33c8e96529"],"collectedfrom":[{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null}],"pid":[{"value":"10.4185/RLCS-2018-1243","qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofcollection":"2020-03-03T13:05:26.091Z","dateoftransformation":"2020-03-03T13:06:53.161Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2020-03-03T13:05:26.091Z","altered":true,"baseURL":"http%3A%2F%2Frepositorio.ucjc.edu%2Foai%2Frequest","identifier":"oai:repositorio.ucjc.edu:20.500.12020/562","datestamp":"2018-01-23T15:06:07Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"affiliation":[],"fullname":"Jung, Nicole","name":"Nicole","pid":[{"dataInfo":null,"qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":null,"schemename":null},"value":"0000-0001-9513-2468"}],"rank":1,"surname":"Jung"},{"affiliation":[],"fullname":"Gräßle, Simone","name":"Simone","pid":[],"rank":2,"surname":"Gräßle"}],"resulttype":{"classid":"dataset","classname":"dataset","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"esl/spa","classname":"Spanish","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"Ciencias de la Comunicación","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"yihadismo","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"viralidad","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"vídeo","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"propaganda","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"terrorismo","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"terrorism","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"jihadism","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"virality","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"video","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"5903 Ideologías Políticas","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"6310.13 Terrorismo","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"El individualismo como estrategia","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Individualism as an improvised strategy","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"Se analiza como el Yihadismo distribuye su mensaje propaganístico en You Tube.\nUniversidad Camilo José Cela","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2018-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[{"value":"MediaLab - UCJC","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[{"dataInfo":[{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"propagation:community:organizationtoresult","classname":"Propagation of community result through organization to result association","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.85"}],"id":"beopen"}],"externalReference":[],"instance":[{"license":{"value":"http://creativecommons.org/licenses/by-nc-nd/4.0/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0024","classname":"Film","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"url":["http://hdl.handle.net/20.500.12020/562"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"dateofacceptance":{"value":"2018-01-01","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"storagedate":null,"device":null,"size":null,"version":null,"lastmetadataupdate":null,"metadataversionnumber":null,"geolocation":[]} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055868954,"id":"50|dedup_wf_001::3f62cfc27024d564ea86760c494ba93b","originalId":["od______3989::05d8c751462f9bb8d2b06956dfbc5c7b"],"collectedfrom":[{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null}],"pid":[],"dateofcollection":"2020-03-03T13:05:26.079Z","dateoftransformation":"2020-03-03T13:06:53.239Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2020-03-03T13:05:26.079Z","altered":true,"baseURL":"http%3A%2F%2Frepositorio.ucjc.edu%2Foai%2Frequest","identifier":"oai:repositorio.ucjc.edu:20.500.12020/227","datestamp":"2017-11-15T16:29:55Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"affiliation":[],"fullname":"Fischer, Malte","name":"Malte","pid":[{"dataInfo":null,"qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":null,"schemename":null},"value":"0000-0002-2806-1302"}],"rank":1,"surname":"Fischer"},{"affiliation":[],"fullname":"Barbul, Daniel","name":"Daniel","pid":[],"rank":2,"surname":"Barbul"},{"affiliation":[],"fullname":"Schmidtmann, Marc","name":"Marc","pid":[{"dataInfo":null,"qualifier":{"classid":"MAG Identifier","classname":"MAG Identifier","schemeid":null,"schemename":null},"value":"2024269002"}],"rank":3,"surname":"Schmidtmann"},{"affiliation":[],"fullname":"Beckhaus, Ruediger","name":"Ruediger","pid":[],"rank":4,"surname":"Beckhaus"}],"resulttype":{"classid":"dataset","classname":"dataset","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"esl/spa","classname":"Spanish","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"Ciencias de la Actividad Física y del Deporte","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Eventos deportivos","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Retos","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Deporte","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"I Congreso Nuevos Retos en los Eventos Deportivos","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"I Congreso Nuevos Retos en los Eventos Deportivos, celebrado en la Universidad Camilo José Cela.\n\n\n\nDerivado del proyecto de investigación \"La situación de los eventos deportivos en España a través de su estructuras y de sus herramientas\", tiene como finalidad conocer la situación de los eventos deportivos en España. Se realizó un estudio descriptivo holístico en el que se investigaron elementos culturales, el perfil de los recursos humanos, la estructura de los comités, entre otras.","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2015-06-20","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":{"value":"http://creativecommons.org/licenses/by-nc-nd/4.0/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0024","classname":"Film","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"url":["http://hdl.handle.net/20.500.12020/227"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"dateofacceptance":{"value":"2015-06-20","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"storagedate":null,"device":null,"size":null,"version":null,"lastmetadataupdate":null,"metadataversionnumber":null,"geolocation":[]} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055869097,"id":"50|od________18::8887b1df8b563c4ea851eb9c882c9d7b","originalId":["od______3989::0f89464c4ac4c398fe0c71433b175a62"],"collectedfrom":[{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null}],"pid":[],"dateofcollection":"2020-03-03T13:05:26.069Z","dateoftransformation":"2020-03-03T13:06:53.54Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2020-03-03T13:05:26.069Z","altered":true,"baseURL":"http%3A%2F%2Frepositorio.ucjc.edu%2Foai%2Frequest","identifier":"oai:repositorio.ucjc.edu:20.500.12020/802","datestamp":"2018-11-14T15:30:47Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Universidad Camilo José Cela, Ciencias de la Actividad Física y del Deporte","name":"Ciencias La Actividad Física Y. Del Deporte","surname":"Universidad Camilo José Cela","rank":1,"pid":null,"affiliation":null}],"resulttype":{"classid":"dataset","classname":"dataset","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"esl/spa","classname":"Spanish","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"Ciencias de la Actividad Física y del Deporte","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Actividades deportivas","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Impacto físico","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Proyectos de investigación","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"2411.06 Fisiología del Ejercicio","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"Investigaciones en Ciencias de la Actividad Física y del Deporte CCAFD - UCJC","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"Blanca Romero, investigadora y docente de Ciencias de la Actividad Física y del Deporte en la Universidad Camilo José Cela, describe dos de las líneas de investigación que se han desarrollado en el departamento CCAFD de UCJC: el impacto físico de las diferentes actividades deportivas y los métodos de recuperación más eficaces tras el ejercicio físico.\nBlanca también destaca la importancia en el ámbito de la salud los estudios en Ciencias de la Actividad Física y del Deporte.\nCiencias de la Actividad Física y del Deporte en la Universidad Camilo José Cela","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2016-03-21","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[{"value":"Universidad Camilo José Cela, Ciencias de la Actividad Física y del Deporte","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[{"dataInfo":[{"deletedbyinference":false,"inferenceprovenance":"","inferred":true,"invisible":false,"provenanceaction":{"classid":"propagation:community:organizationtoresult","classname":"Propagation of community result through organization to result association","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.85"}],"id":"beopen"}],"externalReference":[],"instance":[{"license":{"value":"http://creativecommons.org/licenses/by-nc-nd/4.0/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0024","classname":"Film","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"url":["http://hdl.handle.net/20.500.12020/802"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"dateofacceptance":{"value":"2016-03-21","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"storagedate":null,"device":null,"size":null,"version":null,"lastmetadataupdate":null,"metadataversionnumber":null,"geolocation":[]} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055869215,"id":"50|doajarticles::8d817039a63710fcf97e30f14662c6c8","originalId":["od______3989::1729c3988199b95d1d566851af7d3c55"],"collectedfrom":[{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null}],"pid":[],"dateofcollection":"2020-03-03T13:05:25.653Z","dateoftransformation":"2020-03-03T13:06:53.764Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2020-03-03T13:05:25.653Z","altered":true,"baseURL":"http%3A%2F%2Frepositorio.ucjc.edu%2Foai%2Frequest","identifier":"oai:repositorio.ucjc.edu:20.500.12020/801","datestamp":"2018-11-14T15:19:38Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Universidad Camilo José Cela, Ciencias de la Actividad Física y del Deporte","name":"Ciencias La Actividad Física Y. Del Deporte","surname":"Universidad Camilo José Cela","rank":1,"pid":null,"affiliation":null}],"resulttype":{"classid":"dataset","classname":"dataset","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"esl/spa","classname":"Spanish","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"Ciencias de la Actividad Física y del Deporte","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Prevención","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Hidratación","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Deporte","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Deportistas","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Electrolitos","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Deportes de resistencia","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"2411.06 Fisiología del Ejercicio","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"La importancia de la hidratación en competiciones resistencia, por Juan del Coso","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"Juan del Coso, investigador y profesor en el Grado en Ciencias de la Actividad Física y del Deporte UCJC, presenta el proyecto de investigación que ha realizado el departamento CCAFD de UCJC: la prevención de desequilibrios de agua y electrolitos que se dan en los deportes de resistencia para que los deportistas realicen su actividad de una manera más segura.\nMás información: http://www.ucjc.edu/2016/03/investiga...\nUniversidad Camilo José Cela, Ciencias de la Actividad Física y del Deporte","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2016-03-21","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[{"value":"Grado en Ciencias de la Actividad Física y del Deporte UCJC","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[{"dataInfo":[{"deletedbyinference":false,"inferenceprovenance":"","inferred":true,"invisible":false,"provenanceaction":{"classid":"propagation:community:organizationtoresult","classname":"Propagation of community result through organization to result association","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.85"}],"id":"euromarine"}],"externalReference":[],"instance":[{"license":{"value":"http://creativecommons.org/licenses/by-nc-nd/4.0/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0024","classname":"Film","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"url":["http://hdl.handle.net/20.500.12020/801"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"dateofacceptance":{"value":"2016-03-21","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"storagedate":null,"device":null,"size":null,"version":null,"lastmetadataupdate":null,"metadataversionnumber":null,"geolocation":[]} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055869487,"id":"50|doajarticles::3c98f0632f1875b4979e552ba3aa01e6","originalId":["od______3989::2e3f34ce90520fae350a7e1148d7dcea"],"collectedfrom":[{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null}],"pid":[],"dateofcollection":"2020-03-03T13:05:34.912Z","dateoftransformation":"2020-03-03T13:06:54.218Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2020-03-03T13:05:34.912Z","altered":true,"baseURL":"http%3A%2F%2Frepositorio.ucjc.edu%2Foai%2Frequest","identifier":"oai:repositorio.ucjc.edu:20.500.12020/800","datestamp":"2018-11-14T13:43:21Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Universidad Camilo José Cela, Vicerrectorado de Innovación","name":"Vicerrectorado Innovación","surname":"Universidad Camilo José Cela","rank":1,"pid":null,"affiliation":null}],"resulttype":{"classid":"dataset","classname":"dataset","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"esl/spa","classname":"Spanish","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"Ciencias de la Actividad Física y del Deporte","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Deporte","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Cafeína","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Efectos","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Alto rendimiento","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Competiciones","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Beneficios","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"2411.06 Fisiología del Ejercicio","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"Investigación - Efectos positivos y negativos del uso de la cafeína en el deporte","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"Proyecto de investigación que se están desarrollando en la Universidad Camilo José Cela (UCJC) sobre la cafeína y sus efectos cuando se realiza deporte. https://www.ucjc.edu/2016/08/la-bbc-s...\n\nJuan Del Coso, director del Laboratorio de Fisiología del Ejercicio de la Universidad Camilo José Cela, nos describe cómo está siendo la investigación que desarrolla con deportistas de alto rendimiento y el consumo de cafeína.\n\n\"Nuestra investigación se enmarca dentro del campo de la fisiología del ejercicio y el objetivo que tenemos es investigar los efectos que tiene la cafeína en los deportistas, principalmente saber si es una ayuda ergogénica en la mayor parte de los deportes, pero también conocer qué perjuicios existen para aquellos deportistas que la utilizan para incrementar el rendimiento deportivo\", explica Del Coso.\n\nY es que los datos son muy llamativos: tres de cada cuatro deportistas de alto rendimiento utilizan la cafeína antes de la competición y muchas veces se utiliza sin saber los perjuicios que puede tener para el deportista. \"Lo que estamos investigando es cómo una sustancia, que te puede hacer rendir mejor, cómo puede afectar negativamente cuando termina una competición\".\n\nPero esta investigación no sólo puede extraer conclusiones interesantes y útiles para los deportistas profesionales, \"investigando el deporte de alto rendimiento podemos conocer los beneficios y perjuicios de la cafeína que también afectarían al deportista amateur y hacer un deporte en general más seguro\".\n\nPara el desarrollo de este proyecto de investigación están colaborando el Laboratorio de Fisiología del Ejercicio de la Universidad Camilo José Cela y la Agencia para la Protección de la Salud en el Deporte.\nPara el desarrollo de este proyecto de investigación están colaborando el Laboratorio de Fisiología del Ejercicio de la Universidad Camilo José Cela y la Agencia para la Protección de la Salud en el Deporte.","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2017-10-06","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[{"value":"Universidad Camilo José Cela, Vicerrectorado de Innovación","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[{"dataInfo":[{"deletedbyinference":false,"inferenceprovenance":"","inferred":true,"invisible":false,"provenanceaction":{"classid":"propagation:community:organizationtoresult","classname":"Propagation of community result through organization to result association","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.85"}],"id":"euromarine"},{"dataInfo":[{"deletedbyinference":false,"inferenceprovenance":"","inferred":true,"invisible":false,"provenanceaction":{"classid":"propagation:community:organizationtoresult","classname":"Propagation of community result through organization to result association","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.85"}],"id":"ni"}],"externalReference":[],"instance":[{"license":{"value":"http://creativecommons.org/licenses/by-nc-nd/4.0/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0024","classname":"Film","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"url":["http://hdl.handle.net/20.500.12020/800"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"dateofacceptance":{"value":"2017-10-06","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"storagedate":null,"device":null,"size":null,"version":null,"lastmetadataupdate":null,"metadataversionnumber":null,"geolocation":[]} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055869498,"id":"50|od______3989::2f4f3c820c450bd08dac08d07cc82dcf","originalId":["od______3989::2f4f3c820c450bd08dac08d07cc82dcf"],"collectedfrom":[{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null}],"pid":[],"dateofcollection":"2020-03-03T13:05:34.806Z","dateoftransformation":"2020-03-03T13:06:54.229Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2020-03-03T13:05:34.806Z","altered":true,"baseURL":"http%3A%2F%2Frepositorio.ucjc.edu%2Foai%2Frequest","identifier":"oai:repositorio.ucjc.edu:20.500.12020/797","datestamp":"2018-11-14T12:12:23Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Cuesta Cano, Laura","name":"Laura","surname":"Cuesta Cano","rank":1,"pid":null,"affiliation":null}],"resulttype":{"classid":"dataset","classname":"dataset","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"esl/spa","classname":"Spanish","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"Ciencias de la Comunicación","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Marketing digital","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Medios sociales","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Marcas","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Empresas","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Emprendedores","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"II Liga de Debate CICAE - UCJC","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"6114.13 Marketing","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"Laura Cuesta - Liga de Debate CICAE - UCJC","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"Laura Cuesta, profesora en la Universidad Camilo José Cela (UCJC) y Especialista en Marketing Digital y Medios Sociales para marcas y emprendedores. \n\nEn esta ocasión, Laura Cuesta, nos explica el significado de redes sociales y nos habla sobre el uso que le dan los usuarios.\n\nII Liga de Debate CICAE - UCJC http://ligacicae.ucjc.edu/\n\nLa Universidad Camilo José Cela (UCJC) y la Asociación de Colegios Privados e Independientes –Círculo de Calidad Educativa (CICAE) – organizan la segunda edición de esta gran liga de debate académico. El formato es al estilo inglés, similar al de la Oxford Union, donde algunos jóvenes se reunían a debatir sobre temas de la más candente actualidad y polemizaban con la intención de formarse en tan valoradas habilidades.\n\nLa Liga de Debate CICAE-UCJC es una ocasión única para los alumnos de ponerse en contacto con herramientas tan útiles como la oratoria y la comunicación efectiva. Pero, sobre todo, una oportunidad de fomentar el pensamiento crítico y la socialización entre alumnos con espíritu emprendedor. La Liga de Debate CICAE - Universidad Camilo José Cela se diferencia del resto de torneos en que potenciamos que sea eminentemente formativa. Alumnos y profesores reciben formación en comunicación, oratoria y debate por parte de alguno de los expertos en debate españoles más reconocidos en la escena internacional.\n\nDatos de la III Liga de Debate CICAE - UCJC http://ligacicae.ucjc.edu/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2018-10-23","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[{"value":"Universidad Camilo José Cela, Vicerrectorado de Innovación","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":{"value":"http://creativecommons.org/licenses/by-nc-nd/4.0/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0024","classname":"Film","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"url":["http://hdl.handle.net/20.500.12020/797"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"dateofacceptance":{"value":"2018-10-23","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"storagedate":null,"device":null,"size":null,"version":null,"lastmetadataupdate":null,"metadataversionnumber":null,"geolocation":[]} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055870582,"id":"50|od______3989::752fd0b2bbac1ea1cc50e52fd46eb663","originalId":["od______3989::752fd0b2bbac1ea1cc50e52fd46eb663"],"collectedfrom":[{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null}],"pid":[],"dateofcollection":"2020-03-03T13:05:34.561Z","dateoftransformation":"2020-03-03T13:06:55.716Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2020-03-03T13:05:34.561Z","altered":true,"baseURL":"http%3A%2F%2Frepositorio.ucjc.edu%2Foai%2Frequest","identifier":"oai:repositorio.ucjc.edu:20.500.12020/798","datestamp":"2018-11-14T12:57:26Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Universidad Camilo José Cela, Vicerrectorado de Innovación","name":"Vicerrectorado Innovación","surname":"Universidad Camilo José Cela","rank":1,"pid":null,"affiliation":null}],"resulttype":{"classid":"dataset","classname":"dataset","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"esl/spa","classname":"Spanish","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"Psicología","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Alcohol","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Dependencia","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Proyectos de investigación","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Alcoholismo","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Realidad virtual","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Psicología conductual","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"Investigación - Intervención basada en realidad virtual sobre la dependencia del alcohol","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"Proyecto de investigación que se están desarrollando en la Universidad Camilo José Cela (UCJC) con tecnología aplicada al abandono de la dependencia del alcohol. \nRosa Jurado, profesora e investigadora de UCJC https://www.ucjc.edu/, explica cómo se conjuga el alcoholismo con la realidad virtual. \"Mi investigación consiste en desarrollar una técnica de intervención o rehabilitación que tiene como propósito fomentar la capacidad de inhibición para que las personas que tienen dependencia del alcohol sean capaces de controlar su conducta de aproximación hacia aquello que tiene que ver con el consumo de alcohol\".\n\nEn esta investigación, liderada por la Universidad Camilo José Cela, están participando, el Instituto de Investigación Biomédica del Hospital 12 de Octubre y la Universidad Politécnica de Madrid, con el CeDint. \"En nuestro equipo de investigación pensamos que, además del deseo de consumo, existen una carencia clara de capacidad de control inhibitorio en este tipo de personas\", destaca Rosa Jurado.\n\nLa realidad virtual sirve, según explica Gabriel Rubio, jefe de Psiquiatría del Hospital 12 de Octubre, \"para dar un paso más, para ver cómo reacciona un sujeto en un ambiente que no es el real, pero se parece mucho al real\". El objetivo final de estas acciones es \"mejorar la capacidad del individuo para poner en marcha mecanismos de inhibición conductual, para que el sujeto sea capaz de decir que no\".\n\nY no acaba ahí el proceso. La fase final del tratamiento se enfoca en que el paciente \"sea capaz de reconstruir su vida\" a través de programas de entrenamiento de habilidades sociales, asertividad, familias... \"Juntando todas las áreas de intervención, la abstinencia se mantiene mucho más tiempo y las recaídas disminuyen\".","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2017-10-05","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[{"value":"Universidad Camilo José Cela, Vicerrectorado de Innovación","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":{"value":"http://creativecommons.org/licenses/by-nc-nd/4.0/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0024","classname":"Film","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"url":["http://hdl.handle.net/20.500.12020/798"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"dateofacceptance":{"value":"2017-10-05","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"storagedate":null,"device":null,"size":null,"version":null,"lastmetadataupdate":null,"metadataversionnumber":null,"geolocation":[]} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055870750,"id":"50|od______3989::7fcbe3a03280663cddebfd3cb9203177","originalId":["od______3989::7fcbe3a03280663cddebfd3cb9203177"],"collectedfrom":[{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null}],"pid":[],"dateofcollection":"2020-03-03T13:05:25.652Z","dateoftransformation":"2020-03-03T13:06:55.95Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2020-03-03T13:05:25.652Z","altered":true,"baseURL":"http%3A%2F%2Frepositorio.ucjc.edu%2Foai%2Frequest","identifier":"oai:repositorio.ucjc.edu:20.500.12020/796","datestamp":"2018-11-05T13:36:54Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Universidad Camilo José Cela, Vicerrectorado de Innovación","name":"Vicerrectorado Innovación","surname":"Universidad Camilo José Cela","rank":1,"pid":null,"affiliation":null}],"resulttype":{"classid":"dataset","classname":"dataset","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"esl/spa","classname":"Spanish","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"Ciencias de la Comunicación","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Redes sociales","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Comunicación","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Información","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Desinformación","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"III Liga de Debate CICAE","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Instantaneidad","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Información periodística","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Fake news","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"5910.02 Medios de Comunicación de Masas","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"Jorge Gallardo - Liga de Debate CICAE","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"Jorge Gallardo, profesor de Derecho en la Universidad Camilo José Cela (UCJC), Doctor en Comunicación Audiovisual y MBA en Empresas Audiovisuales. Subdirector de Espejo Público en Antena 3 Noticias. \n\nEn esta ocasión, Jorge Gallardo habla sobre las redes sociales, cómo han transformado la manera en la que nos comunicamos y nos informamos. \n\nIII Liga de Debate CICAE - UCJC http://ligacicae.ucjc.edu/\n\nLa Universidad Camilo José Cela (UCJC) y la Asociación de Colegios Privados e Independientes –Círculo de Calidad Educativa (CICAE) – organizan la tercera edición de esta gran liga de debate académico. El formato es al estilo inglés, similar al de la Oxford Union, donde algunos jóvenes se reunían a debatir sobre temas de la más candente actualidad y polemizaban con la intención de formarse en tan valoradas habilidades.\n\nLa Liga de Debate CICAE-UCJC es una ocasión única para los alumnos de ponerse en contacto con herramientas tan útiles como la oratoria y la comunicación efectiva. Pero, sobre todo, una oportunidad de fomentar el pensamiento crítico y la socialización entre alumnos con espíritu emprendedor. La Liga de Debate CICAE - Universidad Camilo José Cela se diferencia del resto de torneos en que potenciamos que sea eminentemente formativa. Alumnos y profesores reciben formación en comunicación, oratoria y debate por parte de alguno de los expertos en debate españoles más reconocidos en la escena internacional.\n\nDatos de la III Liga de Debate CICAE - UCJC http://ligacicae.ucjc.edu/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2018-10-23","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":{"value":"http://creativecommons.org/licenses/by-nc-nd/4.0/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0024","classname":"Film","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"url":["http://hdl.handle.net/20.500.12020/796"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"dateofacceptance":{"value":"2018-10-23","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"storagedate":null,"device":null,"size":null,"version":null,"lastmetadataupdate":null,"metadataversionnumber":null,"geolocation":[]} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055872001,"id":"50|od______3989::d791339867bec6d3eb2104deeb4e4961","originalId":["od______3989::d791339867bec6d3eb2104deeb4e4961"],"collectedfrom":[{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null}],"pid":[],"dateofcollection":"2020-03-03T13:05:34.586Z","dateoftransformation":"2020-03-03T13:06:57.721Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2020-03-03T13:05:34.586Z","altered":true,"baseURL":"http%3A%2F%2Frepositorio.ucjc.edu%2Foai%2Frequest","identifier":"oai:repositorio.ucjc.edu:20.500.12020/645","datestamp":"2018-04-12T07:59:27Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Universidad Camilo José Cela, Vicerrectorado de Innovación","name":"Vicerrectorado Innovación","surname":"Universidad Camilo José Cela","rank":1,"pid":null,"affiliation":null}],"resulttype":{"classid":"dataset","classname":"dataset","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"esl/spa","classname":"Spanish","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"Transferencia de Conocimiento e Innovación","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Innovación","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Investigación","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Ciencia","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Tecnología","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"UCJC Open Science Day 2018","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"El UCJC Open Science Day tiene como objetivo mostrar las actividades de investigación llevadas a cabo por investigadores de la Universidad Camilo José Cela (UCJC) a todos los miembros de la UCJC.","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2018-04-10","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":{"value":"http://creativecommons.org/licenses/by-nc-nd/4.0/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0024","classname":"Film","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"url":["http://hdl.handle.net/20.500.12020/645"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"dateofacceptance":{"value":"2018-04-10","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"storagedate":null,"device":null,"size":null,"version":null,"lastmetadataupdate":null,"metadataversionnumber":null,"geolocation":[]} +{"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1585055872022,"id":"50|od______3989::d90d3a1f64ad264b5ebed8a35b280343","originalId":["od______3989::d90d3a1f64ad264b5ebed8a35b280343"],"collectedfrom":[{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null}],"pid":[],"dateofcollection":"2020-03-03T13:05:34.912Z","dateoftransformation":"2020-03-03T13:06:57.747Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2020-03-03T13:05:34.912Z","altered":true,"baseURL":"http%3A%2F%2Frepositorio.ucjc.edu%2Foai%2Frequest","identifier":"oai:repositorio.ucjc.edu:20.500.12020/795","datestamp":"2018-11-06T15:43:10Z","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"author":[{"fullname":"Universidad Camilo José Cela, Vicerrectorado de Innovación","name":"Vicerrectorado Innovación","surname":"Universidad Camilo José Cela","rank":1,"pid":null,"affiliation":null}],"resulttype":{"classid":"dataset","classname":"dataset","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"esl/spa","classname":"Spanish","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"Ciencias de la Comunicación","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Unión Europea","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Desinformación","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Política","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Periodismo","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Ciudadanos europeos","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Democracias","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Estado de derecho","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Derechos humanos","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"5910.02 Medios de Comunicación de Masas","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"Ramón Luis Varcárcel - La Unión Europea ante el reto de la desinformación","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"Conferencia de Ramón Luis Valcárcel, vicepresidente del Parlamento Europeo, en el Campus de Almagro de la Universidad Camilo José Cela (UCJC) bajo el título \"La Unión Europea ante el reto de la desinformación\", en la que ha alertado sobre el alcance de la desinformación en las democracias y sobre cómo pone en peligro los derechos de los ciudadanos europeos. También ha participado el rector de la UCJC, Samuel Martín-Barbero.","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2018-10-11","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"context":[],"externalReference":[],"instance":[{"license":{"value":"http://creativecommons.org/licenses/by-nc-nd/4.0/","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"instancetype":{"classid":"0024","classname":"Film","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"url":["http://hdl.handle.net/20.500.12020/795"],"distributionlocation":"","collectedfrom":{"key":"opendoar____::3989","value":"Depósito Digital e-UCJC","dataInfo":null},"dateofacceptance":{"value":"2018-10-11","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"storagedate":null,"device":null,"size":null,"version":null,"lastmetadataupdate":null,"metadataversionnumber":null,"geolocation":[]} \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/sample/dataset_10.json.gz b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/sample/dataset_10.json.gz deleted file mode 100644 index dccc28c879579c27eddfa3fd64c2e55a862b82b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7128 zcmV;}8zpT17X4im?zDv9FZ`3?^$o{xt=^b%UqvwSXlvmbgQzYv9pQ{J1+XnkNMcuw`5J-E<(r>qn*$BJ1>i$Xvx zy<%O6Y$a7WV@ejqcQpNGrua%0qLgY4#r3T@&G=nzF4&T1Tt7I;c{yw9ex&Ozw)fa4 zUUS#mxBVW}TUIMj7cWJ|i;`xm-pr3Ckrzdi(PZjPq0v}V^Jg&MG zLDLEwd&*avpHNri6lyPNO8C*APoA8>Esa&=Rhqtq8dlggcy3+T_Xb0M5*@#Idh+rp z@chY<9}Gh%`fWv1F&A9z0-H#&ho1T65=0_-Q?6J18fdmx-}as9-pzCoJv3W6w^pJh z?*(4q9eE-AdF6*QFPa6Tfj9O4tykY&Dw-E_sWN(XiP0I2d@xAjX@7 z9cw>Bt8yuo?rU^D7pbu7N4?IWGg`QxRQaM$z7&8dIuQHo_Iur3cRTX6z4NOVCugU7 zCR+d2SfY7E+v>D;XgrDs{~W=8{?Rn@!=qq0n)J~8z>>ZJX9;C1)si1N@y(6=LT&zc z^FJx?lb0fsd8?t@@1~*KI)Zi`Unu&^e_?qe1TU(zMDMZZnLtGaFZaFE_SgNMXr6;^ zNTzZjuJKft@6uyPzNqM8PXJz|$6zgc0=!(&TolVI1gM{Kb;Zrqw>U0Tc?teRYpAH= zbLjp%Zu~@mqZ70s2`4EfCo-#Y!6*}(pYrRS`JSk|GVV*|T=m^ub-zJoEtWJ9MJ62# zhlJrmD9}Aj*c=Q8g<^)Mvwkkq&HEBwstX6qA%Pi%zBlkg^2$x0 z4!RayiV{`RT7-I>5|JkYoEM@2zz`^A_>IuRv* zvwK5Z`n_8m#J{G?owZRV;0tL^Kn^G+3Z4*)?+tSX2XE)#)hp>Kzo2=U=*SH&Ehp{B zPOE3X-^8TxZtY51vzp;Gm%R2L>8NO=Yc%?Q9B#OeL#HJH1Qfum=~_O(Y(EBB3OjyT})82@?oT zGbD1!Y zWPPRn)fULBEN-Sg3tRzXTVBuGfBC`T|4>}hXm}mhG@OqDHfO;YoL~}-hMZ1Dz6$Z z4|gON>c`gmASo>p`k8S=z2_^9Ac(Hk>=SM}Q$qE%KD+M#AwfU_e@S>nVJa`T*UibQ7 zoIK|y5<16MaNPhVbIG{EcHL8m0eQ)Z;uv4u{6wl8g{TsNZM3StkYtJUqirY^Gy!jv zq-ZHYN&FdM#)=rsO`#Df2eqTxxPp0jEsesZrUE`JE10MwG9Yx*^7=MtpeR8#@C2A+ zaw0)h#lS59K45eBHOw`iOoyW(8&Wo8 z@Y9@oZ0rxiF!sk0HSzQghPg)f4Rb}q4;keebt1|&@vcnHfl;m@Cg%vf+3-Uo=V-+v zZhRf>lY6hE+sAIpJ>4lJe)+pD_4NRXw2L*-jjILXzx=(X$!-H%t0sK26LG0+)P+V| zXyl_CS=#HsTX1-@h~jo)9e7(v2JRQe$hqz=ZX4D?!FX;LMvKcUqYjuu0uu~E?aT=@p*84iYUXMxqL; z6ug|;_#4M?(26Q}+rp5MHC}iGTJH=mi{0_Pt}PK7e0WhK^vYQoGz-H=+2&m-t&|vX zT5)Bi$~Hej_nKpZIw*)yC9ICu4zaFq@H)4;1{q_qd8ZpuQuqP%WQ>ENf^Bm)Kf+z5 zm6H?zS7L&1CY<&wdNfGz@EE$K#Rm+ajc_?5aJv#Z5}DY@XzYT<4;eHL{HV1zQqpsHQ57uZ#cVc7CjQt9r*ssK zeQ(a@(=iXdxj!6@0ybikTY|>^IGAFvc;Zi|@ia>OBpQt-kx%F2BxF(4#h`IC7)9Yd zgT~|0hl?6-`!Om#6^u=)YwIhe=kGJZcq$~_bv!_a3KCwBnq_VkT^IJ z&M$Qa1bCZu6qW<;xW-wxlBsYTeLK-5xQ!MT&^Pon%Yov!D-NDpxhqe1tM?LQXb&NrTV=p}3s%9{_ElsuyqC4KnN2Jr=h`{(t(h;hO@2Do9SjTcylixA^w^B`plU9C$U8+gQrjxlh3WK>n z8AtJOI-c?<3St^k>iK-syP0Yd@Ngau8J~Jl;LRxyBae=`?++)*H~}qokZKYR2U9<| z7u94q2>i*1qM9`F9G+@olfqm{H3?_Ka2EInrJDQ&JP>qwhTci1%OhubE-$uGSNoK` z+v=5w88z=3ekY$&N-NXiqTv(maS z>|q^KJFe=WI3yIG@f`P+3+JF5am2xM2ja-tZYchU*zuic8FZrZHOV=~IWBZ8JSA08 zr&wTiM%JX0xOtZBs3To8in~)sp5M&jC^)9t*!p;`Dm1I&b*?!ur&|t8BFu7#Ht(l2mWt|? zAZ+Kg9?bTETh?T9-Dzyf7Pk2b4^KxOkwW15o=#+PS(A$3?^|WeOSY{6(9wd&MQ4>ApCpH0Wt(23KFOL3?R)4 zqNFMXnxDNB#8ueaN@y}Drj5<^#0NY$f`7ll$k*2NG(cZtyS8K_imECA^sHJFFo4W> z-We&C;VCf+jfZ|<0K3^RwoQ5PKZ@_>EV@}T?NqJT2C z^o3%tDxMhpmC?p_C_upmcrJ%A5xsCKTlS%yLt(oGA`4yJFc|yRrtHI)6v5IhQzYZ( zQuS>qbDg4zf$r@u>JGz=7NzklT5XEr~jbsc(j8>9f! zVQEzu5~av-QMxcHU6akvpfLEP)v#|lhFS;Z%&8o&d%Jqrj-OW|xsr+QUfWYf;B&m4 z>>_cm0cCG+)|#vh-)ahaG<*_^A^B`%dk@mD+RR_?F#tV2*Fu5x%9@X}+bK=Q+Nm z<6Ax`-*P&+d>)h~OwNb%kWB)Q4I?j3yh%bC{N;@q{FtzL?-su0ZN)pux14yR`|>S= z=?COnT6qr5w;WH$z3cgw!3_Qc;fLj0o>Y2W@Py{FPoC0BA@|5$tG_mU$=2OHM~-|@ za^#7`IX-jwgAO0re@4|e;Mem7NsKFWa2ym4u1_}5@3g67A051JFqhHk!2Hw3|^R=5cNaOA_wDH)6Xuv6VH~Og2L`<0&b`A{Thtnu&LVCGh5r z0qMPP`;x|ZW}2p7T8^)#q?vSC$Tq5qieh#xP5QZcP^mLqrJ5MSC~pXvSorCkwTDy} zE$Eioaw1c{Ky5u&;)3Goau~o*IIi9ab12>a{pWw5Y~CwY8P3iLC?BhNoK#Gc!^j`C ztbf8Aw^2fkDe{_fq!uP(TcK9;Lg5Xz!HH=w1$}PbWq3{t*e1X^ z-MlOM00Fd-Dnq%#s=oRj3M8lp3GgK{*Q76~9$Iw1`3X$dFz^(wazoZK^$KM{DtWeD z9?_&MM)O3|-k?WTw#{p@0)1uBzL;v#qv4yDt<-5+Zl$@Pq=cKm`jHtywMmH79PT%; zuw8|@UI?wJnYBfd&Ci;cxh29upUMmu7DURqtq_R-6sc4w+7g@;)pR$g97Uvibqd8&@oh^`WL~Vm(nMLcd+C5&qbckiH`+ZWr!$8unk0_MBrOcl3>uzubA+Mh zTuPIvF59NH1FOwMjs{@Jk9G|iHS)+x++_FD=^vSh;b~1`I-4T0QEI=faclLfHpA8! zY|XU=kHb}IWVCnVdhF&O5<%293Y8*%Q6%OrXfpU-@Y04ynd_5RX{xR5l$Kj6C{o)ewS!I4CT$Sfx3vTV*_=94TM48F0+B$5a`%Ijt%s1Y@o3h zO@iy#K;tNwCte)HF=aldK4X!`@wefK$Dt2_hJJ@gRwvQfNUTu z&*9lXlip2iplCb`MlSoBBN*M0VD!8Y%x=PSF_*)pGGcNm9gFCoAe`#;b9dmyy_v8@ZCFwW)BIH<)Pf ziOlO%DA!mYvS41wf|4f{zC`bkb9N52qxGS2S7!%n5;B=&LeMx6?z~!P+6--m{F*wk z-%l{P(KE5HC(Oi!X{1abyw;M^JcM%dj%j9uR&TpE;tq8~xhPxuHVLyd0|Ix<+jXZc zeL?5>S;765*C6txh%I@gImC|YoK1zyX)6m?ew}uaOpu$$+Kf{ec9htHqN=^TZU6<5 zz85upU`g>oHfdH%c>Hu>5-08DDYF&YL_#&IX;+(l0vhMYNYUJb+cU0N^IYju9K;Ik zsgL!Z&G!(<<=o6Z7&6r3`4k9is5U9HTHcgpMX+hMOmWbmz1>nSIz#pJW2>K-#*f&Hb3XvzVro+ zl>o6{RIvbA&-q-FMPRA`O{b-*^B!HTWlW5vEjQ6U25>B-CXe)uL2FCWy%oe^nlOU5 z71cQ}b<5xjCcDxk7&N_HbFws-hNd+JW-2on1@VZARKJQ}l&JetmTqtVkX__>Z(``1qHmz(+LIis+ zxUvTz^g+}NmoYJ0BUJyS0#~OKxk;p@p*P$72yhjbd}trRpfPl++;jc0&ef z-KpRQOmeu^&w>Wg&3k-u0;q_*T60Vd=R$lBo-8YJI(5vU-zA!kIrQmb>zG3wVGd0? z%^Y$=pkod>=FmejhsKe2EpuqjVjfa23?|-a6tX1Y@jMAxJPo|iA7f&f8<|7574IH% zD2N85=zixmMuTbep@>6`IEN<=+1zcHh(lh4!iJbp$q|PfamZyR`UnS!-N-H2oR1WK`a6JqDaGbw7EV?pqVAxd1Wb?i# zVN`dx91@q$={KC@{5v=E8l zCnarP#bjPDtGIRcs7@AkF3I!F&lqUa@;t(1O_YS>ONn$gdTj= zP%UXrnw4U69BD@Jq(7?*Loh0~d4V!nCk(T1GVp_u=-21y>2yl4k}Iaw;ZlORlwd9; zm`e%vI~!nKK9rA%*yng=pR(aNo>?b&W}{B?%$!GdJTu2LdqAF9;CcRaJhNmx^+WhL z8poWCl90!N?+p{q;~^hTM}F^Sp4qL%yT>!bj8K#NomV#=j068eW~iEU;=H=i(2{$1 ziDusL$PZq5<5@JF1!G4vb40T{63t%ep4GhhlN0@(Y*!`rv2!7Y1I9@m5FG)+u@#Z6q?) zLz)DmVI1+8CleY*aWL`1;cX{-+*-Voag(Wkzy0~+!FV|SfN>Km&!OWcxgyhRgqBKzNq&;md(*HcYJ|y z?1?U#!`;~vCo*rdV0W!1wN}$77$(3?_QLFV#+|aysY+?4>9WR<@Z=P8G7HUCm39%2 z(u^*Yybn<#rsonLQo=hMZYY1<`!xoOXRS1Q?3Z}@5m$P2H~W;$c|54NtIM0h*oN)g zjI3>0v$-EPRpVVNo(gPYs-2=8vFrw2c6q8jAg}QJl+8Ol(Wf~^Cy}N-b*=(S3+a=W zG^^msGq`c{K0o@5s+cS3=py&(4tLqq<@-*jjxN%QdN{g>ql Date: Fri, 3 Nov 2023 15:30:01 +0100 Subject: [PATCH 351/449] refactoring --- .../src/test/java/eu/dnetlib/dhp/bulktag/BulkTagJobTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/BulkTagJobTest.java b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/BulkTagJobTest.java index 64eb86338..ba0c6b252 100644 --- a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/BulkTagJobTest.java +++ b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/BulkTagJobTest.java @@ -41,8 +41,8 @@ public class BulkTagJobTest { "\"sdg\" : \"$['subject'][?(@['qualifier']['classid']=='SDG')].value\"," + "\"hostedby\" : \"$['instance'][*]['hostedby']['key']\" , " + "\"collectedfrom\" : \"$['instance'][*]['collectedfrom']['key']\"," + - "\"publisher\":\"$['publisher'].value\"," + - "\"publicationyear\":\"$['dateofacceptance'].value\"} "; + "\"publisher\":\"$['publisher'].value\"," + + "\"publicationyear\":\"$['dateofacceptance'].value\"} "; private static SparkSession spark; From 5bc97615d50383c9adc3eab2c69f86bacbe4fb4b Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Fri, 3 Nov 2023 15:35:10 +0100 Subject: [PATCH 352/449] - --- .../dhp/actionmanager/bipfinder/SparkAtomicActionScoreJob.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipfinder/SparkAtomicActionScoreJob.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipfinder/SparkAtomicActionScoreJob.java index 8adc88920..040c89782 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipfinder/SparkAtomicActionScoreJob.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/bipfinder/SparkAtomicActionScoreJob.java @@ -95,7 +95,7 @@ public class SparkAtomicActionScoreJob implements Serializable { return projectScores.map((MapFunction) bipProjectScores -> { Project project = new Project(); - // project.setId(bipProjectScores.getProjectId()); + project.setId(bipProjectScores.getProjectId()); project.setMeasures(bipProjectScores.toMeasures()); return project; }, Encoders.bean(Project.class)) From d524e3086630f20e129ae339072e0198b16c7392 Mon Sep 17 00:00:00 2001 From: dimitrispie Date: Tue, 14 Nov 2023 09:46:52 +0200 Subject: [PATCH 353/449] Changes to actionsets Resolve comments from https://code-repo.d4science.org/D-Net/dnet-hadoop/pulls/355 --- dhp-workflows/dhp-stats-actionsets/pom.xml | 39 ---- .../dnetlib/dhp/actionmanager/Constants.java | 102 --------- .../StatsAtomicActionsJob.java | 206 ++++-------------- .../stats_actionsets/StatsDiamondOAModel.java | 29 --- .../stats_actionsets/StatsGreenOAModel.java | 29 --- .../stats_actionsets/StatsOAColourModel.java | 47 ---- .../StatsPubliclyFundedModel.java | 29 --- .../StatsResultEnhancementModel.java | 76 +++++++ .../stats_actionsets/oozie_app/workflow.xml | 28 --- 9 files changed, 116 insertions(+), 469 deletions(-) delete mode 100644 dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/Constants.java delete mode 100644 dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/stats_actionsets/StatsDiamondOAModel.java delete mode 100644 dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/stats_actionsets/StatsGreenOAModel.java delete mode 100644 dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/stats_actionsets/StatsOAColourModel.java delete mode 100644 dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/stats_actionsets/StatsPubliclyFundedModel.java create mode 100644 dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/stats_actionsets/StatsResultEnhancementModel.java diff --git a/dhp-workflows/dhp-stats-actionsets/pom.xml b/dhp-workflows/dhp-stats-actionsets/pom.xml index 670fd4a5e..3daa8f995 100644 --- a/dhp-workflows/dhp-stats-actionsets/pom.xml +++ b/dhp-workflows/dhp-stats-actionsets/pom.xml @@ -8,46 +8,7 @@ dhp-stats-actionsets - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - org.apache.httpcomponents httpclient diff --git a/dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/Constants.java b/dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/Constants.java deleted file mode 100644 index 0df34364d..000000000 --- a/dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/Constants.java +++ /dev/null @@ -1,102 +0,0 @@ - -package eu.dnetlib.dhp.actionmanager; - -import java.util.Optional; - -import org.apache.spark.api.java.function.MapFunction; -import org.apache.spark.sql.Dataset; -import org.apache.spark.sql.Encoders; -import org.apache.spark.sql.SparkSession; - -import com.fasterxml.jackson.databind.ObjectMapper; - -import eu.dnetlib.dhp.application.ArgumentApplicationParser; -import eu.dnetlib.dhp.schema.common.ModelConstants; -import eu.dnetlib.dhp.schema.oaf.StructuredProperty; -import eu.dnetlib.dhp.schema.oaf.Subject; -import eu.dnetlib.dhp.schema.oaf.utils.OafMapperUtils; - -public class Constants { - - public static final String DOI = "doi"; - public static final String DOI_CLASSNAME = "Digital Object Identifier"; - - public static final String DEFAULT_DELIMITER = ","; - public static final String DEFAULT_FOS_DELIMITER = "\t"; - - public static final String UPDATE_DATA_INFO_TYPE = "update"; -// public static final String UPDATE_SUBJECT_FOS_CLASS_ID = "subject:fos"; - public static final String UPDATE_CLASS_NAME = "Inferred by OpenAIRE"; -// public static final String UPDATE_MEASURE_BIP_CLASS_ID = "measure:bip"; -// public static final String UPDATE_SUBJECT_SDG_CLASS_ID = "subject:sdg"; -// public static final String UPDATE_MEASURE_USAGE_COUNTS_CLASS_ID = "measure:usage_counts"; -// public static final String UPDATE_KEY_USAGE_COUNTS = "count"; - - public static final String UPDATE_MEASURE_STATS_MODEL_CLASS_ID = "measure:stats_model"; - public static final String UPDATE_KEY_STATS_MODEL = "stats_model"; - -// public static final String UPDATE_MEASURE_PUBLICLY_FUNDED_CLASS_ID = "measure:publicly_funded"; -// public static final String UPDATE_KEY_PUBLICLY_FUNDED = "publicly_funded"; - -// public static final String FOS_CLASS_ID = "FOS"; -// public static final String FOS_CLASS_NAME = "Fields of Science and Technology classification"; -// -// public static final String SDG_CLASS_ID = "SDG"; -// public static final String SDG_CLASS_NAME = "Sustainable Development Goals"; - - public static final String NULL = "NULL"; - - public static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); - - private Constants() { - } - - public static Boolean isSparkSessionManaged(ArgumentApplicationParser parser) { - return Optional - .ofNullable(parser.get("isSparkSessionManaged")) - .map(Boolean::valueOf) - .orElse(Boolean.TRUE); - } - - public static Dataset readPath( - SparkSession spark, String inputPath, Class clazz) { - return spark - .read() - .textFile(inputPath) - .map((MapFunction) value -> OBJECT_MAPPER.readValue(value, clazz), Encoders.bean(clazz)); - } - - public static Subject getSubject(String sbj, String classid, String classname, - String diqualifierclassid) { - if (sbj == null || sbj.equals(NULL)) - return null; - Subject s = new Subject(); - s.setValue(sbj); - s - .setQualifier( - OafMapperUtils - .qualifier( - classid, - classname, - ModelConstants.DNET_SUBJECT_TYPOLOGIES, - ModelConstants.DNET_SUBJECT_TYPOLOGIES)); - s - .setDataInfo( - OafMapperUtils - .dataInfo( - false, - UPDATE_DATA_INFO_TYPE, - true, - false, - OafMapperUtils - .qualifier( - diqualifierclassid, - UPDATE_CLASS_NAME, - ModelConstants.DNET_PROVENANCE_ACTIONS, - ModelConstants.DNET_PROVENANCE_ACTIONS), - "")); - - return s; - - } -} diff --git a/dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/stats_actionsets/StatsAtomicActionsJob.java b/dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/stats_actionsets/StatsAtomicActionsJob.java index f6e2cfe01..e984d68fc 100644 --- a/dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/stats_actionsets/StatsAtomicActionsJob.java +++ b/dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/stats_actionsets/StatsAtomicActionsJob.java @@ -1,7 +1,6 @@ package eu.dnetlib.dhp.actionmanager.stats_actionsets; -import static eu.dnetlib.dhp.actionmanager.Constants.*; import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkHiveSession; import java.io.Serializable; @@ -12,14 +11,22 @@ import java.util.Optional; import org.apache.commons.io.IOUtils; import org.apache.hadoop.io.Text; +import org.apache.hadoop.io.compress.GzipCodec; import org.apache.hadoop.mapred.SequenceFileOutputFormat; import org.apache.spark.SparkConf; +import org.apache.spark.api.java.JavaPairRDD; +import org.apache.spark.api.java.JavaRDD; +import org.apache.spark.api.java.JavaSparkContext; import org.apache.spark.api.java.function.MapFunction; import org.apache.spark.api.java.function.MapGroupsFunction; +import org.apache.spark.sql.*; import org.apache.spark.sql.Dataset; import org.apache.spark.sql.Encoders; import org.apache.spark.sql.SaveMode; import org.apache.spark.sql.SparkSession; +import org.apache.spark.sql.types.DataTypes; +import org.apache.spark.sql.types.StructField; +import org.apache.spark.sql.types.StructType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -65,6 +72,9 @@ public class StatsAtomicActionsJob implements Serializable { SparkConf conf = new SparkConf(); conf.set("hive.metastore.uris", parser.get("hive_metastore_uris")); + conf.set("spark.speculation", "false"); + conf.set("spark.hadoop.mapreduce.map.speculative", "false"); + conf.set("spark.hadoop.mapreduce.reduce.speculative", "false"); final String dbname = parser.get("statsDB"); @@ -75,75 +85,26 @@ public class StatsAtomicActionsJob implements Serializable { isSparkSessionManaged, spark -> { removeOutputDir(spark, outputPath); - prepareGreenData(dbname, spark, workingPath + "/greenOADB", "indi_pub_green_oa", "id"); - prepareDiamondData(dbname, spark, workingPath + "/diamondOADΒ", "indi_pub_diamond", "id"); - preparePubliclyFundedData( - dbname, spark, workingPath + "/publiclyFundedDΒ", "indi_funded_result_with_fundref", "id"); - prepareOAColourData(dbname, spark, workingPath + "/oacolourDB", "", "id"); + prepareResultEnhancement(dbname, spark, workingPath + "/resultEnhancements", "id"); writeActionSet(spark, workingPath, outputPath); }); } - private static void prepareGreenData(String dbname, SparkSession spark, String workingPath, String tableName, + private static void prepareResultEnhancement(String dbname, SparkSession spark, String workingPath, String resultAttributeName) { spark .sql( String .format( - "select %s as id, green_oa as green_oa " + - "from %s.%s", - resultAttributeName, dbname, tableName)) - .as(Encoders.bean(StatsGreenOAModel.class)) - .write() - .mode(SaveMode.Overwrite) - .option("compression", "gzip") - .json(workingPath); - } - - private static void prepareDiamondData(String dbname, SparkSession spark, String workingPath, String tableName, - String resultAttributeName) { - spark - .sql( - String - .format( - "select %s as id, in_diamond_journal as in_diamond_journal " + - "from %s.%s", - resultAttributeName, dbname, tableName)) - .as(Encoders.bean(StatsDiamondOAModel.class)) - .write() - .mode(SaveMode.Overwrite) - .option("compression", "gzip") - .json(workingPath); - } - - private static void preparePubliclyFundedData(String dbname, SparkSession spark, String workingPath, - String tableName, - String resultAttributeName) { - spark - .sql( - String - .format( - "select %s as id, fundref as publicly_funded " + - "from %s.%s", - resultAttributeName, dbname, tableName)) - .as(Encoders.bean(StatsPubliclyFundedModel.class)) - .write() - .mode(SaveMode.Overwrite) - .option("compression", "gzip") - .json(workingPath); - } - - private static void prepareOAColourData(String dbname, SparkSession spark, String workingPath, String tableName, - String resultAttributeName) { - spark - .sql( - String - .format( - "select b.%s as id, is_gold, is_bronze_oa, is_hybrid from %s.indi_pub_bronze_oa b " + + "select b.%s as id, is_gold, is_bronze_oa, is_hybrid,green_oa, in_diamond_journal,f.fundref as publicly_funded " + + "from %s.indi_pub_bronze_oa b " + "left outer join %s.indi_pub_gold_oa g on g.id=b.id " + - "left outer join %s.indi_pub_hybrid h on b.id=h.id", - resultAttributeName, dbname, dbname, dbname)) - .as(Encoders.bean(StatsOAColourModel.class)) + "left outer join %s.indi_pub_hybrid h on b.id=h.id " + + "left outer join %s.indi_pub_green_oa gr on b.id=gr.id " + + "left outer join %s.indi_pub_diamond d on b.id=d.id " + + "left outer join %s.indi_funded_result_with_fundref f on b.id=f.id ", + resultAttributeName, dbname, dbname, dbname, dbname, dbname, dbname)) + .as(Encoders.bean(StatsResultEnhancementModel.class)) .write() .mode(SaveMode.Overwrite) .option("compression", "gzip") @@ -152,125 +113,39 @@ public class StatsAtomicActionsJob implements Serializable { public static void writeActionSet(SparkSession spark, String inputPath, String outputPath) { - getFinalIndicatorsGreenResult(spark, inputPath + "/greenOADB") + getResultEnhancements(spark, inputPath + "/resultEnhancements") .toJavaRDD() .map(p -> new AtomicAction(p.getClass(), p)) - .union( - getFinalIndicatorsDiamondResult(spark, inputPath + "/diamondOADΒ") - .toJavaRDD() - .map(p -> new AtomicAction(p.getClass(), p))) - .union( - getFinalIndicatorsPubliclyFundedResult(spark, inputPath + "/publiclyFundedDΒ") - .toJavaRDD() - .map(p -> new AtomicAction(p.getClass(), p))) - .union( - getFinalIndicatorsOAColourResult(spark, inputPath + "/oacolourDB") - .toJavaRDD() - .map(p -> new AtomicAction(p.getClass(), p))) .mapToPair( aa -> new Tuple2<>(new Text(aa.getClazz().getCanonicalName()), new Text(OBJECT_MAPPER.writeValueAsString(aa)))) - .saveAsHadoopFile(outputPath, Text.class, Text.class, SequenceFileOutputFormat.class); + .saveAsHadoopFile( + outputPath, + Text.class, + Text.class, + SequenceFileOutputFormat.class, + GzipCodec.class); } - public static Measure newMeasureInstance(String id) { - Measure m = new Measure(); - m.setId(id); - m.setUnit(new ArrayList<>()); - return m; - } + private static Dataset getResultEnhancements(SparkSession spark, String inputPath) { - private static Dataset getFinalIndicatorsGreenResult(SparkSession spark, String inputPath) { - - return readPath(spark, inputPath, StatsGreenOAModel.class) - .map((MapFunction) usm -> { + return readPath(spark, inputPath, StatsResultEnhancementModel.class) + .map((MapFunction) usm -> { Result r = new Result(); r.setId("50|" + usm.getId()); - r.setMeasures(getMeasure(usm.isGreen_oa(), "green_oa")); + r.setIsInDiamondJournal(usm.isIn_diamond_journal()); + r.setIsGreen(usm.isGreen_oa()); + r.setPubliclyFunded(usm.isPublicly_funded()); + if (usm.isIs_bronze_oa()) + r.setOpenAccessColor(OpenAccessColor.bronze); + else if (usm.isIs_gold()) + r.setOpenAccessColor(OpenAccessColor.bronze); + else if (usm.isIs_gold()) + r.setOpenAccessColor(OpenAccessColor.gold); return r; }, Encoders.bean(Result.class)); } - private static Dataset getFinalIndicatorsDiamondResult(SparkSession spark, String inputPath) { - - return readPath(spark, inputPath, StatsDiamondOAModel.class) - .map((MapFunction) usm -> { - Result r = new Result(); - r.setId("50|" + usm.getId()); - r.setMeasures(getMeasure(usm.isIn_diamond_journal(), "in_diamond_journal")); - return r; - }, Encoders.bean(Result.class)); - } - - private static Dataset getFinalIndicatorsPubliclyFundedResult(SparkSession spark, String inputPath) { - - return readPath(spark, inputPath, StatsPubliclyFundedModel.class) - .map((MapFunction) usm -> { - Result r = new Result(); - r.setId("50|" + usm.getId()); - r.setMeasures(getMeasure(usm.isPublicly_funded(), "publicly_funded")); - return r; - }, Encoders.bean(Result.class)); - } - - private static Dataset getFinalIndicatorsOAColourResult(SparkSession spark, String inputPath) { - - return readPath(spark, inputPath, StatsOAColourModel.class) - .map((MapFunction) usm -> { - Result r = new Result(); - r.setId("50|" + usm.getId()); - r.setMeasures(getMeasureOAColour(usm.isIs_gold(), usm.isIs_bronze_oa(), usm.isIs_hybrid())); - return r; - }, Encoders.bean(Result.class)); - } - - private static List getMeasure(Boolean is_model_oa, String model_type) { - DataInfo dataInfo = OafMapperUtils - .dataInfo( - false, - UPDATE_DATA_INFO_TYPE, - true, - false, - OafMapperUtils - .qualifier( - UPDATE_MEASURE_STATS_MODEL_CLASS_ID, - UPDATE_CLASS_NAME, - ModelConstants.DNET_PROVENANCE_ACTIONS, - ModelConstants.DNET_PROVENANCE_ACTIONS), - ""); - - return Arrays - .asList( - OafMapperUtils - .newMeasureInstance(model_type, String.valueOf(is_model_oa), UPDATE_KEY_STATS_MODEL, dataInfo)); - } - - private static List getMeasureOAColour(Boolean is_gold, Boolean is_bronze_oa, Boolean is_hybrid) { - DataInfo dataInfo = OafMapperUtils - .dataInfo( - false, - UPDATE_DATA_INFO_TYPE, - true, - false, - OafMapperUtils - .qualifier( - UPDATE_MEASURE_STATS_MODEL_CLASS_ID, - UPDATE_CLASS_NAME, - ModelConstants.DNET_PROVENANCE_ACTIONS, - ModelConstants.DNET_PROVENANCE_ACTIONS), - ""); - - return Arrays - .asList( - OafMapperUtils - .newMeasureInstance("is_gold", String.valueOf(is_gold), UPDATE_KEY_STATS_MODEL, dataInfo), - OafMapperUtils - .newMeasureInstance("is_bronze_oa", String.valueOf(is_bronze_oa), UPDATE_KEY_STATS_MODEL, dataInfo), - OafMapperUtils - .newMeasureInstance("is_hybrid", String.valueOf(is_hybrid), UPDATE_KEY_STATS_MODEL, dataInfo)); - - } - private static void removeOutputDir(SparkSession spark, String path) { HdfsSupport.remove(path, spark.sparkContext().hadoopConfiguration()); } @@ -282,5 +157,4 @@ public class StatsAtomicActionsJob implements Serializable { .textFile(inputPath) .map((MapFunction) value -> OBJECT_MAPPER.readValue(value, clazz), Encoders.bean(clazz)); } - } diff --git a/dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/stats_actionsets/StatsDiamondOAModel.java b/dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/stats_actionsets/StatsDiamondOAModel.java deleted file mode 100644 index 340790fa8..000000000 --- a/dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/stats_actionsets/StatsDiamondOAModel.java +++ /dev/null @@ -1,29 +0,0 @@ - -package eu.dnetlib.dhp.actionmanager.stats_actionsets; - -import java.io.Serializable; - -/** - * @author dimitris.pierrakos - * @Date 30/10/23 - */ -public class StatsDiamondOAModel implements Serializable { - private String id; - private boolean in_diamond_journal; - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public boolean isIn_diamond_journal() { - return in_diamond_journal; - } - - public void setIn_diamond_journal(boolean in_diamond_journal) { - this.in_diamond_journal = in_diamond_journal; - } -} diff --git a/dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/stats_actionsets/StatsGreenOAModel.java b/dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/stats_actionsets/StatsGreenOAModel.java deleted file mode 100644 index 3d59bdf95..000000000 --- a/dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/stats_actionsets/StatsGreenOAModel.java +++ /dev/null @@ -1,29 +0,0 @@ - -package eu.dnetlib.dhp.actionmanager.stats_actionsets; - -import java.io.Serializable; - -/** - * @author dimitris.pierrakos - * @Date 30/10/23 - */ -public class StatsGreenOAModel implements Serializable { - private String id; - private boolean green_oa; - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public boolean isGreen_oa() { - return green_oa; - } - - public void setGreen_oa(boolean green_oa) { - this.green_oa = green_oa; - } -} diff --git a/dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/stats_actionsets/StatsOAColourModel.java b/dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/stats_actionsets/StatsOAColourModel.java deleted file mode 100644 index a83eb4f60..000000000 --- a/dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/stats_actionsets/StatsOAColourModel.java +++ /dev/null @@ -1,47 +0,0 @@ - -package eu.dnetlib.dhp.actionmanager.stats_actionsets; - -import java.io.Serializable; - -/** - * @author dimitris.pierrakos - * @Date 30/10/23 - */ -public class StatsOAColourModel implements Serializable { - private String id; - private boolean is_gold; - private boolean is_bronze_oa; - private boolean is_hybrid; - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public boolean isIs_gold() { - return is_gold; - } - - public void setIs_gold(boolean is_gold) { - this.is_gold = is_gold; - } - - public boolean isIs_bronze_oa() { - return is_bronze_oa; - } - - public void setIs_bronze_oa(boolean is_bronze_oa) { - this.is_bronze_oa = is_bronze_oa; - } - - public boolean isIs_hybrid() { - return is_hybrid; - } - - public void setIs_hybrid(boolean is_hybrid) { - this.is_hybrid = is_hybrid; - } -} diff --git a/dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/stats_actionsets/StatsPubliclyFundedModel.java b/dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/stats_actionsets/StatsPubliclyFundedModel.java deleted file mode 100644 index 6bdc78220..000000000 --- a/dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/stats_actionsets/StatsPubliclyFundedModel.java +++ /dev/null @@ -1,29 +0,0 @@ - -package eu.dnetlib.dhp.actionmanager.stats_actionsets; - -import java.io.Serializable; - -/** - * @author dimitris.pierrakos - * @Date 30/10/23 - */ -public class StatsPubliclyFundedModel implements Serializable { - private String id; - private boolean publicly_funded; - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public boolean isPublicly_funded() { - return publicly_funded; - } - - public void setPublicly_funded(boolean publicly_funded) { - this.publicly_funded = publicly_funded; - } -} diff --git a/dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/stats_actionsets/StatsResultEnhancementModel.java b/dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/stats_actionsets/StatsResultEnhancementModel.java new file mode 100644 index 000000000..f794c5591 --- /dev/null +++ b/dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/stats_actionsets/StatsResultEnhancementModel.java @@ -0,0 +1,76 @@ + +package eu.dnetlib.dhp.actionmanager.stats_actionsets; + +import java.io.Serializable; + +import eu.dnetlib.dhp.schema.oaf.*; + +/** + * @author dimitris.pierrakos + * @Date 30/10/23 + */ +public class StatsResultEnhancementModel implements Serializable { + private String id; + private Boolean is_gold; + private Boolean is_bronze_oa; + private Boolean is_hybrid; + private boolean in_diamond_journal; + private boolean green_oa; + private boolean publicly_funded; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public Boolean isIs_gold() { + return is_gold; + } + + public void setIs_gold(Boolean is_gold) { + this.is_gold = is_gold; + } + + public Boolean isIs_bronze_oa() { + return is_bronze_oa; + } + + public void setIs_bronze_oa(Boolean is_bronze_oa) { + this.is_bronze_oa = is_bronze_oa; + } + + public Boolean isIs_hybrid() { + return is_hybrid; + } + + public void setIs_hybrid(Boolean is_hybrid) { + this.is_hybrid = is_hybrid; + } + + public boolean isIn_diamond_journal() { + return in_diamond_journal; + } + + public void setIn_diamond_journal(boolean in_diamond_journal) { + this.in_diamond_journal = in_diamond_journal; + } + + public boolean isGreen_oa() { + return green_oa; + } + + public void setGreen_oa(boolean green_oa) { + this.green_oa = green_oa; + } + + public boolean isPublicly_funded() { + return publicly_funded; + } + + public void setPublicly_funded(boolean publicly_funded) { + this.publicly_funded = publicly_funded; + } +} diff --git a/dhp-workflows/dhp-stats-actionsets/src/main/resources/eu/dnetlib/dhp/actionmanager/stats_actionsets/oozie_app/workflow.xml b/dhp-workflows/dhp-stats-actionsets/src/main/resources/eu/dnetlib/dhp/actionmanager/stats_actionsets/oozie_app/workflow.xml index 1aa4e1050..79fd3f56e 100644 --- a/dhp-workflows/dhp-stats-actionsets/src/main/resources/eu/dnetlib/dhp/actionmanager/stats_actionsets/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-stats-actionsets/src/main/resources/eu/dnetlib/dhp/actionmanager/stats_actionsets/oozie_app/workflow.xml @@ -68,39 +68,11 @@ Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]
- - - yarn - cluster - Produces the atomic action with the usage stats count for results - - eu.dnetlib.dhp.actionmanager.stats_actionsets.SparkAtomicActionGreenOAJob - dhp-stats-actionsets-${projectVersion}.jar - - --executor-memory=${sparkExecutorMemory} - --executor-cores=${sparkExecutorCores} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.sql.warehouse.dir=${sparkSqlWarehouseDir} - - --hive_metastore_uris${hiveMetastoreUris} - --outputPath${outputPath} - --statsDB${statsDB} - --workingPath${workingDir} - - - - - yarn cluster Produces the atomic action with the stats green_oa for results - eu.dnetlib.dhp.actionmanager.stats_actionsets.StatsAtomicActionsJob dhp-stats-actionsets-${projectVersion}.jar From 6ce36b3e412020619afd8a242d863ec3a4f632b5 Mon Sep 17 00:00:00 2001 From: Sandro La Bruzzo Date: Tue, 14 Nov 2023 12:04:29 +0100 Subject: [PATCH 354/449] Implemented ORCID Workflow on DHP-Aggregation for retrieving ORCID DUMP and generating tables --- .../orcid/DownloadORCIDDumpApplication.java | 102 +++ .../collection/orcid/ExtractORCIDDump.java | 71 +++ .../dhp/collection/orcid/ORCIDExtractor.java | 171 ++++++ .../dhp/collection/orcid/OrcidParser.java | 251 ++++++++ .../dhp/collection/orcid/model/Author.java | 83 +++ .../collection/orcid/model/Employment.java | 54 ++ .../dhp/collection/orcid/model/ORCIDItem.java | 14 + .../dhp/collection/orcid/model/Pid.java | 33 + .../dhp/collection/orcid/model/Work.java | 35 ++ .../orcid/download_orcid_parameter.json | 21 + .../orcid/extract_orcid_parameter.json | 21 + .../orcid/generate_orcid_table_parameter.json | 21 + .../orcid/oozie_app/config-default.xml | 23 + .../collection/orcid/oozie_app/workflow.xml | 81 +++ .../preprocess_orcid_dump_parameter.json | 21 + .../orcid/SparkGenerateORCIDTable.scala | 101 +++ .../collection/orcid/DownloadORCIDTest.java | 158 +++++ .../activity_work_0000-0002-2536-4498.xml | 69 +++ .../activity_work_0000-0002-5982-8983.xml | 79 +++ ...ty_work_0000-0003-2760-1191-similarity.xml | 113 ++++ .../activity_work_0000-0003-2760-1191.xml | 106 ++++ ..._work_0000-0003-2760-1191_contributors.xml | 101 +++ .../dhp/collection/orcid/employment.xml | 50 ++ .../dhp/collection/orcid/employment_2.xml | 55 ++ .../dhp/collection/orcid/employment_3.xml | 62 ++ .../dnetlib/dhp/collection/orcid/summary.xml | 581 ++++++++++++++++++ 26 files changed, 2477 insertions(+) create mode 100644 dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/collection/orcid/DownloadORCIDDumpApplication.java create mode 100644 dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/collection/orcid/ExtractORCIDDump.java create mode 100644 dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/collection/orcid/ORCIDExtractor.java create mode 100644 dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/collection/orcid/OrcidParser.java create mode 100644 dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/collection/orcid/model/Author.java create mode 100644 dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/collection/orcid/model/Employment.java create mode 100644 dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/collection/orcid/model/ORCIDItem.java create mode 100644 dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/collection/orcid/model/Pid.java create mode 100644 dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/collection/orcid/model/Work.java create mode 100644 dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/collection/orcid/download_orcid_parameter.json create mode 100644 dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/collection/orcid/extract_orcid_parameter.json create mode 100644 dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/collection/orcid/generate_orcid_table_parameter.json create mode 100644 dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/collection/orcid/oozie_app/config-default.xml create mode 100644 dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/collection/orcid/oozie_app/workflow.xml create mode 100644 dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/collection/orcid/preprocess_orcid_dump_parameter.json create mode 100644 dhp-workflows/dhp-aggregation/src/main/scala/eu/dnetlib/dhp/collection/orcid/SparkGenerateORCIDTable.scala create mode 100644 dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/collection/orcid/DownloadORCIDTest.java create mode 100644 dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/collection/orcid/activity_work_0000-0002-2536-4498.xml create mode 100644 dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/collection/orcid/activity_work_0000-0002-5982-8983.xml create mode 100644 dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/collection/orcid/activity_work_0000-0003-2760-1191-similarity.xml create mode 100644 dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/collection/orcid/activity_work_0000-0003-2760-1191.xml create mode 100644 dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/collection/orcid/activity_work_0000-0003-2760-1191_contributors.xml create mode 100644 dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/collection/orcid/employment.xml create mode 100644 dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/collection/orcid/employment_2.xml create mode 100644 dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/collection/orcid/employment_3.xml create mode 100644 dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/collection/orcid/summary.xml diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/collection/orcid/DownloadORCIDDumpApplication.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/collection/orcid/DownloadORCIDDumpApplication.java new file mode 100644 index 000000000..69661bbf6 --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/collection/orcid/DownloadORCIDDumpApplication.java @@ -0,0 +1,102 @@ + +package eu.dnetlib.dhp.collection.orcid; + +import static eu.dnetlib.dhp.utils.DHPUtils.getHadoopConfiguration; + +import java.io.InputStream; +import java.net.URL; +import java.net.URLConnection; +import java.util.Objects; + +import org.apache.commons.io.IOUtils; +import org.apache.hadoop.fs.FSDataOutputStream; +import org.apache.hadoop.fs.FileSystem; +import org.apache.hadoop.fs.Path; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClientBuilder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import eu.dnetlib.dhp.application.ArgumentApplicationParser; + +public class DownloadORCIDDumpApplication { + private static final Logger log = LoggerFactory.getLogger(DownloadORCIDDumpApplication.class); + + private final FileSystem fileSystem; + + public DownloadORCIDDumpApplication(FileSystem fileSystem) { + this.fileSystem = fileSystem; + } + + public static void main(String[] args) throws Exception { + final ArgumentApplicationParser argumentParser = new ArgumentApplicationParser( + IOUtils + .toString( + Objects + .requireNonNull( + DownloadORCIDDumpApplication.class + .getResourceAsStream( + "/eu/dnetlib/dhp/collection/orcid/download_orcid_parameter.json")))); + argumentParser.parseArgument(args); + + final String hdfsuri = argumentParser.get("namenode"); + log.info("hdfsURI is {}", hdfsuri); + + final String targetPath = argumentParser.get("targetPath"); + log.info("targetPath is {}", targetPath); + + final String apiURL = argumentParser.get("apiURL"); + log.info("apiURL is {}", apiURL); + + final FileSystem fileSystem = FileSystem.get(getHadoopConfiguration(hdfsuri)); + + new DownloadORCIDDumpApplication(fileSystem).run(targetPath, apiURL); + + } + + private void downloadItem(final String name, final String itemURL, final String basePath) { + try { + final Path hdfsWritePath = new Path(String.format("%s/%s", basePath, name)); + final FSDataOutputStream fsDataOutputStream = fileSystem.create(hdfsWritePath, true); + final HttpGet request = new HttpGet(itemURL); + final int timeout = 60; // seconds + final RequestConfig config = RequestConfig + .custom() + .setConnectTimeout(timeout * 1000) + .setConnectionRequestTimeout(timeout * 1000) + .setSocketTimeout(timeout * 1000) + .build(); + log.info("Downloading url {} into {}", itemURL, hdfsWritePath.getName()); + try (CloseableHttpClient client = HttpClientBuilder.create().setDefaultRequestConfig(config).build(); + CloseableHttpResponse response = client.execute(request)) { + int responseCode = response.getStatusLine().getStatusCode(); + log.info("Response code is {}", responseCode); + if (responseCode >= 200 && responseCode < 400) { + IOUtils.copy(response.getEntity().getContent(), fsDataOutputStream); + } + } catch (Throwable eu) { + throw new RuntimeException(eu); + } + } catch (Throwable e) { + throw new RuntimeException(e); + } + } + + protected void run(final String targetPath, final String apiURL) throws Exception { + final ObjectMapper mapper = new ObjectMapper(); + final URL url = new URL(apiURL); + URLConnection conn = url.openConnection(); + InputStream is = conn.getInputStream(); + final String json = IOUtils.toString(is); + JsonNode jsonNode = mapper.readTree(json); + jsonNode + .get("files") + .forEach(i -> downloadItem(i.get("name").asText(), i.get("download_url").asText(), targetPath)); + } +} diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/collection/orcid/ExtractORCIDDump.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/collection/orcid/ExtractORCIDDump.java new file mode 100644 index 000000000..4aefdb5e9 --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/collection/orcid/ExtractORCIDDump.java @@ -0,0 +1,71 @@ + +package eu.dnetlib.dhp.collection.orcid; + +import static eu.dnetlib.dhp.utils.DHPUtils.getHadoopConfiguration; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +import org.apache.commons.io.IOUtils; +import org.apache.hadoop.fs.FileSystem; +import org.apache.hadoop.fs.LocatedFileStatus; +import org.apache.hadoop.fs.Path; +import org.apache.hadoop.fs.RemoteIterator; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import eu.dnetlib.dhp.application.ArgumentApplicationParser; + +public class ExtractORCIDDump { + private static final Logger log = LoggerFactory.getLogger(ExtractORCIDDump.class); + + private final FileSystem fileSystem; + + public ExtractORCIDDump(FileSystem fileSystem) { + this.fileSystem = fileSystem; + } + + public static void main(String[] args) throws Exception { + final ArgumentApplicationParser argumentParser = new ArgumentApplicationParser( + IOUtils + .toString( + Objects + .requireNonNull( + DownloadORCIDDumpApplication.class + .getResourceAsStream( + "/eu/dnetlib/dhp/collection/orcid/extract_orcid_parameter.json")))); + argumentParser.parseArgument(args); + + final String hdfsuri = argumentParser.get("namenode"); + log.info("hdfsURI is {}", hdfsuri); + + final String sourcePath = argumentParser.get("sourcePath"); + log.info("sourcePath is {}", sourcePath); + + final String targetPath = argumentParser.get("targetPath"); + log.info("targetPath is {}", targetPath); + + final FileSystem fileSystem = FileSystem.get(getHadoopConfiguration(hdfsuri)); + + new ExtractORCIDDump(fileSystem).run(sourcePath, targetPath); + + } + + public void run(final String sourcePath, final String targetPath) throws IOException, InterruptedException { + RemoteIterator ls = fileSystem.listFiles(new Path(sourcePath), false); + final List workers = new ArrayList<>(); + int i = 0; + while (ls.hasNext()) { + LocatedFileStatus current = ls.next(); + if (current.getPath().getName().endsWith("tar.gz")) { + workers.add(new ORCIDExtractor(fileSystem, "" + i++, current.getPath(), targetPath)); + } + } + workers.forEach(Thread::start); + for (ORCIDExtractor worker : workers) { + worker.join(); + } + } +} diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/collection/orcid/ORCIDExtractor.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/collection/orcid/ORCIDExtractor.java new file mode 100644 index 000000000..11f4c55d8 --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/collection/orcid/ORCIDExtractor.java @@ -0,0 +1,171 @@ + +package eu.dnetlib.dhp.collection.orcid; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.HashMap; +import java.util.Map; + +import org.apache.commons.compress.archivers.tar.TarArchiveEntry; +import org.apache.commons.compress.archivers.tar.TarArchiveInputStream; +import org.apache.hadoop.fs.FileSystem; +import org.apache.hadoop.fs.Path; +import org.apache.hadoop.io.IOUtils; +import org.apache.hadoop.io.SequenceFile; +import org.apache.hadoop.io.Text; +import org.apache.hadoop.io.compress.CompressionCodec; +import org.apache.hadoop.io.compress.CompressionCodecFactory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/**\ + * The ORCIDExtractor class extracts ORCID data from a TAR archive. + * The class creates a map of SequenceFile.Writer objects, one for each type of data that is to be extracted (e.g., employments, works, summaries). + * Then, it iterates over the TAR archive and writes each entry to the appropriate SequenceFile.Writer object. + * Finally, it closes all the SequenceFile.Writer objects. + */ +public class ORCIDExtractor extends Thread { + + private static final Logger log = LoggerFactory.getLogger(ORCIDExtractor.class); + + private final FileSystem fileSystem; + + private final String id; + + private final Path sourcePath; + + private final String baseOutputPath; + + public ORCIDExtractor(FileSystem fileSystem, String id, Path sourcePath, String baseOutputPath) { + this.fileSystem = fileSystem; + this.id = id; + this.sourcePath = sourcePath; + this.baseOutputPath = baseOutputPath; + } + + /** + * creates a map of SequenceFile.Writer objects, + * one for each type of data that is to be extracted. The map is created based on the filename in the TAR archive. + * For example, if the filename is employments.json, the map will contain an entry for the SequenceFile.Writer + * object that writes employment data. + * @return the Map + */ + private Map createMap() { + try { + log.info("Thread {} Creating sequence files starting from this input Path {}", id, sourcePath.getName()); + Map res = new HashMap<>(); + if (sourcePath.getName().contains("summaries")) { + + final String summaryPath = String.format("%s/summaries_%s", baseOutputPath, id); + final SequenceFile.Writer summary_file = SequenceFile + .createWriter( + fileSystem.getConf(), + SequenceFile.Writer.file(new Path(summaryPath)), + SequenceFile.Writer.keyClass(Text.class), + SequenceFile.Writer.valueClass(Text.class)); + + log.info("Thread {} Creating only summary path here {}", id, summaryPath); + res.put("summary", summary_file); + return res; + } else { + String employmentsPath = String.format("%s/employments_%s", baseOutputPath, id); + final SequenceFile.Writer employments_file = SequenceFile + .createWriter( + fileSystem.getConf(), + SequenceFile.Writer.file(new Path(employmentsPath)), + SequenceFile.Writer.keyClass(Text.class), + SequenceFile.Writer.valueClass(Text.class)); + res.put("employments", employments_file); + log.info("Thread {} Creating employments path here {}", id, employmentsPath); + + final String worksPath = String.format("%s/works_%s", baseOutputPath, id); + final SequenceFile.Writer works_file = SequenceFile + .createWriter( + fileSystem.getConf(), + SequenceFile.Writer.file(new Path(worksPath)), + SequenceFile.Writer.keyClass(Text.class), + SequenceFile.Writer.valueClass(Text.class)); + res.put("works", works_file); + log.info("Thread {} Creating works path here {}", id, worksPath); + + return res; + } + } catch (Throwable e) { + throw new RuntimeException(e); + } + } + + @Override + public void run() { + + CompressionCodecFactory factory = new CompressionCodecFactory(fileSystem.getConf()); + CompressionCodec codec = factory.getCodec(sourcePath); + if (codec == null) { + System.err.println("No codec found for " + sourcePath.getName()); + System.exit(1); + } + + InputStream gzipInputStream = null; + try { + gzipInputStream = codec.createInputStream(fileSystem.open(sourcePath)); + final Map fileMap = createMap(); + iterateTar(fileMap, gzipInputStream); + + } catch (IOException e) { + throw new RuntimeException(e); + } finally { + log.info("Closing gzip stream"); + IOUtils.closeStream(gzipInputStream); + } + + } + + private SequenceFile.Writer retrieveFile(Map fileMap, final String path) { + if (sourcePath.getName().contains("summaries")) { + return fileMap.get("summary"); + } + + if (path.contains("works")) { + return fileMap.get("works"); + } + if (path.contains("employments")) + return fileMap.get("employments"); + return null; + } + + private void iterateTar(Map fileMap, InputStream gzipInputStream) throws IOException { + + int extractedItem = 0; + try (final TarArchiveInputStream tais = new TarArchiveInputStream(gzipInputStream)) { + + TarArchiveEntry entry; + while ((entry = tais.getNextTarEntry()) != null) { + + if (entry.isFile()) { + + final SequenceFile.Writer fl = retrieveFile(fileMap, entry.getName()); + if (fl != null) { + final Text key = new Text(entry.getName()); + final Text value = new Text( + org.apache.commons.io.IOUtils.toString(new BufferedReader(new InputStreamReader(tais)))); + fl.append(key, value); + extractedItem++; + if (extractedItem % 100000 == 0) { + log.info("Thread {}: Extracted {} items", id, extractedItem); + break; + } + } + } + } + } finally { + for (SequenceFile.Writer k : fileMap.values()) { + log.info("Thread {}: Completed processed {} items", id, extractedItem); + k.hflush(); + k.close(); + } + } + + } +} diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/collection/orcid/OrcidParser.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/collection/orcid/OrcidParser.java new file mode 100644 index 000000000..159b8a5fc --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/collection/orcid/OrcidParser.java @@ -0,0 +1,251 @@ + +package eu.dnetlib.dhp.collection.orcid; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.ximpleware.*; + +import eu.dnetlib.dhp.collection.orcid.model.*; +import eu.dnetlib.dhp.parser.utility.VtdException; +import eu.dnetlib.dhp.parser.utility.VtdUtilityParser; + +public class OrcidParser { + + final Logger log = LoggerFactory.getLogger(OrcidParser.class); + private VTDNav vn; + + private AutoPilot ap; + private static final String NS_COMMON_URL = "http://www.orcid.org/ns/common"; + private static final String NS_COMMON = "common"; + private static final String NS_PERSON_URL = "http://www.orcid.org/ns/person"; + private static final String NS_PERSON = "person"; + private static final String NS_DETAILS_URL = "http://www.orcid.org/ns/personal-details"; + private static final String NS_DETAILS = "personal-details"; + private static final String NS_OTHER_URL = "http://www.orcid.org/ns/other-name"; + private static final String NS_OTHER = "other-name"; + private static final String NS_RECORD_URL = "http://www.orcid.org/ns/record"; + private static final String NS_RECORD = "record"; + private static final String NS_ERROR_URL = "http://www.orcid.org/ns/error"; + private static final String NS_ACTIVITIES = "activities"; + private static final String NS_ACTIVITIES_URL = "http://www.orcid.org/ns/activities"; + private static final String NS_WORK = "work"; + private static final String NS_WORK_URL = "http://www.orcid.org/ns/work"; + + private static final String NS_ERROR = "error"; + private static final String NS_HISTORY = "history"; + private static final String NS_HISTORY_URL = "http://www.orcid.org/ns/history"; + private static final String NS_BULK_URL = "http://www.orcid.org/ns/bulk"; + private static final String NS_BULK = "bulk"; + private static final String NS_EXTERNAL = "external-identifier"; + private static final String NS_EXTERNAL_URL = "http://www.orcid.org/ns/external-identifier"; + + private void generateParsedDocument(final String xml) throws ParseException { + final VTDGen vg = new VTDGen(); + vg.setDoc(xml.getBytes()); + vg.parse(true); + this.vn = vg.getNav(); + this.ap = new AutoPilot(vn); + ap.declareXPathNameSpace(NS_COMMON, NS_COMMON_URL); + ap.declareXPathNameSpace(NS_PERSON, NS_PERSON_URL); + ap.declareXPathNameSpace(NS_DETAILS, NS_DETAILS_URL); + ap.declareXPathNameSpace(NS_OTHER, NS_OTHER_URL); + ap.declareXPathNameSpace(NS_RECORD, NS_RECORD_URL); + ap.declareXPathNameSpace(NS_ERROR, NS_ERROR_URL); + ap.declareXPathNameSpace(NS_HISTORY, NS_HISTORY_URL); + ap.declareXPathNameSpace(NS_WORK, NS_WORK_URL); + ap.declareXPathNameSpace(NS_EXTERNAL, NS_EXTERNAL_URL); + ap.declareXPathNameSpace(NS_ACTIVITIES, NS_ACTIVITIES_URL); + } + + public Author parseSummary(final String xml) { + + try { + final Author author = new Author(); + generateParsedDocument(xml); + List recordNodes = VtdUtilityParser + .getTextValuesWithAttributes( + ap, vn, "//record:record", Arrays.asList("path")); + if (!recordNodes.isEmpty()) { + final String oid = (recordNodes.get(0).getAttributes().get("path")).substring(1); + author.setOrcid(oid); + } else { + return null; + } + List personNodes = VtdUtilityParser + .getTextValuesWithAttributes( + ap, vn, "//person:name", Arrays.asList("visibility")); + final String visibility = (personNodes.get(0).getAttributes().get("visibility")); + author.setVisibility(visibility); + final String name = VtdUtilityParser.getSingleValue(ap, vn, "//personal-details:given-names"); + author.setGivenName(name); + + final String surnames = VtdUtilityParser.getSingleValue(ap, vn, "//personal-details:family-name"); + author.setFamilyName(surnames); + + final String creditNames = VtdUtilityParser.getSingleValue(ap, vn, "//personal-details:credit-name"); + author.setCreditName(creditNames); + + final String biography = VtdUtilityParser + .getSingleValue(ap, vn, "//person:biography/personal-details:content"); + author.setBiography(biography); + + final List otherNames = VtdUtilityParser.getTextValue(ap, vn, "//other-name:content"); + if (!otherNames.isEmpty()) { + author.setOtherNames(otherNames); + } + + ap.selectXPath("//external-identifier:external-identifier"); + + while (ap.evalXPath() != -1) { + final Pid pid = new Pid(); + + final AutoPilot ap1 = new AutoPilot(ap.getNav()); + + ap1.selectXPath("./common:external-id-type"); + while (ap1.evalXPath() != -1) { + int it = vn.getText(); + pid.setSchema(vn.toNormalizedString(it)); + } + ap1.selectXPath("./common:external-id-value"); + while (ap1.evalXPath() != -1) { + int it = vn.getText(); + pid.setValue(vn.toNormalizedString(it)); + } + + author.addOtherPid(pid); + } + + return author; + } catch (Throwable e) { + log.error("Error on parsing {}", xml); + log.error(e.getMessage()); + return null; + } + } + + public Work parseWork(final String xml) { + + try { + final Work work = new Work(); + generateParsedDocument(xml); + List workNodes = VtdUtilityParser + .getTextValuesWithAttributes(ap, vn, "//work:work", Arrays.asList("path", "visibility")); + if (!workNodes.isEmpty()) { + final String oid = (workNodes.get(0).getAttributes().get("path")).split("/")[1]; + work.setOrcid(oid); + } else { + return null; + } + + ap.selectXPath("//common:external-id"); + + while (ap.evalXPath() != -1) { + final Pid pid = new Pid(); + + final AutoPilot ap1 = new AutoPilot(ap.getNav()); + + ap1.selectXPath("./common:external-id-type"); + while (ap1.evalXPath() != -1) { + int it = vn.getText(); + pid.setSchema(vn.toNormalizedString(it)); + } + ap1.selectXPath("./common:external-id-value"); + while (ap1.evalXPath() != -1) { + int it = vn.getText(); + pid.setValue(vn.toNormalizedString(it)); + } + + work.addPid(pid); + } + + work.setTitle(VtdUtilityParser.getSingleValue(ap, vn, "//work:title/common:title")); + + return work; + } catch (Throwable e) { + log.error("Error on parsing {}", xml); + log.error(e.getMessage()); + return null; + } + + } + + private String extractEmploymentDate(final String xpath) throws Exception { + + ap.selectXPath(xpath); + StringBuilder sb = new StringBuilder(); + while (ap.evalXPath() != -1) { + final AutoPilot ap1 = new AutoPilot(ap.getNav()); + ap1.selectXPath("./common:year"); + while (ap1.evalXPath() != -1) { + int it = vn.getText(); + sb.append(vn.toNormalizedString(it)); + } + ap1.selectXPath("./common:month"); + while (ap1.evalXPath() != -1) { + int it = vn.getText(); + sb.append("-"); + sb.append(vn.toNormalizedString(it)); + } + ap1.selectXPath("./common:day"); + while (ap1.evalXPath() != -1) { + int it = vn.getText(); + sb.append("-"); + sb.append(vn.toNormalizedString(it)); + } + } + return sb.toString(); + + } + + public Employment parseEmployment(final String xml) { + try { + final Employment employment = new Employment(); + generateParsedDocument(xml); + final String oid = VtdUtilityParser + .getSingleValue(ap, vn, "//common:source-orcid/common:path"); + if (StringUtils.isNotBlank(oid)) { + employment.setOrcid(oid); + } else { + return null; + } + final String depName = VtdUtilityParser + .getSingleValue(ap, vn, "//common:department-name"); + final String rolTitle = VtdUtilityParser + .getSingleValue(ap, vn, "//common:role-title"); + if (StringUtils.isNotBlank(rolTitle)) + employment.setRoleTitle(rolTitle); + if (StringUtils.isNotBlank(depName)) + employment.setDepartmentName(depName); + else + employment + .setDepartmentName( + VtdUtilityParser + .getSingleValue(ap, vn, "//common:organization/common:name")); + + employment.setStartDate(extractEmploymentDate("//common:start-date")); + employment.setEndDate(extractEmploymentDate("//common:end-date")); + + final String affiliationId = VtdUtilityParser + .getSingleValue(ap, vn, "//common:disambiguated-organization-identifier"); + final String affiliationIdType = VtdUtilityParser + .getSingleValue(ap, vn, "//common:disambiguation-source"); + + if (StringUtils.isNotBlank(affiliationId) || StringUtils.isNotBlank(affiliationIdType)) + employment.setAffiliationId(new Pid(affiliationId, affiliationIdType)); + + return employment; + } catch (Throwable e) { + log.error("Error on parsing {}", xml); + log.error(e.getMessage()); + return null; + } + + } + +} diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/collection/orcid/model/Author.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/collection/orcid/model/Author.java new file mode 100644 index 000000000..32c321b41 --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/collection/orcid/model/Author.java @@ -0,0 +1,83 @@ + +package eu.dnetlib.dhp.collection.orcid.model; + +import java.util.ArrayList; +import java.util.List; + +public class Author extends ORCIDItem { + private String givenName; + private String familyName; + + private String visibility; + + private String creditName; + + private List otherNames; + + private List otherPids; + + private String biography; + + public String getBiography() { + return biography; + } + + public void setBiography(String biography) { + this.biography = biography; + } + + public String getGivenName() { + return givenName; + } + + public void setGivenName(String givenName) { + this.givenName = givenName; + } + + public String getFamilyName() { + return familyName; + } + + public void setFamilyName(String familyName) { + this.familyName = familyName; + } + + public String getCreditName() { + return creditName; + } + + public void setCreditName(String creditName) { + this.creditName = creditName; + } + + public List getOtherNames() { + return otherNames; + } + + public void setOtherNames(List otherNames) { + this.otherNames = otherNames; + } + + public String getVisibility() { + return visibility; + } + + public void setVisibility(String visibility) { + this.visibility = visibility; + } + + public List getOtherPids() { + return otherPids; + } + + public void setOtherPids(List otherPids) { + this.otherPids = otherPids; + } + + public void addOtherPid(final Pid pid) { + + if (otherPids == null) + otherPids = new ArrayList<>(); + otherPids.add(pid); + } +} diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/collection/orcid/model/Employment.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/collection/orcid/model/Employment.java new file mode 100644 index 000000000..baee67d46 --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/collection/orcid/model/Employment.java @@ -0,0 +1,54 @@ + +package eu.dnetlib.dhp.collection.orcid.model; + +public class Employment extends ORCIDItem { + + private String startDate; + private String EndDate; + + private Pid affiliationId; + + private String departmentName; + + private String roleTitle; + + public String getStartDate() { + return startDate; + } + + public void setStartDate(String startDate) { + this.startDate = startDate; + } + + public String getEndDate() { + return EndDate; + } + + public void setEndDate(String endDate) { + EndDate = endDate; + } + + public Pid getAffiliationId() { + return affiliationId; + } + + public void setAffiliationId(Pid affiliationId) { + this.affiliationId = affiliationId; + } + + public String getDepartmentName() { + return departmentName; + } + + public void setDepartmentName(String departmentName) { + this.departmentName = departmentName; + } + + public String getRoleTitle() { + return roleTitle; + } + + public void setRoleTitle(String roleTitle) { + this.roleTitle = roleTitle; + } +} diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/collection/orcid/model/ORCIDItem.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/collection/orcid/model/ORCIDItem.java new file mode 100644 index 000000000..6bc47bc26 --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/collection/orcid/model/ORCIDItem.java @@ -0,0 +1,14 @@ + +package eu.dnetlib.dhp.collection.orcid.model; + +public class ORCIDItem { + private String orcid; + + public String getOrcid() { + return orcid; + } + + public void setOrcid(String orcid) { + this.orcid = orcid; + } +} diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/collection/orcid/model/Pid.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/collection/orcid/model/Pid.java new file mode 100644 index 000000000..077dc2550 --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/collection/orcid/model/Pid.java @@ -0,0 +1,33 @@ + +package eu.dnetlib.dhp.collection.orcid.model; + +public class Pid { + + private String value; + + private String schema; + + public Pid() { + } + + public Pid(String value, String schema) { + this.value = value; + this.schema = schema; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public String getSchema() { + return schema; + } + + public void setSchema(String schema) { + this.schema = schema; + } +} diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/collection/orcid/model/Work.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/collection/orcid/model/Work.java new file mode 100644 index 000000000..670170323 --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/collection/orcid/model/Work.java @@ -0,0 +1,35 @@ + +package eu.dnetlib.dhp.collection.orcid.model; + +import java.util.ArrayList; +import java.util.List; + +public class Work extends ORCIDItem { + + private String title; + + private List pids; + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public List getPids() { + return pids; + } + + public void setPids(List pids) { + this.pids = pids; + } + + public void addPid(Pid pid) { + if (pids == null) + pids = new ArrayList<>(); + pids.add(pid); + } + +} diff --git a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/collection/orcid/download_orcid_parameter.json b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/collection/orcid/download_orcid_parameter.json new file mode 100644 index 000000000..4a84cbbb9 --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/collection/orcid/download_orcid_parameter.json @@ -0,0 +1,21 @@ +[ + { + "paramName": "n", + "paramLongName": "namenode", + "paramDescription": "the Name Node URI", + "paramRequired": true + }, + { + "paramName": "t", + "paramLongName": "targetPath", + "paramDescription": "the target PATH where download the files", + "paramRequired": true + }, + { + "paramName": "a", + "paramLongName": "apiURL", + "paramDescription": "the FIGSHARE API id URL to retrieve all the dump files", + "paramRequired": true + } + +] \ No newline at end of file diff --git a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/collection/orcid/extract_orcid_parameter.json b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/collection/orcid/extract_orcid_parameter.json new file mode 100644 index 000000000..4af371875 --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/collection/orcid/extract_orcid_parameter.json @@ -0,0 +1,21 @@ +[ + { + "paramName": "n", + "paramLongName": "namenode", + "paramDescription": "the Name Node URI", + "paramRequired": true + }, + { + "paramName": "t", + "paramLongName": "targetPath", + "paramDescription": "the target PATH to extract files", + "paramRequired": true + }, + { + "paramName": "s", + "paramLongName": "sourcePath", + "paramDescription": "the PATH where the tar.gz files were downloaded", + "paramRequired": true + } + +] \ No newline at end of file diff --git a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/collection/orcid/generate_orcid_table_parameter.json b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/collection/orcid/generate_orcid_table_parameter.json new file mode 100644 index 000000000..01d81ea97 --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/collection/orcid/generate_orcid_table_parameter.json @@ -0,0 +1,21 @@ +[ + { + "paramName": "m", + "paramLongName": "master", + "paramDescription": "the master name", + "paramRequired": true + }, + { + "paramName": "t", + "paramLongName": "targetPath", + "paramDescription": "the target PATH of the DF tables", + "paramRequired": true + }, + { + "paramName": "s", + "paramLongName": "sourcePath", + "paramDescription": "the PATH of the ORCID sequence file", + "paramRequired": true + } + +] \ No newline at end of file diff --git a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/collection/orcid/oozie_app/config-default.xml b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/collection/orcid/oozie_app/config-default.xml new file mode 100644 index 000000000..dd3c32c62 --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/collection/orcid/oozie_app/config-default.xml @@ -0,0 +1,23 @@ + + + jobTracker + yarnRM + + + nameNode + hdfs://nameservice1 + + + oozie.use.system.libpath + true + + + oozie.action.sharelib.for.spark + spark2 + + + + oozie.launcher.mapreduce.user.classpath.first + true + + \ No newline at end of file diff --git a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/collection/orcid/oozie_app/workflow.xml b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/collection/orcid/oozie_app/workflow.xml new file mode 100644 index 000000000..1a5f425e5 --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/collection/orcid/oozie_app/workflow.xml @@ -0,0 +1,81 @@ + + + + targetPath + the path to store the original ORCID dump + + + apiURL + The figshare API URL to retrieve the list file to download + + + + + + + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + + + + + + oozie.launcher.mapreduce.user.classpath.first + true + + + eu.dnetlib.dhp.collection.orcid.DownloadORCIDDumpApplication + --namenode${nameNode} + --targetPath${targetPath} + --apiURL${apiURL} + + + + + + + + + + oozie.launcher.mapreduce.user.classpath.first + true + + + + eu.dnetlib.dhp.collection.orcid.ExtractORCIDDump + -Xmx6g + --namenode${nameNode} + --sourcePath${targetPath} + --targetPath${targetPath}/extracted + + + + + + + + yarn + cluster + Generate ORCID Tables + eu.dnetlib.dhp.collection.orcid.SparkGenerateORCIDTable + dhp-aggregation-${projectVersion}.jar + + --executor-memory=${sparkExecutorMemory} + --executor-cores=${sparkExecutorCores} + --driver-memory=${sparkDriverMemory} + --conf spark.executor.memoryOverhead=2g + --conf spark.sql.shuffle.partitions=3000 + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + + --sourcePath${targetPath}/extracted + --targetPath${targetPath}/tables + --masteryarn + + + + + + \ No newline at end of file diff --git a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/collection/orcid/preprocess_orcid_dump_parameter.json b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/collection/orcid/preprocess_orcid_dump_parameter.json new file mode 100644 index 000000000..4a84cbbb9 --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/collection/orcid/preprocess_orcid_dump_parameter.json @@ -0,0 +1,21 @@ +[ + { + "paramName": "n", + "paramLongName": "namenode", + "paramDescription": "the Name Node URI", + "paramRequired": true + }, + { + "paramName": "t", + "paramLongName": "targetPath", + "paramDescription": "the target PATH where download the files", + "paramRequired": true + }, + { + "paramName": "a", + "paramLongName": "apiURL", + "paramDescription": "the FIGSHARE API id URL to retrieve all the dump files", + "paramRequired": true + } + +] \ No newline at end of file diff --git a/dhp-workflows/dhp-aggregation/src/main/scala/eu/dnetlib/dhp/collection/orcid/SparkGenerateORCIDTable.scala b/dhp-workflows/dhp-aggregation/src/main/scala/eu/dnetlib/dhp/collection/orcid/SparkGenerateORCIDTable.scala new file mode 100644 index 000000000..f0c4cd214 --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/main/scala/eu/dnetlib/dhp/collection/orcid/SparkGenerateORCIDTable.scala @@ -0,0 +1,101 @@ +package eu.dnetlib.dhp.collection.orcid + +import eu.dnetlib.dhp.application.AbstractScalaApplication +import eu.dnetlib.dhp.collection.orcid.model.{Author, Employment, Pid, Work} +import org.apache.hadoop.io.Text +import org.apache.spark.SparkContext +import org.apache.spark.sql.{Encoder, Encoders, SaveMode, SparkSession} +import org.slf4j.{Logger, LoggerFactory} + +class SparkGenerateORCIDTable(propertyPath: String, args: Array[String], log: Logger) + extends AbstractScalaApplication(propertyPath, args, log: Logger) { + + /** Here all the spark applications runs this method + * where the whole logic of the spark node is defined + */ + override def run(): Unit = { + val sourcePath: String = parser.get("sourcePath") + log.info("found parameters sourcePath: {}", sourcePath) + val targetPath: String = parser.get("targetPath") + log.info("found parameters targetPath: {}", targetPath) + extractORCIDTable(spark, sourcePath, targetPath) + extractORCIDEmploymentsTable(spark, sourcePath, targetPath) + extractORCIDWorksTable(spark, sourcePath, targetPath) + } + + def extractORCIDTable(spark: SparkSession, sourcePath: String, targetPath: String): Unit = { + val sc: SparkContext = spark.sparkContext + import spark.implicits._ + val df = sc + .sequenceFile(sourcePath, classOf[Text], classOf[Text]) + .map { case (x, y) => (x.toString, y.toString) } + .toDF + .as[(String, String)] + implicit val orcidAuthor: Encoder[Author] = Encoders.bean(classOf[Author]) +// implicit val orcidPID:Encoder[Pid] = Encoders.bean(classOf[Pid]) + df.filter(r => r._1.contains("summaries")) + .map { r => + val p = new OrcidParser + p.parseSummary(r._2) + } + .filter(p => p != null) + .write + .mode(SaveMode.Overwrite) + .save(s"$targetPath/Authors") + } + + def extractORCIDWorksTable(spark: SparkSession, sourcePath: String, targetPath: String): Unit = { + val sc: SparkContext = spark.sparkContext + import spark.implicits._ + val df = sc + .sequenceFile(sourcePath, classOf[Text], classOf[Text]) + .map { case (x, y) => (x.toString, y.toString) } + .toDF + .as[(String, String)] + implicit val orcidWorkAuthor: Encoder[Work] = Encoders.bean(classOf[Work]) + implicit val orcidPID: Encoder[Pid] = Encoders.bean(classOf[Pid]) + df.filter(r => r._1.contains("works")) + .map { r => + val p = new OrcidParser + p.parseWork(r._2) + } + .filter(p => p != null) + .write + .mode(SaveMode.Overwrite) + .save(s"$targetPath/Works") + } + + def extractORCIDEmploymentsTable(spark: SparkSession, sourcePath: String, targetPath: String): Unit = { + val sc: SparkContext = spark.sparkContext + import spark.implicits._ + val df = sc + .sequenceFile(sourcePath, classOf[Text], classOf[Text]) + .map { case (x, y) => (x.toString, y.toString) } + .toDF + .as[(String, String)] + implicit val orcidEmploymentAuthor: Encoder[Employment] = Encoders.bean(classOf[Employment]) + implicit val orcidPID: Encoder[Pid] = Encoders.bean(classOf[Pid]) + df.filter(r => r._1.contains("employments")) + .map { r => + val p = new OrcidParser + p.parseEmployment(r._2) + } + .filter(p => p != null) + .write + .mode(SaveMode.Overwrite) + .save(s"$targetPath/Employments") + } +} + +object SparkGenerateORCIDTable { + + val log: Logger = LoggerFactory.getLogger(SparkGenerateORCIDTable.getClass) + + def main(args: Array[String]): Unit = { + + new SparkGenerateORCIDTable("/eu/dnetlib/dhp/collection/orcid/generate_orcid_table_parameter.json", args, log) + .initialize() + .run() + + } +} diff --git a/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/collection/orcid/DownloadORCIDTest.java b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/collection/orcid/DownloadORCIDTest.java new file mode 100644 index 000000000..be5555fc0 --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/collection/orcid/DownloadORCIDTest.java @@ -0,0 +1,158 @@ + +package eu.dnetlib.dhp.collection.orcid; + +import java.io.IOException; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; + +import org.apache.commons.io.IOUtils; +import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.fs.FileSystem; +import org.apache.hadoop.io.Text; +import org.apache.spark.SparkContext; +import org.apache.spark.api.java.JavaSparkContext; +import org.apache.spark.sql.Encoders; +import org.apache.spark.sql.SparkSession; +import org.junit.jupiter.api.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.ximpleware.NavException; +import com.ximpleware.ParseException; +import com.ximpleware.XPathEvalException; +import com.ximpleware.XPathParseException; + +import eu.dnetlib.dhp.collection.orcid.model.Author; +import eu.dnetlib.dhp.collection.orcid.model.ORCIDItem; +import eu.dnetlib.dhp.parser.utility.VtdException; + +public class DownloadORCIDTest { + private final Logger log = LoggerFactory.getLogger(DownloadORCIDTest.class); + +// public void test() throws Exception { +// +// Configuration conf = new Configuration(); +// // Set FileSystem URI +//// conf.set("fs.defaultFS", "file://"); +// // Because of Maven +// conf.set("fs.hdfs.impl", org.apache.hadoop.hdfs.DistributedFileSystem.class.getName()); +// conf.set("fs.file.impl", org.apache.hadoop.fs.LocalFileSystem.class.getName()); +// +// System.setProperty("hadoop.home.dir", "file:///Users/sandro/orcid/"); +// +// final FileSystem fileSystem = FileSystem.get(conf); +// +// new ExtractORCIDDump(fileSystem).run("/Users/sandro/orcid/", "/Users/sandro/orcid/extracted"); +// +//// final GZIPInputStream gzip = new GZIPInputStream(Files.newInputStream(Paths.get("/Users/sandro/orcid/ORCID_2023_10_activities_1.tar.gz"))); +//// try(final TarArchiveInputStream tais = new TarArchiveInputStream(gzip)) { +//// +//// TarArchiveEntry entry; +//// while ((entry = tais.getNextTarEntry()) != null) { +//// +//// if (entry.isFile() && entry.getName().contains("employments")) { +//// +//// System.out.println(entry.getName()); +//// final String [] items = entry.getName().split("/"); +//// +//// final String res = IOUtils.toString(new BufferedReader(new InputStreamReader(tais))); +//// System.out.println("res = " + res); +//// +//// System.out.println(items[items.length-2]); +//// break; +//// } +//// +//// +//// } +//// } +// +// } + + @Test + public void testSummary() throws Exception { + final String xml = IOUtils + .toString( + Objects.requireNonNull(getClass().getResourceAsStream("/eu/dnetlib/dhp/collection/orcid/summary.xml"))); + + final OrcidParser parser = new OrcidParser(); + ORCIDItem orcidItem = parser.parseSummary(xml); + + final ObjectMapper mapper = new ObjectMapper(); + System.out.println(mapper.writeValueAsString(orcidItem)); + + } + + @Test + public void testParsingWork() throws Exception { + + final List works_path = Arrays + .asList( + "/eu/dnetlib/dhp/collection/orcid/activity_work_0000-0002-2536-4498.xml", + "/eu/dnetlib/dhp/collection/orcid/activity_work_0000-0002-5982-8983.xml", + "/eu/dnetlib/dhp/collection/orcid/activity_work_0000-0003-2760-1191.xml", + "/eu/dnetlib/dhp/collection/orcid/activity_work_0000-0003-2760-1191-similarity.xml", + "/eu/dnetlib/dhp/collection/orcid/activity_work_0000-0003-2760-1191_contributors.xml" + + ); + + final OrcidParser parser = new OrcidParser(); + final ObjectMapper mapper = new ObjectMapper(); + works_path.stream().map(s -> { + try { + return IOUtils + .toString( + Objects + .requireNonNull( + getClass() + .getResourceAsStream( + s))); + } catch (IOException e) { + throw new RuntimeException(e); + } + }).forEach(s -> { + try { + System.out.println(mapper.writeValueAsString(parser.parseWork(s))); + } catch (Exception e) { + throw new RuntimeException(e); + } + }); + } + + @Test + public void testParsingEmployments() throws Exception { + + final List works_path = Arrays + .asList( + "/eu/dnetlib/dhp/collection/orcid/employment.xml", + "/eu/dnetlib/dhp/collection/orcid/employment_2.xml", + "/eu/dnetlib/dhp/collection/orcid/employment_3.xml" + + ); + + final OrcidParser parser = new OrcidParser(); + final ObjectMapper mapper = new ObjectMapper(); + works_path.stream().map(s -> { + try { + return IOUtils + .toString( + Objects + .requireNonNull( + getClass() + .getResourceAsStream( + s))); + } catch (IOException e) { + throw new RuntimeException(e); + } + }).forEach(s -> { + try { + System.out.println(mapper.writeValueAsString(parser.parseEmployment(s))); + } catch (Exception e) { + throw new RuntimeException(e); + } + }); + } + +} diff --git a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/collection/orcid/activity_work_0000-0002-2536-4498.xml b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/collection/orcid/activity_work_0000-0002-2536-4498.xml new file mode 100644 index 000000000..2c89b83f6 --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/collection/orcid/activity_work_0000-0002-2536-4498.xml @@ -0,0 +1,69 @@ + + + 2016-09-01T19:22:46.768Z + 2022-05-25T03:48:56.968Z + + + https://orcid.org/client/0000-0002-5982-8983 + 0000-0002-5982-8983 + orcid.org + + Scopus - Elsevier + + https://orcid.org/0000-0001-5010-5001 + 0000-0001-5010-5001 + orcid.org + + Quang Nguyen + + + Vision outcomes and major complications after endovascular coil embolization of ophthalmic segment aneurysms + + American Journal of Neuroradiology + + bibtex + @article{Nguyen2014,title = {Vision outcomes and major complications after endovascular coil embolization of ophthalmic segment aneurysms},journal = {American Journal of Neuroradiology},year = {2014},volume = {35},number = {11},pages = {2140-2145},author = {Durst, C. and Starke, R.M. and Gaughen, J. and Nguyen, Q. and Patrie, J. and Jensen, M.E. and Evans, A.J.}} + + journal-article + + 2014 + + + + doi + 10.3174/ajnr.A4032 + 10.3174/ajnr.a4032 + self + + + eid + 2-s2.0-84911865199 + 2-s2.0-84911865199 + self + + + http://www.scopus.com/inward/record.url?eid=2-s2.0-84911865199&partnerID=MN8TOARS + + + Durst, C. + + + Starke, R.M. + + + Gaughen, J. + + + Nguyen, Q. + + + Patrie, J. + + + Jensen, M.E. + + + Evans, A.J. + + + \ No newline at end of file diff --git a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/collection/orcid/activity_work_0000-0002-5982-8983.xml b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/collection/orcid/activity_work_0000-0002-5982-8983.xml new file mode 100644 index 000000000..63b4405f1 --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/collection/orcid/activity_work_0000-0002-5982-8983.xml @@ -0,0 +1,79 @@ + + + 2018-11-01T19:49:45.562Z + 2018-11-01T19:49:45.562Z + + + https://orcid.org/client/0000-0002-5982-8983 + 0000-0002-5982-8983 + orcid.org + + Scopus - Elsevier + + + "Calling Out" in class: Degrees of candor in addressing social injustices in + racially homogenous and heterogeneous U.S. history classrooms + + Journal of Social Studies Research + + bibtex + @article{Massaro2018,title = {{"}Calling Out{"} in class: Degrees of + candor in addressing social injustices in racially homogenous and heterogeneous U.S. + history classrooms},journal = {Journal of Social Studies Research},year = {2018},author + = {Parkhouse, H. and Massaro, V.R.}} + + journal-article + + 2018 + + + + doi + 10.1016/j.jssr.2018.01.004 + 10.1016/j.jssr.2018.01.004 + self + + + eid + 2-s2.0-85041949043 + 2-s2.0-85041949043 + self + + + http://www.scopus.com/inward/record.url?eid=2-s2.0-85041949043&partnerID=MN8TOARS + + + Parkhouse, H. + + + Massaro, V.R. + + + \ No newline at end of file diff --git a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/collection/orcid/activity_work_0000-0003-2760-1191-similarity.xml b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/collection/orcid/activity_work_0000-0003-2760-1191-similarity.xml new file mode 100644 index 000000000..650d5a4cb --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/collection/orcid/activity_work_0000-0003-2760-1191-similarity.xml @@ -0,0 +1,113 @@ + + + 2016-12-12T23:02:05.233Z + 2016-12-13T09:08:16.412Z + + + https://orcid.org/0000-0002-9157-3431 + 0000-0002-9157-3431 + orcid.org + + Europe PubMed Central + + + Cutoff Value of Admission N-Terminal Pro-Brain Natriuretic Peptide Which + Predicts Poor Myocardial Perfusion after Primary Percutaneous Coronary Intervention for + ST-Segment-Elevation Myocardial Infarction. + + + formatted-unspecified + Abdel-Dayem K, Eweda II, El-Sherbiny A, Dimitry MO, Nammas W, Acta + Cardiologica Sinica, 2016, vol. 32, no. 6, pp. 649-655, 2016 + + journal-article + + 2016 + 11 + + + + pmid + 27899851 + 27899851 + self + + + pmc + PMC5126442 + PMC5126442 + self + + + http://europepmc.org/abstract/med/27899851 + + + Abdel-Dayem K + + first + author + + + + Abdel-Dayem Fake + + first + author + + + + Eweda II + + first + author + + + + El-Sherbiny A + + first + author + + + + Dimitry MO + + first + author + + + + Nammas W + + first + author + + + + diff --git a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/collection/orcid/activity_work_0000-0003-2760-1191.xml b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/collection/orcid/activity_work_0000-0003-2760-1191.xml new file mode 100644 index 000000000..83752b145 --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/collection/orcid/activity_work_0000-0003-2760-1191.xml @@ -0,0 +1,106 @@ + + + 2016-12-12T23:02:05.233Z + 2016-12-13T09:08:16.412Z + + + https://orcid.org/0000-0002-9157-3431 + 0000-0002-9157-3431 + orcid.org + + Europe PubMed Central + + + Cutoff Value of Admission N-Terminal Pro-Brain Natriuretic Peptide Which + Predicts Poor Myocardial Perfusion after Primary Percutaneous Coronary Intervention for + ST-Segment-Elevation Myocardial Infarction. + + + formatted-unspecified + Abdel-Dayem K, Eweda II, El-Sherbiny A, Dimitry MO, Nammas W, Acta + Cardiologica Sinica, 2016, vol. 32, no. 6, pp. 649-655, 2016 + + journal-article + + 2016 + 11 + + + + pmid + 27899851 + 27899851 + self + + + pmc + PMC5126442 + PMC5126442 + self + + + http://europepmc.org/abstract/med/27899851 + + + Khair Abde Daye + + first + author + + + + Eweda II + + first + author + + + + El-Sherbiny A + + first + author + + + + Dimitry MO + + first + author + + + + Nammas W + + first + author + + + + diff --git a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/collection/orcid/activity_work_0000-0003-2760-1191_contributors.xml b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/collection/orcid/activity_work_0000-0003-2760-1191_contributors.xml new file mode 100644 index 000000000..26e64aeda --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/collection/orcid/activity_work_0000-0003-2760-1191_contributors.xml @@ -0,0 +1,101 @@ + + + 2016-12-12T23:02:05.233Z + 2016-12-13T09:08:16.412Z + + + https://orcid.org/0000-0002-9157-3431 + 0000-0002-9157-3431 + orcid.org + + Europe PubMed Central + + + Cutoff Value of Admission N-Terminal Pro-Brain Natriuretic Peptide Which + Predicts Poor Myocardial Perfusion after Primary Percutaneous Coronary Intervention for + ST-Segment-Elevation Myocardial Infarction. + + + formatted-unspecified + Abdel-Dayem K, Eweda II, El-Sherbiny A, Dimitry MO, Nammas W, Acta + Cardiologica Sinica, 2016, vol. 32, no. 6, pp. 649-655, 2016 + + journal-article + + 2016 + 11 + + + + pmid + 27899851 + 27899851 + self + + + pmc + PMC5126442 + PMC5126442 + self + + + http://europepmc.org/abstract/med/27899851 + + + + seq0 + role0 + + + + creditname1 + + + creditname2 + + seq2 + + + + + creditname3 + + + role3 + + + + + + seq4 + role4 + + + + diff --git a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/collection/orcid/employment.xml b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/collection/orcid/employment.xml new file mode 100644 index 000000000..89c7f7020 --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/collection/orcid/employment.xml @@ -0,0 +1,50 @@ + + + 2016-09-01T19:21:05.791Z + 2016-09-01T19:21:05.791Z + + + https://orcid.org/0000-0001-5010-5001 + 0000-0001-5010-5001 + orcid.org + + Quang Nguyen + + + Beth Israel Deaconess Medical Center + + Boston + MA + US + + + 1859 + RINGGOLD + + + \ No newline at end of file diff --git a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/collection/orcid/employment_2.xml b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/collection/orcid/employment_2.xml new file mode 100644 index 000000000..c0e88e236 --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/collection/orcid/employment_2.xml @@ -0,0 +1,55 @@ + + + 2018-09-03T01:46:19.474Z + 2018-09-03T01:46:19.474Z + + + https://orcid.org/0000-0001-5011-3001 + 0000-0001-5011-3001 + orcid.org + + zhengyan li + + + 2008 + 09 + 01 + + + Anhui Academy of Agricultural Sciences + + Hefei + Anhui + CN + + + 125385 + RINGGOLD + + + \ No newline at end of file diff --git a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/collection/orcid/employment_3.xml b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/collection/orcid/employment_3.xml new file mode 100644 index 000000000..8e7857fb8 --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/collection/orcid/employment_3.xml @@ -0,0 +1,62 @@ + + + 2021-03-11T14:48:29.603Z + 2021-03-11T14:48:29.603Z + + + https://orcid.org/0000-0001-5012-1001 + 0000-0001-5012-1001 + orcid.org + + Asma Bazzi + + Pathology and Laboratory Medicine + Medical Laboratory Technologist + + 1994 + 10 + 01 + + + 2000 + 06 + 30 + + + American University of Beirut + + Hamra + Beirut + LB + + + 11238 + RINGGOLD + + + \ No newline at end of file diff --git a/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/collection/orcid/summary.xml b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/collection/orcid/summary.xml new file mode 100644 index 000000000..1f5a1bff1 --- /dev/null +++ b/dhp-workflows/dhp-aggregation/src/test/resources/eu/dnetlib/dhp/collection/orcid/summary.xml @@ -0,0 +1,581 @@ + + + + https://orcid.org/0000-0001-5045-1000 + 0000-0001-5045-1000 + orcid.org + + + es + + + Direct + 2023-01-17T23:50:40.215Z + 2023-09-04T17:51:57.749Z + true + true + true + + + + 2023-01-17T23:50:40.472Z + 2023-01-17T23:50:40.472Z + Patricio + Sánchez Quinchuela + + + + 2023-01-19T13:47:33.653Z + 2023-01-19T13:47:33.653Z + Especialista de vinculación con la sociedad y docente de la Universidad de las Artes. Magister en Economía Social y Solidaria por el IAEN; Magister en Proyectos Sociales y Productivos por la UNACH. Licenciado en Artes UCE. Licenciado en Castellano y Literatura por la UNACH. Doctorando del programa de Sociología de la UNED España. Larga trayectoria vinculado a las organizaciones sociales acompañando procesos de gestión cultural, formación de liderazgos y economía solidaria. + + + + + + + 2018-02-05T23:27:36.636Z + + 2013-03-08T03:20:39.347Z + 2018-02-05T23:27:36.636Z + + + https://orcid.org/client/0000-0002-5982-8983 + 0000-0002-5982-8983 + orcid.org + + Scopus - Elsevier + + https://orcid.org/0000-0001-7291-3210 + 0000-0001-7291-3210 + orcid.org + + Paolo Manghi + + Scopus Author ID + 6602255248 + http://www.scopus.com/inward/authorDetails.url?authorID=6602255248&partnerID=MN8TOARS + self + + + + + 2023-09-04T17:51:57.749Z + + 2023-01-19T13:49:48.482Z + + 2023-01-19T13:49:48.482Z + + + 2023-01-19T13:49:48.482Z + 2023-01-19T13:49:48.482Z + + + https://orcid.org/0000-0001-5045-1000 + 0000-0001-5045-1000 + orcid.org + + Patricio Sánchez Quinchuela + + Programa de Maestría + Becario del programa de Maestría en Economía Social y Solidaria + + 2014 + 10 + 20 + + + Instituto de Altos Estudios Nacionales + + Quito + Pichincha + EC + + + https://ror.org/011g3me54 + ROR + + + + + + + 2023-01-18T21:41:03.175Z + + 2023-01-18T21:41:03.175Z + + + 2023-01-18T21:41:03.175Z + 2023-01-18T21:41:03.175Z + + + https://orcid.org/0000-0001-5045-1000 + 0000-0001-5045-1000 + orcid.org + + Patricio Sánchez Quinchuela + + Programa de Doctorado en Sociología + Doctorando del Programa de Sociología + + 2020 + 11 + 06 + + + Universidad Nacional de Educación a Distancia Facultad de Ciencias Políticas y Sociología + + Madrid + Comunidad de Madrid + ES + + + 223339 + RINGGOLD + + + + + + + 2023-01-18T21:25:07.138Z + + 2023-01-18T21:22:21.513Z + + + 2023-01-17T23:57:08.246Z + 2023-01-18T21:22:21.513Z + + + https://orcid.org/0000-0001-5045-1000 + 0000-0001-5045-1000 + orcid.org + + Patricio Sánchez Quinchuela + + Dirección de Vinculación con la Sociedad + Especialista de Proyectos y docente + + 2021 + 11 + 01 + + + Universidad de las Artes + + Guayaquil + Guayas + EC + + + https://ror.org/016drwn73 + ROR + + + + + + 2023-01-18T21:25:07.138Z + + + 2023-01-18T21:25:07.138Z + 2023-01-18T21:25:07.138Z + + + https://orcid.org/0000-0001-5045-1000 + 0000-0001-5045-1000 + orcid.org + + Patricio Sánchez Quinchuela + + Dirección de Vinculación con la Sociedad + Director + + 2019 + 11 + 05 + + + 2021 + 10 + 31 + + + Universidad Regional Amazónica IKIAM + + Tena + Napo + EC + + + https://ror.org/05xedqd83 + ROR + + + http://ikiam.edu.ec + + + + + + + 2023-03-24T18:16:09.131Z + + 2023-03-24T18:16:09.131Z + + + 2023-03-24T18:16:09.131Z + 2023-03-24T18:16:09.131Z + + + https://orcid.org/0000-0001-5045-1000 + 0000-0001-5045-1000 + orcid.org + + Patricio Sánchez Quinchuela + + Artes Escénicas + Miembro + + 2000 + 07 + 15 + + + Casa de la Cultura Ecuatoriana + + Riobamba + Sierra Centro + EC + + + + + + + + 2023-01-18T21:45:07.379Z + + 2023-01-18T21:29:11.300Z + + + 2023-01-18T21:29:11.300Z + 2023-01-18T21:29:11.300Z + + + https://orcid.org/0000-0001-5045-1000 + 0000-0001-5045-1000 + orcid.org + + Patricio Sánchez Quinchuela + + Programa de Gobernabilidad + Magister en Economïa Social y Solidaria + + 2014 + 10 + 20 + + + 2017 + 01 + 26 + + + Instituto de Altos Estudios Nacionales + + Quito + Pichincha + EC + + + https://ror.org/011g3me54 + ROR + + + + + + 2023-01-18T21:34:32.093Z + + + 2023-01-18T21:34:32.093Z + 2023-01-18T21:34:32.093Z + + + https://orcid.org/0000-0001-5045-1000 + 0000-0001-5045-1000 + orcid.org + + Patricio Sánchez Quinchuela + + Posgrados + Magister en Proyectos Sociales y Productivos + + 2001 + 03 + 09 + + + 2003 + 02 + 27 + + + Universidad Nacional de Chimborazo + + Riobamba + Chimborazo + EC + + + https://ror.org/059wmd288 + ROR + + + + + + 2023-01-18T21:45:07.379Z + + + 2023-01-18T21:45:07.379Z + 2023-01-18T21:45:07.379Z + + + https://orcid.org/0000-0001-5045-1000 + 0000-0001-5045-1000 + orcid.org + + Patricio Sánchez Quinchuela + + Ciencias de la Educación + Licenciado en Ciencias de la Educación en Castellano y Literatura + + 1994 + 10 + 03 + + + 2000 + 01 + 31 + + + Universidad Nacional de Chimborazo + + Riobamba + Chimborazo + EC + + + https://ror.org/059wmd288 + ROR + + + + + + 2023-01-18T21:37:42.186Z + + + 2023-01-18T21:37:42.186Z + 2023-01-18T21:37:42.186Z + + + https://orcid.org/0000-0001-5045-1000 + 0000-0001-5045-1000 + orcid.org + + Patricio Sánchez Quinchuela + + Facultad de Artes + Licenciado en Artes + + 1989 + 09 + 05 + + + 1997 + 08 + 07 + + + Universidad Central del Ecuador + + Quito + Pichincha + EC + + + http://dx.doi.org/10.13039/100019134 + FUNDREF + + + + + + + + + 2023-09-04T17:51:57.749Z + + 2023-06-09T22:15:12.910Z + + + 2023-03-24T18:36:56.180Z + 2023-06-09T22:15:12.910Z + + + https://orcid.org/0000-0001-5045-1000 + 0000-0001-5045-1000 + orcid.org + + Patricio Sánchez Quinchuela + + + Experience in a non-capitalist way: solidarity funds that do not tax interest on the use of money + + + + isbn + 978-9942-29-089-2 + 9789942290892 + part-of + + + book-chapter + + 2023 + 06 + 07 + + Finanzas éticas y solidarias en América Latina: diagnósticos, debates y propuestas + + + + 2023-03-24T19:05:36.384Z + + + 2023-03-24T19:05:36.384Z + 2023-03-24T19:05:36.384Z + + + https://orcid.org/0000-0001-5045-1000 + 0000-0001-5045-1000 + orcid.org + + Patricio Sánchez Quinchuela + + + Incidence of artistic practices in the social transformation of the territory. study of case: Hilarte Association, Guayaquil-Ecuador + + + conference-abstract + + 2022 + 10 + 06 + + + + + 2023-09-04T17:40:30.215Z + + + other-id + 2018 + 2018 + self + + + + 2023-09-04T17:40:30.215Z + 2023-09-04T17:40:30.215Z + + + https://orcid.org/0000-0001-5045-1000 + 0000-0001-5045-1000 + orcid.org + + Patricio Sánchez Quinchuela + + + Más allá de la transferencia de conocimientos, un espacio para el interaprendizaje y el diálogo de saberes + + + + other-id + 2018 + 2018 + self + + + https://drive.google.com/drive/folders/1Tclz6isxGzSjTq-hfTnxe6M1nux-88wF?usp=drive_link + conference-poster + + 2018 + 11 + 30 + + Más allá de la transferencia de conocimientos, un espacio para el interaprendizaje y el diálogo de saberes + + + + 2023-03-24T18:57:10.095Z + + + 2023-03-24T18:57:10.095Z + 2023-03-24T18:57:10.095Z + + + https://orcid.org/0000-0001-5045-1000 + 0000-0001-5045-1000 + orcid.org + + Patricio Sánchez Quinchuela + + + Promotion of the popular and solidarity economy from the state: principles and challenges in the experience of Ecuador + + + dissertation-thesis + + 2017 + 01 + 26 + + + + + 2023-09-04T17:51:57.749Z + + + 2023-09-04T17:51:57.749Z + 2023-09-04T17:51:57.749Z + + + https://orcid.org/0000-0001-5045-1000 + 0000-0001-5045-1000 + orcid.org + + Patricio Sánchez Quinchuela + + + La Rebelión de los Dioses + + + https://drive.google.com/drive/folders/1Tclz6isxGzSjTq-hfTnxe6M1nux-88wF?usp=drive_link + registered-copyright + + 2001 + 08 + 28 + + Editorial pedagógica freire + + + + + \ No newline at end of file From eaf0a702dea01c77a01bfa38acb4c9b1b6c72627 Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Tue, 14 Nov 2023 14:53:34 +0100 Subject: [PATCH 355/449] - --- .../eu/dnetlib/dhp/api/QueryCommunityAPI.java | 50 +++++++++---------- .../main/java/eu/dnetlib/dhp/api/Utils.java | 25 +++++----- .../dnetlib/dhp/bulktag/SparkBulkTagJob.java | 6 +-- .../PrepareResultCommunitySet.java | 6 +-- .../PrepareResultCommunitySet.java | 7 ++- 5 files changed, 47 insertions(+), 47 deletions(-) diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/QueryCommunityAPI.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/QueryCommunityAPI.java index 262ca0290..dc10fce15 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/QueryCommunityAPI.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/QueryCommunityAPI.java @@ -14,8 +14,8 @@ import org.jetbrains.annotations.NotNull; * @Date 06/10/23 */ public class QueryCommunityAPI { - private static final String PRODUCTION_BASE_URL = "https://services.openaire.eu/openaire/"; - private static final String BETA_BASE_URL = "https://beta.services.openaire.eu/openaire/"; + + private static String get(String geturl) throws IOException { URL url = new URL(geturl); @@ -32,35 +32,35 @@ public class QueryCommunityAPI { return body; } - public static String communities(boolean production) throws IOException { - if (production) - return get(PRODUCTION_BASE_URL + "community/communities"); - return get(BETA_BASE_URL + "community/communities"); - } + public static String communities(String baseURL) throws IOException { - public static String community(String id, boolean production) throws IOException { - if (production) - return get(PRODUCTION_BASE_URL + "community/" + id); - return get(BETA_BASE_URL + "community/" + id); - } - - public static String communityDatasource(String id, boolean production) throws IOException { - if (production) - return get(PRODUCTION_BASE_URL + "community/" + id + "/contentproviders"); - return (BETA_BASE_URL + "community/" + id + "/contentproviders"); + return get(baseURL + "community/communities"); } - public static String communityPropagationOrganization(String id, boolean production) throws IOException { - if (production) - return get(PRODUCTION_BASE_URL + "community/" + id + "/propagationOrganizations"); - return get(BETA_BASE_URL + "community/" + id + "/propagationOrganizations"); + public static String community(String id, String baseURL ) throws IOException { + + return get(baseURL + "community/" + id); + } - public static String communityProjects(String id, String page, String size, boolean production) throws IOException { - if (production) - return get(PRODUCTION_BASE_URL + "community/" + id + "/projects/" + page + "/" + size); - return get(BETA_BASE_URL + "community/" + id + "/projects/" + page + "/" + size); + public static String communityDatasource(String id, String baseURL ) throws IOException { + + return get(baseURL + "community/" + id + "/contentproviders"); + + + } + + public static String communityPropagationOrganization(String id, String baseURL ) throws IOException { + + return get(baseURL + "community/" + id + "/propagationOrganizations"); + + } + + public static String communityProjects(String id, String page, String size, String baseURL ) throws IOException { + + return get(baseURL + "community/" + id + "/projects/" + page + "/" + size); + } @NotNull diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/Utils.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/Utils.java index 43d5e7e98..d121b8b7e 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/Utils.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/Utils.java @@ -36,14 +36,14 @@ public class Utils implements Serializable { private static final Logger log = LoggerFactory.getLogger(Utils.class); - public static CommunityConfiguration getCommunityConfiguration(boolean production) throws IOException { + public static CommunityConfiguration getCommunityConfiguration(String baseURL) throws IOException { final Map communities = Maps.newHashMap(); List validCommunities = new ArrayList<>(); - getValidCommunities(production) + getValidCommunities(baseURL) .forEach(community -> { try { CommunityModel cm = MAPPER - .readValue(QueryCommunityAPI.community(community.getId(), production), CommunityModel.class); + .readValue(QueryCommunityAPI.community(community.getId(), baseURL), CommunityModel.class); validCommunities.add(getCommunity(cm)); } catch (IOException e) { throw new RuntimeException(e); @@ -53,7 +53,7 @@ public class Utils implements Serializable { try { DatasourceList dl = MAPPER .readValue( - QueryCommunityAPI.communityDatasource(community.getId(), production), DatasourceList.class); + QueryCommunityAPI.communityDatasource(community.getId(), baseURL), DatasourceList.class); community.setProviders(dl.stream().map(d -> { if (d.getEnabled() == null || Boolean.FALSE.equals(d.getEnabled())) return null; @@ -98,9 +98,9 @@ public class Utils implements Serializable { return c; } - public static List getValidCommunities(boolean production) throws IOException { + public static List getValidCommunities(String baseURL) throws IOException { return MAPPER - .readValue(QueryCommunityAPI.communities(production), CommunitySummary.class) + .readValue(QueryCommunityAPI.communities(baseURL), CommunitySummary.class) .stream() .filter( community -> !community.getStatus().equals("hidden") && @@ -111,15 +111,15 @@ public class Utils implements Serializable { /** * it returns for each organization the list of associated communities */ - public static CommunityEntityMap getCommunityOrganization(boolean production) throws IOException { + public static CommunityEntityMap getCommunityOrganization(String baseURL) throws IOException { CommunityEntityMap organizationMap = new CommunityEntityMap(); - getValidCommunities(production) + getValidCommunities(baseURL) .forEach(community -> { String id = community.getId(); try { List associatedOrgs = MAPPER .readValue( - QueryCommunityAPI.communityPropagationOrganization(id, production), OrganizationList.class); + QueryCommunityAPI.communityPropagationOrganization(id, baseURL), OrganizationList.class); associatedOrgs.forEach(o -> { if (!organizationMap .keySet() @@ -136,9 +136,10 @@ public class Utils implements Serializable { return organizationMap; } - public static CommunityEntityMap getCommunityProjects(boolean production) throws IOException { + public static CommunityEntityMap getCommunityProjects(String baseURL) throws IOException { CommunityEntityMap projectMap = new CommunityEntityMap(); - getValidCommunities(production) + + getValidCommunities(baseURL) .forEach(community -> { int page = -1; int size = 100; @@ -150,7 +151,7 @@ public class Utils implements Serializable { .readValue( QueryCommunityAPI .communityProjects( - community.getId(), String.valueOf(page), String.valueOf(size), production), + community.getId(), String.valueOf(page), String.valueOf(size), baseURL), ContentModel.class); if (cm.getContent().size() > 0) { cm.getContent().forEach(p -> { diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/SparkBulkTagJob.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/SparkBulkTagJob.java index 15712ad66..d972cecac 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/SparkBulkTagJob.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/SparkBulkTagJob.java @@ -62,8 +62,8 @@ public class SparkBulkTagJob { final String outputPath = parser.get("outputPath"); log.info("outputPath: {}", outputPath); - final boolean production = Boolean.valueOf(parser.get("production")); - log.info("production: {}", production); + final String baseURL = parser.get("baseURL"); + log.info("baseURL: {}", baseURL); ProtoMap protoMappingParams = new Gson().fromJson(parser.get("pathMap"), ProtoMap.class); log.info("pathMap: {}", new Gson().toJson(protoMappingParams)); @@ -79,7 +79,7 @@ public class SparkBulkTagJob { if (taggingConf != null) { cc = CommunityConfigurationFactory.newInstance(taggingConf); } else { - cc = Utils.getCommunityConfiguration(production); + cc = Utils.getCommunityConfiguration(baseURL); } runWithSparkSession( diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromorganization/PrepareResultCommunitySet.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromorganization/PrepareResultCommunitySet.java index e32e94a4b..54fa60168 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromorganization/PrepareResultCommunitySet.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromorganization/PrepareResultCommunitySet.java @@ -48,10 +48,10 @@ public class PrepareResultCommunitySet { final String outputPath = parser.get("outputPath"); log.info("outputPath: {}", outputPath); - final boolean production = Boolean.valueOf(parser.get("production")); - log.info("production: {}", production); + final String baseURL = parser.get("baseURL"); + log.info("baseURL: {}", baseURL); - final CommunityEntityMap organizationMap = Utils.getCommunityOrganization(production); + final CommunityEntityMap organizationMap = Utils.getCommunityOrganization(baseURL); log.info("organizationMap: {}", new Gson().toJson(organizationMap)); SparkConf conf = new SparkConf(); diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/PrepareResultCommunitySet.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/PrepareResultCommunitySet.java index 7bee1ea0c..2c2eb69dd 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/PrepareResultCommunitySet.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/PrepareResultCommunitySet.java @@ -52,11 +52,10 @@ public class PrepareResultCommunitySet { final String outputPath = parser.get("outputPath"); log.info("outputPath: {}", outputPath); - final boolean production = Boolean.valueOf(parser.get("production")); - log.info("production: {}", production); + final String baseURL = parser.get("baseURL"); + log.info("baseUEL: {}", baseURL); - final CommunityEntityMap projectsMap = Utils.getCommunityProjects(production); - // log.info("projectsMap: {}", new Gson().toJson(projectsMap)); + final CommunityEntityMap projectsMap = Utils.getCommunityProjects(baseURL); SparkConf conf = new SparkConf(); From a94a54a2d0a9bdd9e6178f7f63b5369bd639d440 Mon Sep 17 00:00:00 2001 From: dimitrispie Date: Wed, 15 Nov 2023 14:32:18 +0200 Subject: [PATCH 356/449] Changes for tables and creation of the new indicator indi_is_result_accessible - Drop table statements for all tables to avoid duplicates in case of wf rerun - Add pdfsaggregated step to create the indi_is_result_accessible table. This step is executed on the new impala cluster only, since the pdfaggregation_i is updated on this cluster. --- .../oozie_app/copyDataToImpalaCluster.sh | 1 - .../stats/oozie_app/createPDFsAggregated.sh | 42 +++++ .../graph/stats/oozie_app/scripts/step10.sql | 2 + .../graph/stats/oozie_app/scripts/step11.sql | 1 + .../graph/stats/oozie_app/scripts/step12.sql | 10 ++ .../graph/stats/oozie_app/scripts/step13.sql | 17 +- .../graph/stats/oozie_app/scripts/step14.sql | 16 +- .../graph/stats/oozie_app/scripts/step15.sql | 12 ++ .../stats/oozie_app/scripts/step15_5.sql | 10 ++ .../scripts/step16-createIndicatorsTables.sql | 18 +- .../scripts/step16_1-definitions.sql | 6 + .../stats/oozie_app/scripts/step16_5.sql | 1 + .../graph/stats/oozie_app/scripts/step2.sql | 17 ++ .../scripts/step20-createMonitorDB.sql | 155 +++--------------- .../scripts/step20-createMonitorDBAll.sql | 85 +++------- .../scripts/step20-createMonitorDB_RIs.sql | 3 +- .../step20-createMonitorDB_RIs_tail.sql | 3 +- .../scripts/step20-createMonitorDB_funded.sql | 4 +- .../step20-createMonitorDB_institutions.sql | 4 +- .../scripts/step21-createObservatoryDB.sql | 33 ---- .../graph/stats/oozie_app/scripts/step7.sql | 6 + .../graph/stats/oozie_app/scripts/step8.sql | 11 ++ .../graph/stats/oozie_app/scripts/step9.sql | 2 + .../dhp/oa/graph/stats/oozie_app/workflow.xml | 17 ++ 24 files changed, 234 insertions(+), 242 deletions(-) create mode 100644 dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/createPDFsAggregated.sh diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/copyDataToImpalaCluster.sh b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/copyDataToImpalaCluster.sh index 431978997..18ff6dca8 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/copyDataToImpalaCluster.sh +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/copyDataToImpalaCluster.sh @@ -6,7 +6,6 @@ then ln -sfn ${PYTHON_EGG_CACHE}${link_folder} ${link_folder} fi -#export HADOOP_USER_NAME="dimitris.pierrakos" export HADOOP_USER_NAME=$6 export PROD_USAGE_STATS_DB="openaire_prod_usage_stats" function copydb() { diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/createPDFsAggregated.sh b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/createPDFsAggregated.sh new file mode 100644 index 000000000..46631a0c2 --- /dev/null +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/createPDFsAggregated.sh @@ -0,0 +1,42 @@ +export PYTHON_EGG_CACHE=/home/$(whoami)/.python-eggs +export link_folder=/tmp/impala-shell-python-egg-cache-$(whoami) +if ! [ -L $link_folder ] +then + rm -Rf "$link_folder" + ln -sfn ${PYTHON_EGG_CACHE}${link_folder} ${link_folder} +fi + +function createPDFsAggregated() { + db=$1 + +impala-shell --user $HADOOP_USER_NAME -i impala-cluster-dn1.openaire.eu -d ${db} -q "drop table if exists indi_is_result_accessible"; + +impala-shell --user $HADOOP_USER_NAME -i impala-cluster-dn1.openaire.eu -d ${db} -q "create table indi_is_result_accessible stored as parquet as + select distinct p.id, coalesce(is_result_accessible, 0) as is_result_accessible from result p + left outer join + (select id, 1 as is_result_accessible from (select pl.* from result r + join pdfaggregation_i.publication p on r.id=p.id + join pdfaggregation_i.payload pl on pl.id=p.id + union all + select pl.* from result r + join pdfaggregation_i.publication p on r.id=p.dedupid + join pdfaggregation_i.payload pl on pl.id=p.id) foo) tmp on p.id=tmp.id"; +} + +STATS_DB=$1 +MONITOR_DB=$2 +HADOOP_USER_NAME=$3 + +createPDFsAggregated $STATS_DB +createPDFsAggregated $MONITOR_DB + +createPDFsAggregated $MONITOR_DB'_funded' +createPDFsAggregated $MONITOR_DB'_institutions' +createPDFsAggregated $MONITOR_DB'_ris_tail' + +contexts="knowmad::other dh-ch::other enermaps::other gotriple::other neanias-atmospheric::other rural-digital-europe::other covid-19::other aurora::other neanias-space::other north-america-studies::other north-american-studies::other eutopia::other" +for i in ${contexts} +do + tmp=`echo "$i" | sed 's/'-'/'_'/g' | sed 's/'::'/'_'/g'` + createPDFsAggregated ${MONITOR_DB}'_'${tmp} +done \ No newline at end of file diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step10.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step10.sql index 92dedf243..bbd7b3bbc 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step10.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step10.sql @@ -49,5 +49,7 @@ select * from openaire_prod_usage_stats.views_stats; -- Creation date of the database ------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------ +DROP TABLE IF EXISTS ${stats_db_name}.creation_date purge; + create table ${stats_db_name}.creation_date STORED AS PARQUET as select date_format(current_date(), 'dd-MM-yyyy') as date; diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step11.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step11.sql index 41c3ed751..638fb0f7a 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step11.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step11.sql @@ -20,6 +20,7 @@ WHERE project_tmp.id IN (SELECT pr.id ${stats_db_name}.result r WHERE pr.result = r.id AND r.type = 'publication'); +DROP TABLE IF EXISTS ${stats_db_name}.stored purge; CREATE TABLE ${stats_db_name}.project stored as parquet as SELECT p.id, diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step12.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step12.sql index 47d147f75..0a1904de7 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step12.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step12.sql @@ -1,22 +1,32 @@ ------------------------------------------------------------------------------------------------------ -- Creating parquet tables from the updated temporary tables and removing unnecessary temporary tables ------------------------------------------------------------------------------------------------------ +DROP TABLE IF EXISTS ${stats_db_name}.datasource purge; + CREATE TABLE ${stats_db_name}.datasource stored AS parquet AS SELECT * FROM ${stats_db_name}.datasource_tmp; +DROP TABLE IF EXISTS ${stats_db_name}.publication purge; + CREATE TABLE ${stats_db_name}.publication stored AS parquet AS SELECT * FROM ${stats_db_name}.publication_tmp; +DROP TABLE IF EXISTS ${stats_db_name}.dataset purge; + CREATE TABLE ${stats_db_name}.dataset stored AS parquet AS SELECT * FROM ${stats_db_name}.dataset_tmp; +DROP TABLE IF EXISTS ${stats_db_name}.software purge; + CREATE TABLE ${stats_db_name}.software stored AS parquet AS SELECT * FROM ${stats_db_name}.software_tmp; +DROP TABLE IF EXISTS ${stats_db_name}.otherresearchproduct purge; + CREATE TABLE ${stats_db_name}.otherresearchproduct stored AS parquet AS SELECT * FROM ${stats_db_name}.otherresearchproduct_tmp; diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step13.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step13.sql index 24e1a1355..6493fa7d0 100755 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step13.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step13.sql @@ -5,6 +5,8 @@ -- Sources related tables/views ------------------------------------------------------ ------------------------------------------------------ +DROP TABLE IF EXISTS ${stats_db_name}.publication_sources purge; + CREATE TABLE IF NOT EXISTS ${stats_db_name}.publication_sources STORED AS PARQUET as SELECT p.id, case when d.id is null then 'other' else p.datasource end as datasource FROM ( @@ -16,6 +18,8 @@ LEFT OUTER JOIN from ${openaire_db_name}.datasource d WHERE d.datainfo.deletedbyinference=false and d.datainfo.invisible = FALSE) d on p.datasource = d.id; +DROP TABLE IF EXISTS ${stats_db_name}.dataset_sources purge; + CREATE TABLE IF NOT EXISTS ${stats_db_name}.dataset_sources STORED AS PARQUET as SELECT p.id, case when d.id is null then 'other' else p.datasource end as datasource FROM ( @@ -27,6 +31,8 @@ LEFT OUTER JOIN from ${openaire_db_name}.datasource d WHERE d.datainfo.deletedbyinference=false and d.datainfo.invisible = FALSE) d on p.datasource = d.id; +DROP TABLE IF EXISTS ${stats_db_name}.software_sources purge; + CREATE TABLE IF NOT EXISTS ${stats_db_name}.software_sources STORED AS PARQUET as SELECT p.id, case when d.id is null then 'other' else p.datasource end as datasource FROM ( @@ -38,6 +44,8 @@ LEFT OUTER JOIN from ${openaire_db_name}.datasource d WHERE d.datainfo.deletedbyinference=false and d.datainfo.invisible = FALSE) d on p.datasource = d.id; +DROP TABLE IF EXISTS ${stats_db_name}.otherresearchproduct_sources purge; + CREATE TABLE IF NOT EXISTS ${stats_db_name}.otherresearchproduct_sources STORED AS PARQUET as SELECT p.id, case when d.id is null then 'other' else p.datasource end as datasource FROM ( @@ -48,7 +56,7 @@ LEFT OUTER JOIN SELECT substr(d.id, 4) id from ${openaire_db_name}.datasource d WHERE d.datainfo.deletedbyinference=false and d.datainfo.invisible = FALSE) d on p.datasource = d.id; - + CREATE VIEW IF NOT EXISTS ${stats_db_name}.result_sources AS SELECT * FROM ${stats_db_name}.publication_sources UNION ALL @@ -58,6 +66,7 @@ SELECT * FROM ${stats_db_name}.software_sources UNION ALL SELECT * FROM ${stats_db_name}.otherresearchproduct_sources; +DROP TABLE IF EXISTS ${stats_db_name}.result_orcid purge; CREATE TABLE IF NOT EXISTS ${stats_db_name}.result_orcid STORED AS PARQUET as select distinct res.id, regexp_replace(res.orcid, 'http://orcid.org/' ,'') as orcid @@ -69,6 +78,8 @@ from ( LATERAL VIEW explode(auth.pid.qualifier.classid) apt as author_pid_type WHERE res.datainfo.deletedbyinference = FALSE and res.datainfo.invisible = FALSE and author_pid_type = 'orcid') as res; +DROP TABLE IF EXISTS ${stats_db_name}.result_result purge; + CREATE TABLE IF NOT EXISTS ${stats_db_name}.result_result stored as parquet as select substr(rel.source, 4) as source, substr(rel.target, 4) as target, relclass, subreltype from ${openaire_db_name}.relation rel @@ -82,6 +93,8 @@ where reltype='resultResult' and r2.resulttype.classname != 'other' and rel.datainfo.deletedbyinference=false and rel.datainfo.invisible = FALSE; +DROP TABLE IF EXISTS ${stats_db_name}.result_citations_oc purge; + CREATE TABLE IF NOT EXISTS ${stats_db_name}.result_citations_oc stored as parquet as select substr(target, 4) as id, count(distinct substr(source, 4)) as citations from ${openaire_db_name}.relation rel @@ -97,6 +110,8 @@ where relClass='Cites' and rel.datainfo.provenanceaction.classid = 'sysimport:cr and rel.datainfo.deletedbyinference=false and rel.datainfo.invisible = FALSE group by substr(target, 4); +DROP TABLE IF EXISTS ${stats_db_name}.result_references_oc purge; + CREATE TABLE IF NOT EXISTS ${stats_db_name}.result_references_oc stored as parquet as select substr(source, 4) as id, count(distinct substr(target, 4)) as references from ${openaire_db_name}.relation rel diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step14.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step14.sql index 39755d68e..f50c13521 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step14.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step14.sql @@ -5,21 +5,29 @@ -- Licences related tables/views ------------------------------------------------------ ------------------------------------------------------ +DROP TABLE IF EXISTS ${stats_db_name}.publication_licenses purge; + CREATE TABLE IF NOT EXISTS ${stats_db_name}.publication_licenses STORED AS PARQUET AS -SELECT substr(p.id, 4) as id, licenses.value as type +SELECT substr(p.id, 4) as id, licenses.value as type from ${openaire_db_name}.publication p LATERAL VIEW explode(p.instance.license) instances as licenses where licenses.value is not null and licenses.value != '' and p.datainfo.deletedbyinference=false and p.datainfo.invisible = FALSE; +DROP TABLE IF EXISTS ${stats_db_name}.dataset_licenses purge; + CREATE TABLE IF NOT EXISTS ${stats_db_name}.dataset_licenses STORED AS PARQUET AS SELECT substr(p.id, 4) as id, licenses.value as type from ${openaire_db_name}.dataset p LATERAL VIEW explode(p.instance.license) instances as licenses where licenses.value is not null and licenses.value != '' and p.datainfo.deletedbyinference=false and p.datainfo.invisible = FALSE; +DROP TABLE IF EXISTS ${stats_db_name}.software_licenses purge; + CREATE TABLE IF NOT EXISTS ${stats_db_name}.software_licenses STORED AS PARQUET AS SELECT substr(p.id, 4) as id, licenses.value as type from ${openaire_db_name}.software p LATERAL VIEW explode(p.instance.license) instances as licenses where licenses.value is not null and licenses.value != '' and p.datainfo.deletedbyinference=false and p.datainfo.invisible = FALSE; +DROP TABLE IF EXISTS ${stats_db_name}.otherresearchproduct_licenses purge; + CREATE TABLE IF NOT EXISTS ${stats_db_name}.otherresearchproduct_licenses STORED AS PARQUET AS SELECT substr(p.id, 4) as id, licenses.value as type from ${openaire_db_name}.otherresearchproduct p LATERAL VIEW explode(p.instance.license) instances as licenses @@ -34,10 +42,14 @@ SELECT * FROM ${stats_db_name}.software_licenses UNION ALL SELECT * FROM ${stats_db_name}.otherresearchproduct_licenses; +DROP TABLE IF EXISTS ${stats_db_name}.organization_pids purge; + CREATE TABLE IF NOT EXISTS ${stats_db_name}.organization_pids STORED AS PARQUET AS select substr(o.id, 4) as id, ppid.qualifier.classname as type, ppid.value as pid from ${openaire_db_name}.organization o lateral view explode(o.pid) pids as ppid; +DROP TABLE IF EXISTS ${stats_db_name}.organization_sources purge; + CREATE TABLE IF NOT EXISTS ${stats_db_name}.organization_sources STORED AS PARQUET as SELECT o.id, case when d.id is null then 'other' else o.datasource end as datasource FROM ( @@ -48,6 +60,8 @@ FROM ( from ${openaire_db_name}.datasource d WHERE d.datainfo.deletedbyinference=false and d.datainfo.invisible = FALSE) d on o.datasource = d.id; +DROP TABLE IF EXISTS ${stats_db_name}.result_accessroute purge; + CREATE TABLE IF NOT EXISTS ${stats_db_name}.result_accessroute STORED AS PARQUET as select distinct substr(id,4) as id, accessroute from ${openaire_db_name}.result lateral view explode (instance.accessright.openaccessroute) openaccessroute as accessroute; diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step15.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step15.sql index 4a8f81943..066b197e6 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step15.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step15.sql @@ -6,21 +6,29 @@ ------------------------------------------------------ ------------------------------------------------------ +DROP TABLE IF EXISTS ${stats_db_name}.publication_refereed purge; + CREATE TABLE IF NOT EXISTS ${stats_db_name}.publication_refereed STORED AS PARQUET as select substr(r.id, 4) as id, inst.refereed.classname as refereed from ${openaire_db_name}.publication r lateral view explode(r.instance) instances as inst where r.datainfo.deletedbyinference=false and r.datainfo.invisible = FALSE; +DROP TABLE IF EXISTS ${stats_db_name}.dataset_refereed purge; + CREATE TABLE IF NOT EXISTS ${stats_db_name}.dataset_refereed STORED AS PARQUET as select substr(r.id, 4) as id, inst.refereed.classname as refereed from ${openaire_db_name}.dataset r lateral view explode(r.instance) instances as inst where r.datainfo.deletedbyinference=false and r.datainfo.invisible = FALSE; +DROP TABLE IF EXISTS ${stats_db_name}.software_refereed purge; + CREATE TABLE IF NOT EXISTS ${stats_db_name}.software_refereed STORED AS PARQUET as select substr(r.id, 4) as id, inst.refereed.classname as refereed from ${openaire_db_name}.software r lateral view explode(r.instance) instances as inst where r.datainfo.deletedbyinference=false and r.datainfo.invisible = FALSE; +DROP TABLE IF EXISTS ${stats_db_name}.otherresearchproduct_refereed purge; + CREATE TABLE IF NOT EXISTS ${stats_db_name}.otherresearchproduct_refereed STORED AS PARQUET as select substr(r.id, 4) as id, inst.refereed.classname as refereed from ${openaire_db_name}.otherresearchproduct r lateral view explode(r.instance) instances as inst @@ -35,12 +43,16 @@ select * from ${stats_db_name}.software_refereed union all select * from ${stats_db_name}.otherresearchproduct_refereed; +DROP TABLE IF EXISTS ${stats_db_name}.indi_impact_measures purge; + create table if not exists ${stats_db_name}.indi_impact_measures STORED AS PARQUET as select substr(id, 4) as id, measures_ids.id impactmetric, cast(measures_ids.unit.value[0] as double) score, cast(measures_ids.unit.value[0] as decimal(6,3)) score_dec, measures_ids.unit.value[1] impact_class from ${openaire_db_name}.result lateral view explode(measures) measures as measures_ids where measures_ids.id!='views' and measures_ids.id!='downloads'; +DROP TABLE IF EXISTS ${stats_db_name}.result_apc_affiliations purge; + create table if not exists ${stats_db_name}.result_apc_affiliations STORED AS PARQUET as select distinct substr(rel.target,4) id, substr(rel.source,4) organization, o.legalname.value name, cast(rel.properties[0].value as double) apc_amount, diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step15_5.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step15_5.sql index 615f523ce..2c606fb92 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step15_5.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step15_5.sql @@ -1,6 +1,8 @@ ------------------------------------------- --- Extra tables, mostly used by indicators +DROP TABLE IF EXISTS ${stats_db_name}.result_projectcount purge; + create table if not exists ${stats_db_name}.result_projectcount STORED AS PARQUET as select r.id, count(distinct p.id) as count from ${stats_db_name}.result r @@ -8,6 +10,8 @@ left outer join ${stats_db_name}.result_projects rp on rp.id=r.id left outer join ${stats_db_name}.project p on p.id=rp.project group by r.id; +DROP TABLE IF EXISTS ${stats_db_name}.result_fundercount purge; + create table if not exists ${stats_db_name}.result_fundercount STORED AS PARQUET as select r.id, count(distinct p.funder) as count from ${stats_db_name}.result r @@ -15,6 +19,8 @@ left outer join ${stats_db_name}.result_projects rp on rp.id=r.id left outer join ${stats_db_name}.project p on p.id=rp.project group by r.id; +DROP TABLE IF EXISTS ${stats_db_name}.project_resultcount purge; + create table if not exists ${stats_db_name}.project_resultcount STORED AS PARQUET as with rcount as ( select p.id as pid, count(distinct r.id) as `count`, r.type as type @@ -37,6 +43,8 @@ create or replace view ${stats_db_name}.totalresearchersft as select * from stat create or replace view ${stats_db_name}.hrrst as select * from stats_ext.hrrst; create or replace view ${stats_db_name}.graduatedoctorates as select * from stats_ext.graduatedoctorates; +DROP TABLE IF EXISTS ${stats_db_name}.result_instance purge; + create table if not exists ${stats_db_name}.result_instance stored as parquet as select distinct r.* from ( @@ -45,6 +53,8 @@ from ( from ${openaire_db_name}.result r lateral view explode(r.instance) instances as inst lateral view explode(inst.pid) pids as p) r join ${stats_db_name}.result res on res.id=r.id; +DROP TABLE IF EXISTS ${stats_db_name}.result_apc purge; + create table if not exists ${stats_db_name}.result_apc STORED AS PARQUET as select r.id, r.amount, r.currency from ( diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step16-createIndicatorsTables.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step16-createIndicatorsTables.sql index 6af486340..8180e6527 100755 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step16-createIndicatorsTables.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step16-createIndicatorsTables.sql @@ -104,7 +104,7 @@ from ${stats_db_name}.tmp as o1 join ${stats_db_name}.tmp as o2 where o1.id=o2.id and o1.organization!=o2.organization and o1.name!=o2.name group by o1.organization, o2.organization, o1.name, o2.name; -drop table ${stats_db_name}.tmp purge; +drop table if exists ${stats_db_name}.tmp purge; create TEMPORARY TABLE ${stats_db_name}.tmp AS select distinct ro.organization organization, ro.id, o.name, o.country from ${stats_db_name}.result_organization ro @@ -118,7 +118,7 @@ from ${stats_db_name}.tmp as o1 join ${stats_db_name}.tmp as o2 on o1.id=o2.id where o1.id=o2.id and o1.country!=o2.country group by o1.organization, o1.id, o1.name, o2.country; -drop table ${stats_db_name}.tmp purge; +drop table if exists ${stats_db_name}.tmp purge; create TEMPORARY TABLE ${stats_db_name}.tmp AS select o.id organization, o.name, ro.project as project from ${stats_db_name}.organization o @@ -133,7 +133,7 @@ from ${stats_db_name}.tmp as o1 where o1.organization<>o2.organization and o1.name<>o2.name group by o1.name,o2.name, o1.organization, o2.organization; -drop table ${stats_db_name}.tmp purge; +drop table if exists ${stats_db_name}.tmp purge; create TEMPORARY TABLE ${stats_db_name}.tmp AS select o.id organization, o.name, o.country , ro.project as project from ${stats_db_name}.organization o @@ -149,7 +149,7 @@ from ${stats_db_name}.tmp as o1 where o1.organization<>o2.organization and o1.country<>o2.country group by o1.organization, o2.country, o1.name; -drop table ${stats_db_name}.tmp purge; +drop table if exists ${stats_db_name}.tmp purge; drop table if exists ${stats_db_name}.indi_funder_country_collab purge; @@ -178,7 +178,7 @@ from ${stats_db_name}.tmp as o1 where o1.country<>o2.country group by o1.country, o2.country; -drop table ${stats_db_name}.tmp purge; +drop table if exists ${stats_db_name}.tmp purge; ---- Sprint 4 ---- drop table if exists ${stats_db_name}.indi_pub_diamond purge; @@ -422,7 +422,7 @@ drop table if exists ${stats_db_name}.indi_pub_hybrid purge; -- on pd.id=tmp.id; create table if not exists ${stats_db_name}.indi_pub_hybrid stored as parquet as -select pd.id,coalesce(is_hybrid,0) is_hybrid from ${stats_db_name}.publication_datasources pd +select distinct pd.id,coalesce(is_hybrid,0) is_hybrid from ${stats_db_name}.publication_datasources pd left outer join (select pd.id, 1 as is_hybrid from ${stats_db_name}.publication_datasources pd join ${stats_db_name}.datasource d on pd.datasource=d.id join ${stats_db_name}.result_instance ri on ri.id=pd.id @@ -492,7 +492,7 @@ CREATE TEMPORARY TABLE ${stats_db_name}.allresults as select year, ro.organizati drop table if exists ${stats_db_name}.indi_org_fairness_pub_year purge; create table if not exists ${stats_db_name}.indi_org_fairness_pub_year stored as parquet as -select allresults.year, allresults.organization, result_fair.no_result_fair/allresults.no_allresults org_fairness +select cast(allresults.year as int) year, allresults.organization, result_fair.no_result_fair/allresults.no_allresults org_fairness from ${stats_db_name}.allresults join ${stats_db_name}.result_fair on result_fair.organization=allresults.organization and result_fair.year=allresults.year; @@ -813,8 +813,8 @@ drop table if exists ${stats_db_name}.indi_pub_bronze_oa purge; --and (d.type='Journal' or d.type='Journal Aggregator/Publisher') --and ri.accessright='Open Access') tmp on tmp.id=p.id; -create table ${stats_db_name}.indi_pub_bronze stored as parquet as -select pd.id,coalesce(is_bronze_oa,0) is_bronze_oa from ${stats_db_name}.publication_datasources pd +create table ${stats_db_name}.indi_pub_bronze_oa stored as parquet as +select distinct pd.id,coalesce(is_bronze_oa,0) is_bronze_oa from ${stats_db_name}.publication_datasources pd left outer join (select pd.id, 1 as is_bronze_oa from ${stats_db_name}.publication_datasources pd join ${stats_db_name}.datasource d on pd.datasource=d.id join ${stats_db_name}.result_instance ri on ri.id=pd.id diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step16_1-definitions.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step16_1-definitions.sql index 41c95758c..b55af13d4 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step16_1-definitions.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step16_1-definitions.sql @@ -3,6 +3,8 @@ ---------------------------------------------------- -- Peer reviewed: +drop table if exists ${stats_db_name}.result_peerreviewed purge; + create table IF NOT EXISTS ${stats_db_name}.result_peerreviewed STORED AS PARQUET as select r.id as id, case when doi.doi_from_crossref=1 and grey.grey_lit=0 then true else false end as peer_reviewed from ${stats_db_name}.result r @@ -10,12 +12,16 @@ left outer join ${stats_db_name}.indi_pub_doi_from_crossref doi on doi.id=r.id left outer join ${stats_db_name}.indi_pub_grey_lit grey on grey.id=r.id; -- Green OA: +drop table if exists ${stats_db_name}.result_greenoa purge; + create table IF NOT EXISTS ${stats_db_name}.result_greenoa STORED AS PARQUET as select r.id, case when green.green_oa=1 then true else false end as green from ${stats_db_name}.result r left outer join ${stats_db_name}.indi_pub_green_oa green on green.id=r.id; -- GOLD OA: +drop table if exists ${stats_db_name}.result_gold purge; + create table IF NOT EXISTS ${stats_db_name}.result_gold STORED AS PARQUET as select r.id, case when gold.is_gold=1 then true else false end as gold from ${stats_db_name}.result r diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step16_5.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step16_5.sql index f737c1ea6..7faa91697 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step16_5.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step16_5.sql @@ -1,6 +1,7 @@ -- replace the creation of the result view to include the boolean fields from the previous tables (green, gold, -- peer reviewed) drop table if exists ${stats_db_name}.result_tmp; + CREATE TABLE ${stats_db_name}.result_tmp ( id STRING, title STRING, diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step2.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step2.sql index 4ffbd384b..8e56f98fc 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step2.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step2.sql @@ -5,6 +5,7 @@ -------------------------------------------------------------- -- Publication temporary table +DROP TABLE IF EXISTS ${stats_db_name}.publication_tmp purge; CREATE TABLE ${stats_db_name}.publication_tmp ( id STRING, @@ -40,12 +41,16 @@ SELECT substr(p.id, 4) as id, from ${openaire_db_name}.publication p where p.datainfo.deletedbyinference = false and p.datainfo.invisible=false; +DROP TABLE IF EXISTS ${stats_db_name}.publication_classifications purge; + CREATE TABLE ${stats_db_name}.publication_classifications STORED AS PARQUET AS SELECT substr(p.id, 4) as id, instancetype.classname as type from ${openaire_db_name}.publication p LATERAL VIEW explode(p.instance.instancetype) instances as instancetype where p.datainfo.deletedbyinference = false and p.datainfo.invisible=false; +DROP TABLE IF EXISTS ${stats_db_name}.publication_concepts purge; + CREATE TABLE ${stats_db_name}.publication_concepts STORED AS PARQUET AS SELECT substr(p.id, 4) as id, case when contexts.context.id RLIKE '^[^::]+::[^::]+::.+$' then contexts.context.id @@ -55,6 +60,8 @@ from ${openaire_db_name}.publication p LATERAL VIEW explode(p.context) contexts as context where p.datainfo.deletedbyinference = false and p.datainfo.invisible=false; +DROP TABLE IF EXISTS ${stats_db_name}.publication_datasources purge; + CREATE TABLE ${stats_db_name}.publication_datasources STORED AS PARQUET as SELECT p.id, case when d.id is null then 'other' else p.datasource end as datasource FROM ( @@ -66,29 +73,39 @@ FROM ( from ${openaire_db_name}.datasource d WHERE d.datainfo.deletedbyinference = false and d.datainfo.invisible=false) d on p.datasource = d.id; +DROP TABLE IF EXISTS ${stats_db_name}.publication_languages purge; + CREATE TABLE ${stats_db_name}.publication_languages STORED AS PARQUET AS select substr(p.id, 4) as id, p.language.classname as language FROM ${openaire_db_name}.publication p where p.datainfo.deletedbyinference = false and p.datainfo.invisible=false; +DROP TABLE IF EXISTS ${stats_db_name}.publication_oids purge; + CREATE TABLE ${stats_db_name}.publication_oids STORED AS PARQUET AS SELECT substr(p.id, 4) AS id, oids.ids AS oid FROM ${openaire_db_name}.publication p LATERAL VIEW explode(p.originalid) oids AS ids where p.datainfo.deletedbyinference = false and p.datainfo.invisible=false; +DROP TABLE IF EXISTS ${stats_db_name}.publication_pids purge; + CREATE TABLE ${stats_db_name}.publication_pids STORED AS PARQUET AS SELECT substr(p.id, 4) AS id, ppid.qualifier.classname AS type, ppid.value as pid FROM ${openaire_db_name}.publication p LATERAL VIEW explode(p.pid) pids AS ppid where p.datainfo.deletedbyinference = false and p.datainfo.invisible=false; +DROP TABLE IF EXISTS ${stats_db_name}.publication_topics purge; + CREATE TABLE ${stats_db_name}.publication_topics STORED AS PARQUET as select substr(p.id, 4) AS id, subjects.subject.qualifier.classname AS TYPE, subjects.subject.value AS topic FROM ${openaire_db_name}.publication p LATERAL VIEW explode(p.subject) subjects AS subject where p.datainfo.deletedbyinference = false and p.datainfo.invisible=false; +DROP TABLE IF EXISTS ${stats_db_name}.publication_citations purge; + CREATE TABLE ${stats_db_name}.publication_citations STORED AS PARQUET AS SELECT substr(p.id, 4) AS id, xpath_string(citation.value, "//citation/id[@type='openaire']/@value") AS cites FROM ${openaire_db_name}.publication p diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB.sql index d5d242230..b52abd865 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB.sql @@ -1,79 +1,3 @@ ---drop database if exists TARGET cascade; ---create database if not exists TARGET; --- ---create view if not exists TARGET.category as select * from SOURCE.category; ---create view if not exists TARGET.concept as select * from SOURCE.concept; ---create view if not exists TARGET.context as select * from SOURCE.context; ---create view if not exists TARGET.country as select * from SOURCE.country; ---create view if not exists TARGET.countrygdp as select * from SOURCE.countrygdp; ---create view if not exists TARGET.creation_date as select * from SOURCE.creation_date; ---create view if not exists TARGET.funder as select * from SOURCE.funder; ---create view if not exists TARGET.fundref as select * from SOURCE.fundref; ---create view if not exists TARGET.rndexpenditure as select * from SOURCE.rndexpediture; ---create view if not exists TARGET.rndgdpexpenditure as select * from SOURCE.rndgdpexpenditure; ---create view if not exists TARGET.doctoratestudents as select * from SOURCE.doctoratestudents; ---create view if not exists TARGET.totalresearchers as select * from SOURCE.totalresearchers; ---create view if not exists TARGET.totalresearchersft as select * from SOURCE.totalresearchersft; ---create view if not exists TARGET.hrrst as select * from SOURCE.hrrst; --- ---create table TARGET.result stored as parquet as --- select distinct * from ( --- select * from SOURCE.result r where exists (select 1 from SOURCE.result_projects rp join SOURCE.project p on rp.project=p.id where rp.id=r.id) --- union all --- select * from SOURCE.result r where exists (select 1 from SOURCE.result_concepts rc where rc.id=r.id) --- union all --- select * from SOURCE.result r where exists (select 1 from SOURCE.result_organization ro where ro.id=r.id and ro.organization in ( --- 'openorgs____::b84450f9864182c67b8611b5593f4250', --"Athena Research and Innovation Center In Information Communication & Knowledge Technologies', --ARC" --- 'openorgs____::d41cf6bd4ab1b1362a44397e0b95c975', --National Research Council --- 'openorgs____::d2a09b9d5eabb10c95f9470e172d05d2', --??? Not exists ?? --- 'openorgs____::d169c7407dd417152596908d48c11460', --Masaryk University --- 'openorgs____::1ec924b1759bb16d0a02f2dad8689b21', --University of Belgrade --- 'openorgs____::0ae431b820e4c33db8967fbb2b919150', --University of Helsinki --- 'openorgs____::759d59f05d77188faee99b7493b46805', --University of Minho --- 'openorgs____::cad284878801b9465fa51a95b1d779db', --Universidad Politécnica de Madrid --- 'openorgs____::eadc8da90a546e98c03f896661a2e4d4', --University of Göttingen --- 'openorgs____::c0286313e36479eff8676dba9b724b40', --National and Kapodistrian University of Athens --- -- 'openorgs____::c80a8243a5e5c620d7931c88d93bf17a', --Université Paris Diderot --- 'openorgs____::c08634f0a6b0081c3dc6e6c93a4314f3', --Bielefeld University --- 'openorgs____::6fc85e4a8f7ecaf4b0c738d010e967ea', --University of Southern Denmark --- 'openorgs____::3d6122f87f9a97a99d8f6e3d73313720', --Humboldt-Universität zu Berlin --- 'openorgs____::16720ada63d0fa8ca41601feae7d1aa5', --TU Darmstadt --- 'openorgs____::ccc0a066b56d2cfaf90c2ae369df16f5', --KU Leuven --- 'openorgs____::4c6f119632adf789746f0a057ed73e90', --University of the Western Cape --- 'openorgs____::ec3665affa01aeafa28b7852c4176dbd', --Rudjer Boskovic Institute --- 'openorgs____::5f31346d444a7f06a28c880fb170b0f6', --Ghent University --- 'openorgs____::2dbe47117fd5409f9c61620813456632', --University of Luxembourg --- 'openorgs____::6445d7758d3a40c4d997953b6632a368', --National Institute of Informatics (NII) --- 'openorgs____::b77c01aa15de3675da34277d48de2ec1', -- Valencia Catholic University Saint Vincent Martyr --- 'openorgs____::7fe2f66cdc43983c6b24816bfe9cf6a0', -- Unviersity of Warsaw --- 'openorgs____::15e7921fc50d9aa1229a82a84429419e', -- University Of Thessaly --- 'openorgs____::11f7919dadc8f8a7251af54bba60c956', -- Technical University of Crete --- 'openorgs____::84f0c5f5dbb6daf42748485924efde4b', -- University of Piraeus --- 'openorgs____::4ac562f0376fce3539504567649cb373', -- University of Patras --- 'openorgs____::3e8d1f8c3f6cd7f418b09f1f58b4873b', -- Aristotle University of Thessaloniki --- 'openorgs____::3fcef6e1c469c10f2a84b281372c9814', -- World Bank --- 'openorgs____::1698a2eb1885ef8adb5a4a969e745ad3', -- École des Ponts ParisTech --- 'openorgs____::e15adb13c4dadd49de4d35c39b5da93a', -- Nanyang Technological University --- 'openorgs____::4b34103bde246228fcd837f5f1bf4212', -- Autonomous University of Barcelona --- 'openorgs____::72ec75fcfc4e0df1a76dc4c49007fceb', -- McMaster University --- 'openorgs____::51c7fc556e46381734a25a6fbc3fd398', -- University of Modena and Reggio Emilia --- 'openorgs____::235d7f9ad18ecd7e6dc62ea4990cb9db', -- Bilkent University --- 'openorgs____::31f2fa9e05b49d4cf40a19c3fed8eb06', -- Saints Cyril and Methodius University of Skopje --- 'openorgs____::db7686f30f22cbe73a4fde872ce812a6', -- University of Milan --- 'openorgs____::b8b8ca674452579f3f593d9f5e557483', -- University College Cork --- 'openorgs____::38d7097854736583dde879d12dacafca' -- Brown University --- 'openorgs____::57784c9e047e826fefdb1ef816120d92', --Arts et Métiers ParisTech --- 'openorgs____::2530baca8a15936ba2e3297f2bce2e7e', -- University of Cape Town --- 'openorgs____::d11f981828c485cd23d93f7f24f24db1', -- Technological University Dublin --- 'openorgs____::5e6bf8962665cdd040341171e5c631d8', -- Delft University of Technology --- 'openorgs____::846cb428d3f52a445f7275561a7beb5d', -- University of Manitoba --- 'openorgs____::eb391317ed0dc684aa81ac16265de041', -- Universitat Rovira i Virgili --- 'openorgs____::66aa9fc2fceb271423dfabcc38752dc0', -- Lund University --- 'openorgs____::3cff625a4370d51e08624cc586138b2f' -- IMT Atlantique --- ) )) foo; --- ---ANALYZE TABLE TARGET.result COMPUTE STATISTICS; - create view if not exists TARGET.category as select * from SOURCE.category; create view if not exists TARGET.concept as select * from SOURCE.concept; create view if not exists TARGET.context as select * from SOURCE.context; @@ -91,76 +15,52 @@ create view if not exists TARGET.hrrst as select * from SOURCE.hrrst; create view if not exists TARGET.graduatedoctorates as select * from SOURCE.graduatedoctorates; create table TARGET.result_citations stored as parquet as select * from SOURCE.result_citations orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.result_citations COMPUTE STATISTICS; create table TARGET.result_references_oc stored as parquet as select * from SOURCE.result_references_oc orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.result_references_oc COMPUTE STATISTICS; create table TARGET.result_citations_oc stored as parquet as select * from SOURCE.result_citations_oc orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.result_citations_oc COMPUTE STATISTICS; create table TARGET.result_classifications stored as parquet as select * from SOURCE.result_classifications orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.result_classifications COMPUTE STATISTICS; create table TARGET.result_apc stored as parquet as select * from SOURCE.result_apc orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.result_apc COMPUTE STATISTICS; create table TARGET.result_concepts stored as parquet as select * from SOURCE.result_concepts orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.result_concepts COMPUTE STATISTICS; create table TARGET.result_datasources stored as parquet as select * from SOURCE.result_datasources orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.result_datasources COMPUTE STATISTICS; create table TARGET.result_fundercount stored as parquet as select * from SOURCE.result_fundercount orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.result_fundercount COMPUTE STATISTICS; create table TARGET.result_gold stored as parquet as select * from SOURCE.result_gold orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.result_gold COMPUTE STATISTICS; create table TARGET.result_greenoa stored as parquet as select * from SOURCE.result_greenoa orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.result_greenoa COMPUTE STATISTICS; create table TARGET.result_languages stored as parquet as select * from SOURCE.result_languages orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.result_languages COMPUTE STATISTICS; create table TARGET.result_licenses stored as parquet as select * from SOURCE.result_licenses orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.result_licenses COMPUTE STATISTICS; create table TARGET.licenses_normalized STORED AS PARQUET as select * from SOURCE.licenses_normalized; ---ANALYZE TABLE TARGET.licenses_normalized COMPUTE STATISTICS; create table TARGET.result_oids stored as parquet as select * from SOURCE.result_oids orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.result_oids COMPUTE STATISTICS; create table TARGET.result_organization stored as parquet as select * from SOURCE.result_organization orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.result_organization COMPUTE STATISTICS; create table TARGET.result_peerreviewed stored as parquet as select * from SOURCE.result_peerreviewed orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.result_peerreviewed COMPUTE STATISTICS; create table TARGET.result_pids stored as parquet as select * from SOURCE.result_pids orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.result_pids COMPUTE STATISTICS; create table TARGET.result_projectcount stored as parquet as select * from SOURCE.result_projectcount orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.result_projectcount COMPUTE STATISTICS; create table TARGET.result_projects stored as parquet as select * from SOURCE.result_projects orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.result_projects COMPUTE STATISTICS; create table TARGET.result_refereed stored as parquet as select * from SOURCE.result_refereed orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.result_refereed COMPUTE STATISTICS; create table TARGET.result_sources stored as parquet as select * from SOURCE.result_sources orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.result_sources COMPUTE STATISTICS; create table TARGET.result_topics stored as parquet as select * from SOURCE.result_topics orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.result_topics COMPUTE STATISTICS; create table TARGET.result_fos stored as parquet as select * from SOURCE.result_fos orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.result_fos COMPUTE STATISTICS; create table TARGET.result_accessroute stored as parquet as select * from SOURCE.result_accessroute orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.result_accessroute COMPUTE STATISTICS; create table TARGET.result_orcid stored as parquet as select * from SOURCE.result_orcid orig where exists (select 1 from TARGET.result r where r.id=orig.id); @@ -169,7 +69,6 @@ create view TARGET.foo2 as select * from SOURCE.result_result rr where rr.target create table TARGET.result_result STORED AS PARQUET as select distinct * from (select * from TARGET.foo1 union all select * from TARGET.foo2) foufou; drop view TARGET.foo1; drop view TARGET.foo2; ---ANALYZE TABLE TARGET.result_result COMPUTE STATISTICS; -- datasources create view if not exists TARGET.datasource as select * from SOURCE.datasource; @@ -178,7 +77,6 @@ create view if not exists TARGET.datasource_organizations as select * from SOURC create view if not exists TARGET.datasource_sources as select * from SOURCE.datasource_sources; create table TARGET.datasource_results stored as parquet as select id as result, datasource as id from TARGET.result_datasources; ---ANALYZE TABLE TARGET.datasource_results COMPUTE STATISTICS; -- organizations create view if not exists TARGET.organization as select * from SOURCE.organization; @@ -196,28 +94,27 @@ create view if not exists TARGET.project_classification as select * from SOURCE. create view if not exists TARGET.project_organization_contribution as select * from SOURCE.project_organization_contribution; create table TARGET.project_results stored as parquet as select id as result, project as id from TARGET.result_projects; ---ANALYZE TABLE TARGET.project_results COMPUTE STATISTICS; -- indicators -- Sprint 1 ---- create table TARGET.indi_pub_green_oa stored as parquet as select * from SOURCE.indi_pub_green_oa orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.indi_pub_green_oa COMPUTE STATISTICS; + create table TARGET.indi_pub_grey_lit stored as parquet as select * from SOURCE.indi_pub_grey_lit orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.indi_pub_grey_lit COMPUTE STATISTICS; + create table TARGET.indi_pub_doi_from_crossref stored as parquet as select * from SOURCE.indi_pub_doi_from_crossref orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.indi_pub_doi_from_crossref COMPUTE STATISTICS; + -- Sprint 2 ---- create table TARGET.indi_result_has_cc_licence stored as parquet as select * from SOURCE.indi_result_has_cc_licence orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.indi_result_has_cc_licence COMPUTE STATISTICS; + create table TARGET.indi_result_has_cc_licence_url stored as parquet as select * from SOURCE.indi_result_has_cc_licence_url orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.indi_result_has_cc_licence_url COMPUTE STATISTICS; + create table TARGET.indi_pub_has_abstract stored as parquet as select * from SOURCE.indi_pub_has_abstract orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.indi_pub_has_abstract COMPUTE STATISTICS; + create table TARGET.indi_result_with_orcid stored as parquet as select * from SOURCE.indi_result_with_orcid orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.indi_result_with_orcid COMPUTE STATISTICS; + ---- Sprint 3 ---- create table TARGET.indi_funded_result_with_fundref stored as parquet as select * from SOURCE.indi_funded_result_with_fundref orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.indi_funded_result_with_fundref COMPUTE STATISTICS; + create view TARGET.indi_result_org_collab as select * from SOURCE.indi_result_org_collab; create view TARGET.indi_result_org_country_collab as select * from SOURCE.indi_result_org_country_collab; create view TARGET.indi_project_collab_org as select * from SOURCE.indi_project_collab_org; @@ -226,32 +123,32 @@ create view TARGET.indi_funder_country_collab as select * from SOURCE.indi_funde create view TARGET.indi_result_country_collab as select * from SOURCE.indi_result_country_collab; ---- Sprint 4 ---- create table TARGET.indi_pub_diamond stored as parquet as select * from SOURCE.indi_pub_diamond orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.indi_pub_diamond COMPUTE STATISTICS; + create table TARGET.indi_pub_in_transformative stored as parquet as select * from SOURCE.indi_pub_in_transformative orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.indi_pub_in_transformative COMPUTE STATISTICS; + create table TARGET.indi_pub_closed_other_open stored as parquet as select * from SOURCE.indi_pub_closed_other_open orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.indi_pub_closed_other_open COMPUTE STATISTICS; + ---- Sprint 5 ---- create table TARGET.indi_result_no_of_copies stored as parquet as select * from SOURCE.indi_result_no_of_copies orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.indi_result_no_of_copies COMPUTE STATISTICS; + ---- Sprint 6 ---- create table TARGET.indi_pub_hybrid_oa_with_cc stored as parquet as select * from SOURCE.indi_pub_hybrid_oa_with_cc orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.indi_pub_hybrid_oa_with_cc COMPUTE STATISTICS; + create table TARGET.indi_pub_bronze_oa stored as parquet as select * from SOURCE.indi_pub_bronze_oa orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.indi_pub_bronze_oa COMPUTE STATISTICS; + create table TARGET.indi_pub_downloads stored as parquet as select * from SOURCE.indi_pub_downloads orig where exists (select 1 from TARGET.result r where r.id=orig.result_id); ---ANALYZE TABLE TARGET.indi_pub_downloads COMPUTE STATISTICS; + create table TARGET.indi_pub_downloads_datasource stored as parquet as select * from SOURCE.indi_pub_downloads_datasource orig where exists (select 1 from TARGET.result r where r.id=orig.result_id); ---ANALYZE TABLE TARGET.indi_pub_downloads_datasource COMPUTE STATISTICS; + create table TARGET.indi_pub_downloads_year stored as parquet as select * from SOURCE.indi_pub_downloads_year orig where exists (select 1 from TARGET.result r where r.id=orig.result_id); ---ANALYZE TABLE TARGET.indi_pub_downloads_year COMPUTE STATISTICS; + create table TARGET.indi_pub_downloads_datasource_year stored as parquet as select * from SOURCE.indi_pub_downloads_datasource_year orig where exists (select 1 from TARGET.result r where r.id=orig.result_id); ---ANALYZE TABLE TARGET.indi_pub_downloads_datasource_year COMPUTE STATISTICS; + ---- Sprint 7 ---- create table TARGET.indi_pub_gold_oa stored as parquet as select * from SOURCE.indi_pub_gold_oa orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.indi_pub_gold_oa COMPUTE STATISTICS; + create table TARGET.indi_pub_hybrid stored as parquet as select * from SOURCE.indi_pub_hybrid orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.indi_pub_hybrid COMPUTE STATISTICS; + create view TARGET.indi_org_fairness as select * from SOURCE.indi_org_fairness; create view TARGET.indi_org_fairness_pub_pr as select * from SOURCE.indi_org_fairness_pub_pr; create view TARGET.indi_org_fairness_pub_year as select * from SOURCE.indi_org_fairness_pub_year; @@ -262,17 +159,17 @@ create view TARGET.indi_org_findable as select * from SOURCE.indi_org_findable; create view TARGET.indi_org_openess as select * from SOURCE.indi_org_openess; create view TARGET.indi_org_openess_year as select * from SOURCE.indi_org_openess_year; create table TARGET.indi_pub_has_preprint stored as parquet as select * from SOURCE.indi_pub_has_preprint orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.indi_pub_has_preprint COMPUTE STATISTICS; + create table TARGET.indi_pub_in_subscribed stored as parquet as select * from SOURCE.indi_pub_in_subscribed orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.indi_pub_in_subscribed COMPUTE STATISTICS; + create table TARGET.indi_result_with_pid stored as parquet as select * from SOURCE.indi_result_with_pid orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.indi_result_with_pid COMPUTE STATISTICS; + create table TARGET.indi_impact_measures stored as parquet as select * from SOURCE.indi_impact_measures orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.indi_impact_measures COMPUTE STATISTICS; + create table TARGET.indi_pub_interdisciplinarity stored as parquet as select * from SOURCE.indi_pub_interdisciplinarity orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.indi_pub_interdisciplinarity COMPUTE STATISTICS; + create table TARGET.result_apc_affiliations stored as parquet as select * from SOURCE.result_apc_affiliations orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.result_apc_affiliations COMPUTE STATISTICS; + create table TARGET.indi_is_project_result_after stored as parquet as select * from SOURCE.indi_is_project_result_after orig where exists (select 1 from TARGET.result r where r.id=orig.result_id); create table TARGET.indi_is_funder_plan_s stored as parquet as select * from SOURCE.indi_is_funder_plan_s orig where exists (select 1 from TARGET.result r where r.id=orig.id); create view TARGET.indi_funder_fairness as select * from SOURCE.indi_funder_fairness; diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDBAll.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDBAll.sql index df4795e3e..2b6a68514 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDBAll.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDBAll.sql @@ -81,8 +81,6 @@ create table TARGET.result stored as parquet as 'openorgs____::8839b55dae0c84d56fd533f52d5d483a' -- Leibniz Institute of Ecological Urban and Regional Development ) )) foo; ---ANALYZE TABLE TARGET.result COMPUTE STATISTICS; - create view if not exists TARGET.category as select * from SOURCE.category; create view if not exists TARGET.concept as select * from SOURCE.concept; create view if not exists TARGET.context as select * from SOURCE.context; @@ -97,86 +95,63 @@ create view if not exists TARGET.doctoratestudents as select * from SOURCE.docto create view if not exists TARGET.totalresearchers as select * from SOURCE.totalresearchers; create view if not exists TARGET.totalresearchersft as select * from SOURCE.totalresearchersft; create view if not exists TARGET.hrrst as select * from SOURCE.hrrst; ---create view if not exists TARGET.graduatedoctorates as select * from SOURCE.graduatedoctorates; +create view if not exists TARGET.graduatedoctorates as select * from SOURCE.graduatedoctorates; create table TARGET.result_citations stored as parquet as select * from SOURCE.result_citations orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.result_citations COMPUTE STATISTICS; create table TARGET.result_references_oc stored as parquet as select * from SOURCE.result_references_oc orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.result_references_oc COMPUTE STATISTICS; create table TARGET.result_citations_oc stored as parquet as select * from SOURCE.result_citations_oc orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.result_citations_oc COMPUTE STATISTICS; create table TARGET.result_classifications stored as parquet as select * from SOURCE.result_classifications orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.result_classifications COMPUTE STATISTICS; create table TARGET.result_apc stored as parquet as select * from SOURCE.result_apc orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.result_apc COMPUTE STATISTICS; create table TARGET.result_concepts stored as parquet as select * from SOURCE.result_concepts orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.result_concepts COMPUTE STATISTICS; create table TARGET.result_datasources stored as parquet as select * from SOURCE.result_datasources orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.result_datasources COMPUTE STATISTICS; create table TARGET.result_fundercount stored as parquet as select * from SOURCE.result_fundercount orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.result_fundercount COMPUTE STATISTICS; create table TARGET.result_gold stored as parquet as select * from SOURCE.result_gold orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.result_gold COMPUTE STATISTICS; create table TARGET.result_greenoa stored as parquet as select * from SOURCE.result_greenoa orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.result_greenoa COMPUTE STATISTICS; create table TARGET.result_languages stored as parquet as select * from SOURCE.result_languages orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.result_languages COMPUTE STATISTICS; create table TARGET.result_licenses stored as parquet as select * from SOURCE.result_licenses orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.result_licenses COMPUTE STATISTICS; create table TARGET.licenses_normalized STORED AS PARQUET as select * from SOURCE.licenses_normalized; ---ANALYZE TABLE TARGET.licenses_normalized COMPUTE STATISTICS; create table TARGET.result_oids stored as parquet as select * from SOURCE.result_oids orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.result_oids COMPUTE STATISTICS; create table TARGET.result_organization stored as parquet as select * from SOURCE.result_organization orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.result_organization COMPUTE STATISTICS; create table TARGET.result_peerreviewed stored as parquet as select * from SOURCE.result_peerreviewed orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.result_peerreviewed COMPUTE STATISTICS; create table TARGET.result_pids stored as parquet as select * from SOURCE.result_pids orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.result_pids COMPUTE STATISTICS; create table TARGET.result_projectcount stored as parquet as select * from SOURCE.result_projectcount orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.result_projectcount COMPUTE STATISTICS; create table TARGET.result_projects stored as parquet as select * from SOURCE.result_projects orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.result_projects COMPUTE STATISTICS; create table TARGET.result_refereed stored as parquet as select * from SOURCE.result_refereed orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.result_refereed COMPUTE STATISTICS; create table TARGET.result_sources stored as parquet as select * from SOURCE.result_sources orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.result_sources COMPUTE STATISTICS; create table TARGET.result_topics stored as parquet as select * from SOURCE.result_topics orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.result_topics COMPUTE STATISTICS; create table TARGET.result_fos stored as parquet as select * from SOURCE.result_fos orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.result_fos COMPUTE STATISTICS; create table TARGET.result_accessroute stored as parquet as select * from SOURCE.result_accessroute orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.result_accessroute COMPUTE STATISTICS; + +create table TARGET.result_orcid stored as parquet as select * from SOURCE.result_orcid orig where exists (select 1 from TARGET.result r where r.id=orig.id); create view TARGET.foo1 as select * from SOURCE.result_result rr where rr.source in (select id from TARGET.result); create view TARGET.foo2 as select * from SOURCE.result_result rr where rr.target in (select id from TARGET.result); create table TARGET.result_result STORED AS PARQUET as select distinct * from (select * from TARGET.foo1 union all select * from TARGET.foo2) foufou; drop view TARGET.foo1; drop view TARGET.foo2; ---ANALYZE TABLE TARGET.result_result COMPUTE STATISTICS; -- datasources create view if not exists TARGET.datasource as select * from SOURCE.datasource; @@ -185,7 +160,6 @@ create view if not exists TARGET.datasource_organizations as select * from SOURC create view if not exists TARGET.datasource_sources as select * from SOURCE.datasource_sources; create table TARGET.datasource_results stored as parquet as select id as result, datasource as id from TARGET.result_datasources; ---ANALYZE TABLE TARGET.datasource_results COMPUTE STATISTICS; -- organizations create view if not exists TARGET.organization as select * from SOURCE.organization; @@ -203,28 +177,26 @@ create view if not exists TARGET.project_classification as select * from SOURCE. create view if not exists TARGET.project_organization_contribution as select * from SOURCE.project_organization_contribution; create table TARGET.project_results stored as parquet as select id as result, project as id from TARGET.result_projects; ---ANALYZE TABLE TARGET.project_results COMPUTE STATISTICS; -- indicators -- Sprint 1 ---- create table TARGET.indi_pub_green_oa stored as parquet as select * from SOURCE.indi_pub_green_oa orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.indi_pub_green_oa COMPUTE STATISTICS; + create table TARGET.indi_pub_grey_lit stored as parquet as select * from SOURCE.indi_pub_grey_lit orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.indi_pub_grey_lit COMPUTE STATISTICS; + create table TARGET.indi_pub_doi_from_crossref stored as parquet as select * from SOURCE.indi_pub_doi_from_crossref orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.indi_pub_doi_from_crossref COMPUTE STATISTICS; + -- Sprint 2 ---- create table TARGET.indi_result_has_cc_licence stored as parquet as select * from SOURCE.indi_result_has_cc_licence orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.indi_result_has_cc_licence COMPUTE STATISTICS; + create table TARGET.indi_result_has_cc_licence_url stored as parquet as select * from SOURCE.indi_result_has_cc_licence_url orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.indi_result_has_cc_licence_url COMPUTE STATISTICS; + create table TARGET.indi_pub_has_abstract stored as parquet as select * from SOURCE.indi_pub_has_abstract orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.indi_pub_has_abstract COMPUTE STATISTICS; + create table TARGET.indi_result_with_orcid stored as parquet as select * from SOURCE.indi_result_with_orcid orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.indi_result_with_orcid COMPUTE STATISTICS; + ---- Sprint 3 ---- create table TARGET.indi_funded_result_with_fundref stored as parquet as select * from SOURCE.indi_funded_result_with_fundref orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.indi_funded_result_with_fundref COMPUTE STATISTICS; create view TARGET.indi_result_org_collab as select * from SOURCE.indi_result_org_collab; create view TARGET.indi_result_org_country_collab as select * from SOURCE.indi_result_org_country_collab; create view TARGET.indi_project_collab_org as select * from SOURCE.indi_project_collab_org; @@ -233,32 +205,29 @@ create view TARGET.indi_funder_country_collab as select * from SOURCE.indi_funde create view TARGET.indi_result_country_collab as select * from SOURCE.indi_result_country_collab; ---- Sprint 4 ---- create table TARGET.indi_pub_diamond stored as parquet as select * from SOURCE.indi_pub_diamond orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.indi_pub_diamond COMPUTE STATISTICS; + create table TARGET.indi_pub_in_transformative stored as parquet as select * from SOURCE.indi_pub_in_transformative orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.indi_pub_in_transformative COMPUTE STATISTICS; + create table TARGET.indi_pub_closed_other_open stored as parquet as select * from SOURCE.indi_pub_closed_other_open orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.indi_pub_closed_other_open COMPUTE STATISTICS; ---- Sprint 5 ---- create table TARGET.indi_result_no_of_copies stored as parquet as select * from SOURCE.indi_result_no_of_copies orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.indi_result_no_of_copies COMPUTE STATISTICS; ---- Sprint 6 ---- create table TARGET.indi_pub_hybrid_oa_with_cc stored as parquet as select * from SOURCE.indi_pub_hybrid_oa_with_cc orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.indi_pub_hybrid_oa_with_cc COMPUTE STATISTICS; + create table TARGET.indi_pub_bronze_oa stored as parquet as select * from SOURCE.indi_pub_bronze_oa orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.indi_pub_bronze_oa COMPUTE STATISTICS; + create table TARGET.indi_pub_downloads stored as parquet as select * from SOURCE.indi_pub_downloads orig where exists (select 1 from TARGET.result r where r.id=orig.result_id); ---ANALYZE TABLE TARGET.indi_pub_downloads COMPUTE STATISTICS; + create table TARGET.indi_pub_downloads_datasource stored as parquet as select * from SOURCE.indi_pub_downloads_datasource orig where exists (select 1 from TARGET.result r where r.id=orig.result_id); ---ANALYZE TABLE TARGET.indi_pub_downloads_datasource COMPUTE STATISTICS; + create table TARGET.indi_pub_downloads_year stored as parquet as select * from SOURCE.indi_pub_downloads_year orig where exists (select 1 from TARGET.result r where r.id=orig.result_id); ---ANALYZE TABLE TARGET.indi_pub_downloads_year COMPUTE STATISTICS; + create table TARGET.indi_pub_downloads_datasource_year stored as parquet as select * from SOURCE.indi_pub_downloads_datasource_year orig where exists (select 1 from TARGET.result r where r.id=orig.result_id); ---ANALYZE TABLE TARGET.indi_pub_downloads_datasource_year COMPUTE STATISTICS; + ---- Sprint 7 ---- create table TARGET.indi_pub_gold_oa stored as parquet as select * from SOURCE.indi_pub_gold_oa orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.indi_pub_gold_oa COMPUTE STATISTICS; + create table TARGET.indi_pub_hybrid stored as parquet as select * from SOURCE.indi_pub_hybrid orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.indi_pub_hybrid COMPUTE STATISTICS; create view TARGET.indi_org_fairness as select * from SOURCE.indi_org_fairness; create view TARGET.indi_org_fairness_pub_pr as select * from SOURCE.indi_org_fairness_pub_pr; create view TARGET.indi_org_fairness_pub_year as select * from SOURCE.indi_org_fairness_pub_year; @@ -269,19 +238,19 @@ create view TARGET.indi_org_findable as select * from SOURCE.indi_org_findable; create view TARGET.indi_org_openess as select * from SOURCE.indi_org_openess; create view TARGET.indi_org_openess_year as select * from SOURCE.indi_org_openess_year; create table TARGET.indi_pub_has_preprint stored as parquet as select * from SOURCE.indi_pub_has_preprint orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.indi_pub_has_preprint COMPUTE STATISTICS; + create table TARGET.indi_pub_in_subscribed stored as parquet as select * from SOURCE.indi_pub_in_subscribed orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.indi_pub_in_subscribed COMPUTE STATISTICS; + create table TARGET.indi_result_with_pid stored as parquet as select * from SOURCE.indi_result_with_pid orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.indi_result_with_pid COMPUTE STATISTICS; + create table TARGET.indi_impact_measures stored as parquet as select * from SOURCE.indi_impact_measures orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.indi_impact_measures COMPUTE STATISTICS; + create table TARGET.indi_pub_interdisciplinarity stored as parquet as select * from SOURCE.indi_pub_interdisciplinarity orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.indi_pub_interdisciplinarity COMPUTE STATISTICS; + create table TARGET.result_apc_affiliations stored as parquet as select * from SOURCE.result_apc_affiliations orig where exists (select 1 from TARGET.result r where r.id=orig.id); ---ANALYZE TABLE TARGET.result_apc_affiliations COMPUTE STATISTICS; -create table TARGET.indi_is_project_result_after stored as parquet as select * from SOURCE.indi_is_project_result_after orig where exists (select 1 from TARGET.result r where r.id=orig.id); -create table TARGET.indi_is_funder_plan_s stored as parquet as select * from SOURCE.indi_is_funder_plan_s orig where exists (select 1 from TARGET.result r where r.id=orig.id); + +create table TARGET.indi_is_project_result_after stored as parquet as select * from SOURCE.indi_is_project_result_after orig where exists (select 1 from TARGET.result r where r.id=orig.result_id); +create view TARGET.indi_is_funder_plan_s as select * from SOURCE.indi_is_funder_plan_s; create view TARGET.indi_funder_fairness as select * from SOURCE.indi_funder_fairness; create view TARGET.indi_funder_openess as select * from SOURCE.indi_funder_openess; create view TARGET.indi_funder_findable as select * from SOURCE.indi_funder_findable; diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB_RIs.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB_RIs.sql index 9a9407c2d..4469782f0 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB_RIs.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB_RIs.sql @@ -11,5 +11,4 @@ create table TARGET.result stored as parquet as join SOURCE.context cont on cont.id=cat.context -- join SOURCE.result where rc.id=r.id and conc.category like CONTEXT) -) foo; ---ANALYZE TABLE TARGET.result COMPUTE STATISTICS; \ No newline at end of file +) foo; \ No newline at end of file diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB_RIs_tail.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB_RIs_tail.sql index bad18efde..a28206d56 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB_RIs_tail.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB_RIs_tail.sql @@ -11,5 +11,4 @@ create table TARGET.result stored as parquet as join SOURCE.context cont on cont.id=cat.context -- join SOURCE.result where rc.id=r.id and conc.category not in (CONTEXTS)) -) foo; ---ANALYZE TABLE TARGET.result COMPUTE STATISTICS; \ No newline at end of file +) foo; \ No newline at end of file diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB_funded.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB_funded.sql index b8d3c0242..ce6475c22 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB_funded.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB_funded.sql @@ -4,6 +4,4 @@ create database if not exists TARGET; create table TARGET.result stored as parquet as select distinct * from ( select * from SOURCE.result r where exists (select 1 from SOURCE.result_projects rp join SOURCE.project p on rp.project=p.id where rp.id=r.id) - ) foo; - ---ANALYZE TABLE TARGET.result COMPUTE STATISTICS; \ No newline at end of file + ) foo; \ No newline at end of file diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB_institutions.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB_institutions.sql index 7bfba92a8..d2f08b391 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB_institutions.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB_institutions.sql @@ -59,6 +59,4 @@ create table TARGET.result stored as parquet as 'openorgs____::5d55fb216b14691cf68218daf5d78cd9', -- Munster Technological University 'openorgs____::0fccc7640f0cb44d5cd1b06b312a06b9', -- Cardiff University 'openorgs____::8839b55dae0c84d56fd533f52d5d483a' -- Leibniz Institute of Ecological Urban and Regional Development - ))) foo; - ---ANALYZE TABLE TARGET.result COMPUTE STATISTICS; \ No newline at end of file + ))) foo; \ No newline at end of file diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step21-createObservatoryDB.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step21-createObservatoryDB.sql index b7e421813..2e6f0711c 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step21-createObservatoryDB.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step21-createObservatoryDB.sql @@ -8,7 +8,6 @@ from ${stats_db_name}.result r group by rl.id ) rln on rln.id=r.id; ---ANALYZE TABLE ${observatory_db_name}.result_cc_licence COMPUTE STATISTICS; create table ${observatory_db_name}.result_affiliated_country stored as parquet as select @@ -39,7 +38,6 @@ group by r.green, r.gold, case when rl.type is not null then true else false end case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract, cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, c.code, c.name; ---ANALYZE TABLE ${observatory_db_name}.result_affiliated_country COMPUTE STATISTICS; create table ${observatory_db_name}.result_affiliated_year stored as parquet as select @@ -70,7 +68,6 @@ group by r.green, r.gold, case when rl.type is not null then true else false end case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract, cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, r.year; ---ANALYZE TABLE ${observatory_db_name}.result_affiliated_year COMPUTE STATISTICS; create table ${observatory_db_name}.result_affiliated_year_country stored as parquet as select @@ -101,7 +98,6 @@ group by r.green, r.gold, case when rl.type is not null then true else false end case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract, cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, r.year, c.code, c.name; ---ANALYZE TABLE ${observatory_db_name}.result_affiliated_year_country COMPUTE STATISTICS; create table ${observatory_db_name}.result_affiliated_datasource stored as parquet as select @@ -134,8 +130,6 @@ group by r.green, r.gold, case when rl.type is not null then true else false end case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract, cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, d.name; ---ANALYZE TABLE ${observatory_db_name}.result_affiliated_datasource COMPUTE STATISTICS; - create table ${observatory_db_name}.result_affiliated_datasource_country stored as parquet as select count(distinct r.id) as total, @@ -167,8 +161,6 @@ group by r.green, r.gold, case when rl.type is not null then true else false end case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract, cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, d.name, c.code, c.name; ---ANALYZE TABLE ${observatory_db_name}.result_affiliated_datasource_country COMPUTE STATISTICS; - create table ${observatory_db_name}.result_affiliated_organization stored as parquet as select count(distinct r.id) as total, @@ -198,8 +190,6 @@ group by r.green, r.gold, case when rl.type is not null then true else false end case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract, cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, o.name; ---ANALYZE TABLE ${observatory_db_name}.result_affiliated_organization COMPUTE STATISTICS; - create table ${observatory_db_name}.result_affiliated_organization_country stored as parquet as select count(distinct r.id) as total, @@ -229,8 +219,6 @@ group by r.green, r.gold, case when rl.type is not null then true else false end case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract, cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, o.name, c.code, c.name; ---ANALYZE TABLE ${observatory_db_name}.result_affiliated_organization_country COMPUTE STATISTICS; - create table ${observatory_db_name}.result_affiliated_funder stored as parquet as select count(distinct r.id) as total, @@ -262,8 +250,6 @@ group by r.green, r.gold, case when rl.type is not null then true else false end case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract, cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, p.funder; ---ANALYZE TABLE ${observatory_db_name}.result_affiliated_funder COMPUTE STATISTICS; - create table ${observatory_db_name}.result_affiliated_funder_country stored as parquet as select count(distinct r.id) as total, @@ -295,8 +281,6 @@ group by r.green, r.gold, case when rl.type is not null then true else false end case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract, cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, p.funder, c.code, c.name; ---ANALYZE TABLE ${observatory_db_name}.result_affiliated_funder_country COMPUTE STATISTICS; - create table ${observatory_db_name}.result_deposited_country stored as parquet as select count(distinct r.id) as total, @@ -328,8 +312,6 @@ group by r.green, r.gold, case when rl.type is not null then true else false end case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract, cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, c.code, c.name; ---ANALYZE TABLE ${observatory_db_name}.result_deposited_country COMPUTE STATISTICS; - create table ${observatory_db_name}.result_deposited_year stored as parquet as select count(distinct r.id) as total, @@ -361,7 +343,6 @@ group by r.green, r.gold, case when rl.type is not null then true else false end case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract, cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, r.year; ---ANALYZE TABLE ${observatory_db_name}.result_deposited_year COMPUTE STATISTICS; create table ${observatory_db_name}.result_deposited_year_country stored as parquet as select @@ -394,8 +375,6 @@ group by r.green, r.gold, case when rl.type is not null then true else false end case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract, cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, r.year, c.code, c.name; ---ANALYZE TABLE ${observatory_db_name}.result_deposited_year_country COMPUTE STATISTICS; - create table ${observatory_db_name}.result_deposited_datasource stored as parquet as select count(distinct r.id) as total, @@ -427,8 +406,6 @@ group by r.green, r.gold, case when rl.type is not null then true else false end case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract, cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, d.name; ---ANALYZE TABLE ${observatory_db_name}.result_deposited_datasource COMPUTE STATISTICS; - create table ${observatory_db_name}.result_deposited_datasource_country stored as parquet as select count(distinct r.id) as total, @@ -460,8 +437,6 @@ group by r.green, r.gold, case when rl.type is not null then true else false end case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract, cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, d.name, c.code, c.name; ---ANALYZE TABLE ${observatory_db_name}.result_deposited_datasource_country COMPUTE STATISTICS; - create table ${observatory_db_name}.result_deposited_organization stored as parquet as select count(distinct r.id) as total, @@ -493,8 +468,6 @@ group by r.green, r.gold, case when rl.type is not null then true else false end case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract, cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, o.name; ---ANALYZE TABLE ${observatory_db_name}.result_deposited_organization COMPUTE STATISTICS; - create table ${observatory_db_name}.result_deposited_organization_country stored as parquet as select count(distinct r.id) as total, @@ -526,8 +499,6 @@ group by r.green, r.gold, case when rl.type is not null then true else false end case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract, cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, o.name, c.code, c.name; ---ANALYZE TABLE ${observatory_db_name}.result_deposited_organization_country COMPUTE STATISTICS; - create table ${observatory_db_name}.result_deposited_funder stored as parquet as select count(distinct r.id) as total, @@ -561,8 +532,6 @@ group by r.green, r.gold, case when rl.type is not null then true else false end case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract, cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, p.funder; ---ANALYZE TABLE ${observatory_db_name}.result_deposited_funder COMPUTE STATISTICS; - create table ${observatory_db_name}.result_deposited_funder_country stored as parquet as select count(distinct r.id) as total, @@ -595,5 +564,3 @@ from ${stats_db_name}.result r group by r.green, r.gold, case when rl.type is not null then true else false end, case when pids.pid is not null then true else false end, case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract, cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, p.funder, c.code, c.name; - ---ANALYZE TABLE ${observatory_db_name}.result_deposited_funder_country COMPUTE STATISTICS; \ No newline at end of file diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step7.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step7.sql index 1514ecf52..eb16a161e 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step7.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step7.sql @@ -123,6 +123,8 @@ UNION ALL SELECT * FROM ${stats_db_name}.otherresearchproduct_topics; +DROP TABLE IF EXISTS ${stats_db_name}.result_fos purge; + create table ${stats_db_name}.result_fos stored as parquet as with lvl1 as (select id, topic from ${stats_db_name}.result_topics where topic like '__ %' and type='Fields of Science and Technology classification'), @@ -133,6 +135,8 @@ from lvl1 join lvl2 on lvl1.id=lvl2.id and substr(lvl2.topic, 1, 2)=substr(lvl1.topic, 1, 2) join lvl3 on lvl3.id=lvl1.id and substr(lvl3.topic, 1, 4)=substr(lvl2.topic, 1, 4); +DROP TABLE IF EXISTS ${stats_db_name}.result_organization purge; + CREATE TABLE ${stats_db_name}.result_organization STORED AS PARQUET AS SELECT substr(r.target, 4) AS id, substr(r.source, 4) AS organization FROM ${openaire_db_name}.relation r @@ -140,6 +144,8 @@ WHERE r.reltype = 'resultOrganization' and r.target like '50|%' and r.datainfo.deletedbyinference = false and r.datainfo.invisible=false; +DROP TABLE IF EXISTS ${stats_db_name}.result_projects purge; + CREATE TABLE ${stats_db_name}.result_projects STORED AS PARQUET AS select pr.result AS id, pr.id AS project, datediff(p.enddate, p.startdate) AS daysfromend, pr.provenance as provenance FROM ${stats_db_name}.result r diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step8.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step8.sql index 248716b36..07204db0c 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step8.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step8.sql @@ -5,6 +5,8 @@ -- Datasource table/view and Datasource related tables/views ------------------------------------------------------------ ------------------------------------------------------------ +DROP TABLE IF EXISTS ${stats_db_name}.datasource_tmp purge; + CREATE TABLE ${stats_db_name}.datasource_tmp ( `id` string, @@ -48,6 +50,7 @@ WHERE d1.datainfo.deletedbyinference = FALSE and d1.datainfo.invisible=false; -- Updating temporary table with everything that is not based on results -> This is done with the following "dual" table. -- Creating a temporary dual table that will be removed after the following insert + CREATE TABLE ${stats_db_name}.dual ( dummy CHAR(1)); INSERT INTO ${stats_db_name}.dual VALUES ('X'); @@ -74,16 +77,22 @@ DROP TABLE ${stats_db_name}.dual; UPDATE ${stats_db_name}.datasource_tmp SET name='Other' WHERE name = 'Unknown Repository'; UPDATE ${stats_db_name}.datasource_tmp SET yearofvalidation=null WHERE yearofvalidation = '-1'; +DROP TABLE IF EXISTS ${stats_db_name}.datasource_languages purge; + CREATE TABLE ${stats_db_name}.datasource_languages STORED AS PARQUET AS SELECT substr(d.id, 4) AS id, langs.languages AS language FROM ${openaire_db_name}.datasource d LATERAL VIEW explode(d.odlanguages.value) langs AS languages where d.datainfo.deletedbyinference=false and d.datainfo.invisible=false; +DROP TABLE IF EXISTS ${stats_db_name}.datasource_oids purge; + CREATE TABLE ${stats_db_name}.datasource_oids STORED AS PARQUET AS SELECT substr(d.id, 4) AS id, oids.ids AS oid FROM ${openaire_db_name}.datasource d LATERAL VIEW explode(d.originalid) oids AS ids where d.datainfo.deletedbyinference=false and d.datainfo.invisible=false; +DROP TABLE IF EXISTS ${stats_db_name}.datasource_organizations purge; + CREATE TABLE ${stats_db_name}.datasource_organizations STORED AS PARQUET AS SELECT substr(r.target, 4) AS id, substr(r.source, 4) AS organization FROM ${openaire_db_name}.relation r @@ -91,6 +100,8 @@ WHERE r.reltype = 'datasourceOrganization' and r.datainfo.deletedbyinference = f -- datasource sources: -- where the datasource info have been collected from. +DROP TABLE IF EXISTS ${stats_db_name}.datasource_sources purge; + create table if not exists ${stats_db_name}.datasource_sources STORED AS PARQUET AS select substr(d.id, 4) as id, substr(cf.key, 4) as datasource from ${openaire_db_name}.datasource d lateral view explode(d.collectedfrom) cfrom as cf diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step9.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step9.sql index 3da36dfe5..19d301e27 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step9.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step9.sql @@ -3,6 +3,8 @@ -- Organization table/view and Organization related tables/views ---------------------------------------------------------------- ---------------------------------------------------------------- +DROP TABLE IF EXISTS ${stats_db_name}.organization purge; + CREATE TABLE IF NOT EXISTS ${stats_db_name}.organization STORED AS PARQUET AS SELECT substr(o.id, 4) as id, o.legalname.value as name, diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/workflow.xml b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/workflow.xml index aa991730b..cbf97944d 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/workflow.xml @@ -114,6 +114,7 @@ ${wf:conf('resumeFrom') eq 'step21-createObservatoryDB'} ${wf:conf('resumeFrom') eq 'step21-createObservatoryDB-post'} ${wf:conf('resumeFrom') eq 'step22-copyDataToImpalaCluster'} + ${wf:conf('resumeFrom') eq 'step22a-createPDFsAggregated'} ${wf:conf('resumeFrom') eq 'step23-finalizeImpalaCluster'} ${wf:conf('resumeFrom') eq 'Step24-updateCache'} @@ -448,6 +449,22 @@ ${hadoop_user_name} copyDataToImpalaCluster.sh + + + + + + + ${jobTracker} + ${nameNode} + createPDFsAggregated.sh + + + ${stats_db_name} + ${monitor_db_name} + ${hadoop_user_name} + createPDFsAggregated.sh + From 11a1207f9c8476db4fc926f707915c3209720106 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Wed, 22 Nov 2023 12:22:14 +0100 Subject: [PATCH 357/449] [graph cleaning] applying coar based vocabularies in bulk --- .../dhp/oa/merge/GroupEntitiesSparkJob.java | 40 +++++- .../oaf/utils/GraphCleaningFunctions.java | 95 +++++++++++++ .../dhp/schema/oaf/utils/OafMapperUtils.java | 21 ++- .../group_graph_entities_parameters.json | 6 + .../raw/AbstractMdRecordToOafMapper.java | 63 +-------- .../group/GroupEntitiesSparkJobTest.java | 131 ++++++++++++++++-- .../raw/GenerateEntitiesApplicationTest.java | 5 +- .../dnetlib/dhp/oa/graph/raw/MappersTest.java | 28 ++-- .../dhp/oa/graph/group/dataset/dataset.json | 6 +- .../graph/group/publication/publication.json | 6 +- pom.xml | 2 +- 11 files changed, 294 insertions(+), 109 deletions(-) diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/GroupEntitiesSparkJob.java b/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/GroupEntitiesSparkJob.java index f5c8eea19..0225a5063 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/GroupEntitiesSparkJob.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/GroupEntitiesSparkJob.java @@ -21,10 +21,15 @@ import org.slf4j.LoggerFactory; import eu.dnetlib.dhp.application.ArgumentApplicationParser; import eu.dnetlib.dhp.common.HdfsSupport; +import eu.dnetlib.dhp.common.vocabulary.VocabularyGroup; import eu.dnetlib.dhp.schema.common.EntityType; import eu.dnetlib.dhp.schema.common.ModelSupport; import eu.dnetlib.dhp.schema.oaf.OafEntity; +import eu.dnetlib.dhp.schema.oaf.utils.GraphCleaningFunctions; import eu.dnetlib.dhp.schema.oaf.utils.OafMapperUtils; +import eu.dnetlib.dhp.utils.ISLookupClientFactory; +import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpException; +import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpService; import scala.Tuple2; /** @@ -35,6 +40,12 @@ public class GroupEntitiesSparkJob { private static final Encoder OAFENTITY_KRYO_ENC = Encoders.kryo(OafEntity.class); + private ArgumentApplicationParser parser; + + public GroupEntitiesSparkJob(ArgumentApplicationParser parser) { + this.parser = parser; + } + public static void main(String[] args) throws Exception { String jsonConfiguration = IOUtils @@ -51,6 +62,17 @@ public class GroupEntitiesSparkJob { .orElse(Boolean.TRUE); log.info("isSparkSessionManaged: {}", isSparkSessionManaged); + final String isLookupUrl = parser.get("isLookupUrl"); + log.info("isLookupUrl: {}", isLookupUrl); + + final ISLookUpService isLookupService = ISLookupClientFactory.getLookUpService(isLookupUrl); + + new GroupEntitiesSparkJob(parser).run(isSparkSessionManaged, isLookupService); + } + + public void run(Boolean isSparkSessionManaged, ISLookUpService isLookUpService) + throws ISLookUpException { + String graphInputPath = parser.get("graphInputPath"); log.info("graphInputPath: {}", graphInputPath); @@ -60,19 +82,21 @@ public class GroupEntitiesSparkJob { String outputPath = parser.get("outputPath"); log.info("outputPath: {}", outputPath); - boolean filterInvisible = Boolean.valueOf(parser.get("filterInvisible")); + boolean filterInvisible = Boolean.parseBoolean(parser.get("filterInvisible")); log.info("filterInvisible: {}", filterInvisible); SparkConf conf = new SparkConf(); conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer"); conf.registerKryoClasses(ModelSupport.getOafModelClasses()); + final VocabularyGroup vocs = VocabularyGroup.loadVocsFromIS(isLookUpService); + runWithSparkSession( conf, isSparkSessionManaged, spark -> { HdfsSupport.remove(checkpointPath, spark.sparkContext().hadoopConfiguration()); - groupEntities(spark, graphInputPath, checkpointPath, outputPath, filterInvisible); + groupEntities(spark, graphInputPath, checkpointPath, outputPath, filterInvisible, vocs); }); } @@ -81,7 +105,7 @@ public class GroupEntitiesSparkJob { String inputPath, String checkpointPath, String outputPath, - boolean filterInvisible) { + boolean filterInvisible, VocabularyGroup vocs) { Dataset allEntities = spark.emptyDataset(OAFENTITY_KRYO_ENC); @@ -106,10 +130,14 @@ public class GroupEntitiesSparkJob { } Dataset groupedEntities = allEntities - .groupByKey((MapFunction) OafEntity::getId, Encoders.STRING()) - .reduceGroups((ReduceFunction) (b, a) -> OafMapperUtils.mergeEntities(b, a)) .map( - (MapFunction, Tuple2>) t -> new Tuple2( + (MapFunction) entity -> GraphCleaningFunctions + .applyCoarVocabularies(entity, vocs), + OAFENTITY_KRYO_ENC) + .groupByKey((MapFunction) OafEntity::getId, Encoders.STRING()) + .reduceGroups((ReduceFunction) OafMapperUtils::mergeEntities) + .map( + (MapFunction, Tuple2>) t -> new Tuple2<>( t._2().getClass().getName(), t._2()), Encoders.tuple(Encoders.STRING(), OAFENTITY_KRYO_ENC)); diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java index 324e3dd58..b23dade98 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java @@ -1,6 +1,8 @@ package eu.dnetlib.dhp.schema.oaf.utils; +import static eu.dnetlib.dhp.schema.common.ModelConstants.*; +import static eu.dnetlib.dhp.schema.common.ModelConstants.OPENAIRE_META_RESOURCE_TYPE; import static eu.dnetlib.dhp.schema.oaf.utils.OafMapperUtils.getProvenance; import java.time.LocalDate; @@ -784,4 +786,97 @@ public class GraphCleaningFunctions extends CleaningFunctions { return s; } + public static OafEntity applyCoarVocabularies(OafEntity entity, VocabularyGroup vocs) { + + if (entity instanceof Result) { + final Result result = (Result) entity; + + Optional + .ofNullable(result.getInstance()) + .ifPresent( + instances -> instances + .forEach( + instance -> { + if (Objects.isNull(instance.getInstanceTypeMapping())) { + List mapping = Lists.newArrayList(); + mapping + .add( + OafMapperUtils + .instanceTypeMapping( + instance.getInstancetype().getClassname(), + OPENAIRE_COAR_RESOURCE_TYPES_3_1)); + instance.setInstanceTypeMapping(mapping); + } + Optional optionalItm = instance + .getInstanceTypeMapping() + .stream() + .filter(GraphCleaningFunctions::originalResourceType) + .findFirst(); + if (optionalItm.isPresent()) { + InstanceTypeMapping coarItm = optionalItm.get(); + Optional + .ofNullable( + vocs + .lookupTermBySynonym( + OPENAIRE_COAR_RESOURCE_TYPES_3_1, coarItm.getOriginalType())) + .ifPresent(type -> { + coarItm.setTypeCode(type.getClassid()); + coarItm.setTypeLabel(type.getClassname()); + }); + final List mappings = Lists.newArrayList(); + if (vocs.vocabularyExists(OPENAIRE_USER_RESOURCE_TYPES)) { + Optional + .ofNullable( + vocs + .lookupTermBySynonym( + OPENAIRE_USER_RESOURCE_TYPES, coarItm.getTypeCode())) + .ifPresent( + type -> mappings + .add( + OafMapperUtils + .instanceTypeMapping(coarItm.getTypeCode(), type))); + } + if (!mappings.isEmpty()) { + instance.getInstanceTypeMapping().addAll(mappings); + } + } + })); + result.setMetaResourceType(getMetaResourceType(result.getInstance(), vocs)); + } + + return entity; + } + + private static boolean originalResourceType(InstanceTypeMapping itm) { + return StringUtils.isNotBlank(itm.getOriginalType()) && + OPENAIRE_COAR_RESOURCE_TYPES_3_1.equals(itm.getVocabularyName()) && + StringUtils.isBlank(itm.getTypeCode()) && + StringUtils.isBlank(itm.getTypeLabel()); + } + + private static Qualifier getMetaResourceType(final List instances, final VocabularyGroup vocs) { + + if (vocs.vocabularyExists(OPENAIRE_META_RESOURCE_TYPE)) { + Optional instanceTypeMapping = instances + .stream() + .flatMap( + i -> Optional.ofNullable(i.getInstanceTypeMapping()).map(Collection::stream).orElse(Stream.empty())) + .filter(t -> OPENAIRE_COAR_RESOURCE_TYPES_3_1.equals(t.getVocabularyName())) + .findFirst(); + + if (!instanceTypeMapping.isPresent()) { + return null; + } else { + final String typeCode = instanceTypeMapping.get().getTypeCode(); + return Optional + .ofNullable(vocs.lookupTermBySynonym(OPENAIRE_META_RESOURCE_TYPE, typeCode)) + .orElseThrow( + () -> new IllegalStateException("unable to find a synonym for '" + typeCode + "' in " + + OPENAIRE_META_RESOURCE_TYPE)); + } + } else { + throw new IllegalStateException("vocabulary '" + OPENAIRE_META_RESOURCE_TYPE + "' not available"); + } + } + } diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/OafMapperUtils.java b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/OafMapperUtils.java index 1c557c805..4cecd0895 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/OafMapperUtils.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/OafMapperUtils.java @@ -140,15 +140,28 @@ public class OafMapperUtils { .collect(Collectors.toList()); } - public static InstanceTypeMapping instanceTypeMapping(String originalType, Qualifier term) { + public static InstanceTypeMapping instanceTypeMapping(String originalType, String code, String label, + String vocabularyName) { final InstanceTypeMapping m = new InstanceTypeMapping(); - m.setVocabularyName(term.getSchemeid()); + m.setVocabularyName(vocabularyName); m.setOriginalType(originalType); - m.setTypeCode(term.getClassid()); - m.setTypeLabel(term.getClassname()); + m.setTypeCode(code); + m.setTypeLabel(label); return m; } + public static InstanceTypeMapping instanceTypeMapping(String originalType, Qualifier term) { + return instanceTypeMapping(originalType, term.getClassid(), term.getClassname(), term.getSchemeid()); + } + + public static InstanceTypeMapping instanceTypeMapping(String originalType) { + return instanceTypeMapping(originalType, null, null, null); + } + + public static InstanceTypeMapping instanceTypeMapping(String originalType, String vocabularyName) { + return instanceTypeMapping(originalType, null, null, vocabularyName); + } + public static Qualifier unknown(final String schemeid, final String schemename) { return qualifier(UNKNOWN, "Unknown", schemeid, schemename); } diff --git a/dhp-common/src/main/resources/eu/dnetlib/dhp/oa/merge/group_graph_entities_parameters.json b/dhp-common/src/main/resources/eu/dnetlib/dhp/oa/merge/group_graph_entities_parameters.json index 58e3ca711..512878457 100644 --- a/dhp-common/src/main/resources/eu/dnetlib/dhp/oa/merge/group_graph_entities_parameters.json +++ b/dhp-common/src/main/resources/eu/dnetlib/dhp/oa/merge/group_graph_entities_parameters.json @@ -28,5 +28,11 @@ "paramLongName": "filterInvisible", "paramDescription": "if true filters out invisible entities", "paramRequired": true + }, + { + "paramName": "isu", + "paramLongName": "isLookupUrl", + "paramDescription": "url to the ISLookup Service", + "paramRequired": true } ] \ No newline at end of file diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/AbstractMdRecordToOafMapper.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/AbstractMdRecordToOafMapper.java index 49133cedb..a71908b02 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/AbstractMdRecordToOafMapper.java +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/AbstractMdRecordToOafMapper.java @@ -125,9 +125,7 @@ public abstract class AbstractMdRecordToOafMapper { final String type = getResultType(doc, instances); - final Qualifier metaResourceType = getMetaResourceType(instances); - - return createOafs(doc, type, metaResourceType, instances, collectedFrom, entityInfo, lastUpdateTimestamp); + return createOafs(doc, type, instances, collectedFrom, entityInfo, lastUpdateTimestamp); } catch (DocumentException e) { log.error("Error with record:\n" + xml); return Lists.newArrayList(); @@ -153,30 +151,6 @@ public abstract class AbstractMdRecordToOafMapper { return type; } - protected Qualifier getMetaResourceType(final List instances) { - - if (vocs.vocabularyExists(OPENAIRE_META_RESOURCE_TYPE)) { - Optional instanceTypeMapping = instances - .stream() - .flatMap(i -> i.getInstanceTypeMapping().stream()) - .filter(t -> OPENAIRE_COAR_RESOURCE_TYPES_3_1.equals(t.getVocabularyName())) - .findFirst(); - - if (!instanceTypeMapping.isPresent()) { - return null; - } else { - final String typeCode = instanceTypeMapping.get().getTypeCode(); - return Optional - .ofNullable(vocs.lookupTermBySynonym(OPENAIRE_META_RESOURCE_TYPE, typeCode)) - .orElseThrow( - () -> new IllegalStateException("unable to find a synonym for '" + typeCode + "' in " + - OPENAIRE_META_RESOURCE_TYPE)); - } - } else { - throw new IllegalStateException("vocabulary '" + OPENAIRE_META_RESOURCE_TYPE + "' not available"); - } - } - private KeyValue getProvenanceDatasource(final Document doc, final String xpathId, final String xpathName) { final String dsId = doc.valueOf(xpathId); final String dsName = doc.valueOf(xpathName); @@ -191,14 +165,13 @@ public abstract class AbstractMdRecordToOafMapper { protected List createOafs( final Document doc, final String type, - final Qualifier metaResourceType, final List instances, final KeyValue collectedFrom, final DataInfo info, final long lastUpdateTimestamp) { final OafEntity entity = createEntity( - doc, type, metaResourceType, instances, collectedFrom, info, lastUpdateTimestamp); + doc, type, instances, collectedFrom, info, lastUpdateTimestamp); final Set originalId = Sets.newHashSet(entity.getOriginalId()); originalId.add(entity.getId()); @@ -231,7 +204,6 @@ public abstract class AbstractMdRecordToOafMapper { private OafEntity createEntity(final Document doc, final String type, - final Qualifier metaResourceType, final List instances, final KeyValue collectedFrom, final DataInfo info, @@ -239,12 +211,12 @@ public abstract class AbstractMdRecordToOafMapper { switch (type.toLowerCase()) { case "publication": final Publication p = new Publication(); - populateResultFields(p, metaResourceType, doc, instances, collectedFrom, info, lastUpdateTimestamp); + populateResultFields(p, doc, instances, collectedFrom, info, lastUpdateTimestamp); p.setJournal(prepareJournal(doc, info)); return p; case "dataset": final Dataset d = new Dataset(); - populateResultFields(d, metaResourceType, doc, instances, collectedFrom, info, lastUpdateTimestamp); + populateResultFields(d, doc, instances, collectedFrom, info, lastUpdateTimestamp); d.setStoragedate(prepareDatasetStorageDate(doc, info)); d.setDevice(prepareDatasetDevice(doc, info)); d.setSize(prepareDatasetSize(doc, info)); @@ -255,7 +227,7 @@ public abstract class AbstractMdRecordToOafMapper { return d; case "software": final Software s = new Software(); - populateResultFields(s, metaResourceType, doc, instances, collectedFrom, info, lastUpdateTimestamp); + populateResultFields(s, doc, instances, collectedFrom, info, lastUpdateTimestamp); s.setDocumentationUrl(prepareSoftwareDocumentationUrls(doc, info)); s.setLicense(prepareSoftwareLicenses(doc, info)); s.setCodeRepositoryUrl(prepareSoftwareCodeRepositoryUrl(doc, info)); @@ -265,7 +237,7 @@ public abstract class AbstractMdRecordToOafMapper { case "otherresearchproducts": default: final OtherResearchProduct o = new OtherResearchProduct(); - populateResultFields(o, metaResourceType, doc, instances, collectedFrom, info, lastUpdateTimestamp); + populateResultFields(o, doc, instances, collectedFrom, info, lastUpdateTimestamp); o.setContactperson(prepareOtherResearchProductContactPersons(doc, info)); o.setContactgroup(prepareOtherResearchProductContactGroups(doc, info)); o.setTool(prepareOtherResearchProductTools(doc, info)); @@ -402,13 +374,11 @@ public abstract class AbstractMdRecordToOafMapper { private void populateResultFields( final Result r, - final Qualifier metaResourceType, final Document doc, final List instances, final KeyValue collectedFrom, final DataInfo info, final long lastUpdateTimestamp) { - r.setMetaResourceType(metaResourceType); r.setDataInfo(info); r.setLastupdatetimestamp(lastUpdateTimestamp); r.setId(createOpenaireId(50, doc.valueOf("//dri:objIdentifier"), false)); @@ -555,26 +525,7 @@ public abstract class AbstractMdRecordToOafMapper { .ofNullable(findOriginalType(doc)) .map(originalType -> { final List mappings = Lists.newArrayList(); - - if (vocs.vocabularyExists(OPENAIRE_COAR_RESOURCE_TYPES_3_1)) { - - // TODO verify what the vocabs return when a synonym is not defined - Optional - .ofNullable(vocs.lookupTermBySynonym(OPENAIRE_COAR_RESOURCE_TYPES_3_1, originalType)) - .ifPresent(coarTerm -> { - mappings.add(OafMapperUtils.instanceTypeMapping(originalType, coarTerm)); - if (vocs.vocabularyExists(OPENAIRE_USER_RESOURCE_TYPES)) { - - // TODO verify what the vocabs return when a synonym is not defined - Optional - .ofNullable( - vocs.lookupTermBySynonym(OPENAIRE_USER_RESOURCE_TYPES, coarTerm.getClassid())) - .ifPresent( - type -> mappings.add(OafMapperUtils.instanceTypeMapping(originalType, type))); - } - }); - } - + mappings.add(OafMapperUtils.instanceTypeMapping(originalType, OPENAIRE_COAR_RESOURCE_TYPES_3_1)); return mappings; }) .orElse(new ArrayList<>()); diff --git a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/group/GroupEntitiesSparkJobTest.java b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/group/GroupEntitiesSparkJobTest.java index 0887adf45..242aed88e 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/group/GroupEntitiesSparkJobTest.java +++ b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/group/GroupEntitiesSparkJobTest.java @@ -1,15 +1,23 @@ package eu.dnetlib.dhp.oa.graph.group; +import static eu.dnetlib.dhp.schema.common.ModelConstants.*; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.Mockito.lenient; import java.io.IOException; import java.net.URISyntaxException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import org.apache.commons.cli.ParseException; import org.apache.commons.io.FileUtils; +import org.apache.commons.io.IOUtils; import org.apache.spark.SparkConf; import org.apache.spark.api.java.function.FilterFunction; import org.apache.spark.api.java.function.MapFunction; @@ -17,20 +25,36 @@ import org.apache.spark.sql.Dataset; import org.apache.spark.sql.Encoders; import org.apache.spark.sql.SparkSession; import org.junit.jupiter.api.*; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; +import eu.dnetlib.dhp.application.ArgumentApplicationParser; import eu.dnetlib.dhp.common.HdfsSupport; +import eu.dnetlib.dhp.common.vocabulary.VocabularyGroup; import eu.dnetlib.dhp.oa.merge.GroupEntitiesSparkJob; +import eu.dnetlib.dhp.schema.common.ModelConstants; import eu.dnetlib.dhp.schema.common.ModelSupport; +import eu.dnetlib.dhp.schema.oaf.Instance; +import eu.dnetlib.dhp.schema.oaf.InstanceTypeMapping; import eu.dnetlib.dhp.schema.oaf.OafEntity; import eu.dnetlib.dhp.schema.oaf.Result; import eu.dnetlib.dhp.utils.DHPUtils; +import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpException; +import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpService; +@ExtendWith(MockitoExtension.class) @TestMethodOrder(MethodOrderer.OrderAnnotation.class) public class GroupEntitiesSparkJobTest { + @Mock + private ISLookUpService isLookUpService; + + private VocabularyGroup vocabularies; + private static SparkSession spark; private static ObjectMapper mapper = new ObjectMapper() @@ -45,10 +69,10 @@ public class GroupEntitiesSparkJobTest { @BeforeAll public static void beforeAll() throws IOException { - workingDir = Files.createTempDirectory(GroupEntitiesSparkJob.class.getSimpleName()); + workingDir = Files.createTempDirectory(GroupEntitiesSparkJobTest.class.getSimpleName()); SparkConf conf = new SparkConf(); - conf.setAppName(GroupEntitiesSparkJob.class.getSimpleName()); + conf.setAppName(GroupEntitiesSparkJobTest.class.getSimpleName()); conf.setMaster("local"); conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer"); conf.registerKryoClasses(ModelSupport.getOafModelClasses()); @@ -56,10 +80,17 @@ public class GroupEntitiesSparkJobTest { } @BeforeEach - public void beforeEach() throws IOException, URISyntaxException { + public void beforeEach() throws IOException, URISyntaxException, ISLookUpException { dataInputPath = Paths.get(ClassLoader.getSystemResource("eu/dnetlib/dhp/oa/graph/group").toURI()); checkpointPath = workingDir.resolve("grouped_entity"); outputPath = workingDir.resolve("dispatched_entity"); + + lenient().when(isLookUpService.quickSearchProfile(VocabularyGroup.VOCABULARIES_XQUERY)).thenReturn(vocs()); + lenient() + .when(isLookUpService.quickSearchProfile(VocabularyGroup.VOCABULARY_SYNONYMS_XQUERY)) + .thenReturn(synonyms()); + + vocabularies = VocabularyGroup.loadVocsFromIS(isLookUpService); } @AfterAll @@ -71,18 +102,17 @@ public class GroupEntitiesSparkJobTest { @Test @Order(1) void testGroupEntities() throws Exception { - GroupEntitiesSparkJob.main(new String[] { - "-isSparkSessionManaged", - Boolean.FALSE.toString(), - "-graphInputPath", - dataInputPath.toString(), - "-checkpointPath", - checkpointPath.toString(), - "-outputPath", - outputPath.toString(), - "-filterInvisible", - Boolean.FALSE.toString() - }); + new GroupEntitiesSparkJob( + args( + "/eu/dnetlib/dhp/oa/merge/group_graph_entities_parameters.json", + new String[] { + "--isSparkSessionManaged", Boolean.FALSE.toString(), + "--graphInputPath", dataInputPath.toString(), + "--checkpointPath", checkpointPath.toString(), + "--outputPath", outputPath.toString(), + "--filterInvisible", Boolean.FALSE.toString(), + "--isLookupUrl", "lookupurl" + })).run(false, isLookUpService); Dataset checkpointTable = spark .read() @@ -109,6 +139,14 @@ public class GroupEntitiesSparkJobTest { .map((MapFunction) s -> mapper.readValue(s, Result.class), Encoders.bean(Result.class)); assertEquals(3, output.count()); + + List resultTypes = output + .map((MapFunction) value -> value.getResulttype().getClassid(), Encoders.STRING()) + .distinct() + .collectAsList(); + + assertEquals(2, resultTypes.size()); + assertEquals( 2, output @@ -121,5 +159,68 @@ public class GroupEntitiesSparkJobTest { .map((MapFunction) r -> r.getResulttype().getClassid(), Encoders.STRING()) .filter((FilterFunction) s -> s.equals("dataset")) .count()); + + Result result = output + .filter("id = '50|doi_________::09821844208a5cd6300b2bfb13bca1b9'") + .first(); + + result.getInstance().forEach(instance -> { + Optional coarType = instance + .getInstanceTypeMapping() + .stream() + .filter(itm -> OPENAIRE_COAR_RESOURCE_TYPES_3_1.equals(itm.getVocabularyName())) + .filter(itm -> "journal-article".equals(itm.getOriginalType())) + .findFirst(); + + assertTrue(coarType.isPresent()); + assertEquals("http://purl.org/coar/resource_type/c_2df8fbb1", coarType.get().getTypeCode()); + assertEquals("research article", coarType.get().getTypeLabel()); + }); + + final Dataset filtered = output.filter("id = '50|DansKnawCris::203a27996ddc0fd1948258e5b7dec61c'"); + assertEquals(1, filtered.count()); + result = filtered.first(); + + result + .getInstance() + .stream() + .flatMap(instance -> instance.getInstanceTypeMapping().stream()) + .filter(itm -> OPENAIRE_COAR_RESOURCE_TYPES_3_1.equals(itm.getVocabularyName())) + .filter(itm -> "Patent".equals(itm.getOriginalType())) + .forEach(itm -> { + assertEquals("http://purl.org/coar/resource_type/c_15cd", itm.getTypeCode()); + assertEquals("patent", itm.getTypeLabel()); + }); } + + private List vocs() throws IOException { + return IOUtils + .readLines( + Objects + .requireNonNull( + getClass().getResourceAsStream("/eu/dnetlib/dhp/oa/graph/clean/terms.txt"))); + } + + private List synonyms() throws IOException { + return IOUtils + .readLines( + Objects + .requireNonNull( + getClass().getResourceAsStream("/eu/dnetlib/dhp/oa/graph/clean/synonyms.txt"))); + } + + private ArgumentApplicationParser args(String paramSpecs, String[] args) throws IOException, ParseException { + ArgumentApplicationParser parser = new ArgumentApplicationParser(classPathResourceAsString(paramSpecs)); + parser.parseArgument(args); + return parser; + } + + private static String classPathResourceAsString(String path) throws IOException { + return IOUtils + .toString( + Objects + .requireNonNull( + GroupEntitiesSparkJobTest.class.getResourceAsStream(path))); + } + } diff --git a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/raw/GenerateEntitiesApplicationTest.java b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/raw/GenerateEntitiesApplicationTest.java index 53b3f8432..6d6b2ffbd 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/raw/GenerateEntitiesApplicationTest.java +++ b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/raw/GenerateEntitiesApplicationTest.java @@ -92,13 +92,14 @@ class GenerateEntitiesApplicationTest { private List vocs() throws IOException { return IOUtils .readLines( - GraphCleaningFunctionsTest.class.getResourceAsStream("/eu/dnetlib/dhp/oa/graph/clean/terms.txt")); + GenerateEntitiesApplicationTest.class.getResourceAsStream("/eu/dnetlib/dhp/oa/graph/clean/terms.txt")); } private List synonyms() throws IOException { return IOUtils .readLines( - GraphCleaningFunctionsTest.class.getResourceAsStream("/eu/dnetlib/dhp/oa/graph/clean/synonyms.txt")); + GenerateEntitiesApplicationTest.class + .getResourceAsStream("/eu/dnetlib/dhp/oa/graph/clean/synonyms.txt")); } } diff --git a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/raw/MappersTest.java b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/raw/MappersTest.java index e6997ac1d..1f2defa01 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/raw/MappersTest.java +++ b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/raw/MappersTest.java @@ -122,7 +122,7 @@ class MappersTest { assertTrue(instance.getPid().isEmpty()); assertNotNull(instance.getInstanceTypeMapping()); - assertEquals(2, instance.getInstanceTypeMapping().size()); + assertEquals(1, instance.getInstanceTypeMapping().size()); Optional coarType = instance .getInstanceTypeMapping() @@ -131,8 +131,8 @@ class MappersTest { .findFirst(); assertTrue(coarType.isPresent()); - assertEquals("http://purl.org/coar/resource_type/c_5794", coarType.get().getTypeCode()); - assertEquals("conference paper", coarType.get().getTypeLabel()); + assertNull(coarType.get().getTypeCode()); + assertNull(coarType.get().getTypeLabel()); Optional userType = instance .getInstanceTypeMapping() @@ -140,9 +140,7 @@ class MappersTest { .filter(itm -> ModelConstants.OPENAIRE_USER_RESOURCE_TYPES.equals(itm.getVocabularyName())) .findFirst(); - assertTrue(userType.isPresent()); - assertEquals("Article", userType.get().getTypeCode()); - assertEquals("Article", userType.get().getTypeLabel()); + assertFalse(userType.isPresent()); assertFalse(instance.getAlternateIdentifier().isEmpty()); assertEquals("doi", instance.getAlternateIdentifier().get(0).getQualifier().getClassid()); @@ -710,14 +708,10 @@ class MappersTest { assertEquals("0001", p_cleaned.getInstance().get(0).getRefereed().getClassid()); assertEquals("peerReviewed", p_cleaned.getInstance().get(0).getRefereed().getClassname()); - assertNotNull(p_cleaned.getMetaResourceType()); - assertEquals("Research Literature", p_cleaned.getMetaResourceType().getClassid()); - assertEquals("Research Literature", p_cleaned.getMetaResourceType().getClassname()); - assertEquals(ModelConstants.OPENAIRE_META_RESOURCE_TYPE, p_cleaned.getMetaResourceType().getSchemeid()); - assertEquals(ModelConstants.OPENAIRE_META_RESOURCE_TYPE, p_cleaned.getMetaResourceType().getSchemename()); + assertNull(p_cleaned.getMetaResourceType()); assertNotNull(p_cleaned.getInstance().get(0).getInstanceTypeMapping()); - assertEquals(2, p_cleaned.getInstance().get(0).getInstanceTypeMapping().size()); + assertEquals(1, p_cleaned.getInstance().get(0).getInstanceTypeMapping().size()); assertTrue( p_cleaned @@ -728,8 +722,7 @@ class MappersTest { .anyMatch( t -> "journal-article".equals(t.getOriginalType()) && ModelConstants.OPENAIRE_COAR_RESOURCE_TYPES_3_1.equals(t.getVocabularyName()) && - "http://purl.org/coar/resource_type/c_2df8fbb1".equals(t.getTypeCode()) && - "research article".equals(t.getTypeLabel()))); + Objects.isNull(t.getTypeCode()) && Objects.isNull(t.getTypeLabel()))); assertTrue( p_cleaned @@ -737,11 +730,8 @@ class MappersTest { .get(0) .getInstanceTypeMapping() .stream() - .anyMatch( - t -> "journal-article".equals(t.getOriginalType()) && - ModelConstants.OPENAIRE_USER_RESOURCE_TYPES.equals(t.getVocabularyName()) && - "Article".equals(t.getTypeCode()) && - "Article".equals(t.getTypeLabel()))); + .noneMatch( + t -> ModelConstants.OPENAIRE_USER_RESOURCE_TYPES.equals(t.getVocabularyName()))); } @Test diff --git a/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/group/dataset/dataset.json b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/group/dataset/dataset.json index e30be47e9..efbabb3c8 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/group/dataset/dataset.json +++ b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/group/dataset/dataset.json @@ -1,3 +1,3 @@ -{"author":[{"affiliation":[],"fullname":"Greenough, B","name":"B","pid":[],"rank":1,"surname":"Greenough"}],"bestaccessright":{"classid":"UNKNOWN","classname":"not available","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"collectedfrom":[{"key":"10|opendoar____::358aee4cc897452c00244351e4d91f69","value":"Zenodo"}],"context":[],"contributor":[],"country":[],"coverage":[],"dataInfo":{"deletedbyinference":true,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"dateofcollection":"2021-09-25T10:55:00.639Z","dateoftransformation":"2021-09-25T11:00:04.201Z","description":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"Heritage Education"}],"externalReference":[],"extraInfo":[],"format":[],"fulltext":[],"geolocation":[],"id":"50|doi_________::09821844208a5cd6300b2bfb13bca1b9","instance":[{"accessright":{"classid":"UNKNOWN","classname":"not available","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"pid":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"urn","classname":"urn","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"urn:nbn:nl:ui:13-59-cjhf"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"doi","classname":"Digital Object Identifier","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.17632/96bpgw5j9d.1"}],"collectedfrom":{"key":"10|opendoar____::358aee4cc897452c00244351e4d91f69","value":"Zenodo"},"hostedby":{"key":"10|openaire____::c6df70599aa984f16ee52b4b86d2e89f","value":"DANS (Data Archiving and Networked Services)"},"instancetype":{"classid":"0021","classname":"Dataset","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"alternateIdentifier":[],"refereed":{"classid":"0000","classname":"Unknown","schemeid":"dnet:review_levels","schemename":"dnet:review_levels"},"url":["","http://dx.doi.org/10.17632/96bpgw5j9d.1"]}],"language":{"classid":"und","classname":"Undetermined","schemeid":"dnet:languages","schemename":"dnet:languages"},"lastupdatetimestamp":1635434801681,"oaiprovenance":{"originDescription":{"altered":true,"baseURL":"http%3A%2F%2Fservices.nod.dans.knaw.nl%2Foa-cerif","datestamp":"2021-08-16T15:29:45Z","harvestDate":"2021-09-25T10:55:00.639Z","identifier":"oai:services.nod.dans.knaw.nl:Products/dans:oai:easy.dans.knaw.nl:easy-dataset:211323","metadataNamespace":""}},"originalId":["50|DansKnawCris::09821844208a5cd6300b2bfb13bca1b9","oai:services.nod.dans.knaw.nl:Products/dans:oai:easy.dans.knaw.nl:easy-dataset:211323"],"pid":[],"relevantdate":[],"resourcetype":{"classid":"0021","classname":"0021","schemeid":"dnet:dataCite_resource","schemename":"dnet:dataCite_resource"},"resulttype":{"classid":"dataset","classname":"dataset","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"source":[],"subject":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"Interdisciplinary sciences"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"Interdisciplinary sciences"}],"title":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"value":"Heritage Education"}]} -{"author":[{"affiliation":[],"fullname":"Keijers, D.M.G.","name":"D.M.G.","pid":[],"rank":1,"surname":"Keijers"}],"bestaccessright":{"classid":"UNKNOWN","classname":"not available","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"collectedfrom":[{"key":"10|openaire____::c6df70599aa984f16ee52b4b86d2e89f","value":"DANS (Data Archiving and Networked Services)"}],"context":[],"contributor":[],"country":[],"coverage":[],"dataInfo":{"deletedbyinference":true,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"dateofcollection":"2021-09-25T10:41:59.767Z","dateoftransformation":"2021-09-25T11:00:19.238Z","description":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"onderzoeksrapport"}],"externalReference":[],"extraInfo":[],"format":[],"fulltext":[],"geolocation":[],"id":"50|DansKnawCris::0dd644304b7116e8e58da3a5e3adc37a","instance":[{"accessright":{"classid":"UNKNOWN","classname":"not available","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"pid":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"urn","classname":"urn","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"urn:nbn:nl:ui:13-das-fkq"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"doi","classname":"Digital Object Identifier","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.17026/dans-xsw-qtnx"}],"collectedfrom":{"key":"10|openaire____::c6df70599aa984f16ee52b4b86d2e89f","value":"DANS (Data Archiving and Networked Services)"},"hostedby":{"key":"10|openaire____::c6df70599aa984f16ee52b4b86d2e89f","value":"DANS (Data Archiving and Networked Services)"},"instancetype":{"classid":"0021","classname":"Dataset","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"alternateIdentifier":[],"refereed":{"classid":"0000","classname":"Unknown","schemeid":"dnet:review_levels","schemename":"dnet:review_levels"},"url":["","http://dx.doi.org/10.17026/dans-xsw-qtnx"]}],"language":{"classid":"dut/nld","classname":"Dutch; Flemish","schemeid":"dnet:languages","schemename":"dnet:languages"},"lastupdatetimestamp":1635434847381,"oaiprovenance":{"originDescription":{"altered":true,"baseURL":"http%3A%2F%2Fservices.nod.dans.knaw.nl%2Foa-cerif","datestamp":"2021-08-16T13:53:29Z","harvestDate":"2021-09-25T10:41:59.767Z","identifier":"oai:services.nod.dans.knaw.nl:Products/dans:oai:easy.dans.knaw.nl:easy-dataset:20759","metadataNamespace":""}},"originalId":["oai:services.nod.dans.knaw.nl:Products/dans:oai:easy.dans.knaw.nl:easy-dataset:20759","50|DansKnawCris::0dd644304b7116e8e58da3a5e3adc37a"],"pid":[],"relevantdate":[],"resourcetype":{"classid":"0021","classname":"0021","schemeid":"dnet:dataCite_resource","schemename":"dnet:dataCite_resource"},"resulttype":{"classid":"dataset","classname":"dataset","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"source":[],"subject":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"PROSPECTIE"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"Archaeology"}],"title":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"value":"Plangebied Lange Ekker te Vessem, gemeente Eersel"}]} -{"author":[],"bestaccessright":{"classid":"UNKNOWN","classname":"not available","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"collectedfrom":[{"key":"10|openaire____::c6df70599aa984f16ee52b4b86d2e89f","value":"DANS (Data Archiving and Networked Services)"}],"context":[],"contributor":[],"country":[],"coverage":[],"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"dateofcollection":"2021-09-25T10:43:13.768Z","dateoftransformation":"2021-09-25T11:01:22.863Z","description":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"This find is registered at Portable Antiquities of the Netherlands with number PAN-00054604"}],"externalReference":[],"extraInfo":[],"format":[],"fulltext":[],"geolocation":[],"id":"50|DansKnawCris::203a27996ddc0fd1948258e5b7dec61c","instance":[{"accessright":{"classid":"UNKNOWN","classname":"not available","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"pid":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"urn","classname":"urn","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"urn:nbn:nl:ui:13-a7-hwgy"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"doi","classname":"Digital Object Identifier","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.17026/dans-x3z-fsq5"}],"collectedfrom":{"key":"10|openaire____::c6df70599aa984f16ee52b4b86d2e89f","value":"DANS (Data Archiving and Networked Services)"},"hostedby":{"key":"10|openaire____::c6df70599aa984f16ee52b4b86d2e89f","value":"DANS (Data Archiving and Networked Services)"},"instancetype":{"classid":"0021","classname":"Dataset","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"alternateIdentifier":[],"refereed":{"classid":"0000","classname":"Unknown","schemeid":"dnet:review_levels","schemename":"dnet:review_levels"},"url":["","http://dx.doi.org/10.17026/dans-x3z-fsq5"]}],"language":{"classid":"eng","classname":"English","schemeid":"dnet:languages","schemename":"dnet:languages"},"lastupdatetimestamp":1635434508886,"oaiprovenance":{"originDescription":{"altered":true,"baseURL":"http%3A%2F%2Fservices.nod.dans.knaw.nl%2Foa-cerif","datestamp":"2021-08-16T14:01:37Z","harvestDate":"2021-09-25T10:43:13.768Z","identifier":"oai:services.nod.dans.knaw.nl:Products/dans:oai:easy.dans.knaw.nl:easy-dataset:129566","metadataNamespace":""}},"originalId":["oai:services.nod.dans.knaw.nl:Products/dans:oai:easy.dans.knaw.nl:easy-dataset:129566","50|DansKnawCris::203a27996ddc0fd1948258e5b7dec61c"],"pid":[],"relevantdate":[],"resourcetype":{"classid":"0021","classname":"0021","schemeid":"dnet:dataCite_resource","schemename":"dnet:dataCite_resource"},"resulttype":{"classid":"dataset","classname":"dataset","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"source":[],"subject":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"early medieval enamelled disc brooch variant A9"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"Broader Match: disc brooches"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"Broader Match: schijffibula - geemailleerd"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"metal"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"copper alloy"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"Temporal coverage: Early Middle Ages C"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"Temporal coverage: Early Middle Ages D"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"Temporal coverage: 800 until 1000"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"Archaeology"}],"title":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"value":"PAN-00054604 - early medieval enamelled disc brooch variant A9"}]} \ No newline at end of file +{"author":[{"affiliation":[],"fullname":"Greenough, B","name":"B","pid":[],"rank":1,"surname":"Greenough"}],"bestaccessright":{"classid":"UNKNOWN","classname":"not available","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"collectedfrom":[{"key":"10|opendoar____::358aee4cc897452c00244351e4d91f69","value":"Zenodo"}],"context":[],"contributor":[],"country":[],"coverage":[],"dataInfo":{"deletedbyinference":true,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"dateofcollection":"2021-09-25T10:55:00.639Z","dateoftransformation":"2021-09-25T11:00:04.201Z","description":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"Heritage Education"}],"externalReference":[],"extraInfo":[],"format":[],"fulltext":[],"geolocation":[],"id":"50|doi_________::09821844208a5cd6300b2bfb13bca1b9","instance":[{"instanceTypeMapping":[{"originalType":"journal-article","vocabularyName":"openaire::coar_resource_types_3_1"}],"accessright":{"classid":"UNKNOWN","classname":"not available","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"pid":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"urn","classname":"urn","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"urn:nbn:nl:ui:13-59-cjhf"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"doi","classname":"Digital Object Identifier","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.17632/96bpgw5j9d.1"}],"collectedfrom":{"key":"10|opendoar____::358aee4cc897452c00244351e4d91f69","value":"Zenodo"},"hostedby":{"key":"10|openaire____::c6df70599aa984f16ee52b4b86d2e89f","value":"DANS (Data Archiving and Networked Services)"},"instancetype":{"classid":"0021","classname":"Dataset","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"alternateIdentifier":[],"refereed":{"classid":"0000","classname":"Unknown","schemeid":"dnet:review_levels","schemename":"dnet:review_levels"},"url":["","http://dx.doi.org/10.17632/96bpgw5j9d.1"]}],"language":{"classid":"und","classname":"Undetermined","schemeid":"dnet:languages","schemename":"dnet:languages"},"lastupdatetimestamp":1635434801681,"oaiprovenance":{"originDescription":{"altered":true,"baseURL":"http%3A%2F%2Fservices.nod.dans.knaw.nl%2Foa-cerif","datestamp":"2021-08-16T15:29:45Z","harvestDate":"2021-09-25T10:55:00.639Z","identifier":"oai:services.nod.dans.knaw.nl:Products/dans:oai:easy.dans.knaw.nl:easy-dataset:211323","metadataNamespace":""}},"originalId":["50|DansKnawCris::09821844208a5cd6300b2bfb13bca1b9","oai:services.nod.dans.knaw.nl:Products/dans:oai:easy.dans.knaw.nl:easy-dataset:211323"],"pid":[],"relevantdate":[],"resourcetype":{"classid":"0021","classname":"0021","schemeid":"dnet:dataCite_resource","schemename":"dnet:dataCite_resource"},"resulttype":{"classid":"dataset","classname":"dataset","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"source":[],"subject":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"Interdisciplinary sciences"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"Interdisciplinary sciences"}],"title":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"value":"Heritage Education"}]} +{"author":[{"affiliation":[],"fullname":"Keijers, D.M.G.","name":"D.M.G.","pid":[],"rank":1,"surname":"Keijers"}],"bestaccessright":{"classid":"UNKNOWN","classname":"not available","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"collectedfrom":[{"key":"10|openaire____::c6df70599aa984f16ee52b4b86d2e89f","value":"DANS (Data Archiving and Networked Services)"}],"context":[],"contributor":[],"country":[],"coverage":[],"dataInfo":{"deletedbyinference":true,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"dateofcollection":"2021-09-25T10:41:59.767Z","dateoftransformation":"2021-09-25T11:00:19.238Z","description":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"onderzoeksrapport"}],"externalReference":[],"extraInfo":[],"format":[],"fulltext":[],"geolocation":[],"id":"50|DansKnawCris::0dd644304b7116e8e58da3a5e3adc37a","instance":[{"instanceTypeMapping":[{"originalType":"journal-article","vocabularyName":"openaire::coar_resource_types_3_1"}],"accessright":{"classid":"UNKNOWN","classname":"not available","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"pid":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"urn","classname":"urn","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"urn:nbn:nl:ui:13-das-fkq"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"doi","classname":"Digital Object Identifier","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.17026/dans-xsw-qtnx"}],"collectedfrom":{"key":"10|openaire____::c6df70599aa984f16ee52b4b86d2e89f","value":"DANS (Data Archiving and Networked Services)"},"hostedby":{"key":"10|openaire____::c6df70599aa984f16ee52b4b86d2e89f","value":"DANS (Data Archiving and Networked Services)"},"instancetype":{"classid":"0021","classname":"Dataset","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"alternateIdentifier":[],"refereed":{"classid":"0000","classname":"Unknown","schemeid":"dnet:review_levels","schemename":"dnet:review_levels"},"url":["","http://dx.doi.org/10.17026/dans-xsw-qtnx"]}],"language":{"classid":"dut/nld","classname":"Dutch; Flemish","schemeid":"dnet:languages","schemename":"dnet:languages"},"lastupdatetimestamp":1635434847381,"oaiprovenance":{"originDescription":{"altered":true,"baseURL":"http%3A%2F%2Fservices.nod.dans.knaw.nl%2Foa-cerif","datestamp":"2021-08-16T13:53:29Z","harvestDate":"2021-09-25T10:41:59.767Z","identifier":"oai:services.nod.dans.knaw.nl:Products/dans:oai:easy.dans.knaw.nl:easy-dataset:20759","metadataNamespace":""}},"originalId":["oai:services.nod.dans.knaw.nl:Products/dans:oai:easy.dans.knaw.nl:easy-dataset:20759","50|DansKnawCris::0dd644304b7116e8e58da3a5e3adc37a"],"pid":[],"relevantdate":[],"resourcetype":{"classid":"0021","classname":"0021","schemeid":"dnet:dataCite_resource","schemename":"dnet:dataCite_resource"},"resulttype":{"classid":"dataset","classname":"dataset","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"source":[],"subject":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"PROSPECTIE"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"Archaeology"}],"title":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"value":"Plangebied Lange Ekker te Vessem, gemeente Eersel"}]} +{"author":[],"bestaccessright":{"classid":"UNKNOWN","classname":"not available","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"collectedfrom":[{"key":"10|openaire____::c6df70599aa984f16ee52b4b86d2e89f","value":"DANS (Data Archiving and Networked Services)"}],"context":[],"contributor":[],"country":[],"coverage":[],"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"dateofcollection":"2021-09-25T10:43:13.768Z","dateoftransformation":"2021-09-25T11:01:22.863Z","description":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"This find is registered at Portable Antiquities of the Netherlands with number PAN-00054604"}],"externalReference":[],"extraInfo":[],"format":[],"fulltext":[],"geolocation":[],"id":"50|DansKnawCris::203a27996ddc0fd1948258e5b7dec61c","instance":[{"instanceTypeMapping":[{"originalType":"journal-article","vocabularyName":"openaire::coar_resource_types_3_1"}],"accessright":{"classid":"UNKNOWN","classname":"not available","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"pid":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"urn","classname":"urn","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"urn:nbn:nl:ui:13-a7-hwgy"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"doi","classname":"Digital Object Identifier","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.17026/dans-x3z-fsq5"}],"collectedfrom":{"key":"10|openaire____::c6df70599aa984f16ee52b4b86d2e89f","value":"DANS (Data Archiving and Networked Services)"},"hostedby":{"key":"10|openaire____::c6df70599aa984f16ee52b4b86d2e89f","value":"DANS (Data Archiving and Networked Services)"},"instancetype":{"classid":"0021","classname":"Dataset","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"alternateIdentifier":[],"refereed":{"classid":"0000","classname":"Unknown","schemeid":"dnet:review_levels","schemename":"dnet:review_levels"},"url":["","http://dx.doi.org/10.17026/dans-x3z-fsq5"]}],"language":{"classid":"eng","classname":"English","schemeid":"dnet:languages","schemename":"dnet:languages"},"lastupdatetimestamp":1635434508886,"oaiprovenance":{"originDescription":{"altered":true,"baseURL":"http%3A%2F%2Fservices.nod.dans.knaw.nl%2Foa-cerif","datestamp":"2021-08-16T14:01:37Z","harvestDate":"2021-09-25T10:43:13.768Z","identifier":"oai:services.nod.dans.knaw.nl:Products/dans:oai:easy.dans.knaw.nl:easy-dataset:129566","metadataNamespace":""}},"originalId":["oai:services.nod.dans.knaw.nl:Products/dans:oai:easy.dans.knaw.nl:easy-dataset:129566","50|DansKnawCris::203a27996ddc0fd1948258e5b7dec61c"],"pid":[],"relevantdate":[],"resourcetype":{"classid":"0021","classname":"0021","schemeid":"dnet:dataCite_resource","schemename":"dnet:dataCite_resource"},"resulttype":{"classid":"dataset","classname":"dataset","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"source":[],"subject":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"early medieval enamelled disc brooch variant A9"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"Broader Match: disc brooches"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"Broader Match: schijffibula - geemailleerd"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"metal"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"copper alloy"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"Temporal coverage: Early Middle Ages C"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"Temporal coverage: Early Middle Ages D"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"Temporal coverage: 800 until 1000"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"Archaeology"}],"title":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"value":"PAN-00054604 - early medieval enamelled disc brooch variant A9"}]} \ No newline at end of file diff --git a/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/group/publication/publication.json b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/group/publication/publication.json index 29ce76df3..90cf4936b 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/group/publication/publication.json +++ b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/group/publication/publication.json @@ -1,3 +1,3 @@ -{"author":[{"affiliation":[],"fullname":"Greenough, B","name":"B","pid":[],"rank":1,"surname":"Greenough"}],"bestaccessright":{"classid":"UNKNOWN","classname":"not available","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"collectedfrom":[{"key":"10|openaire____::9e3be59865b2c1c335d32dae2fe7b254","value":"Datacite"}],"context":[],"contributor":[],"country":[],"coverage":[],"dataInfo":{"deletedbyinference":true,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"dateofcollection":"2021-09-25T10:55:00.639Z","dateoftransformation":"2021-09-25T11:00:04.201Z","description":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"Heritage Education"}],"externalReference":[],"extraInfo":[],"format":[],"fulltext":[],"geolocation":[],"id":"50|doi_________::09821844208a5cd6300b2bfb13bca1b9","instance":[{"accessright":{"classid":"UNKNOWN","classname":"not available","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"pid":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"urn","classname":"urn","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"urn:nbn:nl:ui:13-59-cjhf"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"doi","classname":"Digital Object Identifier","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.17632/96bpgw5j9d.1"}],"collectedfrom":{"key":"10|openaire____::9e3be59865b2c1c335d32dae2fe7b254","value":"Datacite"},"hostedby":{"key":"10|openaire____::c6df70599aa984f16ee52b4b86d2e89f","value":"DANS (Data Archiving and Networked Services)"},"instancetype":{"classid":"0021","classname":"Dataset","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"alternateIdentifier":[],"refereed":{"classid":"0000","classname":"Unknown","schemeid":"dnet:review_levels","schemename":"dnet:review_levels"},"url":["","http://dx.doi.org/10.17632/96bpgw5j9d.1"]}],"language":{"classid":"und","classname":"Undetermined","schemeid":"dnet:languages","schemename":"dnet:languages"},"lastupdatetimestamp":1635434801681,"oaiprovenance":{"originDescription":{"altered":true,"baseURL":"http%3A%2F%2Fservices.nod.dans.knaw.nl%2Foa-cerif","datestamp":"2021-08-16T15:29:45Z","harvestDate":"2021-09-25T10:55:00.639Z","identifier":"oai:services.nod.dans.knaw.nl:Products/dans:oai:easy.dans.knaw.nl:easy-dataset:211323","metadataNamespace":""}},"originalId":["50|DansKnawCris::09821844208a5cd6300b2bfb13bca1b9","oai:services.nod.dans.knaw.nl:Products/dans:oai:easy.dans.knaw.nl:easy-dataset:211323"],"pid":[],"relevantdate":[],"resourcetype":{"classid":"0021","classname":"0021","schemeid":"dnet:dataCite_resource","schemename":"dnet:dataCite_resource"},"resulttype":{"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"source":[],"subject":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"Interdisciplinary sciences"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"Interdisciplinary sciences"}],"title":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"value":"Heritage Education"}]} -{"author":[{"affiliation":[],"fullname":"Keijers, D.M.G.","name":"D.M.G.","pid":[],"rank":1,"surname":"Keijers"}],"bestaccessright":{"classid":"UNKNOWN","classname":"not available","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"collectedfrom":[{"key":"10|openaire____::c6df70599aa984f16ee52b4b86d2e89f","value":"DANS (Data Archiving and Networked Services)"}],"context":[],"contributor":[],"country":[],"coverage":[],"dataInfo":{"deletedbyinference":true,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"dateofcollection":"2021-09-25T10:41:59.767Z","dateoftransformation":"2021-09-25T11:00:19.238Z","description":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"onderzoeksrapport"}],"externalReference":[],"extraInfo":[],"format":[],"fulltext":[],"geolocation":[],"id":"50|DansKnawCris::0dd644304b7116e8e58da3a5e3adc37a","instance":[{"accessright":{"classid":"UNKNOWN","classname":"not available","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"pid":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"urn","classname":"urn","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"urn:nbn:nl:ui:13-das-fkq"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"doi","classname":"Digital Object Identifier","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.17026/dans-xsw-qtnx"}],"collectedfrom":{"key":"10|openaire____::c6df70599aa984f16ee52b4b86d2e89f","value":"DANS (Data Archiving and Networked Services)"},"hostedby":{"key":"10|openaire____::c6df70599aa984f16ee52b4b86d2e89f","value":"DANS (Data Archiving and Networked Services)"},"instancetype":{"classid":"0021","classname":"Dataset","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"alternateIdentifier":[],"refereed":{"classid":"0000","classname":"Unknown","schemeid":"dnet:review_levels","schemename":"dnet:review_levels"},"url":["","http://dx.doi.org/10.17026/dans-xsw-qtnx"]}],"language":{"classid":"dut/nld","classname":"Dutch; Flemish","schemeid":"dnet:languages","schemename":"dnet:languages"},"lastupdatetimestamp":1635434847381,"oaiprovenance":{"originDescription":{"altered":true,"baseURL":"http%3A%2F%2Fservices.nod.dans.knaw.nl%2Foa-cerif","datestamp":"2021-08-16T13:53:29Z","harvestDate":"2021-09-25T10:41:59.767Z","identifier":"oai:services.nod.dans.knaw.nl:Products/dans:oai:easy.dans.knaw.nl:easy-dataset:20759","metadataNamespace":""}},"originalId":["oai:services.nod.dans.knaw.nl:Products/dans:oai:easy.dans.knaw.nl:easy-dataset:20759","50|DansKnawCris::0dd644304b7116e8e58da3a5e3adc37a"],"pid":[],"relevantdate":[],"resourcetype":{"classid":"0021","classname":"0021","schemeid":"dnet:dataCite_resource","schemename":"dnet:dataCite_resource"},"resulttype":{"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"source":[],"subject":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"PROSPECTIE"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"Archaeology"}],"title":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"value":"Plangebied Lange Ekker te Vessem, gemeente Eersel"}]} -{"author":[],"bestaccessright":{"classid":"UNKNOWN","classname":"not available","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"collectedfrom":[{"key":"10|openaire____::c6df70599aa984f16ee52b4b86d2e89f","value":"DANS (Data Archiving and Networked Services)"}],"context":[],"contributor":[],"country":[],"coverage":[],"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"dateofcollection":"2021-09-25T10:43:13.768Z","dateoftransformation":"2021-09-25T11:01:22.863Z","description":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"This find is registered at Portable Antiquities of the Netherlands with number PAN-00054604"}],"externalReference":[],"extraInfo":[],"format":[],"fulltext":[],"geolocation":[],"id":"50|DansKnawCris::203a27996ddc0fd1948258e5b7dec61c","instance":[{"accessright":{"classid":"UNKNOWN","classname":"not available","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"pid":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"urn","classname":"urn","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"urn:nbn:nl:ui:13-a7-hwgy"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"doi","classname":"Digital Object Identifier","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.17026/dans-x3z-fsq5"}],"collectedfrom":{"key":"10|openaire____::c6df70599aa984f16ee52b4b86d2e89f","value":"DANS (Data Archiving and Networked Services)"},"hostedby":{"key":"10|openaire____::c6df70599aa984f16ee52b4b86d2e89f","value":"DANS (Data Archiving and Networked Services)"},"instancetype":{"classid":"0021","classname":"Dataset","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"alternateIdentifier":[],"refereed":{"classid":"0000","classname":"Unknown","schemeid":"dnet:review_levels","schemename":"dnet:review_levels"},"url":["","http://dx.doi.org/10.17026/dans-x3z-fsq5"]}],"language":{"classid":"eng","classname":"English","schemeid":"dnet:languages","schemename":"dnet:languages"},"lastupdatetimestamp":1635434508886,"oaiprovenance":{"originDescription":{"altered":true,"baseURL":"http%3A%2F%2Fservices.nod.dans.knaw.nl%2Foa-cerif","datestamp":"2021-08-16T14:01:37Z","harvestDate":"2021-09-25T10:43:13.768Z","identifier":"oai:services.nod.dans.knaw.nl:Products/dans:oai:easy.dans.knaw.nl:easy-dataset:129566","metadataNamespace":""}},"originalId":["oai:services.nod.dans.knaw.nl:Products/dans:oai:easy.dans.knaw.nl:easy-dataset:129566","50|DansKnawCris::203a27996ddc0fd1948258e5b7dec61c"],"pid":[],"relevantdate":[],"resourcetype":{"classid":"0021","classname":"0021","schemeid":"dnet:dataCite_resource","schemename":"dnet:dataCite_resource"},"resulttype":{"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"source":[],"subject":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"early medieval enamelled disc brooch variant A9"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"Broader Match: disc brooches"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"Broader Match: schijffibula - geemailleerd"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"metal"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"copper alloy"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"Temporal coverage: Early Middle Ages C"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"Temporal coverage: Early Middle Ages D"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"Temporal coverage: 800 until 1000"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"Archaeology"}],"title":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"value":"PAN-00054604 - early medieval enamelled disc brooch variant A9"}]} \ No newline at end of file +{"author":[{"affiliation":[],"fullname":"Greenough, B","name":"B","pid":[],"rank":1,"surname":"Greenough"}],"bestaccessright":{"classid":"UNKNOWN","classname":"not available","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"collectedfrom":[{"key":"10|openaire____::9e3be59865b2c1c335d32dae2fe7b254","value":"Datacite"}],"context":[],"contributor":[],"country":[],"coverage":[],"dataInfo":{"deletedbyinference":true,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"dateofcollection":"2021-09-25T10:55:00.639Z","dateoftransformation":"2021-09-25T11:00:04.201Z","description":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"Heritage Education"}],"externalReference":[],"extraInfo":[],"format":[],"fulltext":[],"geolocation":[],"id":"50|doi_________::09821844208a5cd6300b2bfb13bca1b9","instance":[{"instanceTypeMapping":[{"originalType":"journal-article","vocabularyName":"openaire::coar_resource_types_3_1"}],"accessright":{"classid":"UNKNOWN","classname":"not available","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"pid":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"urn","classname":"urn","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"urn:nbn:nl:ui:13-59-cjhf"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"doi","classname":"Digital Object Identifier","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.17632/96bpgw5j9d.1"}],"collectedfrom":{"key":"10|openaire____::9e3be59865b2c1c335d32dae2fe7b254","value":"Datacite"},"hostedby":{"key":"10|openaire____::c6df70599aa984f16ee52b4b86d2e89f","value":"DANS (Data Archiving and Networked Services)"},"instancetype":{"classid":"0021","classname":"Dataset","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"alternateIdentifier":[],"refereed":{"classid":"0000","classname":"Unknown","schemeid":"dnet:review_levels","schemename":"dnet:review_levels"},"url":["","http://dx.doi.org/10.17632/96bpgw5j9d.1"]}],"language":{"classid":"und","classname":"Undetermined","schemeid":"dnet:languages","schemename":"dnet:languages"},"lastupdatetimestamp":1635434801681,"oaiprovenance":{"originDescription":{"altered":true,"baseURL":"http%3A%2F%2Fservices.nod.dans.knaw.nl%2Foa-cerif","datestamp":"2021-08-16T15:29:45Z","harvestDate":"2021-09-25T10:55:00.639Z","identifier":"oai:services.nod.dans.knaw.nl:Products/dans:oai:easy.dans.knaw.nl:easy-dataset:211323","metadataNamespace":""}},"originalId":["50|DansKnawCris::09821844208a5cd6300b2bfb13bca1b9","oai:services.nod.dans.knaw.nl:Products/dans:oai:easy.dans.knaw.nl:easy-dataset:211323"],"pid":[],"relevantdate":[],"resourcetype":{"classid":"0021","classname":"0021","schemeid":"dnet:dataCite_resource","schemename":"dnet:dataCite_resource"},"resulttype":{"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"source":[],"subject":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"Interdisciplinary sciences"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"Interdisciplinary sciences"}],"title":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"value":"Heritage Education"}]} +{"author":[{"affiliation":[],"fullname":"Keijers, D.M.G.","name":"D.M.G.","pid":[],"rank":1,"surname":"Keijers"}],"bestaccessright":{"classid":"UNKNOWN","classname":"not available","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"collectedfrom":[{"key":"10|openaire____::c6df70599aa984f16ee52b4b86d2e89f","value":"DANS (Data Archiving and Networked Services)"}],"context":[],"contributor":[],"country":[],"coverage":[],"dataInfo":{"deletedbyinference":true,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"dateofcollection":"2021-09-25T10:41:59.767Z","dateoftransformation":"2021-09-25T11:00:19.238Z","description":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"onderzoeksrapport"}],"externalReference":[],"extraInfo":[],"format":[],"fulltext":[],"geolocation":[],"id":"50|DansKnawCris::0dd644304b7116e8e58da3a5e3adc37a","instance":[{"instanceTypeMapping":[{"originalType":"journal-article","vocabularyName":"openaire::coar_resource_types_3_1"}],"accessright":{"classid":"UNKNOWN","classname":"not available","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"pid":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"urn","classname":"urn","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"urn:nbn:nl:ui:13-das-fkq"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"doi","classname":"Digital Object Identifier","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.17026/dans-xsw-qtnx"}],"collectedfrom":{"key":"10|openaire____::c6df70599aa984f16ee52b4b86d2e89f","value":"DANS (Data Archiving and Networked Services)"},"hostedby":{"key":"10|openaire____::c6df70599aa984f16ee52b4b86d2e89f","value":"DANS (Data Archiving and Networked Services)"},"instancetype":{"classid":"0021","classname":"Dataset","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"alternateIdentifier":[],"refereed":{"classid":"0000","classname":"Unknown","schemeid":"dnet:review_levels","schemename":"dnet:review_levels"},"url":["","http://dx.doi.org/10.17026/dans-xsw-qtnx"]}],"language":{"classid":"dut/nld","classname":"Dutch; Flemish","schemeid":"dnet:languages","schemename":"dnet:languages"},"lastupdatetimestamp":1635434847381,"oaiprovenance":{"originDescription":{"altered":true,"baseURL":"http%3A%2F%2Fservices.nod.dans.knaw.nl%2Foa-cerif","datestamp":"2021-08-16T13:53:29Z","harvestDate":"2021-09-25T10:41:59.767Z","identifier":"oai:services.nod.dans.knaw.nl:Products/dans:oai:easy.dans.knaw.nl:easy-dataset:20759","metadataNamespace":""}},"originalId":["oai:services.nod.dans.knaw.nl:Products/dans:oai:easy.dans.knaw.nl:easy-dataset:20759","50|DansKnawCris::0dd644304b7116e8e58da3a5e3adc37a"],"pid":[],"relevantdate":[],"resourcetype":{"classid":"0021","classname":"0021","schemeid":"dnet:dataCite_resource","schemename":"dnet:dataCite_resource"},"resulttype":{"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"source":[],"subject":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"PROSPECTIE"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"Archaeology"}],"title":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"value":"Plangebied Lange Ekker te Vessem, gemeente Eersel"}]} +{"author":[],"bestaccessright":{"classid":"UNKNOWN","classname":"not available","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"collectedfrom":[{"key":"10|openaire____::c6df70599aa984f16ee52b4b86d2e89f","value":"DANS (Data Archiving and Networked Services)"}],"context":[],"contributor":[],"country":[],"coverage":[],"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"dateofcollection":"2021-09-25T10:43:13.768Z","dateoftransformation":"2021-09-25T11:01:22.863Z","description":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"This find is registered at Portable Antiquities of the Netherlands with number PAN-00054604"}],"externalReference":[],"extraInfo":[],"format":[],"fulltext":[],"geolocation":[],"id":"50|DansKnawCris::203a27996ddc0fd1948258e5b7dec61c","instance":[{"accessright":{"classid":"UNKNOWN","classname":"not available","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"pid":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"urn","classname":"urn","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"urn:nbn:nl:ui:13-a7-hwgy"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"doi","classname":"Digital Object Identifier","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.17026/dans-x3z-fsq5"}],"collectedfrom":{"key":"10|openaire____::c6df70599aa984f16ee52b4b86d2e89f","value":"DANS (Data Archiving and Networked Services)"},"hostedby":{"key":"10|openaire____::c6df70599aa984f16ee52b4b86d2e89f","value":"DANS (Data Archiving and Networked Services)"},"instancetype":{"classid":"0019","classname":"Patent","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"alternateIdentifier":[],"refereed":{"classid":"0000","classname":"Unknown","schemeid":"dnet:review_levels","schemename":"dnet:review_levels"},"url":["","http://dx.doi.org/10.17026/dans-x3z-fsq5"]}],"language":{"classid":"eng","classname":"English","schemeid":"dnet:languages","schemename":"dnet:languages"},"lastupdatetimestamp":1635434508886,"oaiprovenance":{"originDescription":{"altered":true,"baseURL":"http%3A%2F%2Fservices.nod.dans.knaw.nl%2Foa-cerif","datestamp":"2021-08-16T14:01:37Z","harvestDate":"2021-09-25T10:43:13.768Z","identifier":"oai:services.nod.dans.knaw.nl:Products/dans:oai:easy.dans.knaw.nl:easy-dataset:129566","metadataNamespace":""}},"originalId":["oai:services.nod.dans.knaw.nl:Products/dans:oai:easy.dans.knaw.nl:easy-dataset:129566","50|DansKnawCris::203a27996ddc0fd1948258e5b7dec61c"],"pid":[],"relevantdate":[],"resourcetype":{"classid":"0021","classname":"0021","schemeid":"dnet:dataCite_resource","schemename":"dnet:dataCite_resource"},"resulttype":{"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"source":[],"subject":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"early medieval enamelled disc brooch variant A9"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"Broader Match: disc brooches"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"Broader Match: schijffibula - geemailleerd"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"metal"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"copper alloy"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"Temporal coverage: Early Middle Ages C"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"Temporal coverage: Early Middle Ages D"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"Temporal coverage: 800 until 1000"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"Archaeology"}],"title":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"value":"PAN-00054604 - early medieval enamelled disc brooch variant A9"}]} \ No newline at end of file diff --git a/pom.xml b/pom.xml index 0f1ec78af..3fd351c1d 100644 --- a/pom.xml +++ b/pom.xml @@ -888,7 +888,7 @@ 3.3.3 3.4.2 [2.12,3.0) - [4.17.2-SNAPSHOT] + [4.17.2] [4.0.3] [6.0.5] [3.1.6] From 359e81b7a60d987db509b7c53121863380c64aff Mon Sep 17 00:00:00 2001 From: dimitrispie Date: Thu, 23 Nov 2023 10:48:55 +0200 Subject: [PATCH 358/449] Update StatsAtomicActionsJob.java Bug fix for duplicate bronze checks --- .../actionmanager/stats_actionsets/StatsAtomicActionsJob.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/stats_actionsets/StatsAtomicActionsJob.java b/dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/stats_actionsets/StatsAtomicActionsJob.java index e984d68fc..a64a63c24 100644 --- a/dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/stats_actionsets/StatsAtomicActionsJob.java +++ b/dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/stats_actionsets/StatsAtomicActionsJob.java @@ -138,10 +138,10 @@ public class StatsAtomicActionsJob implements Serializable { r.setPubliclyFunded(usm.isPublicly_funded()); if (usm.isIs_bronze_oa()) r.setOpenAccessColor(OpenAccessColor.bronze); - else if (usm.isIs_gold()) - r.setOpenAccessColor(OpenAccessColor.bronze); else if (usm.isIs_gold()) r.setOpenAccessColor(OpenAccessColor.gold); + else if (usm.isIs_hybrid()) + r.setOpenAccessColor(OpenAccessColor.hybrid); return r; }, Encoders.bean(Result.class)); } From 1ba582de3c9625417032294cd9212400d4e12663 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Thu, 23 Nov 2023 16:27:19 +0100 Subject: [PATCH 359/449] [graph cleaning] added cleaning for result.publisher and result.instance.license --- .../oaf/utils/GraphCleaningFunctions.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java index 7a8acbd36..d39798506 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java @@ -14,6 +14,7 @@ import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; +import eu.dnetlib.dhp.common.vocabulary.VocabularyTerm; import org.apache.commons.lang3.StringUtils; import com.github.sisyphsu.dateparser.DateParserUtils; @@ -28,6 +29,10 @@ import me.xuender.unidecode.Unidecode; public class GraphCleaningFunctions extends CleaningFunctions { + public static final String DNET_PUBLISHERS = "dnet:publishers"; + + public static final String DNET_LICENSES = "dnet:licenses"; + public static final String ORCID_CLEANING_REGEX = ".*([0-9]{4}).*[-–—−=].*([0-9]{4}).*[-–—−=].*([0-9]{4}).*[-–—−=].*([0-9x]{4})"; public static final int ORCID_LEN = 19; public static final String CLEANING_REGEX = "(?:\\n|\\r|\\t)"; @@ -407,6 +412,13 @@ public class GraphCleaningFunctions extends CleaningFunctions { .getPublisher() .getValue() .replaceAll(NAME_CLEANING_REGEX, " ")); + + if (vocs.vocabularyExists(DNET_PUBLISHERS)) { + vocs.find(DNET_PUBLISHERS) + .map(voc -> voc.getTermBySynonym(r.getPublisher().getValue())) + .map(VocabularyTerm::getName) + .ifPresent(publisher -> r.getPublisher().setValue(publisher)); + } } } if (Objects.isNull(r.getLanguage()) || StringUtils.isBlank(r.getLanguage().getClassid())) { @@ -567,6 +579,13 @@ public class GraphCleaningFunctions extends CleaningFunctions { i.setRefereed(qualifier("0000", "Unknown", ModelConstants.DNET_REVIEW_LEVELS)); } + if (Objects.nonNull(i.getLicense()) && Objects.nonNull(i.getLicense().getValue())) { + vocs.find(DNET_LICENSES) + .map(voc -> voc.getTermBySynonym(i.getLicense().getValue())) + .map(VocabularyTerm::getId) + .ifPresent(license -> i.getLicense().setValue(license)); + } + // from the script from Dimitris if ("0000".equals(i.getRefereed().getClassid())) { final boolean isFromCrossref = Optional From 34a4b3cbdfe3bc4d07b565b95089c89ddbd25f9c Mon Sep 17 00:00:00 2001 From: Sandro La Bruzzo Date: Fri, 24 Nov 2023 12:39:58 +0100 Subject: [PATCH 360/449] Implemented ORCID Enrichment --- .../eu/dnetlib/dhp/oa/merge/AuthorMerger.java | 292 +++++++++++++++++- .../eu/dnetlib/oa/merge/AuthorMergerTest.java | 125 ++++++++ .../collection/orcid/DownloadORCIDTest.java | 39 --- .../orcid/enrich_graph_orcid_parameters.json | 26 ++ .../enrich/orcid/oozie_app/config-default.xml | 34 ++ .../dhp/enrich/orcid/oozie_app/workflow.xml | 52 ++++ .../dhp/enrich/orcid/AuthorEnricher.scala | 37 +++ .../SparkEnrichGraphWithOrcidAuthors.scala | 119 +++++++ .../dhp/enrich/orcid/EnrichOrcidTest.scala | 12 + 9 files changed, 696 insertions(+), 40 deletions(-) create mode 100644 dhp-common/src/test/java/eu/dnetlib/oa/merge/AuthorMergerTest.java create mode 100644 dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/enrich/orcid/enrich_graph_orcid_parameters.json create mode 100644 dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/enrich/orcid/oozie_app/config-default.xml create mode 100644 dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/enrich/orcid/oozie_app/workflow.xml create mode 100644 dhp-workflows/dhp-graph-mapper/src/main/scala/eu/dnetlib/dhp/enrich/orcid/AuthorEnricher.scala create mode 100644 dhp-workflows/dhp-graph-mapper/src/main/scala/eu/dnetlib/dhp/enrich/orcid/SparkEnrichGraphWithOrcidAuthors.scala create mode 100644 dhp-workflows/dhp-graph-mapper/src/test/scala/eu/dnetlib/dhp/enrich/orcid/EnrichOrcidTest.scala diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/AuthorMerger.java b/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/AuthorMerger.java index aea046203..6c3058303 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/AuthorMerger.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/AuthorMerger.java @@ -1,11 +1,18 @@ package eu.dnetlib.dhp.oa.merge; +import java.io.FileWriter; +import java.io.IOException; import java.text.Normalizer; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; +import java.util.stream.Stream; import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.tuple.MutablePair; +import org.apache.commons.lang3.tuple.Pair; +import org.jetbrains.annotations.NotNull; import com.wcohen.ss.JaroWinkler; @@ -14,6 +21,28 @@ import eu.dnetlib.dhp.schema.oaf.StructuredProperty; import eu.dnetlib.pace.model.Person; import scala.Tuple2; +class SimilarityCellInfo implements Comparable { + + public int authorPosition = 0; + public int orcidPosition = 0; + + public double maxColumnSimilarity = 0.0; + + public SimilarityCellInfo() { + } + + public void setValues(final int authPos, final int orcidPos, final double similarity) { + this.authorPosition = authPos; + this.orcidPosition = orcidPos; + this.maxColumnSimilarity = similarity; + } + + @Override + public int compareTo(@NotNull SimilarityCellInfo o) { + return Double.compare(maxColumnSimilarity, o.maxColumnSimilarity); + } +} + public class AuthorMerger { private static final Double THRESHOLD = 0.95; @@ -119,6 +148,267 @@ public class AuthorMerger { }); } + public static String normalizeFullName(final String fullname) { + return nfd(fullname) + .toLowerCase() + // do not compact the regexes in a single expression, would cause StackOverflowError + // in case + // of large input strings + .replaceAll("(\\W)+", " ") + .replaceAll("(\\p{InCombiningDiacriticalMarks})+", " ") + .replaceAll("(\\p{Punct})+", " ") + .replaceAll("(\\d)+", " ") + .replaceAll("(\\n)+", " ") + .trim(); +// return Arrays.stream(fullname.split("[\\s | , | ;]+")).map(String::toLowerCase).sorted().collect(Collectors.joining()); + } + + private static String generateAuthorkey(final Author a) { + if (a.getSurname() == null) + return "NOSURNAME"; + + return normalize(a.getSurname()); + } + +// +// public static List enrichOrcid2(List baseAuthor, List orcidAuthor) { +// if (baseAuthor == null || baseAuthor.isEmpty()) +// return orcidAuthor; +// +// if (orcidAuthor == null || orcidAuthor.isEmpty()) +// return baseAuthor; +// +// if (baseAuthor.size() == 1 && orcidAuthor.size() > 10) +// return baseAuthor; +// +// +// Map> pubClusters = baseAuthor.stream().collect(Collectors.toMap(AuthorMerger::generateAuthorkey, Arrays::asList, (a, b) -> { +// a.addAll(b); +// return a; +// })); +// +// Map> orcidClusters = baseAuthor.stream().collect(Collectors.toMap(AuthorMerger::generateAuthorkey, Arrays::asList, (a, b) -> { +// a.addAll(b); +// return a; +// })); +// +// System.out.println(pubClusters.keySet().size()); +// System.out.println(orcidClusters.keySet().size()); +// +// +// +// +// return null; +// +// +// } + + static int hammingDist(String str1, String str2) { + if (str1.length() != str2.length()) + return Math.max(str1.length(), str2.length()); + int i = 0, count = 0; + while (i < str1.length()) { + if (str1.charAt(i) != str2.charAt(i)) + count++; + i++; + } + return count; + } + + private static String authorFieldToBeCompared(Author author) { + if (StringUtils.isNotBlank(author.getSurname())) { + return author.getSurname(); + + } + if (StringUtils.isNotBlank(author.getFullname())) { + return author.getFullname(); + } + return null; + } + + public static boolean checkSimilarity3(final Author left, final Author right) { + + if (StringUtils.isNotBlank(left.getSurname()) && StringUtils.isNotBlank(left.getName()) + && + StringUtils.isNotBlank(right.getSurname()) && StringUtils.isNotBlank(right.getName()) + + ) + return left.getSurname().equalsIgnoreCase(right.getSurname()) + && left.getName().substring(0, 1).equalsIgnoreCase(right.getName().substring(0, 1)); + + final Person pl = parse(left); + final Person pr = parse(right); + + // If one of them didn't have a surname the match is false + if (!(pl.getSurname() != null && pl.getSurname().stream().anyMatch(StringUtils::isNotBlank) && + pr.getSurname() != null && pr.getSurname().stream().anyMatch(StringUtils::isNotBlank))) + return false; + + // The Authors have one surname in common + if (pl.getSurname().stream().anyMatch(sl -> pr.getSurname().stream().anyMatch(sr -> sr.equalsIgnoreCase(sl)))) { + + // If one of them has only a surname and is the same we can say that they are the same author + if ((pl.getName() == null || pl.getName().stream().allMatch(StringUtils::isBlank)) || + (pr.getName() == null || pr.getName().stream().allMatch(StringUtils::isBlank))) + return true; + // The authors have the same initials of Name in common + if (pl + .getName() + .stream() + .anyMatch( + nl -> pr + .getName() + .stream() + .anyMatch(nr -> nr.substring(0, 1).equalsIgnoreCase(nl.substring(0, 1))))) + return true; + } + return false; + } + + public static boolean checkSimilarity2(final Author left, final Author right) { + final Person pl = parse(left); + final Person pr = parse(right); + + // If one of them didn't have a surname the match is false + if (!(pl.getSurname() != null && pl.getSurname().stream().anyMatch(StringUtils::isNotBlank) && + pr.getSurname() != null && pr.getSurname().stream().anyMatch(StringUtils::isNotBlank))) + return false; + + // The Authors have one surname in common + if (pl.getSurname().stream().anyMatch(sl -> pr.getSurname().stream().anyMatch(sr -> sr.equalsIgnoreCase(sl)))) { + + // If one of them has only a surname and is the same we can say that they are the same author + if ((pl.getName() == null || pl.getName().stream().allMatch(StringUtils::isBlank)) || + (pr.getName() == null || pr.getName().stream().allMatch(StringUtils::isBlank))) + return true; + // The authors have the same initials of Name in common + if (pl + .getName() + .stream() + .anyMatch( + nl -> pr + .getName() + .stream() + .anyMatch(nr -> nr.substring(0, 1).equalsIgnoreCase(nl.substring(0, 1))))) + return true; + } + return false; + } + + public static boolean checkSimilarity(final Author left, final Author right) { + + if (left.getSurname() == null && left.getFullname() == null) + return false; + if (right.getSurname() == null && right.getFullname() == null) + return false; + + // The Authors have the same surname, or we are tolerant from 1 different char(lets say 1 Typo) + if (StringUtils.isNotBlank(left.getSurname()) && StringUtils.isNotBlank(right.getSurname())) { + if (left.getSurname().equalsIgnoreCase(right.getSurname()) + || hammingDist(left.getSurname().toLowerCase(), right.getSurname().toLowerCase()) < 2) { + // IN case on of the two Authors has no given Name the match is true + if (StringUtils.isBlank(left.getName()) || StringUtils.isBlank(right.getName())) + return true; + // If the surname is correct, and they have the same name or the name starts with the same Letter we can + // say is the same author + if (left.getName().equalsIgnoreCase(right.getName()) + || left.getName().substring(0, 1).equalsIgnoreCase(right.getName().substring(0, 1))) + return true; + } + // Different SURNAME + else { + return false; + } + } else { + // This is the case where the two authors have or the surname or the fullname + // get the first not null of the surname or fullname of both + final String l = authorFieldToBeCompared(left); + final String r = authorFieldToBeCompared(right); + if (l == null || r == null) + return false; + // The same length means they are the same field + if (l.length() == r.length()) { + return normalize(l).equals(normalize(r)); + } + // In this case probably l contains the surname and r contains the fullname + if (l.length() < r.length()) + return normalize(r).contains(normalize(l)); + // In this case probably l contains the fullname and r contains the surname + return normalize(l).contains(normalize(r)); + } + return false; + } + + public static List enrichOrcid2(List baseAuthor, List orcidAuthor) { + + final Integer match_itm = 0; + if (baseAuthor == null || baseAuthor.isEmpty()) + return orcidAuthor; + + if (orcidAuthor == null || orcidAuthor.isEmpty()) + return baseAuthor; + + if (baseAuthor.size() == 1 && orcidAuthor.size() > 10) + return baseAuthor; + + final List oAuthor = new ArrayList<>(); + oAuthor.addAll(orcidAuthor); + + baseAuthor.forEach(ba -> { + Optional aMatch = oAuthor.stream().filter(oa -> checkSimilarity2(ba, oa)).findFirst(); + if (aMatch.isPresent()) { + final Author sameAuthor = aMatch.get(); + addPid(ba, sameAuthor.getPid()); + oAuthor.remove(sameAuthor); + } + }); + return baseAuthor; + } + + public static List enrichOrcid(List baseAuthor, List orcidAuthor) { + + if (baseAuthor == null || baseAuthor.isEmpty()) + return orcidAuthor; + + if (orcidAuthor == null || orcidAuthor.isEmpty()) + return baseAuthor; + + if (baseAuthor.size() == 1 && orcidAuthor.size() > 10) + return baseAuthor; + + final Double similarityMatrix[][] = new Double[baseAuthor.size()][orcidAuthor.size()]; + + final List maxColums = new ArrayList<>(); + + for (int i = 0; i < orcidAuthor.size(); i++) + maxColums.add(new SimilarityCellInfo()); + + for (int i = 0; i < baseAuthor.size(); i++) { + for (int j = 0; j < orcidAuthor.size(); j++) { + similarityMatrix[i][j] = sim(baseAuthor.get(i), orcidAuthor.get(j)); + if (maxColums.get(j).maxColumnSimilarity < similarityMatrix[i][j]) + maxColums.get(j).setValues(i, j, similarityMatrix[i][j]); + } + } + maxColums + .stream() + .sorted() + .filter(si -> si.maxColumnSimilarity > 0.85) + .forEach(si -> addPid(baseAuthor.get(si.authorPosition), orcidAuthor.get(si.orcidPosition).getPid())); + return baseAuthor; + + } + + private static void addPid(final Author a, final List pids) { + + if (a.getPid() == null) { + a.setPid(new ArrayList<>()); + } + + a.getPid().addAll(pids); + + } + public static String pidToComparableString(StructuredProperty pid) { final String classid = pid.getQualifier().getClassid() != null ? pid.getQualifier().getClassid().toLowerCase() : ""; @@ -171,7 +461,7 @@ public class AuthorMerger { } } - private static String normalize(final String s) { + public static String normalize(final String s) { String[] normalized = nfd(s) .toLowerCase() // do not compact the regexes in a single expression, would cause StackOverflowError diff --git a/dhp-common/src/test/java/eu/dnetlib/oa/merge/AuthorMergerTest.java b/dhp-common/src/test/java/eu/dnetlib/oa/merge/AuthorMergerTest.java new file mode 100644 index 000000000..7f8d673d1 --- /dev/null +++ b/dhp-common/src/test/java/eu/dnetlib/oa/merge/AuthorMergerTest.java @@ -0,0 +1,125 @@ + +package eu.dnetlib.oa.merge; + +import static org.junit.jupiter.api.Assertions.*; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +import org.junit.jupiter.api.Test; +import org.junit.platform.commons.util.StringUtils; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; + +import eu.dnetlib.dhp.oa.merge.AuthorMerger; +import eu.dnetlib.dhp.schema.oaf.Author; + +public class AuthorMergerTest { + + @Test + public void testNormalization() { + + assertEquals("bruzzolasandro", AuthorMerger.normalizeFullName("Sandro, La Bruzzo")); + assertEquals("baglionimiriam", AuthorMerger.normalizeFullName("Miriam Baglioni")); + assertEquals("baglionimiriam", AuthorMerger.normalizeFullName("Miriam ;Baglioni,")); + + } + + public void testEnrcichAuthor() throws Exception { + final ObjectMapper mapper = new ObjectMapper(); + + BufferedReader pr = new BufferedReader(new InputStreamReader( + AuthorMergerTest.class.getResourceAsStream("/eu/dnetlib/dhp/oa/merge/authors_publication.json"))); + BufferedReader or = new BufferedReader(new InputStreamReader( + AuthorMergerTest.class.getResourceAsStream("/eu/dnetlib/dhp/oa/merge/authors_orcid.json"))); + + TypeReference> aclass = new TypeReference>() { + }; + String pubLine; + + int i = 0; + while ((pubLine = pr.readLine()) != null) { + final String pubId = pubLine; + final String MatchPidOrcid = or.readLine(); + final String pubOrcid = or.readLine(); + + final String data = pr.readLine(); + + if (StringUtils.isNotBlank(data)) { + List publicationAuthors = mapper.readValue(data, aclass); + List orcidAuthors = mapper.readValue(or.readLine(), aclass); + System.out.printf("OAF ID = %s \n", pubId); + System.out.printf("ORCID Intersected ID = %s \n", pubOrcid); + System.out.printf("OAF Author Size = %d \n", publicationAuthors.size()); + System.out.printf("Oricd Author Size = %d \n", orcidAuthors.size()); + System.out.printf("Oricd Matched PID = %s \n", MatchPidOrcid); + + long originalAuthorWithPiD = publicationAuthors + .stream() + .filter( + a -> a.getPid() != null && a + .getPid() + .stream() + .anyMatch( + p -> p.getQualifier() != null + && p.getQualifier().getClassid().toLowerCase().contains("orcid"))) + .count(); + long start = System.currentTimeMillis(); + +// final List enrichedList = AuthorMerger.enrichOrcid(publicationAuthors, orcidAuthors); + final List enrichedList = AuthorMerger.enrichOrcid2(publicationAuthors, orcidAuthors); + + long enrichedAuthorWithPid = enrichedList + .stream() + .filter( + a -> a.getPid() != null && a + .getPid() + .stream() + .anyMatch( + p -> p.getQualifier() != null + && p.getQualifier().getClassid().toLowerCase().contains("orcid"))) + .count(); + + long totalTime = (System.currentTimeMillis() - start) / 1000; + System.out + .printf( + "Enriched authors in %d seconds from %d pid to %d pid \n", totalTime, originalAuthorWithPiD, + enrichedAuthorWithPid); + + System.out.println("================="); + + if (++i > 30) + break; + } + + } + + } + + @Test + public void checkSimilarityTest() { + final Author left = new Author(); + left.setSurname("Wu"); + left.setName("M."); + left.setFullname("Wu, M."); + + System.out.println(AuthorMerger.normalizeFullName(left.getFullname())); + + final Author right = new Author(); + right.setName("Xin"); + right.setSurname("Wu"); + right.setFullname("Xin Wu"); +// System.out.println(AuthorMerger.normalize(right.getFullname())); + boolean same = AuthorMerger.checkSimilarity2(left, right); + + assertFalse(same); + + } + +} diff --git a/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/collection/orcid/DownloadORCIDTest.java b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/collection/orcid/DownloadORCIDTest.java index be5555fc0..868f4e92d 100644 --- a/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/collection/orcid/DownloadORCIDTest.java +++ b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/collection/orcid/DownloadORCIDTest.java @@ -32,45 +32,6 @@ import eu.dnetlib.dhp.parser.utility.VtdException; public class DownloadORCIDTest { private final Logger log = LoggerFactory.getLogger(DownloadORCIDTest.class); -// public void test() throws Exception { -// -// Configuration conf = new Configuration(); -// // Set FileSystem URI -//// conf.set("fs.defaultFS", "file://"); -// // Because of Maven -// conf.set("fs.hdfs.impl", org.apache.hadoop.hdfs.DistributedFileSystem.class.getName()); -// conf.set("fs.file.impl", org.apache.hadoop.fs.LocalFileSystem.class.getName()); -// -// System.setProperty("hadoop.home.dir", "file:///Users/sandro/orcid/"); -// -// final FileSystem fileSystem = FileSystem.get(conf); -// -// new ExtractORCIDDump(fileSystem).run("/Users/sandro/orcid/", "/Users/sandro/orcid/extracted"); -// -//// final GZIPInputStream gzip = new GZIPInputStream(Files.newInputStream(Paths.get("/Users/sandro/orcid/ORCID_2023_10_activities_1.tar.gz"))); -//// try(final TarArchiveInputStream tais = new TarArchiveInputStream(gzip)) { -//// -//// TarArchiveEntry entry; -//// while ((entry = tais.getNextTarEntry()) != null) { -//// -//// if (entry.isFile() && entry.getName().contains("employments")) { -//// -//// System.out.println(entry.getName()); -//// final String [] items = entry.getName().split("/"); -//// -//// final String res = IOUtils.toString(new BufferedReader(new InputStreamReader(tais))); -//// System.out.println("res = " + res); -//// -//// System.out.println(items[items.length-2]); -//// break; -//// } -//// -//// -//// } -//// } -// -// } - @Test public void testSummary() throws Exception { final String xml = IOUtils diff --git a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/enrich/orcid/enrich_graph_orcid_parameters.json b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/enrich/orcid/enrich_graph_orcid_parameters.json new file mode 100644 index 000000000..765c0e8ff --- /dev/null +++ b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/enrich/orcid/enrich_graph_orcid_parameters.json @@ -0,0 +1,26 @@ +[ + { + "paramName": "mt", + "paramLongName": "master", + "paramDescription": "should be local or yarn", + "paramRequired": true + }, + { + "paramName": "op", + "paramLongName": "orcidPath", + "paramDescription": "the path of the orcid Table generated by the dump", + "paramRequired": true + }, + { + "paramName": "gp", + "paramLongName": "graphPath", + "paramDescription": "the path of the graph we want to apply enrichment", + "paramRequired": true + }, + { + "paramName": "tp", + "paramLongName": "targetPath", + "paramDescription": "the output path of the graph enriched", + "paramRequired": true + } +] \ No newline at end of file diff --git a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/enrich/orcid/oozie_app/config-default.xml b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/enrich/orcid/oozie_app/config-default.xml new file mode 100644 index 000000000..8a7bc8942 --- /dev/null +++ b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/enrich/orcid/oozie_app/config-default.xml @@ -0,0 +1,34 @@ + + + jobTracker + yarnRM + + + nameNode + hdfs://nameservice1 + + + oozie.use.system.libpath + true + + + oozie.action.sharelib.for.spark + spark2 + + + hiveMetastoreUris + thrift://iis-cdh5-test-m3.ocean.icm.edu.pl:9083 + + + hiveJdbcUrl + jdbc:hive2://iis-cdh5-test-m3.ocean.icm.edu.pl:10000 + + + hiveDbName + openaire + + + oozie.launcher.mapreduce.user.classpath.first + true + + \ No newline at end of file diff --git a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/enrich/orcid/oozie_app/workflow.xml b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/enrich/orcid/oozie_app/workflow.xml new file mode 100644 index 000000000..1284cceda --- /dev/null +++ b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/enrich/orcid/oozie_app/workflow.xml @@ -0,0 +1,52 @@ + + + + orcidPath + the path of the orcid Table generated by the dump + + + graphPath + the path of the graph we want to apply enrichment + + + targetPath + the output path of the graph enriched + + + + + + + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + + + + yarn + cluster + Enrich Graph with ORCID + eu.dnetlib.dhp.enrich.orcid.SparkEnrichGraphWithOrcidAuthors + dhp-graph-mapper-${projectVersion}.jar + + --executor-memory=${sparkExecutorMemory} + --executor-cores=${sparkExecutorCores} + --driver-memory=${sparkDriverMemory} + --conf spark.executor.memoryOverhead=2g + --conf spark.sql.shuffle.partitions=3000 + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + + --orcidPath${orcidPath} + --targetPath${targetPath} + --graphPath${graphPath}/publication + --masteryarn + + + + + + + + \ No newline at end of file diff --git a/dhp-workflows/dhp-graph-mapper/src/main/scala/eu/dnetlib/dhp/enrich/orcid/AuthorEnricher.scala b/dhp-workflows/dhp-graph-mapper/src/main/scala/eu/dnetlib/dhp/enrich/orcid/AuthorEnricher.scala new file mode 100644 index 000000000..a67de4b95 --- /dev/null +++ b/dhp-workflows/dhp-graph-mapper/src/main/scala/eu/dnetlib/dhp/enrich/orcid/AuthorEnricher.scala @@ -0,0 +1,37 @@ +package eu.dnetlib.dhp.enrich.orcid + +import eu.dnetlib.dhp.schema.oaf.{Author, Publication} +import eu.dnetlib.dhp.schema.sx.OafUtils +import org.apache.spark.sql.Row + +import scala.collection.JavaConverters._ + +object AuthorEnricher extends Serializable { + + def createAuthor(givenName: String, familyName: String, orcid: String): Author = { + val a = new Author + a.setName(givenName) + a.setSurname(familyName) + a.setFullname(s"$givenName $familyName") + a.setPid(List(OafUtils.createSP(orcid, "ORCID", "ORCID")).asJava) + a + + } + + def toOAFAuthor(r: Row): java.util.List[Author] = { + r.getList[Row](1) + .asScala + .map(s => createAuthor(s.getAs[String]("givenName"), s.getAs[String]("familyName"), s.getAs[String]("orcid"))) + .toList + .asJava + } + +// def enrichAuthor(p:Publication,r:Row): Unit = { +// val k:Map[String, OAuthor] =r.getList[Row](1).asScala.map(s => (s.getAs[String]("orcid"), OAuthor(s.getAs[String]("givenName") ,s.getAs[String]("familyName") ))).groupBy(_._1).mapValues(_.map(_._2).head) +// println(k) +// +// +// +// } + +} diff --git a/dhp-workflows/dhp-graph-mapper/src/main/scala/eu/dnetlib/dhp/enrich/orcid/SparkEnrichGraphWithOrcidAuthors.scala b/dhp-workflows/dhp-graph-mapper/src/main/scala/eu/dnetlib/dhp/enrich/orcid/SparkEnrichGraphWithOrcidAuthors.scala new file mode 100644 index 000000000..e190b2b33 --- /dev/null +++ b/dhp-workflows/dhp-graph-mapper/src/main/scala/eu/dnetlib/dhp/enrich/orcid/SparkEnrichGraphWithOrcidAuthors.scala @@ -0,0 +1,119 @@ +package eu.dnetlib.dhp.enrich.orcid + +import com.fasterxml.jackson.databind.ObjectMapper +import eu.dnetlib.dhp.application.AbstractScalaApplication +import eu.dnetlib.dhp.oa.merge.AuthorMerger +import eu.dnetlib.dhp.schema.oaf.{Author, DataInfo, Instance, Publication, StructuredProperty} +import org.apache.spark.sql.{Dataset, Encoder, Encoders, Row, SaveMode, SparkSession} +import org.apache.spark.sql.functions.{col, collect_set, concat, explode, expr, first, flatten, lower, size, struct} +import org.slf4j.{Logger, LoggerFactory} +import org.apache.spark.sql.types._ + +class SparkEnrichGraphWithOrcidAuthors(propertyPath: String, args: Array[String], log: Logger) + extends AbstractScalaApplication(propertyPath, args, log: Logger) { + + /** Here all the spark applications runs this method + * where the whole logic of the spark node is defined + */ + override def run(): Unit = { + val graphPath = parser.get("graphPath") + log.info(s"graphPath is '$graphPath'") + val orcidPath = parser.get("orcidPath") + log.info(s"orcidPath is '$orcidPath'") + val targetPath = parser.get("targetPath") + log.info(s"targetPath is '$targetPath'") + enrichResult(spark, graphPath, orcidPath, targetPath) + } + + def enrichResult(spark: SparkSession, graphPath: String, orcidPath: String, outputPath: String): Unit = { + val orcidPublication = generateOrcidTable(spark, orcidPath) + implicit val publicationEncoder = Encoders.bean(classOf[Publication]) + + val aschema = new StructType() + .add("id", StringType) + .add("dataInfo", Encoders.bean(classOf[DataInfo]).schema) + .add( + "author",Encoders.bean(classOf[Author]).schema + + ) + + val schema = new StructType() + .add("id", StringType) + .add("dataInfo", Encoders.bean(classOf[DataInfo]).schema) + .add( + "instance", + ArrayType(new StructType().add("pid", ArrayType(Encoders.bean(classOf[StructuredProperty]).schema))) + ) + val entities = spark.read + .schema(schema) + .json(graphPath) + .where("datainfo.deletedbyinference = false") + .drop("datainfo") + .withColumn("instances", explode(col("instance"))) + .withColumn("pids", explode(col("instances.pid"))) + .select( + col("pids.qualifier.classid").alias("pid_schema"), + col("pids.value").alias("pid_value"), + col("id").alias("dnet_id") + ) + val orcidDnet = orcidPublication + .join( + entities, + lower(col("schema")).equalTo(lower(col("pid_schema"))) && + lower(col("value")).equalTo(lower(col("pid_value"))), + "inner" + ) + .groupBy(col("dnet_id")) + .agg(collect_set(orcidPublication("author")).alias("orcid_authors")) + .select("dnet_id", "orcid_authors") + .cache() + + val publication = spark.read.schema(publicationEncoder.schema).json(graphPath).as[Publication] + + publication + .joinWith(orcidDnet, publication("id").equalTo(orcidDnet("dnet_id")), "left") + .map { + case (p: Publication, null) => { + p + } + case (p: Publication, r: Row) => + p.setAuthor(AuthorMerger.enrichOrcid2(p.getAuthor, AuthorEnricher.toOAFAuthor(r))) + p + } + .write + .mode(SaveMode.Overwrite) + .option("compression", "gzip") + .json(outputPath) + } + + def generateOrcidTable(spark: SparkSession, inputPath: String): Dataset[Row] = { + val orcidAuthors = + spark.read.load(s"$inputPath/Authors").select("orcid", "familyName", "givenName", "creditName", "otherNames") + val orcidWorks = spark.read + .load(s"$inputPath/Works") + .select(col("orcid"), explode(col("pids")).alias("identifier")) + .where( + "identifier.schema = 'doi' or identifier.schema ='pmid' or identifier.schema ='pmc' or identifier.schema ='arxiv' or identifier.schema ='handle'" + ) + orcidAuthors + .join(orcidWorks, orcidAuthors("orcid").equalTo(orcidWorks("orcid"))) + .select( + col("identifier.schema").alias("schema"), + col("identifier.value").alias("value"), + struct(orcidAuthors("orcid").alias("orcid"), col("givenName"), col("familyName")).alias("author") + ) + } +} + +object SparkEnrichGraphWithOrcidAuthors { + + val log: Logger = LoggerFactory.getLogger(SparkEnrichGraphWithOrcidAuthors.getClass) + + def main(args: Array[String]): Unit = { + + new SparkEnrichGraphWithOrcidAuthors("/eu/dnetlib/dhp/enrich/orcid/enrich_graph_orcid_parameters.json", args, log) + .initialize() + .run() + + } +} diff --git a/dhp-workflows/dhp-graph-mapper/src/test/scala/eu/dnetlib/dhp/enrich/orcid/EnrichOrcidTest.scala b/dhp-workflows/dhp-graph-mapper/src/test/scala/eu/dnetlib/dhp/enrich/orcid/EnrichOrcidTest.scala new file mode 100644 index 000000000..0ddb7c0aa --- /dev/null +++ b/dhp-workflows/dhp-graph-mapper/src/test/scala/eu/dnetlib/dhp/enrich/orcid/EnrichOrcidTest.scala @@ -0,0 +1,12 @@ +package eu.dnetlib.dhp.enrich.orcid + +import org.apache.spark.SparkConf +import org.apache.spark.sql.SparkSession +import org.junit.jupiter.api.Test +import org.slf4j.{Logger, LoggerFactory} + +class EnrichOrcidTest { + + val log: Logger = LoggerFactory.getLogger(getClass) + +} From 48e0427a234b1bdee63f21d6c8879f10ceeba3da Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Mon, 27 Nov 2023 15:10:27 +0100 Subject: [PATCH 361/449] changed the parameter from production to baseURL. Fixed issue in tagging configuration --- .../eu/dnetlib/dhp/api/QueryCommunityAPI.java | 10 +- .../dnetlib/dhp/bulktag/SparkBulkTagJob.java | 1 + .../dhp/bulktag/input_bulkTag_parameters.json | 8 +- ...t_preparecommunitytoresult_parameters.json | 8 +- ...t_preparecommunitytoresult_parameters.json | 6 +- .../dnetlib/dhp/bulktag/BulkTagJobTest.java | 8 +- .../tagging_conf_remove.xml | 182 +++++++++--------- 7 files changed, 112 insertions(+), 111 deletions(-) diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/QueryCommunityAPI.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/QueryCommunityAPI.java index dc10fce15..b7c0164c1 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/QueryCommunityAPI.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/QueryCommunityAPI.java @@ -34,32 +34,32 @@ public class QueryCommunityAPI { public static String communities(String baseURL) throws IOException { - return get(baseURL + "community/communities"); + return get(baseURL + "communities"); } public static String community(String id, String baseURL ) throws IOException { - return get(baseURL + "community/" + id); + return get(baseURL + id); } public static String communityDatasource(String id, String baseURL ) throws IOException { - return get(baseURL + "community/" + id + "/contentproviders"); + return get(baseURL + id + "/contentproviders"); } public static String communityPropagationOrganization(String id, String baseURL ) throws IOException { - return get(baseURL + "community/" + id + "/propagationOrganizations"); + return get(baseURL + id + "/propagationOrganizations"); } public static String communityProjects(String id, String page, String size, String baseURL ) throws IOException { - return get(baseURL + "community/" + id + "/projects/" + page + "/" + size); + return get(baseURL + id + "/projects/" + page + "/" + size); } diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/SparkBulkTagJob.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/SparkBulkTagJob.java index d972cecac..f01063955 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/SparkBulkTagJob.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/SparkBulkTagJob.java @@ -80,6 +80,7 @@ public class SparkBulkTagJob { cc = CommunityConfigurationFactory.newInstance(taggingConf); } else { cc = Utils.getCommunityConfiguration(baseURL); + log.info(OBJECT_MAPPER.writeValueAsString(cc)); } runWithSparkSession( diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/input_bulkTag_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/input_bulkTag_parameters.json index dbe2d088f..d88904cd9 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/input_bulkTag_parameters.json +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/input_bulkTag_parameters.json @@ -34,10 +34,10 @@ }, { - "paramName": "p", - "paramLongName": "production", - "paramDescription": "this parameter is intended for testing purposes only. It is a possible tagging configuration obtained via the XQUERY. Intended to be removed", - "paramRequired": true + "paramName": "bu", + "paramLongName": "baseURL", + "paramDescription": "this parameter is to specify the api to be queried (beta or production)", + "paramRequired": false } ] \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/input_preparecommunitytoresult_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/input_preparecommunitytoresult_parameters.json index 8b6291e5d..3601db7ac 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/input_preparecommunitytoresult_parameters.json +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/input_preparecommunitytoresult_parameters.json @@ -24,10 +24,10 @@ "paramRequired": true }, { - "paramName": "p", - "paramLongName": "production", - "paramDescription": "the path used to store temporary output files", - "paramRequired": true + "paramName": "bu", + "paramLongName": "baseURL", + "paramDescription": "the base URL to the community API to use", + "paramRequired": false } ] \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromproject/input_preparecommunitytoresult_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromproject/input_preparecommunitytoresult_parameters.json index 9a50c79fa..cbc01c2d5 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromproject/input_preparecommunitytoresult_parameters.json +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromproject/input_preparecommunitytoresult_parameters.json @@ -19,10 +19,10 @@ "paramRequired": true }, { - "paramName": "p", - "paramLongName": "production", + "paramName": "bu", + "paramLongName": "baseURL", "paramDescription": "the path used to store temporary output files", - "paramRequired": true + "paramRequired": false } ] \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/BulkTagJobTest.java b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/BulkTagJobTest.java index ba0c6b252..d193716a8 100644 --- a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/BulkTagJobTest.java +++ b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/BulkTagJobTest.java @@ -533,6 +533,7 @@ public class BulkTagJobTest { + "where MyD.inferenceprovenance = 'bulktagging'"; org.apache.spark.sql.Dataset idExplodeCommunity = spark.sql(query); + Assertions.assertEquals(7, idExplodeCommunity.count()); Assertions @@ -1572,11 +1573,10 @@ public class BulkTagJobTest { "-isSparkSessionManaged", Boolean.FALSE.toString(), "-sourcePath", getClass().getResource("/eu/dnetlib/dhp/bulktag/sample/dataset/no_updates/").getPath(), - "-taggingConf", taggingConf, - "-outputPath", workingDir.toString() + "/", - "-production", Boolean.TRUE.toString(), - "-pathMap", pathMap +// "-baseURL", "https://services.openaire.eu/openaire/community/", + "-pathMap", pathMap, + "-taggingConf", taggingConf }); final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); diff --git a/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/communityconfiguration/tagging_conf_remove.xml b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/communityconfiguration/tagging_conf_remove.xml index edd6c7e0a..21c7d452f 100644 --- a/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/communityconfiguration/tagging_conf_remove.xml +++ b/dhp-workflows/dhp-enrichment/src/test/resources/eu/dnetlib/dhp/bulktag/communityconfiguration/tagging_conf_remove.xml @@ -26,7 +26,7 @@ - re3data_____::a507cdacc5bbcc08761c92185dee5cab + 10|re3data_____::a507cdacc5bbcc08761c92185dee5cab @@ -140,39 +140,39 @@ - re3data_____::9ebe127e5f3a0bf401875690f3bb6b81 + 10|re3data_____::9ebe127e5f3a0bf401875690f3bb6b81 - doajarticles::c6cd4b532e12868c1d760a8d7cda6815 + 10|doajarticles::c6cd4b532e12868c1d760a8d7cda6815 - doajarticles::a6de4499bb87bf3c01add0a9e2c9ed0b + 10|doajarticles::a6de4499bb87bf3c01add0a9e2c9ed0b - doajarticles::6eb31d13b12bc06bbac06aef63cf33c9 + 10|doajarticles::6eb31d13b12bc06bbac06aef63cf33c9 - doajarticles::0da84e9dfdc8419576169e027baa8028 + 10|doajarticles::0da84e9dfdc8419576169e027baa8028 - re3data_____::84e123776089ce3c7a33db98d9cd15a8 + 10|re3data_____::84e123776089ce3c7a33db98d9cd15a8 - openaire____::c5502a43e76feab55dd00cf50f519125 + 10|openaire____::c5502a43e76feab55dd00cf50f519125 - re3data_____::a48f09c562b247a9919acfe195549b47 + 10|re3data_____::a48f09c562b247a9919acfe195549b47 - opendoar____::97275a23ca44226c9964043c8462be96 + 10|opendoar____::97275a23ca44226c9964043c8462be96 @@ -287,55 +287,55 @@ - doajarticles::8cec81178926caaca531afbd8eb5d64c + 10|doajarticles::8cec81178926caaca531afbd8eb5d64c - doajarticles::0f7a7f30b5400615cae1829f3e743982 + 10|doajarticles::0f7a7f30b5400615cae1829f3e743982 - doajarticles::9740f7f5af3e506d2ad2c215cdccd51a + 10|doajarticles::9740f7f5af3e506d2ad2c215cdccd51a - doajarticles::9f3fbaae044fa33cb7069b72935a3254 + 10|doajarticles::9f3fbaae044fa33cb7069b72935a3254 - doajarticles::cb67f33eb9819f5c624ce0313957f6b3 + 10|doajarticles::cb67f33eb9819f5c624ce0313957f6b3 - doajarticles::e21c97cbb7a209afc75703681c462906 + 10|doajarticles::e21c97cbb7a209afc75703681c462906 - doajarticles::554cde3be9e5c4588b4c4f9f503120cb + 10|doajarticles::554cde3be9e5c4588b4c4f9f503120cb - tubitakulakb::11e22f49e65b9fd11d5b144b93861a1b + 10|tubitakulakb::11e22f49e65b9fd11d5b144b93861a1b - doajarticles::57c5d3837da943e93b28ec4db82ec7a5 + 10|doajarticles::57c5d3837da943e93b28ec4db82ec7a5 - doajarticles::a186f5ddb8e8c7ecc992ef51cf3315b1 + 10|doajarticles::a186f5ddb8e8c7ecc992ef51cf3315b1 - doajarticles::e21c97cbb7a209afc75703681c462906 + 10|doajarticles::e21c97cbb7a209afc75703681c462906 - doajarticles::dca64612dfe0963fffc119098a319957 + 10|doajarticles::dca64612dfe0963fffc119098a319957 - doajarticles::dd70e44479f0ade25aa106aef3e87a0a + 10|doajarticles::dd70e44479f0ade25aa106aef3e87a0a @@ -406,27 +406,27 @@ - re3data_____::5b9bf9171d92df854cf3c520692e9122 + 10|re3data_____::5b9bf9171d92df854cf3c520692e9122 - doajarticles::c7d3de67dc77af72f6747157441252ec + 10|doajarticles::c7d3de67dc77af72f6747157441252ec - re3data_____::8515794670370f49c1d176c399c714f5 + 10|re3data_____::8515794670370f49c1d176c399c714f5 - doajarticles::d640648c84b10d425f96f11c3de468f3 + 10|doajarticles::d640648c84b10d425f96f11c3de468f3 - doajarticles::0c0e74daa5d95504eade9c81ebbd5b8a + 10|doajarticles::0c0e74daa5d95504eade9c81ebbd5b8a - rest________::fb1a3d4523c95e63496e3bc7ba36244b + 10|rest________::fb1a3d4523c95e63496e3bc7ba36244b @@ -743,27 +743,27 @@ - opendoar____::1a551829d50f1400b0dab21fdd969c04 + 10|opendoar____::1a551829d50f1400b0dab21fdd969c04 - opendoar____::49af6c4e558a7569d80eee2e035e2bd7 + 10|opendoar____::49af6c4e558a7569d80eee2e035e2bd7 - opendoar____::0266e33d3f546cb5436a10798e657d97 + 10|opendoar____::0266e33d3f546cb5436a10798e657d97 - opendoar____::fd4c2dc64ccb8496e6f1f94c85f30d06 + 10|opendoar____::fd4c2dc64ccb8496e6f1f94c85f30d06 - opendoar____::41bfd20a38bb1b0bec75acf0845530a7 + 10|opendoar____::41bfd20a38bb1b0bec75acf0845530a7 - opendoar____::87ae6fb631f7c8a627e8e28785d9992d + 10|opendoar____::87ae6fb631f7c8a627e8e28785d9992d @@ -983,11 +983,11 @@ - opendoar____::7e7757b1e12abcb736ab9a754ffb617a + 10|opendoar____::7e7757b1e12abcb736ab9a754ffb617a {"criteria":[{"constraint":[{"verb":"contains","field":"contributor","value":"DARIAH"}]}]} - opendoar____::96da2f590cd7246bbde0051047b0d6f7 + 10|opendoar____::96da2f590cd7246bbde0051047b0d6f7 {"criteria":[{"constraint":[{"verb":"contains","field":"contributor","value":"DARIAH"}]}]} @@ -1166,87 +1166,87 @@ - doajarticles::1c5bdf8fca58937894ad1441cca99b76 + 10|doajarticles::1c5bdf8fca58937894ad1441cca99b76 - doajarticles::b37a634324a45c821687e6e80e6f53b4 + 10|doajarticles::b37a634324a45c821687e6e80e6f53b4 - doajarticles::4bf64f2a104040e4e055cd9594b2d77c + 10|doajarticles::4bf64f2a104040e4e055cd9594b2d77c - doajarticles::479ca537c12755d1868bbf02938a900c + 10|doajarticles::479ca537c12755d1868bbf02938a900c - doajarticles::55f31df96a60e2309f45b7c265fcf7a2 + 10|doajarticles::55f31df96a60e2309f45b7c265fcf7a2 - doajarticles::c52a09891a5301f9986ebbfe3761810c + 10|doajarticles::c52a09891a5301f9986ebbfe3761810c - doajarticles::379807bc7f6c71a227ef1651462c414c + 10|doajarticles::379807bc7f6c71a227ef1651462c414c - doajarticles::36069db531a00b85a2e8fb301f4bdc19 + 10|doajarticles::36069db531a00b85a2e8fb301f4bdc19 - doajarticles::b6a898da311ded96fabf49c520b80d5d + 10|doajarticles::b6a898da311ded96fabf49c520b80d5d - doajarticles::d0753d9180b35a271d8b4a31f449749f + 10|doajarticles::d0753d9180b35a271d8b4a31f449749f - doajarticles::172050a92511838393a3fe237ae47e31 + 10|doajarticles::172050a92511838393a3fe237ae47e31 - doajarticles::301ed96c62abb160a3e29796efe5c95c + 10|doajarticles::301ed96c62abb160a3e29796efe5c95c - doajarticles::0f4f805b3d842f2c7f1b077c3426fa59 + 10|doajarticles::0f4f805b3d842f2c7f1b077c3426fa59 - doajarticles::ba73728b84437b8d48ae287b867c7215 + 10|doajarticles::ba73728b84437b8d48ae287b867c7215 - doajarticles::86faef424d804309ccf45f692523aa48 + 10|doajarticles::86faef424d804309ccf45f692523aa48 - doajarticles::73bd758fa41671de70964c3ecba013af + 10|doajarticles::73bd758fa41671de70964c3ecba013af - doajarticles::e661fc0bdb24af42b740a08f0ddc6cf4 + 10|doajarticles::e661fc0bdb24af42b740a08f0ddc6cf4 - doajarticles::a6d3052047d5dbfbd43d95b4afb0f3d7 + 10|doajarticles::a6d3052047d5dbfbd43d95b4afb0f3d7 - doajarticles::ca61df07089acc53a1569bde6673d82a + 10|doajarticles::ca61df07089acc53a1569bde6673d82a - doajarticles::237dd6f1606600459d0297abd8ed9976 + 10|doajarticles::237dd6f1606600459d0297abd8ed9976 - doajarticles::fba6191177ede7c51ea1cdf58eae7f8b + 10|doajarticles::fba6191177ede7c51ea1cdf58eae7f8b @@ -1345,87 +1345,87 @@ - doajarticles::c6f0ed5fa41e98863e7c73501fe4bd6d + 10|doajarticles::c6f0ed5fa41e98863e7c73501fe4bd6d - doajarticles::ae4c7286c79590f19fdca670156ce816 + 10|doajarticles::ae4c7286c79590f19fdca670156ce816 - doajarticles::0f664bce92ce953e0c7a92068c46bfb3 + 10|doajarticles::0f664bce92ce953e0c7a92068c46bfb3 - doajarticles::00017183dc4c858fb77541985323a4ef + 10|doajarticles::00017183dc4c858fb77541985323a4ef - doajarticles::93b306f458cce3d7aaaf58c0a725f4f9 + 10|doajarticles::93b306f458cce3d7aaaf58c0a725f4f9 - doajarticles::9dbf8fbf3e9fe0fe1fc01e55fbd90bfc + 10|doajarticles::9dbf8fbf3e9fe0fe1fc01e55fbd90bfc - doajarticles::a2bda8785c863279bba4b8f34827b4c9 + 10|doajarticles::a2bda8785c863279bba4b8f34827b4c9 - doajarticles::019a1fcb42c3fea1c1b689df76330b58 + 10|doajarticles::019a1fcb42c3fea1c1b689df76330b58 - doajarticles::0daa8281938831e9c82bfed8b55a2975 + 10|doajarticles::0daa8281938831e9c82bfed8b55a2975 - doajarticles::f67ad6d268162079b3abd51a24468744 + 10|doajarticles::f67ad6d268162079b3abd51a24468744 - doajarticles::c6f0ed5fa41e98863e7c73501fe4bd6d + 10|doajarticles::c6f0ed5fa41e98863e7c73501fe4bd6d - doajarticles::ad114356e196a4a3d84dda59c720dacd + 10|doajarticles::ad114356e196a4a3d84dda59c720dacd - doajarticles::01e8a54fdecaaf354c67a2dd74ae7d4f + 10|doajarticles::01e8a54fdecaaf354c67a2dd74ae7d4f - doajarticles::449305f096b10a9464449ff2d0e10e06 + 10|doajarticles::449305f096b10a9464449ff2d0e10e06 - doajarticles::982c0c0ac378256254cce2fa6572bb6c + 10|doajarticles::982c0c0ac378256254cce2fa6572bb6c - doajarticles::49d6ed47138884566ce93cf0ccb12c02 + 10|doajarticles::49d6ed47138884566ce93cf0ccb12c02 - doajarticles::a98e820dbc2e8ee0fc84ab66f263267c + 10|doajarticles::a98e820dbc2e8ee0fc84ab66f263267c - doajarticles::50b1ce37427b36368f8f0f1317e47f83 + 10|doajarticles::50b1ce37427b36368f8f0f1317e47f83 - doajarticles::f0ec29b7450b2ac5d0ad45327eeb531a + 10|doajarticles::f0ec29b7450b2ac5d0ad45327eeb531a - doajarticles::d8d421d3b0349a7aaa93758b27a54e84 + 10|doajarticles::d8d421d3b0349a7aaa93758b27a54e84 - doajarticles::7ffc35ac5133da01d421ccf8af5b70bc + 10|doajarticles::7ffc35ac5133da01d421ccf8af5b70bc @@ -1454,81 +1454,81 @@ - opendoar____::358aee4cc897452c00244351e4d91f69 + 10|opendoar____::358aee4cc897452c00244351e4d91f69 {"criteria":[{"constraint":[{"verb":"contains_caseinsensitive","field":"title","value":"COVID-19"}]}, {"constraint":[{"verb":"contains_caseinsensitive","field":"title","value":"SARS-CoV-2"}]}, {"constraint":[{"verb":"contains_caseinsensitive","field":"title","value":"2019-nCoV"}}]} - re3data_____::7b0ad08687b2c960d5aeef06f811d5e6 + 10|re3data_____::7b0ad08687b2c960d5aeef06f811d5e6 {"criteria":[{"constraint":[{"verb":"contains_caseinsensitive","field":"title","value":"COVID-19"}]}, {"constraint":[{"verb":"contains_caseinsensitive","field":"title","value":"SARS-CoV-2"}]}, {"constraint":[{"verb":"contains_caseinsensitive","field":"title","value":"2019-nCoV"}]}]} - driver______::bee53aa31dc2cbb538c10c2b65fa5824 + 10|driver______::bee53aa31dc2cbb538c10c2b65fa5824 {"criteria":[{"constraint":[{"verb":"contains_caseinsensitive","field":"title","value":"COVID-19"}]}, {"constraint":[{"verb":"contains_caseinsensitive","field":"title","value":"SARS-CoV-2"}]}, {"constraint":[{"verb":"contains_caseinsensitive","field":"title","value":"2019-nCoV"}]}]} - openaire____::437f4b072b1aa198adcbc35910ff3b98 + 10|openaire____::437f4b072b1aa198adcbc35910ff3b98 {"criteria":[{"constraint":[{"verb":"contains_caseinsensitive","field":"title","value":"COVID-19"}]}, {"constraint":[{"verb":"contains_caseinsensitive","field":"title","value":"SARS-CoV-2"}]}, {"constraint":[{"verb":"contains_caseinsensitive","field":"title","value":"2019-nCoV"}]}]} - openaire____::081b82f96300b6a6e3d282bad31cb6e2 + 10|openaire____::081b82f96300b6a6e3d282bad31cb6e2 {"criteria":[{"constraint":[{"verb":"contains_caseinsensitive","field":"title","value":"COVID-19"}]}, {"constraint":[{"verb":"contains_caseinsensitive","field":"title","value":"SARS-CoV-2"}]}, {"constraint":[{"verb":"contains_caseinsensitive","field":"title","value":"2019-nCoV"}]}]} - openaire____::9e3be59865b2c1c335d32dae2fe7b254 + 10|openaire____::9e3be59865b2c1c335d32dae2fe7b254 {"criteria":[{"constraint":[{"verb":"contains_caseinsensitive","field":"title","value":"COVID-19"}]}, {"constraint":[{"verb":"contains_caseinsensitive","field":"title","value":"SARS-CoV-2"}]}, {"constraint":[{"verb":"contains_caseinsensitive","field":"title","value":"2019-nCoV"}]}]} - opendoar____::8b6dd7db9af49e67306feb59a8bdc52c + 10|opendoar____::8b6dd7db9af49e67306feb59a8bdc52c {"criteria":[{"constraint":[{"verb":"contains_caseinsensitive","field":"title","value":"COVID-19"}]}, {"constraint":[{"verb":"contains_caseinsensitive","field":"title","value":"SARS-CoV-2"}]}, {"constraint":[{"verb":"contains_caseinsensitive","field":"title","value":"2019-nCoV"}]}]} - share_______::4719356ec8d7d55d3feb384ce879ad6c + 10|share_______::4719356ec8d7d55d3feb384ce879ad6c {"criteria":[{"constraint":[{"verb":"contains_caseinsensitive","field":"title","value":"COVID-19"}]}, {"constraint":[{"verb":"contains_caseinsensitive","field":"title","value":"SARS-CoV-2"}]}, {"constraint":[{"verb":"contains_caseinsensitive","field":"title","value":"2019-nCoV"}]}]} - share_______::bbd802baad85d1fd440f32a7a3a2c2b1 + 10|share_______::bbd802baad85d1fd440f32a7a3a2c2b1 {"criteria":[{"constraint":[{"verb":"contains_caseinsensitive","field":"title","value":"COVID-19"}]}, {"constraint":[{"verb":"contains_caseinsensitive","field":"title","value":"SARS-CoV-2"}]}, {"constraint":[{"verb":"contains_caseinsensitive","field":"title","value":"2019-nCoV"}]}]} - opendoar____::6f4922f45568161a8cdf4ad2299f6d23 + 10|opendoar____::6f4922f45568161a8cdf4ad2299f6d23 {"criteria":[{"constraint":[{"verb":"contains_caseinsensitive","field":"title","value":"COVID-19"}]}, {"constraint":[{"verb":"contains_caseinsensitive","field":"title","value":"SARS-CoV-2"}]}, {"constraint":[{"verb":"contains_caseinsensitive","field":"title","value":"2019-nCoV"}]}]} - re3data_____::7980778c78fb4cf0fab13ce2159030dc + 10|re3data_____::7980778c78fb4cf0fab13ce2159030dc {"criteria":[{"constraint":[{"verb":"contains_caseinsensitive","field":"title","value":"SARS-CoV-2"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"title","value":"COVID-19"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"title","value":"2019-nCov"}]}]} - re3data_____::978378def740bbf2bfb420de868c460b + 10|re3data_____::978378def740bbf2bfb420de868c460b {"criteria":[{"constraint":[{"verb":"contains_caseinsensitive","field":"title","value":"SARS-CoV-2"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"title","value":"COVID-19"}]},{"constraint":[{"verb":"contains_caseinsensitive","field":"title","value":"2019-nCov"}]}]} From 8eb70e6657870e0d661a5c8619076bc013eb23ee Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Mon, 27 Nov 2023 15:13:15 +0100 Subject: [PATCH 362/449] refactoring --- .../PrepareAffiliationRelationsTest.java | 4 ++-- .../eu/dnetlib/dhp/api/QueryCommunityAPI.java | 21 ++++++++----------- .../PrepareResultCommunitySet.java | 2 +- .../dnetlib/dhp/bulktag/BulkTagJobTest.java | 2 +- 4 files changed, 13 insertions(+), 16 deletions(-) diff --git a/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelationsTest.java b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelationsTest.java index e2639996c..b87738879 100644 --- a/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelationsTest.java +++ b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelationsTest.java @@ -79,8 +79,8 @@ public class PrepareAffiliationRelationsTest { .getPath(); String pubmedAffiliationRelationsPath = getClass() - .getResource("/eu/dnetlib/dhp/actionmanager/bipaffiliations/doi_to_ror.json") - .getPath(); + .getResource("/eu/dnetlib/dhp/actionmanager/bipaffiliations/doi_to_ror.json") + .getPath(); String outputPath = workingDir.toString() + "/actionSet"; diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/QueryCommunityAPI.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/QueryCommunityAPI.java index b7c0164c1..cf33c6509 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/QueryCommunityAPI.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/QueryCommunityAPI.java @@ -15,8 +15,6 @@ import org.jetbrains.annotations.NotNull; */ public class QueryCommunityAPI { - - private static String get(String geturl) throws IOException { URL url = new URL(geturl); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); @@ -34,32 +32,31 @@ public class QueryCommunityAPI { public static String communities(String baseURL) throws IOException { - return get(baseURL + "communities"); + return get(baseURL + "communities"); } - public static String community(String id, String baseURL ) throws IOException { + public static String community(String id, String baseURL) throws IOException { - return get(baseURL + id); + return get(baseURL + id); } - public static String communityDatasource(String id, String baseURL ) throws IOException { - - return get(baseURL + id + "/contentproviders"); + public static String communityDatasource(String id, String baseURL) throws IOException { + return get(baseURL + id + "/contentproviders"); } - public static String communityPropagationOrganization(String id, String baseURL ) throws IOException { + public static String communityPropagationOrganization(String id, String baseURL) throws IOException { - return get(baseURL + id + "/propagationOrganizations"); + return get(baseURL + id + "/propagationOrganizations"); } - public static String communityProjects(String id, String page, String size, String baseURL ) throws IOException { + public static String communityProjects(String id, String page, String size, String baseURL) throws IOException { - return get(baseURL + id + "/projects/" + page + "/" + size); + return get(baseURL + id + "/projects/" + page + "/" + size); } diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/PrepareResultCommunitySet.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/PrepareResultCommunitySet.java index 2c2eb69dd..7fed2606b 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/PrepareResultCommunitySet.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/PrepareResultCommunitySet.java @@ -52,7 +52,7 @@ public class PrepareResultCommunitySet { final String outputPath = parser.get("outputPath"); log.info("outputPath: {}", outputPath); - final String baseURL = parser.get("baseURL"); + final String baseURL = parser.get("baseURL"); log.info("baseUEL: {}", baseURL); final CommunityEntityMap projectsMap = Utils.getCommunityProjects(baseURL); diff --git a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/BulkTagJobTest.java b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/BulkTagJobTest.java index d193716a8..743e62b5f 100644 --- a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/BulkTagJobTest.java +++ b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/bulktag/BulkTagJobTest.java @@ -1576,7 +1576,7 @@ public class BulkTagJobTest { "-outputPath", workingDir.toString() + "/", // "-baseURL", "https://services.openaire.eu/openaire/community/", "-pathMap", pathMap, - "-taggingConf", taggingConf + "-taggingConf", taggingConf }); final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); From 6f4d0c05eae2965d5b2afde1d78627cbf2ebbd63 Mon Sep 17 00:00:00 2001 From: Sandro La Bruzzo Date: Tue, 28 Nov 2023 08:43:56 +0100 Subject: [PATCH 363/449] Implemented Author MErger for ORCID that takes in account the case when name and surname are swapped --- .../eu/dnetlib/dhp/oa/merge/AuthorMerger.java | 114 ++++-------------- .../eu/dnetlib/oa/merge/AuthorMergerTest.java | 33 ++--- .../dhp/oa/merge/authors_orcid_sample.json | 3 + .../oa/merge/authors_publication_sample.json | 2 + .../SparkEnrichGraphWithOrcidAuthors.scala | 15 ++- 5 files changed, 51 insertions(+), 116 deletions(-) create mode 100644 dhp-common/src/test/resources/eu/dnetlib/dhp/oa/merge/authors_orcid_sample.json create mode 100644 dhp-common/src/test/resources/eu/dnetlib/dhp/oa/merge/authors_publication_sample.json diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/AuthorMerger.java b/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/AuthorMerger.java index 6c3058303..852ee163d 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/AuthorMerger.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/AuthorMerger.java @@ -159,17 +159,11 @@ public class AuthorMerger { .replaceAll("(\\p{Punct})+", " ") .replaceAll("(\\d)+", " ") .replaceAll("(\\n)+", " ") + .trim(); // return Arrays.stream(fullname.split("[\\s | , | ;]+")).map(String::toLowerCase).sorted().collect(Collectors.joining()); } - private static String generateAuthorkey(final Author a) { - if (a.getSurname() == null) - return "NOSURNAME"; - - return normalize(a.getSurname()); - } - // // public static List enrichOrcid2(List baseAuthor, List orcidAuthor) { // if (baseAuthor == null || baseAuthor.isEmpty()) @@ -226,54 +220,26 @@ public class AuthorMerger { return null; } - public static boolean checkSimilarity3(final Author left, final Author right) { - - if (StringUtils.isNotBlank(left.getSurname()) && StringUtils.isNotBlank(left.getName()) - && - StringUtils.isNotBlank(right.getSurname()) && StringUtils.isNotBlank(right.getName()) - - ) - return left.getSurname().equalsIgnoreCase(right.getSurname()) - && left.getName().substring(0, 1).equalsIgnoreCase(right.getName().substring(0, 1)); - - final Person pl = parse(left); - final Person pr = parse(right); - - // If one of them didn't have a surname the match is false - if (!(pl.getSurname() != null && pl.getSurname().stream().anyMatch(StringUtils::isNotBlank) && - pr.getSurname() != null && pr.getSurname().stream().anyMatch(StringUtils::isNotBlank))) - return false; - - // The Authors have one surname in common - if (pl.getSurname().stream().anyMatch(sl -> pr.getSurname().stream().anyMatch(sr -> sr.equalsIgnoreCase(sl)))) { - - // If one of them has only a surname and is the same we can say that they are the same author - if ((pl.getName() == null || pl.getName().stream().allMatch(StringUtils::isBlank)) || - (pr.getName() == null || pr.getName().stream().allMatch(StringUtils::isBlank))) - return true; - // The authors have the same initials of Name in common - if (pl - .getName() - .stream() - .anyMatch( - nl -> pr - .getName() - .stream() - .anyMatch(nr -> nr.substring(0, 1).equalsIgnoreCase(nl.substring(0, 1))))) - return true; - } - return false; - } - public static boolean checkSimilarity2(final Author left, final Author right) { final Person pl = parse(left); final Person pr = parse(right); - // If one of them didn't have a surname the match is false + // If one of them didn't have a surname we verify if they have the fullName not empty + // and verify if the normalized version is equal if (!(pl.getSurname() != null && pl.getSurname().stream().anyMatch(StringUtils::isNotBlank) && - pr.getSurname() != null && pr.getSurname().stream().anyMatch(StringUtils::isNotBlank))) - return false; + pr.getSurname() != null && pr.getSurname().stream().anyMatch(StringUtils::isNotBlank))) { + if (pl.getFullname() != null && !pl.getFullname().isEmpty() && pr.getFullname() != null + && !pr.getFullname().isEmpty()) { + return pl + .getFullname() + .stream() + .anyMatch( + fl -> pr.getFullname().stream().anyMatch(fr -> normalize(fl).equalsIgnoreCase(normalize(fr)))); + } else { + return false; + } + } // The Authors have one surname in common if (pl.getSurname().stream().anyMatch(sl -> pr.getSurname().stream().anyMatch(sr -> sr.equalsIgnoreCase(sl)))) { @@ -292,56 +258,18 @@ public class AuthorMerger { .anyMatch(nr -> nr.substring(0, 1).equalsIgnoreCase(nl.substring(0, 1))))) return true; } - return false; - } - public static boolean checkSimilarity(final Author left, final Author right) { - - if (left.getSurname() == null && left.getFullname() == null) + // Sometimes we noticed that publication have author wrote in inverse order Surname, Name + // We verify if we have an exact match between name and surname + if (pl.getSurname().stream().anyMatch(sl -> pr.getName().stream().anyMatch(nr -> nr.equalsIgnoreCase(sl))) && + pl.getName().stream().anyMatch(nl -> pr.getSurname().stream().anyMatch(sr -> sr.equalsIgnoreCase(nl)))) + return true; + else return false; - if (right.getSurname() == null && right.getFullname() == null) - return false; - - // The Authors have the same surname, or we are tolerant from 1 different char(lets say 1 Typo) - if (StringUtils.isNotBlank(left.getSurname()) && StringUtils.isNotBlank(right.getSurname())) { - if (left.getSurname().equalsIgnoreCase(right.getSurname()) - || hammingDist(left.getSurname().toLowerCase(), right.getSurname().toLowerCase()) < 2) { - // IN case on of the two Authors has no given Name the match is true - if (StringUtils.isBlank(left.getName()) || StringUtils.isBlank(right.getName())) - return true; - // If the surname is correct, and they have the same name or the name starts with the same Letter we can - // say is the same author - if (left.getName().equalsIgnoreCase(right.getName()) - || left.getName().substring(0, 1).equalsIgnoreCase(right.getName().substring(0, 1))) - return true; - } - // Different SURNAME - else { - return false; - } - } else { - // This is the case where the two authors have or the surname or the fullname - // get the first not null of the surname or fullname of both - final String l = authorFieldToBeCompared(left); - final String r = authorFieldToBeCompared(right); - if (l == null || r == null) - return false; - // The same length means they are the same field - if (l.length() == r.length()) { - return normalize(l).equals(normalize(r)); - } - // In this case probably l contains the surname and r contains the fullname - if (l.length() < r.length()) - return normalize(r).contains(normalize(l)); - // In this case probably l contains the fullname and r contains the surname - return normalize(l).contains(normalize(r)); - } - return false; } public static List enrichOrcid2(List baseAuthor, List orcidAuthor) { - final Integer match_itm = 0; if (baseAuthor == null || baseAuthor.isEmpty()) return orcidAuthor; diff --git a/dhp-common/src/test/java/eu/dnetlib/oa/merge/AuthorMergerTest.java b/dhp-common/src/test/java/eu/dnetlib/oa/merge/AuthorMergerTest.java index 7f8d673d1..9eccab5f1 100644 --- a/dhp-common/src/test/java/eu/dnetlib/oa/merge/AuthorMergerTest.java +++ b/dhp-common/src/test/java/eu/dnetlib/oa/merge/AuthorMergerTest.java @@ -9,6 +9,7 @@ import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.List; +import java.util.Objects; import java.util.stream.Collectors; import org.junit.jupiter.api.Test; @@ -22,22 +23,15 @@ import eu.dnetlib.dhp.schema.oaf.Author; public class AuthorMergerTest { + @Test - public void testNormalization() { - - assertEquals("bruzzolasandro", AuthorMerger.normalizeFullName("Sandro, La Bruzzo")); - assertEquals("baglionimiriam", AuthorMerger.normalizeFullName("Miriam Baglioni")); - assertEquals("baglionimiriam", AuthorMerger.normalizeFullName("Miriam ;Baglioni,")); - - } - public void testEnrcichAuthor() throws Exception { final ObjectMapper mapper = new ObjectMapper(); BufferedReader pr = new BufferedReader(new InputStreamReader( - AuthorMergerTest.class.getResourceAsStream("/eu/dnetlib/dhp/oa/merge/authors_publication.json"))); + Objects.requireNonNull(AuthorMergerTest.class.getResourceAsStream("/eu/dnetlib/dhp/oa/merge/authors_publication_sample.json")))); BufferedReader or = new BufferedReader(new InputStreamReader( - AuthorMergerTest.class.getResourceAsStream("/eu/dnetlib/dhp/oa/merge/authors_orcid.json"))); + Objects.requireNonNull(AuthorMergerTest.class.getResourceAsStream("/eu/dnetlib/dhp/oa/merge/authors_orcid_sample.json")))); TypeReference> aclass = new TypeReference>() { }; @@ -93,32 +87,27 @@ public class AuthorMergerTest { enrichedAuthorWithPid); System.out.println("================="); - - if (++i > 30) - break; } - } - } @Test public void checkSimilarityTest() { final Author left = new Author(); - left.setSurname("Wu"); - left.setName("M."); - left.setFullname("Wu, M."); + left.setName("Anand"); + left.setSurname("Rachna"); + left.setFullname("Anand, Rachna"); System.out.println(AuthorMerger.normalizeFullName(left.getFullname())); final Author right = new Author(); - right.setName("Xin"); - right.setSurname("Wu"); - right.setFullname("Xin Wu"); + right.setName("Rachna"); + right.setSurname("Anand"); + right.setFullname("Rachna, Anand"); // System.out.println(AuthorMerger.normalize(right.getFullname())); boolean same = AuthorMerger.checkSimilarity2(left, right); - assertFalse(same); + assertTrue(same); } diff --git a/dhp-common/src/test/resources/eu/dnetlib/dhp/oa/merge/authors_orcid_sample.json b/dhp-common/src/test/resources/eu/dnetlib/dhp/oa/merge/authors_orcid_sample.json new file mode 100644 index 000000000..ec521b3b7 --- /dev/null +++ b/dhp-common/src/test/resources/eu/dnetlib/dhp/oa/merge/authors_orcid_sample.json @@ -0,0 +1,3 @@ +WrappedArray(arXiv1507.08202) +50|arXiv_dedup_::34e03f2336b8b28286550425e65634ea +[{"fullname":"Liron Barak","name":"Liron","surname":"Barak","rank":null,"pid":[{"value":"0000-0002-3436-2726","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Giuseppe Avolio","name":"Giuseppe","surname":"Avolio","rank":null,"pid":[{"value":"0000-0003-2664-3437","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Tobias Golling","name":"Tobias","surname":"Golling","rank":null,"pid":[{"value":"0000-0001-8535-6687","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Ivan Sykora","name":"Ivan","surname":"Sykora","rank":null,"pid":[{"value":"0000-0003-3447-5621","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Joao Carvalho","name":"Joao","surname":"Carvalho","rank":null,"pid":[{"value":"0000-0002-3015-7821","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Jonathan David Long","name":"Jonathan David","surname":"Long","rank":null,"pid":[{"value":"0000-0002-2115-9382","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Heather Russell","name":"Heather","surname":"Russell","rank":null,"pid":[{"value":"0000-0003-4181-0678","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Alison Lister","name":"Alison","surname":"Lister","rank":null,"pid":[{"value":"0000-0002-1552-3651","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Malte Backhaus","name":"Malte","surname":"Backhaus","rank":null,"pid":[{"value":"0000-0002-5888-2304","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Xin Wu","name":"Xin","surname":"Wu","rank":null,"pid":[{"value":"0000-0001-7655-389X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Luke Lambourne","name":"Luke","surname":"Lambourne","rank":null,"pid":[{"value":"0000-0002-7001-7575","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Kazunori Hanagaki","name":"Kazunori","surname":"Hanagaki","rank":null,"pid":[{"value":"0000-0003-0676-0441","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Krzysztof Sliwa","name":"Krzysztof","surname":"Sliwa","rank":null,"pid":[{"value":"0000-0002-1201-4771","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Jiri Chudoba","name":"Jiri","surname":"Chudoba","rank":null,"pid":[{"value":"0000-0002-6425-2579","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Jörn Große-Knetter","name":"Jörn","surname":"Große-Knetter","rank":null,"pid":[{"value":"0000-0003-3085-7067","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Katharine Leney","name":"Katharine","surname":"Leney","rank":null,"pid":[{"value":"0000-0002-1525-2695","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Michel Lefebvre","name":"Michel","surname":"Lefebvre","rank":null,"pid":[{"value":"0000-0002-5560-0586","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Ahmed Bassalat","name":"Ahmed","surname":"Bassalat","rank":null,"pid":[{"value":"0000-0002-0129-1423","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Borut Kersevan","name":"Borut","surname":"Kersevan","rank":null,"pid":[{"value":"0000-0002-4529-452X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Calum Macdonald","name":"Calum","surname":"Macdonald","rank":null,"pid":[{"value":"0000-0001-7857-9188","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Davide Costanzo","name":"Davide","surname":"Costanzo","rank":null,"pid":[{"value":"0000-0003-4920-6264","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Wladyslaw Dabrowski","name":"Wladyslaw","surname":"Dabrowski","rank":null,"pid":[{"value":"0000-0001-9061-9568","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Jean-François Grivaz","name":"Jean-François","surname":"Grivaz","rank":null,"pid":[{"value":"0000-0003-4793-7995","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Elisabetta Pianori","name":"Elisabetta","surname":"Pianori","rank":null,"pid":[{"value":"0000-0001-9233-5892","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Christoph Falk Anders","name":"Christoph Falk","surname":"Anders","rank":null,"pid":[{"value":"0000-0001-6632-6327","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Vasiliki Kouskoura","name":"Vasiliki","surname":"Kouskoura","rank":null,"pid":[{"value":"0000-0002-8987-3208","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Ruth Pöttgen","name":"Ruth","surname":"Pöttgen","rank":null,"pid":[{"value":"0000-0002-3304-0987","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Sergey Burdin","name":"Sergey","surname":"Burdin","rank":null,"pid":[{"value":"0000-0003-4831-4132","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Farid Ould-Saada","name":"Farid","surname":"Ould-Saada","rank":null,"pid":[{"value":"0000-0002-9404-835X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Peter Onyisi","name":"Peter","surname":"Onyisi","rank":null,"pid":[{"value":"0000-0003-4201-7997","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Javier Llorente Merino","name":"Javier","surname":"Llorente Merino","rank":null,"pid":[{"value":"0000-0003-0027-7969","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Michel Vetterli","name":"Michel","surname":"Vetterli","rank":null,"pid":[{"value":"0000-0002-7223-2965","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Nicolas Morange","name":"Nicolas","surname":"Morange","rank":null,"pid":[{"value":"0000-0003-0047-7215","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Gianluca Introzzi","name":"Gianluca","surname":"Introzzi","rank":null,"pid":[{"value":"0000-0002-1314-2580","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Roger Moore","name":"Roger","surname":"Moore","rank":null,"pid":[{"value":"0000-0003-4160-4700","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Pierre-Antoine Delsart","name":"Pierre-Antoine","surname":"Delsart","rank":null,"pid":[{"value":"0000-0002-9556-2924","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Victor Solovyev","name":"Victor","surname":"Solovyev","rank":null,"pid":[{"value":"0000-0002-9402-6329","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Jiangyong jia","name":"Jiangyong","surname":"jia","rank":null,"pid":[{"value":"0000-0002-5725-3397","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Kyle Cranmer","name":"Kyle","surname":"Cranmer","rank":null,"pid":[{"value":"0000-0002-5769-7094","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Frederik Ruehr","name":"Frederik","surname":"Ruehr","rank":null,"pid":[{"value":"0000-0003-4452-620X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Peter van Gemmeren","name":"Peter","surname":"van Gemmeren","rank":null,"pid":[{"value":"0000-0002-7227-4006","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Jacob Kempster","name":"Jacob","surname":"Kempster","rank":null,"pid":[{"value":"0000-0003-4168-3373","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Oleg Brandt","name":"Oleg","surname":"Brandt","rank":null,"pid":[{"value":"0000-0001-5219-1417","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Antonio Policicchio","name":"Antonio","surname":"Policicchio","rank":null,"pid":[{"value":"0000-0002-1290-220X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Fabrice Hubaut","name":"Fabrice","surname":"Hubaut","rank":null,"pid":[{"value":"0000-0002-0113-2465","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Christopher Gorham Lester","name":"Christopher Gorham","surname":"Lester","rank":null,"pid":[{"value":"0000-0001-5770-4883","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Royer Edson Ticse Torres","name":"Royer Edson","surname":"Ticse Torres","rank":null,"pid":[{"value":"0000-0001-8178-5257","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Maria Josefina Alconada Verzini","name":"Maria Josefina","surname":"Alconada Verzini","rank":null,"pid":[{"value":"0000-0003-2212-7830","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"PHILLIP URQUIJO","name":"PHILLIP","surname":"URQUIJO","rank":null,"pid":[{"value":"0000-0002-0887-7953","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Annick Lleres","name":"Annick","surname":"Lleres","rank":null,"pid":[{"value":"0000-0003-1769-8524","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Andrei Snesarev","name":"Andrei","surname":"Snesarev","rank":null,"pid":[{"value":"0000-0002-9067-8362","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Marcin Wolter","name":"Marcin","surname":"Wolter","rank":null,"pid":[{"value":"0000-0001-9184-2921","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Garabed Halladjian","name":"Garabed","surname":"Halladjian","rank":null,"pid":[{"value":"0000-0001-7162-0301","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Anthony Morley","name":"Anthony","surname":"Morley","rank":null,"pid":[{"value":"0000-0003-0373-1346","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Francesco Nuti","name":"Francesco","surname":"Nuti","rank":null,"pid":[{"value":"0000-0003-3491-7637","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Mar Capeans","name":"Mar","surname":"Capeans","rank":null,"pid":[{"value":"0000-0001-7727-9175","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Jose Enrique Garcia Navarro","name":"Jose Enrique","surname":"Garcia Navarro","rank":null,"pid":[{"value":"0000-0002-0279-0523","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Aidan Robson","name":"Aidan","surname":"Robson","rank":null,"pid":[{"value":"0000-0002-1659-8284","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Eduardo Ros","name":"Eduardo","surname":"Ros","rank":null,"pid":[{"value":"0000-0003-2812-9554","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Kevin Varvell","name":"Kevin","surname":"Varvell","rank":null,"pid":[{"value":"0000-0003-1017-1295","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Ina Carli","name":"Ina","surname":"Carli","rank":null,"pid":[{"value":"0000-0002-0411-1141","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Ivo van Vulpen","name":"Ivo","surname":"van Vulpen","rank":null,"pid":[{"value":"0000-0001-7074-5655","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Liaoshan Shi","name":"Liaoshan","surname":"Shi","rank":null,"pid":[{"value":"0000-0001-9532-5075","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Pavel Starovoitov","name":"Pavel","surname":"Starovoitov","rank":null,"pid":[{"value":"0000-0003-1990-0992","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Lorenzo Feligioni","name":"Lorenzo","surname":"Feligioni","rank":null,"pid":[{"value":"0000-0002-1403-0951","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Christoph Wasicki","name":"Christoph","surname":"Wasicki","rank":null,"pid":[{"value":"0000-0001-8041-741X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Nuno Castro","name":"Nuno","surname":"Castro","rank":null,"pid":[{"value":"0000-0001-8491-4376","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Mikhail Levchenko","name":"Mikhail","surname":"Levchenko","rank":null,"pid":[{"value":"0000-0002-5495-0656","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Marek Palka","name":"Marek","surname":"Palka","rank":null,"pid":[{"value":"0000-0002-7185-3540","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Philip Allport","name":"Philip","surname":"Allport","rank":null,"pid":[{"value":"0000-0001-7303-2570","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Tomas Jakoubek","name":"Tomas","surname":"Jakoubek","rank":null,"pid":[{"value":"0000-0001-7038-0369","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Elizabeth Brost","name":"Elizabeth","surname":"Brost","rank":null,"pid":[{"value":"0000-0002-6800-9808","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Maciej Trzebinski","name":"Maciej","surname":"Trzebinski","rank":null,"pid":[{"value":"0000-0002-5151-7101","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Nikola Makovec","name":"Nikola","surname":"Makovec","rank":null,"pid":[{"value":"0000-0001-5124-904X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Bernhard Meirose","name":"Bernhard","surname":"Meirose","rank":null,"pid":[{"value":"0000-0003-0032-7022","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Andrea Dell’Acqua","name":"Andrea","surname":"Dell’Acqua","rank":null,"pid":[{"value":"0000-0003-2453-7745","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Carlos Escobar Ibáñez","name":"Carlos","surname":"Escobar Ibáñez","rank":null,"pid":[{"value":"0000-0003-4442-4537","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Hideyuki Oide","name":"Hideyuki","surname":"Oide","rank":null,"pid":[{"value":"0000-0002-2173-3233","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Valentina Maria Martina Cairo","name":"Valentina Maria Martina","surname":"Cairo","rank":null,"pid":[{"value":"0000-0002-0758-7575","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Johannes Erdmann","name":"Johannes","surname":"Erdmann","rank":null,"pid":[{"value":"0000-0002-8073-2740","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Frederic Deliot","name":"Frederic","surname":"Deliot","rank":null,"pid":[{"value":"0000-0003-0777-6031","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Fabian Hügging","name":"Fabian","surname":"Hügging","rank":null,"pid":[{"value":"0000-0002-7472-3151","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Antoine Marzin","name":"Antoine","surname":"Marzin","rank":null,"pid":[{"value":"0000-0003-4364-4351","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Sebastien Prince","name":"Sebastien","surname":"Prince","rank":null,"pid":[{"value":"0000-0001-9947-3892","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Melissa Ridel","name":"Melissa","surname":"Ridel","rank":null,"pid":[{"value":"0000-0002-2601-7420","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Christian Weiser","name":"Christian","surname":"Weiser","rank":null,"pid":[{"value":"0000-0002-6456-6834","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Farida Fassi","name":"Farida","surname":"Fassi","rank":null,"pid":[{"value":"0000-0002-6423-7213","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Manuella Vincter","name":"Manuella","surname":"Vincter","rank":null,"pid":[{"value":"0000-0002-5338-8972","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Julien Caudron","name":"Julien","surname":"Caudron","rank":null,"pid":[{"value":"0000-0002-3530-6531","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Giada Mancini","name":"Giada","surname":"Mancini","rank":null,"pid":[{"value":"0000-0001-6158-2751","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Vasiliki A. Mitsou","name":"Vasiliki A.","surname":"Mitsou","rank":null,"pid":[{"value":"0000-0002-1533-8886","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"David Wardrope","name":"David","surname":"Wardrope","rank":null,"pid":[{"value":"0000-0002-8208-2964","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Loïc Valéry","name":"Loïc","surname":"Valéry","rank":null,"pid":[{"value":"0000-0002-5510-1111","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Krisztian Peters","name":"Krisztian","surname":"Peters","rank":null,"pid":[{"value":"0000-0002-7654-1677","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Andrea Knue","name":"Andrea","surname":"Knue","rank":null,"pid":[{"value":"0000-0002-1559-9285","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Stathes Paganis","name":"Stathes","surname":"Paganis","rank":null,"pid":[{"value":"0000-0002-1950-8993","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Steffen Stärz","name":"Steffen","surname":"Stärz","rank":null,"pid":[{"value":"0000-0002-2908-3909","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Emma Torro Pastor","name":"Emma","surname":"Torro Pastor","rank":null,"pid":[{"value":"0000-0002-5507-7924","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Andrey Kiryunin","name":"Andrey","surname":"Kiryunin","rank":null,"pid":[{"value":"0000-0001-7490-6890","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Daniela Marcella Rebuzzi","name":"Daniela Marcella","surname":"Rebuzzi","rank":null,"pid":[{"value":"0000-0003-4461-3880","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Frederick Luehring","name":"Frederick","surname":"Luehring","rank":null,"pid":[{"value":"0000-0001-8721-6901","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"alessandro cerri","name":"alessandro","surname":"cerri","rank":null,"pid":[{"value":"0000-0002-1904-6661","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Remi Lafaye","name":"Remi","surname":"Lafaye","rank":null,"pid":[{"value":"0000-0001-7848-6088","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Torsten Akesson","name":"Torsten","surname":"Akesson","rank":null,"pid":[{"value":"0000-0003-4141-5408","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Hongbo Zhu","name":"Hongbo","surname":"Zhu","rank":null,"pid":[{"value":"0000-0001-8066-7048","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Paul Laycock","name":"Paul","surname":"Laycock","rank":null,"pid":[{"value":"0000-0002-8572-5339","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Paolo Giromini","name":"Paolo","surname":"Giromini","rank":null,"pid":[{"value":"0000-0003-0276-287X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Leszek Adamczyk","name":"Leszek","surname":"Adamczyk","rank":null,"pid":[{"value":"0000-0002-5859-2075","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Stephen Lloyd","name":"Stephen","surname":"Lloyd","rank":null,"pid":[{"value":"0000-0002-5073-2264","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Aaron Angerami","name":"Aaron","surname":"Angerami","rank":null,"pid":[{"value":"0000-0001-7834-8750","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Susumu Oda","name":"Susumu","surname":"Oda","rank":null,"pid":[{"value":"0000-0001-5836-768X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Nathalie Besson","name":"Nathalie","surname":"Besson","rank":null,"pid":[{"value":"0000-0001-9248-6252","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"MARCELLO FANTI","name":"MARCELLO","surname":"FANTI","rank":null,"pid":[{"value":"0000-0002-8773-145X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Peter Kodyš","name":"Peter","surname":"Kodyš","rank":null,"pid":[{"value":"0000-0002-8644-2349","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Teng Jian Khoo","name":"Teng Jian","surname":"Khoo","rank":null,"pid":[{"value":"0000-0002-5954-3101","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Javier Montejo Berlingen","name":"Javier","surname":"Montejo Berlingen","rank":null,"pid":[{"value":"0000-0001-9213-904X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Sandro Palestini","name":"Sandro","surname":"Palestini","rank":null,"pid":[{"value":"0000-0002-4110-096X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Mark Oreglia","name":"Mark","surname":"Oreglia","rank":null,"pid":[{"value":"0000-0001-6203-2209","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Krzysztof Korcyl","name":"Krzysztof","surname":"Korcyl","rank":null,"pid":[{"value":"0000-0001-8085-4505","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Sebastian Schmitt","name":"Sebastian","surname":"Schmitt","rank":null,"pid":[{"value":"0000-0002-7935-0470","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Irinel Caprini","name":"Irinel","surname":"Caprini","rank":null,"pid":[{"value":"0000-0003-3343-3200","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Anthony Doyle","name":"Anthony","surname":"Doyle","rank":null,"pid":[{"value":"0000-0001-6322-6195","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Markus Elsing","name":"Markus","surname":"Elsing","rank":null,"pid":[{"value":"0000-0002-1213-0545","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Christian Schmitt","name":"Christian","surname":"Schmitt","rank":null,"pid":[{"value":"0000-0003-1471-690X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Konstantinos Nikolopoulos","name":"Konstantinos","surname":"Nikolopoulos","rank":null,"pid":[{"value":"0000-0002-3048-489X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Janet Dietrich","name":"Janet","surname":"Dietrich","rank":null,"pid":[{"value":"0000-0001-7061-1585","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Yuri Kulchitsky","name":"Yuri","surname":"Kulchitsky","rank":null,"pid":[{"value":"0000-0002-3036-5575","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Sinead Farrington","name":"Sinead","surname":"Farrington","rank":null,"pid":[{"value":"0000-0001-5350-9271","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Stefano Terzo","name":"Stefano","surname":"Terzo","rank":null,"pid":[{"value":"0000-0003-3388-3906","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"stefania xella","name":"stefania","surname":"xella","rank":null,"pid":[{"value":"0000-0002-0988-1655","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Jonathan Butterworth","name":"Jonathan","surname":"Butterworth","rank":null,"pid":[{"value":"0000-0002-5905-5394","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Gideon Bella","name":"Gideon","surname":"Bella","rank":null,"pid":[{"value":"0000-0002-4009-0990","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Marcello Bindi","name":"Marcello","surname":"Bindi","rank":null,"pid":[{"value":"0000-0001-6172-545X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Heather Gray","name":"Heather","surname":"Gray","rank":null,"pid":[{"value":"0000-0002-5293-4716","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Marcel Vos","name":"Marcel","surname":"Vos","rank":null,"pid":[{"value":"0000-0001-8474-5357","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Ljiljana Morvaj","name":"Ljiljana","surname":"Morvaj","rank":null,"pid":[{"value":"0000-0003-2061-2904","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Didier Ferrere","name":"Didier","surname":"Ferrere","rank":null,"pid":[{"value":"0000-0002-5687-9240","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Mauro Villa","name":"Mauro","surname":"Villa","rank":null,"pid":[{"value":"0000-0002-9181-8048","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Deepak Kar","name":"Deepak","surname":"Kar","rank":null,"pid":[{"value":"0000-0002-4238-9822","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Frank Berghaus","name":"Frank","surname":"Berghaus","rank":null,"pid":[{"value":"0000-0003-1887-3910","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Bruce Yabsley","name":"Bruce","surname":"Yabsley","rank":null,"pid":[{"value":"0000-0002-2680-0474","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Frank Winklmeier","name":"Frank","surname":"Winklmeier","rank":null,"pid":[{"value":"0000-0001-8290-3200","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Zoya Karpova","name":"Zoya","surname":"Karpova","rank":null,"pid":[{"value":"0000-0003-0254-4629","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Jason Nielsen","name":"Jason","surname":"Nielsen","rank":null,"pid":[{"value":"0000-0002-9175-4419","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Claire Gwenlan","name":"Claire","surname":"Gwenlan","rank":null,"pid":[{"value":"0000-0002-3518-0617","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Stephanie Majewski","name":"Stephanie","surname":"Majewski","rank":null,"pid":[{"value":"0000-0002-6871-3395","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"James Mueller","name":"James","surname":"Mueller","rank":null,"pid":[{"value":"0000-0001-5099-4718","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Mario Giordani","name":"Mario","surname":"Giordani","rank":null,"pid":[{"value":"0000-0002-0792-6039","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Laura Fabbri","name":"Laura","surname":"Fabbri","rank":null,"pid":[{"value":"0000-0002-4002-8353","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Michael Begel","name":"Michael","surname":"Begel","rank":null,"pid":[{"value":"0000-0002-1634-4399","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Laurent Schoeffel","name":"Laurent","surname":"Schoeffel","rank":null,"pid":[{"value":"0000-0002-8081-2353","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Bobby Acharya","name":"Bobby","surname":"Acharya","rank":null,"pid":[{"value":"0000-0002-8588-9157","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Jan Kretzschmar","name":"Jan","surname":"Kretzschmar","rank":null,"pid":[{"value":"0000-0002-8515-1355","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Thi Ngoc Loan Truong","name":"Thi Ngoc Loan","surname":"Truong","rank":null,"pid":[{"value":"0000-0001-8249-7150","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Yury Smirnov","name":"Yury","surname":"Smirnov","rank":null,"pid":[{"value":"0000-0002-2891-0781","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Andreas Warburton","name":"Andreas","surname":"Warburton","rank":null,"pid":[{"value":"0000-0002-2298-7315","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Osamu Jinnouchi","name":"Osamu","surname":"Jinnouchi","rank":null,"pid":[{"value":"0000-0001-5073-0974","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Nicola Orlando","name":"Nicola","surname":"Orlando","rank":null,"pid":[{"value":"0000-0003-0616-245X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Magda Anna Chelstowska","name":"Magda Anna","surname":"Chelstowska","rank":null,"pid":[{"value":"0000-0003-1030-2099","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Armin Nairz","name":"Armin","surname":"Nairz","rank":null,"pid":[{"value":"0000-0003-3561-0880","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Chris Malena Delitzsch","name":"Chris Malena","surname":"Delitzsch","rank":null,"pid":[{"value":"0000-0001-7021-3333","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Kendall Reeves","name":"Kendall","surname":"Reeves","rank":null,"pid":[{"value":"0000-0003-3504-4882","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Minghui Liu","name":"Minghui","surname":"Liu","rank":null,"pid":[{"value":"0000-0003-0056-7296","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Clara Troncon","name":"Clara","surname":"Troncon","rank":null,"pid":[{"value":"0000-0002-7997-8524","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Chris Hays","name":"Chris","surname":"Hays","rank":null,"pid":[{"value":"0000-0003-2371-9723","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Driss Benchekroun","name":"Driss","surname":"Benchekroun","rank":null,"pid":[{"value":"0000-0001-5196-8327","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Tamar Djobava","name":"Tamar","surname":"Djobava","rank":null,"pid":[{"value":"0000-0002-9414-8350","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Joany Manjarrés Ramos","name":"Joany","surname":"Manjarrés Ramos","rank":null,"pid":[{"value":"0000-0003-3896-5222","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Craig Wiglesworth","name":"Craig","surname":"Wiglesworth","rank":null,"pid":[{"value":"0000-0001-6219-8946","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Lawrence Lee","name":"Lawrence","surname":"Lee","rank":null,"pid":[{"value":"0000-0002-5590-335X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Elisabetta Barberio","name":"Elisabetta","surname":"Barberio","rank":null,"pid":[{"value":"0000-0002-3111-0910","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Robert McPherson","name":"Robert","surname":"McPherson","rank":null,"pid":[{"value":"0000-0001-9211-7019","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Paul Jackson","name":"Paul","surname":"Jackson","rank":null,"pid":[{"value":"0000-0002-0847-402X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Peter Henrik Hansen","name":"Peter Henrik","surname":"Hansen","rank":null,"pid":[{"value":"0000-0002-6764-4789","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Cristobal Padilla","name":"Cristobal","surname":"Padilla","rank":null,"pid":[{"value":"0000-0001-7951-0166","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Nora Pettersson","name":"Nora","surname":"Pettersson","rank":null,"pid":[{"value":"0000-0001-7451-3544","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Paul Glaysher","name":"Paul","surname":"Glaysher","rank":null,"pid":[{"value":"0000-0002-5437-971X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Patrick Czodrowski","name":"Patrick","surname":"Czodrowski","rank":null,"pid":[{"value":"0000-0003-0723-1437","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"María Moreno Llácer","name":"María","surname":"Moreno Llácer","rank":null,"pid":[{"value":"0000-0003-1113-3645","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Soumya Mohapatra","name":"Soumya","surname":"Mohapatra","rank":null,"pid":[{"value":"0000-0003-3006-6337","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Andrea Gaudiello","name":"Andrea","surname":"Gaudiello","rank":null,"pid":[{"value":"0000-0001-7721-8217","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Maximiliano Sioli","name":"Maximiliano","surname":"Sioli","rank":null,"pid":[{"value":"0000-0002-0912-9121","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Christian Schroeder","name":"Christian","surname":"Schroeder","rank":null,"pid":[{"value":"0000-0001-6449-0668","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Guillaume Unal","name":"Guillaume","surname":"Unal","rank":null,"pid":[{"value":"0000-0001-8130-7423","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Christian Gutschow","name":"Christian","surname":"Gutschow","rank":null,"pid":[{"value":"0000-0003-0857-794X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Spyridon Argyropoulos","name":"Spyridon","surname":"Argyropoulos","rank":null,"pid":[{"value":"0000-0001-7748-1429","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Vadim Bednyakov","name":"Vadim","surname":"Bednyakov","rank":null,"pid":[{"value":"0000-0003-4864-8909","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Caterina Doglioni","name":"Caterina","surname":"Doglioni","rank":null,"pid":[{"value":"0000-0002-1509-0390","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Andrew Haas","name":"Andrew","surname":"Haas","rank":null,"pid":[{"value":"0000-0002-4832-0455","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Masahiro Morii","name":"Masahiro","surname":"Morii","rank":null,"pid":[{"value":"0000-0001-9324-057X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Andrea Coccaro","name":"Andrea","surname":"Coccaro","rank":null,"pid":[{"value":"0000-0003-2368-4559","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Edward Moyse","name":"Edward","surname":"Moyse","rank":null,"pid":[{"value":"0000-0003-4449-6178","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Takuya Nobe","name":"Takuya","surname":"Nobe","rank":null,"pid":[{"value":"0000-0002-5809-325X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Jahred Adelman","name":"Jahred","surname":"Adelman","rank":null,"pid":[{"value":"0000-0002-1041-3496","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Antonio Ereditato","name":"Antonio","surname":"Ereditato","rank":null,"pid":[{"value":"0000-0002-5423-8079","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Stefan Schmitt","name":"Stefan","surname":"Schmitt","rank":null,"pid":[{"value":"0000-0001-8387-1853","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"David DeMarco","name":"David","surname":"DeMarco","rank":null,"pid":[{"value":"0000-0002-8921-8828","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Alessandro La Rosa","name":"Alessandro","surname":"La Rosa","rank":null,"pid":[{"value":"0000-0001-6291-2142","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Liza Mijovic","name":"Liza","surname":"Mijovic","rank":null,"pid":[{"value":"0000-0003-0162-2891","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Stephane Willocq","name":"Stephane","surname":"Willocq","rank":null,"pid":[{"value":"0000-0002-4120-1453","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"George Iakovidis","name":"George","surname":"Iakovidis","rank":null,"pid":[{"value":"0000-0002-0330-5921","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Madar Romain","name":"Madar","surname":"Romain","rank":null,"pid":[{"value":"0000-0002-6875-6408","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"giuseppe iacobucci","name":"giuseppe","surname":"iacobucci","rank":null,"pid":[{"value":"0000-0001-9965-5442","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Allen Mincer","name":"Allen","surname":"Mincer","rank":null,"pid":[{"value":"0000-0002-6307-1418","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"TROCME Benjamin","name":"TROCME","surname":"Benjamin","rank":null,"pid":[{"value":"0000-0001-9500-2487","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Liang Li","name":"Liang","surname":"Li","rank":null,"pid":[{"value":"0000-0001-6411-6107","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"William Murray","name":"William","surname":"Murray","rank":null,"pid":[{"value":"0000-0003-1710-6306","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Chaowaroj Wanotayaroj","name":"Chaowaroj","surname":"Wanotayaroj","rank":null,"pid":[{"value":"0000-0002-8178-5705","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Luc Goossens","name":"Luc","surname":"Goossens","rank":null,"pid":[{"value":"0000-0002-2536-4498","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Kerstin Jon-And","name":"Kerstin","surname":"Jon-And","rank":null,"pid":[{"value":"0000-0001-8201-7700","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Arwa Bannoura","name":"Arwa","surname":"Bannoura","rank":null,"pid":[{"value":"0000-0002-7166-8118","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Filipe Veloso","name":"Filipe","surname":"Veloso","rank":null,"pid":[{"value":"0000-0002-5956-4244","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Maximilian Swiatlowski","name":"Maximilian","surname":"Swiatlowski","rank":null,"pid":[{"value":"0000-0001-7287-0468","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Marija Vranjes Milosavljevic","name":"Marija","surname":"Vranjes Milosavljevic","rank":null,"pid":[{"value":"0000-0003-4477-9733","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Riccardo Maria Bianchi","name":"Riccardo Maria","surname":"Bianchi","rank":null,"pid":[{"value":"0000-0001-7345-7798","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Elias Coniavitis","name":"Elias","surname":"Coniavitis","rank":null,"pid":[{"value":"0000-0002-2148-8012","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Ondrej Penc","name":"Ondrej","surname":"Penc","rank":null,"pid":[{"value":"0000-0002-5433-3981","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Julie Kirk","name":"Julie","surname":"Kirk","rank":null,"pid":[{"value":"0000-0001-8096-7577","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Hongtao Yang","name":"Hongtao","surname":"Yang","rank":null,"pid":[{"value":"0000-0003-3554-7113","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Ewelina Maria Lobodzinska","name":"Ewelina Maria","surname":"Lobodzinska","rank":null,"pid":[{"value":"0000-0001-9012-3431","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Christos Leonidopoulos","name":"Christos","surname":"Leonidopoulos","rank":null,"pid":[{"value":"0000-0002-7241-2114","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Silvia Biondi","name":"Silvia","surname":"Biondi","rank":null,"pid":[{"value":"0000-0002-1492-6715","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Stephane JEZEQUEL","name":"Stephane","surname":"JEZEQUEL","rank":null,"pid":[{"value":"0000-0001-7369-6975","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Zhiqing Zhang","name":"Zhiqing","surname":"Zhang","rank":null,"pid":[{"value":"0000-0002-7853-9079","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Kathleen Whalen","name":"Kathleen","surname":"Whalen","rank":null,"pid":[{"value":"0000-0002-9383-8763","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Sophie HENROT","name":"Sophie","surname":"HENROT","rank":null,"pid":[{"value":"0000-0003-1218-2991","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Louise Heelan","name":"Louise","surname":"Heelan","rank":null,"pid":[{"value":"0000-0002-4879-0131","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Dominik Derendarz","name":"Dominik","surname":"Derendarz","rank":null,"pid":[{"value":"0000-0001-5660-3095","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Ning Zhou","name":"Ning","surname":"Zhou","rank":null,"pid":[{"value":"0000-0002-1775-2511","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Mihai Caprini","name":"Mihai","surname":"Caprini","rank":null,"pid":[{"value":"0000-0002-6806-6730","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Lee Sawyer","name":"Lee","surname":"Sawyer","rank":null,"pid":[{"value":"0000-0001-8295-0605","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Lydia Roos","name":"Lydia","surname":"Roos","rank":null,"pid":[{"value":"0000-0001-7151-9983","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Stanislav Nemecek","name":"Stanislav","surname":"Nemecek","rank":null,"pid":[{"value":"0000-0001-8978-7150","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Matthias Danninger","name":"Matthias","surname":"Danninger","rank":null,"pid":[{"value":"0000-0002-7807-7484","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Lailin Xu","name":"Lailin","surname":"Xu","rank":null,"pid":[{"value":"0000-0001-8997-3199","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Angel Campoverde","name":"Angel","surname":"Campoverde","rank":null,"pid":[{"value":"0000-0003-1968-1216","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Carl Gwilliam","name":"Carl","surname":"Gwilliam","rank":null,"pid":[{"value":"0000-0002-9401-5304","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Fabrizio Salvatore","name":"Fabrizio","surname":"Salvatore","rank":null,"pid":[{"value":"0000-0002-3709-1554","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Werner Wiedenmann","name":"Werner","surname":"Wiedenmann","rank":null,"pid":[{"value":"0000-0003-3605-3633","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Adriaan König","name":"Adriaan","surname":"König","rank":null,"pid":[{"value":"0000-0001-6702-6473","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Romain Kukla","name":"Romain","surname":"Kukla","rank":null,"pid":[{"value":"0000-0002-1140-2465","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Sarah Heim","name":"Sarah","surname":"Heim","rank":null,"pid":[{"value":"0000-0002-2639-6571","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Stamatios Gkaitatzis","name":"Stamatios","surname":"Gkaitatzis","rank":null,"pid":[{"value":"0000-0001-9420-7499","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Alison Elliot","name":"Alison","surname":"Elliot","rank":null,"pid":[{"value":"0000-0003-0921-0314","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Marc Escalier","name":"Marc","surname":"Escalier","rank":null,"pid":[{"value":"0000-0003-4270-2775","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Philipp Stolte","name":"Philipp","surname":"Stolte","rank":null,"pid":[{"value":"0000-0002-8828-3564","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Peter Loch","name":"Peter","surname":"Loch","rank":null,"pid":[{"value":"0000-0002-2005-671X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Tamara Vazquez Schroeder","name":"Tamara","surname":"Vazquez Schroeder","rank":null,"pid":[{"value":"0000-0002-9780-099X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"lily asquith","name":"lily","surname":"asquith","rank":null,"pid":[{"value":"0000-0001-8035-7162","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Javier Sanchez","name":"Javier","surname":"Sanchez","rank":null,"pid":[{"value":"0000-0001-9913-310X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Tomas Davidek","name":"Tomas","surname":"Davidek","rank":null,"pid":[{"value":"0000-0002-3770-8307","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Lidia Dell'Asta","name":"Lidia","surname":"Dell'Asta","rank":null,"pid":[{"value":"0000-0002-9601-4225","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Francisco Alonso","name":"Francisco","surname":"Alonso","rank":null,"pid":[{"value":"0000-0001-9431-8156","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"J. Katharina Behr","name":"J. Katharina","surname":"Behr","rank":null,"pid":[{"value":"0000-0002-5501-4640","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"MARIO MARTINEZ","name":"MARIO","surname":"MARTINEZ","rank":null,"pid":[{"value":"0000-0002-3135-945X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Konstantinos Bachas","name":"Konstantinos","surname":"Bachas","rank":null,"pid":[{"value":"0000-0002-9047-6517","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Arnaud Lucotte","name":"Arnaud","surname":"Lucotte","rank":null,"pid":[{"value":"0000-0002-5992-0640","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"scott snyder","name":"scott","surname":"snyder","rank":null,"pid":[{"value":"0000-0001-8610-8423","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Edson Carquin","name":"Edson","surname":"Carquin","rank":null,"pid":[{"value":"0000-0002-7863-1166","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Kristin Lohwasser","name":"Kristin","surname":"Lohwasser","rank":null,"pid":[{"value":"0000-0003-1833-9160","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Jens Weingarten","name":"Jens","surname":"Weingarten","rank":null,"pid":[{"value":"0000-0003-2165-871X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Victor Maleev","name":"Victor","surname":"Maleev","rank":null,"pid":[{"value":"0000-0003-1028-8602","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Francesca Ungaro","name":"Francesca","surname":"Ungaro","rank":null,"pid":[{"value":"0000-0003-2005-595X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Koji Terashi","name":"Koji","surname":"Terashi","rank":null,"pid":[{"value":"0000-0001-6520-8070","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Kohei Yorita","name":"Kohei","surname":"Yorita","rank":null,"pid":[{"value":"0000-0003-1988-8401","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Roland Jansky","name":"Roland","surname":"Jansky","rank":null,"pid":[{"value":"0000-0003-0456-4658","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Sandro De Cecco","name":"Sandro","surname":"De Cecco","rank":null,"pid":[{"value":"0000-0003-4907-8610","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Wade Fisher","name":"Wade","surname":"Fisher","rank":null,"pid":[{"value":"0000-0003-3043-3045","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Jaroslav Guenther","name":"Jaroslav","surname":"Guenther","rank":null,"pid":[{"value":"0000-0003-3189-3959","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Tatsuya Masubuchi","name":"Tatsuya","surname":"Masubuchi","rank":null,"pid":[{"value":"0000-0001-9984-8009","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Janusz Chwastowski","name":"Janusz","surname":"Chwastowski","rank":null,"pid":[{"value":"0000-0002-6190-8376","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Ian Watson","name":"Ian","surname":"Watson","rank":null,"pid":[{"value":"0000-0003-2141-3413","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Patrick Rieck","name":"Patrick","surname":"Rieck","rank":null,"pid":[{"value":"0000-0003-0290-0566","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Mario Lassnig","name":"Mario","surname":"Lassnig","rank":null,"pid":[{"value":"0000-0002-9541-0592","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Jana Schaarschmidt","name":"Jana","surname":"Schaarschmidt","rank":null,"pid":[{"value":"0000-0002-0433-6439","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Joseph Reichert","name":"Joseph","surname":"Reichert","rank":null,"pid":[{"value":"0000-0003-2110-8021","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Bjarne Stugu","name":"Bjarne","surname":"Stugu","rank":null,"pid":[{"value":"0000-0002-1728-9272","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Paolo Gauzzi","name":"Paolo","surname":"Gauzzi","rank":null,"pid":[{"value":"0000-0003-4841-5822","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Sergei Smirnov","name":"Sergei","surname":"Smirnov","rank":null,"pid":[{"value":"0000-0002-6778-073X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Xiangyang Ju","name":"Xiangyang","surname":"Ju","rank":null,"pid":[{"value":"0000-0002-9745-1638","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Fernando Barreiro","name":"Fernando","surname":"Barreiro","rank":null,"pid":[{"value":"0000-0002-3021-0258","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Markus Cristinziani","name":"Markus","surname":"Cristinziani","rank":null,"pid":[{"value":"0000-0003-3893-9171","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Antonio Amorim","name":"Antonio","surname":"Amorim","rank":null,"pid":[{"value":"0000-0003-0638-2321","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Sune Jakobsen","name":"Sune","surname":"Jakobsen","rank":null,"pid":[{"value":"0000-0002-6564-040X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Alejandro Alonso","name":"Alejandro","surname":"Alonso","rank":null,"pid":[{"value":"0000-0003-1259-0573","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Makoto Shimojima","name":"Makoto","surname":"Shimojima","rank":null,"pid":[{"value":"0000-0002-8738-1664","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Francesco Guescini","name":"Francesco","surname":"Guescini","rank":null,"pid":[{"value":"0000-0001-5351-2673","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Christina Potter","name":"Christina","surname":"Potter","rank":null,"pid":[{"value":"0000-0002-9815-5208","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Evelina Bouhova-Thacker","name":"Evelina","surname":"Bouhova-Thacker","rank":null,"pid":[{"value":"0000-0002-5103-1558","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Eduard Simioni","name":"Eduard","surname":"Simioni","rank":null,"pid":[{"value":"0000-0002-8929-6236","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Paolo Camarri","name":"Paolo","surname":"Camarri","rank":null,"pid":[{"value":"0000-0002-5732-5645","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"William Leight","name":"William","surname":"Leight","rank":null,"pid":[{"value":"0000-0002-2968-7841","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Luis Roberto Flores Castillo","name":"Luis Roberto","surname":"Flores Castillo","rank":null,"pid":[{"value":"0000-0003-1551-5974","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Alessandro null","name":"Alessandro","surname":null,"rank":null,"pid":[{"value":"0000-0002-8224-6105","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Roman Lysak","name":"Roman","surname":"Lysak","rank":null,"pid":[{"value":"0000-0003-2990-1673","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Matteo Franchini","name":"Matteo","surname":"Franchini","rank":null,"pid":[{"value":"0000-0002-4554-252X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Martin Nagel","name":"Martin","surname":"Nagel","rank":null,"pid":[{"value":"0000-0002-2588-6691","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Harald Fox","name":"Harald","surname":"Fox","rank":null,"pid":[{"value":"0000-0003-3089-6090","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Klaus Moenig","name":"Klaus","surname":"Moenig","rank":null,"pid":[{"value":"0000-0002-3169-7117","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Sergey Karpov","name":"Sergey","surname":"Karpov","rank":null,"pid":[{"value":"0000-0002-2230-5353","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Remi Zaidan","name":"Remi","surname":"Zaidan","rank":null,"pid":[{"value":"0000-0002-3710-4554","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Kilian Rosbach","name":"Kilian","surname":"Rosbach","rank":null,"pid":[{"value":"0000-0002-4241-2949","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Pawel Klimek","name":"Pawel","surname":"Klimek","rank":null,"pid":[{"value":"0000-0003-1661-6873","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Nikolaos Konstantinidis","name":"Nikolaos","surname":"Konstantinidis","rank":null,"pid":[{"value":"0000-0002-4140-6360","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Alberto Mengarelli","name":"Alberto","surname":"Mengarelli","rank":null,"pid":[{"value":"0000-0002-1884-854X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Robert Kowalewski","name":"Robert","surname":"Kowalewski","rank":null,"pid":[{"value":"0000-0002-7314-0990","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Miguel Arratia","name":"Miguel","surname":"Arratia","rank":null,"pid":[{"value":"0000-0001-6877-3315","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Paola Giannetti","name":"Paola","surname":"Giannetti","rank":null,"pid":[{"value":"0000-0002-3721-9490","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Joern Lange","name":"Joern","surname":"Lange","rank":null,"pid":[{"value":"0000-0003-1307-1441","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Pavel Řezníček","name":"Pavel","surname":"Řezníček","rank":null,"pid":[{"value":"0000-0003-4017-9829","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Vojtech Pleskot","name":"Vojtech","surname":"Pleskot","rank":null,"pid":[{"value":"0000-0001-5435-497X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Federico Sforza","name":"Federico","surname":"Sforza","rank":null,"pid":[{"value":"0000-0002-4065-7352","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Danijela Bogavac","name":"Danijela","surname":"Bogavac","rank":null,"pid":[{"value":"0000-0003-2138-9062","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Nenad Vranjes","name":"Nenad","surname":"Vranjes","rank":null,"pid":[{"value":"0000-0001-5415-5225","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Peter Watkins","name":"Peter","surname":"Watkins","rank":null,"pid":[{"value":"0000-0002-1290-6833","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Yohei Yamaguchi","name":"Yohei","surname":"Yamaguchi","rank":null,"pid":[{"value":"0000-0002-3725-4800","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Matthias Saimpert","name":"Matthias","surname":"Saimpert","rank":null,"pid":[{"value":"0000-0002-3765-1320","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Alexander Grohsjean","name":"Alexander","surname":"Grohsjean","rank":null,"pid":[{"value":"0000-0003-0748-8494","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Tibor Zenis","name":"Tibor","surname":"Zenis","rank":null,"pid":[{"value":"0000-0001-8265-6916","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Stefano Camarda","name":"Stefano","surname":"Camarda","rank":null,"pid":[{"value":"0000-0003-0479-7689","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Carlos Lacasta","name":"Carlos","surname":"Lacasta","rank":null,"pid":[{"value":"0000-0002-2623-6252","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Oliver Ricken","name":"Oliver","surname":"Ricken","rank":null,"pid":[{"value":"0000-0001-5107-7276","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Claude Leroy","name":"Claude","surname":"Leroy","rank":null,"pid":[{"value":"0000-0003-3105-7045","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Murrough Landon","name":"Murrough","surname":"Landon","rank":null,"pid":[{"value":"0000-0001-6828-9769","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Martin White","name":"Martin","surname":"White","rank":null,"pid":[{"value":"0000-0001-5474-4580","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Dimitrii Krasnopevtsev","name":"Dimitrii","surname":"Krasnopevtsev","rank":null,"pid":[{"value":"0000-0002-6356-372X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Susana Cabrera Urbán","name":"Susana","surname":"Cabrera Urbán","rank":null,"pid":[{"value":"0000-0001-7640-7913","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Hans-Christian Schultz-Coulon","name":"Hans-Christian","surname":"Schultz-Coulon","rank":null,"pid":[{"value":"0000-0002-0860-7240","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Stephen Jiggins","name":"Stephen","surname":"Jiggins","rank":null,"pid":[{"value":"0000-0003-2906-1977","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Andre Sopczak","name":"Andre","surname":"Sopczak","rank":null,"pid":[{"value":"0000-0001-6981-0544","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Cristinel Diaconu","name":"Cristinel","surname":"Diaconu","rank":null,"pid":[{"value":"0000-0002-6193-5091","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Hector de la Torre Perez","name":"Hector","surname":"de la Torre Perez","rank":null,"pid":[{"value":"0000-0002-4516-5269","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Costa Mezquita","name":"Costa","surname":"Mezquita","rank":null,"pid":[{"value":"0000-0002-2064-2954","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Sahal Yacoob","name":"Sahal","surname":"Yacoob","rank":null,"pid":[{"value":"0000-0001-6977-3456","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Jian Liu","name":"Jian","surname":"Liu","rank":null,"pid":[{"value":"0000-0002-8397-7620","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Oxana Smirnova","name":"Oxana","surname":"Smirnova","rank":null,"pid":[{"value":"0000-0003-2517-531X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Thomas Koffas","name":"Thomas","surname":"Koffas","rank":null,"pid":[{"value":"0000-0001-9612-4988","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Stephen Burke","name":"Stephen","surname":"Burke","rank":null,"pid":[{"value":"0000-0002-1962-8493","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Elizaveta Shabalina","name":"Elizaveta","surname":"Shabalina","rank":null,"pid":[{"value":"0000-0003-4849-556X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Nicolas Ellis","name":"Nicolas","surname":"Ellis","rank":null,"pid":[{"value":"0000-0002-1920-4930","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Robert Astalos","name":"Robert","surname":"Astalos","rank":null,"pid":[{"value":"0000-0001-5095-605X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Valerio Dao","name":"Valerio","surname":"Dao","rank":null,"pid":[{"value":"0000-0003-1645-8393","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Javier Alberto Murillo Quijada","name":"Javier Alberto","surname":"Murillo Quijada","rank":null,"pid":[{"value":"0000-0003-4933-2092","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Alan Litke","name":"Alan","surname":"Litke","rank":null,"pid":[{"value":"0000-0003-3973-3642","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Hans Peter Beck","name":"Hans Peter","surname":"Beck","rank":null,"pid":[{"value":"0000-0001-7212-1096","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Flavia De Almeida Dias","name":"Flavia","surname":"De Almeida Dias","rank":null,"pid":[{"value":"0000-0001-6882-5402","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Mykhailo Lisovyi","name":"Mykhailo","surname":"Lisovyi","rank":null,"pid":[{"value":"0000-0002-3014-5855","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Frank Ellinghaus","name":"Frank","surname":"Ellinghaus","rank":null,"pid":[{"value":"0000-0003-3596-5331","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Alexey Ezhilov","name":"Alexey","surname":"Ezhilov","rank":null,"pid":[{"value":"0000-0002-7520-293X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Anna Sfyrla","name":"Anna","surname":"Sfyrla","rank":null,"pid":[{"value":"0000-0002-3003-9905","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Marc-André Pleier","name":"Marc-André","surname":"Pleier","rank":null,"pid":[{"value":"0000-0002-9461-3494","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Aliaksei Hrynevich","name":"Aliaksei","surname":"Hrynevich","rank":null,"pid":[{"value":"0000-0002-5411-114X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Lucia Masetti","name":"Lucia","surname":"Masetti","rank":null,"pid":[{"value":"0000-0002-0038-5372","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Petr Balek","name":"Petr","surname":"Balek","rank":null,"pid":[{"value":"0000-0002-0942-1966","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Marco Sessa","name":"Marco","surname":"Sessa","rank":null,"pid":[{"value":"0000-0002-1402-7525","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Ilija Vukotic","name":"Ilija","surname":"Vukotic","rank":null,"pid":[{"value":"0000-0003-0472-3516","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Tova Holmes","name":"Tova","surname":"Holmes","rank":null,"pid":[{"value":"0000-0002-3959-5174","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Hermann Kolanoski","name":"Hermann","surname":"Kolanoski","rank":null,"pid":[{"value":"0000-0003-0435-2524","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Sigve Haug","name":"Sigve","surname":"Haug","rank":null,"pid":[{"value":"0000-0003-0442-3361","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Bruno Galhardo","name":"Bruno","surname":"Galhardo","rank":null,"pid":[{"value":"0000-0003-0641-301X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Nello Bruscino","name":"Nello","surname":"Bruscino","rank":null,"pid":[{"value":"0000-0002-6168-689X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Jonas Strandberg","name":"Jonas","surname":"Strandberg","rank":null,"pid":[{"value":"0000-0002-8913-0981","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Riccardo Vari","name":"Riccardo","surname":"Vari","rank":null,"pid":[{"value":"0000-0002-2814-1337","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Emmanuel Sauvan","name":"Emmanuel","surname":"Sauvan","rank":null,"pid":[{"value":"0000-0003-1921-2647","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Hartmut Sadrozinski","name":"Hartmut","surname":"Sadrozinski","rank":null,"pid":[{"value":"0000-0003-0019-5410","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Juerg Beringer","name":"Juerg","surname":"Beringer","rank":null,"pid":[{"value":"0000-0002-9975-1781","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"laurent chevalier","name":"laurent","surname":"chevalier","rank":null,"pid":[{"value":"0000-0003-3762-7264","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Dominik Duda","name":"Dominik","surname":"Duda","rank":null,"pid":[{"value":"0000-0002-5916-3467","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Takanori Kono","name":"Takanori","surname":"Kono","rank":null,"pid":[{"value":"0000-0003-1553-2950","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Igor Gorelov","name":"Igor","surname":"Gorelov","rank":null,"pid":[{"value":"0000-0001-5570-0133","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Noam Tal Hod","name":"Noam","surname":"Tal Hod","rank":null,"pid":[{"value":"0000-0001-5241-0544","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Umberto De Sanctis","name":"Umberto","surname":"De Sanctis","rank":null,"pid":[{"value":"0000-0003-4704-525X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Andrii Tykhonov","name":"Andrii","surname":"Tykhonov","rank":null,"pid":[{"value":"0000-0003-2908-7915","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Francois Corriveau","name":"Francois","surname":"Corriveau","rank":null,"pid":[{"value":"0000-0002-4970-7600","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Michaela Queitsch-Maitland","name":"Michaela","surname":"Queitsch-Maitland","rank":null,"pid":[{"value":"0000-0003-4643-515X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Iacopo Vivarelli","name":"Iacopo","surname":"Vivarelli","rank":null,"pid":[{"value":"0000-0003-0097-123X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"sotirios vlachos","name":"sotirios","surname":"vlachos","rank":null,"pid":[{"value":"0000-0002-1879-3745","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Archil Durglishvili","name":"Archil","surname":"Durglishvili","rank":null,"pid":[{"value":"0000-0003-4157-592X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Vladimir Cindro","name":"Vladimir","surname":"Cindro","rank":null,"pid":[{"value":"0000-0002-2037-7185","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Tim Adye","name":"Tim","surname":"Adye","rank":null,"pid":[{"value":"0000-0003-0627-5059","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Ruggero Turra","name":"Ruggero","surname":"Turra","rank":null,"pid":[{"value":"0000-0001-8740-796X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Susana Amor Santos","name":"Susana","surname":"Amor Santos","rank":null,"pid":[{"value":"0000-0001-7566-6067","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Thorsten Wengler","name":"Thorsten","surname":"Wengler","rank":null,"pid":[{"value":"0000-0002-4375-5265","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Sergio Grancagnolo","name":"Sergio","surname":"Grancagnolo","rank":null,"pid":[{"value":"0000-0001-8490-8304","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Koji Sato","name":"Koji","surname":"Sato","rank":null,"pid":[{"value":"0000-0001-8988-4065","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Marjorie Shapiro","name":"Marjorie","surname":"Shapiro","rank":null,"pid":[{"value":"0000-0001-8540-9654","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Paul Thompson","name":"Paul","surname":"Thompson","rank":null,"pid":[{"value":"0000-0002-6239-7715","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Daniele Zanzi","name":"Daniele","surname":"Zanzi","rank":null,"pid":[{"value":"0000-0002-1222-7937","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Adrian Irles","name":"Adrian","surname":"Irles","rank":null,"pid":[{"value":"0000-0001-5668-151X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Walter Hopkins","name":"Walter","surname":"Hopkins","rank":null,"pid":[{"value":"0000-0001-7814-8740","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Aurelio Juste","name":"Aurelio","surname":"Juste","rank":null,"pid":[{"value":"0000-0002-1558-3291","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Yoram Rozen","name":"Yoram","surname":"Rozen","rank":null,"pid":[{"value":"0000-0001-6969-0634","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Mateusz Dyndal","name":"Mateusz","surname":"Dyndal","rank":null,"pid":[{"value":"0000-0001-9632-6352","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Monika Wielers","name":"Monika","surname":"Wielers","rank":null,"pid":[{"value":"0000-0001-9232-4827","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Anna Kaczmarska","name":"Anna","surname":"Kaczmarska","rank":null,"pid":[{"value":"0000-0002-8880-4120","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Evgeny Khramov","name":"Evgeny","surname":"Khramov","rank":null,"pid":[{"value":"0000-0001-7400-6454","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Vincent Alexander Croft","name":"Vincent Alexander","surname":"Croft","rank":null,"pid":[{"value":"0000-0002-8731-4525","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Yuji Yamazaki","name":"Yuji","surname":"Yamazaki","rank":null,"pid":[{"value":"0000-0003-3710-6995","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Sau Lan Wu","name":"Sau Lan","surname":"Wu","rank":null,"pid":[{"value":"0000-0001-5866-1504","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Kevin Kröninger","name":"Kevin","surname":"Kröninger","rank":null,"pid":[{"value":"0000-0001-9873-0228","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Calin Alexa","name":"Calin","surname":"Alexa","rank":null,"pid":[{"value":"0000-0003-0922-7669","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Frank Filthaut","name":"Frank","surname":"Filthaut","rank":null,"pid":[{"value":"0000-0003-3338-2247","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Alaettin Serhan Mete","name":"Alaettin Serhan","surname":"Mete","rank":null,"pid":[{"value":"0000-0002-5508-530X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Michael Duehrssen-Debling","name":"Michael","surname":"Duehrssen-Debling","rank":null,"pid":[{"value":"0000-0002-5833-7058","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Torre Wenaus","name":"Torre","surname":"Wenaus","rank":null,"pid":[{"value":"0000-0002-8678-893X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Michele LIVAN","name":"Michele","surname":"LIVAN","rank":null,"pid":[{"value":"0000-0002-5877-0062","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Jose Guillermo Panduro Vazquez","name":"Jose Guillermo","surname":"Panduro Vazquez","rank":null,"pid":[{"value":"0000-0003-2605-8940","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Pascal Pralavorio","name":"Pascal","surname":"Pralavorio","rank":null,"pid":[{"value":"0000-0002-2452-6715","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Yuto Minami","name":"Yuto","surname":"Minami","rank":null,"pid":[{"value":"0000-0003-2176-8089","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Stephen Hillier","name":"Stephen","surname":"Hillier","rank":null,"pid":[{"value":"0000-0002-7599-6469","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Simon Viel","name":"Simon","surname":"Viel","rank":null,"pid":[{"value":"0000-0001-9554-4059","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Andreas Kugel","name":"Andreas","surname":"Kugel","rank":null,"pid":[{"value":"0000-0002-8493-6660","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Lene Kristian Bryngemark","name":"Lene Kristian","surname":"Bryngemark","rank":null,"pid":[{"value":"0000-0002-8420-3408","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Guenter Duckeck","name":"Guenter","surname":"Duckeck","rank":null,"pid":[{"value":"0000-0002-7756-7801","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Alexey Anisenkov","name":"Alexey","surname":"Anisenkov","rank":null,"pid":[{"value":"0000-0002-7201-5936","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Javier Jiménez Peña","name":"Javier","surname":"Jiménez Peña","rank":null,"pid":[{"value":"0000-0002-8705-628X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Sascha null","name":"Sascha","surname":null,"rank":null,"pid":[{"value":"0000-0003-2941-2829","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Evelyn Thomson","name":"Evelyn","surname":"Thomson","rank":null,"pid":[{"value":"0000-0001-6031-2768","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Andrea Formica","name":"Andrea","surname":"Formica","rank":null,"pid":[{"value":"0000-0001-8308-2643","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Mattias Ellert","name":"Mattias","surname":"Ellert","rank":null,"pid":[{"value":"0000-0001-5265-3175","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Richard Keeler","name":"Richard","surname":"Keeler","rank":null,"pid":[{"value":"0000-0002-0510-4189","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Karolos Potamianos","name":"Karolos","surname":"Potamianos","rank":null,"pid":[{"value":"0000-0001-7839-9785","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Muhammad Alhroob","name":"Muhammad","surname":"Alhroob","rank":null,"pid":[{"value":"0000-0001-7569-7111","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Marie-Helene Genest","name":"Marie-Helene","surname":"Genest","rank":null,"pid":[{"value":"0000-0002-4098-2024","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"melissa franklin","name":"melissa","surname":"franklin","rank":null,"pid":[{"value":"0000-0002-6595-883X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"John Baines","name":"John","surname":"Baines","rank":null,"pid":[{"value":"0000-0003-0770-2702","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Jean-Baptiste de Vivie","name":"Jean-Baptiste","surname":"de Vivie","rank":null,"pid":[{"value":"0000-0001-9163-2211","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Kristian Gregersen","name":"Kristian","surname":"Gregersen","rank":null,"pid":[{"value":"0000-0003-0295-1670","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Elisabeth Schopf","name":"Elisabeth","surname":"Schopf","rank":null,"pid":[{"value":"0000-0002-9340-2214","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Tristan Beau","name":"Tristan","surname":"Beau","rank":null,"pid":[{"value":"0000-0002-2022-2140","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Ask Emil Løvschall-Jensen","name":"Ask Emil","surname":"Løvschall-Jensen","rank":null,"pid":[{"value":"0000-0003-1834-4904","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Karel Smolek","name":"Karel","surname":"Smolek","rank":null,"pid":[{"value":"0000-0002-5996-7000","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Wendy Taylor","name":"Wendy","surname":"Taylor","rank":null,"pid":[{"value":"0000-0002-6596-9125","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"James Robinson","name":"James","surname":"Robinson","rank":null,"pid":[{"value":"0000-0002-2856-9413","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Arno Straessner","name":"Arno","surname":"Straessner","rank":null,"pid":[{"value":"0000-0003-2460-6659","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Bruno Lenzi","name":"Bruno","surname":"Lenzi","rank":null,"pid":[{"value":"0000-0002-1024-4004","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Thomas G McCarthy","name":"Thomas G","surname":"McCarthy","rank":null,"pid":[{"value":"0000-0002-1182-3526","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Maria Curatolo","name":"Maria","surname":"Curatolo","rank":null,"pid":[{"value":"0000-0003-0978-4879","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Zuzana Rurikova","name":"Zuzana","surname":"Rurikova","rank":null,"pid":[{"value":"0000-0003-3051-9607","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Norman Gee","name":"Norman","surname":"Gee","rank":null,"pid":[{"value":"0000-0002-8833-3154","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Craig Buttar","name":"Craig","surname":"Buttar","rank":null,"pid":[{"value":"0000-0003-0188-6491","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Sophie Trincaz-Duvoid","name":"Sophie","surname":"Trincaz-Duvoid","rank":null,"pid":[{"value":"0000-0001-5913-0828","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Danilo Enoque Ferreira de Lima","name":"Danilo Enoque","surname":"Ferreira de Lima","rank":null,"pid":[{"value":"0000-0002-6606-3595","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Nektarios Benekos","name":"Nektarios","surname":"Benekos","rank":null,"pid":[{"value":"0000-0001-7831-8762","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Evgenii Baldin","name":"Evgenii","surname":"Baldin","rank":null,"pid":[{"value":"0000-0002-9854-975X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Craig Sawyer","name":"Craig","surname":"Sawyer","rank":null,"pid":[{"value":"0000-0002-2027-1428","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"George Redlinger","name":"George","surname":"Redlinger","rank":null,"pid":[{"value":"0000-0002-6437-9991","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Philip Sommer","name":"Philip","surname":"Sommer","rank":null,"pid":[{"value":"0000-0003-1703-7304","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Simone Monzani","name":"Simone","surname":"Monzani","rank":null,"pid":[{"value":"0000-0002-0479-2207","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Eirik Gramstad","name":"Eirik","surname":"Gramstad","rank":null,"pid":[{"value":"0000-0001-5792-5352","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Anna Lipniacka","name":"Anna","surname":"Lipniacka","rank":null,"pid":[{"value":"0000-0002-8759-8564","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Oana Vickey Boeriu","name":"Oana","surname":"Vickey Boeriu","rank":null,"pid":[{"value":"0000-0002-6497-6809","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Fridolin Dittus","name":"Fridolin","surname":"Dittus","rank":null,"pid":[{"value":"0000-0002-1760-8237","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Antonio Salvucci","name":"Antonio","surname":"Salvucci","rank":null,"pid":[{"value":"0000-0003-4876-2613","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Carlo Dallapiccola","name":"Carlo","surname":"Dallapiccola","rank":null,"pid":[{"value":"0000-0002-1391-2477","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Konstantinos Ntekas","name":"Konstantinos","surname":"Ntekas","rank":null,"pid":[{"value":"0000-0001-9252-6509","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Juan Antonio Aguilar Saavedra","name":"Juan Antonio","surname":"Aguilar Saavedra","rank":null,"pid":[{"value":"0000-0002-5475-8920","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Martine Bosman","name":"Martine","surname":"Bosman","rank":null,"pid":[{"value":"0000-0002-7290-643X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Trevor Vickey","name":"Trevor","surname":"Vickey","rank":null,"pid":[{"value":"0000-0002-1596-2611","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Christian Ohm","name":"Christian","surname":"Ohm","rank":null,"pid":[{"value":"0000-0002-8015-7512","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"William Davey","name":"William","surname":"Davey","rank":null,"pid":[{"value":"0000-0002-8140-8619","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Wolfgang Walkowiak","name":"Wolfgang","surname":"Walkowiak","rank":null,"pid":[{"value":"0000-0002-0385-3784","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Austin Basye","name":"Austin","surname":"Basye","rank":null,"pid":[{"value":"0000-0002-7519-1310","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Kuhan Wang","name":"Kuhan","surname":"Wang","rank":null,"pid":[{"value":"0000-0002-6151-0034","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Cristiano Alpigiani","name":"Cristiano","surname":"Alpigiani","rank":null,"pid":[{"value":"0000-0002-7641-5814","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"James Monk","name":"James","surname":"Monk","rank":null,"pid":[{"value":"0000-0001-8471-9247","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Christopher Pollard","name":"Christopher","surname":"Pollard","rank":null,"pid":[{"value":"0000-0002-3690-3960","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Jozsef Toth","name":"Jozsef","surname":"Toth","rank":null,"pid":[{"value":"0000-0001-9128-6080","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Vitaliano Chiarella","name":"Vitaliano","surname":"Chiarella","rank":null,"pid":[{"value":"0000-0002-4210-2924","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Jos Vermeulen","name":"Jos","surname":"Vermeulen","rank":null,"pid":[{"value":"0000-0003-4378-5736","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Yann Coadou","name":"Yann","surname":"Coadou","rank":null,"pid":[{"value":"0000-0001-8195-7004","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Christine Kourkoumelis","name":"Christine","surname":"Kourkoumelis","rank":null,"pid":[{"value":"0000-0003-0083-274X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Karishma Sekhon","name":"Karishma","surname":"Sekhon","rank":null,"pid":[{"value":"0000-0001-7677-8394","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Kun Liu","name":"Kun","surname":"Liu","rank":null,"pid":[{"value":"0000-0001-5807-0501","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Matt LeBlanc","name":"Matt","surname":"LeBlanc","rank":null,"pid":[{"value":"0000-0001-5977-6418","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Ewan Hill","name":"Ewan","surname":"Hill","rank":null,"pid":[{"value":"0000-0002-1725-7414","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Diane Cinca","name":"Diane","surname":"Cinca","rank":null,"pid":[{"value":"0000-0003-0944-8998","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Benedict Tobias Winter","name":"Benedict Tobias","surname":"Winter","rank":null,"pid":[{"value":"0000-0001-9606-7688","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Steven Schramm","name":"Steven","surname":"Schramm","rank":null,"pid":[{"value":"0000-0001-9031-6751","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Yusheng Wu","name":"Yusheng","surname":"Wu","rank":null,"pid":[{"value":"0000-0002-1528-4865","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Orel Gueta","name":"Orel","surname":"Gueta","rank":null,"pid":[{"value":"0000-0002-9440-2398","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Federico Meloni","name":"Federico","surname":"Meloni","rank":null,"pid":[{"value":"0000-0001-7075-2214","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Sylvain Tisserant","name":"Sylvain","surname":"Tisserant","rank":null,"pid":[{"value":"0000-0002-0294-6727","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Dimitrios Iliadis","name":"Dimitrios","surname":"Iliadis","rank":null,"pid":[{"value":"0000-0001-6303-2761","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Sebastien Binet","name":"Sebastien","surname":"Binet","rank":null,"pid":[{"value":"0000-0003-4913-6104","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Marcella Bona","name":"Marcella","surname":"Bona","rank":null,"pid":[{"value":"0000-0002-9660-580X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Ki Lie","name":"Ki","surname":"Lie","rank":null,"pid":[{"value":"0000-0002-5779-5989","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"David Sankey","name":"David","surname":"Sankey","rank":null,"pid":[{"value":"0000-0003-0955-4213","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Michele Faucci Giannelli","name":"Michele","surname":"Faucci Giannelli","rank":null,"pid":[{"value":"0000-0003-3731-820X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Georges Azuelos","name":"Georges","surname":"Azuelos","rank":null,"pid":[{"value":"0000-0003-4241-022X","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"David Britton","name":"David","surname":"Britton","rank":null,"pid":[{"value":"0000-0001-9998-4342","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Henri Bachacou","name":"Henri","surname":"Bachacou","rank":null,"pid":[{"value":"0000-0002-2256-4515","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Stefania Stucci","name":"Stefania","surname":"Stucci","rank":null,"pid":[{"value":"0000-0002-1639-4484","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Peter Berta","name":"Peter","surname":"Berta","rank":null,"pid":[{"value":"0000-0003-0780-0345","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"SERKANT ALİ ÇETİN","name":"SERKANT ALİ","surname":"ÇETİN","rank":null,"pid":[{"value":"0000-0001-5050-8441","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Alexey Zhemchugov","name":"Alexey","surname":"Zhemchugov","rank":null,"pid":[{"value":"0000-0002-3360-4965","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Yasushi Nagasaka","name":"Yasushi","surname":"Nagasaka","rank":null,"pid":[{"value":"0000-0002-3669-9525","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"James Walder","name":"James","surname":"Walder","rank":null,"pid":[{"value":"0000-0002-9039-8758","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Marina Rotaru","name":"Marina","surname":"Rotaru","rank":null,"pid":[{"value":"0000-0003-4088-6275","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Chunhui Chen","name":"Chunhui","surname":"Chen","rank":null,"pid":[{"value":"0000-0003-1589-9955","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Valentina Tudorache","name":"Valentina","surname":"Tudorache","rank":null,"pid":[{"value":"0000-0001-5384-3843","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Amanda Cooper-Sarkar","name":"Amanda","surname":"Cooper-Sarkar","rank":null,"pid":[{"value":"0000-0002-7107-5902","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Paul Dervan","name":"Paul","surname":"Dervan","rank":null,"pid":[{"value":"0000-0003-3929-8046","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Laura Gonella","name":"Laura","surname":"Gonella","rank":null,"pid":[{"value":"0000-0002-4919-0808","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Georges Aad","name":"Georges","surname":"Aad","rank":null,"pid":[{"value":"0000-0002-6665-4934","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Hok-Chuen Cheng","name":"Hok-Chuen","surname":"Cheng","rank":null,"pid":[{"value":"0000-0002-8912-4389","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Michal Svatos","name":"Michal","surname":"Svatos","rank":null,"pid":[{"value":"0000-0002-7199-3383","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Jens Janssen","name":"Jens","surname":"Janssen","rank":null,"pid":[{"value":"0000-0002-2391-3078","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Jana Faltova","name":"Jana","surname":"Faltova","rank":null,"pid":[{"value":"0000-0003-4278-7182","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Trisha Farooque","name":"Trisha","surname":"Farooque","rank":null,"pid":[{"value":"0000-0003-1363-9324","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"andrea gabrielli","name":"andrea","surname":"gabrielli","rank":null,"pid":[{"value":"0000-0003-0768-9325","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Santiago Gonzalez de la Hoz","name":"Santiago","surname":"Gonzalez de la Hoz","rank":null,"pid":[{"value":"0000-0001-5304-5390","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"José Ocariz","name":"José","surname":"Ocariz","rank":null,"pid":[{"value":"0000-0003-2262-0780","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null},{"fullname":"Michele Weber","name":"Michele","surname":"Weber","rank":null,"pid":[{"value":"0000-0002-2770-9031","qualifier":{"classid":"ORCID","classname":"ORCID","schemeid":"ORCID","schemename":"ORCID"},"dataInfo":null}],"affiliation":null}] diff --git a/dhp-common/src/test/resources/eu/dnetlib/dhp/oa/merge/authors_publication_sample.json b/dhp-common/src/test/resources/eu/dnetlib/dhp/oa/merge/authors_publication_sample.json new file mode 100644 index 000000000..eac239b93 --- /dev/null +++ b/dhp-common/src/test/resources/eu/dnetlib/dhp/oa/merge/authors_publication_sample.json @@ -0,0 +1,2 @@ +50|arXiv_dedup_::34e03f2336b8b28286550425e65634ea +[{"fullname":"Aad, G.","name":"G.","surname":"Aad","rank":1,"pid":[],"affiliation":null},{"fullname":"Ayoub, M.K.","name":"M. K.","surname":"Ayoub","rank":2,"pid":[],"affiliation":null},{"fullname":"Bassalat, A.","name":"A.","surname":"Bassalat","rank":3,"pid":[],"affiliation":null},{"fullname":"Becot, C.","name":"C.","surname":"Becot","rank":4,"pid":[],"affiliation":null},{"fullname":"Binet, S.","name":"S.","surname":"Binet","rank":5,"pid":[],"affiliation":null},{"fullname":"Bourdarios, C.","name":"C.","surname":"Bourdarios","rank":6,"pid":[],"affiliation":null},{"fullname":"Regie, J.B. de Vivie de","name":"J. B. Vivie","surname":"Regie","rank":7,"pid":[],"affiliation":null},{"fullname":"Delgove, D.","name":"D.","surname":"Delgove","rank":8,"pid":[],"affiliation":null},{"fullname":"Duflot, L.","name":"L.","surname":"Duflot","rank":9,"pid":[],"affiliation":null},{"fullname":"Escalier, M.","name":"M.","surname":"Escalier","rank":10,"pid":[],"affiliation":null},{"fullname":"Fayard, L.","name":"L.","surname":"Fayard","rank":11,"pid":[],"affiliation":null},{"fullname":"Fournier, D.","name":"D.","surname":"Fournier","rank":12,"pid":[],"affiliation":null},{"fullname":"Gkougkousis, E.L.","name":"E. L.","surname":"Gkougkousis","rank":13,"pid":[],"affiliation":null},{"fullname":"Grivaz, J.-F.","name":"J. -F","surname":"Grivaz","rank":14,"pid":[],"affiliation":null},{"fullname":"Guillemin, T.","name":"T.","surname":"Guillemin","rank":15,"pid":[],"affiliation":null},{"fullname":"Hariri, F.","name":"F.","surname":"Hariri","rank":16,"pid":[],"affiliation":null},{"fullname":"Henrot-Versillé, S.","name":"S.","surname":"Henrot-Versillé","rank":17,"pid":[],"affiliation":null},{"fullname":"Hrivnac, J.","name":"J.","surname":"Hrivnac","rank":18,"pid":[],"affiliation":null},{"fullname":"Iconomidou-Fayard, L.","name":"L.","surname":"Iconomidou-Fayard","rank":19,"pid":[],"affiliation":null},{"fullname":"Kado, M.","name":"M.","surname":"Kado","rank":20,"pid":[],"affiliation":null},{"fullname":"Lounis, A.","name":"A.","surname":"Lounis","rank":21,"pid":[],"affiliation":null},{"fullname":"Makovec, N.","name":"N.","surname":"Makovec","rank":22,"pid":[],"affiliation":null},{"fullname":"Morange, N.","name":"N.","surname":"Morange","rank":23,"pid":[],"affiliation":null},{"fullname":"Nellist, C.","name":"C.","surname":"Nellist","rank":24,"pid":[],"affiliation":null},{"fullname":"Poggioli, L.","name":"L.","surname":"Poggioli","rank":25,"pid":[],"affiliation":null},{"fullname":"Puzo, P.","name":"P.","surname":"Puzo","rank":26,"pid":[],"affiliation":null},{"fullname":"Renaud, A.","name":"A.","surname":"Renaud","rank":27,"pid":[],"affiliation":null},{"fullname":"Rousseau, D.","name":"D.","surname":"Rousseau","rank":28,"pid":[],"affiliation":null},{"fullname":"Rybkin, G.","name":"G.","surname":"Rybkin","rank":29,"pid":[],"affiliation":null},{"fullname":"Schaffer, A.C.","name":"A. C.","surname":"Schaffer","rank":30,"pid":[],"affiliation":null},{"fullname":"Scifo, E.","name":"E.","surname":"Scifo","rank":31,"pid":[],"affiliation":null},{"fullname":"Serin, L.","name":"L.","surname":"Serin","rank":32,"pid":[],"affiliation":null},{"fullname":"Simion, S.","name":"S.","surname":"Simion","rank":33,"pid":[],"affiliation":null},{"fullname":"Tanaka, R.","name":"R.","surname":"Tanaka","rank":34,"pid":[],"affiliation":null},{"fullname":"Tran, H.L.","name":"H. L.","surname":"Tran","rank":35,"pid":[],"affiliation":null},{"fullname":"Zerwas, D.","name":"D.","surname":"Zerwas","rank":36,"pid":[],"affiliation":null},{"fullname":"Zhang, Zhongkai","name":"Zhongkai","surname":"Zhang","rank":37,"pid":[],"affiliation":null},{"fullname":"Zhao, Y.","name":"Y.","surname":"Zhao","rank":38,"pid":[],"affiliation":null},{"fullname":"Rahal, G.","name":"G.","surname":"Rahal","rank":39,"pid":[],"affiliation":null},{"fullname":"Barnovska, Z.","name":"Z.","surname":"Barnovska","rank":40,"pid":[],"affiliation":null},{"fullname":"Berger, N.","name":"N.","surname":"Berger","rank":41,"pid":[],"affiliation":null},{"fullname":"Delmastro, M.","name":"M.","surname":"Delmastro","rank":42,"pid":[],"affiliation":null},{"fullname":"Ciaccio, L. Di","name":"L. Di","surname":"Ciaccio","rank":43,"pid":[],"affiliation":null},{"fullname":"Elles, S.","name":"S.","surname":"Elles","rank":44,"pid":[],"affiliation":null},{"fullname":"Hryn’ova, T.","name":"T.","surname":"Hryn’ova","rank":45,"pid":[],"affiliation":null},{"fullname":"Jézéquel, S.","name":"S.","surname":"Jézéquel","rank":46,"pid":[],"affiliation":null},{"fullname":"Koletsou, I.","name":"I.","surname":"Koletsou","rank":47,"pid":[],"affiliation":null},{"fullname":"Lafaye, R.","name":"R.","surname":"Lafaye","rank":48,"pid":[],"affiliation":null},{"fullname":"Leveque, J.","name":"J.","surname":"Leveque","rank":49,"pid":[],"affiliation":null},{"fullname":"Massol, N.","name":"N.","surname":"Massol","rank":50,"pid":[],"affiliation":null},{"fullname":"Sauvage, G.","name":"G.","surname":"Sauvage","rank":51,"pid":[],"affiliation":null},{"fullname":"Sauvan, E.","name":"E.","surname":"Sauvan","rank":52,"pid":[],"affiliation":null},{"fullname":"Simard, O.","name":"O.","surname":"Simard","rank":53,"pid":[],"affiliation":null},{"fullname":"Todorov, T.","name":"T.","surname":"Todorov","rank":54,"pid":[],"affiliation":null},{"fullname":"Wingerter-Seez, I.","name":"I.","surname":"Wingerter-Seez","rank":55,"pid":[],"affiliation":null},{"fullname":"Albrand, S.","name":"S.","surname":"Albrand","rank":56,"pid":[],"affiliation":null},{"fullname":"Brown, J.","name":"J.","surname":"Brown","rank":57,"pid":[],"affiliation":null},{"fullname":"Collot, J.","name":"J.","surname":"Collot","rank":58,"pid":[],"affiliation":null},{"fullname":"Crépé-Renaudin, S.","name":"S.","surname":"Crépé-Renaudin","rank":59,"pid":[],"affiliation":null},{"fullname":"Delsart, P.A.","name":"P. A.","surname":"Delsart","rank":60,"pid":[],"affiliation":null},{"fullname":"Gabaldon, C.","name":"C.","surname":"Gabaldon","rank":61,"pid":[],"affiliation":null},{"fullname":"Genest, M.H.","name":"M. H.","surname":"Genest","rank":62,"pid":[],"affiliation":null},{"fullname":"Hostachy, J.Y.","name":"J. Y.","surname":"Hostachy","rank":63,"pid":[],"affiliation":null},{"fullname":"Ledroit-Guillon, F.","name":"F.","surname":"Ledroit-Guillon","rank":64,"pid":[],"affiliation":null},{"fullname":"Lleres, A.","name":"A.","surname":"Lleres","rank":65,"pid":[],"affiliation":null},{"fullname":"Lucotte, A.","name":"A.","surname":"Lucotte","rank":66,"pid":[],"affiliation":null},{"fullname":"Malek, F.","name":"F.","surname":"Malek","rank":67,"pid":[],"affiliation":null},{"fullname":"Monini, C.","name":"C.","surname":"Monini","rank":68,"pid":[],"affiliation":null},{"fullname":"Stark, J.","name":"J.","surname":"Stark","rank":69,"pid":[],"affiliation":null},{"fullname":"Trocmé, B.","name":"B.","surname":"Trocmé","rank":70,"pid":[],"affiliation":null},{"fullname":"Wu, M.","name":"M.","surname":"Wu","rank":71,"pid":[],"affiliation":null},{"fullname":"Alio, L.","name":"L.","surname":"Alio","rank":72,"pid":[],"affiliation":null},{"fullname":"Barbero, M.","name":"M.","surname":"Barbero","rank":73,"pid":[],"affiliation":null},{"fullname":"Coadou, Y.","name":"Y.","surname":"Coadou","rank":74,"pid":[],"affiliation":null},{"fullname":"Diaconu, C.","name":"C.","surname":"Diaconu","rank":75,"pid":[],"affiliation":null},{"fullname":"Diglio, Sara","name":"Sara","surname":"Diglio","rank":76,"pid":[],"affiliation":null},{"fullname":"Djama, F.","name":"F.","surname":"Djama","rank":77,"pid":[],"affiliation":null},{"fullname":"Duccu, O.","name":"O.","surname":"Duccu","rank":78,"pid":[],"affiliation":null},{"fullname":"Feligioni, L.","name":"L.","surname":"Feligioni","rank":79,"pid":[],"affiliation":null},{"fullname":"Gao, J.","name":"J.","surname":"Gao","rank":80,"pid":[],"affiliation":null},{"fullname":"Hallewell, G.D.","name":"G. D.","surname":"Hallewell","rank":81,"pid":[],"affiliation":null},{"fullname":"Hubaut, F.","name":"F.","surname":"Hubaut","rank":82,"pid":[],"affiliation":null},{"fullname":"Kahn, S.J.","name":"S. J.","surname":"Kahn","rank":83,"pid":[],"affiliation":null},{"fullname":"Knoops, E. B. F. G.","name":"E. B. F. G.","surname":"Knoops","rank":84,"pid":[],"affiliation":null},{"fullname":"Guirriec, E. Le","name":"E. Le","surname":"Guirriec","rank":85,"pid":[],"affiliation":null},{"fullname":"Liu, J.","name":"J.","surname":"Liu","rank":86,"pid":[],"affiliation":null},{"fullname":"Liu, K.","name":"K.","surname":"Liu","rank":87,"pid":[],"affiliation":null},{"fullname":"Madaffari, D.","name":"D.","surname":"Madaffari","rank":88,"pid":[],"affiliation":null},{"fullname":"Mochizuki, K.","name":"K.","surname":"Mochizuki","rank":89,"pid":[],"affiliation":null},{"fullname":"Monnier, E.","name":"E.","surname":"Monnier","rank":90,"pid":[],"affiliation":null},{"fullname":"Muanza, S.","name":"S.","surname":"Muanza","rank":91,"pid":[],"affiliation":null},{"fullname":"Nagai, Y.","name":"Y.","surname":"Nagai","rank":92,"pid":[],"affiliation":null},{"fullname":"Nagy, E.","name":"E.","surname":"Nagy","rank":93,"pid":[],"affiliation":null},{"fullname":"Pralavorio, P.","name":"P.","surname":"Pralavorio","rank":94,"pid":[],"affiliation":null},{"fullname":"Rozanov, A.","name":"A.","surname":"Rozanov","rank":95,"pid":[],"affiliation":null},{"fullname":"Serre, T.","name":"T.","surname":"Serre","rank":96,"pid":[],"affiliation":null},{"fullname":"Talby, M.","name":"M.","surname":"Talby","rank":97,"pid":[],"affiliation":null},{"fullname":"Torres, R.E. Ticse","name":"R. E. Ticse","surname":"Torres","rank":98,"pid":[],"affiliation":null},{"fullname":"Tiouchichine, E.","name":"E.","surname":"Tiouchichine","rank":99,"pid":[],"affiliation":null},{"fullname":"Tisserant, S.","name":"S.","surname":"Tisserant","rank":100,"pid":[],"affiliation":null},{"fullname":"Toth, J.","name":"J.","surname":"Toth","rank":101,"pid":[],"affiliation":null},{"fullname":"Touchard, F.","name":"F.","surname":"Touchard","rank":102,"pid":[],"affiliation":null},{"fullname":"Vacavant, L.","name":"L.","surname":"Vacavant","rank":103,"pid":[],"affiliation":null},{"fullname":"Boumediene, D.","name":"D.","surname":"Boumediene","rank":104,"pid":[],"affiliation":null},{"fullname":"Busato, Emmanuel","name":"Emmanuel","surname":"Busato","rank":105,"pid":[],"affiliation":null},{"fullname":"Calvet, D.","name":"D.","surname":"Calvet","rank":106,"pid":[],"affiliation":null},{"fullname":"Calvet, S.","name":"S.","surname":"Calvet","rank":107,"pid":[],"affiliation":null},{"fullname":"Donini, J.","name":"J.","surname":"Donini","rank":108,"pid":[],"affiliation":null},{"fullname":"Dubreuil, E.","name":"E.","surname":"Dubreuil","rank":109,"pid":[],"affiliation":null},{"fullname":"Gilles, G.","name":"G.","surname":"Gilles","rank":110,"pid":[],"affiliation":null},{"fullname":"Gris, Ph.","name":"Ph","surname":"Gris","rank":111,"pid":[],"affiliation":null},{"fullname":"Liao, H.","name":"H.","surname":"Liao","rank":112,"pid":[],"affiliation":null},{"fullname":"Madar, R.","name":"R.","surname":"Madar","rank":113,"pid":[],"affiliation":null},{"fullname":"Pallin, D.","name":"D.","surname":"Pallin","rank":114,"pid":[],"affiliation":null},{"fullname":"Saez, S.M. Romano","name":"S. M. Romano","surname":"Saez","rank":115,"pid":[],"affiliation":null},{"fullname":"Santoni, C.","name":"C.","surname":"Santoni","rank":116,"pid":[],"affiliation":null},{"fullname":"Simon, D.","name":"D.","surname":"Simon","rank":117,"pid":[],"affiliation":null},{"fullname":"Theveneaux-Pelzer, Timothée","name":"Timothée","surname":"Theveneaux-Pelzer","rank":118,"pid":[],"affiliation":null},{"fullname":"Vazeille, F.","name":"F.","surname":"Vazeille","rank":119,"pid":[],"affiliation":null},{"fullname":"Yatsenko, E.","name":"E.","surname":"Yatsenko","rank":120,"pid":[],"affiliation":null}] \ No newline at end of file diff --git a/dhp-workflows/dhp-graph-mapper/src/main/scala/eu/dnetlib/dhp/enrich/orcid/SparkEnrichGraphWithOrcidAuthors.scala b/dhp-workflows/dhp-graph-mapper/src/main/scala/eu/dnetlib/dhp/enrich/orcid/SparkEnrichGraphWithOrcidAuthors.scala index e190b2b33..9b85ba4f2 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/scala/eu/dnetlib/dhp/enrich/orcid/SparkEnrichGraphWithOrcidAuthors.scala +++ b/dhp-workflows/dhp-graph-mapper/src/main/scala/eu/dnetlib/dhp/enrich/orcid/SparkEnrichGraphWithOrcidAuthors.scala @@ -27,6 +27,8 @@ class SparkEnrichGraphWithOrcidAuthors(propertyPath: String, args: Array[String] def enrichResult(spark: SparkSession, graphPath: String, orcidPath: String, outputPath: String): Unit = { val orcidPublication = generateOrcidTable(spark, orcidPath) + + implicit val publicationEncoder = Encoders.bean(classOf[Publication]) val aschema = new StructType() @@ -68,6 +70,16 @@ class SparkEnrichGraphWithOrcidAuthors(propertyPath: String, args: Array[String] .select("dnet_id", "orcid_authors") .cache() + + orcidPublication + .join( + entities, + lower(col("schema")).equalTo(lower(col("pid_schema"))) && + lower(col("value")).equalTo(lower(col("pid_value"))), + "inner" + ) + .groupBy(col("dnet_id")).agg(collect_set(struct(col("pid_schema"), col("pid_value")))).write.mode("Overwrite").save("/user/sandro.labruzzo/enrich_pub") + val publication = spark.read.schema(publicationEncoder.schema).json(graphPath).as[Publication] publication @@ -95,13 +107,14 @@ class SparkEnrichGraphWithOrcidAuthors(propertyPath: String, args: Array[String] .where( "identifier.schema = 'doi' or identifier.schema ='pmid' or identifier.schema ='pmc' or identifier.schema ='arxiv' or identifier.schema ='handle'" ) - orcidAuthors + val orcidPublication =orcidAuthors .join(orcidWorks, orcidAuthors("orcid").equalTo(orcidWorks("orcid"))) .select( col("identifier.schema").alias("schema"), col("identifier.value").alias("value"), struct(orcidAuthors("orcid").alias("orcid"), col("givenName"), col("familyName")).alias("author") ) + orcidPublication } } From 59111713fac09a4508899f8102946bb5f04c7910 Mon Sep 17 00:00:00 2001 From: Sandro La Bruzzo Date: Tue, 28 Nov 2023 09:00:48 +0100 Subject: [PATCH 364/449] added comment --- .../eu/dnetlib/dhp/oa/merge/AuthorMerger.java | 95 ++++--------------- .../eu/dnetlib/oa/merge/AuthorMergerTest.java | 8 +- .../SparkEnrichGraphWithOrcidAuthors.scala | 2 +- 3 files changed, 21 insertions(+), 84 deletions(-) diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/AuthorMerger.java b/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/AuthorMerger.java index 852ee163d..a1c3c2cc0 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/AuthorMerger.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/AuthorMerger.java @@ -1,17 +1,11 @@ package eu.dnetlib.dhp.oa.merge; -import java.io.FileWriter; -import java.io.IOException; import java.text.Normalizer; import java.util.*; -import java.util.function.Function; import java.util.stream.Collectors; -import java.util.stream.Stream; import org.apache.commons.lang3.StringUtils; -import org.apache.commons.lang3.tuple.MutablePair; -import org.apache.commons.lang3.tuple.Pair; import org.jetbrains.annotations.NotNull; import com.wcohen.ss.JaroWinkler; @@ -161,42 +155,8 @@ public class AuthorMerger { .replaceAll("(\\n)+", " ") .trim(); -// return Arrays.stream(fullname.split("[\\s | , | ;]+")).map(String::toLowerCase).sorted().collect(Collectors.joining()); } -// -// public static List enrichOrcid2(List baseAuthor, List orcidAuthor) { -// if (baseAuthor == null || baseAuthor.isEmpty()) -// return orcidAuthor; -// -// if (orcidAuthor == null || orcidAuthor.isEmpty()) -// return baseAuthor; -// -// if (baseAuthor.size() == 1 && orcidAuthor.size() > 10) -// return baseAuthor; -// -// -// Map> pubClusters = baseAuthor.stream().collect(Collectors.toMap(AuthorMerger::generateAuthorkey, Arrays::asList, (a, b) -> { -// a.addAll(b); -// return a; -// })); -// -// Map> orcidClusters = baseAuthor.stream().collect(Collectors.toMap(AuthorMerger::generateAuthorkey, Arrays::asList, (a, b) -> { -// a.addAll(b); -// return a; -// })); -// -// System.out.println(pubClusters.keySet().size()); -// System.out.println(orcidClusters.keySet().size()); -// -// -// -// -// return null; -// -// -// } - static int hammingDist(String str1, String str2) { if (str1.length() != str2.length()) return Math.max(str1.length(), str2.length()); @@ -220,7 +180,14 @@ public class AuthorMerger { return null; } - public static boolean checkSimilarity2(final Author left, final Author right) { + /** + * This method tries to figure out when two author are the same in the contest + * of ORCID enrichment + * @param left Author in the OAF entity + * @param right Author ORCID + * @return based on a heuristic on the names of the authors if they are the same. + */ + public static boolean checkORCIDSimilarity(final Author left, final Author right) { final Person pl = parse(left); final Person pr = parse(right); @@ -267,8 +234,16 @@ public class AuthorMerger { else return false; } + // - public static List enrichOrcid2(List baseAuthor, List orcidAuthor) { + + /** + * Method to enrich ORCID information in one list of authors based on another list + * @param baseAuthor the Author List in the OAF Entity + * @param orcidAuthor The list of ORCID Author intersected + * @return The Author List of the OAF Entity enriched with the orcid Author + */ + public static List enrichOrcid(List baseAuthor, List orcidAuthor) { if (baseAuthor == null || baseAuthor.isEmpty()) return orcidAuthor; @@ -283,7 +258,7 @@ public class AuthorMerger { oAuthor.addAll(orcidAuthor); baseAuthor.forEach(ba -> { - Optional aMatch = oAuthor.stream().filter(oa -> checkSimilarity2(ba, oa)).findFirst(); + Optional aMatch = oAuthor.stream().filter(oa -> checkORCIDSimilarity(ba, oa)).findFirst(); if (aMatch.isPresent()) { final Author sameAuthor = aMatch.get(); addPid(ba, sameAuthor.getPid()); @@ -293,40 +268,6 @@ public class AuthorMerger { return baseAuthor; } - public static List enrichOrcid(List baseAuthor, List orcidAuthor) { - - if (baseAuthor == null || baseAuthor.isEmpty()) - return orcidAuthor; - - if (orcidAuthor == null || orcidAuthor.isEmpty()) - return baseAuthor; - - if (baseAuthor.size() == 1 && orcidAuthor.size() > 10) - return baseAuthor; - - final Double similarityMatrix[][] = new Double[baseAuthor.size()][orcidAuthor.size()]; - - final List maxColums = new ArrayList<>(); - - for (int i = 0; i < orcidAuthor.size(); i++) - maxColums.add(new SimilarityCellInfo()); - - for (int i = 0; i < baseAuthor.size(); i++) { - for (int j = 0; j < orcidAuthor.size(); j++) { - similarityMatrix[i][j] = sim(baseAuthor.get(i), orcidAuthor.get(j)); - if (maxColums.get(j).maxColumnSimilarity < similarityMatrix[i][j]) - maxColums.get(j).setValues(i, j, similarityMatrix[i][j]); - } - } - maxColums - .stream() - .sorted() - .filter(si -> si.maxColumnSimilarity > 0.85) - .forEach(si -> addPid(baseAuthor.get(si.authorPosition), orcidAuthor.get(si.orcidPosition).getPid())); - return baseAuthor; - - } - private static void addPid(final Author a, final List pids) { if (a.getPid() == null) { diff --git a/dhp-common/src/test/java/eu/dnetlib/oa/merge/AuthorMergerTest.java b/dhp-common/src/test/java/eu/dnetlib/oa/merge/AuthorMergerTest.java index 9eccab5f1..a11d49b1e 100644 --- a/dhp-common/src/test/java/eu/dnetlib/oa/merge/AuthorMergerTest.java +++ b/dhp-common/src/test/java/eu/dnetlib/oa/merge/AuthorMergerTest.java @@ -4,13 +4,9 @@ package eu.dnetlib.oa.merge; import static org.junit.jupiter.api.Assertions.*; import java.io.BufferedReader; -import java.io.FileReader; -import java.io.IOException; import java.io.InputStreamReader; -import java.util.Arrays; import java.util.List; import java.util.Objects; -import java.util.stream.Collectors; import org.junit.jupiter.api.Test; import org.junit.platform.commons.util.StringUtils; @@ -67,7 +63,7 @@ public class AuthorMergerTest { long start = System.currentTimeMillis(); // final List enrichedList = AuthorMerger.enrichOrcid(publicationAuthors, orcidAuthors); - final List enrichedList = AuthorMerger.enrichOrcid2(publicationAuthors, orcidAuthors); + final List enrichedList = AuthorMerger.enrichOrcid(publicationAuthors, orcidAuthors); long enrichedAuthorWithPid = enrichedList .stream() @@ -105,7 +101,7 @@ public class AuthorMergerTest { right.setSurname("Anand"); right.setFullname("Rachna, Anand"); // System.out.println(AuthorMerger.normalize(right.getFullname())); - boolean same = AuthorMerger.checkSimilarity2(left, right); + boolean same = AuthorMerger.checkORCIDSimilarity(left, right); assertTrue(same); diff --git a/dhp-workflows/dhp-graph-mapper/src/main/scala/eu/dnetlib/dhp/enrich/orcid/SparkEnrichGraphWithOrcidAuthors.scala b/dhp-workflows/dhp-graph-mapper/src/main/scala/eu/dnetlib/dhp/enrich/orcid/SparkEnrichGraphWithOrcidAuthors.scala index 9b85ba4f2..3c9e04a21 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/scala/eu/dnetlib/dhp/enrich/orcid/SparkEnrichGraphWithOrcidAuthors.scala +++ b/dhp-workflows/dhp-graph-mapper/src/main/scala/eu/dnetlib/dhp/enrich/orcid/SparkEnrichGraphWithOrcidAuthors.scala @@ -89,7 +89,7 @@ class SparkEnrichGraphWithOrcidAuthors(propertyPath: String, args: Array[String] p } case (p: Publication, r: Row) => - p.setAuthor(AuthorMerger.enrichOrcid2(p.getAuthor, AuthorEnricher.toOAFAuthor(r))) + p.setAuthor(AuthorMerger.enrichOrcid(p.getAuthor, AuthorEnricher.toOAFAuthor(r))) p } .write From aa239ec673a0891e0adc45617a2239724d9e9daa Mon Sep 17 00:00:00 2001 From: Sandro La Bruzzo Date: Wed, 29 Nov 2023 11:17:41 +0100 Subject: [PATCH 365/449] Changed implementation of check similarity to verify exact match of name instead of the first char --- .../java/eu/dnetlib/dhp/oa/merge/AuthorMerger.java | 3 +-- .../java/eu/dnetlib/oa/merge/AuthorMergerTest.java | 10 +++++++--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/AuthorMerger.java b/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/AuthorMerger.java index a1c3c2cc0..62e6764b7 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/AuthorMerger.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/AuthorMerger.java @@ -222,7 +222,7 @@ public class AuthorMerger { nl -> pr .getName() .stream() - .anyMatch(nr -> nr.substring(0, 1).equalsIgnoreCase(nl.substring(0, 1))))) + .anyMatch(nr -> nr.equalsIgnoreCase(nl)))) return true; } @@ -236,7 +236,6 @@ public class AuthorMerger { } // - /** * Method to enrich ORCID information in one list of authors based on another list * @param baseAuthor the Author List in the OAF Entity diff --git a/dhp-common/src/test/java/eu/dnetlib/oa/merge/AuthorMergerTest.java b/dhp-common/src/test/java/eu/dnetlib/oa/merge/AuthorMergerTest.java index a11d49b1e..c0a8d6927 100644 --- a/dhp-common/src/test/java/eu/dnetlib/oa/merge/AuthorMergerTest.java +++ b/dhp-common/src/test/java/eu/dnetlib/oa/merge/AuthorMergerTest.java @@ -19,15 +19,19 @@ import eu.dnetlib.dhp.schema.oaf.Author; public class AuthorMergerTest { - @Test public void testEnrcichAuthor() throws Exception { final ObjectMapper mapper = new ObjectMapper(); BufferedReader pr = new BufferedReader(new InputStreamReader( - Objects.requireNonNull(AuthorMergerTest.class.getResourceAsStream("/eu/dnetlib/dhp/oa/merge/authors_publication_sample.json")))); + Objects + .requireNonNull( + AuthorMergerTest.class + .getResourceAsStream("/eu/dnetlib/dhp/oa/merge/authors_publication_sample.json")))); BufferedReader or = new BufferedReader(new InputStreamReader( - Objects.requireNonNull(AuthorMergerTest.class.getResourceAsStream("/eu/dnetlib/dhp/oa/merge/authors_orcid_sample.json")))); + Objects + .requireNonNull( + AuthorMergerTest.class.getResourceAsStream("/eu/dnetlib/dhp/oa/merge/authors_orcid_sample.json")))); TypeReference> aclass = new TypeReference>() { }; From 279100fa5220df87e17b535e14619a49fa726c70 Mon Sep 17 00:00:00 2001 From: Sandro La Bruzzo Date: Wed, 29 Nov 2023 11:17:58 +0100 Subject: [PATCH 366/449] added test --- .../dhp/enrich/orcid/EnrichOrcidTest.scala | 72 ++++++++++++++++++- 1 file changed, 69 insertions(+), 3 deletions(-) diff --git a/dhp-workflows/dhp-graph-mapper/src/test/scala/eu/dnetlib/dhp/enrich/orcid/EnrichOrcidTest.scala b/dhp-workflows/dhp-graph-mapper/src/test/scala/eu/dnetlib/dhp/enrich/orcid/EnrichOrcidTest.scala index 0ddb7c0aa..f58b06318 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/scala/eu/dnetlib/dhp/enrich/orcid/EnrichOrcidTest.scala +++ b/dhp-workflows/dhp-graph-mapper/src/test/scala/eu/dnetlib/dhp/enrich/orcid/EnrichOrcidTest.scala @@ -1,12 +1,78 @@ package eu.dnetlib.dhp.enrich.orcid - -import org.apache.spark.SparkConf -import org.apache.spark.sql.SparkSession +import eu.dnetlib.dhp.schema.oaf.Publication +import org.apache.spark.sql.{Column, Encoder, Encoders, Row, SparkSession} import org.junit.jupiter.api.Test import org.slf4j.{Logger, LoggerFactory} +import org.apache.spark.sql.functions._ + + +case class Pid(pidScheme: String, pidValue: String) {} + +case class AuthorPid(fullName: String, pids: List[Pid]) {} + +case class PubSummary(id: String, authorWithPids: List[AuthorPid]) class EnrichOrcidTest { val log: Logger = LoggerFactory.getLogger(getClass) + + def orcid_intersection_wrong(p: PubSummary): PubSummary = { + + if (p.authorWithPids.isEmpty) + null + else { + val incorrectAuthor = p.authorWithPids.filter(a => a.pids.filter(p => p.pidScheme != null && p.pidScheme.toLowerCase.contains("orcid")).map(p => p.pidValue.toLowerCase).distinct.size > 1) + if (incorrectAuthor.nonEmpty) { + PubSummary(p.id, incorrectAuthor) + } + else { + null + } + } + } + + + + def test() = { + val spark = SparkSession.builder().master("local[*]").getOrCreate() + spark.sparkContext.setLogLevel("ERROR") + + val schema = Encoders.bean(classOf[Publication]).schema + + + val simplifyAuthor = udf((r: Seq[Row]) => { + r + .map(k => + AuthorPid(k.getAs[String]("fullname"), + k.getAs[Seq[Row]]("pid") + .map( + p => Pid(p.getAs[Row]("qualifier").getAs[String]("classid"), p.getAs[String]("value")) + ).toList) + ).filter(l => l.pids.nonEmpty) + .toList + } + ) + + val wrong_orcid_intersection = udf((a: Seq[Row]) => { + a.map(author => { + val pids_with_orcid: Seq[Row] = author.getAs[Seq[Row]]("pids").filter(p => p.getAs[String]("pidScheme")!= null && p.getAs[String]("pidScheme").toLowerCase.contains("orcid")) + if (pids_with_orcid.exists(p => p.getAs[String]("pidScheme").equals("ORCID"))) { + if (pids_with_orcid.map(p => p.getAs[String]("pidValue").toLowerCase).distinct.size > 1) { + AuthorPid(author.getAs[String]("fullName"),pids_with_orcid.map(p => Pid(p.getAs[String]("pidScheme"),p.getAs[String]("pidValue"))).toList ) + + } + else + null + } else + + null + }).filter(author => author != null) + }) + val enriched = spark.read.schema(schema).json("/Users/sandro/orcid_test/publication_enriched").select(col("id"), simplifyAuthor(col("author")).alias("authors")) + .select(col("id"), wrong_orcid_intersection(col("authors")).alias("wi")).where("wi is not null") + enriched.show(20, 1000, true) + } + + } From af1c2634b3fc61c208dfd8e57fff1b11459dba5f Mon Sep 17 00:00:00 2001 From: Sandro La Bruzzo Date: Wed, 29 Nov 2023 12:45:30 +0100 Subject: [PATCH 367/449] added instanceTypeMapping original field in the mapping of - DOIBoost - Datacite - PubMed - Scholexplorer Datasource --- .../DataciteToOAFTransformation.scala | 15 ++++++++----- .../eu/dnetlib/dhp/sx/bio/BioDBToOAF.scala | 21 +++++++++++++++++-- .../dhp/sx/bio/pubmed/PubMedToOaf.scala | 18 ++++++++++++---- .../doiboost/crossref/Crossref2Oaf.scala | 8 +++++-- 4 files changed, 49 insertions(+), 13 deletions(-) diff --git a/dhp-workflows/dhp-aggregation/src/main/scala/eu/dnetlib/dhp/datacite/DataciteToOAFTransformation.scala b/dhp-workflows/dhp-aggregation/src/main/scala/eu/dnetlib/dhp/datacite/DataciteToOAFTransformation.scala index 45f5f9729..17f1b90b0 100644 --- a/dhp-workflows/dhp-aggregation/src/main/scala/eu/dnetlib/dhp/datacite/DataciteToOAFTransformation.scala +++ b/dhp-workflows/dhp-aggregation/src/main/scala/eu/dnetlib/dhp/datacite/DataciteToOAFTransformation.scala @@ -166,7 +166,7 @@ object DataciteToOAFTransformation { resourceTypeGeneral: String, schemaOrg: String, vocabularies: VocabularyGroup - ): (Qualifier, Qualifier) = { + ): (Qualifier, Qualifier, String) = { if (resourceType != null && resourceType.nonEmpty) { val typeQualifier = vocabularies.getSynonymAsQualifier(ModelConstants.DNET_PUBLICATION_RESOURCE, resourceType) @@ -176,7 +176,7 @@ object DataciteToOAFTransformation { vocabularies.getSynonymAsQualifier( ModelConstants.DNET_RESULT_TYPOLOGIES, typeQualifier.getClassid - ) + ), resourceType ) } if (schemaOrg != null && schemaOrg.nonEmpty) { @@ -188,7 +188,7 @@ object DataciteToOAFTransformation { vocabularies.getSynonymAsQualifier( ModelConstants.DNET_RESULT_TYPOLOGIES, typeQualifier.getClassid - ) + ), schemaOrg ) } @@ -203,7 +203,7 @@ object DataciteToOAFTransformation { vocabularies.getSynonymAsQualifier( ModelConstants.DNET_RESULT_TYPOLOGIES, typeQualifier.getClassid - ) + ), resourceTypeGeneral ) } @@ -216,12 +216,17 @@ object DataciteToOAFTransformation { schemaOrg: String, vocabularies: VocabularyGroup ): Result = { - val typeQualifiers: (Qualifier, Qualifier) = + val typeQualifiers: (Qualifier, Qualifier, String) = getTypeQualifier(resourceType, resourceTypeGeneral, schemaOrg, vocabularies) if (typeQualifiers == null) return null val i = new Instance i.setInstancetype(typeQualifiers._1) + // ADD ORIGINAL TYPE + val itm = new InstanceTypeMapping + itm.setOriginalType(typeQualifiers._3) + i.setInstanceTypeMapping(List(itm).asJava) + typeQualifiers._2.getClassname match { case "dataset" => val r = new OafDataset diff --git a/dhp-workflows/dhp-aggregation/src/main/scala/eu/dnetlib/dhp/sx/bio/BioDBToOAF.scala b/dhp-workflows/dhp-aggregation/src/main/scala/eu/dnetlib/dhp/sx/bio/BioDBToOAF.scala index c079f7537..3624c5369 100644 --- a/dhp-workflows/dhp-aggregation/src/main/scala/eu/dnetlib/dhp/sx/bio/BioDBToOAF.scala +++ b/dhp-workflows/dhp-aggregation/src/main/scala/eu/dnetlib/dhp/sx/bio/BioDBToOAF.scala @@ -176,7 +176,7 @@ object BioDBToOAF { i.setUrl(List(s"${resolvedURL(input.pidType)}${input.pid}").asJava) } - if (input.pidType.equalsIgnoreCase("clinicaltrials.gov")) + if (input.pidType.equalsIgnoreCase("clinicaltrials.gov")) { i.setInstancetype( OafMapperUtils.qualifier( "0037", @@ -185,7 +185,10 @@ object BioDBToOAF { ModelConstants.DNET_PUBLICATION_RESOURCE ) ) - else + val itm = new InstanceTypeMapping + itm.setOriginalType(input.pidType) + i.setInstanceTypeMapping(List(itm).asJava) + } else { i.setInstancetype( OafMapperUtils.qualifier( "0046", @@ -194,6 +197,10 @@ object BioDBToOAF { ModelConstants.DNET_PUBLICATION_RESOURCE ) ) + val itm = new InstanceTypeMapping + itm.setOriginalType("Bioentity") + i.setInstanceTypeMapping(List(itm).asJava) + } if (input.datasource == null || input.datasource.isEmpty) return null @@ -265,6 +272,9 @@ object BioDBToOAF { ModelConstants.DNET_PUBLICATION_RESOURCE ) ) + val itm = new InstanceTypeMapping + itm.setOriginalType("Bioentity") + i.setInstanceTypeMapping(List(itm).asJava) i.setCollectedfrom(collectedFromMap("uniprot")) d.setInstance(List(i).asJava) @@ -471,6 +481,9 @@ object BioDBToOAF { ModelConstants.DNET_PUBLICATION_RESOURCE ) ) + val itm = new InstanceTypeMapping + itm.setOriginalType("Bioentity") + i.setInstanceTypeMapping(List(itm).asJava) i.setCollectedfrom(collectedFromMap("pdb")) d.setInstance(List(i).asJava) @@ -571,6 +584,10 @@ object BioDBToOAF { ModelConstants.DNET_PUBLICATION_RESOURCE ) ) + val itm = new InstanceTypeMapping + itm.setOriginalType("Bioentity") + i.setInstanceTypeMapping(List(itm).asJava) + i.setCollectedfrom(collectedFromMap("ebi")) d.setInstance(List(i).asJava) diff --git a/dhp-workflows/dhp-aggregation/src/main/scala/eu/dnetlib/dhp/sx/bio/pubmed/PubMedToOaf.scala b/dhp-workflows/dhp-aggregation/src/main/scala/eu/dnetlib/dhp/sx/bio/pubmed/PubMedToOaf.scala index 410686f97..40ac48a7a 100644 --- a/dhp-workflows/dhp-aggregation/src/main/scala/eu/dnetlib/dhp/sx/bio/pubmed/PubMedToOaf.scala +++ b/dhp-workflows/dhp-aggregation/src/main/scala/eu/dnetlib/dhp/sx/bio/pubmed/PubMedToOaf.scala @@ -188,12 +188,22 @@ object PubMedToOaf { val cojbCategory = getVocabularyTerm(ModelConstants.DNET_PUBLICATION_RESOURCE, vocabularies, ja.get.getValue) pubmedInstance.setInstancetype(cojbCategory) + // ADD ORIGINAL TYPE to the publication + val itm = new InstanceTypeMapping + itm.setOriginalType(ja.get.getValue) + pubmedInstance.setInstanceTypeMapping(List(itm).asJava) } else { val i_type = article.getPublicationTypes.asScala - .map(s => getVocabularyTerm(ModelConstants.DNET_PUBLICATION_RESOURCE, vocabularies, s.getValue)) - .find(q => q != null) - if (i_type.isDefined) - pubmedInstance.setInstancetype(i_type.get) + .map(s => (s.getValue,getVocabularyTerm(ModelConstants.DNET_PUBLICATION_RESOURCE, vocabularies, s.getValue))) + .find(q => q._2 != null) + + if (i_type.isDefined) { + pubmedInstance.setInstancetype(i_type.get._2) + // ADD ORIGINAL TYPE to the publication + val itm = new InstanceTypeMapping + itm.setOriginalType(i_type.get._1) + pubmedInstance.setInstanceTypeMapping(List(itm).asJava) + } else return null } diff --git a/dhp-workflows/dhp-doiboost/src/main/scala/eu/dnetlib/doiboost/crossref/Crossref2Oaf.scala b/dhp-workflows/dhp-doiboost/src/main/scala/eu/dnetlib/doiboost/crossref/Crossref2Oaf.scala index 565d34e62..f45c303f0 100644 --- a/dhp-workflows/dhp-doiboost/src/main/scala/eu/dnetlib/doiboost/crossref/Crossref2Oaf.scala +++ b/dhp-workflows/dhp-doiboost/src/main/scala/eu/dnetlib/doiboost/crossref/Crossref2Oaf.scala @@ -107,7 +107,7 @@ case object Crossref2Oaf { .map(f => f.id) } - def mappingResult(result: Result, json: JValue, cobjCategory: String): Result = { + def mappingResult(result: Result, json: JValue, cobjCategory: String, originalType:String): Result = { implicit lazy val formats: DefaultFormats.type = org.json4s.DefaultFormats //MAPPING Crossref DOI into PID @@ -283,6 +283,10 @@ case object Crossref2Oaf { ModelConstants.DNET_PUBLICATION_RESOURCE ) ) + //ADD ORIGINAL TYPE to the mapping + val itm = new InstanceTypeMapping + itm.setOriginalType(originalType) + instance.setInstanceTypeMapping(List(itm).asJava) result.setResourcetype( OafMapperUtils.qualifier( cobjCategory.substring(0, 4), @@ -367,7 +371,7 @@ case object Crossref2Oaf { objectType, mappingCrossrefSubType.getOrElse(objectSubType, "0038 Other literature type") ) - mappingResult(result, json, cOBJCategory) + mappingResult(result, json, cOBJCategory, originalType) if (result == null || result.getId == null) return List() From 86b5775e0859233ececfbc7425afee5a5b2c2c6f Mon Sep 17 00:00:00 2001 From: Sandro La Bruzzo Date: Wed, 29 Nov 2023 13:15:43 +0100 Subject: [PATCH 368/449] added vocabulary in instanceTypeMapping for - DOIBoost - Datacite - PubMed - Scholexplorer Datasource --- .../dnetlib/dhp/datacite/DataciteToOAFTransformation.scala | 2 ++ .../src/main/scala/eu/dnetlib/dhp/sx/bio/BioDBToOAF.scala | 5 +++++ .../scala/eu/dnetlib/dhp/sx/bio/pubmed/PubMedToOaf.scala | 2 ++ .../scala/eu/dnetlib/doiboost/crossref/Crossref2Oaf.scala | 1 + 4 files changed, 10 insertions(+) diff --git a/dhp-workflows/dhp-aggregation/src/main/scala/eu/dnetlib/dhp/datacite/DataciteToOAFTransformation.scala b/dhp-workflows/dhp-aggregation/src/main/scala/eu/dnetlib/dhp/datacite/DataciteToOAFTransformation.scala index 17f1b90b0..ee3660918 100644 --- a/dhp-workflows/dhp-aggregation/src/main/scala/eu/dnetlib/dhp/datacite/DataciteToOAFTransformation.scala +++ b/dhp-workflows/dhp-aggregation/src/main/scala/eu/dnetlib/dhp/datacite/DataciteToOAFTransformation.scala @@ -225,8 +225,10 @@ object DataciteToOAFTransformation { // ADD ORIGINAL TYPE val itm = new InstanceTypeMapping itm.setOriginalType(typeQualifiers._3) + itm.setVocabularyName(ModelConstants.OPENAIRE_COAR_RESOURCE_TYPES_3_1) i.setInstanceTypeMapping(List(itm).asJava) + typeQualifiers._2.getClassname match { case "dataset" => val r = new OafDataset diff --git a/dhp-workflows/dhp-aggregation/src/main/scala/eu/dnetlib/dhp/sx/bio/BioDBToOAF.scala b/dhp-workflows/dhp-aggregation/src/main/scala/eu/dnetlib/dhp/sx/bio/BioDBToOAF.scala index 3624c5369..89bc8d948 100644 --- a/dhp-workflows/dhp-aggregation/src/main/scala/eu/dnetlib/dhp/sx/bio/BioDBToOAF.scala +++ b/dhp-workflows/dhp-aggregation/src/main/scala/eu/dnetlib/dhp/sx/bio/BioDBToOAF.scala @@ -187,6 +187,7 @@ object BioDBToOAF { ) val itm = new InstanceTypeMapping itm.setOriginalType(input.pidType) + itm.setVocabularyName(ModelConstants.OPENAIRE_COAR_RESOURCE_TYPES_3_1) i.setInstanceTypeMapping(List(itm).asJava) } else { i.setInstancetype( @@ -199,6 +200,7 @@ object BioDBToOAF { ) val itm = new InstanceTypeMapping itm.setOriginalType("Bioentity") + itm.setVocabularyName(ModelConstants.OPENAIRE_COAR_RESOURCE_TYPES_3_1) i.setInstanceTypeMapping(List(itm).asJava) } @@ -274,6 +276,7 @@ object BioDBToOAF { ) val itm = new InstanceTypeMapping itm.setOriginalType("Bioentity") + itm.setVocabularyName(ModelConstants.OPENAIRE_COAR_RESOURCE_TYPES_3_1) i.setInstanceTypeMapping(List(itm).asJava) i.setCollectedfrom(collectedFromMap("uniprot")) @@ -483,6 +486,7 @@ object BioDBToOAF { ) val itm = new InstanceTypeMapping itm.setOriginalType("Bioentity") + itm.setVocabularyName(ModelConstants.OPENAIRE_COAR_RESOURCE_TYPES_3_1) i.setInstanceTypeMapping(List(itm).asJava) i.setCollectedfrom(collectedFromMap("pdb")) @@ -586,6 +590,7 @@ object BioDBToOAF { ) val itm = new InstanceTypeMapping itm.setOriginalType("Bioentity") + itm.setVocabularyName(ModelConstants.OPENAIRE_COAR_RESOURCE_TYPES_3_1) i.setInstanceTypeMapping(List(itm).asJava) diff --git a/dhp-workflows/dhp-aggregation/src/main/scala/eu/dnetlib/dhp/sx/bio/pubmed/PubMedToOaf.scala b/dhp-workflows/dhp-aggregation/src/main/scala/eu/dnetlib/dhp/sx/bio/pubmed/PubMedToOaf.scala index 40ac48a7a..f3f8b4f02 100644 --- a/dhp-workflows/dhp-aggregation/src/main/scala/eu/dnetlib/dhp/sx/bio/pubmed/PubMedToOaf.scala +++ b/dhp-workflows/dhp-aggregation/src/main/scala/eu/dnetlib/dhp/sx/bio/pubmed/PubMedToOaf.scala @@ -191,6 +191,7 @@ object PubMedToOaf { // ADD ORIGINAL TYPE to the publication val itm = new InstanceTypeMapping itm.setOriginalType(ja.get.getValue) + itm.setVocabularyName(ModelConstants.OPENAIRE_COAR_RESOURCE_TYPES_3_1) pubmedInstance.setInstanceTypeMapping(List(itm).asJava) } else { val i_type = article.getPublicationTypes.asScala @@ -202,6 +203,7 @@ object PubMedToOaf { // ADD ORIGINAL TYPE to the publication val itm = new InstanceTypeMapping itm.setOriginalType(i_type.get._1) + itm.setVocabularyName(ModelConstants.OPENAIRE_COAR_RESOURCE_TYPES_3_1) pubmedInstance.setInstanceTypeMapping(List(itm).asJava) } else diff --git a/dhp-workflows/dhp-doiboost/src/main/scala/eu/dnetlib/doiboost/crossref/Crossref2Oaf.scala b/dhp-workflows/dhp-doiboost/src/main/scala/eu/dnetlib/doiboost/crossref/Crossref2Oaf.scala index f45c303f0..65e395357 100644 --- a/dhp-workflows/dhp-doiboost/src/main/scala/eu/dnetlib/doiboost/crossref/Crossref2Oaf.scala +++ b/dhp-workflows/dhp-doiboost/src/main/scala/eu/dnetlib/doiboost/crossref/Crossref2Oaf.scala @@ -286,6 +286,7 @@ case object Crossref2Oaf { //ADD ORIGINAL TYPE to the mapping val itm = new InstanceTypeMapping itm.setOriginalType(originalType) + itm.setVocabularyName(ModelConstants.OPENAIRE_COAR_RESOURCE_TYPES_3_1) instance.setInstanceTypeMapping(List(itm).asJava) result.setResourcetype( OafMapperUtils.qualifier( From 7b5e04f37ec57971fbd588a9a6cca0314d06b045 Mon Sep 17 00:00:00 2001 From: Sandro La Bruzzo Date: Thu, 30 Nov 2023 14:36:50 +0100 Subject: [PATCH 369/449] removed Orcid intersection on DOIBoost --- .../preprocess/oozie_app/workflow.xml | 26 ---- .../doiboost/process/oozie_app/workflow.xml | 34 +----- .../doiboost/SparkGenerateDoiBoost.scala | 17 +-- .../dhp/enrich/orcid/oozie_app/workflow.xml | 2 +- .../dhp/enrich/orcid/AuthorEnricher.scala | 7 +- .../SparkEnrichGraphWithOrcidAuthors.scala | 106 ++++++++-------- .../dhp/enrich/orcid/EnrichOrcidTest.scala | 113 ++++++++++-------- 7 files changed, 128 insertions(+), 177 deletions(-) diff --git a/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/preprocess/oozie_app/workflow.xml b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/preprocess/oozie_app/workflow.xml index 40a17b486..ed6853229 100644 --- a/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/preprocess/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/preprocess/oozie_app/workflow.xml @@ -133,32 +133,6 @@ --targetPath${inputPathMAG}/dataset --masteryarn-cluster - - - - - - - - yarn-cluster - cluster - Convert ORCID to Dataset - eu.dnetlib.doiboost.orcid.SparkPreprocessORCID - dhp-doiboost-${projectVersion}.jar - - --executor-memory=${sparkExecutorMemory} - --executor-cores=${sparkExecutorCores} - --driver-memory=${sparkDriverMemory} - --conf spark.sql.shuffle.partitions=3840 - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - - --sourcePath${inputPathOrcid} - --workingPath${workingPathOrcid} - --masteryarn-cluster - diff --git a/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/process/oozie_app/workflow.xml b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/process/oozie_app/workflow.xml index 29a12f4df..8f28d706d 100644 --- a/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/process/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/process/oozie_app/workflow.xml @@ -59,10 +59,10 @@ - - workingPathOrcid - the ORCID working path - + + + + @@ -170,32 +170,6 @@ --targetPath${workingPath}/uwPublication --masteryarn-cluster - - - - - - - - yarn-cluster - cluster - Convert ORCID to Dataset - eu.dnetlib.doiboost.orcid.SparkConvertORCIDToOAF - dhp-doiboost-${projectVersion}.jar - - --executor-memory=${sparkExecutorMemory} - --executor-cores=${sparkExecutorCores} - --driver-memory=${sparkDriverMemory} - --conf spark.sql.shuffle.partitions=3840 - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - - --workingPath${workingPathOrcid} - --targetPath${workingPath}/orcidPublication - --masteryarn-cluster - diff --git a/dhp-workflows/dhp-doiboost/src/main/scala/eu/dnetlib/doiboost/SparkGenerateDoiBoost.scala b/dhp-workflows/dhp-doiboost/src/main/scala/eu/dnetlib/doiboost/SparkGenerateDoiBoost.scala index 2cbd53097..07d6a0287 100644 --- a/dhp-workflows/dhp-doiboost/src/main/scala/eu/dnetlib/doiboost/SparkGenerateDoiBoost.scala +++ b/dhp-workflows/dhp-doiboost/src/main/scala/eu/dnetlib/doiboost/SparkGenerateDoiBoost.scala @@ -66,7 +66,7 @@ object SparkGenerateDoiBoost { Encoders.tuple(Encoders.STRING, mapEncoderPub) implicit val mapEncoderRel: Encoder[Relation] = Encoders.kryo[Relation] - logger.info("Phase 2) Join Crossref with UnpayWall") + logger.info("Phase 1) Join Crossref with UnpayWall") val crossrefPublication: Dataset[(String, Publication)] = spark.read.load(s"$workingDirPath/crossrefPublication").as[Publication].map(p => (p.getId, p)) @@ -91,20 +91,11 @@ object SparkGenerateDoiBoost { .write .mode(SaveMode.Overwrite) .save(s"$workingDirPath/firstJoin") - logger.info("Phase 3) Join Result with ORCID") - val fj: Dataset[(String, Publication)] = - spark.read.load(s"$workingDirPath/firstJoin").as[Publication].map(p => (p.getId, p)) - val orcidPublication: Dataset[(String, Publication)] = - spark.read.load(s"$workingDirPath/orcidPublication").as[Publication].map(p => (p.getId, p)) - fj.joinWith(orcidPublication, fj("_1").equalTo(orcidPublication("_1")), "left") - .map(applyMerge) - .write - .mode(SaveMode.Overwrite) - .save(s"$workingDirPath/secondJoin") - logger.info("Phase 4) Join Result with MAG") + + logger.info("Phase 2) Join Result with MAG") val sj: Dataset[(String, Publication)] = - spark.read.load(s"$workingDirPath/secondJoin").as[Publication].map(p => (p.getId, p)) + spark.read.load(s"$workingDirPath/firstJoin").as[Publication].map(p => (p.getId, p)) val magPublication: Dataset[(String, Publication)] = spark.read.load(s"$workingDirPath/magPublication").as[Publication].map(p => (p.getId, p)) diff --git a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/enrich/orcid/oozie_app/workflow.xml b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/enrich/orcid/oozie_app/workflow.xml index 1284cceda..87c4dcb4f 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/enrich/orcid/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/enrich/orcid/oozie_app/workflow.xml @@ -40,7 +40,7 @@ --orcidPath${orcidPath} --targetPath${targetPath} - --graphPath${graphPath}/publication + --graphPath${graphPath} --masteryarn diff --git a/dhp-workflows/dhp-graph-mapper/src/main/scala/eu/dnetlib/dhp/enrich/orcid/AuthorEnricher.scala b/dhp-workflows/dhp-graph-mapper/src/main/scala/eu/dnetlib/dhp/enrich/orcid/AuthorEnricher.scala index a67de4b95..15513c8af 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/scala/eu/dnetlib/dhp/enrich/orcid/AuthorEnricher.scala +++ b/dhp-workflows/dhp-graph-mapper/src/main/scala/eu/dnetlib/dhp/enrich/orcid/AuthorEnricher.scala @@ -1,5 +1,6 @@ package eu.dnetlib.dhp.enrich.orcid +import eu.dnetlib.dhp.schema.common.ModelConstants import eu.dnetlib.dhp.schema.oaf.{Author, Publication} import eu.dnetlib.dhp.schema.sx.OafUtils import org.apache.spark.sql.Row @@ -13,9 +14,11 @@ object AuthorEnricher extends Serializable { a.setName(givenName) a.setSurname(familyName) a.setFullname(s"$givenName $familyName") - a.setPid(List(OafUtils.createSP(orcid, "ORCID", "ORCID")).asJava) + val pid = OafUtils.createSP(orcid, ModelConstants.ORCID, ModelConstants.ORCID) + pid.setDataInfo(OafUtils.generateDataInfo()) + pid.getDataInfo.setProvenanceaction(OafUtils.createQualifier("ORCID_ENRICHMENT", "ORCID_ENRICHMENT")) + a.setPid(List(pid).asJava) a - } def toOAFAuthor(r: Row): java.util.List[Author] = { diff --git a/dhp-workflows/dhp-graph-mapper/src/main/scala/eu/dnetlib/dhp/enrich/orcid/SparkEnrichGraphWithOrcidAuthors.scala b/dhp-workflows/dhp-graph-mapper/src/main/scala/eu/dnetlib/dhp/enrich/orcid/SparkEnrichGraphWithOrcidAuthors.scala index 3c9e04a21..0d994d202 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/scala/eu/dnetlib/dhp/enrich/orcid/SparkEnrichGraphWithOrcidAuthors.scala +++ b/dhp-workflows/dhp-graph-mapper/src/main/scala/eu/dnetlib/dhp/enrich/orcid/SparkEnrichGraphWithOrcidAuthors.scala @@ -1,13 +1,11 @@ package eu.dnetlib.dhp.enrich.orcid -import com.fasterxml.jackson.databind.ObjectMapper import eu.dnetlib.dhp.application.AbstractScalaApplication import eu.dnetlib.dhp.oa.merge.AuthorMerger -import eu.dnetlib.dhp.schema.oaf.{Author, DataInfo, Instance, Publication, StructuredProperty} -import org.apache.spark.sql.{Dataset, Encoder, Encoders, Row, SaveMode, SparkSession} -import org.apache.spark.sql.functions.{col, collect_set, concat, explode, expr, first, flatten, lower, size, struct} +import eu.dnetlib.dhp.schema.oaf.{OtherResearchProduct, Publication, Result, Software} +import org.apache.spark.sql.functions._ +import org.apache.spark.sql._ import org.slf4j.{Logger, LoggerFactory} -import org.apache.spark.sql.types._ class SparkEnrichGraphWithOrcidAuthors(propertyPath: String, args: Array[String], log: Logger) extends AbstractScalaApplication(propertyPath, args, log: Logger) { @@ -22,33 +20,49 @@ class SparkEnrichGraphWithOrcidAuthors(propertyPath: String, args: Array[String] log.info(s"orcidPath is '$orcidPath'") val targetPath = parser.get("targetPath") log.info(s"targetPath is '$targetPath'") - enrichResult(spark, graphPath, orcidPath, targetPath) + val orcidPublication: Dataset[Row] = generateOrcidTable(spark, orcidPath) + enrichResult( + spark, + s"$graphPath/publication", + orcidPublication, + s"$targetPath/publication", + Encoders.bean(classOf[Publication]) + ) + enrichResult( + spark, + s"$graphPath/dataset", + orcidPublication, + s"$targetPath/dataset", + Encoders.bean(classOf[eu.dnetlib.dhp.schema.oaf.Dataset]) + ) + enrichResult( + spark, + s"$graphPath/software", + orcidPublication, + s"$targetPath/software", + Encoders.bean(classOf[Software]) + ) + enrichResult( + spark, + s"$graphPath/otherresearchproduct", + orcidPublication, + s"$targetPath/otherresearchproduct", + Encoders.bean(classOf[OtherResearchProduct]) + ) } - def enrichResult(spark: SparkSession, graphPath: String, orcidPath: String, outputPath: String): Unit = { - val orcidPublication = generateOrcidTable(spark, orcidPath) + private def enrichResult[T <: Result]( + spark: SparkSession, + graphPath: String, + orcidPublication: Dataset[Row], + outputPath: String, + enc: Encoder[T] + ): Unit = { - - implicit val publicationEncoder = Encoders.bean(classOf[Publication]) - - val aschema = new StructType() - .add("id", StringType) - .add("dataInfo", Encoders.bean(classOf[DataInfo]).schema) - .add( - "author",Encoders.bean(classOf[Author]).schema - - ) - - val schema = new StructType() - .add("id", StringType) - .add("dataInfo", Encoders.bean(classOf[DataInfo]).schema) - .add( - "instance", - ArrayType(new StructType().add("pid", ArrayType(Encoders.bean(classOf[StructuredProperty]).schema))) - ) val entities = spark.read - .schema(schema) + .schema(enc.schema) .json(graphPath) + .select(col("id"), col("datainfo"), col("instance")) .where("datainfo.deletedbyinference = false") .drop("datainfo") .withColumn("instances", explode(col("instance"))) @@ -58,7 +72,8 @@ class SparkEnrichGraphWithOrcidAuthors(propertyPath: String, args: Array[String] col("pids.value").alias("pid_value"), col("id").alias("dnet_id") ) - val orcidDnet = orcidPublication + + val orcidDnet = orcidPublication .join( entities, lower(col("schema")).equalTo(lower(col("pid_schema"))) && @@ -69,36 +84,25 @@ class SparkEnrichGraphWithOrcidAuthors(propertyPath: String, args: Array[String] .agg(collect_set(orcidPublication("author")).alias("orcid_authors")) .select("dnet_id", "orcid_authors") .cache() + orcidDnet.count() + val result = spark.read.schema(enc.schema).json(graphPath).as[T](enc) - - orcidPublication - .join( - entities, - lower(col("schema")).equalTo(lower(col("pid_schema"))) && - lower(col("value")).equalTo(lower(col("pid_value"))), - "inner" - ) - .groupBy(col("dnet_id")).agg(collect_set(struct(col("pid_schema"), col("pid_value")))).write.mode("Overwrite").save("/user/sandro.labruzzo/enrich_pub") - - val publication = spark.read.schema(publicationEncoder.schema).json(graphPath).as[Publication] - - publication - .joinWith(orcidDnet, publication("id").equalTo(orcidDnet("dnet_id")), "left") + result + .joinWith(orcidDnet, result("id").equalTo(orcidDnet("dnet_id")), "left") .map { - case (p: Publication, null) => { - p - } - case (p: Publication, r: Row) => + case (r: T, null) => + r + case (p: T, r: Row) => p.setAuthor(AuthorMerger.enrichOrcid(p.getAuthor, AuthorEnricher.toOAFAuthor(r))) p - } + }(enc) .write .mode(SaveMode.Overwrite) .option("compression", "gzip") .json(outputPath) } - def generateOrcidTable(spark: SparkSession, inputPath: String): Dataset[Row] = { + private def generateOrcidTable(spark: SparkSession, inputPath: String): Dataset[Row] = { val orcidAuthors = spark.read.load(s"$inputPath/Authors").select("orcid", "familyName", "givenName", "creditName", "otherNames") val orcidWorks = spark.read @@ -107,14 +111,14 @@ class SparkEnrichGraphWithOrcidAuthors(propertyPath: String, args: Array[String] .where( "identifier.schema = 'doi' or identifier.schema ='pmid' or identifier.schema ='pmc' or identifier.schema ='arxiv' or identifier.schema ='handle'" ) - val orcidPublication =orcidAuthors + val orcidPublication = orcidAuthors .join(orcidWorks, orcidAuthors("orcid").equalTo(orcidWorks("orcid"))) .select( col("identifier.schema").alias("schema"), col("identifier.value").alias("value"), struct(orcidAuthors("orcid").alias("orcid"), col("givenName"), col("familyName")).alias("author") ) - orcidPublication + orcidPublication.cache() } } @@ -123,10 +127,8 @@ object SparkEnrichGraphWithOrcidAuthors { val log: Logger = LoggerFactory.getLogger(SparkEnrichGraphWithOrcidAuthors.getClass) def main(args: Array[String]): Unit = { - new SparkEnrichGraphWithOrcidAuthors("/eu/dnetlib/dhp/enrich/orcid/enrich_graph_orcid_parameters.json", args, log) .initialize() .run() - } } diff --git a/dhp-workflows/dhp-graph-mapper/src/test/scala/eu/dnetlib/dhp/enrich/orcid/EnrichOrcidTest.scala b/dhp-workflows/dhp-graph-mapper/src/test/scala/eu/dnetlib/dhp/enrich/orcid/EnrichOrcidTest.scala index f58b06318..84483b1a2 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/scala/eu/dnetlib/dhp/enrich/orcid/EnrichOrcidTest.scala +++ b/dhp-workflows/dhp-graph-mapper/src/test/scala/eu/dnetlib/dhp/enrich/orcid/EnrichOrcidTest.scala @@ -1,78 +1,85 @@ package eu.dnetlib.dhp.enrich.orcid -import eu.dnetlib.dhp.schema.oaf.Publication + +import eu.dnetlib.dhp.schema.oaf.{Author, Publication} import org.apache.spark.sql.{Column, Encoder, Encoders, Row, SparkSession} import org.junit.jupiter.api.Test import org.slf4j.{Logger, LoggerFactory} import org.apache.spark.sql.functions._ -case class Pid(pidScheme: String, pidValue: String) {} - -case class AuthorPid(fullName: String, pids: List[Pid]) {} - -case class PubSummary(id: String, authorWithPids: List[AuthorPid]) - class EnrichOrcidTest { val log: Logger = LoggerFactory.getLogger(getClass) - def orcid_intersection_wrong(p: PubSummary): PubSummary = { - - if (p.authorWithPids.isEmpty) - null - else { - val incorrectAuthor = p.authorWithPids.filter(a => a.pids.filter(p => p.pidScheme != null && p.pidScheme.toLowerCase.contains("orcid")).map(p => p.pidValue.toLowerCase).distinct.size > 1) - if (incorrectAuthor.nonEmpty) { - PubSummary(p.id, incorrectAuthor) - } - else { - null - } - } - } - - def test() = { val spark = SparkSession.builder().master("local[*]").getOrCreate() - spark.sparkContext.setLogLevel("ERROR") +// spark.sparkContext.setLogLevel("ERROR") + +// new SparkEnrichGraphWithOrcidAuthors(null, null, null) +// .enrichResult( +// spark, +// "/Users/sandro/orcid_test/publication", +// "", +// "/tmp/graph/", +// Encoders.bean(classOf[Publication]) +// ) val schema = Encoders.bean(classOf[Publication]).schema +// +// val simplifyAuthor = udf((r: Seq[Row]) => { +// r +// .map(k => +// AuthorPid( +// k.getAs[String]("fullname"), +// k.getAs[Seq[Row]]("pid") +// .map(p => Pid(p.getAs[Row]("qualifier").getAs[String]("classid"), p.getAs[String]("value"))) +// .toList +// ) +// ) +// .filter(l => l.pids.nonEmpty) +// .toList +// }) +// +// val wrong_orcid_intersection = udf((a: Seq[Row]) => { +// a.map(author => { +// val pids_with_orcid: Seq[Row] = author +// .getAs[Seq[Row]]("pids") +// .filter(p => +// p.getAs[String]("pidScheme") != null && p.getAs[String]("pidScheme").toLowerCase.contains("orcid") +// ) +// if (pids_with_orcid.exists(p => p.getAs[String]("pidScheme").equals("ORCID"))) { +// if (pids_with_orcid.map(p => p.getAs[String]("pidValue").toLowerCase).distinct.size > 1) { +// AuthorPid( +// author.getAs[String]("fullName"), +// pids_with_orcid.map(p => Pid(p.getAs[String]("pidScheme"), p.getAs[String]("pidValue"))).toList +// ) +// +// } else +// null +// } else +// null +// }).filter(author => author != null) +// }) + + + Encoders + import spark.implicits._ + +// val enriched = spark.read +// .schema(schema) +// .json("/Users/sandro/orcid_test/publication_enriched") +// .select(col("id"), explode(col("author")).as("authors")) +// .withColumn("ap", col("authors.pid.qualifier.classid")) +// .withColumn("dp", col("authors.pid.datainfo.provenanceAction.classid")) +// +// .show() - val simplifyAuthor = udf((r: Seq[Row]) => { - r - .map(k => - AuthorPid(k.getAs[String]("fullname"), - k.getAs[Seq[Row]]("pid") - .map( - p => Pid(p.getAs[Row]("qualifier").getAs[String]("classid"), p.getAs[String]("value")) - ).toList) - ).filter(l => l.pids.nonEmpty) - .toList - } - ) - val wrong_orcid_intersection = udf((a: Seq[Row]) => { - a.map(author => { - val pids_with_orcid: Seq[Row] = author.getAs[Seq[Row]]("pids").filter(p => p.getAs[String]("pidScheme")!= null && p.getAs[String]("pidScheme").toLowerCase.contains("orcid")) - if (pids_with_orcid.exists(p => p.getAs[String]("pidScheme").equals("ORCID"))) { - if (pids_with_orcid.map(p => p.getAs[String]("pidValue").toLowerCase).distinct.size > 1) { - AuthorPid(author.getAs[String]("fullName"),pids_with_orcid.map(p => Pid(p.getAs[String]("pidScheme"),p.getAs[String]("pidValue"))).toList ) - } - else - null - } else - null - }).filter(author => author != null) - }) - val enriched = spark.read.schema(schema).json("/Users/sandro/orcid_test/publication_enriched").select(col("id"), simplifyAuthor(col("author")).alias("authors")) - .select(col("id"), wrong_orcid_intersection(col("authors")).alias("wi")).where("wi is not null") - enriched.show(20, 1000, true) } - } From f718caaac974ed8e931053c757aaef8d9945c38c Mon Sep 17 00:00:00 2001 From: Sandro La Bruzzo Date: Thu, 30 Nov 2023 14:51:00 +0100 Subject: [PATCH 370/449] Added copy of the untouched entities of the graph --- .../dhp/enrich/orcid/oozie_app/workflow.xml | 46 +++++++++++++++++-- 1 file changed, 41 insertions(+), 5 deletions(-) diff --git a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/enrich/orcid/oozie_app/workflow.xml b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/enrich/orcid/oozie_app/workflow.xml index 87c4dcb4f..a4330b966 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/enrich/orcid/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/enrich/orcid/oozie_app/workflow.xml @@ -1,4 +1,4 @@ - + orcidPath @@ -38,15 +38,51 @@ --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --orcidPath${orcidPath} - --targetPath${targetPath} - --graphPath${graphPath} - --masteryarn + --orcidPath + ${orcidPath} + --targetPath + ${targetPath} + --graphPath + ${graphPath} + --master + yarn + + + ${nameNode}/${graphPath}/datasource + ${nameNode}/${targetPath}/datasource + + + + + + + ${nameNode}/${graphPath}/organization + ${nameNode}/${targetPath}/organization + + + + + + + ${nameNode}/${graphPath}/project + ${nameNode}/${targetPath}/project + + + + + + + ${nameNode}/${graphPath}/relation + ${nameNode}/${targetPath}/relation + + + + \ No newline at end of file From cdfb7588dd4b23fc83e764ae490dd051c8e1576f Mon Sep 17 00:00:00 2001 From: Sandro La Bruzzo Date: Thu, 30 Nov 2023 15:31:42 +0100 Subject: [PATCH 371/449] code formatting --- .../eu/dnetlib/dhp/oa/merge/AuthorMerger.java | 551 +++++++++--------- .../PrepareAffiliationRelationsTest.java | 4 +- .../doiboost/SparkGenerateDoiBoost.scala | 1 - .../SparkEnrichGraphWithOrcidAuthors.scala | 2 +- .../dhp/enrich/orcid/EnrichOrcidTest.scala | 10 +- 5 files changed, 268 insertions(+), 300 deletions(-) diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/AuthorMerger.java b/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/AuthorMerger.java index 62e6764b7..d7224af78 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/AuthorMerger.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/AuthorMerger.java @@ -4,352 +4,329 @@ package eu.dnetlib.dhp.oa.merge; import java.text.Normalizer; import java.util.*; import java.util.stream.Collectors; - import org.apache.commons.lang3.StringUtils; -import org.jetbrains.annotations.NotNull; - import com.wcohen.ss.JaroWinkler; - import eu.dnetlib.dhp.schema.oaf.Author; import eu.dnetlib.dhp.schema.oaf.StructuredProperty; import eu.dnetlib.pace.model.Person; import scala.Tuple2; -class SimilarityCellInfo implements Comparable { - - public int authorPosition = 0; - public int orcidPosition = 0; - - public double maxColumnSimilarity = 0.0; - - public SimilarityCellInfo() { - } - - public void setValues(final int authPos, final int orcidPos, final double similarity) { - this.authorPosition = authPos; - this.orcidPosition = orcidPos; - this.maxColumnSimilarity = similarity; - } - - @Override - public int compareTo(@NotNull SimilarityCellInfo o) { - return Double.compare(maxColumnSimilarity, o.maxColumnSimilarity); - } -} public class AuthorMerger { - private static final Double THRESHOLD = 0.95; + private static final Double THRESHOLD = 0.95; - private AuthorMerger() { - } + private AuthorMerger() { + } - public static List merge(List> authors) { + public static List merge(List> authors) { - authors.sort((o1, o2) -> -Integer.compare(countAuthorsPids(o1), countAuthorsPids(o2))); + authors.sort((o1, o2) -> -Integer.compare(countAuthorsPids(o1), countAuthorsPids(o2))); - List author = new ArrayList<>(); + List author = new ArrayList<>(); - for (List a : authors) { - author = mergeAuthor(author, a); - } + for (List a : authors) { + author = mergeAuthor(author, a); + } - return author; + return author; - } + } - public static List mergeAuthor(final List a, final List b, Double threshold) { - int pa = countAuthorsPids(a); - int pb = countAuthorsPids(b); - List base; - List enrich; - int sa = authorsSize(a); - int sb = authorsSize(b); + public static List mergeAuthor(final List a, final List b, Double threshold) { + int pa = countAuthorsPids(a); + int pb = countAuthorsPids(b); + List base; + List enrich; + int sa = authorsSize(a); + int sb = authorsSize(b); - if (sa == sb) { - base = pa > pb ? a : b; - enrich = pa > pb ? b : a; - } else { - base = sa > sb ? a : b; - enrich = sa > sb ? b : a; - } - enrichPidFromList(base, enrich, threshold); - return base; - } + if (sa == sb) { + base = pa > pb ? a : b; + enrich = pa > pb ? b : a; + } else { + base = sa > sb ? a : b; + enrich = sa > sb ? b : a; + } + enrichPidFromList(base, enrich, threshold); + return base; + } - public static List mergeAuthor(final List a, final List b) { - return mergeAuthor(a, b, THRESHOLD); - } + public static List mergeAuthor(final List a, final List b) { + return mergeAuthor(a, b, THRESHOLD); + } - private static void enrichPidFromList(List base, List enrich, Double threshold) { - if (base == null || enrich == null) - return; + private static void enrichPidFromList(List base, List enrich, Double threshold) { + if (base == null || enrich == null) + return; - // (if an Author has more than 1 pid, it appears 2 times in the list) - final Map basePidAuthorMap = base - .stream() - .filter(a -> a.getPid() != null && !a.getPid().isEmpty()) - .flatMap( - a -> a - .getPid() - .stream() - .filter(Objects::nonNull) - .map(p -> new Tuple2<>(pidToComparableString(p), a))) - .collect(Collectors.toMap(Tuple2::_1, Tuple2::_2, (x1, x2) -> x1)); + // (if an Author has more than 1 pid, it appears 2 times in the list) + final Map basePidAuthorMap = base + .stream() + .filter(a -> a.getPid() != null && !a.getPid().isEmpty()) + .flatMap( + a -> a + .getPid() + .stream() + .filter(Objects::nonNull) + .map(p -> new Tuple2<>(pidToComparableString(p), a))) + .collect(Collectors.toMap(Tuple2::_1, Tuple2::_2, (x1, x2) -> x1)); - // (list of pid that are missing in the other list) - final List> pidToEnrich = enrich - .stream() - .filter(a -> a.getPid() != null && !a.getPid().isEmpty()) - .flatMap( - a -> a - .getPid() - .stream() - .filter(Objects::nonNull) - .filter(p -> !basePidAuthorMap.containsKey(pidToComparableString(p))) - .map(p -> new Tuple2<>(p, a))) - .collect(Collectors.toList()); + // (list of pid that are missing in the other list) + final List> pidToEnrich = enrich + .stream() + .filter(a -> a.getPid() != null && !a.getPid().isEmpty()) + .flatMap( + a -> a + .getPid() + .stream() + .filter(Objects::nonNull) + .filter(p -> !basePidAuthorMap.containsKey(pidToComparableString(p))) + .map(p -> new Tuple2<>(p, a))) + .collect(Collectors.toList()); - pidToEnrich - .forEach( - a -> { - Optional> simAuthor = base - .stream() - .map(ba -> new Tuple2<>(sim(ba, a._2()), ba)) - .max(Comparator.comparing(Tuple2::_1)); + pidToEnrich + .forEach( + a -> { + Optional> simAuthor = base + .stream() + .map(ba -> new Tuple2<>(sim(ba, a._2()), ba)) + .max(Comparator.comparing(Tuple2::_1)); - if (simAuthor.isPresent()) { - double th = threshold; - // increase the threshold if the surname is too short - if (simAuthor.get()._2().getSurname() != null - && simAuthor.get()._2().getSurname().length() <= 3 && threshold > 0.0) - th = 0.99; + if (simAuthor.isPresent()) { + double th = threshold; + // increase the threshold if the surname is too short + if (simAuthor.get()._2().getSurname() != null + && simAuthor.get()._2().getSurname().length() <= 3 && threshold > 0.0) + th = 0.99; - if (simAuthor.get()._1() > th) { - Author r = simAuthor.get()._2(); - if (r.getPid() == null) { - r.setPid(new ArrayList<>()); - } + if (simAuthor.get()._1() > th) { + Author r = simAuthor.get()._2(); + if (r.getPid() == null) { + r.setPid(new ArrayList<>()); + } - // TERRIBLE HACK but for some reason when we create and Array with Arrays.asList, - // it creates of fixed size, and the add method raise UnsupportedOperationException at - // java.util.AbstractList.add - final List tmp = new ArrayList<>(r.getPid()); - tmp.add(a._1()); - r.setPid(tmp); - } - } - }); - } + // TERRIBLE HACK but for some reason when we create and Array with Arrays.asList, + // it creates of fixed size, and the add method raise UnsupportedOperationException at + // java.util.AbstractList.add + final List tmp = new ArrayList<>(r.getPid()); + tmp.add(a._1()); + r.setPid(tmp); + } + } + }); + } - public static String normalizeFullName(final String fullname) { - return nfd(fullname) - .toLowerCase() - // do not compact the regexes in a single expression, would cause StackOverflowError - // in case - // of large input strings - .replaceAll("(\\W)+", " ") - .replaceAll("(\\p{InCombiningDiacriticalMarks})+", " ") - .replaceAll("(\\p{Punct})+", " ") - .replaceAll("(\\d)+", " ") - .replaceAll("(\\n)+", " ") + public static String normalizeFullName(final String fullname) { + return nfd(fullname) + .toLowerCase() + // do not compact the regexes in a single expression, would cause StackOverflowError + // in case + // of large input strings + .replaceAll("(\\W)+", " ") + .replaceAll("(\\p{InCombiningDiacriticalMarks})+", " ") + .replaceAll("(\\p{Punct})+", " ") + .replaceAll("(\\d)+", " ") + .replaceAll("(\\n)+", " ") - .trim(); - } + .trim(); + } - static int hammingDist(String str1, String str2) { - if (str1.length() != str2.length()) - return Math.max(str1.length(), str2.length()); - int i = 0, count = 0; - while (i < str1.length()) { - if (str1.charAt(i) != str2.charAt(i)) - count++; - i++; - } - return count; - } + static int hammingDist(String str1, String str2) { + if (str1.length() != str2.length()) + return Math.max(str1.length(), str2.length()); + int i = 0, count = 0; + while (i < str1.length()) { + if (str1.charAt(i) != str2.charAt(i)) + count++; + i++; + } + return count; + } - private static String authorFieldToBeCompared(Author author) { - if (StringUtils.isNotBlank(author.getSurname())) { - return author.getSurname(); + private static String authorFieldToBeCompared(Author author) { + if (StringUtils.isNotBlank(author.getSurname())) { + return author.getSurname(); - } - if (StringUtils.isNotBlank(author.getFullname())) { - return author.getFullname(); - } - return null; - } + } + if (StringUtils.isNotBlank(author.getFullname())) { + return author.getFullname(); + } + return null; + } - /** - * This method tries to figure out when two author are the same in the contest - * of ORCID enrichment - * @param left Author in the OAF entity - * @param right Author ORCID - * @return based on a heuristic on the names of the authors if they are the same. - */ - public static boolean checkORCIDSimilarity(final Author left, final Author right) { - final Person pl = parse(left); - final Person pr = parse(right); + /** + * This method tries to figure out when two author are the same in the contest + * of ORCID enrichment + * + * @param left Author in the OAF entity + * @param right Author ORCID + * @return based on a heuristic on the names of the authors if they are the same. + */ + public static boolean checkORCIDSimilarity(final Author left, final Author right) { + final Person pl = parse(left); + final Person pr = parse(right); - // If one of them didn't have a surname we verify if they have the fullName not empty - // and verify if the normalized version is equal - if (!(pl.getSurname() != null && pl.getSurname().stream().anyMatch(StringUtils::isNotBlank) && - pr.getSurname() != null && pr.getSurname().stream().anyMatch(StringUtils::isNotBlank))) { + // If one of them didn't have a surname we verify if they have the fullName not empty + // and verify if the normalized version is equal + if (!(pl.getSurname() != null && pl.getSurname().stream().anyMatch(StringUtils::isNotBlank) && + pr.getSurname() != null && pr.getSurname().stream().anyMatch(StringUtils::isNotBlank))) { - if (pl.getFullname() != null && !pl.getFullname().isEmpty() && pr.getFullname() != null - && !pr.getFullname().isEmpty()) { - return pl - .getFullname() - .stream() - .anyMatch( - fl -> pr.getFullname().stream().anyMatch(fr -> normalize(fl).equalsIgnoreCase(normalize(fr)))); - } else { - return false; - } - } - // The Authors have one surname in common - if (pl.getSurname().stream().anyMatch(sl -> pr.getSurname().stream().anyMatch(sr -> sr.equalsIgnoreCase(sl)))) { + if (pl.getFullname() != null && !pl.getFullname().isEmpty() && pr.getFullname() != null + && !pr.getFullname().isEmpty()) { + return pl + .getFullname() + .stream() + .anyMatch( + fl -> pr.getFullname().stream().anyMatch(fr -> normalize(fl).equalsIgnoreCase(normalize(fr)))); + } else { + return false; + } + } + // The Authors have one surname in common + if (pl.getSurname().stream().anyMatch(sl -> pr.getSurname().stream().anyMatch(sr -> sr.equalsIgnoreCase(sl)))) { - // If one of them has only a surname and is the same we can say that they are the same author - if ((pl.getName() == null || pl.getName().stream().allMatch(StringUtils::isBlank)) || - (pr.getName() == null || pr.getName().stream().allMatch(StringUtils::isBlank))) - return true; - // The authors have the same initials of Name in common - if (pl - .getName() - .stream() - .anyMatch( - nl -> pr - .getName() - .stream() - .anyMatch(nr -> nr.equalsIgnoreCase(nl)))) - return true; - } + // If one of them has only a surname and is the same we can say that they are the same author + if ((pl.getName() == null || pl.getName().stream().allMatch(StringUtils::isBlank)) || + (pr.getName() == null || pr.getName().stream().allMatch(StringUtils::isBlank))) + return true; + // The authors have the same initials of Name in common + if (pl + .getName() + .stream() + .anyMatch( + nl -> pr + .getName() + .stream() + .anyMatch(nr -> nr.equalsIgnoreCase(nl)))) + return true; + } - // Sometimes we noticed that publication have author wrote in inverse order Surname, Name - // We verify if we have an exact match between name and surname - if (pl.getSurname().stream().anyMatch(sl -> pr.getName().stream().anyMatch(nr -> nr.equalsIgnoreCase(sl))) && - pl.getName().stream().anyMatch(nl -> pr.getSurname().stream().anyMatch(sr -> sr.equalsIgnoreCase(nl)))) - return true; - else - return false; - } - // + // Sometimes we noticed that publication have author wrote in inverse order Surname, Name + // We verify if we have an exact match between name and surname + if (pl.getSurname().stream().anyMatch(sl -> pr.getName().stream().anyMatch(nr -> nr.equalsIgnoreCase(sl))) && + pl.getName().stream().anyMatch(nl -> pr.getSurname().stream().anyMatch(sr -> sr.equalsIgnoreCase(nl)))) + return true; + else + return false; + } + // - /** - * Method to enrich ORCID information in one list of authors based on another list - * @param baseAuthor the Author List in the OAF Entity - * @param orcidAuthor The list of ORCID Author intersected - * @return The Author List of the OAF Entity enriched with the orcid Author - */ - public static List enrichOrcid(List baseAuthor, List orcidAuthor) { + /** + * Method to enrich ORCID information in one list of authors based on another list + * + * @param baseAuthor the Author List in the OAF Entity + * @param orcidAuthor The list of ORCID Author intersected + * @return The Author List of the OAF Entity enriched with the orcid Author + */ + public static List enrichOrcid(List baseAuthor, List orcidAuthor) { - if (baseAuthor == null || baseAuthor.isEmpty()) - return orcidAuthor; + if (baseAuthor == null || baseAuthor.isEmpty()) + return orcidAuthor; - if (orcidAuthor == null || orcidAuthor.isEmpty()) - return baseAuthor; + if (orcidAuthor == null || orcidAuthor.isEmpty()) + return baseAuthor; - if (baseAuthor.size() == 1 && orcidAuthor.size() > 10) - return baseAuthor; + if (baseAuthor.size() == 1 && orcidAuthor.size() > 10) + return baseAuthor; - final List oAuthor = new ArrayList<>(); - oAuthor.addAll(orcidAuthor); + final List oAuthor = new ArrayList<>(); + oAuthor.addAll(orcidAuthor); - baseAuthor.forEach(ba -> { - Optional aMatch = oAuthor.stream().filter(oa -> checkORCIDSimilarity(ba, oa)).findFirst(); - if (aMatch.isPresent()) { - final Author sameAuthor = aMatch.get(); - addPid(ba, sameAuthor.getPid()); - oAuthor.remove(sameAuthor); - } - }); - return baseAuthor; - } + baseAuthor.forEach(ba -> { + Optional aMatch = oAuthor.stream().filter(oa -> checkORCIDSimilarity(ba, oa)).findFirst(); + if (aMatch.isPresent()) { + final Author sameAuthor = aMatch.get(); + addPid(ba, sameAuthor.getPid()); + oAuthor.remove(sameAuthor); + } + }); + return baseAuthor; + } - private static void addPid(final Author a, final List pids) { + private static void addPid(final Author a, final List pids) { - if (a.getPid() == null) { - a.setPid(new ArrayList<>()); - } + if (a.getPid() == null) { + a.setPid(new ArrayList<>()); + } - a.getPid().addAll(pids); + a.getPid().addAll(pids); - } + } - public static String pidToComparableString(StructuredProperty pid) { - final String classid = pid.getQualifier().getClassid() != null ? pid.getQualifier().getClassid().toLowerCase() - : ""; - return (pid.getQualifier() != null ? classid : "") - + (pid.getValue() != null ? pid.getValue().toLowerCase() : ""); - } + public static String pidToComparableString(StructuredProperty pid) { + final String classid = pid.getQualifier().getClassid() != null ? pid.getQualifier().getClassid().toLowerCase() + : ""; + return (pid.getQualifier() != null ? classid : "") + + (pid.getValue() != null ? pid.getValue().toLowerCase() : ""); + } - public static int countAuthorsPids(List authors) { - if (authors == null) - return 0; + public static int countAuthorsPids(List authors) { + if (authors == null) + return 0; - return (int) authors.stream().filter(AuthorMerger::hasPid).count(); - } + return (int) authors.stream().filter(AuthorMerger::hasPid).count(); + } - private static int authorsSize(List authors) { - if (authors == null) - return 0; - return authors.size(); - } + private static int authorsSize(List authors) { + if (authors == null) + return 0; + return authors.size(); + } - private static Double sim(Author a, Author b) { + private static Double sim(Author a, Author b) { - final Person pa = parse(a); - final Person pb = parse(b); + final Person pa = parse(a); + final Person pb = parse(b); - // if both are accurate (e.g. they have name and surname) - if (pa.isAccurate() & pb.isAccurate()) { - return new JaroWinkler().score(normalize(pa.getSurnameString()), normalize(pb.getSurnameString())) * 0.5 - + new JaroWinkler().score(normalize(pa.getNameString()), normalize(pb.getNameString())) * 0.5; - } else { - return new JaroWinkler() - .score(normalize(pa.getNormalisedFullname()), normalize(pb.getNormalisedFullname())); - } - } + // if both are accurate (e.g. they have name and surname) + if (pa.isAccurate() & pb.isAccurate()) { + return new JaroWinkler().score(normalize(pa.getSurnameString()), normalize(pb.getSurnameString())) * 0.5 + + new JaroWinkler().score(normalize(pa.getNameString()), normalize(pb.getNameString())) * 0.5; + } else { + return new JaroWinkler() + .score(normalize(pa.getNormalisedFullname()), normalize(pb.getNormalisedFullname())); + } + } - private static boolean hasPid(Author a) { - if (a == null || a.getPid() == null || a.getPid().isEmpty()) - return false; - return a.getPid().stream().anyMatch(p -> p != null && StringUtils.isNotBlank(p.getValue())); - } + private static boolean hasPid(Author a) { + if (a == null || a.getPid() == null || a.getPid().isEmpty()) + return false; + return a.getPid().stream().anyMatch(p -> p != null && StringUtils.isNotBlank(p.getValue())); + } - private static Person parse(Author author) { - if (StringUtils.isNotBlank(author.getSurname())) { - return new Person(author.getSurname() + ", " + author.getName(), false); - } else { - if (StringUtils.isNotBlank(author.getFullname())) - return new Person(author.getFullname(), false); - else - return new Person("", false); - } - } + private static Person parse(Author author) { + if (StringUtils.isNotBlank(author.getSurname())) { + return new Person(author.getSurname() + ", " + author.getName(), false); + } else { + if (StringUtils.isNotBlank(author.getFullname())) + return new Person(author.getFullname(), false); + else + return new Person("", false); + } + } - public static String normalize(final String s) { - String[] normalized = nfd(s) - .toLowerCase() - // do not compact the regexes in a single expression, would cause StackOverflowError - // in case - // of large input strings - .replaceAll("(\\W)+", " ") - .replaceAll("(\\p{InCombiningDiacriticalMarks})+", " ") - .replaceAll("(\\p{Punct})+", " ") - .replaceAll("(\\d)+", " ") - .replaceAll("(\\n)+", " ") - .trim() - .split(" "); + public static String normalize(final String s) { + String[] normalized = nfd(s) + .toLowerCase() + // do not compact the regexes in a single expression, would cause StackOverflowError + // in case + // of large input strings + .replaceAll("(\\W)+", " ") + .replaceAll("(\\p{InCombiningDiacriticalMarks})+", " ") + .replaceAll("(\\p{Punct})+", " ") + .replaceAll("(\\d)+", " ") + .replaceAll("(\\n)+", " ") + .trim() + .split(" "); - Arrays.sort(normalized); + Arrays.sort(normalized); - return String.join(" ", normalized); - } + return String.join(" ", normalized); + } - private static String nfd(final String s) { - return Normalizer.normalize(s, Normalizer.Form.NFD); - } + private static String nfd(final String s) { + return Normalizer.normalize(s, Normalizer.Form.NFD); + } } diff --git a/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelationsTest.java b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelationsTest.java index e2639996c..b87738879 100644 --- a/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelationsTest.java +++ b/dhp-workflows/dhp-aggregation/src/test/java/eu/dnetlib/dhp/actionmanager/bipaffiliations/PrepareAffiliationRelationsTest.java @@ -79,8 +79,8 @@ public class PrepareAffiliationRelationsTest { .getPath(); String pubmedAffiliationRelationsPath = getClass() - .getResource("/eu/dnetlib/dhp/actionmanager/bipaffiliations/doi_to_ror.json") - .getPath(); + .getResource("/eu/dnetlib/dhp/actionmanager/bipaffiliations/doi_to_ror.json") + .getPath(); String outputPath = workingDir.toString() + "/actionSet"; diff --git a/dhp-workflows/dhp-doiboost/src/main/scala/eu/dnetlib/doiboost/SparkGenerateDoiBoost.scala b/dhp-workflows/dhp-doiboost/src/main/scala/eu/dnetlib/doiboost/SparkGenerateDoiBoost.scala index 07d6a0287..9ffaeeeef 100644 --- a/dhp-workflows/dhp-doiboost/src/main/scala/eu/dnetlib/doiboost/SparkGenerateDoiBoost.scala +++ b/dhp-workflows/dhp-doiboost/src/main/scala/eu/dnetlib/doiboost/SparkGenerateDoiBoost.scala @@ -92,7 +92,6 @@ object SparkGenerateDoiBoost { .mode(SaveMode.Overwrite) .save(s"$workingDirPath/firstJoin") - logger.info("Phase 2) Join Result with MAG") val sj: Dataset[(String, Publication)] = spark.read.load(s"$workingDirPath/firstJoin").as[Publication].map(p => (p.getId, p)) diff --git a/dhp-workflows/dhp-graph-mapper/src/main/scala/eu/dnetlib/dhp/enrich/orcid/SparkEnrichGraphWithOrcidAuthors.scala b/dhp-workflows/dhp-graph-mapper/src/main/scala/eu/dnetlib/dhp/enrich/orcid/SparkEnrichGraphWithOrcidAuthors.scala index 0d994d202..645df8181 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/scala/eu/dnetlib/dhp/enrich/orcid/SparkEnrichGraphWithOrcidAuthors.scala +++ b/dhp-workflows/dhp-graph-mapper/src/main/scala/eu/dnetlib/dhp/enrich/orcid/SparkEnrichGraphWithOrcidAuthors.scala @@ -73,7 +73,7 @@ class SparkEnrichGraphWithOrcidAuthors(propertyPath: String, args: Array[String] col("id").alias("dnet_id") ) - val orcidDnet = orcidPublication + val orcidDnet = orcidPublication .join( entities, lower(col("schema")).equalTo(lower(col("pid_schema"))) && diff --git a/dhp-workflows/dhp-graph-mapper/src/test/scala/eu/dnetlib/dhp/enrich/orcid/EnrichOrcidTest.scala b/dhp-workflows/dhp-graph-mapper/src/test/scala/eu/dnetlib/dhp/enrich/orcid/EnrichOrcidTest.scala index 84483b1a2..cb05332b2 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/scala/eu/dnetlib/dhp/enrich/orcid/EnrichOrcidTest.scala +++ b/dhp-workflows/dhp-graph-mapper/src/test/scala/eu/dnetlib/dhp/enrich/orcid/EnrichOrcidTest.scala @@ -6,13 +6,10 @@ import org.junit.jupiter.api.Test import org.slf4j.{Logger, LoggerFactory} import org.apache.spark.sql.functions._ - class EnrichOrcidTest { val log: Logger = LoggerFactory.getLogger(getClass) - - def test() = { val spark = SparkSession.builder().master("local[*]").getOrCreate() // spark.sparkContext.setLogLevel("ERROR") @@ -63,8 +60,7 @@ class EnrichOrcidTest { // }).filter(author => author != null) // }) - - Encoders + Encoders import spark.implicits._ // val enriched = spark.read @@ -76,10 +72,6 @@ class EnrichOrcidTest { // // .show() - - - - } } From 48430a32a63cc80b32bce14104b9f11037960adf Mon Sep 17 00:00:00 2001 From: dimitrispie Date: Fri, 1 Dec 2023 11:35:01 +0200 Subject: [PATCH 372/449] Update StatsAtomicActionsJob.java Added indi_funded_result_with_fundref indicator --- .../StatsAtomicActionsJob.java | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/stats_actionsets/StatsAtomicActionsJob.java b/dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/stats_actionsets/StatsAtomicActionsJob.java index a64a63c24..0c3c2f3c0 100644 --- a/dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/stats_actionsets/StatsAtomicActionsJob.java +++ b/dhp-workflows/dhp-stats-actionsets/src/main/java/eu/dnetlib/dhp/actionmanager/stats_actionsets/StatsAtomicActionsJob.java @@ -96,14 +96,16 @@ public class StatsAtomicActionsJob implements Serializable { .sql( String .format( - "select b.%s as id, is_gold, is_bronze_oa, is_hybrid,green_oa, in_diamond_journal,f.fundref as publicly_funded " - + "from %s.indi_pub_bronze_oa b " + - "left outer join %s.indi_pub_gold_oa g on g.id=b.id " + - "left outer join %s.indi_pub_hybrid h on b.id=h.id " + - "left outer join %s.indi_pub_green_oa gr on b.id=gr.id " + + "select r.%s as id, is_gold, is_bronze_oa, is_hybrid,green_oa, in_diamond_journal,f.publicly_funded as publicly_funded " + + + "from %s.publication r " + + "left outer join %s.indi_pub_bronze_oa b on r.id=b.id " + + "left outer join %s.indi_pub_gold_oa g on r.id=g.id " + + "left outer join %s.indi_pub_hybrid h on r.id=h.id " + + "left outer join %s.indi_pub_green_oa gr on r.id=gr.id " + "left outer join %s.indi_pub_diamond d on b.id=d.id " + - "left outer join %s.indi_funded_result_with_fundref f on b.id=f.id ", - resultAttributeName, dbname, dbname, dbname, dbname, dbname, dbname)) + "left outer join %s.indi_pub_publicly_funded f on r.id=f.id ", + resultAttributeName, dbname, dbname, dbname, dbname, dbname, dbname, dbname)) .as(Encoders.bean(StatsResultEnhancementModel.class)) .write() .mode(SaveMode.Overwrite) @@ -136,12 +138,12 @@ public class StatsAtomicActionsJob implements Serializable { r.setIsInDiamondJournal(usm.isIn_diamond_journal()); r.setIsGreen(usm.isGreen_oa()); r.setPubliclyFunded(usm.isPublicly_funded()); - if (usm.isIs_bronze_oa()) - r.setOpenAccessColor(OpenAccessColor.bronze); - else if (usm.isIs_gold()) + if (usm.isIs_gold()) r.setOpenAccessColor(OpenAccessColor.gold); else if (usm.isIs_hybrid()) r.setOpenAccessColor(OpenAccessColor.hybrid); + else if (usm.isIs_bronze_oa()) + r.setOpenAccessColor(OpenAccessColor.bronze); return r; }, Encoders.bean(Result.class)); } From bf0fd27c362bc07a0fe5579ac7787dfe0134cb30 Mon Sep 17 00:00:00 2001 From: Sandro La Bruzzo Date: Fri, 1 Dec 2023 12:16:42 +0100 Subject: [PATCH 373/449] Removed unused function Applied PR Comment of Giambattista in the PR --- .../java/eu/dnetlib/dhp/oa/merge/AuthorMerger.java | 11 ----------- .../orcid/SparkEnrichGraphWithOrcidAuthors.scala | 8 ++++++-- 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/AuthorMerger.java b/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/AuthorMerger.java index d7224af78..0153e52d5 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/AuthorMerger.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/AuthorMerger.java @@ -132,17 +132,6 @@ public class AuthorMerger { .trim(); } - static int hammingDist(String str1, String str2) { - if (str1.length() != str2.length()) - return Math.max(str1.length(), str2.length()); - int i = 0, count = 0; - while (i < str1.length()) { - if (str1.charAt(i) != str2.charAt(i)) - count++; - i++; - } - return count; - } private static String authorFieldToBeCompared(Author author) { if (StringUtils.isNotBlank(author.getSurname())) { diff --git a/dhp-workflows/dhp-graph-mapper/src/main/scala/eu/dnetlib/dhp/enrich/orcid/SparkEnrichGraphWithOrcidAuthors.scala b/dhp-workflows/dhp-graph-mapper/src/main/scala/eu/dnetlib/dhp/enrich/orcid/SparkEnrichGraphWithOrcidAuthors.scala index 645df8181..4822059c6 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/scala/eu/dnetlib/dhp/enrich/orcid/SparkEnrichGraphWithOrcidAuthors.scala +++ b/dhp-workflows/dhp-graph-mapper/src/main/scala/eu/dnetlib/dhp/enrich/orcid/SparkEnrichGraphWithOrcidAuthors.scala @@ -2,10 +2,12 @@ package eu.dnetlib.dhp.enrich.orcid import eu.dnetlib.dhp.application.AbstractScalaApplication import eu.dnetlib.dhp.oa.merge.AuthorMerger +import eu.dnetlib.dhp.schema.common.ModelSupport import eu.dnetlib.dhp.schema.oaf.{OtherResearchProduct, Publication, Result, Software} import org.apache.spark.sql.functions._ import org.apache.spark.sql._ import org.slf4j.{Logger, LoggerFactory} +import scala.collection.JavaConverters._ class SparkEnrichGraphWithOrcidAuthors(propertyPath: String, args: Array[String], log: Logger) extends AbstractScalaApplication(propertyPath, args, log: Logger) { @@ -21,6 +23,8 @@ class SparkEnrichGraphWithOrcidAuthors(propertyPath: String, args: Array[String] val targetPath = parser.get("targetPath") log.info(s"targetPath is '$targetPath'") val orcidPublication: Dataset[Row] = generateOrcidTable(spark, orcidPath) +// ModelSupport.entityTypes.entrySet().asScala.filter(k => k.getKey.getClass isInstance(Result)) + enrichResult( spark, s"$graphPath/publication", @@ -63,7 +67,7 @@ class SparkEnrichGraphWithOrcidAuthors(propertyPath: String, args: Array[String] .schema(enc.schema) .json(graphPath) .select(col("id"), col("datainfo"), col("instance")) - .where("datainfo.deletedbyinference = false") + .where("datainfo.deletedbyinference != true") .drop("datainfo") .withColumn("instances", explode(col("instance"))) .withColumn("pids", explode(col("instances.pid"))) @@ -109,7 +113,7 @@ class SparkEnrichGraphWithOrcidAuthors(propertyPath: String, args: Array[String] .load(s"$inputPath/Works") .select(col("orcid"), explode(col("pids")).alias("identifier")) .where( - "identifier.schema = 'doi' or identifier.schema ='pmid' or identifier.schema ='pmc' or identifier.schema ='arxiv' or identifier.schema ='handle'" + "identifier.schema IN('doi','pmid','pmc','arxiv','handle')" ) val orcidPublication = orcidAuthors .join(orcidWorks, orcidAuthors("orcid").equalTo(orcidWorks("orcid"))) From 76594ded23455ecf67addcbebd3b4ca45b73199e Mon Sep 17 00:00:00 2001 From: dimitrispie Date: Fri, 1 Dec 2023 13:38:19 +0200 Subject: [PATCH 374/449] Changes to indicators Fixes on open access colours indicators - indi_pub_green_oa - indi_pub_gold_oa - indi_pub_hybrid - indi_pub_bronze_oa - indi_pub_diamond --- .../scripts/step16-createIndicatorsTables.sql | 129 +++++++++++++----- .../scripts/step20-createMonitorDB.sql | 2 + .../scripts/step20-createMonitorDBAll.sql | 2 + .../graph/stats/oozie_app/scripts/step3.sql | 18 +++ .../graph/stats/oozie_app/scripts/step4.sql | 15 ++ .../graph/stats/oozie_app/scripts/step5.sql | 16 +++ .../graph/stats/oozie_app/scripts/step6.sql | 14 ++ 7 files changed, 162 insertions(+), 34 deletions(-) diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step16-createIndicatorsTables.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step16-createIndicatorsTables.sql index 8180e6527..fea449de6 100755 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step16-createIndicatorsTables.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step16-createIndicatorsTables.sql @@ -1,6 +1,18 @@ -- Sprint 1 ---- drop table if exists ${stats_db_name}.indi_pub_green_oa purge; +--create table if not exists ${stats_db_name}.indi_pub_green_oa stored as parquet as +--select distinct p.id, coalesce(green_oa, 0) as green_oa +--from ${stats_db_name}.publication p +-- left outer join ( +-- select p.id, 1 as green_oa +-- from ${stats_db_name}.publication p +-- join ${stats_db_name}.result_instance ri on ri.id = p.id +-- join ${stats_db_name}.datasource on datasource.id = ri.hostedby +-- where datasource.type like '%Repository%' +-- and (ri.accessright = 'Open Access' +-- or ri.accessright = 'Embargo' or ri.accessright = 'Open Source')) tmp +-- on p.id= tmp.id; create table if not exists ${stats_db_name}.indi_pub_green_oa stored as parquet as select distinct p.id, coalesce(green_oa, 0) as green_oa from ${stats_db_name}.publication p @@ -11,7 +23,7 @@ from ${stats_db_name}.publication p join ${stats_db_name}.datasource on datasource.id = ri.hostedby where datasource.type like '%Repository%' and (ri.accessright = 'Open Access' - or ri.accessright = 'Embargo' or ri.accessright = 'Open Source')) tmp + or ri.accessright = 'Embargo' or ri.accessright = 'Open Source') and datasource.name!='Other') tmp on p.id= tmp.id; drop table if exists ${stats_db_name}.indi_pub_grey_lit purge; @@ -183,15 +195,24 @@ drop table if exists ${stats_db_name}.tmp purge; ---- Sprint 4 ---- drop table if exists ${stats_db_name}.indi_pub_diamond purge; +--create table if not exists ${stats_db_name}.indi_pub_diamond stored as parquet as +--select distinct pd.id, coalesce(in_diamond_journal, 0) as in_diamond_journal +--from ${stats_db_name}.publication_datasources pd +-- left outer join ( +-- select pd.id, 1 as in_diamond_journal from ${stats_db_name}.publication_datasources pd +-- join ${stats_db_name}.datasource d on d.id=pd.datasource +-- join STATS_EXT.plan_s_jn ps where (ps.issn_print=d.issn_printed and ps.issn_online=d.issn_online) +-- and (ps.journal_is_in_doaj=true or ps.journal_is_oa=true) and ps.has_apc=false) tmp +-- on pd.id=tmp.id; + create table if not exists ${stats_db_name}.indi_pub_diamond stored as parquet as select distinct pd.id, coalesce(in_diamond_journal, 0) as in_diamond_journal from ${stats_db_name}.publication_datasources pd - left outer join ( - select pd.id, 1 as in_diamond_journal from ${stats_db_name}.publication_datasources pd - join ${stats_db_name}.datasource d on d.id=pd.datasource - join STATS_EXT.plan_s_jn ps where (ps.issn_print=d.issn_printed and ps.issn_online=d.issn_online) - and (ps.journal_is_in_doaj=true or ps.journal_is_oa=true) and ps.has_apc=false) tmp - on pd.id=tmp.id; +left outer join (select pd.id, 1 as in_diamond_journal from ${stats_db_name}.publication_datasources pd +join ${stats_db_name}.datasource d on d.id=pd.datasource +join STATS_EXT.plan_s_jn ps where (ps.issn_print=d.issn_printed and ps.issn_online=d.issn_online) +and (ps.journal_is_in_doaj=true or ps.journal_is_oa=true) and ps.has_apc=false) tmp +on pd.id=tmp.id; drop table if exists ${stats_db_name}.indi_pub_in_transformative purge; @@ -312,28 +333,55 @@ drop table if exists ${stats_db_name}.indi_pub_gold_oa purge; -- JOIN gold_oa on issn.issn = gold_oa.issn) tmp -- on pd.id=tmp.id; +--create table if not exists ${stats_db_name}.indi_pub_gold_oa stored as parquet as +--with gold_oa as ( +--SELECT issn,issn_l from stats_ext.issn_gold_oa_dataset_v5), +--issn AS (SELECT * FROM +--(SELECT id,issn_printed as issn FROM ${stats_db_name}.datasource +--WHERE issn_printed IS NOT NULL +--UNION ALL +--SELECT id, issn_online as issn FROM ${stats_db_name}.datasource +--WHERE issn_online IS NOT NULL or id like '%doajarticles%') as issn +--WHERE LENGTH(issn) > 7), +--alljournals AS(select issn, issn_l from stats_ext.alljournals +--where journal_is_in_doaj=true or journal_is_oa=true) +--SELECT DISTINCT pd.id, coalesce(is_gold, 0) as is_gold +--FROM ${stats_db_name}.publication_datasources pd +--left outer join ( +--select pd.id, 1 as is_gold FROM ${stats_db_name}.publication_datasources pd +--JOIN issn on issn.id=pd.datasource +--JOIN gold_oa on issn.issn = gold_oa.issn +--join alljournals on issn.issn=alljournals.issn +--left outer join ${stats_db_name}.result_instance ri on ri.id=pd.id +--and ri.accessright!='Closed Access' and ri.accessright_uw='gold') tmp +--on pd.id=tmp.id; create table if not exists ${stats_db_name}.indi_pub_gold_oa stored as parquet as with gold_oa as ( -SELECT issn,issn_l from stats_ext.issn_gold_oa_dataset_v5), -issn AS (SELECT * FROM -(SELECT id,issn_printed as issn FROM ${stats_db_name}.datasource -WHERE issn_printed IS NOT NULL -UNION ALL -SELECT id, issn_online as issn FROM ${stats_db_name}.datasource -WHERE issn_online IS NOT NULL or id like '%doajarticles%') as issn -WHERE LENGTH(issn) > 7), -alljournals AS(select issn, issn_l from stats_ext.alljournals -where journal_is_in_doaj=true or journal_is_oa=true) +select distinct issn from ( + SELECT issn_l as issn from stats_ext.issn_gold_oa_dataset_v5 + UNION ALL + SELECT issn as issn from stats_ext.issn_gold_oa_dataset_v5 + UNION ALL + select issn from stats_ext.alljournals where journal_is_in_doaj=true or journal_is_oa=true + UNION ALL + select issn_l as issn from stats_ext.alljournals where journal_is_in_doaj=true or journal_is_oa=true) foo), +dd as ( +select distinct * from ( + select id, issn_printed as issn from ${stats_db_name}.datasource d where d.id like '%doajarticles%' + UNION ALL + select id, issn_online as issn from ${stats_db_name}.datasource d where d.id like '%doajarticles%' + UNION ALL + select id, issn_printed as issn from ${stats_db_name}.datasource d join gold_oa on gold_oa.issn=d.issn_printed + UNION ALL + select id, issn_online as issn from ${stats_db_name}.datasource d join gold_oa on gold_oa.issn=d.issn_online) foo +) SELECT DISTINCT pd.id, coalesce(is_gold, 0) as is_gold FROM ${stats_db_name}.publication_datasources pd left outer join ( -select pd.id, 1 as is_gold FROM ${stats_db_name}.publication_datasources pd -JOIN issn on issn.id=pd.datasource -JOIN gold_oa on issn.issn = gold_oa.issn -join alljournals on issn.issn=alljournals.issn -left outer join ${stats_db_name}.result_instance ri on ri.id=pd.id -and ri.accessright!='Closed Access' and ri.accessright_uw='gold') tmp -on pd.id=tmp.id; + select pd.id, 1 as is_gold + FROM ${stats_db_name}.publication_datasources pd + join dd on dd.id=pd.datasource + left outer join ${stats_db_name}.result_accessroute ra on ra.id = pd.id where ra.accessroute = 'gold') tmp on tmp.id=pd.id; drop table if exists ${stats_db_name}.indi_pub_hybrid_oa_with_cc purge; @@ -421,15 +469,26 @@ drop table if exists ${stats_db_name}.indi_pub_hybrid purge; -- where (gold_oa.journal_is_in_doaj=false or gold_oa.journal_is_oa=false))tmp -- on pd.id=tmp.id; +--create table if not exists ${stats_db_name}.indi_pub_hybrid stored as parquet as +--select distinct pd.id,coalesce(is_hybrid,0) is_hybrid from ${stats_db_name}.publication_datasources pd +--left outer join (select pd.id, 1 as is_hybrid from ${stats_db_name}.publication_datasources pd +--join ${stats_db_name}.datasource d on pd.datasource=d.id +--join ${stats_db_name}.result_instance ri on ri.id=pd.id +--join ${stats_db_name}.indi_pub_gold_oa indi_gold on indi_gold.id=pd.id +--join ${stats_db_name}.result_accessroute ra on ra.id=pd.id +--where d.type like '%Journal%' and ri.accessright!='Closed Access' and (ri.accessright_uw!='gold' +--or indi_gold.is_gold=0) and (ra.accessroute='hybrid' or ri.license is not null)) tmp +--on pd.id=tmp.id; + create table if not exists ${stats_db_name}.indi_pub_hybrid stored as parquet as -select distinct pd.id,coalesce(is_hybrid,0) is_hybrid from ${stats_db_name}.publication_datasources pd -left outer join (select pd.id, 1 as is_hybrid from ${stats_db_name}.publication_datasources pd -join ${stats_db_name}.datasource d on pd.datasource=d.id +select distinct pd.id,coalesce(is_hybrid,0) is_hybrid from ${stats_db_name}.publication pd +left outer join (select pd.id, 1 as is_hybrid from ${stats_db_name}.publication pd join ${stats_db_name}.result_instance ri on ri.id=pd.id join ${stats_db_name}.indi_pub_gold_oa indi_gold on indi_gold.id=pd.id join ${stats_db_name}.result_accessroute ra on ra.id=pd.id -where d.type like '%Journal%' and ri.accessright!='Closed Access' and (ri.accessright_uw!='gold' -or indi_gold.is_gold=0) and (ra.accessroute='hybrid' or ri.license is not null)) tmp +join ${stats_db_name}.datasource d on d.id=ri.hostedby +where indi_gold.is_gold=0 and ((d.type like '%Journal%' and ri.accessright!='Closed Access' and ri.accessright!='Restricted' and ri.license is not null) or +ra.accessroute='hybrid'))tmp on pd.id=tmp.id; drop table if exists ${stats_db_name}.indi_org_fairness purge; @@ -814,14 +873,16 @@ drop table if exists ${stats_db_name}.indi_pub_bronze_oa purge; --and ri.accessright='Open Access') tmp on tmp.id=p.id; create table ${stats_db_name}.indi_pub_bronze_oa stored as parquet as -select distinct pd.id,coalesce(is_bronze_oa,0) is_bronze_oa from ${stats_db_name}.publication_datasources pd -left outer join (select pd.id, 1 as is_bronze_oa from ${stats_db_name}.publication_datasources pd -join ${stats_db_name}.datasource d on pd.datasource=d.id +select distinct pd.id,coalesce(is_bronze_oa,0) is_bronze_oa from ${stats_db_name}.publication pd +left outer join (select pd.id, 1 as is_bronze_oa from ${stats_db_name}.publication pd join ${stats_db_name}.result_instance ri on ri.id=pd.id join ${stats_db_name}.indi_pub_gold_oa indi_gold on indi_gold.id=pd.id +join ${stats_db_name}.indi_pub_hybrid indi_hybrid on indi_hybrid.id=pd.id join ${stats_db_name}.result_accessroute ra on ra.id=pd.id -where d.type like '%Journal%' and ri.accessright!='Closed Access' and (ri.accessright_uw!='gold' -or indi_gold.is_gold=0) and (ra.accessroute='bronze' or ri.license is null)) tmp +join ${stats_db_name}.datasource d on d.id=ri.hostedby +where indi_gold.is_gold=0 and indi_hybrid.is_hybrid=0 +and ((d.type like '%Journal%' and ri.accessright!='Closed Access' +and ri.accessright!='Restricted' and ri.license is null) or ra.accessroute='bronze')) tmp on pd.id=tmp.id; CREATE TEMPORARY TABLE ${stats_db_name}.project_year_result_year as diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB.sql index b52abd865..c61a19e5c 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB.sql @@ -64,6 +64,8 @@ create table TARGET.result_accessroute stored as parquet as select * from SOURCE create table TARGET.result_orcid stored as parquet as select * from SOURCE.result_orcid orig where exists (select 1 from TARGET.result r where r.id=orig.id); +create table TARGET.result_instance stored as parquet as select * from SOURCE.result_instance orig where exists (select 1 from TARGET.result r where r.id=orig.id); + create view TARGET.foo1 as select * from SOURCE.result_result rr where rr.source in (select id from TARGET.result); create view TARGET.foo2 as select * from SOURCE.result_result rr where rr.target in (select id from TARGET.result); create table TARGET.result_result STORED AS PARQUET as select distinct * from (select * from TARGET.foo1 union all select * from TARGET.foo2) foufou; diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDBAll.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDBAll.sql index 2b6a68514..167aac726 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDBAll.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDBAll.sql @@ -248,6 +248,8 @@ create table TARGET.indi_impact_measures stored as parquet as select * from SOUR create table TARGET.indi_pub_interdisciplinarity stored as parquet as select * from SOURCE.indi_pub_interdisciplinarity orig where exists (select 1 from TARGET.result r where r.id=orig.id); create table TARGET.result_apc_affiliations stored as parquet as select * from SOURCE.result_apc_affiliations orig where exists (select 1 from TARGET.result r where r.id=orig.id); +create table TARGET.result_instance stored as parquet as select * from SOURCE.result_instance orig where exists (select 1 from TARGET.result r where r.id=orig.id); +create table TARGET.result_orcid stored as parquet as select * from SOURCE.result_orcid orig where exists (select 1 from TARGET.result r where r.id=orig.id); create table TARGET.indi_is_project_result_after stored as parquet as select * from SOURCE.indi_is_project_result_after orig where exists (select 1 from TARGET.result r where r.id=orig.result_id); create view TARGET.indi_is_funder_plan_s as select * from SOURCE.indi_is_funder_plan_s; diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step3.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step3.sql index eb97263a7..0384de4ec 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step3.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step3.sql @@ -5,6 +5,8 @@ ------------------------------------------------------ -- Dataset temporary table supporting updates +DROP TABLE IF EXISTS ${stats_db_name}.dataset_tmp purge; + CREATE TABLE ${stats_db_name}.dataset_tmp ( id STRING, @@ -40,6 +42,8 @@ SELECT substr(d.id, 4) AS id, FROM ${openaire_db_name}.dataset d WHERE d.datainfo.deletedbyinference = FALSE and d.datainfo.invisible=false; +DROP TABLE IF EXISTS ${stats_db_name}.dataset_citations purge; + CREATE TABLE ${stats_db_name}.dataset_citations STORED AS PARQUET AS SELECT substr(d.id, 4) AS id, xpath_string(citation.value, "//citation/id[@type='openaire']/@value") AS cites FROM ${openaire_db_name}.dataset d @@ -47,12 +51,16 @@ FROM ${openaire_db_name}.dataset d WHERE xpath_string(citation.value, "//citation/id[@type='openaire']/@value") != "" and d.datainfo.deletedbyinference = false and d.datainfo.invisible=false; +DROP TABLE IF EXISTS ${stats_db_name}.dataset_classifications purge; + CREATE TABLE ${stats_db_name}.dataset_classifications STORED AS PARQUET AS SELECT substr(p.id, 4) AS id, instancetype.classname AS type FROM ${openaire_db_name}.dataset p LATERAL VIEW explode(p.instance.instancetype) instances AS instancetype where p.datainfo.deletedbyinference = false and p.datainfo.invisible=false; +DROP TABLE IF EXISTS ${stats_db_name}.dataset_concepts purge; + CREATE TABLE ${stats_db_name}.dataset_concepts STORED AS PARQUET AS SELECT substr(p.id, 4) as id, case when contexts.context.id RLIKE '^[^::]+::[^::]+::.+$' then contexts.context.id @@ -62,6 +70,8 @@ from ${openaire_db_name}.dataset p LATERAL VIEW explode(p.context) contexts as context where p.datainfo.deletedbyinference = false and p.datainfo.invisible=false; +DROP TABLE IF EXISTS ${stats_db_name}.dataset_datasources purge; + CREATE TABLE ${stats_db_name}.dataset_datasources STORED AS PARQUET AS SELECT p.id, case when d.id IS NULL THEN 'other' ELSE p.datasource END AS datasource FROM ( @@ -74,23 +84,31 @@ FROM ( FROM ${openaire_db_name}.datasource d WHERE d.datainfo.deletedbyinference = false and d.datainfo.invisible=false) d ON p.datasource = d.id; +DROP TABLE IF EXISTS ${stats_db_name}.dataset_languages purge; + CREATE TABLE ${stats_db_name}.dataset_languages STORED AS PARQUET AS SELECT substr(p.id, 4) AS id, p.language.classname AS language FROM ${openaire_db_name}.dataset p where p.datainfo.deletedbyinference = false and p.datainfo.invisible=false; +DROP TABLE IF EXISTS ${stats_db_name}.dataset_oids purge; + CREATE TABLE ${stats_db_name}.dataset_oids STORED AS PARQUET AS SELECT substr(p.id, 4) AS id, oids.ids AS oid FROM ${openaire_db_name}.dataset p LATERAL VIEW explode(p.originalid) oids AS ids where p.datainfo.deletedbyinference = false and p.datainfo.invisible=false; +DROP TABLE IF EXISTS ${stats_db_name}.dataset_pids purge; + CREATE TABLE ${stats_db_name}.dataset_pids STORED AS PARQUET AS SELECT substr(p.id, 4) AS id, ppid.qualifier.classname AS type, ppid.value AS pid FROM ${openaire_db_name}.dataset p LATERAL VIEW explode(p.pid) pids AS ppid where p.datainfo.deletedbyinference = false and p.datainfo.invisible=false; +DROP TABLE IF EXISTS ${stats_db_name}.dataset_topics purge; + CREATE TABLE ${stats_db_name}.dataset_topics STORED AS PARQUET AS SELECT substr(p.id, 4) AS id, subjects.subject.qualifier.classname AS type, subjects.subject.value AS topic FROM ${openaire_db_name}.dataset p diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step4.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step4.sql index 0d1f6323e..d8f4d65e4 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step4.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step4.sql @@ -5,6 +5,7 @@ -------------------------------------------------------- -- Software temporary table supporting updates +DROP TABLE IF EXISTS ${stats_db_name}.software_tmp purge; CREATE TABLE ${stats_db_name}.software_tmp ( id STRING, @@ -40,6 +41,8 @@ SELECT substr(s.id, 4) as id, from ${openaire_db_name}.software s where s.datainfo.deletedbyinference = false and s.datainfo.invisible=false; +DROP TABLE IF EXISTS ${stats_db_name}.software_citations purge; + CREATE TABLE ${stats_db_name}.software_citations STORED AS PARQUET AS SELECT substr(s.id, 4) as id, xpath_string(citation.value, "//citation/id[@type='openaire']/@value") AS cites FROM ${openaire_db_name}.software s @@ -47,6 +50,8 @@ FROM ${openaire_db_name}.software s where xpath_string(citation.value, "//citation/id[@type='openaire']/@value") != "" and s.datainfo.deletedbyinference = false and s.datainfo.invisible=false; +DROP TABLE IF EXISTS ${stats_db_name}.software_classifications purge; + CREATE TABLE ${stats_db_name}.software_classifications STORED AS PARQUET AS SELECT substr(p.id, 4) AS id, instancetype.classname AS type FROM ${openaire_db_name}.software p @@ -62,6 +67,8 @@ FROM ${openaire_db_name}.software p LATERAL VIEW explode(p.context) contexts AS context where p.datainfo.deletedbyinference = false and p.datainfo.invisible=false; +DROP TABLE IF EXISTS ${stats_db_name}.software_datasources purge; + CREATE TABLE ${stats_db_name}.software_datasources STORED AS PARQUET AS SELECT p.id, CASE WHEN d.id IS NULL THEN 'other' ELSE p.datasource end as datasource FROM ( @@ -74,23 +81,31 @@ FROM ( FROM ${openaire_db_name}.datasource d WHERE d.datainfo.deletedbyinference = false and d.datainfo.invisible=false) d ON p.datasource = d.id; +DROP TABLE IF EXISTS ${stats_db_name}.software_languages purge; + CREATE TABLE ${stats_db_name}.software_languages STORED AS PARQUET AS select substr(p.id, 4) AS id, p.language.classname AS language FROM ${openaire_db_name}.software p where p.datainfo.deletedbyinference = false and p.datainfo.invisible=false; +DROP TABLE IF EXISTS ${stats_db_name}.software_oids purge; + CREATE TABLE ${stats_db_name}.software_oids STORED AS PARQUET AS SELECT substr(p.id, 4) AS id, oids.ids AS oid FROM ${openaire_db_name}.software p LATERAL VIEW explode(p.originalid) oids AS ids where p.datainfo.deletedbyinference = false and p.datainfo.invisible=false; +DROP TABLE IF EXISTS ${stats_db_name}.software_pids purge; + CREATE TABLE ${stats_db_name}.software_pids STORED AS PARQUET AS SELECT substr(p.id, 4) AS id, ppid.qualifier.classname AS type, ppid.value AS pid FROM ${openaire_db_name}.software p LATERAL VIEW explode(p.pid) pids AS ppid where p.datainfo.deletedbyinference = false and p.datainfo.invisible=false; +DROP TABLE IF EXISTS ${stats_db_name}.software_topics purge; + CREATE TABLE ${stats_db_name}.software_topics STORED AS PARQUET AS SELECT substr(p.id, 4) AS id, subjects.subject.qualifier.classname AS type, subjects.subject.value AS topic FROM ${openaire_db_name}.software p diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step5.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step5.sql index 06b616d6a..fae0fbb63 100755 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step5.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step5.sql @@ -5,6 +5,8 @@ -------------------------------------------------------------------------------- -- Otherresearchproduct temporary table supporting updates +DROP TABLE IF EXISTS ${stats_db_name}.otherresearchproduct_tmp purge; + CREATE TABLE ${stats_db_name}.otherresearchproduct_tmp ( id STRING, @@ -40,6 +42,8 @@ FROM ${openaire_db_name}.otherresearchproduct o WHERE o.datainfo.deletedbyinference = FALSE and o.datainfo.invisible=false; -- Otherresearchproduct_citations +DROP TABLE IF EXISTS ${stats_db_name}.otherresearchproduct_citations purge; + CREATE TABLE ${stats_db_name}.otherresearchproduct_citations STORED AS PARQUET AS SELECT substr(o.id, 4) AS id, xpath_string(citation.value, "//citation/id[@type='openaire']/@value") AS cites FROM ${openaire_db_name}.otherresearchproduct o LATERAL VIEW explode(o.extrainfo) citations AS citation @@ -51,6 +55,8 @@ SELECT substr(p.id, 4) AS id, instancetype.classname AS type FROM ${openaire_db_name}.otherresearchproduct p LATERAL VIEW explode(p.instance.instancetype) instances AS instancetype where p.datainfo.deletedbyinference = false and p.datainfo.invisible=false; +DROP TABLE IF EXISTS ${stats_db_name}.otherresearchproduct_concepts purge; + CREATE TABLE ${stats_db_name}.otherresearchproduct_concepts STORED AS PARQUET AS SELECT substr(p.id, 4) as id, case when contexts.context.id RLIKE '^[^::]+::[^::]+::.+$' then contexts.context.id @@ -59,6 +65,8 @@ SELECT substr(p.id, 4) as id, case FROM ${openaire_db_name}.otherresearchproduct p LATERAL VIEW explode(p.context) contexts AS context where p.datainfo.deletedbyinference = false and p.datainfo.invisible=false; +DROP TABLE IF EXISTS ${stats_db_name}.otherresearchproduct_datasources purge; + CREATE TABLE ${stats_db_name}.otherresearchproduct_datasources STORED AS PARQUET AS SELECT p.id, CASE WHEN d.id IS NULL THEN 'other' ELSE p.datasource END AS datasource FROM (SELECT substr(p.id, 4) AS id, substr(instances.instance.hostedby.key, 4) AS datasource @@ -68,21 +76,29 @@ FROM (SELECT substr(p.id, 4) AS id, substr(instances.instance.hostedby.key, 4) A from ${openaire_db_name}.datasource d WHERE d.datainfo.deletedbyinference = false and d.datainfo.invisible=false) d on p.datasource = d.id; +DROP TABLE IF EXISTS ${stats_db_name}.otherresearchproduct_languages purge; + CREATE TABLE ${stats_db_name}.otherresearchproduct_languages STORED AS PARQUET AS SELECT substr(p.id, 4) AS id, p.language.classname AS language FROM ${openaire_db_name}.otherresearchproduct p where p.datainfo.deletedbyinference = false and p.datainfo.invisible=false; +DROP TABLE IF EXISTS ${stats_db_name}.otherresearchproduct_oids purge; + CREATE TABLE ${stats_db_name}.otherresearchproduct_oids STORED AS PARQUET AS SELECT substr(p.id, 4) AS id, oids.ids AS oid FROM ${openaire_db_name}.otherresearchproduct p LATERAL VIEW explode(p.originalid) oids AS ids where p.datainfo.deletedbyinference = false and p.datainfo.invisible=false; +DROP TABLE IF EXISTS ${stats_db_name}.otherresearchproduct_pids purge; + CREATE TABLE ${stats_db_name}.otherresearchproduct_pids STORED AS PARQUET AS SELECT substr(p.id, 4) AS id, ppid.qualifier.classname AS type, ppid.value AS pid FROM ${openaire_db_name}.otherresearchproduct p LATERAL VIEW explode(p.pid) pids AS ppid where p.datainfo.deletedbyinference = false and p.datainfo.invisible=false; +DROP TABLE IF EXISTS ${stats_db_name}.otherresearchproduct_topics purge; + CREATE TABLE ${stats_db_name}.otherresearchproduct_topics STORED AS PARQUET AS SELECT substr(p.id, 4) AS id, subjects.subject.qualifier.classname AS type, subjects.subject.value AS topic FROM ${openaire_db_name}.otherresearchproduct p LATERAL VIEW explode(p.subject) subjects AS subject diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step6.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step6.sql index e0522e149..e5b3f504e 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step6.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step6.sql @@ -3,29 +3,39 @@ -- Project table/view and Project related tables/views ------------------------------------------------------ ------------------------------------------------------ +DROP TABLE IF EXISTS ${stats_db_name}.project_oids purge; + CREATE TABLE ${stats_db_name}.project_oids STORED AS PARQUET AS SELECT substr(p.id, 4) AS id, oids.ids AS oid FROM ${openaire_db_name}.project p LATERAL VIEW explode(p.originalid) oids AS ids where p.datainfo.deletedbyinference=false and p.datainfo.invisible=false; +DROP TABLE IF EXISTS ${stats_db_name}.project_organizations purge; + CREATE TABLE ${stats_db_name}.project_organizations STORED AS PARQUET AS SELECT substr(r.source, 4) AS id, substr(r.target, 4) AS organization from ${openaire_db_name}.relation r WHERE r.reltype = 'projectOrganization' and r.source like '40|%' and r.datainfo.deletedbyinference = false and r.datainfo.invisible=false; +DROP TABLE IF EXISTS ${stats_db_name}.project_results purge; + CREATE TABLE ${stats_db_name}.project_results STORED AS PARQUET AS SELECT substr(r.target, 4) AS id, substr(r.source, 4) AS result, r.datainfo.provenanceaction.classname as provenance FROM ${openaire_db_name}.relation r WHERE r.reltype = 'resultProject' and r.target like '40|%' and r.datainfo.deletedbyinference = false and r.datainfo.invisible=false; +DROP TABLE IF EXISTS ${stats_db_name}.project_classification purge; + create table ${stats_db_name}.project_classification STORED AS PARQUET as select substr(p.id, 4) as id, class.h2020programme.code, class.level1, class.level2, class.level3 from ${openaire_db_name}.project p lateral view explode(p.h2020classification) classifs as class where p.datainfo.deletedbyinference=false and p.datainfo.invisible=false and class.h2020programme is not null; +DROP TABLE IF EXISTS ${stats_db_name}.project_tmp purge; + CREATE TABLE ${stats_db_name}.project_tmp ( id STRING, @@ -80,12 +90,16 @@ SELECT substr(p.id, 4) AS id, FROM ${openaire_db_name}.project p WHERE p.datainfo.deletedbyinference = false and p.datainfo.invisible=false; +DROP TABLE IF EXISTS ${stats_db_name}.funder purge; + create table ${stats_db_name}.funder STORED AS PARQUET as select distinct xpath_string(fund, '//funder/id') as id, xpath_string(fund, '//funder/name') as name, xpath_string(fund, '//funder/shortname') as shortname from ${openaire_db_name}.project p lateral view explode(p.fundingtree.value) fundingtree as fund; +DROP TABLE IF EXISTS ${stats_db_name}.project_organization_contribution purge; + CREATE TABLE ${stats_db_name}.project_organization_contribution STORED AS PARQUET AS SELECT distinct substr(r.source, 4) AS project, substr(r.target, 4) AS organization, properties[0].value contribution, properties[1].value currency From a397112cb86a6f26798b18ce159837b032878fe1 Mon Sep 17 00:00:00 2001 From: dimitrispie Date: Fri, 1 Dec 2023 15:00:18 +0200 Subject: [PATCH 375/449] Add new indicator Add indi_pub_publicly_funded --- .../scripts/step16-createIndicatorsTables.sql | 21 +++++++++++++++++++ .../scripts/step20-createMonitorDB.sql | 1 + .../scripts/step20-createMonitorDBAll.sql | 1 + 3 files changed, 23 insertions(+) diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step16-createIndicatorsTables.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step16-createIndicatorsTables.sql index fea449de6..5aa14e2c2 100755 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step16-createIndicatorsTables.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step16-createIndicatorsTables.sql @@ -1177,3 +1177,24 @@ select allresults.ri_initiative, result_findable.no_result_findable/allresults.n from allresults join result_findable on result_findable.ri_initiative=allresults.ri_initiative; +create table if not exists ${stats_db_name}.indi_pub_publicly_funded stored as parquet as +with org_names_pids as +(select org.id,name, pid from ${stats_db_name}.organization org +join ${stats_db_name}.organization_pids op on org.id=op.id), +publicly_funded_orgs as +(select distinct name from +(select pf.name from stats_ext.insitutions_for_publicly_funded pf +join ${stats_db_name}.fundref f on f.name=pf.name where f.type='government' +union all +select pf.name from stats_ext.insitutions_for_publicly_funded pf +join ${stats_db_name}.project p on p.funder=pf.name +union all +select pf.name from stats_ext.insitutions_for_publicly_funded pf +join org_names_pids op on (op.name=pf.name or op.pid=pf.ror) +and pf.publicly_funded='yes') foo) +select distinct p.id, coalesce(publicly_funded, 0) as publicly_funded +from ${stats_db_name}.publication p +left outer join ( +select distinct ro.id, 1 as publicly_funded from result_organization ro +join ${stats_db_name}.organization o on o.id=ro.organization +join publicly_funded_orgs pfo on o.name=pfo.name) tmp on p.id=tmp.id; \ No newline at end of file diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB.sql index c61a19e5c..cc8348f26 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB.sql @@ -63,6 +63,7 @@ create table TARGET.result_fos stored as parquet as select * from SOURCE.result_ create table TARGET.result_accessroute stored as parquet as select * from SOURCE.result_accessroute orig where exists (select 1 from TARGET.result r where r.id=orig.id); create table TARGET.result_orcid stored as parquet as select * from SOURCE.result_orcid orig where exists (select 1 from TARGET.result r where r.id=orig.id); +create table TARGET.indi_pub_publicly_funded stored as parquet as select * from SOURCE.indi_pub_publicly_funded orig where exists (select 1 from TARGET.result r where r.id=orig.id); create table TARGET.result_instance stored as parquet as select * from SOURCE.result_instance orig where exists (select 1 from TARGET.result r where r.id=orig.id); diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDBAll.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDBAll.sql index 167aac726..68417f3e0 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDBAll.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDBAll.sql @@ -250,6 +250,7 @@ create table TARGET.indi_pub_interdisciplinarity stored as parquet as select * f create table TARGET.result_apc_affiliations stored as parquet as select * from SOURCE.result_apc_affiliations orig where exists (select 1 from TARGET.result r where r.id=orig.id); create table TARGET.result_instance stored as parquet as select * from SOURCE.result_instance orig where exists (select 1 from TARGET.result r where r.id=orig.id); create table TARGET.result_orcid stored as parquet as select * from SOURCE.result_orcid orig where exists (select 1 from TARGET.result r where r.id=orig.id); +create table TARGET.indi_pub_publicly_funded stored as parquet as select * from SOURCE.indi_pub_publicly_funded orig where exists (select 1 from TARGET.result r where r.id=orig.id); create table TARGET.indi_is_project_result_after stored as parquet as select * from SOURCE.indi_is_project_result_after orig where exists (select 1 from TARGET.result r where r.id=orig.result_id); create view TARGET.indi_is_funder_plan_s as select * from SOURCE.indi_is_funder_plan_s; From c9d995dde0d48b56e99af43e4c91273817def678 Mon Sep 17 00:00:00 2001 From: dimitrispie Date: Fri, 1 Dec 2023 15:44:35 +0200 Subject: [PATCH 376/449] New institutions added --- .../stats/oozie_app/scripts/step20-createMonitorDBAll.sql | 5 ++++- .../scripts/step20-createMonitorDB_institutions.sql | 4 +++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDBAll.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDBAll.sql index 68417f3e0..42812d159 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDBAll.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDBAll.sql @@ -78,7 +78,10 @@ create table TARGET.result stored as parquet as 'openorgs____::4d4051b56708688235252f1d8fddb8c1', -- Iscte - Instituto Universitário de Lisboa 'openorgs____::5d55fb216b14691cf68218daf5d78cd9', -- Munster Technological University 'openorgs____::0fccc7640f0cb44d5cd1b06b312a06b9', -- Cardiff University - 'openorgs____::8839b55dae0c84d56fd533f52d5d483a' -- Leibniz Institute of Ecological Urban and Regional Development + 'openorgs____::8839b55dae0c84d56fd533f52d5d483a', -- Leibniz Institute of Ecological Urban and Regional Development + 'openorgs____::526468206bca24c1c90da6a312295cf4', -- Cyprus University of Technology + 'openorgs____::b5ca9d4340e26454e367e2908ef3872f' -- Alma Mater Studiorum University of Bologna + ) )) foo; create view if not exists TARGET.category as select * from SOURCE.category; diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB_institutions.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB_institutions.sql index d2f08b391..2c0ac337c 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB_institutions.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step20-createMonitorDB_institutions.sql @@ -58,5 +58,7 @@ create table TARGET.result stored as parquet as 'openorgs____::4d4051b56708688235252f1d8fddb8c1', -- Iscte - Instituto Universitário de Lisboa 'openorgs____::5d55fb216b14691cf68218daf5d78cd9', -- Munster Technological University 'openorgs____::0fccc7640f0cb44d5cd1b06b312a06b9', -- Cardiff University - 'openorgs____::8839b55dae0c84d56fd533f52d5d483a' -- Leibniz Institute of Ecological Urban and Regional Development + 'openorgs____::8839b55dae0c84d56fd533f52d5d483a', -- Leibniz Institute of Ecological Urban and Regional Development + 'openorgs____::526468206bca24c1c90da6a312295cf4', -- Cyprus University of Technology + 'openorgs____::b5ca9d4340e26454e367e2908ef3872f' -- Alma Mater Studiorum University of Bologna ))) foo; \ No newline at end of file From 33cb483c756808d9fc2363d5b27fdb5eeb35c355 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Fri, 1 Dec 2023 15:03:05 +0100 Subject: [PATCH 377/449] using objectSubType as originalType in Crossref2Oaf, code formatting --- .../dhp/datacite/DataciteToOAFTransformation.scala | 10 ++++++---- .../main/scala/eu/dnetlib/dhp/sx/bio/BioDBToOAF.scala | 1 - .../eu/dnetlib/dhp/sx/bio/pubmed/PubMedToOaf.scala | 5 ++--- .../eu/dnetlib/doiboost/crossref/Crossref2Oaf.scala | 4 ++-- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/dhp-workflows/dhp-aggregation/src/main/scala/eu/dnetlib/dhp/datacite/DataciteToOAFTransformation.scala b/dhp-workflows/dhp-aggregation/src/main/scala/eu/dnetlib/dhp/datacite/DataciteToOAFTransformation.scala index ee3660918..7603715b9 100644 --- a/dhp-workflows/dhp-aggregation/src/main/scala/eu/dnetlib/dhp/datacite/DataciteToOAFTransformation.scala +++ b/dhp-workflows/dhp-aggregation/src/main/scala/eu/dnetlib/dhp/datacite/DataciteToOAFTransformation.scala @@ -176,7 +176,8 @@ object DataciteToOAFTransformation { vocabularies.getSynonymAsQualifier( ModelConstants.DNET_RESULT_TYPOLOGIES, typeQualifier.getClassid - ), resourceType + ), + resourceType ) } if (schemaOrg != null && schemaOrg.nonEmpty) { @@ -188,7 +189,8 @@ object DataciteToOAFTransformation { vocabularies.getSynonymAsQualifier( ModelConstants.DNET_RESULT_TYPOLOGIES, typeQualifier.getClassid - ), schemaOrg + ), + schemaOrg ) } @@ -203,7 +205,8 @@ object DataciteToOAFTransformation { vocabularies.getSynonymAsQualifier( ModelConstants.DNET_RESULT_TYPOLOGIES, typeQualifier.getClassid - ), resourceTypeGeneral + ), + resourceTypeGeneral ) } @@ -228,7 +231,6 @@ object DataciteToOAFTransformation { itm.setVocabularyName(ModelConstants.OPENAIRE_COAR_RESOURCE_TYPES_3_1) i.setInstanceTypeMapping(List(itm).asJava) - typeQualifiers._2.getClassname match { case "dataset" => val r = new OafDataset diff --git a/dhp-workflows/dhp-aggregation/src/main/scala/eu/dnetlib/dhp/sx/bio/BioDBToOAF.scala b/dhp-workflows/dhp-aggregation/src/main/scala/eu/dnetlib/dhp/sx/bio/BioDBToOAF.scala index 89bc8d948..df356548a 100644 --- a/dhp-workflows/dhp-aggregation/src/main/scala/eu/dnetlib/dhp/sx/bio/BioDBToOAF.scala +++ b/dhp-workflows/dhp-aggregation/src/main/scala/eu/dnetlib/dhp/sx/bio/BioDBToOAF.scala @@ -593,7 +593,6 @@ object BioDBToOAF { itm.setVocabularyName(ModelConstants.OPENAIRE_COAR_RESOURCE_TYPES_3_1) i.setInstanceTypeMapping(List(itm).asJava) - i.setCollectedfrom(collectedFromMap("ebi")) d.setInstance(List(i).asJava) i.setDateofacceptance( diff --git a/dhp-workflows/dhp-aggregation/src/main/scala/eu/dnetlib/dhp/sx/bio/pubmed/PubMedToOaf.scala b/dhp-workflows/dhp-aggregation/src/main/scala/eu/dnetlib/dhp/sx/bio/pubmed/PubMedToOaf.scala index f3f8b4f02..d59d73bd0 100644 --- a/dhp-workflows/dhp-aggregation/src/main/scala/eu/dnetlib/dhp/sx/bio/pubmed/PubMedToOaf.scala +++ b/dhp-workflows/dhp-aggregation/src/main/scala/eu/dnetlib/dhp/sx/bio/pubmed/PubMedToOaf.scala @@ -195,7 +195,7 @@ object PubMedToOaf { pubmedInstance.setInstanceTypeMapping(List(itm).asJava) } else { val i_type = article.getPublicationTypes.asScala - .map(s => (s.getValue,getVocabularyTerm(ModelConstants.DNET_PUBLICATION_RESOURCE, vocabularies, s.getValue))) + .map(s => (s.getValue, getVocabularyTerm(ModelConstants.DNET_PUBLICATION_RESOURCE, vocabularies, s.getValue))) .find(q => q._2 != null) if (i_type.isDefined) { @@ -205,8 +205,7 @@ object PubMedToOaf { itm.setOriginalType(i_type.get._1) itm.setVocabularyName(ModelConstants.OPENAIRE_COAR_RESOURCE_TYPES_3_1) pubmedInstance.setInstanceTypeMapping(List(itm).asJava) - } - else + } else return null } val result = createResult(pubmedInstance.getInstancetype, vocabularies) diff --git a/dhp-workflows/dhp-doiboost/src/main/scala/eu/dnetlib/doiboost/crossref/Crossref2Oaf.scala b/dhp-workflows/dhp-doiboost/src/main/scala/eu/dnetlib/doiboost/crossref/Crossref2Oaf.scala index 65e395357..53576fc10 100644 --- a/dhp-workflows/dhp-doiboost/src/main/scala/eu/dnetlib/doiboost/crossref/Crossref2Oaf.scala +++ b/dhp-workflows/dhp-doiboost/src/main/scala/eu/dnetlib/doiboost/crossref/Crossref2Oaf.scala @@ -107,7 +107,7 @@ case object Crossref2Oaf { .map(f => f.id) } - def mappingResult(result: Result, json: JValue, cobjCategory: String, originalType:String): Result = { + def mappingResult(result: Result, json: JValue, cobjCategory: String, originalType: String): Result = { implicit lazy val formats: DefaultFormats.type = org.json4s.DefaultFormats //MAPPING Crossref DOI into PID @@ -372,7 +372,7 @@ case object Crossref2Oaf { objectType, mappingCrossrefSubType.getOrElse(objectSubType, "0038 Other literature type") ) - mappingResult(result, json, cOBJCategory, originalType) + mappingResult(result, json, cOBJCategory, objectSubType) if (result == null || result.getId == null) return List() From d33f578e544c23eb8e1a1dd4edfd79b0a42d854a Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Fri, 1 Dec 2023 15:14:17 +0100 Subject: [PATCH 378/449] code formatting --- .../eu/dnetlib/dhp/oa/merge/AuthorMerger.java | 511 +++++++++--------- 1 file changed, 256 insertions(+), 255 deletions(-) diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/AuthorMerger.java b/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/AuthorMerger.java index 0153e52d5..0461c9353 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/AuthorMerger.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/oa/merge/AuthorMerger.java @@ -4,318 +4,319 @@ package eu.dnetlib.dhp.oa.merge; import java.text.Normalizer; import java.util.*; import java.util.stream.Collectors; + import org.apache.commons.lang3.StringUtils; + import com.wcohen.ss.JaroWinkler; + import eu.dnetlib.dhp.schema.oaf.Author; import eu.dnetlib.dhp.schema.oaf.StructuredProperty; import eu.dnetlib.pace.model.Person; import scala.Tuple2; - public class AuthorMerger { - private static final Double THRESHOLD = 0.95; + private static final Double THRESHOLD = 0.95; - private AuthorMerger() { - } + private AuthorMerger() { + } - public static List merge(List> authors) { + public static List merge(List> authors) { - authors.sort((o1, o2) -> -Integer.compare(countAuthorsPids(o1), countAuthorsPids(o2))); + authors.sort((o1, o2) -> -Integer.compare(countAuthorsPids(o1), countAuthorsPids(o2))); - List author = new ArrayList<>(); + List author = new ArrayList<>(); - for (List a : authors) { - author = mergeAuthor(author, a); - } + for (List a : authors) { + author = mergeAuthor(author, a); + } - return author; + return author; - } + } - public static List mergeAuthor(final List a, final List b, Double threshold) { - int pa = countAuthorsPids(a); - int pb = countAuthorsPids(b); - List base; - List enrich; - int sa = authorsSize(a); - int sb = authorsSize(b); + public static List mergeAuthor(final List a, final List b, Double threshold) { + int pa = countAuthorsPids(a); + int pb = countAuthorsPids(b); + List base; + List enrich; + int sa = authorsSize(a); + int sb = authorsSize(b); - if (sa == sb) { - base = pa > pb ? a : b; - enrich = pa > pb ? b : a; - } else { - base = sa > sb ? a : b; - enrich = sa > sb ? b : a; - } - enrichPidFromList(base, enrich, threshold); - return base; - } + if (sa == sb) { + base = pa > pb ? a : b; + enrich = pa > pb ? b : a; + } else { + base = sa > sb ? a : b; + enrich = sa > sb ? b : a; + } + enrichPidFromList(base, enrich, threshold); + return base; + } - public static List mergeAuthor(final List a, final List b) { - return mergeAuthor(a, b, THRESHOLD); - } + public static List mergeAuthor(final List a, final List b) { + return mergeAuthor(a, b, THRESHOLD); + } - private static void enrichPidFromList(List base, List enrich, Double threshold) { - if (base == null || enrich == null) - return; + private static void enrichPidFromList(List base, List enrich, Double threshold) { + if (base == null || enrich == null) + return; - // (if an Author has more than 1 pid, it appears 2 times in the list) - final Map basePidAuthorMap = base - .stream() - .filter(a -> a.getPid() != null && !a.getPid().isEmpty()) - .flatMap( - a -> a - .getPid() - .stream() - .filter(Objects::nonNull) - .map(p -> new Tuple2<>(pidToComparableString(p), a))) - .collect(Collectors.toMap(Tuple2::_1, Tuple2::_2, (x1, x2) -> x1)); + // (if an Author has more than 1 pid, it appears 2 times in the list) + final Map basePidAuthorMap = base + .stream() + .filter(a -> a.getPid() != null && !a.getPid().isEmpty()) + .flatMap( + a -> a + .getPid() + .stream() + .filter(Objects::nonNull) + .map(p -> new Tuple2<>(pidToComparableString(p), a))) + .collect(Collectors.toMap(Tuple2::_1, Tuple2::_2, (x1, x2) -> x1)); - // (list of pid that are missing in the other list) - final List> pidToEnrich = enrich - .stream() - .filter(a -> a.getPid() != null && !a.getPid().isEmpty()) - .flatMap( - a -> a - .getPid() - .stream() - .filter(Objects::nonNull) - .filter(p -> !basePidAuthorMap.containsKey(pidToComparableString(p))) - .map(p -> new Tuple2<>(p, a))) - .collect(Collectors.toList()); + // (list of pid that are missing in the other list) + final List> pidToEnrich = enrich + .stream() + .filter(a -> a.getPid() != null && !a.getPid().isEmpty()) + .flatMap( + a -> a + .getPid() + .stream() + .filter(Objects::nonNull) + .filter(p -> !basePidAuthorMap.containsKey(pidToComparableString(p))) + .map(p -> new Tuple2<>(p, a))) + .collect(Collectors.toList()); - pidToEnrich - .forEach( - a -> { - Optional> simAuthor = base - .stream() - .map(ba -> new Tuple2<>(sim(ba, a._2()), ba)) - .max(Comparator.comparing(Tuple2::_1)); + pidToEnrich + .forEach( + a -> { + Optional> simAuthor = base + .stream() + .map(ba -> new Tuple2<>(sim(ba, a._2()), ba)) + .max(Comparator.comparing(Tuple2::_1)); - if (simAuthor.isPresent()) { - double th = threshold; - // increase the threshold if the surname is too short - if (simAuthor.get()._2().getSurname() != null - && simAuthor.get()._2().getSurname().length() <= 3 && threshold > 0.0) - th = 0.99; + if (simAuthor.isPresent()) { + double th = threshold; + // increase the threshold if the surname is too short + if (simAuthor.get()._2().getSurname() != null + && simAuthor.get()._2().getSurname().length() <= 3 && threshold > 0.0) + th = 0.99; - if (simAuthor.get()._1() > th) { - Author r = simAuthor.get()._2(); - if (r.getPid() == null) { - r.setPid(new ArrayList<>()); - } + if (simAuthor.get()._1() > th) { + Author r = simAuthor.get()._2(); + if (r.getPid() == null) { + r.setPid(new ArrayList<>()); + } - // TERRIBLE HACK but for some reason when we create and Array with Arrays.asList, - // it creates of fixed size, and the add method raise UnsupportedOperationException at - // java.util.AbstractList.add - final List tmp = new ArrayList<>(r.getPid()); - tmp.add(a._1()); - r.setPid(tmp); - } - } - }); - } + // TERRIBLE HACK but for some reason when we create and Array with Arrays.asList, + // it creates of fixed size, and the add method raise UnsupportedOperationException at + // java.util.AbstractList.add + final List tmp = new ArrayList<>(r.getPid()); + tmp.add(a._1()); + r.setPid(tmp); + } + } + }); + } - public static String normalizeFullName(final String fullname) { - return nfd(fullname) - .toLowerCase() - // do not compact the regexes in a single expression, would cause StackOverflowError - // in case - // of large input strings - .replaceAll("(\\W)+", " ") - .replaceAll("(\\p{InCombiningDiacriticalMarks})+", " ") - .replaceAll("(\\p{Punct})+", " ") - .replaceAll("(\\d)+", " ") - .replaceAll("(\\n)+", " ") + public static String normalizeFullName(final String fullname) { + return nfd(fullname) + .toLowerCase() + // do not compact the regexes in a single expression, would cause StackOverflowError + // in case + // of large input strings + .replaceAll("(\\W)+", " ") + .replaceAll("(\\p{InCombiningDiacriticalMarks})+", " ") + .replaceAll("(\\p{Punct})+", " ") + .replaceAll("(\\d)+", " ") + .replaceAll("(\\n)+", " ") - .trim(); - } + .trim(); + } + private static String authorFieldToBeCompared(Author author) { + if (StringUtils.isNotBlank(author.getSurname())) { + return author.getSurname(); - private static String authorFieldToBeCompared(Author author) { - if (StringUtils.isNotBlank(author.getSurname())) { - return author.getSurname(); + } + if (StringUtils.isNotBlank(author.getFullname())) { + return author.getFullname(); + } + return null; + } - } - if (StringUtils.isNotBlank(author.getFullname())) { - return author.getFullname(); - } - return null; - } + /** + * This method tries to figure out when two author are the same in the contest + * of ORCID enrichment + * + * @param left Author in the OAF entity + * @param right Author ORCID + * @return based on a heuristic on the names of the authors if they are the same. + */ + public static boolean checkORCIDSimilarity(final Author left, final Author right) { + final Person pl = parse(left); + final Person pr = parse(right); - /** - * This method tries to figure out when two author are the same in the contest - * of ORCID enrichment - * - * @param left Author in the OAF entity - * @param right Author ORCID - * @return based on a heuristic on the names of the authors if they are the same. - */ - public static boolean checkORCIDSimilarity(final Author left, final Author right) { - final Person pl = parse(left); - final Person pr = parse(right); + // If one of them didn't have a surname we verify if they have the fullName not empty + // and verify if the normalized version is equal + if (!(pl.getSurname() != null && pl.getSurname().stream().anyMatch(StringUtils::isNotBlank) && + pr.getSurname() != null && pr.getSurname().stream().anyMatch(StringUtils::isNotBlank))) { - // If one of them didn't have a surname we verify if they have the fullName not empty - // and verify if the normalized version is equal - if (!(pl.getSurname() != null && pl.getSurname().stream().anyMatch(StringUtils::isNotBlank) && - pr.getSurname() != null && pr.getSurname().stream().anyMatch(StringUtils::isNotBlank))) { + if (pl.getFullname() != null && !pl.getFullname().isEmpty() && pr.getFullname() != null + && !pr.getFullname().isEmpty()) { + return pl + .getFullname() + .stream() + .anyMatch( + fl -> pr.getFullname().stream().anyMatch(fr -> normalize(fl).equalsIgnoreCase(normalize(fr)))); + } else { + return false; + } + } + // The Authors have one surname in common + if (pl.getSurname().stream().anyMatch(sl -> pr.getSurname().stream().anyMatch(sr -> sr.equalsIgnoreCase(sl)))) { - if (pl.getFullname() != null && !pl.getFullname().isEmpty() && pr.getFullname() != null - && !pr.getFullname().isEmpty()) { - return pl - .getFullname() - .stream() - .anyMatch( - fl -> pr.getFullname().stream().anyMatch(fr -> normalize(fl).equalsIgnoreCase(normalize(fr)))); - } else { - return false; - } - } - // The Authors have one surname in common - if (pl.getSurname().stream().anyMatch(sl -> pr.getSurname().stream().anyMatch(sr -> sr.equalsIgnoreCase(sl)))) { + // If one of them has only a surname and is the same we can say that they are the same author + if ((pl.getName() == null || pl.getName().stream().allMatch(StringUtils::isBlank)) || + (pr.getName() == null || pr.getName().stream().allMatch(StringUtils::isBlank))) + return true; + // The authors have the same initials of Name in common + if (pl + .getName() + .stream() + .anyMatch( + nl -> pr + .getName() + .stream() + .anyMatch(nr -> nr.equalsIgnoreCase(nl)))) + return true; + } - // If one of them has only a surname and is the same we can say that they are the same author - if ((pl.getName() == null || pl.getName().stream().allMatch(StringUtils::isBlank)) || - (pr.getName() == null || pr.getName().stream().allMatch(StringUtils::isBlank))) - return true; - // The authors have the same initials of Name in common - if (pl - .getName() - .stream() - .anyMatch( - nl -> pr - .getName() - .stream() - .anyMatch(nr -> nr.equalsIgnoreCase(nl)))) - return true; - } + // Sometimes we noticed that publication have author wrote in inverse order Surname, Name + // We verify if we have an exact match between name and surname + if (pl.getSurname().stream().anyMatch(sl -> pr.getName().stream().anyMatch(nr -> nr.equalsIgnoreCase(sl))) && + pl.getName().stream().anyMatch(nl -> pr.getSurname().stream().anyMatch(sr -> sr.equalsIgnoreCase(nl)))) + return true; + else + return false; + } + // - // Sometimes we noticed that publication have author wrote in inverse order Surname, Name - // We verify if we have an exact match between name and surname - if (pl.getSurname().stream().anyMatch(sl -> pr.getName().stream().anyMatch(nr -> nr.equalsIgnoreCase(sl))) && - pl.getName().stream().anyMatch(nl -> pr.getSurname().stream().anyMatch(sr -> sr.equalsIgnoreCase(nl)))) - return true; - else - return false; - } - // + /** + * Method to enrich ORCID information in one list of authors based on another list + * + * @param baseAuthor the Author List in the OAF Entity + * @param orcidAuthor The list of ORCID Author intersected + * @return The Author List of the OAF Entity enriched with the orcid Author + */ + public static List enrichOrcid(List baseAuthor, List orcidAuthor) { - /** - * Method to enrich ORCID information in one list of authors based on another list - * - * @param baseAuthor the Author List in the OAF Entity - * @param orcidAuthor The list of ORCID Author intersected - * @return The Author List of the OAF Entity enriched with the orcid Author - */ - public static List enrichOrcid(List baseAuthor, List orcidAuthor) { + if (baseAuthor == null || baseAuthor.isEmpty()) + return orcidAuthor; - if (baseAuthor == null || baseAuthor.isEmpty()) - return orcidAuthor; + if (orcidAuthor == null || orcidAuthor.isEmpty()) + return baseAuthor; - if (orcidAuthor == null || orcidAuthor.isEmpty()) - return baseAuthor; + if (baseAuthor.size() == 1 && orcidAuthor.size() > 10) + return baseAuthor; - if (baseAuthor.size() == 1 && orcidAuthor.size() > 10) - return baseAuthor; + final List oAuthor = new ArrayList<>(); + oAuthor.addAll(orcidAuthor); - final List oAuthor = new ArrayList<>(); - oAuthor.addAll(orcidAuthor); + baseAuthor.forEach(ba -> { + Optional aMatch = oAuthor.stream().filter(oa -> checkORCIDSimilarity(ba, oa)).findFirst(); + if (aMatch.isPresent()) { + final Author sameAuthor = aMatch.get(); + addPid(ba, sameAuthor.getPid()); + oAuthor.remove(sameAuthor); + } + }); + return baseAuthor; + } - baseAuthor.forEach(ba -> { - Optional aMatch = oAuthor.stream().filter(oa -> checkORCIDSimilarity(ba, oa)).findFirst(); - if (aMatch.isPresent()) { - final Author sameAuthor = aMatch.get(); - addPid(ba, sameAuthor.getPid()); - oAuthor.remove(sameAuthor); - } - }); - return baseAuthor; - } + private static void addPid(final Author a, final List pids) { - private static void addPid(final Author a, final List pids) { + if (a.getPid() == null) { + a.setPid(new ArrayList<>()); + } - if (a.getPid() == null) { - a.setPid(new ArrayList<>()); - } + a.getPid().addAll(pids); - a.getPid().addAll(pids); + } - } + public static String pidToComparableString(StructuredProperty pid) { + final String classid = pid.getQualifier().getClassid() != null ? pid.getQualifier().getClassid().toLowerCase() + : ""; + return (pid.getQualifier() != null ? classid : "") + + (pid.getValue() != null ? pid.getValue().toLowerCase() : ""); + } - public static String pidToComparableString(StructuredProperty pid) { - final String classid = pid.getQualifier().getClassid() != null ? pid.getQualifier().getClassid().toLowerCase() - : ""; - return (pid.getQualifier() != null ? classid : "") - + (pid.getValue() != null ? pid.getValue().toLowerCase() : ""); - } + public static int countAuthorsPids(List authors) { + if (authors == null) + return 0; - public static int countAuthorsPids(List authors) { - if (authors == null) - return 0; + return (int) authors.stream().filter(AuthorMerger::hasPid).count(); + } - return (int) authors.stream().filter(AuthorMerger::hasPid).count(); - } + private static int authorsSize(List authors) { + if (authors == null) + return 0; + return authors.size(); + } - private static int authorsSize(List authors) { - if (authors == null) - return 0; - return authors.size(); - } + private static Double sim(Author a, Author b) { - private static Double sim(Author a, Author b) { + final Person pa = parse(a); + final Person pb = parse(b); - final Person pa = parse(a); - final Person pb = parse(b); + // if both are accurate (e.g. they have name and surname) + if (pa.isAccurate() & pb.isAccurate()) { + return new JaroWinkler().score(normalize(pa.getSurnameString()), normalize(pb.getSurnameString())) * 0.5 + + new JaroWinkler().score(normalize(pa.getNameString()), normalize(pb.getNameString())) * 0.5; + } else { + return new JaroWinkler() + .score(normalize(pa.getNormalisedFullname()), normalize(pb.getNormalisedFullname())); + } + } - // if both are accurate (e.g. they have name and surname) - if (pa.isAccurate() & pb.isAccurate()) { - return new JaroWinkler().score(normalize(pa.getSurnameString()), normalize(pb.getSurnameString())) * 0.5 - + new JaroWinkler().score(normalize(pa.getNameString()), normalize(pb.getNameString())) * 0.5; - } else { - return new JaroWinkler() - .score(normalize(pa.getNormalisedFullname()), normalize(pb.getNormalisedFullname())); - } - } + private static boolean hasPid(Author a) { + if (a == null || a.getPid() == null || a.getPid().isEmpty()) + return false; + return a.getPid().stream().anyMatch(p -> p != null && StringUtils.isNotBlank(p.getValue())); + } - private static boolean hasPid(Author a) { - if (a == null || a.getPid() == null || a.getPid().isEmpty()) - return false; - return a.getPid().stream().anyMatch(p -> p != null && StringUtils.isNotBlank(p.getValue())); - } + private static Person parse(Author author) { + if (StringUtils.isNotBlank(author.getSurname())) { + return new Person(author.getSurname() + ", " + author.getName(), false); + } else { + if (StringUtils.isNotBlank(author.getFullname())) + return new Person(author.getFullname(), false); + else + return new Person("", false); + } + } - private static Person parse(Author author) { - if (StringUtils.isNotBlank(author.getSurname())) { - return new Person(author.getSurname() + ", " + author.getName(), false); - } else { - if (StringUtils.isNotBlank(author.getFullname())) - return new Person(author.getFullname(), false); - else - return new Person("", false); - } - } + public static String normalize(final String s) { + String[] normalized = nfd(s) + .toLowerCase() + // do not compact the regexes in a single expression, would cause StackOverflowError + // in case + // of large input strings + .replaceAll("(\\W)+", " ") + .replaceAll("(\\p{InCombiningDiacriticalMarks})+", " ") + .replaceAll("(\\p{Punct})+", " ") + .replaceAll("(\\d)+", " ") + .replaceAll("(\\n)+", " ") + .trim() + .split(" "); - public static String normalize(final String s) { - String[] normalized = nfd(s) - .toLowerCase() - // do not compact the regexes in a single expression, would cause StackOverflowError - // in case - // of large input strings - .replaceAll("(\\W)+", " ") - .replaceAll("(\\p{InCombiningDiacriticalMarks})+", " ") - .replaceAll("(\\p{Punct})+", " ") - .replaceAll("(\\d)+", " ") - .replaceAll("(\\n)+", " ") - .trim() - .split(" "); + Arrays.sort(normalized); - Arrays.sort(normalized); + return String.join(" ", normalized); + } - return String.join(" ", normalized); - } - - private static String nfd(final String s) { - return Normalizer.normalize(s, Normalizer.Form.NFD); - } + private static String nfd(final String s) { + return Normalizer.normalize(s, Normalizer.Form.NFD); + } } From 511a98dd800d2697134b0c01f36f7b09f2caa8f1 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Fri, 1 Dec 2023 16:21:53 +0100 Subject: [PATCH 379/449] fixed doiboost process workflow, removed references to the ProcessORCID step --- .../eu/dnetlib/dhp/doiboost/process/oozie_app/workflow.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/process/oozie_app/workflow.xml b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/process/oozie_app/workflow.xml index 8f28d706d..84cbc5232 100644 --- a/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/process/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/process/oozie_app/workflow.xml @@ -84,7 +84,6 @@ ${wf:conf('resumeFrom') eq 'Skip'} ${wf:conf('resumeFrom') eq 'PreprocessMag'} ${wf:conf('resumeFrom') eq 'PreprocessUW'} - ${wf:conf('resumeFrom') eq 'ProcessORCID'} ${wf:conf('resumeFrom') eq 'CreateDOIBoost'} ${wf:conf('resumeFrom') eq 'GenerateActionSet'} From 3caf6ff27ef91aa6b684fdb91ea4d7e1274f9b3d Mon Sep 17 00:00:00 2001 From: Sandro La Bruzzo Date: Fri, 1 Dec 2023 16:33:56 +0100 Subject: [PATCH 380/449] Extracted the correct original type to pass to instanceTypeMapping in Crossref Mapping --- .../scala/eu/dnetlib/doiboost/crossref/Crossref2Oaf.scala | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/dhp-workflows/dhp-doiboost/src/main/scala/eu/dnetlib/doiboost/crossref/Crossref2Oaf.scala b/dhp-workflows/dhp-doiboost/src/main/scala/eu/dnetlib/doiboost/crossref/Crossref2Oaf.scala index 53576fc10..91118c636 100644 --- a/dhp-workflows/dhp-doiboost/src/main/scala/eu/dnetlib/doiboost/crossref/Crossref2Oaf.scala +++ b/dhp-workflows/dhp-doiboost/src/main/scala/eu/dnetlib/doiboost/crossref/Crossref2Oaf.scala @@ -372,7 +372,9 @@ case object Crossref2Oaf { objectType, mappingCrossrefSubType.getOrElse(objectSubType, "0038 Other literature type") ) - mappingResult(result, json, cOBJCategory, objectSubType) + + val originalType = if (mappingCrossrefSubType.contains(objectType)) objectType else objectSubType + mappingResult(result, json, cOBJCategory, originalType) if (result == null || result.getId == null) return List() From 178a14c491ea24847d02e3eb2295a08198b37d9b Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Sun, 3 Dec 2023 13:31:58 +0100 Subject: [PATCH 381/449] code formatting --- .../main/scala/eu/dnetlib/doiboost/crossref/Crossref2Oaf.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dhp-workflows/dhp-doiboost/src/main/scala/eu/dnetlib/doiboost/crossref/Crossref2Oaf.scala b/dhp-workflows/dhp-doiboost/src/main/scala/eu/dnetlib/doiboost/crossref/Crossref2Oaf.scala index 91118c636..ee857e2c4 100644 --- a/dhp-workflows/dhp-doiboost/src/main/scala/eu/dnetlib/doiboost/crossref/Crossref2Oaf.scala +++ b/dhp-workflows/dhp-doiboost/src/main/scala/eu/dnetlib/doiboost/crossref/Crossref2Oaf.scala @@ -373,7 +373,7 @@ case object Crossref2Oaf { mappingCrossrefSubType.getOrElse(objectSubType, "0038 Other literature type") ) - val originalType = if (mappingCrossrefSubType.contains(objectType)) objectType else objectSubType + val originalType = if (mappingCrossrefSubType.contains(objectType)) objectType else objectSubType mappingResult(result, json, cOBJCategory, originalType) if (result == null || result.getId == null) return List() From 2a233a89aa49c2ec59c95ba86d256ab46eb3db9b Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Sun, 3 Dec 2023 13:32:52 +0100 Subject: [PATCH 382/449] [graph grouping] added isLookupUrl to the workflow definition, passed to the grouping spark aciton --- .../eu/dnetlib/dhp/oa/graph/group/oozie_app/workflow.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/group/oozie_app/workflow.xml b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/group/oozie_app/workflow.xml index 190788c9d..2f44bea9d 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/group/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/group/oozie_app/workflow.xml @@ -12,6 +12,10 @@ graphOutputPath path of the output graph + + isLookupUrl + the URL address of the lookUp service + filterInvisible whether filter out invisible entities after merge @@ -98,6 +102,7 @@ --graphInputPath${graphBasePath} --checkpointPath${workingPath}/grouped_entities --outputPath${graphOutputPath} + --isLookupUrl${isLookupUrl} --filterInvisible${filterInvisible} From e6086efc53804cf3e29d29fd6b2f1b8f958f9130 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Sun, 3 Dec 2023 13:33:20 +0100 Subject: [PATCH 383/449] avoid NPEs in Vocabulary.getTermBySynonym --- .../java/eu/dnetlib/dhp/common/vocabulary/Vocabulary.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/common/vocabulary/Vocabulary.java b/dhp-common/src/main/java/eu/dnetlib/dhp/common/vocabulary/Vocabulary.java index 2ab23bda6..94e7f5221 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/common/vocabulary/Vocabulary.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/common/vocabulary/Vocabulary.java @@ -63,7 +63,10 @@ public class Vocabulary implements Serializable { } public VocabularyTerm getTermBySynonym(final String syn) { - return getTerm(synonyms.get(syn.toLowerCase())); + return Optional + .ofNullable(syn) + .map(s -> getTerm(synonyms.get(s.toLowerCase()))) + .orElse(null); } public Qualifier getTermAsQualifier(final String termId) { From 74b185d07b3655f6e964ce5ae0610695d1685903 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Sun, 3 Dec 2023 16:18:20 +0100 Subject: [PATCH 384/449] avoid NPEs --- .../dhp/schema/oaf/utils/GraphCleaningFunctions.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java index 7cb32eab5..c65f36de9 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java @@ -943,17 +943,17 @@ public class GraphCleaningFunctions extends CleaningFunctions { private static Qualifier getMetaResourceType(final List instances, final VocabularyGroup vocs) { if (vocs.vocabularyExists(OPENAIRE_META_RESOURCE_TYPE)) { - Optional instanceTypeMapping = instances + Optional itm = instances .stream() .flatMap( i -> Optional.ofNullable(i.getInstanceTypeMapping()).map(Collection::stream).orElse(Stream.empty())) .filter(t -> OPENAIRE_COAR_RESOURCE_TYPES_3_1.equals(t.getVocabularyName())) .findFirst(); - if (!instanceTypeMapping.isPresent()) { + if (!itm.isPresent() || Objects.isNull(itm.get().getTypeCode())) { return null; } else { - final String typeCode = instanceTypeMapping.get().getTypeCode(); + final String typeCode = itm.get().getTypeCode(); return Optional .ofNullable(vocs.lookupTermBySynonym(OPENAIRE_META_RESOURCE_TYPE, typeCode)) .orElseThrow( From 7c3041b276c2c27f235f68e3ebdc4ae3b862dd5b Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Sun, 3 Dec 2023 16:49:49 +0100 Subject: [PATCH 385/449] avoid NPEs --- .../oaf/utils/GraphCleaningFunctions.java | 50 +++++++++++-------- 1 file changed, 29 insertions(+), 21 deletions(-) diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java index c65f36de9..c25d67f25 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java @@ -941,28 +941,36 @@ public class GraphCleaningFunctions extends CleaningFunctions { } private static Qualifier getMetaResourceType(final List instances, final VocabularyGroup vocs) { + return Optional + .ofNullable(instances) + .map(ii -> { + if (vocs.vocabularyExists(OPENAIRE_META_RESOURCE_TYPE)) { + Optional itm = ii + .stream() + .filter(Objects::nonNull) + .flatMap( + i -> Optional + .ofNullable(i.getInstanceTypeMapping()) + .map(Collection::stream) + .orElse(Stream.empty())) + .filter(t -> OPENAIRE_COAR_RESOURCE_TYPES_3_1.equals(t.getVocabularyName())) + .findFirst(); - if (vocs.vocabularyExists(OPENAIRE_META_RESOURCE_TYPE)) { - Optional itm = instances - .stream() - .flatMap( - i -> Optional.ofNullable(i.getInstanceTypeMapping()).map(Collection::stream).orElse(Stream.empty())) - .filter(t -> OPENAIRE_COAR_RESOURCE_TYPES_3_1.equals(t.getVocabularyName())) - .findFirst(); - - if (!itm.isPresent() || Objects.isNull(itm.get().getTypeCode())) { - return null; - } else { - final String typeCode = itm.get().getTypeCode(); - return Optional - .ofNullable(vocs.lookupTermBySynonym(OPENAIRE_META_RESOURCE_TYPE, typeCode)) - .orElseThrow( - () -> new IllegalStateException("unable to find a synonym for '" + typeCode + "' in " + - OPENAIRE_META_RESOURCE_TYPE)); - } - } else { - throw new IllegalStateException("vocabulary '" + OPENAIRE_META_RESOURCE_TYPE + "' not available"); - } + if (!itm.isPresent() || Objects.isNull(itm.get().getTypeCode())) { + return null; + } else { + final String typeCode = itm.get().getTypeCode(); + return Optional + .ofNullable(vocs.lookupTermBySynonym(OPENAIRE_META_RESOURCE_TYPE, typeCode)) + .orElseThrow( + () -> new IllegalStateException("unable to find a synonym for '" + typeCode + "' in " + + OPENAIRE_META_RESOURCE_TYPE)); + } + } else { + throw new IllegalStateException("vocabulary '" + OPENAIRE_META_RESOURCE_TYPE + "' not available"); + } + }) + .orElse(null); } } From 3c3bdb83187d572c101447def9e5f75febe8efa0 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Tue, 5 Dec 2023 09:08:48 +0100 Subject: [PATCH 386/449] [bulktagging] fixed workflow parameters --- .../dnetlib/dhp/bulktag/SparkBulkTagJob.java | 2 +- .../dhp/bulktag/input_bulkTag_parameters.json | 5 ----- .../dhp/bulktag/oozie_app/workflow.xml | 21 ++++--------------- 3 files changed, 5 insertions(+), 23 deletions(-) diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/SparkBulkTagJob.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/SparkBulkTagJob.java index f01063955..5d1b2b38d 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/SparkBulkTagJob.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/SparkBulkTagJob.java @@ -135,7 +135,7 @@ public class SparkBulkTagJob { ModelSupport.entityTypes .keySet() .parallelStream() - .filter(e -> ModelSupport.isResult(e)) + .filter(ModelSupport::isResult) .forEach(e -> { removeOutputDir(spark, outputPath + e.name()); ResultTagger resultTagger = new ResultTagger(); diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/input_bulkTag_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/input_bulkTag_parameters.json index d88904cd9..ce1a8ecab 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/input_bulkTag_parameters.json +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/input_bulkTag_parameters.json @@ -1,5 +1,4 @@ [ - { "paramName":"s", "paramLongName":"sourcePath", @@ -12,7 +11,6 @@ "paramDescription": "the json path associated to each selection field", "paramRequired": true }, - { "paramName": "out", "paramLongName": "outputPath", @@ -25,19 +23,16 @@ "paramDescription": "true if the spark session is managed, false otherwise", "paramRequired": false }, - { "paramName": "tg", "paramLongName": "taggingConf", "paramDescription": "this parameter is intended for testing purposes only. It is a possible tagging configuration obtained via the XQUERY. Intended to be removed", "paramRequired": false }, - { "paramName": "bu", "paramLongName": "baseURL", "paramDescription": "this parameter is to specify the api to be queried (beta or production)", "paramRequired": false } - ] \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/oozie_app/workflow.xml index 56eed4703..0d4d1f046 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/oozie_app/workflow.xml @@ -12,21 +12,10 @@ outputPath the output path - - - postgresURL - the url of the postgress server to query + baseURL + the community API base URL - - postgresUser - the username to access the postgres db - - - postgresPassword - the postgres password - - @@ -104,7 +93,7 @@ yarn-cluster cluster - bulkTagging-publication + bulkTagging-result eu.dnetlib.dhp.bulktag.SparkBulkTagJob dhp-enrichment-${projectVersion}.jar @@ -120,14 +109,12 @@ --sourcePath${sourcePath}/ --outputPath${outputPath}/ --pathMap${pathMap} - --production${production} + --baseURL${baseURL} - - \ No newline at end of file From c5b72531301c4317ebc63261e1148b10c1c6f240 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Tue, 5 Dec 2023 09:13:33 +0100 Subject: [PATCH 387/449] [community_organization propagation] fixed workflow parameters --- .../oozie_app/workflow.xml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/oozie_app/workflow.xml index d5d75fbc1..dfa762ac6 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/oozie_app/workflow.xml @@ -4,11 +4,14 @@ sourcePath the source path - outputPath the output path + + baseURL + the community API base URL + @@ -99,13 +102,12 @@ --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} --sourcePath${sourcePath}/relation --outputPath${workingDir}/preparedInfo/resultCommunityList --hive_metastore_uris${hive_metastore_uris} - --production${production} + --baseURL${baseURL} @@ -115,7 +117,7 @@ yarn cluster - community2resultfromorganization-Publication + community2resultfromorganization eu.dnetlib.dhp.resulttocommunityfromorganization.SparkResultToCommunityFromOrganizationJob dhp-enrichment-${projectVersion}.jar From 321922772b71c70e074eb97efb46d920f1031752 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Tue, 5 Dec 2023 16:37:04 +0100 Subject: [PATCH 388/449] added serialization for the new fields imported for the Irish tender --- .../oa/provision/utils/XmlRecordFactory.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/utils/XmlRecordFactory.java b/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/utils/XmlRecordFactory.java index 3b810ba8c..4d9d9c341 100644 --- a/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/utils/XmlRecordFactory.java +++ b/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/utils/XmlRecordFactory.java @@ -434,6 +434,24 @@ public class XmlRecordFactory implements Serializable { XmlSerializationUtils .asXmlElement("processingchargecurrency", r.getProcessingchargecurrency().getValue())); } + if (r.getIsGreen() != null) { + metadata + .add(XmlSerializationUtils.asXmlElement("isgreen", Boolean.toString(r.getIsGreen()))); + } + if (r.getOpenAccessColor() != null) { + metadata + .add(XmlSerializationUtils.asXmlElement("openaccesscolor", r.getOpenAccessColor().toString())); + } + if (r.getIsInDiamondJournal() != null) { + metadata + .add( + XmlSerializationUtils + .asXmlElement("isindiamondjournal", Boolean.toString(r.getIsInDiamondJournal()))); + } + if (r.getPubliclyFunded() != null) { + metadata + .add(XmlSerializationUtils.asXmlElement("publiclyfunded", Boolean.toString(r.getPubliclyFunded()))); + } } switch (type) { From 431c6bb08a2713df4cb1dbe0abeb60011c409349 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Wed, 6 Dec 2023 11:06:46 +0100 Subject: [PATCH 389/449] [dedup] added isLookupUrl to the graph consistency workflow definition, required now by the entity grouping phase --- .../dnetlib/dhp/oa/dedup/consistency/oozie_app/workflow.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/consistency/oozie_app/workflow.xml b/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/consistency/oozie_app/workflow.xml index 5e2fc0a01..306229e79 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/consistency/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/consistency/oozie_app/workflow.xml @@ -16,6 +16,10 @@ filterInvisible whether filter out invisible entities after merge + + isLookupUrl + the URL address of the lookUp service + sparkDriverMemory heap memory for driver process @@ -128,6 +132,7 @@ --graphInputPath${graphBasePath} --checkpointPath${workingPath}/grouped_entities --outputPath${graphOutputPath} + --isLookupUrl${isLookupUrl} --filterInvisible${filterInvisible} From 259c69e446c855a3f3da8cfec532f2ac0e2ff87e Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Wed, 6 Dec 2023 19:41:53 +0100 Subject: [PATCH 390/449] [orcid enrichment] fixed workflow definition --- .../dhp/enrich/orcid/oozie_app/workflow.xml | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/enrich/orcid/oozie_app/workflow.xml b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/enrich/orcid/oozie_app/workflow.xml index a4330b966..ce117b5e9 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/enrich/orcid/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/enrich/orcid/oozie_app/workflow.xml @@ -38,16 +38,12 @@ --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --orcidPath - ${orcidPath} - --targetPath - ${targetPath} - --graphPath - ${graphPath} - --master - yarn + --orcidPath${orcidPath} + --targetPath${targetPath} + --graphPath${graphPath} + --masteryarn - + From 616622d2bb90f4a5e43a9da2dc864ef03dab1f00 Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Thu, 7 Dec 2023 09:59:52 +0100 Subject: [PATCH 391/449] first version of the workflow single step --- .../main/java/eu/dnetlib/dhp/api/Utils.java | 5 + .../dnetlib/dhp/bulktag/SparkBulkTagJob.java | 8 +- .../PrepareDatasourceCountryAssociation.java | 2 +- .../SparkCountryPropagationJob.java | 6 + ...kResultToCommunityFromOrganizationJob.java | 6 + .../PrepareResultCommunitySet.java | 2 +- .../SparkResultToCommunityFromProject.java | 6 + .../PrepareResultCommunitySetStep1.java | 18 +- ...parkResultToCommunityThroughSemRelJob.java | 6 + ...t_preparecommunitytoresult_parameters.json | 4 +- .../oozie_app/workflow.xml | 6 +- .../dhp/wf/main/oozie_app/config-default.xml | 30 ++ .../dnetlib/dhp/wf/main/oozie_app/import.txt | 10 + .../dhp/wf/main/oozie_app/workflow.xml | 324 +++++++++++++++ .../bulktag/oozie_app/config-default.xml | 54 +++ .../bulktag/oozie_app/workflow.xml | 66 ++++ .../oozie_app/config-default.xml | 58 +++ .../countrypropagation/oozie_app/workflow.xml | 316 +++++++++++++++ .../input_preparation_parameter.json | 50 +++ .../input_propagation_parameter.json | 62 +++ .../oozie_app/config-default.xml | 58 +++ .../oozie_app/workflow.xml | 93 +++++ .../oozie_app/config-default.xml | 58 +++ .../oozie_app/workflow.xml | 369 ++++++++++++++++++ .../oozie_app/config-default.xml | 63 +++ .../projecttoresult/oozie_app/workflow.xml | 94 +++++ .../oozie_app/config-default.xml | 58 +++ .../oozie_app/workflow.xml | 88 +++++ .../input_communitytoresult_parameters.json | 28 ++ ...t_preparecommunitytoresult_parameters.json | 28 ++ .../oozie_app/config-default.xml | 58 +++ .../oozie_app/workflow.xml | 90 +++++ .../oozie_app/config-default.xml | 58 +++ .../oozie_app/workflow.xml | 305 +++++++++++++++ .../oozie_app/config-default.xml | 58 +++ .../oozie_app/workflow.xml | 182 +++++++++ .../oozie_app/config-default.xml | 58 +++ .../oozie_app/workflow.xml | 97 +++++ 38 files changed, 2863 insertions(+), 19 deletions(-) create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/oozie_app/config-default.xml create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/oozie_app/import.txt create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/oozie_app/workflow.xml create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/bulktag/oozie_app/config-default.xml create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/bulktag/oozie_app/workflow.xml create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/countrypropagation/oozie_app/config-default.xml create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/countrypropagation/oozie_app/workflow.xml create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/entitytoorganizationfromsemrel/input_preparation_parameter.json create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/entitytoorganizationfromsemrel/input_propagation_parameter.json create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/entitytoorganizationfromsemrel/oozie_app/config-default.xml create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/entitytoorganizationfromsemrel/oozie_app/workflow.xml create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/orcidtoresultfromsemrel/oozie_app/config-default.xml create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/orcidtoresultfromsemrel/oozie_app/workflow.xml create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/projecttoresult/oozie_app/config-default.xml create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/projecttoresult/oozie_app/workflow.xml create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromorganization/oozie_app/config-default.xml create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromorganization/oozie_app/workflow.xml create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromproject/input_communitytoresult_parameters.json create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromproject/input_preparecommunitytoresult_parameters.json create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromproject/oozie_app/config-default.xml create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromproject/oozie_app/workflow.xml create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromsemrel/oozie_app/config-default.xml create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromsemrel/oozie_app/workflow.xml create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttoorganizationfrominstrepo/oozie_app/config-default.xml create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttoorganizationfrominstrepo/oozie_app/workflow.xml create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttoorganizationfromsemrel/oozie_app/config-default.xml create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttoorganizationfromsemrel/oozie_app/workflow.xml diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/Utils.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/Utils.java index d121b8b7e..bb30f55d6 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/Utils.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/Utils.java @@ -167,4 +167,9 @@ public class Utils implements Serializable { }); return projectMap; } + + public static List getCommunityIdList(String baseURL) throws IOException { + return getValidCommunities(baseURL).stream() + .map(community -> community.getId()).collect(Collectors.toList()); + } } diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/SparkBulkTagJob.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/SparkBulkTagJob.java index 5d1b2b38d..5745515ba 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/SparkBulkTagJob.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/SparkBulkTagJob.java @@ -151,7 +151,13 @@ public class SparkBulkTagJob { .write() .mode(SaveMode.Overwrite) .option("compression", "gzip") - .json(outputPath + e.name()); + .json(outputPath + e.name());//writing the tagging in the working dir for entity + + readPath(spark, outputPath + e.name(), resultClazz) //copy the tagging in the actual result output path + .write() + .mode(SaveMode.Overwrite) + .option("compression","gzip") + .json(inputPath + e.name()); }); } diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/countrypropagation/PrepareDatasourceCountryAssociation.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/countrypropagation/PrepareDatasourceCountryAssociation.java index b9f3bff52..b1720d19d 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/countrypropagation/PrepareDatasourceCountryAssociation.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/countrypropagation/PrepareDatasourceCountryAssociation.java @@ -66,7 +66,7 @@ public class PrepareDatasourceCountryAssociation { conf, isSparkSessionManaged, spark -> { - removeOutputDir(spark, outputPath); + //removeOutputDir(spark, outputPath); prepareDatasourceCountryAssociation( spark, Arrays.asList(parser.get("whitelist").split(";")), diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/countrypropagation/SparkCountryPropagationJob.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/countrypropagation/SparkCountryPropagationJob.java index d9f6433a0..2b0dd7628 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/countrypropagation/SparkCountryPropagationJob.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/countrypropagation/SparkCountryPropagationJob.java @@ -97,6 +97,12 @@ public class SparkCountryPropagationJob { .mode(SaveMode.Overwrite) .json(outputPath); + readPath(spark, outputPath, resultClazz) + .write() + .mode(SaveMode.Overwrite) + .option("compression","gzip") + .json(sourcePath); + } private static MapFunction, R> getCountryMergeFn() { diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromorganization/SparkResultToCommunityFromOrganizationJob.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromorganization/SparkResultToCommunityFromOrganizationJob.java index df8ca3805..9152b1f5a 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromorganization/SparkResultToCommunityFromOrganizationJob.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromorganization/SparkResultToCommunityFromOrganizationJob.java @@ -92,6 +92,12 @@ public class SparkResultToCommunityFromOrganizationJob { .mode(SaveMode.Overwrite) .option("compression", "gzip") .json(outputPath + e.name()); + + readPath(spark, outputPath + e.name(), resultClazz) + .write() + .mode(SaveMode.Overwrite) + .option("compression","gzip") + .json(inputPath + e.name()); } }); diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/PrepareResultCommunitySet.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/PrepareResultCommunitySet.java index 7fed2606b..467e11a96 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/PrepareResultCommunitySet.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/PrepareResultCommunitySet.java @@ -53,7 +53,7 @@ public class PrepareResultCommunitySet { log.info("outputPath: {}", outputPath); final String baseURL = parser.get("baseURL"); - log.info("baseUEL: {}", baseURL); + log.info("baseURL: {}", baseURL); final CommunityEntityMap projectsMap = Utils.getCommunityProjects(baseURL); diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/SparkResultToCommunityFromProject.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/SparkResultToCommunityFromProject.java index 6e298cf94..547891584 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/SparkResultToCommunityFromProject.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/SparkResultToCommunityFromProject.java @@ -102,6 +102,12 @@ public class SparkResultToCommunityFromProject implements Serializable { .mode(SaveMode.Overwrite) .option("compression", "gzip") .json(outputPath + e.name()); + + readPath(spark, outputPath + e.name(), resultClazz) + .write() + .mode(SaveMode.Overwrite) + .option("compression","gzip") + .json(inputPath + e.name()); } }); diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromsemrel/PrepareResultCommunitySetStep1.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromsemrel/PrepareResultCommunitySetStep1.java index 0c836a3ba..73c4e2d7c 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromsemrel/PrepareResultCommunitySetStep1.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromsemrel/PrepareResultCommunitySetStep1.java @@ -4,9 +4,11 @@ package eu.dnetlib.dhp.resulttocommunityfromsemrel; import static eu.dnetlib.dhp.PropagationConstant.*; import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkHiveSession; +import java.io.IOException; import java.util.Arrays; import java.util.List; +import eu.dnetlib.dhp.api.Utils; import org.apache.commons.io.IOUtils; import org.apache.spark.SparkConf; import org.apache.spark.sql.*; @@ -26,11 +28,6 @@ import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpService; public class PrepareResultCommunitySetStep1 { private static final Logger log = LoggerFactory.getLogger(PrepareResultCommunitySetStep1.class); - private static final String COMMUNITY_LIST_XQUERY = "for $x in collection('/db/DRIVER/ContextDSResources/ContextDSResourceType')" - + " where $x//CONFIGURATION/context[./@type='community' or ./@type='ri']" - + " and $x//CONFIGURATION/context/param[./@name='status']/text() != 'hidden'" - + " return $x//CONFIGURATION/context/@id/string()"; - /** * associates to each result the set of community contexts they are associated to; associates to each target of a * relation with allowed semantics the set of community context it could possibly inherit from the source of the @@ -88,10 +85,10 @@ public class PrepareResultCommunitySetStep1 { final List allowedsemrel = Arrays.asList(parser.get("allowedsemrels").split(";")); log.info("allowedSemRel: {}", new Gson().toJson(allowedsemrel)); - final String isLookupUrl = parser.get("isLookUpUrl"); - log.info("isLookupUrl: {}", isLookupUrl); + final String baseURL = parser.get("baseURL"); + log.info("baseURL: {}", baseURL); - final List communityIdList = getCommunityList(isLookupUrl); + final List communityIdList = getCommunityList(baseURL); log.info("communityIdList: {}", new Gson().toJson(communityIdList)); final String resultType = resultClassName.substring(resultClassName.lastIndexOf(".") + 1).toLowerCase(); @@ -159,9 +156,8 @@ public class PrepareResultCommunitySetStep1 { .json(outputResultPath); } - public static List getCommunityList(final String isLookupUrl) throws ISLookUpException { - ISLookUpService isLookUp = ISLookupClientFactory.getLookUpService(isLookupUrl); - return isLookUp.quickSearchProfile(COMMUNITY_LIST_XQUERY); + public static List getCommunityList(final String baseURL) throws IOException { + return Utils.getCommunityIdList(baseURL); } } diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromsemrel/SparkResultToCommunityThroughSemRelJob.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromsemrel/SparkResultToCommunityThroughSemRelJob.java index f31a26230..bb7ff1fb7 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromsemrel/SparkResultToCommunityThroughSemRelJob.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromsemrel/SparkResultToCommunityThroughSemRelJob.java @@ -100,6 +100,12 @@ public class SparkResultToCommunityThroughSemRelJob { .mode(SaveMode.Overwrite) .option("compression", "gzip") .json(outputPath); + + readPath(spark, outputPath, resultClazz) + .write() + .mode(SaveMode.Overwrite) + .option("compression","gzip") + .json(inputPath); } private static MapFunction, R> contextUpdaterFn() { diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromsemrel/input_preparecommunitytoresult_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromsemrel/input_preparecommunitytoresult_parameters.json index 8c99da673..271db10bb 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromsemrel/input_preparecommunitytoresult_parameters.json +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromsemrel/input_preparecommunitytoresult_parameters.json @@ -1,7 +1,7 @@ [ { - "paramName":"is", - "paramLongName":"isLookUpUrl", + "paramName":"bu", + "paramLongName":"baseURL", "paramDescription": "URL of the isLookUp Service", "paramRequired": true }, diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromsemrel/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromsemrel/oozie_app/workflow.xml index 81b51443c..916eb8b7c 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromsemrel/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromsemrel/oozie_app/workflow.xml @@ -9,8 +9,8 @@ the semantic relationships allowed for propagation - isLookUpUrl - the isLookup service endpoint + baseURL + the baseurl for the comminity APIs outputPath @@ -116,7 +116,7 @@ --resultTableNameeu.dnetlib.dhp.schema.oaf.Publication --outputPath${workingDir}/preparedInfo/targetCommunityAssoc --allowedsemrels${allowedsemrels} - --isLookUpUrl${isLookUpUrl} + --baseURL${baseURL} diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/oozie_app/config-default.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/oozie_app/config-default.xml new file mode 100644 index 000000000..d262cb6e0 --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/oozie_app/config-default.xml @@ -0,0 +1,30 @@ + + + jobTracker + yarnRM + + + nameNode + hdfs://nameservice1 + + + oozie.use.system.libpath + true + + + hiveMetastoreUris + thrift://iis-cdh5-test-m3.ocean.icm.edu.pl:9083 + + + hiveJdbcUrl + jdbc:hive2://iis-cdh5-test-m3.ocean.icm.edu.pl:10000 + + + hiveDbName + openaire + + + oozie.launcher.mapreduce.user.classpath.first + true + + diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/oozie_app/import.txt b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/oozie_app/import.txt new file mode 100644 index 000000000..b20259414 --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/oozie_app/import.txt @@ -0,0 +1,10 @@ +## This is a classpath-based import file (this header is required) +orcid_propagation classpath eu/dnetlib/dhp/wf/subworkflows/orcidtoresultfromsemrel/oozie_app +bulk_tagging classpath eu/dnetlib/dhp/wf/subworkflows/bulktag/oozie_app +affiliation_inst_repo classpath eu/dnetlib/dhp/wf/subworkflows/resulttoorganizationfrominstrepo/oozie_app +entity_semantic_relation classpath eu/dnetlib/dhp/wf/subworkflows/entitytoorganizationfromsemrel/oozie_app +community_organization classpath eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromorganization/oozie_app +result_project classpath eu/dnetlib/dhp/wf/subworkflows/projecttoresult/oozie_app +community_project classpath eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromproject/oozie_app +community_sem_rel classpath eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromsemrel/oozie_app +country_propagation classpath eu/dnetlib/dhp/wf/subworkflows/countrypropagation/oozie_app \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/oozie_app/workflow.xml new file mode 100644 index 000000000..1e6736bf4 --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/oozie_app/workflow.xml @@ -0,0 +1,324 @@ + + + + + sourcePath + the source path + + + allowedsemrelsorcidprop + the semantic relationships allowed for propagation + + + allowedsemrelsresultproject + the allowed semantics + + + allowedsemrelscommunitysemrel + the semantic relationships allowed for propagation + + + datasourceWhitelistForCountryPropagation + the white list + + + allowedtypes + the allowed types + + + outputPath + the output path + + + organizationtoresultcommunitymap + organization community map + + + pathMap + the json path associated to each selection field + + + blacklist + list of datasources in blacklist for the affiliation from instrepo propagation + + + + hiveDbName + the target hive database name + + + hiveJdbcUrl + hive server jdbc url + + + hiveMetastoreUris + hive server metastore URIs + + + sparkDriverMemory + memory for driver process + + + sparkExecutorMemory + memory for individual executor + + + sparkExecutorCores + number of cores used by single executor + + + oozieActionShareLibForSpark2 + oozie action sharelib for spark 2.* + + + spark2ExtraListeners + com.cloudera.spark.lineage.NavigatorAppListener + spark 2.* extra listeners classname + + + spark2SqlQueryExecutionListeners + com.cloudera.spark.lineage.NavigatorQueryListener + spark 2.* sql query execution listeners classname + + + spark2YarnHistoryServerAddress + spark 2.* yarn history server address + + + spark2EventLogDir + spark 2.* event log dir location + + + + + ${jobTracker} + ${nameNode} + + + mapreduce.job.queuename + ${queueName} + + + oozie.launcher.mapred.job.queue.name + ${oozieLauncherQueueName} + + + oozie.action.sharelib.for.spark + ${oozieActionShareLibForSpark2} + + + + + + + + + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + + + + ${wf:conf('resumeFrom') eq 'BulkTagging'} + ${wf:conf('resumeFrom') eq 'AffiliationInstitutionalRepository'} + ${wf:conf('resumeFrom') eq 'AffiliationSemanticRelation'} + ${wf:conf('resumeFrom') eq 'CommunityOrganization'} + ${wf:conf('resumeFrom') eq 'ResultProject'} + ${wf:conf('resumeFrom') eq 'CommunityProject'} + ${wf:conf('resumeFrom') eq 'CommunitySemanticRelation'} + ${wf:conf('resumeFrom') eq 'CountryPropagation'} + + + + + + + + ${wf:appPath()}/orcid_propagation + + + + + sourcePath + ${sourcePath} + + + allowedsemrels + ${allowedsemrelsorcidprop} + + + outputPath + ${outputPath} + + + + + + + + + + ${wf:appPath()}/bulk_tagging + + + + + sourcePath + ${outputPath} + + + baseURL + ${baseURL} + + + pathMap + ${pathMap} + + + + + + + + + + ${wf:appPath()}/affiliation_inst_repo + + + + + sourcePath + ${outputPath} + + + blacklist + ${blacklist} + + + + + + + + + + ${wf:appPath()}/affiliation_semantic_relation + + + + + sourcePath + ${outputPath} + + + + + + + + + + ${wf:appPath()}/community_organization + + + + + sourcePath + ${outputPath} + + + baseURL + ${baseURL} + + + + + + + + + + ${wf:appPath()}/result_project + + + + + sourcePath + ${outputPath} + + + allowedsemrels + ${allowedsemrelsresultproject} + + + + + + + + + + ${wf:appPath()}/community_project + + + + + sourcePath + ${outputPath} + + + + + + + + + + ${wf:appPath()}/community_sem_rel + + + + + sourcePath + ${outputPath} + + + allowedsemrels + ${allowedsemrelscommunitysemrel} + + + baseURL + ${baseURL} + + + + + + + + + + ${wf:appPath()}/country_propagation + + + + + sourcePath + ${outputPath} + + + whitelist + ${datasourceWhitelistForCountryPropagation} + + + allowedtypes + ${allowedtupes} + + + + + + + + + + diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/bulktag/oozie_app/config-default.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/bulktag/oozie_app/config-default.xml new file mode 100644 index 000000000..fe82ae194 --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/bulktag/oozie_app/config-default.xml @@ -0,0 +1,54 @@ + + + jobTracker + yarnRM + + + nameNode + hdfs://nameservice1 + + + oozie.use.system.libpath + true + + + oozie.action.sharelib.for.spark + spark2 + + + hive_metastore_uris + thrift://iis-cdh5-test-m3.ocean.icm.edu.pl:9083 + + + spark2YarnHistoryServerAddress + http://iis-cdh5-test-gw.ocean.icm.edu.pl:18089 + + + spark2ExtraListeners + com.cloudera.spark.lineage.NavigatorAppListener + + + spark2SqlQueryExecutionListeners + com.cloudera.spark.lineage.NavigatorQueryListener + + + sparkExecutorNumber + 4 + + + spark2EventLogDir + /user/spark/spark2ApplicationHistory + + + sparkDriverMemory + 15G + + + sparkExecutorMemory + 6G + + + sparkExecutorCores + 1 + + \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/bulktag/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/bulktag/oozie_app/workflow.xml new file mode 100644 index 000000000..a735e2b0e --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/bulktag/oozie_app/workflow.xml @@ -0,0 +1,66 @@ + + + + sourcePath + the source path + + + pathMap + the json path associated to each selection field + + + baseURL + The URL to access the community APIs + + + + + + ${jobTracker} + ${nameNode} + + + oozie.action.sharelib.for.spark + ${oozieActionShareLibForSpark2} + + + + + + + + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + + + + + yarn-cluster + cluster + bulkTagging-publication + eu.dnetlib.dhp.bulktag.SparkBulkTagJob + dhp-enrichment-${projectVersion}.jar + + --num-executors=${sparkExecutorNumber} + --executor-memory=${sparkExecutorMemory} + --executor-cores=${sparkExecutorCores} + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + + --sourcePath${sourcePath}/ + --workingPath${workingDir}/bulktag/ + --pathMap${pathMap} + --baseURL${baseURL} + + + + + + + + + + \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/countrypropagation/oozie_app/config-default.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/countrypropagation/oozie_app/config-default.xml new file mode 100644 index 000000000..2744ea92b --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/countrypropagation/oozie_app/config-default.xml @@ -0,0 +1,58 @@ + + + jobTracker + yarnRM + + + nameNode + hdfs://nameservice1 + + + oozie.use.system.libpath + true + + + oozie.action.sharelib.for.spark + spark2 + + + hive_metastore_uris + thrift://iis-cdh5-test-m3.ocean.icm.edu.pl:9083 + + + spark2YarnHistoryServerAddress + http://iis-cdh5-test-gw.ocean.icm.edu.pl:18089 + + + spark2EventLogDir + /user/spark/spark2ApplicationHistory + + + spark2ExtraListeners + com.cloudera.spark.lineage.NavigatorAppListener + + + spark2SqlQueryExecutionListeners + com.cloudera.spark.lineage.NavigatorQueryListener + + + sparkExecutorNumber + 4 + + + sparkDriverMemory + 15G + + + sparkExecutorMemory + 6G + + + sparkExecutorCores + 1 + + + spark2MaxExecutors + 50 + + \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/countrypropagation/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/countrypropagation/oozie_app/workflow.xml new file mode 100644 index 000000000..1fbaeb5d5 --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/countrypropagation/oozie_app/workflow.xml @@ -0,0 +1,316 @@ + + + + sourcePath + the source path + + + whitelist + the white list + + + allowedtypes + the allowed types + + + + + ${jobTracker} + ${nameNode} + + + oozie.action.sharelib.for.spark + ${oozieActionShareLibForSpark2} + + + + + + + + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + + + + + + yarn + cluster + PrepareDatasourceCountryAssociation + eu.dnetlib.dhp.countrypropagation.PrepareDatasourceCountryAssociation + dhp-enrichment-${projectVersion}.jar + + --executor-cores=${sparkExecutorCores} + --executor-memory=${sparkExecutorMemory} + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.sql.shuffle.partitions=3840 + + --sourcePath${sourcePath} + --whitelist${whitelist} + --allowedtypes${allowedtypes} + --workingPath${workingDir}/country + + + + + + + + + + + + + + + yarn + cluster + prepareResultCountry-Publication + eu.dnetlib.dhp.countrypropagation.PrepareResultCountrySet + dhp-enrichment-${projectVersion}.jar + + --executor-cores=${sparkExecutorCores} + --executor-memory=${sparkExecutorMemory} + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.speculation=false + --conf spark.hadoop.mapreduce.map.speculative=false + --conf spark.hadoop.mapreduce.reduce.speculative=false + --conf spark.sql.shuffle.partitions=3840 + + --sourcePath${sourcePath}/publication + --workingPath${workingDir}/country + --resultTableNameeu.dnetlib.dhp.schema.oaf.Publication + + + + + + + + yarn + cluster + prepareResultCountry-Dataset + eu.dnetlib.dhp.countrypropagation.PrepareResultCountrySet + dhp-enrichment-${projectVersion}.jar + + --executor-cores=${sparkExecutorCores} + --executor-memory=${sparkExecutorMemory} + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.speculation=false + --conf spark.hadoop.mapreduce.map.speculative=false + --conf spark.hadoop.mapreduce.reduce.speculative=false + --conf spark.sql.shuffle.partitions=3840 + + --sourcePath${sourcePath}/dataset + --workingPath${workingDir}/country + --resultTableNameeu.dnetlib.dhp.schema.oaf.Dataset + + + + + + + + yarn + cluster + prepareResultCountry-ORP + eu.dnetlib.dhp.countrypropagation.PrepareResultCountrySet + dhp-enrichment-${projectVersion}.jar + + --executor-cores=${sparkExecutorCores} + --executor-memory=${sparkExecutorMemory} + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.speculation=false + --conf spark.hadoop.mapreduce.map.speculative=false + --conf spark.hadoop.mapreduce.reduce.speculative=false + --conf spark.sql.shuffle.partitions=3840 + + --sourcePath${sourcePath}/otherresearchproduct + --workingPath${workingDir}/country + --resultTableNameeu.dnetlib.dhp.schema.oaf.OtherResearchProduct + + + + + + + + yarn + cluster + prepareResultCountry-Software + eu.dnetlib.dhp.countrypropagation.PrepareResultCountrySet + dhp-enrichment-${projectVersion}.jar + + --executor-cores=${sparkExecutorCores} + --executor-memory=${sparkExecutorMemory} + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.speculation=false + --conf spark.hadoop.mapreduce.map.speculative=false + --conf spark.hadoop.mapreduce.reduce.speculative=false + --conf spark.sql.shuffle.partitions=3840 + + --sourcePath${sourcePath}/software + --workingPath${workingDir}/country + --resultTableNameeu.dnetlib.dhp.schema.oaf.Software + + + + + + + + + + + + + + + + + yarn + cluster + countryPropagationForPublications + eu.dnetlib.dhp.countrypropagation.SparkCountryPropagationJob + dhp-enrichment-${projectVersion}.jar + + --executor-cores=${sparkExecutorCores} + --executor-memory=${sparkExecutorMemory} + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.speculation=false + --conf spark.hadoop.mapreduce.map.speculative=false + --conf spark.hadoop.mapreduce.reduce.speculative=false + --conf spark.sql.shuffle.partitions=3840 + + --sourcePath${sourcePath}/publication + --workingPath${workingDir}/country + --resultTableNameeu.dnetlib.dhp.schema.oaf.Publication + + + + + + + + + yarn + cluster + countryPropagationForDataset + eu.dnetlib.dhp.countrypropagation.SparkCountryPropagationJob + dhp-enrichment-${projectVersion}.jar + + --executor-cores=${sparkExecutorCores} + --executor-memory=${sparkExecutorMemory} + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.speculation=false + --conf spark.hadoop.mapreduce.map.speculative=false + --conf spark.hadoop.mapreduce.reduce.speculative=false + --conf spark.sql.shuffle.partitions=3840 + + --sourcePath${sourcePath}/dataset + --workingPath${workingDir}/country + --resultTableNameeu.dnetlib.dhp.schema.oaf.Dataset + + + + + + + + + yarn + cluster + countryPropagationForORP + eu.dnetlib.dhp.countrypropagation.SparkCountryPropagationJob + dhp-enrichment-${projectVersion}.jar + + --executor-cores=${sparkExecutorCores} + --executor-memory=${sparkExecutorMemory} + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.speculation=false + --conf spark.hadoop.mapreduce.map.speculative=false + --conf spark.hadoop.mapreduce.reduce.speculative=false + --conf spark.sql.shuffle.partitions=3840 + + --sourcePath${sourcePath}/otherresearchproduct + --workingPath${workingDir}/country + --resultTableNameeu.dnetlib.dhp.schema.oaf.OtherResearchProduct + + + + + + + + + yarn + cluster + countryPropagationForSoftware + eu.dnetlib.dhp.countrypropagation.SparkCountryPropagationJob + dhp-enrichment-${projectVersion}.jar + + --executor-cores=${sparkExecutorCores} + --executor-memory=${sparkExecutorMemory} + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.speculation=false + --conf spark.hadoop.mapreduce.map.speculative=false + --conf spark.hadoop.mapreduce.reduce.speculative=false + --conf spark.sql.shuffle.partitions=3840 + + --sourcePath${sourcePath}/software + --workingPath${workingDir}/country + --resultTableNameeu.dnetlib.dhp.schema.oaf.Software + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/entitytoorganizationfromsemrel/input_preparation_parameter.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/entitytoorganizationfromsemrel/input_preparation_parameter.json new file mode 100644 index 000000000..b59937331 --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/entitytoorganizationfromsemrel/input_preparation_parameter.json @@ -0,0 +1,50 @@ +[ + { + "paramName":"gp", + "paramLongName":"graphPath", + "paramDescription": "the path of the sequencial file to read", + "paramRequired": true + }, + { + "paramName":"h", + "paramLongName":"hive_metastore_uris", + "paramDescription": "the hive metastore uris", + "paramRequired": true + }, + { + "paramName":"lp", + "paramLongName":"leavesPath", + "paramDescription": "true if the new version of the graph must be saved", + "paramRequired": false + }, + { + "paramName":"cp", + "paramLongName":"childParentPath", + "paramDescription": "path where to store/find association from datasource and organization", + "paramRequired": true + }, + { + "paramName":"rp", + "paramLongName":"resultOrgPath", + "paramDescription": "path where to store/find already linked results and organizations", + "paramRequired": true + }, + { + "paramName": "ssm", + "paramLongName": "isSparkSessionManaged", + "paramDescription": "the path where prepared info have been stored", + "paramRequired": false + }, + { + "paramName": "rep", + "paramLongName": "relationPath", + "paramDescription": "the path where to store the selected subset of relations", + "paramRequired": false + }, + { + "paramName": "pop", + "paramLongName": "projectOrganizationPath", + "paramDescription": "the number of iterations to be computed", + "paramRequired": true + } +] \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/entitytoorganizationfromsemrel/input_propagation_parameter.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/entitytoorganizationfromsemrel/input_propagation_parameter.json new file mode 100644 index 000000000..66a7f5b2f --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/entitytoorganizationfromsemrel/input_propagation_parameter.json @@ -0,0 +1,62 @@ +[ + { + "paramName":"rep", + "paramLongName":"relationPath", + "paramDescription": "the path of the sequencial file to read", + "paramRequired": true + }, + { + "paramName":"h", + "paramLongName":"hive_metastore_uris", + "paramDescription": "the hive metastore uris", + "paramRequired": true + }, + { + "paramName":"lp", + "paramLongName":"leavesPath", + "paramDescription": "true if the new version of the graph must be saved", + "paramRequired": false + }, + { + "paramName":"cp", + "paramLongName":"childParentPath", + "paramDescription": "path where to store/find association from datasource and organization", + "paramRequired": true + }, + { + "paramName":"rp", + "paramLongName":"resultOrgPath", + "paramDescription": "path where to store/find already linked results and organizations", + "paramRequired": true + }, + { + "paramName": "ssm", + "paramLongName": "isSparkSessionManaged", + "paramDescription": "the path where prepared info have been stored", + "paramRequired": false + }, + { + "paramName": "wd", + "paramLongName": "workingDir", + "paramDescription": "true if it is a test running", + "paramRequired": false + }, + { + "paramName": "out", + "paramLongName": "outputPath", + "paramDescription": "the path used to store temporary output files", + "paramRequired": true + }, + { + "paramName": "it", + "paramLongName": "iterations", + "paramDescription": "the number of iterations to be computed", + "paramRequired": false + }, + { + "paramName": "pop", + "paramLongName": "projectOrganizationPath", + "paramDescription": "the number of iterations to be computed", + "paramRequired": true + } +] \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/entitytoorganizationfromsemrel/oozie_app/config-default.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/entitytoorganizationfromsemrel/oozie_app/config-default.xml new file mode 100644 index 000000000..2744ea92b --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/entitytoorganizationfromsemrel/oozie_app/config-default.xml @@ -0,0 +1,58 @@ + + + jobTracker + yarnRM + + + nameNode + hdfs://nameservice1 + + + oozie.use.system.libpath + true + + + oozie.action.sharelib.for.spark + spark2 + + + hive_metastore_uris + thrift://iis-cdh5-test-m3.ocean.icm.edu.pl:9083 + + + spark2YarnHistoryServerAddress + http://iis-cdh5-test-gw.ocean.icm.edu.pl:18089 + + + spark2EventLogDir + /user/spark/spark2ApplicationHistory + + + spark2ExtraListeners + com.cloudera.spark.lineage.NavigatorAppListener + + + spark2SqlQueryExecutionListeners + com.cloudera.spark.lineage.NavigatorQueryListener + + + sparkExecutorNumber + 4 + + + sparkDriverMemory + 15G + + + sparkExecutorMemory + 6G + + + sparkExecutorCores + 1 + + + spark2MaxExecutors + 50 + + \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/entitytoorganizationfromsemrel/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/entitytoorganizationfromsemrel/oozie_app/workflow.xml new file mode 100644 index 000000000..e3f3c1758 --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/entitytoorganizationfromsemrel/oozie_app/workflow.xml @@ -0,0 +1,93 @@ + + + + sourcePath + the source path + + + + + + ${jobTracker} + ${nameNode} + + + oozie.action.sharelib.for.spark + ${oozieActionShareLibForSpark2} + + + + + + + + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + + + + + yarn + cluster + PrepareResultOrganizationAssociation + eu.dnetlib.dhp.entitytoorganizationfromsemrel.PrepareInfo + dhp-enrichment-${projectVersion}.jar + + --executor-cores=${sparkExecutorCores} + --executor-memory=${sparkExecutorMemory} + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + + --graphPath${sourcePath} + --hive_metastore_uris${hive_metastore_uris} + --leavesPath${workingDir}/entitiesSemanticRelation/preparedInfo/leavesPath + --childParentPath${workingDir}/entitiesSemanticRelation/preparedInfo/childParentPath + --resultOrgPath${workingDir}/entitiesSemanticRelation/preparedInfo/resultOrgPath + --projectOrganizationPath${workingDir}/entitiesSemanticRelation/preparedInfo/projectOrganizationPath + --relationPath${workingDir}/entitiesSemanticRelation/preparedInfo/relation + + + + + + + + yarn + cluster + resultToOrganizationFromSemRel + eu.dnetlib.dhp.entitytoorganizationfromsemrel.SparkResultToOrganizationFromSemRel + dhp-enrichment-${projectVersion}.jar + + --executor-cores=${sparkExecutorCores} + --executor-memory=${sparkExecutorMemory} + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.dynamicAllocation.enabled=true + --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} + --conf spark.sql.shuffle.partitions=3840 + + --relationPath${workingDir}/entitiesSemanticRelation/preparedInfo/relation + --outputPath${sourcePath}/relation + --leavesPath${workingDir}/entitiesSemanticRelation/preparedInfo/leavesPath + --childParentPath${workingDir}/entitiesSemanticRelation/preparedInfo/childParentPath + --resultOrgPath${workingDir}/entitiesSemanticRelation/preparedInfo/resultOrgPath + --projectOrganizationPath${workingDir}/entitiesSemanticRelation/preparedInfo/projectOrganizationPath + --hive_metastore_uris${hive_metastore_uris} + --workingDir${workingDir}/entitiesSemanticRelation/working + --iterations${iterations} + + + + + + + + + + \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/orcidtoresultfromsemrel/oozie_app/config-default.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/orcidtoresultfromsemrel/oozie_app/config-default.xml new file mode 100644 index 000000000..8d2c34105 --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/orcidtoresultfromsemrel/oozie_app/config-default.xml @@ -0,0 +1,58 @@ + + + jobTracker + yarnRM + + + nameNode + hdfs://nameservice1 + + + oozie.use.system.libpath + true + + + oozie.action.sharelib.for.spark + spark2 + + + spark2YarnHistoryServerAddress + http://iis-cdh5-test-gw.ocean.icm.edu.pl:18089 + + + hive_metastore_uris + thrift://iis-cdh5-test-m3.ocean.icm.edu.pl:9083 + + + spark2EventLogDir + /user/spark/spark2ApplicationHistory + + + spark2ExtraListeners + com.cloudera.spark.lineage.NavigatorAppListener + + + spark2SqlQueryExecutionListeners + com.cloudera.spark.lineage.NavigatorQueryListener + + + sparkExecutorNumber + 4 + + + sparkDriverMemory + 15G + + + sparkExecutorMemory + 6G + + + sparkExecutorCores + 1 + + + spark2MaxExecutors + 50 + + \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/orcidtoresultfromsemrel/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/orcidtoresultfromsemrel/oozie_app/workflow.xml new file mode 100644 index 000000000..6d800d6e2 --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/orcidtoresultfromsemrel/oozie_app/workflow.xml @@ -0,0 +1,369 @@ + + + + sourcePath + the source path + + + allowedsemrels + the semantic relationships allowed for propagation + + + outputPath + the output path + + + + + + + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + + + + + + + + + + + + + + + + + + + + ${jobTracker} + ${nameNode} + ${nameNode}/${sourcePath}/relation + ${nameNode}/${outputPath}/relation + + + + + + + + ${jobTracker} + ${nameNode} + ${nameNode}/${sourcePath}/organization + ${nameNode}/${outputPath}/organization + + + + + + + + ${jobTracker} + ${nameNode} + ${nameNode}/${sourcePath}/project + ${nameNode}/${outputPath}/project + + + + + + + + ${jobTracker} + ${nameNode} + ${nameNode}/${sourcePath}/datasource + ${nameNode}/${outputPath}/datasource + + + + + + + + + + yarn + cluster + ORCIDPropagation-PreparePhase1-Publications + eu.dnetlib.dhp.orcidtoresultfromsemrel.PrepareResultOrcidAssociationStep1 + dhp-enrichment-${projectVersion}.jar + + --executor-cores=${sparkExecutorCores} + --executor-memory=${sparkExecutorMemory} + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.dynamicAllocation.enabled=true + --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} + --conf spark.sql.shuffle.partitions=3840 + --conf spark.speculation=false + --conf spark.hadoop.mapreduce.map.speculative=false + --conf spark.hadoop.mapreduce.reduce.speculative=false + + --sourcePath${sourcePath} + --hive_metastore_uris${hive_metastore_uris} + --resultTableNameeu.dnetlib.dhp.schema.oaf.Publication + --outputPath${workingDir}/preparedInfo/targetOrcidAssoc + --allowedsemrels${allowedsemrels} + + + + + + + + yarn + cluster + ORCIDPropagation-PreparePhase1-Dataset + eu.dnetlib.dhp.orcidtoresultfromsemrel.PrepareResultOrcidAssociationStep1 + dhp-enrichment-${projectVersion}.jar + + --executor-cores=${sparkExecutorCores} + --executor-memory=${sparkExecutorMemory} + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.dynamicAllocation.enabled=true + --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} + + --sourcePath${sourcePath} + --hive_metastore_uris${hive_metastore_uris} + --resultTableNameeu.dnetlib.dhp.schema.oaf.Dataset + --outputPath${workingDir}/preparedInfo/targetOrcidAssoc + --allowedsemrels${allowedsemrels} + + + + + + + + yarn + cluster + ORCIDPropagation-PreparePhase1-ORP + eu.dnetlib.dhp.orcidtoresultfromsemrel.PrepareResultOrcidAssociationStep1 + dhp-enrichment-${projectVersion}.jar + + --executor-cores=${sparkExecutorCores} + --executor-memory=${sparkExecutorMemory} + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.dynamicAllocation.enabled=true + --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} + + --sourcePath${sourcePath} + --hive_metastore_uris${hive_metastore_uris} + --resultTableNameeu.dnetlib.dhp.schema.oaf.OtherResearchProduct + --outputPath${workingDir}/preparedInfo/targetOrcidAssoc + --allowedsemrels${allowedsemrels} + + + + + + + + yarn + cluster + ORCIDPropagation-PreparePhase1-Software + eu.dnetlib.dhp.orcidtoresultfromsemrel.PrepareResultOrcidAssociationStep1 + dhp-enrichment-${projectVersion}.jar + + --executor-cores=${sparkExecutorCores} + --executor-memory=${sparkExecutorMemory} + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.dynamicAllocation.enabled=true + --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} + + --sourcePath${sourcePath} + --hive_metastore_uris${hive_metastore_uris} + --resultTableNameeu.dnetlib.dhp.schema.oaf.Software + --outputPath${workingDir}/preparedInfo/targetOrcidAssoc + --allowedsemrels${allowedsemrels} + + + + + + + + + + yarn + cluster + ORCIDPropagation-PreparePhase2 + eu.dnetlib.dhp.orcidtoresultfromsemrel.PrepareResultOrcidAssociationStep2 + dhp-enrichment-${projectVersion}.jar + + --executor-cores=${sparkExecutorCores} + --executor-memory=${sparkExecutorMemory} + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.dynamicAllocation.enabled=true + --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} + + --sourcePath${workingDir}/orcidprop + --outputPath${workingDir}/orcidprop/mergedOrcidAssoc + + + + + + + + + + + + + + + yarn + cluster + ORCIDPropagation-Publication + eu.dnetlib.dhp.orcidtoresultfromsemrel.SparkOrcidToResultFromSemRelJob + dhp-enrichment-${projectVersion}.jar + + --executor-cores=${sparkExecutorCores} + --executor-memory=${sparkExecutorMemory} + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.dynamicAllocation.enabled=true + --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} + --conf spark.speculation=false + --conf spark.hadoop.mapreduce.map.speculative=false + --conf spark.hadoop.mapreduce.reduce.speculative=false + --conf spark.sql.shuffle.partitions=3840 + + --possibleUpdatesPath${workingDir}/orcidprop/mergedOrcidAssoc + --sourcePath${sourcePath}/publication + --resultTableNameeu.dnetlib.dhp.schema.oaf.Publication + --outputPath${outputPath}/publication + + + + + + + + yarn + cluster + ORCIDPropagation-Dataset + eu.dnetlib.dhp.orcidtoresultfromsemrel.SparkOrcidToResultFromSemRelJob + dhp-enrichment-${projectVersion}.jar + + --executor-cores=${sparkExecutorCores} + --executor-memory=${sparkExecutorMemory} + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.dynamicAllocation.enabled=true + --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} + --conf spark.speculation=false + --conf spark.hadoop.mapreduce.map.speculative=false + --conf spark.hadoop.mapreduce.reduce.speculative=false + + --possibleUpdatesPath${workingDir}/orcidprop/mergedOrcidAssoc + --sourcePath${sourcePath}/dataset + --resultTableNameeu.dnetlib.dhp.schema.oaf.Dataset + --outputPath${outputPath}/dataset + + + + + + + + yarn + cluster + ORCIDPropagation-ORP + eu.dnetlib.dhp.orcidtoresultfromsemrel.SparkOrcidToResultFromSemRelJob + dhp-enrichment-${projectVersion}.jar + + --executor-cores=${sparkExecutorCores} + --executor-memory=${sparkExecutorMemory} + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.dynamicAllocation.enabled=true + --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} + --conf spark.speculation=false + --conf spark.hadoop.mapreduce.map.speculative=false + --conf spark.hadoop.mapreduce.reduce.speculative=false + + --possibleUpdatesPath${workingDir}/orcidprop/mergedOrcidAssoc + --sourcePath${sourcePath}/otherresearchproduct + --resultTableNameeu.dnetlib.dhp.schema.oaf.OtherResearchProduct + --outputPath${outputPath}/otherresearchproduct + + + + + + + + yarn + cluster + ORCIDPropagation-Software + eu.dnetlib.dhp.orcidtoresultfromsemrel.SparkOrcidToResultFromSemRelJob + dhp-enrichment-${projectVersion}.jar + + --executor-cores=${sparkExecutorCores} + --executor-memory=${sparkExecutorMemory} + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.dynamicAllocation.enabled=true + --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} + --conf spark.speculation=false + --conf spark.hadoop.mapreduce.map.speculative=false + --conf spark.hadoop.mapreduce.reduce.speculative=false + + --possibleUpdatesPath${workingDir}/orcidprop/mergedOrcidAssoc + --sourcePath${sourcePath}/software + --resultTableNameeu.dnetlib.dhp.schema.oaf.Software + --outputPath${outputPath}/software + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/projecttoresult/oozie_app/config-default.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/projecttoresult/oozie_app/config-default.xml new file mode 100644 index 000000000..caf3c6050 --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/projecttoresult/oozie_app/config-default.xml @@ -0,0 +1,63 @@ + + + jobTracker + yarnRM + + + + nameNode + + hdfs://nameservice1 + + + oozie.use.system.libpath + true + + + oozie.action.sharelib.for.spark + spark2 + + + hive_metastore_uris + thrift://iis-cdh5-test-m3.ocean.icm.edu.pl:9083 + + + + spark2YarnHistoryServerAddress + http://iis-cdh5-test-gw.ocean.icm.edu.pl:18089 + + + spark2EventLogDir + /user/spark/spark2ApplicationHistory + + + spark2ExtraListeners + com.cloudera.spark.lineage.NavigatorAppListener + + + spark2SqlQueryExecutionListeners + com.cloudera.spark.lineage.NavigatorQueryListener + + + sparkExecutorNumber + 4 + + + sparkDriverMemory + 15G + + + sparkExecutorMemory + 6G + + + sparkExecutorCores + 1 + + + spark2MaxExecutors + 50 + + + + \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/projecttoresult/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/projecttoresult/oozie_app/workflow.xml new file mode 100644 index 000000000..93a2f98be --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/projecttoresult/oozie_app/workflow.xml @@ -0,0 +1,94 @@ + + + + sourcePath + the source path + + + allowedsemrels + the allowed semantics + + + + + + ${jobTracker} + ${nameNode} + + + oozie.action.sharelib.for.spark + ${oozieActionShareLibForSpark2} + + + + + + + + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + + + + + yarn + cluster + PrepareProjectResultsAssociation + eu.dnetlib.dhp.projecttoresult.PrepareProjectResultsAssociation + dhp-enrichment-${projectVersion}.jar + + --executor-cores=${sparkExecutorCores} + --executor-memory=${sparkExecutorMemory} + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + + --sourcePath${sourcePath}/relation + --allowedsemrels${allowedsemrels} + --hive_metastore_uris${hive_metastore_uris} + --potentialUpdatePath${workingDir}/resultproject/preparedInfo/potentialUpdates + --alreadyLinkedPath${workingDir}/resultproject/preparedInfo/alreadyLinked + + + + + + + + yarn + cluster + ProjectToResultPropagation + eu.dnetlib.dhp.projecttoresult.SparkResultToProjectThroughSemRelJob + dhp-enrichment-${projectVersion}.jar + + --executor-cores=${sparkExecutorCores} + --executor-memory=${sparkExecutorMemory} + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.dynamicAllocation.enabled=true + --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} + + --hive_metastore_uris${hive_metastore_uris} + --outputPath${sourcePath}/relation + --potentialUpdatePath${workingDir}/resultproject/preparedInfo/potentialUpdates + --alreadyLinkedPath${workingDir}/resultproject/preparedInfo/alreadyLinked + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromorganization/oozie_app/config-default.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromorganization/oozie_app/config-default.xml new file mode 100644 index 000000000..2744ea92b --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromorganization/oozie_app/config-default.xml @@ -0,0 +1,58 @@ + + + jobTracker + yarnRM + + + nameNode + hdfs://nameservice1 + + + oozie.use.system.libpath + true + + + oozie.action.sharelib.for.spark + spark2 + + + hive_metastore_uris + thrift://iis-cdh5-test-m3.ocean.icm.edu.pl:9083 + + + spark2YarnHistoryServerAddress + http://iis-cdh5-test-gw.ocean.icm.edu.pl:18089 + + + spark2EventLogDir + /user/spark/spark2ApplicationHistory + + + spark2ExtraListeners + com.cloudera.spark.lineage.NavigatorAppListener + + + spark2SqlQueryExecutionListeners + com.cloudera.spark.lineage.NavigatorQueryListener + + + sparkExecutorNumber + 4 + + + sparkDriverMemory + 15G + + + sparkExecutorMemory + 6G + + + sparkExecutorCores + 1 + + + spark2MaxExecutors + 50 + + \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromorganization/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromorganization/oozie_app/workflow.xml new file mode 100644 index 000000000..8aec530cc --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromorganization/oozie_app/workflow.xml @@ -0,0 +1,88 @@ + + + + sourcePath + the source path + + + baseURL + the baseURL from where to reach the community APIs + + + + + ${jobTracker} + ${nameNode} + + + oozie.action.sharelib.for.spark + ${oozieActionShareLibForSpark2} + + + + + + + + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + + + + yarn + cluster + Prepare-Community-Result-Organization + eu.dnetlib.dhp.resulttocommunityfromorganization.PrepareResultCommunitySet + dhp-enrichment-${projectVersion}.jar + + --executor-cores=6 + --executor-memory=5G + --conf spark.executor.memoryOverhead=3g + --conf spark.sql.shuffle.partitions=3284 + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + + --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} + + --sourcePath${sourcePath}/relation + --outputPath${workingDir}/communityorganization/preparedInfo/resultCommunityList + --hive_metastore_uris${hive_metastore_uris} + --baseURL${baseURL} + + + + + + + + yarn + cluster + community2resultfromorganization-Publication + eu.dnetlib.dhp.resulttocommunityfromorganization.SparkResultToCommunityFromOrganizationJob + dhp-enrichment-${projectVersion}.jar + + --executor-cores=6 + --executor-memory=5G + --conf spark.executor.memoryOverhead=3g + --conf spark.sql.shuffle.partitions=3284 + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} + + --preparedInfoPath${workingDir}/preparedInfo/resultCommunityList + --sourcePath${sourcePath}/ + --outputPath${workingDir}/resulttocommunityfromorganization/ + + + + + + + + \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromproject/input_communitytoresult_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromproject/input_communitytoresult_parameters.json new file mode 100644 index 000000000..0db8085d1 --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromproject/input_communitytoresult_parameters.json @@ -0,0 +1,28 @@ +[ + { + "paramName":"s", + "paramLongName":"sourcePath", + "paramDescription": "the path of the sequencial file to read", + "paramRequired": true + }, + + { + "paramName": "out", + "paramLongName": "outputPath", + "paramDescription": "the path used to store temporary output files", + "paramRequired": true + }, + { + "paramName": "ssm", + "paramLongName": "isSparkSessionManaged", + "paramDescription": "true if the spark session is managed, false otherwise", + "paramRequired": false + }, + { + "paramName": "p", + "paramLongName": "preparedInfoPath", + "paramDescription": "the path where prepared info have been stored", + "paramRequired": true + } + +] \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromproject/input_preparecommunitytoresult_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromproject/input_preparecommunitytoresult_parameters.json new file mode 100644 index 000000000..cbc01c2d5 --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromproject/input_preparecommunitytoresult_parameters.json @@ -0,0 +1,28 @@ +[ + { + "paramName":"s", + "paramLongName":"sourcePath", + "paramDescription": "the path of the sequencial file to read", + "paramRequired": true + }, + + { + "paramName": "ssm", + "paramLongName": "isSparkSessionManaged", + "paramDescription": "true if the spark session is managed, false otherwise", + "paramRequired": false + }, + { + "paramName": "out", + "paramLongName": "outputPath", + "paramDescription": "the path used to store temporary output files", + "paramRequired": true + }, + { + "paramName": "bu", + "paramLongName": "baseURL", + "paramDescription": "the path used to store temporary output files", + "paramRequired": false + } + +] \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromproject/oozie_app/config-default.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromproject/oozie_app/config-default.xml new file mode 100644 index 000000000..2744ea92b --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromproject/oozie_app/config-default.xml @@ -0,0 +1,58 @@ + + + jobTracker + yarnRM + + + nameNode + hdfs://nameservice1 + + + oozie.use.system.libpath + true + + + oozie.action.sharelib.for.spark + spark2 + + + hive_metastore_uris + thrift://iis-cdh5-test-m3.ocean.icm.edu.pl:9083 + + + spark2YarnHistoryServerAddress + http://iis-cdh5-test-gw.ocean.icm.edu.pl:18089 + + + spark2EventLogDir + /user/spark/spark2ApplicationHistory + + + spark2ExtraListeners + com.cloudera.spark.lineage.NavigatorAppListener + + + spark2SqlQueryExecutionListeners + com.cloudera.spark.lineage.NavigatorQueryListener + + + sparkExecutorNumber + 4 + + + sparkDriverMemory + 15G + + + sparkExecutorMemory + 6G + + + sparkExecutorCores + 1 + + + spark2MaxExecutors + 50 + + \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromproject/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromproject/oozie_app/workflow.xml new file mode 100644 index 000000000..90ed2e0b6 --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromproject/oozie_app/workflow.xml @@ -0,0 +1,90 @@ + + + + sourcePath + the source path + + + baseURL + the base URL to use to select the right community APIs + + + + + ${jobTracker} + ${nameNode} + + + oozie.action.sharelib.for.spark + ${oozieActionShareLibForSpark2} + + + + + + + + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + + + + + yarn + cluster + Prepare-Community-Result-Organization + eu.dnetlib.dhp.resulttocommunityfromproject.PrepareResultCommunitySet + dhp-enrichment-${projectVersion}.jar + + --executor-cores=6 + --executor-memory=5G + --conf spark.executor.memoryOverhead=3g + --conf spark.sql.shuffle.partitions=3284 + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + + --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} + + --sourcePath${sourcePath}/relation + --outputPath${workingDir}/communitythroughproject/preparedInfo/resultCommunityList + --baseURL${baseURL} + + + + + + + + yarn + cluster + community2resultfromproject + eu.dnetlib.dhp.resulttocommunityfromproject.SparkResultToCommunityFromProject + dhp-enrichment-${projectVersion}.jar + + --executor-cores=6 + --executor-memory=5G + --conf spark.executor.memoryOverhead=3g + --conf spark.sql.shuffle.partitions=3284 + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} + + --preparedInfoPath${workingDir}/communitythroughproject/preparedInfo/resultCommunityList + --sourcePath${sourcePath}/ + --outputPath${workingDir}/communitythroughproject/ + + + + + + + + + + \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromsemrel/oozie_app/config-default.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromsemrel/oozie_app/config-default.xml new file mode 100644 index 000000000..2744ea92b --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromsemrel/oozie_app/config-default.xml @@ -0,0 +1,58 @@ + + + jobTracker + yarnRM + + + nameNode + hdfs://nameservice1 + + + oozie.use.system.libpath + true + + + oozie.action.sharelib.for.spark + spark2 + + + hive_metastore_uris + thrift://iis-cdh5-test-m3.ocean.icm.edu.pl:9083 + + + spark2YarnHistoryServerAddress + http://iis-cdh5-test-gw.ocean.icm.edu.pl:18089 + + + spark2EventLogDir + /user/spark/spark2ApplicationHistory + + + spark2ExtraListeners + com.cloudera.spark.lineage.NavigatorAppListener + + + spark2SqlQueryExecutionListeners + com.cloudera.spark.lineage.NavigatorQueryListener + + + sparkExecutorNumber + 4 + + + sparkDriverMemory + 15G + + + sparkExecutorMemory + 6G + + + sparkExecutorCores + 1 + + + spark2MaxExecutors + 50 + + \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromsemrel/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromsemrel/oozie_app/workflow.xml new file mode 100644 index 000000000..be88c45bd --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromsemrel/oozie_app/workflow.xml @@ -0,0 +1,305 @@ + + + + sourcePath + the source path + + + allowedsemrels + the semantic relationships allowed for propagation + + + baseURL + the isLookup service endpoint + + + outputPath + the output path + + + + + + + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + + + + + + + + + + + + + yarn + cluster + ResultToCommunitySemRel-PreparePhase1-Publications + eu.dnetlib.dhp.resulttocommunityfromsemrel.PrepareResultCommunitySetStep1 + dhp-enrichment-${projectVersion}.jar + + --executor-cores=${sparkExecutorCores} + --executor-memory=${sparkExecutorMemory} + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.dynamicAllocation.enabled=true + --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} + + --sourcePath${sourcePath} + --hive_metastore_uris${hive_metastore_uris} + --resultTableNameeu.dnetlib.dhp.schema.oaf.Publication + --outputPath${workingDir}/communitysemrel/preparedInfo/targetCommunityAssoc + --allowedsemrels${allowedsemrels} + --baseURL${baseURL} + + + + + + + + yarn + cluster + ResultToCommunitySemRel-PreparePhase1-Dataset + eu.dnetlib.dhp.resulttocommunityfromsemrel.PrepareResultCommunitySetStep1 + dhp-enrichment-${projectVersion}.jar + + --executor-cores=${sparkExecutorCores} + --executor-memory=${sparkExecutorMemory} + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.dynamicAllocation.enabled=true + --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} + + --sourcePath${sourcePath} + --hive_metastore_uris${hive_metastore_uris} + --resultTableNameeu.dnetlib.dhp.schema.oaf.Dataset + --outputPath${workingDir}/communitysemrel/preparedInfo/targetCommunityAssoc + --allowedsemrels${allowedsemrels} + --baseURL${baseURL} + + + + + + + + yarn + cluster + ResultToCommunitySemRel-PreparePhase1-ORP + eu.dnetlib.dhp.resulttocommunityfromsemrel.PrepareResultCommunitySetStep1 + dhp-enrichment-${projectVersion}.jar + + --executor-cores=${sparkExecutorCores} + --executor-memory=${sparkExecutorMemory} + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.dynamicAllocation.enabled=true + --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} + + --sourcePath${sourcePath} + --hive_metastore_uris${hive_metastore_uris} + --resultTableNameeu.dnetlib.dhp.schema.oaf.OtherResearchProduct + --outputPath${workingDir}/communitysemrel/preparedInfo/targetCommunityAssoc + --allowedsemrels${allowedsemrels} + --baseURL${baseURL} + + + + + + + + yarn + cluster + ResultToCommunitySemRel-PreparePhase1-Software + eu.dnetlib.dhp.resulttocommunityfromsemrel.PrepareResultCommunitySetStep1 + dhp-enrichment-${projectVersion}.jar + + --executor-cores=${sparkExecutorCores} + --executor-memory=${sparkExecutorMemory} + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.dynamicAllocation.enabled=true + --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} + + --sourcePath${sourcePath} + --hive_metastore_uris${hive_metastore_uris} + --resultTableNameeu.dnetlib.dhp.schema.oaf.Software + --outputPath${workingDir}/communitysemrel/preparedInfo/targetCommunityAssoc + --allowedsemrels${allowedsemrels} + --baseURL${baseURL} + + + + + + + + + + yarn + cluster + ResultToCommunityEmRelPropagation-PreparePhase2 + eu.dnetlib.dhp.resulttocommunityfromsemrel.PrepareResultCommunitySetStep2 + dhp-enrichment-${projectVersion}.jar + + --executor-cores=${sparkExecutorCores} + --executor-memory=${sparkExecutorMemory} + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.dynamicAllocation.enabled=true + --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} + + --sourcePath${workingDir}/communitysemrel/preparedInfo/targetCommunityAssoc + --outputPath${workingDir}/communitysemrel/preparedInfo/mergedCommunityAssoc + + + + + + + + + + + + + + + yarn + cluster + Result2CommunitySemRelPropagation-Publication + eu.dnetlib.dhp.resulttocommunityfromsemrel.SparkResultToCommunityThroughSemRelJob + dhp-enrichment-${projectVersion}.jar + + --executor-cores=${sparkExecutorCores} + --executor-memory=${sparkExecutorMemory} + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.dynamicAllocation.enabled=true + --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} + + --preparedInfoPath${workingDir}/communitysemrel/preparedInfo/mergedCommunityAssoc + --sourcePath${sourcePath}/publication + --hive_metastore_uris${hive_metastore_uris} + --resultTableNameeu.dnetlib.dhp.schema.oaf.Publication + --outputPath${workingDir}/communitysemrel/publication + + + + + + + + + yarn + cluster + Result2CommunitySemRelPropagation-Dataset + eu.dnetlib.dhp.resulttocommunityfromsemrel.SparkResultToCommunityThroughSemRelJob + dhp-enrichment-${projectVersion}.jar + + --executor-cores=${sparkExecutorCores} + --executor-memory=${sparkExecutorMemory} + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.dynamicAllocation.enabled=true + --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} + + --preparedInfoPath${workingDir}/communitysemrel/preparedInfo/mergedCommunityAssoc + --sourcePath${sourcePath}/dataset + --hive_metastore_uris${hive_metastore_uris} + --resultTableNameeu.dnetlib.dhp.schema.oaf.Dataset + --outputPath${workingDir}/communitysemrel/dataset + + + + + + + + + yarn + cluster + Result2CommunitySemRelPropagation-ORP + eu.dnetlib.dhp.resulttocommunityfromsemrel.SparkResultToCommunityThroughSemRelJob + dhp-enrichment-${projectVersion}.jar + + --executor-cores=${sparkExecutorCores} + --executor-memory=${sparkExecutorMemory} + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.dynamicAllocation.enabled=true + --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} + + --preparedInfoPath${workingDir}/communitysemrel/preparedInfo/mergedCommunityAssoc + --sourcePath${sourcePath}/otherresearchproduct + --hive_metastore_uris${hive_metastore_uris} + --resultTableNameeu.dnetlib.dhp.schema.oaf.OtherResearchProduct + --outputPath${workingDir}/communitysemrel/otherresearchproduct + + + + + + + + + yarn + cluster + Result2CommunitySemRelPropagation-Software + eu.dnetlib.dhp.resulttocommunityfromsemrel.SparkResultToCommunityThroughSemRelJob + dhp-enrichment-${projectVersion}.jar + + --executor-cores=${sparkExecutorCores} + --executor-memory=${sparkExecutorMemory} + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.dynamicAllocation.enabled=true + --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} + + --preparedInfoPath${workingDir}/communitysemrel/preparedInfo/mergedCommunityAssoc + --sourcePath${sourcePath}/software + --hive_metastore_uris${hive_metastore_uris} + --resultTableNameeu.dnetlib.dhp.schema.oaf.Software + --outputPath${workingDir}/communitysemrel/software + + + + + + + + + + \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttoorganizationfrominstrepo/oozie_app/config-default.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttoorganizationfrominstrepo/oozie_app/config-default.xml new file mode 100644 index 000000000..2744ea92b --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttoorganizationfrominstrepo/oozie_app/config-default.xml @@ -0,0 +1,58 @@ + + + jobTracker + yarnRM + + + nameNode + hdfs://nameservice1 + + + oozie.use.system.libpath + true + + + oozie.action.sharelib.for.spark + spark2 + + + hive_metastore_uris + thrift://iis-cdh5-test-m3.ocean.icm.edu.pl:9083 + + + spark2YarnHistoryServerAddress + http://iis-cdh5-test-gw.ocean.icm.edu.pl:18089 + + + spark2EventLogDir + /user/spark/spark2ApplicationHistory + + + spark2ExtraListeners + com.cloudera.spark.lineage.NavigatorAppListener + + + spark2SqlQueryExecutionListeners + com.cloudera.spark.lineage.NavigatorQueryListener + + + sparkExecutorNumber + 4 + + + sparkDriverMemory + 15G + + + sparkExecutorMemory + 6G + + + sparkExecutorCores + 1 + + + spark2MaxExecutors + 50 + + \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttoorganizationfrominstrepo/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttoorganizationfrominstrepo/oozie_app/workflow.xml new file mode 100644 index 000000000..8281130f3 --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttoorganizationfrominstrepo/oozie_app/workflow.xml @@ -0,0 +1,182 @@ + + + + sourcePath + the source path + + + blacklist + The list of institutional repositories that should not be used for the propagation + + + + + ${jobTracker} + ${nameNode} + + + oozie.action.sharelib.for.spark + ${oozieActionShareLibForSpark2} + + + + + + + + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + + + + + yarn + cluster + PrepareResultOrganizationAssociation + eu.dnetlib.dhp.resulttoorganizationfrominstrepo.PrepareResultInstRepoAssociation + dhp-enrichment-${projectVersion}.jar + + --executor-cores=${sparkExecutorCores} + --executor-memory=${sparkExecutorMemory} + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + + --sourcePath${sourcePath} + --workingPath${workingDir}/affiliationInstRepo + --blacklist${blacklist} + + + + + + + + + + + + + + + yarn + cluster + resultToOrganizationFromInstRepoPropagationForPublications + eu.dnetlib.dhp.resulttoorganizationfrominstrepo.SparkResultToOrganizationFromIstRepoJob + dhp-enrichment-${projectVersion}.jar + + --executor-cores=${sparkExecutorCores} + --executor-memory=${sparkExecutorMemory} + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.dynamicAllocation.enabled=true + --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} + + --sourcePath${sourcePath}/publication + --outputPath${sourcePath}/relation + --datasourceOrganizationPath${workingDir}/affiliationInstRepo/preparedInfo/datasourceOrganization + --alreadyLinkedPath${workingDir}/affiliationInstRepo/preparedInfo/alreadyLinked + --hive_metastore_uris${hive_metastore_uris} + --resultTableNameeu.dnetlib.dhp.schema.oaf.Publication + + + + + + + + yarn + cluster + resultToOrganizationFromInstRepoPropagationForDataset + eu.dnetlib.dhp.resulttoorganizationfrominstrepo.SparkResultToOrganizationFromIstRepoJob + dhp-enrichment-${projectVersion}.jar + + --executor-cores=${sparkExecutorCores} + --executor-memory=${sparkExecutorMemory} + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.dynamicAllocation.enabled=true + --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} + + --sourcePath${sourcePath}/dataset + --outputPath${sourcePath}/relation + --datasourceOrganizationPath${workingDir}/affiliationInstRepo/preparedInfo/datasourceOrganization + --alreadyLinkedPath${workingDir}/affiliationInstRepo/preparedInfo/alreadyLinked + --hive_metastore_uris${hive_metastore_uris} + --resultTableNameeu.dnetlib.dhp.schema.oaf.Dataset + + + + + + + + yarn + cluster + resultToOrganizationFromInstRepoPropagationForORP + eu.dnetlib.dhp.resulttoorganizationfrominstrepo.SparkResultToOrganizationFromIstRepoJob + dhp-enrichment-${projectVersion}.jar + + --executor-cores=${sparkExecutorCores} + --executor-memory=${sparkExecutorMemory} + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.dynamicAllocation.enabled=true + --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} + + --sourcePath${sourcePath}/otherresearchproduct + --outputPath${sourcePath}/relation + --datasourceOrganizationPath${workingDir}/affiliationInstRepo/preparedInfo/datasourceOrganization + --alreadyLinkedPath${workingDir}/affiliationInstRepo/preparedInfo/alreadyLinked + --hive_metastore_uris${hive_metastore_uris} + --resultTableNameeu.dnetlib.dhp.schema.oaf.OtherResearchProduct + + + + + + + + yarn + cluster + resultToOrganizationFromInstRepoPropagationForSoftware + eu.dnetlib.dhp.resulttoorganizationfrominstrepo.SparkResultToOrganizationFromIstRepoJob + dhp-enrichment-${projectVersion}.jar + + --executor-cores=${sparkExecutorCores} + --executor-memory=${sparkExecutorMemory} + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.dynamicAllocation.enabled=true + --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} + + --sourcePath${sourcePath}/software + --outputPath${sourcePath}/relation + --datasourceOrganizationPath${workingDir}/affiliationInstRepo/preparedInfo/datasourceOrganization + --alreadyLinkedPath${workingDir}/affiliationInstRepo/preparedInfo/alreadyLinked + --hive_metastore_uris${hive_metastore_uris} + --resultTableNameeu.dnetlib.dhp.schema.oaf.Software + + + + + + + + + + \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttoorganizationfromsemrel/oozie_app/config-default.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttoorganizationfromsemrel/oozie_app/config-default.xml new file mode 100644 index 000000000..2744ea92b --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttoorganizationfromsemrel/oozie_app/config-default.xml @@ -0,0 +1,58 @@ + + + jobTracker + yarnRM + + + nameNode + hdfs://nameservice1 + + + oozie.use.system.libpath + true + + + oozie.action.sharelib.for.spark + spark2 + + + hive_metastore_uris + thrift://iis-cdh5-test-m3.ocean.icm.edu.pl:9083 + + + spark2YarnHistoryServerAddress + http://iis-cdh5-test-gw.ocean.icm.edu.pl:18089 + + + spark2EventLogDir + /user/spark/spark2ApplicationHistory + + + spark2ExtraListeners + com.cloudera.spark.lineage.NavigatorAppListener + + + spark2SqlQueryExecutionListeners + com.cloudera.spark.lineage.NavigatorQueryListener + + + sparkExecutorNumber + 4 + + + sparkDriverMemory + 15G + + + sparkExecutorMemory + 6G + + + sparkExecutorCores + 1 + + + spark2MaxExecutors + 50 + + \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttoorganizationfromsemrel/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttoorganizationfromsemrel/oozie_app/workflow.xml new file mode 100644 index 000000000..7918df120 --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttoorganizationfromsemrel/oozie_app/workflow.xml @@ -0,0 +1,97 @@ + + + + sourcePath + the source path + + + + + + ${jobTracker} + ${nameNode} + + + oozie.action.sharelib.for.spark + ${oozieActionShareLibForSpark2} + + + + + + + + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + + + + yarn + cluster + PrepareResultOrganizationAssociation + eu.dnetlib.dhp.resulttoorganizationfromsemrel.PrepareInfo + dhp-enrichment-${projectVersion}.jar + + --executor-cores=${sparkExecutorCores} + --executor-memory=${sparkExecutorMemory} + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + + --graphPath${sourcePath} + --hive_metastore_uris${hive_metastore_uris} + --leavesPath${workingDir}/affiliationSemanticRelation/preparedInfo/leavesPath + --childParentPath${workingDir}/affiliationSemanticRelation/preparedInfo/childParentPath + --resultOrgPath${workingDir}/affiliationSemanticRelation/preparedInfo/resultOrgPath + --relationPath${workingDir}/affiliationSemanticRelation/preparedInfo/relation + + + + + + + + yarn + cluster + resultToOrganizationFromSemRel + eu.dnetlib.dhp.resulttoorganizationfromsemrel.SparkResultToOrganizationFromSemRel + dhp-enrichment-${projectVersion}.jar + + --executor-cores=${sparkExecutorCores} + --executor-memory=${sparkExecutorMemory} + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.dynamicAllocation.enabled=true + --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} + --conf spark.sql.shuffle.partitions=3840 + + --relationPath${workingDir}/affiliationSemanticRelation/preparedInfo/relation + --outputPath${sourcePath} + --leavesPath${workingDir}/affiliationSemanticRelation/preparedInfo/leavesPath + --childParentPath${workingDir}/affiliationSemanticRelation/preparedInfo/childParentPath + --resultOrgPath${workingDir}/affiliationSemanticRelation/preparedInfo/resultOrgPath + --hive_metastore_uris${hive_metastore_uris} + --workingDir${workingDir}/affiliationSemanticRelation/working + --iterations${iterations} + + + + + + + + + + + + + + + + + \ No newline at end of file From c0cde53bf647d00bf5d633ef0ef906b4984d35b5 Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Thu, 7 Dec 2023 10:08:35 +0100 Subject: [PATCH 392/449] [bulktagging] setting first step of bulktaggin as the copy of the entities and relations not involved in the tagging' --- .../resources/eu/dnetlib/dhp/bulktag/oozie_app/workflow.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/oozie_app/workflow.xml index 0d4d1f046..03373eda0 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/oozie_app/workflow.xml @@ -29,7 +29,7 @@ - + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] From 336fb31d8778cbfbb75a555165b55ee48518a9ba Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Thu, 7 Dec 2023 10:27:25 +0100 Subject: [PATCH 393/449] [community_result_propagation] adjusting starting poit of workflow --- .../resulttocommunityfromorganization/oozie_app/workflow.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/oozie_app/workflow.xml index dfa762ac6..e342bce23 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/oozie_app/workflow.xml @@ -25,7 +25,7 @@ - + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] From c381bacee01b7f5a3918e0e77d4a55d8e969c04b Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Thu, 7 Dec 2023 14:07:11 +0100 Subject: [PATCH 394/449] [enrichment] passing the community API base URL --- .../resulttocommunityfromproject/oozie_app/workflow.xml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromproject/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromproject/oozie_app/workflow.xml index 21cc2d887..d0784c94d 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromproject/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromproject/oozie_app/workflow.xml @@ -4,11 +4,14 @@ sourcePath the source path - outputPath the output path + + baseURL + the community API base URL + @@ -104,7 +107,7 @@ --sourcePath${sourcePath}/relation --outputPath${workingDir}/preparedInfo/resultCommunityList - --production${production} + --baseURL${baseURL} From 70eb1796b20c1001d4c49655e72dbbe0c791252a Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Thu, 7 Dec 2023 14:08:04 +0100 Subject: [PATCH 395/449] logging typo --- .../resulttocommunityfromproject/PrepareResultCommunitySet.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/PrepareResultCommunitySet.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/PrepareResultCommunitySet.java index 7fed2606b..467e11a96 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/PrepareResultCommunitySet.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/PrepareResultCommunitySet.java @@ -53,7 +53,7 @@ public class PrepareResultCommunitySet { log.info("outputPath: {}", outputPath); final String baseURL = parser.get("baseURL"); - log.info("baseUEL: {}", baseURL); + log.info("baseURL: {}", baseURL); final CommunityEntityMap projectsMap = Utils.getCommunityProjects(baseURL); From cb71a7936bb98f498693fe75335c60947f5cbef6 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Thu, 7 Dec 2023 23:09:54 +0100 Subject: [PATCH 396/449] [graph cleaning] avoid stack overflow error when navigating Oaf objects declaring an Enum --- .../dhp/oa/graph/clean/OafCleaner.java | 1 + .../graph/clean/CleanGraphSparkJobTest.java | 32 +++++++++++++++++++ .../dhp/oa/graph/clean/graph/orp/orp.json | 1 + 3 files changed, 34 insertions(+) create mode 100644 dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/graph/orp/orp.json diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/OafCleaner.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/OafCleaner.java index 102a1fa85..4cfec6fe7 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/OafCleaner.java +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/clean/OafCleaner.java @@ -59,6 +59,7 @@ public class OafCleaner implements Serializable { private static boolean isPrimitive(Object o) { return Objects.isNull(o) || o.getClass().isPrimitive() + || o.getClass().isEnum() || o instanceof Class || o instanceof Integer || o instanceof Double diff --git a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/CleanGraphSparkJobTest.java b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/CleanGraphSparkJobTest.java index a1a4c29cd..4ae3f82c2 100644 --- a/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/CleanGraphSparkJobTest.java +++ b/dhp-workflows/dhp-graph-mapper/src/test/java/eu/dnetlib/dhp/oa/graph/clean/CleanGraphSparkJobTest.java @@ -690,6 +690,38 @@ public class CleanGraphSparkJobTest { } + @Test + void testClean_ORP() throws Exception { + final String prefix = "gcube "; + + new CleanGraphSparkJob( + args( + "/eu/dnetlib/dhp/oa/graph/input_clean_graph_parameters.json", + new String[] { + "--inputPath", graphInputPath + "/orp", + "--outputPath", graphOutputPath + "/orp", + "--isLookupUrl", "lookupurl", + "--graphTableClassName", OtherResearchProduct.class.getCanonicalName(), + "--deepClean", "true", + "--contextId", "sobigdata", + "--verifyParam", "gCube ", + "--masterDuplicatePath", dsMasterDuplicatePath, + "--country", "NL", + "--verifyCountryParam", "10.17632", + "--collectedfrom", "NARCIS", + "--hostedBy", Objects + .requireNonNull( + getClass() + .getResource("/eu/dnetlib/dhp/oa/graph/clean/hostedBy")) + .getPath() + })).run(false, isLookUpService); + + Dataset orp = read(spark, graphOutputPath + "/orp", OtherResearchProduct.class); + + assertEquals(1, orp.count()); + + } + @Test void testCleanCfHbSparkJob() throws Exception { diff --git a/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/graph/orp/orp.json b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/graph/orp/orp.json new file mode 100644 index 000000000..85045e361 --- /dev/null +++ b/dhp-workflows/dhp-graph-mapper/src/test/resources/eu/dnetlib/dhp/oa/graph/clean/graph/orp/orp.json @@ -0,0 +1 @@ +{"collectedfrom":[{"key":"10|openaire____::fffd45256148b1de3114788f21179083","value":"JAIRO","dataInfo":null}],"dataInfo":{"invisible":false,"inferred":true,"deletedbyinference":false,"trust":"0.8","inferenceprovenance":"dedup-result-decisiontree-v3","provenanceaction":{"classid":"sysimport:dedup","classname":"sysimport:dedup","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1701811731058,"id":"50|dedup_wf_001::5ff833ef4a38d08e840935d5c52fc479","originalId":["oai:irdb.nii.ac.jp:01292:0003046643","50|jairo_______::5ff833ef4a38d08e840935d5c52fc479","oai:irdb.nii.ac.jp:0108/00008334","50|jairo_______::f542b980618630c53c3f8052588dca25"],"pid":[],"dateofcollection":"2023-07-12T02:35:49.772Z","dateoftransformation":"2023-07-12T13:51:55.356Z","extraInfo":[],"oaiprovenance":{"originDescription":{"harvestDate":"2023-07-12T02:35:49.772Z","altered":true,"baseURL":"https%3A%2F%2Firdb.nii.ac.jp%2Foai","identifier":"oai:irdb.nii.ac.jp:01292:0003046643","datestamp":"2023-07-08T10:54:57Z","metadataNamespace":""}},"measures":[{"id":"influence","unit":[{"key":"score","value":"3.244804E-9","dataInfo":{"invisible":false,"inferred":true,"deletedbyinference":false,"trust":"","inferenceprovenance":"update","provenanceaction":{"classid":"measure:bip","classname":"Inferred by OpenAIRE","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"key":"class","value":"C5","dataInfo":{"invisible":false,"inferred":true,"deletedbyinference":false,"trust":"","inferenceprovenance":"update","provenanceaction":{"classid":"measure:bip","classname":"Inferred by OpenAIRE","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}]},{"id":"popularity","unit":[{"key":"score","value":"6.0055183E-10","dataInfo":{"invisible":false,"inferred":true,"deletedbyinference":false,"trust":"","inferenceprovenance":"update","provenanceaction":{"classid":"measure:bip","classname":"Inferred by OpenAIRE","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"key":"class","value":"C5","dataInfo":{"invisible":false,"inferred":true,"deletedbyinference":false,"trust":"","inferenceprovenance":"update","provenanceaction":{"classid":"measure:bip","classname":"Inferred by OpenAIRE","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}]},{"id":"influence_alt","unit":[{"key":"score","value":"0","dataInfo":{"invisible":false,"inferred":true,"deletedbyinference":false,"trust":"","inferenceprovenance":"update","provenanceaction":{"classid":"measure:bip","classname":"Inferred by OpenAIRE","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"key":"class","value":"C5","dataInfo":{"invisible":false,"inferred":true,"deletedbyinference":false,"trust":"","inferenceprovenance":"update","provenanceaction":{"classid":"measure:bip","classname":"Inferred by OpenAIRE","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}]},{"id":"popularity_alt","unit":[{"key":"score","value":"0.0","dataInfo":{"invisible":false,"inferred":true,"deletedbyinference":false,"trust":"","inferenceprovenance":"update","provenanceaction":{"classid":"measure:bip","classname":"Inferred by OpenAIRE","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"key":"class","value":"C5","dataInfo":{"invisible":false,"inferred":true,"deletedbyinference":false,"trust":"","inferenceprovenance":"update","provenanceaction":{"classid":"measure:bip","classname":"Inferred by OpenAIRE","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}]},{"id":"impulse","unit":[{"key":"score","value":"0","dataInfo":{"invisible":false,"inferred":true,"deletedbyinference":false,"trust":"","inferenceprovenance":"update","provenanceaction":{"classid":"measure:bip","classname":"Inferred by OpenAIRE","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"key":"class","value":"C5","dataInfo":{"invisible":false,"inferred":true,"deletedbyinference":false,"trust":"","inferenceprovenance":"update","provenanceaction":{"classid":"measure:bip","classname":"Inferred by OpenAIRE","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}]}],"processingchargeamount":null,"processingchargecurrency":null,"author":[{"fullname":"Shimazaki, Kazushi","name":"Kazushi","surname":"Shimazaki","rank":2,"pid":[],"affiliation":null}],"resulttype":{"classid":"other","classname":"other","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"metaResourceType":null,"language":{"classid":"jpn","classname":"Japanese","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"Reinforced concrete structure","qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"damage level","qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"柱","qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"shear span ratio","qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"損傷レベル","qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"column","qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"鉄筋コンクリート構造","qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"残存軸耐力","qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Residual Axis Load Capacity","qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"せん断スパン比","qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"Eximental study odual axis loadity of reinforced concrete column","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"RC造柱の地震後の残存軸耐力に関する研究","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[],"description":[{"value":"Shear failure of columns may lead to collapse for existence buildings.After a severe earthquake,some buildings collapsed by loss of axial capacity of the columns,however, some buildings have stayed even many columns were fractured by shear.For the examinaton of building collapse,it is required to investigate the axial load capacity of the columns after shear failure and to analyze the building performance using the pertinent analytical model for the columns.This paper investigates the analytical model for the collapse analysis of a building based on Yoshimura’s concept of the failure surface contraction. The reduction rate was obtained as a function of the maximum deformation,shear margin ratio,and so on,using the regression analydid of experimental results. The tested results are explained by this formula with good agreement.","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"Article","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"研究報告書ページ(113)-(118)","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"学術フロンティア研究プロジェクト(2005年度~2009年度) 2008年度 研究成果報告書","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":{"value":"2008-03-31","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"publisher":{"value":"神奈川大学","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"embargoenddate":null,"source":[],"fulltext":[{"value":"https://kanagawa-u.repo.nii.ac.jp/record/4315/files/2008-28.pdf","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"http://klibredb.lib.kanagawa-u.ac.jp/dspace/bitstream/10487/10662/1/2008-28.pdf","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"format":[{"value":"application/pdf","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"contributor":[],"resourcetype":{"classid":"UNKNOWN","classname":"Unknown","schemeid":"dnet:dataCite_resource","schemename":"dnet:dataCite_resource"},"coverage":[],"bestaccessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"context":[],"externalReference":[],"instance":[{"license":null,"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes","openAccessRoute":null},"instancetype":{"classid":"0000","classname":"Unknown","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"instanceTypeMapping":[{"originalType":"Research Paper","typeCode":null,"typeLabel":null,"vocabularyName":"openaire::coar_resource_types_3_1"}],"hostedby":{"key":"10|openaire____::fffd45256148b1de3114788f21179083","value":"JAIRO","dataInfo":null},"url":["https://kanagawa-u.repo.nii.ac.jp/records/4315"],"distributionlocation":"","collectedfrom":{"key":"10|openaire____::fffd45256148b1de3114788f21179083","value":"JAIRO","dataInfo":null},"pid":[],"alternateIdentifier":[],"dateofacceptance":{"value":"2008-03-31","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":{"classid":"0002","classname":"nonPeerReviewed","schemeid":"dnet:review_levels","schemename":"dnet:review_levels"},"measures":null,"fulltext":"https://kanagawa-u.repo.nii.ac.jp/record/4315/files/2008-28.pdf"},{"license":null,"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes","openAccessRoute":null},"instancetype":{"classid":"0000","classname":"Unknown","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"instanceTypeMapping":[{"originalType":"Article","typeCode":"http://purl.org/coar/resource_type/c_2df8fbb1","typeLabel":"research article","vocabularyName":"openaire::coar_resource_types_3_1"},{"originalType":"http://purl.org/coar/resource_type/c_2df8fbb1","typeCode":"Article","typeLabel":"Article","vocabularyName":"openaire::user_resource_types"}],"hostedby":{"key":"10|openaire____::fffd45256148b1de3114788f21179083","value":"JAIRO","dataInfo":null},"url":["http://hdl.handle.net/10487/10662"],"distributionlocation":"","collectedfrom":{"key":"10|openaire____::fffd45256148b1de3114788f21179083","value":"JAIRO","dataInfo":null},"pid":[],"alternateIdentifier":[],"dateofacceptance":{"value":"2008-03-31","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargeamount":null,"processingchargecurrency":null,"refereed":{"classid":"0002","classname":"nonPeerReviewed","schemeid":"dnet:review_levels","schemename":"dnet:review_levels"},"measures":null,"fulltext":"http://klibredb.lib.kanagawa-u.ac.jp/dspace/bitstream/10487/10662/1/2008-28.pdf"}],"eoscifguidelines":[],"openAccessColor":"bronze","publiclyFunded":false,"contactperson":[],"contactgroup":[],"tool":[],"isGreen":true,"isInDiamondJournal":false} \ No newline at end of file From aba95ed1d17a1683729ebddf2afff785bcb5e138 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Fri, 8 Dec 2023 17:06:19 +0100 Subject: [PATCH 397/449] code formatting --- .../oaf/utils/GraphCleaningFunctions.java | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java index 2c1bc48e3..e6ae37908 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java @@ -16,7 +16,6 @@ import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; -import eu.dnetlib.dhp.common.vocabulary.VocabularyTerm; import org.apache.commons.lang3.StringUtils; import com.github.sisyphsu.dateparser.DateParserUtils; @@ -24,6 +23,7 @@ import com.google.common.collect.Lists; import com.google.common.collect.Sets; import eu.dnetlib.dhp.common.vocabulary.VocabularyGroup; +import eu.dnetlib.dhp.common.vocabulary.VocabularyTerm; import eu.dnetlib.dhp.schema.common.ModelConstants; import eu.dnetlib.dhp.schema.common.ModelSupport; import eu.dnetlib.dhp.schema.oaf.*; @@ -416,10 +416,11 @@ public class GraphCleaningFunctions extends CleaningFunctions { .replaceAll(NAME_CLEANING_REGEX, " ")); if (vocs.vocabularyExists(DNET_PUBLISHERS)) { - vocs.find(DNET_PUBLISHERS) - .map(voc -> voc.getTermBySynonym(r.getPublisher().getValue())) - .map(VocabularyTerm::getName) - .ifPresent(publisher -> r.getPublisher().setValue(publisher)); + vocs + .find(DNET_PUBLISHERS) + .map(voc -> voc.getTermBySynonym(r.getPublisher().getValue())) + .map(VocabularyTerm::getName) + .ifPresent(publisher -> r.getPublisher().setValue(publisher)); } } } @@ -582,10 +583,11 @@ public class GraphCleaningFunctions extends CleaningFunctions { } if (Objects.nonNull(i.getLicense()) && Objects.nonNull(i.getLicense().getValue())) { - vocs.find(DNET_LICENSES) - .map(voc -> voc.getTermBySynonym(i.getLicense().getValue())) - .map(VocabularyTerm::getId) - .ifPresent(license -> i.getLicense().setValue(license)); + vocs + .find(DNET_LICENSES) + .map(voc -> voc.getTermBySynonym(i.getLicense().getValue())) + .map(VocabularyTerm::getId) + .ifPresent(license -> i.getLicense().setValue(license)); } // from the script from Dimitris From d4eedada71436a7cae1a5ab154598503b8f36e91 Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Sat, 9 Dec 2023 15:20:11 +0100 Subject: [PATCH 398/449] adjusting workflow definition --- .../main/java/eu/dnetlib/dhp/api/Utils.java | 6 ++-- .../dnetlib/dhp/bulktag/SparkBulkTagJob.java | 17 +++++----- .../PrepareDatasourceCountryAssociation.java | 2 +- .../SparkCountryPropagationJob.java | 8 ++--- ...kResultToCommunityFromOrganizationJob.java | 8 ++--- .../SparkResultToCommunityFromProject.java | 8 ++--- .../PrepareResultCommunitySetStep1.java | 2 +- ...parkResultToCommunityThroughSemRelJob.java | 8 ++--- .../eu/dnetlib/dhp/wf/main/job.properties | 15 +++++++++ .../bulktag/oozie_app/workflow.xml | 2 +- .../oozie_app/workflow.xml | 31 +++++++++++++------ 11 files changed, 66 insertions(+), 41 deletions(-) create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/job.properties diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/Utils.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/Utils.java index bb30f55d6..06d0f95c2 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/Utils.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/api/Utils.java @@ -169,7 +169,9 @@ public class Utils implements Serializable { } public static List getCommunityIdList(String baseURL) throws IOException { - return getValidCommunities(baseURL).stream() - .map(community -> community.getId()).collect(Collectors.toList()); + return getValidCommunities(baseURL) + .stream() + .map(community -> community.getId()) + .collect(Collectors.toList()); } } diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/SparkBulkTagJob.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/SparkBulkTagJob.java index 5745515ba..51307ccd1 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/SparkBulkTagJob.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/SparkBulkTagJob.java @@ -105,7 +105,6 @@ public class SparkBulkTagJob { Map>> dsm = cc.getEoscDatasourceMap(); for (String ds : datasources.collectAsList()) { - // final String dsId = ds.substring(3); if (!dsm.containsKey(ds)) { ArrayList> eoscList = new ArrayList<>(); dsm.put(ds, eoscList); @@ -116,13 +115,11 @@ public class SparkBulkTagJob { private static boolean isOKDatasource(Datasource ds) { final String compatibility = ds.getOpenairecompatibility().getClassid(); - boolean isOk = (compatibility.equalsIgnoreCase(OPENAIRE_3) || + return (compatibility.equalsIgnoreCase(OPENAIRE_3) || compatibility.equalsIgnoreCase(OPENAIRE_4) || compatibility.equalsIgnoreCase(OPENAIRE_CRIS) || compatibility.equalsIgnoreCase(OPENAIRE_DATA)) && ds.getCollectedfrom().stream().anyMatch(cf -> cf.getKey().equals(EOSC)); - - return isOk; } private static void execBulkTag( @@ -151,13 +148,13 @@ public class SparkBulkTagJob { .write() .mode(SaveMode.Overwrite) .option("compression", "gzip") - .json(outputPath + e.name());//writing the tagging in the working dir for entity + .json(outputPath + e.name());// writing the tagging in the working dir for entity - readPath(spark, outputPath + e.name(), resultClazz) //copy the tagging in the actual result output path - .write() - .mode(SaveMode.Overwrite) - .option("compression","gzip") - .json(inputPath + e.name()); + readPath(spark, outputPath + e.name(), resultClazz) // copy the tagging in the actual result output path + .write() + .mode(SaveMode.Overwrite) + .option("compression", "gzip") + .json(inputPath + e.name()); }); } diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/countrypropagation/PrepareDatasourceCountryAssociation.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/countrypropagation/PrepareDatasourceCountryAssociation.java index b1720d19d..2ffe6f36d 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/countrypropagation/PrepareDatasourceCountryAssociation.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/countrypropagation/PrepareDatasourceCountryAssociation.java @@ -66,7 +66,7 @@ public class PrepareDatasourceCountryAssociation { conf, isSparkSessionManaged, spark -> { - //removeOutputDir(spark, outputPath); + // removeOutputDir(spark, outputPath); prepareDatasourceCountryAssociation( spark, Arrays.asList(parser.get("whitelist").split(";")), diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/countrypropagation/SparkCountryPropagationJob.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/countrypropagation/SparkCountryPropagationJob.java index 2b0dd7628..17247f812 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/countrypropagation/SparkCountryPropagationJob.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/countrypropagation/SparkCountryPropagationJob.java @@ -98,10 +98,10 @@ public class SparkCountryPropagationJob { .json(outputPath); readPath(spark, outputPath, resultClazz) - .write() - .mode(SaveMode.Overwrite) - .option("compression","gzip") - .json(sourcePath); + .write() + .mode(SaveMode.Overwrite) + .option("compression", "gzip") + .json(sourcePath); } diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromorganization/SparkResultToCommunityFromOrganizationJob.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromorganization/SparkResultToCommunityFromOrganizationJob.java index 9152b1f5a..adb7feef7 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromorganization/SparkResultToCommunityFromOrganizationJob.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromorganization/SparkResultToCommunityFromOrganizationJob.java @@ -94,10 +94,10 @@ public class SparkResultToCommunityFromOrganizationJob { .json(outputPath + e.name()); readPath(spark, outputPath + e.name(), resultClazz) - .write() - .mode(SaveMode.Overwrite) - .option("compression","gzip") - .json(inputPath + e.name()); + .write() + .mode(SaveMode.Overwrite) + .option("compression", "gzip") + .json(inputPath + e.name()); } }); diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/SparkResultToCommunityFromProject.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/SparkResultToCommunityFromProject.java index 547891584..229ac7e32 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/SparkResultToCommunityFromProject.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/SparkResultToCommunityFromProject.java @@ -104,10 +104,10 @@ public class SparkResultToCommunityFromProject implements Serializable { .json(outputPath + e.name()); readPath(spark, outputPath + e.name(), resultClazz) - .write() - .mode(SaveMode.Overwrite) - .option("compression","gzip") - .json(inputPath + e.name()); + .write() + .mode(SaveMode.Overwrite) + .option("compression", "gzip") + .json(inputPath + e.name()); } }); diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromsemrel/PrepareResultCommunitySetStep1.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromsemrel/PrepareResultCommunitySetStep1.java index 73c4e2d7c..40c074a6e 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromsemrel/PrepareResultCommunitySetStep1.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromsemrel/PrepareResultCommunitySetStep1.java @@ -8,7 +8,6 @@ import java.io.IOException; import java.util.Arrays; import java.util.List; -import eu.dnetlib.dhp.api.Utils; import org.apache.commons.io.IOUtils; import org.apache.spark.SparkConf; import org.apache.spark.sql.*; @@ -17,6 +16,7 @@ import org.slf4j.LoggerFactory; import com.google.gson.Gson; +import eu.dnetlib.dhp.api.Utils; import eu.dnetlib.dhp.application.ArgumentApplicationParser; import eu.dnetlib.dhp.resulttocommunityfromorganization.ResultCommunityList; import eu.dnetlib.dhp.schema.oaf.Relation; diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromsemrel/SparkResultToCommunityThroughSemRelJob.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromsemrel/SparkResultToCommunityThroughSemRelJob.java index bb7ff1fb7..a10737849 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromsemrel/SparkResultToCommunityThroughSemRelJob.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromsemrel/SparkResultToCommunityThroughSemRelJob.java @@ -102,10 +102,10 @@ public class SparkResultToCommunityThroughSemRelJob { .json(outputPath); readPath(spark, outputPath, resultClazz) - .write() - .mode(SaveMode.Overwrite) - .option("compression","gzip") - .json(inputPath); + .write() + .mode(SaveMode.Overwrite) + .option("compression", "gzip") + .json(inputPath); } private static MapFunction, R> contextUpdaterFn() { diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/job.properties b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/job.properties new file mode 100644 index 000000000..6b9b5063f --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/job.properties @@ -0,0 +1,15 @@ +sourcePath=/tmp/beta_provision/graph/09_graph_dedup_enriched +resumeFrom=OrcidPropagation +allowedsemrelsorcidprop=isSupplementedBy;isSupplementTo +allowedsemrelsresultproject=isSupplementedBy;isSupplementTo +allowedsemrelscommunitysemrel=isSupplementedBy;isSupplementTo +datasourceWhitelistForCountryPropagation=10|openaire____::3795d6478e30e2c9f787d427ff160944;10|opendoar____::16e6a3326dd7d868cbc926602a61e4d0;10|eurocrisdris::fe4903425d9040f680d8610d9079ea14 +allowedtypes=pubsrepository::institutional +outputPath=/tmp/miriam/enrichment_one_step +organizationtoresultcommunitymap={"20|corda__h2020::3fb05a9524c3f790391261347852f638":["mes","euromarine"], "20|corda__h2020::e8dbe14cca9bf6fce09d468872f813f8":["mes","euromarine"], "20|snsf________::9b253f265e3bef5cae6d881fdf61aceb":["mes","euromarine"],"20|ukri________::e054eea0a47665af8c3656b5785ccf76":["mes","euromarine"],"20|corda__h2020::edc18d67c9b11fb616ca9f6e1db1b151":["mes","euromarine"],"20|ukri________::d5736d9da90521ddcdc7828a05a85e9a":["mes","euromarine"],"20|corda__h2020::f5d418d3aa1cf817ddefcc3fdc039f27":["mes","euromarine"],"20|snsf________::8fa091f8f25a846779acb4ea97b50aef":["mes","euromarine"],"20|corda__h2020::81e020977211c2c40fae2e1a50bffd71":["mes","euromarine"],"20|corda_______::81e020977211c2c40fae2e1a50bffd71":["mes","euromarine"],"20|snsf________::31d0a100e54e3cdb3c6f52d91e638c78":["mes","euromarine"],"20|corda__h2020::ea379ef91b8cc86f9ac5edc4169292db":["mes","euromarine"],"20|corda__h2020::f75ee2ee48e5cb0ec8c8d30aaa8fef70":["mes","euromarine"],"20|ukri________::e16010089551a1a9182a94604fc0ea59":["mes","euromarine"],"20|corda__h2020::38531a2cce7c5c347ffc439b07c1f43b":["mes","euromarine"],"20|corda_______::38531a2cce7c5c347ffc439b07c1f43b":["mes","euromarine"],"20|grid________::b2cbbf5eadbbf87d534b022bad3191d7":["mes","euromarine"],"20|snsf________::74730ef1439d7f7636a8be58a6b471b8":["mes","euromarine"],"20|nsf_________::ad72e19043a5a467e35f9b444d11563e":["mes","euromarine"],"20|ukri________::0fc3e92500290902a2d38ec2445e74c3":["mes","euromarine"],"20|grid________::ad2c29905da0eb3c06b3fa80cacd89ea":["mes","euromarine"],"20|corda__h2020::30b53e4d63d3724f00acb9cbaca40860":["mes","euromarine"],"20|corda__h2020::f60f84bee14ad93f0db0e49af1d5c317":["mes","euromarine"], "20|corda__h2020::7bf251ac3765b5e89d82270a1763d09f":["mes","euromarine"], "20|corda__h2020::65531bd11be9935948c7f2f4db1c1832":["mes","euromarine"], "20|corda__h2020::e0e98f86bbc76638bbb72a8fe2302946":["mes","euromarine"], "20|snsf________::3eb43582ac27601459a8d8b3e195724b":["mes","euromarine"], "20|corda__h2020::af2481dab65d06c8ea0ae02b5517b9b6":["mes","euromarine"], "20|corda__h2020::c19d05cfde69a50d3ebc89bd0ee49929":["mes","euromarine"], "20|corda__h2020::af0bfd9fc09f80d9488f56d71a9832f0":["mes","euromarine"], "20|ukri________::f33c02afb0dc66c49d0ed97ca5dd5cb0":["beopen"], "20|grid________::a867f78acdc5041b34acfe4f9a349157":["beopen"], "20|grid________::7bb116a1a9f95ab812bf9d2dea2be1ff":["beopen"], "20|corda__h2020::6ab0e0739dbe625b99a2ae45842164ad":["beopen"], "20|corda__h2020::8ba50792bc5f4d51d79fca47d860c602":["beopen"], "20|corda_______::8ba50792bc5f4d51d79fca47d860c602":["beopen"], "20|corda__h2020::e70e9114979e963eef24666657b807c3":["beopen"], "20|corda_______::e70e9114979e963eef24666657b807c3":["beopen"], "20|corda_______::15911e01e9744d57205825d77c218737":["beopen"], "20|opendoar____::056a41e24e2a9a67215e87bbee6a80ab":["beopen"], "20|opendoar____::7f67f2e6c6fbb0628f8160fcd3d92ae3":["beopen"], "20|grid________::a8ecfd7c084e561168bcbe6bf0daf3e3":["beopen"], "20|corda_______::7bbe6cc5d8ec1864739a04b0d020c9e9":["beopen"], "20|corda_______::3ff558e30c2e434d688539548300b050":["beopen"], "20|corda__h2020::5ffee5b3b83b33a8cf0e046877bd3a39":["beopen"], "20|corda__h2020::5187217e2e806a6df3579c46f82401bc":["beopen"], "20|grid________::5fa7e2709bcd945e26bfa18689adeec1":["beopen"], "20|corda_______::d8696683c53027438031a96ad27c3c07":["beopen"], "20|corda__h2020::d8696683c53027438031a96ad27c3c07":["beopen"], "20|ukri________::23a79ebdfa59790864e4a485881568c1":["beopen"], "20|corda__h2020::b76cf8fe49590a966953c37e18608af9":["beopen"], "20|grid________::d2f0204126ee709244a488a4cd3b91c2":["beopen"], "20|corda__h2020::05aba9d2ed17533d15221e5655ac11e6":["beopen"], "20|grid________::802401579481dc32062bdee69f5e6a34":["beopen"], "20|corda__h2020::3f6d9d54cac975a517ba6b252c81582d":["beopen"], "20|openorgs____::d11f981828c485cd23d93f7f24f24db1":["eut"], "20|openorgs____::e66fe5dd092752e1dd6fd29fc699933a":["eut"], "20|openorgs____::526468206bca24c1c90da6a312295cf4":["eut"], "20|openorgs____::08e311e656e65ccb32e07c66b15b6ff7":["eut"], "20|openorgs____::55a1f889758964b77682904218fdb298":["eut"], "20|openorgs____::530092b6970d60a5329beb9f39e8d7d4":["eut"], "20|openorgs____::aadafa39392b3e200102596a3a4aad9d":["eut"], "20|openorgs____::c3fe999c74fad308132b8a5971367dce":["eut"], "20|openorgs____::1624ff7c01bb641b91f4518539a0c28a":["aurora"], "20|openorgs____::cdda7cfe17c89eb50628ec2eb1f8acd2":["aurora"], "20|openorgs____::818b75030e0e40612d69e049843ede7e":["aurora"], "20|openorgs____::0b0102bae51f4f4ef5ba57fbe1523b92":["aurora"], "20|openorgs____::ed47496b44722f0e9d7b98898189be0d":["aurora"], "20|openorgs____::eb0669daa9efeb898a3090d8aac7c953":["aurora"], "20|openorgs____::eb391317ed0dc684aa81ac16265de041":["aurora"], "20|openorgs____::f7cfcc98245e22c7d6e321cde930e746":["aurora"], "20|openorgs____::f33179d3306ba2599f7a898b056b604f":["aurora"], "20|pending_org_::75c41e6dd18466709ef359323d96fa05":["aurora"]} +pathMap={"author" : "$['author'][*]['fullname']", "title" : "$['title'][*]['value']", "orcid":"orcid":"$['author'][*]['pid'][*][?(@['qualifier']['classid']=='orcid')]['value']", "contributor" : "$['contributor'][*]['value']", "description" : "$['description'][*]['value']"} +blacklist=empty +allowedpids=orcid;orcid_pending +baseURL = https://services.openaire.eu/openaire/community/ + + diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/bulktag/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/bulktag/oozie_app/workflow.xml index a735e2b0e..307997d4c 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/bulktag/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/bulktag/oozie_app/workflow.xml @@ -51,7 +51,7 @@ --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} --sourcePath${sourcePath}/ - --workingPath${workingDir}/bulktag/ + --outputPath${workingDir}/bulktag/ --pathMap${pathMap} --baseURL${baseURL} diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/orcidtoresultfromsemrel/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/orcidtoresultfromsemrel/oozie_app/workflow.xml index 6d800d6e2..8e945ee5a 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/orcidtoresultfromsemrel/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/orcidtoresultfromsemrel/oozie_app/workflow.xml @@ -80,7 +80,14 @@ - + + + + + + + + @@ -258,6 +265,7 @@ --sourcePath${sourcePath}/publication --resultTableNameeu.dnetlib.dhp.schema.oaf.Publication --outputPath${outputPath}/publication + --hive_metastore_uris${hive_metastore_uris} @@ -288,6 +296,7 @@ --sourcePath${sourcePath}/dataset --resultTableNameeu.dnetlib.dhp.schema.oaf.Dataset --outputPath${outputPath}/dataset + --hive_metastore_uris${hive_metastore_uris} @@ -318,6 +327,7 @@ --sourcePath${sourcePath}/otherresearchproduct --resultTableNameeu.dnetlib.dhp.schema.oaf.OtherResearchProduct --outputPath${outputPath}/otherresearchproduct + --hive_metastore_uris${hive_metastore_uris} @@ -348,21 +358,22 @@ --sourcePath${sourcePath}/software --resultTableNameeu.dnetlib.dhp.schema.oaf.Software --outputPath${outputPath}/software + --hive_metastore_uris${hive_metastore_uris} - + - - - - - - - - + + + + + + + + From 8752d275fae9bc7764cd2ee049b6321d44b70528 Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Sat, 9 Dec 2023 15:24:45 +0100 Subject: [PATCH 399/449] removed not needed parameter --- .../SparkOrcidToResultFromSemRelJob.java | 7 ++++--- .../input_orcidtoresult_parameters.json | 6 ------ .../orcidtoresultfromsemrel/oozie_app/workflow.xml | 4 ---- 3 files changed, 4 insertions(+), 13 deletions(-) diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/orcidtoresultfromsemrel/SparkOrcidToResultFromSemRelJob.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/orcidtoresultfromsemrel/SparkOrcidToResultFromSemRelJob.java index a38b4da2e..998f4719a 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/orcidtoresultfromsemrel/SparkOrcidToResultFromSemRelJob.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/orcidtoresultfromsemrel/SparkOrcidToResultFromSemRelJob.java @@ -2,7 +2,8 @@ package eu.dnetlib.dhp.orcidtoresultfromsemrel; import static eu.dnetlib.dhp.PropagationConstant.*; -import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkHiveSession; + +import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkSession; import java.util.List; import java.util.Optional; @@ -65,9 +66,9 @@ public class SparkOrcidToResultFromSemRelJob { Class resultClazz = (Class) Class.forName(resultClassName); SparkConf conf = new SparkConf(); - conf.set("hive.metastore.uris", parser.get("hive_metastore_uris")); - runWithSparkHiveSession( + + runWithSparkSession( conf, isSparkSessionManaged, spark -> { diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/orcidtoresultfromsemrel/input_orcidtoresult_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/orcidtoresultfromsemrel/input_orcidtoresult_parameters.json index d8aa7eb9a..3cbaa23bb 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/orcidtoresultfromsemrel/input_orcidtoresult_parameters.json +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/orcidtoresultfromsemrel/input_orcidtoresult_parameters.json @@ -11,12 +11,6 @@ "paramDescription": "true if the new version of the graph must be saved", "paramRequired": false }, - { - "paramName":"h", - "paramLongName":"hive_metastore_uris", - "paramDescription": "the hive metastore uris", - "paramRequired": true - }, { "paramName": "out", "paramLongName": "outputPath", diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/orcidtoresultfromsemrel/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/orcidtoresultfromsemrel/oozie_app/workflow.xml index 8e945ee5a..483a805b1 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/orcidtoresultfromsemrel/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/orcidtoresultfromsemrel/oozie_app/workflow.xml @@ -265,7 +265,6 @@ --sourcePath${sourcePath}/publication --resultTableNameeu.dnetlib.dhp.schema.oaf.Publication --outputPath${outputPath}/publication - --hive_metastore_uris${hive_metastore_uris} @@ -296,7 +295,6 @@ --sourcePath${sourcePath}/dataset --resultTableNameeu.dnetlib.dhp.schema.oaf.Dataset --outputPath${outputPath}/dataset - --hive_metastore_uris${hive_metastore_uris} @@ -327,7 +325,6 @@ --sourcePath${sourcePath}/otherresearchproduct --resultTableNameeu.dnetlib.dhp.schema.oaf.OtherResearchProduct --outputPath${outputPath}/otherresearchproduct - --hive_metastore_uris${hive_metastore_uris} @@ -358,7 +355,6 @@ --sourcePath${sourcePath}/software --resultTableNameeu.dnetlib.dhp.schema.oaf.Software --outputPath${outputPath}/software - --hive_metastore_uris${hive_metastore_uris} From 7e8eff40c1660d5d277fdc36ff87d2e264e6549d Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Tue, 12 Dec 2023 08:54:15 +0100 Subject: [PATCH 400/449] [graph provision] added tests for the new model fields --- .../dhp/oa/provision/XmlIndexingJobTest.java | 34 ++- .../oa/provision/XmlRecordFactoryTest.java | 8 +- .../eu/dnetlib/dhp/oa/provision/fields.xml | 242 ++++++++++-------- .../dnetlib/dhp/oa/provision/publication.json | 10 +- .../conf/exploreTestConfig/managed-schema | 18 +- .../solr/conf/testConfig/managed-schema | 6 + 6 files changed, 183 insertions(+), 135 deletions(-) diff --git a/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/XmlIndexingJobTest.java b/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/XmlIndexingJobTest.java index 6f1956578..47f0ec8c3 100644 --- a/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/XmlIndexingJobTest.java +++ b/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/XmlIndexingJobTest.java @@ -4,6 +4,7 @@ package eu.dnetlib.dhp.oa.provision; import java.io.IOException; import java.io.StringReader; import java.net.URI; +import java.util.Map; import org.apache.commons.io.IOUtils; import org.apache.hadoop.io.Text; @@ -11,6 +12,7 @@ import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.common.SolrInputField; import org.apache.solr.common.params.CommonParams; +import org.apache.solr.common.params.ModifiableSolrParams; import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaPairRDD; import org.apache.spark.api.java.JavaSparkContext; @@ -30,6 +32,8 @@ import eu.dnetlib.dhp.oa.provision.utils.ISLookupClient; import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpException; import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpService; +import static org.junit.jupiter.api.Assertions.assertEquals; + @ExtendWith(MockitoExtension.class) public class XmlIndexingJobTest extends SolrTest { @@ -101,14 +105,34 @@ public class XmlIndexingJobTest extends SolrTest { new XmlIndexingJob(spark, inputPath, FORMAT, batchSize, XmlIndexingJob.OutputFormat.SOLR, null) .run(isLookupClient); - Assertions.assertEquals(0, miniCluster.getSolrClient().commit().getStatus()); + assertEquals(0, miniCluster.getSolrClient().commit().getStatus()); QueryResponse rsp = miniCluster.getSolrClient().query(new SolrQuery().add(CommonParams.Q, "*:*")); - Assertions - .assertEquals( + assertEquals( nRecord, rsp.getResults().getNumFound(), "the number of indexed records should be equal to the number of input records"); + + + rsp = miniCluster.getSolrClient().query(new SolrQuery().add(CommonParams.Q, "isgreen:true")); + assertEquals( + 0, rsp.getResults().getNumFound(), + "the number of indexed records having isgreen = true"); + + rsp = miniCluster.getSolrClient().query(new SolrQuery().add(CommonParams.Q, "openaccesscolor:bronze")); + assertEquals( + 0, rsp.getResults().getNumFound(), + "the number of indexed records having openaccesscolor = bronze"); + + rsp = miniCluster.getSolrClient().query(new SolrQuery().add(CommonParams.Q, "isindiamondjournal:true")); + assertEquals( + 0, rsp.getResults().getNumFound(), + "the number of indexed records having isindiamondjournal = true"); + + rsp = miniCluster.getSolrClient().query(new SolrQuery().add(CommonParams.Q, "publiclyfunded:true")); + assertEquals( + 0, rsp.getResults().getNumFound(), + "the number of indexed records having publiclyfunded = publiclyfunded"); } @Test @@ -126,7 +150,7 @@ public class XmlIndexingJobTest extends SolrTest { .map(s -> new SAXReader().read(new StringReader(s)).valueOf(ID_XPATH)) .distinct() .count(); - Assertions.assertEquals(nRecord, xmlIdUnique, "IDs should be unique among input records"); + assertEquals(nRecord, xmlIdUnique, "IDs should be unique among input records"); final String outputPath = workingDir.resolve("outputPath").toAbsolutePath().toString(); new XmlIndexingJob(spark, inputPath, FORMAT, batchSize, XmlIndexingJob.OutputFormat.HDFS, outputPath) @@ -142,7 +166,7 @@ public class XmlIndexingJobTest extends SolrTest { }, Encoders.STRING()) .distinct() .count(); - Assertions.assertEquals(xmlIdUnique, docIdUnique, "IDs should be unique among the output records"); + assertEquals(xmlIdUnique, docIdUnique, "IDs should be unique among the output records"); } diff --git a/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/XmlRecordFactoryTest.java b/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/XmlRecordFactoryTest.java index 88bffd0e7..097d36d05 100644 --- a/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/XmlRecordFactoryTest.java +++ b/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/XmlRecordFactoryTest.java @@ -32,7 +32,7 @@ public class XmlRecordFactoryTest { .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); @Test - public void testXMLRecordFactory() throws IOException, DocumentException { + void testXMLRecordFactory() throws IOException, DocumentException { final ContextMapper contextMapper = new ContextMapper(); @@ -93,6 +93,12 @@ public class XmlRecordFactoryTest { "https://osf.io/preprints/socarxiv/7vgtu/download", doc.valueOf("//*[local-name() = 'result']/fulltext[1]")); + assertEquals("true", doc.valueOf("//*[local-name() = 'result']/isgreen/text()")); + assertEquals("bronze", doc.valueOf("//*[local-name() = 'result']/openaccesscolor/text()")); + assertEquals("true", doc.valueOf("//*[local-name() = 'result']/isindiamondjournal/text()")); + assertEquals("true", doc.valueOf("//*[local-name() = 'result']/publiclyfunded/text()")); + + System.out.println(doc.asXML()); } @Test diff --git a/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/fields.xml b/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/fields.xml index 0bf588a57..513ead1dd 100644 --- a/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/fields.xml +++ b/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/fields.xml @@ -1,116 +1,134 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/publication.json b/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/publication.json index 4ba20292c..a89ec62d5 100644 --- a/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/publication.json +++ b/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/publication.json @@ -1048,8 +1048,8 @@ "schemename": "dnet:dataCite_resource" }, "refereed": { - "classid": "0001", - "classname": "peerReviewed", + "classid": "0002", + "classname": "nonPeerReviewed", "schemeid": "dnet:review_levels", "schemename": "dnet:review_levels" }, @@ -1949,5 +1949,9 @@ "schemename": "dnet:provenanceActions" } } - } + }, + "isGreen": true, + "openAccessColor": "bronze", + "isInDiamondJournal": true, + "publiclyFunded": true } \ No newline at end of file diff --git a/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/solr/conf/exploreTestConfig/managed-schema b/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/solr/conf/exploreTestConfig/managed-schema index 39c811f83..28a439619 100644 --- a/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/solr/conf/exploreTestConfig/managed-schema +++ b/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/solr/conf/exploreTestConfig/managed-schema @@ -219,20 +219,6 @@ - - - - - - - - - - - - - - @@ -368,6 +354,10 @@ + + + + diff --git a/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/solr/conf/testConfig/managed-schema b/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/solr/conf/testConfig/managed-schema index 977e0b2d7..962e0cc6f 100644 --- a/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/solr/conf/testConfig/managed-schema +++ b/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/solr/conf/testConfig/managed-schema @@ -365,7 +365,13 @@ + + + + + + From 84d54643cf55d86d42cea236569c84a1b2c339bc Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Tue, 12 Dec 2023 09:57:00 +0100 Subject: [PATCH 401/449] [cleaning] allow enriched orcids to pass the cleaning, rule out non-orcid author pids --- .../dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java index e6ae37908..8700ea527 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java @@ -689,6 +689,7 @@ public class GraphCleaningFunctions extends CleaningFunctions { .filter(Objects::nonNull) .filter(p -> Objects.nonNull(p.getQualifier())) .filter(p -> StringUtils.isNotBlank(p.getValue())) + .filter(p -> StringUtils.contains(StringUtils.lowerCase(p.getQualifier().getClassid()), ORCID)) .map(p -> { // hack to distinguish orcid from orcid_pending String pidProvenance = getProvenance(p.getDataInfo()); @@ -698,7 +699,8 @@ public class GraphCleaningFunctions extends CleaningFunctions { .toLowerCase() .contains(ModelConstants.ORCID)) { if (pidProvenance - .equals(ModelConstants.SYSIMPORT_CROSSWALK_ENTITYREGISTRY)) { + .equals(ModelConstants.SYSIMPORT_CROSSWALK_ENTITYREGISTRY) || + pidProvenance.equals("ORCID_ENRICHMENT")) { p.getQualifier().setClassid(ModelConstants.ORCID); } else { p.getQualifier().setClassid(ModelConstants.ORCID_PENDING); From 98cce5bfb22c5d761fbf7044834959efdec4e31e Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Tue, 12 Dec 2023 09:59:05 +0100 Subject: [PATCH 402/449] code formatting --- .../dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java index 8700ea527..0124e96fc 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/GraphCleaningFunctions.java @@ -689,7 +689,9 @@ public class GraphCleaningFunctions extends CleaningFunctions { .filter(Objects::nonNull) .filter(p -> Objects.nonNull(p.getQualifier())) .filter(p -> StringUtils.isNotBlank(p.getValue())) - .filter(p -> StringUtils.contains(StringUtils.lowerCase(p.getQualifier().getClassid()), ORCID)) + .filter( + p -> StringUtils + .contains(StringUtils.lowerCase(p.getQualifier().getClassid()), ORCID)) .map(p -> { // hack to distinguish orcid from orcid_pending String pidProvenance = getProvenance(p.getDataInfo()); From ff924215b8e457b3e05e98792db0c6b3bdd0fa0d Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Tue, 12 Dec 2023 11:21:30 +0100 Subject: [PATCH 403/449] [graph provision] added tests for new peerreviewed field --- .../provision/IndexRecordTransformerTest.java | 20 ++++++++++++++++++- .../dhp/oa/provision/XmlIndexingJobTest.java | 7 ++++++- .../oa/provision/XmlRecordFactoryTest.java | 2 -- .../eu/dnetlib/dhp/oa/provision/fields.xml | 3 +++ .../conf/exploreTestConfig/managed-schema | 1 + .../solr/conf/testConfig/managed-schema | 1 + 6 files changed, 30 insertions(+), 4 deletions(-) diff --git a/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/IndexRecordTransformerTest.java b/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/IndexRecordTransformerTest.java index ce593cf07..e07ba1b4e 100644 --- a/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/IndexRecordTransformerTest.java +++ b/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/IndexRecordTransformerTest.java @@ -78,6 +78,22 @@ public class IndexRecordTransformerTest { testRecordTransformation(record); } + @Test + void testPeerReviewed() throws IOException, TransformerException { + + final XmlRecordFactory xmlRecordFactory = new XmlRecordFactory(contextMapper, false, + XmlConverterJob.schemaLocation); + + final Publication p = load("publication.json", Publication.class); + + final JoinedEntity je = new JoinedEntity<>(p); + final String record = xmlRecordFactory.build(je); + assertNotNull(record); + SolrInputDocument solrDoc = testRecordTransformation(record); + + assertEquals("true", solrDoc.get("peerreviewed").getValue()); + } + @Test public void testRiunet() throws IOException, TransformerException { @@ -184,7 +200,7 @@ public class IndexRecordTransformerTest { } } - private void testRecordTransformation(final String record) throws IOException, TransformerException { + private SolrInputDocument testRecordTransformation(final String record) throws IOException, TransformerException { final String fields = IOUtils.toString(getClass().getResourceAsStream("fields.xml")); final String xslt = IOUtils.toString(getClass().getResourceAsStream("layoutToRecordTransformer.xsl")); @@ -200,6 +216,8 @@ public class IndexRecordTransformerTest { Assertions.assertNotNull(xmlDoc); System.out.println(xmlDoc); + + return solrDoc; } private T load(final String fileName, final Class clazz) throws IOException { diff --git a/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/XmlIndexingJobTest.java b/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/XmlIndexingJobTest.java index 47f0ec8c3..b62acbac3 100644 --- a/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/XmlIndexingJobTest.java +++ b/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/XmlIndexingJobTest.java @@ -132,7 +132,12 @@ public class XmlIndexingJobTest extends SolrTest { rsp = miniCluster.getSolrClient().query(new SolrQuery().add(CommonParams.Q, "publiclyfunded:true")); assertEquals( 0, rsp.getResults().getNumFound(), - "the number of indexed records having publiclyfunded = publiclyfunded"); + "the number of indexed records having publiclyfunded = true"); + + rsp = miniCluster.getSolrClient().query(new SolrQuery().add(CommonParams.Q, "peerreviewed:true")); + assertEquals( + 0, rsp.getResults().getNumFound(), + "the number of indexed records having peerreviewed = true"); } @Test diff --git a/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/XmlRecordFactoryTest.java b/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/XmlRecordFactoryTest.java index 097d36d05..de69795f8 100644 --- a/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/XmlRecordFactoryTest.java +++ b/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/XmlRecordFactoryTest.java @@ -97,8 +97,6 @@ public class XmlRecordFactoryTest { assertEquals("bronze", doc.valueOf("//*[local-name() = 'result']/openaccesscolor/text()")); assertEquals("true", doc.valueOf("//*[local-name() = 'result']/isindiamondjournal/text()")); assertEquals("true", doc.valueOf("//*[local-name() = 'result']/publiclyfunded/text()")); - - System.out.println(doc.asXML()); } @Test diff --git a/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/fields.xml b/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/fields.xml index 513ead1dd..ba3fa83df 100644 --- a/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/fields.xml +++ b/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/fields.xml @@ -74,6 +74,9 @@ + + + diff --git a/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/solr/conf/exploreTestConfig/managed-schema b/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/solr/conf/exploreTestConfig/managed-schema index 28a439619..4e85ca3be 100644 --- a/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/solr/conf/exploreTestConfig/managed-schema +++ b/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/solr/conf/exploreTestConfig/managed-schema @@ -358,6 +358,7 @@ + diff --git a/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/solr/conf/testConfig/managed-schema b/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/solr/conf/testConfig/managed-schema index 962e0cc6f..e191c6223 100644 --- a/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/solr/conf/testConfig/managed-schema +++ b/dhp-workflows/dhp-graph-provision/src/test/resources/eu/dnetlib/dhp/oa/provision/solr/conf/testConfig/managed-schema @@ -371,6 +371,7 @@ + From 0d8e496a6317943a28282ffdd0ee5a4d735f61f7 Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Fri, 15 Dec 2023 12:16:43 +0100 Subject: [PATCH 404/449] - --- .../SparkOrcidToResultFromSemRelJob.java | 2 - .../AppendNewRelations.java | 75 +++++++++++++++++++ .../PrepareResultInstRepoAssociation.java | 7 +- ...arkResultToOrganizationFromIstRepoJob.java | 2 +- .../input_prepareresultorg_parameters.json | 13 +--- .../eu/dnetlib/dhp/wf/main/job.properties | 17 ++++- .../oozie_app/workflow.xml | 36 +++++++-- 7 files changed, 131 insertions(+), 21 deletions(-) create mode 100644 dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/AppendNewRelations.java diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/orcidtoresultfromsemrel/SparkOrcidToResultFromSemRelJob.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/orcidtoresultfromsemrel/SparkOrcidToResultFromSemRelJob.java index 998f4719a..5f9260e5d 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/orcidtoresultfromsemrel/SparkOrcidToResultFromSemRelJob.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/orcidtoresultfromsemrel/SparkOrcidToResultFromSemRelJob.java @@ -2,7 +2,6 @@ package eu.dnetlib.dhp.orcidtoresultfromsemrel; import static eu.dnetlib.dhp.PropagationConstant.*; - import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkSession; import java.util.List; @@ -67,7 +66,6 @@ public class SparkOrcidToResultFromSemRelJob { SparkConf conf = new SparkConf(); - runWithSparkSession( conf, isSparkSessionManaged, diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/AppendNewRelations.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/AppendNewRelations.java new file mode 100644 index 000000000..a5884873b --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/AppendNewRelations.java @@ -0,0 +1,75 @@ + +package eu.dnetlib.dhp.resulttoorganizationfrominstrepo; + +import static eu.dnetlib.dhp.PropagationConstant.*; +import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkHiveSession; + +import java.io.Serializable; +import java.util.Objects; +import java.util.Optional; + +import org.apache.commons.io.IOUtils; +import org.apache.spark.SparkConf; +import org.apache.spark.api.java.function.MapFunction; +import org.apache.spark.sql.Encoders; +import org.apache.spark.sql.SaveMode; +import org.apache.spark.sql.SparkSession; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import eu.dnetlib.dhp.application.ArgumentApplicationParser; +import eu.dnetlib.dhp.bulktag.community.ResultTagger; +import eu.dnetlib.dhp.schema.common.ModelSupport; +import eu.dnetlib.dhp.schema.oaf.Relation; +import eu.dnetlib.dhp.schema.oaf.Result; + +/** + * @author miriam.baglioni + * @Date 09/12/23 + */ +public class AppendNewRelations implements Serializable { + + private static final Logger log = LoggerFactory.getLogger(AppendNewRelations.class); + + public static void main(String[] args) throws Exception { + + String jsonConfiguration = IOUtils + .toString( + AppendNewRelations.class + .getResourceAsStream( + "/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/input_newrelation_parameters.json")); + + final ArgumentApplicationParser parser = new ArgumentApplicationParser(jsonConfiguration); + + parser.parseArgument(args); + + Boolean isSparkSessionManaged = isSparkSessionManaged(parser); + log.info("isSparkSessionManaged: {}", isSparkSessionManaged); + + String inputPath = parser.get("sourcePath"); + log.info("inputPath: {}", inputPath); + + final String outputPath = parser.get("outputPath"); + log.info("outputPath: {}", outputPath); + + SparkConf conf = new SparkConf(); + + runWithSparkHiveSession( + conf, + isSparkSessionManaged, + spark -> appendNewRelation(spark, inputPath, outputPath)); + } + + private static void appendNewRelation(SparkSession spark, String inputPath, String outputPath) { + + readPath(spark, inputPath + "publication/relation", Relation.class) + .union(readPath(spark, inputPath + "dataset/relation", Relation.class)) + .union(readPath(spark, inputPath + "otherresearchproduct/relation", Relation.class)) + .union(readPath(spark, inputPath + "software/relation", Relation.class)) + .write() + .mode(SaveMode.Append) + .option("compression", "gzip") + .json(outputPath); + } + +} diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/PrepareResultInstRepoAssociation.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/PrepareResultInstRepoAssociation.java index 1663afb32..deec6fedc 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/PrepareResultInstRepoAssociation.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/PrepareResultInstRepoAssociation.java @@ -52,10 +52,13 @@ public class PrepareResultInstRepoAssociation { String inputPath = parser.get("sourcePath"); log.info("inputPath: {}", inputPath); - final String datasourceOrganizationPath = parser.get("datasourceOrganizationPath"); + final String workingPath = parser.get("workingPath"); + log.info("workingPath : {}", workingPath); + + final String datasourceOrganizationPath = workingPath + "/preparedInfo/datasourceOrganization"; log.info("datasourceOrganizationPath {}: ", datasourceOrganizationPath); - final String alreadyLinkedPath = parser.get("alreadyLinkedPath"); + final String alreadyLinkedPath = workingPath + "/preparedInfo/alreadyLinked"; log.info("alreadyLinkedPath {}: ", alreadyLinkedPath); List blacklist = Optional diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/SparkResultToOrganizationFromIstRepoJob.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/SparkResultToOrganizationFromIstRepoJob.java index 0757ebccd..bbad20e2d 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/SparkResultToOrganizationFromIstRepoJob.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/SparkResultToOrganizationFromIstRepoJob.java @@ -119,7 +119,7 @@ public class SparkResultToOrganizationFromIstRepoJob { "left_outer") .flatMap(createRelationFn(), Encoders.bean(Relation.class)) .write() - .mode(SaveMode.Append) + .mode(SaveMode.Overwrite) .option("compression", "gzip") .json(outputPath); } diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/input_prepareresultorg_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/input_prepareresultorg_parameters.json index 2f00bacae..3f4b1d151 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/input_prepareresultorg_parameters.json +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/input_prepareresultorg_parameters.json @@ -11,16 +11,11 @@ "paramDescription": "the hive metastore uris", "paramRequired": true }, + { - "paramName":"dop", - "paramLongName":"datasourceOrganizationPath", - "paramDescription": "path where to store/find association from datasource and organization", - "paramRequired": true - }, - { - "paramName":"alp", - "paramLongName":"alreadyLinkedPath", - "paramDescription": "path where to store/find already linked results and organizations", + "paramName":"wp", + "paramLongName":"workingPath", + "paramDescription": "the working path", "paramRequired": true }, { diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/job.properties b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/job.properties index 6b9b5063f..243c1e99d 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/job.properties +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/job.properties @@ -1,5 +1,5 @@ sourcePath=/tmp/beta_provision/graph/09_graph_dedup_enriched -resumeFrom=OrcidPropagation +resumeFrom=AffiliationInstitutionalRepository allowedsemrelsorcidprop=isSupplementedBy;isSupplementTo allowedsemrelsresultproject=isSupplementedBy;isSupplementTo allowedsemrelscommunitysemrel=isSupplementedBy;isSupplementTo @@ -7,7 +7,20 @@ datasourceWhitelistForCountryPropagation=10|openaire____::3795d6478e30e2c9f787d4 allowedtypes=pubsrepository::institutional outputPath=/tmp/miriam/enrichment_one_step organizationtoresultcommunitymap={"20|corda__h2020::3fb05a9524c3f790391261347852f638":["mes","euromarine"], "20|corda__h2020::e8dbe14cca9bf6fce09d468872f813f8":["mes","euromarine"], "20|snsf________::9b253f265e3bef5cae6d881fdf61aceb":["mes","euromarine"],"20|ukri________::e054eea0a47665af8c3656b5785ccf76":["mes","euromarine"],"20|corda__h2020::edc18d67c9b11fb616ca9f6e1db1b151":["mes","euromarine"],"20|ukri________::d5736d9da90521ddcdc7828a05a85e9a":["mes","euromarine"],"20|corda__h2020::f5d418d3aa1cf817ddefcc3fdc039f27":["mes","euromarine"],"20|snsf________::8fa091f8f25a846779acb4ea97b50aef":["mes","euromarine"],"20|corda__h2020::81e020977211c2c40fae2e1a50bffd71":["mes","euromarine"],"20|corda_______::81e020977211c2c40fae2e1a50bffd71":["mes","euromarine"],"20|snsf________::31d0a100e54e3cdb3c6f52d91e638c78":["mes","euromarine"],"20|corda__h2020::ea379ef91b8cc86f9ac5edc4169292db":["mes","euromarine"],"20|corda__h2020::f75ee2ee48e5cb0ec8c8d30aaa8fef70":["mes","euromarine"],"20|ukri________::e16010089551a1a9182a94604fc0ea59":["mes","euromarine"],"20|corda__h2020::38531a2cce7c5c347ffc439b07c1f43b":["mes","euromarine"],"20|corda_______::38531a2cce7c5c347ffc439b07c1f43b":["mes","euromarine"],"20|grid________::b2cbbf5eadbbf87d534b022bad3191d7":["mes","euromarine"],"20|snsf________::74730ef1439d7f7636a8be58a6b471b8":["mes","euromarine"],"20|nsf_________::ad72e19043a5a467e35f9b444d11563e":["mes","euromarine"],"20|ukri________::0fc3e92500290902a2d38ec2445e74c3":["mes","euromarine"],"20|grid________::ad2c29905da0eb3c06b3fa80cacd89ea":["mes","euromarine"],"20|corda__h2020::30b53e4d63d3724f00acb9cbaca40860":["mes","euromarine"],"20|corda__h2020::f60f84bee14ad93f0db0e49af1d5c317":["mes","euromarine"], "20|corda__h2020::7bf251ac3765b5e89d82270a1763d09f":["mes","euromarine"], "20|corda__h2020::65531bd11be9935948c7f2f4db1c1832":["mes","euromarine"], "20|corda__h2020::e0e98f86bbc76638bbb72a8fe2302946":["mes","euromarine"], "20|snsf________::3eb43582ac27601459a8d8b3e195724b":["mes","euromarine"], "20|corda__h2020::af2481dab65d06c8ea0ae02b5517b9b6":["mes","euromarine"], "20|corda__h2020::c19d05cfde69a50d3ebc89bd0ee49929":["mes","euromarine"], "20|corda__h2020::af0bfd9fc09f80d9488f56d71a9832f0":["mes","euromarine"], "20|ukri________::f33c02afb0dc66c49d0ed97ca5dd5cb0":["beopen"], "20|grid________::a867f78acdc5041b34acfe4f9a349157":["beopen"], "20|grid________::7bb116a1a9f95ab812bf9d2dea2be1ff":["beopen"], "20|corda__h2020::6ab0e0739dbe625b99a2ae45842164ad":["beopen"], "20|corda__h2020::8ba50792bc5f4d51d79fca47d860c602":["beopen"], "20|corda_______::8ba50792bc5f4d51d79fca47d860c602":["beopen"], "20|corda__h2020::e70e9114979e963eef24666657b807c3":["beopen"], "20|corda_______::e70e9114979e963eef24666657b807c3":["beopen"], "20|corda_______::15911e01e9744d57205825d77c218737":["beopen"], "20|opendoar____::056a41e24e2a9a67215e87bbee6a80ab":["beopen"], "20|opendoar____::7f67f2e6c6fbb0628f8160fcd3d92ae3":["beopen"], "20|grid________::a8ecfd7c084e561168bcbe6bf0daf3e3":["beopen"], "20|corda_______::7bbe6cc5d8ec1864739a04b0d020c9e9":["beopen"], "20|corda_______::3ff558e30c2e434d688539548300b050":["beopen"], "20|corda__h2020::5ffee5b3b83b33a8cf0e046877bd3a39":["beopen"], "20|corda__h2020::5187217e2e806a6df3579c46f82401bc":["beopen"], "20|grid________::5fa7e2709bcd945e26bfa18689adeec1":["beopen"], "20|corda_______::d8696683c53027438031a96ad27c3c07":["beopen"], "20|corda__h2020::d8696683c53027438031a96ad27c3c07":["beopen"], "20|ukri________::23a79ebdfa59790864e4a485881568c1":["beopen"], "20|corda__h2020::b76cf8fe49590a966953c37e18608af9":["beopen"], "20|grid________::d2f0204126ee709244a488a4cd3b91c2":["beopen"], "20|corda__h2020::05aba9d2ed17533d15221e5655ac11e6":["beopen"], "20|grid________::802401579481dc32062bdee69f5e6a34":["beopen"], "20|corda__h2020::3f6d9d54cac975a517ba6b252c81582d":["beopen"], "20|openorgs____::d11f981828c485cd23d93f7f24f24db1":["eut"], "20|openorgs____::e66fe5dd092752e1dd6fd29fc699933a":["eut"], "20|openorgs____::526468206bca24c1c90da6a312295cf4":["eut"], "20|openorgs____::08e311e656e65ccb32e07c66b15b6ff7":["eut"], "20|openorgs____::55a1f889758964b77682904218fdb298":["eut"], "20|openorgs____::530092b6970d60a5329beb9f39e8d7d4":["eut"], "20|openorgs____::aadafa39392b3e200102596a3a4aad9d":["eut"], "20|openorgs____::c3fe999c74fad308132b8a5971367dce":["eut"], "20|openorgs____::1624ff7c01bb641b91f4518539a0c28a":["aurora"], "20|openorgs____::cdda7cfe17c89eb50628ec2eb1f8acd2":["aurora"], "20|openorgs____::818b75030e0e40612d69e049843ede7e":["aurora"], "20|openorgs____::0b0102bae51f4f4ef5ba57fbe1523b92":["aurora"], "20|openorgs____::ed47496b44722f0e9d7b98898189be0d":["aurora"], "20|openorgs____::eb0669daa9efeb898a3090d8aac7c953":["aurora"], "20|openorgs____::eb391317ed0dc684aa81ac16265de041":["aurora"], "20|openorgs____::f7cfcc98245e22c7d6e321cde930e746":["aurora"], "20|openorgs____::f33179d3306ba2599f7a898b056b604f":["aurora"], "20|pending_org_::75c41e6dd18466709ef359323d96fa05":["aurora"]} -pathMap={"author" : "$['author'][*]['fullname']", "title" : "$['title'][*]['value']", "orcid":"orcid":"$['author'][*]['pid'][*][?(@['qualifier']['classid']=='orcid')]['value']", "contributor" : "$['contributor'][*]['value']", "description" : "$['description'][*]['value']"} +pathMap ={"author":"$['author'][*]['fullname']", \ + "title":"$['title'][*]['value']",\ + "orcid":"$['author'][*]['pid'][*][?(@['qualifier']['classid']=='orcid')]['value']" ,\ + "orcid_pending":"$['author'][*]['pid'][*][?(@['qualifier']['classid']=='orcid_pending')]['value']" ,\ + "contributor" : "$['contributor'][*]['value']",\ + "description" : "$['description'][*]['value']",\ + "subject" :"$['subject'][*]['value']" , \ + "fos" : "$['subject'][?(@['qualifier']['classid']=='FOS')].value" ,\ + "sdg" : "$['subject'][?(@['qualifier']['classid']=='SDG')].value",\ + "journal":"$['journal'].name",\ + "hostedby":"$['instance'][*]['hostedby']['key']",\ + "collectedfrom":"$['instance'][*]['collectedfrom']['key']",\ + "publisher":"$['publisher'].value",\ + "publicationyear":"$['dateofacceptance'].value"} blacklist=empty allowedpids=orcid;orcid_pending baseURL = https://services.openaire.eu/openaire/community/ diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttoorganizationfrominstrepo/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttoorganizationfrominstrepo/oozie_app/workflow.xml index 8281130f3..dadea2d28 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttoorganizationfrominstrepo/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttoorganizationfrominstrepo/oozie_app/workflow.xml @@ -47,6 +47,7 @@ --sourcePath${sourcePath} --workingPath${workingDir}/affiliationInstRepo --blacklist${blacklist} + --hive_metastore_uris${hive_metastore_uris} @@ -78,7 +79,7 @@ --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} --sourcePath${sourcePath}/publication - --outputPath${sourcePath}/relation + --outputPath${workingDir}/affiliationinstrepo/publication/relation --datasourceOrganizationPath${workingDir}/affiliationInstRepo/preparedInfo/datasourceOrganization --alreadyLinkedPath${workingDir}/affiliationInstRepo/preparedInfo/alreadyLinked --hive_metastore_uris${hive_metastore_uris} @@ -107,7 +108,7 @@ --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} --sourcePath${sourcePath}/dataset - --outputPath${sourcePath}/relation + --outputPath${workingDir}/affiliationinstrepo/dataset/relation --datasourceOrganizationPath${workingDir}/affiliationInstRepo/preparedInfo/datasourceOrganization --alreadyLinkedPath${workingDir}/affiliationInstRepo/preparedInfo/alreadyLinked --hive_metastore_uris${hive_metastore_uris} @@ -136,7 +137,7 @@ --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} --sourcePath${sourcePath}/otherresearchproduct - --outputPath${sourcePath}/relation + --outputPath${workingDir}/affiliationinstrepo/otherresearchproduct/relation --datasourceOrganizationPath${workingDir}/affiliationInstRepo/preparedInfo/datasourceOrganization --alreadyLinkedPath${workingDir}/affiliationInstRepo/preparedInfo/alreadyLinked --hive_metastore_uris${hive_metastore_uris} @@ -165,7 +166,7 @@ --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} --sourcePath${sourcePath}/software - --outputPath${sourcePath}/relation + --outputPath${workingDir}/affiliationinstrepo/software/relation --datasourceOrganizationPath${workingDir}/affiliationInstRepo/preparedInfo/datasourceOrganization --alreadyLinkedPath${workingDir}/affiliationInstRepo/preparedInfo/alreadyLinked --hive_metastore_uris${hive_metastore_uris} @@ -175,7 +176,32 @@ - + + + + + yarn + cluster + append new relations + eu.dnetlib.dhp.resulttoorganizationfrominstrepo.AppendNewRelations + dhp-enrichment-${projectVersion}.jar + + --executor-cores=${sparkExecutorCores} + --executor-memory=${sparkExecutorMemory} + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.dynamicAllocation.enabled=true + --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} + + --outputPath${sourcePath}/relation + --sourcePath${workingDir}/affiliationinstrepo/ + + + + From 01ce0b9c7626cb853acd218db011a498cb8d06e2 Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Fri, 15 Dec 2023 12:24:55 +0100 Subject: [PATCH 405/449] [doiboost - preprocess] remove transition to orcid preparation from sequence of steps at the beginning of the workflow --- .../dhp/doiboost/preprocess/oozie_app/workflow.xml | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/preprocess/oozie_app/workflow.xml b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/preprocess/oozie_app/workflow.xml index ed6853229..309031ee4 100644 --- a/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/preprocess/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/preprocess/oozie_app/workflow.xml @@ -34,18 +34,6 @@ the MAG working path - - - - inputPathOrcid - the ORCID input path - - - - workingPathOrcid - the ORCID working path - - @@ -65,7 +53,6 @@ ${wf:conf('resumeFrom') eq 'ResetMagWorkingPath'} ${wf:conf('resumeFrom') eq 'ConvertMagToDataset'} - ${wf:conf('resumeFrom') eq 'PreProcessORCID'} From 3eca5d2e1c302a7427ffa735c95ac96a6419caec Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Mon, 18 Dec 2023 09:55:27 +0100 Subject: [PATCH 406/449] - --- ...SemRel.java => SparkEntityToOrganizationFromSemRel.java} | 4 ++-- .../dhp/entitytoorganizationfromsemrel/StepActions.java | 5 ++--- .../entitytoorganizationfromsemrel/oozie_app/workflow.xml | 2 +- .../main/resources/eu/dnetlib/dhp/wf/main/job.properties | 2 +- .../resources/eu/dnetlib/dhp/wf/main/oozie_app/workflow.xml | 2 +- .../entitytoorganizationfromsemrel/oozie_app/workflow.xml | 6 +++--- .../dhp/entitytoorganizationfromsemrel/SparkJobTest.java | 6 +++--- 7 files changed, 13 insertions(+), 14 deletions(-) rename dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/entitytoorganizationfromsemrel/{SparkResultToOrganizationFromSemRel.java => SparkEntityToOrganizationFromSemRel.java} (98%) diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/entitytoorganizationfromsemrel/SparkResultToOrganizationFromSemRel.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/entitytoorganizationfromsemrel/SparkEntityToOrganizationFromSemRel.java similarity index 98% rename from dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/entitytoorganizationfromsemrel/SparkResultToOrganizationFromSemRel.java rename to dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/entitytoorganizationfromsemrel/SparkEntityToOrganizationFromSemRel.java index 27e502aba..87c0ec2b9 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/entitytoorganizationfromsemrel/SparkResultToOrganizationFromSemRel.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/entitytoorganizationfromsemrel/SparkEntityToOrganizationFromSemRel.java @@ -27,8 +27,8 @@ import eu.dnetlib.dhp.resulttoorganizationfrominstrepo.SparkResultToOrganization import eu.dnetlib.dhp.schema.common.ModelConstants; import eu.dnetlib.dhp.schema.oaf.Relation; -public class SparkResultToOrganizationFromSemRel implements Serializable { - private static final Logger log = LoggerFactory.getLogger(SparkResultToOrganizationFromSemRel.class); +public class SparkEntityToOrganizationFromSemRel implements Serializable { + private static final Logger log = LoggerFactory.getLogger(SparkEntityToOrganizationFromSemRel.class); private static final int MAX_ITERATION = 5; public static final String NEW_RESULT_RELATION_PATH = "/newResultRelation"; public static final String NEW_PROJECT_RELATION_PATH = "/newProjectRelation"; diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/entitytoorganizationfromsemrel/StepActions.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/entitytoorganizationfromsemrel/StepActions.java index 386ea1a5c..36a7523c5 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/entitytoorganizationfromsemrel/StepActions.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/entitytoorganizationfromsemrel/StepActions.java @@ -3,8 +3,8 @@ package eu.dnetlib.dhp.entitytoorganizationfromsemrel; import static eu.dnetlib.dhp.PropagationConstant.*; import static eu.dnetlib.dhp.PropagationConstant.readPath; -import static eu.dnetlib.dhp.entitytoorganizationfromsemrel.SparkResultToOrganizationFromSemRel.NEW_PROJECT_RELATION_PATH; -import static eu.dnetlib.dhp.entitytoorganizationfromsemrel.SparkResultToOrganizationFromSemRel.NEW_RESULT_RELATION_PATH; +import static eu.dnetlib.dhp.entitytoorganizationfromsemrel.SparkEntityToOrganizationFromSemRel.NEW_PROJECT_RELATION_PATH; +import static eu.dnetlib.dhp.entitytoorganizationfromsemrel.SparkEntityToOrganizationFromSemRel.NEW_RESULT_RELATION_PATH; import java.io.Serializable; import java.util.*; @@ -20,7 +20,6 @@ import org.jetbrains.annotations.NotNull; import com.fasterxml.jackson.databind.ObjectMapper; import eu.dnetlib.dhp.KeyValueSet; -import eu.dnetlib.dhp.schema.common.ModelConstants; import eu.dnetlib.dhp.schema.oaf.Relation; import scala.Tuple2; diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/entitytoorganizationfromsemrel/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/entitytoorganizationfromsemrel/oozie_app/workflow.xml index 16c8c4e19..851aabe8b 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/entitytoorganizationfromsemrel/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/entitytoorganizationfromsemrel/oozie_app/workflow.xml @@ -162,7 +162,7 @@ yarn cluster resultToOrganizationFromSemRel - eu.dnetlib.dhp.entitytoorganizationfromsemrel.SparkResultToOrganizationFromSemRel + eu.dnetlib.dhp.entitytoorganizationfromsemrel.SparkEntityToOrganizationFromSemRel dhp-enrichment-${projectVersion}.jar --executor-cores=${sparkExecutorCores} diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/job.properties b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/job.properties index 243c1e99d..6085cd2b2 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/job.properties +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/job.properties @@ -1,5 +1,5 @@ sourcePath=/tmp/beta_provision/graph/09_graph_dedup_enriched -resumeFrom=AffiliationInstitutionalRepository +resumeFrom=default allowedsemrelsorcidprop=isSupplementedBy;isSupplementTo allowedsemrelsresultproject=isSupplementedBy;isSupplementTo allowedsemrelscommunitysemrel=isSupplementedBy;isSupplementTo diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/oozie_app/workflow.xml index 1e6736bf4..33f849645 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/oozie_app/workflow.xml @@ -120,7 +120,7 @@ ${wf:conf('resumeFrom') eq 'BulkTagging'} ${wf:conf('resumeFrom') eq 'AffiliationInstitutionalRepository'} - ${wf:conf('resumeFrom') eq 'AffiliationSemanticRelation'} + ${wf:conf('resumeFrom') eq 'AffiliationSemanticRelation'} ${wf:conf('resumeFrom') eq 'CommunityOrganization'} ${wf:conf('resumeFrom') eq 'ResultProject'} ${wf:conf('resumeFrom') eq 'CommunityProject'} diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/entitytoorganizationfromsemrel/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/entitytoorganizationfromsemrel/oozie_app/workflow.xml index e3f3c1758..dbb22b994 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/entitytoorganizationfromsemrel/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/entitytoorganizationfromsemrel/oozie_app/workflow.xml @@ -29,7 +29,7 @@ yarn cluster - PrepareResultOrganizationAssociation + PrepareResultProjectOrganizationAssociation eu.dnetlib.dhp.entitytoorganizationfromsemrel.PrepareInfo dhp-enrichment-${projectVersion}.jar @@ -57,8 +57,8 @@ yarn cluster - resultToOrganizationFromSemRel - eu.dnetlib.dhp.entitytoorganizationfromsemrel.SparkResultToOrganizationFromSemRel + entityToOrganizationFromSemRel + eu.dnetlib.dhp.entitytoorganizationfromsemrel.SparkEntityToOrganizationFromSemRel dhp-enrichment-${projectVersion}.jar --executor-cores=${sparkExecutorCores} diff --git a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/entitytoorganizationfromsemrel/SparkJobTest.java b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/entitytoorganizationfromsemrel/SparkJobTest.java index 517a20cd9..db917658a 100644 --- a/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/entitytoorganizationfromsemrel/SparkJobTest.java +++ b/dhp-workflows/dhp-enrichment/src/test/java/eu/dnetlib/dhp/entitytoorganizationfromsemrel/SparkJobTest.java @@ -114,7 +114,7 @@ public class SparkJobTest { .option("compression", "gzip") .json(workingDir.toString() + "/projectInput"); - SparkResultToOrganizationFromSemRel + SparkEntityToOrganizationFromSemRel .main( new String[] { @@ -395,7 +395,7 @@ public class SparkJobTest { .option("compression", "gzip") .json(workingDir.toString() + "/projectInput"); - SparkResultToOrganizationFromSemRel + SparkEntityToOrganizationFromSemRel .main( new String[] { @@ -678,7 +678,7 @@ public class SparkJobTest { .option("compression", "gzip") .json(workingDir.toString() + "/projectInput"); - SparkResultToOrganizationFromSemRel + SparkEntityToOrganizationFromSemRel .main( new String[] { From 9d342a47da489d71c3a739b06943a4f09a1225ee Mon Sep 17 00:00:00 2001 From: Sandro La Bruzzo Date: Mon, 18 Dec 2023 11:48:57 +0100 Subject: [PATCH 407/449] updated the transformation Baseline workflow to include mdstore rollback/commit action --- .../dhp/sx/bio/pubmed/oozie_app/workflow.xml | 69 +++++++++++++++++-- .../ebi/SparkCreateBaselineDataFrame.scala | 18 +++-- 2 files changed, 78 insertions(+), 9 deletions(-) diff --git a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/sx/bio/pubmed/oozie_app/workflow.xml b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/sx/bio/pubmed/oozie_app/workflow.xml index 8915a090b..30eb41469 100644 --- a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/sx/bio/pubmed/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/sx/bio/pubmed/oozie_app/workflow.xml @@ -1,4 +1,4 @@ - + baselineWorkingPath @@ -9,8 +9,12 @@ The IS lookUp service endopoint - targetPath - The target path + mdStoreOutputId + the identifier of the cleaned MDStore + + + mdStoreManagerURI + the path of the cleaned mdstore skipUpdate @@ -19,12 +23,31 @@ - + + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + + + + oozie.launcher.mapreduce.user.classpath.first + true + + + eu.dnetlib.dhp.aggregation.mdstore.MDStoreActionNode + --actionNEW_VERSION + --mdStoreID${mdStoreOutputId} + --mdStoreManagerURI${mdStoreManagerURI} + + + + + + yarn @@ -43,16 +66,52 @@ --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} --workingPath${baselineWorkingPath} - --targetPath${targetPath} + --mdstoreOutputVersion${wf:actionData('StartTransaction')['mdStoreVersion']} --masteryarn --isLookupUrl${isLookupUrl} --hdfsServerUri${nameNode} --skipUpdate${skipUpdate} + + + + + + + + + oozie.launcher.mapreduce.user.classpath.first + true + + + eu.dnetlib.dhp.aggregation.mdstore.MDStoreActionNode + --actionCOMMIT + --namenode${nameNode} + --mdStoreVersion${wf:actionData('StartTransaction')['mdStoreVersion']} + --mdStoreManagerURI${mdStoreManagerURI} + + + + + + oozie.launcher.mapreduce.user.classpath.first + true + + + eu.dnetlib.dhp.aggregation.mdstore.MDStoreActionNode + --actionROLLBACK + --mdStoreVersion${wf:actionData('StartTransaction')['mdStoreVersion']} + --mdStoreManagerURI${mdStoreManagerURI} + + + + + + \ No newline at end of file diff --git a/dhp-workflows/dhp-aggregation/src/main/scala/eu/dnetlib/dhp/sx/bio/ebi/SparkCreateBaselineDataFrame.scala b/dhp-workflows/dhp-aggregation/src/main/scala/eu/dnetlib/dhp/sx/bio/ebi/SparkCreateBaselineDataFrame.scala index 8ac8b00bf..639918151 100644 --- a/dhp-workflows/dhp-aggregation/src/main/scala/eu/dnetlib/dhp/sx/bio/ebi/SparkCreateBaselineDataFrame.scala +++ b/dhp-workflows/dhp-aggregation/src/main/scala/eu/dnetlib/dhp/sx/bio/ebi/SparkCreateBaselineDataFrame.scala @@ -2,9 +2,12 @@ package eu.dnetlib.dhp.sx.bio.ebi import eu.dnetlib.dhp.application.ArgumentApplicationParser import eu.dnetlib.dhp.collection.CollectionUtils +import eu.dnetlib.dhp.common.Constants.{MDSTORE_DATA_PATH, MDSTORE_SIZE_PATH} import eu.dnetlib.dhp.common.vocabulary.VocabularyGroup +import eu.dnetlib.dhp.schema.mdstore.MDStoreVersion import eu.dnetlib.dhp.schema.oaf.{Oaf, Result} import eu.dnetlib.dhp.sx.bio.pubmed._ +import eu.dnetlib.dhp.utils.DHPUtils.{MAPPER, writeHdfsFile} import eu.dnetlib.dhp.utils.ISLookupClientFactory import org.apache.commons.io.IOUtils import org.apache.hadoop.conf.Configuration @@ -164,11 +167,15 @@ object SparkCreateBaselineDataFrame { val workingPath = parser.get("workingPath") log.info("workingPath: {}", workingPath) - val targetPath = parser.get("targetPath") - log.info("targetPath: {}", targetPath) + val mdstoreOutputVersion = parser.get("mdstoreOutputVersion") + log.info("mdstoreOutputVersion: {}", mdstoreOutputVersion) + + val cleanedMdStoreVersion = MAPPER.readValue(mdstoreOutputVersion, classOf[MDStoreVersion]) + val outputBasePath = cleanedMdStoreVersion.getHdfsPath + log.info("outputBasePath: {}", outputBasePath) val hdfsServerUri = parser.get("hdfsServerUri") - log.info("hdfsServerUri: {}", targetPath) + log.info("hdfsServerUri: {}", hdfsServerUri) val skipUpdate = parser.get("skipUpdate") log.info("skipUpdate: {}", skipUpdate) @@ -216,8 +223,11 @@ object SparkCreateBaselineDataFrame { .map(a => PubMedToOaf.convert(a, vocabularies)) .as[Oaf] .filter(p => p != null), - targetPath + s"$outputBasePath/$MDSTORE_DATA_PATH" ) + val df = spark.read.text(s"$outputBasePath/$MDSTORE_DATA_PATH") + val mdStoreSize = df.count + writeHdfsFile(spark.sparkContext.hadoopConfiguration, s"$mdStoreSize", s"$outputBasePath/$MDSTORE_SIZE_PATH") } } From 15fd93a2b66f6829cfac0b1350266664371d1df5 Mon Sep 17 00:00:00 2001 From: Sandro La Bruzzo Date: Mon, 18 Dec 2023 12:21:55 +0100 Subject: [PATCH 408/449] uploaded input parameters on CreateBaseline WF --- .../eu/dnetlib/dhp/sx/bio/ebi/baseline_to_oaf_params.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/sx/bio/ebi/baseline_to_oaf_params.json b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/sx/bio/ebi/baseline_to_oaf_params.json index 8dc8a2aae..3ba83764d 100644 --- a/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/sx/bio/ebi/baseline_to_oaf_params.json +++ b/dhp-workflows/dhp-aggregation/src/main/resources/eu/dnetlib/dhp/sx/bio/ebi/baseline_to_oaf_params.json @@ -2,7 +2,7 @@ {"paramName":"mt", "paramLongName":"master", "paramDescription": "should be local or yarn", "paramRequired": true}, {"paramName":"i", "paramLongName":"isLookupUrl", "paramDescription": "isLookupUrl", "paramRequired": true}, {"paramName":"w", "paramLongName":"workingPath", "paramDescription": "the path of the sequencial file to read", "paramRequired": true}, - {"paramName":"t", "paramLongName":"targetPath", "paramDescription": "the oaf path ", "paramRequired": true}, + {"paramName":"mo", "paramLongName":"mdstoreOutputVersion", "paramDescription": "the oaf path ", "paramRequired": true}, {"paramName":"s", "paramLongName":"skipUpdate", "paramDescription": "skip update ", "paramRequired": false}, {"paramName":"h", "paramLongName":"hdfsServerUri", "paramDescription": "the working path ", "paramRequired": true} ] \ No newline at end of file From d410ea8a4176341cdebaa76179c77b5fdd45c631 Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Tue, 19 Dec 2023 12:15:01 +0100 Subject: [PATCH 409/449] added needed parameter --- .../AppendNewRelations.java | 11 +- .../oozie_app/workflow.xml | 112 ++---------------- .../input_newrelation_parameters.json | 20 ++++ .../eu/dnetlib/dhp/wf/main/job.properties | 4 +- .../dhp/wf/main/oozie_app/workflow.xml | 10 +- 5 files changed, 41 insertions(+), 116 deletions(-) create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/input_newrelation_parameters.json diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/AppendNewRelations.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/AppendNewRelations.java index a5884873b..636c14b65 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/AppendNewRelations.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/AppendNewRelations.java @@ -2,26 +2,19 @@ package eu.dnetlib.dhp.resulttoorganizationfrominstrepo; import static eu.dnetlib.dhp.PropagationConstant.*; -import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkHiveSession; +import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkSession; import java.io.Serializable; -import java.util.Objects; -import java.util.Optional; import org.apache.commons.io.IOUtils; import org.apache.spark.SparkConf; -import org.apache.spark.api.java.function.MapFunction; -import org.apache.spark.sql.Encoders; import org.apache.spark.sql.SaveMode; import org.apache.spark.sql.SparkSession; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import eu.dnetlib.dhp.application.ArgumentApplicationParser; -import eu.dnetlib.dhp.bulktag.community.ResultTagger; -import eu.dnetlib.dhp.schema.common.ModelSupport; import eu.dnetlib.dhp.schema.oaf.Relation; -import eu.dnetlib.dhp.schema.oaf.Result; /** * @author miriam.baglioni @@ -54,7 +47,7 @@ public class AppendNewRelations implements Serializable { SparkConf conf = new SparkConf(); - runWithSparkHiveSession( + runWithSparkSession( conf, isSparkSessionManaged, spark -> appendNewRelation(spark, inputPath, outputPath)); diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/entitytoorganizationfromsemrel/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/entitytoorganizationfromsemrel/oozie_app/workflow.xml index 851aabe8b..d7335d840 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/entitytoorganizationfromsemrel/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/entitytoorganizationfromsemrel/oozie_app/workflow.xml @@ -5,9 +5,10 @@ the source path - outputPath - sets the outputPath + iterations + the number of hops to be done up on the hierarchy + @@ -21,119 +22,26 @@ - + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] - - - ${wf:conf('resumeFrom') eq 'PrepareInfo'} - - - - - - + + - + - - - - - - - - - - - - - - ${nameNode}/${sourcePath}/relation - ${nameNode}/${outputPath}/relation - - - - - - - - ${nameNode}/${sourcePath}/publication - ${nameNode}/${outputPath}/publication - - - - - - - - ${nameNode}/${sourcePath}/dataset - ${nameNode}/${outputPath}/dataset - - - - - - - - ${nameNode}/${sourcePath}/otherresearchproduct - ${nameNode}/${outputPath}/otherresearchproduct - - - - - - - - ${nameNode}/${sourcePath}/software - ${nameNode}/${outputPath}/software - - - - - - - - ${nameNode}/${sourcePath}/organization - ${nameNode}/${outputPath}/organization - - - - - - - - ${nameNode}/${sourcePath}/project - ${nameNode}/${outputPath}/project - - - - - - - - ${nameNode}/${sourcePath}/datasource - ${nameNode}/${outputPath}/datasource - - - - - - - - yarn cluster - PrepareResultOrganizationAssociation + PrepareResultProjectOrganizationAssociation eu.dnetlib.dhp.entitytoorganizationfromsemrel.PrepareInfo dhp-enrichment-${projectVersion}.jar @@ -161,7 +69,7 @@ yarn cluster - resultToOrganizationFromSemRel + resultProjectToOrganizationFromSemRel eu.dnetlib.dhp.entitytoorganizationfromsemrel.SparkEntityToOrganizationFromSemRel dhp-enrichment-${projectVersion}.jar @@ -177,7 +85,7 @@ --conf spark.sql.shuffle.partitions=3840 --relationPath${workingDir}/preparedInfo/relation - --outputPath${outputPath}/relation + --outputPath${sourcePath}/relation --leavesPath${workingDir}/preparedInfo/leavesPath --childParentPath${workingDir}/preparedInfo/childParentPath --resultOrgPath${workingDir}/preparedInfo/resultOrgPath diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/input_newrelation_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/input_newrelation_parameters.json new file mode 100644 index 000000000..5fe92cff1 --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/input_newrelation_parameters.json @@ -0,0 +1,20 @@ +[ + { + "paramName":"s", + "paramLongName":"sourcePath", + "paramDescription": "the path of the sequencial file to read", + "paramRequired": true + }, + + { + "paramName": "ssm", + "paramLongName": "isSparkSessionManaged", + "paramDescription": "the path where prepared info have been stored", + "paramRequired": false + },{ + "paramName": "o", + "paramLongName": "outputPath", + "paramDescription": "institutional repositories that should not be considered for the propagation", + "paramRequired": false +} +] \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/job.properties b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/job.properties index 6085cd2b2..93e9e0ab1 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/job.properties +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/job.properties @@ -1,5 +1,5 @@ sourcePath=/tmp/beta_provision/graph/09_graph_dedup_enriched -resumeFrom=default +resumeFrom=AffiliationSemanticRelation allowedsemrelsorcidprop=isSupplementedBy;isSupplementTo allowedsemrelsresultproject=isSupplementedBy;isSupplementTo allowedsemrelscommunitysemrel=isSupplementedBy;isSupplementTo @@ -24,5 +24,5 @@ pathMap ={"author":"$['author'][*]['fullname']", \ blacklist=empty allowedpids=orcid;orcid_pending baseURL = https://services.openaire.eu/openaire/community/ - +iterations=1 diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/oozie_app/workflow.xml index 33f849645..de054b962 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/oozie_app/workflow.xml @@ -195,13 +195,13 @@ - + - + - ${wf:appPath()}/affiliation_semantic_relation + ${wf:appPath()}/entity_semantic_relation @@ -209,6 +209,10 @@ sourcePath ${outputPath} + + iterations + ${iterations} + From 4740c808f735193e8975f09e1a6841eb4d9a676f Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Wed, 20 Dec 2023 14:26:54 +0100 Subject: [PATCH 410/449] - --- .../PrepareDatasourceCountryAssociation.java | 2 +- .../bulktag/datasourcemaster_parameters.json | 32 -- .../dhp/bulktag/input_bulkTag_parameters.json | 38 -- .../dhp/bulktag/input_eoscTag_parameters.json | 21 - .../input_eosc_bulkTag_parameters.json | 41 -- .../dhp/bulktag/oozie_app/config-default.xml | 54 --- .../dhp/bulktag/oozie_app/workflow.xml | 120 ------ .../input_countrypropagation_parameters.json | 32 -- .../input_prepareassoc_parameters.json | 32 -- ...input_prepareresultcountry_parameters.json | 38 -- .../oozie_app/config-default.xml | 58 --- .../countrypropagation/oozie_app/workflow.xml | 375 ------------------ .../input_preparation_parameter.json | 50 --- .../input_propagation_parameter.json | 62 --- .../oozie_app/config-default.xml | 58 --- .../oozie_app/workflow.xml | 105 ----- .../input_orcidtoresult_parameters.json | 44 -- ...input_prepareorcidtoresult_parameters.json | 38 -- ...nput_prepareorcidtoresult_parameters2.json | 20 - .../oozie_app/config-default.xml | 58 --- .../oozie_app/workflow.xml | 371 ----------------- ...put_prepareprojecttoresult_parameters.json | 33 -- .../input_projecttoresult_parameters.json | 44 -- .../oozie_app/config-default.xml | 63 --- .../projecttoresult/oozie_app/workflow.xml | 184 --------- .../input_communitytoresult_parameters.json | 28 -- ...t_preparecommunitytoresult_parameters.json | 33 -- .../oozie_app/config-default.xml | 58 --- .../oozie_app/workflow.xml | 147 ------- .../input_communitytoresult_parameters.json | 28 -- ...t_preparecommunitytoresult_parameters.json | 28 -- .../oozie_app/config-default.xml | 58 --- .../oozie_app/workflow.xml | 144 ------- .../input_communitytoresult_parameters.json | 52 --- ..._preparecommunitytoresult2_parameters.json | 20 - ...t_preparecommunitytoresult_parameters.json | 44 -- .../oozie_app/config-default.xml | 58 --- .../oozie_app/workflow.xml | 366 ----------------- .../input_newrelation_parameters.json | 20 - .../input_prepareresultorg_parameters.json | 32 -- ...sulaffiliationfrominstrepo_parameters.json | 56 --- .../oozie_app/config-default.xml | 58 --- .../oozie_app/workflow.xml | 277 ------------- .../eu/dnetlib/dhp/wf/main/job.properties | 8 +- .../dhp/wf/main/oozie_app/workflow.xml | 6 +- .../bulktag/oozie_app/workflow.xml | 10 +- .../countrypropagation/oozie_app/workflow.xml | 10 +- .../oozie_app/workflow.xml | 10 +- .../projecttoresult/oozie_app/workflow.xml | 12 +- .../oozie_app/workflow.xml | 15 +- .../oozie_app/workflow.xml | 11 +- .../oozie_app/workflow.xml | 68 +++- .../oozie_app/workflow.xml | 21 +- .../oozie_app/config-default.xml | 58 --- .../oozie_app/workflow.xml | 97 ----- .../graph/hostedbymap/oozie_app/download.sh | 2 +- 56 files changed, 127 insertions(+), 3681 deletions(-) delete mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/datasourcemaster_parameters.json delete mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/input_bulkTag_parameters.json delete mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/input_eoscTag_parameters.json delete mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/input_eosc_bulkTag_parameters.json delete mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/oozie_app/config-default.xml delete mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/oozie_app/workflow.xml delete mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/countrypropagation/input_countrypropagation_parameters.json delete mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/countrypropagation/input_prepareassoc_parameters.json delete mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/countrypropagation/input_prepareresultcountry_parameters.json delete mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/countrypropagation/oozie_app/config-default.xml delete mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/countrypropagation/oozie_app/workflow.xml delete mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/entitytoorganizationfromsemrel/input_preparation_parameter.json delete mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/entitytoorganizationfromsemrel/input_propagation_parameter.json delete mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/entitytoorganizationfromsemrel/oozie_app/config-default.xml delete mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/entitytoorganizationfromsemrel/oozie_app/workflow.xml delete mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/orcidtoresultfromsemrel/input_orcidtoresult_parameters.json delete mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/orcidtoresultfromsemrel/input_prepareorcidtoresult_parameters.json delete mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/orcidtoresultfromsemrel/input_prepareorcidtoresult_parameters2.json delete mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/orcidtoresultfromsemrel/oozie_app/config-default.xml delete mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/orcidtoresultfromsemrel/oozie_app/workflow.xml delete mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/projecttoresult/input_prepareprojecttoresult_parameters.json delete mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/projecttoresult/input_projecttoresult_parameters.json delete mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/projecttoresult/oozie_app/config-default.xml delete mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/projecttoresult/oozie_app/workflow.xml delete mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/input_communitytoresult_parameters.json delete mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/input_preparecommunitytoresult_parameters.json delete mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/oozie_app/config-default.xml delete mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/oozie_app/workflow.xml delete mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromproject/input_communitytoresult_parameters.json delete mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromproject/input_preparecommunitytoresult_parameters.json delete mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromproject/oozie_app/config-default.xml delete mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromproject/oozie_app/workflow.xml delete mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromsemrel/input_communitytoresult_parameters.json delete mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromsemrel/input_preparecommunitytoresult2_parameters.json delete mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromsemrel/input_preparecommunitytoresult_parameters.json delete mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromsemrel/oozie_app/config-default.xml delete mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromsemrel/oozie_app/workflow.xml delete mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/input_newrelation_parameters.json delete mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/input_prepareresultorg_parameters.json delete mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/input_propagationresulaffiliationfrominstrepo_parameters.json delete mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/oozie_app/config-default.xml delete mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/oozie_app/workflow.xml delete mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttoorganizationfromsemrel/oozie_app/config-default.xml delete mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttoorganizationfromsemrel/oozie_app/workflow.xml diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/countrypropagation/PrepareDatasourceCountryAssociation.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/countrypropagation/PrepareDatasourceCountryAssociation.java index 2ffe6f36d..430c26592 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/countrypropagation/PrepareDatasourceCountryAssociation.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/countrypropagation/PrepareDatasourceCountryAssociation.java @@ -90,7 +90,7 @@ public class PrepareDatasourceCountryAssociation { (FilterFunction) ds -> !ds.getDataInfo().getDeletedbyinference() && Optional.ofNullable(ds.getDatasourcetype()).isPresent() && Optional.ofNullable(ds.getDatasourcetype().getClassid()).isPresent() && - (allowedtypes.contains(ds.getDatasourcetype().getClassid()) || + (allowedtypes.contains(ds.getJurisdiction().getClassid()) || whitelist.contains(ds.getId()))); // filtering of the relations taking the non deleted by inference and those with IsProvidedBy as relclass diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/datasourcemaster_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/datasourcemaster_parameters.json deleted file mode 100644 index 9a2eadaa7..000000000 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/datasourcemaster_parameters.json +++ /dev/null @@ -1,32 +0,0 @@ -[ - { - "paramName": "p", - "paramLongName": "hdfsPath", - "paramDescription": "the path where storing the sequential file", - "paramRequired": true - }, - { - "paramName": "nn", - "paramLongName": "hdfsNameNode", - "paramDescription": "the name node on hdfs", - "paramRequired": true - }, - { - "paramName": "pgurl", - "paramLongName": "postgresUrl", - "paramDescription": "postgres url, example: jdbc:postgresql://localhost:5432/testdb", - "paramRequired": true - }, - { - "paramName": "pguser", - "paramLongName": "postgresUser", - "paramDescription": "postgres user", - "paramRequired": false - }, - { - "paramName": "pgpasswd", - "paramLongName": "postgresPassword", - "paramDescription": "postgres password", - "paramRequired": false - } -] \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/input_bulkTag_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/input_bulkTag_parameters.json deleted file mode 100644 index ce1a8ecab..000000000 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/input_bulkTag_parameters.json +++ /dev/null @@ -1,38 +0,0 @@ -[ - { - "paramName":"s", - "paramLongName":"sourcePath", - "paramDescription": "the path of the sequencial file to read", - "paramRequired": true - }, - { - "paramName": "pm", - "paramLongName":"pathMap", - "paramDescription": "the json path associated to each selection field", - "paramRequired": true - }, - { - "paramName": "out", - "paramLongName": "outputPath", - "paramDescription": "the path used to store temporary output files", - "paramRequired": true - }, - { - "paramName": "ssm", - "paramLongName": "isSparkSessionManaged", - "paramDescription": "true if the spark session is managed, false otherwise", - "paramRequired": false - }, - { - "paramName": "tg", - "paramLongName": "taggingConf", - "paramDescription": "this parameter is intended for testing purposes only. It is a possible tagging configuration obtained via the XQUERY. Intended to be removed", - "paramRequired": false - }, - { - "paramName": "bu", - "paramLongName": "baseURL", - "paramDescription": "this parameter is to specify the api to be queried (beta or production)", - "paramRequired": false - } -] \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/input_eoscTag_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/input_eoscTag_parameters.json deleted file mode 100644 index 4c25fea01..000000000 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/input_eoscTag_parameters.json +++ /dev/null @@ -1,21 +0,0 @@ -[ - { - "paramName":"s", - "paramLongName":"sourcePath", - "paramDescription": "the path of the sequencial file to read", - "paramRequired": true - }, - { - "paramName": "wp", - "paramLongName": "workingPath", - "paramDescription": "the path used to store temporary output files", - "paramRequired": true - }, - { - "paramName": "ssm", - "paramLongName": "isSparkSessionManaged", - "paramDescription": "true if the spark session is managed, false otherwise", - "paramRequired": false - } - -] \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/input_eosc_bulkTag_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/input_eosc_bulkTag_parameters.json deleted file mode 100644 index 5aace346d..000000000 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/input_eosc_bulkTag_parameters.json +++ /dev/null @@ -1,41 +0,0 @@ -[ - - { - "paramName":"s", - "paramLongName":"sourcePath", - "paramDescription": "the path of the sequencial file to read", - "paramRequired": true - }, - { - "paramName": "dmp", - "paramLongName":"datasourceMapPath", - "paramDescription": "the path where the association datasource master has been stored", - "paramRequired": true - }, - { - "paramName":"tn", - "paramLongName":"resultTableName", - "paramDescription": "the name of the result table we are currently working on", - "paramRequired": true - }, - { - "paramName": "wp", - "paramLongName": "workingPath", - "paramDescription": "the path used to store temporary output files", - "paramRequired": true - }, - { - "paramName": "ssm", - "paramLongName": "isSparkSessionManaged", - "paramDescription": "true if the spark session is managed, false otherwise", - "paramRequired": false - }, - { - - "paramName": "rt", - "paramLongName": "resultType", - "paramDescription": "the result type", - "paramRequired": true - } - -] \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/oozie_app/config-default.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/oozie_app/config-default.xml deleted file mode 100644 index fe82ae194..000000000 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/oozie_app/config-default.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - jobTracker - yarnRM - - - nameNode - hdfs://nameservice1 - - - oozie.use.system.libpath - true - - - oozie.action.sharelib.for.spark - spark2 - - - hive_metastore_uris - thrift://iis-cdh5-test-m3.ocean.icm.edu.pl:9083 - - - spark2YarnHistoryServerAddress - http://iis-cdh5-test-gw.ocean.icm.edu.pl:18089 - - - spark2ExtraListeners - com.cloudera.spark.lineage.NavigatorAppListener - - - spark2SqlQueryExecutionListeners - com.cloudera.spark.lineage.NavigatorQueryListener - - - sparkExecutorNumber - 4 - - - spark2EventLogDir - /user/spark/spark2ApplicationHistory - - - sparkDriverMemory - 15G - - - sparkExecutorMemory - 6G - - - sparkExecutorCores - 1 - - \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/oozie_app/workflow.xml deleted file mode 100644 index 0d4d1f046..000000000 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/bulktag/oozie_app/workflow.xml +++ /dev/null @@ -1,120 +0,0 @@ - - - - sourcePath - the source path - - - pathMap - the json path associated to each selection field - - - outputPath - the output path - - - baseURL - the community API base URL - - - - - ${jobTracker} - ${nameNode} - - - oozie.action.sharelib.for.spark - ${oozieActionShareLibForSpark2} - - - - - - - - Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] - - - - - - - - - - - - - - - - - - - - - ${nameNode}/${sourcePath}/relation - ${nameNode}/${outputPath}/relation - - - - - - - - ${nameNode}/${sourcePath}/organization - ${nameNode}/${outputPath}/organization - - - - - - - - ${nameNode}/${sourcePath}/project - ${nameNode}/${outputPath}/project - - - - - - - - ${nameNode}/${sourcePath}/datasource - ${nameNode}/${outputPath}/datasource - - - - - - - - - - yarn-cluster - cluster - bulkTagging-result - eu.dnetlib.dhp.bulktag.SparkBulkTagJob - dhp-enrichment-${projectVersion}.jar - - --num-executors=${sparkExecutorNumber} - --executor-memory=${sparkExecutorMemory} - --executor-cores=${sparkExecutorCores} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - - --sourcePath${sourcePath}/ - --outputPath${outputPath}/ - --pathMap${pathMap} - --baseURL${baseURL} - - - - - - - - \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/countrypropagation/input_countrypropagation_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/countrypropagation/input_countrypropagation_parameters.json deleted file mode 100644 index f217e2458..000000000 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/countrypropagation/input_countrypropagation_parameters.json +++ /dev/null @@ -1,32 +0,0 @@ -[ - { - "paramName":"s", - "paramLongName":"sourcePath", - "paramDescription": "the path of the sequencial file to read", - "paramRequired": true - }, - { - "paramName":"tn", - "paramLongName":"resultTableName", - "paramDescription": "the name of the result table we are currently working on", - "paramRequired": true - }, - { - "paramName": "out", - "paramLongName": "outputPath", - "paramDescription": "the path used to store temporary output files", - "paramRequired": true - }, - { - "paramName": "p", - "paramLongName": "preparedInfoPath", - "paramDescription": "the path where prepared info have been stored", - "paramRequired": false - }, - { - "paramName": "ssm", - "paramLongName": "isSparkSessionManaged", - "paramDescription": "true if the spark session is managed, false otherwise", - "paramRequired": false - } -] \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/countrypropagation/input_prepareassoc_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/countrypropagation/input_prepareassoc_parameters.json deleted file mode 100644 index a00105f2b..000000000 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/countrypropagation/input_prepareassoc_parameters.json +++ /dev/null @@ -1,32 +0,0 @@ -[ - { - "paramName":"s", - "paramLongName":"sourcePath", - "paramDescription": "the path of the sequencial file to read", - "paramRequired": true - }, - { - "paramName": "out", - "paramLongName": "outputPath", - "paramDescription": "the path used to store temporary output files", - "paramRequired": true - }, - { - "paramName": "w", - "paramLongName": "whitelist", - "paramDescription": "the datasource having a type different from the allowed ones but that we want to add anyway", - "paramRequired": true - }, - { - "paramName": "at", - "paramLongName": "allowedtypes", - "paramDescription": "the allowed datasource types for country propagation", - "paramRequired": true - }, - { - "paramName": "ssm", - "paramLongName": "isSparkSessionManaged", - "paramDescription": "true if the spark session is managed, false otherwise", - "paramRequired": false - } -] \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/countrypropagation/input_prepareresultcountry_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/countrypropagation/input_prepareresultcountry_parameters.json deleted file mode 100644 index 18163d1f9..000000000 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/countrypropagation/input_prepareresultcountry_parameters.json +++ /dev/null @@ -1,38 +0,0 @@ -[ - { - "paramName":"s", - "paramLongName":"sourcePath", - "paramDescription": "the path of the sequencial file to read", - "paramRequired": true - }, - { - "paramName":"out", - "paramLongName":"outputPath", - "paramDescription": "the output path", - "paramRequired": true - }, - { - "paramName":"w", - "paramLongName":"workingPath", - "paramDescription": "the working path", - "paramRequired": true - }, - { - "paramName":"tn", - "paramLongName":"resultTableName", - "paramDescription": "the name of the result table we are currently working on", - "paramRequired": true - }, - { - "paramName": "p", - "paramLongName": "preparedInfoPath", - "paramDescription": "the path where prepared info have been stored", - "paramRequired": true - }, - { - "paramName": "ssm", - "paramLongName": "isSparkSessionManaged", - "paramDescription": "true if the spark session is managed, false otherwise", - "paramRequired": false - } -] \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/countrypropagation/oozie_app/config-default.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/countrypropagation/oozie_app/config-default.xml deleted file mode 100644 index 2744ea92b..000000000 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/countrypropagation/oozie_app/config-default.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - jobTracker - yarnRM - - - nameNode - hdfs://nameservice1 - - - oozie.use.system.libpath - true - - - oozie.action.sharelib.for.spark - spark2 - - - hive_metastore_uris - thrift://iis-cdh5-test-m3.ocean.icm.edu.pl:9083 - - - spark2YarnHistoryServerAddress - http://iis-cdh5-test-gw.ocean.icm.edu.pl:18089 - - - spark2EventLogDir - /user/spark/spark2ApplicationHistory - - - spark2ExtraListeners - com.cloudera.spark.lineage.NavigatorAppListener - - - spark2SqlQueryExecutionListeners - com.cloudera.spark.lineage.NavigatorQueryListener - - - sparkExecutorNumber - 4 - - - sparkDriverMemory - 15G - - - sparkExecutorMemory - 6G - - - sparkExecutorCores - 1 - - - spark2MaxExecutors - 50 - - \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/countrypropagation/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/countrypropagation/oozie_app/workflow.xml deleted file mode 100644 index 271ccbf72..000000000 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/countrypropagation/oozie_app/workflow.xml +++ /dev/null @@ -1,375 +0,0 @@ - - - - sourcePath - the source path - - - whitelist - the white list - - - allowedtypes - the allowed types - - - outputPath - the output path - - - - - - ${jobTracker} - ${nameNode} - - - oozie.action.sharelib.for.spark - ${oozieActionShareLibForSpark2} - - - - - - - - Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] - - - - - - - - - - - - - - - - - - - - - ${nameNode}/${sourcePath}/relation - ${nameNode}/${outputPath}/relation - - - - - - - - ${nameNode}/${sourcePath}/organization - ${nameNode}/${outputPath}/organization - - - - - - - - ${nameNode}/${sourcePath}/project - ${nameNode}/${outputPath}/project - - - - - - - - ${nameNode}/${sourcePath}/datasource - ${nameNode}/${outputPath}/datasource - - - - - - - - - - yarn - cluster - PrepareDatasourceCountryAssociation - eu.dnetlib.dhp.countrypropagation.PrepareDatasourceCountryAssociation - dhp-enrichment-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.sql.shuffle.partitions=3840 - - --sourcePath${sourcePath} - --whitelist${whitelist} - --allowedtypes${allowedtypes} - --outputPath${workingDir}/preparedInfo - - - - - - - - - - - - - - - yarn - cluster - prepareResultCountry-Publication - eu.dnetlib.dhp.countrypropagation.PrepareResultCountrySet - dhp-enrichment-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.speculation=false - --conf spark.hadoop.mapreduce.map.speculative=false - --conf spark.hadoop.mapreduce.reduce.speculative=false - --conf spark.sql.shuffle.partitions=3840 - - --sourcePath${sourcePath}/publication - --outputPath${workingDir}/publication - --workingPath${workingDir}/workingP - --resultTableNameeu.dnetlib.dhp.schema.oaf.Publication - --preparedInfoPath${workingDir}/preparedInfo - - - - - - - - yarn - cluster - prepareResultCountry-Dataset - eu.dnetlib.dhp.countrypropagation.PrepareResultCountrySet - dhp-enrichment-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.speculation=false - --conf spark.hadoop.mapreduce.map.speculative=false - --conf spark.hadoop.mapreduce.reduce.speculative=false - --conf spark.sql.shuffle.partitions=3840 - - --sourcePath${sourcePath}/dataset - --outputPath${workingDir}/dataset - --workingPath${workingDir}/workingD - --resultTableNameeu.dnetlib.dhp.schema.oaf.Dataset - --preparedInfoPath${workingDir}/preparedInfo - - - - - - - - yarn - cluster - prepareResultCountry-ORP - eu.dnetlib.dhp.countrypropagation.PrepareResultCountrySet - dhp-enrichment-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.speculation=false - --conf spark.hadoop.mapreduce.map.speculative=false - --conf spark.hadoop.mapreduce.reduce.speculative=false - --conf spark.sql.shuffle.partitions=3840 - - --sourcePath${sourcePath}/otherresearchproduct - --outputPath${workingDir}/otherresearchproduct - --workingPath${workingDir}/workingO - --resultTableNameeu.dnetlib.dhp.schema.oaf.OtherResearchProduct - --preparedInfoPath${workingDir}/preparedInfo - - - - - - - - yarn - cluster - prepareResultCountry-Software - eu.dnetlib.dhp.countrypropagation.PrepareResultCountrySet - dhp-enrichment-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.speculation=false - --conf spark.hadoop.mapreduce.map.speculative=false - --conf spark.hadoop.mapreduce.reduce.speculative=false - --conf spark.sql.shuffle.partitions=3840 - - --sourcePath${sourcePath}/software - --outputPath${workingDir}/software - --workingPath${workingDir}/workingS - --resultTableNameeu.dnetlib.dhp.schema.oaf.Software - --preparedInfoPath${workingDir}/preparedInfo - - - - - - - - - - - - - - - - - yarn - cluster - countryPropagationForPublications - eu.dnetlib.dhp.countrypropagation.SparkCountryPropagationJob - dhp-enrichment-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.speculation=false - --conf spark.hadoop.mapreduce.map.speculative=false - --conf spark.hadoop.mapreduce.reduce.speculative=false - --conf spark.sql.shuffle.partitions=3840 - - --sourcePath${sourcePath}/publication - --preparedInfoPath${workingDir}/publication - --resultTableNameeu.dnetlib.dhp.schema.oaf.Publication - --outputPath${outputPath}/publication - - - - - - - - yarn - cluster - countryPropagationForDataset - eu.dnetlib.dhp.countrypropagation.SparkCountryPropagationJob - dhp-enrichment-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.speculation=false - --conf spark.hadoop.mapreduce.map.speculative=false - --conf spark.hadoop.mapreduce.reduce.speculative=false - --conf spark.sql.shuffle.partitions=3840 - - --sourcePath${sourcePath}/dataset - --preparedInfoPath${workingDir}/dataset - --resultTableNameeu.dnetlib.dhp.schema.oaf.Dataset - --outputPath${outputPath}/dataset - - - - - - - - yarn - cluster - countryPropagationForORP - eu.dnetlib.dhp.countrypropagation.SparkCountryPropagationJob - dhp-enrichment-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.speculation=false - --conf spark.hadoop.mapreduce.map.speculative=false - --conf spark.hadoop.mapreduce.reduce.speculative=false - --conf spark.sql.shuffle.partitions=3840 - - --sourcePath${sourcePath}/otherresearchproduct - --preparedInfoPath${workingDir}/otherresearchproduct - --resultTableNameeu.dnetlib.dhp.schema.oaf.OtherResearchProduct - --outputPath${outputPath}/otherresearchproduct - - - - - - - - yarn - cluster - countryPropagationForSoftware - eu.dnetlib.dhp.countrypropagation.SparkCountryPropagationJob - dhp-enrichment-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.speculation=false - --conf spark.hadoop.mapreduce.map.speculative=false - --conf spark.hadoop.mapreduce.reduce.speculative=false - --conf spark.sql.shuffle.partitions=3840 - - --sourcePath${sourcePath}/software - --preparedInfoPath${workingDir}/software - --resultTableNameeu.dnetlib.dhp.schema.oaf.Software - --outputPath${outputPath}/software - - - - - - - - - - \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/entitytoorganizationfromsemrel/input_preparation_parameter.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/entitytoorganizationfromsemrel/input_preparation_parameter.json deleted file mode 100644 index b59937331..000000000 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/entitytoorganizationfromsemrel/input_preparation_parameter.json +++ /dev/null @@ -1,50 +0,0 @@ -[ - { - "paramName":"gp", - "paramLongName":"graphPath", - "paramDescription": "the path of the sequencial file to read", - "paramRequired": true - }, - { - "paramName":"h", - "paramLongName":"hive_metastore_uris", - "paramDescription": "the hive metastore uris", - "paramRequired": true - }, - { - "paramName":"lp", - "paramLongName":"leavesPath", - "paramDescription": "true if the new version of the graph must be saved", - "paramRequired": false - }, - { - "paramName":"cp", - "paramLongName":"childParentPath", - "paramDescription": "path where to store/find association from datasource and organization", - "paramRequired": true - }, - { - "paramName":"rp", - "paramLongName":"resultOrgPath", - "paramDescription": "path where to store/find already linked results and organizations", - "paramRequired": true - }, - { - "paramName": "ssm", - "paramLongName": "isSparkSessionManaged", - "paramDescription": "the path where prepared info have been stored", - "paramRequired": false - }, - { - "paramName": "rep", - "paramLongName": "relationPath", - "paramDescription": "the path where to store the selected subset of relations", - "paramRequired": false - }, - { - "paramName": "pop", - "paramLongName": "projectOrganizationPath", - "paramDescription": "the number of iterations to be computed", - "paramRequired": true - } -] \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/entitytoorganizationfromsemrel/input_propagation_parameter.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/entitytoorganizationfromsemrel/input_propagation_parameter.json deleted file mode 100644 index 66a7f5b2f..000000000 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/entitytoorganizationfromsemrel/input_propagation_parameter.json +++ /dev/null @@ -1,62 +0,0 @@ -[ - { - "paramName":"rep", - "paramLongName":"relationPath", - "paramDescription": "the path of the sequencial file to read", - "paramRequired": true - }, - { - "paramName":"h", - "paramLongName":"hive_metastore_uris", - "paramDescription": "the hive metastore uris", - "paramRequired": true - }, - { - "paramName":"lp", - "paramLongName":"leavesPath", - "paramDescription": "true if the new version of the graph must be saved", - "paramRequired": false - }, - { - "paramName":"cp", - "paramLongName":"childParentPath", - "paramDescription": "path where to store/find association from datasource and organization", - "paramRequired": true - }, - { - "paramName":"rp", - "paramLongName":"resultOrgPath", - "paramDescription": "path where to store/find already linked results and organizations", - "paramRequired": true - }, - { - "paramName": "ssm", - "paramLongName": "isSparkSessionManaged", - "paramDescription": "the path where prepared info have been stored", - "paramRequired": false - }, - { - "paramName": "wd", - "paramLongName": "workingDir", - "paramDescription": "true if it is a test running", - "paramRequired": false - }, - { - "paramName": "out", - "paramLongName": "outputPath", - "paramDescription": "the path used to store temporary output files", - "paramRequired": true - }, - { - "paramName": "it", - "paramLongName": "iterations", - "paramDescription": "the number of iterations to be computed", - "paramRequired": false - }, - { - "paramName": "pop", - "paramLongName": "projectOrganizationPath", - "paramDescription": "the number of iterations to be computed", - "paramRequired": true - } -] \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/entitytoorganizationfromsemrel/oozie_app/config-default.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/entitytoorganizationfromsemrel/oozie_app/config-default.xml deleted file mode 100644 index 2744ea92b..000000000 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/entitytoorganizationfromsemrel/oozie_app/config-default.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - jobTracker - yarnRM - - - nameNode - hdfs://nameservice1 - - - oozie.use.system.libpath - true - - - oozie.action.sharelib.for.spark - spark2 - - - hive_metastore_uris - thrift://iis-cdh5-test-m3.ocean.icm.edu.pl:9083 - - - spark2YarnHistoryServerAddress - http://iis-cdh5-test-gw.ocean.icm.edu.pl:18089 - - - spark2EventLogDir - /user/spark/spark2ApplicationHistory - - - spark2ExtraListeners - com.cloudera.spark.lineage.NavigatorAppListener - - - spark2SqlQueryExecutionListeners - com.cloudera.spark.lineage.NavigatorQueryListener - - - sparkExecutorNumber - 4 - - - sparkDriverMemory - 15G - - - sparkExecutorMemory - 6G - - - sparkExecutorCores - 1 - - - spark2MaxExecutors - 50 - - \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/entitytoorganizationfromsemrel/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/entitytoorganizationfromsemrel/oozie_app/workflow.xml deleted file mode 100644 index d7335d840..000000000 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/entitytoorganizationfromsemrel/oozie_app/workflow.xml +++ /dev/null @@ -1,105 +0,0 @@ - - - - sourcePath - the source path - - - iterations - the number of hops to be done up on the hierarchy - - - - - - ${jobTracker} - ${nameNode} - - - oozie.action.sharelib.for.spark - ${oozieActionShareLibForSpark2} - - - - - - - - Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] - - - - - - - - - - - - - - yarn - cluster - PrepareResultProjectOrganizationAssociation - eu.dnetlib.dhp.entitytoorganizationfromsemrel.PrepareInfo - dhp-enrichment-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - - --graphPath${sourcePath} - --hive_metastore_uris${hive_metastore_uris} - --leavesPath${workingDir}/preparedInfo/leavesPath - --childParentPath${workingDir}/preparedInfo/childParentPath - --resultOrgPath${workingDir}/preparedInfo/resultOrgPath - --projectOrganizationPath${workingDir}/preparedInfo/projectOrganizationPath - --relationPath${workingDir}/preparedInfo/relation - - - - - - - - yarn - cluster - resultProjectToOrganizationFromSemRel - eu.dnetlib.dhp.entitytoorganizationfromsemrel.SparkEntityToOrganizationFromSemRel - dhp-enrichment-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.dynamicAllocation.enabled=true - --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} - --conf spark.sql.shuffle.partitions=3840 - - --relationPath${workingDir}/preparedInfo/relation - --outputPath${sourcePath}/relation - --leavesPath${workingDir}/preparedInfo/leavesPath - --childParentPath${workingDir}/preparedInfo/childParentPath - --resultOrgPath${workingDir}/preparedInfo/resultOrgPath - --projectOrganizationPath${workingDir}/preparedInfo/projectOrganizationPath - --hive_metastore_uris${hive_metastore_uris} - --workingDir${workingDir}/working - --iterations${iterations} - - - - - - - - - - \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/orcidtoresultfromsemrel/input_orcidtoresult_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/orcidtoresultfromsemrel/input_orcidtoresult_parameters.json deleted file mode 100644 index 3cbaa23bb..000000000 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/orcidtoresultfromsemrel/input_orcidtoresult_parameters.json +++ /dev/null @@ -1,44 +0,0 @@ -[ - { - "paramName":"s", - "paramLongName":"sourcePath", - "paramDescription": "the path of the sequencial file to read", - "paramRequired": true - }, - { - "paramName":"sg", - "paramLongName":"saveGraph", - "paramDescription": "true if the new version of the graph must be saved", - "paramRequired": false - }, - { - "paramName": "out", - "paramLongName": "outputPath", - "paramDescription": "the path used to store temporary output files", - "paramRequired": true - }, - { - "paramName": "ssm", - "paramLongName": "isSparkSessionManaged", - "paramDescription": "true if the spark session is managed, false otherwise", - "paramRequired": false - }, - { - "paramName":"tn", - "paramLongName":"resultTableName", - "paramDescription": "the name of the result table we are currently working on", - "paramRequired": true - }, - { - "paramName":"pu", - "paramLongName":"possibleUpdatesPath", - "paramDescription": "the path the the association resultId orcid author list can be found", - "paramRequired": true - }, - { - "paramName":"test", - "paramLongName":"isTest", - "paramDescription": "true if it is executing a test", - "paramRequired": false - } -] \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/orcidtoresultfromsemrel/input_prepareorcidtoresult_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/orcidtoresultfromsemrel/input_prepareorcidtoresult_parameters.json deleted file mode 100644 index 08648d61a..000000000 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/orcidtoresultfromsemrel/input_prepareorcidtoresult_parameters.json +++ /dev/null @@ -1,38 +0,0 @@ -[ - { - "paramName":"s", - "paramLongName":"sourcePath", - "paramDescription": "the path of the sequencial file to read", - "paramRequired": true - }, - { - "paramName":"as", - "paramLongName":"allowedsemrels", - "paramDescription": "the allowed sematinc relations for propagation", - "paramRequired": true - }, - { - "paramName":"h", - "paramLongName":"hive_metastore_uris", - "paramDescription": "the hive metastore uris", - "paramRequired": true - }, - { - "paramName": "out", - "paramLongName": "outputPath", - "paramDescription": "the path used to store temporary output files", - "paramRequired": true - }, - { - "paramName": "ssm", - "paramLongName": "isSparkSessionManaged", - "paramDescription": "true if the spark session is managed, false otherwise", - "paramRequired": false - }, - { - "paramName":"tn", - "paramLongName":"resultTableName", - "paramDescription": "the name of the result table we are currently working on", - "paramRequired": true - } -] \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/orcidtoresultfromsemrel/input_prepareorcidtoresult_parameters2.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/orcidtoresultfromsemrel/input_prepareorcidtoresult_parameters2.json deleted file mode 100644 index 1a67134a6..000000000 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/orcidtoresultfromsemrel/input_prepareorcidtoresult_parameters2.json +++ /dev/null @@ -1,20 +0,0 @@ -[ - { - "paramName":"s", - "paramLongName":"sourcePath", - "paramDescription": "the path of the sequencial file to read", - "paramRequired": true - }, - { - "paramName": "out", - "paramLongName": "outputPath", - "paramDescription": "the path used to store temporary output files", - "paramRequired": true - }, - { - "paramName": "ssm", - "paramLongName": "isSparkSessionManaged", - "paramDescription": "true if the spark session is managed, false otherwise", - "paramRequired": false - } -] \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/orcidtoresultfromsemrel/oozie_app/config-default.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/orcidtoresultfromsemrel/oozie_app/config-default.xml deleted file mode 100644 index 8d2c34105..000000000 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/orcidtoresultfromsemrel/oozie_app/config-default.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - jobTracker - yarnRM - - - nameNode - hdfs://nameservice1 - - - oozie.use.system.libpath - true - - - oozie.action.sharelib.for.spark - spark2 - - - spark2YarnHistoryServerAddress - http://iis-cdh5-test-gw.ocean.icm.edu.pl:18089 - - - hive_metastore_uris - thrift://iis-cdh5-test-m3.ocean.icm.edu.pl:9083 - - - spark2EventLogDir - /user/spark/spark2ApplicationHistory - - - spark2ExtraListeners - com.cloudera.spark.lineage.NavigatorAppListener - - - spark2SqlQueryExecutionListeners - com.cloudera.spark.lineage.NavigatorQueryListener - - - sparkExecutorNumber - 4 - - - sparkDriverMemory - 15G - - - sparkExecutorMemory - 6G - - - sparkExecutorCores - 1 - - - spark2MaxExecutors - 50 - - \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/orcidtoresultfromsemrel/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/orcidtoresultfromsemrel/oozie_app/workflow.xml deleted file mode 100644 index 5f52c1658..000000000 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/orcidtoresultfromsemrel/oozie_app/workflow.xml +++ /dev/null @@ -1,371 +0,0 @@ - - - - sourcePath - the source path - - - allowedsemrels - the semantic relationships allowed for propagation - - - outputPath - the output path - - - - - - - Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] - - - - - - - - - - - - - - - - - - - - - ${jobTracker} - ${nameNode} - ${nameNode}/${sourcePath}/relation - ${nameNode}/${outputPath}/relation - - - - - - - - ${jobTracker} - ${nameNode} - ${nameNode}/${sourcePath}/organization - ${nameNode}/${outputPath}/organization - - - - - - - - ${jobTracker} - ${nameNode} - ${nameNode}/${sourcePath}/project - ${nameNode}/${outputPath}/project - - - - - - - - ${jobTracker} - ${nameNode} - ${nameNode}/${sourcePath}/datasource - ${nameNode}/${outputPath}/datasource - - - - - - - - - - - - - - - - - yarn - cluster - ORCIDPropagation-PreparePhase1-Publications - eu.dnetlib.dhp.orcidtoresultfromsemrel.PrepareResultOrcidAssociationStep1 - dhp-enrichment-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.dynamicAllocation.enabled=true - --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} - --conf spark.sql.shuffle.partitions=3840 - --conf spark.speculation=false - --conf spark.hadoop.mapreduce.map.speculative=false - --conf spark.hadoop.mapreduce.reduce.speculative=false - - --sourcePath${sourcePath} - --hive_metastore_uris${hive_metastore_uris} - --resultTableNameeu.dnetlib.dhp.schema.oaf.Publication - --outputPath${workingDir}/preparedInfo/targetOrcidAssoc - --allowedsemrels${allowedsemrels} - - - - - - - - yarn - cluster - ORCIDPropagation-PreparePhase1-Dataset - eu.dnetlib.dhp.orcidtoresultfromsemrel.PrepareResultOrcidAssociationStep1 - dhp-enrichment-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.dynamicAllocation.enabled=true - --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} - - --sourcePath${sourcePath} - --hive_metastore_uris${hive_metastore_uris} - --resultTableNameeu.dnetlib.dhp.schema.oaf.Dataset - --outputPath${workingDir}/preparedInfo/targetOrcidAssoc - --allowedsemrels${allowedsemrels} - - - - - - - - yarn - cluster - ORCIDPropagation-PreparePhase1-ORP - eu.dnetlib.dhp.orcidtoresultfromsemrel.PrepareResultOrcidAssociationStep1 - dhp-enrichment-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.dynamicAllocation.enabled=true - --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} - - --sourcePath${sourcePath} - --hive_metastore_uris${hive_metastore_uris} - --resultTableNameeu.dnetlib.dhp.schema.oaf.OtherResearchProduct - --outputPath${workingDir}/preparedInfo/targetOrcidAssoc - --allowedsemrels${allowedsemrels} - - - - - - - - yarn - cluster - ORCIDPropagation-PreparePhase1-Software - eu.dnetlib.dhp.orcidtoresultfromsemrel.PrepareResultOrcidAssociationStep1 - dhp-enrichment-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.dynamicAllocation.enabled=true - --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} - - --sourcePath${sourcePath} - --hive_metastore_uris${hive_metastore_uris} - --resultTableNameeu.dnetlib.dhp.schema.oaf.Software - --outputPath${workingDir}/preparedInfo/targetOrcidAssoc - --allowedsemrels${allowedsemrels} - - - - - - - - - - yarn - cluster - ORCIDPropagation-PreparePhase2 - eu.dnetlib.dhp.orcidtoresultfromsemrel.PrepareResultOrcidAssociationStep2 - dhp-enrichment-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.dynamicAllocation.enabled=true - --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} - - --sourcePath${workingDir}/preparedInfo/targetOrcidAssoc - --outputPath${workingDir}/preparedInfo/mergedOrcidAssoc - - - - - - - - - - - - - - - yarn - cluster - ORCIDPropagation-Publication - eu.dnetlib.dhp.orcidtoresultfromsemrel.SparkOrcidToResultFromSemRelJob - dhp-enrichment-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.dynamicAllocation.enabled=true - --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} - --conf spark.speculation=false - --conf spark.hadoop.mapreduce.map.speculative=false - --conf spark.hadoop.mapreduce.reduce.speculative=false - --conf spark.sql.shuffle.partitions=3840 - - --possibleUpdatesPath${workingDir}/preparedInfo/mergedOrcidAssoc - --sourcePath${sourcePath}/publication - --hive_metastore_uris${hive_metastore_uris} - --resultTableNameeu.dnetlib.dhp.schema.oaf.Publication - --outputPath${outputPath}/publication - - - - - - - - yarn - cluster - ORCIDPropagation-Dataset - eu.dnetlib.dhp.orcidtoresultfromsemrel.SparkOrcidToResultFromSemRelJob - dhp-enrichment-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.dynamicAllocation.enabled=true - --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} - --conf spark.speculation=false - --conf spark.hadoop.mapreduce.map.speculative=false - --conf spark.hadoop.mapreduce.reduce.speculative=false - - --possibleUpdatesPath${workingDir}/preparedInfo/mergedOrcidAssoc - --sourcePath${sourcePath}/dataset - --hive_metastore_uris${hive_metastore_uris} - --resultTableNameeu.dnetlib.dhp.schema.oaf.Dataset - --outputPath${outputPath}/dataset - - - - - - - - yarn - cluster - ORCIDPropagation-ORP - eu.dnetlib.dhp.orcidtoresultfromsemrel.SparkOrcidToResultFromSemRelJob - dhp-enrichment-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.dynamicAllocation.enabled=true - --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} - --conf spark.speculation=false - --conf spark.hadoop.mapreduce.map.speculative=false - --conf spark.hadoop.mapreduce.reduce.speculative=false - - --possibleUpdatesPath${workingDir}/preparedInfo/mergedOrcidAssoc - --sourcePath${sourcePath}/otherresearchproduct - --hive_metastore_uris${hive_metastore_uris} - --resultTableNameeu.dnetlib.dhp.schema.oaf.OtherResearchProduct - --outputPath${outputPath}/otherresearchproduct - - - - - - - - yarn - cluster - ORCIDPropagation-Software - eu.dnetlib.dhp.orcidtoresultfromsemrel.SparkOrcidToResultFromSemRelJob - dhp-enrichment-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.dynamicAllocation.enabled=true - --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} - --conf spark.speculation=false - --conf spark.hadoop.mapreduce.map.speculative=false - --conf spark.hadoop.mapreduce.reduce.speculative=false - - --possibleUpdatesPath${workingDir}/preparedInfo/mergedOrcidAssoc - --sourcePath${sourcePath}/software - --hive_metastore_uris${hive_metastore_uris} - --resultTableNameeu.dnetlib.dhp.schema.oaf.Software - --outputPath${outputPath}/software - - - - - - - - - - \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/projecttoresult/input_prepareprojecttoresult_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/projecttoresult/input_prepareprojecttoresult_parameters.json deleted file mode 100644 index a70dbd6a0..000000000 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/projecttoresult/input_prepareprojecttoresult_parameters.json +++ /dev/null @@ -1,33 +0,0 @@ -[ - { - "paramName":"s", - "paramLongName":"sourcePath", - "paramDescription": "the path of the sequencial file to read", - "paramRequired": true - }, - - { - "paramName":"asr", - "paramLongName":"allowedsemrels", - "paramDescription": "the types of the allowed datasources. Split by ;", - "paramRequired": true - }, - { - "paramName":"h", - "paramLongName":"hive_metastore_uris", - "paramDescription": "the hive metastore uris", - "paramRequired": true - }, - { - "paramName":"pu", - "paramLongName":"potentialUpdatePath", - "paramDescription": "the path of the potential updates ", - "paramRequired": true - }, - { - "paramName":"al", - "paramLongName":"alreadyLinkedPath", - "paramDescription": "the path of the already linked project result_set", - "paramRequired": true - } -] \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/projecttoresult/input_projecttoresult_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/projecttoresult/input_projecttoresult_parameters.json deleted file mode 100644 index 7f44ba03c..000000000 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/projecttoresult/input_projecttoresult_parameters.json +++ /dev/null @@ -1,44 +0,0 @@ -[ - { - "paramName":"h", - "paramLongName":"hive_metastore_uris", - "paramDescription": "the hive metastore uris", - "paramRequired": true - }, - { - "paramName":"sg", - "paramLongName":"saveGraph", - "paramDescription": "true if the new version of the graph must be saved", - "paramRequired": false - }, - { - "paramName":"pu", - "paramLongName":"potentialUpdatePath", - "paramDescription": "the path of the potential updates ", - "paramRequired": true - }, - { - "paramName":"al", - "paramLongName":"alreadyLinkedPath", - "paramDescription": "the path of the already linked project result_set", - "paramRequired": true - }, - { - "paramName": "ssm", - "paramLongName": "isSparkSessionManaged", - "paramDescription": "the path where prepared info have been stored", - "paramRequired": false - }, - { - "paramName": "out", - "paramLongName": "outputPath", - "paramDescription": "the path used to store temporary output files", - "paramRequired": true - }, - { - "paramName": "test", - "paramLongName": "isTest", - "paramDescription": "true if it is a test running", - "paramRequired": false - } -] \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/projecttoresult/oozie_app/config-default.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/projecttoresult/oozie_app/config-default.xml deleted file mode 100644 index caf3c6050..000000000 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/projecttoresult/oozie_app/config-default.xml +++ /dev/null @@ -1,63 +0,0 @@ - - - jobTracker - yarnRM - - - - nameNode - - hdfs://nameservice1 - - - oozie.use.system.libpath - true - - - oozie.action.sharelib.for.spark - spark2 - - - hive_metastore_uris - thrift://iis-cdh5-test-m3.ocean.icm.edu.pl:9083 - - - - spark2YarnHistoryServerAddress - http://iis-cdh5-test-gw.ocean.icm.edu.pl:18089 - - - spark2EventLogDir - /user/spark/spark2ApplicationHistory - - - spark2ExtraListeners - com.cloudera.spark.lineage.NavigatorAppListener - - - spark2SqlQueryExecutionListeners - com.cloudera.spark.lineage.NavigatorQueryListener - - - sparkExecutorNumber - 4 - - - sparkDriverMemory - 15G - - - sparkExecutorMemory - 6G - - - sparkExecutorCores - 1 - - - spark2MaxExecutors - 50 - - - - \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/projecttoresult/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/projecttoresult/oozie_app/workflow.xml deleted file mode 100644 index 9e91c06fb..000000000 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/projecttoresult/oozie_app/workflow.xml +++ /dev/null @@ -1,184 +0,0 @@ - - - - sourcePath - the source path - - - allowedsemrels - the allowed semantics - - - outputPath - the output path - - - - - ${jobTracker} - ${nameNode} - - - oozie.action.sharelib.for.spark - ${oozieActionShareLibForSpark2} - - - - - - - - Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] - - - - - - - - - - - - - - - - - - - - - - - - - ${nameNode}/${sourcePath}/relation - ${nameNode}/${outputPath}/relation - - - - - - - - ${nameNode}/${sourcePath}/publication - ${nameNode}/${outputPath}/publication - - - - - - - - ${nameNode}/${sourcePath}/dataset - ${nameNode}/${outputPath}/dataset - - - - - - - - ${nameNode}/${sourcePath}/otherresearchproduct - ${nameNode}/${outputPath}/otherresearchproduct - - - - - - - - ${nameNode}/${sourcePath}/software - ${nameNode}/${outputPath}/software - - - - - - - - ${nameNode}/${sourcePath}/organization - ${nameNode}/${outputPath}/organization - - - - - - - - ${nameNode}/${sourcePath}/project - ${nameNode}/${outputPath}/project - - - - - - - - ${nameNode}/${sourcePath}/datasource - ${nameNode}/${outputPath}/datasource - - - - - - - - - - yarn - cluster - PrepareProjectResultsAssociation - eu.dnetlib.dhp.projecttoresult.PrepareProjectResultsAssociation - dhp-enrichment-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - - --sourcePath${sourcePath}/relation - --allowedsemrels${allowedsemrels} - --hive_metastore_uris${hive_metastore_uris} - --potentialUpdatePath${workingDir}/preparedInfo/potentialUpdates - --alreadyLinkedPath${workingDir}/preparedInfo/alreadyLinked - - - - - - - - yarn - cluster - ProjectToResultPropagation - eu.dnetlib.dhp.projecttoresult.SparkResultToProjectThroughSemRelJob - dhp-enrichment-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.dynamicAllocation.enabled=true - --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} - - --saveGraph${saveGraph} - --hive_metastore_uris${hive_metastore_uris} - --outputPath${outputPath}/relation - --potentialUpdatePath${workingDir}/preparedInfo/potentialUpdates - --alreadyLinkedPath${workingDir}/preparedInfo/alreadyLinked - - - - - - - - \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/input_communitytoresult_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/input_communitytoresult_parameters.json deleted file mode 100644 index 0db8085d1..000000000 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/input_communitytoresult_parameters.json +++ /dev/null @@ -1,28 +0,0 @@ -[ - { - "paramName":"s", - "paramLongName":"sourcePath", - "paramDescription": "the path of the sequencial file to read", - "paramRequired": true - }, - - { - "paramName": "out", - "paramLongName": "outputPath", - "paramDescription": "the path used to store temporary output files", - "paramRequired": true - }, - { - "paramName": "ssm", - "paramLongName": "isSparkSessionManaged", - "paramDescription": "true if the spark session is managed, false otherwise", - "paramRequired": false - }, - { - "paramName": "p", - "paramLongName": "preparedInfoPath", - "paramDescription": "the path where prepared info have been stored", - "paramRequired": true - } - -] \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/input_preparecommunitytoresult_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/input_preparecommunitytoresult_parameters.json deleted file mode 100644 index 3601db7ac..000000000 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/input_preparecommunitytoresult_parameters.json +++ /dev/null @@ -1,33 +0,0 @@ -[ - { - "paramName":"s", - "paramLongName":"sourcePath", - "paramDescription": "the path of the sequencial file to read", - "paramRequired": true - }, - { - "paramName":"h", - "paramLongName":"hive_metastore_uris", - "paramDescription": "the hive metastore uris", - "paramRequired": true - }, - { - "paramName": "ssm", - "paramLongName": "isSparkSessionManaged", - "paramDescription": "true if the spark session is managed, false otherwise", - "paramRequired": false - }, - { - "paramName": "out", - "paramLongName": "outputPath", - "paramDescription": "the path used to store temporary output files", - "paramRequired": true - }, - { - "paramName": "bu", - "paramLongName": "baseURL", - "paramDescription": "the base URL to the community API to use", - "paramRequired": false - } - -] \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/oozie_app/config-default.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/oozie_app/config-default.xml deleted file mode 100644 index 2744ea92b..000000000 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/oozie_app/config-default.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - jobTracker - yarnRM - - - nameNode - hdfs://nameservice1 - - - oozie.use.system.libpath - true - - - oozie.action.sharelib.for.spark - spark2 - - - hive_metastore_uris - thrift://iis-cdh5-test-m3.ocean.icm.edu.pl:9083 - - - spark2YarnHistoryServerAddress - http://iis-cdh5-test-gw.ocean.icm.edu.pl:18089 - - - spark2EventLogDir - /user/spark/spark2ApplicationHistory - - - spark2ExtraListeners - com.cloudera.spark.lineage.NavigatorAppListener - - - spark2SqlQueryExecutionListeners - com.cloudera.spark.lineage.NavigatorQueryListener - - - sparkExecutorNumber - 4 - - - sparkDriverMemory - 15G - - - sparkExecutorMemory - 6G - - - sparkExecutorCores - 1 - - - spark2MaxExecutors - 50 - - \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/oozie_app/workflow.xml deleted file mode 100644 index dfa762ac6..000000000 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromorganization/oozie_app/workflow.xml +++ /dev/null @@ -1,147 +0,0 @@ - - - - sourcePath - the source path - - - outputPath - the output path - - - baseURL - the community API base URL - - - - - ${jobTracker} - ${nameNode} - - - oozie.action.sharelib.for.spark - ${oozieActionShareLibForSpark2} - - - - - - - - Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] - - - - - - - - - - - - - - - - - - - - - ${nameNode}/${sourcePath}/relation - ${nameNode}/${outputPath}/relation - - - - - - - - ${nameNode}/${sourcePath}/organization - ${nameNode}/${outputPath}/organization - - - - - - - - ${nameNode}/${sourcePath}/project - ${nameNode}/${outputPath}/project - - - - - - - - ${nameNode}/${sourcePath}/datasource - ${nameNode}/${outputPath}/datasource - - - - - - - - - - yarn - cluster - Prepare-Community-Result-Organization - eu.dnetlib.dhp.resulttocommunityfromorganization.PrepareResultCommunitySet - dhp-enrichment-${projectVersion}.jar - - --executor-cores=6 - --executor-memory=5G - --conf spark.executor.memoryOverhead=3g - --conf spark.sql.shuffle.partitions=3284 - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} - - --sourcePath${sourcePath}/relation - --outputPath${workingDir}/preparedInfo/resultCommunityList - --hive_metastore_uris${hive_metastore_uris} - --baseURL${baseURL} - - - - - - - - yarn - cluster - community2resultfromorganization - eu.dnetlib.dhp.resulttocommunityfromorganization.SparkResultToCommunityFromOrganizationJob - dhp-enrichment-${projectVersion}.jar - - --executor-cores=6 - --executor-memory=5G - --conf spark.executor.memoryOverhead=3g - --conf spark.sql.shuffle.partitions=3284 - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} - - --preparedInfoPath${workingDir}/preparedInfo/resultCommunityList - --sourcePath${sourcePath}/ - --outputPath${outputPath}/ - - - - - - - - - - \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromproject/input_communitytoresult_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromproject/input_communitytoresult_parameters.json deleted file mode 100644 index 0db8085d1..000000000 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromproject/input_communitytoresult_parameters.json +++ /dev/null @@ -1,28 +0,0 @@ -[ - { - "paramName":"s", - "paramLongName":"sourcePath", - "paramDescription": "the path of the sequencial file to read", - "paramRequired": true - }, - - { - "paramName": "out", - "paramLongName": "outputPath", - "paramDescription": "the path used to store temporary output files", - "paramRequired": true - }, - { - "paramName": "ssm", - "paramLongName": "isSparkSessionManaged", - "paramDescription": "true if the spark session is managed, false otherwise", - "paramRequired": false - }, - { - "paramName": "p", - "paramLongName": "preparedInfoPath", - "paramDescription": "the path where prepared info have been stored", - "paramRequired": true - } - -] \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromproject/input_preparecommunitytoresult_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromproject/input_preparecommunitytoresult_parameters.json deleted file mode 100644 index cbc01c2d5..000000000 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromproject/input_preparecommunitytoresult_parameters.json +++ /dev/null @@ -1,28 +0,0 @@ -[ - { - "paramName":"s", - "paramLongName":"sourcePath", - "paramDescription": "the path of the sequencial file to read", - "paramRequired": true - }, - - { - "paramName": "ssm", - "paramLongName": "isSparkSessionManaged", - "paramDescription": "true if the spark session is managed, false otherwise", - "paramRequired": false - }, - { - "paramName": "out", - "paramLongName": "outputPath", - "paramDescription": "the path used to store temporary output files", - "paramRequired": true - }, - { - "paramName": "bu", - "paramLongName": "baseURL", - "paramDescription": "the path used to store temporary output files", - "paramRequired": false - } - -] \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromproject/oozie_app/config-default.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromproject/oozie_app/config-default.xml deleted file mode 100644 index 2744ea92b..000000000 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromproject/oozie_app/config-default.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - jobTracker - yarnRM - - - nameNode - hdfs://nameservice1 - - - oozie.use.system.libpath - true - - - oozie.action.sharelib.for.spark - spark2 - - - hive_metastore_uris - thrift://iis-cdh5-test-m3.ocean.icm.edu.pl:9083 - - - spark2YarnHistoryServerAddress - http://iis-cdh5-test-gw.ocean.icm.edu.pl:18089 - - - spark2EventLogDir - /user/spark/spark2ApplicationHistory - - - spark2ExtraListeners - com.cloudera.spark.lineage.NavigatorAppListener - - - spark2SqlQueryExecutionListeners - com.cloudera.spark.lineage.NavigatorQueryListener - - - sparkExecutorNumber - 4 - - - sparkDriverMemory - 15G - - - sparkExecutorMemory - 6G - - - sparkExecutorCores - 1 - - - spark2MaxExecutors - 50 - - \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromproject/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromproject/oozie_app/workflow.xml deleted file mode 100644 index 21cc2d887..000000000 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromproject/oozie_app/workflow.xml +++ /dev/null @@ -1,144 +0,0 @@ - - - - sourcePath - the source path - - - - outputPath - the output path - - - - - ${jobTracker} - ${nameNode} - - - oozie.action.sharelib.for.spark - ${oozieActionShareLibForSpark2} - - - - - - - - Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] - - - - - - - - - - - - - - - - - - - - - ${nameNode}/${sourcePath}/relation - ${nameNode}/${outputPath}/relation - - - - - - - - ${nameNode}/${sourcePath}/organization - ${nameNode}/${outputPath}/organization - - - - - - - - ${nameNode}/${sourcePath}/project - ${nameNode}/${outputPath}/project - - - - - - - - ${nameNode}/${sourcePath}/datasource - ${nameNode}/${outputPath}/datasource - - - - - - - - - - yarn - cluster - Prepare-Community-Result-Organization - eu.dnetlib.dhp.resulttocommunityfromproject.PrepareResultCommunitySet - dhp-enrichment-${projectVersion}.jar - - --executor-cores=6 - --executor-memory=5G - --conf spark.executor.memoryOverhead=3g - --conf spark.sql.shuffle.partitions=3284 - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - - --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} - - --sourcePath${sourcePath}/relation - --outputPath${workingDir}/preparedInfo/resultCommunityList - --production${production} - - - - - - - - yarn - cluster - community2resultfromproject - eu.dnetlib.dhp.resulttocommunityfromproject.SparkResultToCommunityFromProject - dhp-enrichment-${projectVersion}.jar - - --executor-cores=6 - --executor-memory=5G - --conf spark.executor.memoryOverhead=3g - --conf spark.sql.shuffle.partitions=3284 - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} - - --preparedInfoPath${workingDir}/preparedInfo/resultCommunityList - --sourcePath${sourcePath}/ - --outputPath${outputPath}/ - - - - - - - - - - \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromsemrel/input_communitytoresult_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromsemrel/input_communitytoresult_parameters.json deleted file mode 100644 index a40ce375e..000000000 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromsemrel/input_communitytoresult_parameters.json +++ /dev/null @@ -1,52 +0,0 @@ -[ - - { - "paramName":"s", - "paramLongName":"sourcePath", - "paramDescription": "the path of the sequencial file to read", - "paramRequired": true - }, - { - "paramName":"sg", - "paramLongName":"saveGraph", - "paramDescription": "true if the new version of the graph must be saved", - "paramRequired": false - }, - { - "paramName":"h", - "paramLongName":"hive_metastore_uris", - "paramDescription": "the hive metastore uris", - "paramRequired": true - }, - { - "paramName": "ssm", - "paramLongName": "isSparkSessionManaged", - "paramDescription": "true if the spark session is managed, false otherwise", - "paramRequired": false - }, - { - "paramName": "out", - "paramLongName": "outputPath", - "paramDescription": "the path used to store temporary output files", - "paramRequired": true - }, - { - "paramName":"tn", - "paramLongName":"resultTableName", - "paramDescription": "the name of the result table we are currently working on", - "paramRequired": true - }, - { - "paramName": "p", - "paramLongName": "preparedInfoPath", - "paramDescription": "the path where prepared info have been stored", - "paramRequired": true - }, - { - "paramName":"test", - "paramLongName":"isTest", - "paramDescription": "true if it is executing a test", - "paramRequired": false - } - -] \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromsemrel/input_preparecommunitytoresult2_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromsemrel/input_preparecommunitytoresult2_parameters.json deleted file mode 100644 index 3ba3c8e9c..000000000 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromsemrel/input_preparecommunitytoresult2_parameters.json +++ /dev/null @@ -1,20 +0,0 @@ -[ - { - "paramName":"s", - "paramLongName":"sourcePath", - "paramDescription": "the path of the sequencial file to read", - "paramRequired": true - }, - { - "paramName": "ssm", - "paramLongName": "isSparkSessionManaged", - "paramDescription": "true if the spark session is managed, false otherwise", - "paramRequired": false - }, - { - "paramName": "out", - "paramLongName": "outputPath", - "paramDescription": "the path used to store temporary output files", - "paramRequired": true - } -] \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromsemrel/input_preparecommunitytoresult_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromsemrel/input_preparecommunitytoresult_parameters.json deleted file mode 100644 index 271db10bb..000000000 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromsemrel/input_preparecommunitytoresult_parameters.json +++ /dev/null @@ -1,44 +0,0 @@ -[ - { - "paramName":"bu", - "paramLongName":"baseURL", - "paramDescription": "URL of the isLookUp Service", - "paramRequired": true - }, - { - "paramName":"s", - "paramLongName":"sourcePath", - "paramDescription": "the path of the sequencial file to read", - "paramRequired": true - }, - { - "paramName":"as", - "paramLongName":"allowedsemrels", - "paramDescription": "the allowed semantic relations for propagation", - "paramRequired": true - }, - { - "paramName":"h", - "paramLongName":"hive_metastore_uris", - "paramDescription": "the hive metastore uris", - "paramRequired": true - }, - { - "paramName": "ssm", - "paramLongName": "isSparkSessionManaged", - "paramDescription": "true if the spark session is managed, false otherwise", - "paramRequired": false - }, - { - "paramName": "out", - "paramLongName": "outputPath", - "paramDescription": "the path used to store temporary output files", - "paramRequired": true - }, - { - "paramName":"tn", - "paramLongName":"resultTableName", - "paramDescription": "the name of the result table we are currently working on", - "paramRequired": true - } -] \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromsemrel/oozie_app/config-default.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromsemrel/oozie_app/config-default.xml deleted file mode 100644 index 2744ea92b..000000000 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromsemrel/oozie_app/config-default.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - jobTracker - yarnRM - - - nameNode - hdfs://nameservice1 - - - oozie.use.system.libpath - true - - - oozie.action.sharelib.for.spark - spark2 - - - hive_metastore_uris - thrift://iis-cdh5-test-m3.ocean.icm.edu.pl:9083 - - - spark2YarnHistoryServerAddress - http://iis-cdh5-test-gw.ocean.icm.edu.pl:18089 - - - spark2EventLogDir - /user/spark/spark2ApplicationHistory - - - spark2ExtraListeners - com.cloudera.spark.lineage.NavigatorAppListener - - - spark2SqlQueryExecutionListeners - com.cloudera.spark.lineage.NavigatorQueryListener - - - sparkExecutorNumber - 4 - - - sparkDriverMemory - 15G - - - sparkExecutorMemory - 6G - - - sparkExecutorCores - 1 - - - spark2MaxExecutors - 50 - - \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromsemrel/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromsemrel/oozie_app/workflow.xml deleted file mode 100644 index 916eb8b7c..000000000 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttocommunityfromsemrel/oozie_app/workflow.xml +++ /dev/null @@ -1,366 +0,0 @@ - - - - sourcePath - the source path - - - allowedsemrels - the semantic relationships allowed for propagation - - - baseURL - the baseurl for the comminity APIs - - - outputPath - the output path - - - - - - - Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] - - - - - - - - - - - - - - - - - - - - - ${jobTracker} - ${nameNode} - ${nameNode}/${sourcePath}/relation - ${nameNode}/${outputPath}/relation - - - - - - - - ${jobTracker} - ${nameNode} - ${nameNode}/${sourcePath}/organization - ${nameNode}/${outputPath}/organization - - - - - - - - ${jobTracker} - ${nameNode} - ${nameNode}/${sourcePath}/project - ${nameNode}/${outputPath}/project - - - - - - - - ${jobTracker} - ${nameNode} - ${nameNode}/${sourcePath}/datasource - ${nameNode}/${outputPath}/datasource - - - - - - - - - - - - - - - - - yarn - cluster - ResultToCommunitySemRel-PreparePhase1-Publications - eu.dnetlib.dhp.resulttocommunityfromsemrel.PrepareResultCommunitySetStep1 - dhp-enrichment-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.dynamicAllocation.enabled=true - --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} - - --sourcePath${sourcePath} - --hive_metastore_uris${hive_metastore_uris} - --resultTableNameeu.dnetlib.dhp.schema.oaf.Publication - --outputPath${workingDir}/preparedInfo/targetCommunityAssoc - --allowedsemrels${allowedsemrels} - --baseURL${baseURL} - - - - - - - - yarn - cluster - ResultToCommunitySemRel-PreparePhase1-Dataset - eu.dnetlib.dhp.resulttocommunityfromsemrel.PrepareResultCommunitySetStep1 - dhp-enrichment-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.dynamicAllocation.enabled=true - --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} - - --sourcePath${sourcePath} - --hive_metastore_uris${hive_metastore_uris} - --resultTableNameeu.dnetlib.dhp.schema.oaf.Dataset - --outputPath${workingDir}/preparedInfo/targetCommunityAssoc - --allowedsemrels${allowedsemrels} - --isLookUpUrl${isLookUpUrl} - - - - - - - - yarn - cluster - ResultToCommunitySemRel-PreparePhase1-ORP - eu.dnetlib.dhp.resulttocommunityfromsemrel.PrepareResultCommunitySetStep1 - dhp-enrichment-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.dynamicAllocation.enabled=true - --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} - - --sourcePath${sourcePath} - --hive_metastore_uris${hive_metastore_uris} - --resultTableNameeu.dnetlib.dhp.schema.oaf.OtherResearchProduct - --outputPath${workingDir}/preparedInfo/targetCommunityAssoc - --allowedsemrels${allowedsemrels} - --isLookUpUrl${isLookUpUrl} - - - - - - - - yarn - cluster - ResultToCommunitySemRel-PreparePhase1-Software - eu.dnetlib.dhp.resulttocommunityfromsemrel.PrepareResultCommunitySetStep1 - dhp-enrichment-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.dynamicAllocation.enabled=true - --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} - - --sourcePath${sourcePath} - --hive_metastore_uris${hive_metastore_uris} - --resultTableNameeu.dnetlib.dhp.schema.oaf.Software - --outputPath${workingDir}/preparedInfo/targetCommunityAssoc - --allowedsemrels${allowedsemrels} - --isLookUpUrl${isLookUpUrl} - - - - - - - - - - yarn - cluster - ResultToCommunityEmRelPropagation-PreparePhase2 - eu.dnetlib.dhp.resulttocommunityfromsemrel.PrepareResultCommunitySetStep2 - dhp-enrichment-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.dynamicAllocation.enabled=true - --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} - - --sourcePath${workingDir}/preparedInfo/targetCommunityAssoc - --outputPath${workingDir}/preparedInfo/mergedCommunityAssoc - - - - - - - - - - - - - - - yarn - cluster - Result2CommunitySemRelPropagation-Publication - eu.dnetlib.dhp.resulttocommunityfromsemrel.SparkResultToCommunityThroughSemRelJob - dhp-enrichment-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.dynamicAllocation.enabled=true - --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} - - --preparedInfoPath${workingDir}/preparedInfo/mergedCommunityAssoc - --sourcePath${sourcePath}/publication - --hive_metastore_uris${hive_metastore_uris} - --resultTableNameeu.dnetlib.dhp.schema.oaf.Publication - --outputPath${outputPath}/publication - --saveGraph${saveGraph} - - - - - - - - yarn - cluster - Result2CommunitySemRelPropagation-Dataset - eu.dnetlib.dhp.resulttocommunityfromsemrel.SparkResultToCommunityThroughSemRelJob - dhp-enrichment-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.dynamicAllocation.enabled=true - --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} - - --preparedInfoPath${workingDir}/preparedInfo/mergedCommunityAssoc - --sourcePath${sourcePath}/dataset - --hive_metastore_uris${hive_metastore_uris} - --resultTableNameeu.dnetlib.dhp.schema.oaf.Dataset - --outputPath${outputPath}/dataset - --saveGraph${saveGraph} - - - - - - - - yarn - cluster - Result2CommunitySemRelPropagation-ORP - eu.dnetlib.dhp.resulttocommunityfromsemrel.SparkResultToCommunityThroughSemRelJob - dhp-enrichment-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.dynamicAllocation.enabled=true - --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} - - --preparedInfoPath${workingDir}/preparedInfo/mergedCommunityAssoc - --sourcePath${sourcePath}/otherresearchproduct - --hive_metastore_uris${hive_metastore_uris} - --resultTableNameeu.dnetlib.dhp.schema.oaf.OtherResearchProduct - --outputPath${outputPath}/otherresearchproduct - --saveGraph${saveGraph} - - - - - - - - yarn - cluster - Result2CommunitySemRelPropagation-Software - eu.dnetlib.dhp.resulttocommunityfromsemrel.SparkResultToCommunityThroughSemRelJob - dhp-enrichment-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.dynamicAllocation.enabled=true - --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} - - --preparedInfoPath${workingDir}/preparedInfo/mergedCommunityAssoc - --sourcePath${sourcePath}/software - --hive_metastore_uris${hive_metastore_uris} - --resultTableNameeu.dnetlib.dhp.schema.oaf.Software - --outputPath${outputPath}/software - --saveGraph${saveGraph} - - - - - - - - - - \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/input_newrelation_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/input_newrelation_parameters.json deleted file mode 100644 index 5fe92cff1..000000000 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/input_newrelation_parameters.json +++ /dev/null @@ -1,20 +0,0 @@ -[ - { - "paramName":"s", - "paramLongName":"sourcePath", - "paramDescription": "the path of the sequencial file to read", - "paramRequired": true - }, - - { - "paramName": "ssm", - "paramLongName": "isSparkSessionManaged", - "paramDescription": "the path where prepared info have been stored", - "paramRequired": false - },{ - "paramName": "o", - "paramLongName": "outputPath", - "paramDescription": "institutional repositories that should not be considered for the propagation", - "paramRequired": false -} -] \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/input_prepareresultorg_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/input_prepareresultorg_parameters.json deleted file mode 100644 index 3f4b1d151..000000000 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/input_prepareresultorg_parameters.json +++ /dev/null @@ -1,32 +0,0 @@ -[ - { - "paramName":"s", - "paramLongName":"sourcePath", - "paramDescription": "the path of the sequencial file to read", - "paramRequired": true - }, - { - "paramName":"h", - "paramLongName":"hive_metastore_uris", - "paramDescription": "the hive metastore uris", - "paramRequired": true - }, - - { - "paramName":"wp", - "paramLongName":"workingPath", - "paramDescription": "the working path", - "paramRequired": true - }, - { - "paramName": "ssm", - "paramLongName": "isSparkSessionManaged", - "paramDescription": "the path where prepared info have been stored", - "paramRequired": false - },{ - "paramName": "bl", - "paramLongName": "blacklist", - "paramDescription": "institutional repositories that should not be considered for the propagation", - "paramRequired": false -} -] \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/input_propagationresulaffiliationfrominstrepo_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/input_propagationresulaffiliationfrominstrepo_parameters.json deleted file mode 100644 index d2b076c82..000000000 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/input_propagationresulaffiliationfrominstrepo_parameters.json +++ /dev/null @@ -1,56 +0,0 @@ -[ - { - "paramName":"s", - "paramLongName":"sourcePath", - "paramDescription": "the path of the sequencial file to read", - "paramRequired": true - }, - { - "paramName":"h", - "paramLongName":"hive_metastore_uris", - "paramDescription": "the hive metastore uris", - "paramRequired": true - }, - { - "paramName":"sg", - "paramLongName":"saveGraph", - "paramDescription": "true if the new version of the graph must be saved", - "paramRequired": false - }, - { - "paramName":"dop", - "paramLongName":"datasourceOrganizationPath", - "paramDescription": "path where to store/find association from datasource and organization", - "paramRequired": true - }, - { - "paramName":"alp", - "paramLongName":"alreadyLinkedPath", - "paramDescription": "path where to store/find already linked results and organizations", - "paramRequired": true - }, - { - "paramName": "ssm", - "paramLongName": "isSparkSessionManaged", - "paramDescription": "the path where prepared info have been stored", - "paramRequired": false - }, - { - "paramName": "test", - "paramLongName": "isTest", - "paramDescription": "true if it is a test running", - "paramRequired": false - }, - { - "paramName":"tn", - "paramLongName":"resultTableName", - "paramDescription": "the name of the result table we are currently working on", - "paramRequired": true - }, - { - "paramName": "out", - "paramLongName": "outputPath", - "paramDescription": "the path used to store temporary output files", - "paramRequired": true - } -] \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/oozie_app/config-default.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/oozie_app/config-default.xml deleted file mode 100644 index 2744ea92b..000000000 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/oozie_app/config-default.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - jobTracker - yarnRM - - - nameNode - hdfs://nameservice1 - - - oozie.use.system.libpath - true - - - oozie.action.sharelib.for.spark - spark2 - - - hive_metastore_uris - thrift://iis-cdh5-test-m3.ocean.icm.edu.pl:9083 - - - spark2YarnHistoryServerAddress - http://iis-cdh5-test-gw.ocean.icm.edu.pl:18089 - - - spark2EventLogDir - /user/spark/spark2ApplicationHistory - - - spark2ExtraListeners - com.cloudera.spark.lineage.NavigatorAppListener - - - spark2SqlQueryExecutionListeners - com.cloudera.spark.lineage.NavigatorQueryListener - - - sparkExecutorNumber - 4 - - - sparkDriverMemory - 15G - - - sparkExecutorMemory - 6G - - - sparkExecutorCores - 1 - - - spark2MaxExecutors - 50 - - \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/oozie_app/workflow.xml deleted file mode 100644 index edfff8817..000000000 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/oozie_app/workflow.xml +++ /dev/null @@ -1,277 +0,0 @@ - - - - sourcePath - the source path - - - outputPath - sets the outputPath - - - - - ${jobTracker} - ${nameNode} - - - oozie.action.sharelib.for.spark - ${oozieActionShareLibForSpark2} - - - - - - - - Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] - - - - - - - - - - - - - - - - - - - - - - - - - ${nameNode}/${sourcePath}/relation - ${nameNode}/${outputPath}/relation - - - - - - - - ${nameNode}/${sourcePath}/publication - ${nameNode}/${outputPath}/publication - - - - - - - - ${nameNode}/${sourcePath}/dataset - ${nameNode}/${outputPath}/dataset - - - - - - - - ${nameNode}/${sourcePath}/otherresearchproduct - ${nameNode}/${outputPath}/otherresearchproduct - - - - - - - - ${nameNode}/${sourcePath}/software - ${nameNode}/${outputPath}/software - - - - - - - - ${nameNode}/${sourcePath}/organization - ${nameNode}/${outputPath}/organization - - - - - - - - ${nameNode}/${sourcePath}/project - ${nameNode}/${outputPath}/project - - - - - - - - ${nameNode}/${sourcePath}/datasource - ${nameNode}/${outputPath}/datasource - - - - - - - - - - yarn - cluster - PrepareResultOrganizationAssociation - eu.dnetlib.dhp.resulttoorganizationfrominstrepo.PrepareResultInstRepoAssociation - dhp-enrichment-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - - --sourcePath${sourcePath} - --hive_metastore_uris${hive_metastore_uris} - --datasourceOrganizationPath${workingDir}/preparedInfo/datasourceOrganization - --alreadyLinkedPath${workingDir}/preparedInfo/alreadyLinked - --blacklist${blacklist} - - - - - - - - - - - - - - - yarn - cluster - resultToOrganizationFromInstRepoPropagationForPublications - eu.dnetlib.dhp.resulttoorganizationfrominstrepo.SparkResultToOrganizationFromIstRepoJob - dhp-enrichment-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.dynamicAllocation.enabled=true - --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} - - --sourcePath${sourcePath}/publication - --outputPath${outputPath}/relation - --datasourceOrganizationPath${workingDir}/preparedInfo/datasourceOrganization - --alreadyLinkedPath${workingDir}/preparedInfo/alreadyLinked - --hive_metastore_uris${hive_metastore_uris} - --resultTableNameeu.dnetlib.dhp.schema.oaf.Publication - - - - - - - - yarn - cluster - resultToOrganizationFromInstRepoPropagationForDataset - eu.dnetlib.dhp.resulttoorganizationfrominstrepo.SparkResultToOrganizationFromIstRepoJob - dhp-enrichment-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.dynamicAllocation.enabled=true - --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} - - --sourcePath${sourcePath}/dataset - --outputPath${outputPath}/relation - --datasourceOrganizationPath${workingDir}/preparedInfo/datasourceOrganization - --alreadyLinkedPath${workingDir}/preparedInfo/alreadyLinked - --hive_metastore_uris${hive_metastore_uris} - --resultTableNameeu.dnetlib.dhp.schema.oaf.Dataset - - - - - - - - yarn - cluster - resultToOrganizationFromInstRepoPropagationForORP - eu.dnetlib.dhp.resulttoorganizationfrominstrepo.SparkResultToOrganizationFromIstRepoJob - dhp-enrichment-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.dynamicAllocation.enabled=true - --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} - - --sourcePath${sourcePath}/otherresearchproduct - --outputPath${outputPath}/relation - --datasourceOrganizationPath${workingDir}/preparedInfo/datasourceOrganization - --alreadyLinkedPath${workingDir}/preparedInfo/alreadyLinked - --hive_metastore_uris${hive_metastore_uris} - --resultTableNameeu.dnetlib.dhp.schema.oaf.OtherResearchProduct - - - - - - - - yarn - cluster - resultToOrganizationFromInstRepoPropagationForSoftware - eu.dnetlib.dhp.resulttoorganizationfrominstrepo.SparkResultToOrganizationFromIstRepoJob - dhp-enrichment-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.dynamicAllocation.enabled=true - --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} - - --sourcePath${sourcePath}/software - --outputPath${outputPath}/relation - --datasourceOrganizationPath${workingDir}/preparedInfo/datasourceOrganization - --alreadyLinkedPath${workingDir}/preparedInfo/alreadyLinked - --hive_metastore_uris${hive_metastore_uris} - --resultTableNameeu.dnetlib.dhp.schema.oaf.Software - - - - - - - - - - \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/job.properties b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/job.properties index 93e9e0ab1..4cb759343 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/job.properties +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/job.properties @@ -1,12 +1,12 @@ sourcePath=/tmp/beta_provision/graph/09_graph_dedup_enriched -resumeFrom=AffiliationSemanticRelation +resumeFrom=CountryPropagation allowedsemrelsorcidprop=isSupplementedBy;isSupplementTo allowedsemrelsresultproject=isSupplementedBy;isSupplementTo allowedsemrelscommunitysemrel=isSupplementedBy;isSupplementTo -datasourceWhitelistForCountryPropagation=10|openaire____::3795d6478e30e2c9f787d427ff160944;10|opendoar____::16e6a3326dd7d868cbc926602a61e4d0;10|eurocrisdris::fe4903425d9040f680d8610d9079ea14 -allowedtypes=pubsrepository::institutional +datasourceWhitelistForCountryPropagation=10|opendoar____::16e6a3326dd7d868cbc926602a61e4d0;10|openaire____::fdb035c8b3e0540a8d9a561a6c44f4de;10|eurocrisdris::fe4903425d9040f680d8610d9079ea14;10|openaire____::5b76240cc27a58c6f7ceef7d8c36660e;10|openaire____::172bbccecf8fca44ab6a6653e84cb92a;10|openaire____::149c6590f8a06b46314eed77bfca693f;10|eurocrisdris::a6026877c1a174d60f81fd71f62df1c1;10|openaire____::4692342f0992d91f9e705c26959f09e0;10|openaire____::8d529dbb05ec0284662b391789e8ae2a;10|openaire____::345c9d171ef3c5d706d08041d506428c;10|opendoar____::1c1d4df596d01da60385f0bb17a4a9e0;10|opendoar____::7a614fd06c325499f1680b9896beedeb;10|opendoar____::1ee3dfcd8a0645a25a35977997223d22;10|opendoar____::d296c101daa88a51f6ca8cfc1ac79b50;10|opendoar____::798ed7d4ee7138d49b8828958048130a;10|openaire____::c9d2209ecc4d45ba7b4ca7597acb88a2;10|eurocrisdris::c49e0fe4b9ba7b7fab717d1f0f0a674d;10|eurocrisdris::9ae43d14471c4b33661fedda6f06b539;10|eurocrisdris::432ca599953ff50cd4eeffe22faf3e48 +#allowedtypes=pubsrepository::institutional +allowedtypes=Institutional outputPath=/tmp/miriam/enrichment_one_step -organizationtoresultcommunitymap={"20|corda__h2020::3fb05a9524c3f790391261347852f638":["mes","euromarine"], "20|corda__h2020::e8dbe14cca9bf6fce09d468872f813f8":["mes","euromarine"], "20|snsf________::9b253f265e3bef5cae6d881fdf61aceb":["mes","euromarine"],"20|ukri________::e054eea0a47665af8c3656b5785ccf76":["mes","euromarine"],"20|corda__h2020::edc18d67c9b11fb616ca9f6e1db1b151":["mes","euromarine"],"20|ukri________::d5736d9da90521ddcdc7828a05a85e9a":["mes","euromarine"],"20|corda__h2020::f5d418d3aa1cf817ddefcc3fdc039f27":["mes","euromarine"],"20|snsf________::8fa091f8f25a846779acb4ea97b50aef":["mes","euromarine"],"20|corda__h2020::81e020977211c2c40fae2e1a50bffd71":["mes","euromarine"],"20|corda_______::81e020977211c2c40fae2e1a50bffd71":["mes","euromarine"],"20|snsf________::31d0a100e54e3cdb3c6f52d91e638c78":["mes","euromarine"],"20|corda__h2020::ea379ef91b8cc86f9ac5edc4169292db":["mes","euromarine"],"20|corda__h2020::f75ee2ee48e5cb0ec8c8d30aaa8fef70":["mes","euromarine"],"20|ukri________::e16010089551a1a9182a94604fc0ea59":["mes","euromarine"],"20|corda__h2020::38531a2cce7c5c347ffc439b07c1f43b":["mes","euromarine"],"20|corda_______::38531a2cce7c5c347ffc439b07c1f43b":["mes","euromarine"],"20|grid________::b2cbbf5eadbbf87d534b022bad3191d7":["mes","euromarine"],"20|snsf________::74730ef1439d7f7636a8be58a6b471b8":["mes","euromarine"],"20|nsf_________::ad72e19043a5a467e35f9b444d11563e":["mes","euromarine"],"20|ukri________::0fc3e92500290902a2d38ec2445e74c3":["mes","euromarine"],"20|grid________::ad2c29905da0eb3c06b3fa80cacd89ea":["mes","euromarine"],"20|corda__h2020::30b53e4d63d3724f00acb9cbaca40860":["mes","euromarine"],"20|corda__h2020::f60f84bee14ad93f0db0e49af1d5c317":["mes","euromarine"], "20|corda__h2020::7bf251ac3765b5e89d82270a1763d09f":["mes","euromarine"], "20|corda__h2020::65531bd11be9935948c7f2f4db1c1832":["mes","euromarine"], "20|corda__h2020::e0e98f86bbc76638bbb72a8fe2302946":["mes","euromarine"], "20|snsf________::3eb43582ac27601459a8d8b3e195724b":["mes","euromarine"], "20|corda__h2020::af2481dab65d06c8ea0ae02b5517b9b6":["mes","euromarine"], "20|corda__h2020::c19d05cfde69a50d3ebc89bd0ee49929":["mes","euromarine"], "20|corda__h2020::af0bfd9fc09f80d9488f56d71a9832f0":["mes","euromarine"], "20|ukri________::f33c02afb0dc66c49d0ed97ca5dd5cb0":["beopen"], "20|grid________::a867f78acdc5041b34acfe4f9a349157":["beopen"], "20|grid________::7bb116a1a9f95ab812bf9d2dea2be1ff":["beopen"], "20|corda__h2020::6ab0e0739dbe625b99a2ae45842164ad":["beopen"], "20|corda__h2020::8ba50792bc5f4d51d79fca47d860c602":["beopen"], "20|corda_______::8ba50792bc5f4d51d79fca47d860c602":["beopen"], "20|corda__h2020::e70e9114979e963eef24666657b807c3":["beopen"], "20|corda_______::e70e9114979e963eef24666657b807c3":["beopen"], "20|corda_______::15911e01e9744d57205825d77c218737":["beopen"], "20|opendoar____::056a41e24e2a9a67215e87bbee6a80ab":["beopen"], "20|opendoar____::7f67f2e6c6fbb0628f8160fcd3d92ae3":["beopen"], "20|grid________::a8ecfd7c084e561168bcbe6bf0daf3e3":["beopen"], "20|corda_______::7bbe6cc5d8ec1864739a04b0d020c9e9":["beopen"], "20|corda_______::3ff558e30c2e434d688539548300b050":["beopen"], "20|corda__h2020::5ffee5b3b83b33a8cf0e046877bd3a39":["beopen"], "20|corda__h2020::5187217e2e806a6df3579c46f82401bc":["beopen"], "20|grid________::5fa7e2709bcd945e26bfa18689adeec1":["beopen"], "20|corda_______::d8696683c53027438031a96ad27c3c07":["beopen"], "20|corda__h2020::d8696683c53027438031a96ad27c3c07":["beopen"], "20|ukri________::23a79ebdfa59790864e4a485881568c1":["beopen"], "20|corda__h2020::b76cf8fe49590a966953c37e18608af9":["beopen"], "20|grid________::d2f0204126ee709244a488a4cd3b91c2":["beopen"], "20|corda__h2020::05aba9d2ed17533d15221e5655ac11e6":["beopen"], "20|grid________::802401579481dc32062bdee69f5e6a34":["beopen"], "20|corda__h2020::3f6d9d54cac975a517ba6b252c81582d":["beopen"], "20|openorgs____::d11f981828c485cd23d93f7f24f24db1":["eut"], "20|openorgs____::e66fe5dd092752e1dd6fd29fc699933a":["eut"], "20|openorgs____::526468206bca24c1c90da6a312295cf4":["eut"], "20|openorgs____::08e311e656e65ccb32e07c66b15b6ff7":["eut"], "20|openorgs____::55a1f889758964b77682904218fdb298":["eut"], "20|openorgs____::530092b6970d60a5329beb9f39e8d7d4":["eut"], "20|openorgs____::aadafa39392b3e200102596a3a4aad9d":["eut"], "20|openorgs____::c3fe999c74fad308132b8a5971367dce":["eut"], "20|openorgs____::1624ff7c01bb641b91f4518539a0c28a":["aurora"], "20|openorgs____::cdda7cfe17c89eb50628ec2eb1f8acd2":["aurora"], "20|openorgs____::818b75030e0e40612d69e049843ede7e":["aurora"], "20|openorgs____::0b0102bae51f4f4ef5ba57fbe1523b92":["aurora"], "20|openorgs____::ed47496b44722f0e9d7b98898189be0d":["aurora"], "20|openorgs____::eb0669daa9efeb898a3090d8aac7c953":["aurora"], "20|openorgs____::eb391317ed0dc684aa81ac16265de041":["aurora"], "20|openorgs____::f7cfcc98245e22c7d6e321cde930e746":["aurora"], "20|openorgs____::f33179d3306ba2599f7a898b056b604f":["aurora"], "20|pending_org_::75c41e6dd18466709ef359323d96fa05":["aurora"]} pathMap ={"author":"$['author'][*]['fullname']", \ "title":"$['title'][*]['value']",\ "orcid":"$['author'][*]['pid'][*][?(@['qualifier']['classid']=='orcid')]['value']" ,\ diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/oozie_app/workflow.xml index de054b962..8e91707b6 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/oozie_app/workflow.xml @@ -29,10 +29,6 @@ outputPath the output path - - organizationtoresultcommunitymap - organization community map - pathMap the json path associated to each selection field @@ -315,7 +311,7 @@ allowedtypes - ${allowedtupes} + ${allowedtypes} diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/bulktag/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/bulktag/oozie_app/workflow.xml index 307997d4c..6c5163448 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/bulktag/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/bulktag/oozie_app/workflow.xml @@ -26,12 +26,20 @@ - + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + + + + + + + diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/countrypropagation/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/countrypropagation/oozie_app/workflow.xml index 1fbaeb5d5..933bab7e0 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/countrypropagation/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/countrypropagation/oozie_app/workflow.xml @@ -25,12 +25,20 @@ - + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + + + + + + + diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/entitytoorganizationfromsemrel/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/entitytoorganizationfromsemrel/oozie_app/workflow.xml index dbb22b994..05824d209 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/entitytoorganizationfromsemrel/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/entitytoorganizationfromsemrel/oozie_app/workflow.xml @@ -18,12 +18,20 @@ - + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + + + + + + + diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/projecttoresult/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/projecttoresult/oozie_app/workflow.xml index 93a2f98be..f0db9c777 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/projecttoresult/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/projecttoresult/oozie_app/workflow.xml @@ -22,13 +22,21 @@ - + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] - + + + + + + + + + yarn diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromorganization/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromorganization/oozie_app/workflow.xml index 8aec530cc..6aeffb457 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromorganization/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromorganization/oozie_app/workflow.xml @@ -21,12 +21,21 @@ - + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + + + + + + + + yarn @@ -75,9 +84,9 @@ --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} - --preparedInfoPath${workingDir}/preparedInfo/resultCommunityList + --preparedInfoPath${workingDir}/communityorganization/preparedInfo/resultCommunityList --sourcePath${sourcePath}/ - --outputPath${workingDir}/resulttocommunityfromorganization/ + --outputPath${workingDir}/communityorganization/resulttocommunityfromorganization/ diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromproject/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromproject/oozie_app/workflow.xml index 90ed2e0b6..dd845064b 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromproject/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromproject/oozie_app/workflow.xml @@ -21,12 +21,19 @@ - + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] - + + + + + + + + diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromsemrel/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromsemrel/oozie_app/workflow.xml index be88c45bd..773c7fba7 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromsemrel/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromsemrel/oozie_app/workflow.xml @@ -18,13 +18,20 @@ - + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] - + + + + + + + + @@ -41,8 +48,10 @@ eu.dnetlib.dhp.resulttocommunityfromsemrel.PrepareResultCommunitySetStep1 dhp-enrichment-${projectVersion}.jar - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} + --executor-cores=6 + --executor-memory=5G + --conf spark.executor.memoryOverhead=3g + --conf spark.sql.shuffle.partitions=3284 --driver-memory=${sparkDriverMemory} --conf spark.extraListeners=${spark2ExtraListeners} --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} @@ -70,8 +79,10 @@ eu.dnetlib.dhp.resulttocommunityfromsemrel.PrepareResultCommunitySetStep1 dhp-enrichment-${projectVersion}.jar - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} + --executor-cores=6 + --executor-memory=5G + --conf spark.executor.memoryOverhead=3g + --conf spark.sql.shuffle.partitions=3284 --driver-memory=${sparkDriverMemory} --conf spark.extraListeners=${spark2ExtraListeners} --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} @@ -99,8 +110,10 @@ eu.dnetlib.dhp.resulttocommunityfromsemrel.PrepareResultCommunitySetStep1 dhp-enrichment-${projectVersion}.jar - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} + --executor-cores=6 + --executor-memory=5G + --conf spark.executor.memoryOverhead=3g + --conf spark.sql.shuffle.partitions=3284 --driver-memory=${sparkDriverMemory} --conf spark.extraListeners=${spark2ExtraListeners} --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} @@ -128,8 +141,10 @@ eu.dnetlib.dhp.resulttocommunityfromsemrel.PrepareResultCommunitySetStep1 dhp-enrichment-${projectVersion}.jar - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} + --executor-cores=6 + --executor-memory=5G + --conf spark.executor.memoryOverhead=3g + --conf spark.sql.shuffle.partitions=3284 --driver-memory=${sparkDriverMemory} --conf spark.extraListeners=${spark2ExtraListeners} --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} @@ -159,8 +174,10 @@ eu.dnetlib.dhp.resulttocommunityfromsemrel.PrepareResultCommunitySetStep2 dhp-enrichment-${projectVersion}.jar - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} + --executor-cores=6 + --executor-memory=5G + --conf spark.executor.memoryOverhead=3g + --conf spark.sql.shuffle.partitions=3284 --driver-memory=${sparkDriverMemory} --conf spark.extraListeners=${spark2ExtraListeners} --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} @@ -191,8 +208,10 @@ eu.dnetlib.dhp.resulttocommunityfromsemrel.SparkResultToCommunityThroughSemRelJob dhp-enrichment-${projectVersion}.jar - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} + --executor-cores=6 + --executor-memory=5G + --conf spark.executor.memoryOverhead=3g + --conf spark.sql.shuffle.partitions=3284 --driver-memory=${sparkDriverMemory} --conf spark.extraListeners=${spark2ExtraListeners} --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} @@ -220,8 +239,10 @@ eu.dnetlib.dhp.resulttocommunityfromsemrel.SparkResultToCommunityThroughSemRelJob dhp-enrichment-${projectVersion}.jar - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} + --executor-cores=6 + --executor-memory=5G + --conf spark.executor.memoryOverhead=3g + --conf spark.sql.shuffle.partitions=3284 --driver-memory=${sparkDriverMemory} --conf spark.extraListeners=${spark2ExtraListeners} --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} @@ -249,8 +270,10 @@ eu.dnetlib.dhp.resulttocommunityfromsemrel.SparkResultToCommunityThroughSemRelJob dhp-enrichment-${projectVersion}.jar - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} + --executor-cores=6 + --executor-memory=5G + --conf spark.executor.memoryOverhead=3g + --conf spark.sql.shuffle.partitions=3284 --driver-memory=${sparkDriverMemory} --conf spark.extraListeners=${spark2ExtraListeners} --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} @@ -278,8 +301,10 @@ eu.dnetlib.dhp.resulttocommunityfromsemrel.SparkResultToCommunityThroughSemRelJob dhp-enrichment-${projectVersion}.jar - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} + --executor-cores=6 + --executor-memory=5G + --conf spark.executor.memoryOverhead=3g + --conf spark.sql.shuffle.partitions=3284 --driver-memory=${sparkDriverMemory} --conf spark.extraListeners=${spark2ExtraListeners} --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} @@ -295,10 +320,11 @@ --outputPath${workingDir}/communitysemrel/software - + + diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttoorganizationfrominstrepo/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttoorganizationfrominstrepo/oozie_app/workflow.xml index dadea2d28..e963453da 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttoorganizationfrominstrepo/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttoorganizationfrominstrepo/oozie_app/workflow.xml @@ -21,12 +21,21 @@ - + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + + + + + + + + @@ -79,7 +88,7 @@ --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} --sourcePath${sourcePath}/publication - --outputPath${workingDir}/affiliationinstrepo/publication/relation + --outputPath${workingDir}/affiliationInstRepo/publication/relation --datasourceOrganizationPath${workingDir}/affiliationInstRepo/preparedInfo/datasourceOrganization --alreadyLinkedPath${workingDir}/affiliationInstRepo/preparedInfo/alreadyLinked --hive_metastore_uris${hive_metastore_uris} @@ -108,7 +117,7 @@ --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} --sourcePath${sourcePath}/dataset - --outputPath${workingDir}/affiliationinstrepo/dataset/relation + --outputPath${workingDir}/affiliationInstRepo/dataset/relation --datasourceOrganizationPath${workingDir}/affiliationInstRepo/preparedInfo/datasourceOrganization --alreadyLinkedPath${workingDir}/affiliationInstRepo/preparedInfo/alreadyLinked --hive_metastore_uris${hive_metastore_uris} @@ -137,7 +146,7 @@ --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} --sourcePath${sourcePath}/otherresearchproduct - --outputPath${workingDir}/affiliationinstrepo/otherresearchproduct/relation + --outputPath${workingDir}/affiliationInstRepo/otherresearchproduct/relation --datasourceOrganizationPath${workingDir}/affiliationInstRepo/preparedInfo/datasourceOrganization --alreadyLinkedPath${workingDir}/affiliationInstRepo/preparedInfo/alreadyLinked --hive_metastore_uris${hive_metastore_uris} @@ -166,7 +175,7 @@ --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} --sourcePath${sourcePath}/software - --outputPath${workingDir}/affiliationinstrepo/software/relation + --outputPath${workingDir}/affiliationInstRepo/software/relation --datasourceOrganizationPath${workingDir}/affiliationInstRepo/preparedInfo/datasourceOrganization --alreadyLinkedPath${workingDir}/affiliationInstRepo/preparedInfo/alreadyLinked --hive_metastore_uris${hive_metastore_uris} @@ -197,7 +206,7 @@ --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} --outputPath${sourcePath}/relation - --sourcePath${workingDir}/affiliationinstrepo/ + --sourcePath${workingDir}/affiliationInstRepo/ diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttoorganizationfromsemrel/oozie_app/config-default.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttoorganizationfromsemrel/oozie_app/config-default.xml deleted file mode 100644 index 2744ea92b..000000000 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttoorganizationfromsemrel/oozie_app/config-default.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - jobTracker - yarnRM - - - nameNode - hdfs://nameservice1 - - - oozie.use.system.libpath - true - - - oozie.action.sharelib.for.spark - spark2 - - - hive_metastore_uris - thrift://iis-cdh5-test-m3.ocean.icm.edu.pl:9083 - - - spark2YarnHistoryServerAddress - http://iis-cdh5-test-gw.ocean.icm.edu.pl:18089 - - - spark2EventLogDir - /user/spark/spark2ApplicationHistory - - - spark2ExtraListeners - com.cloudera.spark.lineage.NavigatorAppListener - - - spark2SqlQueryExecutionListeners - com.cloudera.spark.lineage.NavigatorQueryListener - - - sparkExecutorNumber - 4 - - - sparkDriverMemory - 15G - - - sparkExecutorMemory - 6G - - - sparkExecutorCores - 1 - - - spark2MaxExecutors - 50 - - \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttoorganizationfromsemrel/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttoorganizationfromsemrel/oozie_app/workflow.xml deleted file mode 100644 index 7918df120..000000000 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttoorganizationfromsemrel/oozie_app/workflow.xml +++ /dev/null @@ -1,97 +0,0 @@ - - - - sourcePath - the source path - - - - - - ${jobTracker} - ${nameNode} - - - oozie.action.sharelib.for.spark - ${oozieActionShareLibForSpark2} - - - - - - - - Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] - - - - - yarn - cluster - PrepareResultOrganizationAssociation - eu.dnetlib.dhp.resulttoorganizationfromsemrel.PrepareInfo - dhp-enrichment-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - - --graphPath${sourcePath} - --hive_metastore_uris${hive_metastore_uris} - --leavesPath${workingDir}/affiliationSemanticRelation/preparedInfo/leavesPath - --childParentPath${workingDir}/affiliationSemanticRelation/preparedInfo/childParentPath - --resultOrgPath${workingDir}/affiliationSemanticRelation/preparedInfo/resultOrgPath - --relationPath${workingDir}/affiliationSemanticRelation/preparedInfo/relation - - - - - - - - yarn - cluster - resultToOrganizationFromSemRel - eu.dnetlib.dhp.resulttoorganizationfromsemrel.SparkResultToOrganizationFromSemRel - dhp-enrichment-${projectVersion}.jar - - --executor-cores=${sparkExecutorCores} - --executor-memory=${sparkExecutorMemory} - --driver-memory=${sparkDriverMemory} - --conf spark.extraListeners=${spark2ExtraListeners} - --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} - --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} - --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} - --conf spark.dynamicAllocation.enabled=true - --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} - --conf spark.sql.shuffle.partitions=3840 - - --relationPath${workingDir}/affiliationSemanticRelation/preparedInfo/relation - --outputPath${sourcePath} - --leavesPath${workingDir}/affiliationSemanticRelation/preparedInfo/leavesPath - --childParentPath${workingDir}/affiliationSemanticRelation/preparedInfo/childParentPath - --resultOrgPath${workingDir}/affiliationSemanticRelation/preparedInfo/resultOrgPath - --hive_metastore_uris${hive_metastore_uris} - --workingDir${workingDir}/affiliationSemanticRelation/working - --iterations${iterations} - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/hostedbymap/oozie_app/download.sh b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/hostedbymap/oozie_app/download.sh index 35220bd8c..9877fe7de 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/hostedbymap/oozie_app/download.sh +++ b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/hostedbymap/oozie_app/download.sh @@ -1,3 +1,3 @@ #!/bin/bash curl -LSs $1 | hdfs dfs -put - $2/$3 -curl -LSs http://api.crossref.org/works/10.1099/jgv.0.001453 > prova.txt \ No newline at end of file +#curl -LSs http://api.crossref.org/works/10.1099/jgv.0.001453 > prova.txt \ No newline at end of file From 5011c4d11a4c3884c99d784ed31a336ba89f8bfc Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Wed, 20 Dec 2023 15:57:26 +0100 Subject: [PATCH 411/449] refactoring after compiletion --- .../provision/IndexRecordTransformerTest.java | 2 +- .../dhp/oa/provision/XmlIndexingJobTest.java | 29 +++++++++---------- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/IndexRecordTransformerTest.java b/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/IndexRecordTransformerTest.java index e07ba1b4e..e72883055 100644 --- a/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/IndexRecordTransformerTest.java +++ b/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/IndexRecordTransformerTest.java @@ -82,7 +82,7 @@ public class IndexRecordTransformerTest { void testPeerReviewed() throws IOException, TransformerException { final XmlRecordFactory xmlRecordFactory = new XmlRecordFactory(contextMapper, false, - XmlConverterJob.schemaLocation); + XmlConverterJob.schemaLocation); final Publication p = load("publication.json", Publication.class); diff --git a/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/XmlIndexingJobTest.java b/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/XmlIndexingJobTest.java index b62acbac3..a3a140cf6 100644 --- a/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/XmlIndexingJobTest.java +++ b/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/XmlIndexingJobTest.java @@ -1,6 +1,8 @@ package eu.dnetlib.dhp.oa.provision; +import static org.junit.jupiter.api.Assertions.assertEquals; + import java.io.IOException; import java.io.StringReader; import java.net.URI; @@ -32,8 +34,6 @@ import eu.dnetlib.dhp.oa.provision.utils.ISLookupClient; import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpException; import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpService; -import static org.junit.jupiter.api.Assertions.assertEquals; - @ExtendWith(MockitoExtension.class) public class XmlIndexingJobTest extends SolrTest { @@ -110,34 +110,33 @@ public class XmlIndexingJobTest extends SolrTest { QueryResponse rsp = miniCluster.getSolrClient().query(new SolrQuery().add(CommonParams.Q, "*:*")); assertEquals( - nRecord, rsp.getResults().getNumFound(), - "the number of indexed records should be equal to the number of input records"); - + nRecord, rsp.getResults().getNumFound(), + "the number of indexed records should be equal to the number of input records"); rsp = miniCluster.getSolrClient().query(new SolrQuery().add(CommonParams.Q, "isgreen:true")); assertEquals( - 0, rsp.getResults().getNumFound(), - "the number of indexed records having isgreen = true"); + 0, rsp.getResults().getNumFound(), + "the number of indexed records having isgreen = true"); rsp = miniCluster.getSolrClient().query(new SolrQuery().add(CommonParams.Q, "openaccesscolor:bronze")); assertEquals( - 0, rsp.getResults().getNumFound(), - "the number of indexed records having openaccesscolor = bronze"); + 0, rsp.getResults().getNumFound(), + "the number of indexed records having openaccesscolor = bronze"); rsp = miniCluster.getSolrClient().query(new SolrQuery().add(CommonParams.Q, "isindiamondjournal:true")); assertEquals( - 0, rsp.getResults().getNumFound(), - "the number of indexed records having isindiamondjournal = true"); + 0, rsp.getResults().getNumFound(), + "the number of indexed records having isindiamondjournal = true"); rsp = miniCluster.getSolrClient().query(new SolrQuery().add(CommonParams.Q, "publiclyfunded:true")); assertEquals( - 0, rsp.getResults().getNumFound(), - "the number of indexed records having publiclyfunded = true"); + 0, rsp.getResults().getNumFound(), + "the number of indexed records having publiclyfunded = true"); rsp = miniCluster.getSolrClient().query(new SolrQuery().add(CommonParams.Q, "peerreviewed:true")); assertEquals( - 0, rsp.getResults().getNumFound(), - "the number of indexed records having peerreviewed = true"); + 0, rsp.getResults().getNumFound(), + "the number of indexed records having peerreviewed = true"); } @Test From 62104790ae63d08946f0e340d67f3182cb469b8d Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Thu, 21 Dec 2023 12:26:19 +0100 Subject: [PATCH 412/449] added metaresourcetype to the result hive DB view --- .../graph/hive/oozie_app/lib/scripts/postprocessing.sql | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/hive/oozie_app/lib/scripts/postprocessing.sql b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/hive/oozie_app/lib/scripts/postprocessing.sql index 149c326fa..748f77b27 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/hive/oozie_app/lib/scripts/postprocessing.sql +++ b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/oa/graph/hive/oozie_app/lib/scripts/postprocessing.sql @@ -1,10 +1,10 @@ DROP VIEW IF EXISTS ${hiveDbName}.result; CREATE VIEW IF NOT EXISTS ${hiveDbName}.result as - select id, originalid, dateofcollection, title, publisher, bestaccessright, datainfo, collectedfrom, pid, author, resulttype, language, country, subject, description, dateofacceptance, relevantdate, embargoenddate, resourcetype, context, externalreference, instance, measures, processingchargeamount, eoscifguidelines from ${hiveDbName}.publication p + select id, originalid, dateofcollection, title, publisher, bestaccessright, datainfo, collectedfrom, pid, author, resulttype, metaresourcetype, language, country, subject, description, dateofacceptance, relevantdate, embargoenddate, resourcetype, context, externalreference, instance, measures, processingchargeamount, eoscifguidelines from ${hiveDbName}.publication p union all - select id, originalid, dateofcollection, title, publisher, bestaccessright, datainfo, collectedfrom, pid, author, resulttype, language, country, subject, description, dateofacceptance, relevantdate, embargoenddate, resourcetype, context, externalreference, instance, measures, processingchargeamount, eoscifguidelines from ${hiveDbName}.dataset d + select id, originalid, dateofcollection, title, publisher, bestaccessright, datainfo, collectedfrom, pid, author, resulttype, metaresourcetype, language, country, subject, description, dateofacceptance, relevantdate, embargoenddate, resourcetype, context, externalreference, instance, measures, processingchargeamount, eoscifguidelines from ${hiveDbName}.dataset d union all - select id, originalid, dateofcollection, title, publisher, bestaccessright, datainfo, collectedfrom, pid, author, resulttype, language, country, subject, description, dateofacceptance, relevantdate, embargoenddate, resourcetype, context, externalreference, instance, measures, processingchargeamount, eoscifguidelines from ${hiveDbName}.software s + select id, originalid, dateofcollection, title, publisher, bestaccessright, datainfo, collectedfrom, pid, author, resulttype, metaresourcetype, language, country, subject, description, dateofacceptance, relevantdate, embargoenddate, resourcetype, context, externalreference, instance, measures, processingchargeamount, eoscifguidelines from ${hiveDbName}.software s union all - select id, originalid, dateofcollection, title, publisher, bestaccessright, datainfo, collectedfrom, pid, author, resulttype, language, country, subject, description, dateofacceptance, relevantdate, embargoenddate, resourcetype, context, externalreference, instance, measures, processingchargeamount, eoscifguidelines from ${hiveDbName}.otherresearchproduct o; + select id, originalid, dateofcollection, title, publisher, bestaccessright, datainfo, collectedfrom, pid, author, resulttype, metaresourcetype, language, country, subject, description, dateofacceptance, relevantdate, embargoenddate, resourcetype, context, externalreference, instance, measures, processingchargeamount, eoscifguidelines from ${hiveDbName}.otherresearchproduct o; From 3afd4aa57bb107e35f71108c64c45ada698cf8a7 Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Fri, 22 Dec 2023 11:27:30 +0100 Subject: [PATCH 413/449] adjustments for country propagation --- .../PrepareDatasourceCountryAssociation.java | 5 ++- .../PrepareResultCountrySet.java | 2 +- .../SparkCountryPropagationJob.java | 2 +- .../PrepareInfo.java | 2 +- .../input_countrypropagation_parameters.json | 32 ++++++++++++++++ .../input_prepareassoc_parameters.json | 32 ++++++++++++++++ ...input_prepareresultcountry_parameters.json | 38 +++++++++++++++++++ .../countrypropagation/oozie_app/workflow.xml | 35 ++++++++++------- 8 files changed, 130 insertions(+), 18 deletions(-) create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/countrypropagation/input_countrypropagation_parameters.json create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/countrypropagation/input_prepareassoc_parameters.json create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/countrypropagation/input_prepareresultcountry_parameters.json diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/countrypropagation/PrepareDatasourceCountryAssociation.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/countrypropagation/PrepareDatasourceCountryAssociation.java index 430c26592..a016509e5 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/countrypropagation/PrepareDatasourceCountryAssociation.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/countrypropagation/PrepareDatasourceCountryAssociation.java @@ -45,7 +45,7 @@ public class PrepareDatasourceCountryAssociation { .toString( PrepareDatasourceCountryAssociation.class .getResourceAsStream( - "/eu/dnetlib/dhp/countrypropagation/input_prepareassoc_parameters.json")); + "/eu/dnetlib/dhp/wf/subworkflows/countrypropagation/input_prepareassoc_parameters.json")); final ArgumentApplicationParser parser = new ArgumentApplicationParser(jsonConfiguration); @@ -90,7 +90,8 @@ public class PrepareDatasourceCountryAssociation { (FilterFunction) ds -> !ds.getDataInfo().getDeletedbyinference() && Optional.ofNullable(ds.getDatasourcetype()).isPresent() && Optional.ofNullable(ds.getDatasourcetype().getClassid()).isPresent() && - (allowedtypes.contains(ds.getJurisdiction().getClassid()) || + ((Optional.ofNullable(ds.getJurisdiction()).isPresent() && + allowedtypes.contains(ds.getJurisdiction().getClassid())) || whitelist.contains(ds.getId()))); // filtering of the relations taking the non deleted by inference and those with IsProvidedBy as relclass diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/countrypropagation/PrepareResultCountrySet.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/countrypropagation/PrepareResultCountrySet.java index 184d24751..884aa0e47 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/countrypropagation/PrepareResultCountrySet.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/countrypropagation/PrepareResultCountrySet.java @@ -32,7 +32,7 @@ public class PrepareResultCountrySet { .toString( PrepareResultCountrySet.class .getResourceAsStream( - "/eu/dnetlib/dhp/countrypropagation/input_prepareresultcountry_parameters.json")); + "/eu/dnetlib/dhp/wf/subworkflows/countrypropagation/input_prepareresultcountry_parameters.json")); final ArgumentApplicationParser parser = new ArgumentApplicationParser(jsonConfiguration); diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/countrypropagation/SparkCountryPropagationJob.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/countrypropagation/SparkCountryPropagationJob.java index 17247f812..92930c18b 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/countrypropagation/SparkCountryPropagationJob.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/countrypropagation/SparkCountryPropagationJob.java @@ -35,7 +35,7 @@ public class SparkCountryPropagationJob { .toString( SparkCountryPropagationJob.class .getResourceAsStream( - "/eu/dnetlib/dhp/countrypropagation/input_countrypropagation_parameters.json")); + "/eu/dnetlib/dhp/wf/subworkflows/countrypropagation/input_countrypropagation_parameters.json")); final ArgumentApplicationParser parser = new ArgumentApplicationParser(jsonConfiguration); diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/entitytoorganizationfromsemrel/PrepareInfo.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/entitytoorganizationfromsemrel/PrepareInfo.java index 8d3432f06..bdfdde13b 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/entitytoorganizationfromsemrel/PrepareInfo.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/entitytoorganizationfromsemrel/PrepareInfo.java @@ -60,7 +60,7 @@ public class PrepareInfo implements Serializable { .toString( SparkResultToOrganizationFromIstRepoJob.class .getResourceAsStream( - "/eu/dnetlib/dhp/entitytoorganizationfromsemrel/input_preparation_parameter.json")); + "/eu/dnetlib/dhp/wf/subworkflows/entitytoorganizationfromsemrel/input_preparation_parameter.json")); final ArgumentApplicationParser parser = new ArgumentApplicationParser(jsonConfiguration); diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/countrypropagation/input_countrypropagation_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/countrypropagation/input_countrypropagation_parameters.json new file mode 100644 index 000000000..d3cde8b74 --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/countrypropagation/input_countrypropagation_parameters.json @@ -0,0 +1,32 @@ +[ + { + "paramName":"s", + "paramLongName":"sourcePath", + "paramDescription": "the path of the sequencial file to read", + "paramRequired": true + }, + { + "paramName":"tn", + "paramLongName":"resultTableName", + "paramDescription": "the name of the result table we are currently working on", + "paramRequired": true + }, + { + "paramName": "out", + "paramLongName": "outputPath", + "paramDescription": "the path used to store temporary output files", + "paramRequired": true + }, + { + "paramName": "p", + "paramLongName": "preparedInfoPath", + "paramDescription": "the path where prepared info have been stored", + "paramRequired": false + }, + { + "paramName": "ssm", + "paramLongName": "isSparkSessionManaged", + "paramDescription": "true if the spark session is managed, false otherwise", + "paramRequired": false + } +] diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/countrypropagation/input_prepareassoc_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/countrypropagation/input_prepareassoc_parameters.json new file mode 100644 index 000000000..a00105f2b --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/countrypropagation/input_prepareassoc_parameters.json @@ -0,0 +1,32 @@ +[ + { + "paramName":"s", + "paramLongName":"sourcePath", + "paramDescription": "the path of the sequencial file to read", + "paramRequired": true + }, + { + "paramName": "out", + "paramLongName": "outputPath", + "paramDescription": "the path used to store temporary output files", + "paramRequired": true + }, + { + "paramName": "w", + "paramLongName": "whitelist", + "paramDescription": "the datasource having a type different from the allowed ones but that we want to add anyway", + "paramRequired": true + }, + { + "paramName": "at", + "paramLongName": "allowedtypes", + "paramDescription": "the allowed datasource types for country propagation", + "paramRequired": true + }, + { + "paramName": "ssm", + "paramLongName": "isSparkSessionManaged", + "paramDescription": "true if the spark session is managed, false otherwise", + "paramRequired": false + } +] \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/countrypropagation/input_prepareresultcountry_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/countrypropagation/input_prepareresultcountry_parameters.json new file mode 100644 index 000000000..18163d1f9 --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/countrypropagation/input_prepareresultcountry_parameters.json @@ -0,0 +1,38 @@ +[ + { + "paramName":"s", + "paramLongName":"sourcePath", + "paramDescription": "the path of the sequencial file to read", + "paramRequired": true + }, + { + "paramName":"out", + "paramLongName":"outputPath", + "paramDescription": "the output path", + "paramRequired": true + }, + { + "paramName":"w", + "paramLongName":"workingPath", + "paramDescription": "the working path", + "paramRequired": true + }, + { + "paramName":"tn", + "paramLongName":"resultTableName", + "paramDescription": "the name of the result table we are currently working on", + "paramRequired": true + }, + { + "paramName": "p", + "paramLongName": "preparedInfoPath", + "paramDescription": "the path where prepared info have been stored", + "paramRequired": true + }, + { + "paramName": "ssm", + "paramLongName": "isSparkSessionManaged", + "paramDescription": "true if the spark session is managed, false otherwise", + "paramRequired": false + } +] \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/countrypropagation/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/countrypropagation/oozie_app/workflow.xml index 933bab7e0..81d6dc3dc 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/countrypropagation/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/countrypropagation/oozie_app/workflow.xml @@ -61,7 +61,7 @@ --sourcePath${sourcePath} --whitelist${whitelist} --allowedtypes${allowedtypes} - --workingPath${workingDir}/country + --outputPath${workingDir}/preparedInfo @@ -95,8 +95,10 @@ --conf spark.sql.shuffle.partitions=3840 --sourcePath${sourcePath}/publication - --workingPath${workingDir}/country + --outputPath${workingDir}/publication + --workingPath${workingDir}/workingP --resultTableNameeu.dnetlib.dhp.schema.oaf.Publication + --preparedInfoPath${workingDir}/preparedInfo @@ -123,8 +125,10 @@ --conf spark.sql.shuffle.partitions=3840 --sourcePath${sourcePath}/dataset - --workingPath${workingDir}/country + --outputPath${workingDir}/dataset + --workingPath${workingDir}/workingD --resultTableNameeu.dnetlib.dhp.schema.oaf.Dataset + --preparedInfoPath${workingDir}/preparedInfo @@ -151,8 +155,10 @@ --conf spark.sql.shuffle.partitions=3840 --sourcePath${sourcePath}/otherresearchproduct - --workingPath${workingDir}/country + --outputPath${workingDir}/otherresearchproduct + --workingPath${workingDir}/workingO --resultTableNameeu.dnetlib.dhp.schema.oaf.OtherResearchProduct + --preparedInfoPath${workingDir}/preparedInfo @@ -179,14 +185,16 @@ --conf spark.sql.shuffle.partitions=3840 --sourcePath${sourcePath}/software - --workingPath${workingDir}/country + --outputPath${workingDir}/software + --workingPath${workingDir}/workingS --resultTableNameeu.dnetlib.dhp.schema.oaf.Software + --preparedInfoPath${workingDir}/preparedInfo - + @@ -216,9 +224,9 @@ --conf spark.sql.shuffle.partitions=3840 --sourcePath${sourcePath}/publication - --workingPath${workingDir}/country + --preparedInfoPath${workingDir}/publication --resultTableNameeu.dnetlib.dhp.schema.oaf.Publication - + --outputPath${workingDir}/country/publication @@ -245,9 +253,9 @@ --conf spark.sql.shuffle.partitions=3840 --sourcePath${sourcePath}/dataset - --workingPath${workingDir}/country + --preparedInfoPath${workingDir}/dataset --resultTableNameeu.dnetlib.dhp.schema.oaf.Dataset - + --outputPath${workingDir}/country/dataset @@ -274,9 +282,9 @@ --conf spark.sql.shuffle.partitions=3840 --sourcePath${sourcePath}/otherresearchproduct - --workingPath${workingDir}/country + --preparedInfoPath${workingDir}/otherresearchproduct --resultTableNameeu.dnetlib.dhp.schema.oaf.OtherResearchProduct - + --outputPath${workingDir}/country/otherresearchproduct @@ -303,8 +311,9 @@ --conf spark.sql.shuffle.partitions=3840 --sourcePath${sourcePath}/software - --workingPath${workingDir}/country + --preparedInfoPath${workingDir}/software --resultTableNameeu.dnetlib.dhp.schema.oaf.Software + --outputPath${workingDir}/country/software From b06aea0adfe716fede41a6fd38e847dc90dd4692 Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Fri, 22 Dec 2023 11:35:37 +0100 Subject: [PATCH 414/449] adding the bulkTag parameter file in the folder for the oozie workflow for bulkTagging. Changes the path in the class --- .../dnetlib/dhp/bulktag/SparkBulkTagJob.java | 2 +- .../bulktag/input_bulkTag_parameters.json | 38 +++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/bulktag/input_bulkTag_parameters.json diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/SparkBulkTagJob.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/SparkBulkTagJob.java index 51307ccd1..e20fcb081 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/SparkBulkTagJob.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/SparkBulkTagJob.java @@ -45,7 +45,7 @@ public class SparkBulkTagJob { .toString( SparkBulkTagJob.class .getResourceAsStream( - "/eu/dnetlib/dhp/bulktag/input_bulkTag_parameters.json")); + "/eu/dnetlib/dhp/wf/subworkflows/bulktag/input_bulkTag_parameters.json")); final ArgumentApplicationParser parser = new ArgumentApplicationParser(jsonConfiguration); parser.parseArgument(args); diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/bulktag/input_bulkTag_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/bulktag/input_bulkTag_parameters.json new file mode 100644 index 000000000..ce1a8ecab --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/bulktag/input_bulkTag_parameters.json @@ -0,0 +1,38 @@ +[ + { + "paramName":"s", + "paramLongName":"sourcePath", + "paramDescription": "the path of the sequencial file to read", + "paramRequired": true + }, + { + "paramName": "pm", + "paramLongName":"pathMap", + "paramDescription": "the json path associated to each selection field", + "paramRequired": true + }, + { + "paramName": "out", + "paramLongName": "outputPath", + "paramDescription": "the path used to store temporary output files", + "paramRequired": true + }, + { + "paramName": "ssm", + "paramLongName": "isSparkSessionManaged", + "paramDescription": "true if the spark session is managed, false otherwise", + "paramRequired": false + }, + { + "paramName": "tg", + "paramLongName": "taggingConf", + "paramDescription": "this parameter is intended for testing purposes only. It is a possible tagging configuration obtained via the XQUERY. Intended to be removed", + "paramRequired": false + }, + { + "paramName": "bu", + "paramLongName": "baseURL", + "paramDescription": "this parameter is to specify the api to be queried (beta or production)", + "paramRequired": false + } +] \ No newline at end of file From 89f269c7f4b63070358724213b5d39fac0678916 Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Fri, 22 Dec 2023 11:37:50 +0100 Subject: [PATCH 415/449] changed the path to the parameter file in the class for entitytoorganization propagation --- .../SparkEntityToOrganizationFromSemRel.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/entitytoorganizationfromsemrel/SparkEntityToOrganizationFromSemRel.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/entitytoorganizationfromsemrel/SparkEntityToOrganizationFromSemRel.java index 87c0ec2b9..4e30a6d6a 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/entitytoorganizationfromsemrel/SparkEntityToOrganizationFromSemRel.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/entitytoorganizationfromsemrel/SparkEntityToOrganizationFromSemRel.java @@ -39,7 +39,7 @@ public class SparkEntityToOrganizationFromSemRel implements Serializable { .toString( SparkResultToOrganizationFromIstRepoJob.class .getResourceAsStream( - "/eu/dnetlib/dhp/entitytoorganizationfromsemrel/input_propagation_parameter.json")); + "/eu/dnetlib/dhp/wf/subworkflows/entitytoorganizationfromsemrel/input_propagation_parameter.json")); final ArgumentApplicationParser parser = new ArgumentApplicationParser(jsonConfiguration); From 009730b3d1616fa3337cad380b9ff8e55641c9a5 Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Fri, 22 Dec 2023 11:42:09 +0100 Subject: [PATCH 416/449] added properties file in the forlder for the workflow of orcid propagation. Changes the path in the classes implementing the propagationchanged the path to the parameter file in the class for entitytoorganization propagation --- .../PrepareResultOrcidAssociationStep1.java | 2 +- .../PrepareResultOrcidAssociationStep2.java | 2 +- .../SparkOrcidToResultFromSemRelJob.java | 2 +- .../input_orcidtoresult_parameters.json | 44 +++++++++++++++++++ ...input_prepareorcidtoresult_parameters.json | 38 ++++++++++++++++ ...nput_prepareorcidtoresult_parameters2.json | 20 +++++++++ 6 files changed, 105 insertions(+), 3 deletions(-) create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/orcidtoresultfromsemrel/input_orcidtoresult_parameters.json create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/orcidtoresultfromsemrel/input_prepareorcidtoresult_parameters.json create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/orcidtoresultfromsemrel/input_prepareorcidtoresult_parameters2.json diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/orcidtoresultfromsemrel/PrepareResultOrcidAssociationStep1.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/orcidtoresultfromsemrel/PrepareResultOrcidAssociationStep1.java index 95b870292..bc72a2ae1 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/orcidtoresultfromsemrel/PrepareResultOrcidAssociationStep1.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/orcidtoresultfromsemrel/PrepareResultOrcidAssociationStep1.java @@ -31,7 +31,7 @@ public class PrepareResultOrcidAssociationStep1 { .toString( PrepareResultOrcidAssociationStep1.class .getResourceAsStream( - "/eu/dnetlib/dhp/orcidtoresultfromsemrel/input_prepareorcidtoresult_parameters.json")); + "/eu/dnetlib/dhp/wf/subworkflows/orcidtoresultfromsemrel/input_prepareorcidtoresult_parameters.json")); final ArgumentApplicationParser parser = new ArgumentApplicationParser(jsonConf); parser.parseArgument(args); diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/orcidtoresultfromsemrel/PrepareResultOrcidAssociationStep2.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/orcidtoresultfromsemrel/PrepareResultOrcidAssociationStep2.java index c60012a74..46894d0e1 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/orcidtoresultfromsemrel/PrepareResultOrcidAssociationStep2.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/orcidtoresultfromsemrel/PrepareResultOrcidAssociationStep2.java @@ -29,7 +29,7 @@ public class PrepareResultOrcidAssociationStep2 { .toString( PrepareResultOrcidAssociationStep2.class .getResourceAsStream( - "/eu/dnetlib/dhp/orcidtoresultfromsemrel/input_prepareorcidtoresult_parameters2.json")); + "/eu/dnetlib/dhp/wf/subworkflows/orcidtoresultfromsemrel/input_prepareorcidtoresult_parameters2.json")); final ArgumentApplicationParser parser = new ArgumentApplicationParser(jsonConfiguration); diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/orcidtoresultfromsemrel/SparkOrcidToResultFromSemRelJob.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/orcidtoresultfromsemrel/SparkOrcidToResultFromSemRelJob.java index 5f9260e5d..c5d632658 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/orcidtoresultfromsemrel/SparkOrcidToResultFromSemRelJob.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/orcidtoresultfromsemrel/SparkOrcidToResultFromSemRelJob.java @@ -36,7 +36,7 @@ public class SparkOrcidToResultFromSemRelJob { .toString( SparkOrcidToResultFromSemRelJob.class .getResourceAsStream( - "/eu/dnetlib/dhp/orcidtoresultfromsemrel/input_orcidtoresult_parameters.json")); + "/eu/dnetlib/dhp/wf/subworkflows/orcidtoresultfromsemrel/input_orcidtoresult_parameters.json")); final ArgumentApplicationParser parser = new ArgumentApplicationParser(jsonConfiguration); parser.parseArgument(args); diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/orcidtoresultfromsemrel/input_orcidtoresult_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/orcidtoresultfromsemrel/input_orcidtoresult_parameters.json new file mode 100644 index 000000000..3cbaa23bb --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/orcidtoresultfromsemrel/input_orcidtoresult_parameters.json @@ -0,0 +1,44 @@ +[ + { + "paramName":"s", + "paramLongName":"sourcePath", + "paramDescription": "the path of the sequencial file to read", + "paramRequired": true + }, + { + "paramName":"sg", + "paramLongName":"saveGraph", + "paramDescription": "true if the new version of the graph must be saved", + "paramRequired": false + }, + { + "paramName": "out", + "paramLongName": "outputPath", + "paramDescription": "the path used to store temporary output files", + "paramRequired": true + }, + { + "paramName": "ssm", + "paramLongName": "isSparkSessionManaged", + "paramDescription": "true if the spark session is managed, false otherwise", + "paramRequired": false + }, + { + "paramName":"tn", + "paramLongName":"resultTableName", + "paramDescription": "the name of the result table we are currently working on", + "paramRequired": true + }, + { + "paramName":"pu", + "paramLongName":"possibleUpdatesPath", + "paramDescription": "the path the the association resultId orcid author list can be found", + "paramRequired": true + }, + { + "paramName":"test", + "paramLongName":"isTest", + "paramDescription": "true if it is executing a test", + "paramRequired": false + } +] \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/orcidtoresultfromsemrel/input_prepareorcidtoresult_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/orcidtoresultfromsemrel/input_prepareorcidtoresult_parameters.json new file mode 100644 index 000000000..08648d61a --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/orcidtoresultfromsemrel/input_prepareorcidtoresult_parameters.json @@ -0,0 +1,38 @@ +[ + { + "paramName":"s", + "paramLongName":"sourcePath", + "paramDescription": "the path of the sequencial file to read", + "paramRequired": true + }, + { + "paramName":"as", + "paramLongName":"allowedsemrels", + "paramDescription": "the allowed sematinc relations for propagation", + "paramRequired": true + }, + { + "paramName":"h", + "paramLongName":"hive_metastore_uris", + "paramDescription": "the hive metastore uris", + "paramRequired": true + }, + { + "paramName": "out", + "paramLongName": "outputPath", + "paramDescription": "the path used to store temporary output files", + "paramRequired": true + }, + { + "paramName": "ssm", + "paramLongName": "isSparkSessionManaged", + "paramDescription": "true if the spark session is managed, false otherwise", + "paramRequired": false + }, + { + "paramName":"tn", + "paramLongName":"resultTableName", + "paramDescription": "the name of the result table we are currently working on", + "paramRequired": true + } +] \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/orcidtoresultfromsemrel/input_prepareorcidtoresult_parameters2.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/orcidtoresultfromsemrel/input_prepareorcidtoresult_parameters2.json new file mode 100644 index 000000000..1a67134a6 --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/orcidtoresultfromsemrel/input_prepareorcidtoresult_parameters2.json @@ -0,0 +1,20 @@ +[ + { + "paramName":"s", + "paramLongName":"sourcePath", + "paramDescription": "the path of the sequencial file to read", + "paramRequired": true + }, + { + "paramName": "out", + "paramLongName": "outputPath", + "paramDescription": "the path used to store temporary output files", + "paramRequired": true + }, + { + "paramName": "ssm", + "paramLongName": "isSparkSessionManaged", + "paramDescription": "true if the spark session is managed, false otherwise", + "paramRequired": false + } +] \ No newline at end of file From f2352e8a78017f26f297833546e1a0853c5a89b7 Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Fri, 22 Dec 2023 11:43:34 +0100 Subject: [PATCH 417/449] changed in the classes the path for the property files for the propagation of community from project --- .../resulttocommunityfromproject/PrepareResultCommunitySet.java | 2 +- .../SparkResultToCommunityFromProject.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/PrepareResultCommunitySet.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/PrepareResultCommunitySet.java index 467e11a96..512dfa9be 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/PrepareResultCommunitySet.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/PrepareResultCommunitySet.java @@ -38,7 +38,7 @@ public class PrepareResultCommunitySet { .toString( PrepareResultCommunitySet.class .getResourceAsStream( - "/eu/dnetlib/dhp/resulttocommunityfromproject/input_preparecommunitytoresult_parameters.json")); + "/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromproject/input_preparecommunitytoresult_parameters.json")); final ArgumentApplicationParser parser = new ArgumentApplicationParser(jsonConfiguration); parser.parseArgument(args); diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/SparkResultToCommunityFromProject.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/SparkResultToCommunityFromProject.java index 229ac7e32..dde534061 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/SparkResultToCommunityFromProject.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/SparkResultToCommunityFromProject.java @@ -44,7 +44,7 @@ public class SparkResultToCommunityFromProject implements Serializable { .toString( SparkResultToCommunityFromProject.class .getResourceAsStream( - "/eu/dnetlib/dhp/resulttocommunityfromproject/input_communitytoresult_parameters.json")); + "/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromproject/input_communitytoresult_parameters.json")); final ArgumentApplicationParser parser = new ArgumentApplicationParser(jsonConfiguration); From 2f7b9ad815358857dd14656ae1e4b160e7721662 Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Fri, 22 Dec 2023 11:46:15 +0100 Subject: [PATCH 418/449] added properties file in the forlder for the workflow of project to result propagation. Changes the path in the classes implementing the propagation --- .../PrepareProjectResultsAssociation.java | 2 +- .../SparkResultToProjectThroughSemRelJob.java | 2 +- ...put_prepareprojecttoresult_parameters.json | 33 ++++++++++++++ .../input_projecttoresult_parameters.json | 44 +++++++++++++++++++ 4 files changed, 79 insertions(+), 2 deletions(-) create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/projecttoresult/input_prepareprojecttoresult_parameters.json create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/projecttoresult/input_projecttoresult_parameters.json diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/projecttoresult/PrepareProjectResultsAssociation.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/projecttoresult/PrepareProjectResultsAssociation.java index ac61e26f9..8f4e2ad9a 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/projecttoresult/PrepareProjectResultsAssociation.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/projecttoresult/PrepareProjectResultsAssociation.java @@ -28,7 +28,7 @@ public class PrepareProjectResultsAssociation { .toString( PrepareProjectResultsAssociation.class .getResourceAsStream( - "/eu/dnetlib/dhp/projecttoresult/input_prepareprojecttoresult_parameters.json")); + "/eu/dnetlib/dhp/wf/subworkflows/projecttoresult/input_prepareprojecttoresult_parameters.json")); final ArgumentApplicationParser parser = new ArgumentApplicationParser(jsonConfiguration); diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/projecttoresult/SparkResultToProjectThroughSemRelJob.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/projecttoresult/SparkResultToProjectThroughSemRelJob.java index 1ec521af1..e7518673d 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/projecttoresult/SparkResultToProjectThroughSemRelJob.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/projecttoresult/SparkResultToProjectThroughSemRelJob.java @@ -33,7 +33,7 @@ public class SparkResultToProjectThroughSemRelJob { .toString( SparkResultToProjectThroughSemRelJob.class .getResourceAsStream( - "/eu/dnetlib/dhp/projecttoresult/input_projecttoresult_parameters.json")); + "/eu/dnetlib/dhp/wf/subworkflows/projecttoresult/input_projecttoresult_parameters.json")); final ArgumentApplicationParser parser = new ArgumentApplicationParser(jsonConfiguration); diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/projecttoresult/input_prepareprojecttoresult_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/projecttoresult/input_prepareprojecttoresult_parameters.json new file mode 100644 index 000000000..a70dbd6a0 --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/projecttoresult/input_prepareprojecttoresult_parameters.json @@ -0,0 +1,33 @@ +[ + { + "paramName":"s", + "paramLongName":"sourcePath", + "paramDescription": "the path of the sequencial file to read", + "paramRequired": true + }, + + { + "paramName":"asr", + "paramLongName":"allowedsemrels", + "paramDescription": "the types of the allowed datasources. Split by ;", + "paramRequired": true + }, + { + "paramName":"h", + "paramLongName":"hive_metastore_uris", + "paramDescription": "the hive metastore uris", + "paramRequired": true + }, + { + "paramName":"pu", + "paramLongName":"potentialUpdatePath", + "paramDescription": "the path of the potential updates ", + "paramRequired": true + }, + { + "paramName":"al", + "paramLongName":"alreadyLinkedPath", + "paramDescription": "the path of the already linked project result_set", + "paramRequired": true + } +] \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/projecttoresult/input_projecttoresult_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/projecttoresult/input_projecttoresult_parameters.json new file mode 100644 index 000000000..7f44ba03c --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/projecttoresult/input_projecttoresult_parameters.json @@ -0,0 +1,44 @@ +[ + { + "paramName":"h", + "paramLongName":"hive_metastore_uris", + "paramDescription": "the hive metastore uris", + "paramRequired": true + }, + { + "paramName":"sg", + "paramLongName":"saveGraph", + "paramDescription": "true if the new version of the graph must be saved", + "paramRequired": false + }, + { + "paramName":"pu", + "paramLongName":"potentialUpdatePath", + "paramDescription": "the path of the potential updates ", + "paramRequired": true + }, + { + "paramName":"al", + "paramLongName":"alreadyLinkedPath", + "paramDescription": "the path of the already linked project result_set", + "paramRequired": true + }, + { + "paramName": "ssm", + "paramLongName": "isSparkSessionManaged", + "paramDescription": "the path where prepared info have been stored", + "paramRequired": false + }, + { + "paramName": "out", + "paramLongName": "outputPath", + "paramDescription": "the path used to store temporary output files", + "paramRequired": true + }, + { + "paramName": "test", + "paramLongName": "isTest", + "paramDescription": "true if it is a test running", + "paramRequired": false + } +] \ No newline at end of file From 2f3b5a133d4ddfc4ed6a38366c927330d2c25b08 Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Fri, 22 Dec 2023 13:56:40 +0100 Subject: [PATCH 419/449] added properties file in the forlder for the workflow of result to community from organization propagation. Changes the path in the classes implementing the propagation --- .../PrepareResultCommunitySet.java | 2 +- ...kResultToCommunityFromOrganizationJob.java | 2 +- .../input_communitytoresult_parameters.json | 28 ++++++++++++++++ ...t_preparecommunitytoresult_parameters.json | 33 +++++++++++++++++++ 4 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromorganization/input_communitytoresult_parameters.json create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromorganization/input_preparecommunitytoresult_parameters.json diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromorganization/PrepareResultCommunitySet.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromorganization/PrepareResultCommunitySet.java index 54fa60168..be31cd46c 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromorganization/PrepareResultCommunitySet.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromorganization/PrepareResultCommunitySet.java @@ -34,7 +34,7 @@ public class PrepareResultCommunitySet { .toString( PrepareResultCommunitySet.class .getResourceAsStream( - "/eu/dnetlib/dhp/resulttocommunityfromorganization/input_preparecommunitytoresult_parameters.json")); + "/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromorganization/input_preparecommunitytoresult_parameters.json")); final ArgumentApplicationParser parser = new ArgumentApplicationParser(jsonConfiguration); parser.parseArgument(args); diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromorganization/SparkResultToCommunityFromOrganizationJob.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromorganization/SparkResultToCommunityFromOrganizationJob.java index adb7feef7..cc87b80e5 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromorganization/SparkResultToCommunityFromOrganizationJob.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromorganization/SparkResultToCommunityFromOrganizationJob.java @@ -36,7 +36,7 @@ public class SparkResultToCommunityFromOrganizationJob { .toString( SparkResultToCommunityFromOrganizationJob.class .getResourceAsStream( - "/eu/dnetlib/dhp/resulttocommunityfromorganization/input_communitytoresult_parameters.json")); + "/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromorganization/input_communitytoresult_parameters.json")); final ArgumentApplicationParser parser = new ArgumentApplicationParser(jsonConfiguration); diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromorganization/input_communitytoresult_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromorganization/input_communitytoresult_parameters.json new file mode 100644 index 000000000..0db8085d1 --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromorganization/input_communitytoresult_parameters.json @@ -0,0 +1,28 @@ +[ + { + "paramName":"s", + "paramLongName":"sourcePath", + "paramDescription": "the path of the sequencial file to read", + "paramRequired": true + }, + + { + "paramName": "out", + "paramLongName": "outputPath", + "paramDescription": "the path used to store temporary output files", + "paramRequired": true + }, + { + "paramName": "ssm", + "paramLongName": "isSparkSessionManaged", + "paramDescription": "true if the spark session is managed, false otherwise", + "paramRequired": false + }, + { + "paramName": "p", + "paramLongName": "preparedInfoPath", + "paramDescription": "the path where prepared info have been stored", + "paramRequired": true + } + +] \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromorganization/input_preparecommunitytoresult_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromorganization/input_preparecommunitytoresult_parameters.json new file mode 100644 index 000000000..3601db7ac --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromorganization/input_preparecommunitytoresult_parameters.json @@ -0,0 +1,33 @@ +[ + { + "paramName":"s", + "paramLongName":"sourcePath", + "paramDescription": "the path of the sequencial file to read", + "paramRequired": true + }, + { + "paramName":"h", + "paramLongName":"hive_metastore_uris", + "paramDescription": "the hive metastore uris", + "paramRequired": true + }, + { + "paramName": "ssm", + "paramLongName": "isSparkSessionManaged", + "paramDescription": "true if the spark session is managed, false otherwise", + "paramRequired": false + }, + { + "paramName": "out", + "paramLongName": "outputPath", + "paramDescription": "the path used to store temporary output files", + "paramRequired": true + }, + { + "paramName": "bu", + "paramLongName": "baseURL", + "paramDescription": "the base URL to the community API to use", + "paramRequired": false + } + +] \ No newline at end of file From 9f966b59d446ba83d9dd002dddaf1d9585a3b037 Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Fri, 22 Dec 2023 14:11:47 +0100 Subject: [PATCH 420/449] added properties file in the forlder for the workflow of result to community from semrel propagation. Changes the path in the classes implementing the propagation --- .../PrepareResultCommunitySetStep1.java | 2 +- .../PrepareResultCommunitySetStep2.java | 2 +- ...parkResultToCommunityThroughSemRelJob.java | 2 +- .../input_communitytoresult_parameters.json | 52 +++++++++++++++++++ ..._preparecommunitytoresult2_parameters.json | 20 +++++++ ...t_preparecommunitytoresult_parameters.json | 44 ++++++++++++++++ 6 files changed, 119 insertions(+), 3 deletions(-) create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromsemrel/input_communitytoresult_parameters.json create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromsemrel/input_preparecommunitytoresult2_parameters.json create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromsemrel/input_preparecommunitytoresult_parameters.json diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromsemrel/PrepareResultCommunitySetStep1.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromsemrel/PrepareResultCommunitySetStep1.java index 40c074a6e..aede9ef05 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromsemrel/PrepareResultCommunitySetStep1.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromsemrel/PrepareResultCommunitySetStep1.java @@ -61,7 +61,7 @@ public class PrepareResultCommunitySetStep1 { .toString( PrepareResultCommunitySetStep1.class .getResourceAsStream( - "/eu/dnetlib/dhp/resulttocommunityfromsemrel/input_preparecommunitytoresult_parameters.json")); + "/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromsemrel/input_preparecommunitytoresult_parameters.json")); final ArgumentApplicationParser parser = new ArgumentApplicationParser(jsonConfiguration); diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromsemrel/PrepareResultCommunitySetStep2.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromsemrel/PrepareResultCommunitySetStep2.java index 0ddb19a1a..a53d3dfe3 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromsemrel/PrepareResultCommunitySetStep2.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromsemrel/PrepareResultCommunitySetStep2.java @@ -31,7 +31,7 @@ public class PrepareResultCommunitySetStep2 { .toString( PrepareResultCommunitySetStep2.class .getResourceAsStream( - "/eu/dnetlib/dhp/resulttocommunityfromsemrel/input_preparecommunitytoresult2_parameters.json")); + "/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromsemrel/input_preparecommunitytoresult2_parameters.json")); final ArgumentApplicationParser parser = new ArgumentApplicationParser(jsonConfiguration); diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromsemrel/SparkResultToCommunityThroughSemRelJob.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromsemrel/SparkResultToCommunityThroughSemRelJob.java index a10737849..4929c7582 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromsemrel/SparkResultToCommunityThroughSemRelJob.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromsemrel/SparkResultToCommunityThroughSemRelJob.java @@ -33,7 +33,7 @@ public class SparkResultToCommunityThroughSemRelJob { .toString( SparkResultToCommunityThroughSemRelJob.class .getResourceAsStream( - "/eu/dnetlib/dhp/resulttocommunityfromsemrel/input_communitytoresult_parameters.json")); + "/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromsemrel/input_communitytoresult_parameters.json")); final ArgumentApplicationParser parser = new ArgumentApplicationParser(jsonConfiguration); diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromsemrel/input_communitytoresult_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromsemrel/input_communitytoresult_parameters.json new file mode 100644 index 000000000..a40ce375e --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromsemrel/input_communitytoresult_parameters.json @@ -0,0 +1,52 @@ +[ + + { + "paramName":"s", + "paramLongName":"sourcePath", + "paramDescription": "the path of the sequencial file to read", + "paramRequired": true + }, + { + "paramName":"sg", + "paramLongName":"saveGraph", + "paramDescription": "true if the new version of the graph must be saved", + "paramRequired": false + }, + { + "paramName":"h", + "paramLongName":"hive_metastore_uris", + "paramDescription": "the hive metastore uris", + "paramRequired": true + }, + { + "paramName": "ssm", + "paramLongName": "isSparkSessionManaged", + "paramDescription": "true if the spark session is managed, false otherwise", + "paramRequired": false + }, + { + "paramName": "out", + "paramLongName": "outputPath", + "paramDescription": "the path used to store temporary output files", + "paramRequired": true + }, + { + "paramName":"tn", + "paramLongName":"resultTableName", + "paramDescription": "the name of the result table we are currently working on", + "paramRequired": true + }, + { + "paramName": "p", + "paramLongName": "preparedInfoPath", + "paramDescription": "the path where prepared info have been stored", + "paramRequired": true + }, + { + "paramName":"test", + "paramLongName":"isTest", + "paramDescription": "true if it is executing a test", + "paramRequired": false + } + +] \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromsemrel/input_preparecommunitytoresult2_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromsemrel/input_preparecommunitytoresult2_parameters.json new file mode 100644 index 000000000..3ba3c8e9c --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromsemrel/input_preparecommunitytoresult2_parameters.json @@ -0,0 +1,20 @@ +[ + { + "paramName":"s", + "paramLongName":"sourcePath", + "paramDescription": "the path of the sequencial file to read", + "paramRequired": true + }, + { + "paramName": "ssm", + "paramLongName": "isSparkSessionManaged", + "paramDescription": "true if the spark session is managed, false otherwise", + "paramRequired": false + }, + { + "paramName": "out", + "paramLongName": "outputPath", + "paramDescription": "the path used to store temporary output files", + "paramRequired": true + } +] \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromsemrel/input_preparecommunitytoresult_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromsemrel/input_preparecommunitytoresult_parameters.json new file mode 100644 index 000000000..c6389ec8d --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromsemrel/input_preparecommunitytoresult_parameters.json @@ -0,0 +1,44 @@ +[ + { + "paramName":"bu", + "paramLongName":"baseURL", + "paramDescription": "URL of the isLookUp Service", + "paramRequired": true + }, + { + "paramName":"s", + "paramLongName":"sourcePath", + "paramDescription": "the path of the sequencial file to read", + "paramRequired": true + }, + { + "paramName":"as", + "paramLongName":"allowedsemrels", + "paramDescription": "the allowed semantic relations for propagation", + "paramRequired": true + }, + { + "paramName":"h", + "paramLongName":"hive_metastore_uris", + "paramDescription": "the hive metastore uris", + "paramRequired": true + }, + { + "paramName": "ssm", + "paramLongName": "isSparkSessionManaged", + "paramDescription": "true if the spark session is managed, false otherwise", + "paramRequired": false + }, + { + "paramName": "out", + "paramLongName": "outputPath", + "paramDescription": "the path used to store temporary output files", + "paramRequired": true + }, + { + "paramName":"tn", + "paramLongName":"resultTableName", + "paramDescription": "the name of the result table we are currently working on", + "paramRequired": true + } +] \ No newline at end of file From cb14470ba6779bd6f5dea3e1b937512295c0854a Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Fri, 22 Dec 2023 14:50:05 +0100 Subject: [PATCH 421/449] added properties file in the forlder for the workflow of result to organization from inst repo propagation. Changes the path in the classes implementing the propagation --- .../AppendNewRelations.java | 2 +- .../PrepareResultInstRepoAssociation.java | 2 +- ...arkResultToOrganizationFromIstRepoJob.java | 2 +- .../input_newrelation_parameters.json | 20 +++++++ .../input_prepareresultorg_parameters.json | 32 +++++++++++ ...sulaffiliationfrominstrepo_parameters.json | 56 +++++++++++++++++++ 6 files changed, 111 insertions(+), 3 deletions(-) create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttoorganizationfrominstrepo/input_newrelation_parameters.json create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttoorganizationfrominstrepo/input_prepareresultorg_parameters.json create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttoorganizationfrominstrepo/input_propagationresulaffiliationfrominstrepo_parameters.json diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/AppendNewRelations.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/AppendNewRelations.java index 636c14b65..11e942142 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/AppendNewRelations.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/AppendNewRelations.java @@ -30,7 +30,7 @@ public class AppendNewRelations implements Serializable { .toString( AppendNewRelations.class .getResourceAsStream( - "/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/input_newrelation_parameters.json")); + "/eu/dnetlib/dhp/wf/subworkflows/resulttoorganizationfrominstrepo/input_newrelation_parameters.json")); final ArgumentApplicationParser parser = new ArgumentApplicationParser(jsonConfiguration); diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/PrepareResultInstRepoAssociation.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/PrepareResultInstRepoAssociation.java index deec6fedc..57488bd20 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/PrepareResultInstRepoAssociation.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/PrepareResultInstRepoAssociation.java @@ -40,7 +40,7 @@ public class PrepareResultInstRepoAssociation { .toString( PrepareResultInstRepoAssociation.class .getResourceAsStream( - "/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/input_prepareresultorg_parameters.json")); + "/eu/dnetlib/dhp/wf/subworkflows/resulttoorganizationfrominstrepo/input_prepareresultorg_parameters.json")); final ArgumentApplicationParser parser = new ArgumentApplicationParser(jsonConfiguration); diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/SparkResultToOrganizationFromIstRepoJob.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/SparkResultToOrganizationFromIstRepoJob.java index bbad20e2d..c8862b10c 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/SparkResultToOrganizationFromIstRepoJob.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/SparkResultToOrganizationFromIstRepoJob.java @@ -47,7 +47,7 @@ public class SparkResultToOrganizationFromIstRepoJob { .toString( SparkResultToOrganizationFromIstRepoJob.class .getResourceAsStream( - "/eu/dnetlib/dhp/resulttoorganizationfrominstrepo/input_propagationresulaffiliationfrominstrepo_parameters.json")); + "/eu/dnetlib/dhp/wf/subworkflows/resulttoorganizationfrominstrepo/input_propagationresulaffiliationfrominstrepo_parameters.json")); final ArgumentApplicationParser parser = new ArgumentApplicationParser(jsonConfiguration); diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttoorganizationfrominstrepo/input_newrelation_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttoorganizationfrominstrepo/input_newrelation_parameters.json new file mode 100644 index 000000000..5fe92cff1 --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttoorganizationfrominstrepo/input_newrelation_parameters.json @@ -0,0 +1,20 @@ +[ + { + "paramName":"s", + "paramLongName":"sourcePath", + "paramDescription": "the path of the sequencial file to read", + "paramRequired": true + }, + + { + "paramName": "ssm", + "paramLongName": "isSparkSessionManaged", + "paramDescription": "the path where prepared info have been stored", + "paramRequired": false + },{ + "paramName": "o", + "paramLongName": "outputPath", + "paramDescription": "institutional repositories that should not be considered for the propagation", + "paramRequired": false +} +] \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttoorganizationfrominstrepo/input_prepareresultorg_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttoorganizationfrominstrepo/input_prepareresultorg_parameters.json new file mode 100644 index 000000000..3f4b1d151 --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttoorganizationfrominstrepo/input_prepareresultorg_parameters.json @@ -0,0 +1,32 @@ +[ + { + "paramName":"s", + "paramLongName":"sourcePath", + "paramDescription": "the path of the sequencial file to read", + "paramRequired": true + }, + { + "paramName":"h", + "paramLongName":"hive_metastore_uris", + "paramDescription": "the hive metastore uris", + "paramRequired": true + }, + + { + "paramName":"wp", + "paramLongName":"workingPath", + "paramDescription": "the working path", + "paramRequired": true + }, + { + "paramName": "ssm", + "paramLongName": "isSparkSessionManaged", + "paramDescription": "the path where prepared info have been stored", + "paramRequired": false + },{ + "paramName": "bl", + "paramLongName": "blacklist", + "paramDescription": "institutional repositories that should not be considered for the propagation", + "paramRequired": false +} +] \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttoorganizationfrominstrepo/input_propagationresulaffiliationfrominstrepo_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttoorganizationfrominstrepo/input_propagationresulaffiliationfrominstrepo_parameters.json new file mode 100644 index 000000000..d2b076c82 --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttoorganizationfrominstrepo/input_propagationresulaffiliationfrominstrepo_parameters.json @@ -0,0 +1,56 @@ +[ + { + "paramName":"s", + "paramLongName":"sourcePath", + "paramDescription": "the path of the sequencial file to read", + "paramRequired": true + }, + { + "paramName":"h", + "paramLongName":"hive_metastore_uris", + "paramDescription": "the hive metastore uris", + "paramRequired": true + }, + { + "paramName":"sg", + "paramLongName":"saveGraph", + "paramDescription": "true if the new version of the graph must be saved", + "paramRequired": false + }, + { + "paramName":"dop", + "paramLongName":"datasourceOrganizationPath", + "paramDescription": "path where to store/find association from datasource and organization", + "paramRequired": true + }, + { + "paramName":"alp", + "paramLongName":"alreadyLinkedPath", + "paramDescription": "path where to store/find already linked results and organizations", + "paramRequired": true + }, + { + "paramName": "ssm", + "paramLongName": "isSparkSessionManaged", + "paramDescription": "the path where prepared info have been stored", + "paramRequired": false + }, + { + "paramName": "test", + "paramLongName": "isTest", + "paramDescription": "true if it is a test running", + "paramRequired": false + }, + { + "paramName":"tn", + "paramLongName":"resultTableName", + "paramDescription": "the name of the result table we are currently working on", + "paramRequired": true + }, + { + "paramName": "out", + "paramLongName": "outputPath", + "paramDescription": "the path used to store temporary output files", + "paramRequired": true + } +] \ No newline at end of file From 02636e802c26c284efa1415d168815c5b23ed655 Mon Sep 17 00:00:00 2001 From: Giambattista Bloisi Date: Mon, 2 Oct 2023 09:25:12 +0200 Subject: [PATCH 422/449] SparkCreateSimRels: - Create dedup blocks from the complete queue of records matching cluster key instead of truncating the results - Clean titles once before clustering and similarity comparisons - Added support for filtered fields in model - Added support for sorting List fields in model - Added new JSONListClustering and numAuthorsTitleSuffixPrefixChain clustering functions - Added new maxLengthMatch comparator function - Use reduced complexity Levenshtein with threshold in levensteinTitle - Use reduced complexity AuthorsMatch with threshold early-quit - Use incremental Connected Component to decrease comparisons in similarity match in BlockProcessor - Use new clusterings configuration in Dedup tests SparkWhitelistSimRels: use left semi join for clarity and performance SparkCreateMergeRels: - Use new connected component algorithm that converge faster than Spark GraphX provided algorithm - Refactored to use Windowing sorting rather than groupBy to reduce memory pressure - Use historical pivot table to generate singleton rels, merged rels and keep continuity with dedupIds used in the past - Comparator for pivot record selection now uses "tomorrow" as filler for missing or incorrect date instead of "2000-01-01" - Changed generation of ids of type dedup_wf_001 to avoid collisions DedupRecordFactory: use reduceGroups instead of mapGroups to decrease memory pressure --- .../AbstractClusteringFunction.java | 23 +- .../eu/dnetlib/pace/clustering/Acronyms.java | 2 +- .../pace/clustering/ClusteringFunction.java | 2 +- .../pace/clustering/ImmutableFieldValue.java | 2 +- .../pace/clustering/JSONListClustering.java | 69 ++++ .../pace/clustering/KeywordsClustering.java | 12 +- .../pace/clustering/LastNameFirstInitial.java | 7 +- .../pace/clustering/LowercaseClustering.java | 2 +- .../dnetlib/pace/clustering/NgramPairs.java | 4 +- .../eu/dnetlib/pace/clustering/Ngrams.java | 4 +- .../NumAuthorsTitleSuffixPrefixChain.java | 113 ++++++ .../pace/clustering/PersonClustering.java | 6 +- .../dnetlib/pace/clustering/PersonHash.java | 2 +- .../clustering/RandomClusteringFunction.java | 2 +- .../pace/clustering/SortedNgramPairs.java | 7 +- .../clustering/SpaceTrimmingFieldValue.java | 4 +- .../dnetlib/pace/clustering/SuffixPrefix.java | 2 +- .../pace/clustering/UrlClustering.java | 14 +- .../WordsStatsSuffixPrefixChain.java | 2 +- .../pace/clustering/WordsSuffixPrefix.java | 2 +- .../pace/common/AbstractPaceFunctions.java | 66 ++-- .../eu/dnetlib/pace/model/ClusteringDef.java | 6 +- .../java/eu/dnetlib/pace/model/FieldDef.java | 35 ++ .../eu/dnetlib/pace/model/SparkDeduper.scala | 38 +- .../eu/dnetlib/pace/model/SparkModel.scala | 46 ++- .../eu/dnetlib/pace/tree/AuthorsMatch.java | 25 +- .../dnetlib/pace/tree/InstanceTypeMatch.java | 2 +- .../eu/dnetlib/pace/tree/LevensteinTitle.java | 20 +- .../eu/dnetlib/pace/tree/MaxLengthMatch.java | 29 ++ .../pace/tree/support/AbstractComparator.java | 10 + .../eu/dnetlib/pace/util/BlockProcessor.java | 24 +- .../util/IncrementalConnectedComponents.java | 50 +++ .../eu/dnetlib/pace/util/MapDocumentUtil.java | 2 + .../eu/dnetlib/pace/util/PaceResolver.java | 2 +- .../clustering/ClusteringFunctionTest.java | 40 +-- .../IncrementalConnectedComponentsTest.java | 40 +++ .../dhp/oa/dedup/AbstractSparkAction.java | 4 + .../dhp/oa/dedup/DedupRecordFactory.java | 134 +++---- .../eu/dnetlib/dhp/oa/dedup/IdGenerator.java | 21 +- .../dhp/oa/dedup/SparkCreateMergeRels.java | 332 ++++++++++------- .../dhp/oa/dedup/SparkWhitelistSimRels.java | 16 +- .../oa/dedup/graph/ConnectedComponent.java | 100 ------ .../dhp/oa/dedup/graph/GraphProcessor.scala | 37 -- .../dhp/oa/dedup/model/Identifier.java | 18 +- .../dhp/oa/dedup/createCC_parameters.json | 12 + .../dedup/scan/oozie_app/config-default.xml | 4 + .../dhp/oa/dedup/scan/oozie_app/workflow.xml | 2 + .../kwartile/lib/cc/ConnectedComponent.scala | 335 ++++++++++++++++++ .../dnetlib/dhp/oa/dedup/SparkDedupTest.java | 160 +++++++-- .../dnetlib/dhp/dedup/conf/ds.curr.conf.json | 3 +- .../dnetlib/dhp/dedup/conf/orp.curr.conf.json | 3 +- .../dnetlib/dhp/dedup/conf/pub.curr.conf.json | 49 ++- .../dnetlib/dhp/dedup/conf/sw.curr.conf.json | 3 +- .../dedup/pivot_history/pivot_history.json | 1 + pom.xml | 20 ++ 55 files changed, 1437 insertions(+), 533 deletions(-) create mode 100644 dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/JSONListClustering.java create mode 100644 dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/NumAuthorsTitleSuffixPrefixChain.java create mode 100644 dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/MaxLengthMatch.java create mode 100644 dhp-pace-core/src/main/java/eu/dnetlib/pace/util/IncrementalConnectedComponents.java create mode 100644 dhp-pace-core/src/test/java/eu/dnetlib/pace/util/IncrementalConnectedComponentsTest.java delete mode 100644 dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/graph/ConnectedComponent.java delete mode 100644 dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/graph/GraphProcessor.scala create mode 100644 dhp-workflows/dhp-dedup-openaire/src/main/scala/com/kwartile/lib/cc/ConnectedComponent.scala create mode 100644 dhp-workflows/dhp-dedup-openaire/src/test/resources/eu/dnetlib/dhp/dedup/pivot_history/pivot_history.json diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/AbstractClusteringFunction.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/AbstractClusteringFunction.java index 3da8eb490..e971ec5bb 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/AbstractClusteringFunction.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/AbstractClusteringFunction.java @@ -14,9 +14,9 @@ import eu.dnetlib.pace.config.Config; public abstract class AbstractClusteringFunction extends AbstractPaceFunctions implements ClusteringFunction { - protected Map params; + protected Map params; - public AbstractClusteringFunction(final Map params) { + public AbstractClusteringFunction(final Map params) { this.params = params; } @@ -27,7 +27,7 @@ public abstract class AbstractClusteringFunction extends AbstractPaceFunctions i return fields .stream() .filter(f -> !f.isEmpty()) - .map(this::normalize) + .map(s -> normalize(s)) .map(s -> filterAllStopWords(s)) .map(s -> doApply(conf, s)) .map(c -> filterBlacklisted(c, ngramBlacklist)) @@ -36,11 +36,24 @@ public abstract class AbstractClusteringFunction extends AbstractPaceFunctions i .collect(Collectors.toCollection(HashSet::new)); } - public Map getParams() { + public Map getParams() { return params; } protected Integer param(String name) { - return params.get(name); + Object val = params.get(name); + if (val == null) + return null; + if (val instanceof Number) { + return ((Number) val).intValue(); + } + return Integer.parseInt(val.toString()); + } + + protected int paramOrDefault(String name, int i) { + Integer res = param(name); + if (res == null) + res = i; + return res; } } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/Acronyms.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/Acronyms.java index 9072fbb4b..b5db27106 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/Acronyms.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/Acronyms.java @@ -13,7 +13,7 @@ import eu.dnetlib.pace.config.Config; @ClusteringClass("acronyms") public class Acronyms extends AbstractClusteringFunction { - public Acronyms(Map params) { + public Acronyms(Map params) { super(params); } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringFunction.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringFunction.java index 8b7852418..269de867d 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringFunction.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/ClusteringFunction.java @@ -11,6 +11,6 @@ public interface ClusteringFunction { public Collection apply(Config config, List fields); - public Map getParams(); + public Map getParams(); } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/ImmutableFieldValue.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/ImmutableFieldValue.java index bc8844aee..cbfcde266 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/ImmutableFieldValue.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/ImmutableFieldValue.java @@ -12,7 +12,7 @@ import eu.dnetlib.pace.config.Config; @ClusteringClass("immutablefieldvalue") public class ImmutableFieldValue extends AbstractClusteringFunction { - public ImmutableFieldValue(final Map params) { + public ImmutableFieldValue(final Map params) { super(params); } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/JSONListClustering.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/JSONListClustering.java new file mode 100644 index 000000000..e00092bd0 --- /dev/null +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/JSONListClustering.java @@ -0,0 +1,69 @@ + +package eu.dnetlib.pace.clustering; + +import java.util.Collection; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import org.apache.commons.lang3.StringUtils; + +import com.jayway.jsonpath.Configuration; +import com.jayway.jsonpath.DocumentContext; +import com.jayway.jsonpath.JsonPath; +import com.jayway.jsonpath.Option; + +import eu.dnetlib.pace.common.AbstractPaceFunctions; +import eu.dnetlib.pace.config.Config; +import eu.dnetlib.pace.util.MapDocumentUtil; + +@ClusteringClass("jsonlistclustering") +public class JSONListClustering extends AbstractPaceFunctions implements ClusteringFunction { + + private Map params; + + public JSONListClustering(Map params) { + this.params = params; + } + + @Override + public Map getParams() { + return params; + } + + @Override + public Collection apply(Config conf, List fields) { + return fields + .stream() + .filter(f -> !f.isEmpty()) + .map(s -> doApply(conf, s)) + .filter(StringUtils::isNotBlank) + .collect(Collectors.toCollection(HashSet::new)); + } + + private String doApply(Config conf, String json) { + StringBuilder st = new StringBuilder(); // to build the string used for comparisons basing on the jpath into + // parameters + final DocumentContext documentContext = JsonPath + .using(Configuration.defaultConfiguration().addOptions(Option.SUPPRESS_EXCEPTIONS)) + .parse(json); + + // for each path in the param list + for (String key : params.keySet().stream().filter(k -> k.contains("jpath")).collect(Collectors.toList())) { + String path = params.get(key).toString(); + String value = MapDocumentUtil.getJPathString(path, documentContext); + if (value == null || value.isEmpty()) + value = ""; + st.append(value); + st.append(" "); + } + + st.setLength(st.length() - 1); + + if (StringUtils.isBlank(st)) { + return "1"; + } + return st.toString(); + } +} diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/KeywordsClustering.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/KeywordsClustering.java index 38299adb4..fdd8d1fb1 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/KeywordsClustering.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/KeywordsClustering.java @@ -11,7 +11,7 @@ import eu.dnetlib.pace.config.Config; @ClusteringClass("keywordsclustering") public class KeywordsClustering extends AbstractClusteringFunction { - public KeywordsClustering(Map params) { + public KeywordsClustering(Map params) { super(params); } @@ -19,8 +19,8 @@ public class KeywordsClustering extends AbstractClusteringFunction { protected Collection doApply(final Config conf, String s) { // takes city codes and keywords codes without duplicates - Set keywords = getKeywords(s, conf.translationMap(), params.getOrDefault("windowSize", 4)); - Set cities = getCities(s, params.getOrDefault("windowSize", 4)); + Set keywords = getKeywords(s, conf.translationMap(), paramOrDefault("windowSize", 4)); + Set cities = getCities(s, paramOrDefault("windowSize", 4)); // list of combination to return as result final Collection combinations = new LinkedHashSet(); @@ -28,7 +28,7 @@ public class KeywordsClustering extends AbstractClusteringFunction { for (String keyword : keywordsToCodes(keywords, conf.translationMap())) { for (String city : citiesToCodes(cities)) { combinations.add(keyword + "-" + city); - if (combinations.size() >= params.getOrDefault("max", 2)) { + if (combinations.size() >= paramOrDefault("max", 2)) { return combinations; } } @@ -42,8 +42,8 @@ public class KeywordsClustering extends AbstractClusteringFunction { return fields .stream() .filter(f -> !f.isEmpty()) - .map(this::cleanup) - .map(this::normalize) + .map(KeywordsClustering::cleanup) + .map(KeywordsClustering::normalize) .map(s -> filterAllStopWords(s)) .map(s -> doApply(conf, s)) .map(c -> filterBlacklisted(c, ngramBlacklist)) diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/LastNameFirstInitial.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/LastNameFirstInitial.java index 5a385961a..9692f5762 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/LastNameFirstInitial.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/LastNameFirstInitial.java @@ -16,7 +16,7 @@ public class LastNameFirstInitial extends AbstractClusteringFunction { private boolean DEFAULT_AGGRESSIVE = true; - public LastNameFirstInitial(final Map params) { + public LastNameFirstInitial(final Map params) { super(params); } @@ -25,7 +25,7 @@ public class LastNameFirstInitial extends AbstractClusteringFunction { return fields .stream() .filter(f -> !f.isEmpty()) - .map(this::normalize) + .map(LastNameFirstInitial::normalize) .map(s -> doApply(conf, s)) .map(c -> filterBlacklisted(c, ngramBlacklist)) .flatMap(c -> c.stream()) @@ -33,8 +33,7 @@ public class LastNameFirstInitial extends AbstractClusteringFunction { .collect(Collectors.toCollection(HashSet::new)); } - @Override - protected String normalize(final String s) { + public static String normalize(final String s) { return fixAliases(transliterate(nfd(unicodeNormalization(s)))) // do not compact the regexes in a single expression, would cause StackOverflowError in case of large input // strings diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/LowercaseClustering.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/LowercaseClustering.java index a3a6c4881..807f41dd5 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/LowercaseClustering.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/LowercaseClustering.java @@ -15,7 +15,7 @@ import eu.dnetlib.pace.config.Config; @ClusteringClass("lowercase") public class LowercaseClustering extends AbstractClusteringFunction { - public LowercaseClustering(final Map params) { + public LowercaseClustering(final Map params) { super(params); } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/NgramPairs.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/NgramPairs.java index aa06aa408..bcc9667a8 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/NgramPairs.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/NgramPairs.java @@ -12,11 +12,11 @@ import eu.dnetlib.pace.config.Config; @ClusteringClass("ngrampairs") public class NgramPairs extends Ngrams { - public NgramPairs(Map params) { + public NgramPairs(Map params) { super(params, false); } - public NgramPairs(Map params, boolean sorted) { + public NgramPairs(Map params, boolean sorted) { super(params, sorted); } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/Ngrams.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/Ngrams.java index 96c305a16..7b862c729 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/Ngrams.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/Ngrams.java @@ -10,11 +10,11 @@ public class Ngrams extends AbstractClusteringFunction { private final boolean sorted; - public Ngrams(Map params) { + public Ngrams(Map params) { this(params, false); } - public Ngrams(Map params, boolean sorted) { + public Ngrams(Map params, boolean sorted) { super(params); this.sorted = sorted; } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/NumAuthorsTitleSuffixPrefixChain.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/NumAuthorsTitleSuffixPrefixChain.java new file mode 100644 index 000000000..f1d1e17b9 --- /dev/null +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/NumAuthorsTitleSuffixPrefixChain.java @@ -0,0 +1,113 @@ + +package eu.dnetlib.pace.clustering; + +import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.StreamSupport; + +import com.google.common.base.Splitter; +import com.google.common.collect.Sets; + +import eu.dnetlib.pace.config.Config; + +@ClusteringClass("numAuthorsTitleSuffixPrefixChain") +public class NumAuthorsTitleSuffixPrefixChain extends AbstractClusteringFunction { + + public NumAuthorsTitleSuffixPrefixChain(Map params) { + super(params); + } + + @Override + public Collection apply(Config conf, List fields) { + + try { + int num_authors = Math.min(Integer.parseInt(fields.get(0)), 21); // SIZE threshold is 20, +1 + + if (num_authors > 0) { + return super.apply(conf, fields.subList(1, fields.size())) + .stream() + .map(s -> num_authors + "-" + s) + .collect(Collectors.toList()); + } + } catch (NumberFormatException e) { + // missing or null authors array + } + + return Collections.emptyList(); + } + + @Override + protected Collection doApply(Config conf, String s) { + return suffixPrefixChain(cleanup(s), param("mod")); + } + + private Collection suffixPrefixChain(String s, int mod) { + // create the list of words from the string (remove short words) + List wordsList = Arrays + .stream(s.split(" ")) + .filter(si -> si.length() > 3) + .collect(Collectors.toList()); + + final int words = wordsList.size(); + final int letters = s.length(); + + // create the prefix: number of words + number of letters/mod + String prefix = words / mod + "-"; + + return doSuffixPrefixChain(wordsList, prefix); + + } + + private Collection doSuffixPrefixChain(List wordsList, String prefix) { + + Set set = Sets.newLinkedHashSet(); + switch (wordsList.size()) { + case 0: + break; + case 1: + set.add(wordsList.get(0)); + break; + case 2: + set + .add( + prefix + + suffix(wordsList.get(0), 3) + + prefix(wordsList.get(1), 3)); + + set + .add( + prefix + + prefix(wordsList.get(0), 3) + + suffix(wordsList.get(1), 3)); + + break; + default: + set + .add( + prefix + + suffix(wordsList.get(0), 3) + + prefix(wordsList.get(1), 3) + + suffix(wordsList.get(2), 3)); + + set + .add( + prefix + + prefix(wordsList.get(0), 3) + + suffix(wordsList.get(1), 3) + + prefix(wordsList.get(2), 3)); + break; + } + + return set; + + } + + private String suffix(String s, int len) { + return s.substring(s.length() - len); + } + + private String prefix(String s, int len) { + return s.substring(0, len); + } + +} diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonClustering.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonClustering.java index b4a04ce65..91b51bebb 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonClustering.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonClustering.java @@ -17,11 +17,11 @@ import eu.dnetlib.pace.model.Person; @ClusteringClass("personClustering") public class PersonClustering extends AbstractPaceFunctions implements ClusteringFunction { - private Map params; + private Map params; private static final int MAX_TOKENS = 5; - public PersonClustering(final Map params) { + public PersonClustering(final Map params) { this.params = params; } @@ -77,7 +77,7 @@ public class PersonClustering extends AbstractPaceFunctions implements Clusterin // } @Override - public Map getParams() { + public Map getParams() { return params; } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonHash.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonHash.java index a3d58a9be..09a112c37 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonHash.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/PersonHash.java @@ -15,7 +15,7 @@ public class PersonHash extends AbstractClusteringFunction { private boolean DEFAULT_AGGRESSIVE = false; - public PersonHash(final Map params) { + public PersonHash(final Map params) { super(params); } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/RandomClusteringFunction.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/RandomClusteringFunction.java index 2aab926da..3733dfc74 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/RandomClusteringFunction.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/RandomClusteringFunction.java @@ -8,7 +8,7 @@ import eu.dnetlib.pace.config.Config; public class RandomClusteringFunction extends AbstractClusteringFunction { - public RandomClusteringFunction(Map params) { + public RandomClusteringFunction(Map params) { super(params); } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/SortedNgramPairs.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/SortedNgramPairs.java index b085ae26d..ca1b4189b 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/SortedNgramPairs.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/SortedNgramPairs.java @@ -1,7 +1,10 @@ package eu.dnetlib.pace.clustering; -import java.util.*; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Map; import com.google.common.base.Joiner; import com.google.common.base.Splitter; @@ -12,7 +15,7 @@ import eu.dnetlib.pace.config.Config; @ClusteringClass("sortedngrampairs") public class SortedNgramPairs extends NgramPairs { - public SortedNgramPairs(Map params) { + public SortedNgramPairs(Map params) { super(params, false); } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/SpaceTrimmingFieldValue.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/SpaceTrimmingFieldValue.java index 392aecc79..048380f7e 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/SpaceTrimmingFieldValue.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/SpaceTrimmingFieldValue.java @@ -15,7 +15,7 @@ import eu.dnetlib.pace.config.Config; @ClusteringClass("spacetrimmingfieldvalue") public class SpaceTrimmingFieldValue extends AbstractClusteringFunction { - public SpaceTrimmingFieldValue(final Map params) { + public SpaceTrimmingFieldValue(final Map params) { super(params); } @@ -25,7 +25,7 @@ public class SpaceTrimmingFieldValue extends AbstractClusteringFunction { res .add( - StringUtils.isBlank(s) ? RandomStringUtils.random(getParams().get("randomLength")) + StringUtils.isBlank(s) ? RandomStringUtils.random(param("randomLength")) : s.toLowerCase().replaceAll("\\s+", "")); return res; diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/SuffixPrefix.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/SuffixPrefix.java index 2a1c023a9..b6921e9f1 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/SuffixPrefix.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/SuffixPrefix.java @@ -12,7 +12,7 @@ import eu.dnetlib.pace.config.Config; @ClusteringClass("suffixprefix") public class SuffixPrefix extends AbstractClusteringFunction { - public SuffixPrefix(Map params) { + public SuffixPrefix(Map params) { super(params); } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/UrlClustering.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/UrlClustering.java index 5b267ad10..34f41085b 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/UrlClustering.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/UrlClustering.java @@ -15,12 +15,17 @@ import eu.dnetlib.pace.config.Config; @ClusteringClass("urlclustering") public class UrlClustering extends AbstractPaceFunctions implements ClusteringFunction { - protected Map params; + protected Map params; - public UrlClustering(final Map params) { + public UrlClustering(final Map params) { this.params = params; } + @Override + public Map getParams() { + return params; + } + @Override public Collection apply(final Config conf, List fields) { try { @@ -35,11 +40,6 @@ public class UrlClustering extends AbstractPaceFunctions implements ClusteringFu } } - @Override - public Map getParams() { - return null; - } - private URL asUrl(String value) { try { return new URL(value); diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/WordsStatsSuffixPrefixChain.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/WordsStatsSuffixPrefixChain.java index c8e02f8f0..22351cf8f 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/WordsStatsSuffixPrefixChain.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/WordsStatsSuffixPrefixChain.java @@ -11,7 +11,7 @@ import eu.dnetlib.pace.config.Config; @ClusteringClass("wordsStatsSuffixPrefixChain") public class WordsStatsSuffixPrefixChain extends AbstractClusteringFunction { - public WordsStatsSuffixPrefixChain(Map params) { + public WordsStatsSuffixPrefixChain(Map params) { super(params); } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/WordsSuffixPrefix.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/WordsSuffixPrefix.java index e606590a5..f9fef376b 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/WordsSuffixPrefix.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/clustering/WordsSuffixPrefix.java @@ -12,7 +12,7 @@ import eu.dnetlib.pace.config.Config; @ClusteringClass("wordssuffixprefix") public class WordsSuffixPrefix extends AbstractClusteringFunction { - public WordsSuffixPrefix(Map params) { + public WordsSuffixPrefix(Map params) { super(params); } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java index b440686de..ba7639ada 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/common/AbstractPaceFunctions.java @@ -16,7 +16,6 @@ import org.apache.commons.lang3.StringUtils; import com.google.common.base.Joiner; import com.google.common.base.Splitter; import com.google.common.collect.Iterables; -import com.google.common.collect.Lists; import com.google.common.collect.Sets; import com.ibm.icu.text.Transliterator; @@ -27,7 +26,7 @@ import eu.dnetlib.pace.clustering.NGramUtils; * * @author claudio */ -public abstract class AbstractPaceFunctions { +public class AbstractPaceFunctions { // city map to be used when translating the city names into codes private static Map cityMap = AbstractPaceFunctions @@ -62,11 +61,14 @@ public abstract class AbstractPaceFunctions { private static Pattern hexUnicodePattern = Pattern.compile("\\\\u(\\p{XDigit}{4})"); - protected String concat(final List l) { + private static Pattern romanNumberPattern = Pattern + .compile("^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$"); + + protected static String concat(final List l) { return Joiner.on(" ").skipNulls().join(l); } - protected String cleanup(final String s) { + public static String cleanup(final String s) { final String s1 = HTML_REGEX.matcher(s).replaceAll(""); final String s2 = unicodeNormalization(s1.toLowerCase()); final String s3 = nfd(s2); @@ -82,7 +84,7 @@ public abstract class AbstractPaceFunctions { return s12; } - protected String fixXML(final String a) { + protected static String fixXML(final String a) { return a .replaceAll("–", " ") @@ -91,7 +93,7 @@ public abstract class AbstractPaceFunctions { .replaceAll("−", " "); } - protected boolean checkNumbers(final String a, final String b) { + protected static boolean checkNumbers(final String a, final String b) { final String numbersA = getNumbers(a); final String numbersB = getNumbers(b); final String romansA = getRomans(a); @@ -99,7 +101,7 @@ public abstract class AbstractPaceFunctions { return !numbersA.equals(numbersB) || !romansA.equals(romansB); } - protected String getRomans(final String s) { + protected static String getRomans(final String s) { final StringBuilder sb = new StringBuilder(); for (final String t : s.split(" ")) { sb.append(isRoman(t) ? t : ""); @@ -107,13 +109,12 @@ public abstract class AbstractPaceFunctions { return sb.toString(); } - protected boolean isRoman(final String s) { - return s - .replaceAll("^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$", "qwertyuiop") - .equals("qwertyuiop"); + protected static boolean isRoman(final String s) { + Matcher m = romanNumberPattern.matcher(s); + return m.matches() && m.hitEnd(); } - protected String getNumbers(final String s) { + protected static String getNumbers(final String s) { final StringBuilder sb = new StringBuilder(); for (final String t : s.split(" ")) { sb.append(isNumber(t) ? t : ""); @@ -121,7 +122,7 @@ public abstract class AbstractPaceFunctions { return sb.toString(); } - public boolean isNumber(String strNum) { + public static boolean isNumber(String strNum) { if (strNum == null) { return false; } @@ -147,7 +148,7 @@ public abstract class AbstractPaceFunctions { } } - protected String removeSymbols(final String s) { + protected static String removeSymbols(final String s) { final StringBuilder sb = new StringBuilder(); s.chars().forEach(ch -> { @@ -157,11 +158,11 @@ public abstract class AbstractPaceFunctions { return sb.toString().replaceAll("\\s+", " "); } - protected boolean notNull(final String s) { + protected static boolean notNull(final String s) { return s != null; } - protected String normalize(final String s) { + public static String normalize(final String s) { return fixAliases(transliterate(nfd(unicodeNormalization(s)))) .toLowerCase() // do not compact the regexes in a single expression, would cause StackOverflowError in case of large input @@ -174,16 +175,16 @@ public abstract class AbstractPaceFunctions { .trim(); } - public String nfd(final String s) { + public static String nfd(final String s) { return Normalizer.normalize(s, Normalizer.Form.NFD); } - public String utf8(final String s) { + public static String utf8(final String s) { byte[] bytes = s.getBytes(StandardCharsets.UTF_8); return new String(bytes, StandardCharsets.UTF_8); } - public String unicodeNormalization(final String s) { + public static String unicodeNormalization(final String s) { Matcher m = hexUnicodePattern.matcher(s); StringBuffer buf = new StringBuffer(s.length()); @@ -195,7 +196,7 @@ public abstract class AbstractPaceFunctions { return buf.toString(); } - protected String filterStopWords(final String s, final Set stopwords) { + protected static String filterStopWords(final String s, final Set stopwords) { final StringTokenizer st = new StringTokenizer(s); final StringBuilder sb = new StringBuilder(); while (st.hasMoreTokens()) { @@ -208,7 +209,7 @@ public abstract class AbstractPaceFunctions { return sb.toString().trim(); } - public String filterAllStopWords(String s) { + public static String filterAllStopWords(String s) { s = filterStopWords(s, stopwords_en); s = filterStopWords(s, stopwords_de); @@ -221,7 +222,8 @@ public abstract class AbstractPaceFunctions { return s; } - protected Collection filterBlacklisted(final Collection set, final Set ngramBlacklist) { + protected static Collection filterBlacklisted(final Collection set, + final Set ngramBlacklist) { final Set newset = Sets.newLinkedHashSet(); for (final String s : set) { if (!ngramBlacklist.contains(s)) { @@ -268,7 +270,7 @@ public abstract class AbstractPaceFunctions { return m; } - public String removeKeywords(String s, Set keywords) { + public static String removeKeywords(String s, Set keywords) { s = " " + s + " "; for (String k : keywords) { @@ -278,39 +280,39 @@ public abstract class AbstractPaceFunctions { return s.trim(); } - public double commonElementsPercentage(Set s1, Set s2) { + public static double commonElementsPercentage(Set s1, Set s2) { double longer = Math.max(s1.size(), s2.size()); return (double) s1.stream().filter(s2::contains).count() / longer; } // convert the set of keywords to codes - public Set toCodes(Set keywords, Map translationMap) { + public static Set toCodes(Set keywords, Map translationMap) { return keywords.stream().map(s -> translationMap.get(s)).collect(Collectors.toSet()); } - public Set keywordsToCodes(Set keywords, Map translationMap) { + public static Set keywordsToCodes(Set keywords, Map translationMap) { return toCodes(keywords, translationMap); } - public Set citiesToCodes(Set keywords) { + public static Set citiesToCodes(Set keywords) { return toCodes(keywords, cityMap); } - protected String firstLC(final String s) { + protected static String firstLC(final String s) { return StringUtils.substring(s, 0, 1).toLowerCase(); } - protected Iterable tokens(final String s, final int maxTokens) { + protected static Iterable tokens(final String s, final int maxTokens) { return Iterables.limit(Splitter.on(" ").omitEmptyStrings().trimResults().split(s), maxTokens); } - public String normalizePid(String pid) { + public static String normalizePid(String pid) { return DOI_PREFIX.matcher(pid.toLowerCase()).replaceAll(""); } // get the list of keywords into the input string - public Set getKeywords(String s1, Map translationMap, int windowSize) { + public static Set getKeywords(String s1, Map translationMap, int windowSize) { String s = s1; @@ -340,7 +342,7 @@ public abstract class AbstractPaceFunctions { return codes; } - public Set getCities(String s1, int windowSize) { + public static Set getCities(String s1, int windowSize) { return getKeywords(s1, cityMap, windowSize); } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java index d9ad81d42..5ede2c380 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/ClusteringDef.java @@ -18,7 +18,7 @@ public class ClusteringDef implements Serializable { private List fields; - private Map params; + private Map params; public ClusteringDef() { } @@ -43,11 +43,11 @@ public class ClusteringDef implements Serializable { this.fields = fields; } - public Map getParams() { + public Map getParams() { return params; } - public void setParams(final Map params) { + public void setParams(final Map params) { this.params = params; } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java index f34545e6d..7ad9b7445 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/FieldDef.java @@ -2,6 +2,7 @@ package eu.dnetlib.pace.model; import java.io.Serializable; +import java.util.HashSet; import java.util.List; import com.fasterxml.jackson.core.JsonProcessingException; @@ -36,6 +37,16 @@ public class FieldDef implements Serializable { */ private int length = -1; + private HashSet filter; + + private boolean sorted; + + public boolean isSorted() { + return sorted; + } + + private String clean; + public FieldDef() { } @@ -91,6 +102,30 @@ public class FieldDef implements Serializable { this.path = path; } + public HashSet getFilter() { + return filter; + } + + public void setFilter(HashSet filter) { + this.filter = filter; + } + + public boolean getSorted() { + return sorted; + } + + public void setSorted(boolean sorted) { + this.sorted = sorted; + } + + public String getClean() { + return clean; + } + + public void setClean(String clean) { + this.clean = clean; + } + @Override public String toString() { try { diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/SparkDeduper.scala b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/SparkDeduper.scala index b3f56bcdb..bc702b9e2 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/SparkDeduper.scala +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/SparkDeduper.scala @@ -5,9 +5,9 @@ import eu.dnetlib.pace.util.{BlockProcessor, SparkReporter} import org.apache.spark.SparkContext import org.apache.spark.sql.catalyst.expressions.Literal import org.apache.spark.sql.expressions._ -import org.apache.spark.sql.functions.{col, lit, udf} +import org.apache.spark.sql.functions.{col, desc, expr, lit, udf} import org.apache.spark.sql.types._ -import org.apache.spark.sql.{Column, Dataset, Row, functions} +import org.apache.spark.sql.{Column, Dataset, Row, SaveMode, functions} import java.util.function.Predicate import java.util.stream.Collectors @@ -80,6 +80,8 @@ case class SparkDeduper(conf: DedupConfig) extends Serializable { .withColumn("key", functions.explode(clusterValuesUDF(cd).apply(functions.array(inputColumns: _*)))) // Add position column having the position of the row within the set of rows having the same key value ordered by the sorting value .withColumn("position", functions.row_number().over(Window.partitionBy("key").orderBy(col(model.orderingFieldName), col(model.identifierFieldName)))) + // .withColumn("count", functions.max("position").over(Window.partitionBy("key").orderBy(col(model.orderingFieldName), col(model.identifierFieldName)).rowsBetween(Window.unboundedPreceding,Window.unboundedFollowing) )) + // .filter("count > 1") if (df_with_clustering_keys == null) df_with_clustering_keys = ds @@ -88,20 +90,44 @@ case class SparkDeduper(conf: DedupConfig) extends Serializable { } //TODO: analytics + /*df_with_clustering_keys.groupBy(col("clustering"), col("key")) + .agg(expr("max(count) AS size")) + .orderBy(desc("size")) + .show*/ val df_with_blocks = df_with_clustering_keys - // filter out rows with position exceeding the maxqueuesize parameter - .filter(col("position").leq(conf.getWf.getQueueMaxSize)) - .groupBy("clustering", "key") + // split the clustering block into smaller blocks of queuemaxsize + .groupBy(col("clustering"), col("key"), functions.floor(col("position").divide(lit(conf.getWf.getQueueMaxSize)))) .agg(functions.collect_set(functions.struct(model.schema.fieldNames.map(col): _*)).as("block")) .filter(functions.size(new Column("block")).gt(1)) + .union( + //adjacency blocks + df_with_clustering_keys + // filter out leading and trailing elements + .filter(col("position").gt(conf.getWf.getSlidingWindowSize/2)) + //.filter(col("position").lt(col("count").minus(conf.getWf.getSlidingWindowSize/2))) + // create small blocks of records on "the border" of maxqueuesize: getSlidingWindowSize/2 elements before and after + .filter( + col("position").mod(conf.getWf.getQueueMaxSize).lt(conf.getWf.getSlidingWindowSize/2) // slice of the start of block + || col("position").mod(conf.getWf.getQueueMaxSize).gt(conf.getWf.getQueueMaxSize - (conf.getWf.getSlidingWindowSize/2)) //slice of the end of the block + ) + .groupBy(col("clustering"), col("key"), functions.floor((col("position") + lit(conf.getWf.getSlidingWindowSize/2)).divide(lit(conf.getWf.getQueueMaxSize)))) + .agg(functions.collect_set(functions.struct(model.schema.fieldNames.map(col): _*)).as("block")) + .filter(functions.size(new Column("block")).gt(1)) + ) df_with_blocks } def clusterValuesUDF(cd: ClusteringDef) = { udf[mutable.WrappedArray[String], mutable.WrappedArray[Any]](values => { - values.flatMap(f => cd.clusteringFunction().apply(conf, Seq(f.toString).asJava).asScala) + val valueList = values.flatMap { + case a: mutable.WrappedArray[Any] => a.map(_.toString) + case s: Any => Seq(s.toString) + }.asJava; + + mutable.WrappedArray.make(cd.clusteringFunction().apply(conf, valueList).toArray()) + }) } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/SparkModel.scala b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/SparkModel.scala index aa997c6e9..aa04188da 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/SparkModel.scala +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/model/SparkModel.scala @@ -1,13 +1,16 @@ package eu.dnetlib.pace.model import com.jayway.jsonpath.{Configuration, JsonPath} +import eu.dnetlib.pace.common.AbstractPaceFunctions import eu.dnetlib.pace.config.{DedupConfig, Type} import eu.dnetlib.pace.util.MapDocumentUtil +import org.apache.commons.lang3.StringUtils import org.apache.spark.sql.catalyst.encoders.RowEncoder import org.apache.spark.sql.catalyst.expressions.GenericRowWithSchema import org.apache.spark.sql.types.{DataTypes, Metadata, StructField, StructType} import org.apache.spark.sql.{Dataset, Row} +import java.util.Locale import java.util.regex.Pattern import scala.collection.JavaConverters._ @@ -60,7 +63,7 @@ case class SparkModel(conf: DedupConfig) { values(identityFieldPosition) = MapDocumentUtil.getJPathString(conf.getWf.getIdPath, documentContext) schema.fieldNames.zipWithIndex.foldLeft(values) { - case ((res, (fname, index))) => { + case ((res, (fname, index))) => val fdef = conf.getPace.getModelMap.get(fname) if (fdef != null) { @@ -96,13 +99,52 @@ case class SparkModel(conf: DedupConfig) { case Type.DoubleArray => MapDocumentUtil.getJPathArray(fdef.getPath, json) } + + val filter = fdef.getFilter + + if (StringUtils.isNotBlank(fdef.getClean)) { + res(index) = res(index) match { + case x: Seq[String] => x.map(clean(_, fdef.getClean)).toSeq + case _ => clean(res(index).toString, fdef.getClean) + } + } + + if (filter != null && !filter.isEmpty) { + res(index) = res(index) match { + case x: String if filter.contains(x.toLowerCase(Locale.ROOT)) => null + case x: Seq[String] => x.filter(s => !filter.contains(s.toLowerCase(Locale.ROOT))).toSeq + case _ => res(index) + } + } + + if (fdef.getSorted) { + res(index) = res(index) match { + case x: Seq[String] => x.sorted.toSeq + case _ => res(index) + } + } } res - } } new GenericRowWithSchema(values, schema) } + + def clean(value: String, cleantype: String) : String = { + val res = cleantype match { + case "title" => AbstractPaceFunctions.cleanup(value) + case _ => value + } + +// if (!res.equals(AbstractPaceFunctions.normalize(value))) { +// println(res) +// println(AbstractPaceFunctions.normalize(value)) +// println() +// } + + res + } + } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/AuthorsMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/AuthorsMatch.java index 5c6939e60..edad0ae2e 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/AuthorsMatch.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/AuthorsMatch.java @@ -23,7 +23,6 @@ public class AuthorsMatch extends AbstractListComparator { private String MODE; // full or surname private int SIZE_THRESHOLD; private String TYPE; // count or percentage - private int common; public AuthorsMatch(Map params) { super(params, new com.wcohen.ss.JaroWinkler()); @@ -35,7 +34,6 @@ public class AuthorsMatch extends AbstractListComparator { FULLNAME_THRESHOLD = Double.parseDouble(params.getOrDefault("fullname_th", "0.9")); SIZE_THRESHOLD = Integer.parseInt(params.getOrDefault("size_th", "20")); TYPE = params.getOrDefault("type", "percentage"); - common = 0; } protected AuthorsMatch(double w, AbstractStringDistance ssalgo) { @@ -44,22 +42,27 @@ public class AuthorsMatch extends AbstractListComparator { @Override public double compare(final List a, final List b, final Config conf) { - if (a.isEmpty() || b.isEmpty()) return -1; if (a.size() > SIZE_THRESHOLD || b.size() > SIZE_THRESHOLD) return 1.0; - List aList = a.stream().map(author -> new Person(author, false)).collect(Collectors.toList()); + int maxMiss = Integer.MAX_VALUE; List bList = b.stream().map(author -> new Person(author, false)).collect(Collectors.toList()); - common = 0; + Double threshold = getDoubleParam("threshold"); + + if (threshold != null && threshold >= 0.0 && threshold <= 1.0 && a.size() == b.size()) { + maxMiss = (int) Math.floor((1 - threshold) * Math.max(a.size(), b.size())); + } + + int common = 0; // compare each element of List1 with each element of List2 - for (Person p1 : aList) + for (int i = 0; i < a.size(); i++) { + Person p1 = new Person(a.get(i), false); for (Person p2 : bList) { - // both persons are inaccurate if (!p1.isAccurate() && !p2.isAccurate()) { // compare just normalized fullnames @@ -118,11 +121,15 @@ public class AuthorsMatch extends AbstractListComparator { } } - } + if (i - common > maxMiss) { + return 0.0; + } + } + // normalization factor to compute the score - int normFactor = aList.size() == bList.size() ? aList.size() : (aList.size() + bList.size() - common); + int normFactor = a.size() == b.size() ? a.size() : (a.size() + b.size() - common); if (TYPE.equals("percentage")) { return (double) common / normFactor; diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/InstanceTypeMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/InstanceTypeMatch.java index 238cb16ce..34ebcf7a7 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/InstanceTypeMatch.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/InstanceTypeMatch.java @@ -25,6 +25,7 @@ public class InstanceTypeMatch extends AbstractListComparator { translationMap.put("Conference object", "*"); translationMap.put("Other literature type", "*"); translationMap.put("Unknown", "*"); + translationMap.put("UNKNOWN", "*"); // article types translationMap.put("Article", "Article"); @@ -76,5 +77,4 @@ public class InstanceTypeMatch extends AbstractListComparator { protected double normalize(final double d) { return d; } - } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitle.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitle.java index 877cb95ab..e2ee062b5 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitle.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/LevensteinTitle.java @@ -3,6 +3,7 @@ package eu.dnetlib.pace.tree; import java.util.Map; +import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -30,16 +31,25 @@ public class LevensteinTitle extends AbstractStringComparator { } @Override - public double distance(final String a, final String b, final Config conf) { - final String ca = cleanup(a); - final String cb = cleanup(b); - + public double distance(final String ca, final String cb, final Config conf) { final boolean check = checkNumbers(ca, cb); if (check) return 0.5; - return normalize(ssalgo.score(ca, cb), ca.length(), cb.length()); + Double threshold = getDoubleParam("threshold"); + + // reduce Levenshtein algo complexity when target threshold is known + if (threshold != null && threshold >= 0.0 && threshold <= 1.0) { + int maxdistance = (int) Math.floor((1 - threshold) * Math.max(ca.length(), cb.length())); + int score = StringUtils.getLevenshteinDistance(ca, cb, maxdistance); + if (score == -1) { + return 0; + } + return normalize(score, ca.length(), cb.length()); + } else { + return normalize(StringUtils.getLevenshteinDistance(ca, cb), ca.length(), cb.length()); + } } private double normalize(final double score, final int la, final int lb) { diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/MaxLengthMatch.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/MaxLengthMatch.java new file mode 100644 index 000000000..8f525c6d5 --- /dev/null +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/MaxLengthMatch.java @@ -0,0 +1,29 @@ + +package eu.dnetlib.pace.tree; + +import java.util.Map; + +import eu.dnetlib.pace.config.Config; +import eu.dnetlib.pace.tree.support.AbstractStringComparator; +import eu.dnetlib.pace.tree.support.ComparatorClass; + +@ComparatorClass("maxLengthMatch") +public class MaxLengthMatch extends AbstractStringComparator { + + private final int limit; + + public MaxLengthMatch(Map params) { + super(params); + + limit = Integer.parseInt(params.getOrDefault("limit", "200")); + } + + @Override + public double compare(String a, String b, final Config conf) { + return a.length() < limit && b.length() < limit ? 1.0 : -1.0; + } + + protected String toString(final Object object) { + return toFirstString(object); + } +} diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractComparator.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractComparator.java index 8a957c5e3..cde73fd2b 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractComparator.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/support/AbstractComparator.java @@ -127,4 +127,14 @@ public abstract class AbstractComparator extends AbstractPaceFunctions implem return this.weight; } + public Double getDoubleParam(String name) { + String svalue = params.get(name); + + try { + return Double.parseDouble(svalue); + } catch (Throwable t) { + } + + return null; + } } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java index c2b0ddda7..177ad73df 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/BlockProcessor.java @@ -67,8 +67,10 @@ public class BlockProcessor { private void processRows(final List queue, final Reporter context) { - for (int pivotPos = 0; pivotPos < queue.size(); pivotPos++) { - final Row pivot = queue.get(pivotPos); + IncrementalConnectedComponents icc = new IncrementalConnectedComponents(queue.size()); + + for (int i = 0; i < queue.size(); i++) { + final Row pivot = queue.get(i); final String idPivot = pivot.getString(identifierFieldPos); // identifier final Object fieldsPivot = getJavaValue(pivot, orderFieldPos); @@ -76,9 +78,9 @@ public class BlockProcessor { final WfConfig wf = dedupConf.getWf(); if (fieldPivot != null) { - int i = 0; - for (int windowPos = pivotPos + 1; windowPos < queue.size(); windowPos++) { - final Row curr = queue.get(windowPos); + for (int j = icc.nextUnconnected(i, i + 1); j >= 0 + && j < queue.size(); j = icc.nextUnconnected(i, j + 1)) { + final Row curr = queue.get(j); final String idCurr = curr.getString(identifierFieldPos); // identifier if (mustSkip(idCurr)) { @@ -86,7 +88,7 @@ public class BlockProcessor { break; } - if (++i > wf.getSlidingWindowSize()) { + if (wf.getSlidingWindowSize() > 0 && (j - i) > wf.getSlidingWindowSize()) { break; } @@ -97,7 +99,9 @@ public class BlockProcessor { final TreeProcessor treeProcessor = new TreeProcessor(dedupConf); - emitOutput(treeProcessor.compare(pivot, curr), idPivot, idCurr, context); + if (emitOutput(treeProcessor.compare(pivot, curr), idPivot, idCurr, context)) { + icc.connect(i, j); + } } } } @@ -115,7 +119,8 @@ public class BlockProcessor { return null; } - private void emitOutput(final boolean result, final String idPivot, final String idCurr, final Reporter context) { + private boolean emitOutput(final boolean result, final String idPivot, final String idCurr, + final Reporter context) { if (result) { if (idPivot.compareTo(idCurr) <= 0) { @@ -127,6 +132,8 @@ public class BlockProcessor { } else { context.incrementCounter(dedupConf.getWf().getEntityType(), "d < " + dedupConf.getWf().getThreshold(), 1); } + + return result; } private boolean mustSkip(final String idPivot) { @@ -142,5 +149,4 @@ public class BlockProcessor { context.emit(type, from, to); } - } diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/IncrementalConnectedComponents.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/IncrementalConnectedComponents.java new file mode 100644 index 000000000..ed35239a8 --- /dev/null +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/IncrementalConnectedComponents.java @@ -0,0 +1,50 @@ + +package eu.dnetlib.pace.util; + +import java.util.BitSet; + +public class IncrementalConnectedComponents { + final private int size; + + final private BitSet[] indexes; + + IncrementalConnectedComponents(int size) { + this.size = size; + this.indexes = new BitSet[size]; + } + + public void connect(int i, int j) { + if (indexes[i] == null) { + if (indexes[j] == null) { + indexes[i] = new BitSet(size); + } else { + indexes[i] = indexes[j]; + } + } else { + if (indexes[j] != null && indexes[i] != indexes[j]) { + // merge adjacency lists for i and j + indexes[i].or(indexes[j]); + } + } + + indexes[i].set(i); + indexes[i].set(j); + indexes[j] = indexes[i]; + } + + public int nextUnconnected(int i, int j) { + if (indexes[i] == null) { + return j; + } + int result = indexes[i].nextClearBit(j); + + return (result >= size) ? -1 : result; + } + + public BitSet getConnections(int i) { + if (indexes[i] == null) { + return null; + } + return indexes[i]; + } +} diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java index 28244cb3b..7dc340663 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/MapDocumentUtil.java @@ -97,6 +97,8 @@ public class MapDocumentUtil { Object o = json.read(jsonPath); if (o instanceof String) return (String) o; + if (o instanceof Number) + return (String) o.toString(); if (o instanceof JSONArray && ((JSONArray) o).size() > 0) return (String) ((JSONArray) o).get(0); return ""; diff --git a/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/PaceResolver.java b/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/PaceResolver.java index 252205c79..746892f0c 100644 --- a/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/PaceResolver.java +++ b/dhp-pace-core/src/main/java/eu/dnetlib/pace/util/PaceResolver.java @@ -40,7 +40,7 @@ public class PaceResolver implements Serializable { Collectors.toMap(cl -> cl.getAnnotation(ComparatorClass.class).value(), cl -> (Class) cl)); } - public ClusteringFunction getClusteringFunction(String name, Map params) throws PaceException { + public ClusteringFunction getClusteringFunction(String name, Map params) throws PaceException { try { return clusteringFunctions.get(name).getDeclaredConstructor(Map.class).newInstance(params); } catch (InstantiationException | IllegalAccessException | InvocationTargetException diff --git a/dhp-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java b/dhp-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java index f9a1ea9e2..80e349a3f 100644 --- a/dhp-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java +++ b/dhp-pace-core/src/test/java/eu/dnetlib/pace/clustering/ClusteringFunctionTest.java @@ -15,7 +15,7 @@ import eu.dnetlib.pace.config.DedupConfig; public class ClusteringFunctionTest extends AbstractPaceTest { - private static Map params; + private static Map params; private static DedupConfig conf; @BeforeAll @@ -40,10 +40,10 @@ public class ClusteringFunctionTest extends AbstractPaceTest { @Test public void testNgram() { - params.put("ngramLen", 3); - params.put("max", 8); - params.put("maxPerToken", 2); - params.put("minNgramLen", 1); + params.put("ngramLen", "3"); + params.put("max", "8"); + params.put("maxPerToken", "2"); + params.put("minNgramLen", "1"); final ClusteringFunction ngram = new Ngrams(params); @@ -54,8 +54,8 @@ public class ClusteringFunctionTest extends AbstractPaceTest { @Test public void testNgramPairs() { - params.put("ngramLen", 3); - params.put("max", 2); + params.put("ngramLen", "3"); + params.put("max", "2"); final ClusteringFunction np = new NgramPairs(params); @@ -66,8 +66,8 @@ public class ClusteringFunctionTest extends AbstractPaceTest { @Test public void testSortedNgramPairs() { - params.put("ngramLen", 3); - params.put("max", 2); + params.put("ngramLen", "3"); + params.put("max", "2"); final ClusteringFunction np = new SortedNgramPairs(params); @@ -87,9 +87,9 @@ public class ClusteringFunctionTest extends AbstractPaceTest { @Test public void testAcronym() { - params.put("max", 4); - params.put("minLen", 1); - params.put("maxLen", 3); + params.put("max", "4"); + params.put("minLen", "1"); + params.put("maxLen", "3"); final ClusteringFunction acro = new Acronyms(params); @@ -100,8 +100,8 @@ public class ClusteringFunctionTest extends AbstractPaceTest { @Test public void testSuffixPrefix() { - params.put("len", 3); - params.put("max", 4); + params.put("len", "3"); + params.put("max", "4"); final ClusteringFunction sp = new SuffixPrefix(params); @@ -109,8 +109,8 @@ public class ClusteringFunctionTest extends AbstractPaceTest { System.out.println(s); System.out.println(sp.apply(conf, Lists.newArrayList(s))); - params.put("len", 3); - params.put("max", 1); + params.put("len", "3"); + params.put("max", "1"); System.out.println(sp.apply(conf, Lists.newArrayList("Framework for general-purpose deduplication"))); } @@ -118,8 +118,8 @@ public class ClusteringFunctionTest extends AbstractPaceTest { @Test public void testWordsSuffixPrefix() { - params.put("len", 3); - params.put("max", 4); + params.put("len", "3"); + params.put("max", "4"); final ClusteringFunction sp = new WordsSuffixPrefix(params); @@ -130,7 +130,7 @@ public class ClusteringFunctionTest extends AbstractPaceTest { @Test public void testWordsStatsSuffixPrefix() { - params.put("mod", 10); + params.put("mod", "10"); final ClusteringFunction sp = new WordsStatsSuffixPrefixChain(params); @@ -167,7 +167,7 @@ public class ClusteringFunctionTest extends AbstractPaceTest { @Test public void testFieldValue() { - params.put("randomLength", 5); + params.put("randomLength", "5"); final ClusteringFunction sp = new SpaceTrimmingFieldValue(params); diff --git a/dhp-pace-core/src/test/java/eu/dnetlib/pace/util/IncrementalConnectedComponentsTest.java b/dhp-pace-core/src/test/java/eu/dnetlib/pace/util/IncrementalConnectedComponentsTest.java new file mode 100644 index 000000000..b0f105d7c --- /dev/null +++ b/dhp-pace-core/src/test/java/eu/dnetlib/pace/util/IncrementalConnectedComponentsTest.java @@ -0,0 +1,40 @@ + +package eu.dnetlib.pace.util; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; + +import org.junit.jupiter.api.Test; + +public class IncrementalConnectedComponentsTest { + + @Test + public void transitiveClosureTest() { + IncrementalConnectedComponents icc = new IncrementalConnectedComponents(10); + + icc.connect(0, 1); + icc.connect(0, 2); + icc.connect(0, 3); + + icc.connect(1, 2); + icc.connect(1, 4); + icc.connect(1, 5); + + icc.connect(6, 7); + icc.connect(6, 9); + + assertEquals(icc.getConnections(0).toString(), "{0, 1, 2, 3, 4, 5}"); + assertEquals(icc.getConnections(1).toString(), "{0, 1, 2, 3, 4, 5}"); + assertEquals(icc.getConnections(2).toString(), "{0, 1, 2, 3, 4, 5}"); + assertEquals(icc.getConnections(3).toString(), "{0, 1, 2, 3, 4, 5}"); + assertEquals(icc.getConnections(4).toString(), "{0, 1, 2, 3, 4, 5}"); + assertEquals(icc.getConnections(5).toString(), "{0, 1, 2, 3, 4, 5}"); + + assertEquals(icc.getConnections(6).toString(), "{6, 7, 9}"); + assertEquals(icc.getConnections(7).toString(), "{6, 7, 9}"); + assertEquals(icc.getConnections(9).toString(), "{6, 7, 9}"); + + assertNull(icc.getConnections(8)); + } + +} diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/AbstractSparkAction.java b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/AbstractSparkAction.java index 68af3d699..0af7bb6d0 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/AbstractSparkAction.java +++ b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/AbstractSparkAction.java @@ -101,6 +101,10 @@ abstract class AbstractSparkAction implements Serializable { return SparkSession.builder().config(conf).getOrCreate(); } + protected static SparkSession getSparkWithHiveSession(SparkConf conf) { + return SparkSession.builder().enableHiveSupport().config(conf).getOrCreate(); + } + protected static void save(Dataset dataset, String outPath, SaveMode mode) { dataset.write().option("compression", "gzip").mode(mode).json(outPath); } diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/DedupRecordFactory.java b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/DedupRecordFactory.java index 60669106a..d9fb24078 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/DedupRecordFactory.java +++ b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/DedupRecordFactory.java @@ -2,20 +2,19 @@ package eu.dnetlib.dhp.oa.dedup; import java.lang.reflect.InvocationTargetException; -import java.util.*; -import java.util.stream.Collectors; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; -import org.apache.commons.beanutils.BeanUtils; -import org.apache.commons.lang3.StringUtils; import org.apache.spark.api.java.function.MapFunction; -import org.apache.spark.api.java.function.MapGroupsFunction; +import org.apache.spark.api.java.function.ReduceFunction; import org.apache.spark.sql.Dataset; import org.apache.spark.sql.Encoders; +import org.apache.spark.sql.Row; import org.apache.spark.sql.SparkSession; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.common.collect.Lists; import eu.dnetlib.dhp.oa.dedup.model.Identifier; import eu.dnetlib.dhp.oa.merge.AuthorMerger; @@ -41,88 +40,91 @@ public class DedupRecordFactory { long ts = System.currentTimeMillis(); // - Dataset> entities = spark + Dataset entities = spark .read() - .textFile(entitiesInputPath) + .schema(Encoders.bean(clazz).schema()) + .json(entitiesInputPath) + .as(Encoders.bean(clazz)) .map( - (MapFunction>) it -> { - T entity = OBJECT_MAPPER.readValue(it, clazz); + (MapFunction>) entity -> { return new Tuple2<>(entity.getId(), entity); }, - Encoders.tuple(Encoders.STRING(), Encoders.kryo(clazz))); + Encoders.tuple(Encoders.STRING(), Encoders.kryo(clazz))) + .selectExpr("_1 AS id", "_2 AS kryoObject"); // : source is the dedup_id, target is the id of the mergedIn - Dataset> mergeRels = spark + Dataset mergeRels = spark .read() .load(mergeRelsInputPath) - .as(Encoders.bean(Relation.class)) .where("relClass == 'merges'") - .map( - (MapFunction>) r -> new Tuple2<>(r.getSource(), r.getTarget()), - Encoders.tuple(Encoders.STRING(), Encoders.STRING())); + .selectExpr("source as dedupId", "target as id"); return mergeRels - .joinWith(entities, mergeRels.col("_2").equalTo(entities.col("_1")), "inner") + .join(entities, "id") + .select("dedupId", "kryoObject") + .as(Encoders.tuple(Encoders.STRING(), Encoders.kryo(clazz))) + .groupByKey((MapFunction, String>) Tuple2::_1, Encoders.STRING()) + .reduceGroups( + (ReduceFunction>) (t1, t2) -> new Tuple2<>(t1._1(), + reduceEntity(t1._1(), t1._2(), t2._2(), clazz))) .map( - (MapFunction, Tuple2>, Tuple2>) value -> new Tuple2<>( - value._1()._1(), value._2()._2()), - Encoders.tuple(Encoders.STRING(), Encoders.kryo(clazz))) - .groupByKey( - (MapFunction, String>) Tuple2::_1, Encoders.STRING()) - .mapGroups( - (MapGroupsFunction, T>) (key, - values) -> entityMerger(key, values, ts, dataInfo, clazz), + (MapFunction>, T>) t -> { + T res = t._2()._2(); + res.setDataInfo(dataInfo); + res.setLastupdatetimestamp(ts); + return res; + }, Encoders.bean(clazz)); } + public static T reduceEntity( + String id, T entity, T duplicate, Class clazz) { + + int compare = new IdentifierComparator() + .compare(Identifier.newInstance(entity), Identifier.newInstance(duplicate)); + + if (compare > 0) { + T swap = duplicate; + duplicate = entity; + entity = swap; + } + + entity.mergeFrom(duplicate); + entity.setId(id); + + if (ModelSupport.isSubClass(duplicate, Result.class)) { + Result re = (Result) entity; + Result rd = (Result) duplicate; + + List> authors = new ArrayList<>(); + if (re.getAuthor() != null) { + authors.add(re.getAuthor()); + } + if (rd.getAuthor() != null) { + authors.add(rd.getAuthor()); + } + + re.setAuthor(AuthorMerger.merge(authors)); + } + + return entity; + } + public static T entityMerger( String id, Iterator> entities, long ts, DataInfo dataInfo, Class clazz) throws IllegalAccessException, InstantiationException, InvocationTargetException { + T base = entities.next()._2(); - final Comparator> idComparator = new IdentifierComparator<>(); - - final LinkedList entityList = Lists - .newArrayList(entities) - .stream() - .map(t -> Identifier.newInstance(t._2())) - .sorted(idComparator) - .map(Identifier::getEntity) - .collect(Collectors.toCollection(LinkedList::new)); - - final T entity = clazz.newInstance(); - final T first = entityList.removeFirst(); - - BeanUtils.copyProperties(entity, first); - - final List> authors = Lists.newArrayList(); - - entityList - .forEach( - duplicate -> { - entity.mergeFrom(duplicate); - if (ModelSupport.isSubClass(duplicate, Result.class)) { - Result r1 = (Result) duplicate; - Optional - .ofNullable(r1.getAuthor()) - .ifPresent(a -> authors.add(a)); - } - }); - - // set authors and date - if (ModelSupport.isSubClass(entity, Result.class)) { - Optional - .ofNullable(((Result) entity).getAuthor()) - .ifPresent(a -> authors.add(a)); - - ((Result) entity).setAuthor(AuthorMerger.merge(authors)); + while (entities.hasNext()) { + T duplicate = entities.next()._2(); + if (duplicate != null) + base = reduceEntity(id, base, duplicate, clazz); } - entity.setId(id); + base.setDataInfo(dataInfo); + base.setLastupdatetimestamp(ts); - entity.setLastupdatetimestamp(ts); - entity.setDataInfo(dataInfo); - - return entity; + return base; } } diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/IdGenerator.java b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/IdGenerator.java index 7e0d66062..37e1bfd15 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/IdGenerator.java +++ b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/IdGenerator.java @@ -1,6 +1,7 @@ package eu.dnetlib.dhp.oa.dedup; +import static eu.dnetlib.dhp.utils.DHPUtils.md5; import static org.apache.commons.lang3.StringUtils.substringAfter; import static org.apache.commons.lang3.StringUtils.substringBefore; @@ -14,33 +15,36 @@ import eu.dnetlib.dhp.schema.oaf.utils.PidType; public class IdGenerator implements Serializable { // pick the best pid from the list (consider date and pidtype) - public static String generate(List> pids, String defaultID) { + public static String generate(List pids, String defaultID) { if (pids == null || pids.isEmpty()) return defaultID; return generateId(pids); } - private static String generateId(List> pids) { - Identifier bp = pids + private static String generateId(List pids) { + Identifier bp = pids .stream() .min(Identifier::compareTo) .orElseThrow(() -> new IllegalStateException("unable to generate id")); - String prefix = substringBefore(bp.getOriginalID(), "|"); - String ns = substringBefore(substringAfter(bp.getOriginalID(), "|"), "::"); - String suffix = substringAfter(bp.getOriginalID(), "::"); + return generate(bp.getOriginalID()); + } + + public static String generate(String originalId) { + String prefix = substringBefore(originalId, "|"); + String ns = substringBefore(substringAfter(originalId, "|"), "::"); + String suffix = substringAfter(originalId, "::"); final String pidType = substringBefore(ns, "_"); if (PidType.isValid(pidType)) { return prefix + "|" + dedupify(ns) + "::" + suffix; } else { - return prefix + "|dedup_wf_001::" + suffix; + return prefix + "|dedup_wf_001::" + md5(originalId); // hash the whole originalId to avoid collisions } } private static String dedupify(String ns) { - StringBuilder prefix; if (PidType.valueOf(substringBefore(ns, "_")) == PidType.openorgs) { prefix = new StringBuilder(substringBefore(ns, "_")); @@ -53,5 +57,4 @@ public class IdGenerator implements Serializable { } return prefix.substring(0, 12); } - } diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkCreateMergeRels.java b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkCreateMergeRels.java index babbaaabd..5bb132b89 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkCreateMergeRels.java +++ b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkCreateMergeRels.java @@ -1,51 +1,47 @@ package eu.dnetlib.dhp.oa.dedup; -import static eu.dnetlib.dhp.schema.common.ModelConstants.DNET_PROVENANCE_ACTIONS; -import static eu.dnetlib.dhp.schema.common.ModelConstants.PROVENANCE_DEDUP; - -import java.io.IOException; -import java.util.*; -import java.util.stream.Collectors; - -import org.apache.commons.io.IOUtils; -import org.apache.spark.SparkConf; -import org.apache.spark.api.java.JavaPairRDD; -import org.apache.spark.api.java.JavaSparkContext; -import org.apache.spark.api.java.function.FlatMapFunction; -import org.apache.spark.api.java.function.MapFunction; -import org.apache.spark.api.java.function.MapGroupsFunction; -import org.apache.spark.graphx.Edge; -import org.apache.spark.rdd.RDD; -import org.apache.spark.sql.Dataset; -import org.apache.spark.sql.Encoders; -import org.apache.spark.sql.SaveMode; -import org.apache.spark.sql.SparkSession; -import org.dom4j.DocumentException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.xml.sax.SAXException; - -import com.google.common.collect.Lists; import com.google.common.hash.Hashing; - +import com.kwartile.lib.cc.ConnectedComponent; import eu.dnetlib.dhp.application.ArgumentApplicationParser; -import eu.dnetlib.dhp.oa.dedup.graph.ConnectedComponent; -import eu.dnetlib.dhp.oa.dedup.graph.GraphProcessor; -import eu.dnetlib.dhp.oa.dedup.model.Identifier; import eu.dnetlib.dhp.schema.common.EntityType; import eu.dnetlib.dhp.schema.common.ModelConstants; import eu.dnetlib.dhp.schema.common.ModelSupport; -import eu.dnetlib.dhp.schema.oaf.DataInfo; -import eu.dnetlib.dhp.schema.oaf.OafEntity; -import eu.dnetlib.dhp.schema.oaf.Qualifier; -import eu.dnetlib.dhp.schema.oaf.Relation; +import eu.dnetlib.dhp.schema.oaf.*; +import eu.dnetlib.dhp.schema.oaf.utils.PidType; import eu.dnetlib.dhp.utils.ISLookupClientFactory; import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpException; import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpService; import eu.dnetlib.pace.config.DedupConfig; -import eu.dnetlib.pace.util.MapDocumentUtil; -import scala.Tuple2; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.spark.SparkConf; +import org.apache.spark.api.java.function.FlatMapFunction; +import org.apache.spark.sql.Dataset; +import org.apache.spark.sql.*; +import org.apache.spark.sql.catalyst.encoders.RowEncoder; +import org.apache.spark.sql.expressions.UserDefinedFunction; +import org.apache.spark.sql.expressions.Window; +import org.apache.spark.sql.expressions.WindowSpec; +import org.apache.spark.sql.types.DataTypes; +import org.apache.spark.sql.types.StructType; +import org.dom4j.DocumentException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.xml.sax.SAXException; +import scala.Tuple3; +import scala.collection.JavaConversions; + +import java.io.IOException; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Optional; + +import static eu.dnetlib.dhp.schema.common.ModelConstants.DNET_PROVENANCE_ACTIONS; +import static eu.dnetlib.dhp.schema.common.ModelConstants.PROVENANCE_DEDUP; +import static org.apache.spark.sql.functions.*; public class SparkCreateMergeRels extends AbstractSparkAction { @@ -68,10 +64,12 @@ public class SparkCreateMergeRels extends AbstractSparkAction { log.info("isLookupUrl {}", isLookUpUrl); SparkConf conf = new SparkConf(); + conf.set("hive.metastore.uris", parser.get("hiveMetastoreUris")); conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer"); + conf.registerKryoClasses(ModelSupport.getOafModelClasses()); - new SparkCreateMergeRels(parser, getSparkSession(conf)) + new SparkCreateMergeRels(parser, getSparkWithHiveSession(conf)) .run(ISLookupClientFactory.getLookUpService(isLookUpUrl)); } @@ -87,14 +85,15 @@ public class SparkCreateMergeRels extends AbstractSparkAction { .ofNullable(parser.get("cutConnectedComponent")) .map(Integer::valueOf) .orElse(0); + + final String pivotHistoryDatabase = parser.get("pivotHistoryDatabase"); + log.info("connected component cut: '{}'", cut); log.info("graphBasePath: '{}'", graphBasePath); log.info("isLookUpUrl: '{}'", isLookUpUrl); log.info("actionSetId: '{}'", actionSetId); log.info("workingPath: '{}'", workingPath); - final JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); - for (DedupConfig dedupConf : getConfigurations(isLookUpService, actionSetId)) { final String subEntity = dedupConf.getWf().getSubEntityValue(); final Class clazz = ModelSupport.entityTypes.get(EntityType.valueOf(subEntity)); @@ -106,113 +105,170 @@ public class SparkCreateMergeRels extends AbstractSparkAction { final String mergeRelPath = DedupUtility.createMergeRelPath(workingPath, actionSetId, subEntity); - // - JavaPairRDD vertexes = createVertexes(sc, graphBasePath, subEntity, dedupConf); - - final RDD> edgeRdd = spark + final Dataset simRels = spark .read() .load(DedupUtility.createSimRelPath(workingPath, actionSetId, subEntity)) - .as(Encoders.bean(Relation.class)) - .javaRDD() - .map(it -> new Edge<>(hash(it.getSource()), hash(it.getTarget()), it.getRelClass())) - .rdd(); + .select("source", "target"); - Dataset> rawMergeRels = spark - .createDataset( - GraphProcessor - .findCCs(vertexes.rdd(), edgeRdd, maxIterations, cut) - .toJavaRDD() - .filter(k -> k.getIds().size() > 1) - .flatMap(this::ccToRels) - .rdd(), - Encoders.tuple(Encoders.STRING(), Encoders.STRING())); + UserDefinedFunction hashUDF = functions + .udf( + (String s) -> hash(s), DataTypes.LongType); - Dataset> entities = spark + // + Dataset vertexIdMap = simRels + .selectExpr("source as id") + .union(simRels.selectExpr("target as id")) + .distinct() + .withColumn("vertexId", hashUDF.apply(functions.col("id"))); + + final Dataset edges = spark .read() - .textFile(DedupUtility.createEntityPath(graphBasePath, subEntity)) - .map( - (MapFunction>) it -> { - OafEntity entity = OBJECT_MAPPER.readValue(it, clazz); - return new Tuple2<>(entity.getId(), entity); - }, - Encoders.tuple(Encoders.STRING(), Encoders.kryo(clazz))); + .load(DedupUtility.createSimRelPath(workingPath, actionSetId, subEntity)) + .select("source", "target") + .withColumn("source", hashUDF.apply(functions.col("source"))) + .withColumn("target", hashUDF.apply(functions.col("target"))); - Dataset mergeRels = rawMergeRels - .joinWith(entities, rawMergeRels.col("_2").equalTo(entities.col("_1")), "inner") - // , - .map( - (MapFunction, Tuple2>, Tuple2>) value -> new Tuple2<>( - value._1()._1(), value._2()._2()), - Encoders.tuple(Encoders.STRING(), Encoders.kryo(clazz))) - // - .groupByKey( - (MapFunction, String>) Tuple2::_1, Encoders.STRING()) - .mapGroups( - (MapGroupsFunction, ConnectedComponent>) this::generateID, - Encoders.bean(ConnectedComponent.class)) - // + Dataset cliques = ConnectedComponent + .runOnPairs(edges, 50, spark); + + Dataset rawMergeRels = cliques + .join(vertexIdMap, JavaConversions.asScalaBuffer(Collections.singletonList("vertexId")), "inner") + .drop("vertexId") + .distinct(); + + Dataset pivotHistory = spark + .createDataset( + Collections.emptyList(), + RowEncoder + .apply(StructType.fromDDL("id STRING, firstUsage STRING, lastUsage STRING, dedupId STRING"))); + + if (StringUtils.isNotBlank(pivotHistoryDatabase)) { + pivotHistory = spark + .read() + .table(pivotHistoryDatabase + "." + subEntity) + .selectExpr("id", "lastUsage", "dedupId"); + } + + String collectedfromExpr = "false AS collectedfrom"; + String dateExpr = "'' AS date"; + + if (Result.class.isAssignableFrom(clazz)) { + if (Publication.class.isAssignableFrom(clazz)) { + collectedfromExpr = "array_contains(collectedfrom.key, '" + ModelConstants.CROSSREF_ID + + "') AS collectedfrom"; + } else if (eu.dnetlib.dhp.schema.oaf.Dataset.class.isAssignableFrom(clazz)) { + collectedfromExpr = "array_contains(collectedfrom.key, '" + ModelConstants.DATACITE_ID + + "') AS collectedfrom"; + } + + dateExpr = "dateofacceptance.value AS date"; + } + + UserDefinedFunction mapPid = udf( + (String s) -> Math.min(PidType.tryValueOf(s).ordinal(), PidType.w3id.ordinal()), DataTypes.IntegerType); + UserDefinedFunction validDate = udf((String date) -> { + if (StringUtils.isNotBlank(date) + && date.matches(DatePicker.DATE_PATTERN) && DatePicker.inRange(date)) { + return date; + } + return LocalDate.now().plusWeeks(1).toString(); + }, DataTypes.StringType); + + Dataset pivotingData = spark + .read() + .schema(Encoders.bean(clazz).schema()) + .json(DedupUtility.createEntityPath(graphBasePath, subEntity)) + .selectExpr( + "id", + "regexp_extract(id, '^\\\\d+\\\\|([^_]+).*::', 1) AS pidType", + collectedfromExpr, + dateExpr) + .withColumn("pidType", mapPid.apply(col("pidType"))) // ordinal of pid type + .withColumn("date", validDate.apply(col("date"))); + + UserDefinedFunction generateDedupId = udf((String s) -> IdGenerator.generate(s), DataTypes.StringType); + + // ordering to selected pivot id + WindowSpec w = Window + .partitionBy("groupId") + .orderBy( + col("lastUsage").desc_nulls_last(), + col("pidType").asc_nulls_last(), + col("collectedfrom").desc_nulls_last(), + col("date").asc_nulls_last(), + col("id").asc_nulls_last()); + + Dataset output = rawMergeRels + .join(pivotHistory, JavaConversions.asScalaBuffer(Collections.singletonList("id")), "full") + .join(pivotingData, JavaConversions.asScalaBuffer(Collections.singletonList("id")), "left") + .withColumn("pivot", functions.first("id").over(w)) + .withColumn("pivotDedupId", functions.first("dedupId").over(w)) + .withColumn("position", functions.row_number().over(w)) + .filter(cut > 0 ? col("position").lt(lit(cut)) : lit(true)) + // .select("id", "groupId", "collectedfrom", "pivot", "dedupId", "pivotDedupId") + // .distinct() .flatMap( - (FlatMapFunction) cc -> ccToMergeRel(cc, dedupConf), - Encoders.bean(Relation.class)); + (FlatMapFunction>) (Row r) -> { + String id = r.getAs("id"); + String pivot = r.getAs("pivot"); + String pivotDedupId = r.getAs("pivotDedupId"); // dedupId associated with the pivot + String dedupId = r.getAs("dedupId"); // dedupId associated with this id if it was a pivot - saveParquet(mergeRels, mergeRelPath, SaveMode.Overwrite); + // filter out id == pivotDedupId + // those are caused by claim expressed on pivotDedupId + // information will be merged after creating deduprecord + if (id.equals(pivotDedupId)) { + return Collections.emptyIterator(); + } + ArrayList> res = new ArrayList<>(); + + // singleton pivots have null groupId as they do not match rawMergeRels + if (r.isNullAt(r.fieldIndex("groupId"))) { + // the record is existing if it matches pivotingData + if (!r.isNullAt(r.fieldIndex("collectedfrom"))) { + // create relation with old dedup id + res.add(new Tuple3<>(id, dedupId, null)); + } + return res.iterator(); + } + + // new pivot, assign pivotDedupId with current IdGenerator + if (StringUtils.isBlank(pivotDedupId)) { + pivotDedupId = IdGenerator.generate(pivot); + } + + // this was a pivot in a preceding graph but it has been merged into a new group with different + // pivot + if (StringUtils.isNotBlank(dedupId) && !pivot.equals(id) && !dedupId.equals(pivotDedupId)) { + // materialize the previous dedup record as a merge relation with the new one + res.add(new Tuple3<>(dedupId, pivotDedupId, null)); + } + + // add merge relations + res.add(new Tuple3<>(id, pivotDedupId, pivot)); + + return res.iterator(); + }, Encoders.tuple(Encoders.STRING(), Encoders.STRING(), Encoders.STRING())) + .distinct() + .flatMap( + (FlatMapFunction, Relation>) (Tuple3 r) -> { + String id = r._1(); + String dedupId = r._2(); + String pivot = r._3(); + + ArrayList res = new ArrayList<>(); + res.add(rel(pivot, dedupId, id, ModelConstants.MERGES, dedupConf)); + res.add(rel(pivot, id, dedupId, ModelConstants.IS_MERGED_IN, dedupConf)); + + return res.iterator(); + }, Encoders.bean(Relation.class)); + + saveParquet(output, mergeRelPath, SaveMode.Overwrite); } } - private ConnectedComponent generateID(String key, Iterator> values) { - - List> identifiers = Lists - .newArrayList(values) - .stream() - .map(v -> Identifier.newInstance(v._2())) - .collect(Collectors.toList()); - - String rootID = IdGenerator.generate(identifiers, key); - - if (Objects.equals(rootID, key)) - throw new IllegalStateException("generated default ID: " + rootID); - - return new ConnectedComponent(rootID, - identifiers.stream().map(i -> i.getEntity().getId()).collect(Collectors.toSet())); - } - - private JavaPairRDD createVertexes(JavaSparkContext sc, String graphBasePath, String subEntity, - DedupConfig dedupConf) { - - return sc - .textFile(DedupUtility.createEntityPath(graphBasePath, subEntity)) - .mapToPair(json -> { - String id = MapDocumentUtil.getJPathString(dedupConf.getWf().getIdPath(), json); - return new Tuple2<>(hash(id), id); - }); - } - - private Iterator> ccToRels(ConnectedComponent cc) { - return cc - .getIds() - .stream() - .map(id -> new Tuple2<>(cc.getCcId(), id)) - .iterator(); - } - - private Iterator ccToMergeRel(ConnectedComponent cc, DedupConfig dedupConf) { - return cc - .getIds() - .stream() - .flatMap( - id -> { - List tmp = new ArrayList<>(); - - tmp.add(rel(cc.getCcId(), id, ModelConstants.MERGES, dedupConf)); - tmp.add(rel(id, cc.getCcId(), ModelConstants.IS_MERGED_IN, dedupConf)); - - return tmp.stream(); - }) - .iterator(); - } - - private Relation rel(String source, String target, String relClass, DedupConfig dedupConf) { + private static Relation rel(String pivot, String source, String target, String relClass, DedupConfig dedupConf) { String entityType = dedupConf.getWf().getEntityType(); @@ -238,6 +294,14 @@ public class SparkCreateMergeRels extends AbstractSparkAction { // TODO calculate the trust value based on the similarity score of the elements in the CC r.setDataInfo(info); + + if (pivot != null) { + KeyValue pivotKV = new KeyValue(); + pivotKV.setKey("pivot"); + pivotKV.setValue(pivot); + + r.setProperties(Arrays.asList(pivotKV)); + } return r; } diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkWhitelistSimRels.java b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkWhitelistSimRels.java index 65ad0c327..60752a457 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkWhitelistSimRels.java +++ b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkWhitelistSimRels.java @@ -91,18 +91,12 @@ public class SparkWhitelistSimRels extends AbstractSparkAction { Dataset entities = spark .read() .textFile(DedupUtility.createEntityPath(graphBasePath, subEntity)) - .repartition(numPartitions) - .withColumn("id", functions.get_json_object(new Column("value"), dedupConf.getWf().getIdPath())); + .select(functions.get_json_object(new Column("value"), dedupConf.getWf().getIdPath()).as("id")) + .distinct(); - Dataset whiteListRels1 = whiteListRels - .join(entities, entities.col("id").equalTo(whiteListRels.col("from")), "inner") - .select("from", "to"); - - Dataset whiteListRels2 = whiteListRels1 - .join(entities, whiteListRels1.col("to").equalTo(entities.col("id")), "inner") - .select("from", "to"); - - Dataset whiteListSimRels = whiteListRels2 + Dataset whiteListSimRels = whiteListRels + .join(entities, entities.col("id").equalTo(whiteListRels.col("from")), "leftsemi") + .join(entities, functions.col("to").equalTo(entities.col("id")), "leftsemi") .map( (MapFunction) r -> DedupUtility .createSimRel(r.getString(0), r.getString(1), entity), diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/graph/ConnectedComponent.java b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/graph/ConnectedComponent.java deleted file mode 100644 index 4a39a175d..000000000 --- a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/graph/ConnectedComponent.java +++ /dev/null @@ -1,100 +0,0 @@ - -package eu.dnetlib.dhp.oa.dedup.graph; - -import java.io.IOException; -import java.io.Serializable; -import java.util.Set; -import java.util.stream.Collectors; - -import org.apache.commons.lang3.StringUtils; -import org.codehaus.jackson.annotate.JsonIgnore; - -import com.fasterxml.jackson.databind.ObjectMapper; - -import eu.dnetlib.dhp.utils.DHPUtils; -import eu.dnetlib.pace.util.PaceException; - -public class ConnectedComponent implements Serializable { - - private String ccId; - private Set ids; - - private static final String CONNECTED_COMPONENT_ID_PREFIX = "connect_comp"; - - public ConnectedComponent(Set ids, final int cut) { - this.ids = ids; - - this.ccId = createDefaultID(); - - if (cut > 0 && ids.size() > cut) { - this.ids = ids - .stream() - .filter(id -> !ccId.equalsIgnoreCase(id)) - .limit(cut - 1) - .collect(Collectors.toSet()); -// this.ids.add(ccId); ?? - } - } - - public ConnectedComponent(String ccId, Set ids) { - this.ccId = ccId; - this.ids = ids; - } - - public String createDefaultID() { - if (ids.size() > 1) { - final String s = getMin(); - String prefix = s.split("\\|")[0]; - ccId = prefix + "|" + CONNECTED_COMPONENT_ID_PREFIX + "::" + DHPUtils.md5(s); - return ccId; - } else { - return ids.iterator().next(); - } - } - - @JsonIgnore - public String getMin() { - - final StringBuilder min = new StringBuilder(); - - ids - .forEach( - id -> { - if (StringUtils.isBlank(min.toString())) { - min.append(id); - } else { - if (min.toString().compareTo(id) > 0) { - min.setLength(0); - min.append(id); - } - } - }); - return min.toString(); - } - - @Override - public String toString() { - ObjectMapper mapper = new ObjectMapper(); - try { - return mapper.writeValueAsString(this); - } catch (IOException e) { - throw new PaceException("Failed to create Json: ", e); - } - } - - public Set getIds() { - return ids; - } - - public void setIds(Set ids) { - this.ids = ids; - } - - public String getCcId() { - return ccId; - } - - public void setCcId(String ccId) { - this.ccId = ccId; - } -} diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/graph/GraphProcessor.scala b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/graph/GraphProcessor.scala deleted file mode 100644 index f4dd85d75..000000000 --- a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/graph/GraphProcessor.scala +++ /dev/null @@ -1,37 +0,0 @@ -package eu.dnetlib.dhp.oa.dedup.graph - -import org.apache.spark.graphx._ -import org.apache.spark.rdd.RDD - -import scala.collection.JavaConversions; - -object GraphProcessor { - - def findCCs(vertexes: RDD[(VertexId, String)], edges: RDD[Edge[String]], maxIterations: Int, cut:Int): RDD[ConnectedComponent] = { - val graph: Graph[String, String] = Graph(vertexes, edges).partitionBy(PartitionStrategy.RandomVertexCut) //TODO remember to remove partitionby - val cc = graph.connectedComponents(maxIterations).vertices - - val joinResult = vertexes.leftOuterJoin(cc).map { - case (id, (openaireId, cc)) => { - if (cc.isEmpty) { - (id, openaireId) - } - else { - (cc.get, openaireId) - } - } - } - val connectedComponents = joinResult.groupByKey() - .map[ConnectedComponent](cc => asConnectedComponent(cc, cut)) - connectedComponents - } - - - - def asConnectedComponent(group: (VertexId, Iterable[String]), cut:Int): ConnectedComponent = { - val docs = group._2.toSet[String] - val connectedComponent = new ConnectedComponent(JavaConversions.setAsJavaSet[String](docs), cut); - connectedComponent - } - -} \ No newline at end of file diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/model/Identifier.java b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/model/Identifier.java index 0cba4fc3b..e03c3bf95 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/model/Identifier.java +++ b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/model/Identifier.java @@ -3,21 +3,21 @@ package eu.dnetlib.dhp.oa.dedup.model; import java.io.Serializable; import java.text.SimpleDateFormat; -import java.util.*; -import java.util.stream.Collectors; +import java.time.LocalDate; +import java.util.Date; +import java.util.List; +import java.util.Objects; import org.apache.commons.lang3.StringUtils; -import com.google.common.collect.Sets; - import eu.dnetlib.dhp.oa.dedup.DatePicker; import eu.dnetlib.dhp.oa.dedup.IdentifierComparator; import eu.dnetlib.dhp.schema.common.EntityType; -import eu.dnetlib.dhp.schema.common.ModelConstants; import eu.dnetlib.dhp.schema.common.ModelSupport; -import eu.dnetlib.dhp.schema.oaf.*; -import eu.dnetlib.dhp.schema.oaf.utils.OafMapperUtils; -import eu.dnetlib.dhp.schema.oaf.utils.PidComparator; +import eu.dnetlib.dhp.schema.oaf.Field; +import eu.dnetlib.dhp.schema.oaf.KeyValue; +import eu.dnetlib.dhp.schema.oaf.OafEntity; +import eu.dnetlib.dhp.schema.oaf.Result; import eu.dnetlib.dhp.schema.oaf.utils.PidType; public class Identifier implements Serializable, Comparable> { @@ -50,7 +50,7 @@ public class Identifier implements Serializable, Comparable if (Objects.nonNull(date)) { return date; } else { - String sDate = BASE_DATE; + String sDate = LocalDate.now().plusDays(1).toString(); if (ModelSupport.isSubClass(getEntity(), Result.class)) { Result result = (Result) getEntity(); if (isWellformed(result.getDateofacceptance())) { diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/createCC_parameters.json b/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/createCC_parameters.json index b1df08535..4f9f4b0b5 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/createCC_parameters.json +++ b/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/createCC_parameters.json @@ -28,5 +28,17 @@ "paramLongName": "workingPath", "paramDescription": "path for the working directory", "paramRequired": true + }, + { + "paramName":"h", + "paramLongName":"hiveMetastoreUris", + "paramDescription": "the hive metastore uris", + "paramRequired": true + }, + { + "paramName": "p", + "paramLongName": "pivotHistoryDatabase", + "paramDescription": "Pivot history database", + "paramRequired": false } ] \ No newline at end of file diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/scan/oozie_app/config-default.xml b/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/scan/oozie_app/config-default.xml index 2e0ed9aee..cd29965e3 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/scan/oozie_app/config-default.xml +++ b/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/scan/oozie_app/config-default.xml @@ -15,4 +15,8 @@ oozie.action.sharelib.for.spark spark2 + + hiveMetastoreUris + thrift://iis-cdh5-test-m3.ocean.icm.edu.pl:9083 + \ No newline at end of file diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/scan/oozie_app/workflow.xml b/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/scan/oozie_app/workflow.xml index ba2270c8a..49a331def 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/scan/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/scan/oozie_app/workflow.xml @@ -188,6 +188,8 @@ --isLookUpUrl${isLookUpUrl} --actionSetId${actionSetId} --cutConnectedComponent${cutConnectedComponent} + --hiveMetastoreUris${hiveMetastoreUris} + --pivotHistoryDatabase${pivotHistoryDatabase} diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/scala/com/kwartile/lib/cc/ConnectedComponent.scala b/dhp-workflows/dhp-dedup-openaire/src/main/scala/com/kwartile/lib/cc/ConnectedComponent.scala new file mode 100644 index 000000000..4c3362235 --- /dev/null +++ b/dhp-workflows/dhp-dedup-openaire/src/main/scala/com/kwartile/lib/cc/ConnectedComponent.scala @@ -0,0 +1,335 @@ +/** Copyright (c) 2017 Kwartile, Inc., http://www.kwartile.com + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/** Map-reduce implementation of Connected Component + * Given lists of subgraphs, returns all the nodes that are connected. + */ + +package com.kwartile.lib.cc + +import org.apache.spark.rdd.RDD +import org.apache.spark.sql.{Dataset, Row, SparkSession} +import org.apache.spark.storage.StorageLevel + +import scala.annotation.tailrec +import scala.collection.mutable + +object ConnectedComponent extends Serializable { + + /** Applies Small Star operation on RDD of nodePairs + * + * @param nodePairs on which to apply Small Star operations + * @return new nodePairs after the operation and conncectivy change count + */ + private def smallStar(nodePairs: RDD[(Long, Long)]): (RDD[(Long, Long)], Long) = { + + /** generate RDD of (self, List(neighbors)) where self > neighbors + * E.g.: nodePairs (1, 4), (6, 1), (3, 2), (6, 5) + * will result into (4, List(1)), (6, List(1)), (3, List(2)), (6, List(5)) + */ + val neighbors = nodePairs.map(x => { + val (self, neighbor) = (x._1, x._2) + if (self > neighbor) + (self, neighbor) + else + (neighbor, self) + }) + + /** reduce on self to get list of all its neighbors. + * E.g: (4, List(1)), (6, List(1)), (3, List(2)), (6, List(5)) + * will result into (4, List(1)), (6, List(1, 5)), (3, List(2)) + * Note: + * (1) you may need to tweak number of partitions. + * (2) also, watch out for data skew. In that case, consider using rangePartitioner + */ + val empty = mutable.HashSet[Long]() + val allNeighbors = neighbors.aggregateByKey(empty)( + (lb, v) => lb += v, + (lb1, lb2) => lb1 ++ lb2 + ) + + /** Apply Small Star operation on (self, List(neighbor)) to get newNodePairs and count the change in connectivity + */ + + val newNodePairsWithChangeCount = allNeighbors + .map(x => { + val self = x._1 + val neighbors = x._2.toList + val minNode = argMin(self :: neighbors) + val newNodePairs = (self :: neighbors) + .map(neighbor => { + (neighbor, minNode) + }) + .filter(x => { + val neighbor = x._1 + val minNode = x._2 + (neighbor <= self && neighbor != minNode) || (self == neighbor) + }) + val uniqueNewNodePairs = newNodePairs.toSet.toList + + /** We count the change by taking a diff of the new node pairs with the old node pairs + */ + val connectivityChangeCount = (uniqueNewNodePairs diff neighbors.map((self, _))).length + (uniqueNewNodePairs, connectivityChangeCount) + }) + .persist(StorageLevel.MEMORY_AND_DISK_SER) + + /** Sum all the changeCounts + */ + val totalConnectivityCountChange = newNodePairsWithChangeCount + .mapPartitions(iter => { + val (v, l) = iter.toSeq.unzip + val sum = l.sum + Iterator(sum) + }) + .sum + .toLong + + val newNodePairs = newNodePairsWithChangeCount.map(x => x._1).flatMap(x => x) + newNodePairsWithChangeCount.unpersist(false) + (newNodePairs, totalConnectivityCountChange) + } + + /** Apply Large Star operation on a RDD of nodePairs + * + * @param nodePairs on which to apply Large Star operations + * @return new nodePairs after the operation and conncectivy change count + */ + private def largeStar(nodePairs: RDD[(Long, Long)]): (RDD[(Long, Long)], Long) = { + + /** generate RDD of (self, List(neighbors)) + * E.g.: nodePairs (1, 4), (6, 1), (3, 2), (6, 5) + * will result into (4, List(1)), (1, List(4)), (6, List(1)), (1, List(6)), (3, List(2)), (2, List(3)), (6, List(5)), (5, List(6)) + */ + + val neighbors = nodePairs.flatMap(x => { + val (self, neighbor) = (x._1, x._2) + if (self == neighbor) + List((self, neighbor)) + else + List((self, neighbor), (neighbor, self)) + }) + + /** reduce on self to get list of all its neighbors. + * E.g: (4, List(1)), (1, List(4)), (6, List(1)), (1, List(6)), (3, List(2)), (2, List(3)), (6, List(5)), (5, List(6)) + * will result into (4, List(1)), (1, List(4, 6)), (6, List(1, 5)), (3, List(2)), (2, List(3)), (5, List(6)) + * Note: + * (1) you may need to tweak number of partitions. + * (2) also, watch out for data skew. In that case, consider using rangePartitioner + */ + + val localAdd = (s: mutable.HashSet[Long], v: Long) => s += v + val partitionAdd = (s1: mutable.HashSet[Long], s2: mutable.HashSet[Long]) => s1 ++= s2 + val allNeighbors = + neighbors.aggregateByKey(mutable.HashSet.empty[Long] /*, rangePartitioner*/ )(localAdd, partitionAdd) + + /** Apply Large Star operation on (self, List(neighbor)) to get newNodePairs and count the change in connectivity + */ + + val newNodePairsWithChangeCount = allNeighbors + .map(x => { + val self = x._1 + val neighbors = x._2.toList + val minNode = argMin(self :: neighbors) + val newNodePairs = (self :: neighbors) + .map(neighbor => { + (neighbor, minNode) + }) + .filter(x => { + val neighbor = x._1 + val minNode = x._2 + neighbor > self || neighbor == minNode + }) + + val uniqueNewNodePairs = newNodePairs.toSet.toList + val connectivityChangeCount = (uniqueNewNodePairs diff neighbors.map((self, _))).length + (uniqueNewNodePairs, connectivityChangeCount) + }) + .persist(StorageLevel.MEMORY_AND_DISK_SER) + + val totalConnectivityCountChange = newNodePairsWithChangeCount + .mapPartitions(iter => { + val (v, l) = iter.toSeq.unzip + val sum = l.sum + Iterator(sum) + }) + .sum + .toLong + + /** Sum all the changeCounts + */ + val newNodePairs = newNodePairsWithChangeCount.map(x => x._1).flatMap(x => x) + newNodePairsWithChangeCount.unpersist(false) + (newNodePairs, totalConnectivityCountChange) + } + + private def argMin(nodes: List[Long]): Long = { + nodes.min(Ordering.by((node: Long) => node)) + } + + /** Build nodePairs given a list of nodes. A list of nodes represents a subgraph. + * + * @param nodes that are part of a subgraph + * @return nodePairs for a subgraph + */ + private def buildPairs(nodes: List[Long]): List[(Long, Long)] = { + buildPairs(nodes.head, nodes.tail, null.asInstanceOf[List[(Long, Long)]]) + } + + @tailrec + private def buildPairs(node: Long, neighbors: List[Long], partialPairs: List[(Long, Long)]): List[(Long, Long)] = { + if (neighbors.isEmpty) { + if (partialPairs != null) + List((node, node)) ::: partialPairs + else + List((node, node)) + } else if (neighbors.length == 1) { + val neighbor = neighbors(0) + if (node > neighbor) + if (partialPairs != null) List((node, neighbor)) ::: partialPairs else List((node, neighbor)) + else if (partialPairs != null) List((neighbor, node)) ::: partialPairs + else List((neighbor, node)) + } else { + val newPartialPairs = neighbors + .map(neighbor => { + if (node > neighbor) + List((node, neighbor)) + else + List((neighbor, node)) + }) + .flatMap(x => x) + + if (partialPairs != null) + buildPairs(neighbors.head, neighbors.tail, newPartialPairs ::: partialPairs) + else + buildPairs(neighbors.head, neighbors.tail, newPartialPairs) + } + } + + /** Implements alternatingAlgo. Converges when the changeCount is either 0 or does not change from the previous iteration + * + * @param nodePairs for a graph + * @param largeStarConnectivityChangeCount change count that resulted from the previous iteration + * @param smallStarConnectivityChangeCount change count that resulted from the previous iteration + * @param didConverge flag to indicate the alorigth converged + * @param currIterationCount counter to capture number of iterations + * @param maxIterationCount maximum number iterations to try before giving up + * @return RDD of nodePairs + */ + + @tailrec + private def alternatingAlgo( + nodePairs: RDD[(Long, Long)], + largeStarConnectivityChangeCount: Long, + smallStarConnectivityChangeCount: Long, + didConverge: Boolean, + currIterationCount: Int, + maxIterationCount: Int + ): (RDD[(Long, Long)], Boolean, Long) = { + + val iterationCount = currIterationCount + 1 + if (didConverge) + (nodePairs, true, currIterationCount) + else if (currIterationCount >= maxIterationCount) { + (nodePairs, false, currIterationCount) + } else { + + val (nodePairsLargeStar, currLargeStarConnectivityChangeCount) = largeStar(nodePairs) + val (nodePairsSmallStar, currSmallStarConnectivityChangeCount) = smallStar(nodePairsLargeStar) + + if ( + (currLargeStarConnectivityChangeCount == largeStarConnectivityChangeCount && + currSmallStarConnectivityChangeCount == smallStarConnectivityChangeCount) || + (currSmallStarConnectivityChangeCount == 0 && currLargeStarConnectivityChangeCount == 0) + ) { + alternatingAlgo( + nodePairsSmallStar, + currLargeStarConnectivityChangeCount, + currSmallStarConnectivityChangeCount, + true, + iterationCount, + maxIterationCount + ) + } else { + alternatingAlgo( + nodePairsSmallStar, + currLargeStarConnectivityChangeCount, + currSmallStarConnectivityChangeCount, + false, + iterationCount, + maxIterationCount + ) + } + } + } + + /** Driver function + * + * @param cliques list of nodes representing subgraphs (or cliques) + * @param maxIterationCount maximum number iterations to try before giving up + * @return Connected Components as nodePairs where second member of the nodePair is the minimum node in the component + */ + def run(cliques: RDD[List[Long]], maxIterationCount: Int): (RDD[(Long, Long)], Boolean, Long) = { + + val nodePairs = cliques + .map(aClique => { + buildPairs(aClique) + }) + .flatMap(x => x) + + val (cc, didConverge, iterCount) = alternatingAlgo(nodePairs, 9999999L, 9999999L, false, 0, maxIterationCount) + + if (didConverge) { + (cc, didConverge, iterCount) + } else { + (null.asInstanceOf[RDD[(Long, Long)]], didConverge, iterCount) + } + } + + def runOnPairs(nodePairs: RDD[(Long, Long)], maxIterationCount: Int): (RDD[(Long, Long)], Boolean, Long) = { + val (cc, didConverge, iterCount) = alternatingAlgo(nodePairs, 9999999L, 9999999L, false, 0, maxIterationCount) + + if (didConverge) { + (cc, didConverge, iterCount) + } else { + (null.asInstanceOf[RDD[(Long, Long)]], didConverge, iterCount) + } + } + + def runOnPairs(nodePairs: Dataset[Row], maxIterationCount: Int)(implicit spark: SparkSession): Dataset[Row] = { + import spark.implicits._ + + val (cc, didConverge, iterCount) = alternatingAlgo( + nodePairs.map(e => (e.getLong(0), e.getLong(1))).rdd, + 9999999L, + 9999999L, + false, + 0, + maxIterationCount + ) + + if (didConverge) { + cc.toDF("vertexId", "groupId") + } else { + null.asInstanceOf[Dataset[Row]] + } + } + +} diff --git a/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkDedupTest.java b/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkDedupTest.java index 6c4935637..bd5a04e62 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkDedupTest.java +++ b/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkDedupTest.java @@ -41,9 +41,13 @@ import com.google.common.collect.Sets; import eu.dnetlib.dhp.application.ArgumentApplicationParser; import eu.dnetlib.dhp.schema.common.ModelConstants; +import eu.dnetlib.dhp.schema.common.ModelSupport; import eu.dnetlib.dhp.schema.oaf.*; +import eu.dnetlib.dhp.schema.oaf.utils.OafMapperUtils; +import eu.dnetlib.dhp.schema.sx.OafUtils; import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpException; import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpService; +import scala.Tuple2; @ExtendWith(MockitoExtension.class) @TestMethodOrder(MethodOrderer.OrderAnnotation.class) @@ -97,6 +101,7 @@ public class SparkDedupTest implements Serializable { final SparkConf conf = new SparkConf(); conf.set("spark.sql.shuffle.partitions", "200"); + conf.set("spark.sql.warehouse.dir", testOutputBasePath + "/spark-warehouse"); spark = SparkSession .builder() .appName(SparkDedupTest.class.getSimpleName()) @@ -186,11 +191,11 @@ public class SparkDedupTest implements Serializable { System.out.println("ds_simrel = " + ds_simrel); System.out.println("orp_simrel = " + orp_simrel); - assertEquals(1538, orgs_simrel); - assertEquals(3523, pubs_simrel); - assertEquals(168, sw_simrel); - assertEquals(221, ds_simrel); - assertEquals(3392, orp_simrel); + assertEquals(751, orgs_simrel); + assertEquals(546, pubs_simrel); + assertEquals(113, sw_simrel); + assertEquals(148, ds_simrel); + assertEquals(280, orp_simrel); } @@ -235,10 +240,10 @@ public class SparkDedupTest implements Serializable { .count(); // entities simrels supposed to be equal to the number of previous step (no rels in whitelist) - assertEquals(1538, orgs_simrel); - assertEquals(3523, pubs_simrel); - assertEquals(221, ds_simrel); - assertEquals(3392, orp_simrel); + assertEquals(751, orgs_simrel); + assertEquals(546, pubs_simrel); + assertEquals(148, ds_simrel); + assertEquals(280, orp_simrel); // System.out.println("orgs_simrel = " + orgs_simrel); // System.out.println("pubs_simrel = " + pubs_simrel); // System.out.println("ds_simrel = " + ds_simrel); @@ -268,7 +273,7 @@ public class SparkDedupTest implements Serializable { && rel.getTarget().equalsIgnoreCase(whiteList.get(1).split(WHITELIST_SEPARATOR)[1])) .count() > 0); - assertEquals(170, sw_simrel.count()); + assertEquals(115, sw_simrel.count()); // System.out.println("sw_simrel = " + sw_simrel.count()); } @@ -292,7 +297,9 @@ public class SparkDedupTest implements Serializable { "-w", testOutputBasePath, "-cc", - "3" + "3", + "-h", + "" }); new SparkCreateMergeRels(parser, spark).run(isLookUpService); @@ -365,6 +372,113 @@ public class SparkDedupTest implements Serializable { .deleteDirectory(new File(testOutputBasePath + "/" + testActionSetId + "/otherresearchproduct_mergerel")); } + @Test + @Order(3) + void createMergeRelsWithPivotHistoryTest() throws Exception { + + ArgumentApplicationParser parser = new ArgumentApplicationParser( + classPathResourceAsString("/eu/dnetlib/dhp/oa/dedup/createCC_parameters.json")); + + spark.sql("CREATE DATABASE IF NOT EXISTS pivot_history_test"); + ModelSupport.oafTypes.keySet().forEach(entityType -> { + try { + spark + .read() + .json( + Paths + .get(SparkDedupTest.class.getResource("/eu/dnetlib/dhp/dedup/pivot_history").toURI()) + .toFile() + .getAbsolutePath()) + .write() + .mode("overwrite") + .saveAsTable("pivot_history_test." + entityType); + } catch (URISyntaxException e) { + throw new RuntimeException(e); + } + }); + + parser + .parseArgument( + new String[] { + "-i", + testGraphBasePath, + "-asi", + testActionSetId, + "-la", + "lookupurl", + "-w", + testOutputBasePath, + "-h", + "", + "-pivotHistoryDatabase", + "pivot_history_test" + + }); + + new SparkCreateMergeRels(parser, spark).run(isLookUpService); + + long orgs_mergerel = spark + .read() + .load(testOutputBasePath + "/" + testActionSetId + "/organization_mergerel") + .count(); + final Dataset pubs = spark + .read() + .load(testOutputBasePath + "/" + testActionSetId + "/publication_mergerel") + .as(Encoders.bean(Relation.class)); + long sw_mergerel = spark + .read() + .load(testOutputBasePath + "/" + testActionSetId + "/software_mergerel") + .count(); + long ds_mergerel = spark + .read() + .load(testOutputBasePath + "/" + testActionSetId + "/dataset_mergerel") + .count(); + + long orp_mergerel = spark + .read() + .load(testOutputBasePath + "/" + testActionSetId + "/otherresearchproduct_mergerel") + .count(); + + final List merges = pubs + .filter("source == '50|arXiv_dedup_::c93aeb433eb90ed7a86e29be00791b7c'") + .collectAsList(); + assertEquals(3, merges.size()); + Set dups = Sets + .newHashSet( + "50|doi_________::3b1d0d8e8f930826665df9d6b82fbb73", + "50|doi_________::d5021b53204e4fdeab6ff5d5bc468032", + "50|arXiv_______::c93aeb433eb90ed7a86e29be00791b7c"); + merges.forEach(r -> { + assertEquals(ModelConstants.RESULT_RESULT, r.getRelType()); + assertEquals(ModelConstants.DEDUP, r.getSubRelType()); + assertEquals(ModelConstants.MERGES, r.getRelClass()); + assertTrue(dups.contains(r.getTarget())); + }); + + final List mergedIn = pubs + .filter("target == '50|arXiv_dedup_::c93aeb433eb90ed7a86e29be00791b7c'") + .collectAsList(); + assertEquals(3, mergedIn.size()); + mergedIn.forEach(r -> { + assertEquals(ModelConstants.RESULT_RESULT, r.getRelType()); + assertEquals(ModelConstants.DEDUP, r.getSubRelType()); + assertEquals(ModelConstants.IS_MERGED_IN, r.getRelClass()); + assertTrue(dups.contains(r.getSource())); + }); + + assertEquals(1268, orgs_mergerel); + assertEquals(1112, pubs.count()); + assertEquals(292, sw_mergerel); + assertEquals(476, ds_mergerel); + assertEquals(742, orp_mergerel); +// System.out.println("orgs_mergerel = " + orgs_mergerel); +// System.out.println("pubs_mergerel = " + pubs_mergerel); +// System.out.println("sw_mergerel = " + sw_mergerel); +// System.out.println("ds_mergerel = " + ds_mergerel); +// System.out.println("orp_mergerel = " + orp_mergerel); + + } + @Test @Order(4) void createMergeRelsTest() throws Exception { @@ -382,7 +496,9 @@ public class SparkDedupTest implements Serializable { "-la", "lookupurl", "-w", - testOutputBasePath + testOutputBasePath, + "-h", + "" }); new SparkCreateMergeRels(parser, spark).run(isLookUpService); @@ -437,10 +553,10 @@ public class SparkDedupTest implements Serializable { }); assertEquals(1268, orgs_mergerel); - assertEquals(1450, pubs.count()); - assertEquals(286, sw_mergerel); - assertEquals(472, ds_mergerel); - assertEquals(738, orp_mergerel); + assertEquals(1112, pubs.count()); + assertEquals(292, sw_mergerel); + assertEquals(476, ds_mergerel); + assertEquals(742, orp_mergerel); // System.out.println("orgs_mergerel = " + orgs_mergerel); // System.out.println("pubs_mergerel = " + pubs_mergerel); // System.out.println("sw_mergerel = " + sw_mergerel); @@ -492,10 +608,10 @@ public class SparkDedupTest implements Serializable { .count(); assertEquals(86, orgs_deduprecord); - assertEquals(68, pubs.count()); - assertEquals(49, sw_deduprecord); + assertEquals(91, pubs.count()); + assertEquals(47, sw_deduprecord); assertEquals(97, ds_deduprecord); - assertEquals(92, orp_deduprecord); + assertEquals(93, orp_deduprecord); verifyRoot_1(mapper, pubs); @@ -629,13 +745,13 @@ public class SparkDedupTest implements Serializable { .distinct() .count(); - assertEquals(902, publications); + assertEquals(925, publications); assertEquals(839, organizations); assertEquals(100, projects); assertEquals(100, datasource); - assertEquals(198, softwares); + assertEquals(196, softwares); assertEquals(389, dataset); - assertEquals(520, otherresearchproduct); + assertEquals(521, otherresearchproduct); // System.out.println("publications = " + publications); // System.out.println("organizations = " + organizations); diff --git a/dhp-workflows/dhp-dedup-openaire/src/test/resources/eu/dnetlib/dhp/dedup/conf/ds.curr.conf.json b/dhp-workflows/dhp-dedup-openaire/src/test/resources/eu/dnetlib/dhp/dedup/conf/ds.curr.conf.json index fa889d63b..ff6670f1e 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/test/resources/eu/dnetlib/dhp/dedup/conf/ds.curr.conf.json +++ b/dhp-workflows/dhp-dedup-openaire/src/test/resources/eu/dnetlib/dhp/dedup/conf/ds.curr.conf.json @@ -101,7 +101,8 @@ "type" : "String", "path" : "$.title[?(@.qualifier.classid == 'main title')].value", "length" : 250, - "size" : 5 + "size" : 5, + "clean": "title" }, { "name" : "authors", diff --git a/dhp-workflows/dhp-dedup-openaire/src/test/resources/eu/dnetlib/dhp/dedup/conf/orp.curr.conf.json b/dhp-workflows/dhp-dedup-openaire/src/test/resources/eu/dnetlib/dhp/dedup/conf/orp.curr.conf.json index b45b6ae83..a4a3761a3 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/test/resources/eu/dnetlib/dhp/dedup/conf/orp.curr.conf.json +++ b/dhp-workflows/dhp-dedup-openaire/src/test/resources/eu/dnetlib/dhp/dedup/conf/orp.curr.conf.json @@ -101,7 +101,8 @@ "type" : "String", "path" : "$.title[?(@.qualifier.classid == 'main title')].value", "length" : 250, - "size" : 5 + "size" : 5, + "clean": "title" }, { "name" : "authors", diff --git a/dhp-workflows/dhp-dedup-openaire/src/test/resources/eu/dnetlib/dhp/dedup/conf/pub.curr.conf.json b/dhp-workflows/dhp-dedup-openaire/src/test/resources/eu/dnetlib/dhp/dedup/conf/pub.curr.conf.json index 15ebc7a6a..c3a769874 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/test/resources/eu/dnetlib/dhp/dedup/conf/pub.curr.conf.json +++ b/dhp-workflows/dhp-dedup-openaire/src/test/resources/eu/dnetlib/dhp/dedup/conf/pub.curr.conf.json @@ -29,9 +29,8 @@ }, "pace": { "clustering" : [ - { "name" : "ngrampairs", "fields" : [ "title" ], "params" : { "max" : "1", "ngramLen" : "3"} }, - { "name" : "suffixprefix", "fields" : [ "title" ], "params" : { "max" : "1", "len" : "3" } }, - { "name" : "lowercase", "fields" : [ "doi" ], "params" : { } } + { "name" : "numAuthorsTitleSuffixPrefixChain", "fields" : [ "num_authors", "title" ], "params" : { "mod" : "10" } }, + { "name" : "jsonlistclustering", "fields" : [ "pid" ], "params" : { "jpath_value": "$.value", "jpath_classid": "$.qualifier.classid"} } ], "decisionTree": { "start": { @@ -79,13 +78,37 @@ "ignoreUndefined": "false" }, "layer3": { + "fields": [ + { + "field": "authors", + "comparator": "authorsMatch", + "weight": 1.0, + "countIfUndefined": "false", + "params": { + "surname_th": 0.75, + "fullname_th": 0.75, + "threshold": 0.6, + "mode": "full" + } + } + ], + "threshold": 0.6, + "aggregation": "MAX", + "positive": "layer4", + "negative": "NO_MATCH", + "undefined": "MATCH", + "ignoreUndefined": "true" + }, + "layer4": { "fields": [ { "field": "title", "comparator": "levensteinTitle", "weight": 1.0, "countIfUndefined": "true", - "params": {} + "params": { + "threshold": "0.99" + } } ], "threshold": 0.99, @@ -97,23 +120,25 @@ } }, "model": [ - { - "name": "doi", - "type": "String", - "path": "$.pid[?(@.qualifier.classid == 'doi')].value" - }, { "name": "pid", "type": "JSON", "path": "$.pid", "overrideMatch": "true" }, + { + "name": "alternateid", + "type": "JSON", + "path": "$.instance[*].alternateIdentifier[*]", + "overrideMatch": "true" + }, { "name": "title", "type": "String", "path": "$.title[?(@.qualifier.classid == 'main title')].value", "length": 250, - "size": 5 + "size": 5, + "clean": "title" }, { "name": "authors", @@ -122,9 +147,9 @@ "size": 200 }, { - "name": "resulttype", + "name": "num_authors", "type": "String", - "path": "$.resulttype.classid" + "path": "$.author.length()" } ], "blacklists": { diff --git a/dhp-workflows/dhp-dedup-openaire/src/test/resources/eu/dnetlib/dhp/dedup/conf/sw.curr.conf.json b/dhp-workflows/dhp-dedup-openaire/src/test/resources/eu/dnetlib/dhp/dedup/conf/sw.curr.conf.json index f53ff385f..3c6c8aa5f 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/test/resources/eu/dnetlib/dhp/dedup/conf/sw.curr.conf.json +++ b/dhp-workflows/dhp-dedup-openaire/src/test/resources/eu/dnetlib/dhp/dedup/conf/sw.curr.conf.json @@ -75,7 +75,8 @@ "type" : "String", "path" : "$.title[?(@.qualifier.classid == 'main title')].value", "length" : 250, - "size" : 5 + "size" : 5, + "clean": "title" }, { "name" : "url", diff --git a/dhp-workflows/dhp-dedup-openaire/src/test/resources/eu/dnetlib/dhp/dedup/pivot_history/pivot_history.json b/dhp-workflows/dhp-dedup-openaire/src/test/resources/eu/dnetlib/dhp/dedup/pivot_history/pivot_history.json new file mode 100644 index 000000000..8af1a6d06 --- /dev/null +++ b/dhp-workflows/dhp-dedup-openaire/src/test/resources/eu/dnetlib/dhp/dedup/pivot_history/pivot_history.json @@ -0,0 +1 @@ +{"id": "50|arXiv_______::c93aeb433eb90ed7a86e29be00791b7c", "firstUsage": "2022-01-01", "lastUsage": "2022-01-01", "dedupId": "50|arXiv_dedup_::c93aeb433eb90ed7a86e29be00791b7c" } \ No newline at end of file diff --git a/pom.xml b/pom.xml index 3fd351c1d..6ef320253 100644 --- a/pom.xml +++ b/pom.xml @@ -931,5 +931,25 @@ --> + + + + arm-silicon-mac + + + aarch64 + mac + + + + + + org.xerial.snappy + snappy-java + 1.1.8.4 + + + + \ No newline at end of file From 1287315ffb546397bcbcac588fd5b80a62cab665 Mon Sep 17 00:00:00 2001 From: Giambattista Bloisi Date: Mon, 11 Dec 2023 21:26:05 +0100 Subject: [PATCH 423/449] Do no longer use dedupId information from pivotHistory Database --- .../dhp/oa/dedup/SparkCreateMergeRels.java | 85 ++++++++++--------- 1 file changed, 44 insertions(+), 41 deletions(-) diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkCreateMergeRels.java b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkCreateMergeRels.java index 5bb132b89..46c29494e 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkCreateMergeRels.java +++ b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkCreateMergeRels.java @@ -1,24 +1,23 @@ package eu.dnetlib.dhp.oa.dedup; -import com.google.common.hash.Hashing; -import com.kwartile.lib.cc.ConnectedComponent; -import eu.dnetlib.dhp.application.ArgumentApplicationParser; -import eu.dnetlib.dhp.schema.common.EntityType; -import eu.dnetlib.dhp.schema.common.ModelConstants; -import eu.dnetlib.dhp.schema.common.ModelSupport; -import eu.dnetlib.dhp.schema.oaf.*; -import eu.dnetlib.dhp.schema.oaf.utils.PidType; -import eu.dnetlib.dhp.utils.ISLookupClientFactory; -import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpException; -import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpService; -import eu.dnetlib.pace.config.DedupConfig; +import static eu.dnetlib.dhp.schema.common.ModelConstants.DNET_PROVENANCE_ACTIONS; +import static eu.dnetlib.dhp.schema.common.ModelConstants.PROVENANCE_DEDUP; +import static org.apache.spark.sql.functions.*; + +import java.io.IOException; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Optional; + import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.apache.spark.SparkConf; import org.apache.spark.api.java.function.FlatMapFunction; -import org.apache.spark.sql.Dataset; import org.apache.spark.sql.*; +import org.apache.spark.sql.Dataset; import org.apache.spark.sql.catalyst.encoders.RowEncoder; import org.apache.spark.sql.expressions.UserDefinedFunction; import org.apache.spark.sql.expressions.Window; @@ -29,20 +28,23 @@ import org.dom4j.DocumentException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.xml.sax.SAXException; + +import com.google.common.hash.Hashing; +import com.kwartile.lib.cc.ConnectedComponent; + +import eu.dnetlib.dhp.application.ArgumentApplicationParser; +import eu.dnetlib.dhp.schema.common.EntityType; +import eu.dnetlib.dhp.schema.common.ModelConstants; +import eu.dnetlib.dhp.schema.common.ModelSupport; +import eu.dnetlib.dhp.schema.oaf.*; +import eu.dnetlib.dhp.schema.oaf.utils.PidType; +import eu.dnetlib.dhp.utils.ISLookupClientFactory; +import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpException; +import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpService; +import eu.dnetlib.pace.config.DedupConfig; import scala.Tuple3; import scala.collection.JavaConversions; -import java.io.IOException; -import java.time.LocalDate; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.Optional; - -import static eu.dnetlib.dhp.schema.common.ModelConstants.DNET_PROVENANCE_ACTIONS; -import static eu.dnetlib.dhp.schema.common.ModelConstants.PROVENANCE_DEDUP; -import static org.apache.spark.sql.functions.*; - public class SparkCreateMergeRels extends AbstractSparkAction { private static final Logger log = LoggerFactory.getLogger(SparkCreateMergeRels.class); @@ -121,6 +123,7 @@ public class SparkCreateMergeRels extends AbstractSparkAction { .distinct() .withColumn("vertexId", hashUDF.apply(functions.col("id"))); + // transform simrels into pairs of numeric ids final Dataset edges = spark .read() .load(DedupUtility.createSimRelPath(workingPath, actionSetId, subEntity)) @@ -128,27 +131,34 @@ public class SparkCreateMergeRels extends AbstractSparkAction { .withColumn("source", hashUDF.apply(functions.col("source"))) .withColumn("target", hashUDF.apply(functions.col("target"))); + // resolve connected components + // ("vertexId", "groupId") Dataset cliques = ConnectedComponent .runOnPairs(edges, 50, spark); + // transform "vertexId" back to its original string value + // groupId is kept numeric as its string value is not used + // ("id", "groupId") Dataset rawMergeRels = cliques .join(vertexIdMap, JavaConversions.asScalaBuffer(Collections.singletonList("vertexId")), "inner") .drop("vertexId") .distinct(); + // empty dataframe if historydatabase is not used Dataset pivotHistory = spark .createDataset( Collections.emptyList(), RowEncoder - .apply(StructType.fromDDL("id STRING, firstUsage STRING, lastUsage STRING, dedupId STRING"))); + .apply(StructType.fromDDL("id STRING, lastUsage STRING"))); if (StringUtils.isNotBlank(pivotHistoryDatabase)) { pivotHistory = spark .read() .table(pivotHistoryDatabase + "." + subEntity) - .selectExpr("id", "lastUsage", "dedupId"); + .selectExpr("id", "lastUsage"); } + // depending on resulttype collectefrom and dateofacceptance are evaluated differently String collectedfromExpr = "false AS collectedfrom"; String dateExpr = "'' AS date"; @@ -164,8 +174,10 @@ public class SparkCreateMergeRels extends AbstractSparkAction { dateExpr = "dateofacceptance.value AS date"; } + // cap pidType at w3id as from there on they are considered equal UserDefinedFunction mapPid = udf( (String s) -> Math.min(PidType.tryValueOf(s).ordinal(), PidType.w3id.ordinal()), DataTypes.IntegerType); + UserDefinedFunction validDate = udf((String date) -> { if (StringUtils.isNotBlank(date) && date.matches(DatePicker.DATE_PATTERN) && DatePicker.inRange(date)) { @@ -186,8 +198,6 @@ public class SparkCreateMergeRels extends AbstractSparkAction { .withColumn("pidType", mapPid.apply(col("pidType"))) // ordinal of pid type .withColumn("date", validDate.apply(col("date"))); - UserDefinedFunction generateDedupId = udf((String s) -> IdGenerator.generate(s), DataTypes.StringType); - // ordering to selected pivot id WindowSpec w = Window .partitionBy("groupId") @@ -202,17 +212,15 @@ public class SparkCreateMergeRels extends AbstractSparkAction { .join(pivotHistory, JavaConversions.asScalaBuffer(Collections.singletonList("id")), "full") .join(pivotingData, JavaConversions.asScalaBuffer(Collections.singletonList("id")), "left") .withColumn("pivot", functions.first("id").over(w)) - .withColumn("pivotDedupId", functions.first("dedupId").over(w)) .withColumn("position", functions.row_number().over(w)) - .filter(cut > 0 ? col("position").lt(lit(cut)) : lit(true)) - // .select("id", "groupId", "collectedfrom", "pivot", "dedupId", "pivotDedupId") - // .distinct() + .filter(cut > 0 ? col("position").lt(lit(cut)) : lit(true)) // apply cut after choosing pivot .flatMap( (FlatMapFunction>) (Row r) -> { String id = r.getAs("id"); + String dedupId = IdGenerator.generate(id); + String pivot = r.getAs("pivot"); - String pivotDedupId = r.getAs("pivotDedupId"); // dedupId associated with the pivot - String dedupId = r.getAs("dedupId"); // dedupId associated with this id if it was a pivot + String pivotDedupId = IdGenerator.generate(pivot); // filter out id == pivotDedupId // those are caused by claim expressed on pivotDedupId @@ -233,14 +241,9 @@ public class SparkCreateMergeRels extends AbstractSparkAction { return res.iterator(); } - // new pivot, assign pivotDedupId with current IdGenerator - if (StringUtils.isBlank(pivotDedupId)) { - pivotDedupId = IdGenerator.generate(pivot); - } - - // this was a pivot in a preceding graph but it has been merged into a new group with different + // this was a pivot in a previous graph but it has been merged into a new group with different // pivot - if (StringUtils.isNotBlank(dedupId) && !pivot.equals(id) && !dedupId.equals(pivotDedupId)) { + if (!r.isNullAt(r.fieldIndex("lastUsage")) && !pivot.equals(id) && !dedupId.equals(pivotDedupId)) { // materialize the previous dedup record as a merge relation with the new one res.add(new Tuple3<>(dedupId, pivotDedupId, null)); } From 831cc1fddececffc80701931ad9dab4d9926192b Mon Sep 17 00:00:00 2001 From: Giambattista Bloisi Date: Thu, 14 Dec 2023 11:51:02 +0100 Subject: [PATCH 424/449] Generate "merged" dedup id relations also for records that are filtered out by the cut parameters --- .../java/eu/dnetlib/dhp/oa/dedup/SparkCreateMergeRels.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkCreateMergeRels.java b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkCreateMergeRels.java index 46c29494e..191870d3b 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkCreateMergeRels.java +++ b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkCreateMergeRels.java @@ -213,7 +213,6 @@ public class SparkCreateMergeRels extends AbstractSparkAction { .join(pivotingData, JavaConversions.asScalaBuffer(Collections.singletonList("id")), "left") .withColumn("pivot", functions.first("id").over(w)) .withColumn("position", functions.row_number().over(w)) - .filter(cut > 0 ? col("position").lt(lit(cut)) : lit(true)) // apply cut after choosing pivot .flatMap( (FlatMapFunction>) (Row r) -> { String id = r.getAs("id"); @@ -249,7 +248,9 @@ public class SparkCreateMergeRels extends AbstractSparkAction { } // add merge relations - res.add(new Tuple3<>(id, pivotDedupId, pivot)); + if (cut <=0 || r.getAs("position") <= cut) { + res.add(new Tuple3<>(id, pivotDedupId, pivot)); + } return res.iterator(); }, Encoders.tuple(Encoders.STRING(), Encoders.STRING(), Encoders.STRING())) From 10e135db1eb26cf6383d02f2318c8e6701631553 Mon Sep 17 00:00:00 2001 From: Giambattista Bloisi Date: Fri, 22 Dec 2023 09:55:10 +0100 Subject: [PATCH 425/449] Use dedup_wf_002 in place of dedup_wf_001 to make explicit a different algorithm has been used to generate those kind of ids --- .../src/main/java/eu/dnetlib/dhp/oa/dedup/IdGenerator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/IdGenerator.java b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/IdGenerator.java index 37e1bfd15..1d3d4afdd 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/IdGenerator.java +++ b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/IdGenerator.java @@ -40,7 +40,7 @@ public class IdGenerator implements Serializable { if (PidType.isValid(pidType)) { return prefix + "|" + dedupify(ns) + "::" + suffix; } else { - return prefix + "|dedup_wf_001::" + md5(originalId); // hash the whole originalId to avoid collisions + return prefix + "|dedup_wf_002::" + md5(originalId); // hash the whole originalId to avoid collisions } } From 3c66e3bd7bd7fbe14f068b5176ae3681e941fda9 Mon Sep 17 00:00:00 2001 From: Giambattista Bloisi Date: Fri, 22 Dec 2023 09:57:30 +0100 Subject: [PATCH 426/449] Create dedup record for "merged" pivots Do not create dedup records for group that have more than 20 different acceptance date --- .../dhp/oa/dedup/DedupRecordFactory.java | 255 +++++++++++------- .../dnetlib/dhp/oa/dedup/SparkDedupTest.java | 4 +- 2 files changed, 158 insertions(+), 101 deletions(-) diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/DedupRecordFactory.java b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/DedupRecordFactory.java index d9fb24078..4c12d1dc6 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/DedupRecordFactory.java +++ b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/DedupRecordFactory.java @@ -1,130 +1,187 @@ package eu.dnetlib.dhp.oa.dedup; -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import org.apache.spark.api.java.function.MapFunction; -import org.apache.spark.api.java.function.ReduceFunction; -import org.apache.spark.sql.Dataset; -import org.apache.spark.sql.Encoders; -import org.apache.spark.sql.Row; -import org.apache.spark.sql.SparkSession; - -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; - import eu.dnetlib.dhp.oa.dedup.model.Identifier; import eu.dnetlib.dhp.oa.merge.AuthorMerger; import eu.dnetlib.dhp.schema.common.ModelSupport; -import eu.dnetlib.dhp.schema.oaf.*; +import eu.dnetlib.dhp.schema.oaf.Author; +import eu.dnetlib.dhp.schema.oaf.DataInfo; +import eu.dnetlib.dhp.schema.oaf.OafEntity; +import eu.dnetlib.dhp.schema.oaf.Result; +import org.apache.commons.beanutils.BeanUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.spark.api.java.function.FlatMapFunction; +import org.apache.spark.api.java.function.MapFunction; +import org.apache.spark.api.java.function.ReduceFunction; +import org.apache.spark.sql.*; import scala.Tuple2; +import scala.Tuple3; +import scala.collection.JavaConversions; + +import java.util.*; +import java.util.stream.Stream; public class DedupRecordFactory { + public static final class DedupRecordReduceState { + public final String dedupId; - protected static final ObjectMapper OBJECT_MAPPER = new ObjectMapper() - .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + public final ArrayList aliases = new ArrayList<>(); - private DedupRecordFactory() { - } + public final HashSet acceptanceDate = new HashSet<>(); - public static Dataset createDedupRecord( - final SparkSession spark, - final DataInfo dataInfo, - final String mergeRelsInputPath, - final String entitiesInputPath, - final Class clazz) { + public OafEntity entity; - long ts = System.currentTimeMillis(); + public DedupRecordReduceState(String dedupId, String id, OafEntity entity) { + this.dedupId = dedupId; + this.entity = entity; + if (entity == null) { + aliases.add(id); + } else { + if (Result.class.isAssignableFrom(entity.getClass())) { + Result result = (Result) entity; + if (result.getDateofacceptance() != null && StringUtils.isNotBlank(result.getDateofacceptance().getValue())) { + acceptanceDate.add(result.getDateofacceptance().getValue()); + } + } + } + } - // - Dataset entities = spark - .read() - .schema(Encoders.bean(clazz).schema()) - .json(entitiesInputPath) - .as(Encoders.bean(clazz)) - .map( - (MapFunction>) entity -> { - return new Tuple2<>(entity.getId(), entity); - }, - Encoders.tuple(Encoders.STRING(), Encoders.kryo(clazz))) - .selectExpr("_1 AS id", "_2 AS kryoObject"); + public String getDedupId() { + return dedupId; + } + } + private static final int MAX_ACCEPTANCE_DATE = 20; - // : source is the dedup_id, target is the id of the mergedIn - Dataset mergeRels = spark - .read() - .load(mergeRelsInputPath) - .where("relClass == 'merges'") - .selectExpr("source as dedupId", "target as id"); + private DedupRecordFactory() { + } - return mergeRels - .join(entities, "id") - .select("dedupId", "kryoObject") - .as(Encoders.tuple(Encoders.STRING(), Encoders.kryo(clazz))) - .groupByKey((MapFunction, String>) Tuple2::_1, Encoders.STRING()) - .reduceGroups( - (ReduceFunction>) (t1, t2) -> new Tuple2<>(t1._1(), - reduceEntity(t1._1(), t1._2(), t2._2(), clazz))) - .map( - (MapFunction>, T>) t -> { - T res = t._2()._2(); - res.setDataInfo(dataInfo); - res.setLastupdatetimestamp(ts); - return res; - }, - Encoders.bean(clazz)); - } + public static Dataset createDedupRecord( + final SparkSession spark, + final DataInfo dataInfo, + final String mergeRelsInputPath, + final String entitiesInputPath, + final Class clazz) { - public static T reduceEntity( - String id, T entity, T duplicate, Class clazz) { + final long ts = System.currentTimeMillis(); + final Encoder beanEncoder = Encoders.bean(clazz); + final Encoder kryoEncoder = Encoders.kryo(clazz); - int compare = new IdentifierComparator() - .compare(Identifier.newInstance(entity), Identifier.newInstance(duplicate)); + // + Dataset entities = spark + .read() + .schema(Encoders.bean(clazz).schema()) + .json(entitiesInputPath) + .as(beanEncoder) + .map( + (MapFunction>) entity -> { + return new Tuple2<>(entity.getId(), entity); + }, + Encoders.tuple(Encoders.STRING(), kryoEncoder)) + .selectExpr("_1 AS id", "_2 AS kryoObject"); - if (compare > 0) { - T swap = duplicate; - duplicate = entity; - entity = swap; + // : source is the dedup_id, target is the id of the mergedIn + Dataset mergeRels = spark + .read() + .load(mergeRelsInputPath) + .where("relClass == 'merges'") + .selectExpr("source as dedupId", "target as id"); + + return mergeRels + .join(entities, JavaConversions.asScalaBuffer(Collections.singletonList("id")), "left") + .select("dedupId", "id", "kryoObject") + .as(Encoders.tuple(Encoders.STRING(), Encoders.STRING(), kryoEncoder)) + .map((MapFunction, DedupRecordReduceState>) t -> new DedupRecordReduceState(t._1(), t._2(), t._3()), Encoders.kryo(DedupRecordReduceState.class)) + .groupByKey((MapFunction) DedupRecordReduceState::getDedupId, Encoders.STRING()) + .reduceGroups( + (ReduceFunction) (t1, t2) -> { + if (t1.entity == null) { + t2.aliases.addAll(t1.aliases); + return t2; + } + if (t1.acceptanceDate.size() < MAX_ACCEPTANCE_DATE) { + t1.acceptanceDate.addAll(t2.acceptanceDate); + } + t1.aliases.addAll(t2.aliases); + t1.entity = reduceEntity(t1.entity, t2.entity); + + return t1; + } + ) + .flatMap + ((FlatMapFunction, OafEntity>) t -> { + String dedupId = t._1(); + DedupRecordReduceState agg = t._2(); + + if (agg.acceptanceDate.size() >= MAX_ACCEPTANCE_DATE) { + return Collections.emptyIterator(); + } + + return Stream.concat(Stream.of(agg.getDedupId()), agg.aliases.stream()) + .map(id -> { + try { + OafEntity res = (OafEntity) BeanUtils.cloneBean(agg.entity); + res.setId(id); + res.setDataInfo(dataInfo); + res.setLastupdatetimestamp(ts); + return res; + } catch (Exception e) { + throw new RuntimeException(e); + } + }).iterator(); + }, beanEncoder); + } + + private static OafEntity reduceEntity(OafEntity entity, OafEntity duplicate) { + + if (duplicate == null) { + return entity; } - entity.mergeFrom(duplicate); - entity.setId(id); - if (ModelSupport.isSubClass(duplicate, Result.class)) { - Result re = (Result) entity; - Result rd = (Result) duplicate; + int compare = new IdentifierComparator<>() + .compare(Identifier.newInstance(entity), Identifier.newInstance(duplicate)); - List> authors = new ArrayList<>(); - if (re.getAuthor() != null) { - authors.add(re.getAuthor()); - } - if (rd.getAuthor() != null) { - authors.add(rd.getAuthor()); - } + if (compare > 0) { + OafEntity swap = duplicate; + duplicate = entity; + entity = swap; + } - re.setAuthor(AuthorMerger.merge(authors)); - } + entity.mergeFrom(duplicate); - return entity; - } + if (ModelSupport.isSubClass(duplicate, Result.class)) { + Result re = (Result) entity; + Result rd = (Result) duplicate; - public static T entityMerger( - String id, Iterator> entities, long ts, DataInfo dataInfo, Class clazz) - throws IllegalAccessException, InstantiationException, InvocationTargetException { - T base = entities.next()._2(); + List> authors = new ArrayList<>(); + if (re.getAuthor() != null) { + authors.add(re.getAuthor()); + } + if (rd.getAuthor() != null) { + authors.add(rd.getAuthor()); + } - while (entities.hasNext()) { - T duplicate = entities.next()._2(); - if (duplicate != null) - base = reduceEntity(id, base, duplicate, clazz); - } + re.setAuthor(AuthorMerger.merge(authors)); + } - base.setDataInfo(dataInfo); - base.setLastupdatetimestamp(ts); + return entity; + } - return base; - } + public static T entityMerger( + String id, Iterator> entities, long ts, DataInfo dataInfo, Class clazz) { + T base = entities.next()._2(); + + while (entities.hasNext()) { + T duplicate = entities.next()._2(); + if (duplicate != null) + base = (T) reduceEntity(base, duplicate); + } + + base.setId(id); + base.setDataInfo(dataInfo); + base.setLastupdatetimestamp(ts); + + return base; + } } diff --git a/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkDedupTest.java b/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkDedupTest.java index bd5a04e62..8b3480e60 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkDedupTest.java +++ b/dhp-workflows/dhp-dedup-openaire/src/test/java/eu/dnetlib/dhp/oa/dedup/SparkDedupTest.java @@ -611,7 +611,7 @@ public class SparkDedupTest implements Serializable { assertEquals(91, pubs.count()); assertEquals(47, sw_deduprecord); assertEquals(97, ds_deduprecord); - assertEquals(93, orp_deduprecord); + assertEquals(92, orp_deduprecord); verifyRoot_1(mapper, pubs); @@ -751,7 +751,7 @@ public class SparkDedupTest implements Serializable { assertEquals(100, datasource); assertEquals(196, softwares); assertEquals(389, dataset); - assertEquals(521, otherresearchproduct); + assertEquals(520, otherresearchproduct); // System.out.println("publications = " + publications); // System.out.println("organizations = " + organizations); From 2753044d13da0465b8b9061e70252ed6ac69a325 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Thu, 11 Jan 2024 16:28:26 +0100 Subject: [PATCH 427/449] refined mapping for the extraction of the original resource type --- .../dhp/oa/graph/raw/OafToOafMapper.java | 30 +++++++++++++++++-- .../dhp/oa/graph/raw/OdfToOafMapper.java | 19 ++++++++---- 2 files changed, 42 insertions(+), 7 deletions(-) diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/OafToOafMapper.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/OafToOafMapper.java index a63296d18..eee518353 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/OafToOafMapper.java +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/OafToOafMapper.java @@ -11,6 +11,7 @@ import java.util.List; import java.util.Set; import java.util.stream.Collectors; +import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.dom4j.Document; import org.dom4j.Element; @@ -27,6 +28,15 @@ import eu.dnetlib.dhp.schema.oaf.utils.ModelHardLimits; public class OafToOafMapper extends AbstractMdRecordToOafMapper { + private static Set DC_TYPE_PUBLICATION_VERSION = new HashSet<>(); + + static { + DC_TYPE_PUBLICATION_VERSION.add("info:eu-repo/semantics/submittedVersion"); + DC_TYPE_PUBLICATION_VERSION.add("info:eu-repo/semantics/acceptedVersion"); + DC_TYPE_PUBLICATION_VERSION.add("info:eu-repo/semantics/publishedVersion"); + DC_TYPE_PUBLICATION_VERSION.add("info:eu-repo/semantics/updatedVersion"); + } + public OafToOafMapper(final VocabularyGroup vocs, final boolean invisible, final boolean shouldHashId, final boolean forceOrginalId) { super(vocs, invisible, shouldHashId, forceOrginalId); @@ -192,24 +202,40 @@ public class OafToOafMapper extends AbstractMdRecordToOafMapper { /** * The Dublin Core element dc:type can be repeated, but we need to base our mapping on a single value * So this method tries to give precedence to the COAR resource type, when available. Otherwise, it looks for the - * openaire's info:eu-repo type, and as last resort picks the 1st type text available + * openaire's info:eu-repo type, but excluding the following + * + * info:eu-repo/semantics/draft + * info:eu-repo/semantics/submittedVersion + * info:eu-repo/semantics/acceptedVersion + * info:eu-repo/semantics/publishedVersion + * info:eu-repo/semantics/updatedVersion + * + * Then, it picks the 1st dc:type text available and, in case there is no dc:type element, as last resort it tries + * to extract the type from the dr:CobjCategory element + * + * Examples: * * http://purl.org/coar/resource_type/c_5794 * info:eu-repo/semantics/article * Conference article + * 0006 * * @param doc the input document * @return the chosen resource type */ @Override protected String findOriginalType(Document doc) { - return (String) doc + final String dcType = (String) doc .selectNodes("//dc:type") .stream() .map(o -> "" + ((Node) o).getText().trim()) + .filter(t -> !DC_TYPE_PUBLICATION_VERSION.contains(t)) .sorted(new OriginalTypeComparator()) .findFirst() .orElse(null); + + final String drCobjCategory = doc.valueOf("//dr:CobjCategory/text()"); + return ObjectUtils.firstNonNull(dcType, drCobjCategory); } @Override diff --git a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/OdfToOafMapper.java b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/OdfToOafMapper.java index e63b01a00..08529125c 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/OdfToOafMapper.java +++ b/dhp-workflows/dhp-graph-mapper/src/main/java/eu/dnetlib/dhp/oa/graph/raw/OdfToOafMapper.java @@ -221,27 +221,36 @@ public class OdfToOafMapper extends AbstractMdRecordToOafMapper { } /** - * The Datacite element + * Extracts the resource type from The Datacite element * - * journal article + * journal article * * @param doc the input document * @return the chosen resource type */ @Override protected String findOriginalType(Document doc) { - return Optional + final String resourceType = Optional .ofNullable( (Element) doc .selectSingleNode( "//*[local-name()='metadata']/*[local-name() = 'resource']/*[local-name() = 'resourceType']")) .map(element -> { - final String resourceTypeURI = element.attributeValue("anyURI"); + final String resourceTypeURI = element.attributeValue("uri"); + final String resourceTypeAnyURI = element.attributeValue("anyURI"); final String resourceTypeTxt = element.getText(); + final String resourceTypeGeneral = element.attributeValue("resourceTypeGeneral"); - return ObjectUtils.firstNonNull(resourceTypeURI, resourceTypeTxt); + return ObjectUtils + .firstNonNull(resourceTypeURI, resourceTypeAnyURI, resourceTypeTxt, resourceTypeGeneral); }) .orElse(null); + + final String drCobjCategory = doc.valueOf("//dr:CobjCategory/text()"); + return ObjectUtils.firstNonNull(resourceType, drCobjCategory); } @Override From f61212593975db113209f23ca17deb69075a7446 Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Fri, 12 Jan 2024 10:20:28 +0100 Subject: [PATCH 428/449] fix issue on FoS integration. Removing the null values from FoS --- .../PrepareFOSSparkJob.java | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/PrepareFOSSparkJob.java b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/PrepareFOSSparkJob.java index 57ad8b96a..b1ffe7f37 100644 --- a/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/PrepareFOSSparkJob.java +++ b/dhp-workflows/dhp-aggregation/src/main/java/eu/dnetlib/dhp/actionmanager/createunresolvedentities/PrepareFOSSparkJob.java @@ -124,8 +124,19 @@ public class PrepareFOSSparkJob implements Serializable { FOSDataModel first) { level1.add(first.getLevel1()); level2.add(first.getLevel2()); - level3.add(first.getLevel3() + "@@" + first.getScoreL3()); - level4.add(first.getLevel4() + "@@" + first.getScoreL4()); + if (Optional.ofNullable(first.getLevel3()).isPresent() && + !first.getLevel3().equalsIgnoreCase(NA) && !first.getLevel3().equalsIgnoreCase(NULL) + && first.getLevel3() != null) + level3.add(first.getLevel3() + "@@" + first.getScoreL3()); + else + level3.add(NULL); + if (Optional.ofNullable(first.getLevel4()).isPresent() && + !first.getLevel4().equalsIgnoreCase(NA) && + !first.getLevel4().equalsIgnoreCase(NULL) && + first.getLevel4() != null) + level4.add(first.getLevel4() + "@@" + first.getScoreL4()); + else + level4.add(NULL); } } From 21a14fcd800944d2a7fca1c70ad77726536f2b97 Mon Sep 17 00:00:00 2001 From: Giambattista Bloisi Date: Mon, 15 Jan 2024 00:08:07 +0100 Subject: [PATCH 429/449] Reusable RunSQLSparkJob for executing SQL in Spark through Oozie Spark Actions Implements pivots table update oozie workflow --- .../eu/dnetlib/dhp/oozie/RunSQLSparkJob.java | 75 +++++++++++++++ .../dnetlib/dhp/oozie/run_sql_parameters.json | 20 ++++ .../pivothistory/oozie_app/config-default.xml | 26 +++++ .../oa/dedup/pivothistory/oozie_app/sql.sql | 62 ++++++++++++ .../dedup/pivothistory/oozie_app/workflow.xml | 95 +++++++++++++++++++ 5 files changed, 278 insertions(+) create mode 100644 dhp-common/src/main/java/eu/dnetlib/dhp/oozie/RunSQLSparkJob.java create mode 100644 dhp-common/src/main/resources/eu/dnetlib/dhp/oozie/run_sql_parameters.json create mode 100644 dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/pivothistory/oozie_app/config-default.xml create mode 100644 dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/pivothistory/oozie_app/sql.sql create mode 100644 dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/pivothistory/oozie_app/workflow.xml diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/oozie/RunSQLSparkJob.java b/dhp-common/src/main/java/eu/dnetlib/dhp/oozie/RunSQLSparkJob.java new file mode 100644 index 000000000..ef296bfc9 --- /dev/null +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/oozie/RunSQLSparkJob.java @@ -0,0 +1,75 @@ + +package eu.dnetlib.dhp.oozie; + +import com.google.common.io.Resources; +import eu.dnetlib.dhp.application.ArgumentApplicationParser; +import org.apache.commons.lang3.time.DurationFormatUtils; +import org.apache.commons.text.StringSubstitutor; +import org.apache.spark.SparkConf; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.net.URL; +import java.nio.charset.StandardCharsets; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + +import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkHiveSession; + +public class RunSQLSparkJob { + private static final Logger log = LoggerFactory.getLogger(RunSQLSparkJob.class); + + private final ArgumentApplicationParser parser; + + public RunSQLSparkJob(ArgumentApplicationParser parser) { + this.parser = parser; + } + + public static void main(String[] args) throws Exception { + + Map params = new HashMap<>(); + for (int i = 0; i < args.length - 1; i++) { + if (args[i].startsWith("--")) { + params.put(args[i].substring(2), args[++i]); + } + } + + /* + * String jsonConfiguration = IOUtils .toString( Objects .requireNonNull( RunSQLSparkJob.class + * .getResourceAsStream( "/eu/dnetlib/dhp/oozie/run_sql_parameters.json"))); final ArgumentApplicationParser + * parser = new ArgumentApplicationParser(jsonConfiguration); parser.parseArgument(args); + */ + + Boolean isSparkSessionManaged = Optional + .ofNullable(params.get("isSparkSessionManaged")) + .map(Boolean::valueOf) + .orElse(Boolean.TRUE); + log.info("isSparkSessionManaged: {}", isSparkSessionManaged); + + URL url = com.google.common.io.Resources.getResource(params.get("sql")); + String raw_sql = Resources.toString(url, StandardCharsets.UTF_8); + + String sql = StringSubstitutor.replace(raw_sql, params); + log.info("sql: {}", sql); + + SparkConf conf = new SparkConf(); + conf.set("hive.metastore.uris", params.get("hiveMetastoreUris")); + + runWithSparkHiveSession( + conf, + isSparkSessionManaged, + spark -> { + for (String statement : sql.split(";\\s*/\\*\\s*EOS\\s*\\*/\\s*")) { + log.info("executing: {}", statement); + long startTime = System.currentTimeMillis(); + spark.sql(statement).show(); + log + .info( + "executed in {}", + DurationFormatUtils.formatDuration(System.currentTimeMillis() - startTime, "HH:mm:ss.S")); + } + }); + } + +} diff --git a/dhp-common/src/main/resources/eu/dnetlib/dhp/oozie/run_sql_parameters.json b/dhp-common/src/main/resources/eu/dnetlib/dhp/oozie/run_sql_parameters.json new file mode 100644 index 000000000..355f38e2f --- /dev/null +++ b/dhp-common/src/main/resources/eu/dnetlib/dhp/oozie/run_sql_parameters.json @@ -0,0 +1,20 @@ +[ + { + "paramName": "issm", + "paramLongName": "isSparkSessionManaged", + "paramDescription": "when true will stop SparkSession after job execution", + "paramRequired": false + }, + { + "paramName": "hmu", + "paramLongName": "hiveMetastoreUris", + "paramDescription": "the hive metastore uris", + "paramRequired": true + }, + { + "paramName": "sql", + "paramLongName": "sql", + "paramDescription": "sql script to execute", + "paramRequired": true + } +] \ No newline at end of file diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/pivothistory/oozie_app/config-default.xml b/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/pivothistory/oozie_app/config-default.xml new file mode 100644 index 000000000..17bb70647 --- /dev/null +++ b/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/pivothistory/oozie_app/config-default.xml @@ -0,0 +1,26 @@ + + + jobTracker + yarnRM + + + nameNode + hdfs://nameservice1 + + + oozie.use.system.libpath + true + + + oozie.action.sharelib.for.spark + spark2 + + + hiveMetastoreUris + thrift://iis-cdh5-test-m3.ocean.icm.edu.pl:9083 + + + sparkSqlWarehouseDir + /user/hive/warehouse + + \ No newline at end of file diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/pivothistory/oozie_app/sql.sql b/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/pivothistory/oozie_app/sql.sql new file mode 100644 index 000000000..86dbda1c9 --- /dev/null +++ b/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/pivothistory/oozie_app/sql.sql @@ -0,0 +1,62 @@ + +CREATE TABLE `${pivot_history_db}`.`dataset_new` STORED AS PARQUET AS +WITH pivots ( + SELECT property.value AS id, '${new_graph_date}' AS usedIn FROM `${new_graph_db}`.`relation` + LEFT SEMI JOIN `${new_graph_db}`.`dataset` ON relation.source = dataset.id + LATERAL VIEW EXPLODE(properties) AS property WHERE relClass = 'isMergedIn' AND property.key = 'pivot' +UNION + SELECT id, usedIn FROM `${pivot_history_db}`.`dataset` LATERAL VIEW EXPLODE(usages) AS usedIn +) +SELECT id, min(usedIn) as firstUsage, max(usedIn) as lastUsage, collect_set(usedIn) as usages + FROM pivots + GROUP BY id; /*EOS*/ +CREATE TABLE `${pivot_history_db}`.`publication_new` STORED AS PARQUET AS +WITH pivots ( + SELECT property.value AS id, '${new_graph_date}' AS usedIn FROM `${new_graph_db}`.`relation` + LEFT SEMI JOIN `${new_graph_db}`.`publication` ON relation.source = publication.id + LATERAL VIEW EXPLODE(properties) AS property WHERE relClass = 'isMergedIn' AND property.key = 'pivot' +UNION + SELECT id, usedIn FROM `${pivot_history_db}`.`publication` LATERAL VIEW EXPLODE(usages) AS usedIn +) +SELECT id, min(usedIn) as firstUsage, max(usedIn) as lastUsage, collect_set(usedIn) as usages + FROM pivots + GROUP BY id; /*EOS*/ +CREATE TABLE `${pivot_history_db}`.`software_new` STORED AS PARQUET AS +WITH pivots ( + SELECT property.value AS id, '${new_graph_date}' AS usedIn FROM `${new_graph_db}`.`relation` + LEFT SEMI JOIN `${new_graph_db}`.`software` ON relation.source = software.id + LATERAL VIEW EXPLODE(properties) AS property WHERE relClass = 'isMergedIn' AND property.key = 'pivot' +UNION + SELECT id, usedIn FROM `${pivot_history_db}`.`software` LATERAL VIEW EXPLODE(usages) AS usedIn +) +SELECT id, min(usedIn) as firstUsage, max(usedIn) as lastUsage, collect_set(usedIn) as usages + FROM pivots + GROUP BY id; /*EOS*/ +CREATE TABLE `${pivot_history_db}`.`otherresearchproduct_new` STORED AS PARQUET AS +WITH pivots ( + SELECT property.value AS id, '${new_graph_date}' AS usedIn FROM `${new_graph_db}`.`relation` + LEFT SEMI JOIN `${new_graph_db}`.`otherresearchproduct` ON relation.source = otherresearchproduct.id + LATERAL VIEW EXPLODE(properties) AS property WHERE relClass = 'isMergedIn' AND property.key = 'pivot' +UNION + SELECT id, usedIn FROM `${pivot_history_db}`.`otherresearchproduct` LATERAL VIEW EXPLODE(usages) AS usedIn +) +SELECT id, min(usedIn) as firstUsage, max(usedIn) as lastUsage, collect_set(usedIn) as usages + FROM pivots + GROUP BY id; /*EOS*/ + + +DROP TABLE IF EXISTS `${pivot_history_db}`.`dataset_old`; /*EOS*/ +ALTER TABLE `${pivot_history_db}`.`dataset` RENAME TO `${pivot_history_db}`.`dataset_old`; /*EOS*/ +ALTER TABLE `${pivot_history_db}`.`dataset_new` RENAME TO `${pivot_history_db}`.`dataset`; /*EOS*/ + +DROP TABLE IF EXISTS `${pivot_history_db}`.`publication_old`; /*EOS*/ +ALTER TABLE `${pivot_history_db}`.`publication` RENAME TO `${pivot_history_db}`.`publication_old`; /*EOS*/ +ALTER TABLE `${pivot_history_db}`.`publication_new` RENAME TO `${pivot_history_db}`.`publication`; /*EOS*/ + +DROP TABLE IF EXISTS `${pivot_history_db}`.`software_old`; /*EOS*/ +ALTER TABLE `${pivot_history_db}`.`software` RENAME TO `${pivot_history_db}`.`software_old`; /*EOS*/ +ALTER TABLE `${pivot_history_db}`.`software_new` RENAME TO `${pivot_history_db}`.`software`; /*EOS*/ + +DROP TABLE IF EXISTS `${pivot_history_db}`.`otherresearchproduct_old`; /*EOS*/ +ALTER TABLE `${pivot_history_db}`.`otherresearchproduct` RENAME TO `${pivot_history_db}`.`otherresearchproduct_old`; /*EOS*/ +ALTER TABLE `${pivot_history_db}`.`otherresearchproduct_new` RENAME TO `${pivot_history_db}`.`otherresearchproduct`; /*EOS*/ diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/pivothistory/oozie_app/workflow.xml b/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/pivothistory/oozie_app/workflow.xml new file mode 100644 index 000000000..d562f088e --- /dev/null +++ b/dhp-workflows/dhp-dedup-openaire/src/main/resources/eu/dnetlib/dhp/oa/dedup/pivothistory/oozie_app/workflow.xml @@ -0,0 +1,95 @@ + + + + + pivot_history_db + + Pivot history DB on hive + + + new_graph_db + + New graph DB on hive + + + new_graph_date + + Creation date of new graph db + + + + + hiveMetastoreUris + hive server metastore URIs + + + sparkSqlWarehouseDir + + + + sparkClusterOpts + --conf spark.network.timeout=600 --conf spark.extraListeners= --conf spark.sql.queryExecutionListeners= --conf spark.yarn.historyServer.address=http://iis-cdh5-test-m3.ocean.icm.edu.pl:18088 --conf spark.eventLog.dir=hdfs://nameservice1/user/spark/applicationHistory + spark cluster-wide options + + + sparkResourceOpts + --executor-memory=3G --conf spark.executor.memoryOverhead=3G --executor-cores=6 --driver-memory=8G --driver-cores=4 + spark resource options + + + sparkApplicationOpts + --conf spark.sql.shuffle.partitions=3840 + spark resource options + + + + + ${jobTracker} + ${nameNode} + + + mapreduce.job.queuename + ${queueName} + + + oozie.launcher.mapred.job.queue.name + ${oozieLauncherQueueName} + + + oozie.action.sharelib.for.spark + ${oozieActionShareLibForSpark2} + + + + + + + + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + + + + yarn + cluster + Upgrade Pivot History + eu.dnetlib.dhp.oozie.RunSQLSparkJob + dhp-dedup-openaire-${projectVersion}.jar + + --conf spark.sql.warehouse.dir=${sparkSqlWarehouseDir} + ${sparkClusterOpts} + ${sparkResourceOpts} + ${sparkApplicationOpts} + + --hiveMetastoreUris${hiveMetastoreUris} + --sqleu/dnetlib/dhp/oa/dedup/pivothistory/oozie_app/sql.sql + --pivot_history_db${pivot_history_db} + --new_graph_db${new_graph_db} + --new_graph_date${new_graph_date} + + + + + + + \ No newline at end of file From 59eaccbd87197095c50c902458bf84777932e51f Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Mon, 15 Jan 2024 17:49:54 +0100 Subject: [PATCH 430/449] [enrichment single step] refactoring to fix issue in disappeared result type --- .../main/java/eu/dnetlib/dhp/MoveResult.java | 84 +++++++++++++++++++ ...kResultToCommunityFromOrganizationJob.java | 66 +++++++++------ .../SparkResultToCommunityFromProject.java | 41 ++++----- .../eu/dnetlib/dhp/wf/main/job.properties | 6 +- .../dhp/wf/main/oozie_app/workflow.xml | 2 +- .../input_moveresult_parameters.json | 22 +++++ .../oozie_app/workflow.xml | 29 ++++++- .../oozie_app/workflow.xml | 29 ++++++- 8 files changed, 225 insertions(+), 54 deletions(-) create mode 100644 dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/MoveResult.java create mode 100644 dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/input_moveresult_parameters.json diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/MoveResult.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/MoveResult.java new file mode 100644 index 000000000..5ffcf8d3f --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/MoveResult.java @@ -0,0 +1,84 @@ + +package eu.dnetlib.dhp; + +import static eu.dnetlib.dhp.PropagationConstant.isSparkSessionManaged; +import static eu.dnetlib.dhp.PropagationConstant.readPath; +import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkSession; + +import java.io.Serializable; + +import org.apache.commons.io.IOUtils; +import org.apache.spark.SparkConf; +import org.apache.spark.sql.Dataset; +import org.apache.spark.sql.SaveMode; +import org.apache.spark.sql.SparkSession; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import eu.dnetlib.dhp.application.ArgumentApplicationParser; +import eu.dnetlib.dhp.resulttocommunityfromorganization.SparkResultToCommunityFromOrganizationJob; +import eu.dnetlib.dhp.schema.common.ModelSupport; +import eu.dnetlib.dhp.schema.oaf.Result; + +/** + * @author miriam.baglioni + * @Date 15/01/24 + */ +public class MoveResult implements Serializable { + private static final Logger log = LoggerFactory.getLogger(MoveResult.class); + + public static void main(String[] args) throws Exception { + String jsonConfiguration = IOUtils + .toString( + SparkResultToCommunityFromOrganizationJob.class + .getResourceAsStream( + "/eu/dnetlib/dhp/wf/subworkflows/input_moveresult_parameters.json")); + + final ArgumentApplicationParser parser = new ArgumentApplicationParser(jsonConfiguration); + + parser.parseArgument(args); + + Boolean isSparkSessionManaged = isSparkSessionManaged(parser); + log.info("isSparkSessionManaged: {}", isSparkSessionManaged); + + String inputPath = parser.get("sourcePath"); + log.info("inputPath: {}", inputPath); + + final String outputPath = parser.get("outputPath"); + log.info("outputPath: {}", outputPath); + + SparkConf conf = new SparkConf(); + + runWithSparkSession( + conf, + isSparkSessionManaged, + spark -> { + moveResults(spark, inputPath, outputPath); + + }); + } + + public static void moveResults(SparkSession spark, String inputPath, String outputPath) { + + ModelSupport.entityTypes + .keySet() + .parallelStream() + .filter(e -> ModelSupport.isResult(e)) + // .parallelStream() + .forEach(e -> { + Class resultClazz = ModelSupport.entityTypes.get(e); + Dataset resultDataset = readPath(spark, inputPath + e.name(), resultClazz); + if (resultDataset.count() > 0) { + + resultDataset + .write() + .mode(SaveMode.Overwrite) + .option("compression", "gzip") + .json(outputPath + e.name()); + } + + }); + + } + +} diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromorganization/SparkResultToCommunityFromOrganizationJob.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromorganization/SparkResultToCommunityFromOrganizationJob.java index cc87b80e5..4f755266a 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromorganization/SparkResultToCommunityFromOrganizationJob.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromorganization/SparkResultToCommunityFromOrganizationJob.java @@ -76,29 +76,41 @@ public class SparkResultToCommunityFromOrganizationJob { ModelSupport.entityTypes .keySet() .parallelStream() + .filter(e -> ModelSupport.isResult(e)) + // .parallelStream() .forEach(e -> { - if (ModelSupport.isResult(e)) { - Class resultClazz = ModelSupport.entityTypes.get(e); - removeOutputDir(spark, outputPath + e.name()); - Dataset result = readPath(spark, inputPath + e.name(), resultClazz); + // if () { + Class resultClazz = ModelSupport.entityTypes.get(e); + removeOutputDir(spark, outputPath + e.name()); + Dataset result = readPath(spark, inputPath + e.name(), resultClazz); - result - .joinWith( - possibleUpdates, - result.col("id").equalTo(possibleUpdates.col("resultId")), - "left_outer") - .map(resultCommunityFn(), Encoders.bean(resultClazz)) - .write() - .mode(SaveMode.Overwrite) - .option("compression", "gzip") - .json(outputPath + e.name()); + log.info("executing left join"); + result + .joinWith( + possibleUpdates, + result.col("id").equalTo(possibleUpdates.col("resultId")), + "left_outer") + .map(resultCommunityFn(), Encoders.bean(resultClazz)) + .write() + .mode(SaveMode.Overwrite) + .option("compression", "gzip") + .json(outputPath + e.name()); - readPath(spark, outputPath + e.name(), resultClazz) - .write() - .mode(SaveMode.Overwrite) - .option("compression", "gzip") - .json(inputPath + e.name()); - } +// log +// .info( +// "reading results from " + outputPath + e.name() + " and copying them to " + inputPath +// + e.name()); +// Dataset tmp = readPath(spark, outputPath + e.name(), resultClazz); +// if (tmp.count() > 0){ +// +// tmp +// .write() +// .mode(SaveMode.Overwrite) +// .option("compression", "gzip") +// .json(inputPath + e.name()); +// } + + // } }); } @@ -115,11 +127,11 @@ public class SparkResultToCommunityFromOrganizationJob { .map(Context::getId) .collect(Collectors.toList()); - @SuppressWarnings("unchecked") - R res = (R) ret.getClass().newInstance(); + // @SuppressWarnings("unchecked") + // R res = (R) ret.getClass().newInstance(); - res.setId(ret.getId()); - List propagatedContexts = new ArrayList<>(); + // res.setId(ret.getId()); + // List propagatedContexts = new ArrayList<>(); for (String cId : communitySet) { if (!contextList.contains(cId)) { Context newContext = new Context(); @@ -133,11 +145,11 @@ public class SparkResultToCommunityFromOrganizationJob { PROPAGATION_RESULT_COMMUNITY_ORGANIZATION_CLASS_ID, PROPAGATION_RESULT_COMMUNITY_ORGANIZATION_CLASS_NAME, ModelConstants.DNET_PROVENANCE_ACTIONS))); - propagatedContexts.add(newContext); + ret.getContext().add(newContext); } } - res.setContext(propagatedContexts); - ret.mergeFrom(res); + // res.setContext(propagatedContexts); + // ret.mergeFrom(res); } return ret; }; diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/SparkResultToCommunityFromProject.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/SparkResultToCommunityFromProject.java index dde534061..bb712d878 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/SparkResultToCommunityFromProject.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/SparkResultToCommunityFromProject.java @@ -86,29 +86,30 @@ public class SparkResultToCommunityFromProject implements Serializable { ModelSupport.entityTypes .keySet() .parallelStream() + .filter(e -> ModelSupport.isResult(e)) .forEach(e -> { - if (ModelSupport.isResult(e)) { - removeOutputDir(spark, outputPath + e.name()); - Class resultClazz = ModelSupport.entityTypes.get(e); - Dataset result = readPath(spark, inputPath + e.name(), resultClazz); + // if () { + removeOutputDir(spark, outputPath + e.name()); + Class resultClazz = ModelSupport.entityTypes.get(e); + Dataset result = readPath(spark, inputPath + e.name(), resultClazz); - result - .joinWith( - possibleUpdates, - result.col("id").equalTo(possibleUpdates.col("resultId")), - "left_outer") - .map(resultCommunityFn(), Encoders.bean(resultClazz)) - .write() - .mode(SaveMode.Overwrite) - .option("compression", "gzip") - .json(outputPath + e.name()); + result + .joinWith( + possibleUpdates, + result.col("id").equalTo(possibleUpdates.col("resultId")), + "left_outer") + .map(resultCommunityFn(), Encoders.bean(resultClazz)) + .write() + .mode(SaveMode.Overwrite) + .option("compression", "gzip") + .json(outputPath + e.name()); - readPath(spark, outputPath + e.name(), resultClazz) - .write() - .mode(SaveMode.Overwrite) - .option("compression", "gzip") - .json(inputPath + e.name()); - } + readPath(spark, outputPath + e.name(), resultClazz) + .write() + .mode(SaveMode.Overwrite) + .option("compression", "gzip") + .json(inputPath + e.name()); + // } }); } diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/job.properties b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/job.properties index 4cb759343..a84e8ab6b 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/job.properties +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/job.properties @@ -1,12 +1,12 @@ -sourcePath=/tmp/beta_provision/graph/09_graph_dedup_enriched -resumeFrom=CountryPropagation +sourcePath=/tmp/beta_provision/graph/10_graph_orcid_enriched +resumeFrom=CommunityOrganization allowedsemrelsorcidprop=isSupplementedBy;isSupplementTo allowedsemrelsresultproject=isSupplementedBy;isSupplementTo allowedsemrelscommunitysemrel=isSupplementedBy;isSupplementTo datasourceWhitelistForCountryPropagation=10|opendoar____::16e6a3326dd7d868cbc926602a61e4d0;10|openaire____::fdb035c8b3e0540a8d9a561a6c44f4de;10|eurocrisdris::fe4903425d9040f680d8610d9079ea14;10|openaire____::5b76240cc27a58c6f7ceef7d8c36660e;10|openaire____::172bbccecf8fca44ab6a6653e84cb92a;10|openaire____::149c6590f8a06b46314eed77bfca693f;10|eurocrisdris::a6026877c1a174d60f81fd71f62df1c1;10|openaire____::4692342f0992d91f9e705c26959f09e0;10|openaire____::8d529dbb05ec0284662b391789e8ae2a;10|openaire____::345c9d171ef3c5d706d08041d506428c;10|opendoar____::1c1d4df596d01da60385f0bb17a4a9e0;10|opendoar____::7a614fd06c325499f1680b9896beedeb;10|opendoar____::1ee3dfcd8a0645a25a35977997223d22;10|opendoar____::d296c101daa88a51f6ca8cfc1ac79b50;10|opendoar____::798ed7d4ee7138d49b8828958048130a;10|openaire____::c9d2209ecc4d45ba7b4ca7597acb88a2;10|eurocrisdris::c49e0fe4b9ba7b7fab717d1f0f0a674d;10|eurocrisdris::9ae43d14471c4b33661fedda6f06b539;10|eurocrisdris::432ca599953ff50cd4eeffe22faf3e48 #allowedtypes=pubsrepository::institutional allowedtypes=Institutional -outputPath=/tmp/miriam/enrichment_one_step +outputPath=/tmp/beta_provision/graph/11_graph_orcid pathMap ={"author":"$['author'][*]['fullname']", \ "title":"$['title'][*]['value']",\ "orcid":"$['author'][*]['pid'][*][?(@['qualifier']['classid']=='orcid')]['value']" ,\ diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/oozie_app/workflow.xml index 8e91707b6..9b7fad325 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/oozie_app/workflow.xml @@ -231,7 +231,7 @@ - + diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/input_moveresult_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/input_moveresult_parameters.json new file mode 100644 index 000000000..4645be435 --- /dev/null +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/input_moveresult_parameters.json @@ -0,0 +1,22 @@ +[ + { + "paramName":"s", + "paramLongName":"sourcePath", + "paramDescription": "the path of the sequencial file to read", + "paramRequired": true + }, + + { + "paramName": "out", + "paramLongName": "outputPath", + "paramDescription": "the path used to store temporary output files", + "paramRequired": true + }, + { + "paramName": "ssm", + "paramLongName": "isSparkSessionManaged", + "paramDescription": "true if the spark session is managed, false otherwise", + "paramRequired": false + } + +] \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromorganization/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromorganization/oozie_app/workflow.xml index 6aeffb457..18c5f4f0f 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromorganization/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromorganization/oozie_app/workflow.xml @@ -69,7 +69,7 @@ yarn cluster - community2resultfromorganization-Publication + community2resultfromorganization eu.dnetlib.dhp.resulttocommunityfromorganization.SparkResultToCommunityFromOrganizationJob dhp-enrichment-${projectVersion}.jar @@ -88,6 +88,33 @@ --sourcePath${sourcePath}/ --outputPath${workingDir}/communityorganization/resulttocommunityfromorganization/ + + + + + + + yarn + cluster + community2resultfromorganization - move results + eu.dnetlib.dhp.MoveResult + dhp-enrichment-${projectVersion}.jar + + --executor-cores=6 + --executor-memory=5G + --conf spark.executor.memoryOverhead=3g + --conf spark.sql.shuffle.partitions=3284 + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} + + --sourcePath${workingDir}/communityorganization/resulttocommunityfromorganization/ + --outputPath${sourcePath}/ + + diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromproject/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromproject/oozie_app/workflow.xml index dd845064b..01e366c02 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromproject/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromproject/oozie_app/workflow.xml @@ -86,12 +86,37 @@ --sourcePath${sourcePath}/ --outputPath${workingDir}/communitythroughproject/ + + + + + + + yarn + cluster + community2resultfromorganization - move results + eu.dnetlib.dhp.MoveResult + dhp-enrichment-${projectVersion}.jar + + --executor-cores=6 + --executor-memory=5G + --conf spark.executor.memoryOverhead=3g + --conf spark.sql.shuffle.partitions=3284 + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} + + --sourcePath${workingDir}/communitythroughproject/ + --outputPath${sourcePath}/ + + - - \ No newline at end of file From 67ce2d54be4019d3d1aa157cbc1d50eb03f1ea59 Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Wed, 17 Jan 2024 16:50:00 +0100 Subject: [PATCH 431/449] [enrichment single step] refactoring to fix issues in disappeared result type --- .../SparkCountryPropagationJob.java | 6 -- .../SparkResultToCommunityFromProject.java | 10 +- ...parkResultToCommunityThroughSemRelJob.java | 21 +---- .../eu/dnetlib/dhp/wf/main/job.properties | 4 +- .../dhp/wf/main/oozie_app/workflow.xml | 2 +- .../bulktag/oozie_app/config-default.xml | 12 ++- .../bulktag/oozie_app/workflow.xml | 18 +++- .../oozie_app/config-default.xml | 4 +- .../countrypropagation/oozie_app/workflow.xml | 92 ++++++++++++++----- .../oozie_app/workflow.xml | 15 ++- .../oozie_app/workflow.xml | 20 ++-- .../projecttoresult/oozie_app/workflow.xml | 15 ++- .../input_moveresult_parameters.json | 0 .../oozie_app/workflow.xml | 14 ++- .../oozie_app/workflow.xml | 16 +++- .../oozie_app/workflow.xml | 49 +++++++++- .../oozie_app/workflow.xml | 14 ++- 17 files changed, 229 insertions(+), 83 deletions(-) rename dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/{ => resulttocommunityfromorganization}/input_moveresult_parameters.json (100%) diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/countrypropagation/SparkCountryPropagationJob.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/countrypropagation/SparkCountryPropagationJob.java index 92930c18b..a0cc4c84a 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/countrypropagation/SparkCountryPropagationJob.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/countrypropagation/SparkCountryPropagationJob.java @@ -97,12 +97,6 @@ public class SparkCountryPropagationJob { .mode(SaveMode.Overwrite) .json(outputPath); - readPath(spark, outputPath, resultClazz) - .write() - .mode(SaveMode.Overwrite) - .option("compression", "gzip") - .json(sourcePath); - } private static MapFunction, R> getCountryMergeFn() { diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/SparkResultToCommunityFromProject.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/SparkResultToCommunityFromProject.java index bb712d878..f9c36d7ca 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/SparkResultToCommunityFromProject.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromproject/SparkResultToCommunityFromProject.java @@ -104,11 +104,11 @@ public class SparkResultToCommunityFromProject implements Serializable { .option("compression", "gzip") .json(outputPath + e.name()); - readPath(spark, outputPath + e.name(), resultClazz) - .write() - .mode(SaveMode.Overwrite) - .option("compression", "gzip") - .json(inputPath + e.name()); +// readPath(spark, outputPath + e.name(), resultClazz) +// .write() +// .mode(SaveMode.Overwrite) +// .option("compression", "gzip") +// .json(inputPath + e.name()); // } }); diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromsemrel/SparkResultToCommunityThroughSemRelJob.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromsemrel/SparkResultToCommunityThroughSemRelJob.java index 4929c7582..3cf2f73c3 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromsemrel/SparkResultToCommunityThroughSemRelJob.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/resulttocommunityfromsemrel/SparkResultToCommunityThroughSemRelJob.java @@ -101,11 +101,6 @@ public class SparkResultToCommunityThroughSemRelJob { .option("compression", "gzip") .json(outputPath); - readPath(spark, outputPath, resultClazz) - .write() - .mode(SaveMode.Overwrite) - .option("compression", "gzip") - .json(inputPath); } private static MapFunction, R> contextUpdaterFn() { @@ -115,11 +110,11 @@ public class SparkResultToCommunityThroughSemRelJob { if (rcl.isPresent()) { Set contexts = new HashSet<>(); ret.getContext().forEach(c -> contexts.add(c.getId())); - List contextList = rcl + rcl .get() .getCommunityList() .stream() - .map( + .forEach( c -> { if (!contexts.contains(c)) { Context newContext = new Context(); @@ -133,19 +128,11 @@ public class SparkResultToCommunityThroughSemRelJob { PROPAGATION_RESULT_COMMUNITY_SEMREL_CLASS_ID, PROPAGATION_RESULT_COMMUNITY_SEMREL_CLASS_NAME, ModelConstants.DNET_PROVENANCE_ACTIONS))); - return newContext; + ret.getContext().add(newContext); } - return null; - }) - .filter(Objects::nonNull) - .collect(Collectors.toList()); - @SuppressWarnings("unchecked") - R r = (R) ret.getClass().newInstance(); + }); - r.setId(ret.getId()); - r.setContext(contextList); - ret.mergeFrom(r); } return ret; diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/job.properties b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/job.properties index a84e8ab6b..7e82d9b2c 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/job.properties +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/job.properties @@ -1,12 +1,12 @@ sourcePath=/tmp/beta_provision/graph/10_graph_orcid_enriched -resumeFrom=CommunityOrganization +resumeFrom=CommunitySemanticRelation allowedsemrelsorcidprop=isSupplementedBy;isSupplementTo allowedsemrelsresultproject=isSupplementedBy;isSupplementTo allowedsemrelscommunitysemrel=isSupplementedBy;isSupplementTo datasourceWhitelistForCountryPropagation=10|opendoar____::16e6a3326dd7d868cbc926602a61e4d0;10|openaire____::fdb035c8b3e0540a8d9a561a6c44f4de;10|eurocrisdris::fe4903425d9040f680d8610d9079ea14;10|openaire____::5b76240cc27a58c6f7ceef7d8c36660e;10|openaire____::172bbccecf8fca44ab6a6653e84cb92a;10|openaire____::149c6590f8a06b46314eed77bfca693f;10|eurocrisdris::a6026877c1a174d60f81fd71f62df1c1;10|openaire____::4692342f0992d91f9e705c26959f09e0;10|openaire____::8d529dbb05ec0284662b391789e8ae2a;10|openaire____::345c9d171ef3c5d706d08041d506428c;10|opendoar____::1c1d4df596d01da60385f0bb17a4a9e0;10|opendoar____::7a614fd06c325499f1680b9896beedeb;10|opendoar____::1ee3dfcd8a0645a25a35977997223d22;10|opendoar____::d296c101daa88a51f6ca8cfc1ac79b50;10|opendoar____::798ed7d4ee7138d49b8828958048130a;10|openaire____::c9d2209ecc4d45ba7b4ca7597acb88a2;10|eurocrisdris::c49e0fe4b9ba7b7fab717d1f0f0a674d;10|eurocrisdris::9ae43d14471c4b33661fedda6f06b539;10|eurocrisdris::432ca599953ff50cd4eeffe22faf3e48 #allowedtypes=pubsrepository::institutional allowedtypes=Institutional -outputPath=/tmp/beta_provision/graph/11_graph_orcid +outputPath=/tmp/miriam/graph/11_graph_orcid pathMap ={"author":"$['author'][*]['fullname']", \ "title":"$['title'][*]['value']",\ "orcid":"$['author'][*]['pid'][*][?(@['qualifier']['classid']=='orcid')]['value']" ,\ diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/oozie_app/workflow.xml index 9b7fad325..8e91707b6 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/oozie_app/workflow.xml @@ -231,7 +231,7 @@ - + diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/bulktag/oozie_app/config-default.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/bulktag/oozie_app/config-default.xml index fe82ae194..2695253e6 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/bulktag/oozie_app/config-default.xml +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/bulktag/oozie_app/config-default.xml @@ -45,10 +45,18 @@ sparkExecutorMemory - 6G + 5G sparkExecutorCores - 1 + 4 + + + memoryOverhead + 3G + + + partitions + 3284 \ No newline at end of file diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/bulktag/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/bulktag/oozie_app/workflow.xml index 6c5163448..c7a9e8a26 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/bulktag/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/bulktag/oozie_app/workflow.xml @@ -12,6 +12,10 @@ baseURL The URL to access the community APIs + + startFrom> + undelete + @@ -26,12 +30,20 @@ - + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + + ${wf:conf('startFrom') eq 'undelete'} + + + + + @@ -45,7 +57,7 @@ yarn-cluster cluster - bulkTagging-publication + bulkTagging eu.dnetlib.dhp.bulktag.SparkBulkTagJob dhp-enrichment-${projectVersion}.jar @@ -53,6 +65,8 @@ --executor-memory=${sparkExecutorMemory} --executor-cores=${sparkExecutorCores} --driver-memory=${sparkDriverMemory} + --conf spark.executor.memoryOverhead=${memoryOverhead} + --conf spark.sql.shuffle.partitions=${partitions} --conf spark.extraListeners=${spark2ExtraListeners} --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/countrypropagation/oozie_app/config-default.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/countrypropagation/oozie_app/config-default.xml index 2744ea92b..1cb0b8a5e 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/countrypropagation/oozie_app/config-default.xml +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/countrypropagation/oozie_app/config-default.xml @@ -45,11 +45,11 @@ sparkExecutorMemory - 6G + 5G sparkExecutorCores - 1 + 4 spark2MaxExecutors diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/countrypropagation/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/countrypropagation/oozie_app/workflow.xml index 81d6dc3dc..3a6e3edfb 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/countrypropagation/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/countrypropagation/oozie_app/workflow.xml @@ -12,6 +12,10 @@ allowedtypes the allowed types + + startFrom + undelete + @@ -25,7 +29,15 @@ - + + + + + ${wf:conf('startFrom') eq 'undelete'} + + + + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] @@ -61,7 +73,7 @@ --sourcePath${sourcePath} --whitelist${whitelist} --allowedtypes${allowedtypes} - --outputPath${workingDir}/preparedInfo + --outputPath${workingDir}/country/preparedInfo @@ -95,10 +107,10 @@ --conf spark.sql.shuffle.partitions=3840 --sourcePath${sourcePath}/publication - --outputPath${workingDir}/publication - --workingPath${workingDir}/workingP + --outputPath${workingDir}/country/publication + --workingPath${workingDir}/country/workingP --resultTableNameeu.dnetlib.dhp.schema.oaf.Publication - --preparedInfoPath${workingDir}/preparedInfo + --preparedInfoPath${workingDir}/country/preparedInfo @@ -125,10 +137,10 @@ --conf spark.sql.shuffle.partitions=3840 --sourcePath${sourcePath}/dataset - --outputPath${workingDir}/dataset - --workingPath${workingDir}/workingD + --outputPath${workingDir}/country/dataset + --workingPath${workingDir}/country/workingD --resultTableNameeu.dnetlib.dhp.schema.oaf.Dataset - --preparedInfoPath${workingDir}/preparedInfo + --preparedInfoPath${workingDir}/country/preparedInfo @@ -155,10 +167,10 @@ --conf spark.sql.shuffle.partitions=3840 --sourcePath${sourcePath}/otherresearchproduct - --outputPath${workingDir}/otherresearchproduct - --workingPath${workingDir}/workingO + --outputPath${workingDir}/country/otherresearchproduct + --workingPath${workingDir}/country/workingO --resultTableNameeu.dnetlib.dhp.schema.oaf.OtherResearchProduct - --preparedInfoPath${workingDir}/preparedInfo + --preparedInfoPath${workingDir}/country/preparedInfo @@ -185,10 +197,10 @@ --conf spark.sql.shuffle.partitions=3840 --sourcePath${sourcePath}/software - --outputPath${workingDir}/software - --workingPath${workingDir}/workingS + --outputPath${workingDir}/country/software + --workingPath${workingDir}/country/workingS --resultTableNameeu.dnetlib.dhp.schema.oaf.Software - --preparedInfoPath${workingDir}/preparedInfo + --preparedInfoPath${workingDir}/country/preparedInfo @@ -224,9 +236,9 @@ --conf spark.sql.shuffle.partitions=3840 --sourcePath${sourcePath}/publication - --preparedInfoPath${workingDir}/publication + --preparedInfoPath${workingDir}/country/publication --resultTableNameeu.dnetlib.dhp.schema.oaf.Publication - --outputPath${workingDir}/country/publication + --outputPath${workingDir}/country/country/publication @@ -253,9 +265,9 @@ --conf spark.sql.shuffle.partitions=3840 --sourcePath${sourcePath}/dataset - --preparedInfoPath${workingDir}/dataset + --preparedInfoPath${workingDir}/country/dataset --resultTableNameeu.dnetlib.dhp.schema.oaf.Dataset - --outputPath${workingDir}/country/dataset + --outputPath${workingDir}/country/country/dataset @@ -282,9 +294,9 @@ --conf spark.sql.shuffle.partitions=3840 --sourcePath${sourcePath}/otherresearchproduct - --preparedInfoPath${workingDir}/otherresearchproduct + --preparedInfoPath${workingDir}/country/otherresearchproduct --resultTableNameeu.dnetlib.dhp.schema.oaf.OtherResearchProduct - --outputPath${workingDir}/country/otherresearchproduct + --outputPath${workingDir}/country/country/otherresearchproduct @@ -311,15 +323,49 @@ --conf spark.sql.shuffle.partitions=3840 --sourcePath${sourcePath}/software - --preparedInfoPath${workingDir}/software + --preparedInfoPath${workingDir}/country/software --resultTableNameeu.dnetlib.dhp.schema.oaf.Software - --outputPath${workingDir}/country/software + --outputPath${workingDir}/country/country/software - + + + + + yarn + cluster + community2resultfromorganization - move results + eu.dnetlib.dhp.MoveResult + dhp-enrichment-${projectVersion}.jar + + --executor-cores=6 + --executor-memory=5G + --conf spark.executor.memoryOverhead=3g + --conf spark.sql.shuffle.partitions=3284 + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} + + --sourcePath${workingDir}/country/country/ + --outputPath${sourcePath}/ + + + + + + + + ${wf:conf('startFrom') eq 'undelete'} + + + + diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/entitytoorganizationfromsemrel/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/entitytoorganizationfromsemrel/oozie_app/workflow.xml index 05824d209..ecec3579b 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/entitytoorganizationfromsemrel/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/entitytoorganizationfromsemrel/oozie_app/workflow.xml @@ -4,7 +4,10 @@ sourcePath the source path - + + startFrom + undelete + @@ -18,7 +21,15 @@ - + + + + + ${wf:conf('startFrom') eq 'undelete'} + + + + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/orcidtoresultfromsemrel/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/orcidtoresultfromsemrel/oozie_app/workflow.xml index 483a805b1..bab1e55df 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/orcidtoresultfromsemrel/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/orcidtoresultfromsemrel/oozie_app/workflow.xml @@ -114,7 +114,7 @@ --sourcePath${sourcePath} --hive_metastore_uris${hive_metastore_uris} --resultTableNameeu.dnetlib.dhp.schema.oaf.Publication - --outputPath${workingDir}/preparedInfo/targetOrcidAssoc + --outputPath${workingDir}/orcid/preparedInfo/targetOrcidAssoc --allowedsemrels${allowedsemrels} @@ -142,7 +142,7 @@ --sourcePath${sourcePath} --hive_metastore_uris${hive_metastore_uris} --resultTableNameeu.dnetlib.dhp.schema.oaf.Dataset - --outputPath${workingDir}/preparedInfo/targetOrcidAssoc + --outputPath${workingDir}/orcid/preparedInfo/targetOrcidAssoc --allowedsemrels${allowedsemrels} @@ -170,7 +170,7 @@ --sourcePath${sourcePath} --hive_metastore_uris${hive_metastore_uris} --resultTableNameeu.dnetlib.dhp.schema.oaf.OtherResearchProduct - --outputPath${workingDir}/preparedInfo/targetOrcidAssoc + --outputPath${workingDir}/orcid/preparedInfo/targetOrcidAssoc --allowedsemrels${allowedsemrels} @@ -198,7 +198,7 @@ --sourcePath${sourcePath} --hive_metastore_uris${hive_metastore_uris} --resultTableNameeu.dnetlib.dhp.schema.oaf.Software - --outputPath${workingDir}/preparedInfo/targetOrcidAssoc + --outputPath${workingDir}/orcid/preparedInfo/targetOrcidAssoc --allowedsemrels${allowedsemrels} @@ -225,8 +225,8 @@ --conf spark.dynamicAllocation.enabled=true --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} - --sourcePath${workingDir}/orcidprop - --outputPath${workingDir}/orcidprop/mergedOrcidAssoc + --sourcePath${workingDir}/orcid/orcidprop + --outputPath${workingDir}/orcid/orcidprop/mergedOrcidAssoc @@ -261,7 +261,7 @@ --conf spark.hadoop.mapreduce.reduce.speculative=false --conf spark.sql.shuffle.partitions=3840 - --possibleUpdatesPath${workingDir}/orcidprop/mergedOrcidAssoc + --possibleUpdatesPath${workingDir}/orcid/orcidprop/mergedOrcidAssoc --sourcePath${sourcePath}/publication --resultTableNameeu.dnetlib.dhp.schema.oaf.Publication --outputPath${outputPath}/publication @@ -291,7 +291,7 @@ --conf spark.hadoop.mapreduce.map.speculative=false --conf spark.hadoop.mapreduce.reduce.speculative=false - --possibleUpdatesPath${workingDir}/orcidprop/mergedOrcidAssoc + --possibleUpdatesPath${workingDir}/orcid/orcidprop/mergedOrcidAssoc --sourcePath${sourcePath}/dataset --resultTableNameeu.dnetlib.dhp.schema.oaf.Dataset --outputPath${outputPath}/dataset @@ -321,7 +321,7 @@ --conf spark.hadoop.mapreduce.map.speculative=false --conf spark.hadoop.mapreduce.reduce.speculative=false - --possibleUpdatesPath${workingDir}/orcidprop/mergedOrcidAssoc + --possibleUpdatesPath${workingDir}/orcid/orcidprop/mergedOrcidAssoc --sourcePath${sourcePath}/otherresearchproduct --resultTableNameeu.dnetlib.dhp.schema.oaf.OtherResearchProduct --outputPath${outputPath}/otherresearchproduct @@ -351,7 +351,7 @@ --conf spark.hadoop.mapreduce.map.speculative=false --conf spark.hadoop.mapreduce.reduce.speculative=false - --possibleUpdatesPath${workingDir}/orcidprop/mergedOrcidAssoc + --possibleUpdatesPath${workingDir}/orcid/orcidprop/mergedOrcidAssoc --sourcePath${sourcePath}/software --resultTableNameeu.dnetlib.dhp.schema.oaf.Software --outputPath${outputPath}/software diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/projecttoresult/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/projecttoresult/oozie_app/workflow.xml index f0db9c777..f26f3f98b 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/projecttoresult/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/projecttoresult/oozie_app/workflow.xml @@ -8,7 +8,10 @@ allowedsemrels the allowed semantics - + + startFrom + undelete + @@ -22,7 +25,15 @@ - + + + + + ${wf:conf('startFrom') eq 'undelete'} + + + + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/input_moveresult_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromorganization/input_moveresult_parameters.json similarity index 100% rename from dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/input_moveresult_parameters.json rename to dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromorganization/input_moveresult_parameters.json diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromorganization/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromorganization/oozie_app/workflow.xml index 18c5f4f0f..aa5357eea 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromorganization/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromorganization/oozie_app/workflow.xml @@ -8,6 +8,10 @@ baseURL the baseURL from where to reach the community APIs + + startFrom + undelete + @@ -21,7 +25,15 @@ - + + + + + ${wf:conf('startFrom') eq 'undelete'} + + + + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromproject/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromproject/oozie_app/workflow.xml index 01e366c02..0ceee5a7e 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromproject/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromproject/oozie_app/workflow.xml @@ -8,6 +8,10 @@ baseURL the base URL to use to select the right community APIs + + startFrom + undelete + @@ -21,7 +25,15 @@ - + + + + + ${wf:conf('startFrom') eq 'undelete'} + + + + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] @@ -94,7 +106,7 @@ yarn cluster - community2resultfromorganization - move results + move results eu.dnetlib.dhp.MoveResult dhp-enrichment-${projectVersion}.jar diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromsemrel/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromsemrel/oozie_app/workflow.xml index 773c7fba7..b5e6fbf05 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromsemrel/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromsemrel/oozie_app/workflow.xml @@ -16,9 +16,21 @@ outputPath the output path + + startFrom + undelete + - + + + + + ${wf:conf('startFrom') eq 'undelete'} + + + + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] @@ -209,9 +221,9 @@ dhp-enrichment-${projectVersion}.jar --executor-cores=6 - --executor-memory=5G - --conf spark.executor.memoryOverhead=3g - --conf spark.sql.shuffle.partitions=3284 + --executor-memory=4G + --conf spark.executor.memoryOverhead=5G + --conf spark.sql.shuffle.partitions=15000 --driver-memory=${sparkDriverMemory} --conf spark.extraListeners=${spark2ExtraListeners} --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} @@ -324,7 +336,34 @@ - + + + + + yarn + cluster + move results + eu.dnetlib.dhp.MoveResult + dhp-enrichment-${projectVersion}.jar + + --executor-cores=6 + --executor-memory=5G + --conf spark.executor.memoryOverhead=3g + --conf spark.sql.shuffle.partitions=3284 + --driver-memory=${sparkDriverMemory} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors} + + --sourcePath${workingDir}/communitysemrel/ + --outputPath${sourcePath}/ + + + + + diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttoorganizationfrominstrepo/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttoorganizationfrominstrepo/oozie_app/workflow.xml index e963453da..ca76a0e85 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttoorganizationfrominstrepo/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttoorganizationfrominstrepo/oozie_app/workflow.xml @@ -8,6 +8,10 @@ blacklist The list of institutional repositories that should not be used for the propagation + + startFrom + undelete + @@ -21,7 +25,15 @@ - + + + + + ${wf:conf('startFrom') eq 'undelete'} + + + + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] From 82e9e262ee12e4cd55f1f8593893fc8e41b82a07 Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Wed, 17 Jan 2024 17:38:03 +0100 Subject: [PATCH 432/449] [enrichment single step] remove parameter from execution --- .../SparkResultToProjectThroughSemRelJob.java | 29 +++++++++---------- .../eu/dnetlib/dhp/wf/main/job.properties | 2 +- .../projecttoresult/oozie_app/workflow.xml | 9 ------ 3 files changed, 15 insertions(+), 25 deletions(-) diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/projecttoresult/SparkResultToProjectThroughSemRelJob.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/projecttoresult/SparkResultToProjectThroughSemRelJob.java index e7518673d..a6466716a 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/projecttoresult/SparkResultToProjectThroughSemRelJob.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/projecttoresult/SparkResultToProjectThroughSemRelJob.java @@ -64,7 +64,7 @@ public class SparkResultToProjectThroughSemRelJob { removeOutputDir(spark, outputPath); } execPropagation( - spark, outputPath, alreadyLinkedPath, potentialUpdatePath, saveGraph); + spark, outputPath, alreadyLinkedPath, potentialUpdatePath); }); } @@ -72,24 +72,23 @@ public class SparkResultToProjectThroughSemRelJob { SparkSession spark, String outputPath, String alreadyLinkedPath, - String potentialUpdatePath, - Boolean saveGraph) { + String potentialUpdatePath) { Dataset toaddrelations = readPath(spark, potentialUpdatePath, ResultProjectSet.class); Dataset alreadyLinked = readPath(spark, alreadyLinkedPath, ResultProjectSet.class); - if (saveGraph) { - toaddrelations - .joinWith( - alreadyLinked, - toaddrelations.col("resultId").equalTo(alreadyLinked.col("resultId")), - "left_outer") - .flatMap(mapRelationRn(), Encoders.bean(Relation.class)) - .write() - .mode(SaveMode.Append) - .option("compression", "gzip") - .json(outputPath); - } + // if (saveGraph) { + toaddrelations + .joinWith( + alreadyLinked, + toaddrelations.col("resultId").equalTo(alreadyLinked.col("resultId")), + "left_outer") + .flatMap(mapRelationRn(), Encoders.bean(Relation.class)) + .write() + .mode(SaveMode.Append) + .option("compression", "gzip") + .json(outputPath); + // } } private static FlatMapFunction, Relation> mapRelationRn() { diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/job.properties b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/job.properties index 7e82d9b2c..05db04090 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/job.properties +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/main/job.properties @@ -1,5 +1,5 @@ sourcePath=/tmp/beta_provision/graph/10_graph_orcid_enriched -resumeFrom=CommunitySemanticRelation +resumeFrom=ResultProject allowedsemrelsorcidprop=isSupplementedBy;isSupplementTo allowedsemrelsresultproject=isSupplementedBy;isSupplementTo allowedsemrelscommunitysemrel=isSupplementedBy;isSupplementTo diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/projecttoresult/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/projecttoresult/oozie_app/workflow.xml index f26f3f98b..21cc5522f 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/projecttoresult/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/projecttoresult/oozie_app/workflow.xml @@ -97,17 +97,8 @@ --potentialUpdatePath${workingDir}/resultproject/preparedInfo/potentialUpdates --alreadyLinkedPath${workingDir}/resultproject/preparedInfo/alreadyLinked - - - - - - - - - \ No newline at end of file From a12a3eb143477271c7682877c793864fc6aa442f Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Thu, 18 Jan 2024 15:18:10 +0100 Subject: [PATCH 433/449] - --- .../dhp-enrichment/src/main/java/eu/dnetlib/dhp/MoveResult.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/MoveResult.java b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/MoveResult.java index 5ffcf8d3f..c71ccb439 100644 --- a/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/MoveResult.java +++ b/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/MoveResult.java @@ -30,7 +30,7 @@ public class MoveResult implements Serializable { public static void main(String[] args) throws Exception { String jsonConfiguration = IOUtils .toString( - SparkResultToCommunityFromOrganizationJob.class + MoveResult.class .getResourceAsStream( "/eu/dnetlib/dhp/wf/subworkflows/input_moveresult_parameters.json")); From 6af536541d5187b6d162a456f8d8c9fa455220ad Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Thu, 18 Jan 2024 15:35:40 +0100 Subject: [PATCH 434/449] [enrichment single step] moving parameter file in correct location --- .../input_moveresult_parameters.json | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/{resulttocommunityfromorganization => }/input_moveresult_parameters.json (100%) diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromorganization/input_moveresult_parameters.json b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/input_moveresult_parameters.json similarity index 100% rename from dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/resulttocommunityfromorganization/input_moveresult_parameters.json rename to dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/input_moveresult_parameters.json From bcc0a13981c61d25c073d3b497f83e52121b066b Mon Sep 17 00:00:00 2001 From: "miriam.baglioni" Date: Thu, 18 Jan 2024 17:39:14 +0100 Subject: [PATCH 435/449] [enrichment single step] adding element in wf definition --- .../dhp/wf/subworkflows/projecttoresult/oozie_app/workflow.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/projecttoresult/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/projecttoresult/oozie_app/workflow.xml index 21cc5522f..287ee4ba8 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/projecttoresult/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/projecttoresult/oozie_app/workflow.xml @@ -30,7 +30,6 @@ ${wf:conf('startFrom') eq 'undelete'} - @@ -101,4 +100,5 @@ + \ No newline at end of file From c6b3401596f9e05cf980af479f156a3a10a2d9ae Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Fri, 19 Jan 2024 10:15:39 +0100 Subject: [PATCH 436/449] increased shuffle partitions for publications in the country propagation workflow --- .../wf/subworkflows/countrypropagation/oozie_app/workflow.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/countrypropagation/oozie_app/workflow.xml b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/countrypropagation/oozie_app/workflow.xml index 3a6e3edfb..b9cf69517 100644 --- a/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/countrypropagation/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-enrichment/src/main/resources/eu/dnetlib/dhp/wf/subworkflows/countrypropagation/oozie_app/workflow.xml @@ -233,7 +233,7 @@ --conf spark.speculation=false --conf spark.hadoop.mapreduce.map.speculative=false --conf spark.hadoop.mapreduce.reduce.speculative=false - --conf spark.sql.shuffle.partitions=3840 + --conf spark.sql.shuffle.partitions=7680 --sourcePath${sourcePath}/publication --preparedInfoPath${workingDir}/country/publication From 2655eea5bc3075d4a649958c61971586db25452d Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Fri, 19 Jan 2024 16:28:05 +0100 Subject: [PATCH 437/449] [orcid enrichment] drop paths before copying the non-modifyed contents --- .../dnetlib/dhp/enrich/orcid/oozie_app/workflow.xml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/enrich/orcid/oozie_app/workflow.xml b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/enrich/orcid/oozie_app/workflow.xml index ce117b5e9..bbd3581c5 100644 --- a/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/enrich/orcid/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-graph-mapper/src/main/resources/eu/dnetlib/dhp/enrich/orcid/oozie_app/workflow.xml @@ -43,6 +43,17 @@ --graphPath${graphPath} --masteryarn + + + + + + + + + + + From 1c6db320f41882c34299e7c346d1c95d592d2644 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Mon, 22 Jan 2024 15:53:17 +0100 Subject: [PATCH 438/449] [graph provision] obtain context info from the context API instead from the ISLookUp service --- .../common/api/context/CategorySummary.java | 39 ++++++++++++++ .../api/context/CategorySummaryList.java | 7 +++ .../common/api/context/ConceptSummary.java | 52 +++++++++++++++++++ .../api/context/ConceptSummaryList.java | 7 +++ .../common/api/context/ContextSummary.java | 50 ++++++++++++++++++ .../api/context/ContextSummaryList.java | 7 +++ .../dhp/oa/provision/XmlConverterJob.java | 6 +-- .../dhp/oa/provision/utils/ContextMapper.java | 45 +++++++++++++++- .../dhp/oa/provision/oozie_app/workflow.xml | 6 ++- 9 files changed, 213 insertions(+), 6 deletions(-) create mode 100644 dhp-common/src/main/java/eu/dnetlib/dhp/common/api/context/CategorySummary.java create mode 100644 dhp-common/src/main/java/eu/dnetlib/dhp/common/api/context/CategorySummaryList.java create mode 100644 dhp-common/src/main/java/eu/dnetlib/dhp/common/api/context/ConceptSummary.java create mode 100644 dhp-common/src/main/java/eu/dnetlib/dhp/common/api/context/ConceptSummaryList.java create mode 100644 dhp-common/src/main/java/eu/dnetlib/dhp/common/api/context/ContextSummary.java create mode 100644 dhp-common/src/main/java/eu/dnetlib/dhp/common/api/context/ContextSummaryList.java diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/common/api/context/CategorySummary.java b/dhp-common/src/main/java/eu/dnetlib/dhp/common/api/context/CategorySummary.java new file mode 100644 index 000000000..fff28dbdf --- /dev/null +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/common/api/context/CategorySummary.java @@ -0,0 +1,39 @@ + +package eu.dnetlib.dhp.common.api.context; + +public class CategorySummary { + + private String id; + + private String label; + + private boolean hasConcept; + + public String getId() { + return id; + } + + public String getLabel() { + return label; + } + + public boolean isHasConcept() { + return hasConcept; + } + + public CategorySummary setId(final String id) { + this.id = id; + return this; + } + + public CategorySummary setLabel(final String label) { + this.label = label; + return this; + } + + public CategorySummary setHasConcept(final boolean hasConcept) { + this.hasConcept = hasConcept; + return this; + } + +} diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/common/api/context/CategorySummaryList.java b/dhp-common/src/main/java/eu/dnetlib/dhp/common/api/context/CategorySummaryList.java new file mode 100644 index 000000000..7213a945a --- /dev/null +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/common/api/context/CategorySummaryList.java @@ -0,0 +1,7 @@ + +package eu.dnetlib.dhp.common.api.context; + +import java.util.ArrayList; + +public class CategorySummaryList extends ArrayList { +} diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/common/api/context/ConceptSummary.java b/dhp-common/src/main/java/eu/dnetlib/dhp/common/api/context/ConceptSummary.java new file mode 100644 index 000000000..a576f9a1e --- /dev/null +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/common/api/context/ConceptSummary.java @@ -0,0 +1,52 @@ + +package eu.dnetlib.dhp.common.api.context; + +import java.util.List; + +public class ConceptSummary { + + private String id; + + private String label; + + public boolean hasSubConcept; + + private List concepts; + + public String getId() { + return id; + } + + public String getLabel() { + return label; + } + + public List getConcepts() { + return concepts; + } + + public ConceptSummary setId(final String id) { + this.id = id; + return this; + } + + public ConceptSummary setLabel(final String label) { + this.label = label; + return this; + } + + public boolean isHasSubConcept() { + return hasSubConcept; + } + + public ConceptSummary setHasSubConcept(final boolean hasSubConcept) { + this.hasSubConcept = hasSubConcept; + return this; + } + + public ConceptSummary setConcept(final List concepts) { + this.concepts = concepts; + return this; + } + +} diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/common/api/context/ConceptSummaryList.java b/dhp-common/src/main/java/eu/dnetlib/dhp/common/api/context/ConceptSummaryList.java new file mode 100644 index 000000000..45ccd2810 --- /dev/null +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/common/api/context/ConceptSummaryList.java @@ -0,0 +1,7 @@ + +package eu.dnetlib.dhp.common.api.context; + +import java.util.ArrayList; + +public class ConceptSummaryList extends ArrayList { +} diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/common/api/context/ContextSummary.java b/dhp-common/src/main/java/eu/dnetlib/dhp/common/api/context/ContextSummary.java new file mode 100644 index 000000000..46a0d0d5a --- /dev/null +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/common/api/context/ContextSummary.java @@ -0,0 +1,50 @@ + +package eu.dnetlib.dhp.common.api.context; + +public class ContextSummary { + + private String id; + + private String label; + + private String type; + + private String status; + + public String getId() { + return id; + } + + public String getLabel() { + return label; + } + + public String getType() { + return type; + } + + public String getStatus() { + return status; + } + + public ContextSummary setId(final String id) { + this.id = id; + return this; + } + + public ContextSummary setLabel(final String label) { + this.label = label; + return this; + } + + public ContextSummary setType(final String type) { + this.type = type; + return this; + } + + public ContextSummary setStatus(final String status) { + this.status = status; + return this; + } + +} diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/common/api/context/ContextSummaryList.java b/dhp-common/src/main/java/eu/dnetlib/dhp/common/api/context/ContextSummaryList.java new file mode 100644 index 000000000..618600007 --- /dev/null +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/common/api/context/ContextSummaryList.java @@ -0,0 +1,7 @@ + +package eu.dnetlib.dhp.common.api.context; + +import java.util.ArrayList; + +public class ContextSummaryList extends ArrayList { +} diff --git a/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/XmlConverterJob.java b/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/XmlConverterJob.java index 518f41120..6f43ca3f7 100644 --- a/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/XmlConverterJob.java +++ b/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/XmlConverterJob.java @@ -62,8 +62,8 @@ public class XmlConverterJob { final String outputPath = parser.get("outputPath"); log.info("outputPath: {}", outputPath); - final String isLookupUrl = parser.get("isLookupUrl"); - log.info("isLookupUrl: {}", isLookupUrl); + final String contextApiBaseUrl = parser.get("contextApiBaseUrl"); + log.info("contextApiBaseUrl: {}", contextApiBaseUrl); final SparkConf conf = new SparkConf(); conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer"); @@ -71,7 +71,7 @@ public class XmlConverterJob { runWithSparkSession(conf, isSparkSessionManaged, spark -> { removeOutputDir(spark, outputPath); - convertToXml(spark, inputPath, outputPath, ContextMapper.fromIS(isLookupUrl)); + convertToXml(spark, inputPath, outputPath, ContextMapper.fromAPI(contextApiBaseUrl)); }); } diff --git a/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/utils/ContextMapper.java b/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/utils/ContextMapper.java index bcaf40603..96d92fed6 100644 --- a/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/utils/ContextMapper.java +++ b/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/utils/ContextMapper.java @@ -1,18 +1,22 @@ package eu.dnetlib.dhp.oa.provision.utils; -import java.io.Serializable; -import java.io.StringReader; +import java.io.*; +import java.net.HttpURLConnection; +import java.net.URL; import java.util.HashMap; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Node; import org.dom4j.io.SAXReader; +import org.jetbrains.annotations.NotNull; import org.xml.sax.SAXException; import com.google.common.base.Joiner; +import eu.dnetlib.dhp.common.api.context.*; +import eu.dnetlib.dhp.common.rest.DNetRestClient; import eu.dnetlib.dhp.utils.ISLookupClientFactory; import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpException; import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpService; @@ -23,6 +27,42 @@ public class ContextMapper extends HashMap implements Serial private static final String XQUERY = "for $x in //RESOURCE_PROFILE[.//RESOURCE_TYPE/@value='ContextDSResourceType']//*[name()='context' or name()='category' or name()='concept'] return "; + public static ContextMapper fromAPI(final String baseURL) throws Exception { + + final ContextMapper contextMapper = new ContextMapper(); + + for (ContextSummary ctx : DNetRestClient.doGET(baseURL + "/contexts", ContextSummaryList.class)) { + + contextMapper.put(ctx.getId(), new ContextDef(ctx.getId(), ctx.getLabel(), "context", ctx.getType())); + + for (CategorySummary cat : DNetRestClient + .doGET(baseURL + "/context/" + ctx.getId(), CategorySummaryList.class)) { + contextMapper.put(cat.getId(), new ContextDef(cat.getId(), cat.getLabel(), "category", "")); + if (cat.isHasConcept()) { + for (ConceptSummary c : DNetRestClient + .doGET(baseURL + "/context/category/" + cat.getId(), ConceptSummaryList.class)) { + contextMapper.put(c.getId(), new ContextDef(c.getId(), c.getLabel(), "concept", "")); + if (c.isHasSubConcept()) { + for (ConceptSummary cs : c.getConcepts()) { + contextMapper.put(cs.getId(), new ContextDef(cs.getId(), cs.getLabel(), "concept", "")); + if (cs.isHasSubConcept()) { + for (ConceptSummary css : cs.getConcepts()) { + contextMapper + .put( + css.getId(), + new ContextDef(css.getId(), css.getLabel(), "concept", "")); + } + } + } + } + } + } + } + } + return contextMapper; + } + + @Deprecated public static ContextMapper fromIS(final String isLookupUrl) throws DocumentException, ISLookUpException, SAXException { ISLookUpService isLookUp = ISLookupClientFactory.getLookUpService(isLookupUrl); @@ -32,6 +72,7 @@ public class ContextMapper extends HashMap implements Serial return fromXml(sb.toString()); } + @Deprecated public static ContextMapper fromXml(final String xml) throws DocumentException, SAXException { final ContextMapper contextMapper = new ContextMapper(); diff --git a/dhp-workflows/dhp-graph-provision/src/main/resources/eu/dnetlib/dhp/oa/provision/oozie_app/workflow.xml b/dhp-workflows/dhp-graph-provision/src/main/resources/eu/dnetlib/dhp/oa/provision/oozie_app/workflow.xml index 2e7b11dde..9eab960f0 100644 --- a/dhp-workflows/dhp-graph-provision/src/main/resources/eu/dnetlib/dhp/oa/provision/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-graph-provision/src/main/resources/eu/dnetlib/dhp/oa/provision/oozie_app/workflow.xml @@ -9,6 +9,10 @@ isLookupUrl URL for the isLookup service + + contextApiBaseUrl + context API URL + relPartitions number or partitions for the relations Dataset @@ -589,7 +593,7 @@ --inputPath${workingDir}/join_entities --outputPath${workingDir}/xml - --isLookupUrl${isLookupUrl} + --contextApiBaseUrl${contextApiBaseUrl} From 6fd25cf549e3892d3d1f114848367ea00dd84399 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Tue, 23 Jan 2024 08:47:12 +0100 Subject: [PATCH 439/449] code formatting --- .../eu/dnetlib/dhp/oozie/RunSQLSparkJob.java | 18 +- .../dhp/oa/dedup/DedupRecordFactory.java | 284 +++++++++--------- .../dhp/oa/dedup/SparkCreateMergeRels.java | 5 +- 3 files changed, 158 insertions(+), 149 deletions(-) diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/oozie/RunSQLSparkJob.java b/dhp-common/src/main/java/eu/dnetlib/dhp/oozie/RunSQLSparkJob.java index ef296bfc9..027bf0735 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/oozie/RunSQLSparkJob.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/oozie/RunSQLSparkJob.java @@ -1,13 +1,7 @@ package eu.dnetlib.dhp.oozie; -import com.google.common.io.Resources; -import eu.dnetlib.dhp.application.ArgumentApplicationParser; -import org.apache.commons.lang3.time.DurationFormatUtils; -import org.apache.commons.text.StringSubstitutor; -import org.apache.spark.SparkConf; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkHiveSession; import java.net.URL; import java.nio.charset.StandardCharsets; @@ -15,7 +9,15 @@ import java.util.HashMap; import java.util.Map; import java.util.Optional; -import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkHiveSession; +import org.apache.commons.lang3.time.DurationFormatUtils; +import org.apache.commons.text.StringSubstitutor; +import org.apache.spark.SparkConf; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.google.common.io.Resources; + +import eu.dnetlib.dhp.application.ArgumentApplicationParser; public class RunSQLSparkJob { private static final Logger log = LoggerFactory.getLogger(RunSQLSparkJob.class); diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/DedupRecordFactory.java b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/DedupRecordFactory.java index 4c12d1dc6..eddfba309 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/DedupRecordFactory.java +++ b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/DedupRecordFactory.java @@ -1,6 +1,16 @@ package eu.dnetlib.dhp.oa.dedup; +import java.util.*; +import java.util.stream.Stream; + +import org.apache.commons.beanutils.BeanUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.spark.api.java.function.FlatMapFunction; +import org.apache.spark.api.java.function.MapFunction; +import org.apache.spark.api.java.function.ReduceFunction; +import org.apache.spark.sql.*; + import eu.dnetlib.dhp.oa.dedup.model.Identifier; import eu.dnetlib.dhp.oa.merge.AuthorMerger; import eu.dnetlib.dhp.schema.common.ModelSupport; @@ -8,180 +18,176 @@ import eu.dnetlib.dhp.schema.oaf.Author; import eu.dnetlib.dhp.schema.oaf.DataInfo; import eu.dnetlib.dhp.schema.oaf.OafEntity; import eu.dnetlib.dhp.schema.oaf.Result; -import org.apache.commons.beanutils.BeanUtils; -import org.apache.commons.lang3.StringUtils; -import org.apache.spark.api.java.function.FlatMapFunction; -import org.apache.spark.api.java.function.MapFunction; -import org.apache.spark.api.java.function.ReduceFunction; -import org.apache.spark.sql.*; import scala.Tuple2; import scala.Tuple3; import scala.collection.JavaConversions; -import java.util.*; -import java.util.stream.Stream; - public class DedupRecordFactory { - public static final class DedupRecordReduceState { - public final String dedupId; + public static final class DedupRecordReduceState { + public final String dedupId; - public final ArrayList aliases = new ArrayList<>(); + public final ArrayList aliases = new ArrayList<>(); - public final HashSet acceptanceDate = new HashSet<>(); + public final HashSet acceptanceDate = new HashSet<>(); - public OafEntity entity; + public OafEntity entity; - public DedupRecordReduceState(String dedupId, String id, OafEntity entity) { - this.dedupId = dedupId; - this.entity = entity; - if (entity == null) { - aliases.add(id); - } else { - if (Result.class.isAssignableFrom(entity.getClass())) { - Result result = (Result) entity; - if (result.getDateofacceptance() != null && StringUtils.isNotBlank(result.getDateofacceptance().getValue())) { - acceptanceDate.add(result.getDateofacceptance().getValue()); - } - } - } - } + public DedupRecordReduceState(String dedupId, String id, OafEntity entity) { + this.dedupId = dedupId; + this.entity = entity; + if (entity == null) { + aliases.add(id); + } else { + if (Result.class.isAssignableFrom(entity.getClass())) { + Result result = (Result) entity; + if (result.getDateofacceptance() != null + && StringUtils.isNotBlank(result.getDateofacceptance().getValue())) { + acceptanceDate.add(result.getDateofacceptance().getValue()); + } + } + } + } - public String getDedupId() { - return dedupId; - } - } - private static final int MAX_ACCEPTANCE_DATE = 20; + public String getDedupId() { + return dedupId; + } + } - private DedupRecordFactory() { - } + private static final int MAX_ACCEPTANCE_DATE = 20; - public static Dataset createDedupRecord( - final SparkSession spark, - final DataInfo dataInfo, - final String mergeRelsInputPath, - final String entitiesInputPath, - final Class clazz) { + private DedupRecordFactory() { + } - final long ts = System.currentTimeMillis(); - final Encoder beanEncoder = Encoders.bean(clazz); - final Encoder kryoEncoder = Encoders.kryo(clazz); + public static Dataset createDedupRecord( + final SparkSession spark, + final DataInfo dataInfo, + final String mergeRelsInputPath, + final String entitiesInputPath, + final Class clazz) { - // - Dataset entities = spark - .read() - .schema(Encoders.bean(clazz).schema()) - .json(entitiesInputPath) - .as(beanEncoder) - .map( - (MapFunction>) entity -> { - return new Tuple2<>(entity.getId(), entity); - }, - Encoders.tuple(Encoders.STRING(), kryoEncoder)) - .selectExpr("_1 AS id", "_2 AS kryoObject"); + final long ts = System.currentTimeMillis(); + final Encoder beanEncoder = Encoders.bean(clazz); + final Encoder kryoEncoder = Encoders.kryo(clazz); - // : source is the dedup_id, target is the id of the mergedIn - Dataset mergeRels = spark - .read() - .load(mergeRelsInputPath) - .where("relClass == 'merges'") - .selectExpr("source as dedupId", "target as id"); + // + Dataset entities = spark + .read() + .schema(Encoders.bean(clazz).schema()) + .json(entitiesInputPath) + .as(beanEncoder) + .map( + (MapFunction>) entity -> { + return new Tuple2<>(entity.getId(), entity); + }, + Encoders.tuple(Encoders.STRING(), kryoEncoder)) + .selectExpr("_1 AS id", "_2 AS kryoObject"); - return mergeRels - .join(entities, JavaConversions.asScalaBuffer(Collections.singletonList("id")), "left") - .select("dedupId", "id", "kryoObject") - .as(Encoders.tuple(Encoders.STRING(), Encoders.STRING(), kryoEncoder)) - .map((MapFunction, DedupRecordReduceState>) t -> new DedupRecordReduceState(t._1(), t._2(), t._3()), Encoders.kryo(DedupRecordReduceState.class)) - .groupByKey((MapFunction) DedupRecordReduceState::getDedupId, Encoders.STRING()) - .reduceGroups( - (ReduceFunction) (t1, t2) -> { - if (t1.entity == null) { - t2.aliases.addAll(t1.aliases); - return t2; - } - if (t1.acceptanceDate.size() < MAX_ACCEPTANCE_DATE) { - t1.acceptanceDate.addAll(t2.acceptanceDate); - } - t1.aliases.addAll(t2.aliases); - t1.entity = reduceEntity(t1.entity, t2.entity); + // : source is the dedup_id, target is the id of the mergedIn + Dataset mergeRels = spark + .read() + .load(mergeRelsInputPath) + .where("relClass == 'merges'") + .selectExpr("source as dedupId", "target as id"); - return t1; - } - ) - .flatMap - ((FlatMapFunction, OafEntity>) t -> { - String dedupId = t._1(); - DedupRecordReduceState agg = t._2(); + return mergeRels + .join(entities, JavaConversions.asScalaBuffer(Collections.singletonList("id")), "left") + .select("dedupId", "id", "kryoObject") + .as(Encoders.tuple(Encoders.STRING(), Encoders.STRING(), kryoEncoder)) + .map( + (MapFunction, DedupRecordReduceState>) t -> new DedupRecordReduceState( + t._1(), t._2(), t._3()), + Encoders.kryo(DedupRecordReduceState.class)) + .groupByKey( + (MapFunction) DedupRecordReduceState::getDedupId, Encoders.STRING()) + .reduceGroups( + (ReduceFunction) (t1, t2) -> { + if (t1.entity == null) { + t2.aliases.addAll(t1.aliases); + return t2; + } + if (t1.acceptanceDate.size() < MAX_ACCEPTANCE_DATE) { + t1.acceptanceDate.addAll(t2.acceptanceDate); + } + t1.aliases.addAll(t2.aliases); + t1.entity = reduceEntity(t1.entity, t2.entity); - if (agg.acceptanceDate.size() >= MAX_ACCEPTANCE_DATE) { - return Collections.emptyIterator(); - } + return t1; + }) + .flatMap((FlatMapFunction, OafEntity>) t -> { + String dedupId = t._1(); + DedupRecordReduceState agg = t._2(); - return Stream.concat(Stream.of(agg.getDedupId()), agg.aliases.stream()) - .map(id -> { - try { - OafEntity res = (OafEntity) BeanUtils.cloneBean(agg.entity); - res.setId(id); - res.setDataInfo(dataInfo); - res.setLastupdatetimestamp(ts); - return res; - } catch (Exception e) { - throw new RuntimeException(e); - } - }).iterator(); - }, beanEncoder); - } + if (agg.acceptanceDate.size() >= MAX_ACCEPTANCE_DATE) { + return Collections.emptyIterator(); + } - private static OafEntity reduceEntity(OafEntity entity, OafEntity duplicate) { + return Stream + .concat(Stream.of(agg.getDedupId()), agg.aliases.stream()) + .map(id -> { + try { + OafEntity res = (OafEntity) BeanUtils.cloneBean(agg.entity); + res.setId(id); + res.setDataInfo(dataInfo); + res.setLastupdatetimestamp(ts); + return res; + } catch (Exception e) { + throw new RuntimeException(e); + } + }) + .iterator(); + }, beanEncoder); + } + + private static OafEntity reduceEntity(OafEntity entity, OafEntity duplicate) { if (duplicate == null) { return entity; } + int compare = new IdentifierComparator<>() + .compare(Identifier.newInstance(entity), Identifier.newInstance(duplicate)); - int compare = new IdentifierComparator<>() - .compare(Identifier.newInstance(entity), Identifier.newInstance(duplicate)); - - if (compare > 0) { + if (compare > 0) { OafEntity swap = duplicate; - duplicate = entity; - entity = swap; - } + duplicate = entity; + entity = swap; + } - entity.mergeFrom(duplicate); + entity.mergeFrom(duplicate); - if (ModelSupport.isSubClass(duplicate, Result.class)) { - Result re = (Result) entity; - Result rd = (Result) duplicate; + if (ModelSupport.isSubClass(duplicate, Result.class)) { + Result re = (Result) entity; + Result rd = (Result) duplicate; - List> authors = new ArrayList<>(); - if (re.getAuthor() != null) { - authors.add(re.getAuthor()); - } - if (rd.getAuthor() != null) { - authors.add(rd.getAuthor()); - } + List> authors = new ArrayList<>(); + if (re.getAuthor() != null) { + authors.add(re.getAuthor()); + } + if (rd.getAuthor() != null) { + authors.add(rd.getAuthor()); + } - re.setAuthor(AuthorMerger.merge(authors)); - } + re.setAuthor(AuthorMerger.merge(authors)); + } - return entity; - } + return entity; + } - public static T entityMerger( - String id, Iterator> entities, long ts, DataInfo dataInfo, Class clazz) { - T base = entities.next()._2(); + public static T entityMerger( + String id, Iterator> entities, long ts, DataInfo dataInfo, Class clazz) { + T base = entities.next()._2(); - while (entities.hasNext()) { - T duplicate = entities.next()._2(); - if (duplicate != null) - base = (T) reduceEntity(base, duplicate); - } + while (entities.hasNext()) { + T duplicate = entities.next()._2(); + if (duplicate != null) + base = (T) reduceEntity(base, duplicate); + } - base.setId(id); - base.setDataInfo(dataInfo); - base.setLastupdatetimestamp(ts); + base.setId(id); + base.setDataInfo(dataInfo); + base.setLastupdatetimestamp(ts); - return base; - } + return base; + } } diff --git a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkCreateMergeRels.java b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkCreateMergeRels.java index 191870d3b..59626c141 100644 --- a/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkCreateMergeRels.java +++ b/dhp-workflows/dhp-dedup-openaire/src/main/java/eu/dnetlib/dhp/oa/dedup/SparkCreateMergeRels.java @@ -242,13 +242,14 @@ public class SparkCreateMergeRels extends AbstractSparkAction { // this was a pivot in a previous graph but it has been merged into a new group with different // pivot - if (!r.isNullAt(r.fieldIndex("lastUsage")) && !pivot.equals(id) && !dedupId.equals(pivotDedupId)) { + if (!r.isNullAt(r.fieldIndex("lastUsage")) && !pivot.equals(id) + && !dedupId.equals(pivotDedupId)) { // materialize the previous dedup record as a merge relation with the new one res.add(new Tuple3<>(dedupId, pivotDedupId, null)); } // add merge relations - if (cut <=0 || r.getAs("position") <= cut) { + if (cut <= 0 || r. getAs("position") <= cut) { res.add(new Tuple3<>(id, pivotDedupId, pivot)); } From f87f3a6483d1ea18945cd8055a3b97a4973b682a Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Tue, 23 Jan 2024 08:54:37 +0100 Subject: [PATCH 440/449] [graph provision] updated param specification for the XML converter job --- .../dhp/oa/provision/input_params_xml_converter.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dhp-workflows/dhp-graph-provision/src/main/resources/eu/dnetlib/dhp/oa/provision/input_params_xml_converter.json b/dhp-workflows/dhp-graph-provision/src/main/resources/eu/dnetlib/dhp/oa/provision/input_params_xml_converter.json index eda6154d7..653a69ed1 100644 --- a/dhp-workflows/dhp-graph-provision/src/main/resources/eu/dnetlib/dhp/oa/provision/input_params_xml_converter.json +++ b/dhp-workflows/dhp-graph-provision/src/main/resources/eu/dnetlib/dhp/oa/provision/input_params_xml_converter.json @@ -12,9 +12,9 @@ "paramRequired": true }, { - "paramName": "ilu", - "paramLongName": "isLookupUrl", - "paramDescription": "URL of the isLookUp Service", + "paramName": "cau", + "paramLongName": "contextApiBaseUrl", + "paramDescription": "URL of the context API", "paramRequired": true } ] From 3e96777cc4ce5896a0c1f1af5b5adf00546fec04 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Tue, 23 Jan 2024 15:21:03 +0100 Subject: [PATCH 441/449] [collection] increased logging from the oai-pmh metadata collection process --- .../dhp/common/collection/HttpConnector2.java | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/common/collection/HttpConnector2.java b/dhp-common/src/main/java/eu/dnetlib/dhp/common/collection/HttpConnector2.java index 905457bcd..08cc3ec59 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/common/collection/HttpConnector2.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/common/collection/HttpConnector2.java @@ -8,10 +8,13 @@ import java.io.InputStream; import java.net.*; import java.util.List; import java.util.Map; +import java.util.concurrent.TimeUnit; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.math.NumberUtils; +import org.apache.commons.lang3.time.DateUtils; import org.apache.http.HttpHeaders; +import org.joda.time.Instant; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -98,6 +101,7 @@ public class HttpConnector2 { InputStream input = null; + long start = System.currentTimeMillis(); try { if (getClientParams().getRequestDelay() > 0) { backoffAndSleep(getClientParams().getRequestDelay()); @@ -115,9 +119,8 @@ public class HttpConnector2 { urlConn.addRequestProperty(headerEntry.getKey(), headerEntry.getValue()); } } - if (log.isDebugEnabled()) { - logHeaderFields(urlConn); - } + + logHeaderFields(urlConn); int retryAfter = obtainRetryAfter(urlConn.getHeaderFields()); String rateLimit = urlConn.getHeaderField(Constants.HTTPHEADER_IETF_DRAFT_RATELIMIT_LIMIT); @@ -167,12 +170,14 @@ public class HttpConnector2 { .warn( "{} - waiting and repeating request after default delay of {} sec.", requestUrl, getClientParams().getRetryDelay()); - backoffAndSleep(retryNumber * getClientParams().getRetryDelay() * 1000); + backoffAndSleep(retryNumber * getClientParams().getRetryDelay()); } report.put(REPORT_PREFIX + urlConn.getResponseCode(), requestUrl); urlConn.disconnect(); return attemptDownload(requestUrl, retryNumber + 1, report); default: + log.error("gor error {} from URL: {}", urlConn.getResponseCode(), urlConn.getURL()); + log.error("response message: {}", urlConn.getResponseMessage()); report .put( REPORT_PREFIX + urlConn.getResponseCode(), @@ -196,16 +201,21 @@ public class HttpConnector2 { report.put(e.getClass().getName(), e.getMessage()); backoffAndSleep(getClientParams().getRetryDelay() * retryNumber * 1000); return attemptDownload(requestUrl, retryNumber + 1, report); + } finally { + log + .info( + "request time elapsed: {}sec", + TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis() - start)); } } private void logHeaderFields(final HttpURLConnection urlConn) throws IOException { - log.debug("StatusCode: {}", urlConn.getResponseMessage()); + log.info("StatusCode: {}", urlConn.getResponseMessage()); for (Map.Entry> e : urlConn.getHeaderFields().entrySet()) { if (e.getKey() != null) { for (String v : e.getValue()) { - log.debug(" key: {} - value: {}", e.getKey(), v); + log.info(" key: {} - value: {}", e.getKey(), v); } } } From 9b13c22e5d9a6d916f53be71400456712397ebaf Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Tue, 23 Jan 2024 15:36:08 +0100 Subject: [PATCH 442/449] [graph provision] retrieve all the context information by adding all=true to the requests issued to thr API --- .../eu/dnetlib/dhp/oa/provision/utils/ContextMapper.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/utils/ContextMapper.java b/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/utils/ContextMapper.java index 96d92fed6..083dbe988 100644 --- a/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/utils/ContextMapper.java +++ b/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/utils/ContextMapper.java @@ -31,16 +31,19 @@ public class ContextMapper extends HashMap implements Serial final ContextMapper contextMapper = new ContextMapper(); - for (ContextSummary ctx : DNetRestClient.doGET(baseURL + "/contexts", ContextSummaryList.class)) { + for (ContextSummary ctx : DNetRestClient + .doGET(String.format("%s/contexts", baseURL), ContextSummaryList.class)) { contextMapper.put(ctx.getId(), new ContextDef(ctx.getId(), ctx.getLabel(), "context", ctx.getType())); for (CategorySummary cat : DNetRestClient - .doGET(baseURL + "/context/" + ctx.getId(), CategorySummaryList.class)) { + .doGET(String.format("%s/context/%s?all=true", baseURL, ctx.getId()), CategorySummaryList.class)) { contextMapper.put(cat.getId(), new ContextDef(cat.getId(), cat.getLabel(), "category", "")); if (cat.isHasConcept()) { for (ConceptSummary c : DNetRestClient - .doGET(baseURL + "/context/category/" + cat.getId(), ConceptSummaryList.class)) { + .doGET( + String.format("%s/context/category/%s?all=true", baseURL, cat.getId()), + ConceptSummaryList.class)) { contextMapper.put(c.getId(), new ContextDef(c.getId(), c.getLabel(), "concept", "")); if (c.isHasSubConcept()) { for (ConceptSummary cs : c.getConcepts()) { From 2c1e6849f0a43c28c58907829eb6a3f060f48f2c Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Wed, 24 Jan 2024 10:36:41 +0100 Subject: [PATCH 443/449] added code of conduct and contributing files --- CODE_OF_CONDUCT.md | 43 +++++++++++++++++++++++++++++++++++++++++++ CONTRIBUTING.md | 9 +++++++++ LICENSE => LICENSE.md | 0 README.md | 5 +++++ 4 files changed, 57 insertions(+) create mode 100644 CODE_OF_CONDUCT.md create mode 100644 CONTRIBUTING.md rename LICENSE => LICENSE.md (100%) diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 000000000..aff151f94 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,43 @@ +# Contributor Code of Conduct + +Openness, transparency and our community-driven participatory approach guide us in our day-to-day interactions and decision-making. Our open source projects are no exception. Trust, respect, collaboration and transparency are core values we believe should live and breathe within our projects. Our community welcomes participants from around the world with different experiences, unique perspectives, and great ideas to share. + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment include: + +- Using welcoming and inclusive language +- Being respectful of differing viewpoints and experiences +- Gracefully accepting constructive criticism +- Attempting collaboration before conflict +- Focusing on what is best for the community +- Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +- Violence, threats of violence, or inciting others to commit self-harm +- The use of sexualized language or imagery and unwelcome sexual attention or advances +- Trolling, intentionally spreading misinformation, insulting/derogatory comments, and personal or political attacks +- Public or private harassment +- Publishing others' private information, such as a physical or electronic address, without explicit permission +- Abuse of the reporting process to intentionally harass or exclude others +- Advocating for, or encouraging, any of the above behavior +- Other conduct which could reasonably be considered inappropriate in a professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org/), [version 1.4](https://www.contributor-covenant.org/version/1/4/code-of-conduct.html). \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 000000000..6d83ebbcc --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,9 @@ +# Contributing to D-Net Hadoop + +:+1::tada: First off, thanks for taking the time to contribute! :tada::+1: + +This project and everyone participating in it is governed by our [Code of Conduct](CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code. Please report unacceptable behavior to [dnet-team@isti.cnr.it](mailto:dnet-team@isti.cnr.it). + +The following is a set of guidelines for contributing to this project and its packages. These are mostly guidelines, not rules. Use your best judgment, and feel free to propose changes to this document in a pull request. + +All contributions are welcome, all contributions will be considered to be contributed under the [project license](#LICENSE.md). diff --git a/LICENSE b/LICENSE.md similarity index 100% rename from LICENSE rename to LICENSE.md diff --git a/README.md b/README.md index 2c1440f44..b6575814d 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,11 @@ Dnet-hadoop is the project that defined all the [OOZIE workflows](https://oozie.apache.org/) for the OpenAIRE Graph construction, processing, provisioning. +This project adheres to the Contributor Covenant [code of conduct](CODE_OF_CONDUCT.md). +By participating, you are expected to uphold this code. Please report unacceptable behavior to [dnet-team@isti.cnr.it](mailto:dnet-team@isti.cnr.it). + +This project is licensed under the [AGPL v3 or later version](#LICENSE.md). + How to build, package and run oozie workflows ==================== From 0c97a3a81a55cbdc24342d88d3862a89da1a6c5c Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Wed, 24 Jan 2024 10:56:33 +0100 Subject: [PATCH 444/449] minor --- CONTRIBUTING.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 6d83ebbcc..34a26f913 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -4,6 +4,7 @@ This project and everyone participating in it is governed by our [Code of Conduct](CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code. Please report unacceptable behavior to [dnet-team@isti.cnr.it](mailto:dnet-team@isti.cnr.it). -The following is a set of guidelines for contributing to this project and its packages. These are mostly guidelines, not rules. Use your best judgment, and feel free to propose changes to this document in a pull request. +The following is a set of guidelines for contributing to this project and its packages. These are mostly guidelines, not rules, which applies to this project as a while, including all its sub-modules. +Use your best judgment, and feel free to propose changes to this document in a pull request. All contributions are welcome, all contributions will be considered to be contributed under the [project license](#LICENSE.md). From 2838a9b63086493c5d845728336438d01595f56b Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Wed, 24 Jan 2024 16:07:05 +0100 Subject: [PATCH 445/449] Update 'CONTRIBUTING.md' --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 34a26f913..13a359c86 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -7,4 +7,4 @@ This project and everyone participating in it is governed by our [Code of Conduc The following is a set of guidelines for contributing to this project and its packages. These are mostly guidelines, not rules, which applies to this project as a while, including all its sub-modules. Use your best judgment, and feel free to propose changes to this document in a pull request. -All contributions are welcome, all contributions will be considered to be contributed under the [project license](#LICENSE.md). +All contributions are welcome, all contributions will be considered to be contributed under the [project license](LICENSE.md). From a7115cfa9e595c7db1b41cf9a34b0ae72a08d620 Mon Sep 17 00:00:00 2001 From: Antonis Lempesis Date: Thu, 25 Jan 2024 15:06:34 +0100 Subject: [PATCH 446/449] max mem of joins (hive.mapjoin.followby.gby.localtask.max.memory.usage) now 80%, up from 55%. --- .../eu/dnetlib/dhp/oa/graph/stats/oozie_app/workflow.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/workflow.xml b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/workflow.xml index cbf97944d..f15f22320 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/workflow.xml @@ -78,6 +78,10 @@ hive.txn.timeout ${hive_timeout} + + hive.mapjoin.followby.gby.localtask.max.memory.usage + 0.80 + mapred.job.queue.name analytics From 9e8fc6aa88d592fc3cb354bc36894b95679b5092 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Fri, 26 Jan 2024 09:17:20 +0100 Subject: [PATCH 447/449] [collection] increased logging from the oai-pmh metadata collection process --- .../dhp/common/collection/HttpConnector2.java | 63 ++++++++++++++----- 1 file changed, 47 insertions(+), 16 deletions(-) diff --git a/dhp-common/src/main/java/eu/dnetlib/dhp/common/collection/HttpConnector2.java b/dhp-common/src/main/java/eu/dnetlib/dhp/common/collection/HttpConnector2.java index 08cc3ec59..342d73cdc 100644 --- a/dhp-common/src/main/java/eu/dnetlib/dhp/common/collection/HttpConnector2.java +++ b/dhp-common/src/main/java/eu/dnetlib/dhp/common/collection/HttpConnector2.java @@ -97,8 +97,6 @@ public class HttpConnector2 { throw new CollectorException(msg); } - log.info("Request attempt {} [{}]", retryNumber, requestUrl); - InputStream input = null; long start = System.currentTimeMillis(); @@ -106,6 +104,9 @@ public class HttpConnector2 { if (getClientParams().getRequestDelay() > 0) { backoffAndSleep(getClientParams().getRequestDelay()); } + + log.info("Request attempt {} [{}]", retryNumber, requestUrl); + final HttpURLConnection urlConn = (HttpURLConnection) new URL(requestUrl).openConnection(); urlConn.setInstanceFollowRedirects(false); urlConn.setReadTimeout(getClientParams().getReadTimeOut() * 1000); @@ -135,9 +136,7 @@ public class HttpConnector2 { } if (is2xx(urlConn.getResponseCode())) { - input = urlConn.getInputStream(); - responseType = urlConn.getContentType(); - return input; + return getInputStream(urlConn, start); } if (is3xx(urlConn.getResponseCode())) { // REDIRECTS @@ -147,6 +146,7 @@ public class HttpConnector2 { .put( REPORT_PREFIX + urlConn.getResponseCode(), String.format("Moved to: %s", newUrl)); + logRequestTime(start); urlConn.disconnect(); if (retryAfter > 0) { backoffAndSleep(retryAfter); @@ -162,19 +162,39 @@ public class HttpConnector2 { if (retryAfter > 0) { log .warn( - "{} - waiting and repeating request after suggested retry-after {} sec.", - requestUrl, retryAfter); + "waiting and repeating request after suggested retry-after {} sec for URL {}", + retryAfter, requestUrl); backoffAndSleep(retryAfter * 1000); } else { log .warn( - "{} - waiting and repeating request after default delay of {} sec.", - requestUrl, getClientParams().getRetryDelay()); + "waiting and repeating request after default delay of {} sec for URL {}", + getClientParams().getRetryDelay(), requestUrl); backoffAndSleep(retryNumber * getClientParams().getRetryDelay()); } report.put(REPORT_PREFIX + urlConn.getResponseCode(), requestUrl); + + logRequestTime(start); + urlConn.disconnect(); + return attemptDownload(requestUrl, retryNumber + 1, report); + case 422: // UNPROCESSABLE ENTITY + report.put(REPORT_PREFIX + urlConn.getResponseCode(), requestUrl); + log.warn("waiting and repeating request after 10 sec for URL {}", requestUrl); + backoffAndSleep(10000); + urlConn.disconnect(); + logRequestTime(start); + try { + return getInputStream(urlConn, start); + } catch (IOException e) { + log + .error( + "server returned 422 and got IOException accessing the response body from URL {}", + requestUrl); + log.error("IOException:", e); + return attemptDownload(requestUrl, retryNumber + 1, report); + } default: log.error("gor error {} from URL: {}", urlConn.getResponseCode(), urlConn.getURL()); log.error("response message: {}", urlConn.getResponseMessage()); @@ -184,6 +204,8 @@ public class HttpConnector2 { String .format( "%s Error: %s", requestUrl, urlConn.getResponseMessage())); + logRequestTime(start); + urlConn.disconnect(); throw new CollectorException(urlConn.getResponseCode() + " error " + report); } } @@ -201,16 +223,25 @@ public class HttpConnector2 { report.put(e.getClass().getName(), e.getMessage()); backoffAndSleep(getClientParams().getRetryDelay() * retryNumber * 1000); return attemptDownload(requestUrl, retryNumber + 1, report); - } finally { - log - .info( - "request time elapsed: {}sec", - TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis() - start)); } } + private InputStream getInputStream(HttpURLConnection urlConn, long start) throws IOException { + InputStream input = urlConn.getInputStream(); + responseType = urlConn.getContentType(); + logRequestTime(start); + return input; + } + + private static void logRequestTime(long start) { + log + .info( + "request time elapsed: {}sec", + TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis() - start)); + } + private void logHeaderFields(final HttpURLConnection urlConn) throws IOException { - log.info("StatusCode: {}", urlConn.getResponseMessage()); + log.info("Response: {} - {}", urlConn.getResponseCode(), urlConn.getResponseMessage()); for (Map.Entry> e : urlConn.getHeaderFields().entrySet()) { if (e.getKey() != null) { @@ -235,7 +266,7 @@ public class HttpConnector2 { for (String key : headerMap.keySet()) { if ((key != null) && key.equalsIgnoreCase(HttpHeaders.RETRY_AFTER) && (!headerMap.get(key).isEmpty()) && NumberUtils.isCreatable(headerMap.get(key).get(0))) { - return Integer.parseInt(headerMap.get(key).get(0)) + 10; + return Integer.parseInt(headerMap.get(key).get(0)); } } return -1; From e889808daa889530893bab370442811f4dd9dc4f Mon Sep 17 00:00:00 2001 From: Sandro La Bruzzo Date: Fri, 26 Jan 2024 12:19:04 +0100 Subject: [PATCH 448/449] Fixed problem on missing author in crossref Mapping --- .../scala/eu/dnetlib/doiboost/crossref/Crossref2Oaf.scala | 6 +++--- .../eu/dnetlib/doiboost/crossref/s41567-022-01757-y.json | 1 + .../dhp/doiboost/crossref/CrossrefMappingTest.scala | 7 +++++++ 3 files changed, 11 insertions(+), 3 deletions(-) create mode 100644 dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/crossref/s41567-022-01757-y.json diff --git a/dhp-workflows/dhp-doiboost/src/main/scala/eu/dnetlib/doiboost/crossref/Crossref2Oaf.scala b/dhp-workflows/dhp-doiboost/src/main/scala/eu/dnetlib/doiboost/crossref/Crossref2Oaf.scala index ee857e2c4..64090733d 100644 --- a/dhp-workflows/dhp-doiboost/src/main/scala/eu/dnetlib/doiboost/crossref/Crossref2Oaf.scala +++ b/dhp-workflows/dhp-doiboost/src/main/scala/eu/dnetlib/doiboost/crossref/Crossref2Oaf.scala @@ -25,7 +25,7 @@ case class mappingAffiliation(name: String) {} case class mappingAuthor( given: Option[String], - family: String, + family: Option[String], sequence: Option[String], ORCID: Option[String], affiliation: Option[mappingAffiliation] @@ -226,14 +226,14 @@ case object Crossref2Oaf { //Mapping Author val authorList: List[mappingAuthor] = - (json \ "author").extractOrElse[List[mappingAuthor]](List()) + (json \ "author").extract[List[mappingAuthor]].filter(a => a.family.isDefined) val sorted_list = authorList.sortWith((a: mappingAuthor, b: mappingAuthor) => a.sequence.isDefined && a.sequence.get.equalsIgnoreCase("first") ) result.setAuthor(sorted_list.zipWithIndex.map { case (a, index) => - generateAuhtor(a.given.orNull, a.family, a.ORCID.orNull, index) + generateAuhtor(a.given.orNull, a.family.get, a.ORCID.orNull, index) }.asJava) // Mapping instance diff --git a/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/crossref/s41567-022-01757-y.json b/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/crossref/s41567-022-01757-y.json new file mode 100644 index 000000000..8e75f3586 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/crossref/s41567-022-01757-y.json @@ -0,0 +1 @@ +{"indexed":{"date-parts":[[2023,12,29]],"date-time":"2023-12-29T10:40:34Z","timestamp":1703846434800},"reference-count":65,"publisher":"Springer Science and Business Media LLC","license":[{"start":{"date-parts":[[2023,2,9]],"date-time":"2023-02-09T00:00:00Z","timestamp":1675900800000},"content-version":"tdm","delay-in-days":0,"URL":"https:\/\/www.springernature.com\/gp\/researchers\/text-and-data-mining"},{"start":{"date-parts":[[2023,2,9]],"date-time":"2023-02-09T00:00:00Z","timestamp":1675900800000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/www.springernature.com\/gp\/researchers\/text-and-data-mining"}],"content-domain":{"domain":["link.springer.com"],"crossmark-restriction":false},"short-container-title":["Nat. Phys."],"DOI":"10.1038\/s41567-022-01757-y","type":"journal-article","created":{"date-parts":[[2023,2,10]],"date-time":"2023-02-10T15:32:19Z","timestamp":1676043139000},"update-policy":"http:\/\/dx.doi.org\/10.1007\/springer_crossmark_policy","source":"Crossref","is-referenced-by-count":1,"title":["Observation of electroweak production of two jets and a Z-boson pair"],"prefix":"10.1038","author":[{"name":"ATLAS Collaboration","sequence":"first","affiliation":[]},{"given":"G.","family":"Aad","sequence":"additional","affiliation":[]},{"given":"B.","family":"Abbott","sequence":"additional","affiliation":[]},{"given":"D. C.","family":"Abbott","sequence":"additional","affiliation":[]},{"given":"A.","family":"Abed Abud","sequence":"additional","affiliation":[]},{"given":"K.","family":"Abeling","sequence":"additional","affiliation":[]},{"given":"D. K.","family":"Abhayasinghe","sequence":"additional","affiliation":[]},{"given":"S. H.","family":"Abidi","sequence":"additional","affiliation":[]},{"given":"O. S.","family":"AbouZeid","sequence":"additional","affiliation":[]},{"given":"N. L.","family":"Abraham","sequence":"additional","affiliation":[]},{"given":"H.","family":"Abramowicz","sequence":"additional","affiliation":[]},{"given":"H.","family":"Abreu","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Abulaiti","sequence":"additional","affiliation":[]},{"given":"B. S.","family":"Acharya","sequence":"additional","affiliation":[]},{"given":"B.","family":"Achkar","sequence":"additional","affiliation":[]},{"given":"S.","family":"Adachi","sequence":"additional","affiliation":[]},{"given":"L.","family":"Adam","sequence":"additional","affiliation":[]},{"given":"C. Adam","family":"Bourdarios","sequence":"additional","affiliation":[]},{"given":"L.","family":"Adamczyk","sequence":"additional","affiliation":[]},{"given":"L.","family":"Adamek","sequence":"additional","affiliation":[]},{"given":"J.","family":"Adelman","sequence":"additional","affiliation":[]},{"given":"M.","family":"Adersberger","sequence":"additional","affiliation":[]},{"given":"A.","family":"Adiguzel","sequence":"additional","affiliation":[]},{"given":"S.","family":"Adorni","sequence":"additional","affiliation":[]},{"given":"T.","family":"Adye","sequence":"additional","affiliation":[]},{"given":"A. A.","family":"Affolder","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Afik","sequence":"additional","affiliation":[]},{"given":"C.","family":"Agapopoulou","sequence":"additional","affiliation":[]},{"given":"M. N.","family":"Agaras","sequence":"additional","affiliation":[]},{"given":"A.","family":"Aggarwal","sequence":"additional","affiliation":[]},{"given":"C.","family":"Agheorghiesei","sequence":"additional","affiliation":[]},{"given":"J. A.","family":"Aguilar-Saavedra","sequence":"additional","affiliation":[]},{"given":"F.","family":"Ahmadov","sequence":"additional","affiliation":[]},{"given":"W. S.","family":"Ahmed","sequence":"additional","affiliation":[]},{"given":"X.","family":"Ai","sequence":"additional","affiliation":[]},{"given":"G.","family":"Aielli","sequence":"additional","affiliation":[]},{"given":"S.","family":"Akatsuka","sequence":"additional","affiliation":[]},{"given":"T. P. A.","family":"\u00c5kesson","sequence":"additional","affiliation":[]},{"given":"E.","family":"Akilli","sequence":"additional","affiliation":[]},{"given":"A. V.","family":"Akimov","sequence":"additional","affiliation":[]},{"given":"K.","family":"Al Khoury","sequence":"additional","affiliation":[]},{"given":"G. L.","family":"Alberghi","sequence":"additional","affiliation":[]},{"given":"J.","family":"Albert","sequence":"additional","affiliation":[]},{"given":"M. J.","family":"Alconada Verzini","sequence":"additional","affiliation":[]},{"given":"S.","family":"Alderweireldt","sequence":"additional","affiliation":[]},{"given":"M.","family":"Aleksa","sequence":"additional","affiliation":[]},{"given":"I. N.","family":"Aleksandrov","sequence":"additional","affiliation":[]},{"given":"C.","family":"Alexa","sequence":"additional","affiliation":[]},{"given":"T.","family":"Alexopoulos","sequence":"additional","affiliation":[]},{"given":"A.","family":"Alfonsi","sequence":"additional","affiliation":[]},{"given":"F.","family":"Alfonsi","sequence":"additional","affiliation":[]},{"given":"M.","family":"Alhroob","sequence":"additional","affiliation":[]},{"given":"B.","family":"Ali","sequence":"additional","affiliation":[]},{"given":"M.","family":"Aliev","sequence":"additional","affiliation":[]},{"given":"G.","family":"Alimonti","sequence":"additional","affiliation":[]},{"given":"C.","family":"Allaire","sequence":"additional","affiliation":[]},{"given":"B. M. M.","family":"Allbrooke","sequence":"additional","affiliation":[]},{"given":"B. W.","family":"Allen","sequence":"additional","affiliation":[]},{"given":"P. P.","family":"Allport","sequence":"additional","affiliation":[]},{"given":"A.","family":"Aloisio","sequence":"additional","affiliation":[]},{"given":"F.","family":"Alonso","sequence":"additional","affiliation":[]},{"given":"C.","family":"Alpigiani","sequence":"additional","affiliation":[]},{"given":"A. A.","family":"Alshehri","sequence":"additional","affiliation":[]},{"given":"E.","family":"Alunno Camelia","sequence":"additional","affiliation":[]},{"given":"M.","family":"Alvarez Estevez","sequence":"additional","affiliation":[]},{"given":"M. G.","family":"Alviggi","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Amaral Coutinho","sequence":"additional","affiliation":[]},{"given":"A.","family":"Ambler","sequence":"additional","affiliation":[]},{"given":"L.","family":"Ambroz","sequence":"additional","affiliation":[]},{"given":"C.","family":"Amelung","sequence":"additional","affiliation":[]},{"given":"D.","family":"Amidei","sequence":"additional","affiliation":[]},{"given":"S. P. Amor","family":"Dos Santos","sequence":"additional","affiliation":[]},{"given":"S.","family":"Amoroso","sequence":"additional","affiliation":[]},{"given":"C. S.","family":"Amrouche","sequence":"additional","affiliation":[]},{"given":"F.","family":"An","sequence":"additional","affiliation":[]},{"given":"C.","family":"Anastopoulos","sequence":"additional","affiliation":[]},{"given":"N.","family":"Andari","sequence":"additional","affiliation":[]},{"given":"T.","family":"Andeen","sequence":"additional","affiliation":[]},{"given":"C. F.","family":"Anders","sequence":"additional","affiliation":[]},{"given":"J. K.","family":"Anders","sequence":"additional","affiliation":[]},{"given":"A.","family":"Andreazza","sequence":"additional","affiliation":[]},{"given":"V.","family":"Andrei","sequence":"additional","affiliation":[]},{"given":"C. R.","family":"Anelli","sequence":"additional","affiliation":[]},{"given":"S.","family":"Angelidakis","sequence":"additional","affiliation":[]},{"given":"A.","family":"Angerami","sequence":"additional","affiliation":[]},{"given":"A. V.","family":"Anisenkov","sequence":"additional","affiliation":[]},{"given":"A.","family":"Annovi","sequence":"additional","affiliation":[]},{"given":"C.","family":"Antel","sequence":"additional","affiliation":[]},{"given":"M. T.","family":"Anthony","sequence":"additional","affiliation":[]},{"given":"E.","family":"Antipov","sequence":"additional","affiliation":[]},{"given":"M.","family":"Antonelli","sequence":"additional","affiliation":[]},{"given":"D. J. A.","family":"Antrim","sequence":"additional","affiliation":[]},{"given":"F.","family":"Anulli","sequence":"additional","affiliation":[]},{"given":"M.","family":"Aoki","sequence":"additional","affiliation":[]},{"given":"J. A. Aparisi","family":"Pozo","sequence":"additional","affiliation":[]},{"given":"M. A.","family":"Aparo","sequence":"additional","affiliation":[]},{"given":"L. Aperio","family":"Bella","sequence":"additional","affiliation":[]},{"given":"J. P.","family":"Araque","sequence":"additional","affiliation":[]},{"given":"V. Araujo","family":"Ferraz","sequence":"additional","affiliation":[]},{"given":"R. Araujo","family":"Pereira","sequence":"additional","affiliation":[]},{"given":"C.","family":"Arcangeletti","sequence":"additional","affiliation":[]},{"given":"A. T. H.","family":"Arce","sequence":"additional","affiliation":[]},{"given":"F. A.","family":"Arduh","sequence":"additional","affiliation":[]},{"given":"J-F.","family":"Arguin","sequence":"additional","affiliation":[]},{"given":"S.","family":"Argyropoulos","sequence":"additional","affiliation":[]},{"given":"J.-H.","family":"Arling","sequence":"additional","affiliation":[]},{"given":"A. J.","family":"Armbruster","sequence":"additional","affiliation":[]},{"given":"A.","family":"Armstrong","sequence":"additional","affiliation":[]},{"given":"O.","family":"Arnaez","sequence":"additional","affiliation":[]},{"given":"H.","family":"Arnold","sequence":"additional","affiliation":[]},{"given":"Z. P. Arrubarrena","family":"Tame","sequence":"additional","affiliation":[]},{"given":"G.","family":"Artoni","sequence":"additional","affiliation":[]},{"given":"S.","family":"Artz","sequence":"additional","affiliation":[]},{"given":"S.","family":"Asai","sequence":"additional","affiliation":[]},{"given":"T.","family":"Asawatavonvanich","sequence":"additional","affiliation":[]},{"given":"N. A.","family":"Asbah","sequence":"additional","affiliation":[]},{"given":"E. M.","family":"Asimakopoulou","sequence":"additional","affiliation":[]},{"given":"L.","family":"Asquith","sequence":"additional","affiliation":[]},{"given":"J.","family":"Assahsah","sequence":"additional","affiliation":[]},{"given":"K.","family":"Assamagan","sequence":"additional","affiliation":[]},{"given":"R.","family":"Astalos","sequence":"additional","affiliation":[]},{"given":"R. J.","family":"Atkin","sequence":"additional","affiliation":[]},{"given":"M.","family":"Atkinson","sequence":"additional","affiliation":[]},{"given":"N. B.","family":"Atlay","sequence":"additional","affiliation":[]},{"given":"H.","family":"Atmani","sequence":"additional","affiliation":[]},{"given":"K.","family":"Augsten","sequence":"additional","affiliation":[]},{"given":"G.","family":"Avolio","sequence":"additional","affiliation":[]},{"given":"M. K.","family":"Ayoub","sequence":"additional","affiliation":[]},{"given":"G.","family":"Azuelos","sequence":"additional","affiliation":[]},{"given":"H.","family":"Bachacou","sequence":"additional","affiliation":[]},{"given":"K.","family":"Bachas","sequence":"additional","affiliation":[]},{"given":"M.","family":"Backes","sequence":"additional","affiliation":[]},{"given":"F.","family":"Backman","sequence":"additional","affiliation":[]},{"given":"P.","family":"Bagnaia","sequence":"additional","affiliation":[]},{"given":"H.","family":"Bahrasemani","sequence":"additional","affiliation":[]},{"given":"A. J.","family":"Bailey","sequence":"additional","affiliation":[]},{"given":"V. R.","family":"Bailey","sequence":"additional","affiliation":[]},{"given":"J. T.","family":"Baines","sequence":"additional","affiliation":[]},{"given":"C.","family":"Bakalis","sequence":"additional","affiliation":[]},{"given":"O. K.","family":"Baker","sequence":"additional","affiliation":[]},{"given":"P. J.","family":"Bakker","sequence":"additional","affiliation":[]},{"given":"D. Bakshi","family":"Gupta","sequence":"additional","affiliation":[]},{"given":"S.","family":"Balaji","sequence":"additional","affiliation":[]},{"given":"E. M.","family":"Baldin","sequence":"additional","affiliation":[]},{"given":"P.","family":"Balek","sequence":"additional","affiliation":[]},{"given":"F.","family":"Balli","sequence":"additional","affiliation":[]},{"given":"W. K.","family":"Balunas","sequence":"additional","affiliation":[]},{"given":"J.","family":"Balz","sequence":"additional","affiliation":[]},{"given":"E.","family":"Banas","sequence":"additional","affiliation":[]},{"given":"A.","family":"Bandyopadhyay","sequence":"additional","affiliation":[]},{"given":"Sw.","family":"Banerjee","sequence":"additional","affiliation":[]},{"given":"A. A. E.","family":"Bannoura","sequence":"additional","affiliation":[]},{"given":"L.","family":"Barak","sequence":"additional","affiliation":[]},{"given":"W. M.","family":"Barbe","sequence":"additional","affiliation":[]},{"given":"E. L.","family":"Barberio","sequence":"additional","affiliation":[]},{"given":"D.","family":"Barberis","sequence":"additional","affiliation":[]},{"given":"M.","family":"Barbero","sequence":"additional","affiliation":[]},{"given":"G.","family":"Barbour","sequence":"additional","affiliation":[]},{"given":"T.","family":"Barillari","sequence":"additional","affiliation":[]},{"given":"M-S.","family":"Barisits","sequence":"additional","affiliation":[]},{"given":"J.","family":"Barkeloo","sequence":"additional","affiliation":[]},{"given":"T.","family":"Barklow","sequence":"additional","affiliation":[]},{"given":"R.","family":"Barnea","sequence":"additional","affiliation":[]},{"given":"B. M.","family":"Barnett","sequence":"additional","affiliation":[]},{"given":"R. M.","family":"Barnett","sequence":"additional","affiliation":[]},{"given":"Z.","family":"Barnovska-Blenessy","sequence":"additional","affiliation":[]},{"given":"A.","family":"Baroncelli","sequence":"additional","affiliation":[]},{"given":"G.","family":"Barone","sequence":"additional","affiliation":[]},{"given":"A. J.","family":"Barr","sequence":"additional","affiliation":[]},{"given":"L.","family":"Barranco Navarro","sequence":"additional","affiliation":[]},{"given":"F.","family":"Barreiro","sequence":"additional","affiliation":[]},{"given":"J.","family":"Barreiro Guimar\u00e3es da Costa","sequence":"additional","affiliation":[]},{"given":"S.","family":"Barsov","sequence":"additional","affiliation":[]},{"given":"R.","family":"Bartoldus","sequence":"additional","affiliation":[]},{"given":"G.","family":"Bartolini","sequence":"additional","affiliation":[]},{"given":"A. E.","family":"Barton","sequence":"additional","affiliation":[]},{"given":"P.","family":"Bartos","sequence":"additional","affiliation":[]},{"given":"A.","family":"Basalaev","sequence":"additional","affiliation":[]},{"given":"A.","family":"Basan","sequence":"additional","affiliation":[]},{"given":"A.","family":"Bassalat","sequence":"additional","affiliation":[]},{"given":"M. J.","family":"Basso","sequence":"additional","affiliation":[]},{"given":"R. L.","family":"Bates","sequence":"additional","affiliation":[]},{"given":"S.","family":"Batlamous","sequence":"additional","affiliation":[]},{"given":"J. R.","family":"Batley","sequence":"additional","affiliation":[]},{"given":"B.","family":"Batool","sequence":"additional","affiliation":[]},{"given":"M.","family":"Battaglia","sequence":"additional","affiliation":[]},{"given":"M.","family":"Bauce","sequence":"additional","affiliation":[]},{"given":"F.","family":"Bauer","sequence":"additional","affiliation":[]},{"given":"K. T.","family":"Bauer","sequence":"additional","affiliation":[]},{"given":"H. S.","family":"Bawa","sequence":"additional","affiliation":[]},{"given":"J. B.","family":"Beacham","sequence":"additional","affiliation":[]},{"given":"T.","family":"Beau","sequence":"additional","affiliation":[]},{"given":"P. H.","family":"Beauchemin","sequence":"additional","affiliation":[]},{"given":"F.","family":"Becherer","sequence":"additional","affiliation":[]},{"given":"P.","family":"Bechtle","sequence":"additional","affiliation":[]},{"given":"H. C.","family":"Beck","sequence":"additional","affiliation":[]},{"given":"H. P.","family":"Beck","sequence":"additional","affiliation":[]},{"given":"K.","family":"Becker","sequence":"additional","affiliation":[]},{"given":"C.","family":"Becot","sequence":"additional","affiliation":[]},{"given":"A.","family":"Beddall","sequence":"additional","affiliation":[]},{"given":"A. J.","family":"Beddall","sequence":"additional","affiliation":[]},{"given":"V. A.","family":"Bednyakov","sequence":"additional","affiliation":[]},{"given":"M.","family":"Bedognetti","sequence":"additional","affiliation":[]},{"given":"C. P.","family":"Bee","sequence":"additional","affiliation":[]},{"given":"T. A.","family":"Beermann","sequence":"additional","affiliation":[]},{"given":"M.","family":"Begalli","sequence":"additional","affiliation":[]},{"given":"M.","family":"Begel","sequence":"additional","affiliation":[]},{"given":"A.","family":"Behera","sequence":"additional","affiliation":[]},{"given":"J. K.","family":"Behr","sequence":"additional","affiliation":[]},{"given":"F.","family":"Beisiegel","sequence":"additional","affiliation":[]},{"given":"A. S.","family":"Bell","sequence":"additional","affiliation":[]},{"given":"G.","family":"Bella","sequence":"additional","affiliation":[]},{"given":"L.","family":"Bellagamba","sequence":"additional","affiliation":[]},{"given":"A.","family":"Bellerive","sequence":"additional","affiliation":[]},{"given":"P.","family":"Bellos","sequence":"additional","affiliation":[]},{"given":"K.","family":"Beloborodov","sequence":"additional","affiliation":[]},{"given":"K.","family":"Belotskiy","sequence":"additional","affiliation":[]},{"given":"N. L.","family":"Belyaev","sequence":"additional","affiliation":[]},{"given":"D.","family":"Benchekroun","sequence":"additional","affiliation":[]},{"given":"N.","family":"Benekos","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Benhammou","sequence":"additional","affiliation":[]},{"given":"D. P.","family":"Benjamin","sequence":"additional","affiliation":[]},{"given":"M.","family":"Benoit","sequence":"additional","affiliation":[]},{"given":"J. R.","family":"Bensinger","sequence":"additional","affiliation":[]},{"given":"S.","family":"Bentvelsen","sequence":"additional","affiliation":[]},{"given":"L.","family":"Beresford","sequence":"additional","affiliation":[]},{"given":"M.","family":"Beretta","sequence":"additional","affiliation":[]},{"given":"D.","family":"Berge","sequence":"additional","affiliation":[]},{"given":"E. Bergeaas","family":"Kuutmann","sequence":"additional","affiliation":[]},{"given":"N.","family":"Berger","sequence":"additional","affiliation":[]},{"given":"B.","family":"Bergmann","sequence":"additional","affiliation":[]},{"given":"L. J.","family":"Bergsten","sequence":"additional","affiliation":[]},{"given":"J.","family":"Beringer","sequence":"additional","affiliation":[]},{"given":"S.","family":"Berlendis","sequence":"additional","affiliation":[]},{"given":"G.","family":"Bernardi","sequence":"additional","affiliation":[]},{"given":"C.","family":"Bernius","sequence":"additional","affiliation":[]},{"given":"F. U.","family":"Bernlochner","sequence":"additional","affiliation":[]},{"given":"T.","family":"Berry","sequence":"additional","affiliation":[]},{"given":"P.","family":"Berta","sequence":"additional","affiliation":[]},{"given":"C.","family":"Bertella","sequence":"additional","affiliation":[]},{"given":"I. A.","family":"Bertram","sequence":"additional","affiliation":[]},{"given":"O.","family":"Bessidskaia Bylund","sequence":"additional","affiliation":[]},{"given":"N.","family":"Besson","sequence":"additional","affiliation":[]},{"given":"A.","family":"Bethani","sequence":"additional","affiliation":[]},{"given":"S.","family":"Bethke","sequence":"additional","affiliation":[]},{"given":"A.","family":"Betti","sequence":"additional","affiliation":[]},{"given":"A. J.","family":"Bevan","sequence":"additional","affiliation":[]},{"given":"J.","family":"Beyer","sequence":"additional","affiliation":[]},{"given":"D. S.","family":"Bhattacharya","sequence":"additional","affiliation":[]},{"given":"P.","family":"Bhattarai","sequence":"additional","affiliation":[]},{"given":"R.","family":"Bi","sequence":"additional","affiliation":[]},{"given":"R. M.","family":"Bianchi","sequence":"additional","affiliation":[]},{"given":"O.","family":"Biebel","sequence":"additional","affiliation":[]},{"given":"D.","family":"Biedermann","sequence":"additional","affiliation":[]},{"given":"R.","family":"Bielski","sequence":"additional","affiliation":[]},{"given":"K.","family":"Bierwagen","sequence":"additional","affiliation":[]},{"given":"N. V.","family":"Biesuz","sequence":"additional","affiliation":[]},{"given":"M.","family":"Biglietti","sequence":"additional","affiliation":[]},{"given":"T. R. V.","family":"Billoud","sequence":"additional","affiliation":[]},{"given":"M.","family":"Bindi","sequence":"additional","affiliation":[]},{"given":"A.","family":"Bingul","sequence":"additional","affiliation":[]},{"given":"C.","family":"Bini","sequence":"additional","affiliation":[]},{"given":"S.","family":"Biondi","sequence":"additional","affiliation":[]},{"given":"M.","family":"Birman","sequence":"additional","affiliation":[]},{"given":"T.","family":"Bisanz","sequence":"additional","affiliation":[]},{"given":"J. P.","family":"Biswal","sequence":"additional","affiliation":[]},{"given":"D.","family":"Biswas","sequence":"additional","affiliation":[]},{"given":"A.","family":"Bitadze","sequence":"additional","affiliation":[]},{"given":"C.","family":"Bittrich","sequence":"additional","affiliation":[]},{"given":"K.","family":"Bj\u00f8rke","sequence":"additional","affiliation":[]},{"given":"T.","family":"Blazek","sequence":"additional","affiliation":[]},{"given":"I.","family":"Bloch","sequence":"additional","affiliation":[]},{"given":"C.","family":"Blocker","sequence":"additional","affiliation":[]},{"given":"A.","family":"Blue","sequence":"additional","affiliation":[]},{"given":"U.","family":"Blumenschein","sequence":"additional","affiliation":[]},{"given":"G. J.","family":"Bobbink","sequence":"additional","affiliation":[]},{"given":"V. S.","family":"Bobrovnikov","sequence":"additional","affiliation":[]},{"given":"S. S.","family":"Bocchetta","sequence":"additional","affiliation":[]},{"given":"A.","family":"Bocci","sequence":"additional","affiliation":[]},{"given":"D.","family":"Bogavac","sequence":"additional","affiliation":[]},{"given":"A. G.","family":"Bogdanchikov","sequence":"additional","affiliation":[]},{"given":"C.","family":"Bohm","sequence":"additional","affiliation":[]},{"given":"V.","family":"Boisvert","sequence":"additional","affiliation":[]},{"given":"P.","family":"Bokan","sequence":"additional","affiliation":[]},{"given":"T.","family":"Bold","sequence":"additional","affiliation":[]},{"given":"A. E.","family":"Bolz","sequence":"additional","affiliation":[]},{"given":"M.","family":"Bomben","sequence":"additional","affiliation":[]},{"given":"M.","family":"Bona","sequence":"additional","affiliation":[]},{"given":"J. S.","family":"Bonilla","sequence":"additional","affiliation":[]},{"given":"M.","family":"Boonekamp","sequence":"additional","affiliation":[]},{"given":"C. D.","family":"Booth","sequence":"additional","affiliation":[]},{"given":"H. M.","family":"Borecka-Bielska","sequence":"additional","affiliation":[]},{"given":"L. S.","family":"Borgna","sequence":"additional","affiliation":[]},{"given":"A.","family":"Borisov","sequence":"additional","affiliation":[]},{"given":"G.","family":"Borissov","sequence":"additional","affiliation":[]},{"given":"J.","family":"Bortfeldt","sequence":"additional","affiliation":[]},{"given":"D.","family":"Bortoletto","sequence":"additional","affiliation":[]},{"given":"D.","family":"Boscherini","sequence":"additional","affiliation":[]},{"given":"M.","family":"Bosman","sequence":"additional","affiliation":[]},{"given":"J. D. Bossio","family":"Sola","sequence":"additional","affiliation":[]},{"given":"K.","family":"Bouaouda","sequence":"additional","affiliation":[]},{"given":"J.","family":"Boudreau","sequence":"additional","affiliation":[]},{"given":"E. V.","family":"Bouhova-Thacker","sequence":"additional","affiliation":[]},{"given":"D.","family":"Boumediene","sequence":"additional","affiliation":[]},{"given":"S. K.","family":"Boutle","sequence":"additional","affiliation":[]},{"given":"A.","family":"Boveia","sequence":"additional","affiliation":[]},{"given":"J.","family":"Boyd","sequence":"additional","affiliation":[]},{"given":"D.","family":"Boye","sequence":"additional","affiliation":[]},{"given":"I. R.","family":"Boyko","sequence":"additional","affiliation":[]},{"given":"A. J.","family":"Bozson","sequence":"additional","affiliation":[]},{"given":"J.","family":"Bracinik","sequence":"additional","affiliation":[]},{"given":"N.","family":"Brahimi","sequence":"additional","affiliation":[]},{"given":"G.","family":"Brandt","sequence":"additional","affiliation":[]},{"given":"O.","family":"Brandt","sequence":"additional","affiliation":[]},{"given":"F.","family":"Braren","sequence":"additional","affiliation":[]},{"given":"B.","family":"Brau","sequence":"additional","affiliation":[]},{"given":"J. E.","family":"Brau","sequence":"additional","affiliation":[]},{"given":"W. D. Breaden","family":"Madden","sequence":"additional","affiliation":[]},{"given":"K.","family":"Brendlinger","sequence":"additional","affiliation":[]},{"given":"L.","family":"Brenner","sequence":"additional","affiliation":[]},{"given":"R.","family":"Brenner","sequence":"additional","affiliation":[]},{"given":"S.","family":"Bressler","sequence":"additional","affiliation":[]},{"given":"B.","family":"Brickwedde","sequence":"additional","affiliation":[]},{"given":"D. L.","family":"Briglin","sequence":"additional","affiliation":[]},{"given":"D.","family":"Britton","sequence":"additional","affiliation":[]},{"given":"D.","family":"Britzger","sequence":"additional","affiliation":[]},{"given":"I.","family":"Brock","sequence":"additional","affiliation":[]},{"given":"R.","family":"Brock","sequence":"additional","affiliation":[]},{"given":"G.","family":"Brooijmans","sequence":"additional","affiliation":[]},{"given":"W. K.","family":"Brooks","sequence":"additional","affiliation":[]},{"given":"E.","family":"Brost","sequence":"additional","affiliation":[]},{"given":"J. H.","family":"Broughton","sequence":"additional","affiliation":[]},{"given":"P. A.","family":"Bruckman de Renstrom","sequence":"additional","affiliation":[]},{"given":"D.","family":"Bruncko","sequence":"additional","affiliation":[]},{"given":"A.","family":"Bruni","sequence":"additional","affiliation":[]},{"given":"G.","family":"Bruni","sequence":"additional","affiliation":[]},{"given":"L. S.","family":"Bruni","sequence":"additional","affiliation":[]},{"given":"S.","family":"Bruno","sequence":"additional","affiliation":[]},{"given":"M.","family":"Bruschi","sequence":"additional","affiliation":[]},{"given":"N.","family":"Bruscino","sequence":"additional","affiliation":[]},{"given":"P.","family":"Bryant","sequence":"additional","affiliation":[]},{"given":"L.","family":"Bryngemark","sequence":"additional","affiliation":[]},{"given":"T.","family":"Buanes","sequence":"additional","affiliation":[]},{"given":"Q.","family":"Buat","sequence":"additional","affiliation":[]},{"given":"P.","family":"Buchholz","sequence":"additional","affiliation":[]},{"given":"A. G.","family":"Buckley","sequence":"additional","affiliation":[]},{"given":"I. A.","family":"Budagov","sequence":"additional","affiliation":[]},{"given":"M. K.","family":"Bugge","sequence":"additional","affiliation":[]},{"given":"F.","family":"B\u00fchrer","sequence":"additional","affiliation":[]},{"given":"O.","family":"Bulekov","sequence":"additional","affiliation":[]},{"given":"T. J.","family":"Burch","sequence":"additional","affiliation":[]},{"given":"S.","family":"Burdin","sequence":"additional","affiliation":[]},{"given":"C. D.","family":"Burgard","sequence":"additional","affiliation":[]},{"given":"A. M.","family":"Burger","sequence":"additional","affiliation":[]},{"given":"B.","family":"Burghgrave","sequence":"additional","affiliation":[]},{"given":"J. T. P.","family":"Burr","sequence":"additional","affiliation":[]},{"given":"C. D.","family":"Burton","sequence":"additional","affiliation":[]},{"given":"J. C.","family":"Burzynski","sequence":"additional","affiliation":[]},{"given":"V.","family":"B\u00fcscher","sequence":"additional","affiliation":[]},{"given":"E.","family":"Buschmann","sequence":"additional","affiliation":[]},{"given":"P. J.","family":"Bussey","sequence":"additional","affiliation":[]},{"given":"J. M.","family":"Butler","sequence":"additional","affiliation":[]},{"given":"C. M.","family":"Buttar","sequence":"additional","affiliation":[]},{"given":"J. M.","family":"Butterworth","sequence":"additional","affiliation":[]},{"given":"P.","family":"Butti","sequence":"additional","affiliation":[]},{"given":"W.","family":"Buttinger","sequence":"additional","affiliation":[]},{"given":"C. J.","family":"Buxo Vazquez","sequence":"additional","affiliation":[]},{"given":"A.","family":"Buzatu","sequence":"additional","affiliation":[]},{"given":"A. R.","family":"Buzykaev","sequence":"additional","affiliation":[]},{"given":"G.","family":"Cabras","sequence":"additional","affiliation":[]},{"given":"S.","family":"Cabrera Urb\u00e1n","sequence":"additional","affiliation":[]},{"given":"D.","family":"Caforio","sequence":"additional","affiliation":[]},{"given":"H.","family":"Cai","sequence":"additional","affiliation":[]},{"given":"V. M. M.","family":"Cairo","sequence":"additional","affiliation":[]},{"given":"O.","family":"Cakir","sequence":"additional","affiliation":[]},{"given":"N.","family":"Calace","sequence":"additional","affiliation":[]},{"given":"P.","family":"Calafiura","sequence":"additional","affiliation":[]},{"given":"A.","family":"Calandri","sequence":"additional","affiliation":[]},{"given":"G.","family":"Calderini","sequence":"additional","affiliation":[]},{"given":"P.","family":"Calfayan","sequence":"additional","affiliation":[]},{"given":"G.","family":"Callea","sequence":"additional","affiliation":[]},{"given":"L. P.","family":"Caloba","sequence":"additional","affiliation":[]},{"given":"A.","family":"Caltabiano","sequence":"additional","affiliation":[]},{"given":"S.","family":"Calvente Lopez","sequence":"additional","affiliation":[]},{"given":"D.","family":"Calvet","sequence":"additional","affiliation":[]},{"given":"S.","family":"Calvet","sequence":"additional","affiliation":[]},{"given":"T. P.","family":"Calvet","sequence":"additional","affiliation":[]},{"given":"M.","family":"Calvetti","sequence":"additional","affiliation":[]},{"given":"R.","family":"Camacho Toro","sequence":"additional","affiliation":[]},{"given":"S.","family":"Camarda","sequence":"additional","affiliation":[]},{"given":"D.","family":"Camarero Munoz","sequence":"additional","affiliation":[]},{"given":"P.","family":"Camarri","sequence":"additional","affiliation":[]},{"given":"D.","family":"Cameron","sequence":"additional","affiliation":[]},{"given":"C.","family":"Camincher","sequence":"additional","affiliation":[]},{"given":"S.","family":"Campana","sequence":"additional","affiliation":[]},{"given":"M.","family":"Campanelli","sequence":"additional","affiliation":[]},{"given":"A.","family":"Camplani","sequence":"additional","affiliation":[]},{"given":"A.","family":"Campoverde","sequence":"additional","affiliation":[]},{"given":"V.","family":"Canale","sequence":"additional","affiliation":[]},{"given":"A.","family":"Canesse","sequence":"additional","affiliation":[]},{"given":"M. Cano","family":"Bret","sequence":"additional","affiliation":[]},{"given":"J.","family":"Cantero","sequence":"additional","affiliation":[]},{"given":"T.","family":"Cao","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Cao","sequence":"additional","affiliation":[]},{"given":"M. D. M.","family":"Capeans Garrido","sequence":"additional","affiliation":[]},{"given":"M.","family":"Capua","sequence":"additional","affiliation":[]},{"given":"R.","family":"Cardarelli","sequence":"additional","affiliation":[]},{"given":"F.","family":"Cardillo","sequence":"additional","affiliation":[]},{"given":"G.","family":"Carducci","sequence":"additional","affiliation":[]},{"given":"I.","family":"Carli","sequence":"additional","affiliation":[]},{"given":"T.","family":"Carli","sequence":"additional","affiliation":[]},{"given":"G.","family":"Carlino","sequence":"additional","affiliation":[]},{"given":"B. T.","family":"Carlson","sequence":"additional","affiliation":[]},{"given":"E. M.","family":"Carlson","sequence":"additional","affiliation":[]},{"given":"L.","family":"Carminati","sequence":"additional","affiliation":[]},{"given":"R. M. D.","family":"Carney","sequence":"additional","affiliation":[]},{"given":"S.","family":"Caron","sequence":"additional","affiliation":[]},{"given":"E.","family":"Carquin","sequence":"additional","affiliation":[]},{"given":"S.","family":"Carr\u00e1","sequence":"additional","affiliation":[]},{"given":"J. W. S.","family":"Carter","sequence":"additional","affiliation":[]},{"given":"M. P.","family":"Casado","sequence":"additional","affiliation":[]},{"given":"A. F.","family":"Casha","sequence":"additional","affiliation":[]},{"given":"R.","family":"Castelijn","sequence":"additional","affiliation":[]},{"given":"F. L.","family":"Castillo","sequence":"additional","affiliation":[]},{"given":"L.","family":"Castillo Garcia","sequence":"additional","affiliation":[]},{"given":"V.","family":"Castillo Gimenez","sequence":"additional","affiliation":[]},{"given":"N. F.","family":"Castro","sequence":"additional","affiliation":[]},{"given":"A.","family":"Catinaccio","sequence":"additional","affiliation":[]},{"given":"J. R.","family":"Catmore","sequence":"additional","affiliation":[]},{"given":"A.","family":"Cattai","sequence":"additional","affiliation":[]},{"given":"V.","family":"Cavaliere","sequence":"additional","affiliation":[]},{"given":"E.","family":"Cavallaro","sequence":"additional","affiliation":[]},{"given":"M.","family":"Cavalli-Sforza","sequence":"additional","affiliation":[]},{"given":"V.","family":"Cavasinni","sequence":"additional","affiliation":[]},{"given":"E.","family":"Celebi","sequence":"additional","affiliation":[]},{"given":"L.","family":"Cerda Alberich","sequence":"additional","affiliation":[]},{"given":"K.","family":"Cerny","sequence":"additional","affiliation":[]},{"given":"A. S.","family":"Cerqueira","sequence":"additional","affiliation":[]},{"given":"A.","family":"Cerri","sequence":"additional","affiliation":[]},{"given":"L.","family":"Cerrito","sequence":"additional","affiliation":[]},{"given":"F.","family":"Cerutti","sequence":"additional","affiliation":[]},{"given":"A.","family":"Cervelli","sequence":"additional","affiliation":[]},{"given":"S. A.","family":"Cetin","sequence":"additional","affiliation":[]},{"given":"Z.","family":"Chadi","sequence":"additional","affiliation":[]},{"given":"D.","family":"Chakraborty","sequence":"additional","affiliation":[]},{"given":"J.","family":"Chan","sequence":"additional","affiliation":[]},{"given":"W. S.","family":"Chan","sequence":"additional","affiliation":[]},{"given":"W. Y.","family":"Chan","sequence":"additional","affiliation":[]},{"given":"J. D.","family":"Chapman","sequence":"additional","affiliation":[]},{"given":"B.","family":"Chargeishvili","sequence":"additional","affiliation":[]},{"given":"D. G.","family":"Charlton","sequence":"additional","affiliation":[]},{"given":"T. P.","family":"Charman","sequence":"additional","affiliation":[]},{"given":"C. C.","family":"Chau","sequence":"additional","affiliation":[]},{"given":"S.","family":"Che","sequence":"additional","affiliation":[]},{"given":"S.","family":"Chekanov","sequence":"additional","affiliation":[]},{"given":"S. V.","family":"Chekulaev","sequence":"additional","affiliation":[]},{"given":"G. A.","family":"Chelkov","sequence":"additional","affiliation":[]},{"given":"B.","family":"Chen","sequence":"additional","affiliation":[]},{"given":"C.","family":"Chen","sequence":"additional","affiliation":[]},{"given":"C. H.","family":"Chen","sequence":"additional","affiliation":[]},{"given":"H.","family":"Chen","sequence":"additional","affiliation":[]},{"given":"J.","family":"Chen","sequence":"additional","affiliation":[]},{"given":"J.","family":"Chen","sequence":"additional","affiliation":[]},{"given":"J.","family":"Chen","sequence":"additional","affiliation":[]},{"given":"S.","family":"Chen","sequence":"additional","affiliation":[]},{"given":"S. J.","family":"Chen","sequence":"additional","affiliation":[]},{"given":"X.","family":"Chen","sequence":"additional","affiliation":[]},{"given":"Y-H.","family":"Chen","sequence":"additional","affiliation":[]},{"given":"H. C.","family":"Cheng","sequence":"additional","affiliation":[]},{"given":"H. J.","family":"Cheng","sequence":"additional","affiliation":[]},{"given":"A.","family":"Cheplakov","sequence":"additional","affiliation":[]},{"given":"E.","family":"Cheremushkina","sequence":"additional","affiliation":[]},{"given":"R.","family":"Cherkaoui El Moursli","sequence":"additional","affiliation":[]},{"given":"E.","family":"Cheu","sequence":"additional","affiliation":[]},{"given":"K.","family":"Cheung","sequence":"additional","affiliation":[]},{"given":"T. J. A.","family":"Cheval\u00e9rias","sequence":"additional","affiliation":[]},{"given":"L.","family":"Chevalier","sequence":"additional","affiliation":[]},{"given":"V.","family":"Chiarella","sequence":"additional","affiliation":[]},{"given":"G.","family":"Chiarelli","sequence":"additional","affiliation":[]},{"given":"G.","family":"Chiodini","sequence":"additional","affiliation":[]},{"given":"A. S.","family":"Chisholm","sequence":"additional","affiliation":[]},{"given":"A.","family":"Chitan","sequence":"additional","affiliation":[]},{"given":"I.","family":"Chiu","sequence":"additional","affiliation":[]},{"given":"Y. H.","family":"Chiu","sequence":"additional","affiliation":[]},{"given":"M. V.","family":"Chizhov","sequence":"additional","affiliation":[]},{"given":"K.","family":"Choi","sequence":"additional","affiliation":[]},{"given":"A. R.","family":"Chomont","sequence":"additional","affiliation":[]},{"given":"S.","family":"Chouridou","sequence":"additional","affiliation":[]},{"given":"E. Y. S.","family":"Chow","sequence":"additional","affiliation":[]},{"given":"M. C.","family":"Chu","sequence":"additional","affiliation":[]},{"given":"X.","family":"Chu","sequence":"additional","affiliation":[]},{"given":"J.","family":"Chudoba","sequence":"additional","affiliation":[]},{"given":"J. J.","family":"Chwastowski","sequence":"additional","affiliation":[]},{"given":"L.","family":"Chytka","sequence":"additional","affiliation":[]},{"given":"D.","family":"Cieri","sequence":"additional","affiliation":[]},{"given":"K. M.","family":"Ciesla","sequence":"additional","affiliation":[]},{"given":"D.","family":"Cinca","sequence":"additional","affiliation":[]},{"given":"V.","family":"Cindro","sequence":"additional","affiliation":[]},{"given":"I. A.","family":"Cioar\u0103","sequence":"additional","affiliation":[]},{"given":"A.","family":"Ciocio","sequence":"additional","affiliation":[]},{"given":"F.","family":"Cirotto","sequence":"additional","affiliation":[]},{"given":"Z. H.","family":"Citron","sequence":"additional","affiliation":[]},{"given":"M.","family":"Citterio","sequence":"additional","affiliation":[]},{"given":"D. A.","family":"Ciubotaru","sequence":"additional","affiliation":[]},{"given":"B. M.","family":"Ciungu","sequence":"additional","affiliation":[]},{"given":"A.","family":"Clark","sequence":"additional","affiliation":[]},{"given":"M. R.","family":"Clark","sequence":"additional","affiliation":[]},{"given":"P. J.","family":"Clark","sequence":"additional","affiliation":[]},{"given":"C.","family":"Clement","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Coadou","sequence":"additional","affiliation":[]},{"given":"M.","family":"Cobal","sequence":"additional","affiliation":[]},{"given":"A.","family":"Coccaro","sequence":"additional","affiliation":[]},{"given":"J.","family":"Cochran","sequence":"additional","affiliation":[]},{"given":"R.","family":"Coelho Lopes De Sa","sequence":"additional","affiliation":[]},{"given":"H.","family":"Cohen","sequence":"additional","affiliation":[]},{"given":"A. E. C.","family":"Coimbra","sequence":"additional","affiliation":[]},{"given":"B.","family":"Cole","sequence":"additional","affiliation":[]},{"given":"A. P.","family":"Colijn","sequence":"additional","affiliation":[]},{"given":"J.","family":"Collot","sequence":"additional","affiliation":[]},{"given":"P. Conde","family":"Mui\u00f1o","sequence":"additional","affiliation":[]},{"given":"S. H.","family":"Connell","sequence":"additional","affiliation":[]},{"given":"I. A.","family":"Connelly","sequence":"additional","affiliation":[]},{"given":"S.","family":"Constantinescu","sequence":"additional","affiliation":[]},{"given":"F.","family":"Conventi","sequence":"additional","affiliation":[]},{"given":"A. M.","family":"Cooper-Sarkar","sequence":"additional","affiliation":[]},{"given":"F.","family":"Cormier","sequence":"additional","affiliation":[]},{"given":"K. J. R.","family":"Cormier","sequence":"additional","affiliation":[]},{"given":"L. D.","family":"Corpe","sequence":"additional","affiliation":[]},{"given":"M.","family":"Corradi","sequence":"additional","affiliation":[]},{"given":"E. E.","family":"Corrigan","sequence":"additional","affiliation":[]},{"given":"F.","family":"Corriveau","sequence":"additional","affiliation":[]},{"given":"M. J.","family":"Costa","sequence":"additional","affiliation":[]},{"given":"F.","family":"Costanza","sequence":"additional","affiliation":[]},{"given":"D.","family":"Costanzo","sequence":"additional","affiliation":[]},{"given":"G.","family":"Cowan","sequence":"additional","affiliation":[]},{"given":"J. W.","family":"Cowley","sequence":"additional","affiliation":[]},{"given":"J.","family":"Crane","sequence":"additional","affiliation":[]},{"given":"K.","family":"Cranmer","sequence":"additional","affiliation":[]},{"given":"S. J.","family":"Crawley","sequence":"additional","affiliation":[]},{"given":"R. A.","family":"Creager","sequence":"additional","affiliation":[]},{"given":"S.","family":"Cr\u00e9p\u00e9-Renaudin","sequence":"additional","affiliation":[]},{"given":"F.","family":"Crescioli","sequence":"additional","affiliation":[]},{"given":"M.","family":"Cristinziani","sequence":"additional","affiliation":[]},{"given":"V.","family":"Croft","sequence":"additional","affiliation":[]},{"given":"G.","family":"Crosetti","sequence":"additional","affiliation":[]},{"given":"A.","family":"Cueto","sequence":"additional","affiliation":[]},{"given":"T.","family":"Cuhadar Donszelmann","sequence":"additional","affiliation":[]},{"given":"A. R.","family":"Cukierman","sequence":"additional","affiliation":[]},{"given":"W. R.","family":"Cunningham","sequence":"additional","affiliation":[]},{"given":"S.","family":"Czekierda","sequence":"additional","affiliation":[]},{"given":"P.","family":"Czodrowski","sequence":"additional","affiliation":[]},{"given":"M. J.","family":"Da Cunha Sargedas De Sousa","sequence":"additional","affiliation":[]},{"given":"J. V.","family":"Da Fonseca Pinto","sequence":"additional","affiliation":[]},{"given":"C.","family":"Da Via","sequence":"additional","affiliation":[]},{"given":"W.","family":"Dabrowski","sequence":"additional","affiliation":[]},{"given":"F.","family":"Dachs","sequence":"additional","affiliation":[]},{"given":"T.","family":"Dado","sequence":"additional","affiliation":[]},{"given":"S.","family":"Dahbi","sequence":"additional","affiliation":[]},{"given":"T.","family":"Dai","sequence":"additional","affiliation":[]},{"given":"C.","family":"Dallapiccola","sequence":"additional","affiliation":[]},{"given":"M.","family":"Dam","sequence":"additional","affiliation":[]},{"given":"G.","family":"D\u2019amen","sequence":"additional","affiliation":[]},{"given":"V.","family":"D\u2019Amico","sequence":"additional","affiliation":[]},{"given":"J.","family":"Damp","sequence":"additional","affiliation":[]},{"given":"J. R.","family":"Dandoy","sequence":"additional","affiliation":[]},{"given":"M. F.","family":"Daneri","sequence":"additional","affiliation":[]},{"given":"N. S.","family":"Dann","sequence":"additional","affiliation":[]},{"given":"M.","family":"Danninger","sequence":"additional","affiliation":[]},{"given":"V.","family":"Dao","sequence":"additional","affiliation":[]},{"given":"G.","family":"Darbo","sequence":"additional","affiliation":[]},{"given":"O.","family":"Dartsi","sequence":"additional","affiliation":[]},{"given":"A.","family":"Dattagupta","sequence":"additional","affiliation":[]},{"given":"T.","family":"Daubney","sequence":"additional","affiliation":[]},{"given":"S.","family":"D\u2019Auria","sequence":"additional","affiliation":[]},{"given":"C.","family":"David","sequence":"additional","affiliation":[]},{"given":"T.","family":"Davidek","sequence":"additional","affiliation":[]},{"given":"D. R.","family":"Davis","sequence":"additional","affiliation":[]},{"given":"I.","family":"Dawson","sequence":"additional","affiliation":[]},{"given":"K.","family":"De","sequence":"additional","affiliation":[]},{"given":"R.","family":"De Asmundis","sequence":"additional","affiliation":[]},{"given":"M.","family":"De Beurs","sequence":"additional","affiliation":[]},{"given":"S.","family":"De Castro","sequence":"additional","affiliation":[]},{"given":"S.","family":"De Cecco","sequence":"additional","affiliation":[]},{"given":"N.","family":"De Groot","sequence":"additional","affiliation":[]},{"given":"P.","family":"de Jong","sequence":"additional","affiliation":[]},{"given":"H.","family":"De la Torre","sequence":"additional","affiliation":[]},{"given":"A.","family":"De Maria","sequence":"additional","affiliation":[]},{"given":"D.","family":"De Pedis","sequence":"additional","affiliation":[]},{"given":"A.","family":"De Salvo","sequence":"additional","affiliation":[]},{"given":"U.","family":"De Sanctis","sequence":"additional","affiliation":[]},{"given":"M.","family":"De Santis","sequence":"additional","affiliation":[]},{"given":"A.","family":"De Santo","sequence":"additional","affiliation":[]},{"given":"K.","family":"De Vasconcelos Corga","sequence":"additional","affiliation":[]},{"given":"J. B.","family":"De Vivie De Regie","sequence":"additional","affiliation":[]},{"given":"C.","family":"Debenedetti","sequence":"additional","affiliation":[]},{"given":"D. V.","family":"Dedovich","sequence":"additional","affiliation":[]},{"given":"A. M.","family":"Deiana","sequence":"additional","affiliation":[]},{"given":"J.","family":"Del Peso","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Delabat Diaz","sequence":"additional","affiliation":[]},{"given":"D.","family":"Delgove","sequence":"additional","affiliation":[]},{"given":"F.","family":"Deliot","sequence":"additional","affiliation":[]},{"given":"C. M.","family":"Delitzsch","sequence":"additional","affiliation":[]},{"given":"M.","family":"Della Pietra","sequence":"additional","affiliation":[]},{"given":"D.","family":"Della Volpe","sequence":"additional","affiliation":[]},{"given":"A.","family":"Dell\u2019Acqua","sequence":"additional","affiliation":[]},{"given":"L.","family":"Dell\u2019Asta","sequence":"additional","affiliation":[]},{"given":"M.","family":"Delmastro","sequence":"additional","affiliation":[]},{"given":"C.","family":"Delporte","sequence":"additional","affiliation":[]},{"given":"P. A.","family":"Delsart","sequence":"additional","affiliation":[]},{"given":"D. A.","family":"DeMarco","sequence":"additional","affiliation":[]},{"given":"S.","family":"Demers","sequence":"additional","affiliation":[]},{"given":"M.","family":"Demichev","sequence":"additional","affiliation":[]},{"given":"G.","family":"Demontigny","sequence":"additional","affiliation":[]},{"given":"S. P.","family":"Denisov","sequence":"additional","affiliation":[]},{"given":"L.","family":"D\u2019Eramo","sequence":"additional","affiliation":[]},{"given":"D.","family":"Derendarz","sequence":"additional","affiliation":[]},{"given":"J. E.","family":"Derkaoui","sequence":"additional","affiliation":[]},{"given":"F.","family":"Derue","sequence":"additional","affiliation":[]},{"given":"P.","family":"Dervan","sequence":"additional","affiliation":[]},{"given":"K.","family":"Desch","sequence":"additional","affiliation":[]},{"given":"C.","family":"Deterre","sequence":"additional","affiliation":[]},{"given":"K.","family":"Dette","sequence":"additional","affiliation":[]},{"given":"C.","family":"Deutsch","sequence":"additional","affiliation":[]},{"given":"M. R.","family":"Devesa","sequence":"additional","affiliation":[]},{"given":"P. O.","family":"Deviveiros","sequence":"additional","affiliation":[]},{"given":"F. A.","family":"Di Bello","sequence":"additional","affiliation":[]},{"given":"A.","family":"Di Ciaccio","sequence":"additional","affiliation":[]},{"given":"L.","family":"Di Ciaccio","sequence":"additional","affiliation":[]},{"given":"W. K.","family":"Di Clemente","sequence":"additional","affiliation":[]},{"given":"C.","family":"Di Donato","sequence":"additional","affiliation":[]},{"given":"A.","family":"Di Girolamo","sequence":"additional","affiliation":[]},{"given":"G.","family":"Di Gregorio","sequence":"additional","affiliation":[]},{"given":"B.","family":"Di Micco","sequence":"additional","affiliation":[]},{"given":"R.","family":"Di Nardo","sequence":"additional","affiliation":[]},{"given":"K. F.","family":"Di Petrillo","sequence":"additional","affiliation":[]},{"given":"R.","family":"Di Sipio","sequence":"additional","affiliation":[]},{"given":"C.","family":"Diaconu","sequence":"additional","affiliation":[]},{"given":"F. A.","family":"Dias","sequence":"additional","affiliation":[]},{"given":"T. Dias","family":"Do Vale","sequence":"additional","affiliation":[]},{"given":"M. A.","family":"Diaz","sequence":"additional","affiliation":[]},{"given":"J.","family":"Dickinson","sequence":"additional","affiliation":[]},{"given":"E. B.","family":"Diehl","sequence":"additional","affiliation":[]},{"given":"J.","family":"Dietrich","sequence":"additional","affiliation":[]},{"given":"S.","family":"D\u00edez Cornell","sequence":"additional","affiliation":[]},{"given":"A.","family":"Dimitrievska","sequence":"additional","affiliation":[]},{"given":"W.","family":"Ding","sequence":"additional","affiliation":[]},{"given":"J.","family":"Dingfelder","sequence":"additional","affiliation":[]},{"given":"F.","family":"Dittus","sequence":"additional","affiliation":[]},{"given":"F.","family":"Djama","sequence":"additional","affiliation":[]},{"given":"T.","family":"Djobava","sequence":"additional","affiliation":[]},{"given":"J. I.","family":"Djuvsland","sequence":"additional","affiliation":[]},{"given":"M. A. B.","family":"Do Vale","sequence":"additional","affiliation":[]},{"given":"M.","family":"Dobre","sequence":"additional","affiliation":[]},{"given":"D.","family":"Dodsworth","sequence":"additional","affiliation":[]},{"given":"C.","family":"Doglioni","sequence":"additional","affiliation":[]},{"given":"J.","family":"Dolejsi","sequence":"additional","affiliation":[]},{"given":"Z.","family":"Dolezal","sequence":"additional","affiliation":[]},{"given":"M.","family":"Donadelli","sequence":"additional","affiliation":[]},{"given":"B.","family":"Dong","sequence":"additional","affiliation":[]},{"given":"J.","family":"Donini","sequence":"additional","affiliation":[]},{"given":"A.","family":"D\u2019onofrio","sequence":"additional","affiliation":[]},{"given":"M.","family":"D\u2019Onofrio","sequence":"additional","affiliation":[]},{"given":"J.","family":"Dopke","sequence":"additional","affiliation":[]},{"given":"A.","family":"Doria","sequence":"additional","affiliation":[]},{"given":"M. T.","family":"Dova","sequence":"additional","affiliation":[]},{"given":"A. T.","family":"Doyle","sequence":"additional","affiliation":[]},{"given":"E.","family":"Drechsler","sequence":"additional","affiliation":[]},{"given":"E.","family":"Dreyer","sequence":"additional","affiliation":[]},{"given":"T.","family":"Dreyer","sequence":"additional","affiliation":[]},{"given":"A. S.","family":"Drobac","sequence":"additional","affiliation":[]},{"given":"D.","family":"Du","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Duan","sequence":"additional","affiliation":[]},{"given":"F.","family":"Dubinin","sequence":"additional","affiliation":[]},{"given":"M.","family":"Dubovsky","sequence":"additional","affiliation":[]},{"given":"A.","family":"Dubreuil","sequence":"additional","affiliation":[]},{"given":"E.","family":"Duchovni","sequence":"additional","affiliation":[]},{"given":"G.","family":"Duckeck","sequence":"additional","affiliation":[]},{"given":"A.","family":"Ducourthial","sequence":"additional","affiliation":[]},{"given":"O. A.","family":"Ducu","sequence":"additional","affiliation":[]},{"given":"D.","family":"Duda","sequence":"additional","affiliation":[]},{"given":"A.","family":"Dudarev","sequence":"additional","affiliation":[]},{"given":"A. C.","family":"Dudder","sequence":"additional","affiliation":[]},{"given":"E. M.","family":"Duffield","sequence":"additional","affiliation":[]},{"given":"L.","family":"Duflot","sequence":"additional","affiliation":[]},{"given":"M.","family":"D\u00fchrssen","sequence":"additional","affiliation":[]},{"given":"C.","family":"D\u00fclsen","sequence":"additional","affiliation":[]},{"given":"lsen M.","family":"Dumancic","sequence":"additional","affiliation":[]},{"given":"A. E.","family":"Dumitriu","sequence":"additional","affiliation":[]},{"given":"A. K.","family":"Duncan","sequence":"additional","affiliation":[]},{"given":"M.","family":"Dunford","sequence":"additional","affiliation":[]},{"given":"A.","family":"Duperrin","sequence":"additional","affiliation":[]},{"given":"H. Duran","family":"Yildiz","sequence":"additional","affiliation":[]},{"given":"M.","family":"D\u00fcren","sequence":"additional","affiliation":[]},{"given":"A.","family":"Durglishvili","sequence":"additional","affiliation":[]},{"given":"D.","family":"Duschinger","sequence":"additional","affiliation":[]},{"given":"B.","family":"Dutta","sequence":"additional","affiliation":[]},{"given":"D.","family":"Duvnjak","sequence":"additional","affiliation":[]},{"given":"B. L.","family":"Dwyer","sequence":"additional","affiliation":[]},{"given":"G. I.","family":"Dyckes","sequence":"additional","affiliation":[]},{"given":"M.","family":"Dyndal","sequence":"additional","affiliation":[]},{"given":"S.","family":"Dysch","sequence":"additional","affiliation":[]},{"given":"B. S.","family":"Dziedzic","sequence":"additional","affiliation":[]},{"given":"K. M.","family":"Ecker","sequence":"additional","affiliation":[]},{"given":"M. G.","family":"Eggleston","sequence":"additional","affiliation":[]},{"given":"T.","family":"Eifert","sequence":"additional","affiliation":[]},{"given":"G.","family":"Eigen","sequence":"additional","affiliation":[]},{"given":"K.","family":"Einsweiler","sequence":"additional","affiliation":[]},{"given":"T.","family":"Ekelof","sequence":"additional","affiliation":[]},{"given":"H.","family":"El Jarrari","sequence":"additional","affiliation":[]},{"given":"R.","family":"El Kosseifi","sequence":"additional","affiliation":[]},{"given":"V.","family":"Ellajosyula","sequence":"additional","affiliation":[]},{"given":"M.","family":"Ellert","sequence":"additional","affiliation":[]},{"given":"F.","family":"Ellinghaus","sequence":"additional","affiliation":[]},{"given":"A. A.","family":"Elliot","sequence":"additional","affiliation":[]},{"given":"N.","family":"Ellis","sequence":"additional","affiliation":[]},{"given":"J.","family":"Elmsheuser","sequence":"additional","affiliation":[]},{"given":"M.","family":"Elsing","sequence":"additional","affiliation":[]},{"given":"D.","family":"Emeliyanov","sequence":"additional","affiliation":[]},{"given":"A.","family":"Emerman","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Enari","sequence":"additional","affiliation":[]},{"given":"M. B.","family":"Epland","sequence":"additional","affiliation":[]},{"given":"J.","family":"Erdmann","sequence":"additional","affiliation":[]},{"given":"A.","family":"Ereditato","sequence":"additional","affiliation":[]},{"given":"P. A.","family":"Erland","sequence":"additional","affiliation":[]},{"given":"M.","family":"Errenst","sequence":"additional","affiliation":[]},{"given":"M.","family":"Escalier","sequence":"additional","affiliation":[]},{"given":"C.","family":"Escobar","sequence":"additional","affiliation":[]},{"given":"O.","family":"Estrada Pastor","sequence":"additional","affiliation":[]},{"given":"E.","family":"Etzion","sequence":"additional","affiliation":[]},{"given":"H.","family":"Evans","sequence":"additional","affiliation":[]},{"given":"M. O.","family":"Evans","sequence":"additional","affiliation":[]},{"given":"A.","family":"Ezhilov","sequence":"additional","affiliation":[]},{"given":"F.","family":"Fabbri","sequence":"additional","affiliation":[]},{"given":"L.","family":"Fabbri","sequence":"additional","affiliation":[]},{"given":"V.","family":"Fabiani","sequence":"additional","affiliation":[]},{"given":"G.","family":"Facini","sequence":"additional","affiliation":[]},{"given":"R. M.","family":"Faisca Rodrigues Pereira","sequence":"additional","affiliation":[]},{"given":"R. M.","family":"Fakhrutdinov","sequence":"additional","affiliation":[]},{"given":"S.","family":"Falciano","sequence":"additional","affiliation":[]},{"given":"P. J.","family":"Falke","sequence":"additional","affiliation":[]},{"given":"S.","family":"Falke","sequence":"additional","affiliation":[]},{"given":"J.","family":"Faltova","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Fang","sequence":"additional","affiliation":[]},{"given":"G.","family":"Fanourakis","sequence":"additional","affiliation":[]},{"given":"M.","family":"Fanti","sequence":"additional","affiliation":[]},{"given":"M.","family":"Faraj","sequence":"additional","affiliation":[]},{"given":"A.","family":"Farbin","sequence":"additional","affiliation":[]},{"given":"A.","family":"Farilla","sequence":"additional","affiliation":[]},{"given":"E. M.","family":"Farina","sequence":"additional","affiliation":[]},{"given":"T.","family":"Farooque","sequence":"additional","affiliation":[]},{"given":"S. M.","family":"Farrington","sequence":"additional","affiliation":[]},{"given":"P.","family":"Farthouat","sequence":"additional","affiliation":[]},{"given":"F.","family":"Fassi","sequence":"additional","affiliation":[]},{"given":"P.","family":"Fassnacht","sequence":"additional","affiliation":[]},{"given":"D.","family":"Fassouliotis","sequence":"additional","affiliation":[]},{"given":"M.","family":"Faucci Giannelli","sequence":"additional","affiliation":[]},{"given":"W. J.","family":"Fawcett","sequence":"additional","affiliation":[]},{"given":"L.","family":"Fayard","sequence":"additional","affiliation":[]},{"given":"O. L.","family":"Fedin","sequence":"additional","affiliation":[]},{"given":"W.","family":"Fedorko","sequence":"additional","affiliation":[]},{"given":"M.","family":"Feickert","sequence":"additional","affiliation":[]},{"given":"L.","family":"Feligioni","sequence":"additional","affiliation":[]},{"given":"A.","family":"Fell","sequence":"additional","affiliation":[]},{"given":"C.","family":"Feng","sequence":"additional","affiliation":[]},{"given":"M.","family":"Feng","sequence":"additional","affiliation":[]},{"given":"M. J.","family":"Fenton","sequence":"additional","affiliation":[]},{"given":"A. B.","family":"Fenyuk","sequence":"additional","affiliation":[]},{"given":"S. W.","family":"Ferguson","sequence":"additional","affiliation":[]},{"given":"J.","family":"Ferrando","sequence":"additional","affiliation":[]},{"given":"A.","family":"Ferrante","sequence":"additional","affiliation":[]},{"given":"A.","family":"Ferrari","sequence":"additional","affiliation":[]},{"given":"P.","family":"Ferrari","sequence":"additional","affiliation":[]},{"given":"R.","family":"Ferrari","sequence":"additional","affiliation":[]},{"given":"D. E.","family":"Ferreira de Lima","sequence":"additional","affiliation":[]},{"given":"A.","family":"Ferrer","sequence":"additional","affiliation":[]},{"given":"D.","family":"Ferrere","sequence":"additional","affiliation":[]},{"given":"C.","family":"Ferretti","sequence":"additional","affiliation":[]},{"given":"F.","family":"Fiedler","sequence":"additional","affiliation":[]},{"given":"A.","family":"Filip\u010di\u010d","sequence":"additional","affiliation":[]},{"given":"F.","family":"Filthaut","sequence":"additional","affiliation":[]},{"given":"K. D.","family":"Finelli","sequence":"additional","affiliation":[]},{"given":"M. C. N.","family":"Fiolhais","sequence":"additional","affiliation":[]},{"given":"L.","family":"Fiorini","sequence":"additional","affiliation":[]},{"given":"F.","family":"Fischer","sequence":"additional","affiliation":[]},{"given":"W. C.","family":"Fisher","sequence":"additional","affiliation":[]},{"given":"I.","family":"Fleck","sequence":"additional","affiliation":[]},{"given":"P.","family":"Fleischmann","sequence":"additional","affiliation":[]},{"given":"T.","family":"Flick","sequence":"additional","affiliation":[]},{"given":"B. M.","family":"Flierl","sequence":"additional","affiliation":[]},{"given":"L.","family":"Flores","sequence":"additional","affiliation":[]},{"given":"L. R.","family":"Flores Castillo","sequence":"additional","affiliation":[]},{"given":"F. M.","family":"Follega","sequence":"additional","affiliation":[]},{"given":"N.","family":"Fomin","sequence":"additional","affiliation":[]},{"given":"J. H.","family":"Foo","sequence":"additional","affiliation":[]},{"given":"G. T.","family":"Forcolin","sequence":"additional","affiliation":[]},{"given":"A.","family":"Formica","sequence":"additional","affiliation":[]},{"given":"F. A.","family":"F\u00f6rster","sequence":"additional","affiliation":[]},{"given":"A. C.","family":"Forti","sequence":"additional","affiliation":[]},{"given":"A. G.","family":"Foster","sequence":"additional","affiliation":[]},{"given":"M. G.","family":"Foti","sequence":"additional","affiliation":[]},{"given":"D.","family":"Fournier","sequence":"additional","affiliation":[]},{"given":"H.","family":"Fox","sequence":"additional","affiliation":[]},{"given":"P.","family":"Francavilla","sequence":"additional","affiliation":[]},{"given":"S.","family":"Francescato","sequence":"additional","affiliation":[]},{"given":"M.","family":"Franchini","sequence":"additional","affiliation":[]},{"given":"S.","family":"Franchino","sequence":"additional","affiliation":[]},{"given":"D.","family":"Francis","sequence":"additional","affiliation":[]},{"given":"L.","family":"Franconi","sequence":"additional","affiliation":[]},{"given":"M.","family":"Franklin","sequence":"additional","affiliation":[]},{"given":"A. N.","family":"Fray","sequence":"additional","affiliation":[]},{"given":"P. M.","family":"Freeman","sequence":"additional","affiliation":[]},{"given":"B.","family":"Freund","sequence":"additional","affiliation":[]},{"given":"W. S.","family":"Freund","sequence":"additional","affiliation":[]},{"given":"E. M.","family":"Freundlich","sequence":"additional","affiliation":[]},{"given":"D. C.","family":"Frizzell","sequence":"additional","affiliation":[]},{"given":"D.","family":"Froidevaux","sequence":"additional","affiliation":[]},{"given":"J. A.","family":"Frost","sequence":"additional","affiliation":[]},{"given":"C.","family":"Fukunaga","sequence":"additional","affiliation":[]},{"given":"E.","family":"Fullana Torregrosa","sequence":"additional","affiliation":[]},{"given":"T.","family":"Fusayasu","sequence":"additional","affiliation":[]},{"given":"J.","family":"Fuster","sequence":"additional","affiliation":[]},{"given":"A.","family":"Gabrielli","sequence":"additional","affiliation":[]},{"given":"A.","family":"Gabrielli","sequence":"additional","affiliation":[]},{"given":"S.","family":"Gadatsch","sequence":"additional","affiliation":[]},{"given":"P.","family":"Gadow","sequence":"additional","affiliation":[]},{"given":"G.","family":"Gagliardi","sequence":"additional","affiliation":[]},{"given":"L. G.","family":"Gagnon","sequence":"additional","affiliation":[]},{"given":"B.","family":"Galhardo","sequence":"additional","affiliation":[]},{"given":"G. E.","family":"Gallardo","sequence":"additional","affiliation":[]},{"given":"E. J.","family":"Gallas","sequence":"additional","affiliation":[]},{"given":"B. J.","family":"Gallop","sequence":"additional","affiliation":[]},{"given":"G.","family":"Galster","sequence":"additional","affiliation":[]},{"given":"R.","family":"Gamboa Goni","sequence":"additional","affiliation":[]},{"given":"K. K.","family":"Gan","sequence":"additional","affiliation":[]},{"given":"S.","family":"Ganguly","sequence":"additional","affiliation":[]},{"given":"J.","family":"Gao","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Gao","sequence":"additional","affiliation":[]},{"given":"Y. S.","family":"Gao","sequence":"additional","affiliation":[]},{"given":"C.","family":"Garc\u00eda","sequence":"additional","affiliation":[]},{"given":"J. E.","family":"Garc\u00eda Navarro","sequence":"additional","affiliation":[]},{"given":"J. A.","family":"Garc\u00eda Pascual","sequence":"additional","affiliation":[]},{"given":"C.","family":"Garcia-Argos","sequence":"additional","affiliation":[]},{"given":"M.","family":"Garcia-Sciveres","sequence":"additional","affiliation":[]},{"given":"R. W.","family":"Gardner","sequence":"additional","affiliation":[]},{"given":"N.","family":"Garelli","sequence":"additional","affiliation":[]},{"given":"S.","family":"Gargiulo","sequence":"additional","affiliation":[]},{"given":"C. A.","family":"Garner","sequence":"additional","affiliation":[]},{"given":"V.","family":"Garonne","sequence":"additional","affiliation":[]},{"given":"S. J.","family":"Gasiorowski","sequence":"additional","affiliation":[]},{"given":"P.","family":"Gaspar","sequence":"additional","affiliation":[]},{"given":"A.","family":"Gaudiello","sequence":"additional","affiliation":[]},{"given":"G.","family":"Gaudio","sequence":"additional","affiliation":[]},{"given":"I. L.","family":"Gavrilenko","sequence":"additional","affiliation":[]},{"given":"A.","family":"Gavrilyuk","sequence":"additional","affiliation":[]},{"given":"C.","family":"Gay","sequence":"additional","affiliation":[]},{"given":"G.","family":"Gaycken","sequence":"additional","affiliation":[]},{"given":"E. N.","family":"Gazis","sequence":"additional","affiliation":[]},{"given":"A. A.","family":"Geanta","sequence":"additional","affiliation":[]},{"given":"C. M.","family":"Gee","sequence":"additional","affiliation":[]},{"given":"C. N. P.","family":"Gee","sequence":"additional","affiliation":[]},{"given":"J.","family":"Geisen","sequence":"additional","affiliation":[]},{"given":"M.","family":"Geisen","sequence":"additional","affiliation":[]},{"given":"C.","family":"Gemme","sequence":"additional","affiliation":[]},{"given":"M. H.","family":"Genest","sequence":"additional","affiliation":[]},{"given":"C.","family":"Geng","sequence":"additional","affiliation":[]},{"given":"S.","family":"Gentile","sequence":"additional","affiliation":[]},{"given":"S.","family":"George","sequence":"additional","affiliation":[]},{"given":"T.","family":"Geralis","sequence":"additional","affiliation":[]},{"given":"L. O.","family":"Gerlach","sequence":"additional","affiliation":[]},{"given":"P.","family":"Gessinger-Befurt","sequence":"additional","affiliation":[]},{"given":"G.","family":"Gessner","sequence":"additional","affiliation":[]},{"given":"S.","family":"Ghasemi","sequence":"additional","affiliation":[]},{"given":"M.","family":"Ghasemi Bostanabad","sequence":"additional","affiliation":[]},{"given":"M.","family":"Ghneimat","sequence":"additional","affiliation":[]},{"given":"A.","family":"Ghosh","sequence":"additional","affiliation":[]},{"given":"A.","family":"Ghosh","sequence":"additional","affiliation":[]},{"given":"B.","family":"Giacobbe","sequence":"additional","affiliation":[]},{"given":"S.","family":"Giagu","sequence":"additional","affiliation":[]},{"given":"N.","family":"Giangiacomi","sequence":"additional","affiliation":[]},{"given":"P.","family":"Giannetti","sequence":"additional","affiliation":[]},{"given":"A.","family":"Giannini","sequence":"additional","affiliation":[]},{"given":"G.","family":"Giannini","sequence":"additional","affiliation":[]},{"given":"S. M.","family":"Gibson","sequence":"additional","affiliation":[]},{"given":"M.","family":"Gignac","sequence":"additional","affiliation":[]},{"given":"D.","family":"Gillberg","sequence":"additional","affiliation":[]},{"given":"G.","family":"Gilles","sequence":"additional","affiliation":[]},{"given":"D. M.","family":"Gingrich","sequence":"additional","affiliation":[]},{"given":"M. P.","family":"Giordani","sequence":"additional","affiliation":[]},{"given":"P. F.","family":"Giraud","sequence":"additional","affiliation":[]},{"given":"G.","family":"Giugliarelli","sequence":"additional","affiliation":[]},{"given":"D.","family":"Giugni","sequence":"additional","affiliation":[]},{"given":"F.","family":"Giuli","sequence":"additional","affiliation":[]},{"given":"S.","family":"Gkaitatzis","sequence":"additional","affiliation":[]},{"given":"I.","family":"Gkialas","sequence":"additional","affiliation":[]},{"given":"E. L.","family":"Gkougkousis","sequence":"additional","affiliation":[]},{"given":"P.","family":"Gkountoumis","sequence":"additional","affiliation":[]},{"given":"L. K.","family":"Gladilin","sequence":"additional","affiliation":[]},{"given":"C.","family":"Glasman","sequence":"additional","affiliation":[]},{"given":"J.","family":"Glatzer","sequence":"additional","affiliation":[]},{"given":"P. C. F.","family":"Glaysher","sequence":"additional","affiliation":[]},{"given":"A.","family":"Glazov","sequence":"additional","affiliation":[]},{"given":"G. R.","family":"Gledhill","sequence":"additional","affiliation":[]},{"given":"I.","family":"Gnesi","sequence":"additional","affiliation":[]},{"given":"M.","family":"Goblirsch-Kolb","sequence":"additional","affiliation":[]},{"given":"D.","family":"Godin","sequence":"additional","affiliation":[]},{"given":"S.","family":"Goldfarb","sequence":"additional","affiliation":[]},{"given":"T.","family":"Golling","sequence":"additional","affiliation":[]},{"given":"D.","family":"Golubkov","sequence":"additional","affiliation":[]},{"given":"A.","family":"Gomes","sequence":"additional","affiliation":[]},{"given":"R.","family":"Goncalves Gama","sequence":"additional","affiliation":[]},{"given":"R.","family":"Gon\u00e7alo","sequence":"additional","affiliation":[]},{"given":"G.","family":"Gonella","sequence":"additional","affiliation":[]},{"given":"L.","family":"Gonella","sequence":"additional","affiliation":[]},{"given":"A.","family":"Gongadze","sequence":"additional","affiliation":[]},{"given":"F.","family":"Gonnella","sequence":"additional","affiliation":[]},{"given":"J. L.","family":"Gonski","sequence":"additional","affiliation":[]},{"given":"S.","family":"Gonz\u00e1lez de la Hoz","sequence":"additional","affiliation":[]},{"given":"S.","family":"Gonzalez Fernandez","sequence":"additional","affiliation":[]},{"given":"S.","family":"Gonzalez-Sevilla","sequence":"additional","affiliation":[]},{"given":"G. R.","family":"Gonzalvo Rodriguez","sequence":"additional","affiliation":[]},{"given":"L.","family":"Goossens","sequence":"additional","affiliation":[]},{"given":"N. A.","family":"Gorasia","sequence":"additional","affiliation":[]},{"given":"P. A.","family":"Gorbounov","sequence":"additional","affiliation":[]},{"given":"H. A.","family":"Gordon","sequence":"additional","affiliation":[]},{"given":"B.","family":"Gorini","sequence":"additional","affiliation":[]},{"given":"E.","family":"Gorini","sequence":"additional","affiliation":[]},{"given":"A.","family":"Gori\u0161ek","sequence":"additional","affiliation":[]},{"given":"A. T.","family":"Goshaw","sequence":"additional","affiliation":[]},{"given":"M. I.","family":"Gostkin","sequence":"additional","affiliation":[]},{"given":"C. A.","family":"Gottardo","sequence":"additional","affiliation":[]},{"given":"M.","family":"Gouighri","sequence":"additional","affiliation":[]},{"given":"A. G.","family":"Goussiou","sequence":"additional","affiliation":[]},{"given":"N.","family":"Govender","sequence":"additional","affiliation":[]},{"given":"C.","family":"Goy","sequence":"additional","affiliation":[]},{"given":"E.","family":"Gozani","sequence":"additional","affiliation":[]},{"given":"I.","family":"Grabowska-Bold","sequence":"additional","affiliation":[]},{"given":"E. C.","family":"Graham","sequence":"additional","affiliation":[]},{"given":"J.","family":"Gramling","sequence":"additional","affiliation":[]},{"given":"E.","family":"Gramstad","sequence":"additional","affiliation":[]},{"given":"S.","family":"Grancagnolo","sequence":"additional","affiliation":[]},{"given":"M.","family":"Grandi","sequence":"additional","affiliation":[]},{"given":"V.","family":"Gratchev","sequence":"additional","affiliation":[]},{"given":"P. M.","family":"Gravila","sequence":"additional","affiliation":[]},{"given":"F. G.","family":"Gravili","sequence":"additional","affiliation":[]},{"given":"C.","family":"Gray","sequence":"additional","affiliation":[]},{"given":"H. M.","family":"Gray","sequence":"additional","affiliation":[]},{"given":"C.","family":"Grefe","sequence":"additional","affiliation":[]},{"given":"K.","family":"Gregersen","sequence":"additional","affiliation":[]},{"given":"I. M.","family":"Gregor","sequence":"additional","affiliation":[]},{"given":"P.","family":"Grenier","sequence":"additional","affiliation":[]},{"given":"K.","family":"Grevtsov","sequence":"additional","affiliation":[]},{"given":"C.","family":"Grieco","sequence":"additional","affiliation":[]},{"given":"N. A.","family":"Grieser","sequence":"additional","affiliation":[]},{"given":"A. A.","family":"Grillo","sequence":"additional","affiliation":[]},{"given":"K.","family":"Grimm","sequence":"additional","affiliation":[]},{"given":"S.","family":"Grinstein","sequence":"additional","affiliation":[]},{"given":"J.-F.","family":"Grivaz","sequence":"additional","affiliation":[]},{"given":"S.","family":"Groh","sequence":"additional","affiliation":[]},{"given":"E.","family":"Gross","sequence":"additional","affiliation":[]},{"given":"J.","family":"Grosse-Knetter","sequence":"additional","affiliation":[]},{"given":"Z. J.","family":"Grout","sequence":"additional","affiliation":[]},{"given":"C.","family":"Grud","sequence":"additional","affiliation":[]},{"given":"A.","family":"Grummer","sequence":"additional","affiliation":[]},{"given":"L.","family":"Guan","sequence":"additional","affiliation":[]},{"given":"W.","family":"Guan","sequence":"additional","affiliation":[]},{"given":"C.","family":"Gubbels","sequence":"additional","affiliation":[]},{"given":"J.","family":"Guenther","sequence":"additional","affiliation":[]},{"given":"A.","family":"Guerguichon","sequence":"additional","affiliation":[]},{"given":"J. G. R.","family":"Guerrero Rojas","sequence":"additional","affiliation":[]},{"given":"F.","family":"Guescini","sequence":"additional","affiliation":[]},{"given":"D.","family":"Guest","sequence":"additional","affiliation":[]},{"given":"R.","family":"Gugel","sequence":"additional","affiliation":[]},{"given":"T.","family":"Guillemin","sequence":"additional","affiliation":[]},{"given":"S.","family":"Guindon","sequence":"additional","affiliation":[]},{"given":"U.","family":"Gul","sequence":"additional","affiliation":[]},{"given":"J.","family":"Guo","sequence":"additional","affiliation":[]},{"given":"W.","family":"Guo","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Guo","sequence":"additional","affiliation":[]},{"given":"Z.","family":"Guo","sequence":"additional","affiliation":[]},{"given":"R.","family":"Gupta","sequence":"additional","affiliation":[]},{"given":"S.","family":"Gurbuz","sequence":"additional","affiliation":[]},{"given":"G.","family":"Gustavino","sequence":"additional","affiliation":[]},{"given":"M.","family":"Guth","sequence":"additional","affiliation":[]},{"given":"P.","family":"Gutierrez","sequence":"additional","affiliation":[]},{"given":"C.","family":"Gutschow","sequence":"additional","affiliation":[]},{"given":"C.","family":"Guyot","sequence":"additional","affiliation":[]},{"given":"C.","family":"Gwenlan","sequence":"additional","affiliation":[]},{"given":"C. B.","family":"Gwilliam","sequence":"additional","affiliation":[]},{"given":"A.","family":"Haas","sequence":"additional","affiliation":[]},{"given":"C.","family":"Haber","sequence":"additional","affiliation":[]},{"given":"H. K.","family":"Hadavand","sequence":"additional","affiliation":[]},{"given":"A.","family":"Hadef","sequence":"additional","affiliation":[]},{"given":"M.","family":"Haleem","sequence":"additional","affiliation":[]},{"given":"J.","family":"Haley","sequence":"additional","affiliation":[]},{"given":"G.","family":"Halladjian","sequence":"additional","affiliation":[]},{"given":"G. D.","family":"Hallewell","sequence":"additional","affiliation":[]},{"given":"K.","family":"Hamacher","sequence":"additional","affiliation":[]},{"given":"P.","family":"Hamal","sequence":"additional","affiliation":[]},{"given":"K.","family":"Hamano","sequence":"additional","affiliation":[]},{"given":"H.","family":"Hamdaoui","sequence":"additional","affiliation":[]},{"given":"M.","family":"Hamer","sequence":"additional","affiliation":[]},{"given":"G. N.","family":"Hamity","sequence":"additional","affiliation":[]},{"given":"K.","family":"Han","sequence":"additional","affiliation":[]},{"given":"L.","family":"Han","sequence":"additional","affiliation":[]},{"given":"S.","family":"Han","sequence":"additional","affiliation":[]},{"given":"Y. F.","family":"Han","sequence":"additional","affiliation":[]},{"given":"K.","family":"Hanagaki","sequence":"additional","affiliation":[]},{"given":"M.","family":"Hance","sequence":"additional","affiliation":[]},{"given":"D. M.","family":"Handl","sequence":"additional","affiliation":[]},{"given":"B.","family":"Haney","sequence":"additional","affiliation":[]},{"given":"R.","family":"Hankache","sequence":"additional","affiliation":[]},{"given":"E.","family":"Hansen","sequence":"additional","affiliation":[]},{"given":"J. B.","family":"Hansen","sequence":"additional","affiliation":[]},{"given":"J. D.","family":"Hansen","sequence":"additional","affiliation":[]},{"given":"M. C.","family":"Hansen","sequence":"additional","affiliation":[]},{"given":"P. H.","family":"Hansen","sequence":"additional","affiliation":[]},{"given":"E. C.","family":"Hanson","sequence":"additional","affiliation":[]},{"given":"K.","family":"Hara","sequence":"additional","affiliation":[]},{"given":"T.","family":"Harenberg","sequence":"additional","affiliation":[]},{"given":"S.","family":"Harkusha","sequence":"additional","affiliation":[]},{"given":"P. F.","family":"Harrison","sequence":"additional","affiliation":[]},{"given":"N. M.","family":"Hartmann","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Hasegawa","sequence":"additional","affiliation":[]},{"given":"A.","family":"Hasib","sequence":"additional","affiliation":[]},{"given":"S.","family":"Hassani","sequence":"additional","affiliation":[]},{"given":"S.","family":"Haug","sequence":"additional","affiliation":[]},{"given":"R.","family":"Hauser","sequence":"additional","affiliation":[]},{"given":"L. B.","family":"Havener","sequence":"additional","affiliation":[]},{"given":"M.","family":"Havranek","sequence":"additional","affiliation":[]},{"given":"C. M.","family":"Hawkes","sequence":"additional","affiliation":[]},{"given":"R. J.","family":"Hawkings","sequence":"additional","affiliation":[]},{"given":"D.","family":"Hayden","sequence":"additional","affiliation":[]},{"given":"C.","family":"Hayes","sequence":"additional","affiliation":[]},{"given":"R. L.","family":"Hayes","sequence":"additional","affiliation":[]},{"given":"C. P.","family":"Hays","sequence":"additional","affiliation":[]},{"given":"J. M.","family":"Hays","sequence":"additional","affiliation":[]},{"given":"H. S.","family":"Hayward","sequence":"additional","affiliation":[]},{"given":"S. J.","family":"Haywood","sequence":"additional","affiliation":[]},{"given":"F.","family":"He","sequence":"additional","affiliation":[]},{"given":"M. P.","family":"Heath","sequence":"additional","affiliation":[]},{"given":"V.","family":"Hedberg","sequence":"additional","affiliation":[]},{"given":"S.","family":"Heer","sequence":"additional","affiliation":[]},{"given":"K. K.","family":"Heidegger","sequence":"additional","affiliation":[]},{"given":"W. D.","family":"Heidorn","sequence":"additional","affiliation":[]},{"given":"J.","family":"Heilman","sequence":"additional","affiliation":[]},{"given":"S.","family":"Heim","sequence":"additional","affiliation":[]},{"given":"T.","family":"Heim","sequence":"additional","affiliation":[]},{"given":"B.","family":"Heinemann","sequence":"additional","affiliation":[]},{"given":"J. J.","family":"Heinrich","sequence":"additional","affiliation":[]},{"given":"L.","family":"Heinrich","sequence":"additional","affiliation":[]},{"given":"J.","family":"Hejbal","sequence":"additional","affiliation":[]},{"given":"L.","family":"Helary","sequence":"additional","affiliation":[]},{"given":"A.","family":"Held","sequence":"additional","affiliation":[]},{"given":"S.","family":"Hellesund","sequence":"additional","affiliation":[]},{"given":"C. M.","family":"Helling","sequence":"additional","affiliation":[]},{"given":"S.","family":"Hellman","sequence":"additional","affiliation":[]},{"given":"C.","family":"Helsens","sequence":"additional","affiliation":[]},{"given":"R. C. W.","family":"Henderson","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Heng","sequence":"additional","affiliation":[]},{"given":"L.","family":"Henkelmann","sequence":"additional","affiliation":[]},{"given":"S.","family":"Henkelmann","sequence":"additional","affiliation":[]},{"given":"A. M.","family":"Henriques Correia","sequence":"additional","affiliation":[]},{"given":"H.","family":"Herde","sequence":"additional","affiliation":[]},{"given":"V.","family":"Herget","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Hern\u00e1ndez Jim\u00e9nez","sequence":"additional","affiliation":[]},{"given":"H.","family":"Herr","sequence":"additional","affiliation":[]},{"given":"M. G.","family":"Herrmann","sequence":"additional","affiliation":[]},{"given":"T.","family":"Herrmann","sequence":"additional","affiliation":[]},{"given":"G.","family":"Herten","sequence":"additional","affiliation":[]},{"given":"R.","family":"Hertenberger","sequence":"additional","affiliation":[]},{"given":"L.","family":"Hervas","sequence":"additional","affiliation":[]},{"given":"T. C.","family":"Herwig","sequence":"additional","affiliation":[]},{"given":"G. G.","family":"Hesketh","sequence":"additional","affiliation":[]},{"given":"N. P.","family":"Hessey","sequence":"additional","affiliation":[]},{"given":"A.","family":"Higashida","sequence":"additional","affiliation":[]},{"given":"S.","family":"Higashino","sequence":"additional","affiliation":[]},{"given":"E.","family":"Hig\u00f3n-Rodriguez","sequence":"additional","affiliation":[]},{"given":"K.","family":"Hildebrand","sequence":"additional","affiliation":[]},{"given":"J. C.","family":"Hill","sequence":"additional","affiliation":[]},{"given":"K. K.","family":"Hill","sequence":"additional","affiliation":[]},{"given":"K. H.","family":"Hiller","sequence":"additional","affiliation":[]},{"given":"S. J.","family":"Hillier","sequence":"additional","affiliation":[]},{"given":"M.","family":"Hils","sequence":"additional","affiliation":[]},{"given":"I.","family":"Hinchliffe","sequence":"additional","affiliation":[]},{"given":"F.","family":"Hinterkeuser","sequence":"additional","affiliation":[]},{"given":"M.","family":"Hirose","sequence":"additional","affiliation":[]},{"given":"S.","family":"Hirose","sequence":"additional","affiliation":[]},{"given":"D.","family":"Hirschbuehl","sequence":"additional","affiliation":[]},{"given":"B.","family":"Hiti","sequence":"additional","affiliation":[]},{"given":"O.","family":"Hladik","sequence":"additional","affiliation":[]},{"given":"D. R.","family":"Hlaluku","sequence":"additional","affiliation":[]},{"given":"J.","family":"Hobbs","sequence":"additional","affiliation":[]},{"given":"N.","family":"Hod","sequence":"additional","affiliation":[]},{"given":"M. C.","family":"Hodgkinson","sequence":"additional","affiliation":[]},{"given":"A.","family":"Hoecker","sequence":"additional","affiliation":[]},{"given":"D.","family":"Hohn","sequence":"additional","affiliation":[]},{"given":"D.","family":"Hohov","sequence":"additional","affiliation":[]},{"given":"T.","family":"Holm","sequence":"additional","affiliation":[]},{"given":"T. R.","family":"Holmes","sequence":"additional","affiliation":[]},{"given":"M.","family":"Holzbock","sequence":"additional","affiliation":[]},{"given":"L. B. A. H.","family":"Hommels","sequence":"additional","affiliation":[]},{"given":"S.","family":"Honda","sequence":"additional","affiliation":[]},{"given":"T. M.","family":"Hong","sequence":"additional","affiliation":[]},{"given":"J. C.","family":"Honig","sequence":"additional","affiliation":[]},{"given":"A.","family":"H\u00f6nle","sequence":"additional","affiliation":[]},{"given":"B. H.","family":"Hooberman","sequence":"additional","affiliation":[]},{"given":"W. H.","family":"Hopkins","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Horii","sequence":"additional","affiliation":[]},{"given":"P.","family":"Horn","sequence":"additional","affiliation":[]},{"given":"L. A.","family":"Horyn","sequence":"additional","affiliation":[]},{"given":"S.","family":"Hou","sequence":"additional","affiliation":[]},{"given":"A.","family":"Hoummada","sequence":"additional","affiliation":[]},{"given":"J.","family":"Howarth","sequence":"additional","affiliation":[]},{"given":"J.","family":"Hoya","sequence":"additional","affiliation":[]},{"given":"M.","family":"Hrabovsky","sequence":"additional","affiliation":[]},{"given":"J.","family":"Hrdinka","sequence":"additional","affiliation":[]},{"given":"I.","family":"Hristova","sequence":"additional","affiliation":[]},{"given":"J.","family":"Hrivnac","sequence":"additional","affiliation":[]},{"given":"A.","family":"Hrynevich","sequence":"additional","affiliation":[]},{"given":"T.","family":"Hryn\u2019ova","sequence":"additional","affiliation":[]},{"given":"P. J.","family":"Hsu","sequence":"additional","affiliation":[]},{"given":"S.-C.","family":"Hsu","sequence":"additional","affiliation":[]},{"given":"Q.","family":"Hu","sequence":"additional","affiliation":[]},{"given":"S.","family":"Hu","sequence":"additional","affiliation":[]},{"given":"Y. F.","family":"Hu","sequence":"additional","affiliation":[]},{"given":"D. P.","family":"Huang","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Huang","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Huang","sequence":"additional","affiliation":[]},{"given":"Z.","family":"Hubacek","sequence":"additional","affiliation":[]},{"given":"F.","family":"Hubaut","sequence":"additional","affiliation":[]},{"given":"M.","family":"Huebner","sequence":"additional","affiliation":[]},{"given":"F.","family":"Huegging","sequence":"additional","affiliation":[]},{"given":"T. B.","family":"Huffman","sequence":"additional","affiliation":[]},{"given":"M.","family":"Huhtinen","sequence":"additional","affiliation":[]},{"given":"R. F. H.","family":"Hunter","sequence":"additional","affiliation":[]},{"given":"P.","family":"Huo","sequence":"additional","affiliation":[]},{"given":"N.","family":"Huseynov","sequence":"additional","affiliation":[]},{"given":"J.","family":"Huston","sequence":"additional","affiliation":[]},{"given":"J.","family":"Huth","sequence":"additional","affiliation":[]},{"given":"R.","family":"Hyneman","sequence":"additional","affiliation":[]},{"given":"S.","family":"Hyrych","sequence":"additional","affiliation":[]},{"given":"G.","family":"Iacobucci","sequence":"additional","affiliation":[]},{"given":"G.","family":"Iakovidis","sequence":"additional","affiliation":[]},{"given":"I.","family":"Ibragimov","sequence":"additional","affiliation":[]},{"given":"L.","family":"Iconomidou-Fayard","sequence":"additional","affiliation":[]},{"given":"P.","family":"Iengo","sequence":"additional","affiliation":[]},{"given":"R.","family":"Ignazzi","sequence":"additional","affiliation":[]},{"given":"O.","family":"Igonkina","sequence":"additional","affiliation":[]},{"given":"R.","family":"Iguchi","sequence":"additional","affiliation":[]},{"given":"T.","family":"Iizawa","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Ikegami","sequence":"additional","affiliation":[]},{"given":"M.","family":"Ikeno","sequence":"additional","affiliation":[]},{"given":"A.","family":"Ilg","sequence":"additional","affiliation":[]},{"given":"D.","family":"Iliadis","sequence":"additional","affiliation":[]},{"given":"N.","family":"Ilic","sequence":"additional","affiliation":[]},{"given":"F.","family":"Iltzsche","sequence":"additional","affiliation":[]},{"given":"G.","family":"Introzzi","sequence":"additional","affiliation":[]},{"given":"M.","family":"Iodice","sequence":"additional","affiliation":[]},{"given":"K.","family":"Iordanidou","sequence":"additional","affiliation":[]},{"given":"V.","family":"Ippolito","sequence":"additional","affiliation":[]},{"given":"M. F.","family":"Isacson","sequence":"additional","affiliation":[]},{"given":"M.","family":"Ishino","sequence":"additional","affiliation":[]},{"given":"W.","family":"Islam","sequence":"additional","affiliation":[]},{"given":"C.","family":"Issever","sequence":"additional","affiliation":[]},{"given":"S.","family":"Istin","sequence":"additional","affiliation":[]},{"given":"F.","family":"Ito","sequence":"additional","affiliation":[]},{"given":"J. M.","family":"Iturbe Ponce","sequence":"additional","affiliation":[]},{"given":"R.","family":"Iuppa","sequence":"additional","affiliation":[]},{"given":"A.","family":"Ivina","sequence":"additional","affiliation":[]},{"given":"H.","family":"Iwasaki","sequence":"additional","affiliation":[]},{"given":"J. M.","family":"Izen","sequence":"additional","affiliation":[]},{"given":"V.","family":"Izzo","sequence":"additional","affiliation":[]},{"given":"P.","family":"Jacka","sequence":"additional","affiliation":[]},{"given":"P.","family":"Jackson","sequence":"additional","affiliation":[]},{"given":"R. M.","family":"Jacobs","sequence":"additional","affiliation":[]},{"given":"B. P.","family":"Jaeger","sequence":"additional","affiliation":[]},{"given":"V.","family":"Jain","sequence":"additional","affiliation":[]},{"given":"G.","family":"J\u00e4kel","sequence":"additional","affiliation":[]},{"given":"K. B.","family":"Jakobi","sequence":"additional","affiliation":[]},{"given":"K.","family":"Jakobs","sequence":"additional","affiliation":[]},{"given":"T.","family":"Jakoubek","sequence":"additional","affiliation":[]},{"given":"J.","family":"Jamieson","sequence":"additional","affiliation":[]},{"given":"K. W.","family":"Janas","sequence":"additional","affiliation":[]},{"given":"R.","family":"Jansky","sequence":"additional","affiliation":[]},{"given":"M.","family":"Janus","sequence":"additional","affiliation":[]},{"given":"P. A.","family":"Janus","sequence":"additional","affiliation":[]},{"given":"G.","family":"Jarlskog","sequence":"additional","affiliation":[]},{"given":"N.","family":"Javadov","sequence":"additional","affiliation":[]},{"given":"T.","family":"Jav\u016frek","sequence":"additional","affiliation":[]},{"given":"M.","family":"Javurkova","sequence":"additional","affiliation":[]},{"given":"F.","family":"Jeanneau","sequence":"additional","affiliation":[]},{"given":"L.","family":"Jeanty","sequence":"additional","affiliation":[]},{"given":"J.","family":"Jejelava","sequence":"additional","affiliation":[]},{"given":"A.","family":"Jelinskas","sequence":"additional","affiliation":[]},{"given":"P.","family":"Jenni","sequence":"additional","affiliation":[]},{"given":"N.","family":"Jeong","sequence":"additional","affiliation":[]},{"given":"S.","family":"J\u00e9z\u00e9quel","sequence":"additional","affiliation":[]},{"given":"H.","family":"Ji","sequence":"additional","affiliation":[]},{"given":"J.","family":"Jia","sequence":"additional","affiliation":[]},{"given":"H.","family":"Jiang","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Jiang","sequence":"additional","affiliation":[]},{"given":"Z.","family":"Jiang","sequence":"additional","affiliation":[]},{"given":"S.","family":"Jiggins","sequence":"additional","affiliation":[]},{"given":"F. A.","family":"Jimenez Morales","sequence":"additional","affiliation":[]},{"given":"J.","family":"Jimenez Pena","sequence":"additional","affiliation":[]},{"given":"S.","family":"Jin","sequence":"additional","affiliation":[]},{"given":"A.","family":"Jinaru","sequence":"additional","affiliation":[]},{"given":"O.","family":"Jinnouchi","sequence":"additional","affiliation":[]},{"given":"H.","family":"Jivan","sequence":"additional","affiliation":[]},{"given":"P.","family":"Johansson","sequence":"additional","affiliation":[]},{"given":"K. A.","family":"Johns","sequence":"additional","affiliation":[]},{"given":"C. A.","family":"Johnson","sequence":"additional","affiliation":[]},{"given":"R. W. L.","family":"Jones","sequence":"additional","affiliation":[]},{"given":"S. D.","family":"Jones","sequence":"additional","affiliation":[]},{"given":"S.","family":"Jones","sequence":"additional","affiliation":[]},{"given":"T. J.","family":"Jones","sequence":"additional","affiliation":[]},{"given":"J.","family":"Jongmanns","sequence":"additional","affiliation":[]},{"given":"P. M.","family":"Jorge","sequence":"additional","affiliation":[]},{"given":"J.","family":"Jovicevic","sequence":"additional","affiliation":[]},{"given":"X.","family":"Ju","sequence":"additional","affiliation":[]},{"given":"J. J.","family":"Junggeburth","sequence":"additional","affiliation":[]},{"given":"A.","family":"Juste Rozas","sequence":"additional","affiliation":[]},{"given":"A.","family":"Kaczmarska","sequence":"additional","affiliation":[]},{"given":"M.","family":"Kado","sequence":"additional","affiliation":[]},{"given":"H.","family":"Kagan","sequence":"additional","affiliation":[]},{"given":"M.","family":"Kagan","sequence":"additional","affiliation":[]},{"given":"A.","family":"Kahn","sequence":"additional","affiliation":[]},{"given":"C.","family":"Kahra","sequence":"additional","affiliation":[]},{"given":"T.","family":"Kaji","sequence":"additional","affiliation":[]},{"given":"E.","family":"Kajomovitz","sequence":"additional","affiliation":[]},{"given":"C. W.","family":"Kalderon","sequence":"additional","affiliation":[]},{"given":"A.","family":"Kaluza","sequence":"additional","affiliation":[]},{"given":"A.","family":"Kamenshchikov","sequence":"additional","affiliation":[]},{"given":"M.","family":"Kaneda","sequence":"additional","affiliation":[]},{"given":"N. J.","family":"Kang","sequence":"additional","affiliation":[]},{"given":"S.","family":"Kang","sequence":"additional","affiliation":[]},{"given":"L.","family":"Kanjir","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Kano","sequence":"additional","affiliation":[]},{"given":"J.","family":"Kanzaki","sequence":"additional","affiliation":[]},{"given":"L. S.","family":"Kaplan","sequence":"additional","affiliation":[]},{"given":"D.","family":"Kar","sequence":"additional","affiliation":[]},{"given":"K.","family":"Karava","sequence":"additional","affiliation":[]},{"given":"M. J.","family":"Kareem","sequence":"additional","affiliation":[]},{"given":"S. N.","family":"Karpov","sequence":"additional","affiliation":[]},{"given":"Z. M.","family":"Karpova","sequence":"additional","affiliation":[]},{"given":"V.","family":"Kartvelishvili","sequence":"additional","affiliation":[]},{"given":"A. N.","family":"Karyukhin","sequence":"additional","affiliation":[]},{"given":"A.","family":"Kastanas","sequence":"additional","affiliation":[]},{"given":"C.","family":"Kato","sequence":"additional","affiliation":[]},{"given":"J.","family":"Katzy","sequence":"additional","affiliation":[]},{"given":"K.","family":"Kawade","sequence":"additional","affiliation":[]},{"given":"K.","family":"Kawagoe","sequence":"additional","affiliation":[]},{"given":"T.","family":"Kawaguchi","sequence":"additional","affiliation":[]},{"given":"T.","family":"Kawamoto","sequence":"additional","affiliation":[]},{"given":"G.","family":"Kawamura","sequence":"additional","affiliation":[]},{"given":"E. F.","family":"Kay","sequence":"additional","affiliation":[]},{"given":"V. F.","family":"Kazanin","sequence":"additional","affiliation":[]},{"given":"R.","family":"Keeler","sequence":"additional","affiliation":[]},{"given":"R.","family":"Kehoe","sequence":"additional","affiliation":[]},{"given":"J. S.","family":"Keller","sequence":"additional","affiliation":[]},{"given":"E.","family":"Kellermann","sequence":"additional","affiliation":[]},{"given":"D.","family":"Kelsey","sequence":"additional","affiliation":[]},{"given":"J. J.","family":"Kempster","sequence":"additional","affiliation":[]},{"given":"J.","family":"Kendrick","sequence":"additional","affiliation":[]},{"given":"K. E.","family":"Kennedy","sequence":"additional","affiliation":[]},{"given":"O.","family":"Kepka","sequence":"additional","affiliation":[]},{"given":"S.","family":"Kersten","sequence":"additional","affiliation":[]},{"given":"B. P.","family":"Ker\u0161evan","sequence":"additional","affiliation":[]},{"given":"S.","family":"Ketabchi Haghighat","sequence":"additional","affiliation":[]},{"given":"M.","family":"Khader","sequence":"additional","affiliation":[]},{"given":"F.","family":"Khalil-Zada","sequence":"additional","affiliation":[]},{"given":"M.","family":"Khandoga","sequence":"additional","affiliation":[]},{"given":"A.","family":"Khanov","sequence":"additional","affiliation":[]},{"given":"A. G.","family":"Kharlamov","sequence":"additional","affiliation":[]},{"given":"T.","family":"Kharlamova","sequence":"additional","affiliation":[]},{"given":"E. E.","family":"Khoda","sequence":"additional","affiliation":[]},{"given":"A.","family":"Khodinov","sequence":"additional","affiliation":[]},{"given":"T. J.","family":"Khoo","sequence":"additional","affiliation":[]},{"given":"E.","family":"Khramov","sequence":"additional","affiliation":[]},{"given":"J.","family":"Khubua","sequence":"additional","affiliation":[]},{"given":"S.","family":"Kido","sequence":"additional","affiliation":[]},{"given":"M.","family":"Kiehn","sequence":"additional","affiliation":[]},{"given":"C. R.","family":"Kilby","sequence":"additional","affiliation":[]},{"given":"E.","family":"Kim","sequence":"additional","affiliation":[]},{"given":"Y. K.","family":"Kim","sequence":"additional","affiliation":[]},{"given":"N.","family":"Kimura","sequence":"additional","affiliation":[]},{"given":"O. M.","family":"Kind","sequence":"additional","affiliation":[]},{"given":"B. T.","family":"King","sequence":"additional","affiliation":[]},{"given":"D.","family":"Kirchmeier","sequence":"additional","affiliation":[]},{"given":"J.","family":"Kirk","sequence":"additional","affiliation":[]},{"given":"A. E.","family":"Kiryunin","sequence":"additional","affiliation":[]},{"given":"T.","family":"Kishimoto","sequence":"additional","affiliation":[]},{"given":"D. P.","family":"Kisliuk","sequence":"additional","affiliation":[]},{"given":"V.","family":"Kitali","sequence":"additional","affiliation":[]},{"given":"O.","family":"Kivernyk","sequence":"additional","affiliation":[]},{"given":"T.","family":"Klapdor-Kleingrothaus","sequence":"additional","affiliation":[]},{"given":"M.","family":"Klassen","sequence":"additional","affiliation":[]},{"given":"C.","family":"Klein","sequence":"additional","affiliation":[]},{"given":"M. H.","family":"Klein","sequence":"additional","affiliation":[]},{"given":"M.","family":"Klein","sequence":"additional","affiliation":[]},{"given":"U.","family":"Klein","sequence":"additional","affiliation":[]},{"given":"K.","family":"Kleinknecht","sequence":"additional","affiliation":[]},{"given":"P.","family":"Klimek","sequence":"additional","affiliation":[]},{"given":"A.","family":"Klimentov","sequence":"additional","affiliation":[]},{"given":"T.","family":"Klingl","sequence":"additional","affiliation":[]},{"given":"T.","family":"Klioutchnikova","sequence":"additional","affiliation":[]},{"given":"F. F.","family":"Klitzner","sequence":"additional","affiliation":[]},{"given":"P.","family":"Kluit","sequence":"additional","affiliation":[]},{"given":"S.","family":"Kluth","sequence":"additional","affiliation":[]},{"given":"E.","family":"Kneringer","sequence":"additional","affiliation":[]},{"given":"E. B. F. G.","family":"Knoops","sequence":"additional","affiliation":[]},{"given":"A.","family":"Knue","sequence":"additional","affiliation":[]},{"given":"D.","family":"Kobayashi","sequence":"additional","affiliation":[]},{"given":"T.","family":"Kobayashi","sequence":"additional","affiliation":[]},{"given":"M.","family":"Kobel","sequence":"additional","affiliation":[]},{"given":"M.","family":"Kocian","sequence":"additional","affiliation":[]},{"given":"T.","family":"Kodama","sequence":"additional","affiliation":[]},{"given":"P.","family":"Kodys","sequence":"additional","affiliation":[]},{"given":"P. T.","family":"Koenig","sequence":"additional","affiliation":[]},{"given":"T.","family":"Koffas","sequence":"additional","affiliation":[]},{"given":"N. M.","family":"K\u00f6hler","sequence":"additional","affiliation":[]},{"given":"M.","family":"Kolb","sequence":"additional","affiliation":[]},{"given":"I.","family":"Koletsou","sequence":"additional","affiliation":[]},{"given":"T.","family":"Komarek","sequence":"additional","affiliation":[]},{"given":"T.","family":"Kondo","sequence":"additional","affiliation":[]},{"given":"K.","family":"K\u00f6neke","sequence":"additional","affiliation":[]},{"given":"A. X. Y.","family":"Kong","sequence":"additional","affiliation":[]},{"given":"A. C.","family":"K\u00f6nig","sequence":"additional","affiliation":[]},{"given":"T.","family":"Kono","sequence":"additional","affiliation":[]},{"given":"V.","family":"Konstantinides","sequence":"additional","affiliation":[]},{"given":"N.","family":"Konstantinidis","sequence":"additional","affiliation":[]},{"given":"B.","family":"Konya","sequence":"additional","affiliation":[]},{"given":"R.","family":"Kopeliansky","sequence":"additional","affiliation":[]},{"given":"S.","family":"Koperny","sequence":"additional","affiliation":[]},{"given":"K.","family":"Korcyl","sequence":"additional","affiliation":[]},{"given":"K.","family":"Kordas","sequence":"additional","affiliation":[]},{"given":"G.","family":"Koren","sequence":"additional","affiliation":[]},{"given":"A.","family":"Korn","sequence":"additional","affiliation":[]},{"given":"I.","family":"Korolkov","sequence":"additional","affiliation":[]},{"given":"E. V.","family":"Korolkova","sequence":"additional","affiliation":[]},{"given":"N.","family":"Korotkova","sequence":"additional","affiliation":[]},{"given":"O.","family":"Kortner","sequence":"additional","affiliation":[]},{"given":"S.","family":"Kortner","sequence":"additional","affiliation":[]},{"given":"T.","family":"Kosek","sequence":"additional","affiliation":[]},{"given":"V. V.","family":"Kostyukhin","sequence":"additional","affiliation":[]},{"given":"A.","family":"Kotsokechagia","sequence":"additional","affiliation":[]},{"given":"A.","family":"Kotwal","sequence":"additional","affiliation":[]},{"given":"A.","family":"Koulouris","sequence":"additional","affiliation":[]},{"given":"A.","family":"Kourkoumeli-Charalampidi","sequence":"additional","affiliation":[]},{"given":"C.","family":"Kourkoumelis","sequence":"additional","affiliation":[]},{"given":"E.","family":"Kourlitis","sequence":"additional","affiliation":[]},{"given":"V.","family":"Kouskoura","sequence":"additional","affiliation":[]},{"given":"A. B.","family":"Kowalewska","sequence":"additional","affiliation":[]},{"given":"R.","family":"Kowalewski","sequence":"additional","affiliation":[]},{"given":"W.","family":"Kozanecki","sequence":"additional","affiliation":[]},{"given":"A. S.","family":"Kozhin","sequence":"additional","affiliation":[]},{"given":"V. A.","family":"Kramarenko","sequence":"additional","affiliation":[]},{"given":"G.","family":"Kramberger","sequence":"additional","affiliation":[]},{"given":"D.","family":"Krasnopevtsev","sequence":"additional","affiliation":[]},{"given":"M. W.","family":"Krasny","sequence":"additional","affiliation":[]},{"given":"A.","family":"Krasznahorkay","sequence":"additional","affiliation":[]},{"given":"D.","family":"Krauss","sequence":"additional","affiliation":[]},{"given":"J. A.","family":"Kremer","sequence":"additional","affiliation":[]},{"given":"J.","family":"Kretzschmar","sequence":"additional","affiliation":[]},{"given":"P.","family":"Krieger","sequence":"additional","affiliation":[]},{"given":"F.","family":"Krieter","sequence":"additional","affiliation":[]},{"given":"A.","family":"Krishnan","sequence":"additional","affiliation":[]},{"given":"K.","family":"Krizka","sequence":"additional","affiliation":[]},{"given":"K.","family":"Kroeninger","sequence":"additional","affiliation":[]},{"given":"H.","family":"Kroha","sequence":"additional","affiliation":[]},{"given":"J.","family":"Kroll","sequence":"additional","affiliation":[]},{"given":"J.","family":"Kroll","sequence":"additional","affiliation":[]},{"given":"K. S.","family":"Krowpman","sequence":"additional","affiliation":[]},{"given":"U.","family":"Kruchonak","sequence":"additional","affiliation":[]},{"given":"H.","family":"Kr\u00fcger","sequence":"additional","affiliation":[]},{"given":"N.","family":"Krumnack","sequence":"additional","affiliation":[]},{"given":"M. C.","family":"Kruse","sequence":"additional","affiliation":[]},{"given":"J. A.","family":"Krzysiak","sequence":"additional","affiliation":[]},{"given":"T.","family":"Kubota","sequence":"additional","affiliation":[]},{"given":"O.","family":"Kuchinskaia","sequence":"additional","affiliation":[]},{"given":"S.","family":"Kuday","sequence":"additional","affiliation":[]},{"given":"D.","family":"Kuechler","sequence":"additional","affiliation":[]},{"given":"J. T.","family":"Kuechler","sequence":"additional","affiliation":[]},{"given":"S.","family":"Kuehn","sequence":"additional","affiliation":[]},{"given":"A.","family":"Kugel","sequence":"additional","affiliation":[]},{"given":"T.","family":"Kuhl","sequence":"additional","affiliation":[]},{"given":"V.","family":"Kukhtin","sequence":"additional","affiliation":[]},{"given":"R.","family":"Kukla","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Kulchitsky","sequence":"additional","affiliation":[]},{"given":"S.","family":"Kuleshov","sequence":"additional","affiliation":[]},{"given":"Y. P.","family":"Kulinich","sequence":"additional","affiliation":[]},{"given":"M.","family":"Kuna","sequence":"additional","affiliation":[]},{"given":"T.","family":"Kunigo","sequence":"additional","affiliation":[]},{"given":"A.","family":"Kupco","sequence":"additional","affiliation":[]},{"given":"T.","family":"Kupfer","sequence":"additional","affiliation":[]},{"given":"O.","family":"Kuprash","sequence":"additional","affiliation":[]},{"given":"H.","family":"Kurashige","sequence":"additional","affiliation":[]},{"given":"L. L.","family":"Kurchaninov","sequence":"additional","affiliation":[]},{"given":"Y. A.","family":"Kurochkin","sequence":"additional","affiliation":[]},{"given":"A.","family":"Kurova","sequence":"additional","affiliation":[]},{"given":"M. G.","family":"Kurth","sequence":"additional","affiliation":[]},{"given":"E. S.","family":"Kuwertz","sequence":"additional","affiliation":[]},{"given":"M.","family":"Kuze","sequence":"additional","affiliation":[]},{"given":"A. K.","family":"Kvam","sequence":"additional","affiliation":[]},{"given":"J.","family":"Kvita","sequence":"additional","affiliation":[]},{"given":"T.","family":"Kwan","sequence":"additional","affiliation":[]},{"given":"L.","family":"La Rotonda","sequence":"additional","affiliation":[]},{"given":"F.","family":"La Ruffa","sequence":"additional","affiliation":[]},{"given":"C.","family":"Lacasta","sequence":"additional","affiliation":[]},{"given":"F.","family":"Lacava","sequence":"additional","affiliation":[]},{"given":"D. P. J.","family":"Lack","sequence":"additional","affiliation":[]},{"given":"H.","family":"Lacker","sequence":"additional","affiliation":[]},{"given":"D.","family":"Lacour","sequence":"additional","affiliation":[]},{"given":"E.","family":"Ladygin","sequence":"additional","affiliation":[]},{"given":"R.","family":"Lafaye","sequence":"additional","affiliation":[]},{"given":"B.","family":"Laforge","sequence":"additional","affiliation":[]},{"given":"T.","family":"Lagouri","sequence":"additional","affiliation":[]},{"given":"S.","family":"Lai","sequence":"additional","affiliation":[]},{"given":"I. K.","family":"Lakomiec","sequence":"additional","affiliation":[]},{"given":"S.","family":"Lammers","sequence":"additional","affiliation":[]},{"given":"W.","family":"Lampl","sequence":"additional","affiliation":[]},{"given":"C.","family":"Lampoudis","sequence":"additional","affiliation":[]},{"given":"E.","family":"Lan\u00e7on","sequence":"additional","affiliation":[]},{"given":"U.","family":"Landgraf","sequence":"additional","affiliation":[]},{"given":"M. P. J.","family":"Landon","sequence":"additional","affiliation":[]},{"given":"M. C.","family":"Lanfermann","sequence":"additional","affiliation":[]},{"given":"V. S.","family":"Lang","sequence":"additional","affiliation":[]},{"given":"J. C.","family":"Lange","sequence":"additional","affiliation":[]},{"given":"R. J.","family":"Langenberg","sequence":"additional","affiliation":[]},{"given":"A. J.","family":"Lankford","sequence":"additional","affiliation":[]},{"given":"F.","family":"Lanni","sequence":"additional","affiliation":[]},{"given":"K.","family":"Lantzsch","sequence":"additional","affiliation":[]},{"given":"A.","family":"Lanza","sequence":"additional","affiliation":[]},{"given":"A.","family":"Lapertosa","sequence":"additional","affiliation":[]},{"given":"S.","family":"Laplace","sequence":"additional","affiliation":[]},{"given":"J. F.","family":"Laporte","sequence":"additional","affiliation":[]},{"given":"T.","family":"Lari","sequence":"additional","affiliation":[]},{"given":"F.","family":"Lasagni Manghi","sequence":"additional","affiliation":[]},{"given":"M.","family":"Lassnig","sequence":"additional","affiliation":[]},{"given":"T. S.","family":"Lau","sequence":"additional","affiliation":[]},{"given":"A.","family":"Laudrain","sequence":"additional","affiliation":[]},{"given":"A.","family":"Laurier","sequence":"additional","affiliation":[]},{"given":"M.","family":"Lavorgna","sequence":"additional","affiliation":[]},{"given":"S. D.","family":"Lawlor","sequence":"additional","affiliation":[]},{"given":"M.","family":"Lazzaroni","sequence":"additional","affiliation":[]},{"given":"B.","family":"Le","sequence":"additional","affiliation":[]},{"given":"E.","family":"Le Guirriec","sequence":"additional","affiliation":[]},{"given":"A.","family":"Lebedev","sequence":"additional","affiliation":[]},{"given":"M.","family":"LeBlanc","sequence":"additional","affiliation":[]},{"given":"T.","family":"LeCompte","sequence":"additional","affiliation":[]},{"given":"F.","family":"Ledroit-Guillon","sequence":"additional","affiliation":[]},{"given":"A. C. A.","family":"Lee","sequence":"additional","affiliation":[]},{"given":"C. A.","family":"Lee","sequence":"additional","affiliation":[]},{"given":"G. R.","family":"Lee","sequence":"additional","affiliation":[]},{"given":"L.","family":"Lee","sequence":"additional","affiliation":[]},{"given":"S. C.","family":"Lee","sequence":"additional","affiliation":[]},{"given":"S.","family":"Lee","sequence":"additional","affiliation":[]},{"given":"B.","family":"Lefebvre","sequence":"additional","affiliation":[]},{"given":"H. P.","family":"Lefebvre","sequence":"additional","affiliation":[]},{"given":"M.","family":"Lefebvre","sequence":"additional","affiliation":[]},{"given":"C.","family":"Leggett","sequence":"additional","affiliation":[]},{"given":"K.","family":"Lehmann","sequence":"additional","affiliation":[]},{"given":"N.","family":"Lehmann","sequence":"additional","affiliation":[]},{"given":"G.","family":"Lehmann Miotto","sequence":"additional","affiliation":[]},{"given":"W. A.","family":"Leight","sequence":"additional","affiliation":[]},{"given":"A.","family":"Leisos","sequence":"additional","affiliation":[]},{"given":"M. A. L.","family":"Leite","sequence":"additional","affiliation":[]},{"given":"C. E.","family":"Leitgeb","sequence":"additional","affiliation":[]},{"given":"R.","family":"Leitner","sequence":"additional","affiliation":[]},{"given":"D.","family":"Lellouch","sequence":"additional","affiliation":[]},{"given":"K. J. C.","family":"Leney","sequence":"additional","affiliation":[]},{"given":"T.","family":"Lenz","sequence":"additional","affiliation":[]},{"given":"R.","family":"Leone","sequence":"additional","affiliation":[]},{"given":"S.","family":"Leone","sequence":"additional","affiliation":[]},{"given":"C.","family":"Leonidopoulos","sequence":"additional","affiliation":[]},{"given":"A.","family":"Leopold","sequence":"additional","affiliation":[]},{"given":"C.","family":"Leroy","sequence":"additional","affiliation":[]},{"given":"R.","family":"Les","sequence":"additional","affiliation":[]},{"given":"C. G.","family":"Lester","sequence":"additional","affiliation":[]},{"given":"M.","family":"Levchenko","sequence":"additional","affiliation":[]},{"given":"J.","family":"Lev\u00eaque","sequence":"additional","affiliation":[]},{"given":"D.","family":"Levin","sequence":"additional","affiliation":[]},{"given":"L. J.","family":"Levinson","sequence":"additional","affiliation":[]},{"given":"D. J.","family":"Lewis","sequence":"additional","affiliation":[]},{"given":"B.","family":"Li","sequence":"additional","affiliation":[]},{"given":"B.","family":"Li","sequence":"additional","affiliation":[]},{"given":"C-Q.","family":"Li","sequence":"additional","affiliation":[]},{"given":"F.","family":"Li","sequence":"additional","affiliation":[]},{"given":"H.","family":"Li","sequence":"additional","affiliation":[]},{"given":"H.","family":"Li","sequence":"additional","affiliation":[]},{"given":"J.","family":"Li","sequence":"additional","affiliation":[]},{"given":"K.","family":"Li","sequence":"additional","affiliation":[]},{"given":"L.","family":"Li","sequence":"additional","affiliation":[]},{"given":"M.","family":"Li","sequence":"additional","affiliation":[]},{"given":"Q.","family":"Li","sequence":"additional","affiliation":[]},{"given":"Q. Y.","family":"Li","sequence":"additional","affiliation":[]},{"given":"S.","family":"Li","sequence":"additional","affiliation":[]},{"given":"X.","family":"Li","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Li","sequence":"additional","affiliation":[]},{"given":"Z.","family":"Li","sequence":"additional","affiliation":[]},{"given":"Z.","family":"Li","sequence":"additional","affiliation":[]},{"given":"Z.","family":"Liang","sequence":"additional","affiliation":[]},{"given":"B.","family":"Liberti","sequence":"additional","affiliation":[]},{"given":"A.","family":"Liblong","sequence":"additional","affiliation":[]},{"given":"K.","family":"Lie","sequence":"additional","affiliation":[]},{"given":"S.","family":"Lim","sequence":"additional","affiliation":[]},{"given":"C. Y.","family":"Lin","sequence":"additional","affiliation":[]},{"given":"K.","family":"Lin","sequence":"additional","affiliation":[]},{"given":"T. H.","family":"Lin","sequence":"additional","affiliation":[]},{"given":"R. A.","family":"Linck","sequence":"additional","affiliation":[]},{"given":"J. H.","family":"Lindon","sequence":"additional","affiliation":[]},{"given":"A. L.","family":"Lionti","sequence":"additional","affiliation":[]},{"given":"E.","family":"Lipeles","sequence":"additional","affiliation":[]},{"given":"A.","family":"Lipniacka","sequence":"additional","affiliation":[]},{"given":"T. M.","family":"Liss","sequence":"additional","affiliation":[]},{"given":"A.","family":"Lister","sequence":"additional","affiliation":[]},{"given":"J. D.","family":"Little","sequence":"additional","affiliation":[]},{"given":"B.","family":"Liu","sequence":"additional","affiliation":[]},{"given":"B. X.","family":"Liu","sequence":"additional","affiliation":[]},{"given":"H. B.","family":"Liu","sequence":"additional","affiliation":[]},{"given":"H.","family":"Liu","sequence":"additional","affiliation":[]},{"given":"J. B.","family":"Liu","sequence":"additional","affiliation":[]},{"given":"J. K. K.","family":"Liu","sequence":"additional","affiliation":[]},{"given":"K.","family":"Liu","sequence":"additional","affiliation":[]},{"given":"M.","family":"Liu","sequence":"additional","affiliation":[]},{"given":"M. Y.","family":"Liu","sequence":"additional","affiliation":[]},{"given":"P.","family":"Liu","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Liu","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Liu","sequence":"additional","affiliation":[]},{"given":"Y. L.","family":"Liu","sequence":"additional","affiliation":[]},{"given":"Y. W.","family":"Liu","sequence":"additional","affiliation":[]},{"given":"M.","family":"Livan","sequence":"additional","affiliation":[]},{"given":"A.","family":"Lleres","sequence":"additional","affiliation":[]},{"given":"J.","family":"Llorente Merino","sequence":"additional","affiliation":[]},{"given":"S. L.","family":"Lloyd","sequence":"additional","affiliation":[]},{"given":"C. Y.","family":"Lo","sequence":"additional","affiliation":[]},{"given":"E. M.","family":"Lobodzinska","sequence":"additional","affiliation":[]},{"given":"P.","family":"Loch","sequence":"additional","affiliation":[]},{"given":"S.","family":"Loffredo","sequence":"additional","affiliation":[]},{"given":"T.","family":"Lohse","sequence":"additional","affiliation":[]},{"given":"K.","family":"Lohwasser","sequence":"additional","affiliation":[]},{"given":"M.","family":"Lokajicek","sequence":"additional","affiliation":[]},{"given":"J. D.","family":"Long","sequence":"additional","affiliation":[]},{"given":"R. E.","family":"Long","sequence":"additional","affiliation":[]},{"given":"L.","family":"Longo","sequence":"additional","affiliation":[]},{"given":"K. A.","family":"Looper","sequence":"additional","affiliation":[]},{"given":"J. A.","family":"Lopez","sequence":"additional","affiliation":[]},{"given":"I. Lopez","family":"Paz","sequence":"additional","affiliation":[]},{"given":"A.","family":"Lopez Solis","sequence":"additional","affiliation":[]},{"given":"J.","family":"Lorenz","sequence":"additional","affiliation":[]},{"given":"N.","family":"Lorenzo Martinez","sequence":"additional","affiliation":[]},{"given":"A. M.","family":"Lory","sequence":"additional","affiliation":[]},{"given":"M.","family":"Losada","sequence":"additional","affiliation":[]},{"given":"P. J.","family":"L\u00f6sel","sequence":"additional","affiliation":[]},{"given":"A.","family":"L\u00f6sle","sequence":"additional","affiliation":[]},{"given":"X.","family":"Lou","sequence":"additional","affiliation":[]},{"given":"X.","family":"Lou","sequence":"additional","affiliation":[]},{"given":"A.","family":"Lounis","sequence":"additional","affiliation":[]},{"given":"J.","family":"Love","sequence":"additional","affiliation":[]},{"given":"P. A.","family":"Love","sequence":"additional","affiliation":[]},{"given":"J. J.","family":"Lozano Bahilo","sequence":"additional","affiliation":[]},{"given":"M.","family":"Lu","sequence":"additional","affiliation":[]},{"given":"Y. J.","family":"Lu","sequence":"additional","affiliation":[]},{"given":"H. J.","family":"Lubatti","sequence":"additional","affiliation":[]},{"given":"C.","family":"Luci","sequence":"additional","affiliation":[]},{"given":"A.","family":"Lucotte","sequence":"additional","affiliation":[]},{"given":"C.","family":"Luedtke","sequence":"additional","affiliation":[]},{"given":"F.","family":"Luehring","sequence":"additional","affiliation":[]},{"given":"I.","family":"Luise","sequence":"additional","affiliation":[]},{"given":"L.","family":"Luminari","sequence":"additional","affiliation":[]},{"given":"B.","family":"Lund-Jensen","sequence":"additional","affiliation":[]},{"given":"M. S.","family":"Lutz","sequence":"additional","affiliation":[]},{"given":"D.","family":"Lynn","sequence":"additional","affiliation":[]},{"given":"H.","family":"Lyons","sequence":"additional","affiliation":[]},{"given":"R.","family":"Lysak","sequence":"additional","affiliation":[]},{"given":"E.","family":"Lytken","sequence":"additional","affiliation":[]},{"given":"F.","family":"Lyu","sequence":"additional","affiliation":[]},{"given":"V.","family":"Lyubushkin","sequence":"additional","affiliation":[]},{"given":"T.","family":"Lyubushkina","sequence":"additional","affiliation":[]},{"given":"H.","family":"Ma","sequence":"additional","affiliation":[]},{"given":"L. L.","family":"Ma","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Ma","sequence":"additional","affiliation":[]},{"given":"G.","family":"Maccarrone","sequence":"additional","affiliation":[]},{"given":"A.","family":"Macchiolo","sequence":"additional","affiliation":[]},{"given":"C. M.","family":"Macdonald","sequence":"additional","affiliation":[]},{"given":"J.","family":"Machado Miguens","sequence":"additional","affiliation":[]},{"given":"D.","family":"Madaffari","sequence":"additional","affiliation":[]},{"given":"R.","family":"Madar","sequence":"additional","affiliation":[]},{"given":"W. F.","family":"Mader","sequence":"additional","affiliation":[]},{"given":"M.","family":"Madugoda Ralalage Don","sequence":"additional","affiliation":[]},{"given":"N.","family":"Madysa","sequence":"additional","affiliation":[]},{"given":"J.","family":"Maeda","sequence":"additional","affiliation":[]},{"given":"T.","family":"Maeno","sequence":"additional","affiliation":[]},{"given":"M.","family":"Maerker","sequence":"additional","affiliation":[]},{"given":"V.","family":"Magerl","sequence":"additional","affiliation":[]},{"given":"N.","family":"Magini","sequence":"additional","affiliation":[]},{"given":"J.","family":"Magro","sequence":"additional","affiliation":[]},{"given":"D. J.","family":"Mahon","sequence":"additional","affiliation":[]},{"given":"C.","family":"Maidantchik","sequence":"additional","affiliation":[]},{"given":"T.","family":"Maier","sequence":"additional","affiliation":[]},{"given":"A.","family":"Maio","sequence":"additional","affiliation":[]},{"given":"K.","family":"Maj","sequence":"additional","affiliation":[]},{"given":"O.","family":"Majersky","sequence":"additional","affiliation":[]},{"given":"S.","family":"Majewski","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Makida","sequence":"additional","affiliation":[]},{"given":"N.","family":"Makovec","sequence":"additional","affiliation":[]},{"given":"B.","family":"Malaescu","sequence":"additional","affiliation":[]},{"given":"Pa.","family":"Malecki","sequence":"additional","affiliation":[]},{"given":"V. P.","family":"Maleev","sequence":"additional","affiliation":[]},{"given":"F.","family":"Malek","sequence":"additional","affiliation":[]},{"given":"U.","family":"Mallik","sequence":"additional","affiliation":[]},{"given":"D.","family":"Malon","sequence":"additional","affiliation":[]},{"given":"C.","family":"Malone","sequence":"additional","affiliation":[]},{"given":"S.","family":"Maltezos","sequence":"additional","affiliation":[]},{"given":"S.","family":"Malyukov","sequence":"additional","affiliation":[]},{"given":"J.","family":"Mamuzic","sequence":"additional","affiliation":[]},{"given":"G.","family":"Mancini","sequence":"additional","affiliation":[]},{"given":"I.","family":"Mandi\u0107","sequence":"additional","affiliation":[]},{"given":"L.","family":"Manhaes de Andrade Filho","sequence":"additional","affiliation":[]},{"given":"I. M.","family":"Maniatis","sequence":"additional","affiliation":[]},{"given":"J.","family":"Manjarres Ramos","sequence":"additional","affiliation":[]},{"given":"K. H.","family":"Mankinen","sequence":"additional","affiliation":[]},{"given":"A.","family":"Mann","sequence":"additional","affiliation":[]},{"given":"A.","family":"Manousos","sequence":"additional","affiliation":[]},{"given":"B.","family":"Mansoulie","sequence":"additional","affiliation":[]},{"given":"I.","family":"Manthos","sequence":"additional","affiliation":[]},{"given":"S.","family":"Manzoni","sequence":"additional","affiliation":[]},{"given":"A.","family":"Marantis","sequence":"additional","affiliation":[]},{"given":"G.","family":"Marceca","sequence":"additional","affiliation":[]},{"given":"L.","family":"Marchese","sequence":"additional","affiliation":[]},{"given":"G.","family":"Marchiori","sequence":"additional","affiliation":[]},{"given":"M.","family":"Marcisovsky","sequence":"additional","affiliation":[]},{"given":"L.","family":"Marcoccia","sequence":"additional","affiliation":[]},{"given":"C.","family":"Marcon","sequence":"additional","affiliation":[]},{"given":"C. A.","family":"Marin Tobon","sequence":"additional","affiliation":[]},{"given":"M.","family":"Marjanovic","sequence":"additional","affiliation":[]},{"given":"Z.","family":"Marshall","sequence":"additional","affiliation":[]},{"given":"M. U. F.","family":"Martensson","sequence":"additional","affiliation":[]},{"given":"S.","family":"Marti-Garcia","sequence":"additional","affiliation":[]},{"given":"C. B.","family":"Martin","sequence":"additional","affiliation":[]},{"given":"T. A.","family":"Martin","sequence":"additional","affiliation":[]},{"given":"V. J.","family":"Martin","sequence":"additional","affiliation":[]},{"given":"B.","family":"Martin dit Latour","sequence":"additional","affiliation":[]},{"given":"L.","family":"Martinelli","sequence":"additional","affiliation":[]},{"given":"M.","family":"Martinez","sequence":"additional","affiliation":[]},{"given":"V. I.","family":"Martinez Outschoorn","sequence":"additional","affiliation":[]},{"given":"S.","family":"Martin-Haugh","sequence":"additional","affiliation":[]},{"given":"V. S.","family":"Martoiu","sequence":"additional","affiliation":[]},{"given":"A. C.","family":"Martyniuk","sequence":"additional","affiliation":[]},{"given":"A.","family":"Marzin","sequence":"additional","affiliation":[]},{"given":"S. R.","family":"Maschek","sequence":"additional","affiliation":[]},{"given":"L.","family":"Masetti","sequence":"additional","affiliation":[]},{"given":"T.","family":"Mashimo","sequence":"additional","affiliation":[]},{"given":"R.","family":"Mashinistov","sequence":"additional","affiliation":[]},{"given":"J.","family":"Masik","sequence":"additional","affiliation":[]},{"given":"A. L.","family":"Maslennikov","sequence":"additional","affiliation":[]},{"given":"L.","family":"Massa","sequence":"additional","affiliation":[]},{"given":"P.","family":"Massarotti","sequence":"additional","affiliation":[]},{"given":"P.","family":"Mastrandrea","sequence":"additional","affiliation":[]},{"given":"A.","family":"Mastroberardino","sequence":"additional","affiliation":[]},{"given":"T.","family":"Masubuchi","sequence":"additional","affiliation":[]},{"given":"D.","family":"Matakias","sequence":"additional","affiliation":[]},{"given":"A.","family":"Matic","sequence":"additional","affiliation":[]},{"given":"N.","family":"Matsuzawa","sequence":"additional","affiliation":[]},{"given":"P.","family":"M\u00e4ttig","sequence":"additional","affiliation":[]},{"given":"J.","family":"Maurer","sequence":"additional","affiliation":[]},{"given":"B.","family":"Ma\u010dek","sequence":"additional","affiliation":[]},{"given":"D. A.","family":"Maximov","sequence":"additional","affiliation":[]},{"given":"R.","family":"Mazini","sequence":"additional","affiliation":[]},{"given":"I.","family":"Maznas","sequence":"additional","affiliation":[]},{"given":"S. M.","family":"Mazza","sequence":"additional","affiliation":[]},{"given":"S. P.","family":"Mc Kee","sequence":"additional","affiliation":[]},{"given":"T. G.","family":"McCarthy","sequence":"additional","affiliation":[]},{"given":"W. P.","family":"McCormack","sequence":"additional","affiliation":[]},{"given":"E. F.","family":"McDonald","sequence":"additional","affiliation":[]},{"given":"J. A.","family":"Mcfayden","sequence":"additional","affiliation":[]},{"given":"G.","family":"Mchedlidze","sequence":"additional","affiliation":[]},{"given":"M. A.","family":"McKay","sequence":"additional","affiliation":[]},{"given":"K. D.","family":"McLean","sequence":"additional","affiliation":[]},{"given":"S. J.","family":"McMahon","sequence":"additional","affiliation":[]},{"given":"P. C.","family":"McNamara","sequence":"additional","affiliation":[]},{"given":"C. J.","family":"McNicol","sequence":"additional","affiliation":[]},{"given":"R. A.","family":"McPherson","sequence":"additional","affiliation":[]},{"given":"J. E.","family":"Mdhluli","sequence":"additional","affiliation":[]},{"given":"Z. A.","family":"Meadows","sequence":"additional","affiliation":[]},{"given":"S.","family":"Meehan","sequence":"additional","affiliation":[]},{"given":"T.","family":"Megy","sequence":"additional","affiliation":[]},{"given":"S.","family":"Mehlhase","sequence":"additional","affiliation":[]},{"given":"A.","family":"Mehta","sequence":"additional","affiliation":[]},{"given":"T.","family":"Meideck","sequence":"additional","affiliation":[]},{"given":"B.","family":"Meirose","sequence":"additional","affiliation":[]},{"given":"D.","family":"Melini","sequence":"additional","affiliation":[]},{"given":"B. R.","family":"Mellado Garcia","sequence":"additional","affiliation":[]},{"given":"J. D.","family":"Mellenthin","sequence":"additional","affiliation":[]},{"given":"M.","family":"Melo","sequence":"additional","affiliation":[]},{"given":"F.","family":"Meloni","sequence":"additional","affiliation":[]},{"given":"A.","family":"Melzer","sequence":"additional","affiliation":[]},{"given":"S. B.","family":"Menary","sequence":"additional","affiliation":[]},{"given":"E. D.","family":"Mendes Gouveia","sequence":"additional","affiliation":[]},{"given":"L.","family":"Meng","sequence":"additional","affiliation":[]},{"given":"X. T.","family":"Meng","sequence":"additional","affiliation":[]},{"given":"S.","family":"Menke","sequence":"additional","affiliation":[]},{"given":"E.","family":"Meoni","sequence":"additional","affiliation":[]},{"given":"S.","family":"Mergelmeyer","sequence":"additional","affiliation":[]},{"given":"S. A. M.","family":"Merkt","sequence":"additional","affiliation":[]},{"given":"C.","family":"Merlassino","sequence":"additional","affiliation":[]},{"given":"P.","family":"Mermod","sequence":"additional","affiliation":[]},{"given":"L.","family":"Merola","sequence":"additional","affiliation":[]},{"given":"C.","family":"Meroni","sequence":"additional","affiliation":[]},{"given":"G.","family":"Merz","sequence":"additional","affiliation":[]},{"given":"O.","family":"Meshkov","sequence":"additional","affiliation":[]},{"given":"J. K. R.","family":"Meshreki","sequence":"additional","affiliation":[]},{"given":"A.","family":"Messina","sequence":"additional","affiliation":[]},{"given":"J.","family":"Metcalfe","sequence":"additional","affiliation":[]},{"given":"A. S.","family":"Mete","sequence":"additional","affiliation":[]},{"given":"C.","family":"Meyer","sequence":"additional","affiliation":[]},{"given":"J-P.","family":"Meyer","sequence":"additional","affiliation":[]},{"given":"H.","family":"Meyer Zu Theenhausen","sequence":"additional","affiliation":[]},{"given":"F.","family":"Miano","sequence":"additional","affiliation":[]},{"given":"M.","family":"Michetti","sequence":"additional","affiliation":[]},{"given":"R. P.","family":"Middleton","sequence":"additional","affiliation":[]},{"given":"L.","family":"Mijovi\u0107","sequence":"additional","affiliation":[]},{"given":"G.","family":"Mikenberg","sequence":"additional","affiliation":[]},{"given":"M.","family":"Mikestikova","sequence":"additional","affiliation":[]},{"given":"M.","family":"Miku\u017e","sequence":"additional","affiliation":[]},{"given":"H.","family":"Mildner","sequence":"additional","affiliation":[]},{"given":"M.","family":"Milesi","sequence":"additional","affiliation":[]},{"given":"A.","family":"Milic","sequence":"additional","affiliation":[]},{"given":"C. D.","family":"Milke","sequence":"additional","affiliation":[]},{"given":"D. A.","family":"Millar","sequence":"additional","affiliation":[]},{"given":"D. W.","family":"Miller","sequence":"additional","affiliation":[]},{"given":"A.","family":"Milov","sequence":"additional","affiliation":[]},{"given":"D. A.","family":"Milstead","sequence":"additional","affiliation":[]},{"given":"R. A.","family":"Mina","sequence":"additional","affiliation":[]},{"given":"A. A.","family":"Minaenko","sequence":"additional","affiliation":[]},{"given":"M.","family":"Mi\u00f1ano Moya","sequence":"additional","affiliation":[]},{"given":"I. A.","family":"Minashvili","sequence":"additional","affiliation":[]},{"given":"A. I.","family":"Mincer","sequence":"additional","affiliation":[]},{"given":"B.","family":"Mindur","sequence":"additional","affiliation":[]},{"given":"M.","family":"Mineev","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Minegishi","sequence":"additional","affiliation":[]},{"given":"L. M.","family":"Mir","sequence":"additional","affiliation":[]},{"given":"A.","family":"Mirto","sequence":"additional","affiliation":[]},{"given":"K. P.","family":"Mistry","sequence":"additional","affiliation":[]},{"given":"T.","family":"Mitani","sequence":"additional","affiliation":[]},{"given":"J.","family":"Mitrevski","sequence":"additional","affiliation":[]},{"given":"V. A.","family":"Mitsou","sequence":"additional","affiliation":[]},{"given":"M.","family":"Mittal","sequence":"additional","affiliation":[]},{"given":"O.","family":"Miu","sequence":"additional","affiliation":[]},{"given":"A.","family":"Miucci","sequence":"additional","affiliation":[]},{"given":"P. S.","family":"Miyagawa","sequence":"additional","affiliation":[]},{"given":"A.","family":"Mizukami","sequence":"additional","affiliation":[]},{"given":"J. U.","family":"Mj\u00f6rnmark","sequence":"additional","affiliation":[]},{"given":"T.","family":"Mkrtchyan","sequence":"additional","affiliation":[]},{"given":"M.","family":"Mlynarikova","sequence":"additional","affiliation":[]},{"given":"T.","family":"Moa","sequence":"additional","affiliation":[]},{"given":"K.","family":"Mochizuki","sequence":"additional","affiliation":[]},{"given":"P.","family":"Mogg","sequence":"additional","affiliation":[]},{"given":"S.","family":"Mohapatra","sequence":"additional","affiliation":[]},{"given":"R.","family":"Moles-Valls","sequence":"additional","affiliation":[]},{"given":"M. C.","family":"Mondragon","sequence":"additional","affiliation":[]},{"given":"K.","family":"M\u00f6nig","sequence":"additional","affiliation":[]},{"given":"J.","family":"Monk","sequence":"additional","affiliation":[]},{"given":"E.","family":"Monnier","sequence":"additional","affiliation":[]},{"given":"A.","family":"Montalbano","sequence":"additional","affiliation":[]},{"given":"J.","family":"Montejo Berlingen","sequence":"additional","affiliation":[]},{"given":"M.","family":"Montella","sequence":"additional","affiliation":[]},{"given":"F.","family":"Monticelli","sequence":"additional","affiliation":[]},{"given":"N.","family":"Morange","sequence":"additional","affiliation":[]},{"given":"D.","family":"Moreno","sequence":"additional","affiliation":[]},{"given":"M.","family":"Moreno Ll\u00e1cer","sequence":"additional","affiliation":[]},{"given":"C.","family":"Moreno Martinez","sequence":"additional","affiliation":[]},{"given":"P.","family":"Morettini","sequence":"additional","affiliation":[]},{"given":"M.","family":"Morgenstern","sequence":"additional","affiliation":[]},{"given":"S.","family":"Morgenstern","sequence":"additional","affiliation":[]},{"given":"D.","family":"Mori","sequence":"additional","affiliation":[]},{"given":"M.","family":"Morii","sequence":"additional","affiliation":[]},{"given":"M.","family":"Morinaga","sequence":"additional","affiliation":[]},{"given":"V.","family":"Morisbak","sequence":"additional","affiliation":[]},{"given":"A. K.","family":"Morley","sequence":"additional","affiliation":[]},{"given":"G.","family":"Mornacchi","sequence":"additional","affiliation":[]},{"given":"A. P.","family":"Morris","sequence":"additional","affiliation":[]},{"given":"L.","family":"Morvaj","sequence":"additional","affiliation":[]},{"given":"P.","family":"Moschovakos","sequence":"additional","affiliation":[]},{"given":"B.","family":"Moser","sequence":"additional","affiliation":[]},{"given":"M.","family":"Mosidze","sequence":"additional","affiliation":[]},{"given":"T.","family":"Moskalets","sequence":"additional","affiliation":[]},{"given":"H. J.","family":"Moss","sequence":"additional","affiliation":[]},{"given":"J.","family":"Moss","sequence":"additional","affiliation":[]},{"given":"E. J. W.","family":"Moyse","sequence":"additional","affiliation":[]},{"given":"S.","family":"Muanza","sequence":"additional","affiliation":[]},{"given":"J.","family":"Mueller","sequence":"additional","affiliation":[]},{"given":"R. S. P.","family":"Mueller","sequence":"additional","affiliation":[]},{"given":"D.","family":"Muenstermann","sequence":"additional","affiliation":[]},{"given":"G. A.","family":"Mullier","sequence":"additional","affiliation":[]},{"given":"D. P.","family":"Mungo","sequence":"additional","affiliation":[]},{"given":"J. L.","family":"Munoz Martinez","sequence":"additional","affiliation":[]},{"given":"F. J.","family":"Munoz Sanchez","sequence":"additional","affiliation":[]},{"given":"P.","family":"Murin","sequence":"additional","affiliation":[]},{"given":"W. J.","family":"Murray","sequence":"additional","affiliation":[]},{"given":"A.","family":"Murrone","sequence":"additional","affiliation":[]},{"given":"M.","family":"Mu\u0161kinja","sequence":"additional","affiliation":[]},{"given":"kinja C.","family":"Mwewa","sequence":"additional","affiliation":[]},{"given":"A. G.","family":"Myagkov","sequence":"additional","affiliation":[]},{"given":"A. A.","family":"Myers","sequence":"additional","affiliation":[]},{"given":"J.","family":"Myers","sequence":"additional","affiliation":[]},{"given":"M.","family":"Myska","sequence":"additional","affiliation":[]},{"given":"B. P.","family":"Nachman","sequence":"additional","affiliation":[]},{"given":"O.","family":"Nackenhorst","sequence":"additional","affiliation":[]},{"given":"A. Nag","family":"Nag","sequence":"additional","affiliation":[]},{"given":"K.","family":"Nagai","sequence":"additional","affiliation":[]},{"given":"K.","family":"Nagano","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Nagasaka","sequence":"additional","affiliation":[]},{"given":"J. L.","family":"Nagle","sequence":"additional","affiliation":[]},{"given":"E.","family":"Nagy","sequence":"additional","affiliation":[]},{"given":"A. M.","family":"Nairz","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Nakahama","sequence":"additional","affiliation":[]},{"given":"K.","family":"Nakamura","sequence":"additional","affiliation":[]},{"given":"T.","family":"Nakamura","sequence":"additional","affiliation":[]},{"given":"I.","family":"Nakano","sequence":"additional","affiliation":[]},{"given":"H.","family":"Nanjo","sequence":"additional","affiliation":[]},{"given":"F.","family":"Napolitano","sequence":"additional","affiliation":[]},{"given":"R. F.","family":"Naranjo Garcia","sequence":"additional","affiliation":[]},{"given":"R.","family":"Narayan","sequence":"additional","affiliation":[]},{"given":"I.","family":"Naryshkin","sequence":"additional","affiliation":[]},{"given":"T.","family":"Naumann","sequence":"additional","affiliation":[]},{"given":"G.","family":"Navarro","sequence":"additional","affiliation":[]},{"given":"P. Y.","family":"Nechaeva","sequence":"additional","affiliation":[]},{"given":"F.","family":"Nechansky","sequence":"additional","affiliation":[]},{"given":"T. J.","family":"Neep","sequence":"additional","affiliation":[]},{"given":"A.","family":"Negri","sequence":"additional","affiliation":[]},{"given":"M.","family":"Negrini","sequence":"additional","affiliation":[]},{"given":"C.","family":"Nellist","sequence":"additional","affiliation":[]},{"given":"M. E.","family":"Nelson","sequence":"additional","affiliation":[]},{"given":"S.","family":"Nemecek","sequence":"additional","affiliation":[]},{"given":"M.","family":"Nessi","sequence":"additional","affiliation":[]},{"given":"M. S.","family":"Neubauer","sequence":"additional","affiliation":[]},{"given":"F.","family":"Neuhaus","sequence":"additional","affiliation":[]},{"given":"M.","family":"Neumann","sequence":"additional","affiliation":[]},{"given":"R.","family":"Newhouse","sequence":"additional","affiliation":[]},{"given":"P. R.","family":"Newman","sequence":"additional","affiliation":[]},{"given":"C. W.","family":"Ng","sequence":"additional","affiliation":[]},{"given":"Y. S.","family":"Ng","sequence":"additional","affiliation":[]},{"given":"Y. W. Y.","family":"Ng","sequence":"additional","affiliation":[]},{"given":"B.","family":"Ngair","sequence":"additional","affiliation":[]},{"given":"H. D. N.","family":"Nguyen","sequence":"additional","affiliation":[]},{"given":"T.","family":"Nguyen Manh","sequence":"additional","affiliation":[]},{"given":"E.","family":"Nibigira","sequence":"additional","affiliation":[]},{"given":"R. B.","family":"Nickerson","sequence":"additional","affiliation":[]},{"given":"R.","family":"Nicolaidou","sequence":"additional","affiliation":[]},{"given":"D. S.","family":"Nielsen","sequence":"additional","affiliation":[]},{"given":"J.","family":"Nielsen","sequence":"additional","affiliation":[]},{"given":"N.","family":"Nikiforou","sequence":"additional","affiliation":[]},{"given":"V.","family":"Nikolaenko","sequence":"additional","affiliation":[]},{"given":"I.","family":"Nikolic-Audit","sequence":"additional","affiliation":[]},{"given":"K.","family":"Nikolopoulos","sequence":"additional","affiliation":[]},{"given":"P.","family":"Nilsson","sequence":"additional","affiliation":[]},{"given":"H. R.","family":"Nindhito","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Ninomiya","sequence":"additional","affiliation":[]},{"given":"A.","family":"Nisati","sequence":"additional","affiliation":[]},{"given":"N.","family":"Nishu","sequence":"additional","affiliation":[]},{"given":"R.","family":"Nisius","sequence":"additional","affiliation":[]},{"given":"I.","family":"Nitsche","sequence":"additional","affiliation":[]},{"given":"T.","family":"Nitta","sequence":"additional","affiliation":[]},{"given":"T.","family":"Nobe","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Noguchi","sequence":"additional","affiliation":[]},{"given":"I.","family":"Nomidis","sequence":"additional","affiliation":[]},{"given":"M. A.","family":"Nomura","sequence":"additional","affiliation":[]},{"given":"M.","family":"Nordberg","sequence":"additional","affiliation":[]},{"given":"T.","family":"Novak","sequence":"additional","affiliation":[]},{"given":"O.","family":"Novgorodova","sequence":"additional","affiliation":[]},{"given":"R.","family":"Novotny","sequence":"additional","affiliation":[]},{"given":"L.","family":"Nozka","sequence":"additional","affiliation":[]},{"given":"K.","family":"Ntekas","sequence":"additional","affiliation":[]},{"given":"E.","family":"Nurse","sequence":"additional","affiliation":[]},{"given":"F. G.","family":"Oakham","sequence":"additional","affiliation":[]},{"given":"H.","family":"Oberlack","sequence":"additional","affiliation":[]},{"given":"J.","family":"Ocariz","sequence":"additional","affiliation":[]},{"given":"A.","family":"Ochi","sequence":"additional","affiliation":[]},{"given":"I.","family":"Ochoa","sequence":"additional","affiliation":[]},{"given":"J. P.","family":"Ochoa-Ricoux","sequence":"additional","affiliation":[]},{"given":"K.","family":"O\u2019Connor","sequence":"additional","affiliation":[]},{"given":"S.","family":"Oda","sequence":"additional","affiliation":[]},{"given":"S.","family":"Odaka","sequence":"additional","affiliation":[]},{"given":"S.","family":"Oerdek","sequence":"additional","affiliation":[]},{"given":"A.","family":"Ogrodnik","sequence":"additional","affiliation":[]},{"given":"A.","family":"Oh","sequence":"additional","affiliation":[]},{"given":"S. H.","family":"Oh","sequence":"additional","affiliation":[]},{"given":"C. C.","family":"Ohm","sequence":"additional","affiliation":[]},{"given":"H.","family":"Oide","sequence":"additional","affiliation":[]},{"given":"M. L.","family":"Ojeda","sequence":"additional","affiliation":[]},{"given":"H.","family":"Okawa","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Okazaki","sequence":"additional","affiliation":[]},{"given":"M. W.","family":"O\u2019Keefe","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Okumura","sequence":"additional","affiliation":[]},{"given":"T.","family":"Okuyama","sequence":"additional","affiliation":[]},{"given":"A.","family":"Olariu","sequence":"additional","affiliation":[]},{"given":"L. F.","family":"Oleiro Seabra","sequence":"additional","affiliation":[]},{"given":"S. A.","family":"Olivares Pino","sequence":"additional","affiliation":[]},{"given":"D.","family":"Oliveira Damazio","sequence":"additional","affiliation":[]},{"given":"J. L.","family":"Oliver","sequence":"additional","affiliation":[]},{"given":"M. J. R.","family":"Olsson","sequence":"additional","affiliation":[]},{"given":"A.","family":"Olszewski","sequence":"additional","affiliation":[]},{"given":"J.","family":"Olszowska","sequence":"additional","affiliation":[]},{"given":"D. C.","family":"O\u2019Neil","sequence":"additional","affiliation":[]},{"given":"A. P.","family":"O\u2019neill","sequence":"additional","affiliation":[]},{"given":"A.","family":"Onofre","sequence":"additional","affiliation":[]},{"given":"P. U. E.","family":"Onyisi","sequence":"additional","affiliation":[]},{"given":"H.","family":"Oppen","sequence":"additional","affiliation":[]},{"given":"M. J.","family":"Oreglia","sequence":"additional","affiliation":[]},{"given":"G. E.","family":"Orellana","sequence":"additional","affiliation":[]},{"given":"D.","family":"Orestano","sequence":"additional","affiliation":[]},{"given":"N.","family":"Orlando","sequence":"additional","affiliation":[]},{"given":"R. S.","family":"Orr","sequence":"additional","affiliation":[]},{"given":"V.","family":"O\u2019Shea","sequence":"additional","affiliation":[]},{"given":"R.","family":"Ospanov","sequence":"additional","affiliation":[]},{"given":"G.","family":"Otero y Garzon","sequence":"additional","affiliation":[]},{"given":"H.","family":"Otono","sequence":"additional","affiliation":[]},{"given":"P. S.","family":"Ott","sequence":"additional","affiliation":[]},{"given":"M.","family":"Ouchrif","sequence":"additional","affiliation":[]},{"given":"J.","family":"Ouellette","sequence":"additional","affiliation":[]},{"given":"F.","family":"Ould-Saada","sequence":"additional","affiliation":[]},{"given":"A.","family":"Ouraou","sequence":"additional","affiliation":[]},{"given":"Q.","family":"Ouyang","sequence":"additional","affiliation":[]},{"given":"M.","family":"Owen","sequence":"additional","affiliation":[]},{"given":"R. E.","family":"Owen","sequence":"additional","affiliation":[]},{"given":"V. E.","family":"Ozcan","sequence":"additional","affiliation":[]},{"given":"N.","family":"Ozturk","sequence":"additional","affiliation":[]},{"given":"J.","family":"Pacalt","sequence":"additional","affiliation":[]},{"given":"H. A.","family":"Pacey","sequence":"additional","affiliation":[]},{"given":"K.","family":"Pachal","sequence":"additional","affiliation":[]},{"given":"A.","family":"Pacheco Pages","sequence":"additional","affiliation":[]},{"given":"C.","family":"Padilla Aranda","sequence":"additional","affiliation":[]},{"given":"S.","family":"Pagan Griso","sequence":"additional","affiliation":[]},{"given":"M.","family":"Paganini","sequence":"additional","affiliation":[]},{"given":"G.","family":"Palacino","sequence":"additional","affiliation":[]},{"given":"S.","family":"Palazzo","sequence":"additional","affiliation":[]},{"given":"S.","family":"Palestini","sequence":"additional","affiliation":[]},{"given":"M.","family":"Palka","sequence":"additional","affiliation":[]},{"given":"D.","family":"Pallin","sequence":"additional","affiliation":[]},{"given":"P.","family":"Palni","sequence":"additional","affiliation":[]},{"given":"I.","family":"Panagoulias","sequence":"additional","affiliation":[]},{"given":"C. E.","family":"Pandini","sequence":"additional","affiliation":[]},{"given":"J. G.","family":"Panduro Vazquez","sequence":"additional","affiliation":[]},{"given":"P.","family":"Pani","sequence":"additional","affiliation":[]},{"given":"G.","family":"Panizzo","sequence":"additional","affiliation":[]},{"given":"L.","family":"Paolozzi","sequence":"additional","affiliation":[]},{"given":"C.","family":"Papadatos","sequence":"additional","affiliation":[]},{"given":"K.","family":"Papageorgiou","sequence":"additional","affiliation":[]},{"given":"S.","family":"Parajuli","sequence":"additional","affiliation":[]},{"given":"A.","family":"Paramonov","sequence":"additional","affiliation":[]},{"given":"D.","family":"Paredes Hernandez","sequence":"additional","affiliation":[]},{"given":"S. R.","family":"Paredes Saenz","sequence":"additional","affiliation":[]},{"given":"B.","family":"Parida","sequence":"additional","affiliation":[]},{"given":"T. H.","family":"Park","sequence":"additional","affiliation":[]},{"given":"A. J.","family":"Parker","sequence":"additional","affiliation":[]},{"given":"M. A.","family":"Parker","sequence":"additional","affiliation":[]},{"given":"F.","family":"Parodi","sequence":"additional","affiliation":[]},{"given":"E. W.","family":"Parrish","sequence":"additional","affiliation":[]},{"given":"J. A.","family":"Parsons","sequence":"additional","affiliation":[]},{"given":"U.","family":"Parzefall","sequence":"additional","affiliation":[]},{"given":"L.","family":"Pascual Dominguez","sequence":"additional","affiliation":[]},{"given":"V. R.","family":"Pascuzzi","sequence":"additional","affiliation":[]},{"given":"J. M. P.","family":"Pasner","sequence":"additional","affiliation":[]},{"given":"F.","family":"Pasquali","sequence":"additional","affiliation":[]},{"given":"E.","family":"Pasqualucci","sequence":"additional","affiliation":[]},{"given":"S.","family":"Passaggio","sequence":"additional","affiliation":[]},{"given":"F.","family":"Pastore","sequence":"additional","affiliation":[]},{"given":"P.","family":"Pasuwan","sequence":"additional","affiliation":[]},{"given":"S.","family":"Pataraia","sequence":"additional","affiliation":[]},{"given":"J. R.","family":"Pater","sequence":"additional","affiliation":[]},{"given":"A.","family":"Pathak","sequence":"additional","affiliation":[]},{"given":"J.","family":"Patton","sequence":"additional","affiliation":[]},{"given":"T.","family":"Pauly","sequence":"additional","affiliation":[]},{"given":"J.","family":"Pearkes","sequence":"additional","affiliation":[]},{"given":"B.","family":"Pearson","sequence":"additional","affiliation":[]},{"given":"M.","family":"Pedersen","sequence":"additional","affiliation":[]},{"given":"L.","family":"Pedraza Diaz","sequence":"additional","affiliation":[]},{"given":"R.","family":"Pedro","sequence":"additional","affiliation":[]},{"given":"T.","family":"Peiffer","sequence":"additional","affiliation":[]},{"given":"S. V.","family":"Peleganchuk","sequence":"additional","affiliation":[]},{"given":"O.","family":"Penc","sequence":"additional","affiliation":[]},{"given":"H.","family":"Peng","sequence":"additional","affiliation":[]},{"given":"B. S.","family":"Peralva","sequence":"additional","affiliation":[]},{"given":"M. M.","family":"Perego","sequence":"additional","affiliation":[]},{"given":"A. P.","family":"Pereira Peixoto","sequence":"additional","affiliation":[]},{"given":"L.","family":"Pereira Sanchez","sequence":"additional","affiliation":[]},{"given":"D. V.","family":"Perepelitsa","sequence":"additional","affiliation":[]},{"given":"F.","family":"Peri","sequence":"additional","affiliation":[]},{"given":"L.","family":"Perini","sequence":"additional","affiliation":[]},{"given":"H.","family":"Pernegger","sequence":"additional","affiliation":[]},{"given":"S.","family":"Perrella","sequence":"additional","affiliation":[]},{"given":"A.","family":"Perrevoort","sequence":"additional","affiliation":[]},{"given":"K.","family":"Peters","sequence":"additional","affiliation":[]},{"given":"R. F. Y.","family":"Peters","sequence":"additional","affiliation":[]},{"given":"B. A.","family":"Petersen","sequence":"additional","affiliation":[]},{"given":"T. C.","family":"Petersen","sequence":"additional","affiliation":[]},{"given":"E.","family":"Petit","sequence":"additional","affiliation":[]},{"given":"A.","family":"Petridis","sequence":"additional","affiliation":[]},{"given":"C.","family":"Petridou","sequence":"additional","affiliation":[]},{"given":"M.","family":"Petrov","sequence":"additional","affiliation":[]},{"given":"F.","family":"Petrucci","sequence":"additional","affiliation":[]},{"given":"M.","family":"Pettee","sequence":"additional","affiliation":[]},{"given":"N. E.","family":"Pettersson","sequence":"additional","affiliation":[]},{"given":"K.","family":"Petukhova","sequence":"additional","affiliation":[]},{"given":"A.","family":"Peyaud","sequence":"additional","affiliation":[]},{"given":"R.","family":"Pezoa","sequence":"additional","affiliation":[]},{"given":"L.","family":"Pezzotti","sequence":"additional","affiliation":[]},{"given":"T.","family":"Pham","sequence":"additional","affiliation":[]},{"given":"F. H.","family":"Phillips","sequence":"additional","affiliation":[]},{"given":"P. W.","family":"Phillips","sequence":"additional","affiliation":[]},{"given":"M. W.","family":"Phipps","sequence":"additional","affiliation":[]},{"given":"G.","family":"Piacquadio","sequence":"additional","affiliation":[]},{"given":"E.","family":"Pianori","sequence":"additional","affiliation":[]},{"given":"A.","family":"Picazio","sequence":"additional","affiliation":[]},{"given":"R. H.","family":"Pickles","sequence":"additional","affiliation":[]},{"given":"R.","family":"Piegaia","sequence":"additional","affiliation":[]},{"given":"D.","family":"Pietreanu","sequence":"additional","affiliation":[]},{"given":"J. E.","family":"Pilcher","sequence":"additional","affiliation":[]},{"given":"A. D.","family":"Pilkington","sequence":"additional","affiliation":[]},{"given":"M.","family":"Pinamonti","sequence":"additional","affiliation":[]},{"given":"J. L.","family":"Pinfold","sequence":"additional","affiliation":[]},{"given":"M.","family":"Pitt","sequence":"additional","affiliation":[]},{"given":"L.","family":"Pizzimento","sequence":"additional","affiliation":[]},{"given":"M.-A.","family":"Pleier","sequence":"additional","affiliation":[]},{"given":"V.","family":"Pleskot","sequence":"additional","affiliation":[]},{"given":"E.","family":"Plotnikova","sequence":"additional","affiliation":[]},{"given":"P.","family":"Podberezko","sequence":"additional","affiliation":[]},{"given":"R.","family":"Poettgen","sequence":"additional","affiliation":[]},{"given":"R.","family":"Poggi","sequence":"additional","affiliation":[]},{"given":"L.","family":"Poggioli","sequence":"additional","affiliation":[]},{"given":"I.","family":"Pogrebnyak","sequence":"additional","affiliation":[]},{"given":"D.","family":"Pohl","sequence":"additional","affiliation":[]},{"given":"I.","family":"Pokharel","sequence":"additional","affiliation":[]},{"given":"G.","family":"Polesello","sequence":"additional","affiliation":[]},{"given":"A.","family":"Poley","sequence":"additional","affiliation":[]},{"given":"A.","family":"Policicchio","sequence":"additional","affiliation":[]},{"given":"R.","family":"Polifka","sequence":"additional","affiliation":[]},{"given":"A.","family":"Polini","sequence":"additional","affiliation":[]},{"given":"C. S.","family":"Pollard","sequence":"additional","affiliation":[]},{"given":"V.","family":"Polychronakos","sequence":"additional","affiliation":[]},{"given":"D.","family":"Ponomarenko","sequence":"additional","affiliation":[]},{"given":"L.","family":"Pontecorvo","sequence":"additional","affiliation":[]},{"given":"S.","family":"Popa","sequence":"additional","affiliation":[]},{"given":"G. A.","family":"Popeneciu","sequence":"additional","affiliation":[]},{"given":"L.","family":"Portales","sequence":"additional","affiliation":[]},{"given":"D. M.","family":"Portillo Quintero","sequence":"additional","affiliation":[]},{"given":"S.","family":"Pospisil","sequence":"additional","affiliation":[]},{"given":"K.","family":"Potamianos","sequence":"additional","affiliation":[]},{"given":"I. N.","family":"Potrap","sequence":"additional","affiliation":[]},{"given":"C. J.","family":"Potter","sequence":"additional","affiliation":[]},{"given":"H.","family":"Potti","sequence":"additional","affiliation":[]},{"given":"T.","family":"Poulsen","sequence":"additional","affiliation":[]},{"given":"J.","family":"Poveda","sequence":"additional","affiliation":[]},{"given":"T. D.","family":"Powell","sequence":"additional","affiliation":[]},{"given":"G.","family":"Pownall","sequence":"additional","affiliation":[]},{"given":"M. E.","family":"Pozo Astigarraga","sequence":"additional","affiliation":[]},{"given":"P.","family":"Pralavorio","sequence":"additional","affiliation":[]},{"given":"S.","family":"Prell","sequence":"additional","affiliation":[]},{"given":"D.","family":"Price","sequence":"additional","affiliation":[]},{"given":"M.","family":"Primavera","sequence":"additional","affiliation":[]},{"given":"S.","family":"Prince","sequence":"additional","affiliation":[]},{"given":"M. L.","family":"Proffitt","sequence":"additional","affiliation":[]},{"given":"N.","family":"Proklova","sequence":"additional","affiliation":[]},{"given":"K.","family":"Prokofiev","sequence":"additional","affiliation":[]},{"given":"F.","family":"Prokoshin","sequence":"additional","affiliation":[]},{"given":"S.","family":"Protopopescu","sequence":"additional","affiliation":[]},{"given":"J.","family":"Proudfoot","sequence":"additional","affiliation":[]},{"given":"M.","family":"Przybycien","sequence":"additional","affiliation":[]},{"given":"D.","family":"Pudzha","sequence":"additional","affiliation":[]},{"given":"A.","family":"Puri","sequence":"additional","affiliation":[]},{"given":"P.","family":"Puzo","sequence":"additional","affiliation":[]},{"given":"J.","family":"Qian","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Qin","sequence":"additional","affiliation":[]},{"given":"A.","family":"Quadt","sequence":"additional","affiliation":[]},{"given":"M.","family":"Queitsch-Maitland","sequence":"additional","affiliation":[]},{"given":"A.","family":"Qureshi","sequence":"additional","affiliation":[]},{"given":"M.","family":"Racko","sequence":"additional","affiliation":[]},{"given":"F.","family":"Ragusa","sequence":"additional","affiliation":[]},{"given":"G.","family":"Rahal","sequence":"additional","affiliation":[]},{"given":"J. A.","family":"Raine","sequence":"additional","affiliation":[]},{"given":"S.","family":"Rajagopalan","sequence":"additional","affiliation":[]},{"given":"A. Ramirez","family":"Morales","sequence":"additional","affiliation":[]},{"given":"K.","family":"Ran","sequence":"additional","affiliation":[]},{"given":"T.","family":"Rashid","sequence":"additional","affiliation":[]},{"given":"S.","family":"Raspopov","sequence":"additional","affiliation":[]},{"given":"D. M.","family":"Rauch","sequence":"additional","affiliation":[]},{"given":"F.","family":"Rauscher","sequence":"additional","affiliation":[]},{"given":"S.","family":"Rave","sequence":"additional","affiliation":[]},{"given":"B.","family":"Ravina","sequence":"additional","affiliation":[]},{"given":"I.","family":"Ravinovich","sequence":"additional","affiliation":[]},{"given":"J. H.","family":"Rawling","sequence":"additional","affiliation":[]},{"given":"M.","family":"Raymond","sequence":"additional","affiliation":[]},{"given":"A. L.","family":"Read","sequence":"additional","affiliation":[]},{"given":"N. P.","family":"Readioff","sequence":"additional","affiliation":[]},{"given":"M.","family":"Reale","sequence":"additional","affiliation":[]},{"given":"D. M.","family":"Rebuzzi","sequence":"additional","affiliation":[]},{"given":"A.","family":"Redelbach","sequence":"additional","affiliation":[]},{"given":"G.","family":"Redlinger","sequence":"additional","affiliation":[]},{"given":"K.","family":"Reeves","sequence":"additional","affiliation":[]},{"given":"L.","family":"Rehnisch","sequence":"additional","affiliation":[]},{"given":"J.","family":"Reichert","sequence":"additional","affiliation":[]},{"given":"D.","family":"Reikher","sequence":"additional","affiliation":[]},{"given":"A.","family":"Reiss","sequence":"additional","affiliation":[]},{"given":"A.","family":"Rej","sequence":"additional","affiliation":[]},{"given":"C.","family":"Rembser","sequence":"additional","affiliation":[]},{"given":"A.","family":"Renardi","sequence":"additional","affiliation":[]},{"given":"M.","family":"Renda","sequence":"additional","affiliation":[]},{"given":"M.","family":"Rescigno","sequence":"additional","affiliation":[]},{"given":"S.","family":"Resconi","sequence":"additional","affiliation":[]},{"given":"E. D.","family":"Resseguie","sequence":"additional","affiliation":[]},{"given":"S.","family":"Rettie","sequence":"additional","affiliation":[]},{"given":"B.","family":"Reynolds","sequence":"additional","affiliation":[]},{"given":"E.","family":"Reynolds","sequence":"additional","affiliation":[]},{"given":"O. L.","family":"Rezanova","sequence":"additional","affiliation":[]},{"given":"P.","family":"Reznicek","sequence":"additional","affiliation":[]},{"given":"E.","family":"Ricci","sequence":"additional","affiliation":[]},{"given":"R.","family":"Richter","sequence":"additional","affiliation":[]},{"given":"S.","family":"Richter","sequence":"additional","affiliation":[]},{"given":"E.","family":"Richter-Was","sequence":"additional","affiliation":[]},{"given":"O.","family":"Ricken","sequence":"additional","affiliation":[]},{"given":"M.","family":"Ridel","sequence":"additional","affiliation":[]},{"given":"P.","family":"Rieck","sequence":"additional","affiliation":[]},{"given":"O.","family":"Rifki","sequence":"additional","affiliation":[]},{"given":"M.","family":"Rijssenbeek","sequence":"additional","affiliation":[]},{"given":"A.","family":"Rimoldi","sequence":"additional","affiliation":[]},{"given":"M.","family":"Rimoldi","sequence":"additional","affiliation":[]},{"given":"L.","family":"Rinaldi","sequence":"additional","affiliation":[]},{"given":"G.","family":"Ripellino","sequence":"additional","affiliation":[]},{"given":"I.","family":"Riu","sequence":"additional","affiliation":[]},{"given":"J. C.","family":"Rivera Vergara","sequence":"additional","affiliation":[]},{"given":"F.","family":"Rizatdinova","sequence":"additional","affiliation":[]},{"given":"E.","family":"Rizvi","sequence":"additional","affiliation":[]},{"given":"C.","family":"Rizzi","sequence":"additional","affiliation":[]},{"given":"R. T.","family":"Roberts","sequence":"additional","affiliation":[]},{"given":"S. H.","family":"Robertson","sequence":"additional","affiliation":[]},{"given":"M.","family":"Robin","sequence":"additional","affiliation":[]},{"given":"D.","family":"Robinson","sequence":"additional","affiliation":[]},{"given":"C. M.","family":"Robles Gajardo","sequence":"additional","affiliation":[]},{"given":"M.","family":"Robles Manzano","sequence":"additional","affiliation":[]},{"given":"A.","family":"Robson","sequence":"additional","affiliation":[]},{"given":"A.","family":"Rocchi","sequence":"additional","affiliation":[]},{"given":"E.","family":"Rocco","sequence":"additional","affiliation":[]},{"given":"C.","family":"Roda","sequence":"additional","affiliation":[]},{"given":"S.","family":"Rodriguez Bosca","sequence":"additional","affiliation":[]},{"given":"A.","family":"Rodriguez Perez","sequence":"additional","affiliation":[]},{"given":"D.","family":"Rodriguez Rodriguez","sequence":"additional","affiliation":[]},{"given":"A. M.","family":"Rodr\u00edguez Vera","sequence":"additional","affiliation":[]},{"given":"S.","family":"Roe","sequence":"additional","affiliation":[]},{"given":"O.","family":"R\u00f8hne","sequence":"additional","affiliation":[]},{"given":"R.","family":"R\u00f6hrig","sequence":"additional","affiliation":[]},{"given":"R. A.","family":"Rojas","sequence":"additional","affiliation":[]},{"given":"B.","family":"Roland","sequence":"additional","affiliation":[]},{"given":"C. P. A.","family":"Roland","sequence":"additional","affiliation":[]},{"given":"J.","family":"Roloff","sequence":"additional","affiliation":[]},{"given":"A.","family":"Romaniouk","sequence":"additional","affiliation":[]},{"given":"M.","family":"Romano","sequence":"additional","affiliation":[]},{"given":"N.","family":"Rompotis","sequence":"additional","affiliation":[]},{"given":"M.","family":"Ronzani","sequence":"additional","affiliation":[]},{"given":"L.","family":"Roos","sequence":"additional","affiliation":[]},{"given":"S.","family":"Rosati","sequence":"additional","affiliation":[]},{"given":"G.","family":"Rosin","sequence":"additional","affiliation":[]},{"given":"B. J.","family":"Rosser","sequence":"additional","affiliation":[]},{"given":"E.","family":"Rossi","sequence":"additional","affiliation":[]},{"given":"E.","family":"Rossi","sequence":"additional","affiliation":[]},{"given":"E.","family":"Rossi","sequence":"additional","affiliation":[]},{"given":"L. P.","family":"Rossi","sequence":"additional","affiliation":[]},{"given":"L.","family":"Rossini","sequence":"additional","affiliation":[]},{"given":"R.","family":"Rosten","sequence":"additional","affiliation":[]},{"given":"M.","family":"Rotaru","sequence":"additional","affiliation":[]},{"given":"J.","family":"Rothberg","sequence":"additional","affiliation":[]},{"given":"B.","family":"Rottler","sequence":"additional","affiliation":[]},{"given":"D.","family":"Rousseau","sequence":"additional","affiliation":[]},{"given":"G.","family":"Rovelli","sequence":"additional","affiliation":[]},{"given":"A.","family":"Roy","sequence":"additional","affiliation":[]},{"given":"D.","family":"Roy","sequence":"additional","affiliation":[]},{"given":"A.","family":"Rozanov","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Rozen","sequence":"additional","affiliation":[]},{"given":"X.","family":"Ruan","sequence":"additional","affiliation":[]},{"given":"F.","family":"R\u00fchr","sequence":"additional","affiliation":[]},{"given":"A.","family":"Ruiz-Martinez","sequence":"additional","affiliation":[]},{"given":"A.","family":"Rummler","sequence":"additional","affiliation":[]},{"given":"Z.","family":"Rurikova","sequence":"additional","affiliation":[]},{"given":"N. A.","family":"Rusakovich","sequence":"additional","affiliation":[]},{"given":"H. L.","family":"Russell","sequence":"additional","affiliation":[]},{"given":"L.","family":"Rustige","sequence":"additional","affiliation":[]},{"given":"J. P.","family":"Rutherfoord","sequence":"additional","affiliation":[]},{"given":"E. M.","family":"R\u00fcttinger","sequence":"additional","affiliation":[]},{"given":"M.","family":"Rybar","sequence":"additional","affiliation":[]},{"given":"G.","family":"Rybkin","sequence":"additional","affiliation":[]},{"given":"E. B.","family":"Rye","sequence":"additional","affiliation":[]},{"given":"A.","family":"Ryzhov","sequence":"additional","affiliation":[]},{"given":"J. A.","family":"Sabater Iglesias","sequence":"additional","affiliation":[]},{"given":"P.","family":"Sabatini","sequence":"additional","affiliation":[]},{"given":"G.","family":"Sabato","sequence":"additional","affiliation":[]},{"given":"S.","family":"Sacerdoti","sequence":"additional","affiliation":[]},{"given":"H. F-W.","family":"Sadrozinski","sequence":"additional","affiliation":[]},{"given":"R.","family":"Sadykov","sequence":"additional","affiliation":[]},{"given":"F.","family":"Safai Tehrani","sequence":"additional","affiliation":[]},{"given":"B.","family":"Safarzadeh Samani","sequence":"additional","affiliation":[]},{"given":"M.","family":"Safdari","sequence":"additional","affiliation":[]},{"given":"P.","family":"Saha","sequence":"additional","affiliation":[]},{"given":"S.","family":"Saha","sequence":"additional","affiliation":[]},{"given":"M.","family":"Sahinsoy","sequence":"additional","affiliation":[]},{"given":"A.","family":"Sahu","sequence":"additional","affiliation":[]},{"given":"M.","family":"Saimpert","sequence":"additional","affiliation":[]},{"given":"M.","family":"Saito","sequence":"additional","affiliation":[]},{"given":"T.","family":"Saito","sequence":"additional","affiliation":[]},{"given":"H.","family":"Sakamoto","sequence":"additional","affiliation":[]},{"given":"D.","family":"Salamani","sequence":"additional","affiliation":[]},{"given":"G.","family":"Salamanna","sequence":"additional","affiliation":[]},{"given":"J. E.","family":"Salazar Loyola","sequence":"additional","affiliation":[]},{"given":"A.","family":"Salnikov","sequence":"additional","affiliation":[]},{"given":"J.","family":"Salt","sequence":"additional","affiliation":[]},{"given":"D.","family":"Salvatore","sequence":"additional","affiliation":[]},{"given":"F.","family":"Salvatore","sequence":"additional","affiliation":[]},{"given":"A.","family":"Salvucci","sequence":"additional","affiliation":[]},{"given":"A.","family":"Salzburger","sequence":"additional","affiliation":[]},{"given":"J.","family":"Samarati","sequence":"additional","affiliation":[]},{"given":"D.","family":"Sammel","sequence":"additional","affiliation":[]},{"given":"D.","family":"Sampsonidis","sequence":"additional","affiliation":[]},{"given":"D.","family":"Sampsonidou","sequence":"additional","affiliation":[]},{"given":"J.","family":"S\u00e1nchez","sequence":"additional","affiliation":[]},{"given":"A.","family":"Sanchez Pineda","sequence":"additional","affiliation":[]},{"given":"H.","family":"Sandaker","sequence":"additional","affiliation":[]},{"given":"C. O.","family":"Sander","sequence":"additional","affiliation":[]},{"given":"I. G.","family":"Sanderswood","sequence":"additional","affiliation":[]},{"given":"M.","family":"Sandhoff","sequence":"additional","affiliation":[]},{"given":"C.","family":"Sandoval","sequence":"additional","affiliation":[]},{"given":"D. P. C.","family":"Sankey","sequence":"additional","affiliation":[]},{"given":"M.","family":"Sannino","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Sano","sequence":"additional","affiliation":[]},{"given":"A.","family":"Sansoni","sequence":"additional","affiliation":[]},{"given":"C.","family":"Santoni","sequence":"additional","affiliation":[]},{"given":"H.","family":"Santos","sequence":"additional","affiliation":[]},{"given":"S. N.","family":"Santpur","sequence":"additional","affiliation":[]},{"given":"A.","family":"Santra","sequence":"additional","affiliation":[]},{"given":"A.","family":"Sapronov","sequence":"additional","affiliation":[]},{"given":"J. G.","family":"Saraiva","sequence":"additional","affiliation":[]},{"given":"J.","family":"Sardain","sequence":"additional","affiliation":[]},{"given":"O.","family":"Sasaki","sequence":"additional","affiliation":[]},{"given":"K.","family":"Sato","sequence":"additional","affiliation":[]},{"given":"F.","family":"Sauerburger","sequence":"additional","affiliation":[]},{"given":"E.","family":"Sauvan","sequence":"additional","affiliation":[]},{"given":"P.","family":"Savard","sequence":"additional","affiliation":[]},{"given":"R.","family":"Sawada","sequence":"additional","affiliation":[]},{"given":"C.","family":"Sawyer","sequence":"additional","affiliation":[]},{"given":"L.","family":"Sawyer","sequence":"additional","affiliation":[]},{"given":"C.","family":"Sbarra","sequence":"additional","affiliation":[]},{"given":"A.","family":"Sbrizzi","sequence":"additional","affiliation":[]},{"given":"T.","family":"Scanlon","sequence":"additional","affiliation":[]},{"given":"J.","family":"Schaarschmidt","sequence":"additional","affiliation":[]},{"given":"P.","family":"Schacht","sequence":"additional","affiliation":[]},{"given":"B. M.","family":"Schachtner","sequence":"additional","affiliation":[]},{"given":"D.","family":"Schaefer","sequence":"additional","affiliation":[]},{"given":"L.","family":"Schaefer","sequence":"additional","affiliation":[]},{"given":"J.","family":"Schaeffer","sequence":"additional","affiliation":[]},{"given":"S.","family":"Schaepe","sequence":"additional","affiliation":[]},{"given":"U.","family":"Sch\u00e4fer","sequence":"additional","affiliation":[]},{"given":"A. C.","family":"Schaffer","sequence":"additional","affiliation":[]},{"given":"D.","family":"Schaile","sequence":"additional","affiliation":[]},{"given":"R. D.","family":"Schamberger","sequence":"additional","affiliation":[]},{"given":"N.","family":"Scharmberg","sequence":"additional","affiliation":[]},{"given":"V. A.","family":"Schegelsky","sequence":"additional","affiliation":[]},{"given":"D.","family":"Scheirich","sequence":"additional","affiliation":[]},{"given":"F.","family":"Schenck","sequence":"additional","affiliation":[]},{"given":"M.","family":"Schernau","sequence":"additional","affiliation":[]},{"given":"C.","family":"Schiavi","sequence":"additional","affiliation":[]},{"given":"L. K.","family":"Schildgen","sequence":"additional","affiliation":[]},{"given":"Z. M.","family":"Schillaci","sequence":"additional","affiliation":[]},{"given":"E. J.","family":"Schioppa","sequence":"additional","affiliation":[]},{"given":"M.","family":"Schioppa","sequence":"additional","affiliation":[]},{"given":"K. E.","family":"Schleicher","sequence":"additional","affiliation":[]},{"given":"S.","family":"Schlenker","sequence":"additional","affiliation":[]},{"given":"K. R.","family":"Schmidt-Sommerfeld","sequence":"additional","affiliation":[]},{"given":"K.","family":"Schmieden","sequence":"additional","affiliation":[]},{"given":"C.","family":"Schmitt","sequence":"additional","affiliation":[]},{"given":"S.","family":"Schmitt","sequence":"additional","affiliation":[]},{"given":"S.","family":"Schmitz","sequence":"additional","affiliation":[]},{"given":"J. C.","family":"Schmoeckel","sequence":"additional","affiliation":[]},{"given":"L.","family":"Schoeffel","sequence":"additional","affiliation":[]},{"given":"A.","family":"Schoening","sequence":"additional","affiliation":[]},{"given":"P. G.","family":"Scholer","sequence":"additional","affiliation":[]},{"given":"E.","family":"Schopf","sequence":"additional","affiliation":[]},{"given":"M.","family":"Schott","sequence":"additional","affiliation":[]},{"given":"J. F. P.","family":"Schouwenberg","sequence":"additional","affiliation":[]},{"given":"J.","family":"Schovancova","sequence":"additional","affiliation":[]},{"given":"S.","family":"Schramm","sequence":"additional","affiliation":[]},{"given":"F.","family":"Schroeder","sequence":"additional","affiliation":[]},{"given":"A.","family":"Schulte","sequence":"additional","affiliation":[]},{"given":"H-C.","family":"Schultz-Coulon","sequence":"additional","affiliation":[]},{"given":"M.","family":"Schumacher","sequence":"additional","affiliation":[]},{"given":"B. A.","family":"Schumm","sequence":"additional","affiliation":[]},{"given":"Ph.","family":"Schune","sequence":"additional","affiliation":[]},{"given":"A.","family":"Schwartzman","sequence":"additional","affiliation":[]},{"given":"T. A.","family":"Schwarz","sequence":"additional","affiliation":[]},{"given":"Ph.","family":"Schwemling","sequence":"additional","affiliation":[]},{"given":"R.","family":"Schwienhorst","sequence":"additional","affiliation":[]},{"given":"A.","family":"Sciandra","sequence":"additional","affiliation":[]},{"given":"G.","family":"Sciolla","sequence":"additional","affiliation":[]},{"given":"M.","family":"Scodeggio","sequence":"additional","affiliation":[]},{"given":"M.","family":"Scornajenghi","sequence":"additional","affiliation":[]},{"given":"F.","family":"Scuri","sequence":"additional","affiliation":[]},{"given":"F.","family":"Scutti","sequence":"additional","affiliation":[]},{"given":"L. M.","family":"Scyboz","sequence":"additional","affiliation":[]},{"given":"C. D.","family":"Sebastiani","sequence":"additional","affiliation":[]},{"given":"P.","family":"Seema","sequence":"additional","affiliation":[]},{"given":"S. C.","family":"Seidel","sequence":"additional","affiliation":[]},{"given":"A.","family":"Seiden","sequence":"additional","affiliation":[]},{"given":"B. D.","family":"Seidlitz","sequence":"additional","affiliation":[]},{"given":"T.","family":"Seiss","sequence":"additional","affiliation":[]},{"given":"J. M.","family":"Seixas","sequence":"additional","affiliation":[]},{"given":"G.","family":"Sekhniaidze","sequence":"additional","affiliation":[]},{"given":"S. J.","family":"Sekula","sequence":"additional","affiliation":[]},{"given":"N.","family":"Semprini-Cesari","sequence":"additional","affiliation":[]},{"given":"S.","family":"Sen","sequence":"additional","affiliation":[]},{"given":"C.","family":"Serfon","sequence":"additional","affiliation":[]},{"given":"L.","family":"Serin","sequence":"additional","affiliation":[]},{"given":"L.","family":"Serkin","sequence":"additional","affiliation":[]},{"given":"M.","family":"Sessa","sequence":"additional","affiliation":[]},{"given":"H.","family":"Severini","sequence":"additional","affiliation":[]},{"given":"S.","family":"Sevova","sequence":"additional","affiliation":[]},{"given":"T.","family":"\u0160filigoj","sequence":"additional","affiliation":[]},{"given":"F.","family":"Sforza","sequence":"additional","affiliation":[]},{"given":"A.","family":"Sfyrla","sequence":"additional","affiliation":[]},{"given":"E.","family":"Shabalina","sequence":"additional","affiliation":[]},{"given":"J. D.","family":"Shahinian","sequence":"additional","affiliation":[]},{"given":"N. W.","family":"Shaikh","sequence":"additional","affiliation":[]},{"given":"D.","family":"Shaked Renous","sequence":"additional","affiliation":[]},{"given":"L. Y.","family":"Shan","sequence":"additional","affiliation":[]},{"given":"J. T.","family":"Shank","sequence":"additional","affiliation":[]},{"given":"M.","family":"Shapiro","sequence":"additional","affiliation":[]},{"given":"A.","family":"Sharma","sequence":"additional","affiliation":[]},{"given":"A. S.","family":"Sharma","sequence":"additional","affiliation":[]},{"given":"P. B.","family":"Shatalov","sequence":"additional","affiliation":[]},{"given":"K.","family":"Shaw","sequence":"additional","affiliation":[]},{"given":"S. M.","family":"Shaw","sequence":"additional","affiliation":[]},{"given":"M.","family":"Shehade","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Shen","sequence":"additional","affiliation":[]},{"given":"A. D.","family":"Sherman","sequence":"additional","affiliation":[]},{"given":"P.","family":"Sherwood","sequence":"additional","affiliation":[]},{"given":"L.","family":"Shi","sequence":"additional","affiliation":[]},{"given":"S.","family":"Shimizu","sequence":"additional","affiliation":[]},{"given":"C. O.","family":"Shimmin","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Shimogama","sequence":"additional","affiliation":[]},{"given":"M.","family":"Shimojima","sequence":"additional","affiliation":[]},{"given":"I. P. J.","family":"Shipsey","sequence":"additional","affiliation":[]},{"given":"S.","family":"Shirabe","sequence":"additional","affiliation":[]},{"given":"M.","family":"Shiyakova","sequence":"additional","affiliation":[]},{"given":"J.","family":"Shlomi","sequence":"additional","affiliation":[]},{"given":"A.","family":"Shmeleva","sequence":"additional","affiliation":[]},{"given":"M. J.","family":"Shochet","sequence":"additional","affiliation":[]},{"given":"J.","family":"Shojaii","sequence":"additional","affiliation":[]},{"given":"D. R.","family":"Shope","sequence":"additional","affiliation":[]},{"given":"S.","family":"Shrestha","sequence":"additional","affiliation":[]},{"given":"E. M.","family":"Shrif","sequence":"additional","affiliation":[]},{"given":"E.","family":"Shulga","sequence":"additional","affiliation":[]},{"given":"P.","family":"Sicho","sequence":"additional","affiliation":[]},{"given":"A. M.","family":"Sickles","sequence":"additional","affiliation":[]},{"given":"P. E.","family":"Sidebo","sequence":"additional","affiliation":[]},{"given":"E.","family":"Sideras Haddad","sequence":"additional","affiliation":[]},{"given":"O.","family":"Sidiropoulou","sequence":"additional","affiliation":[]},{"given":"A.","family":"Sidoti","sequence":"additional","affiliation":[]},{"given":"F.","family":"Siegert","sequence":"additional","affiliation":[]},{"given":"Dj.","family":"Sijacki","sequence":"additional","affiliation":[]},{"given":"M.","family":"Silva","sequence":"additional","affiliation":[]},{"given":"M. V.","family":"Silva Oliveira","sequence":"additional","affiliation":[]},{"given":"S. B.","family":"Silverstein","sequence":"additional","affiliation":[]},{"given":"S.","family":"Simion","sequence":"additional","affiliation":[]},{"given":"R.","family":"Simoniello","sequence":"additional","affiliation":[]},{"given":"C. J.","family":"Simpson-allsop","sequence":"additional","affiliation":[]},{"given":"S.","family":"Simsek","sequence":"additional","affiliation":[]},{"given":"P.","family":"Sinervo","sequence":"additional","affiliation":[]},{"given":"V.","family":"Sinetckii","sequence":"additional","affiliation":[]},{"given":"S.","family":"Singh","sequence":"additional","affiliation":[]},{"given":"M.","family":"Sioli","sequence":"additional","affiliation":[]},{"given":"I.","family":"Siral","sequence":"additional","affiliation":[]},{"given":"S. Yu.","family":"Sivoklokov","sequence":"additional","affiliation":[]},{"given":"J.","family":"Sj\u00f6lin","sequence":"additional","affiliation":[]},{"given":"E.","family":"Skorda","sequence":"additional","affiliation":[]},{"given":"P.","family":"Skubic","sequence":"additional","affiliation":[]},{"given":"M.","family":"Slawinska","sequence":"additional","affiliation":[]},{"given":"K.","family":"Sliwa","sequence":"additional","affiliation":[]},{"given":"R.","family":"Slovak","sequence":"additional","affiliation":[]},{"given":"V.","family":"Smakhtin","sequence":"additional","affiliation":[]},{"given":"B. H.","family":"Smart","sequence":"additional","affiliation":[]},{"given":"J.","family":"Smiesko","sequence":"additional","affiliation":[]},{"given":"N.","family":"Smirnov","sequence":"additional","affiliation":[]},{"given":"S. Yu.","family":"Smirnov","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Smirnov","sequence":"additional","affiliation":[]},{"given":"L. N.","family":"Smirnova","sequence":"additional","affiliation":[]},{"given":"O.","family":"Smirnova","sequence":"additional","affiliation":[]},{"given":"J. W.","family":"Smith","sequence":"additional","affiliation":[]},{"given":"M.","family":"Smizanska","sequence":"additional","affiliation":[]},{"given":"K.","family":"Smolek","sequence":"additional","affiliation":[]},{"given":"A.","family":"Smykiewicz","sequence":"additional","affiliation":[]},{"given":"A. A.","family":"Snesarev","sequence":"additional","affiliation":[]},{"given":"H. L.","family":"Snoek","sequence":"additional","affiliation":[]},{"given":"I. M.","family":"Snyder","sequence":"additional","affiliation":[]},{"given":"S.","family":"Snyder","sequence":"additional","affiliation":[]},{"given":"R.","family":"Sobie","sequence":"additional","affiliation":[]},{"given":"A.","family":"Soffer","sequence":"additional","affiliation":[]},{"given":"A.","family":"S\u00f8gaard","sequence":"additional","affiliation":[]},{"given":"F.","family":"Sohns","sequence":"additional","affiliation":[]},{"given":"C. A.","family":"Solans Sanchez","sequence":"additional","affiliation":[]},{"given":"E. Yu.","family":"Soldatov","sequence":"additional","affiliation":[]},{"given":"U.","family":"Soldevila","sequence":"additional","affiliation":[]},{"given":"A. A.","family":"Solodkov","sequence":"additional","affiliation":[]},{"given":"A.","family":"Soloshenko","sequence":"additional","affiliation":[]},{"given":"O. V.","family":"Solovyanov","sequence":"additional","affiliation":[]},{"given":"V.","family":"Solovyev","sequence":"additional","affiliation":[]},{"given":"P.","family":"Sommer","sequence":"additional","affiliation":[]},{"given":"H.","family":"Son","sequence":"additional","affiliation":[]},{"given":"W.","family":"Song","sequence":"additional","affiliation":[]},{"given":"W. Y.","family":"Song","sequence":"additional","affiliation":[]},{"given":"A.","family":"Sopczak","sequence":"additional","affiliation":[]},{"given":"A. L.","family":"Sopio","sequence":"additional","affiliation":[]},{"given":"F.","family":"Sopkova","sequence":"additional","affiliation":[]},{"given":"C. L.","family":"Sotiropoulou","sequence":"additional","affiliation":[]},{"given":"S.","family":"Sottocornola","sequence":"additional","affiliation":[]},{"given":"R.","family":"Soualah","sequence":"additional","affiliation":[]},{"given":"A. M.","family":"Soukharev","sequence":"additional","affiliation":[]},{"given":"D.","family":"South","sequence":"additional","affiliation":[]},{"given":"S.","family":"Spagnolo","sequence":"additional","affiliation":[]},{"given":"M.","family":"Spalla","sequence":"additional","affiliation":[]},{"given":"M.","family":"Spangenberg","sequence":"additional","affiliation":[]},{"given":"F.","family":"Span\u00f2","sequence":"additional","affiliation":[]},{"given":"D.","family":"Sperlich","sequence":"additional","affiliation":[]},{"given":"T. M.","family":"Spieker","sequence":"additional","affiliation":[]},{"given":"G.","family":"Spigo","sequence":"additional","affiliation":[]},{"given":"M.","family":"Spina","sequence":"additional","affiliation":[]},{"given":"D. P.","family":"Spiteri","sequence":"additional","affiliation":[]},{"given":"M.","family":"Spousta","sequence":"additional","affiliation":[]},{"given":"A.","family":"Stabile","sequence":"additional","affiliation":[]},{"given":"R.","family":"Stamen","sequence":"additional","affiliation":[]},{"given":"M.","family":"Stamenkovic","sequence":"additional","affiliation":[]},{"given":"E.","family":"Stanecka","sequence":"additional","affiliation":[]},{"given":"B.","family":"Stanislaus","sequence":"additional","affiliation":[]},{"given":"M. M.","family":"Stanitzki","sequence":"additional","affiliation":[]},{"given":"M.","family":"Stankaityte","sequence":"additional","affiliation":[]},{"given":"B.","family":"Stapf","sequence":"additional","affiliation":[]},{"given":"E. A.","family":"Starchenko","sequence":"additional","affiliation":[]},{"given":"G. H.","family":"Stark","sequence":"additional","affiliation":[]},{"given":"J.","family":"Stark","sequence":"additional","affiliation":[]},{"given":"P.","family":"Staroba","sequence":"additional","affiliation":[]},{"given":"P.","family":"Starovoitov","sequence":"additional","affiliation":[]},{"given":"S.","family":"St\u00e4rz","sequence":"additional","affiliation":[]},{"given":"R.","family":"Staszewski","sequence":"additional","affiliation":[]},{"given":"G.","family":"Stavropoulos","sequence":"additional","affiliation":[]},{"given":"M.","family":"Stegler","sequence":"additional","affiliation":[]},{"given":"P.","family":"Steinberg","sequence":"additional","affiliation":[]},{"given":"A. L.","family":"Steinhebel","sequence":"additional","affiliation":[]},{"given":"B.","family":"Stelzer","sequence":"additional","affiliation":[]},{"given":"H. J.","family":"Stelzer","sequence":"additional","affiliation":[]},{"given":"O.","family":"Stelzer-Chilton","sequence":"additional","affiliation":[]},{"given":"H.","family":"Stenzel","sequence":"additional","affiliation":[]},{"given":"T. J.","family":"Stevenson","sequence":"additional","affiliation":[]},{"given":"G. A.","family":"Stewart","sequence":"additional","affiliation":[]},{"given":"M. C.","family":"Stockton","sequence":"additional","affiliation":[]},{"given":"G.","family":"Stoicea","sequence":"additional","affiliation":[]},{"given":"M.","family":"Stolarski","sequence":"additional","affiliation":[]},{"given":"S.","family":"Stonjek","sequence":"additional","affiliation":[]},{"given":"A.","family":"Straessner","sequence":"additional","affiliation":[]},{"given":"J.","family":"Strandberg","sequence":"additional","affiliation":[]},{"given":"S.","family":"Strandberg","sequence":"additional","affiliation":[]},{"given":"M.","family":"Strauss","sequence":"additional","affiliation":[]},{"given":"P.","family":"Strizenec","sequence":"additional","affiliation":[]},{"given":"R.","family":"Str\u00f6hmer","sequence":"additional","affiliation":[]},{"given":"D. M.","family":"Strom","sequence":"additional","affiliation":[]},{"given":"R.","family":"Stroynowski","sequence":"additional","affiliation":[]},{"given":"A.","family":"Strubig","sequence":"additional","affiliation":[]},{"given":"S. A.","family":"Stucci","sequence":"additional","affiliation":[]},{"given":"B.","family":"Stugu","sequence":"additional","affiliation":[]},{"given":"J.","family":"Stupak","sequence":"additional","affiliation":[]},{"given":"N. A.","family":"Styles","sequence":"additional","affiliation":[]},{"given":"D.","family":"Su","sequence":"additional","affiliation":[]},{"given":"W.","family":"Su","sequence":"additional","affiliation":[]},{"given":"S.","family":"Suchek","sequence":"additional","affiliation":[]},{"given":"V. V.","family":"Sulin","sequence":"additional","affiliation":[]},{"given":"M. J.","family":"Sullivan","sequence":"additional","affiliation":[]},{"given":"D. M. S.","family":"Sultan","sequence":"additional","affiliation":[]},{"given":"S.","family":"Sultansoy","sequence":"additional","affiliation":[]},{"given":"T.","family":"Sumida","sequence":"additional","affiliation":[]},{"given":"S.","family":"Sun","sequence":"additional","affiliation":[]},{"given":"X.","family":"Sun","sequence":"additional","affiliation":[]},{"given":"K.","family":"Suruliz","sequence":"additional","affiliation":[]},{"given":"C. J. E.","family":"Suster","sequence":"additional","affiliation":[]},{"given":"M. R.","family":"Sutton","sequence":"additional","affiliation":[]},{"given":"S.","family":"Suzuki","sequence":"additional","affiliation":[]},{"given":"M.","family":"Svatos","sequence":"additional","affiliation":[]},{"given":"M.","family":"Swiatlowski","sequence":"additional","affiliation":[]},{"given":"S. P.","family":"Swift","sequence":"additional","affiliation":[]},{"given":"T.","family":"Swirski","sequence":"additional","affiliation":[]},{"given":"A.","family":"Sydorenko","sequence":"additional","affiliation":[]},{"given":"I.","family":"Sykora","sequence":"additional","affiliation":[]},{"given":"M.","family":"Sykora","sequence":"additional","affiliation":[]},{"given":"T.","family":"Sykora","sequence":"additional","affiliation":[]},{"given":"D.","family":"Ta","sequence":"additional","affiliation":[]},{"given":"K.","family":"Tackmann","sequence":"additional","affiliation":[]},{"given":"J.","family":"Taenzer","sequence":"additional","affiliation":[]},{"given":"A.","family":"Taffard","sequence":"additional","affiliation":[]},{"given":"R.","family":"Tafirout","sequence":"additional","affiliation":[]},{"given":"H.","family":"Takai","sequence":"additional","affiliation":[]},{"given":"R.","family":"Takashima","sequence":"additional","affiliation":[]},{"given":"K.","family":"Takeda","sequence":"additional","affiliation":[]},{"given":"T.","family":"Takeshita","sequence":"additional","affiliation":[]},{"given":"E. P.","family":"Takeva","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Takubo","sequence":"additional","affiliation":[]},{"given":"M.","family":"Talby","sequence":"additional","affiliation":[]},{"given":"A. A.","family":"Talyshev","sequence":"additional","affiliation":[]},{"given":"N. M.","family":"Tamir","sequence":"additional","affiliation":[]},{"given":"J.","family":"Tanaka","sequence":"additional","affiliation":[]},{"given":"M.","family":"Tanaka","sequence":"additional","affiliation":[]},{"given":"R.","family":"Tanaka","sequence":"additional","affiliation":[]},{"given":"S.","family":"Tapia Araya","sequence":"additional","affiliation":[]},{"given":"S.","family":"Tapprogge","sequence":"additional","affiliation":[]},{"given":"A.","family":"Tarek Abouelfadl Mohamed","sequence":"additional","affiliation":[]},{"given":"S.","family":"Tarem","sequence":"additional","affiliation":[]},{"given":"K.","family":"Tariq","sequence":"additional","affiliation":[]},{"given":"G.","family":"Tarna","sequence":"additional","affiliation":[]},{"given":"G. F.","family":"Tartarelli","sequence":"additional","affiliation":[]},{"given":"P.","family":"Tas","sequence":"additional","affiliation":[]},{"given":"M.","family":"Tasevsky","sequence":"additional","affiliation":[]},{"given":"T.","family":"Tashiro","sequence":"additional","affiliation":[]},{"given":"E.","family":"Tassi","sequence":"additional","affiliation":[]},{"given":"A.","family":"Tavares Delgado","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Tayalati","sequence":"additional","affiliation":[]},{"given":"A. J.","family":"Taylor","sequence":"additional","affiliation":[]},{"given":"G. N.","family":"Taylor","sequence":"additional","affiliation":[]},{"given":"W.","family":"Taylor","sequence":"additional","affiliation":[]},{"given":"A. S.","family":"Tee","sequence":"additional","affiliation":[]},{"given":"R.","family":"Teixeira De Lima","sequence":"additional","affiliation":[]},{"given":"P.","family":"Teixeira-Dias","sequence":"additional","affiliation":[]},{"given":"H.","family":"Ten Kate","sequence":"additional","affiliation":[]},{"given":"J. J.","family":"Teoh","sequence":"additional","affiliation":[]},{"given":"S.","family":"Terada","sequence":"additional","affiliation":[]},{"given":"K.","family":"Terashi","sequence":"additional","affiliation":[]},{"given":"J.","family":"Terron","sequence":"additional","affiliation":[]},{"given":"S.","family":"Terzo","sequence":"additional","affiliation":[]},{"given":"M.","family":"Testa","sequence":"additional","affiliation":[]},{"given":"R. J.","family":"Teuscher","sequence":"additional","affiliation":[]},{"given":"S. J.","family":"Thais","sequence":"additional","affiliation":[]},{"given":"T.","family":"Theveneaux-Pelzer","sequence":"additional","affiliation":[]},{"given":"F.","family":"Thiele","sequence":"additional","affiliation":[]},{"given":"D. W.","family":"Thomas","sequence":"additional","affiliation":[]},{"given":"J. O.","family":"Thomas","sequence":"additional","affiliation":[]},{"given":"J. P.","family":"Thomas","sequence":"additional","affiliation":[]},{"given":"P. D.","family":"Thompson","sequence":"additional","affiliation":[]},{"given":"L. A.","family":"Thomsen","sequence":"additional","affiliation":[]},{"given":"E.","family":"Thomson","sequence":"additional","affiliation":[]},{"given":"E. J.","family":"Thorpe","sequence":"additional","affiliation":[]},{"given":"R. E.","family":"Ticse Torres","sequence":"additional","affiliation":[]},{"given":"V.","family":"Tikhomirov","sequence":"additional","affiliation":[]},{"given":"Yu. A.","family":"Tikhonov","sequence":"additional","affiliation":[]},{"given":"S.","family":"Timoshenko","sequence":"additional","affiliation":[]},{"given":"P.","family":"Tipton","sequence":"additional","affiliation":[]},{"given":"S.","family":"Tisserant","sequence":"additional","affiliation":[]},{"given":"K.","family":"Todome","sequence":"additional","affiliation":[]},{"given":"S.","family":"Todorova-Nova","sequence":"additional","affiliation":[]},{"given":"S.","family":"Todt","sequence":"additional","affiliation":[]},{"given":"J.","family":"Tojo","sequence":"additional","affiliation":[]},{"given":"S.","family":"Tok\u00e1r","sequence":"additional","affiliation":[]},{"given":"K.","family":"Tokushuku","sequence":"additional","affiliation":[]},{"given":"E.","family":"Tolley","sequence":"additional","affiliation":[]},{"given":"K. G.","family":"Tomiwa","sequence":"additional","affiliation":[]},{"given":"M.","family":"Tomoto","sequence":"additional","affiliation":[]},{"given":"L.","family":"Tompkins","sequence":"additional","affiliation":[]},{"given":"B.","family":"Tong","sequence":"additional","affiliation":[]},{"given":"P.","family":"Tornambe","sequence":"additional","affiliation":[]},{"given":"E.","family":"Torrence","sequence":"additional","affiliation":[]},{"given":"H.","family":"Torres","sequence":"additional","affiliation":[]},{"given":"E.","family":"Torr\u00f3 Pastor","sequence":"additional","affiliation":[]},{"given":"C.","family":"Tosciri","sequence":"additional","affiliation":[]},{"given":"J.","family":"Toth","sequence":"additional","affiliation":[]},{"given":"D. R.","family":"Tovey","sequence":"additional","affiliation":[]},{"given":"A.","family":"Traeet","sequence":"additional","affiliation":[]},{"given":"C. J.","family":"Treado","sequence":"additional","affiliation":[]},{"given":"T.","family":"Trefzger","sequence":"additional","affiliation":[]},{"given":"F.","family":"Tresoldi","sequence":"additional","affiliation":[]},{"given":"A.","family":"Tricoli","sequence":"additional","affiliation":[]},{"given":"I. M.","family":"Trigger","sequence":"additional","affiliation":[]},{"given":"S.","family":"Trincaz-Duvoid","sequence":"additional","affiliation":[]},{"given":"D. A.","family":"Trischuk","sequence":"additional","affiliation":[]},{"given":"W.","family":"Trischuk","sequence":"additional","affiliation":[]},{"given":"B.","family":"Trocm\u00e9","sequence":"additional","affiliation":[]},{"given":"A.","family":"Trofymov","sequence":"additional","affiliation":[]},{"given":"C.","family":"Troncon","sequence":"additional","affiliation":[]},{"given":"F.","family":"Trovato","sequence":"additional","affiliation":[]},{"given":"L.","family":"Truong","sequence":"additional","affiliation":[]},{"given":"M.","family":"Trzebinski","sequence":"additional","affiliation":[]},{"given":"A.","family":"Trzupek","sequence":"additional","affiliation":[]},{"given":"F.","family":"Tsai","sequence":"additional","affiliation":[]},{"given":"J. C-L.","family":"Tseng","sequence":"additional","affiliation":[]},{"given":"P. V.","family":"Tsiareshka","sequence":"additional","affiliation":[]},{"given":"A.","family":"Tsirigotis","sequence":"additional","affiliation":[]},{"given":"V.","family":"Tsiskaridze","sequence":"additional","affiliation":[]},{"given":"E. G.","family":"Tskhadadze","sequence":"additional","affiliation":[]},{"given":"M.","family":"Tsopoulou","sequence":"additional","affiliation":[]},{"given":"I. I.","family":"Tsukerman","sequence":"additional","affiliation":[]},{"given":"V.","family":"Tsulaia","sequence":"additional","affiliation":[]},{"given":"S.","family":"Tsuno","sequence":"additional","affiliation":[]},{"given":"D.","family":"Tsybychev","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Tu","sequence":"additional","affiliation":[]},{"given":"A.","family":"Tudorache","sequence":"additional","affiliation":[]},{"given":"V.","family":"Tudorache","sequence":"additional","affiliation":[]},{"given":"T. T.","family":"Tulbure","sequence":"additional","affiliation":[]},{"given":"A. N.","family":"Tuna","sequence":"additional","affiliation":[]},{"given":"S.","family":"Turchikhin","sequence":"additional","affiliation":[]},{"given":"D.","family":"Turgeman","sequence":"additional","affiliation":[]},{"given":"I. Turk","family":"Cakir","sequence":"additional","affiliation":[]},{"given":"R. J.","family":"Turner","sequence":"additional","affiliation":[]},{"given":"R.","family":"Turra","sequence":"additional","affiliation":[]},{"given":"P. M.","family":"Tuts","sequence":"additional","affiliation":[]},{"given":"S.","family":"Tzamarias","sequence":"additional","affiliation":[]},{"given":"E.","family":"Tzovara","sequence":"additional","affiliation":[]},{"given":"G.","family":"Ucchielli","sequence":"additional","affiliation":[]},{"given":"K.","family":"Uchida","sequence":"additional","affiliation":[]},{"given":"F.","family":"Ukegawa","sequence":"additional","affiliation":[]},{"given":"G.","family":"Unal","sequence":"additional","affiliation":[]},{"given":"A.","family":"Undrus","sequence":"additional","affiliation":[]},{"given":"G.","family":"Unel","sequence":"additional","affiliation":[]},{"given":"F. C.","family":"Ungaro","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Unno","sequence":"additional","affiliation":[]},{"given":"K.","family":"Uno","sequence":"additional","affiliation":[]},{"given":"J.","family":"Urban","sequence":"additional","affiliation":[]},{"given":"P.","family":"Urquijo","sequence":"additional","affiliation":[]},{"given":"G.","family":"Usai","sequence":"additional","affiliation":[]},{"given":"Z.","family":"Uysal","sequence":"additional","affiliation":[]},{"given":"V.","family":"Vacek","sequence":"additional","affiliation":[]},{"given":"B.","family":"Vachon","sequence":"additional","affiliation":[]},{"given":"K. O. H.","family":"Vadla","sequence":"additional","affiliation":[]},{"given":"A.","family":"Vaidya","sequence":"additional","affiliation":[]},{"given":"C.","family":"Valderanis","sequence":"additional","affiliation":[]},{"given":"E.","family":"Valdes Santurio","sequence":"additional","affiliation":[]},{"given":"M.","family":"Valente","sequence":"additional","affiliation":[]},{"given":"S.","family":"Valentinetti","sequence":"additional","affiliation":[]},{"given":"A.","family":"Valero","sequence":"additional","affiliation":[]},{"given":"L.","family":"Val\u00e9ry","sequence":"additional","affiliation":[]},{"given":"R. A.","family":"Vallance","sequence":"additional","affiliation":[]},{"given":"A.","family":"Vallier","sequence":"additional","affiliation":[]},{"given":"J. A.","family":"Valls Ferrer","sequence":"additional","affiliation":[]},{"given":"T. R.","family":"Van Daalen","sequence":"additional","affiliation":[]},{"given":"P.","family":"Van Gemmeren","sequence":"additional","affiliation":[]},{"given":"I.","family":"Van Vulpen","sequence":"additional","affiliation":[]},{"given":"M.","family":"Vanadia","sequence":"additional","affiliation":[]},{"given":"W.","family":"Vandelli","sequence":"additional","affiliation":[]},{"given":"M.","family":"Vandenbroucke","sequence":"additional","affiliation":[]},{"given":"E. R.","family":"Vandewall","sequence":"additional","affiliation":[]},{"given":"A.","family":"Vaniachine","sequence":"additional","affiliation":[]},{"given":"D.","family":"Vannicola","sequence":"additional","affiliation":[]},{"given":"R.","family":"Vari","sequence":"additional","affiliation":[]},{"given":"E. W.","family":"Varnes","sequence":"additional","affiliation":[]},{"given":"C.","family":"Varni","sequence":"additional","affiliation":[]},{"given":"T.","family":"Varol","sequence":"additional","affiliation":[]},{"given":"D.","family":"Varouchas","sequence":"additional","affiliation":[]},{"given":"K. E.","family":"Varvell","sequence":"additional","affiliation":[]},{"given":"M. E.","family":"Vasile","sequence":"additional","affiliation":[]},{"given":"G. A.","family":"Vasquez","sequence":"additional","affiliation":[]},{"given":"F.","family":"Vazeille","sequence":"additional","affiliation":[]},{"given":"D.","family":"Vazquez Furelos","sequence":"additional","affiliation":[]},{"given":"T.","family":"Vazquez Schroeder","sequence":"additional","affiliation":[]},{"given":"J.","family":"Veatch","sequence":"additional","affiliation":[]},{"given":"V.","family":"Vecchio","sequence":"additional","affiliation":[]},{"given":"M. J.","family":"Veen","sequence":"additional","affiliation":[]},{"given":"L. M.","family":"Veloce","sequence":"additional","affiliation":[]},{"given":"F.","family":"Veloso","sequence":"additional","affiliation":[]},{"given":"S.","family":"Veneziano","sequence":"additional","affiliation":[]},{"given":"A.","family":"Ventura","sequence":"additional","affiliation":[]},{"given":"N.","family":"Venturi","sequence":"additional","affiliation":[]},{"given":"A.","family":"Verbytskyi","sequence":"additional","affiliation":[]},{"given":"V.","family":"Vercesi","sequence":"additional","affiliation":[]},{"given":"M.","family":"Verducci","sequence":"additional","affiliation":[]},{"given":"C. M.","family":"Vergel Infante","sequence":"additional","affiliation":[]},{"given":"C.","family":"Vergis","sequence":"additional","affiliation":[]},{"given":"W.","family":"Verkerke","sequence":"additional","affiliation":[]},{"given":"A. T.","family":"Vermeulen","sequence":"additional","affiliation":[]},{"given":"J. C.","family":"Vermeulen","sequence":"additional","affiliation":[]},{"given":"M. C.","family":"Vetterli","sequence":"additional","affiliation":[]},{"given":"N.","family":"Viaux Maira","sequence":"additional","affiliation":[]},{"given":"M. Vicente","family":"Barreto Pinto","sequence":"additional","affiliation":[]},{"given":"T.","family":"Vickey","sequence":"additional","affiliation":[]},{"given":"O. E. Vickey","family":"Boeriu","sequence":"additional","affiliation":[]},{"given":"G. H. A.","family":"Viehhauser","sequence":"additional","affiliation":[]},{"given":"L.","family":"Vigani","sequence":"additional","affiliation":[]},{"given":"M.","family":"Villa","sequence":"additional","affiliation":[]},{"given":"M.","family":"Villaplana Perez","sequence":"additional","affiliation":[]},{"given":"E.","family":"Vilucchi","sequence":"additional","affiliation":[]},{"given":"M. G.","family":"Vincter","sequence":"additional","affiliation":[]},{"given":"G. S.","family":"Virdee","sequence":"additional","affiliation":[]},{"given":"A.","family":"Vishwakarma","sequence":"additional","affiliation":[]},{"given":"C.","family":"Vittori","sequence":"additional","affiliation":[]},{"given":"I.","family":"Vivarelli","sequence":"additional","affiliation":[]},{"given":"M.","family":"Vogel","sequence":"additional","affiliation":[]},{"given":"P.","family":"Vokac","sequence":"additional","affiliation":[]},{"given":"S. E.","family":"von Buddenbrock","sequence":"additional","affiliation":[]},{"given":"E.","family":"Von Toerne","sequence":"additional","affiliation":[]},{"given":"V.","family":"Vorobel","sequence":"additional","affiliation":[]},{"given":"K.","family":"Vorobev","sequence":"additional","affiliation":[]},{"given":"M.","family":"Vos","sequence":"additional","affiliation":[]},{"given":"J. H.","family":"Vossebeld","sequence":"additional","affiliation":[]},{"given":"M.","family":"Vozak","sequence":"additional","affiliation":[]},{"given":"N.","family":"Vranjes","sequence":"additional","affiliation":[]},{"given":"M. Vranjes","family":"Milosavljevic","sequence":"additional","affiliation":[]},{"given":"V.","family":"Vrba","sequence":"additional","affiliation":[]},{"given":"M.","family":"Vreeswijk","sequence":"additional","affiliation":[]},{"given":"R.","family":"Vuillermet","sequence":"additional","affiliation":[]},{"given":"I.","family":"Vukotic","sequence":"additional","affiliation":[]},{"given":"P.","family":"Wagner","sequence":"additional","affiliation":[]},{"given":"W.","family":"Wagner","sequence":"additional","affiliation":[]},{"given":"J.","family":"Wagner-Kuhr","sequence":"additional","affiliation":[]},{"given":"S.","family":"Wahdan","sequence":"additional","affiliation":[]},{"given":"H.","family":"Wahlberg","sequence":"additional","affiliation":[]},{"given":"V. M.","family":"Walbrecht","sequence":"additional","affiliation":[]},{"given":"J.","family":"Walder","sequence":"additional","affiliation":[]},{"given":"R.","family":"Walker","sequence":"additional","affiliation":[]},{"given":"S. D.","family":"Walker","sequence":"additional","affiliation":[]},{"given":"W.","family":"Walkowiak","sequence":"additional","affiliation":[]},{"given":"V.","family":"Wallangen","sequence":"additional","affiliation":[]},{"given":"A. M.","family":"Wang","sequence":"additional","affiliation":[]},{"given":"A. Z.","family":"Wang","sequence":"additional","affiliation":[]},{"given":"C.","family":"Wang","sequence":"additional","affiliation":[]},{"given":"F.","family":"Wang","sequence":"additional","affiliation":[]},{"given":"H.","family":"Wang","sequence":"additional","affiliation":[]},{"given":"H.","family":"Wang","sequence":"additional","affiliation":[]},{"given":"J.","family":"Wang","sequence":"additional","affiliation":[]},{"given":"J.","family":"Wang","sequence":"additional","affiliation":[]},{"given":"P.","family":"Wang","sequence":"additional","affiliation":[]},{"given":"Q.","family":"Wang","sequence":"additional","affiliation":[]},{"given":"R.-J.","family":"Wang","sequence":"additional","affiliation":[]},{"given":"R.","family":"Wang","sequence":"additional","affiliation":[]},{"given":"R.","family":"Wang","sequence":"additional","affiliation":[]},{"given":"S. M.","family":"Wang","sequence":"additional","affiliation":[]},{"given":"W. T.","family":"Wang","sequence":"additional","affiliation":[]},{"given":"W. X.","family":"Wang","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Wang","sequence":"additional","affiliation":[]},{"given":"Z.","family":"Wang","sequence":"additional","affiliation":[]},{"given":"C.","family":"Wanotayaroj","sequence":"additional","affiliation":[]},{"given":"A.","family":"Warburton","sequence":"additional","affiliation":[]},{"given":"C. P.","family":"Ward","sequence":"additional","affiliation":[]},{"given":"D. R.","family":"Wardrope","sequence":"additional","affiliation":[]},{"given":"N.","family":"Warrack","sequence":"additional","affiliation":[]},{"given":"A.","family":"Washbrook","sequence":"additional","affiliation":[]},{"given":"A. T.","family":"Watson","sequence":"additional","affiliation":[]},{"given":"M. F.","family":"Watson","sequence":"additional","affiliation":[]},{"given":"G.","family":"Watts","sequence":"additional","affiliation":[]},{"given":"B. M.","family":"Waugh","sequence":"additional","affiliation":[]},{"given":"A. F.","family":"Webb","sequence":"additional","affiliation":[]},{"given":"C.","family":"Weber","sequence":"additional","affiliation":[]},{"given":"M. S.","family":"Weber","sequence":"additional","affiliation":[]},{"given":"S. A.","family":"Weber","sequence":"additional","affiliation":[]},{"given":"S. M.","family":"Weber","sequence":"additional","affiliation":[]},{"given":"A. R.","family":"Weidberg","sequence":"additional","affiliation":[]},{"given":"J.","family":"Weingarten","sequence":"additional","affiliation":[]},{"given":"M.","family":"Weirich","sequence":"additional","affiliation":[]},{"given":"C.","family":"Weiser","sequence":"additional","affiliation":[]},{"given":"P. S.","family":"Wells","sequence":"additional","affiliation":[]},{"given":"T.","family":"Wenaus","sequence":"additional","affiliation":[]},{"given":"T.","family":"Wengler","sequence":"additional","affiliation":[]},{"given":"S.","family":"Wenig","sequence":"additional","affiliation":[]},{"given":"N.","family":"Wermes","sequence":"additional","affiliation":[]},{"given":"M. D.","family":"Werner","sequence":"additional","affiliation":[]},{"given":"M.","family":"Wessels","sequence":"additional","affiliation":[]},{"given":"T. D.","family":"Weston","sequence":"additional","affiliation":[]},{"given":"K.","family":"Whalen","sequence":"additional","affiliation":[]},{"given":"N. L.","family":"Whallon","sequence":"additional","affiliation":[]},{"given":"A. M.","family":"Wharton","sequence":"additional","affiliation":[]},{"given":"A. S.","family":"White","sequence":"additional","affiliation":[]},{"given":"A.","family":"White","sequence":"additional","affiliation":[]},{"given":"M. J.","family":"White","sequence":"additional","affiliation":[]},{"given":"D.","family":"Whiteson","sequence":"additional","affiliation":[]},{"given":"B. W.","family":"Whitmore","sequence":"additional","affiliation":[]},{"given":"W.","family":"Wiedenmann","sequence":"additional","affiliation":[]},{"given":"C.","family":"Wiel","sequence":"additional","affiliation":[]},{"given":"M.","family":"Wielers","sequence":"additional","affiliation":[]},{"given":"N.","family":"Wieseotte","sequence":"additional","affiliation":[]},{"given":"C.","family":"Wiglesworth","sequence":"additional","affiliation":[]},{"given":"L. A. M.","family":"Wiik-Fuchs","sequence":"additional","affiliation":[]},{"given":"H. G.","family":"Wilkens","sequence":"additional","affiliation":[]},{"given":"L. J.","family":"Wilkins","sequence":"additional","affiliation":[]},{"given":"H. H.","family":"Williams","sequence":"additional","affiliation":[]},{"given":"S.","family":"Williams","sequence":"additional","affiliation":[]},{"given":"C.","family":"Willis","sequence":"additional","affiliation":[]},{"given":"S.","family":"Willocq","sequence":"additional","affiliation":[]},{"given":"I.","family":"Wingerter-Seez","sequence":"additional","affiliation":[]},{"given":"E.","family":"Winkels","sequence":"additional","affiliation":[]},{"given":"F.","family":"Winklmeier","sequence":"additional","affiliation":[]},{"given":"O. J.","family":"Winston","sequence":"additional","affiliation":[]},{"given":"B. T.","family":"Winter","sequence":"additional","affiliation":[]},{"given":"M.","family":"Wittgen","sequence":"additional","affiliation":[]},{"given":"M.","family":"Wobisch","sequence":"additional","affiliation":[]},{"given":"A.","family":"Wolf","sequence":"additional","affiliation":[]},{"given":"T. M. H.","family":"Wolf","sequence":"additional","affiliation":[]},{"given":"R.","family":"Wolff","sequence":"additional","affiliation":[]},{"given":"R.","family":"W\u00f6lker","sequence":"additional","affiliation":[]},{"given":"J.","family":"Wollrath","sequence":"additional","affiliation":[]},{"given":"M. W.","family":"Wolter","sequence":"additional","affiliation":[]},{"given":"H.","family":"Wolters","sequence":"additional","affiliation":[]},{"given":"V. W. S.","family":"Wong","sequence":"additional","affiliation":[]},{"given":"N. L.","family":"Woods","sequence":"additional","affiliation":[]},{"given":"S. D.","family":"Worm","sequence":"additional","affiliation":[]},{"given":"B. K.","family":"Wosiek","sequence":"additional","affiliation":[]},{"given":"K. W.","family":"Wo\u017aniak","sequence":"additional","affiliation":[]},{"given":"K.","family":"Wraight","sequence":"additional","affiliation":[]},{"given":"S. L.","family":"Wu","sequence":"additional","affiliation":[]},{"given":"X.","family":"Wu","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Wu","sequence":"additional","affiliation":[]},{"given":"T. R.","family":"Wyatt","sequence":"additional","affiliation":[]},{"given":"B. M.","family":"Wynne","sequence":"additional","affiliation":[]},{"given":"S.","family":"Xella","sequence":"additional","affiliation":[]},{"given":"Z.","family":"Xi","sequence":"additional","affiliation":[]},{"given":"X.","family":"Xiao","sequence":"additional","affiliation":[]},{"given":"I.","family":"Xiotidis","sequence":"additional","affiliation":[]},{"given":"D.","family":"Xu","sequence":"additional","affiliation":[]},{"given":"H.","family":"Xu","sequence":"additional","affiliation":[]},{"given":"L.","family":"Xu","sequence":"additional","affiliation":[]},{"given":"T.","family":"Xu","sequence":"additional","affiliation":[]},{"given":"W.","family":"Xu","sequence":"additional","affiliation":[]},{"given":"Z.","family":"Xu","sequence":"additional","affiliation":[]},{"given":"Z.","family":"Xu","sequence":"additional","affiliation":[]},{"given":"B.","family":"Yabsley","sequence":"additional","affiliation":[]},{"given":"S.","family":"Yacoob","sequence":"additional","affiliation":[]},{"given":"K.","family":"Yajima","sequence":"additional","affiliation":[]},{"given":"D. P.","family":"Yallup","sequence":"additional","affiliation":[]},{"given":"N.","family":"Yamaguchi","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Yamaguchi","sequence":"additional","affiliation":[]},{"given":"A.","family":"Yamamoto","sequence":"additional","affiliation":[]},{"given":"M.","family":"Yamatani","sequence":"additional","affiliation":[]},{"given":"T.","family":"Yamazaki","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Yamazaki","sequence":"additional","affiliation":[]},{"given":"J.","family":"Yan","sequence":"additional","affiliation":[]},{"given":"Z.","family":"Yan","sequence":"additional","affiliation":[]},{"given":"H. J.","family":"Yang","sequence":"additional","affiliation":[]},{"given":"H. T.","family":"Yang","sequence":"additional","affiliation":[]},{"given":"S.","family":"Yang","sequence":"additional","affiliation":[]},{"given":"T.","family":"Yang","sequence":"additional","affiliation":[]},{"given":"X.","family":"Yang","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Yang","sequence":"additional","affiliation":[]},{"given":"W-M.","family":"Yao","sequence":"additional","affiliation":[]},{"given":"Y. C.","family":"Yap","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Yasu","sequence":"additional","affiliation":[]},{"given":"E.","family":"Yatsenko","sequence":"additional","affiliation":[]},{"given":"H.","family":"Ye","sequence":"additional","affiliation":[]},{"given":"J.","family":"Ye","sequence":"additional","affiliation":[]},{"given":"S.","family":"Ye","sequence":"additional","affiliation":[]},{"given":"I.","family":"Yeletskikh","sequence":"additional","affiliation":[]},{"given":"M. R.","family":"Yexley","sequence":"additional","affiliation":[]},{"given":"E.","family":"Yigitbasi","sequence":"additional","affiliation":[]},{"given":"K.","family":"Yorita","sequence":"additional","affiliation":[]},{"given":"K.","family":"Yoshihara","sequence":"additional","affiliation":[]},{"given":"C. J. S.","family":"Young","sequence":"additional","affiliation":[]},{"given":"C.","family":"Young","sequence":"additional","affiliation":[]},{"given":"J.","family":"Yu","sequence":"additional","affiliation":[]},{"given":"R.","family":"Yuan","sequence":"additional","affiliation":[]},{"given":"X.","family":"Yue","sequence":"additional","affiliation":[]},{"given":"M.","family":"Zaazoua","sequence":"additional","affiliation":[]},{"given":"B.","family":"Zabinski","sequence":"additional","affiliation":[]},{"given":"G.","family":"Zacharis","sequence":"additional","affiliation":[]},{"given":"E.","family":"Zaffaroni","sequence":"additional","affiliation":[]},{"given":"A. M.","family":"Zaitsev","sequence":"additional","affiliation":[]},{"given":"T.","family":"Zakareishvili","sequence":"additional","affiliation":[]},{"given":"N.","family":"Zakharchuk","sequence":"additional","affiliation":[]},{"given":"S.","family":"Zambito","sequence":"additional","affiliation":[]},{"given":"D.","family":"Zanzi","sequence":"additional","affiliation":[]},{"given":"D. R.","family":"Zaripovas","sequence":"additional","affiliation":[]},{"given":"S. V.","family":"Zei\u00dfner","sequence":"additional","affiliation":[]},{"given":"C.","family":"Zeitnitz","sequence":"additional","affiliation":[]},{"given":"G.","family":"Zemaityte","sequence":"additional","affiliation":[]},{"given":"J. C.","family":"Zeng","sequence":"additional","affiliation":[]},{"given":"O.","family":"Zenin","sequence":"additional","affiliation":[]},{"given":"T.","family":"\u017deni\u0161","sequence":"additional","affiliation":[]},{"given":"D.","family":"Zerwas","sequence":"additional","affiliation":[]},{"given":"M.","family":"Zgubi\u010d","sequence":"additional","affiliation":[]},{"given":"B.","family":"Zhang","sequence":"additional","affiliation":[]},{"given":"D. F.","family":"Zhang","sequence":"additional","affiliation":[]},{"given":"G.","family":"Zhang","sequence":"additional","affiliation":[]},{"given":"H.","family":"Zhang","sequence":"additional","affiliation":[]},{"given":"J.","family":"Zhang","sequence":"additional","affiliation":[]},{"given":"L.","family":"Zhang","sequence":"additional","affiliation":[]},{"given":"L.","family":"Zhang","sequence":"additional","affiliation":[]},{"given":"M.","family":"Zhang","sequence":"additional","affiliation":[]},{"given":"R.","family":"Zhang","sequence":"additional","affiliation":[]},{"given":"S.","family":"Zhang","sequence":"additional","affiliation":[]},{"given":"X.","family":"Zhang","sequence":"additional","affiliation":[]},{"given":"X.","family":"Zhang","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Zhang","sequence":"additional","affiliation":[]},{"given":"Z.","family":"Zhang","sequence":"additional","affiliation":[]},{"given":"Z.","family":"Zhang","sequence":"additional","affiliation":[]},{"given":"P.","family":"Zhao","sequence":"additional","affiliation":[]},{"given":"Z.","family":"Zhao","sequence":"additional","affiliation":[]},{"given":"A.","family":"Zhemchugov","sequence":"additional","affiliation":[]},{"given":"Z.","family":"Zheng","sequence":"additional","affiliation":[]},{"given":"D.","family":"Zhong","sequence":"additional","affiliation":[]},{"given":"B.","family":"Zhou","sequence":"additional","affiliation":[]},{"given":"C.","family":"Zhou","sequence":"additional","affiliation":[]},{"given":"M. S.","family":"Zhou","sequence":"additional","affiliation":[]},{"given":"M.","family":"Zhou","sequence":"additional","affiliation":[]},{"given":"N.","family":"Zhou","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Zhou","sequence":"additional","affiliation":[]},{"given":"C. G.","family":"Zhu","sequence":"additional","affiliation":[]},{"given":"C.","family":"Zhu","sequence":"additional","affiliation":[]},{"given":"H. L.","family":"Zhu","sequence":"additional","affiliation":[]},{"given":"H.","family":"Zhu","sequence":"additional","affiliation":[]},{"given":"J.","family":"Zhu","sequence":"additional","affiliation":[]},{"given":"Y.","family":"Zhu","sequence":"additional","affiliation":[]},{"given":"X.","family":"Zhuang","sequence":"additional","affiliation":[]},{"given":"K.","family":"Zhukov","sequence":"additional","affiliation":[]},{"given":"V.","family":"Zhulanov","sequence":"additional","affiliation":[]},{"given":"D.","family":"Zieminska","sequence":"additional","affiliation":[]},{"given":"N. I.","family":"Zimine","sequence":"additional","affiliation":[]},{"given":"S.","family":"Zimmermann","sequence":"additional","affiliation":[]},{"given":"Z.","family":"Zinonos","sequence":"additional","affiliation":[]},{"given":"M.","family":"Ziolkowski","sequence":"additional","affiliation":[]},{"given":"L.","family":"\u017divkovi\u0107","sequence":"additional","affiliation":[]},{"given":"G.","family":"Zobernig","sequence":"additional","affiliation":[]},{"given":"A.","family":"Zoccoli","sequence":"additional","affiliation":[]},{"given":"K.","family":"Zoch","sequence":"additional","affiliation":[]},{"given":"T. G.","family":"Zorbas","sequence":"additional","affiliation":[]},{"given":"R.","family":"Zou","sequence":"additional","affiliation":[]},{"given":"L.","family":"Zwalinski","sequence":"additional","affiliation":[]}],"member":"297","published-online":{"date-parts":[[2023,2,9]]},"reference":[{"key":"1757_CR1","doi-asserted-by":"publisher","first-page":"1","DOI":"10.1016\/j.physletb.2012.08.020","volume":"716","author":"ATLAS Collaboration.","year":"2012","unstructured":"ATLAS Collaboration. Observation of a new particle in the search for the Standard Model Higgs boson with the ATLAS detector at the LHC. Phys. Lett. B 716, 1\u201329 (2012).","journal-title":"Phys. Lett. B"},{"key":"1757_CR2","doi-asserted-by":"publisher","first-page":"30","DOI":"10.1016\/j.physletb.2012.08.021","volume":"716","author":"CMS Collaboration.","year":"2012","unstructured":"CMS Collaboration. Observation of a new boson at a mass of 125\u2009GeV with the CMS experiment at the LHC. Phys. Lett. B 716, 30\u201361 (2012).","journal-title":"Phys. Lett. B"},{"key":"1757_CR3","doi-asserted-by":"publisher","first-page":"883","DOI":"10.1103\/PhysRevLett.38.883","volume":"38","author":"BW Lee","year":"1977","unstructured":"Lee, B. W., Quigg, C. & Thacker, H. B. Strength of weak interactions at very high energies and the Higgs boson mass. Phys. Rev. Lett. 38, 883\u2013885 (1977).","journal-title":"Phys. Rev. Lett."},{"key":"1757_CR4","doi-asserted-by":"publisher","first-page":"379","DOI":"10.1016\/0550-3213(85)90580-2","volume":"261","author":"MS Chanowitz","year":"1985","unstructured":"Chanowitz, M. S. & Gaillard, M. K. The TeV physics of strongly interacting W\u2019s and Z\u2019s. Nucl. Phys. B 261, 379\u2013431 (1985).","journal-title":"Nucl. Phys. B"},{"key":"1757_CR5","unstructured":"Szleper, M. The Higgs boson and the physics of WW scattering before and after Higgs discovery. Preprint at https:\/\/arxiv.org\/abs\/1412.8367 (2014)."},{"key":"1757_CR6","doi-asserted-by":"publisher","first-page":"081","DOI":"10.1007\/JHEP10(2011)081","volume":"10","author":"R Contino","year":"2011","unstructured":"Contino, R., Pappadopulo, D., Marzocca, D. & Rattazzi, R. On the effect of resonances in composite Higgs phenomenology. J. High Energy Phys. 10, 081 (2011).","journal-title":"J. High Energy Phys."},{"key":"1757_CR7","doi-asserted-by":"publisher","first-page":"034","DOI":"10.1088\/1126-6708\/2002\/07\/034","volume":"07","author":"N Arkani-Hamed","year":"2002","unstructured":"Arkani-Hamed, N., Cohen, A. G., Katz, E. & Nelson, A. E. The littlest Higgs. J. High Energy Phys. 07, 034 (2002).","journal-title":"J. High Energy Phys."},{"key":"1757_CR8","doi-asserted-by":"publisher","DOI":"10.1140\/epjc\/s10052-013-2704-3","volume":"74","author":"A Djouadi","year":"2014","unstructured":"Djouadi, A. Implications of the Higgs discovery for the MSSM. Eur. Phys. J. C 74, 2704 (2014).","journal-title":"Eur. Phys. J. C"},{"key":"1757_CR9","doi-asserted-by":"publisher","first-page":"073005","DOI":"10.1103\/PhysRevD.74.073005","volume":"74","author":"OJP Eboli","year":"2006","unstructured":"Eboli, O. J. P., Gonzalez-Garcia, M. C. & Mizukoshi, J. K. pp\u2009\u2192\u2009jje\u00b1\u03bc\u00b1\u03bd\u03bd and jje\u00b1\u03bc\u2213\u03bd\u03bd at $$O({\\alpha }_{em}^{6})$$ and $$O({\\alpha }_{em}^{6})$$ for the study of the quartic electroweak gauge boson vertex at CERN LHC. Phys. Rev. D 74, 073005 (2006).","journal-title":"Phys. Rev. D"},{"key":"1757_CR10","doi-asserted-by":"publisher","first-page":"39","DOI":"10.1007\/JHEP05(2022)039","volume":"2022","author":"R Bellan","year":"2022","unstructured":"Bellan, R. et al. A sensitivity study of VBS and diboson WW to dimension-6 EFT operators at the LHC. J. High Energy Phys. 2022, 39 (2022).","journal-title":"J. High Energy Phys."},{"key":"1757_CR11","doi-asserted-by":"publisher","first-page":"389","DOI":"10.1140\/epjc\/s10052-019-6893-2","volume":"79","author":"R Gomez-Ambrosio","year":"2019","unstructured":"Gomez-Ambrosio, R. Studies of dimension-six EFT effects in vector boson scattering. Eur. Phys. J. C 79, 389 (2019).","journal-title":"Eur. Phys. J. C"},{"key":"1757_CR12","doi-asserted-by":"publisher","first-page":"161801","DOI":"10.1103\/PhysRevLett.123.161801","volume":"123","author":"ATLAS Collaboration.","year":"2019","unstructured":"ATLAS Collaboration. Observation of electroweak production of a same-sign W boson pair in association with two jets in pp collisions at $$\\sqrt{s}=13$$ TeV with the ATLAS detector. Phys. Rev. Lett. 123, 161801 (2019).","journal-title":"Phys. Rev. Lett."},{"key":"1757_CR13","doi-asserted-by":"publisher","first-page":"469","DOI":"10.1016\/j.physletb.2019.05.012","volume":"793","author":"ATLAS Collaboration.","year":"2019","unstructured":"ATLAS Collaboration. Observation of electroweak W\u00b1Z boson pair production in association with two jets in pp collisions at $$\\sqrt{s}=$$ 13 TeV with the ATLAS detector. Phys. Lett. B 793, 469\u2013492 (2019).","journal-title":"Phys. Lett. B"},{"key":"1757_CR14","doi-asserted-by":"publisher","first-page":"081801","DOI":"10.1103\/PhysRevLett.120.081801","volume":"120","author":"CMS Collaboration.","year":"2018","unstructured":"CMS Collaboration. Observation of electroweak production of same-sign W boson pairs in the two jet and two same-sign lepton final state in proton\u2013proton collisions at $$\\sqrt{s}=$$ 13 TeV. Phys. Rev. Lett. 120, 081801 (2018).","journal-title":"Phys. Rev. Lett."},{"key":"1757_CR15","unstructured":"CMS Collaboration. Measurements of production cross sections of WZ and same-sign WW boson pairs in association with two jets in proton\u2013proton collisions at $$\\sqrt{s}=$$ 13 TeV. Phys. Lett. B 809, 135710 (2020)."},{"key":"1757_CR16","doi-asserted-by":"publisher","first-page":"135992","DOI":"10.1016\/j.physletb.2020.135992","volume":"812","author":"CMS Collaboration.","year":"2021","unstructured":"CMS Collaboration. Evidence for electroweak production of four charged leptons and two jets in proton\u2013proton collisions at $$\\sqrt{s}=13\\,{{{\\rm{TeV}}}}$$. Phys. Lett. B 812, 135992 (2021).","journal-title":"Phys. Lett. B"},{"key":"1757_CR17","doi-asserted-by":"publisher","first-page":"053003","DOI":"10.1103\/PhysRevD.90.053003","volume":"90","author":"C Englert","year":"2014","unstructured":"Englert, C. & Spannowsky, M. Limitations and opportunities of off-shell coupling measurements. Phys. Rev. D 90, 053003 (2014).","journal-title":"Phys. Rev. D"},{"key":"1757_CR18","unstructured":"ATLAS Collaboration. The ATLAS experiment at the CERN Large Hadron Collider. J. Instrum. 3, S08003 (2008)."},{"key":"1757_CR19","unstructured":"ATLAS Collaboration. ATLAS insertable B-layer technical design report, ATLAS-TDR-19. CERN https:\/\/cds.cern.ch\/record\/1291633 (2010)."},{"key":"1757_CR20","doi-asserted-by":"publisher","first-page":"T05008","DOI":"10.1088\/1748-0221\/13\/05\/T05008","volume":"13","author":"B Abbott","year":"2018","unstructured":"Abbott, B. et al. Production and integration of the ATLAS Insertable B-Layer. J. Instrum. 13, T05008 (2018).","journal-title":"J. Instrum."},{"key":"1757_CR21","doi-asserted-by":"publisher","DOI":"10.1140\/epjc\/s10052-017-4852-3","volume":"77","author":"ATLAS Collaboration.","year":"2017","unstructured":"ATLAS Collaboration. Performance of the ATLAS trigger system in 2015. Eur. Phys. J. C 77, 317 (2017).","journal-title":"Eur. Phys. J. C"},{"key":"1757_CR22","doi-asserted-by":"publisher","first-page":"141","DOI":"10.1007\/JHEP03(2014)141","volume":"2014","author":"B J\u00e4ger","year":"2014","unstructured":"J\u00e4ger, B., Karlberg, A. & Zanderighi, G. Electroweak ZZjj production in the Standard Model and beyond in the POWHEG-BOX V2. J. High Energy Phys. 2014, 141 (2014).","journal-title":"J. High Energy Phys."},{"key":"1757_CR23","doi-asserted-by":"publisher","first-page":"040","DOI":"10.1007\/JHEP04(2015)040","volume":"04","author":"RD Ball","year":"2015","unstructured":"Ball, R. D. et al. Parton distributions for the LHC run II. J. High Energy Phys. 04, 040 (2015).","journal-title":"J. High Energy Phys."},{"key":"1757_CR24","doi-asserted-by":"publisher","first-page":"079","DOI":"10.1007\/JHEP07(2014)079","volume":"07","author":"J Alwall","year":"2014","unstructured":"Alwall, J. et al. The automated computation of tree-level and next-to-leading order differential cross sections, and their matching to parton shower simulations. J. High Energy Phys. 07, 079 (2014).","journal-title":"J. High Energy Phys."},{"key":"1757_CR25","doi-asserted-by":"publisher","first-page":"007","DOI":"10.1088\/1126-6708\/2009\/02\/007","volume":"02","author":"T Gleisberg","year":"2009","unstructured":"Gleisberg, T. et al. Event generation with SHERPA 1.1. J. High Energy Phys. 02, 007 (2009).","journal-title":"J. High Energy Phys."},{"key":"1757_CR26","doi-asserted-by":"publisher","first-page":"082","DOI":"10.1007\/JHEP12(2013)082","volume":"12","author":"N Kauer","year":"2013","unstructured":"Kauer, N. Interference effects for H\u2009\u2192\u2009WW\/ZZ $$\\to \\ell {\\overline{\\nu }}_{\\ell }\\overline{\\ell }{\\nu }_{\\ell }$$ searches in gluon fusion at the LHC. J. High Energy Phys. 12, 082, (2013).","journal-title":"J. High Energy Phys."},{"key":"1757_CR27","doi-asserted-by":"publisher","first-page":"033009","DOI":"10.1103\/PhysRevD.89.033009","volume":"89","author":"J Gao","year":"2014","unstructured":"Gao, J. et al. CT10 next-to-next-to-leading order global analysis of QCD. Phys. Rev. D 89, 033009 (2014).","journal-title":"Phys. Rev. D"},{"key":"1757_CR28","doi-asserted-by":"publisher","first-page":"126","DOI":"10.1088\/1126-6708\/2007\/09\/126","volume":"09","author":"S Frixione","year":"2007","unstructured":"Frixione, S., Ridolfi, G. & Nason, P. A positive-weight next-to-leading-order Monte Carlo for heavy flavour hadroproduction. J. High Energy Phys. 09, 126 (2007).","journal-title":"J. High Energy Phys."},{"key":"1757_CR29","doi-asserted-by":"publisher","first-page":"111","DOI":"10.1088\/1126-6708\/2009\/09\/111","volume":"09","author":"S Alioli","year":"2009","unstructured":"Alioli, S., Nason, P., Oleari, C. & Re, E. NLO single-top production matched with shower in POWHEG: s- and t-channel contributions. J. High Energy Phys. 09, 111 (2009).","journal-title":"J. High Energy Phys."},{"key":"1757_CR30","doi-asserted-by":"publisher","first-page":"130","DOI":"10.1007\/JHEP09(2012)130","volume":"09","author":"R Frederix","year":"2012","unstructured":"Frederix, R., Re, E. & Torrielli, P. Single-top t-channel hadroproduction in the four-flavour scheme with POWHEG and aMC@NLO. J. High Energy Phys. 09, 130 (2012).","journal-title":"J. High Energy Phys."},{"key":"1757_CR31","doi-asserted-by":"publisher","DOI":"10.1140\/epjc\/s10052-011-1547-z","volume":"71","author":"E Re","year":"2011","unstructured":"Re, E. Single-top Wt-channel production matched with parton showers using the POWHEG method. Eur. Phys. J. C 71, 1547 (2011).","journal-title":"Eur. Phys. J. C"},{"key":"1757_CR32","doi-asserted-by":"publisher","first-page":"852","DOI":"10.1016\/j.cpc.2008.01.036","volume":"178","author":"T Sj\u00f6strand","year":"2008","unstructured":"Sj\u00f6strand, T., Mrenna, S. & Skands, P. Z. A brief introduction to PYTHIA 8.1. Comput. Phys. Commun. 178, 852\u2013867 (2008).","journal-title":"Comput. Phys. Commun."},{"key":"1757_CR33","doi-asserted-by":"publisher","first-page":"244","DOI":"10.1016\/j.nuclphysb.2012.10.003","volume":"867","author":"RD Ball","year":"2013","unstructured":"Ball, R. D. et al. Parton distributions with LHC data. Nucl. Phys. B 867, 244\u2013289 (2013).","journal-title":"Nucl. Phys. B"},{"key":"1757_CR34","unstructured":"ATLAS Collaboration. ATLAS Pythia 8 tunes to 7\u2009TeV data, ATL-PHYS-PUB-2014-021 CERN https:\/\/cds.cern.ch\/record\/1966419 (2014)."},{"key":"1757_CR35","doi-asserted-by":"publisher","DOI":"10.1140\/epjc\/s10052-010-1429-9","volume":"70","author":"ATLAS Collaboration.","year":"2010","unstructured":"ATLAS Collaboration. The ATLAS simulation infrastructure. Eur. Phys. J. C 70, 823 (2010).","journal-title":"Eur. Phys. J. C"},{"key":"1757_CR36","doi-asserted-by":"publisher","first-page":"250","DOI":"10.1016\/S0168-9002(03)01368-8","volume":"506","author":"S Agostinelli","year":"2003","unstructured":"Agostinelli, S. et al. Geant4\u2014a simulation toolkit. Nucl. Instrum. Methods A 506, 250\u2013303 (2003).","journal-title":"Nucl. Instrum. Methods A"},{"key":"1757_CR37","doi-asserted-by":"publisher","first-page":"3","DOI":"10.1007\/s41781-021-00062-2","volume":"6","author":"G Aad","year":"2022","unstructured":"Aad, G. et al. Emulating the impact of additional proton-proton interactions in the ATLAS simulation by presampling sets of inelastic Monte Carlo events. Comput. Softw. Big Sci. 6, 3 (2022).","journal-title":"Comput. Softw. Big Sci."},{"key":"1757_CR38","doi-asserted-by":"publisher","DOI":"10.1140\/epjc\/s10052-016-4120-y","volume":"76","author":"ATLAS Collaboration.","year":"2016","unstructured":"ATLAS Collaboration. Muon reconstruction performance of the ATLAS detector in proton\u2013proton collision data at $$\\sqrt{s}=13\\,{{{\\rm{TeV}}}}$$. Eur. Phys. J. C 76, 292 (2016).","journal-title":"Eur. Phys. J. C"},{"key":"1757_CR39","doi-asserted-by":"publisher","DOI":"10.1140\/epjc\/s10052-019-7140-6","volume":"79","author":"ATLAS Collaboration.","year":"2019","unstructured":"ATLAS Collaboration. Electron reconstruction and identification in the ATLAS experiment using the 2015 and 2016 LHC proton\u2013proton collision data at$$\\sqrt{s}$$ = 13\u2009TeV. Eur. Phys. J. C 79, 639 (2019).","journal-title":"Eur. Phys. J. C"},{"key":"1757_CR40","doi-asserted-by":"publisher","first-page":"063","DOI":"10.1088\/1126-6708\/2008\/04\/063","volume":"04","author":"M Cacciari","year":"2008","unstructured":"Cacciari, M., Salam, G. P. & Soyez, G. The anti-kt jet clustering algorithm. J. High Energy Phys. 04, 063 (2008).","journal-title":"J. High Energy Phys."},{"key":"1757_CR41","doi-asserted-by":"publisher","DOI":"10.1140\/epjc\/s10052-012-1896-2","volume":"72","author":"M Cacciari","year":"2012","unstructured":"Cacciari, M., Salam, G. P. & Soyez, G. FastJet user manual. Eur. Phys. J. C 72, 1896 (2012).","journal-title":"Eur. Phys. J. C"},{"key":"1757_CR42","doi-asserted-by":"publisher","first-page":"072002","DOI":"10.1103\/PhysRevD.96.072002","volume":"96","author":"ATLAS Collaboration.","year":"2017","unstructured":"ATLAS Collaboration. Jet energy scale measurements and their systematic uncertainties in proton\u2013proton collisions at $$\\sqrt{s}=13$$ TeV with the ATLAS detector. Phys. Rev. D 96, 072002 (2017).","journal-title":"Phys. Rev. D"},{"key":"1757_CR43","doi-asserted-by":"publisher","DOI":"10.1140\/epjc\/s10052-016-4395-z","volume":"76","author":"ATLAS Collaboration.","year":"2016","unstructured":"ATLAS Collaboration. Performance of pile-up mitigation techniques for jets in pp collisions at $$\\sqrt{s}=8\\,{{{\\rm{TeV}}}}$$ using the ATLAS detector. Eur. Phys. J. C 76, 581 (2016).","journal-title":"Eur. Phys. J. C"},{"key":"1757_CR44","doi-asserted-by":"publisher","first-page":"970","DOI":"10.1140\/epjc\/s10052-019-7450-8","volume":"79","author":"ATLAS Collaboration.","year":"2019","unstructured":"ATLAS Collaboration. ATLAS b-jet identification performance and efficiency measurement with $$t\\overline{t}$$ events in pp collisions at $$\\sqrt{s}=13$$ TeV. Eur. Phys. J. C 79, 970 (2019).","journal-title":"Eur. Phys. J. C"},{"key":"1757_CR45","doi-asserted-by":"publisher","first-page":"032003","DOI":"10.1103\/PhysRevD.94.032003","volume":"94","author":"ATLAS Collaboration.","year":"2016","unstructured":"ATLAS Collaboration. Search for pair production of gluinos decaying via stop and sbottom in events with b-jets and large missing transverse momentum in pp collisions at $$\\sqrt{s}=13$$ TeV with the ATLAS detector. Phys. Rev. D 94, 032003 (2016).","journal-title":"Phys. Rev. D"},{"key":"1757_CR46","doi-asserted-by":"publisher","DOI":"10.1140\/epjc\/s10052-018-6288-9","volume":"78","author":"ATLAS Collaboration.","year":"2018","unstructured":"ATLAS Collaboration. Performance of missing transverse momentum reconstruction with the ATLAS detector using proton\u2013proton collisions at $$\\sqrt{s}$$ = 13 TeV. Eur. Phys. J. C 78, 903 (2018).","journal-title":"Eur. Phys. J. C"},{"key":"1757_CR47","unstructured":"ATLAS Collaboration. Object-based missing transverse momentum significance in the ATLAS detector. ATLAS-CONF-2018-038. CERN https:\/\/cds.cern.ch\/record\/2630948 (2018)."},{"key":"1757_CR48","doi-asserted-by":"publisher","first-page":"135341","DOI":"10.1016\/j.physletb.2020.135341","volume":"803","author":"ATLAS Collaboration.","year":"2020","unstructured":"ATLAS Collaboration. Evidence for electroweak production of two jets in association with a em>Z\u03b3 pair in pp collisions at $$\\sqrt{s}=13\\,{{{\\rm{TeV}}}}$$ with the ATLAS detector. Phys. Lett. B 803, 135341 (2020).","journal-title":"Phys. Lett. B"},{"key":"1757_CR49","first-page":"031","volume":"04","author":"ATLAS Collaboration.","year":"2014","unstructured":"ATLAS Collaboration. Measurement of the electroweak production of dijets in association with a Z-boson and distributions sensitive to vector boson fusion in proton\u2013proton collisions at $$\\sqrt{s}=8\\,{{{\\rm{TeV}}}}$$ using the ATLAS detector. J. High Energy Phys. 04, 031 (2014).","journal-title":"J. High Energy Phys."},{"key":"1757_CR50","doi-asserted-by":"publisher","DOI":"10.1140\/epjc\/s10052-017-5007-2","volume":"77","author":"ATLAS Collaboration.","year":"2017","unstructured":"ATLAS Collaboration. Measurements of electroweak Wjj production and constraints on anomalous gauge couplings with the ATLAS detector. Eur. Phys. J. C 77, 474 (2017).","journal-title":"Eur. Phys. J. C"},{"key":"1757_CR51","doi-asserted-by":"publisher","first-page":"206","DOI":"10.1016\/j.physletb.2017.10.040","volume":"775","author":"ATLAS Collaboration.","year":"2017","unstructured":"ATLAS Collaboration. Measurement of the cross-section for electroweak production of dijets in association with a Z boson in pp collisions at $$\\sqrt{s}=13\\,{{{\\rm{TeV}}}}$$ with the ATLAS detector. Phys. Lett. B 775, 206\u2013228 (2017).","journal-title":"Phys. Lett. B"},{"key":"1757_CR52","doi-asserted-by":"publisher","first-page":"032005","DOI":"10.1103\/PhysRevD.97.032005","volume":"97","author":"ATLAS Collaboration.","year":"2018","unstructured":"ATLAS Collaboration. $$ZZ\\to {\\ell }^{+}{\\ell }^{-}{\\ell }^{{\\,}^{\\prime} +}{\\ell }^{{\\,}^{\\prime} -}$$ cross-section measurements and search for anomalous triple gauge couplings in 13\u2009TeV pp collisions with the ATLAS detector. Phys. Rev. D 97, 032005 (2018).","journal-title":"Phys. Rev. D"},{"key":"1757_CR53","doi-asserted-by":"publisher","first-page":"318","DOI":"10.1016\/j.physletb.2017.11.049","volume":"776","author":"ATLAS Collaboration.","year":"2018","unstructured":"ATLAS Collaboration. Search for an invisibly decaying Higgs boson or dark matter candidates produced in association with a Z boson in pp collisions at $$\\sqrt{s}=$$ 13\u2009TeV with the ATLAS detector. Phys. Lett. B 776, 318\u2013337 (2018).","journal-title":"Phys. Lett. B"},{"key":"1757_CR54","unstructured":"ATLAS Collaboration. Luminosity determination in pp collisions at $$\\sqrt{s}=13$$ TeV using the ATLAS detector at the LHC, ATLAS-CONF-2019-021. CERN http:\/\/cds.cern.ch\/record\/2677054 (2019)."},{"key":"1757_CR55","doi-asserted-by":"publisher","first-page":"P07017","DOI":"10.1088\/1748-0221\/13\/07\/P07017","volume":"13","author":"G Avoni","year":"2018","unstructured":"Avoni, G. et al. The new lucid-2 detector for luminosity measurement and monitoring in atlas. J. Instrum. 13, P07017 (2018).","journal-title":"J. Instrum."},{"key":"1757_CR56","doi-asserted-by":"publisher","first-page":"023001","DOI":"10.1088\/0954-3899\/43\/2\/023001","volume":"43","author":"J Butterworth","year":"2016","unstructured":"Butterworth, J. et al. PDF4LHC recommendations for LHC Run II. J. Phys. G 43, 023001 (2016).","journal-title":"J. Phys. G"},{"key":"1757_CR57","doi-asserted-by":"publisher","first-page":"127","DOI":"10.1007\/JHEP10(2019)127","volume":"10","author":"ATLAS Collaboration.","year":"2019","unstructured":"ATLAS Collaboration. Measurement of ZZ production in the \u2113\u2113\u03bd\u03bd final state with the ATLAS detector in pp collisions at $$\\sqrt{s}=13$$ TeV. J. High Energy Phys. 10, 127 (2019).","journal-title":"J. High Energy Phys."},{"key":"1757_CR58","doi-asserted-by":"publisher","DOI":"10.1140\/epjc\/s10052-016-4018-8","volume":"76","author":"J Bellm","year":"2016","unstructured":"Bellm, J. et al. Herwig 7.0\/Herwig++ 3.0 release note. Eur. Phys. J. C 76, 196 (2016).","journal-title":"Eur. Phys. J. C"},{"key":"1757_CR59","doi-asserted-by":"publisher","first-page":"639","DOI":"10.1140\/epjc\/s10052-008-0798-9","volume":"58","author":"M B\u00e4hr","year":"2008","unstructured":"B\u00e4hr, M. et al. Herwig++ physics and manual. Eur. Phys. J. C 58, 639\u2013707 (2008).","journal-title":"Eur. Phys. J. C"},{"key":"1757_CR60","doi-asserted-by":"publisher","first-page":"1189","DOI":"10.1214\/aos\/1013203451","volume":"29","author":"JH Friedman","year":"2001","unstructured":"Friedman, J. H. Greedy function approximation: A gradient boosting machine. Ann. Stat. 29, 1189\u20131232 (2001).","journal-title":"Ann. Stat."},{"key":"1757_CR61","unstructured":"H\u00f6cker, A. et al. TMVA \u2013 toolkit for multivariate data analysis. Preprint at https:\/\/arxiv.org\/abs\/physics\/0703039 (2007)."},{"key":"1757_CR62","doi-asserted-by":"publisher","first-page":"1554","DOI":"10.1140\/epjc\/s10052-011-1554-0","volume":"71","author":"G Cowan","year":"2011","unstructured":"Cowan, G., Cranmer, K., Gross, E. & Vitells, O. Asymptotic formulae for likelihood-based tests of new physics. Eur. Phys. J. C 71, 1554 (2011).","journal-title":"Eur. Phys. J. C"},{"key":"1757_CR63","doi-asserted-by":"publisher","first-page":"682","DOI":"10.1016\/j.physletb.2017.10.020","volume":"774","author":"CMS Collaboration.","year":"2017","unstructured":"CMS Collaboration. Measurement of vector boson scattering and constraints on anomalous quartic couplings from events with four leptons and two jets in proton\u2013proton collisions at $$\\sqrt{s}=$$ 13 TeV. Phys. Lett. B 774, 682\u2013705 (2017).","journal-title":"Phys. Lett. B"},{"key":"1757_CR64","unstructured":"ATLAS Collaboration. ATLAS computing acknowledgements, ATL-SOFT-PUB-2021-003. CERN (2021) https:\/\/cds.cern.ch\/record\/2776662."},{"key":"1757_CR65","doi-asserted-by":"publisher","unstructured":"ATLAS Collaboration. Observation of electroweak production of two jets and a Z-boson pair with the ATLAS detector at the LHC (version 3). HEPData https:\/\/doi.org\/10.17182\/hepdata.93015.v3 (2022).","DOI":"10.17182\/hepdata.93015.v3"}],"container-title":["Nature Physics"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/www.nature.com\/articles\/s41567-022-01757-y.pdf","content-type":"application\/pdf","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/www.nature.com\/articles\/s41567-022-01757-y","content-type":"text\/html","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/www.nature.com\/articles\/s41567-022-01757-y.pdf","content-type":"application\/pdf","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2023,2,10]],"date-time":"2023-02-10T15:32:36Z","timestamp":1676043156000},"score":1,"resource":{"primary":{"URL":"https:\/\/www.nature.com\/articles\/s41567-022-01757-y"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2023,2,9]]},"references-count":65,"alternative-id":["1757"],"URL":"http:\/\/dx.doi.org\/10.1038\/s41567-022-01757-y","relation":{},"ISSN":["1745-2473","1745-2481"],"issn-type":[{"value":"1745-2473","type":"print"},{"value":"1745-2481","type":"electronic"}],"subject":["General Physics and Astronomy"],"published":{"date-parts":[[2023,2,9]]},"assertion":[{"value":"27 April 2020","order":1,"name":"received","label":"Received","group":{"name":"ArticleHistory","label":"Article History"}},{"value":"15 August 2022","order":2,"name":"accepted","label":"Accepted","group":{"name":"ArticleHistory","label":"Article History"}},{"value":"9 February 2023","order":3,"name":"first_online","label":"First Online","group":{"name":"ArticleHistory","label":"Article History"}},{"value":"The authors declare no competing interests.","order":1,"name":"Ethics","group":{"name":"EthicsHeading","label":"Competing interests"}}]} \ No newline at end of file diff --git a/dhp-workflows/dhp-doiboost/src/test/scala/eu/dnetlib/dhp/doiboost/crossref/CrossrefMappingTest.scala b/dhp-workflows/dhp-doiboost/src/test/scala/eu/dnetlib/dhp/doiboost/crossref/CrossrefMappingTest.scala index fbf6f72c0..c27cebf65 100644 --- a/dhp-workflows/dhp-doiboost/src/test/scala/eu/dnetlib/dhp/doiboost/crossref/CrossrefMappingTest.scala +++ b/dhp-workflows/dhp-doiboost/src/test/scala/eu/dnetlib/dhp/doiboost/crossref/CrossrefMappingTest.scala @@ -22,6 +22,13 @@ class CrossrefMappingTest { val logger: Logger = LoggerFactory.getLogger(Crossref2Oaf.getClass) val mapper = new ObjectMapper() + @Test + def testMissingAuthorParser():Unit = { + val json: String = Source.fromInputStream(getClass.getResourceAsStream("/eu/dnetlib/doiboost/crossref/s41567-022-01757-y.json")).mkString + val result = Crossref2Oaf.convert(json) + result.filter(o => o.isInstanceOf[Publication]).map(p=> p.asInstanceOf[Publication]).foreach(p =>assertTrue(p.getAuthor.size()>0)) + } + @Test def testFunderRelationshipsMapping(): Unit = { val template = Source From 078df0b4d1f9afcf254235bc944ed3e26d6235a6 Mon Sep 17 00:00:00 2001 From: Giambattista Bloisi Date: Fri, 26 Jan 2024 20:19:52 +0100 Subject: [PATCH 449/449] Use SparkSQL in place of Hive for executing step16-createIndicatorsTables.sql of stats update wf --- dhp-workflows/dhp-stats-update/pom.xml | 5 + .../scripts/step16-createIndicatorsTables.sql | 627 +++++++++--------- .../dhp/oa/graph/stats/oozie_app/workflow.xml | 199 +++--- 3 files changed, 436 insertions(+), 395 deletions(-) diff --git a/dhp-workflows/dhp-stats-update/pom.xml b/dhp-workflows/dhp-stats-update/pom.xml index f491b5868..cc15b8a15 100644 --- a/dhp-workflows/dhp-stats-update/pom.xml +++ b/dhp-workflows/dhp-stats-update/pom.xml @@ -8,6 +8,11 @@ 4.0.0 dhp-stats-update + + eu.dnetlib.dhp + dhp-common + ${project.version} + org.apache.spark spark-core_${scala.binary.version} diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step16-createIndicatorsTables.sql b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step16-createIndicatorsTables.sql index 5aa14e2c2..f13b2500c 100755 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step16-createIndicatorsTables.sql +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step16-createIndicatorsTables.sql @@ -1,5 +1,5 @@ -- Sprint 1 ---- -drop table if exists ${stats_db_name}.indi_pub_green_oa purge; +drop table if exists ${stats_db_name}.indi_pub_green_oa purge; /*EOS*/ --create table if not exists ${stats_db_name}.indi_pub_green_oa stored as parquet as --select distinct p.id, coalesce(green_oa, 0) as green_oa @@ -24,9 +24,9 @@ from ${stats_db_name}.publication p where datasource.type like '%Repository%' and (ri.accessright = 'Open Access' or ri.accessright = 'Embargo' or ri.accessright = 'Open Source') and datasource.name!='Other') tmp - on p.id= tmp.id; + on p.id= tmp.id; /*EOS*/ -drop table if exists ${stats_db_name}.indi_pub_grey_lit purge; +drop table if exists ${stats_db_name}.indi_pub_grey_lit purge; /*EOS*/ create table if not exists ${stats_db_name}.indi_pub_grey_lit stored as parquet as select distinct p.id, coalesce(grey_lit, 0) as grey_lit @@ -37,9 +37,9 @@ from ${stats_db_name}.publication p join ${stats_db_name}.result_classifications rt on rt.id = p.id where rt.type not in ('Article','Part of book or chapter of book','Book','Doctoral thesis','Master thesis','Data Paper', 'Thesis', 'Bachelor thesis', 'Conference object') and not exists (select 1 from ${stats_db_name}.result_classifications rc where type ='Other literature type' - and rc.id=p.id)) tmp on p.id=tmp.id; + and rc.id=p.id)) tmp on p.id=tmp.id; /*EOS*/ -drop table if exists ${stats_db_name}.indi_pub_doi_from_crossref purge; +drop table if exists ${stats_db_name}.indi_pub_doi_from_crossref purge; /*EOS*/ create table if not exists ${stats_db_name}.indi_pub_doi_from_crossref stored as parquet as select distinct p.id, coalesce(doi_from_crossref, 0) as doi_from_crossref @@ -48,10 +48,10 @@ from ${stats_db_name}.publication p (select ri.id, 1 as doi_from_crossref from ${stats_db_name}.result_instance ri join ${stats_db_name}.datasource d on d.id = ri.collectedfrom where pidtype='Digital Object Identifier' and d.name ='Crossref') tmp - on tmp.id=p.id; + on tmp.id=p.id; /*EOS*/ -- Sprint 2 ---- -drop table if exists ${stats_db_name}.indi_result_has_cc_licence purge; +drop table if exists ${stats_db_name}.indi_result_has_cc_licence purge; /*EOS*/ create table if not exists ${stats_db_name}.indi_result_has_cc_licence stored as parquet as select distinct r.id, (case when lic='' or lic is null then 0 else 1 end) as has_cc_license @@ -59,9 +59,9 @@ from ${stats_db_name}.result r left outer join (select r.id, license.type as lic from ${stats_db_name}.result r join ${stats_db_name}.result_licenses as license on license.id = r.id where lower(license.type) LIKE '%creativecommons.org%' OR lower(license.type) LIKE '%cc-%') tmp - on r.id= tmp.id; + on r.id= tmp.id; /*EOS*/ -drop table if exists ${stats_db_name}.indi_result_has_cc_licence_url purge; +drop table if exists ${stats_db_name}.indi_result_has_cc_licence_url purge; /*EOS*/ create table if not exists ${stats_db_name}.indi_result_has_cc_licence_url stored as parquet as select distinct r.id, case when lic_host='' or lic_host is null then 0 else 1 end as has_cc_license_url @@ -70,32 +70,32 @@ from ${stats_db_name}.result r from ${stats_db_name}.result r join ${stats_db_name}.result_licenses as license on license.id = r.id WHERE lower(parse_url(license.type, "HOST")) = "creativecommons.org") tmp - on r.id= tmp.id; + on r.id= tmp.id; /*EOS*/ -drop table if exists ${stats_db_name}.indi_pub_has_abstract purge; +drop table if exists ${stats_db_name}.indi_pub_has_abstract purge; /*EOS*/ create table if not exists ${stats_db_name}.indi_pub_has_abstract stored as parquet as select distinct publication.id, cast(coalesce(abstract, true) as int) has_abstract -from ${stats_db_name}.publication; +from ${stats_db_name}.publication; /*EOS*/ -drop table if exists ${stats_db_name}.indi_result_with_orcid purge; +drop table if exists ${stats_db_name}.indi_result_with_orcid purge; /*EOS*/ create table if not exists ${stats_db_name}.indi_result_with_orcid stored as parquet as select distinct r.id, coalesce(has_orcid, 0) as has_orcid from ${stats_db_name}.result r left outer join (select id, 1 as has_orcid from ${stats_db_name}.result_orcid) tmp - on r.id= tmp.id; + on r.id= tmp.id; /*EOS*/ ---- Sprint 3 ---- -drop table if exists ${stats_db_name}.indi_funded_result_with_fundref purge; +drop table if exists ${stats_db_name}.indi_funded_result_with_fundref purge; /*EOS*/ create table if not exists ${stats_db_name}.indi_funded_result_with_fundref stored as parquet as select distinct r.result as id, coalesce(fundref, 0) as fundref from ${stats_db_name}.project_results r left outer join (select distinct result, 1 as fundref from ${stats_db_name}.project_results where provenance='Harvested') tmp - on r.result= tmp.result; + on r.result= tmp.result; /*EOS*/ -- create table indi_result_org_collab stored as parquet as -- select o1.organization org1, o2.organization org2, count(distinct o1.id) as collaborations @@ -105,65 +105,65 @@ from ${stats_db_name}.project_results r -- -- compute stats indi_result_org_collab; -- -create TEMPORARY TABLE ${stats_db_name}.tmp AS SELECT ro.organization organization, ro.id, o.name from ${stats_db_name}.result_organization ro -join ${stats_db_name}.organization o on o.id=ro.organization where o.name is not null; +create TEMPORARY VIEW tmp AS SELECT ro.organization organization, ro.id, o.name from ${stats_db_name}.result_organization ro +join ${stats_db_name}.organization o on o.id=ro.organization where o.name is not null; /*EOS*/ -drop table if exists ${stats_db_name}.indi_result_org_collab purge; +drop table if exists ${stats_db_name}.indi_result_org_collab purge; /*EOS*/ create table if not exists ${stats_db_name}.indi_result_org_collab stored as parquet as select o1.organization org1, o1.name org1name1, o2.organization org2, o2.name org2name2, count(o1.id) as collaborations -from ${stats_db_name}.tmp as o1 -join ${stats_db_name}.tmp as o2 where o1.id=o2.id and o1.organization!=o2.organization and o1.name!=o2.name -group by o1.organization, o2.organization, o1.name, o2.name; +from tmp as o1 +join tmp as o2 where o1.id=o2.id and o1.organization!=o2.organization and o1.name!=o2.name +group by o1.organization, o2.organization, o1.name, o2.name; /*EOS*/ -drop table if exists ${stats_db_name}.tmp purge; +DROP VIEW if exists tmp; /*EOS*/ -create TEMPORARY TABLE ${stats_db_name}.tmp AS +create TEMPORARY VIEW tmp AS select distinct ro.organization organization, ro.id, o.name, o.country from ${stats_db_name}.result_organization ro -join ${stats_db_name}.organization o on o.id=ro.organization where country <> 'UNKNOWN' and o.name is not null; +join ${stats_db_name}.organization o on o.id=ro.organization where country <> 'UNKNOWN' and o.name is not null; /*EOS*/ -drop table if exists ${stats_db_name}.indi_result_org_country_collab purge; +drop table if exists ${stats_db_name}.indi_result_org_country_collab purge; /*EOS*/ create table if not exists ${stats_db_name}.indi_result_org_country_collab stored as parquet as select o1.organization org1,o1.name org1name1, o2.country country2, count(o1.id) as collaborations -from ${stats_db_name}.tmp as o1 join ${stats_db_name}.tmp as o2 on o1.id=o2.id +from tmp as o1 join tmp as o2 on o1.id=o2.id where o1.id=o2.id and o1.country!=o2.country -group by o1.organization, o1.id, o1.name, o2.country; +group by o1.organization, o1.id, o1.name, o2.country; /*EOS*/ -drop table if exists ${stats_db_name}.tmp purge; +drop table if exists tmp purge; /*EOS*/ -create TEMPORARY TABLE ${stats_db_name}.tmp AS +create TEMPORARY VIEW tmp AS select o.id organization, o.name, ro.project as project from ${stats_db_name}.organization o - join ${stats_db_name}.organization_projects ro on o.id=ro.id where o.name is not null; + join ${stats_db_name}.organization_projects ro on o.id=ro.id where o.name is not null; /*EOS*/ -drop table if exists ${stats_db_name}.indi_project_collab_org purge; +drop table if exists ${stats_db_name}.indi_project_collab_org purge; /*EOS*/ create table if not exists ${stats_db_name}.indi_project_collab_org stored as parquet as select o1.organization org1,o1.name orgname1, o2.organization org2, o2.name orgname2, count(distinct o1.project) as collaborations -from ${stats_db_name}.tmp as o1 - join ${stats_db_name}.tmp as o2 on o1.project=o2.project +from tmp as o1 + join tmp as o2 on o1.project=o2.project where o1.organization<>o2.organization and o1.name<>o2.name -group by o1.name,o2.name, o1.organization, o2.organization; +group by o1.name,o2.name, o1.organization, o2.organization; /*EOS*/ -drop table if exists ${stats_db_name}.tmp purge; +DROP VIEW if exists tmp; /*EOS*/ -create TEMPORARY TABLE ${stats_db_name}.tmp AS +create TEMPORARY VIEW tmp AS select o.id organization, o.name, o.country , ro.project as project from ${stats_db_name}.organization o join ${stats_db_name}.organization_projects ro on o.id=ro.id - and o.country <> 'UNKNOWN' and o.name is not null; + and o.country <> 'UNKNOWN' and o.name is not null; /*EOS*/ -drop table if exists ${stats_db_name}.indi_project_collab_org_country purge; +drop table if exists ${stats_db_name}.indi_project_collab_org_country purge; /*EOS*/ create table if not exists ${stats_db_name}.indi_project_collab_org_country stored as parquet as select o1.organization org1,o1.name org1name, o2.country country2, count(distinct o1.project) as collaborations -from ${stats_db_name}.tmp as o1 - join ${stats_db_name}.tmp as o2 on o1.project=o2.project +from tmp as o1 + join tmp as o2 on o1.project=o2.project where o1.organization<>o2.organization and o1.country<>o2.country -group by o1.organization, o2.country, o1.name; +group by o1.organization, o2.country, o1.name; /*EOS*/ -drop table if exists ${stats_db_name}.tmp purge; +DROP VIEW if exists tmp; /*EOS*/ -drop table if exists ${stats_db_name}.indi_funder_country_collab purge; +drop table if exists ${stats_db_name}.indi_funder_country_collab purge; /*EOS*/ create table if not exists ${stats_db_name}.indi_funder_country_collab stored as parquet as with tmp as (select funder, project, country from ${stats_db_name}.organization_projects op @@ -174,26 +174,26 @@ select f1.funder, f1.country as country1, f2.country as country2, count(distinct from tmp as f1 join tmp as f2 on f1.project=f2.project where f1.country<>f2.country -group by f1.funder, f2.country, f1.country; +group by f1.funder, f2.country, f1.country; /*EOS*/ -create TEMPORARY TABLE ${stats_db_name}.tmp AS +create TEMPORARY VIEW tmp AS select distinct country, ro.id as result from ${stats_db_name}.organization o join ${stats_db_name}.result_organization ro on o.id=ro.organization - where country <> 'UNKNOWN' and o.name is not null; + where country <> 'UNKNOWN' and o.name is not null; /*EOS*/ -drop table if exists ${stats_db_name}.indi_result_country_collab purge; +drop table if exists ${stats_db_name}.indi_result_country_collab purge; /*EOS*/ create table if not exists ${stats_db_name}.indi_result_country_collab stored as parquet as select o1.country country1, o2.country country2, count(o1.result) as collaborations -from ${stats_db_name}.tmp as o1 - join ${stats_db_name}.tmp as o2 on o1.result=o2.result +from tmp as o1 + join tmp as o2 on o1.result=o2.result where o1.country<>o2.country -group by o1.country, o2.country; +group by o1.country, o2.country; /*EOS*/ -drop table if exists ${stats_db_name}.tmp purge; +DROP VIEW if exists tmp; /*EOS*/ ---- Sprint 4 ---- -drop table if exists ${stats_db_name}.indi_pub_diamond purge; +drop table if exists ${stats_db_name}.indi_pub_diamond purge; /*EOS*/ --create table if not exists ${stats_db_name}.indi_pub_diamond stored as parquet as --select distinct pd.id, coalesce(in_diamond_journal, 0) as in_diamond_journal @@ -212,9 +212,9 @@ left outer join (select pd.id, 1 as in_diamond_journal from ${stats_db_name}.pub join ${stats_db_name}.datasource d on d.id=pd.datasource join STATS_EXT.plan_s_jn ps where (ps.issn_print=d.issn_printed and ps.issn_online=d.issn_online) and (ps.journal_is_in_doaj=true or ps.journal_is_oa=true) and ps.has_apc=false) tmp -on pd.id=tmp.id; +on pd.id=tmp.id; /*EOS*/ -drop table if exists ${stats_db_name}.indi_pub_in_transformative purge; +drop table if exists ${stats_db_name}.indi_pub_in_transformative purge; /*EOS*/ create table if not exists ${stats_db_name}.indi_pub_in_transformative stored as parquet as select distinct pd.id, coalesce(is_transformative, 0) as is_transformative @@ -224,9 +224,9 @@ from ${stats_db_name}.publication pd join ${stats_db_name}.datasource d on d.id=pd.datasource join STATS_EXT.plan_s_jn ps where (ps.issn_print=d.issn_printed and ps.issn_online=d.issn_online) and ps.is_transformative_journal=true) tmp - on pd.id=tmp.id; + on pd.id=tmp.id; /*EOS*/ -drop table if exists ${stats_db_name}.indi_pub_closed_other_open purge; +drop table if exists ${stats_db_name}.indi_pub_closed_other_open purge; /*EOS*/ create table if not exists ${stats_db_name}.indi_pub_closed_other_open stored as parquet as select distinct ri.id, coalesce(pub_closed_other_open, 0) as pub_closed_other_open from ${stats_db_name}.result_instance ri @@ -236,53 +236,53 @@ select distinct ri.id, coalesce(pub_closed_other_open, 0) as pub_closed_other_op join ${stats_db_name}.datasource d on ri.hostedby=d.id where d.type like '%Journal%' and ri.accessright='Closed Access' and (p.bestlicence='Open Access' or p.bestlicence='Open Source')) tmp - on tmp.id=ri.id; + on tmp.id=ri.id; /*EOS*/ ---- Sprint 5 ---- -drop table if exists ${stats_db_name}.indi_result_no_of_copies purge; +drop table if exists ${stats_db_name}.indi_result_no_of_copies purge; /*EOS*/ create table if not exists ${stats_db_name}.indi_result_no_of_copies stored as parquet as -select id, count(id) as number_of_copies from ${stats_db_name}.result_instance group by id; +select id, count(id) as number_of_copies from ${stats_db_name}.result_instance group by id; /*EOS*/ ---- Sprint 6 ---- -drop table if exists ${stats_db_name}.indi_pub_downloads purge; +drop table if exists ${stats_db_name}.indi_pub_downloads purge; /*EOS*/ create table if not exists ${stats_db_name}.indi_pub_downloads stored as parquet as SELECT result_id, sum(downloads) no_downloads from openaire_prod_usage_stats.usage_stats join ${stats_db_name}.publication on result_id=id where downloads>0 GROUP BY result_id -order by no_downloads desc; +order by no_downloads desc; /*EOS*/ --ANALYZE TABLE ${stats_db_name}.indi_pub_downloads COMPUTE STATISTICS; -drop table if exists ${stats_db_name}.indi_pub_downloads_datasource purge; +drop table if exists ${stats_db_name}.indi_pub_downloads_datasource purge; /*EOS*/ create table if not exists ${stats_db_name}.indi_pub_downloads_datasource stored as parquet as SELECT result_id, repository_id, sum(downloads) no_downloads from openaire_prod_usage_stats.usage_stats join ${stats_db_name}.publication on result_id=id where downloads>0 GROUP BY result_id, repository_id -order by result_id; +order by result_id; /*EOS*/ -drop table if exists ${stats_db_name}.indi_pub_downloads_year purge; +drop table if exists ${stats_db_name}.indi_pub_downloads_year purge; /*EOS*/ create table if not exists ${stats_db_name}.indi_pub_downloads_year stored as parquet as SELECT result_id, cast(substring(us.`date`, 1,4) as int) as `year`, sum(downloads) no_downloads from openaire_prod_usage_stats.usage_stats us join ${stats_db_name}.publication on result_id=id where downloads>0 -GROUP BY result_id, substring(us.`date`, 1,4); +GROUP BY result_id, substring(us.`date`, 1,4); /*EOS*/ -drop table if exists ${stats_db_name}.indi_pub_downloads_datasource_year purge; +drop table if exists ${stats_db_name}.indi_pub_downloads_datasource_year purge; /*EOS*/ create table if not exists ${stats_db_name}.indi_pub_downloads_datasource_year stored as parquet as SELECT result_id, cast(substring(us.`date`, 1,4) as int) as `year`, repository_id, sum(downloads) no_downloads from openaire_prod_usage_stats.usage_stats us join ${stats_db_name}.publication on result_id=id where downloads>0 -GROUP BY result_id, repository_id, substring(us.`date`, 1,4); +GROUP BY result_id, repository_id, substring(us.`date`, 1,4); /*EOS*/ ---- Sprint 7 ---- -drop table if exists ${stats_db_name}.indi_pub_gold_oa purge; +drop table if exists ${stats_db_name}.indi_pub_gold_oa purge; /*EOS*/ --create table if not exists ${stats_db_name}.indi_pub_gold_oa stored as parquet as -- WITH gold_oa AS ( SELECT @@ -381,9 +381,9 @@ left outer join ( select pd.id, 1 as is_gold FROM ${stats_db_name}.publication_datasources pd join dd on dd.id=pd.datasource - left outer join ${stats_db_name}.result_accessroute ra on ra.id = pd.id where ra.accessroute = 'gold') tmp on tmp.id=pd.id; + left outer join ${stats_db_name}.result_accessroute ra on ra.id = pd.id where ra.accessroute = 'gold') tmp on tmp.id=pd.id; /*EOS*/ -drop table if exists ${stats_db_name}.indi_pub_hybrid_oa_with_cc purge; +drop table if exists ${stats_db_name}.indi_pub_hybrid_oa_with_cc purge; /*EOS*/ create table if not exists ${stats_db_name}.indi_pub_hybrid_oa_with_cc stored as parquet as WITH hybrid_oa AS ( @@ -414,9 +414,9 @@ FROM ${stats_db_name}.publication_datasources pd JOIN hybrid_oa ON issn.issn = hybrid_oa.issn JOIN ${stats_db_name}.indi_result_has_cc_licence cc on pd.id=cc.id JOIN ${stats_db_name}.indi_pub_gold_oa ga on pd.id=ga.id - where cc.has_cc_license=1 and ga.is_gold=0) tmp on pd.id=tmp.id; + where cc.has_cc_license=1 and ga.is_gold=0) tmp on pd.id=tmp.id; /*EOS*/ -drop table if exists ${stats_db_name}.indi_pub_hybrid purge; +drop table if exists ${stats_db_name}.indi_pub_hybrid purge; /*EOS*/ --create table if not exists ${stats_db_name}.indi_pub_hybrid stored as parquet as -- WITH gold_oa AS ( SELECT @@ -489,9 +489,9 @@ join ${stats_db_name}.result_accessroute ra on ra.id=pd.id join ${stats_db_name}.datasource d on d.id=ri.hostedby where indi_gold.is_gold=0 and ((d.type like '%Journal%' and ri.accessright!='Closed Access' and ri.accessright!='Restricted' and ri.license is not null) or ra.accessroute='hybrid'))tmp -on pd.id=tmp.id; +on pd.id=tmp.id; /*EOS*/ -drop table if exists ${stats_db_name}.indi_org_fairness purge; +drop table if exists ${stats_db_name}.indi_org_fairness purge; /*EOS*/ create table if not exists ${stats_db_name}.indi_org_fairness stored as parquet as --return results with PIDs, and rich metadata group by organization @@ -509,9 +509,9 @@ create table if not exists ${stats_db_name}.indi_org_fairness stored as parquet --return results_fair/all_results select allresults.organization, result_fair.no_result_fair/allresults.no_allresults org_fairness from allresults - join result_fair on result_fair.organization=allresults.organization; + join result_fair on result_fair.organization=allresults.organization; /*EOS*/ -CREATE TEMPORARY table ${stats_db_name}.result_fair as +CREATE TEMPORARY VIEW result_fair as select ro.organization organization, count(distinct ro.id) no_result_fair from ${stats_db_name}.result_organization ro join ${stats_db_name}.publication p on p.id=ro.id @@ -519,296 +519,296 @@ select ro.organization organization, count(distinct ro.id) no_result_fair join ${stats_db_name}.indi_pub_grey_lit gl on gl.id=p.id where (title is not null) and (publisher is not null) and (abstract=true) and (year is not null) and (authors>0) and cast(year as int)>2003 and dc.doi_from_crossref=1 and gl.grey_lit=0 - group by ro.organization; + group by ro.organization; /*EOS*/ -CREATE TEMPORARY TABLE ${stats_db_name}.allresults as +CREATE TEMPORARY VIEW allresults as select ro.organization, count(distinct ro.id) no_allresults from ${stats_db_name}.result_organization ro join ${stats_db_name}.publication p on p.id=ro.id where cast(year as int)>2003 - group by ro.organization; + group by ro.organization; /*EOS*/ -drop table if exists ${stats_db_name}.indi_org_fairness_pub_pr purge; +drop table if exists ${stats_db_name}.indi_org_fairness_pub_pr purge; /*EOS*/ create table if not exists ${stats_db_name}.indi_org_fairness_pub_pr stored as parquet as select ar.organization, rf.no_result_fair/ar.no_allresults org_fairness -from ${stats_db_name}.allresults ar - join ${stats_db_name}.result_fair rf on rf.organization=ar.organization; +from allresults ar + join result_fair rf on rf.organization=ar.organization; /*EOS*/ -DROP table ${stats_db_name}.result_fair purge; -DROP table ${stats_db_name}.allresults purge; +DROP VIEW result_fair; /*EOS*/ +DROP VIEW allresults; /*EOS*/ -CREATE TEMPORARY table ${stats_db_name}.result_fair as +CREATE TEMPORARY VIEW result_fair as select year, ro.organization organization, count(distinct ro.id) no_result_fair from ${stats_db_name}.result_organization ro join ${stats_db_name}.result p on p.id=ro.id where (title is not null) and (publisher is not null) and (abstract=true) and (year is not null) and (authors>0) and cast(year as int)>2003 - group by ro.organization, year; + group by ro.organization, year; /*EOS*/ -CREATE TEMPORARY TABLE ${stats_db_name}.allresults as select year, ro.organization, count(distinct ro.id) no_allresults from ${stats_db_name}.result_organization ro +CREATE TEMPORARY VIEW allresults as select year, ro.organization, count(distinct ro.id) no_allresults from ${stats_db_name}.result_organization ro join ${stats_db_name}.result p on p.id=ro.id where cast(year as int)>2003 - group by ro.organization, year; + group by ro.organization, year; /*EOS*/ -drop table if exists ${stats_db_name}.indi_org_fairness_pub_year purge; +drop table if exists ${stats_db_name}.indi_org_fairness_pub_year purge; /*EOS*/ create table if not exists ${stats_db_name}.indi_org_fairness_pub_year stored as parquet as select cast(allresults.year as int) year, allresults.organization, result_fair.no_result_fair/allresults.no_allresults org_fairness -from ${stats_db_name}.allresults - join ${stats_db_name}.result_fair on result_fair.organization=allresults.organization and result_fair.year=allresults.year; +from allresults + join result_fair on result_fair.organization=allresults.organization and result_fair.year=allresults.year; /*EOS*/ -DROP table ${stats_db_name}.result_fair purge; -DROP table ${stats_db_name}.allresults purge; +DROP VIEW result_fair; /*EOS*/ +DROP VIEW allresults; /*EOS*/ -CREATE TEMPORARY TABLE ${stats_db_name}.result_fair as +CREATE TEMPORARY VIEW result_fair as select ro.organization organization, count(distinct ro.id) no_result_fair from ${stats_db_name}.result_organization ro join ${stats_db_name}.result p on p.id=ro.id where (title is not null) and (publisher is not null) and (abstract=true) and (year is not null) and (authors>0) and cast(year as int)>2003 - group by ro.organization; + group by ro.organization; /*EOS*/ -CREATE TEMPORARY TABLE ${stats_db_name}.allresults as +CREATE TEMPORARY VIEW allresults as select ro.organization, count(distinct ro.id) no_allresults from ${stats_db_name}.result_organization ro join ${stats_db_name}.result p on p.id=ro.id where cast(year as int)>2003 - group by ro.organization; + group by ro.organization; /*EOS*/ -drop table if exists ${stats_db_name}.indi_org_fairness_pub purge; +drop table if exists ${stats_db_name}.indi_org_fairness_pub purge; /*EOS*/ create table if not exists ${stats_db_name}.indi_org_fairness_pub as select ar.organization, rf.no_result_fair/ar.no_allresults org_fairness -from ${stats_db_name}.allresults ar join ${stats_db_name}.result_fair rf -on rf.organization=ar.organization; +from allresults ar join result_fair rf +on rf.organization=ar.organization; /*EOS*/ -DROP table ${stats_db_name}.result_fair purge; -DROP table ${stats_db_name}.allresults purge; +DROP VIEW result_fair; /*EOS*/ +DROP VIEW allresults; /*EOS*/ -CREATE TEMPORARY TABLE ${stats_db_name}.result_fair as +CREATE TEMPORARY VIEW result_fair as select year, ro.organization organization, count(distinct ro.id) no_result_fair from ${stats_db_name}.result_organization ro join ${stats_db_name}.result r on r.id=ro.id join ${stats_db_name}.result_pids rp on r.id=rp.id where (title is not null) and (publisher is not null) and (abstract=true) and (year is not null) and (authors>0) and cast(year as int)>2003 - group by ro.organization, year; + group by ro.organization, year; /*EOS*/ -CREATE TEMPORARY TABLE ${stats_db_name}.allresults as +CREATE TEMPORARY VIEW allresults as select year, ro.organization, count(distinct ro.id) no_allresults from ${stats_db_name}.result_organization ro join ${stats_db_name}.result r on r.id=ro.id where cast(year as int)>2003 - group by ro.organization, year; + group by ro.organization, year; /*EOS*/ -drop table if exists ${stats_db_name}.indi_org_fairness_year purge; +drop table if exists ${stats_db_name}.indi_org_fairness_year purge; /*EOS*/ create table if not exists ${stats_db_name}.indi_org_fairness_year stored as parquet as select cast(allresults.year as int) year, allresults.organization, result_fair.no_result_fair/allresults.no_allresults org_fairness - from ${stats_db_name}.allresults - join ${stats_db_name}.result_fair on result_fair.organization=allresults.organization and cast(result_fair.year as int)=cast(allresults.year as int); + from allresults + join result_fair on result_fair.organization=allresults.organization and cast(result_fair.year as int)=cast(allresults.year as int); /*EOS*/ -DROP table ${stats_db_name}.result_fair purge; -DROP table ${stats_db_name}.allresults purge; +DROP VIEW result_fair; /*EOS*/ +DROP VIEW allresults; /*EOS*/ -CREATE TEMPORARY TABLE ${stats_db_name}.result_with_pid as +CREATE TEMPORARY VIEW result_with_pid as select year, ro.organization, count(distinct rp.id) no_result_with_pid from ${stats_db_name}.result_organization ro join ${stats_db_name}.result_pids rp on rp.id=ro.id join ${stats_db_name}.result r on r.id=rp.id where cast(year as int) >2003 - group by ro.organization, year; + group by ro.organization, year; /*EOS*/ -CREATE TEMPORARY TABLE ${stats_db_name}.allresults as +CREATE TEMPORARY VIEW allresults as select year, ro.organization, count(distinct ro.id) no_allresults from ${stats_db_name}.result_organization ro join ${stats_db_name}.result r on r.id=ro.id where cast(year as int) >2003 - group by ro.organization, year; + group by ro.organization, year; /*EOS*/ -drop table if exists ${stats_db_name}.indi_org_findable_year purge; +drop table if exists ${stats_db_name}.indi_org_findable_year purge; /*EOS*/ create table if not exists ${stats_db_name}.indi_org_findable_year stored as parquet as select cast(allresults.year as int) year, allresults.organization, result_with_pid.no_result_with_pid/allresults.no_allresults org_findable -from ${stats_db_name}.allresults - join ${stats_db_name}.result_with_pid on result_with_pid.organization=allresults.organization and cast(result_with_pid.year as int)=cast(allresults.year as int); +from allresults + join result_with_pid on result_with_pid.organization=allresults.organization and cast(result_with_pid.year as int)=cast(allresults.year as int); /*EOS*/ -DROP table ${stats_db_name}.result_with_pid purge; -DROP table ${stats_db_name}.allresults purge; +DROP VIEW result_with_pid; /*EOS*/ +DROP VIEW allresults; /*EOS*/ -CREATE TEMPORARY TABLE ${stats_db_name}.result_with_pid as +CREATE TEMPORARY VIEW result_with_pid as select ro.organization, count(distinct rp.id) no_result_with_pid from ${stats_db_name}.result_organization ro join ${stats_db_name}.result_pids rp on rp.id=ro.id join ${stats_db_name}.result r on r.id=rp.id where cast(year as int) >2003 - group by ro.organization; + group by ro.organization; /*EOS*/ -CREATE TEMPORARY TABLE ${stats_db_name}.allresults as +CREATE TEMPORARY VIEW allresults as select ro.organization, count(distinct ro.id) no_allresults from ${stats_db_name}.result_organization ro join ${stats_db_name}.result r on r.id=ro.id where cast(year as int) >2003 - group by ro.organization; + group by ro.organization; /*EOS*/ -drop table if exists ${stats_db_name}.indi_org_findable purge; +drop table if exists ${stats_db_name}.indi_org_findable purge; /*EOS*/ create table if not exists ${stats_db_name}.indi_org_findable stored as parquet as select allresults.organization, result_with_pid.no_result_with_pid/allresults.no_allresults org_findable -from ${stats_db_name}.allresults - join ${stats_db_name}.result_with_pid on result_with_pid.organization=allresults.organization; +from allresults + join result_with_pid on result_with_pid.organization=allresults.organization; /*EOS*/ -DROP table ${stats_db_name}.result_with_pid purge; -DROP table ${stats_db_name}.allresults purge; +DROP VIEW result_with_pid; /*EOS*/ +DROP VIEW allresults; /*EOS*/ -CREATE TEMPORARY TABLE ${stats_db_name}.pubs_oa as +CREATE TEMPORARY VIEW pubs_oa as SELECT ro.organization, count(distinct r.id) no_oapubs FROM ${stats_db_name}.publication r join ${stats_db_name}.result_organization ro on ro.id=r.id join ${stats_db_name}.result_instance ri on ri.id=r.id where (ri.accessright = 'Open Access' or ri.accessright = 'Embargo' or ri.accessright = 'Open Source') and cast(r.year as int)>2003 - group by ro.organization; + group by ro.organization; /*EOS*/ -CREATE TEMPORARY TABLE ${stats_db_name}.datasets_oa as +CREATE TEMPORARY VIEW datasets_oa as SELECT ro.organization, count(distinct r.id) no_oadatasets FROM ${stats_db_name}.dataset r join ${stats_db_name}.result_organization ro on ro.id=r.id join ${stats_db_name}.result_instance ri on ri.id=r.id where (ri.accessright = 'Open Access' or ri.accessright = 'Embargo' or ri.accessright = 'Open Source') and cast(r.year as int)>2003 - group by ro.organization; + group by ro.organization; /*EOS*/ -CREATE TEMPORARY TABLE ${stats_db_name}.software_oa as +CREATE TEMPORARY VIEW software_oa as SELECT ro.organization, count(distinct r.id) no_oasoftware FROM ${stats_db_name}.software r join ${stats_db_name}.result_organization ro on ro.id=r.id join ${stats_db_name}.result_instance ri on ri.id=r.id where (ri.accessright = 'Open Access' or ri.accessright = 'Embargo' or ri.accessright = 'Open Source') and cast(r.year as int)>2003 - group by ro.organization; + group by ro.organization; /*EOS*/ -CREATE TEMPORARY TABLE ${stats_db_name}.allpubs as +CREATE TEMPORARY VIEW allpubs as SELECT ro.organization, count(ro.id) no_allpubs FROM ${stats_db_name}.result_organization ro join ${stats_db_name}.publication ps on ps.id=ro.id where cast(ps.year as int)>2003 - group by ro.organization; + group by ro.organization; /*EOS*/ -CREATE TEMPORARY TABLE ${stats_db_name}.alldatasets as +CREATE TEMPORARY VIEW alldatasets as SELECT ro.organization, count(ro.id) no_alldatasets FROM ${stats_db_name}.result_organization ro join ${stats_db_name}.dataset ps on ps.id=ro.id where cast(ps.year as int)>2003 - group by ro.organization; + group by ro.organization; /*EOS*/ -CREATE TEMPORARY TABLE ${stats_db_name}.allsoftware as +CREATE TEMPORARY VIEW allsoftware as SELECT ro.organization, count(ro.id) no_allsoftware FROM ${stats_db_name}.result_organization ro join ${stats_db_name}.software ps on ps.id=ro.id where cast(ps.year as int)>2003 - group by ro.organization; + group by ro.organization; /*EOS*/ -CREATE TEMPORARY TABLE ${stats_db_name}.allpubsshare as -select pubs_oa.organization, pubs_oa.no_oapubs/allpubs.no_allpubs p from ${stats_db_name}.allpubs - join ${stats_db_name}.pubs_oa on allpubs.organization=pubs_oa.organization; +CREATE TEMPORARY VIEW allpubsshare as +select pubs_oa.organization, pubs_oa.no_oapubs/allpubs.no_allpubs p from allpubs + join pubs_oa on allpubs.organization=pubs_oa.organization; /*EOS*/ -CREATE TEMPORARY TABLE ${stats_db_name}.alldatasetssshare as +CREATE TEMPORARY VIEW alldatasetssshare as select datasets_oa.organization, datasets_oa.no_oadatasets/alldatasets.no_alldatasets d - from ${stats_db_name}.alldatasets - join ${stats_db_name}.datasets_oa on alldatasets.organization=datasets_oa.organization; + from alldatasets + join datasets_oa on alldatasets.organization=datasets_oa.organization; /*EOS*/ -CREATE TEMPORARY TABLE ${stats_db_name}.allsoftwaresshare as +CREATE TEMPORARY VIEW allsoftwaresshare as select software_oa.organization, software_oa.no_oasoftware/allsoftware.no_allsoftware s - from ${stats_db_name}.allsoftware - join ${stats_db_name}.software_oa on allsoftware.organization=software_oa.organization; + from allsoftware + join software_oa on allsoftware.organization=software_oa.organization; /*EOS*/ -drop table if exists ${stats_db_name}.indi_org_openess purge; +drop table if exists ${stats_db_name}.indi_org_openess purge; /*EOS*/ create table if not exists ${stats_db_name}.indi_org_openess stored as parquet as select allpubsshare.organization, (p+if(isnull(s),0,s)+if(isnull(d),0,d))/(1+(case when s is null then 0 else 1 end) +(case when d is null then 0 else 1 end)) - org_openess FROM ${stats_db_name}.allpubsshare + org_openess FROM allpubsshare left outer join (select organization,d from - ${stats_db_name}.alldatasetssshare) tmp1 + alldatasetssshare) tmp1 on tmp1.organization=allpubsshare.organization left outer join (select organization,s from - ${stats_db_name}.allsoftwaresshare) tmp2 - on tmp2.organization=allpubsshare.organization; + allsoftwaresshare) tmp2 + on tmp2.organization=allpubsshare.organization; /*EOS*/ -DROP TABLE ${stats_db_name}.pubs_oa purge; -DROP TABLE ${stats_db_name}.datasets_oa purge; -DROP TABLE ${stats_db_name}.software_oa purge; -DROP TABLE ${stats_db_name}.allpubs purge; -DROP TABLE ${stats_db_name}.alldatasets purge; -DROP TABLE ${stats_db_name}.allsoftware purge; -DROP TABLE ${stats_db_name}.allpubsshare purge; -DROP TABLE ${stats_db_name}.alldatasetssshare purge; -DROP TABLE ${stats_db_name}.allsoftwaresshare purge; +DROP VIEW pubs_oa; /*EOS*/ +DROP VIEW datasets_oa; /*EOS*/ +DROP VIEW software_oa; /*EOS*/ +DROP VIEW allpubs; /*EOS*/ +DROP VIEW alldatasets; /*EOS*/ +DROP VIEW allsoftware; /*EOS*/ +DROP VIEW allpubsshare; /*EOS*/ +DROP VIEW alldatasetssshare; /*EOS*/ +DROP VIEW allsoftwaresshare; /*EOS*/ -CREATE TEMPORARY TABLE ${stats_db_name}.pubs_oa AS +CREATE TEMPORARY VIEW pubs_oa AS SELECT r.year, ro.organization, count(distinct r.id) no_oapubs FROM ${stats_db_name}.publication r join ${stats_db_name}.result_organization ro on ro.id=r.id join ${stats_db_name}.result_instance ri on ri.id=r.id where (ri.accessright = 'Open Access' or ri.accessright = 'Embargo' or ri.accessright = 'Open Source') and cast(r.year as int)>2003 - group by ro.organization,r.year; + group by ro.organization,r.year; /*EOS*/ -CREATE TEMPORARY TABLE ${stats_db_name}.datasets_oa AS +CREATE TEMPORARY VIEW datasets_oa AS SELECT r.year,ro.organization, count(distinct r.id) no_oadatasets FROM ${stats_db_name}.dataset r join ${stats_db_name}.result_organization ro on ro.id=r.id join ${stats_db_name}.result_instance ri on ri.id=r.id where (ri.accessright = 'Open Access' or ri.accessright = 'Embargo' or ri.accessright = 'Open Source') and cast(r.year as int)>2003 - group by ro.organization, r.year; + group by ro.organization, r.year; /*EOS*/ -CREATE TEMPORARY TABLE ${stats_db_name}.software_oa AS +CREATE TEMPORARY VIEW software_oa AS SELECT r.year,ro.organization, count(distinct r.id) no_oasoftware FROM ${stats_db_name}.software r join ${stats_db_name}.result_organization ro on ro.id=r.id join ${stats_db_name}.result_instance ri on ri.id=r.id where (ri.accessright = 'Open Access' or ri.accessright = 'Embargo' or ri.accessright = 'Open Source') and cast(r.year as int)>2003 - group by ro.organization, r.year; + group by ro.organization, r.year; /*EOS*/ -CREATE TEMPORARY TABLE ${stats_db_name}.allpubs as +CREATE TEMPORARY VIEW allpubs as SELECT p.year,ro.organization organization, count(ro.id) no_allpubs FROM ${stats_db_name}.result_organization ro join ${stats_db_name}.publication p on p.id=ro.id where cast(p.year as int)>2003 - group by ro.organization, p.year; + group by ro.organization, p.year; /*EOS*/ -CREATE TEMPORARY TABLE ${stats_db_name}.alldatasets as +CREATE TEMPORARY VIEW alldatasets as SELECT d.year, ro.organization organization, count(ro.id) no_alldatasets FROM ${stats_db_name}.result_organization ro join ${stats_db_name}.dataset d on d.id=ro.id where cast(d.year as int)>2003 - group by ro.organization, d.year; + group by ro.organization, d.year; /*EOS*/ -CREATE TEMPORARY TABLE ${stats_db_name}.allsoftware as +CREATE TEMPORARY VIEW allsoftware as SELECT s.year,ro.organization organization, count(ro.id) no_allsoftware FROM ${stats_db_name}.result_organization ro join ${stats_db_name}.software s on s.id=ro.id where cast(s.year as int)>2003 - group by ro.organization, s.year; + group by ro.organization, s.year; /*EOS*/ -CREATE TEMPORARY TABLE ${stats_db_name}.allpubsshare as -select allpubs.year, pubs_oa.organization, pubs_oa.no_oapubs/allpubs.no_allpubs p from ${stats_db_name}.allpubs - join ${stats_db_name}.pubs_oa on allpubs.organization=pubs_oa.organization where cast(allpubs.year as INT)=cast(pubs_oa.year as int); +CREATE TEMPORARY VIEW allpubsshare as +select allpubs.year, pubs_oa.organization, pubs_oa.no_oapubs/allpubs.no_allpubs p from allpubs + join pubs_oa on allpubs.organization=pubs_oa.organization where cast(allpubs.year as INT)=cast(pubs_oa.year as int); /*EOS*/ -CREATE TEMPORARY TABLE ${stats_db_name}.alldatasetssshare as +CREATE TEMPORARY VIEW alldatasetssshare as select alldatasets.year, datasets_oa.organization, datasets_oa.no_oadatasets/alldatasets.no_alldatasets d - from ${stats_db_name}.alldatasets - join ${stats_db_name}.datasets_oa on alldatasets.organization=datasets_oa.organization where cast(alldatasets.year as INT)=cast(datasets_oa.year as int); + from alldatasets + join datasets_oa on alldatasets.organization=datasets_oa.organization where cast(alldatasets.year as INT)=cast(datasets_oa.year as int); /*EOS*/ -CREATE TEMPORARY TABLE ${stats_db_name}.allsoftwaresshare as +CREATE TEMPORARY VIEW allsoftwaresshare as select allsoftware.year, software_oa.organization, software_oa.no_oasoftware/allsoftware.no_allsoftware s - from ${stats_db_name}.allsoftware - join ${stats_db_name}.software_oa on allsoftware.organization=software_oa.organization where cast(allsoftware.year as INT)=cast(software_oa.year as int); + from allsoftware + join software_oa on allsoftware.organization=software_oa.organization where cast(allsoftware.year as INT)=cast(software_oa.year as int); /*EOS*/ -drop table if exists ${stats_db_name}.indi_org_openess_year purge; +drop table if exists ${stats_db_name}.indi_org_openess_year purge; /*EOS*/ create table if not exists ${stats_db_name}.indi_org_openess_year stored as parquet as select cast(allpubsshare.year as int) year, allpubsshare.organization, (p+if(isnull(s),0,s)+if(isnull(d),0,d))/(1+(case when s is null then 0 else 1 end) +(case when d is null then 0 else 1 end)) - org_openess FROM ${stats_db_name}.allpubsshare + org_openess FROM allpubsshare left outer join (select cast(year as int), organization,d from - ${stats_db_name}.alldatasetssshare) tmp1 + alldatasetssshare) tmp1 on tmp1.organization=allpubsshare.organization and tmp1.year=allpubsshare.year left outer join (select cast(year as int), organization,s from - ${stats_db_name}.allsoftwaresshare) tmp2 - on tmp2.organization=allpubsshare.organization and cast(tmp2.year as int)=cast(allpubsshare.year as int); + allsoftwaresshare) tmp2 + on tmp2.organization=allpubsshare.organization and cast(tmp2.year as int)=cast(allpubsshare.year as int); /*EOS*/ -DROP TABLE ${stats_db_name}.pubs_oa purge; -DROP TABLE ${stats_db_name}.datasets_oa purge; -DROP TABLE ${stats_db_name}.software_oa purge; -DROP TABLE ${stats_db_name}.allpubs purge; -DROP TABLE ${stats_db_name}.alldatasets purge; -DROP TABLE ${stats_db_name}.allsoftware purge; -DROP TABLE ${stats_db_name}.allpubsshare purge; -DROP TABLE ${stats_db_name}.alldatasetssshare purge; -DROP TABLE ${stats_db_name}.allsoftwaresshare purge; +DROP VIEW pubs_oa; /*EOS*/ +DROP VIEW datasets_oa; /*EOS*/ +DROP VIEW software_oa; /*EOS*/ +DROP VIEW allpubs; /*EOS*/ +DROP VIEW alldatasets; /*EOS*/ +DROP VIEW allsoftware; /*EOS*/ +DROP VIEW allpubsshare; /*EOS*/ +DROP VIEW alldatasetssshare; /*EOS*/ +DROP VIEW allsoftwaresshare; /*EOS*/ -drop table if exists ${stats_db_name}.indi_pub_has_preprint purge; +drop table if exists ${stats_db_name}.indi_pub_has_preprint purge; /*EOS*/ create table if not exists ${stats_db_name}.indi_pub_has_preprint stored as parquet as select distinct p.id, coalesce(has_preprint, 0) as has_preprint @@ -817,8 +817,8 @@ from ${stats_db_name}.publication_classifications p select p.id, 1 as has_preprint from ${stats_db_name}.publication_classifications p where p.type='Preprint') tmp - on p.id= tmp.id; -drop table if exists ${stats_db_name}.indi_pub_in_subscribed purge; + on p.id= tmp.id; /*EOS*/ +drop table if exists ${stats_db_name}.indi_pub_in_subscribed purge; /*EOS*/ create table if not exists ${stats_db_name}.indi_pub_in_subscribed stored as parquet as select distinct p.id, coalesce(is_subscription, 0) as is_subscription @@ -829,9 +829,9 @@ from ${stats_db_name}.publication p join ${stats_db_name}.indi_pub_hybrid h on p.id=h.id join ${stats_db_name}.indi_pub_in_transformative t on p.id=t.id where g.is_gold=0 and h.is_hybrid=0 and t.is_transformative=0) tmp - on p.id=tmp.id; + on p.id=tmp.id; /*EOS*/ -drop table if exists ${stats_db_name}.indi_result_with_pid purge; +drop table if exists ${stats_db_name}.indi_result_with_pid purge; /*EOS*/ create table if not exists ${stats_db_name}.indi_result_with_pid as select distinct p.id, coalesce(result_with_pid, 0) as result_with_pid @@ -839,25 +839,25 @@ from ${stats_db_name}.result p left outer join ( select p.id, 1 as result_with_pid from ${stats_db_name}.result_pids p) tmp - on p.id= tmp.id; + on p.id= tmp.id; /*EOS*/ -CREATE TEMPORARY TABLE ${stats_db_name}.pub_fos_totals as +CREATE TEMPORARY VIEW pub_fos_totals as select rf.id, count(distinct lvl3) totals from ${stats_db_name}.result_fos rf -group by rf.id; +group by rf.id; /*EOS*/ -drop table if exists ${stats_db_name}.indi_pub_interdisciplinarity purge; +drop table if exists ${stats_db_name}.indi_pub_interdisciplinarity purge; /*EOS*/ create table if not exists ${stats_db_name}.indi_pub_interdisciplinarity as select distinct p.id as id, coalesce(is_interdisciplinary, 0) as is_interdisciplinary -from ${stats_db_name}.pub_fos_totals p +from pub_fos_totals p left outer join ( -select pub_fos_totals.id, 1 as is_interdisciplinary from ${stats_db_name}.pub_fos_totals -where totals>1) tmp on p.id=tmp.id; +select pub_fos_totals.id, 1 as is_interdisciplinary from pub_fos_totals +where totals>1) tmp on p.id=tmp.id; /*EOS*/ -drop table ${stats_db_name}.pub_fos_totals purge; +drop view pub_fos_totals; /*EOS*/ -drop table if exists ${stats_db_name}.indi_pub_bronze_oa purge; +drop table if exists ${stats_db_name}.indi_pub_bronze_oa purge; /*EOS*/ --create table if not exists ${stats_db_name}.indi_pub_bronze_oa stored as parquet as --select distinct p.id, coalesce(is_bronze_oa,0) as is_bronze_oa @@ -883,38 +883,38 @@ join ${stats_db_name}.datasource d on d.id=ri.hostedby where indi_gold.is_gold=0 and indi_hybrid.is_hybrid=0 and ((d.type like '%Journal%' and ri.accessright!='Closed Access' and ri.accessright!='Restricted' and ri.license is null) or ra.accessroute='bronze')) tmp -on pd.id=tmp.id; +on pd.id=tmp.id; /*EOS*/ -CREATE TEMPORARY TABLE ${stats_db_name}.project_year_result_year as +CREATE TEMPORARY VIEW project_year_result_year as select p.id project_id, acronym, r.id result_id, r.year, p.end_year from ${stats_db_name}.project p join ${stats_db_name}.result_projects rp on p.id=rp.project join ${stats_db_name}.result r on r.id=rp.id -where p.end_year is NOT NULL and r.year is not null; +where p.end_year is NOT NULL and r.year is not null; /*EOS*/ -drop table if exists ${stats_db_name}.indi_is_project_result_after purge; +drop table if exists ${stats_db_name}.indi_is_project_result_after purge; /*EOS*/ create table if not exists ${stats_db_name}.indi_is_project_result_after stored as parquet as select pry.project_id, pry.acronym, pry.result_id, coalesce(is_project_result_after, 0) as is_project_result_after -from ${stats_db_name}.project_year_result_year pry +from project_year_result_year pry left outer join (select pry.project_id, pry.acronym, pry.result_id, 1 as is_project_result_after -from ${stats_db_name}.project_year_result_year pry -where pry.year>pry.end_year) tmp on pry.result_id=tmp.result_id; +from project_year_result_year pry +where pry.year>pry.end_year) tmp on pry.result_id=tmp.result_id; /*EOS*/ -drop table ${stats_db_name}.project_year_result_year purge; +drop view project_year_result_year; /*EOS*/ -drop table ${stats_db_name}.indi_is_funder_plan_s purge; +drop table if exists ${stats_db_name}.indi_is_funder_plan_s purge; /*EOS*/ create table if not exists ${stats_db_name}.indi_is_funder_plan_s stored as parquet as select distinct f.id, f.name, coalesce(is_funder_plan_s, 0) as is_funder_plan_s from ${stats_db_name}.funder f left outer join (select id, name, 1 as is_funder_plan_s from ${stats_db_name}.funder join stats_ext.plan_s_short on c_o_alition_s_organisation_funder=name) tmp - on f.name= tmp.name; + on f.name= tmp.name; /*EOS*/ --Funder Fairness -drop table ${stats_db_name}.indi_funder_fairness purge; +drop table if exists ${stats_db_name}.indi_funder_fairness purge; /*EOS*/ create table if not exists ${stats_db_name}.indi_funder_fairness stored as parquet as with result_fair as @@ -930,10 +930,10 @@ create table if not exists ${stats_db_name}.indi_funder_fairness stored as parqu group by p.funder) select allresults.funder, result_fair.no_result_fair/allresults.no_allresults funder_fairness from allresults - join result_fair on result_fair.funder=allresults.funder; + join result_fair on result_fair.funder=allresults.funder; /*EOS*/ --RIs Fairness -drop table ${stats_db_name}.indi_ris_fairness purge; +drop table if exists ${stats_db_name}.indi_ris_fairness purge; /*EOS*/ create table if not exists ${stats_db_name}.indi_ris_fairness stored as parquet as with result_contexts as @@ -953,188 +953,188 @@ allresults as group by rc.ri_initiative) select allresults.ri_initiative, result_fair.no_result_fair/allresults.no_allresults ris_fairness from allresults - join result_fair on result_fair.ri_initiative=allresults.ri_initiative; + join result_fair on result_fair.ri_initiative=allresults.ri_initiative; /*EOS*/ --Funder Openess -CREATE TEMPORARY TABLE ${stats_db_name}.pubs_oa as +CREATE TEMPORARY VIEW pubs_oa as select p.funder funder, count(distinct rp.id) no_oapubs from ${stats_db_name}.result_projects rp join ${stats_db_name}.project p on p.id=rp.project join ${stats_db_name}.publication r on r.id=rp.id join ${stats_db_name}.result_instance ri on ri.id=r.id where (ri.accessright = 'Open Access' or ri.accessright = 'Embargo' or ri.accessright = 'Open Source') and cast(r.year as int)>2003 -group by p.funder; +group by p.funder; /*EOS*/ -CREATE TEMPORARY TABLE ${stats_db_name}.datasets_oa as +CREATE TEMPORARY VIEW datasets_oa as select p.funder funder, count(distinct rp.id) no_oadatasets from ${stats_db_name}.result_projects rp join ${stats_db_name}.project p on p.id=rp.project join ${stats_db_name}.dataset r on r.id=rp.id join ${stats_db_name}.result_instance ri on ri.id=r.id where (ri.accessright = 'Open Access' or ri.accessright = 'Embargo' or ri.accessright = 'Open Source') and cast(r.year as int)>2003 -group by p.funder; +group by p.funder; /*EOS*/ -CREATE TEMPORARY TABLE ${stats_db_name}.software_oa as +CREATE TEMPORARY VIEW software_oa as select p.funder funder, count(distinct rp.id) no_oasoftware from ${stats_db_name}.result_projects rp join ${stats_db_name}.project p on p.id=rp.project join ${stats_db_name}.software r on r.id=rp.id join ${stats_db_name}.result_instance ri on ri.id=r.id where (ri.accessright = 'Open Access' or ri.accessright = 'Embargo' or ri.accessright = 'Open Source') and cast(r.year as int)>2003 -group by p.funder; +group by p.funder; /*EOS*/ -CREATE TEMPORARY TABLE ${stats_db_name}.allpubs as +CREATE TEMPORARY VIEW allpubs as select p.funder funder, count(distinct rp.id) no_allpubs from ${stats_db_name}.result_projects rp join ${stats_db_name}.project p on p.id=rp.project join ${stats_db_name}.publication r on r.id=rp.id where cast(r.year as int)>2003 -group by p.funder; +group by p.funder; /*EOS*/ -CREATE TEMPORARY TABLE ${stats_db_name}.alldatasets as +CREATE TEMPORARY VIEW alldatasets as select p.funder funder, count(distinct rp.id) no_alldatasets from ${stats_db_name}.result_projects rp join ${stats_db_name}.project p on p.id=rp.project join ${stats_db_name}.dataset r on r.id=rp.id where cast(r.year as int)>2003 -group by p.funder; +group by p.funder; /*EOS*/ -CREATE TEMPORARY TABLE ${stats_db_name}.allsoftware as +CREATE TEMPORARY VIEW allsoftware as select p.funder funder, count(distinct rp.id) no_allsoftware from ${stats_db_name}.result_projects rp join ${stats_db_name}.project p on p.id=rp.project join ${stats_db_name}.software r on r.id=rp.id where cast(r.year as int)>2003 -group by p.funder; +group by p.funder; /*EOS*/ -CREATE TEMPORARY TABLE ${stats_db_name}.allpubsshare as -select pubs_oa.funder, pubs_oa.no_oapubs/allpubs.no_allpubs p from ${stats_db_name}.allpubs - join ${stats_db_name}.pubs_oa on allpubs.funder=pubs_oa.funder; +CREATE TEMPORARY VIEW allpubsshare as +select pubs_oa.funder, pubs_oa.no_oapubs/allpubs.no_allpubs p from allpubs + join pubs_oa on allpubs.funder=pubs_oa.funder; /*EOS*/ -CREATE TEMPORARY TABLE ${stats_db_name}.alldatasetssshare as +CREATE TEMPORARY VIEW alldatasetssshare as select datasets_oa.funder, datasets_oa.no_oadatasets/alldatasets.no_alldatasets d - from ${stats_db_name}.alldatasets - join ${stats_db_name}.datasets_oa on alldatasets.funder=datasets_oa.funder; + from alldatasets + join datasets_oa on alldatasets.funder=datasets_oa.funder; /*EOS*/ -CREATE TEMPORARY TABLE ${stats_db_name}.allsoftwaresshare as +CREATE TEMPORARY VIEW allsoftwaresshare as select software_oa.funder, software_oa.no_oasoftware/allsoftware.no_allsoftware s - from ${stats_db_name}.allsoftware - join ${stats_db_name}.software_oa on allsoftware.funder=software_oa.funder; + from allsoftware + join software_oa on allsoftware.funder=software_oa.funder; /*EOS*/ -drop table ${stats_db_name}.indi_funder_openess purge; +drop table if exists ${stats_db_name}.indi_funder_openess purge; /*EOS*/ create table if not exists ${stats_db_name}.indi_funder_openess stored as parquet as select allpubsshare.funder, (p+if(isnull(s),0,s)+if(isnull(d),0,d))/(1+(case when s is null then 0 else 1 end) +(case when d is null then 0 else 1 end)) - funder_openess FROM ${stats_db_name}.allpubsshare + funder_openess FROM allpubsshare left outer join (select funder,d from - ${stats_db_name}.alldatasetssshare) tmp1 + alldatasetssshare) tmp1 on tmp1.funder=allpubsshare.funder left outer join (select funder,s from - ${stats_db_name}.allsoftwaresshare) tmp2 - on tmp2.funder=allpubsshare.funder; + allsoftwaresshare) tmp2 + on tmp2.funder=allpubsshare.funder; /*EOS*/ -DROP TABLE ${stats_db_name}.pubs_oa purge; -DROP TABLE ${stats_db_name}.datasets_oa purge; -DROP TABLE ${stats_db_name}.software_oa purge; -DROP TABLE ${stats_db_name}.allpubs purge; -DROP TABLE ${stats_db_name}.alldatasets purge; -DROP TABLE ${stats_db_name}.allsoftware purge; -DROP TABLE ${stats_db_name}.allpubsshare purge; -DROP TABLE ${stats_db_name}.alldatasetssshare purge; -DROP TABLE ${stats_db_name}.allsoftwaresshare purge; +DROP VIEW pubs_oa; /*EOS*/ +DROP VIEW datasets_oa; /*EOS*/ +DROP VIEW software_oa; /*EOS*/ +DROP VIEW allpubs; /*EOS*/ +DROP VIEW alldatasets; /*EOS*/ +DROP VIEW allsoftware; /*EOS*/ +DROP VIEW allpubsshare; /*EOS*/ +DROP VIEW alldatasetssshare; /*EOS*/ +DROP VIEW allsoftwaresshare; /*EOS*/ --RIs Openess -CREATE TEMPORARY TABLE ${stats_db_name}.result_contexts as +CREATE TEMPORARY VIEW result_contexts as select distinct rc.id, context.name ri_initiative from ${stats_db_name}.result_concepts rc join ${stats_db_name}.concept on concept.id=rc.concept join ${stats_db_name}.category on category.id=concept.category -join ${stats_db_name}.context on context.id=category.context; +join ${stats_db_name}.context on context.id=category.context; /*EOS*/ -CREATE TEMPORARY TABLE ${stats_db_name}.pubs_oa as -select rp.ri_initiative ri_initiative, count(distinct rp.id) no_oapubs from ${stats_db_name}.result_contexts rp +CREATE TEMPORARY VIEW pubs_oa as +select rp.ri_initiative ri_initiative, count(distinct rp.id) no_oapubs from result_contexts rp join ${stats_db_name}.publication r on r.id=rp.id join ${stats_db_name}.result_instance ri on ri.id=r.id where (ri.accessright = 'Open Access' or ri.accessright = 'Embargo' or ri.accessright = 'Open Source') and cast(r.year as int)>2003 -group by rp.ri_initiative; +group by rp.ri_initiative; /*EOS*/ -CREATE TEMPORARY TABLE ${stats_db_name}.datasets_oa as -select rp.ri_initiative ri_initiative, count(distinct rp.id) no_oadatasets from ${stats_db_name}.result_contexts rp +CREATE TEMPORARY VIEW datasets_oa as +select rp.ri_initiative ri_initiative, count(distinct rp.id) no_oadatasets from result_contexts rp join ${stats_db_name}.dataset r on r.id=rp.id join ${stats_db_name}.result_instance ri on ri.id=r.id where (ri.accessright = 'Open Access' or ri.accessright = 'Embargo' or ri.accessright = 'Open Source') and cast(r.year as int)>2003 -group by rp.ri_initiative; +group by rp.ri_initiative; /*EOS*/ -CREATE TEMPORARY TABLE ${stats_db_name}.software_oa as -select rp.ri_initiative ri_initiative, count(distinct rp.id) no_oasoftware from ${stats_db_name}.result_contexts rp +CREATE TEMPORARY VIEW software_oa as +select rp.ri_initiative ri_initiative, count(distinct rp.id) no_oasoftware from result_contexts rp join ${stats_db_name}.software r on r.id=rp.id join ${stats_db_name}.result_instance ri on ri.id=r.id where (ri.accessright = 'Open Access' or ri.accessright = 'Embargo' or ri.accessright = 'Open Source') and cast(r.year as int)>2003 -group by rp.ri_initiative; +group by rp.ri_initiative; /*EOS*/ -CREATE TEMPORARY TABLE ${stats_db_name}.allpubs as -select rp.ri_initiative ri_initiative, count(distinct rp.id) no_allpubs from ${stats_db_name}.result_contexts rp +CREATE TEMPORARY VIEW allpubs as +select rp.ri_initiative ri_initiative, count(distinct rp.id) no_allpubs from result_contexts rp join ${stats_db_name}.publication r on r.id=rp.id where cast(r.year as int)>2003 -group by rp.ri_initiative; +group by rp.ri_initiative; /*EOS*/ -CREATE TEMPORARY TABLE ${stats_db_name}.alldatasets as -select rp.ri_initiative ri_initiative, count(distinct rp.id) no_alldatasets from ${stats_db_name}.result_contexts rp +CREATE TEMPORARY VIEW alldatasets as +select rp.ri_initiative ri_initiative, count(distinct rp.id) no_alldatasets from result_contexts rp join ${stats_db_name}.dataset r on r.id=rp.id where cast(r.year as int)>2003 -group by rp.ri_initiative; +group by rp.ri_initiative; /*EOS*/ -CREATE TEMPORARY TABLE ${stats_db_name}.allsoftware as -select rp.ri_initiative ri_initiative, count(distinct rp.id) no_allsoftware from ${stats_db_name}.result_contexts rp +CREATE TEMPORARY VIEW allsoftware as +select rp.ri_initiative ri_initiative, count(distinct rp.id) no_allsoftware from result_contexts rp join ${stats_db_name}.software r on r.id=rp.id where cast(r.year as int)>2003 -group by rp.ri_initiative; +group by rp.ri_initiative; /*EOS*/ -CREATE TEMPORARY TABLE ${stats_db_name}.allpubsshare as -select pubs_oa.ri_initiative, pubs_oa.no_oapubs/allpubs.no_allpubs p from ${stats_db_name}.allpubs - join ${stats_db_name}.pubs_oa on allpubs.ri_initiative=pubs_oa.ri_initiative; +CREATE TEMPORARY VIEW allpubsshare as +select pubs_oa.ri_initiative, pubs_oa.no_oapubs/allpubs.no_allpubs p from allpubs + join pubs_oa on allpubs.ri_initiative=pubs_oa.ri_initiative; /*EOS*/ -CREATE TEMPORARY TABLE ${stats_db_name}.alldatasetssshare as +CREATE TEMPORARY VIEW alldatasetssshare as select datasets_oa.ri_initiative, datasets_oa.no_oadatasets/alldatasets.no_alldatasets d - from ${stats_db_name}.alldatasets - join ${stats_db_name}.datasets_oa on alldatasets.ri_initiative=datasets_oa.ri_initiative; + from alldatasets + join datasets_oa on alldatasets.ri_initiative=datasets_oa.ri_initiative; /*EOS*/ -CREATE TEMPORARY TABLE ${stats_db_name}.allsoftwaresshare as +CREATE TEMPORARY VIEW allsoftwaresshare as select software_oa.ri_initiative, software_oa.no_oasoftware/allsoftware.no_allsoftware s - from ${stats_db_name}.allsoftware - join ${stats_db_name}.software_oa on allsoftware.ri_initiative=software_oa.ri_initiative; + from allsoftware + join software_oa on allsoftware.ri_initiative=software_oa.ri_initiative; /*EOS*/ -drop table ${stats_db_name}.indi_ris_openess purge; +drop table if exists ${stats_db_name}.indi_ris_openess purge; /*EOS*/ create table if not exists ${stats_db_name}.indi_ris_openess stored as parquet as select allpubsshare.ri_initiative, (p+if(isnull(s),0,s)+if(isnull(d),0,d))/(1+(case when s is null then 0 else 1 end) +(case when d is null then 0 else 1 end)) - ris_openess FROM ${stats_db_name}.allpubsshare + ris_openess FROM allpubsshare left outer join (select ri_initiative,d from - ${stats_db_name}.alldatasetssshare) tmp1 + alldatasetssshare) tmp1 on tmp1.ri_initiative=allpubsshare.ri_initiative left outer join (select ri_initiative,s from - ${stats_db_name}.allsoftwaresshare) tmp2 - on tmp2.ri_initiative=allpubsshare.ri_initiative; + allsoftwaresshare) tmp2 + on tmp2.ri_initiative=allpubsshare.ri_initiative; /*EOS*/ -DROP TABLE ${stats_db_name}.result_contexts purge; -DROP TABLE ${stats_db_name}.pubs_oa purge; -DROP TABLE ${stats_db_name}.datasets_oa purge; -DROP TABLE ${stats_db_name}.software_oa purge; -DROP TABLE ${stats_db_name}.allpubs purge; -DROP TABLE ${stats_db_name}.alldatasets purge; -DROP TABLE ${stats_db_name}.allsoftware purge; -DROP TABLE ${stats_db_name}.allpubsshare purge; -DROP TABLE ${stats_db_name}.alldatasetssshare purge; -DROP TABLE ${stats_db_name}.allsoftwaresshare purge; +DROP VIEW result_contexts; /*EOS*/ +DROP VIEW pubs_oa; /*EOS*/ +DROP VIEW datasets_oa; /*EOS*/ +DROP VIEW software_oa; /*EOS*/ +DROP VIEW allpubs; /*EOS*/ +DROP VIEW alldatasets; /*EOS*/ +DROP VIEW allsoftware; /*EOS*/ +DROP VIEW allpubsshare; /*EOS*/ +DROP VIEW alldatasetssshare; /*EOS*/ +DROP VIEW allsoftwaresshare; /*EOS*/ --Funder Findability -drop table ${stats_db_name}.indi_funder_findable purge; +drop table if exists ${stats_db_name}.indi_funder_findable purge; /*EOS*/ create table if not exists ${stats_db_name}.indi_funder_findable stored as parquet as with result_findable as @@ -1151,10 +1151,10 @@ with result_findable as group by p.funder) select allresults.funder, result_findable.no_result_findable/allresults.no_allresults funder_findable from allresults - join result_findable on result_findable.funder=allresults.funder; + join result_findable on result_findable.funder=allresults.funder; /*EOS*/ --RIs Findability -drop table ${stats_db_name}.indi_ris_findable purge; +drop table if exists ${stats_db_name}.indi_ris_findable purge; /*EOS*/ create table if not exists ${stats_db_name}.indi_ris_findable stored as parquet as with result_contexts as @@ -1175,7 +1175,7 @@ allresults as group by rc.ri_initiative) select allresults.ri_initiative, result_findable.no_result_findable/allresults.no_allresults ris_findable from allresults - join result_findable on result_findable.ri_initiative=allresults.ri_initiative; + join result_findable on result_findable.ri_initiative=allresults.ri_initiative; /*EOS*/ create table if not exists ${stats_db_name}.indi_pub_publicly_funded stored as parquet as with org_names_pids as @@ -1195,6 +1195,7 @@ and pf.publicly_funded='yes') foo) select distinct p.id, coalesce(publicly_funded, 0) as publicly_funded from ${stats_db_name}.publication p left outer join ( -select distinct ro.id, 1 as publicly_funded from result_organization ro +select distinct ro.id, 1 as publicly_funded from ${stats_db_name}.result_organization ro join ${stats_db_name}.organization o on o.id=ro.organization -join publicly_funded_orgs pfo on o.name=pfo.name) tmp on p.id=tmp.id; \ No newline at end of file +join publicly_funded_orgs pfo on o.name=pfo.name) tmp on p.id=tmp.id; /*EOS*/ + diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/workflow.xml b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/workflow.xml index f15f22320..709de6595 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/workflow.xml @@ -64,6 +64,26 @@ hadoop_user_name user name of the wf owner + + + sparkSqlWarehouseDir + + + + sparkClusterOpts + --conf spark.network.timeout=600 --conf spark.extraListeners= --conf spark.sql.queryExecutionListeners= --conf spark.yarn.historyServer.address=http://iis-cdh5-test-m3.ocean.icm.edu.pl:18088 --conf spark.eventLog.dir=hdfs://nameservice1/user/spark/applicationHistory + spark cluster-wide options + + + sparkResourceOpts + --executor-memory=6G --conf spark.executor.memoryOverhead=4G --executor-cores=6 --driver-memory=8G --driver-cores=4 + spark resource options + + + sparkApplicationOpts + --conf spark.sql.shuffle.partitions=3840 + spark resource options + @@ -75,17 +95,21 @@ ${hive_metastore_uris} - hive.txn.timeout - ${hive_timeout} + hive.txn.timeout + ${hive_timeout} hive.mapjoin.followby.gby.localtask.max.memory.usage 0.80 - - mapred.job.queue.name - analytics - + + oozie.action.sharelib.for.spark + ${oozieActionShareLibForSpark2} + + + mapred.job.queue.name + analytics + @@ -133,164 +157,164 @@ ${hive_jdbc_url} - stats_db_name=${stats_db_name} - openaire_db_name=${openaire_db_name} + stats_db_name=${stats_db_name} + openaire_db_name=${openaire_db_name} - + ${hive_jdbc_url} - stats_db_name=${stats_db_name} - openaire_db_name=${openaire_db_name} + stats_db_name=${stats_db_name} + openaire_db_name=${openaire_db_name} - + ${hive_jdbc_url} - stats_db_name=${stats_db_name} - openaire_db_name=${openaire_db_name} + stats_db_name=${stats_db_name} + openaire_db_name=${openaire_db_name} - + - + ${hive_jdbc_url} - stats_db_name=${stats_db_name} - openaire_db_name=${openaire_db_name} + stats_db_name=${stats_db_name} + openaire_db_name=${openaire_db_name} - + - + ${hive_jdbc_url} - stats_db_name=${stats_db_name} - openaire_db_name=${openaire_db_name} + stats_db_name=${stats_db_name} + openaire_db_name=${openaire_db_name} - + - + ${hive_jdbc_url} - stats_db_name=${stats_db_name} - openaire_db_name=${openaire_db_name} + stats_db_name=${stats_db_name} + openaire_db_name=${openaire_db_name} - + - + ${hive_jdbc_url} - stats_db_name=${stats_db_name} - openaire_db_name=${openaire_db_name} + stats_db_name=${stats_db_name} + openaire_db_name=${openaire_db_name} - + - + ${hive_jdbc_url} - stats_db_name=${stats_db_name} - openaire_db_name=${openaire_db_name} + stats_db_name=${stats_db_name} + openaire_db_name=${openaire_db_name} - + - + ${hive_jdbc_url} - stats_db_name=${stats_db_name} - openaire_db_name=${openaire_db_name} + stats_db_name=${stats_db_name} + openaire_db_name=${openaire_db_name} - + - + ${hive_jdbc_url} - stats_db_name=${stats_db_name} - openaire_db_name=${openaire_db_name} - external_stats_db_name=${external_stats_db_name} + stats_db_name=${stats_db_name} + openaire_db_name=${openaire_db_name} + external_stats_db_name=${external_stats_db_name} - + - + ${hive_jdbc_url} - stats_db_name=${stats_db_name} - openaire_db_name=${openaire_db_name} - external_stats_db_name=${external_stats_db_name} + stats_db_name=${stats_db_name} + openaire_db_name=${openaire_db_name} + external_stats_db_name=${external_stats_db_name} - - + + ${hive_jdbc_url} - stats_db_name=${stats_db_name} - openaire_db_name=${openaire_db_name} + stats_db_name=${stats_db_name} + openaire_db_name=${openaire_db_name} - + ${hive_jdbc_url} - stats_db_name=${stats_db_name} - openaire_db_name=${openaire_db_name} + stats_db_name=${stats_db_name} + openaire_db_name=${openaire_db_name} - + ${hive_jdbc_url} - stats_db_name=${stats_db_name} - openaire_db_name=${openaire_db_name} + stats_db_name=${stats_db_name} + openaire_db_name=${openaire_db_name} - + ${hive_jdbc_url} - stats_db_name=${stats_db_name} - openaire_db_name=${openaire_db_name} + stats_db_name=${stats_db_name} + openaire_db_name=${openaire_db_name} @@ -322,12 +346,23 @@ - - ${hive_jdbc_url} - - stats_db_name=${stats_db_name} - external_stats_db_name=${external_stats_db_name} - + + yarn + cluster + Step16-createIndicatorsTables + eu.dnetlib.dhp.oozie.RunSQLSparkJob + dhp-stats-update-${projectVersion}.jar + + --conf spark.sql.warehouse.dir=${sparkSqlWarehouseDir} + ${sparkClusterOpts} + ${sparkResourceOpts} + ${sparkApplicationOpts} + + --hiveMetastoreUris${hive_metastore_uris} + --sqleu/dnetlib/dhp/oa/graph/stats/oozie_app/scripts/step16-createIndicatorsTables.sql + --stats_db_name${stats_db_name} + --external_stats_db_name${external_stats_db_name} + @@ -387,18 +422,18 @@ - - - - - - - - - - - - + + + + + + + + + + + + @@ -443,8 +478,8 @@ ${jobTracker} ${nameNode} copyDataToImpalaCluster.sh - - + + ${stats_db_name} ${monitor_db_name} ${observatory_db_name} @@ -505,4 +540,4 @@ - + \ No newline at end of file